java怎么拦截某个对象
228
2022-11-06
触摸传感器QST108与PIC单片机的接口设计
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,表示接收的为错误帧,此时主机只需产生停止位并进行出错处理或停止操作。
5 软件设计
软件部分包括PIC16F877A和QST108的初始化、触摸按键检测子程序、单片机的中断程序,以及根据按键检测的结果进行各种处理的程序等。限于篇幅,本文只给出了PIC16F877A读取按键状态的子程序。假设QST108的器件地址为0,程序如下:
结 语
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~