Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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.
Imagen donde se muestran ya listos los displays montados y casi terminado sola queda pintar.
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.
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, 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
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:
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;
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;
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
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;
#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()
{
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);
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;