2010-08-29 5 views
5

Привет. Интересно, может ли кто-нибудь дать мне пример, как работает функция TickGetDiv256();. Он пришел от Microchip в Tick.cКак работает TickGetDiv256()?

Im пытается подсчитать для 2 houre, если заполненный двигатель будет остановлен.

Я мог бы использовать функцию «threshold = tick + TICKS_PER_SECOND * 60;». Но я не знаю, было бы хорошо использовать его за это время: threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

С наилучшими пожеланиями

+0

Какая скорость часы работают? –

+0

Clokc работает на 48Mhz :) – Christian

+0

Является ли тактовый цикл «одним тиком»? –

ответ

2

Судя по MPLAB C guide, самый большой целочисленный тип данных поддерживается компилятором C составляет 32 бита. Из того, что я могу найти в другом месте, счетчик тиков равен шести байтам - TickGetDiv256 возвращает «четвертую четверть» этих байтов.

Поскольку полные шесть байтов счетчика тиков не могут поместиться в 32-битное целое число, вы должны использовать TickGetDiv256 для извлечения средних байтов и, следовательно, иметь счетчик интервалов «256 тиков», прошедших с тех пор счетчик был запущен. Конечно, это не совсем верно, поскольку он игнорирует самый старший байт счетчика тиков. Вы бы использовать эту функцию, если нижние четыре байта счетчика тиков не обеспечивают достаточно диапазон для промежутка времени вы заинтересованы в

0

Может быть, я могу сделать так:.

// 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() предоставит вам верхние четыре байта счетчика тиков - это может быть немного безопаснее, если вы не сбросите счетчик тиков во время работы - вы получите разрешение 2 с этой функцией @ 32,768 tps. –