» » Микроконтроллеры. Связь с внешним миром. Часть 1. Клавиатура

 
 
 
9

Микроконтроллеры. Связь с внешним миром. Часть 1. Клавиатура

Разместил Spirit 12 марта 2009. Просмотров: 24 265

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

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

Самый простейший способ взаимодействия МК с окружающим миром – кнопка. Но в зависимости от конструктивных особенностей устройства, она может быть подключена весьма разнообразными способами.



На этой схеме приведены простейшие варианты подключения кнопок.
Верхняя – при нажатии на кнопку на вход МК подается «низкий» логический уровень, т.е. логический «0». А резистор PULLUP предназначен для обеспечения «высокого» уровня при отпущенной кнопке. В этом варианте включения его можно не ставить, т.к. при программировании МК можно включить внутреннюю подтяжку любого вывода порта МК к логической «1». То есть, эти резисторы уже встроены в каждый вход МК и их можно по желанию включить и отключить.
Второй вариант – при нажатии на кнопку на вход МК подается логический «0». В этом варианте резистор PULLDOWN уже обязателен, т.к. в МК нет возможности «подтянуть» вывод к низкому логическому уровню. Так же, при этом желательно отключить внутреннюю «подтяжку», чтобы она не влияла на состояние этого вывода.

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

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

Внутри него есть диск с тремя концентрическими кольцами контактов. Одно кольцо сплошное - это общий контакт. Два других сегментированы и их контакты сдвинуты на небольшой угол относительно друг друга. А сверху по этим контактам скользит бегунок, замыкая и размыкая внешние кольца с общим. Если развернуть эти кольца в прямую, то получится примерно следующее.



С устройством разобрались, но как же это всё действует? Представьте, что оранжевая полоса на изображении – начальное положение ползунка. С общим контактом соединено только внешнее (верхнее) кольцо. Теперь при вращении валкодера влево (красная полоса), в какой-то момент времени замкнутыми окажутся все три кольца. А при вращении в обратную сторону (синяя полоса) – с общим кольцом соединиться среднее. Вроде ничего сложного.

А как же заставить МК определить, в какую сторону мы крутим ручку? Да очень просто: В момент замыкания среднего кольца с общим, проверяем, соединено ли с ним внешнее. Если да – значит крутим влево, а если нет – вправо.

А теперь представим, что у нас есть всего два провода, а кнопок нужно штук 6 (а может и больше winked)… Думаете нереально? Поверьте, всё чрезвычайно просто!



Из схемы вы видите, что кнопки подключены к входу аналого-цифрового преобразователя МК (ADC или АЦП) и создают делитель напряжения. При нажатии на одну из кнопок, на входе АЦП будет появляться определенное напряжение (от 0 но 2,5 Вольт). А зная это напряжение, несложно определить, какая именно кнопка была нажата. Увы, но при этом невозможно реализовать обработку одновременно нажатых клавиш. Тут каждая клавиша имеет свой «приоритет», и чем она выше (по схеме), тем выше и приоритет.





Еще один очень интересный способ работы с кнопками – матричная клавиатура. В ней кнопки располагаются на пересечении «строк» и «столбцов». То есть, при нажатии на кнопку «=», строка «D» соединяется со столбцом «3». Таким образом, при использовании 8 выводов МК (4 строки и 4 столбца), можно реализовать клавиатуру с 16-ю кнопками, причем можно без проблем определять одновременное нажатие любого количества кнопок.

Определение нажатой кнопки называют «опросом» клавиатуру. Происходит он следующим образом: строки (а можно и столбцы, это кому как удобно) подключаем к выходам МК, по умолчанию на которых логическая «1», а столбцы – к входам с подтяжкой (чтобы не колхозить лишних резисторов). Теперь, при опросе, поочередно устанавливаем каждую строку в логический «0». Если на этой строке нет ни одной нажатой кнопки, то во всех столбцах (на всех входах МК) будет логическая «1» (ее обеспечивают подтягивающие резисторы внутри МК), а если какие-либо кнопки нажаты, то на соответствующих входах МК будет логический «0», что и позволяет определить МК все нажатые кнопки.

Так же есть множество других вариантов, например, с использованием параллельных и последовательных регистров, драйверов клавиатуры и их комбинаций. Но на них, как и на программной реализации выше описанных методов работы с клавиатурой, мы остановимся в следующей статье.

До скорых встреч!

С уважением, Владимир! bully
Владимир (Spirit)
Старый Оскол
Профиль Spirit
Электронщик-практик, в основном занимаюсь микроконтроллерами. Есть неплохой опыт и в аналоговой технике (все мы начинали с УМЗЧ =)).
Одержим идеей автоматизации жилища а-ля "Умный дом" =)
 

Понравилось? Палец вверх!

  • всего лайков: 14

Поделись с друзьями!

Связанные материалы:


Схема на Датагоре. Новая статья Soft-start на MOSFET и выключатель питания для УНЧ и других устройств... Привет, друзья! Делал я как-то УНЧ с конденсаторами фильтра БП по 50.000 мкФ в плече. И задумал...
Схема на Датагоре. Новая статья Фото-реле на микроконтроллере ATTiny13... Привет датагорцам! Я затеял ремонтные работы дома, и мне понадобилась система автоматического...
Схема на Датагоре. Новая статья Схемка в блокнот. Реле времени на КМОП микросхемах... Иногда возникает необходимость отключать (или включать) нагрузку по истечении определенного...
Схема на Датагоре. Новая статья Цифровой индикатор уровня топлива и напряжения АКБ для автомобиля V.3 (ATMega8 и дисплей от Nokia 1110i)... Скоро будет год, как я выложил на Датагоре свою первую статью о цифровом индикаторе топлива и уже...
Схема на Датагоре. Новая статья Библиотеки для подключения COG-индикаторов TIC-55 и TIC-3321 к микроконтроллерам AVR... …простите, а вы не подскажите, как пройти в библиотеку? Небольшая предысторияПрежде, я уже имел...
Схема на Датагоре. Новая статья RC-Test. Тестер ИК пультов дистанционного управления... Современная бытовая техника уже как-то не представляется без опции дистанционного управления и,...
Схема на Датагоре. Новая статья Таймер "Незабудка" - устройство предупреждения и отключения... Человеку свойственна забывчивость. И с этим ничего нельзя сделать – в силу каких-либо причин любой...
Схема на Датагоре. Новая статья Микроконтроллеры. Связь с внешним миром. Часть 3.... И снова приветствую Вас в моей лекционной! На этот раз я расскажу Вам как "сэкономить" выводы...
Схема на Датагоре. Новая статья Микроконтроллеры. Связь с внешним миром. Часть 2... Здравствуйте, дорогие Датагорцы! По некоторым слабо зависящим от меня причинам не мог участвовать в...
Схема на Датагоре. Новая статья Однофазный привод постоянного тока... В основе разработки электропривода лежит принцип работы следящего привода с одноконтурной системой...
Схема на Датагоре. Новая статья Блок автоматического селектора входов и управления питанием усилителя на PIC12F675... Хочу предложить продолжение проекта Автоматическое включение/выключение сабвуфера на...
Схема на Датагоре. Новая статья PIC микроконтроллеры. Все, что вам необходимо знать. Сид Катцен... PIC микроконтроллеры. Все, что вам необходимо знать. Сид Катцен пер. с англ. Евстифеева А. В. — М.:...
<
  • Главный редактор
12 марта 2009 02:16

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 649 комментариев
  • 261 публикация
 
  • 0
Ув. Вовка как всегда на высоте. Спасибо за продолжение серии!

Ура, товарищи!

Приобщайтесь к микроконтроллерам. От них никуда не деться. За ними будущее.
Уже вовсю наступает 32-разрядное поколение.
Представляете, этакий контроллерчик, букашечка, напрямую работает с LCD-монитором!

<
  • Кандидат
12 марта 2009 22:21

Николай / foxit

Цитата
  • С нами с 9.09.2008
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 0 публикаций
 
  • 0
Примеры кода пожалуйста в студию

<
  • Кандидат
13 марта 2009 23:35

Сергей Орешонок / ANALOGIC

Цитата
  • С нами с 29.10.2008
  • Ушёл в реал Пользователь offline
  • 3 комментария
  • 0 публикаций
 
  • 0
Спасибо за такое гениальное по простоте объяснение работы энкодера! Ничего лучшего нигде не встречал!

<
  • Гражданин
27 июля 2009 06:09

Андрей / s_myth

Цитата
  • С нами с 6.08.2011
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 0 публикаций
 
  • 0
Спасибо за доступность изложения. Не отпугивает сложностью, как зачастую всё новое smile

<
  • Кандидат
28 октября 2009 00:05

Игорь / xtrason

Цитата
  • С нами с 4.10.2009
  • Ушёл в реал Пользователь offline
  • 6 комментариев
  • 0 публикаций
 
  • 0
Здравствуйте!
Вот решил написать небольшую рецензию всего прочитанного мной курса по программированию AVR-ок. Уважаемый Владимир все подробно рассказал и описал. За это ему респект и уважуха. Единственное, на что хотелось бы обратить внимание автора всех этих статей, это то что в статьях абсолютно ничего не сказано о том как написать программу на СИ для управления обычными семисегментными индикаторами. Затронутые автором в статье, ЖК индикаторы, пока что еще дороги. А раз статья рассчитана на начинающих, то и детали должны быть доступны начинающим. Простой семисегментник на три-четыре разряда стоит в пределах 40-60 рублей, а LCD не менее 200!!! Да и к тому же не всегда удобен ЖК дисплей, иногда надо и LED-ы использовать.
И еще один момент: Неплохо было бы затронуть проблему побитовой передачи длинных слов (например от18 до 36 бит) в порт МК. Очень часто сталкивался с подобной проблемой, но сколько ни спрашивал на разных форумах, так вразумительного ответа никто и не дал. Такой способ передачи применяется повсеместно для управления разными микрухами, типа TDA, TEA, TSA, но нигде нет подробного описания, как такой обмен осуществить. Неплохо было бы написать еще пару статеек ( про индикаторы LED и про последовательную тактируемую передачу данных). Не сочтите за наглость. С уважением, Игорь.

<
  • Гражданин
7 ноября 2009 17:59

Максим / GRafGRay

Цитата
  • С нами с 20.10.2009
  • Ушёл в реал Пользователь offline
  • 32 комментария
  • 1 публикация
 
  • 0
... я бы к матричной всё-таки "приколхозил лишние резисторы"
если ни одна кнопка не нажата, что будет на опрашиваемых ногах контроллера?

<
  • Прохожий
25 декабря 2009 14:30

/ smallghost

Цитата
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
А теперь представим, что у нас есть всего два провода, а кнопок нужно штук 6 (а может и больше )… Думаете нереально? Поверьте, всё чрезвычайно просто!


А если сделать так:

Ставим резисторы последовательно 1к / 2к / 3,9к / 8,2к / 16к / 33к и тд. и кнопками коротим эти резисторы - получим на выходе сопротивление цепочки подводимое под двоичный код, который АЦП сможет расшифровать и при нескольких нажатых кнопках...

<
  • Прохожий
25 декабря 2009 18:54

/ Spirit

Цитата
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
smallghost
Можно и так smile Но не стоит забывать про помехи по питанию, дребезг контактов, сопротивление самих кнопок, разброс сопротивлений и т.д... Конечно всё это можно предусмотреть, но математически это будет довольно сложно, а значит и обработка в МК займет гораздо больше времени.
Если приложение не критично к времени исполнения команд, то попробовать можно. А в противном случае лучше сделать матричную клавиатуру bully

<
  • Прохожий
16 марта 2010 19:19

/ Slava21

Цитата
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • +1
Принцип клавиатуры с использованием АЦП я применял в своих конструкциях.
Только с небольшим отличием. В приведенной здесь схеме, программа должна периодически опрашивать АЦП, анализировать полученный результат, а затем продолжать свою работу в зависимости от полученного результата.
Я делал немного не так. Добавьте в схему еще один резистор (10к)
и диоды (по количеству кнопок). Катоды к правому по схеме выводу кнопки, а аноды к резистору, который подключен к VCC. При нажатии любой кнопки мы получим в этой точке что то около 0.6 вольта, а это логический 0. Соединяем эту точку с прерыванием и больше не думаем о том, что надо опросить клавиатуру.
Когда будет нажатие, тогда и проведем анализ что было нажато.

Добавление комментария


Налетай! Паяльники, станции, жала с доставкой
  • smilelolbyewinkyahoocoollaughing
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashguitar-manhandshake
    musicnegativenopardonshoksleepunknown
    wackoyawnblushbullyhashsmokingwhew
Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.