Hier ist das Produkt. Ich verstehe die Idee: Diese 16 Tasten verwenden eine 4x4-Matrix. 4 Zeilen für Zeilen, 4 Zeilen für Spalten, und wir haben 8 Kabel.
Aber:
Wie kann das ohne Multiplexer funktionieren?
Kann dies das Drücken mehrerer Tasten genau erkennen? Auch wenn Schaltflächen dieselbe Zeile oder Spalte verwenden? Beispiel: Tasten an Position (2,2) (2,3), (3,2) und (3,3) gleichzeitig gedrückt.
Wie funktioniert es?
Antworten:
Das tut es nicht. Die Tastaturplatine scheint nur Schalter zu haben, vielleicht mit einigen Dioden, die wir nicht sehen können. Auf der linken Platine befindet sich jedoch ein Prozessor. Mit ziemlicher Sicherheit wird Multiplexing in Firmware durchgeführt.
Der Multiplexing-Algorithmus funktioniert ungefähr so:
Der obige Vorgang wird schnell genug wiederholt, so dass alle Tasten innerhalb einer Zeit überprüft werden, die sich für einen menschlichen Beobachter immer noch augenblicklich anfühlt. Die menschliche Grenze von "augenblicklich" liegt in diesem Zusammenhang bei etwa 50 ms. Selbst ein Low-End-Mikrocontroller kann eine 4x4-Tastatur in viel kürzerer Zeit scannen.
Wahrscheinlich ja. Eine Möglichkeit besteht darin, mit jeder Taste eine Diode in Reihe zu schalten. Diese könnten sich auf der Unterseite der Tafel befinden, die Sie anzeigen. Bei den Dioden funktioniert der oben beschriebene Algorithmus einfach.
Eine andere Möglichkeit besteht darin, Widerstände mit Leitungen in Reihe zu schalten und ihre analoge Spannung zu messen. Selbst wenn mehrere Schaltflächen mehrere Zeilen- / Spaltenzeilen kurzschließen, können Sie eventuell herausfinden, welche Schaltflächen gedrückt werden. Dies erfordert A / D-Eingänge im Mikro, nicht nur digitale Eingänge wie bei Verwendung von Dioden.
quelle
Ohne Dioden ... erhalten Sie Phantomrechtecke.
Zum Beispiel in Ihrem Beispiel (2,2) (2,3), (3,2) und (3,3); Sie haben ein ironisches Beispiel gewählt, indem Sie ein Rechteck gewählt haben. Wenn Sie tatsächlich alle vier drücken, funktioniert es. Aber wenn Sie die drei Ecken des Rechtecks drücken, wird die vierte Ecke auch erscheinen wird gedrückt, auch wenn es nicht ist .
Diese Tastatur ist eindeutig für die Eingabe von Tastaturdaten gedacht, bei denen die Benutzerkonvention jeweils ein Tastendruck ist. Sie bemerken beispielsweise, dass auf einer Tastatur zur Eingabe einer Tankstellen-Kreditkarte keine Umschalttasten vorhanden sind.
Wenn Sie jedoch S1 zu einer Umschalttaste und S3 zu einer Alt-Umschalttaste gemacht haben, sodass Benutzer beide vernünftigerweise gedrückt halten können, während sie gleichzeitig S13 drücken, scheint S15 ebenfalls gedrückt zu sein.
quelle
So geht's ohne kontinuierlichen Scan:
quelle
Ich habe dies mit Assembler auf nackten Atmel AVR-Mikrocontrollern gemacht.
Der Einfachheit halber: Tastaturzeilen: Verwenden Sie die Arduino-Pins 4,5,6 und 7 (AVR-Pins PD4, PD5, PD6 und PD7). Tastatursäulen: Verwenden Sie die Arduino-Pins 8, 9, 10 und 11 (AVR-Pins PB0, PB1, PB2 und PB3 ) Machen Sie Row-Pins-Eingänge mit aktivierten Klimmzügen. Spaltenstifte ausgeben Ausgabe und Ausgabe von Nullen an diese. Aktivieren Sie Pin Change Interrupts für alle Zeilen- und Spalten-Pins. http://playground.arduino.cc/Main/PinChangeInterrupt Durch Drücken einer Taste auf der Tastatur wird ein Row-Pin nach unten gezogen. Die Interrupt-Routine muss die Zeilenstifte lesen und herausfinden, welcher Stift niedrig ist. Die oberen 4 Bits sollten drei Einsen und eine Null sein. Wenn Sie eine 8-Bit-Variable uint8_t verwenden, können Sie sie durch 16 oder (var >> 4) teilen, um die 4 Bits in die unteren Bits der Zahl zu setzen. Sie können ein bitweises ODER | verwenden Operation mit 240, um die oberen 4 Bits auf 1s zu setzen, und eine bitweise NOT ~ -Operation, um alle Bits zu invertieren, sodass nur ein Bit gesetzt ist, das die Zeile darstellt, in der sich der Tastendruck befand. Speichern Sie diese Nummer als 0, 1, 2 oder 3.
Wechseln Sie die Pin-Konfiguration:
Machen Sie Spaltenstifteingaben mit aktivierten Klimmzügen. Zeilenpins ausgeben Ausgabe und Ausgabe von Nullen an sie. Lesen Sie die Säulenstifte und finden Sie heraus, welcher Stift niedrig ist. Führen Sie eine ähnliche Manipulation mit diesem Wert durch, außer dass Sie die Zahl nicht nach rechts verschieben müssen. Nach var ^ 240 und ^ var haben Sie ein einzelnes Bit, um die Spalte darzustellen, in der sich der Tastendruck befand. Denken Sie daran, Interrupts zu deaktivieren, bevor Sie die Ports neu konfigurieren, da dies wahrscheinlich unerwünschte Interrupts auslösen wird. Möglicherweise müssen Sie Interrupt-Flags löschen, wenn Sie die Interrupt-Routine verlassen, um eine doppelte Interrupt-Behandlung zu verhindern.
quelle