Подключение rda5807m к arduino

Введение

Мы собираемся создать FM-радиоприемник в стиле ар-деко. Дизайн этого радио основан на впечатляющем радиоприемнике AWA 1935 года. Можно найти фото этого старого радио в Интернете. Дизайн этого радио очень красивый, так что сделать свой радиоприемник в аналогичном стиле — отличный вызов. Ушел ровно месяц на то, чтобы реализовать такой проект с нуля, но повторить результат теперь каждый сможет буквально за один день.

В уроке используется ЖК-дисплей Nokia 5110 для отображения частоты, которую мы слушаем. Используется поворотный регулятор для изменения частоты и другая ручка для увеличения или уменьшения громкости. На фото выше видно, что на ЖК-дисплее FM-радио Ардуино используется шрифт в стиле ар-деко. Кроме того, если мы прослушиваем одну и ту же радиостанцию ​​более 5 минут, радиостанция автоматически сохранит ее в памяти, поэтому при следующем включении радиостанции она автоматически настроится на частоту, которую мы использовали ранее. Радио также имеет встроенную литиевую батарею и соответствующее зарядное устройство, поэтому оно может работать от батарей в течение нескольких дней.

Качество звука проекта довольно хорошее. Используется небольшой динамик 3 Вт с усилителем малой мощности. Радио звучит хорошо, а выглядит еще лучше. Давайте теперь посмотрим, какие детали нужны для создания этого проекта.

Собранный радиоприемник

Ниже представлен собранный на макетной плате проект радиоприемника – возможно, не такой аккуратный, каким мог бы быть (хорошо, здесь полный бардак), но полностью рабочий. Конечно, качество его работы можно улучшить только с помощью окончательной сборки.

Макет радиоприемника на Arduino

Программное обеспечение для запуска приемника доступно для загрузки ниже. Оно снабжено комментариями и, надеюсь, легко понятно и при необходимости легко модифицируется. Основной цикл программы очень прост. Он (1) проверяет и отображает любое изменение частоты приемника и (2) проверяет, выполнено ли нажатие клавиши, и, если да, выполняет соответствующую команду. Остальная часть программы состоит из вспомогательных функций.

Я был очень впечатлен качеством приема с учетом того, что это просто макет. В FM всё очень хорошо. На средних волнах тоже всё нормально, и я смог принять довольно много сигналов на коротких волнах. Тем не менее, качество приема может быть улучшено за счет использования нормальных антенн.

Прошивка

Отдельно стоит остановиться на прошивке. Она написана на C++ и мы распространяем её по лицензии GPLv3: https://github.com/xtremespb/fm_receiver.Я практически не разрабатывал на C/C++, поэтому (вероятно) код далёк от идеала и может содержать ошибки, но GPL на то и GPL, чтобы можно было его дорабатывать сообществом Текущие возможности прошивки включат в себя: — Ручную и автоматическую настройку станций — RDS — Управление громкостью — Включение режима усиленных басов — Включение и отключение подсветки дисплея — Отображение и динамическая визуализация уровня сигнала В следующей, четвёртой по счёту ревизии, мы сделаем ещё несколько полезных «фишек»: подключим левый и правый каналы к аналоговым входам на МК, что позволить «визуализировать» поступающий аудиосигнал. Кстати, возможности устройства не ограничиваются радио! Никто не мешает, например, написать какую-нибудь игру (интереса ради я сделал старый добрый Arkanoid) или другую программу, использующую возможности платы.

Шаг 5. Собираем всё вместе

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

Все комплектующие нашего FM-радио Ардуино спаяны согласно схеме, которая была приложена выше. Сначала паяется Arduino Pro Mini и загружается в неё код, используя программатор FTDI. Следующий шаг — создание источника питания для схемы. Использовался аккумуляторный шилд Wemos, очень удобный, который может заряжать аккумулятор 18650 и повышать его напряжение до 5 В. Снимаем разъем аккумулятора с шилда и припаиваем провода от разъема аккумулятора 18650. Далее припаиваем переключатель к выходу 5V.

Затем паяем все остальные детали одну за другой. Это примерно на пару часов работы. На этот раз не используется аудиокабель на аудиовыходе радиомодуля FM, но вместо этого припаиваются провода внизу платы. Сигнал теперь может идти в усилитель для усиления. Также добавляем конденсатор 330 мкФ к шине питания на макетной плате. Это дополнение уменьшило шум на радиосигнале. После того, как все пайки будут сделаны, можно протестировать проект.

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

Программирование Arduino

Микросхема Si в этом проекте является ведомым устройство I2C, имеющим фиксированный адрес 0x11; при этом ведущим устройством (мастером) является плата Arduino. Однако скорость обмена информацией по I2C у этой микросхемы относительно медленная: максимальная поддерживаемая скорость 50 кГц. Кроме того, во время процедуры включения питания скорость не должна превышать 10 кГц. Чтобы удовлетворить эти требования, мы должны явно установить у Arduino скорость I2C, которая, как правило, слишком велика для Si4844-A10. К счастью, благодаря большому количеству документации по функциям I2C Arduino, мы можем легко выполнить необходимые изменения.

В принципе, скорость I2C для наших целей определяется в программном обеспечении Arduino двумя переменными. Эти переменные – это и . Биты 0 и 1 управляют предделителем, который работает со значением для установки скорости I2C. Скорость (тактовая частота) передачи по I2C рассчитывается по формуле:

Частота = Тактовая частота процессора / (16 + (2 * () * (предделитель))

Arduino Pro mini 3,3В работает на частоте 8 МГц. Чтобы установить скорость I2C на 10 кГц, мы используем значение 98 и установим предделитель в значение 4 (путем установки в 1 только бита 0 ). Таким образом,

8 000 000 / (16 + (2 * 98 * 4 )) = 10 000 или 10 кГц

Чтобы установить скорость I2C на 50 кГц, мы используем значение 18 и установим предделитель в значение 4 (путем установки в 1 только бита 0 ). Таким образом,

8 000 000 / (16 + (2 * 18 * 4)) = 50 000 или 50 кГц

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

Еще один важный момент, связанный с программирование, заключается в том, что нам в коде нужно использовать подпрограмму внешнего прерывания. Мы используем на Arduino, и, когда Si4844-A10 установит уровень на этом выводе в 1, выполнится простая функция, которая «привязана» к этому прерыванию. Всё, что делает эта функция, это изменяет значение переменной флага, которая может быть проверена и изменена в других частях программы. Si4844-A10 будет запускать прерывания (т.е. подавать уровень логической единицы на вывод INT) при определенных условиях, в основном в случае изменения сопротивления потенциометра настройки. Так Si4844-A10 сообщает Arduino, что вы повернули ручку настройки, и что необходимо обновить данные на дисплее.

Программирование RDA5807M

Давайте начнем с простенького скетча. Если вы попробуете управлять RDA5807M из моей программы, то обнаружите, что для того чтобы заставить его работать достаточно установить несколько битов: ENABLE, DHIZ, DMUTE, SEEK. Установка последнего запустит поиск радиостанции. Эти же действия можно выполнить программно при помощи следующего скетча:

voidsetup() {   Wire.begin();   setRegister(0x02, 0xC101);  }  voidloop() { }  void setRegister(uint8_t reg, const uint16_t value) {   Wire.beginTransmission(0x11);   Wire.write(reg);   Wire.write(highByte(value));   Wire.write(lowByte(value));   Wire.endTransmission(true); }

Подключите RDA5807M к Ардуино по приведенной ранее схеме и залейте в нее скетч. Приемник выполнит поиск и настроится на первую найденную радиостанцию. Бит Tune при этом сбрасывается. Нажатие кнопки Reset на Ардуино и повторное выполнение функции setup будут снова устанавливать этот бит, инициируя поиск следующей станции. Работает? Двигаемся дальше. В примере скетча выше мы записали в регистр 02h заранее определенное значение. На деле такое требуется редко, разве что для инициализации некоторых регистров. В основном же значения регистров формируются в процессе работы программы при изменении отдельных битов. В таких случаях удобно использовать константы, содержащие номера этих битов или маски для их установки. Ниже приведен пример такого скетча. Он позволяет настроиться на конкретную радиостанцию, установить громкость и получить RSSI.

                      uint8_t volume = 1;  uint16_t freq = 1073;  uint16_t reg02h, reg03h, reg05h, reg0Bh;  voidsetup() {   Serial.begin(9600);   Wire.begin();      reg02h = RDA5807M_FLG_ENABLE | RDA5807M_FLG_DHIZ | RDA5807M_FLG_DMUTE;   setRegister(RDA5807M_REG_CONFIG, reg02h);         reg02h |= RDA5807M_FLG_BASS;   setRegister(RDA5807M_REG_CONFIG, reg02h);               reg03h = (freq - 870) << RDA5807M_CHAN_SHIFT;    setRegister(RDA5807M_REG_TUNING, reg03h | RDA5807M_FLG_TUNE);         reg05h = getRegister(RDA5807M_REG_VOLUME);    reg05h &= ~RDA5807M_VOLUME_MASK;    reg05h |= volume << RDA5807M_VOLUME_SHIFT;    setRegister(RDA5807M_REG_VOLUME, reg05h); }  voidloop() {      reg0Bh = getRegister(RDA5807M_REG_RSSI);   uint8_t RSSI = (reg0Bh & RDA5807M_RSSI_MASK) >> RDA5807M_RSSI_SHIFT;   Serial.print("RSSI = ");   Serial.print(RSSI);   Serial.println(" (0-min, 127-max)");   delay(500); }  void setRegister(uint8_t reg, const uint16_t value) {   Wire.beginTransmission(0x11);   Wire.write(reg);   Wire.write(highByte(value));   Wire.write(lowByte(value));   Wire.endTransmission(true); }  uint16_t getRegister(uint8_t reg) {   uint16_t result;   Wire.beginTransmission(RDA5807M_RANDOM_ACCESS_ADDRESS);   Wire.write(reg);   Wire.endTransmission(false);   Wire.requestFrom(0x11, 2, true);   result = (uint16_t)Wire.read() << 8;   result |= Wire.read();   return result; }

В этом примере значения регистров получаются установкой отдельных разрядов. Для этого используются определенные в начале скетча флаги и маски. Я описал несколько из них для примера, остальные добавляются по аналогии. Чтобы настроить RDA5807M на интересующую частоту необходимо установить значения BAND и SPACE и затем изменять только значение CHAN. Итоговая частота определяется по формуле:F = BAND + CHAN * SPACE. В скетче используются определенные по умолчанию BAND и SPACE (87..108МГц  и 100кГц соответственно). По ним можно определить значение, которое должно быть записано в биты CHAN для получения интересующей частоты. Не забывайте при записи CHAN устанавливать также бит TUNE. Для изменения громкости значение регистра 05h считывается из RDA5807M в переменную. Затем осуществляется сброс битов VOLUME. И уже после этого можно устанавливать новое значение громкости и записывать результат в регистр. Для получения RSSI выполняются обратные действия: в считанном из регистра 0Bh значении сбрасываются все биты, кроме содержащих RSSI. Затем результат сдвигается вправо, чтобы младший бит RSSI оказался в младшем разряде переменной. Так мы получим нужное нам значение. Теперь, когда описаны основные приемы управления RDA5807M, можно приступить к программированию. Нужно лишь определиться с функционалом и интерфейсом.

Flo Rida — Low (feat. T-Pain) [from Step Up 2 The Streets O.S.T. / Mail On Sunday] (Official Video)

  • Order:
  • Duration: 3:51
  • Uploaded Date: 27 Oct 2009
  • views: 94568373

The official video for «Low» by Flo Rida featuring T-Pain from ‘Step Up 2 The Streets O.S.T. / Mail On Sunday’.

Subscribe for more official content from Atlant…
The official video for «Low» by Flo Rida featuring T-Pain from ‘Step Up 2 The Streets O.S.T. / Mail On Sunday’.

Subscribe for more official content from Atlantic Records:
https://Atlantic.lnk.to/subscribe

Follow Flo Rida
https://facebook.com/officialflo

https://youtube.com/user/officialflo
http://instagram.com/official_flo
http://officialflo.com/

Follow Atlantic Records
https://facebook.com/atlanticrecords
https://instagram.com/atlanticrecords

http://atlanticrecords.com

The official Atlantic Records YouTube Channel is home to the hottest in hip-hop, rock, pop, R&B, indie, musicals and soundtracks. With over 70 years of global recorded music history, Atlantic Records’ legacy and passion for artistry continues with Top 40 hitmakers like Wiz Khalifa, Sean Paul, Trey Songz, Bruno Mars, Charlie Puth, Janelle Monáe, and B.o.B.

Atlantic Records prides itself for working on Motion Picture Soundtracks, such as “The Greatest Showman”, “Suicide Squad” and “The Fate of the Furious.” As well as Musical Soundtracks including “Dear Evan Hansen,” and Grammy and Tony Award Winning “Hamilton”.

It is home to world-renowned record labels representing music from every genre, including Asylum, Big Beat, Canvasback, Elektra, Fueled By Ramen, Rhino, Roadrunner, and Sire.

Subscribe for the latest official music videos, official audio videos, performances, bts and more from our artists and projects.
https://Atlantic.lnk.to/Subscribe

#FloRida #Low #TPain #StepUp2 #TheStreets #OST #MailOnSunday #OfficialVideo #AtlanticRecords #Atlantic

Sing Along At Home with Your Favorite The Greatest Showman Soundtracks ➤ https://bit.ly/AtlanticSing
Best Sing Along Songs at Home from Atlantic Records ➤ https://bit.ly/AtlanticSingAlong
Home Workout Music from Atlantic Records ➤ https://bit.ly/AtlanticWorkOut
Romantic Music To Listen To At Home from Atlantic Records ➤ https://bit.ly/AtlanticRomantic
Work From Home Music from Atlantic Records ➤ https://bit.ly/AtlanticWork
https://wn.com/Flo_Rida_Low_(Feat._T_Pain)_From_Step_Up_2_The_Streets_O.S.T._Mail_On_Sunday_(Official_Video)

Member Data Documentation

RADIO::_band
protectedinherited

Last set band.

bool RADIO::_bassBoost
protectedinherited

Last set bass Boost effect.

bool RADIO::_debugEnabled
protectedinherited

Set by and controls debugging functionality.

RADIO::_freq
protectedinherited

Last set frequency.

RADIO::_freqHigh
protectedinherited

Highest frequency of the current selected band.

RADIO::_freqLow
protectedinherited

Lowest frequency of the current selected band.

RADIO::_freqSteps
protectedinherited

Resulution of the tuner.

bool RADIO::_mono
protectedinherited

Last set mono effect.

bool RADIO::_mute
protectedinherited

Last set mute effect.

RADIO::_sendRDS
protectedinherited

Registered RDS Function that is called on new available data.

bool RADIO::_softMute
protectedinherited

Last set softMute effect.

uint8_t RADIO::_volume
protectedinherited

Last set volume level.

const uint8_t RDA5807M::MAXVOLUME = 15

max volume level for radio implementations.

uint16_t RDA5807M::registers
private
  • src/RDA5807M.h
  • src/RDA5807M.cpp

Low (Remix 2021) — Flo Rida & T-Pain — Tik Tok 0:01

  • Order:
  • Duration: 3:43
  • Uploaded Date: 20 Apr 2021
  • views: 6852677

#hieumusic #nhachottiktok #tiktok

Chúc các bạn nghe nhạc vui vẻ
Nhớ đăng ký kênh ủng hộ mình nha

Thanks for watching

Follow Flo Rida
https://facebook.com/off…
#hieumusic #nhachottiktok #tiktok

Chúc các bạn nghe nhạc vui vẻ
Nhớ đăng ký kênh ủng hộ mình nha

Thanks for watching

Follow Flo Rida
https://facebook.com/officialflo​
https://twitter.com/official_flo​
https://youtube.com/user/officialflo​
http://instagram.com/official_flo​
http://officialflo.com/​

Follow Atlantic Records
https://facebook.com/atlanticrecords​
https://instagram.com/atlanticrecords​
https://twitter.com/AtlanticRecords​
http://atlanticrecords.com​

Firmware

Built with WinAVR-20100110 (latest version).

  • mega328_FM_20190223.zip — initial release
    • settings stored in internal EEPROM (like in my TEA5767 project)
    • remote IR control, mapped buttons of $1 «Car mp3» ebay miniature remote controller working with NEC standard
      • PLAY/PAUSE button = on/off
      • PREV/NEXT buttons = seek down/up
      • VOLUME +/-: 15 levels
      • EQ = force mono
    • as on/off state is stored in configuration, radio can be used without remote controller if station does not need to be changed (just by switching on/off power supply)
    • plenty of debug logging through UART/USB (baudrate = 115200, 8N1), more can be enabled with «LOCAL_DEBUG» macros in C files
  • mega328_FM_20190515.zip
    • added station memory (10 stations switched with buttons 0…10 or with CH-/CH+)
    • station programming sequence: CH button, 0…9 button, CH button
    • added sleep timer function: while ON: button + 1…9 button sets sleep timer to 5…45 minutes
    • added function for muting advertisements: [Play/Pause] button (to set radio to OFF state) + button + 1…9 button mutes radio for 1…9 minutes

Добавление дисплея

Теперь, когда у нас есть устройство ввода, нам необходима возможность отображать настройки радиоприемника. Я не смог придумать ничего лучше, чем использовать дисплей от старых мобильных телефонов Nokia 5110/3310.

Дисплей Nokia 5110/3310

При работе с этим дисплеем необходимо учитывать два важных момента. Во-первых, существует несколько разновидностей этих дисплеев, и у них могут быть разные распиновки. Вы должны проверить распиновку на своем дисплее, убедиться, что он на самом деле работает от 3,3 В, и проверить правильность подключения к Arduino Pro Mini. Во-вторых, поскольку все входы/выходы Arduino используют напряжение 3,3 В, мне не пришлось использовать понижающие резисторы, которые вы обычно видите, когда эти дисплеи используются 5-вольтовыми платами Arduino, например, Uno.

Подключение дисплея Nokia 5110/3310 к Arduino
Вывод дисплея / Назначение Вывод Arduino или точка на схеме
1-RST D3
2-CE D4
3-DC D5
4-DIN D6
5-CLK D7
6-VCC Vcc (3.3v)
7-LIGHT GND
8-GND GND

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

На рисунке ниже показан заполненный данными дисплей радиоприемника.

Дисплей Nokia 5110/3310 при использовании в радиоприемнике (на скриншоте некорректно показаны единицы измерения частоты mHz, в прошивке это исправлено MHz)

Начиная с левого верхнего угла, мы показываем:

  • строка 1 – режим (AM/FM/SW) и номер диапазона;
  • строка 2 – частотный диапазон;
  • строка 3 – уровни громкости и баса/тембра;
  • строка 4 – текущая частота (МГц или кГц);
  • строка 1 – индикаторы стерео (только для FM) и выключения звука (если активно).

Разумеется, эта информация постоянно обновляется, чтобы показывать изменения в настройках или вводе с клавиатуры.

Приемник RDA5807

RDA5807 представляет собой однокристальный модуль (микросхему) FM стерео радиоприёмника с интегрированным в него синтезатором частоты. Модуль способен работать в диапазоне частот 50 – 115 МГц, обеспечивать управление уровнем громкости и владеть информацией об уровне принимаемого сигнала. Модуль содержит кварцевый генератор на 32.768 КГц, цифровой усилитель и другие компоненты. Структурная схема модуля RDA5807M представлена на следующем рисунке.

Модуль построен на цифровой архитектуре и включает малошумящий усилитель, работающий в диапазоне от 50 до 115 МГц. Также модуль содержит программируемый усилитель на ПЛИСах (PGA), АЦП (аналого-цифровой преобразователь) высокого разрешения и высокоточный ЦАП (цифро-аналоговый преобразователь). Амплитудный ограничитель на входе модуля предотвращает его перегрузку (по уровню) и ограничивает число интермодуляционных составляющих, создаваемых соседними каналами. Усилитель на ПЛИСах усиливает входной сигнал, который затем преобразуется в цифровую форму с помощью АЦП. Ядро цифровой обработки сигналов модуля управляет выбором каналов, демодуляцией FM сигналов и разуплотнением стерео сигнала. Назначение контактов (распиновка) микросхемы RDA5807 представлено на следующем рисунке.

Питающее напряжение для модуля составляет от 1.8 до 3.3V. Подключить модуль RDA5807 к микроконтроллеру можно по интерфейсу I2C. Модуль имеет 13 16-битных регистров, каждый из которых выполняет свою определенную функцию. Адреса регистров начинаются с 00H и заканчиваются 0FH. Во всех 13 регистрах некоторые биты зарезервированы. Регистры выполняют такие функции как изменение уровня, смена канала и т.д.

Модуль проблематично использовать для подключения к нему соединительных проводов, поэтому мы использовали перфорированную плату, чтобы с ее помощью и олова сделать контакты для подключения проводов как показано на выше приведенном рисунке.

Характеристики RDA5807M

Сразу даю ссылку на даташит: RDA5807M_datasheet_v1.1, наиболее полную информацию о характеристиках RDA5807M вы можете найти в нем. Я перечислю некоторые из них:

  • Напряжение питания 2.7 — 3.3В
  • Потребляемый ток (при напряжении питания 3В):
    • в рабочем режиме — не более 20мА
    • в режиме сна — не более 15мкА
  • Диапазон принимаемых частот 50 — 115МГц
  • Выбираемый шаг изменения частоты: 200кГц, 100кГц, 50кГц, 25кГц
  • Выбираемый источник тактового сигнала: внешний или внутренний генератор (для внутреннего генератора требуется резонатор 32.768кГц)
  • Поддержка RDS/RBDS
  • Управление по шине I2C
  • Возможность прямого подключения нагрузки от 32Ом

Диапазон напряжения питания не самый удобный, например, от лития без стабилизации запитать не получится. Зато наушники можно подключать прямо к выводам микросхемы, дополнительное усиление не требуется. Также можно отметить небольшой потребляемый ток микросхемы, что позволяет запитывать ее от цифрового вывода микроконтроллера (по крайней мере AVR) в тех случаях, когда требуется отключение питания радио в целях энергосбережения.

Intro to the Arduino Arduino FM Radio project

Hello, guys, I am Nick and welcome to educ8s.tv a channel that is all about DIY electronics projects. In this channel, I share everything about the projects I build to help you build similar projects or inspire you to start building things because it is easy, fun and creative. Subscribe to the channel now if you do not want to miss any future video.

In this video, we are going to build this. A simple Arduino FM Radio receiver on a breadboard. Let’s listen to it for a few seconds … As you can see the radio is working fine and we can hear some music coming out of it. I am transmitting some YouTube safe tracks using this inexpensive FM transmitter at this frequency. I am using the Nokia 5110 LCD display, to display the selected frequency, the signal strength, and a stereo icon if we are receiving stereo sound. The brains of the project are the small and inexpensive Arduino Nano. We can control the volume of the speaker using this potentiometer, and we can change the Radio frequency using this potentiometer. It is a fascinating project and relatively easy to build. Let’s see how to build it.

Library Installation

The easiest method to install this library is via your Arduino IDE. All you have to do is:

  1. Select Tools menu;
  2. Select Manage Libraries option;
  3. In the text box (top windows), type PU2CLR or RDA5807;
  4. Select the PU2CLR RDA5807.

The images below show how you can install this library via your Arduino IDE from Manage Libraries tool.

Installing via the repository

With this approach, you will have the most current version of the library. However, it may not be the most stable version. This is because the current version is always in development. Prefer releases. Do you need some old version (release) of this library? If yes, check here.

First, you have to download this library in zip format.
After, unzip the RDA5807-master.zip file in your Arduino Library folder.

  • On Windows: «My Documents\Arduino\libraries»
  • On MAC OS: ˜/Documents/Arduino/libraries
  • On Linux: ˜/Documents/Arduino/libraries