Forum: Mikrocontroller und Digitale Elektronik Schalterzustand erkennen


von Fabian (esp_at)


Angehängte Dateien:

Lesenswert?

Ich versuche, eine "Selbstabschaltung" für meinen ESP8266 zu bauen.

Ich möchte Code vor der Abschaltung ausführen. Dafür verwende ich einen 
Logic-Level-N-Channel-MOSFET, dessen Gate von einem GPIO-Pin des ESP8266 
gesteuert wird. Der GPIO-Pin wird auf HIGH gesetzt, sobald ich den ESP 
einschalte, und ich möchte ihn auf LOW setzen, sobald ich den 
Schaltzustand mit einem zweiten GPIO erkenne. Das Ein- und Ausschalten 
funktioniert größtenteils gut, aber ich habe Probleme, den Schaltzustand 
zu erkennen, da alle Schaltterminals mit einem GND Potential verbunden 
sind. Es handelt sich um einen Schiebeschalter mit 3 Terminals. Eines 
ist mit dem Batterie-GND verbunden, das Mittlere mit einem "common" GND, 
und das letzte ist mit dem MOSFET-Drain verbunden.

Gibt es eine gute Idee, den Schaltzustand zu erkennen? Meine Recherche 
hat mich in Richtung eines Spannungsteilers geführt, und das Lustige an 
dem Spannungsteiler (10k vom Erkennungs-GPIO zu 3,3 V und 3k3 vom 
MOSFET-Drain zum Erkennungs-GPIO) ist, dass er funktioniert, solange ich 
über USB-C mit meinem Laptop verbunden bin. Aber sobald ich auf meine 
Batterie umschalte, erkennt er den Schaltzustand nicht mehr.

Ich bin für jede Idee dankbar.
In folgender Darstellung habe ich versucht den Kern der Schaltung zu 
extrahieren.

von Michael B. (laberkopp)


Lesenswert?

Fabian schrieb:
> Kern der Schaltung zu extrahieren.

Die Schaltung ist Quatsch

Fabian schrieb:
> Ich versuche, eine "Selbstabschaltung" für meinen ESP8266 zu bauen.

Du könntest es so machen,,wie man es richtig macht, mit einem Taster.

Siehe Kapitelende von 
https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29.1

Wenn es unbedingt dein Schiebeschalter sein muss, versuche den ESP8266 
immer an plus zu lassen und mit dem Schalter nur in deep sleep zu 
bringen, der Schalter muss dann RST auslösen zum einschalten.

Wenn es weitere Peripherie gibt die nicht in Stromsparmodus geschickt 
werden kann, schalte ihre Versorgung oer PMOSFET ab.

von Fabian (esp_at)


Lesenswert?

Michael B. schrieb:
> Die Schaltung ist Quatsch

Danke für die 'nette' Formulierung. Schaltung funktioniert in der Sim 
genau wie sie soll. Und bringt doch den Kern der Frage drüber oder? Ich 
nehme ansonsten gerne Hilfe an, die Frage präziser zu formulieren - 
danke.

Ja es muss ein Schiebe schalter sein, nein deepSleep ist keine Option. 
Gerne Ideen wie man anders eine verzögerte Abschaltung hinbekommt, die 
mir erlaubt vorher Code auszuführen. Aber DeepSleep ist leider aus 
mehreren Gründen nicht möglich.

von Helmut -. (dc3yc)


Lesenswert?

Wenn du es nicht so machen kannst (oder willst), wie es alle machen, 
weil es sinnvoll ist, sage uns doch, warum nicht? Und noch eine 
Anmerkung: dein "Schaltplan" ist eine Zumutung, ein Stück Papier mit 
einer abfotografierten Bleistiftzeichnung wäre übersichtlicher.

von Fabian (esp_at)


Lesenswert?

Weil der wake aus deepSleep(0) auf vielen ESP8266 Chips nicht richtig 
funktioniert, weil wake aus deepSleep mit timer bei vielen ESP8266 Chips 
nicht richtig funktioniert und aus Sicht des Akku Verbrauchs keinen Sinn 
macht. Weil ich eine richtige vollständige Abschaltung erreichen muss. 
Hoffe das erklärts

von Michael B. (laberkopp)


Lesenswert?

Fabian schrieb:
> und aus Sicht des Akku Verbrauchs keinen Sinn macht

Na ja, 10uA ist weniger als die Akku-Selbstentladung.

Die korrekte Art ist:
1
 +---+----------+-------+
2
 |   |          |       |
3
 |   |       +-----+    |S
4
 |   |    +--|Delay|o--|I PMOSFET
5
Bat  |    |  +-----+    |
6
 |   o\   |     |       |
7
 |     o--+-10k-(----ESP8266
8
 |   o          |       |
9
 |   |          |       |
10
 +---+----------+-------+
und der Kern ist die Delay Ausschaltverzögerungsschaltung. Die liegt VOR 
der Stromabschaltung und bleibt immer an der Batterie. Ein NE555 wäre 
also fehl am Platz. Ein CMOS MonoFlop wie CD4538 braucht 5nA, da kann 
man nicht meckern. Ich weiss aber nicht, ob man mit ihm ohne weitere ICs 
die Impulsform hinkriegt. Ein simples RC Glied schaltet den MOSFET nur 
schleichend ab und invertiert nicht. Ein RC Glied gefolgt von einem 
Schmitt-Trigger Inverter wie 74LVC1G14 verzogert auch das einschalten, 
eventuell egal, oder man überbrückt den R vor dem C mit einer Diode für 
unverzügliches Einschalten. Delay ist dann so:
1
  +--R--+
2
--+     +--+---|S>o-- 
3
  +-|>|-+  |  74LVC1G14 
4
           C
5
           |
6
          GND
Der 10k Vorwiderstand vor dem ESP Eingang mit dem der ESP ein 
Ausschalten erkennt schützt den ESP beim einschalten wenn der MOSFET 
noch nicht durchgeschaltet hat.

: Bearbeitet durch User
von Enrico E. (pussy_brauser)


Angehängte Dateien:

Lesenswert?

Fabian schrieb:
> Gerne Ideen wie man anders eine verzögerte Abschaltung hinbekommt, die
> mir erlaubt vorher Code auszuführen.

Mit der Schottkydiode SB130 kann man das Erkennen vom Abschalten 
realisieren und alle Codes können noch in Ruhe ausgeführt werden, egal 
wie lange das dauert. Durch den Einsatz der beiden Transistoren kann man 
sogar auf einen Logik Level N-MOSFET verzichten.

Aber ein Logik Level N-MOSFET ist auf jeden Fall besser, wenn man einen 
zur Hand hat!

von Peter N. (alv)


Lesenswert?

Es soll nach dem Tasterdruck noch irgendwelcher Code ausgeführt und dann 
abgeschaltet werden?

Warum schaltet man dann am Ende des Codes nicht einen Pin, der dem µC 
den Strom abschaltet?

von Fabian (esp_at)


Lesenswert?

Danke für die Vorschläge!

Die Schottky Diode war die einfachste Lösung und funktioniert wunderbar. 
Hatte noch IN5B19 da und verbaut. Außerdem konnte ich mir die Verbindung 
zu 3V3+ sparen, indem ich den internal pullup des GPIO benutze.

Danke für Hilfe :)

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.