|
MEGA+энкодер |
|
|
|
 |
Ответов
|
Dec 6 2006, 13:28
|
Участник

Группа: Участник
Сообщений: 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--; } И не используется никаких конденсаторов, таймеров или задержек, при этом все работает как должно. Что я упустил?
|
|
|
|
|
Jun 17 2008, 11:06
|

Участник

Группа: Участник
Сообщений: 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 значения т.е. на дисплейчике видньі только четньіе или нечетньіе числа что я не так делаю? или советуете обрабатьівать в основном цикле как у Леонид Иванович
|
|
|
|
|
Jun 17 2008, 14:51
|

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

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

Участник

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

|
Цитата(Палыч @ Jun 17 2008, 17:51)  Достался мне как-то "в наследство" проект, в котором обработывался энкодер... "Дядя" его обработку сделал - как и Вы: прерывание по одному выходу энкодера; направление вращения - анализ состояния другого выхода. Получалось - примерно тоже, что и у Вас: то изменение значения на 1 за щелчок, то на 2... Пришёл к следующему заключению: выход энкодера, заведённый на прерывание - он тоже, конечно, "дребезжит", поэтому после изменения этого выхода -> взводится соответствующий флаг -> происходит прерывание -> флаг сбрасывается, но "дребезг" приводит к повторной установке флага во время обрабоки прерывания -> после выхода из прерывания имеем ещё одно прерывание на тот же щелчок энкодера. Иногда повторного прерывания не происходит, тогда - приращение на 1. В результате - переделал обработку энкодера - получил, что-то аналогичное обработке от Леонида Ивановича. Рекомендую и Вам сделать что-то такое же. но на время обработки я прерьівание то запрещаю... жду... странно. собсно ничего не мешает устроить обработчик в основном цикле
|
|
|
|
Сообщений в этой теме
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    Палыч Цитата(wired @ Jun 17 2008, 18:01) но на ... Jun 17 2008, 15:09     wired Цитата(Палыч @ Jun 17 2008, 18:09) Чего и... Jun 18 2008, 07:54 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|