diff options
Diffstat (limited to 'CODE/debugprewk/debug/i2c_scanner/i2c_scanner.ino')
| -rw-r--r-- | CODE/debugprewk/debug/i2c_scanner/i2c_scanner.ino | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/CODE/debugprewk/debug/i2c_scanner/i2c_scanner.ino b/CODE/debugprewk/debug/i2c_scanner/i2c_scanner.ino new file mode 100644 index 0000000..d3d4570 --- /dev/null +++ b/CODE/debugprewk/debug/i2c_scanner/i2c_scanner.ino @@ -0,0 +1,93 @@ +/** +i2c port scanner based on: + in wire library examples i2c_scanner + https://learn.adafruit.com/adafruit-pca9548-8-channel-stemma-qt-qwiic-i2c-multiplexer/arduino + + + * + */ + +#include <Wire.h> + +#define PCAADDR 0x70 //i2c address of the i2c multiplexer + + +void setup() { + Serial.begin(115200); + while (!Serial); // Leonardo: wait for Serial Monitor + Serial.println("\nI2C Scanner"); + +} + +void pcaselect(uint8_t i) { + if (i > 7) return; + + Wire.beginTransmission(PCAADDR); + Wire.write(1 << i); + Wire.endTransmission(); +} + + + + +void scandirectports(){ + Wire.begin(); + int nDevices = 0; + Serial.println("Scanning for i2c ports on board..."); + + for (byte address = 1; address < 127; ++address) { + // The i2c_scanner uses the return value of + // the Wire.endTransmission to see if + // a device did acknowledge to the address. + Wire.beginTransmission(address); + byte error = Wire.endTransmission(); + + if (error == 0) { + Serial.print("I2C device found at address 0x"); + if (address < 16) { + Serial.print("0"); + } + Serial.print(address, HEX); + Serial.println(" !"); + + ++nDevices; + } else if (error == 4) { + Serial.print("Unknown error at address 0x"); + if (address < 16) { + Serial.print("0"); + } + Serial.println(address, HEX); + } + } + if (nDevices == 0) { + Serial.println("No I2C devices found\n"); + } else { + Serial.println("done\n"); + } + Serial.println("done scanning for i2c ports on board"); +} +void scani2cmultiplexer(){ + Serial.println("Scanning for i2c ports on i2c multiplexer..."); + for (uint8_t t=0; t<8; t++) { + pcaselect(t); + Serial.print("PCA Port #"); Serial.println(t); + + for (uint8_t addr = 0; addr<=127; addr++) { + if (addr == PCAADDR) continue; + Wire.beginTransmission(addr); + if (!Wire.endTransmission()) { + Serial.print("Found I2C 0x"); Serial.println(addr,HEX); + } + } + } + Serial.println("done scanning for i2c ports on i2c multiplexer"); +} + + + +void loop() { + scandirectports(); + delay(1000); + scani2cmultiplexer(); + delay(1000); +} |
