Потому и копеечные, что и производитель ни какой поддержки не оказывает. У RDA присутствует разброс по чувствительности, возможно и у qn тоже самое. Выше писали, что у qn чувствительность выше, а кто отвечает и как за высокую чувствительность QNxxxx? Если даже даташита нормального нет. Что бы ощутить уровень поддержки и уровень ответственности производителя rdaxxxx и qnxxxx в сравнении с sixxxx предлагаю пройти хоть по этой ссылке. Для rda и qn ничего подобного нет.
Чувствительность выше у RDA, это из собственного практического опыта. У QN8075 динамический диапазон больше. Там, где RDA5807захлебывается сильными сигналами и начинает принимать одну радиостанцию в нескольких "точках шкалы" с невозможностью принять слабые сигналы дальних станций, там QN8075 ведет себя намного лучше. Паразитных каналов приема не возникает, слабые иногородние станции не давятся. Сравнивал приемники на обеих микросхемах в 1 километре от вышки телерадиовещательного центра. Проверял прием на обрезок провода на расстоянии около 10 км от вышки, тут разные экземпляры RDA показали большую чувствительность чем несколько проверенных мс QN8075. Думаю, с QN8035 все обстоит точно так же, как со старшей моделью. Для нее, кстати. даже чувствительность не указана в даташите. В графе FM sensitivity стоит значение TDH, что вроде означает, что точные цифры пока неизвестны и будут опубликованы в следующих версиях даташита (которого уже не будет, по причине сворачивания работа над линейкой чипов).
В целом QN8075 мне понравилась больше. Хотя бы отсутствием долбаного неотключаемого софтмюта, который всю малину портит в случае с RDA5807.
_________________ Астролябия-сама меряет, было бы что мерять!!!
Описания регистров так и не нашел. Лог. анализатором слушал I2C шину промышленного китайского приемника на QN8075, судя по логам там регистров значительно больше чем в QN8035, и совершенно непонятно за что отвечают "лишние" регистры.
_________________ Астролябия-сама меряет, было бы что мерять!!!
Да какое там RDS... Тут непонятно, как заставить ее с кварцевым резонатором работать. Внешнее тактирование получилось включить, а с резонатором никак. Методом тыка не удалось найти ответственные за это регистры.
_________________ Астролябия-сама меряет, было бы что мерять!!!
Да я просто скопировал все, что МК "заводского" приемника засылает в QN8075 при включении, и все. Как было в заводском приемнике внешнее тактирование - прямоугольный сигнал от микроконтроллера 32768, так и осталась. Регистры настройки частоты нашел, еще какие-то обнаружил (громкость и т.д.), а регистры отвечающие за тактирование не получилось найти. Возможно я ошибаюсь, но у QN8075 вроде как более 80 управляющих регистров, значительно больше чем у QN8035, на которую есть полный даташит.
_________________ Астролябия-сама меряет, было бы что мерять!!!
//отправка данных в модуль i2c_start(); i2c_write(0x22); // адресный байт i2c_write(0x05); i2c_write(0b00001000); // 05H i2c_write( 0x80 | volume); // 05L(громкость) 0b10000101
i2c_stop();
}
void SetFreq (int freq) {
data_radio1 = (freq - 870);
data_radio2 = data_radio1<<6; // сдвиг влево на 6 битов переменной data_radio1 с присвоением в переменную data_radio2 low_byte=data_radio2; //присвоение младшего байта переменной low_byte data_radio2=data_radio2>>8;//сдвиг вправо на 8 битов переменной data_radio1 с присвоением в переменную data_radio2 high_byte=data_radio2; //присвоение старшего байта переменной high_byte low_byte=low_byte+0b00010000;// возведение 4-го бита переменной low_byte в"1"
//отправка данных в модуль i2c_start(); i2c_write(0x22); // адресный байт i2c_write(0x03); i2c_write(high_byte); // байт 03H i2c_write(low_byte); // байт O3L i2c_stop(); }
void key_buttons(void) { if (test>14){ //когда не нажата кнопку key=0; //признак нажатия 0
}
if (test==0){ //если нажата первая кнопка delay_ms(100); if (test==0){ //проверяем еще раз что ее нажали key=1; //и присваиваем признаку нажатия кнопки 1 } }
if (test==7){ //то же для второй кнопки
key=2;
}
if (test==5){ //и для третьей
key=3;
}
} void SetChannel(){
switch (canel) {
case 1:{ SetFreq (1008);SET(1); break;} case 2:{ SetFreq (1034);SET(2); break;} case 3:{ SetFreq (1063);SET(3); break;} case 4:{ SetFreq (1012);SET(4); break;} case 5:{ SetFreq (1045);SET(5); break;} }; }
А почему 02L байт при установке частоты пропущен? Или 02H - по этим "магическим" числам не до конца понятно, что Вы там пытаетесь запихнуть в регистры.
P.S. Хотя сейчас понял, по адресу 0x22 произвольный доступ к регистрам...
Сам запутался уже ( и так и эдак да еще вот так пробовал. Но никак, вы могли бы что то с этим сделать? Почему оно не работает? Частоты в codevision и фьюзы контроллера совпадают, 9,6 МГц
low_byte=low_byte+0b00010000;// возведение 4-го бита переменной low_byte в"1"
Хотя должно быть как то так.
Код:
low_byte |=(1<<4);//
Вот мой кусочек кода установки частоты
Код:
//---Здесь преобразуем расчетную частоту в данные для отправки в RDA5807---------// void preob_FREQ(void){ // FREQ.HIG_FREQ = Frequency; // записываем расчетную частоту в старший байт данных частоты FREQ.LOW_FREQ = 0; // обнуляем младший байт данных частоты FREQ.FREQ = FREQ.FREQ >> 2; // сдвигаем данные частоты на два бита в право FREQ.LOW_FREQ |= TUNE_En; // устанавливаем бита TUNE_En для разрешения работы приемника REG_3H = FREQ.HIG_FREQ; // предаем данные частоты в регистры отправки REG_3L = FREQ.LOW_FREQ; // } //
//---Здесь производим ручную перестройку частоты--------------------------------// void REGULYTOR_FREQ(unsigned char t){ // if(t==0){Frequency++;if(Frequency==0xD3){Frequency = 0;}} // Проверяем в какую сторону будем менять частоту, если в положительную строну, прибавляем 1 к значению частоты, проверяем если дошли до 0xD3 обнуляем регистр частоты else{Frequency--;if(Frequency==0){Frequency = 0xD2;}} // если в отрицательную сторону, вычитаем 1 из регистра частоты, проверяем если дошли до 0 устанавливаем значение регистра частоты = 0xD2 // preob_FREQ(); // преобразовываем значение частоты в данные для отправки в RDA5807 INDIK_FREQ(); // показываем новое значение частоты // i2c_start(); // передаем новое значение частоты в RDA5807 i2c_write(WRITE_ADDR_REG); // i2c_write(0x03); // i2c_write(REG_3H); // i2c_write(REG_3L); // i2c_stop(); // // for(char g = 0;g<8;g++){ // Очищаем строку с названием станции station_name[g] = ' '; // } // for(char g = 0;g<64;g++){ // Очищаем строку с радио текстом radiotext[g] = ' '; // } // // delay(5); // ждем 250 мСек (5*50 мСек) } //
Ну и напоследок, если в 3 регистр вручную прописать частоту при инициализации, rda5807 начинает воспроизводить станцию.
Сейчас решил попробовать весь код засунуть в один МК, взять проект уважаемого WiseLord и убрать все кроме модуля радио. Делаю проект часов на ГРИ с радио будильником ) Но думаю обсуждение всего проекта не в этой теме... Со всеми этими протоколами трудности.
Еще вопрос, входы SDA и SCL у rda5807m ведь толерантны к 5 вольтам? Я проверял модули на ардуино, питание 3.3 вольта, а sda scl кидал напрямую на входы выходы без согласования, все работало. Причем даже без подтяжки линий к питанию. Возможно в библиотеке включалась внутренняя подтяжка. -----
WiseLord, подскажите, а библиотека из вашей программы на частоте мк 20 МГц будет работать? В атмел студии я не очень, никак не могу найти директиву F_CPU.
WiseLord, я сам плохо разбираюсь, но код библиотеки предельно похож на студию ) За подсказку спасибо! Надеюсь заработает. Еще бы как нибудь на привычный мне codevision перетащить библиотеку...
Алексей, на ардуино я брал питание 3.3 вольта для самого модуля, а i2c линии шли без какого либо согласования на работающую от 5 вольт ардуино, все работало.
Может кто знает готовую библиотеку rda5807 для codevision? Когда то давно я ее находил, там в куче в архиве были библиотеки для AVR и STM32, сейчас повторно найти не могу (
Я мало с авр работаю поэтому не подскажу, для начала надо бы убедился в работоспособности i2c проинициализировав rda5807 со всеми настройками. Настройки можно посмотреть здесь на форуме или вот мои
Может у кого есть рабочий пример в среде codevision? Помню ведь находил архив с библиотеками под разные модули для stm32 и там же был архив codevision ---
Антенный вход включен? Там для этого ключ есть, управляемый регистром описания которого в даташите нет. В некоторых примерах упущен этот момент, так что даже ХЗ как RDA у них работала. Сам я с AVR делов почти не имел, если что. RDA5807 у меня успешно работала с PIC16.
_________________ Астролябия-сама меряет, было бы что мерять!!!
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения