Я и диод, или новые приключения мышки

Я и диод, или новые приключения мышки

Как вы, быть может, не забывайте, недавно я напаял на собственную мышь конденсатор и весело отчитался об этом эпохальном событии. Но скоро стало известно, что радость моя была преждевременной. Итак, предлагаю вашему вниманию продолжение детективной истории.
Смотрите кроме этого: Новые iPhone Apple продемонстрирует 9 сентября

Общеизвестно, что Apple раз в год в сентябре проводит мероприятие, на котором показывает новые смартфоны iPhone. Как информирует ресурс BuzzFeed, в текущем году презентация состоится 9 сентября.Как и в прошедшем сезоне, большинство презентации будет посвящена новым iPhone, каковые по слухам возьмут дисплей, распознающий силу нажатия, новые модули фото камеры , и более производительный и экономичный чип для беспроводных подключений. Однако, сейчас Apple, возможно, кроме этого продемонстрирует новые iPad, включая 12,9-дюймовую модель iPad Pro.Ещё одним большим анонсом сентябрьской презентации Ap

Нет, кнопка не рассыпалась в прах, как пророчествовал один из комментаторов. И по большому счету никто из присутствующих не предугадал судьбы многострадальной мышки, не смотря на то, что, как я на данный момент осознаю, она была чуть ли не очевидной.По наводке уважаемогоploop я открыл для себя программу xev, которая в числе другого показывает, какие конкретно кнопки надавлены.

Нажимаю я правую кнопку и вижу:О кошмар ButtonPress event, serial 56, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 3959640285, (43,112), root:(1109,578), state 0x10, button 1, same_screen YESButtonPress event, serial 56, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 3959640285, (43,112), root:(1109,578), state 0x110, button 3, same_screen YESButtonRelease event, serial 56, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 3959640436, (43,112), root:(1109,578), state 0x510, button 3, same_screen YESButtonRelease event, serial 56, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 3959640452, (43,112), root:(1109,578), state 0x110, button 1, same_screen YES Другими словами всегда, в то время, когда я нажимаю правую кнопку (3), мышь считает, что надавлена ещё и левая кнопка (1)! На этом месте я отыскал в памяти, что по окончании переделки данной мышью стало нереально позвать контекстное меню в заголовке окна Хрома.

Тогда я не придал этому значения, потому что примерно в тот же период времени отвалилось и перемещение по истории кнопками «вперёд-назад», причём лишь на Хабре/ГТ и лишь у второй мышки, с которой я (мамой клянусь) ничего не делал.Выпаяв конденсатор, я убедился — вправду, в нажатии лишней кнопки виновен именно он. А это ставило крест на всей идее панацеи от дребезга из прошлого поста.

Потому, что выбирать между хабрасуицидом и сделкой с совестью не хотелось, было нужно думать, как побороть этот пренеприятнейший побочный эффект. Так что опять разбираем мышь, врубаем осциллограф и постараемся достигнуть того самого понимания, которого нам так не хватило в прошедший раз.Мышь была основана на известном в народе микроконтроллере nRF24LE1.Путём прозвонки было обнаружено, что все выводы выключателей идут прямиком к ногам процессора, причём любая такая нога связана более чем с одним выключателем.

В случае если правильнее, то схема вырисовывается такая:(Кнопка со звёздочкой свидетельствует кнопку смены dpi, которая на выход мыши не проходит.)Это разрешает заподозрить авторов в применении приёма называющиеся «матричная клавиатура». На сканирующие ноги поочерёдно подаётся сигнал и смотрится, на каких считывающих ногах он показался.

Это разрешает экономить ноги — так как кнопок так возможно поставить пропорционально квадрату числа применяемых ног. (В этом случае у нас 6 выводов и 5 кнопок — другими словами экономится целая одна нога. Но, колесо я прозвонить забыл, так что нельзя исключать, что эта же схема обслуживает и колесо, тогда получается экономия ажно двух ног.)Но пока что это только предположение, нужно его проверить. Натравим крокодилов Подключим проводники P0 и A (в терминах прошлой картины) к осциллографу.

При нажатии левой кнопки (1) видим:На P0 подаётся импульс длительностью 20 микросекунд (отмечен стрелочкой), что по замкнутому выключателю приходит на ногу A. Тут этого не видно, но промежуток между импульсами образовывает около 10-15 миллисекунд. Соответственно, программная защита от дребезга однако присутствует, и делается неясно, как так получается, что она не оказывает помощь. Но возвратимся к нашим баранам и отпустим кнопку:Как мы и ожидали, сканирующий сигнал на считывающей ноге исчезает.

А сейчас надавим левую и правую кнопки в один момент:И опять в полном соответствии с ожиданиями у нас на выходе появляется два сигнала с двух ног, поделённые во времени. В случае если сейчас надавить и среднюю кнопку, то будет три сигнала, каковые сольются в одну громадную чёрточку.А как же получается, что при двух надавленных кнопках сканирующие ноги не закорачиваются между собой и не портят друг другу сигнал? В упомянутой статье для этого предлагается применять диоды.

Тут же всё несложнее — в то время, когда нога неактивна, она переводится в режим Hi-Z (большого сопротивления), другими словами практически отключается от цепи, и тока по ней не идёт. Как свидетельство в пользу этого — в случае если при разомкнутых кнопках небрежно коснуться сканирующего порта, то осциллограф продемонстрирует характерную «шерсть» (другими словами помехи из радиоэфира, принятые отечественным телом):Дабы совсем подтвердить отечественную предположение, поставим опыт.

В случае если нажатие кнопок регистрируется по увеличению напряжения, то в случае если замкнуть сканирующий порт на питание, мышь это обязана воспринять как нажатие всех кнопок, находящихся на этом порту.Замыкаем порт A ButtonPress event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940208, (547,509), root:(1297,734), state 0x10, button 6, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940208, (547,509), root:(1297,734), state 0x10, button 6, same_screen YESButtonPress event, какое количество 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940208, (547,509), root:(1297,734), state 0x10, button 1, same_screen YESButtonPress event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940208, (547,509), root:(1297,734), state 0x110, button 3, same_screen YESButtonPress event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940208, (547,509), root:(1297,734), state 0x510, button 2, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940253, (547,509), root:(1297,734), state 0x710, button 2, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940268, (547,509), root:(1297,734), state 0x510, button 1, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059940268, (547,509), root:(1297,734), state 0x410, button 3, same_screen YESЗамыкаем порт B ButtonPress event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059977818, (172,409), root:(922,634), state 0x10, button 7, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059977818, (172,409), root:(922,634), state 0x10, button 7, same_screen YESButtonPress event, serial 166, synthetic NO, window 0xb200001, root 0аккумуляторная274, subw 0x0, time 4059977818, (172,409), root:(922,634), state 0x10, button 8, same_screen YESButtonPress event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059977818, (172,409), root:(922,634), state 0x10, button 9, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059977950, (172,409), root:(922,634), state 0x10, button 8, same_screen YESButtonRelease event, serial 166, synthetic NO, window 0xb200001, root 0x274, subw 0x0, time 4059977950, (172,409), root:(922,634), state 0x10, button 9, same_screen YESСнова всё так, как мы предполагали, плюс обнаружились «пасхальные» кнопки 6 и 7, которых физически на мыши нет (колесо соответствует кнопкам 4 и 5).Итак, мы познали истину о мыши и её кнопках. Но как это нам окажет помощь совладать с отечественной изначальной напастью?

Для этого нам нужно осознать ещё две вещи — из-за чего конденсатор задерживает отпускание кнопки и из-за чего он содействует её нажатию при нажатии второй кнопки.В то время, когда мы замыкаем кнопку 1, конденсатор мгновенно разряжается, и напряжение на нём делается равным нулю. До тех пор пока кнопка надавлена, конденсатор закорочен, так что мышь принимает нажатие кнопки так, как если бы конденсатора не было.Сейчас отпустим кнопку. Потому, что конденсатор владеет ёмкостью, напряжение на нём всё ещё равняется нулю.

Соответственно, в случае если подать на P0 сканирующее напряжение (2,5 В питания), то и на входе A кроме этого будет 2,5 вольта, что соответствует надавленной кнопке.Но с каждым таким импульсом конденсатор понемногу будет заряжаться (через сопротивление R1). И в один красивый момент он зарядится, скажем, до 2 вольт, и на входе A будет уже 0,5 вольт, что не хватает для появления на этом входе единицы.

Значит, некое время по окончании отпускания кнопки мышь будет думать, что кнопка ещё надавлена, а после этого «осознает», что её отпустили.Возможно кроме того примерно оценить это время. Отечественная RC-цепочка складывается из сопротивления в 13 кОм и конденсатора, к примеру, 0,1 мкФ. Перемножаем эти две величины и находим характерное время 1,3 миллисекунды.

Но потому, что ток течёт не всё время, а только 20 микросекунд каждые 10 миллисекунд, это время растягивается до 0,65 секунды — как мы и намеряли в прошедший раз.Возможно было бы обрадоваться такому правильному совпадению расчёта с опытом, но нужно внести ещё ложку дёгтя. Дело всё в том, что характерное время — это время, за которое напряжение падает в число e, другими словами в 2,7 раз. Но даташит на nRF24LE1 говорит нам, что Input high voltage равен 0,7 VDD, а Input low voltage 0,3 VDD.

Другими словами входы отечественного процессора трудятся как триггер Шмитта, и дабы они восприняли единицу, нам нужно поднять напряжение до 0,7 напряжения питания. Из-за чего мы забрали 0,7, а не 0,3, спросите вы? Весьма легко — потому, что главную часть времени на входе A чистый ноль, то в момент импульса нам нужно поднять напряжение до 0,7 питания, в противном случае триггер Шмитта не переключится на единицу. Так что расчёт даёт времяln(0,7) / ln(1/e) * 0,65 = 0,23 секунды.А практически у нас 0,6 секунды!

В случае если вычесть время, в то время, когда кнопка замкнута — это 0,5 секунды, что всё равняется большое количество. Дабы это растолковать, возможно высказать предположение, что в режиме Hi-Z сопротивление ноги P0 однако конечно, и «втихаря» подразряжает конденсатор в промежутке между измерительными импульсами.

Весьма грубо из отечественных разрешённых можно оценить его величину — потому, что оно за 10 мс разряжает конденсатор на величину, сопоставимую с той, на которую он заряжается за 20 мкс, это сопротивление более 6,5 мегаом.И тут нужно отыскать в памяти ещё один факт, которому я не придал значения. В частности, в случае если напаять конденсатор меньший, чем 2 нФ, то мышь будет думать, что кнопка надавлена неизменно.

И сейчас этот факт приобретает объяснение — за 10 миллисекунд конденсатор успевает разрядиться (2 нФ * 6,5 МОм = 13 мс), так что при импульсе триггер Шмитта срабатывает, а до тех пор пока данный импульс идёт, конденсатор заряжается (2 нФ * 13 кОм = 26 мкс), но не успевает зарядиться до таковой степени, дабы преодолеть порог в 0,3 напряжения питания.Сейчас посмотрим, что будет, в то время, когда мы пожмём не левую, а правую кнопку.В состоянии спокойствия на конденсаторе у нас 2,5 вольта. Замкнём выключатель 3, и на проводник A отправятся 20-микросекундные импульсы с порта P2.

Но в случае если на A 2,5 вольта плюс на конденсаторе 2,5 вольта, то на ноге P0 должно быть уже 5 вольт! А контроллер вычислен не более чем на 3,6 вольт. Специально для таких случаев в микросхемах предусматривают защитные диоды, дабы напряжение на входах не превышало напряжения питания:Значит, когда на P2 покажется напряжение питания, конденсатор разрядится через данный диод, и на нём будет уже 0,7 вольта, в противном случае и меньше. А после этого он ещё дополнительно разрядится через 6,5 мегаом.

А в то время, когда настанет пора измеряющего импульса на ноге P0, напряжение на конденсаторе будет так мало, что на входе A будет практически полное напряжение питания и как следствие чёткая единица. Вот мы и взяли нажатие левой кнопки при нажатии правой.Сейчас, наконец, мы ответили на все вопросы из разряда «кто виноват», осталась лишь самая малость — что делать?

Потому, что корень отечественной неприятности в разрядке конденсатора, поставим на пути этого тока преграду в виде диода:Я отыскал первый попавшийся диод, припаял — и вправду, несанкционированные нажатия кнопки более не происходят. Вот лишь и задержка по окончании отпускания левой кнопки провалилась сквозь землю. Как же так? А весьма легко — как мы уже знаем, для срабатывания на входе A должно быть не меньше 0,7 напряжения питания, другими словами на всей связке «конденсатор+диод» должно быть не более 0,75 вольта.

А на диоде, как мы знаем, падает около 0,7 вольта, плюс ещё конденсатор — вот и не достаточно напряжения.Нам окажет помощь диод Шоттки, прямое падение напряжение на котором заметно меньше, чем на простом диоде.К сожалению, я не смог отыскать у себя диодов Шоттки, исходя из этого я отыскал диод с мельчайшим падением напряжения (мультиметр показывал 0,44 В) и напаял его чисто дабы убедиться, что предложенное ответ трудится. Имеете возможность его поискать на КДПВ (подсказка — он чёрно-розовый).

Было нужно кроме этого поднять напряжение питания до 3,3 В, но однако желаемый эффект был достигнут! Задержка отпускания кнопки — целых 0,4 секунды, наряду с этим ни одна кнопка не нажимается «за компанию». Действительно, по очевидным обстоятельствам сию конструкцию было нужно разобрать, но основной вывод был сделан — диоды Шоттки спасут отца русской народовластия.Вот, фактически, и сказке финиш.

Случайная статья:

Новые приключения крысы в городе Выполняем задания Мультик Игра СИМУЛЯТОР МЫШИ виртуальный питомец


Похожие статьи:

Комментирование и размещение ссылок запрещено.

Обсуждение закрыто.