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

RDA5807 функция мягкого отключения звука

Вс янв 15, 2023 23:41:50

Используя библиотеку RDA5807, я хочу использовать функцию softmute, чтобы предотвратить шум от пустых частот в fm-радио.Проект, который я сделал с arduino, занимает много места.

Я просто хочу использовать для этого функцию частоты, звука и soft mute.Мы нашли самую легкую библиотеку для этого, но они не добавили функцию softmute в эту библиотеку.

Можем ли мы добавить эту функцию?

мне нужны операции с такими не многими функциями, чтобы библиотека была очень легкой
Вложения
RDA5807M.zip
Библиотека, которую я хочу использовать, доступна в этом файле, если вы добавите нужную мне функцию, я был бы очень рад
(6.01 KiB) Скачиваний: 38

Re: RDA5807 функция мягкого отключения звука

Вт янв 17, 2023 22:02:38

Я бы понял, если бы вы хотели отключить функцию SoftMute. А включать то, что в RDA5807 вообще никак не отключается, оно как-то странно...

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 16:38:15

Я хочу добавить функцию мягкого отключения звука в отправленную мной библиотеку, как мне это сделать?

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 17:18:40

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

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 17:54:12

А вдруг нашли и отключили ? )

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 19:39:58

Там выход один-выключаем звук,перестраиваемся по частоте,если есть станция (FM TRUE=1)-включаем звук
Все программно,софтмуте там нет

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 21:10:50

Он там есть, но срабатывает только при настройке, после каждого шага по частоте.

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 21:18:33

Странно,сколько приемников собирал нигде не было выключения звука при отсутствии станции...

Добавлено after 3 minutes 11 seconds:
Нашел вроде,бит 9 регистра 04H,никогда его не замечал...
Спасибо,сейчас попробую в железе

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 21:23:16

void RDA5807::setSoftmute(bool value)
{
reg04->refined.SOFTMUTE_EN = value;
setRegister(REG04, reg04->raw);
}

Re: RDA5807 функция мягкого отключения звука

Ср янв 18, 2023 22:27:15

Нашел вроде,бит 9 регистра 04H,никогда его не замечал...

Сейчас уже точно не помню, но от него вроде ничего не зависит.
Странно,сколько приемников собирал нигде не было выключения звука при отсутствии станции...
Есть затыкание приемника на треть секунды после каждого шага по частоте. Обычно это обусловлено действием софтмюта (по аналогии с другими DSP чипами) и устраняется выключением софтмюта. Но в RDA5807 установка и сброс бита SoftMute ни на что не влияет, затык как был, так и остается. На форуме уже много раз это обсуждали, искали способы отключить SoftMute, но так и не нашли ничего.

Re: RDA5807 функция мягкого отключения звука

Чт янв 19, 2023 07:35:25

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

Добавлено after 46 seconds:
я хочу использовать функцию softmute, чтобы предотвратить шум от пустых частот в fm-радио


Добавлено after 3 minutes 46 seconds:
Я пробовал без использования библиотеки ERDA5807 в ардуино (чисто спортивный интерес),работало,пример моего кода
Спойлер
Код:
#include <Wire.h>

#define Pin_DOWN 12//4   // левая кнопка
#define Pin_UP 13//2     // правая кнопка
#define Pin_SET 11//3    // центральная кнопка
const byte channel=5;
byte Byte0;
byte val = 0;
byte volume = 4;
int freq=1011;
void setup()
{
   pinMode(Pin_DOWN,INPUT_PULLUP);
   pinMode(Pin_UP,INPUT_PULLUP);
   pinMode(Pin_SET,INPUT_PULLUP);
   Wire.begin(); // подключение к шине i2c
   delay(500);
   Inicial();
}

void loop()
{
boolean SET=digitalRead(Pin_SET);
boolean UP=digitalRead(Pin_UP);
boolean DOWN=digitalRead(Pin_DOWN);
if(DOWN==LOW)
  {
   volume=volume+1; set_vol();delay(500);
    //freq=freq+1; set_freq();delay(500);//работает норм
  }
if(SET==LOW)
  {
    volume=volume-1; set_vol();delay(500);
    //freq=freq-1;set_freq();delay(500); //работает норм
  }
if(UP==LOW)
  {
   stby();//выключаем радио ,потребление почти 0
   
   delay(1500);//ждем 1,5 сек и вкл
   set_freq();      // вкл радио
  }
}   
void Inicial()
{   
   Wire.beginTransmission(0x10); // передача для устройства
   //02                            // адрес устройства указывается в документации (datasheet)
   Wire.write(0B11010000);             // отправка байта
   Wire.write(0B10000001);
   //03
   Byte0 = freq - 870;
   Wire.write(Byte0);
   Byte0=0B00010011;
   Wire.write(Byte0);
   //04
   Wire.write(0B00010000);
   Wire.write(0B00000000);
   //05
   Wire.write(0B10001000);
   Byte0=0B10000000 + volume;
   Wire.write(Byte0);
   Wire.endTransmission();     // передача данных
}
void set_freq()//установка частоты
{   
   if (freq > 1080) freq = 870;
   if (freq < 880) freq = 1080;
   Wire.beginTransmission(0x10); // передача для устройства
   //02                            // адрес устройства указывается в документации (datasheet)
   Wire.write(0B11010000);             // отправка байта
   Wire.write(0B10000001);
   //03
   Byte0 = freq - 870;
   Wire.write(Byte0);//частота,старшие 8 бит
   Byte0=0B00010011;//7,6-мл биты частоты=всегда 00 так как шаг=25, 4-точная установка,3,2-диапазон=87-108,1,0-шаг 25 кгц
   Wire.write(Byte0);
   Wire.endTransmission();     // передача данных
}
void set_vol()//установка громкости
{   
   if (volume > 200) volume = 0;
   if (volume >15) volume = 15;
   Wire.beginTransmission(0x11); // передача для устройства
   //02                            // адрес устройства указывается в документации (datasheet)
   Wire.write(0B00000101);             // отправка байта val
  //05
   Wire.write(0B10001000);
   Byte0=0B10000000 + volume;
   Wire.write(Byte0);
   Wire.endTransmission();     // передача данных
}
void stby()
{
 Wire.beginTransmission(0x10);      // выкл радио
  //02                            // адрес устройства указывается в документации (datasheet)
   Wire.write(0B11010000);             // отправка байта val
   Wire.write(0B10000000);
  Wire.endTransmission();     // передача данных
}



Этот код выложен на ардуино.ру,все рабочее,софтмуте можно добавить так же
Ответить