Externer Interrupt entprellen?!

Gast #24128
Hallo zusammen,

ich hab folgendes vor. An dem externen Interrupt INT0 von meinem 8051 
ist ein Taster dran. Jedesmal wenn ich diesen betätige, soll eine 
Variable hochzählen.
Soweit kein Problem...
Interruptroutine geschrieben und getestet.
Dabei ist mir aber aufgefallen dass der Taster prellt...und daher zählt 
das Programm manchmal auch die Variable um 2 oder 3 hoch.
Aber die Variable soll wirklich nur EINMAL hochzählen, wenn ich den 
Taster betätige.

Allerdings weis ich nicht wie ich den externen Interrupt entprellen soll 
per software. ODer muss ich denn per hardware(RS FF oder so) entprellen?


Danke, Tobias
Gast #24129
Hallo
du kannst es software mäßig machen wenn mann denn Taster nicht so oft 
hintereinander betätigt. Dann kannst du's so machen das max einaml pro 
Sekunde um eins hoch gezählt wird.
oder nur jede 0,5s da musst halt schauen
Verstanden was gemeint ist
Gast #24130
Moin!

Du schaltest deinen Interrupt aus lässt einen Timer anlaufen und wenn 
der einen Overflow auslöst schaltest du den externen Interrupt wieder 
ein. Evtl musst du noch eine Variable mitlaufen lassen, wenn dir die 
Zeit bis zum Overflow zu kurz ist.
Das ist glaub ich das Einfachste, verbraucht allerdings einen Timer.
Eine Erweiterung währe, da man ja meistens so und so einen Timer mit 
fester Overflow-Zeit braucht (z.B. 1ms) das man die Entprellung da 
einbaut.
Noch was anderes: Ich hab z.B. einen Taster mit Schließer und Öffner, 
die beide einen Interrupt auslösen. Die Interrupts schalten sich dann 
selbst aus und den anderen ein. So funktioniert das Sehr gut, wenn man 
die Interrupts frei hat und die entsprechenden Taster.

MfG
Gast #24131
Danke für eure Anregungen.
Aber ich hab es doch nicht mit dem Interrupt gemacht.
Gab noch ne andere Lösung :)

Trotzdem Danke!

Tobias
Gast #24132
Wie sähe denn hier die Hardware-Lösung aus? Hab die Suchfunktion
benutzt, aber kein eindeutiges Ergebnis gefunden. Also, wenn ich den
internen Pull-up aktiviert hab, muss ich dann einfach nur vom portpin
aus einen 100nF-Keramik-C nach GND legen, und das wars schon??? Hab
auch irgendwo gelesen, dass man noch irgendwie einen Widerstand mit
einbauen sollte. Wo genau muss der denn dann hin, und wie groß soll der
sein?

würd mich über ne antwort freuen. mfg, anfänger.
Gast #24133
pull-up und R sind schon richtig.
      5V
       ^
       |
       -
      | | 4k7
      | |
       -
       |    _ 10..100 Ohm
 uP <--*---|___|---
       |           |
       |            /
      ===          /
       |           |
       |           |
       - 0V        - 0V

die 4k7 können auch der interne Pull Up sein, der Serienwiderstand
begrenzt den Kurzschlußstrom beim Tasten.

grüsse leo9

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.