Paparazzi UAS  v5.8.2_stable-0-g6260b7c
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
baro_board_ms5611_i2c.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2011-2013 The Paparazzi Team
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  *
21  */
22 
31 #include "peripherals/ms5611_i2c.h"
32 
33 #include "mcu_periph/sys_time.h"
34 #include "led.h"
35 #include "std.h"
36 #include "subsystems/abi.h"
37 
38 #include "mcu_periph/uart.h"
39 #include "messages.h"
41 
42 #ifdef BARO_PERIODIC_FREQUENCY
43 #if BARO_PERIODIC_FREQUENCY > 100
44 #error "For MS5611 BARO_PERIODIC_FREQUENCY has to be < 100"
45 #endif
46 #endif
47 
48 
55 #ifndef BB_MS5611_SLAVE_ADDR
56 #define BB_MS5611_SLAVE_ADDR 0xEE
57 #endif
58 
60 #ifndef BB_MS5611_TYPE_MS5607
61 #define BB_MS5611_TYPE_MS5607 FALSE
62 #endif
63 PRINT_CONFIG_VAR(BB_MS5611_TYPE_MS5607)
64 
66 
67 
68 void baro_init(void)
69 {
70  ms5611_i2c_init(&bb_ms5611, &BB_MS5611_I2C_DEV, BB_MS5611_SLAVE_ADDR, BB_MS5611_TYPE_MS5607);
71 
72 #ifdef BARO_LED
73  LED_OFF(BARO_LED);
74 #endif
75 }
76 
77 void baro_periodic(void)
78 {
79  if (sys_time.nb_sec > 1) {
80 
81  /* call the convenience periodic that initializes the sensor and starts reading*/
83 
84 #if DEBUG
86  RunOnceEvery((50 * 30), DOWNLINK_SEND_MS5611_COEFF(DefaultChannel, DefaultDevice,
87  &bb_ms5611.data.c[0],
88  &bb_ms5611.data.c[1],
89  &bb_ms5611.data.c[2],
90  &bb_ms5611.data.c[3],
91  &bb_ms5611.data.c[4],
92  &bb_ms5611.data.c[5],
93  &bb_ms5611.data.c[6],
94  &bb_ms5611.data.c[7]));
95 #endif
96  }
97 }
98 
99 void baro_event(void)
100 {
101  if (sys_time.nb_sec > 1) {
103 
105  float pressure = (float)bb_ms5611.data.pressure;
106  AbiSendMsgBARO_ABS(BARO_BOARD_SENDER_ID, pressure);
107  float temp = bb_ms5611.data.temperature / 100.0f;
108  AbiSendMsgTEMPERATURE(BARO_BOARD_SENDER_ID, temp);
110 
111 #ifdef BARO_LED
112  RunOnceEvery(10, LED_TOGGLE(BARO_LED));
113 #endif
114 
115 #if DEBUG
116  float fbaroms = bb_ms5611.data.pressure / 100.;
117  DOWNLINK_SEND_BARO_MS5611(DefaultChannel, DefaultDevice,
119  &fbaroms, &temp);
120 #endif
121  }
122  }
123 }
uint32_t d1
Definition: ms5611.h:55
struct Ms5611_I2c bb_ms5611
arch independent UART (Universal Asynchronous Receiver/Transmitter) API
uint16_t c[PROM_NB]
Definition: ms5611.h:54
Common barometric sensor implementation.
struct Ms5611Data data
Definition: ms5611_i2c.h:43
bool_t initialized
config done flag
Definition: ms5611_i2c.h:41
uint32_t pressure
pressure in Pascal (0.01mbar)
Definition: ms5611.h:52
void baro_init(void)
Main include for ABI (AirBorneInterface).
float fbaroms
uint32_t d2
Definition: ms5611.h:56
void baro_event(void)
#define FALSE
Definition: std.h:5
#define LED_TOGGLE(i)
Definition: led_hw.h:44
#define BB_MS5611_SLAVE_ADDR
default i2c address when CSB is set to GND addr is 0xEE when CSB is set to VCC addr is 0xEC ...
Architecture independent timing functions.
Measurement Specialties (Intersema) MS5611-01BA and MS5607-02BA03 pressure/temperature sensor interfa...
static void ms5611_i2c_periodic(struct Ms5611_I2c *ms)
convenience function
Definition: ms5611_i2c.h:69
void baro_periodic(void)
#define BARO_BOARD_SENDER_ID
default onboard baro
void ms5611_i2c_event(struct Ms5611_I2c *ms)
Definition: ms5611_i2c.c:119
volatile bool_t data_available
data ready flag
Definition: ms5611_i2c.h:42
void ms5611_i2c_init(struct Ms5611_I2c *ms, struct i2c_periph *i2c_p, uint8_t addr, bool_t is_ms5607)
Definition: ms5611_i2c.c:33
volatile uint32_t nb_sec
full seconds since startup
Definition: sys_time.h:69
arch independent LED (Light Emitting Diodes) API
#define BB_MS5611_TYPE_MS5607
set to TRUE if baro is actually a MS5607
#define LED_OFF(i)
Definition: led_hw.h:43
int32_t temperature
temperature with 0.01 degrees Celsius resolution
Definition: ms5611.h:53