Liste der Anhänge anzeigen (Anzahl: 4)
Samsung LCD 2138A macht Cursorprobleme wenn CGRAM geschr
Hallo Zusammen,
also ich komme wirklich nicht merh weiter. Scheitere schon seit 3 Wochen. ](*,)
vorweg, ich habe ATmega8+STK500+Samsung LCD 2138A (m50530)
Mein Problem ist:
http://lcd-linux.sourceforge.net/pdfdocs/M50530.pdf
Möchte große eigene Zeichen in den CGRAM schreiben, habe auch geschaft.
Allerdings seit ich dies gemacht habe setzt sich mein Kursor (aus mir
unerklerlichen Gründen) völlig an andere Stelle auf dem LCD.
z.B:
LCD_setCursorPos(2,0); // Setze kursor 3.Zeile Spalte 0
LCD_write("abcd"); // schreibe abcd
aber er schreibt mitte 7. zeile...
Mein CGRAM Kapazität soll 64Word sein --> kursor adresse 0xC0
Und der 1.Zeichen ist mit 0xF8 auszulesen. Siehe S.14
Damit dies so funktioniert habe ich beim initialisieren als (S.27) WD
0xDa
eingeben müssen. Mit 0xD8 funktioniert es aber kann halt nicht in CGRAM
schreiben.
// DB7, DB6, DB4, DB3 0xDA = 11011010 //0xD8 = 216 = 11011000
LCD_sendByte(0xDA, 0); //Set function mode (8Bit, 5x7 Character)
Ich hoffe dies alles ist aussagekräftik.
Ich bin wirklich ein wenig verzweifelt!
Bitte um Hilfe...
Grüße Khan
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo und danke für dein Antwort.
also zum 1.:
Ich beziehe mich auf die Routine LCD_init ().(in lcd_m50530.c)
Ich habe nicht mit LCD-Linux gearbeitet, weis auch nicht was das ist.
Arbeite grad in Windows.
zu 2.:
hast richtig geraten. 8x24
zu 3.:
Fonts 5x8Pixel sollen bleiben.
Eigene Zeichen sind ebenfalls 5x8 Pixel-Zeichen (wie im Funktion xxx() )
zu 4.:
Genau so wie du sagst habe(besser versucht) ich auch programmiert.
zu 5.:
LCD_setCursorPos (y,x); // Setzt cursor mit y auf die Zeile und mit x auf die Spalte
LCD_writeChar ('a'); // schreibt einen Char
LCD_write ("String"); // schreibt eine String
LCD_writeChar (0xF8); //schreibt den ersten slbst. definierten Zeichen auf die LCD
dass zu den einfachen Befehlen.
Jetzt die Init Routine:
Code:
void LCD_init(void)
{
LCD_waitReady (); // Wartet bis LCD bereit
// alle Leitungen auf Ausgang schalten
LCD_DDR = 0xFF;
//LCD_sendByte(0b100011, 0); // SD:
// auf 4-Bit-Mode umschalten
/*
SET FUNCTION MODE
input:
OC1 0
OC2 0
RW 0
DB7,DB6 1
DB5 I/O 8/4 (1 = 8 bit, 0 = 4 bit)
DB4 FONT 8/12 (1 = 5x8 fonts, 0 = 5x12 fonts)
DB3,DB2 DUTY DT1 = 1; DT2 = 0;
DB1,DB0 RAM RA1 = 1; RA2 = 0;
*/
LCD_sendByte(0xDA, 0); //SF: Siehe komentar oben
LCD_waitReady (); // Wartet bis LCD bereit
LCD_sendByte(0x50, 0); //SE: Incrementiere den Curs. nach write data (WD), und No change display start adr.
LCD_waitReady (); // wartet wieder
LCD_sendByte(0x30, 0); //SD: Set disp. mode && Display on
LCD_clear(); //löscht lcd
xxx (); /* Schreibt selbst definierte Zeichen in CGRAM */
}
Das habe ich laut Datenblat erstellt. (von S. 25 bis 32)
ich hoffe dass ist Aussagekräfig.
Wenn nicht, sende ich dir natürlich mehr Informationen!
Ich will eigentlich dass Gleiche wie auf dem Bild im Anhang DisplayTest_8x24_2.jpg
grüße
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ragnar,
also ich habe alles so versucht wie du beschrieben hast.
Aber immer dass gleiche Effekt.
Es mus was total einfaches oder banales sein!
Denn sonst hätte ich es gefunden ;-)
Ich habe auch einen ganz langen String geschrieben, im Anhang ist ein Bild davon. (a-z,A-B,0-9) an die Position LCD_setCursorPos (0,0);
Kann es sein dass wenn ich die Ram Adresse für den CGRAM aktiviere/reserviere dass die Adressierung für Cursorpositionierung auch ändert?
Hier mal das Code dazu:
Code:
// setzt den Cursor an die angegebene Position (y = Zeile, x = Spalte)
void LCD_setCursorPos(const unsigned char y, const unsigned char x)
{
// Adresse aus x und y berechnen
// Adressen sind wie folgt: Zeile 0 = 0; Zeile 1 = 64; Zeile 2 = 128; Zeile 3 = 192; Zeile 4 = 0+24; Zeile 5 = 64+24; Zeile 6 = 128+24; Zeile 7 = 192+24
unsigned char address = x + ((y % 4) << 6);
if (y > 3)
address += 24;
LCD_sendByte(address, (1<<LCD_OC1_PIN) | (1<<LCD_OC2_PIN));
}
Set Function: u.a. Adressierung des CGRAM
Code:
// auf 4-Bit-Mode umschalten
/*
SET FUNCTION MODE
input:
OC1 0
OC2 0
RW 0
DB7,DB6 1
DB5 I/O 8/4 (1 = 8 bit, 0 = 4 bit)
DB4 FONT 8/12 (1 = 5x8 fonts, 0 = 5x12 fonts)
DB3,DB2 DUTY
DB1,DB0 RAM
*/
LCD_sendByte(0xDA, 0); // DB7, DB6, DB4, DB3
grüße
Khan[/code]