Hallo Ihr Beiden
Code:
while ( !(TIFR & (1<<ICF1 )) ) ; // Warten bis Echo-Puls Ausgang auf low --> Messung beendet
Diese Zeile macht die Verwendung des Timers sinnlos.
Viel wichtiger ist aber, das ihr nie den Timer Wert löscht, oder vorher auslest.
Bein Input Capture wird ja nur der aktuelle Wert weg geschrieben nach ICR1, aber nicht gelöscht.
Ihr müsst also entweder beim Start der Messung TCNT1 löschen, oder auslesen, speichern in einer Variablen und spater von ICR1 abziehen.
Geschickt wäre es das Ende der Messung mit dem Timer/Counter1 Capture INT auszuwerten.
Also starten der Messung, Timer1 Wert speichern, auf INT warten, ICR1 - alten Timer Wert und dann berechnen.
MFG
Dieter
Lesezeichen