Programm hängt in Int-Schleife solange ext. int. anliegt

Gast #158248
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é
Gast #158250
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é
Gast #158252
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..
Gast #158253
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...

...
Gast #158254
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...
Gast #158255
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.