TEA5767 производимая компанией NXP применяется для конструирования низковольтных FM-радио тюнеров. В составеTEA5767 имеются внутренние цепи выделения промежуточной частоты и демодуляции принимаемого сигнала, что позволяет обходиться минимальным набором внешних компонентов.
Технические параметры TEA5767:
- Напряжение питания от 2,5 до 5 В
- Потребляемый ток при Uпит = 5 В 12,8 мА
- Чувствительность 2 мкВ
- Отношение сигнал/шум 54 дБ
- Разделение между стереоканалами 24 дБ
- Коэффициент гармоник 0,4 %
- Диапазон принимаемых частот от 76 МГц до 108 МГц
- Шины управления: I2C или 3-х проводная
Используя радио модуль, индикатор и микроконтроллер ATtiny45 можно собрать простое FM-радио.
Радио приемник управляется всего одной кнопкой, которая позволяет по кругу переключать заранее записанные каналы. Частота канала выводится на индикаторный модуль TM1637. К выходу модуля радиоприемника необходимо подключить любой маломощный усилитель, например можно использовать модуль усилителя PAM8403 с регулятором громкости.
Последний выбранный канал сохраняется в энергонезависимой памяти.
Перед прошивкой микроконтроллера рекомендую ознакомится со статьей — http://rcl-radio.ru/?p=129389 (общие сведения о микроконтроллере ATtiny45, прошивка при помощи Arduino IDE).
#define CLK PB4 // TM1637 #define DIO PB3 // TM1637 #define CH 8 #include <EEPROM.h> #include <TinyWireM.h> // https://github.com/adafruit/TinyWireM.git #include <TEA5767Tiny.h> // https://github.com/andykarpov/TEA5767Tiny.git TEA5767Tiny Radio; float ch[]={104.4, 101.9, 102.5, 88.0, 101.5, 105.0, 103.9, 105.7}; unsigned char buf[5]; double current_freq; int ch_n; void setup() { pinMode(1,INPUT_PULLUP); ch_n=EEPROM.read(0); Radio.init(); Radio.set_frequency(ch[ch_n]); } void loop() { if(digitalRead(1)==LOW){ ch_n++; if(ch_n>CH-1){ch_n=0;} Radio.set_frequency(ch[ch_n]); EEPROM.update(0,ch_n); } if (Radio.read_status(buf) == 1){current_freq = floor (Radio.frequency_available (buf) / 100000 + .5);} tm_print(current_freq,1,5); delay(200); } void tm_dec(byte dig){ for(byte i = 0; i < 8; i++) { DDRB |= (1 << CLK);del(); if (dig & 0x01) DDRB &= ~(1 << DIO); else DDRB |= (1 << DIO);del(); DDRB &= ~(1 << CLK);del(); dig = dig >> 1; } DDRB |= (1 << CLK); DDRB &= ~(1 << DIO);del(); DDRB &= ~(1 << CLK);del(); if (((PINB >> DIO) & 1) == 0) DDRB |= (1 << DIO);del(); DDRB |= (1 << CLK);del(); } void tm_stop(){ DDRB |= (1 << DIO);del(); DDRB &= ~(1 << CLK);del(); DDRB &= ~(1 << DIO);del(); } void tm_start(){ DDRB |= (1 << DIO);del(); } void tm_print(int t, byte pd_t, int br){ tm_start();tm_dec(0b10001000 + br);//tm_stop();tm_start(); tm_dec(0x40);tm_stop();tm_start(); int data0; if(t<1000){data0=10;}else{ data0 = t/1000;} int data1 = t / 100 % 10; int data2 = t / 10 % 10; int data3 = t % 10; for(byte n = 0; n < 4; n++){ int data; switch(n){ case 0: data = data0;break; case 1: data = data1;break; case 2: data = data2;break; case 3: data = data3;break; } switch(data){ // XGFEDCBA case 0: data = 0b00111111;break; // 0 case 1: data = 0b00000110;break; // 1 case 2: data = 0b01011011;break; // 2 case 3: data = 0b01001111;break; // 3 case 4: data = 0b01100110;break; // 4 case 5: data = 0b01101101;break; // 5 case 6: data = 0b01111101;break; // 6 case 7: data = 0b00000111;break; // 7 case 8: data = 0b01111111;break; // 8 case 9: data = 0b01101111;break; // 9 case 10: data = 0b00000000;break; // пусто case 11: data = 0b01000000;break; // - } if(n == 0){data0 = data;} if(n == 1){data1 = data;} if(n == 2){data2 = data;} if(n == 3){data3 = data;} } switch(pd_t){ case 1 : data2 = data2+0b10000000;break; case 2 : data1 = data1+0b10000000;break; case 3 : data0 = data0+0b10000000;break; } tm_dec(0xC0);tm_dec(data0);tm_dec(data1);tm_dec(data2);tm_dec(data3);tm_stop(); } void del(){delay(1);}
Перед загрузкой скетча необходимо записать в него выбранные для радио каналы:
float ch[]={104.4, 101.9, 102.5, 88.0, 101.5, 105.0, 103.9, 105.7};
и указать кол-во выбранных каналов:
#define CH 8
Усилитель PAM8403