Auf diese Art und Weise setzt Du die Bits 3-5 (Ext-Sync-Set) aber auch auf Null.
Du musst das Register erst lesen und anschließend die Bits 0 bis 2 löschen, sowie mit 0x06 „odern“.
Ob das jetzt so ganz korrekt ist weiß ich nicht… ich schreibe aus dem Gedächtnis. Das ist nicht mehr das Beste. Aber so in der Art…
Super! Danke das ist die Lösung. Low Pass Filter funktioniert - bzw. sehe jetzt dass er nicht die Lösung für mein Problem ist und ich auf einen Magnetometer umsteigen muss
Ich habe mir den Quellcode des MPU6050_light libraries angeschaut und muss mich korrigieren. Es wird explizit 0 in das Config Register geschrieben. Somit muss man die alten Werte nicht lesen und modifizieren aber auch jede Modifikation am Config Register nach "Begin" ausführen. Daran lag mein Fehler.
byte MPU6050::begin(int gyro_config_num, int acc_config_num){
// changed calling register sequence [https://github.com/rfetick/MPU6050_light/issues/1] -> thanks to augustosc
byte status = writeData(MPU6050_PWR_MGMT_1_REGISTER, 0x01); // check only the first connection with status
writeData(MPU6050_SMPLRT_DIV_REGISTER, 0x00);
writeData(MPU6050_CONFIG_REGISTER, 0x00);
setGyroConfig(gyro_config_num);
setAccConfig(acc_config_num);
this->update();
angleX = this->getAccAngleX();
angleY = this->getAccAngleY();
preInterval = millis(); // may cause lack of angular accuracy if begin() is much before the first update()
return status;
}
Jetzt (und nachdem ich den Gyro weit vom Motor entfernt habe) sieht es schon viel besser aus
Das mag sein. Trotzdem ist es keine gute Idee, wenn man nur bestimmte Bits in einem Register setzen will, das gesamte Register zu überschreiben. Der Zustand des Registers könnte sich im Laufe der Anwendung ja noch ändern.