Wie erweitere ich einen Mikrocontroller-GPIO auf ~ 300 Eingänge?

Ich muss die Adresse der gedrückten Tasten herausfinden. Angenommen, ich benötige etwa 300 Eingangsports, die für einzelne Tasten reserviert sind. Dann würde ich 300 E / A-Pins benötigen, um die Adresse einer gedrückten Taste zu lesen, was für einen Mikrocontroller ohne die Verwendung einer integrierten Schaltung nicht möglich ist.

Meine Frage ist, gibt es einen IC, der eine individuelle Adresse für die Drucktaste zuweisen würde, sodass er mir immer dann eine Adresse wie 0xA senden/geben würde, wenn ich eine Taste drücke? Oder gibt es Abhilfe?

Müssen Sie den genauen Moment kennen, in dem jede Permutation der 300 Tasten gedrückt wird? Oder können Sie stattdessen akzeptieren, sie zu scannen?
@jonk Ich kann bis zu 500 Millisekunden Verzögerung nehmen.
serieller Tastaturscanner
Für 300 Tasten bräuchten Sie nur 35 I/O im Matrixformat (20x15). Möglicherweise können Sie mit anderen Techniken wie Charlieplexing mit weniger davonkommen.
@Enslaved Erwägen Sie außerdem sorgfältig Techniken, die Dioden verwenden, um beim Scannen mehrere Tastendrücke ohne Verwirrung zu erkennen.
@RonBeyer Ich weiß, wie man Charlieplexing für LEDs verwendet, aber ich habe noch nie davon gehört, es zum Multiplexen von Schaltern zu verwenden. Hast du dafür Referenzen?
Wo sind die 300 Knöpfe? Auf einer Platine in der Nähe des Mikrocontrollers oder im ganzen Haus verteilt mit vielen Kabeln?
Betrachten Sie ein FPGA mit einem Soft- oder Hard-Prozessor darin. Dies kann >1000 IO ermöglichen.
Können mehrere Tasten gleichzeitig gedrückt werden?
Ein sehr ordentlicher Charlieplexing-Artikel: ednasia.com/news/article/…

Antworten (3)

Wenn 256 Tasten ausreichen, können Sie zwei verwenden MCP23017(16-Port-I2C-GPIO): die erste als 16 Ausgänge, die zweite als 16 Eingänge, natürlich mit einer 16x16-Tastenmatrix. Wenn dies nicht ausreicht, können Sie drei davon verwenden oder zusätzliche drei Zeilen von der MCU "ausleihen" (so werden 16x19 = 304 Tasten möglich).

Wie @jonk erwähnt hat, müssen Sie, wenn Sie mehrere gleichzeitig gedrückte Tasten erkennen möchten, Dioden ( 1N4148, 1N914) zu jeder Taste hinzufügen, wie unten:

Tastenmatrix (mit Dioden für jede Taste)

Wenn Sie nicht mit mehreren gedrückten Tasten umgehen müssen, müssen Sie nur die Ausgangsleitungen durch Dioden schützen, wie unten:

Tastenmatrix (nur mit Dioden auf Ausgangsleitungen)

MCP23017ist recht günstig und funktioniert sehr gut.

Um dies noch hinzuzufügen, würden Sie normalerweise keine diskreten 1N4148 verwenden. So wie Sie Widerstandsnetzwerkpakete erhalten können, können Sie auch Pakete mit mehreren Dioden erhalten.
@Graham, es hängt von der mechanischen Idee der Tastenmontage ab. Es liegt an OP.

Ich würde für diese Rolle auch Multiplexing oder Charlieplexing wählen.

Wenn Sie darauf bestehen, dedizierte I/O-Leitungen für jede einzelne Taste zu verwenden, könnten auch eine Handvoll Schieberegister die Arbeit erledigen, zB SN74HC166/SN74HC165. Sie können die beiden auch kombinieren, 595er verwenden, um ein Muster herauszuschieben, und 166er, um die Schaltflächenzustände einzugeben. Es ist einfach, diese Chips mit der SPI-Schnittstelle eines Mikrocontrollers zu verwenden, und sie sind sehr billig, wenn Sie mehrere davon gleichzeitig kaufen.

Charlieplexing wird für LEDs verwendet, aber ich bin mir nicht sicher, ob es auf Leseschalter anwendbar ist. Hast du dafür Referenzen? Warum empfehlen Sie den 166/165 und sagen dann "verwenden Sie 595s"? Denken Sie daran, dass Sie mit einem Anfänger sprechen.

Ja. Die einfachste Lösung heißt Schieberegister. Sie können sie sowohl für die Eingabe als auch für die Ausgabe verwenden – obwohl im Allgemeinen jeder Chip dem einen oder anderen zugeordnet ist. Nun, das heißt, sie sind entweder "seriell zu parallel" oder "parallel zu seriell".

Angenommen, Sie haben ein 8-Bit-Parallel-zu-Seriell-Schieberegister, es hat 8 parallele Eingangsleitungen, und wenn Sie die serielle Leitung lesen, gibt es Ihnen den Wert jedes seiner 8 parallelen Eingangspins nacheinander. Oder für die Ausgabe umgekehrt (das Schreiben von 8 Bits in eine Zeile setzt die Ausgabe auf alle 8 parallelen Ausgangspins). Normalerweise können Sie sie miteinander verketten, sodass das Lesen / Schreiben über diese 8 Bit hinaus die Werte des nächsten angeschlossenen Registers verschiebt.

Aber wenn Sie viele Eingänge haben, wie z. B. den Einbau einer Tastatur, dann ist es sinnvoll, die von anderen erwähnte Multiplexing-Anordnung zu verwenden. Auf diese Weise können Sie mit N GPIOs N 2 Eingänge lesen . Zusätzlich zu den Ratschlägen hier sollten Sie viele Tutorials online finden, da DIY-Tastaturen eine Sache sind.

Da Schieberegister so billig sind (ich habe sie bei 50 für 1 $ gesehen), geht es manchmal nur darum, die Komplexität so zu verwalten, wie es für Sie zu diesem Zeitpunkt am sinnvollsten ist.