Forum: Compiler & IDEs Cursor problem beim M50530 LCD Controller


von Herr Ahnungslos (Gast)


Angehängte Dateien:

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

von Ahnungslos (Gast)


Lesenswert?

hat keine Antwort darauf?

von gast (Gast)


Lesenswert?

moin, ich probier auch grade an dem display rum...bekomm aber nicht 
wirklich was hin!
hast du dein problem heraus gefunden !?

von Ahnungslos (Gast)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.