Autor Tema: timer!!  (Leído 2268 veces)

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

Desconectado LAB_je

  • PIC10
  • *
  • Mensajes: 12
timer!!
« en: 26 de Julio de 2006, 08:25:53 »
que bueno por fin funciona de nuevo el foro!!! :-/!! la version 7.20 del MPLAB IDE no tiene la funcion de cronometro o reloj que disponian versiones anteriores??? yo me acuero que en alguna version anterior si que se disponia de esta opcion!! es que me gustaria saber el tiempo que tarda el micro (18f452) el ejecutar una rutina de atencion a la interrupcion producida por un timer!! claro, cuando inicializas el timer lo haces en base a un tiempo que has calculado, pero de los calculos a la realidad va un trecho (y me gustaria ajustar el tiempo de manera lo mas precisa posible)!!!utilizo como depurador un MPLAB ICD2!! la unica forma que se me ocurre es generar una salida cada vez que desborde el timer e introducirla a un osciloscopio, mediante el cual medir la distancia entre pulsos!!! a alguien se le ocurre alguna otra forma de mirar el tiempo????
otra cosilla,al realizar el programa en un principio lo habia hecho mediante el timer0, pero no se pq motivo no me generaba la interrupcion. lo unico que hice fue sustituir dicho timer por el timer3(por supuesto adecuando pequeñas cosillas en el programa) y funcionaba perfectamente!!! cual puede ser el motivo de ello??? existe diferencia entre ambos en cuanto a su utilizacion??
como siempre muchas gracias de ante mano!!!!

Desconectado eldavids

  • PIC10
  • *
  • Mensajes: 24
Re: timer!!
« Respuesta #1 en: 26 de Julio de 2006, 11:26:14 »
La version 7.3 de MPLAB IDE tiene incluido el "stopwatch" en el menu del debugger.

con respecto a la interrupcion tendrias que colocar el programa para poder ayudarte.


saludos
Si no entiendes una cosa y preguntas seras tonto durante 5 minutos, pero si no preguntas seras tonto durante toda la vida.

Desconectado LAB_je

  • PIC10
  • *
  • Mensajes: 12
Re: timer!!
« Respuesta #2 en: 27 de Julio de 2006, 04:48:40 »
este es una pequéña pruebilla q no me funciona y no se pq!!!!haciendo lo mismo con otro timer diferente al timer0 este programa va de maravilla!!

#include <p18f452.h>
#include <timers.h>

void atencion_interrupcion(void); //funcion de atencion a la interrupcion

// configuro el vector de interrupción
#pragma code high_interrupt_vector = 0x08

void high_ISR(void)
{
   _asm
       goto atencion_interrupcion//salto a la rutina de atencion a la interrupcion
   _endasm
}

// Rutina de atencion a la interrupcion
#pragma code
#pragma interrupt atencion_interrupcion
void atencion_interrupcion(void) {
   if (INTCONbits.TMR0IF)   // comprobamos que ha sido una interrupcion producida por el timer0
    {                                   
      INTCONbits.TMR0IF = 0;  //ponemos a cero el flag que indica interrupcion por el timer0
     PORTBbits.RB1=!PORTBbits.RB1;
     WriteTimer0(0xC000);      
    }
}

void main(void) {

   // configura Puerto B   
   TRISB=0;
   PORTB=0x00;
   
   // configura TIMER 1
   OpenTimer0( TIMER_INT_ON  &  // habilitamos las interrupciones por overflow del timer
        T0_16BIT   &      // modo del timer de 16 bits
        T0_SOURCE_EXT &      // reloj extenrno
        T0_PS_1_8   );      //preescaler 1:8
   WriteTimer0(0xC000);

   // configura interrupciones
   RCONbits.IPEN  =1;  // interrupciones CON prioridades
   INTCONbits.GIEH =1;  // permite interrupciones
   INTCON2bits.TMR0IP=1;   //configuramos la interrupcion del timer0 como de alta prioridad
   

   // bucle principal   
   while (1) {   
      PORTBbits.RB0=1;
   }
   CloseTimer0();
}

aqi cargo el timer con un valor que me permita ver el parpadeo del led, pero en realidad quiero que realice una interrupcion cada 25 microsegundo, valor que no consigo conseguir con el resto de los timer!!!(lo que mas me he aproximado es 60 microsegundos, supongo que sera pq el resto de los timer tan solo me permiten trabajar con un oscilador de 32khz, y el timer0 con el cristal de 4MHz de mi placa no???)
« Última modificación: 27 de Julio de 2006, 04:55:31 por LAB_je »

Desconectado LAB_je

  • PIC10
  • *
  • Mensajes: 12
Re: timer!!
« Respuesta #3 en: 27 de Julio de 2006, 09:09:39 »
otra cosilla relacionada con el timer y las interrupciones!!,puede ser que por algun motivo (por lo menos para mi desconocido en caso de su existencia ) las interrupciones producidas por el timer se encuentren limitadas, en cuanto al tiempo de aparicion???es decir, realizando calculos mi micro (18f452 con un oscilador de 4MHz) es capaz de generar interrupciones de 25micro seg.(y menores,pero este es el valor que necesito), pero en la practica no consigo que bajen de los 60 microsegundos (pese a cargar el timer con valores mayores este valor se mantiene)!!! cual puede ser el motivo de esto????no lo acabo de comprender muy bien!!

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: timer!!
« Respuesta #4 en: 27 de Julio de 2006, 17:02:27 »
Ya que va de timer este enlace...

Alguno tiene la fórmula del TIMER1 es decir ; TIMER1= 4*preescaler/256 * fosk o algo de ese extraño, haber si hay algún buen samaritano pues no lo encuentro  :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: timer!!
« Respuesta #5 en: 28 de Julio de 2006, 01:25:12 »
LAB_je, la única diferencia entre el Timer0 y el resto es que se puede configurar a 8 bits, pero veo en tu programa que lo configuras a 16, por lo que no debería fallar. Con respecto a la duración mínima de tu interrupción, creo que dependerá del nº de instrucciones que contenga la rutina de interrupción: a mayor número, mayor será la duración de la misma.

c4_esp_VR, puedes encontrar la información que necesitas, y mucha más en la Wiki-PIC de El Rebujito.

Desconectado LAB_je

  • PIC10
  • *
  • Mensajes: 12
Re: timer!!
« Respuesta #6 en: 28 de Julio de 2006, 04:11:23 »
la verdad es que es totalmente extraño Nocturno, pero no me funciona con si sustituyo el timer3 por el 0 ( realizando por supuesto los cambios pertinentes)!!! otra cosilla, existe algun tipo de forma de cargar el timer de forma cte. sin que tenga que hacerlo yo manualmente??es decir, que en cuanto termine vuelva a cargarse el solito!!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: timer!!
« Respuesta #7 en: 28 de Julio de 2006, 12:17:42 »
No conozco ninguna manera de hacer que se configure la precarga "él solito", siempre a través de la rutina de interrupción, o incluso del bucle principal.


 

anything