www.mikrocontroller.net

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


Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.