SCP1000 Library

Dependents:   SCP1000Example 0sample_SCP1000_USB SCP1000_Fastsensing

Committer:
yamaguch
Date:
Fri Oct 28 09:41:26 2011 +0000
Revision:
11:8a5dc32887d2
Parent:
10:11a40ecf2361
Child:
12:b08cf651abe2
0.93

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 10:11a40ecf2361 1 /*
yamaguch 10:11a40ecf2361 2 Copyright (c) 2011, Senio Networks, Inc.
yamaguch 10:11a40ecf2361 3
yamaguch 10:11a40ecf2361 4 Permission is hereby granted, free of charge, to any person obtaining a copy
yamaguch 10:11a40ecf2361 5 of this software and associated documentation files (the "Software"), to deal
yamaguch 10:11a40ecf2361 6 in the Software without restriction, including without limitation the rights
yamaguch 10:11a40ecf2361 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
yamaguch 10:11a40ecf2361 8 copies of the Software, and to permit persons to whom the Software is
yamaguch 10:11a40ecf2361 9 furnished to do so, subject to the following conditions:
yamaguch 10:11a40ecf2361 10
yamaguch 10:11a40ecf2361 11 The above copyright notice and this permission notice shall be included in
yamaguch 10:11a40ecf2361 12 all copies or substantial portions of the Software.
yamaguch 10:11a40ecf2361 13
yamaguch 10:11a40ecf2361 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
yamaguch 10:11a40ecf2361 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
yamaguch 10:11a40ecf2361 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
yamaguch 10:11a40ecf2361 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
yamaguch 10:11a40ecf2361 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
yamaguch 10:11a40ecf2361 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
yamaguch 10:11a40ecf2361 20 THE SOFTWARE.
yamaguch 10:11a40ecf2361 21 */
yamaguch 10:11a40ecf2361 22
yamaguch 5:62872ee396a8 23 #ifndef SCP1000_H
yamaguch 5:62872ee396a8 24 #define SCP1000_H
yamaguch 5:62872ee396a8 25
yamaguch 5:62872ee396a8 26 #include "mbed.h"
yamaguch 5:62872ee396a8 27
yamaguch 5:62872ee396a8 28 /**
yamaguch 5:62872ee396a8 29 * SCP1000 pressure/temperature sensor
yamaguch 5:62872ee396a8 30 */
yamaguch 5:62872ee396a8 31 class SCP1000 {
yamaguch 5:62872ee396a8 32 public:
yamaguch 11:8a5dc32887d2 33 enum OperationMode;
yamaguch 11:8a5dc32887d2 34
yamaguch 11:8a5dc32887d2 35 /**
yamaguch 11:8a5dc32887d2 36 * creates an SCP1000 interface with specified pins
yamaguch 11:8a5dc32887d2 37 *
yamaguch 11:8a5dc32887d2 38 * @param PinName mosi SPI MOSI pin
yamaguch 11:8a5dc32887d2 39 * @param PinName miso SPI MISO pin
yamaguch 11:8a5dc32887d2 40 * @param PinName sclk SPI SCLK pin
yamaguch 11:8a5dc32887d2 41 * @param PinName cs SPI CS pin
yamaguch 11:8a5dc32887d2 42 * @param OperationMode mode Initial operation mode
yamaguch 11:8a5dc32887d2 43 */
yamaguch 11:8a5dc32887d2 44 SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs, OperationMode mode = HIGH_RESOLUTION_MODE);
yamaguch 11:8a5dc32887d2 45
yamaguch 8:654e88a4baf2 46 /***/
yamaguch 5:62872ee396a8 47 enum OperationMode {
yamaguch 5:62872ee396a8 48 CANCEL = 0x00,
yamaguch 5:62872ee396a8 49 HIGH_SPEED_MODE = 0x09,
yamaguch 5:62872ee396a8 50 HIGH_RESOLUTION_MODE = 0x0A,
yamaguch 5:62872ee396a8 51 ULTRA_LOW_POWER_MODE = 0x0B,
yamaguch 5:62872ee396a8 52 LOW_POWER = 0x0C,
yamaguch 5:62872ee396a8 53 SELF_TEST = 0x0F,
yamaguch 5:62872ee396a8 54 };
yamaguch 8:654e88a4baf2 55
yamaguch 5:62872ee396a8 56 ~SCP1000() {};
yamaguch 5:62872ee396a8 57
yamaguch 5:62872ee396a8 58 /**
yamaguch 6:d9489d50669d 59 * reads the revision number
yamaguch 5:62872ee396a8 60 *
yamaguch 5:62872ee396a8 61 * @returns revision number
yamaguch 5:62872ee396a8 62 */
yamaguch 5:62872ee396a8 63 int revision();
yamaguch 5:62872ee396a8 64
yamaguch 5:62872ee396a8 65 /**
yamaguch 5:62872ee396a8 66 * checks if data is ready
yamaguch 5:62872ee396a8 67 *
yamaguch 5:62872ee396a8 68 * @returns true if data is ready, false otherwise
yamaguch 5:62872ee396a8 69 */
yamaguch 5:62872ee396a8 70 bool isReady();
yamaguch 5:62872ee396a8 71
yamaguch 5:62872ee396a8 72 /**
yamaguch 5:62872ee396a8 73 * performs software reset
yamaguch 5:62872ee396a8 74 */
yamaguch 5:62872ee396a8 75 void reset();
yamaguch 5:62872ee396a8 76
yamaguch 5:62872ee396a8 77 /**
yamaguch 5:62872ee396a8 78 * sets the operation mode
yamaguch 5:62872ee396a8 79 */
yamaguch 5:62872ee396a8 80 void setOperationMode(OperationMode mode);
yamaguch 5:62872ee396a8 81
yamaguch 5:62872ee396a8 82 /**
yamaguch 5:62872ee396a8 83 * performs self test
yamaguch 5:62872ee396a8 84 *
yamaguch 5:62872ee396a8 85 * @returns the result of the test (true if succeeded, false otherwise)
yamaguch 5:62872ee396a8 86 */
yamaguch 5:62872ee396a8 87 bool performSelfTest();
yamaguch 5:62872ee396a8 88
yamaguch 5:62872ee396a8 89 /**
yamaguch 5:62872ee396a8 90 * reads the current pressure
yamaguch 5:62872ee396a8 91 *
yamaguch 6:d9489d50669d 92 * @param waitForDataReady if true, it will wait until data becomes ready
yamaguch 5:62872ee396a8 93 *
yamaguch 5:62872ee396a8 94 * @returns pressure in hectopascal (hPa)
yamaguch 5:62872ee396a8 95 */
yamaguch 7:41606315d260 96 float readPressure(bool waitForDataReady = true);
yamaguch 5:62872ee396a8 97
yamaguch 5:62872ee396a8 98 /**
yamaguch 5:62872ee396a8 99 * reads the current temperature
yamaguch 5:62872ee396a8 100 *
yamaguch 6:d9489d50669d 101 * @param waitForDataReady if true, it will wait until data becomes ready
yamaguch 5:62872ee396a8 102 *
yamaguch 5:62872ee396a8 103 * @returns temperature in Celsius
yamaguch 5:62872ee396a8 104 */
yamaguch 7:41606315d260 105 float readTemperature(bool waitForDataReady = true);
yamaguch 5:62872ee396a8 106
yamaguch 5:62872ee396a8 107 private:
yamaguch 5:62872ee396a8 108 enum RegisterName {
yamaguch 5:62872ee396a8 109 REVID = 0x00, // ASIC revision number
yamaguch 5:62872ee396a8 110 OPERATION = 0x03, // Operation register
yamaguch 5:62872ee396a8 111 OPSTATUS = 0x04, // Operation status
yamaguch 5:62872ee396a8 112 RSTR = 0x06, // ASIC software reset
yamaguch 5:62872ee396a8 113 STATUS = 0x07, // ASIC top-level status
yamaguch 5:62872ee396a8 114 DATARD8 = 0x1F, // Pressure output data (MSB)
yamaguch 5:62872ee396a8 115 DATARD16 = 0x20, // Pressure output data (LSB, 16 bits)
yamaguch 5:62872ee396a8 116 TEMPOUT = 0x21, // Temperature output data (16 bits)
yamaguch 5:62872ee396a8 117 };
yamaguch 5:62872ee396a8 118
yamaguch 5:62872ee396a8 119 enum Command {
yamaguch 5:62872ee396a8 120 READ = 0x00, // SCP1000 READ command
yamaguch 5:62872ee396a8 121 WRITE = 0x02, // SCP1000 WRITE command
yamaguch 5:62872ee396a8 122 };
yamaguch 5:62872ee396a8 123
yamaguch 5:62872ee396a8 124 SPI spi;
yamaguch 5:62872ee396a8 125 DigitalOut selectPin;
yamaguch 5:62872ee396a8 126
yamaguch 5:62872ee396a8 127 int readRegister(RegisterName registerName, bool twoBytes = 0);
yamaguch 5:62872ee396a8 128 void writeRegister(RegisterName registerName, char value);
yamaguch 5:62872ee396a8 129 };
yamaguch 5:62872ee396a8 130
yamaguch 5:62872ee396a8 131 #endif