Codice VHDL per LCD 16x2 ?

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

Codice VHDL per LCD 16x2 ?

Postby Altero » 31 Jan 2013, 20:33

Ciao a tutti, spero tutto bene.

cè qualcuno che mi potrebbe dare una mano per scrivere un codice vhdl per la gestione di un lcd 16x2 classico?

è la prima volta che mi imbatto su questo tipo di controller e non so dove sbattere la testa anche perchè non riesco a trovare nulla di efficiente e funzionale.

la mia entity dovrebbe avere questi ingressi/uscite.

Code: Select all

ENTITY lcd_controller IS
PORT ( Clk           : IN STD_LOGIC;
           Reset        : IN STD_LOGIC;
           LCD_DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
           LCD_RW,   LCD_EN, LCD_RS : OUT STD_LOGIC;
              );
END lcd_controller;


spero che qualcuno possa darmi una mano.

L'unica cosa che so è si dovrebbe creare una specie di state machine per la gestione della temporizzazione.

Vi ringrazio in anticipo.

Buona serata
Altero
 
Posts: 46
Joined: 20 Apr 2012, 09:33

Re: Codice VHDL per LCD 16x2 ?

Postby flz47655 » 01 Feb 2013, 00:03

Devi partire dal datasheet dell'LCD, se non ce l'hai prova a cercare quello del chip montato sullo schermo (es. HD44780)
Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Codice VHDL per LCD 16x2 ?

Postby legacy » 01 Feb 2013, 10:19

mah, non ho ben capito cosa non ti sia chiaro

sulla fpga hai un SoC ? se si la questione si riduce a
1) fare glue logic per mappare in memoria l'lcd -> LCD_EN
2) fare glue logic per descrivere se quanto transita sul bus dati e' "dato" oppure "comando" -> LCD_RS
3) gestire il bus asincrono garantendo i tempi di propagazione che ti dice il datasheet -> LCD_DATA
4) propagare il reset dal main_reset, al reset del sistema si resetta anche l'LCD -> LCD_RESET

sulla mia cadreghina fpga ho una CPU, e gli ho mappato l'lcd nel suo spazio indirizzi
0x1000 data
0x1002 ctrl

se al lato software CPU scrivo in *(0x1000) sto buttando un char sull'LCD e lui me lo visualizzera' scrollando come da impostazioni
se invece scrivo in *(0x1002) sto buttando sul bus dati un comando per gestire l'lcd

al lato *HDL ho un costrutto when, associo LCD_EN ad entrami, se cpu.addr == 0x100x -> LCD_EN=0, altrimenti LCD_EN=1
faccio pura logica not per LCD_RS, se cpu.addr.bit1 == 0 -> LCD_RS=0, altrimenti LCR_RS=1
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Codice VHDL per LCD 16x2 ?

Postby Altero » 01 Feb 2013, 11:35

Io non ho Soc con micro a bordo della fpga,
devo realizzare il controllore completamente hardware a partire dal timing realizzando uno state machine.
cmq mi sto già documentando e seguendo le indicazioni del datasheet sto realizzando la parte che serve alla inizializzazione del lcd.

cc
Altero
 
Posts: 46
Joined: 20 Apr 2012, 09:33

Re: Codice VHDL per LCD 16x2 ?

Postby Altero » 01 Feb 2013, 12:31

l'lcd è HD44780 e lo devo interfacciare alla fpga.
non cè un micro e devo pilotarlo solamente con l'fpga.
la gestione del timing è affidato ad una macchina a stati finiti.

per capirci: ad esempio quando pigio un pulsante (es n°1) sulla scheda devo visualizzare sul display "Pulsante premuto n° 1".
oppure altre stringhe che devo a priori memorizzare sulla memoria della fpga.

non so se sono stato chiaro.
Altero
 
Posts: 46
Joined: 20 Apr 2012, 09:33


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 3 guests

cron