I2C_2 bus scanner for STM32L476RG.

Dependencies:   mbed

Committer:
joeata2wh
Date:
Wed Mar 30 14:58:05 2016 +0000
Revision:
8:ead6147e31a4
Parent:
7:5962e77516ac
Child:
9:c403dc9b86cc
Update to use standard MIT license

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joeata2wh 0:befb557584fb 1 /* Scan I2C bus on specified pins and prints out
joeata2wh 6:02a058f2ec6f 2 * the all address where an active device responds.
joeata2wh 0:befb557584fb 3 *
joeata2wh 8:ead6147e31a4 4 By Joseph Ellsworth CTO of A2WH
joeata2wh 8:ead6147e31a4 5 Take a look at A2WH.com Producing Water from Air using Solar Energy
joeata2wh 8:ead6147e31a4 6 March-2016 License: https://developer.mbed.org/handbook/MIT-Licence
joeata2wh 8:ead6147e31a4 7 Please contact us http://a2wh.com for help with custom design projects.
joeata2wh 8:ead6147e31a4 8
joeata2wh 8:ead6147e31a4 9
joeata2wh 6:02a058f2ec6f 10 * Don't forget 3K pull-up resistors on sda,scl
joeata2wh 2:e90c47d4f358 11 *
joeata2wh 2:e90c47d4f358 12 * I tested this by soldering in a I2C chip known to respond at
joeata2wh 2:e90c47d4f358 13 * address dec=120 hex=70 and the utility got the ack as expected.
joeata2wh 2:e90c47d4f358 14 * when the chip was de-soldered it was no longer detected.
joeata2wh 2:e90c47d4f358 15 */
joeata2wh 0:befb557584fb 16
joeata2wh 0:befb557584fb 17 #include "mbed.h"
joeata2wh 0:befb557584fb 18
joeata2wh 0:befb557584fb 19 Serial pc(USBTX, USBRX);
joe ellsworth 7:5962e77516ac 20 Serial pc2(USBTX, USBRX);
joeata2wh 0:befb557584fb 21
joeata2wh 1:2363995f603f 22 #define D_SDA PB_7
joeata2wh 0:befb557584fb 23 #define D_SCL PB_6
joeata2wh 0:befb557584fb 24 // sda=PB7, scl=PB_6 Pins specific to Nucleo-F303K8
joeata2wh 0:befb557584fb 25 // must change pins to match your board.
joeata2wh 0:befb557584fb 26
joeata2wh 0:befb557584fb 27 I2C i2c(D_SDA, D_SCL);
joeata2wh 0:befb557584fb 28
joeata2wh 0:befb557584fb 29 DigitalOut myled(LED1);
joeata2wh 0:befb557584fb 30
joeata2wh 4:ad1195c10812 31 int ack;
joeata2wh 6:02a058f2ec6f 32 int address;
joeata2wh 0:befb557584fb 33 void scanI2C() {
joeata2wh 0:befb557584fb 34 for(address=1;address<127;address++) {
joeata2wh 0:befb557584fb 35 ack = i2c.write(address, "11", 1);
joeata2wh 0:befb557584fb 36 if (ack == 0) {
joeata2wh 0:befb557584fb 37 pc.printf("\tFound at %3d -- %3x\r\n", address,address);
joeata2wh 0:befb557584fb 38 }
joeata2wh 0:befb557584fb 39 wait(0.05);
joeata2wh 0:befb557584fb 40 }
joeata2wh 0:befb557584fb 41 }
joeata2wh 0:befb557584fb 42
joeata2wh 0:befb557584fb 43 int main() {
joeata2wh 0:befb557584fb 44 pc.baud(9600);
joeata2wh 0:befb557584fb 45 pc.printf("I2C scanner \r\n");
joeata2wh 0:befb557584fb 46 scanI2C();
joeata2wh 0:befb557584fb 47 pc.printf("Finished Scan\r\n");
joeata2wh 5:a4fddd74263c 48 // just blink to let us know the CPU is alive
joeata2wh 0:befb557584fb 49 while(1) {
joeata2wh 0:befb557584fb 50 wait(5.0);
joeata2wh 0:befb557584fb 51 myled = !myled;
joeata2wh 0:befb557584fb 52 }
joeata2wh 0:befb557584fb 53 }
joeata2wh 0:befb557584fb 54