Forum: Mikrocontroller und Digitale Elektronik HD44780 Probleme


von Luke (Gast)


Lesenswert?

Hallo zusammen!

Ich habe ein LCD (2x16) von Electronic Assembly mit einem HD44780 
Controller an einem Atmega32 im Einsatz. Die Routinen zur Ansteuerung 
habe ich aus dem AVR-Tutorial 1:1 übernommen. Aus irgendeinem Grund 
bekomm ich aber nie mehr als die ersten 8 Zeichen in der ersten Zeile 
angezeigt. bei "Hello World" also nur "Hello Wo". Ich finde den Fehler 
einfach nicht. Woran kann das liegen?

Viele Grüße,
Luke

von *.* (Gast)


Lesenswert?

Der Speicher des LCD ist anders organisiert. Schreibe ihn mal komplett 
mit sinnvollen Zeichen voll und rechne daraus zurück welcher Buchstabe 
an welcher Adresse steht. Das Bit für Zweizeilen-Initialisierung ist ja 
hoffentlich gesetzt.

von Luke (Gast)


Lesenswert?

Ich habe den Cursor auf Auto Increment, der müsste nacheinander alle 
Zeichen aufs Display schreiben, er schreibt aber nur die ersten 8.

Die Initialisierung sieht folgendermaßen aus:

           rcall  delay5ms
           dec  temp3
           brne powerupwait
           ldi temp1, 0b00000011
           out PORTD, temp1
           rcall lcd_enable
           rcall delay5ms
           rcall lcd_enable
           rcall delay5ms
           rcall lcd_enable
           rcall delay5ms
           ldi temp1, 0b00000010
           out PORTD, temp1
           rcall lcd_enable
           rcall delay5ms
           ldi temp1, 0b00101000
           rcall lcd_command
           ldi temp1, 0b00001100
           rcall lcd_command
           ldi temp1, 0b00000100
           rcall lcd_command

Ich komme einfach nicht dahinter...

von *.* (Gast)


Lesenswert?

Schreibe mal statt "Hello World" einen String der 80 Zeichen lang ist.

von Luke (Gast)


Lesenswert?

Sorry, ich weiß (noch) nicht wie ich einen 80 Zeichen String schreibe in 
Assembler. Wie gesagt, ich habe das Tutorial auf dieser Seite 
durchgearbeitet, bzw, bin grade bei dem Display angekommen. Ich lese 
parallel auch schon andere Beiträge in diesem Forum, bin aber noch nicht 
weiter gekommen. Ich würde mich über jede Unterstützung sehr freuen!!

von Sebastian M. (izaseba)


Lesenswert?

Luke wrote:
> Sorry, ich weiß (noch) nicht wie ich einen 80 Zeichen String schreibe in
> Assembler.

Hallo, schau mal weiter im Tutorial unter Speicher/Flash-ROM

Gruß Sebastian

von Luke (Gast)


Lesenswert?

Das hilft mir im Moment leider überhaupt nicht weiter. Ich verstehe auch 
(noch) nicht was es bringen soll, den Speicher des Displays mit einem 80 
Zeichen-String voll zu schreiben. Das tue ich doch auch wenn ich die 
Zeichen nacheinander (so wie im Tutorial) schreibe oder?

von Sonic (Gast)


Lesenswert?

Du beschreibst das Display vermutlich zu schnell, füge mal zwischen den 
Bytes Pausen ein, dann wird's wohl klappen! Wenn du das Datenblatt des 
Displays gründlich studierst solltest du das Busy-Bit (Umschaltung von 
R/W) abfragen können, was hierzu sehr nützlich ist.

von *.* (Gast)


Lesenswert?

Ich vermute halt das es ab dem achten Zeichen wo anders im Datenram 
weitergeht. In dies Fall würde ich das gesamte RAM vollschreiben und von 
den Zeichen, die dann auf den jetzt noch leeren Plätzen des Displays 
stehen, auf die Adresse zurückschließen. Aber man hinterfragt ja lieber 
ewig als eine Minute in copy&paste zu investieren ;)

von Elektrikser (Gast)


Lesenswert?

Vielleicht hilft dir das weiter um das Display besser zu verstehen:
http://www.ulrichradig.de/site/infos/pdf/LC.pdf

Gruß Elektrikser

von Sebastian M. (izaseba)


Lesenswert?

Luke wrote:
> Das hilft mir im Moment leider überhaupt nicht weiter. Ich verstehe auch
> (noch) nicht was es bringen soll, den Speicher des Displays mit einem 80
> Zeichen-String voll zu schreiben.

So ein HD44780 kann maximal 80 Zeichen verarbeiten, egal wieviele 
Zeichen
Dein Display hat.

Die Adressen müssen aber nicht durchgängig sein !
Wenn Du ein String von 80 Zeichen ausgibst, schreibst Du den Speicher 
voll und dann schaust Dir mal an was auf Deinem Display draufsteht.

Gruß Sebastian


von Michael U. (Gast)


Lesenswert?

Hallo,

hat das Ding wirklich einen HD44780 drauf oder einen kompatiblen?
Welcher Displaytyp ist es?

Electronic Assembly bietet ja mehrere 2x16 an.


@*.*:

durchaus Zustimming. Zumal diese Übung ihm mehr Verständnis der 
Programmierung und der LCD-Display-Controller bringen würde, als einen 
Ratschlag einzubauen, der dann geht, ohne verstanden zu haben, was man 
da eigentlich gemacht hat.

Gruß aus Berlin
Michael

von Sonic (Gast)


Lesenswert?

Wenn du ein standard-Teil hast sollte die erste Zeile bei Adresse 0x80 
anfangen und schreibt bis 0x8F, wobei hier die letzten 8 Zeichen nicht 
sichtbar sind. Die 2. Zeile fängt dann bei 0xC0 an und geht bis 0xCF, 
wieder die letzten 8 Zeichen nicht sichtbar. Wo genau die Startadressen 
für die Zeilen sind steht sicher im Datenblatt.

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.