Está en la página 1de 14

Universidad Politécnica de Aguascalientes

MTR03D
Electrónica digital
“Manual”

Integrantes:
Electrónica digital Septiembre –Diciembre 2017
Universidad Politécnica de Aguascalientes
Nombre: Cristian de Jesús Zamarripa Covarrubias. Matrícula: UP160105
Nombre: Guillermo Gallegos Jauregui. Matrícula: UP160453
Nombre: Erick Gerardo Damasco Flores. Matrícula: UP160503
Nombre: Diana Haydee Chávez Delgado Matrícula: UP160127

M.C. Luis Guillermo Guerrero Díaz de León


guillermo.guerrero@upa.edu.mx

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes
Reloj digital.
DESARROLLO DE DISPLAYS:

Se procedió a realizar la elaboración de los displays 7 segmentos en base a un molde realizado


primeramente a su vez se llevo a cabo la realización de colocar los leds en paralelo para
consumir menor voltaje y menos fuentes a su vez

En la siguiente imagen se muestra la realización de los leds interconectados en paralelo, cada


agujero realizado se hizo con un cúter y/o tijeras. Para unir diferentes partes de esta maqueta
se utilizó silicón.

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes

En la imagen anterior se muestra ya terminada la conexión de los leds de los displays, por la
parte de atrás se coloco una cartulina para cubrir el cable y las conexiones de los leds.

En la imagen anterior se muestran algunos segmentos de un display funcionando ya con la


maqueta o parte de enfrente colocada.

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes

Imagen donde se muestran ya listos los displays montados y casi terminado sola queda pintar.

Ultima prueba del sistema funcionando.

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes

Conexiones de los displays por la parte de atrás, cabe mencionar que se utilizaron dos leds por
segmento lo cual se conectaron en paralelo.

PROGRAMA:

Nuestro proyecto consiste en representar en cuatro displays un reloj digital, este reloj se elaboró
con displays de 16 cm de largo, y se usaron dos botones y un switch.

Al realizar este proyecto, primeramente, se comenzó con el código en pic c, el programa se realizo
con un microcontrolador 18f452. Se pusieron las funciones principales, en otras palabras, los
fusibles el clock las librerías y diferentes funciones más. A continuación, se colocó los botones
correspondientes a algunos puertos del micro, se asignaron como entradas con la función de
aumentar a los displays de las unidades de las horas y los minutos respectivamente.

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes

Este programa comenzó asignando variables para cada uno de los displays, a continuación,
declaramos cada puerto donde se conectarían los displays los igualamos a 0 cada variable. Y
después comenzamos con un if principal, este if principal lo pusimos para la condición de que con
un switch funcionara todo el circuito, es decir, el funcionamiento de este switch es prender y apagar
todo el circuito.

Después del switch asignamos cada variable a cada puerto, y


comenzamos el ciclo sumando nuestras unidades mas nuestras
mismas unidades, que empiece el conteo, después de este comando
se colocó un delay de 60000 milisegundos para que cambie
cada 60 segundos y haga correctamente su funcionamiento
(se puso 1000 milisegundos solamente para probar que el
programa hiciera su trabajo correctamente).

Después, se puso una condición que si las unidades eran igual a 10 que
esas mismas unidades volvieran a cero y que las decenas
comenzaran su conteo de igual manera. A continuación, se

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes
colocó otra condición que decía que si las decenas eran igual a 6 estas mismas se iniciaran
nuevamente en cero y las unidades de las horas comenzaran a contar.

Posteriormente se colocó otra condición igual que decía que si las unidades de las horas eran igual
a 10 se iniciara en cero estas mismas y que las decenas de las horas comenzara a contar. Luego,
pusimos otra condición que decía que si las unidades de las horas eran 2 y las unidades de las horas
eran 4 todas las variables se regresaran a cero.

SIMULACION EN PROTEUS:

Terminando la programación pasamos a elaborar el circuito en el simulador con nombre proteus,


se buscaron todos y cada uno de los componentes. NOTA: se utilizaron cuatro decodificadores
74ls48 que son para display de cátodo común. Se realizó la conexión de cada uno de los
componentes tanto de display a los decodificadores y de los decodificadores al micro, también se
conectaron los dos botones y el switch para el control de todo el circuito.

Electrónica digital Septiembre –Diciembre 2017


Universidad Politécnica de Aguascalientes

A continuación, se muestra la simulación ya funcionando.

Después de simularlo en proteus se procedió a armarlo con lenguaje VHDL para poder visualizar
el código e identificar futuros problemas que podría ocasionar en el microcontrolador y para poder
identificar futuras mejoras que podrían hacerse para mejorar el circuito a continuación se muestra
el código en VHDL.

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

Electrónica digital Septiembre –Diciembre 2017


U n i v e r s i d a d Po l i t é c n i c a d e Ag u a s c a l i e n t e s
use ieee.std_logic_unsigned.all;

entity crono is
port(reset,clk_50,stop,aumenta,baja:in std_logic;
minuni, mindec, horauni, horadec: out std_logic_vector(6 downto 0)
);
end entity;

architecture arq of crono is


signal muni, mdec, huni, hdec: integer range 0 to 15;
signal cont: integer range 0 to 60000000;
signal clk, paro: std_logic;
begin
process(clk_50)
begin
if (rising_edge(clk_50))then
if cont=5000000 then
clk<=not clk;
cont<=0;
else
cont<=cont+1;
end if;
end if;
end process;

process(stop)
begin
if (falling_edge(stop)) then
paro <= not paro;
end if;
end process;

process(clk,reset)
begin
if reset = '0' or (reset = '0' and paro = '1')then
muni <= 0;
mdec <= 0;
huni <= 0;
hdec <= 0;
elsif(rising_edge(clk) and paro = '1') then
if(hdec=2 and huni=3 and muni=9 and mdec=5)then
muni <= 0;
mdec <= 0;
huni <= 0;
hdec <= 0;
else
if aumenta = '0' then
huni<= huni+1;
if huni= 9 then
huni<=0;
end if;
else

Electrónica digital Septiembre –Diciembre 2017


U n i v e r s i d a d Po l i t é c n i c a d e Ag u a s c a l i e n t e s
muni <= muni + 1;

if muni = 9 then -- Minutos Unidades


muni <= 0;
mdec <= mdec + 1;
if mdec = 5 then -- Minutos
Decenas
mdec <= 0;
huni <= huni + 1;
if huni = 9 then -- Horas
Unidades
huni <= 0;
hdec <= hdec + 1;
if hdec = 2 then --Horas
Decenas
hdec <= 0;

end if;
end if;
end if;
end if;
end if;
end if;
end if;
case muni is -------------------------- Minutos Unidades
when 0 => minuni <= "0000001";
when 1 => minuni <= "1001111";
when 2 => minuni <= "0010010";
when 3 => minuni <= "0000110";
when 4 => minuni <= "1001100";
when 5 => minuni <= "0100100";
when 6 => minuni <= "0100000";
when 7 => minuni <= "0001111";
when 8 => minuni <= "0000000";
when 9 => minuni <= "0000100";
when others => minuni <= "0001000";
end case;
case mdec is ---------------------------- Minutos Decenas
when 0 => mindec <= "0000001";
when 1 => mindec <= "1001111";
when 2 => mindec <= "0010010";
when 3 => mindec <= "0000110";
when 4 => mindec <= "1001100";
when 5 => mindec <= "0100100";
when others => mindec <= "0001000";
end case;

case huni is --------------------------- Horas Unidades


when 0 => horauni <= "0000001";
when 1 => horauni <= "1001111";
when 2 => horauni <= "0010010";
when 3 => horauni <= "0000110";

Electrónica digital Septiembre –Diciembre 2017


U n i v e r s i d a d Po l i t é c n i c a d e Ag u a s c a l i e n t e s
when 4 => horauni <= "1001100";
when 5 => horauni <= "0100100";
when 6 => horauni <= "0100000";
when 7 => horauni <= "0001111";
when 8 => horauni <= "0000000";
when 9 => horauni <= "0000100";
when others => horauni <= "0001000";
end case;
case hdec is ----------------------------- Horas Decenas
when 0 => horadec <= "0000001";
when 1 => horadec <= "1001111";
when 2 => horadec <= "0010010";
when 3 => horadec <= "0000110";
when 4 => horadec <= "1001100";
when 5 => horadec <= "0100100";
when others => horadec <= "0001000";
end case;
end process;
end architecture;

Después de realizar el código en VDHL en el FPGA se precedió a realizar el programa en el micro


como se explico anteriormente el cual es el que se muestra a continuación, cabe resaltar que el
programa se realizo con el microcontrolador PIC18F4553 y el programa se realizó en pic c.

#include <18F4553.h>
#device adc=8
#FUSES NOWDT, WDT128, HS, NOPROTECT, NOBROWNOUT, NOPUT, NOCPD, STVREN,
NODEBUG, NOLVP, NOWRT, NOWRTD, IESO, FCMEN, PBADEN, NOWRTC, NOWRTB,
NOEBTR, NOEBTRB, NOCPB, MCLR, LPT1OSC, NOXINST, PLL12, CPUDIV4, USBDIV,
VREGEN, ICPRT
#use delay(clock=20000000)
#include<stdio.h>
#include<stdlib.h>
void main()
{

int8 horas_unidades,horas_decenas,minutos_unidades, minutos_decenas,Puerto,parte_baja,parte_alta;

set_tris_D (0b00001111);
set_tris_B (0x00);
set_tris_A (0x00);
set_tris_C (0x00);
set_tris_E (0bp1111);
horas_decenas=0;
horas_unidades=0;
minutos_decenas=0;
minutos_unidades=0;
output_d(0);
output_b(0);
output_a(0);
output_c(0);

Electrónica digital Septiembre –Diciembre 2017


U n i v e r s i d a d Po l i t é c n i c a d e Ag u a s c a l i e n t e s

while(TRUE)
{
output_a(horas_decenas);
output_b(horas_unidades);
output_c(minutos_decenas);
output_d(minutos_unidades);
inicio:
if(INPUT(PIN_E0)==1)
{
delay_ms(100);
minutos_unidades=minutos_unidades+1;
if(minutos_unidades==10)
{
output_c(minutos_decenas);
minutos_unidades=0;
minutos_decenas=minutos_decenas+1;
}
if(minutos_decenas==6)
{
output_b(horas_unidades);
minutos_unidades=0;
minutos_decenas=0;
horas_unidades= horas_unidades+1;
}
if(horas_unidades==10)
{

horas_unidades=0;
horas_decenas= horas_decenas+1;
}
if(horas_decenas==2 && horas_unidades==3 && minutos_decenas==5 && minutos_unidades==9)
{
horas_decenas=0;
horas_unidades=0;
minutos_decenas=0;
minutos_unidades=0;
}
}
if(INPUT(PIN_E1)==1)
{
minutos_decenas=minutos_decenas+1;
delay_ms(100);
if (minutos_decenas==10)
{
minutos_decenas=0;
}
}
if(INPUT(PIN_E2)==1)
{
output_b(horas_unidades);
horas_unidades=horas_unidades+1;

Electrónica digital Septiembre –Diciembre 2017


U n i v e r s i d a d Po l i t é c n i c a d e Ag u a s c a l i e n t e s
delay_ms(100);
if (horas_unidades==10)
{
horas_unidades=0;
}
}
}//WHILE
}//MAIN

Electrónica digital Septiembre –Diciembre 2017

También podría gustarte