technische Details zu ARGB / WS2812b?

Mickey Mouse

Fleet Admiral
Registriert
Aug. 2006
Beiträge
10.504
Leute, ich stehe gerade mal wieder komplett auf dem Schlauch und sehe vermutlich den Wald vor lauter Bäumen nicht...

ich wollte mal gerne wissen, wie diese "neuen" RGB Stripes funktionieren, bzw. wie die einzelnen LEDs adressiert werden.

habe ich das richtig verstanden, dass das so eine Art "Eimerketten-Schaltung" (so wurde das früher genannt) ist?
also es wird ein 3x8bit RGB Wert "rein gemorst", kommen weitere Daten, schiebt LED1 das Datum weiter zu LED2 usw.

Dx = 24bit Wert (3x8bit RGB), C = Controller, Lx = LED-#

1) D1 C -> L1
2) D2 C -> L1, D1 L1 -> L2
3) D3 C -> L1, D2 L1 -> L2, D1 L2 -> L3
4) usw.

eine "ausreichend lange" Pause bedeutet "Reset" (Counter) und das ganze Spiel geht von vorne los.

was ich jetzt aber nicht verstehe ist, woher weiß der Controller, wie viele LEDs da angeschlossen sind?
bei den ganzen Bauvorschlägen für Arduino, ESP32 & Co. mit der FastLED Library ist das klar, da muss man die Anzahl der LEDs angeben.

bei den Steuerungen im PC (ich kenne das nur von Gigabyte) stellt man aber nirgendwo die Länge/Anzahl ein, aber es gibt dort z.B. auch so "KIT Knight Rider Effekte" (Licht wandert von einem Ende zum anderen und wieder zurück), dafür muss der Controller doch "wissen", wie viele LEDs da an einem Strang hängen?!?

die Dinger haben nur drei Pins, +, -, Data und Data wird doch unidirektional sein?

kann mir jemand auf die Sprünge helfen, wo mein Denkfehler ist?
 
Die "ARGb" LEDs haben nen integrierten Schaltkreis. Also jede einzelne... Das ermöglicht halt die individuelle Ansteuerung, und somit kann der Controller auch "durchzählen"... Wie genau das signaltechnisch in z.b nem stripe aufgebaut ist, kann ich nicht genau sagen. Wahrscheinlich ähnlich wie aus anderen Segmenten bekannte Daisy chains
 
das weiß ich, ich habe mir das Datenblatt zum WS2812b angesehen und daraus habe ich die o.g. "Erkenntnisse". Die eigentliche Ansteuerung ist klar, die Schaltkreise in den LEDs reichen die Informationen von LED zu LED weiter (Eimerkette).

für die "simplen" Effekte (z.B. "Punkte", die mit einem gewissen Abstand durch wandern), braucht man die Länge/Anzahl auch nicht zu wissen, da reicht ein wiederkehrendes Muster.
aber speziell dieser "KIT" Effekt funktioniert eben nicht, ohne das Ende zu kennen...
 
Das WS2812b LED-Band gibt es schon seit Ewigkeiten. Das ist keine Eimerkettenschaltung, sondern die LEDs werden seriell über die Datenleitung einzeln adressiert angesteuert, deswegen braucht man auch z.B. einen Arduino mit serieller Schnittstelle. Natürlich muss der Arduino wissen, wie viele LEDs er ansteuern muss, wobei die Zahl kann auch 256 sein, hängen nur 20 dran, dann werden die restlichen 236 einfach ignoriert.

Mir geht jetzt nicht hervor, was Du genau machen willst, Innenbeleuchtung im Gehäuse vielleicht?

Ich habe mir damit eine Ambilight Steuerung für den PC gebastelt, angesteuert wird der Arduino vom PC über USB:

 
Das ist jetzt reine Spekulation, aber vielleicht gibt es eine Art Rückmeldung wenn von einer LED (bzw Signal IC) zur nächsten geschoben wird, bleibt diese Rückmeldung nach erfolgtem takten aus, ist Ende der Fahnenstange bzw. des Stripes
 
  • Gefällt mir
Reaktionen: Mickey Mouse
juwa schrieb:
Das ist keine Eimerkettenschaltung, sondern die LEDs werden seriell über die Datenleitung einzeln adressiert angesteuert, deswegen braucht man auch z.B. einen Arduino mit serieller Schnittstelle.
das kann nach meinem Verständnis so nicht stimmen!
1) das Daten Paket ist "nur" 24bit, 3x8bit RGB da ist gar kein Platz für eine Adresse
2) wie stellst du dir das dann vor, wenn man die Dinger verlängert?
3) bitte versuche mal die Darstellung aus meinem ersten Beitrag zu verstehen und sage dann genau, was daran falsch ist

juwa schrieb:
Mir geht jetzt nicht hervor, was Du genau machen willst, Innenbeleuchtung im Gehäuse vielleicht?
in erster Linie möchte ich einfach erstmal die Technik verstehen. Die Basis, nicht anhand von vorgekauten Code Schnipseln, die die FastLED Bibliothek nutzen und alle Details vor dem Anwender verstecken
 
Mickey Mouse schrieb:
habe ich das richtig verstanden, dass das so eine Art "Eimerketten-Schaltung" (so wurde das früher genannt) ist?
also es wird ein 3x8bit RGB Wert "rein gemorst", kommen weitere Daten, schiebt LED1 das Datum weiter zu LED2 usw.
Es wird eine ganze Sequenz ausgegeben. Led 1 greift sich den ersten wert und lässt den Rest der Sequenz zur nächsten Led durch. Usw...
Wenn ich das nach kurzer Recherche richtig verstanden habe wird das Datenpaket also von Led zu Led kleiner.
 
Ein Datenpaket ist 24 bits groß, dein Controller sendet einen String der die Anzahl an LEDs entspricht die du eingestellt hast, also zb bei 300 LEDs, einen String von 7200 Bits, die erste LED nimmt sich die ersten 24 Bits und sendet den rest des Strings zur nächsten LED, in diesen fall also 7176 Bits.
Deshalb ist der gesamte Streifen auch durch seinen eigenen Speicher eines einzelnen WS2812 LED limitiert.
 
fairhext schrieb:
Es wird eine ganze Sequenz ausgegeben. Led 1 greift sich den ersten wert und lässt den Rest der Sequenz zur nächsten Led durch. Usw...
Wenn ich das nach kurzer Recherche richtig verstanden habe wird das Datenpaket also von Led zu Led kleiner.
???
genau DAS habe ich doch beschrieben (zumindest versucht ;) )
n 24bit Datenpakete und dann eine 50 micro Sekunden Pause, um den/die Counter zu resetten

das ist doch alles klar (wenn wir uns nicht beide irren), nur woher weiß der Controller denn jetzt, wie groß das Datenpaket sein muss, bzw. nach wie vielen 24-bit Werten er diese Pause für den Reset einfügen muss, damit das ganze Spiel von vorne anfängt?!?
DAS ist der/mein Knackpunkt!

die Vermutung von @Noninterlaced könnte ja stimmen. Wobei ich ja (auch nur) vermutet habe, dass die Datenleitung NICHT bi-drektional ist. Kann man machen, dann müsste der Controller nach jedem RGB Paket kurz innehalten, den Ausgang auf Eingang schalten und lauschen, ob da was kommt. Da wäre jetzt nur noch die Frage, wie die letzte LED (jaja, die Schaltung drum herum) erkennt, dass an ihrem Dout keine weitere mehr lauscht.
Ergänzung ()

Toxicity schrieb:
Ein Datenpaket ist 24 bits groß, dein Controller sendet einen String der die Anzahl an LEDs entspricht die du eingestellt hast,
ja, das ist klar, siehe andere Posts.

ABER:
bei den A-RGB Streifen für den PC wird KEINE Anzahl eingestellt!

eine Möglichkeit wäre, die arbeiten nach einem anderen Verfahren als die "normalen" WS2812b, obwohl es "sehr viele auffällige Ähnlichkeiten" gibt.

Toxicity schrieb:
Deshalb ist der gesamte Streifen auch durch seinen eigenen Speicher eines einzelnen WS2812 LED limitiert.
nein, das hast du falsch verstanden.
da serieller Bus, müssen die nur weiterreichen.
die maximale Länge wird durch den maximalen Takt und die gewünschte Refresh-Rate bestimmt:
When the refresh rate is 30fps, cascade number are not less than1024 points.
Send data at speeds of 800
 
Zuletzt bearbeitet:
Mickey Mouse schrieb:
das kann nach meinem Verständnis so nicht stimmen!
1) das Daten Paket ist "nur" 24bit, 3x8bit RGB da ist gar kein Platz für eine Adresse
2) wie stellst du dir das dann vor, wenn man die Dinger verlängert?
3) bitte versuche mal die Darstellung aus meinem ersten Beitrag zu verstehen und sage dann genau, was daran falsch ist
Das nennt man heute digitales Schieberegister.
Wie gesagt, wenn nur 20 LEDs von einem Streifen mit 200 LEDs angesteuert werden, dann brennen nur die ersten 20 und die restlichen bleiben dunkel. Alle 50µs gibt es dann einen automatischen Reset.

Ansonsten bin ich überfragt, bei mir haben meine Projekte funktioniert. Für Grundlagenfragen ist das hier vielleicht auch das falsche Board.
 
Mickey Mouse schrieb:
das ist doch alles klar (wenn wir uns nicht beide irren), nur woher weiß der Controller denn jetzt, wie groß das Datenpaket sein muss, bzw. nach wie vielen 24-bit Werten er diese Pause für den Reset einfügen muss, damit das ganze Spiel von vorne anfängt?!?
DAS ist der/mein Knackpunkt!
Ich nehme sehr stark an dass das durch Software geregelt wird. Im PC z.b kann es ja nur so sein das der Controller bzw die Software vom Mainboard "durchzählt" und die Sequenz dann eben anpasst. Mir ist früher Mal aufgefallen das wenn ich z.b in Asus Aura creator was erstellt habe. Das es 2-3 durchlaufe bräuchte bevor das ganze reibungslos lief. Als würde da erstmal erkannt werden müssen wieviele LEDs da genau sind und dann die Sequenz synchonisiert. Gerade bei so Laufleuchte Effekte.

Und wie genau dass dann Software seitig im Code funktioniert... Da bin ich dann raus.

Und das oben stehende ist auch nur ne Spekulation.. kann's mir nur anders nicht vorstellen.
 
Mickey Mouse schrieb:
bei den A-RGB Streifen für den PC wird KEINE Anzahl eingestellt!
Deine A-RGB Streifen sind auch nur WS2812, bzw benutzen das gleiche Protokoll. Ich denke mal die gängigen Controller senden einfach einen fixen String der irgendwo einfach aufhört.
fairhext schrieb:
Als würde da erstmal erkannt werden müssen wieviele LEDs da genau sind und dann die Sequenz synchonisiert. Gerade bei so Laufleuchte Effekte.
Wenn du nen String an zwei seiten des Mainboards anschießt wäre das ne Möglichkeit, aber wie ich oben geschrieben habe wird ja das WS2812 Protokoll benutzt, und das kennt gar keine Möglichkeit Daten zurück zu senden, deswegen gibt es nur eine Datenleitung.
 
juwa schrieb:
Wie gesagt, wenn nur 20 LEDs von einem Streifen mit 200 LEDs angesteuert werden, dann brennen nur die ersten 20 und die restlichen bleiben dunkel.
darum geht es hier doch nicht, bzw. gerade doch ;)

hier bei der Gigabyte RGB Fusion Steuerung gibt es einen Effekt, bei dem "ein Punkt" (bestehend aus mehreren LEDs, also "Streifen" aber ich bleibe bei Punkt), der vom Anfang des Stripes genau(!) bis zum Ende wandert und dort dann "umkehrt".
ich habe mal einen zweiten Stripe hinten dran gehängt und dann wandert dieser "Punkt" über beide!!!

der Controller MUSS "irgendwie" erkennen, wie viele LEDs da an einem Ausgang hängen.

wobei ich aber auch vier Streifen parallel geschaltet habe. Ok, die sind alle gleich lang, deshalb gibt es keine Auffälligkeiten. Was wäre jetzt, wenn man zwei unterschiedliche parallel schaltet?

juwa schrieb:
Alle 50µs gibt es dann einen automatischen Reset.
fast richtig
es wird ein NRZ Signal kodiert und wenn eine 50µs "Pause" auftritt (die es ja eigentlich in einem NRZ Signal nicht geben dürfte), werden die Counter/Register gelöscht.

juwa schrieb:
Ansonsten bin ich überfragt, bei mir haben meine Projekte funktioniert. Für Grundlagenfragen ist das hier vielleicht auch das falsche Board.
es ist schon erschreckend, dass es so schwer ist, die absoluten Basics zu erfahren, obwohl es so viele Leute gibt, die das Zeug täglich "nutzen"...
Ergänzung ()

Toxicity schrieb:
Deine A-RGB Streifen sind auch nur WS2812, bzw benutzen das gleiche Protokoll. Ich denke mal die gängigen Controller senden einfach einen fixen String der irgendwo einfach aufhört.
das dachte ich auch erst und habe mir die Effekte daraufhin mal angesehen.
ja, bei einigen könnte man einfach "mit der Gießkanne" arbeiten, nach dem Motto: viel hilft viel.

aber siehe oben, den KIT Effekt bekommt man nur hin, wenn man weiß wie viele LEDs der Streifen hat!
und ich habe den auf einem gekürzten Streifen laufen lassen aber natürlich nicht darauf geachtet, ob der gleich "richtig" gelaufen ist.
 
Zurück
Oben