ebps.de.vu > Schaltungen > AVR > RS232-zu-LCD-Konverter

RS232-zu-LCD-Konverter

Beschreibung

Oftmals ist am PC nur ein Parallelport vorhanden, der dann vom Drucker belegt ist. Hingegen gibt es 2 serielle (RS232) Schnittstellen, mit einer Erweiterungskarte sogar vier. Da bietet es sich natürlich an, ein LC-Display an die serielle Schnittstelle anzuschließen. Leider hat der LCD-Controller HD44780 jedoch ein paralleles Interface, so dass ein Konverter her muss. Bei der Gelegenheit habe ich auch gleich noch den internen PWM des AVR benutzt, um V_LCD (Kontrasteinstellung) für das LCD zu erzeugen, diese Funktion muss jedoch nicht verwendet werden, es reicht auch das übliche Poti (PB3 bleibt dann offen, der Widerstand und der Elko fallen weg).

Aufbau

Zum Aufbau gibt es nicht viel zu sagen. Als Verbindung zum Computer wird eine RS232-Buchse eingesetzt (entweder mit Kabel dran, z.B. von einer kaputten seriellen Maus, oder es wird ein 1:1-Verbindungskabel zum PC verwendet). Wird ein Nullmodemkabel eingesetzt, so muss ein Stecker verwendet werden und Pin 3 und 2 sind vertauscht anzuschliessen (wie auch beim RS-232-Interface).
Wie man auf dem Foto sehen kann, habe ich meiner Schaltung noch einen 5V-Spannungsregler und einen Gleichrichter (der "etwas" überdimensioniert ist ;-)) spendiert, damit ich sie an die Stromversorgung meiner PC-Aktivlautsprecher anschließen kann.

Programme

Testen

Zum Testen kann jede aktuelle Version meines HD44780-LCD-Testers eingesetzt werden (Version 2.1 oder höher), das Programm unterstützt jetzt auch diesen Konverter.

Winamp-Plugin

Um das Display auch in Winamp benutzen zu können, habe ich ein einfaches Plugin geschrieben. Der Interpret wird in einer Zeile angezeigt, zwei Zeilen werden für den Titel verwendet. Einstellen muss/kann man lediglich den Kontrast und den Anschluss (COM1 bis COM4). Fotos von der Ausgabe der Plugins sind unten auf dieser Seite zu finden.

XMMS-Plugin

Da ich nicht genau weiß, wie man Plugins für XMMS erstellt, habe ich hier auf das bereits vorhandene Plugin XMMS-InfoPipe zurückgegriffen, welches alle benötigten Informationen als Pipe (virtuelle Textdatei) in /tmp/xmms-info zur Verfügung stellt. Um die Informationen auf das LCD zu bringen, habe ich dann noch ein Perl-Script geschrieben, das ständig im Hintergrund läuft und bei jeder Änderung der Info-Datei das LCD aktualisiert. In der oberen Zeile werden diverse Informationen über die aktuelle Datei (oder den aktuellen Stream) inkl. Fortschrittsbalken angezeigt (siehe Fotos unten), die drei anderen Zeilen werden für die Anzeige von Interpret und Titel verwendet (Trennung durch einen Bindestrich). Ist der Text zu lang für drei Zeilen, wird am Ende noch ein Pfeil angezeigt. Bei Streams wird außerdem (falls vorhanden) eine eingeklammerte Zeichenfolge am Ende des Titels entfernt, da diese fast immer blos Eigenwerbung für den Stream enthält.

Bevor das Script verwendet werden kann, muss noch die richtige Schnittstelle eingestellt werden (an 2 Stellen ganz am Anfang). Außerdem muss das Programm stty installiert sein. Ich habe mein Script in ~/.kde/Autostart abgelegt, damit es beim Start von KDE immer automatisch mitgeladen wird.

selber Programmieren

Das LCD wird im 4-Bit Modus angesteuert. Ein Byte mit Bit7=0 ist ein Befehl, der an das LCD gesendet werden soll, mit einem Byte von 128 bis 255 (Bit7=1) wird die Kontrastspannung zwischen ca. 0,1V und 5V linear eingestellt. Die Bytes, die einen Befehl oder Daten für das LCD enthalten (Bit7=0), sind so aufgebaut:

Bit: 6 5 4 3 2 1 0
Funktion: Controller 1 oder 2 R/W' RS D7 D6 D5 D4

Die Werte für D4-D7 und RS werden direkt an das LCD weitergeleitet. R/W' ist im Moment noch funktionslos, es sind nur Schreibzugriffe möglich. Bit6 gibt den LCD-Controller an, an den die Daten gesendet werden sollen (0=E1, 1=E2). Wenn der AVR ein Byte vom PC empfängt, werden die Ausgänge D4-D7 sowie RS entsprechend gesetzt und dann, je nach Controller-Einstellung (Bit6), ein Inpuls auf E1 oder E2 gegeben. Die Datenübertragung erfolgt mit 9600 Baud, kein Parity, 8 Datenbits, 1 Stopbit. Diese Einstellung wird meistens als 9600,n,8,1 angegeben.
Zu beachten ist hier, wie beim RS232-Interface auch, dass der Ausgang nicht 100% RS232-kompatibel ist (Pegel 5V/0V statt 5V/-5V). Der Ausgang wird hier jedoch nicht gebraucht, er dient lediglich als Funktionskontrolle, indem das empfangene Byte nach der Auswertung und Ansteuerung des LCDs wieder zurückgesendet wird (bei Kontrasteinstellung wird der doppelte Kontrastwert zurückgesendet).

Fotos

[Foto]
640
Mein Aufbau mit Spannungsregler und Gleichrichter
[Foto]
640
Das angeschlossene LCD (WD-C2704M-1HNN von Pollin) in Betrieb. Es zeigt mir immer den gerade laufenden Titel auf Radio Nora an.
[Foto]
800 | 1280
Zweites Foto in Betrieb, aber diesmal vom Winamp-Plugin 1.0 angesteuert.
[Foto]
800 | 1280
Anzeige vom Winamp-Plugin 1.1 (Fortschrittsanzeige in Zeile 4).
[Foto]
800 | 1280
Die Anzeige vom Perlscript für XMMS bei einer Datei (Länge 3:01:24, 32 kBit/s, Mono).
[Foto]
800 | 1280
Die Anzeige vom Perlscript für XMMS bei einem Stream (128 kBit/s, Stereo).