- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 28

Thema: BMP180 --> Druck oder I2C Problem ?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Hallo sast,

    nur wieso klappt es dann mit den Musterwerten aus dem Dateblatt und mit einigen Sensoren ? Ist schon komisch...
    Würdest du mir deine Library zur Verfügung stellen?

    & was vill. noch wichtig ist, deine I2C Routine. Ist die Hardware basierend oder auf reiner Software ?
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Das I2C Zeug ist von hier
    Code:
    #ifndef _I2CMASTER_H
    #define _I2CMASTER_H   1
    /************************************************************************* 
    * Title:    C include file for the I2C master interface 
    *           (i2cmaster.S or twimaster.c)
    * Author:   Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
    * File:     $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
    * Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
    * Target:   any AVR device
    * Usage:    see Doxygen manual
    **************************************************************************/
    Lesen und schreiben sieht so aus:
    Code:
    char bmp180_readByte(char address, char *value)
    {
        unsigned char data[1];
    
        data[0] = address;
        if (bmp180_readBytes(data,1))
        {
            *value = data[0];
            return 1;
        }
        value = 0;
        return 0;
    }
    
    char bmp180_readUByte(char address, unsigned char *value)
    {
        unsigned char data[1];
    
        data[0] = address;
        if (bmp180_readBytes(data,1))
        {
            *value = data[0];
            return 1;
        }
        value = 0;
        return 0;
    }
    
    char bmp180_readInt(char address, int *value)
    {
        unsigned char data[2];
    
        data[0] = address;
        if (bmp180_readBytes(data,2))
        {
            *value = (((int)data[0]<<8)|(int)data[1]);
            return 1;
        }
        value = 0;
        return 0;
    }
    
    char bmp180_readUInt(char address, unsigned int *value)
    {
        unsigned char data[2];
    
        data[0] = address;
        if (bmp180_readBytes(data,2))
        {
            *value = (((unsigned int)data[0]<<8)|(unsigned int)data[1]);
            return 0;
        }
        value = 0;
        return 1;
    }
    
    char bmp180_writeByte(char address, char value)
    {
        unsigned char data[2];
    
        data[0] = address;
        data[1] = value;
        if (bmp180_writeBytes(data,1))
        {
            return 1;
        }
        value = 0;
        return 0;
    }
    
    char bmp180_readBytes(unsigned char *values, char length)
    {
        unsigned char ret, res = 0, zc = 0;
        unsigned char addr = values[0];
                    
        while(zc < length)
        {
            ret = i2c_start(BMP180+I2C_WRITE);        // ret=0 -> Ok, ret=1 -> no ACK
            if (!ret)
            {
                ret = i2c_write(addr + zc);                       // write Instruction Byte
                res = res + ret;
                i2c_stop();                                // set stop conditon = release bus
            } 
            res = res + ret;
            ret = i2c_rep_start(BMP180+I2C_READ);        // ret=0 -> Ok, ret=1 -> no ACK
            if (!ret)
            {
                values[zc] = i2c_readNak();                    // read one byte
                res = res + ret;
                i2c_stop();                                // set stop conditon = release bus
            }
            res = res + ret;
            if(res) return 0;
            zc++;
        }
        return 1;
    }
    
    char bmp180_writeBytes(unsigned char *values, char length)
    {
        unsigned char ret, res = 0, zc = 0;
        unsigned char addr = values[0];
    
        while(zc < length)
        {
            ret = i2c_start(BMP180+I2C_WRITE);        // ret=0 -> Ok, ret=1 -> no ACK
            if (!ret)
            {
                ret = i2c_write(addr + zc);                       // write Instruction Byte
                res = res + ret;
                ret = i2c_write(values[zc + 1]);                       // Date Byte
                res = res + ret;
                i2c_stop();                                // set stop conditon = release bus
            }
            res = res + ret;
            if(res) return 0;
            zc++;
        }
        return 1;
    }
    Ich hab auch nur 3 Stück in Benutzung. Wenn damit die selben Fehler auftreten, dann liegts an den Sensoren oder irgend etwas anderem. Ist auch schon wieder eine Weile her. Ich sammle zwar die Werte noch, aber werte die zZ nicht aus.

    Die cal Werte je Sensor muss man auch nur einmal auslesen. Laut Hersteller ändern die sich ja lebenslang nicht mehr. Wichtig ist nur, dass du auch die richtigen cal Werte zur Berechnung des jeweiligen Sensors verwendest. Die unterscheiden sich ja doch etwas. Aber das hast du sicher beachtet.

    雅思特史特芬
    开发及研究

  3. #3
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Danke!

    Und die ganzen Strukturen? Hast du keine BMP180.c ?

    - - - Aktualisiert - - -

    Die cal Werte je Sensor muss man auch nur einmal auslesen. Laut Hersteller ändern die sich ja lebenslang nicht mehr. Wichtig ist nur, dass du auch die richtigen cal Werte zur Berechnung des jeweiligen Sensors verwendest. Die unterscheiden sich ja doch etwas. Aber das hast du sicher beachtet.


    Die Kalibrationswerte habe ich von jedem Sensor einzeln ausgelesen und mit den entsprechenden Sensoren verrechnen lassen. Das sollte wohl gestimmt haben.
    Ich würde jetzt gerne mal deine Routine ausprobieren, ob die Sensoren wirklich einen weg haben. Sonst laufe ich die ganze Zeit auf dem selben Weg hin und her... Ohne Erfolg!
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Code:
    #define BMP180                0xEE
    #define BMP180_SCO            5
    
    typedef struct bmp180_calc
    {
        int AC1;
        int AC2;
        int AC3;
        unsigned int AC4;
        unsigned int AC5;
        unsigned int AC6;
        int B1;
        int B2;
        int MB;
        int MC;
        int MD;
    } bmp180_calc_t;
    
    
    extern char bmp180_get_cal_param(bmp180_calc_t *cal);
    extern char bmp180_readBytes(unsigned char *values, char length);
    extern char bmp180_readInt(char address, int *value);
    extern char bmp180_readUInt(char address, unsigned int *value);
    extern char bmp180_readByte(char address, char *value);
    extern char bmp180_readUByte(char address, unsigned char *value);
    extern char bmp180_writeBytes(unsigned char *values, char length);
    
    extern char bmp180_writeByte(char address, char value);
    extern char bmp180_start_temp(int *value);
    extern char bmp180_start_druck(long *value, unsigned char oss);
    extern char bmp180_get_temp(bmp180_calc_t cal, long *temperatur);
    extern char bmp180_get_druck(bmp180_calc_t cal, long *druck, unsigned char oss, long *temperatur, int *temp, long *press);
    extern char bmp180_online(char *id);
    Den Rest schaffst du jetzt allein.

    雅思特史特芬
    开发及研究

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 10.02.2012, 06:54
  2. I2C oder UART?
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 29.07.2011, 20:05
  3. Problem mit I2C Sensor DRMOD-I2C-RVI
    Von muerzi im Forum Sensoren / Sensorik
    Antworten: 23
    Letzter Beitrag: 22.02.2010, 18: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, 15: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, 19:21

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress