やれやれ、今度のLCDライブラリはピンの配置を自由に選べる最新版で問題ないはずだがと、ソースを見る。あーっ、単純にループする待ち時間が調整されていない。今度のプログラムは最速の20Mhzである。LCDはビジーフラグが動く前の段階の初期化に、一定の待ち時間を作らないとうまく動かない。これもコンパイラーオプションのF_CPUなどを使って自動的に変わるようにしないといけないな、と、このころは余裕を持ってデバッグしていた。その後もLCDは頑として動こうとしない。ビジーフラグを見るルーチンもはずしてみたが駄目、ウェイトの時間を増やしても駄目、コマンドenableの間隔を変えても駄目。配線の導通チェックも異常なし。UARTで状況を見たくても、もうメモリがない。調べるところがなくなって、またロジアナに助けを求めることにした。そのときふと、データシートの表紙が目に留まった。Tiny2313には2つ種類があって、10Mhzまで動く低電圧版のTiny2313Vと、Vなしの20MhzまでのTiny2313がある。あーっ、私が秋月から¥100で買ってきた2313は低電圧版の2313Vだ。今までの何の問題もなく動いていた。UARTのときはピンが少ないので20Mhzでも動いたが、LCDのような多ピン駆動のときはロードがかかって駄目になるのだろうか。あわててオシロでクロックを確認する。電圧が低いけれど、クロックは20Mhzで動き、波形の乱れもない。ロジアナで見てみよう。動いていなければ買いなおしだ。普通版の2313も秋月では¥100の値段に変りはなかった。しながらロジアナをつなぐ。これが、何と、ちゃんとというか、所定の初期化のコマンドシーケンスを送っている。初期化した後、全く反応がない。へえ、低電圧版でも20Mhzで動くんだと妙なところで感心するが、先が止まっていることに変りはない。これはもうLCDが原因ではない。何か別の原因でプログラムがスタックしている。試しにメインループに入る前にLCDにテストメッセージを出してみる。LCDが動いた!やっぱり、他の原因だ。UARTの部分をとりはずしただけである。それ以外に不要と思われるステートメントはフラッシュ節約のために色々変えた。いえば初期化の割込み禁止のステートメントもはずした。ついでに解除(sei())のステートメントも。ええー、割り込みは禁止にしない限り、解除を入れる必要はないよね、と思いながらも半信半疑で元に戻して動かしてみる。驚くべきことに、これで動いたのである。タイマーの割込みが入らないのでスタックしていたのである。割込みを使うときにはsei()が必ず必要とは全く考えもしなかった。バグは外に潜んでいたのだ。今日の朝からのトラブルがこれで解決した。ことでLCDに周波数が表示された。表示用だから更新間隔は短いほうが良いと最初考えていたが、余り早いと、下2桁くらいが見えなくなり、こういう表示は0.5秒くらいが一番見やすいことがLCD表示をさせてみて始めてわかった。フラッシュサイズはほぼ満杯の状態でこのままでは何も出来ない。メモリリダクションの作業に入る。8桁の数字の一行表示だけに機能の豊富なxatoiライブラリを使うのは勿体無い。自前のルーチンを作る。バイト近くを減らした。次はLCDライブラリである。配置が自由だけれどサイズは少し大きくなっている。これを今までのライブラリに切り替える。こちらは150バイト近くのメモリ節減になった。この余ったメモリを、やりたかった低周波数での小数点以下の表示に150バイトほど費やして、結局フラッシュサイズは、1926バイトに納まった。Tiny2313で、5hzから10Mhzまでの周波数カウンターのソフトの完成である。何とか、2313の2Kバイトのフラッシュに押し込むことができた。計測からレシプロカルの切り替えは500Khzで自動に行い、11Mhzあたりまでこれだけで測れる。20MhzまではカウンターICで4分周して使う予定でこれは実装のときに細かいことを決めるつもりだ。分解能はレシプロカルはタイマーTickが0.05μsで、0.2秒ほど測っているので、上限の500khzあたりでも1hz近辺(理論上)。計測も0.2秒の測定ゲートで分解能は5hzとなっている。4分周するときは、測定ゲートを倍くらいにして分解能を10hz以下にしたいと思っている。ここにTiny2313の周波数カウンターのソースコードをAVRstudioのプロジェクトファイルの形で置いておきます。ピンアサインはソースのコメントをご覧下さい。PD5がカウンター入力であることが変わっているだけで、それ以外は変わったところはありません。回路図は全体が完成してから公開する予定です。入っているLCDライブラリのLCD.cとLCD.hは、名前は同じですが、最新のものとは中身が変わっています。「AVR」カテゴリの記事ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)オシロのテストどころかソフト開発で大はまり(2017.07.26)超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)motionの動体検知はRaspi3の電源が安定しない(2017.04.16)赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)コメント外部クロックだとそんなに規格外でも動きますか。低電圧版と通常版は発振機構のところだけが違うのでしょう。Mega128は16Mhzが上限ですが、20Mhzでも問題なく動くようですし、Mega168(Max20Mhz)はこのあいだ24Mhzで動かして平気でした。アマチュアが動かしてみるだけと言うのなら結構大丈夫なようですね。記事を興味深く拝見いたしました。私は当初、無印とVは同じ物で検査時の仕様の違いだけで刻印を変えていると考えていたのですが、ある日10MHzと20MHzのセラロックを交互に付け替えて動作テストしていましたところ、同じヒューズビット設定で同じプログラムを書き込んでいるにも関らずVと20MHzのセラロックの組み合わせでテストした場合のみプログラムが正常に動いていない事が発覚いたしました。耐クロック特性を見るために外部クロック供給にしていた場合は両方とも40MHzくらいまでは動作していたので、どぉやら発振を構成している回路の時定数設定に違いがあるような感じです。22時42分コメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。周波数カウンターと秋月FGキットの合体。