0
\$\begingroup\$

I have connected four WS2812B modules I got from eBay to my AtMega8 and tried to use the light_ws2812 libray to controll them.

I connected the wire used for communication to the PC5 Pin on my ATMega and wrote the following programm to controll the four LEDs.

#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)
   {

   }
}

I followed the given Example of the Libray to write the Code. While trying to figure out the error myself and rewriting my code a little bit, I somehow managed to get the first LED to light up fully green. When I erased the complete flash memory of the ATMega the LED still stayed on.

Because of that I'm pretty sure that my problem is on the software side, but I don't know how to fix it.

\$\endgroup\$
6
  • \$\begingroup\$ Does your definition of F_CPU match reality? \$\endgroup\$ Commented Jul 20, 2015 at 13:53
  • \$\begingroup\$ @IgnacioVazquez-Abrams I hope so, I`m using the internal oscillator and wrote at the beginning of my programm "#define F_CPU 12000000". Using Atmel Studio i also added under Project>Properties>Toolchain>AVR/GNU C Compiler>Symbols the Symbol "F_CPU=12000000" like it was pointed out in the Readme for the libray. (i.imgur.com/fnGX4Vs.png) \$\endgroup\$
    – Tim
    Commented Jul 20, 2015 at 14:04
  • 1
    \$\begingroup\$ ... There is no 12MHz option for the internal oscillator on the ATmega8. \$\endgroup\$ Commented Jul 20, 2015 at 14:07
  • \$\begingroup\$ @IgnacioVazquez-Abrams So what frequency can i use ? \$\endgroup\$
    – Tim
    Commented Jul 20, 2015 at 14:11
  • 1
    \$\begingroup\$ Okay, i now understood that the F_CPU Paramter won`t change the speed of the internal oscillator. I will try to set the Fusebits and answer my question if that worked. \$\endgroup\$
    – Tim
    Commented Jul 20, 2015 at 14:23

1 Answer 1

1
\$\begingroup\$

Okay, i figured it out!

Just changing the F_CPU Parameter won`t really change the frequency of the internal oscillator. To really change the frequency of the oscillator you have to set the according fusebits. A great tool to find the right fusebits is this Fuse Calculator.

8MHz is the highest frequency the internal oscillator can produce and a suitable value to use the light_ws2812 libray and drive the WS2812B modules.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.