Расчет частоты приема для RDA5807M

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

Re: Расчет частоты приема для RDA5807M

Сообщение voffka_rostov »

WiseLord писал(а):У RDA5807FP эти биты задействуют FMIN вход

У RDA5807M такого входа нет - число ножек микросхемы много меньше - но меня терзают смутные сомнения, что в обеих микросхемах используется один и тот же кристалл.

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

Я изначально в своём коде отсылал только 4 байта, и всё работало замечательно. А когда решил добавить в библиотеки функции управления громкостью, что вынудило отсылать большее колчество данных по шине, столкнулся с тем, что эти биты, описанные в даташите на RDA5807FP, влияют на работоспособность и RDA5807M, хотя там они не описаны.


Да уж, намудрили они с RDA5807M. Без антенны не хочет работать ))) Спасибо за помощь!!!

Кстати, а можно же на нем поменять щах настройки частоты? мне нужно 73,76, даже с шагом 25кГц точно не попадает в нее?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

За выбора шага отвечают биты 0b000000xx регистра 03L
00 - 100 кГц
01 - 200 кГц
10 - 50 кГц
11 - 25 кГц.
За выбор диапазона отвечают биты 0b0000xx00 регистра 03L
00 - 87..108 МГц
01 - 76..97 МГц
10 - 76..108 МГц
11 - 65..76 МГц
Так что лучшее, что можно от этого получить - это выбрать последний диапазон с минимальным шагом и настроиться на 73,75 МГц.

Расчёт в этом случае будет такой:
25кГц * CHAN + 65 000кГц = 73 750кГц, откуда CHAN = 350 = 0b0101011110
Так что придётся писать:
03H: 0b01010111
03L: 0b10011111

Очевидно, что на этом диапазоне можно получить максимально возможную частоту при CNAN = 0b1111111111 = 1023 => 25 * 1023 + 65000 = 90 575 кГц, то есть, с минимальным шагом 25кГц можно перекрыть диапазон шириной 1023 * 25 = 25 575 кГц.

Так что, для "бесшовного" перестроения придётся программно на какой-то границе менять диапазоны.

Кроме того, при тех же условиях и тех же диапазонах ещё можно в байте 07H установить бит 0bxxxxxx1x, что сместит начало диапазона не на 65МГц, а на 50МГц.
Тогда при минимальном шаге 25кГц, по идее, можно при одной настройке покрыть диапазон 50 000 .. 75 575 кГц, при другой - 76 000 .. 101 575, при третьей - 87 000 .. 112 575.

Так что, в принципе, можно это программно учесть, и получить один широкий диапазон 50 000 .. 112 575 с минимальным шагом 25 кГц. Это теоретический максимум, которого можно добиться от этой микросхемы. С бОльшим шагом можно и большие частоты попробовать захватить.
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

Re: Расчет частоты приема для RDA5807M

Сообщение voffka_rostov »

WiseLord писал(а):За выбора шага отвечают биты 0b000000xx регистра 03L
За выбор диапазона отвечают биты 0b0000xx00 регистра 03L

Так что лучшее, что можно от этого получить - это выбрать последний диапазон с минимальным шагом и настроиться на 73,75 МГц.

Очевидно, что на этом диапазоне можно получить максимально возможную частоту при CNAN = 0b1111111111 = 1023 => 25 * 1023 + 65000 = 90 575 кГц, то есть, с минимальным шагом 25кГц можно перекрыть диапазон шириной 1023 * 25 = 25 575 кГц.
...
Так что, в принципе, можно это программно учесть, и получить один широкий диапазон 50 000 .. 112 575 с минимальным шагом 25 кГц. Это теоретический максимум, которого можно добиться от этой микросхемы. С бОльшим шагом можно и большие частоты попробовать захватить.


Хм... Спасибо за теорию! Есть над чем поразмыслить!
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

Re: Расчет частоты приема для RDA5807M

Сообщение voffka_rostov »

Кстати, а что занчит бит0 в регистре 07L? "Режим управления синтезатором частоты, 1- ручной, записью значения в регистр 13,14 (08H)"... Что за режим синтезатора частоты? Не не оно ли и есть? Похоже что при выборе младшего бита 1 в регистре 07L можно в 08H вписать вручную частоту? тогда получается что на ее указание пойдут 16 бит...
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Да, это прямой ввод частоты. Я с ним работать не пробовал, но соображения кое-какие есть.

Частота в 08H/08L, судя по всему, задаётся в килогерцах и заданное значение прибавляется к нижней границе диапазона.

То есть, для настройки на частоту, например, 99 123 МГц на диапазоне 87 000 .. 108 000 нужно записать в эти байты значение 99123 - 87000 = 12123, что соответствует 0010 1111 / 0101 1011

Наверное, на других диапазонах тоже должно работать (хотя даташит упоминает только начало поддерживаемых диапазонов как 76 или 87 МГц).
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

Re: Расчет частоты приема для RDA5807M

Сообщение voffka_rostov »

WiseLord писал(а):То есть, для настройки на частоту, например, 99 123 МГц на диапазоне 87 000 .. 108 000 нужно записать в эти байты значение 99123 - 87000 = 12123, что соответствует 0010 1111 / 0101 1011

Аж любопытно. По идее 16бит должно за глаза хватить, чтобы описать весь поддерживаемый диапазон...
voffka_rostov
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср апр 15, 2015 10:03:15
Откуда: Ростов-на-Дону

Re: Расчет частоты приема для RDA5807M

Сообщение voffka_rostov »

Получилось!!! Записать регистры 08H и 08L, при выставление младшего бита в регистре 07L на 1, т.е. на ручную установку волны! Выставил точно 73.76 УКВ при прежних настройках диапазона от 65 до 76. 73760-65000=8760(10)=0010 0010 0011 1000(2). Все работает! Я доволен )))

Кстати, у меня вдогонку вопрос: А этот модуль в УКВ диапазоне принимает в стерео?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Если у станции стереомодуляция с пилот-тоном - то да, а если "советская" полярная - нет.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Расчет частоты приема для RDA5807M

Сообщение eduardo »

Здраствуйте. Подскажите,как правильно на Си организовать полуавтоматическй режим работы RDA.
Алгоритм:

Жмём/отпускаем кнопку1--включается поиск
находит станцию--поиск остановить атоматически,включить звук
если станция понравилась,жмём/отпускаем кнопку 2 чтоб сохранить
если станция не понравилась--снова жмём /отпускаем кнопку 1 чтобы продолжить поиск
автоматический стоп поиска по достижении границы диапазона.
Мне непосредственно важен сам обмен данными с модулем.

Вручную записывать данные в модуль получалось,но код не сохранился. :)) Спасибо...
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Алгоритм, по идее, не слишком сложный. Нижесказанное ссылается на описание битов, взятое из даташита.

Шлём по шине пачку данных:
Регистр 0 (02H):
RDA5807_DHIZ = 1 - включаем аудиовыход
RDA5807_DMUTE = 0 - отключаем режим MUTE
RDA5807_SEEKUP = 1 - поиск вверх по диапазону
RDA5807_SEEK = 1 - старт поиска
Регистр 1 (02L):
RDA5807_SKMODE = 1 - останавливаем поиск по достижении конца диапазона
RDA5807_ENABLE = 1 - включен радиомодуль
Регистр 2 (03H) - стартовая частота
Регистр 3 (03L):
Биты 7-6 - стартовая частота
RDA5807_DIRECT_MODE = 0 - режим прямого ввода частоты отключен
RDA5807_TUNE = 1 - смена частоты (RDA5807_TUNE = 0 удобно при смене только громкости)
Биты 3-2 - нужный диапазон (например, RDA5807_BAND_US_EUROPE)
Биты 1-0 - нужный шаг перестройки (например, RDA5807_SPACE_50)
Регистр 6 - (05H):
Биты 3-1 - уровень приёма (RDA5807_SEEKTH), при котором автопоиск останавливается.

Остальные биты и регистры - по необходимости.

После посылки указанного пакета тюнер начнёт автопоиск и остановится, если найдёт достаточную по уровню сигнала станцию или достигнет конца выбранного диапазона. В это время в цикле можно читать регистры, и на основании следующих данных принимать решение что делать:
Регистр 0 (0AH):
RDA5807_STC = 1 - поиск завершён
RDA5807_SF = 1 - ошибка при поиске
Биты 1-0 - текущая частота
Регистр 1 (0AL) - текущая частота
Регистр 2 (0BH):
RDA5807_RSSI (Биты 7-1) - уровень сигнала
RDA5807_FM_TRUE = 1 - на текущей частоте есть сигнал станции.

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

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

В любом случае, читать текущую найденную частоту по шине I²C необходимо, чтобы продолжить поиск. Одной записью тут не обойтись.

В своих проектах я режим автопоиска не использовал, так как эксперименты показали, что работает он не очень хорошо - пропускает некоторые станции и, наоборот, сохраняет частоты с шумами. Хотя, может быть, мне просто не повезло с условиями приёма, и в других случаях всё будет хорошо - не знаю.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Расчет частоты приема для RDA5807M

Сообщение eduardo »

Сразу возник вопрос: байт 0ВН биты 6-0--уровень какого-то сигнала RSSI измеряют. Это для чего?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Уровень сигнала станции, естественно. И не 6-0, а 7-1 биты.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Расчет частоты приема для RDA5807M

Сообщение eduardo »

Я так понял,этих битов можно не касаться,если не требуется индикация уровня сигнала?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Можно.
SergSV
Прорезались зубы
Сообщения: 230
Зарегистрирован: Вс янв 26, 2014 22:40:17
Откуда: Рязань
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение SergSV »

А если выводить уровень сигнала то проще антенну настраивать при плохом приеме . Визуально видно хороший сигнал или нет. А так каждый делает как ему удобнее.
Последняя прошивка для часов на RGB матрицах на 21 странице в теме https://www.radiokot.ru/forum/viewtopic ... &start=400
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Re: Расчет частоты приема для RDA5807M

Сообщение pavel1979 »

может кому будет интересно-приемник аттини13+рда5807м,три кнопки-громкость плюс,минус,сканирование,при громкость=0 рда выключен-ток потребления несколько ма,и определяется только током потребления аттини13
в архиве исходник,протеус,нех
Вложения
attyni13_RDA5807 (2).zip
(17.89 КБ) 459 скачиваний
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Расчет частоты приема для RDA5807M

Сообщение eduardo »

WiseLord писал(а):Алгоритм, по идее, не слишком сложный. Нижесказанное ссылается на описание битов, взятое из даташита.

Шлём по шине пачку данных:
Регистр 0 (02H):
RDA5807_DHIZ = 1 - включаем аудиовыход
RDA5807_DMUTE = 0 - отключаем режим MUTE
RDA5807_SEEKUP = 1 - поиск вверх по диапазону
RDA5807_SEEK = 1 - старт поиска
Регистр 1 (02L):
RDA5807_SKMODE = 1 - останавливаем поиск по достижении конца диапазона
RDA5807_ENABLE = 1 - включен радиомодуль
Регистр 2 (03H) - стартовая частота
Регистр 3 (03L):
Биты 7-6 - стартовая частота
RDA5807_DIRECT_MODE = 0 - режим прямого ввода частоты отключен
RDA5807_TUNE = 1 - смена частоты (RDA5807_TUNE = 0 удобно при смене только громкости)
Биты 3-2 - нужный диапазон (например, RDA5807_BAND_US_EUROPE)
Биты 1-0 - нужный шаг перестройки (например, RDA5807_SPACE_50)
Регистр 6 - (05H):
Биты 3-1 - уровень приёма (RDA5807_SEEKTH), при котором автопоиск останавливается.

Остальные биты и регистры - по необходимости.

После посылки указанного пакета тюнер начнёт автопоиск и остановится, если найдёт достаточную по уровню сигнала станцию или достигнет конца выбранного диапазона. В это время в цикле можно читать регистры, и на основании следующих данных принимать решение что делать:
Регистр 0 (0AH):
RDA5807_STC = 1 - поиск завершён
RDA5807_SF = 1 - ошибка при поиске
Биты 1-0 - текущая частота
Регистр 1 (0AL) - текущая частота
Регистр 2 (0BH):
RDA5807_RSSI (Биты 7-1) - уровень сигнала
RDA5807_FM_TRUE = 1 - на текущей частоте есть сигнал станции.

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

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

В любом случае, читать текущую найденную частоту по шине I²C необходимо, чтобы продолжить поиск. Одной записью тут не обойтись.

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



Сделал,как вы посоветовали,но поиск упорно не хочет включаться.Может причина в согласователе уровней? Вот эта схема согласователя двунаправленная?И ещё:

Байт 05Н биты 3---0 (пороговое значение SNRдля режима поиска)
Байт 07 L биты 7--2(порог поиска для режима поиска) Вопрос: Какой из этих байтов за что отвечает???
Я пользуюсь даташитом для RDA 5807 FP
Вложения
Согл уровней.gif
(19.2 КБ) 928 скачиваний
Последний раз редактировалось eduardo Вс сен 20, 2015 18:16:37, всего редактировалось 1 раз.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Если вручную задание частоты работает, то дело уж точно не в преобразователе уровня.
111284
Встал на лапы
Сообщения: 139
Зарегистрирован: Сб апр 03, 2010 17:24:43

Re: Расчет частоты приема для RDA5807M

Сообщение 111284 »

Здравствуйте. тоже заинтересовался данным модулем, почитал datashet но особо не разобрался. Так вот при старте это понятно прописываются все регистры, но вот при дальнейшем есть необходимость переписывать весь массив данных или можно просто обращаться к нужному регистру.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Расчет частоты приема для RDA5807M

Сообщение WiseLord »

Адресовать конкретный регистр нельзя, нужно писать все байты подряд - как изменившиеся, так и нетронутые. В даташите это чётко прописано
There is no visible register address in I²C interface transfers.
The I²C interface has a fixed start register address (0x02h for write transfer and 0x0Ah for read transfer), and internal incremental address counter.
Ответить

Вернуться в «Периферия»