Hey Leute,
ich arbeite mich gerade mit dem MPU6050 ein und glaube mittlerweile, dass die Wahl keine gute war.
Ich habe den ganzen Tag damit verbracht einigermaßen brauchbare Werte aus dem Ding zu bekommen.
Jetzt habe ich leider noch das Problem, dass sporadisch, mal nach 15 Minuten mal beim I2C Initialisieren, mal zwischen durch sich der Arduino aufhängt.
Ich habe Bibliotheken von Lauszus mit der Kalman Bibliothek, die Jeff Rowberg Bibliothek und von einem User hier aus dem Forum Krodal ausprobiert. Überall war es das gleiche, Absturz.
Beim Sketch von Kodal konnte ich den Fehler soweit eingrenzen, dass dieser beim Wire.write ein Returncode 4 bekommt. Bei Rowberg hängt er sich teilweise schon beim I2C Init auf.
int MPU6050_read(int start, uint8_t *buffer, int size)
{
int i, n, error;
//int tempBuffer = buffer;
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Serial.println(start);
n = Wire.write(start);
if (n == 4) {
Serial.println("begin");
Serial.println(start);
Serial.println(size);
}
if (n != 1)
return (-10);
n = Wire.endTransmission(false); // hold the I2C-bus
if (n == 4) {
Serial.println("end");
Serial.println(start);
Serial.println(size);
}
if (n != 0)
return (n);
// Third parameter is true: relase I2C-bus after data is read.
Wire.requestFrom(MPU6050_I2C_ADDRESS, size, true);
i = 0;
while(Wire.available() && i<size)
{
buffer[i++]=Wire.read();
}
if ( i != size)
return (-11);
return (0); // return : no error
}
Im Prinzip ist mir das egal, ob er mal für eine Sekunde keine Daten vom MPU6050 bekommt, er darf nur nicht aufhören zu arbeiten.
Meine Frage ist
-
Kann ich den Fehler abfangen und selber entscheiden was er macht? Ich dachte da an sowas, wie noch einmal ein Init versuchen, wenn ich den Arduino neustarte geht es ja auch wieder…
-
Kann man den Fehler weiter eingrenzen?
Ich habe hier eine Alternative zur I2C Initialisierung gefunden, welche ich noch testen will, ich befürchte aber, dass das nicht mein Problem löst. Sowie ich den Autor verstehe, geht es hier bei um mehrere Geräte am I2C Bus.
http://www.forward.com.au/pfod/ArduinoProgramming/I2C_ClearBus/index.html
gy_521_send_serial_mod.ino (39 KB)