Hallo zusammen!
Ich habe einen namenlosen "Türöffnungssensor" (zweiteilig: am einen
Stück führen zwei gleichfarbige Drähte raus, die Gegenseite scheint der
Magnet zu sein, laut Bildern im Netz evtl MC38). Den würde ich gerne an
meinen Raspi anschliessen. Nun frag ich mich, was kann man da groß
falsch machen?
Beide Kabel an den Raspi, einmal Masse und einmal GPIO und einen
Widerstand dazwischen, Softwareseitig seh ich kein Problem, nur mit
Hardware hab ichs nicht so. Aber man will ja lernen, daher meine Bitte
um Hilfestellung. Verstanden hab ichs bisher Folgendes. Der Sensor
sendet 1 wenn der Schalter geschlossen ist, dazu muss der eine Draht auf
GRD, der andere an einen GPIO gelegt werden. Man sollte aber
vorsichtshalber an einem der Kabel einen Widerstand dazwischen setzen.
Nun meine Frage warum nur an einem und nicht an beiden Enden? Hier
spielt es wahrscheinlich keine Rolle, aber wenn man empfindlichere
Technik hätte, würde man dann zwei Widerstände verbauen? Und welche
Widerstandsgröße wäre hier angemessen? 10k?
Der Schalter (geschlossen) bildet einen geschlossenen Stromkreis. Wenn
du diesen an GND und einen GPIO hängst und keinen Widerstand in Serie
schaltest, zerstörst du u.U. den GPIO, wenn dieser als Output definiert
ist und Logic HIGH ausgibt.
Wenn der GPIO aber nur als Input (in deinem Fall ja auch nötig)
betrieben wird, brauchst du keinen Widerstand.
Jedoch benötigst du einen Pull-Up Widerstand, damit deine Schaltung
funktioniert - entweder den internen des GPIO oder manuell zugeschaltet.
Siehe:
https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm
Bei geschlossenem Schalter liest der GPIO 0 (LOW) und bei geöffnetem
Zustand eine 1 (HIGH).
Widerstandswert spielt keine Rolle. Ich verwende dazu immer 10k (1k -
50k sollten funktionieren)
Danke. Aber leider bin ich nun verwirrter als vorher. Das mit den Pull
up/down hatte ich schon mal gelesen, daher ja die Idee 10.000 Ohm zu
nehmen.
Nochmal nachgefragt:
Widerstand mit 10k wäre richtig?
Widerstand gehört zwischen Schalter und GIO?
Ein Widerstand reicht?
Was würde passieren, wenn man mehrere Widerstände einbaut?
Das zweite Kabel auf GRD? Nicht auf 3.3V?
Mick schrieb:> Der Schalter (geschlossen) bildet einen geschlossenen Stromkreis.> Wenn du diesen an GND und einen GPIO hängst und keinen Widerstand in> Serie schaltest, zerstörst du u.U. den GPIO, wenn dieser als Output> definiert ist und Logic HIGH ausgibt.> Wenn der GPIO aber nur als Input (in deinem Fall ja auch nötig)> betrieben wird, brauchst du keinen Widerstand.>> Jedoch benötigst du einen Pull-Up Widerstand, damit deine Schaltung> funktioniert - entweder den internen des GPIO oder manuell zugeschaltet.> Siehe:> https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm>> Bei geschlossenem Schalter liest der GPIO 0 (LOW) und bei geöffnetem> Zustand eine 1 (HIGH).>> Widerstandswert spielt keine Rolle. Ich verwende dazu immer 10k (1k -> 50k sollten funktionieren)
10k sind auch bei längeren Leitungen ok (Pull-Up und Leiterschleife
bilden einen Spannungsteiler und reduzieren damit den Highpegel).
Ich würde noch zwischen den 10k Pull-Up und den GPIO einen gleich großen
Vorwiderstand einfügen und einen Kondensator von 100nF zwischen GPIO und
GND schalten. (der interne Pull Widerstand sollte abgeschaltet sein)
10k und 100nF ergeben eine Zeitkonstante von 1ms und sollten
Kontaktprellen und kurze Störungen unterdrücken. Bei Bedarf kann der
Kondensator und/oder Vorwiderstand noch größer gewählt werden.
Walter schrieb:> Widerstand gehört zwischen Schalter und GIO?
Der Pull-Up gehört zwischen Eingang und positiver Versorgungsspannung.
Zwischen Eingang und GPIO kann noch ein Vorwiderstand geschaltet werden
(wie in meinem vorangegangenen Post beschrieben).
Diese RC Kombination schützt den GPIO vor Störimpulse, Überspannung und
Kontaktprellen.
Walter schrieb:> Das zweite Kabel auf GRD? Nicht auf 3.3V?
Der zweite Anschluss der Leitung gehört bei einem Pull-Up auf GND.
Walter schrieb:> Nochmal nachgefragt:> Widerstand mit 10k wäre richtig?> Widerstand gehört zwischen Schalter und GIO?> Ein Widerstand reicht?> Was würde passieren, wenn man mehrere Widerstände einbaut?>> Das zweite Kabel auf GRD? Nicht auf 3.3V?
Du hast es nicht verstanden.
In deinem Sensor ist vermutlich ein Reedkontakt drin. Wenn dem so ist,
dann sollte es etwa so aussehen:
1
VCC VCC
2
+ +
3
| |
4
------------+ .-.
5
| | |
6
| | | 2k2 ... 4k7
7
| '-'
8
| | ___
9
GPIO o-----o----|___|----.
10
| |
11
| 220R o
12
------------+ '\
13
| \
14
=== o \
15
GND |
16
===
17
GND
18
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
Der Pullup (2k2...4k7) ist notwendig, um bei offenem Schalter am Eingang
HIGH zu erzeugen.
Der 220R ist sinnvoll, falls du nicht garantieren kannst, dass der
GPIO immer ein Eingang ist zum Schutz vor einem Kurzschluss durch den
Schalter. Kannst du das, ist er überflüssig.
Natürlich kann man das auch umgekehrt beschalten: den PU als PD nach
GND, dafür den Schalter in Richtung VCC. Fur die Auswertung ist das
egal, in SW kann man beide Varianten dem richtigen Zustand zuordnen.
Übrigens: den obigen Vorschlag mit den internen PUs oder extern relativ
hochohmig kann ich nicht unterstützen. Oft ist der Schalter mit einem
längeren Kabel angeschlossen und da sind niederohmige Widerstände als
PU/PD besser, weil sie Störeinflüsse verringern. Aus dem selben Grund
auch die Verwendung der internen PUs nicht.
GEKU schrieb:> Ich würde noch zwischen den 10k Pull-Up und den GPIO einen gleich großen> Vorwiderstand einfügen und einen Kondensator von 100nF zwischen GPIO und> GND schalten.
Ja, es ist besser, zwischen dem PU und dem Eingang den R zu legen. Der
kann dann schon hochohmiger sein.
Die 10k PU halte ich für zu hoch. Bei der Variante würde ich dann max.
1k wählen.
Auch die 100nF sind nur zulässig, wenn die Anstiegszeit dadurch nicht
außerhalb der Eingangsspezifikation des µC kommt.
@HildeK: "Du hast es nicht verstanden." stimmt. Sonst hätte ich ja auch
nicht gefragt ;)
Was ich in Deiner Zeichnung noch nicht verstanden habe: warum der
2k2/4k7 und warum der 220er. Gehe ich richtig in der Annahme, dass ich
mit dem oberen Widerstand den Stromfluss von der Stromquelle zu den GPIO
begrenze? Sind dann 4k nicht zu viel Freiraum? Ich meine gelesen zu
haben, dass man in solchen Fällen 1k verbauen soll (aber keine Ahnung
wieso und ob das überhaupt stimmt). Was ist dann der 220?
@GEKU: Danke für die Erklärung, ich glaube damit komme ich noch besten
klar. Transitoren habe ich aber nicht hier. Schlimm? Mich würde ein
"false postive" Fehlalarme erstmal nicht weiter stören. Mir kommt es nur
darauf an, mitzubekommen, wenn der Kontakt unterbrochen wird.
@Alle: Was ist an folgendem Bild falsch? Und vorallem warum? Was
passiert wenn ich das so baue?
-------------
| _
Raspi GPIO |---------|___|-----
| |
| R1: 220 Ohm |
Raspi 3.3 V | |
++++ |\
| + \ Schalter
------------ + | \
+ _ |
+++++++|___|++++|
R3: 1k Ohm |
-
| | R2: 10k Ohm
-
|
|
===
GND
Hi,
kenne Raspi nicht.
Aber mit anderen µPs wird es wohl ähnlich sein.
General purpose Input output = GPIO
Also, ein Port an einem µP kann als Eingang oder Ausgang geschaltet
werden.
Das hängt von Deinem Programm ab.
Die "Software" kann aber auch im Verlauf des Programms/Betriebs
"umfunktionieren". Dann wird ein Eingang zu einem Ausgang und umgekehrt.
Bei auch irgendwie aufteten könnender Fehlfunktion sollte eine
Vorsichtsmaßnahme getroffen werden, damit der Port nicht kaputt geht.
Deswegen nie den Port direkt ohne Widerstand nach Vss oder Vcc mit einem
Schalter schalten.
Das und noch viel mehr war alles oben schon gesagt worden.
> @Alle: Was ist an folgendem Bild falsch? Und vorallem warum? Was> passiert wenn ich das so baue?>
Wozu den R2 noch reinbauen?
Und, Du hast doch überhaupt kein "Potenzial", wenn der Schalter geöffnet
ist. Der Port hängt dann völlig in der Luft. Es sei denn, Du hast
softwaremäßig einen Pullup-Widerstand "enabled". Der reicht aber oft
nicht aus, um eine einwandfreie Funktion zu gewährleisten.
Wie sehen die High/Low-Pegel beim Raspi überhaupt aus?
Wann schaltet der Eingang auf High, wann aud Low.
Die Spec. muss ich auch erst einmal lesen. Solltest Du auch.
Bis dann...
ciao
gustav
Walter schrieb:> Was ich in Deiner Zeichnung noch nicht verstanden habe: warum der> 2k2/4k7 und warum der 220er.
Die 2k2/4k7 ist der Pullup. Wenn dein Schalter offen ist, liefert der
HIGH-Pegel an den GPIO.
Die 220R sollen verhindern, dass der GPIO kaputt geht, wenn du folgendes
fehlerhaft machst:
- der GPIO ist (temporärer Programmierfehler) auf Ausgang geschaltet und
es liegt HIGH an. Du drückst die Taste: Kurzschluss des GPIO nach GND.
Das hat aber GEKU besser gelöst.
Walter schrieb:> Was ist an folgendem Bild falsch? Und vorallem warum? Was> passiert wenn ich das so baue?
Wenn dein Taster offen ist, dann ist der GPIO unbestimmt. Kann also HIGH
oder LOW oder irgendwo dazwischen sein oder sich Störsignale einfangen.
Also: Zufallsfunktion :-).
R2 und R3 sorgen für einen dauerhaften Stromfluss. Also nochmal, unter
Berücksichtigung von GEKUs Variante sollte es so aussehen:
1
VCC VCC
2
+ +
3
| |
4
------------+ .-.
5
| | |
6
| | | 1k
7
| 10k '-'
8
| ___ |
9
GPIO o---o--|___|--o
10
| | |
11
| --- o
12
------------+ --- 1n '\
13
| | \
14
=== | o \
15
GND === |
16
GND ===
17
GND
18
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
- 1k ist ein niederohmiger Pullup, der dafür sorgt, dass bei offenem
Schalter ein sicheres HIGH am GPIO liegt, auch wenn die Leitung zum
Kontakt länger ist. Kann auch 5k oder 10k sein, je höher, desto weniger
Strom und desto störanfälliger.
- wenn der Schalter geschlossen ist, fließen dann VCC/1k an Strom. Es
ist also sinnvoll, den Kontakt im Ruhezustand offen zu haben, alternativ
den 1k zu erhöhen. Wenn dann allerdings Fehlauslösungen passieren, ist
die Grenze erreicht. Man kann alternativ auch den 1k an einen weiteren
GPIO (Ausgang) anschließen und den nur kurz auf HIGH schalten, wenn man
den Kontaktzustand lesen will. Das spart Strom, wenn er im Ruhezustand
geschlossen sein sollte.
- 10k schützt den GPIO vor den o.g. Fehlern. Zusammen mit dem 1n (kann
auch 10n sein) bildet er ein Filter gegen Störspitzen.
In dem Bild kannst du auch den Kontakt und den 1k vertauschen. Dann ist
halt die Logik invertiert.
HildeK schrieb:> Auch die 100nF sind nur zulässig, wenn die Anstiegszeit dadurch nicht> außerhalb der Eingangsspezifikation des µC kommt.
Ich habe die Schaltung mit LtSpice simuliert.
Ich bin von einer Leiterschleife von 200 Ohm (2x 100 Ohm) ausgegangen.
Das Prellen der Reedkontakte habe ich mit 0,2ms angenommen.
10nF liegen fürs Entprellen an der Grenze, daher bin ich von 100nF
ausgegangen.
Bei einem Schmitt Triggereingang sollte aufgrund der Mitkopplung die
Anstiegszeit kein Problem darstellen (das Ausgangssignal kann nur 0 oder
3.3V sein, siehe Simulation)
Der Schmitt-Trigger wurde in der Simulation mit einbezogen.
Die ASC Datei liegt bei, somit könne die Werte bei Bedarf noch variiert
werden.
Der Kontakt wurde mit einer geschalteten Spannungsquelle mit
Schottkydiode simuliert. Ist die Spannungsquelle 0V, dann ist der
Kontakt geschlossen, hat die Spannungsquelle 3,3V, dann ist die
Schottkydiode gesperrt und somit der Kontakt offen.
Karl B. schrieb:> kenne Raspi nicht.> Aber mit anderen µPs wird es wohl ähnlich sein.
aber Raspis sind sensibel, die internen Schutzdioden sind fast nicht
vorhanden oder nur parasitär!
Der Raspi kann i.d.R. nur 3mA schalten und Ports können auch mal Output
und low sein, ist der pullup kleiner als 1k fliesst halt zu viel Strom
in den Port.
Deswegen nicht mit anderen µC zu vergleichen.
Karl B. schrieb:> Wozu den R2 noch reinbauen?
eben überflüssig!
den pullup größer zu machen oder den internen zu nutzen ist möglich
lässt aber mehr Störimpulse auf langen Leitungen durch.
Die Abfrage auf 0V also Kontakt nach GND geschlossen ist für alle
sicherer.
Diese Schaltung habe ich für einen extern Türkontakt realisiert.
Die Schaltung sollte folgende Eigenschaften aufweisen:
- unempfindlich gegen Störungen
- sicher bis 48V Spannungen am Eingang, kurzzeitig mehr
- über 200 Ohm Schleifenwiderstand
- Erkennung von Änderungen des Kontaktzustandes innerhalb von 10ms
Der Kontakt hängt am Eingang P1.0 des MSP430, so das auch die Spannung
gemessen werden kann. Damit wären eine Überwachung der Kontaktschleife
möglich.