Forum: Mikrocontroller und Digitale Elektronik WS2812 timing und interrupts


von steff (Gast)


Lesenswert?

Hallo

ich bin relativ neu und habe hier im Forum die LED mit integriertem 
Controller WS2812 gefunden. So wie ich das verstehe ist das Timing des 
Protokolls sehr flott. Ich wollte zur Ansteuerung diese Lib verwenden:
Beitrag "Lightweight WS2811/WS2812 Library"

Brauche ich jetzt einen eigenen µC für die Ausgabe? Was passiert wenn 
ein Interrupt während der Ausgabe auftritt? Der müsste mir doch das 
ganze Timing vermasseln, oder? Wenn ich die Interrupts vorher abschalte, 
werde ich mir wahrscheinlich mein Programm anderweitig vermasseln.

Sorry, für die event. dumme Frage.

von dunno.. (Gast)


Lesenswert?

steff schrieb:
> Brauche ich jetzt einen eigenen µC für die Ausgabe? Was passiert wenn
> ein Interrupt während der Ausgabe auftritt? Der müsste mir doch das
> ganze Timing vermasseln, oder?

Stimmt.

>Wenn ich die Interrupts vorher abschalte,
> werde ich mir wahrscheinlich mein Programm anderweitig vermasseln.

Wahrscheinlich? Das kannst du ja ausrechnen. Die Laufzeit der Ausgabe 
kannst du bestimmen, es hängt nun von deiner Anwendung und dem Rest 
deiner Software ab, ob du mit um im worst case eben so lange verzögerten 
Interrupts leben kannst.

von Conny G. (conny_g)


Lesenswert?

steff schrieb:
> Hallo
>
> ich bin relativ neu und habe hier im Forum die LED mit integriertem
> Controller WS2812 gefunden. So wie ich das verstehe ist das Timing des
> Protokolls sehr flott. Ich wollte zur Ansteuerung diese Lib verwenden:
> Beitrag "Lightweight WS2811/WS2812 Library"
>
> Brauche ich jetzt einen eigenen µC für die Ausgabe? Was passiert wenn
> ein Interrupt während der Ausgabe auftritt? Der müsste mir doch das
> ganze Timing vermasseln, oder? Wenn ich die Interrupts vorher abschalte,
> werde ich mir wahrscheinlich mein Programm anderweitig vermasseln.
>
> Sorry, für die event. dumme Frage.

Ja, diese Lib basiert auf Bitbanging in einer im Timing knapp 
dimensionierten Schleife. Ein Interrupt würde das Timing zerstören.
Du hast die Wahl nur in der Reset-Pause der Ansteuerung Ints zuzulassen 
(d.h. INT wird seltener aufgerufen, je nach Anzahl LEDs) oder die LEDs 
nur selten anzusteuern und in dieser Zeit den INT/ die Ints zu 
verpassen.

von steff (Gast)


Lesenswert?

Ok, Danke.
Dann werde ich für die Ausgabe noch einen zweiten µC spendieren und 
lasse die dann über I2C kommunizieren. Vielleicht nicht schön, aber es 
ist :-D

von Joachim B. (jar)


Lesenswert?

steff schrieb:
> Dann werde ich für die Ausgabe noch einen zweiten µC spendieren und
> lasse die dann über I2C kommunizieren. Vielleicht nicht schön, aber es
> ist :-D

wieviele sollen es denn werden und in welchen Abständen willst du 
aktualisieren?

aktuell laufen bei mir 116 RGB LEDs und pro LED werden 30µs fällig, bei 
116 eben rund 3,3ms, ich kann meine Programme solange anhalten, die 
Interrupts sperren, aber ich aktualisiere ja nur 2x pro Sekunde 
(Sekundenblink in der wordclock)

eventuell sperrst du dann den Interrupt wenn du Zeit dafür hast, ist ja 
nicht meist so wichtig ob das 3ms früher oder später rausgeschoben wird.

Andererseits stören die Unterbrechungen durch IRMP, alle 64µs maximal 
4µs lang den WS Transfer nicht im geringsten.

: Bearbeitet durch User
von steff (Gast)


Lesenswert?

Hm, irgendwie hast du recht. Die LEDs werden gar nicht so häufig 
aktuallisiert. Ich muss halt nur sicherstellen, dass ein Interrupt in 
der Sperrzeit nicht zweimal auftreten kann. Wahrscheinlich mache ich mir 
etwas viele Gedanken.

von Max (Gast)


Lesenswert?

Hallo,

welchen Controller verwendest du wenn ich fragen darf?

Ich speise die WS2812's via PWM der wiederrum über DMA versorgt wird.

Das hat den großen Vorteil, dass keinerlei CPU Zeit verschwendet wird.
Ich muss also nur den DMA anstoßen um die LED zu aktualisieren.

Dadurch wird gibt es auch keine probleme mit anderen IRQ's. Zusätzlich 
verwendne ich noch IRQ Prioritäten.

von steff (Gast)


Lesenswert?

Im Moment ist nur ein Atmega328 verbaut, also leider kein DMA

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.