Forum: Mikrocontroller und Digitale Elektronik Hilferuf Debounce


von sascha (Gast)


Lesenswert?

Hallo zäme,

ich han en Frag zum Debounce Befehl. Und zwar habe ich folgendes kleine 
Programm.
1
Do 
2
Config Debounce = 25
3
Debounce PIND.5, 0 , down, Sub
4
5
6
Loop
7
8
9
Down:
10
keypress_down = 0 ' zum entscheiden ob lang oder kurz gedrückt
11
Config Debounce = 2000
12
Debounce PIND.5, 1, down_long, Sub
13
if keypress_down = 0 then 
14
'ereignisse beim kurzen tastendruck
15
call decrement
16
call save
17
End If
18
Return
19
20
Down_long:
21
keypress_down = 1
22
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

von Peter D. (peda)


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

von sascha (Gast)


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

von niemand (Gast)


Lesenswert?

Hier ist deine Frage sicher besser aufgehoben.

http://bascom-forum.de/

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


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.