MPL115A2 library

Dependents:   mbed_MPL115

See http://developer.mbed.org/users/yasuyuki/notebook/MPL115A2/

Committer:
yasuyuki
Date:
Thu Oct 16 16:19:40 2014 +0000
Revision:
1:12912b2da7d9
Parent:
0:ae28484ad07d
fix

Who changed what in which revision?

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