Hola a todos:
He conseguido realizar un pulso con un periodo de 20ms y con un ton de 1.5ms con lo que con las caracteristicas de los servos, éste se debería de situar en el centro, pero no hace nada. El pulso lo he mirado con un osciloscopio para pc por la targeta de sonido y es perfecto pero el servo no funciona con lo que compre un servo (futaba S3003) nuevo y tampoco funciona en cambio si uso delay_ms() si que funcionan, haber si alguien me puede decir que le pasa a este sencillo programa para que no funcione el servo.
Gracias a todos chavales sois unos CRACKS
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=12000000)
#include <stdlib.h>
#define SERVO PIN_A2
#define LEDV PIN_B6
#define LEDR PIN_B7
#define LED_ON output_high
#define LED_OFF output_low
#priority TIMER1 //Damos prioridad a las interrupciones del contador
int1 flagSERVO1 = 0;
int contador=0;
#int_timer1
void isr_timer1(void)
{
flagRTCC=1;
set_timer1(0x15A0);
}
//PROGRAMA PRINCIPAL
void main(void) {
long valTIMER=0;
LED_OFF(LEDV); //encendemos led rojo
LED_ON(LEDR);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
set_timer1(0x15A0); //Vtmr1 = 65536 - (1s * ( 12000000Hz / 4 ) / prescaler ) 200us -> Vtmr1=5536 set_timer1(0x15A0);
LED_OFF(LEDR);
LED_OFF(LEDV); //apagamos LEDs
while (TRUE)
{
if(flagRTCC==1)
{
flagRTCC=0;
output_high(SERVO);
flagSERVO1=1;
}
if(flagSERVO1==1)
{
valTIMER=get_TIMER1();
if(valTIMER>10036)//1,5ms->10036 0.5ms->7036 0.1ms->5836 2.3ms->12436 set_timer1(0x15A0);
{
output_low(SERVO);
flagSERVO1=0;
}
}
}//end bucle infinito
}//end void