Forum: Mikrocontroller und Digitale Elektronik Atmega32 Initialisierung LCD HD44780 EA W164B-NLW 4*16 Zeichen


von Michael S. (misei_3216)


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

von MitLeser (Gast)


Lesenswert?

LCD-Library von P. Fleury.
Einfach mal googeln.

von foo (Gast)


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.)

von spess53 (Gast)


Lesenswert?

Hi

Initialisierung findest du hier:

http://www.lcd-module.de/deu/pdf/doma/4_16.pdf

MfG Spess

von Michael S. (misei_3216)


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.

von foo (Gast)


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?

von holger (Gast)


Lesenswert?

Ohne deinen Code zu sehen kann man dir kaum helfen.

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.

von Michael S. (misei_3216)


Lesenswert?

auf Dieser Grundlage:


Function Set
0 0 1 DL N F 0 0
DL: Interface 8-Bit/4-Bit lang
N: ein-/zwei-zeilig
F: 5x8/5x11 Darstellung

Ergibt sich doch dann 0x38

: Bearbeitet durch User
von foo (Gast)


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)

von Michael S. (misei_3216)


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

: Bearbeitet durch User
von foo (Gast)


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.

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.