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

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