打印

求助CSD,我想你们也会遇到..

[复制链接]
2620|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzscg|  楼主 | 2008-11-25 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sd, ST, se, TI, I2c
main.c中: 就执行以下语句:上电的同时按下键10,就是以下CSD_1_baSnsOnMask[1]==0x2,
但得到的结果总是表示键10没有按下,我怀疑是不是CSD初始化语句里,
把一上电检测的键10的电容值当成初始值,于是就没有识别键10为按下。麻烦帮我分析一下。
 
InitialGlobalParameters();
 
I2cStarUp();
 
————————————————————————————————
void InitialGlobalParameters(void)

 M8C_EnableGInt;
 //Enable CSD
    CSD_1_Start();                          
    CSD_1_SetDefaultFingerThresholds();  
    CSD_1_InitializeBaselines();
 //Enable I2CHW
    I2CHW_Start();  
    I2CHW_EnableMstr();
    I2CHW_EnableInt(); 
 

}
 
 
 
void I2cStarUp(void)
{
   //read all HD information 
 
 I2Cm_ReadData(DistributorNumAddr,&HDInformation_get.DistributorNumber_Read);
 I2Cm_ReadData(DistributorAttitudeAddr,&HDInformation_get.DistributorAttitude_Read);
 
     //I2Cm_SendCommand(SetHDFormatAddr,i);
 switch(HDInformation_get.DistributorNumber_Read&DISTRIBUTOR_NUMBER_MASK)//if HD owned no distributors
   { 
     case 0:                         // no distributors feedback
     Sound_LightFeedback(10,10);   
     OnlyDoOneType=0;                // No do 
  break;
  
  case 1:                         //one distributors ,reserved
  break;
  
  case 2:                         //two distributors,reserved
  break;
  
  case 3:                         //three distributors,reserved
  break;
  
  case 4:                         //four  distributors,reserved
  break;
  
  case 5:                         //ATA
  if((HDInformation_get.DistributorAttitude_Read&DiSTRIBUTOR_ATTITUDE_ATA_MASK)!=0) // no encryption
       {
      if(CSD_1_baSnsOnMask[1] == 0x02) //power on with long pressing f1 botton
      {
      OnlyDoOneType=1;     // Encrypt
   //  EncryptOperation();
   }
   else
       // SwitchWRState();
      OnlyDoOneType=0;    // No do
    }
  else                                    // have encryption
    {
      if(CSD_1_baSnsOnMask[1] == 0x02) //power on with long pressing f1 botton
   {
      //ReEncryptOperation();   //including delete and reset password
      OnlyDoOneType=3; 
   }
   else
     // DecryptOperation();
      OnlyDoOneType=2;         //Decrypt
    }
    I2Cm_SendCommand(0x20,OnlyDoOneType);
 
     break;
    
     default:
  break;         
     }
}   
沙发
mzscg|  楼主 | 2008-11-25 15:37 | 只看该作者

我的分析是:

我猜测是:


一上电以后,初始化了baseline,而此时手指正放在键上,所以对应的键的初始值就等于按键时的值,,那么以后的按键所得到的值与初始值相当,,,CSD将其识别为未按键..


如果真是这样,有什么方法可以实现我的需求:

就是上电识别有键按下.

使用特权

评论回复
板凳
jxp_sun| | 2008-11-25 17:01 | 只看该作者

你说的是正确的

有很多的方法。譬如你有2个按键,同时只有一个被按下。
假定2个按键在手没有按时得到的扫描结果基本相同。
可以比较2个按键得到的扫描结果来判断上电时是否有手按上。

使用特权

评论回复
地板
mzscg|  楼主 | 2008-11-25 18:12 | 只看该作者

jxp_sun是否误解了我的意思..

我的意思是说:


在上电的同时压住一个键(CSD的一个SW);

CSD并没有识别到这个键按下了!!!


我认为的原因如下:

上电后
 CSD_1_Start();                          
 CSD_1_SetDefaultFingerThresholds();  
 CSD_1_InitializeBaselines();

初始所有sensor的Baseline,
这时,,把手压该键时的值当成Baseline了.
因此,其后的手压都基本与Baseline相等,
CSD不把这种手压当成一次压键.


使用特权

评论回复
5
mzscg|  楼主 | 2008-11-25 18:19 | 只看该作者

所以,如何实现我想要的结果

只存在两种可能:

一,将初始Baseline的值设为远低于手压时的值,


二,CSD中,压下某个键时, 与之相连的引脚是否会 出现电平变化??


请PSOC熟人解答..

使用特权

评论回复
6
jxp_sun| | 2008-11-26 14:05 | 只看该作者

NegativeNoiseThrehod/LowBaselineReset

这2个值设置的是多少?

使用特权

评论回复
7
bei_jxing| | 2008-12-1 12:29 | 只看该作者

怎么没人回答呢?

我也遇到了同样的问题,怎么解决呢?期待中......

使用特权

评论回复
8
PSoC_Rock| | 2008-12-4 10:44 | 只看该作者

回LZ:

在上电的同时压住一个键(CSD的一个SW);

CSD并没有识别到这个键按下了!!!


我认为的原因如下:

上电后
CSD_1_Start();                          
CSD_1_SetDefaultFingerThresholds();  
CSD_1_InitializeBaselines();

初始所有sensor的Baseline,
这时,,把手压该键时的值当成Baseline了.
因此,其后的手压都基本与Baseline相等,
CSD不把这种手压当成一次压键.
++++++++++++++++++++++++++++++++++++++++++++++++
是的,第一次CSD并没有识别到这个键按下,但手放了以后再按,CSD就可以识别了,因为CSD的CSD_1_UpdateBaselines();会自动处理这个问题.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

234

帖子

0

粉丝