Ich versuche mit dem folgenden simplen Code einen HMC5883L (Kompass) am
Wemos D1 Mini auszulesen. Obwohl ich mit dem Oszi an den Pins 4 u. 5 den
Takt bzw. gesendete Daten nachweisen kann, kommt von dem Chip selbst
keine Antwort. Ich habe inzwischen 3 Stück (frisch aus der Tüte)
ausprobiert, so dass es nicht sehr wahrscheinlich ist, dass die alle
drei defekt sind.
Ein an den gleichen Pins ersatzweise angeschlossener Gyro-Sensor MPU6050
benötigt freilich einige andere Init-Bytes, aber der funktioniert sofort
am Wemos D1 Mini.
Warum läuft das Kompass-Dingens nicht? (an einem UNO läuft der Code
dagegen sofort). SDA und SCL hab ich auch mehrmals zum Test vertauscht
... nix. Auch die PIN-Defs bei Wire.begin mit allen anderen Pins
ausprobiert ... Aus dem Loop kommt immer nur "no data" :-(
1 | #include <Wire.h>
|
2 | byte adr = 0x1E;
|
3 |
|
4 | void setup()
|
5 | {
|
6 | Serial.begin(9600);
|
7 | Wire.begin(4,5);
|
8 | wsend2(adr,0x02,0x00); //Mode-Register, kontinuierliches Messen
|
9 | }
|
10 |
|
11 | void loop()
|
12 | {
|
13 | int x,y,z;
|
14 | wsend1(adr,0x03); //Leseregister X MSB
|
15 | Wire.requestFrom(adr, 6);
|
16 | if(6<=Wire.available())
|
17 | {
|
18 | x = Wire.read()<<8; x |= Wire.read(); //X lsb
|
19 | z = Wire.read()<<8; z |= Wire.read(); //Z lsb
|
20 | y = Wire.read()<<8; y |= Wire.read(); //Y lsb
|
21 | Serial.println(String(x)+" "+String(y)+" "+String(z));
|
22 | }
|
23 | else Serial.println("no data");
|
24 |
|
25 | delay(500);
|
26 | }
|
27 |
|
28 | void wsend1(byte adr, byte data1)
|
29 | {
|
30 | Wire.beginTransmission(adr);
|
31 | Wire.write(data1);
|
32 | Wire.endTransmission();
|
33 | }
|
34 |
|
35 | void wsend2(byte adr, byte data1, byte data2)
|
36 | {
|
37 | Wire.beginTransmission(adr);
|
38 | Wire.write(data1);
|
39 | Wire.write(data2);
|
40 | Wire.endTransmission();
|
41 | }
|