Keypad 4x5

Vor kurzem habe ich ein neues Keypad bekommen das insgesamt 20 Tasten hat.

Zu erst habe ich versucht das Keypad wie die 4x4 Matrix mit einem analogen Eingang an Controller aus zu lesen. Leider habe ich festgestellt, dass die Spannungsänderung zwischen einigen Tasten doch sehr gering ist und dadurch Fehler entstehen könnten.
Sicherlich kann man mit etwas mehr Gehirnschmalz ein ausgeklügeltes Widerstandsverhältnis finden, aber es war dann doch schneller und einfacher, das Keypad über insgesamt 9 analoge Ein- und Ausgänge aus zu lesen.

Dazu habe ich einen Code geschrieben der mit Debugausgaben per UART versehen ist und mit den gängigen AVRs laufen sollte. Getestet habe ich es auf einem Atmega32 mit 16 MHz Qarz. Den Code könnt ihr in meinem git repository herunter laden:

https://gitbucket.pgollor.de/kalle/matrix4x5

bzw. git clone https://gitbucket.pgollor.de/kalle/matrix4x5.git

 

Erläuterung

Im Prinzip ist das auslesen der 20 Tasten Matrix nicht sonderlich schwierig. Das Keypad hat 9 Anschlüsse. Fünf für die Reihen und vier für die Spalten. Die Spalten sind dabei als Ausgang geschaltet die alle auf "0" gesetzt sind. Und die fünf Reihen werden als Eingänge definiert sowie dazu die Pullups aktiviert.

In meinem Beispielcode wird in einer Endlosschleife angefragt ob eine Taste gedrückt wurde. Dies kann man aber z.B. auch in eine Interruptroutine auslagern.

Das Abfragen funktioniert wie folgt: Wenn eine Taste gedrückt wird, wird durch die Ausgänge die auf "0" liegen, eine der Reihen die als Eingänge mit Pullup geschaltet sind, auf "0" gezogen. Daher werden zuerst die fünf Eingänge abgefragt. Wenn einer nicht mehr auf "1" liegt hat man die Information, dass eine Taste aus der Reihe y gedrückt wurde.
Jetzt fehlt aber noch die Information darüber, welche der Tasten in der Reihe y gedrückt wurde. Unter der Vorsaussetzung, dass die Taste immer noch gedrückt ist, wird jede einzelne Spalte alleine auf logisch "1" gesetzt. Nach jedem setzen werden die Eingänge wiederum ausgelesen. Wenn jetzt an der Stelle wo vorher die "0" anlag, plötzlich wieder eine logische 1 ist, dann hat die gesuchte Spalte x gefunden.
Im Anschluss wird dann aus einer Tabelle einfach der dazugehörige Wert zurückgegeben.

Zusätzlich gibt es noch die Funktion "getKeyAndWait". Falls eine Taste gedrückt wurde wird im Anschluss so lange gewartet bis sie wieder losgelassen wird.

Sicherlich gibt es noch einiges im Code zu optimieren, aber so funktioniert er erst mal und war einfach schnell zusammen geschrieben. 😉

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.