mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nach Interrupt-Routine lange Pause!?


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ist das nromal wenn eine Interrupt-Routine beendet wird (mit reti) das
es lange dauert bis der Controller zum Hauptprogramm zurück springt?
Bei mir ist das nämlich der Fall, wenn der Hardwareinterrupt (ATmega16
@16MHz) ausgelöst und abgearbeitet wurde, dauert es ca. 1 Minute bis
das Hauptprogramm wieder ausgeführt wird.

Autor: Gerd Laschinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen,

das ist nicht normal. Du mußt aber schon ein wenig mehr schreiben, wenn
Du Hinweise haben möchtest.

Gruß
Gerd

Autor: nooooooooooob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne eigentlich ist das sogar ziemlich unnormal! was genau ist dein Prob?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich frage im HP Bitzustände am PORTC ab und gebe dementsprechend
Meldungen auf einem LCD aus.
Der Hardwareinterrupt wird durch ein Funksignal ausgelöst. Dadurch wird
dann ein Bit an PORTx auf High gesetzt und eine Meldung am LCD
erscheint, danach wird das LCD gelöscht und die Routine mit "reti"
beendet.
Normalerweise sollten doch sofort wieder am PORTC die Zustände
abgefragt werden, aber das LCD bleibt für ca. 1 Minute leer. Erst
danach läuft wieder alles wie gehabt.

.org 0x0000
rjmp Main
.org INT0addr
rjmp ZV

Das ist doch so korrekt oder?

Autor: Daniel R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste mal deinen Code, dann können wir dir besser helfen.
Ich tippe auf einen Fehler in der Routine, wo das LCD gelöscht wird.
Vielleicht ret vergessen oder so??? Was anderes kanns eigentlich nicht
sein. Ein Interrupt is schneller als die Polizei erlaubt...der geht
keine Minute.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also den Code posten wäre wahrscheinlich zu unübersichtlich. Der ist
nämlich sehr lang.
Liegt das vielleicht an den Vektoren (siehe Seite 43 Datenblatt)?

Autor: Gerd Laschinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen,

natürlich kann das an den Vektoren liegen. Aber wenn Dein Code sehr
lang und sehr unübersichtlich ist, dann liegt es vermutlich an Deinem
Code.
Hast Du schon mal etwas mit Interrupts programmiert? Wenn nein, dann
schreib doch mal ein ganz einfaches und kurzes Programm, was ein
Hauptprogramm und eine Interruptroutine beinhaltet. Vielleicht erkennst
Du dann was.

Ich kann Dir jedenfalls mit Deinen sehr spärlichen Angaben nicht
weiterhelfen. Und ein ewig langes Programm mag ich auch nicht lesen.

Gruß
Gerd

Autor: Frank Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffen ,

hast du deinen Fehler gefunden ?
Wenn ja, was war denn das Problem ...

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ist das der einzige Int. der da läuft?
Es klingt jedenfalls wie Stackfehler. Irgendwas gesichert und nicht
zurückgeschrieben? Stack initialisiert? ISR falsch verlassen?....
Leider kannst du uns dein Prog ja nicht zeigen, weshalb unsere Hilfe
auch nur Vermutung sein kann.

MFG Uwe

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Kristallkugel sagt:

Du hast vergessen das Interruptbit zu löschen und dann wird immer nur
ein Befehl des HP und ständig der Interrupt ausgeführt.


Peter

Autor: Frank Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das ?
Mit RETI wird doch der Betreffende Interrupt gelöscht oder ?

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Interrupt Flag durch RETI gelöscht wird und welches nicht wird
bei den einzelnen Prozessortypen ziemlich unterschiedlich gehandhabt.
Am besten das Datenblatt ausführlich zu diesem Thema durchlesen und
zwar zu allen im Programm benutzten Interrupts.

Dieter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Mit RETI wird doch der Betreffende Interrupt gelöscht oder ?"

RETI löscht garnichts !

Manche Interrupts werden mit Einsprung in den Interruptvektor gelöscht
und manche müssen manuell gelöscht werden, steht aber im Datenblatt bei
jedem Interruptbit mit dabei.


Peter

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.