Autor Tema: dsPIC30F4011 Timer1  (Leído 3449 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kaos_XIII

  • PIC10
  • *
  • Mensajes: 5
dsPIC30F4011 Timer1
« en: 19 de Diciembre de 2012, 08:25:15 »
Buenas,

Tengo un problema al configurar el TMR1 para que tenga una interrupción cada 1ms.

Tengo el dsPIC30F4011, un cristal de 4MHz y configuro el Timer de la siguiente manera.

#define FCY 8000000

_FOSC(CSW_FSCM_OFF & XT_PLL8);
_FWDT(WDT_OFF);                  
_FGS(CODE_PROT_OFF);

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.
« Última modificación: 19 de Diciembre de 2012, 08:32:48 por kaos_XIII »

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: dsPIC30F4011 Timer1
« Respuesta #1 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.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: dsPIC30F4011 Timer1
« Respuesta #2 en: 19 de Diciembre de 2012, 14:14:34 »
Esto es lo que uso normlamente.


Código: C
  1. #define    MIPS      8.000
  2. #define    PRESC     256
  3. ///selecciona correctamente el prescaler
  4. ///la unidad de tiempo en el calculo esta en us
  5. PR1 = MIPS/PRESC*5000;         ////5 ms de tiempo del timer1

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.


 

anything