大无语事件,本来有一块TTP229的4*4的触摸按键,之前调好了的,再次使用时发现用不了,误触发严重,然后想着再买一个,就买了一个外表一模一样的模块的。没想到驱动ic把ttp229换成了VK36N16I芯片,最可恨的就是客户给的资料还是TTP229的资料,结果一顿调啊调,连点反应都没有。
最后用放大镜看ic才发现,不是ttp229,然后再问客户拿资料,这个模块还没有mcu驱动的代码,都是arduino的历程,这对于我这种没接触过的arduino就很无语,网上找不到VK36N16I的资料和例程,这对于我这种CV大师很不友好。
还是找客服,给了VK36N16I的资料。
使用的简单的iic驱动方式
时序图就是这样子。
1.开始信号
2.读地址
2.应答
3.读取字节
4.应答
5读取字节
6.非应答
7.结束信号
这个是用stm32驱动的代码
//获取按键值
void Matrix_Key_Git_Vlaue(uint16_t * val)
{
uint8_t byte_l=0;
uint8_t byte_h=0;
*val=0;
//开始信号
matrix_key_iic_start();
//读地址
matrix_key_iic_send_byte(0xcb);
//应答
matrix_key_iic_ack();
//读字节
byte_l=matrix_key_iic_read_byte(1);
//读字节
byte_h=matrix_key_iic_read_byte(0);
//读字节
matrix_key_iic_stop();
printf("byte_l=%x, byte_h=%x \r\n",byte_l,byte_h);
*val=((*val|byte_h)<<8);
*val=*val|byte_l;
printf("val=%x\r\n",*val);
}
看一下16位字节对于那个按键
按照资料给的,应该是按键1对于0x0001,2对于0X0002一次顺序才对
但是实际是按键1对于0x0001,按键4才对应0X0002,是列一次顺序,算了,有规律就行。
看下实际打印 16进制
逻辑分析仪抓的按键9 对于0x0400
注意:如果有返回值,数据乱码的情况下,降低IIC的频率,10k-50k就可以了