![]() ![]() ![]() ![]() |
|
This module provides an interface to the popular Freescale MPL3115A2 pressure and temperature sensor.
It uses HiPi::BCM2835::I2C as a backend
HiPi::BCM2835::I2C supports the read method employing repeated starts that MPL31152 requires.
Currently only one shot methods and some utilities are wrapped. It is recommeded that you implement your own module inheriting from HiPi::Interface::MPL3115A2 to suit your own requirement.
use HiPi::Interface::MPL3115A2 qw( :all ); register addresses MPL_REG_STATUS MPL_REG_OUT_P_MSB MPL_REG_OUT_P_CSB MPL_REG_OUT_P_LSB MPL_REG_OUT_T_MSB MPL_REG_OUT_T_LSB MPL_REG_DR_STATUS MPL_REG_OUT_P_DELTA_MSB MPL_REG_OUT_P_DELTA_CSB MPL_REG_OUT_P_DELTA_LSB MPL_REG_OUT_T_DELTA_MSB MPL_REG_OUT_T_DELTA_LSB MPL_REG_WHO_AM_I MPL_REG_F_STATUS MPL_REG_F_DATA MPL_REG_F_SETUP MPL_REG_TIME_DLY MPL_REG_SYSMOD MPL_REG_INT_SOURCE MPL_REG_PT_DATA_CFG MPL_REG_BAR_IN_MSB MPL_REG_MAR_IN_LSB MPL_REG_P_TGT_MSB MPL_REG_P_TGT_LSB MPL_REG_T_TGT MPL_REG_P_WND_MSB MPL_REG_P_WND_LSB MPL_REG_T_WND MPL_REG_P_MIN_MSB MPL_REG_P_MIN_CSB MPL_REG_P_MIN_LSB MPL_REG_T_MIN_MSB MPL_REG_T_MIN_LSB MPL_REG_P_MAX_MSB MPL_REG_P_MAX_CSB MPL_REG_P_MAX_LSB MPL_REG_T_MAX_MSB MPL_REG_T_MAX_LSB MPL_REG_CTRL_REG1 MPL_REG_CTRL_REG2 MPL_REG_CTRL_REG3 MPL_REG_CTRL_REG4 MPL_REG_CTRL_REG5 MPL_REG_OFF_P MPL_REG_OFF_T MPL_REG_OFF_H bitmasks for CTRL_REG1 MPL_CTRL_REG1_SBYB MPL_CTRL_REG1_OST MPL_CTRL_REG1_RST MPL_CTRL_REG1_OS0 MPL_CTRL_REG1_OS1 MPL_CTRL_REG1_OS2 MPL_CTRL_REG1_RAW MPL_CTRL_REG1_ALT MPL_CTRL_REG1_MASK bitmasks for CTRL_REG2 MPL_CTRL_REG2_ST0 MPL_CTRL_REG2_ST1 MPL_CTRL_REG2_ST2 MPL_CTRL_REG2_ST3 MPL_CTRL_REG2_ALARM_SEL MPL_CTRL_REG2_LOAD_OUTPUT MPL_CTRL_REG2_MASK bitmasks for CTRL_REG3 MPL_CTRL_REG3_PP_0D2 MPL_CTRL_REG3_IPOL2 MPL_CTRL_REG3_PP_OD1 MPL_CTRL_REG3_IPOL1 MPL_CTRL_REG3_MASK bitmasks for CTRL_REG4 MPL_CTRL_REG4_INT_EN_DRDY MPL_CTRL_REG4_INT_EN_FIFO MPL_CTRL_REG4_INT_EN_PW MPL_CTRL_REG4_INT_EN_TW MPL_CTRL_REG4_INT_EN_PTH MPL_CTRL_REG4_INT_EN_TTH MPL_CTRL_REG4_INT_EN_PCHG MPL_CTRL_REG4_INT_EN_TCHG MPL_CTRL_REG4_MASK bitmasks for all interrupt registers MPL_INTREGS_DRDY MPL_INTREGS_FIFO MPL_INTREGS_PW MPL_INTREGS_TW MPL_INTREGS_PTH MPL_INTREGS_TTH MPL_INTREGS_PCHG MPL_INTREGS_TCHG MPL_INTREGS_MASK bitmasks for DR_STATUS MPL_DR_STATUS_PTOW MPL_DR_STATUS_POW MPL_DR_STATUS_TOW MPL_DR_STATUS_PTDR MPL_DR_STATUS_PDR MPL_DR_STATUS_TDR MPL_DR_STATUS_MASK bitmasks for F_STATUS MPL_F_STATUS_F_OVF MPL_F_STATUS_F_WMRK_FLAG MPL_F_STATUS_F_CNT5 MPL_F_STATUS_F_CNT4 MPL_F_STATUS_F_CNT3 MPL_F_STATUS_F_CNT2 MPL_F_STATUS_F_CNT1 MPL_F_STATUS_F_CNT0 MPL_F_STATUS_MASK bitmasks for data configuration MPL_PT_DATA_CFG_DREM MPL_PT_DATA_CFG_PDEFE MPL_PT_DATA_CFG_TDEFE MPL_PT_DATA_CFG_MASK data mode flags MPL_FUNC_ALTITUDE MPL_FUNC_PRESSURE fixed device id 196 MPL3115A2_ID oversample rate flags MPL_OVERSAMPLE_1 MPL_OVERSAMPLE_2 MPL_OVERSAMPLE_4 MPL_OVERSAMPLE_8 MPL_OVERSAMPLE_16 MPL_OVERSAMPLE_32 MPL_OVERSAMPLE_64 MPL_OVERSAMPLE_128 MPL_OVERSAMPLE_MASK
Returns a new instance of the HiPi::Interface::MPL3115A2 class. Optional key => values pairs in %params and their defaults address => 0x60, peripheral => ( RPi board rev == 1 ) ? BB_I2C_PERI_0 : BB_I2C_PERI_0, you can import the peripheral constants into your code using use HiPi::BCM2835::I2C qw( :i2c );
Allows you to access the underlying HiPi::BCM2835::I2C instance directly rather than through the wrapped methods in this module. For example, to put the device in 'raw' mode: my ($reg) = $sen->device->i2c_read_register_rs(MPL_REG_CTRL_REG1, 1); $sen->device->i2c_write(MPL_REG_CTRL_REG1, $reg | MPL_CTRL_REG1_RAW); To ensure the device is not in 'raw' mode: my ($reg) = $sen->device->i2c_read_register_rs(MPL_REG_CTRL_REG1, 1); my $newmask = $reg &~MPL_REG_CTRL_REG1; $sen->device->i2c_write(MPL_REG_CTRL_REG1, $newmask);
Returns false in standy mode, true in active mode.
Returns standard id MPL3115A2_ID. Often used as a method of confirming correct communication.
Returns the current active mode. ( 1 == device in active mode, 0 == device in standby mode.) If the optional $set parameter is passed will set active mode on / off according to the value of $set ( 1 / 0 )
Returns the current measuring function as one of the exportable constants: MPL_FUNC_ALTITUDE MPL_FUNC_PRESSURE If the optional $newmode parameter is passed as either MPL_FUNC_ALTITUDE or MPL_FUNC_PRESSURE, command will set the current measuring mode to that value.
Allows setting and retrieving over sampling rate as one of the constants: MPL_OVERSAMPLE_1 MPL_OVERSAMPLE_2 MPL_OVERSAMPLE_4 MPL_OVERSAMPLE_8 MPL_OVERSAMPLE_16 MPL_OVERSAMPLE_32 MPL_OVERSAMPLE_64 MPL_OVERSAMPLE_128
Gets the recommended delay in milliseconds to wait before attempting to retrieve data after a one-shot wake up. The method is used internally by the os_xxxxx methods..... my ( $curreg ) = $self->device->i2c_read_register_rs(MPL_REG_CTRL_REG1, 1); my $oversample = ( $curreg & MPL_OVERSAMPLE_MASK ); my $delayms = $self->delay_from_oversample($oversample); $self->device->i2c_write(MPL_REG_CTRL_REG1, $curreg | MPL_CTRL_REG1_OST ); $self->device->delay($delayms); my( $pmsb, $pcsb, $plsb, $tmsb, $tlsb) = $self->device->i2c_read_register_rs(MPL_REG_OUT_P_MSB, 5);
Sets the soft reset flag on the MPL3115A2. After this call, the device will be reset to startup defaults.
One shot method returning an array containing converted values for altitude, pressure and temperature.
$function is one of MPL_FUNC_PRESSURE or MPL_FUNC_ALTITUDE One shot method returning an array containing 2 converted values for altitude or pressure as chosen by $function, and temperature.
One shot method returning an array containing 2 converted values for either altitude or pressure, whichever is the current data mode, and temperature. Unlike os_all_data, os_pressure and os_altitude, this method never pushes the device into standby mode.
One shot method returning altitude value. If the current mode is not altitude, the device will be put into standby mode and switched to altitide operation.
One shot method returning pressure value. If the current mode is not pressure, the device will be put into standby mode and switched to pressure operation.
One shot method returning temperature value.
Takes the values returned from a call such as : $sen->device->i2c_read_register_rs(MPL_REG_OUT_P_MSB, 3) and converts them to a pressure value in pascals.
Takes a pressure in pascals and converts it to three bytes suitable for passing to offset configuration registers.
Takes the values returned from a call such as : $sen->device->i2c_read_register_rs(MPL_REG_OUT_P_MSB, 3) and converts them to an altitude value in meters.
Takes an altitude in meters and converts it to three bytes suitable for passing to offset configuration registers.
Takes the values returned from a call such as : $sen->device->i2c_read_register_rs(MPL_REG_OUT_T_MSB, 2) and converts them to a temperature value.
Takes a temperature and converts it to two bytes suitable for passing to offset configuration registers.