- ASOOVU USB ラジオキット(AD00022)はPCから操作する新感覚のAM/FMラジオです。
- ラジオモジュールはダイレクトコンバージョン方式(DSP)です。
- 最大の特徴は受信信号強度(RSSI)をグラフ表示し、視覚で確認できます。受信場所で放送局の電波の強弱を確認できます。
- アンテナの方向や設置などの目安に利用できます。
- ビット・トレード・ワンの製品紹介ページはこちらです。
FM表示
- BAND CHANGEボタン=AM/FMバンド切り替え
- SEEKボタン=自動選局
- REV/FFボタン=手動選局
- MUTEボタン=消音
- Volumeバー=音量
- SCANボタン=受信信号強度グラフ作成
AM表示
- グラフの見方です。
- 左の縦軸が受信信号強度(青線)です。
- 右の縦軸がSN比(赤線)です。
- FM受信の例では、80MHzの受信信号強度=約45dBuV、SN比=約40dBです。
- 受信信号強度が低いのはイヤホンによる簡易アンテナのためです。
- むしろイヤホンによるアンテナだけで、これだけの性能を発揮できるのは優秀です。
- 外部アンテナを接続し、受信電波の強度を上げれば、もっとよい結果を得られるでしょう。
- 専用チューナーでも一般的に実質的なSN比は50dBから60dBの範囲です。
- 専用チューナーのカタログ値SN比=70dBとは最良条件での上限値であり、実際にはこれ以下のSN比しかありません。
- カタログ値は強電界での測定値です。
- 自動車でも公称燃費と実燃費は異なります。最良条件と実際の条件で結果は異なります。
- 一般的に電界強度(受信電波)が高いほど、SN比が向上します。一定以上を超えると向上しません。
- SN比とはSignal(音声信号)とNoise(ノイズ)の比です。dB表示の場合は差=(音声信号)-(ノイズ)です。
- ノイズがいくら低くても、音声信号も低ければSN比は悪化します。例えば、ノイズ=-80dB、音声信号=-20dBならSN比=60dBです。
- 無音時のノイズ(フロアノイズということもある)=-80dBがSN比ではありません。
電界強度と受信信号強度の目安(厳密ではありません)
- 正確には電界強度[dBuV/m]と受信信号強度[dBuV]は別です。
- 電界強度[dBuV/m]は空間内の電波の強さです。
- ある電界強度にアンテナをおき、出力された電圧が受信信号強度[dBuV]です。
- アンテナの性能によって出力される電圧は変わります。
- 受信信号強度が大きいと、電界強度も大きく、電波が強いといえます。
- つまり受信信号強度は電波の強さの指標です。
- 強電界=80dBuV/m、受信信号強度=65dBuV
- 中電界=70dBuV/m、受信信号強度=55dBuV
- 弱電界=60dBuV/m、受信信号強度=45dBuV
- 全体の構成図です。
- PC上の専用ソフトウェア(RadioWaveMonitor)で操作します。
- USB接続されたコントローラ(ASOOVU USBモジュール)がラジオモジュールを制御します。
- USBコントローラから電源ノイズ除去もかねてレギュレータを通して3.3Vを供給します。
- USBの電源ノイズは大きいことが知られています。このレギュレータによるノイズ低減効果は大きいです。
- ラジオモジュールをI2C経由で制御します。動作電圧が異なるため、相互レベル変換をしています。
- ステレオ・ミニジャックから音声出力します。同時にFMアンテナも兼用しています。
- オプションでAMアンテナを接続すればAMも受信できます。
- よく考えられています。
RadioWaveMonitorのCPU負荷軽減
- ワイドFMが開始されたり、時間経過に伴い、改造の必要がでてきました。
- 現在の要望に合うようにPCソフトウェアとUSBコントローラのファームウェアを改造しました。
- さまざまな改良を施しました。
ASOOVU USB ラジオの単独利用
- ネットブックで使っていると約70%のCPU負荷があります。
- 重たいのでCPU負荷を大幅に軽減しました。
- 原因は周波数表示、ボリューム表示のイメージ操作にあります。
- 変更のあるなしに関わらず常にイメージ入れ替えを行っています。非常に無駄な動きです。
- そこで、周波数に変更があったとき、ボリュームに変更があったときのみ、イメージ入れ替えを行うようにしました。
- この負荷軽減に伴い、インターバルの設定を100msに変更しました。
- 無操作時のCPU負荷は5%以下になりました。
- 開発環境をVisual Studio C# 2010に変更しました。
- Windows 10で動作確認しています。
- .NET framework ver2.0 以上で動作します。
ワイドFM対応
- USBモバイルバッテリを利用することで、単独利用できるようにしました。
- 操作はできませんが、RadioWaveMonitorで最後に設定した状態で受信を再開します。
- 自動受信操作したとき、USBコントローラのEEPROMに状態を保存するようにしました。
- 約1秒遅れで状態を保存します。LEDのアクセスで確認できます。
- USB電源の消費電流は約50mAです。1000mAHなら電池寿命は約20時間です。
- この実現のためにPCソフトウェアとファームウェアの両方を変更しました。
参考:首都圏のワイドFM周波数は以下のとおりです。
- 2015年12月7日よりワイドFM(FM補完放送、90MHz〜95MHz)を開始しました。
- そのためFMの自動受信範囲を拡張しました。
- 対応前76MHz〜90MHz
- 対応後76MHz〜108MHz
- この実現のためにPCソフトウェアとファームウェアの両方を変更しました。
FM受信のノイズ改善
- TBSラジオ=90.5MHz
- 文化放送=91.6MHz
- ニッポン放送=93.0MHz
ファームウェアの開発環境の変更
- Si4735のデバッグ機能を無効にすることで、ノイズ低減しました。
- FM受信時、無音の場合に、非常に小さな定期的(約1秒)なノイズが消えました。
- ファームウェアを変更しました。
MALからMLAに変更
- ファームウェアの開発環境をC18から最新のXC8に変更しました。
- これにより今後の開発も容易になりました。
- XC8 v1.35でコンパイルしています。
plibの非依存化
- XC8の変更にあたり、USBライブラリもMALからMLAに変更しました。
- MAL(Microchip Application Libraries)
- MLA(Microchip Libraries for Applications)
ブートローダ設定
- 細かい話になりますが、MPLAB X IDEにCode configuratorが組み込まれたことにより、従来の周辺ライブラリ(plib)が廃止されました。
- Code configuratorは周辺モジュールのソースコードを自動生成します。これにより周辺ライブラリが不要になります。
- XC8 v1.35からplibが廃止されました。
- ところが、Code configuratorの完成度がまだ低く、PIC18シリーズに対応していません。
- 過渡期のため、未対応の箇所が多く存在します。
- ASOOVE USBラジオではI2CやEEPROMの操作をします。これらをplibに依存してきました。
- 今後のことも考え、plib依存から脱却し、I2CとEEPROM用のソースを記述しました。
- XC8にはリンカスクリプトがないため以下の設定が必要です。
- Code offset=0x1000
- MPLAB IDEでの設定方法です。
- 同時にLink in Peripheral Libraryのチェックを外します。外さないとWarningがでます。
AMバーアンテナ
- SL-55GTやBA-200を使用できます。
- DSPラジオは自動同調するため、正確なインダクタ値でなくてもかまいません。
- 180uHから450uHの範囲であれば使用できます。
- ASOOVU USBラジオのAMアンテナ端子とGND端子間にAMバーアンテナを接続します。
- 個人利用に限定され、著作権者の許可なく商用利用できません。
- 直接間接に関わらず、使用によって生じたいかなる損害も筆者は責任を負いません。
- 仕様は予告なく変更されることがあります。
- ASOOVU USB用ファームウェア(hexファイル)
- (NoDirectX版)RadioWaveMonior(exeファイル)
- ASOOVU USBのファームウェア書き換えソフトはこちらのページからダウンロードしてください。
- Si4735をPIC18F2550で扱うためのライブラリです。
- このライブラリを使うことでSi4735を簡単に制御します。
- ライブラリがないと大変な苦労をします。
- BTO_Radio_Kit.h=ヘッダーファイル
- BTO_Radio_Kit.lpp=ライブラリ
- ※PIC18F2550専用です。他のPICでは利用できません。
- ※XC8専用です。C18では利用できません。
関数 引数 説明 OpenRadio なし Si4735を利用開始します。 CloseRadio なし Si4735を利用停止します。 ResetRadio なし Si4735をリセットします。 InitAMRadio unsigned char vol
unsigned int seek_bottom
unsigned int seek_top
unsigned int seek_spacingAM受信条件を設定します。
VOL_MIN <= vol <= VOL_MAX
AM_FRQ_MIM <= seek_bottom < seek_top <= AM_FRQ_MAX
seek_spacing = AM_FRQ_SEEK_SPAN_JPInitFMRadio unsigned char vol
unsigned int seek_bottom
unsigned int seek_top
unsigned int seek_spacingFM受信条件を設定します。
VOL_MIN <= vol <= VOL_MAX
FM_FRQ_MIM <= seek_bottom < seek_top <= FM_FRQ_MAX
seek_spacing = FM_FRQ_SEEK_SPAN_JPSetAMRadio unsigned int freq
unsigned char wait_fAM受信周波数を設定します。
AM_FRQ_MIM <= freq <= AM_FRQ_MAX
wait_f=1のとき完了まで待ち。SetFMRadio unsigned int freq
unsigned char wait_fFM受信周波数を設定します。
FM_FRQ_MIM <= freq <= FM_FRQ_MAX
wait_f=1のとき完了まで待ち。SeekAMRadio unsigned char seek_up
unsigned char wait_fAM自動選局します。
seek_up=SEEK_DOWN or SEEK_UP
wait_f=1のとき完了まで待ち。SeekFMRadio unsigned char seek_up
unsigned char wait_fFM自動選局します。
seek_up=SEEK_DOWN or SEEK_UP
wait_f=1のとき完了まで待ち。SetVolume unsigned char vol Volumeを設定します。
VOL_MIN <= vol <= VOL_MAXGet_AM_Radio_Info なし AMの受信状態を取得します。
戻り値はBTO_AM_RADIO_INFO構造体です。
受信周波数やRSSI、SNRを取得します。Get_FM_Radio_Info なし FMの受信状態を取得します。
戻り値はBTO_FM_RADIO_INFO構造体です。
受信周波数やRSSI、SNRを取得します。
電子工作は間違いの許されない世界説明書を読まないのは致命的
- 最近はこうしたことも教えてくれないので、電子工作の基礎以前を解説します。
- 電子工作は一か所でも間違いがあると正しく動きません。間違いの許されない世界です。
- 大体組み立てればよいとお考えの方には向いていません。丁寧さや正確性を要求されます。
- ハンダ付けに自信のない方はご遠慮ください。ハンダ不良があると動作しません。
- 動かない場合、まずはハンダ部分を目で問題がないか確認し、さらにテスターで導通テストしましょう。
- 配線されていない部分はショートしてはいけません。
- 配線されている部分は導通しなければなりません。
ネット上の情報を判断する能力
- マニュアルやデータシートを読まない方はご遠慮ください。回路図を語る以前の問題です。
- マニュアルやデータシートの指示に従わない方は電子工作に向いていません。
- Si4735モジュール上のハンダジャンパーを忘れていると動きません。これはマニュアルに記述されています。
- 当然のことながら部品の向きを間違えても動きません。
- AMバーアンテナの条件はSi4735のデータシートに記述されています。
電子工作は正直
- ネット上の情報は正しいとは限りません。自分で判断する能力が必要です。
- 自称、組み込みエンジニアのプロという方が動かないと不満たらたらのレビューを見かけますが、こんな簡単なキットも動かせないようでは素人以下です。
- 十数個の部品しかありません。こうした方に仕事を依頼したくないですね。
- こうした方のレビューは信用できません。口コミ情報は有益なこともありますが、有害なこともあります。ご自身で見極める能力が必要です。
- 実際、多くの電子工作初心者でも正しく組み立てて正常に動作しています。
その他
- 電子工作は正直で、動かない原因はほとんどユーザ側にあります。
- (初期不良でまれに部品の故障もありますが、その確率は低いです。)
- (そもそも設計不良の場合もありますが、回路図をみれば判断できます。)
- マニュアルもデータシートもダウンロードできるので必要な情報は用意されています。
- 回路図はもちろん、ソフトウェアのソースコードまで公開されています。
- ここまでお膳立てされているのですから、不満があるならご自身で改良や改善をすればよいだけです。
- そのために、情報が公開されているのです。
- 少なくとも私はそうしています。ここに改造記事を掲載しているように実践しています。
- 文句を言う前に、他人を批判する前に、まず自分で解決しましょう。
- 解決できないのは自分の能力不足です。努力しても能力を得られるとは限りません。
- ※はじめから自分勝手に改造して、動かないという方がいますが論外です。まずは改造せずにマニュアル通りに組み立てましょう。
- ※キットを改造して動く保証はありません。よくわからないで改造すれば動かないのは当たり前です。
- ※指示に従わず動かないと文句を言ってもダメです。文句を言う資格がありません。指示に従ったけれども動かない場合に文句を言う資格があります。
- ※生徒全員が英語や数学を得意になれるわけではないように、全員が電子工作を得意になれるわけではありません。
- ※改造、改良は自己責任です。自己責任をとれないなら改造してはいけません。
- ※まずは指示に従うことができ、それが確実にできるようになった後で、自分なりの工夫に自信がなければ改造してはいけません。
- ※ベテランは多くの失敗を経験しています。成功は多くの失敗を繰り返すうちに見つけ出すものです。ベテランはどうすれば失敗するのか知っています。
- ※失敗とは成功の可能性を排除する作業です。多くの失敗を嫌うなら、電子工作に向いていません。ベテランにはなれません。
- ※成功体験だけしか求めていないなら、電子工作に向いていません。
- ※ここに記述したことを理解できない方、素直(謙虚)になれない方も電子工作に向きません。
- ※自分の間違いはなかなか自分では気が付きにくいもので、一度すべての思い込みを捨てないと気が付きません。
- ※組み立て間違いを探すのは、自己否定からはじめなければなりません。素直になるどころか、自分を否定できなければ電子工作に向きません。
- ※プログラム間違い(バグ)も同じです。コンピュータは間違った指示通りに動作します。
- ※コンピュータの動作が間違っているのではなく、人間の指示に間違いがあります。
- ※間違っているのはコンピュータではなく、プログラムを作った自分の方です。
- ※自分の考えが間違っていることを前提にしなければ、バグを修正できません。
- ※自分の間違いを認められず、他人の責任にするなら、電子工作に向いていません。
- ※非常に高度な論理的思考能力が必要です。一つもミスが許されない世界です。