www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Bit Löschen


Autor: Bimbo385 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze BasecomAVR zum Programmiren von ATmega's.

Ich hab folgendes Problem.

Durch einen Int-Interrupt (der über einen Taster ausgelöst wird), 
beginnt eine Interruptrutine.

Sobald ich in dieser Interruptrutine den Taster (mit dem ich den 
Interrupt auslöse, der an dem Int-Eingang hängt) als normalen Taster 
verwende (Disable Interrupt bzw. Enable Interrupt Befehle sind am Anfang 
und am Ende der Interruptrutine), dann setzt er dieses Interrupt Bit.

Sobald ich dann die Interruptrutine verlasse, also Enable Interrupt 
passiert ist.

Löst er das Interrupt sofort wieder aus.

Ich muss also diese Interrupt Bit Löschen, bevor ich die Interrupts 
wieder einschalte.

Aber wie mache ich das in BasecomAVR???


Mfg Bimbo385

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pin-Interrupte nimmt man generell nicht zum Abfragen von Tasten. Da 
Taster wie Sau prellen, gehen mehrere Interruptanforderungen innerhalb 
kurzer Zeit ein, was Deinen Controller dazu veranlaßt, gleich wieder 
neue Interrupte auszulösen. Das betreffende Flag wird übrigens durch den 
Interrupt selbst gelöscht, da muß man nichts von Hand machen. Die 
richtige Lösung wäre, einen Timerinterrupt auszulösen, der alle paar ms 
zuschlägt und in dessen Interruptserviceroutine fragt man die Tastenpins 
ab, ob sich etwas geändert hat. Dabei kann man dann auch gleich eine 
Entprellung einbauen, also das Testen darauf, ob der Pinzustand für eine 
entsprechende Anzahl von Interruptdurchläufen gleich geblieben ist. Erst 
dann wird der Schaltvorgang ausgelöst.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Travel Rec. wrote:
> Pin-Interrupte nimmt man generell nicht zum Abfragen von Tasten.
Außer, wenn der Taster den µC aus einem Sleep-Modus aufwecken soll. Ist 
aber eigentlich die einzige einigermaßen sinnvolle Anwendung.

> Das betreffende Flag wird übrigens durch den
> Interrupt selbst gelöscht,
...aber auch sofort wieder gesetzt, wenn der Taster prellt, was dann 
eben dazu führt, dass der Interrupt Handler nach Verlassen direkt 
nochmal ausgeführt wird.

> da muß man nichts von Hand machen.
Im obigen Fall schon. Man muss nur wissen, dass das Löschen eines 
Interrupt-Flags durch Hineinschreiben einer 1 geschieht. Ob und wenn ja, 
wie das mit BASCOM geht, entzieht sich allerdings meiner Kenntnis.

> Die richtige Lösung wäre, einen Timerinterrupt auszulösen, der alle paar ms
> zuschlägt und in dessen Interruptserviceroutine fragt man die Tastenpins
> ab, ob sich etwas geändert hat. Dabei kann man dann auch gleich eine
> Entprellung einbauen, also das Testen darauf, ob der Pinzustand für eine
> entsprechende Anzahl von Interruptdurchläufen gleich geblieben ist. Erst
> dann wird der Schaltvorgang ausgelöst.
Das ist die elegante und empfehlenswerte Methode. Zumal man eigentlich 
in fast jedem Programm irgendeine Zeitbasis (konstanten Takt) für 
irgendwelche anderen Dinge benötigt. Da ist es dann kein Akt, eben noch 
die Tasterabfrage mit zu erledigen. Es genügt bei Tastern völlig, eine 
Abfrage des Zustandes alle paar zig Millisekunden zu machen.

Autor: Bimbo385 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK dann werde ich das mal mit dem Timerinterrupt probieren


Erstmal Danke

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.