Download - Practica No.7
Dispositivos Programables Unidad IV
MC Rafael Herrera García
ING. SISTEMAS
COMPUTACIONALES
MATERIA:
SISTEMA PROGRAMABLES TEMA:
“PRACTICA 7” PRESENTA
Carrasco García Libertad
Oltehua Rangel María Lizette
Rosas Cortes José de Jesús
Dispositivos Programables Unidad IV
MC Rafael Herrera García
Práctica No. 7
Nombre: Uso de XC8 para programar PIC’s
Introducción:
MPLAB-X es un ambiente de desarrollo para microcontroladores basado en la plataforma
NETBEANS, Microchip lo provee para el desarrollo de aplicación de PIC’s fabricados por ellos, así
como del ensamblador mpasmx que sirve para la construcción de programas que podrán
posteriormente grabarse en el PIC a utilizar.
Materiales y equipo:
1. Computadora con Windows xp, 7 o 8
2. MPLAB-X instalado
3. XC8
Metodología:
1.- Utilizando el diagrama de la práctica 6 elaborar los siguientes programas:
Diseñe un programa para controlar el nivel de depósito de líquido de 1 tanque que
utilizan 2 bombas, conectadas de la siguiente forma:
Dispositivos Programables Unidad IV
MC Rafael Herrera García
SV es indicador de tanque vacio
SLL es indicador de tanque lleno
SR es indicador de tanque al tope.
B1 es la bomba 1
B2 es la bomba2
PORTA se utiliza como puerto de entrada al microcontrolador, bits 0..2.
Un 0 en RA0 indica SV seco un 1 indica SV mojado
Un 0 en RA1 indica SLL seco un 1 indica SLL mojado
Un 0 en RA2 indica SR seco un 1 indica SR mojado
Cuando los 3 indicadores estén en seco indica que el tanque está vacío así que se
encenderán las 2 bombas que son controladas por los puertos RD5 y RD6 así como
el led de tanque vacío conectado en RD0.
Cuando el indicador SV se moje, un 1 en la entrada RA0 se encenderá un led
conectado en RD2 que indica que el tanque se está llenando
Cuando el indicador SLL se moje, un 1 en la entrada RA1, indica que el tanque está
lleno y la bomba 2 se apagara, un 0 en RD6 dejando que la bomba 1 siga subiendo
Dispositivos Programables Unidad IV
MC Rafael Herrera García
agua al tanque, encendiéndose el led conectado en el puerto RD3 indicando que el
tanque está lleno, se apagara el led en RD0.
Cuando el indicador SR se moje, un 1 en la entrada RA2 indica que el tanque llego
al tope, se apagara la bomba 1, se apagara el led conectado en RD2.
Un mal funcionamiento de los indicadores hará que el sistema apague las bombas
apague todos los leds encendidos y enciendo el led conectado en el puerto RD4.
Ejemplos programa en funcionamiento
Bomba 2 Bomba 1
T. vacío
Llenando
Lleno
Fallo Gral.
Dispositivos Programables Unidad IV
MC Rafael Herrera García
/* * File: practica7.c * Author: Patricia * * Created on 28 de abril de 2014, 12:34 PM */ unsigned char valS; // Estado del automata unsigned char valE; void setup(void) { OSCCON=0x68; PORTD=0x00; TRISD=0x00; ANSEL=0x00; PORTA=0x00; TRISA=0xFF; } void loop(void) { while(1){ valE=PORTA; switch (valE) { case 0x0:valS=0X61;break; case 0x1:valS=0X65;break; case 0x3:valS=0X2C;break; case 0x7:valS=0X8;break;
Dispositivos Programables Unidad IV
MC Rafael Herrera García
void loop(void) { while(1){ valE=PORTA; switch (valE) { case 0x0:valS=0X61;break; case 0x1:valS=0X65;break; case 0x3:valS=0X2C;break; case 0x7:valS=0X8;break; default:valS=0X10;break; } PORTD=valS; } } void main(void) { setup(); loop(); return; }
Dispositivos Programables Unidad IV
MC Rafael Herrera García
2.- Elaborar programa para controlar semáforo con 3 luces (Verde, Amarillo, Rojo)
Considere que el verde deba tardar 1 minuto, después parpadear durante 5 segundos y pasar
a amarillo dejándolo 10 segundos y pasar a rojo dejándolo en 45 segundos, Repetir el
proceso de forma infinita.
Semaforo.
Luz Roja
Dispositivos Programables Unidad IV
MC Rafael Herrera García
Luz Amarilla
Luz Verde
void delay(unsigned int a){ //Retraso for(;a>0;a--) for(unsigned int b=a;b>0;b--); } void blink(void){ //parpadeo for(int a=21;a>0;a--) { PORTDbits.RD0^=0x01; delay(200); } } void setup(void) { OSCCON=0x68; //Config. reloj (4min) PORTD=0x00; //limpia Puert D TRISD=0x00; //Config. Puert D (Salida) ANSEL=0x00; PORTA=0x00; TRISA=0xFF; } void loop(void) {
Dispositivos Programables Unidad IV
MC Rafael Herrera García
3.- Modificar el programa anterior para incorporar el circuito de la practica 2 que se
utilizará para determinar el funcionamiento del semáforo, cuando detecto obscuridad
deberá el semáforo pasar a modo nocturno (amarillo parpadeando) en caso contrario
funcionara de forma como se indico en el ejercicio anterior.
void loop(void) { while(1){ PORTD=0x1; delay(3000); // retraso 3000 = 60s blink(); //parpadeo PORTD=0x2; delay(1200); //1200 = 10s PORTD=0x4; delay(2600); //2600 = 45s } } void main(void) { setup(); loop(); return; }
Dispositivos Programables Unidad IV
MC Rafael Herrera García
Detectando luz y funcionando Normal
Funcionando de Noche
Dispositivos Programables Unidad IV
MC Rafael Herrera García
void nightDelay(unsigned int x){ for(;x>0;x--)for(unsigned int y=x;y>0;y--); } void dayDelay(unsigned int x){ for(;x>0;x--)if(PORTAbits.RA0)break;else{for(unsigned int y=x;y>0;y--)if(PORTAbits.RA0)break; } } void verde(void){ for(int x=16;x>0;x--){ PORTDbits.RD0^=0X01; dayDelay(200); } } void amarillo(void){ while(PORTAbits.RA0){ PORTDbits.RD1^=0x01; nightDelay(200); } } void setup(void) { OSCCON=0x68; PORTD=0x00; //limpia Puert D TRISD=0x00; //Config. Puert D (Salida) ANSEL=0x00; PORTA=0x00; TRISA=0xFF; } void loop(void) { while(1){ while(!PORTAbits.RA0){ PORTD=0x1; if(PORTAbits.RA0)break;else dayDelay(2800); //2800= 60s if(PORTAbits.RA0)break;else verde(); PORTD=0x2; if(PORTAbits.RA0)break;else dayDelay(1150); //1150= 10s PORTD=0x4; if(PORTAbits.RA0)break;else dayDelay(2400); // 240= 45s } PORTD=0x0; amarillo(); } } void main(void) { setup(); loop(); return;
}
Dispositivos Programables Unidad IV
MC Rafael Herrera García
4.- Elaborar un programa que permita al microcontrolador controlar un cruce de 3
semaforos, considerar una avenida de 2 sentidos y una calle de un solo sentido, en la
avenida de 2 sentidos uno de ellos pueda dar vuelta para incorporarse a la calle.
Tomando como ejemplo bulevar Córdoba-Peñuela
Utilizaremos un led verde para representar cuando si puede avanzar para poder dar vuelta
Dispositivos Programables Unidad IV
MC Rafael Herrera García
Tomando en cuenta estamos de frente la imagen de muestra los 2 semáforos van haca arriba y
hacia abajo están en rojos y en verde el carril atraviesa el bulevar
Dispositivos Programables Unidad IV
MC Rafael Herrera García
void nightDelay(unsigned int x){ for(;x>0;x--)if(!PORTAbits.RA0)break; else{ for(unsigned int y=x;y>0;y--)if(!PORTAbits.RA0)break; } } void dayDelay(unsigned int x){ for(;x>0;x--)if(PORTAbits.RA0)break; else{ for(unsigned int y=x;y>0;y--)if(PORTAbits.RA0)break; } } void parpadearSemaf1ySemaf2(void){ for(int x=21;x>0;x--)if(PORTAbits.RA0)break; else{ PORTCbits.RC0^=0x01; PORTCbits.RC3^=0x01; PORTCbits.RC4^=0x01; dayDelay(200); } } void parpadearSemaf3(void){ for(int x=21;x>0;x--)if(PORTAbits.RA0)break; else{ PORTDbits.RD0^=0x01; dayDelay(200); } } void parpadearNoche(void){ while(PORTAbits.RA0){ PORTDbits.RD2^=0x01; PORTCbits.RC1^=0x01; PORTCbits.RC5^=0x01; dayDelay(200); } } void setup(void){
OSCCON=0x68; PORTD=0x00; //limpia Puert D TRISD=0x00; //Config. Puert D (Salida) PORTC=0X00; TRISC=0X00; ANSEL=0x00; PORTA=0x00; TRISA=0xFF; } void loop(void){ while(1){ while(!PORTAbits.RA0){ PORTC=0x19; PORTD=0x4; if(PORTAbits.RA0)break; else dayDelay(1000); parpadearSemaf1ySemaf2(); PORTC=0x22; if(PORTAbits.RA0)break; else dayDelay(500); PORTC=0x4; PORTD=0x1; if(PORTAbits.RA0)break; else dayDelay(900); parpadearSemaf3(); PORTD=0x2; if(PORTAbits.RA0)break; else dayDelay(500); } PORTD=0x0; parpadearNoche(); } } void main(void) { setup(); loop(); return; }
Dispositivos Programables Unidad IV
MC Rafael Herrera García
Observaciones:
Aquí debes describir todas las observaciones realizadas, puedes anexar, imágenes, fotos, gráficos,
etc.Cuestionario:
1.- Como conectarías a los PINS correspondientes a las bombas circuitos que arranquen motores
DC en lugar de bombas.
Fuentes de información:
1. Manual de MPLAB +
http://ww1.microchip.com/downloads/en/DeviceDoc/52027a.pdf
Conclusiones y reflexiones personales:
Aquí deben agregar la conclusión llegada como equipo y las reflexiones personales sobre lo
logrado en la práctica.
MARIA LIZETTE OLTEHUA RANGEL
En esta parte de la práctica estuvo muy confuso para mí porque unir los dos software para que se
compilara nuestro sensor fue algo interesante, y no solo a mí me costó trabajo sino también a mis
compañeros de equipo porque hubo pasos que no llegamos anotar, o en el programa nos salía
errores, eso fue uno de los motivos por la cual nos tardáramos un poco demás. De mi parte me
costó algo de trabajo de realizar las simulaciones en proteus porque hubo ocasiones que me salía
error y no entendía porque si estaba bien las conexiones de mis resistores pero con la ayuda de mi
equipo pude realizarlos
Rosas Cortes José de Jesús
Esto fue un gran aprendizaje ya que pude trabajar con lenguaje c desde mi punto de vista es
mucho más sencillo que trabajar con ensamblador pero como toda programación tiene su lógica y
el poder ver una de las funciones tiene el pic en nuestras vidas como los senufos que todos los días
estamos en contacto con ellos además me agrado el lenguaje c.
PATRICIA LIBERTAD CARRASCO GARCIA
Al diferencia de las prácticas anteriores, esta práctica fue mucho más sencillo programar
el PIC16F887 ya que el lenguaje de programación que utilizamos fue el lenguaje C y a
comparación de lenguaje ensamblador es más fácil su comprensión. De igual manera en
esta práctica para poder programar en MPLAB tuvimos que instalar Xc8 para su
funcionamiento. La utilización de métodos y ciclos hizo mas entendible la programación ,
aunque al realizar los métodos pude darme cuenta que tenemos que poner los métodos
en el orden que los vayamos utilizando, porque en mi caso me marcaba errores.