Jump to content
bulat943

Приемник на RDA5807 и семисегментнике

Recommended Posts

25я нога в DIP корпусе.

И дело в том, что прошивку programm 88-108 oa ok 04 ST ER 01.hex

не могу проверит а PROTEUSе.Глючит.

Проверял на разных компах.

Edited by vbrt

Share this post


Link to post
Share on other sites

 он и будет глючить-в программе идет запрос рда-пытается считать инфу из RDA а ее нет...

вот стереоиндикатор на portd.3 (оставлял portd.3 для фотоприемника но видно не судьба)

 

programm 88-108 oa ok 04 ST ER 02.hex

Edited by bulat943

Share this post


Link to post
Share on other sites

Высококачественные конденсаторы Panasonic для надежности вашей электроники!

Электролитические алюминиевые конденсаторы Panasonic отличаются повышенной надежностью, длительным сроком службы, низким импедансом и выдерживают большой ток пульсаций, в то время как семейства полимерных конденсаторов Panasonic SP-CAP, POSCAP, OS-CON и HYBRID характеризуют сверхнизкий ESR и увеличенная емкость, работа при высоких напряжениях и в расширенном температурном диапазоне. Приобретая продукцию Panasonic, вы гарантированно получаете самое передовое решение для ваших задач. Для облегчения вашего выбора, мы подготовили подборку полезных материалов.

Читать статьи

можете фото выложить,посмотрим что не так

похоже нет ответа от рда,резисторы к SCL и  SDA сколько ком?

Edited by bulat943

Share this post


Link to post
Share on other sites
                     

Вебинар "Как создать BLE-устройство на базе новейшего беспроводного микроконтроллера STM32WB55"

27 ноября 2019 года компания КОМПЭЛ приглашает разработчиков, технических руководителей и энтузиастов беспроводной связи на вебинар, посвященный новинке 2019 года – мультипротокольному беспроводному микроконтроллеру STM32WB55, который позволяет создавать устройства на базе стандартов BLE 5.0; BLE Mesh; 802.15.4/ZigBee и Thread. На вебинаре мы покажем, как с помощью привычных инструментов STM32Cube и STM32CubeMX можно создать свое первое, надежно работающее BLE-приложение.

Зарегистрироваться на вебинар

@bulat943, повторил Ваш приемник, всё работает как надо. Прошивка programm 88-108 oa ok 04 ST ER 01.hex, индикатор с ОА, светодиод стереоиндикатора подключен на порт PORTC.2. На фото не все разряды светятся, это проблема фотоаппарата. Спасибо за проделанную работу.

IMG_20180128.jpg

Share this post


Link to post
Share on other sites

Уважаемый bulat943.

Все нормально работает.

Я вчера машинально проверял на м-х RDA5807SP.

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

Прошивка programm 88-108 oa ok 04 ST ER 01.hex,светодиод подключен на порт PORTC.2. 

Большое спасибо.

И еще,если не трудно.Можно сделать начальную громкость не 8 а 3.

А то у меня довольно редкая м-х УНЧ CM8602B.

Чувствительная.

Заранее благодарен.

Share this post


Link to post
Share on other sites
19 минут назад, vbrt сказал:

А то у меня довольно редкая м-х УНЧ CM8602B.

Не редкая, но чувствительная. При полной громкости орет страшно. Я поставил на вход 100к, после этого стало нормально.

Share this post


Link to post
Share on other sites

По CM8602B в инете инфы минимум.

У меня готовая плата со всей обвязкой(с МР3 плейера).

Но она звучит лучше,чем РАМ8403,а параметры такие же.

Share this post


Link to post
Share on other sites

Я рад что хоть кто-то повторил один в один и мои старания оказались не напрасны )))

прошивка с громкостью=3 при включении

 

 

programm 88-108 oa ok 04 ST ER 03.hex

Edited by bulat943
изменил

Share this post


Link to post
Share on other sites

@bulat943 , нужна Ваша помощь, или консультация. Не могу добить RDS. Я так понял, Вы с этим разобрались. Но, все по порядку. Включил бит 02L.3 = 1( RDS_EN). Включил бит 04H.5=1 (RBDS в полнофункциональном режиме). Дальше попробовал считать BLERA и BLERB. Значения получились 00 и 01. Поэтому пока на них заморачиваться не стал. Поставил условие: если 0AH.7 = 1 (RDS/RBDS группа готова) и OAH.4 = 1(декодер RDS синхронизирован), попытался считать данные. Как я понял они делятся на четыре блока. A,B,C,D. Причем текстовые данные (два байта) передаются в блоке D, в то время, когда в блоке B два младших бита принимают значения : 00 01 10 11. Получается четыре двухбайтных слова. Я их считал, или думаю, что считал именно их. Но на экран выводятся цифры. Как их сложить, или что сделать, чтобы получились буквы не представляю. Сначала выводил на 1602 без кириллицы. Подумал, может знакогенератор не подходит. Сегодня подключил LS020. Тоже цифры. А я хочу буквы. Если не трудно, растолкуйте.

Share this post


Link to post
Share on other sites

какие цифры высвечиваются ?просто иметь представление как они выглядят

Share this post


Link to post
Share on other sites

Прошил прошивкой programm 88-108 oa ok 04 ST ER 01.hex,

энкодер стал работать только в сторону уменьшения.

Share this post


Link to post
Share on other sites
1 час назад, proekt07 сказал:

@andrusha152 Возможно цифры-это коды символов ASCII.

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

Share this post


Link to post
Share on other sites
1 минуту назад, bulat943 сказал:

повторяю-вы напишите какие числа выводятся

Почему то видео снять не удалось. Выкладываю фото. Получается так: все цифры начинают бегать, через пару секунд останавливаются. Секунд 30 стоят неподвижно, после чего снова начинают бегать.

IMG_20180129_183838.jpg

IMG_20180129_183912.jpg

IMG_20180129_184003.jpg

Share this post


Link to post
Share on other sites

что-то не так в программе,числа не могут быть более 255,ищите косяк

должно идти по ASC коду,давайте кусочек программы,посмотрим

 

Share this post


Link to post
Share on other sites

Сначала считываю все байты из RDA:

    I2cinit
    I2cstart
    I2cwbyte Adress
    I2cwbyte &H0A
    Waitms 50
    I2cstart
    I2cwbyte Adressread
    I2crbyte Datahi0 , Ack
    I2crbyte Datalo0 , Ack
    I2crbyte Datahi1 , Ack
    I2crbyte Datalo1 , Ack
    I2crbyte Datahi2 , Ack
    I2crbyte Datalo2 , Ack
    I2crbyte Datahi3 , Ack
    I2crbyte Datalo3 , Ack
    I2crbyte Datahi4 , Ack
    I2crbyte Datalo4 , Ack
    I2crbyte Datahi5 , Ack
    I2crbyte Datalo5 , Nack
    I2cstop

Далее, проверяю готовность и синхронизацию RDS

 If Datahi0.7 = 1 Then    'RDS группа готова
   If Datahi0.4 = 1 Then  'синхронизация RDS
   Gosub Rds                                                
   End If
   End If

Ну, а потом вывожу на индикацию.

Rds:
 If Datalo3.0 = 0 And Datalo3.1 = 0 Then
     Stroka_2 = Str(datahi5) + "  " + Str(datalo5)
     End If
 If Datalo3.0 = 0 And Datalo3.1 = 1 Then
    Stroka_1 = Str(datahi5) + "  " + Str(datalo5)
    End If
 If Datalo3.0 = 1 And Datalo3.1 = 0 Then
    Stroka_3 = Str(datahi5) + "  " + Str(datalo5)
   End If
   If Datalo3.0 = 1 And Datalo3.1 = 1 Then
   Stroka_4 = Str(datahi5) + "  " + Str(datalo5)
   End If
    Lcdat 60 , 15 , Stroka_1 , Blue , White
     Lcdat 78 , 15 , Stroka_2 , Black , White
    Lcdat 96 , 15 , Stroka_3 , Green , White
    Lcdat 114 , 15 , Stroka_4 , Darkblue , White
Return

Конечно все дело в коде. Но примеров работы с RDS я не нашел. Есть кое что на радиокоте и у catcat но на C. А это темный лес.

Share this post


Link to post
Share on other sites

Я как то делал,не помню как,сейчас снова пытаюсь сделать,кое что нашел здесь

 

там написано-

Цитата

Принцип получения данных названия станций.

Контроллер постоянно читает 12 байт данных.

Если обнаруживается установка бита RDSS и отсутствие ошибок BLERA и BLERB = 0. Производиться запись полученных байт (BLOCK D) Байт 10 и Байт 11 , в массив по адресу по 2 младшим битам байта 7 если код сообщения 0A.

Если это условие не соблюдается массив очищается.

Когда указатель переходит на 0 данные выводятся для индикации

 

Share this post


Link to post
Share on other sites

Да, я это читал, но практически реализовать не смог. Считал байты 10 и 11, а что с ними делать не знаю. Решил вывести на индикатор, чтобы хотя бы посмотреть, что там. Но и тут не получилось.

Еще на радиокоте нашел немножко:

Цитата

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 и соберутся в некую строку, передаваемой станцией.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...