» » » Рулим китайским FM-радиомодулем на TEA5767. Датагорская библиотека на C

 
 
 

Рулим китайским FM-радиомодулем на TEA5767. Датагорская библиотека на C

📆25.06.15 🙋Discover 👀46 414 💬14
Рулим китайским FM-радиомодулем на TEA5767. Датагорская библиотека на C

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

Так вот, для того что бы модуль что-то начал ловить, нужно всего-ничего: подключить модуль в соответствии с распиновкой к усилителю и микроконтроллеру и написать прошивку управления модулем.
Во как, раньше приемники паяли, а теперь пишем!
Я не буду описывать TEA5767, я совсем «некопенгаген» во всяких приёмно-усилительных трактах, синтезаторах частоты и гетеродинах. Я даже не знаю, чем отличается гетерОДИН от гетерДВА! Ну и, как нередко случается у программистов, я подхожу к вопросу абстрактно, для меня модуль — это некий «чёрный ящик» с описанным интерфейсом взаимодействия. Вот о нём и поговорим.

Типы и распиновка модулей на TEA5767

Я встречался с двумя типами модулей.

1. Наиболее удобный модуль с полной обвязкой:


А теперь по-русски:

Этот модуль имеет полукруглые контактные площадки с торцов платы: 5+5 = 10 шт., шаг 2 мм. Я реализовывал управление по I2C шине. Для этого вывод «BUSMODE» подключаем к «земле», вывод «WR» можно не подключать.

2. Обрезанный модуль tt-502x — TEA5767 без кварца:


Часто нерадивые китайцы высылают этот вариант, вместо описанного выше. Вы сразу поймёте, что вас надули, распаковав бандерольку: на платах нет кварцевого резонатора. Радует то, что эти модули вполне рабочие, хоть и потребуют дополнительных телодвижений. Смотрите расширившуюся схему подключения, прикидывайте дополнительные элементы: часовой кварц, резисторы, конденсаторы. Этот модуль также имеет полукруглые контактные площадки с торцов платы: 4+6 = 10 шт., шаг 2 мм.
Я с таким модулем не работал, но чипы одинаковые, так что моя библиотека должна подойти.

Схема демо-платы для TEA5767

Наверное, это первое моё устройство и программа, которые создавались ради изучения. Поэтому схема очень простая, предназначенная только для того, чтобы запустить модуль FM-приёмника. Учебный проект!

Основные компоненты схемы:
• управляющий микроконтроллер ATmega16
• индикатор знакосинтезирующий 1602 на базе HD44780
• управление на энкодере с кнопкой

Фото моей демо-платы в сборе



Управление TEA5767 по I2C шине. Описание регистров на русском

Когда-то я уже пытался работать с этим модулем, но написать что-то сам я был ещё не в силах, а  найти что-то готовое оказалось достаточно сложно.
Вот я и решил, набравшись опыта в C, восполнить этот пробел и написал собственную библиотеку для работы с модулем.

Исключён фрагмент. Наш журнал существует на пожертвования читателей. Полный вариант этой статьи доступен только меценатам и полноправным членам сообщества. Читай условия доступа!

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

Функции датагорской библиотеки для TEA5767

Теперь пора рассказать про функции библиотеки, их всего пять.
1) tea5767_write (); — функция записи параметров структуры TEA5767WriteRegister в модуль.
2) tea5767_read (); — функция чтения параметров из модуля в структуру TEA5767ReadRegister.
3) tea5767_calc_write_PLL (uint16_t Value); — функция вычисления значения PLL при частоте кварца 32768 Гц, входной параметр — частота в МГц * 100, пример: tea5767_calc_write_PLL (10300) — вычисление значения PLL для частоты 103,00 МГц.
4) tea5767_init (); — начальная инициализация модуля. Можно и не инициализировать, но так как-то user-frendly, подаёшь питание, а там что-то уже играет. Я записываю следующие стартовые параметры:
tea5767_calc_write_PLL ( 10300 );
TEA5767WriteRegister.XTAL = 1; //выбор опорной частоты 32768 Гц
TEA5767WriteRegister.SNC = 1;	  //шумоподавитель ВКЛ

5) (uint16_t)tea5767_calc_read_PLL (); — вычисляет значение частоты из регистров PLL для чтения.

В библиотеке значения регистров для записи и чтения хранятся в двух структурах, которые определены в заголовочном файле библиотеки.

Структура данных для записи — TEA5767WriteRegister
Исключён фрагмент. Наш журнал существует на пожертвования читателей. Полный вариант этой статьи доступен только меценатам и полноправным членам сообщества. Читай условия доступа!


Структура данных для чтения — TEA5767ReadRegister


Структуры имеют битовые поля. Сделано это для удобства пользования библиотекой, мне не требуется применять операции сдвига или какие либо маски для установки/сброса конкретного бита. Например, включение режима «MUTE» осуществляется следующим образом: TEA5767WriteRegister.MUTE = 1.

После того, как необходимые параметры установлены, нужно вызвать функцию tea5767_write (), которая запишет всю структуру в модуль.
Также легко можно считать уровень сигнала из модуля: вызываем функцию tea5767_read (), SignalLevel = TEA5767ReadRegister.LEV
Таким же образом доступны почти все параметры.

Исключение составляют значение PLL, которые занимают больше одного байта в структуре. Но нам и не нужно что-либо записывать или считывать из них вручную. Для управления модулем проще будет задавать частоту. Для этого в библиотеке есть специальная функция, которая вычисляет значение PLL для заданной частоты. Также есть функция, которая производит обратное вычисление частоты из значения PLL, считанного из модуля.

Функции для вычисления PLL используют опорную частоту 32768Гц, такой кварц стоит на модуле. Других я не встречал, поэтому в библиотеке я не предусматривал возможности использования другого кварца.

К небольшому сожалению, я не смог реализовать автопоиск станций — не вкурил, как. Поэтому функция автопоиска в библиотеке пока отсутствует. Сожаление небольшое потому, что я живу в зоне неуверенного приема, и даже промышленные образцы приемников не могут поймать все станции, которые у нас вещают. Приходится настраивать вручную.

Видео

Демо-плата под управлением описанного софта в работе


Файлы

Библиотеки soft-i2c и TEA5767
libs.7z 🕗 19/01/15 ⚖️ 3,14 Kb ⇣ 93

Даташит TEA5767.pdf - стерео FM приёмник с МК управлением

Итого

В качестве транспорта я использовал стороннюю библиотеку I2C шины. Шина реализована программным образом, мне это удобно потому, что можно подключаться на любые выходы микроконтроллера.

Вот и всё, что я хотел рассказать про мою TEA5767-библиотеку. Думаю, перечисленных функций вполне достаточно для управления FM-модулем. Приглашаю желающих повторить наш учебный проект.

Спасибо за внимание!
Иван Гаврилов (Discover)
Вологодская обл. Череповецкий р-н, п.Тоншалово
Профиль Discover
Дата рождения: 13.09.1977.
Работаю в компании "Нординкрафт" , электрик по совместительству в своем ТСЖ.
С паяльником с 12 лет.
Интересы: паяльник, работа, фото, лес.
C 2007г занимаюсь микроконтроллерами AVR.

Напаяно уже много чего, всего и не припомню.
 

Читательское голосование

Нравится

Статью одобрили 103 читателя.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Визуализация для микроконтроллера. Часть 4. Android... Вообще то я планировал рассказать сегодня про дисплей на базе ILI9481. Однако, он настолько похож...
Схема на Датагоре. Новая статья Предварительный усилитель на аудиопроцессоре TDA7318 (TDA7313) и Arduino. Часть 1... Благодарим Тимофея Носова за идею проекта на TDA7318. При построении усилителя звуковой частоты,...
Схема на Датагоре. Новая статья TEA5767.pdf - стерео FM приёмник с МК управлением... TEA5767 - стерео FM приёмник с МК управлением Даташит TEA5767.pdf :...
Схема на Датагоре. Новая статья Вторая жизнь лампового радиоприемника Philips 592LN (Голландия, 1947). Часть 5... В этой части статьи речь пойдет: — о предварительном усилителе и его питании, — о питании модуля ФМ...
Схема на Датагоре. Новая статья Вторая жизнь лампового радиоприемника Philips 592LN (Голландия, 1947). Часть 4. Модуль BlueTooth OVC3860... Привет, датагорцы! В этой части моего повествования речь пойдёт о модуле BlueTooth OVC3860 (далее...
Схема на Датагоре. Новая статья Вторая жизнь лампового радиоприемника Philips 592LN (Голландия, 1947). Часть 3... В этой части разберемся с инсталляцией китайского ФМ-радиомодуля в древний Philips 592LN , с...
Схема на Датагоре. Новая статья Двухполярный блок питания из готовых китайских модулей dc-dc step down LM2596... Сегодня стали доступны готовые модули импульсных стабилизаторов напряжения на микросхеме LM2596....
Схема на Датагоре. Новая статья Доработка модуля китайского вольтметра... ПрелюдияИзучая как-то бескрайние просторы Интернета на предмет китайских полезностей, наткнулся я...
Схема на Датагоре. Новая статья Анонс: доступен новый кит Project-6 "Power Filter"... С 25-08-2012 доступен датагорский кит на базе рассмотренного в статье прототипа! Забирайте на нашей...
Схема на Датагоре. Новая статья Часы с GPS-синхронизацией времени и винтажными индикаторами ИН-12. Наш вариант Nixie Tube Clock... Не думал, что спустя много лет я вернусь к часам на газоразрядных индикаторах. В конце 70-х я...
Схема на Датагоре. Новая статья SHT10 + Atmega8: Микроконтроллерный модуль управления вентилятором санузла, v2... Доброго дня, сограждане! Представляю вторую версию блока управления вентилятором для ванной,...
Схема на Датагоре. Новая статья Отечественные приемно-усилительные лампы и их зарубежные аналоги... Отечественные приемно-усилительные лампы и их зарубежные аналоги, Кацнельсон Б.В. Ларионов А.С....
 

Общаемся по статье 💬

«Рулим китайским FM-радиомодулем на TEA5767. Датагорская библиотека на C»

Комментарии, вопросы, ответы, дополнения, отзывы

 

<

еще один max

Максим Черепанов Читатель Датагора
  • Гражданин
Комментарий # 1 от 25-06-15, 19:16.
Ответить
  • С нами с 10.03.2009
  • 91 комментарий
  • 10 публикаций
 
Великолепно! Модуль лежит уже года 3, никак руки не доходят.То его в усилок хотел запихнуть, то отдельно приемник для кухни сделать. Теперь если что буду знать с чего начать, статью плюсую )))

<

End_reW

Андрей Читатель Датагора
  • Гражданин
Комментарий # 2 от 25-06-15, 19:24.
Ответить
  • С нами с 16.02.2009
  • 9 комментариев
  • 0 публикаций
 
Есть несколько нерабочих мп3 плееров с подобными модулями. Ваша статья подтолкнула на эксперименты. Еще бы RDS, но это так для красоты.

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 3 от 26-06-15, 0:31.
Ответить
  • С нами с 26.02.2006
  • 2 220 комментариев
  • 274 публикации
 
Для RDS нужен другой чип. И он есть в планах редакции и Ивана. Немного запылился smile

<

StalKer-NightMan

Игорь Читатель Датагора
  • Гражданин
Комментарий # 4 от 26-06-15, 12:15.
Ответить
  • С нами с 15.03.2012
  • 96 комментариев
  • 1 публикация
 
Отличный и очень своевременный материал!!! Плюс!

<

vladimirm2

Владимир Читатель Датагора
  • Гражданин
Комментарий # 5 от 26-06-15, 16:33.
Ответить
  • С нами с 5.01.2010
  • 141 комментарий
  • 14 публикаций
 
Не плохо бы прописать на нажатие энкодера переход на автоматическую настройку - поворот энкодера и сл. станция, повторное нажатие, ручная настройка.

<

galrad

Радик Читатель Датагора
  • Гражданин
Комментарий # 6 от 26-06-15, 22:16.
Ответить
  • С нами с 23.08.2011
  • 95 комментариев
  • 12 публикаций
 
Хорошая статья! Главное что есть библиотеки, если немного подкорректировать то можно работать и с модулем на RDA5830, который у меня завалялся в "заначках" буду эксперементировать с RDS и MP3.

Модуль на TEA5767 на китайском рынке существует давно, но хороших статей как и с чем... не так уж и много, поэтому автору Спасибо!
Будем пользоваться!

<

Maestro

Анатолий Читатель Датагора
  • Кандидат
Комментарий # 7 от 28-06-15, 21:58.
Ответить
  • С нами с 18.12.2011
  • 2 комментария
  • 0 публикаций
 
Статья понравилась. Давно хотелось что-то подобное сделать

<

SAI

Александр Читатель Датагора
  • Гражданин
Комментарий # 8 от 09-11-15, 22:56.
Ответить
  • С нами с 27.11.2010
  • 10 комментариев
  • 0 публикаций
 
Колеги приветствую!
Как правильно формировать посыл в модуль точнее понятно на си мы делаем начало передачи( wire.start далее биты и wire stop - завершением передачи и мнгновенной отправкой в модль) вот вопрос как считать биты ? Согласно мануалу ? Непойму как получаются те или иные значения например как зделать mute? Прошу прощения за косноясычность.

Еще не пойму как организовать автопоиск? Ручн настройки частоты работает, вывод из масива частоты работает а вот поиск нет, в примере нашол код видео с работой этого кода но н практике не раьотает:
Wire.beginTransmission(0x60);

Wire.send(frequencyH+0x40);
Wire.send(frequencyL);
Wire.send(0xD0);
Wire.send(0x1F);
Wire.send(0x00);

Wire.endTransmission();

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 9 от 09-11-15, 23:56.
Ответить
  • С нами с 26.02.2006
  • 2 220 комментариев
  • 274 публикации
 
Цитата: SAI
Еще не пойму как организовать автопоиск?

Вы статью бы прочитали внимательно. :bye:

К небольшому сожалению, я не смог реализовать автопоиск станций — не вкурил, как. Поэтому функция автопоиска в библиотеке пока отсутствует. Сожаление небольшое потому, что я живу в зоне неуверенного приема, и даже промышленные образцы приемников не могут поймать все станции, которые у нас вещают. Приходится настраивать вручную.


Иными словами это хороший вопрос для коллективного разума на Форуме.

<

SAI

Александр Читатель Датагора
  • Гражданин
Комментарий # 10 от 10-11-15, 13:10.
Ответить
  • С нами с 27.11.2010
  • 10 комментариев
  • 0 публикаций
 
Уважаемый Игорь ! я прочитал , и подумал, а вдруг кто то уже организовал и молчит о автопоиске )))

<

P32L

Николай Читатель Датагора
  • Кандидат
Комментарий # 11 от 07-01-16, 22:31.
Ответить
  • С нами с 7.01.2016
  • 2 комментария
  • 0 публикаций
 
Зачетная работа,земляк)))

<

erbol

Ербол Читатель Датагора
  • Гражданин
Комментарий # 12 от 09-03-16, 12:44.
Ответить
  • С нами с 11.12.2014
  • 80 комментариев
  • 9 публикаций
 
Иван, добрый день! Что имеется в виду под автопоиском:
1. МК задает с определенным шагом частоту, а tea5767 определяет, есть ли на этой частоте радиостанция,
или
2. Мк задает широкий диапазон, а tea5767 ищет, есть ли в этом диапазоне радиостанции?

<

виктор

Читатель Датагора
  • Прохожий
Комментарий # 13 от 28-11-17, 20:55.
Ответить
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
Привет! Здесь Виктор! К всему сказанному выше,приемник-хорошая тема! Но нужен автопоиск,иначе все преимущества этой системы просто теряются! Желаю успехов в работе! Дайте автопоиск! Hi !

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 14 от 30-12-18, 20:03.
Ответить
  • С нами с 26.02.2006
  • 2 220 комментариев
  • 274 публикации
 
Автопоиск:
#include <TEA5767.h>
#include <Wire.h>
#include <Button.h>
#include <LiquidCrystal.h>

TEA5767 Radio;
LiquidCrystal lcd(12,11,10,9,8,7);
double old_frequency;
double frequency;
int search_mode = 0;
int search_direction;
unsigned long last_pressed;

Button btn_forward(3, PULLUP);
Button btn_backward(2, PULLUP);

void setup() {
Wire.begin();
Radio.init();
Radio.set_frequency(105.4);
Serial.begin(9600);
lcd.begin(16,2);
lcd.clear();
}

void loop() {

unsigned char buf[5];
int stereo;
int signal_level;
double current_freq;
unsigned long current_millis = millis();

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.setCursor(0,1);
if (stereo) lcd.print("STEREO "); else lcd.print("MONO ");
//lcd.print(signal_level);
}

if (search_mode == 1) {
if (Radio.process_search (buf, search_direction) == 1) {
search_mode = 0;
}
}

if (btn_forward.isPressed()) {
last_pressed = current_millis;
search_mode = 1;
search_direction = TEA5767_SEARCH_DIR_UP;
Radio.search_up(buf);
delay(300);
}

if (btn_backward.isPressed()) {
last_pressed = current_millis;
search_mode = 1;
search_direction = TEA5767_SEARCH_DIR_DOWN;
Radio.search_down(buf);
delay(300);
}
//delay(20);
delay(50);
}

https://github.com/andykarpov/TEA5767/tree/master/examples/SimpleRadioFM
http://www.kner.at/home/40.avr/arduino/projekte.radio.TEA5767HN/index.html
http://mr0ger-arduino.blogspot.com/2014/08/tea5767n-fm-philips-library-for-arduino.html
http://good-chip.in.ua/fm-%D1%80%D0%B0%D0%B4%D0%B8%D0%BE-%D0%BD%D0%B0-tea5767atmega8/

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте корректны и вежливы, соблюдайте правила!


Налетай! Паяльники, станции, жала с доставкой

Офигенная миниатюрная рация на литии BaoFeng UV-5R, 5W, 5-15 км!

Тестер универсальный LCR-TC1 для транзисторов, конденсаторов, ESR, MOSFET и т.д.
  • smilelolhellowinkscepticthumbupbored
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashpartyhandshake
    musicnegativenowordspardonshoksleepunknown
    wackoyawnsainthelmethashsmokingwhew


Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.