新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 触摸传感器QST108与PIC单片机的接口设计

触摸传感器QST108与PIC单片机的接口设计

作者:黄亚 钱滔 张益维时间:2008-07-15来源:单片机与嵌入式系统应用收藏

  1 概 述

本文引用地址:http://www.eepw.com.cn/article/85724.htm

  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总线控制方式下,与设计及注意事项。

  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与电路

  图2给出了基于QST108与的触摸按键检测实用电路设计。QST108与PIC通过I2C总线通信,简单,按键输入部分参考了其数据手册给出的典型应用电路图的设计方法。选用PIC16F877A,其片内资源丰富,MSSP模块支持I2C总线协议,控制QST108非常方便。QST108的IRQ引脚与PIC16F877A的外部中断输入引脚RB0相连,由于IRQ引脚为开漏输出,所以必须接上拉电阻。当有按键被按下时,IRQ引脚由高变低触发PIC16F877A产生外部中断,单片机发出读取按键状态命令从而确定哪个键被按下,之后根据不同的按键进行不同处理。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭