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é
wie wärs denn mit prüfung ob der interrupteingang getoggelt wurde und dann erst den interupt wieder freigeben
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é
Welcher Controller? Welcher Int? Welche Int-Flanke (oder gar Low-Level?)? Was ist eine "Int-Schleife"? ...
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..
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... ...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.