Forum: Mikrocontroller und Digitale Elektronik lcd_setcursor und 4-zeiliges LCD


von Richard Mader (Gast)


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

von hp-freund (Gast)


Lesenswert?

Richard Mader schrieb:
> sondern nach rechts verschoben ( ab Position 17 ).

Dann ist wohl ein Display mit 16 und nicht 20 Zeichen pro Zeile 
eingestellt.

von Georg G. (df2au)


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.

von Heinz V. (heinz_v)


Lesenswert?

Schau mal ins Datenblatt des Display Controllers:

das 4x20 Display ist quasi ein geteiltes 2x40 Display, die Reihenfolge 
der Zeilen ist Zeile1, Zeile3, Zeile2, Zeile4.

Siehe: http://sprut.de/electronic/lcd/index.htm#4x20

von hp-freund (Gast)


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

von oo /O-o-O\ oo (Gast)


Lesenswert?

Georg G. schrieb:
> Werte aus dem Datenblatt suchen ...

Ich würde mal denken, dass es an der Software liegt und nicht am Display

von Richard Mader (Gast)


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!

von spess53 (Gast)


Lesenswert?

Hi

>#define LCD_DDADR_LINE2         40

>#define LCD_DDADR_LINE4         84

Sicher, das das stimmt?

MfG Spess

von Carl D. (jcw2)


Lesenswert?

Einfach mal beginnend Zeichen von A..Za..z0..9 fortlaufend in das 
Data-RAM reinschreiben, dann hat das Rätseln schnell ein Ende.

von spess53 (Gast)


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

von LCDschreiber (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

>//  0x40 --> 64

Stimmt, aber 40 --> 0x28

MfG Spess

von LCDschreiber (Gast)


Lesenswert?

spess53 schrieb:
> Stimmt, aber 40 --> 0x28

Ja da ist irgendwo ein Dreckfuhler.

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.