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
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
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 =)
Hi, am schnellsten sollte es ueber eine Lookuptabelle sein. Zur Laufzeitberechnungen machen würde ich aus Geschwindigkeitsgründen nicht vorschlagen. Dirk
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...
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 ;)
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.
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 ;))
Du schreibst nicht, worauf diese Software läuft. Die meisten Controller können PWM auch in Hardware erledigen.
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)
falsch, auch der der atmega8 kann über seine timer ne hatdware-pwm.
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?
Es gibt da ein recht interessantes Projekt das so was in der Art macht: http://koeln.ccc.de/prozesse/running/fnordlicht/
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 =)
>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.
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.
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.
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.