Atmega32 Initialisierung LCD HD44780 EA W164B-NLW 4*16 Zeichen

OP #4181319
Lesenswert?

Hallo,


 alle Informationen im Überblick:

CPU: Atmega32
Controller: HD44780
LCD: EA W164B-NLW 4*16 Zeichen
Bus: 4 bit

ich versuche eben diese kombination zum schreiben zu bringen.

Ich suche in der Kleinen Anleitung und im Netz vergeblich die 
Initialisierungsinformationen bezüglich der 4*16 Initialisierung.
Kann mir da jemand Helfen? Was und wann muss zu beginn Initialisiert 
werden? Bisweilen werden die 1. und die 3. Zeile angezeigt. Allerdings 
nur Zahlen. Buchstaben werden als Zeichen dargestellt. Das liegt 
vermutlich daran da ich nur die Initialisierungsinformationen für ein 
zwei zeiliges Display besitze.
Im Tutorial habe ich auch keine Informationen über 4 x 16 finden können.

Vielen Dank
LG
Gast #4181329
Lesenswert?

Michael S. schrieb:
> Initialisierungsinformationen bezüglich der 4*16 Initialisierung.
> Kann mir da jemand Helfen? Was und wann muss zu beginn Initialisiert
> werden? Bisweilen werden die 1. und die 3. Zeile angezeigt.

Mit hoher Wahrscheinlichkeit nicht auf zweizeilig eingestellt. 4x... 
Displays sind intern zweizeilig, dabei bilden 1. und 3. Zeile intern 
eine lange erste Zeile. Wenn also nur die an sind, steht das Display auf 
seinem Default - einzeilig

> Im Tutorial

Welches?

Ich hatte mit der Doku hier jedenfalls keine Probleme, ein 4x20 komplett 
anzusteuern:
http://sprut.de/electronic/lcd/index.htm#befehle
(ich wollte die fertige Lib aus Gründen auch nicht benutzen.)
OP #4181404
Lesenswert?

wenn ich das aus den Datenblättern richtig lese. Muss ich eine
0x20 senden um im 4 bit Modus 2 Zeilen und 5 x 8 Zeichen darzustellen. 
Nur so zeigt er Buchstaben nicht correkt, auf der 1. Zeile die Zahlen 
zumindest richtig an. 2. und 4. sind aus. Auf der 3. werden auch die 
zahlen nicht correkt dargestellt.
Gast #4181410
Lesenswert?

Michael S. schrieb:
> wenn ich das aus den Datenblättern richtig lese. Muss ich eine
> 0x20 senden um im 4 bit Modus 2 Zeilen und 5 x 8 Zeichen darzustellen.

Wieso? 0x20 bedeutet Function Set, 4 bit, einzeilig, 5x8.
Guck in die Liste bei dem Link den ich geschickt habe.

Was soll überhaupt bedeuten dass die Buchstaben durch "Zeichen" 
dargestellt werden? Hört sich eigentlich richtig an. Meinst du 
Sonderzeichen? Was gibst du aus und was siehst du stattdessen?

Was siehst du in deiner dritten Zeile anstelle von Ziffern?
Gast #4181430
Lesenswert?

Michael S. schrieb:
> Ergibt sich doch dann 0x38

Nein 0x28. DL=0 steht für 4 Bit, steht doch unten. Mit 0x38 aktivierst 
du auch gleichzeitig 8 Bit Modus.

(Nicht, dass ich nicht ohnehin 8 Bit empfehlen würde, weil 
unempfindlicher gegen den Verlust eines einzelnen Enable-Pulses, der dir 
bei 4 Bit dauerhaft die Kommunikation versaut)
OP #4181450
Lesenswert?

Hallo,


foo schrieb:
> Nein 0x28. DL=0 steht für 4 Bit, steht doch unten. Mit 0x38 aktivierst
> du auch gleichzeitig 8 Bit Modus.

Hm, so hatte ich das zu Beginn auch. Doch hier habe ich keinen Erfolg. 
Vielleicht sollte ich doch noch einmal an der Hardware ansetzen. Ja acht 
bit gefallen mir ja auch besser.



holger schrieb:
> Zu schnell sollte man so ein Display nicht ansteuern.
> Und bei ATMega32 und evtl. PORTC kommt noch ein
> aktives JTAG in Frage für Fehler.

Was meinst du ist zu schnell, CPU läuft mit intern 8MHz?
Betrieben an PortB von daher kommt JTAG denk ich nicht in Frage


foo schrieb:
> Was soll überhaupt bedeuten dass die Buchstaben durch "Zeichen"
> dargestellt werden? Hört sich eigentlich richtig an. Meinst du
> Sonderzeichen? Was gibst du aus und was siehst du stattdessen?

Ich schicke derweilen 0123456789 und ausgegeben werden 012389:;45
Buchstaben werden in SOnderzeichen gezeigt.


Danke euch und Lg
Gast #4181465
Lesenswert?

Michael S. schrieb:
> Was meinst du ist zu schnell, CPU läuft mit intern 8MHz?

Das Display braucht ne bestimmte Zeit um die Befehle, die du ihm 
schickst, zu verarbeiten. Es gibt zwei Wege das zu handhaben:

- entweder du liest das Busy-Flag aus. Dazu brauchst du Lesezugriff aufs 
Display. Je nach Verschaltung ist das unmöglich, z.b. falls DB0-7 an 
einem Schieberegister hängen, um I/O-Pins zu sparen.

- es gibt garantierte Maximalzeiten, in denen ein bestimmter Befehl 
fertig ist. D.h. du schickst den Befehl und machst ein entsprechend 
langes _delay_us. Dann hat es den Befehl sicher verarbeitet und ist 
definitiv bereit für den nächsten Befehl. Rat mal auf welcher Webseite 
die benötigte Zeit pro Befehl steht ;)

Michael S. schrieb:
> Ich schicke derweilen 0123456789 und ausgegeben werden 012389:;45
> Buchstaben werden in SOnderzeichen gezeigt.

Hast du DB3 und DB2 vertauscht? Das würde dazu passen und auch erklären, 
warum deine Initialisierung nicht klappt.

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