WS2812 driver Leds RGB de 24bits

publicado en: Tutorial Pic | 0

ws2812-driver-leds-de-24bits-rgb-interfaz-nzr-2

WS2812 es un chip led encapsulado de tipo smd 5050 que internamente tiene un driver capaz de controlar 1 led RGB, ademas, chip WS2812 posee un estructura interna simple para poder controlar de manera practia un led RGB. El WS2812 dispone de 4 pines: Vdd (3,5 a 5.3VDC), GND, Din y Dout. A través de los pines Din y DOUT es donde sucede la magia. Los bits de datos que representan el brillo RGB son alimentados en serie en el pasador Din, y el chip de tiras a cabo los primeros 24 bits (8 bits cada uno de R, G, B) y envía los bits restantes a través del pin Dout. Mediante la conexión de los LED en una cadena, con el Dout de un LED debe ir a la Din de el siguiente LED, cada led solo necesita 24 bits, y envía el resto de la secuencia de datos afuera al siguiente LED. En teoría no hay límite para el número de LEDs que puede manejar con una sola línea de datos, la única limitación es que el tiempo que tarda en actualizar todos los LEDs.

DESCRIPCIÓN DEL CHIP LED WS2812

  • Circuito de control y chip RGB integrado en un solo encapsulado.
  • Intensidad de brillo programable de 8 bits.
  • Frecuencia de trabajo de 400Hz.
  • Transmisión serial de datos a 800Kbps.
  • 1024 leds RGB en cascada de hasta 5 metros de distancia.

APLICACIONES

  • Lamparas de luminosidad.
  • Luces decorativas.
  • Luces para acuarios.
  • Iluminación.
  • Luces Domótica.

VELOCIDAD DE TRANMISIÓN DE DATOS EN EL CHIP WS2812

Todos los protocolos de datos en serie requieren un reloj para volver a montar los datos recibidos. Este reloj puede ser una señal de reloj explícita como la línea SCK en un dispositivo SPI, o el reloj puede ser un reloj implícita, previamente acordados, tales como la configuración de velocidad de transmisión en un dispositivo UART (con el inicio y bits de parada que sirve para sincronizar los datos en el reloj acordado previamente), o el reloj pueden ser construidos en el flujo de datos en serie. El WS2812 utiliza una forma de este tercer método, mediante el cual cada bit consiste en un «1» seguido de un ‘0’, y el valor del bit se determina únicamente por si el ‘1’ intervalo es más largo o más corto que el intervalo del ‘0’ . Para el WS2812, cada bit se define así:

  • Bit 0: HI 0.40us, 0.85us LO
  • Bit 1: HI 0.80us, 0.45us LO

Cada uno de estos tiempos tiene una tolerancia de +/- 0.15us, por lo que hay una buena cantidad de margen de maniobra dado a la sincronización de datos en serie. Esto es común con datos en serie de auto-sincronizado, donde es sólo relaciones de «1» a «0» el caso, dentro de los límites de tiempo amplios.

Como se puede ver a partir de estos números, un solo bit de datos se demora 1.25us. Esto significa que un solo byte toma 10us, y los 3 bytes de datos RGB toma 30us. Es importante tener en cuenta estos tiempos cuando se añade mas led en cascada o serie. Además, tenga en cuenta que no hay ningún retraso o tiempo de descuento entre los bits o bytes. El único retardo de tiempo que cada vez se suman a la corriente de datos es el retardo de ‘reset’ de al menos 50us (pero puede ser cualquier duración más larga que eso). Así, un inactivo ‘0’ en la línea de salida de datos de al menos 50us Reinicia todos los chips para el siguiente lote de datos entrantes.

ESCOGER UN MICROCONTROLADOR

Entre las familias de microcontroladores que estamos usando en tutoriales anteriores, vamos a utilizar un PIC para conducir los chips WS2812. Una de las principales razones de esta elección es que el WS2812 es esencialmente un chip de 5V, y PIC se puede ejecutar a 5V, a diferencia de la mayoría ARM Cortex M3 u otros. Esto nos ahorra tener que derivar una tensión de 3,3 V de la tensión del controlador chip LED 5V, y de tener que suministrar un nivel de un 3,3 al controlador LED WS2812.

HACER LAS MATEMÁTICAS

Muchos PIC se pueden ejecutar con un oscilador interno de 8 MHz, o 0.125us de reloj. Esto significa que un bit de datos que dura 1.25us está a sólo 10 relojes del microcontrolador, resulta que eso no es mucho tiempo, pero escribir el código en ENSAMBLADOR se puede lograr controlar el WS2812 adecuadamente con un PIC de 8 MHz. Es un ajuste apretado, pero se puede hacer. No podemos obtener el tiempo exacto especificado anteriormente, pero podemos obtener el tiempo que le quede bien dentro de los límites de tiempo. Para ser más específicos, por cada bit=0 que se envié se relizará 3 pulsos para el «LO» y 7 pulsos para «HI», y por cada bit=1 que se envie sera 4 pulsos «LO» y 6 pulsos «HI». Además, tenemos que mantener a este momento a través de una serie de N bytes (o más bien, 3 * N N bytes para LEDs).

CIRCUITO CONEXIÓN CHIP LED WS2812 Y PIC16F1829

ws2812-driver-leds-de-24bits-rgb-interfaz-nzr-3

EJEMPLO LED WS2812 Y PIC16F1829

Se realizará un ejemplo para controlar 3 led rgb ws2812 a través del pin RC0, se desarrollará un juego de luces.

Código principal MAIN.

Código WS2812.

Código FUSES.

Deja un comentario