Ich stehe im Moment mächtig auf dem Schlauch!
Ich möchte gern eine eigene Zeitmessung im Programm umsetzen. Alle Timer
haben schon Ihre Aufgaben abbekommen (4 x PWM in Timer0 und Timer2,
Timer1 Overflow Interrupt soll PWM-Values aktualisieren). Aus diesem
Grund möchte ich TCNT1 benutzen um Zeitdifferenzen zu ermitteln. Da es
zum Überlauf kommen kann, mache ich folgendes:
1 | uint16_t My_Time_Dif(uint16_t cnt) // Hier wird TCNT1 eingetragen
|
2 | {
|
3 | static uint32_t lastTime; // letzter Zeitstempel in meiner
|
4 | // Zeitrechnung
|
5 | uint32_t now;
|
6 | uint32_t dif;
|
7 |
|
8 | now = cnt;
|
9 |
|
10 | if (now < lastTime)
|
11 | {
|
12 | now += 65536;
|
13 | }
|
14 |
|
15 | dif = now - lastTime;
|
16 |
|
17 | lastTime = cnt;
|
18 |
|
19 | return (uint16_t) dif
|
20 | }
|
und habe dabei ein komplett schlechtes Gewissen. Dieses rumhantieren mit
16bit und 32bit Zahlen gefällt mir überhaupt nicht. Ich bin sicher das
es viel einfacher geht.
Meine eigenen Berechnungen auf dem Zettel haben aber immer Mist ergeben,
hat jemand eine Idee?