-
- очень давно использую такую вещь AVF(3204 знак., 12.05.2017 19:03)
- Я применяю свой очень простой алгоритм. Работает как часы. Дарю бомж(603 знак., 12.05.2017 14:31 - 14:45)
- Зачем вот это: Apтём(234 знак., 12.05.2017 20:06)
- Привычка. И когда голова сильно болит, писать код без компилятора слегка трудновато. - бомж(12.05.2017 22:17)
- Счётчик цикла не инициализирован. Ну и в конце не проще ли "debounced = !debounced"? А вообще не понял, что и как. "input" - это что и откуда? - SciFi(12.05.2017 14:38)
- Функция вызывается каждые 10 мс. Когда функция == true, входные данные свободны от дребезга. Ещё раз извиняюсь, написал по-быстрому из памяти, но башка болит, мог ошибок наделать. Надеюсь, принцип всё ж понятен. бомж(586 знак., 12.05.2017 14:43 - 15:02)
- Чота с трудом понимаю мысль. Один проход ставит единички сэмпла, второй убивает эти единички новым сэмплом. Казалось бы, уйня с ненадежным исходом, но попробуем найти зерно. То есть в конце конца просто проверяется равенство двух последовательных Олдфаг(86 знак., 12.05.2017 20:08, )
- "Тогда почему не сделать просто буферный массив и сравнивать i-1 и i выборки?" - я именно это и делаю. - бомж(12.05.2017 22:21)
- Да, я и говорю. Но... сложновато. Сравнивать бы на равенство безо всяких логических оппераций. Это же классика антидребезга сравнивать пару последовательных выборок - Олдфаг(12.05.2017 22:36, )
- "Классика антидребезга" - это в каком монументальном труде прочитать? Наверное, целых 5 страниц. - SciFi(12.05.2017 22:46)
- Да, я и говорю. Но... сложновато. Сравнивать бы на равенство безо всяких логических оппераций. Это же классика антидребезга сравнивать пару последовательных выборок - Олдфаг(12.05.2017 22:36, )
- Для буфера регистров нужно "глубина буфера" штук, а счетчиков в 2^n меньше. Элегантная экономия на спичках - 1111111(12.05.2017 20:50)
- Здесь буфер это 12 байт. И сравниваться будет с таким же буфером input. Глубины то практицки нет. - Олдфаг(12.05.2017 21:25, )
- Тьфу. Туплю, в голове одно а пишу про другое. Я вот про эту методу гутарю >>> - 1111111(12.05.2017 21:39, ссылка)
- Скупой платит дважды! - SciFi(12.05.2017 21:01)
- Во времена PIC12С508 еще и не так раскорячивались :) - 1111111(12.05.2017 21:11)
- Здесь буфер это 12 байт. И сравниваться будет с таким же буфером input. Глубины то практицки нет. - Олдфаг(12.05.2017 21:25, )
- "Тогда почему не сделать просто буферный массив и сравнивать i-1 и i выборки?" - я именно это и делаю. - бомж(12.05.2017 22:21)
- Может, лучше словами? И что такое "input"? Пароль, введённый пользователем? Контрольная сумма какого-то пакета? Текущее время в формате BCD? Ключ шифра? - SciFi(12.05.2017 15:05)
- input[] содержит считанные входы. После вызова функции входы в input[] свободны от дребезга. В одном проекте я опрашиваю 96 кнопок и с помощью подобной функции "отфильтровываю" дребезг. бомж(210 знак., 12.05.2017 15:28)
- Всё равно ничего не понятно, но ладно. - SciFi(12.05.2017 15:32)
- Ладно, упростим для ясности: бомж(302 знак., 12.05.2017 15:51)
- До конца не понял. Понял только, что опрашиваем каждые 10 мс, результат фильтра получаем каждые 20 мс, и фильтр видит только 2 последовательных значения. Уже какая-то экзотика получается. Кому это надо? Чем лучше, чем просто опрашивать каждые 20 SciFi(21 знак., 12.05.2017 16:04)
- За 10 мс состояние контактов устаканивается и можно считать, что кнопка нажата. Если же это была помеха, она отфильтровывается. Если просто опрашивать каждые 20 мс, можно эту помеху или звон словить. - бомж(12.05.2017 16:12)
- Тут уж каждый сам для себя решает. Но выглядит это экзотично и нетрадиционно. - SciFi(12.05.2017 16:16)
- Зато работает железно в индустриальных решениях. - бомж(12.05.2017 16:30)
- Просто я подозреваю, что тупо опрос каждые 20 мс без фильтрования работал бы так же железно. Но кто будет тестировать, чтобы всего лишь доказать мою правоту? :-) - SciFi(12.05.2017 16:33)
- В момент нажатия кнопки (2 - 5 мс) она дребезжит. И без фильтрования этот дребезг будет считан, словно кнопка была нажата дважды, а то и больше раз. Мой наипростейший гениальный (не побоюсь этого эпитета:) алгоритм такой дребезг чётко фильтрует. бомж(153 знак., 12.05.2017 16:46 - 16:51)
- Мальчики и девочки, в качестве домашнего задания подумайте, почему опрос с периодом 20 мс устраняет проблему дребезга с длительностью 5 мс. Ну а про помехи - вам виднее, у меня их нет. - SciFi(12.05.2017 16:52)
- А у меня помехи есть. Про дребезг же я написал, поскольку опрос можно делать не только лишь через 10мс. Можно опрашивать значительно чаще :-) - бомж(12.05.2017 16:59)
- Ну да, можно каждую микросекунду. И на ассемблере - чтобы оптимально. А нефиг процессору простаивать, пусть делом занимается :-) - SciFi(12.05.2017 17:07)
- Хорош гнать. Есть пром. оборудование, у которого кнопки нажимаются "медленно и печально" раз в год. Там опрос через 100 мс применял + RC фильтр 20 кОм 1 мкФ. Там, где пользователь может до 15...20 раз/c нажать - не прокатит Ваш "чудо метод" - AU08(12.05.2017 17:15)
- Хз как в промоборудовании кнопки, а на обычные тактовые стараюсь сделать реакцию не медленнее 50мс. Выбешивае когда индусы делают говно невосприимчивое к коротким тычкам. Надо не просто тыкнуть, а еще и не быстрее чем! На посудомойке у меня вобще 1111111(244 знак., 12.05.2017 21:48)
- Я не гоню, я стебусь :-) - SciFi(12.05.2017 17:19)
- Я тоже :-) Но только я стебусь аргументативнее - бомж(12.05.2017 17:22)
- Так ведь, иногда надо что-то отличное от кнопок управления опрашивать, например, концевики. И быть уверенным, что концевик действительно сработал, а не помеха проскочила. - бомж(12.05.2017 17:14)
- Хорош гнать. Есть пром. оборудование, у которого кнопки нажимаются "медленно и печально" раз в год. Там опрос через 100 мс применял + RC фильтр 20 кОм 1 мкФ. Там, где пользователь может до 15...20 раз/c нажать - не прокатит Ваш "чудо метод" - AU08(12.05.2017 17:15)
- Ну да, можно каждую микросекунду. И на ассемблере - чтобы оптимально. А нефиг процессору простаивать, пусть делом занимается :-) - SciFi(12.05.2017 17:07)
- А у меня помехи есть. Про дребезг же я написал, поскольку опрос можно делать не только лишь через 10мс. Можно опрашивать значительно чаще :-) - бомж(12.05.2017 16:59)
- Мальчики и девочки, в качестве домашнего задания подумайте, почему опрос с периодом 20 мс устраняет проблему дребезга с длительностью 5 мс. Ну а про помехи - вам виднее, у меня их нет. - SciFi(12.05.2017 16:52)
- В момент нажатия кнопки (2 - 5 мс) она дребезжит. И без фильтрования этот дребезг будет считан, словно кнопка была нажата дважды, а то и больше раз. Мой наипростейший гениальный (не побоюсь этого эпитета:) алгоритм такой дребезг чётко фильтрует. бомж(153 знак., 12.05.2017 16:46 - 16:51)
- Просто я подозреваю, что тупо опрос каждые 20 мс без фильтрования работал бы так же железно. Но кто будет тестировать, чтобы всего лишь доказать мою правоту? :-) - SciFi(12.05.2017 16:33)
- Зато работает железно в индустриальных решениях. - бомж(12.05.2017 16:30)
- Тут уж каждый сам для себя решает. Но выглядит это экзотично и нетрадиционно. - SciFi(12.05.2017 16:16)
- За 10 мс состояние контактов устаканивается и можно считать, что кнопка нажата. Если же это была помеха, она отфильтровывается. Если просто опрашивать каждые 20 мс, можно эту помеху или звон словить. - бомж(12.05.2017 16:12)
- До конца не понял. Понял только, что опрашиваем каждые 10 мс, результат фильтра получаем каждые 20 мс, и фильтр видит только 2 последовательных значения. Уже какая-то экзотика получается. Кому это надо? Чем лучше, чем просто опрашивать каждые 20 SciFi(21 знак., 12.05.2017 16:04)
- Ладно, упростим для ясности: бомж(302 знак., 12.05.2017 15:51)
- Всё равно ничего не понятно, но ладно. - SciFi(12.05.2017 15:32)
- input[] содержит считанные входы. После вызова функции входы в input[] свободны от дребезга. В одном проекте я опрашиваю 96 кнопок и с помощью подобной функции "отфильтровываю" дребезг. бомж(210 знак., 12.05.2017 15:28)
- Чота с трудом понимаю мысль. Один проход ставит единички сэмпла, второй убивает эти единички новым сэмплом. Казалось бы, уйня с ненадежным исходом, но попробуем найти зерно. То есть в конце конца просто проверяется равенство двух последовательных Олдфаг(86 знак., 12.05.2017 20:08, )
- Функция вызывается каждые 10 мс. Когда функция == true, входные данные свободны от дребезга. Ещё раз извиняюсь, написал по-быстрому из памяти, но башка болит, мог ошибок наделать. Надеюсь, принцип всё ж понятен. бомж(586 знак., 12.05.2017 14:43 - 15:02)
- Зачем вот это: Apтём(234 знак., 12.05.2017 20:06)
- OUT = (OUT*(256-F0))/256 + F0*(IN=1), где argus98(480 знак., 12.05.2017 12:25)
- Как понять "...+ F0*(IN=1)" - не с минусом ли знак "=" перепутан? - MBedder(15.05.2017 17:05)
- Не перепутан. Эквивалент - ..+ F0*IN (где IN = 0 или 1). PS Считал, что (IN=1) будет понятнее. PPS argus98(355 знак., 15.05.2017 22:19 - 22:33)
- Наверно всё-таки перепутан. Наверно имелось ввиду +F0*(IN==1) - Ale3000(16.05.2017 05:28)
- Не перепутан. Эквивалент - ..+ F0*IN (где IN = 0 или 1). PS Считал, что (IN=1) будет понятнее. PPS argus98(355 знак., 15.05.2017 22:19 - 22:33)
- Как понять "...+ F0*(IN=1)" - не с минусом ли знак "=" перепутан? - MBedder(15.05.2017 17:05)
- Интегратор с насыщением. - sav6622_(12.05.2017 09:18, )
- Чем плох метод типа такого? Глубина регулируется, вычислительно прост. sav6622(176 знак., 12.05.2017 11:44)
- Гм. Вот так наверно if (cntr > (max Petrovich(94 знак., 12.05.2017 12:00, )
- Плохо что нет положительной обратной связи. Надо { out = true; cntr=max; } и { out = false; cntr=0; }, чтобы новый антидребезг начать с устойчивого состояния - Petrovich(12.05.2017 11:53, )
- Вот так и делаю давно и надёжно. По байту на кнопку, там помещается счётчик, бит состояния "нажато" и 2 бита событий "нажали" и "отпустили". Опрос раз в 10 мс, счётчик считает ++ 0,1,2..7,15,15.. -- 14,13..7,0,0.. Триггер Шмитта, да. События maik-vs(65 знак., 15.05.2017 16:56)
- Да, лучше ! - sav6622(12.05.2017 12:56)
- Триггер Шмитта! - SciFi(12.05.2017 11:55)
- Чем плох метод типа такого? Глубина регулируется, вычислительно прост. sav6622(176 знак., 12.05.2017 11:44)
- Изящный алгоритм есть по ссылке - AlexG(12.05.2017 08:36, ссылка)
- Делал на реверсивных счетчиках. Нажатое состояние при каждом опросе увеличивает состояние счетчика на единицу, отпущенное уменьшает. Выходной бит меняется, только если счетчик досчитал до максимума или до нуля. Yurasvs(56 знак., 12.05.2017 22:22 - 22:51)
- Был бы изящным, если бы настойчиво не требовал хоть какого-то дребезга :) - Petrovich(12.05.2017 10:03, )
- Не, зря я так, неразобравшись, это годный, изящный и безцикловый алгоритм, спасибо за наводку. - Petrovich(12.05.2017 15:21, )
- Оптимизация 80-го уровня. Для одного входа оч. наглядно задвигать значения в переменную и накладывать маску, чтобы обнаруживать N последовательных одинаковых значений. - SciFi(12.05.2017 08:50)
- Что фильтруем? Дребезг? Опрашивать с периодом больше времени дребезга - изящнее не придумаешь. - SciFi(12.05.2017 08:34)
- Да, дребезг, но нужно иметь управляемость. Опрос порядка 100Гц, но нужно иногда подфильтровывать и до 1 секунды. - michas(12.05.2017 09:14)
- у некоторых МК (например PIC) есть таймера с внешним сбросом. можно сделать как в примере по ссылке, только каждый новый дребезг сбрасывает таймер. Тогда по срабатыванию таймера (установившийся режим) фиксируем состояние входа. Время таймера Илья(53 знак., 12.05.2017 10:13, ссылка)
- Можно тупо менять период опроса и ничего не фильтровать. - SciFi(12.05.2017 09:20)
- Да, дребезг, но нужно иметь управляемость. Опрос порядка 100Гц, но нужно иногда подфильтровывать и до 1 секунды. - michas(12.05.2017 09:14)