AVR LCD KS0073/DIP204 mit Hardware-SPI

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Enwurfsphase, Artikel ist noch in Bearbeitung!

Allgemeines

Der KS0073 LCD-Controller ist im parallelen 8-Bit bzw. 4-Bit Mode ähnlich dem klassischen und weit verbreiteten Typ HD44780. Zusätzlich verfügt er über einige nützliche Funktionen und einen erweiterten Zeichensatz. Außerdem kann er in einer seriellen (SPI) Betriebsart betrieben werden. Auf die SPI-Verwendung wird im folgenden näher eingegangen.

Stromlaufplan DIP204 per SPI an AVR

Stromlaufplan als PDF.

Hardware

Das SPI-Interface verwendet die Standardleitungen MISO, MOSI, SCK und eine CS Leitung, um den Baustein zu selektieren. Die Übertragung erfolgt in Byte-Form, wobei das LSB zu erst gesendet werden muss.

Belegung am Beispiel LCD DIP 204-4:

  • PIN 4 (RS) - CS
  • PIN 5 (RW) - MOSI
  • PIN 6 (E) - SCK
  • PIN 7 (D0) - MISO

Um den SPI-Mode zu aktivieren, muss auf dem LC-Display der entsprechende Jumper/Lötbrücke auf SPI eingestellt werden.

Sollte bei dem Display der IE-Pin herausgeführt sein, so muss dieser Pin auf High geschaltet werden. Damit wird der von der Software verwendete "Instruction Set" aktiviert. Bei dem DIP 204 ist dieser Pin auf dem LC-Display bereits intern korrekt beschaltet.

Display EA DIP204 mit KS0073 LCD- Controller

Der Rv für die Hintergrundbeleuchtung ist entsprechend des konkreten Display-Types zu wählen. Der Pullup-Widerstand am CS-Pin ist erforderlich, damit bei der Programmierung des AVR per ISP das LC-Display sicher deaktiviert bleibt und es nicht zu Buskonflickten kommt. Ebenso muss der RES-Pin dauerhaft auf High liegen. (Beim Dip 204 ist der RES Pullup-Widerstand bereits auf dem LCD-Modul vorhanden und kann entfallen.) Mann könnte den RES-Pin auch über einen freien Portpin des AVR verdrahten und hätte somit die Möglichkeit, dass LC-Display durch einen kurzen Low-Impuls zurück zu setzen.

Die Betriebsspannung beträgt im Beispiel 5V. 3.3V sind auch möglich.

Software

Im Beispielprogramm wird ein ATmega und ein LCD EA DIP 204-4 verwendet. Es wird zur Übertragung zum LCD (Write) immer die 3 Byte Variante (Serial Write Operation) benutzt. Hierbei wird zuerst ein Startbyte, gefolgt von 2 Datenbytes, übertragen.

Write SPI-Timing


Beim lesen (Read) sind nur 2 Byte erforderlich. Ein Startbyte, worauf das LCD dann ein Datenbyte zurückgibt.

Read SPI-Timing


Die vom KS0073 ebenfalls unterstützten "Continuous Write/Read" Operationen werden nicht verwendet, könnten aber bei zeitkritschen Anwendungen einen Geschwindingkeitsgewinn bringen.

Die SPI-Frequenz kann max. 2 MHz betragen. Im Beispiel wurde eine geringere Frequenz von FOSZ / 64 (SPI2X=0 SPR1=1 SPR0=0) gewählt. Das SPI Transfer-Format erfolgt im Mode 3 und wird mit CPOL=1 und CPHA=1 festgelegt. Dabei liegt SCK im Ruhefall auf High und die steigende Flanke übernimmt die Daten.

Da das LSB zuerst übertragen werden muss, ist DORD=1 zu setzen.

Der vollständige SPI-Initialisierungsstring sieht nun so aus:

SPCR = ((1<<SPE) | (1<<MSTR) | (1<<DORD) | (1<<SPR1) | (1<<CPOL) | (1<<CPHA));

Erfahrungsgemäß stellt die Initialisierung eines LC-Displays die größte Hürde dar. Die Datenblätter der Herstellen sind oftmals in dieser Beziehung auch ziemlich spärlich oder lassen Unklarheiten zurück. Leider macht das Datenblatt des KS0073 bzw. des DIP 204 dabei keine Ausnahme. Für den SPI-Mode wird darin z.B. keine Initsequenz angegeben. Also waren ein paar Versuche notwendig.

Letztlich ist die Initialisierung aber recht einfach. Das LC-Display wird praktisch für den 8-Bit Mode initialisiert, nur das die Übertragung der Befehle hardwaremäßig per SPI erfolgt.

Initialisierung (Auzug):

write_lcd(0x34,1);        // 34 0011 0100 (8Bit Bus, RE=1)
write_lcd(0x09,1);        // 09 0000 1001 (4 Zeilen Mode)
write_lcd(0x30,1);        // 30 0011 0000 (8Bit Bus, N=0, RE=0, DH=0, REV=0)

Die einzelnen Zeilen beim Dip 204 haben folgende Anfangsadressen:

  • Zeile 1: 0x00 (bis 0x13)
  • Zeile 2: 0x20 (bis 0x33)
  • Zeile 3: 0x40 (bis 0x53)
  • Zeile 4: 0x60 (bis 0x73)

Die Beispielsoftware enthält neben der SPI-Routinen und der Initialisierung alle wichtigen Ausgabe-Funktionen, die zum Betrieb erforderlich sind. Neben der Standardausgabe von Zeichenketten gibt es auch Funktionen zum Monitoring (scrollen) von einzelnen Zeichen und Zeichketten, positionierte Zeichen-Ausgaben, zum blinken und invertieren und zur Nutzung von selbst definierten Sonderzeichen.

Das Beispielprojekt wurde mit dem AVR-Studio (4.18) und GCC (4.3.2) getestet.

Fazit

Der SPI-Mode ist eine interessante Möglichkeit zur Ansteuerung eines LC-Displays. Besonders wenn die I/O-Ports am Mikrocontroller knapp werden. Leider sind nur wenige LCD-Module mit dem KS0073 Controller verfügbar.

Author: Matthias Kahnt / matthiask (az51@gmx.net) zum Diskussionsbeitrag im Forum

Links / Download