An fully working IMU-Filter and Sensor drivers for the 10DOF-Board over I2C. All in one simple class. Include, calibrate sensors, call read, get angles. (3D Visualisation code for Python also included) Sensors: L3G4200D, ADXL345, HMC5883, BMP085
IMU/Sensors/Alt/BMP085.h@4:f62337b907e5, 2013-08-29 (annotated)
- Committer:
- maetugr
- Date:
- Thu Aug 29 13:52:30 2013 +0000
- Revision:
- 4:f62337b907e5
- Parent:
- 0:3e7450f1a938
The Altitude Sensor is now implemented, it's really 10DOF now ;); TODO: Autocalibration
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
maetugr | 0:3e7450f1a938 | 1 | // based on http://mbed.org/users/okini3939/code/BMP085/ |
maetugr | 0:3e7450f1a938 | 2 | |
maetugr | 0:3e7450f1a938 | 3 | #ifndef BMP085_H |
maetugr | 0:3e7450f1a938 | 4 | #define BMP085_H |
maetugr | 0:3e7450f1a938 | 5 | |
maetugr | 0:3e7450f1a938 | 6 | #include "mbed.h" |
maetugr | 0:3e7450f1a938 | 7 | #include "I2C_Sensor.h" |
maetugr | 0:3e7450f1a938 | 8 | |
maetugr | 0:3e7450f1a938 | 9 | #define BMP085_I2C_ADDRESS 0xEE |
maetugr | 0:3e7450f1a938 | 10 | |
maetugr | 4:f62337b907e5 | 11 | // register addresses |
maetugr | 4:f62337b907e5 | 12 | #define BMP085_CAL_AC1 0xAA // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 13 | #define BMP085_CAL_AC2 0xAC // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 14 | #define BMP085_CAL_AC3 0xAE // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 15 | #define BMP085_CAL_AC4 0xB0 // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 16 | #define BMP085_CAL_AC5 0xB2 // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 17 | #define BMP085_CAL_AC6 0xB4 // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 18 | #define BMP085_CAL_B1 0xB6 // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 19 | #define BMP085_CAL_B2 0xB8 // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 20 | #define BMP085_CAL_MB 0xBA // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 21 | #define BMP085_CAL_MC 0xBC // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 22 | #define BMP085_CAL_MD 0xBE // R Calibration data (16 bits) |
maetugr | 4:f62337b907e5 | 23 | #define BMP085_CONTROL 0xF4 // W Control register |
maetugr | 4:f62337b907e5 | 24 | #define BMP085_CONTROL_OUTPUT 0xF6 // R Output registers 0xF6=MSB, 0xF7=LSB, 0xF8=XLSB |
maetugr | 4:f62337b907e5 | 25 | |
maetugr | 4:f62337b907e5 | 26 | #define BMP085_SOFTRESET 0xE0 // -- unused registers |
maetugr | 4:f62337b907e5 | 27 | #define BMP085_VERSION 0xD1 // ML_VERSION pos=0 len=4 msk=0F AL_VERSION pos=4 len=4 msk=f0 |
maetugr | 4:f62337b907e5 | 28 | #define BMP085_CHIPID 0xD0 // pos=0 mask=FF len=8 BMP085_CHIP_ID=0x55 |
maetugr | 4:f62337b907e5 | 29 | |
maetugr | 4:f62337b907e5 | 30 | // BMP085 Modes |
maetugr | 4:f62337b907e5 | 31 | #define MODE_ULTRA_LOW_POWER 0 //oversampling=0, internalsamples=1, maxconvtimepressure=4.5ms, avgcurrent=3uA, RMSnoise_hPA=0.06, RMSnoise_m=0.5 |
maetugr | 4:f62337b907e5 | 32 | #define MODE_STANDARD 1 //oversampling=1, internalsamples=2, maxconvtimepressure=7.5ms, avgcurrent=5uA, RMSnoise_hPA=0.05, RMSnoise_m=0.4 |
maetugr | 4:f62337b907e5 | 33 | #define MODE_HIGHRES 2 //oversampling=2, internalsamples=4, maxconvtimepressure=13.5ms, avgcurrent=7uA, RMSnoise_hPA=0.04, RMSnoise_m=0.3 |
maetugr | 4:f62337b907e5 | 34 | #define MODE_ULTRA_HIGHRES 3 //oversampling=3, internalsamples=8, maxconvtimepressure=25.5ms, avgcurrent=12uA, RMSnoise_hPA=0.03, RMSnoise_m=0.25 |
maetugr | 4:f62337b907e5 | 35 | // "Sampling rate can be increased to 128 samples per second (standard mode) for |
maetugr | 4:f62337b907e5 | 36 | // dynamic measurement.In this case it is sufficient to measure temperature only |
maetugr | 4:f62337b907e5 | 37 | // once per second and to use this value for all pressure measurements during period." |
maetugr | 4:f62337b907e5 | 38 | // (from BMP085 datasheet Rev1.2 page 10). |
maetugr | 4:f62337b907e5 | 39 | // Control register |
maetugr | 4:f62337b907e5 | 40 | #define READ_TEMPERATURE 0x2E |
maetugr | 4:f62337b907e5 | 41 | #define READ_PRESSURE 0x34 |
maetugr | 4:f62337b907e5 | 42 | //Other |
maetugr | 4:f62337b907e5 | 43 | #define MSLP 101325 // Mean Sea Level Pressure = 1013.25 hPA (1hPa = 100Pa = 1mbar) |
maetugr | 4:f62337b907e5 | 44 | |
maetugr | 4:f62337b907e5 | 45 | class BMP085 : public I2C_Sensor { |
maetugr | 0:3e7450f1a938 | 46 | public: |
maetugr | 0:3e7450f1a938 | 47 | BMP085(PinName sda, PinName scl); |
maetugr | 0:3e7450f1a938 | 48 | |
maetugr | 4:f62337b907e5 | 49 | virtual void read(); |
maetugr | 4:f62337b907e5 | 50 | float Temperature, Pressure, Altitude; |
maetugr | 0:3e7450f1a938 | 51 | |
maetugr | 0:3e7450f1a938 | 52 | private: |
maetugr | 4:f62337b907e5 | 53 | short AC1, AC2, AC3, B1, B2, MB, MC, MD; // calibration data |
maetugr | 4:f62337b907e5 | 54 | unsigned short AC4, AC5, AC6; |
maetugr | 4:f62337b907e5 | 55 | short oss; |
maetugr | 0:3e7450f1a938 | 56 | |
maetugr | 4:f62337b907e5 | 57 | virtual void readraw(); |
maetugr | 0:3e7450f1a938 | 58 | }; |
maetugr | 0:3e7450f1a938 | 59 | |
maetugr | 0:3e7450f1a938 | 60 | #endif |