2016年7月26日 星期二

DIY - PIC24:讀取 XPT2046 電阻式觸摸屏 XY 值 (二十八)

DIY - PIC24:讀取 XPT2046 電阻式觸摸屏 XY 值 (二十八): 

MCU 通過 SPISerial Peripheral Interface Bus)接口,首先發送命令 0XD0,然後讀取 X座標的 2個位元組(2 Bytes)資料,然後再發送命令 0X90,再讀取 Y座標的 2個位元組(2 Bytes)資料。 MCU 便有了 XY 的座標值,可以知道在屏的那位置接觸。由於精度設定在 ADC12 位精度,所有讀出的 2個位元組中,只有高 12位元是有效資料。

XPT2046 電阻式觸摸屏的 Control Bit 資料
Microchip PIC24FJ64GA008 XPT2046 觸摸屏 Read_ADC 程式定義:
int xpt2046_Read_ADC(char data){

char i;
int res = 0;

// XPT2046 Total Conversion Complete within 1.6ms
T_CS_LAT_BIT = 0; // Chip Select Enable CS = 0
delayus(1);       // CS Enable Aftre Min 100ns Start Bit

for (i=0; i<8 i="" span="">
    if ((data & 0x80) == 0) {T_MOSI_LAT_BIT=0;}
       else {T_MOSI_LAT_BIT=1;}
      
delayus(1);
T_SCK_LAT_BIT = 1; // Rising Edge Min 200ns Data Valid
delayus(1);
T_SCK_LAT_BIT = 0; // Falling Edge Min 200ns
data <<=1;
}

T_MOSI_LAT_BIT = 0; // Data Output SDO = 0

// Clock 12 bit Read Data from XPT2046
for (i=0; i<12 i="" span="">
T_SCK_LAT_BIT = 0; // Falling Edge Min 200ns
delayus(1);
T_SCK_LAT_BIT = 1; // Rising Edge Min 200ns Data Valid
delayus(1);
res <<=1;
    if (T_MISO_PORT_BIT != 0){ res |= 0x0001;}
       else {res &= 0xFFFE;}
}

T_SCK_LAT_BIT = 0; // Falling Edge Min 200ns
T_CS_LAT_BIT  = 1; // Chip Select Disable CS = 1
return res;
}

由於電阻式觸摸屏的品質和讀數問題,在開始時首先要將觸摸屏校準(Calibration),方法是通過觸摸液晶屏的4個角,採集 X Y 座標的 12位值,再通過數學等比公式計算,就可以得到比例值。座標最小值約為 100 左右,而座標最大值約為 1900 左右,並非 12bit 的最大值 4095

※ 注意:由於電阻式觸摸屏的品質,很可能發現觸摸屏是非線性(nonlinera)比例,那麼便要作多比例調校。

XPT2046 電阻式觸摸屏校準
Microchip PIC24FJ64GA008 XPT2046 觸摸屏計算 XY 位置程式定義:
    x = xpt2046_Read_ADC(0xD0);
    y = xpt2046_Read_ADC(0x90);   

    // Calaculate X Position
        x = x/10;
        x = ((Ax*x)/100)+Bx;

    // Calaculate Y Position
           if (y < 1100 ){
        y = y/10;
        y = ((Ay*y)/100)+By-5;

           } else if (y > 1750) {
        y = y/12;
        y = ((Ay*y)/100)+By+43;
           } else {

        y = y/10;
        y = ((Ay*y)/100)+By-15;
           }

XPT2046 電阻式觸摸屏測試
XPT2046 電阻式觸摸屏讀出的 XY 數值
2016年 7月 26日 天氣報告
氣溫:30.2@ 20:00
相對濕度:百分之 82%
天氣:微雨

沒有留言:

張貼留言