Está en la página 1de 10

ESCUELA SUPERIOR

POLITCNICA DEL
LITORAL
FACULTAD DE INGENIERA
ELCTRICA Y COMPUTACIN
LABORATORIO DE SISTEMAS
DIGITALES
SISTEMA DIGITAL PARA UNA
ESTACIN EMPAQUETADORAS DE
LATAS DE MERMELADAS

JUAN CARLOS SALINAS


MARITZA CHVEZ
PROF: ING. MARCIA GARCS
PARALELO: 18

2014-2015 II TRMINO
1. Especificacin
Disear un sistema digital, para una estacin empaquetadoras de
latas de mermeladas, el sistema presenta un sensor ptico que
detecta la presencia de una lata sobre una banda transportadora la
cual se dirige hacia una caja, y un display va mostrando la presencia
de las latas; el sistema debe trabajar de la siguiente manera:
Luego de un RESET debe encender LISTO y esperar por la seal START
para iniciar el proceso. Despus de pulsar START, el sistema
nuevamente debe esperar hasta que el operador presione OPER, con
lo cual la banda transportadora entra en funcionamiento encendiendo
LED-MOTOR. A partir de este instante el sistema comienza a
contabilizar una decena de latas para llenar la caja. Una vez que se
tiene la caja llena se debe encender LED-BELL y parar la banda
transportadora apagando LED MOTOR, en este lapso el operador
retira la caja colocando otra en su lugar y presiona OPER para repetir
el ciclo con las siguientes decenas de latas. Con la banda en
movimiento y en caso de emergencia el operador puede parar el
sistema presionando STOP y solo podr continuar con el proceso
presionando nuevamente OPER o retornar al paso inicial presionando
el RESET del sistema.
Realice el diseo e implementacin del sistema digital
utilizando la tarjeta de desarrollo DE0-Nano con FPGA.

2. Diagrama de bloques

Entradas:
Botones

Controlad
or

Display
LED's

3. Diagrama ASM

4. Diagrama de tiempo

5. Diagrama esquemtico

6. Descripcin VHDL
Port Map
Controlador
Divisor de frecuencia
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY CLOCK_DIV IS
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
CLOCK_1Hz
END CLOCK_DIV;

:OUT STD_LOGIC;
:OUT STD_LOGIC);

ARCHITECTURE a OF CLOCK_DIV IS
SIGNAL count_1Mhz: STD_LOGIC_VECTOR(5 DOWNTO 0);
SIGNAL
count_100Khz, count_10Khz, count_1Khz:
STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL
count_100hz, count_10hz, count_1hz:
STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL
clock_1Mhz_int, clock_100Khz_int, clock_10Khz_int,
clock_1Khz_int: STD_LOGIC;
SIGNAL
clock_100hz_int, clock_10hz_int, clock_1hz_int:
STD_LOGIC;
BEGIN
PROCESS
BEGIN
-- Divide by 24
WAIT UNTIL clock_50Mhz'EVENT and clock_50Mhz = '1'; -- 24
Mhz
IF count_1Mhz < 49 THEN
count_1Mhz <= count_1Mhz + 1;
ELSE
count_1Mhz <= "000000";
END IF;
IF count_1Mhz < 4 THEN
clock_1Mhz_int <= '0';
ELSE
clock_1Mhz_int <= '1';
END IF;
-- Ripple clocks are used in this code to save prescalar
hardware
-- Sync all clock prescalar outputs back to master clock signal
clock_1Mhz <= clock_1Mhz_int;
clock_100Khz <= clock_100Khz_int;
clock_10Khz <= clock_10Khz_int;
clock_1Khz <= clock_1Khz_int;
clock_100hz <= clock_100hz_int;
clock_10hz <= clock_10hz_int;
clock_1hz <= clock_1hz_int;
END PROCESS;
-- Divide by 10
PROCESS
BEGIN
WAIT UNTIL clock_1Mhz_int'EVENT and clock_1Mhz_int = '1';
IF count_100Khz /= 4 THEN
count_100Khz <= count_100Khz + 1;
ELSE

count_100Khz <= "000";


clock_100Khz_int <= NOT clock_100Khz_int;
END IF;
END PROCESS;
-- Divide by 10
PROCESS
BEGIN
WAIT UNTIL clock_100Khz_int'EVENT and clock_100Khz_int
= '1';
IF count_10Khz /= 4 THEN
count_10Khz <= count_10Khz + 1;
ELSE
count_10Khz <= "000";
clock_10Khz_int <= NOT clock_10Khz_int;
END IF;
END PROCESS;
-- Divide by 10
PROCESS
BEGIN
WAIT UNTIL clock_10Khz_int'EVENT and clock_10Khz_int =
'1';
IF count_1Khz /= 4 THEN
count_1Khz <= count_1Khz + 1;
ELSE
count_1Khz <= "000";
clock_1Khz_int <= NOT clock_1Khz_int;
END IF;
END PROCESS;
-- Divide by 10
PROCESS
BEGIN
WAIT UNTIL clock_1Khz_int'EVENT and clock_1Khz_int = '1';
IF count_100hz /= 4 THEN
count_100hz <= count_100hz + 1;
ELSE
count_100hz <= "000";
clock_100hz_int <= NOT clock_100hz_int;
END IF;
END PROCESS;
-- Divide by 10
PROCESS
BEGIN
WAIT UNTIL clock_100hz_int'EVENT and clock_100hz_int =
'1';
IF count_10hz /= 4 THEN
count_10hz <= count_10hz + 1;
ELSE
count_10hz <= "000";
clock_10hz_int <= NOT clock_10hz_int;

END IF;
END PROCESS;
-- Divide by 10
PROCESS
BEGIN
WAIT UNTIL clock_10hz_int'EVENT and clock_10hz_int = '1';
IF count_1hz /= 4 THEN
count_1hz <= count_1hz + 1;
ELSE
count_1hz <= "000";
clock_1hz_int <= NOT clock_1hz_int;
END IF;
END PROCESS;
END a;
Comparador
library ieee;
use ieee.std_logic_1164.all;
entity comparador is
port (A: in std_logic_vector(3 downto 0);
AGB, ALB, AEB: out std_logic);
end comparador;
architecture comportamiento of comparador is
begin
AGB <= '1' when ( A > "1010") else '0'; -- A > B, salida
AGB a 1, resto a 0
ALB <= '1' when ( A < "1010" ) else '0'; -- A < B, salida
ALB a 1, resto a 0
AEB <= '1' when ( A = "1010" ) else '0'; -- A = B, salida
AEB a 1, resto a 0
end comportamiento;
Contador
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity contador is
port(clk, load,Enable, reset:in std_logic;
--data: in std_logic_vector(3 downto 0);
conta:buffer std_logic_vector(3 downto 0));
end contador;
architecture archicontador of contador is
begin

process (clk,reset)
begin
if reset = '1' then
conta <= "0000";
elsif (clk'event and clk= '1') then
if load = '1' then
conta <= "0000";
elsif Enable = '1' then
conta <= conta + 1;
end if;
end if;
--end if;
end process;
end archicontador;
Decoder
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity DEC_DR_N is
port( BCD: in std_logic_vector(3 downto 0);
SEG7: out std_logic_vector(0 to 6));
end DEC_DR_N;
architecture COMPORTAMIENTO of DEC_DR_N is
begin
process(BCD)
begin
case BCD is
--when "0000" => SEG7 <= "0000001";
when "0001" => SEG7 <= "1001111";
when "0010" => SEG7 <= "0010010";
when "0011" => SEG7 <= "0000110";
when "0100" => SEG7 <= "1001100";
when "0101" => SEG7 <= "0100100";
when "0110" => SEG7 <= "0100000";
when "0111" => SEG7 <= "0001111";
when "1000" => SEG7 <= "0000000";
when "1001" => SEG7 <= "0001100";
when "0000"
=> SEG7 <= "0000001";
when OTHERS => SEG7 <= "1111111";
end case;
end process;
end COMPORTAMIENTO;
7. Asignacin de pines

Seal
Start
Continuar
Reset
Sin
Pap
Emer
ID
PRUI
Activo
LIM
Clock

Pin en la
FPGA
J14
J13
K15
R11
P11
R10
T14
T13
T15
R13
R8

8. Reporte de aprovechamiento

Pin JP2
40
39
38
14
15
16
5
6
4
7

Se puede observar en la imagen que el porcentaje de elementos


lgicos del FPGA que han sido utilizado por el circuito es del 3% y
la cantidad de elementos lgicos es 743
9. Recomendaciones
Conectar de manera ordenada los cables en el protoboard, a su
vez escoger bien las resistencias para que se pueda mostrar
bien en el display y tener en cuenta este es de nodo comn o
ctodo comn.
Leer detenidamente los requerimientos del proyecto para que
pueda funcionar el sistema de la manera deseada.
Tener cuidado con la asignacin de pines de entrada y salida, no
usar los pines de clock.
10. Conclusiones
Se realiz el respectivo anlisis de sistema digital a disear
usando diagramas de bloque, particin funcional, diagramas
ASM y diagramas de tiempo para revisar que se d el
correspondiente cambio de estado y activacin de salidas.
La FPGA es una herramienta muy til para hacer la
implementacin del sistema, ya que solo programndola y
realizando la correcta asignacin de los pines podemos obtener
los resultados deseados.
Se dise un sistema digital para una estacin empaquetadoras
de latas de mermeladas.