Энкодер на AVR
|
|
| Вс, 13.01.2013, 01:44 | Сообщение # 1
|
frenele
Постов: 30
ОК |
Хочу поделится опытом. Мой товарищ загорелся идеей освоить энкодер. Но столкнулся с рядом проблем. Обратившись ко мне за помощью я решил для него эту задачу. Потому и решил выложить код. Принцип основан на сбросе таймера T0 по прерыванию от INT0.Сброс таймера продолжается до тех пор пока не пройдёт дрябиск на контактах энкодера. С последним таким перепадом таймер считает до прерывания. В обработчике прерывания происходит проверка уровней на входах энкодера и по этому условию определяется в какую сторону поворачивается ручка. Обработчики прерывания запускаются когда есть воздействие на энкодер. В остальное время эти ресурсы микроконтроллера не задействованы.
|
|
| Вс, 13.01.2013, 08:35 | Сообщение # 2
|
Электродыч
Постов: 3755
U |
Практическую реализацию похожей схемы управления можно посмотреть в журнале Радио №9 за 2010год в статье ''УКВ радиоприемник на основе тюнера автомагнитолы''.
|
|
| Вс, 13.01.2013, 08:50 | Сообщение # 3
|
skateman
Постов: 2201
Друзья |
Цитата (frenele) Принцип основан на сбросе таймера T0 по прерыванию от INT0 не лучший вариант
|
|
| Вс, 13.01.2013, 21:00 | Сообщение # 4
|
frenele
Постов: 30
ОК |
Цитата (skateman) не лучший вариант
Есть пример лучше? Выложи я оценю.
Добавлено (13.01.2013, 22:00) --------------------------------------------- Цитата (Электродыч) Практическую реализацию похожей схемы управления можно посмотреть в журнале Радио №9 за 2010год в статье ''УКВ радиоприемник на основе тюнера автомагнитолы''.
Я конечно не знаю как там программа написана, но обратил внимание на конденсатор С1 подключенный к одному выводу энкодера. Мой пример позволяет не подключать дополнительных элементов. Только один энкодер. Работает как швейцарские часы.)))
|
|
| Пн, 14.01.2013, 07:19 | Сообщение # 5
|
skateman
Постов: 2201
Друзья |
Цитата (frenele) Есть пример лучше? Выложи я оценю Я к тому, что если надо задействовать 3 и более энкодеров, то выводов внешних прерываний может просто не хватить, ведь AVR это, к примеру, не STM8 в которой на каждую ногу можно повесить внешнее прерывание.
|
|
| Пн, 14.01.2013, 20:54 | Сообщение # 6
|
frenele
Постов: 30
ОК |
Цитата (skateman) Я к тому, что если надо задействовать 3 и более энкодеров
Я согласен, но это один пример. Сдам сессию займусь этой задачей. Кстати на MSP430 тоже можно настроить на каждую ножку прерывание.
|
|
| Вт, 15.01.2013, 07:15 | Сообщение # 7
|
skateman
Постов: 2201
Друзья |
лучше как кнопки опрашивать по прерыванию таймера, только чтоб пропусков не было при прокрутке надо частоту опроса экпериментально подобрать
|
|
| Ср, 16.01.2013, 00:11 | Сообщение # 8
|
frenele
Постов: 30
ОК |
Цитата (skateman) лучше как кнопки опрашивать по прерыванию таймера, только чтоб пропусков не было при прокрутке надо частоту опроса экпериментально подобрать Дело в том, что предложенный вариант в самом начале этой темы подразумевает минимальное задействование ресурсов микроконтроллера. Эти ресурсы задействоваться будут только тогда, когда на энкодер оказывает воздействие пользователь. Постоянный опрос при простои энкодера или кнопок и других устройств ввода нерациональное растрачивание вычислительных ресурсов микроЭВМ.Добавлено (16.01.2013, 01:11) --------------------------------------------- воздействие на устройство ввода должно вызывать прерывание. Это принципиально! Можно конечно и программно опрашивать порт(ы), но если не требуется строгих временных интервалов.
|
|
| Ср, 16.01.2013, 07:21 | Сообщение # 9
|
skateman
Постов: 2201
Друзья |
Цитата (frenele) воздействие на устройство ввода должно вызывать прерывание а если кнопка залипнет?
|
|
| Ср, 16.01.2013, 18:21 | Сообщение # 10
|
frenele
Постов: 30
ОК |
Цитата (skateman) а если кнопка залипнет? Если залипнет кнопка при использовании прерываний это ни чего страшного. Прерывания вызываться не будут. Дело в том прерывание происходит когда на пине(ножке) меняется состояние с "0" на "1" или наоборот. А если реализовать опрос программно то будут неприятности если просто проверять состояние на пине, а надо чтобы реакция было от фронта или спада на выводе микросхемы. Можно и программно реализовать функцию которая будет реагировать на изменение состояния на пине, но при этом чрезмерно сильно будут вычислительные затраты. Что не очень GOOD.
|
|