Forum: Mikrocontroller und Digitale Elektronik LCD Display zeigt keine Zeichen an (PIC18, HD44780)


von Dominic J. (jossiagee)


Angehängte Dateien:

Lesenswert?

Hallo Community

Ich habe mir vor einiger Zeit ein LCD Display des Typen J204A mit einem 
HD44780 Controller gekauft. (4x20 Zeichen) Langsam verzweifle ich 
hier...

Ich programmiere das Display mit einer 8bit Datenleitung (wenn es dann 
mal funktioniert, werde ich es mit 4bit versuchen) und dem RW 
(Read/Write) auf Masse, also das nur auf das Display geschrieben werden 
kann. EN und RS sind am PORTE angeschlossen und die Datenleitungen am 
PORTD. Ich verwende den PIC18F4520.

Die verwendeten Instruktionen findet ihr in diesem PDF auf Seite 6:
https://www.mikrocontroller.net/attachment/57981/HD44780.pdf
Wenn das Display mit 5V gespiesen wird, sind die 1. und 3. Zeile 
komplett eingeschaltet, während die 2. und 4. aus sind. Ich meine 
gelesen zu haben, dass das so sein soll.

Die Initialisierung sollte eingentlich funktionieren, da das Display 
seinen Inhalt beim Starten des Programmes "cleared".

Ich habe es mit dem Code im Anhang geschafft, dass sich der Cursor 
richtig auf dem Bildschirm bewegt. Doch sobald ich die Stelle mit dem 
Datenbyte in der Funktion writechar(); hinzugefügt habe, klappte es 
nicht mehr und das Display flackerte beim Einschalten nur ganz kurz und 
stellte anschliessend direkt wieder das Standardbild dar. (1. und 3. 
Zeile komplett aktiviert, 2. und 4. nicht)

Ich habe ein Video in YouTube hochgeladen, das zeigt was passiert. 
Zuerst sieht man, dass es den Cursor richtig verschiebt (ohne dabei zu 
versuchen, ein Zeichen zu schreiben), am Schluss sieht man dass es kurz 
flackert aber nichts darstellt. (Aufgrund des Zeichens, das geschrieben 
werden soll)
http://youtu.be/_Hk3RH6MvbE
(Nicht verwundern wegen des Cursors, sieht etwas komisch aus wenn er 
sich so schnell verschiebt)

Irgendetwas mache ich mit dem Schreiben eines Zeichens falsch. Der 
Vorgang sollte nach meiner Vorstellung folgender sein:

-RS=1 und EN=0  (RS auf 1 um Daten zu schreiben, EN -> Nicht enable)
-Daten auf PORTD schreiben (ASCII Code)
-kurz warten
-EN=1 (Enable auf 1 -> Daten einlesen)
-kurz warten
-EN=0 (Enable auf 0 -> Daten fertig eingelesen)
-kurz warten

Falls ihr weitere Infos braucht, ich hab noch reichlich :P
Danke schon mal im Voraus!

: Bearbeitet durch User
von Werner M. (Gast)


Lesenswert?

Dominic J. schrieb:
> Irgendetwas mache ich mit dem Schreiben eines Zeichens falsch.

Warum positionierst du vor jeder Ausgabe eines Zeichens den Cursor? 
Überlass das erstmal dem Controller.

Und wozu sind die "endlosen" En-Pulse gut?

von Ottmar K. (wil1)


Lesenswert?

Hallo Dominic

Schau Dir mal diese Seiten an:
4x20 Display  allgemein
 [http://www.sprut.de/electronic/lcd/index.htm#4x20]

Initialisierung und Ausgabe HD44780-LCD
 [http:///www.sprut.de/electronic/pic/programm/lcd.zip]
 die Initialisierung und die Ausgabe sind zwar in Assembler geschrieben, 
müßten sich aber dennoch leicht in C-Code umsetzen lassen.

mfG Ottmar

von Klaus (Gast)


Lesenswert?

@Dominic

Laut Datenblatt hast du keine Wartezeiten
bei der Initialisierung eingehalten.

[ Wait more than 15ms ]
[after Vdd rises to 4.5v]
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Can't check BF before this 
instruction
0 0 0 0 1 1   * * Function set (8-bit interface)
[Wait more than 4.1ms]
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Can't check BF before this 
instruction
0 0 0 0 1 1   * * Function set (8-bit interface)
[Wait more than 100us]
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Can't check BF before this 
instruction
0 0 0 0 1 1   * * Function set (8-bit interface)
BF can be checked after the following
instructions. When BF is not checked,
the waiting time between instructions
is longer than the execution time.
(See Instruction set)

Ersetze mal diese Zeilen in deiner Init.


    writecmd(0x30);
     __delay_ms(5);
    writecmd(0x30);
    __delay_ms(5);
    writecmd(0x30);  //8bit Init, 2 Zeilen, 5*7
    __delay_us(100);

von Somebody123 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

habe mal für einen RFM12 Testempfänger/Sender eine Ansteuerung für einen 
PIC24 im 4-Bit-Mode gemacht. Aber 8Bit und PIC18 sollte leicht umzubauen 
sein.

Eventuell kannst du dir einfach nur die initroutine klauen.

Ich hänge das mal dran, vielleicht hilfts ja.
Garantie gibts keine, ist nur mit dem Display von Conrad getestet (steht 
im c-file), das war so ein Sonntag-Nachmittags Ding ;-).

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.