Que necesito --> Poder manejar el X9C503 para bajar el volumen de una entrada de línea de audio. No quiero usar potenciómetro manuales comunes.
Esquema X9C503:
INC__| o o | VCC
U/D__| o o | CS
RH___| o o | RL
GND__| o o | Rwiper
En mi caso:
INC------| o o | VCC (5v)
U/D------| o o | GND
Audio in | o o | GND
GND------| o o | Salida
En Arduino Mega conecto todo directamente a la placa y el funcionamiento es correcto.
En ESP32 si lo conecto a la placa no funciona, así que he usado el diodo 2N3904 para los pines 'INC' y 'U/D' (también he probado con 'CS' pero Arduino Mega lo hace bien estando a tierra), y funciona pero no lo hace bien, describo el problema:
Hay que introducir valores entre 0 y 99, y en general lo hace bien, para valores bajos el volumen baja y para valores altos el volumen sube. El problema lo detecté introduciendo siempre el mismo valor.
En este caso fue el '91', si lo introduzco varias veces seguidas obtengo distintos resultados, normalmente el volumen se mantiene constante pero a veces sube, otras baja e incluso se produce el silencio total
Con Arduino Mega introduzco el '91' 500 veces y el
volumen no cambia nunca, es constante y su funcionamiento es siempre correcto.
¿Cuál puede ser el problema?
¿Que otro componente puedo usar?
Como alternativa he probado con el FM62429, con ESP32 funciona correctamente, pero tiene la función de amplificar que no me viene bien. Para la entrada de línea ya uso resistencias de 22kΩ, luego el potenciómetro y por último el MSGEQ7, no tiene mucho sentido cambiar un potenciómetro para bajar el voltaje y sustituirlo por un componente que puede amplificar. Puedo limitar por código el FM62429 por ejemplo al 60% y sólo usarlo para bajar el volumen aunque no creo que sea una solución muy elegante.
Audio Line In -> resistencias de 22kΩ-> X9C503 -> MSGEQ7
Audio Line In -> resistencias de 22kΩ-> FM62429 -> MSGEQ7
Alguna idea o sugerencia?
Código: Seleccionar todo
#include "X9C10X.h"
#define CSPIN 33
#define INCPIN 14
#define UDPIN 27
X9C503 pot;
void setup() {
Serial.begin(9600);
pot.begin(INCPIN, UDPIN, CSPIN); // pulse, direction, select
Serial.println("Introduce un valor entre 1 y 99");
}
void loop() {
if(Serial.available() != 0){
int value = Serial.parseInt();
if (value != 0) {
pot.setPosition(value, true);
delay(30);
Serial.print("Valor introducido: ");
Serial.println(value);
}
}
delay(100);
}