Hi Leute
Ich brüte gerade über einem Problem bei diesem Code, bei der
return-Anweisung:
1 | int16_t timer0_stop() {
|
2 |
|
3 | uint16_t ticks;
|
4 |
|
5 | ticks = TCNT0; // stilles Aufruesten auf 16bit
|
6 | if (ticks < timer0.wstart) ticks += 256; // wrap-around?
|
7 | ticks -= timer0.wstart; // vergangene Ticks
|
8 |
|
9 | return ((uint32_t) ticks * timer0.tick_ns)/1000; // Mikrosekunden zurueckgeben
|
10 | //return ticks;
|
11 | }
|
Ich möchte ticks auf 32 bit aufpumpen, damit das Produkt nicht
überläuft. /timer0.tick_ns/ ist ein uint16_t und momentan auf 4000
gesetzt (timer tick intervall ist 4000 Nanosekunden, bei F_CPU 16Mhz und
Prescaler 64).
Sollte doch so klappen, oder? Tut es aber nicht, die Werte die ich
rauskriege sind bogus, ich vermute ein Problem mit den Wertebereichen,
aber wo?. Das direkte Zurückgeben des ticks liefert mir aber
erwartungsgemässe Ergebnisse, nur eben in timer ticks und nicht in
Sekunden(bruchteilen)... Was mache ich falsch oder hab ich übersehen?