Forum: Mikrocontroller und Digitale Elektronik Potentialfreien Kontakt stromsparendst auswerten


von Unwichtig (Gast)


Lesenswert?

Hallo,
ich will mit einem Mikrocontroller und einer Knopfzelle möglichst 
stromsparend einen Reedkontakt auswerten. Meine Idee ist momentan, den 
Reedkontakt zwischen 2 Pins zu schalten. Einen Pin als Ausgang mit low, 
den Anderen als Eingang mit pull-up. Bei offenem Kontakt fließt 
praktisch kein Strom, der pull-up zieht den Eingang auf high. Ich kann 
einen pin-change-interrupt auf low oder fallende Flanke nehmen, um das 
Schließem des Reedkontaks zu detektieren.

Bei geschlossenem Reedkontakt fließen dann aber immer ca. 50 µA durch 
den pull-up. Viel zu viel für eine Knopfzelle. Jetzt kann ich natürlich 
mit nahezu beliebiger Frequenz (z.B. minütlich) den pull-up einschalten 
und dann kurz messen; also praktisch pollen. Auch nicht wirklich schön.

Nun habe ich schon oft gelesen, daß unbeschaltete Eingänge völlig 
undefiniert hin- und herschwingen. Kann man sich darauf verlassen, daß 
der Pin auch wirklich die Grenzen zwischen high und low passiert? Dann 
könnte ich ja einfach den pull-up ausschalten, der pin wird ja bei 
geschlossenem Reedkontakt auf low gezogen. Öffnet der Reedkontakt, 
schwingt der Eingang munter hin- und her, irgendwann auch auf high. Im 
Pin-change-interrupt (für high oder steigende Flanke) schalte ich den 
pull-up an und messe eine kurze Zeit, um wirklich ganz sicher zu sein.

Funktioniert sowas? Wenn ja, zuverlässig? Oder ist das Roulette, auchin 
Bezug auf die Zeit? Undefiniert ist halt undefiniert...
Wie macht man das sonst besser?

von MaWin (Gast)


Lesenswert?

Unwichtig schrieb:
> Funktioniert sowas?

Nein.

> Wenn ja, zuverlässig

Schon gar nicht.

Umschaltkontakte lassen sich mit 0 Strom auswerten.

von hinz (Gast)


Lesenswert?

Externen Pullup (4,7M) nehmen, Reedkontakt und Zuleitung schirmen.

von Optimist (Gast)


Lesenswert?

Unwichtig schrieb:
> Funktioniert sowas?

Das kommt drauf an, wie lang die Antenne ist, wie stark die Sender in 
deiner Umgebung sind, welche Modulationsart sie verwenden und was gerade 
gesendet wird.

von Unwichtig (Gast)


Lesenswert?

MaWin schrieb:
> Umschaltkontakte lassen sich mit 0 Strom auswerten.

Ja, aber es ist halt nur 1 Kontakt da. Gut, man könnte auch einen Öffner 
und einen Schließer gleichzeitig auswerten, ist aber auch nicht schön.

hinz schrieb:

> Externen Pullup (4,7M) nehmen, Reedkontakt und Zuleitung schirmen.
Das wären dann gut 0,6 µA im ungünstigen Fall; das sollte zu verkraften 
sein.

Optimist schrieb:
> Das kommt drauf an, wie lang die Antenne ist, wie stark die Sender in
> deiner Umgebung sind, welche Modulationsart sie verwenden und was gerade
> gesendet wird.
Undefiniert halt, ich weiß es ja leider selber...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Unwichtig schrieb:
> einen Reedkontakt auswerten.
Wie oft schaltet der?
Und wie lang ist er dann offen bzw. geschlossen?

: Bearbeitet durch Moderator
von c-hater (Gast)


Lesenswert?

Unwichtig schrieb:

> Nun habe ich schon oft gelesen, daß unbeschaltete Eingänge völlig
> undefiniert hin- und herschwingen.

Da fehlt das Wörtchen "können".

> Kann man sich darauf verlassen, daß
> der Pin auch wirklich die Grenzen zwischen high und low passiert?

Wenn sie "schwingen", dann ja. Tatsächlich schwingen sie nämlich 
überhaupt nicht. Schwingen tut allenfalls das EM-Feld, was die Pins dazu 
bringt, zwischen H und L zu wackeln.

Und übrigens: selbst wenn man sich darauf verlassen könnte, dass offene 
Pins sicher "schwingen": für dieses "Schwingen" wird natürlich auch 
Energie benötigt. Sprich: vom leichten Regen kommst du hier in eine gut 
gefüllte Traufe...

Oder anders ausgedrückt: brutal schwachsinniger Ansatz.

von D00fi (Gast)


Lesenswert?

Viele Kontakte brauchen einen Mindeststrom!
Auch Reedrelais.

Den externen Pullup, der auch noch groesser als 4.7 M sein kann,
also mit einem kleinen Kerko (10 nF) stuetzen.
Der sorgt dann fuer einen sicheren Mindeststrom.
Wenn Geschwindigkeit wichtig wird, taugt das natuerlich nicht.

Den Pullupwiderstand kann man nach der hoechsten zu erwartenden
Eingangsrate dimensionieren.
Bei sehr grossen Werten, wird das dann aber auch anfaellig
gegen feuchten Staub. Also nicht uebertreiben.

von Jens M. (schuchkleisser)


Lesenswert?

Zwei Lösungen seh ich da:
a)
genau andersrum: der Controller schaltet den anderen Pin als Treiber 
H/L, der Eingang behält seinen Pullup.
In der Ruhephase ist der Ausgang H, der Kontakt würde H auf Pullup 
legen, das braucht keinen Strom.
In der Aktivphase Ausgang auf L, wenn der Eingang mitgeht ist der 
Kontakt geschlossen.
Vorteil: Strom nahezu Null, Nachteil: der Kontakt wird nur im festen 
Raster abgefragt.

b)
Ein Wechsler, mit jedem Anschluss an einen Pin des µC.
Der mittlere ist ein Eingang mit Pullup, die beiden Enden sind Ausgänge 
wobei einer H und einer L ist. Geht auch mit einem Ausgang und einem 
Inverter.
Der Trick ist dann, den Eingang per Interrupt auf H->L abzufragen und 
die Ausgänge dann umzuschalten, so das der jetzt aktive Pin auch wieder 
H wird (H zu Pullup = Null Strom) und der offene Pin L.
Nachteil: Wechslerkontakt und 3 Pins am µC nötig. Vorteil: Null Strom 
und sofortige Reaktion.

von Anselm (Gast)


Lesenswert?

meine Idee:

schalte mit dem Reed-Kontakt deinen µC ein (in die Versorgungsleitung 
damit)
und dein Programm notiert im EEPROM was du so notiert haben möchtest.
So läuft die Schaltung ewig weil 0 Stromverbrauch so lange nichts 
passiert..

Anselm

von HildeK (Gast)


Lesenswert?

Lothar M. schrieb:
> Wie oft schaltet der?
> Und wie lang ist er dann offen bzw. geschlossen?

Und
- wie schnell muss eine Änderung erkannt werden?
- was wird mit dieser Erkenntnis dann ausgelöst?

Mal so als Beispiel, wenn die Zeiten nicht kritisch sind:
- Annahme: eine Abfrage alle z.B. 100ms (oder welche Zeit auch immer) 
würde ausreichen
- Am Eingang internen PU aktivieren
- den Ausgang im Ruhezustand auf HIGH setzen
dann wiederholt:
1. den Ausgang auf LOW schalten, den Eingang lesen, den Ausgang wieder 
auf HIGH schalten. Das geht im µs-Bereich (oder ms, wenn man ihn mit 
sehr langsamem Takt betreibt).
2. vorgesehene Aktion ausführen, wenn der Kontakt geschlossen bzw. 
geöffnet war/wurde
3. für 100ms schlafen legen
4. nach dem Aufwachen weiter mit 1.

Es ist natürlich das Pollen, das du nicht so wirklich schön findest. Die 
genannten hochohmigen Widerstände sind natürlich sparsam im 
Stromverbrauch, aber dein µC braucht auch Strom.

von Unwichtig (Gast)


Lesenswert?

Lothar M. schrieb:
> Unwichtig schrieb:
>> einen Reedkontakt auswerten.
> Wie oft schaltet der?
> Und wie lang ist er dann offen bzw. geschlossen?

Das Ganze soll im Rahmen einer startenden Smarthome-Geschichte den 
Status von Fenster und Türen überwachen, also wohl nur einige Male am 
Tag schalten. Die Öffnungs- und Schließzeiten ergeben sich daraus. 
Sonderlich schnell braucht die Auswertung das daher auch nicht erfassen; 
so 2-3 Minuten würden mir wohl reichen.

Im power-down mit integriertem 10 kHz-Oszillator würde der µC laut 
Datasheet ca. 1,5 µA verbrauchen. Ohne den Oszillator ca. 0,4 µA, der 
WAKEUP-Pin am Reedsensor würde ihn noch wecken, aber ich möchte ihn alle 
paar Stunden mal wecken, um aktiv durch messen den Reedkontaktstatus 
verifizieren zu können (wegen "entprellen" bei auf/zu und generellem 
anfänglichem Mißtrauen der Schaltung...). Problem ist, wie gesagt, die 
Knopfzelle. Sein Wissen preisgeben soll er dann per nRF24L01+ oder 
RFM69. Ähnlich dem TINO 
(https://forum-raspberrypi.de/forum/thread/41558-tino-batteriebetriebener-funksensor-weiterentwicklung/), 
nur mit anderer Hardware.

Nach bisherigem Stand würde wohl ein Reedsensor als Wechsler meine 
Wünsche erfüllen, der kostet aber auch gleich knapp 5€ pro Stück und 
Steinecker 11126 habe ich mal reichlich günstig gebraucht bei Äbäh 
geschossen.
Mein Favorit ist derzeit hochohmiger externer pull-up. werde ich die 
nächsten Wochen mal testen. Erstmal will ich eine minimalistische 
nRF24-Software schreiben, um überhaupt die Reichweite zu testen. Sollte 
das nicht klappen, teste ich die RFM69.

von Stefan F. (Gast)


Lesenswert?

Unwichtig schrieb:
> der kostet aber auch gleich knapp 5€ pro Stück

Du kannst ja die Batteriekosten dagegen rechnen, für sagen wir mal 20 
Jahre Nutzungsdauer.

von Jens M. (schuchkleisser)


Lesenswert?

Unwichtig schrieb:
> der kostet aber auch gleich knapp 5€ pro Stück

Als loses Teil 3€ bei reichelt: 
https://www.reichelt.de/reed-sensor-175-v-0-5-a-wechsler-mk23-90c2-p151863.html?&nbc=1
Googlesuche ca. 30 Sekunden, also sicher noch Potential nach unten.

Für 40ct mehr mit Anschraubflansch, leider drei Strippen statt einer 
Leitung: 
https://www.reichelt.de/reed-sensor-59140-serie-1-co-5-w-litt-59140-030-p260414.html?&nbc=1

von Axel S. (a-za-z0-9)


Lesenswert?

Unwichtig schrieb:
> ich will mit einem Mikrocontroller und einer Knopfzelle möglichst
> stromsparend einen Reedkontakt auswerten.

Anstatt da irgendwas zu basteln könnte man auch sein Gehirn verwenden 
und einen zweiten Magneten vorsehen. Und schon wird aus den Öffner ein 
Schließer.

von kenny (Gast)


Lesenswert?

Unwichtig schrieb:
> Das Ganze soll im Rahmen einer startenden Smarthome-Geschichte den
> Status von Fenster und Türen überwachen

Da würde ich mir mal anschauen wie die bereits erhältlichen Produkte 
aufgebaut sind. Für diesen Fall gibt es unzählige Tür/Fenster Kontakte.

von Lutz (Gast)


Lesenswert?

Axel S. schrieb:
> Unwichtig schrieb:
>> ich will mit einem Mikrocontroller und einer Knopfzelle möglichst
>> stromsparend einen Reedkontakt auswerten.
>
> Anstatt da irgendwas zu basteln könnte man auch sein Gehirn verwenden
> und einen zweiten Magneten vorsehen. Und schon wird aus den Öffner ein
> Schließer.

Interessant. Erklär doch mal. Und vor allem, wo am Fenster du ihn 
anbringst.
Wie auch immer: Ein zweiter Magnet ist ja kein basteln...?

von Peter D. (peda)


Lesenswert?

Nimm einen hochohmigen Pullup, z.B. 4,7M.
Wird high erkannt, dann schalte noch einen niederohmigen Pullup dazu, 
z.B. 4,7k. Damit ist der Eingang unempfindlich gegen Störungen.
Das Umschalten macht z.B. ein ATtiny13 im Power-down (<1µA) über den 
Pin-Change Interrupt.
Der höhere Strom über den 4,7k fließt ja nur kurzzeitig vom Schließen 
des Kontaktes bis zum Ausführen des Interrupts.
Der mittlere Stromverbrauch bleibt also <1µA.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>>> einen Reedkontakt auswerten.
>> Wie oft schaltet der?
>> Und wie lang ist er dann offen bzw. geschlossen?
> also wohl nur einige Male am Tag schalten.
Ich betreibe einen Attiny seit fast 10 Jahren in einer Art "Eieruhr" an 
einer CR1620 Knopfzelle: der Watchdog weckt den µC alle 500ms auf, dann 
wird am Tasterpin der µC-Pullup eingeschaltet und kontrolliert, ob der 
angeschlossene Taster gedrückt ist. Wenn ja, dann wird die Eieruhr 
"gestartet". Wenn nein, dann wird der Portpin auf low geschaltet. Und in 
beiden Fällen wird wieder Schlafen gegangen (also läuft auch die Eieruhr 
an sich die meiste Zeit im Sleepmodus).

von m.n. (Gast)


Lesenswert?

D00fi schrieb:
> Viele Kontakte brauchen einen Mindeststrom!
> Auch Reedrelais.

Stimmt. Einige pA sollte man schon fließen lassen.

von Unwichtig (Gast)


Lesenswert?

Lothar M. schrieb:
> Ich betreibe einen Attiny seit fast 10 Jahren in einer Art "Eieruhr" an
> einer CR1620 Knopfzelle: der Watchdog weckt den µC alle 500ms auf, dann
> wird am Tasterpin der µC-Pullup eingeschaltet und kontrolliert, ob der
> angeschlossene Taster gedrückt ist.

Wenn ich mich jetzt nicht total verrechnet und das Datenblatt 
mißverstanden habe, wird das meine Lösung. Doch öfter mal Rechnen, statt 
dem Gefühl zu folgen...

Wenn der µC jede Minute aufwacht, den pull-up einschaltet, den Pin liest 
und wieder schlafengelegt wird, komme ich auf einen Durchschnittsstrom 
deutlich geringer als mit der Variante großer externer pull-up. Irre. 
Hätte ich nie gedacht. Und dann noch zuverlässiger im Ergebnis. Zwar 
doch polling, aber bei dieser Anwendung ja egal.

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.