Dafür musst Du zwei Mal Konvertieren. Das mag im Code sauberer aussehen, performanter ist es mit grosser Wahrscheinlichkeit nicht.
gloob:
Schon mal überlegt den Fade im HSV Farbraum zu machen? Da geht das um einiges einfacher, da nur ein Wert für die Farbinformation verändert werden muss und nicht wie bei RGB 3 Stück.
Hi gloob,
verstehe ich Dich richtig, dass Du eine ColorWheel Funktion vorschlägst und dann nur den Farbwert (Hue) an sich verändern, also überblenden willst?
Das schränkt einerseits den Farbraum extrem ein und wird wohl nie so flüssig faden, wie unsere Lösung, weil Dir die Zwischenstufen fehlen, und andererseits fährst Du dabei - wenn Start- und Zielfarbe nicht zufällig nebeneinander liegen - durch alle möglichen anderen Farben.
Das sieht bestimmt interessant aus, hat aber mit einer weichen Überblendung nichts mehr zu tun.
Oder Du nimmst Saturation und Value mit dazu und hast dann den gleichen Aufwand zuzüglich Konvertierung.
Gruß Helmuth.
P.S. Wenn man Speicher sparen will und mit Abstrichen bei der Effektqualität leben kann, könnte man mit nur 2 Arrays anstelle von 3 arbeiten und einfach mit statischer Schrittweite zur Zielfarbe hoch-/runterzählen. Ist für schnelle Fades sicherlich akzeptabel.
Hallo,
wenn ich mich nochmal reinhängen darf. In meinen Überlegungen war ein Fehler drin. Dann konnte ich noch lesen das unser Auge eine Potenz von 2,2 hat bzw. benötigt um Helligkeitsänderungen linear wahrzunehmen. Manche schreiben auch 2,5. Konnte jetzt meine Excel dahin anpassen das es soft aussieht und komme damit zu 99,99% auf die Werte aus Eisebaer's Buch. Falls das überhaupt noch jemanden interessiert. ![]()
µC PWM Helligkeit_2.xls (55.5 KB)
hi,
und falls das noch jemanden interessiert, es handelt sich um dieses buch:
gruß stefan
@Doc: Na also, geht doch! Kannst ja mal mit verschiedenen Korrekturkurven für verschiedene Farben experimentieren, das ist das Auge nämlich auch verschieden sensitiv.
In dem Zusammenhang auch interessant: Gammakorrektur – Wikipedia
Gruß
Hallo,
yoh ![]()
mit verschiedenen Farben werde ich noch probieren. Meine klare RGB LED ist für sowas ungeeignet. Generell ist die blöd. Man sollte doch immer diffus kaufen. Es entsteht wegen dem klaren Gehäuse keine Farbmischung. Man sieht die 3 Grundfarben immer einzeln leuchten. Naja.
An Büchern habe ich derzeit das elektor Arduino Buch und das o'reilly Die elektronische Welt mit Arduino entdecken. Das elektor geht, wobei da manche Erklärungen fehlen. Das o'reilly finde ich besser. Ist das Arduino- Physical Computing für Bastler, Designer und Geeks auch für Anfänger empfehlenswert?
Wobei ich auf Erklärungen was ist ein Widerstand und wie funktionert ein Transistor gut und gerne verzichten kann.
hi,
ich benutze für sowas gerne das "Hier reinlesen und suchen" bei amazon. ein blick ins inhaltsverzeichnis ist sehr hilfreich, und dann kann man auch ein wenig blättern.
gruß stefan
Eisebaer:
hi,ich benutze für sowas gerne das "Hier reinlesen und suchen" bei amazon. ein blick ins inhaltsverzeichnis ist sehr hilfreich, und dann kann man auch ein wenig blättern.
Und bei bestimmten Büchen fehlen in der Vorschau wirklich wenig Seiten (wie zB Cookbook Arduino)
Grüße Uwe
Hallo,
na dann werde ich mal vorbeischauen, ... ähm reinschauen ![]()
Ein anderer Ansatz, um zwischen Farben zu faden wäre, vom HSV-Farbmodell auszugehen. Am Ende braucht man zwar wieder RGB-Werte, um die LED s anzusteuern, aber man bekommt diese sehr schön aus der Formel HSV-nach-RGB. Bei HSV sind die Farben auf dem Umfang eines Kreises angeordnet, beginnend mit Null Grad (3 Uhr) entgegen der Uhrzeigerrichtung. Nach jeweils 60 Grad kommt die nächste Grundfarbe
0 Grad = Rot
60 = Gelb
120 = Grün
180 = Cyan
240 = Blau
300 = Magenta
360 = Rot
Hi qualidad,
qualidat:
Ein anderer Ansatz, um zwischen Farben zu faden wäre, vom HSV-Farbmodell auszugehen. Am Ende braucht man zwar wieder RGB-Werte, um die LED s anzusteuern, aber man bekommt diese sehr schön aus der Formel HSV-nach-RGB.
ja, diese Möglichkeit wurde weiter oben im Thread schon mal angesprochen. Welchen Vorteil siehst Du bei diesem Vorgehen? Welcher Vorteil rechtfertigt die doppelte Konvertierung (RGB nach HSV und wieder zurück)?
Wie löst Du das Problem der auftretenden Zwischenfarben, wenn Du z.B. von den Hue Wert von gelb nach blau fährst - dann willst Du doch nicht erst grün sehen...
In meiner Vorstellung wird das bei komplexen Inhalten während das Fadens ein buntes Durcheinander, bis es dann schließlich beim Zielbild "einrastet".
Grüße, Helmuth.
edit: Außer, beim Sonderfall von Regenbogeneffekten, hat es sich mir bisher noch nicht erschlossen, warum Leute überhaupt auf das HSV Modell zurückgreifen. Welche Funktionen oder Effekte sind damit leichter zu handeln, als mit dem RGB Modell? Bin für jede Anregung dankbar.
@all:
Mal noch etwas Grundsätzliches zum eigentlichen Konzept / Usecase:
Man stelle sich eine Art von Ambi-/Moodlight für den Wohnraum vor. Auf dem Strip soll irgendetwas passieren - die Muster und die Farben ändern sich. Das menschliche Auge ist sehr empfindlich für HelligkeitsDIFFERENZEN. D.h., selbst wenn man nicht direkt in die Lichtquelle schaut, nimmt man die Summe aller r, g und b Werte wahr - und die schrittweise Änderung dieser Summe. Wenn jetzt irgenein Effekt auf dem Strip ausgeführt wird, hat man also immer das Problem, dass die Änderung der GESAMTHelligkeit wahrgenommen wird. Selbst, wenn der Effekt selbst mit z.B. 20 fps läuft, hat man subjektiv den Eindruck eines subtilen Strobeeffekts. Genau da setzt das Crossfading an: Man berechnet z.B. noch jeweils 100 Zwischenschritte und hilft somit der Framerate auf 200 fps (mit einem kurzen Strip...) - was deutlich weicher und flüssiger wirkt. Ich bin auch dazu übergegangen, den Fall Farbe = 0 auszuschließen und durch Farbe ist minimal 1 zu ersetzen - warum? - weil der WAHRGENOMMENE Helligkeitsunterschied zwischen 0 und 1 am größten ist, bedingt durch die logarithimische Helligkeitswahrnehmung des Auges. Selbst mit 24 Bit hat man "untenrum" immer ein Problem... Mir ist noch kein Strip/PWM Controller untergekommen, der dieses Problem löst.
Wenn man mit DMX Dimmern und analogen Leuchtmitteln (grühwendelhaltig) arbeitet, relativiert sich das Problem durch die Trägheit der Glühwendel, d.h. bedingt durch die physikalischen Eigenschaften verändert sich die Helligkeit vergleichsweise langsam. (LEDs sind dagegen einfach zu schnell...) Untenrum ist das Problem das Gleiche (man hat ja auch da nur 8 Bit / Kanal), weswegen bessere handelsübliche DMX Dimmer auch bei "0" das Leuchtmittel minimal leuchten lassen (sieht man nur im Dunkeln) - einerseits, um die Temperatur des Glühfadens zu halten, also ein (relativ) schnelles hochdimmen ermöglicht wird, andererseits, um das subtile "Geflacker" beim umschalten zwischen 0 und 1 zu minimieren.
Grüße in die Runde!
hi, helmut
alternativ wäre der tlc5940 zu nennen mit 12bit-auflösung. erst bei 1 zu beginnen ist natürlich keine schlechte idee, der farbunterschied wird kaum ins gewicht fallen. mir hilft's auch bei einer funktion, dazu später mehr...
gruß stefan
Hallo,
den PWM 0 auf 1 Effekt sehe ich bei meinen Spielereien mit reinen blauen LEDs auch. Manchmal denkt man es gibt eine Art Zündeffekt wenn man von 0 auf 1 schaltet. Deshalb gehe ich auch nie mehr unter 1.
Hi Doc,
wenn es nur ein "paar" LEDs sind und Dich der Sprung stört, kannst Du eine SW PWM schreiben, um zwischen 0 und 1 Zwischenhelligkeiten zu erzeugen.
Grüße
@all: Gibt es Strips mit 12 Bit PWM Chips, wie z.B. TLC5940?
@all: Gibt es Strips mit 12 Bit PWM Chips, wie z.B. TLC5940?
Meines Wissens nicht.
Der TLC ist nicht für große hintereinander geschaltene Stückzahlen geeignet, da alle Ansteuerungssignale außer der Daten paralell vom SteuerIC zu allen TLC gehen. Durch den Ansteuerstrom der Eingänge können nicht unendlich viele TLC hintereinander geschaltet werden.
Die Treiber die in Strips verwenden werden sind viel einfacher aufgebaut und haben einen Datenbus der von IC zu IC geht und somit immer wieder verstärkt wird. Darum können elektrisch gesehen unendlich viele Treiber in Reihe geschaltet werden. Begrenzungen gibt es nur Aufgrund der Übertragunggeschwindigkeit der Daten und dem erwünschten Bildwiederholfrequenz bei dynamischen Ansteuerung.
8 Bit pro Farbe ist Standart bei der Darstellung von Bildern und Farben. Es gibt wenige gebiete wo mehr Farbauflösung verwendet wird.
Grüße Uwe
Helmuth:
Hi Doc,wenn es nur ein "paar" LEDs sind und Dich der Sprung stört, kannst Du eine SW PWM schreiben, um zwischen 0 und 1 Zwischenhelligkeiten zu erzeugen.
Grüße
Hallo,
wie soll man kleiner 1, also 0.x, als PWM ausgeben? Oder schielst Du darauf hinaus die PWM Frequenz zu ändern, sodass PWM Wert 1 im Vergleich zu jetzt ein noch kürzerer Impuls ist?
Und weil Ihr alle immer so lieb seit, habe ich mal meine Berechnungstabelle automatisiert. Zur einfachen Nutzung für alle. Man kann 3 Krümmungen vergleichen, den maximalen PWM Wert vorgeben (meistens 255) und die Anzahl der gewünschten Zwischenwerte (mehr als 64 macht eigentlich keinen Sinn). Das Ergebnis der PWM Werte kann man per Zelle anklicken und STRG-C und irgendwo als Text einfügen. Zum Bsp. im IDE.
µC PWM Wert Berechnung.xlsx (26.2 KB)
@Doc: Ich nehme an, Dir ist grundsätzlich klar, wie PWM funktioniert. Pulsdauermodulation – Wikipedia
Wenn Dir das Konzept klar ist, kannst Du das als Code abbilden.
Nehmen wir als fiktives Beispiel eine LED, mögliche Helligkeit 0-255. Nehmen wir an, Du wünschst Dir zusätzliche Helligkeitsstufen zwischen 0 und 1.
Indem Du die LED in regelmäßigen gleichkurzen Zeitintervallen zwischen 0 und 1 umschaltest, hast Du schonmal einen Zwischenschritt.
Jetzt unterteilst Du dieses Zeitinvervall weiter, sagen wir eine Millisekunde in 4 * 250 Mikrosekunden (=4 mögliche Zwischenhelligkeiten). Du schaltest die LED zum Beginn des Intervalls auf 1 und dann - in Abhängigkeit von der gewünschten Zwischenhelligkeit nach einer, zwei oder drei 250 µS Intervallen wieder aus. ...usw. Ergebnis: Eine vierstufige PWM zwischen 0 und 1.
Limitiert bist Du dadurch, dass das Ganze schnell gehen muss, damit es nicht sichtbar flackert und dass Du bei mehreren LEDs erstmal die Ausschaltreihenfolge rausbekommen musst, bevor Du das im richtigen Timing durchführst (nachdem Du sie synchron angeschaltet hast), was auch Zeit kostet und vor allem bei vielen LEDs mit vielen Zwischenhelligkeiten aufwendiger Code wird, jedenfalls nach meinem Kenntnisstand.
Soweit verständlich und hilfreich?
Gruß Helmuth
Hallo,
ja, was PWM ist und macht ist mir klar. ![]()
Du meinst, wenn der PWM Wert 1 ist, also die High-Pulsbreite noch sehr sehr kurz ist, dann soll ich in dieser kurzen Zeit zusätzlich den Ausgang zum Bsp. 2x umschalten? Der Standard PWM Takt ist 490Hz sein. Das kann man irgendwie ändern wie vorhin gelesen. Aber bleiben wie bei 490Hz, sonst ändern sich alle anderen Zeitbasen. Das würde bedeuten, PWM Wert 1 entspricht 8,0032µs Pulsbreite. In der Zeit nochmal schalten lassen. Na Hut ab.
Werde das mal für einen Ausgang probieren.