Gast
#6266115
Ich habe ein kleines Programm zur Ansteuerung einesFarb-LED-Streifens geschrieben. Das Ding stammt vom Chinesen und enthält laut Beschreibung LEDs vom Typ WS2812B. Ich nutze den UART eines Pic32 zur Ansteuerung. Der UART ist auf eine Baudrate von 4 MBaud und auf 8bit + 1 Start- und Stopbit eingestellt. Jeweils 5 UART-Bits erzeugen 1 bit für die WS2812B. Pro Byte werden daher 2 Bits für die LEDs gesendet. Der Ausgang TX des UARTs ist über einen Transistor als Pegelwandler und Inverter mit DIN der ersten LED verbunden (s. Anhang). Nun funktioniert das Ganze prima, wenn ich den LED-Streifen das erste Mal beschreibe. Sende ich unmittelbar danach einen zweiten Datenstring, kommen die Farben durcheinander und es leuchten LEDs auf, die gar nicht angesteuert wurden. Interessanterweise lässt sich das Problem lösen, wenn ich die Reset-Pause zwischen zwei Schreibvorgängen von 50 auf 100µs erhöhe. Ich dachte zunächst, dass ich mich verrechnet habe, aber Nachmessen mit dem Oszilloskop zeigte, dass das Timing stimmt. Es sieht so aus, als dass die nach der 50µs-Pause gesendeten neuen Daten an die folgenden LEDs weitergereicht werden anstatt von der ersten LED "geschluckt" zu werden. Alles spricht dafür, dass 50µs nicht als Reset-Signal ausreichen. In der Praxis ist das nicht allzu schlimm, denn es macht wenig Sinn, nach 50µs gleich wieder ein neues Farbmuster zu senden. Kann es sein, dass hier LEDs mit abweichendem Timingverhalten verbaut wurden?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
