目標仕様
目標仕様は先に検討した仕様検討の内容で検討し、CHスキャンはあまり使う機会がなさそうなので今のところ盛り込みはしていません。
プログラム容量に余裕があるので、周波数スィープやメモリーCHの増加など追加機能があれば再検討していきます。
ハード部(信号切り替え)の製作
DDS、VFO、EXT VFOの信号切り替え回路は下図のようにしました。各信号のアイソレーションをとるためリレーは高周波用を使用したかったのですが、手持ちは使い
切ってしまったので代替え処置としてリレーの遊んでいる接点をGNDに接続するようにしました(例K2、K3)。通常の使用方法ではアイソレーションは-60db(@6MHz)程度ですが
-70db程度に改善できました。VFO信号はビデオSW ICが手持ちにありましたのでBuffとアイソレーション改善のため追加しています。
DDS出力とVFO出力のレベル合わせはDDS側に4db程度のATTを追加しています。
ちなみにオリジナルのFT-101Zでは内部VFOとEXT VFOの切り替えは使用しない側の電源供給を停止しているのでアイソレーションは問題になりませんが、通電によるQRHが懸念
されるので、本機では電源は通電したまま信号の切り替えアイソレーションを確保する様にしました。
ソフト
マイコンはPIC16F88を使用、ソフト開発はCCS CとMPLABを使いました。従来はアセンブラで書いていましたが、今回は"C"にしたので開発期間が大幅に短縮、かつプログラムの
ライン数も大幅に少なくなりました。プログラム容量は約1Kでアセンブラで書くとA4用紙で10ページ以上になりますが、"C"では3ページ程度に収まるのでデバッグも非常に楽になりました。
ソースリストを参考まで、各関数についての簡単な説明をします。
timer2 0.1秒ゲートタイム作成、Timer2カウンターを250にプリセットし10回一致するごとにloopカウンターをアップして必要なゲート時間を作成。
timer1 VFO周波数をカウント、Timer1はせいぜい4MHz程度しかカウント出来ないのでプリスケールで分周が必要です。カウント値はcounter_H,MLレジスターに格納。
EEPROM write CH1、CH2のメモリーに周波数データーを保存。EEPROMには周波数データを上位8bit、中位8bit、下位8bitに分解して保存。
EEPROM read 上位8bit、中位8bit、下位8bitのデータをつなげてDDSの周波数データにします。
DDS CCS Cにはデーターのn bit目がH/Lかを判定するBit testという関数があり、この関数を使いポートをH/L制御しています。当初シリアルデータ送出の関数を使うことも考えま したが、アセンブラでのやり方で書いても大して負担にもならず、このようにしました。
メイン関数 各SWの動作検出を単純に繰り返しています、6個のSW状態をポートB0〜B3を使って検出しています。各SWにはチャタリング防止の為のwaiteとSWが戻ったことを検出する
do while〜を挿入して、次の動作に移るようにしています。
回路図
EXT SWを押すとEXT VFOが無いので周波数表示が91MHzと異常表示します。
TX EXT SWを押すと押した時点のVFO周波数がDDS発振で外部TXへ出力されます。受信周波数はアナログVFOのまま。
RX EXT SWを押すと押した時点のVFO周波数がDDS発振で固定され、ダイアルを回しても周波数表示は変化しません。
VFO SWを押すと通常の動作。
CH1 SWを長押しするとその時点のVFO周波数がCH1にメモリーされ、かつその周波数で固定。短押しでCH1にメモリーされている周波数を呼び出す。電源を切ってもデーターは保持。
CH2 SWはCH1に同じ。
今後の計画
後はアクセサリーコネクタやTXとのインターフェイス周りの配線を残すほか、ハム音対策、時々異常発振などのトラブル対策を実施。メーカ製トランシーバーとの鳴き合わせを
やってみたいですね。