PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage Timer



RalfP
23.05.2006, 18:07
Hallo.
Ich möchte mit Timer3 eines Mega128 der mit externen, quarzgenauen 4MHz getaktet wird die exakte Zeit zwischen zwei Signalen messen.
Die Zeit zwischen zwei Signalen kann im Bereich zwischen 4,5sec und 18msec variieren.
Irgendwie muß ich wohl mit Capture arbeiten, aber wenn ich ehrlich bin hab´ ich null Durchstieg wie die Timer genau funktionieren.
Hoffentlich kann mir von Euch jemand verklickern wie ich mein Problem lösen kann (und das wenn möglich auch noch mit Bascom und evtl. ein paar inline ASM-Anweisungen).

Bitte helft einem Anfänger, ein Durchsteiger zu werden. Ich zähle auf Euch.

Danke schon mal.

Gruß RalfP

Vitis
23.05.2006, 19:47
Die Timer der AVRs kann man für verschiedene Funktionen benutzen.
Die Funktion die Du benötigst ist der Counter.
Counter = Zähler
Der Zähler macht genau das, was der Name sagt, er zählt.
Was zählt er?
Er zählt Impulse. Die Impulse können auf den Zähler aus verschiedenen
Quellen kommen. Von außen über einen Pin oder von innen aus dem Quarz.
Die von Dir benötigte Funktion braucht seinen Takt (Impuls) vom Quarz,
damit der Zähler immer gleich schnell taktet (zählt).
Man kann den Zähler starten, stopen und auch zurücksetzen auf 0.
Deine Anwendung sieht also wiefolgt aus,
Du setzt den Zähler auf 0,
beim ersten Impuls startest Du den Zähler, beim nächsten Impuls
liest Du den Zähler aus, gibst das Ergebniss aus und Stopst den Timer.

RalfP
24.05.2006, 08:24
Hallo Vitis.
Vielen Dank erst mal, daß Du mir geantwortet hast.
Diesen Ansatz habe ich auch schon mal durchdacht, dann aber wieder verworfen, da mir so jede zweite Pause zwischen zwei Impulsen verloren geht (vermute ich).
Ich mutmaße, daß es für meinen Zweck besser wäre den Timer durchlaufen zu lassen und beim Auftreten eines Impulses vom aktuellen Zählerstand den zuvor gespeicherten Zählerstand (vom Auftreten des vorigen Impulses) abzuziehen und so die Zeit zu berechnen (Überläufe des Zählers müssen natürlich mit in die Berechnung einfließen).
Um das Offset, das beim Sprung in eine ISR auftritt, auszugleichen soll es eine Möglichkeit mit dem Compare geben (hab ich mal irgendwo gelesen).
Sollte ich in eine falsche Richtung denken, lass ich mich gerne eines besseren beleren.

Gruß RalfP

Vitis
24.05.2006, 09:49
davon haste auch nicht geschrieben, das zwischen allen Impulsen
gemessen werden soll.
Dann einfach Timer starten und bei jedem Impuls auslesen
und rücksetzen.
Den Compare kannste dann benutzen für
Watchdog, sprich Overflow
oder ne Overflowvariable hochzählen

jeffrey
24.05.2006, 11:15
hi,
wie lang sind denn deine impulse, und welche auflösung benötigst du denn?
du kannst auch einfach den timer laufen lassen, und bei jedem überlauf gucken, ob ein impuls da ist.
mfg jeffrey