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

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


freebits

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

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

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

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

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

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

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

 

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

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

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

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

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

 

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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ой? И что? Ни какого КЗ не будет

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

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

 

 

 

 

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

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

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

 

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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 пользователей онлайн

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

    • Так видеорегистратор или домофон? Раз иконки выводятся - значит сам экранчик рабочий, уже хорошо. Возможно вызывная панель не выдаёт видео сигнал. Возможно он не доходит до монитора. Возможно уже внутри домофона видеотракт помер.  Раз есть старая вызывная панель - принесите её к монитору и подключите напрямую. Проверяйте всё по порядку.
    • Если на входе генератор 20КГц, то на 20 гармоник нужен диапазон 400КГц. далее нужно изменить шаг расчета в Гц и далее можно двигать гистограмму по вертикали изменяя отступ во вертикали.  
    • Ссылка для выбора вариантов.
    • Вполне возможно, что она усиливает ток. По крайней мере на высших частотах. Мы не знаем, что на самом деле хотел ТС, т.к. он уклонился от ответа на первый же заданный ему в этой теме вопрос.
    • И это важно сказать новичку, а то впихнëт туда ещë какой нибудь LM358.  Если просто, ОУ можно сказать делятся по качеству на 3 типа: Низшие- для всяких стабилизаторов, НЧ генераторов и т. д., там где совсем некритичны искажения и частоты невысокие, менее ~15-20кГц. ОУ с весьма низкими рабочими частотами и плохим быстродействием. Такими например являются те же LM358 и аналогичные. Для звука не подходят КАТЕГОРИЧЕСКИ!  Средние- ОУ с более высоким быстродействием и рабочими частотами (до ~3-16 МГц), имеют невысокие искажения. Годятся для звуковых систем бытового/среднего уровня, вполне достаточны для обычных усилителей с КНИ до ~0.001% чего вполне хватит почти любому человеку. Это те же ОУ JRC4558, NE5532, TL072 и подобные.  ОУ Высшего уровня- ОУ с наиболее сложной и продуманной схемотехникой, очень высоким быстродействием и рабочими частотами (иногда до сотен МГц), в усилителях могут иметь КНИ менее 0.0001% и используются в профессианальной аппаратуре высших классов. Это ОУ серий OPA, AD и т.д. Можно и так, шуметь только возможно будет. Если ОУ двойной (2 ОУ в одном корпусе, как ваш 4558), то лучше сразу стерео предусилитель собрать, т.е. задействовать оба ОУ. У вашего 4558 распиновка вот такая. 
    • Спасибо большое. А не подскажете те ноги ОУ которые по схеме не используються просто в воздухе оставлять? 
    • Соглашусь, больше похоже на хранение или перенос рабочей программы без применения ПК.  
×
×
  • Создать...