Мистика и I2C
- Войдите на сайт для отправки комментариев
Вс, 18/11/2012 - 17:00
Здравствуйте!
Я пытаюсь подключить гироскоп по 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
на первой фотке к УНО Вы подключаете шлейф к Analog IN, а на фотке с Мегой - к ШИМ
так и было задумано?
Подключает правильно (у меги i2c на ногах 20 и 21), но в одном из вариантов сигналы перепутаны. Здесь я табличку выкладывал.
на первой фотке к УНО Вы подключаете шлейф к Analog IN, а на фотке с Мегой - к ШИМ
так и было задумано?
Это вы о чем?
Есть такой интерфейс I2C, так вот на дуинах (AVR-ах и многих других МК) он реализован аппаратно и находится на конкретных ногах МК. Так вот на дуине УНО I2C находится на 4 и 5 аналоговых входах, а на дуине МЕГА на 20 и 21 цифровых выводах.
Да вроде ничего не перепудано. SDA на 20 и А4, SCL на 21 и А5.
Проблема в несовместимости библиотек.
Вы случайно в Мегу и Уну не из разных версий IDE скейтч заливаете? Что значит "mega виснет wire.transmit()" ? компилятор ругается на wire.transmit()? Посмотрел библиотеку L3G, так вот в ней нет вообще такой функции wire.transmit(), там есть Wire.write(). Если не ошибаюсь то в более поздних версиях IDE как раз эта функция переименовывалась из wire.transmit() в Wire.write().
Да вроде ничего не перепудано. SDA на 20 и А4, SCL на 21 и А5.
Да, точно не перепутаны, я невнимательно посмотрел.
Проблема в несовместимости библиотек.
Вы случайно в Мегу и Уну не из разных версий IDE скейтч заливаете? Что значит "mega виснет wire.transmit()" ? компилятор ругается на wire.transmit()? Посмотрел библиотеку L3G, так вот в ней нет вообще такой функции wire.transmit(), там есть Wire.write(). Если не ошибаюсь то в более поздних версиях IDE как раз эта функция переименовывалась из wire.transmit() в Wire.write().
Я использую arduino 1.0.1, и видимо я описался. Виснет на Wire.endTransmission();
Так что значит "виснет"?
Программа перестает выполняться, ничего не происходит, следующая команда не выполняется, в сериал не пишется.
А попробуйте в Аrduino 1.0