jl7gmnのblog

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

2020年10月

Candle for LINUXその23

夕食を食べて7時半となると、少し眠くなるのだが、そこは、我慢して?TS820VFOの自動周波数設定の為に選択したバンド情報のシリアルデータを本体から送り、そのシリアルデータを受信するArduinoNANOのスケッチ移植までを、先ずまとめることにします。今も続いていますが、TS820 用へのVFOsysの改良の流れです。

①最初YOUTUBEに面白いDDS-VFO動画をアップしているのを発見。データを公開してくれているので、対応するハード類を準備:VFOsysをダウンロードしてハード部を配線し、スケッチをコンパイル、書き込みし、アナログ風のデジタルデータダイアルサブダイアル、周波数表示に超感激!

②TS820用として、最初にVFOsysスケッチに周波数7MHz用でTS820のVFOの仕様に合わせて、周波数範囲を下記対応となるようにSI5351Aの周波数設定部のスケッチに追加修正を行う。
ダイヤル7.000MHz:VFOsys出力周波数5.500MHz
ダイヤル7.500MHz:VFOsys出力周波数5.000MHz
③VFOsysをSSB,CW用としてのキャリア補正部を追加 awase 変数にてSI5351Aの周波数ズレを補正出来るようにした。

④TS820VFOのVFOメカ部を外した後にTFT液晶を取り付けるために主ダイヤル、サブダイヤルの描画位置と周波数のフレームを外し、さらに周波数表示位置をTS820VFOフロントパネルの窓に合うようにスケッチ変更。仮組み込み完成。

⑤周波数7MHzオンリーでは、せっかくのTS820がモノバンドトランシーバーになってしまうので、TS820の全バンドをVFOsysに情報取り込む方法を検討開始。

⑥シリアル通信を使いTS820本体から、バンド選択情報を送る方式に決定し、先ずは手持ちのArduinoNANO2つで実験開始。TX用,RX用それぞれスケッチコーディング開始する。

⑦シリアルTXの送出データの仕様を勝手に決定(Stringデータを使用することに)扱い易いため!
”01  1.9MHz;" → ”01” バンドに対応する単純な”01”から順番にTS820のパネルに記載されている周波数全部を割り当てる。(一応仕様としてCandle for LINUX20に記載済み)

⑧受信部用のArduinoNANOにて、TS820本体に見立てたロータリーSWでの実験で先ずは、全バンドSW分を受信デコード成功!

⑨ESP32DivKitCの実験基板をVFOsys用に再び用意して、ArduinoNANOのシリアル受信部のスケッチを移植し、デバッグして、ArduinoNANOと同じくシリアルデータデコード成功!

⑩ArduinoNANOでTS820本体のバンド選択情報を送り、ESP32DivKitCのシリアル受信デコードを確認していて、VFOsysのロータリーエンコーダーを回して、バンド情報を送ってみると、周波数の設定が設定周波数に戻るバグに遭遇!さあー大変だ!になった。

⑪周波数エンコーダを回した後の送出が連続垂れ流しのシリアルデータであることが、周波数を毎回設定している状態だと、気づく!考えれば分かることだったが、遅かった!連続シリアルデータでも良いようにソフト処理で対策出来ないかを一応考え始める。がかなり大変そうなので他を検討することに!

⑫一番てっとり速い、シリアルデータを数回送り。その後は送出しない方式を検討することにした!安易な方法!ArduinoIDEにあるシリアルモニタを使い、ESP32DivKitのVFOsysのシリアル受信デコード部が2回の送出データでデコードが、ほぼ問題ない事を確認。ということで、シリアル受信部はほぼ変更無しで進めることに!

⑬TS820本体側のシリアルデータ送出用に用意したPUSH-SWで、2回送る様にプログラムを修正開始。本体のバンド切り替えSWを選んでから、シリアル送信用SWを押すことで、全バンド問題なくデコードされる。一応半自動周波数情報送出部完成とした。シリアル送受信とも一旦完成!

⑭全部のバンド情報がVFOsys側に取り込めるようになるので、全バンドの周波数表示とVFOの出力が常に5.500MHzから5.000MHzになるように、VFOsysのスケッチ追加修正を実験ボードのESP32DivKitCで行う。ほぼ完了!

⑮TS820本体のシリアルデータ送出用SWをなくすことを検討開始。SWのトリガーとしての単安定マルチバイブレータを実験開始。(TTL-IC:74121)本体のバンドSWに見立てたロータリーSWを回すも、パルスの発生とバンドSWの安定時間とのタイミングが悪いため、パルス発生するも不安定動作することが判明。別の方法を検討開始する。

⑯バンドSWを回して+B電圧(各バンドOSCの電源)がArduinoNANOのデジタルポートのD2 〜D12 のどれかにかかる事を想定して、各バンドに+B電圧が加わるまでのタイムラグを検出する方法をトリガーとする方向でタイマーIC555の検討開始。バンドSWを回すと、必ずオープンとなる時間が存在するので、1石のTrでスィッチングを行い同相の出力を得、タイマーIC555のTRG入力のトリガーとし、時定数用CRで0.5SECのH出力の立ち下がりでArduinoNANOの送出SW代わりになるようにした。最終的に時定数は約0.1SECとした。トリガー後にバンドSWが安定した時にシリアルデータ送信してくれる為、安定動作するようになりました。タイマーICはある時間経過後に今まで付けていた送出SWと同じ役目をしてくれるので、SWを押さなくても本体のバンドSWを変えるだけで、上手くシリアルデータを自動送出してくれます。ひとまず実験段階ですが、TS820のバンドSWを回すだけで、VFOsysへのシリアル情報を自動送出出来る様になりました。このバンドデータの自動送出化についても、後でまとめたいと思います。
ソフトウェアでの意地悪実験もやってみましたが、全部クリアしてます。下記の様な確認です。
バンドSWをできるだけ速く変える。1.9MHzから29.5MHzまでを一気にガチャガチャガチャと回すやつです。きちんとVFOsysも29.5MHzに設定されます。その逆も問題ありませんでした。2つ変えるとか3つ変えるとか色々とやりましたが、問題なく最終の止まったバンド設定にきちんとなりました。ゆっくりまわしても同様にきちんとバンド設定情報が送られて、設定されました。全く問題ありませんでした。予想以上に上手く動作してくれています。

あと検討することは、TS820本体のOSC部の電圧は+9Vであることより、今検討しているのは+5Vでの実験であることより、+9Vを+5Vへのレベル変換をを考える必要があります。が、単純に抵抗を使った分圧で9Vを5Vにするので良いのではないかと、安易に考えてます。大丈夫かなー?

今現在は、⑯というところです。とにかく自動で周波数が変わってくれるまでにはなりました。TS820のバンドSWに連動してVFOsysの周波数も設定されます。最高にいいです!
本体との接続としては、従来のVFOケーブルに追加するシリアル通信様のRX線、TX線の2本が必要となります。(GNDはVFOケーブル共用なります)
実験での成功を本体の820に組み込んで、同じようにシリアル自動送信するためにバンドSWの検出が上手く行き、自動送出してくれるかはまだ、わかりません。実験段階ではOKです。案外検討不足の為に実際の確認でコケることがあるので、そうならないといいのですが!特に確認していないのが、送信時の影響です。高周波の回り込みです。実際の電波が出ている時に動作が問題ないかということです。前のDDS-VFOでは問題ありませんでしたが、今回は、シリアル通信線があったりとか、TS820本体側のOSCの+B電源につながるとかがありますから!こんなことを考えると、やはり、各電源ラインなどに、パスコンでも余分に入れようかなどと思ったりしています。(SWRが高い状態で、確認したいところです。)

シリアル受信部とVFOsysへのシリアルデータでの全バンド対応のスケッチ改良部については、又の機会にまとめたいと思います。また、自動送出部の回路図もEAGLEでまとめないいけません。記憶が新しい内にやらないといけません。Hi!

あと、VFOsysには無い周波数メモリ機能とか、レジューム機能等、誰かVFOsysを改良している方がいたら、教えていただけると良いのですが!Hi!
2020年度内に先ずTS820のVFOのDDS化デジタルダイヤル化でリニューアルしたいものです。

つづく?

Candle for LINUXその22

2台のArduinoNANOでTS820本体側のArduinoNANOからはシリアルデータ送出をバンドSWの選択で各バンドのOSC回路の+B を検出し、その情報からTS820VFO側でそれを受けて周波数を設定するという大まかな案を実際にスケッチして、繋いで、間違いなく周波数がバンドSWと同じに設定されるまでは良かったのですが、ArduinoNANO2台で実験している内に、問題があることが分かりました。TS820本体のバンドSWを変えるシミュレーションでのTS820VFO側の周波数の表示は間違いなく設定されはします。が、がです。周波数情報は連続してVFOに送られる状態となっていて、常に周波数を設定する状態なのです。つまり、VFOのダイヤルで周波数を変えても、すぐ、設定する周波数に戻ってしまうのです。という問題です。対策を色々考えてみました。頭の中だけで考えたできそうな対策としては、同じ周波数の情報の場合は、周波数設定はしないようにする。この場合で、垂れ流しで送られてくる周波数の情報が違う情報になったら周波数設定するという変化を検出する方法などです。しかし、これはかなりプログラミングのテクニックが必要な対策です。できそうですが、結構大変な内容です。そこで、最も単純で、間違いない対策も考えました。垂れ流しをやめれば良いという方法で簡単に実現することにします。1回か2回の周波数情報を送ってやれば、VFO側ではまず、情報を受信し周波数設定をするだろうということです。その後は同じ周波数情報は来ませんから、VFOダイヤルを回しても、設定した周波数は変わりません。連続な周波数設定情報が問題なのです。ただし、TS820本体からの自動送出での対応でなくなるということがあります。半自動と言いましょうか、きっかけは人がSWを押してバンド情報を送るという事です。やり方としては、次の様になります。

1:トランシーバーの電源を入れる。勿論アンテナとかVFOはセッティング済み。外部VFO設定です。
2:出たいバンドをバンドSWで選ぶ。
3:VFOへ情報を送るSWを押す。
4:VFOが選択バンドになる。
5:バンドを変更する。
6:VFOへ情報を送るSWを押す。
7:VFOが選択バンドになる。

つまり、3と6のSWを押す行為が必要と言うことです。高度なスケッチでなくてもまずは実現出来ます。これが、データ送出は自動ですが、送出のトリガーは人の手でのSW押下の為、半自動と言った理由です。また、この場合でも、問題があります。使い方なのですが、SWはバンドを変えたい時押すという事です。ダイヤルを回して、周波数を変えて運用してる時にSWを押してしまうと、設定周波数に戻ってしまいます。いつでもSWが押せる状態であることから起きうる問題となります。運用では気をつけて、SWは必要な時以外(バンドを変えた時以外)は、押さない様に、という事です。スケッチは、SWの押下処理と各バンドのOSCの+B電圧のかかっているArduinoのポートを検出して、検出したポートに対応するバンド情報を送出する。というスケッチ内容になります。
SWのポートはデジタルポートでスペアナの時に問題となったD13ポートを使います。対策はスペアナと同じく、プルアップ抵抗を1kΩにしてます。問題なく、通常H、SW押下でLになります。

CIMG8842

シリアル送出の為に追加したSW(D13)プルアップ1k外付け
CIMG8843

今回のスケッチの変更箇所は下記です。

新しくシリアルデータ送出のSWを追加
#define IND13   13   //D13 Serial TX-SW

セットアップルーチンでSWのプルアップ設定追加(プルアップ抵抗外付けにしたので、通常の入力設定にしました。)
void setup() {
.
略.
  pinMode(IND13,INPUT); //Serial TX-SW
}

ループルーチンでは、単純にIND13のSWが通常”H"から押下で”L"になった時に各バンドOSC+B電圧が繋がったポート(D2からD12までの内の選択されたバンドどれか1つ)を検出して、そのポートにたいする(周波数関連文字+周波数情報+デリミタ’;’)計11文字を送る簡単なスケッチです。回数もforを使い2回送出します。1回だとタイミングで抜ける場合を考えて2回にしました。3〜4回でも問題ないと思います。あっという間に送出されます。受信側では最後のデータ(完全読み取りのデータ)で周波数設定されます。シリアル受信側で使うのは、今は最初の周波数関連文字です。”01”〜”11”
void loop() {
  // put your main code here, to run repeatedly:
    
        String bandkind ;   //TS-820S BAND FREQUENCY SELCECTED BAND SW
        
        if (digitalRead(IND13) == LOW){ //D13
          if(digitalRead(IND2)== HIGH){
             for (int i=0;i<=2;i++){
                bandkind = "01";
                band_Mode = "  1.9MHz;";
                Serial.print(bandkind);
                Serial.println(band_Mode);
                delay(500);
             }
           }
           else{
            if(digitalRead(IND3) == HIGH){
              for (int i=0;i<=2;i++){
                bandkind = "02";
                band_Mode = "  3.5MHz;";
                Serial.print(bandkind);
                Serial.println(band_Mode);
                delay(500);
              }
            }
            else{
              if(digitalRead(IND4) == HIGH){
                for (int i=0;i<=2;i++){
                  bandkind = "03";
                  band_Mode = "  7.1MHz;";
                  Serial.print(bandkind);
                  Serial.println(band_Mode);
                  delay(500);
                }
              }
              else{
                if(digitalRead(IND5) == HIGH){
                  for (int i=0;i<=2;i++){
                    bandkind = "04";
                    band_Mode = " 14.1MHz;";
                    Serial.print(bandkind);
                    Serial.println(band_Mode);
                    delay(500);
                  }
                }
                else{
                  if(digitalRead(IND6) == HIGH){
                    for (int i=0;i<=2;i++){
                      bandkind = "05";
                      band_Mode = "  WWW15M;";
                      Serial.print(bandkind);
                      Serial.println(band_Mode);
                      delay(500);
                    }
                  }
                  else{
                    if(digitalRead(IND7) == HIGH){
                      for (int i=0;i<=2;i++){
                        bandkind = "06";
                        band_Mode = " 18.1MHz;";
                        Serial.print(bandkind);
                        Serial.println(band_Mode);
                        delay(500);
                      }
                    }
                    else{
                      if(digitalRead(IND8) == HIGH){
                        for (int i=0;i<=2;i++){
                          bandkind = "07";
                          band_Mode = " 21.2MHz;";
                          Serial.print(bandkind);
                          Serial.println(band_Mode);
                          delay(500);
                        }
                      }
                      else{
                        if(digitalRead(IND9) == HIGH ){
                          for (int i=0;i<=2;i++){
                            bandkind = "08";
                            band_Mode = " 28.0MHz;";
                            Serial.print(bandkind);
                            Serial.println(band_Mode);
                            delay(500);
                          }
                        }
                        else{
                          if(digitalRead(IND10) == HIGH ){
                            for (int i=0;i<=2;i++){
                              bandkind = "09";
                              band_Mode = " 28.5MHz;";
                              Serial.print(bandkind);
                              Serial.println(band_Mode);
                              delay(500);
                            }
                          }
                          else{
                            if(digitalRead(IND11) == HIGH ){
                              for (int i=0;i<=2;i++){
                                bandkind = "10";
                                band_Mode = " 29.0MHz;";
                                Serial.print(bandkind);
                                Serial.println(band_Mode);
                                delay(500);
                              }
                            }
                            else{
                              if(digitalRead(IND12) == HIGH ){
                                for (int i=0;i<=2;i++){
                                  bandkind = "11";
                                  band_Mode = " 29.5MHz;";
                                  Serial.print(bandkind);
                                  Serial.println(band_Mode);
                                  delay(500);
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }


それから、シリアルデータの受ける側はArduinoNANOでなく、VFOsysの改良スケッチです。これは、シリアルモニターで1回ずつバンド設定のデータ ”01  1.9MHz;" 等を送ることで、ArduinoNANOを移植したスケッチにVFOsysの周波数書き換えの条件スケッチを追加して、問題なく動作しています。新たにVFOsysのボードを用意してシリアルモニターとで確認しました。実験用として作製したESP32用実験ボードが役に立っています。Hi! 
スケッチをコンパイルして、書き込み後、VFOに組み込んであるESP32DivKitCと交換します。ソケットにしてるので、容易に交換出来ます。

CIMG8841

考察的なこととして、本来は、バンド情報でなく、実際の周波数情報を送る場合は同じ周波数データを送るので問題はないのですが、バンド設定の場合は、運用していた周波数に対しての固定周波数での情報送出ですから必ず固定周波数になって(戻って)しまうわけです。ここには最初気づきませんでした。VFO側に周波数表示が付いていたために少ない線で、TS820本体からバンド情報をシリアル通信で送る方法考えただけで、不具合まで気づかなかったわけです。同じ周波数設定のシリアルの連続情報を上手く扱うスケッチ(全自動のスケッチ)は出来ないことは無いでしょうが、いろいろな条件があるので少しハイレベルになると思います。やってみたいですが、時間がかかると思いますので、今回は、やらないことにします。

ただ、今回少し苦し紛れといいますか対策としてひとまずまとめた、SWありの半自動をできるだけ自動化にすることを、もう少し(ハイレベルな自動スケッチとは違います)考えて見たいと思います。今だと、TS820本体にSWが1つ追加になります。やはりこのSWは無くしたいと思います。Hi!
半自動のSWを押す行為をバンドSWを変えたら、SWを押す動作をする方法は考えるとなんか実現できそうな気がします。今は、まだ頭の中だけですが。

ESP32DivKitCへのシリアル受信部の移植と全バンド化は別途記したいと思います。シングルバンド(7MHz)用でしたので結構なスケッチ変更があります。

つづく?

Candle for LINUXその21

TS-820用のLC発振のVFOをDDS−VFOにする為に通常は、周波数の表示はしなくて良いのですが、今回のVFOsysのアナログ風デジタルDDS−VFOには周波数表示部も付いています。このため全バンドの周波数表示を検討し始めたわけです。TS-820本体からのバンド選択情報をシリアル通信で常時送出し、それをVFOsys側で受けて各バンドに合わせた計算用のHET_FREQを設定しておき、選択したバンド情報に合わせてHET_FREQを用い周波数を表示しようとするものです。ソフトウェアの検討がほぼ中心になると思います。それ以前の今は、実験段階です。使っているのは、ArduinoNANO 2台です。1台は実際にTS-820の本体側に使いますが、もう一台はシリアル受信の実験用のArduinoNANOです。今はシリアル通信の受信部が送出されているバンド選択情報のデータが受け取れた段階です。独断で決めた仕様通り受け取れたということです。後は、受け取ったシリアル受信データが文字変数に入っていますので、この情報でHET_FREQ選択するルーチンを考えていきます。少し飛躍しすぎました。その前に、VFOsysのスケッチにシリアル受信のスケッチを移植しないといけません。つまりArduinoNANOのシリアル受信部をVFOsysのHSP32DivKitCに組み込むということです。出来るかどうかはわかりませんが、シリアル用のポートは未使用状態なので、開いている(使える)ということだけが、今の所雄一頼りです。使っていないから使えるということは安易ですが、正直なところ、やってみないとわかりません。VFOsysの動作に影響がでたりするかもしれません。目的とするところのシリアル受信ができないかもしれません。HSP32の内容を理解している方は、何の事無いかもしれませんが、駆け出し真似スケッチだけでやってきてるので、?です。なんとなく上手く行きそうな感がするだけです。Web情報も集めないといけませんね!ということで、まずは、ArduinoNANOどうしの3本のTX,RX,GNDでのシリアル通信で、上手く動作している所を見て見ましょう!見ていると、上手く行きそうな感じがしてきます。TS−820本体側と同じ1回路11接点のSWを準備して擬似的にバンドを切り替えている様子も動画に取りました。

バンドSWに見立てたロータリーSWを回しています。
バンド間どうしのSWが繋がらない時はエラーが出てるのが見えます。
単なる状態表示だけです。OSCの+B電源がどのデジタル入力ポート
に加わっていない状態の時に"00 Error"のエラー表示が出る仕組みです。

つながると直ぐに検出され情報が表示されます。
別件ですが、YOUTUBEに動画をアップしてたら、インタネットラジオで
POPMUSICをかけているのですが,たまたま安室奈美恵の歌が、かすかに
入っていたため、著作権上で一部ブロックが入ったとの表示が出ました。
なので、対処として、動画上のSWの切り替え音もミュートになってしまい
ました。動画の音がないと、なんか変な感じですが、今回は仕方ありません。
Hi!

通信線は赤と緑とグランドの黒です。他はArduinoNANO間は繋がって
いません。左側のArduinoNANOがTS−820本体側での使用になります。
右のArduinoNANOがTS−820VFO(VFOsys想定)側のシリアルデータ
受信実験部です。実際はHSP32DivKitCが対応なる予定です。
CIMG8835

電源はダイソーの2口USBで供給です。パソコンは繋がってません。
2台のArduinoNANOへの電源供給だけです。実際はレギュレータICの
5V回路を作ろうかと思います。
CIMG8837

上側よりのArduinoNANOの写真です。共に左上側の赤と緑の線がTX,RX線
黒が共通のGNDです。この3本で情報伝達です。送信はバンドに合わせた
情報データの繰り返しの垂れ流しですが。Hi!
CIMG8838

急遽、ST7032の液晶を付けました。受信シリアルデータが見えないと
動いてるかどうかが、わかりませんから!スケッチをそれぞれ送信と
受信とArduinoNANOのUSBをパソコンに繋いで確認するのですが、時々
シリアルポートが認識しないということがUSBの抜き差しで起きました。
これが発生すると、コンパイルは出来ても、書き込みができなくなります。
パソコンをリセットしたりして、回避してはいますが、頻繁には抜き差し
しないほうが良いようです。ただ、通信の実験なので、受信部のArduinoNANO
送信部のArduinoNANOと片方ずつスケッチ編集しては確認なので同時に編集
出来無いのが不便なところです。シリアルモニタも片方でしか使えません。

シリアル受信部の実験のスケッチについての予定でしたが、まずは現状の動作
をしっかりと確認です。
TS−820の本体のバンド切り替えSWにみたてたロータリーSWでバンドを切り
替える毎にシリアル送出データが変わり、それが受信側で上手く受信表示され
るのは、見てて、とても気持ちの良いものです。ゆっくり回すと、きちんと仕様
通りの送信側でのエラー送出がされているのも動画で見えてます。Hi!

つづく?

Candle for LINUXその20

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;"                                  //
                                        
各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);
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
  }
//****************************************************************************************   

TS820本体からのバンド情報のシリアルデータ送信部でした。
シリアルデータ受信部が今はArduinoNANOですが、いづれESP32DivKitCに移植することになります。
ArduinoNANOで動作してる受信部は次回にします。

つづく?  


Candle for LINUXその19

久々にVFOsysのTS-820用のDDS−VFOのケースインを検討することにしました。オリジナルのダイアルパネルを外したので、窓が開いています。オリジナルのVFOsysだとダイアルパネル表示と周波数表示が近いのでダイヤルパネルを見えるようにすると、周波数が見えなくなり、その逆も又然りという状態です。TFT液晶の範囲内での位置調整が必要のようです。まずはスケッチの定数変更での位置合わせをすることにしました。結果から言いますと、案外何とかなるもんです。窓に必要以外の部分も見えてるので、後から黒色のパネルでくま隠しをするようにしたいと思います。

手で位置を合わせた時の写真がこれです。
CIMG8810

調整したTFT液晶表示位置。こんな感じにしてあります。メインダイアル
の近くの周波数数値が余り表示されなくなりますが、数値の位置は
なんとなく分かるので、良しとしました。窓から見えるようにするには
多少の表示は犠牲になります。Hi !
CIMG8805

オリジナルは、下記です。比較様です。CIMG8627

TS−820用VFOのパネル窓位置に合わすためのTFT表示位置を下記スケッチの
箇所で修正しました。周波数表示とダイヤル表示部がそれぞれの窓位置に
来るようにするには、かなり離さなといけません。しかもサブダイヤルの
目盛りもメインダイヤルのメモリも見えるようにとなると、表示位置も勿論
ですが、ダイヤル間の間隔も詰める必要がありました。

①周波数表示の四角枠は外しました。単にコメント化です。(VFOsys)
      // box(7,100,153,126, 0xa0a0a0);
      // box(6,99,154,127, 0xa0a0a0);
②周波数表示位置と、単位MHzの表示位置も上側に出来る限り移動させました。
     // disp_str16(str,17, 105, 0xffd080);  
        disp_str16(str,17, 110, 0xffd080); 
           
        sprintf(str, "MHz" );
    //disp_str12(str,120, 106, 0xffd080);
        disp_str12(str,120, 111, 0xffd080); 
③メインダイヤルとサブダイヤルの表示位置を下げました。(dial_prm.h)
     // int D_height = 80;   // Display position
        int D_height = 55;   // Display position
④ダイヤル間の間隔を詰めました。(dial_prm.h)
    //  int Dial_space = 40;   // Space bitween Main and Sub Dial
        int Dial_space = 30;   // Space bitween Main and Sub Dial
⑤ダイヤル半径を少し丸めにしました。(dial_prm.h)
    // int D_R = 160;   //Dial radius (if 45000, Linear scale)
       int D_R = 150;   //Dial radius (if 45000, Linear scale)

まずは何とか表示が見える取り付けができそうだというところまで
来ました。TFTの液晶には取り付け穴があるので、それを使って止める
方法を考えたいと思います。

CIMG8814

VFOsysは問題なく動作していましたが、実装で少し手間取っていました。スケッチの位置調整で何とか組み込み目途がたってきた感じです。当面は、7MHz専用のDDS-VFOではありますが、まずは1BAND実現からといったところでしょうか?

つづく?

続きを読む
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

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