High resolution barometer and altimeter using i2c mode

Dependents:   mbed_5637_test Weather_Station_Ofiicial

Fork of ms5611 by Kevin Braun

Revision:
8:3a9d37268ccd
Parent:
7:2e8bc98f3dda
--- a/ms5561.h	Tue May 20 16:13:09 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-#ifndef MS5561H
-#define MS5561_H
-
-#include "mbed.h"
-
-
-#define SEA_PRESS   1013.25                 //default sea level pressure level in mb
-#define KNOWNALT    327.0                   //default known altitude, 5200 Franklin Dr., 94588
-#define INHG        0.02952998751           //convert mb to in/Hg constant
-#define MB          33.8638815              //convert in/Hg to mb constant
-#define FTMETERS    0.3048                  //convert feet to meters
-
-
-/** Software routines to access the Measurement Specialties' MS5611-01BA03 
- *  Variometer Module using the I2C bus option.  The MS5611 is a 24 bit 
- *  temperature and pressure transducer for high accuracy Barometer and 
- *  Altimeter applications.  It also includes compensation coefficients
- *  stored within the device. 
- * 
- *  Code adapted from Measurement Specialties:
- *  "AN520 C-code example for MS56xx, MS57xx (except analog sensor), and 
- *  MS58xx series pressure sensors"
- *
- *  Note: AN520 has not been updated for use with the MS5611.  Changes
- *  were necessary to "calcPT()" in order to correct scaling of 
- *  pressure readings.
- * 
- *  Features:
- *          Altitude resolution to 10cm
- *          Fast conversion down to 1 ms
- *          Low power, 1 μA (standby < 0.15 μA)
- *          QFN package 5.0 x 3.0 x 1.0 mm^3
- *          Supply voltage 1.8 to 3.6 V
- *          Integrated digital pressure sensor (24 bit DeltaSigma ADC)
- *          Operating range: 10 to 1200 mbar, -40 to +85 °C
- *          I2C and SPI interface up to 20 MHz
- *          No external components (Internal oscillator)
- *          Excellent long term stability
- *
- * @code
- * #include "mbed.h"
- * #include "ms5611.h" 
- *
- * ms5611 ms(p9, p10);                        // i2c pins used
- * Serial pc(USBTX, USBRX);                   // local terminal interface
- *
- *
- * int main (void) {
- *     pc.baud(921600);                        // set up USB serial speed
- *
- *     // set up the ms5611
- *     pc.printf("\n\nInitializing the MS5611..\n");
- *     ms.cmd_reset();
- *     pc.printf("Ready\n");
- *
- *     while(1) {
- *         double Temp = ms.calcTemp();                         //calculate press and temp, then returns current temperature in degC
- *         double Press = ms.calcPressure();                    //calculate press and temp, then returns current pressure in mb
- *         double GetPress = ms.getPressure();                  //returns current pressure in mb. Does no calculations.  Ususally done after calcTemp()
- *         double Altitude = ms.getAltitudeFT(1013.25);         //enter pressure at sea level in mb, returns altitude in feet
- *         double PressSeaLvlFT = ms.getSeaLevelBaroFT(327.2);  //enter known altitude in feet, returns sea level pressure in mb
- *         double PressSeaLvlM = ms.getAltitudeFT(99.73);       //enter known altitude in meters, returns seal level pressure in mb
- *
- *         pc.printf("Temp: %.2f degC\n", Temp);    
- *         pc.printf("Barometer: %.1f mB  %.3f in/Hg\n", Press, Press * 0.0295301);
- *         pc.printf("Alt: %.1f ft\n", Altitude);
- *         pc.printf("Sea_Lvl: %.1f ft   %.2f m\n", PressSeaLvlFT, PressSeaLvlM);
- *         wait(2.0);
- *     }
- * }
- *
- * @endcode
- */
- 
-//_____ M A C R O S
-
-#define MS5611_ADDR_W 0xEC // Module address write mode CHANGED FOR 5561 ORIGINAL 0Xee
-#define MS5611_ADDR_R 0xED // Module address read modeCHANGED FOR 5561 ORIGINAL 0XeF
-#define MS5611_CMD_RESET 0x1E // ADC reset command
-#define MS5611_CMD_ADC_READ 0x00 // ADC read command
-#define MS5611_CMD_ADC_CONV 0x40 // ADC conversion command
-#define MS5611_CMD_ADC_D1 0x00 // ADC D1 conversion
-#define MS5611_CMD_ADC_D2 0x10 // ADC D2 conversion
-#define MS5611_CMD_ADC_256 0x00 // ADC OSR=256
-#define MS5611_CMD_ADC_512 0x02 // ADC OSR=512
-#define MS5611_CMD_ADC_1024 0x04 // ADC OSR=1024
-#define MS5611_CMD_ADC_2048 0x06 // ADC OSR=2048
-#define MS5611_CMD_ADC_4096 0x08 // ADC OSR=4096
-#define MS5611_CMD_PROM_RD 0xA0 // Prom read command
-
-    /** Create ms5611 controller class
-     *
-     * @param ms5611 class
-     *
-     */
-class ms5611 {
-
-public:
-    /** Create a MS5611 object using the specified I2C object
-     *
-     * @param constructor, - the I2C object to communicate with
-     */
-    ms5611(PinName sda, PinName scl);
-    /** Initialize the MS5611 and set up the coefficients
-     *    First - reset the MS5611
-     *    Second - load coefficient values from the MS5611 PROM
-     *    Third  - calculate coefficient checksum
-     *  This routine only needs to be run once at boot up
-     *
-     * @param NONE
-     */
-    void cmd_reset();
-    /** Calculate and return compensated temperature
-     *    Returns double temperature in degC
-     *
-     * @param NONE
-     */
-    double calcTemp();
-    /** Calculate and return compensated barometric pressure
-     *    Returns double pressure in millibars
-     *
-     * @param NONE
-     */
-    double calcPressure();
-    /** Return compensated barometric pressure
-     *    Returns double pressure in millibars
-     *    DOES NOT RE-CALCULATE FIRST!!!
-     *    Saves time if you calcTemp(); first
-     *
-     * @param NONE
-     */
-    double getPressure();
-    /** Calculate and returns altitude in feet
-     *    Returns float altitude in feet
-     *
-     * @param float known pressure (mB) at sea level
-     */
-    float getAltitudeFT(float sea_pressure);
-    /** Calculate and returns sea level baro
-     *    Returns float seal level barometer in feet
-     *
-     * @param float known altitude in feet
-     */
-    float getSeaLevelBaroFT(float known_alt);
-    /** Calculate and returns sea level baro
-     *    Returns float seal level barometer in meters
-     *
-     * @param float known altitude in meters
-     */
-    float getSeaLevelBaroM(float known_alt);
-    
-private:
-    int m_i2c_start(bool readMode);
-    void m_i2c_stop(void);
-    unsigned char m_i2c_write(unsigned char data);
-    unsigned char m_i2c_readAck(void);
-    unsigned char m_i2c_readNak(void);
-    void m_i2c_send(char cmd);
-    void loadCoefs();
-    unsigned long cmd_adc(char cmd);
-    unsigned int cmd_prom(char coef_num);
-    unsigned char crc4(unsigned  n_prom[]);
-    void calcPT();
-    unsigned int PTbuffer[8];       // calibration coefficients
-  
-protected:
-    I2C     _i2c;
-    
-
-}; 
-#endif