Buen dia, tengo un problema con un micro servo sg90. Pasa que el programa que hice hace que el servo se mueva a 2 pocisiones con 1 pulsador, al mover el servo en la posicion 2 (MoveServos2) lo hace de manera correcta, pero al volver a pulsar (MoveServos1) este empieza a vibrar y a hacer ruidos, aunque aveces si logra ubicarse a donde lo manda el pulso, pero mayormente solo hace un pequeño ruido y se mueve apenas unos grados. No se si es problema de el programa o algo en el hardware, soy nuevo en programacion de microcontroladores. Aqui les dejo el codigo, gracias por su tiempo.
#include <16f84a.h>
#use delay (clock=4M)
#fuses XT
#fuses NOWDT
#fuses NOPROTECT
#fuses NOPUT
#define SERVO PIN_A1
#byte PORTA = 0x05
#byte PORTB = 0x06 // Asignamos PortB.
#byte PORTA_TRIS = 0x85
#byte PORTB_TRIS = 0x86 // Asignamos TrisB.
int band1=0;
void MoveServos1 ();
void MoveServos2 ();
void main(){
PORTA_TRIS= 0b00001;
PORTB_TRIS = 0b00000000; // Puerto B como salidas, para servos y leds.
portb=0; // Inicialmente ponemos a cero el puerto B.
while(1){
if(input(PIN_A0)==1 && band1 == 0){
delay_ms(185);
MoveServos2();
band1 = 1;
}
if(input(PIN_A0)==1 && band1 == 1 ){
delay_ms(185);
MoveServos1();
band1=0;
}
}
}
void MoveServos1 ()
{
int i=0;
//PARA GENERAR EL PULSO PWM
for (i = 0; i < 50; i++)
{
output_high (SERVO);
delay_us (700);
output_low (SERVO);
delay_us (19278);
}
}
void MoveServos2 (){
int i=0;
//PARA GENERAR EL PULSO PWM
for (i = 0; i < 50; i++)
{
output_high (SERVO);
delay_us (2500);
output_low (SERVO);
delay_us (17478);
}
}