Home

Bauanleitungen

Links

Gästebuch

Gästebuch

News

Projekte

Impressum

internes LCD (16x2)

Warnung! Dieses Display wird direkt an den Prozessorbus des RoboInterface angeschlossen. 
Fehler im Aufbau des Displays können das RoboInterface dauerhaft beschädigen, ferner erlöscht die Garantie.
Ich übernehme keine Haftung für Defekte, die durch die hier beschriebenen Schaltungen entstehen könnten.

Als ich bei www.reichelt.de den Katalog durchstöberte, fand ich durch Zufall ein LCD, das exakt in die Lücke zwischen Funk-Modul und USB-Buchse passte. Nun fehlte nur noch eines, die Ansteuerung. Zwar sind Steckplätze vorhanden, jedoch gab es zunächst keine Schaltpläne / Informationen, um diese zu nutzen. Doch auch hier kam der Zufall zu Hilfe, ein Fan hat durch reverse engineering einen Schaltplan des Interface erstellt (vielen Dank an W.Hobelbrecht an dieser Stelle, ohne dessen Arbeit dieses Projekt nicht möglich gewesen wäre). 

Da sich auf den Steckplätzen der Datenbus des Prozessors befindet, schien es mir sinnvoll, das LCD ohne einen zusätzlichen Controller zu betreiben. Dies setzt voraus, dass alle Steuercodes, die das LCD benötigt, direkt vom Prozessor des RoboInterface generiert werden müssen.  Da solche Funktionen nicht in RoboPro implementiert sind, kann dieses LCD leider nicht mit RoboPro betrieben werden, das LCD kann entweder per C mit dem Renesas-Compiler oder per Basic mit dem Roboint-Basic Compiler angesprochen werden.

Da dies keine Anleitung für Anfänger sein soll und kann, gibt es nur den Schaltplan / Layout und ein paar Codeschnipsel. Ich kann leider aus Zeitgründen auch keinen Support bieten - wenn die hier veröffentlichten Informationen nicht ausreichen, ist dies ein Zeichen dafür, besser die Finger von solchen Basteleien zu lassen... sorry.
Für den Anfang besser geeignet sind die externen Displays, weil diese bei einem fehlerhaften Aufbau nicht gleich das ganze Interface ins Grab ziehen

Der Prozessorbus des µControllers ist leider einen Tick zu schnell für das LCD, so dass etwas zusätzliche Beschaltung hinzukommt. Im wesentlichen besteht diese aus zwei Latches, um Daten- und Adressbus zwischenzuspeichern und einer Verzögerung, aufgebaut mit Nicht-Gattern (ich hatte gerade einen 74HC04 zur Hand, man kann es auch mit einem Monoflop lösen). Durch diese Beschaltung ist es leider nicht mehr möglich, das Busy-Flag des LCD abzufragen, man muss also nach jedem Datentransfer eine gewisse Zeit warten, bis das LCD wieder bereit ist. Bei Basic muss sich der Anwender nicht um diese Einschränkung kümmern, dort wird das LCD innerhalb eines 1ms - Zeitrasters aktualisiert.

LCD eingebaut ins Robo-Interface

Bild 1: LCD eingebaut ins Robo Interface. Hier noch der Prototyp auf Lochraster-Platine.

LCDLCD Rückseite

Bild 2: Das LCD-Modul auf geätzter Platine                            Bild 3: Die Rückseite der Platine (Version 1.0)

Die obigen Bilder zeigen noch eine Platine einer älteren Generation, bei Gelegenheit wird das aktualisiert.

Schaltplan

Bild 4: Schaltplan (Version 1.3). Zum Vergrößern anklicken.

Stückliste:
ID Bezeichnung Reichelt-Bestellnummer Anzahl
C1,C2 Elko 1µF (Subminiatur) SM 1,0 /63 RAD 2
C3,C4,C5 Kondensator 100nF Z5U-2,5 100N 3
C6 Kondensator 27pF KERKO 27P 1
IC1 74HC574 74HC 574 1
IC2 74HC273 74HC 273 1
IC3 74HC04 74HC 04 1
D1 Diode 1N 4148 1
R1,R2 Widerstand 120R 1/4W 120 2
R3 Widerstand 10K 1/4W 10K 1
LCD (*) EA DOGM162E-A 1
Beleuchtung(*) EA LED55X31-G 1
Buchsenleiste (**) BL 2X25G8 2,54 1
Platinenmaterial
 (*)  Für LCD mit grün/gelber Farbe, andere Farben möglich (s. Reichelt).
(**) Die Buchsenleiste muss passend geschnitten werden.

Software

1. Ansteuerung in C

Durch die Anbindung an den Prozessor-Bus des Robo-Interface werden die Register des LCD im Adressraum des µC eingeblendet. Das LCD ist an D0..D7 angeschlossen, es werden also nur Byte-Zugriffe benötigt. Die vom RoboInterface bereitgestellte Select-Leitung  IOSEL3 wird ab einer Adresse 0C3000H angesprochen. Da die Adressleitung A1 mit der RS-Leitung des LCD verbunden ist, können Daten und Befehle einfach durch ansprechen unterschiedlicher Adressen ausgewählt werden.
Ein zusätzliches Feature ist die Möglichkeit, die Beleuchtung des LCD ein- und abzuschalten. Diese Funktion wird durch die Adressleitung A2 realisiert, weshalb die Ansteuerung unterschiedlicher Adressen notwendig ist.

Im Anschluß ein kurzer Code-Auschnitt für die grundlegendsten Funktionen.


#pragma ADDRESS display_adress 0C3000H;
unsigned char far display_adress;
unsigned char LcdLight;

void lcd_command (UCHAR command)
{
    volatile UCHAR far *pointer;
    pointer = &display_adress;
    if (LcdLight == 0)
        *(pointer) = command;
    else
        *(pointer + 4) = command;
}
void lcd_data (UCHAR data)
{
    volatile UCHAR far *pointer;
    pointer = &display_adress;
    if (LcdLight == 0)
        *(pointer+2) = data;
    else
        *(pointer + 2 + 4) = data;
}

void lcd_init (void)
{
    lcd_command (0x39);
    FtDelay(1);
    lcd_command (0x14);
    FtDelay(1);
    lcd_command (0x55);
    FtDelay(1);
    lcd_command (0x6D);
    FtDelay(1);
    lcd_command (0x78);
    FtDelay(210);
    lcd_command (0x0C);
    FtDelay(1);
    lcd_command (0x01);
    FtDelay(1);
    lcd_command (0x06);
    FtDelay(100);

    LcdLight = 1;
}

Nach Aufruf der Funktion lcd_init() kann das LCD mit den Funktionen  lcd_command() und lcd_data() angesprochen werden. Weitergehende Informationen sind im Datenblatt des LCD zu finden.

2. Ansteuerung in BASIC

Mit dem Basic-Compiler ist es wesentlich einfacher, das LCD anzusteuern, hierzu wurde der Befehl lcdprint implementiert. Informationen und Beispiele hierzu sind in der Anleitung des Basic-Compilers zu finden.

Home

Bauanleitungen

Links

Gästebuch

Gästebuch

News

Projekte

Impressum