BMP280 mit Arduino auslesen

Gast #5093931
Lesenswert?
• ▲
▼
Hallo Ihr,

mein Arduino Nano und mein BMP280 Luftdrucksensor verstehen sich nicht 
so richtig.

Der Sensor ist sehr wahrscheinlich richtig angeschlossen und liefert 
auch Werte. Wenn ich die Adafruit lib verwende sind die Werte für 
Luftdruck und Temperatur auch plausibel.

Jetzt habe ich natürlich (mit Hilfe diverser Foren und Beiträge) "meinen 
eigenen" Code schreiben wollen und dies auch getan. Der tut aber leider 
nicht so richtig.

Ich habe den Code mit 2 verschiedenen BMP280 Sensoren getestet. Einmal 
lande ich bei ca. 30°C und einmal bei ca. 50°C (Druck stimmt auch 
nicht). Irgendetwas ist da also faul.

Hier die Kurzform...
1
void setup() {
2

3
//BMP280 Konfigurieren
4
  Wire.begin();
5
  Wire.beginTransmission(I2C_ADDRESS);
6
  Wire.write(0xF4);
7
  Wire.write(B01010011);
8
  Wire.write(0xF5);
9
  Wire.write(B00000000);
10
  Wire.endTransmission();
11

12

13
//Auslesen der Kalibrierkonstanten (hier nur die Konstanten zur Temperaturberechnung)
14
  Wire.beginTransmission(I2C_ADDRESS);
15
  Wire.write(0x88);
16
  Wire.endTransmission();
17

18
  Wire.requestFrom(I2C_ADDRESS, 24);
19
  while (!Wire.available());
20
  unsigned short dig_T1 = Wire.read() << 8 | Wire.read();
21
  signed short dig_T2 = Wire.read() << 8 | Wire.read();
22
  signed short dig_T3 = Wire.read() << 8 | Wire.read();
23
  ...
24

25
//Umrechnung der Kalibrierkonstanten a la -> https://www.mikrocontroller.net/topic/366173 (ganz unten)
26
  float aT1 = (float)dig_T1*pow(2,4);
27
  float aT2 = (float)dig_T2*pow(2,-14);
28
  float aT3 = (float)dig_T3*pow(2,-34);
29
...
30

31
//Auslesen der relevanten Register
32
  Wire.beginTransmission(I2C_ADDRESS);
33
  Wire.write(0xFA);
34
  Wire.endTransmission();
35

36
  Wire.requestFrom(I2C_ADDRESS, 3);
37
  while (!Wire.available());
38
  long msb = Wire.read();
39
  long lsb = Wire.read();
40
  long xlsb = Wire.read();
41
//Zusammensetzen des Rohwertes der Temperatur
42
  signed long adc_t = (((long)msb << 12) | ((long)lsb << 4) | ((long)xlsb) >> 4);
43

44
//Umrechnung a la -> https://www.mikrocontroller.net/topic/366173
45
   float ofs = (float) adc_t - aT1;
46
   float t_fine = (ofs * aT3 + aT2) * ofs;
47
   double Temperatur = t_fine * (1.0 / 5120.0);
48
}

Wäre super lieb, wenn jemand den ein oder anderen Hinweis für mich hätte 
:)

Viele Grüße und ein schönes Wochenende

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.