mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Entprellen mit Debounce


Autor: Noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nix zu machen wenn der Taster gedrückt wurde ist doch auch ne Art 
entprellung ;)

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So in der Art: "Sind Sie verheiratet? Wenn ja, warum nicht? Haben Sie 
Kinder? Wenn nicht, wie machen Sie denn das?"

;-)
Paul

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
las das doch mit dem debounce. in der interrupt routine setzt du ein 
flag und fragst 10 ms später ab, ob noch ein taster gedrückt ist.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:
> Ich entprelle immer so:
>
> Beitrag "Universelle Tastenabfrage"
>
> besser gehts nicht.

Das stimmt. mach' ich inzwischen auch so.
Aber kannst Du da nicht mal einen BASCOM-kompatiblen Legostein draus 
bauen?

Duck & weg...

...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes Lux wrote:
> Peter Dannegger wrote:
>> Ich entprelle immer so:
>>
>> Beitrag "Universelle Tastenabfrage"
>>
>> besser gehts nicht.
>
> Das stimmt. mach' ich inzwischen auch so.
> Aber kannst Du da nicht mal einen BASCOM-kompatiblen Legostein draus
> bauen?
>
> Duck & weg...
>
> ...
Ich behaupte "besser gehts nicht" ist nicht allgemeingültig ;)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner A. (homebrew)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entprellen in der interrupt routine ist wohl eine der denkbar 
schlechtesten möglichkeiten...

Autor: Noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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

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.