2 I2C Devices mit selber Adresse

Hallo Forum,

ich benutze einen Teensy 3.2. Dieser hat ja einen SCL0/SDA0 sowie einen SCL1/SDA1 anschluss.

Desweiteren verwende ich für meine Inputs folgende Karte:

http://land-boards.com/content/index.php/digio128

Auf der Seite kann ich unten folgendes sehen: Address range 0x20-0x27 - only one card per I2C interface Somit sind ja die Adressen fest vergeben.

Leider ist es so, dass mir die 128 Inputs nicht reichen. Also würde ich gerne eine zweite Karte verwenden.

Ist es möglich 2 I2C lines "aufzubauen"? Also eine Karte an SCL0/SDA0 und eine weitere Karte an SCL1/SDA1.

Danke & Viele Grüße

uezi89: Ist es möglich 2 I2C lines "aufzubauen"? Also eine Karte an SCL0/SDA0 und eine weitere Karte an SCL1/SDA1.

Ja, das geht und zusätzlich kannst du noch einen I2C- Multiplexer verwenden, der dir weitere Möglichkeiten bietet.

Vielen Dank für deine Antwort.

Mein Sketch sieht so aus:

#include <Wire.h>
#include "Adafruit_MCP23017.h"


int taste1 = LOW;
int taste1Alt = LOW;


Adafruit_MCP23017 mcp1; // Create MCP 1
Adafruit_MCP23017 mcp2; // Create MCP 2
Adafruit_MCP23017 mcp3; // Create MCP 3
Adafruit_MCP23017 mcp4; // Create MCP 4
Adafruit_MCP23017 mcp5; // Create MCP 5
Adafruit_MCP23017 mcp6; // Create MCP 6
Adafruit_MCP23017 mcp7; // Create MCP 7
Adafruit_MCP23017 mcp8; // Create MCP 8

void setup() {  
  mcp1.begin(0);      
  mcp2.begin(1);
  mcp3.begin(2);      
  mcp4.begin(3);
  mcp5.begin(4);      
  mcp6.begin(5);
  mcp7.begin(6);      
  mcp8.begin(7);

  mcp1.pinMode  (0, INPUT);
  mcp1.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp2.pinMode  (0, INPUT);
  mcp2.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp3.pinMode  (0, INPUT);
  mcp3.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp4.pinMode  (0, INPUT);
  mcp4.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp5.pinMode  (0, INPUT);
  mcp5.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp6.pinMode  (0, INPUT);
  mcp6.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp7.pinMode  (0, INPUT);
  mcp7.pullUp   (0, HIGH);  // turn on a 100K pullup internally
  mcp8.pinMode  (0, INPUT);
  mcp8.pullUp   (0, HIGH);  // turn on a 100K pullup internally

}



void loop() {

taste1 = mcp1.digitalRead(0);

          if (taste1 == HIGH && taste1Alt == LOW) {
              usbMIDI.sendNoteOff(10,0,1); 
              taste1Alt = taste1;
           }
           if (taste1 == LOW && taste1Alt == HIGH) {
              usbMIDI.sendNoteOn(10,127,1); 
              taste1Alt = taste1;
          }

   
   usbMIDI.send_now();


}

Allerdings handelt es sich im Beispiel nur um eine Taste… Sind im realen natürlich mehr!

Hast du mir ggf. einen Ansatz wie ich die zweite I2C “line” ansprechen kann?

Dankeschön

uezi89:
Hast du mir ggf. einen Ansatz wie ich die zweite I2C “line” ansprechen kann?

Sorry, da ich keinen Teensy besitze, kann ich dir da auch nicht weiter helfen.
Sollte aber im Datenblatt stehen.

Es gibt Wire und Wire1. Wie bei Serial

Die Library machst das intern. Die geht also nur mit Wire. Du müsstest den Baustein dann per Hand ansprechen. Man könnte auch die Library so anpassen, dass die mit beliebigen Wire Objekten geht. Das wäre das vernünftigste und auch nicht wirklich schwer.