|
|
  |
LPC1768 - 2 encoders? |
|
|
|
Jul 11 2011, 07:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Есть устройство на LPC1768, просят добавить к нему ДВА енкодера. Ноги свободные есть, в т.е. и энкодерного интерфейса, но он там один. Есть какие-то идеи? Энкодеры обычные, контактные с кнопкой, одновременная работа двух енкодеров не нужна, но вариант одного енкодера, регулирующего 2 параметра (в зависимости от "нажат/не нажат") - у заказчика энтузиазизма не вызывает  Сильно не вызывает - хочет два. Думал уже обьединить им выходы через диоды, а общие квадратурный сигналов завести на выход их-же кнопок. Кнопки завести и на входы МК. Для работы - надо будет нажать энкодер и потом крутить. Но как-то это горбато, да и заводить кнопки надо будет не на просто порты, а на входы прерываний.
|
|
|
|
|
Jul 11 2011, 20:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Dron_Gus @ Jul 11 2011, 19:00)  Насколько быстро их будут крутить? Ну как обычно ручки крутят. Цитата Думаю хватит быстродействия, если второй энкодер повесить на пины внешнего прерывания. Или даже на одно прерывание. Быстродействия 100 мегагерцового 32-х битного процессора? А тут еще надо "думать" ?  Для этого хватает и 4-х мегагерцового PIC'а. Можно и без прерывания, опросом в прерывании по таймеру. Как это делаться программно я в курсе, но раз уж у МК есть аппаратный блок для энкодера, то смысл будет или что-то "эдакое" придумать (о чем я и попросил "помощь клуба"), или уж если делать программно опрос, то обоих - а то я помру в муках выбора, какой из двоих сделать аппаратно, а какой программно
|
|
|
|
|
Jul 12 2011, 05:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата А если кроме энкодеров на морде еще кака-то индикация, то вообще все повесить на отдельный контроллер, который занимался бы вводом-выводом Да там в общем, этот МК 99ю99% времени и занимается вводом-выводом. LPC1768 стоит только из-за эзернета (управление через веб-сервер), а так, там бы и простого АВР-а хватило - процесссы все медленные. Не, придется видимо программно....
|
|
|
|
|
Jul 12 2011, 10:32
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Цитата(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; } } }
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|