2方式の周波数カウンターを2313で動かす

基本的な誤り(10/29/08)
 どうもおかしい。クロック20Mhzのマイコンの周波数計測が最大1Mhz以下というのはどうみてもおかしい。Webでもういちど調べてみた。こんなにみんな苦労していない。CPUクロックの半分の周波数は測れると書いてある。どうしてだろう。あああ、なんだ、わかった。カウントを数える直接計測はもっと簡単な方法があるのだ。タイマー/カウンターの機能に、外部クロックによるカウンターの駆動というのがあるではないか(だからカウンターなのだ)。今まで何と言う無駄なことをやっていたのだ

 やれやれ、おかしいと思った。これを使えば、少なくともクロックの半分くらいまでは測れるはずだ。プログラムを大幅に変更することにする。ただし、カウントするだけなので、計測時間が0.1秒なら分解能は10hzになるし、低周波では最低でも1秒は測らないと使い物にならない。これまでのレシプロカル方式で、時間を内部クロックで測りなおすという2本立ての測定ルーチンが必要になる。メモリが足りるかどうか。

 メモリのことはあとで考えるとして、カウンター入力によるプログラムをコーディングする。こちらのロジックは滅法簡単で、一定時間のゲートを開けてカウントするだけである。あっけなく出来た。動かしてみる。おお、10Mhzまでなら楽々測定できる。10Mhzがほぼ測定限界で、11Mhzではかえって周波数が落ちる。ハングはしない。

 計算を楽にするため切りの良い時間を作るのに良いタイマーの設定が見つかった。CPUクロック20Mhzで、8bitタイマーのプリスケールを64にしてTickを3.2μsにすると、122回(256×122×3.2=99.9424ms)まわした端数が18(0.0032×18=0.0576ms)できっちり、0.100秒になる。クロックが正確ならどこまでも0.1秒である。

 オシロとの周波数の誤差は全くなかった。温度特性はわからないが使っているクリスタルは一ヶ¥50 の普及品なのに立派なものである。少なくともオシロの表示する数字とは完全に一致している。1桁ほどこちらのほうが細かい。満足満足である。ただ前にも書いたように、あくまでも周波数測定ではなく、シグナルジェネレーターの周波数表示用のために作っている。なるべく早いタイミングで計測をしたい。とすると分解能を上げるためには、前に作ったレシプロカル方式のロジックを併用する必要がある。どのあたりでこの直接計測に切り替えるか、レシプロカル方式の測定期間をどの程度にするか、調べなければならないことが沢山でてきた。

 まず、レシプロカル方式は、どれだけ細かい時間まで計測できるかが、有効桁数を上げる決め手になるの

(1/7) 次»

AVR
2008/11/03




コメント(2)|コメントを書く

カテゴリー一覧
最近のコメント

このブログを友達に教える

コミュニティ | 有名人・芸能人ブログ | ケータイ占い | ケータイ小説 | 掲示板


画面TOP↑


powered by cocolog