Gast
#859942
Wie ließe sich dies mit einem 8Bit Timer realisieren? Taktfrquenz: 4MHz
|
Anzeige
|
Milliesekunden seit einem bestimmten Zeitpunkt messen
Gast
#859942
Wie ließe sich dies mit einem 8Bit Timer realisieren? Taktfrquenz: 4MHz
Gast
#859949
nimm doch den int eingang und schalte beim interrupt den timer an näheres gibt im tutorial
Gast
#859961
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.
Gast
#859993
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.
Gast
#860069
Es ist ein ATMega8. 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.
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|