Der Spaltentreiber ist ein Ausgabeport, der Zeilenleser ein Eingabeport des Mikrocontrollers. Die stets erforderlichen Widerstände sind oft bereits im Eingabeport des Mikrocontrollers integriert oder zuschaltbar. Deshalb können sie in der Schaltung entfallen!
Daraus ergibt sich allerdings auch die Notwendigkeit, mit Low-aktiven Signalen zu arbeiten, da alle Mikrocontroller Hochzieh-Widerstände (Pull-Up) und nie Tiefzieh-Widerstände (Pull-Down) haben. Gelegentlich zu sehende Tastenmatrizen mit externen Pull-Up- oder gar Pull-Down-Widerständen zeugen von der Stümperhaftigkeit des Entwicklers.
Wichtig: Ohne Entkopplungsdioden ist nur die Erkennung einer oder zweier Tasten sicher möglich, nicht mehr! Für ein klavierartiges Musikinstrument siehe unten.
Die Trivialmatrix erfordert 2n Leitungen für n2 Tasten. Bei rechteckicken Matrizen ist das Verhältnis etwas ungünstiger, m+n Leitungen für m*n Tasten.
In Fernbedienungen wird ausschließlich diese Abfrageart verwendet.
Wird irgendeine Taste gedrückt, wird ein Eingabe-Portpin nach
LOW gezogen, der Microcontroller erwacht
aus seinem Tiefschlaf, der Oszillator läuft an, und der Befehl nach SLEEP
bzw. die Interruptroutine wird angesprungen.
Diese beginnt nun mit der spaltenweisen Abfrage.
Die nicht abgefragten Spalten bekommen ein schwaches HIGH oder werden hochohmig geschaltet, damit weitere gedrückte Tasten keine Kurzschlüsse zwischen Treiberausgängen bewirken!
Dabei wird so lange vorgegangen, bis eine gedrückte Taste erkannt wird.
Eventuell ist gar keine Taste (mehr) gedrückt, dann ist nichts mehr zu tun.
Im Regelfall wird der Tastenkode verarbeitet und der entsprechende Befehl ausgeführt.
Das Erkennen des Loslassens aller Tasten erfolgt, indem der Ursprungszustand (alles LOW) des Spaltentreibers hergestellt wird. Dann müssen alle Zeilenleitungen HIGH werden.
Mehr als 2 Tasten?
Wird dagegen jede andere Taste gedrückt, ist deren Detektion nur eine Frage intelligenter Software.
Hierbei genügt ein reines Ausgabeport (bspw. eines Port-Expanders oder eines Schieberegisters) als Spaltentreiber, weil keine Kurzschlüsse durch mehrfache Tastendrücke möglich sind.
Ob die Software tatsächlich alle Tastenkombinationen auswertet ist Frage des Problems und des Geschmacks. Bei einem Klavier bspw. genügt es sicherlich, max. 10 gedrückte Tasten (für 10 Finger) zuzulassen.
Das Abfrageschema ist wie oben, nur dass die gerade aktivierte Spalte
stets als aktive Zeile zurückkommt (muss ausmaskiert werden).
Zwei Tasten gleichzeitig gehen hier nicht!
Ein Schlafmodus ist mit dieser Schaltung nicht möglich! (Bestenfalls nur für einige bestimmte Tasten.)
Auf n Portpins kommen n2-n = n*(n-1) Tasten.
Günstig für Kodeschlösser u. ä. ist die hier gezeigte Matrix mit 12 Tasten.
Eine Anreihung einer nach Masse gehenden Tastenreihe ist hier genauso möglich
wie im folgenden Fall, das ergäbe n2, hier 16 Tasten.
Hiermit ist keine Erkennung zweier Tasten möglich, Schlafmodus sowieso nicht. (Bestenfalls für die masseseitigen Tasten.) Es ist zwischen jeder Kombination zweier Portpins sowie nach Masse genau eine Taste.
Auf n Portpins kommen n*(n+1)/2 Tasten, hier sind es 10 Tasten.
Logisch, dass der Einschaltwiderstand der Taster wesentlich kleiner sein sollte als der Einzelwiderstand der Kette.
Diese Möglichkeit verlässt jedoch den Rahmen der Tasten-Matrix.
Eine externe PC-Tastatur als gelegentliches Eingabemedium lässt bzgl. der Tastenanzahl keine Wünsche offen...