Пример 8

advertisement
Пример 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
Download