Forum: Mikrocontroller und Digitale Elektronik Milliesekunden seit einem bestimmten Zeitpunkt messen


von Alan (Gast)


Lesenswert?

Wie ließe sich dies mit einem 8Bit Timer realisieren? Taktfrquenz: 4MHz

von gast (Gast)


Lesenswert?

nimm doch den int eingang und schalte beim interrupt den timer an
näheres gibt im tutorial

von Alan (Gast)


Lesenswert?

Nicht über nen Taster. Meinetwegen auch die Millisekunden seit den Reset 
messen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

8-bit Timer bei 4 MHz und 1 Millisekunden Auflösung ist eine schlechte 
Auswahl.

Die verschiedenen AVR-CALC Tools zur Berechnung günstiger 
Prescaler-Werte und TCNT-Reload-Werte spucken immer nur krumme Zahlen 
aus.

Rechnerisch genaue Millisekunden (ohne Beachtung der Quarzungenauigkeit) 
sind bei diesen Vorgaben mit dem 16-Bit Timer möglich.

von Alan (Gast)


Lesenswert?

Und dieser ist schon mit der PWM-Steuerung beauftragt.

von Daniel K. (Firma: zjevp) (daniel-k)


Lesenswert?

Hmm, ich weiss jetz nicht welchen Controller du hast, aber zumindest die 
Atmega16 und -32 können an Timer2 auch mit einer externen Taktquelle 
betrieben werden.
Da könntest Du dann einen 1kHz Quarz dranhängen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kann dein 8-bit-Timer denn CTC (clear timer on compare match) oder
sowas?

Was für ein Controller ist es überhaupt?

von Peter D. (peda)


Lesenswert?

Wo ist denn das Problem, kannst Du das nicht ausrechnen?

Du mußt 4e6 * 1e-3 = 4000 Zyklen verbraten, z.B.:

Prescaler 1:8, Clear on Compare mit 249 und im Interrupt ne Variable bis 
2 zählen, fertisch.


Peter

von Martin L. (melvin_the_moose)


Lesenswert?

Was ist denn der "bestimmte Zeitpunkt"?

Externes Ereignis (Signalflanke): -> Input Capture (Int-Eingang geht 
nur, wenn das System ohne Interruptsperren betrieben wird, sonst geht 
eine unbekannte (?) Anzahl Zyklen verloren)

Internes Ereignis (Software setzt den Startzeitpunkt): -> Output Compare 
Interrupt

Wie genau muß die Messung sein?
Kann die Messung einige Prozent abweichen? Dann kann man den Prescaler- 
und OC-Wert evtl. einer anderen Aufgabe (PWM?) unterordnen.
Oder darf die Abweichung die Quarzungenauigkeit nicht übersteigen? Dann 
sind Prescaler und OC-Wert so zu wählen,  daß der OC-Interrupt eben 
exakt in 1/n ms (n ganz) periodisch zuschlägt, so daß durch zählen der 
Interrupts und Teilen durch n die Zeit in ms ermittelt werden kann.

von Alan (Gast)


Lesenswert?

Es ist ein ATMega8.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Alan wrote:

> Es ist ein ATMega8.

Dessen Timer 0 ist ziemlich blöd und kann kein CTC.  Timer 2 kann es
aber, damit könntest du einen Prescaler von 8 wählen und OCR2A auf
250 setzen.  Wenn du die zugehörigen Interrupts auswertest, hast du
mit jedem zweiten Interrupt einen Millisekundentakt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.