ATMega32: защита от дребезга контактов (прерывания)
Re: ATMega32: защита от дребезга контактов (прерывания)
ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18670
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: ATMega32: защита от дребезга контактов (прерывания)
не соглашусь. по мне так запаять что-то намного сложнее, чем натыкать кнопками на клавеploop писал(а):ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
orinoko
Re: ATMega32: защита от дребезга контактов (прерывания)
Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Re: ATMega32: защита от дребезга контактов (прерывания)
Я заводил счетчик. Если N опросов кнопка нажата - устанавливался флаг, по состоянию флагов уже делаем логику программы.
Плюс в том, что можно опрашивать кнопки когда надо, можно в прерываниях, можно в основном цикле, а анализ флага уже можно делать в критичных по времени циклах, чётко представляя, сколько тактов (единицы, или вообще один) займёт проверка.
Работает алгоритм чётко. Но.... кондёр проще
Плюс в том, что можно опрашивать кнопки когда надо, можно в прерываниях, можно в основном цикле, а анализ флага уже можно делать в критичных по времени циклах, чётко представляя, сколько тактов (единицы, или вообще один) займёт проверка.
Работает алгоритм чётко. Но.... кондёр проще
- Rimsky
- Грызет канифоль
- Сообщения: 299
- Зарегистрирован: Вт июн 15, 2010 07:16:42
- Откуда: Иркутск
- Контактная информация:
Re: ATMega32: защита от дребезга контактов (прерывания)
Отличный метод - поддерживаю!orinoko писал(а):Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18670
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: ATMega32: защита от дребезга контактов (прерывания)
и чего только не придумают, лишь бы по-своему, оригинально
я вообще за последние пару лет ни разу не использовал прерывания для кнопок, все время работаю по опросу, дребезг давлю. как сказал, и совершенно не жужжу... и автоповтор при длителном нажатии сделал, и работу с одновременно нажатой группой кнопок... и ваши проблемы мне просто удивительны...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: ATMega32: защита от дребезга контактов (прерывания)
В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки.ARV писал(а):вам надо подождать 10-15 миллисекунд и проверить уровень на пине - если он НИЗКИЙ, то делать свои черные дела, если ВЫСОКИЙ - спать дальше.
и всех делов. и никаких кондеров!
I am DX168B and this is my favourite forum on internet!
-
Amator
- Открыл глаза
- Сообщения: 65
- Зарегистрирован: Вс дек 06, 2009 19:18:11
- Откуда: Ukrain, Sumy
- Контактная информация:
Re: ATMega32: защита от дребезга контактов (прерывания)
В самом начале было ..."(большую часть времени МК спит)"DX168B писал(а):В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки.И никаких кондёров.
Если мы не используем прерывание, то большую часть контроллер опрашивает клавиатуру.
Я не зная почему в задаче надо, чтобы МК большую часть спал. Но вопрос был задан именно так. А кто как обрабатывает нажатие клавиш, это уже вопрос третий. Мне например пару раз тыкнуть паяльником не трудно
Понесло нас не на шутку
Если на клетке со слоном увидишь надпись "Буйвол" - не верь глазам своим.
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: ATMega32: защита от дребезга контактов (прерывания)
В целом моё скромное мнение совпадает с мнением ARV. Однако я делаю ещё проверку на отпускание кнопки. Тогда дребезг исключается без всяких задержек. Проверено на 100% при использовании микрокнопок.
Успех - императив!


