TinyPocketRadio – это простой ЧМ стерео радиоприемник, сделанный на основе микросхем ATtiny13A и RDA5807MP. Он питается от батарейки CR2032 таблеточного типа и может работать непосредственно на 32-омные наушники, подключаемые аудио разъемом 3.5 мм. Размеры печатной платы составляют 38 × 23 мм. На плате имеются выключатель питания и три кнопки: «Канал+», «Громкость–» и «Громкость+».
Аппаратная часть
Схема тюнера изображена на Рисунке 1. Все файлы проекта можно загрузить из источника [1].
![]() |
||
Рисунок 1. | Схема тюнера TinyPocketRadio. |
Недорогой однокристальный ЧМ стерео тюнер RDA5807MP, предназначенный для приема радиовещательных станций, отличается хорошей избирательностью по ПЧ и содержит в себе полностью интегрированный синтезатор, декодер RDS/RBDS и декодер MPX. Тюнер выполнен по КМОП технологии, поддерживает несколько интерфейсов и требует минимального количества внешних компонентов. Все это делает его очень подходящим для портативных устройств.
Программная часть
Реализация протокола I2C
Исходный код программы доступен по ссылке [2]. Протокол I2C реализован методом программной эмуляции. Алгоритм специально разрабатывался под ограниченные ресурсы ATtiny10 и ATtiny13, но должен работать и на некоторых других контроллерах AVR. Благодаря низкой тактовой частоте процессора для правильного отсчета времени не требуется никаких задержек. В целях экономии ресурсов реализованы только основные функциональные возможности, необходимые для этого приложения.
Управление тюнером RDA5807
Микросхема ЧМ тюнера RDA5807MP управляется микроконтроллером ATtiny по шине I2C. Тюнер имеет шесть 16-разрядных регистров записи (адреса 0x02 – 0x07) и шесть 16-разрядных регистров чтения (адреса 0x0A – 0x0F). Поскольку считывать какие-либо данные с устройства для этого приложения не требуется, используются только регистры, доступные для записи. Доступ к регистрам RDA5807 для записи может осуществляться двумя методами: последовательным, при котором запись всегда происходит, начиная с адреса 0x02, и индексным, при котором сначала передается адрес регистра, а затем содержимое. Оба метода определяются разными адресами I2C. При передаче содержимого 16-разрядного регистра первым посылается старший бит. RDA5807 управляется установкой или очисткой определенных битов в соответствующих регистрах. Подробную информацию о значениях битов каждого регистра можно найти в техническом описании. Текущее содержимое регистров сохраняется в массиве RDA_regs.
Главная функция
Для экономии энергии в коде используется функция снижения потребляемой мощности в спящем режиме. При каждом нажатии кнопки процессор пробуждается прерыванием по изменению состояния входа, передает соответствующую команду через I2C на RDA5807 и снова засыпает.
Компиляция и загрузка
Ввиду отсутствия на плате разъема внутрисхемного программирования (ICSP), запрограммировать ATtiny нужно либо перед запайкой, используя адаптер для корпусов SOIC-8, либо после пайки с помощью зажима для EEPROM. В этом может помочь AVR Programmer Adapter.
При использовании Arduino IDE
- Удостоверьтесь, что ядро MicroCore [3] установлено.
- Пройдите Tools -> Board -> MicroCore и выберите ATtiny13.
- Откройте Tools и выберите следующие опции платы:
- Clock: 1.2 MHz internal osc.
- BOD: BOD disabled
- Timing: Micros disabled
- Подключите программатор к ПК и ATtiny.
- Перейдите к Tools -> Programmer и выберите свой внутрисхемный программатор (то есть, USBAsp).
- Перейдите к Tools -> Burn Bootloader для записи фьюзов.
- Откройте скетч TinyPocketRadio и кликните Upload.
При использовании предварительно скомпилированного hex-файла
- Удостоверьтесь, что консольная программа AVRDude [4] установлена.
- Подключите программатор к ПК и ATtiny.
- Откройте терминальную программу.
- Перейдите в папку с hex-файлом.
- Выполните следующую команду (при необходимости замените «usbasp» на имя того программатора, который используете вы):
avrdude -c usbasp -p t13 -U lfuse:w:0x2a:m -U hfuse:w:0xff:m -U flash:w:main.hex
Ссылки
- Файлы проекта TinyPocketRadio
- Исходный код программы TinyPocketRadio
- Комплект MicroCore
- Консольная программа AVRDude