更新: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ヶ月もかかったが、満足できるラジオが出来ました。
|