Taga_castillo

アマ無線、電子工作、歴史(古代)、ゴルフ、スペイン語、他

LCDの表示Freq=発振Freq±Offset値(その1)

2013-06-03 22:59:13 | 電子工作
1.はじめに
DDS基板で発振周波数をLCD表示することができたものの、表示される周波数は発振周波数そのものなので、受信機のL-OSC等に使うと中間周波数との差分を計算して受信周波数を知る必要があります。そこで、SW等で差分の周波数(中間周波数等)を設定すると、発振周波数(f_osc)と差分の周波数(f_ofst)を加(減)算した周波数をLCDに表示させようと考えました。
できるだけ自分でやってみようと思い、友人に作ってもらったプログラムのソースを追ってみました。C言語は初めてなので全体像は分からないものの、処理を行なっているところはなんとなく分かるような気がしますが、やはりC言語の説明書を参照しないと詳細は分からないようです。
また、マイコン(PIC)については全く分からず、Microchip社のHPから"PIC18F14K50"について書いてある"PIC18F/LF1XK50"のデータシートをダウンロードしました。また、C言語もMicrochip社の"C18 C コンパイラ"のユーザガイドをダウンロードしましたが、両方とも日本語で書かれているものの、私にとっては一読して理解ができるものではありませんでした。

2.製作前の準備
書店に行き、PIC関連の本を探したところ、かなり多くの本が出版されている事が分かりました。ただ、C言語関連は"C18 C"を使ったものが見つからなかったので、友人も推薦していた後閑哲也さんの本で「8ピンPICマイコンの使い方がよくわかる本」と「C言語によるPICプログラミング入門」を購入し目を通しているところです。
PICのデータシートや購入本を拾い読みしてみると、PICは単なる処理装置(MPU)でなくI/O(入出力)等も付加されたコントロール装置(MCU)と言った方が良いことが分かりました。1つの端子に複数機能が割り当てられているので、それをコントロールするためにプログラム(C言語等)による設定が必要である、と言うことのようです。

また、Offset値はディップロータリー(DIP-R)SWを8個使用し8桁分(数十MHz迄)設定し、それをPICで取り込めば良いと考えましたが、PICの端子が足りないことからTTL(最近はCMOSですが)ICでパラレル→シリアル変換を行なわなければならないことが分かり、HP等からCMOS-Dig-ICを探したところ東芝のTC74HC165が見つかったのでこれを使うことにしました。

3.試作
最初からDIP-R-SWを8個とTC74HC165を4個取り付けてもうまく動作するかどうか分からないので、DIP-R-SWを3個、TC74HC165を2個使い、ブレッドボードで試してみることにしました。
DDS発振器(AD9834)を除いたコントロール側(PIC)をブレッドボードに組み、友人に作ってもらったソースプログラムに機能を追加すれば良いのではないかと考えました。プログラムは実際に動いており、PICに対する全体的な設定は既に記述されているので、追加する機能のところだけを考えれば良さそうです。
ただ、ブレッドボードに部品を配置しジャンパしようとするとジャンパしなければならない個所が多数あります。当初ジャンパ線が足りずに手持ちの線の被覆を剥いて作ったのですが接触不良の個所が出てしまい、結局ジャンパ線を購入しなければなりませんでした。

以下の写真のようにかなり込み入っています。



見にくいのですが、上部のボードの左端にUP/DWN-SWがあり、続いてのDIP-ICが"PIC18F14K50"、"TC74HC165"x2個、そしてLCDとなっています。またPICの下にはロータリーエンコーダあります。下部のボードにはDIP-R-SWが3個とトグルSWを置いています。
DIP-R-SWは右から"1","5","8"とセットしており、その値がLCDに1,580Hzと表示されています。これは、発振周波数を0Hz(!?)としてOffset値を表示させているのですが、受信機では10Hz未満のOffset値は必要ないだろうと考えて、その値は"0"に固定してあります。
そして受信機のL-OSCとして使う場合、受信周波数より中間周波数が高い場合と低い場合が考えられるので、この最下位(Hz単位)の4bit中の2bitを利用して、発振周波数からOffset値を減じてLCDに表示するか、あるいは加えて表示するかの判断ビットとし、トグルSWで変えられるようにしています。

プログラムとしては、DIP-R-SWの設定をTC74HC165を介して読み込む関数(30数行)を追加し、後は必要な所に追加・修正した行が20行弱となっています。
ただ、DIP-R-SWの設定を読み込めるようになったのですが、ロータリーエンコーダを回すと周波数の変化が一定にならなかったり飛んだりする場合が多発するので、おそらくDIP-R-SWを読み込むための関数を入れるところがまずいのかな等と思っていました。友人に相談したところ、ビット数が多ければ(今回は16bit)シリアルデータの読み込みは時間がかかるので、分割して読み込む等の工夫が必要だろうとのことでした。

まだまだ前途は多難なようです。