触摸传感器QST108与PIC16F877A单片机的接口设计
1 概 述
QST108是意法半导体公司针对人机界面的触摸按键控制而推出的电容触摸传感器。
其工作原理采用了美国昆腾公司的电荷转移电容专利技术(QProx),支持8个独立按键,且可选择按键状态检测输出或I2C总线控制2种正常工作方式;同时,通过软件命令可使其进入低功耗模式,当有按键按下时可被唤醒。QST108特有的相邻按键抑制算法使得一个按键在按下未松开时,其他按键处于无效状态;自校准和自动漂移补偿功能使其无须人工校准,从而进一步降低了QST108的应用难度。引脚配置如图1所示,各引脚功能如表1所列。
2 QST108的工作方式
2.1 按键状态检测输出方式
QST108具有按键状态检测输出和I2C总线控制2种正常工作方式。引脚OPT1的高低电平决定QST108的具体工作方式:高电平,工作在按键状态检测输出方式;低电平,则为I2C总线控制方式。当工作在按键状态检测输出方式时,8个按键的状态由引脚OPT6的电平决定,直接或以BCD码方式通过引脚KOUT1~KOUT8输出。其中,BCD码方式只用到引脚KOUT1~KOUT4。由于该操作模式较简单,本文只详细讨论了QST108工作在I2C总线控制方式下,与PIC单片机的接口设计及注意事项。
2.2 I2C总线控制方式
该方式下,QST108通过I2C总线与微控制器相连。QST108作为从机,引脚OPT4、OPT3、OPT2的输入电平决定了QST108作为I2C总线上从机地址的低3位,高4位地址固定为0101。通过软件设置可提供QST108使用的最大灵活性。可提供5个引脚作为通用输出端口。
3 QST108的主要操作命令
当QST108在I2C总线控制方式下工作时,主要是通过I2C总线协议向QST108发送各种控制命令,其中包括初始化设置命令、QST108的按键状态读出命令等。操作命令按其长度分为短命令帧和扩展命令帧。考虑到前者已可完成QST108的正常操作,本文只介绍短命令帧。其数据格式如表2所列,常用命令如表3所列。注意,当QST108收到不同的命令时,会给出不同的应答帧结构。
当命令为短帧结构时,命令帧的首字节的最高位为1,以与扩展命令相区别。命令ID是命令编号,由5位数据组成,用来区分不同的命令;参数位只有1位,当该位置1时代表该命令具有1个字节的参数,若为0则该命令无参数且无校验和字节;校验位用来产生奇校验,注意该校验位只针对命令帧的首字节(即命令帧的第1个字节中,“1”的个数为奇数);8位校验和是命令帧的前2个字节的累加和的低8位。
若QST108未能正确接收到命令或接收了非法命令,则会给出统一的含有错误代码的应答帧(只包含一个字节),如表4所列。对QST108来说,与读触摸按键状态命令相对应的应答数据帧结构如表5所列。
由表4可知,错误帧只有一个字节的数据,校验位提供了判断是否正确接收了该数据的简单依据。错误代码共6位,用来区分不同的错误。比如,错误代码为0x01,表示QST108收到一个非法命令;错误代码为0x11,表示接收的命令的校验和出错等。
由表5可知该应答帧的长度为4个字节,SCK1~SCK8分别代表了触摸按键的状态,为1表示相应的按键按下,为0表示对应的按键没有按下;最后一个字节为校验和,即应答帧前3个字节的累加和的低8位。需要强调的是,按键错误代码只有低3位有效:位0表示QST108正在进行校准状态;位1表示目前累加的按键次数是否到了器件提供的最大按键数目,为1表示达到最大数目;位2表示目前是否达到最少按健次数。同时,还需注意区分QST108发出的应答帧是错误帧,还是正确接收到命令给出的正常应答帧结构。办法很简单,当软件读取应答帧的第1个字节后判断其最高位:是0,表示为正常的应答;是1,表示接收的为错误帧,此时主机只需产生停止位并进行出错处理或停止操作。
4 QST108与PIC的接口电路
图2给出了基于QST108与PIC单片机的触摸按键检测实用电路设计。QST108与PIC通过I2C总线通信,接口简单,按键输入部分参考了其数据手册给出的典型应用电路图的设计方法。单片机选用PIC16F877A,其片内资源丰富,MSSP模块支持I2C总线协议,控制QST108非常方便。QST108的IRQ引脚与PIC16F877A的外部中断输入引脚RB0相连,由于IRQ引脚为开漏输出,所以必须接上拉电阻。当有按键被按下时,IRQ引脚由高变低触发PIC16F877A产生外部中断,单片机发出读取按键状态命令从而确定哪个键被按下,之后根据不同的按键进行不同处理。
5 软件设计
软件部分包括PIC16F877A和QST108的初始化、触摸按键检测子程序、单片机的中断程序,以及根据按键检测的结果进行各种处理的程序等。限于篇幅,本文只给出了PIC16F877A读取按键状态的子程序。假设QST108的器件地址为0,程序如下
触摸传感器 QST108 PIC16F877A 相关文章:
- pic16f877a的电平变化中断(interrupt on change)使用误区(12-03)
- 用单片机pic16f877a实现鼠标数据的采集(12-03)
- PIC16F877A一路舵机参数化控制程序(12-02)
- PIC16F877A与PC机串行通信C语言源程序(12-02)
- PIC16F877A和AVR的单片机的PWM输出程序(12-02)
- PIC16F877的A/D模块(11-24)