PIC C COMPILER PWM PARA CONTROLAR SERVOMOTOR 50Hz

Saludos expertos,

mi problema es el siguiente, hace unos dias me compre mis primeros servomotores para utilizar con mis PICs. El problema es que por mas que trato de utilizar el PWM integrado en el PIC no logro hacer que el servo se mueva como yo ocupo. Cada ves que inicio el PIC el servo se mueve hacia la posicion 0 pero cuando le ordeno moverse 45 grados usando 1mS no hace nada. Ya he probado con 1, 1.5 y 2 milisegundos pero nada.
Estoy usando el PIC16F882 con un clock externo de 12MHz deacuerdo con la formula que he utilizado estos son los valores

(1/12M)*4*46*255*14 = 20mS = 50Hz

PHP:
#include <16F882.h>

#fuses XT, NOWDT, PROTECT, BROWNOUT, PUT, NOLVP, MCLR

#define on output_high
#define off output_low
#define led pin_a0
#define boton1 input(pin_a1)
#define boton2 input(pin_a2)
#define boton3 input(pin_a3)

#use delay(clock = 12000000) 

void main(){
   int x = 0;
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16, 255, 14);
   on(led);
   delay_ms(1000);
   off(led);
   while(true){
      if(boton1 == 1){
         while(boton1 == 1){
            on(led);
         }
         off(led);
         x = 47;
      }
      if(boton2 == 1){
         while(boton2 == 1){
            on(led);
         }
         off(led);
         x = 94;
      }
      if(boton3 == 1){
         while(boton3 == 1){
            on(led);
         }
         off(led);
         x = 70;
      }
      set_pwm1_duty(x);
   }
}

espero me puedan ayudar!!!

gracias.
 
Atrás
Arriba