Клавиатура мутитач

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем ostrov, 16 окт 2016.

  1. Igor68

    Igor68 Гуру

    Вот как раз неактивный физический OUTPUT должен быть не L и не H, а Z! Т.е. нейтральное Z-состояние (в режиме открытого коллектора) - иначе (если невозможно так настроить выход(ы)) диод (катодом к выходу). А INPUT_PULLUP для входов как раз и заменит те резисторы что на схеме. А нажатая кнопка в соседней колонке неактивного выхода (уровень H) как раз и не в цепи - в обрыве (жми-не жми) благодаря тем самым диодам или Z-состоянию выхода.

    Или я слепой..... и может на кнопку по диоду.... но это мазахизм.
     
    Последнее редактирование: 21 окт 2016
  2. ostrov

    ostrov Гуру

    Хоть как выставляй, при трех нажатых буквой Г замыкаются 4 кнопки. Вопрос только в том будет КЗ или нет при этом.
     
    Igor68 нравится это.
  3. Igor68

    Igor68 Гуру

    КЗ-то не будет для выходов (если диоды или открытый коллектор), а другое не важно. А в стандартных клавиатурах похоже работает алгоритм исключений по данным входов (для борьбы с эффектом "Г") - ведь диод на каждую кнопку не ставят - так,как это МАЗАХИЗМ. И кнопка не считается нажатой только за один цикл сканирования всей матрицы.
     
  4. ostrov

    ostrov Гуру

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

    rkit Гуру

    Да никак нельзя бороться. Если у софта цель найти все замыкания, и замыкание в матрице есть, то естественно оно найдется.. Как можно не понимать принцип замкнутой цепи?
     
  6. AlexU

    AlexU Гуру

    Похоже нужна картинка...
    Но сначала зафиксируем цель, которую хочет достичь автор -- возможность корректного распознавания одновременно нажатых кнопок в матричных клавиатурах не зависимо от количества и комбинации нажатых кнопок.
    Так вот в процессе обсуждения пришли к выводу, что простым способом задача не разрешима. Причина на картинке:
    keypad_err.jpeg
     
    Igor68 и ostrov нравится это.
  7. Igor68

    Igor68 Гуру

    Похоже способ не простой..... Возможно при сканировании потребуется не только "бегущий ноль" как в нашем случае но и "бегущая единица"......
     
  8. Igor68

    Igor68 Гуру

    Капнул глубже и... я БАЛБЕС невнимательный за свои высказывания! Если можете - ПРОСТИТЕ!
    1 для MIDI :
    mkc_sch.gif
    Тут нет исключений, да и схема с простым контроллером. Наличие диодов на каждую клавишу - для упрощения сканирования (ранее МАЗАХИЗМ). Да и клавиатура похоже - октавная (пианино).

    2 - модуль ввода-вывода для какого-то простого старого компьютера:
    3728910.jpg
    тут универсальное устройство ввода-вывода - похоже типа КР580ВВ55. Порты настраиваются как угодно. Обратите внимание на то, что подтягивающие резисторы как по строкам, так и по столбцам. Вывод: при сканировании в одном цикле столбцы-выходы, а в другом строки-выходы. А это значит, что перед каждым из циклов происходит настройка входов и выходов для каждого из портов. Это спокойно реализуется на контроллере, а алгоритм определения нажатия комбинации упрощается. Совпадающие значения матрицы при разных режимах сканирования - нажатые клавиши.

    Я всё это к тому, что имеются и до сих пор игрушки на PC (пример "ELITE", "FRONTIER" ну и им подобные), в которых используются комбинации клавиш, которые опционально настраиваются без ограничений и корректно работают (ВПРАВО, ВЛЕВО, ВВЕРХ, ВНИЗ, ОГОНЬ, СКОРОСТ+, СКОРОСТЬ- и т.д) по всей матрице. В игре можно например "ВПРАВО"+"ВВЕРХ"+"СКОРОСТЬ+"+"ОГОНЬ" одновременно. Клавиатура плёночная и без диодов.

    Если я где флудил (ну или блудил)- ПРОСТИТЕ!
     
    Последнее редактирование: 22 окт 2016
  9. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Немного внезапных идей:
    • На вход поставить дополнительные резисторы или делители разных номиналов. Считывать аналоговый сигнал.
    • Использовать входы, как выходы. Если появиться сигнал в другом столбике, он будет замечен.
     
  10. ostrov

    ostrov Гуру

    Как ни крути и не настраивай порты - без аппаратной доработки три кнопки физически замыкают четвертую и ничего тут не поделать. И программно не узнать которая нажата а которая нет, может все четыре нажаты вообще.
     
  11. Igor68

    Igor68 Гуру

    Ну что же, судите сами. Для последней схемы.
    Вывод: при сканировании в одном цикле столбцы-выходы, а в другом строки-выходы. А это значит, что перед каждым из циклов происходит настройка входов и выходов для каждого из портов.

    И сказать мне более нечего.
     
  12. ostrov

    ostrov Гуру

    И не говорите ничего. До тех пор пока не покажете рабочую программу которая это реально делает.
     
  13. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Я имел в виду, на один вход подать ток, а другие считывать, хотя встряли, что-то поменяет.
     
  14. rkit

    rkit Гуру

    Это поможет обнаружить "плохое" сочетание, и только.
     
  15. ostrov

    ostrov Гуру

    Я пробовал и так и сяк. Если избегать сочетаний откровенно короткозамкнутых, то ничего не меняется.
     
  16. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Значения с ошибками - Ошибки = Значения без ошибок
     
  17. rkit

    rkit Гуру

    Нет.
     
  18. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Почему?
     
  19. rkit

    rkit Гуру

    Ну потому что нет. Цель - обработать корректно любые сочетания клавиш. А с этим можно обработать корректно только правильные сочетания клавиш.
     
  20. AlexU

    AlexU Гуру

    Проблема в том, что можно назначить любые комбинации клавиш, но правильно работать будут только некоторые.
    Сейчас родил простенькую программку для проверки клавиатуры. Так вот на ноуте, если последовательно нажимать кнопки 'Q', 'W', 'E', то при одновременно зажатых 'Q' и 'W' кнопка 'E' уже не распознаётся. И, наоборот, при одновременно зажатых 'E' и 'W' уже не распознаётся кнопка 'Q'. Похоже разработчики контроллера клавиатуры решили, что не обрабатывать нажатие кнопки лучше, чем выдавать ложные результаты.