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

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

Вт фев 23, 2016 19:53:11

Бит TUNE устанавливаете? Только с ним будет производится перестройка частоты.

А вот без этого бита удобно, например, громкость регулировать.

Прямой ввод частоты осуществляется же установкой бита FREQ_MODE (07L) и прямым вводом значения частоты в регистрах 08H,L. Значение указывается в кГц относительно установленного нижнего лимита частоты.

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

Вт фев 23, 2016 21:12:07

А у меня другая проблема запускаю авто поиск командой 0x20,0xD2,0x81. Станции находит но не принимает данные из RDA5807 после запроса 0х10,0х0А и запуска чтения, 0х11 приходит 0XFF

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

Ср фев 24, 2016 10:36:56

WiseLord писал(а):Бит TUNE устанавливаете? Только с ним будет производится перестройка частоты.

А вот без этого бита удобно, например, громкость регулировать.

Прямой ввод частоты осуществляется же установкой бита FREQ_MODE (07L) и прямым вводом значения частоты в регистрах 08H,L. Значение указывается в кГц относительно установленного нижнего лимита частоты.


Да, бит TUNE был установлен, но я пробовал вводить частоту в биты CHAN[9:0] регистра 03. Попробую через регистр 08. Кстати, а если частоту нужно устанавливать через регистр 08, то зачем нужны биты CHAN[9:0] регистра 03?

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

Ср фев 24, 2016 10:49:01

Регистр 03 - это ввод частоты по сетке. Базовая функциональность, с неё работает и автопоиск (можно автонастроиться и вычитать значение настройки в единицах этой сетки.

Регистр 08 - прямой ввод частоты (грубо говоря, сетка в 1кГц). Тут уже после автонастройки точную частоту вроде никак не узнать.

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

Ср фев 24, 2016 11:07:17

Понял, а можно ввести частоту по сетке (регистр 03) и перестроится на нее? Как это сделать. Случайно, не бит DIRECT MODE регистра 03 за это отвечает?

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

Ср фев 24, 2016 11:25:50

Можно. Собственно, это и есть основной режим работы.

В принципе, можете глянуть на мою реализацию драйвера для RDA5807. Там, по идее, ничего сложного. У меня подход следующий - сначала нужные данные укладываются в буфер wrBuf[], а потом этот буфер закидывается в микросхему целиком. Аналогично, для чтения - свой буфер rdBuf[].

Константы смотрите в .h-файле.

А бит DIRECT_MODE - это что-то тестовое за рамками даташита.

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

Ср фев 24, 2016 20:03:45

Наконец добился авто поиска, как оказалось не работала процедура аппаратного чтения I2C, залил программный I2C и все заработало. Собственно теперь работает перестройка по частоте в ручном режиме, регулировка громкости и собственно авто поиск, также здесь используется LCD NOKIA 5110. Писал программу для PIC16F873A
Вложения
Radio.asm
(42.79 KiB) Скачиваний: 599

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

Чт фев 25, 2016 11:51:50

111284 Жаль только на асме, как раз надо было для PIC. :(

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

Чт фев 25, 2016 12:25:43

Привык к нему, а подучить Си времени пока нет.

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

Сб фев 27, 2016 17:04:43

Оптимизировал свой код, теперь хочу попробовать чтение RDS, но полистав интернет так и не попалась инфа как получать данные текста из прочитанных байт. Народ прошу помощи с этим, если не сложно поделитесь опытом декодирования RDS данных.

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

Сб фев 27, 2016 17:35:35

Чуть выше я давал ссылку на свою реализацию RDA5807, там в том числе и поддержка RDS есть.

В двух словах - у RDA5807 периодически (в главном цикле) запрашивается статус, т.е. вызывается функция rda5807ReadStatus(), возвращающая массив данных. Часть этих данных является данными RDS, и если они достаточно корректные (цепочка условий), выполняется rdsSetBlocks() над концом этого массива. Эта функция (её реализация в rds.h/rds.c, идея подсмотрена где-то на просторах интернета) собственно декодирует эти данные и укладывает их в читаемом виде в 8-байтовую строку, которую можно запросить в любой момент функцией rdsGetText().

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

Сб фев 27, 2016 18:57:20

Да смотрел ваш пример, вот как раз интересует момент загрузки данных в массив и определения символа в строке, к сожалению с Си не очень, цепочка проверки на наличее RDS понятна, а вот что дальше делать не очень.

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

Сб фев 27, 2016 19:33:30

Код:
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

Сб фев 27, 2016 20:55:01

То есть после проверки статусов, смотрим блок Б и записываем данные из блока Д в регистры соответствующие номеру символа в строке.

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

Вс фев 28, 2016 05:47:33

Да, что-то вроде того. И после приёма четырёх разных строк будем в итоговом буфере иметь нужные данные.

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

Вс фев 28, 2016 10:33:53

Не совсем понял насчет четырех строк, это символы в блоке д или номера строк тоже нужно искать.

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

Вс фев 28, 2016 15:56:04

Станция передаёт только два символа в блоке D. При этом два младших бита блока B говорят о том, какая эта пара.

После приёма четырёх таких пар (четыре строки у меня в цитировании выше) с разным адресом можно сформировать итоговую строчку из 8 символов.

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

Вс фев 28, 2016 16:42:17

Значит я все все таки правильно понял, огромное спасибо за помощь буду пробовать.

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

Пн фев 29, 2016 22:31:29

Запустил чтение RDS, но к сожалению как я понял правильность вывода данных зависит от уровня сигнала, так корректный вывод получился при уровни сигнала 24, а так как я живу под бугорком у меня в дневное время сигнал от 16 до 20. Так что пока придется от RDS Отказаться. Да и так же подтверждаю при снижении уровня сигнала снижается громкость.

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

Пн мар 28, 2016 21:08:26

Что бы не создавать новую тему, спрошу здесь.

А никто не знает как у rda5807 сделать так, что бы во время перестройки звук не приглушался? Так же будет удобнее, в ручную, станции искать.
Ответить