0

Microchip の MCP23017 は、I2C ベースの 16 ピン IO エクステンダです。デバイスを一度セットアップ (ピンの方向と値を設定) できましたが、その後、デバイスをリセットまたは電源を入れ直さない限り、期待どおりに値を変更できません。これは、最初に初期化してピンを設定するために使用したコードです。

  I2C_Start();
  I2C_Write(0x40); // スレーブアドレス
  I2C_Write(0x00); // アドレスレジスタ
  ... (シーケンシャル モードなので、次の 10 は I2C_Write(0x00) に設定されます。
  I2C_Write(0x08); // IOCON: HAEN=1
  I2C_Write(0x08); // IOCON: HAEN=1
  ... (シーケンシャル モードなので、次の 6 つは I2C_Write(0x00) に設定されます。
  I2C_Write(0xFEu); // GPIOA
  I2C_Write(0x01u); // GPIOB
  I2C_Stop();

この後、出力値を切り替えられるようにしたいと思います (0xFE <-> 0x01)。私はこのコードを試みました:

  I2C_Start();
  I2C_Write(0x40); // スレーブアドレス
  I2C_Write(0x12); // アドレスレジスタ
  I2C_Write(0x01u); // GPIOA
  I2C_Write(0xFEu); // GPIOB
  I2C_Stop();

この時点で、ランチに出かけるように見えます。ピンの値はランダムに見えます (入力対出力、出力ハイ対ロー)。誰かがこの I2C IO エクステンダーを使用した場合は、私を助けてください。よくわからない場合でも、コメントを歓迎します。注: ここに示す I2C API は、すべてのクロック サイクルに約があるビット バン アルゴリズムです。それらの間の1msの重み。

役立つドキュメント (種類): http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf

4

1 に答える 1

0

オシロスコープまたはロジック アナライザーを使用して SCL および SDA 信号を調べて、タイミングとデータをチェックし、I/O エクスパンダに自分が想定している値を送信していることを確認してください。

于 2011-10-13T14:46:13.010 に答える