Está en la página 1de 7

Instituto Tecnológico

Superior de Atlixco

INGENIERÍA MECATRÓNICA
CONTROL DIGITAL

Tareas VHDL Parcial 2

CATEDRÁTICO
Dra. Mariana Natalia Ibarra Bonilla

ALUMNO
PAULINO CESAR MARTÍNEZ VALENCIA
ULTRASONICO Y LCD.

Objetivo. Diseñar un circuito en VHDL capaz de hacer funcionar un sensor


ultrasónico y mostrar la distancia en la lcd de la tarjeta AVANXE.
Programa VHDL.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_arith.all;
USE WORK.COMANDOS_LCDSPI_REVA.ALL;
entity ULTRASONICO_2 is
Port (
CLK : in STD_LOGIC;
ECO : in STD_LOGIC;
TRIGGER : out STD_LOGIC;
RST : OUT STD_LOGIC;
RS : OUT STD_LOGIC;
CSB : OUT STD_LOGIC;
SCL : OUT STD_LOGIC;
SI : OUT STD_LOGIC);
end ULTRASONICO_2;
architecture Behavioral of ULTRASONICO_2 is
--------------------------SEÑALES DE LOS PROCESOS-------------------------------
SIGNAL CONTA_TRIGGER : INTEGER RANGE 0 TO 2_99_999 := 0;
SIGNAL CONTA_ECO, PULSO_ECO: INTEGER := 0;
SIGNAL FLAG : STD_LOGIC :='1';
--------------------------------------------------------------------------------------------------
-------SEÑALES PARA CONVERTIR LAS SEALES EN CENTIMETROS------
SIGNAL TIEMPO_US : INTEGER :=0;
SIGNAL DISTANCIA_CM : INTEGER :=0;
--------------------------------------------------------------------------------------------------
--SEÑALES PARA DETERMINAR LAS CENTENAS DECENAS Y UNIDADES
SIGNAL CENTENAS, DECENAS,UNIDADES : INTEGER RANGE 0 TO 9 := 0;

--------------COMPONENTE LCD_SPI------------------
COMPONENT LIB_LCDSPI_INTESC_REVA IS
PORT( CLK : IN STD_LOGIC;
RST : OUT STD_LOGIC;
RS : OUT STD_LOGIC;
CSB : OUT STD_LOGIC;
SCL : OUT STD_LOGIC;
SI : OUT STD_LOGIC;
UNI,DEC,CEN : IN INTEGER
);
end COMPONENT LIB_LCDSPI_INTESC_REVA;
----------------------------------------------------------------
begin
------------MAPEO INTERNO DE LA LCD-----------
LCD : LIB_LCDSPI_INTESC_REVA PORT MAP(
CLK => CLK,
RST => RST,
RS => RS,
CSB => CSB,
SCL => SCL,
SI => SI ,
UNI => UNIDADES,
DEC => DECENAS,
CEN => CENTENAS
);
-------------------------------------------------------------------------------
----PROCESO PARA GENERAR LA SEÑAL DEL TRIGGER---
PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
CONTA_TRIGGER <= CONTA_TRIGGER +1;
IF CONTA_TRIGGER = 0 THEN
TRIGGER <= '1';
ELSIF CONTA_TRIGGER = 499 THEN
TRIGGER <= '0';
ELSIF CONTA_TRIGGER = 2_999_999 THEN
CONTA_TRIGGER <= 0;
END IF;
END IF;
END PROCESS;
----------------------------------------------------------------------------------------
-----PROCESO PARA DETERMINAR LA DURACIÓN DEL ECHO---
PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
IF CONTA_TRIGGER = 499 THEN
FLAG <= '1';
END IF;
IF ECO = '1' THEN
CONTA_ECO <= CONTA_ECO + 1;
ELSIF ECO = '0' AND FLAG = '1' THEN
PULSO_ECO <= CONTA_ECO;
CONTA_ECO <= 0;
FLAG <= '0';
END IF;
END IF;
END PROCESS;
-----------------------------------------------------------------------------
-----------CONVERSIÓN A TIEMPO EN US----------------------
TIEMPO_US <= PULSO_ECO/50;
-----------------------------------------------------------------------------
------------CONVERSÓN A DISTANCIA EN CM-----------------
DISTANCIA_CM <= TIEMPO_US/58;
-----------------------------------------------------------------------------
--DIVISIÓN ENTRE CIEN PARA MOSTRAR SOLO EL VALOR DE LAS CENTENAS
CENTENAS <= DISTANCIA_CM/100;
-------------------------------------------------------------------------------------------------------------
--DIVISIÓN ENTRE 10 PARA MOSTRAR SOLO EL VALOR DE LAS DECENAS
DECENAS <= (DISTANCIA_CM/10) MOD 10;
--------------------------------------------------------------------------------------------------------
--SOLO MUESTRA EL VALOR DE LAS UNIDADES------------------------------------
UNIDADES <= DISTANCIA_CM MOD 10;
end Behavioral;
FUNCIONAMIENTO.

Fig. 1 objeto a 10 cm de distancia.


Fig. 2 objeto a 5 cm de distancia.
CONCLUSIÓN.
Existieron algunas complicaciones para lograr el buen funcionamiento y
coordinación entre el sensor ultrasónico y la lcd pero todo era a causa de un
componente faltante en la librería de la lcd además del tiempo exagerado para
generar el archivo .bit .

También podría gustarte