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