Académique Documents
Professionnel Documents
Culture Documents
Del bloque del detector de flancos es un cdigo de
cuenta cuantos flancos de subida da el oscilador en un
tiempo determinado, como el oscilador nos da una seal
cuadrada, por lo que tenemos flancos en alto.
Del bloque del contador es un cdigo que nos
acumulada los flancos en alto del oscilador.
Del bloque filtro de media es un cdigo que obtiene el
promedio del conteo de flancos del oscilador, es decir,
que obtiene un nmero determinado de flancos en un
determinado tiempo y lo divide entre el nmero de las
veces que obtuvimos los conteos, es decir, que obtiene
un conteo de un determinado tiempo y lo guarda
despus obtiene otra cuenta y lo guarda despus suma
los flancos y lo divide entre el nmero de veces que se
obtuvieron el conteo.
Esto es para obtener un nmero promedio que da de
flancos el oscilador.
Del bloque del decodificador simplemente del nmero
promedio de flancos lo convierte a cdigo de display de
7 segmentos el cual se muestra en la figura 3.
Figura 3. Cdigo de displays de 7 segmentos
Y por ltimo el bloque del dislay es simplemente
mostrar el nmero promedio de flancos que produce el
oscilador.
IV. CONCLUSIONES
Como observamos en el circuito ya implementado el
conteo de las oscilaciones del circuito tenan una
pequea variacin esto es porque ya en el circuito ya
intervienen muchas variables que estn fuera de nuestro
control.
La prctica estuvo relativamente fcil por los
componentes de la prctica, la construccin de los
cdigos de los bloques que intervenan el nico que
presento poca dificultad fue el bloque del detector de
flancos.
V. AGRADECIMIENTOS
Agradecemos al nuestro profesor Carlos Garca Lucero
por su excelente mtodo de enseanza y por su
paciencia para resolver nuestras dudas que nos surgan
en la realizacin de la practica
Benemrita Universidad Autnoma de Puebla Facultad de Ciencias de la Electrnica
rea de Digitales www.ece.buap.mx 3
VI. APNDICES
El siguiente cdigo es de todo el programa en VHDL
del programa:
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 02:16:49 11/15/2013
-- Design Name:
-- Module Name: module - 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;
use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
-- 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 module is
PORT (
CLK : IN STD_LOGIC;
INPUT : IN STD_LOGIC;
SWITCHES : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
LEDS : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
MUESTREO : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DISPLY : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
HABILITACION : OUT STD_LOGIC_VECTOR(1 DOWNTO
0);
HABILITACION0 : OUT STD_LOGIC;
HABILITACION1 : OUT STD_LOGIC
);
end module;
architecture Behavioral of module is
SIGNAL TIMER : INTEGER RANGE 0 TO 49999999 :=0;
SIGNAL COUNT : INTEGER RANGE 0 TO 49999999 :=0;
SIGNAL STA : STD_LOGIC :='0';
SIGNAL SIG : STD_LOGIC :='0';
SIGNAL VALUE : INTEGER RANGE 0 TO 49999999 :=0;
SIGNAL STATUS : STD_LOGIC :='0';
SIGNAL ACU : INTEGER RANGE 0 TO 49999999 :=0;
SIGNAL TIMEM : INTEGER RANGE 0 TO 49999999 :=49999;
SIGNAL MUESTRA : INTEGER RANGE 0 TO 49999999 :=0;
SIGNAL ADDING : INTEGER RANGE 0 TO 100 :=0;
SIGNAL OUT_MUESTRA : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL OUT_VALUE : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL NOTHING : STD_LOGIC:='0';
SIGNAL OUTPUT : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL CODE : INTEGER RANGE 0 TO 499:=0;
SIGNAL DECENAS : INTEGER RANGE 0 TO 9:=0;
SIGNAL DEC : INTEGER RANGE 0 TO 9:=0;
SIGNAL UNI : INTEGER RANGE 0 TO 9:=0;
SIGNAL DOUT : STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL UNIDADES : INTEGER RANGE 0 TO 9:=0;
SIGNAL UOUT : STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL T : STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL T1 : STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL COUNTING : INTEGER RANGE 0 TO 100:=0;
COMPONENT untitled_cw
PORT(
ce : IN std_logic;
clk : IN std_logic;
gateway_in : IN std_logic_vector(15 downto 0);
gateway_in1 : IN std_logic_vector(15 downto 0);
gateway_out : OUT std_logic_vector(15 downto 0)
);
END COMPONENT;
begin
Inst_untitled_cw: untitled_cw PORT MAP(
ce => NOTHING,
clk => CLK,
gateway_in => OUT_VALUE,
gateway_in1 => OUT_MUESTRA,
gateway_out => OUTPUT
);
LP: PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
IF MUESTREO = "0000" THEN
MUESTRA <= 64;
END IF;
IF MUESTREO = "0001" THEN
MUESTRA <= 8;
END IF;
IF MUESTREO = "0011" THEN
MUESTRA <= 16;
END IF;
IF MUESTREO = "0111" THEN
MUESTRA <= 110;
END IF;
IF SWITCHES = "00000000" THEN
TIMEM <= 49999;
--LEDS <= "00000000";
END IF;
IF SWITCHES = "00000001" THEN
TIMEM <= 499999;
--LEDS <= "00000001";
END IF;
IF SWITCHES = "00000011" THEN
TIMEM <= 4999999;
--LEDS <= "00000011";
END IF;
IF SWITCHES = "00000111" THEN
TIMEM <= 49999999;
--LEDS <= "00000111";
END IF;
STATUS <= '0';
SIG <= INPUT;
TIMER <= TIMER+1;
IF TIMER = TIMEM THEN
STATUS <= '1';
END IF;
IF TIMER > TIMEM THEN
TIMER <= 0;
COUNT <= 0;
ADDING <= ADDING+1;
END IF;
IF ADDING = MUESTRA THEN
OUT_VALUE <= CONV_STD_LOGIC_VECTOR(ACU,16);
OUT_MUESTRA <= CONV_STD_LOGIC_VECTOR(MUESTRA,16);
Benemrita Universidad Autnoma de Puebla Facultad de Ciencias de la Electrnica
rea de Digitales www.ece.buap.mx 4
END IF;
--LEDS <= OUTPUT;
IF ADDING > MUESTRA THEN
VALUE <= 0;
ACU <= 0;
ADDING <=0;
END IF;
IF STATUS = '1' THEN
VALUE <= COUNT;
ACU <= ACU+COUNT;
END IF;
--
IF TIMER = 4999 THEN
IF T = "00" THEN
DISPLY <= DOUT;--5
HABILITACION <= "01";
T <= "01";
ELSE
DISPLY <= UOUT;--0
HABILITACION <= "10";
T <= "00";
END IF;
END IF;
--
IF STA = '1' THEN
COUNT <= COUNT+1;
END IF;
END IF;
END PROCESS LP;
STA<= (NOT SIG) and INPUT;
NEX: PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
--LEDS <= OUTPUT;
IF T1 = "00" THEN
CODE <= CONV_INTEGER(OUTPUT);
LEDS <= OUTPUT;
UNIDADES <= 0;
DECENAS <= 0;
COUNTING <= 0;
T1 <= "01";
END IF;
IF T1 = "01" THEN --0
IF CODE < 255 THEN --1
COUNTING <= COUNTING+1;
UNIDADES <= UNIDADES+1;
IF UNIDADES > 8 THEN --2
DECENAS <= DECENAS+1;
UNIDADES <= 0;
END IF; --2
IF COUNTING = CODE THEN --3
UNI <= UNIDADES;
DEC <= DECENAS;
ELSIF COUNTING > CODE THEN
T1 <= "00";
END IF; --3
ELSE
T1 <= "00";
UNI <= 0;
DEC <= 0;
END IF; --1
END IF;--0
IF DEC>0 THEN
HABILITACION0 <= '1';
ELSE
HABILITACION0 <= '0';
END IF;
CASE UNI IS
WHEN 0 => UOUT <="1000000";
WHEN 1 => UOUT <="1111001";
WHEN 2 => UOUT <="0100100";
WHEN 3 => UOUT <="0110000";
WHEN 4 => UOUT <="0011001";
WHEN 5 => UOUT <="0010010";
WHEN 6 => UOUT <="0000010";
WHEN 7 => UOUT <="1111000";
WHEN 8 => UOUT <="0000000";
WHEN 9 => UOUT <="0010000";
END CASE;
CASE DEC IS
WHEN 0 => DOUT <="1000000";
WHEN 1 => DOUT <="1111001";
WHEN 2 => DOUT <="0100100";
WHEN 3 => DOUT <="0110000";
WHEN 4 => DOUT <="0011001";
WHEN 5 => DOUT <="0010010";
WHEN 6 => DOUT <="0000010";
WHEN 7 => DOUT <="1111000";
WHEN 8 => DOUT <="0000000";
WHEN 9 => DOUT <="0010000";
END CASE;
END IF;
END PROCESS NEX;
end Behavioral;
VII. REFERENCIAS
http://electronicayrobotica.wordpress.com/2013/03/2
3/uso-del-adc-con-pic16f877-display-de-7-segmentos/
Pgina para obtener el cdigo para el display de 7
segmentos