Hallo,
habe gerade die Beschreibung des Compass Moduls GY-271 vor mir welches am Arduino an A5 (für SCL) und A4 (für SDA) angeschlossen wird und mit I2C kommuniziert.
Me
ine Frage: Geht das mit wahrlosen Analog-In-Anschlüssen und warum werden nicht die Anschlüsse SCL und SDA am Arduino verwendet?
Vielen Dank!
Wenn Du noch sagen würdest, welchen Arduino Du meinst, wäre es einfacher.
Wenn es der UNO ist, dann sind bei neueren Modellen A5 nach SCL und A4 nach SDA verbunden.
SCL und SDA sind einfach zusätzliche Kontakte.
Bei anderen Arduinos sind es andere Pins.
Gruß Tommy
Hallo,
ich habe gerade einen Mega vor mir der SDA auf Pin 20 hat und SCL auf Pin 21.
Wenn ich dich richtig verstanden habe, sind Pin A5 mit Pin21-SCL verbunden und A4 mit Pin20-SDA und es ist egal welche Anschlüsse ich verwende?
Robitobi:
Wenn ich dich richtig verstanden habe, sind Pin A5 mit Pin21-SCL verbunden und A4 mit Pin20-SDA und es ist egal welche Anschlüsse ich verwende?
Das gilt nur für den UNO.
Gruß Tommy
Robitobi:
Hallo,
habe gerade die Beschreibung des Compass Moduls GY-271 vor mir welches am Arduino an A5 (für SCL) und A4 (für SDA) angeschlossen wird und mit I2C kommuniziert.
Me
ine Frage: Geht das mit wahrlosen Analog-In-Anschlüssen und warum werden nicht die Anschlüsse SCL und SDA am Arduino verwendet?
Vielen Dank!
Robitobi:
Hallo,
habe gerade die Beschreibung des Compass Moduls GY-271 vor mir welches am Arduino an A5 (für SCL) und A4 (für SDA) angeschlossen wird und mit I2C kommuniziert.
Me
ine Frage: Geht das mit wahrlosen Analog-In-Anschlüssen und warum werden nicht die Anschlüsse SCL und SDA am Arduino verwendet?
Vielen Dank!
Nix "anstatt"
Für alle Boards mit Atmega328, die sich Arduino-kompatibel nennen, gilt:
A4 IST SDA und A5 IST SCL
Bei MANCHEN Atmega328-Boards, wie den Boards im R3-Design, sind für A4 und A5 extra Pins herausgeführt, die mit SDA und SCL beschriftet sind. Aber natürlich sind diese Extra-Pins mit A4 und A5 verbunden, weil das die I2C-Pins des Atmega328 im Arduino Pin-Layout sind.
Bei anderen Controllern sind es andere Pins.
Beim Atmega328 sind es A4 und A5.
Siehe auch:Wire - Arduino Reference
Vielen Dank für die Antworten und den Link - dann muss ich 20 und 21 nehmen beim Mega.
Noch eine letzte Frage :-* : Ist die Bibliothek dann auch für den Mega funktionsfähig?
Wenn die Lib gut programmiert ist, sollte sie die Unterschiede erkennen. Mehr kann ich nicht sagen, da ich die Lib nicht kenne.
Gruß Tommy
Der Software ist egal wo die Pins sitzen. Das ist eine reine Hardware-Sache
Robitobi:
dann muss ich 20 und 21 nehmen beim Mega.
Du kannst auf allen Arduino-Modellen SDA und SCL nehmen, egal an welchen pins die I2C Scnittstelle physisch ist.
Grüße Uwe
Ja, hab in der HMC5883L.cpp und in der .h auch nichts hierzu gefunden
Der Kompass spuckt jetzt noch wirre Zahlen aus ... vielleicht stimmt die I2C-Adresse nicht oder vielleicht sendet der Arduino ein Störfeld (5cm weg)? Pull Up's sind beim Mega auf SDL und SDA angeblich schon verbaut.
Na ja, bisher mal vielen Dank.
Der Kompass spuckt jetzt noch wirre Zahlen aus
Die wenigsten Libraries prüfen, ob auf der angefragten I2C-Adresse überhaupt jemand reagiert.
Probier erstmal mal einen I2CScanner-Sketch.
I2CScanner-Sketch
Arduino Playground - I2cScanner.
Wegen der wirren Zeichen (am seriellen Monitor?)
Stimmen denn die serielle Einstellung zwischen
Mega und PC ser. Monitor ?
Stefan
Hallo Stefan,
mehre Scanner getestet, finden alle einen Slave mit 0xD oder 0x0D.
Habe dann in der HMC5883L.h die Adresse folgendermaßen eingetragen:
#define HMC5883L_Address 0x0D
In einem anderen Programm wo nur die wire.h inkludiert werden muss habe ich die die Adresse
direkt in der ino eingetragen:
........
#include <Wire.h> //I2C Arduino Library
#define HMC5883L_ADDR 0xD
bool haveHMC5883L = false;
.......
Der GY-271 hängt an meinem Mega an Port 20 (SDA) und 21(SDL)
Die Übertragungsgeschwindigkeit ist 9600.
Frage am Rande: Die Adressen müssen doch zwischen 0x51 und 0x57 liegen, oder?
Zahlen bleiben leider wirr.
Gruß
Frank
Zeig doch mal ein Foto deiner "wirren Zeichen"
In welchem Bereich die I2C-Adressen liegen müssen, findest du im Datenblatt deines I2C-Bausteins.
...mit wirren Zahlen meine ich sowas ....
471.04 824.32 0.00
-14837.76 10.12 471.04
21.16 21.16 -13424.64
-165.60 31.28 22374.40
-14837.76 42.32 8007.68
10896.48 52.44 3768.32
bei
Serial.print(scaled.XAxis);
Serial.print(" ");
Serial.print(scaled.YAxis);
Serial.print(" ");
Serial.println(scaled.ZAxis);
Robitobi:
...mit wirren Zahlen meine ich sowas ....471.04 824.32 0.00
-14837.76 10.12 471.04
....
Dann hast du ja zumindest eine richtige I2C-Adresse.
Die Werte kann ich nicht erklären.
mehre Scanner getestet, finden alle einen Slave mit 0xD oder 0x0D.
Das kommt dir nicht komisch vor?
Habe dann in der HMC5883L.h die Adresse folgendermaßen eingetragen:
#define HMC5883L_Address 0x0D
Wie kommst du auf die lustige Idee, dass das zielführend sein könnte?
Tipp:
Das Datenblatt lässt dafür keinen Raum.
Robitobi:
Pull Up's sind beim Mega auf SDL und SDA angeblich schon verbaut.
Wer sagt das? Das sollte eine Falschinformation sein.
Also fehlen bei Dir wohl die Pullupwiderstände.
Gruß Tommy
Ok, danke ... dann probiere ich das mit den Pull Up's habe aber das gefunden:
Arduino Mega 2560 has onboard pull-up resistors.
The Arduino Mega 2560 has 10k pull-up resistors on the SDA and SCL line to 5V. Therefore it is less compatible with a 3.3V I2C bus. A level shifter is recommended for the Arduino Mega 2560 to protect 3.3V sensors connected to the I2C bus.
Robitobi:
Die Übertragungsgeschwindigkeit ist 9600.
Welche Übertragungsgeschwindigkeit?
Ich bestätige die vorhandenen Pullupwiderstände siehe
Oben mitte.
Grüße Uwe