народ, нубский вопрос есть 2 пина к которым подключено что-то типа кнопки, как только 1н упал на землю что-то делаю сейчас я засунул опрос этих пинов в 1н из потоков который раз в 250мс их опрашивает, и если 2 раза подрят пин в 0 то что-то делаю получаеться задержка в срабатывании в 0.5сек, и как-бы хрен с ней, в моем случае это не особо критично, но хочется сделать хорошо, отсюда вопрос если я повешу на эти пины вневшее прерывание например по спаду, в прерывании буду будить нужный поток и далее делать что мне нужно, я не заимею гемороя в виде дребезга или ещё какой радости ?
Комментарии: 26
Viktor
Насколько я знаю, в прерывание по нажатию кнопки стоит вставлять вывод из всякиз LPM, ELPM. По крайней мере для пиков я такие рекомендации читал. А насчет дребезга - поставь кондер на 1 мкф.)
Viacheslav
если тупо повесить на прерывание, то получишь кучу вложенных прерываний и race conditions
Viktor
И что за МК?
Denis
stm32
Viktor
А точнее.
Denis
stm32f103c8t6
Viacheslav
Но вообще 250мс задержка для антидребезга - это перебор. Хватит и 5-10мс.
Denis
да у меня просто другой поток который делает полезную работу с такими задержками трудится, я в него и всунул, как-бы не хочется сильно МК нагружать опросом только кнопки
Viacheslav
Ну сделай еще один поток, на idle приоритете и все. опрос кнопки не дорогой
Viktor
А в самом МК нет ничего для антидребезга?
Viacheslav
и как вариант - кнопку повесить на прерывание, а в прерывании тупо запускать поток для антидребезга и уходить из него. а в том потоке уже ждать 10 мс , делать что надо и стопорить поток
Denis
может сделать приостановленный поток если сработало прерывание то запрещаем его и будим поток, в потоке с задержкой в 10-50мс опрашиваем кнопку и если нажата то делаем что нужно и снова разрешаем прерывание с яыка снял
Bogdan
Ну в целом, иногда бывает - аппаратные фильтры. Сканируют пин раз в n тактов, и пропускают уровень, если m последовательных отчётов были одинаковы. Но, емнип, в данной стмке такого нет
Viktor
Или CCL/CLC.
Bogdan
Это ещё более редкий тип периферии
Dmytro
Это, простите, где такое бывает? Обычно в обработчике отключаются прерывания, а одинаковые не копятся
Viacheslav
Но можно и не отключать (большинство об этом вообще не знают) :)
Dmytro
Отключается автоматически. Включается тоже автоматически - после выхода из обработчика. Отсюда и рекомендации - делать обработчики максимально короткими
Viacheslav
Автоматически = Фреймворк за вас делает :) в тех же пиках и арм можно понаделать вложенных прерываний пока стек не кончится
Denis
Не, ну ок, я поймал прерывание по спаду фронта, запретил прерывание, и сделал вывод что кнопка нажата. А как в этой схеме мне понять что ее отпустили ? Т.е. опять нужно сколько-то подождать и снова разрешить прерывание ... Вариант со спящим потоком которы будится по прерыванию мне кажется самым правильным, поправьте если ошибаюсь.
Anonim
Хм, а вот и ответ на вопрос зачем может быть нужно прерывание по уровню.
Denis
Верно, но не в прерывании же задержку на антидребезг делать ...
Viacheslav
Ну есть прерывания и по падению фронта
Sky
Можно просто кнопку пропустить через rc вч фильтр ~100Гц.
Denis
схемотехнику не хотелось-бы переделывать
Sky
Если сама кнопка не припаяна рядом с мк то можно навесом и просто спрятать в термоусадку.