Перейти к содержанию

Радиоприемник на RDA5807P в режиме совместимости с TEA5767


Рекомендуемые сообщения

Попал в руки вот такой любопытный модуль:

post-2832-0-83463400-1458661611.jpg

post-2832-0-29549700-1458671273_thumb.jpg

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

Это оказалось не так просто, но в конце концов модуль порадовал уверенной работой. Чтобы полезная информация не пропала, поделюсь ею с вами.

 

Во-первых у микросхемы, именно у 5807P явные проблемы с документацией. Есть на варианты с другой буквой, но они заметно отличаются функционально и у них несколько другие управляющие регистры. А для варианта с буковой P есть только бессодержательный даташит и аппликуха на китайском. Как же в ней разобраться?

 

Оказалось, что RDA5807* являются клонами различных (офигенных!) микросхем из семейства SI470* от Silabs, что не может не радовать, но мало прибавляет ясности. Все-таки по управлению они похожи, но тоже не совпадают полностью.

На радиокоте и cqham некоторые товарищи все-таки разобрались с регистрами и даже нашли недокументированные возможности (например, прямой ввод частоты) , но не опубликовали результаты свои изысканий. Возможно, если с ними связаться, они поделятся ими.

 

Также существуют готовые библиотеки для управления модулем, но они либо на C, либо под Arduino, язык которого в свою очередь, похож на C. Проблема в том, что я не знаю этот птичий язык и все делаю в mikroPascal. В общем, меня ожидало плавание в море дерьма, причем без весел.

 

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

post-2832-0-59111800-1458664405_thumb.jpg

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Используется аппаратный TWI(I2C) Атмеги8

Нога 28 SCL

Нога 27 SDA

В микропаскале есть библиотека для работы с ним, так и называется TWI.

Её не нужно указывать в uses, достаточно включить соответствую галочку в library manager.

Так выглядит загрузка конфига в микросхему в режиме эмуляции TEA5767 :

Register1:=%00101011;

Register2:=%00000110;

Register3:=%00011000;

Register4:=%00010000;

Register5:=%00000000;

 

SREG_I_bit:=0; //запрет прерываний

TWI_Init(10000); // инициализация TWI

TWI_Start();

TWI_Write(%11000000); // адрес TEA5767

TWI_Write(Register1);

TWI_Write(Register2);

TWI_Write(Register3);

TWI_Write(Register4);

TWI_Write(Register5);

TWI_Stop();

TWI_Close();

SREG_I_bit:=1; //разрешение прерываний

 

Как видите, все просто. Сначала грузится адрес, потом пять конфигурационных байт друг за другом. Только так и никак иначе. Загрузка конфига инициализирует микросхему.

Для сравнения: в обычном режиме регистров больше, они шестнадцатибитные, и загрузка почему-то начинается со второго регистра. Но и возможностей конфигурирования больше. Например, можно регулировать громкость, можно усилить бас, можно много чего ещё, что на самом деле не нужно.

 

Первый подводный камень:

Циферки, выделенные в листинге жирным - код, задающий частоту настройки. Для его вычисления дается формула.

post-2832-0-32378100-1458666867_thumb.png

Вместо 100 подставляете частоту в мегагерцах, получается число. Переводим его в двоичный вид, получаются искомые нолики и единички. В макете, однако, частота приема была на 0.45 кГц больше, чем запрограммированная.

Все дело в том, что там на самом деле две формулы. Одна для режима high side injection, другая для low side injection

Насколько я понял, разница между ними в том, что частота гетеродина или выше, или ниже частоты настройки на величину промежуточной частоты, которая в данном случае равна 225кГц. Поправьте, если кто лучше в этом разбирается.

post-2832-0-35570700-1458667829_thumb.png

Ошибка в знаке дает погрешность в 2*225=450 кГц. Тип injection задается битом 4 в третьем регистре, он тоже отмечен жирным шрифтом.

Кстати, неизвестно, на самом деле там меняется эта фигня, или это сделано только ради совместимости с TEA5767.

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Прикол номер два:

Загружаем при инициализации некоторую частоту, допустим, 101.7, а потом кнопками прибавляем или убавляем по одной десятой.

Хотя цифра на дисплее обновляется при каждом нажатии, фактически частота сменяется только на каждом втором шаге настройки. И такая шарманка во всем диапазоне! 101.7, 101.9, 102,1, 102,3... Если же залить первоначально четную частоту, будет 101.8, 102,0, 102,2, 102,4.

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

Подозреваю, что дело в наличии ФАПЧ, которая держится за пойманную частоту, покуда разница не слишком велика.

Однако первоначальная установка частоты всегда работает четко. Решение простое: при каждом изменении частоты делаем две заливки. Сначала заливаем настройку вне FM диапазона, например, 80МГц, затем ту, которая нужна. Маленьких шагов перестройки нет, нет проблемы.

 

Прикол номер три, точнее уже чисто мой тупняк: долго не мог понять, почему TWI не грузит настройки в чип.

В даташите написано, что адрес 1100000b

На эту букву b сначала вообще внимания не обратил, оказывается, за ней кроется ещё один бит.

Если открываем интерфейс на чтение, там единица, если на запись, то ноль.

Окончательный вид

11000000 запись

11000001 чтение

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Прикол номер 4, не только для этого модуля, но и вообще для аналоговых устройств, чувствительных к помехам:

Если на ходу выдернуть МК из панельки, модуль продолжает работать, причем ловит качественнее. Видимо, работа МК и динамическая индикация производят какие-то широкополосные помехи. В интернете советуют бороться с этим с помощью тотального экранирования. Мухи (модуль) отдельно, котлеты (МК) отдельно. На самом деле можно решить эту проблему и без экранирования, чисто программно: МК можно переводить в спящий режим после секунды простоя и выводить из спячки по нажатию кнопки. Естественно, в таком режиме невозможно поддерживать динамическую индикацию, но тут есть варианты. Можно сделать статическую на сдвиговых регистрах, можно сделать динамическую, но на отдельном контроллере с ограничением скорости нарастания напряжения (следовательно, с гораздо меньшей полосой помех), например MAX7221. Насчет вариантов с LCD не уверен, контроллер дисплея сам по себе может фонить.

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Пару слов следует сказать о руководстве по программированию.

Rda5807 Prog Manual.rar

Оно хоть и на китайском языке, но для нас не бесполезное. Если вы используете автопоиск, следует строго соблюдать алгоритм работы с ним, иначе приемник не сможет точно настроиться на частоту передатчика. Алгоритмы и для обычного режима, и для режима совместимости все-таки приведены во вполне понятном графическом виде, ими можно пользоваться.

Описания регистров (не всех!) там тоже есть, причем на английском. После тех семи идут еще два, в которые можно записать частоту непосредственно. К сожалению, у меня по этой теме нет более конкретной информации, но люди копались и чего-то такое находили. Возможно вам помогут даташиты на микросхемы с другой буквой или даташиты Silabs. Если хотите ручную настройку, проще использовать режим совместимости с TEA5767, там эта функция предусмотрена изначально.

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

а программно нет возможности сделать: "нажал кнопку - ФАПЧ отключилась на 2 - 3 сек. ?
Все, что я сказал о ФАПЧ - только гипотеза, не более того. Может быть кто-то, кто в теме, подскажет, как оно на самом деле работает?

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

 

Замечено, что изменение чувствительности автопоиска меняет работу этого глюка. Можно сделать чтобы он удерживал частоту даже при перестройке на 0.2 или 0.3МГц. Это странно, автопоиск-то ведь не используется... надо ещё поэкспериментировать с этой настройкой, может чего веселенькое обнаружится

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

Вот так повезло!

Недавно заказал модули Tea5767, но что с ними делать, я так и не разобрался. Точней я их запустил под ардуино, но как то оно все не правильно работало!

Сергей, а не могли ли вы приложить прошивку и схему подключения? Был бы очень признателен!

Ссылка на комментарий
Поделиться на другие сайты

Пожалуйста.

Описание регистров управления на русском Ербол недавно выкладывал https://forum.datagor...5767-avtopoisk/

Схема включения (на самом деле абсолютно стандартная):

post-2832-0-70774400-1458716844_thumb.png

Проект в mikroPascal и симуляция в протеусе:

Display.rar

Питание общее 3.3В. для красного индикатора этого вполне достаточно, другие цвета требуют большего напряжения.

Кстати, RDA как и TEA допускает питание до 5В, но интерфейс TWI все равно трехвольтовый. Поэтому все на 3.3В, чтобы не париться с согласованием уровней.

Изменено пользователем yamazaki
Ссылка на комментарий
Поделиться на другие сайты

По всей видимости даже при отключенном автопоиске, опция "чувствительность автопоиска" активна.
О, интересная инфа. Стоит ли мне в условиях слабого приема вкрутить эту настройку на максимум чувствительности?
Ссылка на комментарий
Поделиться на другие сайты

И сам отвечаю на свой вопрос: да, каким-то непонятным образом влияет и без автопоиска. Ставим единички в соответствующие биты и слабые радиостанции лучше слышны. Чудеса, да и только.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...