2009年1月25日日曜日

エアバンド受信機(3)

【AVRソフトウェア】
 前作と同じくAVRを使用した。今回はメモリー等を搭載するため、ATiny2313でBASCOM-AVRを使用して開発するには容量不足である。アセンブラーで開発すればいいのだが、BASCOM-AVRを一度使ってしまうともう戻れない。ATmega48を使うこととした。最近は秋月でATmega88が安く入手できるのでそれでもいい。BASCOM-AVRはデモ版ならば48までは十分使える。最近円高のおかげでBASCOM-AVRの正規版が安く買えるのでこの際購入されてはいかが。私は買いました。

 受信機(無線機)で使用するソフト技術としては、
・ シリアル制御(PLLやDDSの設定)
・ スイッチの取り込み(MODE切り替え等各種設定)
・ ロータリーエンコーダの読み取り(周波数等UP?DOWN)
・ 接点出力(バンド情報出力など)
・ アナログの取り込み(Sメータ)


・ アナログの出力(VCO、リットの制御)
・ カウンタ(周波数カウンタ等)
・ 表示(液晶、LED等)
・ メモリー(VFOメモリ、等の記憶)

 これくらいが作れればほぼ問題ないと思う。1度作ってしまえば、それをアレンジして拡張できる。
またBASCOM-AVRではこれらの制御用コマンドがほとんど用意されている。だから止められない。
今回は、エキスのみをご披露する。なぜなら全体は恥ずかしくて見せられない。どうしてもといわれるお方がお見えならホームページの掲示板等でご連絡ください。

【TC9256PLL制御】
 これは前作と基本的に変わらない。再度解説する
 TC9256の制御は24bit2組のシリアルで行われる。PLLの設定は24bit1組で行われる。これにTC9256の書込み設定アドレス(d0H)を加え32bitを連続で送出することにより設定される。
 まずは、これに使用するポート、変数を用意

   (以下:以降はコメントです)

 Config Portc.0=Output :mega48ポートC0出力に設定TC9256の(3)pin period
 Config Portc.1=Output :mega48ポートC1出力に設定TC9256の(4)pin clock
 Config Portc.2=Output :mega48ポートC2出力に設定TC9256の(5)pin data
 Dim Com01 as Byte
   :TC9256のPLL書込みコマンド上位4bit(1Byteは8bitであるが4bitのみ使用)
 Dim Com02 as Byte
   :TC9256のPLL書込みコマンド下位4bit(1Byteは8bitであるが4bitのみ使用)
 Dim PLL1 as Long:TC9256の分周数データ
 Dim PLL2 as Byte:TC9256のモード、分周ステップ、水晶数端数

それぞれの変数に設定数をセット

Com01=&B00001101
   :TC9256のPLL書込みアドレスd0H(2進数で00001101)の「d」
Com02=&B00000000
   :TC9256のPLL書込みアドレスd0H(2進数で00001101)の「0」 この部分は後で解説
PLL1=12600
   :例えば周波数126MHzで10KHzステップの場合、分周数は12600となる
PLL2=&B1011010
   :使用水晶4.5MHz モードFML ステップ10KHz 詳しくはデータシート参照

ここまで用意ができたらいよいよPLLへ書込み。書込みにはshiftloutコマンドを使用する

Set Portc.0  :period ON
Set Portc.2  :data ON
Set Portc.1  :clock ON
Reset Portc.0 :period OFF
Shiftout Portc.2 , Portc.1 , Cm02 , 2 , 4 , 1 
   :portcの2にデータをLSBから4ビット送出。Shiftoutのモードは立ち下がりエッジでLSBから送出。この部分はデータシートとBASCOMのリファレンスヘルプで勉強してください。
 ここでなぜ4ビットのみの送出かというと。TC9256へ32bit送出する際、最初の8bit以内にperiodをHigh(ON)としなければならない仕様となっているためである。そのため管理しやすいように4bitで1度区切っている。そのためcom01,com02と分けている。このあたりはデータシートとにらめっこである。もっとも苦労したところである。そこで次の行でperiod ONとしている。

Set Portc.0  :perood ON
Shiftout Portc.2 , Portc.1 , Cm01 , 2 , 4 , 1 :アドレスの上位4bitを送出
Shiftout Portc.2 , Portc.1 , Pll1 , 2 , 16 , 1 :分周数データを送出
Shiftout Portc.2 , Portc.1 , Pll2 , 2 , 8 , 1 :TC9256の設定値を送出
Set Portc.1  :clockをHighにしてperiodをOFFにして書き込み終了
Reset Portc.0

以上である。理解できただろうか?
 機会があれば、各種シリアル制御(DDS,PLL、シリパラ変換等)について整理して掲載します。
次回はメモリー関連を予定
写真は今使っているAVR開発用ボードです。

0 件のコメント: