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?
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.
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).
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.
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.
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/
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 😉
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.
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 🤔
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.
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?
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 😊
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.
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? 🤔