Forum: Mikrocontroller und Digitale Elektronik WS2812b LED-streifen aktualisiert sich erst nach zweitem aufruf


von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Guten morgen,

ich habe schon länger ein Problem mit einem WS2812b LED-streifen.
1
#define WS2818_SEND_DATA_DELAY 50
2
#define WS2818_MAX_PIXEL 110 
3
4
5
CRGB ws2818Array[WS2818_MAX_PIXEL];
1
        /* Setzen der LEDs */
2
        for (n=0; n<WS2818_MAX_PIXEL; n++)
3
        {
4
          if(wordArray[n]==1)
5
          {
6
            ws2818Array[n].r=50;
7
            ws2818Array[n].g=50;
8
            ws2818Array[n].b=50;
9
            sendArray((uint8_t *) ws2818Array);
10
          }
11
          else
12
          {
13
            ws2818Array[n].r=0;
14
            ws2818Array[n].g=0;
15
            ws2818Array[n].b=0;
16
            sendArray((uint8_t *) ws2818Array);
17
          }
18
        }
19
        _delay_ms(WS2818_SEND_DATA_DELAY);

wordArray ist ein 110 langer array, welches eine Matrix wiederspiegelt.

Das Problem ist nun, dass die Änderung der LEDs erst gemacht werden, 
wenn ich diese schleife ein zweites mal durchlaufen habe.
Setze ich das _delay_ms jeweils direkt nach der funktion sendArray, wird 
es direkt übernommen(so sieht es zumindest aus). Allerdings dann nicht 
alle LEDs auf einmal, sondern eine nach der anderen.

von Joachim B. (jar)


Lesenswert?

Johannes schrieb:
> WS2818_SEND_DATA

die WS2812B fühlen sich schlicht nicht angesprochen mit WS2818 :)

Eine Main gibt es nicht?
Eine HW Beschreibung auch nicht?

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Joachim B. schrieb:
> Eine Main gibt es nicht?

das ist ja ein Ausschnitt davon wo das Problem auftritt. Habe diese aber 
auch nochmal angehangen.

Joachim B. schrieb:
> Eine HW Beschreibung auch nicht?

Das ganze läuft auf einem Arduino nano mit einem Atmega328

von Joachim S. (oyo)


Lesenswert?

Der Fehler wird vermutlich ganz banal damit zusammenhängen, dass Du 
sendArray innerhalb der Schleife aufrufst. Statt sendArray direkt nach 
der Schleife und direkt vor dem _delay_ms aufzurufen.

: Bearbeitet durch User
von Johannes (Gast)


Lesenswert?

Joachim S. schrieb:
> Der Fehler wird vermutlich ganz banal damit zusammenhängen, dass Du
> sendArray innerhalb der Schleife aufrufst. Statt sendArray direkt nach
> der Schleife und direkt vor dem _delay_ms aufzurufen.

Dem war auch so. Besten dank :)

Habe eigentlich gedacht, dass es so wie beim SPI wäre. also einfach wenn 
neue bits vorne rein kommen die alten hinten raus (und beim nächsten 
vorne rein). Also dürfte es eigentlich keinen Unterschied machen, ob ich 
jetzt öfters neue daten rein schiebe oder alle auf einmal.

Aber trotzdem nochmal besten dank :)

von Joachim B. (jar)


Lesenswert?

Johannes schrieb:
> Dem war auch so. Besten dank :)

ok Problem gelöst, sonst hätte ich die LIB empfohlen
https://blogges.de/2014/02/diy-rgb-strip-wordclock/
damit läuft meine wordclock auf dem nano328p
https://github.com/FastLED/FastLED

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.