Самостоятельное создание устройства с сенсорной панелью


PDF версия

Если вашей новой разработке нужен простой и интуитивный интерфейс, то графический ЖКИ с сенсорной панелью является лучшим выбором, поскольку вместе они образуют сенсорный экран. Используя такой экран и небольшое количество электронных компонентов, вы сможете создать привлекательное и удобное устройство.

Самостоятельное создание управляющего устройства с сенсорной панелью

Сенсорная панель – это тонкая, самоклеющаяся пластина, располагающаяся поверх экрана графического ЖКИ. Она настолько чувствительна к давлению, что даже легкое прикосновение вызывает некоторое изменение выходного сигнала. Существует несколько типов сенсорных панелей. Простейшим из них является резистивная сенсорная панель, которая и будет здесь описана.

Принцип работы

Резистивная сенсорная панель состоит из двух прозрачных твердых пленок, образующих подобие “бутерброда”, которые на своих внутренних сторонах имеют резистивное покрытие. Сопротивление этих слоев обычно не превосходит 1 кОм. Противоположные стороны покрытий имеют контакты, к которым присоединяется плоский кабель. Процесс определения координат точки, в которой произошло касание сенсорной панели можно разделить на два шага. На первом шаге определяется координата X, а на втором шаге определяется координата Y точки касания. Чтобы определить координату X, необходимо подключить левый контакт поверхности X к общей шине, а правый контакт к источнику питания. Это приводит к тому, что при нажатии на сенсорную пластину образуется делитель напряжения.

Значение напряжения с делителя считывается верхним контактом поверхности Y. Напряжение может находиться в диапазоне от 0 В до напряжения источника питания и зависит от координаты X. Если точка касания расположена около левого контакта поверхности X, выходное напряжение будет близко к 0 В. Чтобы определить координату Y, необходимо подключить нижний контакт поверхности Y к общей шине, а верхний контакт к источнику питания. В этом случае, напряжение считывается с левого контакта поверхности X.

Рисунок 1. Внутренняя структура сенсорной панели


Подключение панели к микроконтроллеру

Чтобы подключить сенсорную панель к микроконтроллеру необходимо создать схему для управления сенсорной панелью. С помощью этой схемы, микроконтроллер подключает необходимые контакты сенсорной панели к общей шине и источнику питания (как описано выше), чтобы определить координаты X и Y (см. Принципиальную схему №1). Верхний контакт поверхности Y и нижний контакт поверхности X подключены к АЦП микроконтроллера. Координаты X и Y определяются путем измерения напряжения на этих контактах, соответственно. Программное обеспечение создает меню на экране графического ЖКИ, включает/выключает схему управления сенсорной панелью и считывает значения АЦП, которые представляют реальные координаты X и Y точки касания.

После определения координат точки касания, можно определить, какое действие должен выполнять микроконтроллер. Для иллюстрации, рассмотрим «Пример №1». В нем показано, как можно включать/выключать два светодиода, A и B, присоединенных к выводам микроконтроллера, используя дисплей и сенсорную панель.

Принципиальная схема 1. Подключение сенсорного экрана

 

Встроенный разъем для плоского кабеля до… …и после подключения сенсорной панели.

 

Функции, использованные в программе

ADC_Read() Чтение аналогового сигнала*
Delay_ms() Задержка
Glcd_box() Рисование закрашенного прямоугольника
Glcd_circle() Рисование окружности
Glcd_Dot() Рисование точки

Glcd_Fill() Очистка/закраска дисплея*

Glcd_H_Line() Рисование горизонтальной линии*

Glcd_Image() Импорт изображения

Glcd_Init()  Инициализация ЖКИ*

Glcd_Line() Рисование линии

Glcd_Read_Data() Чтение данных с ЖКИ

Glcd_Rectangle() Рисование прямоугольника*

Glcd_Set_Font() Выбор шрифта*

Glcd_Set_Page() Выбор страницы

Glcd_Set_Side() Выбор области дисплея

Glcd_Set_X() Определение координаты X

Glcd_V_line() Рисование вертикальной линии

Glcd_Write_Char() Запись символа

Glcd_Write_Data() Запись данных

Glcd_Write_Text() Запись текста*

* Функции Glcd библиотеки, использованные в программе

 

Пример 1: Программа для иллюстрации работы с сенсорным экраном

// Подключение модуля Glcd
char GLCD_DataPort at PORTC; char GLCD_DataPort_Direction at DDRC;
sbit GLCD_CS1 at PORTD.B2; sbit GLCD_CS1_Direction at DDRD.B2;
sbit GLCD_CS2 at PORTD.B3; sbit GLCD_CS2_Direction at DDRD.B3;
sbit GLCD_RS at PORTD.B4; sbit GLCD_RS_Direction at DDRD.B4;
sbit GLCD_RW at PORTD.B5; sbit GLCD_RW_Direction at DDRD.B5;
sbit GLCD_EN at PORTD.B6; sbit GLCD_EN_Direction at DDRD.B6;
sbit GLCD_RST at PORTD.B7; sbit GLCD_RST_Direction at DDRD.B7;
// Конец блока подключения модуля Glcd
sbit DRIVE_A at PORTA.B2; sbit DRIVE_A_Direction at DDRA.B2;
// Подключение модуля сенсорной панели
sbit DRIVE_B at PORTA.B3; sbit DRIVE_B_Direction at DDRA.B3;
// Конец блока подключения сенсорной панели
long x_coord, y_coord, x_coord128, y_coord64;
// масштабирование положения координатной сетки  x-y
unsigned int GetX() { //чтение координаты X
    DRIVE_A = 1; // DRIVEA = 1 (ЛЕВЫЙ драйвер вкл, ПРАВЫЙ драйвер вкл)
    DRIVE_B = 0; // DRIVEB = 0 (ВЕРХНИЙ драйвер выкл, НИЖНИЙ драйвер выкл )
Delay_ms(5);
    return ADC_Read(0); // ЧТЕНИЕ координаты-X (ВЕРХ)
}
unsigned int GetY() { //чтение координаты Y
    DRIVE_A = 0; // DRIVEA = 0 (ЛЕВЫЙ драйвер выкл, ПРАВЫЙ драйвер выкл)
    DRIVE_B = 1; // DRIVEB = 1 (ВЕРХНИЙ драйвер вкл, НИЖНИЙ драйвер вкл)
    Delay_ms(5);
    return ADC_Read(1); // ЧТЕНИЕ координаты- Y (ЛЕВО)
}
void main() {
    DRIVE_A_Direction = 1; // Установить вывод DRIVE_A как выход
    DRIVE_B_Direction = 1; // Установить вывод DRIVE_B как выход
    PORTB.B0 = 0;
    DDRB.B0 = 1; // Установить вывод PB0 как выход (по умолчанию 0)
    PORTB.B1 = 0;
    DDRB.B1 = 1; // Установить вывод PB1 как выход (по умолчанию 0)
    Glcd_Init(); // Инициализация GLCD
    Glcd_Fill(0); // Очистить GLCD
    Glcd_Set_Font(font5x7, 5, 7, 32); // Задать шрифт,
    Glcd_Fill(0);
    Glcd_Write_Text(“TOUCHPANEL EXAMPLE”,10,0,1);
    Glcd_Write_Text(“MIKROELEKTRONIKA”,17,7,1);
    Glcd_Rectangle(8,16,60,48,1); //Нарисовать Кнопки на экране GLCD:
    Glcd_Rectangle(68,16,120,48,1);
    Glcd_Box(10,18,58,46,1);
    Glcd_Box(70,18,118,46,1);
    Glcd_Write_Text(“BUTTON1”,14,3,0);
    Glcd_Write_Text(“PB0 OFF”,14,4,0);
    Glcd_Write_Text(“BUTTON2”,74,3,0);
    Glcd_Write_Text(“PB1 OFF”,74,4,0);
    while (1) { // прочитать координаты X-Y и преобразовать к виду 128×64
        x_coord = GetX();
        y_coord = GetY();
        x_coord128 = (x_coord * 128) / 1024;
        y_coord64 = 64 -((y_coord *64) / 1024);
        //если выбрана КНОПКА1
        if ((x_coord128 >= 10) && (x_coord128 <= 58) && (y_coord64 >= 18) && (y_coord64 <= 46)) {
            if(PORTB.B0 == 0) {
                PORTB.B0 = 1;
                Glcd_Write_Text(“PB0 ON “,14,4,0);
            }
            else {
                PORTB.B0 = 0;
                Glcd_Write_Text(“PB0 OFF”,14,4,0);
            }
        }
        //если выбрана КНОПКА2
        if ((x_coord128 >= 70) && (x_coord128 <= 118) && (y_coord64 >= 18) && (y_coord64 <= 46)) {
            if(PORTB.B1 == 0) {
                PORTB.B1 = 1;
                Glcd_Write_Text(“PB1 ON “,74,4,0);
            }
            else {
                PORTB.B1 = 0;
                Glcd_Write_Text(“PB1 OFF”,74,4,0);
            }
        }
        Delay_ms(100);
    }
}

 

Код для этого примера написанный на языках C, Basic и Pascal для микроконтроллеров AVR®, так же как и для микроконтроллеров PIC® и dsPIC® можно найти на web-сайте www.mikroe.com/en/article/

 

Оставьте отзыв

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