pressure
Fork of MPL3115A2 by
Diff: MPL3115A2.cpp
- Revision:
- 4:fdf14a259af8
- Parent:
- 3:a2f1752add9a
- Child:
- 5:9edec5ee8bf4
--- a/MPL3115A2.cpp Wed May 29 11:56:52 2013 +0000 +++ b/MPL3115A2.cpp Thu May 30 07:27:24 2013 +0000 @@ -3,6 +3,7 @@ #define REG_WHO_AM_I 0x0C // return 0xC4 by default #define REG_STATUS 0x00 #define REG_CTRL_REG_1 0x26 +#define REG_CTRL_REG_3 0x28 #define REG_CTRL_REG_4 0x29 #define REG_CTRL_REG_5 0x2A #define REG_PRESSURE_MSB 0x01 // 3 byte pressure data @@ -36,6 +37,11 @@ MPL3115A2::MPL3115A2(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) { MPL3115A2_mode = BAROMETRIC_MODE; MPL3115A2_oversampling = OVERSAMPLE_RATIO_1; + // + user1_fptr = NULL; + user2_fptr = NULL; + MPL3115A2_Int1.fall( NULL); + MPL3115A2_Int2.fall( NULL); } void MPL3115A2::Reset( void) @@ -55,21 +61,18 @@ unsigned char dt[5]; unsigned char data[2]; + // Soft Reset Reset(); - /* - ** Read contents of CTRL_REG_1 - ** Clear SBYB mask while holding all other values of CTRL_REG_1. - ** To put part into Standby mode - */ Standby(); - /* - ** Clear all interrupts by reading the output registers. - ** Activate sensor in Altimeter mode. - */ + // Clear all interrupts by reading the output registers. readRegs( REG_ALTIMETER_MSB, &dt[0], 5); getStatus(); + // Configure INT active low and pullup + data[0] = REG_CTRL_REG_3; + data[1] = 0x00; + writeRegs(data, 2); // Enable Interrupt fot data ready data[0] = REG_CTRL_REG_4; data[1] = 0x80; @@ -78,12 +81,20 @@ data[0] = REG_CTRL_REG_5; data[1] = 0x00; writeRegs(data, 2); + data[0] = REG_PT_DATA_CFG; + data[1] = 0x07; + writeRegs(data, 2); - /* - ** Configure the OverSampling rate, Altimeter mode and set the sensor Active - */ + // Configure the OverSampling rate, Altimeter/Barometer mode and set the sensor Active data[0] = REG_CTRL_REG_1; - data[1] = 0x81 | (OS<<3); + data[1] = (OS<<3); + // + if (MPL3115A2_mode == BAROMETRIC_MODE) + data[1] &= 0x7F; + else + data[1] |= 0x80; + // + data[1] |= 0x01; writeRegs(data, 2); user2_fptr = fptr; @@ -115,14 +126,16 @@ getStatus(); // Write Target and Window Values - data[0] = (level<<8); - data[1] = (level&0xFF); - writeRegs( data, 2); + dt[0] = REG_P_TGT_MSB; + dt[1] = (level>>8); + dt[2] = (level&0xFF); + writeRegs( dt, 3); // Window values are zero - data[0] = 0; - data[1] = 0; - writeRegs( data, 2); + dt[0] = REG_P_WND_MSB; + dt[1] = 0; + dt[2] = 0; + writeRegs( dt, 3); // Enable Pressure Threshold interrupt data[0] = REG_CTRL_REG_4; @@ -132,8 +145,13 @@ data[0] = REG_CTRL_REG_5; data[1] = 0x08; writeRegs( data, 2); - - Active(); + data[0] = REG_PT_DATA_CFG; + data[1] = 0x07; + writeRegs(data, 2); + // Configure the OverSampling rate, Altimeter mode and set the sensor Active + data[0] = REG_CTRL_REG_1; + data[1] = 0x81 | (MPL3115A2_oversampling<<3); + writeRegs(data, 2); user1_fptr = fptr; MPL3115A2_Int1.fall( this, &MPL3115A2::AltitudeTrg_IRQ);