Страница 1 из 1
квадратурный энкодер
Добавлено: Пн фев 22, 2010 00:18:42
Esya
помогите с энкодером, как определить когда вправо крутиш а когда в лево
Добавлено: Пн фев 22, 2010 00:19:25
Esya
TIM0_OVF:
push temp
in temp, SREG
push temp
push cnt_int
push c
in temp, pind
cpi temp,0xff
breq tim_end
;rcall wait_5
;in c, pind
cpi temp,0b11111110
breq com_left
;cpi temp,0b11111100
;breq com_right
cpi temp,0b11110111
breq com_ok
rjmp tim_end
com_left:
rcall wait_5
in temp,pind
cpi temp,0b11111111
brne com_left
ldi comand2,0x78
sbr flag,(1<<new_com)
rjmp tim_end
com_right:
rcall wait_5
in temp,pind
cpi temp,0b11111101
brne com_left
ldi comand2,0x62
sbr flag,(1<<new_com)
rjmp tim_end
com_ok:
rcall wait_5
in temp,pind
cpi temp,0b11110111
brne com_left
ldi temp, 0b00000000
out portb,temp
rjmp tim_end
Добавлено: Пн фев 22, 2010 00:20:58
Esya
пины энкодера подключены к pind0 pind1
Добавлено: Вт фев 23, 2010 00:03:33
Esya
меня кто нибуть слышит ???? помогите !! сделал по другому
вывод А подключил на внешнее прерывание настроил по спаду
а вывод В в обработчике проверяю . как с дребезгом бороться???
Добавлено: Вт фев 23, 2010 09:49:06
Bird55
Esya писал(а):меня кто нибуть слышит ???? помогите !! сделал по другому
вывод А подключил на внешнее прерывание настроил по спаду
а вывод В в обработчике проверяю . как с дребезгом бороться???
Вот посмотрите
тут или
тут. А вообще, google Вам в руки

Добавлено: Вт фев 23, 2010 09:51:21
Neekeetos
Esya писал(а):меня кто нибуть слышит ???? помогите !! сделал по другому
вывод А подключил на внешнее прерывание настроил по спаду
а вывод В в обработчике проверяю . как с дребезгом бороться???
Если правильно сделать то энкодеру не требуется борьба с дребезгом. По крайней мере у меня сделано так - прерывания таймера с частотой 2кГц опрашивают пины энкодера. Потом по примерно такой таблице
Код: Выделить всё
0 - A and B low
1 - A high B low
3 - A high B high
2 - A low B high
делается преобразование пинов в текущее состояние энкодера. Соотв потом вычитанием полученного числа из предыдущего значения (состояние энкодера в прошлом прерывании ) вычисляется куда энкодер повернулся. Для контактного энкодера с 24 состояниями получается 4 изменения на один клик, тоесть если накапливать изменения то за полный оборот будет 24*4 = 96 единиц.
Добавлено: Вт фев 23, 2010 10:07:09
ploop
Neekeetos, пожалуйста, смени аватарку
Добавлено: Ср фев 24, 2010 00:15:18
Esya
все всем пасибо, то не в дребезге дело было, то у меня руки кривые в программе накосячил.