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

 
 
 

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

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

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

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



На этой схеме приведены простейшие варианты подключения кнопок.
Верхняя – при нажатии на кнопку на вход МК подается «низкий» логический уровень, т.е. логический «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
Электронщик-практик, в основном занимаюсь микроконтроллерами. Есть неплохой опыт и в аналоговой технике (все мы начинали с УМЗЧ =)).
Одержим идеей автоматизации жилища а-ля "Умный дом" =)
 

Читательское голосование

Нравится

Статью одобрили 7 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

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

 

 

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

 

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

Общаемся по статье 💬

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

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

Datagor
Игорь Котов

  • Главный редактор
Комментарий # 1 от 12-03-09, 2:16.
  • С нами с 26.02.2006
  • 2 341 комментарий
  • 281 публикация
 
Ув. Вовка как всегда на высоте. Спасибо за продолжение серии!

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

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

<
Читатель Датагора

foxit
Николай

  • Гражданин
Комментарий # 2 от 12-03-09, 22:21.
  • С нами с 9.09.2008
  • 10 комментариев
  • 0 публикаций
 
Примеры кода пожалуйста в студию

<
Читатель Датагора

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

  • Гражданин
Комментарий # 3 от 13-03-09, 23:35.
  • С нами с 29.10.2008
  • 3 комментария
  • 0 публикаций
 
Спасибо за такое гениальное по простоте объяснение работы энкодера! Ничего лучшего нигде не встречал!

<
Читатель Датагора

s_myth
Андрей

  • Гражданин
Комментарий # 4 от 27-07-09, 6:09.
  • С нами с 6.08.2011
  • 17 комментариев
  • 0 публикаций
 
Спасибо за доступность изложения. Не отпугивает сложностью, как зачастую всё новое smile

<
Читатель Датагора

xtrason
Игорь

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

<
Читатель Датагора

GRafGRay
Максим

  • Гражданин
Комментарий # 6 от 07-11-09, 17:59.
  • С нами с 20.10.2009
  • 35 комментариев
  • 1 публикация
 
... я бы к матричной всё-таки "приколхозил лишние резисторы"
если ни одна кнопка не нажата, что будет на опрашиваемых ногах контроллера?

<
Читатель Датагора

smallghost

  • Прохожий
Комментарий # 7 от 25-12-09, 14:30.
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  А теперь представим, что у нас есть всего два провода, а кнопок нужно штук 6 (а может и больше )… Думаете нереально? Поверьте, всё чрезвычайно просто!


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

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

<
Читатель Датагора

Spirit

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

<
Читатель Датагора

Slava21

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

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.