ホーム >> 無線ブログ集 >> TS820-DDS-VFOその14

無線ブログ集

  メイン  |  簡易ヘッドライン  

link jl7gmnのblog jl7gmnのblog (2024/3/11 19:35:35)

feed TS820-DDS-VFOその14 (2022/3/7 2:59:21)
TS820-DDS-VFOでの受信時のRIT追加で、表示は実際には見えない位置ですが、試験段階では重宝すると思いRX: と RIT: とRIT周波数もTFT液晶上に追加しました。RIT:はRX表示と一緒にしてたのですが、単独での表示に変更し、送受信時も同じ位置に表示するように変更しています。また、送信時の表示だけは周波数の前に”TX”が表示され送信中であることが見える様にしました。単なる表示部のスケッチ修正なので、省略です。
送信の時に元の周波数で送信状態になり受信時にはRITセットの周波数になる実機での確認はまだしていません。後にすることにしました。
ある程度の完成に近くなってきたので、ハムログへの周波数設定を先にすることにしました。
以前の外部VFO時に使っていたスケッチをコピペして簡単に機能追加出来ます。
当初予定していたシリアル通信のポートを前の製作の時と同じにするように戻しました。簡単に検討なしでの対応にするためです。4800BPS用です。コマンド体系はkenwoodにて対応しました。

■Dual Coreでの対応になるので下記インクルードファイルを読み込みます。
#include <freertos/FreeRTOS.h>

【内容】
基本はESP32DevKitCに搭載のDual Coreのうちのもう1つを追加しハムログへのシリアルデータを送出を担わせます。
Dual Core化で、かかる変更の主な点は下記になります。
RXD0(GPIO03)をRXD2(GPIO16)に変更
TXD0(GPIO01)をTXD2(GPIO17)に変更
この変更に伴いダブるので該当設定SWのポート入れ替えを行ないます。
RX_RITをGPIO17からGPIO01
CHANGE_BAND をGPIO16からGPIO3
■実際のスケッチ上の定義変更表記は下記になりました。
#define RX_RIT 1    //GPIO01
#define TX_SW 0    //GPIO00

#define CHANG_BAND 3 //GPIO03
#define RXD2 16 //uart RXD2 GPIO16
#define TXD2 17 //uart TXD2 GPIO17

■変数の宣言部へ追加
String sss; //Send Serial ASCII data to Hamlog
int count; //Variable

■肝心かなめのvoid task1(void* arg)タスクルーチンを新たに追加です。

//ADD FOR HAMLOG
void task1 (void* arg) {
while (1) {
String ss0;
String ss1;
String ss2;
String ss3;
String ss4;
String ss5;
String ss6;
String ss7;
String ss8;
String ss9;
String ss10;
String ss11;
String ss12;
String ss13;
String ss14;
String ss15;
String ss16;

char cc[11] = "          "; //initialize cc[]

char dinfop0[]= "IF";// command for read setinformation
char dinfop1[]= "          ";//TS820*** frequency sprintf(cc,"%011d",frq);
sprintf(cc,"%011d",frq);
ss1 = cc;  
char dinfop2[]= "     ";      // 5 bulank memory nouse
char dinfop3[]= "+0000";      // Rit frequency  
char dinfop4[]= "1";          // Rit ON =1, Rit OFF = 0
char dinfop5[]= " ";          // 1 bulank nouse for TS711/811/940 XIT
char dinfop6[]= " ";          // 1 bulank nouse for TS940only
char dinfop7[]= "00";         // MEMORY
char dinfop8[]= "0";          // RX ;"0", TX;"1"
char dinfop9[]= "1";          //TS820*** 1;LSB,2;USB,3;CW,4;FM,5;AM,6;FSK,7;CW-N
char dinfop10[]= "0";         // 0;VFO-A,1;VFO-B,2;MEMORY, 3;CALL for ONLY TS-711/811
char dinfop11[]= "0";         // SCAN on;1,  off;0
char dinfop12[]= "0";         // SPLIT on;1,  off;0
char dinfop13[]= " ";         // 1 bulank (TONE on;1, off;0 for ONLY TS-811)
char dinfop14[]= "  ";        // 2 bulank (TONE Frequency for ONLY TS-811)
char dinfop15[]= " ";         // 1 bulank (offset for ONLY TS-811)
char dinfop16[]= ";";         // delimitter

  ss0 = dinfop0;
//ss1 = dinfop1;
  ss2 = dinfop2;
  ss3 = dinfop3;
  ss4 = dinfop4;
  ss5 = dinfop5;
  ss6 = dinfop6;
  ss7 = dinfop7;
  ss8 = dinfop8;
  ss9 = dinfop9;
  ss10 = dinfop10;
  ss11 = dinfop11;
  ss12 = dinfop12;
  ss13 = dinfop13;
  ss14 = dinfop14;
  ss15 = dinfop15;
  ss16 = dinfop16;

  sss = ss0+ss1+ss2+ss3+ss4+ss5+ss6+ss7+ss8+ss9+ss10+ss11+ss12+ss13+ss14+ss15+ss16;
  
   if(count!=0){        
     f_dchange=1;
     f_fchange=1;             
     Serial2.print(sss);
     delay(100);   // need delay value over 80 so that set delay(100)
     if(frq>fmax) frq=fmax;
     if(frq<fmin) frq=fmin;
   }
  }
}

上記のスケッチ中の下記部がロータリーエンコーダを動かした時だけに周波数のシリアルデータを送出する箇所になります。重要なのは、delay(100);小さくしすぎるとサブダイヤルの周波数表示変化がカクカクします。そうならない値がdelay(80);以上ということです。動作上問題がないと確認したdelay(100);に設定してます。
  if(count!=0){        
     f_dchange=1;
     f_fchange=1;             
     Serial2.print(sss);
     delay(100);   // need delay value over 80 so that set delay(100)
     if(frq>fmax) frq=fmax;
     if(frq<fmin) frq=fmin;
   }
■void setup(){のシリアルポートの設定追加とDual Coreタスク宣言追加
void setup() {
//-----------------------------------------------------------------------------------------------
    Serial.begin(115200); //add 2021.Sep.19
    char str[64];
    Serial2.begin(4800,SERIAL_8N1,RXD2,TXD2);// RXD2:16,TXD2:17
   
    //--------- create tasks on core0 --------------------------------
    xTaskCreatePinnedToCore(task0, "Task0", 4096, NULL, 1, NULL, 0);// core0
   
    xTaskCreatePinnedToCore(task1, "Task1", 4096, NULL, 1, NULL, 1);// core1
    
    //--------- Set up Interrupt Timer -------------------------------
    timer = timerBegin(0, 80, true); //use Timer0, div80 for 1us clock
    timerAttachInterrupt(timer, &onTimer, true);
    timerAlarmWrite(timer, 10000, true); // T=10000us
    timerAlarmEnable(timer); // Start Timer
  
〜省略

■void loop(){ 中の追加
下記は削除していたバンド検出回路の通常時”H”レベル、バンドSW動作時”L"パルス送出の回路をやはり使う必要がで出てきました。なぜかと言うとバンドSWを変えた時の情報がない為、エンコーダーが動いている時にシリアルデータを送出するスケッチではハムログのバンドがバンドSWを変えてもそのままとなってしまう現状動作のためです。バンドがかわった時に出す”L”パルスでバンドが変わった時の周波数データを送出させる対策として追加しました。
if(digitalRead(CHANG_BAND)==LOW){   // IF pin24 L PULS IN (ordinary H level)
       FrqToHamlog();
  }
if(((((((((((digitalRead(TO_ESPD0)==HIGH)     // "1" 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))))))))))){  //29.5MHz
            HET_FREQ = HET_FREQ11;
            if(p==0){
               frq = freq11;
               FrqToHamlog();
               p=1;
            }
            else{
             if(p==1){
               frq = HET_FREQ - 5500000 + o_frq;
               p=1;
             }
            }

            f_dchange = 1;
            f_fchange=1;//add 2020Dec12
          
     }
     else{
         if(((((((((((digitalRead(TO_ESPD0)==LOW)     // "1" BCD port 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))))))))))){  //29MHz
              HET_FREQ = HET_FREQ10;
              if(p==0){
                 frq = freq10;
                 FrqToHamlog();
                 p=1;
              }
              else{
               if(p==1){
                 frq = HET_FREQ - 5500000 + o_frq;
                 p=1;
               }
              }
            
              f_dchange = 1;
              f_fchange=1;//add 2020Dec12
            
         }
     }
以下上記と同じようなバンドごとの設定スケッチが続きます。

■上記のバンドSWが変わった時にハムログへ周波数データを単発でシリアル送出するサブルーチンも前のをそのまま使います。
void FrqToHamlog(){ //Frequency Set to Hamlog when setting power on( p=0 then FrqToHamlog();)
//************************ Send Freq & Mode to HAMLOG *****************************
// 2021JAN17   Kenwood Command
//*********************************************************************************    
String ss0;
String ss1;
String ss2;
String ss3;
String ss4;
String ss5;
String ss6;
String ss7;
String ss8;
String ss9;
String ss10;
String ss11;
String ss12;
String ss13;
String ss14;
String ss15;
String ss16;

char cc[11] = "          "; //initialize cc[]

char dinfop0[]= "IF";// command for read setinformation
char dinfop1[]= "          ";//TS820*** frequency sprintf(cc,"%011d",frq);

sprintf(cc,"%011d",frq);
ss1 = cc;  

char dinfop2[]= "     ";      // 5 bulank memory nouse
char dinfop3[]= "+0000";      // Rit frequency  
char dinfop4[]= "1";          // Rit ON =1, Rit OFF = 0
char dinfop5[]= " ";          // 1 bulank nouse for TS711/811/940 XIT
char dinfop6[]= " ";          // 1 bulank nouse for TS940only
char dinfop7[]= "00";         // MEMORY
char dinfop8[]= "0";          // RX ;"0", TX;"1"
char dinfop9[]= "1";          //TS820*** 1;LSB,2;USB,3;CW,4;FM,5;AM,6;FSK,7;CW-N
char dinfop10[]= "0";         // 0;VFO-A,1;VFO-B,2;MEMORY, 3;CALL for ONLY TS-711/811
char dinfop11[]= "0";         // SCAN on;1,  off;0
char dinfop12[]= "0";         // SPLIT on;1,  off;0
char dinfop13[]= " ";         // 1 bulank (TONE on;1, off;0 for ONLY TS-811)
char dinfop14[]= "  ";        // 2 bulank (TONE Frequency for ONLY TS-811)
char dinfop15[]= " ";         // 1 bulank (offset for ONLY TS-811)
char dinfop16[]= ";";         // delimitter

  ss0 = dinfop0;
//ss1 = dinfop1;
  ss2 = dinfop2;
  ss3 = dinfop3;
  ss4 = dinfop4;
  ss5 = dinfop5;
  ss6 = dinfop6;
  ss7 = dinfop7;
  ss8 = dinfop8;
  ss9 = dinfop9;
  ss10 = dinfop10;
  ss11 = dinfop11;
  ss12 = dinfop12;
  ss13 = dinfop13;
  ss14 = dinfop14;
  ss15 = dinfop15;
  ss16 = dinfop16;

  sss = ss0+ss1+ss2+ss3+ss4+ss5+ss6+ss7+ss8+ss9+ss10+ss11+ss12+ss13+ss14+ss15+ss16;
      
             Serial2.print(sss);
}


以上の変更追加にてハムログでの周波数データの取り込みが出来るようになります。
ただし厄介な事に、以前シリアルデータ用のICを使って上手くPC上でも認識できたAE-FT234Xが古いPCで認識エラーがでて使うことが出来ない状態です。前はXPのPCで動いていたのですが、HAMLOGのアプリでのシリアル設定で使えない状態でした。今回はADM3202のシリアル変換ICとARVELのUSBシリアルケーブルで急遽代用しました。AE-FT234XはWindows10でUSB3.0では動作します。2.0ではダメでした。XPで動かないのもドライバーのせいかと思い、ダウンロードしてインストールしましたが、動作しませんでした。XPの役目がなくなりつつあります。寂しい!
今日試験ボードで完成したばかりで回路図も修正しなければなりません。
テスト運用に向けて、既存の基板を修正追加したいと思います。

つづく?

execution time : 0.025 sec
サイト内検索

メインメニュー

ログイン
ユーザ名:

パスワード:



パスワード紛失


オンライン状況
27 人のユーザが現在オンラインです。 (16 人のユーザが 無線ブログ集 を参照しています。)

登録ユーザ: 0
ゲスト: 27

もっと...