mikrocontroller.net

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


Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Denis (Gast)
Datum:

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

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: ...HanneS... (Gast)
Datum:

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

...

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: René (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.