Opinión de LEDS RGB neo pixel con ws2811 y microcontrolador PIC

Como dice el titulo 👆mi opinión muy particular de esta tira de LEDS RGB siempre tuve la inquietud de saber como se manejaban, estamos a nada de la navidad y quería probarlas.
PIXELES.png
Hoy en día los controladores en Aliexpress son económicos pero quise ver que tan difíciles eran de manejar con un microcontrolador PIC.
Se que existe la librería de Adafruit para los Arduino uno para arriba.
he visto tutoriales que sugieren micros rápidos y potentes para manejar los LED Neopixel.

Pero mi inquietud era ver que tan dificil era usar un PIC como siempre yo nadando en contra de la corriente.
¿Acaso cuando vas a un restaurante y pides sopa el chef te da sopa instantánea?
¡NO!.

Lo mismo pienso de usar Arduino para solo prender unos leds.

Revise la libreria de Adafruit y solo me salieron dudas y había cosas que no entendía NADA de la librería quizá debía leerla con detenimiento pero yo quería ver prender mis lucecitas.

Me di a la tarea de leer la ficha técnica del WS2811 que es el responsable de manejar cada LED.
WS2811.png

Este amiguito tan minúsculo no se comunica con SPI ni I2C tiene su protocolo NRZ para poder detectar si es 1 o es 0 así pero también es soberbio, es decir tienes que cumplir el tiempo de encendido de 1 y de 0 por que si no lo haces no va a funcionar bien.
TABLA.pngSECUENCIA.png

Como se puede ver en la tablita 👆 para el 0 lógico debe durar 500ns de subida y un tiempo de 2us para la bajada dando un total de 2.5us.
Para el 1 lógico es de 1.2us de subida y 1.3us de bajada con un total de 2.5us.

Teniendo esos datos podemos emular la forma de onda para el 1 o el 0 quedando de la siguiente manera:



IMG_20221023_170823.jpgIMG_20221023_170946.jpg

Como se puede observar las formas de onde de los flancos de subida son los mas importantes , me di cuenta que no es tan necesario respetar los flancos de bajada, pueden durar mas y los pixeles funcionaran bien 👌.

El código del 0 logico es el siguiente:

C:
while(true)
 
  {
    DATA=1;
    delay_cycles(1);
    DATA=0; 
    delay_cycles(6);
  }

Como se puede ver así hago un tren de pulsos para poder observar en el osciloscopio la forma de onda y ver que funciona lo mismo pasa para el 1 logico

C:
while(true)
 
  {
    DATA=1;
    delay_cycles(5);
    DATA=0; 
    delay_cycles(5);
  }

delay_cycles según CCS equivale a un NOP de programación es decir 1 NOP durara la frecuencia de reloj dividido en 4.
Quedando así:

formula.png

Entonces 1 delay_cycles me sirve para un 0 lógico.

Teniendo esto podemos empezar a hacer el código que adjuntare.
Lo escribí y compile para el PIC18f4550 pero ocupo tan poca memoria y un solo pin del micro que decidí bajarlo a al micro mas pequeño que tenia en mi laboratorio que es el PIC12f629 se que es un insulto de microcontrolador que corre máximo a 8Mhz no lo pude correr mas rápido poniéndole un cristal mas rápido.

Pero funciono perfecto y mueve los Neopixeles sin problema.


Les dejo el código escrito en C de CCS tiene 2 funciones puede ser migrado a micros diferentes.

Un archivo es el TEST que sirve para ver la forma de onda en el osciloscopio y el main que puede ser migrado a cualquier micro.


En resumen:

Me gustaron mucho los pixeles, vienen en sumergidos en resina lo que los hace buenos para ponerse en exteriores, no se necesita un super controlador chino, con el micro que tengan a la mano es suficiente, funcionan a 5V y de la salida del micro va directo al cable de data de la tira nada de transistores de potencia ni resistencias NADA, la fuente tampoco es la woow fabulosa medí la corriente y no llega a 1 A son mas o menos 800mA en realidad medi 789mA lo que significa que con un cargador de celular es suficiente.

Me gustaría que los probaran y me dijeran que les parecen estas tiras que se ven muy bien.
 

Adjuntos

  • neopixel.zip
    1.5 KB · Visitas: 13
Arriba