Таймеры, Help
Добавлено: Пт фев 06, 2009 10:09:36
Доброго времени суток, стоит задача измерить расход топлива на инжекторных двигателях. Нашел (т.е. помогли найти) полуготовый проект (http://www.telesys.ru/electronics/projects.php?do=p141), но код написан на IAR, а я в нем не "бум-бум", пытаюсь написать с нуля на CVAVR с отображением на LCD, но так как с таймерами еще не научился пользоваться прошу вашей помощи: мне нужно проверять"ногу"(какую имеено ногу незнаю, потомучто непонятно чем отличаеться T0 от INT0) по возрастающему фронту, и при срабатывании прерывания запускать таймер на подсчет тактов (посчитать длительность импульса) до того момента пока сигнал не пойдет на спад, если импульс пропал то все поновой...вот как реализованно это на IAR:
подскажите пожалуста как настроить таймеры в CVAVR и какую ногу использовать T0(T1) или INT0(INT1) 
Код: Выделить всё
#pragma vector = INT1_vect // INT1 (
__interrupt void MY_INT1 (void) // стандартная запись)
{
if ((MCUCR & Bit(ISC10)) != 0) // прерывание произошло по нарастающему фронту
{ TCCR1B = Bit(CS11); // запуск таймера c clk/8
MCUCR &= ~Bit(ISC10); // сбрасываем бит в регистре MCUCR для инициализации следующего прерывания по спадающему фронту
}
else // прерывание произошло по спаду
{ TCCR1B = 0; // останов таймера
MCUCR |= Bit(ISC10); // устанавливаем бит в регистре MCUCR для инициализации следующего прерывания по нарастающему фронту
g_fors_time = g_time_ovf;
g_fors_time = g_fors_time <<16> 28) // 2 сек нет сигнала - 7372800/8/65536 = 14 (раз) - это 1 сек.(примерно)
{TCCR1B = 0; // останов таймера
MCUCR |= Bit(ISC10); // устанавливаем бит в регистре MCUCR для инициализации следующего прерывания по нарастающему фронту
TCNT1 = 0; g_time_ovf=0;
g_eesave_en=1; // ставим флаг для сохранения по этому событию в EE
}
}