無線ブログ集
メイン | 簡易ヘッドライン |
TS820-DDS-VFOその2 (2022/1/10 11:50:17)
少し間があきましたが、TS820のバンド情報のBCD変換回路を入力としたDDS-VFOのハードウェアは動作確認の実験完了し、残るはソフトウェアのコーディングです。相変わらずオリジナルは、JF3HZB局UEBO氏のDDS-VFOの素晴らしい公開ソフトウェア、VFOsysを使わさせてただいています。
コーディングしてゆきますが、仕様としては、TS820本体の中にあるアナログ式VFOをデジタル式サブダイアルのVFOsysをモデファイし全バンド対応で組み込む事です。そっくりアナログ式VFOをデジタルDDS-VFO(VFOsys改)で入れ替える事です。全バンド対応とは、サブダイヤルカラー液晶に表示される周波数も本体バンドSWに連動対応させると言う事です。前の外部VFO方式のDDS-VFOでは、TS820本体のバンドSW情報を外部に伝える方法として、独自コマンド仕様のシリアル通信方式を採りました。これも上手く動作してくれていますが、外部VFO用の接続ケーブルとRS−232Cのケーブルが必要でどちらかと言うとシンプルではありません。今回は、バンド情報を直接ESP32
DivKitCにBCDの4ポート化してカラー液晶上に本体バンドSWと連動した周波数を表示させたいと思っています。すべて前の実験回路をそのまま使い、処理はほとんどソフトウェアで行います。
ソフトウェアをコーディングしてゆきますが、前の経験で、バンド情報を単にESP32DivKitCの入力4ポートに入れて、検出をするコードを書いてもソフトウェアでは常にループ検出してますので、一端バンド情報を確認出来て周波数を設定しますが、別の周波数にエンコーダーを回しても、すぐまたループ検出で、初期設定の周波数に戻されてしまいます。これがある為に、ESP32DivKitCに、検出するのは、本体のバンドSWが回された時に発生するパルスがESP32DivKitCのパルス入力検出ポートに来た時だけBCDの入力4ポートの状態を検出するようにしています。
今回はかねて考えていましたTS820本体のバンドSWを回した時のVFOの周波数が各バンドとも同じVFO発振周波数でのバンド周波数表示となる、いわゆるアナログVFOとまったく同じ動作となるようにソフトウェアですべて対応したいと思います。これは同じTRIOのTS130のトランシーバー用に同じVFOsysを使いDDS-VFOを製作していたOM(JA6IRK
ex.JN3XBY)のDDS-VFOの実際の動作動画を見て上記仕様を既に対応されていた事に触発された事もあります。下記ページの中に動作動画が2つありました。
このTS-130のDDS-VFO動作動画を見た時は、どういう風にソフトウェアを組んでいるのだろうか?と言う思いでした。こんな事があって、ある程度頭の中でイメージした上で、私もTS820用本体用のデジタル式DDS-VFOにトライしていると言うわけです。
頭の中でのイメージした事とは次の様な事です。
まず、アナログ式VFOと同じであるという事が、第一です。つまり、ダイヤル指定の周波数でVFOは発振し続けていて、本体のバンドSWが変わってもVFOの発振周波数は変わらない。さすれば、デジタル式のVFOも本体のバンドSWが変わってもVFOの発振周波数は変わらない様にソフトウェアで組めば良いと言うこと、また、第二としては周波数表示だけバンドSWにて変わる様にソフトウェアで組めばよい、この2点を考えてコーディングする様にすれば良いと思ったわけです。VFOsysのカラー液晶には周波数も表示されるので、周波数表示も使うとなると、必然的に考える必要が出て来るわけですね。
今までEEPROM機能を使わない場合は、デジタルVFOではバンドSW情報を受け取ると各バンドの初期設定周波数になりました。今回は電源を入れた時だけ検出の各バンドの初期設定の周波数になりますが、電源が入ったままの状態でダイヤルをまわし周波数を変えたあとに本体のバンドSWを変えても初期設定の周波数にはならずに、アナログVFOと同じ様に設定したダイヤル周波数のまま発振し続け動作する仕様となります。
上記の文中の電源を入れた時だけ検出の各バンドの初期設定の周波数になりますについてですが555タイマーの入力に電源を入れた時に安定後
setup
ルーチン内の最後でLパルスをSTART_ONポートから送出するようにしています。(通常H状態)この555タイマー出力がパルス発生ICのSN74121のトリガーとなりESP32DivKitCのバンド情報検出用入力にLパルスが出力されます。(通常H状態)
■setupルーチンでのLパルス発生
digitalWrite(START_ON,LOW); // 0 Port Preset OUTPUT level "L"
digitalWrite(START_ON,HIGH); // 0 Port START TORRIGGER OUTPUT "H"
digitalWrite(START_ON,HIGH); // 0 Port START TORRIGGER OUTPUT "H"
■loopルーチンでのバンド情報検出は簡単なポートの状態をIF文で”L”を検出します。検出時はBCDの4ポートの状態に合わせてヘテロダイン周波数、初期値周波数、などを設定しています
また、電源初回投入時のみP=0
のルーチン処理で、電源入った後はP=1でのルーチン処理のみとなります。ここがバンドの周波数表示だけがかわりDDS発振周波数は変わらない様にp値で振り分けして対応しました
1.9MHzと3.5MHz.......29.5MHzのバンド情報検出のコードです。
延々とBCD4ポート状態をチェックしてゆく、同じ様なコードが続きます。
//***********************************************************************************************if(digitalRead(CHANG_BAND)==LOW){ // IF pin36 L PULS IN (ordinary H level)
if((((digitalRead(BAND_BCD0)==HIGH) // "1" BCD port condition check
and(digitalRead(BAND_BCD1)==LOW)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==LOW)))){ //1.9MHz :1000
HET_FREQ = HET_FREQ01;
if(p==0){
frq = freq01;
p=1;
}
else{
if(p==1){
frq = HET_FREQ - 5500000 + o_frq;
p=1;
}
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN,HIGH); //13 CHANGE TO USE D0
digitalWrite(LED_BUILTIN1,LOW); //12 CHANGE TO USE D1
digitalWrite(LED_BUILTIN2,LOW); //14 CHANGE TO USE D2
digitalWrite(LED_BUILTIN3,LOW); //27 CHANGE TO USE D3
}
else{
if((((digitalRead(BAND_BCD0)==LOW) // "2" BCD port condition check
and(digitalRead(BAND_BCD1)==HIGH)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==LOW)))){//3.5MHz :0100
HET_FREQ = HET_FREQ02;
if(p==0){
frq = freq02;
p=1;
}
else{
if(p==1){
frq = HET_FREQ - 5500000 + o_frq;
p=1;
}
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, LOW); //13
digitalWrite(LED_BUILTIN1,HIGH); //12
digitalWrite(LED_BUILTIN2, LOW); //14
digitalWrite(LED_BUILTIN3, LOW); //27
}
}
if((((digitalRead(BAND_BCD0)==HIGH) // "3" BCD port condition check
and(digitalRead(BAND_BCD1)==HIGH)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==LOW)))){//7.0MHz :1100
HET_FREQ = HET_FREQ03;
if(p==0){
frq = freq03;
p=1;
}
else{
if(p==1){
frq = HET_FREQ - 5500000 + o_frq;
p=1;
}
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, HIGH); //13
digitalWrite(LED_BUILTIN1,HIGH); //12
digitalWrite(LED_BUILTIN2, LOW); //14
digitalWrite(LED_BUILTIN3, LOW); //27
}
else{
if((((digitalRead(BAND_BCD0)==LOW) // "4" BCD port condition check
and(digitalRead(BAND_BCD1)==LOW)
and(digitalRead(BAND_BCD2)==HIGH)
and(digitalRead(BAND_BCD3)==LOW)))){//14.0MHz :0010
HET_FREQ = HET_FREQ04;
if(p==0){
frq = freq04;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, LOW); //13
digitalWrite(LED_BUILTIN1, LOW); //12
digitalWrite(LED_BUILTIN2,HIGH); //14
digitalWrite(LED_BUILTIN3, LOW); //27
}
}
if((((digitalRead(BAND_BCD0)==HIGH) // "5" BCD port condition check
and(digitalRead(BAND_BCD1)==LOW)
and(digitalRead(BAND_BCD2)==HIGH)
and(digitalRead(BAND_BCD3)==LOW)))){//15.0MHz :1010
HET_FREQ = HET_FREQ05;
if(p==0){
frq = freq05;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, HIGH); //13
digitalWrite(LED_BUILTIN1, LOW); //12
digitalWrite(LED_BUILTIN2,HIGH); //14
digitalWrite(LED_BUILTIN3, LOW); //27
}
else{
if((((digitalRead(BAND_BCD0)==LOW) // "6" BCD port condition check
and(digitalRead(BAND_BCD1)==HIGH)
and(digitalRead(BAND_BCD2)==HIGH)
and(digitalRead(BAND_BCD3)==LOW)))){//18.1MHz :0110
HET_FREQ = HET_FREQ06;
if(p==0){
frq = freq06;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, LOW); //13
digitalWrite(LED_BUILTIN1,HIGH); //12
digitalWrite(LED_BUILTIN2,HIGH); //14
digitalWrite(LED_BUILTIN3, LOW); //27
}
}
if((((digitalRead(BAND_BCD0)==HIGH) // "7" BCD port condition check
and(digitalRead(BAND_BCD1)==HIGH)
and(digitalRead(BAND_BCD2)==HIGH)
and(digitalRead(BAND_BCD3)==LOW)))){//21.0MHz :1110
HET_FREQ = HET_FREQ07;
if(p==0){
frq = freq07;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, HIGH); //13
digitalWrite(LED_BUILTIN1,HIGH); //12
digitalWrite(LED_BUILTIN2,HIGH); //14
digitalWrite(LED_BUILTIN3, LOW); //27
}
else{
if((((digitalRead(BAND_BCD0)==LOW) // "8" BCD port condition check
and(digitalRead(BAND_BCD1)==LOW)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==HIGH)))){//28.0MHz :0001
HET_FREQ = HET_FREQ08;
if(p==0){
frq = freq08;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, LOW); //13
digitalWrite(LED_BUILTIN1, LOW); //12
digitalWrite(LED_BUILTIN2, LOW); //14
digitalWrite(LED_BUILTIN3,HIGH); //27
}
}
if((((digitalRead(BAND_BCD0)==HIGH) // "9" BCD port condition check
and(digitalRead(BAND_BCD1)==LOW)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==HIGH)))){//28.5MHz :1001
HET_FREQ = HET_FREQ09;
if(p==0){
frq = freq09;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, HIGH); //13
digitalWrite(LED_BUILTIN1, LOW); //12
digitalWrite(LED_BUILTIN2, LOW); //14
digitalWrite(LED_BUILTIN3,HIGH); //27
}
else{
if((((digitalRead(BAND_BCD0)==LOW) // "10" BCD port condition check
and(digitalRead(BAND_BCD1)==HIGH)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==HIGH)))){//29.0MHz :0101
HET_FREQ = HET_FREQ10;
if(p==0){
frq = freq10;
f_dchange = 1;
f_fchange=1;//add 2020Dec12
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, LOW); //13
digitalWrite(LED_BUILTIN1,HIGH); //12
digitalWrite(LED_BUILTIN2, LOW); //14
digitalWrite(LED_BUILTIN3,HIGH); //27
}
}
if((((digitalRead(BAND_BCD0)==HIGH) // "11" BCD port condition check
and(digitalRead(BAND_BCD1)==HIGH)
and(digitalRead(BAND_BCD2)==LOW)
and(digitalRead(BAND_BCD3)==HIGH)))){//29.5MHz :1101
HET_FREQ = HET_FREQ11;
if(p==0){
frq = freq11;
p=1;
}
else{
frq = HET_FREQ -5500000 + o_frq;
p=1;
}
f_dchange = 1;
f_fchange=1;//add 2020Dec12
digitalWrite(LED_BUILTIN, HIGH); //13
digitalWrite(LED_BUILTIN1,HIGH); //12
digitalWrite(LED_BUILTIN2, LOW); //14
digitalWrite(LED_BUILTIN3,HIGH); //27
}
p=1;
}
上記を実験しているブレッドボード一式の写真です。(煩雑です。)
次はDDSICへの周波数設定の心臓部となるtask0 ルーチンへのコード対応を予定しています。
つづく?
execution time : 0.032 sec