ATMega32: защита от дребезга контактов (прерывания)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение ploop »

ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18670
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение ARV »

ploop писал(а):ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
не соглашусь. по мне так запаять что-то намного сложнее, чем натыкать кнопками на клаве :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
orinoko

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение orinoko »

Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение ploop »

Я заводил счетчик. Если N опросов кнопка нажата - устанавливался флаг, по состоянию флагов уже делаем логику программы.

Плюс в том, что можно опрашивать кнопки когда надо, можно в прерываниях, можно в основном цикле, а анализ флага уже можно делать в критичных по времени циклах, чётко представляя, сколько тактов (единицы, или вообще один) займёт проверка.

Работает алгоритм чётко. Но.... кондёр проще :))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение Rimsky »

orinoko писал(а):Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Отличный метод - поддерживаю! :beer:
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18670
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение ARV »

и чего только не придумают, лишь бы по-своему, оригинально :) я вообще за последние пару лет ни разу не использовал прерывания для кнопок, все время работаю по опросу, дребезг давлю. как сказал, и совершенно не жужжу... и автоповтор при длителном нажатии сделал, и работу с одновременно нажатой группой кнопок... и ваши проблемы мне просто удивительны...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение DX168B »

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: защита от дребезга контактов (прерывания)

Сообщение Amator »

DX168B писал(а):В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки. :) И никаких кондёров. :)
В самом начале было ..."(большую часть времени МК спит)"
Если мы не используем прерывание, то большую часть контроллер опрашивает клавиатуру.

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

Понесло нас не на шутку :)) . Сейчас каждый с пеной у рта будет доказывать , что его метод лучше. А на самом деле почти все варианты были названы и что выбрать каждый решает сам.
Если на клетке со слоном увидишь надпись "Буйвол" - не верь глазам своим.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: ATMega32: защита от дребезга контактов (прерывания)

Сообщение Roman Venom »

В целом моё скромное мнение совпадает с мнением ARV. Однако я делаю ещё проверку на отпускание кнопки. Тогда дребезг исключается без всяких задержек. Проверено на 100% при использовании микрокнопок.
Успех - императив!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»