реклама на сайте
подробности

 
 
> MEGA+энкодер
vetbaston
сообщение Sep 19 2006, 05:17
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 80
Регистрация: 21-08-06
Пользователь №: 19 702



Есть MEGA64 и инкрементальный энкодер PEC12-4220F , кто работал с энкодером посоветуйте , как правильно обстучать его? help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
676038
сообщение Dec 6 2006, 13:28
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 25-07-06
Пользователь №: 19 070



Перечитал эту ветку и хочу предложить свой алгоритм подавления дребезга. Обкатал его на макете с двумя разными энкодерами (оптический из старой мышки) и механический ALPS - работает четко.

Исходные даные - один выход энкодера заводим на вход INT0 (PIND_Bit2), второй выход на другую ногу (в данном случае PIND_Bit3). Настраиваем прерывание INT0 по любому фронту.
Есть глобальная переменная "Volume", которая изменяет свое значение при вращении энкодера.

Обработчик прерывания:

Код
#pragma vector=INT0_vect
__interrupt void handler_int0(void)
{
static char flag;

if (flag == PIND_Bit2 ) return;

flag=PIND_Bit2;

if ((PIND_Bit3 == PIND_Bit2) && (volume <255)) volume++;
if ((PIND_Bit3 != PIND_Bit2) && (volume > 0)) volume--;
}


И не используется никаких конденсаторов, таймеров или задержек, при этом все работает как должно. Что я упустил?
Go to the top of the page
 
+Quote Post
wired
сообщение Jun 17 2008, 11:06
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 13-06-08
Из: KYIV
Пользователь №: 38 269



Цитата(676038 @ Dec 6 2006, 16:28) *
Перечитал эту ветку и хочу предложить свой алгоритм подавления дребезга. Обкатал его на макете с двумя разными энкодерами (оптический из старой мышки) и механический ALPS - работает четко.

Исходные даные - один выход энкодера заводим на вход INT0 (PIND_Bit2), второй выход на другую ногу (в данном случае PIND_Bit3). Настраиваем прерывание INT0 по любому фронту.
Есть глобальная переменная "Volume", которая изменяет свое значение при вращении энкодера.

...



взял за основу, прерьівание по спаду
volume - вьівожу на дисплейчик
сделал так:

Код
interrupt [EXT_INT0] void ext_int0_isr(void)
{
GICR = 0x00;  
delay_ms(3);  
if (!PIND.2)    
{  
if ((PIND.1==0) && (volume <255))  volume++;
if ((PIND.1==1) && (volume > 0)) volume--;                        
}  
GICR = 0x40;
}


получил интересную картину, на один щелчок енкодера проходит 2 значения
т.е. на дисплейчике видньі только четньіе или нечетньіе числа
что я не так делаю?
или советуете обрабатьівать в основном цикле как у Леонид Иванович
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 17 2008, 14:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(wired @ Jun 17 2008, 14:06) *
взял за основу, прерьівание по спаду
volume - вьівожу на дисплейчик
.......
получил интересную картину, на один щелчок енкодера проходит 2 значения
т.е. на дисплейчике видньі только четньіе или нечетньіе числа
что я не так делаю?
или советуете обрабатьівать в основном цикле как у Леонид Иванович
Достался мне как-то "в наследство" проект, в котором обработывался энкодер... "Дядя" его обработку сделал - как и Вы: прерывание по одному выходу энкодера; направление вращения - анализ состояния другого выхода. Получалось - примерно тоже, что и у Вас: то изменение значения на 1 за щелчок, то на 2... Пришёл к следующему заключению: выход энкодера, заведённый на прерывание - он тоже, конечно, "дребезжит", поэтому после изменения этого выхода -> взводится соответствующий флаг -> происходит прерывание -> флаг сбрасывается, но "дребезг" приводит к повторной установке флага во время обрабоки прерывания -> после выхода из прерывания имеем ещё одно прерывание на тот же щелчок энкодера. Иногда повторного прерывания не происходит, тогда - приращение на 1. В результате - переделал обработку энкодера - получил, что-то аналогичное обработке от Леонида Ивановича. Рекомендую и Вам сделать что-то такое же.
Go to the top of the page
 
+Quote Post
wired
сообщение Jun 17 2008, 15:01
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 13-06-08
Из: KYIV
Пользователь №: 38 269



Цитата(Палыч @ Jun 17 2008, 17:51) *
Достался мне как-то "в наследство" проект, в котором обработывался энкодер... "Дядя" его обработку сделал - как и Вы: прерывание по одному выходу энкодера; направление вращения - анализ состояния другого выхода. Получалось - примерно тоже, что и у Вас: то изменение значения на 1 за щелчок, то на 2... Пришёл к следующему заключению: выход энкодера, заведённый на прерывание - он тоже, конечно, "дребезжит", поэтому после изменения этого выхода -> взводится соответствующий флаг -> происходит прерывание -> флаг сбрасывается, но "дребезг" приводит к повторной установке флага во время обрабоки прерывания -> после выхода из прерывания имеем ещё одно прерывание на тот же щелчок энкодера. Иногда повторного прерывания не происходит, тогда - приращение на 1. В результате - переделал обработку энкодера - получил, что-то аналогичное обработке от Леонида Ивановича. Рекомендую и Вам сделать что-то такое же.

но на время обработки я прерьівание то запрещаю... жду... странно.
собсно ничего не мешает устроить обработчик в основном цикле
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 17 2008, 15:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(wired @ Jun 17 2008, 18:01) *
но на время обработки я прерьівание то запрещаю... жду...
Чего их (прерывания) запрещать? Они при входе в процедуру прерывания и так - запрещены. Дело в том, что при прерывании сбрасывается флаг, который это прерывание порадил, но поскольку уровень сигнала некоторое время скачет ("дребезг"), то за время выполнения процедуры прерывания флаг взводится повторно! После того как будет произведен выход из прерывания - оно (прерывание) повторится. Как вариант - очистка флага перед выходом из прерывания.
Go to the top of the page
 
+Quote Post
wired
сообщение Jun 18 2008, 07:54
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 13-06-08
Из: KYIV
Пользователь №: 38 269



Цитата(Палыч @ Jun 17 2008, 18:09) *
Чего их (прерывания) запрещать? Они при входе в процедуру прерывания и так - запрещены. Дело в том, что при прерывании сбрасывается флаг, который это прерывание порадил, но поскольку уровень сигнала некоторое время скачет ("дребезг"), то за время выполнения процедуры прерывания флаг взводится повторно! После того как будет произведен выход из прерывания - оно (прерывание) повторится. Как вариант - очистка флага перед выходом из прерывания.

УПС... smile.gif вот про єто я не знал, что прерьівания во время входа в обработчик запрещеньі.
а про флаг спасибо, буду сбрасьівать.



Цитата(676038 @ Jun 17 2008, 18:12) *
Может стоит добавить, сейчас обрабатываю энкодер так:
Код
      if (((tmp >> 1) & 0x01) == (tmp & 0x01))  Execute(0x11); //если поворот первого энкодера


я правильно понял? в Execute(0x11) тьі вьізьіваешь внешний обработчик?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vetbaston   MEGA+энкодер   Sep 19 2006, 05:17
- - XsanyaX   Один из сигналов (А или В ) я заводил на внешнее ...   Sep 19 2006, 07:47
|- - Леонид Иванович   Обработка энкодера по прерываниям неудобна, так ка...   Sep 19 2006, 08:25
|- - Kovrov   Цитата(Леонид Иванович @ Sep 19 2006, 12...   Sep 21 2006, 07:18
|- - Леонид Иванович   А какой физический смысл несет переменная "чу...   Sep 21 2006, 09:07
||- - Kovrov   Цитата(Леонид Иванович @ Sep 21 2006, 13...   Sep 21 2006, 15:46
|- - Shurmas   Цитата(Kovrov @ Sep 21 2006, 11:18) пробл...   Sep 21 2006, 09:17
- - psw   Цитата(vetbaston @ Sep 19 2006, 10:17) Ес...   Sep 19 2006, 08:52
|- - Maik-vs   Цитата(psw @ Sep 19 2006, 12:52) здесь ку...   Sep 14 2007, 11:50
|- - qqqqqq   Цитата(Maik-vs @ Sep 14 2007, 17:50)...   Sep 14 2007, 15:17
|- - gte   Цитата(qqqqqq @ Sep 14 2007, 19:17) Да. Б...   May 16 2008, 17:29
|- - 777777   Цитата(gte @ May 16 2008, 21:29) Благо, н...   May 17 2008, 14:19
|- - gte   Ну так порекомендуйте ортронный по сносной цене.   May 17 2008, 19:45
|- - _Pasha   Цитата(777777 @ May 17 2008, 17:19) Так о...   May 18 2008, 06:17
|- - rx3apf   Цитата(777777 @ May 17 2008, 18:19) Ну вы...   May 18 2008, 10:52
|- - 777777   Цитата(rx3apf @ May 18 2008, 14:52) Видел...   May 18 2008, 17:04
|- - rx3apf   Цитата(777777 @ May 18 2008, 21:04) И что...   May 18 2008, 18:03
|- - 777777   Цитата(rx3apf @ May 18 2008, 22:03) Основ...   May 19 2008, 09:09
|- - rx3apf   Цитата(777777 @ May 19 2008, 13:09) Так в...   May 19 2008, 18:51
|- - 777777   Цитата(rx3apf @ May 19 2008, 22:51) Но ес...   May 20 2008, 07:27
|- - gte   Цитата(777777 @ May 20 2008, 11:27) Ты пр...   May 20 2008, 09:06
- - vetbaston   Спасибо всем! Буду пробовать!   Sep 19 2006, 11:12
- - Nikola Kirov   Не невозможно сделат на 2 перервания. Вот я делал....   Sep 19 2006, 11:16
- - Shurmas   советую апноут микрочип AN696 - там схемотехника и...   Sep 19 2006, 11:37
- - xemul   Для устранения дребезга по нескольким входам с оди...   Sep 21 2006, 09:42
- - Vladimir_T   Еще есть такое решение: По тику таймерного прерыва...   Sep 21 2006, 11:31
|- - Леонид Иванович   Если частота опроса 20 Гц, то получится страшно то...   Sep 21 2006, 12:09
||- - Vladimir_T   Цитата(Леонид Иванович @ Sep 21 2006, 15...   Sep 22 2006, 04:48
|||- - qqqqqq   Цитата(Vladimir_T @ Sep 22 2006, 10:48) Э...   Sep 13 2007, 12:08
||- - sitafern   Цитата(Леонид Иванович @ Sep 21 2006, 15...   May 18 2008, 11:23
||- - Леонид Иванович   Цитата(sitafern @ May 18 2008, 14:23) Про...   May 20 2008, 09:03
|- - Kovrov   Цитата(Vladimir_T @ Sep 21 2006, 15:31) Е...   Sep 22 2006, 07:10
|- - Леонид Иванович   С чувствительностью энкодера понятно. Я обычно дел...   Sep 22 2006, 08:30
|- - Kovrov   Цитата(Леонид Иванович @ Sep 22 2006, 12...   Sep 22 2006, 11:57
|- - Леонид Иванович   Цитата(Kovrov @ Sep 22 2006, 14:57) Могу ...   Sep 22 2006, 21:23
|- - Kovrov   конечно же спорить не о чем, да мы и не спорим - о...   Sep 23 2006, 04:00
|- - Stas633   Хочу поделиться результатами опытов с энкодером......   Nov 6 2006, 12:20
- - _artem_   Наверно загадочность заключается в том что : - при...   Sep 21 2006, 17:34
- - _artem_   Если нужно несколько таймеров а возиться неохота ...   Sep 22 2006, 09:25
- - Kovrov   0.15 это очень много... попробуйте использовать ин...   Nov 7 2006, 07:13
|- - 676038   Цитата(wired @ Jun 17 2008, 17:06) взял з...   Jun 17 2008, 13:45
||- - wired   Цитата(676038 @ Jun 17 2008, 16:45) Я счи...   Jun 17 2008, 14:11
|- - 676038   Цитата(wired @ Jun 17 2008, 21:01) но на ...   Jun 17 2008, 15:09
||- - 676038   Цитата(676038 @ Jun 17 2008, 21:09) Добав...   Jun 17 2008, 15:12
||- - Палыч   Цитата(676038 @ Jun 17 2008, 18:12) Может...   Jun 17 2008, 15:32
- - Kovrov   ничего не упустилию просто процессор лишний раз па...   Dec 6 2006, 19:58
- - aforestman   Посмотрите на "хвостатый экодер". Может ...   Dec 8 2006, 13:39
- - OlegIvanov   Нарисуйте на бумажке работу энкодера и сгенерируйт...   Dec 13 2006, 05:15
- - _Pasha   Ниасилил выделенный участок осциллограммы. Что это...   May 17 2008, 05:04
|- - gte   Вероятнее всего моя рука дрогнула. Т.е. в этом мес...   May 17 2008, 06:34
|- - _Pasha   Цитата(gte @ May 17 2008, 09:34) На один ...   May 17 2008, 07:21
- - gte   Смотрел на одном. Но исходя из вида плоскости конт...   May 17 2008, 07:51
- - gte   Ради справедливости. Оптические есть с фиксацией и...   May 19 2008, 05:15
- - 676038   В своем последнем варианте - по изменению состояни...   Jun 17 2008, 15:48
|- - Maik-vs   Цитата(676038 @ Jun 17 2008, 19:48) Прост...   Jun 18 2008, 09:41
||- - wired   Цитата(Maik-vs @ Jun 18 2008, 12:41)...   Jun 18 2008, 11:36
||- - Maik-vs   Цитата(wired @ Jun 18 2008, 15:36) какое ...   Jun 18 2008, 14:33
||- - wired   Цитата(Maik-vs @ Jun 18 2008, 17:33)...   Jun 18 2008, 15:01
||- - wired   Цитата(Maik-vs @ Jun 18 2008, 17:33)...   Jun 23 2008, 06:39
||- - Maik-vs   Цитата(wired @ Jun 23 2008, 10:39) я прав...   Jun 26 2008, 12:46
||- - wired   Цитата(Maik-vs @ Jun 26 2008, 15:46)...   Jun 26 2008, 14:48
|- - Палыч   Цитата(676038 @ Jun 17 2008, 18:48) Прост...   Jun 18 2008, 12:47
|- - gte   Цитата(Палыч @ Jun 18 2008, 16:47) грамоз...   Jun 18 2008, 12:58
|- - Палыч   Цитата(gte @ Jun 18 2008, 15:58) При испо...   Jun 18 2008, 13:10
- - gte   Именно такой. Я смотрел анализатором переключая по...   Jun 18 2008, 13:19
|- - Палыч   Посмотрел DS. В нём есть рисунок "Quadrature ...   Jun 18 2008, 14:25
|- - gte   Цитата(Палыч @ Jun 18 2008, 18:25) Посмот...   Jun 18 2008, 15:14
- - ozzy   Цитата(wired @ Jun 18 2008, 14:36) ... и...   Jun 20 2008, 20:37
- - haker_fox   Использую датчики от мышки для управления двигател...   Jun 24 2008, 03:33
- - tremor   Читать всю тему влом, поэтому просто приведу свой ...   Jun 24 2008, 18:08
|- - haker_fox   Цитата(tremor @ Jun 25 2008, 03:08) PEC16...   Jun 25 2008, 01:44
- - tremor   ЦитатаТолько вряд ли он выдержит вращения на высок...   Jun 25 2008, 01:54
|- - haker_fox   Цитата(tremor @ Jun 25 2008, 10:54) В ДШ ...   Jun 25 2008, 04:27
- - sansnotfor   мой вариант. энкодер опрашиваю в прерывании таймер...   Nov 12 2008, 09:51
- - Genadi Zawidowski   Ух ты... А тема ещй жива... Попробую предложиьть и...   Nov 13 2008, 16:41
- - Andrew O. Shadoura   Добавлю немного в копилку. Знаю, не самый лучший в...   Nov 15 2008, 12:41
- - Павлик   Приложу свою первую подпрограмку для работы с Энк...   Nov 15 2008, 14:14
- - sansnotfor   оооо... заметил, что мой код можно сократить в это...   Nov 21 2008, 06:43


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.0152 секунд с 7
ELECTRONIX ©2004-2016