mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Input Capture mit Überlauf / Interrupt-Priorität


Autor: Johannes R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebes Forum,

ich habe ein kleines Problem. Es geht darum, dass ich den Input Capture 
nutzen möchte, dabei aber ja überläufe des Counters stattfinden können.
Beispiel:
ein Event passiert bei Zählerstand 0xE000 (16-Bit Timer Counter des 
ATMega48) und das Nächste bei 0x0100.
Nun es ist also anzunehmen, dass in der Zwischenzeit mindestens ein 
Überlauf stattgefunden hat... nicht gerade hilfreich diese Info.

Zur Lösung würde ich also im Overflow-Interrupt einen Zähler laufen 
lassen, der bei jedem Capture-Event genullt wird. Dann hätte ich eine 
präziese Zeitmessung.
Aber dann habe ich ein neues Problem: der Grenzfall.
ein Capture-Event passiert genau synchron mit dem Overflow. Der 
Capture-Zähler gibt dann vermutlich 0x0000 aus, doch mein 
Overflow-Counter?!
Zählt der jetzt noch eins weiter? oder Zählt er erst nach dem 
Capture-interrupt weiter, was dann die folgende Messung ebenfalls 
verfälschen würde!?


Welche Ansätze gibt es um dieses Problem zu lösen?

Wäre es sinnvoll den Counter bei jedem Capture zu nullen (prescaler ist 
übrigends 256)? Während den ersten 256-Prozessortakten dürfte das ja zu 
keinen Verlustein in der Genauigkeit der Messung führen, oder?


Vielen Dank
MfG
Johannes R.

Autor: ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man Input Capture mit Overflows nutzt, kann es bei dem 
beschreibenen fast gleichzeitigen Auftreten passieren, dass der Overflow 
interrupt zu spät ausgeführt wird (zu früh kommt nicht vor). Man kann 
diesen Fall aber in der ISR zum ICP erkennen und korrigieren:
Wenn da noch ein overflow Interrupt aussteht der vor das ICP Event 
gehört, ist das Overflow interrupt-flag gesetzt, und der Zahlen Wert im 
ICP Register ist klein. Bei gesetztem Overflow Flag sind nur sehr kleine 
oder sehr große Werte Möglich, halt maximal die Zeit die ein Interrupt 
blockiert war.

Bei einem Vorteiler von 256 kommt ein Overflow ja nicht besonders häufig 
vor, kaum mehr als 1 mal die Sekunde.

Den Zähler braucht man zum Start nicht zurücksetzen, auch wenn es bei 
einem großen Vorteiler wohl gehen sollte. Es ist einfacher sich die 
Startzeit zu merken und dann abzuziehen.

Autor: Johannes R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ulrich,

ulrich schrieb:
> Wenn man Input Capture mit Overflows nutzt, kann es bei dem
> beschreibenen fast gleichzeitigen Auftreten passieren, dass der Overflow
> interrupt zu spät ausgeführt wird (zu früh kommt nicht vor)

Warum? hat der AVR etwa doch irgend eine Interruptpriorisierung?

> Wenn da noch ein overflow Interrupt aussteht der vor das ICP Event
> gehört, ist das Overflow interrupt-flag gesetzt, und der Zahlen Wert im
> ICP Register ist klein.

Das ist natürlich auch richtig. Nur: Wie liest man Interrupt-Flags aus?
löschen tut man sie ja paradoxer weise durch überschreiben mit 1. Wie 
liest man die aus? 0 bedeutet ausstehender Interrupt?

Ganz am Rande gefragt. Bei AVRs wird kein Interrupt einen anderen 
unterbrechen, oder? D.h. der Overflow-Int. kann den ICP-Int nicht 
unterbrechen?!

> Es ist einfacher sich die
> Startzeit zu merken und dann abzuziehen.

Da grübel ich gerade sogar drüber ob das tatsächlich einfacher ist?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes R. schrieb:
> Warum? hat der AVR etwa doch irgend eine Interruptpriorisierung?

Wenn mehrere Interruptflags gesetzt sind, wird der mit der niedrigeren 
Nummer (in der Interrupt-Tabelle) zuerst ausgeführt.

> 0 bedeutet ausstehender Interrupt?

Nein, 1.

> Ganz am Rande gefragt. Bei AVRs wird kein Interrupt einen anderen
> unterbrechen, oder? D.h. der Overflow-Int. kann den ICP-Int nicht
> unterbrechen?!

Nicht solange du es nicht selber explizit erlaubst.

>> Es ist einfacher sich die
>> Startzeit zu merken und dann abzuziehen.
>
> Da grübel ich gerade sogar drüber ob das tatsächlich einfacher ist?

Ist einfacher, funktioniert aber nicht bei mehr als einem Overflow 
dazwischen.

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.