Hi,
Entschuldigung für meine zahlreichen Nachfragen gestern, Ich hatte nicht gesehen, daß du deinen (fast) kompletten Code angehängt hast.
Folgendes ist mir aufgefallen:
LCD_init(void) ist IMHO so in Ordnung.
In write_cgram() steht folgendes
Code:
LCD_setCursorAddress( adresse + (8*index));
for ( i = 0; i < 8 ; i++) {
LCD_writeChar( pixels[i]);
LCD_setCursorAddress( adresse + (8*index) + i);
}
IMHO müsste da stehen:
Code:
for ( i = 0; i < 8 ; i++) {
LCD_setCursorAddress( adresse + (8*index) + i);
LCD_writeChar( pixels[i]);
}
Eventuell nach jedem Befehl an das LCD noch ein LCD_waitReady(),
genauso wie im init. Die Befehle brauchen auch auf Displayseite
etwas zum ausführen.
Warum am Ende von write_cgram() ein LCD_clear() ?
Das ist IMHO nicht notwendig.
Ansonsten scheint mir xxx() soweit zu stimmen.
Insgesamt sollte das so funktionieren.
Bitte probier die obigen Vorschläge aus.
Wenn das nicht klappt folgendes probieren:
- die initialisierung ganz ohne xxx() ausführen
- mit xxx, aber nur ein selbstdefiniertes Zeichen, möglichst aus der Mitte
- langsam alle Zeichen dazunehmen
Und dann nach jedem Schritt ausprobieren, ob das Fehlerbild noch auftritt.
Zum Fehlerbild fällt mir nur folgendes ein: Es könnte sein, daß deine 'Display Start Address' verschoben ist. Im Zweifelsfall das Display
ausgehend von LCD_setCursorPos(0,0) mit den Zeichen a-zA-Z0-9 vollschreiben und schauen ob sich ein Muster ergibt.
Ragnar
Lesezeichen