mpu9150

Ciao a tutti ,

ho acquistato da po un mpu 9150,
sto usando questo codice per fare della prove

// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include "Wire.h"


// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "I2Cdev.h"
#include "MPU6050.h"


// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 accelgyro;


int16_t ax, ay, az;
int16_t gx, gy, gz;
int16_t mx, my, mz;


#define LED_PIN 13
bool blinkState = false;


void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();


    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(57600);


    // initialize device
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();


    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");


    // configure Arduino LED for
    pinMode(LED_PIN, OUTPUT);
}


void loop() {
    // read raw accel/gyro measurements from device
    accelgyro.getMotion9(&ax, &ay, &az, &gx, &gy, &gz, &mx, &my, &mz);


    // these methods (and a few others) are also available
    //accelgyro.getAcceleration(&ax, &ay, &az);
    //accelgyro.getRotation(&gx, &gy, &gz);


    // display tab-separated accel/gyro x/y/z values
    Serial.print("acc:\t");
    Serial.print(ax/1638.4); Serial.print("\t");
    Serial.print(ay/1638.4); Serial.print("\t");
    Serial.print(az/1638.4); Serial.print("\t");
    
    Serial.print("giroc:\t");
    Serial.print(gx/131); Serial.print("\t");
    Serial.print(gy/131); Serial.print("\t");
    Serial.print(gz/131); Serial.print("\t");
    
    Serial.print("Magrn:\t");
    Serial.print(0.3/mx); Serial.print("\t");
    Serial.print(0.3/my); Serial.print("\t");
    Serial.print(0.3/mz);
    Serial.println();


    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
    delay(100);
    
}

per codificare i dari del giroscopio divido per 131 per il accelerometro divido per 1638.4 mentre per il magnetrometro moltiplico per 0.3.

il prb è proprio sui dati del magnetometro che secondo me non sono significativi.

Riuscite a dirmi se i calcoli sono corretti?
Inoltre ho letto nei forum di algoritmi che mettono insieme tutti questi dati per compensare eventuali errori di lettura, riuscite a spiegarmi?

Ultima domanda dal datasheet ho letto che si possono variare le frequanze di lettura modificando il registro AFS_SEL, mi potete aiutare?

Grazie in anticipo.

Massimo