www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik interupt aber wann?


Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,
kann mir jemand die Frage beantworten:
bei welchen Fällen sollte Interupt unbedingt gebrauchen ??

danke euch

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn zeitkritsche Dinge ablaufen sollen. In der Interupt-Routine wird 
das notwendigste hineingepackt, und außerhalb der Interupt-Routine 
weitere Folgeaktivitäten

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt mehrere Fälle (Liste unvollständig):

- wenn sofortige Reaktion nötig ist (Aktion mit möglichst
  kurzer Verzögerung für z.B. Registersicherung)

- wenn Aktionen unabhängig vom Hauptprogramm ablaufen sollen
  z.B. RS232 senden/empfangen mit Buffer, Timeranwendungen

- Ereignisse erkannt werden sollen, die man im Hauptprogramm
  nicht pollen kann, z.B. Signalwechsel

- zum Aufwecken aus Stromsparmodi wie PowerDown

Oft wird in einem Interrupt auch nur ein Flag für das
Hauptprogramm gesetzt und dann in der Main reagiert.

gruß hans

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hans schrieb:
...
> - wenn sofortige Reaktion nötig ist (Aktion mit möglichst
>   kurzer Verzögerung für z.B. Registersicherung)
...

Wie meinst Du das???

Gruß aus Berlin
Michael

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- wenn Ereignisse von aussen "every now and then" eintreten, würde das 
ständige Pollen zu viel Zeit kosten, z.B. der UART in einer Applikation 
(Kommunikation, Terminal IO).

VG,
/th.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine oder mehrere Timer-ISR im Hintergrund laufen zu haben, die sich um 
eingehende Ereignisse kümmern, und das Hauptprogramm über Flags 
informieren, wenn es etwas zu tun gibt, ist ein erprobtes Konzept für 
übliche Mikrocontroller-Anwendungen.

Oliver

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Eine oder mehrere Timer-ISR

Das gilt nicht nur für Timer...

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Ich glaube, am Timer kann man sehr gut ein Beispiel Pollen- Interrupt 
setzen.
Es gibt im MC ein Zählregister, welches unabhängig vom Programm 
incrementiert oder decrementiert wird. Es hängt einfach am Takt.
Mit diesem Zählregister lassen sich nun Timer programmieren, da der Takt 
bekannt ist und man nun einfach ein paar Takte abwarten muß, um nun 1 ms 
oder ein paar Takte mehr Minuten oder Stunden zu setzen.
Nun wissen wir, das ein Programm für die Bearbeitung eine Anzahl an 
Takten benötigt. Je nach Umfang und Verzweigungen innerhalb der 
Programmstruktur dauert ein Zyklus nun unterschiedlich lange, bis ein 
Programm wieder eine bestimmte Stelle erreicht. Anfang, Mitte, Ende, 
egal, den Aufruf, den ich bräuchte, um eine Anzahl an Zählimpulsen zu 
erkennen und die ms oder Stunde entsprechend zu erhöhen. Meine "Uhr" 
würde relativ schnell aus dem Ruder laufen.
Nun kommen wir zum Interrupt. Es ist eine Unterbrechung des laufenden 
Programmes, um einen bestimmten Programmabschnitt zu bearbeiten. In 
unserem Fall würden wir einen Zähler vorbesetzen und ihm sagen laufe 
mal rückwärts gegen Null. Wenn der Zählerstand 0 ist, löse einen 
Interrupt aus. Dies geschieht, indem innerhalb des Prozessors ein Flag 
gesetzt wird und den Prozessor zwingt, eine bestimmte Stelle im Programm 
anzuspringen. Die sogenannte Interruptvektoradresse. Dort steht dann 
meist ein Reti oder eben ein Sprung zur Serviceroutine, also meinem 
eigentlichen zeitkritischen Programmteil.
Im Interrupt wird folgendes getan:
Zuerst werden die Register die innerhalb der Interruptroutine benötigt 
werden zwischengespeichert. Also Push Register.
Dies ist notwändig, weil niemand sagen kann, ob der Wert innerhalb des 
Registers im Programm nicht noch benötigt wird.
Anschließend aktualisiere ich die Zeitwerte und schreibe in den Zähler 
erneut den Startwert, ab welchem wieder heruntergezählt wird.
Ist meine Bearbeitung beendet, werden über Pop die Registerwerte 
zurückgeschrieben, in umgekehrter Reihenfolge, wie Push diese abgelegt 
hat . Stichwort "FILO" First in - last Out.
Zuletzt erfolgt der Rücksprung RetI zurück vom Interrupt. Dieses I ist 
wichtig, weil es das Interruptflag löscht.
So könnte eine solche Routine aussehen:
Zähler mittels Vorteiler so einstellen, das alle ms ein Interrupt 
erfolgt.
My_Clock: Push R18    ;Register 18 Wert auf Stack ablegen 1. Wert
          Push R19    ;                                   2.Wert
          LDS  R18, ms0; Speicherzelle ms*1
          Inc  R18
          CPI  R18, 10
          BREQ ms0_Next
          STS ms0, R18
          RJMP ende
ms0_Next: CLR R18
          STS ms0, R18
          LDS R18, ms1; Speicherzelle ms*10
          INC R18
          CPI  R18, 10
          BREQ ms1_Next
          STS ms1,R18
          RJMP ende
ms1_Next: CLR R18
          STS ms1, R18
          LDS R18, ms2; Speicherzelle ms*100
          INC R18
          ....
ende:     POP R19     ; 2. Wert vom Stack holen
          POP R18     ; 1. Wert vom Stack holen
          RETI        ; zurück vom Interrupt zum Hauptprogramm

Ich hoffe, das machts deutlich.

Gruß oldmax

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

Bewertung
0 lesenswert
nicht lesenswert
Oder um mal ein anderes, nicht µC-bezogenes, Beispiel zu bringen.

Da gibt es einen Arzt. Der ist viel unterwegs.
So alle 2 Stunden, plus minus ein paar Zerquetsche, kommt er wieder in 
seiner Praxis vorbei und hört den Anrufbeantworter ab, ob irgendetwas 
vorgefallen ist.
-> Er betreibt Polling.
Jetzt kann es natürlich sein, dass 5 Minuten nachdem er seine Praxis 
verlässt, einen Hilferuf auf den Anrufbeantworter bekommt, dass seine 
Hilfe bei einem Herzinfarkt notwendig wäre.
Folge: Da er erst 2 Stunden später den Hilferuf mitbekommt, wird es wohl 
zu spät sein, darauf zu reagieren.

Jetzt ist der Artzt aber ein Schlauer. Er hat auch einen Pieper dabei. 
Der Patient ruft auf seinem Pieper an, er interrupted (unterbricht) also 
den Artzt in seiner momentanen Tätigkeit und der Arzt eilt dem Patienten 
sofort zu Hilfe.

Weder das eine, noch das andere ist ein Allheilmittel.
Nur Polling würde bei Notfällen zu spät kommen oder aber er müsste alle 
2 Minuten in seiner Praxis vorbeischauen um nur ja nichts Wichtiges zu 
verpassen. Und wenn auf der anderen Seite der Arzt ständig wegen jeder 
Kleinigkeit unterbrochen würde, so hat das auch keinen Sinn.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr schön, Karl Heinz!

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sehr schön, Karl Heinz!

Das sage ich auch. Er kann Vorgänge so schön plastisch darstellen.

@Karl-Heinz
Ich glaube, es ist schon einmal gesagt worden: Gib ein Buch über
Mikrocontrollerprogrammierung in diesem Stil heraus und die
Leute reißen es Dir aus den Händen.

MfG Paul

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

Bewertung
0 lesenswert
nicht lesenswert
Paul Baumann schrieb:

> Ich glaube, es ist schon einmal gesagt worden: Gib ein Buch über
> Mikrocontrollerprogrammierung in diesem Stil heraus und die
> Leute reißen es Dir aus den Händen.

Da bin ich zu faul dazu:-)
Aber danke für die Blumen.

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.