Trotz intensiver Nutzung von Google und Co ist mit die Funktionsweise eines Pull-Up- / Pull-Down-Widerstands noch nicht zu 100% klar geworden.
Was ich verstanden habe bisher:
Ein Pull-Up- / Pull-Down-Widerstand wird dazu benutzt, um am Eingangspin für ein eindeutig definiertes Signal (LOW oder HIGH) zu sorgen. Ohne einen Pull-Up- / Pull-Down-Widerstand kann es durch Störungen an einem offenen Eingangspin zu verfälschungen kommen, sodass falsche Signale vom MC erkannt werden.
Was ich noch nicht verstehe:
Sei folgender Aufbau unten auf dem Bild gegeben.
Wenn der Taster gedrückt wird, soll die LED leuchten. Ob der Taster gedrückt wird, wird am Eingangspin 8 abgefragt. (Hier bereits mit Pull-Down Widerstand).
Gehen wir mal beide Fälle durch:
Fall: Taster wird gedrückt:
Der Strom fließt vom GND durch den 1k Ohm Widerstand und teilt sich dann auf. Einmal fließt er links in den Einganspin 8 und einmal rechts durch den gedrückten Schalter, dann zum Pluspol (5V). Da in diesem Fall dann Pin 3 auf HIGH gesetzt wird, fließt noch ein Strom von GND durch die LED, durch den 220 Ohm Widerstand in Pin 3 hinein. (LED leuchtet)
Fall: Taster wird nicht gedrückt:
Der Strom fließt vom GND durch den 1k Ohm Widerstand und fließt nur in den Einganspin 8.
In beiden Fällen fließt doch genau der selbe Strom in Pin 8 hinein, wodruch in beiden Fällen der MC bei Pin 8 ein HIGH erfasst und somit doch Pin 3 auf HIGH stellt und die LED leuchtet.
Wo genau jetzt in der Schaltung wann und wie Störsignale abgefangen werden sollen versteh ich nicht. Das einzige was mir momentan beim 1k Ohm Widerstand sinnvoll erscheint ist, dass dieser ein Kurzschluss verhindert.
EDIT:
Und falls ich den internen Pull-Up- / Pull-Down-Widerstand Widerstand vom Arduino nutze, wie sähe mein Schaltungsaufbau dann aus?
Wa wäre wenn der Widerstand nicht da wäre und der Schalter nicht gedrückt? Der Pin wäre auf einem undefinierten Potential. Da der MC aber Spannungsgesteuert und nicht Stromgesteuert ist würde er mehr oder weniger zufällige Schaltzustände erkennen.
Jack159:
Was ich verstanden habe bisher:
Ein Pull-Up- / Pull-Down-Widerstand wird dazu benutzt, um am Eingangspin für ein eindeutig definiertes Signal (LOW oder HIGH) zu sorgen.
Korrekt, und dazu schaust Du Dir am besten mal eine Spannungsteilerschaltung an, hier mal kurz skizziert mit zwei Widerständen R1 und R2 zwischen 5V und Ground und dem Digitalpin D8 an dem sich die Spannung U einstellt:
Spannungsteiler-Schaltung:
GND ----< R1 >----------< R2 >---- 5V
|
|
D8 U
Die sich an Pin D8 einstellende Spannung teilt sich im Verhältnis der Widerstände auf.
1. Gleichung: U = R1*I (Ohmsches Gesetz für R1)
2. Gleichung: 5V = (R1+R2)*I (Ohmsches Gesetz zwischen 5V und GND)
Beide Gleichungen durcheinander dividiert:
U/5V = R1*I / ((R1+R2)*I)
Und nach U aufgelöst:
U = 5V * R1 / (R1+R2)
Jetzt stellen wir uns mal ganz dumm und betrachten einen Schalter als Widerstand:
Schalter geschlossen ==> Widerstand Null.
Schalter offen ==> Widerstand unendlich
Ich nehme jetzt mal R1 als Pulldown-Widerstand und R2 als Schalter.
Mit R2=0 (Schalter geschlossen) wird aus:
U = 5V * R1 / (R1+R2) der Wert 5V, weil 5V*R1/(R1+0)=5V
Mit R2=? wird aus:
U = 5V * R1 / (R1+R2) der Wert 0, weil 5V*R1/(R1+?), da eine Zahl geteilt durch Unendlich 0 ergibt.
Danke jurs, die Sache mit dem Spannungsteiler hat das ganze nun etwas klarer werden lassen.
Da der Arduino intern ja schon einen Pullup-Widerstand hat, werde ich diesen in Zukunft auch benutzen.
Wenn ich also den internen Pullup-Widerstand benutze, dann kann ich meine Tasterschaltung ja praktisch so aufbauen, als wenn ich von der Pullup-Thematik nichts wüsste, oder? Ich muss mir für die Zukunft also nur grob gesagt merken, dass wenn ich einen Taster an einem Pin abfrage, genau diesen Pin eben auch direkt als Pullup-Widerstand deklariere im Code, um eben Störsignale abzufangen und auch um eventuell einen Kurzschluss zu verhindern.
Wäre denn dann z.B. folgende Schaltung mit aktiviertem internen Pullup-Widerstand an Pin 2 korrekt?
Kann man es irgendwie hinbekommen, den internen Pullup Widerstand theoretisch in einen Pulldown Widerstand umzuwandeln? Zumindest im Code? Ich finde es einfach logischer, dass wenn der Taster gedrückt wird, HIGH am Pin anliegt und nicht LOW.
Jack159:
Wäre denn dann z.B. folgende Schaltung mit aktiviertem internen Pullup-Widerstand an Pin 2 korrekt?
Nein. Die beiden äußeren Reihen auf dem Breadboard mit der roten und der blauen Linie sind gedacht für die Stromversorgung, d.h. da schließt Du die "rote Linie" an 5V und die "blaue Linie" an Ground an.
Ansonsten kommt es bei der Schaltung auch drauf an, was Du steuern möchtest.
Offenbar soll ein Taster an einem Input-Pin angeschlossen sein, um den Input-Status des Tasters abzufragen.
Und es soll eine LED an einem Output-Pin angeschlossen sein, um die LED über den Status des Output-Pins zu steuern.
Tatsächlich ist bei Dir ein und derselbe Pin D2 sowohl am Taster als auch an der LED angeschlossen.
Und da nicht derselbe Pin gleichzeitig als Input für einen Taster und als Output für eine LED dienen kann, ist da irgendwas völlig verquer geschaltet.
Jack159:
Kann man es irgendwie hinbekommen, den internen Pullup Widerstand theoretisch in einen Pulldown Widerstand umzuwandeln? Zumindest im Code? Ich finde es einfach logischer, dass wenn der Taster gedrückt wird, HIGH am Pin anliegt und nicht LOW.
Nein, ein PullUp-Widerstand ist ein PullUp-Widerstand und der unbeschaltete Pin dann HIGH. Du kannst aber im Code die Schaltzustände definieren, wie Du lustig bist, z.B. einmal oben im Programm definieren:
#define EIN LOW
#define AUS HIGH
Und beim Abfragen von Schaltzuständen dann:
if (digitalRead(8)==EIN) Serial.println("EIN geschaltet");
Jack159:
Kann man es irgendwie hinbekommen, den internen Pullup Widerstand theoretisch in einen Pulldown Widerstand umzuwandeln? Zumindest im Code? Ich finde es einfach logischer, dass wenn der Taster gedrückt wird, HIGH am Pin anliegt und nicht LOW.
Daß ein gedrückter Taster mit Pullupwiderstand LOW ergibt, ist kein Problem.
Du mußt Dir nur merken, daßs das so ist. Der Trick von jurs funktioiert, nur wendet ihn nicht jeder an. Somit, wenn Du einen Sketch verstehen willst, bist Du wieder an der gleichen Stelle, daß Du wissen mußt, daß LOW "gedrückt" heißt.
Der Taster würde mit internem Pullup prinzipiell so funktionieren, aber wenn ich mir die Position der LED und deren Vorwiderstand so anschaue dann leuchtet dort nie etwas.
Wenn Du weißt, daß in diesen Steckbrettern immer fünf Löcher miteinander verbunden sind, dann wird Dir klar, warum die LED niemals leuchten kann. Außerdem ist der Vorwiderstand um eine Reihe verrutscht. (Ein paar Wochen im Schützenhaus wären sinvoll) -nur Spass- ...
Ich mag diese Darstellungen nicht besonders. Wenn Du richtige Schaltungen kreieren möchtest, dann gewöhn Dir das Zeichnen "richtiger" Schaltpläne an. Du kommst sowieso nicht drum rum diese lesen zu können. Manche Leute zeichnen ihre Pläne mit dem Stift und scannen dies ein. Das hat was nostalgisches und sehr persönliches.
Jack159:
So müsste es aber nun stimmen, oder? (Pin 2 als Eingang mit Pullup und Pin 9 als Output. Wenn der Taster gedrückt wird, soll die LED leuchten)
Ja, fast. Die Anode der LED muß natürlich mit dem Vorwiderstand verbunden sein, also in derselben Steckreihe stecken.
An Deiner ungewöhnlichen Nutzung der Stromanschlußlinien auf dem Breadboard hast Du allerdings nichts geändert. Du hast weiterhin D2 auf die Plus-Linie des Breadboards gezogen statt von D2 auf den Schalter zu gehen. Wenn Du solche Sachen machst, dürfte es nur eine Frage der Zeit sein, bis Du in einer komplexeren Schaltung einen Kurzschluß fabrizierst, nur weil Du Dich bei der Nutzung des Breadboards nicht an die minimalen Schaltungsstandards hältst.
Hey leUte ich habe mal eine frage und zwar habe ich an meinen Arduino ein Relais modul angeschlossen ich will das das eine relais immer anzieht und nur ausgeht wenn der Arduino über einen Taster (Magnetschalter) ein Signal bekommt.
Das relais soll dann für 1 Sekunde aus gehen auch wenn der taster ( Magnetschalter) weiter betätigt ist.
In dieser 1 Sekunde soll ein anderes Relais anziehen das nach der Sekunde auch wieder abfällt.
verstehe das mit dem internen pull up widerstand nicht wirklich.
Vielleicht könnt ihr mir ja weIteration helfen.
Vielen Dank.
LG : Merlin
Ja aber der pull up widerstand ist mein Hauptproblem und ich verstehe es nicht wirklich wie ich es in den sKetchup schreiben kann das der Pinnwand immer LOW ist außer wenn der über den Taster (Magnetschalter) ein Signal bekommt.
Wie USS mann das angeben und was muss man da abrufen was ein pull up widerstand grundsätzlich macht weiß ich aber ich bekomme es nicht in den sketch versuch schon die ganze zeit rum