IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> GD32学习笔记(2)触摸屏驱动芯片GT1151Q -> 正文阅读

[嵌入式]GD32学习笔记(2)触摸屏驱动芯片GT1151Q

???????一般LCD都会组合触摸屏以扩展相应的功能,这里要注意,触摸屏和LCD是不同的东西,前者用于收集用户的触控信息,后者用于显示。人机交互实际上是单片机通过触摸屏收集到触控信息后,根据触控在LCD上显示。下面介绍触摸屏的原理及相应触摸屏驱动芯片的作用。

触摸屏

组成

???????触摸屏分为表面电容式触摸屏和投射式触摸屏。前者不透光,一般用于如笔记本电脑触控板之类的非显示领域;后者透光,一般用在手机屏幕等显示领域。投射式触摸屏实际上由三层物质组成,如下图所示:
在这里插入图片描述
???????三层物质的特点如下:

名称特点作用
保护玻璃手指直接接触的地方保护内部结构
ITO层有电极组成,具有导电性和透光性用于完成触控检测的核心部件
基板具有相应接口,承上启下支撑、连接检测电路

检测原理

???????触摸屏按照检测原理可以分为交互电容型和自我电容型,交互电容型触摸屏的ITO层XY两组电极之间彼此结合组成电容,而自我电容型触摸屏两组电极与地构成电容,结构上的差别也导致检测方法的差别,这里介绍一下交互电容型触摸屏检测方法。
???????交互式电容触摸屏的ITO层XY轴之间的电容位置代表了触摸屏的实际坐标,检测电容的充电时间即可确定是否有手指按下,和电容按键原理类似。检测触点坐标时,第1条X轴的电极发出激励信号,所有Y轴的电极接收信号,通过检测交互电容的充电时间可检测出各条Y轴与第1条X轴相交的交互电容的大小。接着各条X轴依次发出激励信号,Y轴重复上述步骤,根据得到的触摸屏电容量变化的二维数据表,即可得知触摸点的坐标。

GT1151Q芯片

简介

???????触摸屏控制芯片用于检测ITO层电极之间电容的变化,从而得到手指按压的具体坐标,同时将这些坐标和状态信息进行编码,并保存在芯片内部相应的寄存器内,供微控制器读取和调用。
???????GT1151Q芯片触摸扫描频率为120Hz,检测通道有16个驱动通道和29个感应通道,两种通道分别对应ITO层的X和Y电极数,数字越大表示检测坐标的精度越高。GT1151Q最高支持10点触控,其引脚功能如下表所示:

引脚号名称功能描述
1 ~ 3DRV02 ~ DRV00触摸驱动信号输出
4DRV00模拟地
5 ~ 33SENS00 ~ SENS28触摸模拟信号输入
34AVDD28模拟电压输入
35AVDD22LDO输出
36DVDD12LDO输出
37DGND数字地
38INT中断信号
39 ~ 40Sensor_OPT1 ~ Sensor_OPT2模组识别口
41I2C_SDAI2C数据信号
42I2C_SCLI2C时钟信号
43NC
44VDDIOGPIO电平控制
45/RST系统复位脚
46 ~ 58DRV15 ~ DRV03触摸驱动信号输出

???????GT1151Q芯片的大部分引脚与触摸屏连接,用于输出触摸驱动信号和获取触摸模拟信号,只有4个引脚与开发板连接,分别是INT、/RST、I2C_SCL和I2C_SDA。其中INT为中断引脚,用于检测坐标变化,/RST为复位引脚,I2C_SCL和I2C_SDA为I2C接口的时钟线和数据线。
???????GT1151Q芯片使用I2C协议与微控制器进行通信,器件地址为0x14。

寄存器

???????这里将要介绍一下GT1151Q芯片相应的寄存器,在相应文件可使用宏定义方便控制:

#define GT1151Q_CTRL_REG   0x8040      //GT1151Q控制寄存器
#define GT1151Q_CFGS_REG   0x8050      //GT1151Q配置起始地址寄存器
#define GT1151Q_PID_REG    0x8140      //GT1151Q产品ID寄存器

#define GT1151Q_GSTID_REG  0x814E      //GT1151Q当前检测到的触摸情况
#define GT1151Q_TP1_REG    0x8150      //第一个触摸点数据地址
#define GT1151Q_TP2_REG    0x8158      //第二个触摸点数据地址
#define GT1151Q_TP3_REG    0x8160      //第三个触摸点数据地址
#define GT1151Q_TP4_REG    0x8168      //第四个触摸点数据地址
#define GT1151Q_TP5_REG    0x8170      //第五个触摸点数据地址

//IIC设备地址(含最低位)
#define GT1151Q_DEVICE_ADDR 0x28

控制寄存器(0x8040)

???????控制寄存器用于设置GT1151Q芯片完成相应的操作,具体介绍如下表:
在这里插入图片描述

状态寄存器(0x814E)

???????状态寄存器用于存储当前的触点数目,具体介绍如下表,其中bit7为标志位,触点不为0时该位为1,并且不会自动清零。bit3 ~ bit0为触点数目:

在这里插入图片描述

坐标寄存器(0x8150 ~ 0x819D)

???????坐标寄存器用于存储触点信息,共有60个,即每个触点通过6个寄存器存储信息,以触点1为例,如下表所示,0x8150 ~ 0x8151用于存储触点1X坐标值的低字节和高字节,0x8152 ~ 0x8153用于存储触点1Y坐标值的低字节和高字节,0x8154 ~ 0x8155用于存储触点1的宽和高:

在这里插入图片描述
???????对触点坐标值的存放,可使用以下结构体:

typedef struct
{
  u16 x;    //横坐标,0xFFFF表示无效值
  u16 y;    //纵坐标,0xFFFF表示无效值
  u16 size; //触点大小
}StructTouchPoint;

核心代码

???????作为核心功能为获取触点坐标的芯片,获取的数据可通过存放于以下结构体:

typedef struct
{
  u8               pointNum;                 //触摸点数,最多支持POINT_NUM_MAX个触摸点
  u8               pointFlag[POINT_NUM_MAX]; //触摸点按下标志位,1-触摸点按下,0-未检测到触摸点按下
  StructTouchPoint point[POINT_NUM_MAX];     //坐标点数据
}StructTouchDev;

???????通过以下函数可获取数据(仅供参考):

void ScanGT1151Q(StructTouchDev* dev)
{
  static u16 s_arrRegAddr[5] = {GT1151Q_TP1_REG, GT1151Q_TP2_REG, GT1151Q_TP3_REG, GT1151Q_TP4_REG, GT1151Q_TP5_REG};//各个触点数据地址
  u8  regValue;
  u8  buf[6];
  u8  i;
  u16 swap;

  //读取状态寄存器
  IICCommonReadBytesEx(&s_structIICDev, GT1151Q_GSTID_REG, &regValue, 1, IIC_COMMON_NACK);//读取地址为GT1151Q_GSTID_REG,长度为1字节的数据至regValue中
  regValue = regValue & 0x0F;

  //记录触摸点个数
  dev->pointNum = regValue;

  //清除状态寄存器
  regValue = 0;
  IICCommonWriteBytesEx(&s_structIICDev, GT1151Q_GSTID_REG, &regValue, 1);

  //循环获取5个触摸点数据
  for(i = 0; i < 5; i++)
  {
    //检测到触点
    if(dev->pointNum >= (i + 1))
    {
      IICCommonReadBytesEx(&s_structIICDev, s_arrRegAddr[i], buf, 6, IIC_COMMON_NACK);
      dev->point[i].x    = (buf[1] << 8) | buf[0];
      dev->point[i].y    = (buf[3] << 8) | buf[2];
      dev->point[i].size = (buf[5] << 8) | buf[4];
      
      //横屏坐标转换
      if(1 == s_structLCDDev.dir)
      {
        swap            = dev->point[i].x;
        dev->point[i].x = dev->point[i].y;
        dev->point[i].y = swap;
        dev->point[i].x = 800 - dev->point[i].x;
      }

      //标记触摸点按下
      dev->pointFlag[i] = 1;
    }

    //未检测到触点
    else
    {
      dev->pointFlag[i] = 0;       //未检测到
      dev->point[i].x   = 0xFFFF;  //无效值
      dev->point[i].y   = 0xFFFF;  //无效值
    }
  }
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:46:32  更:2022-02-26 11:48:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:52:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码