Double-Tap Button

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    Ich plane gerade mit dem ESP8266 einen Button zu erstellen. Dieser soll sich während des normalen Betriebs im Deep-Sleep befinden und wenn er betätigt wird seine Aktionen ausführen und wieder in den Deep-Sleep zurück kehren.

    Das ist an sich erstmal kein Problem:
    - RST mit 3,3V über einen 10k Widerstand verbinden
    - Button mit RST und GND verbinden

    Dadurch wird der ESP beim betätigen des Buttons zurückgesetzt.

    Das Problem ist nun, dass ich z.B. auch "Doppel-Klicks" ausführen können möchte. Wenn ich bei oben genanntem Aufbau des Button 2x betätigen würde, würde er sich beides mal zurücksetzen / neu starten. Ideal wäre es natürlich, wenn er nach einem ersten betätigen x Sekunden auf eine weitere Eingabe warten würde und wenn nichts weiteres geschieht, er in den Deep-Sleep geht.

    Meine Frage ist nun:
    Kann ich es mit einem Button machen, dass der ESP, wenn er sich im Deep-Sleep befindet, zurücksetzt, wenn der Button betätigt wird und bei einem 2. direkt darauf folgenden Klick er diesen lediglich "realisiert", ohne dass der ESP zurückgesetzt wird?

    Viele Grüße

  • Du müsstest den Button im aktiven Zustand vom Reset trennen und das Signal auf einen Eingang umlegen. Im Sleep-Zustand müsste der Button direkt auf Reset gehen. Ich stell mir das so vor, dass du den Button mit einem größeren Widerstand auf Reset legst und vor den Widerstand einen Transistor, den du im Betrieb mit einem High-Ausgang auf einen Eingang ziehst, wo du einen zweiten Button-Druck erkennen kannst. Kann sowas klappen?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ja, so in etwa habe ich mir das vorgestellt.
    Jedoch sind meine Kentnisse in Elektrotechnik recht begrenzt.
    Kannst du mir eventuell bei den einzelnen Bauteilen helfen?

  • Meine Idee ist, die normale Resetschaltung im Betrieb um eine nicht unterbrechbare Stromversorgung des Resetpins und einen Eingang zur Erkennung des zweiten Buttendrucks zu ergänzen:

    Im Sleep-Modus wird Reset über einen 10K Widerstand auf 3,3 V gehalten (da muss noch irgendwo ein Kondensator rein, um das zu stabilisieren, hab ich gelesen)
    Der Button zieht diese 3,3 V auf GND, gleichzeitig zieht der 47K Widerstand den Reset auf GND und löst den Reset aus. (Out ist LOW, da der 8266 im Tiefschlaf ist.) (So weit wie gehabt)

    Wenn der Prozessor läuft schaltest du softwareseitig als erstes den Ausgang auf High - er versorgt dann Reset mit 3,3 V.
    Durch die Diode kann der Button diese 3,3 V nicht resetten.

    Zugleich zieht der 1K Pullup-Widerstand den Eingang auf High.
    Ein zweiter Buttondruck wird am Eingang als Low erkannt. Ein Reset wird nicht ausgelöst.

    Ergänzen könnte man noch einen 1K-Schutzwiderstand an IN und evtl. einen Vorwiderstand zwischen Out und Reset - aber ich glaube, der ist entbehrlich.

    Ich hab die beiden Widerstände am Reset recht hochohmig gewählt, damit im Tiefschlaf wenig Energie verbraucht wird.
    Der Eingang (In) ist selbst hochohmig, nehme ich an - da spielt das wohl keine große Rolle. Aber hier ginge statt 1K auch 4,7 oder 10.

    Würde das so ungefähr funktionieren oder hab ich da irgendwo einen groben Denkfehler?
    (Über die Widerstände 10K und 47K fließen immer noch 0,06 mA - ungefähr so viel wie der 8266 im deep sleep braucht - die würde ich gerne auch noch wegkriegen. Vielleicht geht es auch ohne den 47K-Widerstand. Kommt drauf an, wie schnell die Spannung an Reset (hinter der Diode) einbricht, wenn die 3,3 V auf GND gezogen werden.)

  • Vielleicht besser so:
    Ein selbstleitender P-Kanal-Mosfet erlaubt den Reset, wenn der 8266 im deep sleep ist.
    Nach dem Aufwachen den Mosfet über den Ausgang sperren, so dass kein Reset mehr gemacht werden kann.
    Dafür ist dann der Eingang schaltbar. (Notfalls noch einen Pullup davor.)

    Geht das?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!