| Ваш IP: 3.239.7.207 | Online(23) - гости: 11, боты: 12 | Загрузка сервера: 2.42 ::::::::::::

Радиомодуль RRD_102v 2.0 на чипе RDA5807M (Arduino)

Модуль 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


Материалы присланные пользователями сайта 

RDA5807wLCD1602mod.ino

Автор — Daniel VE7LCG


Дополнительные материалы:

Комментарии

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Бестрансформаторный источник питания 12 В / 15 мА

    Бестрансформаторный источник питания 12 В / 15 мА

    Некоторые схемы которые имеют небольшой ток потребления, поэтому для их работы можно использовать простые бестрансформаторные источники питания. В подобных источниках питания целесообразно использовать диодный мост, для увеличения величины выходного тока и меньшей пульсации выходного напряжения, что позволяет использовать конденсаторный фильтр меньшей емкости. Поэтому в предложенной схеме VD3 VD4 используются как …Подробнее...
  • Секундомер на ATtiny2313 (Arduino IDE)

    Секундомер на ATtiny2313 (Arduino IDE)

    На базе ATtiny2313 можно собрать простой секундомер. Информация выводится на дисплей LCD1602. Для управления секундомером используются три кнопки — СТАРТ, СТОП, СБРОС. Минимальный шаг секундомера 0,1 секунда, максимальное время измерения 24 часа. Кнопки СТОП и СТАРТ работают через прерывания IN0 и INT1 (пример — https://rcl-radio.ru/?p=94273), время тактируется при помощи таймера …Подробнее...
  • Часы-будильник на PIC16F877A

    Часы-будильник на PIC16F877A

    На рисунке показана схема часов с будильником. Часы отображают часы, минуты и секунды, будильник только часы и минуты. Дополнительной опцией часов является термометр, датчик температуры LM35 подключен к выводу 9 (AN6) микроконтроллера. После подачи питания на микроконтроллер необходимо установить правильное время, сделать это можно при помощи кнопки «Установка времени», при …Подробнее...
  • Автоматическая регулировка усиления

    Автоматическая регулировка усиления

    Автоматическая регулировка усиления  (АРУ) регулирует выходной сигнал в определенных пределах, при разном уровне входного сигнала.В результате устраняются различия громкости, которые могут раздражать, при смене каналов радиоприемника, телевизора… Полевой транзистор VT1 используется как переменное сопротивление. Это значение может  от бесконечности до 150Ω, тем самым регулируя усиление ОУ на TL072.Подробнее...
  • Регулируемый блок питания с цифровым управлением

    Схема регулируемого блока питания м цифровым управлением состоит из регулятора положительного напряжен7ия на KM317, КПОМ декадного счетчика CD4017, таймера NE555 и регулятора отрицательного напряжения на LM7912. Напряжение сети понижается трансформатором до напряжения +/-12В при токе 1А во вторичной обмотке, далее оно выпрямляется. С1-С5 емкостной фильтр постоянного напряжения. Светодиод LED1 сигнализирует …Подробнее...