2009年2月7日土曜日

エアバンド受信機(4)

【AVRソフトウェア続き】 かなり時間が経過してしまった。今回はPLL以外のプログラムについて解説する。
 本来一番最初に説明するのは、アルゴリズムであるべきと思うが、いつものように成り行きで作るので後で「あれ?」と思うようなプログラムになっている。そこでとりあえずブロックダイアグラムを描いてみた。まあ参考程度にしてください。基本はMainルーチンであることはいうまでもないが、この中に「VFOモード」と「メモリーモード」の2モードがある。それ以外は、前回解説の「PLL設定」と「LCD書込み」「メモリー書込み」のサブルーチンがあり、必要に応じて呼び出している。

●メモリー
 今回の習得目的であるメモリー(ROM)であるが、実に簡単に利用できる。この受信機では以下の目的でメモリーを使っている

* PLL可変時のステップ設定(1CH)
* モード記憶(1CH) 電源OFF時にそれまでのモード(VFO/MEMORY)を記憶
* メモリー番号記憶用(1CH) メモリーモードのチャンネルを記憶 モード切替時はこの番号で呼び出される
* 受信機の周波数記憶用(10CH) 中身はPLLの分周数である
* 受信機の周波数記憶用(1CH)  VFOモードの周波数記憶

以上である。
メモリーの書込みは以下のようにプログラムしている。
イニシャルセットの変数定義で

Dim Stepl As Eram Byte At $01 '1=10KHz 10=100KHz 100=1MHz
Dim Model As Eram Byte At $02 '0=VFO 1=Memory
Dim Memol As Eram Byte At $03 'memory No.1-10
Dim Flast As Eram Long At $05 ‘VFO freq
Dim Memo(10) As Eram Long At $09 'memory freq 1-10

としてROM領域を確保し以下の変数で受け渡しをする

Dim Mmode As Byte
Dim Fstep As Byte
Dim Memon As Byte
Dim Mainf As Long
Dim Flag0 As Byte

プログラムの中での使用は、書込みと読み込みである。
書込みは、
メモリの1CHに 126MHzを記憶する場合 PLL分周数は(126-10.7)×100=11530となるので

Memon=1 書込みチャンネルに1をセット
PLL=11530 PLLの変数に11530をセット
Memo(1)=PLL メモリーへ書き込み

以上である
読み込みは

PLL=Memo(1)
としてPLL変数をPLL書込みルーチンに送ればよい。
●スイッチ取り込み
 スイッチとして

1)周波数ステップ変更用
2)VFO/メモリ切り替え
3)メモリ書込み
の3種類を使用

スイッチを読み込むとはポートの情報を読むことなのでPin命令で読み込むことができる
ModeをVFOモード、メモリモードの状態用変数とし、スイッチをポートB の1に繋いだとして

Config Portb = Input ポートBをinputに設定
Portb = 1  ポートBをプルアップ(スイッチがオープン状態でHigh)
Mode=Pinb.1

これでModeがHighならばVFOモード。Lowならばメモリモードへ分岐すればいい。
しかし今回は

Debounce PinB.1 , 0 , Mode

とDebounce命令を使用してみた。この命令はエンコーダー取り込みに使っているが、エンコーダもいわばスイッチである。
なぜDebounce命令を使用したかというと、1行で分岐命令まですべてを書けるからである。If~then~elseで書くより見通しがいい。どちらがメモリ消費が多いかは気にしていない。
上決めいれはポートBが1ならばラベルModeへジャンプという命令である。

以上プログラム概要を書いてみた。でもたぶん皆さんにはよくわからないと思う。
書いている本人もだんだんわからなくなってきている。
もう少しBascom-AVRに慣れてきたら、ホームページにでもまとめていきたいと思う。
もし、参考にしたいという人がいるようでしたら(いないと思うが)コメントにでも書き込んでください。

以上で今回の「エアバンド受信機」は終わり。

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開発用ボードです。

2009年1月17日土曜日

エアバンド受信機(2)

回路説明
 回路説明といっても、特に目新しいことは無いと思うが、一応各回路説明を書いてみる
【仕様】
受信範囲:119MHz~134MHz
受信形式:A3E(旧A3)
 航空無線の使用範囲は108Mhz~138MHzの30MHzも範囲がある。  製作を開始ししたときはどうにかなるかとはじめたが、やはりこの範囲をカバーするのは難しかったため、関東地区の主要電波が聞こえる範囲として119MHzから134MHzの15MHzとした。

【RF増幅】
 RF増幅はTA7358
 ベース接地増幅であり、入力インピーダンスが低いためコイルタップから入力。コイルはFCZ7S144を使用した。受信範囲が広いため、同調をバリキャップ等で調整しようかとも考えたが、大袈裟かとも思い固定のままとした。バンド内での感度測定はしていないが、どうにか使える範囲のようである。

【第1ミクサー】
 TA7358のミクサーを使用。PLLからの信号を受けIF10.7MHzに変換。PLLVCOからの注入レベルは結構多めになっていると思う。適切な注入レベルは周波数によっても変わると思われる。このあたりTA7358の実験を行いデータ化しておくと何かと便利かもしれない。暇があったらやってみたい。このICの使用例は多く発表されているので参考にされたい。

【第1OSC】
 当初TA7358のOSCで行ったが、発振範囲が十分取れなかったこと、発振レベルがPLLに不十分であったことから、専用発振回路とした。PLL制御のVCOである。発振には定番の2SK19で実験したが、発振出力不足の感じであったため、2SK241とした。やはり発振範囲、出力レベルは2SK19よりも協力で良くなった。バッファには2SC2026を使用。VCOの出力は、TA7358の8pinに入力。PLLへは7pinから5pで返している。

【PLL】
 前作のFMトランシーバで使用したTC9256を使用。もともとFMラジオ用であることから、150MHzまで対応できる。ほとんど前作と同じ回路構成である。前回はHFモード(40MHz)で使用。今回はFMモード(内臓プリスケラーを使用するモード)で使用した。VCOで多少手こずったが、問題なくロックしてくれた。実に使いやすいPLL用ICだと思う。MPUからの制御も前作のものを焼きなおした。

【第2ミクサー&第2OSC】
 定番のLA1600を使用。OSCは当初LA1600の内部発振回路で行ったが、調整がクリチカルだったため、トランジスタ1石(2SC945)で10.245MHz水晶発信とした。

【IF&検波】
LA1600を使用。特にコメントなし。簡単。AGCもまあまあである。AGCが単独で使用できればSSB機などへの応用ももっとできるのだが。まあQRP機などで限定的に使用するならば便利なICといえる。事実使用例も非常に多い。にたようなICが東芝、ローム等から出ているのでこのあたりも調べてみるのもいいかもしれない。しかしPIN数や外付け部品を考えているとLA1600は非常に優秀といえる。
まだまだ入手可能。

【AFアンプ】

 定番のLM386。今回電源ON時のポップ音対策として7pinとVCC間に電解コンデンサー、グランド間にダイオードを挿入。どなたかのホームページに書かれていたものを利用させていただいた。何も無いときに比べ精神上よくない「ボツ」音はかなり減った。まだ多少残っているが、かなりの改善であった。
 ただしCWでのフルブレークインでも気にならないかは実験してみなければわからない。

【制御回路】

 全体制御と液晶表示にATMELのATmega48を使用した。これは、バンド幅が広いため、メモリ回路(10チャンネル)や、エンコーダの周波数ステップ(10KHz,100KHz,1MHz)をを変更できるようにするため、Tiny2313ではメモリが不足すると思われたためである。これについては次回解説を載せる予定。


【筐体、部品】
 筐体は前回の29MHzFMトランシーバー と同じタカチ(UC14-6-10)を使用した。自作において筐体は結構重要なテーマである。しかし結構高い。部品で一番高いかもしれない。たまたまオークションで大量に安く入手できたので使っている。
 基板にはICB-93SEGを使用。部品面がメッシュアースになっているため高周波用には最適。少々高いが、回路側でアースを引き回さなくても良いため作業性がいい。ただスルーホール仕上げのためランドは強いが、部品交換は少し面倒。前回のFM機では機能別にICB-88SEGを主として使ったが、これはスルーホールになっていない。したがって部品交換時などランドがはがれ安いので注意。
 一品ものにはこれら基板がお勧めだ。
 今回基板から出る配線には主としてコネクタを使用した。ブログ(その1)に紹介しているが、自作パソコン用のアッセンブリーでピンヘッダ用であり、至極便利。皆さんも使ってみませんか。シールド線等もあり、ボリューム配線等がきれいに収まる。(内部写真参照)
 ツマミはジャンクのトランシーバーに使用されたものを再利用している。ツマミはいいものがあまり販売されていない。ジャンク品は貴重な資源である。ちなみにダイヤルは日本電業Liner2DXのものです。
 液晶は秋月で売っている16×2バックライト付きを使用。
























次回はソフト解説の予定である。

2009年1月15日木曜日

エアーバンド受信機(1)

エアーバンド受信機製作概要


 いまさらエアーバンド(航空無線)という感じもあるが、今聞いているYAESU(FRG-965)の感度がよくないこともあり製作してみた。

 今回は、定番のAM用IC(LA1600)の使い勝手とAVR(ATmega48)を使用しBASCOM-AVRの習熟を目標とした。



 
回路構成は、ブロック図を見てください。シンプル(IC×3 FET×1 TR×1 AVR×1)な構成である。


【RF】
 RFは定番のTA7358を使用。前回29MHzFM機で使用し、混変調等でこのICの限界を垣間見たが、エアバンドであれば強力な電波も無いこと、またもともとがFMレシーバー用のICで回路構成が簡単であることから懲りずに採用した。


【PLL】
 PLLも29MHzFM機で使用したTC9256。とにかく簡単にPLLが作れる(マイコンのおかげも大きい)

【IF&DET】
 AMIF,DETはあまりにも定番のLA1600.でも私は始めての使用である。このICの使い勝手を見るのも大きな目的であった。

【AF AMP】
 LM386 特に言う事無し。ただON/OFF時のポップ音解消回路の実験を行った。

【MPU】
 マイコンはAVR(ATmega48)を使用。29FM機ではATTINY2313をBASCOM-AVRでプログラムしたが、 容量不足で中途半端となったことと今回周波数メモリーを多く持ちたかったのでmega48とした。


以上が今回の製作概要である。