Control digital de volumen con pwm y ldr + led

Mas que ayuda, quiero desarrollar esta idea con aportes colectivos de todos aquellos que les interese este tema.

la idea es básicamente usar un microcontrolador (solo se usar lenguaje c pic c complier) programarlo para leer un encoder mecánico si!, de esos que traen los equipos de sonido, y atravez de bucle infinito, o de interrupciones externas leer al enconder el sentido de giro, luego incrementar o decrementar una variable, publicarlo en una LCD y a su vez aumentar o disminuir el ancho de pulso de un PWM para atacar a un led arreglado con un LDR.....¿que por que lo hago? por que necesito controlar 6 canales de audio y quiero hacerlo de forma independiente (control de ganancia para cada uno :p ) una locura, quizás, pero esto nos ayudara a aprender mucho mas sobre control!!...PD: hace poco aprendí a programar micros, asi que estoy en pañales :(, pero si tengo muchos años en la electrónica análoga y digital convencional :D ...
 
Última edición:
Para mi manera de ver ya son muchos pasos intermedios, una vez que e micro ya codifico el volumen deseado yo enviaria esa informacion a un potenciometro digital
 
Hay un chip de yamaha que es muy parecido a la serie PGA23xx solo que controla SIETE canales en el mismo chip.

Edito: el chip es el YAC523... habría que buscar algun proveedor, pero ahí va el datasheet
 

Adjuntos

  • YAC523.PDF
    407.5 KB · Visitas: 33
Última edición:
Porque no utilzas el TDA7430 que es un procesador de audio de 6 canales y lo manejas por bus I2C? no es el unico dispositvo, lo menciono como referencia
 
gracias a todos por responder tan rápido, el problema con esos chips es que acá donde vivo es muy difícil conseguirlos, y aparte aun no se como programar en c usando el protocolo I2C pero suena muy interesante lo que proponen!
 
Hay otros chips que trabajan controlando mediante DC, de todas manera si persistes con tu idea tal vez utilzano un optoacoplador puedas realizar algo más compacto
 
Ese chip es del mismo tipo del TDA1524 y del LM1036: usan tensión contínua para excitar las etapas de control de tono y volumen. El datasheet es peor que malo, pero con buena voluntad se pueden descifrar algunas cosas...
 
Mira esto a modo de referencia
http://320volt.com/en/lm1036-attiny2313-ton-kontrolu-bass-tiz-balans-ses/
y te vas a dar cuenta si se puede o no

En algún lado tengo uno similar echo por un amigo pero con un pic, funciona espectacular
Si necesitas controlar 6 canales al mismo tiempo Pricento Tegnoly tiene un CI que los controla con DC
La integración de una señal Pwm para obtener una tesión propocional de control es un técnica vieja y se ha utilzado comercialmente con excelente resultado hoy reemplazada por el control por I2C
 
Última edición:
Dr. Zoidberg tu crees que se pueda controlar el volumen de ese chip usando pmw en ves de una tension variable?

Y por que usarias un PWM si podes entrar con DC????
Metele un filtro pasabajos a la señal PWM y la convertis en DC que podes mandar al chip. No me parece que sea lo mas inteligente para hacer.... pero de poder... se puede.
PD: y vas a necesitar tres o cuatro PWMs para poder controlar todo...
 
Última edición:
eso lo tengo claro, ya tengo una rutina para eso usando el pic16877A ahorita mas tarde subo el codigo que tengo que parece que ha funcionado muy bien, la señal le coloco un pasabajos y la rectifico con un diodo un 1N4148 y la uso para atacar al integrado de contro??? es eso?
 
rectificar el pwm y luego un condensador, pero a la salida del filtro pasabanda, me dijiste que para convertirlo a dc. el pwm es una frecuencia y si la rectifico la convierto en dc.

Código:
#include <16F877A.h>

#FUSES NOWDT, XT, PUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD

#use delay(clock=4000000)


#byte porta = 5
#byte portb = 6
#byte portd = 7

  int x;
  int enc;
  int aux;
  int PWMH=0,PWML=0;

// ---------- Programa Principial ----------

void main()
{

   port_b_pullups(FALSE);                   // Sin resistencias pullups a las salidas del puerto B.
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Al no usar el TIMER configuramos lo más básico.
   setup_comparator(NC_NC_NC_NC);           // Sin comparadores.
   setup_vref(FALSE);                       // Al no usar comparadores no necesitamos Vref.
   




   set_tris_a(0);     // Puerto A como entradas. Sólo usamos RA0 y RA1.
   set_tris_b(0b11111111);
   set_tris_d(0);
   

 
   enc=0;     // Inicialmente ponemos a cero la variable que tomará los valores de RA0 y RA1.


 

   While (true)           //lea por siempre el puerto B
   {
          aux=enc;               // Igualamos 'AUX' y 'ENC' para luego comparar cuando cambie 'ENC'.
          enc=portb & 3;         // Aislamos RA0 y RA1 como un número de 2 bits y se carga en la variable 'ENC'.
          
          If ((aux==2)&&(enc==3))// Si en la comparación hay flanco de subida,
          {
             if (x>=0){ x++;}               
          }

          If ((aux==3)&&(enc==2))
          {
          if (x<=32){ x--;}                
          }
//------------------generar PWM-----------
PWMH=X*3;
PWML=255-PWMH;
for(PWMH;PWMH>0;PWMH--){
OUTPUT_HIGH(PIN_A0);
}
for(PWML;PWML>0;PWML--){
OUTPUT_LOW(PIN_A0);
}
   <<<@!1!@>>>[/QUOTE]
}
}


este es el codigo que tengo desarrollado con el que uso el encoder e incremento o decremento el pwm, funciona bien hasta el momento, no he logrado impedir que la variable x no se incremente mas alla del valor de 32 ni decremente menos que 0, el if no me funciona :(
 
Última edición por un moderador:
El pwm no necesita ser rectificado, solo filtrado

La rectificacion se usa en AC, NO porque sea una señal "en frecuencia" sino porque tiene parte negativa. Un PWM que no tiene parte negativa no necesita recitificacion
 
yo supe hacer lo siguiente determinaba la cantidad de pasos para los incrementos y lo hacia funcionar con botones cuando aumentaba el step que aumentaba a la parte positiva se lo quitaba a la parte inversa hasta llegar al máximo y para bajar al reves, cuando llegaba al máximo o al minmo un bep me avisaba de esa condición, siempre pense que eso era complejo pero luego me di con que era un juego de niños
 
bueno alguien tiene un esquematico de pasabanda para el pwm y convertirlo en dc?, no entiendo si solo lo paso por el pasabandas a la salida queda en dc??...pregunto por que eso si no lo he hecho nunca!
 
No es un pasabanda es un integrador.
Cuando rectificas con diodos tienes una tensión unidireccional pulsante, cuando agregas los capacitores aparece una tensión continua, aqui ocurre lo mismo en lugar de una senoide es una onda cuadrada....
Eun una fuente swiching luego de rectificar tienes pulsos unidreccionales, cuando colocas el capacitor aparece la tensión continua.

Cuando tienes tu señal con un duty cycle del 50% de una señal pico a pico de 12V cuando pones unos capacitores y mides tendras unos 6V, si varias el ancho del pulso para que el ciclo sea ahora de un 25% tendras una tensión de 3V
 
Última edición:
bueno no se que frecuencia maneje, puesto que estoy generando el pwm con el codigo que escribi alla arriba, si alguien sabe como calcularlo???....PD no estoy usando timers :D
 
Atrás
Arriba