Показать сообщение отдельно
Старый 30.06.2008, 13:35   #117
Wanted
Hello world!
 
Аватар для Wanted
 
Регистрация: 28.01.2007
Город: Moscow
Регион: 77, 97, 99, 177
Машина: BMW-320td-2001 BMW-E92-325XI
Сообщений: 1,209
Wanted will become famous soon enoughWanted will become famous soon enough
По умолчанию

Цитата:
Сообщение от 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;
}
__________________
Мой mediaBMW

Прогресс постройки: [##########] 100%
Прогресс установки: [##########] 100%
Прогресс настройки: [#########-] 90% Почти до идеала

Видеонаблюдение в машине? ДА!
Wanted вне форума   Ответить с цитированием