Paso 4: De números binarios a lógica Digital
Descargo de responsabilidad: allí es una pequeña variación de la sincronización que se describe a continuación dependiendo de si está usando un IC de WS2811 real, o la versión incrustada dentro de la WS2812/WS2812B. Los números utilizados a continuación corresponden a este último caso (WS2812/WS2812B). Si usted está usando el IC WS2811 consulte la hoja de datos para los números ligeramente diferentes (aparte de eso, todo lo descrito a continuación es lo mismo).
Principio de funcionamiento
El WS2811 espera dos cosas:
1) un pulso (es decir, rectangular) señal de la onda con una frecuencia de alrededor de 800 KHz — otras frecuencias funcionan tan bien, pero nos ceñiremos a 800 KHz en este tutorial, que establece los valores de intensidad en un registro de desplazamiento interno. Sin embargo, Notemos que el WS2811 se comporta diferentemente que un estándar de cambio de registro en que los datos se desplazan de manera First pasado-hacia fuera.
2) después de que los datos se cambian de puesto en su lugar, el WS2811 espera una baja de la señal dura menos 50μs para enganchar los datos a sus respectivas salidas.
Cambio de los datos
Quien no esté familiarizado con el término 'pulso' podrían haber escuchado de su caso especial: la onda cuadrada. Este tipo de señales no sinusoidales consisten en una amplitud alterna entre un máximo fijo y mínimo fijo a una frecuencia constante. Cuando la alternancia se produce simétricamente, es decir, cuando el tiempo durante el cual la señal tiene un valor máximo es igual al tiempo durante el cual la señal tiene un valor mínimo, tenemos el caso especial de una onda cuadrada. A alrededor de 800KHz, cada período de la onda del pulso es alrededor de 1.25μs largo (1 / 1.25μs = 800 KHz). Para comunicarse con el WS2811 tenemos que ajustar el tiempo durante el cual la señal es baja o alta para señalar un 0 o un 1. Hay un error en la hoja de datos de WorldSemi, así los valores reales deben ser (crédito a la gente sobre de Adafruit para la captura de esto):
Transmitir un 1:
Tiempo para que la señal permanece alta (T1H): 0.8μs
Tiempo para la señal de permanecer bajo (T1L): 0.45μs
Transmitir un 0:
Tiempo para que la señal permanece alta (T0H): 0.4μs
Tiempo para la señal de permanecer bajo (T0L): 0.85μs
Los datos de enganche
Después de enviar todos los bits correspondientes a los valores de intensidad de todos los LEDs que queremos controlar, entonces simplemente necesitamos mantener el valor de la onda del pulso en su valor mínimo para por lo menos 50μs.
Transmisión de un 'comando de cierre':
Tiempo para la señal de permanecer bajo (TL): > = 50μs
Este tipo de señal tiene las propiedades especiales de la uno mismo-ser registrado y cero volver (NZR). Por lo tanto, lo que queda es ver cómo podemos configurar nuestro ATMega328p para producir una señal temporizada precisamente para que podamos transmitir a la matriz de LEDs de RGB WS2812. [Alerta de spoiler!] Utilizaremos la técnica de bitbanging.