- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 28

Thema: BMP180 --> Druck oder I2C Problem ?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #19
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Ich rufe aktuell die Temperatur und den Druck so ab :

    bmp180_get_druck(cal,&press,0,&temp,&temp_temp,&pr ess_tmp);
    Folgende Variablen liefern mir folgende Werte :

    cal = habe ich mir noch nicht angeschaut. (Sollte ich dies besser tun?)
    &press = -30418 (Vorzeichen MINUS)
    &temp = 224 (Dieser Wert passt. Ca. 22,4 °C)
    &temp_temp = 29232 (Rohdaten Temperatur)
    &press_tmp = -22634 ( Rohdaten Druck, Vozeichen MINUS)
    Mehr rufe ich aktuell nicht auf.


    ***UPDATE***

    Die Kalibrationswerte scheinen zu stimmen.

    - - - Aktualisiert - - -

    Es scheint irgendwas mit den Zeigern zu sein.

    Führe ich die Routine so aus :

    char bmp180_get_druck(bmp180_calc_t cal, long *druck, unsigned char oss, long *temperatur, int *temp, long *press)
    {
    char ret = 1;
    long p;
    int t;
    long UT, X1, X2, X3, B3, B5, B6, T;
    long AC1, AC2, AC3, AC4, AC5, AC6, MB, MC, MD, B1, B2;
    unsigned long B4, B7, UP;
    AC1 = cal.AC1;
    AC2 = cal.AC2;
    AC3 = cal.AC3;
    AC4 = cal.AC4;
    AC5 = cal.AC5;
    AC6 = cal.AC6;
    MB = cal.MB;
    MC = cal.MC;
    MD = cal.MD;
    B1 = cal.B1;
    B2 = cal.B2;

    ret &= bmp180_start_temp(&t);
    UT = (long)t;
    *temp = t;
    ret &= bmp180_start_druck(&p, oss);
    UP = (long)p;
    *press = p;

    X1 = (((UT - AC6) * AC5)>>15);
    X2 = (MC<<11) / (X1 + MD);
    B5 = X1 + X2;
    T = ((B5 + 8L)>>4);
    *temperatur = T;

    /* Musterwerte laut Datenblatt */
    oss = 0;
    AC1 = 408;
    AC2 = -72;
    AC3 = -14383;
    AC4 = 32741;
    AC5 = 32757;
    AC6 = 23153;
    B1 = 6190;
    B2 = 4;
    MB = -32768;
    MC = -8711;
    MD = 2868;

    UP = 23843;
    B5 = 2399;

    #define SCROLL_CAL_VALUE 20

    char Buffer[20];

    // strcpy(Buffer, "AC1 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC1);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC2 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC2);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC3 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC3);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC4 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC4);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC5 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC5);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC6 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC6);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "MB : ");
    // sprintf(Buffer+strlen(Buffer), "%i", MB);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "MC : ");
    // sprintf(Buffer+strlen(Buffer), "%i", MC);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "MD : ");
    // sprintf(Buffer+strlen(Buffer), "%i", MD);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "B1 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", B1);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "B2 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", B2);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);

    B6 = B5 - 4000;
    X1 = (B2 * (B6 * B6 >> 12)) >> 11;
    X2 = AC2 * B6 >> 11;
    X3 = X1 + X2;
    B3 = (((AC1 * 4 + X3) << oss) + 2) >> 2;
    X1 = AC3 * B6 / 8192;
    X2 = (B1 * (B6 * B6 >> 12)) >> 16;
    X3 = ((X1 + X2) + 2) >> 2;
    B4 = AC4 * (unsigned long)(X3 + 3276 >> 15;
    B7 = ((unsigned long)UP - B3) * (50000 >> oss);

    if (B7 < 0x80000000)
    p = (B7 * 2) / B4;
    else
    p = (B7 / B4) * 2;


    X1 = (p >> * (p >> ;
    X1 = (X1 * 303 >> 16;
    X2 = (-7357 * p) >> 16;
    long temp_1;

    temp_1 = p + ((X1 + X2 + 3791) >> 4);

    strcpy(Buffer, "Druck : ");
    sprintf(Buffer+strlen(Buffer), "%ld", temp_1);
    scroll_display(Buffer,SCROLL_CAL_VALUE);


    return ret;
    }

    Bekomme ich den Wert laut Musterrechnung (Datenblatt)
    Deklariere ich jedoch keine Variable

    long temp_1;
    und werte den Druck so aus :

    char bmp180_get_druck(bmp180_calc_t cal, long *druck, unsigned char oss, long *temperatur, int *temp, long *press)
    {
    char ret = 1;
    long p;
    int t;
    long UT, X1, X2, X3, B3, B5, B6, T;
    long AC1, AC2, AC3, AC4, AC5, AC6, MB, MC, MD, B1, B2;
    unsigned long B4, B7, UP;
    AC1 = cal.AC1;
    AC2 = cal.AC2;
    AC3 = cal.AC3;
    AC4 = cal.AC4;
    AC5 = cal.AC5;
    AC6 = cal.AC6;
    MB = cal.MB;
    MC = cal.MC;
    MD = cal.MD;
    B1 = cal.B1;
    B2 = cal.B2;

    ret &= bmp180_start_temp(&t);
    UT = (long)t;
    *temp = t;
    ret &= bmp180_start_druck(&p, oss);
    UP = (long)p;
    *press = p;

    X1 = (((UT - AC6) * AC5)>>15);
    X2 = (MC<<11) / (X1 + MD);
    B5 = X1 + X2;
    T = ((B5 + 8L)>>4);
    *temperatur = T;

    /* Musterwerte laut Datenblatt */
    oss = 0;
    AC1 = 408;
    AC2 = -72;
    AC3 = -14383;
    AC4 = 32741;
    AC5 = 32757;
    AC6 = 23153;
    B1 = 6190;
    B2 = 4;
    MB = -32768;
    MC = -8711;
    MD = 2868;

    UP = 23843;
    B5 = 2399;

    #define SCROLL_CAL_VALUE 20

    char Buffer[20];

    // strcpy(Buffer, "AC1 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC1);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC2 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC2);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC3 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC3);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC4 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC4);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC5 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC5);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "AC6 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", AC6);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "MB : ");
    // sprintf(Buffer+strlen(Buffer), "%i", MB);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "MC : ");
    // sprintf(Buffer+strlen(Buffer), "%i", MC);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "MD : ");
    // sprintf(Buffer+strlen(Buffer), "%i", MD);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "B1 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", B1);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);
    //
    // strcpy(Buffer, "B2 : ");
    // sprintf(Buffer+strlen(Buffer), "%i", B2);
    // scroll_display(Buffer,SCROLL_CAL_VALUE);

    B6 = B5 - 4000;
    X1 = (B2 * (B6 * B6 >> 12)) >> 11;
    X2 = AC2 * B6 >> 11;
    X3 = X1 + X2;
    B3 = (((AC1 * 4 + X3) << oss) + 2) >> 2;
    X1 = AC3 * B6 / 8192;
    X2 = (B1 * (B6 * B6 >> 12)) >> 16;
    X3 = ((X1 + X2) + 2) >> 2;
    B4 = AC4 * (unsigned long)(X3 + 3276 >> 15;
    B7 = ((unsigned long)UP - B3) * (50000 >> oss);

    if (B7 < 0x80000000)
    p = (B7 * 2) / B4;
    else
    p = (B7 / B4) * 2;


    X1 = (p >> * (p >> ;
    X1 = (X1 * 303 >> 16;
    X2 = (-7357 * p) >> 16;
    long temp_1;

    *druck = p + ((X1 + X2 + 3791) >> 4);

    strcpy(Buffer, "Druck : ");
    sprintf(Buffer+strlen(Buffer), "%ld", *druck);
    scroll_display(Buffer,SCROLL_CAL_VALUE);


    return ret;
    }
    Kommt irgendein anderer Wert raus...

    Scheint als würde mit den Zeigern irgendwas nicht richtig laufen?
    Geändert von Janiiix3 (20.05.2015 um 11:18 Uhr)
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 10.02.2012, 07:54
  2. I2C oder UART?
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 29.07.2011, 21:05
  3. Problem mit I2C Sensor DRMOD-I2C-RVI
    Von muerzi im Forum Sensoren / Sensorik
    Antworten: 23
    Letzter Beitrag: 22.02.2010, 19:29
  4. Problem: Zwei MEGA8 via I2C-Bus koppeln (mit I2C-slave-Lib)
    Von Ulfens im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 11.01.2006, 16:25
  5. I2C RN-Motor Doku oder Software Problem ?
    Von fwallenwein im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 01.11.2004, 20:21

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests