Sei sulla pagina 1di 6

ETN-601 Guía de Laboratorio FPGA 3

EXPERIMENTO 3

CONTROLADOR - LCD

Objetivos:

- Implementar funciones y códigos VHDL de sistemas secuenciales


digitales aplicados a controlar y manipular mensajes en el LCD de la
tarjeta DE2

Desarrollo:

La tarjeta DE2 consta de un LCD de 16X2 caracteres cuyo código del chip
controlador es el HD44780, las hojas técnicas van adjuntas a esta guía.

7
CONTADOR
SISTEMA
SECUENCIAL

La siguiente tabla muestra la relación de los pines del LCD y los pines de la
FPGA a los cuales van conectados.

ROC-JLV 1/6
ETN-601 Guía de Laboratorio FPGA 3

Como se aprecia, EL LCD tiene pines tanto de DATOS como pines de


CONTROL, para poder gestionar los datos a desplegarse, se debe seguir el
siguiente orden de instrucciones:

ROC-JLV 2/6
ETN-601 Guía de Laboratorio FPGA 3

RS = 0
RW = 0
DATA = 38 hex

RS = 0
RW = 0
DATA = 38 hex

RS = 0
RW = 0
DATA = 38 hex

RS = 0
RW = 0
DATA = 38 hex

RS = 0
RW = 0
DATA = 06 hex

RS = 0
RW = 0
DATA = 0E hex

RS = 0
RW = 0
DATA = 01 hex

RS = 1
RW = 0
DATA = código de letras

Para mayor referencia de los comandos de control del LCD el alumno deberá
remitirse al manual técnico del LCD adjunto a esta guía.

ROC-JLV 3/6
ETN-601 Guía de Laboratorio FPGA 3

En el software Quartus II crear un nuevo proyecto, crear una nueva fuente


VHDL e introducir el siguiente código VHDL:

LIBRARY ieee;
USE ieee.std_logic_1164.all;

--CONTROLADOR DE LCD
--UMSA Facultad de Ingenieria, Carrera de Electrónica
--Electronica Digital I, ETN-601
--Docente: Ing. Roberto Oropeza

ENTITY LCD is
port (
--pines del LCD
LCD_DATA: out std_logic_vector(7 downto 0);
LCD_RW,LCD_E,LCD_RS,LCD_ON: out std_logic;
--pin del oscilador 25Mhz
clock:in std_logic);
end LCD;
---------------------------------------------------------------------------
architecture behavior of LCD is
--señales auxiliares------------------------------------------------------
signal contador: integer range 0 to 14:=0;
signal contador1: integer range 0 to 55001:=0;
begin

----------------------------------------------------------
--Proceso 1: Maquina de estados para el LCD
----------------------------------------------------------

proc_contador: process (clock)


begin
if clock'event and clock ='1' then
if contador1 = 55000 then
contador1 <= 0;
if contador = 14 then
contador <= 14;
else
contador <= contador +1;
--end if;
case contador is
when 0 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';
LCD_DATA <= X"38";
LCD_ON <= '1';
when 1 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';
LCD_DATA <= X"38";
when 2 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';
LCD_DATA <= X"38";
when 3 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';
LCD_DATA <= X"38";
when 4 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';
LCD_DATA <= X"06";
when 5 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';

ROC-JLV 4/6
ETN-601 Guía de Laboratorio FPGA 3

LCD_DATA <= X"0E";


when 6 => LCD_E <= '1';
LCD_RS <= '0';
LCD_RW <= '0';
LCD_DATA <= X"01";
when 7 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"45"; --letra "E"
when 8 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"54"; --letra "T"
when 9 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"4E"; --letra "N"
when 10 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"2D"; --letra "-"
when 11 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"36"; --letra "6"
when 12 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"30"; --letra "0"
when 13 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"31"; --letra "1"
when 14 => LCD_E <= '1';
LCD_RS <= '1';
LCD_RW <= '0';
LCD_DATA <= X"31"; --letra " "
when others => null;
end case;
end if;
else
contador1 <= contador1+1;
end if;
end if;
end process;

end behavior;

CONSIDERACIONES:

ROC-JLV 5/6
ETN-601 Guía de Laboratorio FPGA 3

- En este caso el divisor de frecuencia se lo implemento dentro del


proceso principal y no aparte como en el laboratorio 2. El valor 55000
corresponde a que según las hojas técnicas del LCD este requiere como
máximo 2 milisegundos para ejecutar una operación.

- El alumno notará que no es necesario implementar un comando para


hacer recorrer el cursor una posición a la derecha. El controlador del
LCD automáticamente avanza una posición.

PREINFORME

1. En base al programa vhdl de ejemplo, modificarlo y obtener el mismo


mensaje pero deslizable hacia la izquierda.

INFORME

1. Escriba sus conclusiones acerca de la implementación del ejemplo de la


guía y del preinforme.

2. Realice una simulación en el software MODELSIM-ALTERA del ejemplo


de la guía y verifique en las gráficas de tiempos el funcionamiento
correcto del sistemas, imprima una captura de imagen de la simulación
para el estado 10 y 11 de la maquina de estados finitos.

ROC-JLV 6/6