| Ваш IP: 3.232.96.22 | Online(47) - гости: 30, боты: 17 | Загрузка сервера: 2.4 ::::::::::::

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

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

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

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

  • УНЧ на TDA1519

    УНЧ на TDA1519

    Напряжение питания 6…17,5В Максимальный потребляемый ток 4 А Выходная мощность при Uп=14,4В КНИ=0,5%: Rн=2Oм 6Вт Rн=4Ом 5Вт При Uп=14,4В КНИ=10%: Rн=2Oм 11Вт Rн=4Ом 8,5Вт Ток покоя 80мАПодробнее...
  • ЛЮМИНЕСЦЕНТНЫЕ ЛАМПЫ И ИХ ХАРАКТЕРИСТИКИ

    Люминесцентные лампы (ЛЛ) делятся на осветительные общего назначения и специальные. К ЛЛ общего назначения относят лампы мощностью от 15 до 80 Вт с цветовыми и спектральными характеристиками, имитирующими естественный свет различных оттенков. Для классификации ЛЛ специального назначения используют различные параметры. По мощности их разделяют на маломощные (до 15 Вт) и …Подробнее...
  • 4-х канальный усилитель 4*6Вт или мостовой 2*20Вт

    4-х канальный усилитель 4*6Вт или мостовой 2*20Вт

    Усилитель на базе TDA7370 относится к классу АВ, микросхема имеет защиту от  перенапряжения, переполюсовки, тепловую защиту, защиту от КЗ выводов на шину питания и корпус, защиту от статического электричества. Усилитель может быть переведен в режим моно в мостовой режим при помощи перемычки на входе микросхемы. Так же в микросхеме встроенные …Подробнее...
  • LM384 — УМЗЧ  5 Вт

    LM384 — УМЗЧ 5 Вт

    LM384 — усилитель мощности звуковой частоты с выходной мощностью до 5 Вт с фиксированным коэффициентом усиления в 35 дБ. усилитель имеет широкий диапазон питающего напряжения от 12 до 26 В. Максимальный ток потребления не более 1,3 А. Входное сопротивлении 150 кОм. Усилитель на ИМС LM384 обладает низким коэффициентом нелинейных искажений, …Подробнее...
  • Приемник радиоточка

    Приемник представляет собой детекторный приемник с УНЧ и предназначен для приема местной радиовещательной станции. все транзисторы с коэф. усиления не менее 20…30. L1 — регулятор размаха строк от старого телевизора. Литература 500схем для радиолюбителей\Автор:Николаев А.П.Подробнее...