Простой тачскрин интерфейс

Тачскрин (Touch Screen — сенсорный экран) изобретен несколько десятилетий назад, однако только в последние года он получил широкое распространение. Для человека, способ ввода при помощи сенсорного экрана более привычен и удобен, чем другие способы.

В данной статье мы рассмотрим работу с резистивным 4-х проводным тачскрином, а именно нахождение X и Y-координат нажатой точки. В проекте мы будем использовать минимальное количество деталей и основной упор статьи сделаем на теорию.

Итак, задачей нашей схемы будет считывание координат с тачскрина и вывод их на LCD-экранчик. Естественно «рулить» всем этим хозяйством будет микроконтроллер.

Список используемых компонентов:
— PIC18F452 — микроконтроллер PIC (даташит)
— 7805 — стабилизатор напряжения 5В (КРЕН5)
— 20 МГц кварцевый резонатор. Частота не критична, могут быть использованы и 4, 8, 16 Мгц
— программатор PICkit 2 и т.п. для прошивки PIC
— 4-х проводной резистивный тачскрин (Touch Screen). Работают они все по одному принципу, поэтому нет никакой разницы, какой именно вы будете использовать
— 16×2 LCD дисплей
— отладочная плата и перемычки

Схема подключения тачскрина

В схеме использовано 6 линий связи тачскрина с микроконтроллером. Две из них используются для АЦП и четыре подключаются к PORTD пинам RD0 — RD3. Здесь PORTD используется для подачи питания или земли к 4-м линиям тачскрина.
LCD-экранчик подключается по 4-битному интерфейсу.

Как работает тачскрин

Чтобы было понятнее, проведем сравнение работы обычного подстроечного резистора и тачскрина. В тачскрине мы пока что будем использовать только одну ось координат.

Подстроечный резисторТачскрин

Напряжение на выходе подстроечного резистора, относительно общего провода, зависит от его текущего сопротивления. Подобный принцип используется и в тач скрине. Если установить стилус на середине экрана (по аналогии с подстроечным резистором это будет половина круга), то выходное напряжение будет составлять 1/2 от входного.

Ось XОсь Y

Тачскрин имеет две координаты: X и Y. АЦП микроконтроллера считывает данные с каждой координаты и т.о. формируется координата нажатой точки.

Сборка устройства

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

На фотографии выше приведены все необходимые компоненты для сборки устройства.

Сборка устройства

Собираем устройство на отладочной плате согласно принципиальной схеме.

Плоский шлейф тачскрина

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

Программа

В программе реализуется две основные задачи: аналогово-цифровое преобразование координат и вывод данных на LCD. Реализуется в 4 шага: на первом шаге происходит считывание и преобразование значения Х-координаты через АЦП, затем тоже самое происходит с Y-координатой, третьим и четвертым шагом происходит отображение X и Y точек соответственно. После чего, весь цикл повторяется.

Приведу кусок фрагмента кода преобразования и вывода X-координаты на LCD:

 //Don't Display If X or Y Axis Not Active  if( (result_x > 80 && result_x < 900 ) ){   /******** X-Axis Update ALL *********/     itoa( result_x, x_axis );           for(i=0;i<4;i++){     //Update Display        if(isalnum(x_axis[i])){        prnt(x_axis[i]);        }        else{        prnt(0x20);         }     } 

Функция itoa() используется для преобразования аналоговой величины в цифровое 10-битное значение. В десятичном коде максимальное значение составляет 1023, минимальное соответственно 0. Результат преобразования отображается на LCD-экранчике.

Фрагмент кода АЦП преобразования X-координаты:

 //Set PORTA To Inputs/High Impedance  TRISAbits.TRISA0 = 1;  TRISAbits.TRISA1 = 1;   //Set Lower 2 Bits to High Impedance  TRISCbits.TRISC0 = 1;  TRISCbits.TRISC1 = 1;  //Set Higher 2 Bits to Output  TRISCbits.TRISC2 = 0;  TRISCbits.TRISC3 = 0;   PORTCbits.RC0 = 0;  PORTCbits.RC1 = 0;  //Provide Ground To X-axis Of Touch Screen  PORTCbits.RC2 = 0;  //Provide Power To X-axis Of Touch Screen  PORTCbits.RC3 = 1;   // configure A/D convertor  OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST &   ADC_8ANA_0REF,ADC_CH0 & ADC_INT_OFF );   Delay10TCYx( 5 ); // Delay for 50TCY  ConvertADC(); // Start conversion  while( BusyADC() ); // Wait for completion  result_y = ReadADC(); // Read result  CloseADC(); 

После того, как все собрано, скомпилируйте исходник и прошейте ваш МК. Устройство заработает сразу, без каких либо настроек. 1024 точек конечно многовато, но если нужно — уменьшите разрядность.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Микроконтроллер PIC18F452 1
Линейный регулятор LM7805 1
Электролитический конденсатор 47 мкФ 1
Подстроечный резистор 5 кОм 1
Кварцевый резонатор 20 МГц 1
LCD-дисплей 16×2 LCD (HD 44780) 1
4-х проводный резистивный тачскрин 1
Батарея питания 9 В 1