私はMMA8652加速度センサを使っています。一時的な割り込み(タップへの応答)は正常に生成されますが、それをクリアすることができないため、割り込みが継続されます。
割り込みソース レジスタ (0x0C) を読み取り、次に割り込みに続いて一時ソース レジスタ (0x1E) を読み取ります。次に、割り込みソース レジスタを再度読み取ります。一時割り込みのビットはまだ設定されています。データシートとアプリケーション ノートには、過渡ソース レジスタを読み取ると割り込みがクリアされると記載されています。レジスタ 0x0C と 0x1E を読み取ると、最初の割り込み後は常に 0xFF になります。何が足りないのでしょうか?
また、データシートでは、VDDIO が VDD に接続されていることが示されているようです。これは正しいですか?
ハロルド
わかりました。読み取りの繰り返し開始条件が機能することを確認しましたが、どうやら必須のようです。私が扱う他のすべての I2C デバイスでは、繰り返し開始条件はオプションであり、レジスタ アドレスは記憶されます。
これでこの質問への回答が得られたと考えます。ありがとう!
レジスタ アドレス (書き込みメッセージの 1 番目のデータ バイト) は停止条件後には保持されないということですか?
こんにちは、ハロルド。
I2C バスで何が起こっているかを確認する ために、波形をここに投稿していただけますか?
たとえば、WHO_AM_I レジスタ 0x0D から読み取られた 1 バイトは次のようになります。
読み取り操作でよくある問題は、 2番目のバイト(この場合は0x0D)の後にストップコンディション(SCLがHighの状態でSDAがLowからHighに遷移する)を送信することです。正しい方法は、SCLラインがHighになる前にSDAラインを解放(Highに遷移させる)することです。
プルアップ抵抗に関しては、推奨値は 1k ~ 4.7k です。
VDD I/O は、必要なインターフェース電圧に対応するために VDD と異なる場合があり、1.71V まで下げることができます。単一電源動作の場合、VDD I/O は主電源 VDD (1.95V ~ 3.6V) と同じになります。
よろしくお願いいたします。
トーマス
8652 への I2C 書き込みは正常に実行できます (加速度センサからの予測可能な動作)。しかし、レジスタを読み戻すことができません。SCL と SDA をスコープで表示すると、正常なレベルと波形が表示されます。「who am I」レジスタを読み取っても、0x00 または 0xFF が返されます。これにより、データシートの VDDIO について疑問が生じます。
ハロルド
TRANS_THS レジスタで DBCNTM を設定し、TRANS_CFG レジスタで ELE をクリアすると、継続的な割り込みが発生しなくなります。それでも、TRANSIENT_SRC と INT_SOURCE の両方のレジスタに常に 0xFF が表示されます。
私のボードが割り込み(加速度センサからマイクロへの)を低く保持している可能性は低いです。
アセンブリに悪影響を与える可能性のあるイベント情報 (激しい、鋭い衝撃) をログに記録するために、過渡検出を使用したいと考えています。SO、私はすべての軸に興味があり、最終的にはしきい値を 8g と高く設定します。ハイパス フィルターは低周波イベントを遮断するはずです。
example.c を添付する(a) 加速度センサの初期化用のフラグメントと (b) 一時割り込みをクリアするためのフラグメント。
こんにちは、ハロルド。
設定を再現できるように、完全なソース コード、または少なくとも加速度センサの初期化を確認していただけると助かります。
INT_SOURCEレジスタのSRC_TRANSビットをクリアし、割り込みをデアサートするには、TRANSIENT_SRCレジスタを読み出す必要があるのは間違いありません。タップ検出機能について説明した添付のサンプルコードが参考になるかもしれません。
お役に立てれば幸いです。
よろしくお願いいたします。
トーマス
追伸: 私の回答がご質問の解決に役立った場合は、「正解」または「役に立った」と評価してください。ありがとうございます。