problema con tiempo de servo

Hola!! vereis estoy intentando controlar un servo, para controlarlo utilizo una señal de 50 Hz, con un ton que varia entre 1ms y 2 ms. . . hasta ahi todo perfecto. el problema lo tengo cuando intento sacar ese milisegundo por el microcontrolador. Utilizo una fosc de 8MHz, por lo que queda descartado utilizar el CCP, asi que lo hago con un timer. Como no tengo preescalar, para 1ms, el numero de cuentas que tiene que hacer el temporizador es de 2000 ( 2000*t_int=1ms), igual para 2ms que en este caso el numero de cuentas es de 4000, y el tiempo total es de 40000 que son 20ms. El problema es que haciendo esto. . no sale lo que tiene que salir. . por ejemplo. . para 1ms (2000 cuentas), sale un tiempo de 1.2ms. . que en un servoi es bastante distancia. . os pongo el codigo que utilizo. este es el fragmento de la interrupcion:
Código:
if(INTCONbits.TMR0IF){
		INTCONbits.TMR0IF=0;
		if(flag){
		TMR0H=(65536-toff)/255;
		TMR0L=(65536-toff);
		flag=0;
		control=0; //esto es la salida
		}
		else{
		TMR0H=(65536-ton)/255;
		TMR0L=(65536-ton);
		flag=1;
		control=1;
		}
	}

y este es el fragmento donde le doy el valor de ton y toff, donde para un valor de 255 seria ton=2ms y para 0, un ton de 1ms.
Código:
ton=entrada*8;
	ton=ton+2000;		//calculamos el valor de ton
	toff=40000-ton;		//calculamos el valor de toff

el codigo creo que est bien., . ademas teoricamente funciona. . . la variable entrada es la que yo vario.

Un saludo
 
Atrás
Arriba