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

 
 
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Управление 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
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


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

Итого

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

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

Спасибо за внимание!

Об авторе

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

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

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

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

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


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


Kaspersky FREE. Бесплатная годовая лицензия для России, Белоруссии и Украины

Привет, друзья! Очередной подарок от kaspersky.ru — антивирус «Kaspersky FREE». Спасибо...

Блок управления вытяжным вентилятором. Наладка, результаты

Всем здоровья! Утюг починен. Хочу коротко отчитаться в проделанной работе и результатах...

Microchip проглотила Atmel. Официально

Привет, дрУги! Не удивляйтесь, зайдя сегодня на официальную страницу atmel.com...

Пусть всегда будет солнце!

Сегодня День Победы. Мы так долго живём без войны, что начали забывать, что это...

17/01 киберсубботник на портале

Привет, дрУги! В ближайщую субботу на нашем портале и в магазине будет...

Coil32 v9.0 - программа для расчета катушек индуктивности

Всем, кто занимался изготовлением (и ремонтом) приемников, передатчиков, акустических систем,...

Сэмплы гитарного комбоусилителя U-96

Как и обещал, записал пару сэмплов на скорую руку с моего комбика...

Библиотеки Diptrace +3D. Разъёмы PBS (розетки)

Продолжая тему библиотек для Diptrace, хочу предложить розетки однорядные PBS для пайки...

Toshiba - это хорошо! Новейший каталог 4Q2012

Предлагаю вниманию сограждан новейший каталог Toshiba Bipolar Power Transistors — 4 квартал...

Датагорскiя Вѣдомости №1 (2012)

Здравствуйте, уважаемые сограждане-датагорцы и гости нашего электронного города! Спешу...

Transformer: программа расчета маломощного (до 500 Вт) силового трансформатора на

Предлагаю начинающим очень простую программулину для расчета силовых трансформаторов. Автор...

Датагорская Ярмарка электроники v.2 открылась!

Уважаемые граждане Датагории и гости нашего кибер-города! После обновления открылась...
<
  • Гражданин
25 июня 2015 19:16

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

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

<
  • Гражданин
25 июня 2015 19:24

Андрей / End_reW

  • Регистрация: 16.02.2009
  • Публикаций: 0
  • Комментариев: 9
 
  • +2
Есть несколько нерабочих мп3 плееров с подобными модулями. Ваша статья подтолкнула на эксперименты. Еще бы RDS, но это так для красоты.

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

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

  • Регистрация: 25.02.2011
  • Публикаций: 262
  • Комментариев: 1605
 
  • +2
Для RDS нужен другой чип. И он есть в планах редакции и Ивана. Немного запылился smile

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

Игорь / StalKer-NightMan

  • Регистрация: 15.03.2012
  • Публикаций: 1
  • Комментариев: 84
 
  • 0
Отличный и очень своевременный материал!!! Плюс!

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

Владимир / vladimirm2

  • Регистрация: 5.01.2010
  • Публикаций: 14
  • Комментариев: 131
 
  • +2
Не плохо бы прописать на нажатие энкодера переход на автоматическую настройку - поворот энкодера и сл. станция, повторное нажатие, ручная настройка.

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

Радик / galrad

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

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

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

Анатолий / Maestro

  • Регистрация: 18.12.2011
  • Публикаций: 0
  • Комментариев: 2
 
  • 0
Статья понравилась. Давно хотелось что-то подобное сделать

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

Александр / SAI

  • Регистрация: 27.11.2010
  • Публикаций: 0
  • Комментариев: 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();

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

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

  • Регистрация: 25.02.2011
  • Публикаций: 262
  • Комментариев: 1605
 
  • 0
Цитата: SAI
Еще не пойму как организовать автопоиск?

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

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


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

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

Александр / SAI

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

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

Николай / P32L

  • Регистрация: 7.01.2016
  • Публикаций: 0
  • Комментариев: 2
 
  • 0
Зачетная работа,земляк)))

<
  • Бонус
9 марта 2016 12:44

Ербол / erbol

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

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.