|
発行:2017/6/14(修正2019/11/11) |
M6955オールバンドDSPラジオの製作 |
I2c通信でDSPチップとカラー液晶をコントロールする
本文は、i2C通信障害原因がチップに起因すると思っていたが、Pull_Up抵抗の定数10KΩを誤って100Ωを付けていたことと、i2Cコマンド受信関数での無駄な待ち記述が要因であったことが判明しました。
この修正をしたところ、問題なく、制御できるようになりました。
このチップをIF段に使用した6mAMポケトラを製作したが、とても高感度な物に仕上がりました。
本書を参考にされていた方には、この場をお借りしてお詫びします。
序論
DSPラジオは以前にM6959で作ったが、周波数直読が出来ない。
今回はマイコンを内蔵させ、カラー液晶にバンド+周波数+受信感度をバー表示させた。
Arduinoのスケッチを使うと今までPICアッセンブラでは難しかった機能制御がいとも簡単に実現出来る。
これを機にPICマイコンで作りかけていて、棚上げとなっていたM6955(I2C通信方式のDSPラジオチップ)の製作を再開することにし念願であった周波数の直読できるPLLオールバンドラジオを完成させた。
40年振りのBCLである。昔に比べ少なくなった日本語放送ではあるが、アジア圏の日本語放送を聴くのが、日課となっている。
設計
使用するM6955は水晶等の周辺部品が付いたアイテンドーから購入したラジオモジュールである。
PICでの開発中に判明していた問題点を列挙しておく。
@ チップに内蔵されているオートサーチ機能は、広帯域の中から、今受信可能な放送をキャッチするのに、非常に便利である。
実際に使用してみたところでは、1プッシュで次から次へと放送が受信出来、大変便利である。
しかし、I2Cで自動サーチ受信させ、止まった周波数を液晶画面に表示させたところ、周波数データが空であるため
止まった周波数を読むことができない。
A RSSI(受信感度)は、連続して読むとi2c信号が帰って来なくなり、固まってしまう。
B その他、下記コマンドをチェックしたところ読むと固まるコマンドもあるので注意が必要だ。
I2C通信RWでNGだったコマンド
#0x14:X(だめ)
#0x15:X(だめ)
#0x18:X(だめ)
#0x1A:X(チャンネル変更で固まる)
#0x1B:X(チャンネル変更で固まる)OK?
#FREQ4=11660KHz時に1Bリードで固まる
#0x18:pgaリード時固まり頻発
不安定なチップであることは判った上で使う必要がある。
しかし受信性能は、すこぶる良いし、音質も良い。
今回、Arduinoのスケッチ開発の勉強を兼ねて再開することにした。
どうせ作るのなら、旅行のお供に邪魔にならず、待ち受け受信が出来るものとして開発した。
部品
@ CPU:ArduinoProMiniの安価な互換ユニットでCPUがATmega328クロック16MHzで3.3V駆動のものを中華サイトから購入。
周辺デバイスを全て3.3Vに統一出来るのでレベル変換回路が不要となり大変FB。書き込みはcpuボード「ArduinoProMini 」を選択し
CPU-ATmega328のボード選択中に3.3v16MHzの選択は無いが5V、16MHzの選択で、特に問題ない。
8MHzを選択すると、通信ボーレート、その他タイマー関係が崩れるので注意が必要である。
A LCD:1.8"TFTカラー液晶ユニットである。これも中華サイトから購入。
注意としては、基板裏面に付いている3端子レギュレータのパット(J1)をハンダでショートさせ、3.3V駆動に変更する。
LCD:1.8"TFモジュール(半田面)
B DSP:aitendoのチップと周辺部品が付いたラジオモジュールである。チューニングLEDやパワーLEDは消費電流削減の為に外したが、最近はチップ単体で安価な物も売られているので新規購入するならば、そちらを使った方が良い。
C バーアンテナ:昔100円ショップで3端子ICの載ったAMラジオから外した小型バーアンテナであるがケースイすすると、CPUクロックのノイズの影響で受信不可となりSW同様、外部ANTを付けないと聞こえない。
D ロッドアンテナ:ジャンク箱に入っていた物で、伸ばしえも20cm程しかなく、お飾りである。実際はここにワニ口クリップでロングワイヤーを繋ぐ為の端子として使用している。
E VR,SW:ダイソー100円ラジオから外した物である。
F プッシュSW:最近秋月で売っているものを使用したが、チャタリングが多く、ソフトで取りきれず、壊れ易くタッチ感もBF.だがケースイン対応の為止む無く使用している。
周波数Up/Downとバンド切り替えの3ケはプッシュ型を、液晶のバックライト消灯用にロック付きを1ケ使用。
G
電池: mp3プレーヤに付いていた中古リチュームイオン電池を使用しUSBで充電しながら使用。
マイコンの消費電力と液晶ユニット電流が高い為フル充電しても1時間程しか持たないがケースイン可能なサイズとして妥協。
回路図
殆どユニット同士をI2C接続する他、特段な回路はなく、非常にシンプルである。
ユニバーサル基板への部品配置、結線等は写真を参照されたし。
プルアップ抵抗定数は、この図面通りです。
ポ-トは以下のように設定した。
pinMode(A2,
OUTPUT);//DSP_PW端子のコントロール(ON固定でも良いが一応CPUで制御としたHIでDSPチップONとなる)
pinMode(2, INPUT_PULLUP); //周波数Down
pinMode(3, INPUT_PULLUP);// 周波数Up
pinMode(4, INPUT_PULLUP);//Band切替
pinMode(5, INPUT_PULLUP);//Lock(バックライト制御用トグルSWと共に検出させているが現在未使用である)
pinMode(A3, INPUT_PULLUP);//DSP_TUNE_LED信号の検出(オートサーチ中にLoを検出すると、サーチを止める)
入力ポートは全てプルアップ抵抗を有効にした。
プロクラム(スケッチ)
理由はオートサーチ機能の項を読んで頂ければ判るが、
最後の#0x18(pgalevel_if =PGA)値リード時のハングは致命的で、電界強度の正確な計算は出来なくなってしまった。
矢も追えずRF側のRSSIだけリードしてPGA値は固定値で計算した。
何回かサンプル値を取った結果で以下のようにした。
FM時は
rssi = 103 - rssi -
6 * pgalevel_rf - 6 * pgalevel_if;//dbuV
SW/MW/LW時は: rssi = 123
- rssi - 6 * pgalevel_rf -
6 * pgalevel_if;//dbuV
そのため表示されるdbuV値は、定量的な目安である。
液晶表示
1.8"TFTは270度(横)方向に設定。
(X,Y)軸座標は右は=(0,0)〜(160,0)下は(160,80)となるので、この範囲に位置を設定しながら文字やグラフイックを表示させる。
Xposとの関わりでバンド毎に周波数ポジション表示を以下のようにした。
LW帯域150KHz〜600KHzまでの(450KHz幅)3KHzStepで1Stepで1シフトさせる(150ポジション)
MW 帯域(1350KHz幅)=522KHz〜1872KHzまで9KHzStepで1Stepで1シフトさせる(150ポジション)
SW1:3.0-6.0MHz(5KHz)3000KHz=(5KHz*150回=750KHz*4Stepで1シフトさせる
SW2:6.0-9.0MHz4Step
SW3:9.0-12.0MHz4Step
SW4:12.0-15.0MHz4Step
SW5:15.0-18.0MHz4Step
SW6:18.0-21.0MHz4Step
SW7:21.0-24.0MHz4Step
SW8:24.0-27.0MHz4Step
SW9:27.0-30.0MHz4Step
FM:76MHz-108MHz(50KHz)32M幅 50KHz*155回=7.75MHz←4Step分を1回にすれば31Mhz幅(不足の1MHz分は表示が見えなくなるがそのままとする)
周波数をUPすると右に移動Downさせると左に移動させると云うことで、グラフ表示のどのポジションに今いるのかが分かるように一番下に色を変えて進行表示させている。
上記以外に、おまけで付けた、周波数表示は、全く考慮していない。
尚、グラフイック液晶は一度表示させた絵文字をコマンドでクリアさせることは出来ない。そこで消したいところの周辺座標を囲い設定してからバックカラーで上塗りさせて消すと云う技法を使うところがポイントである。
周波数の更新時は、表示→上塗り消去→表示...を繰り返さないと、前の文字と重なって、見えなくなってしまう。慣れるまで、厄介だが固定フレームや書き換え不要な文字は初回に表示させてしまえば、書き換えるまで表示したままとなる良い点もある。
キー検出
周波数設定にロータリーエンコーダを使用する例が多いが、
そこでプッシュスイッチを用い単押しは1ステップ移動。長押し時は
オートサーチ機能が働き、
バンド幅はSW帯は1バンドを3MHz幅にしで切り替える。
表示サイズの関係で5KHzステップを4回(20KHz毎)に1dot右に進めるようにした。
MWは9KHzで1dot進めている。FMは32MHzを4ステップ毎にdot進めている。
実験中は特に気にならなかったが、チャタリングの多いタクトSWの影響で、長押しの反応が良くない為、改善の余地がある
この原因は、使用したスイッチのチャタリングに因るものです。
オートサーチ機能
オートサーチ後の周波数表示は、
そこで、ソフトで連続受信させながら、RSSI値をリードし、規定レベル以上だったらストップさせるようにした。
上記写真はその時のサーチ画像である。
バンド内のノイズの中に受信可能な局があると、バーを赤色に変えて表示させ、体裁も良い。
また、サーチ中のグラフ位置が判るように、周波数Up時は水色、ダウン時は黄色で表示を塗り替えている。
オートサーチは、ある程度ウエイトを置かないと、早過ぎて止まらないことがある。
この状態でテストを繰り返していると、当初問題となっているRSSIの連続受信中にハングすることがあり、
リセットしないとDSPラジオとの通信が出来なくなってしまう。
悩んだ末、オートサーチ中の受信ストップは、ハード的にチューニングLED端子を使用することとし、RSSIは受信ストップした時に1回だけリードするようにした。
そこでRF側のRSSI値だけをチューニング時に一回だけリードするようにした。
サーチ中は、A3ポートの変化とUP中はDownキーの検出(Down中はUpキーの検出を行い、検出時にサーチをストップさせている。
if(digitalRead(A3) == HIGH){break;}// 信号を受信したら、ループから外れる
else if(digitalRead(2) == LOW){break;}//サーチUp中にDwキーを押すと、サーチ中断
オートサーチ放送を受信した時に、
オートサーチ中のストップ動作、その後のレベル表示は安定した。
しかし、この変更により受信出来た信号のところだけしかレベル表示されない。
表示させてもノイズレベルが見えるだけではあるが、
上段には現在のスタートーエンド周波数、電池電圧と電池マーク、受信感度(dbu)を表示させている。
内蔵アンプはBTLモードに設定しだので、
組み立て
タカチのプラケースに入るように、液晶基板、ユニバーサル基板も削った。
機能
製作過程、受信状態は、Youtubeに動画を混ぜてUPしたので、参考にして欲しい。
受信は2016年9月の土曜夕方に短波帯をサーチさせた状態である。
アンテナは2階のベランダから電線を5m程垂らした状態である。
6-9MHz帯は非常に沢山の放送が聞こえた。
最後のNHK国際放送は12Mhz帯のアジア圏向け放送である。
完成度としては、まずまずであるが更なる改良点としては
1.
ノイズ抑制のために
2.
CPUをスリープ状態にする。
3.
ケースを大きくし、LCDとDSPチップを離す。
4.
キー検出に割り込みを使う。
といったところである。
Copyright (C) 2017
7N3TFI All Rights Reserved. |