GPIO Buttons lösen oft doppelt aus

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich bin ganz neu hier, verfolge das Forum wegen Baus einer Phoniebox für meinen Sohn aber schon länger. Hat mir schon viel geholfen und das meiste hab ich dann auch ohne eigene Fragen immer irgendwie hinbekommen.

    Habe nun am Wochenende noch Buttons ergänzt, ein Display habe ich nicht verbaut. Eine Platine mit Widerständen und PINS hab ich hierzu gelötet wie sie in diversen Tutorials im Internet zu finden ist.

    Grundsätzlich bin ich sehr zufrieden, jedoch lösen die Buttons oft doppelt oder mehrfach aus. Ist das ein Problem der Buttons selbst oder kann man das besser konfigurieren?

    z.b. indem man irgendwie konfigurieren kann, dass eine gewisse Zeit zwischen zwei Tastendrücken vergehen muss?

    • Offizieller Beitrag

    Hallo XXXXBitter,

    willkommen im Forum! ;)

    Betrifft das alle Button oder nur einzelne? Was für Widerstände hast Du verlötet und wie sind die Taster angeschlossen? Mach mal ein paar aussagekräftige Fotos und lade diese hier ins Forum hoch!

    Bitte zeige auch mal Dein Skript, das die Taster steuert in einem Codeblock ().

    indem man irgendwie konfigurieren kann, dass eine gewisse Zeit zwischen zwei Tastendrücken vergehen muss?

    Möglich wäre das mit dem Parameter bounce_time=, siehe dazu auch hier: https://gpiozero.readthedocs.io/en/stable/api_input.html#button

  • Alles klar, schonmal vielen Dank für die schnelle Unterstützung.

    Verwendet wurden 10k und 1k Widerstände wie hier bei Splittschied zb empfohlen:

    http://splittscheid.de/selfmade-phoniebox/

    Kann es sein, dass der Parameter "pull_up" dafür ist und auf false stehen muss? Ich verstehe zwar nicht alles 100% was ich auf deiner verlinkten Seite lese, jedoch liest sich das für mich etwas so als ob das richitger wäre.

    Es betrifft grundsätzlich alle Taster, Bilder kann ich erst später machen, ebenso komme ich momentan nicht an das genaue Skript, aber vielleicht kann mir ja jemand sagen ob an der Vermutung mit "pull_up" was dran ist?!

    • Offizieller Beitrag

    Wenn splitti79 und Du das so verkabelt habt, wie es hier http://splittscheid.de/selfmade-phoniebox/#3C steht, dann sind beide Lösungen pullup. Einmal die internen Widerstände aktiv und anfangs extra noch externe Widerstände angelötet. Die Lötvariante ist von ihm fälschlicherweise als pulldown beschrieben, aber der Widestand ist ja an VCC, also oben (up). ;)

  • Wenn externe Widerstände verwendet werden, gehört meiner Meinung nach bei gpiozero der Parameter pull_up auf None gesetzt, damit die internen Widerstände deaktiviert werden, da man ansonsten die Widerstandswerte durch die Doppelbeschaltung unbewusst beeinflusst.

    Auch als kleiner Hinweis an splitti79 zu verstehen.

    Siehe hier unter Punkt 9:

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

  • Wenn externe Widerstände verwendet werden, gehört meiner Meinung nach bei gpiozero der Parameter pull_up auf None gesetzt, damit die internen Widerstände deaktiviert werden, da man ansonsten die Widerstandswerte durch die Doppelbeschaltung unbewusst beeinflusst.

    Auch als kleiner Hinweis an splitti79 zu verstehen.

    Siehe hier unter Punkt 9:

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

    Ja so in etwa habe ich das auch verstanden mit meinem Halbwissen. Also wäre es einen Versuch ert mit pull_up=none.

    Denn wenn ich das richtig verstehe, seid ihr ja unterschiedlicher Meinung? Kann denn die Beeinflussung der Werte in doppelter Auslösung resultieren?

    • Offizieller Beitrag

    Denn wenn ich das richtig verstehe, seid ihr ja unterschiedlicher Meinung?

    Nein, sind wir nicht. ;) Externe Widerstände kann man zusätzlich zu den intern aktivierten verwenden, allerdings verringert sich dann der Widerstandswert durch diese Parallelschaltung. Siehe den Link von Hofei, deshalb ist es besser bei Verwendung externer Widerstände die internen abzuschalten (auf None zu setzen, NICHT auf False!)

    Was meint das nun wieder?

    Der GPIO braucht einen zugewiesenen Standardwert, damit das Programm weiß worauf es reagieren soll:

    class gpiozero.Button(pin, *, pull_up=True, active_state=None, bounce_time=None, hold_time=1, hold_repeat=False, pin_factory=None)

    pull_up (bool or None) – If True (the default), the GPIO pin will be pulled high by
    default. In this case, connect the other side of the button to ground.
    If False, the GPIO pin will be pulled low by default. In this
    case, connect the other side of the button to 3V3. If None, the
    pin will be floating, so it must be externally pulled up or down and
    the active_state parameter must be set accordingly.active_state (bool or None) – See description under InputDevice for more information.
  • Hallo,

    hier mal das Skript.


    Ich versteht auch nicht so ganz was ihr mit Widerständen nur auf einer Seite meint? Es sind doch Pro Taster zwei Widerstände, einer "oben" und einer "unten"?!

    • Offizieller Beitrag

    Du könntest folgende Zeilen erstmal so abändern und berichten.

    Python
    next = Button(5,bounce_time=0.2)
    prev = Button(17,bounce_time=0.2)
    halt = Button(12,bounce_time=0.2)

    pull_up=True dort einzutragen ist Käse, weil das ohnehin der default-Wert ist. Das ist dem Maintainer (MiczFlor) zwar schon länger bekannt, aber naja...

    Zitat

    pull_up (bool or None) – If True (the default), the GPIO pin will be pulled high by
    default.
    [...]

    Bei lauter und leiser ist es gewollt, das die mehrfach reagieren und shutdown muss 2 Sekunden gedrückt werden um auszulösen.

    Ich versteht auch nicht so ganz was ihr mit Widerständen nur auf einer Seite meint? Es sind doch Pro Taster zwei Widerstände, einer "oben" und einer "unten"?!

    Der kleine 1k ist nur ein Schutz für den GPIO und der 10k ist der Pullup, der den Pin auf hight (gegen 3V3) zieht.

  • Für mich gerade interessant, welche Lösung ist denn jetzt sinnvoller zu nutzen?

    Eine generelle Beschaltung per Widerstände um einen Hardwaremäßigen definierten Zustand zu erreichen, oder die Nutzung der Definition durch den Raspi in der Software?

    Vor allem, ist trotz der "Software-Lösung" in irgendeiner Form eine Beschaltung der GPIO mit Widerständen zum Schutz empfehlenswert?

    Gruß
    Sascha

  • Mit Widerständen ist prellen nicht beizukommen. Dafür müsstest du zusätzlich einen Kondensator verbauen. Ich würde das über Software lösen.

    • Offizieller Beitrag

    @__deets__ Ich vermute das es ihm um Grundsatzfragen geht und nicht im Detail um Tasterprellen.


    MaleBorg Bei der derzeitigen Software der Phoniebox würde ich in jedem Fall die Hardwarevariante bevorzugen, weil der Maintainer hier auf Rpi.GPIO statt dem besseren gpiozero setzt, obwohl gpiozero mal verwendet wurde. :shy: Bei gpiozero ist der interne der Pullup per default aktiviert, bei RPi.GPIO muss das explizit im Programm angegeben werden und ob das aktuell der Fall ist, weiß ich nicht.

    Welche Version hast Du denn, RPi.GPIO oder gpiozero?

    Siehe hier Pullup: https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm

  • Hallo Hyle,

    Danke und stimmt es geht mir Grundsatzfragen.

    Ich baue gerade die erste Box und wollte es dann gleich richtig machen. Durch das stöbern hier im Forum bin ich halt auch mehrfach über die Frage gestolpert.

    Da ich sowieso eine Platine zur Verkabelung aufbauen wollte, frage ich lieber vorher, bevor ich das nochmal neu bauen darf ?


    Nachtrag: Sorry hab am Handy die Frage übersehen. Da ich die aktuelle Version aus dem Master Branch nutze, nutze ich dann wohl die RPI.GPIO Version.

    Gruß

    Sascha

    Einmal editiert, zuletzt von MaleBorg (13. November 2020 um 16:33) aus folgendem Grund: Frage von Hyle beantwortet

  • Hallo,

    ich habe das gleiche Problem wie XXXXBitter. Ich habe die 10k/1k Schaltung von Splittscheid (also eine Pull-Up Schaltung). Gleichzeitig nutzt meine Phoniebox auf dem Raspi Zero die RPi.GPIO mit folgender gpio-buttons.py Konfiguration:

    Bei mir habe ich doppelte Ausführung der Tastendrücke auf allen Tasten. Wo kann ich hier eventuell ansetzen?

  • Danke und stimmt es geht mir Grundsatzfragen.

    dann vergiss mal schnell

    einer "oben" und einer "unten"?!

    ist Unfug, entweder bindet man den OBEN an "pullup", oder man bindet den "UNTEN" an pulldown.

    Wohin soll die Reise gehen wenn an deinen Armen einer nach links und ein andere nach rechts zieht?

    Im Zweifel werden dir die Arme ausgerissen ohne das du dich irgendwo hinbewegst!:wallbash:

    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)

    • Offizieller Beitrag

    Jedesmal wenn ich den Kommentar in Zeile 19 im Skript lese könnte ich ... <X

    Sorry Vagabond97, ist nicht Dein Fehler!


    ist Unfug, entweder bindet man den OBEN an "pullup", oder man bindet den "UNTEN" an pulldown.

    jar Er bezog sich auf die Bauanleitung von splitti79 hier: https://splittscheid.de/selfmade-phoniebox/ nicht auf Pullup oder Pulldown. Finde ich aber auch sehr "unglücklich" ausgedrückt. ;)

  • Er bezog sich auf die Bauanleitung von

    die lese ich nicht, mir reichte

    "unglücklich" ausgedrückt.

    deswegen meine Erklärung dazu, man sieht das pullup + pulldown Unsinn ist.

    Einer ist ein pulldown der 10k und der 1k ist weder noch sondern ein Serienwiderstand

    Wer basteln will soll auch minimale Funktion anfangen zu verstehen!

    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)

Jetzt mitmachen!

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