Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/05/2012 #1


Contador 0 a 99 con pin de habilitacion
Que tal todos necesito ayuda urgente... tengo que hacer un contador de 0 a 99 en VHDL en la tarjeta Basys 2. El diseño del contador ya lo tengo, y me funciona perfecto. El problema es que tengo que agregarle una entrada de 8 bits, en la cual los 4 menos significativos manejan el contador de unidades y los ultimos 4 manejan el de decenas. al yo ubicar cualquier dato en estas entradas y presionar un pulsador de la tarjeta el contador debe comenzar a contarme desde este numero.

La descripcion en VHDL del contador que ya tengo es la siguiente:

entity tercero is
Port ( clk : in STD_LOGIC;
hab : in STD_LOGIC;
up : in STD_LOGIC;
seg : out STD_LOGIC_VECTOR (6 downto 0);
enable : out STD_LOGIC_VECTOR (3 downto 0));
end tercero;

architecture Behavioral of tercero is

signal div: STD_LOGIC_VECTOR (25 DOWNTO 0);
signal uno: STD_LOGIC_VECTOR (3 DOWNTO 0);
signal dos: STD_LOGIC_VECTOR (3 DOWNTO 0);
signal tres: STD_LOGIC_VECTOR (3 DOWNTO 0);
begin

PROCESS(clk)
begin
if((clk 'event)and(clk='1'))then
div<=div+1;
end if;
end process;

process(div(24))
begin
if((div(24)'event)and(div(24)='1'))then
if(hab='1')then
if(up='1')then
if(dos<"1001")then
dos<=cu+1;
else
dos<="0000";
tres<=tres+1;
if(tres="1001")then
tres<="0000";
end if;
end if;
else
if(dos>"0000")then
dos<=dos-1;
else
dos<="1001";
if(tres="0000")then
tres<="1001";
else
tres<=tres-1;
end if;
end if;
end if;
end if;
end if;
end process;

process(div(15))
begin
if((div(15)'event)and(div(15)='1'))then
case uno is
when "1110" =>
case tres is
when "0000" =>
seg<="0000001";
when "0001" =>
seg<="1001111";
when "0010" =>
seg<="0010010";
when "0011" =>
seg<="0000110";
when "0100" =>
seg<="1001100";
when "0101" =>
seg<="0100100";
when "0110" =>
seg<="1100000";
when "0111" =>
seg<="0001111";
when "1000" =>
seg<="0000000";
when "1001" =>
seg<="0001100";
when others =>
seg<="0110000";
end case;
uno<="1101";
when "1101" =>
case dos is
when "0000" =>
seg<="0000001";
when "0001" =>
seg<="1001111";
when "0010" =>
seg<="0010010";
when "0011" =>
seg<="0000110";
when "0100" =>
seg<="1001100";
when "0101" =>
seg<="0100100";
when "0110" =>
seg<="1100000";
when "0111" =>
seg<="0001111";
when "1000" =>
seg<="0000000";
when "1001" =>
seg<="0001100";
when others =>
seg<="0110000";
end case;
uno<="1110";
when others =>
uno<="1110";
END case;
end if;
enable<=uno;
end process;

end Behavioral;


Es decir, a partir del numero que yo coloque en la entrada de 8 bits, desde ese numero debe comenzar la cuenta.
17/05/2012 #2


Hola,
Por lo que he podido entender de tu código, podrías incluir una sentencia de carga de los datos en el proceso de los contadores. En el else de hab = '1', o creando una nueva señal de carga.

Como recomendación incluye comentarios o al menos pon nombres de señales que ayuden a entender qué hacen. Por ejemplo, las señales uno, dos, tres son poco descriptivas de lo que hacen. Esto facilita la tarea a los que te quieren ayudar en este foro.

Saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.