Arduino Due mit MPU6050

hey Leute

habe ein kleines Problem bekomme immer diese Fehlermeldung : Arduino: 1.5.7 (Windows 7), Board: “Arduino Due (Programming Port)”

Mpu6050.ino: In function ‘void setup()’:
Mpu6050.ino:43:3: error: ‘TWBR’ was not declared in this scope

void setup() {
  Serial.begin(115200);
  Wire.begin();
  TWBR = ((F_CPU / 400000L) - 16) / 2; 

  i2cData[0] = 7; 
  i2cData[1] = 0x00;
  i2cData[2] = 0x00;
  i2cData[3] = 0x00;
  while (i2cWrite(0x19, i2cData, 4, false));
  while (i2cWrite(0x6B, 0x01, true));

auf meinem Uno funkt es ohne Probleme weis nur leider nicht genau was ich bei twbr ändern muss .

wäre cool wenn ihr mir hälfen würdet.
ah ja nd wenn mir wer die TWBR formel erklären würde wäre ich auch nicht sehr böße gg…

lg euer thomas

Der Due hat natürlich kein TWBR Register wie die AVR Prozessoren. Da müsstest du ins Datenblatt gucken wie das TWI/I2C Interface da aufgebaut ist. Oder vielleicht mal im Englischen Due Forum fragen:

Andererseits: bist du sicher dass das nicht mit der Standard I2C Frequenz geht? Mal probiert die Zeile wegzulassen?

Erklärung ist hier:

hey Serenifly
Danke für deine schnelle Antwort hab ide TWBR zeile mal weggelassen muss es noch scharf testen aber Sketch Prüfen/Übersetzen hat es mal überlebt.

da hätte ich auch selber drauf kommen können es einfach mal weg zu lassen…
fals es das war werd ich das in den nächsten tagen Mitteilen…

lg Thomas

Compilieren tut es natürlich. Das ist nur eine Zusatzeinstellung die die Standardeinstellungen des I2C Interfaces überschreibt. Funktionalität ist eine andere Frage.

Wie gesagt im Englischen Due Forum kennt man sich eher in den Eingeweiden des ARM Prozessors aus. Hier wirst du damit wohl keine Antwort finden die nicht gegoogelt ist.

ja kommt leider immer i2cWrite failed: 2

const uint8_t IMUAddress = 0x68; // AD0 is logic low on the PCB
const uint16_t I2C_TIMEOUT = 1000; // Used to check for errors in I2C communication

uint8_t i2cWrite(uint8_t registerAddress, uint8_t data, bool sendStop) {
  return i2cWrite(registerAddress, &data, 1, sendStop); // Returns 0 on success
}

uint8_t i2cWrite(uint8_t registerAddress, uint8_t *data, uint8_t length, bool sendStop) {
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  Wire.write(data, length);
  uint8_t rcode = Wire.endTransmission(sendStop); // Returns 0 on success
  if (rcode) {
    Serial.print(F("i2cWrite failed: "));
    Serial.println(rcode);
  }
  return rcode; // See: http://arduino.cc/en/Reference/WireEndTransmission
}

uint8_t i2cRead(uint8_t registerAddress, uint8_t *data, uint8_t nbytes) {
  uint32_t timeOutTimer;
  Wire.beginTransmission(IMUAddress);
  Wire.write(registerAddress);
  uint8_t rcode = Wire.endTransmission(false); // Don't release the bus
  if (rcode) {
    Serial.print(F("i2cRead failed: "));
    Serial.println(rcode);
    return rcode; // See: http://arduino.cc/en/Reference/WireEndTransmission
  }
  Wire.requestFrom(IMUAddress, nbytes, (uint8_t)true); // Send a repeated start and then release the bus after reading
  for (uint8_t i = 0; i < nbytes; i++) {
    if (Wire.available())
      data[i] = Wire.read();
    else {
      timeOutTimer = micros();
      while (((micros() - timeOutTimer) < I2C_TIMEOUT) && !Wire.available());
      if (Wire.available())
        data[i] = Wire.read();
      else {
        Serial.println(F("i2cRead timeout"));
        return 5; // This error value is not already taken by endTransmission
      }
    }
  }
  return 0; // Success
}

ich glaube ich habe da noch irgend wo einen hund drinnen