Denwis La / Mbed OS mDot_Send_Data

Dependencies:   libmDot-dev-mbed5-deprecated ISL29011

Fork of mdot-examples by 3mdeb

Files at this revision

API Documentation at this revision

Comitter:
SDesign2018
Date:
Wed Dec 06 00:25:55 2017 +0000
Parent:
9:df0c4e8a3097
Child:
11:dce6c1b255fd
Commit message:
Added I2C function for I2C self test

Changed in this revision

peer_to_peer_example.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/peer_to_peer_example.cpp	Wed Dec 06 00:04:04 2017 +0000
+++ b/peer_to_peer_example.cpp	Wed Dec 06 00:25:55 2017 +0000
@@ -75,6 +75,7 @@
 int accelerometerI2CWrite(int hexAddress, int hexData);
 char * accelerometerI2CRead(int hexAddress);
 void ADXL372Reset(void);
+void I2CSelfTest(void);
 void BitBangSPIWrite(const unsigned char regAddr, const unsigned char regData);
 uint8_t BitBangSPIRead (const unsigned char regAddr);
 
@@ -95,12 +96,14 @@
                 "3: Read raw values from Accelerometer ADXL372\n\r"
                 "4: Read raw values from Temperature ADT7410\n\r"
                 "5: Initialize Accelerometer with I2C\n\r"
-                "6: Reset Accelerometer\n\r"
-                "7: Send Temperature data\n\r"
-                "8: SPI Read values from Accelerometer ADXL372\n\r"
-                "9: SPI reset for ADXL372\n\r"
-                "a: Initialize Accelerometer with SPI\n\r"
-                "b: Check data in status register with SPI\n\r");
+                "6: Reset Accelerometer with I2C\n\r"
+                "7: Perform self test with I2C\n\r"
+                "8: Send Temperature data\n\r"
+                "9: SPI Read values from Accelerometer ADXL372\n\r"
+                "a: SPI reset for ADXL372\n\r"
+                "b: Initialize Accelerometer with SPI\n\r"
+                "c: Check data in status register with SPI\n\r"
+                "d: Perform self test with SPI\n\r");
 }
 
 
@@ -341,7 +344,10 @@
                 ADXL372Reset();
                 break;
                 
-            case 55:    // 7
+            case 55:    // 7: perform self test with I2C
+                I2CSelfTest();
+                break;
+            case 56:    // 8: Read Temperature raws
                 regAddress = 0x00;
                 rawTempValues = ADT7410Read(regAddress);
                 convertedTempValue = ((*(rawTempValues + 0) << 8) | *(rawTempValues + 1)) >> 3; // Combine the two bytes
@@ -352,7 +358,7 @@
                 send_data(tx_data);
                 break;
                 
-            case 56:    // 8
+            case 57:    // 9: Read Accelerometer SPI
                 uint8_t MSB;
                 uint8_t LSB;
                 
@@ -375,7 +381,7 @@
                     wait(0.2);
                 }
                 break;
-            case 57:    // 9 Reset Accelerometer with SPI
+            case 97:    // a: Reset Accelerometer with SPI
                 int intRegister;
                 char input[4];
                 char passRegister[1];
@@ -384,18 +390,18 @@
                 BitBangSPIWrite(0x41, 0x52);
                 pc.printf("Done \n\r");
                 break;
-            case 97:    // a: Initialize Accelerometer with SPI
+            case 98:    // b: Initialize Accelerometer with SPI
                 BitBangSPIWrite(0x24, 0x01);    // Turn on X
                 BitBangSPIWrite(0x26, 0x01);    // Turn on Y
                 BitBangSPIWrite(0x28, 0x01);    // Turn on Z
                 pc.printf("Done\n\r");
                 break;
-            case 98:    // b: Check status with SPI
+            case 99:    // c: Check status with SPI
                 uint8_t statusData = BitBangSPIRead(0x04);
                 
                 pc.printf("0x%x in status\n\r", statusData);
                 break;
-            case 99:    // c: Perform self-test
+            case 100:    // d: Perform self-test
                 uint8_t testResult;
                 BitBangSPIWrite(0x3F, 0x03);    // put to fullbandwidth measurement mode and lpf enaled(0)
                 
@@ -412,6 +418,7 @@
                 }
                 pc.printf("0x%x\n\r", testResult);
                 break;
+            
             default:
                 printMenu();
                 break;
@@ -851,6 +858,28 @@
 }
 ////////////////////////////////////////////////////////////////////////////////
 
+/*
+ *
+ *  Self-test to see if the accelerometer is working as intended
+ *  Wait 300 ms.
+ *  Check bit 2 for a 1 for success. Bit 1 for completion of self-test.    
+ *  Returns whole register
+ */
+////////////////////////////////////////////////////////////////////////////////
+void I2CSelfTest(void){
+    char *result;
+    uint8_t check;
+    accelerometerI2CWrite(0x3F, 0x03);
+    accelerometerI2CWrite(0x40, 0x01);
+    wait(0.3);
+    result = accelerometerI2CRead(0x40);
+    check = result[0];
+    if(check & 0x04){
+        pc.printf("Passed\n\r");
+    }else {pc.printf("FAILED\n\r");}
+}
+////////////////////////////////////////////////////////////////////////////////
+
 // Used to clear serial buffer in beginning
 ////////////////////////////////////////////////////////////////////////////////
 void flushSerialBuffer(void) { char char1 = 0; while (pc.readable()) { char1 = pc.getc(); } return; }
\ No newline at end of file