www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik INT0 und INT1 entprellen


Autor: Jörg Maaßen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich weiß nicht wie ich die Interrupt-Eingänge an meinem AVR2313
entprellen kann.
Habe mir diverse Beiträge im Forum angeguckt und habe bisher nur
Hinweise auf das Entprellen von normalen Port-Pins gesehen.

Kann mir jemand weiterhelfen?

Gruß Jörg

Autor: Stefan Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Willst du sie Hard- oder Softwaremässig entprellen? Wenn
Softwaremässig, dann einfach beim Aufruf des Interrupts eine kurze
verzögerungsschleife einbauen!

Autor: Jörg Maaßen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

danke für die schnelle Rückmeldung.

Ich würde die beiden Interrupt-Eingänge lieber Softwaremäßig
entprellen.

Ich hab mir auch schon ein paar Gedanken gemacht.

1. INT0 wird ausgelöst
2. INT0 abschalten (GIMSK)
3. ein Register mit dem WERT 25 belegen
4. in meiner TIMER0-Routine (alle 1/1000sec) WERT herunterzählen
5. WERT = 0 INT= wieder einschalten

Könnte das so klappen?

Hat jemand vieleicht so eine Lösung schon mal programmiert?

Wie kann ich das INT0 bzw. INT1 Bit im GIMSK setzen bzw löschen ohne
ein anderes Bit zu verändern?

Gruß Jörg

Autor: Stefan Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ja, so könnte das klappen!
Einen einzelnen Wert verändern kannst du so:
SBR GIMSK,1 ;setzt das erste Bit im GIMSK Register auf 1
CBR GIMSK,5 ;löscht das fünfte Bit im GIMSK Register

Grüsse

Autor: Jörg Maaßen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stefan,

SBR GIMSK,1
CBR GIMSK,5

hatte ich auch so gedacht aber klappt bei mir nicht (bzw. AVR Studio 4,
der sagt immer

error: illegal argument type or count

Gruß Jörg

Autor: Stefan Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Da kann ich dir nicht helfen, ich verwende nicht AVRStudio. Schau mal
in der *def.inc nach (*ändert je nach Controller z.B. für Mega8:
m8def.inc) und such nach dem Eintrag GIMSK, ist der vorhanden?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So lange ein Interrupt aufgerufen ist, sind die anderen doch so wie so
gesperrt, oder?

Was spricht also dagegen eine kurze Delay-Schleife an den Anfang der
Interruptroutine zu stellen und nach ihr den Status des Pins erneut
abzufragen?

So will ich es gerade auf einem 68HC11 lösen, da der keine
verschachtelten Interrupts kann.

MfG Mike

Autor: Jörg Maaßen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Mike

Ich glaube den Pin kann man nicht abfragen. Ist ja schließlich ein
Interrupt. Einen Delay möchte ich nicht machen, da ich mit Timer0
1/1000sec zähle.

Ich hab das jetzt so wie im Anhang programmiert. Scheint zu
funktionieren.

Kann jemand da mal drübergucken und mir vieleicht ein paar Tips geben
wie man es besser machen könnte.

Gruß Jörg

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.