Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

您好,

我希望通过代码来设置補償 IDAC,当前rawcount会随着设置的補償 IDAC变化而变化,但ベースライン没有跟随变化,请问是什么原因?谢谢,如下是相关的代码。

ボイドCapSense_calibrationSetCompesation(ボイド)
{
uint8 i;
uint8 idac;
 
for(i=0; i<(CY_CAPSENSE_TOUCHPAD0_COL_SENSORS); i++)
{
ながら(CY_CapSense_ReadSensorRaw(i) < 800)
{
if(CY_CapSense_ReadidacIndex(i)>1)
{
idac = (CY_CapSense_ReadidacIndex(i) - 1);
CY_CapSense_WriteidacIndex(i,idac );
}
然も無くば
{
壊す;
}
Cy_CapSense_UpdateSensorBaseline(CY_CAPSENSE_TOUCHPAD0_WDGT_ID,I,&cy_capsense_context);
}
ながら(CY_CapSense_ReadSensorRaw(i) > 3000)
{
idac = (CY_CapSense_ReadidacIndex(i) + 1);
CY_CapSense_WriteidacIndex(i,IDAC);
 
Cy_CapSense_UpdateSensorBaseline(CY_CAPSENSE_TOUCHPAD0_WDGT_ID,I,&cy_capsense_context);
}
}
}
 
void CY_CapSense_WriteidacIndex(uint8_t widgetId,uint8_t idacIndexValue)
{
cy_stc_capsense_sensor_context_t *cy_ptrSenWdgt;
 
cy_ptrSenWdgt = &cy_capsense_tuner.sensorContext[widgetId];
cy_ptrSenWdgt->idacComp = idacIndexValue;
}
 
uint8_t CY_CapSense_ReadidacIndex(uint8_t widgetId)
{
cy_stc_capsense_sensor_context_t定数 *cy_ptrSenWdgt;
uint16_tデータ;
cy_ptrSenWdgt = &cy_capsense_tuner.sensorContext[widgetId];
data = cy_ptrSenWdgt->idacComp;
データを返す。
}
 
uint16_t CY_CapSense_ReadSensorRaw(uint8_t widgetId)
{
cy_stc_capsense_sensor_context_t定数 *cy_ptrSenWdgt;
uint16_tデータ;
 
cy_ptrSenWdgt = &cy_capsense_tuner.sensorContext[widgetId];
データ = cy_ptrSenWdgt->raw;
データを返す。
}
0 件の賞賛
1 解決策
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你需要的这个功能,我们有现有的例程和代码,逻辑是在固定 ModIDAC 值的情况下,通过tuning CompIDAC 数值将 rawdata 调整到设定 level, 你只需要参考附件工程,在需要的位置调用 CompIdacCalibrationApp 函数即可实现上述功能。

Note: 该算法替代了传统的 IDAC Calibration 算法,所以组件中的 IDAC AUTO Calibration 选项不可以勾选,每个 Sensor 的实际 ModIDAC 数值,在组件的阈值设置界面中设置好就可以了

 

元の投稿で解決策を見る

0 件の賞賛
7 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

Jaime, 请问你最终想实现的功能是什么呢,在固件 ModIDAC 的情况下通过仅调整 CompIDAC 来实现 Rawdata 自动 calibration 吗?

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちはビジョン、

想实现的功能是把RAWデータ保持在一个合理范围,因为在高低温调试的时候,发现rawdata会溢出,导致触摸失效,所以我希望可以通过代码来手动调整CompIDAC,将rawdata保持在一个可正常触控的范围。

0 件の賞賛
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你需要的这个功能,我们有现有的例程和代码,逻辑是在固定 ModIDAC 值的情况下,通过tuning CompIDAC 数值将 rawdata 调整到设定 level, 你只需要参考附件工程,在需要的位置调用 CompIdacCalibrationApp 函数即可实现上述功能。

Note: 该算法替代了传统的 IDAC Calibration 算法,所以组件中的 IDAC AUTO Calibration 选项不可以勾选,每个 Sensor 的实际 ModIDAC 数值,在组件的阈值设置界面中设置好就可以了

 

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

*_SF 例程适用于 PSoC4000/PSOC4100/PSoC4200/M/L 系列芯片,*_P4S 例程适用于 PSoC4-S 系列芯片(PSOC4000S/4100S/4100S Plus 等)

但是做这种重新标定,一定要注意除了设置 rawdata 的上限以外,还需要设定下限,否则当温度恢复之后,在高温下标定的 IDAC 参数会让 rawdata 降低到非常低的 level, 此时就需要触发下限做重新的标定。另外,重新标定的前提有两个,rawdata 超出标定范围且保持了一段时间(debounce),还有就是必须在按键没有触发的前提下进行。

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

こんにちはビジョン、

上述例程有基于modustoolbox3.1的吗?目前项目调试都是在modustoolbox3.1上进行开发的,谢谢。

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

没有,自己移植一下吧

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

好的,谢谢!

0 件の賞賛