Wemos D1 Mini: I2C finzt nicht.

OP (Firma: Q3) #6718701
Lesenswert?

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
}
Gast #6718840
Lesenswert?

Die häufigste Ursache für einen nicht funktionierenden I2C-Bus sind zu 
hohe oder fehlende Pullup-Widerstände. Bei 3.3 Volt würde ich mal 
1k0-1k2 probieren, die oft verwendeten 4k7 oder gar 10k sind viel zu 
hoch.

Häng mal ein Oszi an die Signale SDA und SCK/SDL und schau Dir die 
Signale an.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren