Forum: Projekte & Code Library für ST7920 GLCD 128x64


von Axel S. (a-za-z0-9)


Angehängte Dateien:

Lesenswert?

Moin,

für ein Projekt, das ich vielleicht später mal vorstellen werde, habe 
ich bei ebay günstig zwei GLCD 128x64 aus China bestellt. Blöderweise 
habe ich nicht darauf geschaut, welchen Controller die haben und war 
dann etwas überrascht, daß die schon fast fertige Firmware für KS0108 
nicht lief :-/

Darüber hinaus waren die Ergebisse einer Google-Recherche nach einer 
ST7920 Lib auch nicht direkt ermutigend.

Was solls. Habe ich aus der Not eine Tugend gemacht und selber eine 
Library für den ST7920 angefangen. Nach ein paar Stunden bin ich jetzt 
so weit, daß das notwendigste geht und möchte das hier gleich teilen. 
Womöglich finden sich ja Mitstreiter?

Das GLCD ist derzeit mit der parallelen Schnittstelle an einen ATMega328 
angeflanscht (Details: siehe hal.h). Das hat gegenüber SPI den Vorteil, 
daß man das GLCD auch auslesen kann.

Ein positiver Aspekt des ST7920 gegenüber dem KS0108 ist, daß er 2KB 
Framebuffer hat. Da man für 128x64 Pixel aber nur 1KB braucht, kann man 
double-buffering im LCD machen!

Was geht:

* LCD im Grafikmodus initialisieren
* 3 Zeichenmodi: set, clear, invert
* Grafik-Primitive: Screen löschen, Pixel setzen
* zwei Screens mit der Möglichkeit, die Screens instantan auszutauschen 
(st7920_swap()) und der Option, entweder auf den angezeigten (front) 
oder den unsichtbaren (back) zu zeichnen
* basierend auf st7920_putpixel() : horizontale/vertikale Linien, 
gefülltes Rechteck. Langsam!

Was fehlt und definitiv noch kommt:

* optimierte Routine für horizontale Linien
* basierend auf Einzelpixeln: Linien, evtl. Ellipsen (Bresenham)
* Strings mit Fonts a'la Apetech
* evtl. Bitmaps (Icons & Co)

Gefundene Fallstricke bei Verwendung des ST7920:

* alle Schreib-/Lesezugriffe sind für 16 Bit, man muß also immer 2 Bytes 
auf einmal lesen/schreiben
* nach dem Setzen der Adresse zum Lesen muß man einen Dummy-Lesezugriff 
machen (1 Byte)
* der Framebuffer ist logisch organisiert als 16 Worte (a 16 Bit) x 64 
Zeilen. Ein 128x64 LCD verwendet aber nur 32 Zeilen im Framebuffer. Die 
untere Hälfte des LCD klebt rechts am genutzen Teil.

Anbei: ST7920 Lib + Demo (in main.c). Die Hardware ist in bewährter 
Manier in hal.h abstrahiert (der Haufen Makros am Ende)


mfg, XL

von Paul (Gast)


Lesenswert?

Who can write code for ST7920 GLCD 128x64 for CODEVISION please urgently 
for my paper!

von avus (Gast)


Lesenswert?

Das nenn ich mal frech. Führt sich auf wie der CEO vom Dienst, der Paul 
g

Hallo Stefan, in China habe ich mir ein blaues 128x64 ST7920-Modul 
persönlich gekauft (umgerechnet ca. 8€, war aber im Nordosten, da ist 
eher Autoindustrie, kaum Displays). Ich hab das Gefummel von KS108 auf 
ST7920 mit eigenen Fonts gemacht, aber irgendwohin vergraben. Ich 
glaube, man mußte die Fontbits neu berechnen (90 Grad), weil der ST die 
bytes bzw. das word senkrecht zum KS108 oder auch ST7565 hat. Fand ich 
zu exotisch und deshalb liegt er jetzt auf Halde ;)

von Schuppe (Gast)


Lesenswert?

werde das vielleicht mal aus Platzgründen ausprobieren^^

Also falls Du es nicht gefunden hast, u8glib unterstützt den st7920 
komplett in 8bit und 4-Wire Spi (für SPI muss der richtige Pin 
rausgeführt sein).

Vielleicht ein Speicherfresser aber immerhin klappt alles.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.