Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ru:examples:digi:switch_debounce [2010/12/14 19:03] eduardtlmkru:examples:digi:switch_debounce [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Фильтрация дребезга переключателя ======+====== Фильтрация дребезга контактов переключателя ======
  
 //Необходимые знания: [HW] [[et:hardware:homelab:digi]], [AVR] [[et:avr:io]], [LIB] [[et:software:homelab:library:pin]],  [LIB] [[et:software:homelab:library:delay]], [PRT] [[et:examples:digi:switch]]// //Необходимые знания: [HW] [[et:hardware:homelab:digi]], [AVR] [[et:avr:io]], [LIB] [[et:software:homelab:library:pin]],  [LIB] [[et:software:homelab:library:delay]], [PRT] [[et:examples:digi:switch]]//
Line 78: Line 78:
 У программной фильтрации существует несколько методов. Это можно делать просто и сложно, у обоих вариантов свои преимущества и недостатки. Если программа такова, что нажатие на кнопку ожидается редко, то можно после регистрации нажатия кнопки добавить длинную паузу, что исключает реакцию на дополнительные включения, возникшие при дребезге. Так же при подобном решении следует учитывать, что если пользователь держит кнопку долго нажатой, то при отжатии кнопки, программа реагирует на возникшее ложное срабатывание. У программной фильтрации существует несколько методов. Это можно делать просто и сложно, у обоих вариантов свои преимущества и недостатки. Если программа такова, что нажатие на кнопку ожидается редко, то можно после регистрации нажатия кнопки добавить длинную паузу, что исключает реакцию на дополнительные включения, возникшие при дребезге. Так же при подобном решении следует учитывать, что если пользователь держит кнопку долго нажатой, то при отжатии кнопки, программа реагирует на возникшее ложное срабатывание.
  
-~~PB~~+<pagebreak>
  
 Надежней программа, которая контролирует состояние кнопки в течении определённого времени несколько раз (чем больше и длиннее время, тем надежней). Далее преведено чтение фильтрованного значения функции кнопки Дигитального входного-выходного модуля: Надежней программа, которая контролирует состояние кнопки в течении определённого времени несколько раз (чем больше и длиннее время, тем надежней). Далее преведено чтение фильтрованного значения функции кнопки Дигитального входного-выходного модуля:
Line 91: Line 91:
  unsigned char timeout = 100;  unsigned char timeout = 100;
  
- // Ждем, пока состояние кнопки станет ясным или закончится выяснение состояния+ // Ждем, пока состояние кнопки станет ясным или закончится выяснение  
 +        // состояния
  while (timeout-- > 0)  while (timeout-- > 0)
  {  {
Line 127: Line 128:
 Данная функция использует функцию образования задержки, о чём подробнее рассказывает соответсвующее задание. Здесь не нужно много знать о функциях задержки кроме того, что создается 1 миллисекундная задержка для каждого состояния кнопки в конце цикла. Если кнопка в течении восьми раз находится в одном положении, это возвращает посчитанное состояние. Вся процедура может в случае нестабильности кнопки длиться до 100 миллисекунд. Функция уже содержится в библиотеке выводов, так что для прохождения примера не нужно добавлять это в свою программу. Для испытания этого придется первую часть задания немного изменить - привлечь в программу для создания задержки библиотеку и в месте, где значение кнопки было прочитано прямо, использовать функцию с фильтром. Результат следующий: Данная функция использует функцию образования задержки, о чём подробнее рассказывает соответсвующее задание. Здесь не нужно много знать о функциях задержки кроме того, что создается 1 миллисекундная задержка для каждого состояния кнопки в конце цикла. Если кнопка в течении восьми раз находится в одном положении, это возвращает посчитанное состояние. Вся процедура может в случае нестабильности кнопки длиться до 100 миллисекунд. Функция уже содержится в библиотеке выводов, так что для прохождения примера не нужно добавлять это в свою программу. Для испытания этого придется первую часть задания немного изменить - привлечь в программу для создания задержки библиотеку и в месте, где значение кнопки было прочитано прямо, использовать функцию с фильтром. Результат следующий:
  
-~~PB~~+<pagebreak>
  
 <code c> <code c>
ru/examples/digi/switch_debounce.1292353414.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0