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