■ AVRマイコンによる 周波数カウンターの製作 ■


 周波数の測定方式には、代表的な下記の2つの種類があります。
 @ 1秒間などの、決められた時間内に入力された、計測パルスの数を数えるゲート方式。
 A 計測パルスのエッジ間隔内にカウントされた、基準クロックの数を逆算するレシプロカル
   方式。
 
 ゲート方式は、低周波から高周波まで広範囲に計測できますが、超低周波帯では、ゲートを開ける時間を広くしなければならないため、測定時間が長くなり、実用的ではありません。
 一方、レシプロカル方式は、計測する周波数により測定時間が決まるため、超低周波帯でも周波数に順応して測定ができますが、高周波帯では、基準クロックの周波数に近づくほど計測誤差が大きくなってしまいます。
 
 この、両方式の利点を備え、できるだけ簡単なハードウェアで構成した、周波数カウンターを製作しました。
 また、AVRマイコンのICP(Input Capture Pin)端子による、タイマーのキャプチャー機能を有効利用し、測定精度を追求して行きたいと思います。




回路の解説
 
1.電源回路

 
 ・5VのACアダプターから電源を供給します。

2.AVRとクロック
 
 ・AVRマイコンは、ATmega88-20を使用し、動作クロックはカウンターの基準クロックを兼ねるため、
  「秋月電子通商」の超高精度クリスタルモジュール 12.8MHzを使用しています。

3.キャラクタLCDモジュール
 
 ・16文字×2行表示の、SUNLIKE社 SC1602BSLB(バックライト付き)を使用しました。
 ・液晶のコントラストは、半固定ボリュームで調整して下さい。
 ・他の互換LCDを使用する場合は、バックライト用の抵抗器を変更して下さい。

4.入力アンプ回路
 
 ・トランジスタ技術誌等でもよく見かける定番のアンプ回路で、定数は、部品が入手しやすいように
  変更してあります。
 ・アンプの入力インピーダンスは、スイッチにより、1MΩと50(47)Ωに切り換えることができます。
 ・調整は、入力に何も接続しない状態で、アンプの出力電圧がDC2.3Vになるように、半固定
  ボリュームで調整して下さい。
 
 ・回路と定数を検討してみましたが、30MHz以上では極端に入力感度が落ちるようなので、アナログ
  入力は1Hz〜30MHzの範囲で使用し、それ以外は、TTL入力に切り換えて使用して下さい。
 ・また、TTLレベルのみに限定する場合は、プリント基板のアンプ回路部分をカットし、小型化
  することもできるようになっています。

5.プリスケラとセレクター部
 
 ・AVRマイコンのタイマークロック入力「T1]や、キャプチャー入力[ICP1]は、AVRの動作クロックに
  同期化されるため、ナイキスト周波数から、クロックの半分以下の周波数しか入力できません。
   (推奨値は1/2.5以下)
 ・製作した回路では、AVRクロックが12.8MHzなので、AVR単体での測定限界が5.12MHzまでと
  なります。
 ・そこで、入力信号をプリスケラで分周し、さらに高い周波数まで計測できるようにしました。
  (ゲート・モード専用の機能です)
 ・分周値は、1/10と1/100が選択でき、74AC14や74AC390の最大動作周波数、約100MHzまで
  測定できるようになります。 (表示の都合で、99MHzを最高値としています)
  (測定信号が30MHz程度までならば、74HC14や74HC390に代替えが可能です)
 
 ・セレクター(74HC153)は、入力信号を、ストレート・1/10・1/100 から選択する動作と、
  ゲート・モードかレシプロカル・モードを選択する機能を併せ持っています。
 
 ・今回の回路で一番の注目点は、ゲート・モード時に、1秒等のソフトウェア割り込みを発生させて、
  計測パルス数を読み込むのではなく、AVR自身で発生させた1Hzパルスを、キャプチャー入力
   [ICP1] に入れて、[T1] からの入力パルス数をキャプチャー・レジスタに転送するため、
  ソフトウェア割り込みによる計測遅延が無くなり、計測ルーチンも、両モードで共有することが
  できる点です。
 

6.スイッチ部
 
 ・本体基板には、タクトスイッチが取り付けられます。
 ・ケースに入れる場合は、液晶表示面との高さを合わせるため、かさ上げ基板を使用します。
 ・かさ上げ基板には、タクトスイッチまたは、FUJISOKUのTMシリーズが取り付けられ、
  0.8mm等のメッキ線をハンダ付けして自立できます。



回 路 図  GIF版 AVRFrqCcir.gif (216KB)  PDF版 AVRFrqCcir.pdf (322KB)

部品配置図  GIF版 AVRFrqCpcb.gif (249KB)  GIF版 AVRFrqCpat.gif (176KB)
アートワーク  GIF版 AVRFrqCAW.gif (95KB)  部品表
   注意! この図面を使用した、いかなる損害にも責任を負いません。

プログラム  テキスト形式 ソースファイル  AVRFrqC101.txt (22KB)
 BASCOM-AVR用 ソースファイル
 (BASCOM-AVR(製品版)が必要です)
 AVRFrqC101.bas (22KB)
 
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。

       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)



 
ケース内部

 
 右側面

 
 後面

 
プリント基板 (Rev.1)

 
基板 部品面

 
基板 ハンダ面

 
スイッチかさ上げ基板

 
基板 前面

 
基板 右側面


AVRマイコン ATmega88の、ヒューズ ビット書き換え
 
AVR ATmega88のシステム クロックは、工場出荷時に、内蔵RC発振器の8MHzで、1/8前置分周器がONに設定されており、外部のクリスタル オシレータを使用するには、AVRのヒューズ ビットを書き換える必要があります。

下記ページの書き換え方法 「6.」を、以下の様に変更して、ヒューズ ビットの書き換えを行います。

    ヒューズ ビット書き換え

 6.[ FusebitC ] の右欄 [ 0:Divide Clock by 8 Enabled ] をクリックすると、右側にプルダウン
   メニューが現れますから、 [ 1:Divide Clock by 8 Disabled ] を選択します。
 
   [ FusebitKLA987 ] の右欄 [ 100010: --- [CKSEL=0010 SUT=10];default value ] を
   クリックすると、右側にプルダウンメニューが現れますから、
   [ 100000: --- [CKSEL=0000 SUT=10] ] を選択します。

「AVRWRT」 ライターの場合は、AWRTf_FrqC.gif



製作について
 
部品表は、部品の背が低い順に記載してありますので、この順番に取り付けて行きます。
 
・ジャンパー線は、すずメッキ線や、被覆電線を使用して下さい。
・1/4W抵抗器は、4目 (2.54X4 = 10.16mm) ピッチで両端を折り曲げて取り付けます。
・1/6W抵抗器は、2目 (2.54X2 = 5.08mm) ピッチで両端を折り曲げて取り付けます。
・積層セラミックコンデンサは、5.08と2.54mmピッチの箇所があります。
・トランジスタは、型番により取付方向が変わる場合がありますから、規格表で確認して下さい。
・ICソケットは、必要に応じて取り付けます。(AVRマイコンを、直接ハンダ付けすることも可能です)
・キャラクタ液晶表示器(LCD)は、ピンソケットとピンヘッダにより取り付けます。
 
・スイッチは、汎用のタクトスイッチや、「FUJISOKU TM1-01」が使用できます。
・スイッチかさ上げ基板を使用することで、LCDとの高さ調整を行えます。
・タクトスイッチには、足の幅が2.54ピッチでない物がありますので、ピンの間隔を基板に合わせて
 調整して下さい。
キースイッチに、「FUJISOKU TM1-01」を使用する場合は、位置決め用ボス(小さな突起)を、
 必ずカッターで切り取って下さい。

・また、接点により、取り付ける向きが決まっていますので、メーカー名が横になる方向で
 取り付けて下さい。
   

5V以上のACアダプターは、絶対に接続しないで下さい。



操作方法
 
1.電源投入
 
 ・電源が投入されると、モードは「ゲート・モード」で、プリスケラ値は「1/1」になります。
 ・[MODE] スイッチを押しながら電源を投入すると、現在のプログラム・バージョンが表示され、
  スイッチを離すと通常動作に入ります。

 
2.表示面のスイッチ操作
 
 ・[MODE] スイッチを押すたびに、「ゲート・モード」と「レシプロカル・モード」が切り替わります。
 ・LCDの左上に、「ゲート・モード」時→ [Gat] 、「レシプロカル・モード」時→ [Rcp] が表示されます。
 
測定可能な
 周波数の範囲
 ゲート・モード  1Hz 〜 99MHz
 アナログ入力は30MHzまで
 レシプロカル・モード  99Sec 〜 200KHz

 ・[PRESCALER] スイッチは、ゲート・モードのみに有効で、押すたびに 「1/1」→「1/10」→「1/100」を
  繰り返し選択できます。
 ・LCDの左下に、「1/1」時→ [P1] 、「1/10」時→ [P10] 、「1/100」時→ [100] が表示されます。
 
プリスケラ 値 測定周波数範囲  分解能 
1/1   1Hz 〜 5MHz  1Hz 
 1/10   10Hz 〜 50MHz  10Hz 
1/100  100Hz 〜 99MHz  100Hz 


 
3.その他のスイッチ操作
 
 ・アンプの入力インピーダンス(終端抵抗)は、プリント基板上のスライドスイッチにより、
  1MΩと50(47)Ωに切り換えることができます。
 
 ・「アナログ/TTL」入力切り替えスイッチは、1Hz〜30MHzの範囲で入力アンプを使用する場合と、
  TTLレベルによる、99秒〜99MHzの測定時に切り換えて使用します。



ソフトウェアの解説
 
 ・プログラムは、BASCOM-AVR (BASICコンパイラ)を使用し、Timer1のキャプチャー(ICP1)と、
  オーバーフロー割り込み処理を、インライン・アセンブラで記述してあります。 (高速処理のため)

キャプチャー割り込みの動作
 
 ・キャプチャー動作は、1Hzパルス(ゲート・モード)または、測定信号(レシプロカル・モード)の立ち下がり
  エッジで、Timer1の値がキャプチャー・レジスタ(ICR1)にコピーされ、同時に割り込みが発生します。
 ・発生した割り込み処理では、キャプチャー・レジスタの値を読み出し、2つ用意されたバッファーに、
  交互に保存していきます。
 ・2個のデータが整った時点で、メインルーチンにデータを渡し、バッファー値の差分を計算して周波数を
  割り出します。
 
 ・バッファーを2つ用意したことで、超低周波帯でも計測信号のエッジ毎に、測定を可能にしています。

オーバーフロー割り込みの動作
 
 ・Timer1および、キャプチャー・レジスタ [ICR1] は、16ビットレジスタなので、広い周波数測定範囲を
  確保するためには、不足が生じます。
 ・そこで、Timer1がオーバーフロー($FFFFを超える)した場合に、割り込みを発生させ、ソフトウェアに
  よる上位16ビットタイマーをカウントし、タイマー値を32ビットに拡張しています。
 
 ・このオーバーフロー割り込み処理には、重要な注意点があります。
 ・タイムチャートのように、オーバーフローとキャプチャー信号が同時、または、2クロック以内に発生した
  場合に、下記の現象が起きます。
 
   (1). オーバーフローよりもキャプチャー割り込みが優先なため、[ICR1]=0000 の状態で、
      オーバーフロー処理が待たされる。
   (2). メインルーチンで2クロック命令を実行中は、2クロック間割り込みが待たされるため、
      [ICR1]=0001になっていても、オーバーフロー処理が、まだされていない。
   (3). メインルーチンで3クロック命令を実行中は、3クロック間割り込みが待たされるため、
      [ICR1]=0002になっていても、オーバーフロー処理が、まだされていない。
      (4クロック、5クロック命令も同様)
 
 ・実際に、[ICR1] が (0000)、(0001)、(0002) の値で、オーバーフローカウント値が+1されていない
  エラーが数分おきに出てしまいます。
 
 ・これを回避するため、キャプチャー割り込みが発生した際に、キャプチャー・レジスタの上位が$00で、
  Timer1のオーバーフローが、まだ処理されていない場合は、32ビットに拡張したタイマー値の
  上位16ビットに、1を加算する処理を施しています。

各 割り込み処理のフローチャート
 
オーバーフローとキャプチャー信号が
同時発生時のタイムチャート

 


メインルーチンでの処理
 
 ・スイッチの状態を調べ、「モード」および「プリスケラ」に対して、表示とセレクターの設定を行います。
 ・キャプチャー割り込み処理から、2個のデータが用意できたとのフラグが受け渡されると、
  2つのタイマー値の差を求め、周波数を割り出して、LCDに「周波数」と「周期」を表示します。
 
 ・BASIC文法なので、表示の桁揃えや、単位の変更は、数行の命令で実現できてしまいます。



○パーツの参考資料
 ・プリント基板  「サンハヤト」 感光基板 40K ガラスコンポジット 片面 1.0tx75x100mm
 ・ケース  「TAKACHI」 YM-100 W100xH30xD70mm
 ・ACアダプター  「秋月電子通商」 超小型スイッチングACアダプタ 5V 2A

◎ このプリント基板と、書き込み済みAVRを、実費頒布しております。
 
  基板・部品の頒布室




LCD to LED ボードへの対応
 
この周波数カウンターの表示を、文字サイズの大きい7セグメントLEDに変更できます。
表示ユニットは、当ページの「7セグメントLED ダイナミック点灯モジュール」を使用します。

このユニットを、LCDと同じ14ピンコネクターに差し込むだけで動作します。
 
また、「ゲート」・「レシプロカル」の切換と、「Hz」・「Sec」の単位を表示するために、別途LEDを4個使用します。

AVRの空きポートに、回路図のピンクで囲った4個のLEDと抵抗器を追加します。
 
LEDの基板は、ケースの配置により各自で製作して下さい。
 
プリント基板には、4つの空きポートに未使用のランドが4つ用意されています。
この穴に、4ピンのピンソケットを取り付けるか、直接ビニールコードでLEDへ配線して下さい。




  「LCDモード」と「LCD to LEDモード」の共用プログラムです。
プログラム  テキスト形式 ソースファイル  AVRFrqC121P.TXT (34KB)
 BASCOM-AVR用 ソースファイル
 (BASCOM-AVR(製品版)が必要です)
 AVRFrqC121P.bas (34KB)
 
注意! 著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。

       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)

●AVRマイコン ATmega88(P)のヒューズ ビットは、上記LCDバージョンと同じです。


操作方法 (LCD to LED 共用プログラム)
 
1.電源投入
 
 ・[SW3] を押しながら電源を投入すると、「LCD to LED」モードに設定されます。
 ・LEDに「LCD-LED」と表示され、この状態は内蔵EEPROMに記憶されますので、次回からは
  電源の投入だけでこのモードが維持されます。
 
 ・[SW2] を押しながら電源を投入すると、「LCD」モードに設定されます。
 ・LCDに「LCD Mode」と表示され、この状態は内蔵EEPROMに記憶されますので、次回からは
  電源の投入だけでこのモードが維持されます。
 
 ・[SW1]を押しながら電源を投入すると、現在のプログラム・バージョンが表示され、
  スイッチを離すと通常動作に入ります。
 
 ・電源投入時は、測定モードが「ゲート・モード」で、プリスケラ値は「1/1」です。

 
2.表示面のスイッチ操作 (LCD to LED モード)
 
 ・[MODE] スイッチを押すたびに、「ゲート・モード」と「レシプロカル・モード」が切り替わります。
 ・測定モード表示のLEDが、それぞれのモードに合わせて点灯します。
 
測定可能な
 周波数の範囲
 ゲート・モード  1Hz 〜 99MHz
 アナログ入力は30MHzまで
 レシプロカル・モード  99Sec 〜 200KHz
 

 ・[PRESCALER] スイッチは、ゲート・モードのみに有効で、押すたびに 「1/1」→「1/10」→「1/100」を
  繰り返し選択できます。
 ・周波数表示の場合に、「1/10」時 →下1桁が[o] 、「1/100」時 → 下2桁が[oo]で表示されます。
 
プリスケラ 値 測定周波数範囲  分解能 
1/1   1Hz 〜 5MHz  1Hz 
 1/10   10Hz 〜 50MHz  10Hz 
1/100  100Hz 〜 99MHz  100Hz 

 ・未使用となっていた[SW3]が、「周波数」と「周期」の表示切り替えとなります。
 ・単位表示のLEDが、それぞれの単位に合わせて点灯します。
  (「周波数」 → [Hz] , 「周期」 → [Sec])
 
 
周期表示の単位表示
なし μS
mS nS

 
3.その他のスイッチ操作
 
 ・アンプの入力インピーダンス(終端抵抗)は、プリント基板上のスライドスイッチにより、
  1MΩと50(47)Ωに切り換えることができます。
 
 ・「アナログ/TTL」入力切り替えスイッチは、1Hz〜30MHzの範囲で入力アンプを使用する場合と、
  TTLレベルによる、99秒〜99MHzの測定時に切り換えて使用します。


 
◎ このプリント基板と、書き込み済みAVRを、実費頒布しております。
 
  基板・部品の頒布室





   電子工作の部屋 Top へ 前のページへ戻る