PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängeralarm. Digitale Pins - wie richtig verbinden?



coupe70
01.02.2019, 21:34
Hallo Forum!
Ich bin erst vor kurzer Zeit auf NodeMCU gestoßen und habe mich etwas eingelesen.
Die Programmierung ist kein Problem, aber elektrotechnisch bin ich komplett unterbelichtet
und bräuchte etwas grundlegende Hilfe bei einem an sich ganz einfachen Projekt.

Ich habe ein Device (Details egal), an dem eine zweipolige Miniklinke hängt.
Der eine Pol GND, der andere Pol liefert je nach Zustand 0V (aus) oder 3V (an).
Ich möchte einfach nur mit einem der digitalen Pins des NodeMCU diesen Zustand auslesen.
Hab ganz viel gegoogelt und sehe vor lauter Schaltbildern und Pull-up-pull-down usw nicht
mehr durch und will natürlich nichts aus Versehen wegblasen.
Einfach an einen Pin und an GND des NodeMCU anschließen oder muss ich etwas beachten,
Widerstände dazwischen bauen oder sonst was...?

Zweiter Schritt:
Angenommen das besagte Device liefert nur 2,5V. Könnte knapp werden für ein HIGH am
NodeMCU, oder? Ich las HIGH wird ab etwa 2,475V erkannt... Was kann ich dazwischen hängen,
um eine eindeutigere Spannung zu erhalten? Ich lese immer nur was von Voltage Dividern, also
quasi das Gegenteil von dem, was ich hier brauche...
Der ADC ist übrigens keine Option, am Ende geht es nämlich um mehr als nur ein Device.

Vielen Dank für Eure Hilfe!

021aet04
02.02.2019, 10:08
Wilkommen im Forum,

digitale Ein und Ausgänge kann man direkt verbinden, ohne etwas dazwischen. Auf was man achten muss ist nur die richtige Spannung. Man darf z.B. nicht einen Ausgang mit 5V direkt an einen Eingang mit 3V anschließen, da würde man einen Spannungsteiler benötigen (der die 5V auf die 3V teilt).

Bei falscher Programmierung kann man auch etwas zerstören und zwar wenn man beide als Ausgang schaltet (wenn man z.B. 2 Mikrocontroller verbindet). Wenn ein µC auf high schaltet und der Andere auf low hat man einen Kurzschluss. Um sicherzustellen das soetwas nicht geschieht kann man einen Widerstand zwischen die beiden Controller schalten, der den Strom begrenzt.

Pullup bzw Pulldown benötigt man nur um sicherzustellen das es richtige Pegel gibt. Wenn man z.B. einen Taster hat kann man nur auf einen Pegel schalten (außer man hat einen Wechsler), also auf +U oder 0V. Dementsrechend benötigt man einen Pullup (Taster schaltet auf 0V, Widerstand geht auf +U) oder Pulldown (Taster schaltet auf +U, Widerstand geht auf 0V).


Digitale Logik (digitale ICs bzw µCs) hat fixe Pegel, die sogenannten Logikpegel. Dort gibt es einen Low- und einen Highpegel, dazwischen gibt es eine verbotene Zone. Die Logikpegel sind abhängig von der Versorgungsspannung und von der Familie (CMOS, TTL, HTL). https://de.wikipedia.org/wiki/Logikpegel

Wenn du z.B. 3,3V TTL Pegel hast, werden Spannungen unter 0,8V als low und über 2V als high erkannt. Spannungen dazwischen sind nicht zulässig. Solltest du Spannungen dazwischen haben benötigst du einen Schmitt-Trigger, den kannst du dann so konfigurieren das du z.B. Spannungen unter 1,45V als Low und über 1,55V als high erkennst. Einen kleinen Bereich zwischen low und high sollte man nehmen (Hysterese), damit dieser nicht ständig schaltet.

MfG Hannes

coupe70
02.02.2019, 10:35
Hallo Hannes,

vielen Dank für Deine ausführliche Antwort.

Den ersten Absatz verstehe ich, den letzten auch ;-)
Alles dazwischen ist vermutlich für meine Frage auch nicht so relevant bzw mir auch klar.
Ich habe einen technischen Beruf, ich weiß was das Ding tut, LOW, HIGH usw, ich weiß was digital
ist und wie man das Ding programmiert. Nur nicht, wie man es elektrotechnisch richtig verkabelt.

Dein erster Absatz scheint meine Frage zu beantworten, nur nochmal für mich Doofi zur Sicherheit.
Nehmen wir mal an ich habe ein 3V Netzteil. Das soll nichts betreiben externes betreiben und auch nicht
den NodeMCU. Ich will es einfach nur an den NodeMCU anschließen um zu gucken: Ist das Netzteil an oder aus?
Dann kann ich das ohne zusätzliche Bauteile so tun wie ich völlig dilletantisch aufgemalt habe?

Und Zusatzfrage: 3V, AN, klar, das gibt ein HIGH. Wenn es aber aus ist, 0V, gibt das dann bei der Verkabelung
ein LOW oder ist der Pin dann 'floating'....?

33973

021aet04
02.02.2019, 10:43
Kann man nicht sicher sagen ob es hochohmig ist oder du einen low Pegel hast. Wenn es intern einen Spannungsteiler gibt (für die Spannungseinstellung) wirst du einen Lowpegel haben. Macht das der Spannungsregler aber intern, könnte es sein das du so hochohmig bist das du einen Pullldown benötigst (z.B. 10k). Ich würde aber auf jeden Fall einen Pulldown einplanen, denn was passiert wenn du das NT absteckst?

Die Skizze stimmt.

MfG Hannes

coupe70
02.02.2019, 11:43
Ok, ich hab mich auch blöd ausgedrückt bei dem Versuch zu vereinfachen.
Da hängt natürlich kein Netzteil dran (wozu auch?), sondern die Buchse eines Geräts, die (aus Gründen) entweder 0 oder 3V ausspuckt.
Aber das Ergebnis ist ja das Gleiche.
Diesen Zustand muss ich abfragen und per WLAN weitergeben (DAS ist alles schon programmiert).
Könnte ich das, was Du nicht sicher sagen kannst, an der Buchse messen (wonach suche ich....?) ?

Abert wenn ich Dich richtig verstehe, kann ich es elektrisch bedenkenlos so verbinden und einfach ausprobieren, ob ich ein sauberes LOW bekomme...?

021aet04
02.02.2019, 12:33
Du musst herausfinden wie der Ausgang aufgebaut ist, also +U, 0V oder Push/Pull (+U und 0V wie bei Logik ICs) schaltet. Das kannst du relativ leicht mit einer Led (+Vorwiderstand) herausfinden.
1) Du schließt die Led zwischen +U und Pin: Leuchtet die Led schaltet der Pin gegen 0V
2) Du schließt die Led zwischen Pin und 0V: Leuchtet die Led schaltet der Pin auf +U
3) Wenn es in beiden Varianten leuchtet hast du einen Push/Pull Ausgang

Bei Fall 1 benötigst du einen Pullupwiderstand (zwischen +U und Pin)
Bei Fall 2 benötigst du einen Pulldownwiderstand (zwischen Pin und 0V)
Bei Fall 3 benötigst du keinen Widerstand, da es einen definierten High und Low Pegel gibt

Wenn die Möglichkeit besteht das das Gerät entfernt wird benötigst du auch bei einem Push/Pull Ausgang einen Widerstand (Pullup oder Pulldown ist egal bzw anhängig von der Programmierung).

MfG Hannes

coupe70
02.02.2019, 13:00
Vielen Dank Hannes, das hilft mir zumindest schon mal deutlich weiter (auch wenn ich es wieder nur halb verstehe)!
Haha, ich lache die ganze Zeit über mich selbst - das ist wie "Hey Leute, ich hab ein super Lauftraining für
mich ausgearbeitet und auch tolle Laufrouten rausgesucht, leider weiß ich nicht wie man sich die Schuhe
zubindet..." :D

Gnom67
02.02.2019, 15:22
Eine andere, einfache und sichere Lösung ist, den Ausgang deines Netzteils/Gerätes mit einem passenden Widerstand (ca. 500-1000 Ohm) an einen Optokoppler (ein ganz gewöhnlicher Typ 817 genügt) anzuschließen. Der Ausgang des Optokopplers wird (ebenfalls mit einem Widerstand, ca. 1000 Ohm) zwischen Input-Pin und GND des µC geschaltet.
Ist dein Netzteil eingeschaltet (3V), schaltet der Optokoppler durch, verbindet den Pin mit GND und zieht ihn auf low. Den Eingang programmierst du mit internem Pullup-Widerstand. Ist das Netzteil aus, wird der Pin damit auf high gezogen.

Vorteil dieser Lösung:
- Sie funktioniert auch, wenn deine Spannung des Netzteils geringer/höher ist als 3 V (ggf. brauchst du einen kleineren/größeren Widerstand am Optokoppler-Eingang).
- Die beiden Geräte sind stromtechnisch getrennt. Ein Kurzschluss im Netzteil, der plötzlich 230 V auf die Leitung bringt (oder irgendeine ähnliche Katastrophe), würde nur den Optokoppler zerstören, nicht aber den Mikrocontroller.

Und so sieht das aus:

33974

Beachte:
- Zwischen GPIO-Pin und Optokoppler sollte noch ein Schutzwiderstand von 1000 Ohm.
- Hier steht 5 V, wo du 3 V hast und statt eines Mikrocontrollers wurde hier ein Raspberry Pi mit 3,3 Volt Spannung für die Pins verwendet das Prinzip ist aber identisch.