Энкодер

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#1

Сообщение Ingwar » 04.03.2023{, 22:49}

Еще одна версия энкодера.
На 2ух прерываниях, но не быстрый.
С изменяемым приращением (быстрое вращение прибавляет по 10).
Как поведет себя на других - не знаю (328, stm, rp2040 работает).
Безымянный.png
Безымянный.png (6.48 КБ) 1760 просмотров
СпойлерПоказать
_set - при подаче "1" значение со входа _inst предустановится на выходе _ou
_inst - число с этого входа при подаче "1" на _set предустановится на выходе _ou
_res - при подаче "1" значение на выходе _ou обнулится

_ou - чило на выходе будет менятся в большую или меньшую сторону при вращении энкодера
u_p - "1" на один цикл на каждый шаг при увеличении
d_n - "1" на один цикл на каждый шаг при уменьшении
_rotat - "1" на один цикл на каждый шаг при вращении в любую сторону
Последний раз редактировалось Ingwar 10.03.2023{, 19:45}, всего редактировалось 3 раза.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Abay1
Рядовой
Сообщения: 31
Зарегистрирован: 01.03.2022{, 08:03}
Репутация: 0
Имя: Александр

Энкодер

#2

Сообщение Abay1 » 05.03.2023{, 09:58}

Ingwar спасибо!
Вечером "крутну на быстродействие", вроди б "летать" должен БП на прерываниях!
 Скрытый текст. Для просмотра нужно зарегистрироваться

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#3

Сообщение Ingwar » 05.03.2023{, 12:53}

Abay1 писал(а):
05.03.2023{, 09:58}
вроди б "летать" должен БП на прерываниях!
Тут "крылья подрезаны" в угоду универсальности - используется digitalRead...:smile44:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

Энкодер

#4

Сообщение Dryundel » 05.03.2023{, 13:09}

Ingwar писал(а):
05.03.2023{, 12:53}
Тут "крылья подрезаны" в угоду универсальности - используется digitalRead...
Есть простое решение для AVR.
Более быстрые контроллеры справятся и с digitalRead.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#5

Сообщение Ingwar » 05.03.2023{, 13:24}

Dryundel писал(а):
05.03.2023{, 13:09}
Более быстрые контроллеры справятся и с digitalRead
Так то если в ядрах есть поддержка "быстрых" пинов, блок можно подредактировать и получить максимальное быстродействие.
Универсальность никогда не была "бесплатной" ))
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

Энкодер

#6

Сообщение Dryundel » 05.03.2023{, 13:33}

Поддержка быстрых пинов не в ядрах, а в регистра.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#7

Сообщение Ingwar » 05.03.2023{, 13:37}

Dryundel писал(а):
05.03.2023{, 13:33}
Поддержка быстрых пинов не в ядрах, а в регистра.
Я про это
https://github.com/MCUdude/MegaCoreX?ys ... 45#fast-io
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

Энкодер

#8

Сообщение Dryundel » 05.03.2023{, 13:37}

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

Отправлено спустя 1 минуту 15 секунд:
Dryundel писал(а):
05.03.2023{, 13:37}
Я про это
И я про него. :)

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#9

Сообщение Ingwar » 05.03.2023{, 13:45}

Dryundel писал(а):
05.03.2023{, 13:37}
А по поводу "бесплатно и", так это маленький кусочек кода, большую часть которого компилятор вырежет если не используется.
Когда у меня возникнет желание и накопятся знания, я попробую сколхозить библиотеку, учитывающую все камни (но это не точно).
А пока у меня не получилось даже добавить другой камень в Ваш вариант энкодера.
Сначала я искал пару часов как и где описывается наименование камня для добавления их в #elif defined, нашел, добавил, описал, но не "взлетело" )))
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

Энкодер

#10

Сообщение Dryundel » 05.03.2023{, 13:57}

Ingwar писал(а):
05.03.2023{, 13:45}
Сначала я искал пару часов как и где описывается наименование камня для добавления их в #elif defined, нашел, добавил, описал, но не "взлетело" )))
Не там искали. :)
Это находится в библиотеке.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#11

Сообщение Ingwar » 05.03.2023{, 14:12}

Dryundel писал(а):
05.03.2023{, 13:57}
Это находится в библиотеке.
Не верно поняли.
В файле direct_pin_read.h (и в другом) описываются привязки к поддерживаемым камням.
Так вот чтобы добавить привязку к другому, неописанному ранее в этом/их файле камню, нужно указать его имя (типо "__SAMD51__").
Так вот это название и оказалось для меня непросто найти (хотел добавить stm32f103cb).
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

ecoins
Полковник
Сообщения: 2945
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 454
Откуда: Шатура
Имя: Энвер

Энкодер

#12

Сообщение ecoins » 05.03.2023{, 15:08}

Ingwar писал(а):
05.03.2023{, 13:45}
Когда у меня возникнет желание и накопятся знания, я попробую сколхозить библиотеку, учитывающую все камни (но это не точно).
По теме написал здесь viewtopic.php?f=247&t=8064&p=121908#p121873

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

Энкодер

#13

Сообщение Dryundel » 05.03.2023{, 15:14}

ecoins писал(а):
05.03.2023{, 15:08}
По теме написал здесь viewtopic.php?f=247&t=8064&p=121908#p121873
Извините, не увидел по теме. Апрельские тезисы какие то. Ничего конкретного по ДАННОЙ теме нет вообще.

Abay1
Рядовой
Сообщения: 31
Зарегистрирован: 01.03.2022{, 08:03}
Репутация: 0
Имя: Александр

Энкодер

#14

Сообщение Abay1 » 05.03.2023{, 15:45}

Dryundel писал(а):
05.03.2023{, 15:14}
Извините, не увидел
..........
СпойлерПоказать

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#15

Сообщение Ingwar » 05.03.2023{, 15:47}

ecoins писал(а):
05.03.2023{, 15:08}
По теме написал здесь viewtopic.php?f=247&t=8064&p=121908#p121873
Это замечательно (про таймера), но жаль, что пока не мой уровень))

З.Ы. Правильное наименование используемого камня находится в строках выводимых IDE во время компиляции.
Например STM32F103CB "называется" STM32F103xB
Находится тут
-ID:\\Portable_FLProg_8-0-2_Win64\\ideV8\\portable\\packages\\STMicroelectronics\\hardware\\stm32\\2.4.0\\system/Middlewares/OpenAMP/virtual_driver" -w -x c++ -E -CC -DSTM32F1xx -DARDUINO=10819 -DARDUINO_GENERIC_F103CBTX -DARDUINO_ARCH_STM32 "-DBOARD_NAME=\"GENERIC_F103CBTX\"" "-DVARIANT_H=\"variant_generic.h\"" -DSTM32F103xB -DHAL_UART_MODULE_ENABLED "-ID:\\Portable_FLProg_8-0-2_Win64\\ideV8\\portable\\packages\\STMicroelectronics\\tools\\CMSIS\\5.7.0/CMSIS/Core/Include/"
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

ecoins
Полковник
Сообщения: 2945
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 454
Откуда: Шатура
Имя: Энвер

Энкодер

#16

Сообщение ecoins » 05.03.2023{, 16:34}

Ingwar писал(а):
05.03.2023{, 15:47}
Это замечательно (про таймера), но жаль, что пока не мой уровень))
Есть ощущение, что в обозримое время вызов по таймерам будет реализован. Наверное удастся договориться с разработчиком, что для этого будет предусмотрен отдельный тип плат. По уровню - что увидел у Вас для меня говорит и об уровни, и об потенциале. Работа с таймерами пожалуй существенно проще.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#17

Сообщение Ingwar » 05.03.2023{, 22:57}

Дело было не в бобине, программист Ingwar сидел в кабине...
Отредактировал первый пост. Сорян тем, кто скачал для других камней.
Это к вопросу
ecoins писал(а):
05.03.2023{, 16:34}
По уровню - что увидел у Вас для меня говорит и об уровни, и об потенциале.
))))
Похоже использование части кода из примера под STM стало роковым.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#18

Сообщение Ingwar » 08.03.2023{, 21:20}

Добавил функцию ускоренного счета при быстром повороте - прибавляет/убавляет десятками.
Реакция настраивается в параметрах - время между прерываниями в микросекундах.
Проверено на STM и RP2040 (PICO).
Перезалил в шапке.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Энкодер

#19

Сообщение Ingwar » 10.03.2023{, 19:46}

Обновил блок в шапке.
Теперь работает и с AVR.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

aidar_i
Полковник
Сообщения: 3126
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

Энкодер

#20

Сообщение aidar_i » 02.04.2024{, 14:05}

Сделал для себя блок энкодера на библиотеке STM32encoder, выложу сюда, чтобы не создавать тему.
Кнопка встроена в блок , имеет 2 выхода : длинное и короткое нажатие.
Библиотека встроена в блок. Проверена в железе, читайте описание блока. Обязательно припаяйте конденсаторы 100нф к выводам энкодера.
Энкодер STM32.flp
(498.04 КБ) 22 скачивания

Ответить

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