Тёмный
No video :(

STM32CubeIDE. Алгоритмы реализации борьбы с дребезгом кнопок 

NR.electronics
Подписаться 19 тыс.
Просмотров 7 тыс.
50% 1

Новое видео по практической работе в среде STM32CubeIDE. Сегодня глубоко рассматриваем: возможные причины появления дребезга, какие графики напряжений ему соответствуют, какие алгоритмы бывают по решению этой проблемы и разработку идеального алгоритма по борьбе с дребезгом на практике - гистерезисного варианта.
Напишем программу и отладим её работу на МК STM32F103R отладочной платы Nucleo64.
00:06 - Начало
00:10 - Теоретические аспекты возникновения дребезга кнопки
01:57 - Графики напряжений дребезга
07:06 - Наиболее популярные алгоритмы борьбы с дребезгом
11:59 - Решение идеального алгоритма (гистерезисного) на практике в STM32CubeIDE
Вы можете помочь каналу Яндекс-деньги:
money.yandex.r...

Опубликовано:

 

29 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 98   
@zheigurov
@zheigurov 4 года назад
Молодец! Очень просто и доступно для тех кто только начинает заниматься электроникой.
@NRelectronics
@NRelectronics 4 года назад
Я как раз и стараюсь, для тех кто только начинает заниматься программированием, или продолжает уже, во всех нюансах стараюсь раскрыть тему. Не забывайте про лайки ;-)
@statstopfinish
@statstopfinish 4 года назад
Все хорошо,лайк как всегда. Но поработайте со звуком , сильно задавлен . Приходится на максимум все накручивать
@NRelectronics
@NRelectronics 4 года назад
Спасибо за обратную связь! Подкрутим))
@user-nr2mg1pg6v
@user-nr2mg1pg6v 4 года назад
Всё правильно... С самого начала!!!
@NRelectronics
@NRelectronics 4 года назад
Так вот же!)
@Ma_X64
@Ma_X64 4 года назад
Я обычно использую сразу структуру, в которой есть счётчик антидребезга, счётчик длительности состояния, флаги состояний. Позволяет достаточно просто переносить это из проекта в проект. Конденсаторы параллельно ставить, говорят, не очень хорошо. Выгорают контактные поверхности постепенно. Лучший вариант -- использовать резиновые кнопки с графитовым напылением. У них нет дребезга совсем.
@NRelectronics
@NRelectronics 4 года назад
Спасибо большое за совет о такой кнопки.
@alexsikorsky
@alexsikorsky 4 года назад
Решение интересное но спорное. Сильно проще дополнить схему конденсатором и парой резисторов которые подавят и дребезг и любые разумные наводки аппаратно.
@NRelectronics
@NRelectronics 4 года назад
Оно сложное и работает) а когда нет возможности поставить резистор и конденсатор? Тогда только программное решение. Нужно уметь решать проблемы разными инструментами ;-)
@alx123
@alx123 4 года назад
Благодарю! DrebezgHandler -> DebounceHandler (лучше новое слово выучить - хорошо запомнится, чем мешать транслит и английский, а то я видел проект, в котором уже 20 лет пишут employ_oklad_id, get_user_vozrast).
@NRelectronics
@NRelectronics 4 года назад
Спасибо) Зато веселит))
@sergatmel8242
@sergatmel8242 4 года назад
Это конечно Круто ! Но для чего так усложнять то ? Вот вы анализируете состояние кнопок в постоянном while. На практике такое никому не нужно. Делаете опрос состояния кнопок Один раз по прерыванию таймера, с интервалом 20 - 50 mS. Вполне Отличный, Стабильный и проверенный на практике вариант. Попробуйте сами. П.С. Сам когда-то начинал с методики "сдвиговых регистров", когда заполниться одним значением - значит кнопка "уверенно" нажата или отжата. ツ
@NRelectronics
@NRelectronics 4 года назад
Я в видео говорил про этот вариант, и возможные последствия, срабатывания от однократной помехи от соседних дорожек на плате. Вариант так то хороший, если плата на отлично трассирована. Мой метод надежный не смотря ни на что, иногда это было критически важным. Для включения светодиоды хватит пары if else.
@dmitryprilepo8925
@dmitryprilepo8925 4 года назад
@@NRelectronics Согласен, что надежный. Но что делать если кнопка удерживалась? Счетчик может насчитать 500, 1000 и более? Отпускаться кнопка будет очень долго! Может быть нужно ограничение по счету в зависимости от частоты опроса?
@NRelectronics
@NRelectronics 4 года назад
В удержанном виде отсчитает весь счет до переменной - count, дольше количества импульсов вы точно не продержите, а если продержите, то счет пойдет заново. Зайдите в отладчик программы и поэкспериментируйте с программой, как она себя ведет, для этого урок и создан, все станет ясно.
@dmitryprilepo8925
@dmitryprilepo8925 4 года назад
@@NRelectronics спасибо
@Viktor_V.
@Viktor_V. 16 дней назад
@@NRelectronics Наверное под "Один раз по прерыванию таймера, с интервалом 20 - 50 mS" имелось ввиду настроить прерывание отрабатывающее раз в каждые 20 млс. И уже там делать весь ваш цикл с приращением переменных и достижения крупной цифры. В любом случае хорошо бы понять почему не используется прерывание. Может ролик какой с объявлениями - мол прерывания хуже потому, то.... Для тех кто не разбирается, это было бы очень полезно. Пока же не понятно чем основной цикл лучше прерываний.
@SaihoS1
@SaihoS1 4 года назад
Извините, но вы ошибаетесь на счет гистерезиса. В вашей реализации его нет. Характерной особенностью гистерезиса является различие уровней включения и выключения по входному сигналу, причем первый обязательно больше второго. Поэтому переключения происходят лавинообразно, почти мгновенно. В вашей же реализации сигналом является разность продолжительностей нахождения кнопки в разомкнутом и замкнутом состоянии (примерно конечно, на самом деле продолжительность нахождения напряжения выше и ниже порогового напряжения входа микроконтроллера, а это не то же самое). Если эти продолжительности равны, то счетчик статистически колеблется около текущего значения, но остается постоянным. Если бы был гистерезис, то такого не могло бы произойти. Аналог вашей программы в виде электронных компонентов это два генератора тока включенных последовательно от питания к земле и связанных таким условием, что сумма модулей их токов в каждый момент времени равна постоянной величине. Между их средней точкой и землей параллельно подключены конденсатор и стабилитрон с напряжением стабилизации равным чуть больше напряжения питания. Теперь осталось завершить аналогию сказав что заряд конденсатора это значение счетчика. Верхний генератор наполняет счетчик, а нижний опустошает. Стабилитрон работает в обе стороны, не давая счетчику уйти ниже ноля или подняться выше какого-то уровня (у вас 100000). Сумма модулей токов генераторов это скорость опроса входа микроконтроллера (отсчетов в секунду). Конденсатор (счетчик) меняет свое напряжение (содержимое) со скоростью прямо пропорциональной разности токов генераторов (разности чисел отсчета нолей и единиц). При их равенстве напряжение на конденсаторе (значение счетчика) не меняется. Внести гистерезис в программу можно, но для этого следует, например, если кнопка считается нажатой и входное значение ноль, то пытаться вычетать два из счетчика (с защитой ухода ниже ноля), а если на входе единица, то прибавлять только единицу. Тогда переключение произойдет когда продолжительность единицы вдвое превысит продолжительность ноля. Переключение произойдет очень быстро, как и положено при гистерезисе. После же переключения все должно быть наоборот - пытаемся прибавлять двойку, а вычитаем только по единичке. И никто не запрещает сделать соотношение не 1:2, а например 1:10, тогда гистерезис будет срабатывать и того резче. И еще. На 13:50 вы говорите что аналоговый фильтр на кнопке срабатывает медленно. На вашей плате постоянная времени заряда конденсатора 0,5 мс, а разряда 0,01 мс (100 нФ и 4,7кОм+100 Ом). Время "заряда" вашего счетчика "на глаз" около 10 мс. На мой взгляд, в STM правильно их выбрали. Кроме того, вам следует для экспериментов выбрать какой-нибудь другой вход микроконтроллера, на котором нет аппаратного фильтра, прицепить туда кнопку и написать простенькую программу записывающую дребезг контактов чтобы понимать какие примерно его временные параметры и потом осознанно выбрать частоту опроса входного пина. Поллинг конечно нужно убирать. А еще лучше снять осциллограмму встроенным АЦП, который позволяет записать миллион отсчетов в секунду. Обычно время переходного процесса не превышает десяток миллисекунд, но верить мне на слово не следует. Тем более что 10 мс например для энкодера (ручной крутилки) это слишком много и будут пропуски шагов. Нужно стремиться по возможности уменьшать время срабатывания. Если что-то не понятно, то задавайте вопросы. Потратил довольно не мало времени на писанину и хотелось бы чтобы из этого вышел какой-то толк. Кстати, посмотрите микропроцессоры TI, например TMS320f28027 Это я не к тому что рекомендую их осваивать, а чтобы посмотрели как у них реализован аппаратный фильтр дребезга. Просто как пример рабочего решения от именитой фирмы. Естественно это можно и в софте повторить. Может вам понравится.
@SaihoS1
@SaihoS1 4 года назад
Небольшое дополнение. Поскольку излагал навскидку, то допустил неточность. Соотношение 1:2 менять не стоит. Лучше при изменении распознанного состояния с "не нажато" в "нажато" сразу сбрасывать счетчик в 0, а при обратном переходе заносить в него верхний предел (тот что сейчас у вас 100000). Т. е. гистерезис должен срабатывать по полной программе, сразу переключать в противоположное устойчивое состояние. Иначе время реакции на первое переключение и последующие будут различаться (если счетчик не будет успевать заполняться/сбрасываться до конца), а это не очень красиво.
@NRelectronics
@NRelectronics 4 года назад
я освобожусь от работа и мы с вами вместе все разберем, хорошо?
@SaihoS1
@SaihoS1 4 года назад
@@NRelectronics Как вам будет удобно. Спешки нет.
@mistergrinch7342
@mistergrinch7342 4 года назад
Спасибо за уроки. включение диода происходит по переменной result
@NRelectronics
@NRelectronics 4 года назад
да
@mistergrinch7342
@mistergrinch7342 4 года назад
в функции 4 варианта ветвления,а return в двух прописан ,что то непонятно.
@NRelectronics
@NRelectronics 4 года назад
Так у нас два варианта устойчивого состояния, не три, не четыре если что ;-)
@mistergrinch7342
@mistergrinch7342 4 года назад
при выходе из ветвления надо точно задать что возвращать 0 или 1.
@NRelectronics
@NRelectronics 4 года назад
выложу попозже код с корректировкой, спасибо.
@statstopfinish
@statstopfinish 4 года назад
Жду уроков по FreeRTOS.
@NRelectronics
@NRelectronics 4 года назад
Все может быть ;-)
@user-lc8em4gs9m
@user-lc8em4gs9m 11 месяцев назад
Добрый день! Прошил STM по этому алгоритму. Подключил логический анализатор к кнопке. Другой канал анализатора к светодиоду. Передний фронт есть задержка, задний нет. При нажатии и так очень редко дребезг на контактах. А при отжатии как раз проскакивает дребезг. Так наверно не должно быть???
@NRelectronics
@NRelectronics 11 месяцев назад
Добрый день. Так на кнопке будет всегда дребезг, мы от него программно избавляемся.
@ajdarseidzade688
@ajdarseidzade688 4 года назад
Можно я тоже напишу свое мнение и пр.? 1. Очень благодарен, что Вы (автор канала и видео) делаете такое дело и снимаете видео по данной теме. Пока что просто хотел хотя бы выразить благодарность на словах. 2. Лучше не обновлять STM32CubeIDE - как если попросит сама программа. На данный момент по крайней мере. А лучше скачать новую версию с сайта (сейчас на 04.05.2020 это 1.3.1) и установить заново. Причем она установится по соседству со старой и могут запускаться и существовать 2 разные STM32CubeIDE (!). У обоих будут вроде одинаковые версии, но по-разному они себя ведут. По крайней мере встроенный CubeMX (да и некоторые др. вещи). Это вот такое мое мнение и наблюдение. 3. Мне кажется, что МК STM32F103 уже сильно устарел уже и не стоит на нем много останавливаться и лучше перейти на более новые семейства. Для перспективы так сказать. Ведь обидно будет, что созданный с трудом урок быстро станет устаревшим. А также для этих новых семейств как раз и нет то особенно уроков и пр. в Инете. Пока вот все, что хотел написать. Еще раз благодарен автору канала.
@NRelectronics
@NRelectronics 4 года назад
Конечно можно и нужно писать свое мнение, главное объективно и конструктивно. Позвольте и я напишу пару мыслей о вашем комментарии: 1. Спасибо за слова похвалы. Я эти видеоуроки делаю в свободное время и бесплатно. Плохо, что люди ставят дизлайки и не понимают всего этого. Вы также можете поддержать канал не только словами, но у меня есть все необходимые отладки на работе и ни от кого пока ничего прошу, так что даже не намекайте :-) 2. Когда я выпускал видео была последняя на сайте была 1.3.0, вы это видели и до 1.3.1 она легко сама обновляется, нет смысла держать две софтины и путаться в двух рабочих пространствах... Зачем? И на сколько они будут себя вести по разному? Вы узнавали что добавили 1.3.1 по сравнению с 1.3.0?)) 3. Сложно назвать ваш комментарий объективным с цифрой 3... Обьясню почему. Да, STM32F103 не молодой во все МК, но вот незадача, я хотел первые два видео снять на G071RB , новейший МК! А тут случился облом, у него нет SWV и SWO - вот и на чем снимать первые два видео? Взял старый добрый F103, к тому же плата BluePill с этим же МК является самой продаваемой отладкой на Алиэкспресс - это значит ему еще очень далеко на покой))) А алгоритмы они всегда одинаковы и мои видео не устареют, не переживайте ;-)
@ajdarseidzade688
@ajdarseidzade688 4 года назад
@@NRelectronics 2. Насчет поддержки, если на то пошло, - я уже в этом месяце чуть более 2000 р.(жена увидит - дураком назовет :) (это мое дело вообще-то) на 2-х др. каналах задонатил так что пока я пас тут. Но я Вас понимаю каково снимать уроки и видео фактически запросто так и нужна тут поддержка. Такие каналы не рассчитаны на многомиллионную аудиторию и соотв. заработки на Ютубе от этого. И к тому же не так просто их и снимать как те "многомиллионные" шоу-видео. О галкинах/катастрофах/вирусах и пр. 1. Ошибся (извиняюсь) - была у меня версия 1.0.1 (так уже точно скорее всего) и обновилась она до 1.3.0 и смотрю стал глючить CubeMX. Пишет что у него версия 5.6, а по факту оказалась версия 5.1 (!), а она не может открывать проекты версии 5.6. А в версии 5.6 есть 2 больших отличия - новый репозиторий и самое главное возможность генерации проекта именно для STM32CubeIDE только в 5.6 -ой версии. Я установил новую версию 1.3.0 STM32CubeIDE и она установилась параллельно старой и по соседству и стала правильно теперь работать. Были и др. различия замечены мною. 3. Конкретно тогда напишу - вот есть же у вас BluePill на STM32F401 и ведь в нем гораздо более новое и совершенное ядро Cortex-M4 и вот лучше на нем писать уроки (мне так кажется и извините) - чем на устаревшем STM32F103. Это же гораздо более перспективный и актуальный урок получится. Тем более нет особо (!) по нему уроков в Инете. Но это уже Вам решать уже. Спасибо.
@NRelectronics
@NRelectronics 4 года назад
тогда если что в следующем месяце про меня вспомните, может тогда на что-то новое уйдем (жене можно сразу не говорить, а чуть позже). Конечно инженерные/программные канала не имею миллионов как на канаалов котиков и других, ну такие особенности у нас. 1. Воот, тогда другое дело, вы слишком глубоко обновились, чуть ли не с самой первой - 1.0.1 до 1.3.0, тогда понятно откуда у вас лаги такие пошли. Лучше её снесите и останьтесь на одно 1.3.1 и будет вам счастье. 3. BlackPill на STM32F411 у меня действительно есть, можно и на ней да. Да, она перспективней. Ok ;-)
@ajdarseidzade688
@ajdarseidzade688 4 года назад
​@@NRelectronics Я еще отвечу тут и проясню если не возражаете (хочется и прояснить тут и заодно, самое главное, Вам может кое-какая полезная информация/мысль будет, да и ничего не стоит же моя писанина тут:)). Установил в начале 2018 г. (2018.05 как сейчас выяснил) STM32CubeIDE. Как только она вышла. С того времени по март месяц этого нехорошего (!) года (2020) практически не пользовался ею т.к. вообще не было времени на эти эксперименты. Использую PIC32, а на STM32 не было вообще времени перейти (и возможности). В связи с карантином, нашим, так получилось что времени стало побольше и за 2 месяца смог вроде изучить немного STM32 (F7 стал изучать) и сделал уже около 40 проектов разных (наклепал). И кое-что изучил. Единственно для здоровья вред приносит такой уже малоподвижный образ жизни. 100%. Использовал и уроки канала в имени которого есть народ. И заметил, что много иностранцев есть (с Германии например, индусов и т.п.) и которые за полезные уроки шлют всякие платы и может что-то еще другое. Т.е. людям очень нужны подобные уроки (и не только я один такой). Особенно, как заметил, по F7xx серии есть интерес у них. А вот по устаревшему ядру от STM32F103 полно же в Инете уроков всяких. И вот F4xx очень похож кстати на F7xx... Или же FreeRTOS например есть. LwIP... Вообщем, не буду больше ничего советовать/писать/навязывать - это сугубо Ваше дело и кто я такой (тем более не Вам донатил). Просто если делать уроки, то лучше же сразу актуальные, а заинтересованные подписчики/люди появятся побольше от этого. Спасибо и всего хорошего.
@NRelectronics
@NRelectronics 4 года назад
Так вот и я про это говорю, что этот камень мощный и подходит для многих, если не для всех домашних задач. F0 - так вообще самое дешевое семейство пока еще...
@YuriyIY
@YuriyIY 4 года назад
Еще замечание по Drebezg_Handler(). Если не нажимать или не отпускать кнопку, в функции не выполняется return 0 или 1. Чисто гипотетически, в результате наводок или неверного обращения с памятью, ячейка с возвращаемым значением может быть изменена или испорчена. В результате чего, могут быть непредсказуемые результаты выполнения программы. Аполлон рухнул как раз из-за такой проблемы... :-)
@NRelectronics
@NRelectronics 4 года назад
В результате наводок в этой схеме и коде ничего не будет,т.к. аппаратно и программно все подтянуто к питанию, что дает наводка уже к уровню питания? Ровным счетом ничего. Кстати если не отпускать то в идеале будет всегда логический ноль, и помеха не перетянет ее в единицу никогда ;-) Я всю работу показал пошагово в отладке, откуда взято такое не пойму?
@YuriyIY
@YuriyIY 4 года назад
@@NRelectronics Ненадо. return'ы можно просто вынести за последний if, где меняется ButtonState. Возвращаться будет каждый раз верное значение. :-)
@NRelectronics
@NRelectronics 4 года назад
можно и так :-) Но в коде моем ошибок нет, у меня такая интерпретация. Благодарю за совет, обычно по делу на ютубе не советуют, а просто критикуют, надоело такое...
@YuriyIY
@YuriyIY 4 года назад
@@NRelectronics Бесполезная критика диванных аналитегов бесит, да. Тут дело не в ошибке, у меня малость мозг такой дурацкий. Я не профи в написании прошивок или архитектуре MCU, но вот противоречия и неопределенности прям мне сами в глаза лезут. Вот тут и увидел явную неопределенность, которых желательно не допускать. :-)
@NRelectronics
@NRelectronics 4 года назад
Спасибо, можете быть моим персональным программистом по моей противоречивости и неопределенности, я ведь тоже не бог ;-)
@mistergrinch7342
@mistergrinch7342 4 года назад
она равна нулю изначально. как она стала равна 1. ведь в цикле возвращается 1 только после того как count станет больше 100000.
@user-jb7hc6qn6r
@user-jb7hc6qn6r 4 года назад
Точно подметили
@NRelectronics
@NRelectronics 4 года назад
Но верно и обратное, что и реализовано, если уже идут одни единицы, т.е. включение уже гарантируется без помех, почему не включать?)))
@user-oz7xe2gy6h
@user-oz7xe2gy6h 3 года назад
Добрый день! Спасибо за видео, но не могу понять одну вещь, так как начинающий: почему светодиод загорается при значении счетчика равным 1 (разве это не должно произойти только при достижении значения 100 000)? И разве мы сможем уместить значение 100 000 в uint16_t?
@NRelectronics
@NRelectronics 3 года назад
Добрый день. В uint16_t мы действительно сможем уместить только 65536 значений, поправлю.
@alexivanov4022
@alexivanov4022 4 года назад
Можно переменную Result исключить: if(Drebezg_Handler()) { }
@NRelectronics
@NRelectronics 4 года назад
Конечно можно, я делал для наглядности так.
@vs4406
@vs4406 4 года назад
Спасибо за уроки. А в Stm32CubeIDE размер и шрифта да и сам шрифт возможно изменить? Было бы значительно лучше видно. В этой IDE шрифт плохо читаемый, а где изменить я не нашел.
@NRelectronics
@NRelectronics 4 года назад
Пожалуйста) Где-то попадалось, найду напишу меню где настойки эти.
@Mikke_30
@Mikke_30 Год назад
Сtrl + "-", Сtrl + "+ (shift)"
@ilhitindustries7499
@ilhitindustries7499 4 года назад
Сделайте урок пожалуйста как кнопкой выбирать разные коды из одного кода
@NRelectronics
@NRelectronics 4 года назад
Поясните, как хотели бы.
@ilhitindustries7499
@ilhitindustries7499 4 года назад
@@NRelectronics Например есть плата со светодиодом и кнопкой. В исходном коде написано как зажечь два разных светодиода ,но выбрать какой из них зажечь можно только нажатием кнопкой. То есть первая программка например выбирает когда диод горит постоянно,а вторая когда он мигает. Типа того
@NRelectronics
@NRelectronics 4 года назад
Ok.
@user-tt3pb2ry6w
@user-tt3pb2ry6w 4 года назад
Добрый день! Полезное видео, спасибо. С меня лайк. А как быть, когда в проекте несколько кнопок? Использовать массивы Button_State[n], Button_count[n], Result[n], где n - количество кнопок? Так? И ещё бы хотелось увидеть алгоритм удержания кнопок. Например увеличение переменной volume через удержание кнопки.
@NRelectronics
@NRelectronics 4 года назад
Спасибо. Если несколько кнопок, то придется опрашивать каждую со всеми вытекающими счетчиками и прочее. Лучше тогда уже повесить на прерывание и там анализировать нули и единицы. Алгоритм удержания, что вы имели ввиду? Вот я держу нажатой и счетчик считает, каждый тик это какое-то время, сколько вам времени нужно на удержание и по этому событию делайте что нужно, хоть тоже прерывание...
@user-tt3pb2ry6w
@user-tt3pb2ry6w 4 года назад
@@NRelectronics 1)Т.е. для нескольких кнопок будем множить количество счётчиков. Тогда уж лучше массивы. В Ардуино мне нравилось для кнопок использовать класс кнопки, в котором описаны алгоритмы антидребезга, а кнопки объявлять как объект. Я так понимаю что понятие классов и объектов в СТМ нет. Вы упомянули повесить кнопку на прерывания. На внешние? Будете снимать видео на эту тему? 2) По поводу удержания. Вам нужно увеличивать какую-нибудь переменную по нажатию кнопки. Можно нажимать однократно и увеличивать переменную. Можно нажать и удерживать кнопку, чтобы не клацать много раз. Нажать и ждать, пока переменная не достигнет нужного значения. Вот это я имел в виду. 3) Я перехожу с Ардуино на СТМ и меня интересует все. Скажите, дополнительно к теоретическим урокам будут практические? Например работа с термодатчиком, работа с ТФТ-экраном, динамическая индикация и другое. Простите за чрезмерный аппетит!
@NRelectronics
@NRelectronics 4 года назад
Понятие классов и объектов есть в С++, который можно использовать для STM32. Прерывание на внешнее конечно, пока по кнопкам снимать не планирую. Видео по антидребезгу это практическое видео, да, конечно дальше будут и другие практические по периферии. Аппетит самый что ни есть хороший!)
@user-tt3pb2ry6w
@user-tt3pb2ry6w 4 года назад
@@NRelectronics спасибо. Но всё таки, как лучше? Применять Си или Си++ для СТМ?
@NRelectronics
@NRelectronics 4 года назад
А вот что больше любите/умеете то и используйте. Это как вопрос веры.
@alexprotov2151
@alexprotov2151 2 года назад
неудачный урок. как увидеть дребезг? Даже если отпаять интегрирующую RC-цепь, параллельную кнопке, ваша программа без Drebezg_Handler, напрямую if( Button_State == GPIO_PIN_RESET) ... покажет тот же самый результат. На светодиоде незаметно будет - был ли дребезг, или нет. Отладчиком тоже дребезг не увидишь. Надо было сделать счетчик нажатий и передавать его по UART'у в терминал. Например строкой "Button down, cnt = 5". то есть 5 раз изменилось состояние входа, пока Drebezg_Handler не переключил Result. И на разной частоте ядра увидим разное количество дребезга. И какой смысл включать внутреннюю подтяжку входа к "+" питания? внутренний резистор в STM32 около 62kΩ, тогда как подтягивающий на плате 4,7kΩ. Вместо 4,7kΩ получили 4,37kΩ - много изменили включив внутреннюю подтяжку. Подключили бы голую внешнюю кнопку, без подтяжек и фильтров - Наглядно стало бы понятно для чего нужна внутренняя подтяжка, и как легко ловятся всякие наводки на проводок от кнопки до МК когда никакой подтяжки нет. Да и алгоритм далёк от идеала. С помощью Button_count вы делаете программную задержку, при этом много потерь процессорного времени. А ведь кнопка - это всего лишь маленький элемент. В проектах процессорное время более необходимо для других задач. А если разработчику надо больше 1й кнопки? сколько Button_count'ов ему плодить? Может это был урок по STM32CubeIDE ? Так тоже нет. Никаких моментов STM32CubeIDE не раскрыто.
@NRelectronics
@NRelectronics 2 года назад
Это смотрится легко логическим анализатором за 300₽ с Али, не знали? Иногда нет возможности исправить, что то и нужно это исправить программно. Это видео пример одного или нескольких вариантов. На самом деле их гораздо больше, все не покажешь, и в этом не вижу смысла.
@alexprotov2151
@alexprotov2151 2 года назад
​@@NRelectronicsя не пытаюсь вас обидеть. На самом деле вы делаете больше чем я. Вы пытаетесь своим языком донести до русских людей это перспективное направление развития. А я не веду никаких каналов просвещения. И хотя бы поэтому я не могу относиться к вам с неуважением. Насчет анализатора - у меня не первый год в работе LA5016. Это не 300 рублей, если вы в теме. С дребезгом я сталкивался на первых своих разработках, когда глючила навигация по меню. Я вам просто говорю что лучше будет, когда ваша аудитория сначала увидит дребезг у себя. Увидит без покупки лог.анализаторов/осликов или ещё чего-то (STM'ки его прекрасно ловят). Тогда люди увидят своими глазами что есть такое явление. Так доходит лучше. И все это можно сделать только изменяя код программы. Не принимайте мои комменты как попытки унизить или ещё что-то нехорошее. Отнеситесь пожалуйста как к здоровой критике. Возьмите на заметку. Ведь чем лучше ваши уроки будут построены, тем эффективнее будет доходить информация до людей, тем больше будет у вас благодарной аудитории. И больше русских людей будут заниматься электроникой, а не тупить в соцсетях. С Уважением, Alex.
@NRelectronics
@NRelectronics 2 года назад
Спасибо за столь хороший комментарий, простой дешёвый китайский анализотр за 300₽ это показывает легко и наглядно. Думаю надо отдельно видео с ним сделать...
@mistergrinch7342
@mistergrinch7342 4 года назад
count=1.state=0. почему зажёгся?
@NRelectronics
@NRelectronics 4 года назад
кнопка нажата оказалась, после первого счета.
@vladim12345
@vladim12345 4 года назад
Нихрена не понял :) но пересмотрю еще и еще пока не пойму, спасибо.
@NRelectronics
@NRelectronics 4 года назад
Разжевал до не могу уже))
@vladim12345
@vladim12345 4 года назад
@@NRelectronics К вам претензий нет, это я тугодум )) Ваши уроки очень хорошие.
@NRelectronics
@NRelectronics 4 года назад
У вас высокая самокритика)
@mistergrinch7342
@mistergrinch7342 4 года назад
дифференциального эффекты на включение нет, только на выключение.
@NRelectronics
@NRelectronics 4 года назад
Что за дифференциального эффекта?
@mistergrinch7342
@mistergrinch7342 4 года назад
виноват .интегрального, ну или гистерезисного,
@mistergrinch7342
@mistergrinch7342 4 года назад
включиться led по логике должен после того как счётчик до считает до 100000, в этом смысл интегрального алгоритма,у Вас на видео он включается сразу,а вот выключается с задержкой , считает до нуля, правильно.
@NRelectronics
@NRelectronics 4 года назад
а до 100000 игнорируем нажатие и включение кнопки?
@arakeldesign
@arakeldesign 4 года назад
Есть ещё такой лайвхак: ставить сенсорные кнопке на базе дешевого TTP223 и никакого дребезга не будет!
@NRelectronics
@NRelectronics 4 года назад
Да, это хороший лайфхак. Спасибо, дома как раз лежит, можно как-нибудь видео сделать.
@alx123
@alx123 4 года назад
Теоретически да. Но когда я, например, собрал всё в один корпус с кучей дросселей и силовых проводов, у меня ИК-приёмник туго реагировать стал - оказалось, что рядом с сигнальным проводом был силовой 24В, и даже конденсаторная обвязка не помогла от такого фона. Провод отодвинул, но раз в несколько часов возникает псевдо сигнал, тут только программно исключить можно. А в сенсоре же и подавно механизм электростатики.
@NRelectronics
@NRelectronics 4 года назад
Вот ведь, я тут одному товарищу уже как раз отвечал прямо по вашей ситуации, когда резюк и кондер уже не прицепишь и нужно только программно решать проблемку. Спасибо за пример, надеюсь зрителям будет понятней, что анализ ложных и правильных срабатываний самое правильно решение.
@arakeldesign
@arakeldesign 4 года назад
@@NRelectronics я полностью с вами согласен. Ни в коем случае не хотел ничего сказать против вашего материала, обработка дребезга важная задача с которой должен справиться каждый разработчик. Просто написал свой лайвхак для тех кто не задумывался о такой возможности.
@NRelectronics
@NRelectronics 4 года назад
Лайфхак хороший, спасибо за него.
Далее
娜美这是在浪费食物 #路飞#海贼王
00:20
Последствия блокировки YouTube
25:35
STM32: PWM шаг за шагом на STM32CubeIDE
10:51
娜美这是在浪费食物 #路飞#海贼王
00:20