mikrocontroller.net

Forum: Compiler & IDEs Cursor problem beim M50530 LCD Controller


Autor: Herr Ahnungslos (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Ahnungslos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keine Antwort darauf?

Autor: gast (Gast)
Datum:

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

Autor: Ahnungslos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also das problem liegt beim setzen des Cursors.

hier der funktionsfähige code dazu:
void LCD_setCursorPos(const uint8_t y, const uint8_t 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
   //  uint8_t address = x + ((y % 4) << 6);
  uint8_t address = x + y * 48;
  if (y > 3)
    address += 88;
   // address += 24;
  LCD_sendByte(address, (1<<LCD_OC1_PIN) | (1<<LCD_OC2_PIN));
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.