Das völlig bescheuerte Bordcomputer-Projekt-Teil 5: Der Kampf um das BC-Display beginnt (Vorsicht Fachartikel)

Bitte beherzigt die Warnung, für alle nicht Elektroniker ist dieser Artikel nicht geschrieben und wäre auch nicht schreibbar gewesen weil wir uns hier in den Untiefen der Digitaltechnik bewegen müssen. Kurz: am Ende hat`s geklappt, was mir das Display mit einem Bisschen digitalem Unflat quittiert:

Das hatte der vorher nicht im Speicher

Das hatte der vorher nicht im Speicher

Aber von Vorn.
Das ganze Rundinstrument ist ein von hinten beleuchtetes LCD. Auf seiner Rückseite sitzt ein ominöser Chip von ITT „V 70001-220“ Made in Germany.
Man sucht dann immer im Internet nach Datenblättern zu diesem Teil, normalerweise findet sich auch ein verstaubtes PDF vom Hersteller, nicht hier. Einzig finde ich einen alten Blogbeitrag, wo einer genau so einen BC zerlegt hat und wissen wollte was es ist. Die Maximalinfo zu dem Teil ist ITT sind längst Pleite bzw. übernommen und das Bauteil ist ein LCD-Treiber und Multiplexer, aha.

IMG_20160105_162258 IMG_20160105_162522
Fangen wir mit dem Pinout an: Das Display hat 5 Anschlüsse, davon einer Masse, einer führt 5,34V- nehmen wir mal an das ist die TTL- Logikspannung von 5V. Nun bleiben noch 3 Pins übrig- sieht nach einem Bussystem aus. An einem Pin liegt ein Rechtecksignal von 18,5kHz an. Dann haben wir einen, der verdächtig nach Daten aussieht und mit dem letzten Pin der übrig ist irgendwie in Relation steht, was die Änderung von High und Low betrifft. Das wären wohl CLK und MOSI. Ich habe die 18,5 kHz dann mal abgetrennt, plötzlich zeigt das Display nur noch ca. die Hälfte seiner Segmente sinnvoll an. Mir scheint, hier wird eine Umschaltung zwischen zwei Registern erwirkt, die jeweils das halbe Display bespassen, also nennen wir den Pin doch PWM.
Pinbelegung am Display:
1 – Daten (MOSI)
2 – 9,1khz (CLK)
3 – 18,5kHz (PWM)
4 – 5,3V (Vcc)
5 – GND

Nun wäre es sehr interessant zu wissen, was hier gesprochen wird, zwischen BC und Display. Das Oszilloskop muss her und die Datenframes werden untersucht, der BC bleibt in Betrieb, CLK und MOSI werden zusammen oszillographiert.

Oszi1

Gelb ist der Takt, Blau sind die Daten. Ich zähle um die 68 Bit bzw.- Taktflanken, ein ungewöhnlicher Frame, warum nutzt man denn nicht Bytelängen wie 64 Bit oder im Notfall 72? Auffällig ist auch, dass einige Datenbits sich offenbar nie ändern, egal was das Display anzeigt oder auch wenn es Garnichts anzeigt. Ist das Display leer (beim Einschalten des BC zum Beispiel) wird fröhlich eine: 11100000  00000000  00000000  00000000  00000000  00000000  00000000  00000000  0000 geschrieben. Na gut, dann sind die ersten 3 Bit wohl eine Art Init-Sequenz, bleiben 65 Bit übrig, oder ist das letzte Bit ein „Outro“ und wir hätten microcontroller-mundgerechte 64 Bit?

Man muss sich wohl mit diesem Präambel-Quatsch näher befassen, der BC wird gefühlte 100x vom Strom getrennt und mittels Single-Shot am Oszi versucht, den Startup einzufangen und per Cursormessung die Zeitabstände aufzunehmen.

Gut zu sehen ist auch, dass die ersten Bits (Gelb) unterschiedlich lange gehalten werden

Gut zu sehen ist auch, dass die ersten Bits (Gelb) unterschiedlich lange gehalten werden

Präambel:
Nach dem Start sind CLK und MOSI sofort high,
dann ist CLK high für 164us; MOSI bleibt 352us lang high,
CLK fängt danach sofort an zu takten, MOSI bleibt von t=352us bis +7,1ms low, dann wieder high für 586ms.

Das PWM-Signal wird dann noch fix vom Frequenzgenerator erzeugt, es zeigt sich, dass es dem Display relativ Wurst ist, was da ankommt solange es nur TTL-Pegel ist und zwischen 10 und 20 kHz liegt.

Nun gilt es das Displaysignal in einem Microcontroller nachzubilden. Ich benutze einen PIC18F27J53, den habe ich als DIL da, das ist super für das Steckbrett.

Steckbrett
Ich programmiere das Präambel so, dass es exakt dem des BC entspricht, messe 100x mit dem Oszi nach, bis alles passt und setze dann die verbleibenden „wahren“ 64 Bit Daten mal alle auf 1.
Nun wird das BC-Display mit dem PIC verbunden und gebetet. Es passiert erst einmal nichts, das Display ist bei dem Versuch aber auch nicht kaputt gegangen, ein Glück. Langsam fange ich an, mich zu fragen, ob das Display am Ende vom TTL-Standard abweicht und mehr als die 3,3V meines Microcontrollers braucht für logisch 1, ööh da müsste dann noch ein Pegelumsetzer gebastelt werden.
Ich sehe mir noch einmal die beiden Oszibilder an – Original und Fälschung der Displaykommunikation und was stelle ich fest? Ich habe eine Art SPI programmiert, wo der Bitzustand immer bei einer CLK-Flanke gelesen wird, das Display will die Daten aber offenbar in der Mitte eines CLK-Pulses haben, außerdem fehlt hinten ein kleines Stück, *Üaaarg!* das ist das 68. Bit, die Präambel hat ja nur 3 Bits. Gut, wird das in Code geändert, und siehe da- wir haben Kontakt:

Display alles ON

Alle Bits sind auf 1, alle Segmente sind an, das macht Sinn. Nun muss ich rausbekommen, welches Bit der 8 Bytes für welches Segment steht. Fleißarbeit ist angesagt. Ich programmiere immer einen festen Zustand ein und sehe mir dann genau an, was alles angezeigt wird.
Byte 0 wäre dann zum Beispiel das hier:
Byte 0
Hier hätten wir Byte 3:
Byte 3
So klimpere ich systematisch die 8 Bytes durch, mache Photos und setze dann in jedem Byte das Bit 0, dann Bit 1 und so weiter, mache wieder jedes Mal Photos und wenn ich mich nicht vertue erhalte ich den kompletten Anzeigesatz.

Dann kamen die Buntstifte…
Es kann nun keiner erwarten, so etwas Abstraktes wie 64 Bits auf Segmente umzudenken gelänge im Kopf:
BC-Display-Segmente-Bytes
Nun kann ich mit meiner kleinen Skizze jede mögliche Displayanzeige in Nullen und Einsen darstellen, unser „FUCK“ am Anfang ist übrigens:
byte_0=0b00001010;
byte_1=0b10111101;
byte_2=0b10000000;
byte_3=0b00000000;
byte_4=0b10001000;
byte_5=0b11100010;
byte_6=0b10000000;
byte_7=0b00000000;

Problem solved!

Weiter

About the Author

blackengineer

blackengineerHier soll ich nun also Halbwahrheiten über mich verkünden: Es gab einmal den schönen Spruch "Wir sind die geworden, vor denen uns unsere Eltern immer gewarnt haben". Das trifft die Sache allerdings nicht unbedingt im Kern. Aber von vorn: Ich bin durch die Hölle gegangen, was in Fachkreisen auch "Studium der Elektrotechnik" heißt, und nun Ingenieur. Entgegen der landläufigen Meinung bin ich auch in der Lage, Dinge nicht ironisch auszudrücken (siehe letzter Satz), was aber für diesen Blog weitestgehend ignoriert werden darf. Das Studium fand in Dresden statt, wo ich auch meine Freundin Sarah fand, ohne die dieses Stück Internet nie entstanden wär. Ich bin ein vielinteressierter Geist und spiele gern mit Gedanken, Worten und... naja, hin und wieder auch gern Computer ;) Die Leidenschaft für alles, was mit Strom funktioniert, habe ich seit Kindesbeinen, was meinen Eltern sicher noch erschreckend bewusst sein dürfte, und da waren dichte beißende Lötdampfschwaden aus dem Keller, explodierende Kondensatoren vorm Frühstück und leidlich mit Tesafilm isolierte 230V-Stromkabelverbindungen (funktioniert bis heute!) noch harmlose Beispiele (man erinnere sich an den oben angebrachten Spruch) . Man ist mittlerweile professioneller geworden, stolzer Besitzer eines immer weiter wachsenden privaten Elektroniklabors und momentan - in Dublin: Der eigentliche Aufhänger für unseren Blog, wobei ich fürchte, dass dieser weiter wuchern wird, wenn wir im Dezember wieder deutschen Boden unter den Füßen haben. Was mache ich hier? Diese Frage wird ausführlich in den Artikeln dieser Site bearbeitet, nur kurz: Ich bin sowas wie die Geheimwaffe des Trinity Colleges für und gegen alle analogtechnischen Probleme und Entwicklungen. Eine letzte Frage sollte ich hier noch klären: WARUM DIESER NICK? ...Es begab sich, dass ich meine Hose wusch, und dieses kurzbeinige Exemplar schwarzer Baumwolle aus einem szeneeinschlägig bekannten Bekleidungsgeschäft trug diesen Namen. Klasse, dacht' ich mir, das passt zu dir – außerdem find' dich über Google keiner – dieser Nickname, das wird meiner.View all posts by blackengineer →

Leave a Reply