Tengo un PIC12F629 y un servo sg5010 (para el cual no he encontrado ninguna hoja de datos) Así que construí este circuito:
El LED es para verificar si se envía un pulso y el interruptor SW1 es para habilitar el servo.
Y he escrito este programa para el PIC:
#include <xc.h>
#define _XTAL_FREQ 40000000
#pragma config WDTE=OFF , BOREN=OFF , PWRTE=ON , MCLRE=OFF , FOSC=INTRCIO
void main(){
TRISIO = 0b0000000;
GPIO = 0b000000;
int i;
while(1==1){
GPIO = 0b111111;
__delay_ms(1);
GPIO = 0b000000;
__delay_ms(19);
for(i=0;i<50;i++){
}
GPIO = 0b111111;
__delay_ms(2);
GPIO = 0b000000;
__delay_ms(18);
for(i=0;i<50;i++){
}
}
}
Aquí intenté girar el brazo del servo grados hacia adelante y hacia atrás y el for loop está aquí para dar tiempo al actuador y _XTAL_FREQ está aquí para configurar su frecuencia.
Incluso intenté transferir la configuración de GPIO a para bucles y agregar un bucle para después de ellos.
Cuando ejecuto el circuito, me enfrento a problemas críticos:
-
Cuando presiono el interruptor, el servo retrocede unos 10 grados hacia adelante y hacia atrás (cada vez que se enciende, incluso sin ningún comentario conectado). Luego, si no alcanza los 360 grados, gira 20 grados por 20 grados hasta el final y luego se detiene y emite sonidos como clic para cada pulso enviado por el PIC. (Vi LED parpadea). Esto no es lo que quiero implementar.
-
Si elimino todos los bucles en él (para los bucles while y while) y solo escribo esto en main:
GPIO = 0b111111; __delay_ms(2); GPIO = 0b000000; __delay_ms(18);
El programa se enlaza y el LED parpadea. ¿Por qué se enrolla sobre sí mismo?