Homepage von Peter Rachow Startseite - Home

Der Selbstbau-Tauchcomputer

Allgemeines 

Forschung und Entwicklung: LCD-Anzeige | Mikrocontroller | Software | Sensoren | Gehäuse | Erfahrungsberichte

Geräte: SBTC3 | SBTC4 | Datenmodem zum PC | Simulator für Drucksensor

Die LCD-Anzeige

1. Grundlagen zum Display
2. Erste Experimente mit dem Display
3. Testsoftware
4. Die Anordnung der Informationen auf dem Display des SBTC

1. Grundlagen zum Display

Das Display ist die erste Komponente, die wir erörtern wollen. Es handelt sich hierbei um ein 2x16-Zeichen Display von Reichelt , wobei auch die Verwendung anderer Displaytypen (z. B. 4x16 Zeichen) möglich ist. Die zu entwickelnde Software muss dann entsprechend angepasst werden, was aber wegen der Einfachheit der Ansteuerung eigentlich keine Probleme bereiten dürfte.

Das Display selbst wird über 1-Byte breite Codes gesteuert, die an seine Dateneingänge DB0 bis DB7 parallel gesendet werden. Die Anschlüsse des Display sind lt. Datenblatt wie folgt belegt:

Anschlussbelegung des Displays 162
Bild 1: Anschlussbelegung des Displays 162 von Reichelt

Die PINs sind mit einer kleinen "1" bzw. "16" markiert, der Anschluss "1" ist an der Schraubenbohrung an der Ecke zu finden. Die Bedeutungen der Bezeichnungen in der Grafik oben sind:

Das Display erlaubt standardmäßig den Betrieb im 8-Bit-Modus, d. h. es werden alle 8 Eingänge DB0 bis DB7 zur Datenübertragung genutzt. Alternativ steht auch ein 4-Bit-Modus zur Verfügung. In diesem Falle werden nur die Eingänge DB4 bis DB7 verwendet, DB0 bis DB3 werden auf Masse gelegt. In meinem SBTC wird dieser Modus eingesetzt um Ports am Kontroller zu sparen. Die beiden 4 Bit breiten Hälften eines Byte ("Nibbles") werden einfach direkt nacheinander an das Display übertragen, das höherwertige Nibble zuerst. Dazwischen wird die Leitung "E" (Eanable) kurz zwischen 1 und 0 umgeschaltet, das Display kann dadurch die beiden Nibbles unterscheiden. Zuerst werden die Bits 4 bis 7 des Zeichens übertragen, danach 0 bis 3 (Bitte beachten Sie, dass bei Bitbezeichnungen immer der entpsrechende Exponent von 2 x die Bitnummer ergibt, als 2 0 ist das niedrigste Bit, dieses hat dann den Index 0, und im Fall, dass es gesetzt wird, die Wertigkeit 1, da gilt 2 0 = 1)

2. Erste Experimente mit dem Display

Um die Funktion des Display besser verstehen zu lernen, sollte man zuerst das Datenblatt konsultieren. Das Display ist mit einem Standardkontroller des Typs KS0070B ausgerüstet, eine Suche im Internet ergibt dazu sehr viele brauchbare Ergebnisse.

Das weitere Vorgehen sieht nun so aus: Da das Display parallel mit 8 Bit eingegebene Daten mit 5V-Pegel verarbeiten kann, lässt es sich testweise am Parallelport des PC betreiben, weil dieser 8 Bit parallele Daten entsprechend ausgeben kann. Zu diesem Zwecke lötet man sich zuerst ein Kabel bzw. eine Schaltung nach unten aufzeichnetem Schaltplan, das/die die entsprechenden Anschlüsse der Druckerschnittstelle mit dem Display verbindet. Zusätzlich wird ein Spannungsregler 7805 benötigt, der mit 2 Stck. 100nF-Kondensatoren geblockt wird:

Anschluss des Displays an den Parallelport des PC zu Testzwecken
Bild 2: Anschluss des Displays an den Parallelport des PC zu Testzwecken

Am besten setzt man alles auf eine Streifenleiterplatine und erhält so einen sauberen Aufbau:

Probeaufbau auf Lochrasterplatine
Bild 3: Probeaufbau auf Lochrasterplatine

Nachdem diese Testhardware gebaut wurde, benötigt man eine Software, um aus dem Parallelport des PC die Steuersignale für das Display abrufen zu können. Dabei gilt es, die Rechnerplattformen und Programmiersprachen zu unterscheiden, mit denen man arbeiten will. Windows 95/98-Nutzer benötigen keine weiteren Treiber, da sich hier die Schnittstellen des PC noch direkt über eine Programmiersprache ansprechen lassen. Windows NT, 2000, XP-Anwender benötigen einen speziellen Treiber, da diese Systeme keinen Direktzugriff auf die Schnittstelle mehr zulassen. Diesen gibt es ebenfalls im Netz .

Weiterhin benötigt man einen Compiler, der die entsprechenden Testprogramme erzeugen kann. Ich benutze der Einfachheit halber TurboC++ 1.01 für DOS, das es auf der "Antique"-Seite von Borland kostenlos gibt. Dieser Compiler enthält eine Funktion ( outportb(int port_adr, char bytevalue) ) die man verwenden kann, um dem Druckerport direkt ein Byte parallel zu übergeben.

3. Testsoftware

Hier sind die Routinen hinterlegt, mit denen das Display vom PC gesteuert wird. Einige Hinweise zu dem in C geschriebenen Programm:

Die beiden Ports PORTD (Datenleitungen) und PORTB (Steuerleitungen RS und E) sind bereits von den Bezeichnungen her emuliert für die spätere Verwendung auf dem ATMEL-Controller, der dort (unter dem GNU AVR C-Compiler) diese Variablennamen benutzt. Auch die Funktion outp des später zu beschreibenden GNU-AVR-C-Compilers für die ATMEL-Kontroller wird emuliert. Dies erleichtert die spätere Portierung der Testprogramme bzw. einzelner Funktionen auf den Mikrocontroller. Ansonsten könnte man das nämlich auch programmieren, ohne die Steuerbefehle um 7 Ecken zu lenken ;-).

Einige weitere Erläuterungen zu diesem Testprogramm:

Die erste und wichtigste Funktion, die jedes dieser Programme abarbeiten muss, ist die Initalisierung des Displays. Hier wird der Modus

gewählt. Anschließend wird das Display mit lcd_set_display(1, 0, 0) gesetzt auf die Werte: "Display an", "Cursor aus" und "Blinken aus". Das Display wird gelöscht und eine weitere Einstellung vorgenommen, insb. der "Entry-Mode", der aber für unsere Funktionen nicht relevant ist, da hier die Zeichen direkt in das RAM des Display geschrieben werden und keine sequentielle Zeichenanzeige gewählt wurde. Man kann nämlich die Zeichen auch einfach nacheinander dem Display als Zeichenkette übergeben, wobei dann einfach wie bei einer Laufschrift, die bereits übertragenen Zeichen nach rechts geschoben werden, wenn ein neues Zeichen hinzukommt. Ich wähle jedoch im SBTC die elegante Lösung des direkten Schreibens mit Zeilen-/Spalten-Adressierung.

void lcd_init()
{
  lcd_write(LCD_INST, 40, 30);
  lcd_write(LCD_INST, 40, 30);
  lcd_write(LCD_INST, 40, 30);
  lcd_write(LCD_INST, 2, 5);
  lcd_write(LCD_INST, 8, 5);

  lcd_set_display(1, 0, 0);
  lcd_cls();
  lcd_set_entrymode(0, 0);
}

Um die Steuerung zu standardisieren enthält das Programm die Funktion

void lcd_write(unsigned char lcdmode, unsigned char value, unsigned int waitcycles)

der nacheinander folgende Parameter übergeben werden:

Jetzt ist das Dsplay ansprechbar und bereit, Zeichen zu verarbeiten. Die Funktionen, die dazu verwendet werden, sind i. W.:

void lcd_putchar(unsigned int row, unsigned int col, unsigned char ch)

und

void lcd_putstring(unsigned int row, unsigned int col, unsigned char *s)

Mit diesen Funktionen ist es möglich, beliebige Zeichen an das Display zu senden, indem man eine absolute Adressierung der Displayzeile ( row ) und -spalte ( col ) vornimmt. Eine sehr komfortable Sache also.

4. Die Anordnung der Informationen auf dem Display

Natürlich ist es nicht ganz einfach, alle relevanten Informationen während des Tauchens auf einem 2 x 16-Zeichen LCD darzustellen. Insofern musste ich einen Kompromiss finden. Zielsetzung war nämlich, während des Tauchens kein jeweils kurzes Anzeigen von vielen einzelnen Informationen zu liefern sondern die Anzeige sollte so statisch wie möglich sein.

Hier die Anordnung der Informationen während des Tauchens:
 

52.7m 62.8m  22'
1 3 5 11 S=21' 6°

In der ersten Zeile findet man von links: Aktuelle Tiefe, Max. Tiefe, Tauchzeit.
In der zweiten Zeile findet man von links: Dekostufen, beginnend bei der tiefsten (hier 12m mit 1 min.), dann die gesamte Dekozeit, dann ganz rechts am Rand die Temperatur.

Ist noch keine Dekompressionspflicht eingetreten, so steht an der Stelle der Dekostufen die verbleibende "Nullzeit":
 

42.4m 42.8m  12'
NZ: 6'        8°

Während der Oberflächenpause zeigt das Gerät an
 

00.0m 62.8m  51'
OFP: 134'   20°

wobei der untere Teil der Anzeige alle 10 sec. wechselt, falls die angezeigten Werte > 0 sind:
 

00.0m 62.8m  51'
ZNS TG: 12% 20°
Tauchgangs ZNS in %
00.0m 62.8m  51'
ZNS D: 13%   20°
Tages ZNS in %


00.0m 62.8m  51'
OTU: 10%     20°
Oxygene tolerance units in %


00.0m 62.8m  51'
FVB: 21h     20°
Flugverbot in Stunden

Für die Bedienerführung und die Setzung der Benutzereinstellungen werden die entsprechenden Fragen angezeigt und müssen mit Tastendrücken beantwortet werden.

Weiter zu Teil II (Hardware des Mikrocontrollers)
 
 

Die SBTC-Seiten

Konzeption | LCD-Anzeige | Mikrocontroller | Software | Sensoren | Gehäuse | Erfahrungsberichte