ATY_LIB V2_102_230218
ATY_LIB for general devices or ALGO
 
Loading...
Searching...
No Matches
BMP280_ATY.c File Reference

Familiar functions of BMP280 for all embedded device. More...

#include "BMP280_ATY.h"

Go to the source code of this file.

Macros

#define __BMP280_ATY_C
 

Functions

uint8_t BMP280_ReadId (void)
 BMP280 read id.
 
uint8_t BMP280_GetStatus (uint8_t status_flag)
 BMP280 get status.
 
void BMP280_SetOversamp (BMP280_OVERSAMPLE_MODE *config)
 BMP280 set oversamp.
 
void BMP280_SetStandbyFilter (BMP280_CONFIG *config)
 BMP280 set standby filter.
 
double BM280_CompensateT (BMP280_S32_t adc_T)
 BMP280 calculate temperature compensate for double.
 
double BM280_CompensateP (BMP280_S32_t adc_P)
 BMP280 calculate pressure compensate for double.
 
double BMP280_GetTemperature (void)
 BMP280 get temperature.
 
double BMP280_GetPressure (void)
 BMP280 get pressure.
 
void BM280_Init (void)
 BMP280 initialize.
 
uint8_t BMP280_InitAndCheck (void)
 BMP280 check whether the device exists.
 
uint8_t BMP280_ReadTP (double *tp)
 BMP280 read temperature and pressure.
 
uint8_t BMP280_TempPreGet (uint16_t *tp)
 BMP280 get data flow path.
 

Variables

BMP280_S32_t t_fine
 
struct _BMP280_CC bmp280Cc = {0}
 
uint8_t bmp280InitFlag = 0
 

Detailed Description

Familiar functions of BMP280 for all embedded device.

Parameters
ProjectDEVICE_GENERAL_ATY_LIB
Author
ATY
Version
  • 1_01_220804 > ATY
    1. Preliminary version, first Release

Definition in file BMP280_ATY.c.

Macro Definition Documentation

◆ __BMP280_ATY_C

#define __BMP280_ATY_C

Definition at line 28 of file BMP280_ATY.c.

Function Documentation

◆ BM280_CompensateP()

double BM280_CompensateP ( BMP280_S32_t  adc_P)

BMP280 calculate pressure compensate for double.

Parameters
adc_Ppressure adc origin data
Returns
double value of pressure
Note
Returns pressure in Pa as double. Output value of "96386.2" equals 96386.2 Pa = 963.862 hPa

Definition at line 205 of file BMP280_ATY.c.

206{
207 double var1, var2, p;
208 var1 = ((double)t_fine / 2.0) - 64000.0;
209 var2 = var1 * var1 * ((double)bmp280Cc.P6) / 32768.0;
210 var2 = var2 + var1 * ((double)bmp280Cc.P5) * 2.0;
211 var2 = (var2 / 4.0) + (((double)bmp280Cc.P4) * 65536.0);
212 var1 = (((double)bmp280Cc.P3) * var1 * var1 / 524288.0 + ((double)bmp280Cc.P2) * var1) / 524288.0;
213 var1 = (1.0 + var1 / 32768.0) * ((double)bmp280Cc.P1);
214 if(var1 == 0.0)
215 {
216 return 0; // avoid exception caused by division by zero
217 }
218 p = 1048576.0 - (double)adc_P;
219 p = (p - (var2 / 4096.0)) * 6250.0 / var1;
220 var1 = ((double)bmp280Cc.P9) * p * p / 2147483648.0;
221 var2 = p * ((double)bmp280Cc.P8) / 32768.0;
222 p = p + (var1 + var2 + ((double)bmp280Cc.P7)) / 16.0;
223 return p;
224}
BMP280_S32_t t_fine
Definition: BMP280_ATY.c:92
struct _BMP280_CC bmp280Cc
Definition: BMP280_ATY.c:269
int16_t P9
Definition: BMP280_ATY.h:129
int16_t P6
Definition: BMP280_ATY.h:126
int16_t P2
Definition: BMP280_ATY.h:122
int16_t P4
Definition: BMP280_ATY.h:124
int16_t P5
Definition: BMP280_ATY.h:125
int16_t P7
Definition: BMP280_ATY.h:127
uint16_t P1
Definition: BMP280_ATY.h:121
int16_t P8
Definition: BMP280_ATY.h:128
int16_t P3
Definition: BMP280_ATY.h:123

◆ BM280_CompensateT()

double BM280_CompensateT ( BMP280_S32_t  adc_T)

BMP280 calculate temperature compensate for double.

Parameters
adc_Ttemperature adc origin data
Returns
double value of temperature
Note
Returns temperature in DegC, double precision. Output value of "51.23" equals 51.23 DegC. t_fine carries fine temperature as global value

Definition at line 188 of file BMP280_ATY.c.

189{
190 double var1, var2, T;
191 var1 = (((double)adc_T) / 16384.0 - ((double)bmp280Cc.T1) / 1024.0) * ((double)bmp280Cc.T2);
192 var2 = ((((double)adc_T) / 131072.0 - ((double)bmp280Cc.T1) / 8192.0) *
193 (((double)adc_T) / 131072.0 - ((double)bmp280Cc.T1) / 8192.0)) * ((double)bmp280Cc.T3);
194 t_fine = (BMP280_S32_t)(var1 + var2);
195 T = (var1 + var2) / 5120.0;
196 return T;
197}
long signed int BMP280_S32_t
Definition: BMP280_ATY.h:43
uint16_t T1
Definition: BMP280_ATY.h:118
int16_t T2
Definition: BMP280_ATY.h:119
int16_t T3
Definition: BMP280_ATY.h:120

◆ BM280_Init()

void BM280_Init ( void  )

BMP280 initialize.

Definition at line 274 of file BMP280_ATY.c.

275{
276 uint8_t lsb, msb;
277
278 // Correction value of the temperature
281 bmp280Cc.T1 = (((uint16_t)msb) << 8) + lsb;
284 bmp280Cc.T2 = (((uint16_t)msb) << 8) + lsb;
287 bmp280Cc.T3 = (((uint16_t)msb) << 8) + lsb;
288
289 // Correction value of the pressure
292 bmp280Cc.P1 = (((uint16_t)msb) << 8) + lsb;
295 bmp280Cc.P2 = (((uint16_t)msb) << 8) + lsb;
298 bmp280Cc.P3 = (((uint16_t)msb) << 8) + lsb;
301 bmp280Cc.P4 = (((uint16_t)msb) << 8) + lsb;
304 bmp280Cc.P5 = (((uint16_t)msb) << 8) + lsb;
307 bmp280Cc.P6 = (((uint16_t)msb) << 8) + lsb;
310 bmp280Cc.P7 = (((uint16_t)msb) << 8) + lsb;
313 bmp280Cc.P8 = (((uint16_t)msb) << 8) + lsb;
316 bmp280Cc.P9 = (((uint16_t)msb) << 8) + lsb;
317
318 // Reset
320
321 BMP280_OVERSAMPLE_MODE BMP_OVERSAMPLE_MODEStructure;
322 BMP_OVERSAMPLE_MODEStructure.P_Osample = BMP280_P_MODE_3;
323 BMP_OVERSAMPLE_MODEStructure.T_Osample = BMP280_T_MODE_1;
324 BMP_OVERSAMPLE_MODEStructure.WORKMODE = BMP280_NORMAL_MODE;
325 BMP280_SetOversamp(&BMP_OVERSAMPLE_MODEStructure);
326
327 BMP280_CONFIG BMP_CONFIGStructure;
328 BMP_CONFIGStructure.T_SB = BMP280_T_SB1;
329 BMP_CONFIGStructure.FILTER_COEFFICIENT = BMP280_FILTER_MODE_4;
330 BMP_CONFIGStructure.SPI_EN = DISABLE;
331
332 BMP280_SetStandbyFilter(&BMP_CONFIGStructure);
333}
void BMP280_SetStandbyFilter(BMP280_CONFIG *config)
BMP280 set standby filter.
Definition: BMP280_ATY.c:81
void BMP280_SetOversamp(BMP280_OVERSAMPLE_MODE *config)
BMP280 set oversamp.
Definition: BMP280_ATY.c:67
#define BMP280_DIG_T2_LSB_REG
Definition: BMP280_ATY.h:134
#define BMP280_DIG_P5_MSB_REG
Definition: BMP280_ATY.h:147
#define BMP280_DIG_P6_LSB_REG
Definition: BMP280_ATY.h:148
#define BMP280_DIG_P4_MSB_REG
Definition: BMP280_ATY.h:145
#define BMP280_DIG_T2_MSB_REG
Definition: BMP280_ATY.h:135
@ BMP280_T_MODE_1
Definition: BMP280_ATY.h:87
#define BMP280_DIG_P2_MSB_REG
Definition: BMP280_ATY.h:141
#define BMP280_DIG_P9_LSB_REG
Definition: BMP280_ATY.h:154
#define BMP280_RESET_VALUE
Definition: BMP280_ATY.h:49
#define BMP280_DIG_P9_MSB_REG
Definition: BMP280_ATY.h:155
#define BMP280_DIG_P1_MSB_REG
Definition: BMP280_ATY.h:139
@ BMP280_FILTER_MODE_4
Definition: BMP280_ATY.h:100
#define BMP280_DIG_P7_MSB_REG
Definition: BMP280_ATY.h:151
#define BMP280_DIG_P8_LSB_REG
Definition: BMP280_ATY.h:152
#define BMP280_DIG_P2_LSB_REG
Definition: BMP280_ATY.h:140
#define BMP280_DIG_P3_LSB_REG
Definition: BMP280_ATY.h:142
#define BMP280_DIG_P1_LSB_REG
Definition: BMP280_ATY.h:138
@ BMP280_P_MODE_3
Definition: BMP280_ATY.h:79
#define BMP280_ADDRESS
Definition: BMP280_ATY.h:47
#define BMP280_DIG_P5_LSB_REG
Definition: BMP280_ATY.h:146
#define BMP280_DIG_P7_LSB_REG
Definition: BMP280_ATY.h:150
#define BMP280_DIG_T1_LSB_REG
Definition: BMP280_ATY.h:132
#define BMP280_DIG_T3_MSB_REG
Definition: BMP280_ATY.h:137
#define BMP280_DIG_P6_MSB_REG
Definition: BMP280_ATY.h:149
#define BMP280_DIG_P8_MSB_REG
Definition: BMP280_ATY.h:153
@ BMP280_NORMAL_MODE
Definition: BMP280_ATY.h:70
#define BMP280_DIG_T3_LSB_REG
Definition: BMP280_ATY.h:136
#define BMP280_DIG_P3_MSB_REG
Definition: BMP280_ATY.h:143
@ BMP280_T_SB1
Definition: BMP280_ATY.h:105
#define BMP280_RESET_REG
Definition: BMP280_ATY.h:52
#define BMP280_DIG_P4_LSB_REG
Definition: BMP280_ATY.h:144
#define BMP280_DIG_T1_MSB_REG
Definition: BMP280_ATY.h:133
uint8_t I2C_ReadReg(uint8_t addr, uint8_t reg, uint8_t *data_t, uint8_t len)
Read serial data to reg.
Definition: HW_I2C_ATY.c:334
uint8_t I2C_WriteReg(uint8_t addr, uint8_t reg, uint8_t *data_t, uint8_t len)
Write serial data to reg.
Definition: HW_I2C_ATY.c:296
unsigned short uint16_t
Definition: fw_types.h:19
unsigned char uint8_t
Definition: fw_types.h:18
BMP280_T_SB T_SB
Definition: BMP280_ATY.h:166
FunctionalState SPI_EN
Definition: BMP280_ATY.h:168
BMP280_FILTER_COEFFICIENT FILTER_COEFFICIENT
Definition: BMP280_ATY.h:167
BMP280_P_OVERSAMPLING P_Osample
Definition: BMP280_ATY.h:159
BMP280_WORK_MODE WORKMODE
Definition: BMP280_ATY.h:161
BMP280_T_OVERSAMPLING T_Osample
Definition: BMP280_ATY.h:160

◆ BMP280_GetPressure()

double BMP280_GetPressure ( void  )

BMP280 get pressure.

Returns
pressure real value in double

Definition at line 250 of file BMP280_ATY.c.

251{
252 uint8_t xlsb, lsb, msb;
253 long signed bit32;
254 double pressure;
255
259 // The value of a register forming a floating point number
260 bit32 = ((long)(msb << 12)) | ((long)(lsb << 4)) | (xlsb >> 4);
261 pressure = BM280_CompensateP(bit32);
262
263 return pressure;
264}
double BM280_CompensateP(BMP280_S32_t adc_P)
BMP280 calculate pressure compensate for double.
Definition: BMP280_ATY.c:205
#define BMP280_PRESSURE_LSB_REG
Definition: BMP280_ATY.h:57
#define BMP280_PRESSURE_MSB_REG
Definition: BMP280_ATY.h:56
#define BMP280_PRESSURE_XLSB_REG
Definition: BMP280_ATY.h:58

◆ BMP280_GetStatus()

uint8_t BMP280_GetStatus ( uint8_t  status_flag)

BMP280 get status.

Parameters
status_flagthe bit to get
Returns
1 or 0 at bit status_flag

Definition at line 53 of file BMP280_ATY.c.

54{
55 uint8_t flag;
57 // status_flag = BMP280_MEASURING || BMP280_IM_UPDATE
58 // if(flag & status_flag) return 1;
59 // else return 0;
60 return flag & status_flag;
61}
#define BMP280_STATUS_REG
Definition: BMP280_ATY.h:53

◆ BMP280_GetTemperature()

double BMP280_GetTemperature ( void  )

BMP280 get temperature.

Returns
temperature real value in double

Definition at line 230 of file BMP280_ATY.c.

231{
232 uint8_t xlsb, lsb, msb;
233 long signed bit32;
234 double temperature;
235
239 // The value of a register forming a floating point number
240 bit32 = ((long)(msb << 12)) | ((long)(lsb << 4)) | (xlsb >> 4);
241 temperature = BM280_CompensateT(bit32);
242
243 return temperature;
244}
double BM280_CompensateT(BMP280_S32_t adc_T)
BMP280 calculate temperature compensate for double.
Definition: BMP280_ATY.c:188
#define BMP280_TEMPERATURE_LSB_REG
Definition: BMP280_ATY.h:60
#define BMP280_TEMPERATURE_XLSB_REG
Definition: BMP280_ATY.h:61
#define BMP280_TEMPERATURE_MSB_REG
Definition: BMP280_ATY.h:59

◆ BMP280_InitAndCheck()

uint8_t BMP280_InitAndCheck ( void  )

BMP280 check whether the device exists.

Returns
errCode, 0: success, !0: error

Definition at line 339 of file BMP280_ATY.c.

340{
341 BM280_Init();
342 DelayMs(50);
343
344 uint8_t bmp280Id = 0;
346#ifdef __DEBUG_BMP280_ATY
347 printf("\r\nBMP280 ID: 0x%02X", bmp280Id);
348#endif /* __DEBUG_BMP280_ATY */
349 // 0xD8 = 0x88 | 0x58
350 if(bmp280Id & 0xD8 != 0xD8)
351 return 1;
352
353 DelayMs(200);
354
355 return 0;
356}
void BM280_Init(void)
BMP280 initialize.
Definition: BMP280_ATY.c:274
uint8_t BMP280_ReadId(void)
BMP280 read id.
Definition: BMP280_ATY.c:40
uint8_t bmp280Id
void DelayMs(uint32_t ms)
__WEAK_ATY void printf(uint8_t *,...)

◆ BMP280_ReadId()

uint8_t BMP280_ReadId ( void  )

BMP280 read id.

Returns
id number like 0x58, 0x88

Definition at line 40 of file BMP280_ATY.c.

41{
42 uint8_t temp_uint8;
44 return temp_uint8;
45
46}
#define BMP280_CHIPID_REG
Definition: BMP280_ATY.h:51

◆ BMP280_ReadTP()

uint8_t BMP280_ReadTP ( double *  tp)

BMP280 read temperature and pressure.

Parameters
tpdata group to save tp value
Returns
errCode, 0: success, !0: error

Definition at line 363 of file BMP280_ATY.c.

364{
365 uint16_t errCount = 1000;
366 for(uint8_t i = 0; i < errCount; i++)
367 {
369 break;
370 if(i == errCount - 1)
371 return 2;
372 DelayMs(1);
373 }
374 for(uint8_t i = 0; i < errCount; i++)
375 {
377 break;
378 if(i == errCount - 1)
379 return 3;
380 DelayMs(1);
381 }
382 tp[0] = BMP280_GetTemperature();
383 tp[1] = BMP280_GetPressure();
384
385 return 0;
386}
double BMP280_GetPressure(void)
BMP280 get pressure.
Definition: BMP280_ATY.c:250
uint8_t BMP280_GetStatus(uint8_t status_flag)
BMP280 get status.
Definition: BMP280_ATY.c:53
double BMP280_GetTemperature(void)
BMP280 get temperature.
Definition: BMP280_ATY.c:230
#define BMP280_IM_UPDATE
Definition: BMP280_ATY.h:64
#define BMP280_MEASURING
Definition: BMP280_ATY.h:63
uint8_t __XDATA i

◆ BMP280_SetOversamp()

void BMP280_SetOversamp ( BMP280_OVERSAMPLE_MODE config)

BMP280 set oversamp.

Parameters
configOversample_Mode value

Definition at line 67 of file BMP280_ATY.c.

68{
69 uint8_t temp_uint8;
70 temp_uint8 = ((config->T_Osample) << 5) |
71 ((config->P_Osample) << 2) |
72 ((config)->WORKMODE);
73
75}
#define BMP280_CTRLMEAS_REG
Definition: BMP280_ATY.h:54

◆ BMP280_SetStandbyFilter()

void BMP280_SetStandbyFilter ( BMP280_CONFIG config)

BMP280 set standby filter.

Parameters
configbmp280 config

Definition at line 81 of file BMP280_ATY.c.

82{
83 uint8_t temp_uint8;
84 temp_uint8 = ((config->T_SB) << 5) |
85 ((config->FILTER_COEFFICIENT) << 2) |
86 ((config->SPI_EN));
87
89}
#define BMP280_CONFIG_REG
Definition: BMP280_ATY.h:55

◆ BMP280_TempPreGet()

uint8_t BMP280_TempPreGet ( uint16_t tp)

BMP280 get data flow path.

Parameters
tpdata group to save tp value
Returns
errCode, 0: success, !0: error

Definition at line 396 of file BMP280_ATY.c.

397{
398 double bmp280Value[2];
399
400 if(bmp280InitFlag == 0)
401 {
403 {
404 bmp280InitFlag = 2;
405 }
406 else
407 {
408 bmp280InitFlag = 1;
409 }
410 }
411 if(bmp280InitFlag == 2)
412 {
413#ifdef __DEBUG_BMP280_ATY
414 printf("\r\nDevice wrong!");
415#endif /* __DEBUG_BMP280_ATY */
416 return 0xFF;
417 }
418 else if(bmp280InitFlag == 1)
419 {
420 uint8_t errValue = 0;
421 errValue = BMP280_ReadTP(bmp280Value);
422 if(errValue == 0)
423 {
424 if(bmp280Value[1] != 0)
425 {
426 tp[0] = ((bmp280Value[0] * 1000) + 5) / 10;
427 tp[1] = (((bmp280Value[1] - 90000) * 10) + 5) / 10;
428#ifdef __DEBUG_BMP280_ATY
429 printf("\r\nTemperature %f C Pressure %f Pa", bmp280Value[0], bmp280Value[1]);
430#endif /* __DEBUG_BMP280_ATY */
431 }
432 else
433 {
434#ifdef __DEBUG_BMP280_ATY
435 printf("\r\nData get wrong!");
436#endif /* __DEBUG_AHT20_ATY */
437 return 0xFD;
438 }
439 }
440 else
441 {
442#ifdef __DEBUG_BMP280_ATY
443 printf("\r\nBMP280 timeout! Err: %d", errValue);
444#endif /* __DEBUG_BMP280_ATY */
445 return 0xFE;
446 }
447 }
448
449 return 0;
450}
uint8_t bmp280InitFlag
Definition: BMP280_ATY.c:389
uint8_t BMP280_ReadTP(double *tp)
BMP280 read temperature and pressure.
Definition: BMP280_ATY.c:363
uint8_t BMP280_InitAndCheck(void)
BMP280 check whether the device exists.
Definition: BMP280_ATY.c:339

Variable Documentation

◆ bmp280Cc

struct _BMP280_CC bmp280Cc = {0}

Definition at line 269 of file BMP280_ATY.c.

◆ bmp280InitFlag

uint8_t bmp280InitFlag = 0

Definition at line 389 of file BMP280_ATY.c.

◆ t_fine

BMP280_S32_t t_fine

Definition at line 92 of file BMP280_ATY.c.