问:MPR121返回值不正确
请教个问题,最近用MPR121触摸芯片发现0x00,0x01寄存器返回值不对。
触摸ELE0,返回0x0000;触摸ELE1,返回0x0001;触摸ELE2,返回0x0002;触摸ELE3,返回0x0004;触摸ELE4,返回0x0008;触摸ELE5,返回0x0010;触摸ELE6,返回0x0020;触摸ELE7,返回0x00c0;触摸ELE8,返回0x0000;触摸ELE9,返回0x0001;触摸ELE10,返回0x0002;触摸ELE11,返回0x0004;
按照说明书应该是:
触摸ELE0,返回0x0001;触摸ELE1,返回0x0002;触摸ELE2,返回0x0004;触摸ELE3,返回0x0008;触摸ELE4,返回0x0010;触摸ELE5,返回0x0020;触摸ELE6,返回0x0040;触摸ELE7,返回0x0080;触摸ELE8,返回0x0100;触摸ELE9,返回0x0200;触摸ELE10,返回0x0400;触摸ELE11,返回0x0800;
线路没有问题,三块板子都是一个样。请大侠看看是不是哪里没有设好。
void IIC_5700INT()
{
// Section A
// This group controls filtering when data is > baseline.
write_i2c(touch_shield,MHD_R, 0x01);
write_i2c(touch_shield,NHD_R, 0x01);
write_i2c(touch_shield,NCL_R, 0x02);
write_i2c(touch_shield,FDL_R, 0x00);
// Section B
// This group controls filtering when data is < baseline.
write_i2c(touch_shield,MHD_F, 0x01);
write_i2c(touch_shield,NHD_F, 0x01);
write_i2c(touch_shield,NCL_F, 0xff);
write_i2c(touch_shield,FDL_F, 0x00);
// Section C
// This group sets touch and release thresholds for each electrode
write_i2c(touch_shield,ELE0_T, TOU_THRESH);
write_i2c(touch_shield,ELE0_R, REL_THRESH);
write_i2c(touch_shield,ELE1_T, TOU_THRESH);
write_i2c(touch_shield,ELE1_R, REL_THRESH);
write_i2c(touch_shield,ELE2_T, TOU_THRESH);
write_i2c(touch_shield,ELE2_R, REL_THRESH);
write_i2c(touch_shield,ELE3_T, TOU_THRESH);
write_i2c(touch_shield,ELE3_R, REL_THRESH);
write_i2c(touch_shield,ELE4_T, TOU_THRESH);
write_i2c(touch_shield,ELE4_R, REL_THRESH);
write_i2c(touch_shield,ELE5_T, TOU_THRESH);
write_i2c(touch_shield,ELE5_R, REL_THRESH);
write_i2c(touch_shield,ELE6_T, TOU_THRESH);
write_i2c(touch_shield,ELE6_R, REL_THRESH);
write_i2c(touch_shield,ELE7_T, TOU_THRESH);
write_i2c(touch_shield,ELE7_R, REL_THRESH);
write_i2c(touch_shield,ELE8_T, TOU_THRESH);
write_i2c(touch_shield,ELE8_R, REL_THRESH);
write_i2c(touch_shield,ELE9_T, TOU_THRESH);
write_i2c(touch_shield,ELE9_R, REL_THRESH);
write_i2c(touch_shield,ELE10_T, TOU_THRESH);
write_i2c(touch_shield,ELE10_R, REL_THRESH);
write_i2c(touch_shield,ELE11_T, TOU_THRESH);
write_i2c(touch_shield,ELE11_R, REL_THRESH);
write_i2c(touch_shield,0x5c, 0x30);
// write_i2c(touch_shield,0x5d, 0x00);
// Section D
// Set the Filter Configuration
// Set ESI2
write_i2c(touch_shield,FIL_CFG, 0x42);
// Section E
// Electrode Configuration
// Enable 6 Electrodes and set to run mode
// Set ELE_CFG to 0x00 to return to standby mode
// write_i2c(touch_shield,ELE_CFG, 0x0c); // Enables all 12 Electrodes
//write_i2c(touch_shield,ELE_CFG, 0x06); // Enable first 6 electrodes
// Section F
// Enable Auto Config and auto Reconfig
write_i2c(touch_shield,ATO_CFG0, 0x0B);
write_i2c(touch_shield,ATO_CFGU, 0xC9); // USL = (Vdd-0.7)/vdd*256 = 0xC9 @3.3V
write_i2c(touch_shield,ATO_CFGL, 0x96); // LSL = 0.65*USL = 0x82 @3.3V
write_i2c(touch_shield,ATO_CFGT, 0xBb); // Target = 0.9*USL = 0xB5 @3.3V
write_i2c(touch_shield,ELE_CFG, 0x0c); // Enables all 12 Electrodes
}
uchar get_key()
{
uchar Key_CH=0;
uchar count=0;
uchar i=0;
uint key_data;
uint key_data2;
key_data=read_i2c(touch_shield,0x01)<<8;
key_data=key_data| read_i2c(touch_shield,0x00);
key_data2=key_data;
// for (i=0; i<12; i++) //检测有多少按键被触摸
// {
// if ((dat & (1<<i)))
// count++;
// }
// i=0;
// if(count==1)
// {
// while(((dat & (1<<i)) == 0)&&(i<12))
// i++;
// i++;
// return i;
// }
// return 0;
while(key_data2!=0)
{
key_data2=read_i2c(touch_shield,0x01)<<8;
key_data2=key_data2| read_i2c(touch_shield,0x00);
}
return key_data;
}
亲,给你发邮件了哟,请注意查收,如有其它问题,可以给我发邮件哈
做指纹锁的按键。
亲,你的问题我们已经收到了哦,请问是在什么项目的时候出现的问题呀,能详细说明下吗?好方便我们联系专家帮你解决问题哈