Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

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

Ср апр 15, 2015 13:41:26

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

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

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

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


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

Кстати, а можно же на нем поменять щах настройки частоты? мне нужно 73,76, даже с шагом 25кГц точно не попадает в нее?

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

Ср апр 15, 2015 14:05:15

За выбора шага отвечают биты 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 кГц. Это теоретический максимум, которого можно добиться от этой микросхемы. С бОльшим шагом можно и большие частоты попробовать захватить.

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

Ср апр 15, 2015 14:37:11

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 кГц. Это теоретический максимум, которого можно добиться от этой микросхемы. С бОльшим шагом можно и большие частоты попробовать захватить.


Хм... Спасибо за теорию! Есть над чем поразмыслить!

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

Ср апр 15, 2015 14:47:54

Кстати, а что занчит бит0 в регистре 07L? "Режим управления синтезатором частоты, 1- ручной, записью значения в регистр 13,14 (08H)"... Что за режим синтезатора частоты? Не не оно ли и есть? Похоже что при выборе младшего бита 1 в регистре 07L можно в 08H вписать вручную частоту? тогда получается что на ее указание пойдут 16 бит...

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

Ср апр 15, 2015 15:13:00

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

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

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

Наверное, на других диапазонах тоже должно работать (хотя даташит упоминает только начало поддерживаемых диапазонов как 76 или 87 МГц).

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

Ср апр 15, 2015 15:54:43

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

Аж любопытно. По идее 16бит должно за глаза хватить, чтобы описать весь поддерживаемый диапазон...

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

Чт апр 16, 2015 22:48:29

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

Кстати, у меня вдогонку вопрос: А этот модуль в УКВ диапазоне принимает в стерео?

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

Пт апр 17, 2015 05:27:14

Если у станции стереомодуляция с пилот-тоном - то да, а если "советская" полярная - нет.

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

Чт сен 17, 2015 22:26:22

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

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

Вручную записывать данные в модуль получалось,но код не сохранился. :)) Спасибо...

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

Пт сен 18, 2015 04:09:01

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

Шлём по шине пачку данных:
Регистр 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 необходимо, чтобы продолжить поиск. Одной записью тут не обойтись.

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

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

Пт сен 18, 2015 16:29:32

Сразу возник вопрос: байт 0ВН биты 6-0--уровень какого-то сигнала RSSI измеряют. Это для чего?

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

Пт сен 18, 2015 16:58:10

Уровень сигнала станции, естественно. И не 6-0, а 7-1 биты.

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

Пт сен 18, 2015 17:56:03

Я так понял,этих битов можно не касаться,если не требуется индикация уровня сигнала?

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

Пт сен 18, 2015 19:05:04

Можно.

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

Пт сен 18, 2015 19:42:40

А если выводить уровень сигнала то проще антенну настраивать при плохом приеме . Визуально видно хороший сигнал или нет. А так каждый делает как ему удобнее.

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

Пт сен 18, 2015 21:03:39

может кому будет интересно-приемник аттини13+рда5807м,три кнопки-громкость плюс,минус,сканирование,при громкость=0 рда выключен-ток потребления несколько ма,и определяется только током потребления аттини13
в архиве исходник,протеус,нех
Вложения
attyni13_RDA5807 (2).zip
(17.89 KiB) Скачиваний: 378

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

Вс сен 20, 2015 17:14:25

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 KiB) Скачиваний: 888
Последний раз редактировалось eduardo Вс сен 20, 2015 18:16:37, всего редактировалось 1 раз.

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

Вс сен 20, 2015 17:34:59

Если вручную задание частоты работает, то дело уж точно не в преобразователе уровня.

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

Чт янв 14, 2016 13:53:05

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

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

Чт янв 14, 2016 14:37:05

Адресовать конкретный регистр нельзя, нужно писать все байты подряд - как изменившиеся, так и нетронутые. В даташите это чётко прописано
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.
Ответить