Simple Test Program to check ACK from i2c Devices connected to an MBED board and then to report their addresses

Dependencies:   mbed TextLCD

Files at this revision

API Documentation at this revision

Comitter:
martinsimpson
Date:
Tue Jan 13 15:48:33 2015 +0000
Child:
1:df2444f34fec
Commit message:
First Release - A simple program to help Identify i2c devices connected to an MBED Board and Display their Addresses

Changed in this revision

TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Tue Jan 13 15:48:33 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jan 13 15:48:33 2015 +0000
@@ -0,0 +1,60 @@
+#include "mbed.h"
+#include "TextLCD.h"
+ 
+#define Device_Name_ADDR   (0xEE) // Device You Wish to Use Address - using i2c Address
+#define WRITE              (0x00) // i2c Write bit
+#define READ               (0x01) // i2c Read bit
+
+/* This is a program to demonstrate the ease of use of the i2c bus
+   and Detecting any Devices connected and returning their addresses
+   Do not forget that Pull Up resistors are required on the SDA and SCL lines
+   (Typically 2K ohms for 400KHz bus speeds) NB these could be provided on the PCB Modules.
+   These are required since devices connected with the i2c will have 'open drain' (or open collector)
+   circuitry to allow wire 'ORing' of their respective connections. Used with a stm32-Nucleo-F401RE.
+   Used both Serial Port to USB and LCD Module to display results can use either or both just comment out if you wish.
+   Martin Simpson January 2015 */
+
+I2C i2c(I2C_SDA, I2C_SCL);       //I2C Class Pin Assignments see I2C.h
+ 
+Serial pc(SERIAL_TX, SERIAL_RX); //Serial Class Pin Assignments see Serial.h
+
+TextLCD lcd(D2,D3,D4,D5,D6,D7);  //Text LCD Class assignments RS, E, D4 to D7 see TextLCD.h
+
+char ucdata_write[2];
+short count=0;
+
+int main()
+{
+    unsigned int uibaudrate=115200;
+    pc.baud(uibaudrate);
+    
+    unsigned int uifrequency=400000; //400KHz for i2c Max
+    i2c.frequency (uifrequency);
+    
+    pc.printf("\n\rHello World ");
+    pc.printf("at %u BAUD and %uKHz i2c Frequency\n\r",uibaudrate,uifrequency/1000);
+    pc.printf("Using mbed.org Martin\n\r");
+    
+    lcd.cls();lcd.locate(0,0); //Tidy up LCD Display
+
+    ucdata_write[0]=0;ucdata_write[1]=0;
+
+    for (int Device_Adress=0;Device_Adress<=0xFE;Device_Adress+=2)//Stepping in 2 Because Read/Write use LSB
+    {
+    if (!i2c.write((Device_Adress|WRITE), ucdata_write, 1, 0))// Check for ACK from i2c Device NB I am 'ORing' the Write Bit
+        {
+            pc.printf("ACK from the Device at Address %#4x\n\r",Device_Adress);
+            lcd.printf("ACK at:%#4x\n",Device_Adress);
+            count=count+1;
+            wait(2);
+        }
+        else
+        {
+            //Left the following in for development/Future coding
+            //pc.printf("\n\rCannot get an ACK from the Device check connections!\n\r");
+            //lcd.printf("No ACK from\nDevice!");
+        }
+    }
+    pc.printf("\n\r %d Devices have been detected!\n\r",count);
+    lcd.printf("%d Dev Found!",count);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Jan 13 15:48:33 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5
\ No newline at end of file