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

 
 
> getting-started-project-at91sam9g20, Как работают обработчики прерываний нажатий на кнопки?
wmakc
сообщение Jun 30 2011, 18:48
Сообщение #1


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

Группа: Участник
Сообщений: 111
Регистрация: 2-03-10
Пользователь №: 55 768



нужно реализовать обработку датчика, но не могу избавиться от дребезжания контактов.
Объясните как работает эта функция.

CODE
void ISR_Bp1(void)
{
static unsigned int lastPress = 0;

// Check if the button has been pressed
if (!PIO_Get(&pinPB1)) {

// Simple debounce method: limit push frequency to 1/DEBOUNCE_TIME
// (i.e. at least DEBOUNCE_TIME ms between each push)
if ((timestamp - lastPress) > DEBOUNCE_TIME) {

lastPress = timestamp;

// Toggle LED state
pLedStates[0] = !pLedStates[0];
if (!pLedStates[0]) {

LED_Clear(0);
}
}
}
}


Если я правильно понимаю, то первоначально lastPress = 0 и условие выполнится сразу как только timestamp будет больше DEBOUNCE_TIME, а в программе это 500 милисекунд. А чтобы избавиться от дребезжания нужно чтобы в течение 500 миллисекунд значение PIO не поменялось.

вот так вроде работает, но внутри прерывания крутится цикл, да и PIO проверяется постоянно.
CODE
void ISR_Bp1(void)
{
if (!PIO_Get(&pinPB1))
{
lastPress = timestamp;
while((timestamp- lastPress)<DEBOUNCE_TIME)
{
if(PIO_Get(&pinPB1))
{
return;
}
}
pLedStates[0] = !pLedStates[0];
if (!pLedStates[0])
{
LED_Clear(0);
}
}


Сообщение отредактировал wmakc - Jun 30 2011, 18:49
Go to the top of the page
 
+Quote Post



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

 


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


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