LIGHT_WS2812 auf Attiny geht nicht

Hallo,

ich habe gerade ein Problem mit dem Attiny841 und der LIGHT_WS2812 Libary. Vorweg, auf dem Atmega328P ging das ganze ohne Probleme.
Der Atmega328P war ein ProMini mit 16MHz. Der Attiny841 hingegen läuft mit internem Takt bei 8MHz. (Fuses und Symbol F_CPU=8000000UL sind gesetzt).

/*
* tiny841_ws2812b.c
*
* Created: 03.12.2015 22:42:09
* Author : sschultewolter
*/

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

#define GROUP_LEDS

#define NUM_LEDS	8	
#define NUM_GROUP	9	// Number of consecutive LEDs with the same value

struct cRGB rgb[NUM_LEDS];

int main(void)
{
	while (1)
	{
		for(uint8_t i = 0; i < NUM_LEDS; i++)
		{
			// unset last LED
			if(i == 0) rgb[NUM_LEDS-1].r = 0;
			else rgb[i-1].r = 0;
			
			// Set new LED
			rgb[i].r = 255;
			
			#ifdef GROUP_LEDS
			ws2812_setleds_group(rgb, NUM_LEDS, NUM_GROUP);
			#else
			ws2812_setleds(rgb, NUM_LEDS);
			#endif
			
			_delay_ms(500);
		}
	}
}

Die Libary ist von hier light_ws2812/light_ws2812_AVR/Light_WS2812 at master · cpldcpu/light_ws2812 · GitHub
Hier habe ich lediglich folgende Funktionen ergänzt,

void inline ws2812_setleds_group(struct cRGB *rgb, uint16_t numLeds, uint16_t group)
{
	ws2812_setleds_group_pin(rgb, numLeds, group, (1<<ws2812_pin));
}

void inline ws2812_setleds_group_pin(struct cRGB *rgb, uint16_t numLeds, uint16_t group, uint8_t pinmask)
{
	ws2812_DDRREG |= pinmask; // Enable DDR
	for(uint8_t i = 0; i < numLeds; i++)
	{
		for(uint8_t groupLed = 0; groupLed < group; groupLed++)
		ws2812_sendarray_mask((uint8_t*)rgb, 3, pinmask);
	}
	// wait 50µs between two ws2812_setleds 
	_delay_us(50);
}

Setze ich jede Led einzeln, ist das kein Problem, es läuft von 0 bis NUM_LED-1 durch. Sobald der group-Befehl kommt, spielen die Leds verrückt. Jemand eine Idee?

Das struct zu vergrößern ist nicht erwünscht. Jeweils 9 Leds sollen die gleichen Werte erhalten. Diese sind programmtechnisch zusammengeschaltet, um die Helligkeit deutlich nach oben zu setzen.

Gruß Stefan

ws2812_sendarray_mask((uint8_t*)rgb, 3, pinmask);

muss

ws2812_sendarray_mask((uint8_t*)&rgb[i], 3, pinmask);

heißen.

Somit erledigt