Forum: Mikrocontroller und Digitale Elektronik KeyMatrix mit mehreren mcp23017


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian K. (christianknorr)


Lesenswert?

Hallo zusammen,
ich baue eine ButtonBox für den PC. Gibt sich mittels ESP32 via BTLE als 
Gamepad aus (es gibt nur Buttons, kein Steuerkreuz).
Das funktioniert auch schon.

Nun möchte ich eine vorhandene Tastatur-Matrix nutzen. Ich habe sie 
ausgelesen und komme auf 7 Zeilen und 25 Spalten (nicht alle 
Kombinationen gibt es, es sind 84 Tasten).

Nun stehen mir noch 4 mcp23017 Portexpander zur Verfügung. Aber alle 
Beispiele die ich finden konnte beziehen sich auf einen einzigen 
Expander.

Kennt jemand eine Möglichkeit mehrere MCP's an einer einzigen Key-Matrix 
zu nutzen?

Vielen Dank im Voraus,
Christian...


Ich nutze die Arduino IDE und habe diese Beispiele gefunden:
https://github.com/Mystfit/ESP32-BLE-CompositeHID/blob/master/examples/GamepadExamples/Keypad4x4/Keypad4x4.ino
https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/examples/mcp23xxx_button/mcp23xxx_button.ino
https://github.com/ReneRichterDE/ButtonMatrix/blob/main/examples/Example04_i2c_ioexpansion/Example04_i2c_ioexpansion.ino

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Christian K. schrieb:
> Beispiele die ich finden konnte beziehen sich auf einen einzigen
> Expander.
Tja....

Manchmal passiert es wirklich, dass man der erste ist.
Dann muss man selber Arbeit investieren.

Übrigens:
4 Expander sind für Arduinos Wire kein Problem.

Beitrag #7747176 wurde vom Autor gelöscht.
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Da der MCP23017 drei Adresspins hat, gibt es bis zu 8 Expander auf einem 
I²C Bus. Das sollte also klappen. Der Spaß beginnt, wenn du die INT A 
oder INT B aller Chips auswerten willst oder musst.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Christian K. schrieb:
> 7 Zeilen und 25 Spalten (nicht alle
> Kombinationen gibt es, es sind 84 Tasten)

Bist Du sicher? Das kommt mir sehr merkwürdig vor. Gibts Fotos bzw. auch 
sonst mehr Details?

von Peter D. (peda)


Lesenswert?

Matthias S. schrieb:
> Der Spaß beginnt, wenn du die INT A
> oder INT B aller Chips auswerten willst oder musst.

Man kann die doch als open-drain konfigurieren und dann parallel 
schalten.

Beachten muß man bei dem Chip, daß mit dem BANK-Bit die Adressen 
komplett durcheinander gewürfelt werden und leider auch das Register mit 
dem BANK-Bit selber. Es ist also ziemlich tricky, bei unbekannter BANK, 
den Chip in einen bekannten Zustand zurück zu bringen, ohne andere 
Register zu verstellen.
Vorzugsweise sollte man ihn daher im Resetzustand belassen (BANK 0).

von Michael B. (laberkopp)


Lesenswert?

Matthias S. schrieb:
> Das sollte also klappen.

Nur wenn er 3 elektrisch unabhängige Tastaturen anschliesst.

Nicht wenn die 3 an eine Matrix sollen.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Peter D. schrieb:
> Es ist also ziemlich tricky,
Es gibt in der Arduino Welt ein gefühltes Dutzend Libraries die diesen 
Baustein korrekt abhandeln.

Peter D. schrieb:
> durcheinander gewürfelt
Soweit ich das sehe, gibts da keine Notwendigkeit zum durcheinander 
würfeln.

Natürlich kann man das ganze I2C Gedönse neu erfinden, bzw. selber 
dengeln. Aber schneller fertig ist man damit wohl nicht. Und, ob man 
dann portablen Code hinbekommt, steht auf einem 2ten Blatt.
Ob der TO das hinbekommt ist auch fraglich, da ihm mit einer Matrix 
Abfrage grundsätzlich schon genügend gefordert scheint.

von Peter D. (peda)


Lesenswert?

Christian K. schrieb:
> Nun möchte ich eine vorhandene Tastatur-Matrix nutzen.

Michael B. schrieb:
> Nur wenn er 3 elektrisch unabhängige Tastaturen anschliesst.

Hä.

Christian K. schrieb:
> Ich habe sie
> ausgelesen und komme auf 7 Zeilen und 25 Spalten

Macht 32 IOs, d.h. 2 Expander mit je 16 IO-Pins.

von Michael B. (laberkopp)


Lesenswert?

Peter D. schrieb:
> Hä

Ja, du verstehst nicht. Versuche doch, das Problem zu verstehen, bevor 
du postest.

von Peter D. (peda)


Lesenswert?

Michael B. schrieb:
> Ja, du verstehst nicht.

Zitiere mal die Stelle von Christian K. mit den "3 Tastaturen".
Ich finde sie nicht.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Wenn man es geschickt anstellt, macht es wohl keinen großen Unterschied, 
ob 1 oder 3 Tastaturen.
Außerdem sind wir da nicht.
Bisher war nur von einer Matrix die Rede.

von Harald K. (kirnbichler)


Lesenswert?

Was mag in "Beitrag #7747176 wurde vom Autor gelöscht"  gestanden haben?

von Christian K. (christianknorr)


Lesenswert?

Mario M. schrieb:
> Christian K. schrieb:
>> 7 Zeilen und 25 Spalten (nicht alle
>> Kombinationen gibt es, es sind 84 Tasten)
>
> Bist Du sicher? Das kommt mir sehr merkwürdig vor. Gibts Fotos bzw. auch
> sonst mehr Details?

Ich hoffe, dass ich mich da nicht vertan habe. Ich hatte mich auch 
gewundert und fand diese Matrix sehr unübersichtlich und kompliziert. 
Ein Bild der Matrix habe ich nicht (dazu müsste ich das Teil zerstören), 
aber eine LibreCalc-Tabelle nebst Auswertung. Es handelt sich dabei um 
eine PrehKeyTec MCI84 ohne Elektronik. Also nur die Tastatur.
https://www.prehkeytec.de/produkte/programmierbare-tastaturen/mci-84/

von Christian K. (christianknorr)


Lesenswert?

Peter D. schrieb:
> Christian K. schrieb:
>> Nun möchte ich eine vorhandene Tastatur-Matrix nutzen.
>
> Michael B. schrieb:
>> Nur wenn er 3 elektrisch unabhängige Tastaturen anschliesst.
>
> Hä.
>
> Christian K. schrieb:
>> Ich habe sie
>> ausgelesen und komme auf 7 Zeilen und 25 Spalten
>
> Macht 32 IOs, d.h. 2 Expander mit je 16 IO-Pins.

Da bin ich mir nur zu 99% sicher, denn das Design wurde geändert. Ich 
glaube aber, dass die die ich hier habe von vor der Änderung sind.

Hier ist mehr zu finden (beachte "Wichtiger Hinweis!!!"): 
https://wolles-elektronikkiste.de/portexpander-mcp23017

von Christian K. (christianknorr)


Lesenswert?

Mario M. schrieb:
> Christian K. schrieb:
>> 7 Zeilen und 25 Spalten (nicht alle
>> Kombinationen gibt es, es sind 84 Tasten)
>
> Bist Du sicher? Das kommt mir sehr merkwürdig vor. Gibts Fotos bzw. auch
> sonst mehr Details?

Allerdings... kommt mir gerade in den Sinn: bei 32 Leitungen könnten es 
auch 2 8x8 Matrizen sein. 🤔

Das positiviert die Ausgangssituation erheblich 👍

von Christian K. (christianknorr)


Angehängte Dateien:

Lesenswert?

Hier zeige ich mal meine Analyse. Die Pins oben in der Matrix habe ich 
wirklich gemessen und bin blind von einer einzigen Matrix ausgegangen. 
Unten die Zordnung Zeile/Spalte habe ich irgendwann mal stupide 
vervollständigt als ich keine Treffer mehr hatte. Also das Multimeter an 
Pin 1 (Spalte) und 21, jede Taste gedrückt, kein Durchgang: dann muss es 
ja  ebenfalls eine Spalte sein. Vielleicht ist dem ja gar nicht so. Ich 
messe nochmal vom letzten Pin 32, vielleicht ergibt sich gleich etwas 
anderes 😉

von Peter D. (peda)


Lesenswert?

Der MCP23017 hat leider keine open-drain Ausgänge wie der PCF8574/A.
Werden in der Matrix mehrere Tasten gedrückt, können die Ausgänge 
gegeneinander kämpfen. Daher sind Dioden in den Ausgängen notwendig.

von Christian K. (christianknorr)


Lesenswert?

Peter D. schrieb:
> Der MCP23017 hat leider keine open-drain Ausgänge wie der PCF8574/A.
> Werden in der Matrix mehrere Tasten gedrückt, können die Ausgänge
> gegeneinander kämpfen. Daher sind Dioden in den Ausgängen notwendig.

Was passiert wenn keine Dioden verbaut werden? Zerstörung durch 
Kurzschluss? Blöd, denn an der Tastatur kann ich nichts ändern 🤔

Der ESP32 hat's bisher überlebt. Da habe ich dieses Folien-Keypad 
angeschlossen: https://learn.adafruit.com/matrix-keypad/pinouts

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Peter D. schrieb:
> open-drain Ausgänge

Dafür aber tristate (bis auf 2 Pins)

von Peter D. (peda)


Lesenswert?

Christian K. schrieb:
> Was passiert wenn keine Dioden verbaut werden?

Sollte nicht schlimm sein, lt. Datenblatt ist der Strom bei Low größer, 
d.h. Low setzt sich durch.
Bei Deiner 7x25 Matrix kommen die 7 Dioden einfach zum mcp23017 in 
Reihe.

von Christian K. (christianknorr)


Lesenswert?

Peter D. schrieb:
> Der MCP23017 hat leider keine open-drain Ausgänge wie der PCF8574/A.
> Werden in der Matrix mehrere Tasten gedrückt, können die Ausgänge
> gegeneinander kämpfen. Daher sind Dioden in den Ausgängen notwendig.

Und wenn ich jedem Pin einen 360 Ohm Widerstand spendiere? Dann fließen 
im schlimmsten Fall knapp 150mA durch den Chip und durch jeden Pin 
fließen auch weniger als 25mA die er abkann. Ob das dann noch zum 
detektieren reicht?

von Christian K. (christianknorr)


Lesenswert?

Peter D. schrieb:
> Christian K. schrieb:
>> Was passiert wenn keine Dioden verbaut werden?
>
> Sollte nicht schlimm sein, lt. Datenblatt ist der Strom bei Low größer,
> d.h. Low setzt sich durch.
> Bei Deiner 7x25 Matrix kommen die 7 Dioden einfach zum mcp23017 in
> Reihe.

Das ist ohnehin doch keine 7x25 Matrix wie ich nun gemessen habe 
(Screenshot folgt).

Achso, ich nahm an, es müsse eine Diode pro Taster sein und nicht pro 
Reihe 😊

von Peter D. (peda)


Lesenswert?

Eine Diode pro Taster braucht man nur, wenn 3 oder mehr Tasten 
gleichzeitig erkannt werden sollen.
Bei PC-Tastaturen sind deshalb Shift, Alt, Strg nicht mit in der Matrix.

von Christian K. (christianknorr)


Lesenswert?

Peter D. schrieb:
> Eine Diode pro Taster braucht man nur, wenn 3 oder mehr Tasten
> gleichzeitig erkannt werden sollen.

Mehrfache-Tastendrücke müssen nicht erkannt werden. Hauptsache es geht 
nix kaputt. Brauche ich die Dioden trotzdem?

von Christian K. (christianknorr)


Angehängte Dateien:

Lesenswert?

Christian K. schrieb:

> Das ist ohnehin doch keine 7x25 Matrix wie ich nun gemessen habe

Also das ist doch unübersichtlicher als ich dachte. Ich komme nach 
mehreren hin und her Versuchen auf 3 MCP23017.

von Peter D. (peda)


Lesenswert?

Christian K. schrieb:
> Also das ist doch unübersichtlicher als ich dachte.

Aber nur für die Software.
Verdrahtet werden maximal 32 Anschlüsse, d.h. 2 Expander.
Ein 3. IC bringt überhaupt nichts.

von Christian K. (christianknorr)


Lesenswert?

Ich muss aber doch Zeilen und Spalten definieren. Da habe ich aber noch 
kein System entdeckt. Einfach Zeilen 1-16 und Spalten 17-32 funktioniert 
nicht. Oder irre ich mich? 🤔

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.