Updated data handling

This commit is contained in:
dario 2024-05-16 20:41:22 +02:00
parent 5519e3664a
commit d013fbe62b
2 changed files with 35 additions and 14 deletions

View File

@ -71,7 +71,8 @@ namespace sta
* @brief All possible commands to send to the sensor * @brief All possible commands to send to the sensor
* *
*/ */
enum Operations { enum Operations
{
RESET = 0x1E, RESET = 0x1E,
READ_PROM = 0xA0, READ_PROM = 0xA0,
D1_CONVERSION = 0x40, D1_CONVERSION = 0x40,
@ -79,6 +80,12 @@ namespace sta
ADC_RESULT = 0x00 ADC_RESULT = 0x00
}; };
enum DataType
{
PRESSURE,
TEMPERATURE
};
/** /**
* @brief SPI driver for the MS56xx pressure sensor series. * @brief SPI driver for the MS56xx pressure sensor series.
* *

View File

@ -42,6 +42,16 @@ namespace sta
return true; return true;
} }
void MS56xx::requestData()
{
}
bool MS56xx::hasData()
{
}
void MS56xx::setOsr(OsrLevel osr) void MS56xx::setOsr(OsrLevel osr)
{ {
osr_ = osr; osr_ = osr;
@ -53,28 +63,32 @@ namespace sta
delay_(MS56xx::RESET_DELAY); delay_(MS56xx::RESET_DELAY);
} }
void MS56xx::requestData(DataType type, bool blocking = false)
{
Operations op = type == DataType::PRESSURE ? D1_CONVERSION : D2_CONVERSION;
// Request the ADC to read new data.
busCommand(op + 2*this->osr_);
if (blocking)
{
delay_(osrDelay());
}
}
float MS56xx::getPressure(Unit unit /* = Unit::hPa */) float MS56xx::getPressure(Unit unit /* = Unit::hPa */)
{ {
// Request the ADC to read temperature values. // Request the ADC to read pressure values.
busCommand(MS56xx::Operations::D1_CONVERSION + 2*this->osr_); requestData(PRESSURE, true);
// 8.22 ms conversion according to the datasheet.
delay_(osrDelay());
uint8_t buffer[3] = { 0x00, 0x00, 0x00 }; uint8_t buffer[3] = { 0x00, 0x00, 0x00 };
busRead(MS56xx::Operations::ADC_RESULT, buffer, 3); busRead(MS56xx::Operations::ADC_RESULT, buffer, 3);
// Difference between actual and reference temperature.
uint32_t D1 = buffer[0] << 16 | buffer[1] << 8 | buffer[2]; uint32_t D1 = buffer[0] << 16 | buffer[1] << 8 | buffer[2];
// Request the ADC to read pressure values. // Request the ADC to read temperature values.
busCommand(MS56xx::Operations::D2_CONVERSION + 2*this->osr_); requestData(PRESSURE, true);
// 8.22 ms conversion according to the datasheet.
delay_(osrDelay());
busRead(MS56xx::Operations::ADC_RESULT, buffer, 3); busRead(MS56xx::Operations::ADC_RESULT, buffer, 3);
uint32_t D2 = buffer[0] << 16 | buffer[1] << 8 | buffer[2]; uint32_t D2 = buffer[0] << 16 | buffer[1] << 8 | buffer[2];
float dT = D2 - C_[5]; float dT = D2 - C_[5];