Mehrere Buttons an GPIO anschließen

  • Hallo,
    ich möchte 56 Buttons an meinem Raspberry Pi anschließen, davon laufen max. 5 zu selben Zeit. An dem Pi hängt außerdem noch ein Display (https://www.reichelt.de/Progra…OUPID=5514&ARTICLE=144719) weshalb die Pins vom GPIO teilweise belegt sind. Meine Frage ist allerdings welche Kostengünstige und Stromsparende Möglichkeit gibt es? Bis jetzt habe ich nur die Option gefunden ein Schieberegister oder ein FPGA zu benutzen gefunden.


    LG

  • zwei I2C Portexpander


    z.B. 2xPCF8574(a)


    einer liefert 8 Spalten als out
    einer liest 8 Zeilen als in


    somit sind 8 x 8 Tasten in einer Matrix möglich


    erst wird zyklisch eine Spalte mit Spannung Port out aktiviert, dann wird an der IN Adresse Zeile gelesen



    Beispiel Bild
    http://halvar.at/elektronik/kl…astenfeld/keypad44tk2.png



    das hier ist billig und sollte helfen 2x


    http://www.ebay.de/itm/PCF8574…f13eea:g:eZYAAOSwcBhWbozX


    fertig bis auf die 56 Taster anschliessen

    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)

    Edited once, last by jar ().

  • Wenn der I2C Port nicht so viel ausgelastet werden soll, wäre auch ein Mikrocontroller mit >=17 (56 == 7*8, d.h. 15Pins für die Taster und 2 für I2C) freien IO Ports möglich. Der Vorteil wäre, dass im Mikrocontroller die zyklische Prüfung durchgeführt werden könnte und der komplette Zustand der 56 Tasten dann mit einer 7Byte großen Abfrage ausgelesen werden kann.
    Nachteil ist, dass du die Utensilien für die Programmierung eines Mikrocontrollers benötigst. (Ein Arduino Nano wäre zwar auch möglich, da dieser aber meist mit 5V läuft müsste man die Signalleitung noch entsprechend beschalten.)


    Gruß
    Chris


  • Nachteil ist, dass du die Utensilien für die Programmierung eines Mikrocontrollers benötigst. (Ein Arduino Nano wäre zwar auch möglich, da dieser aber meist mit 5V läuft müsste man die Signalleitung noch entsprechend beschalten.)


    könnte man auch gleich mit einem 8MHz für 3,3V arduino mini 328p machen


    dazu zum Programmieren


    http://www.ebay.de/itm/Arduino…41321b:g:0rQAAOSw34FVIIKA



    7 Ports bilden out 8 Ports scannen in 1-2 Ports senden den Zustand

    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)

    Edited once, last by jar ().

  • Moin!


    Ich habe auch eine Frage bzgl mehrerer Taster. Ich möchte gerne 4 Taster anschließen, und nach dem, was ich bisher gelesen habe, sollte man die GPIO-Anschlüsse mit Widerständen auf Masse ziehen, um einen definierten Pegel von Null zu erhalten. Also würde das nach meiner Logik auf die Schaltung unten hinauslaufen. Die Widerstände sollen 27kOhm betragen.


    Dabei sind aber die einzelnen GPIO-Anschlüsse jeweils über zwei Widerstände miteinander verbunden. Müssen da noch Dioden zwischen die einzelnen Anschlüsse?

  • Hallo PInguin,
    wo willst du genau Dioden hinsetzen?
    ich würde sagen, die Schaltung passt so, auch wenn ich die 27kohm etwas hoch finde. Das ist aber nur so ein Gefühl, dass ich da etwas kleinere nehmen würde (z.B. 10k oder 4,7k).
    Gruß
    ChrisvA


  • ...., und nach dem, was ich bisher gelesen habe, sollte man die GPIO-Anschlüsse mit Widerständen auf Masse ziehen, um einen definierten Pegel von Null zu erhalten.


    du hast nicht genug gelesen!
    besser wäre R nach + und GPIO Taster nach GND

    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)

  • Du meinst also, es wäre besser, wenn die Pins immer "high" wären, und nur durch die Taster auf "low" gesetzt werden? Warum wäre das besser?


    Und noch eine Frage: es gibt laut Schaltplan 12 Pins mit der Bezeichnung "GPIO-0" bis "GPIO-11", die für solche Zwecke beliebig für das Auslesen von Tasters und/oder das Setzen von Schaltern benutzt werden können. Wenn ich für diese Zwecke mehr als 12 Anschlüsse benötige, gibt es dann noch einen anderen Weg als so einen "Expander" wie weiter oben beschrieben? Was ist mit den restlichen Pins, die nicht V+ oder GND sind, können davon welche verfügbar gemacht werden, wenn ich z.B. keine serielle Schnittstelle benötige?


    Ich brauch 15 Anschlüsse, die ich beliebig "betasten" und beschalten kann. Es fehlen mir also 3 Anschlüsse. Woher kann ich die bekommen?


    wo willst du genau Dioden hinsetzen?


    Ich dachte an Dioden zur Vermeidung der Verbindung der einzelnen GPIO-Pins. Wie auf dem Schaltplan ersichtlich, ist jeder Pin mit jedem anderen über 2xR verbunden. Aber das geht anscheinend, das ist in jedem Schaltplan, den ich im Netz gefunden habe und der mehr als 1 Taste beinhaltet, genau so.

    Edited once, last by PInguin ().

    • Official Post

    17 Pins (Modell A und B) bzw. 26 Pins (Modell A+ und B+, sowie Raspberry Pi 2 Modell B) kannst du frei belegen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • und dann gibt es noch Portextender z.B. 8x I2C PCF8574(a) für je 8 Taster oder als out also 64 (8x8) Ports, der MCP kann mehr I2C, SPI bis zu 16 Ports muss man mal ausrechnen.


    PCF8574 und PCF8574a belegen sogar verschiedene Adressen wären also 128 Ports und am PI nur 3 Leitungen, SDA, SCL und GND

    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)

    Edited once, last by jar ().


  • und dann gibt es noch Portextender z.B. 8x I2C PCF8574(a) für je 8 Taster oder als out also 64 (8x8) Ports, der MCP kann mehr I2C, SPI bis zu 16 Ports muss man mal ausrechnen.


    Das klingt gut, denn das hätte auf alle Fälle den Vorteil, daß mir noch GPIO-Kontakte für später übrigbleiben, wenn ich noch mehr basteln will. Dann muss ich jetzt nur noch nach Anschlussbeispiele bzw Anleitungen für diesen Extender Ausschau halten. Falls Du einen Link hast: Danke! :)


    Was ich so ganz spontan nicht verstehe: wieso kann das Ding als Eingang nur 8 Taster, aber als Ausgang 64 Schalter? Ist das ein digitaler Ausgang, an dem ein Binärwert von 1 bis 64 angelegt wird, oder hat der wirklich 64 Anschlüsse, an denen ich direkt Relais oder LED anschließen kann?

  • och manno


    jeder PCF8574 hat 8 Bits, ein Byte und 8 PCF8574 kann man per Adresse wählen! macht 8 x 8 = 64


    bekommt man nun auch statt PCF 8574 die PCF8574a hat man 2 Basisadressen und dann kann man 2 x 8 x 8 ansteuern


    http://www.ebay.com/itm/PCF857…ment-Module-/400453349150


    ob man nun PCF8574 oder PCF8574a bekommt muss man sehen oder nachfragen


    ich finde Module nur ohne 'a'


    'a' Typen kann man aber als Chips kaufen, dann muss man das selber aufbauen


    die PCF8574(a) arbeiten prima bei 3,3V für den PI man muss keine Pegelwandler vorsehen und kann direkt Taster anschlissen oder ULN 2803a als Treiber für LEDs oder Relais
    Automatisch zusammengefügt:[hr]
    für 64 Tasten reichen aber 2!


    man macht eine Tasten Spalten / Zeilen Matrix 8 Spalten und 8 Zeilen


    man legt an einem PCF8574 ein high als out an an eine Spalte!


    und liest an dem 2ten PCF8574 die Zeile dort wo das high ankommt ist der Schnittpunkt und identifiziert die Taste


    https://www-user.tu-chemnitz.d…troller/Tastenmatrix5.gif


    R braucht man nicht bei PCF8574

    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)

    Edited once, last by jar ().


  • Gut, das habe ich kapiert. jetzt müsste ich nur noch wissen, wie der Pi dann merkt, wenn ich einen Taste drücke. Dazu muss ich mich noch mal im Netz unsehen. Aber schon mal Danke für den Tip!


    gerne, weiter gehts ins programmieren


    man legt nacheinander an alle Spalten I2c PCF8574 ein high an und liest die Zeile


    dort wo sich in der Zeile da high ergibt muss die Taste gedrückt sein


    bei einer Matrix mit nur 2 "Byte" ist es etwas mehr Programmierarbeit, aber man spart Ports und Verkabelung.


    Also zuerst auf den Spalten Port


    eine 1 (2^0) Bit 0 dann
    eine 2 (2^1) Bit 1 usw.


    Es wird immer nur eine Spalte unter high 3,3V gesetzt und wo die Zeile high zurückliefert, das wäre dann die gedrückte Taste.


    Aber halt da die PCF8574 ja selber high als Input liefern muss man die Abfrage umdrehen, ich setze nur die Abfragespalte auf low


    wie mache ich das?


    weill ich Spalte 1 setzen, muss ich 255 - 1 rausschreiben, alle ausser Spalte 1 sind high
    wird nun eine Taste in Spalte 1 gedrückt, welche Zeile auch immer sehe ich das am LOW also wo die 0 steht!

    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)

  • Danke für die Erklärung! Das bringt mich schon weiter. :)


    Wenn ich das richtig verstanden habe, kann ich mit einem dieser Bausteine nicht gleichzeitig Taster abfragen und LEDs schalten, sondern ich benötige zwei dieser Portexpander, einen für die Taster und einen für die LEDs. Richtig?

  • doch ginge


    du willst ja nur 56 Tasten!


    2 Portexpander sind 8 x 8 =64
    also wären 8 Ports frei aber das wird eine Knobelei


    macht 7 Spalten oder Zeilen und du musst ja nur Taster abfragen


    könntest mit den 8 freien LEDs schalten


    oder du machst es dir einfach und nimmst einen dritten Portxpander nur für LEDs, bis zu 8 Portexpander wären ja möglich

    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)


  • doch ginge


    du willst ja nur 56 Tasten!


    Ne, das mit den 56 Tasten ist jemand anders. :)


    Ich will "nur" 5 Taster und 5 dreifarbige LED als Zustandsanzeige anschließen.


    Quote


    also wären 8 Ports frei aber das wird eine Knobelei


    Knobelei in Form von Programmierarbeit oder von Lötarbeit?


  • Ne, das mit den 56 Tasten ist jemand anders. :)


    Oke das ist was anderes



    Ich will "nur" 5 Taster und 5 dreifarbige LED als Zustandsanzeige anschließen.


    na denn brauchst aber doch 2 Ports, es sei denn du willst Tricksen, sehe ich aber noch nicht


    5 Taster brauchen 5 Ports oder als Matrix 2 x 3 = 6 aber auch 5 Ports!


    5 Leds dito denn die müssen ja unabhängig laufen.


    Wenn du eine Matrix aus 4 x 4 (oder 3x4) baust kannst du natürlich 16 (12) ansteuern, d.h. 5 Taster und 5 LEDs aber das habe ich noch nie versucht, das wäre zu prüfen und auszuknobeln.


    Während der Tastenabfrage könnten die LEDs flackern, alles eine Frage vom Timing!
    Ist man schnell genug fällt das Flackern der LEDs nicht auf.
    Automatisch zusammengefügt:[hr]


    Ich will "nur" 5 Taster und 5 dreifarbige LED als Zustandsanzeige anschließen.


    5 dreifarbige LED brauchen aber 15 Ports! oder sind das APA oder WS2801 LEDs?

    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)

    Edited once, last by jar ().