PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie Compare Register Werte sicher ändern?



Werner_Just
22.04.2005, 14:29
Hallo,

vielleicht denke ich auch einfach zu kompliziert...

Ich muß zu einem bestimmten Zeitpunkt eine Aktion auslösen. Also Lade
ich den Zeitpunkt in das Compare-Register meines Timers und wenn der
entsprechende Interrupt ausgelöst wird führe ich meine Aktion aus.
Soweit so gut.

Ich hab nun den Fall, daß ich den Zeitpunkt nicht genau bestimmen kann,
ich muß ihn schätzen. Die Schätzung wird immer besser, je näher ich dem
Ereignis komme. Die Schätzung kann aber sowohl zu früh, wie auch zu
spät sein. Die Zeit die ich für das Schätzen brauche ist zudem nicht
konstant.

Es kann mir also passieren, das ich in der ersten Schätzung a + 100
Takte schätze und in der zweiten Schätzung a - 25 Takte.

Wenn sich der Zähler nun beim Ändern des Compare-Registers im Bereich
von a-25 bis a-100 Takte befindet, springe ich quasi über den
Compare-Match hinaus und verpasse sowohl die "gute" wie die
"schlechte" Schätzung .

Kann ich das irgendwie verhindern?

Controler ist ein AVR M32.
Zähler ist der Timer1, erweitert auf 32bit.
Der Zähler ist frei laufend, d.h. höherer Zählerstand heißt nicht, daß
es auch "später" ist.
Sprache ist BASCOM gemischt mit Assembler.

Ich hab zudem auch noch andere Interrupts laufen, die nur kurz
verzögert werden dürfen. Am besten garnicht. Am liebsten würde ich das
daher realisieren ohne während der Überprüfung und Änderung die
Interrupts komplett sperren zu müssen.

Ich hoffe mein Problem ist klar geworden und jemand hat einen Tip
dazu.

Ciao,
Werner