タグ付けされた質問 「i2c」

I²C(Inter-Integrated Circuit)は、同じPCB上のIC間の通信、つまり短距離通信用にPhilips(現在のNXP)が発明したマルチドロップシリアルバスです。

3
どのマイクロコントローラーをマスター/スレーブにする必要がありますか?
朝目覚めるアラームをデザインしています。システムは3つのサブシステムで構成されています。 (S1) RGB 7セグメント管理。各桁に1つと「:」に1つずつ、5µCで構成されています。µCの数が多いのは、RGB LEDではICを使用せず、トランジスタのみを使用しているためです。 (S2)センサーと入力の管理。設定されたアラームと現在時刻の距離センサーを管理する1つのµC。設定用のスイッチ。 (S3)通信および音声ファイル。さらなるプロジェクトのためにUARTのBluetoothモジュールと通信する1つのµCは、正確なクロックを持ち、オーディオ再生を管理するRTCクリスタルを得ました。(私はまだオーディオに取り組みませんでした) 通常の実行中、S2は入力を読み取り、処理のためにS3に送信します。次に、S3はS1に何を表示する必要があるかを送信します。 これらすべてのサブシステムを互いに通信させたいので、I2Cバスの使用を選択します。しかし、ここに私の質問が来ます: どのµCがマスターになる必要がありますか? 一方で、S3はシステムの中心ですが、他方で、S2はS3よりも多くのメッセージを送信できます。だれが主人/奴隷になるかについて私が未定なのはそのためです。 誰がスレーブ/マスターになるかを決定するルールはありますか?良い選択をするためにどのような質問をするべきですか?(一般的に、この特定のシステムではありません)
8 i2c 

8
Cat5ケーブルでI2Cを確実に送信する
Raspberry Piの周りにホームオートメーションシステムを実装することを検討していますが、制御が必要な場所すべてにPiを挿入するための価格とスペースの要件が多すぎますが、この設計に必要なCat5eケーブルは改修中に既にインストールされています。PCF8574、PCF8591、SSRがいくつかあるので、Cat5eケーブルを使用してそれらを駆動することはできますか? 私のすべてのCat5eケーブルはすでにTIA / EIA 568Bピン配置で配線されています。これらは私の構造ケーブルの一部であり、シールドされていないため、より高いライン電圧が必要です。このピン配置で、ケーブルを介して電源とI2Cラインを送信することを考えています: Pin 1 (Pair 1): SCL+ Pin 2 (Pair 1): SCL- Pin 3 (Pair 2): SDA+ Pin 4 (Pair 3): +12V Pin 5 (Pair 3): +12V Pin 6 (Pair 2): SDA- Pin 7 (Pair 4): GND Pin 8 (Pair 4): GND 電源ピン配置は100BASE-TX PoE配線と同じであるため、電力定格も同じです。双方向差動シグナリングの使用は、Cat5eを必要とする1000BASE-Tにあります。 オリジナルのI2C SCLおよびSDAラインは、TTLレベルで2つの双方向差動ペアに派生します(オープンドレインはワイヤ上に保持されませんが、設計しているラインターミネーション/レベルシフトデバイスで復元されます)。 …

3
L3G4200Dランダムスパイク
L3G4200Dジャイロスコープに関してこのフォーラムを少し検索しましたが、この問題について言及したことはありませんが、他のフォーラムで他の人がそれについて話すのを見てきました。ジャイロスコープが静止していると、出力に奇妙な大きな値が表示されます。残念ながら、これがなぜだか誰も答えることができなかったようです。 したがって、私はi2cを使用して400kHz(高速モード)でジャイロからデータを収集し、マルチバイト読み取り(一度に6バイト)を使用してジャイロスコープデータを収集しています。100Hzでのサンプリング(上位800Hzも試した)、また、異なる値でのフィルタリングのオンとオフを試してみました。割り込みピンは使用していませんが、GYRCTRLREG4の「ブロックデータ更新」属性を使用しているため、LSBとMSBの両方が読み取られるまでデータは出力されません。フル2000dps、FIFOで何もしていません。正確であれば、正確なレジスタ値を投稿できますが、データシートが手元にない場合がほとんどです。 下の画像は私の問題を示しています。出力されているデータは適切であり、(私の知る限り)正しく計算されており、一般的なノイズは非常に許容範囲です。しかし、デバイスが静止しているときに、これらの迷惑な「ブリップ」がランダムに表示されることに気付きました。数秒間そのままにしておくと、これらのスパイクの1つが得られ、常に約250〜255になります(つまり、((output * 70)/ 1000 'を使用して変換すると〜18)。私が言うように、スパイクはランダムであり、任意の平面に表示できます(下の画像では、X平面の最初のスパイク、Yの2番目のスパイクを見ることができます)。 3つが同時に発生する可能性があります。大きな値は単一のサンプルの場合のみであり、通常に戻ります。 別のスレッドで、前述のように、GYRCTRLREG4のブロックデータ待機関数を使用する必要があることを確認しましたが、変更はありませんでした。私は、MSBがゼロ以上、つまり正の数である場合に問題を絞り込んだ後、MSBとLSBを組み合わせると、これらの大きな数が得られます。たとえば、X平面に必要な2バイトを取得します。LSBで-6を取得し、MSBで0を取得します。これらを組み合わせると250になり、変換すると(250 * 70)/ 1000 = 17.5 dps(つまり、静止/不正確には大きすぎます)。同じサンプルで、Yプレーンの2バイトは-3 LSBと-1 MSNで、これらを組み合わせると-3になり、変換すると-0.21になります(つまり、期待値/正しい)。 私はこの問題に何日も取り組んでいますが、磁力計でこれらのランダムなスパイクが少し表示されているので、(i2cを介して)デバイスを誤って読み取っているのだと思いますか? 提案や試してみたいことは本当に大歓迎です!

3
PIC18のI2C以降
プロジェクトでは、3つのPIC(2つのスレーブPIC18F4620、1つのマスターPIC18F46K22)でI2Cバスを介して通信したいと考えています。後で、さらに多くのスレーブが追加される可能性があります(EEPROM、SRAMなど)。C18コンパイラを使用して、これらのPICのコードをCで記述しています。私はインターネットをよく見て回りましたが、(M)SSP周辺機器を処理するためのライブラリーが見つかりませんでした。I2Cモードの(M)SSPペリフェラルの両方のPICのデータシートを読みましたが、バスのインターフェース方法を見つけることができませんでした。 だから私はマスターとスレーブのライブラリが必要です。 何がお勧めですか?どこかにそのような図書館はありますか?コンパイラーに組み込まれていますか?はい、組み込まれていますか?ネット上のどこかに良いチュートリアルがありますか?

5
複数のarduino通信(1マスター、nスレーブ)
以下で構成されるマスター/スレーブネットワークを開発したいと思います。 センサーを読み取り、センサー信号に基づいて速度ランププロファイルを生成し、それらのランプをスレーブに送信する1つのArduinoマスター マスターから送信されたランプに続く12Vサーボモーターの速度を制御する3つ以上のArduinoスレーブ これを達成するための良い通信プロトコルは何ですか?シリアル(SPI)?I2C?他に何か?シリアルの場合、新しいArduino Leonardoは良い選択ですか?プロトコルを選択する際に考慮すべき問題は何ですか? 私は次のようなものを想像しています: 主人: void loop() { update_ramps() for(int i=0; i< num_slaves; i++) { send_to_all(i, ramps[i]); } } スレーブ1: const int id = 1; int recived_id, recived_value; void loop() { read_data(); if(recived_id == id) { do_motor_step(recived_value); } } また、マスターからのRX / TXがすべてのスレーブに送信されるシリアル通信。 これは合理的な解決策のように見えますか?

2
自分のバスを設計する
この質問は、前の質問、「EMIのためにSPIに代わるもの」の補足です。私は自分の通信バスをデザインするというアイデアを楽しんでいます。誰かが私の予備設計に目を向けて、私がどこに夢中なのか教えてくれれば幸いです... 私は現在、別々のPCB上の7つのADC(共有CSですが、各ADCには独自のMISOラインがあります。ビットバンギングされています)に10cmを超える長さのワイヤーで運ばれる2MHz SPIを使用していますが、EMIを削減するために何か別のものに置き換えたいと考えています。問題は、差動バスを備えたADCが多くないため、独自のバスを設計できるかどうかです。少なくとも物理層、そしておそらくプロトコルも。 新しいバスの設計目標: 物理的に小さなコンポーネントを使用する 低EMI 4本以下のデータワイヤ(2ペア) 各ADCから300kbpsを超える帯域幅。(合計2.1mbps以上) これについて考えることに頭がおかしくなる前に、PSoC 5で行うのはそれほど難しいことではないことを考慮してください。そのチップでは、Verilogで独自のプロトコルを設計し、ハードウェアに実装することができます。そして、ある程度、物理層コンポーネントも含めることができるかもしれません。さらに、これらすべてを同時にマスターで並列に実行できるため、全体で良好な帯域幅を確保できるように、スレーブごとに1つずつ、これらの7つを同時に実行できる場合があります。 そしてここに私の予備的な考えがあります: I2Cに基づいており、物理層コンポーネントに接続できるように少し変更されています。SDAラインとSCLラインが差動ペアになりました。SDAペアにはOR-ingプロパティがあります。これは、ハイにしか駆動できないピンとローにしか駆動できないピンを使用して実現されます。SCLペアは、マスターによって排他的に駆動されます。データレートは少なくとも1 mbpsになります。 マスターは、7つのマスターモジュールを備えたPSoC5です。スレーブも1つのスレーブモジュールを備えたPSoC5であり、内蔵ADCを使用します。 考え: プルアップ抵抗とスルーレート制限コンポーネントを実装するための最良の方法が何かわからない。 解約は必要ないと思います。スルーレートを約80nsに制限すると、長さ10cmのケーブルに適しています。 それは明らかに適切な差動トランシーバーではありません。ゲートから1つを作成しようとして時間を無駄にしていますか? これらのNotゲートは、スキューを引き起こします。これは問題になりそうですか?

2
Arduino(5 V)とMPR121(3.3 V)で会話するにはどうすればよいですか?
Sparkfun MPR121 I2C静電容量式タッチセンサーブレークアウトボードを持っています 3.3 Vを使用していることを読みました。Arduinoから3.3 Vの電源出力を接続することはできません。通信回線にも3.3 Vが必要になるためです。他の回線をどのように接続しますか? SparkfunのWebサイトでチュートリアルを見つけました。ダイオードを使用した3番目の図-センサーをArduinoに接続する最良の方法でしょうか? どんなアイデアや情報も素晴らしいだろう、私の知識はかなり低いです。

5
最も一般的な組み込みシリアルバスは何ですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 シリアルバスを介してサードパーティのペリフェラルと相互運用できるようにする組み込みデバイスを設計しています。SPI、I²C、またはその他のバスを選択する必要がありますか? 周辺機器はかなり低い帯域幅(バスを介して通信し、定期的にポーリングされる一部のセンサー)であり、ほとんどの場合コントローラーから1メートル以内です。コントローラーの唯一のタスクは、センサーデータを収集し、何らかの方法でパッケージ化してから、別のバスを介してワイヤレスモジュールに送信することです(ただし、センサーバスもこれに再利用できます)。

5
I2Cをアナログに実装
入力がI2Cで出力がアナログ電圧(0V-5V)になるボードを実装するには(または、すでにそれを実行しているICがあるかもしれません)、どうすればよいですか? 最終的には、そのうちのいくつかをArduinoのIOピンに接続して、デジタルからアナログへの出力を効率的に作成したいと考えています。
8 arduino  i2c  voltage  analog  dac 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.