expendedora de gaseosas

25
Expendedora Gómez Espitia Jaider Ivan (1802424) UNIVERSIDAD MILITAR NUEVA GRANADA FACULTAD DE INGENIERIA INGENIERIA MECATRONICA DIGITALES SEMESTRE IV 2015-1

Upload: jaider-gomez

Post on 12-Apr-2016

236 views

Category:

Documents


2 download

DESCRIPTION

Codigo Expendedor de gaseosa programdo con Cool Runner

TRANSCRIPT

Page 1: Expendedora de Gaseosas

Expendedora

Gómez Espitia Jaider Ivan (1802424)

UNIVERSIDAD MILITAR NUEVA GRANADAFACULTAD DE INGENIERIAINGENIERIA MECATRONICA

DIGITALESSEMESTRE IV 2015-1

EXPENDEDORA

Page 2: Expendedora de Gaseosas
Page 3: Expendedora de Gaseosas

EXPENDEDORA DE GASEOSAS

Código 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;

Page 4: Expendedora de Gaseosas

-- 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);

Page 5: Expendedora de Gaseosas

CONSTANT cero: std_logic_vector(0 TO 6):="1000000";

CONSTANT uno: std_logic_vector(0 TO 6):="1111001";

CONSTANT dos: std_logic_vector(0 TO 6):="0100100";

CONSTANT tres: std_logic_vector(0 TO 6):="0110000";

CONSTANT cuatro: std_logic_vector(0 TO 6):="0011001";

CONSTANT cinco: std_logic_vector(0 TO 6):="0010010";

CONSTANT seis: std_logic_vector(0 TO 6):="0000010";

CONSTANT siete: std_logic_vector(0 TO 6):="1111000";

CONSTANT ocho: std_logic_vector(0 TO 6):="0000000";

CONSTANT nueve: std_logic_vector(0 TO 6):="0010000";

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;

Page 6: Expendedora de Gaseosas

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

Page 7: Expendedora de Gaseosas

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;

Page 8: Expendedora de Gaseosas

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)

Page 9: Expendedora de Gaseosas

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;

Page 10: Expendedora de Gaseosas

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;

Page 11: Expendedora de Gaseosas

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;

Page 12: Expendedora de Gaseosas

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;

Page 13: Expendedora de Gaseosas

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;

Page 14: Expendedora de Gaseosas

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;

Page 15: Expendedora de Gaseosas

end if;

end PROCESS mostrar1;

end Behavioral;

ASIGNACION DE PINES PARA TARJETA COOLRUNNER II

Page 16: Expendedora de Gaseosas

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" ;

Análisis

Page 17: Expendedora de Gaseosas

El primer análisis que se debe hacer respecto a la programación y el funcionamiento físico de este es la asignación de pines en la tarjeta coolrunner ya que de acuerdo al programa que se realizó se utilizaron se utilizaron los módulos que están asignados con el nombre J1 Y J2 es decir que toda la conexión respecto a lo que tenga que ver con la expendedora se realizara de este par de módulos.

Procedimiento

Después de realizar la respectiva programación 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.

Sustentación

En el momento de presentar como sustentación se pidió que la representación de cada una de las monedas se hiciera por leds asignándole a cada moneda un led. Ejemplo:

Led 1: $100

Led 2: $200

Led 3: 500

Page 18: Expendedora de Gaseosas

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

Page 19: Expendedora de Gaseosas
Page 20: Expendedora de Gaseosas

MONEDA DE $100

Conclusión

Page 21: Expendedora de Gaseosas

La máquina expendedora funciono de la forma que pedía el profesor devolviendo las vueltas de acuerdos a los leds y las entradas usadas como pulsadores.

Se demostró buen funcionamiento durante la sustentación y se cumplió el objetivo principal.