Problem mit GLCD (KS0108)

OP #4140432
Lesenswert?

Hallo zusammen,

im Moment versuche ich mein GLCD mit dem KS0108 Controller zum Laufen zu 
bekommen. Leider funktioniert es nicht. Das Display reagiert auf kein 
Kommando und zeigt nichts an. Mein Code im Anhang ist sehr 
minimalistisch gehalten, denn für den Anfang möchte ich nur sehen, dass 
es funktioniert. Vielleicht findet ihr meinen Fehler. Folgende Seite 
habe ich als Vorlage benutzt: http://embedded-lab.com/blog/?p=2398

Danke im Voraus für eure Antworten.
Angehängte Dateien:
Gast #4140473
Lesenswert?

Vermutlich haben heute alle - da Pfingstmontag ist - ihre Glaskugeln zur 
Aufarbeitung gegeben.

Praktisch wären ein paar Angaben zum verwendeten Mikrocontroller, zum 
Takt, zum Compiler, zum realen Schaltung, ...

Hast Du das Programm fehlerfrei compilieren können? Das wage ich zu 
bezweifeln ...

Hört sich zwar blöde an - aber manchmal hilft Google auch mit Hinweisen, 
wenn man z.B. mit "ks1008 glcd atmega" o.ä. sucht.
OP #4140501
Lesenswert?

Also ... Controller: PIC18f25k22 Compiler: XC8
Compilieren ging fehlerfrei. Auch beim Debuggen gabs keine Probleme. Das 
Programm macht, was ich mir vorstelle. Trotzdem reagiert das Display 
nicht. Daher denke ich, dass ich etwas bei der Ansteuerung vergesse, 
bzw. grundsätzlich falsch mache.
Gast #4140588
Lesenswert?

void KS_config(void)
{
    KS_reset();
    KS_CSA = 1;
    KS_CSB = 1;
    KS_write_command(0x3F);
}

Bei meinen KS0108 Displays sind die beiden CS low aktiv.
Dann würdest du so genau gar nichts ins Display schreiben.
Gast #4140651
Lesenswert?

Vielleicht sollte man vorm Schreiben an das GLCD warten, bis das 
BUSY-Bit wieder aus ist..?

Also
1. Datenrichtung Lesen (Daten Port als Eingänge)
2. Chipselect
3. Registerselect Command
4. Am Enable wackeln
5. Datenport lesen
6. ist Bit 7 gesetzt, dann 4.
7. KS0108 ist Ready

Jedenfalls habe ich keine Statusabfrage im Code gefunden..

Ich habe ein KS0108 kompatibles (S6B0108) an einem Mega128 mit 16MHz 
laufen.
Da kann man das EN schon mal High setzen, bevor die Daten am Port 
ausgegeben werden, und das EN wieder Low, wenn die Daten am Port 
anstehen.
Da muss man nicht 5us vorher oder nachher warten.. (eher 0.5us)

Tipps für Selberprogrammierer:
- Nicht zu verachten ist das Autoinkrement der x-Adresse nach Schreib- 
oder Leseoperationen - es bieten sich Blockoperationen an (8Byte Block 
lesen, im Ram manipulieren, und als Block wieder ausgeben.
- Vor dem Lesen von Daten muss erst ein Dummyread gemacht werden.
- Die Abfrage des Busy-Bits geht schneller, als ein delay_ms(1)..
- wenn kein KS0108 angeschlossen ist, ist das Busy auch immer 0
- um Festzustellen, ob ein KS0108 angeschlossen ist, muss man das 
Kommando "Display off" ausgeben, und dann bei der Statusabfrage schauen, 
ob das Bit5 High ist (zumindest beim S6B0108) - Hier steht zwar in allen 
KS0108 Datenblättern das Gegenteil, aber Versuch macht kluch..
- Zum Löschen des Displays können auch beide Controller parallel 
geschrieben werden

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren