Forum: Mikrocontroller und Digitale Elektronik ws2812b Zeit berechnen


von Simon (Gast)


Lesenswert?

Wie kann man die Zeit, die zum Senden benötigt wird, berechnen?

Laut Datenblatt https://www.adafruit.com/datasheets/WS2812B.pdf braucht 
es für 1 Bit ca 1,25µs. Nun hat ein WS2812B 3x256Bit.

Macht 768Bits * 1,25µs => 960µs pro IC.

Stimmt die Annahme so? Wäre dann bei etwa 1ms/pro Led.

von Teo D. (teoderix)


Lesenswert?

Simon schrieb:
> 3x256Bit.

Nö, sind 3x24Bit.
(Seite 4, bssst...)

von Planlos (Gast)


Lesenswert?

Wer bietet weniger?

3 x 8 Bit pro Pixel/LED!

von Simon (Gast)


Lesenswert?

3x 1Byte wenn ich das da richtig she

von Simon (Gast)


Lesenswert?

Ja, und was sagt ihr zur Zeitannahme? Ist die korrekt?

von Teo D. (teoderix)


Lesenswert?

So'n Schiet, die Bildchen sind ja nich nur zum angugen, da muss man ja 
mitdenken =/

von Simon (Gast)


Lesenswert?

Mir würde ein Ja genügend :(

von Markus M. (adrock)


Lesenswert?

Wieso soll EIN WS2812B 256 bit "haben"?

Nein, er benötigt genau 3x8 = 24 Bit um die RGB-Daten zu haben (8 Bit 
pro Farbe).

Somit ist Deine Rechnung FALSCH.

Antwort = NEIN.

von Joachim B. (jar)


Lesenswert?

Markus M. schrieb:
> Wieso soll EIN WS2812B 256 bit "haben"?

behauptet doch keiner!

Simon schrieb:
> Nun hat ein WS2812B 3x256Bit.

aber es sind nur 24 Bit und das mal 1,25µs gibt 30µs pro WS2812B

siehe:
https://www.mikrocontroller.net/attachment/244099/m1284p_timing.jpg
Beitrag "Arduino FastLED LIB vs. WS28xx LIB"

am m1284p konnte ich das mit einem #define in delay.h lösen, einfach nur 
F_CPU auf 9L/10L setzen.

von Thomas (Gast)


Lesenswert?

Für längere Ketten muss aber auch die Pausenzeit zwischen 2 
24-Bit-Blöcken beachtet werden:

Diese beträgt 50 usec.

Also kommst Du pro LED auf ca 80 usec

Das hab ich bei meinem Design auch zuerst nicht berücksichtigt.

Viel Erfolg
Thomas

von Joachim B. (jar)


Lesenswert?

Thomas schrieb:
> Für längere Ketten muss aber auch die Pausenzeit zwischen 2
> 24-Bit-Blöcken beachtet werden:
>
> Diese beträgt 50 usec.

war es nicht so das erst wenn alle übertragen wurden das nach 50µs die 
Werte übernommen werden? also die Lücke zwischen 2 LEDs immer kleiner 
als 50µs sein muss?

: Bearbeitet durch User
von Ulrich F. (Gast)


Lesenswert?

Mädels, ihr seid echt süß....

Oben ist das Datenblatt verlinkt.
Anstatt hier rum zu raten, könnte man sich einfach mal daran halten, was 
da geschrieben steht.
Viel klarer gehts doch gar nicht.

Selbst ich, als Arduino Jünger, verstehe das im ersten Durchgang.
Also kann das nicht allzu schwer sein... ;-)

Tipp:
Nur lesen.
Nichts dazu dichten.
Und daran halten.
Dann passt das schon....

von Joachim B. (jar)


Lesenswert?

Ulrich F. schrieb:
> Mädels, ihr seid echt süß....

und du erst, ich hatte das Datenblatt gelesen, aber nicht auswendig 
gelernt.
Statt diesen unnötigen Kommentar hättest du uns erhellen können wenn es 
dir wichtig ist.

von Ulrich F. (Gast)


Lesenswert?

Mein Interesse das Datenblatt vorzulesen ist gering.
Auf 3X8Bit pro Chip habt ihr euch ja schon geeinigt....
Gut gemacht!

Und jetzt speziell zu dir jar...

Joachim B. schrieb:
> also die Lücke zwischen 2 LEDs immer kleiner
> als 50µs sein muss?
Im Datenblatt sind genau 5 Zeiten angegeben.
Wovon 4 Zeiten für die Bits drauf gehen und 1 Zeit für den 
Reset/Übernahme Impuls.
Es gibt in dieser Definition KEINE Lücke zwischen den LEDs.
No!
Vergiss es.
Die Lücke hast du dir (bzw. Thomas) ausgedacht.

Was das erhellend genug?

von Joachim B. (jar)


Lesenswert?

Ulrich F. schrieb:
> Und jetzt speziell zu dir jar...

Ulrich F. schrieb:
> Die Lücke hast du dir (bzw. Thomas) ausgedacht.

ich habe mir keine Lücke ausgedacht!

Ulrich F. schrieb:
> Es gibt in dieser Definition KEINE Lücke zwischen den LEDs.
> No!

das habe ich auch zu keiner Zeit behauptet!

Joachim B. schrieb:
> war es nicht so das erst wenn alle übertragen wurden das nach 50µs die
> Werte übernommen werden? also die Lücke zwischen 2 LEDs immer kleiner
> als 50µs sein muss?

reset code
  >=50us

ab da werden die Daten zur LED übernommen,
weiss ich und ich behauptete nie was anderes.

Du solltest an deinem Leseverständnis arbeiten.

so eine unnötige Diskusion, fühlst du dich nun besser?
Dein ganzes Erscheinen im Thread hat nix erhellendes gebracht ausser das 
du Selbstdarsteller und Arduinojünger bist.

von Ulrich F. (Gast)


Lesenswert?

Joachim B. schrieb:
> ich habe mir keine Lücke ausgedacht!
...
> das habe ich auch zu keiner Zeit behauptet!

Aber gefragt!
Und damit die Bereitschaft gezeigt zu "glauben", anstatt zu lesen.
Darauf hin von mir die Mitteilung bekommen: Sowas gibts nicht.

Joachim B. schrieb:
> Du solltest an deinem Leseverständnis arbeiten.
Damit bin ich offensichtlich nicht alleine.

von Thomas E. (picalic)


Lesenswert?

Ich fasse die Antwort für Lesefaule mal in einer kleinen Formel 
zusammen:
Wenn man sich an das Timing im Datenblatt hält, braucht man für einen 
Aktualisierungs-Zyklus :

T = (Anz.LEDs * 30µs) + 50µs

Wenn man sich nicht an das Datenblatt hält, kann man die Pausen zwischen 
den Bits auch etwas länger machen, je nach Mut bis zu 6 µs und die 50 µs 
etwas kürzen (evtl. nur 10µs).

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Ulrich F. schrieb:
>> das habe ich auch zu keiner Zeit behauptet!
>
> Aber gefragt!

nö nicht wirklich, keine Lücke = 0µs und damit kleiner als

Joachim B. schrieb:
> also die Lücke zwischen 2 LEDs immer kleiner
> als 50µs sein muss?

was auch stimmt, wenn schon Lücken da sein sollten.

Von Lückenzwang hat keiner was geschrieben

Meine Frage war eine Restunsicherheit (bezüglich der 50µs) das die Lücke 
auf jeden Fall <50µs sein muss wenn eine Lücke sein sollte.

von Markus M. (adrock)


Lesenswert?

Ja, im Datenblatt sind ja direkt auch Toleranzen mit angegeben.

Ich betreibe meine WS2812B über DMA+SPI und einem Bittakt von 3 MHz, 
wobei ich jedes Bit für die WS2812b aus 3 SPI Bits zusammensetze - 
ergibt dann effektiv 1µs pro übertragenem Bit.

von Ulrich F. (Gast)


Lesenswert?

Thomas E. schrieb:
> kann man die Pausen zwischen
> den Bits auch etwas länger machen, je nach Mut bis zu 6 µs

Einspruch!!
Wer soll das denn glauben...
Das Datenblatt ist da eindeutig!
> ±150ns

Zwischen den Bits gibts keine Pausen!
Also gibts auch nichts länger zu machen.
Und schon gar nicht um 6µs, was ca das 4 bis 5 fache eines einzelnen 
Bits ist...

Nein!
Das glaube ich nicht.
Und meine Erfahrung mit den Dingern sagt: Die sind extrem pingelig, was 
das Timing betrifft.

von Roger S. (edge)


Angehängte Dateien:

Lesenswert?

Joachim B. schrieb:

> reset code
>   >=50us
>
> ab da werden die Daten zur LED übernommen,
> weiss ich und ich behauptete nie was anderes.

woher weisst du das?
Im Datenblatt steht was anderes: Die Daten werden nach 24bit sofort 
uebernommen.

von Ulrich F. (Gast)


Lesenswert?

Roger S. schrieb:
> Die Daten werden nach 24bit sofort
> uebernommen.
Da muss ich den jar mal in Schutz nehmen!
Denn wo er recht hat, hat er recht.

Ins Latch werden sie sofort übernommen.
Ins PWM Register erst beim Reset.

Das kann man einfach ausprobieren....
z.B. mal 1 Sekunde Daten schicken und dann einen Reset.
Du wirst sehen, sie werden quasi gleichzeitig übernommen.

von Joachim B. (jar)


Lesenswert?

Ulrich F. schrieb:
> Da muss ich den jar mal in Schutz nehmen!
> Denn wo er recht hat, hat er recht.

grosses Danke!

> Ins Latch werden sie sofort übernommen.
> Ins PWM Register erst beim Reset.

und erst ab da sind sie ja interessant bzw. sichtbar für uns!

von Thomas E. (picalic)


Lesenswert?

Ulrich F. schrieb:
> Thomas E. schrieb:
>> kann man die Pausen zwischen
>> den Bits auch etwas länger machen, je nach Mut bis zu 6 µs
>
> Einspruch!!
> Wer soll das denn glauben...
> Das Datenblatt ist da eindeutig!
>> ±150ns

Hab ich ja geschrieben, daß das nicht dem Datenblatt entspricht.

Details:
http://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/

>
> Zwischen den Bits gibts keine Pausen!
> Also gibts auch nichts länger zu machen.

Damit meinte ich eine Verlängerung des Low-Pegels zwischen den 
High-Impulsen der Bits.


> Und schon gar nicht um 6µs, was ca das 4 bis 5 fache eines einzelnen
> Bits ist...
>
> Nein!
> Das glaube ich nicht.

Kannst Du glauben oder auch nicht - musst Du selbst entscheiden.
Ich hab's mit einem LED-Streifen mit 288 LEDs ausprobiert und es lief 
bei mir auch problemlos mit einer auf 200 kbps hertuntergesetzten 
Geschwindigkeit (5µs/Bit)

von Ulrich F. (Gast)


Lesenswert?

Naja..
Glauben ist nicht so mein Ding...
Schon gar nicht einfach so..
Wird bei nächster Gelegenheit getestet.

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.