Forum: Mikrocontroller und Digitale Elektronik Atmega32: Problem mit zweiter Zeile vom HD44780 LCD Display


von Joscha I. (joscha)


Lesenswert?

Hi,

bei den Kalten Tagen hab ich mal wieder endlich ein bisschen Zeit gehabt 
mich mit dem AVR zu beschäftigen.
Ich hab mal den Code 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung 
1:1 für die LCD-Ansteuerung meiner zwei verschiedenen 2x16 Zeichen 
Displays verwendet. Funktioniert eigentlich alles ganz toll, bis auf 
dass die zweite Zeile nicht geht. Habe set_cursor(0,2) verwendet um in 
die zweite Zeile zu kommen, leider werden da allerdings ein paar Zeichen 
(jedoch nicht alle) von der ersten Zeile überschrieben und in der 
zweiten ist gar nichts. Mich wundert zudem auch, dass wenn ich den 
Kontrast aufdrehe die erste Zeile immer leicht schwarz wird, die zweite 
jedoch nicht, was ja bedeuten könnte, dass die untere Zeile nicht 
aktiviert ist. Im Forum hab ich hier auch was von irgendeinem Bug in der 
lcd_command() Funktion gelesen, der in der Display-Ansteuerung sein 
soll, hab auch die Zeilen ausgebessert, hat allerdings keinen Effekt 
gehabt, bis auf dass nichts mehr in der ersten Zeile überschrieben 
worden ist, allerdings wurde wieder nichts in der zweiten Zeile 
angezeigt.

Das Problem hab ich übrigens mit zwei verschiedenen 2x16 Zeichen 
Displays, ich vermute also dass das Problem irgendwo im Quellcode liegt.

Hat jemand ne Idee?

Vielen Dank im Voraus

Joscha

von 6643 (Gast)


Lesenswert?

Die Adressposition fuer die Daten der 2. Zeile ist ueblicherweise 0x40 
++

von Joscha I. (joscha)


Lesenswert?

Hi, danke für den Hinweis, ich hab jetzt mal Spaßeshalber alle 
Adresspositionen durchprobiert:
1
for(i=0x80;i<0xff;i++) {
2
  lcd_clear();
3
  lcd_command(i);
4
  lcd_data('x');
5
  _delay_ms(1000);
6
}

das 'x' wandert zwar super über die erste Zeile, ist dann nicht mehr zu 
sehen und irgendwann erscheint es wieder in der ersten Zeile und der 
ersten Spalte, ist wieder weg und bleibt dann stehen. Jedoch ist es nie 
in der zweiten Zeile zu sehen.

Stimmt vielleicht irgendwas mit der Initialisierung von dem Display 
nicht?

Viele Grüße

Joscha

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

... ja du musst dem Display beim Init sagen ob's ein oder mehrzeilig 
arbeiten soll.

Sascha

von Joscha I. (joscha)


Lesenswert?

Hallo,

habs endlich geschafft, musste nochmals lcd_command(0x28) aufrufen, dann 
gings plötzlich (warum auch immer). Also hab ich an die Funktion 
lcd_init() das noch angehängt:
1
void lcd_init(void)
2
{
3
 /* Programmzeilen aus dem Tutorial */
4
 ...
5
  // 4Bit / 2 Zeilen / 5x7
6
 lcd_command(0x28);
7
 ...
8
9
 /* Angehängter Aufruf: */
10
 lcd_clear();
11
 lcd_command(0x28);
12
}

Viele Grüße

Joscha

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.