Tobias Paul wrote:
>
> Ich zähle mit dem Timer0 bei jedem Overflow den PWMCounter eins hoch.
> Bei 128 setze ich den Zähler wieder auf Null.
> Warum eigendlich genau bei 128? Hat das einen bestimmten Grund, ich
> könnte ja genau so gut bei 100 oder 200.
Könntest du.
Du musst nur einen Kompromiss finden, bei dem
* du noch genügend viele Updates in der Sekunde zustande
bringst
* du noch genügend hohe PWM-Auflösung bekommst.
Eine PWM mit 3 Bit (also 8 Stufen) wird dir beim Dimmen
einer LED nicht viel bringen, weil nach der Stufe 0
(LED aus), die nächste Stufe schon so hell ist, dass da ein
enormer Helligkeitssprung stattfindet, während beim Übergang
von Suufe 1 auf 2, 2 auf 3 usw. die Helligkeit nur mehr sehr
wenig zunimmt.
>
> if (PWMcounter > 0)
> LEDstat |= 0x01;
>
> Da der Zähler immer größer als 0 ist,
Sagt wer?
Ganz im Gegenteil: Hier
1 | if (PWMcounter == 128)
|
2 | PWMcounter = 0;
|
wird der Counter explizit auf 0 gesetzt.
> wäre die LED in dem Fall immer
> 100% eingeschaltet.
Oder 100% ausgeschaltet. Kommt drauf an, wie deine
LED an den Port angeschlossen ist.
> if (PWMcounter > 64)
> LEDstat |= 0x01;
>
> In dem Fall hätte ich dann eine PWM von 50:50. Auch Richtig?
Ja.
>
> Bei (PWMcounter > 32) dann 72:25 (ein:aus) usw.
Siehe den 100% Fall: kann auch anders rum sein.
Aber vom Prinzip her: Stimmt schon.