$search
00001 /* $Date: 2009/10/23 $ 00002 * $Revision: 1.2 $ 00003 */ 00004 00083 #ifndef __BMP085_H__ 00084 #define __BMP085_H__ 00085 00086 00087 00088 #define bmp085_calc_temperature(ut) bmp085_get_temperature(ut) 00089 00090 #define bmp085_calc_pressure(up) bmp085_get_pressure(up) 00091 00092 #define bmp085_read_ut() bmp085_get_ut() 00093 00094 #define bmp085_read_up() bmp085_get_up() 00095 00096 #define bmp085_read_reg(address, data, length) bmp085_get_reg(address, data, length) 00097 00098 #define bmp085_write_reg(address, data, length) bmp085_set_reg(address, data, length) 00099 00100 #define bmp085_read_cal_param() bmp085_get_cal_param() 00101 00102 #define smd500_read_cal_param() smd500_get_cal_param() 00103 00104 00114 #define BMP085_BUS_WR_RETURN_TYPE char 00115 00119 #define BMP085_BUS_WR_PARAM_TYPES unsigned char, unsigned char, unsigned char*, unsigned char 00120 00124 #define BMP085_BUS_WR_PARAM_ORDER device_addr, register_addr, register_data, write_length 00125 00126 00127 /* never change this line */ 00128 #define BMP085_BUS_WRITE_FUNC(device_addr, register_addr, register_data, write_length) bus_write( device_addr, register_addr, register_data, write_length ) 00129 00130 00131 00135 #define BMP085_BUS_RD_RETURN_TYPE char 00136 00140 #define BMP085_BUS_RD_PARAM_TYPES unsigned char, unsigned char, unsigned char*, unsigned char 00141 00145 #define BMP085_BUS_RD_PARAM_ORDER device_addr, register_addr, register_data, read_length 00146 00147 00148 /* never change this line */ 00149 #define BMP085_BUS_READ_FUNC(device_addr, register_addr, register_data, read_length) bus_read( device_addr, register_addr, register_data, read_length ) 00150 00151 00152 00153 /* 00154 CHIP_TYPE CONSTANTS 00155 */ 00156 00157 #define BMP085_CHIP_ID 0x55 00158 #define BOSCH_PRESSURE_SMD500 05 00159 #define BOSCH_PRESSURE_BMP085 85 00160 00161 00162 /* 00163 BMP085 I2C Address 00164 */ 00165 #define BMP085_I2C_ADDR (0xEE >> 1) 00166 00167 00168 /* 00169 SMB380 API error codes 00170 */ 00171 #define E_BMP_NULL_PTR (char)-127 00172 #define E_BMP_COMM_RES (char)-1 00173 #define E_BMP_OUT_OF_RANGE (char)-2 00174 #define E_SENSOR_NOT_DETECTED (char) 0 00175 00176 /* 00177 * 00178 * register definitions 00179 * 00180 */ 00181 #define BMP085_PROM_START__ADDR 0xAA 00182 #define BMP085_PROM_DATA__LEN 22 00183 00184 #define BMP085_CHIP_ID_REG 0xD0 00185 #define BMP085_VERSION_REG 0xD1 00186 00187 #define BMP085_CTRL_MEAS_REG 0xF4 00188 #define BMP085_ADC_OUT_MSB_REG 0xF6 00189 #define BMP085_ADC_OUT_LSB_REG 0xF7 00190 00191 #define BMP085_SOFT_RESET_REG 0xE0 00192 00193 #define BMP085_T_MEASURE 0x2E // temperature measurent 00194 #define BMP085_P_MEASURE 0x34 // pressure measurement 00195 00196 #define BMP085_TEMP_CONVERSION_TIME 5 // TO be spec'd by GL or SB 00197 00198 00199 /* SMD500 specific constants */ 00200 #define SMD500_PROM_START__ADDR 0xF8 00201 #define SMD500_PROM_DATA__LEN 8 00202 00203 #define SMD500_PARAM_M1 -2218 //calibration parameter 00204 #define SMD500_PARAM_M2 -457 //calibration parameter 00205 #define SMD500_PARAM_M3 -1984 //calibration parameter 00206 #define SMD500_PARAM_M4 8808 //calibration parameter 00207 #define SMD500_PARAM_M5 496 //calibration parameter 00208 #define SMD500_PARAM_M6 1415 //calibration parameter 00209 00210 #define SMD500_PARAM_MB -4955 //calibration parameter 00211 #define SMD500_PARAM_MC 11611 //calibration parameter 00212 #define SMD500_PARAM_MD -12166 //calibration parameter 00213 #define SMD500_PARAM_ME -17268 //calibration parameter 00214 #define SMD500_PARAM_MF -8970 //calibration parameter 00215 00216 #define SMD500_PARAM_MG 3038 //calibration parameter 00217 #define SMD500_PARAM_MH -7357 //calibration parameter 00218 #define SMD500_PARAM_MI 3791 //calibration parameter 00219 #define SMD500_PARAM_MJ 64385 //calibration parameter 00220 00221 #define SMD500_STANDBY 0 // set the device in stand-by modus to reduce power consumption 00222 #define SMD500_MASTERCLOCK_32768HZ 0x04 // external Master clock 32.768kHz 00223 #define SMD500_MASTERCLOCK_1MHZ 0 // external Master clock 1MHz 00224 #define SMD500_T_RESOLUTION_13BIT 0 // 13 Bit resolution temperature 00225 #define SMD500_T_RESOLUTION_16BIT 0x80 // 16 Bit resolution temperature 00226 #define SMD500_T_MEASURE 0x6A // temperature measurent 00227 #define SMD500_P_MEASURE 0xF0 // pressure measurement 00228 00229 #define SMD500_TEMP_CONVERSION_TIME_13 9 00230 #define SMD500_TEMP_CONVERSION_TIME_16 34 00231 00232 00233 /* register write and read delays */ 00234 00235 #define BMP085_MDELAY_DATA_TYPE unsigned int 00236 #define BMP085_MDELAY_RETURN_TYPE void 00237 00240 typedef struct 00241 { 00242 short ac1; 00243 short ac2; 00244 short ac3; 00245 unsigned short ac4; 00246 unsigned short ac5; 00247 unsigned short ac6; 00248 short b1; 00249 short b2; 00250 short mb; 00251 short mc; 00252 short md; 00253 } bmp085_smd500_calibration_param_t; 00254 00255 00259 typedef struct 00260 { 00261 bmp085_smd500_calibration_param_t cal_param; 00262 unsigned char mode; 00263 unsigned char chip_id, ml_version, al_version; 00264 unsigned char dev_addr; 00265 unsigned char sensortype; 00266 00267 long param_b5; 00268 int number_of_samples; 00269 short oversampling_setting; 00270 short smd500_t_resolution, smd500_masterclock; 00271 BMP085_BUS_WR_RETURN_TYPE (*bus_write)( BMP085_BUS_WR_PARAM_TYPES ); 00272 BMP085_BUS_RD_RETURN_TYPE (*bus_read)( BMP085_BUS_RD_PARAM_TYPES ); 00273 BMP085_MDELAY_RETURN_TYPE (*delay_msec)( BMP085_MDELAY_DATA_TYPE ); 00274 } bmp085_t; 00275 00276 00277 00278 00279 /* 00280 * 00281 * bit slice positions in registers 00282 * 00283 */ 00284 00285 #define BMP085_CHIP_ID__POS 0 00286 #define BMP085_CHIP_ID__MSK 0xFF 00287 #define BMP085_CHIP_ID__LEN 8 00288 #define BMP085_CHIP_ID__REG BMP085_CHIP_ID_REG 00289 00290 00291 #define BMP085_ML_VERSION__POS 0 00292 #define BMP085_ML_VERSION__LEN 4 00293 #define BMP085_ML_VERSION__MSK 0x0F 00294 #define BMP085_ML_VERSION__REG BMP085_VERSION_REG 00295 00296 00297 00298 #define BMP085_AL_VERSION__POS 4 00299 #define BMP085_AL_VERSION__LEN 4 00300 #define BMP085_AL_VERSION__MSK 0xF0 00301 #define BMP085_AL_VERSION__REG BMP085_VERSION_REG 00302 00303 00304 /* DATA REGISTERS */ 00305 00306 00307 00308 /* LG/HG thresholds are in LSB and depend on RANGE setting */ 00309 /* no range check on threshold calculation */ 00310 00311 00312 00313 #define BMP085_GET_BITSLICE(regvar, bitname) (regvar & bitname##__MSK) >> bitname##__POS 00314 00315 00316 #define BMP085_SET_BITSLICE(regvar, bitname, val) (regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK) 00317 00318 00319 /* General Setup Functions */ 00320 00321 00322 00330 int bmp085_init( bmp085_t* ); 00331 00332 00333 00334 //short bmp085_calc_temperature(unsigned long ut); 00335 short bmp085_get_temperature( unsigned long ut ); 00336 00337 //long bmp085_calc_pressure(unsigned long up); 00338 long bmp085_get_pressure( unsigned long up ); 00339 00340 //unsigned short bmp085_read_ut(void); 00341 //unsigned long bmp085_read_up(void); 00342 unsigned short bmp085_get_ut( void ); 00343 unsigned long bmp085_get_up( void ); 00344 00345 00346 00347 /* MISC RAW functions */ 00348 00349 /* read: address, data-pointer, length */ 00350 //char bmp085_read_reg(unsigned char , unsigned char *, unsigned char); 00351 char bmp085_get_reg( unsigned char , unsigned char*, unsigned char ); 00352 00353 /* write: address, data-pointer, length */ 00354 //char bmp085_write_reg(unsigned char , unsigned char*, unsigned char ); 00355 char bmp085_set_reg( unsigned char , unsigned char*, unsigned char ); 00356 00357 00358 /* API internal helper functions */ 00359 00360 //int bmp085_read_cal_param(void); 00361 //int smd500_read_cal_param(void); 00362 int bmp085_get_cal_param( void ); 00363 int smd500_get_cal_param( void ); 00364 00365 00366 #endif // __BMP085_H__ 00367 00368 00369 00370 00371