ENCODER из китайской мышки

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

Есть пару мышек без дела, в них стоят энкодеры на 3 ножки. Почему данный энкодер через шаг имеет разное исходное состояние, тоисть один шаг-все ножки разомкнуты, а на втором все замкнуты ?? Это какой то кривой энкодер или так должно быть ? Я представлял себе энкодер вот по этому рисункуИзображениетак что в исходном состоянии все ножки разомкнуты, крутим вправо так А-ножка замыкает первая на С-ножку чем В-ножка, а если влево,то наоборот, из чего сделал алгоритм - Смотрим на состояние А ножки, и по фронту(0 к 1), смотрим на В ножку, если во время фронта на В ножке 0, то крутим в одну сторону, если на ножке В 1 то в другую .
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 451
Зарегистрирован: Сб фев 26, 2011 14:38:42
Откуда: Новочеркасск

Сообщение Reloader »

mich91 писал(а):Это какой то кривой энкодер или так должно быть ?
Дружище, я дня 3 пытался заставить нормально работать энкодер от мыши. Не бросал только по одной причине : "В мышке же работает!!" Но так ничего путного из этого не получилось :(. Как все это работает в мышке - одним китайцам ведомо...
Выпрямите спину и уберите левую руку от лица.
Мой Youtube канал
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 454
Зарегистрирован: Вс янв 15, 2012 19:58:40

Сообщение radiokot__ »

Странно, а меня всё нормально работает, штуки 3 уже использовал.
Ни один домашний кот незнает что он домашний.
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Подключал энкодер от умершей оптической мыши к контроллеру. Завелось без проблем. Может ваш энкодер приказал долго жить и стоит покурочить другую мышь?
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Что за чушь? так и должно быть посмотрите на диаграмму то.Речь идет о оптическом инкодере или как?
Когда оба глаза в окне так и будет два замкнуты, а когда оба глаза закрыты шторкой будут оба разомкнуты.Между шагами будет как раз промежуточное состояние- то что на вашем рисунке под пунктиром.
Алгоритм получается такой запомнили предыдущее состояние оба ведь одинаковые.
Теперь при начале движения у одного контакта случилось изменение так вот в сторону этого контакта и есть движение.
Таким образом при движении дальше изменение второго игнорируется.
Пока оба состояния не станут одинаковыми.
Потом все повторяется.

Соответственно можно и через прерывание по изменению ноги А сделать.Как в первом посте написано.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

Энкодер механический

Нарушение правил п.2.7
ploop
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Ну смысл то от этого не меняется.Должно по очереди переключаться.Если одновременно переходят в это состояние, то точно неисправен.То что в нейтральном положении оба в одном состоянии это нормально, нужно проверять в промежуточном между стабильными состояниями.
В поисках истины человек развивается.
Контактная информация:
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

vitalik_1984 писал(а):Ну смысл то от этого не меняется.Должно по очереди переключаться.Если одновременно переходят в это состояние, то точно неисправен.То что в нейтральном положении оба в одном состоянии это нормально, нужно проверять в промежуточном между стабильными состояниями.
Сделал даже без прерываний ))
вот может кому то пригодится !!!
Спойлер

Код: Выделить всё

if(A_Enc == B_Enc)
      {             
        move=1;
        if(!A_Enc)
          begin_position=0;
        else
          begin_position=1;  
      }
      else
      { 
        if(begin_position)
        { 
           if(!A_Enc && B_Enc && move)
           {
             value++;
             move=0;
           }
           if(A_Enc && !B_Enc && move)
           {
             value--;
             move=0;
           }
        }
        else
        {
           if(!A_Enc && B_Enc && move)
           {
             value--;      
             move=0;
           }
           if(A_Enc && !B_Enc && move)
           {
             value++;
             move=0;
           } 
           
        } 
       
      }
      
      

      };
работает даже без устранения дребезга, там просто два конденсатора на плате с мышкой!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Сделал даже без прерываний ))
Ну вот молодец :)))

PS Вас уже один раз предупредили насчет правила 2.7 для того, чтобы просто ответить на предыдущее сообщение есть кнопка ответить.Не нужно ничего цитировать.Внимательнее, а то следущий раз модератор может бан назначить.
Контактная информация:
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

Код: Выделить всё

 if(A_Enc == B_Enc)
      {             
        move=1;
        if(!A_Enc)
          begin_position=0;
        else
          begin_position=1;  
      }
      else
      {
       
        if(begin_position)
        { 
           if(!A_Enc && B_Enc && move)
           {
             value++;
             move=0;
           }
           if(A_Enc && !B_Enc && move)
           {
             value--;
             move=0;
           }
        }
        else
        {
           if(!A_Enc && B_Enc && move)
           {
             value--;      
             move=0;
           }
           if(A_Enc && !B_Enc && move)
           {
             value++;
             move=0;
           } 
           
        } 
       
      }
Вот код , вроде норм работает ! Энкодер подключен общим к минусу, и к ножкам контролера с подтяжкой.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Можно было последние иф сделать через switch было бы нагляднее.
Формируется байт статуса, потом в конце обрабатывается.При этом используется меньше переменных.
И еще есть прикольная операция XOR берем предыдущее состояние 00 к примеру делаем операцию XOR новое состояние 10 получаем 10 то есть было движение влево.Теперь предположим что первое состояние 11 XOR новое 01 =10 изменился левый бит и код ответа одинаковый, соответственно можно судить в какую сторону движется энкодер.
Контактная информация:
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

Сообщение mich91 »

Дак там ещё и триггер сделан с помощью MOVE, тоисть что бы много кратно не считало VALUE пока энкодер не пройдет до конца шага, на SWITCH такое не получится без IF!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Спорим получится?Прочитайте внимательно и подумайте :)) дело в том, что в статус то можно и вашу переменную пихнуть.
Контактная информация:
Ответить

Вернуться в «Периферия»