Датчик сенсорной клавиатуры — AT42QT2160
Сенсорные технологии набирают популярность и постепенно вытесняют механические кнопки. И этому есть причины: сенсор не содержит механических частей и не изнашивается, он компактный, такую кнопку можно встроить, почти, куда угодно и придать любую форму, вот раздолье для дизайнеров. И при этом это будет плоская пластина с чипом, а не здоровенная механическая кнопка. Если её накрыть прочным оргстеклом, то она становиться вандалостойкой. Радом с ней или в ней на пластине сенсора или точнее на плате можно разместить светодиоды отображения её состояния или чисто для декоративной подсветки.
Сенсорная клавиатура
Одним из разновидностей сенсорных датчиков являются емкостные, которые наиболее простые в реализации. О драйвере матрицы из 16 таких емкостных кнопок — AT42QT2160, кратко расскажу в статье.
Где-то с год назад, гуляя по сайту компела, в рекламе его продукции разглядел пару емкостных датчиков. Один на одиночную кнопку, а второй на матрицу из 16, и прикуп их оба. Но руки и необходимость до них не доходили. Датчики положил в коробку до лучших времен и благополучно забыл про их существование. Но они обо мне не забыли, и брат драйвера матрицы вернулся недавно ко мне в виде одного из проектов. О чём проект не важно, а вот краткий туториал по самому емкостному драйверу представляю.
Начнём со схемотехники.
Схема
Основу составляют: микроконтроллер ATMEGA128L с 16 светодиодами и обвязкой; драйвер сенсорной клавиатуры AT42QT2160 с два по 8 сенсорных кнопок, итого 16, и обвязкой.
Сенсорный драйвер к микроконтроллеру подключен по i2c + линия CHANGE, низкий сигнал на которой сигнализирует об изменение состояния сенсорных кнопок или себя самого.
Емкостные сенсорные датчики очень «капризные». Они требуют особой разводки и экранов. Нужно, что бы рядом с линиями сенсорных клавиш и самими сенсорными клавишами не проходило линий питания и других сигнальных проводников, т.к. все они в той или иной степени будут давать наводки, что в свою очередь будет искажать работу и давать ложные срабатывания или клавиши будут иметь «тугой ход». Так же на работу датчика влияет расположение платы, а точнее, что её окружает, материал и толщина пластины, что отделяет сенсорные клавиши от оператора, питание (батарейное или общая сеть), размер и форма контактных площадок сенсорных клавиш, наличие экрана у сенсорных клавиш, расположение звезд на небосклоне и многое другое… В общем: первое – нужно правильно развести сенсорную клавиатуру, второе – под каждый прибор понадобиться клавиатуру калибровать. Что могу сказать о плате, с которой работал, – она была сделана хорошо, но не идеально.
О том, как развести плату не расскажу, т.к. под эту сенсорную клавиатуру разводки не делал, мне её предоставили готовую. Могу только направить к документации по микросхеме и приведу от туда картинку рекомендуемого вида кнопки:
Рекомендуемая структура сенсорной кнопки
В моей задаче нужно было реализовать работу с 16-тью сенсорными кнопками. И предоставленная плата могла позволить реализовать только их. Об них и расскажу. Имеющиеся универсальные линии ввода-вывода, ШИМ выходы, слайдеры — затрагивать не буду, только 16 сенсорных кнопок. 12 из которых без фиксации, т.е. пока нажата – светодиод горит, отпустил – потух, и 4 с фиксацией, меняют свое состояние при каждом нажатие. Как простой пример наглядности на базе этой платы реализовал простенький калькулятор на сложения на 12 первых сенсорных клавишах без фиксации. К сожалению и для упрощения, семисегментный индикатор из примера вырезал, остались только кнопки, светики (см. схема) и обрубок калькулятора в недрах контроллера. Но это смотрите в исходнике.
Перейдём к работе с драйвером сенсорной клавиатуры.
После подачи питания, инициализации МК и i2c, можем начать общаться с сенсорным драйвером. Далее запускаем калибровку сенсоров. Затем сверяем настройки со значениями из внутренней EEPROM МК и если не соответствуют – то обновляем. Теперь приступаем к работе. А работа сводится к слежению за уровнем линии CHANGE. Если уровень низкий – то читаем нужные регистры драйвера и смотрим, что изменилось или какие кнопки были нажаты. Всё по рекомендации из даташита.
Опрос AT42QT2160
Первым делом из главного статус регистра General Status смотрим 7 бит – RESET, если равен 1 то нужно произвести перекалибровку сенсорного драйвера. Далее можем посмотреть состояния клавиш хранящиеся в регистрах Key Status 1 и Key Status 2 (3 и 4 адреса). Получить состояния всех кнопок из регистров Key Status 1 и Key Status 2, и обработать проблемы уже не составляет. На этом остановлюсь.
Регистры AT42QT2160:
Адрес |
Название |
Свойство, описание |
0 | Chip ID | Идентификатор чипа |
1 | Code Version | Версия прошивки |
2 | General Status | Основной регистр состояния 7 бит – RESET, информирует о необходимости перекалибровки драйвера |
3 | Key Status 1 | Состояние 0 – 7 сенсорных кнопок |
4 | Key Status 2 | Состояние 8 – 15 сенсорных кнопок |
5 | Slider Touch Position | Место касание слайдера |
6 | GPIO Read | Если порт ввода-вывода настроен на ввод, то значение на выводах GPIO1…3 драйвера. |
7 | Sub-revision | Подревизия прошивки |
10 | Calibrate | Для калибровки драйвера регистру нужно передать произвольный не нулевой байт |
11 | Reset | Для перезагрузки и сброса всех настроек нужно передать произвольный не нулевой байт |
12 | LP Mode | Энергосберегающий режим или время между измерениями. Чем больше значение, тем меньше потребление и больше отклик. 1-16мс, 2 – 32мс… (по умолчанию 1 – 16мс) |
13 | Burst Repetition | Количество опросов. Полезно если сигнал зашумлен. Чем больше опросов – тем достовернее состояние кнопок, но больше отклик. Значения от 1 до 63 (по умолчанию 1) |
15-16 | Neg Drift CompensationRead/Write Pos Drift Compensation |
Компенсация положительного, отрицательного дрейфа. |
17 | Normal DI Limit | Интегратор обнаружения Защита от ложных срабатываний. Количество подряд фиксирований, что кнопка нажата. Значения от 1 до 31 (по умолчанию 4) |
18 | Neg Recal Delay | |
19 | Drift Hold Time/AWAKE | |
20 | Slider Control | |
21 | Slider Options | |
22-37 | Key 0 — 15 Key Control | |
38-53 | Key 0 — 15 Neg Threshold | Порог срабатывания или чувствительность кнопок. Типовое значение от 7 до 12 (по умолчанию 10) |
54-69 | Key 0 — 15 Burst Length | |
70-77 | Регистры настройки портов ввода-вывода драйвера | |
78-79 | Common Change Keys | Клавиши общего изменения |
100-131 | Key 0 – 15 Signals | Сигнал на сенсорных кнопках |
132-163 | Key 0 — 15 References | Опорные данные для клавиш |
Настроек у AT42QT2160 много, но большую часть в большинстве случаев можно не трогать. К основным относятся: бит Reset из регистра General Status, Calibrate – калибровка и Negative Threshold – чувствительность и конечно сами значения состояния кнопок — Key Status 1 и Key Status 2. Так же видно, что большая часть настроек чувствительности позволяет сделать более стабильную (чёткую) работу, но в замен возрастёт время обработки нажатия кнопок или наоборот.
Видео, пример работы сенсорной клавиатуры
Alex_EXE | 18.09.2013 | AVR |
Иван пишет 17.01.2014 в 19:42 #
Здорово.
Кстати, QT60160 это обычная зашитая ATmega8, а серия микросхем QT1010, 1011, 1012 это обычные зашитые ATtiny4,5,9,10.
Дмитрий пишет 13.10.2016 в 21:31 #
Подскажите, нашёл микросхему TP224, я как понимаю она работает по такому же принципу, и кнопки также можно убрать под орг стекло например?
Alex_EXE пишет 22.10.2016 в 20:40 #
Вариантов исполнения емкостных датчиков много, к примеру сейчас TI активно рекламирует свою технологию CapTIvate.
Большинство методов работают без прямого контакта с электродом и их можно закрывать. Чем и как закрывать зависит от технологии и её исполнения.
С этими микросхемами не работал, в первой попавшейся pdf’ке информации по ним было мало.
Что могу сказать: под орг.стеклом работать должны, вопрос только в толщине орг.стекла. Очень большое значение при работе с емкостными датчиками имеет разводка платы. Ищите нормальную, подробную документацию — там всё должно быть. Посмотрите на форумах, у ардуинщиков упоминания готовых модулей на данной микросхеме есть.