XW09A触摸芯片
XW09A是厦门市芯网电子科技有限公司出品的一颗触摸芯片,支持9键多点触摸,I2C接口,带中断引脚。
以下摘抄自芯片手册
极高的灵敏度,可穿透13mm 的玻璃,感应到手指的触摸
超强的抗干扰和ESD 能力,不加任何器件即可通过人体8000v 实验
外围电路简单,最少只需一个4.7nf 电容,芯片即可正常工作
外围寄生电容自动校正
工作电压范围:2.5 ~ 5.5 V
SOP16 环保封装
电路图
外围电路很简单,就是几个电容,连接到触摸键时需要通过1K电阻,SDA,SCL,INT需要上拉,电源输入最好经过RC滤波,实测无RC滤波也不影响。
通讯时序
按上图写软件就可以,说明一下:
1 主机发送起始信号
2 主机发送7位地址和1位读,对于本芯片来说,就是发送0x81
3 等待芯片响应的ACK位
4 连续读取16位按键数据,其中起始3位是高电平,抛弃,然后连续读的9位是按键状态,最后4位抛弃
5 NACK信号
6 主机发送STOP
通信结束。
软件编写
因为其I2C的通讯协议与标准I2C通讯协议不兼容,故没有采用硬件I2C,而是用的软件I2C,当INT进中断后置标志位,在主程序中查询标志位,并调用以下这个函数即可。文章来源:https://www.toymoban.com/news/detail-535899.html
u8 I2C_Read_XW09A(void)//i2c读XW09A,返回值是是当前的键值,从1开始计数,为0表示未按下
{
u16 i,receive=0;
u8 ret=0;
I2C_SDA_OUT();//SDA设置为输出
//主机发送开始信号
I2C_Start();
//发送8位地址
I2C_Send_Byte(0x81); //xw09a高7位表示地址,其值为0x4,左移1位为i2c地址,再加上最低位的1(表示读取),组合后地址为0x81
//等待从机应答
if(I2C_Wait_Ack() != 0)
return 0;
//接收16位数据
I2C_SDA_IN();//SDA设置为输入
for(i=0;i<16;i++ )
{
I2C_SCL(0);
delay_us(1);
I2C_SCL(1);
receive<<=1;
if(I2C_SDA_READ())
receive++;
else
ret = i-2;
delay_us(1);
}
//主机发送无应答信号
I2C_NAck();//发送nACK
//主机发送停止信号
I2C_Stop();
//SDA设置为输入
I2C_SDA_IN();//SDA设置为输入
return ret;
}
问题和解决
任何时刻均可以读取芯片数据,但只能在INT为低电平期间才会有正确的触摸状态的数据。
这一点我开始没有注意到,我是设定的上升沿进中断,读取的状态如下图
SDA始终是高电平。
后来找厂家咨询,索要时序图,但未能提供,最后是把板子寄到厂家搞定,最后总结问题,才发现我的时序是上升沿进中断,改为下降沿进中断,然后读取i2c,一切正常,时序如下图:
在解决问题期间,厂家的客服和技术支持表现出了极其负责的态度,在这里为他们点赞,也祝愿芯网公司产品大卖。
同时希望厂家能把PDF文档做得完善些,将INT,SDA,SCL的时序图放进去,如果PDF里面有这个图的话,可以让用户少走弯路。文章来源地址https://www.toymoban.com/news/detail-535899.html
到了这里,关于嵌入式开发--XW09A触摸芯片的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!