Лікуємо синдром подвійного кліку

- Використовувати програмні засоби фільтрації зайвих кліків. Але це не вирішення проблеми, а лише боротьба з симптомами, до того ж тільки під Windows, тому цей варіант я відмів.
- Підігнути пружину мікровимикача.
- Дехто навіть грішить на клавіатуру. Я навіть заради пристойності перевірив результат очікувано негативний.
- Більшість радить просто замінити мікровимикач. Що я зробив, поставивши кнопку від старої мишки.
Але моя радість була недовгою — через кілька днів подвійний клік повернувся. Розкинувши мізками, я вирішив, що справа в механічних вібраціях, і наклеїв під кнопку товстий скотч. І знову це допомогло лише на кілька днів. Стало ясно, що треба шукати радикального рішення. А для цього треба спершу зрозуміти, що відбувається.
Як зазвичай робляться кнопки у цифрової електроніки? Приблизно так:

Вгорі живлення, внизу земля, праворуч - провід до входу процесора. А на вході в нього затвор польового транзистора. У нашому випадку можна вважати, що це ідеальний вимірювач напруги. Напруга більша за задану — значить, робить висновок процесор, на вході одиниця, а якщо менше — то нуль.
Але якщо вхід у процесора ідеальний, то вимикач таким за всієї поваги вважати не вийде. Коли вимикач замикається, це означає, що один шматок металу стикається з іншим шматком металу. Але між станами «вимкнено» і «включено» є той незручний момент, коли ці два шматки стикаються ледь-ледь. І якщо зараз є контакт, то через мікросекунду він може зникнути, а потім знову відновитися. А часом і зовсім один контакт ударяється про інший і за законами Ньютона відскакує від нього, або навіть кілька разів.Що думає мама процесор? Правильно — він подумає, що вимикач увімкнули, вимкнули, включили, вимкнули, ввімкнули, вимкнули тощо. Хоча «насправді» його включили лише один раз. Це явище навіть має свою назву - брязкіт контактів.
Стривайте, нічого не нагадує? Ах так, аналогічний випадок саме стався з нашою мишкою! Отже, наша робоча гіпотеза буде в тому, що розробники мишки або зовсім не згадували про можливість брязкоту, або їхні старання боротьби з ним були марні. І нам доведеться поборотися із цим ворогом за них.
Зауважимо дві речі. По-перше, швидкість нашого кликання обмежена. Навряд чи ми натискатимемо на мишу більше десяти разів на секунду. По-друге, вимикачі намагаються робити так, щоб момент брязкоту проходив якнайшвидше, і вже напевно за одну десяту секунди кнопка миші встигне заспокоїтися. Таким чином, наше завдання зводиться до відокремлення високочастотних натискань від низькочастотних, тобто нам потрібен фільтр низьких частот. Найпростіший спосіб це зробити - впаяти конденсатор:

Саме цим ми й займемося.
Ось вона – наша кнопка:

А це вона ж, але без кришки:

Підпишемо номери контактів для зручності:

Принцип роботи в наявності - в стані спокою замкнуті контакти 1 і 3, при натисканні кнопки на деякий час всі контакти розмикаються, а потім замикаються контакти 1 і 2. При відтисканні відбувається все те ж у зворотному порядку.
Найскладніша установка для високошвидкісної зйомки:

І, власне, кіно:
Як бачимо, контакт встигає пролетіти всю належну відстань за п'ять кадрів (або 5 мілісекунд), і ніякого видимого брязкоту не спостерігається. Можливо, брязкіт можна було б побачити на осцилограмі, але,на жаль, я згадав про те, що в мене є осцилограф, тільки тоді, коли миша була вже зібрана. Але так чи інакше зрозуміло, що характерний час брязкоту явно менший, ніж мінімальний час кліку, і що межа між ними проходить приблизно на п'яти мілісекундах.
Ліричний відступ. Як би я зробив мишу, якби у мене був вимикач вищенаведеної конструкції? А ось так:

Дешево й сердито. Вхід процесора – це не тільки ідеальний вольтметр, це ще й конденсатор на кілька пікофарад. Так що за ті мілісекунди, поки один контакт летить від другого до третього, напруга не встигне помітно змінитися, а коли він прилетить, конденсатор зарядиться, і навіть якщо контакт стрибатиме, розрядитися він все одно не зможе, тож ніякого брязкоту не буде. Ну хіба тільки він підстрибне аж до протилежного контакту, але це, як ми бачили, вкрай малоймовірна ситуація.
Але доблесні розробники миші, як ми зараз побачимо, не шукають легких шляхів.
Виміряємо наш вимикач мультиметром. По-перше, знаходимо, що жоден із контактів не закорочений на харчування. Ну та гаразд. У стані спокою другого контакту 2,5 вольта харчування, інших — нуль. У натисненому стані на всіх контактах нуль. Це говорить про те, що розробники не пішли моїм шляхом, і входом процесора, мабуть, служить другий контакт, а третій контакт зовсім не використовується. Але найсмішніше – після відтискання кнопки нуль на другому контакті зберігається ще п'ять секунд! На жаль, механізм роботи та переваги такого рішення та мотивація розробників залишаються для мене таємницею. Сподіваюся, хтось із обізнаних людей мене просвітить.
Таким чином, вся наша струнка схема боротьби з брязкотом розбивається про глуху стіну нерозуміння сучасних схемотехнічнихрішень. Але, насправді, не зупинятися, коли справа майже зроблена. Тож паятимемо без розуміння.
Паяти конденсатор будемо між контактами 1 і 2. А для вимірювання ефекту скористаємося скриптом на кшталт ось такого, злегка його підправивши так, щоб він реагував як на відтискання, так і натискання кнопки, і прибравши штучні обмеження часу.
Конденсатор 0,1 мкФ дає час кліку 600 мс. Тобто як би швидко ми не жали, кнопка відлипне не раніше ніж через 0,6 секунди. Це забагато. Методом лінійної екстраполяції припускаємо, що 3,3 нФ дадуть час 20 мс. Паяємо - і бачимо час близько 100 мс. Але цей час включає в себе і час власне руху пальцем, і без конденсатора воно не набагато менше. Перепробувавши ще кілька номіналів, вирішив зупинитися на 3,3 нФ.
Оскільки SMD-конденсаторів не було, довелося паяти ногастий:

На цьому, власне, все. Миша була успішно зібрана і продовжує свою нехитру, але відповідальну службу. Сподіваюся, вищенаведений рецепт буде корисним не тільки моїй мишці.