Moin.

Mal wieder ein Problem, deren Lösung an einem Denkfehler scheitert.

Bei nem ATMega2560 läuft Timer1 zur Aufbereitung der Uhrzeit
(Config Timer1 = Timer , Prescale = 1024:Timer1 = 49910).

Nun soll (ohne einen weiteren Timer zu verwenden) die Zeit zwischen
Impulsen gemessen werden, die an INT0 ankommen. Es geht nicht darum,
dass die Zeit auf ms/µs exakt bekannt ist, sondern es muss lediglich eine Entscheidung getroffen werden, ob der Impuls länger als ca. 1 sec ausbleibt.

Da bis jetzt schon einige Programmversuche eher für die Tonne waren, wollte ich jetzt mal die Denkweise hier prüfen lassen, ob ich überhaupt richtig vorgehe:


Timer Läuft, zählt hoch, springt bei Überlauf (1-sec-Takt) zur ISRTimer1.
INT0 reagiert auf Pegelwechsel und springt dabei zu ISRINT0.

Bei jedem ISRTIMER1 wird u.a. ÜBERLAUF um 1 erhöht.

Erfolgt INT0, wird folgendes gemacht:
T1 = Timer1 (aktuellen zählstand zuweisen)
T2 = T1 (Alten Zählerstand sichern)
ÜBERLAUF = 0 (Anzahl Überläufe seit letztem INT0 löschen).

Die Berechnung der Dauer müsste dann so erfolgen:
x = ABS(T1-T2) + ÜBERLAUF * (65535-49910),
also Differenz der beiden Timer + Überlauf-Blöcke.
Die Zeit ist dann die Anzahl der Takte, also Zeit = x * 0,064 ms

Stimmt die Annahme soweit?

MfG
S.C