LED-Matrix mit light_ws2812-library; Ansteuerungsgeschwindigkeit

Gast #5658815
Lesenswert?

Hallo liebes Forum!

Ich steuere eine 24x24 RGBW-Matrix an, realisiert mit einem 
6812-RGBW-Strip. Als Controller nutze ich einen Atmega1284P, getaktet 
auf 8MHZ. Ich komme eher aus der Hobby-Ecke, deswegen fehlt mir jetzt 
etwas Wissen, um mit folgendem Problem umzugehen:
Ich steuere meine Matrix mit Hilfe der light_ws2812-lib an.
(https://github.com/cpldcpu/light_ws2812)
oder
https://www.mikrocontroller.net/articles/WS2812_Ansteuerung
Prinzipiell klappt das auch,jedoch ist meine "Animation" ganz schön 
langsam.
Laut Dokumentation sollte die Übertragung eines Bits an den Strip 1,25us 
dauern;
also ein Byte 10us; sollte doch dann für 576 * 4 Werte insgesamt ~23ms 
brauchen, plus 50us Resettime und der restliche Programmablauf, aber der 
is ja quasi vernachlässigbar, sagen wir mal 25ms.

Meine "Testanimation" (Streifen läuft von unten nach oben) läuft aber 
viel langsamer ab: Nach obiger Rechnung sollte die Darstellung von 24 
Bildern ca. 0,6s brauchen, ich stoppe deutlich über 2s. Was mach ich 
denn da falsch?
Bin über jede Hilfe und Tip dankbar!
Jetzt erstmal gut Nacht,
Claudia
Angehängte Dateien:
#5658826
Lesenswert?

Is nich meine Baustelle, aber schmeiß mal das bei dir sicher unnötige 
Delay aus der Lib raus.
1
void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
2
{
3
  ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin));
4
  _delay_us(ws2812_resettime); 
5
}
Gast #5658994
Lesenswert?

Thomas W. schrieb:
> Ist womöglich das Div8 ein?

Nee, die is wirklich aus. Und wenn ich die lib richtig verstehe, sollte 
das ja auch keinen so großen Unterschied machen, weil das Schreiben der 
Daten ist 800kHz, egal ob der Controller mit 1Mhz oder 8 arbeitet... War 
auch mein erster Gedanke, mir einen Prozessor zu besorgen, der 16MHz 
kann, aber das bringt ja mit der Lib gar nichts...

Teo D. schrieb:
> aber schmeiß mal das bei dir sicher unnötige
> Delay aus der Lib raus.

Ich habs nicht rausgeschmissen, aber die resettime auch testweise mal 
auf 10us gesetzt, macht keinen Unterschied (was im übrigen auch 
problemlos funktioniert und in den Tiefen des Netzes sogar auch 
empfohlen wird). Und da dieses Delay ja auch nur einmal am Ende der 
Übertragung aufgerufen wird, sollte das den Braten nicht fett machen...
Gast #5659003
Lesenswert?

Unter der Voraussetzung, dass die ~ 24 ms pro stimmen, muss das Problem 
zwischen den Frames liegen.

Was mach ich denn da falsch?

Keine aussagekräftigen Kommentare im Programm, damit man deine Gedanken 
nachvollziehen kann.
#5659058
Lesenswert?

clautsch schrieb:
> Nee, die is wirklich aus. Und wenn ich die lib richtig verstehe, sollte
> das ja auch keinen so großen Unterschied machen, weil das Schreiben der
> Daten ist 800kHz, egal ob der Controller mit 1Mhz oder 8 arbeitet... War
> auch mein erster Gedanke, mir einen Prozessor zu besorgen, der 16MHz
> kann, aber das bringt ja mit der Lib gar nichts...

Da bist du im Irrtum.
Hab mir gerade das Git Repository angeguckt.

Da steht ganz klar, dass es abhängig von der Frequenz ist.

Es muss die korrekte Frequenz in F_CPU definiert sein.
Gast #5659075
Lesenswert?

Thomas W. schrieb:
> Es muss die korrekte Frequenz in F_CPU definiert sein.

Ich hab F_CPU=8000000UL als defined Symbol angelegt; (in Atmel Studio 
unter -->ToolChain --> Symbols)


Mex schrieb:
> Keine aussagekräftigen Kommentare im Programm, damit man deine Gedanken
> nachvollziehen kann.

Im Anhang nochmal übersichtlicherer und kommentierter Code, hatte ich 
vorm posten schon überarbeitet aber nicht gespeichert vorm Hochladen...
Sorry...

Mir fällt nichts auf, was so lange dauern könnte...
Angehängte Dateien:
Gast #5659213
Lesenswert?

Implementiere doch mal eine Zeitmessung, wie lange die verschiedenen 
Teile des Codes tatsächlich brauchen. Dazu am besten einen Timer nutzen, 
und nach den verschiedenen Schritten den aktuellen Wert in einen Buffer 
abspeichern. Den kannst du anschließend im Debugger auslesen.
Damit liese sich herausfinden wo das Timing Problem wirklich liegt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren