Тачскрин (Touch Screen - сенсорный экран) изобретен несколько десятилетий назад, однако только в последние года он получил широкое распространение. Для человека, способ ввода при помощи сенсорного экрана более привычен и удобен, чем другие способы.
В данной статье мы рассмотрим работу с резистивным 4-х проводным тачскрином, а именно нахождение X и Y-координат нажатой точки. В проекте мы будем использовать минимальное количество деталей и основной упор статьи сделаем на теорию.
Итак, задачей нашей схемы будет считывание координат с тачскрина и вывод их на LCD-экранчик. Естественно "рулить" всем этим хозяйством будет микроконтроллер.
Список используемых компонентов:
- PIC18F452 - микроконтроллер PIC (
даташит)
- 7805 - стабилизатор напряжения 5В (КРЕН5)
- 20 МГц кварцевый резонатор. Частота не критична, могут быть использованы и 4, 8, 16 Мгц
- программатор PICkit 2 и т.п. для прошивки PIC
- 4-х проводной резистивный тачскрин (Touch Screen). Работают они все по одному принципу, поэтому нет никакой разницы, какой именно вы будете использовать
- 16x2 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 точек конечно многовато, но если нужно - уменьшите разрядность.
Оригинал статьи на английском языке
В архиве исходный код и прошивка для микроконтроллера PIC18F452
touchscreen.rar [5,17 Kb] (cкачиваний: 332)