Cursor problem beim M50530 LCD Controller

Gast #1128767
Lesenswert?

Hallo Kollegen,

also ich habe wirklich sehr viel probiert und auch den Datenblat zum 
Controler mehrmals gelesen. Aber komme einfach nicht mehr weiter.

Deswegen bitte ich um eure Hilfe.

vorweg, ich habe ATmega8+STK500+Samsung LCD 2138A (m50530)
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
Angehängte Dateien:
Gast #1198869
Lesenswert?

also das problem liegt beim setzen des Cursors.

hier der funktionsfähige code dazu:
1
void LCD_setCursorPos(const uint8_t y, const uint8_t x)
2
{
3
  // Adresse aus x und y berechnen
4
  // Adressen sind wie folgt: Zeile 0 = 0; Zeile 1 = 64; Zeile 2 = 128; Zeile 3 = 192;
5
  //               Zeile 4 = 0+24; Zeile 5 = 64+24; Zeile 6 = 128+24; Zeile 7 = 192+24
6
   //  uint8_t address = x + ((y % 4) << 6);
7
  uint8_t address = x + y * 48;
8
  if (y > 3)
9
    address += 88;
10
   // address += 24;
11
  LCD_sendByte(address, (1<<LCD_OC1_PIN) | (1<<LCD_OC2_PIN));
12
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren