kopia lustrzana https://github.com/SP8EBC/ParaTNC
work on bme280 drivers, the name of files was corrected
rodzic
b47a25a821
commit
9b58d3ad2a
|
@ -6,7 +6,7 @@
|
|||
C_SRCS += \
|
||||
../system/src/drivers/_dht22.c \
|
||||
../system/src/drivers/analog_anemometer.c \
|
||||
../system/src/drivers/bma150.c \
|
||||
../system/src/drivers/bme280.c \
|
||||
../system/src/drivers/dallas.c \
|
||||
../system/src/drivers/dma_helper_functions.c \
|
||||
../system/src/drivers/gpio_conf.c \
|
||||
|
@ -19,7 +19,7 @@ C_SRCS += \
|
|||
OBJS += \
|
||||
./system/src/drivers/_dht22.o \
|
||||
./system/src/drivers/analog_anemometer.o \
|
||||
./system/src/drivers/bma150.o \
|
||||
./system/src/drivers/bme280.o \
|
||||
./system/src/drivers/dallas.o \
|
||||
./system/src/drivers/dma_helper_functions.o \
|
||||
./system/src/drivers/gpio_conf.o \
|
||||
|
@ -32,7 +32,7 @@ OBJS += \
|
|||
C_DEPS += \
|
||||
./system/src/drivers/_dht22.d \
|
||||
./system/src/drivers/analog_anemometer.d \
|
||||
./system/src/drivers/bma150.d \
|
||||
./system/src/drivers/bme280.d \
|
||||
./system/src/drivers/dallas.d \
|
||||
./system/src/drivers/dma_helper_functions.d \
|
||||
./system/src/drivers/gpio_conf.d \
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "drivers/_dht22.h"
|
||||
#include "drivers/dallas.h"
|
||||
#include "drivers/ms5611.h"
|
||||
#include "drivers/bma150.h"
|
||||
#include "drivers/bme280.h"
|
||||
#include "../umb_master/umb_master.h"
|
||||
#include "../umb_master/umb_qf_t.h"
|
||||
|
||||
|
@ -51,7 +51,7 @@ extern dht22Values rte_wx_dht, rte_wx_dht_valid;
|
|||
extern dallas_qf_t rte_wx_current_dallas_qf, rte_wx_error_dallas_qf;
|
||||
extern dallas_average_t rte_wx_dallas_average;
|
||||
extern ms5611_qf_t rte_wx_ms5611_qf;
|
||||
extern bma150_qf_t rte_wx_bma150_qf;
|
||||
extern bme280_qf_t rte_wx_bma150_qf;
|
||||
|
||||
#ifdef _UMB_MASTER
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
#endif
|
||||
|
||||
#ifdef _SENSOR_BMA150
|
||||
#include "drivers/bma150.h"
|
||||
#include <drivers/bme280.h>
|
||||
#endif
|
||||
|
||||
#ifdef _UMB_MASTER
|
||||
|
@ -378,9 +378,9 @@ int main(int argc, char* argv[]){
|
|||
#endif
|
||||
|
||||
#if (defined _METEO && defined _SENSOR_BMA150)
|
||||
bma150_reset(&rte_wx_bma150_qf);
|
||||
bma150_setup();
|
||||
bma150_read_calibration(&bma150_data_buffer, &rte_wx_bma150_qf);
|
||||
bme280_reset(&rte_wx_bma150_qf);
|
||||
bme280_setup();
|
||||
bme280_read_calibration(bme280_calibration_data, &rte_wx_bma150_qf);
|
||||
#endif
|
||||
|
||||
// preparing initial beacon which will be sent to host PC using KISS protocol via UART
|
||||
|
|
|
@ -37,7 +37,7 @@ dht22Values rte_wx_dht, rte_wx_dht_valid; // quality factor inside this structu
|
|||
dallas_qf_t rte_wx_current_dallas_qf, rte_wx_error_dallas_qf = DALLAS_QF_UNKNOWN;
|
||||
dallas_average_t rte_wx_dallas_average;
|
||||
ms5611_qf_t rte_wx_ms5611_qf;
|
||||
bma150_qf_t rte_wx_bma150_qf;
|
||||
bme280_qf_t rte_wx_bma150_qf;
|
||||
|
||||
#ifdef _UMB_MASTER
|
||||
umb_frame_t rte_wx_umb;
|
||||
|
|
|
@ -54,18 +54,18 @@ void wx_get_all_measurements(void) {
|
|||
|
||||
#if (defined _METEO && defined _SENSOR_BMA150)
|
||||
// reading raw values
|
||||
return_value = bma150_read_raw_data(bma150_data_buffer, &rte_wx_bma150_qf);
|
||||
return_value = bme280_read_raw_data(bme280_data_buffer, &rte_wx_bma150_qf);
|
||||
|
||||
if (return_value == BMA150_OK) {
|
||||
|
||||
// converting raw values to humidity
|
||||
bma150_get_humidity(&rte_wx_humidity, bma150_data_buffer);
|
||||
if (return_value == BME280_OK) {
|
||||
|
||||
// converting raw values to temperature
|
||||
bma150_get_temperature(&rte_wx_temperature_ms_valid, bma150_data_buffer);
|
||||
bme280_get_temperature(&rte_wx_temperature_ms_valid, bme280_get_adc_t());
|
||||
|
||||
// converting raw values to pressure
|
||||
bma150_get_pressure(&rte_wx_pressure, bma150_data_buffer);
|
||||
bme280_get_pressure(&rte_wx_pressure, bme280_get_adc_p());
|
||||
|
||||
// converting raw values to humidity
|
||||
bme280_get_humidity(&rte_wx_humidity, bme280_get_adc_h());
|
||||
|
||||
{
|
||||
// add the current pressure into buffer
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
/*
|
||||
* bma150.h
|
||||
*
|
||||
* Created on: 21.06.2020
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#ifndef INCLUDE_DRIVERS_BMA150_H_
|
||||
#define INCLUDE_DRIVERS_BMA150_H_
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
#define BMA150_OK 0
|
||||
#define BMA150_SENSOR_NOT_RESPONDING -1
|
||||
#define BMA150_SENSOR_NOT_AVALIABLE -2
|
||||
|
||||
#define BMA150_LN_CALIBRATION 41
|
||||
#define BMA150_LN_RAW_DATA 8
|
||||
|
||||
typedef enum bma150_qf {
|
||||
BMA150_QF_FULL,
|
||||
BMA150_QF_NOT_AVAILABLE
|
||||
}bma150_qf_t;
|
||||
|
||||
extern uint8_t bma150_data_buffer[BMA150_LN_CALIBRATION + 1];
|
||||
extern uint8_t bma150_calibration_data[BMA150_LN_RAW_DATA + 1];
|
||||
|
||||
int32_t bma150_reset(bma150_qf_t* qf);
|
||||
int32_t bma150_setup(void);
|
||||
int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf);
|
||||
int32_t bma150_read_raw_data(uint8_t* raw_data, bma150_qf_t* qf);
|
||||
|
||||
int32_t bma150_get_pressure(float* out, uint8_t* raw_data);
|
||||
int32_t bma150_get_temperature(float* out, uint8_t* raw_data);
|
||||
int32_t bma150_get_humidity(int8_t* out, uint8_t* raw_data);
|
||||
|
||||
|
||||
#endif /* INCLUDE_DRIVERS_BMA150_H_ */
|
|
@ -0,0 +1,149 @@
|
|||
/*
|
||||
* bma150.h
|
||||
*
|
||||
* Created on: 21.06.2020
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#ifndef INCLUDE_DRIVERS_BME280_H_
|
||||
#define INCLUDE_DRIVERS_BME280_H_
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
#define BME280_OK 0
|
||||
#define BME280_SENSOR_NOT_RESPONDING -1
|
||||
#define BME280_SENSOR_NOT_AVALIABLE -2
|
||||
|
||||
#define BME280_LN_CALIBRATION 41
|
||||
#define BME280_LN_RAW_DATA 8
|
||||
|
||||
typedef enum bme280_qf {
|
||||
BMA150_QF_FULL,
|
||||
BMA150_QF_NOT_AVAILABLE
|
||||
}bme280_qf_t;
|
||||
|
||||
extern uint8_t bme280_data_buffer[BME280_LN_RAW_DATA + 1];
|
||||
extern uint8_t bme280_calibration_data[BME280_LN_CALIBRATION + 1];
|
||||
|
||||
int32_t bme280_reset(bme280_qf_t* qf);
|
||||
int32_t bme280_setup(void);
|
||||
int32_t bme280_read_calibration(uint8_t* calibration, bme280_qf_t* qf);
|
||||
int32_t bme280_read_raw_data(uint8_t* raw_data, bme280_qf_t* qf);
|
||||
|
||||
int32_t bme280_get_pressure(float* out, uint32_t raw_data);
|
||||
int32_t bme280_get_temperature(float* out, uint32_t raw_data);
|
||||
int32_t bme280_get_humidity(int8_t* out, uint16_t raw_data);
|
||||
|
||||
//#define BME280_CONCAT_BYTES(msb, lsb) (((uint16_t)msb << 8) | (uint16_t)lsb)
|
||||
|
||||
inline uint32_t bme280_get_adc_t(void) {
|
||||
return (bme280_data_buffer[3] << 12) | (bme280_data_buffer[4] << 4) | (bme280_data_buffer[5] >> 4);
|
||||
}
|
||||
|
||||
inline uint32_t bme280_get_adc_p(void) {
|
||||
return (bme280_data_buffer[0] << 12) | (bme280_data_buffer[1] << 4) | (bme280_data_buffer[2] >> 4);
|
||||
|
||||
}
|
||||
|
||||
inline uint16_t bme280_get_adc_h(void) {
|
||||
return (bme280_data_buffer[6] << 8) | (bme280_data_buffer[7] );
|
||||
}
|
||||
|
||||
|
||||
inline uint16_t bme280_get_dig_T1(void) {
|
||||
return ((uint16_t)bme280_calibration_data[0] | (uint16_t)bme280_calibration_data[1] << 8);
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_T2(void) {
|
||||
return (uint16_t)bme280_calibration_data[2] | (uint16_t)bme280_calibration_data[3] << 8;
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_T3(void) {
|
||||
return (uint16_t)bme280_calibration_data[4] | (uint16_t)bme280_calibration_data[5] << 8;
|
||||
}
|
||||
|
||||
inline uint16_t bme280_get_dig_P1(void) {
|
||||
return ((uint16_t)bme280_calibration_data[6] | (uint16_t)bme280_calibration_data[7] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P2(void) {
|
||||
return ((uint16_t)bme280_calibration_data[8] | (uint16_t)bme280_calibration_data[9] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P3(void) {
|
||||
return ((uint16_t)bme280_calibration_data[10] | (uint16_t)bme280_calibration_data[11] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P4(void) {
|
||||
return ((uint16_t)bme280_calibration_data[12] | (uint16_t)bme280_calibration_data[13] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P5(void) {
|
||||
return ((uint16_t)bme280_calibration_data[14] | (uint16_t)bme280_calibration_data[15] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P6(void) {
|
||||
return ((uint16_t)bme280_calibration_data[16] | (uint16_t)bme280_calibration_data[17] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P7(void) {
|
||||
return ((uint16_t)bme280_calibration_data[18] | (uint16_t)bme280_calibration_data[19] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P8(void) {
|
||||
return ((uint16_t)bme280_calibration_data[20] | (uint16_t)bme280_calibration_data[21] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_P9(void) {
|
||||
return ((uint16_t)bme280_calibration_data[22] | (uint16_t)bme280_calibration_data[23] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline uint8_t bme280_get_dig_H1(void) {
|
||||
return bme280_calibration_data[25];
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_H2(void) { //
|
||||
return ((uint16_t)bme280_calibration_data[26] | (uint16_t)bme280_calibration_data[27] << 8);
|
||||
|
||||
}
|
||||
|
||||
inline uint8_t bme280_get_dig_H3(void) {
|
||||
return bme280_calibration_data[28];
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_H4(void) {
|
||||
int16_t dig_h4_lsb;
|
||||
int16_t dig_h4_msb;
|
||||
dig_h4_msb = (int16_t)(int8_t)bme280_calibration_data[29] * 16;
|
||||
dig_h4_lsb = (int16_t)(bme280_calibration_data[30] & 0x0F);
|
||||
return (dig_h4_msb | dig_h4_lsb);
|
||||
|
||||
}
|
||||
|
||||
inline int16_t bme280_get_dig_H5(void) {
|
||||
int16_t dig_h5_lsb;
|
||||
int16_t dig_h5_msb;
|
||||
dig_h5_msb = (int16_t)(int8_t)bme280_calibration_data[31] * 16;
|
||||
dig_h5_lsb = (int16_t)(bme280_calibration_data[30] >> 4);
|
||||
return (dig_h5_msb | dig_h5_lsb);
|
||||
|
||||
}
|
||||
|
||||
inline int8_t bme280_get_dig_H6(void) {
|
||||
return bme280_calibration_data[32];
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* INCLUDE_DRIVERS_BME280_H_ */
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#include "../drivers/bma150.h"
|
||||
#include <drivers/bme280.h>
|
||||
#include "../drivers/i2c.h"
|
||||
|
||||
#include <string.h>
|
||||
|
@ -38,17 +38,19 @@
|
|||
#define CALIB26_ADDR 0xE1
|
||||
#define CALIB26_READ_LN 0x10
|
||||
|
||||
uint8_t bma150_sensor_avaliable = 0;
|
||||
uint8_t bme280_sensor_avaliable = 0;
|
||||
|
||||
uint8_t bma150_data_buffer[BMA150_LN_CALIBRATION + 1];
|
||||
uint8_t bma150_calibration_data[BMA150_LN_RAW_DATA + 1];
|
||||
uint8_t bme280_data_buffer[BME280_LN_RAW_DATA + 1];
|
||||
uint8_t bme280_calibration_data[BME280_LN_CALIBRATION + 1];
|
||||
|
||||
int32_t t_fine = 0;
|
||||
|
||||
/**
|
||||
* This function resets the BMA150 sensor to initial state. After it is called
|
||||
* the sensor must be reconfigured once again.
|
||||
*/
|
||||
int32_t bma150_reset(bma150_qf_t* qf) {
|
||||
int32_t out = BMA150_OK;
|
||||
int32_t bme280_reset(bme280_qf_t* qf) {
|
||||
int32_t out = BME280_OK;
|
||||
|
||||
// i2c transmit buffer
|
||||
uint8_t tx_buf[] = {RESET_ADDR, RESET_MAGIC_WORD, 0};
|
||||
|
@ -62,7 +64,7 @@ int32_t bma150_reset(bma150_qf_t* qf) {
|
|||
// If reset was successfull enable a driver
|
||||
if (i2c_state == I2C_IDLE) {
|
||||
// Enable sensor comms
|
||||
bma150_sensor_avaliable = 1;
|
||||
bme280_sensor_avaliable = 1;
|
||||
|
||||
// wait for sensor reset
|
||||
delay_fixed(50);
|
||||
|
@ -74,22 +76,22 @@ int32_t bma150_reset(bma150_qf_t* qf) {
|
|||
|
||||
// Return with keeping 'ms5611_sensor_abaliable' set to zero which will
|
||||
// disable comms
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
int32_t bma150_setup(void) {
|
||||
int32_t out = BMA150_OK;
|
||||
int32_t bme280_setup(void) {
|
||||
int32_t out = BME280_OK;
|
||||
|
||||
// local variables to represent the data wrote to configuration registers
|
||||
uint8_t ctrl_meas = 0;
|
||||
uint8_t ctrl_hum = 0;
|
||||
uint8_t config = 0;
|
||||
|
||||
if (bma150_sensor_avaliable == 0) {
|
||||
return BMA150_SENSOR_NOT_AVALIABLE;
|
||||
if (bme280_sensor_avaliable == 0) {
|
||||
return BME280_SENSOR_NOT_AVALIABLE;
|
||||
}
|
||||
|
||||
// setting humidity measurement configutation
|
||||
|
@ -115,17 +117,17 @@ int32_t bma150_setup(void) {
|
|||
;
|
||||
}
|
||||
else {
|
||||
out = BMA150_SENSOR_NOT_RESPONDING;
|
||||
out = BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf) {
|
||||
int32_t out = BMA150_OK;
|
||||
int32_t bme280_read_calibration(uint8_t* calibration, bme280_qf_t* qf) {
|
||||
int32_t out = BME280_OK;
|
||||
|
||||
if (bma150_sensor_avaliable == 0) {
|
||||
return BMA150_SENSOR_NOT_AVALIABLE;
|
||||
if (bme280_sensor_avaliable == 0) {
|
||||
return BME280_SENSOR_NOT_AVALIABLE;
|
||||
}
|
||||
|
||||
// transmit buffer
|
||||
|
@ -144,11 +146,11 @@ int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf) {
|
|||
else {
|
||||
*qf = BMA150_QF_NOT_AVAILABLE;
|
||||
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
// clearing receive buffer
|
||||
memset(calibration, 0x00, BMA150_LN_CALIBRATION);
|
||||
memset(calibration, 0x00, BME280_LN_CALIBRATION);
|
||||
|
||||
// reading first segment of calibration data
|
||||
i2c_receive_data(RX_ADDR, CALIB00_READ_LN);
|
||||
|
@ -163,7 +165,7 @@ int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf) {
|
|||
else {
|
||||
*qf = BMA150_QF_NOT_AVAILABLE;
|
||||
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
// copying read data
|
||||
|
@ -185,7 +187,7 @@ int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf) {
|
|||
else {
|
||||
*qf = BMA150_QF_NOT_AVAILABLE;
|
||||
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
// reading second segment of calibration data
|
||||
|
@ -201,7 +203,7 @@ int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf) {
|
|||
else {
|
||||
*qf = BMA150_QF_NOT_AVAILABLE;
|
||||
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
// copying read data
|
||||
|
@ -210,11 +212,11 @@ int32_t bma150_read_calibration(uint8_t* calibration, bma150_qf_t* qf) {
|
|||
return out;
|
||||
}
|
||||
|
||||
int32_t bma150_read_raw_data(uint8_t* raw_data, bma150_qf_t* qf) {
|
||||
int32_t out = BMA150_OK;
|
||||
int32_t bme280_read_raw_data(uint8_t* raw_data, bme280_qf_t* qf) {
|
||||
int32_t out = BME280_OK;
|
||||
|
||||
if (bma150_sensor_avaliable == 0) {
|
||||
return BMA150_SENSOR_NOT_AVALIABLE;
|
||||
if (bme280_sensor_avaliable == 0) {
|
||||
return BME280_SENSOR_NOT_AVALIABLE;
|
||||
}
|
||||
|
||||
// transmit buffer
|
||||
|
@ -233,14 +235,14 @@ int32_t bma150_read_raw_data(uint8_t* raw_data, bma150_qf_t* qf) {
|
|||
else {
|
||||
*qf = BMA150_QF_NOT_AVAILABLE;
|
||||
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
// clearing receive buffer
|
||||
memset(raw_data, 0x00, BMA150_LN_RAW_DATA);
|
||||
memset(raw_data, 0x00, BME280_LN_RAW_DATA);
|
||||
|
||||
// reading first segment of calibration data
|
||||
i2c_receive_data(RX_ADDR, VALUES_LN);
|
||||
i2c_receive_data(RX_ADDR, BME280_LN_RAW_DATA);
|
||||
|
||||
// Wait until receiving will finish or fail (due to timeout or any other error)
|
||||
while (i2c_state != I2C_IDLE && i2c_state != I2C_ERROR);
|
||||
|
@ -252,29 +254,87 @@ int32_t bma150_read_raw_data(uint8_t* raw_data, bma150_qf_t* qf) {
|
|||
else {
|
||||
*qf = BMA150_QF_NOT_AVAILABLE;
|
||||
|
||||
return BMA150_SENSOR_NOT_RESPONDING;
|
||||
return BME280_SENSOR_NOT_RESPONDING;
|
||||
}
|
||||
|
||||
// copying read data
|
||||
memcpy(raw_data, (uint8_t*)i2c_rx_data, VALUES_LN);
|
||||
memcpy(raw_data, (uint8_t*)i2c_rx_data, BME280_LN_RAW_DATA);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
int32_t bma150_get_pressure(float* out, uint8_t* raw_data) {
|
||||
int32_t ret = BMA150_OK;
|
||||
int32_t bme280_get_pressure(float* out, uint32_t raw_data) {
|
||||
int32_t ret = BME280_OK;
|
||||
|
||||
int32_t var1, var2;
|
||||
uint32_t p;
|
||||
|
||||
uint32_t adc_P = raw_data;
|
||||
|
||||
var1 = (((int32_t)t_fine)>>1) - (int32_t)64000;
|
||||
var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((int32_t)bme280_get_dig_P6());
|
||||
var2 = var2 + ((var1*((int32_t)bme280_get_dig_P5()))<<1);
|
||||
var2 = (var2>>2)+(((int32_t)bme280_get_dig_P4())<<16);
|
||||
var1 = (((bme280_get_dig_P3() * (((var1>>2) * (var1>>2)) >> 13 )) >> 3) + ((((int32_t)bme280_get_dig_P2()) * var1)>>1))>>18;
|
||||
var1 =((((32768+var1))*((int32_t)bme280_get_dig_P1()))>>15);
|
||||
if (var1 == 0)
|
||||
{
|
||||
return 0; // avoid exception caused by division by zero
|
||||
}
|
||||
p = (((uint32_t)(((int32_t)1048576)-adc_P)-(var2>>12)))*3125;
|
||||
if (p < 0x80000000)
|
||||
{
|
||||
p = (p << 1) / ((uint32_t)var1);
|
||||
}
|
||||
else
|
||||
{
|
||||
p = (p / (uint32_t)var1) * 2;
|
||||
}
|
||||
var1 = (((int32_t)bme280_get_dig_P9()) * ((int32_t)(((p>>3) * (p>>3))>>13)))>>12;
|
||||
var2 = (((int32_t)(p>>2)) * ((int32_t)bme280_get_dig_P8()))>>13;
|
||||
p = (uint32_t)((int32_t)p + ((var1 + var2 + bme280_get_dig_P7()) >> 4));
|
||||
|
||||
*out = p / 100.0f;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int32_t bma150_get_temperature(float* out, uint8_t* raw_data) {
|
||||
int32_t ret = BMA150_OK;
|
||||
int32_t bme280_get_temperature(float* out, uint32_t raw_data) {
|
||||
int32_t ret = BME280_OK;
|
||||
|
||||
uint32_t adc_T = raw_data;
|
||||
|
||||
int32_t var1, var2, T;
|
||||
var1 = (((( adc_T >> 3 ) - ((int32_t)bme280_get_dig_T1() << 1))) * ((int32_t)bme280_get_dig_T2())) >> 11;
|
||||
var2 = (((((adc_T >> 4 ) - ((int32_t)bme280_get_dig_T1())) * ((adc_T>>4) - ((int32_t)bme280_get_dig_T1()))) >> 12) * ((int32_t)bme280_get_dig_T3())) >> 14;
|
||||
|
||||
t_fine = var1 + var2;
|
||||
T = (t_fine * 5 + 128) >> 8;
|
||||
|
||||
*out = (T / 100.0f);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int32_t bma150_get_humidity(int8_t* out, uint8_t* raw_data) {
|
||||
int32_t ret = BMA150_OK;
|
||||
int32_t bme280_get_humidity(int8_t* out, uint16_t raw_data) {
|
||||
int32_t ret = BME280_OK;
|
||||
|
||||
int32_t v_x1_u32r;
|
||||
uint32_t val = 0;
|
||||
|
||||
int32_t adc_H = raw_data;
|
||||
|
||||
v_x1_u32r = (t_fine - ((int32_t)76800));
|
||||
v_x1_u32r = (((((adc_H << 14) - (((int32_t)bme280_get_dig_H4()) << 20) - (((int32_t)bme280_get_dig_H5()) * v_x1_u32r)) +
|
||||
((int32_t)16384)) >> 15) * (((((((v_x1_u32r * ((int32_t)bme280_get_dig_H6())) >> 10) * (((v_x1_u32r *
|
||||
((int32_t)bme280_get_dig_H3())) >> 11) + ((int32_t)32768))) >> 10) + ((int32_t)2097152)) *
|
||||
((int32_t)bme280_get_dig_H2()) + 8192) >> 14));
|
||||
v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((int32_t)bme280_get_dig_H1())) >> 4));
|
||||
v_x1_u32r = (v_x1_u32r < 0 ? 0 : v_x1_u32r);
|
||||
v_x1_u32r = (v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r);
|
||||
val = (uint32_t)(v_x1_u32r>>12);
|
||||
|
||||
*out = (val / 1024);
|
||||
|
||||
return ret;
|
||||
}
|
Ładowanie…
Reference in New Issue