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

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


2021年7月24日土曜日

ALL BAND TRANSCEIVER (4)

 今回の ALL BAND TRANSCEIVER で色々な課題があった。今回解説するBAND,MODEの制御もその一つである。
 タッチパネルで選択したBANDやMODEは数値化され制御を行う。具体的には変数 [BAND] 変数[MODE]に選択した数値情報が収納される。

 上図でPHOT1でBANDをタッチ、PHOTO2で希望BANDをタッチすると変数[BAND]にBAND番号が収納される。この変数を2進数にして各BITのHigh,Lowを調べI/Oに出力をしている。
全部で14BANDなので4BITバイナリーでD14,15,16,17に出力している。
sketchでは、
void DIO_BAND_set(){
  int bitdata = 0;
  int port_num = 0;
  for (int j=0; j<=3; j++){      // ポートをLowにリセット
    digitalWrite(14+j,LOW); 
  }
  for (int j=0; j<=3; j++){  
   bitdata = bitRead(band,j); // 変数[band]の各Bitを調べる。
    if (bitdata == 1){
     digitalWrite(14+j,HIGH);   // 1なら当該ポートをHighにする
    }
    else{
      digitalWrite(14+j,LOW); // 1以外なら Lowとする。
    } 
  }
}

Modeも同様にしてD18,19,20,21に出力している。

 Aruduino DueのD14-21ポートに出力されたBAND,MODE情報は、以降の処理に使いやすいように(FXMA108)で3.3Vから5Vにレベル変換をしている。
 BAND情報はD14-17から出力されレベル変換後TC4515デコーダーを使用し、各BAND個別信号を出力している。このTC4515はActiv Low 選択された信号がLow、それ以外がHighとなる。このためPNPデジタルトランジスタ(RN2201)を利用し選択された受信用BPFに電源を供給するようにしている。
 送信も同様にBPF選択を行っている。送信ではさらに TD62084というSink Driverで出力のLPFリレーを制御するようにいている。

MODEも同様であるが、選択数が少ないのでデコーダーに74HC238(3INー8OUT)を使用いた。これはActiv HighなのでNPNデジタルトランジスタ(DTC144)を使用しColinsフィルター切替を行っている。

尚、BAND情報は、Linear と Transverterのためにバッファ(74HC125)経由でDINコネクタに出力している。

 さすがにALL BAND TRANSCEIVERともなると、フィルタ、BPF、LPFの切り替え処理が非常に煩雑となることを実感した。今回極力手持ち部品を使用したため、どうも一貫性のない回路となった感じである。ご容赦願いたい。

今回は、あまり日の当たらない部分の解説なので、少々つまらなかったもしれませんが、備忘録としてUPしておくこととした。

DE JA2NKD Ryuu







 




2021年6月28日月曜日

ALL BAND TRANSCEIVER(2)

 Appearance(front)

Do you notice anything when you look at the appearance?
Most frequency knobs such as transceivers made by manufacturers are attached to the right side. My transceiver is on the left. Because I'm left-handed.

Frequency nob    Rotary encoder 100als/r
Switches
    Lock      Frequency lock
    Turbo    Multiplies the frequency step by 10.
    ATT       Preamplifier Off
    AGC      Slow/Fast
    Tune     Test transmission (1kHz modulation)
    COMP    Compressor ON/OFF

Volume
    AFGAIN    Audio Gain
    SQL         FM Squelch
    MIC         Mic gain
    CLAR       Clarifier(rit)  Rotary encoder 25pls/r

LCD             3.2inch TFT-LCD with touch-panel
                   driver ILI9340 320x240

 Appearance(back)
ANT-1    
2 Antenna connector
ANT-2   Can be selected for each band
TRV      To transverter
IF         IF OUT(Not use)
10MHz IN    External reference frequency input(10MHz)
USB-U        Arduino Due USB (nativ port)  for CAT control
USB-P        Arduino Due USB (proglaming port)
AUX           External modulation Input
REC            Audio Output
KEY            CW KEY
SPEAKER    AF 8 ohm 2W

Circuit overview
The receiver is a double super heterodyne with a first IF 70.455MHz and a second IF 455kHz. The filter is a Collins mechanical filter 
     (SSB 2.4kHz, CW 500Hz, AM 6kHz).
The transmitter is a PSN direct transmitter using dsPIC and MAX2452.
The VFO controller used Aruino-Due & 3.2inch TFT-LCD with touch panel.

The following explanations will be written in Japanese. 
My English is poor. Sorry.

受信部

① BPF&LPF
ALL-BANDとなると各種フィルターがバンド毎に必要になり、製作が大変である。幸いオークションでICOM IC730のRF基板ジャンクを入手し流用した。この基板は1.9-28MHzの9バンドなので、50MHzBPFとゼネラルカバー受信(0-60MHz)用のLPFを自作し追加した。 
 
② RF amp
2SC1426を使用したNFBアンプで凡そ10dB程度増幅する。2SC1426は50mAバイアス電流を流しIP3を改善するようにしている。パネルにあるスイッチでON/OFFができるようにしている 。
 
③ 1st Mixer
このMixerでVFOと混合し第一中間周波数70.455MHzに変換している。 
MixerにはSL6440CというICを使用した。このICはIP3が高く、尚且つ変換ゲインがあるという優れものである。難点としてはSNが少し悪いことと、電流が50mA程度流れる。HF固定機で使う分には問題ない。VFO入力は結構クリティカルで大きすぎると極端に歪み始める。-10dBm - 0dBm当たりで調整が必要。スペクトラムアナライザーがあると簡単に調整できる。

④ MCF(70.455kHz)
第一中間周波数70.455kHzのフィルターで、帯域幅は15kHzである。オークションで入手。この谷も45MHzあたりのフィルターも時々見かける。2素子1組のものである。

⑤ Post Amp
Mixer後1段軽く増幅している。使用した素子は3SK291デュアルゲートFETである。回路はごく普通の回路。(回路図省略)

⑥ 2nd Mixer
uPC1037Hを使用したダブルバランスドMixer。外付け部品が少なく扱いやすい。最近秋月で互換性のある日本無線のNJM2594が入手できる。70.455MHzに70MHzを注入し一気に455kHzに変換する。FT-900でも同じ周波数構成を行っている。 
 
⑦ Collins Filter
今回の目的である「いつかはコリンズ」フィルター
SSB用    2.4kHz    562-8694-010 
CW用     500Hz      562-8693-010 
AM用    6kHz        562-8695-010 
クリスタルフィルターに比べてスカート特性等は非常に綺麗である。切れ音質ともにさすがコリンズと思えた。気のせいであろうか?(AM用フィルターの特性を以下に示す)
 
Colins Filter 6kHz

⑧IF Amp 
IFAmpはAD603 2段増幅で80dB増幅とした。回路はJA9TTTさんの記事等を参考にしている。非常に安定してうまく動作している。AGC等は周波数の違いもあることからカットアンドトライで決めた。
 
⑨ SSB,CW Detector 
 検波回路には2ndMixerと同じuPC1037Hを使用。キャリア周波数はDDSで作成しモードで変更するようにしている。
 
⑩ FM IF
DET FMIF増幅と検波は定番のMC3361を使用。周波数変換部を使用せず、中間周波455kHzをFM用フィルタ(CFWLB455F +-6kHz)を通してMC3361に入力している 
 

⑪AF Amp
AFアンプはOPアンプで増幅したのちuPC575C2という一昔前のメーカーリグに多用されていたICを使用。LM386と比べると2Wで余裕があり、音質もいい。


TO be continued

 

 

 

 


    

       

2014年5月15日木曜日

7MHz AM受信機

外観
かねてより実験中のLA1137Nを使用した7MHz受信機が一応完成した。
【LA1137N】
 サンヨーのこのシリーズについては、「JA2NKD無線工房(その1)」でLA1135,LA1137Nについて概要を掲載してきたので、そちらも参照してください。
 周波数変換、局部発振、IF増幅、検波、AGC,Sメータ回路とほぼすべての機能を搭載している。特にAGCは、多彩な機能を持っており、アレンジできそうである。




【回路】
回路図
回路図を参照してください。基本的にブログ(その1)で紹介したものである。変更しているところは局部発振回路である。周波数可変範囲を7.0-7.2MHzとしている。局発コイルに手持ちのタイトボビンにリッツ線を19t巻いたものがあったのでこれに合せてコンデンサーを決めている。少々Hi-Lとなり、コンデンサーが小さめのため調整が難しいことと浮遊容量等の影響を受けやすいと思われる。出来れば半分くらいのコイルでいいと思う。もう少しきっちと計算、計画して定数を決定する必要がある。今回は取り敢えずこのまま完成させた。コンデンサーにはNP0のセラミックを使用している。




【ケース】
背面
ケースはリードのPK-12を使用している。パネルはアルミだが、上下は鉄で多少加工がしにくい。
 ダイヤルエスカッションは木製で東急ハンズに図面を渡して切ってもらったものに黒のツヤなしスプレーで黒く塗ったものである。
 ダイヤル板は、これまたハンズで入手した70mm円形のアクリル板。このあたり極力加工しなくてもいいように既製品を活用している。減速機構には貴重品のボールドライブを使用している。最近DDS等でデジタル化することが増えてきたので、貴重なボールドライブを使用する機会が減ってきたので、逆に一生懸命消化していかないとかえって死蔵品になりそうである。
 Sメータはオーディオ用ラジケータ(VUメータ)のパネルをPCで印刷したものに張り替えてSメータとしている。前面パネルにはAFボリューム以外必要ないのだが、デザインと将来の改造を考慮し余分なボリュームとスイッチをつけている。
 背面パネルにはアンテナ入力とVFO出力、SP出力等がある。


【まとめ】
内部
名古屋生活はマンションとなり、まともなアンテナが無いので適当な線をぶら下げて利いているので感度が良いのかどうか良くわからない。SGからの入力ではそこそこ十分な感度と思われる。
 課題はVFO。電源投入時から安定するまでにかなり変動がある。一度安定するとその後は電源ON/OFFでも頗る安定なのだが。
 またスタンバイ回路にも課題がある。VFOを切らずに高周波部分を切れるようにしているが、この時の変化がIC内部で影響しているのかVFOが少しずれる。送信中なのでそれでもいいのだがVFO出力をカウンタでモニターしたりとランシーブに利用するとなると困ったことになる。従って現状ではSWL用としてしか使えない。
 やはり局部発振はしっかりとした回路で独立
VFO部分
して組み、ICに注入する方法とするべきであろう。
今後その方向で改造をしようと思うが、いつになることやら。また、出来ればBFOを付け簡易的にSSB,CWも利けるようにしたいと思うが、出来るかどうかである。
 取り敢えず一段落とします。


2009年2月7日土曜日

エアバンド受信機(4)

【AVRソフトウェア続き】 かなり時間が経過してしまった。今回はPLL以外のプログラムについて解説する。
 本来一番最初に説明するのは、アルゴリズムであるべきと思うが、いつものように成り行きで作るので後で「あれ?」と思うようなプログラムになっている。そこでとりあえずブロックダイアグラムを描いてみた。まあ参考程度にしてください。基本はMainルーチンであることはいうまでもないが、この中に「VFOモード」と「メモリーモード」の2モードがある。それ以外は、前回解説の「PLL設定」と「LCD書込み」「メモリー書込み」のサブルーチンがあり、必要に応じて呼び出している。

●メモリー
 今回の習得目的であるメモリー(ROM)であるが、実に簡単に利用できる。この受信機では以下の目的でメモリーを使っている

* PLL可変時のステップ設定(1CH)
* モード記憶(1CH) 電源OFF時にそれまでのモード(VFO/MEMORY)を記憶
* メモリー番号記憶用(1CH) メモリーモードのチャンネルを記憶 モード切替時はこの番号で呼び出される
* 受信機の周波数記憶用(10CH) 中身はPLLの分周数である
* 受信機の周波数記憶用(1CH)  VFOモードの周波数記憶

以上である。
メモリーの書込みは以下のようにプログラムしている。
イニシャルセットの変数定義で

Dim Stepl As Eram Byte At $01 '1=10KHz 10=100KHz 100=1MHz
Dim Model As Eram Byte At $02 '0=VFO 1=Memory
Dim Memol As Eram Byte At $03 'memory No.1-10
Dim Flast As Eram Long At $05 ‘VFO freq
Dim Memo(10) As Eram Long At $09 'memory freq 1-10

としてROM領域を確保し以下の変数で受け渡しをする

Dim Mmode As Byte
Dim Fstep As Byte
Dim Memon As Byte
Dim Mainf As Long
Dim Flag0 As Byte

プログラムの中での使用は、書込みと読み込みである。
書込みは、
メモリの1CHに 126MHzを記憶する場合 PLL分周数は(126-10.7)×100=11530となるので

Memon=1 書込みチャンネルに1をセット
PLL=11530 PLLの変数に11530をセット
Memo(1)=PLL メモリーへ書き込み

以上である
読み込みは

PLL=Memo(1)
としてPLL変数をPLL書込みルーチンに送ればよい。
●スイッチ取り込み
 スイッチとして

1)周波数ステップ変更用
2)VFO/メモリ切り替え
3)メモリ書込み
の3種類を使用

スイッチを読み込むとはポートの情報を読むことなのでPin命令で読み込むことができる
ModeをVFOモード、メモリモードの状態用変数とし、スイッチをポートB の1に繋いだとして

Config Portb = Input ポートBをinputに設定
Portb = 1  ポートBをプルアップ(スイッチがオープン状態でHigh)
Mode=Pinb.1

これでModeがHighならばVFOモード。Lowならばメモリモードへ分岐すればいい。
しかし今回は

Debounce PinB.1 , 0 , Mode

とDebounce命令を使用してみた。この命令はエンコーダー取り込みに使っているが、エンコーダもいわばスイッチである。
なぜDebounce命令を使用したかというと、1行で分岐命令まですべてを書けるからである。If~then~elseで書くより見通しがいい。どちらがメモリ消費が多いかは気にしていない。
上決めいれはポートBが1ならばラベルModeへジャンプという命令である。

以上プログラム概要を書いてみた。でもたぶん皆さんにはよくわからないと思う。
書いている本人もだんだんわからなくなってきている。
もう少しBascom-AVRに慣れてきたら、ホームページにでもまとめていきたいと思う。
もし、参考にしたいという人がいるようでしたら(いないと思うが)コメントにでも書き込んでください。

以上で今回の「エアバンド受信機」は終わり。

2009年1月25日日曜日

エアバンド受信機(3)

【AVRソフトウェア】
 前作と同じくAVRを使用した。今回はメモリー等を搭載するため、ATiny2313でBASCOM-AVRを使用して開発するには容量不足である。アセンブラーで開発すればいいのだが、BASCOM-AVRを一度使ってしまうともう戻れない。ATmega48を使うこととした。最近は秋月でATmega88が安く入手できるのでそれでもいい。BASCOM-AVRはデモ版ならば48までは十分使える。最近円高のおかげでBASCOM-AVRの正規版が安く買えるのでこの際購入されてはいかが。私は買いました。

 受信機(無線機)で使用するソフト技術としては、
・ シリアル制御(PLLやDDSの設定)
・ スイッチの取り込み(MODE切り替え等各種設定)
・ ロータリーエンコーダの読み取り(周波数等UP?DOWN)
・ 接点出力(バンド情報出力など)
・ アナログの取り込み(Sメータ)


・ アナログの出力(VCO、リットの制御)
・ カウンタ(周波数カウンタ等)
・ 表示(液晶、LED等)
・ メモリー(VFOメモリ、等の記憶)

 これくらいが作れればほぼ問題ないと思う。1度作ってしまえば、それをアレンジして拡張できる。
またBASCOM-AVRではこれらの制御用コマンドがほとんど用意されている。だから止められない。
今回は、エキスのみをご披露する。なぜなら全体は恥ずかしくて見せられない。どうしてもといわれるお方がお見えならホームページの掲示板等でご連絡ください。

【TC9256PLL制御】
 これは前作と基本的に変わらない。再度解説する
 TC9256の制御は24bit2組のシリアルで行われる。PLLの設定は24bit1組で行われる。これにTC9256の書込み設定アドレス(d0H)を加え32bitを連続で送出することにより設定される。
 まずは、これに使用するポート、変数を用意

   (以下:以降はコメントです)

 Config Portc.0=Output :mega48ポートC0出力に設定TC9256の(3)pin period
 Config Portc.1=Output :mega48ポートC1出力に設定TC9256の(4)pin clock
 Config Portc.2=Output :mega48ポートC2出力に設定TC9256の(5)pin data
 Dim Com01 as Byte
   :TC9256のPLL書込みコマンド上位4bit(1Byteは8bitであるが4bitのみ使用)
 Dim Com02 as Byte
   :TC9256のPLL書込みコマンド下位4bit(1Byteは8bitであるが4bitのみ使用)
 Dim PLL1 as Long:TC9256の分周数データ
 Dim PLL2 as Byte:TC9256のモード、分周ステップ、水晶数端数

それぞれの変数に設定数をセット

Com01=&B00001101
   :TC9256のPLL書込みアドレスd0H(2進数で00001101)の「d」
Com02=&B00000000
   :TC9256のPLL書込みアドレスd0H(2進数で00001101)の「0」 この部分は後で解説
PLL1=12600
   :例えば周波数126MHzで10KHzステップの場合、分周数は12600となる
PLL2=&B1011010
   :使用水晶4.5MHz モードFML ステップ10KHz 詳しくはデータシート参照

ここまで用意ができたらいよいよPLLへ書込み。書込みにはshiftloutコマンドを使用する

Set Portc.0  :period ON
Set Portc.2  :data ON
Set Portc.1  :clock ON
Reset Portc.0 :period OFF
Shiftout Portc.2 , Portc.1 , Cm02 , 2 , 4 , 1 
   :portcの2にデータをLSBから4ビット送出。Shiftoutのモードは立ち下がりエッジでLSBから送出。この部分はデータシートとBASCOMのリファレンスヘルプで勉強してください。
 ここでなぜ4ビットのみの送出かというと。TC9256へ32bit送出する際、最初の8bit以内にperiodをHigh(ON)としなければならない仕様となっているためである。そのため管理しやすいように4bitで1度区切っている。そのためcom01,com02と分けている。このあたりはデータシートとにらめっこである。もっとも苦労したところである。そこで次の行でperiod ONとしている。

Set Portc.0  :perood ON
Shiftout Portc.2 , Portc.1 , Cm01 , 2 , 4 , 1 :アドレスの上位4bitを送出
Shiftout Portc.2 , Portc.1 , Pll1 , 2 , 16 , 1 :分周数データを送出
Shiftout Portc.2 , Portc.1 , Pll2 , 2 , 8 , 1 :TC9256の設定値を送出
Set Portc.1  :clockをHighにしてperiodをOFFにして書き込み終了
Reset Portc.0

以上である。理解できただろうか?
 機会があれば、各種シリアル制御(DDS,PLL、シリパラ変換等)について整理して掲載します。
次回はメモリー関連を予定
写真は今使っているAVR開発用ボードです。

2009年1月17日土曜日

エアバンド受信機(2)

回路説明
 回路説明といっても、特に目新しいことは無いと思うが、一応各回路説明を書いてみる
【仕様】
受信範囲:119MHz~134MHz
受信形式:A3E(旧A3)
 航空無線の使用範囲は108Mhz~138MHzの30MHzも範囲がある。  製作を開始ししたときはどうにかなるかとはじめたが、やはりこの範囲をカバーするのは難しかったため、関東地区の主要電波が聞こえる範囲として119MHzから134MHzの15MHzとした。

【RF増幅】
 RF増幅はTA7358
 ベース接地増幅であり、入力インピーダンスが低いためコイルタップから入力。コイルはFCZ7S144を使用した。受信範囲が広いため、同調をバリキャップ等で調整しようかとも考えたが、大袈裟かとも思い固定のままとした。バンド内での感度測定はしていないが、どうにか使える範囲のようである。

【第1ミクサー】
 TA7358のミクサーを使用。PLLからの信号を受けIF10.7MHzに変換。PLLVCOからの注入レベルは結構多めになっていると思う。適切な注入レベルは周波数によっても変わると思われる。このあたりTA7358の実験を行いデータ化しておくと何かと便利かもしれない。暇があったらやってみたい。このICの使用例は多く発表されているので参考にされたい。

【第1OSC】
 当初TA7358のOSCで行ったが、発振範囲が十分取れなかったこと、発振レベルがPLLに不十分であったことから、専用発振回路とした。PLL制御のVCOである。発振には定番の2SK19で実験したが、発振出力不足の感じであったため、2SK241とした。やはり発振範囲、出力レベルは2SK19よりも協力で良くなった。バッファには2SC2026を使用。VCOの出力は、TA7358の8pinに入力。PLLへは7pinから5pで返している。

【PLL】
 前作のFMトランシーバで使用したTC9256を使用。もともとFMラジオ用であることから、150MHzまで対応できる。ほとんど前作と同じ回路構成である。前回はHFモード(40MHz)で使用。今回はFMモード(内臓プリスケラーを使用するモード)で使用した。VCOで多少手こずったが、問題なくロックしてくれた。実に使いやすいPLL用ICだと思う。MPUからの制御も前作のものを焼きなおした。

【第2ミクサー&第2OSC】
 定番のLA1600を使用。OSCは当初LA1600の内部発振回路で行ったが、調整がクリチカルだったため、トランジスタ1石(2SC945)で10.245MHz水晶発信とした。

【IF&検波】
LA1600を使用。特にコメントなし。簡単。AGCもまあまあである。AGCが単独で使用できればSSB機などへの応用ももっとできるのだが。まあQRP機などで限定的に使用するならば便利なICといえる。事実使用例も非常に多い。にたようなICが東芝、ローム等から出ているのでこのあたりも調べてみるのもいいかもしれない。しかしPIN数や外付け部品を考えているとLA1600は非常に優秀といえる。
まだまだ入手可能。

【AFアンプ】

 定番のLM386。今回電源ON時のポップ音対策として7pinとVCC間に電解コンデンサー、グランド間にダイオードを挿入。どなたかのホームページに書かれていたものを利用させていただいた。何も無いときに比べ精神上よくない「ボツ」音はかなり減った。まだ多少残っているが、かなりの改善であった。
 ただしCWでのフルブレークインでも気にならないかは実験してみなければわからない。

【制御回路】

 全体制御と液晶表示にATMELのATmega48を使用した。これは、バンド幅が広いため、メモリ回路(10チャンネル)や、エンコーダの周波数ステップ(10KHz,100KHz,1MHz)をを変更できるようにするため、Tiny2313ではメモリが不足すると思われたためである。これについては次回解説を載せる予定。


【筐体、部品】
 筐体は前回の29MHzFMトランシーバー と同じタカチ(UC14-6-10)を使用した。自作において筐体は結構重要なテーマである。しかし結構高い。部品で一番高いかもしれない。たまたまオークションで大量に安く入手できたので使っている。
 基板にはICB-93SEGを使用。部品面がメッシュアースになっているため高周波用には最適。少々高いが、回路側でアースを引き回さなくても良いため作業性がいい。ただスルーホール仕上げのためランドは強いが、部品交換は少し面倒。前回のFM機では機能別にICB-88SEGを主として使ったが、これはスルーホールになっていない。したがって部品交換時などランドがはがれ安いので注意。
 一品ものにはこれら基板がお勧めだ。
 今回基板から出る配線には主としてコネクタを使用した。ブログ(その1)に紹介しているが、自作パソコン用のアッセンブリーでピンヘッダ用であり、至極便利。皆さんも使ってみませんか。シールド線等もあり、ボリューム配線等がきれいに収まる。(内部写真参照)
 ツマミはジャンクのトランシーバーに使用されたものを再利用している。ツマミはいいものがあまり販売されていない。ジャンク品は貴重な資源である。ちなみにダイヤルは日本電業Liner2DXのものです。
 液晶は秋月で売っている16×2バックライト付きを使用。
























次回はソフト解説の予定である。

2009年1月15日木曜日

エアーバンド受信機(1)

エアーバンド受信機製作概要


 いまさらエアーバンド(航空無線)という感じもあるが、今聞いているYAESU(FRG-965)の感度がよくないこともあり製作してみた。

 今回は、定番のAM用IC(LA1600)の使い勝手とAVR(ATmega48)を使用しBASCOM-AVRの習熟を目標とした。



 
回路構成は、ブロック図を見てください。シンプル(IC×3 FET×1 TR×1 AVR×1)な構成である。


【RF】
 RFは定番のTA7358を使用。前回29MHzFM機で使用し、混変調等でこのICの限界を垣間見たが、エアバンドであれば強力な電波も無いこと、またもともとがFMレシーバー用のICで回路構成が簡単であることから懲りずに採用した。


【PLL】
 PLLも29MHzFM機で使用したTC9256。とにかく簡単にPLLが作れる(マイコンのおかげも大きい)

【IF&DET】
 AMIF,DETはあまりにも定番のLA1600.でも私は始めての使用である。このICの使い勝手を見るのも大きな目的であった。

【AF AMP】
 LM386 特に言う事無し。ただON/OFF時のポップ音解消回路の実験を行った。

【MPU】
 マイコンはAVR(ATmega48)を使用。29FM機ではATTINY2313をBASCOM-AVRでプログラムしたが、 容量不足で中途半端となったことと今回周波数メモリーを多く持ちたかったのでmega48とした。


以上が今回の製作概要である。