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

Dependencies:   mbed

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?

UserRevisionLine numberNew 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