FM приемник на TEA5767 (Arduino)

ИМС TEA5767 производимая компанией NXP применяется для конструирования низковольтных FM-радио тюнеров. В составеTEA5767 имеются внутренние цепи выделения промежуточной частоты и демодуляции принимаемого сигнала, что позволяет обходиться минимальным набором внешних компонентов.

Технические параметры TEA5767:

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

Радио модуль TEA5767 управляется всего двумя кнопками «+» и «-«, которые используются для поиска необходимой станции. Через 10 секунд после не активности кнопок, частота выбранного канала сохраняется в энергонезависимой памяти.

Библиотека — TEA5767.zip

#include <TEA5767.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
 
TEA5767 Radio;
LiquidCrystal lcd(7, 6, 2, 3, 4, 5);
 
  unsigned long last_pressed,time;
  unsigned char buf[5];
  int stereo,signal_level,search_mode = 0,search_direction,i,f_h,f_l,f,w;
  double current_freq;
  float f_new = (EEPROM.read(0)*256 +  EEPROM.read(1));
  byte a1[8]={0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111};
  byte a2[8]={0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
  byte a3[8]={0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111};
  byte a4[8]={0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111};
  byte a5[8]={0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111};
  byte a6[8]={0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
  byte a7[8]={0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
  byte a8[8]={0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
 
void setup() { Serial.begin(9600); 
  Wire.begin();
  Radio.init();
  Radio.set_frequency(f_new/10); 
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.clear();
  pinMode(12,INPUT);
  pinMode(11,INPUT);
  lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);lcd.createChar(4,a5);lcd.createChar(5,a6);lcd.createChar(6,a7);lcd.createChar(7,a8);
}
 
void loop() {
  if (Radio.read_status(buf) == 1) {
    current_freq =  floor (Radio.frequency_available (buf) / 100000 + .5) / 10;
    stereo = Radio.stereo(buf);
    signal_level = Radio.signal_level(buf);
    lcd.setCursor(0,0);
    lcd.print("FM "); lcd.print(current_freq);lcd.print(" MHz ");
    lcd.setCursor(0,1);
    if (stereo) lcd.print("STEREO "); else lcd.print("MONO  ");
    for(i=0;i<8;i++){if(signal_level>=8+i){lcd.setCursor(8+i,1);lcd.write((uint8_t)i);}}
}
 
  if (search_mode==1){if(Radio.process_search(buf, search_direction)==1){search_mode = 0;}}
 
  if (digitalRead(11)==HIGH) { 
    search_mode = 1;time=millis();w=1;
    search_direction = TEA5767_SEARCH_DIR_UP;
    Radio.search_up(buf);
    delay(200);
  }
 
  if (digitalRead(12)==HIGH) {
    search_mode = 1;time=millis();w=1;
    search_direction = TEA5767_SEARCH_DIR_DOWN;
    Radio.search_down(buf);
    delay(200);
  } 
  f = current_freq*10;
  f_h = highByte(f);f_l = lowByte(f);
  if(millis()-time>10000&&w==1){w=0; EEPROM.update(0,f_h);EEPROM.update(1,f_l);}
  delay(50);if(search_mode==1){lcd.clear();}
}

Comments

    1. Если Вы устанавливали библиотеку с менеджера библиотек, то она может быть не совместима со скетчем. В статье есть ссылка на архив со старой версией.

  1. Помогите разобраться — собрал приемник (залился скетч,установил библиотеки) дисплей отображает одни черточки про нажатии кнопок количество черточек меняется — что делать?

            1. Это стандартный скетч запуска дисплея, он не может не работать.Смотрите замыкание на шине данных, где-то что-то не так в подключении.

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

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