Forum: Projekte & Code Einfaches LED-Fading


von Heiner K. (heinerkuhlmann)


Angehängte Dateien:

Lesenswert?

Hallo Bastler,

unter https://www.mikrocontroller.net/articles/LED-Fading wird das 
physiologische Dimmen von LEDs behandelt.

Die Helligkeit wird per PWM gesteuert. Es geht darum, wie gesteuert 
wird, damit Personen ein gleichmässiges Dimmen wahrnehmen. Wir nehmen 
die Änderung von Helligkeit und anderen Sinneseindrücken nicht linear 
sondern proportional zum aktuellen Wert war 
(https://de.wikipedia.org/wiki/Weber-Fechner-Gesetz).

ΔR = k * R

R ist die Helligkeit die bei LEDs dem Strom entspricht.

Das kennen wir doch: Die Änderung der Spannung eines über einen 
Widerstand entladenen Kondensators ist proportional der Spannung am 
Kondensator. Die obige Schaltung wird beim Ausschalten, die Helligkeit 
der LED physiologisch korrekt steuern. Beim Einschalten hat sie leider 
den gegenteiligen Effekt. Aber es geht hier nur um das Prinzip.

Die digitale Lösung ist relativ einfach. Beim Hochdimmen beginnen wir 
mit einem Wert und addieren einen zum derzeitigen Wert proportionalen 
dazu.

R(n+1) = Rn + k * Rn

Mit K = 1 ist das simpel:
R(n+1) = 2 * Rn

Das kann auch mit einem Prozessor ohne Multiplikation einfach realisiert 
werden: shift nach links. Mit R1 = 1 können wir acht Stufen mit 8 Bit 
realisieren. (Die 256 sind keine 8 Bit: Bei Überlauf 255 nehmen).

Abdimmen ist damit

R(n+1) = Rn - k * Rn

Mit k=0.5 ist
R(n+1) = Rn / 2

Das ist einfach shift nach rechts.

Feinere Stufen ergeben sich mit k = 1 ± b. Dann ist

R(n+1) = Rn ± b * Rn

Wird b als 1/2**p gewählt, ist das einfach auf einem Mikrocontroller zu 
bewältigen. Mit 16-Bit-Zahlen (hier als Perl-Programm geschrieben) kann 
man 24 Werte z.B. für einen 10-Bit-PWM-Ausgang einfach erzeugen.

print "Abdimmen: Faktor = 0.75 = (1 - 1/4)\n";
my $value = 2**16-1; # Anfangswert = Full-House
for ( 1 .. 24 ) {
   my $pwm_value = $value >> 6; # 10Bit
   print "$pwm_value\n";
   $value = $value - ($value >> 2);
};

Im anhängenden Perl-Programm sind andere Beispiele.

Das Abdimmen ist ziemlich einfach. Beim Aufdimmen muss ein passender 
Anfangswert ermittelt werden.

Diese physiologischen Dimmer können leicht für Mikrocontroller 
programmiert werden. Es wird keine Multiplikation / Division und ebenso 
keine Tabelle benötigt.

Ich werde einen Dimmer mit einem PIC realisieren.

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.