Набор блоков ЭНКОДЕР

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#1

Сообщение Dryundel » 13.03.2019{, 23:00}

Тема устарела и морально и технически.
Новый блок EncoderPro здесь.

Сколько ни пытался найти удовлетворяющий меня блок энкодера, не получилось.
Выкладываю свои варианты. Здоровая критика приветствуется.
1.jpg
Скачать все одним архивом:
Энкодеры от Dryundel.ubl
(664.68 КБ) 1111 скачиваний
Блоки написаны на основе библиотеки Encoder.h
Могут работать на любых пинах, но на пинах поддерживающих прерывание результат самый лучший.
***
Энкодер_импульсный_v1.0_(CODE).ubi
(119.81 КБ) 504 скачивания
Энкодер_импульсный_v1.1_(CODE).ubi
(135.99 КБ) 701 скачивание
2.jpg
2.jpg (6.11 КБ) 20040 просмотров
Эти два блока выдают тики на выходах Up и Down (Вперед / Назад)
Отличие Энкодер_импульсный_v1.1 в том, что в нем можно настроить количество импульсов выдаваемых энкодером за один физический шаг.

Описание:
Энкодер_импульсный_v1.0
СпойлерПоказать
Энкодер импульсный v1.0

EncTic v1.0 - отслеживает импульсы датчиков энкодера, используея квадратурный медот подсчета импульсов и определяет напавление вращения.
В зависимости от направления вращения, на выходах Up или Down формируются импульсы, соответствующие одному физическому шагу энкодера..
В параметрах пользователя необходимо:
1. Указать 2 пина к которым подключены CLK и DT энкодера.

Есть три варианта подключения (из описания библиотеки):
1. Лучший результат - используются два пина поддерживающие прерывания.
2. Хорошая производительность - один из пинов поддерживает прерывания.
3. Низкая поизводительность - оба пина не поддерживают прерывания.

Ограничения:
1, Не рекомендуется использовать пины к которым подключена светодиодная индикация (в большинстве случаев Pin 13)!!!
2. Если одним энкодером задействованы два пина пина поддерживающие прерывание, то в проекте нельзя использовать более одного блока. Если хотя бы один из пинов к которому подключен энкодер не поддерживает прерывание, ограничение снимается.

При использовании длинных проводов между энкодером и платой можно поставить подтягивающий резистор 1К.

Пины поддерживающие прерывания на различных платах Arduino:
UNO - Pin 2,3
LEONARDO - Pin 0,1,2,3
MEGA - Pin 2,3,18,19,20,21
DUE - все

На основе библиотеки http://www.pjrc.com/teensy/td_libs_Encoder.html

Энкодер_импульсный_v1.1
СпойлерПоказать
Энкодер импульсный v1.1

EncTic v1.1 - отслеживает импульсы датчиков энкодера, используея квадратурный медот подсчета импульсов и определяет напавление вращения.
В зависимости от направления вращения, на выходах Up или Down формируются импульсы, соответствующие одному физическому шагу энкодера..
В параметрах пользователя необходимо:
1. Указать 2 пина к которым подключены CLK и DT энкодера.
2. Установить значение TicStep соответствующее количеству тиков на один физический шаг энкодера.
Пример: При использовании энкодера EC-11 ( KY-040) на один физический шаг EncTic выдает 2 тика, поэтому надо поставить TicStep = 2.

Есть три варианта подключения (из описания библиотеки):
1. Лучший результат - используются два пина поддерживающие прерывания.
2. Хорошая производительность - один из пинов поддерживает прерывания.
3. Низкая поизводительность - оба пина не поддерживают прерывания.

Ограничения:
1, Не рекомендуется использовать пины к которым подключена светодиодная индикация (в большинстве случаев Pin 13)!!!
2. Если одним энкодером задействованы два пина пина поддерживающие прерывание, то в проекте нельзя использовать более одного блока. Если хотя бы один из пинов к которому подключен энкодер не поддерживает прерывание, ограничение снимается.

При использовании длинных проводов между энкодером и платой можно поставить подтягивающий резистор 1К.

Пины поддерживающие прерывания на различных платах Arduino:
UNO - Pin 2,3
LEONARDO - Pin 0,1,2,3
MEGA - Pin 2,3,18,19,20,21
DUE - все

На основе библиотеки http://www.pjrc.com/teensy/td_libs_Encoder.html

Другие блоки для энкодера:
Тестер для энкодера
Блок энкодера для одноуровневого меню
Последний раз редактировалось Dryundel 10.09.2021{, 14:44}, всего редактировалось 3 раза.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Набор блоков ЭНКОДЕР

#81

Сообщение Di123 » 19.11.2020{, 08:02}

ваш блок Энкодер импульсный v1.1 тоже не сохраняет настройки в версии 7,1,1
выбираю тики 4 и сохраняю потом снова захожу в него а там опять 1 стоит
помогает только если в версии 6,3,1 выставить значения в блоке и скопировать его в версию 7,1,1

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#82

Сообщение Dryundel » 28.11.2020{, 21:17}

GDAN7777 писал(а):
28.11.2020{, 18:28}
Не так.Если заменить блок энкодера импульсного на блок энкодера считающего с управлением по счетчику,все становится на свои места.Меню пролистывается просто мгновенно и не важно,какое в нем количество пунктов.Или вы считаете,что при таком способе управления время исполнения основного цикла становится в разы(если не в десятки раз) меньше?Дело либо в ПБ,либо в библиотеке.
Нет, я так не считаю. Время исполнения основного цикла остается прежним.
Не совсем понял что означает: "на блок энкодера считающего с управлением по счетчику " Ну да ладно.
Объясняю популярно.
Суть в том, что оба этих энкодера построены на одной и той же библиотеке, равной которой мне пока найти не удалось.
Так вот благодаря работе на прерываниях счет импульсов происходит независимо от того, какой длительности у вас цикл. Соответственно в любой момент вы можете получить цифру соответствующую количеству импульсов. Это и происходит в случае со считающим блоком.
Что же касается импульсного, то он тоже ориентируется на эту цифру. Однако выдать импульс блок может только один за цикл. Точно так же как и например штатный блок генератора. Какую бы частоту (длительность импульса) вы ему ни задали, выдавать импульсы генератор не сможет чаще чем один импульс за цикл. Вот и здесь точно такая же картина. Физические сигналы с энкодера посчитаны, цифра уже есть, а вот импульсы, ну никак не больше одного за цикл. Таким образом и происходит то, что вы визуально наблюдаете - импульсный счетчик отрабатывает все посчитанные сигналы с энкодера, но длительность вашего цикла не позволяет это делать быстрей.
Даже если я заставлю блок выдавать два-три-пять тиков за цикл, что теоретически возможно, ваше меню, счетчик, или что там еще не смогут их воспринять, т. к. и на них действует то же самое правило. Они принимают на свои входы 0 или 1 не чаще одного раза за цикл. Соответственно все "лишние" тики они просто пропустят.

Очень надеюсь на то, что смог донести до вас суть проблемы, с которой вы столкнулись.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Набор блоков ЭНКОДЕР

#83

Сообщение rw6cm » 29.11.2020{, 09:21}

GDAN7777 писал(а):
29.11.2020{, 08:47}
Заменяем энкодер на кнопки,висящие на тех же самых пинах с прерываниями.Все.Тормоза пропадают.
Вам надо хоть немного почитать, что такое прерывание и как они работают.
Чтобы использовать прерывание нужен код работающий с ними.
В данном примере нет ни какой разницы на какой вход вы поставите кнопку, т.к она не использует прерывания.
Win10-64, FLProg (portable)

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#84

Сообщение Dryundel » 29.11.2020{, 12:29}

GDAN7777 писал(а):
29.11.2020{, 09:58}
Я отлично знаю,что такое прерывания,так как писал ранее на asm.Плохо,что я дуб в СИ,поэтому не могу посмотреть в код библиотеки и сообразить,как она работает.
Это комментировать я пожалуй не стану. :)
GDAN7777 писал(а):
29.11.2020{, 08:47}
Постараюсь видео снять для наглядности.
Что Вы хотели показать на этих двух роликах я не совсем понял.

Что касается:
GDAN7777 писал(а):
29.11.2020{, 08:47}
Хорошо.Немного по другому.Заменяем энкодер на кнопки,висящие на тех же самых пинах с прерываниями.Все.Тормоза пропадают.
Как Вам писали выше, если просто подключить кнопки на пины которые могут поддерживать прерывания, они не будут работать по прерываниям, а будут кнопками (пинами) которые опрашиваются в цикле.

Вероятно Вас смущает что когда Вы используете энкодер, при его повороте на один физический щелчок, переключение происходит медленнее чем с кнопки.
Это объясняется тем, что за один физический щелчок энкодера происходит 4 переключения состояния. Т.е. грубо говоря если провести аналогию с кнопкой, то происходит 4 нажатия. Для того чтобы за один физический щелчок блок энкодера выдавал 1клик или прибавлял единицу к значению, в нем (в блоке) есть делитеь и соответствующая настройка этого делителя.

Теперь что же происходит:
Вы поворачиваете энкодер на один щелчок и в память записывается значение 4. Теперь что бы блок энкодера выдал один тик надо чтобы его внутренний счетчик досчитал до четырех, а это четыре цикла вашей программы. Соответственно тик на выходе блока энкодера Вы будете получать один раз в четыре цикла. Кроме этого импульс (высокий уровень) на выходе блока длится один цикл и на следующем цикле обнуляется. Но мы пока опустим этот момент чтобы не Вас запутывать.
Так вот для того чтобы ваше меню переключилось на 4 строчки надо что бы прошло 16 циклов. Ваша программа должна выполнится 16 раз, а это всё это время. Кроме этого плюс дополнительное время которое уходит на прерывания для подсчета изменения состояния пинов задействованных в прерываниях, отвечающих за ваш энкодер.

Именно по причине того что цикл вашей программы довольно длинный, условно говоря, кнопка может считываться каждый цикл. Точней в один цикл может считаться "1" на кнопке, а в следующий "0". Эти два состояния и можно зачесть как один клик. И в случае с кнопкой нет прерываний и время на их обработку тоже не прибавляется, хотя оно и незначительное по сравнению с длительностью цикла вашей программы.

Ну если и после этого картина не стала ясней, то я уж и не знаю как объяснять. Вероятно должно пройти какое то время для того чтобы все это у вас устаканилось и осозналось.

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Набор блоков ЭНКОДЕР

#85

Сообщение Nikan » 29.11.2020{, 14:14}

.
Последний раз редактировалось Nikan 24.03.2023{, 02:24}, всего редактировалось 1 раз.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#86

Сообщение Dryundel » 29.11.2020{, 14:43}

Nikan писал(а):
29.11.2020{, 14:14}
а по хорошему - вызов обработчика меню надо запихнуть в прерывание
Не вариант в этой теме :)
GDAN7777 писал(а):
29.11.2020{, 12:59}
Что нужно сделать чтобы не тормозило меню,по вашему?Пролистывание,вернее.
Будем исходить из того, что время цикла ну никак нельзя уменьшить.

Если речь идет только о пролистывании меню, то Вы уже сами практически ответили на свой вопрос в посте #91 (со скринами).
Надеюсь мне удалось донести разницу в скорости работы считающего и тикового блоков энкодера.

Попробуйте использовать входы меню для прямого перехода в пункт меню. Возможно это сработает в вашем случае.
2020-11-29_143209.jpg
2020-11-29_143209.jpg (16.12 КБ) 1283 просмотра

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Набор блоков ЭНКОДЕР

#87

Сообщение Nikan » 29.11.2020{, 15:44}

.
Последний раз редактировалось Nikan 24.03.2023{, 02:24}, всего редактировалось 1 раз.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#88

Сообщение Dryundel » 29.11.2020{, 16:54}

GDAN7777 писал(а):
29.11.2020{, 16:40}
Пришел сегодня ESP32.Как по вашему,проблема на нем останется или нивелируется?За счет частоты.Или все быстродействие упрется в код библиотеки?
Код библиотеки здесь не при чем.
GDAN7777 писал(а):
29.11.2020{, 16:40}
Пришел сегодня ESP32
Не забудьте поменять библиотеку на свежую. Та которая вшита в блок, ESP еще не поддерживает.
Удалите ее из блока, прикрепите новую и удалите старую из вашего IDE.
https://github.com/PaulStoffregen/Encoder
И помните у ESP, особенно у 8266 в приоритете WiFi. Так что глюков, особенно по первости словить можете много.

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

Набор блоков ЭНКОДЕР

#89

Сообщение Nikan » 29.11.2020{, 17:11}

.
Последний раз редактировалось Nikan 24.03.2023{, 02:23}, всего редактировалось 1 раз.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Набор блоков ЭНКОДЕР

#90

Сообщение com » 07.12.2020{, 20:05}

Похоже, два блока энкодера под один энкодер, в одном проекте не уживаются, даже если пины без прерываний
Вложения
ошибка.flp
(3.26 МБ) 65 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#91

Сообщение Dryundel » 07.12.2020{, 20:52}

com писал(а):
07.12.2020{, 20:05}
Похоже, два блока энкодера под один энкодер, в одном проекте не уживаются, даже если пины без прерываний
Все работает.
В первую очередь ищите ошибку у себя.
Будьте внимательней в проектах.

Вы сделали подтяжку кнопки!
Соответственно:
1. Надо замыкать кнопку на землю.
2. Надо инвертировать выход кнопки в проекте.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Набор блоков ЭНКОДЕР

#92

Сообщение com » 07.12.2020{, 21:56}

Кнопку не инвертировал, да, верно замечено, но не помогает.
Вложения
энкодер.mp4
(3.16 МБ) 79 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#93

Сообщение Dryundel » 07.12.2020{, 22:00}

com писал(а):
07.12.2020{, 21:56}
Кнопку не инвертировал, да, верно замечено, но не помогает.
Реально?
А у меня ваш проект отлично работает.
Прям не знаю что и посоветовать.
:)

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Набор блоков ЭНКОДЕР

#94

Сообщение com » 07.12.2020{, 22:08}

Dryundel, Возможно косяки в энкодере, не знаю. Придется искать другой путь.
P.S В моем варианте получается так, энкодером набираю цифру на первой строчке до 6, при переключении на вторую строчку, показания на второй строчке увеличивается тоже на 6. Тоесть, второй блок отсчитывает наравне с первым и при переключении выводит эти показания. Хотя блок энкодера не считающий?! Странно.
Последний раз редактировалось com 07.12.2020{, 22:16}, всего редактировалось 1 раз.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#95

Сообщение Dryundel » 07.12.2020{, 22:15}

com писал(а):
07.12.2020{, 22:08}
Dryundel, Возможно косяки в энкодере, не знаю. Придется искать другой путь
Нет. Перепроверил. Действительно есть глюк. Посмотрим.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Набор блоков ЭНКОДЕР

#96

Сообщение com » 07.12.2020{, 22:19}

А так, если блок один, то работает изумительно в паре с лсд блоком.

Аватара пользователя
ElectronicRTC
Рядовой
Сообщения: 49
Зарегистрирован: 09.07.2019{, 06:13}
Репутация: 1
Откуда: Москва
Имя: Евгений

Набор блоков ЭНКОДЕР

#97

Сообщение ElectronicRTC » 17.12.2020{, 05:01}

Dryundel, подскажите ваши блоки можно скорректировать под работу с инкрементальным энкодером типа этого: https://aliexpress.ru/item/400112214010 ... hweb201603_
полагаю что не только мне интересен
Промышленная электроника и оборудование

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Набор блоков ЭНКОДЕР

#98

Сообщение Dryundel » 17.12.2020{, 08:54}

ElectronicRTC писал(а):
17.12.2020{, 05:01}
Dryundel, подскажите ваши блоки можно скорректировать под работу с инкрементальным энкодером типа этого: https://aliexpress.ru/item/400112214010 ... hweb201603_
полагаю что не только мне интересен
Зависит от частного случая. Пишите в личку ваш запрос.

noanylag
Рядовой
Сообщения: 37
Зарегистрирован: 24.04.2017{, 02:18}
Репутация: 0

Набор блоков ЭНКОДЕР

#99

Сообщение noanylag » 13.01.2021{, 00:19}

shura2 писал(а):
16.09.2020{, 21:55}
походу блок вешает еспешку.
То же самое...На ESP8266 блоки не работают . :(

noanylag
Рядовой
Сообщения: 37
Зарегистрирован: 24.04.2017{, 02:18}
Репутация: 0

Набор блоков ЭНКОДЕР

#100

Сообщение noanylag » 16.01.2021{, 18:03}

noanylag писал(а):
13.01.2021{, 00:19}
shura2 писал(а):
16.09.2020{, 21:55}
походу блок вешает еспешку.
То же самое...На ESP8266 блоки не работают . :(
Понимаю, что нужно применить " ICACHE_RAM_ATTR ", но не знаю как. Недостаточно знаний... Пробовал в энкодере без использования библиотеки - работает,ESPшка перестала вешаться.

Ответить

Вернуться в «Датчики и энкодеры»