PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ich bekomm das mit dem debounce ... erledigt danke!



veit
13.02.2006, 01:51
ok es ist schon spät und ich bin müde ... aber dennoch:

habe ein entprell problem und bekomm die lösung weder aus der suche hier noch in der hilfe von bascom

ich bekomms nicht in meinen schädel.

also ich habe einen kippschalter, der löst einen countdown auf einer 7-segment anzeige aus. klappt alles. (int0 als externer interrupt mit rising)

habe in die do schleife ein disable - enable int0 mit waitms 30 reingepackt.

wenn ich jetzt schalte läuft der vorgang auch nur einmal ab. schalter zieht eingang auf gnd, pullups sind an.

schalte ich den schalter wieder runter, startet der vorgang aber erneut.
ich denke er prellt halt beim runterschalten auch ganz fein ....

das kann man doch mit DEBOUNCE einstellen oder?

da gibts drei parameter (pin,state,label) aber ich brings einfach nicht zusammen.

ich benutze pind.2

also

debounce pin2.d, 0, und label???
oder doch 1 ?
für label steht in der hilfe was mit sub usw usw, ich rufe halt nur int0serv auf, is das mein label?


ohje ....
ich muss ins bettchen ...

ein anfänger der müde augen vom suchen hat sagt danke!

Torsten_G
13.02.2006, 11:39
Poste doch mal Deinen Code...

Grüße

Torsten

Baumschubser
13.02.2006, 15:23
Ich weiß nicht, ob du den Debounce-Befehl mit einem Interrupt verbinden kannst - du musst eigentlich keinen Interrupt verwenden.
So funktioniert der Debounce-Befehl:

declare sub tastendruck

do

debounce pind.2 , 0 , tastendruck , sub

'pipapo restliches programm

loop


sub tastendruck

'hier steht was der taster machen soll

end sub

veit
13.02.2006, 15:36
ich dachte mir sowas schon, ich werd mal den code schnell umbasteln ...

danke schonmal

veit
13.02.2006, 15:51
JUHUUU

es funktioniert PERFEKT


aaaaah es kann so schön sein ...

hmmm irgendwie brauch ich so gar keine interrupts mehr ..... fein fein

vielen dank!

Ratber
14.02.2006, 08:30
hmmm irgendwie brauch ich so gar keine interrupts mehr ..... fein fein

Solange zwischen den Abfragen nicht zuviel Zeit vergeht funktioniert das recht gut.

Wenn doch dann muste doch nen Int nutzen oder die Tasten länger gedrückt halten.

Papsi
14.02.2006, 17:59
Hallo,

Ich habe das auch mal ausprobiert, funktioniert alles.

Nur wie kann ich es machen, das wenn ich Taste1 festhalte und dann Taste3 drücke soll er zu Sub Fall4 springen. und nicht vorher irgendwo anders hinspringen.



...
Do
For I = 1 To Keys
Key = I
Select Case Key
Case 1 : Debounce Pind.0 , 1 , Fall1 , Sub
Case 2 : Debounce Pind.1 , 0 , Fall2 , Sub
Case 3 : Debounce Pind.2 , 0 , Fall3 , Sub
End Select
Next
Loop
...

Ratber
14.02.2006, 18:16
Indem du in den Debounce-Subs nur den Status der Tasten festhälst und am ende der Debounce-Befehle in einer eigenen Sub nochmal prüfst ob mehrere Gedrückt sind und dann erst reagierst.

Papsi
14.02.2006, 18:29
Kannst Du mir da mit einen "Codeschnipsel" unter die Arme greifen???

Ratber
14.02.2006, 20:48
Ja,kein Problem .



Dim Taste1 As Bit
Dim Taste2 As Bit
Dim Taste3 As Bit


...
Do
For I = 1 To Keys
Key = I
Select Case Key
Case 1 : Debounce Pind.0 , 1 , Fall1 , Sub
Case 2 : Debounce Pind.1 , 0 , Fall2 , Sub
Case 3 : Debounce Pind.2 , 0 , Fall3 , Sub
End Select
Next
Gosub Auswert
Loop
...



Fall1:
Taste1 = 1
Return

Fall2:
Taste2 = 1
Return

Fall3:
Taste3 = 1
Return

Auswert:
'Hier kann man mit If...Then oder Case die Kombinationen auswerten.
'Die höherwertigen Mehrfachkombinationen zuerst.
'also erst 3er dann 2er und am Ende 1er
Return

Ich habs jetzt absichtlich mal ganz simpel und nachvollziehbar gehalten.
Das läst sich auch viel einfacher gestallten aber es geht ja ums Prinzip.

Erst wird einfach in Variablen der Status der Tasten festgehalten und erst am Ende der Abfrageschleife geprüft welche Tastenkombinationen gedrückt wurden.

wie gesagt läst sich das auch etwas geschickter machen als wie da oben.
Nicht das de gleiche einer rumspottet.