Цитата
Завести таймер на отсчет, скажем, миллисекунд и по прерыванию от геркона считывать и обнулять этот таймер. А дальше элементарная математика.
Берете таймер, у которого есть режим CTC (clear timer on compare).
Ставим в этот режим. В регистр сравнения пишем число клоков,приходящихся на 1мс (наприметр для 10 МГЦ - 10 000, не забываем также ,что у таймера есть прескаллер) .Разрешаем прерывание по сравнению.
Код
void InitSysTimer2(void)
{
TCNT2 = 0;
OCR2 = 138;//0.1мкс f= 11 059 000
TCCR2 = 0;
TCCR2 = (1 << WGM21)|(1 << CS21);//CTC mode
TIMSK |= (1 << OCIE2);
}
В прерывании увеличиваем переменную
Код
volatile int ms_count
Все у вас пошел счет времени.
В прерывании от геркона, считываем ее - это будет время одного(или 1/2,1/3, 1/4) оборота в зависимости от количества срабатываний на оборот и сбрасываем. Единственное, что следует продумать - это разруливание двух прерываний, оперирующих с одной переменной.
Ну и напоследок - для таких условий как велосипед, лучше не геркон , а датчик Холла.