Eigene Zeichen

Die handelsüblichen LCD Display mit dem Controllerchip HD44780 kann viele Zeichen aus dem ASCII Datensatz darstellen. Manche LCDs können auch z.B. noch kyrillische Buchstaben oder ähnliches. Aber jedes dieser Displays stellt auch noch die Möglichkeit bereit acht eigene Zeichen zu definieren. Bei einem Projekt zur Temperaturanzeige fehlte bei einem meiner Displays das "°" Zeichen. Da kam ich schnell auf die Idee das Zeichen einfach selber zu definieren.

CGRAM

Der Controller hat ein sogenanntes CGRAM in dem man acht eigene Zeichen definieren kann. Das sollte am Anfang nach dem Initialisieren geschehen. Die ersten acht ASCII Codes sind dann den selbst definierten Zeichen zugeordnet. Da diese in der normalen ASCII Tabelle Zeichen entsprechen die für das LCD nicht gebraucht werden.

Jedes selbst definierte Zeichen besteht aus 8 Bytes die in das CGRAM geschrieben werden. Als erstes muss man dem Display als Kommando sagen, dass man in den CGRAM schrieben möchte und in welchen Adressbereich. Der Adressbereich erhöht sich anschließen immer um ein Byte, sodass man nicht für alle 8 Bytes immer neu den Adressbereich angeben muss. Wollen wir z.B. für das aller erste ASCI Zeichen (0x00) ein eigenes Zeichen definieren, würden wir in die CGRAM Adresse 0x00 schreiben. Das zweite Zeichen (0x01) wäre dann im CGRAM 0x08 usw.

Zeichen1 (0x00)2 (0x01)3 (0x02)4 (0x03)5 (0x04)6 (0x05)7 (0x06)8 (0x07)
CGRAM Adresse0x000x080x100x180x200x280x300x38

Zeichen erstellen

Für die 8 Bytes bei einem Display mit 5x8 Matrix sind so aufgebaut, dass die oberste Zeile dem ersten Byte das geschrieben wird entspricht und die unterste Zeile somit dem letzten Byte. Das linke Zeichen entspricht dem 5 Byte (2^4 = 16) und das rechte Zeichen entspricht dem ersten Byte (2^0 = 1). Die Werte pro Spalte werden addiert und so erhält man das Byte für die Zeile. Damit das ganze etwas schneller geht habe ich ein kleines Script geschrieben um sich ein Zeichen schnell zu generieren. Ihr müsst einfach nur auf den Kästchen herum klicken und der Wert wird dann automatisch geändert.

CGRAM 16 8 4 2 1 Byte Hex
0x00 0x0C
0x01 0x12
0x02 0x12
0x03 0xoC
0x04 0x00
0x05 0x00
0x06 0x00
0x07 0x00

Zeichen zum LCD schreiben

Zuerst müssen wir dem Display sagen, dass wir in den CGRAM schreiben möchten und wohin wir schreiben möchten. Dabei muss RS = 0 sein. Die genauen Display Kommando wird diese Tabelle veranschaulichen.
Anschließend schreiben wir ganz normal als würden wir einen Text zum anzeigen senden die acht Byte zum Display. Nach dem achten Byte muss dann nur noch die Adresse wieder auf den DDRAM (LCD Anzeige) gesetzte werden damit die nächsten Zeichen die gesendet werden nicht im CGRAM landen, sondern auf dem Display angezeigt werden.

Dazu kurz ein kleiner Pseudocode:

display_unset_rs();
display_send(0b01000000 + 0x00); //Adresse im CGRAM
display_set_rs();
display_send(0x0C);
display_send(0x12);
display_send(0x12);
display_send(0x0C);
display_send(0x00);
display_send(0x00);
display_send(0x00);
display_send(0x00);
display_unset_rs();
display_send(0b10000000 + 0x00); //Adresse im CGRAM

Zu guter Letzt kann man das selbst erstellte Zeichen jetzt auch nutzen wie jedes andere ASCII Zeichen, dass das Display kennt. Einfach nur anstatt display_send('C'); display_send(0x00); ausführen.

Ich hoffe es ist alles soweit verständlich gewesen. Falls ihr noch fragen habt, dann könnt ihr einfach eine kleine Nachricht hinterlassen. 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


Time limit is exhausted. Please reload CAPTCHA.