Vous êtes sur la page 1sur 4

Benemrita Universidad Autnoma de Puebla Facultad de Ciencias de la Electrnica

rea de Digitales www.ece.buap.mx 1



Practica 4 Sistemas Empotrados
Baez Garcia Jose, Campos Lopez Eduardo, Cruz Alonso Ivan, Flores Barrientos Pedro, Vazquez
Delgado Marco Antonio
Facultad de Ciencias de la Electrnica F. C. E.
Benemrita Universidad Autnoma de Puebla


Resumen La prctica tiene la finalidad que mediante
la utilizacin de un oscilador hecho con un opamp, tener
una frecuencia y contar los ciclos que realiza y mostrar el
conteo.

Palabras clave: oscilador, contador, detector de flancos.


I. INTRODUCCIN

Por medio de la utilizacin de un opamp el cual oscila a
una frecuencia que establecemos despus pasa por un
detector de flancos, el cual tiene la finalidad de contar
las oscilaciones del oscilador.

Oscilador
Un oscilador es un sistema capaz de crear
perturbaciones o cambios peridicos. En electrnica un
oscilador es un dispositivo capaz de convertir la energa
de corriente continua en corriente alterna de una
determinada frecuencia1 . Dicho de otra forma, es un
circuito que es capaz de convertir la corriente continua
en una corriente que vara de forma peridica en el
tiempo (corriente peridica); estas oscilaciones pueden
ser senoidales, cuadradas, triangulares, etc.,
dependiendo de la forma que tenga la onda producida.
Un oscilador de onda cuadrada suele denominarse
multivibrador y por lo tanto, se les llama osciladores
slo a los que funcionan en base al principio de
oscilacin natural que constituyen una bobina L
(inductancia) y un condensador C (Capacitancia),
mientras que a los dems se le asignan nombres
especiales.

Figura 1. Grafica de un oscilador de onda cuadrada.



II. PLANTEAMIENTO DEL PROBLEMA

A continuacin se muestra un diagrama de bloques para
la solucin del problema.










El bloque del oscilador solo es un circuito integrador
(opamp) el cual nos generara una frecuencia que
nosotros podremos modificar a nuestra conveniencia.

El bloque del detector de flancos tiene el objetivo de
detectar las oscilaciones que da el opam en un tiempo
determinado.

El bloque del contador simplemente cuenta cuantas
oscilaciones da el oscilador.


Oscilador
Detector de flancos
Sys Generator
Filtro de media Decodificador
Contador
Displays

Benemrita Universidad Autnoma de Puebla Facultad de Ciencias de la Electrnica
rea de Digitales www.ece.buap.mx 2
El bloque del filtro de media tiene la finalidad de
obtener el promedio del conteo del oscilador.

El bloque del decodificador simplemente al nmero que
nos dio el promedio de muestreo lo decodifica a cdigo
de display de 7 segmentos.

Y por ltimo el bloque de displays muestra el nmero
de oscilaciones de la prctica.


III. IMPLEMENTACIN

Para la realizacin de los bloques se tiene lo siguiente


Figura 2. Oscilador

Como se puede ver en la figura 2 se tiene una
configuracin con una opamp en donde las resistencias
R
2
, R
3
y R
4
tienen un valor de 1K y la frecuencia del
circuito est dada por la siguiente formula:




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

Vous aimerez peut-être aussi