You are on page 1of 21

Expendedora

Gmez Espitia Jaider Ivan (1802424)

UNIVERSIDAD MILITAR NUEVA GRANADA


FACULTAD DE INGENIERIA
INGENIERIA MECATRONICA
DIGITALES
SEMESTRE IV 2015-1

EXPENDEDORA

EXPENDEDORA DE GASEOSAS

Cdigo del programa


----------------------------------------------------------------------------------- Company:
-- Engineer:
--- Create Date: 16:04:58 05/25/2015
-- Design Name:
-- Module Name: Monedero1 - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--- Dependencies:
--- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
----------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using


-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Monedero1 is
Port ( m1,m2,m3 : in STD_LOGIC;
dis : out STD_LOGIC_VECTOR (6 downto 0);
reset: in STD_LOGIC;
clk : in STD_LOGIC;
pd: out STD_LOGIC_VECTOR(3 downto 0);
mos : out STD_LOGIC_VECTOR(3 downto 0));
end Monedero1;
architecture Behavioral of Monedero1 is
TYPE mostrar is( md1,md2,md3,md4);
TYPE cambio is(cd1,cd2,cd3,cd4);
CONSTANT
6):="1000000";

cero:

std_logic_vector(0

TO

CONSTANT
6):="1111001";

uno:

std_logic_vector(0

TO

CONSTANT
6):="0100100";

dos:

std_logic_vector(0

TO

CONSTANT
6):="0110000";

tres:

std_logic_vector(0

TO

CONSTANT
6):="0011001";

cuatro:

std_logic_vector(0

TO

CONSTANT
6):="0010010";

cinco:

std_logic_vector(0

TO

CONSTANT
6):="0000010";

seis:

std_logic_vector(0

TO

CONSTANT
6):="1111000";

siete:

std_logic_vector(0

TO

CONSTANT
6):="0000000";

ocho:

std_logic_vector(0

TO

CONSTANT
6):="0010000";

nueve:

std_logic_vector(0

TO

SIGNAL actual:mostrar:=md1;
SIGNAL actual1:cambio:=cd1;
SIGNAL contador: integer range 0 to 39999;
SIGNAL contador1: integer range 0 to 8000000;
SIGNAL saldo: integer range 0 to 19:=0;
SIGNAL cam: integer range 0 to 4:=0;
signal div_frec:std_logic;
signal aux: std_logic:='0';

begin
Frecuencia:
PROCESS (clk) begin
if rising_edge(clk) then
contador<=contador+1;
if contador>=100 then
aux<='1';
contador<=0;
else
aux<='0';
end if;
end if;
end process Frecuencia;
div_frec<=aux;
Cambio1:
PROCESS(m1,m2,m1,clk) begin
if reset='1' then
if clk='1' and clk'event and saldo<10 then
contador1<=contador1+1;
IF contador1>=7500000 and m1='1' and
m2='0' and m3='0' then
contador1<=0;
saldo<=saldo+1;

end if;
if contador1>=7500000 and m2='0' and
m1='0' and m3='1' then
contador1<=0;
saldo<=saldo+2;
end if;
if contador1>=7500000 and m3='0' and
m2='1' and m1='0' then
contador1<=0;
saldo<=saldo+5;
end if;
end if;
if saldo>=10 then
mos<="0000";
case saldo is
when 11=>cam<=1;
when 12=>cam<=2;
when 13=>cam<=3;
when 14=>cam<=4;
when others=> cam<=0;
end case;
else
mos<="1111";

end if;
else
saldo<=0;
mos<="1111";
end if;
end PROCESS Cambio1;
cool:
PROCESS(div_frec)
BEGIN
if div_frec='1' AND div_frec'EVENT THEN
case actual is
when md1=> actual<=md2;
when md2=> actual<=md3;
when md3=> actual<=md4;
when md4=> actual<=md1;
end case;
end if;
END PROCESS cool;
cool1:
PROCESS(div_frec)
BEGIN
if div_frec='1' AND div_frec'EVENT THEN
case actual1 is

when cd1=> actual1<=cd2;


when cd2=> actual1<=cd3;
when cd3=> actual1<=cd4;
when cd4=> actual1<=cd1;
end case;
end if;
END PROCESS cool1;
mostrar1:
PROCESS (actual,saldo) begin
if reset='1' then
case actual is
when md1=>
pd<="0111";
case saldo is
when 0=> dis<=cero;
when 1=> dis<=cero;
when 2=> dis<=cero;
when 3=> dis<=cero;
when 4=> dis<=cero;
when 5=> dis<=cero;
when 6=> dis<=cero;
when 7=> dis<=cero;
when 8=> dis<=cero;

when 9=> dis<=cero;


when 10=> dis<=uno;
when 11=> dis<=uno;
when 12=> dis<=uno;
when 13=> dis<=uno;
when 14=> dis<=uno;
when others=> pd<="1111";
end case;
when md2=>
pd<="1011";
case saldo is
when 0=> dis<=cero;
when 1=> dis<=uno;
when 2=> dis<=dos;
when 3=> dis<=tres;
when 4=> dis<=cuatro;
when 5=> dis<=cinco;
when 6=> dis<=seis;
when 7=> dis<=siete;
when 8=> dis<=ocho;
when 9=> dis<=nueve;
when 10=> dis<=cero;
when 11=> dis<=uno;

when 12=> dis<=dos;


when 13=> dis<=tres;
when 14=> dis<=cuatro;
when others=> pd<="1111";
end case;
when md3=>
pd<="1101";
case saldo is
when 0=> dis<=cero;
when 1=> dis<=cero;
when 2=> dis<=cero;
when 3=> dis<=cero;
when 4=> dis<=cero;
when 5=> dis<=cero;
when 6=> dis<=cero;
when 7=> dis<=cero;
when 8=> dis<=cero;
when 9=> dis<=cero;
when 10=> dis<=cero;
when 11=> dis<=cero;
when 12=> dis<=cero;
when 13=> dis<=cero;
when 14=> dis<=cero;

when others=> pd<="1111";


end case;
when md4=>
pd<="1110";
case saldo is
when 0=> dis<=cero;
when 1=> dis<=cero;
when 2=> dis<=cero;
when 3=> dis<=cero;
when 4=> dis<=cero;
when 5=> dis<=cero;
when 6=> dis<=cero;
when 7=> dis<=cero;
when 8=> dis<=cero;
when 9=> dis<=cero;
when 10=> dis<=cero;
when 11=> dis<=cero;
when 12=> dis<=cero;
when 13=> dis<=cero;
when 14=> dis<=cero;
when others=> pd<="1111";
end case;
end case;

else
case actual1 is
when cd1=>
pd<="0111";
case cam is
when 0=> dis<=cero;
when 1=> dis<=cero;
when 2=> dis<=cero;
when 3=> dis<=cero;
when 4=> dis<=cero;
when others=> pd<="1111";
end case;
when cd2=>
pd<="1011";
case cam is
when 0=> dis<=cero;
when 1=> dis<=uno;
when 2=> dis<=dos;
when 3=> dis<=tres;
when 4=> dis<=cuatro;
when others=> pd<="1111";
end case;
when cd3=>

pd<="1101";
case cam is
when 0=> dis<=cero;
when 1=> dis<=cero;
when 2=> dis<=cero;
when 3=> dis<=cero;
when 4=> dis<=cero;
when others=> pd<="1111";
end case;
when cd4=>
pd<="1110";
case cam is
when 0=> dis<=cero;
when 1=> dis<=cero;
when 2=> dis<=cero;
when 3=> dis<=cero;
when 4=> dis<=cero;
when others=> pd<="1111";
end case;
end case;
end if;
end PROCESS mostrar1;
end Behavioral;

ASIGNACION DE PINES PARA TARJETA COOLRUNNER II


NET "clk" LOC = "P38" ;
NET "dis<0>" LOC = "P56" ;
NET "dis<1>" LOC = "P53" ;
NET "dis<2>" LOC = "P60" ;

NET "dis<3>" LOC = "P58" ;


NET "dis<4>" LOC = "P57" ;
NET "dis<5>" LOC = "P54" ;
NET "dis<6>" LOC = "P61" ;
NET "m1" LOC = "P142" ;
NET "m2" LOC = "P139" ;
NET "m3" LOC = "P136" ;
NET "mos<0>" LOC = "P3" ;
NET "mos<1>" LOC = "P68" ;
NET "mos<2>" LOC = "P69" ;
NET "mos<3>" LOC = "P10" ;
NET "pd<0>" LOC = "P126" ;
NET "pd<1>" LOC = "P128" ;
NET "pd<2>" LOC = "P129" ;
NET "pd<3>" LOC = "P130" ;
NET "reset" LOC = "P124" ;

Anlisis
El primer anlisis que se debe hacer respecto a la programacin y el
funcionamiento fsico de este es la asignacin de pines en la tarjeta
coolrunner ya que de acuerdo al programa que se realiz se
utilizaron se utilizaron los mdulos que estn asignados con el
nombre J1 Y J2 es decir que toda la conexin respecto a lo que tenga
que ver con la expendedora se realizara de este par de mdulos.

Procedimiento
Despus de realizar la respectiva programacin de cada uno de los
componentes se declararon tres pulsadores y un diodo led donde:
m_1: $100
m_2: $200
m_3:$500
Led: Gaseosa o Refresco
Posterior a ya saber qu es esto se debe saber que el costo de cada
bebida es de $1000 de acuerdo a este se lleva a ingresar las
monedas por medio de los pulsadores en el momento que se llegue
a $1000 pesos sin importar el orden de monedas y cantidad, la
maquina al detectar los $1000 encender el led haciendo referencia
de que sali la bebida y el cambio respectivo se mostrara en los
displays, as se lleva a cabo cada proceso de solicitud de gaseosa.
Sustentacin
En el momento de presentar como sustentacin se pidi que la
representacin de cada una de las monedas se hiciera por leds
asignndole a cada moneda un led. Ejemplo:
Led 1: $100
Led 2: $200
Led 3: 500
El fin de este es que cuando se arrojen las vueltas se identifique de
que valor es la moneda que devuelve es decir sean las vueltas $300
mostrar el led que identifica $200 y $100.
Simulaciones en el programa de ISE con monedas de $100, $200,
$500.

MONEDA DE $500

MONEDA DE $200

MONEDA DE $100

Conclusin

La mquina expendedora funciono de la forma que peda el profesor


devolviendo las vueltas de acuerdos a los leds y las entradas usadas
como pulsadores.
Se demostr buen funcionamiento durante la sustentacin y se
cumpli el objetivo principal.

You might also like