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
Richard Mader schrieb: > sondern nach rechts verschoben ( ab Position 17 ). Dann ist wohl ein Display mit 16 und nicht 20 Zeichen pro Zeile eingestellt.
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.
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
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
|
Georg G. schrieb: > Werte aus dem Datenblatt suchen ... Ich würde mal denken, dass es an der Software liegt und nicht am Display
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!
Hi >#define LCD_DDADR_LINE2 40 >#define LCD_DDADR_LINE4 84 Sicher, das das stimmt? MfG Spess
Einfach mal beginnend Zeichen von A..Za..z0..9 fortlaufend in das Data-RAM reinschreiben, dann hat das Rätseln schnell ein Ende.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.