Вседиапазонный приемник на ардуино

Еще одно FM радио на RDA5807 под управлением Ардуино

На эту тему было много толковых публикаций, однако я сделал все по-своему, вдобавок создал трехмерную модель корпуса с практичным и оригинальным дизайном. В результате получился вполне законченный проект, достаточно простой для повторения начинающим любителем электроники. Счастливый владелец 3D принтера сможет похвастаться красивой самоделкой, способной конкурировать с фабричной продукцией.

Хочешь разорить друга — подари ему фотоаппарат. Хочешь заставить раскошелиться радиолюбителя — подкинь ему ссылку на китайский модуль RDA5807.

Крохотный квадратик размером около сантиметра и ценой около двадцати рублей. На удивление, внутри вполне приличный цифровой радиоприемник с автопоиском радиостанций и умеющий читать RDS.

Скажу честно: обольщаться на дешевизну модуля RDA5807 не стоит, чтоб запустить эту прелесть, нужно все остальное: ардуинка, усилитель с динамиками, и маленький дисплейчик для большой красоты. Вместо батареек просится аккумулятор, значит добавляем в проект контроллер заряда от USB. Скетч можно отладить на макетной плате, но для готового устройства нужен приличный корпус. Внешнее оформление — вопрос очень творческий, но к нам на помощь приходит технология 3D печати.

Стараемся сделать все максимально просто и дешево. Ардуинку берем такую:

дисплей — вот такой:

питание от аккумулятора 18650, а для него такой вот контроллер заряда.

Усилитель низкой частоты — стандартный элемент для очень многих проектов, а потому имеем в запасе вот такие самодельные модули.

Полная электрическая схема получается вот такой.

Вместо дефицитной советской микросхемы К174УН14 применяем доступную TDA2003. Диод D1 нужен, чтобы при максимальном заряде аккумулятора напряжение на модуле приемника оставалось ниже четырех вольт. Надо заметить, RDA5807 не перегорает даже от пяти вольт, но на повышенном напряжении либо вообще не работает, либо ловит всякий шум вместо радиостанций. Для него четыре вольта — уже многовато, по очень хорошему надо бы питать через кренку на 3.3 вольта.

При напряжении ниже трех вольт устройство перестает реагировать на кнопки, поскольку затыкается ардуинка. Но даже при 2.5 вольт RDA5807 стойко держит прежнюю частоту и качество приема не ухудшается.

Если подключить аккумулятор к контроллеру заряда напрямую, то при выключенном USB зарядник превращается в нагрузку, вытягивая из аккумулятора ток примерно в 2 микроампера. Много это или мало — не знаю, но сам факт просто возмутительный. В качестве решения ставим герконовое реле K1, которое при подключении USB замыкает контакты K1.1.

Релюшка самодельная, изготавливается путем намотки в навал эмалированного провода диаметром не более 0,1 мм непосредственно на корпус геркона. Чем больше провода удастся намотать, и чем тоньше он будет — тем меньше будет потребляемый ток. Намотать слишком много, так, чтобы не хватало пяти вольт для срабатывания, адекватный человек не сможет, здравый смысл заставит вовремя остановиться.

Как китайцы крепят контроллер заряда, — не знаю. Могу предложить припереть винтиками с боков.

Чтоб было видно индикацию, пришлось заменить планарный светодиод на обыкновенный. Можно было бы сделать световод из толстой рыболовной лески или прозрачного прутка для 3D принтера, но ничего, сойдет и так.

Теперь пишем скетч, библиотеки берем стандартные SSD1306Ascii для дисплея и RDA5807M для радио.

Оказалось, в строке RDS есть хитрости. Там три блока: текущее время, имя радиостанции и собственно сама информационная строка. Я так и не понял, то ли в библиотеке кривой парсер, то ли радиостанция как то не так транслирует текущее время. Вразумительные цифры там появляются далеко не всегда. В результате первый блок был отброшен. А если читать саму строку, выясняется, что там ничего нет, кроме телефонов рекламной службы. Пришлось оставить только имя радиостанции, никакой другой пользы из строки RDS извлечь не удалось. Кроме названия радио, дисплей показывает силу сигнала, заряд аккумулятора и рабочую частоту.

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

Регулировка громкости происходит так: при первом нажатии уровень сбрасывается на самый минимум, и далее при каждом последующем нажатии увеличивается на одну ступень. Если возникает пауза более двух секунд — очередное нажатие считается первым. Таким образом, за все про все две кнопки.

Два динамика, смотрящие в противоположные стороны и включенные противофазно, орут как надо: на самом первом уровне громкости вполне нормально слушать. Если немного добавить — услышат даже соседи.

Как люди жили без 3D принтера я помню, но это была не жизнь, а кошмарный сон. В наши дни корпус можно просто распечатать. Разве что, его надо сперва нарисовать. Но это намного проще, чем разворачивать полномасштабные слесарные работы. Могу поделиться своими моделями, замечу только, что они рассчитаны для динамиков 3-ГДШ-8. Все материалы проекта выложены на GitHub.

Я не маркетолог, но не мог не заметить, насколько мощно модуль RDA5807 стимулирует продажи.

Все происходит за счет цепочки расходов, каждый из которых кажется сущей мелочью. Ардуинка за 120 руб, но только если доставка Super Economy. Иными словами, посылка не отслеживаемая и срок может растянуться на три месяца Хочешь получить трек номер и получить быстрее — заплати побольше. Дисплейчик — тоже 120 рублей — и снова Super Economy. Контроллер заряда совсем дешевый, но продается только пачками, еще сто рублей. Самое дорогое — аккумулятор, разброс цен широкий, но неизбежно более двухсот рублей. Усилитель можно купить готовым модулем, а можно собирать из компонентов самому. В любом случае меньше сотни не получается. Не забываем про динамики — их два, значит дважды по сто рублей.

В моем случае корпус получился очень дешевым. На печать ушло около 40 метров прутка ABS, это на самом деле не так много. Трудно рассчитать, сколько это в деньгах, но явно пустяки. А если решать проблему корпуса как-то иначе, он превратится в самую дорогую деталь, в смысле расходов, и в смысле головной боли.

У радиолюбителя многие компоненты давно лежат в запасе, а потому кажется, будто достались даром. Но если непреклонно складывать все подряд, общая стоимость проекта приближается к тысяче. Готовый китайский приемник, вполне симпатичный, можно купить за пятьсот рублей, другое дело, что информационный повод с этого никакой. Вот почему мы чертим схемы и пишем скетчи. Иначе неинтересно.

Источник

Arduino All Band Receiver LW, MW, SW, FM with Improved Code

Covers all commercial stations with Si4730 IC, plus all amateur radio bands when you use Si4732 or Si4735.

Hardware components

Arduino Nano R3
× 1
Si4730 Radio module
× 1
Small class «D» audio amplifier module
× 1
Rotary potentiometer (generic)
× 1
Rotary Encoder with Push-Button
× 1
Adafruit Standard LCD — 16×2 White on Blue
× 1
MW ferite Antenna
× 1
resistors, capacitors
× 1

Hand tools and fabrication machines

Soldering iron (generic)
Solder Wire, Lead Free

This is a small DIY radio that covers all commercial radio stations with Si4730 IC, plus all amateur radio bands when you use Si4732 or Si4735 IC.

The reason for the re-introduction of this radio is the new library created by Mr.Ricardo Lima Caratti for SI4735, which contains an updated sketch specifically created for this small receiver. If you are using a SI4735-D60 or SI4732-A10 based circuit, you can also use this sketch to add the SSB functionality to the original project. If you are using the original SI4730-D60 based circuit, the SSB will not work. However, the STEP, FM/RDS, MODE, AGC, Attenuation, bandwidth, Soft Mute, Audio Volume, and Shortwave will work fine. This sketch is very similar to the previous sketch (MIRKO_V1.ino). The new features of the MIRKO_V2.ino are shown below.

The receiver current status is stored into Arduino EEPROM;

FM frequency step;

FM bandwidth control.

Detailed instructions on how to make this little radio can be found in one of my previous videos:

You can download the MIRKO_V2.ino sketch on GitHub:

Источник

Всеволновое радио (LW, MW, SW, FM) на Arduino и модуле Si4730

По запросу “радио на Arduino” вы в сети интернет найдете, в основном, проекты радиоприемников на основе платы Arduino, которые работают в современном FM диапазоне (88-108 МГц в Европе). Тем не менее, для многих наверняка представляют интерес и диапазоны LW, MW и SW, которые занимают диапазон частот от 0,2 до 30 МГц. Особенно интерес диапазон коротких волн (SW) – радиоволны в этом диапазоне отражаются от ионосферы и, таким образом, могут распространяться на огромные расстояния, и даже огибать земной шар.

В данной статье мы рассмотрим создание на основе платы Arduino и модуля Si4730 радиоприемника с хорошими характеристиками, работающего в широком диапазоне длин волн (LW, MW, SW, FM).

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. ЖК дисплей 16х2 (купить на AliExpress).
  3. Модуль Si4730 (купить на AliExpress).
  4. Инкрементальный энкодер c кнопкой (Rotary Encoder) (купить на AliExpress — не уверен в том, что в нем есть кнопка, но она точно есть в этом лоте — купить на AliExpress № 2, но он продается, к сожалению, только по 5 штук).
  5. Модуль усилителя звуковой частоты (класс D), например, PAM8403 (купить на AliExpress).
  6. Громкоговоритель (Speaker) 0,25 Вт, 8 Ом.
  7. Ползунковый переключатель.
  8. Ферритовый стержень от старого радиоприемника средних волн (MW).
  9. Резисторы и конденсаторы согласно схеме, представленной ниже.

Общие принципы работы радиоприемника

“Сердцем” нашего проекта является модуль Si4730 от компании Silicon Labs, который можно купить на AliExpress в форме небольшой платы для разработки всего за несколько долларов (даташит на модуль Si4730) или в форме отдельной микросхемы (менее 100 рублей).

Данным модулем можно управлять с помощью платы Arduino по протоколу I2C с помощью библиотеки Si4735-I2C-R4 (ее можно скачать по ссылке, приведенной в разделе “исходный код программы” данной статьи), написанной Julio C. Rosa. Хотя производитель утверждает, что чип Si4730 работает только в диапазонах AM и FM, тем не менее, он может работать и в диапазоне коротких волн (SW) (хотя если верить последней версии даташита на данный модуль, он работает во всех диапазонах — LW, MW, SW, FM). Для усиления звуковой частоты с выхода модуля автор проекта (ссылка на оригинал приведена в конце статьи) использовал плату цифрового усилителя 2*3W PAM8403 Class D, которая отличается приемлемым функционалом и сравнительно дешево стоит (33 рубля на алиэкспрессе). Данный усилитель ранее уже был использован в проекте радиостанций на Arduino на нашем сайте.

Автор проекта собрал данный радиоприемник в компактном корпусе (см. фото и видео) и прикрепил к нему антенну для диапазона метровых волн. По его утверждению, качество приема рассмотренного проекта радиоприемника не уступает промышленным компактным моделям радиоприемников. К слову сказать, модуль Si4730 используют в своих устройствах такие известные производители компактных радиоприемников как TECSUN, DEGEN, SANGEAN и другие.

Схема проекта

Схема всеволнового радиоприемника на Arduino и модуле Si4730 представлена на следующем рисунке.

Данную схему также можно скачать в форме pdf файла (в более хорошем качестве).

К выходу модуля Si4730 не забудьте подключить усилитель звуковой частоты, например PAM8403, с выхода которого уже и подавайте сигнал на громкоговоритель.

Исходный код программы (скетча)

Библиотеку для работы с модулем Si4730 можно скачать по этой ссылке.

Источник

Секреты SI473X. Делаем приемник и ищем скрытые возможности микросхемы SDR

Содержание статьи

Как радиоприемники стали ширпотребом

Прог­ресс не сто­ит на мес­те: в течение пре­дыду­щего сто­летия сто­имость ради­опри­емни­ков сни­жалась, при этом их харак­терис­тики ста­нови­лись все луч­ше. Так, в 20-е годы XX века основной вклад в сто­имость вно­сили ради­олам­пы — вспом­ни хотя бы пер­вый супер­гетеро­дин Армстрон­га, который мы уже упо­мина­ли, говоря об ис­тории супер­гетеро­дина.

На момент сво­его появ­ления он казал­ся совер­шенно безум­ным, так как содер­жал восемь ламп — огромное количес­тво для того вре­мени. А ведь ему нуж­ны были еще батарей­ки общим раз­мером с неболь­шой чемодан!

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

Сле­дующий этап уде­шев­ления и мини­атю­риза­ции про­ходил дос­таточ­но мед­ленно, лам­пы дешеве­ли и умень­шались в раз­мерах, совер­шенс­тво­валась схе­мотех­ника. Про­дол­жалось это вплоть до 1960-х годов. А про­рыв слу­чил­ся в начале пятиде­сятых, ког­да появи­лись пер­вые серий­ные тран­зисто­ры и на них пос­тро­или пер­вый серий­ный при­емник Regency TR-1.

По харак­терис­тикам он усту­пал лам­повым того вре­мени и сто­ил замет­но дороже, но его уже мож­но было положить в кар­ман. А даль­ше тран­зисто­ры потихонь­ку дешеве­ли, их парамет­ры улуч­шались, а вмес­те с ними ста­нови­лись мень­ше и эко­номич­нее при­емни­ки. Появи­лись интеграль­ные схе­мы, и где‑то к 1970-м годам количес­тво тран­зисто­ров в устрой­стве перес­тало сущес­твен­но вли­ять на цену. Все боль­ший вклад в раз­мер и цену ста­ли вно­сить кон­туры про­межу­точ­ной час­тоты и вход­ные перес­тра­иваемые цепи.

Оче­ред­ной рывок про­изо­шел в начале вось­мидеся­тых, ког­да инже­нерам фир­мы Philips уда­лось умес­тить весь ради­очас­тотный тракт в одну мик­росхе­му. А кро­ме того, за счет схе­мотех­ничес­ких ухищ­рений изба­вить­ся от всех кон­туров, кро­ме гетеро­дин­ного. Мик­росхе­ма получи­ла наз­вание TDA7000, а про­тотип при­емни­ка, пред­став­ленный в рек­ламных целях, выг­лядел доволь­но‑таки необыч­но.

Про­тотип при­емни­ка на TDA7000

Шту­ка получи­лась на ред­кость удач­ная, поэто­му вско­ре появи­лись TDA7021 (PDF) с под­дер­жкой сте­реоко­диро­вания и TDA7088 (PDF), где добави­лась воз­можность авто­поис­ка стан­ций. В пос­ледней мик­росхе­ме исполь­зовалась неболь­шая циф­ровая часть, которая за этот самый поиск отве­чала. Впро­чем, там все было устро­ено дос­таточ­но при­митив­но, но про­дер­жалась такая конс­трук­ция дос­таточ­но дол­го. Это имен­но те при­емни­ки, которые встра­ива­ли чуть ли не в зажигал­ки в начале 2000-х.

Рос­сий­ские раз­работ­чики хоть и отста­вали, но переня­ли опыт, в резуль­тате чего появи­лась зна­мени­тые К174ХА34 (TDA7021), К174ХА42 (TDA7000) и очень забав­ная гиб­ридная схе­ма СХА058.

СХА058

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

Се­год­ня нас­тупила эра SDR/DSP-при­емни­ков, в которых основная обра­бот­ка сиг­нала выпол­няет­ся матема­тичес­ки на оциф­рован­ных дан­ных, мы это уже обсужда­ли, ког­да собира­ли ZetaSDR. Но там обра­бот­ка оциф­рован­ного сиг­нала про­исхо­дила на ПК. А мож­но ли обой­тись без компь­юте­ра? Да лег­ко: в 2001 году Philips выпус­тила чип TEA5767 (PDF), пред­став­ляющий собой однокрис­таль­ный циф­ровой при­емник. Этот чип тре­бовал минимум обвязки, имел циф­ровое управле­ние и позици­они­ровал­ся (PDF) как удоб­ный вари­ант для встра­ива­ния в раз­личные гад­жеты типа MP3-пле­еров и мобиль­ных телефо­нов. Сре­ди его дос­тоинств — квар­цевая ста­били­зация час­тоты и воз­можность декоди­ровать сте­рео.

TEA5767 с пол­ной обвязкой

Чуть поз­же появил­ся более совер­шенный чип RDA5807. Он изба­вил­ся от пос­ледне­го колеба­тель­ного кон­тура в обвязке. Собс­твен­но, там и обвязки‑то не оста­лось, при этом при­нима­емый диапа­зон был замет­но рас­ширен (64–108 МГц), появи­лась под­дер­жка RDS. Чувс­тви­тель­ность ста­ла повыше, качес­тво зву­ка тоже, и, что самое уди­витель­ное, эта кро­ха спо­соб­на тянуть 32-омные науш­ники без допол­нитель­ного уси­лите­ля. И все это мень­ше чем за десять руб­лей! А сверх того, чип име­ет обратную сов­мести­мость с RDA5807, да и вооб­ще спо­собен ра­ботать без управля­юще­го мик­рокон­трол­лера. Но с кон­трол­лером все же веселее.

RDA5807 с обвязкой

Но даже все перечис­ленное не пре­дел: в чип мож­но запих­нуть еще и ДВ/СВ/КВ‑при­емник, как это сде­лано в KT0915 (PDF), AKC6951 (PDF) (тут еще и пер­вые нес­коль­ко каналов TV при­нимать мож­но) и SI473Х, о которых мы и будем говорить даль­ше.

Мы соз­дадим сов­ремен­ный ради­опри­емник, подоб­ный сов­ремен­ным ком­мерчес­ким образцам, таким как PL330 и ETON SATELLIT. Но наше изде­лие будет при этом мак­сималь­но прос­тым и эффектив­ным.

PL330 ETON SATELLIT

Почему SI4734

SI4735 отли­чает­ся от дру­гих упо­мяну­тых чипов тем, что под­держи­вает пат­чи про­шив­ки, а это откры­вает дос­туп к допол­нитель­ным фун­кци­ям. Так, в сети есть патч, который поз­воля­ет при­нимать сиг­налы с SSB-модуля­цией. Что в ней такого, спро­сишь ты? Да в общем, ничего осо­бен­ного, прос­то на ней работа­ют любите­ли в КВ‑диапа­зонах, и их порой инте­рес­но пос­лушать. И это, навер­ное, самый прос­той вари­ант такого при­емни­ка.

Хо­рошо, с SI4735 разоб­рались, а почему в заголов­ке зна­чит­ся SI4734? Дело в том, что все мик­росхе­мы SI473X сов­мести­мы «pin в pin» и отли­чают­ся толь­ко набором фун­кций. Млад­шие модели (SI4730, SI4731) под­держи­вают длин­ные вол­ны и FM, а стар­шие модели (SI4732, SI4735) под­держи­вают еще и корот­кие вол­ны и RDS. SI4734 под­держи­вает КВ, но не уме­ет RDS. Кро­ме все­го про­чего, они здо­рово раз­лича­ются по цене: SI4730 сто­ит при­мер­но 100 руб­лей, SI4734 — 150, SI4735 — поряд­ка 500 руб­лей. Прав­да, все­го год назад они были минимум в три раза дешев­ле, ну да это извес­тная сей­час проб­лема.

Патч офи­циаль­но под­держи­вает толь­ко SI4735, на ней я и хотел экспе­римен­тировать. Но куп­ленный мною экзем­пляр ока­зал­ся нерабо­чим, поэто­му я пос­тавил SI4734-D60, который имел­ся в загаш­нике. А заод­но поп­робовал скор­мить это­му чипу патч, и, к моему удив­лению, он сра­ботал. Так что, если тебе не нужен RDS, мож­но сэконо­мить.

Об­радовав­шись такому успе­ху, я поп­робовал поковы­рять SI4730-D60, тем более что в сети прос­каль­зывала информа­ция, буд­то некото­рые из этих чипов могут работать на КВ. Одна­ко у меня они не зарабо­тали и патч на них тоже не встал. Очень веро­ятно, что патч сра­бота­ет и на SI4732, пос­коль­ку китай­цы час­то добав­ляют эту мик­росхе­му в наборы сво­их при­емни­ков и заяв­ляют о под­дер­жке SSB.

Схемотехника

Для наших экспе­римен­тов мы соберем отно­ситель­но нес­ложную конс­трук­цию, сос­тоящую из двух бло­ков: бло­ка управле­ния и бло­ка при­емни­ка. Блок управле­ния соберем на STM32F030, добавим к нему энко­дер, дис­плей OLED и восемь кно­пок. От кно­пок мож­но вов­се отка­зать­ся, но с ними управлять при­емни­ком нам­ного удоб­нее. За кла­виату­ру будет отве­чать PCF8574, очень удоб­ная мик­росхе­ма — рас­ширитель пор­тов с I2C-интерфей­сом. Вве­дение рас­ширите­ля пор­тов хоть и усложня­ет схе­му, но упро­щает раз­водку пла­ты и опрос кно­пок. Питать все это дело удоб­но с помощью LiPO-акку­муля­тора, поэто­му добавим туда еще кон­трол­лер заряда и DC/DC-пре­обра­зова­тель на RT9136 для питания кон­трол­лера. Исполь­зование активно­го пре­обра­зова­теля целесо­образно в пла­не повыше­ния КПД.

Схе­ма при­емни­ка

Вы­ход­ной мощ­ности SI4735 недос­таточ­но для рас­качки стан­дар­тных 32-омных науш­ников, поэто­му нужен ауди­оуси­литель, даже два, так как у нас сте­рео. В качес­тве уси­лите­ля исполь­зована мик­росхе­ма TDA2822 (PDF) в стан­дар­тном вклю­чении. Это не луч­ший вари­ант по двум при­чинам: во‑пер­вых, у нее слиш­ком высок коэф­фици­ент уси­ления, а во‑вто­рых, на мой вкус, она слиш­ком шумит. Луч­ше на эту роль подой­дет LM4863 (PDF), но у меня ее не ока­залось под рукой. Тем не менее TDA2822 недур­но справ­ляет­ся со сво­ей задачей.

В завод­ских решени­ях обыч­но исполь­зует­ся УВЧ и маг­нитная антенна, мы же пос­тупим про­ще: пос­тавим на вход филь­тр 5-го поряд­ка с час­тотой сре­за и будем исполь­зовать пол­нораз­мерную антенну — все рав­но на штырь в квар­тире мож­но ловить толь­ко помехи, FM и пару китай­ских стан­ций в хороший день. Что же каса­ется FM-вхо­да, то ему ком­фор­тно и без вход­ных цепей. Кро­ме того, саму SI4734 вмес­те со вход­ными цепями мы помес­тим в экран из жес­ти (пла­та двух­сто­рон­няя, вто­рая сто­рона — сплош­ная медь), бла­го это сов­сем не слож­но. Исполь­зование внеш­ней пол­нораз­мерной антенны силь­но сни­зит навод­ки от циф­ровой час­ти и изба­вит от УВЧ.

Что каса­ется этой самой циф­ровой час­ти, то тут каких‑либо осо­бен­ностей нет. Схе­ма, пла­ты и про­чее лежат на GitHub. Вешать пос­тоян­но обновля­ющий­ся дис­плей и кла­виату­ру на одну шину с SI4734 — не очень хорошая идея из‑за воз­можных помех, одна­ко оста­нов­ка кон­трол­лера и вык­лючение дис­плея на слух не вно­сит изме­нений. Отсю­да мож­но сде­лать вывод, что в городе гораз­до боль­ший вклад в качес­тво при­ема вно­сит зашум­ленность эфи­ра.

Офор­мле­но это в дос­таточ­но минима­лис­тичном сти­ле, впро­чем, кор­пуса я делать никог­да не любил. У меня получи­лось что‑то сред­нее меж­ду макетом и закон­ченным устрой­ством, но тран­спор­тиров­ку и полевое исполь­зование при­емник пережил не помор­щившись.

Пред­видя воп­росы, ска­жу сра­зу, что управля­ющий блок мож­но соб­рать и на Blue Pill, и на ARDUINO, в пос­леднем слу­чае на Али мож­но купить уже соб­ранную пла­ту. Обой­дет­ся это при­мер­но в 3000 руб­лей. А за допол­нитель­ные день­ги к это­му делу мож­но докупить кор­пус. Но это не наш метод, мы же соб­рались поковы­рять­ся с SI4734!

Прошивка

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

Итак, что же за зверь SI4734 и с чем его едят? Этот чип управля­ется по шине I2C, и каж­дая посыл­ка пред­став­ляет собой адрес мик­росхе­мы (с битом перек­лючения запись/чте­ние), 1 байт коман­ды и до 7 байт аргу­мен­тов. У каж­дой коман­ды свое количес­тво аргу­мен­тов, впро­чем, даташит говорит, что посыл­ки мож­но сде­лать и фик­сирован­ной дли­ны, если вмес­то неис­поль­зуемых аргу­мен­тов слать 0x00 . Для наших целей понадо­бит­ся не так мно­го команд, поэто­му мы можем поз­волить себе написать для каж­дой свою фун­кцию. Резуль­татом выпол­нения коман­ды мож­но счи­тать ответ, сос­тоящий из бай­та ста­туса и до 7 байт собс­твен­но отве­та, при­чем и здесь допус­кает­ся уни­фика­ция дли­ны: мож­но читать по 8 байт, все неис­поль­зуемые будут 0x00 .

Но тут есть нюанс: коман­да выпол­няет­ся не мгно­вен­но, а с задер­жкой, до исте­чения которой мик­росхе­ма будет отве­чать толь­ко нулями. Поэто­му, ког­да нам необ­ходим ответ, мы с некото­рой пери­одич­ностью будем его счи­тывать, пока пер­вый байт отве­та не будет равен 0x80 , что сви­детель­ству­ет о завер­шении исполне­ния коман­ды. Сле­дом мож­но счи­тать бай­ты отве­та и/или отправ­лять сле­дующую коман­ду.

Для отправ­ки и чте­ния пакетов по I2C мы будем исполь­зовать уже извес­тную нам коман­ду биб­лиоте­ки LibopenCM3 i2c_transfer7( SI4734I2C, SI4734ADR . ) , где SI4734I2C — исполь­зуемая шина I2C (I2C1), а SI4734ADR — семибит­ный адрес SI4734 0x11 . О бите записи/чте­ния за нас позабо­тит­ся биб­лиоте­ка. В ито­ге работа с мик­росхе­мой вкрат­це будет пред­став­лять собой сле­дующую пос­ледова­тель­ность дей­ствий: ини­циали­зация, нас­трой­ка режима работы, нас­трой­ка на нуж­ную час­тоту. Все опи­сан­ное ниже опи­рает­ся на содер­жание докумен­тов AN332 «Si47XX Programming Guide» и AN332SSB.

Инициализация

Преж­де все­го SI4734 нуж­но ини­циали­зиро­вать. Сде­лать это мож­но в одном из трех режимов: AM, FM или SSB. Перед началом ини­циали­зации докумен­тация рекомен­дует выпол­нить сброс. Дела­ется это три­виаль­но: надо ненадол­го под­тянуть к зем­ле REST-пин SI4734. Для задер­жки исполь­зует­ся совер­шенно ленивая фун­кция, бла­го точ­ность тут не име­ет осо­бого зна­чения.

Источник