「お気に入りSDRトランシーバー#2マイコンソフト部の製作 」


製作中のSDR#2トランシーバーは、試験的な運用を通して細かなデバック作業を進めていましたが、大体の機能がまとまってきました。写真はSDR #2のほぼ完成した様子とPC画面(それぞれクリックで拡大)

2021.06.19
はじめに
 SDRソフトは簡易的な物から高機能なものまで各種フリーソフトが出ていますが、いずれも自作SDRのハード部を制御することはできません。
SDR本体側にPICマイコンを組み込み、SDRのハード制御はすべてパソコン(PC)のSDR画面上から制御出来るようにし、SDR本体には切り替えSW等は無くしました。、  

ソフトの概要
 ソフトは、大まかに次の機能から構成しています。  

 開発はMPLABXのCを使用、プログラム容量は、8kWのほぼ90%を使用。

マイコンの選定
 当局の開発環境に合わせると、PICマイコンの選択肢はほぼPIC16F886に絞られてしまいます。
条件として、1.秋月のライターで書き込み出来ること。2.機能としてSPIとUART内蔵。3.プログラム容量8k以上。他に電源3.3V〜5V対応という条件で選定 しています。
 ネックになるのが1.の制約でほぼ絞られてしまいますが、PICKitならもっと選択肢が増えます。

プログラムの説明
 プログラムの詳細について。出来るだけコメントを挿入して後から見ても判り易くするよう心がけます。多くは参考図書(PIC16F1活用ガイド)の応用例 を参考にしています。一部SDR#1のコードが残っている箇所もありますが参考になれば。
MAIN部は、最初にローカル変数の(メインルーチン内のみで使用する変数)定義と初期設定。
Si5351の周波数設定、出力周波数とVCO周波数を引数として、Si5351 VCO部パラメーターP1〜P3を計算し、得られたパラメーターと書き込みスタートアドレスを引き数として レジスターに書き込みます。
 次にSi5351のシンセ部パラメーターを計算し、レジスターに書き込みます。周波数固定の場合は、P1-P3も固定なので手計算した結果を書きこむことで、プログラム容量を押さえています。
 Si5351の設定は比較的汎用性があり、応用が効くと思います。
   MAINの繰り返し(while部)では、カウンターゲートが閉じている間に周波数データーを取り込みT0時点の周波数とT1時点の周波数を比較し一定以上の差(ドリフト)がある場合叉は、 一定回数毎に、データ―をRS232経由で送出します。データーを間引くことでシリアル通信が煩雑化するのを押さえています。
 他に、PCからのコマンドのフラグをみて、アナログVFO選択、叉はSi5351 VFOの切り替え処理をします。
割り込み処理では、PTT、CWモード時のブレークイン操作、PCからのコマンド受信処理をします。
 PTTの割り込みはポートRB0の立ち下がりでTX ON 立ち上がりでRXにもどるようにしています、当初、CWモードではKey up/dwn毎に送受切り変え(フルブレークイン)ていましたが、 ごく稀にチャタリングによる誤動作が発生するため、復帰時間が短めのセミブレークイン動作にかえました。
 Key upですぐに受信に切り変えず、Delayカウント後に受信に切り替え、カウント中に再びKey dwnしたらカウントをリセットして再びDelay時間を取るようにしました。
 コマンド受信割り込みでは、PCからのコマンド(アルファベット1文字)を受け、TXRX切り替え、周波数メモリーの呼び出し書き込みなどの制御の他、Si5351のチューニングを 行います。
 チューニングの方法は、PC画面のスペクトラム表示で信号の位置をマウスでクリックするとその位置の座標をPIC側に数値データ―を送り、PIC側では座標データを周波数換算し Si5351のデーターとしています。CWでは上のPC画面スペクトラムが一本の線状なのでダイレクトにチューニング出来ますが、SSBの場合はセンター周波数はスペクトラムだけでは 合わせ切れないので、クリック後微調製が必要です。
 叉座標データーはスペクトラム表示のピクセル数と周波数表示範囲から計算しているので、あまり細かな分解能が設定できません。
PIC初期設定、各ポートの設定、UARTの設定、割り込み許可設定等をします。
TMR1,2初期設定、周波数カウンターで使用するTMR1.2の設定で、クロックに12.8MHzを使用し、ゲート時間を100mSとします。
RS232送信、PICのTXレジスターに送信データー(1文字分)をセットすれば、後はすべて、PICでやってくれます。
I2Cコマンド送信、Si5351の制御用I2Cに関する部分は参考図書をほぼコピーしています。
Si5351の設定は、初期設定とPLL部パラメーター計算、シンセ部のパラメーター計算、およびその結果をレジスタに書き込みます。
Freq Counterは、8bitカウンターを3つ並べてそれぞれのカウント値をつなげて周波数とします。この部分も汎用性があり、応用が効きます。
Bin to 10進変換は、周波数カウンターで得られたバイナリーデーターを、Si5351の周波数データーやシリアルデーターとして便利なように10進変換します。
Fdata to シリアル変換は、10進数字データーをASCII変換します。変換データーは必要分配列にセットし、小数点やMHz等の文字列もセットしてRS232のTXレジスターに 書き込めばOKです
 プログラムソースリストは、デバック用ルーチンや使っていない部分のコメントなど残っていますが、参考まで。

プログラムソースリスト参照

<現状での問題点、他
 Si5351の周波数設定をPC側から高速で連続可変するとRS232Cが停止してしまいます、この原因としてPC側なのかPIC側なのかまだ解明出来ていませんが 通常動作では問題ないので、順次解決していきます。
 7.140MHz〜7.195MHz付近で時々QRVしていますので、聞こえていましたらレポートをお願いします。

Top Menu