ebps.de.vu > Bastelecke > DSM-0822A Ansteuerung

Ansteuerung des LCDs "DSM-0822A"

Beschreibung

Bei Pollin gab es vor einer Weile günstig das LC-Display DSM-0822A zu kaufen. Es hat den I2C-Controller PCF8576 fest angeschlossen, so dass man es nur über den I2C-Bus ansteuern kann. Etwas ungewöhnlich ist die Betriebsspannung von 3,6V, das Display läuft aber auch mit 5V wunderbar. Die Kontrasteinstellung ist mit 5V sogar noch besser.

Inzwischen gibt es (nicht mehr ganz so günstig) ein neues Display bei Pollin, welches sich genauso ansteuern lässt und deshalb auch mit dieser Schaltung verwendet werden kann. Die Anzeige ist allerdings horizontal gespiegelt (mit den Programmen von dieser Seite wird man Spiegelschrift erhalten), die erste Anzeigestelle ist bei diesem Display also rechts! Bei den Symbolen gibt es größere Unterschiede, sie befinden sich am unteren Displayrand und unterscheiden sich zum Teil von denen des DSM-0822A. Die Bestellnummer des Displays ist 120397, praktischerweise wird auch gleich eine Buchse für das Folienkabel und ein Poti für die Kontrasteinstellung mitgeliefert. Aufgrund der großen Ähnlichkeit zum DSM-0822A habe ich dieses Display kurzerhand "DSM-0822B" genannt, diese Bezeichnung ist aber allein hier zu finden und kommt bei Pollin nicht vor.

Aufbau

Die Schaltung, um das LCD anzusteuern, ist einfach. Es handelt sich um ein kleines Interface für die serielle Schnittstelle eines PCs, die mit 2 Ausgängen die beiden Datenleitungen des I2C-Bus ansteuert. Um die Acknowledge-Rückmeldungen empfangen zu können, muss das Interface Open-Collector Ausgänge mit Pullups haben und es muss eine Rückmeldung für die Data-Leitung vorhanden sein. Um den Aufwand gering zu halten, habe ich kein Wandler-IC eingesetzt, so dass diese Schaltung nicht den Normen der RS232-Schnittstelle entspricht. Aus diesem Grunde ist es möglich, dass die Schaltung mit manchen PCs nicht funktioniert. Am einfachsten ist der Test, ob bei einer Änderung des Daten-Ausgangs der Daten-Eingang mitgeht (hier muss jeweils der invertierte Ausgabewert ankommen).
Die Schaltung funktioniert übrigens auch für das alphanumerische LCD "LPH7550-1" von Polllin (2x24 Zeichen), hierzu müssen jedoch die Null-Ohm Widerstände R6 und R7 ausgelötet werden und einer der beiden für R4 wieder eingelötet werden. Clock ist dann Pin 18 und die Datenleitung ist Pin 17 (Dank an Berthold Müller). Plus, Masse und Kontrast (Pins 1-3) werden ebenfalls mit der Schaltung verbunden, die allerdings in diesem Falle nur mit 5V betrieben werden darf.

Programmierung

Die Ansteuerung des LCDs bereitet schon mehr Probleme. Am Anfang einer Datenübertragung muss natürlich zuerst mal das Start-Signal gesendet werden. Danach folgt das Auswahl-Byte, dass auch erforderlich ist, wenn nur ein Slave am I2C-Bus hängt. Für das Display ist dieses Byte 01110000. Sollte danach eine Null als Acknowledge empfangen werden, ist der erste Schritt schon mal geschafft. Anschließend werden einige Command-Bytes gesendet, die dem Display mitteilen, was es machen soll. Zunächst mal muss das Display nochmals ausgewählt werden (warum weiß ich nicht). Dazu dient der Befehl DEVICE SELECT. Er lautet für dieses Display 11100000 (die erste 1 bedeutet, dass noch weitere Befehle folgen). Danach muss das Display eingeschaltet werden und dem Controller muss mitgeteilt werden, wie viele Backplanes das Display hat. Der Befehl MODE SET sieht dazu so aus: 11001000 (die erste 1 steht wieder für "weitere Befehle folgen"). Nun kommt der letzte Befehl (also ganz links eine Null): 00000000. Dieser Befehl stellt den Zeiger für die Daten auf die Speicheradresse 0.
Jetzt kommen die Daten, die das Display anzeigen soll. Die acht 16-Segment Anzeigen brauchen natürlich je 2 Byte, die linke Anzeige kommt zuerst. Danach folgen noch 2 Bytes für die Symbole über den Anzeigen. Die Bytes sind wie folgt eingeteilt (Bit Nr. 7 ist das linkeste Bit (MSB)):

Byte Bit DSM-0822A DSM-0822B
Segment Symbol Segment Symbol
1 0 d1 Block 2 d2 5
1 h RDS j Block 1
2 l Block 3 l RDS
3 a1   a2 Block 2
4 e Punkt (dp) c 4
5 g1 TP g2 2
6 k TA m 3
7 f oo b 1
2 0 c 1 e Punkt (dp)
1 j 3 h
2 g2 2 g1 Doppelpunkt
3 b 4 f
4 d2 Block 1 d1 oo
5 i 6 i TP
6 m FM k DX
7 a2 5 a1 Block 3

Ist die Datenübertragung abgeschlossen, folgt die Stopp-Sequenz und es kann dann irgendwann von vorne losgehen. Da es keinen Reset-Befehl gibt, müssen immer alle Segmente eingestellt werden, soll eine Anzeige nichts anzeigen, sendet man einfach 2 Null-Bytes (00000000). Wichtig ist auch, dass man immer erst mindestens einen Befehl senden muss, bevor es mit den Daten los gehen kann.
Es gibt für den Controller auch noch einen weiteren, sehr interessanten Befehl: BLINK. Dieses Byte muss als Befehl gesendet werden, um die Blinkeinstellung vorzunehmen: x1110abb. x steht wie immer dafür, ob noch weitere Befehle folgen (1) oder nicht (0), a gibt an, ob die eingeschalteten Segmente periodisch abgeschaltet werden sollen (0) oder die anderen hinzugeschaltet (1). Mit bb kann man die Frequenz bestimmen: 00 bedeutet, dass die Anzeige nicht blinkt, 01 steht für eine Frequenz von 2Hz, 10 für 1Hz und 11 für 0,5Hz.

Fotos

[Foto]
640
Die Schaltung mit angeschlossenem Display
[Foto]
640
Das Display in Betrieb
[Foto]
640
Eine LED-Hintergrundbeleuchtung von Pollin(?) hinter dem LCD
[Foto]
800 | 1280
Experimente mit dem DSM-0822B
[Foto]
800 | 1280
Alle Segmente des DSM-0822B eingeschaltet

Links