| Ваш IP: 3.93.74.227 | Online(39) - гости: 24, боты: 15 | Загрузка сервера: 0.92 ::::::::::::


Радио на 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
}

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

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

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

  • LM4861 маломощный миниатюрный  моно усилитель 1.1 Вт

    LM4861 маломощный миниатюрный моно усилитель 1.1 Вт

    ИМС LM4861 представляет собой миниатюрный (корпус SOIC) усилитель звуковой частоты с выходной мощностью 1,1 Вт. ИМС имеет тепловую защиту, КНИ не превышает 1% при сопротивлении нагрузки 8 Ом и выходной мощности 1 Вт. Максимальная выходная мощность 1,5 Вт при КНИ 10%. Усилитель снабжен режимом малого энергопотребления (режим отключения усилителя — …Подробнее...
  • Преобразователь напряжения 12В > 180В

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

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

    Особенностью данного устройства является использование микросхемы К174УН7 (усил-ль мощности ЗЧ). Из-за сильной положительной ОС по переменному напряжению через С2 микросхема работает в режиме генерации прямоугольных импульсов(20кГц). Амплитуда выхода микросхемы 10В. Эти импульсы поданы на вход умножителя напряжения VD1-VD4 и С4-С7. Выходное напряжение стабилизирует параметрический стабилизатор R2VD5 с усилителем тока на …Подробнее...
  • Вакуумно-люминесцентные индикаторы

    Вакуумно-люминесцентные индикаторы

    Вакуумные люминесцентные индикаторы (далее как ВЛИ) преобразуют электрическую энергию в световую. По виду отображения информации они бывают единичные, цифровые, буквенные, шкальные, мнемонические и графические, а по исполнению могут быть одноразрядными, многоразрядными, а так же без фиксированных знакомест. Главное достоинство таких индикаторов это: высокая яркость, низкое рабочее напряжение, малое энергопотребление. Недостатком использования …Подробнее...
  • MP7720 — миниатюрный усилитель класса D

    MP7720 — миниатюрный усилитель класса D

    На микросхеме MP7720 можно собрать миниатюрный усилитель класса D. Особенностью данной микросхемы является отсутствие радиатора охлаждения, так КПД микросхемы более 90%, что позволяет уменьшить размеры конечного устройства. Характеристики усилителя: встроенная система устранения акустических щелчков включения/выключения встроенная защита от короткого замыкания выходная мощность на нагрузке 4 Ом 20 Вт при напряжении …Подробнее...