ich habe mir einen Bosch BME680 gekauft. Datenblatt: https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME680-DS001-00.pdf Leider kann ich dem Datenblatt nirgends entnehmen, wie man auf die richtige Temperatur kalibriert? Bei der Gasmessung hingegen sind die entsprechenden Gleichungen angegeben. Ich weiß auch nicht wo im Memory die Kalibrierkoeffizienten für Druck, Temperatur und Feuchte gespeichert sind? Ist das jetzt dann einfach analog zum BME280?
Mit I2C 25 Kalibrierkoeffizienten sind von 0x89 aufsteigend und 16 ab 0xE1. Außerdem sind wete in 0x00 0x02 und 0x04 gespeichert. Das muss man sich leider aus der API frickeln. Ebenso wie die Rechnugen für die Messwert kompensationen. Wenn du die brauchst kann ich dauch noch hier posten. Wenn ich den Gassensor zu laufen gebracht habe wird es auch ein Github projekt geben das evtl verständlicher ist als der Bosch treiber. Das ist meine Funktion für die Kalibrierkoeffizienten:
1 | void getCalibDataBME680() |
2 | {
|
3 | int32_t calib[41]; |
4 | |
5 | for(int i = -1; i < 25; i++){ // Kalibrierkoeffizienten ab 0x89 |
6 | calib[i] = readBME680(CALIB_ADDRESS_1_BME680 + i); |
7 | }
|
8 | for(int i = -1; i < 16; i++){ // Kalibrierkoeffizienten ab 0xE1 |
9 | calib[25 + i] = readBME680(CALIB_ADDRESS_2_BME680 + i); |
10 | }
|
11 | |
12 | // write temperature compensation parameters
|
13 | par_t1 = (uint16_t) (((uint16_t) calib[34] << 8) | calib[33]); |
14 | par_t2 = ( int16_t) ((( int16_t) calib[2] << 8) | calib[1]); |
15 | par_t3 = ( int8_t) (calib[3]); |
16 | |
17 | // write pressure compensation parameters
|
18 | par_p1 = (uint16_t) ((calib[6] << 8) | calib[5]); |
19 | par_p2 = (int16_t) ((calib[8] << 8) | calib[7]); |
20 | par_p3 = (int8_t) calib[9]; |
21 | par_p4 = (int16_t) ((calib[12] << 8) | calib[11]); |
22 | par_p5 = (int16_t) ((calib[14] << 8) | calib[13]); |
23 | par_p6 = (int8_t) (calib[16]); |
24 | par_p7 = (int8_t) (calib[15]); |
25 | par_p8 = (int16_t) ((calib[20] << 8) | calib[19]); |
26 | par_p9 = (int16_t) ((calib[22] << 8) | calib[21]); |
27 | par_p10 = (uint8_t) (calib[23]); |
28 | |
29 | // write humidity compensation parameters
|
30 | par_h1 = (uint16_t) (((uint16_t) calib[27] << 4) | (calib[26] & 0x0F)); |
31 | par_h2 = (uint16_t) (((uint16_t) calib[25] << 4) | (calib[26] >> 4)); |
32 | par_h3 = (int8_t) calib[28]; |
33 | par_h4 = (int8_t) calib[29]; |
34 | par_h5 = (int8_t) calib[30]; |
35 | par_h6 = (uint8_t) calib[31]; |
36 | par_h7 = (int8_t) calib[32]; |
37 | |
38 | /* Gas heater related coefficients */
|
39 | par_gh1 = (int8_t) calib[37]; |
40 | par_gh2 = (int16_t) ((calib[36] << 8) | calib[35]); |
41 | par_gh3 = (int8_t) calib[38]; |
42 | res_heat_range = (readBME680(RES_HEAT_RANGE_ADDRESS_BME680) & 0x30) / 16; // 0x02 minus ungenutzte bits |
43 | res_heat_val = (int8_t) readBME680(RES_HEAT_VAL_ADDRESS_BME680); // 0x00 minus ungenutzte bits |
44 | range_sw_err =((int8_t) readBME680(RANGE_SW_ERR_ADDRESS_BME680) & 0xf0) / 16; // 0x04 minus ungenutzte bits |
45 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.