mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-04 22:17:01 +08:00
[modules] baro_ms5611_i2c|spi modules using ms5611 peripheral
This commit is contained in:
@@ -13,12 +13,12 @@
|
||||
<file name="baro_ms5611_i2c.h"/>
|
||||
</header>
|
||||
<init fun="baro_ms5611_init()"/>
|
||||
<periodic fun="baro_ms5611_periodic()" freq="4" delay="0"/>
|
||||
<periodic fun="baro_ms5611_d1()" freq="4" delay="1"/>
|
||||
<periodic fun="baro_ms5611_d2()" freq="4" delay="2"/>
|
||||
<periodic fun="baro_ms5611_periodic()" freq="4"/>
|
||||
<event fun="baro_ms5611_event()"/>
|
||||
<makefile target="ap">
|
||||
<file name="baro_ms5611_i2c.c"/>
|
||||
<file name="ms5611.c" dir="peripherals"/>
|
||||
<file name="ms5611_i2c.c" dir="peripherals"/>
|
||||
</makefile>
|
||||
</module>
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE module SYSTEM "module.dtd">
|
||||
|
||||
<module name="baro_ms5611_spi" dir="sensors">
|
||||
<doc>
|
||||
<description>
|
||||
Baro MS5611 (SPI)
|
||||
Measurement Specialties MS5611-01BA pressure sensor (SPI)
|
||||
</description>
|
||||
<define name="MS5611_SPI_DEV" value="spiX" description="select spi peripheral to use (default spi1)"/>
|
||||
<define name="MS5611_SLAVE_DEV" value="SPI_SLAVE0" description="SPI slave select index"/>
|
||||
<define name="SENSOR_SYNC_SEND" description="flag to enable sending BARO_MS5611 message on every new measurement"/>
|
||||
</doc>
|
||||
<header>
|
||||
<file name="baro_ms5611_spi.h"/>
|
||||
</header>
|
||||
<init fun="baro_ms5611_init()"/>
|
||||
<periodic fun="baro_ms5611_periodic()" freq="4"/>
|
||||
<event fun="baro_ms5611_event()"/>
|
||||
<makefile target="ap">
|
||||
<file name="baro_ms5611_spi.c"/>
|
||||
<file name="ms5611.c" dir="peripherals"/>
|
||||
<file name="ms5611_spi.c" dir="peripherals"/>
|
||||
</makefile>
|
||||
</module>
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Martin Mueller <martinmm@pfump.org>
|
||||
* Copyright (C) 2011-2013 The Paparazzi Team
|
||||
*
|
||||
* This file is part of paparazzi.
|
||||
*
|
||||
@@ -30,11 +30,9 @@
|
||||
#include "modules/sensors/baro_ms5611_i2c.h"
|
||||
|
||||
#include "mcu_periph/sys_time.h"
|
||||
#include "mcu_periph/i2c.h"
|
||||
#include "mcu_periph/uart.h"
|
||||
#include "messages.h"
|
||||
#include "subsystems/datalink/downlink.h"
|
||||
#include "subsystems/nav.h"
|
||||
|
||||
#ifndef DOWNLINK_DEVICE
|
||||
#define DOWNLINK_DEVICE DOWNLINK_AP_DEVICE
|
||||
@@ -49,202 +47,63 @@
|
||||
#define MS5611_SLAVE_ADDR 0xEE
|
||||
#endif
|
||||
|
||||
struct Ms5611_I2c baro_ms5611;
|
||||
|
||||
struct i2c_transaction ms5611_trans;
|
||||
uint8_t ms5611_status;
|
||||
uint16_t ms5611_c[PROM_NB];
|
||||
uint32_t ms5611_d1, ms5611_d2;
|
||||
int32_t prom_cnt;
|
||||
int64_t baroms;
|
||||
float fbaroms, ftempms;
|
||||
float baro_ms5611_alt;
|
||||
bool_t baro_ms5611_alt_valid;
|
||||
bool_t baro_ms5611_enabled;
|
||||
bool_t baro_ms5611_valid;
|
||||
|
||||
float baro_ms5611_r;
|
||||
float baro_ms5611_sigma2;
|
||||
|
||||
static int8_t baro_ms5611_crc(uint16_t* prom) {
|
||||
int32_t i, j;
|
||||
uint32_t res = 0;
|
||||
uint8_t crc = prom[7] & 0xF;
|
||||
prom[7] &= 0xFF00;
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (i & 1) res ^= ((prom[i>>1]) & 0x00FF);
|
||||
else res ^= (prom[i>>1]>>8);
|
||||
for (j = 8; j > 0; j--) {
|
||||
if (res & 0x8000) res ^= 0x1800;
|
||||
res <<= 1;
|
||||
}
|
||||
}
|
||||
prom[7] |= crc;
|
||||
if (crc == ((res >> 12) & 0xF)) return 0;
|
||||
else return -1;
|
||||
}
|
||||
|
||||
void baro_ms5611_init(void) {
|
||||
ms5611_i2c_init(&baro_ms5611, &MS5611_I2C_DEV, MS5611_SLAVE_ADDR);
|
||||
|
||||
baro_ms5611_enabled = TRUE;
|
||||
baro_ms5611_valid = FALSE;
|
||||
ms5611_status = MS5611_UNINIT;
|
||||
baro_ms5611_alt_valid = FALSE;
|
||||
|
||||
baro_ms5611_r = BARO_MS5611_R;
|
||||
baro_ms5611_sigma2 = BARO_MS5611_SIGMA2;
|
||||
prom_cnt = 0;
|
||||
}
|
||||
|
||||
void baro_ms5611_periodic( void ) {
|
||||
if (sys_time.nb_sec > 1) {
|
||||
if (ms5611_status >= MS5611_IDLE) {
|
||||
/* start D1 conversion */
|
||||
ms5611_status = MS5611_CONV_D1;
|
||||
ms5611_trans.buf[0] = MS5611_START_CONV_D1;
|
||||
i2c_transmit(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1);
|
||||
|
||||
/* call the convenience periodic that initializes the sensor and starts reading*/
|
||||
ms5611_i2c_periodic(&baro_ms5611);
|
||||
|
||||
if (baro_ms5611.initialized) {
|
||||
RunOnceEvery((4*30), DOWNLINK_SEND_MS5611_COEFF(DefaultChannel, DefaultDevice,
|
||||
&ms5611_c[0], &ms5611_c[1], &ms5611_c[2], &ms5611_c[3],
|
||||
&ms5611_c[4], &ms5611_c[5], &ms5611_c[6], &ms5611_c[7]));
|
||||
}
|
||||
else if (ms5611_status == MS5611_UNINIT) {
|
||||
/* reset sensor */
|
||||
ms5611_status = MS5611_RESET;
|
||||
ms5611_trans.buf[0] = MS5611_SOFT_RESET;
|
||||
i2c_transmit(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1);
|
||||
}
|
||||
else if (ms5611_status == MS5611_RESET_OK) {
|
||||
/* start getting prom data */
|
||||
ms5611_status = MS5611_PROM;
|
||||
ms5611_trans.buf[0] = MS5611_PROM_READ | (prom_cnt << 1);
|
||||
i2c_transceive(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1, 2);
|
||||
&baro_ms5611.data.c[0],
|
||||
&baro_ms5611.data.c[1],
|
||||
&baro_ms5611.data.c[2],
|
||||
&baro_ms5611.data.c[3],
|
||||
&baro_ms5611.data.c[4],
|
||||
&baro_ms5611.data.c[5],
|
||||
&baro_ms5611.data.c[6],
|
||||
&baro_ms5611.data.c[7]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void baro_ms5611_d1( void ) {
|
||||
if (sys_time.nb_sec > 1) {
|
||||
if (ms5611_status == MS5611_CONV_D1_OK) {
|
||||
/* read D1 adc */
|
||||
ms5611_status = MS5611_ADC_D1;
|
||||
ms5611_trans.buf[0] = MS5611_ADC_READ;
|
||||
i2c_transceive(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void baro_ms5611_d2( void ) {
|
||||
if (sys_time.nb_sec > 1) {
|
||||
if (ms5611_status == MS5611_CONV_D2_OK) {
|
||||
/* read D2 adc */
|
||||
ms5611_status = MS5611_ADC_D2;
|
||||
ms5611_trans.buf[0] = MS5611_ADC_READ;
|
||||
i2c_transceive(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void baro_ms5611_event( void ) {
|
||||
if (ms5611_trans.status == I2CTransSuccess) {
|
||||
switch (ms5611_status) {
|
||||
|
||||
case MS5611_RESET:
|
||||
ms5611_status = MS5611_RESET_OK;
|
||||
ms5611_trans.status = I2CTransDone;
|
||||
break;
|
||||
ms5611_i2c_event(&baro_ms5611);
|
||||
|
||||
case MS5611_PROM:
|
||||
/* read prom data */
|
||||
ms5611_c[prom_cnt++] = (ms5611_trans.buf[0] << 8) | ms5611_trans.buf[1];
|
||||
if (prom_cnt < PROM_NB) {
|
||||
/* get next prom data */
|
||||
ms5611_trans.buf[0] = MS5611_PROM_READ | (prom_cnt << 1);
|
||||
i2c_transceive(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1, 2);
|
||||
}
|
||||
else {
|
||||
/* done reading prom */
|
||||
ms5611_trans.status = I2CTransDone;
|
||||
/* check prom crc */
|
||||
if (baro_ms5611_crc(ms5611_c) == 0) {
|
||||
DOWNLINK_SEND_MS5611_COEFF(DefaultChannel, DefaultDevice,
|
||||
&ms5611_c[0], &ms5611_c[1], &ms5611_c[2], &ms5611_c[3],
|
||||
&ms5611_c[4], &ms5611_c[5], &ms5611_c[6], &ms5611_c[7]);
|
||||
ms5611_status = MS5611_IDLE;
|
||||
}
|
||||
else {
|
||||
/* checksum error, try again */
|
||||
baro_ms5611_init();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MS5611_CONV_D1:
|
||||
ms5611_status = MS5611_CONV_D1_OK;
|
||||
ms5611_trans.status = I2CTransDone;
|
||||
break;
|
||||
|
||||
case MS5611_ADC_D1:
|
||||
/* read D1 (pressure) */
|
||||
ms5611_d1 = (ms5611_trans.buf[0] << 16) |
|
||||
(ms5611_trans.buf[1] << 8) |
|
||||
ms5611_trans.buf[2];
|
||||
/* start D2 conversion */
|
||||
ms5611_status = MS5611_CONV_D2;
|
||||
ms5611_trans.buf[0] = MS5611_START_CONV_D2;
|
||||
i2c_transmit(&MS5611_I2C_DEV, &ms5611_trans, MS5611_SLAVE_ADDR, 1);
|
||||
break;
|
||||
|
||||
case MS5611_CONV_D2:
|
||||
ms5611_status = MS5611_CONV_D2_OK;
|
||||
ms5611_trans.status = I2CTransDone;
|
||||
break;
|
||||
|
||||
case MS5611_ADC_D2: {
|
||||
int64_t dt, tempms, off, sens, t2, off2, sens2;
|
||||
/* read D2 (temperature) */
|
||||
ms5611_d2 = (ms5611_trans.buf[0] << 16) |
|
||||
(ms5611_trans.buf[1] << 8) |
|
||||
ms5611_trans.buf[2];
|
||||
ms5611_status = MS5611_IDLE;
|
||||
ms5611_trans.status = I2CTransDone;
|
||||
|
||||
/* difference between actual and ref temperature */
|
||||
dt = ms5611_d2 - (int64_t)ms5611_c[5] * (1<<8);
|
||||
/* actual temperature */
|
||||
tempms = 2000 + ((int64_t)dt * ms5611_c[6]) / (1<<23);
|
||||
/* offset at actual temperature */
|
||||
off = ((int64_t)ms5611_c[2] * (1<<16)) + ((int64_t)ms5611_c[4] * dt) / (1<<7);
|
||||
/* sensitivity at actual temperature */
|
||||
sens = ((int64_t)ms5611_c[1] * (1<<15)) + ((int64_t)ms5611_c[3] * dt) / (1<<8);
|
||||
/* second order temperature compensation */
|
||||
if (tempms < 2000) {
|
||||
t2 = (dt*dt) / (1<<31);
|
||||
off2 = 5 * ((int64_t)(tempms-2000)*(tempms-2000)) / (1<<1);
|
||||
sens2 = 5 * ((int64_t)(tempms-2000)*(tempms-2000)) / (1<<2);
|
||||
if (tempms < -1500) {
|
||||
off2 = off2 + 7 * (int64_t)(tempms+1500)*(tempms+1500);
|
||||
sens2 = sens2 + 11 * ((int64_t)(tempms+1500)*(tempms+1500)) / (1<<1);
|
||||
}
|
||||
tempms = tempms - t2;
|
||||
off = off - off2;
|
||||
sens = sens - sens2;
|
||||
}
|
||||
/* temperature compensated pressure */
|
||||
baroms = (((int64_t)ms5611_d1 * sens) / (1<<21) - off) / (1<<15);
|
||||
|
||||
float tmp_float = baroms/101325.0; //pressure at sea level
|
||||
tmp_float = pow(tmp_float,0.190295); //eleva pressao ao expoente
|
||||
baro_ms5611_alt = 44330*(1.0-tmp_float); //altitude above MSL
|
||||
|
||||
baro_ms5611_valid = TRUE;
|
||||
if (baro_ms5611.data_available) {
|
||||
float tmp_float = baro_ms5611.data.pressure / 101325.0; //pressure at sea level
|
||||
tmp_float = pow(tmp_float, 0.190295);
|
||||
baro_ms5611_alt = 44330 * (1.0 - tmp_float); //altitude above MSL
|
||||
baro_ms5611_alt_valid = TRUE;
|
||||
|
||||
#ifdef SENSOR_SYNC_SEND
|
||||
ftempms = tempms / 100.;
|
||||
fbaroms = baroms / 100.;
|
||||
ftempms = baro_ms5611.data.temperature / 100.;
|
||||
fbaroms = baro_ms5611.data.pressure / 100.;
|
||||
DOWNLINK_SEND_BARO_MS5611(DefaultChannel, DefaultDevice,
|
||||
&ms5611_d1, &ms5611_d2, &fbaroms, &ftempms);
|
||||
&baro_ms5611.data.d1, &baro_ms5611.data.d2, &fbaroms, &ftempms);
|
||||
#endif
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
ms5611_trans.status = I2CTransDone;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,46 +2,27 @@
|
||||
#define BARO_MS56111_I2C_H
|
||||
|
||||
#include "std.h"
|
||||
#include "peripherals/ms5611_i2c.h"
|
||||
|
||||
/* we use OSR=4096 for maximum resolution */
|
||||
#define MS5611_SOFT_RESET 0x1E
|
||||
#define MS5611_PROM_READ 0xA0
|
||||
#define MS5611_START_CONV_D1 0x48
|
||||
#define MS5611_START_CONV_D2 0x58
|
||||
#define MS5611_ADC_READ 0x00
|
||||
|
||||
#define PROM_NB 8
|
||||
|
||||
#define BARO_MS5611_DT 0.05
|
||||
#define BARO_MS5611_R 20
|
||||
#define BARO_MS5611_SIGMA2 1
|
||||
extern float baro_ms5611_alt;
|
||||
extern bool_t baro_ms5611_valid;
|
||||
extern bool_t baro_ms5611_enabled;
|
||||
extern float baro_ms5611_r;
|
||||
extern float baro_ms5611_sigma2;
|
||||
extern int64_t baroms;
|
||||
|
||||
enum ms5611_stat{
|
||||
MS5611_UNINIT,
|
||||
MS5611_RESET,
|
||||
MS5611_RESET_OK,
|
||||
MS5611_PROM,
|
||||
MS5611_IDLE,
|
||||
MS5611_CONV_D1,
|
||||
MS5611_CONV_D1_OK,
|
||||
MS5611_ADC_D1,
|
||||
MS5611_CONV_D2,
|
||||
MS5611_CONV_D2_OK,
|
||||
MS5611_ADC_D2
|
||||
};
|
||||
extern float baro_ms5611_alt;
|
||||
extern bool_t baro_ms5611_alt_valid;
|
||||
extern bool_t baro_ms5611_enabled;
|
||||
|
||||
extern struct Ms5611_I2c baro_ms5611;
|
||||
|
||||
extern void baro_ms5611_init(void);
|
||||
extern void baro_ms5611_periodic(void);
|
||||
extern void baro_ms5611_d1(void);
|
||||
extern void baro_ms5611_d2(void);
|
||||
extern void baro_ms5611_event(void);
|
||||
|
||||
#define BaroMs5611Update(_b) { if (baro_ms5611_valid) { _b = baro_ms5611_alt; baro_ms5611_valid = FALSE; } }
|
||||
#define BaroMs5611UpdatePressure(_b) { if (baro_ms5611.data_available) { _b = baro_ms5611.data.pressure; baro_ms5611.data_available = FALSE; } }
|
||||
|
||||
#define BaroMs5611UpdateAlt(_b) { if (baro_ms5611.data_available) { _b = baro_ms5611_alt; baro_ms5611.data_available = FALSE; } }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Copyright (C) 2011-2013 The Paparazzi Team
|
||||
*
|
||||
* This file is part of paparazzi.
|
||||
*
|
||||
* paparazzi is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* paparazzi is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with paparazzi; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file modules/sensors/baro_ms5611_spi.c
|
||||
* Measurement Specialties (Intersema) MS5611-01BA pressure/temperature sensor interface for SPI.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include "modules/sensors/baro_ms5611_spi.h"
|
||||
|
||||
#include "mcu_periph/sys_time.h"
|
||||
#include "mcu_periph/uart.h"
|
||||
#include "messages.h"
|
||||
#include "subsystems/datalink/downlink.h"
|
||||
|
||||
#ifndef DOWNLINK_DEVICE
|
||||
#define DOWNLINK_DEVICE DOWNLINK_AP_DEVICE
|
||||
#endif
|
||||
|
||||
#ifndef MS5611_SPI_DEV
|
||||
#define MS5611_SPI_DEV spi1
|
||||
#endif
|
||||
|
||||
#ifndef MS5611_SLAVE_DEV
|
||||
#define MS5611_SLAVE_DEV SPI_SLAVE0
|
||||
#endif
|
||||
|
||||
|
||||
struct Ms5611_Spi baro_ms5611;
|
||||
|
||||
float fbaroms, ftempms;
|
||||
float baro_ms5611_alt;
|
||||
bool_t baro_ms5611_alt_valid;
|
||||
bool_t baro_ms5611_enabled;
|
||||
|
||||
float baro_ms5611_r;
|
||||
float baro_ms5611_sigma2;
|
||||
|
||||
|
||||
void baro_ms5611_init(void) {
|
||||
ms5611_spi_init(&baro_ms5611, &MS5611_SPI_DEV, MS5611_SLAVE_DEV);
|
||||
|
||||
baro_ms5611_enabled = TRUE;
|
||||
baro_ms5611_alt_valid = FALSE;
|
||||
|
||||
baro_ms5611_r = BARO_MS5611_R;
|
||||
baro_ms5611_sigma2 = BARO_MS5611_SIGMA2;
|
||||
}
|
||||
|
||||
void baro_ms5611_periodic( void ) {
|
||||
if (sys_time.nb_sec > 1) {
|
||||
|
||||
/* call the convenience periodic that initializes the sensor and starts reading*/
|
||||
ms5611_spi_periodic(&baro_ms5611);
|
||||
|
||||
if (baro_ms5611.initialized) {
|
||||
RunOnceEvery((4*30), DOWNLINK_SEND_MS5611_COEFF(DefaultChannel, DefaultDevice,
|
||||
&baro_ms5611.data.c[0],
|
||||
&baro_ms5611.data.c[1],
|
||||
&baro_ms5611.data.c[2],
|
||||
&baro_ms5611.data.c[3],
|
||||
&baro_ms5611.data.c[4],
|
||||
&baro_ms5611.data.c[5],
|
||||
&baro_ms5611.data.c[6],
|
||||
&baro_ms5611.data.c[7]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void baro_ms5611_event( void ) {
|
||||
|
||||
ms5611_spi_event(&baro_ms5611);
|
||||
|
||||
if (baro_ms5611.data_available) {
|
||||
float tmp_float = baro_ms5611.data.pressure / 101325.0; //pressure at sea level
|
||||
tmp_float = pow(tmp_float, 0.190295);
|
||||
baro_ms5611_alt = 44330 * (1.0 - tmp_float); //altitude above MSL
|
||||
baro_ms5611_alt_valid = TRUE;
|
||||
|
||||
#ifdef SENSOR_SYNC_SEND
|
||||
ftempms = baro_ms5611.data.temperature / 100.;
|
||||
fbaroms = baro_ms5611.data.pressure / 100.;
|
||||
DOWNLINK_SEND_BARO_MS5611(DefaultChannel, DefaultDevice,
|
||||
&baro_ms5611.data.d1, &baro_ms5611.data.d2, &fbaroms, &ftempms);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Martin Mueller <martinmm@pfump.org>
|
||||
*
|
||||
* This file is part of paparazzi.
|
||||
*
|
||||
* paparazzi is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* paparazzi is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with paparazzi; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file modules/sensors/baro_ms5611_spi.h
|
||||
* Measurement Specialties (Intersema) MS5611-01BA pressure/temperature sensor interface for SPI.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BARO_MS56111_SPI_H
|
||||
#define BARO_MS56111_SPI_H
|
||||
|
||||
#include "std.h"
|
||||
#include "peripherals/ms5611_spi.h"
|
||||
|
||||
|
||||
#define BARO_MS5611_DT 0.05
|
||||
#define BARO_MS5611_R 20
|
||||
#define BARO_MS5611_SIGMA2 1
|
||||
extern float baro_ms5611_r;
|
||||
extern float baro_ms5611_sigma2;
|
||||
|
||||
extern float baro_ms5611_alt;
|
||||
extern bool_t baro_ms5611_alt_valid;
|
||||
extern bool_t baro_ms5611_enabled;
|
||||
|
||||
extern struct Ms5611_Spi baro_ms5611;
|
||||
|
||||
extern void baro_ms5611_init(void);
|
||||
extern void baro_ms5611_periodic(void);
|
||||
extern void baro_ms5611_event(void);
|
||||
|
||||
#define BaroMs5611UpdatePressure(_b) { if (baro_ms5611.data_available) { _b = baro_ms5611.data.pressure; baro_ms5611.data_available = FALSE; } }
|
||||
|
||||
#define BaroMs5611UpdateAlt(_b) { if (baro_ms5611.data_available) { _b = baro_ms5611_alt; baro_ms5611.data_available = FALSE; } }
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user