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

  Рет қаралды 6,715

Andrey Frolov

Andrey Frolov

2 жыл бұрын

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

Пікірлер: 49
@iqubik
@iqubik 2 жыл бұрын
Очень приятно, что вы нас не бросаете. Спасибо Вам, что делаете материалы для развития.
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
стараемся
@user-ex8ml1wy6d
@user-ex8ml1wy6d 2 жыл бұрын
Огромнешее спасибо,ваши уроки очень радуют,для меня это праздник
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
спасибо за высокую оценку :)
@B5U8
@B5U8 Жыл бұрын
Отличное видео. Всё объяснено без суеты.
@user-qo5mn6rq3y
@user-qo5mn6rq3y Ай бұрын
Бомба вообще
@maratonmaratonov28
@maratonmaratonov28 Жыл бұрын
Шикарно❤
@user-lw6bu9ws8v
@user-lw6bu9ws8v Жыл бұрын
Спасибо большое! Весь дребезг контактов действительно сошел на нет (проверял на "железе").
@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 в заметках ардуинщика есть видео о обработке нажатия кнопок с помощью флажков, без прерывания и в основном цикле.
@andreyace8768
@andreyace8768 2 жыл бұрын
Спасибо за познавательное видео!
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
на здоровье :)
@user-ws8lx5ji8z
@user-ws8lx5ji8z 2 жыл бұрын
Excellent
@cpaeko9085
@cpaeko9085 6 ай бұрын
Спасибо за труд.
@valovik
@valovik 2 жыл бұрын
Ваш канал это находка! Жаль у ютуба в России непонятное будущее. Попробую скачать. По моему неудобно систематизированы видео по плейлистам. Огромное спасибо!
@valovik
@valovik 2 жыл бұрын
Все, нашел нужный плейлист)) как то он затерялся с длинным названием)
@sssh1505
@sssh1505 2 ай бұрын
Интересный имитатор дребезга контактов, это готовый модуль или его ручками собрать надо?
@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, а с его предыдущем состоянием при этом появится возможность фиксировать не только нажатие, но и отпускание кнопки. Я использую так.
@NoName-dj6bd
@NoName-dj6bd Ай бұрын
Есть универсальное решение. Возле порта МК конденсатор на землю 470-1000пФ, между МК и кнопкой резистор 10-100 Ом. И никакого дребезга! Не надо усложнять себе жизнь!
@user-cv6hi1mm7z
@user-cv6hi1mm7z Жыл бұрын
А в схеме симуляции дребезга контакта какие настройки у генератора модулированного синуса?
@user-ws8lx5ji8z
@user-ws8lx5ji8z Жыл бұрын
А вот интересно хватит ли прерываний от вачдог (16ms) ? В аттини 13 таймер всего один. Это вроде 62 Гц...
@borisfet215
@borisfet215 Жыл бұрын
спасибо ролик понравился .у меня вопрос как написать программу что бы при нажатии кнопки свето диод горел, а при отпускании не горел .с решением подавления дребезгом контакта ,как в ролике, спасибо
@cnccontroller
@cnccontroller 2 жыл бұрын
Спасибо! Мне понравился ваш алгоритм. Только вот не пойму для чего button_count сделали volatile ? У меня и без них работает.
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
знаете анекдот? если работает ничего не трогай
@cnccontroller
@cnccontroller 2 жыл бұрын
@@andreyfrolov301 знаю )) В данном случае не понятно - для чего волатил, вот и спросил. Я их почти никогда не ставлю. Но видел безумные проекты в которых каждая(!) переменная имеет волатил. Но ваш алгоритм мне очень понравился и без сомнения я буду использовать его везде! Еще раз спасибо!
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
@@cnccontroller волатайл - указывает компилятору не оптимизировать переменную по правилам любая переменная используемая в прерывании должна быть волатайл иначе могут быть проблемы
@cnccontroller
@cnccontroller 2 жыл бұрын
@@andreyfrolov301 что не оптимизировать - это понятно. Но вот что для прерывания нужно волатил, это не знал, буду иметь ввиду, хотя вроде не натыкался на проблемы. А те проекты, про которые я сказал, где все на волатилах, там вообще нет ни одного прерывания, в 1000 строк кода (ШИМ, которая работает сама по себе - не в счет).
@user-lt3jf7kq5g
@user-lt3jf7kq5g 2 жыл бұрын
А не было бы интересным заняться FM приемником RDA5807FP (дешевый) и подключение к ATtiny13?
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
есть у меня такие :) уже с пару лет лежат ждут своего часа
@user-lt3jf7kq5g
@user-lt3jf7kq5g 2 жыл бұрын
@@andreyfrolov301 Спасибо!
@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.
@kumelektronik340
@kumelektronik340 Жыл бұрын
Ребята подскажите, как писать коментарии на русском в Atmel Studio. Заранее благодарен
@ivanrusev2270
@ivanrusev2270 2 жыл бұрын
А интересно как в STM32 настроить по переполнению?
@andreyfrolov301
@andreyfrolov301 2 жыл бұрын
точно также только по другому :)
@fate07078811
@fate07078811 6 ай бұрын
Добрый день, не могу не где найти как решить такую задачу, мне надо по нажатию на кнопку подать импульс 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
@user-ef5hg5qy3m
@user-ef5hg5qy3m Жыл бұрын
А если это attiny13, и таймер занят шимом?
@andreyfrolov301
@andreyfrolov301 Жыл бұрын
если у мк недостаточно ресурсов для реализации вашего проекта, мк меняется на другой более "мощный"
@user-ef5hg5qy3m
@user-ef5hg5qy3m Жыл бұрын
@@andreyfrolov301 спасибо, я уже разобрался, шим в данном случае не мешает работает и так, только делитель на 64 не желателен для шима, думаю убрать его, а button инкримитировать не до 5, а до 5*64 соответственно
@mslq
@mslq 3 ай бұрын
У меня много счётчиков запускается - один во время единички считает миллисекунды, нулём сбрасывается, другой во время нуля считает миллисекунды, единичкой сбрасывается, таким образом формируются два события - нажато, отжато, третий удержание считает миллисекунды после формирования события нажато, или отжато - появляется событие удержание.
AVR 50# Кнопка. Длинный и короткий клик.
13:18
AVR 34# Управление светодиодом по UART.
25:48
ОДИН ДЕНЬ ИЗ ДЕТСТВА❤️ #shorts
00:59
BATEK_OFFICIAL
Рет қаралды 7 МЛН
The day of the sea 🌊 🤣❤️ #demariki
00:22
Demariki
Рет қаралды 83 МЛН
OMG🤪 #tiktok #shorts #potapova_blog
00:50
Potapova_blog
Рет қаралды 17 МЛН
STM32. CMSIS #6. Устраняем дребезг кнопки
20:15
NR.electronics
Рет қаралды 3,8 М.
сенсорная кнопка на  транзисторе BC517
0:26
Sokolovski Vitali
Рет қаралды 1,1 М.
DDS Генератор MHS 5200A ложка дёгтя
18:14
ElEnBlog - блог об электронике
Рет қаралды 59 М.
AVR 47# Программный I2C
22:10
Andrey Frolov
Рет қаралды 6 М.
AVR 33# UART
25:21
Andrey Frolov
Рет қаралды 7 М.
1$ vs 500$ ВИРТУАЛЬНАЯ РЕАЛЬНОСТЬ !
23:20
GoldenBurst
Рет қаралды 908 М.
Нашел еще 70+ нововведений в iOS 18!
11:04
Купил этот ваш VR.
37:21
Ремонтяш
Рет қаралды 297 М.
Samsung S24 Ultra professional shooting kit #shorts
0:12
Photographer Army
Рет қаралды 31 МЛН