Simple Test Program to check ACK from i2c Devices connected to an MBED board and then to report their addresses
Revision 0:2db41a0c2f17, committed 2015-01-13
- 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
--- /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