VFOsysが上手く動作してくれているので、現在の7MHzONLYのDDS-VFOをTS−820本体の全バンドをDDS-VFOに対応させるための方法を考えて見ることにしました。とにかく本体のTS−820から得る方法ですが、必ずトランシーバーで使用している各バンドのOSC回路のバンド選択された時にかかるB電圧を使うのが手っ取り早いと思い、構想してみました。最初のやることは、バンドSWの順番にバンド数とバンドの確認です。
WWV
1.9MHz
3.5MHz
7.0MHz
14.0MHz
21.0MHz
28.0MHz
28.5MHz
29.0MHz
29.5MHz
AUX(18.0MHz)
全部で11バンドあります。すべての情報をVFOsysに持ってこないといけません。なにかしらのバンドに対しての情報を得る方法として都合が良いのはシリアル通信です。シリアル通信でArduinoNANOでの実験では基本3本の線でやり取りで情報をTS−820本体からTS-820VFOのDDS-VFOへ渡せます。他のコードレスのブルートゥースとか、赤外線とかであればコードなしですが、送りも受けもシールドケース内に入る事になるので、通信があまりうまく行かない可能性があります。なので、今回はシリアル通信で行うことにしました。
先ずは仕様ぎめです。バンドSWに対しての関連付けるものが必要です。あと、明白に分かるようにということで、素直に文字表示のバンド情報です。何のこと無いバンドの周波数表示です。いろいろな情報を送ることを考えると、やはり深くなるので、手っ取り早く、今回はバンド関連情報と周波数情報の2つに限定しました。後からでもSメータ情報追加は可能かと思います。
TS-820本体側のArduinoNANOでの処理です。手持ちの都合だけでのArduinoNANOになりました。
以下の様に独断で決めます。トップバンドの1.9MHzを例に実際のデータは下記の様になります。
周波数関連文字情報(2桁の半角文字):”01”
周波数表示情報(8半角文字右詰め) :” 1.9MHz"
情報終わり情報(1半角文字) :”;”
全部で情報は11文字となります。
情報例として、バンドSWが1.9MHzだとシリアル通信で送るデータは
”01 1.9MHz;"1.9MHzの前のスペースは半角2文字です。14.0MHz以上はスペースが半角1文字になります。
スケッチにも記してますが全バンド情報では下記となります。
//TX-SerialData: String 2Data & BandInformation //
// example: "00 Error!;" //
// example: "01 1.9MHz;" //
// example: "02 3.5MHz;" //
// example: "03 7.0MHz;" //
// example: "04 14.0MHz;" //
// example: "05 WWV-15M;" //
// example: "06 18.0MHz;" //
// example: "07 21.0MHz;" //
// example: "08 28.0MHz;" //
// example: "09 28.5MHz;" //
// example: "10 29.0MHz;" //
// example: "11 29.5MHz;" //
// example: "00 Error!;" //
// example: "01 1.9MHz;" //
// example: "02 3.5MHz;" //
// example: "03 7.0MHz;" //
// example: "04 14.0MHz;" //
// example: "05 WWV-15M;" //
// example: "06 18.0MHz;" //
// example: "07 21.0MHz;" //
// example: "08 28.0MHz;" //
// example: "09 28.5MHz;" //
// example: "10 29.0MHz;" //
// example: "11 29.5MHz;" //
各OSCのB電源の入力はArduinoNANOのデジタルポートに対応させます。B電圧をかけるのでポートの指定はINPUTにします。プルアップだとアクティブローなので、反転回路がいるので、上手くありません。各デジタルポートは47kでGNDに落とします。B電圧は5Vで10kを通してで各ポートに加わる事になります。GNDに抵抗で落とさないとポート入力が安定せず誤動作しました。
選択されたバンドのB電圧がポート1つだけに加わります。”H”になったポート電圧は3.5Vと少し低いですが、上手く動いています。今の所動作確認が主です。後で抵抗値は調整します。
後のスケッチで分かりますが、バンド情報はString変数のbandkindで指定します。bandkind = "01"
このbandkind情報で、VFOsysのスケッチでVFOの周波数帯毎にHET_FREQを指定するスケッチを追加してゆきます。7MHz 時のHET_FREQは12.5MHzです。
TS820専用のVFOの周波数に合わすためにHET_FREQの各バンド毎の設定をすることになります。
”00” ⇔ デジタルポート接続なしの場合の設定でエラーとします。バンドSWが切り替わるまでのB電圧の無接続状態時が相当します。
"01" ⇔ D2 //1.9MHz
"02" ⇔ D3 //3.5MHz
"03" ⇔ D4 //7.0MHz HET_FREQ = 12.5MHz
"04" ⇔ D5 //14.0MHz"05" ⇔ D6 //15.0MHz(WWV)
"06" ⇔ D7 //18.0MHz(AUX)"07" ⇔ D8 // 21.0MHz
"08" ⇔ D9 // 28.0MHz"09" ⇔ D10 // 28.5MHz
"10" ⇔ D11 // 29.0MHz"11" ⇔ D12 // 29.5MHz
TS−820の本体に組み込むシリアルデータ送出用のArduinoNANOのスケッチです。
単に電圧のかかったデジタルポートの検出で仕様で決めたデータをシリアル通信で送るというスケッチです。1.9MHzでの送出データ ”01 1.9MHz;" です。
//**********************************************************************
#define IND2 2 //D2 1.9MHz
#define IND3 3 //D3 3.5MHz
#define IND4 4 //D4 7.0MHz
#define IND5 5 //D5 14.0MHz
#define IND6 6 //D6 15.0MHz(WWV)
#define IND7 7 //D7 18.0MHz(AUX)
#define IND8 8 //D8 21.0MHz
#define IND9 9 //D9 28.0MHz
#define IND10 10 //D10 28.5MHz
#define IND11 11 //D11 29.0MHz
#define IND12 12 //D12 29.5MHz
const String band_Mode ;// default
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// Digital input for outside source Non PULLUP need pullup R:10k & devider R:47k
pinMode(IND2, INPUT); //D2 WHEN input "H" 1.9MHzselect(10kohm to 5V);D2PortVoltage 4.3V
pinMode(IND3, INPUT); //D3 4.1V Nominal
pinMode(IND4, INPUT); //D4 4.1V Nominal
pinMode(IND5, INPUT); //D5 4.1V Nominal
pinMode(IND6, INPUT); //D6 4.1V Nominal
pinMode(IND7, INPUT); //D7 4.1V Nominal
pinMode(IND8, INPUT); //D8 4.1V Nominal
pinMode(IND9, INPUT); //D9 4.1V Nominal
pinMode(IND10, INPUT);//D10 4.1V Nominal
pinMode(IND11, INPUT);//D11 4.1V Nominal
pinMode(IND12, INPUT);//D12 4.1V Nominal
}
void loop() {
// put your main code here, to run repeatedly:
String bandkind ; //TS-820S BAND FREQUENCY SELCECTED BAND SW
if ((digitalRead(IND2) == HIGH)){
bandkind = "01"; // 1.9MHz
band_Mode = " 1.9MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if ((digitalRead(IND3) == HIGH)){
bandkind = "02"; // 3.5MHz
band_Mode = " 3.5MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if ((digitalRead(IND4) == HIGH)){
bandkind = "03"; // 7.0MHz
band_Mode = " 7.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND5) == HIGH)){
bandkind = "04"; // 14.0MHz
band_Mode = " 14.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND6) == HIGH)){
bandkind = "05"; // WWV(15.0MHz)
band_Mode = " WWW-15M;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND7) == HIGH)){
bandkind = "06"; //18.0MHz
band_Mode = " 18.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND8) == HIGH)){
bandkind = "07"; //21.0MHz
band_Mode = " 21.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND9) == HIGH)){
bandkind = "08"; //28.0MHz
band_Mode = " 28.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND10) == HIGH)){
bandkind = "09"; //28.5MHz
band_Mode = " 28.5MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND11) == HIGH)){
bandkind = "10"; //29.0MHz
band_Mode = " 29.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND12) == HIGH)){
bandkind = "11"; //29.5MHz
band_Mode = " 29.5MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
bandkind = "00"; //NO Band Data Error
band_Mode = " Error!;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
}
}
}
}
}
}
}
}
}
}
}
#define IND3 3 //D3 3.5MHz
#define IND4 4 //D4 7.0MHz
#define IND5 5 //D5 14.0MHz
#define IND6 6 //D6 15.0MHz(WWV)
#define IND7 7 //D7 18.0MHz(AUX)
#define IND8 8 //D8 21.0MHz
#define IND9 9 //D9 28.0MHz
#define IND10 10 //D10 28.5MHz
#define IND11 11 //D11 29.0MHz
#define IND12 12 //D12 29.5MHz
const String band_Mode ;// default
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// Digital input for outside source Non PULLUP need pullup R:10k & devider R:47k
pinMode(IND2, INPUT); //D2 WHEN input "H" 1.9MHzselect(10kohm to 5V);D2PortVoltage 4.3V
pinMode(IND3, INPUT); //D3 4.1V Nominal
pinMode(IND4, INPUT); //D4 4.1V Nominal
pinMode(IND5, INPUT); //D5 4.1V Nominal
pinMode(IND6, INPUT); //D6 4.1V Nominal
pinMode(IND7, INPUT); //D7 4.1V Nominal
pinMode(IND8, INPUT); //D8 4.1V Nominal
pinMode(IND9, INPUT); //D9 4.1V Nominal
pinMode(IND10, INPUT);//D10 4.1V Nominal
pinMode(IND11, INPUT);//D11 4.1V Nominal
pinMode(IND12, INPUT);//D12 4.1V Nominal
}
void loop() {
// put your main code here, to run repeatedly:
String bandkind ; //TS-820S BAND FREQUENCY SELCECTED BAND SW
if ((digitalRead(IND2) == HIGH)){
bandkind = "01"; // 1.9MHz
band_Mode = " 1.9MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if ((digitalRead(IND3) == HIGH)){
bandkind = "02"; // 3.5MHz
band_Mode = " 3.5MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if ((digitalRead(IND4) == HIGH)){
bandkind = "03"; // 7.0MHz
band_Mode = " 7.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND5) == HIGH)){
bandkind = "04"; // 14.0MHz
band_Mode = " 14.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND6) == HIGH)){
bandkind = "05"; // WWV(15.0MHz)
band_Mode = " WWW-15M;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND7) == HIGH)){
bandkind = "06"; //18.0MHz
band_Mode = " 18.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND8) == HIGH)){
bandkind = "07"; //21.0MHz
band_Mode = " 21.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND9) == HIGH)){
bandkind = "08"; //28.0MHz
band_Mode = " 28.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND10) == HIGH)){
bandkind = "09"; //28.5MHz
band_Mode = " 28.5MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND11) == HIGH)){
bandkind = "10"; //29.0MHz
band_Mode = " 29.0MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
if((digitalRead(IND12) == HIGH)){
bandkind = "11"; //29.5MHz
band_Mode = " 29.5MHz;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
else{
bandkind = "00"; //NO Band Data Error
band_Mode = " Error!;";
Serial.print(bandkind);
Serial.println(band_Mode);
delay(500);
}
}
}
}
}
}
}
}
}
}
}
}
//****************************************************************************************
TS820本体からのバンド情報のシリアルデータ送信部でした。
シリアルデータ受信部が今はArduinoNANOですが、いづれESP32DivKitCに移植することになります。
ArduinoNANOで動作してる受信部は次回にします。
つづく?