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


von Steffen (Gast)


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.

von Gerd Laschinski (Gast)


Lesenswert?

Hallo Steffen,

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

Gruß
Gerd

von nooooooooooob (Gast)


Lesenswert?

ne eigentlich ist das sogar ziemlich unnormal! was genau ist dein Prob?

von Steffen (Gast)


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?

von Daniel R. (Gast)


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.

von Steffen (Gast)


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)?

von Gerd Laschinski (Gast)


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

von Frank Müller (Gast)


Lesenswert?

Hallo Steffen ,

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

von Uwe (Gast)


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

von Peter D. (peda)


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

von Frank Müller (Gast)


Lesenswert?

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

von dds5 (Gast)


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

von Peter D. (peda)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.