PIC周波数カウンターの製作5

'05.11.13
 VFO周波数表示用PICマイコン周波数カウンターもようやくそれなりに動作するようになってきました。 ソフト初心者として始めて約1.5ヵ年、基本ソフトをコピーし自分なりの機能を追加、通勤のバスの中でのソフト開発には開発 ノートが大変役立ちました。
今回はプログラムの全体を紹介します。
プログラム全体説明
   他人がつくったプログラムを参考にする場合、どの部分がどのような動作をしているのか説明があると理解しやすくなりますの で、参考になれば。
メインプログラム
   メインはサブルーチンのコールだけです。こうしておけば流れがすぐにわかります。
 各ルーチンについて簡単に説明します
INTIAL_SET
 各ポート設定などPICの設定を初期化します。
LEDTEST
 LEDのテストとして"8"表示を左から順に0.5秒だけ点灯します。
MEAS
 周波数測定のメイン部分になります、カウントのループを利用してLED表示のステップも挿入しています。LEDは3桁なので全体 ループ回数を3で割った回数として、あまりは適当に”NOP”で調整しています。
 クロックを10MHzとしましたのでループ回数は250000回必要になります。ループ回数を変更すれば他の周波数のクロックも使え ます。
CARY_ADD
 ループから抜ける直前に発生するTMR0のオーバーフローをチェックします、他のプログラム例ではこの処理をしていないのが 一般的ですが、VFOなどの組み込みカウンターにするには絶対に必要です。
DATx4
 プリスケーラーとして1/4に初期設定していますのでここで4倍にして戻します。
DATADD
 IF周波数を補正します、今回のIFは39KHzとしていますのでCWビート分と合わせて39.3を加算して表示します。
MODE_CHK
PICのポートRB7,RA3をチェックしそれぞれの状態に応じた処理をします。
 RB7をGNDにするとLED表示が上位3桁表示に変わります、RA3をGNDにするとIF周波数加算前のデーターを表示します。 送信モード時のデーター表示に使用します。
RA3とRB7を同時にGNDにすると表示を消灯しています。CW送信時に受信表示と送信表示が切り替わるたびに表示がちらつくのを 防止するため、妥協案として表示を消してしまいました。
 又送信から受信に切り替わる際にディレーを持たせています。
DATCNV
 バイナリーデーターを10進BCDに変換します。この部分は標準アプリケーションをそのまま使用しています。
DISPLAY
 表示データーを作っています。RETLW命令の部分はプログラムカウンターがFFを超えないように初期設定を後ろの方に持ってき たりして工夫しています。
使用してみて
 VFOダイアルをゆっくり回すしても、すばやく動かしてもLED表示が気持ちよく変わっていきます。メーカー製ではどんな高級 トランシーバーでもダイアルをすばやく動かすと表示は追従しません。やっぱりダイアルは"こうでなくちゃ"、と一人気に入っ ていますが、実際に受信機に組み込むとノイズなどのトラブルも出ます。
 そのあたりの解決策はLow IF トランシーバーの製作過程で紹介していきます。

プログラムリスト参照

  Top Menu