Hallo zusammen,
mein Thema ist ziemlich brenzlich, da ich eine Deadline habe und meine Abschlussnote davon abhängt, und deshalb bin ich fast dem Wahnsinn nahe
Meine Hardware:
Atmega32
GDM12864B GLCD 128x64 von Tigal mit dem KS0108B Controller
Im Anhang sind ein Bild vom LCD mit Fehler, mein Schaltplan und mein AVR-Project (QUellcode).
DataSheet zum Display gibts hier
Mein Problem:
Ich habe mir die library von m. Thiele gezogen und diese versucht, jedoch bekomme ich irgendwelche Pixel angezeigt und nichts gescheides. Nun hieß es das es ein TiminProblem bei Pixelfehler ist, jedoch ändert sich nichts beim einfügen von ein paar nops.
Was noch versucht wurde:
- Quellcode im Originalen gelassen und nach Quellcode gesteckt.
- Die Pins im Quellcode mit den defines wie PORTAX und per Hexangesprochen
- die zwei CS Bits mal vertauscht
- überall etwas mehr zeitgelassen das sich das Display "zeit"lassen kann.
- ein haufen mal die Schaltung überprüft ob nicht doch ein Kabel raus ist
- an diversen Stellen gemessen ob auch überall die benötigte Spannung anliegt
- Den Kontrast und die Helligkeit verstellt bei jedem Flashen!
- Andere Librarys verwendet (Da geht jedoch überhaupt nichts)
- Nur Linien, Texte oder Rechtecke zeichnen lassen (Es ändert sich jedesmal der Pixelwirwar)
Mein abgeänderter Quellcode vom M. Thiele Lib:
Code:
// Command Port Bits
#define D_I PORTA2 // D/I Bit Number
#define R_W PORTA1 // R/W Bit Number
#define EN PORTA0 // EN Bit Number
#define CSEL1 PORTA4 // CS1 Bit Number
#define CSEL2 PORTA3 // CS2 Bit Number
// Chips
#define CHIP1 0x00
#define CHIP2 0x01
etwas anderes wurde nciht verändert.
Dann der Aufruf in der Main:
Code:
// Initialize the LCD
ks0108Init(0);
// Select a font
ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK);
// Set a position
ks0108GotoXY(1,1);
// Print some text
ks0108Puts_P(PSTR("Hallo Welt -> 1"));
// a nice little round rect
//ks0108DrawRoundRect(5, 5, 20, 20, 8, BLACK);
while(1)
{
ks0108ClearScreen();
ks0108GotoXY(1,1);
// Print some text
ks0108Puts_P(PSTR("Hallo Welt -> 1"));
_delay_ms(1000);
ks0108ClearScreen();
ks0108FillRect(1,1,20,30, BLACK);
_delay_ms(1000);
ks0108ClearScreen();
ks0108FillRect(0,0,120,60, WHITE);
}
Ob ich nur das in der Schleife lass oder das davor, macht kein unterschied. Immer Pixelwirwar nur das sich das in der Schleife ändert.
Wäre für jede Hilfe sehr dankbar.
Grüße
Sven S.
Lesezeichen