Mit irgendetwas muss man sich ja die Zeit vertreiben. Beim Aufräumen des Speichers fiel mir ein altes Autoradio in die Hände – noch mit Kassettenteil, um das Wort “alt” zu unterstreichen. Immerhin schon mit LCD-Display, was meine Neugier weckte. Was macht man da? Ok, das war eine rhetorische Frage. Ich habe also schweren Herzens das Aufräumen ein wenig aufgeschoben und einen Schraubenzieher geholt. Im Inneren fand sich neben ziemlich viel Luft dann auch das Display mit einer angeschlossenen kleinen Platine, die sehr nach Steuerung aussah. Da diese nur mit insgesamt 6 Leitungen mit dem restlichen Autoradio verbunden war, wirkte das ganze doch ziemlich überschaubar. Die nächste und, wie sich herausstellte, gar nicht so rhetorische Frage war dann: Ob man mit dem Teil wohl noch reden kann? 🙂
Na gut, das Aufräumen kann warten. Mit Multimeter und Feinwerkzeug bewaffnet wurde zunächst das Display nebst Steuerplatine aus dem Gefängnis befreit. Dabei fiel dann noch ein Schrittmotor und anderer diverser Kleinkram ab, das kann man immer gebrauchen. Auf der Steuerplatine entdeckte ich dann einen einzelnen Chip, einen PCF8576T. Wozu gibt es das Internet, das Datenblatt war schnell gefunden. “Universal LCD driver for low multiplex rates” stand da, also gar nicht mal so schlecht geraten. 😉
Laut Datenblatt wird er mit I2C angesteuert (eine Art USB für IC’s), das erklärte schon mal 4 der 6 Drähte (SDA, SCL, Vss und Gnd). Da im Datenblatt auch das Pinout abgebildet war, waren diese vier auch recht schnell zugeordnet. Die restlichen zwei haben sich übrigens im Nachhinein als Anschlüsse für die Hintergrundbeleuchtung herausgestellt. Bei 5V ist die aber so gut wie unsichtbar, und 12V lasse ich nicht in die Nähe von TTL.
Tja, an der Stelle braucht man dann jemand, der die gleiche Sprache spricht, und heutzutage fallen dann schnell die Worte “Raspberry” oder “Arduino”. Da der Raspberry sehr fimschig auf 5V auf den I2C-Pins reagiert (*fumpp*), war der Arduino eindeutig der Kandidat der Wahl. Also schnell Steckverbinder an die Platine gelötet und das Ganze mal zusammen gesteckt. Und, was soll ich sagen: Genau nichts passiert. Alles dunkel, nichts leuchtet. Hm, es ist ein Nano, der hat keine eingebauten Pull-Up-Widerstände. Dem kann man ja abhelfen, also Widerstände suchen gehen. Der Wohnzimmertisch sieht mittlerweile aus wie eine E-Werkstatt, aber es macht Spaß. 🙂
Beim nächsten Versuch meldet sich der Controller-Chip dann auch tatsächlich auf dem Bus bei 0x38. Hurra, “es lebt!”, wenn er auch nach wie vor ansonsten genau nichts tat. Normalerweise heißt es ja: „Wer Handbücher liest, ist feige!“, aber hier sollte man vielleicht mal eine Ausnahme machen. Das Datenblatt beschreibt eigentlich ziemlich detailliert, wie man die Aufmerksamkeit des kleinen Quaders erregen könnte, aber leider mit ziemlich vielen Variationen, die alle von den möglichen Beschaltungen der vielen kleinen Pins abhängt. Da ich nur das Multimeter zur Verfügung hatte, wollte ich nicht zu viel an den Pinnen rummessen, immerhin arbeitet der Durchgangsprüfer mit 9V. Also einfach mal ausprobieren. Und siehe da: Das Display leuchtet auf! Naja. Eigentlich leuchtet das Display fast immer auf, egal, was man ihm schickt… aber was er darstellt, ist entweder klingonisch oder Pixelmüll. Der Baustein hat laut Datenblatt 40 Adressen mit je 4 Bit Tiefe, aber völlig egal, was man da reinschreibt, es tut sich nix bei der Anzeige. Mittlerweile war es relativ spät, die Konzentration ließ nach, was meistens dazu führt, dass man gelegentlich nicht so genau hinschaut, was man da zusammenprogrammiert. Nach einem erwartungslosen Blick auf das Display war die Müdigkeit dann auf einmal weg: Es hatte sich was getan! Es war zwar immer noch klingonisch, aber wenigstens anders. 🙂
Der Chip hat drei Adressleitungen, die als „Device Register“ bezeichnet werden. Das ist so etwas wie eine Unteradressierung des Chips, wenn man mehr als einen im System hat. Die drei Pinne waren aber auf der Platine mit Lötzinn hart miteinander verdrahtet, sollten also immer alle zugleich auf LOW (0) oder HIGH (1) stehen. Das ergäbe also die Device-Adresse 0x00 oder 0x07. Mein Programmierfehler oben führte aber dazu, dass ich weit über den erlaubten Adressbereich geschrieben hatte, was laut Datenblatt zu einem Übertrag auf das nächste Device-Register führte. Wie die es also geschafft haben, bei drei kurzgeschlossenen Beinchen eines davon auf HIGH zu setzen, ist mir bis heute schleierhaft – aber egal. 🙂
Mit der Device-Adresse 0x01 klappte auf einmal alles irgendwie so, wie’s im Datenblatt stand. Also musste man jetzt nur noch rausfinden, welches Bit für welches Segment der insgesamt 8 16-Segment-Ziffern verantwortlich ist, dann kann man auch etwas nicht-klingonisches schreiben. 🙂
Das Endergebnis kann man sich weiter unten anschauen – wenn man mag. Ich gebe auch gern und völlig offen zu, dass das Ganze vollkommen sinnlos ist – fertige LCD’s für den Arduino gibt’s für €5 bei Amazon – aber darum ging’s ja nicht. Das war einfach wie Puzzlen ohne Randstücke, ein wenig Bit-Schieben und irgendwo leuchtet zum Schluss was. Es hat einfach Spaß gemacht. 🙂
P.S.: Die Reste des Autoradios habe ich übrigens wertstoffgerecht entsorgt. Insofern ist der Speicher jetzt auch aufgeräumter als vorher. 🙂
P.P.S.: Falls sich wider Erwarten jemand für den Arduino-Quellcode interessiert: