Страница 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 - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Отличный метод - поддерживаю! :beer:

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% при использовании микрокнопок.