GPIO Beschaltung mit Taster

  • Weil die Frage öfter aufkommt, wie man einen Taster nutzt um einen GPIO zu beschalten, habe ich hier mal ein gut dargestelltes Beispiel aufgezeigt


    Grundsätzliches:
    Ein GPIO darf nicht einfach gebrückt werden, sondern arbeitet mit einen Pulldown Widerstand um ein eindeutiges Schaltsignal verarbeiten zu können


    Wenn man einen GPIO als Eingang benutzt, dann hat der noch unbeschaltete GPIO-Eingangs noch keinen festgelegten Zustand. Das heißt, er liegt nicht zwangsläufig bei 0 Volt oder "low". GPIO-Eingänge neigen dazu zufällig in die eine oder andere Richtung zu schalten. Das heißt, sie haben mal den Zustand "low" (0) und mal den Zustand "high" (1). Und zwar abhängig davon, was sich der jeweilige Pin oder Anschlusspunkt gerade einfängt. Das einflussnehmende Spektrum reicht von hochfrequenten Einstreuungen umliegender Bauteile oder anderer Pins, bis hin zu Überspannung. In der Regel handelt es sich um unerwünschte Effekte, die dazu führen, dass der Zustand eines GPIO-Eingangs völlig undefiniert zwischen "high" und "low" hin- und herspringt. Das hat den Nachteil, dass wenn man einen GPIO-Eingang auswertet, nie sicher sein kann, welchen Zustand er wirklich hat.


    Folgende Schaltung eignet sich dafür




    Zusätzlich sollte zwecks Entstörung zwischen 3.3V und GRND sowie zwischen PIN13 und GRND jeweils noch ein 10nF Kondensator eingelötet werden.

  • Hallo MarcusS
    Ja und Nein, der Pull-Up oder Down kann programmiert werden dafür ist der Part "pull_up_down = PUD_DOWN" oder "PUD_UP" in der .ini da diese sind rein durch einen Befehl aktiviert.
    Das was im Bild sichtbar ist ist nur ein zusätzlicher Pull-Up oder "Angstwiderstand".


    Hier wäre ich vorsichtig, was ist wenn ich die Eingänge des Pi über +3,3 Volt beschalte und in der doorpi.ini "pull_up_down = PUD_DOWN" angegeben habe? Dann würde der Pi kein High Signal bekommen da dieser, permanent, auf High steht.


    Ich möchte jetzt nicht sagen das die Schaltung grundsätzlich verkehrt ist nur kann man es auch anders herum machen.


    Ich wollte dies nur schreiben das es hier nicht zu Missverständnissen kommt.

  • Zitat

    Ich habe die 3.3V direkt auf einen Kontakt am Taster gegeben und einen GPIO auf den anderen.

    Nicht doch. Das ist ein gutes Rezept, um den Raspberry Pi auf Tastendruck zu grillen. Es braucht dazu nur jemand den GPIO-Pin auf "Output" zu setzen...


    LG


    pah

  • @pahenning
    Wieso, das ist doch eine klassische Pull-Down Schaltung. Das der Input dann nicht als Ausgang definiert werden darf sollte eigentlich selbstverständlich sein. Ich habe dies auf meiner neuen I/O Platine auch implementiert allerdings kann ich die Polarität per jumper ändern.


    https://www.doorpi.org/forum/t…rpi/?postID=2515#post2515

  • Die einfache Schaltung findet sich nur überall in diversen Anleitungen wieder. Den Wiederstand zur Strombegrenzung kann ich entweder als Pull Up oder als Pull Down einbauen. Beides geht nicht, sonst wird der Eingang nicht sauber high oder low. Wenn man den Strom sicher begrenzen möchte, müsste man m. E. nach Eine Schaltung mit einer Zenerdiode bauen. Der 1k Widerstand begrenzt den Strom auf max. 3,3mA gegen Masse und zusammen mit den 470 Ohm auf 3,4 mA gegen +5V


    Fragt sich, ob es sich lohnt noch die Kondensatoren für die Entstörung einzufügen oder nicht.

  • Jetzt hast Du mich gerade verunsichert :) Ist aber richtig rum.


    In Sperrrichtung hat die Z-Diode die entsprechende Durchbruchsspannung (Z-Spannung). In Durchgangsrichtung verhält sie sich wie eine normale Diode.

  • Jap, aber auch hier eine Anmerkung für beide Varianten: der Vorwiderstand sollte die 470 Ohm nicht unterschreiten da der Strom dann größer 7mA wäre. Andererseits wäre es bei 1K Ohm möglich dass das Signal nicht sauber erkannt wird. Muss aber nicht sein.

  • Das ist richtig. Wenn der PIN auf high ist fließen von +5V 5,7 mA. Das ist aber auch der benötigte Izr, daher kann R1 nicht viel größer werden. Ich sehe aber kein Problem darin, R2 deutlich zu vergrößern. Die internen Pull Up/Down Widerstände liegen so um die 50k. So ganz genau habe ich das nicht gefunden. Theoretisch benötigt man also gar keine externe Beschaltung. Um Software Fehlern vorzubeugen ist das natürlich immer ratsam. Dann können / sollten natürlich die internen Pull Up/Down Widerstände abgeschaltet sein. Ich habe die Zeichnung mal angepasst.

  • Guten Morgen,
    Das mit den,externen, Pull-Up Widerständen ist irgendwie auch ein kleines Mysterium. Der Interne Pull-Up/Down liegt bei 50K Ohm bei externen Schaltungen verwenden hier eigentlich, fast, alle 10K Ohm, rechnerisch langt hier wohl 10K.
    Meine Berechnung basierten auf 3,3V / 470 Ohm was 7,02mA ergibt was ja die max. Stromstärke ist die der Soc pro Kanal verträgt. Wegen der Frage ob man dann noch einen Entstörkondensator benötigt würde ich grundsätzlich ja sagen.
    Ich hatte, als ich mit DoorPi produktiv ging, massive Störungen auf der Leitung so das kein High oder Low, sauber, erkannt wurde. Interessanterweise wenn ich im Treppenhaus das Licht eingeschlaten hatte hat der Pi ein Signal auf einen der Klingel Eingänge erkannt, Licht an = geklingelt, Licht aus = geklingelt.
    Da ich das Signal nicht sauber bekam nur mit Widerständen musste ich hier bei allen Eingängen einen 100nF Kondensator, gegen 3.3V, einbauen. Das muss bei anderern ja nicht zwangsläufig auch so sein aber ich empfehle seitdem immer einen mit einzuplanen.


    Gruß Nea

  • Ich verstehe immer noch nicht wie Du auf die 7mA kommst. Mag aber auch sein, ich habe eine Denkfehler


    R1 und R2 sind gegen +5 in Reihe geschaltet. Ist der Pin low, fließt der Strom zwischen +5V und GND über 1470 Ohm (3,4mA). Ist der Pin high, ist die Spannung die Differenz von +5V und +3,3V, also 2,7V, was ca. 1,8mA wären. Die Z-Diode hat hier ja nix mehr mit dem Strom durch den Pin zu tun.


    Wird der Schalter geschlossen fließt bei einem low Pin gar kein Strom mehr durch den Pin, da der ganze Teil unterhalb von R1 kurzgeschlossen wird. Ist der Pin high, werden die 3,3V über 1k auf GND gezogen (3,3mA). Von +5V fließt kein Strom durch den Pin da unterhalb von R1 gegen GND kurzgeschlossen.

  • Ich verstehe immer noch nicht wie Du auf die 7mA kommst. Mag aber auch sein, ich habe eine Denkfehler


    R1 und R2 sind gegen +5 in Reihe geschaltet. Ist der Pin low, fließt der Strom zwischen +5V und GND über 1470 Ohm (3,4mA). Ist der Pin high, ist die Spannung die Differenz von +5V und +3,3V, also 2,7V, was ca. 1,8mA wären. Die Z-Diode hat hier ja nix mehr mit dem Strom durch den Pin zu tun.


    Wird der Schalter geschlossen fließt bei einem low Pin gar kein Strom mehr durch den Pin, da der ganze Teil unterhalb von R1 kurzgeschlossen wird. Ist der Pin high, werden die 3,3V über 1k auf GND gezogen (3,3mA). Von +5V fließt kein Strom durch den Pin da unterhalb von R1 gegen GND kurzgeschlossen.

    Das würde ich sagen ist so richtig, wenn R2 ein 1k Widerstand ist. In deinem Schaltbild steht dort (vermutlich falsch) 47k.


    Edit: Ich denke Nea redet davon, wenn R2 auch 470 Ohm ist. Dann ist bei high der Strom 7,02mA (3,3V/470Ohm).

  • Das habe ich geändert, da der Strom bei den hochohmigen Eingängen offensichtlich soweit begrenzt werden kann. Ob das stabil ist müsste man mal ausprobieren.

  • Hallo zusammen,


    ich habe mein pi wie folgt beschaltet. Aber leider passiert nichts wenn ich den Taster betätige.


    Allerdings klingelt es wenn ich den Kühlkörper mit dem Finger berühre. Kann mir jemand ein Tipp geben was ich falsch gemacht habe
    Danke
    Gruß Eddie




    das Bild stammt von pi-buch.info


    Hier ist meine doorpi.ini


  • Bin mir jetzt nicht ganz sicher aber gebe mal das noch in der doorpi.ini mit an.


    Code
    [onboardpins_keyboard]
    polarity = 1

    Hast Du auch den richtigen Pin angeschlossen also Pin11 bei dir?


    Welchen Kühlkörper meinst Du denn?

  • Hi Nea,


    ich denke schon (zumindest wenn ich es richtig verstehe) 11 steht für GPIO 11 also Pin 23 - oder liege ich hier falsch?


    Ich habe auf die CPU einen Kühklörper drauf geklebt. Wenn ich diesen berühre dann löst es aus. :)


    wofür steht polarity = 1 Ob er auf High oder auf Low reagiert?


    Danke
    Gruß Eddie