hola a tod@s:
Pretendo conseguir un retardo de 1 segundo, utilizando para ello el
TMR2, el
prescaler y
postscaler y el
PR2, utilizando la interrupción de overflow.
la formula que he utilizado para conseguir 1 segundo es la siguiente,utilizo un oscilador de 4 Hhz.
Codigo:
Tiempo Overflow= 4 * Tosc *PRESCALER * POSTESCALER * PR2
62464 useg = 4 * 0,25 useg*16 * 16 * 244
contando 16 overflows obtenemos un valor muy cercano a 1 segundo:
Codigo:
62464 useg * 16 = 999424 useg ~ 1 seg
El CODIGO para configurar el TMR2 que he utilizado es este:
Codigo:
;............................. TMR2 .........................................
;tempOvF= 4 x Tosc x PR2 x preescale x postescale
;1/16 seg = 0.5 useg x 16 x 16 x 244
BANK0 ;BANCO 0
MOVLW b"11111011" ;preecale 1:16, postescale 1:16, TMRON 0 (stop)
MOVWF T2CON
BANK1 ;BANCO 1
movlw d"244"
movwf PR2 ;timer2 period register: 244
bsf PIE1,TMR2IE ;activamos interrupción TMR2
BANK0
bsf T2CON,TMR2ON; Activamos el Timer 2
Mi problema es que al simular en
Proteus, los 16 overflows se completan en unos 17 minutos.
Se que el simulador Proteus no puede reproducir el programa a tiempo real, como lo hace el propio microcontrolador, pero esta diferencia de tiempo me parece excesiva.
Mi pregunta es ¿hay algún error en el codigo? o bien ¿el Proteus deja mucho que desear?
GRasias...