Vendedor automático de Tickets

13
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FIEC Laboratorio de Sistemas Digitales Proyecto #1 Vendedor automático de Tickets Alumnos Byron Narváez Rivadeneira Darwin Yupa. Paralelo: # 8 Profesor: Ing. Marcia Garcés Fecha de presentación: 22/05/2015 2015 – 1° TÉRMINO

description

Diseñe una máquina controladora de un vendedor automático de Tickets. El sistema se activa cuando se presiona y suelta el botón START, en ese momento se puede vender los tickets para tour, luego el sistema espera a que el usuario indique si quiere uno o dos tickets, tick1 o tick2 respectivamente. A continuación el sistema espera por el ingreso de la tarjeta de crédito que se detecta cuando se recibe la señal de entrada CREDITO, a continuación la máquina debe colocar en salidas binarias de 3 bits el valor de tres dólares por un ticket y de 6 dólares por dos tickets. El sistema seguirá enviando éstas señales hasta que se reciba la señal APROBADO, que indica que se ha cargado el valor requerido a la tarjeta. Luego de esto el usuario debe presionar un botón que corresponda a una de los dos programas del tour: P1, P2. Considere que solo se puede elegir un tour a la vez y que P1 tiene la mayor prioridad.Luego la máquina deberá enviar simultáneamente dos señales. Una que indique de que programa son los tickets a vender (VP1 O VP2) y la segunda indica cuántos tickets se van a entregar (EP1 o EP2). Deben generarse éstas señales hasta que se reciba la señal VENDIDO, luego de lo cual la máquina debe regresar al estado inicial a esperar por otra venta.Realice el diseño e implementación del sistema digital utilizando la tarjeta de desarrollo DE0-Nano con FPGA.

Transcript of Vendedor automático de Tickets

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL

FIEC Laboratorio de Sistemas Digitales

Proyecto #1

Vendedor automático de Tickets

Alumnos Byron Narváez Rivadeneira

Darwin Yupa.

Paralelo: # 8

Profesor: Ing. Marcia Garcés

Fecha de presentación: 22/05/2015

2015 – 1° TÉRMINO

1.- Especificación

Diseñe una máquina controladora de un vendedor automático de Tickets. El sistema se activa cuando se presiona y suelta el botón START, en ese momento se puede vender los tickets para tour, luego el sistema espera a que el usuario indique si quiere uno o dos tickets, tick1 o tick2 respectivamente. A continuación el sistema espera por el ingreso de la tarjeta de crédito que se detecta cuando se recibe la señal de entrada CREDITO, a continuación la máquina debe colocar en salidas binarias de 3 bits el valor de tres dólares por un ticket y de 6 dólares por dos tickets. El sistema seguirá enviando éstas señales hasta que se reciba la señal APROBADO, que indica que se ha cargado el valor requerido a la tarjeta. Luego de esto el usuario debe presionar un botón que corresponda a una de los dos programas del tour: P1, P2. Considere que solo se puede elegir un tour a la vez y que P1 tiene la mayor prioridad. Luego la máquina deberá enviar simultáneamente dos señales. Una que indique de que programa son los tickets a vender (VP1 O VP2) y la segunda indica cuántos tickets se van a entregar (EP1 o EP2). Deben generarse éstas señales hasta que se reciba la señal VENDIDO, luego de lo cual la máquina debe regresar al estado inicial a esperar por otra venta. Realice el diseño e implementación del sistema digital utilizando la tarjeta de desarrollo DE0-Nano con FPGA.

4.- Descripción de Señales Entradas RESETN: Es una señal de entrada controlada por una botonera que permite reiniciar el programa al modo de inicio, la botonera se puede apretar en cualquier estado

START: Es la señal de entrada controlada por una botonera que permite iniciar el proceso, cuando se presione y suelte el botón. Tick1: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que solo desea un ticket. Tick2: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que desea 2 tickets. Crédito: Es una señal de entrada controlada por una botonera que permite ingresar la tarjeta de crédito. Aprobado: Es una señal de entrada controlada por una botonera que permite aprobar el precio que se muestra a pagar. P1: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que desea el primer programa de tour. P2: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que desea el segundo programa de tour. Vendido: Es una señal de entrada controlada por una botonera que realizar la venta.

Salidas Led_start: Esta salida se genera al presionar la botonera START, se enciende un foco led.

PRECIO: Muestra en 3 un banco de leds el precio que se pagara ya sea $3 (011) o $6(110)

RESULTADO: Muestra en un banco de 4 leds en el que se mostrara VP1,VP2,EP1,EP2.

Vp1 y Vp2 indica el program que se elige y Ep1 y Ep2 indican cuantos tickets se compró.

CONSOLA

Diagrama de Bloques

DIAGRAMA FUNCIONAL

DIAGRAMA DE TIEMPOS

Diagrama Esquemático

Tipos de componentes

8 leds de color verde.

8 resistencias de 330 ohm de ¼ de w 9 pulsadores tipo botonera 9 resistencias de 10k

21 cables tipo jumper hembra- macho 1 protoboard BB-4T7D-01

1 FPGA DEO NANO

Descripción VHDL

MSS:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

USE IEEE.STD_LOGIC_ARITH.all; entity MSS is

port(clockr, resetn, start_ini, credito_ini, aprobado_ini, vendido_ini: in std_logic; tick1_ini, tick2_ini, pro1_ini, pro2_ini: in std_logic;

led_start: out std_logic; result_ini: out std_logic_vector(3 downto 0); precio_ini: out std_logic_vector(2 downto 0));

end MSS;

Architecture comportamiento of MSS is

component CLOCK_DIV PORT

( CLOCK_50MHz :IN STD_LOGIC; CLOCK_1MHz :OUT STD_LOGIC; CLOCK_100KHz :OUT STD_LOGIC;

CLOCK_10KHz :OUT STD_LOGIC; CLOCK_1KHz :OUT STD_LOGIC;

CLOCK_100Hz :OUT STD_LOGIC; CLOCK_10Hz :OUT STD_LOGIC; CLOCK_1Hz :OUT STD_LOGIC);

end component;

component Mux_4a1 port( S: in std_logic_vector(1 downto 0); --Es la señal que proviene del controlador despues de seleccionar # de tickets y pulsar CREDITO

Y: out std_logic_vector(2 downto 0) );

end component; component Mux_8a1

port( S: in std_logic_vector(2 downto 0); --Es la señal que proviene del controlador despues de seleccionar # de tickets y pulsar CREDITO

Y: out std_logic_vector(3 downto 0) ); end component;

component decoder_2a4 port( I1: in std_logic;

I2: in std_logic; O: out std_logic_vector(3 downto 0)

); end component;

type estado is(Ta, Tb, Tc, Td, Te, Tf, Tg, Th, Ti,Tj,Tk,Tl,Tm,Tn,Tp,Tq, Tr, Ts, Tt);

signal y: estado; signal M: std_logic_vector(1 downto 0);

signal N: std_logic_vector(2 downto 0); signal T: std_logic_vector(3 downto 0);

signal P: std_logic_vector(3 downto 0); signal f1m, f100k, f10k, f1k, f100, f10, f1 : std_logic;

begin mss_transiciones: process(resetn,f1)

begin if resetn='1' then y<=Ta; elsif (f1'event and f1='1') then

case y is

when Ta => if start_ini='1' then y<=Tr; else y<=Ta; end if; when Tr => if start_ini='0' then y<=Tb; else y<=Tr; end if; when Tb => if T(1)='1' then y<=Tc; elsif T(2)='1' then y<=Th; elsif T(3)='1' then

y<=Tm; else y<=Tb; end if; when Tc => if credito_ini='1' then y<=Td; else y<=Tc; end if;

when Td => if aprobado_ini='1' then y<=Te; else y<=Td; end if; when Te => if P(1)='1' then y<=Tf; elsif P(2)='1' then

y<=Ts; elsif P(3)='1' then y<=Tp; else y<=Te; end if; when Ts => if P(1)='1' then y<=Tf; else y<=Tg; end if;

when Tf => if vendido_ini='1' then y<=Ta; else y<=Tf; end if; when Tg => if vendido_ini='1' then y<=Ta; else y<=Tg;

end if; when Th => if credito_ini='1' then y<=Ti; else y<=Th; end if;

when Ti => if aprobado_ini='1' then y<=Tj; else y<=Ti; end if; when Tj => if P(1)='1' then y<=Tk; elsif P(2)='1' then y<=Tt; elsif P(3)='1' then y<=Tq; else y<=Tj; end if;

when Tt => if P(1)='1' then y<=Tk; else y<=Tl; end if; when Tk => if vendido_ini='1' then y<=Ta; else y<=Tk; end if;

when Tl => if vendido_ini='1' then y<=Ta; else y<=Tl; end if;

when Tm => if credito_ini='1' then y<=Tn; else y<=Tm; end if;

when Tn => if aprobado_ini='1' then y<=Te; else y<=Tn; end if;

when Tp => if vendido_ini='1' then y<=Ta; else y<=Tp; end if; when Tq => if vendido_ini='1' then y<=Ta; else y<=Tq;

end if;

end case; end if; end process;

mss_salidas: process(y)

begin M<="00"; N<="000"; led_start<='0'; case y is

when Ta =>

when Tr => when Tb => led_start<='1'; when Tc =>

when Td => M<="01"; when Te =>

when Ts => when Tf => N<="010"; when Tg => N<="100";

when Th => when Ti => M<="10";

when Tj => when Tt => when Tk => N<="011";

when Tl => N<="101"; when Tm =>

when Tn => M<="11"; when Tp => N<="110"; when Tq => N<="111";

end case; end process;

relojdiv: CLOCK_DIV port map (clockr,f1m,f100k,f10k,f1k,f100,f10,f1);

decoderT: decoder_2a4 port map (tick1_ini,tick2_ini,T); decoderP: decoder_2a4 port map (pro1_ini,pro2_ini,P);

muxP: Mux_4a1 port map (M,precio_ini); muxF: Mux_8a1 port map (N,result_ini);

end comportamiento;

DECODER 2 A 4

------------------------------------------------- -- Proyecto1_Laboratorio de sistemas digitales

--Codigo vhdl de un multiplexor 4:1 -- Saúl Yupa

-- Byron Narváez -------------------------------------------------

library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; -------------------------------------------------

entity decoder_2a4 is

port( I1: in std_logic; I2: in std_logic; O: out std_logic_vector(3 downto 0)

); end decoder_2a4;

-------------------------------------------------

Architecture Behaviour of decoder_2a4 is Begin

O <= "0001" when (I2='0' and I1='0') else "0010" when (I2='0' and I1='1') else "0100" when (I2='1' and I1='0') else

"1000" when (I2='1' and I1='1') else Unaffected;

End Behaviour;

MUX 4 A 1

library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; -------------------------------------------------

entity Mux_4a1 is

port( S: in std_logic_vector(1 downto 0); --Es la señal que proviene del controlador despues de seleccionar # de tickets y pulsar CREDITO

Y: out std_logic_vector(2 downto 0) );

end Mux_4a1; -------------------------------------------------

architecture behv1 of Mux_4a1 is

begin process(S) begin

case S is

when "00" => Y <= "000";-- Muestra 0000 when "01" => Y <= "011";-- Muestra 0011 when "10" => Y <= "110";-- Muestra 0101

when "11" => Y <= "011";-- Muestra 0011 end case;

end process; end behv1;

MUX 8 A1

------------------------------------------------- -- Proyecto1_Laboratorio de sistemas digitales

--Codigo vhdl de un multiplexor 4:1 -- Saúl Yupa

-- Byron Narváez -------------------------------------------------

library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; -------------------------------------------------

entity Mux_8a1 is port( S: in std_logic_vector(2 downto 0); --Es la señal que proviene del controlador

despues de seleccionar # de tickets y pulsar CREDITO Y: out std_logic_vector(3 downto 0) );

end Mux_8a1;

-------------------------------------------------

architecture behv1 of Mux_8a1 is begin

process(S) begin

case S is when "000" => Y <= "0000";-- Muestra 0000

when "001" => Y <= "0000";-- Muestra 0000 when "010" => Y <= "1010";-- Muestra 1010 when "011" => Y <= "1001";-- Muestra 1001

when "100" => Y <= "0110";-- Muestra 0110 when "101" => Y <= "0101";-- Muestra 0101

when "110" => Y <= "1010";-- Muestra 1010 when "111" => Y <= "1001";-- Muestra 1001 end case;

end process;

end behv1;

Reporte sobre aprovechamiento: