Autor Tema: Tiempo del timer en C  (Leído 2063 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
Tiempo del timer en C
« en: 18 de Noviembre de 2004, 02:10:00 »
Hola a todos, he estado buscando posts que tratasen este tema pero no he sabido encontrar.

Bueno, la cuestion es que necesito medir un tiempo por interrupción para que sea siempre igual, en teoria con el timer0 sin prescaler y a 4MHz tendría que interrumpir cada 1useg pero no sucede así, si no que consume 60useg alguien me puede explicar por q? supongo que es por el codigo C almenos espero que sea un valor fijo y q no varie segun lo que haga en el main.

   #include <12F675.h>
   #device adc=8
   #use delay(clock=4000000,RESTART_WDT)
   #fuses NOWDT,INTRC_IO, CPD, PROTECT, MCLR, NOPUT, NOBROWNOUT
   #use rs232(baud=9600,parity=N,xmit=PIN_A2,bits=8)
   #include <string.h>
   #ZERO_RAM

//******************************************************+
//       Variables globals
//******************************************************+
       int pulsosrtc,pulsos1;
      float X,Y;
      char flag1; //flags


#int_RTCC
RTCC_isr()
{   pulsosrtc++1;
   set_rtcc(0xFF);
}

#int_EXT
EXT_isr()
{

}

#int_TIMER1
TIMER1_isr()
{

}



void main()
{

   setup_adc_ports(0);
   setup_adc(ADC_OFF);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   disable_interrupts(INT_RTCC);
   disable_interrupts(INT_EXT);
   disable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);


      pulsosrtc=0;
      set_rtcc(0xFF);
      enable_interrupts(INT_RTCC);

   while (TRUE) {
  //    printf("Hola"Giño;
   //delay_ms(300);

   }


}

- T0ni0 -
30RCF112

Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: Tiempo del timer en C
« Respuesta #1 en: 18 de Noviembre de 2004, 05:03:00 »
En el proteus hay una herramienta cojonuda para medir el tiempo en
microsegundos, es el counter timer en la seccion de instruments, con eso afinas
fino fino, pero que muy fino  

pruebalo  

yo lo conecto al portc de 18f452
clk al osc1/clk
Ce (counter enable) al Rc0
Rst reset al Rc1

este es el codigo para medir el tiempo

//reseteo contador
output_c(0x03);
//lo ponemos a andar
output_c(0x01);

//aqui rutina se ejecuta rutina a medir el tiempo

//paramos contador
output_c(0x00);

si la operacion se va a realizar muchas veces lo mejor sera medir todo el bucle asi
el valor sera la media (mas preciso aun)


con esto y jugando un poco con los delays se puede conseguir la temporizacion
que quieras  

¿todavia estan saltando?
 RebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotado

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Tiempo del timer en C
« Respuesta #2 en: 18 de Noviembre de 2004, 05:42:00 »
Perdon pero no tengo ningun problema con medir el tiempo ya se cuanto tarda cada interrupción (y no utilizo Proteus ), mi pregunta es más básica, si el timer le cargo FF realiza la int en la transición FF ---> 00  interrumpira con una instrucción, si tengo un cristal de 4Mh eso seá 1useg, pero no sucede así con C puesto que he observado que tarda 60useg, como puedo arreglar eso y en el caso que no pueda a que se debe y si es estable.

No si saltar saltan pero cuanto tardan?
RebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotadoRebotado
- T0ni0 -
30RCF112

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Tiempo del timer en C
« Respuesta #3 en: 18 de Noviembre de 2004, 08:59:00 »
Personalmente te recomendaria que subieras tu oscilador principal de 4Mhz a 20 Mhz, veo que quieres interumpir cada 1 uS y ese es el tiempo que ese micro a ese cristal tarda en realizar una instrucción, asi que lo mejor es aumentar la velocidad y realizar la prueba y nos cuentas.
 Sonrisa

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Tiempo del timer en C
« Respuesta #4 en: 18 de Noviembre de 2004, 09:19:00 »
Pues va a ser q no puedo, puesto que utilizo el Oscilador interno del PIC, es un 12F675 y necesito todos los pines PayasoPayaso

Tengo una onda cuadrada y quiero saber el Duty Cicle, por fortuna he podido variar la onda de 1ms (periodo) a 10ms. Aun así necesito saber con la mayor exactitud  que tiempo esta a high y a low.

Como lo ven ? a ver q valor puedo conseguir RollEyesRollEyesRollEyes
- T0ni0 -
30RCF112

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Tiempo del timer en C
« Respuesta #5 en: 18 de Noviembre de 2004, 10:09:00 »
Supongo que esos 60us se deben a que tienes una rutina de atención a la interrupción y debe ser el tiempo que le cuesta en entrar en ella.

¿Porque no usas, si puedes en tu programa, la detección del bit T0IF, sin rutina de interrupción?