У многих радиолюбителей хранятся как раритеты старые радиоприёмники, такие как «ВЭФ», «Океан» и т. п., которые дороги как память, но либо уже не работают, либо не используются по причине проблем с радиовещанием на ДВ и СВ, да и на УКВ сейчас вещает мало радиостанций.
Появившийся в последнее время в продаже дешёвый FM радио-модуль на базе микросхемы RDA5807M имеет малые размеры неплохие параметры, что позволяет встраивать его практически в любой радиоприёмник, продлив тем самым его «жизнь».
Основные технические параметры RDA5807M
- Поддержка выбора диапазона приёма в районе 50…115 МГц.
- Четыре возможных шага перестройки частоты: 100КГц, 200КГц, 50КГц и 25КГц.
- Поддержка приёма текстовых данных в формате RDS/RBDS.
- Встроенный цифровой синтезатор частоты.
- Встроенный автономный автопоиск радиостанции.
- Возможность работы от часового кварца на частоте 32768 Гц.
- Автоматическая регулировка усиления.
- Цифровое адаптивное подавление шума.
- Возможность выбора режима воспроизведения моно или стерео.
- Возможность включения подъёма усиления низких частот (басов), что важно в случае применения малогабаритных динамиков.
- Индикатор уровня сигналов.
- Индикатор стерео сигнала.
- Цифровой регулятор громкости и выключатель звука (MUTE).
- К встроенному УМЗЧ можно подключать головные телефоны (32 Ом).
- Корпус MSOP (10 выводов).
Электрические параметры RDA5807М.
- Напряжение питания 1,8…3,3 В.
- Ток потребления в рабочем режиме до 21 мА.
- Ток потребления в спящем режиме 5 мкА.
- Коэффициент нелинейных искажений 0,15…0,2 %.
- Максимальная тактовая частота интерфейса I2C 400 КГц.
Похоже на то, что микросхема RDA5807M является усечённым вариантом цифрового радиоприёмника RDA5807P. К примеру в даташите на RDA5807M упоминается параметр INT_MODE — разрешение прерываний, но для сигнала прерывания не предусмотрено никакого выхода, в отличие от RDA5807P, где этот сигнал появляется на выводе GPIO2. Найти руководство по программированию для RDA5807M мне не удалось, поэтому приходится пользоваться руководством для RDA5807P, которое не совсем подходит для микросхемы RDA5807M, к тому же на китайском языке.
Запись и чтение данных микромодуля RDA5807M производится по 2-хпроводному интерфейсу I2C и вызывает много вопросов у радиолюбителей, судя по количеству постов на различных форумах, посвящённых этой теме. Потому, думаю, будет не лишним поделиться своим опытом применения радиомодуля и обобщить информацию о нём, добытую из различных форумов и других источников.
Интерфейс I2C совместим с протоколом шины I2C Спецификации 2.1. Он оперирует двумя выводами модуля: SCL и SDА. При записи, байты данных передаются микроконтроллером (далее – МК), а при чтении, байты данных считываются из RDA5807M. Интерфейс I2C модуля RDA5807M позволяет организовать три различных способа обмена данными. Для этого нужно передать соответствующий командный байт. Командный байт содержит 7-ми битный адрес чипа и младший бит (b0 = R/W), определяющий команду записи (W=0) или чтения (R=1).
команда записи — (0х22), команда чтения — (0х23).
команда записи — (0хС0), команда чтения — (0хС1).
Режим группового последовательного доступа к внутренним регистрам.
Внутренние регистры имеют фиксированный начальный адрес (0x02h) для записи данных и (0x0Ah) для чтения, и внутренний инкрементальный счётчик адреса. Когда значение регистра адреса достигает конца регистрового файла (0x3Ah), счётчик адреса будет сброшен в (0x00h). Регистры модуля 16-ти разрядные, поэтому МК передаёт или принимает данные побайтно, сначала старшие 8 бит регистра, далее младшие. После передачи восьми бит каждого байта передаётся девятый бит подтверждения ACK (SDA=0) или NACK (SDA=1). Бит ACK (или NACK) всегда посылает получатель.
Передача данных для записи через интерфейс I2C начинается с формирования условия «START», далее следуют командный байт и байты данных, и заканчивается формированием условия «STOP». При этом MК сначала передаёт в регистр 0x02h старшие 8 бит, далее передаёт в регистр 0x02h младшие 8 бит, после чего передаёт в регистр 0x03h старшие 8 бит, и так до последней записи. После каждого принятого байта модуль RDA5807M всегда выдает ACK, а MК выдает условие «STOP», когда программирование регистров закончено.
При чтении данных из регистров модуля, после командного байта от MК, модуль RDA5807M посылает из регистра 0x0Ah сначала старшие 8 бит, далее из регистра 0x0Ah передаются младшие 8 бит, после чего из регистра 0x0Вh сначала старшие 8 бит, и так до тех пор, пока не получит NACK от MК. MК выдаёт ACK для каждого байта данных кроме последнего байта данных, чем сообщает модулю о том, что приём данных окончен. После того, как MК выдаст NACK для последнего байта данных, модуль RDA5807M освобождает шину данных микроконтроллеру, и MК выдаёт условие «STOP».
Модуль RDA5807M сам себя сбрасывает, при подаче питания. А также поддерживается программный сброс путём переключения бита 1 в регистре 02H с 0 в 1.
Режим произвольного доступа к внутренним регистрам.
В режиме произвольного доступа к внутренним регистрам модуля RDA5807M после командного байта, определяющего запись или чтение, МК передаёт адрес внутреннего регистра, к которому будет обращение для записи или чтения.
Приведённая ниже таблица показывает порядок следования данных при записи в режиме произвольного доступа к внутренним регистрам. Цветом выделены данные, которые передаёт микроконтроллер.
START
I2C CHIP ADDRESS
W
ACK
REGISTER ADDRESS
ACK
REGISTER BIT <15:8>
ACK
REGISTER BIT <7:0>
ACK/
NACK
STOP
Следующая таблица показывает порядок следования данных при чтении в режиме произвольного доступа к внутренним регистрам. Цветом выделены данные, которые передаёт микроконтроллер.
START
I2C CHIP ADDRESS
W
ACK
REGISTER ADDRESS
ACK/NACK
START
I2C CHIP ADDRESS
R
ACK
REGISTER BIT <15:8>
ACK
REGISTER BIT <7:0>
NACK
STOP
Работа модуля в режиме совместимости с чипом TEA5767 мною не проверялась, но из сообщений на различных форумах можно узнать, что при замене модуля с чипом TEA5767 на модуль с RDA5807M радиоприёмник нормально работает без изменения программы управляющего МК.
Прочитав ряд статей на тему FM-радиоприемника на модуле RDA5807M, в том числе «FM радио модуль RDA5807M» и «Будильник радио», я решил повторить схему, приведённую в статье по первой ссылке (автор Gauss). Собранный радиоприёмник заработал сразу и сразу же обнаружились некоторые недостатки. Впрочем, это никоим образом не умаляет значение этой хорошо проиллюстрированной статьи, которую перепечатали уже многие другие сайты. Как известно, тому, кто идёт впереди всегда труднее, да и нет предела совершенству. Идя по следам этого автора другие радиолюбители, каждый на свой вкус, добавляют к этому радиоприёмнику кто часы, кто термометр, кто чтение сообщений по RDS. Вот и я в их числе.
Итак, что же меня подкупило в этой реализации радиоприёмника? Это простота схемы, наличие исходников с подробными комментариями, возможность выводить на дисплей названия местных радиостанций, дешевизна комплектующих.
Теперь о том, что не устроило после сборки радиоприёмника.
Возможно автор и рад бы добавить в программу автоматическую настройку или другие какие-либо функции, но память программ микроконтроллера уже и так забита почти под «завязку», т. к. программа написана на языке С.
Потому было решено написать программу на ассемблере. Чтобы не переделывать готовую схему в макете, я оставил прежнюю распайку выводов микроконтроллера ATMega8, поэтому схема приёмника, приведённая на рис.1, практически не отличается от схемы в упомянутой выше статье.
Основные функции программы:
- Диапазон частоты настройки 87,0…108 МГц.
- Шаг настройки частоты приёма 100 КГц.
- Перебор станций, сохранённых в памяти программ вверх и вниз по списку в таблице при помощи кнопок “+St” и “- St”.
- Полуавтоматическая настройка на станцию вверх и вниз по диапазону при помощи кнопок “+F” и “- F”.
- Запись текущей частоты настройки в EEPROM.
- Отдельный индикатор стереосигнала на светодиоде.
- Вывод на индикатор частоты и названия станции.
- Частота станции выводится цифрами удвоенной величины.
- При включении — начинает работу на сохранённой частоте.
- Используется аппаратный интерфейс I2C микроконтроллера ATMega8.
Рис.1.
Вывод подсветки индикатора соединён с выводом питания, т. к. у меня был индикатор на плате синего цвета. Для индикаторов на плате красного цвета этот вывод нужно соединить с общим проводом. Выходные сигналы с тьюнера я подавал на вход УМЗЧ радиоприёмника. Качество приёма неплохое. При приёме слабых сигналов имеет значение положение антенны. При автопоиске иногда пропускает слабые станции и останавливается на частотах с высоким уровнем шумов, чтобы это уменьшить можно поэкспериментировать с подбором порога отношения сигнал/шум при поиске (Seek SNR threshold value).
В памяти МК записаны частоты и названия радиостанций, вещающих в нашем городе. Их легко можно изменить на действующие в вашей местности, не вдаваясь в детали работы программы и далее перекомпилировать программу. Текст сообщений на дисплей можно выводить как латиницей, так и кириллицей. Соответствующие шрифты содержатся в файле Font_6x8.asm, который входит в архив с исходниками.
При программировании МК необходимо запрограммировать следующие фьюзы: CKSEL0, CKSEL1, CKSEL3 и SUT0.
В некоторых случаях более подходящим для переделки старого радиоприёмника или для оформления нового будет символьный дисплей. На рис. 2 представлен вариант схемы цифрового FM радиоприёмника с 2-хстрочным символьным дисплеем WH1602 на базе контроллера HD44780.
Рис. 2.
На этой схеме индикатор и микроконтроллер питаются от источника +5 В, а радиомодуль от +3,3 В, поэтому для связи с радиомодулем необходимо установить преобразователи уровня на транзисторах VT1 и VT2. Основные функции программы МК такие же, как и в предыдущей схеме. В моём индикаторе был зашит лишь латинский шрифт, поэтому и вывод сообщений на дисплей был возможен лишь латиницей. Но при желании можно, конечно, использовать и дисплей с кириллицей. В конце наименования таких дисплеев присутствует индекс СТ или СР.
Объём кода управляющей программы для радиоприёмника, представленного на рис. 1, получился немногим более 2-х килобайт, поэтому у меня возникла идея применить микроконтроллер ATtiny2313, имеющий меньшие размеры памяти. Для этого программу пришлось ужать за счёт сокращения шрифтов, в остальном все функции радиоприёмника сохранены. В программе используется программный интерфейс I2C. Вывод сообщений на экран такой же, как и в схеме на рис.1. Из набора шрифтов удалены знаки препинания и др. вспомогательные знаки, а также оставлен набор букв лишь одного алфавита. На удобстве пользования это почти не отразилась, просто теперь нельзя одновременно видеть не экране латинские и русские буквы. Памяти МК хватило для записи названий и частот 14-ти местных радиостанций. Схема такого варианта приёмника приведена на рис.3.
Рис. 3.
Питание приёмника, как и на схеме по рис. 1, подаётся от стабилизатора на напряжение 3,3 В. По ссылкам ниже можно скачать архивы с прошивками для вывода сообщений на латинице и на кириллице.
Ну и для комплекта, на рис. 4 приведена схема FM-радиоприёмника на микроконтроллере ATtiny2313 с ЖК индикатором WH1602 на базе контроллера HD44780.
Рис. 4.
По ссылке ниже можно скачать архив с файлами для этого варианта радиоприёмника. При программировании МК ATtiny2313 необходимо запрограммировать такие же фьюзы, что и для ATMega8, а именно: CKSEL0, CKSEL1, CKSEL3 и SUT0. Привожу скриншот из программы CodeVision на рис.5.
Рис. 5.
Открыв файл проекта в программе Proteus, вы можете понаблюдать каким образом выводится текстовая информация на дисплей. Все схемы тестировались на макете и показали свою полную работоспособность. Печатная плата не разрабатывалась.
Каждая из приведённых схем может, конечно, работать и без дисплея, если в радиоприёмнике недостаточно места для его установки, или если радиолюбителю не захочется сверлить корпус радиоприёмника. В таком случае можно даже оставить всего две кнопки управления, например, лишь кнопки автонастройки в виде микровыключателей и механически связать их с верньерным устройством. При этом внешний вид радиоприёмника никак не пострадает.
Некоторые части ассемблерного кода радиоприёмника, например, драйверы и шрифты, взяты мной из открытых источников в том числе на различных форумах. В дальнейшем они были исправлены, дополнены и адаптированы к конкретному использованию.
Варианты радиоприёмников с МК ATmega8 имеют большой запас свободной памяти программ, представляя возможность для дальнейшего его усовершенствования. К примеру, можно добавить часы, термометр, дистанционное управление и пр.
Прикрепленные файлы:
- Nokia & ATMega8.zip (388 Кб)
- Nokia & ATtiny2313 lat.zip (332 Кб)
- Nokia & ATtiny2313 rus.zip (333 Кб)
- WH1602 & ATMega8.zip (187 Кб)
- WH1602 & ATtiny2313.zip (181 Кб)