I2C

Dependencies:   TextLCD mbed

Fork of I2C_Debug_for_RealTerm by jim hamblen

Revision:
2:fa8c916b42a9
Parent:
1:be1498ba7fb4
Child:
3:8e2db72d0d7d
--- a/main.cpp	Fri Mar 11 03:25:42 2011 +0000
+++ b/main.cpp	Mon Mar 14 00:50:34 2011 +0000
@@ -15,6 +15,7 @@
 
 int main() {
     char last_command=0;
+    char previous_command=0;
     char current_char=0;
     char address=0;
     char data [255];
@@ -31,15 +32,20 @@
     i2c.frequency(75000);
     i2c.start();
     i2c.stop();
+    // Send a start message to RealTerm
+    pc.printf("\fmbed I2C debug tool ready\n\r");
+    // Scan for I2C devices that reply with ack
+    for (i=0; i<=254; i=i+2) {
+        if (i2c.read(i, &data[0], 1) ==0) printf("I2C device detected at address=%2.2X\n\r", i);
+    }
+    data[0]=0;
     i2c.start();
     i2c.stop();
-// Send a start message to RealTerm
-    pc.printf("\fmbed I2C debug tool ready\n\r");
 // Loop processing command strings from RealTerm
     while (1) {
         current_char = pc.getc();
         // Is it a two character ASCII string data byte value
-        if (current_char <='F') {
+        if ((current_char <='F') && (current_char !='?')) {
             // convert to a binary byte
             if (current_char <='9') current_byte = current_char - '0';
             else current_byte =current_char +10 -'A';
@@ -69,6 +75,7 @@
             switch (last_command) {
                     // Start
                 case 'S':
+                    if (previous_command == 'S') i2c.start();
                     first_data_byte=1;
                     break;
                     // Stop
@@ -106,9 +113,10 @@
                     break;
                     // Unknown or unimplemented command
                 default:
-                    pc.printf("unknown command");
+                    pc.printf(" unknown command \n\r");
                     break;
             }
+            previous_command = last_command;
         }
     }
 }
\ No newline at end of file