9桁表示器の適用(その1)PIC16F84A周波数カウンター 

UP dated 2011.07.21

● (K7)9桁表示器と組合せの PIC16F84A周波数カウンターの工作例


PIC16F84Aでの周波数カウント検出部と ◇9桁LED表示器 を
SER、ACK、GNDの3本の通信線で接続すると 左写真のようなカウンターとなります。

・下の写真は、蛇の目基板に組み立てたPIC16F84A-FC検出部。
DIP-SWの切り替えにより、IFオフセット等の機能がありますが、固定して使うときは、RB0〜RB7を用途に応じて、H(Openにしておく)、L(GNDに直接接続)にして、セットすればよいので、このDIP-SWは省略できます。

●9桁 LED表示器 周波数カウンター

・PIC16F819LED表示器に SER、ACK、GNDの3線で接続すれば、9桁表示の周波数カウンターとなります。
・通常のゲート時間は、0.2sec としていますが、RA2を B+5Vにプルアップすると ゲート時間=1secとなります。

●CWサウンド 周波数カウンター

PIC16F819LED表示器に代えて、写真のように、圧電スピーカの接続により、100kHz台〜100Hz台の4桁をモールスコードで送出する CWサウンド・周波数カウンターにもなります。
・PICプログラムは、同一で、RA1(ACK)を電源投入前から47kΩ程度の抵抗でB+5Vにプルアップしておくと、CWサウンドモードに分岐するようプログラムされています。(写真では10kΩでプルアップ)

・製作直後に、周波数カウンタ検出部単体での動作が正常かどうかを確認したいときのためにプログラムに組み込んだものですが、自作リグでパネルにLED表示を追加するスペースがない場合に リグ奥深く、VXO部に組み込み、周波数をCWで奏でる常設機能としても有用と思います。
・RA1にとりつけたタクトSWを押すたびに、CWコードを送出します。




● プログラムソース

プログラムソースは、マウス右クリックで「対象をファイルに保存」を選んで、ダウンロード。
 ◇ダウンロードPIC16F84A mvFC.asm & Hex

asmコードは、MPLABでアセンブルできます。ユーザにてプログラムの書き換えが必要な方は、asm内のコメントを参考に変更してください。

・回路図、左上にあるようにRA1を47kΩでプルアップすると CWサウンドモードとなる。タクトSWを推すたびにCWコードで周波数4桁をアナウンスする。(100kHz台〜100Hz台の4桁、例えば、14,321,765Hzのときは、321.7とCWコードを打ち出します。)
・CWスピードは、約10WPM(Speed=120)としてますが、Speedを60に書き直すと 20WPMとなります。

●TMR0オーバフローのまばたき誤差の改良プログラム

・周波数カウントの方法は、過去にHPに掲載している複数の周波数カウンターとほぼ同じです。今回改良を加えたのは、TMR0(8bitカウンタ)が、FFからのオーバフローbit、T0IF の取り扱いです。 本来は、TMR0の繰り上がり、FF→00 のときに、同時にT0IFが、1 になるのが論理的に正ですが、PICは、FFとなった直後に T0IF=1 となります。
従来の公開カウンターは、「FFのとき、繰り上がりが一つ多い」ということで、ゲートを閉じたあと、その分をソフト的に 減算していたのですが、これですと、表示値が一瞬まばたきをして 1桁多い場合と、少ない場合が生じていることがわかりました。 原因、タイミングを探ってみましたが、よくわからず、" 気まぐれ" としか結論をだせない状況でしたので、苦肉の策として、次の方法でこのまばたき誤差を回避しています。

・TGLピンを出力 L として ゲートを閉じたあと、TMR0=FFであったならば、TGLを 280回 L→H→L のトグル操作をして、擬似的に280パルスを入力する。
・すると、PSAからの桁上がりは、1回または2回ありますので、TMR0は、必ず 00または 01となります。TMR0=FFではないので オーバフローbit T0IFの気まぐれは、なくなります。 
・そして ゲートを閉じて、PSA→vfo0、TMR0→vfo1、に数値を取り込んだあと、算術的に 280の減算をします。
・このようにして 一瞬まばたきをすることがなくなりました。


"ひとつ前に戻る"には、ブラウザの「戻る」で戻ってください。
◇ホームページ インデックスへ戻る