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.
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.
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.
Natürlich, trotzdem nichts. Ich denke das Display wird nicht einmal aktiviert. Ansonsten würde ich doch den undefinierten RAM Inhalt sehen, oder ?
>Ich denke das Display wird nicht einmal >aktiviert. Wie ist die RST Leitung angeschlossen?
TRISB = 0b00000011; #define KS_RS LATBbits.LATB0 #define KS_RW LATBbits.LATB1 Ich denke die beiden sind nicht auf Ausgang geschaltet.
Peinlich... :-) Trotzdem funktionierts noch nicht. Die Reset Leitung ist an RB5.
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.
Vielen Dank Holger, im Angebot stand bei CS High Effective. Nach der Änderung im Programm auf Low aktiv, funktionierts. Vielen Dank :-)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.