lcd_setcursor und 4-zeiliges LCD

Gast #4242791
Lesenswert?
• ▲
▼
Hallo,

ich habe ein 4 zeiliges LCD von Pollin ( TC2004A-05 ), und verwende die 
library aus dem avr gcc tutorial zur Ansteuerung.

Soweit so gut.

Möchte ich nun meinen Text in die 3. Zeile setzen mit:

lcd_setcursor(0,3);

Kommt dieser nicht in die 3. Zeile, sondern nach rechts verschoben ( ab 
Position 17 ).

Weiß jemand woran das liegen könnte, und wie ich den Fehler beheben 
kann?

Danke
Richard
#4242799
Lesenswert?
• ▲
▼
Die Startadresse der einzelnen Zeilen im Display-Ram ist nicht bei allen 
Herstellern identisch. Speziell bei 4 Zeilen geht das munter 
durcheinander. Du musst die für dich passenden Werte aus dem Datenblatt 
suchen oder experimentell herausfinden und dann den Quelltext passend 
ändern.
Gast #4242806
Lesenswert?
• ▲
▼
in der lcd-routines.h anpassen:
1
////////////////////////////////////////////////////////////////////////////////
2
// Zeilendefinitionen des verwendeten LCD
3
// Die Einträge hier sollten für ein LCD mit einer Zeilenlänge von 16 Zeichen passen
4
// Bei anderen Zeilenlängen müssen diese Einträge angepasst werden
5
 
6
#define LCD_DDADR_LINE1         0x00
7
#define LCD_DDADR_LINE2         0x40
8
#define LCD_DDADR_LINE3         0x10
9
#define LCD_DDADR_LINE4         0x50
Gast #4242843
Lesenswert?
• ▲
▼
Hallo,

danke für die Tipps,

tatsächlich stimmt es mit folgenden Einstellungen
1
#define LCD_DDADR_LINE1         0
2
#define LCD_DDADR_LINE2         40
3
#define LCD_DDADR_LINE3         20
4
#define LCD_DDADR_LINE4         84

Danke!
Gast #4242949
Lesenswert?
• ▲
▼
Hi

> dann hat das Rätseln schnell ein Ende.

Da gibt es nicht viel zu Rätseln. Der Displaycontroller verwaltet zwei 
Zeilen á 40 Zeichen, die bei 0 und 64 anfangen. Bei einem 4-zeiligen 
Display müssen also Zeile 3 bzw. Zeile 4 bei 0+20 bzw. 64+20 anfangen.

Da 64 (dez) = 0x40 ist, halte ich obige Angabe für falsch.

MfG Spess
Gast #4242984
Lesenswert?
• ▲
▼
spess53 schrieb:
> Sicher, das das stimmt?

Meine LCDs funktionieren auch so.
(bit 7 sagt dem LCD dass der Cursor gesetzt werden soll)
(bit 6 wählt erste oder zweite Hälfte des Displays aus)

#if 1  /*  LCD 20 x 4  */
#define LCD_LINE0     0x80     //  0x00 --> 00
#define LCD_LINE1     0xC0     //  0x40 --> 64
#define LCD_LINE2     0x94     //  0x14 --> 20
#define LCD_LINE3     0xD4     //  0x54 --> 84
#define LCD_LINE_LEN    20
#endif

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.