FRDM-KL25Z ボードで MMA8451Q を使用しています。AN4072 の 6.1 のサンプル コードを使用すると、単一パルス検出の割り込みを正しく受信できます。しかし、例 6.3 のように単一パルス検出と二重パルス検出の両方を実行しようとしたときに、二重パルス検出で問題が発生しています。
一時的にダブルパルス検出のみを検討し、6.2 のサンプル コードを使用すると、割り込みも受信できますが、PULSE_SRC レジスタを読み取っても期待どおりの値が返されません。6.2 のサンプル コードから、PULSE_SRC を読み戻すと、ビット EA と DPE が設定されていることを期待していましたが、レジスタは 0x00 として読み戻しました。次に、PULSE_CFG レジスタを修正し、ELE ビットも設定して、値を PULSE_SRC レジスタにラッチしました (レイテンシが経過する前にこれを読んでいなかった場合)。しかし、構成ルーチンを終了した直後を除いて、割り込みは 1 回しか発生しないことがわかりました。また、割り込みがすでにトリガーされている場合に備えて、構成ルーチンを終了する前に PULSE_SRC レジスタを読み取りましたが、何も変わりませんでした。これは、スタンバイ モードからアクティブ モードに移行するとき (構成ルーチンの最後のアクション)、データシートの 20 ページの注記 (2) に従って、PULSE_SRC レジスタはいずれにしても自動的にクリアされるはずであるため、予想どおりでした。
どこが間違っているのでしょうか?
よろしくお願いします。
ブランドン
Jose様
問題を見つけました。私の外部割り込みは立ち上がり/立ち下がりエッジ モードのいずれかでトリガーするように構成されており、これにより割り込みの受信時とレジスタの読み取り時の間に問題が発生していたのは明らかです。割り込みが立ち下がりエッジのみに設定されると、レジスタの読み取りは 100% 正しく、予想どおりであることが証明されました。
ご協力いただきありがとうございます
ブランドン
こんにちは、ブランドムさん。
あなたの質問にお答えします:
1.正解です。申し訳ありませんが、単一または二重のパルスが検出されたかどうかを読み取るには、PULSE_SRC レジスタを読み取る必要があります。ただし、ELE = 1 のときに EA ビットが設定されると、すべてのステータス ビット (AxZ、AxY、AxZ、DPE、および PolX、PolY、PolZ) がフリーズされることに注意することが重要です。PULSE_SRC レジスタを読み取ると、すべてのビットがクリアされます。ソース レジスタを読み取ると割り込みがクリアされます。
2. この問題の原因がわかりません。AN4070 の例 6.2 の値を MMA8451Q でテストしたところ、問題は発生しませんでした。ダブル タップで割り込みを受信し (シングル タップでは割り込みはトリガーされません)、PULSE_SRC の DPE ビットと EA ビットの両方が設定されていました。
また、前回の更新で言及されたシングル タップとダブル タップの設定で MMA8451Q をテストしましたが、LPF を無効にしなくても (0x0F = 0x00)、問題は見つかりませんでした。
3. 理由は分かりませんが、ELE ビットの機能は、ステータス レジスタが読み取られるまでステータス レジスタの内容を保持することです。
4.PULSE_CFGレジスタのELEビットが設定されていない場合(0)、割り込みはレイテンシウィンドウPULSE_LTCYの期間中ハイに保持されます。
ELE ビットがセット (1) されている場合、ソース レジスタの値は PULSE_SRC レジスタが読み取られるまで静的のままになります。
このレイテンシウィンドウは、単一パルスまたは二重パルスの検出に適用されます。
すてきな一日を、
ホセ・レイエス
-----------------------------------------------------------------------------------------------------------------------
注: この投稿で質問が解決した場合は、「正解」ボタンをクリックしてください。ありがとう!
-----------------------------------------------------------------------------------------------------------------------
Jose様
ご返信ありがとうございます。これらは、ダブルタップのみの AN4072 の例 6.2 に基づいた設定です。
0x0F: 設定が入力されていないため、デフォルト = 0x00
0x21: 0x2A (割り込みをラッチするために 0x6A を試しましたが、別の問題が発生しました)
0x23: 0x20
0x24: 0x20
0x25: 0x20 (Z軸の感度を高めるために変更)
0x26: 0x30
0x27: 0x30
0x28: 0x28
最初は、シングルタップとダブルタップの検出を試みるために次の設定を使用しました。シングルタップの割り込みは正しく受信できましたが、ダブルタップは検出できませんでした。そのとき、二重のみを検出しようとしました(上図)。これらは AN4072 の例 6.3 からの抜粋です。
0x0F: 設定が入力されていないため、デフォルト = 0x00
0x21: 0x3F
0x23: 0x20
0x24: 0x20
0x25: 0x40
0x26: 0x18
0x27: 0x28
0x28: 0x3C
ローパス フィルター ビットに関するご提案を試してアドバイスさせていただきます。INT_SOURCEのSRC_PULSEビットをチェックするというご提案ですが、シングルパルスとダブルパルスの違いは分かりません。パルス割り込みが発生したことだけが分かります。最終的な目標は、シングルタップとダブルタップの違いを判別することでした。
いくつか質問があります:
1. EA ビットの代わりにこれを推奨するのはなぜですか?割り込みをクリアするにはとにかく PULSE_SRC レジスタを読み取る必要がある、SO EA ビットの読み取りは簡単です。
2. 最初の設定を使用すると、ダブルタップで割り込みが発生します (シングルタップでは割り込みは発生しません)。ただし、PULSE_SRC の DPE ビット (または EA ビット) は設定されません。その理由をご存知ですか?これは、たとえば 6.3 などのシングルタップとダブルタップの違いを判別するために確認する必要がある部分です。
3. PULSE_CFG (0x21) の ELE ビットを設定しようとしましたが、この簡単な変更を行った後、部品が割り込みをトリガーしなくなったことがわかりました。その理由をご存知ですか?
興味本位で別の質問:
PULSE_CFG の ELE ビットが 0 (フラグがラッチされていない) に設定されている場合、フラグをクリアするために PULSE_SRC レジスタを読み取る必要がありますか、それとも、レイテンシ期間後に割り込みがクリアされるのでしょうか?
ご助言ありがとうございます。
よろしくお願いします。
ブランドン
こんにちは、ブランドン・クーンさん。
シングル/ダブルパルス検出の場合は、PULSE_SCR レジスタ (0x22) ではなく、レジスタ 0x0C (INT_SOURCE) のビット 3 (SRC_PULSE ビット) をチェックすることをお勧めします。SRC_PULSE ビットのロジック「1」は、単一または二重のパルス イベントにより割り込みが生成されたことを示します。ロジック「0」は、パルス イベント情報が検出されなかったことを示します。このビットは、PULSE_SRC の「EA」ビットがアサートされ、割り込みが有効になっているときに常にアサートされます。このビットは、PULSE_SRC レジスタを読み取ることによってクリアされます。
AN4072 のセクション 6.3 には記載されていないと思いますが、設定することをお勧めするのは、ハイパス フィルタ レジスタ (0x0F) の Pulse_LPF_EN ビット (ビット 4) です。
完全な PULSE レジスタ (0x0F、0x21、0x23、0x24、0x25、0x26、0x27、0x28) の構成を送信していただけますか?
パルスレジスタに推奨される設定値は次のとおりです。
0x0F: 0x10
0x21: 0x3F
0x23: 0x20
0x24: 0x20
0x25: 0x2A
0x26: 0x14
0x27: 0x14
0x28: 0x28
これが役に立つことを願います。
すてきな一日を、
ホセ・レイエス
-----------------------------------------------------------------------------------------------------------------------
注: この投稿で質問が解決した場合は、「正解」ボタンをクリックしてください。ありがとう!
-----------------------------------------------------------------------------------------------------------------------