Ports vervielfältigen zum Scannen von Tastatur-Matrix

Um eine 8×16-Tastatur-Matrix mit einem Micro zu scannen, möchte ich die Eingabe- oder die Ausgabe-Ports "vervielfachen".

Ich habe drei 4017-Decade-Counter hier, aber die zählen jeweils nur bis acht. Man kann die zwar in Reihe schalten, doch das erscheint mir umständlich.

Entdeckt habe ich 74154, der bis 16 zählen kann, den aber z.B. Reichelt nicht führt.

Dann hat mich ein Bekannter hingewiesen auf den MCP23017, mit dem man - im Gegensatz zu den Decade-Countern - wahlweise die Eingabe serialisieren kann. Ich sehe darin aber keinen Vorteil. Auch gibt es für den MCP23017 eine Arduino-Bibliothek. Doch auch hier sehe ich keinen Vorteil, denn die Alternative, der oben genannte 74154, ist wirklich einfach anzusteuern (high-low = Ausgabe um einen Pin verschieben).

Was würdet Ihr nehmen?

Als Arduino-Anfänger bin ich offen für alle Vorschläge.

128 Taster? Warum nicht aus einer alten / gebrauchten Tastatur den Controller nehmen und die Tasten entsprechend anschliessen? Vorzugsweise eine PS/2 Tastatur, die kann man per serieller Schnittstelle auslesen.

Schau öfters mal auf ebay nach: http://www.ebay.de/itm/74HC154-S-Dekoder-Demultiplexer-binar-schmales-Gehause-DIP24S-/310655996552?pt=Bauteile&hash=item48548a5288

Wobei I2C Port-Expander schon wesentlich besser und flexibler sind, da du mit Richtung und Pegel nicht festgelegt bist. Du kannst den MCP23017 für 16 Bit verwenden und den PCF8574 für 8 Bit. Es würden auch drei PCF8574 gehen. Alles an nur 2 Leitungen. Die Ansteuerung könnte kaum einfacher sein und eine extra Lib ist gar nicht mal nötig.

Für Lesen und Schreiben macht man sich jeweils eine eigene Methode. Dann kann man auch neue Werte mit nur einem Befehl schreiben. Du kannst dir so auch eine Methode schreiben die den Wert inkrementiert.

[quote author=Udo Klein link=topic=194877.msg1438565#msg1438565 date=1382474967] 128 Taster?[/quote] ThinkPad-X41-Tastatur.

Warum nicht aus einer alten / gebrauchten Tastatur den Controller nehmen und die Tasten entsprechend anschliessen?Vorzugsweise eine PS/2 Tastatur, die kann man per serieller Schnittstelle auslesen.

Weil 1. das Tastatur-Layout anders ist, und ich 2. das relativ komplexe PS/2-Tastatur-Protokoll vom Arduino interpretieren lassen müsste (OK, dafür gibt's vielleicht Bibliotheken). Zwar soll die Tastatur später wie eine USB-Tastatur funktionieren, aber mit ein paar Sonderfunktionen.

Hm, aber vielleicht gibt es doch eine Lösung in die Richtung. Der Vorteil wäre, dass ich mich z.B. nicht um das Debouncen kümmern muss. Abweichungen im Tastaturlayout könnte ich vielleicht im Arduino korrigieren.

PS2 mit Arduino:

http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html

Im Anhang die Controller-Platine einer alten Cherry-PS/2-Tastatur vom Typ RS 6000. Nicht so klar ist mir die Bedeutung der Erdung. Für jede Taste gibt es dann nämlich drei Schichten: Spalte und Zeile, die beim Drücken verbunden werden, und Erde darunter, offenbar mit Zeile verbunden. Ganz seltsam ist, dass für einige wenige Tasten zusätzlich die Spalte mit Erde verbunden scheint. Das ist die Pause-Taste und am Nummernblock: Num, /, *, -, 7, 8, 9, +

So oder so ist die Anschaffung eines MCP23017 wohl nicht verkehrt. Das Ding scheint universell einsetzbar.

feklee: Entdeckt habe ich 74154, der bis 16 zählen kann, den aber z.B. Reichelt nicht führt.

Gibts doch bei Reichelt... ;) http://www.reichelt.de/ICs-74HC-DIL/74HC-154/3/index.html?&ACTION=3&LA=446&ARTICLE=3145 http://www.reichelt.de/ICs-74HC-DIL/74HC-154B/3/index.html?&ACTION=3&LA=446&ARTICLE=3146

sth77: Gibts doch bei Reichelt... ;)

:) Meine Such-Skills für Elektronik-Teile haben wohl Verbesserungsbedarf.

Den MCP23017 (I²C) habe ich nicht bei Reichelt gefunden, aber den MCP23S17 (SPI). Dafür gibt’s auch eine Lib.

Lib ist wie gesagt gar nicht nötig. Die entsprechenden Methoden kann man sich auch selbst schreiben. Das IC hat viele Funktionen, die du gar nicht brauchst. Daher muss man nicht alles implementieren.