Hallo,
wir arbeiten auf einem easypic v7 board mit einem pic 18f4520 und haben
Probleme bei der Addition von float Werten.
Konkret soll eine Zeitmessung über einen Interrrupt an einem Port
stattfinden. Da die Zeitmessung über den TimerInterrrupt maximal 8,3s
läuft, speichern wir die Anzahl der Überlaufe in der
Interruptserviceroutine. Der Timer funktioniert soweit und sowohl der
einzelne gemessene Wert im Timer, als auch die Anzahl der Überlaufe sind
korrekt.
Wenn wir jetzt die Anzahl der Überlaufe mit der Zeitkonstante
multiplizieren und den Timermesswert zu dieser Zahl addieren wollen,
hängt sich das Programm bei der Addition auf.
1 | unsigned int TimerValue;
|
2 |
|
3 | float TimeConstant = 8.388608f; //Zeitkonstante für TimerInterruptÜberlauf
|
4 | float TimeBetweenEdge = 0.0f; //Zeit zwischen zwei Interruptflanken
|
5 |
|
6 | float TempTimer1 = 0.0f;
|
7 | float TempTimer2 = 0.0f;
|
8 |
|
9 | TimerValue = TMR0L; //Aktuelle Zeit im Timer
|
10 | TimerValue += TMR0H << 8;
|
11 | TempTimer1 = (TimerValue / 65535.0f) * TimeConstant;
|
12 |
|
13 | TempTimer2 = (float)TimeCount * TimeConstant; //Zeit der Überlaufe
|
14 |
|
15 | TimeBetweenEdge = TempTimer1 + TempTimer2 ; //geht nicht
|
Hat jemand eine Idee warum die zwei float Werte nicht addiert werden
können?