Documente Academic
Documente Profesional
Documente Cultură
OBJETIVOS ESPECFICOS:
-Realizar la programacin respectiva para los puertos de entradas como de salida, teniendo como ingreso
los siwcths (SW7:SW4) en RB7:RB4, pulsantes (PB3:PB0) en RB3:RB0 y salidas LEDS (LED7:LED0) en el
puerto C de RC7:RC0 incorporamos un BUZZER conectado en RA0 y un RELE conectado en RA1.
-Realizar la programacin en el software MikroC
-Armar el circuito con sus entradas (DIP-SWICTH, PULSANTES) y sus salidas (LEDS, RELE, BUZZER) con
el Pic 16F887A.
-Verificar el funcionamiento del circuito tanto en fsico como en su simulacin.
ACTIVIDADES DESARROLLADAS
1. MARCO TERICO
EL PIC 16F877A:
El PIC16F877 es un microcontrolador de Microchip Technology fabricado en tecnologa CMOS, su consumo de
potencia es muy bajo y adems es completamente esttico, esto quiere decir que el reloj puede detenerse y los
datos de la memoria no se pierden.
El encapsulado ms comn para este microcontrolador es el DIP (Dual In-line Pin) de 40 pines, propio para usarlo
en experimentacin. [1] (Figura 1).
Adems cada pin se puede configurar como entrada o salida segn sea la necesidad, es decir por medio del uso
de registros en el cual un bit en 0 configura al pin como salida y el bit en 1 configura al pin como entrada.
EL PIN RA4/TOCKI:
Puerto A puede ser configurado como un pin de entrada/salida o como entrada del temporizador/contador.
Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger),
puede reconocer seales un poco distorsionadas y llevarlas a niveles lgicos (cero y cinco voltios). Cuando se usa
como salida digital se comporta como colector abierto (open collector), por lo tanto, se debe poner una resistencia
de pull-up (resistencia externa conectada a un nivel de cinco voltios). Como salida, la lgica es inversa: un "0"
escrito al pin del puerto entrega en el pin un "1" lgico.
Adems, como salida no puede manejar cargas como fuente, slo en el modo sumidero. [1] (Figura 2).
2. PROCEDIMIENTO
1. CONSIDERACIONES DE DISEO
El manejo de puertos I/O, switchs, pulsantes, buzzer y leds, deben ser diseados, ensamblados y programados
para realizar las siguientes funciones, consideraciones y/o restricciones:
1.1. Programar 4 subrutinas que incluyan secuencias de leds, los cuales se encuentran conectados en RC7:RC0.
1.2. Las secuencias sern seleccionadas a travs de interruptores (Dip-swicths) conectados en RB7:RB4.
1.3. Al menos una de la secuencia habilitar los pulsantes conectados en RB3:RB0 que permita observar su
funcionamiento.
1.4. Cuando se presionen los pulsantes, como mnimo se deben generar tonos de audio de frecuencia fija o
variable que son reproducidos por el buzzer que debe ser conectado a RA0.
1.5 Adicionalmente se realizara una combinacin la cual ser habilitada un rel que debe ser conectado en RA1 el
cual encender un led.
2. FLUJOGRAMA
Realizaremos un diagrama de flujo, que es la representacin grfica de lo que software (programa) va a realizar;
el cual incluye las debidas secuencias, interrupciones y condiciones de funcionamiento para la programacin.
(Anexo 1. Diagrama de Flujo).
Para comprobar el correcto funcionamiento del programa, se debe probar en el circuito elctrico-electrnico armado
en el protoboard, lo cual muestra el comportamiento en tiempo real del sistema microcontrolador, sin embargo,
previo a su implementacin, se debe simular en el software ISIS PROTEUS, en el cual se disea el circuito y se
comprueba la simulacin. (Anexo 3. Esquema Elctrico).
Terminada la programacin en MPLAB o MIKROC y una vez que el cdigo ha sido depurado y simulado, entonces
se procede a grabar el microcontrolador PIC 16F877A mediante el Pickit 3 o algn grabador equivalente-compatible
con las plataformas de programacin utilizadas.
3. RECURSOS
RECURSOS
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
ACCESORIOS
2 Protoboard
1 Fuente 5V CD
9 Leds
4 dip swicths
5 pulsantes
1 cuarzo 20Mhz
1 transistor NPN(3904)
24 resistencias (varios valores)
1 PIC 16F877A
2 capacitores 22pf
1 Rel
1 Buzzer
4. BIBLIOGRAFA
RESULTADO(S) OBTENIDO(S):
Una vez concluida la prctica podemos comprobar el correcto funcionamiento de s mismo, a continuacin se
mostrara la posicin de los dip switch con sus respectivas secuencias.
Secuencias 1.(0010) ver figura 3
Y como ltimo mostramos el funcionamiento de una secuencia y el RELE (secuencia 6). (Figura 8).
CONCLUSIONES:
Se logr crear el programa y el circuito de secuencia de 8 leds, el control de un BUZZER, RELE utilizando el
microcontrolador PIC16F877A mediante el diseo con lgica tanto combi nacional como secuencial.
Se logr demostrar el funcionamiento del circuito controlado por el PIC mediante la simulacin y el armado en el
protoboard dando como resultado similar funcionamiento.
RECOMENDACIONES:
Para evitar daos o que los circuitos no funcionen de manera correcta se deber manipular con cuidado el
microcontrolador, enviar la energa necesaria para que dicho dispositivo no sufra desperfecciones
Verificar la continuidad en el armado de todo el circuito
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
ANEXO 3 CODIGO
/*******************************************************************************
FACULTAD DE INGENIERIAS
Programa: Prac1SecuenciaLeds.c
Jorge Molina.
Creacion: 09-Diciembre-2016
Revision: 12-Diciembre-2016
Version: 1.0
4 BOTONES.
*******************************************************************************/
//----------------------------------------------------------------------------//
//-----------------------Prototipo de Funciones-------------------------------//
void iConfigPeripherals(void);
void iSecuenciaLeds00(void);
void iSecuenciaLeds01(void);
void iSecuenciaLeds02(void);
void iSecuenciaLeds03(void);
void iSecuenciaLeds04(void);
void iSecuenciaBuzzer01(void);
void iSecuenciaBuzzer02(void);
void iSecuenciaBuzzer03(void);
void iSecuenciaBuzzer04(void);
void iRele(void);
void iCondiciones(void);
//----------------------------------------------------------------------------//
void iConfigPeripherals(void) {
PORTA=0x00;
PORTB=0x00;//Borramos el PUERTO
PORTC=0x00;//Borramos el PUERTO
//----------------------------------------------------------------------------//
void iSecuenciaLeds00(void) {
PORTC.F0=0;
PORTC.B1=0;
PORTC.RC2=0;
RC3_bit=0;
LED4=0;
PORTC.F5=0;
PORTC.F6=0;
PORTC.F7=0;
//----------------------------------------------------------------------------//
void iSecuenciaLeds01(void) {
int t=350;
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
LED0 = 1;
}while(SW7 && !SW6 && !SW5 && !SW4); // To set infinite loop
//----------------------------------------------------------------------------//
void iSecuenciaLeds02(void) {
RC0_bit=1;
RC1_bit=1;
Delay_Us(1000);
PORTC.RC2=1;
PORTC.RC3=1;
Delay_Us(1000);
PORTC.B4=1;
PORTC.B5=1;
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Us(1000);
PORTC.F6=1;
PORTC.F7=1;
Delay_Us(1000);
//----------------------------------------------------------------------------//
void iSecuenciaLeds03(void) {
LED7 = 1;
}while(!SW7 && !SW6 && SW5 && !SW4); // To set infinite loop
//----------------------------------------------------------------------------//
void iSecuenciaLeds04(void) {
LED1=1;
do{
while (!SW7 && !SW6 && !SW5 && SW4 && PORTC != 128) { // First one way
delay_ms(350);
while (!SW7 && !SW6 && !SW5 && SW4 && PORTC != 1) { // Than back again
delay_ms(350);
//----------------------------------------------------------------------------//
Sound_Init(&PORTA, 0);
Sound_Play(660,250);
Delay_Ms(150);
Sound_Play(660,250);
Delay_Ms(300);
Sound_Play(660,250);
Delay_Ms(300);
Sound_Play(510,250);
Delay_Ms(100);
Sound_Play(660,250);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(300);
Sound_Play(770,250);
Delay_Ms(550);
Sound_Play(380,250);
Delay_Ms(575);
Sound_Play(510,250);
Delay_Ms(450);
Sound_Play(380,250);
Delay_Ms(400);
Sound_Play(320,250);
Delay_Ms(500);
Sound_Play(440,250);
Delay_Ms(300);
Sound_Play(480,200);
Delay_Ms(330);
Sound_Play(450,250);
Delay_Ms(150);
Sound_Play(430,250);
Delay_Ms(300);
Sound_Play(380,250);
Delay_Ms(200);
Sound_Play(660,200);
Delay_Ms(200);
Sound_Play(760,125);
Delay_Ms(150);
Sound_Play(860,250);
Delay_Ms(300);
Sound_Play(700,200);
Delay_Ms(150);
Sound_Play(7600,150);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(350);
Sound_Play(660,200);
Delay_Ms(300);
Sound_Play(520,200);
Delay_Ms(150);
Sound_Play(580,200);
Delay_Ms(150);
Sound_Play(480,200);
Delay_Ms(500);
//----------------------------------------------------------------------------//
Sound_Init(&PORTA, 0);
Sound_Play(440,250);
Delay_Ms(300);
Sound_Play(466,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Sound_Play(466,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(466,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
//////////////////////////
Sound_Play(440,250);
Delay_Ms(300);
Sound_Play(466,125);
Delay_Ms(150);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(466,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(466,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
Sound_Play(440,125);
Delay_Ms(150);
/////////////////////////////////////////////
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Sound_Play(392,250);
Delay_Ms(300);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(370,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
//////
Sound_Play(392,250);
Delay_Ms(300);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(415,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(370,125);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
Sound_Play(392,125);
Delay_Ms(150);
//----------------------------------------------------------------------------//
Sound_Init(&PORTA, 0);
Sound_Play(500,400);
Delay_Ms(400);
Sound_Play(500,400);
Delay_Ms(400);
Sound_Play(500,400);
Delay_Ms(400);
Sound_Play(400,400);
Delay_Ms(300);
Sound_Play(600,200);
Delay_Ms(100);
Sound_Play(500,400);
Delay_Ms(400);
Sound_Play(400,400);
Delay_Ms(300);
Sound_Play(600,200);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(100);
Sound_Play(500,400);
Delay_Ms(600);
Sound_Play(750,400);
Delay_Ms(400);
Sound_Play(750,400);
Delay_Ms(400);
Sound_Play(750,400);
Delay_Ms(400);
Sound_Play(810,400);
Delay_Ms(300);
Sound_Play(600,200);
Delay_Ms(100);
Sound_Play(470,400);
Delay_Ms(400);
Sound_Play(400,400);
Delay_Ms(300);
Sound_Play(600,200);
Delay_Ms(100);
Sound_Play(500,400);
Delay_Ms(600);
//----------------------------------------------------------------------------//
Sound_Init(&PORTA, 0);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(350, 90);
Delay_Ms(108);
Sound_Play(350, 90);
Delay_Ms(108);
Sound_Play(350, 181);
Delay_Ms(217);
Sound_Play(350, 363);
Delay_Ms(436);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(392, 90);
Delay_Ms(108);
Sound_Play(392, 90);
Delay_Ms(108);
Sound_Play(392, 181);
Delay_Ms(217);
Sound_Play(392, 363);
Delay_Ms(436);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(350, 90);
Delay_Ms(108);
Sound_Play(350, 90);
Delay_Ms(108);
Sound_Play(350, 181);
Delay_Ms(217);
Sound_Play(350, 363);
Delay_Ms(436);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(392, 90);
Delay_Ms(108);
Sound_Play(392, 90);
Delay_Ms(108);
Sound_Play(392, 181);
Delay_Ms(217);
Sound_Play(392, 363);
VICERRECTORADO DOCENTE Cdigo: GUIA-PRL-001
Delay_Ms(436);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
Sound_Play(330, 181);
Delay_Ms(217);
//----------------------------------------------------------------------------//
void iRele(void) {
do{
PORTA.F1=1;
//----------------------------------------------------------------------------//
void iCondiciones(void) {
PORTA.F1=0;
iSecuenciaLeds00();
iSecuenciaLeds01();
iSecuenciaLeds02();
iSecuenciaLeds03();
iSecuenciaLeds04();
if (PB0==0 )
iSecuenciaBuzzer01();
if (PB1==0 )
iSecuenciaBuzzer02();
if (PB2==0 )
iSecuenciaBuzzer03();
if(PB3==0 )
iSecuenciaBuzzer04();
iRele();
//----------------------------------------------------------------------------//
int main() {
iConfigPeripherals();
while (1)
iCondiciones();
return 0;