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:
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
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