Llibrary for the WiGo MPL3115A2, I2C Precision Altimeter sensor.

Dependents:   KL25Z_Batt_Test WIGO_MPL3115A2 Multi-Sensor SPACEmk2 ... more

30/05/2013 Added and tested the data acquisition using Interrupt. Added code for Altimeter trigger Interrupt but not yet tested.

Very basic library. Under development. Need to add in order: 1. IRQ configuration. 2. FIFO mode configuration.

Files at this revision

API Documentation at this revision

Comitter:
clemente
Date:
Wed May 29 11:56:52 2013 +0000
Parent:
2:a2fcfb7ff611
Child:
4:fdf14a259af8
Commit message:
Code for Altitude trigger and data ready using IRQ. To be tested.

Changed in this revision

MPL3115A2.cpp Show annotated file Show diff for this revision Revisions of this file
MPL3115A2.h Show annotated file Show diff for this revision Revisions of this file
--- a/MPL3115A2.cpp	Wed May 29 05:57:15 2013 +0000
+++ b/MPL3115A2.cpp	Wed May 29 11:56:52 2013 +0000
@@ -9,9 +9,23 @@
 #define REG_ALTIMETER_MSB   0x01        // 3 byte altimeter data
 #define REG_TEMP_MSB        0x04        // 2 byte temperature data
 #define REG_PT_DATA_CFG     0x13
+#define REG_P_TGT_MSB       0x16
+#define REG_P_WND_MSB       0x19
 
 #define UINT14_MAX        16383
 
+/** Interrupt schema
+*
+* :: The Altitude Trigger use the IRQ1.
+* 
+*   Altitude Trigger -- MPL3115A2_Int1.fall --- AltitudeTrg_IRQ --- user1_fptr
+*
+*
+* :: The Data ready use the IRQ2. 
+*
+*   Data Ready -- MPL3115A2_Int2.fall --- DataReady_IRQ --- user2_fptr
+*
+*/
 void (*user2_fptr)(void);               // Pointers to user function called after
 void (*user1_fptr)(void);               // IRQ assertion.
 
@@ -60,15 +74,14 @@
     data[0] = REG_CTRL_REG_4;
     data[1] = 0x80;
     writeRegs(data, 2);    
-    // Configure Interrupt route to INT2
+    // Configure Interrupt to route to INT2
     data[0] = REG_CTRL_REG_5;
     data[1] = 0x00;
     writeRegs(data, 2);    
 
     /*
-    ** Write a 1 to the ALT and SBYB bits to go into Active Altimeter mode
+    ** Configure the OverSampling rate, Altimeter mode and set the sensor Active
     */
-    // Configure the OverSampling rate, Altimeter mode and set the sensor Active
     data[0] = REG_CTRL_REG_1;
     data[1] = 0x81 | (OS<<3);
     writeRegs(data, 2);    
@@ -86,6 +99,56 @@
     user2_fptr();   
 }
 
+void MPL3115A2::AltitudeTrigger( void(*fptr)(void), unsigned short level)
+{
+    unsigned char dt[5];
+    unsigned char data[2];
+
+    // Soft Reset
+    Reset();
+    
+    // The device is on standby
+    Standby();
+    
+    // Clear all interrupts by reading the output registers.
+    readRegs( REG_ALTIMETER_MSB, &dt[0], 5);
+    getStatus();
+
+    // Write Target and Window Values
+    data[0] = (level<<8);
+    data[1] = (level&0xFF);
+    writeRegs( data, 2);
+    
+    // Window values are zero
+    data[0] = 0;
+    data[1] = 0;
+    writeRegs( data, 2);
+
+    // Enable Pressure Threshold interrupt
+    data[0] = REG_CTRL_REG_4;
+    data[1] = 0x08;
+    writeRegs( data, 2);
+    // Interrupt is routed to INT1
+    data[0] = REG_CTRL_REG_5;
+    data[1] = 0x08;
+    writeRegs( data, 2);
+
+    Active();
+
+    user1_fptr = fptr;
+    MPL3115A2_Int1.fall( this, &MPL3115A2::AltitudeTrg_IRQ);
+
+}
+
+void MPL3115A2::AltitudeTrg_IRQ( void)
+{
+    // Clear the IRQ flag
+    getStatus();
+    // Run the user supplied function
+    user1_fptr();   
+
+}
+
 void MPL3115A2::Barometric_Mode( void)
 {
     unsigned char t;
--- a/MPL3115A2.h	Wed May 29 05:57:15 2013 +0000
+++ b/MPL3115A2.h	Wed May 29 11:56:52 2013 +0000
@@ -3,15 +3,15 @@
 
 #include "mbed.h"
 
-/* Oversampling */
-#define OVERSAMPLE_RATIO_1      0
-#define OVERSAMPLE_RATIO_2      1
-#define OVERSAMPLE_RATIO_4      2
-#define OVERSAMPLE_RATIO_8      3
-#define OVERSAMPLE_RATIO_16     4
-#define OVERSAMPLE_RATIO_32     5
-#define OVERSAMPLE_RATIO_64     6
-#define OVERSAMPLE_RATIO_128    7
+// Oversampling value and minimum time between sample
+#define OVERSAMPLE_RATIO_1      0       // 6 ms
+#define OVERSAMPLE_RATIO_2      1       // 10 ms
+#define OVERSAMPLE_RATIO_4      2       // 18 ms
+#define OVERSAMPLE_RATIO_8      3       // 34 ms
+#define OVERSAMPLE_RATIO_16     4       // 66 ms
+#define OVERSAMPLE_RATIO_32     5       // 130 ms
+#define OVERSAMPLE_RATIO_64     6       // 258 ms
+#define OVERSAMPLE_RATIO_128    7       // 512 ms
 
 /* Mode */
 #define ALTIMETER_MODE      1
@@ -143,6 +143,14 @@
     * @return none
     */
     void DataReady( void(*fptr)(void), unsigned char OS);
+
+    /**
+    * Configure the sensor to streaming data using Interrupt
+    *
+    * @param user functin callback, oversampling values. See MPL3115A2.h
+    * @return none
+    */
+    void AltitudeTrigger( void(*fptr)(void), unsigned short level);
     
     /**
     * Soft Reset
@@ -158,6 +166,7 @@
     unsigned char MPL3115A2_mode;
     unsigned char MPL3115A2_oversampling;
     void DataReady_IRQ( void);
+    void AltitudeTrg_IRQ( void);
     
     /** Set the device in active mode
     */