|
Дребезг контактов, Как избежать? |
|
|
|
Jul 9 2006, 18:55
|

Участник

Группа: Новичок
Сообщений: 27
Регистрация: 5-07-06
Из: Украина, Донецк
Пользователь №: 18 606

|
Кнопка замыкает ножку на землю. Mega16 Код #include <avr/io.h> #include <avr/interrupt.h>
#define F_CPU 8000000UL // 8 MHz #include <util/delay.h>
ISR(INT2_vect) { int i; for (i=0;i<3;i++) _delay_ms(10); if ((PINB & 0x04)==0) // ножка внешнего прерывания PORTA ^= 1; }
int main() { PORTA = 0; DDRA = 0xFF;
PORTB = 0xFF; DDRB = 0x00; MCUCSR &= ~_BV(ISC2); // по заднему фронту (H->L) GICR = _BV (INT2); sei ();
for(;;) return(0); } Идея вроде бы правильная, но на практике срабатывает плоховато... В чем ошибка?
Сообщение отредактировал Labinskiy Nikolay - Jul 9 2006, 18:59
--------------------
If you can't make it good - don't make it look good ;)
|
|
|
|
|
 |
Ответов
|
Jul 10 2006, 13:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Программных алгоритмов антидребезга может быть достаточно много, но на мой взгляд самыми классическим критериями (на все случаи жизни для обработки состояний клавиатуры) по которым можно написать такие алгоритмы должны основываться на построении следующего замкнутого графа: 1. Определение состояния надежно-разомкнутого контакта (группы контактов). 2. Определение состояния первого замыкания контакта. Это и есть начало дребезга, который должен игнорироваться до определения следующего состояния (3). 3. Определение состояния надежно-замкнутого контакта (группы контактов). 4. Определение состояния первого размыкания контакта. Есть начало дребезга, который должен игнорироваться до определения следующего состояния (1).
Так же можно заметить, что ни одна программная реализация антидребезга не будет работать столь надежно, как его аппаратная реализация. Пример этому может служить механические свойства самого контакта ('пружинистость' материала, его механическое старение, устойчивость к внешней среде - окисление), что в последствии очень существенно меняет характеристику дребезга (длительность и форму). К примеру, когда приходится делать надежную систему, я всегда использую триггеры.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
Сообщений в этой теме
Labinskiy Nikolay Дребезг контактов Jul 9 2006, 18:55 Yura_K Код int i;
for (i=0;i<3;i++)
_dela... Jul 9 2006, 19:13 rezident Есть два стандартных способа опроса клавиатуры с у... Jul 9 2006, 19:25 Stas633 Цитата(rezident @ Jul 9 2006, 23:25) Есть... Jul 9 2006, 22:32 TamTam [quote name='Stas633' date='Jul 10 200... Jul 9 2006, 22:50 Velund С весовыми резисторами имеет смысл связываться тол... Jul 9 2006, 23:59  Stas633 Цитата(Velund @ Jul 10 2006, 03:59) С вес... Jul 10 2006, 07:45   Kovrov Цитата(Stas633 @ Jul 10 2006, 11:45) Мне ... Jul 10 2006, 08:46   defunct Цитата(Stas633 @ Jul 10 2006, 09:45) Инте... Feb 11 2010, 23:02 upc2 Можно с использованием флагов.В прерывании устанав... Jul 10 2006, 04:32 Kovrov Такой вариант обхода дребезга - пользуюсь когда мн... Jul 10 2006, 06:17 rezident При использовании ADC и "аналоговой" кла... Jul 10 2006, 09:27 Stas633 Цитата(rezident @ Jul 10 2006, 13:27) При... Jul 10 2006, 10:40 Kovrov по профилю работы часто приходится общаться с проф... Jul 10 2006, 11:36 Stas633 Цитата(Kovrov @ Jul 10 2006, 15:36) .... ... Jul 10 2006, 11:52 fantasy Внесу свою реплику в дискуссию...
Код#define _fDr... Jul 10 2006, 15:19 Labinskiy Nikolay Всем спасибо за ответы - пойду экспериментировтаь Jul 10 2006, 16:36 dio Понимаю что вопрос тупой, но всё таки ...
Упростил... Jul 19 2006, 17:58 smk Как выяснилось в моем случае, полезно обеспечивать... Feb 10 2010, 17:48 Marian Цитата(smk @ Feb 10 2010, 19:48) Как выяс... Feb 11 2010, 13:49 rezident Цитата(smk @ Feb 10 2010, 22:48) Иначе ск... Feb 11 2010, 15:53 Oleg_IT Как-то уже приводил здесь этот код.
Кодunsigned l... Feb 11 2010, 09:23 Lexdaw А я по опросу входа (кнопки) сдвигаю регистр влево... Feb 11 2010, 13:24 Corvus А простой инкремент/декремент чем не угодил? Feb 11 2010, 13:47  ReAl Цитата(Corvus @ Feb 11 2010, 15:47) А про... Feb 12 2010, 05:56   Corvus Цитата(ReAl @ Feb 12 2010, 08:56) Если Вы... Feb 12 2010, 09:09 smk Нет, просто события внутри микроконтроллера опереж... Feb 11 2010, 17:08 sonycman Цитата(smk @ Feb 11 2010, 21:08) Нет, про... Feb 11 2010, 17:17 rezident Цитата(smk @ Feb 11 2010, 22:08) Нет, про... Feb 11 2010, 17:25 Oleg_IT Товарищ смешивает две задачи, устранения дребезга ... Feb 11 2010, 19:27 rezident Цитата(Oleg_IT @ Feb 12 2010, 00:27) Това... Feb 11 2010, 21:31 smk Цитатая лично на точно таких же принципах
о чем то... Feb 12 2010, 06:58 muravei Цитата(smk @ Feb 12 2010, 09:58) в следст... Feb 12 2010, 08:18 rezident Цитата(smk @ Feb 12 2010, 11:58) Действие... Feb 12 2010, 14:26 smk КодЧтобы так сильно не рисковать стоит проверять ... Feb 12 2010, 09:30 andr_doy давно и с большим успехом пользую следущий код
//.... Feb 12 2010, 09:50 sonycman Цитата(ReAl @ Feb 12 2010, 09:56) Да ещё ... Feb 12 2010, 13:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|