Мистика и I2C

spin7ion
Offline
Зарегистрирован: 27.05.2012

Здравствуйте!

Я пытаюсь подключить гироскоп по I2C к arduino Mega и у меня проблема. На mega виснет wire.transmit(), причем при подключении к uno тот же гироскоп и тот же код работают!

Вот подключение к uno:

Вот подключение к mega:

Вот код который выполняется и на той и на другой arduino:

#include <Wire.h>
#include <L3G.h>

L3G gyro;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  
  if (!gyro.init())
  {
    Serial.println("Failed to autodetect gyro type!");
    while (1);
  }

  gyro.enableDefault();
}

void loop() {
  gyro.read();

  Serial.print("G ");
  Serial.print("X: ");
  Serial.print((int)gyro.g.x);
  Serial.print(" Y: ");
  Serial.print((int)gyro.g.y);
  Serial.print(" Z: ");
  Serial.println((int)gyro.g.z);

  delay(100);
}

Ссылка на библиотеку: http://github.com/pololu/L3G

Я подозреваю неполадки в чипе, но почему-то у меня получается моргать светодиодами, подключенными к пинам I2C

staromand
Offline
Зарегистрирован: 17.09.2012

на первой фотке к УНО Вы подключаете шлейф к Analog IN, а на фотке с Мегой - к ШИМ

так и было задумано?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Подключает правильно (у меги i2c на ногах 20 и 21), но в одном из вариантов сигналы перепутаны. Здесь я табличку выкладывал.

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

staromand пишет:

на первой фотке к УНО Вы подключаете шлейф к Analog IN, а на фотке с Мегой - к ШИМ

так и было задумано?

Это вы о чем?
Есть такой интерфейс I2C, так вот на дуинах (AVR-ах и многих других МК) он реализован аппаратно и находится на конкретных ногах МК. Так вот на дуине УНО  I2C находится на 4 и 5 аналоговых входах, а на дуине МЕГА на 20 и 21 цифровых выводах.

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

Да вроде ничего не перепудано. SDA на 20 и А4, SCL на 21 и А5.

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

Проблема в несовместимости библиотек.
Вы случайно в Мегу и Уну не из разных версий IDE скейтч заливаете? Что значит "mega виснет wire.transmit()" ? компилятор ругается на wire.transmit()? Посмотрел библиотеку L3G, так вот в ней нет вообще такой функции wire.transmit(), там есть Wire.write(). Если не ошибаюсь то в более поздних версиях IDE как раз эта функция переименовывалась из wire.transmit() в Wire.write().

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

maksim пишет:

Да вроде ничего не перепудано. SDA на 20 и А4, SCL на 21 и А5.

Да, точно не перепутаны, я невнимательно посмотрел.

spin7ion
Offline
Зарегистрирован: 27.05.2012

maksim пишет:

Проблема в несовместимости библиотек.
Вы случайно в Мегу и Уну не из разных версий IDE скейтч заливаете? Что значит "mega виснет wire.transmit()" ? компилятор ругается на wire.transmit()? Посмотрел библиотеку L3G, так вот в ней нет вообще такой функции wire.transmit(), там есть Wire.write(). Если не ошибаюсь то в более поздних версиях IDE как раз эта функция переименовывалась из wire.transmit() в Wire.write().

Я использую arduino 1.0.1, и видимо я описался. Виснет на   Wire.endTransmission();

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

Так что значит "виснет"?

spin7ion
Offline
Зарегистрирован: 27.05.2012

Программа перестает выполняться, ничего не происходит, следующая команда не выполняется, в сериал не пишется. 

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

А попробуйте в Аrduino 1.0