uezi89
April 9, 2017, 6:41pm
1
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.
uezi89
April 9, 2017, 8:13pm
3
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.