mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [AVR] Wie ausbleiben eines Interrupts erkennen?


Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich messe mit ATMega8 und ICP ein pulsbreitenmoduliertes Signal. Dabei 
möchte ich aber auch erkennen wenn das Eingangssignal ausbleibt. 
Momentan bleibt das zuletzt gemessene Ergebnis einfach stehen, was mir 
meine Messung versaut.
Da die Pulsbreite teilweise recht stabil ist, kann ich nicht einfach auf 
"aktuell <> alt" vergleichen.

Ich könnte natürlich einen Interrupt-Zähler einbauen und periodisch 
nachschauen ob er inkrementiert, das bedeutet aber mehr Zeit in der ISR 
und in main() und eine zusätzliche Variable.

Gibt es andere Möglichkeiten?

Die Frage ist eher akademisch, weil ich genügend Platz und Zeit in 
meinem Programm habe, aber es interessiert mich trotzdem.

Michael

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer aufziehen und im Int zurücksetzen. Wenn Überlauf --->

So wird's üblicherweise gemacht.

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bensch schrieb:
> Timer aufziehen und im Int zurücksetzen. Wenn Überlauf --->

Danke für Deine Antwort, ich vergaß zu schreiben daß bereits alle 3 
Timer benutzt sind.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt ganz drauf an, was Du machen willst bzw machst.
Oft kann man durch geschickte Programmierung mehrere Timer zu einem 
zusammenfassen (es gibt zum Beispiel einen Overflow- sowie zwei 
Compare-Interrupts). Mal so eine Idee.

Speziell, wenn man lange Wartezeiten hat, kann man den Timer auch 
schnell laufen lassen und dann in der INT-Routine noch einen 
Software-Timer mitzählen. Somit kann man gleich mehrere Compare-Punkte 
einbauen.

Autor: R. Freitag (rfr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das Signal als ganzes wegbleibt und du das feststellen willst, 
kannst du das mit einem ADC.

Gruss

Robert

Autor: I. E. (anfaenger69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Interrupt könnte auch einen Watchdog zurücksetzen. Beim Ausbleiben 
gibts es einen Reset und Du kannst am Anfang vom main() erkennen, ob es 
ein Hardware reset oder Watchdog reset war.

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für alle Antworten. Ich werde mir mal überlegen was in meiner 
Applikation die sinnvollste Lösung ist.

Michael

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
> Danke für alle Antworten. Ich werde mir mal überlegen was in meiner
> Applikation die sinnvollste Lösung ist.
>

> Danke für Deine Antwort, ich vergaß zu schreiben daß bereits alle 3
> Timer benutzt sind.

Und denk dran, dass es kein Naturgesetz gibt, nach dem es verboten ist, 
in der ISR eines Timer-Events mehere Funktionalitäten unterzubringen.

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.