www.mikrocontroller.net

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


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe LED-Fading

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sonstwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sonstwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.