SCP1000 Library
Dependents: SCP1000Example 0sample_SCP1000_USB SCP1000_Fastsensing
SCP1000.cpp
- Committer:
- yamaguch
- Date:
- 2011-02-02
- Revision:
- 0:23fab9b42ad4
- Child:
- 10:11a40ecf2361
File content as of revision 0:23fab9b42ad4:
#include "SCP1000.h" SCP1000::SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs, OperationMode mode) : spi(mosi, miso, sclk), selectPin(cs) { selectPin = 1; spi.frequency(1000000); spi.format(8, 0); // frame bits = 8, mode = 0 reset(); setOperationMode(mode); } int SCP1000::revision() { return readRegister(REVID); } bool SCP1000::isReady() { const char DRDY = 0x20; // Data Ready return readRegister(STATUS) & DRDY; } void SCP1000::setOperationMode(OperationMode mode) { writeRegister(OPERATION, CANCEL); while (readRegister(OPSTATUS)) // wait until current operation is canncelled wait(0.01); if (mode != CANCEL) writeRegister(OPERATION, mode); } void SCP1000::reset() { writeRegister(RSTR, 0x01); wait(0.15); } bool SCP1000::performSelfTest() { setOperationMode(SELF_TEST); return readRegister(DATARD8) & 1; } float SCP1000::readPressure(bool waitForReady) { if (waitForReady) while (!isReady()) wait(0.01); // Pressure value is stored in 19-bit unsigned int (unit: 0.25 Pa) long value = readRegister(DATARD8) & 0x07; value <<= 16; value |= readRegister(DATARD16, true) & 0xFFFF; return value / 400.0; } float SCP1000::readTemperature(bool waitForDataReady) { if (waitForDataReady) while (!isReady()) wait(0.01); return ((short)(readRegister(TEMPOUT, true) << 3) >> 3) / 20.0; } int SCP1000::readRegister(RegisterName registerName, bool twoBytes) { selectPin = 0; spi.write((registerName << 2) | READ); int result = spi.write(0x00); if (twoBytes) { result <<= 8; result |= spi.write(0x00); } selectPin = 1; return result; } void SCP1000::writeRegister(RegisterName registerName, char value) { selectPin = 0; spi.write((registerName << 2) | WRITE); spi.write(value); selectPin = 1; }