Wie ließe sich dies mit einem 8Bit Timer realisieren? Taktfrquenz: 4MHz
nimm doch den int eingang und schalte beim interrupt den timer an näheres gibt im tutorial
Nicht über nen Taster. Meinetwegen auch die Millisekunden seit den Reset messen.
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.
Und dieser ist schon mit der PWM-Steuerung beauftragt.
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.
Kann dein 8-bit-Timer denn CTC (clear timer on compare match) oder sowas? Was für ein Controller ist es überhaupt?
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.