Forum: Mikrocontroller und Digitale Elektronik GY-65/BMP085 zeigt falschen Druck


von Stefan B. (sibbl) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin echt ratlos. Ich weiss nicht, wo der Fehler liegt.
Ich habe einen Drucksensor, der soweit auch funktioniert, allerdings 
zeigt er einen falschen Druck an (um die 30000 siehe Bild). Temperatur 
ist Okay, also kann es am I2C nicht liegen.
Ich habe 2 Sensoren getestet und beide zeigen die gleichen Werte.

Meiner Meinung nach sollten um die 10000 rauskommen.

Hatte das schonmal jemand?

Gruss

von Michael (Gast)


Lesenswert?

Stefan B. schrieb:
> Hatte das schonmal jemand?

Woher kommt denn die ca. 30000? Erzeugst du die Ausgabe mit einer 
Software und - wenn ja - wie sieht die aus?

von Stefan B. (sibbl) Benutzerseite


Angehängte Dateien:

Lesenswert?

Das sind die drei wesentlichen Teile.

Ich verstehe nur nicht, warum die Temperatur stimmt. Die 
atmega_bmp085_lib.c habe ich auch schon nach Fehlern durchsucht, 
entweder ich habe da was übersehen oder meine Vermutung ist, dass der 
Drucksensor nen Schaden hat, wobei ich aber nicht verstehe, warum der 
andere Sensor das Gleiche anzeigt.

von Wolfgang (Gast)


Lesenswert?

Stefan B. schrieb:
> Das sind die drei wesentlichen Teile.

Und welche Funktionen benutzt du davon in welcher Reihenfolge. Und was 
gibst du dann aufs LCD aus?

von Stefan B. (sibbl) Benutzerseite


Lesenswert?

In der Main zuerst I2C:

....
#include "camera/servo.h"
#include "sendmail.h"

#include "BMP085/atmega_bmp085_lib.h"

int i2c_init(void);


volatile unsigned int variable[MAX_VAR];

// RoBue:
....




dann kurz vor while:





....

      ow_array[i]=OW_MINMAX;
    }
    DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );
    for(a=0;a<1000000;a++){asm("nop");};
    auslesen = 0;
    minmax = 1;
#endif


//-----------------------------------------
// Allocate memory
//-----------------------------------------
  int32_t temperature = 0;
  int32_t pressure = 0;
  int16_t BMP085_calibration_int16_t[8];
  int16_t BMP085_calibration_uint16_t[3];
  uint8_t error_code=0;
//-----------------------------------------
// Initialize Stuff
//-----------------------------------------
  _delay_ms(11);
  i2c_init();    //Initialize TWI
  BMP085_Calibration(BMP085_calibration_int16_t, 
BMP085_calibration_uint16_t,&error_code);////Initialize BMP085


//Hauptschlfeife
// *************
  //WAIT(10000);

  while(1)
  {


  bmp085Convert(BMP085_calibration_int16_t, 
BMP085_calibration_uint16_t,&temperature, &pressure,&error_code);

......



und anschließend aufs LCD:


......

        CX = LCD_C1; // erster LCD Controller
      lcd_clear();


       lcd_print(3,0,"%i",pressure);
       lcd_print(3,7,"%i",temperature/10);
       lcd_print(3,11,"%i", bmp085CalcAltitude(pressure));
       lcd_print(3,18,"%i",error_code);


.......




Habe ich da was übersehen?

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
Noch kein Account? Hier anmelden.