Forum: Mikrocontroller und Digitale Elektronik LED & PWM: für's Auge lineare Helligkeit -> ein-/ausfaden


von Ralf (Gast)


Lesenswert?

Hallo,

hab da ein kleines Problem. Bei einer LED-PWM-Steuerung verwende ich 
PWM-Werte, die ich grob für's lineare Helligkeitsempfinden des Auges 
berechnet habe. Grob deswegen, weil ich einfach die n-te Wurzel aus 
meiner PWM-Auflösung gezogen habe, wobei n die Anzahl der möglichen 
Werte ist, und das ganze n-mal multipliziert habe. (Hoffe das war 
verständlich :)

Das ganze funktioniert auch soweit, das ein- und ausfaden mache ich, 
indem ich einfach in der Werte-Tabelle von Index 0 bis n gehe und wieder 
zurück.

Allerdings habe ich jetzt zwei Fragen:
1) Müsste ich nicht (korrekterweise) auch eine Werte-Tabelle für's 
ausfaden haben? Deren Verlauf müsste ja eigentlich anders aussehen,oder? 
Ich konnte jetzt beim Ausfaden nichts auffälliges sehen, aber 
interessieren würde es mich.
2) Die Frage ist kniffliger: Ich möchte ein "wellenartiges" Ausfaden 
erreichen, bei dem die LEDs bei jeder "Welle" etwas schwächer leuchten, 
bis zum Schluss eben "Ruhe aufm Teich" ist. Momentan hab ich das ganz 
lapidar gelöst, in dem ich einfach bei jeder Welle den maximalen 
Tabellen-Index dekrementiert habe. Das unschöne daran ist, je 
"schwächer" die Wellen werden, desto flackernder wird das ganze 
logischerweise, weil die Zeit der Welle ja kürzer ist (da ich nicht alle 
Tabellenwerte durchlaufe). Ich denke aber, eine konstante Wellenzeit 
sieht besser aus. So, und da hab ich jetzt den Denkanstoss nötig. Ich 
könnte beispielsweise zwischen den Werten zeitlich auffüllen, sodass ich 
im Endeffekt die gleichen Wellenzeiten erreiche. Die einzig andere 
Möglichkeit, die mir noch einfiel wäre für jede Helligkeitsstufe, die in 
der jetzigen Werte-Tabelle vorhanden ist, eine weitere Tabelle mit der 
gleichen Formel zu berechnen, wobei die n-te Wurzel nicht aus der 
PWM-Auflösung, sondern aus dem entsprechenden Wert der ersten Tabelle 
gezogen wird.
Gibts noch ne bessere Möglichkeit, die ich grad nicht sehe?

Ralf

von Achim M. (minifloat)


Lesenswert?

Ralf schrieb:
> einfach die n-te Wurzel

Das Auge hat exponentielles Helligkeitsempfinden.
Aber als Approximation schon ok.

Ralf schrieb:
> auch eine Werte-Tabelle für's
> ausfaden haben

Nein, denn du bildest ja immer eine Zahlenreihe auf eine andere ab und 
das immer in der selben Richtung. Du benutzt also nie die 
Umkehrfunktion.
Fürs Ein- und Ausfaden lässt sich dieselbe Transformationstabelle 
benutzen, wie du schon gemerkt hast.
Ist wie ein Dolmetscher, der immer nur von Deutsch nach Englisch 
übersetzen muss.

Ralf schrieb:
> Das unschöne daran ist, je
> "schwächer" die Wellen werden, desto flackernder wird das ganze
> logischerweise, weil die Zeit der Welle ja kürzer ist (da ich nicht alle
> Tabellenwerte durchlaufe)

Machst du die Wellen vor oder nach der Tabelle? Vor würde ich dir raten.
Wenn es dir schon zu sehr flackert(Sprünge im dunklen Bereich 
wahrnehmbar), nimm doch eine Tabelle mit 8bit Eingangs- und 16bit 
Ausgangswerten. Damit dann auf eine 16bit PWM gehen.
Das sollte genug Auflösung für den dunklen Bereich bieten und 
verschlingt gerade mal 50% mehr Speicher als die alte 
8bit-zu-8bit-Tabelle.
mfg mf

von Falk B. (falk)


Lesenswert?

Siehe LED-Fading

von Ralf (Gast)


Lesenswert?

@Jo:
> Das Auge hat exponentielles Helligkeitsempfinden.
> Aber als Approximation schon ok.
Ich glaube das reicht für die Applikation auch aus.

> Nein, denn du bildest ja immer eine Zahlenreihe auf eine andere ab und
> das immer in der selben Richtung. Du benutzt also nie die
> Umkehrfunktion.
Okay, spart Aufwand :)

> Machst du die Wellen vor oder nach der Tabelle? Vor würde ich dir raten.
Ich glaube, ich habe es missverständlich ausgedrückt. Die Wellen erzeuge 
ich, indem ich einen Variable mit dem maximalen Index der PWM-Tabelle 
lade und diese Variable als Tabellen-Index benutze. Dann fade ich bis 
zum entsprechenden Index ein, dekrementiere die Variable und fade wieder 
aus. Somit ist jede "Welle" etwas dunkler als die vorherige.

> Wenn es dir schon zu sehr flackert(Sprünge im dunklen Bereich
> wahrnehmbar), nimm doch eine Tabelle mit 8bit Eingangs- und 16bit
> Ausgangswerten. Damit dann auf eine 16bit PWM gehen.
Das wird happig, es ist eine Software-PWM an einer 8x8-LED Matrix ;)

> Das sollte genug Auflösung für den dunklen Bereich bieten und
> verschlingt gerade mal 50% mehr Speicher als die alte
> 8bit-zu-8bit-Tabelle.
Vielleicht kann ich die Anzahl der Werte verdoppeln oder vervierfachen 
und beim Einfaden mit 2er/4er-Sprüngen im Index arbeiten und beim 
Ausfaden alle Tabellenwerte verwenden.

@Falk:
Danke.

Ralf

von sonstwer (Gast)


Lesenswert?

Sieh dir die Themen Gammakorrektur und Spektrale Hellempfindlichkeit des 
meschlichen Auges mal genauer an.
Die meisten Menschen haben ein Gamma von ca. 2,2. D.h. eine 
Potenzfunktion von k*x^(2,2) erreicht einen nahezu linear empfundenen 
Anstieg der Helligkeit.
Vorsicht aber bei verschiedenen Farben und bei Farbmischung. Das 
Auge/Gehirn ist sehr komplex und nichtlinear ;)

von Ralf (Gast)


Lesenswert?

@sonstwer:

Danke. Ich werd bei Gelegenheit die Formel interessehalber auf die Werte 
umsetzen. Was sind k bzw. x?

Das "Wellenproblem" hab ich zwar noch nicht gelöst, aber mal schauen, 
was ich noch hinbekomme.

Ralf

von sonstwer (Gast)


Lesenswert?

Ralf schrieb:
> Was sind k bzw. x?

k ist ein konstanter faktor, den man anpassen kann, um auf einen endwert 
von 255 (bei 8 bit) (oder (2^16 - 1) bei 16 Bit) zu kommen.

x ist die variable, die den wert der "Soll-Empfindung" auf einer 
linearen skala angibt.

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.