Перейти к содержанию

Atmega16A подключение матричной клавиатуры. Какой способ лучше


freebits

Рекомендуемые сообщения

20 минут назад, Serb_ret сказал:

Причем тут мое описание назначения диодов в исходном алгоритме к Вашему алгоритму???

 Та Вы тут вообще при чем?) Мне сказали что мой алгоритм работать не будет не Вы) Вы сразу написали про опрос разных кнопок, и это понятно, я уже раз 50 написал что сравнение было с 4 диодами от КЗ и без диодов от КЗ :) Я не спорю что можно что то еще запитать если это так нужно, или добавить диодов можно. Мне просто интересно почему первая схема правильная а если выкинуть диоды то алгоритм не рабочий)

17 минут назад, IMXO сказал:

продолжай не понимать далее.

Только с Вашего разрешения)

Ссылка на комментарий
Поделиться на другие сайты

 

4 минуты назад, DrobyshevAlex сказал:

Мне просто интересно почему первая схема правильная а если выкинуть диоды то алгоритм не рабочий)

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

4 часа назад, Serb_ret сказал:

Защита в следующем: при PD4 в лог 0, а остальные в лог1, при нажатии например кнопок 4, 8 одновременно выход PD5 (лог1) закорачивается на выход PD4 (лог0). Диод от этого защищает.

 

Ссылка на комментарий
Поделиться на другие сайты

14 минуты назад, Serb_ret сказал:

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

Ох... как жу сложно. Забудьте все) И начнем сначала :)

Да я признаю, что написал как будто вопрос. Но суть то не в этом. Дальше я расписал в своем первом же посте

В 06.01.2019 в 07:09, DrobyshevAlex сказал:

все порты на вход

Мне отвечают. 

В 06.01.2019 в 08:11, IMXO сказал:

от КЗ , уберите диоды и нажмите кнопки в одной линии , получите замыкание на выходе порта.

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

В 06.01.2019 в 07:09, DrobyshevAlex сказал:

я бы сделал

То есть я имею ввиду "зачем вообще порты на вывод настраивать?" в данной схеме.

Ок, я понимаю что если порты на вывод будет КЗ. И я пишу

В 06.01.2019 в 11:45, DrobyshevAlex сказал:

я Вам описал алгоритм который позволит избавится от диодов

На что мне пишут

14 часа назад, IMXO сказал:

херню вы описали

И прикрепляют картинку. Все больше инфы нет. Но мы же видим выше сообщение о том что диоды нужны от КЗ. И нигде нет речи о том что алгоритм в статье "херня".

То есть выходит что алгоритм в статье верный а мой нет.

Картинка показала наглядно что при смыкании нескольких кнопок будет КЗ на соседнем столбце.

5 часов назад, DrobyshevAlex сказал:

То есть Вы с 1-го столбца замкнули кнопкой на 2ой? И что? Ни какого КЗ не будет

Тут видно что я виду речь про КЗ.

Я не спорил о том что можно с диодами повесить что то. Я не спорил то если доработать первую схему можно считать все кнопки.

 

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

 

А как с Вами то сложно,

Изначально автор совершил ошибку 

В 06.01.2019 в 05:39, freebits сказал:

Но произошло следующее - через нажатую кнопку, например кнопку 2, с входного бита PC2 (который всегда в лог 1) через диод ток закоротился на присутствующий в бите PC5  в этот момент времени лог 0.

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

5 часов назад, Serb_ret сказал:

Вход PC2 должен быть подтянут к питанию (лог 1) а не в Лог 1. Порт обязательно должен работать на вход. Если вдруг порт стал работать на выход и в состоянии лог 1 то никакой диод не поможет

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

Потом пошел весь офтоп нужен диод или нет.

 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В 06.01.2019 в 13:19, freebits сказал:

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

а теперь расскажи мне, как через ЗАКРЫТЫЙ диод выходы соединятся?

диоды для того и стоят, чтобы между выходами не было кз...

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, Starichok сказал:

а теперь расскажи мне, как через ЗАКРЫТЫЙ диод выходы соединятся?

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

В 06.01.2019 в 10:19, freebits сказал:

т.к. я в одном из запусков все биты порта перевел в режим выхода, и нажал на кнопку в момент опроса строк нулями. 

т.е. PD0  (если рассматривать схему в первом посте) в состоянии лог 1 а PD4 в состоянии лог 0, диод открыт, ток не ограничен. 

Этот сбой не спасли бы ни другие алгоритмы, ни диоды, разве что только только резисторы на выходы порта по 330 Ом или более, тогда ток был бы не более 15 мА

 

 

Ссылка на комментарий
Поделиться на другие сайты

Проблема надуманная

Если уж так боитесь или надо использовать комбинации на клавиатуре

1. Включите последовательно резисторы с выходами

2. Держите всегда все пины как входы и включайте только нужный на выход. Никакого замыкания не будет

 

пссс. а про сбой алгоритма это уже точно .....

что же если код написан криво теперь обвешиваться аппаратными защитам - БРЭЭЭЭЭЭЭЭЭЭЭЭЭД

на это  иесть отладка

Ссылка на комментарий
Поделиться на другие сайты

В итоге, на текущий момент, я реализовал опрос клавиатуры следующим образом (порт PC перестал использовать, вместо него используется порт D):

Keyboard_Poll.png.ae1bac8d3c0a7ec31a2a3dda822a5f6e.png

Пины PD2-PD4 - выходы.

Пины PD5-PD7 - входы.

C выходов на клавиатуру отправляются сигналы:

110
101
011

Т.е. опрос происходит с помощью отслеживания нуля. Опрос с единицами не получился т.к. порт не фиксирует лог 0 при отсутствующем сигнале. Т.е. например, если нажата кнопка, при которой в PC6 приходит 1,  то на остальных (PC5 и PC7) присутствует неопределенное состояние, т.к. для лог 0 нужна земля. Т.е. нужно усложнять схему подключения, чтобы все работало.

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

КЗ может случится лишь в ситуации, когда входные пины (PD5-PD7) не будут установлены в режим входных, и если случайно будут нажаты две кнопки и случайно те два вывода, между которыми создастся КЗ, окажутся в противоположных логических состояниях. Такое весьма маловероятно, но все же может произойти, поэтому видимо придется внедрить диоды на место. 

Кроме того есть нюансы связанные с интервалом между записью в порт и чтением из порта. Т.е. если чтение из регистра PINC происходит сразу после записи в регистр PORTD, то в регистре PINC не будет зафиксировано нажатие, т.к. нужна некая отсрочка чтения.

Изменено пользователем freebits
Ссылка на комментарий
Поделиться на другие сайты

Я тут скоро тоже займусь матричной клавой... 4х4. Но у меня есть идея, как мне кажется, куда как более простого и эффективного алгоритма опроса. Идея в том, что не надо циклически опрашивать столбики/строки матрицы, а делать опрос всех кнопок (при матрице 4х4 и менее) за 2 опроса. Т.е. в вашем варианте вы делаете минимум 3 опроса чтобы узнать состояние любой из кнопок, а в моем алгоритме потребуется всего 2, причем можно делать это "в одно прерывание". Не желаете попробовать, пока у меня руки не дошли?

Вот набросок функции, возвращающей состояние всех 16 кнопок в виде комбинаций битов в байте (разумеется, возможны странности при одновременном нажатии трех кнопок):

uint8_t void kbd_scan(void){
	// подаем на все столбцы нули, а строки делаем входами с подтяжкой
	DDR(PORT_KBD) = 0xF0;
	PORT(PORT_KBD) = 0x0F;
	// запоминаем инверсное значение состояния строк
	uint8_t rows = (~PIN(PORT_KBD)) & 0x0F;
	// делаем столбцы входами с подтяжкой, а на строки подаем запомненное значение с инверсией
	DDR(PORT_KBD) = 0x0F;
	PORT(PORT_KBD) = ~rows;
	// запоминаем инверсное значение состояния столбцов
	uint8_t cols = (~PIN(PORT_KBD)) & 0xF0;
	// отключаем порт
	DDR(PORT_KBD) = 0;
	// если строки и столбцы ненулевые
	if(rows && cols){
		// возвращаем код нажатых кнопок
		return = rows | cols;
	}
  	return 0; // возвращаем 0 - не нажато ни одной
}

В чем идея: подаем сразу на все столбцы сигнал и считываем, что там на строках. Если где-то нажаты кнопки - активный уровень попадает на соответствующие линии строк. Потом меняем стобцы и строки местами: подаем на стороки активные уровни (только на те строки, которые и так получили его через кнопки), и считываем со столбцов. В итоге получаем комбинации битов: в одной тетраде байта активные столбцы, в другой - активные строки, что однозначно определяет нажатые кнопки...

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

14 минуты назад, ARV сказал:

 


uint8_t void kbd_scan(void)

 

В порядке обмена опытом.

Как понимать наличие типа uint8_t у функции void, которая, тем не менее, возвращает значение?  :unknw:

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Извиняюсь, опечатался. Сообщение исправить уже не могу....

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...