Поклонники продукции Microchip Technology Inc тусуются тут.
Ср фев 22, 2017 21:11:49
Вот делаю клавиатуру для пика:
растолкуйте мне принцип работы с такой клавиатурой со стороны программы, то есть как осуществлять опрос и т.д.
Ср фев 22, 2017 22:27:40
Диодов не хватает каждой кнопке.
И читай динамический опрос.
Ср фев 22, 2017 22:28:16
https://yandex.ru/search/?lr=5&msid=148 ... 1%80%D1%8BЗачем тут переписывать то, чего и так навалом в интернете ?
Конкретно, что не понятно ?
Чт фев 23, 2017 05:14:18
Сам принцип таков. Есть "строки", есть "столбцы".
Цикл y от 1 до 4 по строкам
--подаем питание на y
--ждем чуток, пока пин отреагирует и включит питание
--Цикл x от 1 до 4 по столбцам
----если на x 1, то нажата кнопка (x,y)
--конец цикла по столбцам
--убираем питание с y
конец цикла по строкам
то есть суть в том, что по очереди на одну координату подаем питание, а по другой проверяем: появилось ли оно. И если появилось, то нажата кнопка на их пересечении. Далее убираем питание и переходим дальше. Проблемой будет, когда у вас будут нажаты несколько кнопок одновременно. Сигналы при этом будут контактировать друг с другом и на выходе у вас будет дичь (кто кого перетянет). Поэтому, на одну из координат по диоду шоттки воткните, а со стороны другой координаты подтяните к земле (если отсутствием сигнала будет считаться земля). Также не забудьте про дребезг контактов, который в вашем случае можно устранить программно.
Если особо изловчиться, то можно определять даже две одновременно нажатые кнопки. Для этого вам потребуется хранить всю матрицу в массиве, чтобы при анализе нового нажатия вы могли также учитывать существующее. Но это головняк и без особой необходимости лучше считать несколько нажатых кнопок как отсутствие нажатия.
Чт фев 23, 2017 07:16:29
spongebob писал(а):Диодов не хватает каждой кнопке...
дабы не было кз при
LastHopeMan писал(а):одновременно нажатые кнопки
Только не каждой кнопке, а каждому столбцу или строке, в зависимости от того, куда вы подаете опрашивающий сигнал.
Добавлено after 7 minutes:LastHopeMan писал(а):...
--Цикл x от 1 до 4 по столбцам
....
Интереснее считать сразу порт и по маске определить нажатую кнопку.
Чт фев 23, 2017 09:57:16
На каждой кнопке.
Иначе при одновременном нажатии 3х и более кнопок будут ложные срабатывания.
Представьте что вы нажали кнопки с адресами 1.1, 3.1, 3.3
При опросе первой строки окажутся на выходе "нажатыми" 1.1 и 1.3 (хотя 1.3 и не нажата).
П.с. это если есть вероятность одновременного нажатия 3-х и более. Если 2 и более, то на строки(столбцы). Если 1, то ничего не надо.
Чт фев 23, 2017 10:43:55
pyzhman писал(а):Только не каждой кнопке, а каждому столбцу или строке, в зависимости от того, куда вы подаете опрашивающий сигнал.
Вы меня некачественно прочитали
Не говорил я такого.
Чт фев 23, 2017 11:01:00
Прочтите качественно моё предыдущее сообщение.
Чт фев 23, 2017 12:13:58
pyzhman писал(а):Прочтите качественно моё предыдущее сообщение.
Хорошо, тыкну лапой.
pyzhman писал(а):LastHopeMan писал(а):
одновременно нажатые кнопки
Только не каждой кнопке, а каждому столбцу или строке, в зависимости от того, куда вы подаете опрашивающий сигнал.
LastHopeMan писал(а):Поэтому, на одну из координат по диоду шоттки воткните, а со стороны другой координаты подтяните к земле (если отсутствием сигнала будет считаться земля)
Так что ваш косяк
Чт фев 23, 2017 17:32:32
Вы, очевидно, некачественно прочли моё сообщение. Ещё раз -
дабы не было кз при "одновременно нажатые кнопки". Это означает, что для того, чтобы не было короткого замыкания при одновременно нажатых нескольких кнопках, линии нужно развязать диодами. Что является подтверждением ваших слов -
Сигналы при этом будут контактировать друг с другом и на выходе у вас будет дичь
Чт фев 23, 2017 17:59:36
Думаю, качественнее всего было бы наверное использовать ацп для такого количества кнопок. А одновременные нажатия не использовать, тем более судя по всему такая клавиатура скорей всего для ввода пароля понадобится, либо такие нажатия, если они присутствуют в задумке, программно заменить на какой-нибудь иной алгоритм. Тогда и программа проще станет и ног меньше под это дело уйдёт.
Чт фев 23, 2017 18:10:42
Если нет желания ставить на кнопки диоды - сделайте так, что бы в любой момент времени выходом был только один из 8-ми выводов (остальные 7 - входы).
Программа немного усложнится, но деталей на плате будет меньше (особенно, если использовать встроенную "подтяжку" к Vdd /PULL-UP/).
Чт фев 23, 2017 19:11:22
pyzhman писал(а):Вы, очевидно, некачественно прочли моё сообщение. Ещё раз -
дабы не было кз при "одновременно нажатые кнопки". Это означает, что для того, чтобы не было короткого замыкания при одновременно нажатых нескольких кнопках, линии нужно развязать диодами. Что является подтверждением ваших слов -
Сигналы при этом будут контактировать друг с другом и на выходе у вас будет дичь
Я как раз сразу во всем разобрался, в отличие от вас. Вы когда отвечали предыдущему оратору, то вместо его сообщения выдрали цитату из моего. Причем совершенно из другого контекста.
Неужели так сложно просто взять и прочитать с самого начала?
Пт фев 24, 2017 05:32:17
Суть вашего первого поста - необходимость использовать диоды для избежания кз при одновременно нажатых кнопках. Придерживаясь такого же мнения, я использовал ссылку на ваши слова. Очевидно, вы не качественно поняли смысл этого.
Пт фев 24, 2017 10:51:46
Если применить выходы с открытым коллектором, то не надо диодов. Но входы должны быть с подтяжками в плюс.
Чтоб не заставлять проц постоянно опрашивать клаву, - наверно можно сделать обработку по прерыванию.
Пт фев 24, 2017 11:10:23
Или применить ТТЛ микросхемы включая счетчик, но по размеру проигрываем.
Например, так
https://www.youtube.com/watch?v=5H5WsxCqO9A
Пт фев 24, 2017 15:55:22
Однако вопрос ТС состоит
anten89 писал(а):...со стороны программы...
, а не со стороны железа.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.