Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Алгоритм обработки матриц кнопок

 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
day177
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.12.2006
Сообщения: 51
Откуда: Тула

СообщениеДобавлено: 04 Июн 2007, 8:41    Заголовок сообщения: Алгоритм обработки матриц кнопок Ответить с цитатой

Собственно интересует алгоритм матриц кнопок, а не готовый код. Готовых кодов много, а сам алгоритм несколько непонятен. Если кому не сложно прошу накидать алгоритм обработки матрицы кнопок. Желательно по-понятнее чтобы было понятно даже такому %$%^(( как я Улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
urry
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 04 Июн 2007, 10:17    Заголовок сообщения: Ответить с цитатой

Алгоритм такой - есть строчки и есть столбцы. На их пересечении -кнопки.Столбцы подсоединены к выходам микроконтроллера, а строчки - к входам - или наоборот, не суть. На выходы подаешь логическую 1 или логический ноль - по вкусу. Допустим -1.С входов считываешь инфу. Если кнопка на пересечении нажата, то соответственно эту 1 вы имеете на входе. Зная, на какой выход мы подали 1 и с какого входа мы эту же 1 считали - мы имеем код нажатой клавиши. Если ничего не нажато, то снимаем 1 с текущего разряда выхода и переносим на следующий - и так далее по кольцу. Обычно входы навешаны на прерывание и анализируем прерывание - что на выходе и на входе- отсюда код кнопки. Если нажаты одновременно 2 кнопки в разных выходах, то через них мы можем закоротить выходы - 1 на 0. Чтобы короткого избежать, то раньше выходы развязывались диодами. Сейчас клаву делают из токопроводящей резины, ток через которую не может подняться до опасного и поэтому диодами не заморачиваются.
_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DL36
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 04.10.2006
Сообщения: 192
Откуда: Херсон

СообщениеДобавлено: 04 Июн 2007, 17:14    Заголовок сообщения: Ответить с цитатой

urry писал(а):
Алгоритм такой - есть строчки и есть столбцы. На их пересечении -кнопки.Столбцы подсоединены к выходам микроконтроллера, а строчки - к входам - или наоборот, не суть. На выходы подаешь логическую 1 или логический ноль - по вкусу. Допустим -1.С входов считываешь инфу. Если кнопка на пересечении нажата, то соответственно эту 1 вы имеете на входе. Зная, на какой выход мы подали 1 и с какого входа мы эту же 1 считали - мы имеем код нажатой клавиши. Если ничего не нажато, то снимаем 1 с текущего разряда выхода и переносим на следующий - и так далее по кольцу. Обычно входы навешаны на прерывание и анализируем прерывание - что на выходе и на входе- отсюда код кнопки. Если нажаты одновременно 2 кнопки в разных выходах, то через них мы можем закоротить выходы - 1 на 0. Чтобы короткого избежать, то раньше выходы развязывались диодами. Сейчас клаву делают из токопроводящей резины, ток через которую не может подняться до опасного и поэтому диодами не заморачиваются.

Как правило кнопки подключают на порт имеющий подтягивающие резисторы. Столбцы поочереди коммутируем в ноль и анализируем состояние на входах.
Поищите поиском примеров должно быть много.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
day177
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.12.2006
Сообщения: 51
Откуда: Тула

СообщениеДобавлено: 05 Июн 2007, 9:45    Заголовок сообщения: Ответить с цитатой

Цитата:
Поищите поиском примеров должно быть много.

примеров-то не просто много - я бы сказал до фига. Интересовал именно алгоритм.

Еще вопросец: как быть с дребезгом?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
urry
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 05 Июн 2007, 9:56    Заголовок сообщения: Ответить с цитатой

http://www.remexpert.com/forum/viewtopic.php?t=1290
Вы читаете форум ?

_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DL36
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 04.10.2006
Сообщения: 192
Откуда: Херсон

СообщениеДобавлено: 11 Июн 2007, 9:08    Заголовок сообщения: Ответить с цитатой

day177 писал(а):
Цитата:
Поищите поиском примеров должно быть много.

примеров-то не просто много - я бы сказал до фига. Интересовал именно алгоритм.

Еще вопросец: как быть с дребезгом?

Я начинал с книги "ДЖ. Коффрон" "Технические средства микропроцессорных систем." Москва Мир 1983г.
Если найдете будет полезно почитать, некоторые вещи устарели, но если посмотреть через призму современной эл. базы многое еще очень даже актуально.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
day177
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.12.2006
Сообщения: 51
Откуда: Тула

СообщениеДобавлено: 12 Июн 2007, 22:52    Заголовок сообщения: Ответить с цитатой

to urry
вот что получилось (пока без антидребезга). Клава 4х4, порт B, старший нибл выходы нули, при скане 1, младший нибл входы с нулями на входе при незамкнутых кнопках

Код:
unsigned char kb_skan (void){

key=0;

PORTB.4=0; PORTB.7=1;//выставить на бит7 ЕДИНИЦУ
if (PINB<<4) key=(128+(PINB&0x0F));//если на одном из входов есть единица - сгенерить код кнопки

PORTB.7=0; PORTB.6=1;//выставить на бит6 ЕДИНИЦУ
if (PINB<<4) key=(64+(PINB&0x0F));//если на одном из входов есть единица - сгенерить код кнопки

PORTB.6=0; PORTB.5=1;//выставить на бит5 ЕДИНИЦУ
if (PINB<<4) key=(32+(PINB&0x0F));//если на одном из входов есть единица - сгенерить код кнопки

PORTB.5=0; PORTB.4=1;//выставить на бит4 ЕДИНИЦУ
if (PINB<<4) key=(16+(PINB&0x0F));//если на одном из входов есть единица - сгенерить код кнопки

}

приветствуются пинки и ругательства Улыбка

Кстати может кто знает как побороть в протеусе ошибку "[SPICE] Error 106 - TRAN: Timestep too small; time = 0.0389233, timestep = 8.67362e-019: trouble with node "#00000"" версия 6.7

PS Тo moderator - переименуйте пожалуйста тему в "алгоритм и программа обработки матриц кнопок"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
urry
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 23.10.2006
Сообщения: 243

СообщениеДобавлено: 13 Июн 2007, 8:33    Заголовок сообщения: Ответить с цитатой

Зачем передавать 1, если проще действительно -0. 1 на входе Вы можете получить, подключив подтягивающие резисторы.

Эти иф -ельзе - заморачивают - выдавайте просто байтом на порт и принимайте точно так же (замаскировав неиспользуемые) - меньше возни.
И, наконец, это безрассудная трата ресурсов компа - включать опрос клавиш нужно по прерыванию (изменение состояния портов).

_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DL36
Живет здесь... (>100)
Живет здесь... (>100)


Зарегистрирован: 04.10.2006
Сообщения: 192
Откуда: Херсон

СообщениеДобавлено: 13 Июн 2007, 12:22    Заголовок сообщения: Ответить с цитатой

Если что то непонято всегда надо обращаться к класике

day177 писал(а):

вот что получилось (пока без антидребезга). Клава 4х4, порт B, старший нибл выходы нули, при скане 1, младший нибл входы с нулями на входе при незамкнутых кнопках

приветствуются пинки и ругательства Улыбка

Кстати может кто знает как побороть в протеусе ошибку "[SPICE] Error 106 - TRAN: Timestep too small; time = 0.0389233, timestep = 8.67362e-019: trouble with node "#00000"" версия 6.7

PS Тo moderator - переименуйте пожалуйста тему в "алгоритм и программа обработки матриц кнопок"


Ключи располагаются в матрице следующим образом. Один вывод каждого ключа соединен с одной из вертикальных линий Со—С4, другой вывод соединен с одной из горизонтальных линий Ro—R4. Горизонтальные линии R0-R4 являются входными линиями матрицы ключей клавишного пульта. Вертикальные линии являются выходными линиями матрицы ключей. В каждый момент времени только одна из горизонтальных линий R0-R4 может иметь уровень логического 0, т. е. когда на линии R0, например, установлен уровень логического 0, то на линиях R1, R2 и Ri должен быть уровень логической 1. Таким взаимно исключающим способом выполняется установка уровня, соответствующего логическому 0, для каждой горизонтальной линии. Понятие «взаимно исключающий способ» означает, что в любой конкретный момент времени только одна горизонтальная линия может иметь уровень логического 0.
В то время как единственная горизонтальная линия имеет уровень логического 0, вертикальные выходные линии матрицы клавишного пульта проверяются микропроцессорной системой. Если при этом обнаруживается замкнутый ключ, то соответствующая ему вертикальная линия получает уровень логического 0. Вертикальная выходная линия будет иметь уровень логического 0 тогда и только тогда, когда замкнутый ключ соединяет ее с входной линией, на которой будет установлен уровень логического 0. Чтобы подробнее рассмотреть этот вопрос, допустим, что в данный момент замкнут ключ, имеющий на схеме обозначение R3C2. Такое обозначение показывает, что соответствующий ключ в положении «замкнуто» соединяет входную линию 3 и выходную линию 2. Во время «просмотра» клавиатуры с помощью программных средств системы могут иметь место следующие события. Под термином «просмотр» мы понимаем, что система поочередно переводит каждую входную линию в состояние логического 0 и анализирует состояние выходов матрицы.
Линия Ro устанавливается в состояние логического 0. Все Другие входные линии при этом имеют уровень логической 1. Пока на горизонтальной линии R0 поддерживается уровень логического 0, выходные линии анализируются с помощью программного обеспечения системы. Ниже будет разъяснено, как горизонтальные линии устанавливаются в состояние логического 0 и каким образом с помощью программного обеспечения проверяются выходные линии. Если ключ R3C2 замкнут и на входной линии Ro установлен уровень логического 0, на всех выходных линиях будет уровень логической 1. Это объясняется тем, что на вертикальных линиях уровень напряжения доведен до +5 В через согласующие резисторы PR1—PR5. Поскольку линия Ro не соединена с помощью ключа ни c одной вертикальной линией, ни на одной выходной линии не может быть уровня напряжения, соответствующего логическому 0.
Аналогично система будет реагировать на установку уровня логического 0 на входных линиях R0, R1, R2 и R4. Однако, когда на горизонтальной линии R3 будет установлен уровень логического 0, произойдет следующее. На выходной линии Q также установится уровень логического 0. Это объясняется наличием электрического тракта через ключ R3C2. Он образован вертикальной линией С2, замкнутым ключом и горизонтальной линией R3. После того как система обнаруживает уровень логического 0 на какой-нибудь вертикальной линии, она определяет ключ, замыкание которого обусловило это событие.
Система определяет «координаты» замкнутого ключа путем «электрического» запоминания номера горизонтальной линии, установленной в состояние логического 0, и посредством логического определения номера вертикальной линии, имеющей уровень логического 0.
По моему очень доступно написано Радостный
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.5824s (PHP: 92% - SQL: 8%) - SQL запросов: 11 - GZIP enabled - Debug on