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

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

Чт окт 13, 2016 20:19:59

Не должно быть, да и в принципе не может быть никакой метки о передаче слова. Станция не знает, принял ли приемник все слово, или только последнюю пару символов. Станция просто транслирует их по очереди. По стандарту - всегда одни и те же 4 пары.
Можно просто их сразу выводить на экран по мере приема, что приведет к такому эффекту. А можно дожижаться четвертой пары (чем этот номер не признак конца слова?) и только затем выводить.

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

Пт окт 14, 2016 13:18:23

короче решил отказаться от рдс,в итоге получилось так-
приемник собран в корпусе-,бокс для 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 KiB) Скачиваний: 577
Безымянный.jpg
(129.99 KiB) Скачиваний: 909

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

Вт авг 01, 2017 13:56:32

Уважаемые форумчане, помогите разобраться, пожалуйста. Сам я не особо силен в программировании, хочу сделать нормальное радио на stm32f100, взял отладочную плату, Keil, написал программу, используя библиотеку вот от этого примера к видео https://www.youtube.com/watch?v=HGBqD09_n0M. Все казалось бы работает, но ручного задания частоты нет ни в какую ((( Может кто поможет исправить текущую библиотеку или у кого есть готовая для stm32 keil?

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

Вт авг 01, 2017 14:35:08

Беглый взгляд на исходник показывает, что у текущей библиотеки уже есть функция ручного задания частоты (void rda5807_SetFreq_In100Khz(uint16_t Freq100kHz)), так что не совсем понятно, что Вы там хотите исправить.

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

Ср авг 02, 2017 05:43:46

Беглый взгляд на исходник показывает, что у текущей библиотеки уже есть функция ручного задания частоты (void rda5807_SetFreq_In100Khz(uint16_t Freq100kHz)), так что не совсем понятно, что Вы там хотите исправить.


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

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

Косяк был в настройках компилятора, была задрана частота под 24 МГц, выставил 8 и все заработало

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

Чт авг 10, 2017 12:22:56

Kotto, в чем проблема посмотреть в дебуггере и ЛА ? Да и поиск готовых либ удел ардуинщика...

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

Вт дек 19, 2017 20:47:33

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

Действительно, как так сделать? При последовательной записи сразу во все регистры приемник издает адские хлопки, при перестройке по частоте, звук пропадает на каждом шаге энкодера. Будет ли щелкать при записи частоты отдельно в регистры 03H:03L?

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

Вт дек 19, 2017 22:09:35

Насколько я изучил этот вопрос, звук приглашается всегда, когда активируется бит TUNE регистра 03.

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

Ср дек 20, 2017 10:16:57

Другими словами при загрузке младших бит номера канала (частоты) в регистр 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 на шине. Дальше буду пробовать.

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

Ср дек 20, 2017 12:20:02

Значит адрес прямой записи в отдельные регистры будет 0x11. Чип отвечает по этому hex адресу 11 с нулем на месте бита приема-передачи выставляя ASK на шине. Дальше буду пробовать.

Да, у меня в текущих исходниках все операции с чипом производятся по адресу 0x11.

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

Ср дек 20, 2017 13:07:57

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

Ну а в другой интерпретации это будут, соответственно, адреса 0x20(0x21), 0x22(0x23) и 0xC0(0xC1).

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

Ср дек 20, 2017 14:17:02

Что-то не получается у меня загрузить данные в конкретный регистр чипа 03H:03L. Вероятно совершаю такую ошибку: сначала загружаю последовательно данные сразу во все регистры, потом начинаю новую передачу по I2C и записываю номер канала в отдельный регистр 0x03. Есть у меня подозрение, что нужно выбирать один из вариантов, либо грузить данные сразу во все регистры, либо адресно в каждый регистр, но опять же во все начиная с регистра 0x02 и заканчивая регистром 0x07. Я прав?

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

Ср дек 20, 2017 16:22:58

нужно выбирать один из вариантов, либо грузить данные сразу во все регистры, либо адресно в каждый регистр, но опять же во все начиная с регистра 0x02 и заканчивая регистром 0x07. Я прав?

Ничего не понял..... :shock:
Обращаться к чипу можно как по адресу последовательного доступа (0x10), так и по адресу произвольного доступа (0x11). Вперемежку. Всё работает.

PS: Да - и адресов регистров всего не 2...7, а 2...15.

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

Ср дек 20, 2017 17:11:53

Вперемежку

Спасибо, с этим теперь все ясно. А то я сомневался.
адресов регистров всего не 2...7, а 2...15.

Вот здесь непонятно. Там же вроде 6 16-разрядных регистров, по два байта в регистре. Адрес указывается для регистра от 2 до 7 и по каждому адресу последовательно загружаются 2 байта. Или я чего-то не догоняю?
P.S. Я имею ввиду количество регистров для записи управляющих байтов в чип. Регистры для чтения пока не рассматривал.

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

Ср дек 20, 2017 18:31:03

P.S. Я имею ввиду количество регистров для записи управляющих байтов в чип. Регистры для чтения пока не рассматривал.

Регистры для записи: 2...9; для чтения: 10...15.
Да - 2-байтовые все.

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

Ср дек 20, 2017 18:47:19

Что-то не получается у меня загрузить данные в конкретный регистр чипа 03H:03L

Перезагрузил комп, передернул PICkit3, перекомпилировал и перепрошил, и заработала адресная загрузка данных в регистры. Глюки были. Но, от щелчков и пропадания звука при перестройке это мне не помогло. Долго настройка устаканивается при каждом шаге. Попробую напрямую управлять синтезатором, может так удастся избавится от неприятных эффектов. Непрерывным вращением ручки энкодера вообще невозможно нормально настроиться. Проворачиваешь на один щелчок и ждешь появления звука, потом еще шаг и снова ждать. Если крутить быстро, звук вообще не появляется, даже шипения нет.

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

Ср дек 20, 2017 20:04:00

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

Эта опция (автоматическое отключение звука при скане) где-то в регистрах отключается. Я уже точно не помню где, но у меня раньше тоже так было.
Сейчас у меня и скан частот и ручная перестройка частоты делается без гашения звука.
Там был какой-то битик, поищите. Если не найдёте, то я потом пороюсь в исходниках - вспомню где.
Скан, перестройка частоты или канала - тоже у меня всё чётко - без артефактов. Это возможно ;)

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;
};
};

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

Ср дек 20, 2017 22:57:15

Если писать только громкость (порегистровая запись), то звук не глушится. Глушится он только когда тюнер настраивается на задаваемую частоту. И, если не ошибаюсь, SOFTMUTE бит не влияет на это.

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

Пт дек 22, 2017 20:58:05

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

Назрел еще один вопрос. Работает ли БШН при ручной настройке частоты? В режиме поиска шума во время настройки не было, а с установленным битом TUNE шумит во всю при перестройке. Бит SOFTBLEND_EN устанавливал, в биты TH_SOFRBLEND загонял все возможные значения. Но подавления шума в отсутствии сигнала так и не добился.

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

Вс янв 14, 2018 19:01:49

При ручной установке частоты приглушается звук,как это исправить?
пару страниц спрашивал 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
Ответить