なんでマイコンで周波数カウンターが出来るの? まず最初に解からなかったのが、なんでPICマイコンで周波数カウンターが出来るの? でした。 理屈は意外と簡単、PICの内部には8ビットカウンターとプリスケーラーがあります。このカウンターは8ビットなので外部からパ ルス信号を入力すれば00からFFまでカウントできます。 例えば一秒間だけカウンターにパルスが入力されるようにしておけば、200回のパルスがカウンターに入ってくれば、カウンター は200をカウントします。次に一秒後にカウンターの数値をみて、LEDなどに表示、次のカウントにそなえてカウンターをクリアー するという一連の作業をプログラムで実行させてやれば、基本的な最大測定周波数256Hzの周波数カウンターができます。 但し、この内部カウンターは最高周波数2MHz程度しかないのと、8ビットしかないので桁数が足りません。 このままでは7MHzの信号はカウントできないので、次のようにします。 1.カウンターの前段にプリスケーラーをおいて、入力信号を1/2、1/4というように分周してやる。 2.カウンターからのオーバーフロー信号が出るたびに、別のレジスターに+1づつ加算していく。 |
今までのカウンターとの違い 今までの周波数カウンターの考え方では、ゲート時間をWaitルーチンなどで作って、その時間内に入力されたパルス数をカウン ト、表示、でしたがWaitルーチンの間にカウンターはどんどんオーバーフローしていきます。 そこでマイコンの周波数カウンターでは、左のフローのようにカウンターのオーバーフロー信号を繰り返しチェックし、オーバ ーフローすればレジスタに+1加算するという作業をゲート時間相当繰り返すというプログラムになります。 入力周波数がどんどん高くなって、プログラムでのオーバーフローが検出できなくなるので、このプログラムは出来るだけ少な いステップ数で実現する必要があります。 レジスターはカウント数分準備しますがここではレジスター1と2を用意しています。これでカウンターの8ビット分と合わせて、 256*256*256=16777216までカウントでき、10MHz(10,000,000)がカウント出来るようになります。 後は、このフローを基本として、LED表示プログラムを追加していけばOKです。 プログラムの作成は全部一気に作らず、必要な機能をモジュール化にして少しずつ練習のつもりで作っていけば楽しみながら、 続けられます。 LEDのON/OFFが出来たら、次はWaitルーチンを作ってみる、次に7segLEDを表示してみる、というふうに機能毎にプログラムを 練習していきました 今までと違って、漠然と練習プログラムを作るのではなく、周波数カウンターを作っているという目標があれば続けられますよ。 |