2010-08-29 29 views
5

Salut Je me demande si quelqu'un pourrait me donner un exemple comment fonctionne la fonction TickGetDiv256();. Il est venu de Microchip dans Tick.cComment fonctionne TickGetDiv256()?

Im essayant de compter pendant 2 houre, si rempli un moteur sera arrêté.

Je pourrais utiliser la fonction "threshold = tick + TICKS_PER_SECOND * 60;". Mais je ne sais pas s'il serait bon de l'utiliser pour ce laps de temps: threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

Bien cordialement

+0

Quelle vitesse est l'horloge qui tourne? –

+0

Le clokc fonctionne à 48Mhz :) – Christian

+0

Un cycle d'horloge est-il un "tick"? –

Répondre

2

A en juger par la MPLAB C guide, le plus grand type de données entier pris en charge par le compilateur C est de 32 bits. De ce que je peux glaner ailleurs, le compteur de ticks est de six octets - TickGetDiv256 renvoie les «quatre au milieu» de ces octets. Etant donné que les six octets du compteur de graduation ne peuvent pas tenir dans un entier de 32 bits, vous devez utiliser TickGetDiv256 pour extraire les octets du milieu et compter ainsi le nombre d'intervalles de «256 ticks» qui se sont écoulés depuis le TickGetDiv256 le compteur a été démarré. Bien sûr, ce n'est pas strictement vrai puisqu'il ignore l'octet le plus élevé du compteur de tiques. Vous souhaitez utiliser cette fonction si les quatre octets inférieurs du compteur de tique ne fournissent pas assez d'une gamme pour la timespan vous êtes intéressé par

0

Peut-être que je peux le faire comme ceci:.

// 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() vous donnera les quatre octets supérieurs du compteur de tick - cela peut être un peu plus sûr si vous ne réinitialisez pas le compteur de ticks pendant le fonctionnement - vous aurez une résolution de 2s avec cette fonction @ 32 768 tps. –