Si4735 ラジオモジュール進捗と〆

11月30日の夕方に、Atmel Studio のプロジェクト作成したようですので 1週間経過です。まぁ全てこれに注力しているわけではなく、余裕のあるときにやっていますので工数的には少ないです。今の段階でインプリ出来ているのは

  • 受信周波数 AM 531kHz ~ 1602kHz, FM 76.0MHz ~ 90.0MHz
  • AM/FM 切り替えボタンによるバンド切り替え
  • 選局は、シーク UP/DOWN のボタンによるサーチ方式
  • アンテナは、AM/FM 共にロッドアンテナ
  • 液晶コントラスト調整(6段階)
  • 音量調整ボタン
  • アナログ音声出力 3.5φステレオジャック
  • 電源 ON 時以前の状態を復元
  • 電源 3.3V(電池可)
  • 電流 稼動時 20mA, 停止時 0.1~2μA(データシートより)

のようになってます。安物ラジオの条件達成なので個人的な目標も達成です。基板起しとケース入れるという作業は残ってますがね。

2012/12/8 追加開始: 上記機能までインプリしたソースと回路図を再掲します。

[ダウンロードが見つかりません]
最新のソースは Si4735 ラジオモジュールの Blog 記事一覧 から取って下さい。

ソースファイルは、各種資料をもとを作成させていただいています。商用利用はお断り。二次配布もお断りします。
2012/12/8 追加おわり

このラジオモジュール使った短波受信ありのラジオも発売されているようですので、もうちょっと改良するところはありそうです。パット思いつくのは以下の点ですが、短波だけは試したいなと思います。

  • 短波(31mバンドあたり)が使いものになるのか動かしてみる。
  • フェライトアンテナでは AMが飽和して音声が出なくなる局がある。(ハリガネで結構受信出来る)
  • USB シリアル変換を付けて、ホストコントロール出来るようにする(普段ならデバック用に付けますが今回付けてないので)
  • アナログ出力のドライブ能力のせいか、音量上げるとクリップしてると一発でわかるのでバッファ用のアンプは付けたい。(↑の写真のように簡易アンプはさむと実用的にはなる)、ラジオチップのアナログ部分は 5V まで上げられるが、このモジュールは VDD と共用という仕様。
  • アンプ付けるとボリュームによる音量調整が出来るので、ボタン2個減らせる。→ だけど単三2本から4本くらいに電源変更したくなる。

個人的にはこのモジュールの基本的な使いかたはだいたいわかったので、妥協出来る切りのいいところでまとめてしまいたいなと思います。ほとんどこれにて終了状態ですけどね。

“Si4735 ラジオモジュール進捗と〆” への16件の返信

  1. 更新 お疲れ様です。
    ちょと質問なのですがI2c LCDは秋月にも出てるのですが使用可能でしょうか?
    I2C LCDを扱うのは初めてなので http://akizukidenshi.com/catalog/g/gP-05693/
    取り敢えず 同じICDは注文しました。
    後 このモジュールは短波も受信出来るのは知ってるんですが
    AMの周波数の関数変更で出来るんでしょうか?
    後 許可出来れば進行状況をブログに公開したいのですが
    ソースと回路図は非公開とします。うちのブログは見てる人は
    少ないですけど^^;
    宜しくお願いします。

  2. sknet さん

    秋月の I2C 液晶ですね。私の主な部品購入は大阪日本橋のためあるのは知っていました。が、入手するという意味では Blog に書かせていただいた液晶モジュールでした。なので、使ったことはありませんが、データシートをパッと見た感じ、 I2C バスの速度は 100kHz までですがこれは、内蔵クロックの関係で問題ないと思います。なので Wire.cpp, .h は修正しなくて良いと思います。 lcd.cpp、.h は秋月の LCD 用に書き直ししていただく必要ありです。またこの液晶ならコントラスト調整は、ボリュームで可能なため液晶コントラストの処理はカット出来ます。

    Si4735 のプログラミングについては、http://www.silabs.com/products/audiovideo/amfmreceivers/Pages/Si473435.aspx の Documenttion から AN332 の Programming guide は見ていただかいといけませんが、短波受信は、AMの処理でまかないます。Si4735.cpp の begin() にある、周波数範囲の設定と、サーチステップ、を希望する周波数の下限、上限を設定して、サーチの周波数ステップも設定する。そして setAMFreq() で周波数を設定するか、サーチすればいいです。

    今回の Si4735.cpp ではメソッド書いていなくチップのデフォルト値で使用しているAM_CHANNEL_FILTER(AMモード時のフィルタのバンド幅) 2kHz は短波でも問題無いと思いますが、広いようならこのコマンド送る必要があります。

    ソースと回路図のオリジナルは私に権利はあります。出展が私の blog であることを明記下さい。なので、今回公開しています Si4735Radio_Ver0.01 や si4735radio_20121205.pdf をあたかも貴殿が作成されたのごとくに貴殿の Web サイトで公開されるのはお断りしますよという話です。
    このサンプルをもとに努力されて工夫・製作されたところは私の範疇ではありません。というか修正分のモデレートするにも個人では限界があるので、こういうサイト見て、こんなラジオ作ったと公開されるのはなんの問題もないと思っています。

  3. masahiro様

    おはようございます。
    LCDの件 使用出来るようなので安心しました。
    調べてみましたら、PICでコントロールしてるようで
    ストロベリー社互換ファームもあるようです。
    このままで定義ファイルの書き換えで使えたらと思います。
    短波受信の方も色々テストしてみてみたいと思います。
    欲を出せば 10局くらいのプリセットが欲しくなります。^^;
    これから先は自分に対する課題になります。
    それとブログに載せる件ですが回路図とソースは一切載せません。
    もちろんmasahiro様からのブログを見て作りました的な内容で
    載せるつもりです。詳しい事はmasahiro様のブログを参照のような感じに
    します。悪魔でも 自分仕様にした事のみは説明する程度です。
    私事なのですが、こちらは雪が降ってるので部品が来たのですが
    出ようか考えてます。お世話になりました。 

  4. 追記
    まだ載せませんが著作権は守って載せるつもりですが何か問題があれば
    指摘お願いします。それと全然関係ないのですが
    もう10年以上前になりますが、大阪に住んでた事があります。2年くらいですが
    大正区ってとこに居ました。南港に行くにも日本橋に行くのも
    近いので便利でした。すぐそばに43号線が走ってたかと思います。 

  5. sknet さん

    一時期大阪におられたとのこと、大正区は大阪ドーム周辺はよく通りますが海側はインテリア用品 IKEA に行くくらいですか。なかなか御堂筋を越えて海のほうは用事作って行くという感じですので、あまり土地勘はなかったります。
    あと、ラジオのほうは気になさらず製作ください。今回のファイルもサンプルとしてお使い下さい。いざ動かすと音声出力は3Vでは弱いと一発で感じると思いますし、以前のコメントにあったメモリ機能追加など。改造ポイント多々あると思いますのでよろしくお願いします。
    気にするのは、丸パクリでWEBに掲載されることです… (ひどい時には記事までコピペとかもありますのでね…)

  6. masahiro様
    おはようございます。
    昨日から製作を始めまして、動作する事を確認しました。
    ブログに公開してるので何かあれば言って下さい。
    問題も出てて原因を追求中です。
    どうしても解らないとこがあるのですが
    AVRの24pinから LCDの電源を取ってるんですが(lcdは同じ物を使ってます)
    電圧が2.3vくらいと低いのです。ストリナ仕様では最低2.7vくらいに
    なってますので原因が解りません。LCDを直接 3vに接続したら
    表示しました。
    それと、シグナル表示が固定なのですが リアル表示は出来るのでしょうか?
    短波とか変動あるシグナルはリアル表示が良いと思うのですが・・・・
    すいませんがお願いします。

  7. skynet さん

    ブログ拝見しました。早いですね。
    今バラしてしまっておりましてすぐ再現確認は出来ません。申し分けありません。日曜くらいに再度組んでみます。 帰着後まだ元気だったので確認しました…

    LCD の電源を AVR マイコンのIOポート経由で供給した理由は、電源OFFボタンを押した時に液晶モジュールの電源OFFをしたかったためです。(ラジオモジュールはPOWERDOWNコマンドで停止出来るので直接電源ライン接続です)
    で、液晶コントラストは電池の電圧が3Vから2.9Vになっただけで薄くなるのがわかるくらい変化します。プログラムではコントラスト設定をchar contrastVal[6] で6パターンでしのぎました。最初は一番コントラスト低い状態からのスタートのため、表示が見えない可能性が考えられます。

    シグナル表示ですが、loop処理の中で、AM/FM_TUNE_STATUS コマンドで最新の周波数などを都度表示させているところがあります。これはシーク動作させたときに最新の周波数を表示させ、シーク動作中っぽく表示させています。で、この部分で使っている AM/FM_TUNE_STATUSはRSSI(Received Signal Strength Indicator.)も帰り値にあります。ただし AM/FM_TUNE_FREQ もしくは AM/FM_SEEK_START の結果が保存されているだけです。(Returns the status of FM_TUNE_FREQ or FM_SEEK_START commands. とあり仕様)

    で、Si4735.cpp には実装していませんが、AM/FM_RSQ_STATUS というのがあり、Returns status information about the received signal quality. とあるので、これでRSSIを取得すれば最新の状態に更新出来るかも知れません。コマンドの実装は、updateAMTuneStatus を元に、コマンド 0x42 を 0x43 にして、帰り値の4バイト目だけ拾えばいいので確認は出来ると思います。これで駄目ならお手上げですが。

    液晶文字化けの症状も Blog から見えましたが、Si4735Radio.cpp の setup で LCD のリセットピンのポートをOFF/ONしているところの delay時間のばして改善するかですね。あとは F_CPU のdefineがうまくいっているかあたりでしょうか…

  8. skynet さん

    まず、シグナル表示の部分ですが、プログラムの修正で確認出来ました。先程のコメントの通りコマンド追加でいけます。 Si4735 ラジオモジュールの更新を行ないました。 にて、公開いたしました。

    次に液晶表示の部分ですが、テスタで測りますと私の場合は2.1Vと低いですね。I2Cのプルアップ抵抗も一緒にぶらさがっているので分圧されてるのかな。液晶の電源はトランジスタをスイッチ変りにして別途ON/OFF出来るようにするするかですね。これは、要検討です。

    以上よろしくお願いします。

  9. masahiro様
    お疲れの所 ソースまで作成して貰って有難うございました。
    signalがリアル表示するようになりました。
    後は自力でやってみたいと思います。
    後は seekすると弱い局はスキップするので感度を下げるか
    ボタンを押した時だけスキャンするようにしたいです。
    有難うございました。

  10. masahiroさま

    はじめまして。
    最近AVRを始めたばかりの超初心者ですが、DSPラジオ、I2C、AVRのキーで検索して、このサイトにたどり着きました。
    非常に興味深い記事でしたので、早速私も昨日大阪日本橋で、パーツをそろえてmasahiroさまのソースと回路図で、音を出すことができました。

    AVRの勉強を兼ねて、SKYNETさんが書き込んでいますように、私もSWを追加を試みたいと思っています。

    著作権等には、細心の注意を払いますので、私のブログで記事とさせていただきたくコメントさせていただきました。

    また、記事を書く際には、こちらが出典元であることを明示したいと思います。

    よろしくお願いします。

  11. PUP 様

    はじめまして、masahiro と申します。
    Si4735 の記事を見ていただきありがとうございます。
    出典の件ありがとうございます。元々は、丸ごとコピペするサイト対応と言いますか、そういうのがきっかけでして、 PUP さんにて開発されたコードはもちろん PUP 様の権利でございます。
    そういうことで、開発されたものを公開いただき趣味の輪が広がるほうが有意義と思います。
    以上よろしくお願いします。

  12. ありがとうございます。

    早速、記事にさせていただきました。

    今後ともよろしくお願いします。

  13. masahiroさま

    3BAND化にチャレンジしています。

    過去のコメントなどを参考にさせていただき、「SW」には切り替わるようにプログラムの追加はできましたが、AMがSWで指定した周波数をSCANしてしまい原因が解らずの状況となりました。
    難しいですね。

    今日の大阪は暑いですね、室温が、34度を超えてしまいました。
    ちょっと気分転換が必要なようです。

    では。

  14. PUP 様

    プログラミングお疲れ様です。データシート見ていただければわかりますが LW/MW/SW は Si4735 ラジオモジュールとしては AM モードとして一括りです。Si4735 初期化時(AMPowerOn処理)後に受信したい下限周波数、上限周波数、周波数ステップを改めてセットしないと駄目かもしれません。
    私が SW を実装しなかったのは、周波数直接打ち込み出来るようなテンキーパッドのようなものを持っていなかったので作らなかったというのが理由です。31m バンドや 25m バンドなど細分化した範囲とかでスキャンするだけとかならサーチだけでも辛抱出来そうですが…

    masahiro

  15. masahiroさま

    助言ありがとうございました。
    なんとか、無事思うように動作を始めました。
    原因は、switch(mode) {
    case FM:
    ・・・・・・
    の所で、SWのBANDの範囲指定を加えておりましたが、case AM:範囲とスキャンステップの後に、brake;を入れ忘れておりました。

    細かなところで数時間はまっておりました。

    コメントの周波数直接打ち込めるのも、良いですね~。
    まずは、BANDをいくつかに割ってSCANも目標でしたが、ローターリーエンコーダーかキーパットは実現させたいですね・・・。ただ、私の様な初心者にはちょっと敷居が高すぎますね。

コメントを残す

メールアドレスが公開されることはありません。