Ich bin gerade dabei mit eine Funktion für WS2812 LEDs zu scheiben. Ich mache es auf einem PIC12 indem ich das SPI Module verwende. Ich bin auf eine High Time von 750ns/375ns und eine Bitdauer von 1375ns gekommen. Das ist alles noch innerhalb der Toleranzen, aber zwischen dem Anfang vom letzten Bit und dem Anfang vom ersten Bit des nächsten Byte vergehen 3.125µs. Ist das ein Problem oder muss ich schauen ob ich beim Laden des neuen Bytes noch ein paar Taktzyklen sparen kann? Vielen Dank.
Das Problem hat sich jetzt erübrigt. Ich habe einen Weg gefunden um die Zeit zwischen dem Anfang vom letzten Bit und dem Anfang vom ersten Bit des nächsten Byte auf 1.75µs zu verkürzen. Laut Datenblatt ist die Bitzeit 1.25μs±600ns, also passt es jetzt. Ich teste es momentan auf einem PIC18, weil die Post meinen PIC12 noch hat. Wenn ich es dann auf dem PIC12 mache und den "MOVIW ++FSRn" Befehl benutzen kann komme ich runter auf 1.625µs. Das dürfte dann überhaut kein Problem mehr sein.
Das verwirrt mich auch ein bisschen: Im Datenblatt steht für T0H:0.35us±150ns T0L:0.8us±150ns Das ergibt zusammen eine Bitzeit von 1.15µs±300ns. Im Datenblatt steht aber auch Datatransfertime(TH+TL=1.25μs±600ns) und das passt irgendwie nicht zusammen. Hat jemand eine Erklärung dafür?
M. H. schrieb: > Im Datenblatt steht aber auch Datatransfertime(TH+TL=1.25μs±600ns) Welches Datenblatt hast du? In meinem finde ich das nicht. Möglichweise ist da die "transmission delay time" (Verzögerung an DO) von 300ns mit eingerechnet.
http://www.mikrocontroller.net/articles/WS2812_Ansteuerung Das Protokoll ist asnychron, es ist hauptsächlich die Länge der "1"-Phase relevant. Die Gesamtlänge eines Bits hat keinen großen Einfluss. Wichtig ist dass die Länge der "0"-Phase nicht so lang wird, dass sie als Reset interpretiert wird. Das ist bei einigen LEDs schon bei wenigen µs der Fall, obwohl 50µs spezifiziert sind. Wenn Du eine funktionsfähige Lösung für den PIC hast, kannst Du sie ja zum Wikiartikel hinzufügen.
:
Bearbeitet durch User
Icke ®. schrieb: > Welches Datenblatt hast du? http://www.adafruit.com/datasheets/WS2812.pdf Auf S. 4 zwischen den beiden Tabellen. Tim schrieb: > Das Protokoll ist asnychron, es ist hauptsächlich die Länge der > "1"-Phase relevant. Die Gesamtlänge eines Bits hat keinen großen > Einfluss. Wichtig ist dass die Länge der "0"-Phase nicht so lang wird, > dass sie als Reset interpretiert wird. Das wird bei den 1.75µs wohl nicht das Problem sein. Tim schrieb: > Wenn Du eine funktionsfähige Lösung für den PIC hast, kannst Du sie ja > zum Wikiartikel hinzufügen. Ich weiß noch nicht ob es funktioniert, weil ich die LEDs noch nicht habe. Auf dem Oszi sieht's aber gut aus. Ich werde ihn dann in der Codesammlung posten, wenn ich weiß, dass es funktioniert. @Mod: Ich habe den Beitrag von "Tim" nur aus Versehen gemeldet, ich wollte ihn eigentlich zitieren. Sry
:
Bearbeitet durch User
M. H. schrieb: > Auf S. 4 zwischen den beiden Tabellen. Jetzt seh ich es auch, echt gut versteckt zwischen den Tabellen. Aber siehe Tim, das Timing ist nicht sooo kritisch.
Icke ®. schrieb: > Jetzt seh ich es auch, echt gut versteckt zwischen den Tabellen. > Aber siehe Tim, das Timing ist nicht sooo kritisch. Also müsste das Programm theoretisch funktionieren. Wenn ich es getestet und eventuell verbessert habe kommt es in die Codesammlung. Erst für PIC18, dann für PIC12. Und die Werte sollten auch für WS2812B LEDs passen: | WS2812 | WS2812B | Programm T1H | 0.7µs | 0.8µs | 0.75µs T1L | 0.6µs | 0.45µs | 0.625µs | | | T0H | 0.35µs | 0.4µs | 0.375µs T0L | 0.8µs | 0.85µs | 1µs Tim schrieb: > es ist hauptsächlich die Länge der "1"-Phase relevant. Vor allem die hat die richtige länge.
:
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.