Forum

Einloggen | Registrieren | RSS  

wastel(R)

25.07.2015,
15:41
 

Entprellung per Software (Schaltungstechnik)

Hallo!
Ich stehe vor dem Problem dass ich mehrere Taster entprellen muss, die an einem Controller angeschlossen sind. Per Software aber ich denke da bin ich bei euch trotzdem richtig.
Die Taster sind an Eingänge mit Pullup angeschlossen und ziehen diese auf Masse.

Es gibt komplexe Routinen die auf Anhieb nicht verständlich sind. Ich frage mich jetzt obs wirklich so komplex sein muss.
Mein erster Ansatz wäre den Taster öfter abzufragen. Sagen wir alle 20 ms. Wenn er dreimal hintereinander gedrückt ist gilt das als gedrückt, damit möchte ich Störungen ausschließen die ein kurzes Fehlsignal liefern. Danach muss er mindestens 30 Durchläufe nicht gedrückt sein um wieder als losgelassen zu gelten.
Das bedeutet man muss ihn eine bestimmte Zeit drücken, so wie man es üblicherweise beim betätigen eines Lichtschalters auch macht. Und man muss ihn eine gewisse Zeit losgelassen haben. Beides sehe ich nicht als Problem.
Man muss eben zwischen zwei Schaltvorgängen warten. Es geht um Lichtschalter und nicht um Morsetasten :-)

Wo liegt mein Problem bei diesen Annahmen?

xy(R)

E-Mail

25.07.2015,
15:44

@ wastel

Entprellung per Software

» Wo liegt mein Problem bei diesen Annahmen?

Du willst das Rad neu erfinden.

Google "debouncing algorithm"

Maik.

25.07.2015,
15:57

@ wastel

Entprellung per Software

Mach doch einfach eine neue Abfrage sowie Variabel dazu.
Solaneg der Taster gedrückt ist hat die Variabel Taster1-gedrück den Wert 1 und wird dann nur 1x den Bereich durchlaufen und dein Code ausführen.
Beim nächsten durchlauf prüfst du ist taster gedrückt sowie ist die variabel taster1-gedrück =1 dann code nicht ausfürhen da dieser schon ausgeführt wurde.
und wenn denn die Abfrage kommt das Taster nicht gedrückt ist wird die Varibale Taster1-gedrückt auf 0 gesetzt.

Im Grunde nur ne If Else Abfarge dazu zu deinen Code...

wastel(R)

25.07.2015,
17:58

@ xy

Entprellung per Software

» Du willst das Rad neu erfinden.
» Google "debouncing algorithm"

Hab ich bereits :-) Die simplen Algorithmen gehen in meine Richtung. So einen kann ich leicht auf meine Situation umbauen. Es geht um mehrere Taster. Die werden noch dazu über ein Schieberegister eingelesen. Es gibt keinen extra GPIO pro Taster, hier wäre anzupassen.

Dann gibt es noch kompliziertere zu denen gesagt wird man muss sie nicht verstehen, hauptsache sie funktionieren. Um die anzupassen muss ich sie erst verstehen.
Die Frage wäre wo der Unterschied liegt, was den einfachen Algorithmen fehlt.

Mit welchen Tastraten ist da überhaupt zu rechnen? Es handelt sich um Lichttaster, nicht um Tastaturen mit mehreren Anschlägen pro Sekunde. Wie lange drückt man gewöhnlich auf einen Lichttaster? Ich habe nichts um das zu messen.

geralds(R)

Homepage E-Mail

Wien, AT,
25.07.2015,
19:59
(editiert von geralds
am 25.07.2015 um 20:06)


@ wastel

Entprellung per Software

Hi,

Hier gäbe es was:
http://www.labbookpages.co.uk/electronics/debounce.html

"Debounce", im CCS-Forum diskutiert:
http://www.ccsinfo.com/forum/search.php?mode=results

u.A. - hast mehrere Tasten/Schalter, würde ich diese
per "switch/case" anstatt "if/then" abfragen.

zB.
switch keys{
case key1: pgm1; break;
case key2: pgm2; break;
.
.
default: defpgm; break;}

Dort drinnen hast dann die möglichen (zb obig beschriebene) debounces (eine im source, welche jeweils angesprungen wird).

recht effizient ist die mit dem schieberegister;
-> erreicht die "null" den Überlauf (das flag abgefragt),
dann wird "gedrückt", bzw. "losgelassen" bestätigt.
--> kann den, die raren Timer sparen, die ja auch möglicherweise was zu tun haben.

Auch die Hardware-Lösung kann sparen helfen.
Hast einen kleinen PGM-Speicher, µC, kann ein Debounce-Käfer die Arbeit der Software abnehmen,
-> Maximintegrated www.maximintegrated.com hat solche Käfer, die am Port vorgespannt werden können.

http://www.maximintegrated.com/en/datasheet/index.mvp/id/1896

http://www.maximintegrated.com/en/app-notes/index.mvp/id/764

Oder ganz einfachst, eine R-C Verzögerung ans Port-Taste dran, wie gehabt.

Also, ... dieses, ... jenes, Kombinationen.....

PS:
ist das für dein Projekt, für zu deine Lampensteuerung im Haus?
Welches Käfer-Hirni hast dafür vorgesehen?
Wie willst das machen? .... zumindest Ansätze hatten wir mal mail-getauscht.... daher diese Nachfrage.

Grüße
Gerald
----

--
...und täglich grüßt der PC:
"Drück' ENTER! :wink: Feigling!"

A.(R)

26.07.2015,
09:43

@ geralds

Entprellung per Software

» recht effizient ist die mit dem schieberegister;
» -> erreicht die "null" den Überlauf (das flag abgefragt),
» dann wird "gedrückt", bzw. "losgelassen" bestätigt.

Also mit einem Shit-Register..., äh sorry Shift-Register meinte ich. :-)

wastel(R)

26.07.2015,
10:15

@ geralds

Entprellung per Software

Hallo

» -> Maximintegrated www.maximintegrated.com hat solche Käfer, die am Port
» vorgespannt werden können.
Sieht interessant aus!

» Oder ganz einfachst, eine R-C Verzögerung ans Port-Taste dran, wie gehabt.
Ziemlicher Aufwand, es sind schon einige Eingänge die ich abfragen will. Habe den MCP23017 is Auge gefasst um Eingänge und Ausgänge zu realisieren. Aktuell plane ich einen Versuchsaufbau um überhaupt mal was zum laufen zu bekommen. Wenns passt gibt es ein paar mehr solcher Stufen. Evtl. auch damit https://www.abelectronics.co.uk/products/3/Raspberry-Pi-Model-A-and-B/18/IO-Pi
Aber dahin ist noch weit :-)

» ist das für dein Projekt, für zu deine Lampensteuerung im Haus?
Ja daran denke ich seit diesem Wochenende weiter. Ich weiß wir haben schon mal Ansätze besprochen aber da hat sich seit einigen Wochen aus Zeitgründen nichts mehr getan. Jetzt gehts hoffentlich weiter.

Meine Frage hier soll herausfinden welchen Aufwand man bei einem Taster zum ein/aus schalten benötigt. Man betätigt den ja nicht in der Geschwindigkeit wie man auf einer Tastatur tippt. Gesparte Bauteile sind beim selbstbasteln immer gut daher wäre was softwareseitiges am besten.
Ganz toll wäre natürlich immer noch wenns was komplett fertiges gäbe in dem mehrere entprellte Eingänge auf einer Platine erhältlich wären :-)