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.
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.
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.
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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.