Forum: Mikrocontroller und Digitale Elektronik EA DIP128-6 mit KS0108 Controller - Ansteuerungsprobleme


von Martin Krellmann (Gast)


Lesenswert?

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

von Martin Krellmann (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.