DS DSM-0822A von Pollin

Wieder einmal bei Pollin bestellt - und es kommt, wie es kommen musste: Ein optoelektronisches "Schmankerl" muss mal wieder her!
Die meisten LCDs haben einen HD44780-kompatiblen Controller, das Alps-LCD liegt schon herum und das TLX-1391 ist mir momentan bisschen zu teuer.
Aber irgendwas muss es doch sein... Noch einmal durchgeblättert und da ist das neue Opfer: Das DSM-0822A.

Leider steht auf der Seite nicht, was das Display alles anzeigen kann. Auch im Datenblatt des Controllers (PCF8576) steht nichts über das Display, da der Controller nicht speziell für dieses LCD hergestellt wurde.

So eine Wundertüte ist doch mal was :)

Bisher sind nur diese Daten bekannt:
Betriebspannung: 3.6V
Kommunikation: I²C
Betriebstemperatur: -30°C bis +85°C
Displaygröße: 53x20mm
Maximal 160 Anzeigeelemente (S. 7 im Datenblatt PCF8576)
Mit 1,95€ recht günstig

Über welche Schnittstelle das LCD angesteuert wird, ist schnell klar: der Parallelport. Eine Ansteuerung über die serielle Schnittstelle wäre zwar nahe liegender, allerdings habe ich nur eine, an der schon etwas angeschlossen ist.

Da der Parallelport normalerweise TTL-Spannungen ausspuckt, muss irgendwas her, damit das LCD auf SDA und SCL nicht 1.4V zu viel abbekommt und vorzeitig das Zeitliche segnet. Ich habe dazu einen BC54* in Emitterschaltung (Widerstand von Emitter an VDD - Ausgang ist der Emitter) und mit Basisvorwiderstand (jeweils 1k) verwendet. So sollte der Controller hinreichend geschützt sein. Das einzige, was man beachten muss: Das eintreffende Signal wird invertiert.

Für die Kontrastspannung tut es im Prinzip alles dahergelaufene. Ich habe einen 100k-Potentiometer für den Spannungsteiler verwendet. Das LCD hat so ziemlich den besten Kontrast bei VLCD = 0.6V.

Am Parallelport wird SCL an Pin 2, SDA an Pin 3 und GND an 18-25 angeschlossen (Sub-D-Stecker). Die Flexprint-Anschlüsse sind lötbar. Ein Flachbandkabel kann somit ohne Probleme angelötet werden. Ursprünglich ist ist der Anschluss für eine

Hardwaremäßig ist eigentlich alles getan. Also auf zum Software-Teil:

Mein Problem war am Anfang, dass ich fast keine Ahnung von I²C hatte und somit nicht wirklich wusste, wie ich den Controller ansteuern soll.
Das Datenblatt vom Controller hat schon etwas geholfen, bessere Unterstützung gab es allerdings von Tante Google:
http://home.wtal.de/Mischka/DSM-0822A.html

Der Controller ist schon fest auf 112 (dezimal) adressiert. Das Device ist 224 (auch dezimal).

Das Portieren der Start- und Stoppbits klappte schon recht gut, beim High- und Lowbit gab es dann einen kleinen Fehler. Genauso beim Schreiben von einem Byte.
Vielen Dank noch einmal an *** aus der Newsgroup de.sci.electronics!

Damit der Controller auf Befehle reagiert, muss zuerst ein Startbit gesendet werden. Danach kommt die Adresse des Controllers und das Device mit C = 1 (weitere Befehle folgen).

Zum Initialisieren ist nur der Befehl "Mode Set" erforderlich. Er legt fest, wie viele Backplanes (vergleichbar mit gemeinsamen Anoden/Kathoden) das Display hat, welche Vorspannung für das LCD verwendet werden soll (LCD Bias), ob die Anzeige aktiv sein soll und ob sich das Display im Stromsparmodus befinden soll.
Dieses LCD hat 4 Backplanes, der LCD-Bias ist im Prinzip egal (1/2 bringt einen höheren Kontrast bei niedrigeren Spannungen) und damit das Display nicht hell bleibt, ist das Display im normalen Modus und aktiv.

Bereits jetzt kann schon Displayinhalt an den Controller geschickt werden!
Zuvor sollte allerdings immer der Cursor auf die gewünschte Position gesetzt werden.
Als ersten richtigen Test habe ich 20x 255 ausgeben lassen. Somit sollten alle Elemente auf dem Display aktiviert werden:

Display mit aktivierten Segmenten
Jetzt ist auch klar, für was das Display eigentlich gedacht ist: Ein Radio.
Meinen Vermutungen nach ein Autoradio, da dort auch die zulässige Betriebstemperatur "voll ausgeschöpft" werden kann.

Da jedes Zeichen aus 16 Elementen, sind für jedes Zeichen zwei Byte erforderlich. Das erste Byte ist links von der roten Linie, das zweite Byte rechts davon.
16-Segment-Anzeige

Die Zuordnung der einzelnen Elemente war zwar etwas "fummelig", erwies sich aber als nicht besonders kompliziert. Ich habe dazu für das erste, bzw. zweite Byte jeweils 1, 2, 4, 8, 16, 32, 64 und 128 ausgegeben. Dabei entstand folgende Zeichentabelle:

Ausgabe: 1 2 4 8 16 32 64 128
1. Byte: D1 H L A1 E G1 K F
2. Byte: C J G2 B D2 I M A2

Auch die Sonderzeichen oben können nach dem gleichen Schema angesteuert werden:

Ausgabe: 1 2 4 8 16 32 64 128
1. Byte: ||| RDS |||   . TP TA OO
2. Byte: 1 3 2 4 ||| 6 FM 5

Um auf dem Display Buchstaben und Zahlen darzustellen, müssen den Zeichen die einzelnen Elemente zugeordnet werden.
Ich habe hierzu ein kleines Programm geschrieben. Es ist zwar nicht schön, dafür aber effektiv.

Um den Inhalt des Displays interessanter zu gestalten, kann der Controller den Displayinhalt blinken lassen. Wahlweise mit 1, 2 oder auch 0.5 Hz.
Welchen konkreten Sinn das hat, weiß ich nicht, vielleicht war den Entwicklern langweilig und im Chip-Layout war noch Platz - ich weiß es nicht... *fg*

Bevor jetzt das Modul kommt noch etwas zur Stromversorgung:
Das Display ist wirklich sehr genügsam.
Wie auf der oben genannten Homepage beschrieben, funktioniert das Display auch noch mit 5V.
Somit können die Transistoren an SDA und SCL weggelassen werden. Es ist jedoch ratsam, vor SDA und SCL 1k-Widerstände in Reihe zu schalten. Auch Pullups an diesen Stellen werden von Philips empfohlen.
Aber auch mit niedrigeren Spannungen als 3.6V kann das Display noch arbeiten. Wenn der LCD Bias auf 1/2 erhöht wird, kann man selbst bei 1.8V und hohem Blickwinkel noch etwas erkennen. Bei etwa 1V ist dann Schluss und das Display ist auch nach dem Erhöhen der Spannung leer.
Die Stromaufnahme hält sich auch sehr in Grenzen:
Je nach Kontrast beträgt sie zwischen 60 und 70µA, bei Dateneingang bewegt sie sich dann um die 600µA.
Somit kann das Display eigentlich vollständig vom Parallelport leben, ohne dass dieser Schaden davon nimmt.

Das Modul ist in der Ansteuerung genauso wie meine zwei anderen LCD-Module aufgebaut.
Eine Dokumentation wird folgen...

Downloads:
Modul: DSLCD (Code-Highlighting, die .bas-Datei befindet sich im Beispiel)
Programmbeispiel: DSM-Beispiel (VB6)