maik-vs (28.09.2010 19:20, просмотров: 190) ответил mazur на 600 тактов, это если он только импульсы считать, ты об этом не забывай. А нужно еще задачи выполнять. Например, по минимуму, вывести результат на экран. Вот и подсчитай максимальную частоту. У меня сейчас получается, начиная с прихода импульса и
Зачем лишние триггеры... Энкодер обрабатывал так (ассемблер, опрос через небольшой интервал):
В регистре хранится "история фаз" - три последних состояния, всего 6 бит.
принимаем значения фаз А,Б, сравниваем с последним состоянием из "истории". То же самое? выходим (9 циклов контроллера).
Другое: продвигаем "историю" (6 циклов). Сравниваем историю с константами "вперёд" 1-0-2 и "назад" 2-0-1, в зависимости от результата инкрементируем/декрементируем/али ничего регистр "короткого значения" (10-12 циклов).
Регистр короткого значения хранит знаковую величину, сколько прошагал энкодер за период между обработкой этой величины. Обработка происходит в другом, гораздо более медленном цикле, у меня - при индикации. Значение регистра прибавляется к (черырёхбайтовому) значению количества шагов и он сбрасывается.
Если делать на прерываниях, то можно наверное чего-то и подсократить, потому что известно состояние фазы.