Тоже не понял задачи. Как можно определить скорость шагового двигателя? Может вы путаете шаговый двигатель с энкодером?
Шг работать должен по прерыванию, прерывание будет осуществляться от встроенного таймера. Скорость коммутации обмоток определяет скорость движения (блоков). Скорость коммутации обмоток определяется по времени, который будет задаваться встроенного таймера. С помощью клавиатуры будет задаваться скорость движения (блоков). Значение от таймера берется из Буфера, в этот буфер значение подается с помощью клавиатуры
тут на днях делал похожую штуку выставляете таймер 2 в setup // Here we set up the Timer2 BEGIN ASSR=0x00; TCCR2A=0x00; TCCR2B=0x06; TCNT2=0x55; OCR2A=0x00; OCR2B=0x00; // Here we set up the Timer2 END после loop(){} пишете программу передрыга ног шаговика ISR(TIMER2_OVF_vect) { // Interuption Sub Routine // тут собственно сам ногодрыг и пишите по всем ногам TCNT2=0; // } при установках ресета как у меня получается один дрыг в 4 мс.