KS0108 Library

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

Dieser Artikel beschreibt die Verwendung einer Library zur Ansteuerung von Grafik-LCDs mit KS0108 Controllern (meist 128×64 Pixel).

Eine gut funktionierende Library wurde von Fabian Maximilian Thiele erstellt, dessen Webseite leider seit längerer Zeit offline ist. Deshalb werden hier alle nützlichen Informationen, die im Forum verstreut sind, hier zusammengefasst.

Verwendung

Um die Library zu verwenden muss diese an die eigenen Hardware angepasst werden was in der Datei ks0108.h geschieht. Dazu müssen die folgenden Zeilen angepasst werden:

// Ports
#define LCD_CMD_PORT		PORTA		// Command Output Register
#define LCD_CMD_DIR		DDRA		// Data Direction Register for Command Port

#define LCD_DATA_IN		PINC		// Data Input Register
#define LCD_DATA_OUT		PORTC		// Data Output Register
#define LCD_DATA_DIR		DDRC		// Data Direction Register for Data Port

// Command Port Bits
#define D_I			0		// D/I Bit Number
#define R_W			1		// R/W Bit Number
#define EN			2		// EN Bit Number
#define CSEL1			3		// CS1 Bit Number
#define CSEL2			4		// CS2 Bit Number

Stolperfallen

  • Diese Library verwendet nicht den RSTB-Pin des Displays. Mann muss also selber entweder per Hardware oder Software dafür sorgen, dass dieser auf HIGH gesetzt wird
  • Bevor man aufs LCD schreibt, muss ks0108SelectFont aufgerufen werden. Ansonst kommt es zu Fehlfunktionen
  • Nach den Einschalten brauchen die LCD-Controller je nach Hersteller unterschiedlich lange, bis sie bereit sind. Hier also lieber ein delay zuviel als zu wenig.

Fetter Text'''Fetter Text''''== Eigene Fonts erstellen == Wer noch mehr Fonts haben möchte, kann mit dem FontCreator eigene Schriften erstellen. Dazu muss erst die Datei GLCDFontCreator2.zip heruntergeladen und entpackt werden. Falls noch nicht installiert, muss ein Java Runtime Environment heruntergeladen und installiert werden.

Weitere Stolperfalle: "ks0108ClearScreen()" Tut nicht wirklich das, was es soll. Da bleibt immer irgendwelcher Pixelbrei übrig. Dieser Codefetzen behebt das Problem nachhaltig.

void ks0108ClearScreen(void) {
    for (uint8_t cnt1 = 0; cnt1 < 8; cnt1++)
    {
        ks0108GotoXY(0, cnt1*8);
        if (ks0108Inverted)
            LCD_DATA_OUT = 0xFF;                     // all black
        else
            LCD_DATA_OUT = 0x00;                     // all white
        for (uint8_t cnt2 = 0; cnt2 < 64; cnt2++)
        {
            LCD_CMD_PORT |= 1 << D_I;                // D_I = 1
            LCD_CMD_PORT &= ~(1 << R_W);             // R/W = 0
            LCD_CMD_PORT |= (1 << EN1) | (1 << EN2); // EN high level width: min. 450ns
            asm volatile("nop\n\t"
                         "nop\n\t"
                         "nop\n\t"
                         ::);
            LCD_CMD_PORT &= ~((1 << EN1) | (1 << EN2));
            for (volatile uint8_t i=0; i<8; i++);    // a little delay loop (faster than reading the busy flag)
        }
    }
}

Entsprechend ist die Datei "ks0108.h" anzupassen:

//#define ks0108ClearScreen() {ks0108FillRect(0, 0, 127, 63, WHITE);}
void ks0108ClearScreen(void);

Font erstellen

Im Menü File → New Font anwählen. Danach ist das Programm selbsterklärend.

Windows

Unter Windows genügt ein Doppelklick auf die Datei start.bat.

Linux (evtl. auch MacOS)

Unter Linux kann das Programm aus der Konsole mit dem Befehl

java -classpath . FontCreator

gestartet werden. Natürlich muss man sich im Verzeichnis FontCreator.java befinden.

Forenbeiträge

Downloads

Projekte, die diese Library verwenden