Forum: Mikrocontroller und Digitale Elektronik Hardware Entpreller mit Schmitt-Trigger


von Heinz S. (aves_aquila)


Angehängte Dateien:

Lesenswert?

Hallo Profis!

Für ein aktuelles Projekt mit dem Raspberry Pi brauchte ich einen 
Hardware-Entpreller.

Ich habe dann mal ein wenig hin und her überlegt und habe mir die im 
Anhang gezeigte Schaltung zum Hardwareentprellen meines Interrupts 
überlegt. Das Rumzittern des Tasters wird von einem Tiefpass geglättet. 
Und ein invertierender Schmitt-Trigger 74HC14 zaubert mir wieder ein 
schönes Signal zwischen Hi/Lo mit steilen Flanken. Und dann noch einen 
BC547C um das Signal durch eine Emitterschaltung nochmal zu invertieren. 
Ok, der letzte Schritt ist über, das ginge auch in Software.

Was sagen die Profis dazu? Kann man das so verwenden oder habe ich 
irgendwelche Details vergessen? In LTspice sieht es ja ganz nett aus. 
Aber nicht das mir die Realität da nachher wieder in die Suppe spuckt...

Gruß!

: Bearbeitet durch User
von Harald W. (wilhelms)


Lesenswert?

Heinz Sturrhahn schrieb:

> Hardware-Entpreller.

Meinst Du nicht, das der 10µF-Kondensator für den Schalter
etwas "hard" ist?

von Udo S. (urschmitt)


Lesenswert?

So ist das aber kein Tiefpass, da du den Kondensator mit dem Taster 
kurzschliesst.
Besser siehe: Entprellung

von Peter D. (peda)


Lesenswert?

Heinz Sturrhahn schrieb:
> Für ein aktuelles Projekt mit dem Raspberry Pi brauchte ich einen
> Hardware-Entpreller.

Hast Du wirklich Angst, der RP könnte mit SW-Entprellung überfordert 
sein?

Kondensatoren sollte man nicht ohne Strombegrenzung kurzschließen.

von Heinz S. (aves_aquila)


Angehängte Dateien:

Lesenswert?

Hmmm... Ja das ist vll. etwas groß... Das sind was bei 180ms bis der 
Schmitt-Trigger reagiert.

Vielleicht doch etwas heftig... Wechsle auf 100nF... Da bin ich dann bei 
1ms.

Uh... Der Taster/Schalter an der Stelle ist Mist. Das war nen Hirnfurz. 
War in der ursprünglichen Simulation auch nicht drin. Siehe Anhang.

Und da ich mit dem Taster einen Interrupt bediene, ist SW-Entprellung 
etwas kontraproduktiv. Jedenfalls erscheint mir das sinnlos, wenn der 
Interrupt das Hauptprogramm n-mal unterbricht und dann in Software 
entschieden werden muss ob das eigentliche Interrupt Ziel jetzt 
ausgeführt werden soll.

Als ich das verifizieren wollte bin ich gerade auf diesen Artikel 
gestoßen:
Entprellung

Naja, so habe ich mir aber selber mal Gedanken gemacht und nicht stumpf 
was nachgebaut.

von MaWin (Gast)


Lesenswert?

Heinz Sturrhahn schrieb:
> Was sagen die Profis dazu?

Murks.

a) auch ein RPi braucht keinen Hardwareentpreller, alles, was von einem 
Taster kommt ist so langsam, daß er kann er gut in Software entprellen.

b) Du simulierst mit einmem Pulse, aber dein späterer Impuls kommt vom 
Taster. Der wäre hochgradig unsymmetrisch, denn R2 würde dann ja an 
Dauerspannung liegen und nur beim Aufladen wirken.

c) Ein Taster, der 10uF (oder auch 100nF) direkt kurzschliesst, erzeugt 
Schäden auf der Kontaktfläche wegen des zu hohen Entadestroms.

So sieht die korrekte Entprelllung für einen einpoligen Taster nach GND 
aus:
1
 VCC
2
  |
3
 4k7
4
  |          74HC14
5
  +-100k-+--|>o--|>o--
6
  |      |
7
 Taster 100n
8
  |      |
9
 GND    GND

Das ist doch eigentlich nicht so schwer, man hätte es mit etwas googeln 
selbst finden können.

von Amateur (Gast)


Lesenswert?

Das Prellen eines Tasters ist kein Pegelproblem. Aus diesem Grunde hilft 
ein Schmitt-Trigger hier nicht weiter. Die Vielfachimpulse eines Tasters 
liegen meist zwischen 0 und Umax, was um alles in der Welt soll da ein 
Schmitt-Trigger. Viele, kurze Einzelimpulse, machen einen Abpraller aus.

von Heinz S. (aves_aquila)


Lesenswert?

Lieber MaWin,
lieber Amateur,

danke für eure Einbringungen! Mag sein das ich etwas empfindlich bin, 
aber eure Texte sind mal wieder ein gutes Beispiel, warum ich so gerne 
in (Fach)-Foren unterwegs bin. Einen solchen Umgangston bin ich unter 
normalen Menschen nicht gewohnt. Gehe ich mit einer praktischen Frage zu 
einem Kollegen, knallt der mir kein "Alter, was fürn Scheiß" oder "Boar! 
Hätteste bei Google auch selber rausfinden können!" an den Kopf.

1. Bevor man unkoordiniert Kram verzapft --> LESEN
Da ich mit dem Taster einen Interrupt bedienen will, sehe ich keinen Weg 
das sinnvoll in Software zu erledigen. Wenn doch, dann bitte ich um 
Erleuchtung.

2. Frag Google --> Danke habe, ich!
Aber ich habe nicht stumpf was nachgebaut, sondern habe mir selber was 
überlegt und wollte dazu qualifizierte Anmerkungen auf fachlichem 
Niveau.

3. Amateur --> Pegelproblem
Korrekt, aber darum geht es auch nicht. Der Schmitt-Trigger soll mit 
seiner Hysterese das durch den Kondensator zermatschte Eingangssignal 
wieder in schöne senkrechte Flanken verwandeln. Das sieht der Autor 
dieses Artikels übrigens ähnlich: Entprellung: Einfacher Taster

Schönen Tag noch und Danke an die konstruktiven Beiträge der anderen 
Autoren. Die haben mir in der Tat was gebracht.

von chris (Gast)


Lesenswert?

Heinz Sturrhahn schrieb:
> Da ich mit dem Taster einen Interrupt bedienen will, sehe ich keinen Weg
> das sinnvoll in Software zu erledigen.

Mit Tastern einen Interrupt auszulösen ist im Allgemeinen total sinnlos. 
Interrupts sind für zeitkritische Sachen (Mikrosekunden). Taster werden 
von Menschen bedient --> da kanns auch ruhig 200ms dauern, bis darauf 
reagiert wird.

lg
Chris

von Heinz S. (aves_aquila)


Lesenswert?

Wenn der Controller aber ständig den Status eines Eingangs in einer 
Betonschleife abfragt, kann ich das System aber nicht in den Schlafmodus 
schicken. Der Prozess rödelt dann die ganze Zeit durch. Da macht ein 
Button am Interrupt schon Sinn.

von MCUA (Gast)


Lesenswert?

>Da ich mit dem Taster einen Interrupt bedienen will, sehe ich keinen Weg
>das sinnvoll in Software zu erledigen.
Eine ständige laufende Routine (oder Main) scannt den Tasterport ab (ist 
ja ewig langsam). Falls die was merkt, löst die den betr Softw-Teil aus.

von Heinz S. (aves_aquila)


Lesenswert?

Ich zitiere mich an der Stelle mal selber:

Heinz Sturrhahn schrieb:
> Wenn der Controller aber ständig den Status eines Eingangs in einer
> Betonschleife abfragt, kann ich das System aber nicht in den Schlafmodus
> schicken. Der Prozess rödelt dann die ganze Zeit durch. Da macht ein
> Button am Interrupt schon Sinn.

von Amateur (Gast)


Lesenswert?

@Heinz
Schau Dir mal das Konzept: Umschalter mit nachfolgendem FF an wenn Du 
nicht abprallen willst.

Und spar Dir doch bitte summarische Rundumschläge!

von Yalu X. (yalu) (Moderator)


Lesenswert?

Softwareentprellung und Interrupts beißen sich nicht. Du kannst einen
Interrupt verwenden, um festzustellen, ob die Taste überhaupt gedrückt
worden ist. Beim Eintreffen des Interrupts wird der Interrupteingang
gesperrt und ein softwaremäßiger Entprellmechanismus in Gang gesetzt
(der bspw. per Timer-Interrupt den Eingang zyklisch abfragt und
auswertet). Erst wenn dieser Mechanismus erkennt, dass der Taster
losgelassen wurde und jegliches Prellen vorüber ist, wird der Interrupt
für den Taster wieder freigegeben.

: Bearbeitet durch Moderator
von Heinz S. (aves_aquila)


Lesenswert?

@Amateur

Ich schätze du meinst das hier: Entprellung: Prellfreie Schalter?

von Amateur (Gast)


Lesenswert?

@ Heinz

Ich erinnere mich noch schwach daran, dass das Dein Wunsch war.

Natürlich kannst Du das FF auch diskret aufbauen;-)

von Klaus (Gast)


Lesenswert?

Heinz Sturrhahn schrieb:
> kann ich das System aber nicht in den Schlafmodus
> schicken.

Heinz Sturrhahn schrieb:
> Für ein aktuelles Projekt mit dem Raspberry Pi

Da läuft doch ein Linux drauf. Wie schläft Linux?

MfG Klaus

von Flohzirkus-Dompteur (Gast)


Lesenswert?

@Heinz

Laß es gut sein. Du hast einige vernünftige Antworten bekommen, bzw.
für Dich selbst herausgefunden.

Was jetzt noch kommt, dient der Befriedigung von Leuten, die unbedingt
Recht haben wollen. Gib ihnen Recht und laß es gut sein.

von Heinz S. (aves_aquila)


Lesenswert?

@Yalu X.

Ok, das mit dem Timer-Interrupt wäre ne Lösung. Da hatte ich am Anfang 
auch nach geschaut, das aber schnell verworfen. Auf dem Raspberry Pi mit 
Raspbian als OS soll das wohl nicht so der Hit sein.

Und da ich mich bisher noch nie mit Hardwareentprellung beschäftigt 
hatte, war das jetzt mal nen Aufhänger für mich das in Hardware zu 
machen.

Nur "normales" SW-Debouncing macht halt bei nem Interrupt keinen Sinn. 
Das Hauptprogramm soll ja so lange Dinge tun - oder schlafen - bis der 
Interrupt ausgelöst wird. Da wäre es ziemlich unschön vom Interrupt eine 
"SW-Debouncing Routine" auszulösen, welche dann erst indirekt das 
eigentliche Event auslöst. Deswegen meine Designentscheidung den Taster 
in Hardware zu entprellen.

von Heinz S. (aves_aquila)


Lesenswert?

Flohzirkus-Dompteur schrieb:
> @Heinz
>
> Laß es gut sein. Du hast einige vernünftige Antworten bekommen, bzw.
> für Dich selbst herausgefunden.
>
> Was jetzt noch kommt, dient der Befriedigung von Leuten, die unbedingt
> Recht haben wollen. Gib ihnen Recht und laß es gut sein.

Merci! ;-)

von MCUA (Gast)


Lesenswert?

>Wenn der Controller aber ständig den Status eines Eingangs in einer
>Betonschleife abfragt, kann ich das System aber nicht in den Schlafmodus
>schicken.
Doch, alle ca 1/10 sec.
(dadurch steigt der I-verbrauch nur unwesentlich)
Zudem ist hier spez. Entprellung überhaupt nicht nötig.
Einfach bei erstmaligem Auftreten des Tasterimpulses (egal ob aus INT 
oder von sonstwo) 1x Rout starten und danach mit Timer entspr verzögern.

von Peter D. (peda)


Lesenswert?

Meistens hat man ja in solchen Boliden eh nen Timertick ständig am 
laufen, da kann man die Entprellung mit einfügen.
Bei einem OS läßt sich oft eine periodische Task mit eintragen.

Und für den Tiefschlaf mit stehendem Timer kann man den externen 
Interrupt nur zum Aufwachen benutzen.

: Bearbeitet durch User
von Heinz S. (aves_aquila)


Angehängte Dateien:

Lesenswert?

Soooo... Zur Vollständigkeit:

Gemäß den Ratschlägen und dem Artikel Entprellung: Einfacher Taster, 
habe ich die Schaltung angepasst. Kapazität und Vorwiderstände sind so 
gewählt, das bei Vcc=3.3V eine "Prellzeit" von ca. 20 ms nicht 
berücksichtigt wird. Danach taucht das Signal mit schönen sauberen 
Flanken am Schmitt-Trigger auf.

: Bearbeitet durch User
von Dietrich L. (dietrichl)


Lesenswert?

Heinz Sturrhahn schrieb:
> Und dann noch einen
> BC547C um das Signal durch eine Emitterschaltung nochmal zu invertieren.
> Ok, der letzte Schritt ist über, das ginge auch in Software.

oder mit einer noch freien Funktion der 74HC14
oder durch Schalten des Tasters nach Vcc

von Peter D. (peda)


Lesenswert?

Ich würde Q1 weglassen.
Der MC-Eingang ist mit R3 als Pullup recht hochohmig. Interrupteingänge 
sind sehr empfindlich, schon wenige ns kurze Störimpulse können sie 
auslösen.

Meistens haben MC-Eingänge schon einen Schmitt-Trigger intern, dann 
könnte U1 auch wegfallen.

Ich benutze SW-Entprellung auch, wenn das Signal prellfrei ist, aber es 
längere Leitungen zum MC sind, um Störungen auszufiltern.
Z.B. eine Alarmanlage sollte keinen Fehlalarm auslösen, wenn die 
Hausfrau den Staubsauger anschaltet.

: Bearbeitet durch User
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.