ラベル SDR の投稿を表示しています。 すべての投稿を表示
ラベル SDR の投稿を表示しています。 すべての投稿を表示

2021年8月9日月曜日

ALL BAND TRANSCEIVER (5)

今回はこのTRANSCEIVERの中枢であるコントローラーについて簡単に解説します。

Microprocessor 

 今回のコントローラーは、以前BlogにUPしたVFO Ver8.0を基にカスタマイズしています。
 MPUは、Arduino Due を使用しました。今回のプロジェクトでは、ALL BANDで多機能であるため、I/Oが多く、十分なメモリ容量でスピードが速いものを必要としました。
 主な仕様は以下の通り


Specification
Microcontroller AT91SAM3X8E
Operating Voltage : 3.3V
Input Voltage (recommended) : 7-12V
Input Voltage (limits) : 6-20V
Digital I/O Pins : 54 (of which 12 provide PWM output)
Analog Input Pins : 12
Analog Outputs Pins : 2 (DAC)
Total DC Output Current on all I/O lines : 130 mA
DC Current for 3.3V Pin : 800 mA
DC Current for 5V Pin : 800 mA
Flash Memory : 512 KB all available for the user applications
SRAM : 96 KB (two banks: 64KB and 32KB)
Clock Speed : 84 MHz

TFT Color LCD with Touch panel


 今回のコントローラーで一番苦労したところが、タッチパネルのコントロールであった。
LCDは、ドライバーがILI9341でSPIインターフェース。これにタッチパネルが付いたものである。

Specification
Display Color    RGB 65k color
Screen size       3.2inch
Driver              ILI9341
Resolution        320x240 pixel
Interface          4 wire 
SPI 
Touch panel     Resistive touchscreen
Touch Driver    TSC2046

Arduino Due周りの結線図を再度掲載する。DueとLCDの接続を赤くしてある。

 特に苦労した部分について簡単に記載します。

USB Port
Dueは2つのUSBポートがある。一つはPrograming Portで主にプログラムの書き込み、消去等にしよう。もう一つはNative Portで主にユーザープログラムで使う。
 今回は筐体背面に両方のポートを付けた。Programing用とCAT通信用としている。
 CATはメーカーによってコマンドが違うためどれかに決める必要がある。今回はHamLogの周波数設定程度なので、Yaesu FT-991,Kenwood TS-2000に対応できるようにした。(コンパイル時に選択)
 スケッチは、mainルーチンで外部からUSB経由でシリアル信号を受信したかチェックし、文字列を判読し、情報を返信する単純なスケッチである。以下は参考スケッチです。

---------------------------------------------------------
byte CATbyte = 0;

void setup(){

    SerialUSB(38400);}

void main(){


CATbyte = SerialUSB.available();
if (CATbyte >0){CATset();}

}

//----- CAT Controll(FT-991) -------------------------
void CATset(){
  String CATinput = SerialUSB.readStringUntil(';');
  SerialUSB.flush();
  if (CATinput == "FA"){
    SerialUSB.print("FA");
    String freqtcat = freqt;
    int mojicat=(freqtcat.length());
    if (mojicat <9){
      for (int i=9; i > mojicat; --i){
        SerialUSB.print("0");
      }
     }
    SerialUSB.print(freqtcat);
    SerialUSB.print(";");
  }
  if(CATinput == "MD0"){
    String modecat = String(mode);
    SerialUSB.print("MD0");         
    SerialUSB.print(modecat);
    SerialUSB.print(";");   
  }
  else{
   SerialUSB.print("?;");
  }
}
----------------------------------------------------------

Touch panel
 タッチパネルの処理には非常に苦労をした。製作までにかなりの時間を要したが、逐一記載すると非常に大変なので、結果だけを書くことにする。

タッチパネルには今回抵抗膜方式のもので、タッチしたときの抵抗変化で位置を特定する方式である。タッチパネルのドライバーはTSC2046、LCDはILI9341、MPUはArduino Due。
 初めにタッチパネルのキャリブレーションが必要である。押した位置の抵抗値をLCDのPixelに変換する。これにより位置判断が可能となる。
 キャリブレーションのスケッチは以下のライブラリーのサンプルスケッチにある。
https://github.com/marekburiak/ILI9341_due
[ uTouchCalibration.ino]が目的のスケッチである。
 55行を今回のハードウェアに変更する。
   URTouch  myTouch(30, 28, 26, 24, 22);
            ↓
   URTouch  myTouch(6,5,4,3,2);

 73行を使用するLCDの方向に合わせる。(90 or 270)
tft.setRotation(iliRotation270); // landscape
 

これをDueに書き込むと右の画面が表示される。画面のどこかをタッチすると次の画面が表示される。




この画面で左上ハイライトされた+をタッチする。中央の[PRESS]が[HOLD]に代わり[RELEASE]に変わる。すると今度は左中央がハイライトする。同じようにタッチして8か所すべてが終了すると最終の情報画面に変わる。


CAL_X
CAL_Y
CAL_Z
これがキャリブレーションで得られた情報である。




 この情報はIDEのシリアルモニタにも出力される。
 
ここで、今回使うタッチパネル用ライブラリー
http://www.rinkydinkelectronics.com/library.php?id=93にあるURTouchを使用する。


このライブラリー内にある[URTouchCD.h]をエディターで開きオリジナルのXYZをコメントアウトし、シリアルモニタのXYZをコピー&ペーストし保存する。
 これで使用するLCDのキャリブレーションが終了する。LCDを変更した場合はそのたびにキャリブレーションが必要となる。


参考スケッチ
実際のスケッチの抜きだしなのでよくわからないかもしれない。mainルーチンでパネルが押されたかどうか検出しx,y情報をサブルーチンに渡し処理を行う。URTouchライブラリーのexampleスケッチなど参考にしてください。

-------------------------------------------------------------
void main(){
  if (myTouch.dataAvailable())
    {
    myTouch.read();
    int x = myTouch.getX();
    int y = myTouch.getY();
    ProcessKeyTouch(x, y);  
}

//----- Touch -----------------------------------------------
void ProcessKeyTouch(int x, int y)
{
//  SerialUSB.end();
  ucg.setFont(ucg_font_fub11_tr);
  if (x >= 5 && x <= 5+key_width){               // Menu
    if (y >= 210 && y <= 210+key_height){
      key_rows = 2;
      menu_sub();
    }
  }
  if (x >= 5+1*80 && x <= 5+1*80+key_width){       // Band Set
    if (y >= 210 && y <= 210+key_height){
      key_rows = 3;
      band_set();
    }
  }
  if (x >= 5+2*80 && x <= 5+2*80+key_width){    // Step UP
    if (y >= 210 && y <= 210+key_height){
      fstepmem=fstepmem+1;
      fstepset();
    } 
  }
  if (x >= 5+3*80 && x <= 5+3*80+key_width){    // Step Down
    if (y >= 210 && y <= 210+key_height){
      fstepmem = fstepmem-1;
      fstepset();
    } 
  }
  if (x >= 5 && x <= 67){        // VFO
    if (y >= 10 && y <= 30){
     key_rows = 1;
     vfo_menu();  
    } 
  }
  if (x >= 77 && x <= 122){      // Mode
    if (y >= 10 && y <= 30){
      key_rows =2;
      mode_menu(); 
    } 
  }
  while(x != -1 ){
      myTouch.read();
      x = myTouch.getX();
      //y = myTouch.getY();  
  }
}

一部省略して書いたので少々わかりにくいかもしれませんが、ご容赦

以上 これでALL MODE TRANSCEIVERの解説は終了の予定。質問や、聞きたいことなどご要望があれば追記するかもしれません。メールまたはコメントにてお知らせください。

DE JA2NKD Ryuu


2018年2月11日日曜日

mcHF SDR Transceiver version up (Ver 2.9.0)

Although mcHF was just completed, there was information on upgrade of UHSDR firmware from JA2GQP.
New Version 2.9.0 (10 Feb.2018)
I upgraded it immediately.
Although there are many changes, the display of spectrum scope and waterfall is diverse. You can change the color of the bandwidth according to the mode as shown in the picture. It is easy to use.
For details, please refer to UHSDR.

Let's enjoy homebrew.
73's JA2NKD Ryuu

2018年2月9日金曜日

mcHF SDR transceiver

昨年買っておいた「mcHF SDR Transceiver」をやっと製作した。
このトランシーバーはイギリスの無線家 M0NKA が開発したSDRトランシーバーだ。海外では非常に人気が有り、youtubeにも多く投稿されている。以前から使ってみたいと思いながら見ていたが、昨年やっと入手した。キットにはフルキットとチップ取付済みのものがあったが、よる年波でチップ取付済みのものを購入。キットは基板キットであり、ケースはない。使用しているケースはAliで購入した。この手のものは中華ですぐ商品が出てくることにはほとほと感心する。以下の写真は製作前のケースとmcHFキットである。

【 仕様 】
概略以下のようなものだ。詳しくはmcHFのHomepage等を参照されたい。

  • Bands :80, 60, 40, 30, 20, 17, 15, 12 and 10 meter amateur bands
  • Output:0.5,1,5,10W(28MHzでは7W位)
  • Mode : CW,AM,SSB,FM,RTTY,Digital-mode
 又、CATコントロールにも対応している。まだ他にもあるかもしれないし、ファームウェアのバージョンアップで色々な機能が追加されるかもしれない。進化していくトランシーバーと言える。
 ブロックダイアグラムは上の画像のようになっている。

【 製作 】
  製作に当たっては、M0NKAのホームページにマニュアルが掲載されていることと、今までに製作された無線家によってい色々なインフォメーションがNET上にUPされているので、それら資料を良く読んで製作すれば出来上がる。再現性は高いと思う。
 一番の難関は、ケースである。このケースはバージョン04,05用であるが、購入したmcHFはバージョン06であった。内部シールド板に多少の加工が必要である。それほど難しい加工ではない。また、コネクタ、ジャック、LCD,スイッチ等は基板直付けなので、ケースとの整合を検討しながらハンダ付けをおこなう必要がある。ケースの精度は少々甘いと言わざるを得ない。これらについてもNETを探れば多少の情報は得られると思う。
LCDはコネクタで取り付けられるようになっているが、これを使うとケースには収まらなくなるので注意。基板直付けとした。
 基板にスイッチ、ロータリーエンコーダー、コイル、LCD等を取り付けたところ

【ファームウェア】
  流石にマイクロプロッセッサーを使ったトランシーバーなのでソフトウェアを入れないと動かない。ファームウェアにはいくつか種類があるようだ。本家では総てを公開しているので、これを元にしたものがNET上にある。
 私はDF8OEによるUHSDRというファームウェアを採用した。このファームウェアはバージョンアップしたときに、そのプログラムをパソコンからUSBメモリーにコピーし、mcHFのUSBに差し込んでPowerONすることにより更新出来るという優れものである。

【 動作 】
 動作状態の一部を紹介しよう

PowerONしたときの画面。バージョンが表示される。現在は2.7.xxがUPされているが、様子を見て落ち着いたときにバージョンアップしようと思う。

 受信状態である。下部にはスペクトラムがリアルタイムに表示されている。勿論受信音も出ている。FT-991を持っているが、同時動作は出来ない。FT-991Aで同時動作となったが。
1スパンが3KHzなので受信音の音声スペクトラムが見られる。これで信号の帯域幅や
高音低音の強度もイメージとして判断できる。入力信号のレベルもデシベル表示できる。精度も高く標準信号発生器と比較して1dBの誤差であった。勿論アジャストできる。
 もうこれは測定器として使えるレベルと言えるのではないだろうか。
 スペクトラム表示はスイッチ操作で簡単にウォーターフォールに切り替えられる。実に楽しいトランシーバーである。
 メニューを表示したところである。これは一部でスクロールさせるとまだまだ多くの項目がある。まだすべては理解できていない。

 これは出力設定のメニューである。バンド毎に出力が5Wになるように右端の数値で調整する。これでバンド毎の誤差がなくなる。これを基準に1W,0.5Wと自動的に調整される。出力レベルまでマイコンにより調整されている。さいきんのメーカー製では当たり前だが。
まだまだ紹介したい機能は沢山あるが、きりがないのでこの辺りにしておく。

【 後記 】
 実際に使用してみるとそのすばらしさが更に増幅される。実に遊べるトランシーバーである。最近判明したのだが、周波数表示のシフトやPTTの遅延機能があり、簡単にトランスバーターに対応できる。50MHzなどのおやきに使うのもいいと思う。最近ebayで安価なリニアが販売されているのでこれを作ってみようと思う。(下の写真参照)
 
 今回製作にあたっては、先行して製作されたJA2GQP OMに助けられながらの製作であった。OMには大いに感謝である。
 mcHFは現在07バージョンとなっており基板が大幅に変更されている。これはデザイン的にも優れており、もう1台購入したいと思う。
 このような素晴らしいキットを開発、販売されているM0NKAには感謝である。国内でもこのようなキットメーカーが現れることを期待したい。

73’s DE JA2NKD