Главная » Ардуино » Модуль TEA5767 – FM радио с Arduino и LCD Nokia 5110

Модуль TEA5767 – FM радио с Arduino и LCD Nokia 5110

Популярный и дешевый модуль FM-радио TEA5767 — первый модуль, который я взял для изучения.

В моем прототипе системы, кроме самого TEA5767 использованы и другие необходимые модули:

  • Arduino Pro Mini с ATmega328 для управления
  • Усилитель мощности звука PAM8403, который усиливает выходной (от модуля TEA5767) аудиосигнал и передает его на динамики
  • Цифровой регулятор громкости PT2257
  • Источник питания (3,3 В)
  • ЖК-дисплей от Nokia 5110 (3310) с интерфейсом SPI
  • ИК-пульт дистанционного управления NEC для беспроводного радиоуправления

Характеристики модуля TEA5767

Ниже приведены основные особенности модуля TEA5767 :

  • Напряжение питания: 2,5…5 В
  • Диапазон частот: 76…108 мГц
  • Размер модуля: 31х30 мм
  • Имеет диод для защиты от обратной полярности
  • Наличие датчика фильтрации выходной мощности
  • Интерфейс: I2C (адрес 0x60)
  • Индикатор питания — синий светодиод
  • Мягкое отключение звука
  • Режим ожидания
  • Автоматический режим поиска радиостанций
  • Режим поиска радиостанции (следующий или предыдущий)

Распиновка выводов

Блок-схема FM-радио

Дополнительно я использовал:

1. Модуль RTC с добавленной памятью EEPROM (название модуля: Precise DS3231 AT24C32 RTC clock), управляемый по шине I2C (адрес по умолчанию для DS3231 — 0x68, а для AT24C32 — 0x57). Я использовал модуль RTC, чтобы считывать время и температуру окружающей среды (модуль также измеряет температуру).

В свою очередь, в EEPROM я помещаю данные, которые нужно использовать после повторного включения радио, например, частоту последней выбранной радиостанции. Выбор внешней памяти был продиктован большей надежностью (количеством возможных операций записи в память). Можно также использовать память ATmega.

2. Модуль с регулятором громкости PT2257, который позволяет осуществлять цифровое управление громкостью динамика через шину I2C (адрес по умолчанию 0x88).

Этот модуль можно не устанавливать и использовать только модуль усилителя PAM8403 со встроенным потенциометром, (фото такого модуля можно найти в моей статье, посвященной усилителю PAM8403). Лично меня, правда, смущало наличие этого аналогового элемента, и я сосредоточился на управлении пультом;).

3. Модуль FT232 (на схеме не показан) для программирования Arduino и связи с терминалом на ПК.

Подключение показано на рисунке ниже. Чтобы не слишком путаться, линии I2C (SDL и SDC) я не соединял. При практической реализации, конечно, их следует связывать вместе.

Подключение (схемы) аудиоусилителя PAM8403 и регулятора громкости PT2257 описано в других статьях (см. PAM8403  и PT2257). Связь между микроконтроллером и модулями осуществляется по шине I2C, а с ЖК-дисплея — через программно реализованный SPI.

Принципиальная схема

Что касается вопросов сборки и самого модуля TEA5767, то у него нестандартная компоновка контактных площадок. Я использовал слегка изогнутые позолоченные контакты, а сам макет был перевернут (первое изображение слева), потому что на этой стороне были контактные площадки большего размера.

Функциональность всей схемы

  • Нет аналоговых компонентов
  • ИК-пульт дистанционного управления
  • Выбор станции из списка предустановок
  • Показать название станции из списка предустановок
  • Возможность поиска станций (без сохранения): следующая, предыдущая, все со всего диапазона VHF (опции доступны на уровне меню)
  • Показывать время каждые 5 секунд
  • Отображение по запросу (функция доступна кнопкой дистанционного управления) дата, время, температура окружающей среды
  • Показывает мощность FM-сигнала и громкость динамика (фактически — подавление US PT2257)
  • Отображение типа сигнала: стерео (ST), моно (MN)
  • Отключение звука (mute)
  • Выключение (режим ожидания)
  • Восстановить список предустановленных станций по умолчанию (полезно после поиска станций в диапазоне)
  • Запоминание последнего установленного значения громкости (подавления) PT2257 и его восстановление после повторного включения радио
  • Установка чувствительности автоматического поиска станций (опция в меню)

Название станции, частота, значки мощности сигнала, типа сигнала (стерео / моно), громкости

Данные с модуля RTC (время, дата, температура окружающей среды)

Периодически отображается время при воспроизведении радио

Меню

Прототип

Прототип в сборе

Отправной точкой была поддержка радиомодуля, описанная в статье «Complete FM Radio с использованием Arduino, библиотеки TEA5767 и LCD Shield» и представленного там кода.

Основная модификация коснулась использования другого дисплея (с дополнительной информацией) и изменения способа управления на ИК-пульт. Я также значительно упростил выходные цепи, сохранив возможность цифрового управления громкостью.

Идея обработки кода на основе состояний также осталась, хотя сам код сильно изменился из-за других / новых модулей.

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

Оценка работы TEA5767

Слабый встроенный автоматический поиск станций. На практике работает только жонглирование запрограммированными станциями (частотами). Возможно из-за плохой антенны в виде 30 см кабеля.

С другой стороны, здесь нет драмы, потому что на практике я слушаю заранее определенные станции на других радиостанциях (например, по телефону).

Сам радиомодуль мог бы иметь регулятор громкости выходного сигнала и поддержку RDS, тем более что у конкурентов есть такие особенности.

Используемые библиотеки

Модуль FM-радио TEA5767: TEA5767

ЖК-дисплей: Adafruit-PCD8544-Nokia-5110-LCD-library, Adafruit-GFX-Library

ИК-модуль: Arduino-IRremote

Регулятор громкости PT2257: Evc_pt2257

DS3231 + EEPROM: Arduino-DS3231, AT24CX

Использование вышеуказанных библиотек не вызывало серьезных проблем. Самым сложным для понимания оказался принцип работы дисплея (отображение текста и иконок). Кроме того, его библиотеки занимают довольно много места в оперативной памяти.

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

Работа ИК-пульта также оказалась проблематичной из-за двух разных кодов для одной и той же кнопки, хотя это скорее вопрос аппаратного обеспечения. Подробнее об этой проблеме в статье ИК-пульт дистанционного управления (NEC) с приемником HX1838. Поддержка в Arduino.

Исходный код

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

На практике, если я использую радио в своем городе, я ставлю свои любимые частоты и выбираю уже из них. Реализованный поиск каналов (все, предыдущий, следующий) для меня избыточен, тем более что его эффективность не впечатляет. Найденные каналы также не запоминаются / не сохраняются.

Код также включает поддержку последовательного порта, который я использовал для программирования системы и отправки информации на терминал ПК (в виде отладчика).

Из-за проблем с объемом памяти, описанных выше, код также включает поддержку проверки использования ОЗУ на основе библиотеки MemoryFree.

Скачать файл проекта (83,4 KiB, скачано: 50)

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*