I2C-Keypad mit TCA8418

Vor einiger Zeit ist mir ein interessanter Chip über den Weg gelaufen mit dem man eine Tastatur mit I2C Schnittstelle realisieren kann. Ich habe ihn mir in Februar bestellt und seitdem lag das Teil auf meinem Tisch rum. Ich spielte mit den Gedanken, sowas Ähnliches wie Pocket C.H.I.P zu bauen. Die Kosten für den ersten Prototypen haben mich etwas abgeschreckt (bzw. tun es immer noch). Außerdem hatte ich zu der damaligen Zeit noch kein Ersatz für EAGLE gefunden. Vor einigen Wochen fand ich die ESD-Tüte mit den Keypad ICs. Ich setzte mich hin und fing an ein Schaltplan zu entwerfen.

Wichtiger Hinweis

Dieser Artikel ist eine reine Beschreibung, wie ich das zum Laufen gebracht habe und keine Anleitung! D.h. einige Sachen könnten fehlen, fehlerhaft oder nach einiger Zeit einfach nicht mehr aktuell sein.

TCA8418 I2C Keypad Scanner

Zuerst einige Daten zum IC. Das Gehäuse ist in meinem Fall ein WQFN24 (es gibt auch eine Ausführung als BGA) und ist 4x4mm groß. Es verfügt über 18 GPIOs (ESD geschützt) und bietet die Möglichkeit bis zu 80 Tasten anzuschließen. Spannungsversorgung 1,65V – 3,6V. Ein Output-Pin für den Interrupt ist auch vorhanden. I2C Clock bis zu 1MHz (Fast Mode Plus). Die Typischen Anwendungen sind Smartphones, Tablets, HMI, GPS Geräte, MP3 Player und Digitalkameras.

Tastenbelegung

Bei der Tastenbelegung habe ich versucht, mich an das Beispiel von Pocket C.H.I.P zu halten, Als ich mir auch die Schaltpläne angeschaut habe, war ich etwas überrascht. Auch hier wurde ein TCA8418 verbaut. Also habe ich die Anbindung und Anordnung der Tasten fast identisch gehalten. Einige Tasten habe ich weggelassen. Die Anzahl der Taster liegt bei 55 Stück. Als Layout habe ich die US Version gewählt.

Schaltplan

Die Beschattung ist recht überschaubar. Die Anordnung der Tasten erinnert stark an die übliche Matrix-Tastaturen. Die I/O sind auch in zwei Gruppen unterteilt: 8 Zeilen (Row) und 10 Spalten (Column). Die unbenutzten I/Os werden über Pull-Ups mit der Versorgungsspannung verbunden. Die restlichen I/Os (I2C, INT, RST) habe ich auch mit Pull-Ups versehen und dazu noch einige Platzhalter für Tiefpassfilter, die ich aber zum Glück nicht gebraucht habe.

TCA8418 I2C Keyboard Schaltplan

PCB Layout

Zuerst die Frage klären, wie sich die Form des Boards ergeben hat. Die Antwort ist einfach: aus reiner Langeweile 😉 Ich habe mir nichts dabei gedacht, sondern einfach nur fast willkürlich die Linien gezogen.

Die Platine besteht aus zwei Lagen. Die Tastenbeschriftung ist leider nicht so fancy, wie bei dem PocketCHIP, aber für den ersten Prototypen ausreichend. Die Platine habe ich mit CircuitStudio entworfen. CS ist momentan das Tool, was ich für die Entwicklung von Schaltplänen und PCB Layouts verwende. Routing ist relativ einfach, da langsame Signale, kaum Strom und genug Platz. Das Einzige, worauf ich geachtet habe, dass kein Signal von einem Taster, unter einem anderen verläuft. Wenn es notwendig war, habe ich auf andere Lage gewechselt. Der innere Aufbau des Tasters ist mir unbekannt. Es kann passieren, dass beim Betätigen von einem Taster ein Übersprechen auf die darunter liegende Leiterbahn stattfindet. Das Risiko ist minimal, aber ich wollte auf Nummer sicher gehen. Die Platine wollte ich manuell löten, daher habe ich die Masseflächen um den IC, die Widerstände und Kondensatoren herum etwas weiter weg platziert und die GND Pins mit Leiterbaahnen an diese Massefläche gezogen. Das macht das Löten etwas bequemer. Das Layout war übrigens angelehnt and das von PocketCHIP

Software

I2C Test

Pinbelegung

Pin Keypad Pin Raspberry Pi Zero
3,3V 3,3V (Pin 1)
SCL SCL (Pin 3)
SDA SDA (Pin 5)
GND GND (Pin 6)
INT GPIO18 (Pin 12)
Reset Braucht man nicht

I2C Tools installieren und testen, ob ein Busteilnehmer mit der Adresse 34 gefunden wird.

Der Chip wurde sauber erkannt

Treiber/Kernel bauen

Eigentlich wollte ich das nicht machen. Ich bin auf diesem Gebiet noch etwas unerfahren und bei meinem letzten Projekt, bei dem ich Bootloader etc. bauen musste,  hat es etwas Zeit und Nerven gekostet, die passenden Sources etc. zu finden und es fehlerfrei zu kompilieren. Und als ich vor einigen Jahren was für den Pi bauen musste, ging’s mir ähnlich.

Ich habe für dieses Projekt nach fertigen Treibern und nach einem einfacheren Weg gesucht, doch nichts gefunden. Gut! Bringt alles nix. Musste ich selber bauen. An dieser Stelle muss ich aber die Devs hinter dem Pi echt loben. Die „Kompiliererei“ ist gut und übersichtlich dokumentiert und der ganze Vorgang, den neuen Kernel zu kompilieren ist tadellos durchgelaufen und hat am Ende sogar funktioniert und warf mir in der Konsole keine Kernel Panic raus 🙂 Das Kompilieren auf dem Zero hat übrigens so um die 20 Stunden gedauert.

Übrigens! Damit ich gleich nach dem Flachen der SD-Karte für den Pi alles über SSH machen konnte, habe ich mir direkt eine WLAN Verbindung konfiguriert und zwar nach dieser Anleitung

Ich werfe an dieser Stelle noch die Kernel Version mit rein

Beim Bauen bin ich nach diesen zwei Anleitungen vorgegangen. Die erste, wie man allgemein ein Kernel für den Pi baut. Irgendwo in der Mitte wird dann auf die zweite Anleitung verwiesen, falls man ihn anders konfigurieren möchte.

https://www.raspberrypi.org/documentation/linux/kernel/building.md

https://www.raspberrypi.org/documentation/linux/kernel/configuring.md

Als es dann um die Kernel-Config ging, das Modul TCA8418 mit „Y“ gesetzt.

Device Tree Overlay

Beim erstellen des DT-Overlays war mir der Blog von Mozzwald eine große Hilfe. Im Prinzip macht er mit diesem Projekt das, wofür ich noch zu geizig bin 😉

Overlay in /boot/overlays einfügen. Overlay ist noch aus einem frühen Stadium, könnte also Fehler beinhalten 😉

DT-Overlay kompilieren

Der Vorgang spuckte einige Fehler / Warnungen aus, die ich erstmal ignoriert habe.

Außerdem muss noch die Datei /boot/config.txt um folgenden Eintrag ergänzt werden.

dtoverlay=tca8418

Rebootet und geschaut, ob das Keypad sich irgendwie sichtbar macht.

Checken, ob das Eingabegerät bei Tastendruck etwas ausspuckt

Immer wenn man ich Taste betätigt habe, wurde eine „Buchstabensuppe“ ausgegeben. Damit man das auch in Klartext lesen kann, habe ich mir das Programm evtest installiert.

Keymap anpassen / erweitern

Jede Taste ist mit mehr als nur einer Funktion belegt. Deswegen benötigt man eine angepasste Keymap. Zuerst eine Datei z.b. im home Verzeichnis anlegen i2c-keypad.map

Dann folgt ein leichtes Umdenken. Wenn bei der Tastenzuweisung im Overlay mit Hexadezimal gearbeitet wurde, arbeitet man hier mit dezimalen Zahlen. Auch hier hat mir die Webseite von Mozzwald sehr geholfen. So sah meine keymap anschließend aus.

Damit diese keymap nach dem Boot verwendet wird, lade ich sie über /etc/rc.local

Und dann hat es auch schon funktioniert. Dazu sei noch gesagt, dass ich das Light Image des Raspbians nutze. Wenn man auch Desktop benutzen will, muss man noch weitere Konfigurationen machen.

Hier noch ein ganz kurzes Demo-Video

One Reply to “I2C-Keypad mit TCA8418”

  1. Pingback: Keyboard Mapping – Blak_RPI

Schreibe einen Kommentar

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

*

Bitte löse folgende Rechenaufgabe * Time limit is exhausted. Please reload CAPTCHA.