AT90S2313制御のDDS-VFO for strawberry-linux


  これはアトメル社のAVRマイコンAT90S2313でストロベリーリナックス社のAD9834 小型DDS
 モジュールキットを制御しLCDに周波数を表示させる「デジタルVFO」の製作です。
 元々これは1999年7月頃 秋月電子のDDSキット(2013年8月 現行商品)を使って制御する
 デジタルVFOで使ったDDSキット をストロベリーリナックス製に差し替え、
 ほんの少し制御プログラムを変更すればそのまま使えます。
 という事で、初めての方はプログラム改良が済むまでの間この製作記事を参考にしてください。
難易度レベル0(ハンダ付け技量ほぼ不要)
再現性レベル3(とても簡単) 

	・小型DDSモジュールでVFO発振(ストロベリーリナックス)
	・アトメル社のAT90S2313で制御(まずは)
	・LCDに周波数表示を行い、送受信(PTT,スプリット)制御
・今度の小型DDSは制御がSPIとなっている(初耳!!)、でもよく見たら用語は違っても
 やってる事は同じ。 SCK⇒SCLK,DATA⇒SDATA,STB⇒FSYNC と3本の
 制御線でシリアル通信して周波数データを転送している。
 違いはDDS制御データビット数イチゴは16ビットx3回で、秋月は26ビットだった。
 制御プログラムのシリアル通信の箇所を変更すればそのまま使える!
結論⇒ 秋月のとイチゴのは殆ど差し替え可(プログラム変更中)
 
実際に使う場合:
	・DDSキットにLPF追加すること
	・出力が小さいのでアンプ(緩衝増幅)を入れる
	・VFOダイヤルやPTTスイッチ等はこの図参照
 
 回路図(上図)
 プリント基板パターン図。(注)感光基板の銅箔とOHPフィルムのトナー(インク)面を重ねる事
 操作マニュアル(MS-Wordドキュメント)
 HEXファイル

 
アナデバSPIのエッセンス: AD9834の日本語マニュアルを準備だけして、目をとおす。
	説明を見たり理解を試みるのは禁止。

	余計な知識や先入観は理解を妨げる。 DDSをSPI制御するには16ビット1組を
	3回=48ビットで1つの周波数データを表している。
	AD9834の制御速度(SPIクロック)はAT90シリーズやTiny/Megaのクロックに
	対し充分に速いので普通に転送タイミングは問題ない。ノイズび発生を抑えるためむしろ
	9600bpsで充分。世の中で一番ノロいのは人間様,なのに待てない。
 
	実際の周波数データは16ビット区切りで2回(うちデータ14ビットx2)+制御1回の
	計3回(FSYNC毎)行う。
	秋月キットが26ビット長データだったがアナデバが2ビット多いのは最少1/4ヘルツで
	制御できるから。
	使い難いのでLSB2ビットは無視して最少1Hzステップで使う(予)。
 

懐かしいのはアナデバでもモトのMC68000てろ30年前に某社システムに使っていたが当時の
説明書に「アサート」「ネゲート」の用語が出てきて慣れるまでは一々辞書を引いた。 

以下まだ工事中

・akiDDSキット用コントロールプログラムにバグあり(?)
 表示周波数と発振周波数の増減を逆にする設定で、1:−1しかできない。
 DDS発振周波数を別回路で逓倍した物を表示する、1:−2や1:−3が
 周波数の減少ができない? → JR6ENDのプログラムを改良した記事を見かけたような…
 まぁ10年も前の製作だからね〜
 【実機にて周波数セットアップ確認中】

・CPUをAT-Tinyにするかも。
 これはこれで、手持ちのAVRライターがTiny/Megaに非対応なので
 プログラムミング外の問題が生じる。
  ⇒ AT-Tiny2313からAT90S2313移植するのは簡単、割り込みベクタが増えた分(無用な)
 数バイトプログラムをずらだけ,イチゴ用変更も。
  ⇒ AT-Mega328プログラム領域は1Kワードあれば良いのに32Kはコンパイラが前提。
 CPUのサイズが魅力。

必要部品
・AD9834小型DDSもモジュール		…1	ストロベリーリナックス社
(トロイダルコア・黄色ほか:DDSキットのLPFを作り変える場合、下の回路図参照)
・LCDモジュール	SC1602BS*B	…1	秋月電子他(ソケットはオスがLCD側、メスはAVR基板)
・制御基板まだ		AVR基板	…1	最近小ロットでも安くできるようです
・AVR		AT90S2313	…1	JR6END頒布(プログラム書き込み済み)まだ
・セラミック発振子	10MHz	…1	秋月電子ほか
・ICソケット		20ピンDIP	…1	汎用
・タクトスイッチ	1回路		…6	汎用(4本足)
・光学エンコーダ	RES20-50-200	…1	コパル製ほか
・バイパスコンデンサ	0.01μF位	数個	汎用
・集合抵抗		10KΩx7		…1	SIP(1列8本足)
・抵抗			10KΩ・1KΩ	各1	1/8W
・ネジ付きスペーサー	20_		…2	汎用
	〃		5_		…6	DDS、AVR基板、LCDをサンドイッチに重ねるため
	〃		30_		…2
このほかに、安定化した5V2A程度の外部電源が必要です。また、できるだけリセットICを付けて
下さい機能、仕様
・1MHzから約25MHz(まだ分かりません)までの範囲のどの周波数でも発振可能。
・最小4分の1ヘルツステップの変化連続して変化するよう制御します
・発振周波数と異なる周波数をLCDに表示(汎用のLCDモジュールを使います)。
・制御基板(AVR基板)の電源はLCD、DDSと同じ +5V単一。
・AVR基板はAT90S2313と5つのスイッチの簡単回路。
・AVR基板の裏・表にDDSとLCDが載る一体化構造。
・VFOメモリーは8バンド分。 バンドは「セットアップ」で初期周波数のユーザー設定可。
・LCDの上段に表示周波数を表示、下段にVFO番号・ステップ比などを表示。
・バンドを変える時、それまで使っていた周波数を変更していたらメモリーする。
(VFOメモリーの書き換え回数は約10万回)
操作
・VFOダイヤル:周波数を変える
  ダイヤルの回転速度を検出し、ゆっくり廻すと1Hzずつ変化、普通に廻すと10Hzずつ
  変化(ノーマルモード、Mode=N)
・[Q]スイッチ:VFOダイヤルによる周波数可変のステップを変える
  スイッチを押すたびに、ノーマルとクイックが交互に切り替わる。
  クイックモード(Mode=Q)ではダイヤルの回転速度に関係なく1KHzずつ変化。
・[U],[D]スイッチ:メモリーVFOの切り替え(8バンド)。頒布版は16バンド。
  バンドを変えるとき、それまでのVFO周波数を変えていたらメモリー。
・[M]スイッチを押してもVFO周波数をメモリー。と同時に使用していた
  バンド(VFO番号)もメモリー。そしてDDS発振停止,LCD表示クリア。
  電源を入れ直すかリセットで復帰。
  このスイッチは頒布版では、スプリット運用のためのPTT入力になっています。
・[Q]スイッチを押したままリセットを押すか電源を入れなおす(デバッグモード):
  JR6ENDと表示されるまで押し続けると…表示周波数と発振周波数を同時に表示。
 ・[S]スイッチでVFO(バンド)の周波数初期値変更(セットアップ):→後述
  セットアップモードでは下記の3項目を順にセットし、メモリー。
  [U],[D]で桁(1Hzの桁〜100KHzの桁)を選び、ダイヤルで変更する。

「頒布版」だけの追加機能:
・16バンドのVFOメモリー。
・QスイッチとDスイッチを同時押しすると周波数メモリー、DDS発振停止、LCDクリア。
  Q,U,D,Sのどれかのスイッチで復帰。
・QスイッチとUスイッチを同時押しするとスプリットのオン/オフ。
・Mスイッチを外し、代わりに親機からのPTT入力とします(送信時だけHiにする)。
  スプリットがオンの状態では送受信の周波数を個別に可変できます。
  液晶の上段左端にRかTを表示しスプリットがオンになっている事を示す。
・スプリットがオンの時はU,Dスイッチを禁止しています。
・送信中はQスイッチを禁止、更にデバッグモード時はスプリットを禁止しています。
・周波数メモリーに書き込む際、先にデータを読み出し同じ値なら書き込みしない。

なお、セットアップの方法は公開版と同じです。 スプリット用の表示,発振周波数は
使っていないRAMと真の周波数データをアクロバチックにやりくりしているだけですから
スプリットをオフにすると消滅し、メモリーされません。


セットアップ(AVRライター、プログラムミングの知識不要)
   1、DDS 発振周波数の初期値(1Hz〜約16MHz)20MHzくらいまでは何とか使えます。
   2、上記DDS発振周波数における表示周波数(1Hz〜約4GHz)
   3a、ダイヤルの1ステップ当たりの発振周波数(DDS)と表示周波数(LCD)の「変化の割合」を
       選ぶ事ができる(varable ratio) ギヤ比可変。
       1Hz:1Hz(Normal),4Hz:1Hz(DDS出力を4分周するPSN-SSB用),
       1Hz:2Hz,1Hz:3Hz,1Hz:4Hz 1Hz:10Hz(DDS 出力を親機で 2,3,4,10 逓倍する回路用)
   3b、DDS発振周波数が高くなるとき、LCD表示周波数も高くする(follow)/逆に低くする(reverse)
   詳しくはセットアップの方法を見てください。



周波数セットアップの方法
(下の写真の順序でデータを変更します)

・[S] を押すと、それまで選択されていたVFO(バンド)についてセットアップを開始します。
  セットアップ開始直後は[Q]スイッチを押すと、セットアップを中止します(Quit)。
  セットアップの途中でリセットスイッチを押して、リセットを掛けるとVFOメモリーの周波数は
  そのまま残り、変更されません。

セットアップ:予めセットアップするVFO(バンド)を [U],[D] で選び、[S]を押すと
    選んだバンドについて、表示周波数,発振周波数,ギヤ比,DDS:LCDの
    増減の順・逆変化を再設定します。

  ・最初は DDS の「発振周波数」を設定します。
      液晶に表示された、発振周波数の桁を U/D で選択して、ダイヤルで数値を決めます。
      [S]スイッチを押せば次に進みます。
      何も変えずに[S]を押すと最初の数値が残り、次に進みます。

  ・次に LCD の「表示周波数」を設定します。 
      液晶に表示された、表示周波数の桁を U/D で選択して、ダイヤルで数値を決めます。
      [S]スイッチを押せば次に進みます。
      何も変えずに[S]を押すと最初の数値が残り、次に進みます。

周波数は 0 〜 $FFFFFFFF(4294967294)まで変えられますが、DDS発振周波数は
その発振可能範囲を超えて発振させることはできません。

  ・最後は、VFOダイヤル回転の1パルス当たりに変化する周波数の量を、DDS発振周波数と
      LCD表示周波数について個別に選択します。液晶には "DDS:LCD" ギヤ比として表示し、
      最初は「1:1」になっています。
      また、発振周波数と表示周波数の増減の「順変化」「逆変化」も設定します。
      逆変化は比の横に*印が表示されます。
	[U]スイッチ:DDS発振周波数(右側)の変化量(1Hz/4Hz)が交互に替わります。
	[D]スイッチ:LCD表示周波数(左側)の変化量(1,2,3,4と10Hz)が順に変わります。
	[Q]スイッチ:DDS周波数とLCD周波数の変化の順逆設定が交互に替わります。
      [S]スイッチを押すと、これまでの設定をEEPROMに書きこみ、プログラムは再スタートします。

表示周波数の最少変化量,10Hzを追加しギヤ比1:10 に対応しましたが、液晶には
「1::」と表示されます。
また、DDS:LCD ギヤ比を「4:4」や「1:3*」と設定することを制限していません
(面倒なのでやっていません)ので、意味のある設定をして下さい。

セットアップで変更(再設定)した発振と表示の周波数は、Qスイッチを押したままリセットスイッチを
押せば、液晶の上下段に発振/表示の周波数が表示され確認できます。ギヤ比が1:1でない時は、
発振・表示両方の変化を確かめて下さい。

別のVFO(バンド)を変更するにはバンドを選びなおし、セットアップをもう一度最初から行います。
 
  ⇒頒布基板では、[S]スイッチは普段使わないからLCDの裏に配置しました。以下の写真は最新の
    もので、スイッチは左からリセット,U,D,Qです。MスイッチはLCDモジュールの上側に
    なりました。
   	
次に表示周波数(LCD)を表示して、発振周波数同様に変更します。 最後にDDS,LCDのステップ倍率および変化の順/逆を[U],[D],[Q]で選びます。
  DDS発信周波数と目的(送受信)周波数の関係。(IE以外のブラウザで見えない事があります)
<製作> ・基板のジャンパー線は図のように付けます。 ・ロータリーエンコーダは光学式を使ってください。やむを得ずEC16Bを使う場合は プルアップ抵抗を 3.3K〜1KΩで調整してみてください。EC16Bはチャタリングのバウンスが長く ダイヤル回転判定プログラムが、データを二重取りします。 ・また、光学式エンコーダーは電源が要ります。 図にはありませんが、+5VとGNDを配線して 下さい。 コパルのRES20-50-200は・・・ ・赤…+5Vにつなぐ ・黒…GNDにつなぐ ・白と茶…RE1とRE2につなぐ 基板上の7x10KΩ(8本足)の集合抵抗の足を端から2本(RE1とRE2の プルアップ用)カットします。 代わりに10KΩの抵抗2本を用意し、RE1とRE2をそれぞれ、10KΩで プルダウン(GNDに落とす)します。 ケンウッドのHF固定機から外した光学エンコーダーは・・・ ・+5VとGNDをつなげば、RE1・RE2はプルアップのままで動作します。 ・青…+5Vにつなぐ ・黒…GNDにつなぐ ・黄と橙…RE1とRE2につなぐ ・青の部分はLCDとDDSへの渡りです。 LCDのソケットはメスをこの基板に付けます。 DDSは、この基板とハンダ面同士が向かい合わせになるようにすると、信号線の穴の 位置が合います。制御基板のハンダ面に長めのリード線を立てて、DDSを挿してから DDS基板の部品面スルーホール側からハンダ付けします。
DDS-VFO制御用のAT90S2313プログラムのバージョン: Ver.0 PIC16F84のDDS制御プログラムをAT90S2313に移植したもの。(不完全版、非公開) Ver.1 メモリー周波数データの再セットアップ対応。(バグあり、非公開) Ver.2 ウェブ公開版。このページからダウンロードできます。 Ver.3 これ以降は有料頒布。スプリット運用に対応。(ブラウンアウトするバグあり) Ver.4 メモリーVFOを8バンドから14バンドに増加。ブラウンアウト回避対策。 Ver.5 メモリーVFOを14バンドから16バンドに増加。領域不足でブラウンアウト対策外す。 Ver.5b DDS基板にバンド番号を送出する機能を追加。(ブラウンアウト対策なし) Ver.5c 液晶表示で、表示すべき桁がゼロの時にゼロ・ブランク動作をするバグを修正。 Ver.6 2013/Sep,DDSデバイスをAD9834用変更、それ以外は同じ。
top トップへ