Как опросить валкодер ALPS

Приветствую, All! Попался ко мне в руки валкодер с дополнительной кнопкой на валу. Сзади надпись: "ALPS Japan". Никаких других опознавательных знаков нет. Подключил я его вместо валкодера с оптопарами. И тут начались чудеса... Видимо, сигналы у него на выходах не такие, как у нормальных... А осциллографа сейчас под рукой нет. Кто знает, что это за зверь и как его опрашивать? В данный момент опрос валкодера ведется стандартным способом - ловлю перепад 0->1 на одном из выходов валкодера и проверяю состояние второго выхода. По состоянию последнего делается вывод о том, в какую сторону произошел поворот.

Заранее спасибо!

Reply to
invalid unparseable
Loading thread data ...

Пpивет, Владимир!

*** 04 May 06 20:57, Владимир Соломийчук wrote to All:

ВС> Попался ко мне в руки валкодер с дополнительной кнопкой на валу. ВС> Сзади надпись: "ALPS Japan". Hикаких других опознавательных ВС> знаков нет. Подключил я его вместо валкодера с оптопарами. И тут ВС> начались чудеса... Видимо, сигналы у него на выходах не такие, как у ВС> нормальных...

Просто у него дребезг на фронтах большой, только и всего. Проблема всех механических энкодеров.

ВС> А осциллографа сейчас под рукой нет. Кто знает, что это ВС> за зверь и как его опрашивать?

Машина состояний. По любому изменению уровней на входах (прерыванием от изменения или просто опросом) считать состояния, и, используя эти и считанные на предыдущем цикле опроса состояния (всего четыре бита) принять решение - крутим счетчик вперед, назад или не крутим вообще. Проверено, не теряет и не насчитывает лишнего. Hо счетчик считает каждое изменение состояние, поэтому надо "списывать" из него двойками или четверками (зависит от типа энкодера).

с уважением Владислав

Reply to
Vladislav Baliasov

Приветствую Вас, Владимир!

Однажды 04 Мая 06 в 20:57, Владимир Соломийчук писал(а) к All...

ВС> Попался ко мне в руки валкодер с дополнительной кнопкой на валу. ВС> Сзади надпись: "ALPS Japan". Hикаких других опознавательных ВС> знаков нет. Подключил я его вместо валкодера с оптопарами. И тут ВС> начались чудеса... Видимо, сигналы у него на выходах не такие, как у ВС> нормальных... А осциллографа сейчас под рукой нет. Кто знает, что это ВС> за зверь и как его опрашивать? В данный момент опрос валкодера ведется ВС> стандартным способом - ловлю перепад 0->1 на одном из выходов ВС> валкодера и проверяю состояние второго выхода. По состоянию последнего ВС> делается вывод о том, в какую сторону произошел поворот. ВС>

По таблице, путем игноpиpования неpеальных сочетаний, тогда и дpебезг сpазу отсекается. Hе очень давно об этом много говоpили. Вот так:

previos current decode result 0 0 0 0 0 0 0 0 1 +1 0 0 1 0 -1 0 0 1 1 err

0 1 0 0 -1 0 1 0 1 0 0 1 1 0 err 0 1 1 1 +1 1 0 0 0 +1 1 0 0 1 err 1 0 1 0 0 1 0 1 1 -1 1 1 0 0 err 1 1 0 1 -1 1 1 1 0 +1 1 1 1 1 0

В одном моем пpоекте PIC12F629 4МГц intRC_OSC легко спpавляется с такой задачей и по двум пpоводам пеpесылает в "центpальный пpоцессоp". Что Alps, что Bourns и именно с кнопкой. Раньше вообще PIC12C508 стоял, но я нечаянно убил 2 отладочных кpисталла и отказался от PIC12C совсем.

С уважением, Виталий.

... -|O|-

Reply to
Vitaliy Romaschenko

Привет Владимир!

04 Май 06 года (а было тогда 20:57) Владимир Соломийчук в своем письме к All писал:

ВС> за зверь и как его опрашивать? В данный момент опрос валкодера ведется ВС> стандартным способом - ловлю перепад 0->1 на одном из выходов ВС> валкодера и проверяю состояние второго выхода. По состоянию последнего ВС> делается вывод о том, в какую сторону произошел поворот.

Я тоже так делал, но один раз попался вокодер с некоторой не идеальностью :

нормальный ----____----____----____----____ --____----____----____----____--

не идеальный ----____----____----____----____ ----___-----___-----___-----___--

ну или приблизительно так, вобщем при вращении в одну из сторон, полярность импульсов менялась практически одновременно.

Вот такой код работал :

================ кут =============== bit Vok_A @ (unsigned)&PORTA*8+4 ; // Hога вокодера 1 bit Vok_B @ (unsigned)&PORTA*8+5 ; // Hога вокодера 2

unsigned char Y_Offset; // смещение

bit Vok_Tmp; // для вокодера

================ кут ===============

// Вызывается через каждые 6.5 мС в прерывании if (Vok_Tmp != Vok_B){ DelayUs(250); // антидребезг if (Vok_B != Vok_A){ Y_Offset++; // вправо }else{ Y_Offset--; // влево } Vok_Tmp = Vok_B; }

================ кут ===============

Можно попробовать количество шагов вдвое увеличить, если еще по второй ноге похожую конструкцию пристроить.

С уважением, Andrey 06 Май 06 года

formatting link
E-Mail:a_biv<саба>list,ru Jabber:Andrey_B@jabber,ru |СQ:226793191

Reply to
Andrey Bivshih

Приветствую, Виталий!

Спасибо за подсказку! Пробовал сделать так, как ты написал, но не получилось. Сделал немного по-другому и все заработало. Вот исходник:

;******************************************************************* ; Обработчик прерываний ;******************************************************************* IRQS bcf INTCON,GIE ; Отключаем прерывания bcf INTCON,INTF ; Сбрасываем флаг от INT0

bsf STATUS,RP0 ; Банк 1 btfss OPTION_REG,6 ; goto $+3 ; bcf OPTION_REG,6 ; goto $+2 ; bsf OPTION_REG,6 ; bcf STATUS,RP0 ; Банк 0

movwf STORE_W ; Сохраняем регистры W swapf STATUS,0 ; и STATUS clrf STATUS ; в буферных movwf STORE_S ; регистрах ;------------------------------------------------------------------- ; Действия по обработке прерывания от INT0 ;------------------------------------------------------------------- bsf STATUS,RP0 ; Банк 1 btfsc OPTION_REG,6 ; goto PER1 ;

PER0 bcf STATUS,RP0 ; Банк 0 bcf TICKS,7 ; incf TICKS,1 ;

bsf TICKS,7 ; btfsc PORTB,1 ; bcf TICKS,7 ;

goto ENDIRQ ;

PER1 bcf STATUS,RP0 ; Банк 0 bcf TICKS,7 ; incf TICKS,1 ;

btfsc PORTB,1 ; bsf TICKS,7 ; ;------------------------------------------------------------------- ENDIRQ swapf STORE_S,0 ; Восстанавливаем регистры movwf STATUS ; W и STATUS из буферов swapf STORE_W,1 ; swapf STORE_W,0 ; и выходим retfie ; из обработчика прерываний

Reply to
invalid unparseable

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.