Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » 4 энкодера и ATMega32


4 энкодера и ATMega32

Сообщений 1 страница 6 из 6

1

Подскажите пожалуйста, может кто сталкивался, нужно к контроллеру прикрутить 4 обычных механических энкодеров. Может что посоветуете с алгоритмом, с 2 мя энкодерами всё понятно, а с 4 мя что то на ум нечего хорошего не приходит. Думаю если их повесить на один порт и проверять его состояние по прерыванию таймера. Кто знает, если не сложно.

0

2

Твой вариант не плох, опрашиваем целиком порт и анализируем состояние битов.
МИНУСЫ: постоянное опрашивание займёт процессорное время. Код в таком случае линейным не будет а будет векторным, т.е. на все 4 энкодера одна точка входа в процедуру. Если осилишь написать вектор - тогда всё получится.
***
Или другой вариант - IntX
Здесь только плюсы. Проц не напрягается и код проще.
Вот только их 4 штуки нужно...
***
Вариант с PcintX не рассматривал???

0

3

С  IntX то всё ясно, только к сожалению в ATMega32 их всего 2. С PcintX не думал, так как не работал ещё с ними. Надо будет покумекать.

0

4

Дык, чо, думаешь я не знаю, сколько IntX в 32  :D
***
C PcInt не всё так просто, как с простыми интами... Тебе придётся программно определять нарастание или падение фронтов и от какой ноги это прилетело и ещё много там нюансов. Короче - мне не понравилось с ними работать.

А варик объединить по  ИЛИ ноги энкодеров и повесить на любой IntX и уже в векторе смотреть, что там и как не рассматривал? Я ща чёт прикинул в голове - должно работать... но нуно в протеусе тестамуть для верности.
Короче - думай!

0

5

Ну если одной рукой управлять, то можно и через диоды прерывание вызывать и в прерывании сразу определять какой порт изменён.

0

6

Могу предложить более изощрённую систему на "интах"  :crazyfun:
С каждого тактового через делитель 5В/4 заводим на вход АЦП и ставим его на FreeRunning с минимальным прескалером и зырим шо там у нас с АЦП. 8-ми бит вполне, тк 256/4=64 и есть некий лаг в запасе. Отселя мы уже знаем какой енкодер крутанули и уже его и идём обрабатывать. Идея весьма витиевата, но если бы мне нужно было так сделать - сделал бы запросто. Кстати, её в протеусе не сложно модельнуть.... :D

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » 4 энкодера и ATMega32