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

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

  1. ostrov

    ostrov Гуру

    Я его видел и делал на этой микросхеме клавиатуры и индикаторы. В форуме этом даже видео выкладывал и не раз. Вопрос был про клавиатура + МК. Если не можете ответить, то зачем предлагать другие варианты да еще так не прямо.
     
  2. Limoney

    Limoney Гик

    На схеме подключены контакты кнопок по колонкам к сегментам и к линиям k1, k2.
    То есть одна линия может быть для сегмента и для кнопки. Принцип похожий.
     
  3. ostrov

    ostrov Гуру

    Допустим, нажаты C и F. Что будет на выходе этого ряда при сканировании? Ведь один сканирующий пин всегда будет противоречить другому.
    [​IMG]
     
  4. Vad33

    Vad33 Капитан-оригинал

    Плохо думали, поковыряйте исходники
    Почему это?
     
  5. AlexU

    AlexU Гуру

    Пояснение как сделать сканирование матричной клавиатуры (схема в посте №4, который Вам нравиться).
    Это один из множества способов, не претендующий быть лучшим среди остальных. Для примера возьмём контроллер ATmega328 (Arduino UNO т.п.).

    UPD: допустил некоторые ошибки, которые могут привести к нехорошим последствиям, поэтому исправляю...

    Верхние четыре линии ("строки клавиатуры") подключаются к выходам контроллера настроенными на выход и с высоким уровнем (OUTPUT + HIGH). Нижние четыре Все 8 линий к выходам настроенными на вход и подтянутыми к VCC (INPUT_PULLUP). Сканировне производим следующим образом -- меняем направление одного (обращаю внимание -- только одного) из верхних четырёх выходов на OUTPUT с состоянием LOW, и смотрим есть ли изменения состояний на "входных" пинах (нижних четырёх). Например, изменили состояние самого первого выхода (самая верхняя линия клавиатуры) на LOW, тогда, если была нажата кнопка '0', первый входной пин (четвёртая линия клавиатуры снизу) перейдёт в состояние LOW, если одновременно с этим была нажата ещё и кнопка '1', то второй пин (третья снизу) так же перейдёт в LOW и т.д (хоть одновременно все четыре кнопки строки нажмите). После сканирования первой строки переводим пин в состояние INPUT_PULLUP и начинаем сканировать вторую и т.д. бегаем в цикле по строкам. "Бегать" по строкам нужно с такой частотой, что бы обеспечить реакцию на нажатие кнопки. Что в принципе под силу контроллеру, работающему даже на частоте <1 МГц.

    PS: Пока сочинял пост появился вопрос:
    При сканировании четвёртой строки (четвёртая сверху в OUTPUT + LOW, остальные верхние INPUT_PULLUP) на входах '0' и '3' (четвёртая снизу и самая нижняя) будет низкий уровень, на остальных двух высокий, что будет соответствовать нажатию кнопок 'C' и 'F'.
     
    Последнее редактирование: 17 окт 2016
    ostrov нравится это.
  6. rkit

    rkit Гуру

    c + f + b
     
  7. ostrov

    ostrov Гуру

    Как сканировать по одной кнопке я не спрашиваю.

    Но при нажатии C и F на четвертую строку будет постоянно подаваться HIGH и LOW одновременно и не известно кто победит, так как по сути это КЗ.
     
  8. Vad33

    Vad33 Капитан-оригинал

    Тут товарищи имели в виду, а если при таком раскладе нажимать 0 - 4 - 8 - С. :)
     
  9. ostrov

    ostrov Гуру

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

    Vad33 Капитан-оригинал

    «Знание немногих принципов освобождает от знания многих фактов»
    Собрал работает, никакого КЗ. :) ...и без диодов.
     
    ИгорьК нравится это.
  11. ostrov

    ostrov Гуру

    Тут надо или логику менять как то, пока не знаю как или схему подключения
     
  12. ostrov

    ostrov Гуру

    Покажите программку.
     
  13. Vad33

    Vad33 Капитан-оригинал

    IMG_20161017_205202.jpg
    Схема.
    Над принципами думайте, а то привыкли, понимаешь, копипастить.
     
    Последнее редактирование: 17 окт 2016
  14. Vad33

    Vad33 Капитан-оригинал

    То что программа выдает:
    Код (C++):
    Key 1 PRESS=
    Key 1 RELEASE=
    Key 1 IDLE=

    Key 2 PRESS=
    Key 2 RELEASE=
    Key 2 IDLE=

    Key 2 PRESS=
    Key 1 PRESS=

    Key 1 RELEASE=
    Key 2 RELEASE=

    Key 1 IDLE=
    Key 2 IDLE=
     
    по горизонтали нажатия

    Код (C++):
    Key 1 PRESS=
    Key 1 RELEASE=
    Key 1 IDLE=
    Key 4 PRESS=
    Key 4 RELEASE=
    Key 4 IDLE=
    Key 7 PRESS=
    Key 7 RELEASE=
    Key 7 IDLE=

    Key 1 PRESS=
    Key 7 PRESS=
    Key 1 RELEASE=
    Key 1 IDLE=
    Key 7 RELEASE=
    Key 7 IDLE=

     
    по вертикали нажатия
    Сначала по одной кнопке нажатия, потом по две.
     
  15. ostrov

    ostrov Гуру

    Это вы мне про копипастить?
     
  16. Vad33

    Vad33 Капитан-оригинал

    Это для всех сомневающихся. То что нужно было, все уже в этой ветке есть.
     
    ostrov нравится это.
  17. AlexU

    AlexU Гуру

    Да действительно в первоначальном варианте была допущена ошибка, исправил алгоритм опроса клавиатуры...
     
  18. ostrov

    ostrov Гуру

    Мне не надо решение для использования, мне нужно понять принцип опроса. Он тут явно другой нужен, так как иначе при нажатии кнопок на одной строке получится фигня. Ладно, вечером подумаю еще, будет чем заняться.
     
  19. Vad33

    Vad33 Капитан-оригинал

    Принцип опроса тот же самый, за исключением маленькой мелочи,
    к которой все настолько привыкли, что делают на автомате.
     
  20. ostrov

    ostrov Гуру

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