Ich habe einen VHDL-Code zur Ansteuerung des LCD-Interface auf dem DE2-Board (Cyclone II Evaluationsboard) von Altera (bei Bedarf kann ich den Code posten - sind hier Anlagen möglich?).
Ich frage mich, wozu das nötig ist. Warum braucht es einen Code zur Ansteuerung des LCD? Warum wird nicht einfach das LCD angesteuert - also ohne irgendetwas anderes dazwischen?
Hier mal die Entity-Deklaration des LCD-Interface - vielleicht sagt das ja jemandem was...
entity LCD_Interface is port( Takt : in std_logic; -- 27 MHz reset : in std_logic; -- Asynchroner Reset COMMAND : in std_logic_vector( 5 downto 0 ); position : in std_logic_vector( 7 downto 0 ); zeichen : in std_logic_vector( 7 downto 0 ); Starten : in std_logic; -- Befehlsausführung starten busy : out std_logic; -- '1', wenn LCD_Interface beschäftigt LCD_Daten : out std_logic_vector( 7 downto 0 ); -- Datenbyte zum LCD LCD_RS : out std_logic ; LCD_R_W : out std_logic ; LCD_E : out std_logic ; LCD_ON : out std_logic ; LCD_BL : out std_logic --; -- TT1,TT2,TT3 : out std_logic; -- Debug -- state1 : out INIT1_STATE_typ; -- Debug -- state2 : buffer INIT2_STATE_typ; -- Debug -- S_tart : out std_logic -- Debug ); end LCD_Interface;
Viele Grüße,
Bir (das ist mein Spitz-Vorname, der Nachname ist lustigerweise auch ein Spitz-Nachname die EMail stimmt)
also... ich habe auf meinem spartan-3e ja ein lcd mit 4bit datenbus
nun frage ich mich wie ich es ansprechen muss... erstmal will ich nur was einfaches machen, wie z.b. das display leeren.
ich habe folgende pins: rs, rw, enable, db4,db5,db6 und db7
auf den urls habe ich initialisierungscodes gefunden, welche ich dann auch gesetzt habe...
meine frage gilt nun dem enable... muss ich den beim initialisieren des displays auch jedes mal 2 mal an und aus schalten? (einmal für das obere und einmal für das untere nibble?) also wenn ich z.b. db7 auf 1 habe dann den enable einmal ein und aus schalte, dann wird er wenn ich das nächste mal den enable wieder ein-ausschalte als db3 behandelt? oder verstehe ich hier etwas falsch?
Re: LCD-Interface
Moin.
Hab mir mal kurz die Asm-Quellen unter: https://www.sprut.de/electronic/pic/programm/lcd.htm -> https://www.sprut.de/electronic/pic/programm/lcd.zip angeschaut. Scheint so zu sein, dass Du erstmal davon ausgehst, dass du im 8 Bit Modus bist (bzw. in den 8Bit Modus gewechselt wird, falls der 4 Bit Modus aktiv war). Also die 1. vier Befehle im 8Bit Modus (ohne high/low) und die restlichen im 4Bit Modus. Schau Dir mal genau die Wartezeiten zwischen und vor den Befehl an (sind auch im ASM Code). Denke mal, falls man zu schnell ist, funktioniert es nicht.
Gruß DaMicha.
Re: LCD-Interface
Hallo, sowas hab ich letztes Jahr mal gemacht. Im Anhang findest du eine Lösung für die Initialisierung eines 4x20LCD mit dem HD44880 Controller (oder so ähnlich). Der Takt läuft in dem Beispiel mirt 40 MHz, der Enable war durch einen Taktteiler ( 40MHz Takt / 135000 ) erzeugt worden. Bei Fragen einfach mal melden...
Mhm. ich seh grad, dass du im 4 Bit Modus bist, da kann man das natürlich nicht ungeändert übernehmen. Dürfte aber kein Problem sein, das anzupassen.
Ich glaube ich habe ein grundsätzliches Verständnisproblem
Man kann ein LCD welches nur 4 Datenleitungen hat trozdem im 8bit Modus betreiben, indem man zuerst das obere Nibble setzt, dann enable einmal pulst , dann das untere Nibble setzt und dann enable wieder einmal pulst? Habe ich das richtig verstanden?
Dass ich das display initialisieren muss ist mir klar. Ich denke, ich habe einfach eine falsche Sequenz genommen... Die ist je nach Controller unterschiedlich oder?
Re: LCD-Interface
Hallo Mish.
Unter: https://www.sprut.de/electronic/lcd/index.htm#init steht es ja. Nach dem Power-ON-Reset ist der LCD Controller immer im 8 Bit Modus. Das ist er dann so lange, bis Du in den 4 Bit Modus gewechselt hast. Du musst also zum Anfang so tun als ob ein 8 Bit Interface vorhanden ist (nur ein Enable Puls pro Befehl) obwohl Du nur die oberen 4 Datenbits davon benutzt. Die unteren 4 Datenbit werden zum Umstellen in den 4 Bit Modus nicht benötigt! Bist Du dann im 4 Bit Modus, musst Du Low- und High-Nibble einzeln übertragen.
Gruß DaMicha.
Re: LCD-Interface
Prima! Dann hab ich es ja doch verstanden.
Mal schauen ob ich da was zu Stande bekomme
Und um das Display im 4 Bit Modus anzusprechen setze ich erst für alle Daten-Leitungen das high Nibble, danach pulse ich den enable, setze das low Nibble für jede Daten-Leitung und pulse nochmals den enable, korrekt?
Re: LCD-Interface
Moin Mish.
Zitat: mish
Und um das Display im 4 Bit Modus anzusprechen setze ich erst für alle Daten-Leitungen das high Nibble, danach pulse ich den enable, setze das low Nibble für jede Daten-Leitung und pulse nochmals den enable, korrekt?
Ich sag mal JA ;). Aber wie schon gesagt, um sicher zu gehen und bei der Sequenz und dem Timing keinen Fehler zu machen, würde ich mich an den ASM-Code halten.