Pull to refresh

Comments 32

пропустив нулевой и первый
— их лучше всегда пропускать, так как по ним происходит заливка скетча.
И это верно, но так-как статья рассчитана на новичком, то решил уточнить этот момент.
я просто оставлю это здесь:

habr.com/ru/info/help/posts
Признаки хороших и плохих публикаций
Плохая публикация:
содержит реферальные ссылки на что угодно;
Согласен, где здесь реферальные ссылки? Единственная ссылка, которая есть в статье, это ссылка на одну из клавиатур с алика, потому-что я рассказывал о подключении и использовании аналоговых клавиатур на её примере, а сам код может быть переделан под любую из них. И это ни в коем случае не реклама, по-этому я оставил универсальные советы о подключении, которые можно использовать при работе с любым модулем данного типа.
Извиняюсь — мой косяк. Копипастнул просто адрес страницы, на которой был, не обратив внимания. Уже в статье исправил, не бросайте помидорами, пожалуйста.

spm это не реф. Это обычный родной трекерный параметр али. Если-б ссылка была аля али.паб то да, а это трекинг. Тоже вещь неприятная (для носителей шапочек из фольги), но автору никаких бонусов не даст.
И в том и в том случае — вы могли-бы написать автору в ЛС про этот косяк, явно ссылка приведена не для получения миллионов рублей на продаже клавиатур для дуины.

Лучше такое человеку в личку написать…

Мне кажется статьи про ардуино надо убрать с хабра — они разжижают мозг.
Боюсь, проблема не в ардуино. Статей «ни о чём» — на любую тему хватает.
Аналоговая клава — это адский мусор, любая наводка приводит к ложным срабатываниям. Ладно бы еще 4 кнопки на вход, тут дельта между значениями была бы вменяемой. Но 16 это перебор.
Еще в скетче нет обработки bounce на кнопках. Надо считывать несколько значений и усреднять, иначе количество ложных срабатываний просто зашкалит.
Возможно вы имели дело с браковаными либо некачественными модулями. Я, лично, использую аналоговую клавиатуру для своего проекта и не фиксирую ложных нажатий вообще. Возможно просто я использую модель в которой физически устранены ложные срабатывания, ведь кнопки очень жесткие и громкие при нажатиях и буквально чувствуется, как сильно кнопка уходит вниз при нажатии. Конечно эти выводы я делаю не разбирая клавиатуры, ведь не вижу смысла исправлять то, что стабильно работает.
С клавиатурами для ардуино есть одна маленькая проблема: если вдруг захочется больше чем шестнадцать кнопок, то все становится трагично. Что только ни приделывают в качестве той же qwerty-клавиатуры, включая аж ее саму целиком через переходник.
Не вижу проблемы. Если нужно больше 16 кнопок, можно последовать одному из следующих пунктов:
  • Подключить несколько аналоговых клавиатур в разные аналоговые порты
  • Подключать кнопки по-отдельности в разные цифровые пины
  • Реализовать собственный модуль, который будет использовать к примеру 3-4 пина и работать по следующему принципу: нажата 1-4 кнопка — сигнал на соотвествующий пин, нажата шестая — на два первых пина, седьмая — на второй и третий, с 8-ой аналогично и так комбинируя сигналы с разных пинов, можно получать информацию о нажатой кнопки, ну а если вам нужно слишком много кнопок, можно выделить собственный микро-контроллер для клавиатуры, используя все его пины для обработки нажатий, а второму микроконтроллеру передавать уже только уже готовую информацию о нажатой кнопке.
Да и ps/2 тот же приделывается. Но это совсем не тот «подключи и играй», которого хочется от ардуины. Вот захотел сорок кнопок — и вот вместо «тыц готовый модуль» жонглируешь пинами, резисторными делителями, триггерами и бог невесть чем.

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

Приделывал PS/2 к ардуине, кроме разъёма ничего и не понадобилось.
А вообще для экономии пинов набор из входных + выходных сдвиговых регистров поможет практически сколько влезет кнопок сделать :-)

Даже регистров уже не надо, есть специализированные микросхемы расширителя I/O. Например, MCP23017 — подключается к SPI или i2c, даёт 16 двунаправленных линий ввода-вывода. Их можно подключить восемь штук сразу — и хоть по индивидуальному проводу к каждой кнопке полноразмерной клавиатуры от PC делай.
Если коммутировать линии (на схеме по Вашей ссылке — столбцы) выходами с открытым стоком, то диоды не нужны. Правда, на atmega нет нормального режима вывода как выхода с открытым стоком, поэтому придется извращаться переключая режим вывода. Подтягивающие резисторы для входов можно использовать внутренние.
В форумах описывают случаи выхода из строя портов МК при нажатии двух кнопок одновременно.
Если опрос столбцов проводить выводами, работающими в режиме пуш-пулл, то при одновременном нажатии двух кнопок, подключенных к разным столбцам и одной и той же строке произойдет замыкание двух выходов, имеющих разный логический уровень. Естественно, ни к чему хорошему это не приведет — даже если выходные ключи контроллера и не выгорят, то сбои точно гарантированы. Если же Вы будете проводить опрос столбцов выходами с открытым стоком, которые могут тянуть линию только «вниз», то никакого замыкания не будет. Собственно диоды в Вашей схеме и делают пуш-пулл выходы неким сурогатным аналогом выходов с открытым стоком, правда, ценой поднятия уровня логического нуля на величину падения не диодах, что не совсем хорошо сточки зрения помехозащищенности.
К сожалению, насколько помню, выходные каскады atmega, применяемых в Ардуинах, не имеют штатного режима работы в режиме с открытым стоком. Но это можно сэмулировать, переключая режим ножки между выходом с логическим 0 (эквивалентно установке выхода с открытым стоком во включенное состояние выходного транзистора) и входом с отключенной подтяжкой (эквивалентно установке выхода с открытым стоком в выключенное состояние выходного транзистора). Естественно, проводить эти манипуляции стоит прямым обращением к регистрам, а не ардуиновскими функциями конфигурирования выводов, занимающими десятки (если не сотни) тактов процессора.
Здесь очень много «если», причем программной реализации. Отладка программ новичками (да и не только) может привести к неосознанным действиям с режимами портов. Аппаратная защита исключает этот фактор. В любом случае я не стал бы соединять напрямую порты ввода/вывода.
Здесь очень много «если», причем программной реализации. Отладка программ новичками (да и не только) может привести к неосознанным действиям с режимами портов.
Этим эмбеддинг кардинально и отличается от обычного программирования, что ошибки в программе могут приводить к повреждению оборудования. И если с условным опросом клавиатуры этого еще можно избежать, то, например, при управлении силовыми ключами в двухтактном включении и т.д. «бах» можно устроить вполне реальный.
Возвращаясь к нашей клавиатуре — просто на этапе отладки, пока не убедились, что все работает правильно, не надо нажимать по две клавиши сразу. А как только все заработало как надо — тогда на здоровье, жмите хоть все сразу.
Впрочем, Ваше мнение может быть и более полезно, чем мое для типового Ардуинщика, не желающего вникать в детали и становиться профессионалом.
Тут даже дело не в том, что нет желания вникать в детали. Любая электроника должна быть защищена. Вы же не будете писать в даташите на устройство «две кнопки сразу не нажимать, процедуру опроса клавиатуры не менять».
Немного не понял, что Вы здесь имеете ввиду под даташитом. Если инструкцию конечного пользователя готового устройства, то почему нельзя нажимать сразу несколько клавиш? В устройстве с отлаженной программой вполне можно нажимать сколько угодно клавиш одновременно. А какие есть ограничения в процессе отладки — это конечного пользователя никак не касается.
процедуру опроса клавиатуры не менять
— ну если кому-то приспичило перепрограммировать устройство — то это его личное дело, но и ответственность за свои действия несет только он.
Речь идет о монтажной схеме в статье, для которой предложена схема аппаратной защиты. Для меня важнее было обратить внимание на этот нюанс. Спасибо, что поддержали диалог. Ваше решение имеет право реализации.
Есть ещё очень удобная микросхема MM74C922 16-Key Encoder.
Защита от дребезга, встроенные диоды и прочие «плюшки».
PDF c datasheet гуглится легко.

Да уж, статьи на хабре о подключении матричных клавиатур к Ардуино. :(
Только у меня складывается впечатление, что «знание» Ардуино безвозвратно портит людей?
А не думали ли Вы, что гораздо и проще и правильнее подключить PS/2 Numpad, коих более чем много на упомянутом али? И выводов займет мало и не будет сюрпризов с кнопками через некоторое время (как это бывает в аналоговых клавиатурах мониторов)?
Но да, для этого надо бросить Ардуину в дальний ящик и заняться программированием.

Вы слишком категоричны. Увлечение ардуиной для утилитарных задач дает очень хороший старт для энтузиастов без знаний. Для многих это остается увлечением ради одной задачи, например поливалки для теплиц у моего брата — он ее спаял и никогда больше не прикасался к дуине и МК вообще. И тут играет важную роль а) низкий порог входа, потому что на ардуине я за вечер смог сделать свой GPS — SD логгер ВООБЩЕ без знаний в Си/асм или алгоритмах и б) большое комьюнити в интернете. Со своей колокольни вы можете смотреть на это как на детей играющих паровозиком в песочнице, однако если оно выполняет своюи задачи за минимальные затраты времени и денежных вложений — оно займет обширную нишу.


А про PS/2 numpad — смешно. Готовое изделие, которое нужно будет разбирать в 99% для своих поделок и полуфабрикат...

От того и грустно, что Habr становится пристанищем для статей «про детей и паровозики в песочнице». :(

P.S. Зачем разбирать Numpad? У него же вполне простой и понятный интерфейс PS/2, по которому документации ну очень много.

Это не грустно, это нормально. На одних гиках жизни нет, их мало, зато в таких "масло-масленых" статьях есть люди уже прошедшие весь этот путь и могущих ткнуть лицом в типичные ошибки новичков и вовремя остановить их от неверного пути. Мне-бы такое в те года когда я начинал — может сейчас-бы уже знал STM или PIC, а не рукоблудил с дуинами pro mini, однако тогда на хабре были статьи от которых челюсть падала на стол от непонимания всего этого "дзюдо".


Разбирать нампад надо т.к. чаще всего человеку нужна не внешняя клавиатура, а клавиши встроенные куда-то. У меня вот клавиатура в ракете, клавиатура в макете устройства из Counter-Strike, клавиатура в ящике кодовом, клавиатура в ящике координатном, клавиатура в рации… Для всех этих вещей мне пришлось-бы разбирать нампад, а это лишние действия.

Sign up to leave a comment.

Articles