altb_pmic / HP206C

Dependents:   Grove-Barometric_Pressure_Sensor_Example

HP206C.h

Committer:
pmic
Date:
2019-06-25
Revision:
3:dd1c93488020
Parent:
2:8f5aa7475f97
Child:
4:a2b79f08ad14

File content as of revision 3:dd1c93488020:

#ifndef _HP206C
#define _HP206C

#include "mbed.h"

#define I2C_BAROMETER_ADDRESS 0x76 << 1 // 0xEC, device adress

#define HP20X_SOFT_RST        0x06 // for initializing, takes longer than next
#define HP20X_ANA_CAL         0x28 // recalibrate analog internal circuitries, for unstable environment

#define HP20X_WR_CONVERT_CMD  0x40

#define HP20X_READ_PT         0x10 // read pressure and altitude command
#define HP20X_READ_A          0x31 // read altitude command

#define HP20X_WR_REG_MODE     0xC0
#define HP20X_RD_REG_MODE     0x80

#define HP20X_OK_DEV          0X80 // successfully initialized
#define HP20X_REG_PARA        0X0F // status register

#define HP20X_CONVERT_OSR4096 0 << 2
#define HP20X_CONVERT_OSR2048 1 << 2
#define HP20X_CONVERT_OSR1024 2 << 2
#define HP20X_CONVERT_OSR512  3 << 2
#define HP20X_CONVERT_OSR256  4 << 2
#define HP20X_CONVERT_OSR128  5 << 2

#define OSR_CFG HP20X_CONVERT_OSR4096

class HP206C
{
public:

    HP206C(PinName p_sda, PinName p_scl);
    
    float operator()() {
        return readAltitude();
    }
    
    virtual ~HP206C();
    
    void     reset();
    float    readAltitude();

private:

    I2C i2c;

    float   altitude;
    bool    baro_found;
    uint8_t OSR_ConvertTime; 
    
    unsigned char readRegister(unsigned char reg);
    void          writeRegister(unsigned char reg, unsigned char data);
    void          enableCompensation();
    void          disableCompensation();
    void          softReset();
    void          recalibrate();
    uint32_t      readData3Bytes();
    void          readTemperatureAndPressure();
    void          updateAltitude();
    void          setConversionTime();

};

#endif