2010-08-29 6 views
5

Hola, me pregunto si alguien podría darme un ejemplo de cómo funciona la función TickGetDiv256();. Venía de Microchip en Tick.c¿Cómo funciona TickGetDiv256()?

Estoy tratando de contar por 2 horas, si se llena un motor se detendrá.

Podría utilizar la función "threshold = tick + TICKS_PER_SECOND * 60;". Pero no sé si sería bueno usarlo durante este período de tiempo: threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

Saludos cordiales

+0

¿Qué velocidad está corriendo el reloj? –

+0

El clokc funciona a 48Mhz :) – Christian

+0

¿Hay un ciclo de reloj "un tic"? –

Respuesta

2

juzgar por la MPLAB C guide, el mayor tipo de datos entero soportado por el compilador de C es de 32-bits. Por lo que puedo ver en otro lugar, el contador de ticks tiene seis bytes: TickGetDiv256 devuelve los 'cuatro medios' de estos bytes.

Dado que los seis bytes completos del contador de ticks no caben en un entero de 32 bits, usaría TickGetDiv256 para extraer los bytes medios y así contar el número de intervalos de '256 ticks' que han pasado desde el mostrador se inició. Por supuesto, esto no es estrictamente cierto ya que está ignorando el byte más alto del contador de tics. Tendrá que utilizar esta función si los menores de cuatro bytes del contador de paso no proporcionan suficiente de un rango para el lapso de tiempo que le interesa

0

tal vez pueda hacer de esta manera:.

// if (Ts1/GTsy1) is under 40 and have'nt increased within 2h 
    if (AD0 < 40 && (TickGetDiv256() - (startingTick + (TICKS_PER_SECOND * 7200)/256)) >= 7200) 
    { 
     sip.PL = 0; 
     sip.PU = 0; 
     // Failure(code); 
    } 

    // if (Ts1/GTsy1) is under 40, start countdown 
    if (AD0 < 40) 
    { 
     if (!alflags.ColdTimer) 
      startingTick = TickGetDiv256(); //Start timer 
     alflags.ColdTimer = 1; 
    } 
    else 
     alflags.ColdTimer = 0; 
+0

TickGetDiv64K() le dará los cuatro bytes superiores del contador de ticks; esto puede ser un poco más seguro si no está restableciendo el contador de ticks durante la operación: tendrá una resolución de 2s con esta función @ 32,768 tps. –