WS2812B con ATMega8 y light_ws2812 Libray

0

He conectado cuatro módulos WS2812B que obtuve de eBay a mi AtMega8 y traté de usar el libra light_ws2812 para controlarlos.

Conecté el cable utilizado para la comunicación al Pin PC5 en mi ATMega y escribí el siguiente programa para controlar los cuatro LED.

#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "light_ws2812.h"

struct cRGB led[4];

int main(void)
{
   led[0].r=255;led[0].g=00;led[0].b=0;    
   led[1].r=255;led[1].g=00;led[1].b=0;
   led[2].r=255;led[2].g=00;led[2].b=0;
   led[3].r=255;led[3].g=00;led[3].b=0;
   ws2812_setleds(led,4);

   while(1)
   {

   }
}

Seguí el Ejemplo de Libray dado para escribir el Código. Mientras trataba de descubrir el error y reescribía un poco mi código, de alguna manera conseguí que el primer LED se iluminara completamente en verde. Cuando borré la memoria flash completa de la ATMega, el LED seguía encendido.

Por eso estoy bastante seguro de que mi problema está relacionado con el software, pero no sé cómo solucionarlo.

    
pregunta Tim

1 respuesta

1

¡De acuerdo, ya lo descubrí!

El solo cambio del parámetro F_CPU no cambiará realmente la frecuencia del oscilador interno. Para cambiar realmente la frecuencia del oscilador, debe configurar los fusebits correspondientes. Una gran herramienta para encontrar los fusibits correctos es esta Fuse Calculator .

8MHz es la frecuencia más alta que puede producir el oscilador interno y un valor adecuado para usar el libray light_ws2812 y controlar los módulos WS2812B.

    
respondido por el Tim

Lea otras preguntas en las etiquetas