LCD-Display Tester       

von Andreas Gröger               
Elektronik-Labor   Projekte   AVR 




 
Es wird ein einfacher Tester für LCD-Displays nach dem HD447780-Standard beschrieben. Neben einem Test wichtiger Funktionen erlaubt die Vorrichtung einen Überblick über den definierten Zeichensatz.

Displays nach dem HD447780-Standard sind mittlerweile weit verbreitet und auch als Bauteil zu günstigen Preisen erhältlich. Der ursprüngliche Baustein HD447780 von Hitachi wird zwar meines Wissens nicht mehr hergestellt, jedoch ist eine Vielzahl von kompatiblen Bauelementen erhältlich und auch in aktueller Produktion. Obwohl nicht als solcher definiert, haben sich Displays nach dem HD447780-Standard als sogenannter Industriestandard etabliert und weite Verbreitung gefunden. Es ist daher praktisch, eine Einrichtung zur Verfügung zu haben, mit der solche Bauelemente schnell getestet werden können, auch nach eventuellen Fehlanschlüssen und zur Überprüfung bei Reparaturarbeiten. Außerdem gestattet die nachfolgend vorgestellte Vorrichtung, sich einen Überblick über den im ROM des Moduls definierten Zeichensatz zu verschaffen, der von Variante zu Variante unterschiedlich sein kann. Dabei wurde auf eine möglichst einfache Anwendbarkeit geachtet.

Die Schaltung verwendet einen ATtiny2313 in der SMD-Variante, hauptsächlich, weil ein solcher gerade vorhanden war. Der Tester kommt allein mit Bit-Funktionen an den Ports aus, so dass ein einfaches Modell wie eben der ATtiny2313 vollkommen ausreichend ist. Bemerkenswert ist vielleicht die Erzeugung der Kontrastspannung V0. Häufig wird hierfür ein Poti verwendet. Dies erfordert jedoch nicht nur einen Einstellvorgang, sondern nimmt meistens auch noch lästig viel Platz ein. Hier wird der Spannungsabfall über einer Siliziumdiode 1N4148 genutzt, so dass eine Kontrastspannung von etwa 0,7 V gegen Masse entsteht. Dies führt in vielen Fällen zu einigermaßen brauchbaren Ergebnissen. Der etwas unübliche Wert des Serienwiderstands von 3,1 kΩ kommt dadurch zustande, dass ich aus einem preiswert erworbenen Beutel unsortierter Widerstände eine größere Zahl davon habe. Es ist wahrscheinlich nicht kritisch, innerhalb derselben Größenordnung davon abzuweichen.

Die Schaltung so wie sie ist enthält keinen Strombegrenzungswiderstand für die LED-Beleuchtung, sondern verlässt sich darauf, dass das Display-Modul einen solchen eingebaut hat. Wer sich nicht darauf verlassen will, sollte einen hinzufügen.




Für den Anschluss des Display-Moduls wird eine zehnpolige Flachkabelleitung mit einer Pfostenbuchsen-/Wannensteckerkombination verwendet. Die gewählte Steckerbelegung sieht auch eine Leitung und einen Pin für die Schreib-/Leseumschaltung R/W vor, obwohl der Tester keine Lesefunktion verwendet. Die Leitung liegt in der vorliegenden Schaltung einfach auf Masse, also ist dauerhaft Schreiben eingestellt. Die Reservierung einer eigenen Leitung dafür geschah aus der Überlegung, sich an dieser Stelle spätere Erweiterungen, die auch Auslesefunktionen umfassen können, offen zu halten.

Das Programm wurde in C geschrieben und mit AVR-GCC kompiliert. Es verwendet meine eigene Unterprogrammsammlung lcd4.inc. Das Display-Modul wird hierbei im Vier-Bit-Modus angesteuert. Zwar ist der in der Programmierung zunächst etwas aufwändiger, ist es jedoch einmal gelungen, kann man die Routinen immer wieder verwenden und spart sich vier Leitungen am Mikrocontroller. Die Routinen wurden so angelegt, dass sich eine gewisse Flexibilität bei der Verwendung der Ports des Controllers ergibt. Die Steuerleitungen E und RS können auf beliebige Ports und Bits gelegt werden. Die Datenleitungen D4...D7 des Displaymoduls müssen auf dem oberen Nibble eines Ports liegen. Sie müssen also auf einen Port gelegt werden, bei dem das obere Nibble vollständig definiert ist. Für den verwendeten ATtiny2313 bedeutet dies, dass die Datenleitungen auf den Port B gelegt werden müssen und zwar auf PB4...PB7, da die ebenfalls definierten Ports A und D über kein vollständig definiertes oberes Nibble verfügen. Bei anderen Controllern können auch andere Ports x verwendet werden, sofern die Bits Px4...Px7 durchgehend und vollständig vorhanden sind. Eine größere Flexibilität an dieser Stelle wäre sicherlich vorteilhaft, aber ich habe es noch nicht geschafft, dies umzusetzen. Dies ist zweifellos einer von vielen Punkten, die noch verbessert werden können. Interessierte seien an dieser Stelle auf die Quelltexte der Programme verwiesen.

Ebenso verwendet das Programm in der vorliegenden Version ausschließlich den 2x16-Zeichen-Modus bei Vier-Bit-Ansteuerung. Es verzichtet ferner auf Cursor- und Scroll-Funktionen, eigene Definitionen von Sonderzeichen sowie auf Auslesefunktionen des Display-Moduls. Hier bieten sich weitere Möglichkeiten zur Verbesserung und Erweiterung.

Einmal gestartet, initialisiert das Programm zunächst das Display-Modul im Vier-Bit/2x16-Zeichen-Modus. Anschließend beginnt eine Endlosschleife, in der zunächst eine Einschaltmeldung ausgegeben wird, anschließend wird im Display Zeichen für Zeichen der vollständige Zeichensatz von 0x00 bis 0xf ausgegeben. Dies erlaubt es auch, sich einen Überblick über den eingebauten Zeichensatz zu verschaffen. Die benutzerdefinierbaren Zeichen werden hierbei nicht gesondert definiert, so dass der Inhalt dieser Speicherstellen und damit die Erscheinung der Zeichen im Display zufällig ist. Nach der Ausgabe des letzten Zeichens 0xf wird das Display gelöscht und ein neuer Schleifendurchlauf beginnt mit der Einschaltmeldung. Der ATtiny2313 läuft mit dem internen Taktoszillator bei 4 MHz und einem Teilungsfaktor von 8, wodurch sich eine effektive Taktfrequenz von 500 kHz ergibt. Diese ist auch im Programm als Zeitbasis für die delay-Routinen aus util/delay.h defniert.

Der Controller wurde auf eine 1,27 mm einseitige Lötrasterplatine aufgebaut. Diese ist durch Drähte mit einer 2,54 mm Lochrasterplatine mit Lötpunkten verbunden, die die Kontrastspannungserzeugung und den 10-poligen Wannenstecker trägt. Beim Aufbau habe ich – mal wieder – nicht auf eine geschickte Anordnung der – wenigen – Bauelemente zueinander im Hinblick auf eine geradlinig-elegante Leitungsführung geachtet. Aber das Ganze funktioniert und erfüllt seinen Zweck.





Der Anschluss des zu testenden LCD-Moduls erfolgt durch ein zehnpoliges Flachbandkabel. Dies ist auf der Seite des Testers mit einer zehnpoligen Pfostenleiste versehen. Auf der Seite des LCD-Moduls kann das Kabel direkt an die entsprechenden Kontakte auf der Modulplatine angelötet werden. Für den schnellen Wechsel eignet sich eine kleine Zwischenplatine besser, die die einzelnen Adern der zehnpoligen Leitung mit blanken Schaltdrähten verbindet. Das LCD-Modul wird dann an diese blanken Schaltdrähte angelötet. Auf diese Weise wird verhindert, dass die Wärme der An- und Ablötvorgänge die Isolation des Flachbandkabels in kurzer Zeit beschädigt, was dann zu unerwünschten Kontakten zwischen den Einzelleitungen führt.





Download: LCD_Tester.zip

#include <stdint.h>
#include <avr/io.h>

#define F_CPU 500000UL
#include <util/delay.h>

#define lcd_port PORTB
#define lcd_dir DDRB
#define lcd_rs_port PORTD
#define lcd_rs_dir DDRD
#define lcd_rs_bit 4
#define lcd_en_port PORTD
#define lcd_en_dir DDRD
#define lcd_en_bit 6

#include "lcd4.inc"

int main(void)
{
int i, j;

lcd_setupports();
lcd_init();

while(1){
lcd_string("LCD Display Test");
lcd_ddram(0x40);
lcd_string("Version 1.1 2017");
_delay_ms(1000);

for (i = 0; i < 255; i += 32)
{
lcd_ddram(0x00);
for (j = 0; j < 16; j++){
lcd_putchar(i+j);
_delay_ms(200);
}
lcd_ddram(0x40);
for (j = 0; j < 16; j++){
lcd_putchar(i+j+16);
_delay_ms(200);
}
}
_delay_ms(200);
lcd_cls();
_delay_ms(200);
}
return(0);
}



Elektronik-Labor   Projekte   AVR