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

 
 
 
12

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

Разместил Discover 25 июня 2015. Просмотров: 26 075

Рулим китайским 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 | Файл 3,14 Kb загружен 76 раз.

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

Итого

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

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

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

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

Понравилось? Палец вверх!

  • всего лайков: 97

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

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


Схема на Датагоре. Новая статья Визуализация для микроконтроллера. Часть 2. TFT дисплей 1.8" (128х160) на ST7735... Следующий из рассматриваемых нами модулей обладает полноцветным дисплеем под управлением...
Схема на Датагоре. Новая статья Предварительный усилитель на аудиопроцессоре 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. ...
Схема на Датагоре. Новая статья V7 — Измерение RMS-значений напряжения, тока, активной и полной мощности. Облегченная версия... После публикации моей статьи «V6» — измеритель RMS-значений напряжения, тока, активной и полной...
Схема на Датагоре. Новая статья Доработка модуля китайского вольтметра... ПрелюдияИзучая как-то бескрайние просторы Интернета на предмет китайских полезностей, наткнулся я...
Схема на Датагоре. Новая статья Анонс: доступен новый кит Project-6 "Power Filter"... С 25-08-2012 доступен датагорский кит на базе рассмотренного в статье прототипа! Забирайте на нашей...
Схема на Датагоре. Новая статья Часы с GPS-синхронизацией времени и винтажными индикаторами ИН-12. Наш вариант Nixie Tube Clock... Не думал, что спустя много лет я вернусь к часам на газоразрядных индикаторах. В конце 70-х я...
Схема на Датагоре. Новая статья SHT10 + Atmega8: Микроконтроллерный модуль управления вентилятором санузла, v2... Доброго дня, сограждане! Представляю вторую версию блока управления вентилятором для ванной,...
<
  • Гражданин
25 июня 2015 19:16

Максим Черепанов / еще один max

Цитата
  • С нами с 10.03.2009
  • Ушёл в реал Пользователь offline
  • 91 комментарий
  • 10 публикаций
 
  • +1
Великолепно! Модуль лежит уже года 3, никак руки не доходят.То его в усилок хотел запихнуть, то отдельно приемник для кухни сделать. Теперь если что буду знать с чего начать, статью плюсую )))

<
  • Кандидат
25 июня 2015 19:24

Андрей / End_reW

Цитата
  • С нами с 16.02.2009
  • Ушёл в реал Пользователь offline
  • 9 комментариев
  • 0 публикаций
 
  • +2
Есть несколько нерабочих мп3 плееров с подобными модулями. Ваша статья подтолкнула на эксперименты. Еще бы RDS, но это так для красоты.

<
  • Главный редактор
26 июня 2015 00:31

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 675 комментариев
  • 265 публикаций
 
  • +2
Для RDS нужен другой чип. И он есть в планах редакции и Ивана. Немного запылился smile

<
  • Подписчик
26 июня 2015 12:15

Игорь / StalKer-NightMan

Цитата
  • С нами с 15.03.2012
  • Ушёл в реал Пользователь offline
  • 94 комментария
  • 1 публикация
 
  • 0
Отличный и очень своевременный материал!!! Плюс!

<
  • Гражданин
26 июня 2015 16:33

Владимир / vladimirm2

Цитата
  • С нами с 5.01.2010
  • Ушёл в реал Пользователь offline
  • 133 комментария
  • 14 публикаций
 
  • +2
Не плохо бы прописать на нажатие энкодера переход на автоматическую настройку - поворот энкодера и сл. станция, повторное нажатие, ручная настройка.

<
  • Гражданин
26 июня 2015 22:16

Радик / galrad

Цитата
  • С нами с 23.08.2011
  • Ушёл в реал Пользователь offline
  • 88 комментариев
  • 12 публикаций
 
  • +1
Хорошая статья! Главное что есть библиотеки, если немного подкорректировать то можно работать и с модулем на RDA5830, который у меня завалялся в "заначках" буду эксперементировать с RDS и MP3.

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

<
  • Кандидат
28 июня 2015 21:58

Анатолий / Maestro

Цитата
  • С нами с 18.12.2011
  • Ушёл в реал Пользователь offline
  • 2 комментария
  • 0 публикаций
 
  • 0
Статья понравилась. Давно хотелось что-то подобное сделать

<
  • Гражданин
9 ноября 2015 22:56

Александр / SAI

Цитата
  • С нами с 27.11.2010
  • Ушёл в реал Пользователь offline
  • 10 комментариев
  • 0 публикаций
 
  • 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();

<
  • Главный редактор
9 ноября 2015 23:56

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 675 комментариев
  • 265 публикаций
 
  • 0
Цитата: SAI
Еще не пойму как организовать автопоиск?

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

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


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

<
  • Гражданин
10 ноября 2015 13:10

Александр / SAI

Цитата
  • С нами с 27.11.2010
  • Ушёл в реал Пользователь offline
  • 10 комментариев
  • 0 публикаций
 
  • 0
Уважаемый Игорь ! я прочитал , и подумал, а вдруг кто то уже организовал и молчит о автопоиске )))

<
  • Кандидат
7 января 2016 22:31

Николай / P32L

Цитата
  • С нами с 7.01.2016
  • Ушёл в реал Пользователь offline
  • 2 комментария
  • 0 публикаций
 
  • 0
Зачетная работа,земляк)))

<
  • Гражданин
9 марта 2016 12:44

Ербол / erbol

Цитата
  • С нами с 11.12.2014
  • Ушёл в реал Пользователь offline
  • 65 комментариев
  • 9 публикаций
 
  • 0
Иван, добрый день! Что имеется в виду под автопоиском:
1. МК задает с определенным шагом частоту, а tea5767 определяет, есть ли на этой частоте радиостанция,
или
2. Мк задает широкий диапазон, а tea5767 ищет, есть ли в этом диапазоне радиостанции?

Добавление комментария


Налетай! Паяльники, станции, жала с доставкой
  • smilelolbyewinkyahoocoollaughing
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashguitar-manhandshake
    musicnegativenopardonshoksleepunknown
    wackoyawnblushbullyhashsmokingwhew
Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.