Forum: Mikrocontroller und Digitale Elektronik Programm hängt in Int-Schleife solange ext. int. anliegt


von René (Gast)


Lesenswert?

Hallo Alle,

mein Problem ist, dass mein Programm in der Interruptschleife hängen
bleibt solange der externe Interrupt anliegt, und da die
Interruptroutine so kurz wie möglich sein soll ist der Controller
natürlich ruck zuck mit der Abarbeitung fertig und sollte eigentlich im
Mainprogramm weitermachen und nicht so lange warten bis der
Interrupteingang nicht mehr belegt ist. Geht das irgendwie?

Danke im Voraus

René

von Denis (Gast)


Lesenswert?

wie wärs denn mit prüfung ob der interrupteingang getoggelt wurde und
dann erst den interupt wieder freigeben

von René (Gast)


Lesenswert?

Hallo Denis,

da verstehe ich leider überhaupt nicht was du meinst. Würde nicht
"getoggelt" heißen, dass der Interrupt nur kurz betätigt worden wäre?
Das ist ja nicht so, er wird ja eine Sekunde oder länger betätigt und in
der Zeit bleibt der µC halt stehen, obwohl er nach 10 ms mit der
Abarbeitung des Interruptvektors fertig ist.

René

von ...HanneS... (Gast)


Lesenswert?

Welcher Controller?
Welcher Int?
Welche Int-Flanke (oder gar Low-Level?)?
Was ist eine "Int-Schleife"?

...

von René (Gast)


Lesenswert?

Hallo HanneS,

Mega 128, Int 4-6, triggern auf "low Level"

Das meine ich mit int Schleife

SIGNAL (SIG_INTERRUPT6)
  {
  touch();
  }
...und da touch alleine nichts bewirkt, bleibt der Controller quasi
stehen bis ich den Taster loslasse..

von ...HanneS... (Gast)


Lesenswert?

Dann ist das völlig korrekt.

Low-Level heißt ja, dass der Int ausgelöst wird (immer wieder), solange
der Pin Low-Level hat, also an GND liegt.

Falls du den Low-Level zum Wecken aus SLEEP brauchst, dann schalte doch
in der ISR erstmal auf Flanke. Dann mach deine Arbeit. Erst wenn du den
AVR wieder schlafen schickst, schaltest du wieder auf Low-Level...

...

von René (Gast)


Lesenswert?

Hallo HanneS,

eigentlich will ich auf "falling edge" triggern, aber es passiert bei
allen Triggerbedingungen das gleiche. Ich kommentiere immer alle
Triggerbedingungen abwechselnd ein, deshalb stand oben triggern auf
"low level". Er macht halt immer erst weiter wenn ich den Taster
wieder los lasse. Ich habe nach Aufruf der Funktion "touch" auch
schon mit "cli"  die Interrupts deaktiviert in der Hoffnung dass es
so geht, aber Fehlanzeige...

von René (Gast)


Lesenswert?

OK, habe mal ein Testprog geschrieben. Wenn ich eine LED eine Sekunde
lang leuchten lasse, dann tut sie das auch und der µC macht dann ganz
normal im Hauptprogramm weiter wie er es soll auch wenn ich den Taster
weiter festhalte, es muss also ein Fehler in meiner Funktion "touch"
sein, da muss ich wohl erst einmal auf die Suche gehen...

Danke an alle

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.