SCP1000 Library

Dependents:   SCP1000Example 0sample_SCP1000_USB SCP1000_Fastsensing

Committer:
yamaguch
Date:
Fri Oct 28 08:12:47 2011 +0000
Revision:
8:654e88a4baf2
Parent:
7:41606315d260
Child:
9:422f7395f25e
9.01

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamaguch 5:62872ee396a8 1 #ifndef SCP1000_H
yamaguch 5:62872ee396a8 2 #define SCP1000_H
yamaguch 5:62872ee396a8 3
yamaguch 5:62872ee396a8 4 #include "mbed.h"
yamaguch 5:62872ee396a8 5
yamaguch 5:62872ee396a8 6 /**
yamaguch 5:62872ee396a8 7 * SCP1000 pressure/temperature sensor
yamaguch 5:62872ee396a8 8 */
yamaguch 5:62872ee396a8 9
yamaguch 5:62872ee396a8 10 class SCP1000 {
yamaguch 5:62872ee396a8 11 public:
yamaguch 8:654e88a4baf2 12 /***/
yamaguch 5:62872ee396a8 13 enum OperationMode {
yamaguch 5:62872ee396a8 14 CANCEL = 0x00,
yamaguch 5:62872ee396a8 15 HIGH_SPEED_MODE = 0x09,
yamaguch 5:62872ee396a8 16 HIGH_RESOLUTION_MODE = 0x0A,
yamaguch 5:62872ee396a8 17 ULTRA_LOW_POWER_MODE = 0x0B,
yamaguch 5:62872ee396a8 18 LOW_POWER = 0x0C,
yamaguch 5:62872ee396a8 19 SELF_TEST = 0x0F,
yamaguch 5:62872ee396a8 20 };
yamaguch 8:654e88a4baf2 21
yamaguch 5:62872ee396a8 22 /**
yamaguch 5:62872ee396a8 23 * creates an SCP1000 interface with specified pins
yamaguch 5:62872ee396a8 24 *
yamaguch 5:62872ee396a8 25 * @param PinName mosi SPI MOSI pin
yamaguch 5:62872ee396a8 26 * @param PinName miso SPI MISO pin
yamaguch 5:62872ee396a8 27 * @param PinName sclk SPI SCLK pin
yamaguch 5:62872ee396a8 28 * @param PinName cs SPI CS pin
yamaguch 5:62872ee396a8 29 * @param OperationMode mode Initial operation mode
yamaguch 5:62872ee396a8 30 */
yamaguch 5:62872ee396a8 31 SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs, OperationMode mode = HIGH_RESOLUTION_MODE);
yamaguch 5:62872ee396a8 32
yamaguch 5:62872ee396a8 33 ~SCP1000() {};
yamaguch 5:62872ee396a8 34
yamaguch 5:62872ee396a8 35 /**
yamaguch 6:d9489d50669d 36 * reads the revision number
yamaguch 5:62872ee396a8 37 *
yamaguch 5:62872ee396a8 38 * @returns revision number
yamaguch 5:62872ee396a8 39 */
yamaguch 5:62872ee396a8 40 int revision();
yamaguch 5:62872ee396a8 41
yamaguch 5:62872ee396a8 42 /**
yamaguch 5:62872ee396a8 43 * checks if data is ready
yamaguch 5:62872ee396a8 44 *
yamaguch 5:62872ee396a8 45 * @returns true if data is ready, false otherwise
yamaguch 5:62872ee396a8 46 */
yamaguch 5:62872ee396a8 47 bool isReady();
yamaguch 5:62872ee396a8 48
yamaguch 5:62872ee396a8 49 /**
yamaguch 5:62872ee396a8 50 * performs software reset
yamaguch 5:62872ee396a8 51 */
yamaguch 5:62872ee396a8 52 void reset();
yamaguch 5:62872ee396a8 53
yamaguch 5:62872ee396a8 54 /**
yamaguch 5:62872ee396a8 55 * sets the operation mode
yamaguch 5:62872ee396a8 56 */
yamaguch 5:62872ee396a8 57 void setOperationMode(OperationMode mode);
yamaguch 5:62872ee396a8 58
yamaguch 5:62872ee396a8 59 /**
yamaguch 5:62872ee396a8 60 * performs self test
yamaguch 5:62872ee396a8 61 *
yamaguch 5:62872ee396a8 62 * @returns the result of the test (true if succeeded, false otherwise)
yamaguch 5:62872ee396a8 63 */
yamaguch 5:62872ee396a8 64 bool performSelfTest();
yamaguch 5:62872ee396a8 65
yamaguch 5:62872ee396a8 66 /**
yamaguch 5:62872ee396a8 67 * reads the current pressure
yamaguch 5:62872ee396a8 68 *
yamaguch 6:d9489d50669d 69 * @param waitForDataReady if true, it will wait until data becomes ready
yamaguch 5:62872ee396a8 70 *
yamaguch 5:62872ee396a8 71 * @returns pressure in hectopascal (hPa)
yamaguch 5:62872ee396a8 72 */
yamaguch 7:41606315d260 73 float readPressure(bool waitForDataReady = true);
yamaguch 5:62872ee396a8 74
yamaguch 5:62872ee396a8 75 /**
yamaguch 5:62872ee396a8 76 * reads the current temperature
yamaguch 5:62872ee396a8 77 *
yamaguch 6:d9489d50669d 78 * @param waitForDataReady if true, it will wait until data becomes ready
yamaguch 5:62872ee396a8 79 *
yamaguch 5:62872ee396a8 80 * @returns temperature in Celsius
yamaguch 5:62872ee396a8 81 */
yamaguch 7:41606315d260 82 float readTemperature(bool waitForDataReady = true);
yamaguch 5:62872ee396a8 83
yamaguch 5:62872ee396a8 84 private:
yamaguch 5:62872ee396a8 85 enum RegisterName {
yamaguch 5:62872ee396a8 86 REVID = 0x00, // ASIC revision number
yamaguch 5:62872ee396a8 87 OPERATION = 0x03, // Operation register
yamaguch 5:62872ee396a8 88 OPSTATUS = 0x04, // Operation status
yamaguch 5:62872ee396a8 89 RSTR = 0x06, // ASIC software reset
yamaguch 5:62872ee396a8 90 STATUS = 0x07, // ASIC top-level status
yamaguch 5:62872ee396a8 91 DATARD8 = 0x1F, // Pressure output data (MSB)
yamaguch 5:62872ee396a8 92 DATARD16 = 0x20, // Pressure output data (LSB, 16 bits)
yamaguch 5:62872ee396a8 93 TEMPOUT = 0x21, // Temperature output data (16 bits)
yamaguch 5:62872ee396a8 94 };
yamaguch 5:62872ee396a8 95
yamaguch 5:62872ee396a8 96 enum Command {
yamaguch 5:62872ee396a8 97 READ = 0x00, // SCP1000 READ command
yamaguch 5:62872ee396a8 98 WRITE = 0x02, // SCP1000 WRITE command
yamaguch 5:62872ee396a8 99 };
yamaguch 5:62872ee396a8 100
yamaguch 5:62872ee396a8 101 SPI spi;
yamaguch 5:62872ee396a8 102 DigitalOut selectPin;
yamaguch 5:62872ee396a8 103
yamaguch 5:62872ee396a8 104 int readRegister(RegisterName registerName, bool twoBytes = 0);
yamaguch 5:62872ee396a8 105 void writeRegister(RegisterName registerName, char value);
yamaguch 5:62872ee396a8 106 };
yamaguch 5:62872ee396a8 107
yamaguch 5:62872ee396a8 108 #endif