VHDL-Forum - Anfänger

LCD-Interface

LCD-Interface

Hi!

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)

Re: LCD-Interface

ich beiss mir auch gerade am lcd die zähne aus...

ich hab hier mal ein paar url gefunden und gelesen...
https://www.sprut.de/electronic/lcd/index.htm
https://www.avrbeginners.net/interfacing/44780_lcd/4bit.html
https://www.klaus-leidinger.de/mp/Mikrocontroller/LCDtest/LCDboard.html

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.





lcd_init.vhd (4 kByte)
anzeigen - speichern
Datei wurde schon 748-mal heruntergeladen.

Re: LCD-Interface

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.


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.

Viel Erfolg
DaMicha.