Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC1768 - 2 encoders?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Allregia
Есть устройство на LPC1768, просят добавить к нему ДВА енкодера. Ноги свободные есть, в т.е. и энкодерного интерфейса, но он там один.
Есть какие-то идеи?
Энкодеры обычные, контактные с кнопкой, одновременная работа двух енкодеров не нужна, но вариант одного енкодера, регулирующего 2 параметра (в зависимости от "нажат/не нажат") - у заказчика энтузиазизма не вызывает sad.gif
Сильно не вызывает - хочет два.

Думал уже обьединить им выходы через диоды, а общие квадратурный сигналов завести на выход их-же кнопок. Кнопки завести и на входы МК. Для работы - надо будет нажать энкодер и потом крутить. Но как-то это горбато, да и заводить кнопки надо будет не на просто порты, а на входы прерываний.
Dron_Gus
Насколько быстро их будут крутить? Думаю хватит быстродействия, если второй энкодер повесить на пины внешнего прерывания. Или даже на одно прерывание.

З.Ы. в каком-то древнем радио была схема на двух корпусах жёсткой логики, на выходе был сигнал направления и импульс на каждый "шаг".
Allregia
Цитата(Dron_Gus @ Jul 11 2011, 19:00) *
Насколько быстро их будут крутить?


Ну как обычно ручки крутят.

Цитата
Думаю хватит быстродействия, если второй энкодер повесить на пины внешнего прерывания. Или даже на одно прерывание.


Быстродействия 100 мегагерцового 32-х битного процессора? А тут еще надо "думать" ? sm.gif
Для этого хватает и 4-х мегагерцового PIC'а. Можно и без прерывания, опросом в прерывании по таймеру.
Как это делаться программно я в курсе, но раз уж у МК есть аппаратный блок для энкодера, то смысл будет или что-то "эдакое" придумать (о чем я и попросил "помощь клуба"), или уж если делать программно опрос, то обоих - а то я помру в муках выбора, какой из двоих сделать аппаратно, а какой программно sm.gif
VladKot
Посмотри м/с LS7183/LS7184
Allregia
Цитата
Посмотри м/с LS7183/LS7184
для данного применения - бессмысленно.
rx3apf
Я бы взял мелкий микроконтроллер (что-нибудь типа attiny2313), оба энкодера обрабатывал бы на нем (простым опросом), изменение кода (сразу для обоих) - посылками через UART.... А если кроме энкодеров на морде еще кака-то индикация, то вообще все повесить на отдельный контроллер, который занимался бы вводом-выводом. Чтобы аккуратнее было и проводов по-меньше...
Allregia
Цитата
А если кроме энкодеров на морде еще кака-то индикация, то вообще все повесить на отдельный контроллер, который занимался бы вводом-выводом


Да там в общем, этот МК 99ю99% времени и занимается вводом-выводом. LPC1768 стоит только из-за эзернета (управление через веб-сервер), а так, там бы и простого АВР-а хватило - процесссы все медленные.

Не, придется видимо программно....
evgen2
Цитата(Allregia @ Jul 11 2011, 11:44) *
Есть устройство на LPC1768, просят добавить к нему ДВА енкодера. Ноги свободные есть, в т.е. и энкодерного интерфейса, но он там один.
Есть какие-то идеи?
Энкодеры обычные, контактные с кнопкой, одновременная работа двух енкодеров не нужна, но вариант одного енкодера, регулирующего 2 параметра (в зависимости от "нажат/не нажат") - у заказчика энтузиазизма не вызывает sad.gif
Сильно не вызывает - хочет два.

Думал уже обьединить им выходы через диоды, а общие квадратурный сигналов завести на выход их-же кнопок. Кнопки завести и на входы МК. Для работы - надо будет нажать энкодер и потом крутить. Но как-то это горбато, да и заводить кнопки надо будет не на просто порты, а на входы прерываний.

Если енкодеры-кнопки, то на пропуск импульсов в принципе можно наплевать и можно обойтись без прерываний

Код
/****** 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;
        }
   }  
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.