Threads zu den RGB-LEDs WS2812B gibt es ja hier zuhauf. Allerdings ist mir das Datenblatt an einigen Stellen nicht ganz klar bzw. ist es widersprüchlich. https://components101.com/displays/ws2812b-addressable-rgb-led So sind die Toleranzwerte für die einzelnen High- bzw- Lowphasen der bits mit +-150 ns angegeben, die für die Periodendauer TH+TL aber mit +-600 ns. Noch eine Frage: Was ist eigentlich der Ruhepegel, wenn nicht kommunziert wird. Ich vermute High, da sonst die Low-Phase des letzten Bits nicht abgegrenzt wäre. Im Timing-Diagramm folgt auf das letzte Bit aber direkt der Reset-Impuls. Dieser ist mit >= 50 µs angegeben, gibt es da eine Obergrenze? Ich frage deshalb, weil ich die LEDs über SPI ansteuern will. Ideal wäre eine SPI-Frequenz von 3MHz, wobei eine kurze Phase 1 Bit = 333 ns, eine lange 3 Bits = 1000 ns entsprechen würde. Allerdings wäre dann bei T1H das Timing verletzt. Alternative wäre, das SPI mit 6MHz zu betreiben (333ns kurz, 867 ns lang), dann müsste ich aber fast die doppelte Datenmenge, nämlich 7 SPI-Bits pro LED-Bit vorhalten. Letzte Frage: Was sollen eigentlich die Spannungsangaben bei den LED-Farben? Wenn ich nur die rote Farbe nutze, kann ich dann das Display mit <3V betreiben? Oder sind das die Durchlassspannungen der LEDs? Wenn ja, was nützt diese Info dem Anwender?
Mike schrieb: > Allerdings ist mir das Datenblatt an einigen Stellen nicht ganz klar nicht nur dir. Das Timing variiert je nach Version des Chips und die Angaben sind schwammig. Ich habe die unterschiedlichen Varianten mal auf einen gemeinsamen Nenner gebracht, und dabei auch Messprotokolle von jemandem berücksichtigt, der die Grenzen ausgetestet hat. • Eine 0 überträgt man durch einen kurzen HIGH Impuls mit 250 … 380 ns. 82 • Eine 1 überträgt man durch einen langen HIGH Impuls mit 750 … 1000 ns. • Mit der nachfolgenden LOW Phase muss jedes Bit insgesamt 1250 … 5000 ns lang sein. Nachdem alle LEDs ihre Helligkeitswerte erhalten haben, halte die Daten-Leitung für mindestens 280 µs auf LOW. Dann ändert sich die Helligkeit aller LEDs auf den vorher festgelegten Wert. Ich denke, damit bist du auf der sicheren Seite.
Mike schrieb: > Was ist eigentlich der Ruhepegel, wenn nicht kommunziert wird. Low > Letzte Frage: Was sollen eigentlich die Spannungsangaben bei den > LED-Farben? Wenn ich nur die rote Farbe nutze, kann ich dann das Display > mit <3V betreiben? Oder sind das die Durchlassspannungen der LEDs? Wenn > ja, was nützt diese Info dem Anwender? Wenig. Die wollen damit wohl nur nur andeuten, dass bei zu geringer Versorgungsspannung die LED-Farben nicht alle gleichzeitig ausfallen.
Mike schrieb: > Noch eine Frage: Was ist eigentlich der Ruhepegel, wenn nicht > kommunziert wird. LOW. Ich vermute High, da sonst die Low-Phase des letzten > Bits nicht abgegrenzt wäre. Ist in dem Moment egal. > Im Timing-Diagramm folgt auf das letzte Bit > aber direkt der Reset-Impuls. Dieser ist mit >= 50 µs angegeben, gibt > es da eine Obergrenze? Viele WS2812B halten das nicht ein, einige vertragen kaum 5 (FÜNF!) us. > Ich frage deshalb, weil ich die LEDs über SPI ansteuern will. Ideal wäre Bringt wenig, denn das TIming ist wirklich relativ anspruchsvoll bezüglich der Toleranzen. Da kann es die CPU auch gleich selber machen. https://www.mikrocontroller.net/articles/WS2812_Ansteuerung#Ansteuerung_per_Software_auf_AVR > Letzte Frage: Was sollen eigentlich die Spannungsangaben bei den > LED-Farben? FYI. > Wenn ich nur die rote Farbe nutze, kann ich dann das Display > mit <3V betreiben? Nein. > Oder sind das die Durchlassspannungen der LEDs? Ja. > Wenn > ja, was nützt diese Info dem Anwender? Wenig bis nichts.
Hi, ich habe diverse WS2812x und Derivate bisher immer per SPI angesteuert. Dabei habe ich den Controller (STM32xx) so konfiguriert, dass ich einen SPI-Takt von 3 MHz hatte. Dann ergeben sich als Bitmuster Low: 100 High: 110 mit T1L = 0,33µs, T0L = 0,66µs T1H = 0,66µs, T0H = 0,33µs Jetzt wo Du es sagst, das Timing für T0L wird tatsächlich verletzt, gut dass die LEDs davon nichts wissen ;-) Funktioniert bei mir mit WS2812 im Dauerbetrieb (Uhr) seit >5J, in anderen Projekten mit WS2812b-2020 (Weihnachtsdeko) als auch mit PL9823 (bedrahteter WS2812x Klon) in einer 20x20 Matrix. Je nachdem wie Du es programmierst kannst Du die Konvertierung "on-the-fly" machen, dann benötigst Du keinen extra Speicher, dafür wird die CPU während der Ausgabe der LED-Daten beschäftigt sein. Alternativ kannst Du mit DMA arbeiten, wenn Du es geschickt programmierst (double-buffering) erzeugst Du in einem SPI Buffer die neuen Daten während der andere Buffer gerade versendet wird. Dann muss der Buffer nur so groß sein, dass Du genug Zeit hast den anderen zu füllen während die Übnertragung läuft. Das kann man im Interrupt machen, so kann Dein Hauptprogramm immer noch weiter laufen.
:
Bearbeitet durch User
Markus M. schrieb: > Low: 100 (T1L=0,33µs + T0L=0,66µs) > High: 110 (T1H=0,66µs + T0H=0,33µs) > Jetzt wo Du es sagst, das Timing für T0L wird tatsächlich verletzt T1L und T1H passen schon, aber ich denke da gehört noch eine Null hinten dran, weil > Mit der nachfolgenden LOW Phase muss jedes Bit > insgesamt 1250 … 5000 ns lang sein. Also: Low: 1000 (T1L=0,33µs + T0L=0,99µs) High: 1100 (T1H=0,66µs + T0H=0,66µs)
Stefan ⛄ F. schrieb: > T1L und T1H passen schon, aber ich denke da gehört noch eine Null hinten > dran, weil > >> Mit der nachfolgenden LOW Phase muss jedes Bit >> insgesamt 1250 … 5000 ns lang sein. Da habe ich wohl Glück gehabt, mit dem "3-Bit" Betrieb hat es bisher immer funktioniert, ich hatte wohl das 800 kbit/s Limit verdrängt. ABER man sollte das tatsächlich nicht tun, da würde ich Dir Recht geben. Mit 4 SPI-Bits pro WS2812 Bit käme man dann tatsächlich gut hin, zumal dann auch die Umwandlung einfacher ist.
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.