Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage zur PWM / Denkmodell


von Thomas (Gast)


Lesenswert?

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 ?

von Andreas R. (rebirama)


Lesenswert?

>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:

von STK500-Besitzer (Gast)


Lesenswert?

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...

von MaWin (Gast)


Lesenswert?

> 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.

von Thomas (Gast)


Lesenswert?

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 ?

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von MaWin (Gast)


Lesenswert?

> 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.

von Falk B. (falk)


Lesenswert?

Siehe LED-Fading

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.