周波数カウンタを作ってみました。
AVRマイコン「ATmega328P」を使用します。
原理は1秒間のカウント数をLCDに表示します。
(実際は[1.024秒間のカウント数 / 1.024]をLCDに表示します) @8ビットタイマ(タイマ0)は1.024mSの割り込みにし、スタートする。 A16ビットタイマ(タイマ1)は外部クロックT1端子入力をカウントし、 オーバフロー割り込みで16ビットメモリucountをインクリメントするようにし、スタートする。 B@の1000回目の割り込みで T 1000回目を0にリセットする。 U Aのカウンタをストップする。 V ucount、Aのカウント値 (TCNT1) をコピーする。 W ucount、Aのカウント値 (TCNT1) をクリアする。 X Aのカウンタをスタートする。 C以後Bを繰り返す。 DメインルーチンではBVのコピー値を1.024で割り、LCDに表示し続ける。 9MHz以上を計るにときは、分周器を一段(0〜18MHz)あるいは二段(0〜約30MHz)、 入れることにより約30MHz(74HC74の規格)まで計れます。 プログラム |
測定範囲 |
0Hz〜9MHz 分周なし 0Hz〜18MHz 2分周 0Hz〜約30MHz 4分周 |
---|---|
入力電圧 |
約0.1Vp-p以上 @1000Hz 約0.1Vp-p以上 @455KHz 約0.1Vp-p以上 @2MHz |
入力インピーダンス | 1MΩ |
電源 | DC 5V |
測定物 | 測定結果 |
---|---|
8MHz (SG-8002DC EPSON) | 7.999974MHz |
本機の20MHz (SG-8002DC EPSON) | 19.999984MHz |
回路図
実験風景