FMラジオ13 (Si4703)

Si4703(Switch Science / SFE-BOB-11083) によるFMラジオ

更新:2013/12/10, 2014/01/05, 2014/01/25, 2014/03/04, 2014/03/09, 2014/03/16, 2014/03/23, 2014/03/30, 2014/12/14


スイッチサイエンスのFMラジオボード(品番:SFE-BOB-11083 / 使用チップ:Silicon Laboratories Si4703)によるFMラジオ。
  • Si4703のなるべく多くの機能を実際に使ってみる
  • PICをコントロールプロセッサとする

作例

Si4703による作例としてはオーディオクラフト工房さんのこちらのページがあります。この作例は
  • Si4703チップを直接(自分で半田付けして)使っていて、32.768kHzのクロックを外部から与えている。これに対してスイッチサイエンスのボードでは32.768kHzのクリスタルがオンボードでSi4703に接続されている。この違いは初期処理の違いとなる。
  • コントローラにNECの78マイコンを使っている。
ですが十分に参考になりました。

テスト回路-1

手っ取り早くSi4703の動作を確認したい、ということで左のようなテスト回路を考えた。
  • PICは手持ちのPIC16F88
  • 電源はPICKitから供給する。ここで少し問題が
    • Si4703の電源電圧の範囲は2.7V~5.5Vである。
    • ところがFMラジオボードの電源電圧範囲は2.7V~3.3Vとなっている(開発元作成の回路図に記載)。
    • この違いの理由は不明。 周辺回路の部品(クリスタル?)のせい?
    • PIC16F88の電源範囲は2.0V~5.5Vなので、FMラジオボードも3Vで動作させればよいだけかもしれない。
    • ところがPICKit出力の電圧が3.3Vではプログラムの書き込みがエラーになる。書き込みには少なくとも5V程度の電圧が必要である。 (ブレッドボード上の開発ならばプログラム書きこみのときだけFMラジオボードを外すこともできるが)
    • 5V動作のLCDを使う予定なので、電圧を5Vで統一したいという事情もある。

テストプログラム-1

  • プログラムの開発環境は MPLAB X IDE v1.95 + XC8 v1.21
  • MPLAB X IDEがなぜかPICKit 2を認識しないのでPICへのプログラムの書き込みには PICKit 2 programmer v2.10 を使います。
  • この時点でのテストプログラムはこちら(MPLABプロジェクト丸ごと)
  • このプログラムは受信対象局を1局だけハードコードしている。
  • プログラム途中のwaitを適当に決めたので受信が始まるまでに10秒ぐらいかかる、全く荒削りな状態。
ここまで2013/12/10

ボード破損

Si4703ボードが異常加熱し焦げたにおいを発し始めた...。
  • 想定原因① Si4703ボードの回路図に記載されている電源電圧の範囲(2.7V~3.3V)を超えて(しかしSi4703チップの制限内の電圧)使っていたから? 
  • 想定原因② PICKit2が発するVPP電圧(+12Vになることもある)?
②の方が可能性が高いか。 PICを使った過去の製作では何も問題なかったのでVPP電圧の問題はしばらく忘れてました...。
結局スイッチサイエンスから同じ製品を購入しました。



テスト回路-2

  • Si4703とPICの電源を分離。(Si4703とPICとは信号線でつながっているが、プログラム書き込み時にPICから想定外の電圧が出てないことは念のため確認しました)
  • PIC16F886に交換。(16F88では今後I/O不足のため。および、プルアップするしないをポートごとに設定できるものにしたかったため。)
  • 2-Wireインターフェースも試すためSi4703とつなぐPICのピンを変更。2-Wireにはプルアップ抵抗が必要だがオンボードで付いている。

テストプログラム-2

  • インターフェース方式(3-Wire/2-Wire)の切替は #define による。
  • 2-Wireの制御にはPICのMSSPを使用。PICが I2C Master となる。
  • この時点でのテストプログラムはこちら(MPLABプロジェクト丸ごと。コンパイラをHI-TECH PICC v9.83に変更)

2-WireインターフェースによるSi4703のコントロールがわかりにくいが
  • 要するにレジスタへの書き込みにおいては02Hから始まって目的のレジスタまでのすべての値を毎回送信せよ、ということのようだ。
  • 本テストPGでまず最初に行う書き込みは07HレジスタのXOSCENビットの設定だが、この場合も02Hの上位バイト、下位バイト、03Hの上位バイト、下位バイト、...の具合に07Hまで送信している。
  • したがってプログラム中に保持しているレジスタ値と、実際のレジスタ値とは同期が取れてないといけないことになる。
  • 一方、レジスタの読込の場合は0AHから始まって 0BH, ..., 0FH, 00H, 01H,... の順に読み込まなければならない。

ここまで2014/01/05

LCD接続

ケースへの実装、オーディオアンプの検討に進む段階にようやく来た。


ここまで2014/01/25

メインボードにはSi4703ボードとPIC, LCDをのせた。両面ユニバーサルボードを使い、LCDを裏に実装している。

ここまで2014/03/04

タカチのSY-150Bにメインボード、電源部、スピーカ、スイッチ部などを実装したが、オーディオアンプの検討がまだ。
ブレッドボードでTA7368のテストを行う。

ここまで2014/03/09

アンプ部をユニバーサルボードに実装してテスト

ここまで2014/03/16

アンプ部をケースに組み込む。

残るはソフトウエアの完成だけ。
SEEKをテストしていたら、79.5MHzで想定外の局が受信できている。近隣のコミュニティ局かと思い「FM 79.5」で検索すると、NACK5?、radio-iの跡地?。
どうやら「InterFM NAGOYA」の試験放送らしい。(いきなり聞こえてきたのが B.B.キングだった。radio-iが消滅して以降、NHKしか聴いていない状態が続いたが、この新局には期待してよいか?。)

ここまで2014/03/23

最終的な回路とプログラム

  • プログラムの開発環境は MPLAB X IDE v1.95 + XC8 v1.21
  • プログラムのソースはこちら(MPLABプロジェクト丸ごと)
  • Si4703の制御は 2-Wireインターフェースを使う
  • いままでのプログラムはTUNEやSEEKの完了検出に割り込み方式(GPIO2が0になるのを検出)を使ってきたが、製作の途中からなぜかその検出ができなくなった。ポーリング方式に切り替えている。

完成

本業の仕事が忙しかったこともあり製作に4ヶ月もかかったが、満足できるラジオが出来ました。


トップページに戻る