Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BME680 temperature value is always 0 after calc_temperature() is called

    wenwenchen
    Member

    BME680 temperature value is always 0 after calc_temperature() is called

    I use a bme680 for my project, but the temperature value from `read_field_data()` is always 0 .

    I printed the following debug data for this code part https://github.com/BoschSensortec/BME680_driver/blob/master/bme680.c#L1223-L1239

    buf[5-7] is 129 105 96
    adc_temp is 530070, adc_pres is 393660, adc_hum is 14457, adc_gas_res is 304 and adc_gas range is 5
    after calculation:

    data->temperature = 0.000
    data->humidity = 20.270
    data->pressure =95598.000
    data->gas_resistance = 294021.0

    buf[5-7] is 130 140 32
    adc_temp is 534722, adc_pres is 414452, adc_hum is 13726, adc_gas_res is 377 and adc_gas range is 5
    after calculation:

    data->temperature = 0.000
    data->humidity = 16.673
    data->pressure = 92113.000
    data->gas_resistance = 276157.0

     

    Can somebody help me?

    10 REPLIES 10
    handytech
    Community Moderator

    Re: BME680 temperature value is always 0 after calc_temperature() is called

    Unfortunately the ADC value alone is not sufficient to verify your output, please also share the relevant "calib" parameters and confirm your current sensor configuration and which implementation of the compensation formula is used (floating-point version is recommended). Feel free to share a code snippet of the BME680 initialization, configuration and data read-out.

    wenwenchen
    Member

    Re: BME680 temperature value is always 0 after calc_temperature() is called

    thanks for quick replay. I called get_calib_data() and always get 0 as return value.

    my init function looks like this:

    ```

        b->bme680_driver.chip_id = 0;
        b->bme680_driver.dev_id = i2cGetAdd(i2c);
        b->bme680_driver.intf = BME680_I2C_INTF;
        b->bme680_driver.mem_page = 0;
        b->bme680_driver.amb_temp = 25;
        b->bme680_driver.power_mode = BME680_SLEEP_MODE;
        b->bme680_driver.read = BME680X_driver_read;
        b->bme680_driver.write = BME680X_driver_write;
        b->bme680_driver.delay_ms = BME680X_driver_delay;
     

        com_rslt = bme680_init(&b->bme680_driver);

      /* Select sensor configuration parameters */
      b->bme680_driver.power_mode = BME680_FORCED_MODE;
     
      b->bme680_driver.tph_sett.os_hum = BME680_OS_2X;
      b->bme680_driver.tph_sett.os_pres = BME680_OS_4X;
      b->bme680_driver.tph_sett.os_temp = BME680_OS_8X;
     
      settings_sel = BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL
          | BME680_GAS_SENSOR_SEL;
     
        b->bme680_driver.gas_sett.run_gas = BME680_ENABLE_GAS_MEAS;
        b->bme680_driver.gas_sett.heatr_dur = b->HEAT_TIME;
        b->bme680_driver.gas_sett.heatr_temp = b->HPTEMP;
     
      com_rslt = bme680_set_sensor_settings(settings_sel, &b->bme680_driver);

    ```

    And I also tried with floating-point version, then the temperature values are very instable and changed between 0 to 200.

    Vincent
    Community Moderator

    Re: BME680 temperature value is always 0 after calc_temperature() is called

    API return 0 means the calibration read out value is successful.

    Here we need all the calibration register content read from sensor.  Or you can dump the current BME680 register map then shared to us. 

    Please also share the code you read the sensor data not only the initial part

    wenwenchen
    Member

    Re: BME680 temperature value is always 0 after calc_temperature() is called

    Is there a function to dump all current BME680 register map? I will be in vocation next two month. I will give you more information in juni.

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist