Цитата:
Сообщение от Krock
 Мне в принципе всеравно на чем делать, уж больно  хочется доделать... Если не сложно удели и мне 2 минуты своего времени, навороты мне не нужны, только то что я раньше писал. Как я понимаю нужно 2 выходных порта, при повороте на одном "1" другой "0" и наоборот и все это через резистор на землю, токи там небольшие (на клавиатуре написанно 75mA max) где-то так. Большой тхэнкс!
|
Смотри я делал так, использовал два порта МК, на все настраиваются как входы с подтяжкой на +. Резисторы не нужны. При вращении энкодера соответсвующие ножки становятся 1 или 0. Проц работает у меня на частоте 12мегагерц. Идет опрос каждую 1/1000 секунды. Этого хватает чтобы не было проскоков и ошибок и внутри МК уже программа обрабатывает сам энкодер, вот она на C:
Код:
void pollEncoder(void)
{
uchar Enc;
Enc=(bit_is_clear(PINA,0)<<1)|(bit_is_clear(PINA,1)<<0);
reportBuffer.Encoder1=0;
reportBuffer.Encoder2=0;
if (oldEnc==Enc) { return; }
Enc=(oldEnc<<2)|(Enc);
oldEnc=Enc;
if (Enc==0b0100) { reportBuffer.Encoder2=1; }
if (Enc==0b0111) { reportBuffer.Encoder1=1; }
if (Enc==0b1101) { reportBuffer.Encoder2=1; }
if (Enc==0b1110) { reportBuffer.Encoder1=1; }
if (Enc==0b1011) { reportBuffer.Encoder2=1; }
if (Enc==0b1000) { reportBuffer.Encoder1=1; }
if (Enc==0b0010) { reportBuffer.Encoder2=1; }
if (Enc==0b0001) { reportBuffer.Encoder1=1; }
//go1:
return;
}