Forum: Mikrocontroller und Digitale Elektronik WS2812 Timing


von Max H. (hartl192)


Lesenswert?

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.

von Icke ®. (49636b65)


Lesenswert?

Forumsuche "WS2812". Da werden sie reichlich geholfen.

von Max H. (hartl192)


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

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?

von Icke ®. (49636b65)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?


von Tim  . (cpldcpu)


Lesenswert?

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
von Max H. (hartl192)


Lesenswert?

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
von Icke ®. (49636b65)


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

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