Forum: Mikrocontroller und Digitale Elektronik WS2812B "flüssig" dimmen


von Florian (Gast)


Lesenswert?

Hallo zusammen,
ich möchte einen WS2812B-Strip von 0 auf 100% aufdimmen.
Eckdaten:

-Arduino Nano

-WS2812B Strip

-Adafruit_Neopixel lib

-es wird z.B. alle 500ms eine Funktion aufgerufen in welcher der 
Rot-Wert inkrementiert wird. Helligkeitswert steht durchgehende z.B. auf 
255.

Problem: Da ich somit für von 0 auf 100% nur die 256 Schritte des 
Rotwertes habe sind die erste "aufhellungen" relativ grob. Gibt es eine 
Möglichkeit diesen Verlauf flüssiger zu gestalten?

Habe schon versucht den Helligkeitswert parallel über die gleiche weise 
zu inkrementieren und nun abwechselnd Rot bzw. Helligkeit zu 
inkrementieren. Somit hätte ich in Summe 512 Schritte. Hier passiert nun 
anfangs aber gar nichts, da die LEDs erst anspringen wenn Rot bzw. 
Helligkeit einen gewissen Wert erreicht haben.

Danke!!

Gruß
Florian

von und zu (Gast)


Lesenswert?

Höherbittige PWM mit Helligkeitsfunktion hinterlegen

von Udo (Gast)


Lesenswert?

Hallo,

ich nutze die Funktion setBrightness gefolgt von der Funktion service 
aus der Library WS2812FX. Das funktioniert sehr harmonisch.

von Moko (Gast)


Lesenswert?


von c-hater (Gast)


Lesenswert?

Florian schrieb:

> Problem: Da ich somit für von 0 auf 100% nur die 256 Schritte des
> Rotwertes habe sind die erste "aufhellungen" relativ grob. Gibt es eine
> Möglichkeit diesen Verlauf flüssiger zu gestalten?

Nicht wirklich. Die WS281x haben nunmal nur 8Bit PWM.

Ich habe allerdings keine Ahnung, inwiefern die Addafruit-Lib wenigstens 
das tut, was unter dieser Randbedingung tatsächlich möglich wäre.

Aber, selbst, wenn man alles tut, was möglich ist, wird's bei 8Bit-PWM 
niemals wirklich schön.

von Falk B. (falk)


Lesenswert?


von Realist (Gast)


Lesenswert?

Hallo

irgendwie habe es das Gefühl als wenn es kein Zufall ist das der TO eine 
fertige Arduino Bibliothek nutzt und die technisch durchaus sinnvollen 
Hinweise und "Lehrstunden" ihn nur begrenzt helfen werden.
Viel mehr nehme ich an würde ihn ein Hinweis auf in diesen Punkt besser 
funktionierende Arduino Bibliotheken helfen, bzw. wie man die 
-Adafruit_Neopixel lib besser nutzen kann - soweit überhaupt möglich 
weil das eigentliche Dimmen und die hinterlegten Kennlinien bzw. 
Abstufungen ja für den Anwender "verborgen" sind und die Bibliothek 
sowieso recht mächtig ist.

Wie geschrieben: Alles nur eine Vermutung aber die Art der Frage deutet 
schon darauf hin...

Leider kann ich den TO nicht wirklich tiefgreifend helfen sondern nur 
die Empfehlung geben sich nach einer möglichst schlanken Bibliothek 
umzusehen die eben nicht alle RGB Streifen unterstützt die es seit 
"Beginn" bis zum heutigen Zeitpunkt gegeben hat, wo 100 + 1 Effekt schon 
vorgefertigt sind, und die auch für eine 10m² Leinwand ausreichend sind 
(ok. letzteres ist leicht übertrieben)

Leider (manchmal auch zum Glück) sind insbesondere die Adafruit 
Bibliotheken auch möglichst einfachste Nutzung ausgelegt und ermöglichen 
alles Mögliche und Unmögliche in einen Rutsch - mit entsprechenden 
Fehlerpotential und Gefahr das man mit Seiteneffekten und den vorkauten 
leben muss.

Man kann natürlich auch alles selbst von Null aus Programmieren - da 
sind (wären) die Links eine echte Hilfe - aber es hat ja wohl seinen 
Grund das Arduino als Idee mit seinen tausenden Bibliotheken für jedes 
Problem so beliebt sind.

Realist

von Joachim B. (jar)


Lesenswert?

Moko schrieb:
> https://www.mikrocontroller.net/articles/LED-Fading

sollte jeder mal gelesen haben und das exel sheet geladen haben open 
office reicht auch

von Florian (Gast)


Lesenswert?

c-hater schrieb:
> Nicht wirklich. Die WS281x haben nunmal nur 8Bit PWM.

Das war auch meine Befürchtung. Wollte nur hier nochmal nachfragen ob es 
nicht einen Trick gibt dass man aus einer Kombination von Farb- und 
Helligkeitswert noch mehr Abstufungen bekommt.

Der Link zum LED-Fading ist auch interessant nochmal zu lesen. Ist in 
ähnlicher Form schon berücksichtigt.

von Joachim S. (oyo)


Lesenswert?

Ich bin nicht sicher, ob andere bereits sinngemäss das gleiche 
vorgeschlagen haben, daher formuliere ich meinen Vorschlag explizit aus:

Wenn die Frequenz, mit der Du die LEDs aktualisierst, ausreichend hoch 
ist (=zu schnell für das menschliche Auge), könntest Du die 8 Hardware 
PWM-Bits des WS2812-LEDs um ein paar virtuelle Software-PWM-Bits 
erweitern.

Stell Dir z.B. vor: Du kannst für den Rot-Wert nur die Werte 0-255 
ausgeben, würdest aber gerne den Wert 2.5 ausgeben.
Was Du dann machen kannst: Statt fest den Wert 2 oder 3 auszugeben, 
gibst Du immer abwechselnd 2 und 3 aus.
Oder für den Wert 2.25: Du gibst dreimal den Wert 2 aus, dann einmal den 
Wert 3, dann wieder von vorne.

Das ist vglw. leicht implementiert:
Angenommen, Du möchtest statt der 8 Bits der WS2812-LEDs 10 Bit haben, 
und aktuell den Wert i = 937 ausgeben.
Du lässt einen Counter j mitlaufen, der bei 0 startet, und nach jedem 
Frame per
j = ((j + 1) % 4);
erhöht wird, also immer von 0-3 hochzählt. Der 8-Bit-Wert, den Du 
tatsächlich ausgibst, ist
((i + j) >> 2)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Die WS2812-LED laufen mit 8 Bit PWM. Hier ist es extrem schwierig, 
gerade in den unteren Stufen flüssig zu faden. Wenn man noch die 
Anpassung an das menschliche Auge einbaut, kommen sogar noch wesentlich 
weniger vernünftige Schritte raus als die technisch möglichen 256 pro 
Farbe.

Abhilfe:

WS2815 - laufen mit 12V und haben eine 12-Bit-PWM. Hier ist flüssiges 
Faden in allen Bereichen möglich. Und das Beste: Die Dinger haben schon 
die Gammakorrektur (Anpassung an das menschliche Auge) eingebaut, so 
dass die RGB-Werte immer linear erscheinen. Eine Anpassung per Software 
ist hier gar nicht mehr notwendig.

von c-hater (Gast)


Lesenswert?

Joachim S. schrieb:
> Ich bin nicht sicher, ob andere bereits sinngemäss das gleiche
> vorgeschlagen haben

Ich z.B., vor etlichen Jahren (in den Annalen dieses Forums zu finden).

Fazit: Funktioniert nicht.

Es gibt nämlich noch eine weitere Beschränkung neben der PWM-Frequenz. 
Das ist Rate, mit der die Dinger Updates des Duty der PWM akzeptieren.

Diese Rate ist wesentlich geringer als die Rate, mit der man die 
Information über (zumindest kurze) Ketten verschicken kann. Die 
Information kommt zwar an, landet aber effektiv im Nirvana. Nur das 
letzte Update vor der Akzeptanz wird tatsächlich wirksam.

Sprich: das dir vorschwebende "Dithering" funktioniert einfach nicht.

von Joachim S. (oyo)


Lesenswert?

c-hater schrieb:
> Fazit: Funktioniert nicht.
>
> Es gibt nämlich noch eine weitere Beschränkung neben der PWM-Frequenz.
> Das ist Rate, mit der die Dinger Updates des Duty der PWM akzeptieren.
>
> Diese Rate ist wesentlich geringer als die Rate, mit der man die
> Information über (zumindest kurze) Ketten verschicken kann. Die
> Information kommt zwar an, landet aber effektiv im Nirvana. Nur das
> letzte Update vor der Akzeptanz wird tatsächlich wirksam.

Danke, wieder was gelernt.
Klingt auch logisch, die maximale effektive Update-Rate ist vermutlich 
halt die PWM-Frequenz der WS2812-LEDs. Und die scheint einer kurzen 
Google-Suche zufolge wohl üblicherweise bei nur 400Hz zu liegen.
Wobei es offenbar auch neuere Modelle mit 2000Hz gibt, wo die Idee 
vielleicht mit Einschränkungen funktionieren könnte.

von Volker S. (vloki)


Lesenswert?

c-hater schrieb:
> Es gibt nämlich noch eine weitere Beschränkung neben der PWM-Frequenz.
> Das ist Rate, mit der die Dinger Updates des Duty der PWM akzeptieren.

Interessant. Hat das nur mit der RES time von >50us zu tun oder ist kann 
das noch wesentlich mehr sein?
(programmiere gerade einen 10x10x10 Cube mit 5mm LEDs rum, bei dem das 
noch interessant werden könnte)

von Volker S. (vloki)


Lesenswert?

Joachim S. schrieb:
> Klingt auch logisch, die maximale effektive Update-Rate ist vermutlich
> halt die PWM-Frequenz der WS2812-LEDs.

Hmm ja, logisch. Da kann dann natürlich nicht mehr gehen.
Was bedeutet "scan freq. not less than..." im folgenden Abschnitt des 
Datenblattes?

"Each  pixel  of  the  three  primary  color  can  achieve  256 
brightness  display,  completed  16777216  color  full  color display, 
and scan frequency not less than 400Hz/s"

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Joachim S. schrieb:

> Klingt auch logisch, die maximale effektive Update-Rate ist vermutlich
> halt die PWM-Frequenz der WS2812-LEDs.

Das wäre sinnvoll, ja. Ich würde nach meinen Beobachtungen allerdings 
eher auf die Hälfte oder sogar nur ein Viertel der PWM-Frequenz tippen.

Ist aber auch egal. Das eigentliche Problem ist, dass die PWM (und auch 
ihr Duty-Update) in keinster Weise mit der Kommunikation synchronisiert 
ist oder wird.

DADURCH wird jeglicher Ansatz bezüglich eines Dithering torpediert. Es 
werden sich immer störende Aliasing-Effekte ergeben. Und zwar für jede 
einzelne LED andere. Und obendrein welche, die mit der LED-Temperatur 
variieren...

von Rolf M. (rmagnus)


Lesenswert?

Das fadecandy-Platinchen von Adafruit, über das man solche LEDs vom 
Rechner aus per USB steuern kann, macht genau so ein Dithering.
https://www.adafruit.com/product/1689
Ich hatte die schon im Einsatz, und in den untersten Stufen flackern die 
LEDs nur. Sobald aber ein permanentes Leuchten draus wird, sieht es 
eigentlich gut aus.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

c-hater schrieb:
> Ist aber auch egal. Das eigentliche Problem ist, dass die PWM (und auch
> ihr Duty-Update) in keinster Weise mit der Kommunikation synchronisiert
> ist oder wird.

ich hatte dir ja auch schon ein LESENSWERT spendiert

c-hater schrieb:
> Es gibt nämlich noch eine weitere Beschränkung neben der PWM-Frequenz.
> Das ist Rate, mit der die Dinger Updates des Duty der PWM akzeptieren.
>
> Diese Rate ist wesentlich geringer als die Rate, mit der man die
> Information über (zumindest kurze) Ketten verschicken kann. Die
> Information kommt zwar an, landet aber effektiv im Nirvana. Nur das
> letzte Update vor der Akzeptanz wird tatsächlich wirksam.
>
> Sprich: das dir vorschwebende "Dithering" funktioniert einfach nicht.

das wird einfach zu gerne vergessen!

von Falk B. (falk)


Lesenswert?

Rolf M. schrieb:
> Das fadecandy-Platinchen von Adafruit, über das man solche LEDs vom
> Rechner aus per USB steuern kann, macht genau so ein Dithering.
> https://www.adafruit.com/product/1689
> Ich hatte die schon im Einsatz, und in den untersten Stufen flackern die
> LEDs nur.

Logisch, denn der Controller hat keine Möglichkeit, das Laden neuer 
PWM-Daten mit der PWM der LEDs zu synchronisieren.

> Sobald aber ein permanentes Leuchten draus wird, sieht es
> eigentlich gut aus.

Man kann alles übertreiben. Oder einfach bei 8 Bit PWM mit 
Kennlinienkorrektur zufrieden sein.

von Nils W. (derniwi)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe vor ca. einem Jahr auch mein Projekt mit WS2812B gestartet. Da 
der erste Streifen (144 LED/m) zwischen den LEDs keine vernünftigen 
Kontaktflächen bot, habe ich da leider einige Stücke verbrannt (brauchte 
sieben Streifen mit 20 LED).
Lange Rede kurzer Sinn, im Prinzip lief die Steuerung, nur halt nicht 
mit allen LED und das Ergebnis war von der Optik her ok. Dann habe ich 
einen anderen Streifen zerschnitten und alles neu gelötet. Das 
funktioniert jetzt technisch, wie es soll. Aber die LED kann man nicht 
mit niedrigen Werten dunkel betrieben, schon mit RGB=(2,2,2) sind die 
recht hell. Der alte Streifen würde hier erst bei RGB=(25,25,25) oder 
höher eine ähnliche Helligkeit erzeugen (Werte sind geschätzt, aber es 
ist ein deutlicher Unterschied).

Insofern, wenn die LED gar nicht dunkel können, wird das mit dem 
Einblenden auch nichts. Ich habe damit ein Lauflicht für einen 
Leuchtturm gebaut.
Ach ja, im angehängten GIF ist die max. Helligkeit bei 20 von 255...

Evtl. beobachtet der TO auch einfach mal, wie ein langsames Einblenden 
von 0 auf 20 (quasi im Sekundentakt die Helligkeit um 1 erhöhen) 
aussieht.

Gruß
Nils

von Falk B. (falk)


Lesenswert?

Nils W. schrieb:
> Ach ja, im angehängten GIF ist die max. Helligkeit bei 20 von 255...

>    preview image for Leuchtturm.gif
>    Leuchtturm.gif
>    23 MB

Echt jetzt? Schon mal was von einem normalen Videoformat gehört?
Der Quark lad ich nicht runter, auch wenn das heutzutage keinen juckt.

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.