T1CON = 0x0000; // Reset del TIMER1. T1CONbits.TCKPS = 1; // Prescaler: 1:1 (00), 1:8 (01), 1:64 (10) o 1:256 (11). TMR1 = 131; // Registro TMR1. PR1 = 1000; IFS0bits.T1IF = 0; // Reset del Flag del TIMER1. IEC0bits.T1IE = 1; // Habilitar la RSI Timer1. T1CONbits.TON = 1; // Habilitar el Timer1.
Las formulas que he usado son:
Periodo = (256-TMR) * (4/Fosc)*(PRESCALER) Tiempo = (PR1*PRESCALER) / FCY FCY = (Fosc*PLL)/ 4
Siendo:
Periodo = Tiempo = 1ms = 0,001s. Fosc = 4MHz = 4000000Hz Prescaler = 8; FCY = 8000000;
Si alguien me puede ayudar, Gracias.
Título: Re: dsPIC30F4011 Timer1
Publicado por: willynovi en 19 de Diciembre de 2012, 14:00:24
No estoy muy familiarizado con los dsPIC, pero según los dato que has pasado hice las siguientes cuentas:
XT = 4Mhz XT_PLL = 8 focs = 4 x 8 = 32Mhz si cada instrucción se lleva 4 ciclos de reloj, el micro corre a 8 millones de instrucciones por segundo, lo que nos da TCY = 0,125 useg
es decir que el si no tienes prescaler, T1CONbits.TCKPS = 1, el Timer1 se incrementará cada 0,125 useg.
Tendrias que cargar el valor del TMR1 con 8000 para lograr la interupción de 1mseg. O usar el prescaler en 64 si usaras el TMR1 en 8 bit y lo cargas con el valor 125.
Título: Re: dsPIC30F4011 Timer1
Publicado por: KALLITOS en 19 de Diciembre de 2012, 14:14:34
Esto es lo que uso normlamente.
Código: C
#define MIPS 8.000
#define PRESC 256
///selecciona correctamente el prescaler
///la unidad de tiempo en el calculo esta en us
PR1 = MIPS/PRESC*5000;////5 ms de tiempo del timer1