mal abgesehen davon.
Ich will dich ja nicht bevormunden, aber
1 | t=(TCNT1)*32; //Eine inkrementierung des Timers entspricht 32us
|
2 | if((t>316)&&(t<=526)
|
da in TCNT1 nur eine ganze Zahl stehen kann, kann daher t nur ein
ganzzahliges Vielfaches von 32 sein. Das Ergebnis kann daher gar nicht
zb 317 sein, da 317 kein Vielfaches von 32 ist. Die nächst kleinere
Zahl, die bei der Multiplkation entstehen kann, ist 288. Dann kommt
lange nichts und die nächste größere Zahl, die entstehen kann ist 320.
(das eine mal hat TCNT1 den Wert 9 und das andere mal den Wert 10). Alle
Werte zwischen 288 und 320 können überhaupt nicht auftreten. Das ist
mathematisch überhaupt nicht möglich.
Jetzt muss man sich aber fragen: was bringt mir dann eigentlich die
Multiplikation mit 32?
Und die Antwort drauf lautet: Überhaupt nichts. Gar nichts.
Denn ob du
1 | t=(TCNT1)*32; //Eine inkrementierung des Timers entspricht 32us
|
2 | if((t>316)&&(t<=526)
|
schreibst, oder ob du
1 | t= TCNT1;
|
2 | if( (t > 9) && (t < 17)
|
schreibst, kommt wegen des eingeschränkt möglichen Wertebereichs aufs
selbe raus.
Mit einem kleinen Unterschied, der mglw. entscheidend sein kann. Das
Eregbnis der Multiplikation mit 32 kann dir unter Umständen, wenn der
TCNT1 Wert hoch genug wird, den Zahlenbereich eines int16_t sprengen. Ab
dann rechnest du dann mit falschen Werten weiter.