Цитата(rx3apf @ Aug 2 2009, 00:33)

Дальше все просто, имеем два значения в текущий момент и два те же самые, но на предыдущей выборке. Всего 16 комбинаций. Их декодируем в три варианта - счетчик в "+", в "-" либо ничего не делать. Для большинства энкодеров один щелчок - сдвиг счетчика на 4 либо на 2 (реже). Выборку обработали, сдвинули "историю" и так дальше. Я использовал выборку 4 kHz, энкодер PEC16. Ошибка на шаг при резких рывках вперед-назад - событие редчайшее, при вращении в одну сторону вообще никаких проблем.
Энкодер
такой .
У Чана тоже самое:
Код
volatile struct {
long position;
int moved;
} Encoder;
void sample_encoder(void)
{
static const int dir[] = { 0,1,-1,0,-1,0,0,1,1,0,0,-1,0,-1,1,0 };
static int i;
int n;
i = (i << 2) + (PA.PIN.BYTE & 3);
n = dir[i & 15];
if (n) {
Encoder.position += n;
Encoder.moved = 1;
}
}
Что-то написано про 1 кГц, я с такой частотой опрашивал его. Нифига не работает, скачет непредсказуемо.
Или надо эту функцию вызывать, получив стабильные данные?