- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
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
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,

    Stimmt die Übertragungsgeschwindigkeit des II2-Buses?

    In BMP180.c werden 8MHz als Systemtakt angenommen.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #2
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Hallo,

    Stimmt die Übertragungsgeschwindigkeit des II2-Buses?

    In BMP180.c werden 8MHz als Systemtakt angenommen.

    MfG Peter(TOO)

    Hallo Peter,

    ich habe ja noch eine RTC mit an dem I²C Bus dass funktioniert klasse.

    - - - Aktualisiert - - -

    Zitat Zitat von sast Beitrag anzeigen
    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.

    Um jetzt ein Ergebniss zu bekommen...

    Welche Funktionen muss ich nacheinander aufrufen?
    Bei deinen Funktionen gibt es "start_messung" | "start_temperatur"...

    Was muss ich aufrufen um den Druck zu erhalten? (Sorry für die vielen Fragen!)
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Was muss ich aufrufen um den Druck zu erhalten? (Sorry für die vielen Fragen!)
    Wie würdest du das denn auf englisch formulieren? Steht doch bereits in meinem ersten Post.
    Du darfst auch gern in der Funktion den Quelltext lesen. Die Berechnung ist ans DB angelehnt und sollte für einen Eingelesenen verständlich sein.

    雅思特史特芬
    开发及研究

  4. #4
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Ich fange gerade erst mit "C" richtig an.

    char bmp180_get_cal_param(bmp180_calc_t *cal)
    Was muss ich denn für einen Parameter in der Funktion eingeben? Ich habe bisher nichts so wirklich mit "Pointern" gemacht.
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    bmp180_calc_t cal;
    char id = 0;

    if(bmp180_online(&id))
    {
    bmp180_get_cal_param(&cal);
    ...
    }

    // &cal liefert die Adresse vom Struct cal

    Man lernt am Besten, wenn man seine Fehler selber macht.

    雅思特史特芬
    开发及研究

  6. #6
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Muss erstmal mein ganzes Programm ausbauen.
    Schade das du daraus keine fertige Library gemacht hast. Wenn ich es hin bekommen habe, melde ich mich zurück.

    - - - Aktualisiert - - -

    Ich bekomme es leider noch nicht so wirklich mit der Struktur auf die Kette, wollte aus deinen Routinen jetzt eine Library erstellen und die Variablen in der Header Datei für "extern" bekannt geben.

    Was mache ich verkehrt ?

    #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 bmp180_calc_t cal;

    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);
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von Janiiix3 Beitrag anzeigen
    ich habe ja noch eine RTC mit an dem I²C Bus dass funktioniert klasse.
    Es gibt verschiedene maximale Geschwindigkeiten für den I2C.
    Zudem ist auch das Detail-Timing etwas unterschiedlich.

    Aufschluss geben die Datenblätter!
    Der RTC kann z.B. für eine höhere Bus-Geschwindigkeit ausgelegt sein, als deine Sensoren.

    Ursprünglich wurde der I2C mit 100kBit/s spezifiziert. Dann kamen 400kBit/s, 3,4 MBit/s, 1 MBit/s und als Letztes 5 MBit/s dazu. Wobei dies alles "bis zu" Werte sind, langsamer geht immer!
    Protokolle gibt es auch noch unterschiedliche.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Sobald du die .h einbindest, hast du doch bereits das struct. Das ist die komplette .h nur ohne #ifdef. Da solltest du kein extern mehr benötigen für das struct. Und der Rest war in der .c was du auch nur noch zusammenkopieren musst. Dann includest du noch die .h und die I2C und twi Geschichten und ab geht er. Ich wollte jetzt hier eigentlich kein c Tutorial draus machen.
    In deiner main.c brauchst du natürlich auch das bmp180.h als include.

    雅思特史特芬
    开发及研究

  9. #9
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    achso besten dank
    Angehängte Dateien Angehängte Dateien
    Geändert von Janiiix3 (19.05.2015 um 16:40 Uhr)
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Schon mal nicht verkehrt. Jetzt siehst du dir mal die i2cmaster.h an und überlegst, wozu da wohl die erste, zweite und letzte Zeile drin sind und wie du das eindeutig für dich anpassen kannst. Und dann kannst du die bmp180.h auch in die main includieren ohne das es gemeckertes gibt..

    雅思特史特芬
    开发及研究

Seite 1 von 2 12 LetzteLetzte

Ä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
  •  

LiFePO4 Speicher Test