¿Paso 4: Control?
Yo quería hacer un algoritmo de control lo suficientemente genérico como para el manejo de patrones/secuencias y también controlar el brillo y el color de cada LED.
Para controlar los LEDs tengo que enviar a la MCP23016 un fotograma de 4bytes (1 byte = 8 bits). Un byte con la dirección de la corresponsal de IC para el color, 1 byte con la "escritura" de comando y 2 bytes con el valor de los 16bits (LEDs). El IC está conectado a los LEDs como "sumidero", significado, un valor lógico 0 en el pin encenderá el LED.
¿Y ahora la parte difícil, cómo hacer PWM control de 48 LEDs?
Vamos a estudiar el PWM para un LED! PWM, explicó a Wikipedia.
Si quiero que el brillo del LED al 50%, mi valor PWM es 50%. Esto significa que el LED, en un período de tiempo, debe estar en la misma cantidad de tiempo que fuera.
Vamos a tomar un período de 1 segundo. PWM del 50% significa que en este segundo 1, el tiempo de encendido es 0,5 segundos y el tiempo de apagado es 0.5 segundos. ¿PWM de 80%? 0,2 segundos, 0.8 segundos en!
Fácil, ¿verdad?
En el mundo digital: con plazo de 10 ciclos de reloj, 50% significa que por 5 ciclos el LED está en, y para otro 5 ciclos el LED está apagado. ¿20%? 2 ciclos en, 8 ciclos de apagado. ¿45%? Bueno, realmente no podemos obtener 45%... Puesto que el período está en ciclos y tenemos sólo 10 ciclos, sólo podemos dividir el PWM en pasos de 10%.
Esto significa que la evolución del perno debe ser, con un 50%: 1,1,1,1,1,0,0,0,0,0; O incluso 1,0,1,0,1,0,1,0,1,0;
En la programación podemos hacer esta secuencia de encendido y apagado de una matriz que da vuelta. Para cada ciclo que de salida al pin el valor del índice fueron que el ciclo.
¿Tiene sentido hasta ahora?
Si queremos hacer LED0 50% y el LED 1 20%, podemos agregar ambas matrices.
Para conducir el perno LED0: 1,1,1,1,1,0,0,0,0,0;
Para conducir el perno LED1: 2,2,0,0,0,0,0,0,0,0;
Dando por resultado LED0 + LED0: 3,3,1,1,1,0,0,0,0,0;
Outputing esta secuencia de números en el expansor de Puerto IC, obtendríamos el LED0 con 50% de brillo y LED1 con 20%!!!!
¿Simple para 2 LEDs, derecho? Ahora tenemos que hacer esto para el 16, de cada color!
Para cada uno de estos arreglos de discos, tenemos una combinación de brillo de cada color (16 LEDs)
Cada vez que queremos otra combinación de colores, tenemos que cambiar esta matriz.