Расчет частоты приема для RDA5807M
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Бит TUNE устанавливаете? Только с ним будет производится перестройка частоты.
А вот без этого бита удобно, например, громкость регулировать.
Прямой ввод частоты осуществляется же установкой бита FREQ_MODE (07L) и прямым вводом значения частоты в регистрах 08H,L. Значение указывается в кГц относительно установленного нижнего лимита частоты.
А вот без этого бита удобно, например, громкость регулировать.
Прямой ввод частоты осуществляется же установкой бита FREQ_MODE (07L) и прямым вводом значения частоты в регистрах 08H,L. Значение указывается в кГц относительно установленного нижнего лимита частоты.
Re: Расчет частоты приема для RDA5807M
А у меня другая проблема запускаю авто поиск командой 0x20,0xD2,0x81. Станции находит но не принимает данные из RDA5807 после запроса 0х10,0х0А и запуска чтения, 0х11 приходит 0XFF
Re: Расчет частоты приема для RDA5807M
WiseLord писал(а):Бит TUNE устанавливаете? Только с ним будет производится перестройка частоты.
А вот без этого бита удобно, например, громкость регулировать.
Прямой ввод частоты осуществляется же установкой бита FREQ_MODE (07L) и прямым вводом значения частоты в регистрах 08H,L. Значение указывается в кГц относительно установленного нижнего лимита частоты.
Да, бит TUNE был установлен, но я пробовал вводить частоту в биты CHAN[9:0] регистра 03. Попробую через регистр 08. Кстати, а если частоту нужно устанавливать через регистр 08, то зачем нужны биты CHAN[9:0] регистра 03?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Регистр 03 - это ввод частоты по сетке. Базовая функциональность, с неё работает и автопоиск (можно автонастроиться и вычитать значение настройки в единицах этой сетки.
Регистр 08 - прямой ввод частоты (грубо говоря, сетка в 1кГц). Тут уже после автонастройки точную частоту вроде никак не узнать.
Регистр 08 - прямой ввод частоты (грубо говоря, сетка в 1кГц). Тут уже после автонастройки точную частоту вроде никак не узнать.
Re: Расчет частоты приема для RDA5807M
Понял, а можно ввести частоту по сетке (регистр 03) и перестроится на нее? Как это сделать. Случайно, не бит DIRECT MODE регистра 03 за это отвечает?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Можно. Собственно, это и есть основной режим работы.
В принципе, можете глянуть на мою реализацию драйвера для RDA5807. Там, по идее, ничего сложного. У меня подход следующий - сначала нужные данные укладываются в буфер wrBuf[], а потом этот буфер закидывается в микросхему целиком. Аналогично, для чтения - свой буфер rdBuf[].
Константы смотрите в .h-файле.
А бит DIRECT_MODE - это что-то тестовое за рамками даташита.
В принципе, можете глянуть на мою реализацию драйвера для RDA5807. Там, по идее, ничего сложного. У меня подход следующий - сначала нужные данные укладываются в буфер wrBuf[], а потом этот буфер закидывается в микросхему целиком. Аналогично, для чтения - свой буфер rdBuf[].
Константы смотрите в .h-файле.
А бит DIRECT_MODE - это что-то тестовое за рамками даташита.
Re: Расчет частоты приема для RDA5807M
Наконец добился авто поиска, как оказалось не работала процедура аппаратного чтения I2C, залил программный I2C и все заработало. Собственно теперь работает перестройка по частоте в ручном режиме, регулировка громкости и собственно авто поиск, также здесь используется LCD NOKIA 5110. Писал программу для PIC16F873A
- Вложения
-
- Radio.asm
- (42.79 КБ) 892 скачивания
Re: Расчет частоты приема для RDA5807M
111284 Жаль только на асме, как раз надо было для PIC. 
Re: Расчет частоты приема для RDA5807M
Привык к нему, а подучить Си времени пока нет.
Re: Расчет частоты приема для RDA5807M
Оптимизировал свой код, теперь хочу попробовать чтение RDS, но полистав интернет так и не попалась инфа как получать данные текста из прочитанных байт. Народ прошу помощи с этим, если не сложно поделитесь опытом декодирования RDS данных.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Чуть выше я давал ссылку на свою реализацию RDA5807, там в том числе и поддержка RDS есть.
В двух словах - у RDA5807 периодически (в главном цикле) запрашивается статус, т.е. вызывается функция rda5807ReadStatus(), возвращающая массив данных. Часть этих данных является данными RDS, и если они достаточно корректные (цепочка условий), выполняется rdsSetBlocks() над концом этого массива. Эта функция (её реализация в rds.h/rds.c, идея подсмотрена где-то на просторах интернета) собственно декодирует эти данные и укладывает их в читаемом виде в 8-байтовую строку, которую можно запросить в любой момент функцией rdsGetText().
В двух словах - у RDA5807 периодически (в главном цикле) запрашивается статус, т.е. вызывается функция rda5807ReadStatus(), возвращающая массив данных. Часть этих данных является данными RDS, и если они достаточно корректные (цепочка условий), выполняется rdsSetBlocks() над концом этого массива. Эта функция (её реализация в rds.h/rds.c, идея подсмотрена где-то на просторах интернета) собственно декодирует эти данные и укладывает их в читаемом виде в 8-байтовую строку, которую можно запросить в любой момент функцией rdsGetText().
Re: Расчет частоты приема для RDA5807M
Да смотрел ваш пример, вот как раз интересует момент загрузки данных в массив и определения символа в строке, к сожалению с Си не очень, цепочка проверки на наличее RDS понятна, а вот что дальше делать не очень.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Код: Выделить всё
if (rdsBlock[6] >= 0x20 && rdsBlock[6] < 0xFF)
rdsText[(rdsBlock[3] & 0x03) * 2] = rdsBlock[6];
if (rdsBlock[7] >= 0x20 && rdsBlock[7] < 0xFF)
rdsText[(rdsBlock[3] & 0x03) * 2 + 1] = rdsBlock[7];Вся магия где-то здесь. Я сам где-то в интернете нашёл принцип и сильно не вникал, но можно более-менее разобраться.
rdsText - массив из 8 байтов, куда помещается принимаемый текст. Сам текст (два байта) находится в блоках 6 и 7 (RDS block D). Адрес этого текста - последние два байта rdsBlock[3] (RDS block B).
Вот и выходит, что при приёме сигнала итоговый результат нужно собирать таким образом (все 4 строки передаются в разное время):
Код: Выделить всё
REG 0x0C | REG 0x0D | REG 0x0E | REG 0x0F
RDS BLOCK A | RDS BLOCK B | RDS BLOCK C | RDS BLOCK D
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx00 xxxxxxxx xxxxxxxx aaaaaaaa bbbbbbbb
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx01 xxxxxxxx xxxxxxxx cccccccc dddddddd
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx10 xxxxxxxx xxxxxxxx eeeeeeee ffffffff
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxx11 xxxxxxxx xxxxxxxx gggggggg hhhhhhhhВ итоге 8 байтов abcdefgh и соберутся в некую строку, передаваемой станцией. Обычно там бывает название радиостанции, или "прокручивается" название песни. Сам протокол позволяет и больше данных передавать, но это нужно разбираться как с протоколом, так и с тем, умеет ли его RDA5807. Возможно, она не все поля умеет принимать. А, возможно, все они тоже укладываются в эту схему, просто адресация у них (block B) будет другая.
Re: Расчет частоты приема для RDA5807M
То есть после проверки статусов, смотрим блок Б и записываем данные из блока Д в регистры соответствующие номеру символа в строке.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Да, что-то вроде того. И после приёма четырёх разных строк будем в итоговом буфере иметь нужные данные.
Re: Расчет частоты приема для RDA5807M
Не совсем понял насчет четырех строк, это символы в блоке д или номера строк тоже нужно искать.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Станция передаёт только два символа в блоке D. При этом два младших бита блока B говорят о том, какая эта пара.
После приёма четырёх таких пар (четыре строки у меня в цитировании выше) с разным адресом можно сформировать итоговую строчку из 8 символов.
После приёма четырёх таких пар (четыре строки у меня в цитировании выше) с разным адресом можно сформировать итоговую строчку из 8 символов.
Re: Расчет частоты приема для RDA5807M
Значит я все все таки правильно понял, огромное спасибо за помощь буду пробовать.
Re: Расчет частоты приема для RDA5807M
Запустил чтение RDS, но к сожалению как я понял правильность вывода данных зависит от уровня сигнала, так корректный вывод получился при уровни сигнала 24, а так как я живу под бугорком у меня в дневное время сигнал от 16 до 20. Так что пока придется от RDS Отказаться. Да и так же подтверждаю при снижении уровня сигнала снижается громкость.
Re: Расчет частоты приема для RDA5807M
Что бы не создавать новую тему, спрошу здесь.
А никто не знает как у rda5807 сделать так, что бы во время перестройки звук не приглушался? Так же будет удобнее, в ручную, станции искать.
А никто не знает как у rda5807 сделать так, что бы во время перестройки звук не приглушался? Так же будет удобнее, в ручную, станции искать.