Pages: [1]   Go Down
Author Topic: Pull-Up- / Pull-Down-Widerstand - Verständnisproblem  (Read 1174 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

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:

1. 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)

2. 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?



« Last Edit: April 01, 2013, 06:42:46 am by Jack159 » Logged

0
Offline Offline
Faraday Member
**
Karma: 19
Posts: 3420
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Wenn statt dem Widerstand dann eine Brücke wäre, dann liegt doch in dem Fall, dass der Taster nicht gedrückt wird, ein Kurzschluss vor, oder nicht?
Logged

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2459
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:
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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

(Unter dem Bild noch eine Frage)






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.

Logged

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2459
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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:
Code:
#define EIN LOW
#define AUS HIGH
Und beim Abfragen von Schaltzuständen dann:
Code:
if (digitalRead(8)==EIN) Serial.println("EIN geschaltet");



« Last Edit: April 01, 2013, 09:50:56 am by jurs » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 236
Posts: 20285
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ jurs:

Stimmt (Bezüglich meiner Schaltung).

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)



« Last Edit: April 01, 2013, 12:07:56 pm by Jack159 » Logged

Stuttgart
Offline Offline
God Member
*****
Karma: 13
Posts: 511
logic enrichments
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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) smiley-grin -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.
Logged

Eine Kuh macht muuhh.
Viele Kuehe machen Muehe

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2459
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: