Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 // I2C - Search for devices on an I2C bus, 00002 00003 // Continuously cycles through each device address, checking for a response 00004 // Prints 8-bit address for each device found and possible devices that use that address 00005 // if bus isn't working check pull-up resistors are fitted, typicaly 4k7 on SDA and CLK 00006 // Recommend to use TeraTerm VT serial monitor at 9600 baud 00007 00008 00009 00010 #include "mbed.h" 00011 00012 //I2C i2c(p28, p27); // sda, clk LPC1768 00013 //I2C i2c(p9, p10); // sda, clk LPC1768 00014 00015 // I2C i2c(PB_11, PB_10);// sda, clk STM F746 00016 00017 //I2C i2c(PB_7, PB_6); // sda, clk STM L432 00018 //I2C i2c(PA_10, PA_9); // sda, clk STM L432 00019 //I2C i2c(PB_4, PA_7); // sda, clk STM L432 00020 00021 I2C i2c(D14, D15); // sda, clk STM 64 nucleo boards ARDUINO PINS 00022 //I2C i2c(A4, A5); // sda, clk STM 64 nucleo boards L476 00023 00024 00025 /* 00026 #include "max32630fthr.h" 00027 //Init board and set GPIO to 3.3V logic 00028 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3); 00029 I2C i2c(P3_4, P3_5); // sda, clk 00030 I2C i2c(P5_7, P6_0); // sda, clk 00031 */ 00032 /* 00033 #include "max32625pico.h" 00034 //MAX32625PICO pico(MAX32625PICO::IOH_DIP_IN, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_1V8); 00035 MAX32625PICO pico(MAX32625PICO::IOH_3V3, MAX32625PICO::VIO_IOH, MAX32625PICO::VIO_1V8); 00036 Serial pc(P0_1, P0_0); // use serial to USB converter 00037 I2C i2c(P1_6, P1_7); // sda, clk 00038 */ 00039 00040 Serial pc(USBTX, USBRX); 00041 DigitalOut led1(LED1); 00042 00043 //list of some i2c device possibilities 00044 #define I2C_0x02 "PCA9955-GGG" 00045 #define I2C_0x06 "SHT1x" 00046 #define I2C_0x0C "AK8975" 00047 00048 #define I2C_0x1C "MAG3110" 00049 00050 #define I2C_0x20 "RDA5807, VEML6040, VEML6075" 00051 #define I2C_0x22 "RDA5807" 00052 00053 #define I2C_0x38 "MMA8451-0, FXOS8700CQ-2" 00054 #define I2C_0x3A "MMA8451-1, FXOS8700CQ-1" 00055 #define I2C_0x3C "FXOS8700CQ-0, LIS3MDL" 00056 #define I2C_0x3E "FXOS8700CQ-3" 00057 00058 #define I2C_0x42 "MCP23017-b" 00059 #define I2C_0x44 "MCP23017-c" 00060 #define I2C_0x46 "MCP23017-d" 00061 00062 #define I2C_0x50 "MAX5387-ggg" 00063 #define I2C_0x52 "MAX5387-ggv, VL53L0X" 00064 #define I2C_0x54 "MAX5387-gvg" 00065 #define I2C_0x56 "MAX5387-gvv" 00066 #define I2C_0x58 "MAX5387-vgg" 00067 #define I2C_0x5A "MAX5387-vgv" 00068 #define I2C_0x5C "MAX5387-vvg" 00069 #define I2C_0x5E "MAX5387-vvv" 00070 00071 #define I2C_0x70 "VEML6070-ld/c" 00072 #define I2C_0x72 "VEML6070-hd" 00073 00074 #define I2C_0x80 "Si7005, Si7021, HTU21D, HDC1080, INA2xx/MAX7300-gg" 00075 #define I2C_0x82 "INA2xx/MAX7300-gv" 00076 #define I2C_0x84 "INA2xx/MAX7300-gd" 00077 #define I2C_0x86 "INA2xx/MAX7300-gc" 00078 #define I2C_0x88 "INA2xx/MAX7300-vg" 00079 #define I2C_0x8A "INA2xx/MAX7300-vv" 00080 #define I2C_0x8C "INA2xx/MAX7300-vd" 00081 #define I2C_0x8E "INA2xx/MAX7300-vc" 00082 00083 #define I2C_0x90 "MCP9802, AD7416-a, LM75, INA2xx/MAX7300-dg" 00084 #define I2C_0x92 "MAX9768, INA2xx/MAX7300-dv" 00085 #define I2C_0x94 "INA2xx/MAX7300-dd" 00086 #define I2C_0x96 "INA2xx/MAX7300-dc" 00087 #define I2C_0x98 "INA2xx/MAX7300-cg" 00088 #define I2C_0x9A "INA2xx/MAX7300-cv" 00089 #define I2C_0x9C "INA2xx/MAX7300-cd" 00090 #define I2C_0x9E "INA2xx/MAX7300-cc" 00091 00092 #define I2C_0xA0 "24C32WP, 24FC512-000, 24AA02-b0" 00093 #define I2C_0xA2 "24AA02-b1" 00094 #define I2C_0xA4 "24AA02-b2" 00095 #define I2C_0xA6 "24AA02-b3" 00096 #define I2C_0xA8 "24AA02-b4" 00097 #define I2C_0xAA "MMA8491, 24AA02-b5, BQ27xx0, BQ34Z100-G1" 00098 #define I2C_0xAC "24AA02-b6, M24SR64-Y" 00099 #define I2C_0xAE "24AA02-b7" 00100 00101 #define I2C_0xB4 "CCS811-0" 00102 #define I2C_0xB6 "CCS811-1" 00103 #define I2C_0xBA "LPS22HB" 00104 #define I2C_0xBE "HTS221" 00105 00106 #define I2C_0xC0 "RDA5807, MPL3115A2, MLX90620-ram, PCA9955-0" 00107 #define I2C_0xC2 "SCD30" 00108 00109 #define I2C_0xD0 "M41T81, M41T11, DS1307, DS3232M, MCU9150-0" 00110 #define I2C_0xD2 "MCU9150-1" 00111 #define I2C_0xD4 "LSM6DSL" 00112 #define I2C_0xDE "MCP7941x-rtc" 00113 00114 #define I2C_0xE0 "PCA9955-AllCall" 00115 #define I2C_0xEC "MS5611-cs1, BME280-cs0, PCA9955-SubCall" 00116 #define I2C_0xEE "BMP-180, MS5611-cs0, BME280-cs1, BMP-05" 00117 00118 int n,address; 00119 char* device; 00120 char* getdevice(); 00121 00122 int main() { 00123 00124 led1=1;wait(1);led1=0; 00125 00126 //i2c.frequency(50000); // set required i2c frequency, defautl 100000 00127 // pc.baud(230400); // set terminal speed, default 9600 00128 pc.printf("\033[0m\033[2J\033[HI2C Searching!\n\n\n"); 00129 00130 while (1) { 00131 00132 pc.printf("\033[0m\033[2J\033[HI2C Searching!\n\n\n"); 00133 00134 n=0; 00135 pc.printf("Starting....\n\n"); 00136 00137 for (address=0; address<256; address+=2) { 00138 if (!i2c.write(address, NULL, 0)) { // 0 returned is ok 00139 pc.printf("I2C address: 0x%02X\r\n Device: %s\n\n", address, getdevice()); 00140 n++; 00141 } 00142 led1=!led1; 00143 wait_ms(1); 00144 } 00145 pc.printf("\n\n%d devices found\n", n); 00146 wait(2); 00147 } 00148 } 00149 00150 char* getdevice(){ 00151 device="Unknown"; 00152 switch(address){ 00153 case 0x02:device = I2C_0x02;break; 00154 case 0x06:device = I2C_0x06;break; 00155 case 0x0C:device = I2C_0x0C;break; 00156 00157 case 0x1C:device = I2C_0x1C;break; 00158 00159 case 0x20:device = I2C_0x20;break; 00160 case 0x22:device = I2C_0x22;break; 00161 00162 case 0x38:device = I2C_0x38;break; 00163 case 0x3A:device = I2C_0x3A;break; 00164 case 0x3C:device = I2C_0x3C;break; 00165 case 0x3E:device = I2C_0x3E;break; 00166 00167 case 0x42:device = I2C_0x42;break; 00168 case 0x44:device = I2C_0x44;break; 00169 case 0x46:device = I2C_0x46;break; 00170 00171 case 0x50:device = I2C_0x50;break; 00172 case 0x52:device = I2C_0x52;break; 00173 case 0x54:device = I2C_0x54;break; 00174 case 0x56:device = I2C_0x56;break; 00175 case 0x58:device = I2C_0x58;break; 00176 case 0x5A:device = I2C_0x5A;break; 00177 case 0x5C:device = I2C_0x5C;break; 00178 case 0x5E:device = I2C_0x5E;break; 00179 00180 case 0x70:device = I2C_0x70;break; 00181 case 0x72:device = I2C_0x72;break; 00182 00183 case 0x80:device = I2C_0x80;break; 00184 case 0x82:device = I2C_0x82;break; 00185 case 0x84:device = I2C_0x84;break; 00186 case 0x86:device = I2C_0x86;break; 00187 case 0x88:device = I2C_0x88;break; 00188 case 0x8A:device = I2C_0x8A;break; 00189 case 0x8C:device = I2C_0x8C;break; 00190 case 0x8E:device = I2C_0x8E;break; 00191 00192 case 0x90:device = I2C_0x90;break; 00193 case 0x92:device = I2C_0x92;break; 00194 case 0x94:device = I2C_0x94;break; 00195 case 0x96:device = I2C_0x96;break; 00196 case 0x98:device = I2C_0x98;break; 00197 case 0x9A:device = I2C_0x9A;break; 00198 case 0x9C:device = I2C_0x9C;break; 00199 case 0x9E:device = I2C_0x9E;break; 00200 00201 case 0xA0:device = I2C_0xA0;break; 00202 case 0xA2:device = I2C_0xA2;break; 00203 case 0xA4:device = I2C_0xA4;break; 00204 case 0xA6:device = I2C_0xA6;break; 00205 case 0xA8:device = I2C_0xA8;break; 00206 case 0xAA:device = I2C_0xAA;break; 00207 case 0xAC:device = I2C_0xAC;break; 00208 case 0xAE:device = I2C_0xAE;break; 00209 00210 case 0xB4:device = I2C_0xB4;break; 00211 case 0xB6:device = I2C_0xB6;break; 00212 case 0xBA:device = I2C_0xBA;break; 00213 case 0xBE:device = I2C_0xBE;break; 00214 00215 case 0xC0:device = I2C_0xC0;break; 00216 case 0xC2:device = I2C_0xC2;break; 00217 00218 case 0xD0:device = I2C_0xD0;break; 00219 case 0xD2:device = I2C_0xD2;break; 00220 case 0xD4:device = I2C_0xD4;break; 00221 case 0xDE:device = I2C_0xDE;break; 00222 00223 case 0xE0:device = I2C_0xE0;break; 00224 case 0xEC:device = I2C_0xEC;break; 00225 case 0xEE:device = I2C_0xEE;break; 00226 } 00227 return device; 00228 }
Generated on Wed Jul 27 2022 07:07:29 by
1.7.2