Practica No.7

15
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

Transcript of 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.