STMicroelectronics LPS331AP, LPS25H SPI Library. This library is base on https://developer.mbed.org/users/nyamfg/code/LPS331_I2C/
Dependents: LPS331_SPI_Test main_SPC
Fork of LPS331_I2C by
LPS331_SPI.cpp@4:af2153bce185, 2016-07-28 (annotated)
- Committer:
- ohtsuka
- Date:
- Thu Jul 28 09:49:24 2016 +0000
- Revision:
- 4:af2153bce185
- Parent:
- 3:5a56dd5131bb
- Child:
- 5:760a5e23dc62
SPI version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyamfg | 0:3fd57444bc65 | 1 | /* |
ohtsuka | 3:5a56dd5131bb | 2 | * I2C/SPI digital pressure sensor "LPS331AP" library for SPI mode. |
nyamfg | 0:3fd57444bc65 | 3 | * |
ohtsuka | 3:5a56dd5131bb | 4 | * Copyright(c) -2016 Toru OHTSUKA, |
nyamfg | 0:3fd57444bc65 | 5 | * Copyright(c) -2013 unos@NYAMFG, |
nyamfg | 0:3fd57444bc65 | 6 | * Released under the MIT License: http://mbed.org/license/mit |
nyamfg | 0:3fd57444bc65 | 7 | * |
ohtsuka | 3:5a56dd5131bb | 8 | * revision: see LPS331_SPI.h. |
nyamfg | 0:3fd57444bc65 | 9 | */ |
nyamfg | 0:3fd57444bc65 | 10 | |
ohtsuka | 3:5a56dd5131bb | 11 | #include "LPS331_SPI.h" |
nyamfg | 0:3fd57444bc65 | 12 | |
ohtsuka | 4:af2153bce185 | 13 | LPS331_SPI::LPS331_SPI(PinName mosi, PinName miso, PinName sclk, PinName cs_pin):_spi(mosi, miso, sclk), _cs(cs_pin) |
nyamfg | 0:3fd57444bc65 | 14 | { |
ohtsuka | 4:af2153bce185 | 15 | _spi.format(8,0); |
ohtsuka | 4:af2153bce185 | 16 | _spi.frequency(1000000); |
ohtsuka | 4:af2153bce185 | 17 | |
nyamfg | 0:3fd57444bc65 | 18 | _ctrlreg1 = 0x20; |
nyamfg | 0:3fd57444bc65 | 19 | } |
nyamfg | 0:3fd57444bc65 | 20 | |
ohtsuka | 3:5a56dd5131bb | 21 | LPS331_SPI::~LPS331_SPI() |
nyamfg | 0:3fd57444bc65 | 22 | { |
nyamfg | 0:3fd57444bc65 | 23 | } |
nyamfg | 0:3fd57444bc65 | 24 | |
ohtsuka | 3:5a56dd5131bb | 25 | char LPS331_SPI::whoami() |
nyamfg | 0:3fd57444bc65 | 26 | { |
nyamfg | 0:3fd57444bc65 | 27 | return _read(0x0f); |
nyamfg | 0:3fd57444bc65 | 28 | } |
nyamfg | 0:3fd57444bc65 | 29 | |
ohtsuka | 3:5a56dd5131bb | 30 | bool LPS331_SPI::isAvailable() |
nyamfg | 0:3fd57444bc65 | 31 | { |
nyamfg | 0:3fd57444bc65 | 32 | if(whoami() == 0xbb) { return true; } |
nyamfg | 0:3fd57444bc65 | 33 | |
nyamfg | 0:3fd57444bc65 | 34 | return false; |
nyamfg | 0:3fd57444bc65 | 35 | } |
nyamfg | 0:3fd57444bc65 | 36 | |
ohtsuka | 3:5a56dd5131bb | 37 | void LPS331_SPI::setResolution(char pressure_avg, char temp_avg) |
nyamfg | 0:3fd57444bc65 | 38 | { |
nyamfg | 0:3fd57444bc65 | 39 | _write(0x10, ((temp_avg & 0x07) << 4) | (pressure_avg & 0x0f)); |
nyamfg | 0:3fd57444bc65 | 40 | } |
nyamfg | 0:3fd57444bc65 | 41 | |
ohtsuka | 3:5a56dd5131bb | 42 | void LPS331_SPI::setActive(bool is_active) |
nyamfg | 0:3fd57444bc65 | 43 | { |
nyamfg | 0:3fd57444bc65 | 44 | if(is_active) { |
nyamfg | 0:3fd57444bc65 | 45 | _ctrlreg1 |= 0x80; |
nyamfg | 0:3fd57444bc65 | 46 | } else { |
nyamfg | 0:3fd57444bc65 | 47 | _ctrlreg1 &= ~0x80; |
nyamfg | 0:3fd57444bc65 | 48 | } |
nyamfg | 0:3fd57444bc65 | 49 | |
nyamfg | 0:3fd57444bc65 | 50 | _write(0x20, _ctrlreg1); |
nyamfg | 0:3fd57444bc65 | 51 | } |
nyamfg | 0:3fd57444bc65 | 52 | |
ohtsuka | 3:5a56dd5131bb | 53 | void LPS331_SPI::setDataRate(char datarate) |
nyamfg | 0:3fd57444bc65 | 54 | { |
nyamfg | 0:3fd57444bc65 | 55 | datarate &= 0x07; |
nyamfg | 0:3fd57444bc65 | 56 | |
nyamfg | 0:3fd57444bc65 | 57 | _ctrlreg1 &= ~(0x07 << 4); |
nyamfg | 0:3fd57444bc65 | 58 | _ctrlreg1 |= datarate << 4; |
nyamfg | 0:3fd57444bc65 | 59 | |
nyamfg | 0:3fd57444bc65 | 60 | _write(0x20, _ctrlreg1); |
nyamfg | 0:3fd57444bc65 | 61 | } |
nyamfg | 0:3fd57444bc65 | 62 | |
nyamfg | 0:3fd57444bc65 | 63 | |
ohtsuka | 3:5a56dd5131bb | 64 | float LPS331_SPI::getPressure() |
nyamfg | 0:3fd57444bc65 | 65 | { |
nyamfg | 1:b7d3d6e82049 | 66 | char data[3]; |
nyamfg | 0:3fd57444bc65 | 67 | float pressure = 0; |
nyamfg | 1:b7d3d6e82049 | 68 | |
nyamfg | 1:b7d3d6e82049 | 69 | _read_multibyte(0x28, data, 3); |
nyamfg | 1:b7d3d6e82049 | 70 | |
nyamfg | 1:b7d3d6e82049 | 71 | pressure = data[0]; |
nyamfg | 1:b7d3d6e82049 | 72 | pressure += data[1] << 8; |
nyamfg | 1:b7d3d6e82049 | 73 | pressure += data[2] << 16; |
nyamfg | 0:3fd57444bc65 | 74 | pressure /= 4096.0; |
nyamfg | 0:3fd57444bc65 | 75 | |
nyamfg | 0:3fd57444bc65 | 76 | return pressure; |
nyamfg | 0:3fd57444bc65 | 77 | } |
nyamfg | 0:3fd57444bc65 | 78 | |
ohtsuka | 3:5a56dd5131bb | 79 | float LPS331_SPI::getTemperature() |
nyamfg | 0:3fd57444bc65 | 80 | { |
nyamfg | 1:b7d3d6e82049 | 81 | char data[2]; |
nyamfg | 0:3fd57444bc65 | 82 | short temp = 0; |
nyamfg | 1:b7d3d6e82049 | 83 | |
nyamfg | 1:b7d3d6e82049 | 84 | _read_multibyte(0x2b, data, 2); |
nyamfg | 1:b7d3d6e82049 | 85 | |
nyamfg | 1:b7d3d6e82049 | 86 | temp = data[0]; |
nyamfg | 1:b7d3d6e82049 | 87 | temp |= data[1] << 8; |
nyamfg | 0:3fd57444bc65 | 88 | |
nyamfg | 0:3fd57444bc65 | 89 | return (float)(42.5 + temp / 480.0); |
nyamfg | 0:3fd57444bc65 | 90 | } |
nyamfg | 0:3fd57444bc65 | 91 | |
nyamfg | 0:3fd57444bc65 | 92 | |
ohtsuka | 3:5a56dd5131bb | 93 | void LPS331_SPI::_write(char subaddress, char data) |
nyamfg | 0:3fd57444bc65 | 94 | { |
ohtsuka | 4:af2153bce185 | 95 | _cs = 0; |
ohtsuka | 4:af2153bce185 | 96 | _spi.write(subaddress); |
ohtsuka | 4:af2153bce185 | 97 | _spi.write(data); |
ohtsuka | 4:af2153bce185 | 98 | _cs = 1; |
nyamfg | 0:3fd57444bc65 | 99 | } |
nyamfg | 0:3fd57444bc65 | 100 | |
ohtsuka | 3:5a56dd5131bb | 101 | char LPS331_SPI::_read(char subaddress) |
nyamfg | 0:3fd57444bc65 | 102 | { |
nyamfg | 0:3fd57444bc65 | 103 | char result = 0; |
nyamfg | 0:3fd57444bc65 | 104 | |
ohtsuka | 4:af2153bce185 | 105 | _cs = 0; |
ohtsuka | 4:af2153bce185 | 106 | _spi.write(subaddress | 0x80); |
ohtsuka | 4:af2153bce185 | 107 | result = _spi.write(0); |
ohtsuka | 4:af2153bce185 | 108 | _cs = 1; |
ohtsuka | 4:af2153bce185 | 109 | |
nyamfg | 0:3fd57444bc65 | 110 | return result; |
nyamfg | 0:3fd57444bc65 | 111 | } |
nyamfg | 0:3fd57444bc65 | 112 | |
ohtsuka | 3:5a56dd5131bb | 113 | void LPS331_SPI::_read_multibyte(char startsubaddress, char* data, char count) |
nyamfg | 1:b7d3d6e82049 | 114 | { |
ohtsuka | 4:af2153bce185 | 115 | _cs = 0; |
ohtsuka | 4:af2153bce185 | 116 | _spi.write(startsubaddress | 0x80 | 0x40); |
nyamfg | 1:b7d3d6e82049 | 117 | |
nyamfg | 1:b7d3d6e82049 | 118 | for(int i = 0; i < count; i++) { |
ohtsuka | 4:af2153bce185 | 119 | data[i] = _spi.write(0); |
nyamfg | 1:b7d3d6e82049 | 120 | } |
ohtsuka | 4:af2153bce185 | 121 | _cs = 1; |
ohtsuka | 4:af2153bce185 | 122 | |
nyamfg | 1:b7d3d6e82049 | 123 | } |