GPIO Beschaltung mit Taster

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Da in jedem Forum ein paar Regeln eingehalten werden müssen, möchte ich diese auch vorher hier festlegen und niederschreiben. Die grundsätzliche Netiquette setze ich bei Jedem voraus. Darüber hinaus möchte ich nur spezielle Regeln ansprechen:
    - Unterlasse FullQuote sondern nutze Alternativen wie Inline-Quoting
    -> siehe auch https://de.wikipedia.org/wiki/Fullquote vs. https://de.wikipedia.org/wiki/TOFU#Alternativen_zu_TOFU
    - Unterlasse nichtssagende Antworten wie "Danke" oder "werde ich mal testen" oder ähnliches, sofern Du nicht der Threadersteller bist und einen Lösungsvorschlag angeboten bekommen hast.
    - Vermeide Doppel-Posts (zwei Beiträge von Dir hintereinander) sondern editiere wenn möglich Deine Posts.

    Danke...

    • 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

      www.elektronik-kompendium.de wrote:

      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.
      Cheers,
      Marcus
      -------------------------------------------------------
      Mein DoorPi (Eingebaut und in Betrieb)

      The post was edited 1 time, last by MarcusS ().

    • 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.
      Mit freundlichen Grüßen

      Andreas
    • @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.

      doorpi.org/forum/thread/66-ras…rpi/?postID=2515#post2515
      Mit freundlichen Grüßen

      Andreas
    • 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.
      Images
      • GPIO-ZDiode.JPG

        180.24 kB, 1,302×1,038, viewed 1,333 times
      Bis Ende September beruflich und privat abwesend. Ab Oktober geht es mit DoorPi weiter :)

      The post was edited 2 times, last by AndyGR42 ().

    • 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.
      Bis Ende September beruflich und privat abwesend. Ab Oktober geht es mit DoorPi weiter :)
    • 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
      Mit freundlichen Grüßen

      Andreas
    • 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.
      Bis Ende September beruflich und privat abwesend. Ab Oktober geht es mit DoorPi weiter :)
    • AndyGR42 wrote:

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


      [Blocked Image: http://pi-buch.info/wp-content/uploads/2014/08/soft-reset.png]

      das Bild stammt von pi-buch.info

      Hier ist meine doorpi.ini

      Source Code: doorpi.ini

      1. [DoorPi]
      2. base_path = /usr/local/etc/DoorPi
      3. eventlog = !BASEPATH!/conf/eventlog.db
      4. is_alive_led =
      5. last_snapshot =
      6. [DoorPiWeb]
      7. indexfile = index.html
      8. ip =
      9. loginfile = login.html
      10. online_fallback = http://motom001.github.io/DoorPiWeb
      11. port = 80
      12. public = AREA_public
      13. www = !BASEPATH!/../DoorPiWeb
      14. [EVENT_OnStartup]
      15. [SIP-Phone]
      16. firewallpolicy = PolicyNoFirewall
      17. audio_codecs = PCMA,PCMU
      18. call_timeout = 15
      19. capture_device = ALSA: C-Media USB Headphone Set
      20. dialtone = !BASEPATH!/media/ShortDialTone.wav
      21. dialtone_renew_every_start = False
      22. dialtone_volume = 35
      23. echo_cancellation_enabled = False
      24. identity = Klingel
      25. local_port = 5060
      26. max_call_time = 60
      27. playback_device = ALSA: C-Media USB Headphone Set
      28. record_while_dialing = False
      29. records = !BASEPATH!/records/%Y-%m-%d_%H-%M-%S.wav
      30. sipphonetyp = linphone
      31. sipserver_password = geheim
      32. sipserver_realm = fritz.box
      33. sipserver_server = 192.168.178.1
      34. sipserver_username = 621
      35. stun_server =
      36. ua.max_calls = 2
      37. video_codecs = VP8
      38. video_device = V4L2: /dev/video0
      39. video_display_enabled = False
      40. video_size = vga
      41. [keyboards]
      42. onboardpins = gpio
      43. [onboardpins_keyboard]
      44. bouncetime = 200
      45. [onboardpins_OutputPins]
      46. 16 = Tueroffner
      47. [onboardpins_InputPins]
      48. 11 = call:11
      Display All