mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik (8515) Probleme mit Interrupt - wird von selbst ausgelöst


Autor: ottom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin ein Anfänger und experementiere gerade mit einem AT90S8515 und
versuche einen Interrupt-Handler zu starten, sobald eine der beiden
Tasten, die an INT0 und INT1 angeschlossen sind, gedrückt wird.

Die Tasten sind so anschlossen, wie in "AVR-Tutorial - 2.
I/O-Grundlagen" gezeigt.

Auch die Interrupt-Behandlung erfolgt analog zum Quellcode, der in
"AVR-Tutorial - 5. Interrupts" vorgestellt ist.

Die Steuer-Register sind folgendermaßen belegt:

MCUCR <- 0b00001010
GIMSK <- 0b11000000

Dann wird mit SEI das Interrupt aktiviert.


Interrupt0-Handler inkrementiert den Wert eines Registers und gibt ihn
auf die LED-Leiste am Port A aus und kehrt mit RETI zurück.

Interrupt1-Handler tut nichts und kehrt mit RETI zurück.

Ansonsten befindet sich das Programm in einer Endlossschleife:

loop:
RJMP loop

Folgendes passiert aber: ohne, dass ich die Tasten berühre, wird der
LED-Register hochfrequent inkrementiert, sodass die LED des
niederwertigsten Bits mit vermutlich 20 Hz flimmert.

Drücke ich nun auf eine der BEIDEN Tasten, hält der Zähler an! Wie
gesagt: es ist egal, ob ich auf Int0- oder Int1-Taste drücke; beide
bewirken das Gleiche!

Wo liegt das Problem?! Warum löst der Interrupt von alleine aus?

Mux

Autor: Mathias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
is der interrupt low oder high aktiv? hast du eventuell pull ups
vergessen?? So wie es aussieht hast du den Taster falsch belegt! Also
beim Drücken auf GND statt VCC oder auf VCC statt GND ziehen!

Mfg, Mathias

Autor: ottom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mathias,

Unter
http://www.avr-asm-tutorial.net/avr_de/beginner/po...
ist dokumentiert, welche Bits für Interrupt verantwortlich sind.

Zitat: "10: Fallende Flanke löst Interrupt aus", d.h. MCUCR <-
0b00001010 sorgt dafür, dass Interrupt auf der fallenden Flanke
ausgelöst wird. Im Zweifel habe ich aber alle Kombinationen
ausprobiert, ohne dass es was gebracht hat.

Über ein Widerstand wird der Pegel an INT-Eingängen stabil gehalten
(Widerstand ist an Vcc angeschlossen).

Die Tasten verbinden die INT-Eingänge dann direkt mit GND.

Mux

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fehlerbeschreibung passt exakt zum Verhalten von offenen Eingängen -
erst wenn der Eingang per Taster auf GND gezogen wird, ist Ruhe.
Aktiviere mal die Port-eigenen Pullups.

Autor: ottom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt gefunden: die Widerstände waren gar nicht an Vcc angeschlossen!
Danke für die Tipps!

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OTTOM
Hallo, mit den internen Pull-up Widerständen hatte ich auch keinen
Erfolg; ich mußte extern 10 Kiloohm vorsehen, dann war es i.O.
Komischerweise aber nur bei diesen Eingängen.

MfG Paul

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der erste Fehler ist je nun gefunden...

Aber:
Mechanische Taster prellen. Sie lösen daher den Interrupt nicht nur
einmal aus, sondern mehrmals hintereinander. Es ist daher besser,
Taster zyklisch im Timer-Interrupt abzufragen und zu entprellen. Mehr
Informationen dazu gibt es hier:
 http://www.mikrocontroller.net/articles/Entprellung

...

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.