KS0108 Library
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
- Library: www.mikrocontroller.net: glcd_ks0108_v11.zip
- Font Generator: GLCDFontCreator2.zip
- Fonts
- Arial 14 Bold: in glcd_ks0108_v11.zip enthalten
- Corsiva 12 :in glcd_ks0108_v11.zip enthalten
- Arial 8: www.mikrocontroller.net: arial8.h
- Nokia 3310: www.mikrocontroller.net: Nokia3310.h