| Ваш IP: 3.237.71.23 | Online(19) - гости: 11, боты: 8 | Загрузка сервера: 0.07 ::::::::::::

Радио на TEA5767 + PT2257 (Arduino)

Используя готовый радио модуль на ИМС TEA5767 и электронный регулятор громкости на  ИМС PT2257 на базе Arduino Nano можно сделать простое радио, но функционально FM-радио. Индикаторы уровня громкости и уровня сигнала, частота выбранного канала выводится на дисплей LCD1602 на базе контроллера HD44780.

Управление FM — радио  осуществляется при помощи 4-х кнопок:

  • Канал +
  • Канал —
  • Громкость +
  • Громкость —

Технические параметры радио модуля TEA5767 (описание):

  • Напряжение питания от 2,5 до  5 В
  • Потребляемый ток при Uпит = 5 В 12,8 мА
  • Чувствительность 2 мкВ
  • Отношение сигнал/шум  54 дБ
  • Разделение между стереоканалами 24 дБ
  • Коэффициент гармоник 0,4 %
  • Диапазон принимаемых частот от 76 МГц до 108 МГц
  • Шины управления: I2C или 3-х проводная
  • Функция автоматической настройки на принимаемые радиостанции
  • Автоматическое стереодекодирование принятого сигнала

Основные характеристики регулятора громкости на ИМС PT2257 (описание):

  • Напряжение питания от 3 до 9 В
  • Регулировка громкости от -79 до 0 дБ
  • Раздельная для каждого канала регулировка громкости
  • Режим MUTE
  • КНИ при выходном напряжении 200 мВ не превышает 0,003% при входном напряжении 2 В КНИ не более 0,07%

Основные характеристики усилителя PAM8403 (описание):

  • Напряжение питания: 2,5…5,5 В
  • Ток потребления при отсутствии сигнала: 10 мА
  • Выходная мощность при нагрузке 8 Ом: 1,5 Вт x2 канала
  • Выходная мощность при нагрузке 4 Ом: 3,0 Вт x2 канала
  • Разделение каналов: 60 дБ и более (при мощности 1 Вт и нагрузке 4 Ом)

FM — радио имеет следующие функциональные возможности:

  • Регулировка громкости
  • MUTE
  • Переключение заранее настроенных каналов (10 каналов)
  • Ручной поиск станции с сохранением частоты  канала
  • Сохранение уровня громкости и всех частот каналов в энергонезависимой памяти

Управление FM — радио достаточно простое, кнопки регулировки громкости помимо прямого назначения участвуют в режиме ручного сканирования частоты и активируют режим MUTE. Режим MUTE активируется одновременным нажатием кнопок громкости, при нажатии на любую кнопку  регулировки громкости режим MUTE отключается.

Кнопки переключения каналов позволяют переключать заранее настроенные каналы от 0 до 9. Для настройки каналов одновременно нажмите кнопки переключения каналов, при этом произойдет сброс всех частот каналов, далее нажимая + или — кнопки каналов настройте первый канал и нажмите + громкости для сохранения частоты канала, аналогично настраивают следующий канал.

При настройке каналов следует учитывать следующие нюансы: частота каждого следующего канала должна быть больше предыдущего канала (невозможно установить частоту следующего канала меньше предыдущего), при нажатии кнопки «минус громкость» происходит выход из настроек частоты каналов.

Библиотеки

PT2257.zip

TEA5767.zip

#include <PT2257.h>
#include <TEA5767.h>
#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal.h>
  PT2257 rt;
  TEA5767 Radio;
   LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
   byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
   byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
   byte b1[8]={0b00000,0b00000,0b11011,0b11011,0b11011,0b11011,0b00000,0b00000};
   byte b2[8]={0b00000,0b00000,0b11000,0b11000,0b11000,0b11000,0b00000,0b00000};
 
  float f_new=104.4,f;
  int kanal[10];
  unsigned char buf[5];unsigned long time,t1;
  int stereo,signal_level,stat,vol,volume,vol_d,z,w,signal,scan,x,w1,sbros,i;
 
void setup(){
     Wire.begin();Serial.begin(9600);
     vol = EEPROM.read(0);volume=vol;
     x = EEPROM.read(100);
     kanal[0]=EEPROM.read(1)*256+EEPROM.read(2);
     kanal[1]=EEPROM.read(3)*256+EEPROM.read(4);
     kanal[2]=EEPROM.read(5)*256+EEPROM.read(6);
     kanal[3]=EEPROM.read(7)*256+EEPROM.read(8);
     kanal[4]=EEPROM.read(9)*256+EEPROM.read(10);
     kanal[5]=EEPROM.read(11)*256+EEPROM.read(12);
     kanal[6]=EEPROM.read(13)*256+EEPROM.read(14);
     kanal[7]=EEPROM.read(15)*256+EEPROM.read(16);
     kanal[8]=EEPROM.read(17)*256+EEPROM.read(18);
     kanal[9]=EEPROM.read(19)*256+EEPROM.read(20);
     f_new=(float)kanal[x]/10;
     pinMode(12,INPUT);// минус гром
     pinMode(11,INPUT);// плюс гром
     pinMode(10,INPUT);// минус F
     pinMode(9,INPUT);// плюс F
     lcd.begin(16, 2);lcd.createChar(0,a1); lcd.createChar(1,a2);lcd.createChar(2,b1); lcd.createChar(3,b2);   
     Radio.init();Radio.set_frequency(f_new); 
     audio();
}
 
void loop(){
    stat = Radio.read_status(buf);
    stereo = Radio.stereo(buf);
    signal_level = Radio.signal_level(buf);
 
 
    if(volume>0){lcd.setCursor(1,0);lcd.print("K");lcd.print(x);
  lcd.setCursor(5,0);lcd.print(f_new);lcd.setCursor(12,0);lcd.print("MHz");}
 
    if(w==0&&volume>0||scan==1){
    lcd.setCursor(0,1);
    if(stereo==1){lcd.print("STEREO");}else{lcd.print(" MONO ");}
 
    if(signal_level>=0){for(z=0;z<=signal_level-8;z++){lcd.setCursor(z+8,1);lcd.write((uint8_t)2);}}
    if((signal_level)%2==0){lcd.setCursor(z+8,1);lcd.write((uint8_t)3);}
    //delay(50);lcd.clear();
    }
 //////////////// volume /////////////////////////////////
    if(digitalRead(11)==HIGH&&digitalRead(12)==LOW&&scan==0){vol++;if(vol>79){vol=79;}volume=vol;audio();cl();times();w1=1;}
    if(digitalRead(12)==HIGH&&digitalRead(11)==LOW&&scan==0){vol--;if(vol<0){vol=0;}volume=vol;audio();cl();times();w1=1;}
   if(w==1&&volume>0&&scan==0){
    lcd.setCursor(0,1);
    vol_d=vol-48;
    if(vol_d>=0){for(z=0;z<=vol_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
    if((vol_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
   }
    if(digitalRead(11)==HIGH&&digitalRead(12)==HIGH){volume=0;audio();cl();}
    if(volume==0){lcd.setCursor(0,0);lcd.print("      MUTE      ");}
/////////////////////////////////////////////////////////
 
///////////////////////// f //////////////////////////////////////////////////////////////////////////////////
    if(scan==0){
    if(digitalRead(9)==HIGH&&digitalRead(10)==HIGH){scan=1;x=0;w1=1;cl();} /// вкл сканирования
    if(digitalRead(9)==HIGH&&digitalRead(10)==LOW){x++;if(x>9){x=9;}f_new=(float)kanal[x]/10;Radio.set_frequency(f_new);cl();} // перекл. каналов
    if(digitalRead(10)==HIGH&&digitalRead(9)==LOW){x--;if(x<0){x=0;}f_new=(float)kanal[x]/10;Radio.set_frequency(f_new);cl();} // перекл. каналов
    }
 
    if(scan==1){lcd.setCursor(0,0);lcd.print("S");
 
    sbros++;
    if(sbros==1){for(i=0;i<=9;i++){kanal[i]=760;}}
 
    Serial.println(kanal[x]);
    f=(float)kanal[x];f_new=(f/10);
    Serial.println(kanal[x]);
    if(digitalRead(9)==HIGH&&digitalRead(10)==LOW){f_new=f_new+0.1;if(f_new>108){f_new=108;}cl();w1=1;}
    if(digitalRead(10)==HIGH&&digitalRead(9)==LOW){f_new=f_new-0.1;if(f_new<76) {f_new=76; }cl();w1=1;}
    Serial.println(kanal[x]);
    if(w1==1){Radio.set_frequency(f_new);w1=0;}
    if(kanal[x]<760){f_new=76;}
    if(x>0){
    if(kanal[x]<kanal[x-1]){f_new=(float)kanal[x-1]/10+0.1;}
    }
    kanal[x]=round(f_new*10);
 
    if(digitalRead(11)==HIGH&&digitalRead(12)==LOW){x++;lcd.setCursor(0,1);
  lcd.print("      SAVE      ");delay(1000);w1=1;cl();if(x>9){x=9;scan=0;cl();times();sbros=0;}}
    if(digitalRead(12)==HIGH&&digitalRead(11)==LOW){scan=0;cl();times();sbros=0;}
}
 
 if(millis()-time>3000 && w==1){
     EEPROM.update(0,vol);
     EEPROM.update(1,highByte(kanal[0]));EEPROM.update(2,lowByte(kanal[0]));
     EEPROM.update(3,highByte(kanal[1]));EEPROM.update(4,lowByte(kanal[1]));
     EEPROM.update(5,highByte(kanal[2]));EEPROM.update(6,lowByte(kanal[2]));
     EEPROM.update(7,highByte(kanal[3]));EEPROM.update(8,lowByte(kanal[3]));
     EEPROM.update(9,highByte(kanal[4]));EEPROM.update(10,lowByte(kanal[4]));
     EEPROM.update(11,highByte(kanal[5]));EEPROM.update(12,lowByte(kanal[5]));
     EEPROM.update(13,highByte(kanal[6]));EEPROM.update(14,lowByte(kanal[6]));
     EEPROM.update(15,highByte(kanal[7]));EEPROM.update(16,lowByte(kanal[7]));
     EEPROM.update(17,highByte(kanal[8]));EEPROM.update(18,lowByte(kanal[8]));
     EEPROM.update(19,highByte(kanal[9]));EEPROM.update(20,lowByte(kanal[9]));
     EEPROM.update(100,x);
     w=0;lcd.clear();
   }
}// loop
 
void cl(){delay(200);lcd.clear();}
 
void times(){time=millis();w=1;}
 
void audio(){
  rt.setLeft(volume); // int 0...79 
  rt.setRight(volume);// int 0...79
  rt.setMute(0);  // int 0...1
}

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

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

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

  • Зарядное устройство на тиристоре

    Зарядку аккумулятора током не превышающим 2,25А можно осуществить собрав простое уст-во на тиристоре. При достижении некоторого значения напряжения (задается цепью R2,V1,V2), зарядное уст-во на тринисторе отключает его от аккумулятора. Образцовое напряжение на аккумулятора сравнивается при каждом положительном полупериоде пока тиристор закрыт. Когда аккумулятор разряжен тиристор открывается в моменты каждого положительного …Подробнее...
  • Малогабаритный цифровой  мультиметр (К572ПВ2)

    Малогабаритный цифровой мультиметр (К572ПВ2)

    На рисунке показана схема мультиметра собранный на ИМС К572ПВ2 (А,Б,В). Основные диапазоны измерения: Постоянное напряжение 0,01-19,99 В; 1-1999 В Переменное напряжение 0,01-19,99 В; 1-1999 В Постоянный ток 1 мкА-1,999 мА; 1 мА-1,999 А Сопротивление 1 Ом-1,9999 кОм; 1 кОм-1,9999 МОм Питание +5 В, 60 мА Интегральная микросхема К572ПВ2А представляет собой милливольтметр …Подробнее...
  • Логический пробник со звуковой индикацией

    Логический пробник со звуковой индикацией

    Логический пробник со звуковой индикацией не требует специального источника питания микросхем и действует при уровнях входного сигнала 3 … 15 В. В нем работают два взаимосвязанных генератора: один — на элементах DD1.3, DD1.4, а другой — нa DD1.1 и DD1.2, и два выпрямителя: на диоде VD1 и VD2, VD3. Роль …Подробнее...
  • УМЗЧ на TDA7496

    УМЗЧ на TDA7496

    Усилитель мощности на микросхеме TDA7496S относится к усилителям класса АВ и предназначен для использования в аппаратуре высокого качества. Усилитель имеет тепловую защиту и защиту от короткого замыкания. Имеется встроенная функция MUTE и STAND-BY. Усилитель на базе TDA7496S имеет следующие характеристики: Напряжение питания от 10 до 32В, номинальное напряжение 22В Ток …Подробнее...
  • Преобразователь напряжения 12В > 180В

    Преобразователь напряжения 12В > 180В

    На рисунке показана схема преобразователя постоянного напряжения 12 В в 180 В. Данная схема может использоваться в качестве источника питания газоразрядных индикаторов (для питания газоразрядных индикаторов (типа ИН) необходимо постоянное или пульсирующее напряжение 100…200 В.). Схема достаточно проста, содержит минимальный набор элементов. Генератор собран на микросхеме таймере NE555N, выход генератора …Подробнее...