Jump to content

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


Alex K
 Share

Recommended Posts

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

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

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

Link to comment
Share on other sites

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

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

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

button_control.rar

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Секреты депассивации литиевых батареек FANSO EVE Energy
При длительном хранении в литиевых ХИТ происходит процесс пассивации. Он обратим, однако информации о том, как это правильно организовать, практически нет. Известный производитель батареек FANSO EVE Energy делится рекомендациями, как активировать первичный литиевый элемент питания.

Читать статью >>

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

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

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

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

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

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

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

Link to comment
Share on other sites

Сравнительное тестирование алкалиновых батареек POWER FLASH 

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

Провели небольшой сравнительный тест, чтобы понять, могут ли источники тока POWER FLASH эффективно заменить продукцию таких известных производителей, как Duracell и GP, вычислить, чему равна стоимость одного часа работы батареек, а также сравнить полученные данные со значениями, указанными в технической документации.  Подробнее>>

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

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

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

DATA/INT - лог. 1

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

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

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

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

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

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

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

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

button_control_2.rar

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

Link to comment
Share on other sites

Новые источники питания на DIN-рейку класса High End от MORNSUN
Компания MORNSUN разработала новую линейку ИП с креплением на DIN-рейку класса High End. Линейка состоит из двух семейств однофазных ИП, различающихся функционалом (LIMF и LIHF) и одного семейства на трехфазное напряжение (LITF). У всех этих ИП печатная плата с компонентами имеет лаковое покрытие. Продукция работоспособна в температурном диапазоне -40...85ºС (для однофазных) и -30...70ºС (для трехфазных). Кроме того, однофазные ИП соответствуют требованиям ATEX и могут использоваться во взрывоопасных зонах. Семейство LIMF имеет стандартный функционал (ККМ, сухой контакт реле, 150% перегрузочная способность), а семейство LIHF – максимальный функционал с доп. функциями селективной защиты (SFB) и возможностью дистанционного управления (может заменить серию QUINT от Phoenix Contact).

Подробнее >>

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

Требуется схема простого контроллера клавиатуры (не более 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 (строку с нажатой кнопкой), также установить соответствующий бит регистра кода клавиатуры

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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

Пришлось задействовать 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

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

Link to comment
Share on other sites

2 Alex K

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

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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...