Страница 6 из 6

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

Добавлено: 13.03.2019{, 23:00}
Dryundel
Тема устарела и морально и технически.
Новый блок EncoderPro здесь.

Сколько ни пытался найти удовлетворяющий меня блок энкодера, не получилось.
Выкладываю свои варианты. Здоровая критика приветствуется.
1.jpg
Скачать все одним архивом:
Энкодеры от Dryundel.ubl
(664.68 КБ) 1143 скачивания
Блоки написаны на основе библиотеки Encoder.h
Могут работать на любых пинах, но на пинах поддерживающих прерывание результат самый лучший.
***
Энкодер_импульсный_v1.0_(CODE).ubi
(119.81 КБ) 528 скачиваний
Энкодер_импульсный_v1.1_(CODE).ubi
(135.99 КБ) 716 скачиваний
2.jpg
2.jpg (6.11 КБ) 21379 просмотров
Эти два блока выдают тики на выходах 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

Другие блоки для энкодера:
Тестер для энкодера
Блок энкодера для одноуровневого меню

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

Добавлено: 17.01.2021{, 20:45}
starik3000
noanylag,

этот работает

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

Добавлено: 18.01.2021{, 23:00}
noanylag
starik3000 писал(а):
17.01.2021{, 20:45}
noanylag,

этот работает
Что то не загружается - выдает ошибку при попытке загрузить в "пользовательские"...

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

Добавлено: 18.01.2021{, 23:32}
starik3000
noanylag,

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

Добавлено: 19.01.2021{, 20:46}
noanylag
starik3000 писал(а):
18.01.2021{, 23:32}
noanylag,
СпойлерПоказать
error.jpg
error.jpg (22.75 КБ) 1788 просмотров

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

Добавлено: 23.02.2021{, 18:44}
Pratak
starik3000 писал(а):
17.01.2021{, 20:45}
этот работает
Что то у меня нажатие не работает, хотя мультиметром проверил - кнопка исправна. Кто нибудь сталкивался?

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

Добавлено: 08.04.2021{, 18:49}
Sator
starik3000 писал(а):
17.01.2021{, 20:45}
noanylag,

этот работает
Простите за вопрос начинающего нуба, а как подключается этот блок в железе? Где пины указывать? В IDE при заливке скетча? Играюсь с NodeMCU, поэтому, если можно, то хотелось бы ответ услышать применительно к ней. Спасибо.

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

Добавлено: 14.04.2021{, 19:29}
Sator
Понимаю, что нужно применить " ICACHE_RAM_ATTR ", но не знаю как. Недостаточно знаний... Пробовал в энкодере без использования библиотеки - работает,ESPшка перестала вешаться.
Это волшебное ICACHE_RAM_ATTR - чисто фишка ESP. Как я понял, такое объявление функций при компиляции размещает эту функцию в оперативной памяти. Что весьма критично для всяких там обработчиков прерываний и все такое. А нам при работе с энкодером как раз и приходится ловить прерывания.

Чтобы указать помпилятору на необходимость применения директивы ICACHE_RAM_ATTR использованиии ESP, следует перед процедурой setup () указать такое: bool ICACHE_RAM_ATTR _isTimer (); - это если нам надо разместить в оперативной памяти процедуру _isTimer (). Ну и остальные процедуры, если нужно - тоже. Само тело процедуры может располагаться где угодно.

Правда, это нужно каждый раз лезть в текст прошивки и вписывать это ручками, что не есть комильфо. Возможно, есть более удобный способ, но мне он неизвестен.