Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
Подключение энкодера
bzzz
Добавлено 17.10.2011 12:21 Сообщение: 11
bzzz
0

Пункты: 1170
Регистрация: 01.03.2011
Цитата

Скорей всего (!!) там применили для того чтобы nonzero однозначно привести к 1 для дальнейших арифметических операций.


я это и сказал. 1 - это частный случай.

достаточно известный и эффективный способ избавиться от branch misprediction, который может стоить до 10-20 циклов ...
Спуститься к концу Подняться к началу
Персональная информация
Alfamayonez
Добавлено 30.10.2011 16:13 Сообщение: 12
Alfamayonez
3.42

Пункты: 3702
Регистрация: 04.10.2009
Пол: Мужчина
Что интересно :).
Поставил тут себе ядро 3.1 :).
В нем нашел драйвер rotary_encoder :). Автор тот же что и по ссылке, но драйвер другой немного.
Работает замечательно :).
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 05.11.2011 23:09 Сообщение: 13
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Что интересно :).
Поставил тут себе ядро 3.1 :).
В нем нашел драйвер rotary_encoder :). Автор тот же что и по ссылке, но драйвер другой немного.
Работает замечательно :).

о! надо будет взять промышленный енкодер и приживить "напосмотреть", а то ты так вкусно рассказываешь :)

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Alfamayonez
Добавлено 07.11.2011 00:27 Сообщение: 14
Alfamayonez
3.42

Пункты: 3702
Регистрация: 04.10.2009
Пол: Мужчина
Цитата
Цитата
Что интересно :).
Поставил тут себе ядро 3.1 :).
В нем нашел драйвер rotary_encoder :). Автор тот же что и по ссылке, но драйвер другой немного.
Работает замечательно :).

о! надо будет взять промышленный енкодер и приживить "напосмотреть", а то ты так вкусно рассказываешь :)

Поделишься тоже инфой? :) а то у меня нет промышленного энкодера.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 07.11.2011 21:54 Сообщение: 15
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Поделишься тоже инфой? :) а то у меня нет промышленного энкодера.

данивапроз - там все просто (на первый взгляд)..
взял простейший rotary encoder PEC16 линк на доку, помимо вращения еще понимает нажатие.. соединил выходы с китом на 9g45, в ядре взвел пункт "rotary encoder gpio". в файле борды прописал хидер энкодера, структуру и регистрацию платформы:
Код
/**
* Rotary encoder input device
*/
static struct rotary_encoder_platform_data ek_rotary_encoder_info = {
.steps = 24,
.axis = REL_X,
.relative_axis = 1,
.gpio_a = AT91_PIN_PB19,
.gpio_b = AT91_PIN_PB4,
.inverted_a = 0,
.inverted_b = 0,
};
static struct platform_device rotary_encoder_device = {
.name = "rotary-encoder",
.id = 0,
.dev = {
.platform_data = &ek_rotary_encoder_info,
}
};

пересборка ядра, в логе:
Код
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 ко всем мыслимым однокристалкам, но упоминаний о софте, который понимает энкодер я не увидел :-/
идеи есть?
черная кругляшка - это ручко-кнопко, сам энкодер чуть правее:
title

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 07.11.2011 22:15 Сообщение: 16
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
почесал в затылке и понял, что на выхлопе evtest ничего полезного нету.. чуть поменял настройки (попутно отключил uart1 - чтобы GPIO не конфликтовали):
Код
static struct rotary_encoder_platform_data ek_rotary_encoder_info = {
.steps = 24,
.axis = REL_Y,
.relative_axis = 0,
.gpio_a = AT91_PIN_PB19,
.gpio_b = AT91_PIN_PB4,
.inverted_a = 0,
.inverted_b = 0,
};

мозаика соизволила поменятся и стало все чуть понятнее :)
Код
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

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Alfamayonez
Добавлено 08.11.2011 09:04 Сообщение: 17
Alfamayonez
3.42

Пункты: 3702
Регистрация: 04.10.2009
Пол: Мужчина
Энкодер абсолютный чтоли?
У меня все сразу сложилось в конечную картинку :) единственно что шумит у меня энкодер, у тебя нет? Если сильно быстро крутнуть, то будет ли пропускать щелчки или фонить??
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 08.11.2011 10:22 Сообщение: 18
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Энкодер абсолютный чтоли?
У меня все сразу сложилось в конечную картинку :) единственно что шумит у меня энкодер, у тебя нет? Если сильно быстро крутнуть, то будет ли пропускать щелчки или фонить??

ну ты спросил - а я ваще не в теме :)
по доке у него до 100rpm - видимо если быстрее крутить, то или развалится или будет пропускать замыкания..
а все остальное на совести драйвера - не забывай, что это режим GPIO, а там изрядные ограничения..
"по хорошему" надо или енкодер попринавернутее или процессор с коркой энкодера (egg PXAxxx)

ты лучше расскажи - куда его можно применить? :)

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Alfamayonez
Добавлено 08.11.2011 23:39 Редактировалось 08.11.2011 23:41 Сообщение: 19
Alfamayonez
3.42

Пункты: 3702
Регистрация: 04.10.2009
Пол: Мужчина
Есть одна тема ;) горняково-промышленная :) подсмотрел у одних вендоров, и пытаюсь воспроизвести своими силенками :).
Мне вот интересно следующее: сколько импульсов сможет уловить плата :). Потому что планируется подключать промышленный энкодер, у которого на один полный круг до ~3000 импульсов...(у таких кстати сразу идут фильтра на ложные импульсы, т.е. врать он не должен) и еще он вращаться быстро будет, не "лопнет" ли GPIO от этого :))
И еще как вариант, можно интерфейс пользователя неплохо организовать :).
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 09.11.2011 12:04 Сообщение: 20
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
хм.. надо смотреть - как работает драйвер и как он ловит события на пинах, если обычный поллинг, запросто может "глотать", т.б. ты хочешь до 3кГц входящих..
может надо заточить пины в режим Capture(?) и немного разгрузить АРМ.. или думать в сторону отдельностоящей однокристалки, на которой изобразить контроллер, который будет заниматься мырой обработкой и сливать готовый результат..

Цитата
И еще как вариант, можно интерфейс пользователя неплохо организовать :).

дак это писать надо :)
хотелось бы так "на халяву" посмотреть, а уж потом куда-нить в ГУЙ прикручивать..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux