Для иллюстрации.. синие и красное - это ну скажем на 0.01% отличающееся друг от друга частоты семплирования. 100 - типа порговое значение. Просто для иллюстрации/примера. За счет алиасинга пороговое значение будет достигаться в алгоритме "+1/-1 от семпла" фактически в непредскзуемое время.
На синем - больше было не учтенных выбросов 1. А на красном больще не учтенных выбросов 0. Сделать оверсеплинг для дребезга, где фактическая частота может быть десятки МГц.. это не возможно да и не нужно.
Я диаграммой показывал именно переходной процесс и то, что семплирование с фикисрованной частотой с непрерывным интегрированием результата какого либо смысла не имеет. Поскольку результаты плавают и ловить какое то определенное место в промежутке переходного процесса все одно не выдет таким способом. Если требуется ловить именно отсутиве дребезга в течении какого то времени. То так и надо писать. Но тогда лучше (IMHO):
И пороговое значение понятнее и проще. А если в счетчике учитыватеся и переходной процесс и его окончание считается как пороговое значение счетчика, то вермя "нажата кнопка" будет считаться от начала переходного процесса. И будет случаныйм образом плавать, поскольку в порог включить придется и семплы после переходного и семплы внутри переходного. А они случайны (количестов 0 != количеству 1).
Аналогично можно ловить отжатие кнопки. А если требуется просто ловить "кнопка нажата или нет", то проще просто брать сэмплы (период скажем 500ms) и считать семп за резутьтат "нежата/не нажата" в типичной задаче типа "зажатая кнопка увеличивает громкость".
Ровно как описан алгоритм создаем программный счетчик, который инкриминируется, если кнопка нажата и декриментируется если кнопка отжата счетчик будет возврастать при каждом опросе нажатой кнопки (за 1 секунду семплирования с периодом скажем 20ms это будет +1000/20). И как это неперывно увеличивающееся значние используется в "флаг, который принимает свое значение в зависимости от пересечения верхнего или нижнего установленного порога" = ?.
Ровно как описано в исходном посте. А если автор чего то "подразумевал" (типа порог.. обнуляем.. учитываем и т.д.) так я не ясновидец и додумывать не буду что он подразумевал.
Я могу догадываться что и зачем имелось в виду. Но если описание алгоритма такое каое есть, то ну просто сложно удержаться от..
У вас в примере магическим образом частотад дребезка это константа, совпадающая с частотой опроса. А проблемы алиасинга так же магически "частоту опроса GPIO надо приподнять".
Если снять осцилограмму с кнопки в момент ее нажатия/отпускания (хорошим осцилографом с малой емкостю и большим входным сопростивлением). То будет видна характерная картина. Собствено это и есть "дребез контакта". наберите "дребез контакта осциллограмма" в поиске. Там будут картинки примера дребезка на осцилографе.
В зависимости от физического исполнения "кнопки", емкости на входa, входного сопротивления входа и пр. может быть разной формы.. разной длитетельности (может до 5-10ms).
По-моему, там просто случайные 0 и 1, приходящие на порт МК.
Не приходящие, а считываемые с порта (я специально это отметил). А приходит напряжение/ток сложной формы. "Цировой сигнал" это абстракция. Почему то "писатели под ардуино" про это забывают/не знают. А потому удивляются "а почему не так работает как я думал".
4-й курс (времена динозавов правда).. схемотехника.. лаба посвященная этому. "Что бы запомнили". Для меня электроника и схемотехника - хоби. Но запомнил жжж..
Считывание состояния кнопки по прерываниям таймера, это один из стандартных методов. Минус этого метода только в том, что он требует относительно много процессорного времени.
просто отмечу (на правах рассуждения) Процессорное время в обработке события от нажатия на кнопку (человеком) не самый определяющий критерий. И я критиковал очень конкретный алгоритм со "счетчиком" чего то и измением этого счетчика по опросу. А не способ "опроса" вообще.
Квадратурный энкодер обрабатывается как две кнопки.
К слову, квадратурный энкодер программный то же работать не будет, если задача не "крутилка громкости", а "точная координата оси станка после часа его работы". Для таких целей есть аппартаный режим счетчиков (в STM32 например).
В данном случае речь явно о "крутилке громкости", то есть об органах ручного управления, с низкой скоростью событий.
Для "крутилки громкости", зачастую достаточно в фоновом процессе (прерывание по таймера раз в 50ms) тупо считывать состояние и риск возникновения дребезга в момент считывания не учитывать.. кнопки/энкодеры типа "крутилки громкости" - интерактивны. Щелчком больше/меньше значения не имеет вообще.
первая строка значение на входе контроллера (*) вторая строка - считываение в период опроса. третья строка - типа счетчик 000001010101010101010100111101000101111111111100111011111111111..0100100001110000000 0____1____0____1____1____1____0____1____0____0____1..0____1____1____0____ __ -1____0____-1____0____1____2____1____2___-1____-2___-1__.. 345__346__347__346___
Ну и что конретно даст значение счетчика для анализа по предложенному...
программный счетчик, который инкриминируется, если кнопка нажата и декриментируется если кнопка отжата.
Только давайте на ходу не придумывать доп условия :) Преврашая алгоритм в лапшу и набор заплат :) Не надо изобретать велосипед. програмные алгоритмы (как через прерывания, так и через опрос под разные цели) подавления дребезга - это динозавры, которым много десятилетий. Все придумано до нас. Честно говоря, смысла этой статьи не понимаю.
(*) - условно. значени если бы опрашивали порт в данный момент. Тема для превращения в 0/1, фактически аналогового сигнала дребезка, не проста. Но можно не вдаваться и считать 0/1.
программный счетчик, который инкриминируется, если кнопка нажата и декриментируется если кнопка отжата
Количество "0" и "1" на опросе кнопки могут встречатся вообще в любых сочетания при попадании на диапазон "дребезга". И период опроса вообще на это не влияет. Поскольку "дребез" это в общем случае "случайный" период (упрощенно изображают на графиках меандром. но это не меандр).
Я так, понимаю, что автор рассматирвал вопрос сложности определения момента "нажатия" на кнопку как фиксации события "нажата". А не просто определения факта "нажата/не нажата"
который инкриминируется, если кнопка нажата и декриментируется если кнопка отжата
Получите неопределенное значение. Потому что, момент опроса и момент переходных процессов при нажатии (дребезг) вообще могут не совпасть.
Очень типичная ошибка "опросом" + "счетчик". Например, так же нельзя опросом энкодер считывать. Если конечно интересует не "качественные" показатели (типа крутилка громкости), а накомительное значение (ось станка и пр.).
Мне рекомендовали сменить тип нагрузки. Сменил.. признаки воспаления фасеток позвоночника ушли. Локти не болят.
Это не я решил, так утверждают примерно все источники, которые я читал
Ссылки. pls. Только не надо путать тяжелую атлетику (хотя там не столь высокий травматизм) с обычными упражнениями на тренажерах в зале.
И я бы вычеркнул из статистики эголифтеров. Хочется иногда глаза закрыть, что бы не видеть как себя калечат пытаяст продемонстрировать (в позе какающей собаки) окружающим "какой я могу вес на штанге потянуть" .
Постоянные монотонные нагрузки на позвоночник (фасетки в частности) и руки в характерных для плавания (вольных стиль) движених не полезны ни для позвоночника ни для суставов. Так что нифига плавание не "безопастно" в перспективе.
За 2 года все это постепенно стало проходить. И ничего нового не добавилось. Хотя в зал хожу те же 2-3 раза в неделю и на 2 часа за раз.
Почему Вы решили что это "травмоопасный спорт" - я не знаю.
Лет 10 назад купил кучку (40штук) таких же излучателей (по случаю) и собирался сделать аналогичное. Но в итоге так и не понял, а для чего лично мне это нужно (практическое примененение) и не стал возится. Все же делать, что бы тольок просто сделать этого лично мне не достаточно. Тем более, что тема в целом не нова и такое уже делали в DIY.
Но с очень большим интересом прочитал Вашу статью. Спасибо за интересный опыт.
А какая у Вас была практическая цель. Ну для чего это можно приспособить? (музеи и пр.. это понятно. Я именно для "домашнего" использования имею в виду)
А то, что до сих пор в аэпропорт самолет нельзя проносить жидкости, купленные не в аэропорту... Если посмотреть на истоки/причны этого ограничения (можно найти отчеты и даже с фотографиями). ДЕбилы с бутылочками, которые на борту самолета хотели сделать что то взрывающеся. Судя по отчету у них все равно ничего бы не вышло. Но.. теперь воду только в порту и за 300..500% нартутки на цену.
Если в этот момент вместо "Отмена" жмякнуть "ОК", то тоже можно было подключить подписку.
не в тему STK и подписок , но.. Опсосам теперь и подверждения не нужны.
Мне вот недавно на тарифе для модема сняли за услугу "развлечение" (МТС). Чем они собирались модем развлекать - не знаю (причем, в списке подключеных услуг ее не было). После жалобы в чате - деньги вернули. Но кто то наверняка и не заметил. "десять старушек - рубль".
Так что МТС я воспринимаю с некоторй брезгливостью. Как мелкого жулика/неуклюжего вора карманника. За руками которого нужно следить.
Такое же ощущение и на МТС банк распространяется. Понятно, что как бы разное. Но ирационально и то и другое бренд/клеймо МТС.
Да я так и понял. Просто в сочетании с "мифическими свойствами" в предыдущем предложение и этой фразой, может у тех кто считает, что SIM карта это магия вызвать еще большую веру в магию :)
А так в сущьности там все просто и примитивно.. В первую очередь из за размеров приложений. Ну 2..3тыс строк кода Java.. превращающиеся в 12-16Кб загружаемого. Да и такие то монстры были редкостью. EMV платежное приложение (полноценное) умещается в 2100 строк кода. А максимальное STK в ~1000 строк писал.
И вообще, время STK приложений ушло с кнопочными телефонами. RIP. С концами ушло. Спроси у кого, как в смартфоне добраться до STK меню - мало кто вообще скажет что это такое.
Особой документации на это нет, поэтому зачастую симке приписывают разные мифические свойства (и потом рассказывают про «слежку через SIM-карты»).
Да ну.. вот прям нет :) 10 лет назад даже в открытом доступе найти можно все было (когда я этим плотно занимался)
SIM-карта по запросу оператора может делать многое: выполнять AT-команды, отправлять служебные SMS, посылать и принимать вызовы,
Ээ.. Карта ISO7816 может принимать APDU команды. Отправляет SMS и пр. не карта. Вы имели в виду sim toolkit.. Но все равно фраза звучит коряво и режет глаз.
Цены на железки простое не адекватные. Наверное потому что это для "cool хакеров" предназначено :) А так, перехватчик проткола ISO7816 T0 и T1 делается на STM32F108 практически без обвязки. А имея самодельный перехватчик ISO7816, автоматичски получаем эмулятор. По факту, эмуляторы карт то же не сложные. Много кода в апплетах JavaCard не бывает (просто не лезет).
Глядя на череду похожих (страшных) женских лиц на улице, мне кажется что создатели мультика "В синем море, в белой пене…" (где девушка с губами рыбы) что то знали.
И все эти женщины с рыбьими глазами/губами и странными скулами почему то считают что это красиво.
не корректно написал. НЕ на входе. А считываемое с входа в программе.
Для иллюстрации.. синие и красное - это ну скажем на 0.01% отличающееся друг от друга частоты семплирования. 100 - типа порговое значение. Просто для иллюстрации/примера. За счет алиасинга пороговое значение будет достигаться в алгоритме "+1/-1 от семпла" фактически в непредскзуемое время.
На синем - больше было не учтенных выбросов 1. А на красном больще не учтенных выбросов 0.
Сделать оверсеплинг для дребезга, где фактическая частота может быть десятки МГц.. это не возможно да и не нужно.
там где "..." - там закончивается.
Я диаграммой показывал именно переходной процесс и то, что семплирование с фикисрованной частотой с непрерывным интегрированием результата какого либо смысла не имеет. Поскольку результаты плавают и ловить какое то определенное место в промежутке переходного процесса все одно не выдет таким способом.
Если требуется ловить именно отсутиве дребезга в течении какого то времени. То так и надо писать.
Но тогда лучше (IMHO):
"счетичк нажатия" += 1, если семп == "1"
"счетичк нажатия" = 0, если семп == "0"
счетичк "нажатия" > порога (устоявшийся процесс) -> сигнал о нажатой кнопке + "счетичк нажатия" = 0.
И пороговое значение понятнее и проще. А если в счетчике учитыватеся и переходной процесс и его окончание считается как пороговое значение счетчика, то вермя "нажата кнопка" будет считаться от начала переходного процесса. И будет случаныйм образом плавать, поскольку в порог включить придется и семплы после переходного и семплы внутри переходного. А они случайны (количестов 0 != количеству 1).
Аналогично можно ловить отжатие кнопки.
А если требуется просто ловить "кнопка нажата или нет", то проще просто брать сэмплы (период скажем 500ms) и считать семп за резутьтат "нежата/не нажата" в типичной задаче типа "зажатая кнопка увеличивает громкость".
Ровно как описан алгоритм создаем программный счетчик, который инкриминируется, если кнопка нажата и декриментируется если кнопка отжата
счетчик будет возврастать при каждом опросе нажатой кнопки (за 1 секунду семплирования с периодом скажем 20ms это будет +1000/20).
И как это неперывно увеличивающееся значние используется в "флаг, который принимает свое значение в зависимости от пересечения верхнего или нижнего установленного порога" = ?.
Ровно как описано в исходном посте. А если автор чего то "подразумевал" (типа порог.. обнуляем.. учитываем и т.д.) так я не ясновидец и додумывать не буду что он подразумевал.
Я могу догадываться что и зачем имелось в виду.
Но если описание алгоритма такое каое есть, то ну просто сложно удержаться от..
У вас в примере магическим образом частотад дребезка это константа, совпадающая с
частотой опроса.
А проблемы алиасинга так же магически "частоту опроса GPIO надо приподнять".
Мне больше нечего сказать на это..
Если снять осцилограмму с кнопки в момент ее нажатия/отпускания (хорошим осцилографом с малой емкостю и большим входным сопростивлением). То будет видна характерная картина. Собствено это и есть "дребез контакта".
наберите "дребез контакта осциллограмма" в поиске. Там будут картинки примера дребезка на осцилографе.
В зависимости от физического исполнения "кнопки", емкости на входa, входного сопротивления входа и пр. может быть разной формы.. разной длитетельности (может до 5-10ms).
Не приходящие, а считываемые с порта (я специально это отметил). А приходит напряжение/ток сложной формы.
"Цировой сигнал" это абстракция. Почему то "писатели под ардуино" про это забывают/не знают. А потому удивляются "а почему не так работает как я думал".
4-й курс (времена динозавов правда).. схемотехника.. лаба посвященная этому. "Что бы запомнили".
Для меня электроника и схемотехника - хоби. Но запомнил жжж..
просто отмечу (на правах рассуждения)
Процессорное время в обработке события от нажатия на кнопку (человеком) не самый определяющий критерий.
И я критиковал очень конкретный алгоритм со "счетчиком" чего то и измением этого счетчика по опросу.
А не способ "опроса" вообще.
К слову, квадратурный энкодер программный то же работать не будет, если задача не "крутилка громкости", а "точная координата оси станка после часа его работы". Для таких целей есть аппартаный режим счетчиков (в STM32 например).
Для "крутилки громкости", зачастую достаточно в фоновом процессе (прерывание по таймера раз в 50ms) тупо считывать состояние и риск возникновения дребезга в момент считывания не учитывать.. кнопки/энкодеры типа "крутилки громкости" - интерактивны. Щелчком больше/меньше значения не имеет вообще.
первая строка значение на входе контроллера (*)
вторая строка - считываение в период опроса.
третья строка - типа счетчик
000001010101010101010100111101000101111111111100111011111111111..0100100001110000000
0____1____0____1____1____1____0____1____0____0____1..0____1____1____0____
__ -1____0____-1____0____1____2____1____2___-1____-2___-1__.. 345__346__347__346___
Ну и что конретно даст значение счетчика для анализа по предложенному...
Только давайте на ходу не придумывать доп условия :) Преврашая алгоритм в лапшу и набор заплат :)
Не надо изобретать велосипед. програмные алгоритмы (как через прерывания, так и через опрос под разные цели) подавления дребезга - это динозавры, которым много десятилетий. Все придумано до нас.
Честно говоря, смысла этой статьи не понимаю.
(*) - условно. значени если бы опрашивали порт в данный момент. Тема для превращения в 0/1, фактически аналогового сигнала дребезка, не проста. Но можно не вдаваться и считать 0/1.
тогда зачем фраза
Количество "0" и "1" на опросе кнопки могут встречатся вообще в любых сочетания при попадании на диапазон "дребезга". И период опроса вообще на это не влияет. Поскольку "дребез" это в общем случае "случайный" период (упрощенно изображают на графиках меандром. но это не меандр).
Я так, понимаю, что автор рассматирвал вопрос сложности определения момента "нажатия" на кнопку как фиксации события "нажата". А не просто определения факта "нажата/не нажата"
Ну ну..
Ключевая концептуальная ошибка: "опрос"+"счетчик".
Получите неопределенное значение. Потому что, момент опроса и момент переходных процессов при нажатии (дребезг) вообще могут не совпасть.
Очень типичная ошибка "опросом" + "счетчик".
Например, так же нельзя опросом энкодер считывать. Если конечно интересует не "качественные" показатели (типа крутилка громкости), а накомительное значение (ось станка и пр.).
Т.е. ссылок у вас нет. время тратить не хотите. "Потому что это не требует доказательств" (типа common sense)
Угу.. а кто то в бассейне подскользнулся и разбил голову..
Так себе вариатнты доводов однако.
Собственно на этой фразе диалог можно и закончить :)
Т.е. тему не изучали и вообще не в курсе. Просто "здравый смысл" и убежденность.
https://www.youtube.com/watch?v=sJ3yqzLR85w
Мне рекомендовали сменить тип нагрузки. Сменил.. признаки воспаления фасеток позвоночника ушли. Локти не болят.
Ссылки. pls.
Только не надо путать тяжелую атлетику (хотя там не столь высокий травматизм) с обычными упражнениями на тренажерах в зале.
И я бы вычеркнул из статистики эголифтеров.
Хочется иногда глаза закрыть, что бы не видеть как себя калечат пытаяст продемонстрировать (в позе какающей собаки) окружающим "какой я могу вес на штанге потянуть" .
Лет 15 плавал 2-3 раза в неделю по 2-3 км за раз.
2 года назад перешел в тренажерный зал (железо) потому что:
Протрузия (небольшая) и артроз фасеточных сутавов позвоночника в поясничном отделе.
Воспаление хроническое локтевых суставов (эпикондилит).
Признаки износа (МРТ) сухожилий надостной мышцы.
Постоянные монотонные нагрузки на позвоночник (фасетки в частности) и руки в характерных для плавания (вольных стиль) движених не полезны ни для позвоночника ни для суставов.
Так что нифига плавание не "безопастно" в перспективе.
За 2 года все это постепенно стало проходить. И ничего нового не добавилось.
Хотя в зал хожу те же 2-3 раза в неделю и на 2 часа за раз.
Почему Вы решили что это "травмоопасный спорт" - я не знаю.
Глобус Москвы и за МКАД живут люди с песьими головами.
Не обязан весь мир знать широко известную в узких кругах москвичей терминологию.
Лет 10 назад купил кучку (40штук) таких же излучателей (по случаю) и собирался сделать аналогичное.
Но в итоге так и не понял, а для чего лично мне это нужно (практическое примененение) и не стал возится.
Все же делать, что бы тольок просто сделать этого лично мне не достаточно. Тем более, что тема в целом не нова и такое уже делали в DIY.
Но с очень большим интересом прочитал Вашу статью. Спасибо за интересный опыт.
А какая у Вас была практическая цель. Ну для чего это можно приспособить?
(музеи и пр.. это понятно. Я именно для "домашнего" использования имею в виду)
А то, что до сих пор в аэпропорт самолет нельзя проносить жидкости, купленные не в аэропорту...
Если посмотреть на истоки/причны этого ограничения (можно найти отчеты и даже с фотографиями). ДЕбилы с бутылочками, которые на борту самолета хотели сделать что то взрывающеся. Судя по отчету у них все равно ничего бы не вышло. Но.. теперь воду только в порту и за 300..500% нартутки на цену.
https://habr.com/ru/articles/795217/
не в тему STK и подписок , но..
Опсосам теперь и подверждения не нужны.
Мне вот недавно на тарифе для модема сняли за услугу "развлечение" (МТС). Чем они собирались модем развлекать - не знаю (причем, в списке подключеных услуг ее не было). После жалобы в чате - деньги вернули. Но кто то наверняка и не заметил. "десять старушек - рубль".
Так что МТС я воспринимаю с некоторй брезгливостью. Как мелкого жулика/неуклюжего вора карманника. За руками которого нужно следить.
Такое же ощущение и на МТС банк распространяется. Понятно, что как бы разное. Но ирационально и то и другое бренд/клеймо МТС.
Да я так и понял.
Просто в сочетании с "мифическими свойствами" в предыдущем предложение и этой фразой, может у тех кто считает, что SIM карта это магия вызвать еще большую веру в магию :)
А так в сущьности там все просто и примитивно.. В первую очередь из за размеров приложений.
Ну 2..3тыс строк кода Java.. превращающиеся в 12-16Кб загружаемого.
Да и такие то монстры были редкостью. EMV платежное приложение (полноценное) умещается в 2100 строк кода. А максимальное STK в ~1000 строк писал.
И вообще, время STK приложений ушло с кнопочными телефонами. RIP.
С концами ушло. Спроси у кого, как в смартфоне добраться до STK меню - мало кто вообще скажет что это такое.
Да ну.. вот прям нет :)
10 лет назад даже в открытом доступе найти можно все было (когда я этим плотно занимался)
Ээ.. Карта ISO7816 может принимать APDU команды. Отправляет SMS и пр. не карта. Вы имели в виду sim toolkit.. Но все равно фраза звучит коряво и режет глаз.
Цены на железки простое не адекватные. Наверное потому что это для "cool хакеров" предназначено :)
А так, перехватчик проткола ISO7816 T0 и T1 делается на STM32F108 практически без обвязки.
А имея самодельный перехватчик ISO7816, автоматичски получаем эмулятор. По факту, эмуляторы карт то же не сложные. Много кода в апплетах JavaCard не бывает (просто не лезет).
Глядя на череду похожих (страшных) женских лиц на улице, мне кажется что создатели мультика "В синем море, в белой пене…" (где девушка с губами рыбы) что то знали.
И все эти женщины с рыбьими глазами/губами и странными скулами почему то считают что это красиво.