Site Loader

Опрос кнопок avr

После первых шагов в освоении микроконтроллеров начинающий микроконтроллерщик начинает пытаться применять свои познания в первых самостоятельных поделках, часто пытаясь «моргать светодиодами» в зависимости от состояния входных портов например. Вот про опрос состояния входных портов мы и поговорим. За состояние порта ввода отвечает регистр PINB, который работает только на чтение, опросив который можно узнать состояние входа. Опросить конкретный вход можно командой PINB. Если нужно опросить несколько входов и сделать одно дело в зависимости от состояния по нужным входам, то применяют логические операции:.


Поиск данных по Вашему запросу:

Схемы, справочники, даташиты:

Прайс-листы, цены:

Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.

По завершению появится ссылка для доступа к найденным материалам.

Содержание:

  • Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа
  • Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа
  • Работа с кнопками программа обработки нажатия для микроконтроллера ATmega8
  • Подключаем кнопки к AVR. Шаг №12
  • Как обработать удержание кнопки в МК AVR?
  • Опрос кнопок на ассемблере
  • Принципы анализа нажатия стандартных кнопок с помощью микроконтроллера AVR MEGA128
  • Easyelectronics.ru
  • Подключение кнопки к микроконтроллеру
  • AVR Урок 7. Кнопка

ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Tiny 2313. Подключение кнопки и её опрос на нажатие и отжатие.

Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа


Обновлено Здравствуйте дорогие друзья. В этой статье пойдет речь о кнопках и методе борьбы с дребезгом. Материала в интернете куча, но каждый индивидуальный взгляд на решение вопроса увеличивает скорость понимания данного направления. Поэтому я и решил написать. Ну что ж перейдем к кнопкам. Зачем нужны кнопки? Вот тут и приходят на помощь кнопки.

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

В основном применяют не фиксирующиеся нормально разомкнутые, но это решение строго личное , что и как использовать.

Я дальше буду писать про нормально разомкнутые. Подключить кнопку к микроконтроллеру AVR , очень просто на рисунке ниже представлена схема подключения. В данном случае, просто подсоединяем один конец к ножке МК, а второй вывод к земле либо к питанию.

Не забываем задействовать внутренний подтягивающий резистор для исключения помех от наводок, даже тем же пальцем. Принцип следующий настраиваем порт как вход то есть регистр DDRx выставляем в 0, далее подтягиваем внутренние резисторы, то есть выставляет регистр PORTx в1. Данный код представляет примерный подход опроса двух кнопок. Алгоритм может меняться как пожелает фантазия. Но самое главное что в коде опроса должен присутствовать антидребезговый код. Что это? Дребезг это явление возникает в переключателях, которое представляет собой в момент переключения случайные многократные неконтролируемые замыкания и размыкания контактов и длятся они от десятков до сотен миллисекунд.

На рисунке ниже у нас пример дребезга. Борются двумя методами, первый для компенсации дребезга применяют переключатели с обратной связью, с характеристикой в виде прямоугольной петли гистерезиса и т. В коде после задержки, когда колебания затухли, опять сравнивается состояние.

Вот таким нехитрым методом происходит опрос кнопок. Здесь нам на помощь приходят прерывания, например их можно использовать внешнее прерывание. Читайте даташит. Порт также настраиваем на вход, подтягиваем резистор. В нормальном состоянии, когда кнопка разомкнута на выводе присутствует 1. В момент замыкания на вывод приходит 0, где по спадающему фронту настройка запускается обработчик прерываний. При возникновения прерывания этот флаг аппаратно сбрасывается. Если мы хотим вызывать вложенные прерывания то необходимо программно установить этот флаг.

При выходе из обработчика необходимо выполнить комманду reti; , которая установит этот флаг в 1. Например в программе считывания кнопок на АЦП был описан способ считывания кнопок в прерывании, только уже используя АЦП.

Разрешаем внешние прерывание INT0. По спадающему фронту.

Разрешение общего прерывания. Должен быть обязательно установлен. Также наверное стоит упомянуть о регистре GIFR, флаги которого используются для индикации прерываний. Кому необходимо читаем даташит. Способов использования прерываний для кнопок куча, поэтому читаем, подбираем… На этом все. Всем пока. Вот смотрите вы пишите про опрос кнопок в цикле, я с вами согласен. Я так делал получал хороший отклик на нажатие кнопки. Насчет введения антидребезга не знаю. Пробовал делал с ним и без него разницы я не увидел.

Вопрос в следующем. Как модернизировать программу в цикле, чтобы переменная увеличивалась быстрее, если держать кнопку постоянно, то есть время делай должно сокращаться. И наоборот, если нажимаешь кнопку через определенное время, просто отклик на каждое нажатие, время delay опять принимает определенное значения. Я пробовал экспериментировал с delay, но насколько я понял эта функция требует записи числа. А изменяемый аргумент вписать в нее нельзя. Я думаю в цикле ожидания отпускания кнопки можно прописать алгоритм с еще одной проверкой, что кнопка нажата уменьшить время задержки поставить счетчик и вот Вам будет быстрое увеличение переменной.

Я нашел одну pbs28b, но она великовата. У нее диаметр 22 мм. Может где то вам попадалось что то подобное но поменьше.

Написал кусок кода здесь как бы немного другая задача, нужно при отжатой кнопки заранее выходить из цикла. Применил оператор return, пробовал также break но ни с одним из них не работает. Можете бегло глянуть что не так. Хотя вроде бы я разобрался с последним вопросом.

Надо выход из цикла писать break а потом еще в самом конце return это выход из функции. Так работает. Notify me of followup comments via e-mail.

Subscribe without commenting E-Mail:. Подписаться на получение новых статей на почту:. Просмотрено раз. Подключаем кнопки к AVR. Еще бы проектик в протеусе для наглядности. Здравствуйте, если задам несколько вопросов по кнопкам сможете мне ответить.

I did not expect this. This is a great story. Добавить комментарий Отменить ответ Ваш e-mail не будет опубликован.


Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа

Кнопку к микроконтроллеру можно подключить двумя основными способами, с подтяжкой линии порта к высокому логическому уровню или низкому через резистор, как показано на картинке ниже. Я обычно использую первый вариант подключения, можно конечно использовать внутренние подтягивающие резисторы на входах PORTB, но мне еще не доводилось применять такой способ. В простейшем варианте микроконтроллер все время опрашивает одну или несколько кнопок, при нажатии которых выполняет соответствующую подпрограмму и снова возвращается на опрос кнопок. Подпрограмма обычно выполняется очень быстро, естественно за это время можно не успеть отжать кнопку, вследствие чего подпрограмма выполнится многократно. Чтобы этого не происходило после обнаружения нажатой кнопки необходимо добавить проверку отжатого состояния, но и в этом случае из-за явления дребезга контактов выполнение подпрограммы может начаться до отжатия кнопки.

Поэтому после обнаружения нажатой кнопки необходимо добавить временную задержку в мс. Проверка отжатого состояния будет многократно выполняться через заданный интервал времени.

Метод подключения кнопок к AVR. программы и далее кнопки недолжны реагировать, то тут можно поместить опрос в циклическое.

Работа с кнопками программа обработки нажатия для микроконтроллера ATmega8

В этой статье описан вариант подключения и кнопочной клавиатуры к 6-и линиям микроконтроллера AVR. Способ не нов, по этому в излишних комментариях не нуждается. Схема подключения клавиатуры к МК представлена на рисунке ниже. Если для кого-то схема с первого раза покажется не логичной, то нарисуйте на листе бумаги 6 точек в виде шестиугольника и каждые две точки соедините между собой линией. В итоге получите ровно 15 линий. Теперь в разрыв каждой линии вставьте кнопку. Получится клавиатура на 15 кнопок с шестью линиями ввода-вывода точками.

Подключаем кнопки к AVR. Шаг №12

Этот скетч и библиотека показывают, как использовать один вывод порта микроконтроллера AVR , чтобы детектировать типичные события на кнопке, такие как одиночное нажатие single click , двойное нажатие double click и длительное нажатие long press. Этот функционал позволяет использовать одну и ту же кнопку для нескольких функций с небольшими затратами на аппаратуру — особенно удобно в случае применения поворотного энкодера rotary encoder, jog-shuttle с одной кнопкой. Примечание: здесь приведен перевод статьи [1], исходный код библиотеки можно скачать по ссылке [2] с использованием систем GIT или SVN, либо просто в виде архива OneButton-master. Начинающим программировать в системе Arduino полезно рассмотреть простой обучающий пример опроса кнопки Button tutorial , чтобы понять, как нужно читать состояние кнопки, и пример Debounce, который показывает, как нужно очистить сигнал кнопки, устраняя ложные срабатывания от импульсов дребезга контактов.

Описан простой эксперимент с подключением кнопки к AVR микроконтроллеру, разобрана не сложная программа на языке Си для обработки нажатий кнопки. Разберемся с особенностями подключения кнопки к портам МК, а также с методами считывания состояний кнопки на языке Си.

Как обработать удержание кнопки в МК AVR?

Сегодня мы расширим свой кругозор по изучению работы портов микроконтроллера и изучим второе назначение порта — работу на вход. И для изучения работы на вход мы применим обычную тактовую кнопку. Как всегда, создадим проект в Atmel Studio, выберем Atmega8A, назовем проект Test04 и код также в main. В качестве подопытного порта давайте возьмём порт B. Можно с успехом использовать любой порт.

Опрос кнопок на ассемблере

Полный текст программного модуля keyboard. Опрос клавиатуры CodeVision. Опрос клавиатуры Proteus — проект для отладки Драйвер для матричной клавиатуры. Учебный курс. Опрос матричной клавиатуры. Они настроены на выход и в начальном состоянии на этих выводах напряжение логического нуля.

Во-первых, давайте обработку нажатия кнопки осуществим при помощи Большинство контроллеров AVR (и ATtiny13 — не исключение) имеет три области памяти. .. Стандартная процедура опроса кнопки.

Принципы анализа нажатия стандартных кнопок с помощью микроконтроллера AVR MEGA128

Хабр Geektimes Тостер Мой круг Фрилансим. MaxEpt MaxEpt. Всем привет! Набросал небольшой код, который обрабатывает нажатие и удержание кнопки по таймеру.

Easyelectronics.ru

ВИДЕО ПО ТЕМЕ: Библиотека опроса кнопок на C++ AVR GCC

Новые книги Шпионские штучки: Новое и лучшее схем для радиолюбителей: Шпионские штучки и не только 2-е издание Arduino для изобретателей. Обучение электронике на 10 занимательных проектах Конструируем роботов. Руководство для начинающих Компьютер в лаборатории радиолюбителя Радиоконструктор 3 и 4 Шпионские штучки и защита от них. Сборник 19 книг Занимательная электроника и электротехника для начинающих и не только Arduino для начинающих: самый простой пошаговый самоучитель Радиоконструктор 1

Рад снова приветствовать постоянных читателей, ожидающих чего-то нового и интересного.

Подключение кнопки к микроконтроллеру

Подключение кнопки к AVR не должно у вас вызывать никаких трудностей. В предыдущей статье мы провели эмуляцию схемы в программе Proteus, помигали светодиодом и научились прошивать наш виртуальный микроконтроллер. Да, разумеется, это возможно. Реализуется довольно легко. Причем можно сэмулировать кнопку как с фиксацией так и без фиксации.

AVR Урок 7. Кнопка

На первом уроке мы научились подавать напряжение ножкой микроконтроллера. Теперь нужно научиться управлять микроконтроллером без перепрошивки. Зачем это нужно?


Кнопочный ввод с помощью АЦП и гребенки сопротивлений на AVR контроллере

      .def  temp   = R16 ;регистр для промежуточных операций

      .def  button = R18 ;регистр с кодом нажатой кнопки

 

      ldi   temp,high(RAMEND) ;инициализация стека

      out   SPH,temp

      ldi   temp,low(RAMEND)

      out   SPL,temp

 

;   В начале инициализации АЦП необходимо произвести включение

; и установку его тактовой частоты. Включение производится

; установкой бита ADEN в регистре ADCSR. Тактовая частота поступает

; на АЦП от системного генератора через предделитель, коэффициент

; деление которого определяется битами ADPS2:ADPS0 в ADCSR и лежит

; в пределах 2…128. Максимальная точность преобразования

; достигается при частоте 50…200 кГц. Если, допустим,

; микроконтроллер работает от внутреннего генератора 1МГц,

; то необходимо установить коэффициент предделителя 8 (биты        

; ADPS2:ADPS0 = 011). Тогда  получим приемлемую частоту

; 1000000/8 = 125 кГц как раз из этого диапазона.

 

      ldi  temp,(1 << ADEN)|(1 << ADPS1)|(1 << ADPS0)

      out  ADCSR,temp

 

;   На следующем этапе производится выбор аналогового входа

; к которому будет подключён АЦП. Он задаётся битами MUX3:MUX0 в

; регистре ADMUX. В нашего случая(используется вход ADC0) все 4

; бита должны быть сброшены. Кроме этого необходимо выбрать

; источник опорного напряжения (задаётся битами REFS1, REFS0

; в ADMUX) и режим  выравнивания результата (отвечает бит ADLAR в

; ADMUX). Для данной схемы в качестве опорного используется

; напряжение питания, а результат измерения выравнивается по левому

; краю(необходимо установить REFS0 и ADLAR).

 

      ldi  temp,(1 << ADLAR)|(1 << REFS0)

      out  ADMUX,temp

 

;   Теперь необходимо запустить преобразование, установив бит

; ADSC в управляющем регистре ADCSR, и дождавшись его завершения

; вызвать подпрограмму опроса кнопок. О завершении преобразования

; свидетельствует установка флага ADIF в ADCSR (если кроме этого

; будут установлены ещё биты ADIE в ADCSR и I в SREG, то произойдёт

; переход на обработчик прерывания от АЦП), после чего флаг

; необходимо сбросить любой командой, записывающей в него 1. Для

; того чтобы избежать процедуры постоянного запуска преобразования

; и дальнейшего цикла ожидания установки ADIF, можно использовать

; режим непрерывного преобразования установкой бита ADFR в регистре

; ADCSR. В этом случае следующее измерение будет запускаться

; автоматически после завершения предыдущего. Конечно, это возможно

; только если в ходе программы в режим работы АЦП небыли внесены

; изменения.

     .

     sbi   ADCSR,ADSC

cnv: sbis  ADCSR,ADIF

     rjmp  cnv

     sbi   ADCSR,ADIF

     rcall btn_adc

     .

         

;     Подпрограмма опроса кнопок с помощью АЦП

; R18 – номер нажатой кнопки при выходе из подпрограммы,

; если ни одна кнопка не нажата, то R18=0

; R16,R17 – регистры для промежуточных операций

; BUTTON – число кнопок

               

btn_adc:

     in   R16,ADCH ;получаем результат преобразования и

     ldi  R17,0xFF ;находим разность R17 = 0xFF–ADCH

     sub  R17,R16

     ldi  R16,0xFF ;заносим в R16 0xFF

     clr  R18     ;очищаем R18

ba1: sub  R16,R17 ;производим деление 0xFF/(0xFF–ADCH),

     inc  R18     ;с помощью последовательного вычитания

     brcc ba1     ;R16 = R16-R17 = 0xFF -(0xFF–ADCH)

     add  R16,R17 ;учитываем остаток после деления

     lsl  R16     ;если он меньше половины делителя,

     sub  R16,R17 ;то отбрасываем его

     brcc ba2

     dec  R18

ba2: cpi  R18,BUTTON+1 ;сравниваем номер нажатой кнопки R18

     brcs ba3  ;с числом кнопок BUTTON+1 и если R18 > BUTTON+1,

     clr  R18  ;то ни одна кнопка не была нажата и R18=0

ba3: ret

Использование переключателей, установленных на контактах AVR

Похоже, здесь происходит что-то еще.

Если переключатели подключены, как показано, и сопротивление замкнутого переключателя меньше 10 кОм, то ваш read_button_volm() должен работать.

Я бы начал с сужения возможностей.

  • Возвращает ли функция 1 , если вручную замкнуть PB4 на землю с помощью перемычки?
  • Возвращает ли функция 1 , если вы вручную замкнете PB0 на землю и нажмете кнопку?
  • Какое напряжение вы видите на контакте PB4 с помощью вольтметра при нажатии на кнопку? Вверх?

Имейте в виду, что внутреннее сопротивление ATTINY12 может достигать 122 кОм…

.. и напряжение должно быть ниже 0,1 * Vcc на цифровом выводе ввода-вывода, который также имеет XTAL на них (PB4 и PB3)…

Это означает, что для надежного обнаружения 0 на PB4, когда к нему подключена подтяжка, вам нужно, чтобы сопротивление между PB4 и землей было меньше…

 122К/х < 0,1
х < 12К
 

Таким образом, ваш переключатель должен быть менее 12 кОм, чтобы надежно работать на этом выводе этой микросхемы с включенным подтягиванием.

Решения

Если вам абсолютно необходимо, чтобы этот макет с этими частями работал, есть несколько трюков, которые вы можете попробовать.

Первое, что приходит на ум, это использование времени и емкости для обнаружения замыкания переключателя.

То, что вы будете делать в своем коде, в основном...

  1. Включить подтяжку на PB0
  2. Установите PB4 на выход, уровень НИЗКИЙ.
  3. Установите PB4 в положение INPUT, без подтягивания.
  4. Время, через которое вход PB4 переключается в состояние ВЫСОКИЙ при нажатой кнопке.

Вы фактически сделали RC-цепь из PB0, переключателя и емкости контакта PB4 и пытаетесь измерить R переключателя, измерив постоянную времени этого RC.

Получить кучу показаний за этот отсчет времени. Это время, за которое емкость на PB4 разряжается ниже порогового напряжения 0 бит.

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

Имейте в виду, что этот подход имеет некоторые ограничения....

  1. Он очень чувствителен к другим путям, которые могут разрядить контакт PB4, даже если переключатель не нажат. Например, влажный палец или даже немного грязи на дорожках могут легко разрядить емкость так же быстро, как и ваш замкнутый переключатель, поэтому вам необходимо содержать плату в чистоте.

  2. Это занимает гораздо больше времени, чем просто проверка значения бита в регистре PIN, поэтому неэффективно по времени.

  3. Вы не можете установить прерывание контакта при нажатии кнопки из-за задействованной последовательности. Есть способы обойти это с помощью сторожевого таймера, но они более сложны и менее энергоэффективны, чем прямое прерывание смены контакта.

Дайте нам знать, если этот подход работает для вас!

Различия между прерываниями и выборкой для аппаратной кнопки?

Устранение дребезга — это часто задаваемые вопросы. Вы должны быть в состоянии найти... почти неограниченное количество веб-страниц по этой теме. Смит также прокомментировал широко читаемый PDF-файл Джека Ганссле по этой теме. И со всеми этими ответами у вас есть как аппаратные, так и программные методы.

Я немного дополню эту «литературу», в основном рассказывая об идеях, которые еще недостаточно освещены. Но прежде чем я это сделаю, пара моментов:

  1. Устранение дребезга в аналоговом оборудовании может дать результаты, которых вы не можете достичь с помощью переключателя, «наблюдаемого» только в цифровом виде на периодической основе путем опроса или даже аппаратных событий смены контактов. Но вы можете сделать «достаточно хорошо» для всех намерений и целей в цифровом виде. Почти никто в наши дни не использует внешние аналоговые решения для подавления дребезга. Но я использовал все, от растягивания пульса с помощью одноразовых импульсов (74121) до техник, упомянутых здесь Джеком Ганссле.
  2. Для тех, кто занимается только встроенным программированием и совсем не заинтересован в изучении электроники, устранение дребезга переключателей, вероятно, является одним из двух необходимых базовых навыков. Рабочие светодиоды, вероятно, другой. И под этим я не имею в виду наличие только одного навыка в них. Я имею в виду возможность сделать это несколькими способами. Так что вам действительно делать нужно полностью понять, о чем пишет Джек Ганссле, и еще больше о переключателях.

Так как я упомянул о растяжении пульса с помощью 74121, и поскольку Джек Ганссле делает , а не упоминают об этом, и никто здесь пока не упоминает, я могу также предоставить эту дополнительную ссылку в качестве дополнительного рекомендуемого чтения об использовании 74121 или 555 в качестве однократного таймера для устранения дребезга переключателей.


Теперь проделаем это через наблюдение с помощью микроконтроллера.

Я обычно использую конечный автомат для устранения дребезга. Это почти всегда управляется обычным таймером «сердцебиения», который я устанавливаю примерно на \$8\:\textrm{ms}\$, где это возможно. (Обычно я НЕ использую события прерывания по фронту по нескольким причинам. )

Конечный автомат выглядит следующим образом:

имитация этой схемы — схема создана с помощью CircuitLab

Значение DEBOUCED для переключателя может принимать значения «неактивно», «активно» и «неизвестно». Таким образом, вы можете убедиться, что ваше программное обеспечение ждет, пока значение переключателя не установится после инициализации. Но обычно я этим не заморачиваюсь. Я заменяю «неизвестное» значение некоторым значением по умолчанию и вместо этого просто использую двоичную систему значений.

Чтобы войти в конечный автомат, сначала установите для параметра debounced значение по умолчанию, а затем войдите в состояние «ИЗМЕНЕНИЕ» конечного автомата. В каждый временной интервал (обычно \$8\:\textrm{ms}\$, если мне это сойдет с рук) я буду читать текущее значение переключателя и выполнять обновление текущего состояния и, возможно, значения, на которое было обращено внимание. Тогда я просто выхожу. Тогда код высокого уровня обращается только к состоянию debounced.

Если для меня это имеет значение, я могу также сохранить ранее отклоненное состояние. В этих случаях при обновлении самого состояния debounced я сначала скопирую это состояние в «предыдущее состояние debounced». Затем я могу использовать пару значений, чтобы определить, был ли отмененный переход. Иногда я не забочусь о переходах. Иногда я делаю. Так что это зависит. Но во всех случаях я хочу знать только о переходах, которые были отклонены. я никогда не забочусь о рант переходов. Таким образом, высокоуровневый код никогда не использует какое-либо внутреннее состояние, которое конечный автомат использует для своей работы.

Одним из преимуществ этого метода является то, что я могу устранить дребезг сразу на всем порту коммутаторов. И я могу сделать это и без единой ветки в коде прерывания. Это означает очень быстрый и короткий код устранения дребезга для ширины порта микроконтроллера (обычно 8 бит). Пример Atmel AT90 показывает, как это достигается с помощью события прерывания Timer0:

 . equ SWPORTPINS = PINB
.def SwRawCurr = r4
.def SwRawPrev = r5
.def SwState = r6
.def Свдебкурр = r7
.def SwDebPrev = r8
            ; Отказ входных переключателей.
                mov SwRawPrev, SwRawCurr
                в SwRawCurr, SWPORTPINS
                mov Timer0Tmp1, SwRawCurr
                или Timer0Tmp1, SwRawPrev
                mov Таймер0Tmp0, Таймер0Tmp1
                или Timer0Tmp1, SwState
                mov SwState, Timer0Tmp0
                mov Таймер0Tmp0, Таймер0Tmp1
                com Timer0Tmp0
                и Timer0Tmp1, SwDebCurr
                и Timer0Tmp0, SwRawCurr
                или Timer0Tmp1, Timer0Tmp0
                mov SwDebPrev, SwDebCurr
                mov SwDebCurr, Timer0Tmp1
 

Теперь этот пример показывает полную сделку, включая предыдущее и текущее значение переключателя, для которого отменено дребезг. И он также выполняет все необходимые переходы между состояниями. Я не показываю инициализацию этого кода. Но вышеизложенное показывает, насколько легко работать с конечным автоматом и как мало кода требуется для этого. Это довольно быстро и просто и не требует ветвления (что иногда требует дополнительных циклов, а также дополнительного пространства для кода).


Разные люди, использующие оборудование, над которым я работал в прошлом, привели меня туда. Я пробовал более длительные периоды, и когда я это делаю, люди начинают говорить мне, что «отзывчивость» недостаточно «живая». (В наши дни, когда дети растут, играя в «стрелялки» в реальном времени, я мог бы даже сократить его еще больше. Они будут горько жаловаться даже на небольшие задержки, вызванные современными цифровыми телевизорами при настройке и отображении кадра.)

У некоторых людей есть четкое представление о том, насколько четкой и отзывчивой должна быть система. Четкий и отзывчивый означает, что пробуете чаще, а не меньше. Но лично я считаю допустимыми периоды наблюдения \$20\:\textrm{ms}\$. (Хотя я считаю, что , а не , более длительное время достаточно даже для меня). обновляется. Таким образом, нажатие кнопки и ее удержание даже в лучшем случае потребуют этих переходов:

  1. изменение с УСТАНОВЛЕНО на ИЗМЕНЕНИЕ
  2. изменение с ИЗМЕНЕНИЕ на УСТАНОВЛЕНО
  3. оставаться в SETTLED, обновление DEBOUCED

Таким образом, для достижения нового состояния устранения дребезга требуется как минимум 3 периода выборки.

Для перехода кнопки из неактивного состояния в активное и обратно в неактивное требуется не менее 6 шагов выборки.


Я упомянул детали выше, чтобы было абсолютно ясно, что шаг расчета \$8\:\textrm{мс}\$ означает, что он где-то между \$16\:\textrm{мс} \lt t \le 24 \:\textrm{ms}\$, чтобы перейти от неактивного к распознанному активному результату устранения дребезга. И потребуется еще \$24\:\textrm{ms}\$, прежде чем состояние вернется в неактивное. Это минимум \$40\:\textrm{ms} \lt t \le 48\:\textrm{ms}\$ для прохождения всего цикла нажатия кнопки.

Использование более длительных периодов выборки будет иметь соответственно более длительные периоды. Использование \$20\:\textrm{ms}\$, которое я уже назвал "приемлемым" для меня, означает где-то около \$100\:\textrm{ms} \lt t \le 120\:\textrm{ms}\$ на весь цикл нажатия кнопки. И это попадает прямо в область, которую обычно замечают люди и . Мне определенно не нравится «ощущение», если оно становится длиннее этого.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *