問題タブ [i2c]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arduino - Arduino 割り込み処理
バックグラウンド
接続されたセンサーを備えた「Arduino互換」chipKit UNO32ボードで実行されるデータロギングアプリケーションが必要です。データは、「Arduino ワイヤレス SD シールド」にある SD カードに記録する必要があります。センサーは I2C 経由で接続されます。
私の問題は、Arduino SD ライブラリを使用すると書き込みが遅くなることです。print() 操作ごとに 25 ミリ秒で、センサーの 100 ~ 800 Hz のデータ レートと比較して笑える最大 40 Hz になります。
私の間違った解決策
幸いなことに、センサーには、32 個のセンサー値を保存できるオンチップ FIFO が両方とも装備されています。これは、FIFO がいっぱいになる時間はカードに書き込む時間よりもはるかに長いため、問題なく少なくとも 200Hz に到達できることを意味します。それでも、少なくとも 400Hz に到達したいので、次のように設定することにしました。
- データを FIFO に入れるようにセンサーに指示する
- FIFO がほぼ満杯になると、センサーが割り込みをトリガーします (センサーがこれを行い、動作し、割り込みをキャッチできます)。
- Arduino が割り込みを受信すると、(I2C 経由で) センサーのデータをポーリングし、データを SRAM のバッファーに格納します。
- SRAM バッファがいっぱいになったら、その内容を SD カードに書き込みます。
残念ながら、I2C を処理する Arduino Wire ライブラリは割り込みを使用し、割り込みハンドラ内から呼び出すことができないため、これは機能しないようです。試してみましたが、マイクロコントローラーがフリーズします。
私の質問
割り込みに依存しないArduino用のI2Cライブラリは他にもあるようです。そのルートを試してみるべきですか?
それとも、私の考え方 (ISR で大量のデータを取得する) が最初から悪いのでしょうか? 私が取るべき別のアプローチはありますか?
android - Android I2C 読み取り/書き込み速度
I2C インターフェイスを介してデバイスと通信するアプリケーションでタイミング測定を実行しています。単一の I2C 読み取りと書き込みの実行に約 450us かかっていることを発見しました。I2C インターフェイスが 400KHz で動作していることを確認したので、1 バイトの I2C 操作には約 170us かかると予想されます。Android 内で I2C ドライバーを使用すると、250us を超えるオーバーヘッドが発生する可能性がありますか? この速度を改善する方法を知っている人はいますか。
前もって感謝します。
マーク。
c - i2c アドレスからの値へのアクセス
http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NSK1042のWeb サイトを参照して、私が話していることをよりよく理解してください。たとえば、Web サイトの読み取り: センサーの i2c アドレスは 0x10 であり、そこにある値の表は次のとおりです。
Cでこれらの値にアクセスするにはどうすればよいですか? ありがとう。
linux - Linuxカーネルドライバー非同期I2C(Raspberry PI上)
センサーデバイス用のI2Cドライバーを作成したいと思います。変換時間はゼロ以外であり、デバイスがビジーになるまで待機してビジー状態をポーリングするためにカーネル時間を無駄にしたくありません。
タイマーを設定して、時々アップデートを呼び出すと思いました。
ただし、実行がI2C機能に達すると、システム全体がフリーズします。
私は本当に単純化された例を用意しましたが、それは機能していません。I2Cアクセスまではすべて問題ありません。
I2Cのものがなくても、コードは機能します。タイマーがなくても、I2Cは機能します。
I2Cを非同期(非ブロッキング)方式で使用する方法が見つかりませんでした。
c - この行に複数のマーカー - 構文エラー (eclipse)
Peter Fleury の起源である i2c のヘッダー ファイルを作成します。私はEclipseで書き直して、以下のリストプログラムの2行目に「この行に複数のマーカー - 構文エラー - 予想される識別子または「(」は「署名なし」の前」というエラー警告を受け取ります
誰でも私を助けることができますか?
c++ - C i2c チップの読み取り MCP9800 が突然失敗し始める
私はいくつかのコードを持っています:
i2c 経由で MCP9800 から情報を読み取るコードです。申し訳ありませんが、それはそれと関係があるかもしれません。
この関数は、突然正しくない値を持ち始めるまで、約 12 サイクルの間うまく機能します。しかし、いくつかの奇妙な差異があります。
1. CALCULATION が以下の場合
私はこの出力を得る:
働く
失敗する
したがって、失敗し始めると、フィルタリングされた値の出力が正しくないことがわかります。
2.計算の場合:
フィルター処理がまったく使用されないように、出力は次のようになります。
働く
失敗する
正しくない出力については、アスタリスク付きの数字を参照してください。何らかの理由で、フィルタリングされた値を使用しないと、他の数値も正しくなくなります! i2cチップから引き抜いたバイトにまでさかのぼります。
したがって、最初はおそらくフィルター処理が正しく機能していないことがわかります。しかし、それを削除すると、フィルタリングされていない生の値も正しくないように見えます。execFilter() が行っているのは、大きなランダムな変更を防ぐための平均化だけです。
また、i2cget を使用する CLI 経由でスクリプトを作成したところ、返される値が非常に一貫していました。クラッシュや予期しない値はありませんでした。
なぜこれが起こるのでしょうか?
c++ - このコードはどのように機能し、何と呼ばれていますか
問題のコードは「?something:something_else」です。通常、以下のコードでは、I2C_SLAVEまたはI2C_SLAVE_FORCEのいずれかを配置できます。しかし、このコードは別のことをします。それはどのように機能し、正確には何をしますか?
c++ - i2c smbus フィルター関数が変数を破壊する
私は簡単な機能を持っています
smbusから読み取った値を受け取り、最後に受信した値でフィルター処理された値を返します。printf ステートメントからの出力は次のとおりです。
それで、何が起こっているのですか?それでも同じ入力を受け取ったのに、突然おかしくなったのはどうしてですか? fValue はこの関数以外には設定しません。
これらの変数 (y と yy) を関数に非常に内部化したのは、それらが何らかの形で変更されたり、他の何かと衝突したりするのではないかと心配したためです。しかし、彼らは完全にローカルになったので、何が起こっているのかわかりません。私は C++ クラスを使用しているので、とにかくこれはすべて独自のスペースにある必要があります。
編集:実際、もう少し長く実行すると、さまざまなi2cチップアドレス用に保持している変数も-1075766188に破損します。なんてこったい?
embedded - I2C ドライバーの移植の問題
Atmel AVR32 U3 から Energy Micro EFM32GG Cortex-M3 デバイスに I2C ドライバーを移植しています。ドライバは Atmel BSP を使用して I2C バスと通信し、スレーブ デバイスのアドレス、レジスタ アドレス、およびデータを提供します。
Energy Micro BSP は、レジスタ アドレスを実装していません。私の質問は、標準の I2C プロトコルに従って、送信されるデータの最初のバイトとしてレジスタ アドレスを追加することはできますか?
arduino - フリースケール圧力センサーMPL3115A2ArduinoとのI2C通信
MPL3115A2 Freescale I2C圧力センサーの経験はありますか?Arduino UNO r3に関するプロジェクトで使用する必要がありますが、正しく通信できません。これが私のコードです:
私が受け取るデータは次のとおりです:05FB9(たとえば)。レジスタアドレスを変更すると(を参照Wire.write((byte)0x01); // Data_PMSB_reg address
)、データが変更されることを期待していますが、変更されません。これを説明してもらえますか?ドキュメントとデータシートは、NXPのWebサイトにあります。
彼らがどのようにコミュニケーションを取っているのか、私には正しく理解できません。Arduinoと他のI2Cセンサーと同じ通信プロトコルで問題なく通信できました。