- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
静電ボタン検査ツール向けに毎回キャリブレーションを実施し、検査前のシグナル値0を保証したいです。
キャリブレーションを実行するAPIは下記で合っていますでしょうか?
・個別用 CapSense_CalibrateWidget(uint32 widgetId)
・全体用 CapSense_CalibrateAllWidgets(void)
又、CapSenseでタッチ動作後にシグナル値が0にならない場合、下記No3(USB抜差)しかシグナル値がリセットされませんでしたが、
No1,2はキャリブレーション無し、No3はキャリブレーション有りで認識合っていますでしょうか?
No1. 再接続 [Stop]->[Disconnect]->[Connect]->[Start]
No2. 再起動 [Stop]->[Disconnect]->CapSense終了->CapSense起動->[Connect]->[Start]
No3. USB抜差[Stop]->[Disconnect]->USB抜差->[Connect]->[Start]
(環境)
Hardware : CY8CKIT-145-40XX PSoC 4000S Prototyping Kit
IC : CY8C4045AZI-S413
Sofware : PSoC Creator 4.2, CapSense
Base Project: CY8CKIT-145 Code Example.zip
解決済! 解決策の投稿を見る。
- ラベル:
-
ispn:40040:1:0
-
l1:314:1:0
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
御所望の処理「シグナル値の0リセット」は可能と考えます。
考えられる方法としては下記になります。(英語表記で申し訳ございません)
1. Sensor is Active for N * main cycles, regards the sensor is stuck, call CapSense_InitialAllBaselines();
2. Sensor is Inactive for N * main cycles, regards the sensor is stuck, call CySoftwareReset() to reset chip.
3. Use a customized threshold, if signal larger than the signal for N * main cycles, call CapSense_InitialAllBaselines();
4. If there is no long touch requirement, enable Sensor Auto Reset.
5. Unplug/Re-plug device may have risk: when power on, the ripple would be larger than other moment, if CapSense_Start() executed immediately, it may cause wrong calibration value.
6. CapSense_ProcessAllWidgets() won’t change IDAC. So..the you may need to double-check if it is other code changed IDAC(SmartSense enabled? ).
になり、システムに応じた実装(上記全てか、部分的か)して頂ければと思います。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
CapSense_CalibrateAllWidgets()を使おうとしましたが、
CapSense_Sensing.h で CapSense_ANYMODE_AUTOCAL の定義が無効となっており、
CapSense_CalibrateAllWidgets()が無効となっている様です。
CapSense_CalibrateAllWidgets()以外でシグナル値をリセット可能なAPIを教えて下さい。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
先ず、キャリブレーションを実行するAPIについてですが、
・個別用 CapSense_CalibrateWidget(uint32 widgetId)
・全体用 CapSense_CalibrateAllWidgets(void)
で、合っています。
また、CapSense_ANYMODE_AUTOCALの定義はCapSense_Configuration.h内で
#define CapSense_ANYMODE_AUTOCAL (((0u != CapSense_CSX_IDAC_AUTOCAL_EN) \
|| (0u != CapSense_ISX_IDAC_AUTOCAL_EN)) \
|| (0u != CapSense_CSD_IDAC_AUTOCAL_EN))
となっております。
CapSenseコンポーネント内のIDACのauto-calibrationを有効にすることによりCapSense_ANYMODE_AUTOCALが1になります。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
追記ですが、下記記述についてもう少しご説明を頂けないでしょうか?
> 又、CapSenseでタッチ動作後にシグナル値が0にならない場合、下記No3(USB抜差)しかシグナル値がリセットされませんでしたが、
> No1,2はキャリブレーション無し、No3はキャリブレーション有りで認識合っていますでしょうか?
>
> No1. 再接続 [Stop]->[Disconnect]->[Connect]->[Start]
> No2. 再起動 [Stop]->[Disconnect]->CapSense終了->CapSense起動->[Connect]->[Start]
> No3. USB抜差[Stop]->[Disconnect]->USB抜差->[Connect]->[Start]
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
回答ありがとうございます。
1.キャリブレーションAPI呼出し
解決しました。
CapSense設定を変更でCapSense_ScanAllWidgets()が呼び出し可能になりました。
(設定変更)
TopDesign.cyschの[Configure 'CapSense_P4']ダイアログ
タブ->[CSD Settings]タブ
"Enable IDAC auto-calibration" を チェック
2.USB抜差でシグナル値残り解消
タッチ動作を行うとたまに指を外してもシグナル値が20~50程度残る事があります。
おそらく何らかの要因でBaselineが変動(下降)し、アイドル状態のRawDataと差分が
発生したと考えております。
このシグナル値が残る問題が発生した場合、CapSense再起動(No1,No2)では解消されず、
USB挿抜(No3)が必要になります。
この為、「CapSenseの起動処理ではキャリブレーション(*)は行われておらず、
IC初回電源ON時のみキャリブレーションが実行される」
と想定しています。
CY8CKIT-145-40XX(CY8C4045AZI-S413)のキャリブレーションは
IC初回電源ON時のみであり、CapSenseでは行われない
という認識はOKかを確認したいです。
(*)現状のBaselineとRawDataを基準とし、シグナル値(=RawData-Baseline)を0とする処理
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
CapSense_ScanAllWidgets()を実行した所、
Modulator IDAC や Compensation IDAC の設定が自動的に変更されてしまい、
ボタンが反応しなくなりました。
Modulator IDAC や Compensation IDAC の設定はそのままで、
シグナル値が残る問題を解決させる(Raw DataとBaselineのズレを0にする)方法を教えて下さい。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご連絡が遅くなり、申し訳ございません。
調査を加速するために、お使いのプロジェクトを共有して頂く事は可能でしょうか?
以上、宜しくお願い致します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
こちらの環境を共有します。
以下のURLからダウンロードしてください:
<https://upload.hdedrive.com/ui/gunze.co.jp/dl/SB1562727812-1947482c-9edf-4980-917c-5026318dd517>
URLの有効期限: 2019年7月17日 午後12時3分
パスワードは別途連絡します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
「任意のタイミングでIDAC等の設定値は変更せずにシグナル値を0リセットするAPI or 処理」
について進展ありましたでしょうか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
アップデートが遅くなり、申し訳ございません。
今回のシグナル値を0に戻すことについてですが、考えられる幾つかの提案がございます。
1)IIR filter及び、median filterを有効にする。これはノイズを減少させます。
2)Sense clock、modulator IDAC及び、compensation IDACの再チューン。
共有頂いたCompensation IDACが大きいと思われます。modulator IDACまたはcompensation IDACのどちらかが30未満になることが望まれます。また、1500KHZ または750KHZ sense clock modeで減少の再確認をして頂く。
上記再チューンを実行する際はAuto-calibrationを使用してIDACの値を取得し、そのIDACの値を使用して手動で他のパラメータをチューニングするのが良いかと思います。
3)Tune thresholds:
- Finger thresholdをFinger Signal (Diffcount)の60~80%に設定
- Noise threshold及びNegative Noise thretholdをFinger Signal (Diffcount)の40から50%に設定
4)両面テープにてOverlayとFPCを圧着
以上、宜しくお願い致します。
IIR filter and median filter
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
回答ありがとうございます。
No1~3のチューニング方法については今後の参考にさせて頂きます。
ただ、今回頂いた提案No1~4は全てシグナル値のズレを発生させない為の事前対策であり、
私が求めている発生後の事後対策(シグナル値の0リセット)とは違う気がしております。
オートキャリブレーション(CapSense_ProcessAllWidgets)では、
IDAC等の設定値が自動的に変更されてしまいますが、
USB挿抜では、設定値はそのままでシグナル値が0リセットされる期待動作が行われる事を
Sense Tunerで確認しております。
IC(CY8C4045AZI-S413)の電源投入時に毎回1回だけ行われる処理に
「シグナル値の0リセット」が含まれており、それをプログラム上で実行出来れば
やりたい事が出来ると考えておりますが、可能でしょうか?
それともシグナル値のズレは発生させてはいけないものであり、
発生後の対処方法は手動のUSB挿抜しか無い という事でしょうか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
御所望の処理「シグナル値の0リセット」は可能と考えます。
考えられる方法としては下記になります。(英語表記で申し訳ございません)
1. Sensor is Active for N * main cycles, regards the sensor is stuck, call CapSense_InitialAllBaselines();
2. Sensor is Inactive for N * main cycles, regards the sensor is stuck, call CySoftwareReset() to reset chip.
3. Use a customized threshold, if signal larger than the signal for N * main cycles, call CapSense_InitialAllBaselines();
4. If there is no long touch requirement, enable Sensor Auto Reset.
5. Unplug/Re-plug device may have risk: when power on, the ripple would be larger than other moment, if CapSense_Start() executed immediately, it may cause wrong calibration value.
6. CapSense_ProcessAllWidgets() won’t change IDAC. So..the you may need to double-check if it is other code changed IDAC(SmartSense enabled? ).
になり、システムに応じた実装(上記全てか、部分的か)して頂ければと思います。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ありがとうございます。
頂いた処理を試してみます。
名前から CySoftwareReset() にシグナル値の0リセットを期待します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
CapSense_InitialAllBaselines()と CySoftwareReset() を行った所、
シグナル値が0リセットされ、期待通りの動作が出来ました。
ただ、デバッグで処理を追ってみると CySoftwareReset()で処理が止まり、
CySoftwareReset()以降の動作が行われませんでした。
※メインループ(main.c main())は生きておりその後のボタン検知はOK
CySoftwareReset()実行後、処理はそこで終了する(以降のプログラムコードは実行されない)
という認識であっていますでしょうか?
もしCySoftwareReset()実行後に CapSense_Start()を実行する必要がある場合は
タイマ処理で別ルートの対応が必要という事でしょうか?
===============================================================
+---・タイマ設定(ソフトウエアリセット後処理用タイマ ex.1秒)
|
| ・CySoftwareReset() -> 処理STOP
|
(1秒後)
|
|
+-->・CapSense_Start()
===============================================================
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
CySoftwareReset()ではCM0P_AIRCRレジスタのSYSRESETREQを1にセットしています。
これにより、Systemはリセットされているので処理はそこで終了しています。
その後、main()関数が再度実行されています。
簡単なCY8CKIT-145のテストプログラムを添付します。
プログラム実行時はLED1が点灯しており、SW2を押下するとLED1が消えます。
その後、CySoftwareReset()が実行されるのでSystemリセットがかかり、再度main()が実行されLED1が点灯します。
尚、CE210709をベースとしているのでCapSenseも動作します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
処理終了が想定通りである事、理解しました。
本件、クローズ致します。