Пример 8. Энкодер и шаттл: ввод цифровой информации Энкодер иначе называют датчиком вращения (датчиком угла, датчиком поворота). Шаттл – это современное название элемента, который используется для ввода информации и управления цифровой техникой (музыкальные центры, ресиверы, тюнеры, автомагнитолы и пр.). Работа энкодера и шаттла заключается в выводе определенной последовательности импульсов при вращении вала устройства. Далее мы будем придерживаться названия энкодер, т.к. оно употребляется в официальной документации. Энкодер современный и оригинальный элемент управления цифровыми устройствами. Энкодер по внешнему виду похож на переменный резистор (см. рисунок ниже). Вращение вала сопровождается щелчками, например 24 щелчка на один оборот. Аналогично работает колесо компьютерной мыши, только в данном случае вращают вал вместо колеса. Энкодер имеет 3 вывода – A, B, C и применяется для быстрого ввода данных в цифровые устройства. Некоторые модели имеют встроенную кнопку (например, PEC12-4220F-S0024), которая срабатывает по нажатию на вал энкодера (добавляется еще один вывод). Это свойство позволяет экономить порты МК: нажатием перебирать режимы, а вращением делать настройку. Например, одной ручкой энкодера можно регулировать громкость, баланс, высокие и низкие частоты и пр. режимы, что требует всего лишь трёх сигнальных линий. Принцип работы. При повороте на один щелчок, например, вправо, сначала замыкается контакт А+С, затем В+С. Когда в этом щелчке вал доворачивается, в той же последовательности контакты размыкаются. При повороте вала в другую сторону, последовательность замыкания с контактом С меняется, т.е. при повороте влево замыкаются сначала В+С, затем А+С. Приведем пример программы работы с энкодером (например, с использованием энкодера типа PEC12 – Incremental Encoder). Сигнал с вывода А будет использоваться для отслеживания факта вращения, сигнал В – для оценки направления вращения. __CONFIG W F PC STATUS PORTA LIST H3FF1 EQU EQU EQU EQU EQU P=PIC16F84A 0 1 H0002 H0003 H0005 PORTB TRISA TRISB C Z Reg_1 Reg_2 Reg_3 Reg_4 EQU org программы ; bsf bcf ; отрисовка нуля изменением) EQU EQU EQU EQU EQU EQU EQU EQU H000F ; регистр под результат 0 ; H0006 H0005 H0006 0 2 H000C H000D H000E начало подготовительные моменты STATUS,5 ; переход в Банк 1 movlw b00011111 movwf TRISA clrf TRISB STATUS,5 ; переход назад в Банк 0 и подготовка регистра (очистка перед movlw b01101111 movwf PORTB clrf Reg_4 ;==================================== ; отслеживание вращения вала энкодера En btfsc PORTA,0 ; старт от исходного значения (0 или 1) goto en1 goto en2 en1 btfsc PORTA,0 ; выход на единицу goto en1 goto en3 en2 btfss PORTA,0 ; выход на ноль goto en2 goto en4 en3 call Pause ; задержка (антидребезг) btfss PORTA,0 ; проверка на единицу goto En goto en5 en4 call Pause ; задержка (антидребезг) btfsc PORTA,0 ; проверка на ноль goto En goto en5 ; отслеживание направления вращения en5 btfsc PORTA,1 goto en6 goto en7 en6 call Pause ; задержка (антидребезг) btfsc PORTA,1 ; проверка на единицу goto min ; уменьшение goto En en7 call Pause ; задержка (антидребезг) btfss PORTA,1 ; проверка на ноль goto max ; увеличение goto En ;==================================== ; проверка на ноль (на крайнее значение) и уменьшение значения регистра min bcf STATUS,Z ; опустим флаг Z в ноль movf Reg_4,F ; копировать из Reg_4 в Reg_4 btfsc STATUS,Z ; делаем бит-проверку Zфлага goto m4 ; переходим на отрисовку значения decf Reg_4,F ; уменьшить значение на 1 и сохранить goto m4 ; проверка на 9 (на др. крайнее значение) и увеличение значения регистра max bcf STATUS,C ; опускаем флаг С в ноль movlw .247 ; (255-9)+1 = 247 -> W addwf Reg_4,W ; (Reg_4)+W btfss STATUS,C ; делаем бит-проверку C-флага goto m5 goto m4 m5 incf Reg_4,F ; увеличить значение на 1 и сохранить m4 movf Reg_4,W call TABLE movwf PORTB call Pause2 goto En ;==================================== TABLE addwf PC,F ; Содержимое счетчика команд PC = PC + W retlw b01101111 ; 0 retlw b00001100 ; 1 retlw b01011011 ; 2 retlw b01011110 ; 3 retlw b00111100 ; 4 retlw b01110110 ; 5 retlw b01110111 ; 6 retlw b01001100 ; 7 retlw b01111111 ; 8 retlw b01111110 ; 9 ;==================================== ;delay = 100 machine cycles Pause movlw .33 movwf Reg_1 wr decfsz Reg_1, F goto wr return ;delay = 50000 machine cycles Pause2 movlw .238 movwf Reg_1 movlw .65 movwf wr2 decfsz Reg_1, goto decfsz Reg_2, goto end Ниже ; текст конец Reg_2 F wr2 F wr2 return программы прошивки: :020000040000FA :1000000083161F308500860183126F3086008F01B2 :1000100005180B280E2805180B281128051C0E287A :1000200015284120051C08281928412005180828F2 :10003000192885181C2820284120851824280828DC :100040004120851C2A28082803118F08031931280C :100050008F0331280310F7300F07031C3028312895 :100060008F0A0F08362086004620082882076F3442 :100070000C345B345E343C34763477344C347F3427 :100080007E3421308C008C0B43280800EE308C002D :0E00900041308D008C0B4A288D0B4A28080049 :02400E00F13F80 :00000001FF Если предполагается низкая скорость вращения – задержки увеличивают, иначе их можно уменьшить. Задержки для подавления дребезга подбираются экспериментально. Ниже приводим схему подключения энкодера к макетной плате (обозначение элемента нам ранее не встречалось, соответственно, предлагаем свой вариант). Далее рисунок печатной платы (вид со стороны печати). Вид со стороны элементов. Фотография собранного и подключенного к макетной плате энкодера. На данной плате смонтирован энкодер со встроенной кнопкой. В связи с этим плата разведена с учетом этой особенности на перспективу использования. Алгоритм работы с энкодером и шаттлом можно использовать для создания устройства, подсчитывающего количество людей, входящих и выходящих в помещение. Алгоритм найдет применение в автоматизации работы турникетов. В качестве датчика можно применить пару простейших оптических приемников и передатчиков. (В данном примере энкодер обслуживается путем опроса сигнальных линий; повзрослому энкодер должен обслуживаться по факту прерываний; прерывания будут рассмотрены далее). <<< назад далее >>> Просмотров: 13050