TS820用の外部DDS−VFO(VFOsys改)の本体のCore0のスケッチでの周波数設定ロータリーエンコーダーの回転にかわわらずにCore1でハムログへの周波数データを連続送出している現状ですが、やはり周波数シリアルデータが連続送出しているというのは、いくら周波数の変化が問題なくなったとはいえ、前の垂れ流しでのPC側に対してのマウスなどへの影響を及ぼしていたので、今後、何が起きるかかわかりません。ということで、Dual Core動作のCore1も、ロータリーエンコーダーが回転している状態のときにのみ周波数シリアルデータを送出することを検討し始めました。Core0でのロータリーエンコーダーのステップから周波数を決めるtask0(void* arg)ルーチン内の処理の一部を利用して試してみたいと思います。
利用するのは、仕様にあった f_dchange=1, f_fchange=1 を条件として使います。
また、ローカル変数であるcount をCore1でも認識できるグローバル変数に変更します。
task0では青色文字が変更箇所になります。
スケッチの先頭部の変数宣言と同様に count を変数宣言しグローバルで使用出来るようにします。
int count;



void task0(void* arg)
{
    while (1)
     {  
         pcnt_get_counter_value(PCNT_UNIT_0, &RE_Count);     
      // int count=RE_Count;
         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; //variable;count,freq_step=0.8,then frq=frq+(count*0.8)
         
            if(frq>fmax) frq=fmax;
            if(frq<fmin) frq=fmin;
          }

          if(f_fchange==1){
             f_fchange=0;
             set_freq(( HET_FREQ - frq + awase ) + offset_frq );   //change to ts820vfo
          }

         if(f_cchange==1){
            f_cchange=0;  //if Car frequency and/or "f_carON" changed, set this flag to 1
            set_car_freq((car_frq + awase ), f_carON, 0);                                     
         }

         if(f_redraw==1){
            Transfer_Image();
            f_redraw=0;
         }
         delay(1);
     }
}
  
Core0のtask0ルーチンは1箇所count変数部のスケッチのみ変更です。
次は、Core1側です。
ロータリーエンコーダーが回転した時が最初の条件になります。
Core1のtask1ルーチンではロータリーエンコーダーの回転時の条件でcountを使います。コントロールフラグ類(f_dchange,f_fchangeが1の時)を使いSerial2.print(sss);で周波数を送出するようにスケッチを追加しました。
これで、ロータリーエンコーダーが動いている状態のときのみ周波数シリアルデータが送出される様になります。
------------------------------------------------------------------------------------------------------------------------------
void task1 (void* arg) {
  while (1) {
  //************************ 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;
 // String sss;//Send Serial ASCII data to HAMLOG
  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(1);
           if(frq>fmax) frq=fmax;
           if(frq<fmin) frq=fmin;
       }

   }
}
------------------------------------------------------------------------------------------------------------------------------
上記の変更で以前のCore0でロータリーエンコーダーを回転させた時のみ周波数シリアルデータを送出していたのと、全く同じ様にCore1もロータリーエンコーダー回転時のみ周波数シリアルデータを送出するようになります。Core0の時との動作上の大きな違いは、途切れのないなめらかな周波数の変化であるということです。キャリアを聞いている時、いくら速くロータリーエンコーダーを回転させても、音階のような飛び飛びの音になりません。Dual Coreでのスケッチで既に周波数は、なめらかに変化している上に、ロータリーエンコーダーが回転している時のみの周波数シリアルデータ送出です。速い回転でも不自然さは全くありません。これが目的としてい結果でとても満足しています。Hi!

コンパイルして、ESP32DevKitCボードに書き込み、前のESP32DevKitCと交換して、Windows10で試し運用もしてみました。周波数の変化がとてもスムーズでアナログVFOと同じ感じで動作してくれました。一番の目的のハムログでの動作も、ロータリーエンコーダを回転させたときのみの周波数シリアルデータ送出でも問題なくFrq欄に取り込んでくれています。
実践テストをかねて3局程QSOをしてみましたが、動作は全く問題ありませんでした。
今のDDS−VFO(VFOsys改)は現状での仕様で小さな問題点もありません。一番安定している状態になりました。
当面実際のQSOでTS820のDDS−VFO(VFOsys改)で楽しみたいと思います。
まだまだ、機能追加については、たくさん頭の中にあります。これから、また追加できるかを実験しながら検討してゆきたいと思っています。

つづく?
先に書いた下記文面についてですが、やはり早合点でした。「実践テストをかねて3局程QSOをしてみましたが、動作は全く問題ありませんでした。今のDDS−VFO(VFOsys改)は現状での仕様で小さな問題点もありません。一番安定している状態になりました。」は同じ周波数帯での確認で問題がなかっただけです。バンドSWを変化させた時のハムログへの周波数シリアルデータの送出を全部コメント化していたのを忘れていました。すべてCore1でハムログ読み込みが対応できたと思い込みです。元々のサブルーチンで作成した FrqToHamlog();をコメント化から解除して、ArduinoNANOから送られて来る周波数帯情報をESP32DivKitC内のシリアルデコード部でバンド情報に対応する初期設定周波数をハムログへ周波数のシリアルデータにして送出してやる必要があります。
Core0のtask0ルーチンのロータリーエンコーダー動作時に送出のFrqToHamlog();は削除のままです。入れると周波数が音階になるトラブルに戻ってしまいます。バンドSWの周波数情報をうけて、初期設定周波数のシリアル周波数データをハムログへ送ります。これで、間違いなく、問題ない状態、安定状態になりました。今度こそは間違いありません。結果は急がないことが賢明ですね!今まで何回も、嬉しさの余り、完成した!と勘違いすることが、多々ありました。何回もでは、残念ながら、過去が生かされていません。恥ずかしい限りです。なので、今後は、未だ問題があるかもしれません。ということにします。

ひとまずコンパイルして、テストボードで動作上の問題の無いことを確認しました。バンドSWでのハムログでの周波数取り込みも、ロータリーエンコーダーを回した時のハムログでの周波数読み取りも問題ありませんでした。

つづく?