Llibrary for the WiGo MPL3115A2, I2C Precision Altimeter sensor. This is a temp fork
Dependents: sensor AerCloud_MutliTech_Socket_Modem_Example Freescale_Multi-Sensor_Shield 2lemetry_Sensor_Example ... more
Fork of MPL3115A2 by
Revision 3:a2f1752add9a, committed 2013-05-29
- 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 */