mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilferuf Debounce


Autor: sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zäme,

ich han en Frag zum Debounce Befehl. Und zwar habe ich folgendes kleine 
Programm.
Do 
Config Debounce = 25
Debounce PIND.5, 0 , down, Sub


Loop


Down:
keypress_down = 0 ' zum entscheiden ob lang oder kurz gedrückt
Config Debounce = 2000
Debounce PIND.5, 1, down_long, Sub
if keypress_down = 0 then 
'ereignisse beim kurzen tastendruck
call decrement
call save
End If
Return

Down_long:
keypress_down = 1
return

Dies funktioniert überhaupt nicht. Wenn ich nun die taste drücke, fährt 
der im eiltempo die Zahl runter die mit decrement vermindert wird, egal 
ob ich lange oder kurz darauf drücke. Ich denke, dass es damit zu tun 
hat,  dass Debounce dass Programm nicht anhält, sonder nach 2sekunden 
wieder nachschaut, bis dahin läuft das Programm aber wieder 1000 mal 
durch den Debounce im Loop. Bitte gebt mir einen Anstoss in welche 
Richtung ich weitersuchen soll.

grüsse sascha

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt denn die Hilfe dazu, kann der Debounce-Befehl überhaupt sowas?

Ich wüßte nur ne Lösung in C:

Beitrag "Universelle Tastenabfrage"


Peter

Autor: sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit ich die Hilfe verstanden habe, prüft der Debounce den Pin und 
nach 25ms nocheinmal. Wenn diese beiden Ergebnisse übereinstimmen, gilt 
es als Tastendruck. Die Frage ist nur kann der Debounce wenn er in einer 
Sub aufgerufen wurde und später nicht mehr in der Sub ist, von alleine 
in die Sub zurückspringen, nochmals checken und dann die gewünschte 
Aktion ausführen.

Oder muss ich die ganze sache mit einem Timer lösen? Geht eine solche 
Abfrage überhaupt ohne Timer?

Grüsse
sascha

Autor: niemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist deine Frage sicher besser aufgehoben.

http://bascom-forum.de/

Autor: Eduard A. (Firma: e-jam GmbH) (aed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also soweit ich mich noch erinnere dient Debounce zur Tastenentprellung, 
d.h. du gibst eine Zeit vor und es wenn das Signal bei Debounce nach der 
Zeit t noch immer gleich ist gilt die Taste als gedrückt.
Was Du machst ist ein Setzen deiner Variablen auf 0 und dann eine 
Abfrage auf '0' und springst bei true in die Subroutine. Dein Zähler 
wird ohne Ende decrementieren.

Gruss
Eduard

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.