Forum: Mikrocontroller und Digitale Elektronik LCD 2x16 Verständnisproblem


von norticum (Gast)


Lesenswert?

Hallo!

In diesem Forum wurde das Thema schon oft behandelt. Meist ging es um 
die eigentliche Initialisierung. Was mich jedoch interessiert ist der 
Programmablauf ab Initialisierung. Ich habe an einen HCS08 ein 2x16 
Zeichen LCD mit HD44780 angeschlossen. Das Display arbeitet derzeit noch 
im 8Bit Modus (ASM Coding) um die Sache besser zu verstehen. Meine 
Initialisierung funktioniert schon mal. Ich habe nach dem "Entry mode 
set" welches die Initialisierung abschließt, Cursor anzeigen und die 
Position blinken lassen. Was mach ich danach? Kann ich jetzt schon 
Zeichen senden? Wie ist das genau mit dem CGRAM/DDRAM? Ist es ein Befehl 
um die Startadresse zu programmieren? Muss ich das bei jedem 
Schreibzugriff machen?

Ich schreib mal den Ablauf hier rein. Vielleicht könnte jemand das dann 
vervollständigen?:

Power on
delay mor than 15ms
8Bit modus
Befehl senden RS,RW low
Enable Impuls
delay mor than 4ms
8 Bit modus
Befehl senden RS,RW low
Enable impuls senden
delay more than 100us
8 Bit modus
Befehl senden RS,RW low
Enable impuls
delay
Function set
Befehl senden RS,RW low
Enable impuls
delay
Display off
Befehl senden RS,RW low
Enable impuls
delay
Display clear
Befehl senden RS,RW low
Enable impuls
delay
Entry mode set
Befehl senden RS,RW low
Enable impuls
delay

Ab hier kann man dann das "Busyflag" abfragen.

schönen Samstag noch,

norticum

von Klaus (Gast)


Lesenswert?

Was mach ich danach?
Routinen schreiben für die Ausgabe von einzelnen Charakter Zeichen.
Eine Routine die einen ganzen Text ausgibt.
Interessant is auch den  Akkuinhalt als ASCII-Code auf dem Display 
auszugeben usw.

>Kann ich jetzt schon Zeichen senden? JA

>Wie ist das genau mit dem CGRAM/DDRAM?
CGRAM brauchst nur wenn du selbst definierte <zeichen verwenden 
möchtest.
Also nur 8 Zeichen.
Auf DDRAM gibt man die Zeichen aus. Ist Quasi die sichbare Fläche deines 
LCD-Displays.
Also jedes Zeichen oder Pixel im DDRAM wird auch direkt auf dem LCD 
sichtbar.


>Ist es ein Befehl um die Startadresse zu programmieren? JA

Muss ich das bei jedem Schreibzugriff machen? JA / NEIN

Grundsätzlich muss du unterscheiden zwischen Befehle und Daten.
Also RS Low = Befehle und RS High = Daten.

Bsp. Um den Cursor zu positionieren musst du dem LCD die Adresse 
einstellen. Also DD RAM Address Set per Befehl
Daten werden dann anschließend mit RS = High  und EN = High an den Port 
gelegt und mit fallender Flanke von EN vom LCD übernommen.

Viel Spaß beim Proggen

von norticum (Gast)


Lesenswert?

Hallo Klaus!

Danke für Deine Antwort!

Das heist ich sollte jedesmal bevor ich "Text" an das LCD übergebe die 
Startadresse per Befehl (bei allen LCD 00x80) einstellen.

Ich werde das gleich mal in eine Unterroutine umsetzen und mich nochmal 
hier her begeben.

Was ich noch dazu sagen möchte ist, daß ich ja eine funktionierende LCD 
Routine von einem Freund habe. Die ist für 4Bit Ansteuerung geschrieben 
worden. Da ich aber selbst die Thematik verstehen möchte, will ich 
eigentlich selbst etwas "komponieren". Nur der Verständnis halber. Ich 
will einfach ganz genau wissen was auf meiner "Maschine" abgeht.

Danke nochmal!

Gruß,

norticum

von Karl H. (kbuchegg)


Lesenswert?

norticum schrieb:
> Hallo Klaus!
>
> Danke für Deine Antwort!
>
> Das heist ich sollte jedesmal bevor ich "Text" an das LCD übergebe die
> Startadresse per Befehl (bei allen LCD 00x80) einstellen.

Das kommt drauf an.
Wenn du keine Startadresse setzt, werden die nächsten Buchstaben einfach 
dahinter ausgegeben.
Wenn es das ist was du willst, dann brauchst du nichts tun.
Wenn du aber an einer anderen Stelle weiter machen willst, dann musst du 
die Startadresse setzen.

> Was ich noch dazu sagen möchte ist, daß ich ja eine funktionierende LCD
> Routine von einem Freund habe. Die ist für 4Bit Ansteuerung geschrieben
> worden.

Der Unterschied 4-Bit / 8-Bit besteht ja normalerweise nur in 2 
Funktionen. Die eine gibt ein Kommando aus, die andere gibt ein Zeichen 
ins DDRAM aus.
Alles aufwärts davon (also alle Funktionen die darauf aufbauen) sehen 
diesen Unterschied gar nicht. Einen Text gibt man in beiden Fällen ja 
völlig gleich aus:

  Solange Zeichen vorhanden
     Gib Zeichen aus

Erst für die Funktionalität 'Gib Zeichen aus' ist 4-Bit/8-Bit ein Thema. 
Aber die Textausgabe ist davon unberührt.


> Da ich aber selbst die Thematik verstehen möchte, will ich
> eigentlich selbst etwas "komponieren".

Dann tus doch :-)

von Klaus (Gast)


Lesenswert?

Der kleine unterschied zwischen 4-Bit und 8-Bit Mode ist, dass im 4-Bit 
Mode einen Port benötigst anstatt 2.

Im 4-Bit Mode musst zweimal senden pro Befehl/Daten also Highbyte zu 
erst und danach das Lowbyte.
Vorausetzung ist das Du das LCD entsprechend im 4-Bit Modus 
angeschlossen hast.
Hier mal ein Bsp. wie man es machen könnte:

   LCD_Port                   DATA     P2
   LCD_EN                     BIT      LCD_Port.4
   LCD_RW                     BIT      LCD_Port.5
   LCD_RS                     BIT      LCD_Port.6
   LCD_Backlight              BIT      LCD_Port.7
   LCD_D4                     BIT      LCD_Port.0
   LCD_D5                     BIT      LCD_Port.1
   LCD_D6                     BIT      LCD_Port.2
   LCD_D7                     BIT      LCD_Port.3

von norticum (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Klaus!



Vielen Dank nochmal!

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.