Энкодер и PIC16f877
|
|
Gysmi |
Дата: Вт, 18.08.2015, 16:08 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
48
Замечания:
±
На сайте с 23.12.2011
Статус:
Offline
|
Энкодер подключён к RB.0 и RB.1 Простая программа -увеличиваем или уменьшаем переменную С. Разрешены прерывания по входу int RB0 ON INTERRUPT GOTO ENCODER ENCODER: if PORTB.1=1 then c=c+1 if PORTB.1=0 then c=c-1 INTCON.1=0 RESUME ENABLE end Как только крутану энкодер на 1 щелчок сразу программа зависает. Переменную вывожу на лсд индикатор 0-255. Осваиваю энкодер(при вращении энкодера должна изменяться переменная визуально ) Программу смотрю в отладке тоже.
Сообщение отредактировал
Gysmi - Вт, 18.08.2015, 16:10
|
|
|
|
dimvad |
Дата: Вт, 18.08.2015, 17:25 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Вообще-то, энкодер лучше в аппаратных прерываниях обрабатывать.
|
|
|
|
Gysmi |
Дата: Вт, 18.08.2015, 17:58 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
48
Замечания:
±
На сайте с 23.12.2011
Статус:
Offline
|
Где у меня ошибка?
|
|
|
|
dimvad |
Дата: Вт, 18.08.2015, 18:20 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Вы используете программное прерывание, которое происходит не сразу, а с задержкой, в зависимости от того, что делает основная программа. Поэтому энкодер в таком оформлении будет глючить, лагать. Это во-первых. Во-вторых, надо выводить печать переменной в самом прерывании, и использовать аппаратное прерывание ON_INTERRUPT. Добавлено (18.08.2015, 18:20) --------------------------------------------- Сейчас поищу в компе. Была у меня тренировачная моделька.
|
|
|
|
dimvad |
Дата: Вт, 18.08.2015, 18:26 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Во, нашел.
|
|
|
|
Gysmi |
Дата: Вт, 18.08.2015, 18:39 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
48
Замечания:
±
На сайте с 23.12.2011
Статус:
Offline
|
ОК Спасибо,dimvad!
|
|
|
|
ivan_fd |
Дата: Вт, 18.08.2015, 23:01 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Online
|
1. Человек пишет не на Протоне, а Вы даете ему команды Протона. 2. В PicBasicPro, что бы сделать нормальное прерывание, его нужно делать на ассемблере. Посмотрите в примерах, там есть.
Удачи.
|
|
|
|
Gysmi |
Дата: Ср, 19.08.2015, 18:31 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Пытаюсь разобраться
Сообщений:
48
Замечания:
±
На сайте с 23.12.2011
Статус:
Offline
|
Немного разобрался-инкремент заработал(правда иногда пропуски есть).Но вычитать никак не хочет(что вправо,что влево кручу,всё прибавляет) Куда декремент делся? if PORTB.1=1 then c=c+1 if PORTB.1=0 then c=c -1 Это ведь должно работать?
Сообщение отредактировал
Gysmi - Ср, 19.08.2015, 18:33
|
|
|
|
ivan_fd |
Дата: Чт, 20.08.2015, 11:53 | Сообщение # 9 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Online
|
Gysmi, почитайте ЭТУ статью, может поможет Вам.
|
|
|
|
xvovanx |
Дата: Пт, 21.08.2015, 00:12 | Сообщение # 10 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
327
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Gysmi ( ) Немного разобрался-инкремент заработал(правда иногда пропуски есть).Но вычитать никак не хочет(что вправо,что влево кручу,всё прибавляет) Куда декремент делся? if PORTB.1=1 then c=c+1 if PORTB.1=0 then c=c -1 Это ведь должно работать? Нет не будет работать. 1 в порту В.1 будет появляться всегда -вот и прибавляет. Почитайте принцип сдвига сигналов для увеличения и уменьшения при работе энкодера, как советовал ivan_fd
|
|
|
|
ADMIN |
Дата: Вт, 25.08.2015, 09:30 | Сообщение # 11 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Вот пример работы с энкодером
|
|
|
|
holyuser |
Дата: Вт, 25.08.2015, 11:51 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Пример работы с механическим энкодером типа ED1112. Кручением меняется цвет свечения светодиода, а нажатием кнопки энкодера светодиод выключается/включается. Заодно, на ЖКИ выводится переменная, изменяемая энкодером.
Сообщение отредактировал
holyuser - Вт, 25.08.2015, 11:53
|
|
|
|