Pro micro Wire.endTransmission() не возвращает

У меня есть Arduino Pro Micro (синяя версия), и у меня возникли проблемы с использованием I2C. Чтобы проверить это, я использую приведенный ниже код, и результатом является бесконечная прямоугольная волна на линиях SCL и SDA, и я получаю только число 1 на выходе терминала. У меня есть подтягивающие резисторы на обоих проводах, по 2 Ком каждый. Поскольку плата использует ATMEGA32U4, я попробовал тот же код на голом MCU, и код работает так, как ожидалось. Разница между ними заключается в типе загрузчика. Голая печатная плата прошивается через USB с использованием заводского загрузчика (ATMEGA32U4-AU, QFP44). Отлаживая код, я обнаружил, что endTransmission не возвращается. У кого-нибудь есть идея, почему I2C не работает должным образом на модуле Pro Micro?

Спасибо!

#include <Wire.h>

void setup() {
  Serial.begin (115200);
  // Leonardo: дождитесь подключения последовательного порта
  while (!Serial)
    {
    }
  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0; 
  Wire.begin();
}  // завершение настройки

void loop() {
  byte count = 0;
  for (byte i = 1; i < 120; i++)
  {
    Serial.println(i);
    Wire.beginTransmission (i);
    Wire.endTransmission ();
    delay(10);
  }
}

, 👍1

Обсуждение

Что вы подразумеваете под "бесконечной прямоугольной волной"? Означает ли это, что и SDA, и SCL непрерывно пульсируют вечно, когда блокируется Wire.endTransmission ()?, @chrisl

Да, и это не прекращается. Форма сигнала выглядит хорошо, уровень сигнала равен VCC и GND для 1 и 0., @therman

М-м-м, странно. Происходит ли это также, когда к шине ничего не подключено?, @chrisl

Да, это то же самое. С подтягивающим резистором и без него., @therman

Чтобы было ясно, SCL и SDA не имеют к ним ** вообще ничего **, кроме подтягивающих резисторов и, возможно, вашего прицела?, @timemage

Да, это так., @therman

И ничего не печатается на последовательном мониторе? тогда я предполагаю, что ваш микроконтроллер сломан. Ваш набросок кажется мне вполне правдоподобным. И линии никогда не должны просто непрерывно пульсировать. Распространенная проблема - это застревание автобуса, потому что одна линия застревает на низком уровне, но я никогда не видел вашей проблемы. Можете ли вы сообщить нам частоту импульсов? Просто чтобы проверить, @chrisl

Те же мысли, что и у крисл. Полагаю, мне следует пойти еще дальше и спросить: что произойдет, если к Pro Micro вообще ничего не подключено, кроме USB-кабеля? Никаких внешних подтягивающих резисторов; для этого теста достаточно внутренних резисторов, которые включены для Wire.begin(). Никакого размаха. Только USB-кабель. Pro Micro * даже * не прикреплен к макетной плате (без пайки), просто плата установлена на чем-то непроводящем., @timemage

Я только что купил новый pro micro, и I2C работает. Может быть, другой действительно сломан. Странно... Спасибо за помощь!, @therman

Я не знаю, насколько это было бы полезно для кого-либо, но, похоже, технически это ** ответ ** на ваш вопрос. Таким образом, вы могли бы опубликовать его ** в качестве ответа ** на свой собственный вопрос. Если вы согласились с тем, что это правильный ответ, вы можете ** принять ** и его, хотя, насколько я понимаю, вы сможете сделать это только через пару дней., @timemage


1 ответ


2

Похоже, что модуль имеет дефект, поскольку тот же код на другой плате выдает ожидаемый результат на линиях I2C

,