|
Дребезг контактов, Как избежать? |
|
|
|
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 ;)
|
|
|
|
|
 |
Ответов
|
Feb 11 2010, 13:49
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
Цитата(smk @ Feb 10 2010, 19:48)  Как выяснилось в моем случае, полезно обеспечивать не только устранение дребезга, но и время нечувствительности к повторному нажатию. Иначе сканировать и отрабатывать будет успевать быстрее чем поймет оператор что он нанажимал. Или следить, когда кнопку отпустили. Для схемы с одной кнопкой делал типа : Код #define Knopka PIND.3 // Knopka podl na PD 3 , vtoraja noga na zemlu // v portu vklucit podtiagivajushchij rezistor, ili postavit vneshnij k +5 V // jesli knopka nazata, to "Knopka " budet ravna 0
unsigned char ButtonDownTime(void) // return TimeLong if long, and TimeShort if short time { unsigned char i; while ( Knopka == 1); for(i=0;i<7;i++) { delay_ms(50); // zadierzka od drebiezga kontaktow if (Knopka == 1) // odpuscili knopku { return TimeShort;//short goto MEnd; // vyhod s cikla } } return TimeLong;//long MEnd: }
void WaitButtonUp(void) { while (Knopka == 0); delay_ms(50); }
// vyzyvat primerno tak if (Knopka == 0) //Pervoje nazatije, vhod v menu { WaitButtonUp(); // zhdem otpuskanija knopki if (ButtonDownTime() == TimeShort) { //naprimer uvelichit peremennuju HD++; WaitButtonUp(); } else //if (ButtonDownTime() == TimeShort) { // perehod na sledushchij punkt menu } }
|
|
|
|
Сообщений в этой теме
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 BVU Программных алгоритмов антидребезга может быть дос... Jul 10 2006, 13:01 fantasy Внесу свою реплику в дискуссию...
Код#define _fDr... Jul 10 2006, 15:19 Labinskiy Nikolay Всем спасибо за ответы - пойду экспериментировтаь Jul 10 2006, 16:36 dio Понимаю что вопрос тупой, но всё таки ...
Упростил... Jul 19 2006, 17:58 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
|
|
|