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);
}
}
@therman, 👍1
Обсуждение1 ответ
Похоже, что модуль имеет дефект, поскольку тот же код на другой плате выдает ожидаемый результат на линиях I2C
- Использует ли Arduino pro-micro 3.3v кристалл 8 МГц или кристалл 16 МГц с делителем тактовой частоты 2?
- Подключение нескольких MPU 6050 к Micro/Lenardo
- Arduino Pro micro Serial communication проблема с узлом MCU
- Невозможно прошить arduino pro micro из терминала
- Можно ли удалить загрузчик при прошивке с помощью загрузчика?
- Atmega32u4: снижение энергопотребления при сохранении активности USB
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
Что вы подразумеваете под "бесконечной прямоугольной волной"? Означает ли это, что и 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