11 Replies Latest reply on May 23, 2018 7:21 PM by fj0176bu_1406951

    CapSense auto reset

    fj0176bu_1406951

      CapSenseボタンで長押しをしたいですが、
      「Enable sensor auto-reset」をON設定しているため、長押しがキャンセルされます。

       

      Auto-Resetがかかるまでの時間変更する方法ございますか?

       

      もしくは、長押ししたい場合、「Enable sensor auto-reset」はOFF設定すべきでしょうか?

        • 1. Re: CapSense auto reset
          hrtk

          こちらのKBAは参考になりますでしょうか?

          PSoC 4 CapSense Sensor Auto-Reset – KBA222882

           

          "Enable sensor auto-reset" がON設定の時、通常は5~10秒でリセットされますが、

          Baseline_Update_Buffer のサイズを変更することで、この時間を伸ばす事が可能です。(通常サイズは8bit)

          よろしくお願い致します。

          Hirotaka Takayama

          • 2. Re: CapSense auto reset
            fj0176bu_1406951

            >Baseline_Update_Buffer のサイズを変更することで、この時間を伸ばす事が可能です。(通常サイズは8bit)

            ⇒「Baseline_Updatte_Buffer」はどこで変更可能ですか?

            • 3. Re: CapSense auto reset
              hrtk

              例として、Baseline_Update_Bufferを8bit -> 10bitに変更する場合の手順を示します。

              変更する部分はテキストの色を赤色にしています。

               

              1. CapSense_Structure.hで, CapSense_RAM_SNS_STRUCT.bslnExtの宣言を変更します。

              uint16 bslnExt [CapSense_NUM_SCAN_FREQS];

               

               

              2. CapSense_Filter.cにCapSense_FtIIR1stOrder_custom APIを作成します。

              uint32 CapSense_FtIIR1stOrder_custom(uint32 input, uint32 prevOutput, uint32 n, uint32 shift)

              {

                  uint32 filteredOutput;

               

                  /*

                  * n - IIR filter coefficient (n/1024)

                  * shift - Used to shift input data to have free LSB bits

                  * for fraction storage of filter output calculation

                  */

                  filteredOutput = ((n * (input << (shift+2))) + ((1024u - n) * prevOutput)) >> 10u;

               

                  /* Shift operation of output will be done in upper level API if needed */

                  return filteredOutput;

              }

               

               

              3. CapSense_Filter.cのCapSense_FtUpdateBaselineの一部を変更します。

              #if (CapSense_BASELINE_TYPE == CapSense_IIR_BASELINE)

                  /* Calculate baseline value */

                  if ((CapSense_WD_TYPE_ENUM)wdType != CapSense_WD_PROXIMITY_E)

                  {

                        #if (CapSense_REGULAR_SENSOR_EN)

                            #if (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE)

                                  history = (uint32) ptrSensor->bsln[freqChannel] << 10u;

                                  history |= ptrSensor->bslnExt[freqChannel];

                            #else

                                  history = ptrSensor->bsln[freqChannel];

                            #endif /* (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE) */

               

                            #if (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN)

                                  baselineCoeff = ptrWidgetRam->bslnCoeff;

                            #else /* (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN) */

                                  baselineCoeff = CapSense_REGULAR_IIR_BL_N;

                            #endif /* (CapSense_ENABLE == CapSense_WD_BSLN_COEFF_EN) */

               

                            history = CapSense_FtIIR1stOrder_custom((uint32)ptrSensor->raw[freqChannel], history, baselineCoeff, CapSense_REGULAR_IIR_BL_SHIFT);

                           

                            #if (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE)

                                  ptrSensor->bsln[freqChannel] = LO16(history >> 10u);

                                  ptrSensor->bslnExt[freqChannel] = LO16(history & 0x03FF);

                            #else

                                  ptrSensor->bsln[freqChannel] = LO16(history);

                            #endif /* (CapSense_REGULAR_IIR_BL_TYPE == CapSense_IIR_FILTER_PERFORMANCE) */

                        #endif /* (CapSense_REGULAR_SENSOR_EN) */

              }

               

              よろしくお願い致します。

              Hirotaka Takayama

              • 4. Re: CapSense auto reset
                fj0176bu_1406951

                回答ありがとうございます。

                 

                上記手順(Baseline_Update_Bufferを8bit -> 10bitに変更する場合の手順)は、

                自動生成されるAPIを変更することになりますが、

                自動生成されるAPIを変更することは動作上問題ないのでしょうか?

                • 5. Re: CapSense auto reset
                  hrtk

                  動作上問題はありません。

                  この変更は既にサイプレスのエンジニアにより検証されており、問題ないことが確認されています。

                  サイズなどを変更することに問題はなく、他のコードに影響を及ぼさないように記述されています。

                   

                  唯一、問題を挙げるとすると、コンポーネント構成の変更等の後に変更が書き換えられる可能性があることです。

                  これを防ぐ良い方法としては、main.cの自動リセット機能を書き直すこと、またはカスタマイズされたCapsSenseコンポーネントをインポートすることですが、これらの例は今のところございません。

                   

                  よろしくお願い致します。

                  Hirotaka Takayama

                  • 6. Re: CapSense auto reset
                    fj0176bu_1406951

                    返信ありがとうございます。

                     

                     

                     

                    自動生成されるAPIを変更する以外に、Auto-Reset時間を変更する方法はありますか。

                    たとえば、CapSenseパラメータを変更してAuto-Reset時間を変更する方法はないということで間違いないでしょうか。

                    • 7. Re: CapSense auto reset
                      hrtk

                      はい。今のところはこの方法のみでございます。

                      Hirotaka Takayama

                      • 8. Re: CapSense auto reset
                        fj0176bu_1406951

                        動作確認いたします。

                         

                        また、以下確認させてください。⇒

                         

                        2. CapSense_Filter.cのCapSense_FtIIR1stOrder_custom APIの一部を変更します。⇒"CapSense_FtIIR1stOrder_custom"のAPIがCapsense_Filter.cにありません。

                         このAPIは自身で作成すべきものでしょうか?

                         ※"CapSense_FtIIR1stOrder"はあります。

                        • 9. Re: CapSense auto reset
                          hrtk

                          すみません。間違えたのでその返信を修正致しました。

                          ご認識いただいている通り、新たにCapsense_Filter.cにて作成をお願い致します。

                          Hirotaka Takayama

                          • 10. Re: CapSense auto reset
                            fj0176bu_1406951

                            回答いただいた通り、コード変更し、Auto-Reset時間が延長されるのを確認しました。

                             

                            このAuto-Reset時間の変更方法についてのアプリケーションノート等は出ますか?

                             

                            また、コードの変更手順ですが、「CapSense_FtIIR1stOrder_custom」の宣言が必要になりました。

                            • 11. Re: CapSense auto reset
                              hrtk

                              コード変更で問題が解決されたこと、大変嬉しく思います。

                               

                              アプリケーションノートは今のところ出ていません。出す予定は今のところ立っておりません。

                              Auto-Reset時間の設定をより簡単にできるようにすることは社内で検討しておりますが、申し訳ありませんが具体的な日程は決まっておりません。

                               

                              また、コードの変更手順についてのご指摘ありがとうございます。

                              Hirotaka Takayama