i2C UNO vs MEGA

Hallo
ich möchte einen Beschleunigungssensor GY-521 zum laufen bringen.

folgender Code funktioniert auf dem Uno tadellos, auf dem Mega jedoch nicht.

Habe auf dem Uno SDA SCL PINs verwendet auf dem Mega 20/21

//
// * Die Anschlussbelegung am Arduino Mega 2560 ist wie folgt:
// *  GY-521 VCC -> Arduino 5V
// *  GY-521 SCL -> Arduino SCL (Communication, Pin 21)
// *  GY-521 SDA -> Arduino SDA (Communication, Pin 20)
// 
// Inkludieren der Bibliothek fuer die I2C-Schnittstelle.
#include <Wire.h>
// MPU-6050 I2C Adresse
#define MPU6050_ADDR           0x68
// MPU-6050 Register Adressen (sehr unvollstaendig):
// Hier steht das High-Byte der Beschleunigung entlang der X-Achse.
#define MPU6050_ACCEL_X_OUT_H  0x3B
// Hier kann der Sensor aufgeweckt werden.
#define MPU6050_PWR_MGMT_1     0x6B
// Variablen als Zwischenspeicher fuer die aktuellen Messwerte.
int16_t AccX, AccY, AccZ, Temp, GyrX, GyrY, GyrZ;



void setup() {

  Wire.begin();
  Serial.begin(9600);
//  mlx.begin();
   
  Wire.beginTransmission(MPU6050_ADDR);
  Wire.write(MPU6050_PWR_MGMT_1);
  Wire.write(0);
  Wire.endTransmission(true);
}

void loop() {

  Wire.beginTransmission(MPU6050_ADDR);
  Wire.write(MPU6050_ACCEL_X_OUT_H);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU6050_ADDR, 14, true);
  AccX = (Wire.read()<<8 | Wire.read())/16384.*9.81;
  AccY = (Wire.read()<<8 | Wire.read())/16384.*9.81;
  AccZ = (Wire.read()<<8 | Wire.read())/16384.*9.81;
  Temp = Wire.read()<<8 | Wire.read();
  GyrX = (Wire.read()<<8 | Wire.read())/(131.*25.);
  GyrY = (Wire.read()<<8 | Wire.read())/(131.*25.);
  GyrZ = (Wire.read()<<8 | Wire.read())/(131.*25.);

  Serial.print("A;"); Serial.print(AccX);
  Serial.print(";"); Serial.print(AccY);
  Serial.print(";"); Serial.println(AccZ);
  Serial.print("G;"); Serial.print(GyrX);
  Serial.print(";"); Serial.print(GyrY);
  Serial.print(";"); Serial.println(GyrZ);

  Serial.print("T;"); Serial.println(Temp/340.0+36.53);

  delay(100);

}

weiß jemand wie das sein kann?

welche Funktion haben SCL1 und SDA1 neben dem AREF Pin?

welche Funktion haben SCL1 und SDA1 neben dem AREF Pin?

Du meinst SCL und SDA neben dem AREF Pin! Die sind für I2C vorgesehen.

Warum steht dann eine 1 dahinter?

Ich habe keinen Mega, aber beim Due ist auf SCL1 und SDA1 die zweite I2C Schnittstelle (Wire1).

Ist wohl beim Mega auch so, aber da nicht standardmäßig aktiviert Edit: Oder die Pins sind auf dem Mega nur für den Due freigehalten ? (Scheinen, laut Schaltplan mit dem normalen SDA und SCL verbunden zu sein. Aber auf dem Board dann anders beschriftet ?)

Braucht man z.B. um den einen Bus mit 100 und den andern mit 400 kHz zu betreiben, wenn es da inkompatible Teilnehmer gibt. Oder um einen Multiplexer einzusparen. Manche Boards haben sogar ein Wire2 und Wire3 ...

Ich habe keinen Mega, aber beim Due ist auf SCL1 und SDA1 die zweite I2C Schnittstelle (Wire1).

Gibts beim Mega nicht.

aber da nicht standardmäßig aktiviert

Wo nix is, kann man auch nix aktivieren.

(Scheinen, laut Schaltplan mit dem normalen SDA und SCL verbunden zu sein.

Richtig! So wird es von der Arduino R3 Spezifikation gefordert.

Aber auf dem Board dann anders beschriftet ?)

Sehe ich nicht. Auf meinen Megas ist da nix mit SCL1 usw beschriftet.

Manche Boards haben sogar ein Wire2 und Wire3 ...

Exoten. Außerdem voll nevig, da die üblichen Libs IMMER NUR Wire nutzen. Keine Alternative (Wire1,Wire2,...) zulassen.

combie: Richtig! So wird es von der Arduino R3 Spezifikation gefordert.

Nur der Vollständigkeit halber, halten wir fest: Auch auf einem original Due steht R3, da ist es aber nicht so.

Zurück zur Frage:

Beim Fragesteller steht da SDA1 und SCL1. Ist also offenbar kein originaler Mega.

Normalerweise sollte Code der Wire benutzt portabel sein, abgesehen von den unterschiedlichen Pinpositionen, und vorhandenen oder nicht vorhandenen Pull-Up Widerständen auf dem Board und ggf. 3,3 oder 5 V.

Mit dem Code kommt man da wohl bei der Fehlersuche nicht weiter, da würde ich eher messen, ob I2C bei diesem Board, was immer es ist, auch da ist, wo es sein sollte. Hoffentlich kein Due Klon, der mit 5 V beschickt wurde.

Nur der Vollständigkeit halber, halten wir fest: Auch auf einem original Due steht R3, da ist es aber nicht so.

Och... Vielleicht habe ich da ja was verwechselt...

Aber hier dreht sichs ja auch nicht zum den DUE, sondern um den Mega. Und bei dem gibt es eben nur Wire und nix Wire1

Auch ich hab verstanden daß es um einen (Arduino) MEGA (2560) geht. Grüße Uwe

Auch ich habe verstanden, dass es um ein Board mit SDA1 und SCL1 neben AREF geht, und dass das beim (Arduino) Mega nicht der Fall ist.