дисплеи 148 Обработка информации с емкостных сенсорных панелей TP043 2D 1P и TP048 2D 1P и их аналогов на основе контроллеров st1232 и st1332 Олег Юрков Введение Сначала разберемся с терминологией. Наиболее часто упоминаемый термин (то, что, как говорят, на слуху) — сенсорный дисплей. Сенсорный дисплей (экран) — это устройство, которое состоит из прозрачной сенсорной панели (touch panel) и расположенного под ней дисплея. Сенсорная панель реагирует на прикосновение к ней предметов, пальцев. Еще одно название — touch screen («тачскрин») — хотя и означает то же самое, но приобрело у нас значение «сенсорная панель». Если в вашем смартфоне неисправна touch panel и вы хотите купить новую, то можно смело искать в Интернете замену с запросом «тачскрин для…». Еще одно название сенсорной панели — сенсорное стекло, которое тоже точно отражает ее свойства. Далее автор будет применять как синонимы определения «емкостная сенсорная панель» слова «панель», «сенсор» и «стекло». Сенсорный экран в повседневный быт вошел сравнительно недавно. Он удобен, поскольку позволяет увеличить размеры дис- Рис. 1. Емкостная сенсорная панель Fortrend TP048 2D 1P В статье рассматриваются способы работы с емкостной сенсорной панелью 4,8 дюйма — TP048 2D 1P фирмы Fortrend Taiwan Scientific Corp. плея на передней панели приборов и отказаться от кнопок, ведь теперь их функцию выполняет сенсорная панель. К тому же он помогает максимально упростить интерфейс, сделав его понятным для любого человека. Емкостные экраны очень надежны и долговечны, их ресурс составляет сотни миллионов нажатий, они отлично противостоят загрязнениям. По сравнению с резистивными они более прозрачны. Выросла механическая защищенность, комфортность, пропала необходимость в калибровке, появился «многопальцевый» интерфейс. Все это обязательно будет востребовано в промышленной электронике. Резистивные сенсорные панели на основе принципа изменения сопротивления для определения координат нажатия уже используются отечественными разработчиками электронной аппаратуры и доступны на рынке электронных компонентов как для опытных, так и для серийных изделий. Так же хорошо обстоит дело и с информационной поддержкой конкретных устройств и контроллеров резистивных сенсорных па- нелей, на которые есть подробные описания и примеры работы. Однако с емкостными панелями, использующими принцип измерения емкости в точке прикосновения для определения координат, все обстоит иначе. Несмотря на обилие бытовых устройств, таких как телефоны, планшеты, смартфоны, снабженных емкостными панелями, у поставщиков электронных компонентов трудно найти дисплей с емкостной панелью (или панель отдельно), если только он не является запасной частью какого-нибудь именитого смартфона. А еще труднее найти информацию по работе с такими панелями. Образцы панелей TP043 2D 1P и TP048 2D 1P уже можно купить у основных продавцов радиокомпонентов на российском рынке, таких как «КТЦ-МК» и «МТ-Систем», предварительно оформив заказ. С технической поддержкой этих изделий дела обстоят сложнее, потому что это новые устройства и найти нужную информацию — проблема. Описание устройства емкостной сенсорной панели Емкостная панель TP048 2D 1P сделана по проекционно-емкостной технологии и состоит из стекла с нанесенной на него проводящей прозрачной сеткой электродов и электронной схемы. Более подробно об этой панели можно прочитать в статье [1]. Схема собрана на гибкой плате, подключенной к стеклу, переходящей в шлейф (рис. 1). Основа электронной схемы — контроллер фирмы Sitronix Technology Corp. Внутреннее устройство контроллера приведено в таблице 1. Контроллер st1232 с помощью мультиплексора и преобразователя «емкость-напряжение» определяет токи утечки с контактов‑электродов, распределенных по стеклу, преобразует емкость в напряжение, и далее после фильтрации сигнал подвергается преобразованию в цифровую форму КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2012 дисплеи 149 Рис. 2. Структурная схема контроллера st1232 Таблица 1. Варианты шлейфов сенсорной панели: 6-, 8‑ и 10‑контактные Контакт шлейфа панели Название 1 VCC 2 I2C SCL 3 4 5 6 I2C SDA INIT RESET GND 1 I2C SCL 2 3 4 5 6 7 8 GND I2C SDA INIT VCC GND RESET GND 1 2 3 RESET VCC I2C SDA 4 I2C SCL 5 6 7 8 9 10 INIT NC NC NC GND GND Назначение 6-контактная Напряжение питания Линия тактирования последовательных данных интерфейса I2C Линия последовательных данных интерфейса I2C Сигнал готовности данных в панели Сброс контроллера Общий провод питания 8-контактная Линия тактирования последовательных данных интерфейса I2C Общий провод питания Линия последовательных данных интерфейса I2C Сигнал готовности данных в панели Напряжение питания Общий провод питания Сброс контроллера Общий провод питания 10-контактная Сброс контроллера Напряжение питания Линия последовательных данных интерфейса I2C Линия тактирования последовательных данных интерфейса I2C Сигнал готовности данных в панели Не подключено Не подключено Не подключено Общий провод питания Общий провод питания аналого-цифровым преобразователем (ADC). Затем сигнал попадает в микроконтроллер (MCU), который рассчитывает координаты прикосновения к стеклу, определяет число точек прикосновения (в контролере st1232 — только две) и опознает динамические движения пальцев пользователя на экране — жесты. Контроллер st1232 рассчитывает координаты, исходя из максимальных размеров экрана в точках — 800600. Калибровка емкостной сенсорной панели, как в случае с резистивной панелью, не нужна. Микросхема поддерживает двухпроводный интерфейс I2C для обмена информацией с управляющим процессором. Контроллер st1232 содержит и SPI-интерфейс, но на конкретной панели, на контакты шлейфа выведены только сигналы I2C. Назначение контактов приведено на рис. 2 для вариантов стекол с 6-, 8‑ и 10‑контактным шлейфом. Для подключения к своему устройству потребуется ответный разъем типа FPC-08‑U (шаг 0,5 мм), например C3917-08UTTI00. Сигналы на разъеме имеют следующее функциональное назначение: • VCC — напряжение питание 3,3 В (допустимые пределы — 2,4–3,6 В). • GND — общий провод. • SCL — тактовая частота интерфейса I2C. Входной сигнал. • SDA — последовательные данные интерфейса I2C. Вход/выход. • RST — сигнал сброса процессора (осуществляется низким уровнем). Входной сигнал. • INIT — сигнал прерывания, правильней было бы назвать INT. Выходной сигнал. При перепаде из высокого в низкий уровень сообщает внешнему контроллеру о наличии информации о прикосновениях к панели. • NC — неподключенные цепи. Тем, кто не знаком с протоколом I2C, настоятельно советуем ознакомиться с его работой подробно [2]. А также с конкретной реализацией этого интерфейса в вашем управляющем контроллере. Краткие характеристики интерфейса этого устройства: 1.Является ведомым в операциях обмена. 2.Частота тактового сигнала — до 400 кГц. 3.Адрес микросхемы в пространстве адресов I2C: Address = 0x55h. 4.Адреса внутренних регистров: от 0x10 до 0x14 (шестнадцатеричные). Подключение панели и внешнего управляющего контроллера показано на рис. 3. Далее управляющий контроллер мы будем называть хост-контроллером или хостом. Содержимое регистров контроллера сенсорной панели Контроллер панели st1232 имеет набор регистров, доступных для чтения управляющим контроллером. Прочитав их содержимое, можно получить информацию о нажатиях, скольжении, жестах или необработанных данных. Список регистров приведен в таблице 2. Адрес регистра Таблица 2. Регистры контроллера тачскринов st1232 Рис. 3. Подключение сенсорной панели к своему контроллеру КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2012 Данные регистра D7… D0 Имя регистра 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0 бит 0х10 Keys/Fingers Кнопки (Keys) Пальцы (Fingers) 0х11 Gesture Код жеста 0х12 Координаты XY0 (старший байт) Достоверность X0_H (x10, x9, x8) Резерв Y0_H (y10, y9, y8) 0х13 Координата X0 (младший байт) X0_L (x7–x0) 0х14 Координаты Y0 (младший байт) Y0_L (y7–y0) 0х15 0х16 0х17 www.kite.ru дисплеи 150 а б Рис. 4. Регистры контроллера сенсорной панели st1232: а) запись в регистр; б) последовательное чтение содержимого регистров Регистры Keys и Fingers Поле пальцев (Fingers) — биты 0–3 регистра Keys/Fingers — представляет число пальцев, обнаруженных контроллером. Координата последнего обнаруженного пальца представлена в полях координат X и Y, их нужно составить из младшей и старшей частей регистров 0x12, 0x13, 0x14. Поле кнопки (Keys) — биты 4–7 регистра Keys/Fingers — представляет, какая клавиша нажата или отпущена. Каждый бит в поле клавиш Keys представляет нажатое или отпущенное состояние одной клавиши. Если бит установлен, это означает, что соответствующая клавиша нажата. Иначе — клавиша отпущена. Сигналы клавиш — это входные сигналы на выводах контроллера панели st1232, но не выведенные на ламельные площадки гибкого шлейфа. Регистр Gesture Регистр жеста — Gesture — сообщает хосту, какой жест распознан контроллером. Коды жестов содержатся в младших пяти битах этого регистра (адрес 0x11). Если жест опознан, то генерируется прерывание, и внешний контроллер должен считать регистры панели. Отсутствие жеста определяется кодом 0x00 (не определено). Коды приведены в таблице 3. Регистры координат XY Регистры координат XY представляют координаты X, Y для каждого идентификатора ID-точки соприкосновения. Если битовое поле достоверности (бит 7 регистра 0x12) установлено в 1, то это говорит о том, что координаты, лежащие в регистрах координат (регистры 0x12, 0x13, 0x14), действительны и произошло касание дисплея в этой точке. Младший байт координаты X находится в регистре 0x13. Tри бита — 4‑й, 5‑й и 6‑й бит регистра 0х12 — являются старшими битами координаты X (x8, x9, x10). Младший байт координаты Y находится в регистре 0x14. Три бита — биты 0, 1 и 2 регистра 0х12 — являются старшими битами координаты Y (y8, y9, y10). Чтение регистров контроллера Для того чтобы считать значение какоголибо регистра контроллера панели, хост должен произвести запись адреса в его внутренний регистр, который называется регистром стартового адреса. Его содержимое указывает, откуда мы будем считывать информацию при последующем чтении контроллера (рис. 4). Далее хост должен произвести последовательные операции чтения данных, при этом адрес чтения — регистр стартовоТаблица 3. Коды жестов Код жеста 0х00 0х01 0х02 0х03 0х04 0х05 0х06 0х07 0х08 0х09 0х0А 0х0В 0х0С 0х0D 0х1F Название Описание No detected Ничего Single Touch Tap Одиночное касание Single Touch Double Tap Одиночное двойное касание Single Touch Slide Up Одиночное скольжение вверх Single Touch Slide Down Одиночное скольжение вниз Single Touch Slide Left Одиночное скольжение влево Single Touch Slide Right Одиночное скольжение вправо Two Finger Slide Up Двухпальцевое скольжение вверх Two Finger Slide Down Двухпальцевое скольжение вниз Two Finger Slide Left Двухпальцевое скольжение влево Two Finger Slide Right Двухпальцевое скольжение вправо Пониженное скольжение Pinch In (Zoom In) двух пальцев друг к другу (уменьшает масштаб) Скольжение двух пальцев друг Pinch Out (Zoom Out) от друга (увеличивает масштаб) Reserved Резерв го адреса — будет автоинкрементироваться (рис. 4б). Например, записав число 0x10 в регистр стартового адреса и прочитав пять раз подряд значения контроллера, мы последовательно получим значения регистров 0x10, 0x11, 0x12, 0x13, 0x14. Интерфейс контроллера st1232 поддерживает повторяющиеся операции чтения (Repeated Register Read). Это значит, что установленный однажды стартовый адрес регистра контроллера (в нашем примере — 0x10) уже хранится в контроллере, и нужно просто повторить операцию чтения регистров без записи стартового адреса. Периодически повторяем последовательность, представленную на рис. 4б, для получения данных. Алгоритм считывания данных из контроллера Последовательность действий программы управляющего процессора (хоста): 1.В инициализационной части своего программного обеспечения проводим следующие действия: – Заведем глобальные переменные, дублирующие значения внутренних регистров контроллера, например, назовем их Reg0x10–Reg0x14. – Заведем глобальную переменную — счетчик принятых по шине I 2C байт (СountRecByte). – Заведем флаг готовности данных ReadyDataTS, который будем устанавливать при обновлении переменных Reg0x10–Reg0x14. 2.Инициализируем узел I2C управляющего контроллера как «мастер», и он будет управлять обменом информации. А контроллер панели будет ведомым устройством. КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2012 дисплеи 151 Рис. 5. Диаграмма считывания информации с сенсорной панели 3.Определяем один из выводов управляющего контроллера как вход для получения прерывания от контроллера сенсорной панели. 4.Определяем один из выводов управляющего контроллера как выход для сброса контроллера сенсорной панели. 5.Подготавливаем подпрограмму прерывания управляющего контроллера от узла I2C. В ней анализируем текущее состояние аппарата I2C, счетчик принятых в предыдущих прерываниях байт. Считываем регистр данных, сохраняем его во внутренней переменной и инкрементируем счетчик принятых байтов. Наша задача принять пять байтов, после чего завершить обмен на шине I2C, то есть выдать фазу «Стоп». 6.Подготавливаем подпрограмму прерывания от вывода управляющего контроллера, на которую приходит сигнал прерывания от контроллера панели. Внутри ее инициируем обмен по шине I2C, формируем фазу «Старт» и передачу адреса устройства (контроллера панели) 0x55 и бит операции чтения. А также обнулим счетчик принятых байтов CountRecByte. 7.Инициируем обмен по шине I2C — формируем фазу «Старт», передачу адреса устройства (адреса контроллера панели) 0x55 и операции записи адреса первого регистра 0x10 для будущих блоковых считываний. Процесс взаимодействия контроллера сенсорной панели и управляющего контроллера будет выглядеть следующим образом. Считывание будет инициировать контроллер панели, когда установлено напряжение низкого уровня на контакте прерывания — сигнал INIT. Далее контроллер пользователя, перейдя в подпрограмму обработки прерывания, инициирует считывание байта данных. КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2012 После его приема попадаем в подпрограмму обработки прерывания, но уже по событию завершения передачи байта контроллером I2C, где сохраняем принятый байт и инициируем следующее чтение. После приема пятого байта, контролируя счетчик CountRecByte, завершаем циклы обмена с шиной и устанавливаем программный флаг ReadyDataTS, который будет «говорить» программному обеспечению о необходимости дальнейшего анализа данных. После обработки принятых данных из контроллера панели программами верхнего уровня этот флаг сбросим. Контроллер панели способен перегрузить хост частотой своих прерываний, поэтому целесообразно по аналогии с обработчиками клавиатуры производить считывание не чаще чем через 10–30 мс. То есть пришло прерывание, считали информацию, замаскировали прерывание, например, на 20 мс, затем разрешили снова. В этом случае, если пользователь вашего устройства будет удерживать палец на панели, то вы получите поток прерываний с промежутком 20 мс. Возможен и другой алгоритм работы — просто периодическое считывание данных из контроллера панели, при этом механизм прерываний не используется. На рис. 5 представлена схема считывания информации с сенсорной панели. Особенности работы контроллера сенсорной панели При удержании пальца на панели на одном и том же месте в его контроллере формируется постоянный поток событий о прикосновении (хотя логичнее было бы сформировать это событие однажды), и по сигналу прерывания хост вынужден считывать одну и ту же информацию много раз. Жесты опознаются без привязки к координатам их выполнения. Жесты опознаются после отпускания пальцев от панели. Это происходит так: положив два пальца на поверхность панели и выполнив скольжение их друг к другу, а затем убрав руку от сенсора, мы совершили жест. Информация о жесте будет доступна для считывания после отпускания пальцев от сенсора. Обратите внимание на то, что бит 7-достоверность, регистра координат 0x12 определяет только доступность и правильность координат касания и не связан с механизмом опознавания жестов, который работает независимо. Признаком распознавания жеста является ненулевой код в регистре жестов. Алгоритм опознавания жестов, реализованный в контроллере st1232, определяет, по оценке автора, приблизительно 80–90% жестов. То есть если исполнить жест Pich in — скольжение двух пальцев навстречу друг к другу — десять раз, то в одном или двух случаях контроллер не распознает жест, в регистре жеста будет 0, или мы прочитаем неверный код жеста. Одиночные касания определяются безукоризненно. Так же точно и без нареканий определяется количество точек касания. Поэтому, может, стоит написать алгоритм опознавания жестов самому, в программном обеспечении своего управляющего процессора, используя более точную информацию из регистров координат касания (0x12, 0x13, 0x14) и регистра числа пальцев (0x10). Впрочем, после проверки жестов, уменьшения/увеличения на смартфоне htc Desire, при просмотре фотографий процент распознанных жестов оказался примерно таким же. Если реакции на жест не происходит, пользователь просто повторяет жест, добиваясь нужного результата. Если такой подход приемлем, то можно пользоваться системой опознавания жестов контроллера. www.kite.ru 152 дисплеи Эта сенсорная панель чувствует прикосновения как к ее лицевой, так и внутренней стороне. Если ее поставить в свое устройство наоборот, то она будет работать, но будет срабатывать и когда мы просто расположим ладонь параллельно панели, на небольшом расстоянии от нее. Поэтому будьте внимательны: устанавливайте панель правильно — обе стороны сенсора похожи. Сенсорная панель чувствительна к помехам по питанию: при разводке разъема для подключения панели необходимо в непосредственной близости от выводов питания 3,3 В и GND расположить керамический конденсатор не менее 0,15 мкФ. Заключение В результате освоения технологии работы с емкостной сенсорной панелью TP043 2D 1P на контроллере st1232 разработчик сможет встраивать их в свои приложения. При этом повысится конкурентоспособность разрабатываемых изделий за счет улучшенных функций емкостных сенсорных панелей, таких как прозрачность, повышенное число нажатий на панель, распознавание нескольких прикосновений, жестов. Несмотря на более высокую стоимость емкостной сенсорной панели по сравнению с резистивной, на фоне общей цены изде- лия, в котором она будет применена, повышение стоимости не будет столь значительным. Хотя в массовых недорогих изделиях, где цена является одним из главных факторов, применение резистивных панелей будет предпочтительней. Изучив работу контроллера st1232, легко перейти на более совершенный контроллер st1332, полную документацию на который автору во время написания статьи не удалось найти в открытом доступе, но предварительные данные говорят о преемственности его внутренней архитектуры и протоколов обмена. Известно, что st1332 поддерживает более высокое разрешение (20482048) и определение пяти одновременных касаний. n Литература 1. Мухин И. Сенсорные экраны — решение проблем. Ч. 2 // Телевидение и радиовещание. 2006. № 4. 2. Шина I2C и ее использование — http://www.gaw.ru/html.cgi/txt/interface/ iic/start.htm 3. Техническое описание емкостной сенсорной панели TP048 2D — www.touchpanelpro.com 4. Техническое описание контроллера st1232 — www.sitronix.com.tw КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 5 '2012