Forum: Mikrocontroller und Digitale Elektronik Python, Raspberry-Problem: Kontakt entprellen


von Witty (Gast)


Lesenswert?

Die Entprellung auf dem Raspberry mittels der RPi.GPIO-Funktion 
GPIO.add_event_detect (siehe unten) ist ein Witz. Es wird nicht 
entprellt, es wird während der bouncetime nur gewartet. Weiter 
Auslösungen durch das Prellen des Kontakts werden einfach blockiert. Das 
Ereignis wird sofort ausgeführt. Ist die Schließzeit des Kontaktes 
länger als die bouncetime dann wird beim Öffnen des Kontakts u. U. - 
durch das Prellen - wieder ein Ereignis ausgelöst.

Ist eine Abhilfe nur per Kondensator, Widerstand & Schmitt-Trigger o. ä. 
möglich oder wie kann man eine echte Entprellung per Software 
durchführen?

1
GPIO.add_event_detect(pin, GPIO.FALLING, callback = AlarmCallback, bouncetime = 1000)

von Peter Z. (hangloose)


Lesenswert?

Vielleicht zum Entprellen einen Timer parallel laufen lassen?

von Witty (Gast)


Lesenswert?

Peter Z. schrieb:

> Vielleicht zum Entprellen einen Timer parallel laufen lassen?

Warum?

von Peter D. (peda)


Lesenswert?

Witty schrieb:
> Die Entprellung auf dem Raspberry mittels der RPi.GPIO-Funktion
> GPIO.add_event_detect (siehe unten) ist ein Witz.

Ja, viele gelernte Programmierer tun sich schwer damit, die reale Welt 
zu verstehen.
Ich entprelle immer gleich ganze Ports. Eine 4-fach Abtastung mit der 
Entprellzeit (2..20ms) hat sich dafür als optimal erwiesen. Praktischer 
Weise kann man bei der Entprellung auch gleich die Flanke mit auswerten, 
d.h. die Änderung des entprellten Signals.

Witty schrieb:
> Peter Z. schrieb:
>
>> Vielleicht zum Entprellen einen Timer parallel laufen lassen?
>
> Warum?

Nun, um während der Entprellzeit, die CPU nicht zu blockieren. Der Timer 
ist durch das Entprellen auch nicht verloren, er kann nebenei noch 
andere Sachen machen.
Bei MCs mit wenigen Timern (z.B. ATtiny13) kann man auch andere 
periodische Ereignisse für das Entprellen verwenden, z.B. den 
ADC-Interrupt.

von Witty (Gast)


Lesenswert?

@ Peter

Dein ganzer Beitrag ist nur ein einziges selbstgefälliges Geschwafel.

von Peter D. (peda)


Lesenswert?

Witty schrieb:
> Dein ganzer Beitrag ist nur ein einziges selbstgefälliges Geschwafel.

Sag doch gleich, daß Du keine Lust hast, funktionierende SW-Entprellung 
zu benutzen. Dann hätte ich mir den Beitrag sparen können.
Die Flankenerkennung darf erst auf dem entprellten Signal erfolgen und 
nicht auf dem gestörten Signal.

von Konrad S. (maybee)


Lesenswert?

Witty schrieb:
> selbstgefälliges Geschwafel

:-)

Selbst wenn es so wäre: Pedas Code für diesem Einsatzzweck läuft seit 
Jahren ohne Probleme.

von Bla (Gast)


Lesenswert?

Konrad S. schrieb:
> Selbst wenn es so wäre: Pedas Code für diesem Einsatzzweck läuft seit
> Jahren ohne Probleme.

Ich habe auch ein Programm zum Entprellen geschrieben, das seit langem 
läuft - leider ist die Variable zum Warten nach einem Tastendruck zu 
hoch eingestellt und man kann nur im Schneckentempo eintippen  :-)

von soft (Gast)


Lesenswert?

>Raspberry-Problem

Nein, ist es nicht.

Bei Verwendung von Warteschleifen kommt es zu Problemen im Kopf des 
Programmierers.

Du liebe Güte, wie oft soll die Entprellung von Tasten noch das Thema 
sein?
Es gibt bewährte Lösungen. Die wurden hinreichend dokumentiert. Immer 
wieder angezweifelt, weil (siehe oben) ein Problem im Kopf besteht. Im 
Endeffekt gehen solche Threads endlos, enden in Glaubenskriegen durch 
Leute die nur glauben und nicht denken.

Peng.

von Peter D. (peda)


Lesenswert?

Das Problem ist, daß viele professionelle Programmierer denken, das 
Entprellen sei ja so popeleinfach, daß es nicht Wert ist, sich darüber 
mal gründlich Gedanken zu machen. Sie hauen einfach irgendwo Wartezeiten 
rein mit den sattsam bekannten Folgen. Und daher funktionieren viele 
Tastenabfragen eher schlecht als recht und der Benutzer muß sich damit 
rumärgern.

Die Filterung durch Mehrfachabtastung habe auch nicht ich erfunden, sie 
wird schon lange eingesetzt, nur leider viel zu selten. Z.B. 
Entprell-ICs haben sie implementiert, aber die sind sehr teuer.

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.