WS2812B LEDs, Farben gleichmäßig dimmen

OP #5118771
Hi zusammen,

ich möchte WS2812B LEDs sauber dimmen. Also einen eingestellten Farbwert 
z.B. in 10% Schritten dimmen.

Wie geht man dabei am besten in C vor? Mein Attiny2313 hat leider nicht 
sonderlich viel Speicher um große Prozentrechnungen durchzuführen...

Generell würde ich es so machen:

red = red * 0.9;
green = green * 0.9;
blue = blue * 0.9;

Dadurch entstehen aber zwei Probleme:

1. die Farbe wird verfälscht weil Kommastellen in den 8Bit nicht möglich 
sind.
2. die Berechnung ist für den kleinen Attiny zu aufwendig.

Wie dimmt man diese LEDs daher am besten und effizientesten ohne die 
Farbe zu verändern?

Danke, Gruß
Matthias
Gast #5119027
Du kannst 16bit multiplizieren (rot mal 255 macht 100%, rot mal 128 sind 
dann 50% usw.) und nur das High-Byte verwenden.
hatte ich mir bei Elm Chan seiner Spieldose angesehen. Da lässt er die 
Töne am Ende genau so abklingen: Multiplizieren und das High-Byte als 
Ergebnis.
(ok - dort als PWM-Wert fürs OCR-Register, anwendungsbezogen halt).

RGB->HSV wurde ja schon genannt, erleichert die Herangehensweise ernorm.

StromTuner

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.