RELOJ Y CONTADOR CON TARJETA SPARTAN.
Raul RiveraTrabajo23 de Abril de 2016
16.213 Palabras (65 Páginas)236 Visitas
[pic 1][pic 2]UNIVERSIDAD NACIONAL DE SAN AGUSTIN
INGENIERIAS DE PRODUCCION Y SERVICIOS
[pic 3]
[pic 4]INGENIERÍA ELECTRÓNICA
MICROELECTRONICA
PROYECTO FINAL
ALUMNO:
- RIVERA VERA RAUL PAOLO CUI: 20110825
AREQUIPA-2016
INDICE
CONTADOR Y RELOJ VISUALIZADOS EN LCD…………………………………3
Descripción del proyecto………………………………………..…………….3
Desarrollo de la Programación en general………………………………………….3
ANEXOS…………………………………………………………………………….......5
Programación……………………………………………………………………5
Componente 1……………………………………………………………………9
Componente 2…………………………………………………………………..22
Conexión con la placa spartan3e……………………………………………….24
Datasheet del LCD……………………………………………………………...25
Observaciones………………………………………………………………………..25
Conclusiones …………………………………………………………………………25
Bibliografía…………………………………………………………………………….26
CONTADOR Y RELOJ VISUALIZADOS EN LCD
Descripción del proyecto
El contador electrónico digital es muy útil por ello en la actualidad estamos rodeados de dispositivos que disponen de algún tipo de contador digital, incluso en la mayoría de los electrodomésticos vienen equipados con uno.
En el presente proyecto se implementa un el desarrollo de un lCD en el lenguaje de programación VHDL con la aplicación de una librería para realizarlo como contador o como reloj y para implementarlo usando la tarjeta spartan3E, para el respectivo uso que deseen los lectores.
Desarrollo de la Programación en general
En la primera parte de nuestro programa se define la librería para el uso del lcd con sus respectivos componentes que para nuestro caso son 2.; los cuales veremos más adelante.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
USE WORK.COMANDOS_LCD_REVB.ALL;
Para la entidad definimos nuestras entradas “IN” y salidas “OUT” dependiendo del rango que van a ocupar ya sea “STD_LOGIC”, “BIT” o “STD_LOGIC_VETOR”; y más adelante también vamos a definir señales que nos van a servir de ayuda.
PORT(CLK: IN STD_LOGIC;
RS : OUT STD_LOGIC; --
RW : OUT STD_LOGIC; --
ENA : OUT STD_LOGIC; --
CORD : IN STD_LOGIC; --
CORI : IN STD_LOGIC; --
DATA_LCD: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --
BLCD : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --; --
);
end LIB_LCD_INTESC_REVB;
Seguidamente llamamos a los componentes que usamos haciendo las conexiones respectivas para la LCD, para continuar con la programación del código donde se indica las variables ya antes definidas y su funcionamiento; que implica a la variable UNIDADES incrementar en “1”, de similar manera la variable DECENAS aumentará en “1” cuando la variable unidades llegue a “9”; y bajo el mismo principio la variable CENTENAS se incrementará en “1” cuando la variable DECENAS presente el número“6”. En la misma programación se indica el número máximo al que llegaran contando las variables y regresaran a “0” volviendo a comenzar la cuenta; así se indica, que la variable UNIDADES contarán como máximo hasta “9”, la variable DECENAS contaran hasta “6” y las variables CENTENAS llegaran a contar hasta “6”. Sin embargo el número se puede cambiar en la programación, así como también aumentar las variables a MILLARES, etc., según sea el uso del reloj.
En esta etapa se puede cambiar la programación, manteniendo el formato ya explicado, para obtener un contador, acumulador, un reloj, etc. para el objetivo que se tenga en mente.
PRCESS (CLK)
BEGI
IF RISING_EDGE(CLK) THEN CONTA_DELAY <= CONTA_DELAY+1;
IF CONTA_DELAY = DELAY_FIN THEN
CONTA_DELAY <= 0;
UNIDADES <= UNIDADES + 1;
IF UNIDADES = 9 THEN
UNIDADES <=0;
DECENAS <= DECENAS + 1;
IF DECENAS = 6 THEN
DECENAS <=0;
CENTENAS <= CENTENAS + 1;
IF CENTENAS = 6 THEN
CENTENAS <=0;
END IF;
END IF;
END IF;
END IF;
END IF;
END PROCESS;
Gracias al uso de los componentes y de la librería más adelante se pueden observar instrucciones que nos hacen mucho más fácil la programación, que con tan solo escribir LCD_INI("11") estaríamos haciendo inicio del LCD y con la instrucción CHAR(MR), se indica que se escribirá en mayúsculas la letra R, el código CHAR_ASCII(x"3A") que indica los 2 puntos y POS(2,3), 1u3 nos da la posición del LCD que estaremos usando.
INSTRUCCION(0) <= LCD_INI("11");
INSTRUCCION(1) <= CHAR(MR);
INSTRUCCION(2) <= CHAR(E);
INSTRUCCION(3) <= CHAR(L);
INSTRUCCION(4) <= CHAR(O);
INSTRUCCION(5) <= CHAR(J);
INSTRUCCION(6) <= CHAR_ASCII(x"3A");
INSTRUCCION(7) <= POS(2,3);
INSTRUCCION(8) <= CHAR_ASCII(x"3A");
INSTRUCCION(9) <= BUCLE_INI(1);
INSTRUCCION(10) <= POS(2,2);
INSTRUCCION(11) <= INT_NUM(CENTENAS);
INSTRUCCION(12) <= POS(2,4);
INSTRUCCION(13) <= INT_NUM(DECENAS);
INSTRUCCION(14) <= POS(2,5);
INSTRUCCION(15) <= INT_NUM(UNIDADES);
INSTRUCCION(16) <= BUCLE_FIN(1);
...