Signal値がFingerThresholdを超えてもボタンOFF

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

cross mob
TaDa_1980266
Level 4
Level 4
50 replies posted 25 replies posted 10 replies posted

Signal値(約180)、FingerThreshold(170)の場合、ボタンONになるべきですが、
ボタン3はON(反応あり)、ボタン5はOFF(反応なし)となり、結果が違っています。

Signal値の目盛りは可変表示される為、アプリケーション上の表示誤差であり、

10~20程度はブレる可能性がありますでしょうか?

<ボタン3 ON>

Button3_ON_FingerTh_170_Signal_180_GraphView.jpg

Button3_ON_FingerTh_170_Signal_180_WidgetView.jpg

<ボタン5 OFF>

Button5_OFF_FingerTh_170_Signal_180_GraphView.jpg

Button5_OFF_FingerTh_170_Signal_180_WidgetView.jpg

(環境)
Hardware    : CY8CKIT-145-40XX PSoC 4000S Prototyping Kit
IC          : CY8C4045AZI-S413
Sofware     : PSoC Creator 4.2, CapSense
Base Project: CY8CKIT-145 Code Example.zip

0 件の賞賛
1 解決策
NoriTan
Employee
Employee
25 sign-ins 5 questions asked 10 sign-ins

CapSense の信号処理では、 ON/OFF の状態を頻繁に行き来するいわゆるチャタリングを防止するためにヒステリシスを設けています。

GS004394.png

PSoC® 4 and PSoC 6 MCU CapSense® Design Guide, Document Number. 001-85951

このため、 Signal が Finger Threshold と Hysteresis を加えた値を超えた時に ON します。また、 Finger Threshold を Hysteresis だけ下回った値に低下した時に OFF します。

目安として、 Finger Threshold と Hysteresis の値は実測された Signal のそれぞれ 80% と 10% に設定します。

GS004395.png

PSoC® 4 and PSoC 6 MCU CapSense® Design Guide, Document Number. 001-85951

元の投稿で解決策を見る

0 件の賞賛
8 返答(返信)
NoriTan
Employee
Employee
25 sign-ins 5 questions asked 10 sign-ins

CapSense の信号処理では、 ON/OFF の状態を頻繁に行き来するいわゆるチャタリングを防止するためにヒステリシスを設けています。

GS004394.png

PSoC® 4 and PSoC 6 MCU CapSense® Design Guide, Document Number. 001-85951

このため、 Signal が Finger Threshold と Hysteresis を加えた値を超えた時に ON します。また、 Finger Threshold を Hysteresis だけ下回った値に低下した時に OFF します。

目安として、 Finger Threshold と Hysteresis の値は実測された Signal のそれぞれ 80% と 10% に設定します。

GS004395.png

PSoC® 4 and PSoC 6 MCU CapSense® Design Guide, Document Number. 001-85951

0 件の賞賛

回答ありがとうございます。Hysteresis考慮出来ておりませんでした。

ただ、ボタン3と5のHysteresisは同じ値でした。

ボタン3とボタン5のSignal値はほぼ同じに見えるが、

ボタン3のSignal値は180をギリギリ超えており、

ボタン5のSignal値は180を下回っているという理解で良いでしょうか?

ボタン3(ON) FingerThreshold=170, Hysteresis=10 -> Singal: 180以上でON、160以下でOFF

ボタン5(OFF) FingerThreshold=170, Hysteresis=10 -> Singal: 180以上でON、160以下でOFF

0 件の賞賛

Signal (DIFF) の値を数値として確認するためには、 Tuner ではなく Bridge Control Panel を使用します。

まず、センサの Signal が I2C レジスタのどこに配置されているかを確認します。これには、 CapSense_RegisterMap.h ファイルの記述を見ます。

GS004399.png

この例では、 BUTTON0 の SNS0 センサの DIFF 値がアドレス 92u(0x005C) に割り当てられているのがわかります。

Bridge Control Panel でアドレス 0x5C のレジスタを以下のコマンドで読み出します、

GS004400.png

ボタンにタッチした状態で A2 00 が返ってきました。ここから Signal が 162(0x00A2) であることがわかります。

0 件の賞賛

Bridge Control PanelでのDiff値確認方法ありがとうございます。

コマンド入力&[Send]ボタン押下で指定ボタンのdiff値を確認できました。

Bridge_Control_ Panel_GBTN01_Diff_Value.jpg

Bridge Control Panelのコマンドは1byte(255)単位の様ですが、
アドレスが255を超える場合のアドレス設定(入力コマンド)を教えて下さい。

例えば0x14Eの場合、'F4'部分を "4E 01"に変更すれば良いのでしょうか?

<GBTN01の場合>
CapSense_RegisterMap.h
#define CapSense_GBTN01_SNS0_DIFF_VALUE                     (CapSense_dsRam.snsList.gbtn01[0u].diff)
#define CapSense_GBTN01_SNS0_DIFF_OFFSET                    (244u)=0xF4

Bridge Control Panel用コマンド
w 08 00 F4 r 08 x x p

<GBTN10の場合>
CapSense_RegisterMap.h
#define CapSense_GBTN10_SNS0_DIFF_VALUE                     (CapSense_dsRam.snsList.gbtn10[0u].diff)
#define CapSense_GBTN10_SNS0_DIFF_OFFSET                    (334u)=0x14E

Bridge Control Panel用コマンド
w 08 00 ?? r 08 x x p

0 件の賞賛

レジスタのアドレスは、 16-bit です。 0x014E のレジスタをアクセスするためには、

w 08 01 4e r 08 x x p

とコマンドを送ります。

0 件の賞賛

ありがとうございます。

頂いたコマンドで 0x014E のレジスタにアクセス出来ました。

アドレスが16bit指定であるというコマンドフォーマットは

どこに載っていますか?

Bridge Control PanelのHelpを参照しましたが、

該当箇所を見つけられませんでした。

0 件の賞賛

EZI2C の設定画面で指定してあるはずです。

GS004402.png

0 件の賞賛

PSoc CreaterのEZI2C側で16bit設定されている事を確認できました。

シグナル(diff)値の確認方法が分かりましたので、本件、クローズ致します。

もし、Bridge Control Panelのシグナル(diff)値とFinger threshold(±Hysteresis)に

相違があった場合は別質問を登録します。

0 件の賞賛