Anda di halaman 1dari 4

UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II

Fecha: 24/04/2017

Manejo de periféricos de entrada y salida


Teran Aguilar Christopher Damian
cterana@est.ups.edu.ec

RESUMEN: El presente documento se detalla cómo se


debe manejar y configurar los diferentes puertos para el
control de diferentes periféricos de entradas y salidas
mediante el PIC18F4550 usando el software Mikroc y
Proteus para verificar su correcto funcionamiento

PALABRAS CLAVE: Interrupción, Periférico, PWM

1. OBJETIVOS
Objetivo general
Figura1: Conexión de diferentes periféricos en el
 Analizar el comportamiento y funcionamiento del PIC18f4550 [1]
PIC18F4550 para el uso de periféricos de
entrada y salida
3. MATERIALES Y EQUIPO
Objetivos específicos
 Fuente de alimentación 5VDC
 Entender el funcionamiento de los puertos como  Protoboard,
salidas de datos discretos  Microcontrolador PIC18F4550,
 Entender el funcionamiento de los puertos como  Cables de conexión
entradas y salidas de datos para optimizar su  Tarjeta programadora para microcontroladores,
funcionamiento  Multímetro
 Analizar los tipos y la función que cumplen las  Motor DC de 12V
interrupciones en un programa en el que se usan  Módulo LCD
periféricos  Teclado matricial de 4x4,
 Potenciómetro

2. MARCOTEÓRICO 4. DESARROLLO Y
PROCEDIMIENTO
Puertos de Entrada/Salida Microcontroladores PIC

Con el propósito de sincronizar el funcionamiento de los a) Diseñar el diagrama electrónico para cumplir con
puertos de E/S con la organización interna del el primer enunciado propuesto
microcontrolador de 8 bits, ellos se agrupan, de manera
similar a los registros, en cinco puertos denotados con A,
B, C, D y E [1]. Todos ellos tienen las siguientes
características en común:
 Por las razones prácticas, muchos pines de E/S
son multifuncionales. Si un pin re aliza una de
estas funciones, puede ser utilizado como pin de
E/S de propósito general.
 Cada puerto tiene su propio registro de control
de flujo, o sea el registro TRIS correspondiente:
TRISA, TRISB, TRISC etc. lo que determina el
comportamiento de bits del puerto, pero no
determina su contenido.

Figura2: Diagrama del enunciado hecho en PROTEUS

1
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II
Fecha: 24/04/2017

b) Realizar el diagrama de flujo para el algoritmo if(portb.f6==1){


que implementará para el enunciado propuesto der=1;
izq=0;
Inicio }
INTCON.rbif=0;
Lcd_Init()
INTCON=0b11011000 }
INTCON3=0b11011000;
ADCON1=0b00111110
Puertos A, E, C, B, D
if(INTCON3.B0==1){
PWM1_Init() stop=1;
=1 Si
start=0;
Fin No
INTCON3.B0=0;
No
PWM1_start }
if(INTCON3.B1==1){
Lectura=ADC_read()
izq=1;
IntToStr(lectura,txt);
der=0;
lectura1=lectura*0.098
pwm=lectura*0.25 INTCON3.B1=0;
FloatToStr(lectura1,valor_real)
}
No
}
Start==1 Si
char txt[16];
Izq==0 && der==0 No
int lectura,lectura1,pwm;
Izq==1
Si
Si
portc=0b00000001;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
portc=0b00000001;
Lcd_Cmd(_LCD_CLEAR); void main() {
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1,"PORCENTAJE" );
Lcd_Out(2, 1,"%:" ); Lcd_Out(1, 1,"PORCENTAJE" );
No
char valor_real[15];
Lcd_Out(2, 1,"%:" );
Lcd_Out(2, 4, valor_real);
delay_ms(200); Lcd_Out(2, 4, valor_real);
delay_ms(200);
INTCON=0b11011000;
PWM1_Set_Duty(pwm);
PWM1_Set_Duty(pwm); INTCON3=0b11011000;

der==1 No ADCON1=0b00111110;
Si
Start==0 TRISA =0xFF; // PORTA is input
portc=0b00000010;
Si TRISB=0B11111111;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Cmd(_LCD_CLEAR); TRISC=0;
Lcd_Out(1, 1,"PORCENTAJE" ); Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(2, 1,"%:" ); Lcd_Out(1, 1,"PORCENTAJE" ); PORTC=0;
Lcd_Out(2, 4, valor_real); Lcd_Out(2, 1,"%:" );
delay_ms(200); Lcd_Out(2, 4,"0" );
PWM1_Set_Duty(pwm); delay_ms(200);
PWM1_Set_Duty(0);

Figura3: Diagrama de Flujo del problema propuesto Lcd_Init(); // Initialize Lcd


Lcd_Cmd(_LCD_CLEAR); // Clear
display
Lcd_Cmd(_LCD_CURSOR_OFF); //
c) Desarrollar en el compilador C la programación Cursor off
necesaria para cumplir con el enunciado Lcd_Out(1, 1,"PRACTICA 1..." ) ; // Write
propuesto. message text on Lcd
// LCD module connections Delay_ms(1000);
sbit LCD_RS at RD4_bit; PWM1_Init(600);
sbit LCD_EN at RD5_bit; do {
sbit LCD_D4 at RD0_bit; PWM1_Start();
sbit LCD_D5 at RD1_bit; lectura=ADC_Read(0);
sbit LCD_D6 at RD2_bit; IntToStr(lectura,txt);
sbit LCD_D7 at RD3_bit; lectura1=lectura*0.098;
pwm=lectura*0.25;
sbit LCD_RS_Direction at TRISD4_bit; FloatToStr(lectura1,valor_real);
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit; if(start==1){
sbit LCD_D5_Direction at TRISD1_bit; if(izq==0 && der==0){
sbit LCD_D6_Direction at TRISD2_bit; portc=0b00000001;
sbit LCD_D7_Direction at TRISD3_bit; Lcd_Cmd(_LCD_CLEAR);
// End LCD module connections Lcd_Cmd(_LCD_CURSOR_OFF);
unsigned start,stop,izq,der ; Lcd_Out(1, 1,"PORCENTAJE" );
void interrupt(){ Lcd_Out(2, 1,"%:" );
if(INTCON.B1==1){ Lcd_Out(2, 4, valor_real);
start=1; delay_ms(200);
stop=0; PWM1_Set_Duty(pwm);
INTCON.B1=0; }
} if(izq==1){
if(INTCON.rbif==1){ portc=0b00000001;
Lcd_Cmd(_LCD_CLEAR);

2
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II
Fecha: 24/04/2017

Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1,"PORCENTAJE" );
Lcd_Out(2, 1,"%:" );
Lcd_Out(2, 4, valor_real);
delay_ms(200);
PWM1_Set_Duty(pwm);
}

if(der==1){
portc=0b00000010;
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1,"PORCENTAJE" );
Lcd_Out(2, 1,"%:" );
Lcd_Out(2, 4, valor_real);
delay_ms(200);
PWM1_Set_Duty(pwm); Figura5: Activación del motor
}
}
if(stop==1){

Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1,"PORCENTAJE" );
Lcd_Out(2, 1,"%:" );
Lcd_Out(2, 4,"0" );
delay_ms(200);
PWM1_Set_Duty(0);
}

} while(1);
}
Figura6: Desactivación del motor
d) Armar el circuito electrónico diseñado

5. ANÁLISIS Y RESULTADOS  Debido a que el enunciado propuesto requiere


que el programa realice funciones
independientes del tiempo, este programa se
Simulación: debe realizar con interrupciones
 Para el correcto funcionamiento del motor se
debe conectar el puente H a otra fuente (12V)
 Se debe utilizar resistencias de valores exactos
para que el valor de los divisores de voltaje sea
casi perfecto y el motor funcione con las
referencias requeridas en el enunciado

6. CONCLUSIONES

 Para que concuerde el porcentaje de velocidad


mostrado en la LCD con la del motor se debe
hacer un correcto cálculo de acuerdo con la
resolución que tiene el PIC18F4550 que es de
Figura4: Activación del programa es 10 bits es decir 1023, usando los registros
ADCON y ADCON1 para colocar las referencias
requeridas en el enunciado del laboratorio.

3
UNIVERSIDAD POLITÉCNICA SALESIANA SISTEMAS MICROPROCESADOS II
Fecha: 24/04/2017

 Al utilizar las interrupciones se debe tomar en


cuenta la correcta configuración del registro
INTCON, ya que una simple equivocación en
esta puede cambiar o dañar el programa y por
ende el funcionamiento del circuito

7. RECOMENDACIONES
 Verificar la continuidad de las conexiones
 Tomar en cuenta la resolución del PIC18F4550

8. BIBLIOGRAFIA

 [1] Microchip Technology Inc.,


«PIC18F2455/2550/4455/4550 Data Sheet, »
Microchip, New York, 2006.Pag: 428

Anda mungkin juga menyukai