Pulldown oder Pullup

  • Hallo an alle,

    dem Lerneffekt geschuldet wollte ich weg von Software Pulldown oder Pullup Wiederstand hin zur Hardware.
    Anbei mein aktuelles Skript und die Verkabelung. Ich nutze GPIO 7 (BCM) und das Gegenüberliegende GND.
    Wenn ich jetzt einen Taster drücke funzt alles und es wird GPIO 27 (BCM)
    geschalten.
    Nun will ich eigentlich die Softwarelösung rausschmeisen und wollte die Zeile GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP) ersetzen gegen GPIO.setup(7, GPIO.IN) tauschen.

    dazu hätte ich von GPIO 7 einen 10 kOhm danach in den Taster und anschließend aus dem Taster an GND gegangen.
    Jedoch klappt das nicht.
    Kann mir jemand erklären warum? Ich versteh das einfach nicht!

  • Die Schaltung bleibt wie sie ist, nur muss vom GPIO zusätzlich eine Verbindung über einen 10KOhm zu 3,3V gehen. Der Pullup hält den GPIO auf 3,3 Volt, wenn der Taster nicht gedrückt ist.
    Wenn der Taster gedrückt wird, zieht er die Spannung am GPIO auf null und durch den großen Widerstand (10k) kommt kaum was nach, so dass die Spannung auch bei null bleibt.
    Nach Loslassen der Taste wäre der GPIO bei irgendeiner zufälligen Spannung (womöglich nahe null). Er soll aber 3,3 V haben, wenn der Taster nicht gedrückt ist. Dazu dient der Pullup. Der zieht die Spannung wieder hoch, wenn du den Taster loslässt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • dreamshader ich muss ehrlich gesagt zugeben das ich keine Ahnung habe. Ich hätte gesagt das er einen pull up wiederstand an port 7 simuliert. Aber das ist sicher nicht richtig.
    Gnom du hast das sicher nett gemeint aber ich verstehe nur Bahnhof! Warum muss ich zu 3,3V gehen und da einen Wiederstand einbauen? Mein Taster jetzt funktioniert doch auch wenn ich GND an einen GPIO lege?.

  • Hi,

    Zitat von "tutter" pid='295094' dateline='1502492924'


    ... einen pull up wiederstand an port 7 simuliert. Aber das ist sicher nicht richtig.


    passt doch ... genau so ist es. Naja, simuliert ist jetzt nicht ganz korrekt. Aber egal ...
    Und wie sieht jetzt ein physikalisch verbauter pullup auf Deinen "Port 7" aus?
    -ds-

  • ah ok das ist ja schon mal gut! ich habe einfach mir ein paar Schaltpläne von Pullup und Pulldown angeschaut. ich habe dann einfach vom pi kommend (Port 7) in einen Taster rein und auf der Gegenseite wieder raus in einen 10 kOhm Wiederstand. Aus dem Wiederstand wieder raus ab in Richtung GND.

    Das sollte nach meiner Meinung nach einen Pull up Wiederstand ergeben.

  • Hm ... warum heisst das Ding "pullup"?
    Und was ist der Unterschied zu einem "pulldown"?
    Und schliesslich noch die Frage zum Hauptgewinn: welchen tieferen Sinn hat ein "pullup" bzw. ein "pulldown"?

    Ich weiss, ist schon früh, aber probier's einfach trotzdem ;)
    cu,
    -ds-

  • Also wenn ich es richtig verstanden habe soll ja ein Pullup Widerstand bei geöffneten Schalter einen High Signal haben und bei Pulldown genau anders rum . Soll heißen der Schalter ist bei Pulldown ein Low Signal hat. Bei jeweils offenen Zustand.
    Soweit so gut. Aber wie bekomme ich denn jetzt raus was ich benötige? Ich habe doch nur GND und einen GPIO Port und eben keine 3,3 Volt anliegen. Das verwirrt mich eben total!

    Einmal editiert, zuletzt von tutter (12. August 2017 um 01:42)

  • Ok, reduzieren wir Deine Aussage mal auf das Wesentliche:

    Zitat von "tutter" pid='295098' dateline='1502494934'


    ... ein Pullup Widerstand ... geöffneten Schalter ... High ... Pulldown ... anders rum.


    Der Widerstand hat in diesem Sinne kein Signal.
    Ausserdem fragst Du ja das Signal an einem Eingang des Raspi ab ("Port 7"). Und das allein ist ausschlaggebend.
    Welches Signal liegt also an Deinem Eingang an, wenn Du:
    1. Den Schalter/Taster drückst,
    2. den Schalter/Taster öffnest/loslässt und
    3. warum ist das so?

    Endspurt ... ;)

  • @TO

    es ist doch ganz einfach, vergiss den Taster!

    1. ein pullup Widerstand ZIEHT einen GPIO Port nach +3,3V (am PI)
    2. ein pulldown Widerstand ZIEHT einen GPIO Port nach GND = 0V

    nichts weiter nun kommt der Taster der dieses ändern soll an den GPIO

    bei 1.) kann der Taster ja nur nach GND was bewirken weil der pullup ja schon an +3,3V hängt und der GPIO immer high sieht.
    (Der Vorteil ist sogar, egal ob der GPIO nach GND gezogen wird durch den Taster oder als Ausgang auf low gesetzt wird oder bei einem Schaltungsfehler nach GND geklemmt wird, Lötbrücke oder eine verirrte Ader, der Strom wird durch den R begrenzt!)

    bei 2.) kann der Taster ja nur nach +3,3V was bewirken weil der pulldown ja schon an GND hängt und der GPIO immer low sieht.
    (nun könnte der Taster ja ungebremst 3,3V irgendwo hinschalten was einen Kurzschluß verursachen kann, es ist unsicherer)

    Bei Abfragen muss man also nur bei pullup auf negativ abfragen -> if low oder 0 um den gedrückten Taster zu erkennen.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Nee sorry ich versteh das alles noch nicht.
    Also ich habe mal etwas rumgemessen und erst mal festgestellt das so ein GPIO Pin ohne weiteres eingreifen 3,3 V anliegen hat. OK soweit so gut.
    Gehen wir davon aus wir am GPIO Pin erstmal nichts ändern dann hätten wir jetzt hier ein High Signal anliegen sprich 1. Auch noch verstanden!
    Damit unser GPIO Pin einen anderen Schaltzustand erreicht müsste ich ihn jetzt irgendwie die 3,3 V wegnehmen.
    Das habe ich mal über Skript gelöst.

    Code
    mport RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(7, GPIO.OUT)
    GPIO.output(7, GPIO.LOW)
    print ('PIN 7 muesste LOW sein')

    und siehe da das Messgerät zeigt 0 Volt. Klasse!
    um diesen Zustand wieder zu ändern müsste ich jetzt einfach wieder 3,3 Volt an meinen Pin anlegen und dann hätte ich wieder High also Zustand 1!

    Ok nun erschließt sich mir das so das ich nun einen Pull Up Wiederstand benötige. Denn ich muss um ein High am GPIO Pin zu erreichen saubere 3,3 Volt an den Pin anlegen.

    Nun würde ich wie folgt vorgehen. (Trau mich aber nicht wirklich)
    Ich schnapp mir eine 3,3 Volt Quelle vom Pi lege dahinter einen 10kOhm wiederstand an(nun habe ich 0V) danach kommt mein Taster an den Wiederstand und der andere Pin vom Taster an GND. An den Taster muss aber auch noch mein GPIO Pin 7(BCM) angeschlossen werden. Nun sollten die vollen 3,3Volt an den GPIO Pin gehen da hier der Wiederstand kleiner ist als der 10 kOhm Wiederstand. .

    Nun zur alles entscheidenden Frage. Ist das so alles richtig oder Kill ich mir meinen Pi damit?

  • Hallo Tutter,

    zu Pulldown- und / oder Pullup-Widerstand ist soviel - auch in diesem Forum - geschrieben worden. Kannst Du alles nachlesen.

    Hier ein sehr brauchbarer Link:

    http://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm

    Was Du gerade zu verwechseln scheinst, ist das Schalten eines GPIO-Ausgangs (auf LOW oder HIGH) gegenüber dem Status eines GPIO-Eingangs (zum Erkennen von HIGH- oder LOW-Pegeln). Zum Schalten eines GPIO-Ausgangs brauchst Du keinen X-Winderstand - außer zur Begrenzung der Stromstärke.

    Einen Pullup-/Pulldown-Widerstand brauchst Du nur bei als Eingang geschalteten GPIO-Pins, um definierte Pegel zu erzeugen, um sagen zu können, ob es sich um anliegende HIGH- oder LOW-Pegel handelt. LOW bedeutet Pegel < 0,8 V, HIGH bedeutet Pegel > 1,3 V. Durch diese Pullup-/Pulldown-Widerstände erreichst Du, dass diese Lücke 0,8 ... 1,3 V auf die eine oder andere Seite gezogen werden (mal ganz laienhaft ausgedrückt).

    Beste Grüße

    Andreas
    Automatisch zusammengefügt:

    Hallo Tutter,

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    Nun zur alles entscheidenden Frage. Ist das so alles richtig oder Kill ich mir meinen Pi damit?

    Nimm mal die Formel U = R * I
    U = Spannung [V]
    R = Widerstand [Ohm]
    I = Stromstärke [A]

    Ein GPIO-Pin (Eingang) darf max. 3,3 V sehen.

    Ein GPIO-Ausgang sollte (von Ausnahmen abgesehen) so mit Widerständen beschaltet werden, dass der Strom max. 2 oder 3 mA beträgt.

    So, und nun mache das, was unser Mathe-Lehrer mal unter eine recht komplexe Aufgabenstellung schrieb: [font="Comic Sans MS"]Rechne![/font]

    Wenn Du diese Dinge beachtest, dann kann Deinem Raspberry Pi ein langes Leben beschieden sein.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (12. August 2017 um 15:45)

  • Servus tutter,

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    ... GPIO Pin ohne weiteres eingreifen 3,3 V anliegen hat. ...
    ... nichts ändern dann ... High Signal anliegen ...


    da hast Du die leider die falsche Schlussfolgerung gezogen. Welchen Zustand ein I/O hat ist, ohne dass Du da jetzt was machst, mehr oder weniger Zufall.
    Hinzu kommt, dass es einen Unterschied macht, ob der I/O als Ein- oder Ausgang geschaltet ist.
    Aber darauf können wir ein andermal genauer eingehen.

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    ... 3,3 Volt ... dahinter einen 10kOhm wiederstand an(nun habe ich 0V) ...


    nein, dann hast Du immer noch 3V3 ... ;)

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    ... Nun zur alles entscheidenden Frage. Ist das so alles richtig oder Kill ich mir meinen Pi damit?


    Zeichne das mal auf und poste die Schaltung ( -> Schaltungen zeichnen <- ).

    Ich glaube, Du tätest Dich leichter, wenn Du einfach nur versuchst meine Fragen aus -> diesem Post <- zu beantworten ;)

    cu,
    -ds-

  • Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    Nee sorry ich versteh das alles noch nicht.
    Also ich habe mal etwas rumgemessen und erst mal festgestellt das so ein GPIO Pin ohne weiteres eingreifen 3,3 V anliegen hat. OK soweit so gut.

    das da ZUFÄLLIG 3,3V anliegen hast du nun festgestellt.
    Als INPUT fängt ein GPIO zufällig alles aus der Luft ein, das kann ohne pullup oder pulldown alles sein, mal high, mal low, wenn noch ein Draht darn ist zu einem Taster spielt dieser Draht Antenne und fängt sich noch mehr ein (Ich nehme an von Radio, Funk, wlan usw. hast du schon mal was gehört?)

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    Damit unser GPIO Pin einen anderen Schaltzustand erreicht müsste ich ihn jetzt irgendwie die 3,3 V wegnehmen.
    Das habe ich mal über Skript gelöst.
    GPIO.output(7, GPIO.LOW)

    und siehe da das Messgerät zeigt 0 Volt. Klasse!

    doch nur weil du den GPIO aus OUTPUT setzt, das ist doch nicht das was du wolltest, Ziel war Taster abfragen und da muss der Port INPUT bleiben sonst auf OUTPUT würdest du per Taster den Port killen, der will nämlich dein low machen und du zwingst ihm mit Gewalt per Taster auf high und es rummst!

    Dir wäre schon übel und du willst dich übergeben, OUTPUT und wieviel besser wäre es dann wenn dir jemand Essen reindrückt INPUT?

    Man sollte sich schon mal die Richtung überlegen was das Ziel ist!

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    und siehe da das Messgerät zeigt 0 Volt. Klasse!
    um diesen Zustand wieder zu ändern müsste ich jetzt einfach wieder 3,3 Volt an meinen Pin anlegen und dann hätte ich wieder High also Zustand 1!

    und nun durchdenke das noch mal

    Zitat von &quot;tutter&quot; pid='295127' dateline='1502533541'


    Nun zur alles entscheidenden Frage. Ist das so alles richtig oder Kill ich mir meinen Pi damit?

    echt jetzt?
    bei so grundlegende Dinge?

    Du zwingst deinen PI auf OUTPUT low und willst gegen seinen Willen 3,3V per Taster reindrücken, wer gibt wohl auf, der PI oder der Taster?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hi Jar,

    Zitat von &quot;jar&quot; pid='295161' dateline='1502558421'


    Dir wäre schon übel und du willst dich übergeben, OUTPUT und wieviel besser wäre es dann wenn dir jemand Essen reindrückt INPUT?


    Tolles Beispiel, was die Situation total gut beschreibt!


    Zitat von &quot;jar&quot; pid='295161' dateline='1502558421'


    Du zwingst deinen PI auf OUTPUT low und willst gegen seinen Willen 3,3V per Taster reindrücken, wer gibt wohl auf, der PI oder der Taster?


    tutter:
    Tip: Der Taster wird's wohl nicht sein. Dem ist Spannung von 3,3 V und Strömen im 1 Ampere-Bereich ziemlich schnuppe. Wenn Du Dir die Datenblätter der Taster und Schalter anschaust, die sind meistens für bis zu 250 V und > 10 A zugelassen. Die kitzelst Du mit 3,3 V und wenigen mA nicht mal. Warm werden sie dadurch auch nicht.

    Wie lautet jetzt wohl die richtige Antwort auf Jar's Frage?
    Willst Du das Risiko eingehen? Wenn ja, warum?

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (12. August 2017 um 20:20)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!