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

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-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
×
×
  • Создать...