Hi! Ich bekomme auf dem Display keine "sauberen" Pixel angezeigt, d.h. wo z.B. eine Linie von einem Pixel Breite sein sollte ist eine von z.B 8 Pixel (also viel breiter). Ich vermute mal das liegt an der Datenübertragung zum Chip... Ich verwende einen ATMega16 und GLCD: EA DIP 128-6 (mit KS0108)... der AVR ist auf einer STK500 Testplatine aufgebaut, dazu habe ich mir das LCD auf eine "simple" Lochrasterplatte gelötet (da sind natürlich auch ein paar Drahtbrücken entstanden), +5V und GND kommen von der Testplatine. Ich habe den KS0108 folgendermaßen beschaltet (wie im Datenblatt von EA steht): -> Enable und CS HI-Aktiv: - PORTD,0x00 auf Reset - PORTD,0x01 auf Enable (E1 und E2) - PORTD,0x02 auf CS1H (Chipselect links, high aktiv) - PORTD,0x03 auf CS2H (Chipselect rechts, high aktiv) - PORTD,0x06 auf D/I - PORTD,0x07 auf R/W - CS1L (Chipselect links, low aktiv) und CS2L (Chipselect rechts, low aktiv) sind beide direkt auf GND gelegt -> PORTC ist Data Port Wie gesagt: die Daten werden nicht sauber übertragen. Liegt das an der Platine? Oder stimmt was nicht mit meiner "Control" beschaltung? Außerdem hatte ich den die Chipselect vorher auf low aktiv (also CS1L und CS2L zum AVR, CS1H und CS2H auf +5V) und da hat nur die rechte Display Hälfte funktioniert, aber die Pixel waren "sauber". Ich muss auch anmerken: Ich hab mal den Code von apetech.de zur Ansteuerung des KS0108 auf den AVR geladen (natürlich mit meiner PIN-Belegung) und da geht gar nichts mehr... Ich verwende den WinAVR mit der avrlib (da sind auch libs für den KS0108 und GLCDs dabei). (Bei einem Beispielprogramm davon habe ich auch beobachtet, dass die Pixel auf linken Display hälfte um einen Pixel nach oben verschoben sind... nur so als zusatzinfo) MfG Martin Krellmann
Ich weiß jetzt aus welchem Grund die Pixel nicht sauber gezeigt werden: Das liegt daran, wie das Programm die setzt. Beispiel: void glcdSetDot(u08 x, u08 y) { unsigned char temp; glcdSetAddress(x, y/8); temp = glcdDataRead(); // dummy read temp = glcdDataRead(); // read back current value glcdSetAddress(x, y/8); glcdDataWrite(temp | (1 << (y % 8))); glcdStartLine(0); } Die vorhandenen Daten werden gelsen und dann darauf basierend die neuen gesetzt... Das Problem ist glcdDataRead liefert keine sauberen Daten... da kommt nur irgend ein Stuss an... Aber warum? Die verbindungen sind ja richtig verdrahtet, denn wenn ich die Pixel setzte ohne auf den vorhanden aufzubauen, geht das wunderbar...
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.