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

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

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

Сообщение WiseLord »

Не должно быть, да и в принципе не может быть никакой метки о передаче слова. Станция не знает, принял ли приемник все слово, или только последнюю пару символов. Станция просто транслирует их по очереди. По стандарту - всегда одни и те же 4 пары.
Можно просто их сразу выводить на экран по мере приема, что приведет к такому эффекту. А можно дожижаться четвертой пары (чем этот номер не признак конца слова?) и только затем выводить.
Реклама
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

короче решил отказаться от рдс,в итоге получилось так-
приемник собран в корпусе-,бокс для 4*ааа батареек с выключателем(пергородки и выключатель удалены)
управляющий контроллер атмега168,дисплей нокиа 5110,4 кнопки,кварц 32768 гц (используется в часах на атмега168),аккумулятор от сотового (сониэриссон),зарядка на LTC4054 c USB-разьемом,стабилизатор питания 3,3 в на LP2981_3.3
кнопки + - меню on
в дежурном режиме потребление 0,5 ма,на экране время и напряжение батареи....
при нажатии on включается радио,кнопками - + регулируем громкость,кнопка on-откл радио,коротким нажатием меню переключаем каналы(по кругу)
--------------------------------КНОПКА МЕНЮ----------------------------------
кнопка меню имеет 3 варианта нажатия(ее состояние высвечивается в верхнем правом углу экрана):
1)нажатие менее 0,5 сек(в углу справа наверху CH+) -переключение частот из памяти
2)нажатие более 0,5 сек и менее 2 сек(в углу справа наверху SKAN+) -автопоиск вверх,как станция будет найдена-стоп поиска
3)нажатие более 2 сек(в углу справа наверху MENU)-вход в меню настроек,которое имеет 5 пунктов
---------------------------------САМО МЕНЮ---------------------------------
>автопоиск
ручной поиск
удаление канала
автоотключение
установка времени

если кому интересно-скину архив(потеус,нех,плата),исходники пока дать не могу

Добавлено after 3 hours 56 minutes 31 second:
https://www.youtube.com/watch?v=clVid3s ... e=youtu.be

Добавлено after 3 hours 10 minutes:
вот протеус,нех,плата
(если кого заинтересует-открою новую тему)
Вложения
rda5807 at168 n5110.zip
протеус,нех,плата в SL6
(80.63 КБ) 617 скачиваний
Безымянный.jpg
(129.99 КБ) 978 скачиваний
Реклама
Аватара пользователя
Kotto
Опытный кот
Сообщения: 795
Зарегистрирован: Чт ноя 08, 2012 22:28:05
Откуда: Ижевск
Контактная информация:

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

Сообщение Kotto »

Уважаемые форумчане, помогите разобраться, пожалуйста. Сам я не особо силен в программировании, хочу сделать нормальное радио на stm32f100, взял отладочную плату, Keil, написал программу, используя библиотеку вот от этого примера к видео https://www.youtube.com/watch?v=HGBqD09_n0M. Все казалось бы работает, но ручного задания частоты нет ни в какую ((( Может кто поможет исправить текущую библиотеку или у кого есть готовая для stm32 keil?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Беглый взгляд на исходник показывает, что у текущей библиотеки уже есть функция ручного задания частоты (void rda5807_SetFreq_In100Khz(uint16_t Freq100kHz)), так что не совсем понятно, что Вы там хотите исправить.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Kotto
Опытный кот
Сообщения: 795
Зарегистрирован: Чт ноя 08, 2012 22:28:05
Откуда: Ижевск
Контактная информация:

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

Сообщение Kotto »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3154866#p3154866"]Беглый взгляд на исходник показывает, что у текущей библиотеки уже есть функция ручного задания частоты (void rda5807_SetFreq_In100Khz(uint16_t Freq100kHz)), так что не совсем понятно, что Вы там хотите исправить.[/uquote]

Да, но она не задает частоту, и функция чтения текущей частоты читает что то совершенно не то. При этом автопоиск работает великолепно :cry: :cry:
-------------

Проблема решилась, библиотека более чем рабочая, под stm32f100rbt6 работает идеально.

Косяк был в настройках компилятора, была задрана частота под 24 МГц, выставил 8 и все заработало
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Kotto, в чем проблема посмотреть в дебуггере и ЛА ? Да и поиск готовых либ удел ардуинщика...
Реклама
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

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

Сообщение salyamkamrad »

[uquote="pooh007",url="/forum/viewtopic.php?p=2709340#p2709340"]А никто не знает как у rda5807 сделать так, что бы во время перестройки звук не приглушался? Так же будет удобнее, в ручную, станции искать.[/uquote]
Действительно, как так сделать? При последовательной записи сразу во все регистры приемник издает адские хлопки, при перестройке по частоте, звук пропадает на каждом шаге энкодера. Будет ли щелкать при записи частоты отдельно в регистры 03H:03L?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Насколько я изучил этот вопрос, звук приглашается всегда, когда активируется бит TUNE регистра 03.
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

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

Сообщение salyamkamrad »

Другими словами при загрузке младших бит номера канала (частоты) в регистр 03L мы всегда будем тревожить бит TUNE устанавливая его в 1 и будем иметь приглушение звука?

P.S. Из добытых в интернете материалов неясно, есть ли у RDA5807M режим загрузки данных в отдельные регистры? Конкретно с индексом "M" в конце. Пишут что по адресу чипа 0x22 можно работать с каждым регистром по отдельности, но у меня по адресу 0x22 чип не отвечает, ACK не устанавливается.

Нормально работает только по адресу 0x10 указанному в даташите, и плюс к тому откликается по адресу, если не путаю, 0x60. Что там по 0x60 я хз, наверное режим совместимости с TEA. Пробовал адреса 0x20, 0x22, 0x12, все глухо как в танке, чип не отвечает подтверждением приема данных.

P.P.S. ЦУК!!! Только сейчас понял, что ардуинщики в этих наших интернетах додумались писать адрес чипа на шине I2C вместе со значением бита приема-передачи по I2C...
Значит адрес прямой записи в отдельные регистры будет 0x11. Чип отвечает по этому hex адресу 11 с нулем на месте бита приема-передачи выставляя ASK на шине. Дальше буду пробовать.
jcxz
Мудрый кот
Сообщения: 1731
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="salyamkamrad",url="/forum/viewtopic.php?p=3264399#p3264399"]Значит адрес прямой записи в отдельные регистры будет 0x11. Чип отвечает по этому hex адресу 11 с нулем на месте бита приема-передачи выставляя ASK на шине. Дальше буду пробовать.[/uquote]
Да, у меня в текущих исходниках все операции с чипом производятся по адресу 0x11.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Да, у ардуинщиков адреса в диапазоне 0..127, а READ/WRITE идёт уже отдельной сущностью. В их интерпретации адреса будут 0x10 (последовательный доступ) и 0x11 (порегистровый). Ну и 0x60 в режиме совместимости с TEA5711.

Ну а в другой интерпретации это будут, соответственно, адреса 0x20(0x21), 0x22(0x23) и 0xC0(0xC1).
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

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

Сообщение salyamkamrad »

Что-то не получается у меня загрузить данные в конкретный регистр чипа 03H:03L. Вероятно совершаю такую ошибку: сначала загружаю последовательно данные сразу во все регистры, потом начинаю новую передачу по I2C и записываю номер канала в отдельный регистр 0x03. Есть у меня подозрение, что нужно выбирать один из вариантов, либо грузить данные сразу во все регистры, либо адресно в каждый регистр, но опять же во все начиная с регистра 0x02 и заканчивая регистром 0x07. Я прав?
jcxz
Мудрый кот
Сообщения: 1731
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="salyamkamrad",url="/forum/viewtopic.php?p=3264607#p3264607"]нужно выбирать один из вариантов, либо грузить данные сразу во все регистры, либо адресно в каждый регистр, но опять же во все начиная с регистра 0x02 и заканчивая регистром 0x07. Я прав?[/uquote]
Ничего не понял..... :shock:
Обращаться к чипу можно как по адресу последовательного доступа (0x10), так и по адресу произвольного доступа (0x11). Вперемежку. Всё работает.

PS: Да - и адресов регистров всего не 2...7, а 2...15.
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

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

Сообщение salyamkamrad »

[uquote="jcxz",url="/forum/viewtopic.php?p=3264683#p3264683"]Вперемежку[/uquote]
Спасибо, с этим теперь все ясно. А то я сомневался.
[uquote="jcxz",url="/forum/viewtopic.php?p=3264683#p3264683"]адресов регистров всего не 2...7, а 2...15.[/uquote]
Вот здесь непонятно. Там же вроде 6 16-разрядных регистров, по два байта в регистре. Адрес указывается для регистра от 2 до 7 и по каждому адресу последовательно загружаются 2 байта. Или я чего-то не догоняю?
P.S. Я имею ввиду количество регистров для записи управляющих байтов в чип. Регистры для чтения пока не рассматривал.
jcxz
Мудрый кот
Сообщения: 1731
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="salyamkamrad",url="/forum/viewtopic.php?p=3264709#p3264709"]P.S. Я имею ввиду количество регистров для записи управляющих байтов в чип. Регистры для чтения пока не рассматривал.[/uquote]
Регистры для записи: 2...9; для чтения: 10...15.
Да - 2-байтовые все.
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

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

Сообщение salyamkamrad »

[uquote="salyamkamrad",url="/forum/viewtopic.php?p=3264607#p3264607"]Что-то не получается у меня загрузить данные в конкретный регистр чипа 03H:03L[/uquote]
Перезагрузил комп, передернул PICkit3, перекомпилировал и перепрошил, и заработала адресная загрузка данных в регистры. Глюки были. Но, от щелчков и пропадания звука при перестройке это мне не помогло. Долго настройка устаканивается при каждом шаге. Попробую напрямую управлять синтезатором, может так удастся избавится от неприятных эффектов. Непрерывным вращением ручки энкодера вообще невозможно нормально настроиться. Проворачиваешь на один щелчок и ждешь появления звука, потом еще шаг и снова ждать. Если крутить быстро, звук вообще не появляется, даже шипения нет.
jcxz
Мудрый кот
Сообщения: 1731
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="salyamkamrad",url="/forum/viewtopic.php?p=3264769#p3264769"]Долго настройка устаканивается при каждом шаге. Попробую напрямую управлять синтезатором, может так удастся избавится от неприятных эффектов. Непрерывным вращением ручки энкодера вообще невозможно нормально настроиться. Проворачиваешь на один щелчок и ждешь появления звука, потом еще шаг и снова ждать. Если крутить быстро, звук вообще не появляется, даже шипения нет.[/uquote]
Эта опция (автоматическое отключение звука при скане) где-то в регистрах отключается. Я уже точно не помню где, но у меня раньше тоже так было.
Сейчас у меня и скан частот и ручная перестройка частоты делается без гашения звука.
Там был какой-то битик, поищите. Если не найдёте, то я потом пороюсь в исходниках - вспомню где.
Скан, перестройка частоты или канала - тоже у меня всё чётко - без артефактов. Это возможно ;)

PS: Насколько помню по памяти, там есть какой-то битик, который разрешает автоматическое кратковременное гашение звука при любой операции записи в регистры.
Мне это сначала тоже очень мешало - невозможно было даже громкость выставить. Но потом я его нашёл и выключил.
Возможно, что это бит softMuteEna в регистре 4.
Спойлер#define TUNER_ADDR_NATIVE_SEQ 0x10 //RDA5807 mode, sequential register address
#define TUNER_ADDR_NATIVE_RND 0x11 //RDA5807 mode, random access mode.
#define TUNER_ADDR_COMPATIBLE 0x60 //TEA5767 compatible mode

#define RDA_REG_W_START 2 //RDA5807M: стартовый регистр для операции записи в TUNER_ADDR_NATIVE_SEQ
#define RDA_REG_R_START 10 //RDA5807M: стартовый регистр для операции чтения из TUNER_ADDR_NATIVE_SEQ
#define RDA_REG_W_N 7 //RDA5807M: кол-во регистров для операции записи в TUNER_ADDR_NATIVE_SEQ
#define RDA_REG_R_N 6 //RDA5807M: кол-во регистров для операции чтения из TUNER_ADDR_NATIVE_SEQ
#define RDA_REG_N 64 //RDA5807M: всего адресов регистров

//Регистры RDA5807M FM Tuner V1.1 в компактном виде.
struct TunerReg {
enum {R02_enable, R02_softReset, R02_newMethod, R02_rdsEna, R02_clkMode,
R02_seekMode = R02_clkMode + 3, R02_seek, R02_seekUp,
R02_rclkDirectInputMode, R02_rclkNonCalibrateMode, R02_bass, R02_mono,
R02_muteDis, R02_hizDis};
enum {R03_space, R03_band = R03_space + 2, R03_tune = R03_band + 2,
R03_directMode, R03_chan};
enum {R04_afcDis = 8, R04_softMuteEna, R04_deEmphasis = 11};
enum {R05_volume, R05_lnaICSel = R05_volume + 4,
R05_lnaPortSel = R05_lnaICSel + 2, R05_seekTH = R05_lnaPortSel + 2,
R05_intMode = R05_seekTH + 7};
enum {R06_openMode = 13};
enum {R07_freq_mode, R07_softblend_en, R07_seek_th_old, R07_mode_50_65 = 9,
R07_th_sofrblend};
enum {R0A_readchan, R0A_st = R0A_readchan + 10, R0A_blk_e, R0A_rdss,
R0A_sf, R0A_stc, R0A_rdsr};
enum {R0B_blerb, R0B_blera = R0B_blerb + 2, R0B_abcd_e = R0B_blera + 2,
R0B_fm_ready = 7, R0B_fm_true, R0B_rssi};
union {
struct {
u16 enable:1;
u16 softReset:1;
u16 newMethod:1;
u16 rdsEna:1;
u16 clkMode:3;
u16 seekMode:1;
u16 seek:1;
u16 seekUp:1;
u16 rclkDirectInputMode:1;
u16 rclkNonCalibrateMode:1;
u16 bass:1;
u16 mono:1;
u16 muteDis:1;
u16 hizDis:1;
};
u16 r02;
};
union {
struct {
u16 space:2;
u16 band:2;
u16 tune:1;
u16 directMode:1;
u16 chan:10;
};
u16 r03;
};
union {
struct {
u16 unuse40:8;
u16 afcDis:1;
u16 softMuteEna:1;
u16 unuse41:1;
u16 deEmphasis:1;
u16 unuse42:4;
};
u16 r04;
};
union {
struct {
u16 volume:4;
u16 lnaICSel:2;
u16 lnaPortSel:2;
u16 seekTH:7;
u16 intMode:1;
};
u16 r05;
};
union {
struct {
u16 unuse60:13;
u16 openMode:2;
u16 unuse61:1;
};
u16 r06;
};
union {
struct {
u16 freq_mode:1;
u16 softblend_en:1;
u16 seek_th_old:6;
u16 unuse70:1;
u16 mode_50_65:1;
u16 th_sofrblend:5;
u16 unuse71:1;
};
u16 r07;
};
union {
u16 directFreq;
u16 r08;
};
union {
struct {
u16 readchan:10;
u16 st:1;
u16 blk_e:1;
u16 rdss:1;
u16 sf:1;
u16 stc:1;
u16 rdsr:1;
};
u16 r0A;
};
union {
struct {
u16 blerb:2;
u16 blera:2;
u16 abcd_e:1;
u16 unuseB0:2;
u16 fm_ready:1;
u16 fm_true:1;
u16 rssi:7;
};
u16 r0B;
};
union {
u16 rdsa;
u16 r0C;
};
union {
u16 rdsb;
u16 r0D;
};
union {
u16 rdsc;
u16 r0E;
};
union {
u16 rdsd;
u16 r0F;
};
};
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Если писать только громкость (порегистровая запись), то звук не глушится. Глушится он только когда тюнер настраивается на задаваемую частоту. И, если не ошибаюсь, SOFTMUTE бит не влияет на это.
Аватара пользователя
salyamkamrad
Друг Кота
Сообщения: 3284
Зарегистрирован: Чт окт 08, 2009 00:43:16

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

Сообщение salyamkamrad »

Нет, бит SOFTMUTE тут не при делах, походу. Как я понял, это мягкое приглушение звука. В отличие от DMUTE отключающего звук полностью, SOFTMUTE только снижает громкость раза в два.

Назрел еще один вопрос. Работает ли БШН при ручной настройке частоты? В режиме поиска шума во время настройки не было, а с установленным битом TUNE шумит во всю при перестройке. Бит SOFTBLEND_EN устанавливал, в биты TH_SOFRBLEND загонял все возможные значения. Но подавления шума в отсутствии сигнала так и не добился.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

При ручной установке частоты приглушается звук,как это исправить?
пару страниц спрашивал pooh007 но внятного ответа не нашел,SOFTMUTE_EN и SOFTBLEND_EN в ноле
Спойлерrda5807_init:
dane = freg - 870
I2cinit
I2cstart
I2cwbyte &H20 ' 20
'02
I2cwbyte &HD2 'dhiz dmute mono bass rclk rclk seekup seek D2=11010010
I2cwbyte &b00001101 ' 85= 10000101
'03
I2cwbyte dane / 4 '
dane = dane mod 4
dane = dane * 64
set dane.4
I2cwbyte dane '
'04
I2cwbyte &B00010000 ' RSVD_RSVD_RSVD_RSVD_DE_RSVD_SOFTMUTE_EN_AFCD <<<----
I2cwbyte &B00000000 '
'05
I2cwbyte &B00001000 ' 1000 4 бита-порог поиска
dane = &B10000000 + volume
I2cwbyte dane
'06
I2cwbyte &B00000000 ' 000000000
I2cwbyte &B00000000
'07
I2cwbyte &B00000000 ' 000000000
I2cwbyte &B00000000 ' SOFTBLEND_EN=бит 1
I2cstop


return
Ответить

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