Forum: Mikrocontroller und Digitale Elektronik C - Zeit zwischen zwei Timerwerten berechnen?


von VHzA (Gast)


Lesenswert?

Wenn der Zähler aufwärts läuft und die Werte "Früher" und "Später" 
bekannt sind - was ist der geschickteste Weg, die Differenz zu ermitteln 
(C)?
von Paule (Gast)


Lesenswert?

Ganz einfach: Wenn später früher als früher ist, dann ziehst Du später 
von früher ab ansonsten früher von später.
Es kann auch ratsam sein, mitzuzählen wie oft der Zähler überläuft.
von i++ (Gast)


Lesenswert?

Wenn du unsigned Arithmetik benutzt kannst du eigentlich immer b - a 
rechnen, wobei b der "neuere" Wert ist. Überläufe sind dann kein 
Problem:

Z.B.


volatile uint32_t Ticks;

// Ticks wird inkrementiert
void delay_ms(uint32_t delayMs)
{
   uint32_t startTick = Ticks;
   // Ueberlauf sicher durch unsigned wrap
   while ((Ticks - startTick) < delayMs);
 }

// SysTick->VAL wird dekrementiert
void delay_us(uint32_t delayUs)
{
   uint32_t delayTicks = delayUs * 168;
   uint32_t startTick = SysTick->VAL;
   // Ueberlauf sicher durch unsigned wrap
   while ((SysTick->VAL - startTick) > delayTicks);
}
von i++ (Gast)


Lesenswert?

Sehe gerade das zweite Beispiel ist falsch.
von VHzA (Gast)


Lesenswert?

i++ schrieb:
> Wenn du unsigned Arithmetik benutzt kannst du eigentlich immer b - a
> rechnen, wobei b der "neuere" Wert ist. Überläufe sind dann kein
> Problem:

Danke!
von b-a (Gast)


Lesenswert?

Kurz zusammengefaßt:
Um die Differenz zwischen zwei Timerwerten zu ermitteln, berechnet man 
die Differenz zwischen neuerem und älterem Wert. Korrekt?
von i++ (Gast)


Lesenswert?

Ja die unsigned Differenz funktioniert aber nur mit unsigned und nur 
wenn der Counter nicht nachgeladen wird. Also wenn der Timer den 
gesamten Wertebereich des Datentypes ausnutzt und dann wieder auf 0 
wrappt.

Z.B. 0 - 0xFF
     0 - 0xFF
     ...

bei 8 Bit.

Hier ist das nochmal etwas besser erklärt.
http://www.thetaeng.com/TimerWrap.htm
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.