Skocz do zawartości

Moduł LSM303D problem z komunikacją


Czaro

Pomocna odpowiedź

Witam, pracuję z modułem LSM303D. Napisałem krótki sketch do sprawdzenia połączenia (I2C). Przy odczytaniu rejestru WHO AM I moduł wypluwa same jedynki 0xff zamiast 0x49. Podłączyłem się pod A5 i A4 podciągając rezystorami 4k7 pod 3v3. Nie mam pomysłu jak to naprawić

#include <Wire.h>
#define adressWrite 0x3a //adress of device while SDO connected to the VDD
#define adressRead 0x3b
#define regAdress 0b0001111

uint8_t who_am_i;
//uint8_t deviceAdress;
void setup()
{
 Wire.begin();
 Serial.begin(9600);
}

void loop()
{
 Wire.beginTransmission(adressWrite);
 Wire.write(byte(regAdress));
 //deviceAdress = Wire.read();
 Wire.endTransmission(adressWrite);
 Wire.beginTransmission(adressRead);
 Wire.requestFrom(adressRead, 8 );

 who_am_i = Wire.read();
 Wire.endTransmission(adressRead);
 //Serial.println(deviceAdress);
 Serial.println(who_am_i);
 delay(100);
}
Link do komentarza
Share on other sites

Układów z początkiem nazwy 303D jest kilka rodzajów i bardzo różnią się interfejsem - w szczególności adresami I2C i położeniem wewnętrznych rejestrów. Może zamiast rozkminiać takie szczegóły, użyj gotowej biblioteki obsługującej wszystkie odmiany 303:

https://github.com/pololu/lsm303-arduino

Są tam też przykłady użycia - wyglądają dość prosto.

Czy Twoje Arduino pracuje z 5V? Bo ten czujnik tego nie lubi. Upewnij się, że biblioteka nie włącza rezystorów pullup na pinach I2C procesora.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.