Тёмный

AVR 49# Кнопка. Алгоритм подавления дребезга. 

Andrey Frolov
Подписаться 12 тыс.
Просмотров 7 тыс.
50% 1

Подключаем кнопку к микроконтроллеру и программно подавляем дребезг. Разбираем простой алгоритм с опросом кнопки в прерывании таймера.
Проект из ролика disk.yandex.ru/d/BdKG_m9PVhohMA
На развитие канала yoomoney.ru/to/4100115257108062
все ролики серии • Программируем микрокон...

Наука

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

 

7 сен 2021

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 49   
@iqubik
@iqubik 2 года назад
Очень приятно, что вы нас не бросаете. Спасибо Вам, что делаете материалы для развития.
@andreyfrolov301
@andreyfrolov301 2 года назад
стараемся
@user-ex8ml1wy6d
@user-ex8ml1wy6d 2 года назад
Огромнешее спасибо,ваши уроки очень радуют,для меня это праздник
@andreyfrolov301
@andreyfrolov301 2 года назад
спасибо за высокую оценку :)
@B5U8
@B5U8 Год назад
Отличное видео. Всё объяснено без суеты.
@user-tu8hk1iz6s
@user-tu8hk1iz6s 2 года назад
Отличный урок и хороший пример. Это не баг, это фича)). А следующим уроком можно сделать реакцию на длинное и короткое нажатие, а после него - усовершенствование программы где, к примеру 8 кнопок и микроконтроллер будет отслеживать их длинное и короткое нажатие. Получится такой небольшой цикл уроков по работе с кнопкой, думаю это будет многим интересно. Спасибо за уроки и примеры.
@andreyfrolov301
@andreyfrolov301 2 года назад
про кнопки можно пару лет ролики снимать :)
@user-tu8hk1iz6s
@user-tu8hk1iz6s 2 года назад
@@andreyfrolov301 Да, а всё потому что тема до конца не раскрыта. В подавляющем большинстве "обучающих" видео, опрос кнопки в основном цикле с использованием delay, некоторые уникумы вешают кнопку на INT0 или INT1 (прерывания с наивысшим приоритетом использовать для кнопок это жесть) и в прерывании используют delay (вообще мрак). Еще нет ни одного видео где тема кнопок раскрыта полностью, а именно: варианты обработки в основном цикле с использованием и без delay, варианты с использованием if-else и swich-case, варианты с прерываниями по таймеру, варианты с использованием АЦП. Длинне и короткие нажатия. Да, это все давным давно реализовано и описано, но одного большого гайда по вариантам реализации я еще не встречал.
@lexxkrt
@lexxkrt 2 года назад
@@user-tu8hk1iz6s по сути вы все и описали. ну и где 2 года? еще матрицу кнопок можно добавить к сказанному
@aleksandrbengard5195
@aleksandrbengard5195 2 года назад
@@user-tu8hk1iz6s в заметках ардуинщика есть видео о обработке нажатия кнопок с помощью флажков, без прерывания и в основном цикле.
@user-lw6bu9ws8v
@user-lw6bu9ws8v Год назад
Спасибо большое! Весь дребезг контактов действительно сошел на нет (проверял на "железе").
@valovik
@valovik 2 года назад
Ваш канал это находка! Жаль у ютуба в России непонятное будущее. Попробую скачать. По моему неудобно систематизированы видео по плейлистам. Огромное спасибо!
@valovik
@valovik 2 года назад
Все, нашел нужный плейлист)) как то он затерялся с длинным названием)
@maratonmaratonov28
@maratonmaratonov28 Год назад
Шикарно❤
@andreyace8768
@andreyace8768 2 года назад
Спасибо за познавательное видео!
@andreyfrolov301
@andreyfrolov301 2 года назад
на здоровье :)
@cpaeko9085
@cpaeko9085 7 месяцев назад
Спасибо за труд.
@user-qo5mn6rq3y
@user-qo5mn6rq3y 2 месяца назад
Бомба вообще
@user-ws8lx5ji8z
@user-ws8lx5ji8z 2 года назад
Excellent
@aleksivanov9137
@aleksivanov9137 2 года назад
Спасибо большое за уроки.Просто и доступно объяснили.Про volatile можно было напомнить,как применяется.Вопрос как в AVR обойтись без delay?Какие есть варианты?Если воможно Вас просить,то сделайте пожалуйста это в видеоуроке.
@andreyfrolov301
@andreyfrolov301 2 года назад
было и про без делей и про волатайл
@user-xn3ez3hf2i
@user-xn3ez3hf2i 2 года назад
Смотрите кнопка постоянно зажата, button_clk мы взвели и инкремент не делается, значит при каждом срабатывании прерывания у нас будет button_clk устанавливаться в единицу так как у нас счетчик button_count будет постоянно пять мы больше увеличить не можем и на данном числе все остановится. У нас в button_clk единица и мы будем каждый рвз при переполнении счетчика устанавливать button_clk в единицу хотя там и так единица, лишняя операция каждую итерацию. Я бы сделал проверку такую, если у нас button_clk в единице то мы не делаем никаких действий даже если кнопка нажата, короче проще и в итоге быстрее, и логика проверок не нарушена и каждый раз присвоения button_clk в единицу не будет (если там и так единица) и количество условий не поменяется, убрать одно лишнее условие и поставить одно правильно сформированное.
@dreamer4104
@dreamer4104 2 года назад
Данный алгоритм можно усовершенствовать, сравнивая состояние пина не с 1 или 0, а с его предыдущем состоянием при этом появится возможность фиксировать не только нажатие, но и отпускание кнопки. Я использую так.
@user-ws8lx5ji8z
@user-ws8lx5ji8z Год назад
А вот интересно хватит ли прерываний от вачдог (16ms) ? В аттини 13 таймер всего один. Это вроде 62 Гц...
@sssh1505
@sssh1505 3 месяца назад
Интересный имитатор дребезга контактов, это готовый модуль или его ручками собрать надо?
@user-cv6hi1mm7z
@user-cv6hi1mm7z Год назад
А в схеме симуляции дребезга контакта какие настройки у генератора модулированного синуса?
@borisfet215
@borisfet215 Год назад
спасибо ролик понравился .у меня вопрос как написать программу что бы при нажатии кнопки свето диод горел, а при отпускании не горел .с решением подавления дребезгом контакта ,как в ролике, спасибо
@kumelektronik340
@kumelektronik340 Год назад
Ребята подскажите, как писать коментарии на русском в Atmel Studio. Заранее благодарен
@cnccontroller
@cnccontroller 2 года назад
Спасибо! Мне понравился ваш алгоритм. Только вот не пойму для чего button_count сделали volatile ? У меня и без них работает.
@andreyfrolov301
@andreyfrolov301 2 года назад
знаете анекдот? если работает ничего не трогай
@cnccontroller
@cnccontroller 2 года назад
@@andreyfrolov301 знаю )) В данном случае не понятно - для чего волатил, вот и спросил. Я их почти никогда не ставлю. Но видел безумные проекты в которых каждая(!) переменная имеет волатил. Но ваш алгоритм мне очень понравился и без сомнения я буду использовать его везде! Еще раз спасибо!
@andreyfrolov301
@andreyfrolov301 2 года назад
@@cnccontroller волатайл - указывает компилятору не оптимизировать переменную по правилам любая переменная используемая в прерывании должна быть волатайл иначе могут быть проблемы
@cnccontroller
@cnccontroller 2 года назад
@@andreyfrolov301 что не оптимизировать - это понятно. Но вот что для прерывания нужно волатил, это не знал, буду иметь ввиду, хотя вроде не натыкался на проблемы. А те проекты, про которые я сказал, где все на волатилах, там вообще нет ни одного прерывания, в 1000 строк кода (ШИМ, которая работает сама по себе - не в счет).
@NoName-dj6bd
@NoName-dj6bd Месяц назад
Есть универсальное решение. Возле порта МК конденсатор на землю 470-1000пФ, между МК и кнопкой резистор 10-100 Ом. И никакого дребезга! Не надо усложнять себе жизнь!
@jone2409
@jone2409 Год назад
Спасибо. Скажите пожалуйста 🙏 где или как правильно искать 🔍 инструкция или книга по изучению программирование AVR . я пробовала искать 🔍 (Язык Си для микроконтроллеров - AVR) нашёл инфо PDF формат язык про С. Но я читал и нечего не понял 🤷 . Там не встречал DDRB = 0b00000000; Pinb или Port . нет примеров . как найти Manual ? Спасибо .
@andreyfrolov301
@andreyfrolov301 Год назад
DDRB = 0b00000000; это тоже самое что и a=0; для С книг не подскажу, но они точно есть и много странно что вы не нашли. поищите еще.
@jone2409
@jone2409 Год назад
@@andreyfrolov301 Нашёл но я не понял там нечего 😀 Значит переименовать Int DDRD | = (1
@andreyfrolov301
@andreyfrolov301 Год назад
@@jone2409 инт убрать если то - да можно
@mslq
@mslq 3 месяца назад
Если ещё актуально, то поищите: DI HALT. AVR - Учебный курс. Это лучшая обучающая книга по асму на AVR.
@user-lt3jf7kq5g
@user-lt3jf7kq5g 2 года назад
А не было бы интересным заняться FM приемником RDA5807FP (дешевый) и подключение к ATtiny13?
@andreyfrolov301
@andreyfrolov301 2 года назад
есть у меня такие :) уже с пару лет лежат ждут своего часа
@user-lt3jf7kq5g
@user-lt3jf7kq5g 2 года назад
@@andreyfrolov301 Спасибо!
@fate07078811
@fate07078811 7 месяцев назад
Добрый день, не могу не где найти как решить такую задачу, мне надо по нажатию на кнопку подать импульс 200мс но если кнопка отается нажатой нечего не делать пока ее не отпустят и нажмут заного. У меня пока такой код так как я знаю время нажати до 7сек но хочется сделать что-бы было универсально для любого времени нажатия #define F_CPU 1000000L #include #include int main(void) { DDRD = 0x00; // порт D на вход PORTD = 0xFF; // подключаем внутренние подтяг. резисторы DDRB = 0xFF; // порт B на выход PORTB = 0x00; // устанавливаем нули на выходе while(1) { if(!(PIND&(1
@ivanrusev2270
@ivanrusev2270 2 года назад
А интересно как в STM32 настроить по переполнению?
@andreyfrolov301
@andreyfrolov301 2 года назад
точно также только по другому :)
@user-ef5hg5qy3m
@user-ef5hg5qy3m Год назад
А если это attiny13, и таймер занят шимом?
@andreyfrolov301
@andreyfrolov301 Год назад
если у мк недостаточно ресурсов для реализации вашего проекта, мк меняется на другой более "мощный"
@user-ef5hg5qy3m
@user-ef5hg5qy3m Год назад
@@andreyfrolov301 спасибо, я уже разобрался, шим в данном случае не мешает работает и так, только делитель на 64 не желателен для шима, думаю убрать его, а button инкримитировать не до 5, а до 5*64 соответственно
@mslq
@mslq 3 месяца назад
У меня много счётчиков запускается - один во время единички считает миллисекунды, нулём сбрасывается, другой во время нуля считает миллисекунды, единичкой сбрасывается, таким образом формируются два события - нажато, отжато, третий удержание считает миллисекунды после формирования события нажато, или отжато - появляется событие удержание.
Далее
готовка с Даней🥹
00:59
Просмотров 571 тыс.
ПРОВЕРИЛ АРБУЗЫ #shorts
00:34
Просмотров 2 млн
AVR 33# UART
25:21
Просмотров 7 тыс.
iPhone 15 Pro в реальной жизни
24:07
Просмотров 355 тыс.
Самый быстрый пылесос!
0:30
Просмотров 19 тыс.
Собери ПК и Получи 10,000₽
1:00
Просмотров 2,7 млн
Здесь упор в процессор
18:02
Просмотров 348 тыс.
Игровой Комп с Авито за 4500р
1:00