Расчет частоты приема для RDA5807M
Re: Расчет частоты приема для RDA5807M
У меня не приглушался, может вы имеете ввиду что становится примерно в половину тиши при низком уровне приема. Тогда здесь ничего не поделаешь так работает RDA.
Re: Расчет частоты приема для RDA5807M
Нет, именно в момент передачи новой пачки данных, звук приглушается.
на этом видео слышно https://youtu.be/32nVjKDLBME
на этом видео слышно https://youtu.be/32nVjKDLBME
Re: Расчет частоты приема для RDA5807M
на всякий случай проверьте бит SOFTMUTE_EN
Re: Расчет частоты приема для RDA5807M
Код: Выделить всё
reg[REG_00]=0b11100010;
reg[REG_01]=0b10000101;
reg[REG_02]=0b00000000;
reg[REG_03]=0b00010000;
reg[REG_04]=0b000010_0_1;
reg[REG_05]=0b00000000;
reg[REG_06]=0b00001000;
reg[REG_07]=0b10000111;
reg[REG_08]=0b00000000;
reg[REG_09]=0b00000000;
reg[REG_10]=0b00000000;
reg[REG_11]=0b00001100;
Если я все правильно понял, бит SOFTMUTE_EN выделен подчеркиваниями. Пробовал его ставить и в "1", и в "0" - результат одинаков. Видимо это свойство самого чипа.
Re: Расчет частоты приема для RDA5807M
Да скорее всего так нет генерации при перестройки соответственно нет звука, Попробовал тоже сегодня ради спортивного интереса, выходит все таки затухание громкости при снижении уровня сигнала можно убрать, сбросив этот бит.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
есть ли вариант приемника на атмега8?жки-хоть семисегментный(оа либо ок),хоть WH1602,смотрел в сторону этого приемника http://radiokot.ru/circuit/digital/home/202/ но там ничего не понятно -схема одна,а прошивок более 20,начал читать форум и запутался совсем
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
вообще-то схем (разводок) две, плюс на каждую 4 варианта прошивки под разные типы индикаторов и способы управления ими. Берёте подходящую под железо прошивку и шьёте.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
попробую собрать,спасибо
- Dj_Alex
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Пн окт 12, 2009 18:16:50
- Откуда: Саранск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Спаял на макетке приёмник на модуле TEA5767 и Atmega32, добился работоспособности. Решил попробовать модуль RDA5807M, т.к. привлекла регулировка громкости. Посмотрел примеры (в том числе и в этой теме), переделал код, но не могу принять ни одну станцию, только шипение.
Так делаю расчёт частоты и инициализацию, громкость программно регулируется, значит связь есть.
Пишу в Codevision
Далее в бесконечном цикле с задержкой 1 сек изменяю freq++ (на 0.1 МГц) и записываю новое значение частоты в адрес 03
Всё-таки не пойму почему нужно сбрасывать бит TUNE, т.к. в даташите написано The tune bit is reset to low automatically when
the tune operation completes..
Пробовал принудительно сбрасывать этот бит сразу после задания нового значения частоты, но приёма станций всё равно нет, зато звук стал пропадать каждую секунду, а потом плавно нарастать.
В чём может быть проблема?
Так делаю расчёт частоты и инициализацию, громкость программно регулируется, значит связь есть.
Пишу в Codevision
Код: Выделить всё
unsigned int freqB;
unsigned int freq;
unsigned char wbyte1, wbyte2;
freq=1000;
freqB = freq - 870;
wbyte1 = (freqB >> 2);
wbyte2 = (freqB << 6);
i2c_start();
i2c_write(0b00100000); //адрес
i2c_write(0b11000000); // 02h
i2c_write(0b00000101); // 02L
i2c_write(wbyte1); //03H
i2c_write(wbyte2|0b00010000); // 03L
i2c_write(0b00000010); // 04h
i2c_write(0x00); // 04l
i2c_write(0b10001000); // 05h
i2c_write(0b10001111); // 05l
i2c_write(0x00); // 06h
i2c_write(0x00); // 06l
i2c_write(0b01000000); // 07h
i2c_write(0b00000010); // 07l
i2c_stop();
Далее в бесконечном цикле с задержкой 1 сек изменяю freq++ (на 0.1 МГц) и записываю новое значение частоты в адрес 03
Код: Выделить всё
freqB = freq - 870;
wbyte1 = (freqB >> 2);
wbyte2 = (freqB << 6);
i2c_start();
i2c_write(0b00100010); //адрес
i2c_write(0x03);
i2c_write(wbyte1); //03H
i2c_write(wbyte2|0b00010000); // 03L
i2c_stop();
Всё-таки не пойму почему нужно сбрасывать бит TUNE, т.к. в даташите написано The tune bit is reset to low automatically when
the tune operation completes..
Пробовал принудительно сбрасывать этот бит сразу после задания нового значения частоты, но приёма станций всё равно нет, зато звук стал пропадать каждую секунду, а потом плавно нарастать.
В чём может быть проблема?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
В даташите не написано, что его нужно сбрасывать. Написано, что он сбрасывается сам после настройки.Dj_Alex писал(а):не пойму почему нужно сбрасывать бит TUNE, т.к. в даташите написано The tune bit is reset to low automatically when
the tune operation completes..
По коду в целом всё вроде правильно, но не совсем понятно, зачем вводить тюнер в interrupt mode (0b10001000 в 05H).
В любом случае, взял свой работающий код и заменил функцию инициализации и установки частоты на то, что написали Вы:
Спойлер
Код: Выделить всё
void rda580xInit(void)
{
unsigned char wbyte1, wbyte2;
unsigned int freqB;
unsigned int freq;
freq=tuner.freq / 10;
freqB = freq - 870;
wbyte1 = (freqB >> 2);
wbyte2 = (freqB << 6);
I2CStart(0b00100000);
I2CWriteByte(0b11000000); // 02h
I2CWriteByte(0b00000101); // 02L
I2CWriteByte(wbyte1); // 03H
I2CWriteByte(wbyte2|0b00010000); // 03L
I2CWriteByte(0b00000010); // 04h
I2CWriteByte(0x00); // 04l
I2CWriteByte(0b10001000); // 05h
I2CWriteByte(0b10001111); // 05l
I2CWriteByte(0x00); // 06h
I2CWriteByte(0x00); // 06l
I2CWriteByte(0b01000000); // 07h
I2CWriteByte(0b00000010); // 07l
I2CStop();
return;
}
void rda580xSetFreq(void)
{
unsigned char wbyte1, wbyte2;
unsigned int freqB;
unsigned int freq;
freq=tuner.freq / 10;
freqB = freq - 870;
wbyte1 = (freqB >> 2);
wbyte2 = (freqB << 6);
I2CStart(0b00100010);
I2CWriteByte(0x03);
I2CWriteByte(wbyte1);
I2CWriteByte(wbyte2|0b00010000);
I2CStop();
return;
}
Разница лишь в названиях функций I²C и том, что у меня частота хранится в глобальной структуре tuner.freq. Хранится в виде 9950 для 99.5MHz, отсюда и деление на 10.
Итог - код работает, тюнер настраивается нормально.
Поэтому должно работать и у Вас.
По поводу нарастающей громкости - это фича RDA5807 (неотключаемая, судя по всему), которая при каждой перестройке (TUNE) приглушает на доли секунды звук.
ЕМНИП, у меня когда-то была такая микросхема, которая тоже только шипела и не работала.
Кстати, RDA5807 должна полностью работать с кодом для TEA5767. Если у Вас работало там, то при замене модуля c TEA5767 на модуль с RDA5807 всё должно продолжать работать. Если и так не работает - то точно неисправная RDA-шка.
- Dj_Alex
- Открыл глаза
- Сообщения: 50
- Зарегистрирован: Пн окт 12, 2009 18:16:50
- Откуда: Саранск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
WiseLord, спасибо за ответ.
Попробовал второй имеющийся модуль, однако снова шипение. Пробовал и код для TEA, но ничего не меняется. Грешил поначалу на кварц, т.к. его замыкание не меняет звук, но осциллограф показал генерацию на нём. Видно придется возвращаться на TEA5767, хотя хотелось реализовать кнопочное управление громкостью.
PS А действительно у RDA низкая чувствительность по сравнению с TEA или как повезёт?
PPS похоже модули RDA надо заказывать десятками, т.к. очень высок процент брака, я так и надеялся, что из 2 заработает хотя бы один, но процент брака выше.
Попробовал второй имеющийся модуль, однако снова шипение. Пробовал и код для TEA, но ничего не меняется. Грешил поначалу на кварц, т.к. его замыкание не меняет звук, но осциллограф показал генерацию на нём. Видно придется возвращаться на TEA5767, хотя хотелось реализовать кнопочное управление громкостью.
PS А действительно у RDA низкая чувствительность по сравнению с TEA или как повезёт?
PPS похоже модули RDA надо заказывать десятками, т.к. очень высок процент брака, я так и надеялся, что из 2 заработает хотя бы один, но процент брака выше.
из 10 модулей работают 4, остальные просто шипят
из тех 4 работающих у одного битый один аудивыход (не играет совсем)
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
У всех модулей RDA5807M, с которыми я имел дело, чувствительность лучше, чем у аналогичных на TEA5767.
Ну вот и ответ. Были бы модули исправны, работали бы точно так же, как и TEA5767 с тем же кодом.Dj_Alex писал(а):Пробовал и код для TEA, но ничего не меняется
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
есть ли у кого пример расшифровки рдс?поделитесь пожалуйста!
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Расчет частоты приема для RDA5807M
Если кому пригодится - Specification of the radio broadcast data system (RBDS).
Если будете брать время из RDS - учтите, что у большинства станций часы не синхронизированы с реальным временем.
Так же, не все станции передают 0x0Ah в конце строки.
Если будете брать время из RDS - учтите, что у большинства станций часы не синхронизированы с реальным временем.
Так же, не все станции передают 0x0Ah в конце строки.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Novice user писал(а):есть ли у кого пример расшифровки рдс?поделитесь пожалуйста!
Вот моя реализация для RDA5807. Хотя, по большому счёту, не только для неё.
Со стороны драйвера тюнера - он вызывает функцию rdsSetBlocks, передавая указатель на массив из 8 байтов RDS данных (они же 4 16-битных слова в спецификации), при этом идёт расшифровка. Вот для RDA5807 эта часть.
Со стороны основного потока программы вызывается rdsGetText, возвращающая уже готовую для вывода строку.
Я всю спецификацию не реализовывал, расшифровываю только 8-символьный PS (номер программы), он же RDS group = 0. Хотя по спецификации станция должна передавать в этих полях фиксированную информацию (название станции), но у нас они обычно отходят от стандартов и часто туда выводят и другую информацию - рекламу, название песни. Мне достаточно.
В принципе, код несложно доработать и расшифровывать ещё и RDS text (RDS group = 2), там целых 64 символа могут передаваться по тому же принципу.
Ну и в RDS group = 4 можно и время получать, если его передают.
В выложенной Albert_V pdf-ке вся информация о том, как закодированы разные группы, есть.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
спасибо,буду рыться
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
наверно никто не знает-вопрос удалил-решил сам проблему
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
рдс идет с ошибками...
примерно так-
читаю все регистры,если
bler = readbuf(4) mod 16
rda5807_rdss = 1 and rda5807_rdsr = 1 and bler = 0
то вычисляю rdsVersion,rdsGroup,если они ноль то
вычисляю знакоместо rdsIndex=rdsIndex*2
и вывожу на экран,но!
как определить что пора вывести на экран?а то у меня радио шансон 99,6 fm идет так
shanson
raanson
radison
radio n
radio
99dio
99.6o
99.6 f
99.6 fm
sh.6 fm
shan fm и т д
примерно так-
читаю все регистры,если
bler = readbuf(4) mod 16
rda5807_rdss = 1 and rda5807_rdsr = 1 and bler = 0
то вычисляю rdsVersion,rdsGroup,если они ноль то
вычисляю знакоместо rdsIndex=rdsIndex*2
и вывожу на экран,но!
как определить что пора вывести на экран?а то у меня радио шансон 99,6 fm идет так
shanson
raanson
radison
radio n
radio
99dio
99.6o
99.6 f
99.6 fm
sh.6 fm
shan fm и т д
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Расчет частоты приема для RDA5807M
Да, наверное, никак.
Ибо по стандарту этот текст вообще должен быть фиксирован для конкретной станции и меняться не должен. Поэтому определить, к какому именно из нескольких передаваемых слов относится данная конкретная пара символов, вряд ли возможно.
Разве что придумать какой-нибудь хитрый алгоритм. Вроде как два буфера - один отображается, во второй идёт накопление данных. И только после последовательно принятых четырёх пар символов (начиная от пары 0 до пары 3), то сбрасывать в отображаемый буфер лишь после принятия пары 3. Но всё равно такой подход от ошибок не страхует, ибо какая-то из четырёх пар символов может быть передана некорректно.
Ибо по стандарту этот текст вообще должен быть фиксирован для конкретной станции и меняться не должен. Поэтому определить, к какому именно из нескольких передаваемых слов относится данная конкретная пара символов, вряд ли возможно.
Разве что придумать какой-нибудь хитрый алгоритм. Вроде как два буфера - один отображается, во второй идёт накопление данных. И только после последовательно принятых четырёх пар символов (начиная от пары 0 до пары 3), то сбрасывать в отображаемый буфер лишь после принятия пары 3. Но всё равно такой подход от ошибок не страхует, ибо какая-то из четырёх пар символов может быть передана некорректно.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Расчет частоты приема для RDA5807M
ну должна же быть типа метка что слово передано и можно выводить на экран...
вроде нашел на каткат-"Когда указатель переходит на 0 данные выводятся для индикации"
такая же история,но когда вывожу после передачи указателя=3то боле-менее
так и оставлю пока...
но на других станциях почему-то тект идет как положено,может станция чудит-не знаю
вроде нашел на каткат-"Когда указатель переходит на 0 данные выводятся для индикации"
такая же история,но когда вывожу после передачи указателя=3то боле-менее
так и оставлю пока...
но на других станциях почему-то тект идет как положено,может станция чудит-не знаю