Forum: Mikrocontroller und Digitale Elektronik Software-LED-Helligkeitsproblem


von Hendrik G. (hndr)


Lesenswert?

Huhu,

bin jetzt mit meinem Microkontroller.net-Shop-Einsteigerboard am
rumgurken und hab mal zum Spaß ein Programm geschrieben, das die fertig
miteingebaute LED per Tastendruck in der Helligkeit verstellt.. Das
passiert, indem das Programm die LED immer an/ausmacht und die Länge
der An-/Aus-Phase verändert (Ich glaub, dafür gibts auch ein Fachwort
:D)
Allerdings ist der Helligkeitsverlauf merkwürdig... Im dunklen Bereich
nimmt die Helligkeit viel extremer zu, als im Hellen.
Ist das normal so bei der Methode oder könnte das z.B. an einem
Kondensator, der irgendwo versteckt ist oder anderen Gründen liegen?

MfG Hendrik

von Schoasch (Gast)


Lesenswert?

Hi

PWM - Pulsweitenmodulation nennt sich das ganze. Es ist eigentlich
normal. Der Helligkeitsverlauf ist nicht linear sondern logarithmisch
soweit ich weis(ich hoffe ich habe mich jetzt nicht verdan).

mfg schoasch

von Hendrik G. (hndr)


Lesenswert?

Achso, ich dachte das wär genau umgekehrt :/ Und gibts da ne
Möglichkeit, das so zu kompensieren, dass man es als gleichmäßig
empfindet? (Natürlich möglichst rechenzeitarm, damit es nicht flimmert
;))
btw.. danke für die schnelle Antwort =)

von Dirk (Gast)


Lesenswert?

Hi,

am schnellsten sollte es ueber eine Lookuptabelle sein. Zur
Laufzeitberechnungen machen würde ich aus Geschwindigkeitsgründen nicht
vorschlagen.

Dirk

von Hendrik G. (hndr)


Lesenswert?

Hmm, nachdem ich gemerkt habe, dass im Falle der eingeschalteten LED
(Helligkeitswert vom Zähler unterschritten), weniger Befehle ausgeführt
werden, als im Falle der eingeschalteten LED (Wert überschritten) und
das ganze mit NOP aufgefüllt habe, kommt es mir wesentlich
gleichmäßiger vor... Entweder rede ich mir das jetzt ein, um ein
Erfolgserlebnis zu haben, oder das ganze ist jetzt tatsächlich
brauchbar ;) Wobei ich mir kaum vorstellen kann, dass die 3 NOPs
tatsächlich so viel bewirkt haben sollen...

von Hendrik G. (hndr)


Lesenswert?

OK, ich nehm es direkt wieder zurück.. Es hat sich tatsächlich nur
verbessert, aber im Vergleich auf dem Monitor ist das nochmal was ganz
Anderes ;)

Aber ich versteh es echt nicht so ganz.. Wenn die LED bei einem von 256
Impulsen ein ist, müsste das doch 1/256 der vollen Leuchtkraft sein
(~0,4%), bei 128 dann 128/250, also 50%

Das mit der Tabelle ist eine gute Idee.. Da ich aber das Ergebnis der
Rechnung immer nur dann brauche, wenn per Tastendruck der
Helligkeitswert verändert wird, könnte ich ihn ja dann kurz berechnen..
Nur weiß ich halt immernoch nicht, wie...  Am PC wär das irgendwie
wesentlich leichter ;)

von nicky (Gast)


Lesenswert?

hallo,

wie schon jemand weiter oben sagte, das auge nimmt das licht nicht mit
einer linearen kurve auf, sondern mit nem logarithmischen charakter.
also es reagiert empfindlicher bei niedriegen leuchtstärken. sonst
würden wir nachts auch ganz schön blöd aus der wäsche gucken - weil
blind. die ansteuerung, musst du nur an diese funktion anpassen, ich
habe dafür mal eine 10bit pwm verwendet. da war dann nur auf den ersten
5 stufungen ein helligkeitssprung feststellbar. danach war alles
bestens. es ist auch immer die frage, ob du direkt in die led siehst,
oder ob du damit was beleuchtest. im 2. falle, brauchst du keine 10 bit
pwm, weil die intensität in den ersten stufen dann meisst eh so schwach
ist, dass es über eine reflektion nicht mehr sichtbar ist.

von Hendrik G. (hndr)


Lesenswert?

OK, danke für die Erklärung. Irgendwas musste sich ja meinem genialen
Plan in den Weg stellen :D Genau genommen wollte ich mit je 3
einstellbaren Kanälen (Rot, Grün, Blau) dann LED-Leisten betreiben und
irgendwas wie ein Nachtlicht bauen, bei dem man den Farbton dann über
Taster verändern kann (Später dann ein ganzes Raumlicht, mit
IR-Fernbedienung bedient.. Aber bis ich dahin komme, stellt sich
irgendwas neues in den Weg ;))

von Rolf Magnus (Gast)


Lesenswert?

Du schreibst nicht, worauf diese Software läuft. Die meisten Controller
können PWM auch in Hardware erledigen.

von Hendrik G. (hndr)


Lesenswert?

Oh echt? Das wär natürlich genial!
Es ist ein Atmega8. (Irgendwie weiß ich, dass du mir jetzt sagst, dass
genau DAS der Controller ist, der das nicht kann :D)

von luxx (Gast)


Lesenswert?

falsch, auch der der atmega8 kann über seine timer ne hatdware-pwm.

von Hendrik G. (hndr)


Lesenswert?

Oh, das klingt natürlich sehr gut..
Wie kann ich mir das dann vorstellen? Ich benutze dann 2 verschiedene
Intervalle, je einen für die An-Zeit und einen für die Aus-Zeit?

von Hans-Jörg Schurr (Gast)


Lesenswert?

Es gibt da ein recht interessantes Projekt das so was in der Art macht:
http://koeln.ccc.de/prozesse/running/fnordlicht/

von Hendrik G. (hndr)


Lesenswert?

Hui, sogar mit Atmega8.. Da wird das auch mit der Lichtkurve erwähnt und
das Problem wurde scheinbar gelöst.. Vielen Dank! Ich werd das mal
Studieren =)

von Rolf Magnus (Gast)


Lesenswert?

>Wie kann ich mir das dann vorstellen? Ich benutze dann 2
> verschiedene Intervalle, je einen für die An-Zeit und einen für
> die Aus-Zeit?

Nein, es ist sogar noch einfacher. Du benutzt nur einen Wert, der
direkt das Tastverhältnis angibt.

von Hendrik G. (hndr)


Lesenswert?

Klingt gut.. Nur genau wie mach ich das? ;)

von Karl H. (kbuchegg)


Lesenswert?

Schau dir mal im Datenblatt die Timermodi an.
Ab Seite 105 ist das alles detailiert beschrieben.

Im Grunde ist es ganz simpel:
Der Timer läuft ständig durch: von 0 bis 255
Jetzt programmierst du die ganze Einheit so, dass
der Timer selbständig bei Timerwerten unter einer
bestimmten Zahl einen Pin auf 1 hält und darüber
den Pin auf 0 setzt. Durch Variation dieses bestimmten
Wertes kannst du das Verhältnis von Ein- zu Auszeit
bestimmen (Seite 110 im Datenblatt)

Übrigens glaube ich nicht, das dich das weiter bringt.
Du brauchst 3 PWM Stufen (für jede Farbe eine) hast
aber nur 1 Hardware-PWM in Form vom Timer 2.

Also wirds wohl auf eine 3-fach Software-PWM hinauslaufen.

von Hendrik G. (hndr)


Lesenswert?

Du hättest meine Stimmungskurve während des Lesens sehen sollen ;) Von
sehr erfreut, zu einem kleinen Verdacht hin und dann in den Keller
fallend :D
Aber Danke trotzdem für die Info, man kann das ja sicherlich in anderen
Bereichen hervorragend anwenden.

von Karl-heinz D. (kalledom)


Lesenswert?

Wenn Du Dich in Assembler auskennst, kannst Du den Quellcode für 8
PWM-Ausgänge 'abkupfern', die per Software für 0...100% erzeugt
werden; allerdings ... für einen PIC16F87x :-(
Aber vielleicht hilft es als Beispiel.
http://www.domnick-elektronik.de/picpwm.htm

von Hendrik G. (hndr)


Lesenswert?

Vielen Dank, ich guck mir den Quellcode mal genauer an und probier, das
Relevante rauszufiltern.
Leider beschäftige ich mich erst seit ein paar Tagen mit µCs und der
ganzen Elektronik, so dass das noch etwas schwer ist ;)
Aber jetzt nochmal Danke an alle für die Hilfe bisher!

von Hendrik G. (hndr)


Lesenswert?

Hmm, hab grad nochmal eine Idee... Würde das z.B. gehen, wenn ich den
Helligkeitswert (0-255) mit sich selbst malnehme (also Helligkeit^2)
und irgendwie in 2 Registern speicher, dann wieder durch 255 teile?
Dann hätte ich ein Byte, aber mit nicht-linearem Verlauf.
Hab nur leider keine Ahnung, wie ich das lösen könnt ein asm :\

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.