Forum: Compiler & IDEs 4 x 20 HD44780 ansteuern


von Yogi (Gast)


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

von ... .. (docean) Benutzerseite


Lesenswert?

normalerweise gar nichts....

Ich verwende meistens die lib von 
http://homepage.hispeed.ch/peterfleury/avr-software.html#libs

von Yogi (Gast)


Lesenswert?

bist du dir ganz sicher?

von Yogi (Gast)


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!

von Karl H. (kbuchegg)


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.

von Klaus W. (mfgkw)


Lesenswert?

Ansonsten gehen die Adressen aus dem Datenblatt des LCD hervor.
Das darf gelesen werden...

von Yogi (Gast)


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.

von Johannes M. (johannesm)


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.

von Klaus W. (mfgkw)


Lesenswert?

ok, und für den Rest muß man Quelltext sehen (falls du z.B. den
Tipp bzgl. ständigem Neusschreiben beachtet hast, mal
sicherheitshalber alles Delays verzögert und alle Verbindungen
zuverlässig sind).
Ohne Quelltext wird dir niemand mehr sagen können.

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.