ATMega32: защита от дребезга контактов (прерывания)
ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
- Реклама
не соглашусь. по мне так запаять что-то намного сложнее, чем натыкать кнопками на клавеploop писал(а):ARV, ну согласитесь, что поставить кондёр иной раз проще, чем городить трёхэтажный код, особенно когда нет возможности поставить тупые задержки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
Я заводил счетчик. Если N опросов кнопка нажата - устанавливался флаг, по состоянию флагов уже делаем логику программы.
Плюс в том, что можно опрашивать кнопки когда надо, можно в прерываниях, можно в основном цикле, а анализ флага уже можно делать в критичных по времени циклах, чётко представляя, сколько тактов (единицы, или вообще один) займёт проверка.
Работает алгоритм чётко. Но.... кондёр проще
Плюс в том, что можно опрашивать кнопки когда надо, можно в прерываниях, можно в основном цикле, а анализ флага уже можно делать в критичных по времени циклах, чётко представляя, сколько тактов (единицы, или вообще один) займёт проверка.
Работает алгоритм чётко. Но.... кондёр проще
Отличный метод - поддерживаю!orinoko писал(а):Разрешите поделится своим программным методом защиты от дребезга. Для этого в памяти на каждую кнопку используется по одному байту - "сдвиговый регистр антидребезга". При срабатывании прерывания по таймеру я считываю состояние кнопок и каждую кнопку завожу в свой сдвиговый регистр. Когда значение этого регистра = 0x00, то считается что кнопка отжата, если = 0xFF - нажата, другие значения не влияют на регистрацию факта изменения состояния. Только определиться с периодом опроса кнопок.
- Реклама
и чего только не придумают, лишь бы по-своему, оригинально
я вообще за последние пару лет ни разу не использовал прерывания для кнопок, все время работаю по опросу, дребезг давлю. как сказал, и совершенно не жужжу... и автоповтор при длителном нажатии сделал, и работу с одновременно нажатой группой кнопок... и ваши проблемы мне просто удивительны...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки.ARV писал(а):вам надо подождать 10-15 миллисекунд и проверить уровень на пине - если он НИЗКИЙ, то делать свои черные дела, если ВЫСОКИЙ - спать дальше.
и всех делов. и никаких кондеров!
I am DX168B and this is my favourite forum on internet!
В самом начале было ..."(большую часть времени МК спит)"DX168B писал(а):В опросах кнопок я тоже так делаю. Сначала жду, за тем снова проверяю, если есть разница, то исключаю обработку кнопки.И никаких кондёров.
Если мы не используем прерывание, то большую часть контроллер опрашивает клавиатуру.
Я не зная почему в задаче надо, чтобы МК большую часть спал. Но вопрос был задан именно так. А кто как обрабатывает нажатие клавиш, это уже вопрос третий. Мне например пару раз тыкнуть паяльником не трудно
Понесло нас не на шутку
Если на клетке со слоном увидишь надпись "Буйвол" - не верь глазам своим.
В целом моё скромное мнение совпадает с мнением ARV. Однако я делаю ещё проверку на отпускание кнопки. Тогда дребезг исключается без всяких задержек. Проверено на 100% при использовании микрокнопок.
Успех - императив!


