Hallo,
der Trick dabei ist, dass die Berechnungen unsigned vorgenommen werden.
Weiterhin muss der Timer modulo 2 hoch 8/16 laufen. Wenn man dies
beachtet, ergibt sich bei der differenzbildung immer genau die Zeit(in
Timerticks) zwischen zwei Capture-Vorgängen. Dabei ist es auch egal, ob
der Timer überläuft oder nicht. Das ganze rührt daher, dass man sich
die ganzen Zahlen eines Mikrocontrollers im Prinzip als Zahlenring
vorstellen kann. Worauf man jedoch achten muss, ist, dass die
Periodendauern des zu messenden Signals nicht zu groß werden, sodass
sie mit der Timerauflösung dargestellt werden können. Ist dies nicht
der Fall, so muss man die Überläufe noch mitzählen. Hier ist natürlich
darauf zu achten, dass kein Overflow vergessen wird. (Overflow doppelt
abfragen).
Nun noch zwei Beispiele:
Periode = 1000 Timerticks
1. Fall: 1. Capture = 1000; 2. Capture = 2000
=> 2.Cap - 1.Cap = 2000 - 1000 = 1000
2. Fall: 1. Capture = 65000 2. Capture = 464
=> 2.Cap - 1.Cap = 464 - 65000 = 1000 (Achtung unsigned int
subtraktion) (hier wird das 2er Complement von 65000 addiert!)
Ich hoffe ich konnte etwas weiterhelfen, ansonsten einfach nochmal
nachfragen.
Viele Grüße,
Ralf