Genau so ist es, der Timer zählt zwischen 75 und 150 Schritte weiter. Und man darf ihn nicht starten und stoppen, wenn er gleichzeitig ein PWM-Signal generieren soll, auch das ist richtig. Und bei dieser Anzahl an Zählschritten ist es sogar sehr wahrscheinlich, dass der Timer regelmäßig während des Impulses überläuft. Aber das ist nicht schlimm:
Da Bytes ja keine negativen Werte haben können, gibt es sozusagen einen "Rückwärts-Überlauf", wenn Du von einem kleineren Byte ein größeres subtrahierst. Klingt jetzt vielleicht ein wenig abstrakt, aber an einem Beispiel wird es sicher verständlich:
Nehmen wir mal an der Impuls ist so lang, dass der Timer um 80 Schritte weiterzählt. In der ISR weist Du bei steigender Flanke einer Variablen (z.B. "Alt") den aktuellen Zählerstand zu, und bei fallender Flanke einer anderen (z.B. "Neu"). Anschließend subtrahierst Du Neu-Alt. Ist der Timer zwischen den Flanken nicht übergelaufen, ist alles klar: Neu ist grölßer als Alt, und die Differenz ist immer 80.
Aber was passiert wenn der Timer während des Impulses überläuft und Neu somit kleiner ist als Alt? Wenn Alt z.B. 200 ist, hätt Neu nach 80 Takten und einem Überlauf einen Wert von 24. Die Rechnung 24 - 200 ergibt auf Byte-Ebene aber nicht -176, sondern genau 80 (weil's nach der Null wieder bei 255 anfängt).
Der langen Rede kurzer Sinn: Lass den Timer ganz ungerührt durchlaufen, lese den Zählerstand bei steigender und fallender Flanke ab, subtrahiere die beiden Werte, und Du hast IMMER die Impulslänge![]()
Lesezeichen