2.Zeile LCD nicht erreichbar

OP #1827233
Lesenswert?

Hallo

Ich habe mir von MyAVR ein Entwicklungsboard gekauft und selber 
zusammengelötet. Doch funktioniert dieses nicht so richtig. Wenn ich in 
die 2. Zeile springen will dann funktioniert es einfach nicht. Dasselbe 
gilt auch wenn ich keine Libs nutze sondern alles von Hand mache. Das 
heisst dass ich die Adresse 145 nutze, also irgendwo zweite Zeile, und 
ich die Position auslese dann zeigt er mir trotzdem 128 an(Ende erste 
Zeile). Aus meiner Sicht stimmt auch die Initialisierung da ich sie vom 
Datenblatt übernommen habe.

Ich weiss echt nicht was das Problem sein könnte. Auch alle 
Beispielprogramme funktionieren nicht.
Angehängte Dateien:
Gast #1827262
Lesenswert?

Hi

> Das heisst dass ich die Adresse 145 nutze, also irgendwo zweite Zeile, und
>ich die Position auslese dann zeigt er mir trotzdem 128 an(Ende erste
>Zeile). Aus meiner Sicht stimmt auch die Initialisierung da ich sie vom
>Datenblatt übernommen habe.

Wie kommst du auf diese Adressen?

Erste Zeile:  0x00...0x0F
Zweite Zeile: 0x40...0x4F

MfG Spess
OP #1827284
Lesenswert?

Das ist ein 2x16 Display. 145 ist nur ein Test-Wert und völlig erfunden. 
128 ist die höchste erreichbare Adresse, welche ich setzen kann. 
Allerdings stimmt deine Theorie dass die Adresse 64 der Anfang der 
2.Zeile sei nicht.

Wen ich versuche einen so langen String auszugeben dass er auf die 
nächste Zeile springen sollte dann fängt er auf der 1. Zeile vorne an.
Gast #1827299
Lesenswert?

Hi

>128 ist die höchste erreichbare Adresse, welche ich setzen kann.

Nein. Die höchste Adresse, die der 'Set DD-Ram Address'-Befehl zulässt, 
ist 127

>Allerdings stimmt deine Theorie dass die Adresse 64 der Anfang der
>2.Zeile sei nicht.

Keine Theorie, sondern dein Datenblatt S.10.

MfG Spess
OP #1827329
Lesenswert?

Das Problem hat sich von selbst erledigt!?!??? Ich habe das Projekt 
nicht geändert oder sonst etwas gemacht. Nur einmal neu kompliert und 
siehe da, es funktioniert. Ich habe mich jetzt immer wieder drangesetzt 
und versuchte alles mögliche und funktioniert hat es nie.

Wahrscheinlich hab ich immer zu weit gesucht.

Danke.
#1827330
Lesenswert?

Hast du deinen Code ohne Warnungen/Errors durch den Compiler gebracht?

Schau dir mal diesen Auszug aus lcd_init an
1
  lcd_write(0b00100000, 0);
2
  lcd_enable();
3
  _delay_ms(5);
4
  lcd_write(ob00101000, 0);

Achte auf die letzte Binärzahl. Das ist da vorne keine 0 sondern ein 
kleines o.
Was immer das auch macht, es macht auf jeden Fall nicht das Gewünschte, 
nämlich das Display auf 2 Zeilen zu setzen und damit gilt der SetFunc 
Befehl unmittelbar davor, der das LCD auf 1 Zeile setzt.

Ob ich jetzt noch rausfinden will, wieso das überhaupt compiliert, weiß 
ich noch nicht. Auf jeden Fall solltest du noch den Compiler Output 
studieren, denn ich denke das wird nie und nimmer durch den Compiler 
laufen und in Wirklichkeit läuft bei dir alter Code auf dem µC. Der 
Compiler sieht ob00101000 als Name einer Variablen an, die nicht 
existiert.
OP #1827357
Lesenswert?

Allerdings war das Problem dass AVR-Studio die Header erst in der neuen 
Version kompliert wenn sie gespeichert sind. Dann hatte ich 
wahrscheinlich immer die alte Version des Headers drin und die neue 
Version hatte eine ganz neue Version der Initialisierung drin. Die alte 
funktionierte natürlich nicht, aber diese wurde immer verwendet bis ich 
dann per Zufall das bemerkte. Das wusste ich auch nicht und es tut mir 
Leid.

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