boez писал(а):А нужно всего 5000/60*1024 = 85 кГц.
Имхо, вы слегка переоцениваете возможности МК, и недооцениваете работу с энкодерами.
Во-первых, когда говорят "энкодер на 1024 положения", это обычно означает, что энкодер выдает 1024 полных квадратурных цикла. То есть на один оборот вала мы имеем 1024 импульса на каждом из выходов. То есть 2048 фронтов на каждом из выходов.
Во-вторых, тут правильно заметил Dead, что нужно обрабатывать только один выход. НО.... ловить нужно ОБА фронта. Это уже означает, что прерывание (если речь идет о прерываниях) будет вызываться с частотой 170 кГц (период 6 микросекунд).
Причина, почему правильно следить только за одним сигналом, очень проста - энкодер не всегда гарантирует полную симметричность выходов, это особенно заметно на высоких скоростях (он в общем случае и не обязан быть симметричным, хотя производители, конечно, стараются).
Из этого следует два вывода:
1. Хотя обрабатывать необходимо оба фронта, считать нужно только один (то есть мы как раз получаем 1024 позиции на оборот).
2. После возникновения фронта нужно как можно быстрее считать состояние выходов энкодера (даже при абсолютно симметричной последовательности нужно уложиться в три микросекунды, а если предполагать неидеальность энкодера, то и того меньше).
Именно поэтому нехорошо вешать "три энкодера на три прерывания", как тут смело предположил dccharacter.
dccharacter писал(а):Один pic16f1827 придется полностью выделить под три энкодера без возможности считать с него эти данные.
. Пока обрабатывается одно из прерываний, можно легко пропустить смену состояния на другом входе. Прерывание-то, может быть, защелкнется и отработает позже, но считывание входа произойдет со значительной задержкой и может приводить к неверным результатам.
Ну и в-третьих, это все еще как-то можно переварить, если речь идет об ассемблере. Но какие там прологи и эпилоги в прерываниях городит неизвестный компилятор, оценить часто бывает трудно (ему там приспичит все регистры сохранить, и фиг ему чего докажешь).