Обсуждаем приемники, передатчики, радиомикрофоны, жучки, генераторы, ВЧ-усилители, антенны и прочее радиохозяйство
Ответить

Re: FM приёмник с RDS на RDA5807

Чт май 09, 2019 08:08:22

Потому и копеечные, что и производитель ни какой поддержки не оказывает. У RDA присутствует разброс по чувствительности, возможно и у qn тоже самое.
Выше писали, что у qn чувствительность выше, а кто отвечает и как за высокую чувствительность QNxxxx? Если даже даташита нормального нет.
Что бы ощутить уровень поддержки и уровень ответственности производителя rdaxxxx и qnxxxx в сравнении с sixxxx предлагаю пройти хоть по этой ссылке.
Для rda и qn ничего подобного нет.

Re: FM приёмник с RDS на RDA5807

Чт май 09, 2019 14:07:27

Выше писали, что у qn чувствительность выше

Чувствительность выше у RDA, это из собственного практического опыта. У QN8075 динамический диапазон больше. Там, где RDA5807захлебывается сильными сигналами и начинает принимать одну радиостанцию в нескольких "точках шкалы" с невозможностью принять слабые сигналы дальних станций, там QN8075 ведет себя намного лучше. Паразитных каналов приема не возникает, слабые иногородние станции не давятся. Сравнивал приемники на обеих микросхемах в 1 километре от вышки телерадиовещательного центра. Проверял прием на обрезок провода на расстоянии около 10 км от вышки, тут разные экземпляры RDA показали большую чувствительность чем несколько проверенных мс QN8075. Думаю, с QN8035 все обстоит точно так же, как со старшей моделью. Для нее, кстати. даже чувствительность не указана в даташите. В графе FM sensitivity стоит значение TDH, что вроде означает, что точные цифры пока неизвестны и будут опубликованы в следующих версиях даташита (которого уже не будет, по причине сворачивания работа над линейкой чипов).

В целом QN8075 мне понравилась больше. Хотя бы отсутствием долбаного неотключаемого софтмюта, который всю малину портит в случае с RDA5807.

Re: FM приёмник с RDS на RDA5807

Пн ноя 11, 2019 17:35:21

Так и не нашли описание регистров для QN8075? Я кое что наковырял.

Re: FM приёмник с RDS на RDA5807

Пн ноя 11, 2019 23:18:05

Я кое что наковырял.

Любопытно было бы посмотреть.

Описания регистров так и не нашел. Лог. анализатором слушал I2C шину промышленного китайского приемника на QN8075, судя по логам там регистров значительно больше чем в QN8035, и совершенно непонятно за что отвечают "лишние" регистры.

Re: FM приёмник с RDS на RDA5807

Вт ноя 19, 2019 13:34:26

Как у QN8075 обстоят дела с RDS, лучше чем у Si4703 или хуже.

Re: FM приёмник с RDS на RDA5807

Чт ноя 21, 2019 17:34:20

Да какое там RDS... Тут непонятно, как заставить ее с кварцевым резонатором работать. Внешнее тактирование получилось включить, а с резонатором никак. Методом тыка не удалось найти ответственные за это регистры.

Re: FM приёмник с RDS на RDA5807

Пт ноя 22, 2019 02:10:39

А как настраиваешь с внешним тактированием какие команды?

Re: FM приёмник с RDS на RDA5807

Пт ноя 22, 2019 09:26:11

Да я просто скопировал все, что МК "заводского" приемника засылает в QN8075 при включении, и все. Как было в заводском приемнике внешнее тактирование - прямоугольный сигнал от микроконтроллера 32768, так и осталась. Регистры настройки частоты нашел, еще какие-то обнаружил (громкость и т.д.), а регистры отвечающие за тактирование не получилось найти. Возможно я ошибаюсь, но у QN8075 вроде как более 80 управляющих регистров, значительно больше чем у QN8035, на которую есть полный даташит.

Re: FM приёмник с RDS на RDA5807

Пт ноя 22, 2019 11:19:24

Ну приложи код который там отправляешь. нет там никаких 80 регистров они на одном ядре.

Re: FM приёмник с RDS на RDA5807

Вт янв 07, 2020 02:10:33

Шел второй день геморроя в попытках заставить работать rda5807m на attiny13. Ни сам я ничего вменяемого не написал, ни готовое не работает.

Модули рабочие точно, на arduino работают. Что либо сказать про attiny13, кроме того, что они прошиваются и мигалка на них работает, не могу.

Последнее что делал это на основе кода из этого видео https://www.youtube.com/watch?v=_a0Mnru ... 3481328773

Код

Код:
#include <tiny13a.h>
#include <delay.h>
// I2C Bus functions
#asm
   .equ __i2c_port=0x18 ;PORTB
   .equ __sda_bit=3
   .equ __scl_bit=4
#endasm
#include <i2c.h>

unsigned char high_byte,low_byte,key,;
unsigned int data_radio1,data_radio2;
eeprom char canel;
eeprom char volume;



unsigned char test;
 // Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{


ADCSRA.6=1;

 
}

#define ADC_VREF_TYPE 0b01000001         // для ацп задействуем адс1

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;

adc_data=ADCW;

test=adc_data>>6;
}

void SET_LAMP(void){
PORTB.0=1;
delay_ms(100);
PORTB.0=0;
delay_ms(100);

}

void SET (char chislo){
char s;
for( s = chislo;s>0;s--){
SET_LAMP();
}
}
void RDA5807M_init (void) {
  //отправка данных в модуль
   i2c_start();
   i2c_write(0x20);             //  адресный байт
   i2c_write(0b11110000);       //  байт 02H
   i2c_write(0b10001101);       //  байт 02L
   i2c_write(0x00);             //  байт 03H
   i2c_write(0x00);             //  байт O3L
   i2c_write(0b00000010);       //  байт 04H
   i2c_write(0b00000000);       //  04L
   i2c_write(0b00001000);       //  05H
   i2c_write( 0x80 | volume);  //  05L(громкость)  0b10000101
   i2c_write(0b00000000);       //  06H
   i2c_stop();
  }


void I2C_write_vol (void) {

  //отправка данных в модуль
   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;}
    };   
 }
 
 
void main(void)
{
char ii = 1;
if(volume>15){
volume=15;
}
volume=15;
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTB = 4;
DDRB=0x03;

TCCR0A=0x00;
TCCR0B=0x05;
TIMSK0=0x02;
ACSR=0x80;
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8E;


i2c_init();
delay_ms(500);
RDA5807M_init();
delay_ms(500);
SetFreq(1025);
delay_ms(500);
#asm("sei")
 
while (1)
  {   
         
 
       
        key_buttons();
   
     if(key==1)  {
        canel++;
         ii=1;
         //key = 0;
         delay_ms(300);
         if(canel>5)//{
            canel=1;
           
     }   
   
   
    if ((volume > 0) & (key==2)){
         volume--;
         delay_ms(100);
         I2C_write_vol ();
    }

                   
     if ((volume < 15) & (key==3)){   
         volume++;
         delay_ms(100);
         I2C_write_vol ();
     }       
     


     
     if(ii==1){
     ii=0;
     SetChannel();
   }
       

      }
}



Питание пробовал 1) на 5807 подавал 3.3 вольта от батарейки, тини от 5 вольт 2) Все сразу от 3.3 вольт от линейного стабилизатора ams1117 3.3

И ничего, ни вдоха ни выдоха, ни какого либо самого малейшего шипения в динамике. Помогите :solder:

Re: FM приёмник с RDS на RDA5807

Вт янв 07, 2020 10:39:52

А почему 02L байт при установке частоты пропущен? Или 02H - по этим "магическим" числам не до конца понятно, что Вы там пытаетесь запихнуть в регистры.

P.S. Хотя сейчас понял, по адресу 0x22 произвольный доступ к регистрам...

Re: FM приёмник с RDS на RDA5807

Вт янв 07, 2020 14:17:04

Сам запутался уже ( и так и эдак да еще вот так пробовал. Но никак, вы могли бы что то с этим сделать? Почему оно не работает? Частоты в codevision и фьюзы контроллера совпадают, 9,6 МГц

Re: FM приёмник с RDS на RDA5807

Пт фев 07, 2020 09:15:51

Вот тут какая то странность.
Код:
 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 начинает воспроизводить станцию.

Re: FM приёмник с RDS на RDA5807

Пт фев 07, 2020 12:42:21

Если не сложно, покажите весь код?

Сейчас решил попробовать весь код засунуть в один МК, взять проект уважаемого WiseLord и убрать все кроме модуля радио. Делаю проект часов на ГРИ с радио будильником ) Но думаю обсуждение всего проекта не в этой теме... Со всеми этими протоколами трудности.

Еще вопрос, входы SDA и SCL у rda5807m ведь толерантны к 5 вольтам? Я проверял модули на ардуино, питание 3.3 вольта, а sda scl кидал напрямую на входы выходы без согласования, все работало. Причем даже без подтяжки линий к питанию. Возможно в библиотеке включалась внутренняя подтяжка.
-----

WiseLord, подскажите, а библиотека из вашей программы на частоте мк 20 МГц будет работать? В атмел студии я не очень, никак не могу найти директиву F_CPU.

Re: FM приёмник с RDS на RDA5807

Пт фев 07, 2020 14:45:33

Я в atmel студии вообще никогда не работал.

Но библиотеке в принципе по барабану частота МК.

Re: FM приёмник с RDS на RDA5807

Пт фев 07, 2020 14:55:27

RDA5807 работает на 3 вольтах и от 5 вольт дохнет, надеюсь подтяжка i2c к питанию есть.

Re: FM приёмник с RDS на RDA5807

Пт фев 07, 2020 15:24:11

WiseLord, я сам плохо разбираюсь, но код библиотеки предельно похож на студию ) За подсказку спасибо! Надеюсь заработает. Еще бы как нибудь на привычный мне codevision перетащить библиотеку...

Алексей, на ардуино я брал питание 3.3 вольта для самого модуля, а i2c линии шли без какого либо согласования на работающую от 5 вольт ардуино, все работало.

Может кто знает готовую библиотеку rda5807 для codevision? Когда то давно я ее находил, там в куче в архиве были библиотеки для AVR и STM32, сейчас повторно найти не могу (

Re: FM приёмник с RDS на RDA5807

Пт фев 07, 2020 19:49:07

Я мало с авр работаю поэтому не подскажу, для начала надо бы убедился в работоспособности i2c проинициализировав rda5807 со всеми настройками. Настройки можно посмотреть здесь на форуме или вот мои
Код:
__EEPROM_DATA(0xC2,0x8D,0x23,0x10,0x00,0x00,0x88,0x83);                         //REG_2H,REG_2L,REG_3H,REG_3L,REG_4H,REG_4L,REG_5H,REG_5L

Частота при старте 101 мГц.

Re: FM приёмник с RDS на RDA5807

Ср фев 12, 2020 09:29:21

Может у кого есть рабочий пример в среде codevision? Помню ведь находил архив с библиотеками под разные модули для stm32 и там же был архив codevision
---

https://radiokot.ru/forum/viewtopic.php ... 6&start=60

Нашел в этой теме, буду поглядеть...

Re: FM приёмник с RDS на RDA5807

Чт фев 13, 2020 19:25:36

Антенный вход включен? Там для этого ключ есть, управляемый регистром описания которого в даташите нет. В некоторых примерах упущен этот момент, так что даже ХЗ как RDA у них работала. Сам я с AVR делов почти не имел, если что. RDA5807 у меня успешно работала с PIC16.
Ответить