NOT FINISHED YET!!! My first try to get a self built fully working Quadrocopter based on an mbed, a self built frame and some other more or less cheap parts.
Sensors/Alt/BMP085.cpp@40:2ca410923691, 2014-02-14 (annotated)
- Committer:
- maetugr
- Date:
- Fri Feb 14 14:17:32 2014 +0000
- Revision:
- 40:2ca410923691
- Parent:
- 34:3aa1cbcde59d
now with MPU6050 before taking it too FlyBed2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
maetugr | 34:3aa1cbcde59d | 1 | #include "BMP085.h" |
maetugr | 34:3aa1cbcde59d | 2 | |
maetugr | 34:3aa1cbcde59d | 3 | BMP085::BMP085(PinName sda, PinName scl) : I2C_Sensor(sda, scl, BMP085_I2C_ADDRESS) |
maetugr | 34:3aa1cbcde59d | 4 | { |
maetugr | 34:3aa1cbcde59d | 5 | // initialize BMP085 with settings |
maetugr | 34:3aa1cbcde59d | 6 | //writeRegister(0xf4, 0x2e); // TODO: was macht das + register in header! |
maetugr | 34:3aa1cbcde59d | 7 | |
maetugr | 34:3aa1cbcde59d | 8 | } |
maetugr | 34:3aa1cbcde59d | 9 | |
maetugr | 34:3aa1cbcde59d | 10 | /*void BMP085::read() |
maetugr | 34:3aa1cbcde59d | 11 | { |
maetugr | 34:3aa1cbcde59d | 12 | long P, UTemp, UPressure, X1, X2, X3, B3, B5, B6; |
maetugr | 34:3aa1cbcde59d | 13 | unsigned long B4, B7; |
maetugr | 34:3aa1cbcde59d | 14 | |
maetugr | 34:3aa1cbcde59d | 15 | // TODO: writeRegister(0xf4, 0x2e); ?!!! |
maetugr | 34:3aa1cbcde59d | 16 | twi_writechar(BMP085_ADRESS, 0xf4, 0x2e); |
maetugr | 34:3aa1cbcde59d | 17 | // Wait at least 4.5ms |
maetugr | 34:3aa1cbcde59d | 18 | wait(0.005); |
maetugr | 34:3aa1cbcde59d | 19 | UTemp = twi_readshort(BMP085_ADRESS, 0xf6); |
maetugr | 34:3aa1cbcde59d | 20 | |
maetugr | 34:3aa1cbcde59d | 21 | X1 = ((UTemp - AC6) * AC5) >> 15; |
maetugr | 34:3aa1cbcde59d | 22 | X2 = (MC << 11) / (X1 + MD); |
maetugr | 34:3aa1cbcde59d | 23 | B5 = X1 + X2; |
maetugr | 34:3aa1cbcde59d | 24 | Temperature = (float)((B5 + 8) >> 4)/10.0; |
maetugr | 34:3aa1cbcde59d | 25 | |
maetugr | 34:3aa1cbcde59d | 26 | twi_writechar(BMP085_ADRESS, 0xf4, 0x34 + (oss << 6)); |
maetugr | 34:3aa1cbcde59d | 27 | // Wait at least 4.5ms |
maetugr | 34:3aa1cbcde59d | 28 | wait(0.005); |
maetugr | 34:3aa1cbcde59d | 29 | UPressure = twi_readlong(BMP085_ADRESS, 0xf6) >> (8 - oss); |
maetugr | 34:3aa1cbcde59d | 30 | |
maetugr | 34:3aa1cbcde59d | 31 | B6 = B5 - 4000; |
maetugr | 34:3aa1cbcde59d | 32 | X1 = (B2 * (B6 * B6) >> 12) >> 11; |
maetugr | 34:3aa1cbcde59d | 33 | X2 = (AC2 * B6) >> 11; |
maetugr | 34:3aa1cbcde59d | 34 | X3 = X1 + X2; |
maetugr | 34:3aa1cbcde59d | 35 | B3 = ((AC1 * 4 + X3) << oss) >> 2; |
maetugr | 34:3aa1cbcde59d | 36 | |
maetugr | 34:3aa1cbcde59d | 37 | X1 = (AC3 * B6) >> 13; |
maetugr | 34:3aa1cbcde59d | 38 | X2 = (B1 * (B6 * B6) >> 12) >> 16; |
maetugr | 34:3aa1cbcde59d | 39 | X3 = ((X1 + X2) + 2) >> 2; |
maetugr | 34:3aa1cbcde59d | 40 | B4 = AC4 * (X3 + 32768) >> 15; |
maetugr | 34:3aa1cbcde59d | 41 | |
maetugr | 34:3aa1cbcde59d | 42 | B7 = (unsigned long)(UPressure - B3) * (50000 >> oss); |
maetugr | 34:3aa1cbcde59d | 43 | |
maetugr | 34:3aa1cbcde59d | 44 | if (B7 < 0x80000000) |
maetugr | 34:3aa1cbcde59d | 45 | { |
maetugr | 34:3aa1cbcde59d | 46 | P = (2 * B7) / B4; |
maetugr | 34:3aa1cbcde59d | 47 | } |
maetugr | 34:3aa1cbcde59d | 48 | else |
maetugr | 34:3aa1cbcde59d | 49 | { |
maetugr | 34:3aa1cbcde59d | 50 | P = 2* (B7 / B4); |
maetugr | 34:3aa1cbcde59d | 51 | } |
maetugr | 34:3aa1cbcde59d | 52 | X1 = (P >> 8) * (P >> 8); |
maetugr | 34:3aa1cbcde59d | 53 | X1 = (X1 * 3038) >> 16; |
maetugr | 34:3aa1cbcde59d | 54 | X2 = (-7357 * P) >> 16; |
maetugr | 34:3aa1cbcde59d | 55 | P = P + ((X1 + X2 + 3791) >> 4); |
maetugr | 34:3aa1cbcde59d | 56 | Pressure = (float)P / 100.0; |
maetugr | 34:3aa1cbcde59d | 57 | }*/ |