Как подсчитать импульсы за промежуток времени?
В атмеге не менее двух таймеров. Первый таймер настраиваете на работу от внешнего тактового источника с делителем 1:1, второй таймер настраиваете на работу от тактового генератора контроллера с подходящим вам делителем (на мегагерце подойдет, например, 1:64) и активируете ему прерывание по переполнению.
В обработчике этого прерывания смотрите значение, которое насчитал первый таймер.
Наброски топорного нехорошего варианта, про точность и работоспособность промолчу
(они сильно зависят от частоты измерений и продолжительности измерения, так же считаем, что на вход не летят какие-то помехи):int time_stop; //время прекращения измерений
int time;//для текущего времени
int count;//счетчик
int t1,t2;//для определения того, что прошел импульс
//t1 - текущее, t2 - предыдущее состояния

count=0;//обнуляем всё
t1=0; t2=0;
time=millis();//считываем текущее время
time_stop=time+100; //через сколько прекратить замер в данном случае +100мс

while(time<=time_stop)//пока время меньше времени останова
{
t1=digitalRead(PINx);//читаем какой-то пин
if(t1!=t2)//если t1 и t2 не равны
  {
  if(t1>t2)count++;//если t1>t2 (т.е. передний фронт), то увеличим счетчик
  t2=t1; //предыдущее состояние = текущему
  }
time=millis();//обновляем текущее время
}
В count под конец должны получить что-то очень близкое к количеству импульсов.
Из минусов - цикл жрет время, не давая в этот момент делать что-либо еще.
Если только посчитать, потом вывести на дисплей, то пойдет может быть.