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

Простой контроллер клавиатуры


Alex K

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

Требуется схема простого контроллера клавиатуры (не более 16 опрашиваемых кнопок), одновременное нажатие 2-х и более кнопок не используется, критичным является число линий, передающих код нажатой кнопки микроконтроллеру (чем меньше портов займет клавиатура, тем лучше) и стоимость.

Можно применить SAA3010, но цена такого решения не приемлима.

Также нужна схема, отслеживающая состояние 2-х групп (по 2 кнопки в каждой), удаленных на 2-2.5 метра от основного микроконтроллера (требования по числу портов и стоимости остаются).

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

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

Касаемо первой части вопроса, предлагаю использовать шифратор - 15 кнопок / 4 линии.

Если инверсию предусмотреть программно, то инвертора можно исключить (см. схемку в аттаче)

Вторую часть вопроса чессно говоря не понял. :)

button_control.rar

Паять не мешки ворочать.

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

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

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

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

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

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

Шифратор я использую в данный момент, но у микроконтроллера уже не осталось свободных портов ввода\вывода, хотелось освободить один-два вывода за счет использования, скажем, линии I2C (или чего-нибудь похожего).

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

Вообще две группы (по 2 кнопки) и 16 основных (16 + 2 + 2) должны использовать 4 имеющихся порта ввода микроконтроллера (в крайнем случаи 5, кстати, есть ли 5-ти разрядные шифраторы?)

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

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

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

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

Шифратор я использую в данный момент, но у микроконтроллера уже не осталось свободных портов ввода\вывода, хотелось освободить один-два вывода за счет использования, скажем, линии I2C (или чего-нибудь похожего).

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

Вообще две группы (по 2 кнопки) и 16 основных (16 + 2 + 2) должны использовать 4 имеющихся порта ввода микроконтроллера (в крайнем случаи 5, кстати, есть ли 5-ти разрядные шифраторы?)

Для таких целей больше всего по отнешению цена\качество подойдет программируемая логическая матрица.

Так как получается очень гибкая конфигурация портов ввода\вывода в конечном итоге (под кнопки или что-то еще), причем мк в процессе опроса участвовать даже и не будет.

Другой вариант делать в рассыпухе на счётчиках и дешифраторах например. Тогда по одной линии можно выбирать кнопку а другой линией опрашивать её состояние.

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

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

Тогда на регистрах - сколь угодно кнопок / 2 линии + возможность нажатия нескольких.

Исходное состояние:

CLOCK - импульсы отсутствуют

DATA/INT - лог. 1

При нажатии на кнопку:

DATA/INT - лог.0 ( сигнал прерывания для МК )

CLOCK - появляються тактовые импульсы от МК по которым происходит запись в регистры состояния кнопок.

При отпускании кнопки:

DATA/INT - лог.1 ( сигнал для МК что щас пойдут данные)

CLOCK - 16 ( по числу входов) такт. импульсов сдвига в регистрах и выгрузки инфы.

Снова исходное состояние.

2 Speccy "программируемая логическая матрица" - можно по подробней ?

button_control_2.rar

Паять не мешки ворочать.

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

"программируемая логическая матрица" - можно по подробней ?

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

за схему спасибо, попробую так и сделать

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

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

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

2 Speccy "программируемая логическая матрица" - можно по подробней ?

У меня сейчас в ПЛМ Altera нарисован проект, в котором среди параллельных поротов ввода\вывода есть сканирование клавиатуры.

Клавиатура - 2 линии по 4 клавиши.

ИМС получает импульсы синхронизации, делит на 16. Этим сигналом выбирает то одну линию опроса то другую.

Если клавиша нажата, то с одной из 4 линий возврата подхватывается 0, далее по схеме 8И импульс идёт на D-триггер. В итоге триггер сбрасывается и на МК идёт прерывание. МК по прерыванию читает порт ввода "клавиатура" из ПЛМ - там байт с нажатыми кнопками.

А вообще МК пашет сам по себе, а ПЛМ сама по себе.

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

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

Работает как нарисовано.

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

Требуется схема простого контроллера клавиатуры (не более 16 опрашиваемых кнопок), одновременное нажатие 2-х и более кнопок не используется, критичным является число линий, передающих код нажатой кнопки микроконтроллеру (чем меньше портов займет клавиатура, тем лучше) и стоимость.

Можно применить SAA3010, но цена такого решения не приемлима.

Также нужна схема, отслеживающая состояние 2-х групп (по 2 кнопки в каждой), удаленных на 2-2.5 метра от основного микроконтроллера (требования по числу портов и стоимости остаются).

Вот какая идея пришла на ум. Берется микроконтроллер с 8-разрядным портом в/вв (PIC16F84A к примеру). Выводы порта 0...3 - "столбцы", 4...7 - строки. Каждая клавиша замыкает собой столбец и строку. Алгоритм распознавания нажатой клавиши такой:

-установить выводы 0...3 на вход, 4...7 - на выход (подать на них единицу);

-прочитать содержимое битов выводов 0...3 (в каком столбце нажата клавиша), результат - установить соответствующий бит в каком-нибудь регистре общего назначения (назову его регистром кода клавиатуры);

-теперь наоборот: 0...3 - на выход (с единицей), 4...7 - на вход;

-прочитать содержимое битов 4...7 (строку с нажатой кнопкой), также установить соответствующий бит регистра кода клавиатуры

-далее выполнить действие в соответствии с полученным результатом сканирования клавиатуры

-сбростить регистр кода клавиатуры

-вернуться в начало алгоритма

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

...Берется микроконтроллер с 8-разрядным портом в/вв (PIC16F84A к примеру)...

а то, что pic стоит больше сотни - это Вы учли? И делать на микроконтроллере опросник столь примитивного кнопочного поля, imho, жирно будет ;)

2MaStak: что-нибудь надумали?

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

...Берется микроконтроллер с 8-разрядным портом в/вв (PIC16F84A к примеру)...

а то, что pic стоит больше сотни - это Вы учли? И делать на микроконтроллере опросник столь примитивного кнопочного поля, imho, жирно будет ;)

2MaStak: что-нибудь надумали?

Так на PIC можно еще что-нибудь навесить (причем до буища), а не только считывание клавиатуры. Так что совсем даже не жирно, скорее наоборот - экономно :). Что хоть за девайс-то если не секрет?

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

Пришлось задействовать 3 конец :(

В этом варианте:

используються все входа регистров, кол-во кнопок ограничено кол-вом регистров, допустимо нажатие 2 и более кнопок,

чтение данных производиться только при нажатой кнопке

Исходное:

CLOCK/INT - 0

DATA - не важно

REC - 1

При нажатии кнопки:

CLOCK/INT - 1 ( прерывание для МК (по фронту) )

REC - 0 ( Выставляет МК )

DATA - состояние входа D7 последнего регистра

Удержание кнопки:

задержка ( ~0.5 сек)

во-первых нажать абсолютно одновременно 2 и более кнопки не реально

во-вторых дребезг контактов

далее

REC - 0

CLOCK/INT - такт. имп. записи состояний входов регистров

DATA - состояние входа D7 последнего регистра

затем

REC - 1

CLOCK/INT - такт. имп. чтения (16)

DATA - пошли данные

после процедуры чтения возможны два варианта:

1. Периодически проверять состояние CLOCK/INT

CLOCK/INT = 1 ( кнопка ещё нажата)

CLOCK/INT = 0 ( кнопка отпущена)

2. Настроить прерывания на ноге CLOCK/INT по срезу импульса и пойти заниматься другими делами.

с приходом прерывания - CLOCK/INT = 0 - кнопка отпущена

восстоновление прерываний по фронту

Исходное состояние

Несколько замечаний которые возможно пригодяться:

Сдвиг в регистрах происходит по фронту ( от 0 к 1 )

Запись состояния входов возможно асинхронная, т.е. при подаче 0 на 15 ногу

такт. импульсы не нужны ( но это ещё под вопросом ).

Хорошоб диоды(1-16) и инверсию заменить на 1 микруху 16И-НЕ ( если такие вобще существуют)

А Speccy дело говорит, на самом деле зашить всё это в ПЛМ :)

button_control_3.rar

Паять не мешки ворочать.

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

2 Alex K

Ну как ? Пойдёт ?

Если печатку разводить будешь, могу DSN-файл Протеуса скинуть.

В Proteus'e я ужо и сам накалякал, отослал человеку - он напишет для ATMega8 программку и протестирует (я только разрабатываю общую схемотехнику), так что как проверит - сообщу.

Вообще девайс представляет из себя контроллер открывания\закрывания стекол автомобиля + управление люком + продвинутый центральный замок (все двери или все, кроме водительской) + управление замками капота/багажника, причем модуль запоминает состояние стекла и может вернуть его в прежнее положение после, скажем, закрытия. Не бог весть какой сложный прибор, но иногда бывает полезен.

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

В Proteus'e я ужо и сам накалякал, отослал человеку - он напишет для ATMega8 программку и протестирует (я только разрабатываю общую схемотехнику), так что как проверит - сообщу.

Вообще девайс представляет из себя контроллер открывания\закрывания стекол автомобиля + управление люком + продвинутый центральный замок (все двери или все, кроме водительской) + управление замками капота/багажника, причем модуль запоминает состояние стекла и может вернуть его в прежнее положение после, скажем, закрытия. Не бог весть какой сложный прибор, но иногда бывает полезен.

Ну вот... И нисколько микроконтроллер не "жирный" для этих целей - как раз помимо клавиатуры можно все и навесить. Только возможно АЦП потребуется и датчик положения стекла, хотя можно и на таймере замутить все

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

Ну вот... И нисколько микроконтроллер не "жирный" для этих целей - как раз помимо клавиатуры можно все и навесить. Только возможно АЦП потребуется и датчик положения стекла, хотя можно и на таймере замутить все

ATMega, в отличаи от PIC'A, уже имеет несколько всторенных АЦП, на порядок больше flash-памяти, меньшее энергопотребление, бОльшее количество портов ввода-вывода (а Вы думаете почему возникло ограничение на число используемых клавиатурой линий? Да потому что все остальные порты уже заняты!), возможность внутрисхемного программирования и, что важно для мелкосерийного производства, практически в два раза меньшая цена микроконтроллера. Выбор, мне кажется, очевиден (тем более девайс уже практически собран, общую схемотехнику я менять не намерен).

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

Короче, если есть сильное желание сделать это устройство по-своему, делайте :P

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

Обязательно сделай безопасную схему управления замками и люками.

Напрямую (просто логическими выводами) не стОит делать. Чего доброго глюкнет МК и начнётся цирк.

Сразу надо предусмотреть контроль ПЗУ в фоновом режиме и таймер сторожевой наверное применить от зависаний...

Вобщем к безопасности надо подйти серьёзно... Помехи не должны приводить к опасным отказам...

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

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

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

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

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

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

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

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

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

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

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

    • Все предложенные к рассмотрению источники питания работают примерно по одному принципу: сетевое напряжение выпрямляется, фильтруется (получаем чуть больше 300 вольт постоянного), затем преобразуется снова в переменное, но уже на частотах в несколько десятков килогерц, понижается на трансформаторе и снова выпрямляется. За счёт высокой частоты преобразования используется трансформатор на ферритовом, а не на стальном, сердечнике, гораздо меньших габаритов и стоимости. Минусы: значительное усложнение схемы блока и вероятность возникновения различных помех от него. Модули управления (кроме первого) также являются импульными преобразователями, с теми же достоинствами и недостатками. Если нужно по быстрому собрать некое подобие ЛБП, то уж лучше брать модуль вроде этого. Ну и блок питания к нему соответствующий. Но не очень понятно, какой практический опыт можно получить от соединения готовых модулей парой проводов.  
    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: 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
×
×
  • Создать...