
PSoC3 + Si4735プログラム選局AM/FMラジオ
投稿日 2014/06/20
Si4735を使用したプログラム選局AM/FMラジオを作ってみました。
私はNHKラジオのファンだったのですが、最近はNHK第一にずっと留まっていることができなくなりました。
あらゆる年齢層にウケるように番組構成を考えているのでしょうか?
最近のNHKは面白くない番組が増えました。
そこで、最近はいろいろな放送を聞いているのですが、ご当地FMなど、なかなか面白い放送局や番組があるのに気づきました。
いろいろ聞いてみると、だいたい聞きたい番組は決まってきますので、それでは、ラジオがその時間帯になったら自動的にその番組を流してくれたら聞き忘れることもありません。

写真1: PSoC3 + Si4735 プログラム選局AM/FMラジオ
今回は先日作ったPSoC3 + Si4735 AM/FMラジオにRTC(リアルタイム・クロック)を増設して、時間管理ができるようにしてみました。
ソース・コードに埋め込んだプログラム番組表(config.hの中)を元に、時間が来れば自動的に選局します。(変更するときはソースコードの変更と再コンパイルが必要ですが、簡単に済ませました。)
つけっ放しを想定しているので、特に聞きたい放送が無い時間帯は、ホーム放送局に切り替わるようにしました。
プログラム選局AM/FMラジオの仕様
○曜日と開始時分、終了時分、放送局(AM/FM)周波数をプログラム(自動選局)できる
○時間設定は分単位でできる
○プログラムされていない時間帯はホーム放送局に切り替わる
○マニュアル選局モードと自動選局モードの切り替えができる
マニュアル選局モードでは好きな放送局が聴ける
自動選局モードにするとプログラム番組表に従った選局をする
○電源投入時はマニュアル選局モードで前に聞いていた放送局で始まる
○LCDに放送局情報または現在時刻を表示する
○時計(年月日,時分)の設定ができる
○音量調整ができる
○マニュアル選局モードの放送局、音量は電源を切っても記憶する
PSoCのコンポーネント
今回は参考記事1にRTCコンポーネント、デジタルINPUTピン(GREEN_BTNとWHITE_BTN)を追加しただけです。
ボタンとツマミの役割
●通常モード(時計設定モードでない)場合
REDボタン: マニュアル選局モードでAM/FMを切り替える
BLUEボタン:マニュアル選局モードで放送局を変える(DOWN)
YELLOWボタン:マニュアル選局モードで放送局を変える(UP)
GREENボタン:マニュアル選局モードと自動選局モードを切り替える
WHITEボタン:時刻表示する/しないを切り替える
WHITEボタンを押しながら電源を入れる、またはリセットボタンを押して3秒間くらいそのままにしていると、時計設定モードに入る
●時計設定モードの場合
REDボタン: 設定項目を変更する
BLUEボタン:値を-1する
YELLOWボタン:値を+1する
GREENボタン:秒を0にして通常モードになる
ツマミ(ロータリーエンコーダ):音量を変える
シールバッテリ簡易充電回路

写真2:LCD表示情報の例
プログラム選局について
プログラム選局のスケジュールは、config.hの中にあるプログラム番組表で設定します。
ソース・コードの一部ですので変更したら再コンパイルとPSoC3への書き込みが必要です。
プログラム番組表には曜日、開始時、開始分、終了時、終了分、放送局、番組名などにコメントを設定します。
上にあるものが優先になります。
曜日はMON、TUE、WED、THU、FRI、SAT、SUNで指定します。
月曜から金曜、つまりウイークデーはWKD、土日はWEDで指定します。
すべての曜日(毎日)はDAYで指定します。
IGNをしていすると無視します。
放送局はconfig.hの中にある放送局識別子で指定します。
プログラムは開始時分が一致(==)したことしか見ていませんので、番組が始まっているときに、プログラム選局モードにしても無視されます。
プログラム選局表は20個分用意してありますが、必要によって増やすことができます。
なお、放送局とその周波数はconfig.hの中で変更することができます。
AM放送局とFM放送局の設定例(config.h) (関東地方の場合の例です)
//AM放送局リスト
struct AM_Radio_Table AM_Radio_Stations[] = {
//AM放送局識別子, 周波数
{"NHK 1 ", 594},
{"NHK 2 ", 693},
{"AFN TOKYO ", 810},
{"TBS ", 954},
{"BUNKA ", 1134},
{"NIPPON ", 1242}
};
struct FM_Radio_Table FM_Radio_Stations[] = {
//FM放送局識別子, 周波数
{"Inter FM ", 76.1},
{"OPEN UNIV. ", 78.8},
{"NACK 5 ", 79.5},
{"TOKYO FM ", 80.0},
{"J-WAVE ", 81.3},
{"NHK FM GUNMA ", 81.6},
{"NHK FM TOKYO ", 82.5},
{"YOKOHAMA FM ", 84.7},
{"GUNMA FM ", 86.3}
};
ホームステーションは以下のように設定します。
//ホームステーション指定
uint8 home_station = GUNMA_FM;
プログラム選局標の例:
//プログラム選局リスト
struct Program_Table Program_Station_Table[] = {
//曜日、開始時間、開始分、終了時間、終了分、放送局、番組名
//SUN:日曜 MON:月曜 TUE:火曜 WED:水曜 THU:木曜 FRI:金曜 SAT:土曜
//DAY:毎日 WKD:月から金曜 WEN:土日 ING:無視
//NHK FMベストクラシック
{WKD, 19, 30, 21, 10, NHK_FM_GUNMA, "BEST CLASSIC MON"},
//私も一言夕方ニュース
{WKD, 18, 0, 18, 50, NHK1, "HITOKOTO "},
//天気予報、ニュース
{WKD, 19, 0, 19, 44, NHK1, "TENKI,NEWS 19:00"},
{DAY, 20, 55, 21, 5, NHK1, "TENKI,NEWS 20:55"},
//新日曜名作座
{SUN, 19, 20, 19, 50, NHK1, "MEISAKUZA "},
//ラジオ深夜便
{DAY, 23, 10, 5, 0, NHK1, "SHINYABIN "},
//ワンポイント英会話
{WKD, 15, 10, 15, 15, NHK2, "ONEPOINT EIKAIWA"},
//カルチャーラジオ
{SUN, 20, 0, 21, 0, NHK2, "CULTURE RADIO "},
{DAY, 20, 30, 21, 0, NHK2, "CULTURE RADIO "},
//文化講演会
{SUN, 21, 0, 22, 0, NHK2, "BUNKA KOUENKAI "},
//ミュージックプラザ
{WKD, 16, 0, 17, 20, NHK_FM_GUNMA, "MUSIC PLAZA "},
//未設定
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "},
{IGN, 0, 0, 0, 0, NHK1, " "}
};
ソース・コード
以下のファイルで構成されています。
main.h
config.h
I2C_LCD.h
Si4735.h
main.c
ソース・コードはmain.cに他のコード(xxxx.h)をインクルードする形式をとっています。
今回はソースが大きくなったので専用サイトにアーカイブしています。
ソース・コード : JF1VRR Archives
放送局の設定やプログラム番組リストの変更はconfig.hで行います。
開発環境: PSoC Creater 3.0
参考記事1: PSoC3 + Si4735でデジタルAM/FMラジオ
(JF1VRR)