これは、マイコン等で制御するDSPラジオなのですが・・・・
マイコンはarduinoを使います。ライブラリにRadioというものがあり、その中にRDA5807もサポートされているので簡単に動かせそうです。
その中のexampleフォルダから
ただし、実は
最初に使ったこのチップの載った1枚めは、どうやら不良品!?だったようです。感度が1.5μVのはずなのに、地元のコミュニティFMが雑音まみれでうまく受信できません。
TEA5767では若干ノイズがのるもののきちんと受信はできるのに・・・・
(実はTEA5767とRDA5807ボードはピンコンパチでしかもRDA5807にはTEA5767と同じコードで動くモードがあって差し替えが可能なのです)
で、諦めかけたのですが・・・・なにせ同じものが5枚もあるのでだめもとで違うボードを試してみたら・・・・
ほぉ、感度良い。TEA5767よりもいいんじゃないの!!
中華モノによくある初期不良って言うやつにあたったのかも。。。。
実験的に
ブレッドボードに組んでみました。
回路図は面倒なので載せませんが・・・・
arduinoは3.3V品を使ってみました。
なのでI2S接続はレベル変換なしに直につなげられます。
出力はステレオ出力なので300円ダイソースピーカにつなげました。
楽で良いですね。
スケッチ。。。
注意点がひとつ。。
初期化のところでdelay(3000);とかなり大きなウエイトをかけています。
これがないと、最初に電源ONしたときだけ、RDA5807がこけます^^;
うまくsetFrequancyされない感じでノイズだけになってしまうことがありました。
注意点はそのくらいですかね
次回起動時のためにEEPROMには周波数(NO)とボリュームを保存することにしました。
// RDA5807Radio#include <Arduino.h>#include <Wire.h>#include <radio.h>#include <RDA5807M.h>#include <EEPROM.h>#define FIX_BAND RADIO_BAND_FMWORLD //76-108Mhz対応uint16_t freq[]={7620,7710,8180,8530,9080}; //周波数プリセット7620=76.2Mhzuint8_t freq_max_num;uint8_t freq_num=0;uint8_t volume=15;uint32_t timepassed=millis();bool ROMsaved=1;bool ROMwrite=0;bool setmute_f=0;RDA5807M radio; // Create an instance of Class for RDA5807M Chipvoid setup(){pinMode(4,INPUT_PULLUP); //freq changepinMode(5,INPUT_PULLUP); //set mutepinMode(6,INPUT_PULLUP); //volume uppinMode(7,INPUT_PULLUP); //volume downWire.begin();Serial.begin(9600);// Initialize the Radioradio.init();delay(3000); //RDA5807がコマンドを受けられるように準備のための遅延radio.debugEnable();// load previus datafreq_max_num=(sizeof(freq)/sizeof(uint16_t))-1;if (ROMsaved){freq_num=EEPROM.read(0);volume=EEPROM.read(1);}radio.setVolume(volume);radio.setMono(false);radio.setMute(setmute_f);radio.setBandFrequency(FIX_BAND,freq[freq_num]);}void loop(){if (digitalRead(4) == LOW) {freq_num++;if (freq_num > freq_max_num) freq_num=0;radio.setFrequency(freq[freq_num]);timepassed=millis();ROMwrite=1;delay(500);}if (digitalRead(5) == LOW) {setmute_f=1^setmute_f;radio.setMute(setmute_f);delay(200);}if (digitalRead(6) == LOW) {if (volume<15){volume++;radio.setVolume(volume);timepassed=millis();ROMwrite=1;delay(200);}}if (digitalRead(7) == LOW) {if (volume>0){volume--;radio.setVolume(volume);timepassed=millis();ROMwrite=1;delay(200);}}//if freq,volume change EEPROM writeif ((ROMwrite)&(timepassed+5000 < millis())) {ROMwrite=0;EEPROM.write(0,freq_num);EEPROM.write(1,volume);Serial.println(freq_num);Serial.println(volume);Serial.println(" saved");}}
いやぁ、なんのことはないのですが、プログラムがちゃんと意図したとおりに動いてくれると楽しいものです。
人間世界では自分の意図したとおりになることは少ないので余計に(笑)
参考サイト
- GitHub - mathertel/Radio: An Arduino library to control FM radio chips like SI4703, SI4705, RDA5807M, TEA5767.
https://github.com/mathertel/Radio - Arduino Radio Library - The Library
http://www.mathertel.de/Arduino/RadioLibrary.aspx - FMステレオラジオ II
http://xyama.sakura.ne.jp/hp/FM_StereoRadioII.html - ワイドFM DSPラジオ (RDA5807M)を作ってみた – 店舗、生産者を応援
https://www.himeport.co.jp/private_blog/%E3%83%AF%E3%82%A4%E3%83%89fm%E3%80%80dsp%E3%83%A9%E3%82%B8%E3%82%AA-%EF%BC%88rda5807m%EF%BC%89%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/?utm_source=pocket_mylist - aitendo の DSP ラジオの比較表 - Y-Lab. Electronics
http://eleken.y-lab.org/report/other/dsp_radio.shtml?utm_source=pocket_mylist - 【格安】FMラジオモジュール RDA5807Mを試してみる – 某氏の猫空
https://blog2.k05.biz/2020/02/rda5807m-fm-radio.html?utm_source=pocket_mylist - ArduinoとRDA5807でFMラジオを聴く - Qiita
https://qiita.com/nanase/items/b9efc547d395d2d7cbc0?utm_source=pocket_mylist
0 件のコメント:
コメントを投稿