Что интересно :).
Поставил тут себе ядро 3.1 :).
В нем нашел драйвер rotary_encoder :). Автор тот же что и по ссылке, но драйвер другой немного.
Работает замечательно :).
Поделишься тоже инфой? :) а то у меня нет промышленного энкодера.
данивапроз - там все просто (на первый взгляд)..
взял простейший rotary encoder PEC16 линк на доку, помимо вращения еще понимает нажатие.. соединил выходы с китом на 9g45, в ядре взвел пункт "rotary encoder gpio". в файле борды прописал хидер энкодера, структуру и регистрацию платформы:
input: rotary-encoder as /devices/platform/rotary-encoder.0/input/input2
натравил evtest:
root@armets:~# evtest /dev/input/event2
Input driver version is 1.0.0
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "rotary-encoder"
Supported events:
Event type 0 (Sync)
Event type 2 (Relative)
Event code 1 (Y)
Testing ... (interrupt to exit)
Event: time 1320694285.228808, type 2 (Relative), code 1 (Y), value -1
Event: time 1320694285.228824, -------------- Report Sync ------------
Event: time 1320694286.910946, type 2 (Relative), code 1 (Y), value -1
Event: time 1320694286.910961, -------------- Report Sync ------------
Event: time 1320694289.340309, type 2 (Relative), code 1 (Y), value -1
Event: time 1320694289.340324, -------------- Report Sync ------------
Event: time 1320694290.254280, type 2 (Relative), code 1 (Y), value -1
Event: time 1320694290.254296, -------------- Report Sync ------------
т.е. можно сделать вывод, что железо исправно, подключено, в ядре прописано и что-то выдает на выход. И тут нарисовалась офигенная проблема - КАК это эксплуатировать?! 5 страниц гугля выдали мычание и круть подключивших RE ко всем мыслимым однокристалкам, но упоминаний о софте, который понимает энкодер я не увидел :-/ идеи есть?
черная кругляшка - это ручко-кнопко, сам энкодер чуть правее:
почесал в затылке и понял, что на выхлопе evtest ничего полезного нету.. чуть поменял настройки (попутно отключил uart1 - чтобы GPIO не конфликтовали):
мозаика соизволила поменятся и стало все чуть понятнее :)
root@armets:~# evtest /dev/input/event2
Input driver version is 1.0.0
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "rotary-encoder"
Supported events:
Event type 0 (Sync)
Event type 3 (Absolute)
Event code 1 (Y)
Value 0
Min 0
Max 24
Flat 1
Testing ... (interrupt to exit)
Event: time 1320696161.150329, type 3 (Absolute), code 1 (Y), value 1
Event: time 1320696161.150344, -------------- Report Sync ------------
Event: time 1320696161.218273, type 3 (Absolute), code 1 (Y), value 2
Event: time 1320696161.218288, -------------- Report Sync ------------
Event: time 1320696161.270156, type 3 (Absolute), code 1 (Y), value 1
Event: time 1320696161.270169, -------------- Report Sync ------------
Event: time 1320696161.296107, type 3 (Absolute), code 1 (Y), value 0
Event: time 1320696161.296118, -------------- Report Sync ------------
Event: time 1320696163.168682, type 3 (Absolute), code 1 (Y), value 1
Event: time 1320696163.168697, -------------- Report Sync ------------
Event: time 1320696163.184397, type 3 (Absolute), code 1 (Y), value 2
Event: time 1320696163.184415, -------------- Report Sync ------------
Event: time 1320696163.201898, type 3 (Absolute), code 1 (Y), value 3
Event: time 1320696163.201913, -------------- Report Sync ------------
Event: time 1320696163.228782, type 3 (Absolute), code 1 (Y), value 4
Event: time 1320696163.228795, -------------- Report Sync ------------
Event: time 1320696163.228851, type 3 (Absolute), code 1 (Y), value 5
Event: time 1320696163.228857, -------------- Report Sync ------------
Event: time 1320696163.228887, type 3 (Absolute), code 1 (Y), value 6
Event: time 1320696163.228894, -------------- Report Sync ------------
Event: time 1320696163.268265, type 3 (Absolute), code 1 (Y), value 7
Event: time 1320696163.268278, -------------- Report Sync ------------
Event: time 1320696163.320623, type 3 (Absolute), code 1 (Y), value 8
Энкодер абсолютный чтоли?
У меня все сразу сложилось в конечную картинку :) единственно что шумит у меня энкодер, у тебя нет? Если сильно быстро крутнуть, то будет ли пропускать щелчки или фонить??
Энкодер абсолютный чтоли?
У меня все сразу сложилось в конечную картинку :) единственно что шумит у меня энкодер, у тебя нет? Если сильно быстро крутнуть, то будет ли пропускать щелчки или фонить??
ну ты спросил - а я ваще не в теме :)
по доке у него до 100rpm - видимо если быстрее крутить, то или развалится или будет пропускать замыкания..
а все остальное на совести драйвера - не забывай, что это режим GPIO, а там изрядные ограничения..
"по хорошему" надо или енкодер попринавернутее или процессор с коркой энкодера (egg PXAxxx)
Есть одна тема ;) горняково-промышленная :) подсмотрел у одних вендоров, и пытаюсь воспроизвести своими силенками :).
Мне вот интересно следующее: сколько импульсов сможет уловить плата :). Потому что планируется подключать промышленный энкодер, у которого на один полный круг до ~3000 импульсов...(у таких кстати сразу идут фильтра на ложные импульсы, т.е. врать он не должен) и еще он вращаться быстро будет, не "лопнет" ли GPIO от этого :))
И еще как вариант, можно интерфейс пользователя неплохо организовать :).
хм.. надо смотреть - как работает драйвер и как он ловит события на пинах, если обычный поллинг, запросто может "глотать", т.б. ты хочешь до 3кГц входящих..
может надо заточить пины в режим Capture(?) и немного разгрузить АРМ.. или думать в сторону отдельностоящей однокристалки, на которой изобразить контроллер, который будет заниматься мырой обработкой и сливать готовый результат..
И еще как вариант, можно интерфейс пользователя неплохо организовать :).
дак это писать надо :)
хотелось бы так "на халяву" посмотреть, а уж потом куда-нить в ГУЙ прикручивать..