立ち上がりパルスかどうか決めるスイッチ(前の状態を保存)を測定の前でクリアしていない。プログラムが動く最初は初期化しているが、このルーチンは無限ループの中にあるので、その都度、クリアしておかないといけない。わかってしまえば、馬鹿みたいな原因である。前回の測定終了後のスイッチの状態で、たまたま正しくなったり間違ったりする。不安定な状態に見えるが原因は単純なミスである。今回は、タイマーのお守りに注意が集中し、割込み要求のマスクや、レジスタ設定と初期化などには熱心にチェックしていたが、ここまでのチェックを怠っていた。それにしても、ロジックアナライザーが大活躍である。その威力をあらためて実感する。内部でわからないときはこうしたプローブ点を作ればいいのだ。嬉しくて、電源を切るときロジックアナライザーに深々と頭を下げてお礼をした。これで、周波数カウンターの開発は峠を越した。必要部品も確定したので、安心してケースの工作にも入れる。25Mhzまでの計測は最初、リレーかなにかで10Mhz以上を4分周に切り替えて測ろうと思ったが、少し大げさすぎるので、直接計測式はすべて4分周で400khz以上を測り、それ以下はレシプロカル方式で測定しなおすことにする。計測は測定期間をこれまでの4倍(400ms)にすれば、当初の10hzの分解能は確保できるはずだ。なんとかTiny2313に納まった(11/03/08)ロジアナのおかげでトラブルも収束し、直接計測式も、レシプロカル式もほぼ正確に周波数が出るようになった。次は、テスト用のUARTから、実装用のLCD表示に切り替える作業が待っている。フラッシュサイズはもう2Kバイト近くで余裕がない。祈るような気持ちで、UARTのライブラリをはずし、LCDを組み込む。2Kバイトを超えてしまっていた。8桁の周波数を表示するためchaNさんのxatoiのライブラリを利用させてもらっている。書式付の出力関数(xprintf)は特に便利で楽なのだが、コードを喰うのが難点で、xprintfのステートメントひとつで100バイト近く増えるときがある。テスト用にいくつか書いていた出力関数をひとつに減らし、ライブラリにある使っていない関数をコメントアウトしたりして、何とか2K(2048バイト)以内におさめた。