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 NYA Manufacturing

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?

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