Энкодер подключён к 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
Вы используете программное прерывание, которое происходит не сразу, а с задержкой, в зависимости от того, что делает основная программа. Поэтому энкодер в таком оформлении будет глючить, лагать. Это во-первых. Во-вторых, надо выводить печать переменной в самом прерывании, и использовать аппаратное прерывание ON_INTERRUPT.
Добавлено (18.08.2015, 18:20) --------------------------------------------- Сейчас поищу в компе. Была у меня тренировачная моделька.
1. Человек пишет не на Протоне, а Вы даете ему команды Протона. 2. В PicBasicPro, что бы сделать нормальное прерывание, его нужно делать на ассемблере. Посмотрите в примерах, там есть.
Удачи. Меня все время преследуют умные мысли...но я быстрее!!!
Немного разобрался-инкремент заработал(правда иногда пропуски есть).Но вычитать никак не хочет(что вправо,что влево кручу,всё прибавляет) Куда декремент делся? if PORTB.1=1 then c=c+1 if PORTB.1=0 then c=c -1 Это ведь должно работать?
Сообщение отредактировал
Gysmi - Ср, 19.08.2015, 18:33
Немного разобрался-инкремент заработал(правда иногда пропуски есть).Но вычитать никак не хочет(что вправо,что влево кручу,всё прибавляет) Куда декремент делся? if PORTB.1=1 then c=c+1 if PORTB.1=0 then c=c -1 Это ведь должно работать?
Нет не будет работать. 1 в порту В.1 будет появляться всегда -вот и прибавляет. Почитайте принцип сдвига сигналов для увеличения и уменьшения при работе энкодера, как советовал ivan_fd
Пример работы с механическим энкодером типа ED1112. Кручением меняется цвет свечения светодиода, а нажатием кнопки энкодера светодиод выключается/включается. Заодно, на ЖКИ выводится переменная, изменяемая энкодером.