jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

2022年01月

TS820-DDS-VFOその6

今日はTS820の本体に付けるTFTカラー液晶の位置合わせをすることにしました。丁度いい具合に、フロントパネルを入れ替えた時の余分なフロントパネルがありますので、これで現物と同じようにTFTカラー液晶の貼り付け位置を確認する事が出来ます。

TS820Vの交換した元のフロントパネルをTFTカラー液晶の位置合わせで使います。
CIMG9353

実験ボードからパラレルで液晶を表示させることが出来たので少し長い配線を使いパネルでの位置合わせです。前の外部VFO用時のTFTカラー液晶を取り外して使いました。
CIMG9352

本体のフロントパネルは外部VFOのフロントパネルとは構造が異なる為、現物での確認が必要です。
CIMG9347

特に取り付け位置での問題はなさそうです。外部DDS-VFOに組んだ時と同じように貼り付けできそうです。やはりTFTカラー液晶の下のデジタルサブダイヤル表示の周は目隠しが必要そうです。Hi !
CIMG9350

フロントパネルへのTFTカラー液晶の取り付けも特に問題がなさそうなので、TS820本体へのロータリーエンコーダの取り付け位置合わせも確認することにしました。

外部DDS-VFOをバラして使うことにしました。全く同じ物で使えるか、TS820本体のVFOをはずし、代わりにロータリーエンコーダを取り付けてダイヤル位置の確認です。取り付けのシャーシも全く外部VFOも本体も同じ物を使っていました。すんなりと取り付け出来ました。特に取り付けには問題はないようです。
CIMG9338

本体の外部VFOをはずし、ロータリーエンコーダを取り付けしたところです。基板3枚を入れるスペースは、十分ありそうです。元のVFOのアルミのシールドケースを使わなければ、基板取り付けスペースは十分あり問題ない感じです。

ロータリーエンコーダ部の取り付け後の上からのスペース確認
前に組み込んだArduinoNanoでの現在のバンドSW検出でのバンドシリアルデータ送出基板があります。
今回はこの基板はESP32DevKitCを使った現在のバンドSW検出基板になります。
CIMG9340

ロータリーエンコーダにダイヤルを取り付けた状態のフロント側からの写真
CIMG9342

液晶の付いていない本体のフロントパネルから出たロータリーエンコーダシャフトにダイヤルをつけての位置確認
CIMG9341
ダイヤルのところの窓にはデジタルのサブダイヤル(最初に位置合わせしたTFTカラー液晶のサブダイヤル部)が表示されます。もとのサブダイヤル表示部にはDDS-VFOのデジタル周波数が表示されます。上には元々のデジタル周波数表示です。周波数表示が2つになります。だたしDDSの周波数はバンドを切り替えてもどこのバンドも同じDDS-VFO周波数なので周波数も同じに表示されます。元々の周波数表示はクリスタルの発振がずれている分、バンド毎に表示は若干のズレが出ていました。これもDDSにした場合、元のLC発振のVFOとどれくらいのズレがあるか、または同じくらいのズレなのかは確認したいと思っています。ズレがバンド毎にわかれば、プログラムでバンド毎にawaseの変数での周波数補正も可能かと思います。

今日はTFTカラー液晶が問題なく取り付けができる事が確認出来ました。また本体へのロータリーエンコーダの取り付けも特に問題ない事も確認できました。順調な進み具合です。
また、基板をCNCで作製する前に実験中のブレッドボードをのせて、表示や動作の確認をしようかとも思っています。

つづく?

TS820-DDS-VFOその5

ESP32DevKitCに設定した入力11ポートにワイヤー11本で繋ぎ、ブレッドボードに回路を組んで、早速BCD回路で組んでいたプログラムのif文ルーチンを直接コーディング開始しました。前のBCD回路の4ポートの状態確認をD0からD10の全11ポートの状態確認にするだけです。少しコーディングが長くはなりますが、TS820のPLL回路からの選択したバンドの+B電圧を確認する条件文です。この条件文で分岐動作させる内容はBCD入力の時のコードと全く同じです。IF文の条件で現在のTS820のバンドSWの位置の判断を行います。上記の書き換えの為には新たな入力の11ポートの入力ポート宣言と設定をする必要があります。

以下追加宣言部です。

//for TS-820 SELECT BAND +B VOLTAGE PORT D0 TO D10  ADD JAN23
#define TO_ESPD0 13 //1.8MHz 180m
#define TO_ESPD1 14 //3.5MHz  80m
#define TO_ESPD2 27 //7.0MHz  40m
#define TO_ESPD3 26 //14.0MHz 20m
#define TO_ESPD4 25 //15.0MHz 20m JJY
#define TO_ESPD5 33 //18.0MHz 17m
#define TO_ESPD6 32 //21.0MHz 15m
#define TO_ESPD7 35 //28.0MHz 10m
#define TO_ESPD8 34 //28.5MHz 10m
#define TO_ESPD9 39 //29.0MHz 10m
#define TO_ESPD10 36 //29.5MHz 10m

下記のo_frqも追加宣言します。
p_frqは設定値の確認で使用したものです。

int32_t o_frq;   //encorder move frequency value +-
int32_t p_frq;

下記のパルス入ロポート及び初期時のトリガー出力用ポートも使用するので宣言します。
#define CHANG_BAND 16 //change BAND then low pulse CHANGE ON 2022/JAN/11
#define START_ON 0    //Output PORT 0 start timer torrigger for IC 555 2pin

セットアップルーチンでは下記の入力ポート設定をします。
 pinMode(TO_ESPD0,INPUT);  //DIGITAL INPUT 13 D0
    pinMode(TO_ESPD1,INPUT);  //DIGITAL INPUT 14 D1
    pinMode(TO_ESPD2,INPUT);  //DIGITAL INPUT 27 D2
    pinMode(TO_ESPD3,INPUT);  //DIGITAL INPUT 26 D3
    pinMode(TO_ESPD4,INPUT);  //DIGITAL INPUT 25 D4
    pinMode(TO_ESPD5,INPUT);  //DIGITAL INPUT 33 D5
    pinMode(TO_ESPD6,INPUT);  //DIGITAL INPUT 32 D6
    pinMode(TO_ESPD7,INPUT);  //DIGITAL INPUT 35 D7
    pinMode(TO_ESPD8,INPUT);  //DIGITAL INPUT 34 D8
    pinMode(TO_ESPD9,INPUT);  //DIGITAL INPUT 39 D9
    pinMode(TO_ESPD10,INPUT); //DIGITAL INPUT 36 D10

おおまかな動作は、ESP32DevKitCのCHANG_BANDポート(GPIO16)には、パルス発生ゲートIC(74121)のLパルスが入力されるとバンドSWの確認が行われるフローで動作します。バンドSWを回して一瞬オープンになった時にトランジスターエミッタの出力が”L”レベルに下がり次のバンドにSWが繋がると”L”から”H”レベルになりこの立ち上がりでタイマーIC(555)がスタートします。実際に使うタイマー時間は極力短く設定するようにしていますが、動作を理解するためにコンデンサの容量を少し大きめにして目でみて分かる程度までタイマー時間を延ばしてあります。(0.47μFを10μFに変えてます。)タイマー出力は”L”から設定時間だけの間”H”となりタイマー時間終了後に”L”に下がります。このタイマー出力はパルス発生の74121の入力にダイオードで繋いでいます。カソードをタイマーIC(555)の出力側に、アノードを74121の入力側に繋いでいます。最初は直接つないでいたのですが、最終的にはこのダイオードの追加が必要でした。他のESP32DevKitCの電源が入った初期にバンドSWの確認を行う為パルスを出していますが、立ち上がり時間が多少かかるので、長めのタイマー時間設定でのタイマーIC(555)を使い同じ様に立ち下がりでパルス発生させて設定バンドを設定しています。74121の入力は2つの回路出力が繋がるのですが、両方ともパスル発生をさせる為にはダイオードの追加が必要でした。回路図は修正し、パターンもダイオード追加変更しています。やはり確認してゆくと、何らかの変更はあるものです。

下記は1.9MHzと3.5MHzの実際のコードです。PLL回路からのバンド選択時出力の+B電圧が何処のバンドポートに印加されてるかを見ているコードです。この様な11ポート分のIF文ルーチンが延々と続きます。
プログラムの動作説明ですが、電源がESP32DivKitCにかかり起動すると、最初はプリセットのヘテロダイン周波数に設定されますが、この初回時の状態は初期値p=0でのみ通す様にし、通過後は強制的にp=1に設定しています。このため起動後はp=1のルーチン側のみで動作する様になります。
ロータリーエンコーダーまわし動いた周波数分をo_frq;   //encorder move frequency value +- としてfrq = HET_FREQ - 5500000 + o_frq;で周波数を設定します。このo_frqは、下記のコードの次に説明します。

if(digitalRead(CHANG_BAND)==LOW){   // IF pin16 L PULS IN (ordinary H level)
    if(((((((((((digitalRead(TO_ESPD0)==HIGH)     // PLL OUT portD0-D10 condition check
            and(digitalRead(TO_ESPD1)==LOW)
            and(digitalRead(TO_ESPD2)==LOW)
            and(digitalRead(TO_ESPD3)==LOW)
            and(digitalRead(TO_ESPD4)==LOW)
            and(digitalRead(TO_ESPD5)==LOW)
            and(digitalRead(TO_ESPD6)==LOW)
            and(digitalRead(TO_ESPD7)==LOW)
            and(digitalRead(TO_ESPD8)==LOW)
            and(digitalRead(TO_ESPD9)==LOW)
            and(digitalRead(TO_ESPD10)==LOW))))))))))){  //1.9MHz
            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);  //D0 THERE'S NO OUTPUTPORT FOR USE
            //digitalWrite(LED_BUILTIN1,LOW); //D1 THERE'S NO OUTPUTPORT FOR USE
            //digitalWrite(LED_BUILTIN2,LOW); //D2 THERE'S NO OUTPUTPORT FOR USE
            //digitalWrite(LED_BUILTIN3,LOW); //D3 THERE'S NO OUTPUTPORT FOR USE
     }
 else{
         if(((((((((((digitalRead(TO_ESPD0)==LOW)     // PLL OUT portD0-D10 condition check
                 and(digitalRead(TO_ESPD1)==HIGH)
                 and(digitalRead(TO_ESPD2)==LOW)
                 and(digitalRead(TO_ESPD3)==LOW)
                 and(digitalRead(TO_ESPD4)==LOW)
                 and(digitalRead(TO_ESPD5)==LOW)
                 and(digitalRead(TO_ESPD6)==LOW)
                 and(digitalRead(TO_ESPD7)==LOW)
                 and(digitalRead(TO_ESPD8)==LOW)
                 and(digitalRead(TO_ESPD9)==LOW)
                 and(digitalRead(TO_ESPD10)==LOW))))))))))){  //3.5MHz  
                 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); //D0 THERE'S NO OUTPUTPORT FOR USE   
              //digitalWrite(LED_BUILTIN1,HIGH); //D1 THERE'S NO OUTPUTPORT FOR USE
              //digitalWrite(LED_BUILTIN2, LOW); //D2 THERE'S NO OUTPUTPORT FOR USE
              //digitalWrite(LED_BUILTIN3, LOW); //D3 THERE'S NO OUTPUTPORT FOR USE
         }
     }
〜省略
29.5MHzの入力ポートTO_ESPD10ポート が"HIGH"となる条件文のルーチンコードが続きます。
以前のバンド毎にBCDコードの出力を出していたルーチンは設定周波数検出時に出力を出そうかと思っていましたが、出力用ポートが4ポート必要ですが、2ポート不足しましたので使用しないことにしました。(周波数検出時のD0,D1,D2,D3のBCD出力)

o_frqの周波数動分は 下記のtask0 のループルーチンで周波数設定時に値を計算取得するようにしています。このルーチンで取得した周波数変化分のo_frqでTS820のバンドSWを切り替えても frq = HET_FREQ - 5500000 + o_frq;の計算式で設定した変動分を使用することで、VFO発振周波数は何処のバンドも同じ周波数で発振させることが出来るようにしています。
バンドSWを回してもp=1のルーチンしか通らないのでプリセット周波数へ設定されることありません。
エンコーダーをまわして1.815,00MHzに設定後TS820の本体のバンドSWを回した時の周波数表示です。
VFO発振周波数は5.485,00MHzでどのバンドも同じ発振周波数のままです。ヘテロダインの周波数を使った周波数表示も問題ありません。
実際の周波数表示は、こんな風になります。
1.815,00MHz⇔3.515,00MHz⇔7.015,00MHz⇔14.015,00MHz⇔15.015,00MHz⇔18.015,00MHz⇔21,015,00MHz
⇔28.015,00MHz⇔28.515,00MHz⇔29.015,00MHz⇔29.515,00MHz

下記のルーチンでo_frqを計算で取得しました。

/*-----------------------------------------------------------------------------------------------
        Alternative Loop (core0)
------------------------------------------------------------------------------------------------*/
void task0(void* arg)
{
     while (1)
     {    
         pcnt_get_counter_value(PCNT_UNIT_0, &RE_Count);          
         int count=RE_Count;
         pcnt_counter_clear(PCNT_UNIT_0);
         
         if(f_rev==1) count=-count;
                  
         if(count!=0){                           
            f_dchange=1;
            f_fchange=1;
            frq+= count * freq_step;
            if(frq>fmax) frq=fmax;
            if(frq<fmin) frq=fmin;
         }
         
         //-------------------------------------
         if(f_fchange==1){
            f_fchange=0;
            // Output Lo freq
            //set_freq( frq + offset_frq );
            p_frq = HET_FREQ-frq + offset_frq + awase ;
            set_freq( HET_FREQ - frq + offset_frq + awase);   //change to ts820vfo    
           
            o_frq = frq - HET_FREQ + 5500000;  //エンコーダー変化分
                       
            set_car_freq((car_frq + awase ), f_carON, 0);          
         }
         
         //-------------------------------------
         if(f_cchange==1){
            f_cchange=0;
            // Output Car freq            
            //set_car_freq(car_frq, f_carON, 0);  
            set_car_freq((car_frq + awase ), f_carON, 0);                         
         }

         if(f_redraw==1){
            Transfer_Image();
            f_redraw=0;
         }
                   
         delay(1);
     }
}

今日秋月通販へ注文したブレッドボード用のワイヤーや、他パーツが届きました。この為配線待ち部分も配線できてコーディングへ移れました。
仕様変更となった11ポートの設定バンド検出のコーディングは終わりました。もう少し色々と動かして確認をしてみたいと思います。パルスとタイマーのタイミングも確認したいと思います。

つづく?

続きを読む

TS820-DDS-VFOその3

TS820-DDS-VFO本体の中に組み込む事を今回考えてきたDDS-VFOですが、現状うまく動作してくれているので、少し残念なのですが、実装を考えた場合にこの回路では、基板スペ−スが大きすぎて組込む為にIC類をSOPタイプに変えるとかチップR,Cにするとかのサイズ変更検討が必要になりそうです。特にBCDでの制御ではESP32DevkitCへの出力する為のゲートICの4050のバッファーICも結構スペースを取ります。またバンド検出用のダイオードはとても個数が多い為スペースを取る要因の一つとなっています。直接11ポートのバンド情報をそのまま使う方法ではバンド検出用ダイオードは11本で済みますのでBCD回路のバンド情報検出使用の24本は11本までに減る事によりスペースをかなり減らす事が可能となります。バンド検出トランジスタ以降の2本は同じ回路を使いますので減らせません。タイマーIC2個とパルス発生ICも変更無しで使います。

範囲を選択_250

ふと思い、方針を変える事にしました。今までの方式はバンド情報をBCDの4ポートに変換してESP32DevKitCへのポート使用を減らす事を考えていました。当初全部のバンド情報用にポートを11個をESP32DevKitCに割り当てるのは無理だと思っていましたが、調べてみると直接11ポートを用意できる事に行き着きました。とにかく11ポートが割り当てできればいいので、下記の様に調べた結果を考慮し割り当てしました。特に使用出来ないポートが結構あるので、割り当ては本当に注意しないといけません。TFT液晶、SI5315A、ロータリーエンコーダ、シリアルポートは割り当て済みでの残りのポートで問題なく使えるポートとしての割り当てです。
書き忘れましたが、11個のバンド情報用ともう一つパルス入力のポート割り当ても合わせるとトータル12個のポート割り当てが必要です。

左側がバンド情報用として割り当てたポートです。
右側のIO16にバンド検出時のパルス入力ポートを割り当てました。外部VFOではハムログ用のシリアルポートとして使っていましたが、今回はハムログ用としてのシリアルポートはTXD0とRXD0を割り当てすることにしています。
CIMG9328

TS820のバンド情報の11本は設定時バンドポートに+9Vがかかるので4.5Vに抵抗で分圧する回路は同じですがそれ以降がシンプルに検出用ダイオード11本となりまたバッファーICが不要なシンプルな回路となります。分圧されたバンドのポートはESP32DevKitCの上記D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10に直接つながるのでとてもシンプルな回路となります。

前に完成してるTS820本体側のArduinoNANOの回路と同じでESP32DivKitCでも直接ポート11本が繋がる回路となります。ESP32DevKitCでは入力11ポートの電圧分圧で抵抗アレーを使用するぐらいが変更点です。
範囲を選択_117

ESP32DivKitC用の回路図はこれから作成しますが、基板の配置は現状のTS820のVFOのユニット内もしくは、そのスペースにはESP32DevKitCとSI5315Aの基板とTS820と同じLPF基板の2枚を入れ、バンド検出用の基板はVFOの横のスペースに取り付けることで全部で3基板を予定しています。あくまでも今の所の予定です。

LPFは前と同じ実績のあるこの回路基板を使います。
範囲を選択_105abc1

ロータリーエンコーダの取り付けをしての空きスペースに基板が収まるかどうかも見なければなりません。

随分と大きな変更となってしまいますが、実装出来るものでないと何にもなりませんので変更は必然的な事だと思っています。
今のBCD回路は満足に動作してますが、ソフトウェアは直接バンド情報をESP32DivKitCに繋ぐ方法でも4ポートが11ポートに変わるだけですので若干のif文の変更で同じように動作してくれると思っています。また検出原理も同じですから新たに考えるルーチンなどは特にありません。今までと同じ様にコーディングしてゆく事で問題無いと思っています。ソフトウェアより、VFOの位置に置く2枚の基板が上手く収まるかどうかがどちらかと言うと一番重要なポイントになると思っています。久しぶりのeagle CAD作業です。eagle CADでの回路図からの基板おこしも適切な基板サイズで収める事が出来るか、感を取り戻して何とか上手くまとめれればと思います。

また、確認で必要な実験用ボード配線も変更しなければなりません。やることが本当、増えてゆきます。

つづく?


バーチカルアンテナの修理2022年1月15日

つい最近のロシアからの寒気団が日本にも降りてきて台風並みの強風が吹き荒れてた為にバーチカルの上方のエレメントが折れていました。折れているのに気づいたのは、最初は1月初頭のニューイヤーパーティで久々にQSOした様に無線で7MHzにオンエアーしようと思い、いつもの様にアンテナのSWRをネットワーク・アナライザ−で確認するため電源を入れ、7MHzのプリセットデータを読みこませ、SWRモードに設定し、バーチカルアンテナを切替器でネットワーク・アナライザー側に繋いでみたところ、共振周波数がやけに高い方へ動いているようで、裾しか見えない状態でした。これはもしかしたらエレメントが折れたんではないかと思い外へ確認しに言った所、予想した通り、先端から1.5mぐらい下のところから折れていました。

CIMG9320

早速折れているエレメントを探そうと思い、強風で折れたんなら、少し離れた場所に落下しているだろうと思い、アンテナから10mぐらいの距離の辺りを中心に探してみました。しかし何処にも見当たりません。一体何処に落ちたのだろうと思いながらアンテナの下辺りも探してみましたが、一向に見つかりません。すぐそばに小屋があるので、もしかしたら屋根の上にないかと思い、少し離れて屋根の上も見てみましたが、なさそうです。不思議だな−と思いながら、ふと真下にある柿の木の枝を見た所、枝と枝の間に挟まってるエレメントがありました。飛ばされずに真下に落下して柿の枝に引っかかっていました。案外枝から取り外すのは大変で、少々時間がかかりましたが、釣竿を使い何とか折れたエレメントを枝から下ろす事が出来ました。
先ずは現物を見て、どこが原因で折れたかの確認です。

CIMG9323


CIMG9324

CIMG9325

毎回エレメントのネジ止めしている箇所から亀裂が入り折れるのと同じ状況ですが、今回はかなり上の方の細い部分です。前回2021年2月に折れた箇所は今回は全く問題ありませんでした。前回は、ほぼ原因がわかり対策を行なっていたので、今回は別の弱い箇所で折れたようです。今回は、折れたエレメントを持った時に、およそ見当がつきました。トップヘビーが原因だと思われます。先端部は前回少し長いステンレス棒に変えていました。アルミと比べるとかなり重いエレメントとなった為、しかも長さを長くした事も重なり、しなりが前よりも大きくなり、丁度折れた辺りがしなる箇所となった為、そこの取り付けネジ部に歪みが発生し亀裂ができて折れたと思われます。やはりタッピング用のネジ穴が原因となるようです。これはクリエイトなどのメーカーが行なっているネジ穴固定でなくネジで押さえつけて固定する方法を採用する理由が分かる気がします。ネジ穴は亀裂が入り易く折れる原因の元であることは間違いないです。Hi!このバーチカルはいままですべて折れた箇所はネジ穴で折れていました。クリエイトCL15の5エレ八木アンテナは同じ環境でも20年エレメントは折れたりせず現在までもっています。弱いところはラジエーターのプラスチックホルダーがありますが、太陽光線による劣化とラジエーターエレメントの重量負荷がホルダーの中心にかかる為、劣化が進み弱くなっってくると歪によりヒビがはいってヤジロベーの様に曲がってしまいます。過去2回程修理しています。一度ホルダーをテープをまいて補強しましたが、やはりヒビが入りヤジロベーになっています。ある程度消耗品と考えるのが正解かもしれません。あとはラジエータのホルダーを止める箇所を増やすとかすれば、ラジエータのエレメントの重量荷重がホルダーにかからない様に対策をとれば解決するのではないかと思っています。メーカーさんは余り対策は採りたくないかもしれません。
話がそれましたが、バーチカルの今回の折れた原因の対策はステンレスの棒を別の軽い金属棒に変えないとできない事なので行いません。やりませんが、出来るとするとステーを追加することぐらいでしょうか?とりあえず復旧作業のみということで、強風の回数が少ない事を祈ります。

エレメントの取り付け直し後のテーピング完了写真
CIMG9326

修理完了し元の位置に取り付け直したバーチカルアンテナ写真
CIMG9327
エレメントが15㎝程短くなった為、バランとアンテナエレメントまでの間の接続銅線を15㎝長くする事で折れた長さを補修対策し、共振周波数をチェックすることにしました。

エレメントを鋼管に取り付けバラン接続完了後、家に戻り7MHzにてネットワーク・アナライザでSWRを確認したところ共振周波数は7.125MHzでSWR:1.0でした。バンド帯域内は1.15以下です。珍しく調整作業することなかったので、修理完了としました。
早速無線室に戻り、テスト運用してみました。OMさん2局(1エリア、2エリア)コンタクト出来ました。まずまずです。
最近はトラブルが発生が多くなってきた感じがあります。長年何もなかったからなおさらトラブルが続くのかもしれません。オーバーホールを考えないといけない物が、考えてみると結構あります。タワーもしかり、アンテナも、無線機も、そして同軸ケーブルも、家の冷蔵庫なんかも最近トランスが唸るような音が出始めてきています。冷蔵庫はオーバーホール出来ないので買い替えとなると、トホホです。!

つづく? トラブルは続かないでほしい!

TS820-DDS-VFOその2

少し間があきましたが、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 DevKitCにBCDの4ポート化してカラー液晶上に本体バンドSWと連動した周波数を表示させたいと思っています。すべて前の実験回路をそのまま使い、処理はほとんどソフトウェアで行います。

ソフトウェアをコーディングしてゆきますが、前の経験で、バンド情報を単にESP32DevKitCの入力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のトリガーとなりESP32DevKitCのバンド情報検出用入力にLパルスが出力されます。(通常H状態)

範囲を選択_250

■setupルーチンでのLパルス発生
digitalWrite(START_ON,LOW); // 0 Port  Preset OUTPUT level "L"
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;                
   } 

上記を実験しているブレッドボード一式の写真です。(煩雑です。)
CIMG9311

CIMG9313

次はDDSICへの周波数設定の心臓部となるtask0 ルーチンへのコード対応を予定しています。

つづく?
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
  • ライブドアブログ