¿Controlar múltiples LEDS con un pin PWM?

0

Tengo un circuito que tiene 4 LED controlados por un microcontrolador. Solo se necesita iluminar un LED a la vez. Me gustaría poder controlar el brillo del LED que está encendido a través de la modulación de ancho de pulso, sin embargo, solo tengo un pin PWM disponible. Sin embargo, tengo 4 pines GPIO estándar disponibles. Me pregunto si el circuito que dibujé a continuación funcionaría.

Configuraré GPIO 1 como salida de drenaje abierto y configuraré el PWM para controlar el brillo. Inicialmente, para apagar ambos LEDs, configuraría GPIO 2 y 3 como salidas push-pull y los elevaría. Pensé que esto pondría 3.3V a ambos lados de los LED, evitando así que la corriente fluya a través de ellos. Luego, si quisiera encender el LED1, simplemente configuraría GPIO2 para flotar.

Mi conjetura es que tendré problemas con la cantidad de corriente que se está hundiendo en GPIO1 si hice esto con 4 LED. Pero no estoy seguro?

¿Este circuito o algo similar funcionaría o debo agregar transistores para lograr esto? El micro es un PIC24F si eso importa.

    
pregunta PICyourBrain

3 respuestas

2

Charlieplexing mi amigo.

Simplemente los conectas de esta manera:

Luego, escribe alto y bajo en los diferentes pines que activarán los LED individuales.

Supongamos que quieres que se ilumine LED3, luego lo configuras así:

Pin1 = INPUT //high impedance
Pin2 = OUTPUT(1)
Pin3 = OUTPUT(0)

Si desea que Led3 tenga un brillo del 50%, entonces implemente un PWM en el software.

Pin1 = INPUT //high impedance
Pin2 = software_pwm(0.5)
Pin3 = OUTPUT(0)

Y si quieres que se enciendan los 4 (supongo que no conectas LED5 y LED6)

Entonces se verá así:

while(1){

    //LED1
    Pin1 = OUTPUT(1)
    Pin2 = OUTPUT(0)
    Pin3 = INPUT  //high impedance
    delay_some_milliseconds()  
    //we don't need to be flashing at 500khz, or whatever high
    //frequency we'll get without any delays, 60Hz is good enough,
    //some ms will bring you down there. 

    //LED2
    Pin1 = OUTPUT(0)
    Pin2 = OUTPUT(1)
    Pin3 = INPUT
    delay_some_milliseconds()

    //LED3
    Pin1 = INPUT
    Pin2 = OUTPUT(1)
    Pin3 = OUTPUT(0)
    delay_some_milliseconds()

    //LED4
    Pin1 = INPUT
    Pin2 = OUTPUT(0)
    Pin3 = OUTPUT(1)
    delay_some_milliseconds()
}
    
respondido por el Harry Svensson
1

No está claro. ¿Tiene 4 GPIO además del pin pwm? Si es así, entonces este es un ejercicio trivial en multiplexación. Pero se recomienda agregar un bjt adicional para manejar la corriente si hay más de un LED encendido.

Si no es así, entonces el camino a seguir es la combinación de caracteres, como lo muestra Harry Svensson, con pwm en el pin 2. Por supuesto, la polaridad del pwn tendrá que cambiar dependiendo de qué LED esté encendido. Una vez más, la corriente está bien siempre que solo un led esté encendido.

    
respondido por el Kripacharya
0

simple:

1) enruta el pwm a todos los leds; 2) Atar cada led a un pin gpio. 3) configurar / borrar el pin gpio para encender un led; Borrar / configurar el pin gpio para apagarlo. 4) hecho.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas