Servomotor que no puedo hacer parar de girar

Hola estoy haciendo mi primer robot rastreador y lo que me falta es controlar el giro. He hecho un programa que genera una interrupción cada 0,1 ms para esta forma poder generar la señal que necesite. Os pongo el codigo:

Código:
#include <P16F690.inc> ; processor specific variable definitions

__CONFIG (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _CP_OFF &  _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

TEMPO	 	EQU 0x23
W_TEMP		EQU 0X20
STATUS_TEMP EQU 0X21

ORG 00H
GOTO inicio
ORG 04H
ORG 05H
GOTO interrupcion

interrupcion:

	;guardamos estado de w y status
	MOVWF W_TEMP
	SWAPF W_TEMP, 1
	MOVFW STATUS
	CLRF STATUS
	MOVWF STATUS_TEMP
	
	;comprobamos si se trata de la interrupcion del timer1
	BCF STATUS,RP1
	BCF STATUS,RP0	
	
	BTFSS PIR1,TMR1IF
		GOTO vuelve
	
	BCF PIR1,TMR1IF
	INCF TEMPO, 1

	MOVLW b'11111001'	;Valores iniciales timer
	MOVWF TMR1H
	MOVLW b'11000000'  
	MOVWF TMR1L
	
vuelve:
	;cargamos estado de w y status
	MOVFW STATUS_TEMP
	MOVWF STATUS
	MOVFW W_TEMP
	RETFIE
	
inicio:
	CLRF TEMPO

	BSF STATUS,RP0
	BCF STATUS,RP1		;Bank1

	MOVLW b'00000000'  		
                MOVWF TRISA				

	BCF STATUS,RP1
	BCF STATUS,RP0 		;Bank0

	CLRF PORTA			
	
	BSF STATUS,RP0		;Bank1

	MOVLW b'01110111'   ;Oscilador interno
	MOVWF OSCCON 	
	
	BCF STATUS,RP0		;Bank0
	
	MOVLW b'11111001'	;Valores iniciales timer
	MOVWF TMR1H
	MOVLW b'11000000'  
	MOVWF TMR1L
	
	MOVLW b'10000000'	;Configuracion timer
	MOVWF T1CON	

	BSF STATUS,RP0		;Bank1

	;Mascaras
	BSF PIE1,TMR1IE		
	BSF INTCON,PEIE
	BSF INTCON,GIE
	
	BCF STATUS,RP0		;Bank0
	
	BSF T1CON,TMR1ON	;Timer ON

ON:

	BCF STATUS,Z
	MOVFW TEMPO
	XORLW d'15' 

	BTFSS STATUS,Z	
		BSF PORTA,0 ;Manten el led ences 1 seg
	
	BTFSS STATUS,Z
		GOTO ON

OFF:
	BCF STATUS,Z
	MOVFW TEMPO
	XORLW d'185'
	
	BTFSS STATUS,Z	
		BCF PORTA,0
	
	BTFSS STATUS,Z
		GOTO OFF
RESET:
	BTFSC STATUS,Z
		CLRF TEMPO

	BTFSC STATUS,Z			
		GOTO ON
END



De esta forma genero un pulso de 1,5 ms en alto y 18,5 ms de bajo. Con esto el servo tendria que parar a 90º pero este no para hasta que llega al final y quiere seguir girando. No se donde puede haver el error.

A ver si alguien me puede ayudar y pueda acaba este rastreador! Gracias
 
estás seguro que el error esta en el codigo de programación y no en el trucado del servo?

al trucar el servo debes ajustar el pot interno hasta que el servo deje de girar. asi habra encontrado el ancho de pulso de frenado.

saludo.
 
Atrás
Arriba