Professional Documents
Culture Documents
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.
El presente diagrama de bloques permitir adquirir una idea general sobre el
comportamiento del sistema desarrollado, describiendo de esta forma las partes
principales por las que est compuesto. Este diagrama es de vital importancia ya que de
este se partir para desarrollar el diagrama de flujo.
LCD
11
TECLADO
11
MICROCONTROLADOR
PIC 16 F 877A
SERVO
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.
2.
Inicializar LCD
Ingresar ENTER
Borrar
LCD
Borrar LCD
Visualizar
ERROR excedi
el ngulo
Si
Angulo>180
No
Mostrar ngulo en LCD
Borrar LCD
Fin
goto leer_datoa;
}
else{
if(Dat_a==0)
goto leer_datoa;
lcd_putc(Dat_a);
}
//ingresar centenas y visualizar en LCD
leer_datob:
Dat_b=kbd_getc();
if(Dat_b=='+'||Dat_b==''||Dat_b=='X'||Dat_b=='/'||Dat_b=='='){
goto leer_datob;
}
else{
if(Dat_b==0)
goto leer_datob;
lcd_putc(Dat_b);
}
//ingresar unidades y mostrar en LCD
leer_datoc:
Dat_c=kbd_getc();
if(Dat_c=='+'||Dat_c==''||Dat_c=='X'||Dat_c=='/'||Dat_c=='='){
goto leer_datoc;
}
7
else{
if(Dat_c==0)
goto leer_datoc;
lcd_putc(Dat_c);
}
lcd_putc(39);
//ingresar ENTER (en este caso el
ENTER es la tecla '=';
//aunque en el teclado opcional que se
tiene es la tecla '#')
leer_enter:
enter=kbd_getc();
if(enter==0)
goto leer_enter;
if(enter=='='){
lcd_putc('\f');
lcd_putc(" Cargando ");
lcd_putc("\n Angulo ");
delay_ms(1500);
//borrar LCD
lcd_putc('\f');
}
else{
goto leer_enter;
}
//covertir cenenas, decenas y unidades
de ASCII a entero
a=Dat_a-48;
b=Dat_b-48;
c=Dat_c-48;
a=a*100;
b=b*10;
c=c*1;
//sumar centenas, decenas y unidades y
almacenarlo en angulo
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;
}
//mostrar ngulo en LCD
else{
lcd_putc(" Angulo Cargado");
lcd_putc("\n de: ");
printf(lcd_putc,"%Lu",Resultado);
lcd_putc(39);
delay_ms(2000);
//borrar LCD
lcd_putc('\f');
//convertir el angulo en seal PWM
for(i=0;i<Resultado;i++){
k=k+10;
}
d=k+280;
f=20000-d;
//visualizar seal PWM
lcd_putc(" La senal PWM ");
lcd_putc("\n es de: ");
printf(lcd_putc,"%LU",k);
lcd_putc(230);
lcd_putc("s");
delay_ms(25);
//sacar seal PWM por el puerto de
servomotor
impulso:
output_high(PIN_D1);
delay_us(d);
output_low(PIN_D1);
delay_us(f);
output_high(PIN_D1);
delay_us(d);
output_low(PIN_D1);
delay_us(f);
goto impulso;
CONCLUSIONES
10
BIBILOGRAFIA
- Garcia, eduardo. Compilador c ccs y simulador proteus para microcontroladores PIC. Editorial
alfaomega, 2005.
11