Подключение панели с сенсорными кнопками к микроконтроллеру AVR ATmega32

В этой статье мы рассмотрим подключение 4×2 (8 кнопок) панели с сенсорными кнопками (touch keypad) к микроконтроллеру ATmega32A (семейство AVR). Мы все знаем, что панель с сенсорными кнопками (тачпад – в простонародье) является одним из самых важных устройств ввода в электронных схемах. Это устройство не имеет «реальных» кнопок, но зато имеет специально спроектированные металлические пластины, которые имеют высокую чувствительность. Когда кто-нибудь нажимает одну из этих пластин, происходит изменение емкости в соответствующей схеме и это изменение воспринимается электронным блоком устройства (панели). Откликом (ответом) на нажатие пластины является появление высокого напряжения на соответствующем выходном контакте.

Подключение панели с сенсорными кнопками к микроконтроллеру AVR ATmega32: внешний видТаким образом, для восьмиклавишного тачпада мы имеем восемь выходов. У него есть и другие особенности, но в этой статье мы не будем их рассматривать.

Необходимые компоненты

Аппаратное обеспечение

  1. Микроконтроллер ATmega32.
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. JHD_162ALCD (ЖК дисплей 16×2) (купить на AliExpress).
  4. Тачпад (панель с сенсорными кнопками).
  5. Конденсатор 100 мкФ (купить на AliExpress).
  6. Конденсатор 100 нФ (купить на AliExpress).
  7. Резистор 1 кОм (2 шт.) (купить на AliExpress).
  8. Источник питания с напряжением 5 Вольт.

Программное обеспечение

  1. Atmel Studio версии 6.1 (или выше).
  2. Progisp или flash magic (необязательно).

Работа схемы

Схема устройства приведена на следующем рисунке.

В представленной схеме PORTB микроконтроллера ATmega32 соединен с портом данным жидкокристаллического (ЖК) дисплея. При этом следует помнить о том, что необходимо деактивировать JTAG интерфейс микроконтроллера на порту PORTC при помощи изменения фьюзов (fuse bytes) если мы хотим использовать PORTC как обычный порт ввода/вывода. В ЖК дисплее (если мы не хотим использовать черный цвет) можно задействовать только 14 его контактов: 8 контактов для передачи данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или gnd&+5v), 3-й контакт для управления контарстностью, 3 контакта для управления (RS&RW&E).

В представленной схеме мы использовали только 2 контакта управления ЖК дисплея для лучшего понимания работы схемы. Бит контраста и READ/WRITE используются нечасто, поэтому они могут быть замкнуты на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения. Теперь нам всего лишь нужно контролировать контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные. Также на нашем сайте вы можете прочитать более подробную статью о подключении ЖК дисплея к микроконтроллеру ATmega32.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS — земля
PIN2 или VDD или VCC — +5v питание
PIN3 или VEE — земля (обеспечивает максимальный контраст ЖК дисплею)
PIN4 или RS (Register Selection) – контакт PD6 микроконтроллера
PIN5 или RW (Read/Write) — земля (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) — контакт PD5 микроконтроллера
PIN7 или D0 — контакт PB0 микроконтроллера
PIN8 или D1 — контакт PB1 микроконтроллера
PIN9 или D2 — контакт PB2 микроконтроллера
PIN10 или D3 — контакт PB3 микроконтроллера
PIN11 или D4 — контакт PB4 микроконтроллера
PIN12 или D5 — контакт PB5 микроконтроллера
PIN13 или D6 — контакт PB6 микроконтроллера
PIN14 или D7 — контакт PB7 микроконтроллера

В схеме мы использовали 8-битную связь (D0-D7) ЖК дисплея с микроконтроллером, хотя можно было ограничиться и 4-битной – но в этом случае код программы стал бы немного сложнее. Таким образом, мы использовали 10 контактов ЖК дисплея, 8 из которых будут использоваться для передачи данных и 2 для управления.

Использованный в схеме тачпад работает от напряжения 2,5В, поэтому чтобы его запитать от используемого источника питания с напряжением 5В мы включаем на входе по питанию тачпада делитель напряжения из двух резисторов, представленный на следующем рисунке.

Представленный делитель обеспечивает тачпад пониженным напряжением. Таким образом, чтобы обеспечить на выходе делителя напряжение 2,5В при напряжении на входе 5В достаточно взять номиналы резисторов в этом делителе равные 1 кОм. Конденсатор на выходе делителя напряжения включен для фильтрации гармоник.

Выходной порт панели с сенсорными кнопками (тачпада) напрямую подключен к микроконтроллеру. Таким образом, всегда когда кто то нажимает клавишу тачпада на его соответствующем выходе появляется сигнал высокого напряжения. Это логическое изменение уровня воспринимается микроконтроллером. Микроконтроллер показывает на экране ЖК дисплея цифру, соответствующую номеру нажатой клавиши на тачпаде.

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

Исходный код программы на языке C (Си) с пояснениями

Видео, демонстрирующее работу схемы


Примечание: к этой записи прикреплена форма для оценки. Чтобы оценить её, зайдите на сайт.

6 ответов к “Подключение панели с сенсорными кнопками к микроконтроллеру AVR ATmega32”

Здравствуйте. Мне нужно подключить к Atmega8 одну сенсорную или обычную без фиксации кнопку (всего 4 нажатия: два на включение выходов, два на отключение), одно нажатие — включение одного выхода МК; в обратную сторону так же: одно нажатие — отключение одного выхода. Выходы должны сохранять состояние после прекращения нажатия кнопки. У вас на сайте есть подобные статьи?

Добрый вечер. Есть статья с подключением обычной клавишной панели к микроконтроллеру AVR ATmega32 (такие клавишные панели продаются и на меньшее число кнопок, не обязательно 16). Вас такая панель интересует? И можете посмотреть карту статей по микроконтроллерам AVR на нашем сайте — на ней наглядно видно какие статьи по AVR есть на сайте.

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

Могу поделиться, если интересно) А как этот фрагмент кода вставить: текстом или архивом с файлом?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *