Timer Reload und Alte Werte.

Gast #3996114
Lesenswert?

Hi!

Ich möchte auf meinem MSP Hall-Sensorwerte verarbeiten und habe 
folgendes Problem:

Ich möchte mit einem Freilauftimer bei jeder Sensorflanke den Aktuellen 
Timerwert nehmen und von dem anschließend den vorherigen Wert abziehen. 
Funktioniert ja bis auf den Fall des Reloads ganz gut. Nur sobald ich 
einen Wert von vor dem Reload und einer nach dem reload habe, ist mein 
Delta kaputt...

Hat da jemand eine elegante Lösung parat um das "Anfängerproblem" in den 
Griff zu bekommen?
#3997365
Lesenswert?

MaMü schrieb:
> Ich habe ja den Timer mit Autoreload laufen aber wenn dieser wieder
> zurück auf Null geht und meine Alten Werte noch im oberen Zählerbereich
> des Timer sind und die neuen im unteren Zählerbereich, da kommt es zu
> Problemen da die neuen Werte ja kleiner als die alten sind....

Das ist aber kein Problem. Wenn du sie subtrahierst, kommt trotzdem das 
richtige raus. Das gilt natürlich nur, solange der Timer zwischen den 
beiden Werten nicht mehr als einmal überläuft.

Beispiel in 8 Bit:

1. Messung: 200
2. Messung: 100
100 - 200 = -100 -> ist aber vorzeichenlos nicht darstellbar. Deshalb 
kommt in 8 Bit stattdessen 256 - 100 = 156 raus.
Von 200 bis zur 0 nach dem Überlauf braucht es 56 Zyklen, dann nochmal 
100 Zyklen bis zum 2. Messwert, ergibt 156 Zyklen, also genau das 
Ergebnis, das rausgekommen ist. Das kannst du mit jeder Kombinatin 
probieren, bei der das korrekte Endergebnis vom Wertebereich des 
Datentyps dargestellt werden kann, und es wird immer das richtige 
rauskommen.
Gast #3997387
Lesenswert?

Hi und danke für die ausführliche Antwort!

Wenn das so ist, muss ich wohl irgendwo anders einen Fehler haben :-(

Ich hab genau das Phänomen dass in zeitlicher Abhängigkeit der 
Umdrehungsgeschwindigkeit für eine Umdrehung meine ganzen Werte total 
von dem Rest abweichen. Diese sinken dann kurzzeitig total in den 
negativen Bereich( ist ein signed int) Daher hätte ich gedacht dass ich 
da den Reload sehe...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren