MPL115A2 library
See http://developer.mbed.org/users/yasuyuki/notebook/MPL115A2/
MPL115.cpp@1:12912b2da7d9, 2014-10-16 (annotated)
- Committer:
- yasuyuki
- Date:
- Thu Oct 16 16:19:40 2014 +0000
- Revision:
- 1:12912b2da7d9
- Parent:
- 0:ae28484ad07d
fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yasuyuki | 0:ae28484ad07d | 1 | //********************** |
yasuyuki | 0:ae28484ad07d | 2 | // MPL115.cpp for mbed |
yasuyuki | 0:ae28484ad07d | 3 | // |
yasuyuki | 0:ae28484ad07d | 4 | // MPL115A2 mpl115a2(P0_5,P0_4); |
yasuyuki | 0:ae28484ad07d | 5 | // or |
yasuyuki | 0:ae28484ad07d | 6 | // I2C i2c(P0_5,P0_4); |
yasuyuki | 0:ae28484ad07d | 7 | // MPL115A2 mpl115a2(i2c); |
yasuyuki | 0:ae28484ad07d | 8 | // |
yasuyuki | 0:ae28484ad07d | 9 | // (C)Copyright 2014 All rights reserved by Y.Onodera |
yasuyuki | 0:ae28484ad07d | 10 | // http://einstlab.web.fc2.com |
yasuyuki | 0:ae28484ad07d | 11 | //********************** |
yasuyuki | 0:ae28484ad07d | 12 | |
yasuyuki | 0:ae28484ad07d | 13 | #include "mbed.h" |
yasuyuki | 0:ae28484ad07d | 14 | #include "MPL115.h" |
yasuyuki | 0:ae28484ad07d | 15 | |
yasuyuki | 0:ae28484ad07d | 16 | MPL115A2::MPL115A2 (PinName sda, PinName scl) : _i2c(sda, scl) { |
yasuyuki | 0:ae28484ad07d | 17 | init(); |
yasuyuki | 0:ae28484ad07d | 18 | } |
yasuyuki | 0:ae28484ad07d | 19 | MPL115A2::MPL115A2 (I2C& p_i2c) : _i2c(p_i2c) { |
yasuyuki | 0:ae28484ad07d | 20 | init(); |
yasuyuki | 0:ae28484ad07d | 21 | } |
yasuyuki | 0:ae28484ad07d | 22 | |
yasuyuki | 0:ae28484ad07d | 23 | |
yasuyuki | 0:ae28484ad07d | 24 | void MPL115A2::start() |
yasuyuki | 0:ae28484ad07d | 25 | { |
yasuyuki | 0:ae28484ad07d | 26 | |
yasuyuki | 0:ae28484ad07d | 27 | // Start Conversion |
yasuyuki | 0:ae28484ad07d | 28 | buf[0] = 0x12; |
yasuyuki | 0:ae28484ad07d | 29 | buf[1] = 0x01; |
yasuyuki | 0:ae28484ad07d | 30 | _i2c.write(MPL115_ADDR, buf, 2); |
yasuyuki | 0:ae28484ad07d | 31 | |
yasuyuki | 0:ae28484ad07d | 32 | wait_ms(5); |
yasuyuki | 0:ae28484ad07d | 33 | |
yasuyuki | 0:ae28484ad07d | 34 | // Read Results |
yasuyuki | 0:ae28484ad07d | 35 | buf[0] = 0x00; |
yasuyuki | 0:ae28484ad07d | 36 | _i2c.write(MPL115_ADDR, buf, 1, false); // no stop, repeated |
yasuyuki | 0:ae28484ad07d | 37 | _i2c.read( MPL115_ADDR, buf, 4); |
yasuyuki | 0:ae28484ad07d | 38 | |
yasuyuki | 0:ae28484ad07d | 39 | Padc.byte.HB=buf[0]; |
yasuyuki | 0:ae28484ad07d | 40 | Padc.byte.LB=buf[1]; |
yasuyuki | 0:ae28484ad07d | 41 | Tadc.byte.HB=buf[2]; |
yasuyuki | 0:ae28484ad07d | 42 | Tadc.byte.LB=buf[3]; |
yasuyuki | 0:ae28484ad07d | 43 | |
yasuyuki | 0:ae28484ad07d | 44 | } |
yasuyuki | 0:ae28484ad07d | 45 | |
yasuyuki | 0:ae28484ad07d | 46 | |
yasuyuki | 0:ae28484ad07d | 47 | short MPL115A2::temperature() |
yasuyuki | 0:ae28484ad07d | 48 | { |
yasuyuki | 0:ae28484ad07d | 49 | start(); |
yasuyuki | 0:ae28484ad07d | 50 | |
yasuyuki | 1:12912b2da7d9 | 51 | Tadc.Val >>= 6; // to adjust 10 bit |
yasuyuki | 0:ae28484ad07d | 52 | return Tadc.S; |
yasuyuki | 0:ae28484ad07d | 53 | } |
yasuyuki | 0:ae28484ad07d | 54 | |
yasuyuki | 0:ae28484ad07d | 55 | |
yasuyuki | 0:ae28484ad07d | 56 | short MPL115A2::pressure() |
yasuyuki | 0:ae28484ad07d | 57 | { |
yasuyuki | 0:ae28484ad07d | 58 | |
yasuyuki | 0:ae28484ad07d | 59 | // Pcomp = a0 + (b1 + c12 * Tadc) * Padc + b2 * Tadc |
yasuyuki | 0:ae28484ad07d | 60 | int c12x2, a1, a1x1, y1, a2x2, Pcomp; |
yasuyuki | 0:ae28484ad07d | 61 | |
yasuyuki | 0:ae28484ad07d | 62 | start(); |
yasuyuki | 0:ae28484ad07d | 63 | |
yasuyuki | 1:12912b2da7d9 | 64 | Padc.Val >>= 6; // to adjust 10 bit |
yasuyuki | 1:12912b2da7d9 | 65 | Tadc.Val >>= 6; // to adjust 10 bit |
yasuyuki | 0:ae28484ad07d | 66 | c12x2 = (((int)c12.S) * (int)Tadc.S) >> 11; // c12x2 = c12 * Tadc |
yasuyuki | 0:ae28484ad07d | 67 | a1 = (int)b1.S + c12x2; // a1 = b1 + c12x2 |
yasuyuki | 0:ae28484ad07d | 68 | a1x1 = a1 * (int)Padc.S; // a1x1 = a1 * Padc |
yasuyuki | 0:ae28484ad07d | 69 | y1 = (((int)a0.S) << 10) + a1x1; // y1 = a0 + a1x1 |
yasuyuki | 0:ae28484ad07d | 70 | a2x2 = (((int)b2.S) * (int)Tadc.S) >> 1; // a2x2 = b2 * Tadc |
yasuyuki | 0:ae28484ad07d | 71 | Pcomp = (y1 + a2x2) >> 9; // Pcomp = y1 + a2x2 |
yasuyuki | 0:ae28484ad07d | 72 | |
yasuyuki | 0:ae28484ad07d | 73 | return (short)Pcomp; |
yasuyuki | 0:ae28484ad07d | 74 | |
yasuyuki | 0:ae28484ad07d | 75 | // hPa = (Pcomp/16) * (115.0-50.0)/1023.0 + 50.0 |
yasuyuki | 0:ae28484ad07d | 76 | } |
yasuyuki | 0:ae28484ad07d | 77 | |
yasuyuki | 0:ae28484ad07d | 78 | void MPL115A2::init() |
yasuyuki | 0:ae28484ad07d | 79 | { |
yasuyuki | 0:ae28484ad07d | 80 | |
yasuyuki | 0:ae28484ad07d | 81 | buf[0] = 0x04; |
yasuyuki | 0:ae28484ad07d | 82 | _i2c.write(MPL115_ADDR, buf, 1, false); // no stop, repeated |
yasuyuki | 0:ae28484ad07d | 83 | _i2c.read( MPL115_ADDR, buf, 8); |
yasuyuki | 0:ae28484ad07d | 84 | |
yasuyuki | 0:ae28484ad07d | 85 | a0.byte.HB=buf[0]; |
yasuyuki | 0:ae28484ad07d | 86 | a0.byte.LB=buf[1]; |
yasuyuki | 0:ae28484ad07d | 87 | b1.byte.HB=buf[2]; |
yasuyuki | 0:ae28484ad07d | 88 | b1.byte.LB=buf[3]; |
yasuyuki | 0:ae28484ad07d | 89 | b2.byte.HB=buf[4]; |
yasuyuki | 0:ae28484ad07d | 90 | b2.byte.LB=buf[5]; |
yasuyuki | 0:ae28484ad07d | 91 | c12.byte.HB=buf[6]; |
yasuyuki | 0:ae28484ad07d | 92 | c12.byte.LB=buf[7]; |
yasuyuki | 0:ae28484ad07d | 93 | |
yasuyuki | 0:ae28484ad07d | 94 | } |
yasuyuki | 0:ae28484ad07d | 95 | |
yasuyuki | 0:ae28484ad07d | 96 |