Цитата(Allregia @ Jul 11 2011, 11:44)

Есть устройство на LPC1768, просят добавить к нему ДВА енкодера. Ноги свободные есть, в т.е. и энкодерного интерфейса, но он там один.
Есть какие-то идеи?
Энкодеры обычные, контактные с кнопкой, одновременная работа двух енкодеров не нужна, но вариант одного енкодера, регулирующего 2 параметра (в зависимости от "нажат/не нажат") - у заказчика энтузиазизма не вызывает

Сильно не вызывает - хочет два.
Думал уже обьединить им выходы через диоды, а общие квадратурный сигналов завести на выход их-же кнопок. Кнопки завести и на входы МК. Для работы - надо будет нажать энкодер и потом крутить. Но как-то это горбато, да и заводить кнопки надо будет не на просто порты, а на входы прерываний.
Если енкодеры-кнопки, то на пропуск импульсов в принципе можно наплевать и можно обойтись без прерываний
Код
/****** encoder ***********/
/* Optical datchick codes */
#define OD_NOP 0
#define OD_MINUS 1
#define OD_PLUS 2
#define OD_ERROR 3
static int optdatSts[16]=
{ OD_NOP, OD_PLUS, OD_MINUS, OD_ERROR,
OD_MINUS, OD_NOP, OD_ERROR, OD_PLUS,
OD_PLUS, OD_ERROR, OD_NOP, OD_MINUS,
OD_ERROR, OD_MINUS, OD_PLUS, OD_NOP
};
void Encoder(void)
{ int enc, st, st0, Kon0;
//тут ввод с двух ног по вкусу
Kon0 = FIO4PIN& 0x07;
EncoderKey = (~(Kon0&0x01)) & 0x01;
enc = (Kon0>>1);
//enc - это два бита
if(encold != enc)
{ st = (encold<<2)|enc;
encold = enc;
st0 = optdatSts[st];
switch(st0)
{ case OD_MINUS:
EncoderXpos++;
break;
case OD_PLUS:
EncoderXpos--;
break;
case OD_ERROR:
break;
}
}
}