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

Тачскрин (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 точек конечно многовато, но если нужно — уменьшите разрядность.

Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

МикроконтроллерPIC18F4521

Линейный регуляторLM78051

Электролитический конденсатор47 мкФ1

Подстроечный резистор5 кОм1

Кварцевый резонатор20 МГц1

LCD-дисплей16×2 LCD (HD 44780)1

4-х проводный резистивный тачскрин1

Батарея питания9 В1
Добавить все

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

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

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

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

Ваш адрес email не будет опубликован.