www.mikrocontroller.net

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


Autor: Martin Krellmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Krellmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.