今日は、有給で休みなので、仕事を忘れて思いっきりTS820の外部DDS−VFO の問題をみることができています。結果前回のほぼ出来上がったTS820の外部VFOの電源ON時の開始バンドが本体のTS820のバンドSWと異なるという問題は、解決しました。ただ、この対策を見つけるまでがとても、大変でした。
この対策の検討記は後になります。
先ずは、問題が解決した電源ON時の外部DDS-VFO側の動画です。TS820本体側のバンドSW設定が21MHzです。オリジナルのスケッチでの初期設定バンドは7MHzにしています。
電源ONから一旦電源OFFにして、再度電源ONで外部DDS-VFOは初期設定の7MHzになるのと同時に外部DDS-VFOからTS820本体へバンドSW確認リクエストが送られます。これがTS820本体側でデコードされ、一定時間経過に外部DDS-VFOにバンドSW設定の情報を送り返すシーケンスです。通常のバンドSWを回して送出されるのと同じバンド情報です。外部DDS-VFO側がこのバンド情報を受信して、スケッチ初期設定の7MHzが実際に設定されているバンドSW周波数の21MHzに切り替わリます。とにかく電源ONするだけで外部DDS-VFOのバンドが本体設定のバンドSWと同にする事が出来る様になりました。やっつけ仕事感があります。とにかく動作すればいいのであって、本当に良い方法かどうかは、今の段階ではわかりません。ArduinoNANOやArduinoUNO,とくにESP32DivKitCについては、手探り状態なのは変わりありません。サンプルスケッチで動かして、確認し動いた時に感動しているレベルですから!Hi!
外部DDS-VFOの電源ON時開始時(REC/XMIT)のTS820本体の
バンド設定SWとの同期化の動画です。
ここからが、上記の電源ON時のTS820本体と同期するまでに色々と出た問題を私なりに、それぞれ原因等を考え、対策し、クリアしていった事についての記載です。ほぼデバッグ処理から始まります。Hi!
とにかくデバッグするためにはオリジナルとの比較が重要です。私は、動作比較確認する必要があるのでESP32DivKitC用の実験基板をオリジナル状態(VFOsys.ino)で準備しました。これで、製作中のスケッチVFOsys-SERIAL.inoとESP32DivKitCのオリジナルVFOsys.inoとで、各ポートの比較確認が出来るようになりました。これで解ったのが、シリアルのTXポートが通常のオリジナルと異なる動作になっている事でした。前にVFOsysの仕様で、と書きましたが、これはとんだ私の思い込み間違いで、私のスケッチ追加によって起きていることでした。オリジナルではTXポートが安定のH状態なのが、何かの原因で信号?が送出されている状態です。この信号が常時出ていることで起きているだろう2次的な問題もありました。TS820外部DDS-VFOのESP32DivKitCのTXポートからはいままでは出ていなかった信号が出ているような状況です。TXポートを外して使えば、問題はありません。が、今の対策は使う事が前提で進めていますから、解決しないと進みません。大変厄介な内容ではあります。TS820の外部DDS-VFOの電源ONによる問題解決対策の前に、この原因追求をしなければなりません。
まず考えたのが、シリアルポートであるという事なので、シリアル通信に関わるスケッチが追加されてこの様になっているのだ。という事です。オリジナルにスケッチ追加して起きている事は100%明らかです。ということで、追加したルーチンを全部 /* 追加ルーチン */ にて、間違いなく箇所を外し100%問題がなくなるかを確認しました。すると、TXポートは送出信号?がでなくなりました。Hでオリジナルの状態と同じです。場所は大当たりというか、追加した事で問題がおきた所ですから当然といえば当然です。原因のスケッチ部ということになります。ここで、原因の箇所を確認するために、考え方を開発中のスケッチでなく、オリジナルとして準備した実験基板で何をすればTXポートが信号送出状態?になるのかを試すことにしました。試すことは、作製しているスケッチ、VFOsys-SERIAL.inoで追加し書いた同じシリアル通信関連のスケッチ、1センテンスを追加してTX ポートの状態が同じ様(送出状態)に再現するかを確認することです。この方法は功を奏しました。ほぼ、1発で原因が分かる事になります。とにかく唖然としました。スケッチを書いていて通常にデバッグで使用するものだと思っていたものが実は、シリアルのループ内ではTXポートに影響が出るということです。Arduinoでは当たり前のデバッグ手法だけにこれは、シリアル通信処理時は気をつけなければならないということになります。ここまで書けば解ると思いますが、原因はループ内で使ってた、値確認で使うSerial.Println();です。確認用のSerial.printlnをすべてコメント化または削除でTXポートへは送出信号?はでなくなり、オリジナル時のTXポートのH状態にて安定しました。あっけなく再現したので、VFOsys−SERIAL.inoの変数値等の確認で入れてあるSerial.printlnをすべてコメント化(//)しました。
このコメント化ですべてTXポートの状態は解決しました。ホッとしました!
次は、外部DDS-VFO側が電源ONしてからTS820本体へバンドSW確認リクエストを送出する必要があります。この部分のスケッチを追加しなければなりません。以下の様にリクエストコマンドをバンド情報以外であれば何でも良いので、下記に独断で決めました。
バンドSW確認リクエストコマンド:”99;”
これは、送る自分で受信するのと同じく”99”にデリミタの”;”を付けて送ることにします。前にも書きましたが、key=Serial.readStringUntil(';'); でデリミタ”;”までのデータを読み込む仕様に合わせます。
このコマンドをVFOsys-SERIAL.inoのvoid setup() ルーチンの各初期化ルーチンの1から8がありますが、これらの初期化が終わってから送出するように一番最後に追記しました。(最後の ”}”の手前、本当の一番最後です。
void setup()ルーチンの各初期化ルーチン
1.create tasks on core0
2.set up Interrupt Timer
3.Counter setuo for Rotary Encorder
4.display_init();
5.trans65k();
6.init_Dial();
7.GRAM_clr();
8.si5351_init();
追加は単純に20回のバンドSW確認リクエストコマンド:”99;” を送るだけです。回数は気持ち多めでということで適当です。後で、十分に動作する(受け取れる)回数まで減らし調整します。
for(int i=0; i<=19 ; i++){
Serial.println("99;");
}
Serial.println("99;");
}
void setup()ルーチンでは1回だけの動作ですから、TXポートからは各初期化後の最後に20回のバンドSW確認リクエストコマンドが送られるだけです。void loop()ルーチンのように繰り返しはありません。1度だけの送出(”99;”リクエストコマンド)20個のデータだけという事です。ここが大切です。
TS820外部DDS-VFO側では、電源ONでリクエストコマンド”99;”を送り、初期設定された周波数を本体から送られてくる今現在のTS820のバンドSWのバンド情報を受信して、そのバンド情報に対応する周波数に変わります。(受信のバンド情報デコードは電源オン後リクエストに対し送られてくるバンド情報と通常時のTS820本体のバンドSWを回して送出されるバンド情報は全く同じコマンド体系です。)
外出するので、一旦終了します。
つづく?
続きを読む