Hallo Zusammen, ich bin völlig unbefleckt in Sachen mx Programmierung und versuche so einige basics zu verstehen. Thema : PWM im 8 Bit Modus Aufgabe: Dimme eine LED um 80% Lösung : Timer 1: Zähle immer von 0 bis 255 in einer bestimmten Geschwindigkeit bei 255 verzweige in ein Unterprogramm Unterprogramm: Ist der Zähler 255 ? Wenn ja , dann setzte ihn auf Null zurück ansonsten mach weiter ist der Zähler kleiner als 52 ? Wenn ja, dann mach das Licht an ansonsten lass das Licht aus erhöhe den Zähler um 1 Ist mein Denkmodell richtig ?
>ist der Zähler kleiner als 52 ?
wird vom Compiler wegoptimiert werden, weil er beim Aufruf den
Unterprogramms schon weiß, das Zähler == 255.
;-)
Wenn schon:
Lösung : >Timer 1: >Zähle immer von 0 bis 255 in einer bestimmten Geschwindigkeit >bei 255 verzweige in ein Unterprogramm >Unterprogramm: >Ist der Zähler 255 ? Wenn ja , dann setzte ihn auf Null zurück >ansonsten mach weiter >ist der Zähler kleiner als 52 ? Wenn ja, dann mach das Licht an >ansonsten >lass das Licht aus >erhöhe den Zähler um 1 >Ist mein Denkmodell richtig ? Jein. 52 sind nicht 80% von 255... >Ist der Zähler 255 ? Wenn ja , dann setzte ihn auf Null zurück >ansonsten mach weiter Zähler, die auf 8 Bit begrenzt sind, können nicht weiter als 255 zählen. Dann kommt ein Überlauf. Bei den meisten PWM geht es so: Ist der Übergang 255==>0 erreicht? (auch "TOP", obere Begrenzung) ja: Schalte die LED an. ist der Vergleichswert erreicht? ja: Schalte die LED aus. AVR kann man sogar dazu bringen, das alles ganz von alleine zu machen...
> Ist mein Denkmodell richtig ? Nein. Zähle von 0 bis 255 und danach wieder ab 0 bis 255 und danach... In JEDEM Durchlauf: Vergleiche ob der aktuelle Durchlaufzähler kleiner ist als 52 und schalte dabei den Ausgang zur LED aus oder grösser ist als 52 und schalte den Ausgang ein (das geht softwaremässig sehr einfach, weil beim Vergleich oft ein Carry-Bit gesetzt wird, und man das in einen Port schieben kann oder gleich 8 verschiedene davon sammelt und 8 LEDs auf ein mal in unterschiedliche Helligkeiten setzt). Und an statt daß man das mit Software macht, haben viele uC schon einen PWM Ausgang, wo man nur die 52 reinlädt und den Timer passend programmmiert.
STK500-Besitzer schrieb: > Jein. > > 52 sind nicht 80% von 255... Das Stimmt. Ich wollte aber die LED um 80% dimmen. Also auf 20 %. Ist es denn dann so richtig ?
Thomas schrieb: > STK500-Besitzer schrieb: >> Jein. >> >> 52 sind nicht 80% von 255... > > Das Stimmt. Ich wollte aber die LED um 80% dimmen. Also auf 20 %. Ist es > denn dann so richtig ? Rein rechnerisch sieht es zunächst so aus. Aber jetzt gehts an Problemkreise an die du nie gedacht hast. Wetten :-) Wenn die 20% nämlich 20% der Helligkeit einer voll brennenden LED bedeuten sollen, dann stimmt obiges nicht. Helligkeiten haben eine logarithmische Kennlinie. d.h. um 20% Helligkeit einer voll brennenden LED zu erhalten muss die PWM kleiner sein :-)
> Wenn die 20% nämlich 20% der Helligkeit einer voll brennenden LED > bedeuten sollen, dann stimmt obiges nicht. > Helligkeiten haben eine logarithmische Kennlinie. d.h. um 20% Helligkeit > einer voll brennenden LED zu erhalten muss die PWM kleiner sein :-) Unsinn. Ein Luxmeter das im einem Fall 100 anzeigt, zeigt im anderen Fall 20 an. Perfekt um 80% gedimmt. Die Helligkeit ist nicht logarithmisch. Höchstens die Empfindlichkeit des Auges, deines Auges, du hättest besser hinsehen sollen. Und weil PWM zeitlich dimmt und nicht durch verringerten Strom, haben auch Effekte wie höherer/niedrigerer Wirkungsgrad bei anderem Strom oder Farbverschiebung keine Auswirkung.
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.