реклама на сайте
подробности

 
 
> LPC1768 - 2 encoders?
Allregia
сообщение Jul 11 2011, 07:44
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



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

Думал уже обьединить им выходы через диоды, а общие квадратурный сигналов завести на выход их-же кнопок. Кнопки завести и на входы МК. Для работы - надо будет нажать энкодер и потом крутить. Но как-то это горбато, да и заводить кнопки надо будет не на просто порты, а на входы прерываний.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
evgen2
сообщение Jul 12 2011, 10:32
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(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;
        }
   }  
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016