Простий тачскрін (touch screen) інтерфейс на PIC
Тачскрин (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 | 1 | ||||
Лінійний регулятор |
LM7805
|
1 | ||||
Електролітичний конденсатор | 47 мкФ | 1 | ||||
Підстроєчний резистор | 5 кОм | 1 | ||||
Кварцовий резонатор | 20 МГц | 1 | ||||
LCD-дисплей | 16x2 LCD (HD 44780) | 1 | ||||
4-провідний резистивний тачскрин | 1 | |||||
Батарея живлення | 9 В | 1 | ||||
Прикреплені файли:
- touch_screen.rar (4 Кб)