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

Советы по созданию простого тачскрин интерфейса. Узнайте о работе резистивного 4-х проводного тачскрина и его подключении к микроконтроллеру PIC18F452.

Тачскрин (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. АЦП микроконтроллера считывает данные с каждой координаты и т.о. формируется координата нажатой точки.

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

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

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

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

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

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

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

Программа

В программе реализуется две основные задачи: аналогово-цифровое преобразование координат и вывод данных на 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 точек конечно многовато, но если нужно — уменьшите разрядность.

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

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

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