MPU-9150 + Arduino Leonardo

immure
Offline
Зарегистрирован: 28.08.2013

Всем привет!

Имеется arduino leonardo и MPU-9150 (https://www.sparkfun.com/products/11486). В интернете находил различные способы подключения датчика к ардуино:

1. http://www.egr.msu.edu/classes/ece480/capstone/spring13/group08/documents/nori.pdf

2. http://forum.arduino.cc/index.php?PHPSESSID=deoo9fkjr9v9u3j1k21hdsdnm3&topic=154023.msg1155129#msg1155129 ,

а также различные скетчи для взаимодействия с датчиком:

1. http://playground.arduino.cc/Main/MPU-9150

2. http://playground.arduino.cc/Main/I2cScanner

3. https://github.com/sparkfun/MPU-9150_Breakout/blob/master/firmware/MPU6050/Examples/MPU9150_raw/MPU9150_raw.ino

 

Ни один вариант подключения и кода не заработал, в последнем варианте кода выдал MPU6050 connection failed. Может, кто-нибудь имеет опыт работы с данным сенсором или аналогичными? 

maksim
Offline
Зарегистрирован: 12.02.2012

Идем в Контроллеры Arduino -> Leonardo и внимательно читаем, читаем..., читаем..., и..., опа на:

  • TWI: 2 (SDA) и 3 (SCL). Посредством выводов осуществляется связь I2C (TWI), для создания которой используется библиотека Wire.

Дальше обьяснять надо?

immure
Offline
Зарегистрирован: 28.08.2013

Да, я пробовал разные схемы соединения, приведенные в моем сообщении. К сожалению, ни один вариант не заработал. То, что SDA и SCL используется через Wire - это понятно.

maksim
Offline
Зарегистрирован: 12.02.2012

immure пишет:

То, что SDA и SCL используется через Wire - это понятно.

А то что SDA и SCL на леонардо находятся на 2 и 3 цифровых выводах это вам понятно?

immure
Offline
Зарегистрирован: 28.08.2013

У меня сейчас подключение такое:

IMU 9150 - Leonardo

GND <-> GND

VCC <-> 3.3V

SDA <-> 2 (digital)

SCL <-> 3 (digital)

код пробовал в частности этот:

#include <Wire.h>

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial){
  }
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    Serial.println("Scanning 1");
    error = Wire.endTransmission();
    Serial.println("Scanning 2");
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

У меня доходит до Serial.println("Scanning 1"), а дальше зависает при выполнении error = Wire.endTransmission()