Laboratorio PIC16F887A PDF
Laboratorio PIC16F887A PDF
Laboratorio PIC16F887A PDF
4
1. DIAGRAMA DE BLOQUES Y PARAMETROS DEL SISTEMA
IMPLEMENTADO
El servomotor tiene la libertad de moverse de cero a ciento ochenta grados, sin embargo
a la hora de ingresar los valores tiene un margen de error de 1.8 aunque no tiene mucha
importancia ya que es un desfase muy pequeo.
Cuando se ingrese el valor del ngulo este ser visualizado en la LCD y nicamente
hasta que oprima la tecla ENTER la informacin ser enviada para que el servomotor se
mueva los grados indicados. Cuando al sistema se le ingrese un valor que exceda los
180 la LCD mostrara un mensaje de error, por lo tanto tendr que volver a ingresar el
valor del ngulo.
Importante al momento de ingresar un ngulo inferior a 100, el valor tiene que comenzar
con un cero a la izquierda, y cuando el ngulo sea inferior a 10, tiene que comenzar con
dos ceros; ejemplo: 045 007.
LCD
11 4
TECLADO MICROCONTROLADOR
PIC 16 F 877A SERVO
11
MOTOR
1
Como se puede observar en la figura 1. Este sistema trabaja con un PIC 16 f 877 A y
cuenta con una entrada de 7 bits, que corresponde a los datos emitidos por medio de un
teclado.
Posterior al sistema de control, se encuentran las dos salidas del sistema, la primera (de 4
bits) es la visualizacin de los datos ingresados, por medio de una LCD; la segunda (de 1
bit), es la maniobra del servomotor tambin en base a los datos de entrada.
Entonces, en base al diagrama de bloques es fcil deducir que la funcin del sistema es
tomar los valores que el usuario ingresa por teclado y ejecutar especficas funciones
sobre ellos de tal manera que los podamos visualizar en una LCD y en la maniobrabilidad
de un servomotor.
5
2. DIAGRAMA DE FLUJO DEL SISTEMA DE CONTROL
Inicio
Inicializar LCD
Borrar LCD
Visualizar Si
ERROR excedi Angulo>180
el ngulo
No
Mostrar ngulo en LCD
Borrar LCD
A
6
A
Fin
7
else{ }
if(Dat_c==0)
goto leer_datoc; //mostrar ngulo en LCD
lcd_putc(Dat_c); else{
} lcd_putc(" Angulo Cargado");
lcd_putc("\n de: ");
lcd_putc(39); printf(lcd_putc,"%Lu",Resultado);
//ingresar ENTER (en este caso el lcd_putc(39);
ENTER es la tecla '='; delay_ms(2000);
//aunque en el teclado opcional que se //borrar LCD
tiene es la tecla '#') lcd_putc('\f');
leer_enter:
enter=kbd_getc(); //convertir el angulo en seal PWM
if(enter==0) for(i=0;i<Resultado;i++){
goto leer_enter; k=k+10;
if(enter=='='){ }
lcd_putc('\f'); d=k+280;
lcd_putc(" Cargando "); f=20000-d;
lcd_putc("\n Angulo "); //visualizar seal PWM
delay_ms(1500); lcd_putc(" La senal PWM ");
//borrar LCD lcd_putc("\n es de: ");
lcd_putc('\f'); printf(lcd_putc,"%LU",k);
} lcd_putc(230);
else{ lcd_putc("s");
goto leer_enter; delay_ms(25);
} //sacar seal PWM por el puerto de
//covertir cenenas, decenas y unidades servomotor
de ASCII a entero impulso:
a=Dat_a-48; output_high(PIN_D1);
b=Dat_b-48; delay_us(d);
c=Dat_c-48; output_low(PIN_D1);
delay_us(f);
a=a*100; output_high(PIN_D1);
b=b*10; delay_us(d);
c=c*1; output_low(PIN_D1);
//sumar centenas, decenas y unidades y delay_us(f);
almacenarlo en angulo goto impulso;
Resultado=a+b+c;
//preguntar si el angulo(resultado) es
mayor a 180
if(Resultado>180){
//visualizar ERROR exed el ngulo
lcd_putc(" ERROR!! ");
lcd_putc("\n Excedio Ang.");
delay_ms(2000);
//borrar LCD
lcd_putc('\f');
goto inicio;
8
4. DIAGRAMA DE CONEXIONES EN PROTEUS
9
CONCLUSIONES
- lo mas complicado de este laboratorio es tomar los PWM para que el servo motor se
desplace los grados que se deseen. Aunque lo nico que hay que hacer es encontrar una
relacin matemtica que nos relacione los pulsos con los grados.
10
BIBILOGRAFIA
- Garcia, eduardo. Compilador c ccs y simulador proteus para microcontroladores PIC. Editorial
alfaomega, 2005.
11