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
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?
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
@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);
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.