Распиновка touch screen

Подключение сенсорного экрана к микроконтроллеру AVR

Сенсорные экраны (Touch Screen) находят все большее применение — это устройство ввода информации представляет собой экран, реагирующий на прикосновения к нему.

Существует несколько разных типов сенсорных экранов, которые работают на разных физических принципах: резистивные сенсорные экраны, матричные сенсорные экраны, емкостные сенсорные экраны, проекционно-емкостные сенсорные экраны, оптические сенсорные экраны.

Мы рассмотрим подключение четырехпроводного сенсорного экрана к микроконтроллеру AVR, на котором реализуем сенсорный USB интерфейс для подключения к компьютеру для реализации сенсорной мышки. Данный тип сенсорного экрана используется, например, в игровой приставке PlayStation Portable (PSP) или Nintendo DS.

Для нашего проекта потребуется:

  • микроконтроллер ATmega168 (или ATmega328);
  • кварцевый резонатор 16 МГц;
  • монтажная плата для 28-выводных микроконтроллеров AVR (использовалась макетная плата OlimexAVR-P28);
  • программатор микроконтроллеров AVR;
  • плата с установленным разъемом miniB USB;
  • сенсорный экран от игровой приставки PSP;
  • коннектор для подключения сенсорного экрана;
  • два резистора номиналом 68 Ом, один резистор номиналом 1.5 кОм;
  • соединительные провода.

Резистивный сенсорный экран состоит из стеклянной панели и гибкой пластиковой мембраны. И на панель, и на мембрану нанесено резистивное покрытие.

Пространство между стеклом и мембраной заполнено микроизоляторами, которые равномерно распределены по активной области экрана и надежно изолируют проводящие поверхности. Когда на экран нажимают, панель и мембрана замыкаются, и контроллер с помощью аналогово-цифрового преобразователя регистрирует изменение сопротивления и преобразует его в координаты прикосновения (X и Y). В общих чертах алгоритм считывания таков:

  1. На верхний электрод подается напряжение +5 В, нижний заземляется. Левый с правым соединяются накоротко и проверяется напряжение на них. Это напряжение соответствует Y-координате экрана.
  2. Аналогично на левый и правый электрод подается +5 В и «земля», с верхнего и нижнего считывается X-координата.

Алгоритм работы показан на иллюстрации ниже.

Как видно, работа данного алгоритма означает, что электроды должны непрерывно переключаться, чтобы быстро определить координаты. Подключение сенсорного экрана была выбрано следующее:

Выводы сенсорного
экрана ВОВ-09224)

Соответствие выводов
для чтения координаты X

Соответствие выводов
для чтения координаты Y

Подключение очень простое – прямое подключение сенсорного экрана к линиям ввода/вывода микроконтроллера, но заметьте (как видно из таблицы), два из них обязательно должны быть подключены к входным каналам АЦП. Питание сенсорного экрана подается через вывод микроконтроллера, подтянутый к 5 В и другой вывода микроконтроллера, подтянутый к GND.

Для реализации интерфейса USB HID требуется несколько резисторов подключенных к двум выводам внешних прерываний микроконтроллера ATMega168, а также следует учесть, что вывод USB порта D+ подключен к выводу INT0 микроконтроллера.

Реализация USB HID интерфейса на микроконтроллерах AVR возможна с помощью библиотеки V-USB. Более подробная информация: Objective Development. На страничке загрузок Вы можете найти данные библиотеки, исходные файлы, примеры использования и полезную документацию, а также все необходимые рекомендации для применения библиотеки в своих устройствах.

Первоначальная задача при разработке кода для микроконтроллера – убедиться, что мы можем получить надежные координаты от сенсорного экрана, прежде чем организовывать передачу данных по интерфейсу USB. Вы можете скачать исходный код программы микроконтроллера для чтения данных АЦП от сенсорного экрана.

В основном, требуется два обращения к АЦП, одно для координаты X, второе – для координаты Y. Однако, мы не можем просто установить надолго один вывод сенсорного экрана на один канал АЦП, выводы должны будут постоянно меняться.

Была написана функция для каждой координаты, которая меняет соответствие выводов и производит чтение данных АЦП.

void read_x(void)
<
DDRC = 0b00010010; // Output on PC4(5V) and PC1(GND), Input on PC4(ADC)
sbi(PORTC, 4); //pull PC4 to 5V
cbi(PORTC, 1); //pull PC1 to GND

_delay_ms(1); //wait for screen to initialize

В этом случае, нам потребуется лишь глобальная переменная h для значений АЦП.

Задержка после переназначения соответствия выводов порта важна. Было обнаружено, что без включения задержки, значения АЦП были не последовательны и имели место отклонения. Связано это с тем, что мы подаем питание на одну из линий сенсорного экрана, а затем быстро переключаемся на входной канал АЦП. Задержка в 1 мс решила данную проблему.

Теперь, когда мы знаем что аппаратная и программная часть обслуживающая сенсорный экран работает, мы можем приступить к использованию полученных данных в вычислении движения для нашей сенсорной «мыши». Для проекта был использован пример кода для реализации USB мышки. Он реализован для такой же архитектуры, которую используем мы: целевой микроконтроллер, тактовая частота, Fuse-биты, поэтому никаких изменений в make-файле делать не требовалось.

Как же применить данные, полученные от АЦП, для реализации движения мышки.

В основной программе (main.c) используется член dx структуры reportbuffer как значение скорости по оси X (также для оси Y). В основном, нам необходимо загрузить 8-битное значение со знаком в reportbuffer.dx и это переместит курсор мыши на некоторой скорости.

Код для микроконтроллера реализует следующее:

  • включает таймер для отсчета интервалов чтения АЦП;
  • заполняет небольшой буфер значениями данных АЦП;
  • вычисляет разность последовательных данных для определения направления движения;
  • запускает алгоритмы сравнения и выражения проверки условий;
  • вычисляет скорость;
  • загружает данные в буфер reportbuffer.dx.

Однако, была некоторая проблема: данные от АЦП – это 10-битные значения без знака, которые загружаются в переменные h и hl. Когда мы делаем вычисления, сравнения и другие операции для определения направления движения, то должны использовать знаковые или беззнаковые 8-битные, 16-битные или long-значения. Это создает относительно большие проблемы в ходе любых операций между бинарными значениями с различной размерностью. В целом, было необходимо преобразовать беззнаковый 10-битный результат АЦП в 8-битный беззнаковый. Выражение ниже реализует эту операцию:

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

Исходный код программы микроконтроллера — USB Touchscreen Mouse

Исходный код и hex.-файл для отладки — SerialDebug USB Touchscreen Mouse (чтение данных АЦП)

Перевод: Vadim по заказу РадиоЛоцман

Источник

Строение сенсорного экрана (тачскрина) и проблемы связанные с его заменой

Сенсорный экран — устройство ввода и вывода информации, представляющее собой экран, реагирующий на прикосновения к нему.

Резистивный сенсорный экран

Резистивный сенсорный экран состоит из стеклянной панели и гибкой пластиковой мембраны. И на панель, и на мембрану нанесено резистивное покрытие. Пространство между стеклом и мембраной заполнено микроизоляторами, которые равномерно распределены по активной области экрана и надёжно изолируют проводящие поверхности. Когда на экран нажимают, панель и мембрана замыкаются, и контроллер с помощью аналогово-цифрового преобразователя регистрирует изменение сопротивления и преобразует его в координаты прикосновения (X и Y).

В общих чертах алгоритм считывания таков:
1.На верхний электрод подаётся напряжение +5В, нижний заземляется. Левый с правым соединяются накоротко и проверяется напряжение на них. Это напряжение соответствует Y-координате экрана.
2.Аналогично на левый и правый электрод подаётся +5В и «земля», с верхнего и нижнего считывается X-координата.

Ёмкостные сенсорные экраны

Ёмкостный (или поверхностно-ёмкостный) экран использует тот факт, что предмет большой ёмкости проводит переменный ток.

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

В более ранних моделях ёмкостных экранов применялся постоянный ток — это упрощало конструкцию, но при плохом контакте пользователя с землёй приводило к сбоям.
Ёмкостные сенсорные экраны надёжны, порядка 200 млн нажатий (около 6 с половиной лет нажатий с промежутком в одну секунду), не пропускают жидкости и отлично терпят не проводящие загрязнения. Прозрачность на уровне 90 %. Впрочем, проводящее покрытие всё ещё уязвимо. Поэтому ёмкостные экраны широко применяются в автоматах, установленных в охраняемом помещении. Не реагируют на руку в перчатке.

Мультитач (англ. multi-touch) — функция сенсорных систем ввода, осуществляющая одновременное определение координат двух и более точек касания. Мультитач может применяться, например, для изменения масштаба изображения: при увеличении расстояния между точками касания происходит увеличение изображения. Кроме того, мультитач-экраны позволяют работать с устройством одновременно нескольким пользователям. Они часто используются для осуществления других, более простых функций сенсорных дисплеев, таких как single touch или квази мультитач.
Мультитач позволяет не просто определить взаимное расположение нескольких точек касания в каждый момент времени, он определяет пару координат для каждой точки касания, независимо от их положения относительно друг друга и границ сенсорной панели. Правильное распознавание всех точек касания увеличивает возможности интерфейса сенсорной системы ввода. Круг решаемых задач при использовании функции мультитач зависит от скорости, эффективности и интуитивности её применения.

Наиболее распространённые мультитач-жесты

Сдвинуть пальцы — мельче
Раздвинуть пальцы — крупнее
Двигать несколькими пальцами — прокрутка
Поворот двумя пальцами — поворот объекта/изображения/видео

Проблемы, связанные с установкой резистивного сенсорного экрана
Иногда нет под рукой полного аналога нужного тача, или распиновка шлейфа другая, могут возникнуть следующие проблемы:
1.Тач повёрнут на 90,270 градусов
— Поменять местами X-Y

2.Перевёрнут тач по горизонтали
— Поменять местами X+ , X-

3.Перевёрнуть тач вверх ногами
— Поменять местами Y+ , Y-

Данные решения нужно осуществлять если после калибровки сенсорного экрана проблема не пропала.

Замена сенсорного экрана не помогла.
— Перепрошить телефон

Сопротивление на контактах ТАЧСКРИНА
Y-,Y+=550 Om Без нажатия
X-,X+=350 Om Без нажатия

Y+,X+=от 0,5-до 1,35 kOm Замеры производились в разных углах тачскрина при нажатии.Не косаясь тачскрина сопротивление равно бесконечности.
Y-,X-=от 1,35-до 0,5 kOm Замеры производились в разных углах тачскрина при нажатии.Не косаясь тачскрина сопротивление равно бесконечности.

В разных моделях сенсорных экранов сопротивление может колебаться. Данные замеры производились на сенсорном экране с телефона I9+++.

Когда пора менять сенсорный экран?

Сенсорный экран пора менять в следующих случаях:
— если он не реагирует на прикосновения
— вы обнаружили на нём «маслянистое пятно»(разноцверные разводы)
— невозможно откалибровать сенсорный экран
— войдя в сообщение и выбрав режим ввода английского текста,попробуйте поставить точки по всей площади,если вместо точек появляються чёрточки то пора менять
— войдя в сервис-разное-Touch Screen ,попробуйте поставить точки по всей площади,если вместо крестиков появляються зелёные полоски — пора менять
— если пытаясь нажать на иконку- перелистываються рабочие столы или иконки опадают(вертикальное осыпание иконок в айфоноподобных телефонах)
— если через 5 минут после калибровки вы опять не попадаете по иконке на которую нажимаете

Источник

Электроника для всех

Блог о электронике

Работа с резистивным сенсорным экраном

Хоть резистивный touchscreen и является устаревшим и активно вытесняется емкостными сенсорами, но тем не менее он еще не скоро канет в Лету. Во первых из-за простоты и дешевизны, а во вторых из-за элементарной работы с ним.

Конструктив
Итак, как он устроен. Там все очень и очень просто. Есть две пленки, сделанные из проводящего материала, а между ними гранулы диэлектрика. Когда касаемся пальцем, то продавливаем зазор между пленками и контачим верхнюю на нижнюю. Ну, а определить координаты касания уже дело несложное.

Для этого на каждую пленку нанесено по два электрода. Слева-справа на одной и сверху-снизу на другой. Крест на крест, в общем. Поскольку сопротивление пленки довольно большое, под сотни ом, то образуются как бы два перпендикулярных резистора, висящие друг над другом.

В точке касания они замыкаются между собой и вуаля, получается такая схема:

Теперь достаточно концы одной пленки подтащить к шинам питания (банально заведя туда лог 0 и лог 1), чтобы она образовала обычный резистивный делитель. А с другой пленки снять получившееся напряжение. Которое будет пропорционально координате. Так как сопротивления входа АЦП огромно, то жалкие сотни ом, что составляет остаток пленки (R1) нам никак не помешает. Также не помешает и болтающийся конец (R2).
Теперь меняем положение, растягивая между шинами питания уже другую пленку и снимаем вторую координату. Элементарно!

Вилы в стогу
Но при попытке взять схему в лоб, то получаем первые вилы в бок. Дело в том, что если мы будем тупо менять по очереди пленки и сканировать значения, то много мы не намеряем. Т.к. когда касания нет, то пленки не перескаются, а значит каналы АЦП во время измерения висят в воздухе, ловя всякий мусор. И как их отличить от нажатия? Да никак! АЦП без разницы, что на вход пришло.
Так что нам надо замер координат делать не непрерывно, а тогда и только тогда, когда есть касание. До этого на тачскрин даже не отвлекаться.
Делается это просто — мы одну пленку подтягиваем к земле. А вторую вешаем на вход с pullup. Был тачскрин, стала обычная кнопка.

Ее мы лениво опрашиваем, в ожидании нажатия. Но тут прячутся вторые вилы, на которые мы будем нарываться еще не раз и не два. Дело в том, что тачскрин это две проводящие пленки. Большие плоские пленки, находящиеся очень близко друг от друга. Ничего не напоминает? Правильно — конденсатор, мать его. А значит у него нефиговая емкость. И если ты его переключишь в режим отслеживания нажатия и тут же проверишь — получишь нажатие. Т.к. емкость еще не успела зарядиться, а значит коротит. Так что после перевода порта в режим опроса надо подождать около миллисекунды. А только потом начинать щупать. То же касается, кстати, и режима смены замеров координат. Начнешь быстро переключать пленки с координаты на координату — получишь полную херню на выходе. Переключил, подождал, замерил. Переключил, подождал, замерил. Только так.

Под это дело я набросал небольшой пример кода для ATMega16 на Pinboard.

Код
Код в виде обычного конечного автомата. Правда он разнесен на процедуру и прерывание.

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

44 thoughts on “Работа с резистивным сенсорным экраном”

Не такая уж она нежная, пленочка эта. Я паялом под 300 и феном под 330 на ней разьем корячил, хоть бы хны. Хотя, с проводами есть риск оборвать дорожки.

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

Я бы не стал говорить про скорый конец резистивных (р.) экранов. Дело в том, что емкостные очень плохо (читай — почти совсем не) реагируют на руки/пальцы в перчатках, что почти начисто убирает их из списка вариантов для многих промышленных систем. Можно ввернуть им чувствительность, но тогда они начинают ловить кучу помех. Старые р. экраны имели две этих пленки, но вот что я вам скажу — неделю назад на Freescale Technology Forum видел р. экран, который на ощупь не продавливался, но прекрасно работал, в том числе через футболку (ну этот фокус надо было видеть).

Китайцы уже освоили выпуск специальных перчаток, расчитанных на работу с емкостными экранами. На том же DX, например, они есть.

>piroJOKE
>4 июля 2011 в 1:15
>Китайцы уже освоили выпуск специальных перчаток, расчитанных на работу с емкостными экранами. На том же >DX, например, они есть.
А в медицине эти перчатки можно применять, например в операционной? Что-то мне кажется для медицины, где без резиновых перчаток ни куда резистивные экраны самое то.

Бывают и настолько нежные что только сплав розе выручает

> Нет, это не УЖОСНАХ, а GCCшная ассемблерная вставка.

До кучи познай дао раздельной компиляции и ты сможешь вызывать ассемблерные функции из С как родные. Делов-то вспомнить про calling converntion вообще и про abi в частности.

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

На многох платах контроллеров жестких дисков (старые Seagate, например)
очень часто стоят разъёмы мотора привода шпинделя,
которые ИДЕАЛЬНО подходят для сенсорных экранов.
Можно даже вырезать кусочек платы с разъёмом, чтобы не выпаивать его,
и припаять провода к плате

Источник

Adblock
detector