Wie erstelle ich eine Tastatur - Matrix

Gepostet von : Komar aka Michał Trybus; Englisch-russische Übersetzung : firerock
Original : blog.komar.be/how-to-make-a-keyboard-the-matrix

Dies ist der erste Beitrag in einer Reihe auf Tastaturen; Ich hoffe er wird nicht der letzte sein. Ich möchte am Ende einen Kurs zur Tastaturherstellung von Grund auf neu absolvieren. Heute werde ich über digitale Eingabe-Ausgabe- und Tastaturmatrizen sprechen. Rüsten Sie sich mit Grundkenntnissen auf dem Gebiet der Elektronik aus - und los geht's.

Warum eine Matrix?


Und wie machen wir die Matrix? Und vor allem - warum wird es überhaupt gebraucht? Dies ist hauptsächlich auf die physikalischen Einschränkungen der Mikrocontroller zurückzuführen, auf denen die Tastaturen aufgebaut sind. Tatsache ist, dass mit zunehmender Anzahl von Ausgängen für Mikrocontroller und programmierbare Logikschaltungen auch deren Größe zunimmt, was wiederum zu einer Erhöhung des Energieverbrauchs, der Fähigkeiten, aber vor allem der Preise führt. Infolgedessen können Sie entweder einen billigen Chip mit einer geringen Leistung (die gut zu Ihnen passt), aber mit einer geringen Anzahl von Ein- und Ausgängen, oder einen leistungsstärkeren Chip wählen, dessen Leistung jedoch Ihre Anforderungen bei weitem übertrifft. Aber nur dieser leistungsstarke Chip verfügt über genügend Ausgänge, um jede Taste auf der Tastatur anzuschließen.

Über Jahrzehnte hat sich die Praxis in der Elektronik mithilfe verschiedener Tricks entwickelt, um die integrierten Kommunikationsfähigkeiten von Prozessoren und Steuerungen künstlich zu erweitern. Eine solche Methode, die sich gut für mechanische Kontakte (Tasten) eignet, ist die Erstellung einer Matrix. Um zu verstehen, wie es funktioniert, sind einige Grundkenntnisse erforderlich. Bevor wir fortfahren, aktualisieren Sie bitte das Ohmsche Gesetz .

Ein bisschen Theorie


Um zu verstehen, wie digitale Elektronik funktioniert, müssen Sie zwei Grundprinzipien lernen.

Prinzip eins besagt, dass es bei der Kommunikation innerhalb eines Schaltkreises nicht darum geht, dort etwas zu senden oder zu empfangen. Um die Kommunikation zwischen den beiden Geräten sicherzustellen, verbinden Sie einfach ihre Ergebnisse mit elektrisch leitendem Material miteinander. Danach wird angenommen, dass der Zustand des Materials (Spannung und Strom) an beiden Enden gleich ist. In der Realität ist dies natürlich nicht der Fall, aber für langsame Kommunikation und kurze Leiter funktioniert unsere Annahme gut. Es stellt sich heraus, dass das Senden und Empfangen von Informationen tatsächlich deren Weitergabe ist.

Von der Seite des Senders aus ändern Sie einfach den elektrischen Zustand des Leiters (indem Sie Gleichstrom in ihn einspeisen, sein Potential ändern), in der Hoffnung, dass der Empfänger diese Änderung erkennen und richtig verstehen kann.

Aus diesem Prinzip folgt auch, dass es keinen Zusammenhang zwischen der Kommunikationsrichtung und der Richtung des elektrischen Stroms gibt. Viele Menschen nehmen fälschlicherweise das Gegenteil an, und dies hindert sie daran, die Funktionsweise der Elektronik zu verstehen.

Wenn Sie einen Logikpegel von "0" senden möchten, wird normalerweise dafür die Spannung am Ausgang des Senders auf 0 V gesenkt, und der Strom fließt vom Empfänger zum Sender, so dass der Empfänger feststellen kann, dass der Logikpegel "0" entspricht. (Während die umgekehrte Richtung des Stroms bedeuten würde, dass irgendwo in der Schaltung ein negatives Potential vorhanden ist - und dies tritt in der digitalen Elektronik in der Regel nicht auf.) Andererseits wird eine Spannung angelegt, die der Versorgungsspannung entspricht, um den Logikpegel „1“ zu übertragen. und da dies meistens die höchste Spannung in der Schaltung ist, bleibt für den elektrischen Strom nichts anderes übrig, als vom Sender zum Empfänger zu fließen.

Prinzip Nummer zweiliegt in der Tatsache, dass es unmöglich ist, den Zustand des Leiters zu bestimmen, ohne diesen Zustand zu ändern. Es spielt keine Rolle, ob Sie Spannung oder Strom messen - in jedem Fall ist es dafür erforderlich, dass Elektronen durch Ihr Messgerät fließen. Der Elektronenfluss - dies ist der elektrische Strom, und da er fließt, bedeutet dies, dass sich in dem Knoten, an den Sie zur Messung angeschlossen sind, die Ströme und Spannungen bereits geändert haben (siehe Kirchhoffsche Gesetze ). Daraus folgt, dass Sie diesen Zustand beibehalten müssen, wenn Sie Informationen "übertragen" müssen, indem Sie den Zustand des elektrisch an einen anderen Ausgang angeschlossenen Ausgangs ändern, was bedeutet, dass Sie alle vom Empfänger auferlegten Anforderungen erfüllen müssen.

Knopf


Ein mechanischer Knopf (und in diesem Zusammenhang ist das Wort „mechanisch“ nicht mit dem Ausdruck „mechanische Tastatur“ verbunden) ist nur ein Paar Metallkontakte, die bei Kontakt die beiden Anschlüsse elektrisch verbinden. Natürlich gibt es andere Arten von Schaltern, die strukturell komplexer sind und mehr Ausgänge haben, aber sie sind für uns nicht interessant, weil sie nicht in Tastaturen verwendet werden.


Cherry MX-Taste. Bildquelle : Deskthority-Wiki

Nun, und wie verbinden wir den Knopf mit dem Eingang des Mikrocontrollers? Grundsätzlich kann jeder Eingang mit zwei möglichen logischen Ebenen arbeiten: "0" und "1". Es ist üblich, Spannungen nahe 0 V als logische Null und Spannungen nahe einer Versorgungsspannung (normalerweise 5 V oder 3,3 V) als logische Einheit zu akzeptieren. Das Problem ist jedoch, dass der mechanische Knopf allein die Spannung nicht steuern kann. Es steuert den Strom - das heißt, wenn wir zwei Knoten mit unterschiedlichem elektrischen Potential über die Taste verbinden, fließt der Strom zwischen diesen Knoten genau dann, wenn die Taste gedrückt wird.

Wenn wir jedoch einen Widerstand hinzufügen, können wir den Strom sehr leicht in Spannung umwandeln.


Pull-up-Widerstandstaste

Schauen Sie sich dieses Diagramm an. Wenn die Taste nicht gedrückt wird (der Stromkreis ist unterbrochen), fließt kein Strom durch sie, sodass die Spannung am Knoten „A“ nahe an der Versorgungsspannung VCC liegt (tatsächlich kleiner als VCC um den Wert des Spannungsabfalls über dem Widerstand gleich R • I). Wenn die Taste gedrückt wird (Stromkreis geschlossen), fließt Strom durch den Widerstand nach Masse. Da der Widerstand des geschlossenen Knopfes sehr klein ist (in der Größenordnung von Hunderten von Milliom), liegt die Spannung am Knoten "A" nahe bei "0".

In dieser Konfiguration wird der Widerstand als Pull-up bezeichnet, da er die Spannung auf das VCC-Niveau „hochzieht“. Und ohne Anschluss an die Stromversorgung über den Widerstand würde im Knoten „A“ überhaupt keine Spannung anliegen (in diesem Fall wird der Ausgang der Mikroschaltung als „in der Luft hängen“ oder in einem hochohmigen Zustand bezeichnet).

Es ist zu beachten, dass in den meisten modernen Mikrocontrollern bereits Pull-up-Widerstände vorhanden sind, die mit dem Programm schnell verbunden oder getrennt werden können. Die Hauptmethode zum Verbinden der Taste mit dem Mikrocontroller ist also wie folgt: Ein Pin der Taste befindet sich am Eingang des Mikrocontrollers, der andere Pin der Taste befindet sich am Boden. In diesem Fall wird, wenn die Taste nicht gedrückt wird, "1" an den Mikrocontroller gesendet, und wenn sie gedrückt wird, wird "0". Vielleicht widerspricht dies der Intuition, aber diese Verbindungsmethode ist die beliebteste.

Bitte beachten Sie, dass wenn wir einen der Stifte des Knopfes in der Luft hängen lassen, dh wenn wir ihn nirgendwo anschließen, dieser Knopf überhaupt nicht funktioniert: Wenn Sie ihn nicht drücken, hat dies keinen Einfluss auf den elektrischen Zustand des Ausgangs des Mikrocontrollers. Wir werden diese Eigenschaft weiterhin verwenden, wenn wir die Matrix erstellen.

Matrixprinzip


Das Grundprinzip der Tastaturmatrix ist die Fähigkeit, mehr als eine Taste an einen Eingang des Mikrocontrollers anzuschließen.

Mithilfe von Transistoren oder korrekt konfigurierten Mikrocontroller- Ausgängen können wir die Tasten einzeln mit der Erde verbinden, während der Rest in der Luft hängt. Die verbleibenden Schlussfolgerungen jeder der Schaltflächen werden zu einem Knoten zusammengefasst und mit dem Eingang verbundenMikrocontroller. Ich habe den Pull-up-Widerstand abgesenkt, da wir wissen, dass er bereits im Mikrocontroller in seiner Eingangsstufe vorhanden ist. Wir schalten abwechselnd jede Taste ein und verbinden ihre Ausgangsnummer 1 über den entsprechenden Ausgang des Mikrocontrollers mit Masse. Danach können wir den Status der Taste am Eingang ablesen, indem wir die Spannung von der Ausgangsnummer 2 entfernen. Andere an denselben Eingang angeschlossene Tasten wirken sich nicht aus auf seinen Zustand, weil ihre Nummer 1 Schlussfolgerungen derzeit in der Luft hängen. Das folgende Diagramm veranschaulicht diese Idee.


Viele Tasten, ein Eingang (Knoten "A")

"A" ist der einzige Eingang des Mikrocontrollers und "C1". "Cn" sind seine Ausgänge. An einem der Ausgänge wird eine logische „0“ gesetzt, dh innerhalb des Mikrokreises ist dieser Kontakt irgendwie mit Masse verbunden - daher fließt immer der Strom zu diesem Kontakt (gemäß dem ersten Grundprinzip). Wenn nun die an diesen Ausgang angeschlossene Taste gedrückt wird, wird der Eingang „A“ sofort über den Boden „gedrückt“ und auf „0“ gesetzt. Durch Drücken der anderen Tasten wird nichts geändert, da die Erdungsausgänge derzeit nirgendwo angeschlossen sind. Wenn wir die nächste Taste abfragen müssen, entfernen wir die logische „0“ vom aktuellen Ausgang und setzen diesen Pegel auf den nächsten Ausgang, so dass jederzeit nur einer der Ausgänge des Mikrocontrollers aktiviert wird.

Eine solche Konfiguration (wenn der Ausgang entweder mit Masse verbunden oder überhaupt deaktiviert ist) wird als Open-Drain-Ausgang (OS) bezeichnet (historisch gesehen mit offenem Kollektor (OK)). Hier habe ich einige Vereinfachungen vorgenommen - tatsächlich kann ein Kontakt nicht vollständig vom Stromkreis getrennt werden, es sei denn, er ist physisch von ihm getrennt. Für einfache digitale E / A ist diese Vereinfachung jedoch durchaus geeignet. Die meisten Mikrocontroller bieten die Möglichkeit, ihre Ausgangskontakte programmgesteuert so zu konfigurieren, dass sie im Betriebssystemmodus arbeiten. Aber was ist, wenn wir keine solche Gelegenheit haben? Es gibt eine andere Konfiguration - Push-Pull-Modus; Heute ist diese Option eine der beliebtesten. Diese Konfiguration funktioniert etwas anders. Im Zustand "0" wird der Ausgang immer noch auf Masse gedrückt, aber wenn der Zustand "1" auftritt, wird er auf die VCC-Versorgungsspannung gezogen.Damit der Ausgang in der Luft nicht mehr hängt, kann er selbst zur Stromquelle werden.

Welche Änderungen werden sich daraus für das Design der Matrix ergeben? Wenn wir nicht mehrere Tasten gleichzeitig drücken, dann keine. Aber wenn wir gehen, dann schauen Sie sich die Zeichnung an und stellen Sie sich für eine Sekunde vor, was dann passieren wird. Durch Klicken auf die beiden Schaltflächen verbinden wir die beiden unteren Ausgänge zu einem geschlossenen Regelkreis. Befindet sich einer von ihnen gleichzeitig im Zustand „0“ und der andere im Zustand „1“, fließt elektrischer Strom vom Ausgang auf „1“ zum Ausgang auf „0“. Und da dieser Strom durch nichts begrenzt ist (es gibt keine Widerstände), wird die Schaltung nicht nur instabil, sondern kann auch aus dem Chip herausfliegen. Natürlich ist es unwahrscheinlich, dass normalerweise ein logischer Zustand berücksichtigt werden kann.

Zeilen hinzufügen


Sie können das vorherige Beispiel als eine Matrix betrachten, die aus einer Zeile besteht. Erhöhen wir es jetzt, indem wir zusätzliche Zeilen hinzufügen. Wenn wir eine ganze Zeile an einen Eingang hängen können, warum können wir dann nicht eine ganze Spalte von Schaltflächen an einen Ausgang hängen? Es stimmt, es gibt eine Voraussetzung - jede Taste der Spalte muss mit einem separaten Eingang des Mikrocontrollers verbunden sein.

Wenn wir die Schaltflächen in Form einer regulären Matrix anordnen, wird diese Bedingung automatisch erfüllt. Die folgende Abbildung zeigt, wie die Schaltflächenmatrix aus n Spalten und m Zeilen aussehen wird ( achten Sie noch nicht auf grüne Zahlen ).


Einfache Tastaturmatrix

Das Lesen dieser Matrix ist sehr einfach. Wir fragen jeweils eine Spalte ab. Die Lesespalte wird ausgewählt, indem einer der Ausgänge „C1“ .. „Cn“ mit Masse verbunden wird (der Ausgang im OS-Modus wird in „0“ übersetzt). Wenn Sie nun abwechselnd die Zeilen "R1" und "Rm" abfragen, können Sie den Status jeder Schaltfläche der ausgewählten Spalte bestimmen. Knöpfe von anderen Säulen wirken sich nicht auf etwas aus, selbst wenn sie gedrückt werden, da ihre Erdungskabel im Moment in der Luft hängen (oder, wie sie in der Elektronik sagen, im Hi-Z-Zustand sind).

Nachdem die gesamte Spalte abgefragt wurde, gehen wir zur nächsten, lassen die aktuelle Ausgabe los und schieben die nächste auf Null. Das Matrix-Scannen gilt als abgeschlossen, wenn alle Spalten abgefragt werden. Wenn alles schnell genug erledigt ist, bemerkt der schnellste Schriftsetzer die Intervalle zwischen den Spaltenabfragen nicht. Selbst mit einem 16-MHz-Mikrocontroller können wir die gesamte Matrix problemlos tausendmal pro Sekunde scannen, während der schnellste Schriftsetzer im Test auf hi-games.net eine Geschwindigkeit von 203 Wörtern pro Minute (wpm) erreichte - das sind etwas weniger als 17 Klicks zweitens.

Beim Entwerfen einer Tastatur mithilfe einer Matrix reduzieren wir die Anzahl der Pins, die zum Verbinden aller Tasten erforderlich sind. Um die Anzahl der Schlussfolgerungen auf ein Minimum zu reduzieren, müssen wir eine Matrix erstellen, damit die Anzahl der Spalten so nahe wie möglich an der Anzahl der Zeilen liegt. In einer idealen Situation, wenn die Anzahl der Tasten beträgt , ist das Beste, was wir mit der Matrix erreichen können, 2nBesetzte Mikrocontroller-Pins. Heutzutage versucht jedoch beim Kompilieren von Matrizen selten jemand, die Anzahl der beteiligten Beine zu minimieren, da moderne Mikrocontroller in der Regel eine ausreichende Anzahl freier Schlussfolgerungen haben. Darüber hinaus kann die maximale Optimierung der Matrix in der Folge zu Unannehmlichkeiten führen - die Verdrahtung der Platine oder die Verteilung der Drähte im Endgerät wird spürbar komplizierter. Daher lohnt es sich, den bequemeren Weg zu gehen: Versuchen Sie beim Kompilieren der Matrix, die physische Anordnung der Schaltflächen zu befolgen. In diesem Fall hat die einfachste Matrix für eine Standard-Computertastatur nur 6 Zeilen und eine bestimmte Anzahl von Spalten, abhängig vom gewünschten Layout. Unter dem Gesichtspunkt der Anzahl der Schlussfolgerungen ist diese Lösung natürlich nicht die optimalste, aber in Zukunft wird zumindest die Verkabelung vereinfacht.

Aber was ist, wenn wir keine offenen Drain-Ausgänge haben?


Sie fragen sich vielleicht: Was sollen wir tun, wenn der ausgewählte Mikrocontroller noch keinen Betriebssystemmodus enthält? Nun, wir haben bereits herausgefunden, welche Probleme auftreten können, und dass es keine gute Idee ist, die Ausgänge an den VCC zu ziehen (dh sie an das Netzteil anzuschließen). Es gibt viele Möglichkeiten, dieses Problem zu lösen. Darunter befinden sich nicht nur spezielle OS-Ausgabepuffer, sondern auch Schieberegister mit OS-Ausgängen, um die Anzahl der beteiligten Abschnitte weiter zu minimieren. Es gibt jedoch noch eine andere sehr beliebte Technik, die häufig beim Entwurf von Computertastaturen verwendet wird (tatsächlich wurde sie früher häufig verwendet).

Das Problem von Spalten, die mit Push-Pull-Ausgängen verbunden sind, tritt in dem Moment auf, in dem zwei Tasten in derselben Zeile zusammen gedrückt werden. Wenn Sie gleichzeitig die Taste drücken, wird die Spalte abgefragt, in der sich eine der Tasten befindet.


Das Problem der Push-Pull-Ausgänge

Vom Ausgang, der auf "1" gezogen wird (und nicht im Hi-Z-Zustand hängt), beginnt ein Strom zu fließen. Es geht durch die nächstgelegene geschlossene Taste, dann durch die geschlossene Taste in der abgefragten Spalte und fließt schließlich direkt in den Ausgang, der auf „0“ gesetzt ist. Dies kann zu allem führen - von der Unmöglichkeit, den Status der Tastatur zuverlässig zu lesen, bis zum Ausfall des Mikrocontrollers.

Da wir jedoch gezwungen sind, dieses Problem irgendwie zu lösen, können wir einen großartigen Trick anwenden: einen Push-Pull-Ausgang in eine Art Open-Drain-Ausgang verwandeln. Ich bin oft auf diese Lösung bei der Gestaltung alter Tastaturen gestoßen. Da der Strom nur in die Ausgänge (die mit den Säulen verbunden sind) fließen soll, aber niemals aus diesen herausfließen soll, können wir die Richtung des Stroms mithilfe von Dioden begrenzen. Eine Diode ist ein einfaches Gerät, mit dem Strom nur in eine Richtung fließen kann. Im Bild der Diode im Stromkreis symbolisiert das Dreieck den Pfeil, der diese Richtung anzeigt. Wenn wir zwischen jedem Ausgang des Mikrocontrollers und dem Leiter der entsprechenden Matrixsäule eine Diode platzieren, erreichen wir unser Ziel - jetzt kann der Strom nur noch in die Ausgänge fließen, da diese Leiter jeden Knopf ihrer Säule erreichen. Es stellt sich herausdass vom Ausgang, der auf "1" eingestellt ist, der Strom nirgendwo fließt, und dies macht ihn fast zu einem Open-Drain-Ausgang. Natürlich erreicht er nicht das eigentliche Betriebssystem, aber es löst unser Problem eines geschlossenen Stromkreises in der Tastaturmatrix. Kehren Sie zum vorletzten Bild der Matrix zurück, diesmal jedochBetrachten Sie die grünen Dioden, um zu verstehen, wie dieser Trick funktioniert.

Natürlich ist es sinnvoll, die Anzahl der Dioden zu minimieren. Zu diesem Zweck können Sie die Anzahl der Spalten verringern, indem Sie die Anzahl der Zeilen erhöhen. Und wenn das resultierende Ergebnis nicht gut in das tatsächliche Layout der Tastatur passt, können Sie die Matrix um 90 ° "drehen" (Zeilen mit Spalten tauschen). Die Möglichkeiten sind endlos. Heutzutage ist jedoch eine große Anzahl von Mikrocontrollern erschienen, die einfach zu bedienen und für Hobbys geeignet sind. Daher wird die beschriebene Technik heutzutage in selbst entwickelten Tastaturprojekten praktisch nicht mehr verwendet. Zum Glück.

Phantomklicks (Ghosting)


Wenn Sie an Clavs interessiert sind, müssen Sie diesen Begriff bereits erfüllt haben. Leider wird es in der Welt der Tastaturen oft falsch interpretiert.

Wir sind bereits mit der Situation vertraut, in der das gleichzeitige Drücken mehrerer Tasten in derselben Zeile das normale Lesen der Matrix beeinträchtigen kann. Und dieses Problem wurde von uns gelöst. Nun wollen wir sehen, was passiert, wenn Sie auf mehrere Schaltflächen klicken, die sich gleichzeitig in derselben Zeile und in derselben Spalte befinden.


Beispiel für das Drücken von Phantomen

In der Abbildung werden drei Tasten gleichzeitig gedrückt. Zwei davon befinden sich in Spalte „C2“ und zwei in Zeile „Rm“. Dies bedeutet, dass eine der gedrückten Tasten die Zeile mit der anderen gedrückten Taste und die Spalte mit der gedrückten dritten Taste teilt. In dieser Situation tritt Phantompressen auf. Stellen Sie sich vor, wir fragen gerade die Spalte „C1“ ab (dh sie wird auf den Boden gedrückt - sie befindet sich im Zustand „0“). Dieser charakteristische Akkord der gedrückten Tasten führt zu Folgendem: Obwohl die obere linke Taste nicht gedrückt wird, befindet sich die Zeile „R2“ im Zustand „0“, da sie durch die Spalte „C1“ (in „0“) durchgedrückt wird drei Tasten gedrückt. Infolgedessen liest der Tastaturcontroller die obere linke Taste als „gedrückt“, unabhängig davon, ob sie tatsächlich gedrückt wird oder nicht. Die beschriebene Situation wird als Phantomdrücken ( Ghosting ) bezeichnet, da einige Kombinationen gleichzeitig gedrückter Tasten Phantomreaktionen anderer Tasten (Ghost-Tastendrücke) verursachen, obwohl diese anderen Tasten physikalisch nicht gedrückt werden.

Natürlich gibt es Möglichkeiten, Schriftsetzer und Spieler vor Phantomantworten zu schützen, und diese Methoden werden häufig in modernen Computertastaturen verwendet. Sie können den Moment des Auftretens des Phantomdrucks erfassen und blockieren. Ein gewöhnlicher Mensch kann nicht gleichzeitig zwei Tasten mit perfekter Genauigkeit drücken oder loslassen. Wenn wir die Matrix schnell genug scannen, können wir davon ausgehen, dass zwischen zwei Durchgängen durch die Matrix nicht mehr als eine Schaltfläche ihren Status ändern kann. In diesem Fall akzeptiert die Steuerung einmaliges Drücken und überwacht das Auftreten von Situationen, in denen zwei oder mehr Tasten zwischen Matrixdurchläufen gedrückt werden. Angesichts der Tatsache, dass das Scannen der Matrix mit einer Geschwindigkeit erfolgt, mit der das regelmäßige Auftreten solcher Situationen äußerst unwahrscheinlich ist, können wir den Schluss ziehen, dass eine der gerade gedrückten Tasten ein Phantom ist.Daher muss der Controller alle diese Klicks ignorieren. Darüber hinaus ist es sicherer, den Computer nicht sofort über Änderungen des Tastaturstatus zu informieren. Zunächst ist es sinnvoll zu warten, bis alle diese Vorgänge verschwunden sind.

Es gibt einen anderen Ansatz. Sie können die Situation identifizieren, in der die "dritte" Taste ausgelöst wird, und sowohl dieses Drücken als auch alle nachfolgenden drücken. Lassen Sie die Sperre erst los, wenn die Phantomreaktion verschwindet und sich die Situation wieder normalisiert. Um diesen Ansatz zu implementieren, muss sich das Programm merken, welche Tasten gerade gedrückt werden (und normalerweise auf diese Weise), um nachfolgende Tastenoperationen abzulehnen, in deren Zeilen und Spalten bereits gleichzeitige Klicks aufgezeichnet sind. Wenn Sie das Programm mit Bedacht schreiben, werden nur problematische Antworten blockiert und alle nachfolgenden werden wie gewohnt akzeptiert - mit Ausnahme derjenigen, die erneut gegen die Regeln verstoßen. Sobald der Controller das Drücken jeder Taste ablehnt, deren Zeile und Spalte bereits gleichzeitig ausgeführt werden, stellt sich heraus, dass abhängig vom Status einiger Tastenandere sind möglicherweise überhaupt nicht registriert. Diese Situation ist allgemein bekannt alsBlockieren ( Blockieren ). Das heißt, Tasten, die die gleichzeitige Bedienung anderer Tasten verhindern, "blockieren" einen Teil der Tastatur.

Aus Sicht des Benutzers ist es möglich, alle Tasten aus einer Spalte gleichzeitig zu drücken (ohne Tasten aus einer anderen zu drücken), aber gleichzeitig nur alle Tasten aus einer Zeile zu drücken, wenn jede der Tasten nicht mehr als eine Operation in der Spalte hat. Gleiches gilt für das Drücken von Tasten aus einer einzelnen Spalte - zusätzliche Trigger werden nur aufgezeichnet, wenn sich die Tasten in Zeilen befinden, die nicht belegt sind.

Menschen verwechseln oft " Phantom-Triggering " und " Blocking-Triggering " (" Ghosting " und "jamming "), was mir persönlich ein Rätsel ist - meiner Meinung nach sind diese Begriffe recht intuitiv.

Bei Tastaturen, die solche Matrizen verwenden, wie wir sie gerade untersucht haben, können weder Phantomantworten noch Blockierungen vermieden werden. Da Phantomreaktionen in der täglichen Arbeit nicht akzeptabel sind, wenden fast alle Hersteller von Gummikuppeltastaturen verschiedene Tricks an, um sie zu bekämpfen, und das Blockieren kommt ins Spiel. Frage: Wie kann man eine Matrix so zusammenstellen, dass Blockierungen so selten wie möglich auftreten und nicht durch gängige Tastaturkombinationen verursacht werden? In der Tat ist dies ein gutes Thema für das ganze Buch; Deshalb sind Matrizen von Tastaturen für Konsumgüter so verwirrend und blockieren immer gute Laune (wie ein Wortspiel).

Dioden für alle Tasten - eine zentrale Lösung


Wenn Sie sich das Bild über Phantomklicks noch einmal ansehen, können Sie feststellen, dass die Schaltfläche unten rechts schuld ist.
Dieser Knopf ist jedoch der einzige, durch den der Strom in dieser Situation "nach oben" fließt. Wenn wir also nicht möchten, dass die aktuellen Aufwärtsströme uns daran hindern, die Matrix normal zu lesen, führen wir Dioden ein, damit der Strom streng von oben nach unten durch die Spalten fließen und in die Ausgänge des Mikrocontrollers fließen kann.

Leider ist hier kein Speichern möglich - Sie müssen an jeder Taste eine Diode anbringen. Wenn wir über Polarität sprechen, sollten Sie herausgefunden haben, dass in diesem speziellen Fall die Dioden Strom „von oben nach unten“ leiten müssen, dh ihre Kathoden („Pfeilspitzen“) müssen auf die Ausgänge des Mikrocontrollers (Spalten) schauen, während die Anoden sollten an die Eingänge (Leitungen) adressiert werden.


Zusammenfassungsmatrix

Es spielt keine Rolle, auf welcher Seite der Taste sich die Diode befindet. Die Hauptsache ist, die richtige Polarität zu beachten. Denken Sie daran, dass in diesem Fall der Strom immer von den Eingängen zu den Ausgängen fließt. Übrigens, wenn die Eingänge an die Stromversorgung gezogen werden und sich die Ausgänge im Betriebssystemmodus befinden, geschieht dies immer.

Bei diesem Ansatz stellt sich heraus, dass der Strom immer „direkt nach unten“ fließt, und dies verhindert das Auftreten geschlossener Stromschleifen, wenn mehrere Tasten gleichzeitig gedrückt werden. Darüber hinaus ist dieses Design das einzige, das die Tastatur mit vollem NKRO ausstatten kann. Darüber hinaus ist zu erwähnen (obwohl dies offensichtlich erscheint), dass das Problem, dass die Mikrocontroller-Ausgänge keinen Betriebssystemmodus haben, jetzt automatisch gelöst wird. Die Dioden, die nacheinander mit jeder Taste installiert werden, speichern die Ausgänge der Schaltung nicht schlechter als die zuvor in Betracht gezogene Option, bei der zusätzlich eine Diode auf jede Spalte gesetzt werden sollte.

Rollover


Ja, ich weiß, dass der Text bereits zu lang ist. Aber ich füge noch dieses letzte Kapitel hinzu, weil der Artikel meiner Meinung nach ohne es unvollständig wäre. Rollover ist also die Fähigkeit der Tastatur, mehrere Tippen gleichzeitig auszuführen.

xKRO


KRO ist Key - Rollover ( Schlüssel ein Rollover ), und in der Regel diese Abkürzung wird durch eine Zahl zu. Zum Beispiel bedeutet 2KRO einen Zwei-Tasten-Rollover. Die Tastatur verfügt über die x -klavishnym Roll , wenn und nur wenn es in der Lage ist zu registrieren x Tasten gleichzeitig zu drücken, und - egal welche Tasten und in welcher Reihenfolge verwendet wurden. Die meisten modernen Gummikuppeltastaturen haben 2KRO. Daraus folgt jedoch nicht, dass die zulässige Anzahl von Tastenanschlägen auf diesen Tastaturen immer auf x begrenzt ist . Tatsächlich bedeutet dies, dass die X- Click- Unterstützung genau garantiert ist.

Je nach Design der Matrix und Art des Controllers können sich zwei 2KRO-Tastaturen verschiedener Hersteller sehr unterschiedlich verhalten. Man kann immer nur zwei gleichzeitige Klicks akzeptieren, und der andere kann leicht noch mehr verdauen. Es scheint, dass die letzte Tastatur von 2KRO angekündigt wurde, da einige Tastenkombinationen (höchstwahrscheinlich unwahrscheinlich) immer noch dazu führen, dass das Drücken anderer Tasten blockiert wird. Und da dies bedeutet, dass bei der Arbeit mit dieser Tastatur bestimmte Kombinationen von drei und mehr Tasten nicht funktionieren, hat das Unternehmen 2KRO angekündigt.

Nkro


Der Begriff NKRO bedeutet N-Tasten-Rollover und bezeichnet Tastaturen, die trotz allem jede Kombination gleichzeitig gedrückter Tasten unterstützen. Beachten Sie jedoch, dass NKRO-Matrizen und NKRO-Tastaturen zwei große Unterschiede darstellen. Wenn beispielsweise die endgültige Implementierung der Matrix, die wir im Artikel untersucht haben, NKRO unterstützt (unter Berücksichtigung der korrekt geschriebenen Firmware), folgt daraus keineswegs, dass die Tastatur, die diese Matrix verwendet, auch NKRO unterstützt. Dies kann auf Einschränkungen zurückzuführen sein, die durch die Kommunikationsanschlüsse auferlegt werden, an die die Tastatur angeschlossen ist. Ein weiterer Grund könnte die Genügsamkeit der Hersteller sein, die immer hier und da sparen. Ich werde versuchen, das Problem von NKRO beim Anschließen an PS / 2 und USB in den folgenden Abschnitten zu erklären.

Zusammenfassung


Natürlich kam das Blatt ziemlich gut heraus, aber das Konzept ist nicht so einfach - besonders für den Leser, der kein Elektronikingenieur ist. Ich hoffe, ich habe es geschafft, alles zu erklären; Wie dem auch sei, ich habe versucht, so klar wie möglich zu schreiben. Daher scheint der Artikel für einige von Ihnen ziemlich langweilig zu sein. Wenn Sie sich mit Elektronik beschäftigen, sollten Sie sie höchstwahrscheinlich gar nicht gelesen haben;)
Bitte lassen Sie mich auf jeden Fall wissen, ob sich der Artikel für Sie als nützlich erwiesen hat und ob es sich lohnt, eine Fortsetzung zu schreiben. Wenn ja, dann setze ich mich für die nächste "Serie".

Michał Trybus
2. September 2013

Source: https://habr.com/ru/post/de394585/


All Articles