Страница 1 из 1

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

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

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

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

мне нужны операции с такими не многими функциями, чтобы библиотека была очень легкой

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

Добавлено: Вт янв 17, 2023 22:02:38
Asmodey
Я бы понял, если бы вы хотели отключить функцию SoftMute. А включать то, что в RDA5807 вообще никак не отключается, оно как-то странно...

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

Добавлено: Ср янв 18, 2023 16:38:15
coder1448
Я хочу добавить функцию мягкого отключения звука в отправленную мной библиотеку, как мне это сделать?

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

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

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

Добавлено: Ср янв 18, 2023 17:54:12
Morroc
А вдруг нашли и отключили ? )

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

Добавлено: Ср янв 18, 2023 19:39:58
Novice user
Там выход один-выключаем звук,перестраиваемся по частоте,если есть станция (FM TRUE=1)-включаем звук
Все программно,софтмуте там нет

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

Добавлено: Ср янв 18, 2023 21:10:50
Asmodey
Он там есть, но срабатывает только при настройке, после каждого шага по частоте.

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

Добавлено: Ср янв 18, 2023 21:18:33
Novice user
Странно,сколько приемников собирал нигде не было выключения звука при отсутствии станции...

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

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

Добавлено: Ср янв 18, 2023 21:23:16
coder1448
void RDA5807::setSoftmute(bool value)
{
reg04->refined.SOFTMUTE_EN = value;
setRegister(REG04, reg04->raw);
}

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

Добавлено: Ср янв 18, 2023 22:27:15
Asmodey
[uquote="Novice user",url="/forum/viewtopic.php?p=4356695#p4356695"]Нашел вроде,бит 9 регистра 04H,никогда его не замечал...[/uquote]
Сейчас уже точно не помню, но от него вроде ничего не зависит.
[uquote="Novice user",url="/forum/viewtopic.php?p=4356695#p4356695"]Странно,сколько приемников собирал нигде не было выключения звука при отсутствии станции...[/uquote]Есть затыкание приемника на треть секунды после каждого шага по частоте. Обычно это обусловлено действием софтмюта (по аналогии с другими DSP чипами) и устраняется выключением софтмюта. Но в RDA5807 установка и сброс бита SoftMute ни на что не влияет, затык как был, так и остается. На форуме уже много раз это обсуждали, искали способы отключить SoftMute, но так и не нашли ничего.

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

Добавлено: Чт янв 19, 2023 07:35:25
Novice user
Так это при переключении частоты боролись чтоб звук не приглушался,а меня интересует при отсутствии станции чтоб не шипел,думаю автор тоже об этом

Добавлено after 46 seconds:
[uquote="coder1448",url="/forum/viewtopic.php?p=4355051#p4355051"]я хочу использовать функцию softmute, чтобы предотвратить шум от пустых частот в fm-радио[/uquote]

Добавлено 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();     // передача данных 
}


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