Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 40 99

picmaniac: Почему она нарушится? Работа устройства для пользователя должна остаться такой же. А уж сколько раз кнопки проверять и как - это забота программиста.
Я имел ввиду другое. Мы же теперь можем прекращать "бегущий огонь" в любой момент, если кнопка отпущена, не дожидаясь конца цикла сдвига. Это (+) или (-)? Точно также, не дожидаясь конца пробегания огня, при нажатии второй кнопки, можно сразу зажигать два средних светодиода. Опять же, преимущество это или нет?
Что касается нарушения работы, то ведь теперь и одновременное нажатие и отпускание двух кнопок будет обрабатываься с задержкой.
Что касается проверок, мне думается при таком раскладе (0, 50, 100 мс) фактически будет две проверки, 0 не в счет. Может все-таки проверок побольше, а период прерываний поменьше?
А ведь можно и бегущий огонь сделать в прерываниях, считая эти самые прерывания в самих прерываниях. Тогда уж вообще ресурсы основной программы освободятся. Мне кажется, что это даже будет более поучительно, ведь "простой" бег. огонь-то мы уже реализовывали.

 

Zandy: Может все-таки проверок побольше, а период прерываний поменьше?
Вообще-то, думаю, достаточно и одной проверки по истечении 100 мс. Кнопку ведь нажимает человек, а не робот. И если через 100 мс после обнаружения нажатия кнопка остаётся нажатой можно считать, что это нажатие, а не помеха.

 

Да, с расчётом я наглюкал неслабо... Это всё пиво! Сегодня не буду больше ничего считать.

 

А что вы скажете про это: http://www.chip-news.ru/archive/chipnews/200203/Article_05.pdf Аппаратная реализация антидребезга, по сути очень похожая на нашу.
А в принципе мне все равно, как и что делать, лишь бы побыстрее начать программу писать. А то ведь забуду всё, чему научили. Так что жду окончательного решения по Т.З. от "мэтров" МК.

 

А вот еще.

61193.doc

 

SAK: Вообще-то, думаю, достаточно и одной проверки по истечении 100 мс. Кнопку ведь нажимает человек Так-то оно так...И на вашем столе макетик будет безотказно щелкать...
Но ведь Вы поставили кнопочки подешевле? А...в реальных условиях девайса, со временем (и достаточно быстро), дребезг будет увеличиваться. А не дай Бог, во влажной среде побывает..
Тут учимся ресурсы расходовать рационально. Но кому понадобится рациональность без нормальной достоверности?
Если только с макетками поиграться...
Мой скромный опыт заставил меня усвоить: минимально 4 проверки, нормально 8, - где дрянные контакты со временем могут быть или небрежная эксплуатация. Чтобы потом голова не болела.
Кстати, тут неплохая аналогия с UART (RS232), там в самом простом аппаратном варианте минимум трижды сканируется временная зона бита для принятия решения "0" или "1".

 

Zandy: А вот еще. Ну вот, тут даже до 50 раз...
Если пойти далее в чащу по кнопкам.. Существует еще один прием для повышения надежности работы кнопок в малопотребляющих девайсах. Ессно если схема это позволяет.Там подтяжки на многокилоомных резисторах или вовсе без них. Экономия! Ток кнопки слишком мал. И перед окончательным принятием решения этот вход делают выходом и кратковременно туда еденичку тыкают. Контроллеру ничего не будет. А если после такой пробы контакт остается в нуле, значит действительно нолик... Ну это просто на заметку, сейчас делать это не надо.....

 

Zandy: Что касается нарушения работы, то ведь теперь и одновременное нажатие и отпускание двух кнопок будет обрабатываься с задержкой. А почему? Обработка одной кнопки с исполнением,- всяко до десятков микросекунд.
Zandy: А ведь можно и бегущий огонь сделать в прерываниях, считая эти самые прерывания в самих прерываниях.. ОТЛИЧНО Zandy! ПРОЦЕСС ПОШЕЛ!!....
И в этом-же прерывании ВСЕ текущие нажатия обрабатываются и все решения принимаются...
Кстати, на этом-же прерывании можно и часики реального времени сваять..без индикации ессно, для внутренних нужд.
И что забавно, даже после кнопок и часиков, ресурсов еще навалом будет, даже в самом простом контроллере...

 

Vlad_Petr: Но кому понадобится рациональность без нормальной достоверности?
В данном задании бороться с дребезгом не требуется вообще, он здесь никак не повлияет на работу устройства, но задержка необходима для того, что бы заметить одновременное нажатие кнопок. А если хотим сделать систему пуска ядерной ракеты и нужна надежность 200%, то даже 1000 проверок будет недостаточно, как минимум надо ставить кнопки с переключением как это делается в устройствах с RS триггером. Зачем решать несуществующие проблемы?

 

SAK: Зачем решать несуществующие проблемы?
Понятно! Вам такие проблемы еще никогда не встречались...