ソフトウェア・カウンタにはファイルレジスターを2バイト使用します。これで、ハードウェア
カウンタと合わせて3バイトとなり、分解能は16777216となります。
・測定プログラム
このソフトウェアーカウンターで正確にカウントすることが計測プログラム最大のポイントになります。周波数カウンターの心臓部となる計測プログラムはハードウェア・カウンタの繰り上がりをチェックしながら、ソフトウェア・カウンタを繰り上げて行き、この処理の繰り返しは同時に測定の基準時間であるゲートタイムを作り出しております。
このゲートタイムをきっちり合わせないと、測定の誤差になりますので、ここが肝心です。これにはMPLABのストップウォッチ機能を利用して、計測プログラム&ゲートタイムがぴったり、0.1秒になるようにループカウンタ値やNOPを入れて調整しました。
尚、この計測ループではオーバーフロー検出、レンジ切り替えスイッチ検出を同時に見ております。
・最終カウントチェック
ゲートのタイムアップ後はゲートを閉じて、最終の繰り上がり処理を実行します。
これはTMR0の繰り上がりチェックからゲートクローズまで数十ステップあり、この期間に繰り上がりがあった場合の対応です。ここで最上位からオーバーフローしていた場合はオーバーフローフラグを立てます。
・測定レンジ
今回のプログラムでは最小単位0.1秒の計測ループを構成し、これを10回繰り返すことで
1秒。100回繰り返すことで10秒のゲートタイムを得ます。
この3レンジを PORTB−0に接続された、プッシュスイッチにより、切り替えます。
・プリスケーラー
今回のソフトでは33Mhzまで測定できるように、TMR0のプリスケーラーを選択できるようにしております。分周比は1/8です。このままですと、測定値は1/8となってしまいますので、測定完了後、測定値を8倍にします。従って、測定値最下位の分解能は8ポイントになります。
※プリスケーラーを選択しない場合は3.5Mhzまでしか、測定できません。
■周波数カウンターを作ってみよう
・周波数カウンターの仕様
マイコン PIC16F819 20Mhz動作
基準発振 水晶発振子/水晶発振器 20Mhz
表示器 16X2 LCD キャラクターディスプレー
測定方式 直接計数式
測定レンジ 0.1Sec/1Sec/10Sec 3つのゲートタイムを選択可能
分解能 16777216 (24ビット) 8桁表示
測定精度 絶対精度 6桁程度 水晶発振器による。
測定範囲 DC〜33Mhz プリスケーラーの切り替えが可能 1:1/1:8
入力感度 入力回路 FETアンプ
1Mhz 50mA以上/10Mhz 0.2V以上/15Mhz 0.3V以上
・回路図とソフト
回路図 「f_counter_02.pdf」
測定精度はPICのクロックによります。水晶発振子は安価でトリマコンデンサを付ければ、若干調整(校正)ができます。水晶発振器は調整はできませんが、発振子より精度が高く、たとえば、表示が20.000Mhzとされていれば、この数字が保証されている事を示します。調整いらずで精度も高いのでお手軽ですが少し高価です。
水晶発振器用ソフト 「f_counter_ext.hex」 精度が向上します
水晶発振子用ソフト 「f_counter_hs.hex」 安価に製作可能
・ソフトの使用方法について
プッシュスイッチを押すと、0.1Sec/1Sec/10Secと測定レンジが切り替わります。
プッシュスイッチを5秒以上、長押しするとプリスケーラーがONになります。
■次回の予定
次回は「内蔵プリスケーラーのカウント値の読み出し方法」を解説し、PICマイコンの
性能をフルに引き出し、PIC単体で最大50Mhzまで測定できるようにします。
次回に続く 「次回はこちらから」 |