Ungewöhnliches Verhalten beim Steuern einer Button Matrix

Ich habe eine 4x4-Matrix für 16 Tasten. Jede Zeile/Spalte ist direkt mit den Pins eines unbekannten Mikrocontrollers verbunden. Wenn ich die Pins direkt miteinander verbinde, verhält sich der Mikrocontroller korrekt, als ob der jeweilige Knopf gedrückt wurde.

Ich möchte die Pins direkt mit einem Arduino ansteuern oder direkt mit GND/VCC verbinden. Wenn ich sie jedoch auf diese Weise einschalte, kann der Mikrocontroller entweder:

  • tut nichts
  • verhält sich so, als würden mehrere Tasten gleichzeitig gedrückt.

Warum das? Übersehe ich etwas, wie Pullup-Widerstände?

Der Mikrocontroller unterstützt gleichzeitig bestimmte Tastendrücke. Ich denke, es hat mit dem Zeilenscannen zu tun. <- Das hat sich bewahrheitet, der Mikrocontroller hat jeweils eine Zeile geprüft. Daher war es notwendig, den Spaltenstift nur dann zu aktivieren, wenn die richtige Zeile ausgewählt wurde.

Um Matrixtastaturen zu scannen, verwende ich Timer-Interrupts, in denen ich zuerst die Eingabe lese und dann die Ausgabe ändere, dies ermöglicht die größte Latenz für die Eingaben und folglich höhere Werte für Pull-Up/Down-Widerstände und einen geringeren Stromverbrauch. In diesem Szenario hat Arduino die Zeit, das richtige Signal auszugeben, aber keine Garantie dafür, dass jeder es so macht.

Antworten (2)

Die Frage ist: Wie "steuern" Sie die Drähte mit einem Arduino? Der Mikrocontroller zieht wahrscheinlich die Zeilen (oder Spalten) einzeln nach oben (oder unten) und überprüft dann die Spannung auf der anderen Achse, um Tastendrücke in dieser Zeile / Spalte zu erkennen.

Um dies mit einem Arduino zu emulieren, müssten Sie die erregte Achse überwachen und dann synchronisiert an die Erfassungsachse ausgeben. Je nachdem, wie der unbekannte Mikrocontroller programmiert ist, kann dies sehr schwierig sein, da er sehr bald nach dem Einschalten lesen könnte. Vielleicht zu schnell für Ihr Arduino, um zu reagieren.

Es ist auch erwähnenswert, dass es neben Zeile/Spalte noch andere Anordnungen gibt. Sind Sie sicher, dass die Tastatur so angeordnet ist?

Genau das habe ich gerade gemacht, es funktioniert! Alle Spaltenpins auf LOW setzen, lesen, welcher der Zeilenpins auf LOW gesetzt wurde, und dann den rechten Spaltenpin erst dann auf HIGH setzen, wenn die rechte Zeile erreicht wurde, ansonsten LOW halten. Ich war besorgt, dass der Arduino zu langsam sein könnte, da der Mikrocontroller mit 12MHz zu laufen scheint. Aber das Zeilen-Sampling-/Strobe-Intervall scheint groß genug zu sein! Danke schön!
Glücklicherweise waren die Spalten- und Zeilenstifte sequentiell und auf dem Controller getrennt. Ich habe eine Eingangsmatrix erstellt und auch alle Pins im Laufe der Zeit gemessen, damit ich wusste, welche Ausgänge mit Pullups waren. Ich konnte mir also ziemlich sicher sein, dass es so war.

Die Tastatur nutzt Multiplexing, siehe hier die Theorie.

Was kannst du tun ?

Zuerst müssen Sie die Ein- und Ausgänge identifizieren und herausfinden, ob der unbekannte Prozessor die Ausgänge in positiver oder negativer Logik ansteuert. Dies sollte einfach sein, da Sie bereits einige Tests durchgeführt haben und das Board immer noch funktioniert. In positiver Logik würde ein mit VDD verbundener Eingang so viele gleichzeitig gedrückte Tasten anzeigen. In negativer Logik zeigt ein mit GND verbundener Eingang so viele gleichzeitig gedrückte Tasten. Ein Ausgang wird nichts tun, wenn er mit VCC oder GND verbunden ist. Da ich annehme, dass Sie die Zeilen und Spalten sehen können, müssen Sie diesen Test nur für jeweils eine Zeile durchführen. Auch wenn Sie noch keinen Ausgang gebrannt haben, verwenden Sie bitte einen kleinen Widerstand für Tests (470 Ohm reichen aus). Das Beispiel im Link ist in positiver Logik (ein aktiver Eingang / Ausgang ist hoch)

Sie können versuchen, das Tastaturverhalten zu simulieren, indem Sie vier Arduino-Eingänge an die Tastaturausgänge des Prozessors und vier Arduino-Ausgänge an die Tastatureingänge des Prozessors anschließen, aber es ist unwahrscheinlich, dass dies zuverlässig funktioniert, da für einen simulierten Tastendruck der Ausgang dem angeschlossenen Eingang sehr schnell folgen sollte. Ein Mikrocontroller mit CLC-Engine wie einige Mikrochip-PICs können das, aber Arduino nicht.

Sie können eine Optokoppler-Matrix verwenden, wenn die Matrix in positiver Logik ist, verbinden Sie den Fototransistor-Kollektor mit dem Ausgang, Emitter mit dem Eingang und umgekehrt, wenn in negativer Logik. Wenn es funktioniert, können Sie auch Multiplexing verwenden, um die Optokoppler anzusteuern, wie Sie am Ende des Artikels unter dem obigen Link sehen. Sie können sehr billige Quad-Optokoppler wie diesen finden , Sie benötigen vier davon, weniger als 10 $ für alle.