Цитата
если нужно определять направление движения то обрабатывать нужно два выхода. Если не нужно определять направление движения то достаточно одного вывода
Выкидывая второй сигнал вы уменьшете разрешающую способность энкодера в 2 раза!
Код
prev_pind2 = pind2;
prev_pind3 = pind3;
pind2 = ( ((PIND.2) & (1<<PIND.2)) == 0 );
pind3 = ( ((PIND.3) & (1<<PIND.3)) == 0 );
any_edge_d3 = ( prev_pind3 ^ pind3 )
any_edge_d3 выделяет все фронты одного из сигналов.
Код
if(!pind2 & any_edge_d3)
count = (pind3) ? count + 1 : count - 1;
Это мы получили половину разрядности
Теперь остальное
Код
full_code = count << 1 | ( (pind2 ^ pind3) == 0);
В принципе у psw таже задача решена табличным способом.
Ещё хотелось бы знать какова разрешающая способность вашего датчика.