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
Heinz Sturrhahn schrieb: > Hardware-Entpreller. Meinst Du nicht, das der 10µF-Kondensator für den Schalter etwas "hard" ist?
So ist das aber kein Tiefpass, da du den Kondensator mit dem Taster kurzschliesst. Besser siehe: Entprellung
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.
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.
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.
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.
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.
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
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.
>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.
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.
@Heinz Schau Dir mal das Konzept: Umschalter mit nachfolgendem FF an wenn Du nicht abprallen willst. Und spar Dir doch bitte summarische Rundumschläge!
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
@ Heinz Ich erinnere mich noch schwach daran, dass das Dein Wunsch war. Natürlich kannst Du das FF auch diskret aufbauen;-)
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
@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.
@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.
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! ;-)
>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.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.