MC14490 -аппаратный подавитель дребезга контактов (кнопок, энкодеров, герконов,итп)
- Войдите на сайт для отправки комментариев
Потестил микросхемку mc14490 это шестиканальный аппаратный подавитель дребезга,
удобно применять когда нет возможности (или желания:) делать это программно. У меня есть специальный убитый энкодер для тестинга алгоритмов дребезгоподавления, в этот раз тоже использовал его. На осциллограмме -жёлтым цветом сигнал на входе микросхемы (исходный с энкодера), синим - на выходе микросхемы.
Как видно по картинке -результат идеален. Можно сравнить с работой конденсатора, снимал ранее осциллограммы с тем-же энкодером:
Исходный сигнал без дребезгоподавления:
и сигнал с подавлением дребезга конденсатором (10кОм/0,1мкф):
Есть ещё эффективное решение для кнопок с переключающемися контактами. Стоит о нём упомянуть мимоходом. Кнопки подойдут например такие:
С ними можно использовать RS-триггер, который обеспечит 100% отсутствие дребезга. Для желающих узнать подробности можно почитать тут. Я собирал схему из статьи (рис1.2 (а), работает идеально. Но удобнее взять готовый RS-триггер.
Да. Эту микросхему ещё Джек Хасл упоминал. Правда, дорогущая, сволочь!
ЕвгенийП, ну если 150 руб за пять штук дорого... то да :)
Любопытная штука и скрупулезный подход вызывает уважение
Респект автору
Но вот ИМХО в практическом смысле совершенно не нужная вещь. Это вещь эпохи элементарной логики. В том и соль МК, что очень многое можно решить программно с простыми схемными решениями. А так очень многое из того, что делают на МК когда то делали на микросхемах логики
axill, мне вот понадобилось :). Всяко ж бывает. Я например очень люблю сажать кнопки и энкодеры на прерывания, вот нравится, и всё тут. А в прерываниях затруднительно программно устранить дребезг. И при отладке программы временно подключить кнопки куда-то, без лишних заморочек, тоже удобно.
ЕвгенийП, ну если 150 руб за пять штук дорого... то да :)
Во, блин! А я её только вот здесь видел - за 1230 р./шт. А сейчас посмотрел на али, так там и 5 штук за 133 рубля есть :)
axill, мне вот понадобилось :). Всяко ж бывает. Я например очень люблю сажать кнопки и энкодеры на прерывания, вот нравится, и всё тут. А в прерываниях затруднительно программно устранить дребезг. И при отладке программы временно подключить кнопки куда-то, без лишних заморочек, тоже удобно.
А програмный RS-тригер, сбрасываемый таймером по установленной максимальной частоте, и прерыванием по переднему/заднему фронту (в зависимости что ловить нажатие или отпускание) почему не нравится?
faeton, иногда пользуюсь, но всё же тяготею к аппаратным решениям, ибо железячник я, а не программист :)
faeton, иногда пользуюсь, но всё же тяготею к аппаратным решениям, ибо железячник я, а не программист :)
dimax , я тоже за "железо" , делал на SN74HC14N , но там "обвеса" на каждый канал много....
никак не могу "победить" MC14490 :(
можешь выложить схему подключения на 6 кнопок ?
спасибо :)
SU-27-16, схемы то нет как таковой, на второй странице даташита распиновка. 6 входов, 6 выходов, 2 питания и две ноги для конденсатора. Я брал ёмкость 100пик. Никаких граблей не было.
спасибо :)
и всё ?!!!!!!!!!!!! чЮдесно !
а за что отвечает конденсатор ?
Задаёт минимальное время входящего импульса (нажатие-отпускание кнопки). 100 пик это для быстрого вращения энкодера, для простой кнопки можно взять поболее.
понял , спасибо :)
Задаёт минимальное время входящего импульса (нажатие-отпускание кнопки). 100 пик это для быстрого вращения энкодера, для простой кнопки можно взять поболее.
У этой микросхемы есть одна засада - даёт сдвиг фазы. Если её использовать как очиститель энкодера положения двигателя, то уведёт в сторону. :)
dimax спасибо за проделанную работу. В принципе у меня энкодер тоже в проекте на прерывании по вашей методике изложенной на этом форуме. Работает практически идеально, в подавлении дребезга RC цепь. Но иногда всетаки бывает проскочет дребезг, а с микросхемой смотрю вообще идеально.
Из тех магазинов где я покупаю есть здесь в DIP и SOP крпусах, но дороговато от 100 до 133 за штуку.
dimax спасибо за проделанную работу. В принципе у меня энкодер тоже в проекте на прерывании по вашей методике изложенной на этом форуме. Работает практически идеально, в подавлении дребезга RC цепь. Но иногда всетаки бывает проскочет дребезг, а с микросхемой смотрю вообще идеально.
Из тех магазинов где я покупаю есть здесь в DIP и SOP крпусах, но дороговато от 100 до 133 за штуку.
Вы искать на али не умеете? :)))
30р за шт: http://ru.aliexpress.com/item/MC14490-10pcs-lot-in-stock-can-pay/3247452...
http://ru.aliexpress.com/af/mc14490.html?ltype=wholesale&d=y&origin=n&is...
благодарю за информацию.
интересно, а что если выход 1 соеденить со входом 2, выход 2 со входом 3 и т.д. ... в 6 раз чище будет :-) >VJH
axill, мне вот понадобилось :). Всяко ж бывает. Я например очень люблю сажать кнопки и энкодеры на прерывания, вот нравится, и всё тут. А в прерываниях затруднительно программно устранить дребезг. И при отладке программы временно подключить кнопки куда-то, без лишних заморочек, тоже удобно.
на прерываниях дребезг отрабатывать еще проще в паре с таймером
но дело сугубо личное) нравится если почему нет?
axill, мне вот понадобилось :). Всяко ж бывает. Я например очень люблю сажать кнопки и энкодеры на прерывания, вот нравится, и всё тут. А в прерываниях затруднительно программно устранить дребезг. И при отладке программы временно подключить кнопки куда-то, без лишних заморочек, тоже удобно.
на прерываниях дребезг отрабатывать еще проще в паре с таймером
но дело сугубо личное) нравится если почему нет?
Да, только грамотно делать надо, ибо нагрузить проц прерываниями непрерывными можно. :)
1. Cчётчик дребезга кнопки в X при инициализации
2. Настроить прерывание кнопки по изменению состояния
3. В обработчике прерывния кнопки: запретить в маске прерыване кнопки, установить счётчик дребезга, в X, записать в переменную флаг состояния кнопки.
4. В обработчике прерывания таймера: если счётчик дребезга не ноль, -- ему, иначе разрешить в маске прерывание кнопки.
Если необходимо с захватом ловить нажатие, в.2 разрешить прерывание по переднему фронту, если необходимо ловить отпускание - по заднему фронту и не забывать в коде сбрасывать флаг кнопки после его восприятия.
Все намного проще. При срабатывании прерывания по нажатию выставляем обратный отсчет на 200-400мсек, я для этого использую отдельную переменную. Внутри прерывания таймера если переменная не ноль я считаю ее в минус. Если за время этого счета снова срабатывает прерывание по нажатию, то счетчик переустанавливается и начинаем отсчет заново
как только досчитали до нуля смотрим - нажата ли кнопка? Если да, то ставим флаг "нажата". Флаг обрабатываем в loop(). После обработки там же его сбрасываем
По коду это получается буквально 6 строчек кода
если чуть кода добавить можно выделить долгое нажатие или двойное нажатие
Все намного проще. При срабатывании прерывания по нажатию выставляем обратный отсчет на 200-400мсек, я для этого использую отдельную переменную. Внутри прерывания таймера если переменная не ноль я считаю ее в минус. Если за время этого счета снова срабатывает прерывание по нажатию, то счетчик переустанавливается и начинаем отсчет заново
как только досчитали до нуля смотрим - нажата ли кнопка? Если да, то ставим флаг "нажата". Флаг обрабатываем в loop(). После обработки там же его сбрасываем
По коду это получается буквально 6 строчек кода
если чуть кода добавить можно выделить долгое нажатие или двойное нажатие
Похоже, Вы этого не делали и рассуждаете теоритически. :) Во-первых, прерывания бывают разные по сигналу на ноге проца: по переднему фрону, по заднему фронту, по изменению состояния, по высокому и по нихнему уровню. Во-вторых, если юзверь будет держать кнопку нажатой, то неверно установденный тип прерывания - не по фронту или изменению состояния, по уровню, будет генерироваться постоянно и Вы задушите проц этим. В-третьх, вы описали режим защёлки, с мануальным сбрасыванием состояния кнопки. Такая система не катит для организации буфера клавиатуры, для отслеживания длинного нажатия, для автоповтора нажатия. :) Читайте ещё раз мой алгоритм. :)
Похоже, Вы этого не делали и рассуждаете теоритически. :) Во-первых, прерывания бывают разные по сигналу на ноге проца: по переднему фрону, по заднему фронту, по изменению состояния, по высокому и по нихнему уровню. Во-вторых, если юзверь будет держать кнопку нажатой, то неверно установденный тип прерывания - не по фронту или изменению состояния, по уровню, будет генерироваться постоянно и Вы задушите проц этим. В-третьх, вы описали режим защёлки, с мануальным сбрасыванием состояния кнопки. Такая система не катит для организации буфера клавиатуры, для отслеживания длинного нажатия, для автоповтора нажатия. :) Читайте ещё раз мой алгоритм. :)
взаимно, читайте )
Из тех магазинов где я покупаю есть здесь в DIP и SOP крпусах, но дороговато от 100 до 133 за штуку.
Какая-то у Вас не "пацанская" цена. Я вон в посте №5 давал ссылку на рассово-правильную цену.
Из тех магазинов где я покупаю есть здесь в DIP и SOP крпусах, но дороговато от 100 до 133 за штуку.
Какая-то у Вас не "пацанская" цена. Я вон в посте №5 давал ссылку на рассово-правильную цену.
Просто частенько беру в выше указанном магазине, а то что скидывают ссылки вот по 3 рубля пучек, там и рейтинги ниже 98%. Бегай потом думай или руки из жопы или просто пластмасску с ножами без кристалла прислали :-)
Но ради интереса куплю, не по пацанской цене конечно, но 100 р на хобби не жалко, прикуплю в очередную закупку.
Привет всем!
Спасибо Dimax за хорошую инфу.
Надо будет закупить и попробовать.
MC14490 разгружает мозги Arduino, но в плане стоимость/эффективность, ИМХО, может проигрывать простым RC цепочкам. Может, даже и в плане надежности уступать, поскольку требует источника питания и тактовых сигналов от встроенного генератора ( Internal Oscillator (R-C), or External Clok Source).
Не нашел в даташите про ток потребления :((( , что может быть критичным для некоторых пользователей
И про самый "больной" вопрос о двойных, тройных и х.з. сколькоразовых нажатий не увидел инфы в обсуждениях...
Удачи всем!
Олег М, потребление "quiescent current" последняя строчка в таблице на стр.3
Спасибо. Узрел...
Да, потребление очень малое.
Как я понял, задержки вкл/вЫкл здесь регулируются частотой генератора/oscillator-а и одинаковые для всех каналов/кнопок.
Прошу подсказать, как её монтировать. Где GND? Почему два входных напряжения? Было бы здорово посмотреть схему
Где GND? Почему два входных напряжения?
Почитайте Обозначение цепей питания в иностранных материалах
Вспомнил про эту тему, и обратил внимание, что почему-то мы никогда не рассматривали вариант переключающей кнопки и программного RS-триггера. Ну, если конечно не жалко на одну кнопку отдать два пина :)
Иногда в проектах свободных ног остаётся полно, и просто грех не воспользоваться. Схема проста, даже подтяжки можно не делать, сгодится внутренняя.
RS-триггер программно делается буквально двумя строчками.
И получаем идеальный результат, в принципе не имеющей дребезга даже на самых раздолбаных кнопках )
Вот это верно.
А то..
... тяготею к аппаратным решениям, ибо железячник я, а не программист :)
Прогресс однако на лицо! :)
На обычном, не переключающем, контакте при правильном, не спешном ;) подходе все тоже очень просто.
Вспомнил про эту тему, и обратил внимание, что почему-то мы никогда не рассматривали вариант переключающей кнопки и программного RS-триггера. Ну, если конечно не жалко на одну кнопку отдать два пина :)
Иногда в проектах свободных ног остаётся полно, и просто грех не воспользоваться. Схема проста, даже подтяжки можно не делать, сгодится внутренняя.
RS-триггер программно делается буквально двумя строчками.
И получаем идеальный результат, в принципе не имеющей дребезга даже на самых раздолбаных кнопках )
На самом деле две строчки программного RS-триггера ещё проще:
SLKH, так это то ж самое, но без сохранения предыдущего состояния. А я его специально делал, что б выводить в сериал именно в момент изменения.
SLKH, так это то ж самое, но без сохранения предыдущего состояния. А я его специально делал, что б выводить в сериал именно в момент изменения.
Можно затолкать 2 строки в функцию, передавать параметрами номера пинов.
а Пух может класс написать на 3 страницы...
============
основная проблема - необходимость перекидной кнопки. при отсутствии лишних пинов к ней кмоп-повторитель прицепить - и тоже "получаем идеальный результат"
К слову, у меня когда-то прикольные бездребезговые кнопки были: в каждой перекидной контакт и микросхема в планарном (как у серии 164) корпусе, без маркировки.
в продолжение темы решил выложить, как пример использования, данную схему. Делал регулируемый блок питания 1-24В из компьютерного БП. В качестве регуляторов напряжения и ограничения тока использовались обычные потенциометры на 10к. решил заменить их на многооборотные цифровые потенциометры с фиксацией установленного значения.
файлы схемы и печатной платы положил на googledrive
минус этой схемы - ограничение по напряжению питания до +5в, из-за использования микросхем X9C103
а есть предположения, что уже встроено от часов? я попробовал трех-выводной осциллятор ztt, https://ecsxtal.com/store/pdf/ZTT.pdf подключил как к микроконтроллеру подключаются osc in/osc out, работает, но я не знаю, может еще что-чибудь нужно
в мануале только Schmitt Trigger on Clock Input (Pin 7) и oscillator and two-phase clock generator
с конденсатором не понравилось
zaцените https://www.chipdip.ru/product/mc14490dwr2g