Forum: Mikrocontroller und Digitale Elektronik Wie "CompareWerte" sicher ändern


von Werner (Gast)


Lesenswert?

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

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.