Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Esquematopografico de una, Esquemas y mapas conceptuales de Gestión de Proyectos

Se trata de algo que tengo que escribir aqui

Tipo: Esquemas y mapas conceptuales

2022/2023

Subido el 10/11/2023

silvestre-coutino-ruiz
silvestre-coutino-ruiz 🇲🇽

1 documento

1 / 23

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
ING MECATRÓNICA SISTEMAS DIGITALES PROGRAMABLES
SISTEMAS DIGITALES
MANUAL DE PRÁCTICAS
I.C.E MARCO ANTONIO MORALES PÉREZ
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Vista previa parcial del texto

¡Descarga Esquematopografico de una y más Esquemas y mapas conceptuales en PDF de Gestión de Proyectos solo en Docsity!

SISTEMAS DIGITALES

MANUAL DE PRÁCTICAS

I.C.E MARCO ANTONIO MORALES PÉREZ

INTRODUCCIÓN

El objetivo de este manual de prácticas es que el alumno pueda adquirir las

habilidades necesarias para utilizar e identificar la estructura de programación de

los sistemas digitales combinacionales, secuenciales, dentro del entorno de

programación VHDL, que se será implementado en un dispositivo lógico

programable (PLD) FPGA.

▪ El alumno con el apoyo del software de simulación “Xilinx 14.7” y la tarjeta FPGA

“BASYS2” aprenderá a programar los diferentes tipos de circuitos digitales de forma adecuada y así poder realizar el montaje físico de dichos sistemas digitales utilizando la tarjeta Basys2.

▪ A través del uso de los softwares de programación y simulación, el alumno podrá

entender de una mejor forma el funcionamiento de los sistemas digitales programables, ya que podrá razonar y comprender su funcionamiento en forma de código y real.

El software Xilinx 14.7 es un entorno virtual, que permite realizar simulaciones de

circuitos combinacionales, circuitos secuenciales con flip – flop’s, a base de

programación en código VHDL; además de poder realizar de forma sencilla toda

una gama de circuitos digitales complejos; facilitando al alumno el conocimiento en

relación con el funcionamiento y comportamiento, de cada uno de los elementos de

programación que conforman los sistemas digitales programables.

El manual consta de seis prácticas, las cuales incluyen tanto el circuito a realizar,

como su descripción en código VHDL. En su mayoría las practicas presentan

errores de sintaxis y lógica; con el propósito de que el alumno resuelva dichos

errores demostrando así sus conocimientos adquiridos en la materia de sistemas

digitales.

PRACTICA 1: contador / decodificador BCD con display siete segmentos

En la siguiente práctica el alumno diseñará un contador binario 0 a 15 decodificado a BCD para un Display de 7 segmentos. Con los interruptores de la “tarjeta Basys2” se pretende ingresar un número binario, el cual será visualizado en los leds (salidas) y en el display de 7 segmentos al mismo tiempo.

Código del decodificador en VHDL: -- librería

library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity practica_contador is Port (a: in STD_LOGIC_VECTOR (4 downto 0); led: out STD_LOGIC_VECTOR (3 downto 0) sel: out STD_LOGIC_VECTOR (3 downto 0); d: out STD_LOGIC_VECTOR (6 downto 0)); end practica_contador;

architecture practica_contaodor of practica_contador is signal q: std_logic_vectos (3 downto 0); begin

--activación de los leds del Display con nivel bajo "0" -- se utilizará la instrucción "process" y "case"

process (a) begin

case a is when "0000" => d <= "0000001"; -- 0 when "0001" => d <= "1001111"; -- 1 when "0010" => d <= "0010010"; -- 2 when "0011" => d <= ‘ 0000110 ’; -- 3 when "0100" => d <= "1001100"; -- 4 when "0101" => d <= "0100100"; -- 5 when "0110" => d <= "0100000"; -- 6 when ‘ 0111 ’ => d <= "0001111"; -- 7 when "1000" => d <= "0000000"; -- 8 when "1001" => d <= "0001100"; -- 9 when "1010" => d <= "0001000"; -- A

when "1011" => d <= "1100000"; -- B when "1100" => d <= "1110010"; -- C when "1101" => d <= "1000010"; -- D when "1110" => d <= "0110000"; -- E when "1111" => d <= "0111000"; -- F when others => d <= "0000000"; --RESET

end case; end process;

led <= a; sel_disp <= "1110"; end practica_contador;

-- pulsos (test bench)

Diagrama esquemático:

PRACTICA 2: Contador binario Ascendente de 0 a 15

En esta práctica se diseñará un contador ascendente. Para que un contador funcione se necesita un generador de pulsos (reloj), y en este caso será utilizado el reloj de la tarjeta Basys2, recuerde que el reloj de la tarjeta es de 50 MHz lo que significa un problema ya que el ojo humano es incapaz de ver pulsos a esa velocidad, es por ello que dentro del proyecto será necesario hacer un reloj más lento que el de la tarjeta; a continuación, se describe paso a paso el desarrollo del proyecto.

Código del contador ascendente en VHDL:

-- Librería para el contador ascendente

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- entidad para el contador ascendente

entity contadorAD is

Port ( clk: in STD_LOGIC; reset: in STD_LOGIC; Q : out STD_LOGIC_VECTOR (3 downto 0));

end contadorAD;

-- arquitectura para el contador ascendente

architecture contadorAD of contadorAD is

signal aux: std_logic_vector (3 downto 0);

signal divisor: std_logic_vector (2 downto 0);

signal reloj_lento: std_logic;

begin

--Proceso para la cuenta de 4 bits

process (reloj_lento, reset)

begin

if reset = '1' then

aux <= "0000";

elsif reloj_lento'event and reloj_lento = '1' then

aux <= aux + 1;

end if;

Q<= aux;

-- contador auxiliar que corre con el cristal de la tarjeta (50 MHz)

--permite reducir la frecuencia.

process (clk, reset)

begin

if (reset = '1') then

divisor <= (others => '0');

elsif (clk'event and clk = '1') then

divisor <= divisor + 1;

end if;

end process;

-- se toma el bit más significativo del contador auxiliar para dividir la frecuencia de operación.

reloj_lento <= divisor (2);

end contadorAD;

Diagrama esquemático:

divisor <= (others => '0'); elsif clk'event and clk = '1' then divisor <= divisor + 1;

end if; end process;

-- se toma el bit más significativo del contador auxiliar para -- dividir la frecuencia de operación

reloj_lento <= divisor (2);

-- se asignan las salidas al display de 7 segmentos

sal<= "0000001" when cuenta=0 else "1001111" when cuenta=1 else "0010010" when cuenta=2 else "0000110" when cuenta=3 else "1001100" when cuenta=4 else "0100100" when cuenta=5 else "0100000" when cuenta=6 else "0001111" when cuenta=7 else "0000000" when cuenta=8 else "0001100" when cuenta=9 else "0001000" when cuenta=10 else "1100000" when cuenta=11 else "0110001" when cuenta=12 else "1000010" when cuenta=13 else "0110000" when cuenta=14 else "0111000" when cuenta=15 else "0000001";

sel_disp <= "0111"; end contador_display;

PRÁCTICA 4: Encendido y paro de un motor de CD.

La tarjeta Basys2 cuenta con 4 módulos de expansión PMOD con 4 entradas/salidas cada uno. Utilizando una de estas salidas se encenderá un motor de CD de 5V por medio de uno de los switches de la tarjeta.

Materiales:

  • 1 Optoacoplador 4N
  • 1 Transistor NPN 2N3906 o 2N
  • 1 Protoboard
  • 1 Resistor 330 Ω
  • 1 Resistor 1K Ω
  • 1 Relevador de 5V
  • Alambre telefónico
  • 1 Motor de CD de 3.3 a 5V

Codigo en VHDL:

-- librería library IEEE; use IEEE.STD_LOGIC_1164.ALL;

-- Entidad entitty encendido_motor is Port (inicio_paro: in STD_LOGIC; motor: out STD_LOGIC)); end encendido_motor;

-- Arquitectura architecture encendido_motor of encendido_motor is begin

motor <= inicio_paro; end encendido_motor;

Diagrama Esquemático:

Hoja de datos del optoacoplador 4N25:

PRACTICA 5: CAMBIO DE GIRO DE MOTOR CON PUENTE H

Teniendo la experiencia de la práctica 4 para hacer el acondicionamiento de señal necesario para utilizar las salidas de la Tarjeta Basys2, se pretende en esta práctica que el Motor de CD encienda y cambie su sentido de rotación al enviar la acción de control desde los switches de la tarjeta.

Como se puede apreciar en el código se cuenta con una entrada start, para encender o apagar el motor, una entrada sentido, para cambiar el sentido de rotación del motor, dos salidas s1 y s2, las cuales enviarán un pulso del valor de la entrada sentido y otras dos salidas led_start y led_sent para indicar que el motor está en marcha y para indicar el sentido de rotación respectivamente, estos dos leds serán de la tarjeta.

Materiales:

  • 3 Optoacoplador 4N
  • 1 Protoboard
  • 3 Resistor 330 Ω
  • 3 Resistor 1K Ω
  • 1 Puente H SN
  • Alambre telefónico
  • 1 Motor de CD - 5V

-- LIBRERIAS

library IEEE; use IEEE.STD_LOGIC_1164.ALL;

-- ENTIDAD

entity motor_puente_H is Port ( star: in STD_LOGIC; sentido_jiro: in STD_LOGIC; s1_izquierda: out STD_LOGIC; -- jiro del motor a la izquierda s2_derecha: out STD_LOGIC; -- jiro del motor a la dercha led_start: out STD_LOGIC; led_sentido: out STD_LOGIC; -- se enciende solo cuando el motor jira a la derecha

Finalmente cheque la sintaxis, asigne pines, arme en el protoboard el circuito externo y descargue el programa hacia la tarjeta Basys2 para comprobar el funcionamiento.

NOTA IMPORTANTE: Las tierras (GND) de la tarjeta Basys2 y del circuito externo de acondicionamiento de señal, deben estar acopladas; además la tarjeta no debe recibir, ni enviar voltaje.

Diagrama esquemático:

Hoja de datos L293D:

p: in std_logic; --- habilitador 0 a 9 d: out std_logic_vector(5 downto 0)); end semaforo;

--- arquitectura

architecture semaforo of semaforo is signal q: std_logic_vector(3 downto 0); signal p: std_logic; begin

process (clk, reset) begin

if (clk'event and clk='1') then q <= q+1; if (q="1001") then q<= "0000"; end if; end if; end process;

process(q,p) begin

case q is when "0000" => if p='1' then d<= "001100"; elsif p='0' then d<= "001100"; end if;

when "0001" => if p='1' then d<= "001100"; elsif p='0' then d<="001100"; end if;

when "0010" =>

if p='1' then d<= "001100"; elsif p='0' then d<="001100"; end if;

when "0011" => if p='1' then d<= "001100"; elsif p='0' then d<="001100"; end if;

---- cuando se llega a cuatro se comienza con los cambios de luces de verde a amarillo.

when "0100" => if p='1' then d<= "010100"; elsif p='0' then d<="001100"; end if;

when "0101" => ---- permanence Amarillo if p='1' then d<= "010100"; elsif p='0' then d<="001100"; end if;

------- ahora la luz que estaba en amarillo cambiara a rojo y la que estaba en rojo pasa a color verde.

when "0110" => if p='1' then d<= "100001"; elsif p='0' then d<="001100"; end if;

------ el cambio permanece durante dos ciclos de reloj.