Hallo, welchen Ansatz sollte man in Richtung Attiny (zB 841) am besten verfolgen, wenn man mit WS2812b und UART arbeitet. Das senden an die WS2812b dauert bei mir etwas unter 3ms. Die Leds sollen mit 50 - 100Hz beschrieben werden. Nun würden mir dafür knapp 7ms(17ms) in etwa immer zu Verfügung stehen. Gesendet wird immer nur 1 String a 12 Zeichen + 1 NL. Die Kommunikation soll über ein BluetoothModul geschehen. Das, was ich da habe, arbeitet leider ohne Handshake oder ähnliches. Des weiteren soll auch über UART gesendet werden. Das sehe ich vielleicht noch als kleinest Problem. Einfach immer nach dem senden der WS2812b den String raushauen. Wie soll das Auslesen erfolgen? Einfach Pollen oder über Interrupt auslesen und in einen String schreiben. Sobald der String erfolgreich ('\n') angekommen ist, auswerten.
>Die Leds sollen mit 50 - 100Hz beschrieben werden.
Warum? Die behalten ihren letzten Zustand auch ohne
das man was reinschiebt.
Ja, wenn eine Änderung erfolgt, soll es sich halt ändern. Bis hin zu der Datenrate. Geht hauptsächtlich um Effekte (keine statischen Farben oder einfache Fades).
Meier schrieb: > Wie soll das Auslesen erfolgen? Welches "Auslesen"? WS2812 ist ein reiner Empfänger.
Auslesen auf der UART Seite. Ich schiebe Konfigurationsdateien vom PC in den Attiny. Auf diese reagiert der Attiny und ändert die WS2812 entsprechend ab. Die Frage ist, was ich hier am besten zum "reinschieben" nutzen kann. 1) Einlesen über ISR und Fifo Buffer mit hoher Baudrate 2) eine bestimmte Anzahl von Chars senden, damit die Ledausgabe gestoppt wird. Erkennt der AVR eines der Chars, stoppt er und sendet ein kurzes Feedback zurück- Nun werden die Ledkonfigurationen gesendet. Danach folgen wieder bestimmte Chars, die signalisieren, alles angekommen, es kann weitergehen.
Aus Meier wird Stefan S.;) >Die Frage ist, was ich hier am besten zum "reinschieben" nutzen kann. > >1) Einlesen über ISR und Fifo Buffer mit hoher Baudrate Das wird dazu führen das die Übertragung zu den LEDs gestört wird und merkwürdige Farben auftauchen. >2) eine bestimmte Anzahl von Chars senden, damit die Ledausgabe gestoppt >wird. Das düfen dann aber nicht mehr als zwei sein. Beim Atmega jedenfalls. Meine Vorschläge: 3) Einen Controller verwenden der die Daten per DMA an die LEDs schicken kann. 4) Vernünftige LEDs nehmen die synchron gefüttert werden und keinerlei Timing erfordern (außer zu schnell). Zum Beispiel mit LPD8806 Controller oder APA102. Dann kann man gnadenlos per Interrupt Daten empfangen ohne das das auch nur irgendwie stört.
holger schrieb: > Aus Meier wird Stefan S.;) Nicht ganz ;) Ich habe ein solches Teil am Laufen mit den WS2812 und C# Programm. Das ganze läuft aber nicht zu 100% störungsfrei aus dem mehr oder weniger gleichen Grund. Habe es mit unterschiedlichen Baudraten versucht. Wobei bei mir eher das C# Programm die Werte verwurstet. Das ist aber eine andere Baustelle in einem Thread. Die Ws2812b fliegen bei mir raus. Warte nur noch auf die PCBs aus China, um meine APA102C zu verlöten. Das ganze dient dazu später, das ganze auch auf andere Controller (hauptsächlich Atmel ARM M0+) zu portieren über die SPI Schnittstelle. 1) Das Einlesen erfolgte bei mir in der ISR und dem Buffer (siehe im AVR-Tutorial). Das empfangen war nicht einmal das größte Problem. Es musste aber ein paar Mal die Werte erneut gesendet werdet. Siehe deinen Einwand. Falsche Werte habe ich relativ simpel abgefangen. Der String sah immer in etwa so aus "ff,33,00,33\n". Bevor diese auf die Leds geschoben werden, habe ich mit strtol die chars in 4 Bytes aufgeteilt. Lieferte meine strtol den Counterwert < 4, so habe ich Werte verworfen. 2) Die Variante hatte ich selber nicht getestet. Theoretisch müsste der Attiny einen Puffer von 1Byte haben ? 3) Fällt für mich bedingt weg, siehe 4). 4) Inzwischen sind die APA102 recht günstig geworden. Minimal schwieriger zu löten als die WS2812b. Aber machbar. Vorteil ist hier aufjedenfall, dass es eine synchrone Übertragung ist. Spart in meinen Fall auch einiges an Speicher. Es sind immer 9 Leds zusammengeschaltet (Software). Möchte mir so das unnötige Zwischenspeichern der Werte ersparen und Speicher freischaufeln.
> WS2812 ist ein reiner Empfänger. Sorry für das Posting. "-1" passt schon. ;-) BT SPP scheint nur bis 1382400 Bd zu gehen. Hier noch ein Hinweis zur Timing-Optimierung: Thomas F. schrieb im Beitrag "Re: WS2812B über USB-UART ansteuern" > Ich hab noch eine UART Konfiguration gefunden mit der die WS2812B > Signale besser abgebildet werden können.
:
Bearbeitet durch User
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.