Atmega32: Problem mit zweiter Zeile vom HD44780 LCD Display

OP #822248
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
OP
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
OP
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.