3 LED RGB con solo 3 resistencias

3

Tengo 3 LED RGB con ánodo común, un registro de desplazamiento y un microcontrolador. Actualmente, he conectado una resistencia en serie para cada cátodo del LED RGB, por lo que hay 9 resistencias en total. Me pregunté si podría usar solo una resistencia por LED RGB porque siempre hay un solo LED RGB activo.

Mire esta imagen y dígame si esto es posible y por qué no si no lo es:

enlace

Gracias.

    
pregunta arminb

3 respuestas

4
Los LED

y el 74HC595 pueden ir lo suficientemente rápido, no hay problema. Pero, tenga en cuenta algunas cosas:

  • Estás multiplexando los LED, eso significa que si un LED está encendido constantemente, solo recibe 1/3 de su corriente normal. Esto se debe a que solo está encendido durante 1/3 del tiempo (2/3 para otros LED).

  • Bueno, si desea un brillo total por LED, aumente la corriente. Podría, pero luego obtener el problema de que puede quemar los LED (si el software se atasca, durante la programación o el parpadeo) y el hardware debe admitirlo. El 74HC595 solo puede hundir 25 mA por pin. El microcontrolador probablemente también sea una cantidad similar. Esto ya podría convertirse en un problema si activa Rojo Verde y Azul a la vez, todo a 20 mA. Es posible que deba agregar algunos MOSFET o transistores que impulsará el registro de desplazamiento, en lugar de directamente en el registro de desplazamiento. Por supuesto, no siempre es necesario llevarlos tan alto, 5mA cada LED es suficiente en la mayoría de los casos.

La única vez que tuve problemas para multiplexar un grupo de LED fue cuando elegí el multiplexor incorrecto. Tenía 13 configuraciones de pantallas de 7 segmentos. Los segmentos se conducirían a través de un 74hc595, con algunos MOSFET para cambiar el riel positivo del suministro. La pantalla se seleccionó a través de 13 N-MOSFET que cambian la GND de cada pantalla. Escogí un multiplexor de 16 canales para esto, pero me olvidé de ver qué era. Resulta que era un multiplexor analógico. Como usé N-MOSFET, tenían que estar "forzados". Un multiplexor analógico no tira ni empuja la salida, o la conecta a la entrada o la mantiene fija. Con un pasador flotante, el N-MOSFET no se estaba apagando lo suficientemente rápido (un pequeño 'capacitor' dentro de la puerta lo mantuvo encendido durante 3 segundos).

Tuve que poner una resistencia desplegable en cada compuerta para apagarse más rápido, pero tuve que limitar el valor a algo que el multiplexor analógico pudiera manejar lo suficiente. Estaba multiplexando a aproximadamente 1 kHz (lo cual es bastante lento para 13 segmentos), pero al final había programado ciclos intermedios para encender primero las pantallas, darle un tiempo de encendido, restablecer las nuevas configuraciones de pantalla y encenderlas . Solo puedo usar activamente la pantalla para un ciclo de trabajo del 70%, el 30% se desperdicia para activar / desactivar las puertas. Limitó la cantidad de luz de las pantallas, afortunadamente solo uso las pantallas en un ambiente oscuro.

En su caso, puede ver cosas similares si deja los LED encendidos mientras reprograma el registro de desplazamiento, por ejemplo. Este efecto puede ser muy pequeño, porque está sucediendo muy rápido.

    
respondido por el Hans
4

Si puedes asegurarte de que solo haya un LED encendido en cualquier momento, tres resistencias funcionarán, como has dibujado.

    
respondido por el stevenvh
1

No estoy seguro de por qué está utilizando el registro de desplazamiento en lugar de tres pines MCU. En cualquier caso, esto se denomina LED multiplexado o escaneado, y es una configuración muy común (ya que el número de resistencias y pines varía O (registro N) con el número de LED, en lugar de O (N)). p>

La visión humana tiene problemas para ver algo más rápido que unos 10 ms, y puede aguantar mucho más lento. Tenga en cuenta que los televisores a menudo escanean la pantalla a 50 o 60 Hz. Entonces, si escaneas mucho más rápido que eso, nadie lo notará.

En su caso de registro de turnos, configura una interrupción para que se apague de vez en cuando, por ejemplo 1000 Hz (intervalos de 1 ms). Esto le proporciona aproximadamente 330 exploraciones por segundo (frecuencia dividida por el número de LED; desea mantener este número por encima de 100 Hz aproximadamente). Cada interrupción, los pines se actualizan y se cambia el registro de desplazamiento. El código probablemente se vería así:

int ledNum = 0;
int colorLED[3] = {0}; // Sets all elements to 0.
// Colors: black = 0, red = 1, green = 2, yellow = 3, 
// blue = 4, magenta = 5, cyan = 6, white = 7

Interrupt()
{
    // Load a 1 into the SR if this is the start of the cycle.
    if(ledNum == 0)
        SR_D = 1;
    else
        SR_D = 0;

    // Set the color.
    PORTA = (PORTA & ~7) | (colorLED[ledNum] & 7);

    // Clock the shift register.
    SR_CLK = 1;
    SR_CLK = 0;

    // Update for next loop.
    ledNum = ledNum + 1;
    if(ledNum == 3)
        ledNum = 0;
}

Ten en cuenta que esto solo te da 8 colores. Para obtener más información, deberá aumentar la velocidad de escaneo porque cambiará los LED con PWM. Código de ejemplo para 4 bits por color, que proporciona 4096 colores y necesita 15 veces la tasa de interrupción (15 kHz o 0.067 ms):

int ledNum = 0;
int pwmStep = 0;
int colorLED[3] = {0}; // Sets all elements to 0.

Interrupt()
{
    // Load a 1 into the SR if this is the start of the cycle.
    if(step == 0)
    {
        if(ledNum == 0)
            SR_D = 1;
        else
            SR_D = 0;

        // Clock the shift register.
        SR_CLK = 1;
        SR_CLK = 0;
    }

    // Set the color.
    int reg = PORTA & ~7;
    if((colorLED[ledNum] & 0xF) > step)
        reg |= 1;
    if(((colorLED[ledNum] >> 4) & 0xF) > step)
        reg |= 2;
    if(((colorLED[ledNum] >> 8) & 0xF) > step)
        reg |= 4;
    PORTA = colorLED[ledNum];

    // Update for next loop.
    if(step == 0)
    {
        ledNum = ledNum + 1;
        if(ledNum == 3)
            ledNum = 0;
    }

    // Next PWM step
    step = step + 1;
    if(step == 15)
        step = 0;
}

Tenga en cuenta que el número de pasos en PWM es el mismo que el valor máximo, no uno más alto. Entonces, cuatro bits, que pueden representar 0-15, necesitan 15 pasos, no 16.

Las optimizaciones, por supuesto, se dejan como un ejercicio para el lector.

Una última cosa que hay que comprobar es que el pin del registro de desplazamiento es capaz de hundir la corriente de tres LED a la vez, dados los valores de su resistencia. De lo contrario, deberá obtener algunos FET o BJT para cambiar los pines del cátodo común de los LED.

    
respondido por el Mike DeSimone

Lea otras preguntas en las etiquetas