4 x 20 HD44780 ansteuern

Gast #1640113
Lesenswert?

Hallo zusammen,

Habe mir ein LCD bei Embedit gekauft:
http://shop.embedit.de/product__250.php.

Angeschlossen an einem Atmega 32 , an Port C, 4 - Bit Modus.
angesteuert wird/soll es mit den LCD_routines die es hier auf der Seite 
gibt.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

Nun die Probleme:

WAS und WIE muss ich alles in der routines.c ändern damit dies auf 4 x 
20 zeichen läuft? Als Standart ist ja  2x16 zeichen in den routines.c 
vorgegeben.

lcd_init:
1
// 4Bit / 2 Zeilen / 5x7
2
   lcd_command(0x28);

set_cursor:
1
  switch (y) {
2
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
3
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
4
    case 3: tmp=0x80+0x10+x; break;    // 3. Zeile
5
    case 4: tmp=0x80+0x50+x; break;    // 4. Zeile
6
    default: return;                   // für den Fall einer falschen Zeile


Ich denke dass man diese Werte speziell für ein 4x20 LCD ändern muss, 
oder sind es andere Dinge oder sogar noch etwas?

MFG
Gast #1640307
Lesenswert?

ei weiteres Problem ist dass die obere linke ecke ( 1&2 Zeile bis 
Zeichen 8) die Hälfte weniger an Kontrast haben... wie kann das sein?

habe es hinbekommen dass wenn ich set_cursor (0,4) schreibe, auch an 
pos.0 in zeile 4 geschrieben wird.

das ganze habe ich so geändert:
1
  switch (y) {
2
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
3
    case 2: tmp=0xC0+0x00+x; break;    // 2. Zeile
4
    case 3: tmp=0x80+0x14+x; break;    // 3. Zeile
5
    case 4: tmp=0xC0+0x14+x; break;    // 4. Zeile
6
    default: return;                   // für den Fall einer falschen Zeile

die 0x80 steht für die zeilen 1 und 3 , 0xC0 für 2 und 4!

nun steht noch mein Problem mit dem Kontrast aus. Vielleicht hat das mit 
dem lcd_command damit zu tun. was auch noch komisch ist dass manchmal 
einfach zeichen beim anzeigen vergessen werden verdreht sind oder in an 
falscher position angezeigt werden.

bitte um ratschläge!
#1640321
Lesenswert?

Yogi schrieb:
> ei weiteres Problem ist dass die obere linke ecke ( 1&2 Zeile bis
> Zeichen 8) die Hälfte weniger an Kontrast haben... wie kann das sein?

Das kann zb sein, wenn du in einer Endlosschleife ständig das Display 
löscht und neu beschreibst.


> nun steht noch mein Problem mit dem Kontrast aus. Vielleicht hat das mit
> dem lcd_command damit zu tun. was auch noch komisch ist dass manchmal
> einfach zeichen beim anzeigen vergessen werden verdreht sind oder in an
> falscher position angezeigt werden.

Das klingt eher nach einem Timing Problem.

> bitte um ratschläge!

Nimm die Fleury Lib.
Die kann man besser anpassen und viele Leute benutzen die für alle 
möglichen, unterschiedliche Displays.
Gast #1640358
Lesenswert?

Hi Klaus,

ich bekomm auf dem Display alles angezeit was ich möchte jedoch habe ich 
noch die genannten Fehler drin...

Datenblatt hab ich schon durchgeforstet sonst wüsste ich ja nocht die 
adressen der Zeilen.
#1640365
Lesenswert?

in meiner DCF-Uhr verwende ich auch die LCD Routine aus dem Tutorial. 
Bei mir sieht die Anpassung an das 4x20 Display so aus:
1
switch (y)
2
  {
3
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
4
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
5
    case 3: tmp=0x80+0x14+x; break;    // 3. Zeile
6
    case 4: tmp=0x80+0x54+x; break;    // 4. Zeile
7
    default: return;                   // für den Fall einer falschen Zeile
8
  }
funktioniert bei mir perfekt.

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