Hola compañeros, se que hay mucha info por el foro, pero llevo toda la tarde con ello y cuanto mas lo miro peor. No entiendo las formulas, necesito mover un servo a su posicion central 1480us+20ms=1500us, pero cuando intento aplicar las formulas, me da valores tanto para el PR2 como el CCPR1L muy altos que ni con resolucion de 10bits me alcanza.
Alguien puede enseñarme como hacerlo, para conseguir este periodo de 1500us con un duty de 1480us, tengo esto hasta el momento:
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _HS_OSC
;
;---------------------------------------------------------------
; VARIABLES.
;---------------------------------------------------------------
;
CBLOCK H'20'
;
ENDC
;
;---------------------------------------------------------------
; CONSTANTES.
;---------------------------------------------------------------
;
Periodo equ .101 ;Periodo de 100us.-
Duty equ .25 ;Anchura 25us
;
;**** Configuracion de puertos ****
RESET ORG H'00' ;Aqui comienza el micro.-
GOTO Inicio ;Salto a inicio de mi programa.-
ORG H'05' ;Origen del codigo de programa.-
;
Inicio clrf PORTA
clrf PORTB
clrf PORTC ;Borra salidas.-
bsf STATUS,RP0 ;Banco 1.-
movlw 0x06 ;Configuramos todos los pines...
movwf ADCON1 ;..como entradas digitales.-
movlw b'11111110'
movwf TRISB ;Bit 0 PORTB salida resto entradas.-
movlw b'11111011'
movwf TRISC ;Bit 2 PORTC salida resto entradas.-
movlw b'11101111'
movwf OPTION_REG ;Preescaler de 128 asociado al WDT.-
movlw Periodo-1
movwf PR2 ;Carga el registro de periodos.-
bcf STATUS,RP0 ;Banco 0.-
movlw Duty
movwf CCPR1L ;Carga la anchura del pulso.-
;**** El modulo CCP1 actua en el modo PWM con salida de señal por RC2/CCP1 ****
movlw b'00001100'
movwf CCP1CON
;**** El TMR2 trabaja con un preescaler 1:1 por lo que con una frecuencia de 4MHz
; evoluciona cada us (4*Tosc) ****
movlw b'00000100'
movwf T2CON ;T2 en ON.-
Loop clrwdt ;Refrescamos el WDT.-
goto Loop ;Bucle infinito.-
;
END ;Fin del programa fuente.-
Gracias
Miquel_S