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:
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.
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)