首页> 网友帮帮帮> 当前页

问: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;

}

 

 
baikemm :

亲,给你发邮件了哟,请注意查收,如有其它问题,可以给我发邮件哈

panhl2001 :

做指纹锁的按键。

baikemm :

亲,你的问题我们已经收到了哦,请问是在什么项目的时候出现的问题呀,能详细说明下吗?好方便我们联系专家帮你解决问题哈