Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
POLITCNICA DEL
LITORAL
FACULTAD DE INGENIERA
ELCTRICA Y COMPUTACIN
LABORATORIO DE SISTEMAS
DIGITALES
SISTEMA DIGITAL PARA UNA
ESTACIN EMPAQUETADORAS DE
LATAS DE MERMELADAS
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
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