Тачскрин (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)
Прикрепленные файлы:
- touch_screen.rar (4 Кб)