Autor Tema: problema de tiempos  (Leído 2852 veces)

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

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
problema de tiempos
« en: 02 de Junio de 2008, 05:45:47 »
hola, tengo un dspic30f4013 y un problema con los tiempos:

Tengo un oscilador de 10 MHz y al comienzo de mi código pongo:

_FOSC(CSW_FSCM_OFF &  XT_PLL4);

Con lo cual, según entiendo, esto debería funcionar a una frecuencia de 40 MHz. Sin embargo, compruebo que no es así, sino que conservo la frecuencia de 10 MHz.
 
¿El funcionamiento que yo creo que debería tener es incorrecto? En ese caso, ¿qué debería poner para que funcione?

Muchas gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #1 en: 02 de Junio de 2008, 06:30:27 »
¿Cómo lo compruebas?

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #2 en: 02 de Junio de 2008, 10:56:32 »
lo hago con interrupciones de tiempo, enciendo o apago (según toque cada vez) un bit (al que conecto un led), este es el código:

#include <p30f4013.h>
#include <ports.h>
#include <timer.h>
 

//FUSES
_FOSC(CSW_FSCM_OFF &  XT_PLL4);
_FGS(CODE_PROT_OFF);
_FWDT( WDT_OFF);
_FBORPOR(MCLR_EN & PWRT_OFF);


void CONFIGinterrups(void) {
   
   ConfigIntTimer1(T1_INT_PRIOR_6 & T1_INT_ON);
}


void CONFIGtimers(void) {

   CloseTimer1();

   unsigned int config = T1_OFF & T1_IDLE_STOP & T1_GATE_OFF & T1_PS_1_256 &
                    T1_SYNC_EXT_OFF & T1_SOURCE_INT;

   OpenTimer1(config, 0x9896);
}


int main (void){

   CONFIGtimers();
   TRISB = 0;
   CONFIGinterrups();
   LATBbits.LATB12 = 0;
   T1CONbits.TON = 1;

   while(1){

   }
   return 1;

}

void __attribute__((__interrupt__)) _T1Interrupt(void) {

   T1CONbits.TON = 0;
   TMR1 = 0;
   LATBbits.LATB12 = !(LATBbits.LATB12);
   T1CONbits.TON = 1;
   IFS0bits.T1IF = 0;

}


Y con eso según el valor de PR1 que tengo puesto a 10 MHz estaría un segundo encendido y otro apagado, y a 40 MHz estaría 250 ms encendido y 250 ms apagado y veo qeu es 1 segundo, además si quito lo de XT_PLL4 se queda todo igual.

Si pongo XT_PLL8 me funciona a 20 MHz y si pongo XT_PLL16 no funciona.

Muchas gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #3 en: 02 de Junio de 2008, 12:17:44 »
Pues x4 y x8 deberían funcionar perfectamente, sospecho que el error puede estar en tu apreciación del tiempo que luce el led.
El PLLx16 sólo funciona para cristales de menos de 7,5MHz así que es lógico que ahí no veas nada.

De todas formas, te recuerdo que los MIPS a los que corre el micro son la cuarta parte de los MHz a lo que lo tengas configurado, porque cada instrucción consume 4 ciclos de reloj.

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #4 en: 02 de Junio de 2008, 13:58:16 »
Umm, perdona pero no te sigo.

Por un lado, mi apreciación, bueno puede variar entre 1 segundo y 1.2, pero entre un segundo y un cuarto de segundo... eso es otro tema, ¿no cres?

Por otro lado, lo de las MIPS, ¿todas las instrucciones consumen 4 ciclos de reloj? ¿no depende de la instrucción en particular?

Muchas gracias por tu ayuda

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #5 en: 02 de Junio de 2008, 15:03:35 »
Sí, claro, lo de los MIPS te lo decía por si lo habías calculado sin tenerlo en cuenta.
La apreciación subjetiva de los tiempos debería servirte, porque como dices entre 1/4s y 1s hay una gran diferencia; pero es que no veo dónde está el error de tu configuración.

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #6 en: 02 de Junio de 2008, 15:30:16 »
¿Qué he tenido en cuenta que? que tiene que ver la frecuencia con las instrucciones... lo siento estoy espesa hoy

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #7 en: 02 de Junio de 2008, 15:51:20 »
Nada, olvida lo de los MIPS. Sólo te lo decía por si estás esperando ver 1/4s. y ves 1s porque hayas confundido MIPS con MHz.

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #8 en: 03 de Junio de 2008, 08:14:49 »
Buf, pues me haces dudar, a ver, me explico y vemos si me he confundido:

 Tengo un reloj de 10 MHz y la línea de PLL4, interrumpo por tiempo poniendo la base de tiempos a 0x9896 (39062 en decimal) y el preescaler a 256, entonces:

tiempo = (39062*256)/frecuencia

con lo que tiempo es 1 segundo para f=10MHZ
y tiempo es 250 ms para f = 40MHz.

¿Correcto? Gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #9 en: 03 de Junio de 2008, 08:30:27 »
Si no me equivoco, tendrás un tiempo de 4s. para un cristal de 10MHz sin PLL, t=1s para PLLx4 y t=0,5s para PLLx8.

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #10 en: 03 de Junio de 2008, 09:09:46 »
¿te importaría decirme como calculas esos valores? Muchas gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #11 en: 03 de Junio de 2008, 12:54:41 »
Con tu fórmula:
tiempo = (39062*256)/frecuencia

Donde frecuencia =10 * PLL / 4

Por cierto, acabo de caer en que cada vez que desborda el timer cambias el led de estado. Si esto ocurre cada segundo, en realidad observarás un parpadeo cada 2 segundos: 1 segundo encendido, 1 segundo apagado, 1 segundo encendido, 1 segundo apagado, ...

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #12 en: 04 de Junio de 2008, 06:48:50 »
Muchas gracias, estaba calculando mal la frecuencia, no sabía que había que dividirla por cuatro. Gracias por la ayuda

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: problema de tiempos
« Respuesta #13 en: 04 de Junio de 2008, 07:32:21 »
¡Pero si es lo que te dije al principio!  :D

De todas formas, te recuerdo que los MIPS a los que corre el micro son la cuarta parte de los MHz a lo que lo tengas configurado, porque cada instrucción consume 4 ciclos de reloj.

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: problema de tiempos
« Respuesta #14 en: 04 de Junio de 2008, 07:55:16 »
Vaya! perdona, no sabía a que te referías. No sabía que quería decir. Perdón!