Entprellen mit Debounce

Gast #566228
Lesenswert?

Hallo,

hätte mal ne Frage zu dem Befehl "debounce" in Bascom.

Kann ich damit auch einfach nur einen Port entprellen OHNE das er in ein 
Unterprogramm springt?

Laut meinem Prof. (Fachhochschule) sollte das gehen, aber ich kriegs 
nicht hin. Bascom meckert immer das der Verweis zum Unterprog. fehlt 
bzw. unvollständiger Befehl.

Hab die Tastererkennung anders gelöst und möchte es auch nicht ändern.
Erklärung: 4 Taster sind an jeweils einen Port angeschlossen und 
zusätzlich sind alle an Int0 angeschlossen. Wenn dann der Int0 ausgelöst 
wird fragt er in der Interruptroutine ab welcher der 4 Eingangsport 
aktiviert ist und setzt einen entsprechenden Zähler hoch. Controller ist 
ein Mega32.

Danke im voraus,
Noob
Gast #566318
Lesenswert?

Nein, das wäre auch nicht sinnvoll, weil Du ja Deinen Taster oder was Du 
gerade entprellen willst, auch auswerten mußt.

Debounce Pind.0 , 0 , Schnulli

Schnulli: Print "Taster wurde gedrückt"

Wenn der Pind.0 auf 0 geht, wird zur Marke "Schnulli" gesprungen.

MfG Paul
#566374
Lesenswert?

Wenn man genau das will, was die vorgefertigten Bascom-Legosteine 
können, dann nimmt man diese.

Wenn man was anderes will, muß man es eben selbst programmieren, wie man 
es in C oder Assembler auch machen würde.

Die Legosteine aber mit was eigenem zu mixen, dürfte in der Regel 
schiefgehen, da man ja nicht in die Legosteine reingucken kann (Black 
Box).


Ich entprelle immer so:

Beitrag "Universelle Tastenabfrage"

besser gehts nicht.


Peter
#566408
Lesenswert?

Läubi Mail@laeubi.de wrote:

> Ich behaupte "besser gehts nicht" ist nicht allgemeingültig ;)

Dann zeig' mal, wie es besser (effizienter, ressourcenschonender) und 
zuverlässiger geht. ;-)

Ich habe 'ne Weile gebraucht, bis ich den Algorithmus und dessen 
Umsetzung in ASM verstanden habe, aber nun nutze ich diese Routine in 
verschiedenen Modifikationen, die auf den jeweiligen Zweck zugeschniien 
sind. Mal brauche ich nur den entprellten Zustand, mal die 
Key-press-Flags, mal die Key-lost-Flags, mal beide und wenn es nur auf 
Flankenerkennung (ohne Entprellung) ankommt, fliegt eben auch mal die 
Prellzählerei raus. Es ist und bleibt eine hocheffiziente Routine die 
enorm wenig Ressourcen beansprucht.

...
Gast #566542
Lesenswert?

Moin,
ich bin gerade dabei so etwas ähnliches zu probieren. Die vier Taster 
sind über AND Gatter an einem IRQ Eingang angeschlossen und zusätzlich 
noch an einem Port. Wenn eine Taste gedrückt wird, geht es in die IRQ 
Routine, schalte den entsprechenden IRQ ab und entprelle mit Debounce. 
Wenn das Ergebnis negativ ist, springt Debounce ja in die nächste Zeile. 
Dort schalte ich den IRQ wieder ein und verlasse alles mit Return. Bei 
positivem Ergebnis springe ich über ein Label gerade zwei Zeilen weiter, 
lese den Port in eine Variable  und von dort aus per Return wieder ins 
Hauptprogramm. Den uninteressanten Teil vom Port maskiere ich mit AND 
aus.
Das ganze sieht in etwa so aus:

'tastenabfrage
disable INTx
debounce Int-eingang,0,weiter
enable INTx
return

weiter:
key = porty AND &h0f 'die unteren vier bit werden ausgewertet
return

Ich habe es noch nicht ausprobiert, da meine Hardware noch nicht ganz 
fertig ist, aber so habe ich mir das vorgestellt.
Es gibt sicherlich elegantere und bessere Varianten, aber ich bin 
grundsätzlich faul und muß mich bei diesem Projekt noch um vieeel mehr 
kümmern, als um eine schöne Tastenentprellung... ;-)
Good Luck
:-) Johannes
Gast #566972
Lesenswert?

@ Paul Baumann

Die Taster werden doch ausgewertet, in der Interruptroutine.

@ Werner A.

Das mit dem Flag setzen hab ich hier schon öfters gelesen, es ging halt 
nur darum ob man es nicht auch einfach mit dem "Debounce" irgendwie 
lösen könnte. (Mal davon abgesehen ihn in ein leeres Unterprogramm 
springen zu lassen)

@ Peter Dannegger

Deine Lösung scheint ja das non-plus-ultra zu sein, nur leider is die 
mir 2-3 Stufen zu hoch. Bin froh das ich mit dem "Bascom-Basic" 
einigermaßen zurecht komm, deshalb wäre ich natürlich an einem kleinen 
Legostein für Bascom auch interessiert.
#566989
Lesenswert?

> deshalb wäre ich natürlich an einem kleinen
> Legostein für Bascom auch interessiert.

Hast Du das "Duck & weg" übersehen?
Das war ein Scherz meinerseits.

Wenn Du Dir den Algorithmus in ASM und C ansiehst, kannst Du ihn 
vermutlich auch in BASCOM implementieren. Er wird aber sehr viel mehr 
Rechenzeit beanspruchen, da BASCOM in der (Timer-) ISR unnötigerweise 
alle Register sichert, was unnötig lange dauert. Auch (aber nicht nur) 
ein Grund für mich, ASM zu bevorzugen.

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren