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;
{
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(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
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);
}
}
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;
}
}
}
------------------------------------------------------------------------------------------------------------------------------
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改)で楽しみたいと思います。
まだまだ、機能追加については、たくさん頭の中にあります。これから、また追加できるかを実験しながら検討してゆきたいと思っています。
つづく?
続きを読む