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

 
 
> Опрос валкодера, Дребезг
Anjey_N
сообщение Nov 14 2007, 09:49
Сообщение #1


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

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Все привет!
Вопрос такой:
В системе стоит механический валкодер. Опрашиваю его я вот так

signed char ReadEncoder(void)
{
register signed char temp = 0;
encoder = (~PIN_Coder & 0x03);//i?iaa?yai PD0,PD1
if(status != encoder)
{
switch(encoder)
{
case 0:
if(status == 1) temp = 1;
else if(status == 2) temp = -1;
break;
case 1:
if(status == 3) temp = 1;
else if(status == 0) temp = -1;
break;
case 2:
if(status == 0) temp = 1;
else if(status == 3) temp = -1;
break;
case 3:
if(status == 2)temp = 1;
else if(status == 1) temp = -1;
break;
}
status = encoder;
}
return temp;
}
Єту программку скачал с нета. При медленном вращении валкодера показания на индикаторе меняются стабильно, а при быстром вращении - не изменяются.
Похоже на дребезг контактов. Как можно от этого избавиться?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
676038
сообщение Nov 20 2007, 20:03
Сообщение #2


Участник
*

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



Позволю себе маленькие замечания по коду:
- При инициализации глобальных переменных присваивать 0 не надо, это делается автоматически.
- Глобальну переменную encoder лучше объявить static и сделать это внутри функции ReadEncoder(), ведь она больше нигде не используется...

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

Может, все-таки, лучше завести одну линию от энкодера на вход прерывания и опрашивать состояние энкодера только при возникновении этого прерывания? Тогда не придется тратить процессорное время на бесполезный опрос... Но я, конечно, не настаиваю.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Anjey_N   Опрос валкодера   Nov 14 2007, 09:49
- - psw   похоже, что я писал этот кусок как часто опраши...   Nov 14 2007, 13:24
|- - Anjey_N   Цитата(psw @ Nov 14 2007, 17:24) похоже, ...   Nov 14 2007, 16:35
|- - Anjey_N   Валкодеры, их два, подключены по такой схеме Дли...   Nov 15 2007, 08:27
|- - Alex B._   Обязательно нужно через фильтр пропускать отсчеты....   Nov 15 2007, 08:40
|- - alexander55   Цитата(Anjey_N @ Nov 15 2007, 11:27) Опро...   Nov 15 2007, 08:44
|- - Anjey_N   Цитата(alexander55 @ Nov 15 2007, 12:44) ...   Nov 15 2007, 15:24
- - Kirill Frolov   Цитата(Anjey_N @ Nov 14 2007, 12:49) Вопр...   Nov 15 2007, 17:06
|- - Anjey_N   Спасибо, думаю   Nov 16 2007, 08:25
- - Anjey_N   Мне тут посоветовали применить компъютерную мышь...   Nov 16 2007, 15:45
- - 676038   Мой опыт смотри здесь: http://electronix.ru/forum/...   Nov 16 2007, 19:39
|- - Anjey_N   Ходил по ссылке, читал. Так вы закончили этот прое...   Nov 17 2007, 15:33
- - 676038   По ссылке выше во вложении есть весь проект на С (...   Nov 17 2007, 18:29
|- - Anjey_N   Цитата(676038 @ Nov 17 2007, 22:29) По сс...   Nov 18 2007, 17:44
- - Anjey_N   Я тут провёл один эксперимент. На макетке собрал с...   Nov 20 2007, 15:29
- - Anjey_N   Провёл следующий эксперимент. Результаты те же, пр...   Nov 20 2007, 17:54
- - Anjey_N   Цитата(676038 @ Nov 21 2007, 00:03) А теп...   Nov 21 2007, 08:27


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:34
Рейтинг@Mail.ru


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