STM8 + ASSEMBLER: Драйвер FM-приемника RDA5807m для микроконтроллера STM8S103F3 (обновлено 14 августа)

разделы: STM8, RDA5807M, дата: 29 декабря 2019г.

В статье пошагово описывается процесс написания драйвера для FM-приемника RDA5807m, где в качестве микроконтроллера используется STM8S103F3, а в качестве языка программирования - ассемблер со средой программирования STVP.

Структурно статью можно разделить три части. С одной стороны это статья об ассемблере STM8, в частности здесь имеются замечания об использовании косвенной адресации и использования указателя стека в качестве индексного регистра. Собственно, вся статья построена на ассемблерном коде STM8. С другой стороны, рассматривается периферия STM8, в частности в статье описывается создание UART приёмо-передатчика для микроконтроллера STM8. Это может быть использовано для управления коммуникационными модулями с UART интерфейсом, навроде: esp8266, esp32, rda5981 и пр. С третьей стороны, в статье главной темой является RDA5807m. Здесь ему, правда, уделяется всего одна глава, т.к. сам по себе чип несложный.

Совершенно другое дело - система передачи данных RDS (Radio Data System). Я смог добиться лишь декодирования RDS - текста. Это восемь символов латиницей, через которые передается название станции. К сожалению, я не смог найти станцию которая бы передавала текущее время, но я все-равно планирую рассказать об этой возможности во второй статье (устарело, сейчас чтение RDS уже реализовано).

Данная статья является первой частью, в ней рассматривается лишь минимальный драйвер RDA5807m, который годится лишь для проверки модуля. Полноценный драйвер я планирую описать во второй статье, кроме того, там должно быть много материала по RDS. Это будут выдержки из стандарта: "EN50067. Specification of the radio data system (RDS) for VHF/FM sound broadcasting in the frequency range from 87,5 to 108,0 MHz. April 1998. с описанием формата, а также логи принятых данных.

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

Полезные материалы по теме статьи:

  1. Статья: "STM8S + SDCC: Программирование БЕЗ SPL. Интерфейсы: UART в режиме передатчика, АЦП в режиме однократного замера, I2C в режиме мастера на примере DS1307/DS3231"
  2. Статья: "STM8 + STVD + ASSEMBLER: Быстрый старт"
  3. Обзорная статья по RDA5807m: "Arduino: FM-радиомодуль на микросхеме RDA5807m"

Содержание:

I. Реализация командного интерфейса посредством UART

  1. Схема подключения
  2. Базовый проект, реализация программы эхо/echo для UART интерфейса
  3. Использование косвенной адресации
  4. Отладка прерывания
  5. Реализация командного интерфейса

II. Драйвер управления RDA5807m

  1. Минимальный драйвер для управления FM-приемником RDA5807m
  2. Чтение частоты станции и переключение тюнера на заданную частоту

III. Драйвер с переключением диапазонов и интервалов частот

  1. Вводная часть
  2. Порядок работы с драйвером
  3. Использование ОЗУ дайвером
  4. Длинные переходы и реализация оператора case на ассемблере STM8
  5. Реализация переключения диапазонов и интервалов
  6. Функции шумоподавления

IV. Прием RDS данных (добавлено 25 июня 2020г.)

  1. Работа над ошибками (борьба с аппаратным багом программными средствами)
  2. Что такое RDS и как его читать с помощью RDA5807m
  3. Преобразование даты из MJD формата в дни, года и месяцы
  4. Математическая библиотека для 32/24 битных операций. Операции сложения, вычитания и умножения
  5. Математическая библиотека для 32/24 битных операций. Операция деления
  6. Подпрограмма преобразования даты
  7. Реализация чтения RDS сообщений

V. Подключение энкодера и дисплея к драйверу

  1. Рефакторинг кода драйвера (добавлено 15 июля 2020г.)
  2. Автопоиск (добавлено 14 августа 2020г.)

Посмотреть исходники, или скачать скомпилированные прошивки можно с портала GitLab по следующей ссылке: https://gitlab.com/flank1er/stm8_rda5807m.

Читать дальше

Arduino: FM-радиомодуль на микросхеме RDA5807m

разделы: Arduino, RDA5807M, дата: 2 апреля 2017г.

Данный модуль на Али торгуется по цене около 20р, и представляет собой полноценный сканирующий радиоприемник FM диапазона с управлением по I2C интерфейсу.

Здесь я расскажу как по-быстрому проверить его работоспособность с помощью Arduino, а также поделюсь той информацией о чипе, что мне известна на данный момент.

    На официальном сайте производителя заявлены следующие возможности чипа:
  1. CMOS single-chip fully-integrated FM tuner
  2. Low power consumption
  3. Support worldwide frequency band
  4. Support flexible channel spacing mode
  5. Support RDS/RBDS
  6. Digital low-IF tuner
  7. Fully integrated digital frequency synthesizer
  8. Autonomous search tuning
  9. Support 32.768KHz crystal oscillator
  10. Digital auto gain control (AGC)
  11. Digital adaptive noise cancellation
  12. Programmable de-emphasis (50/75 μs)
  13. Receive signal strength indicator (RSSI) and SNR
  14. Bass boost
  15. Volume control and mute
  16. Line-level analog output voltage
  17. 32.768 KHz 12M,24M,13M,26M,19.2M,38.4MHz Reference clock
  18. Only support 2-wire bus interface
  19. Directly support 32Ω resistance loading
  20. Integrated LDO regulator
  21. MSOP-10pins

Говоря по-русски, здесь нам обещают управление через I2C интерфейс(400KHz). Поддержку приема текстовых сообщений - RDS/RBDS(последний формат используется исключительно в США). Работа от часового кварца. Возможность прямого подключения 32-омных(плеерных) наушников. Индикация уровня сигнала - RSSI. Несколько диапазонов FM: Западная Европа, Восточная Европа, Япония, всемирный диапазон). Частотная коррекция(de-emphasis). Авто-регулировка усиления.

Чип предназначен для использования в сотовых телефонах, автомагнитолах, планшетах, ноутбуках, MP3 и MP4 плеерах.

Однако скачать datasheet с официального сайта не получится. Это видимо особенность всего китайского бизнеса(попробуйте найти datasheet на ESP8266). Неофициальное руководство на английском можно скачать например здесь.

Читать дальше