mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software-LED-Helligkeitsproblem


Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Schoasch (Gast)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Dirk

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: nicky (Gast)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: luxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
falsch, auch der der atmega8 kann über seine timer ne hatdware-pwm.

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Hans-Jörg Schurr (Gast)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut.. Nur genau wie mach ich das? ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Karl-heinz Domnick (kalledom)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

Autor: Hendrik G-punkt (hndr)
Datum:

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

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.