Модуль RRD_102v 2.0 FM радиоприёмника на ИМС RDA5807M отлично работает совместно с ARDUINO или любым микроконтроллером. К плате подключается антенна (или кусок проволоки длиной 20 см), звуковой сигнал через разделительные конденсаторы подается на наушники или усилитель. В данном варианте питание 3,3 В подается непосредственно с платы Arduino Nano.
Управление чипом цифровое, по I2C интерфейсу.
Характеристики FM-тюнера RDA5807m:
* Все в одном корпусе, практически не требуется внешних компонентов
* КМОП технология
* Максимальная полоса частот от 50 МГц до 115 МГц
* Настраиваемый шаг между каналами – 200 кГц, 100 кГц, 50 кГц, 25 кГц
* Поддерживает RDS/RBDS
* Высококачественный АЦП
* Синтезатор частот полностью встроен в микросхему
* Автоматическая регулировка усиления
* Цифровое адаптивное подавление шума
* Поддержка выхода звука как в моно, так и в стерео
* Индикатор уровня сигнала (Receive signal strength indicator — RSSI) и SNR
* Усилитель низких частот
* Регулировка звука и функция mute
* Цифровой интерфейс I2C
* Нагрузка на выходе звукового канала 32 Ом
* Встроенный LDO регулятор
* Корпус MSOP (10 выводов)
Электрические параметры FM тюнера RDA5807m:
* Напряжение питания — 3 вольта (от 1,8 до 3,6 вольт)
* Температура окружающей среды — от -20 до +75 градусов Цельсия
* Ток потребления в рабочем режиме — до 21 мА
* Ток потребления в спящем режиме – 5 мкА
* Коэффициент нелинейных искажений – 0,15 – 0,2 %
* Максимальная частота I2C – 400 кГц
Радиоприемник работает в частотном диапазоне от 87 до 108 МГц, управление приемником осуществляется при помощи трех кнопок «меню», «+» и «-» , а информация выводится на LCD1602 индикатор на базе контроллера HD44780.
В меню четыре раздела, первый раздел «Громкость», в нем можно регулировать громкость которая имеет 16 уровней, на экран выводится индикатор громкости, при не активности кнопок через 10 сек выводится информация о канале и RDS канала (RDS «Radio Data System» — радиовещательная система для передачи на ультракоротких волнах вместе со звуковым сигналом небольшого количества цифровой информации).
Второй раздел меню позволяет переключать каналы, которые предварительно были занесены в память при помощи третьего раздела меню — «автосканирование».
Раздел «автосканирование» позволяет отсканировать весь диапазон и автоматически выбрать каналы которые имеют достаточно большой уровень сигнала.
Последний четвертый раздел позволяет в ручном режиме изменить частоту канала, при этом если частота канала была изменена, то через 10 секунд (при не активности кнопок) произойдет сохранение частоты канала в энергонезависимую память.
Все частоты каналов (10 каналов) и уровень громкости сохраняются в энергонезависимой памяти через 60 секунд после не активности кнопок.
#include <Wire.h> #include <radio.h> #include <RDA5807M.h> #include <LiquidCrystal.h> #include <EEPROM.h>//#include <EEPROMex.h> #include <RDSParser.h> LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000}; #define FIX_BAND RADIO_BAND_FM RDA5807M radio; RADIO_INFO info; RDSParser rds; char s[12]; int menu,k,f_scan[10],f,i1=8700; byte vol,bass,z,w,start,start1,t; unsigned long time; void DisplayServiceName(char *name){lcd.setCursor(0,1);lcd.print(" ");lcd.print(name);lcd.print(" ");} void RDS_process(uint16_t block1, uint16_t block2, uint16_t block3, uint16_t block4) {rds.processData(block1, block2, block3, block4);} void setup() { vol=EEPROM.read(0); for(int c=0;c<10;c++){f_scan[c]=EEPROM.read(10+c)*100+EEPROM.read(100+c);} k=EEPROM.read(3); f=EEPROM.read(1)*100+EEPROM.read(2);start=0; lcd.begin(16, 2); Serial.begin(9600); radio.init(); radio.debugEnable(); pinMode(12,INPUT);// меню pinMode(11,INPUT);// плюс pinMode(10,INPUT);// минус lcd.createChar(0,a1); radio.setBandFrequency(FIX_BAND, f); radio.setVolume(vol); radio.setMono(false); radio.setMute(false); radio.attachReceiveRDS(RDS_process); rds.attachServicenNameCallback(DisplayServiceName); delay(400); } void loop() { radio.formatFrequency(s, sizeof(s)); if(start==0){radio.setBandFrequency(FIX_BAND, f);delay(400);radio.getRadioInfo(&info);start=1;} if(digitalRead(12)==HIGH){menu++;lcd.clear();time=millis();radio.getRadioInfo(&info);start=0;w=1;delay(300);if(menu>3){menu=0;}} if(menu==0){// ГРОМКОСТЬ if(digitalRead(11)==HIGH){vol++;if(vol>15){vol=15;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();} if(digitalRead(10)==HIGH){vol--;if(vol>16){vol=0;}w=1;time=millis();radio.setVolume(vol);delay(200);lcd.clear();} lcd.setCursor(0,0);lcd.print(" ");lcd.print(s); lcd.setCursor(0,1); if(millis()-time<5000){for(z=0;z<=vol;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}} if(millis()-time>5000 and millis()-time<10000){ lcd.print(info.tuned ? " TUNED" : " -----"); lcd.print(info.stereo ? " STEREO " : " MONO ");} if(millis()-time>10000){radio.checkRDS();} // RDS } if(menu==1){// КАНАЛЫ if(start1==0){f=f_scan[k];start=0;start1=1;} if(digitalRead(11)==HIGH){k++;if(k>9){k=9;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();} if(digitalRead(10)==HIGH){k--;if(k<0){k=0;}delay(200);f=f_scan[k];w=1;time=millis();start=0;lcd.clear();} lcd.setCursor(0,0);lcd.print("K");lcd.print(k); if(f_scan[k]!=0){lcd.print(" ");lcd.print((float)f_scan[k]/100);lcd.print(" MHz ");}else{lcd.print(" N/A ");} radio.getRadioInfo(&info); lcd.setCursor(0,1);lcd.print(info.tuned ? "TUNED" : "-----"); lcd.print(" SIGNAL ");lcd.print(info.rssi); } if(menu==2){// АВТО ПОИСК КАНАЛОВ lcd.setCursor(0,0);lcd.print("AUTOSCAN"); if(digitalRead(11)==HIGH || digitalRead(10)==HIGH){ for(int i=0;i<10;i++){ for(i1;i1<=10800;i1=i1+10){ radio.setBandFrequency(FIX_BAND, i1);delay(300); radio.getRadioInfo(&info);delay(500); if(info.tuned==1 and info.rssi>26){f_scan[i]=i1;i1=f_scan[i]+10;if(i1>=10800){f_scan[i]=0;}break;} lcd.setCursor(9,0); lcd.print((float)i1/100); } lcd.setCursor(0,1);lcd.print(i);lcd.print(" ");lcd.print((float)f_scan[i]/100);lcd.print(" MHz "); }delay(1000);time=millis();i1=8700;eeprom();k=0;start1=0;menu=1;}} if(menu==3){// ПОДСТРОЙКА ЧАСТОТЫ КАНАЛА if(digitalRead(11)==HIGH){f=f+10;t=1;if(f<8700){f=8700;}start=0;time=millis();delay(200);lcd.clear();} if(digitalRead(10)==HIGH){f=f-10;t=1;if(f>10800){f=10800;}start=0;time=millis();delay(200);lcd.clear();} lcd.setCursor(0,0);lcd.print("< ");lcd.print((float)f/100);lcd.print(" MHz >"); radio.getRadioInfo(&info); lcd.setCursor(0,1);lcd.print(info.tuned ? "TUNED" : "-----"); lcd.print(" SIGNAL ");lcd.print(info.rssi); if(millis()-time>10000 and t==1){f_scan[k]=f;t=0;EEPROM.update(10+k,f_scan[k]/100);EEPROM.update(100+k,f_scan[k]-(f_scan[k]/100)*100); if(millis()-time<11000){lcd.setCursor(0,1);lcd.print(" SAVE ");delay(1000);}} } if(millis()-time>60000 && w==1){EEPROM.update(0,vol);EEPROM.update(3,k);EEPROM.update(1,f_scan[k]/100);EEPROM.update(2,f_scan[k]-(f_scan[k]/100)*100);w=0;} if(millis()-time>10000 and menu==1){menu=0;time=millis();lcd.clear();} } // LOOP void eeprom(){for(int b=0;b<10;b++){EEPROM.update(10+b,f_scan[b]/100);EEPROM.update(100+b,f_scan[b]-(f_scan[b]/100)*100);}}
Библиотека Radio — https://github.com/mathertel/Radio
Материалы присланные пользователями сайта
Автор — Daniel VE7LCG
Дополнительные материалы:
- При проблемах с запуском уст-ва рекомендуется очистка памяти EEPROM — http://forum.rcl-radio.ru/viewtopic.php?id=77
After several days searching for a sketch finaly got it! Working fine. I’ve made same changes for my personal taste and if possible like to send to you in case you want to share. 73’s
You can send me the material for publication on this page to liman324@yandex.ru
доброго
прошу помочь, скачал прошивку с этой страницы, скачал архив радио
пытаюсь скомпилировать скетчь, выдает ошибку в строке
rds.attachServicenNameCallback(DisplayServiceName);
C:\Users\мичман\Desktop\радио\RDA5807wLCD1602mod.ino_\RDA5807wLCD1602mod\RDA5807wLCD1602mod.ino: In function ‘void setup()’:
RDA5807wLCD1602mod:39:7: error: ‘class RDSParser’ has no member named ‘attachServicenNameCallback’; did you mean ‘attachServiceNameCallback’?
exit status 1
‘class RDSParser’ has no member named ‘attachServicenNameCallback’; did you mean ‘attachServiceNameCallback’?
что сделать чтобы заработало?
Установите более старые версии библиотек:
http://rcl-radio.ru/wp-content/uploads/2024/03/radio.zip
http://rcl-radio.ru/wp-content/uploads/2024/03/RDA5807-master.zip
спасибо, скачал, закинул
теперь пишет вот такое
In file included from C:\Users\мичман\Desktop\радио\RDA5807wLCD1602mod.ino_\RDA5807wLCD1602mod\RDA5807wLCD1602mod.ino:2:0:
C:\Users\������\Documents\Arduino\libraries\radio/radio.h:116:1: warning: ‘typedef’ was ignored in this declaration
typedef struct RADIO_INFO {
^~~~~~~
C:\Users\������\Documents\Arduino\libraries\radio/radio.h:128:1: warning: ‘typedef’ was ignored in this declaration
typedef struct AUDIO_INFO {
^~~~~~~
In file included from C:\Users\������\Documents\Arduino\libraries\radio\RDA5807M.cpp:21:0:
C:\Users\������\Documents\Arduino\libraries\radio/radio.h:116:1: warning: ‘typedef’ was ignored in this declaration
typedef struct RADIO_INFO {
^~~~~~~
C:\Users\������\Documents\Arduino\libraries\radio/radio.h:128:1: warning: ‘typedef’ was ignored in this declaration
typedef struct AUDIO_INFO {
^~~~~~~
это не все, там раза в четыре больше подобного.
У меня компиляция проходит без ошибок. Использую Arduino IDE 1.8.15
у меня 1.8.19 на виндовс 7
в конце пишет что компиляция завершина
и
^~~~~~~
Скетч использует 14206 байт (46%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1179 байт (57%) динамической памяти, оставляя 869 байт для локальных переменных. Максимум: 2048 байт.
но смущает то что написано красным
Красным могут быть предупреждения, а не ошибки.
щас переустановлю ардуину сс правда у меня только таже версия что и стояла
нет, тоже самое.
думаеш можно попробовать прошить?
Можно прошивать, если есть такая возможность, контроллеру все равно что в него прошивают, риска ни какого нет для контроллера.
хорошо попробую, спасибо