Empacadora

Solo disponible en BuenasTareas
  • Páginas : 5 (1070 palabras )
  • Descarga(s) : 0
  • Publicado : 3 de marzo de 2011
Leer documento completo
Vista previa del texto
DISEÑO EN VHDL DEL CONTROL DE UN PROCESO DE EMPAQUE
Este proyecto funciona así: Existe una máquina empacadora de muñecas; para indicar cuántas muñecas deben ser empacadas por caja, debe haber un teclado y sólo se permite un máximo de nueve muñecas por caja. Una vez se ha digitado el número deseado, se activa la banda transportadora y un sensor envía una señal por cada muñeca detectada. Cuando elsensor ha indicado el número establecido de muñecas, la banda debe parar. Con esta breve descripción, se aprecia que se va a utilizar los proyectos anteriores. Se ha querido plasmar en un solo programa todo la operación, pero vamos a apreciar la evolución del trabajo. El diagrama de bloques para esta implementación es el siguiente:
 
 
 
 
La carta ASM para este diseño contiene dos estadosrelacionados de la siguiente manera:
 
De esta manera, el programa final es:

LIBRARY ieee ; USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all; --esta librería es indispensable para poder utilizar la suma en el contador con std_logic
architecture gabriel of codif_gab is
ENTITY visual IS
   PORT(
      clk             : IN      std_logic ;
      igual        : out     std_logic ;
      enter        : IN      std_logic ;
      sensor     : IN      std_logic ;
      cuenta     : out     std_logic_vector(3 downto 0);
      teclado    : IN      std_logic_vector(9 downto 0);
      banda      : out     std_logic ;
      al_disp   : out     std_logic_vector(6 DOWNTO 0)
       );
END visual;
ARCHITECTURE gabriel OF visual IS
SIGNAL  al_reg : std_logic_vector(3 downto 0); --señales intermedias
SIGNAL  del_reg:   std_logic_vector(3 downto 0);
SIGNAL  test   :  std_logic;
SIGNAL  cnt :  std_logic_vector(3 downto 0);
BEGIN --con test me aseguro que se mantenga la señal en el registro y que no cambie cuando la tecla se suelta
test <= teclado(9) or teclado(8)or teclado(7) or teclado(6) or teclado(5)
  or teclado(4) or teclado(3) orteclado(2)or teclado(1) or teclado(0);
------------------------------------------------------------------
-- codificador
------------------------------------------------------------------
codif_gab: process (teclado)
begin
if test = '1' then
case teclado is
   when "0000000001" => al_reg <= "0000";  ---el cero
   when "0000000010" => al_reg <= "0001";  ---el uno
  when "0000000100" => al_reg <= "0010"; ---el dos
   when "0000001000" => al_reg <= "0011";  ---el tres
   when "0000010000" => al_reg <= "0100";  ---el cuatro
   when "0000100000" => al_reg <= "0101"; ---el cinco
   when "0001000000" => al_reg <= "0110"; ---el seis
   when "0010000000" => al_reg <= "0111";  ---el siete
   when "0100000000" =>al_reg <= "1000";  ---el ocho
   when "1000000000" => al_reg <= "1001"; ---el nueve
   when others => al_reg <= "1111";
  end case;
end if;
end process;
------------------------------------------------------------------
-- registro
------------------------------------------------------------------
reg_gab: PROCESS(al_reg)
                BEGIN
       WAIT UNTILclk = '1';
            if test = '1' then
                               del_reg <= al_reg;
                                               end if;
END PROCESS;
------------------------------------------------------------------
-- decodificador
------------------------------------------------------------------
decodif_gab: process (del_reg)
begin
if enter = '1' then           --con el enter del teclado se puede corregir un número errado hasta que éste
                banda<='1';  -- no se presione y solo cambia la señal en el display cuando
case del_reg is               --se presiona un nuevo número y no cuando cambia a cero al soltarse
    when "0000" => al_disp <= "1111110";  ---el cero
    when "0001" => al_disp <= "0110000"; ---el uno
   ...
tracking img