Страница 2 из 2
Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 15:43:00
ploop
ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 17:24:43
ARV
ploop писал(а):ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
не соглашусь. по мне так запаять что-то намного сложнее, чем натыкать кнопками на клаве

Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 17:29:13
orinoko
Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 18:44:35
ploop
Я заводил счетчик. Если N опросов кнопка нажата - устанавливался флаг, по состоянию флагов уже делаем логику программы.
Плюс в том, что можно опрашивать кнопки когда надо, можно в прерываниях, можно в основном цикле, а анализ флага уже можно делать в критичных по времени циклах, чётко представляя, сколько тактов (единицы, или вообще один) займёт проверка.
Работает алгоритм чётко. Но.... кондёр проще

Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 18:53:27
Rimsky
orinoko писал(а):Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Отличный метод - поддерживаю!

Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 19:41:13
ARV
и чего только не придумают, лишь бы по-своему, оригинально

я вообще за последние пару лет ни разу не использовал прерывания для кнопок, все время работаю по опросу, дребезг давлю. как сказал, и совершенно не жужжу... и автоповтор при длителном нажатии сделал, и работу с одновременно нажатой группой кнопок... и ваши проблемы мне просто удивительны...
Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 20:00:10
DX168B
ARV писал(а):вам надо подождать 10-15 миллисекунд и проверить уровень на пине - если он НИЗКИЙ, то делать свои черные дела, если ВЫСОКИЙ - спать дальше.
и всех делов. и никаких кондеров!
В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки.

И никаких кондёров.

Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 20:11:03
Amator
DX168B писал(а):В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки.

И никаких кондёров.

В самом начале было ..."(большую часть времени МК спит)"
Если мы не используем прерывание, то большую часть контроллер опрашивает клавиатуру.
Я не зная почему в задаче надо, чтобы МК большую часть спал. Но вопрос был задан именно так. А кто как обрабатывает нажатие клавиш, это уже вопрос третий. Мне например пару раз тыкнуть паяльником не трудно

.
Понесло нас не на шутку

. Сейчас каждый с пеной у рта будет доказывать , что его метод лучше. А на самом деле почти все варианты были названы и что выбрать каждый решает сам.
Re: ATMega32: защита от дребезга контактов (прерывания)
Добавлено: Пт фев 18, 2011 23:25:13
Roman Venom
В целом моё скромное мнение совпадает с мнением ARV. Однако я делаю ещё проверку на отпускание кнопки. Тогда дребезг исключается без всяких задержек. Проверено на 100% при использовании микрокнопок.