Проблема со связью I2C HMC5983

У меня действительно странная проблема: когда я запускаю пример сканера проводов (I2C) из Arduino, я получаю следующее:

Сканер I2C Сканирование... Обнаружено устройство I2C по адресу 0x1E! готово

Однако, когда я пытаюсь перейти непосредственно к 0x1E, я получаю следующий код ошибки 2:

получил NACK при передаче адреса.

Ниже приведен мой код, который я изменил только в примере кода:

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial); // Леонардо: ждем Serial Monitor
  Serial.println("\nI2C Scanner");
}

void loop() {

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

  byte address = 0x1E;

  Wire.beginTransmission(address);
  byte error = Wire.endTransmission();

  if (error == 0) {
    Serial.print("I2C device found at address 0x1E");
  } else if (error == 1) {
      Serial.print("data too long to fit in transmit buffer.");
  }
  else if (error == 2) {
      Serial.print("received NACK on transmit of address.");
  }
  else if (error == 3) {
      Serial.print("received NACK on transmit of data.");
  }
  else if (error == 4) {
      Serial.print("Unknown error at address 0x");
  }

  delay(5000); // Подождем 5 секунд до следующего сканирования
}

, 👍-1

Обсуждение

пожалуйста, добавьте четкий вопрос, на который можно ответить, к своему сообщению, @jsotola

Совершенно ясно, что я спрашиваю, что не так? Пожалуйста, не комментируйте, просто комментируйте., @Ana Houa

не все будут задавать один и тот же вопрос ... это сайт вопросов и ответов, поэтому требуется четкий вопрос, @jsotola

Какой у вас номинал подтягивающего резистора? NACK при адресации может произойти, если у вас слабая подтяжка или если устройство занято., @hcheung


1 ответ


0

Есть определенные ситуации, когда устройство может отправить nack после отправки действительного адреса — поиск "получил NACK при передаче адреса". Ничто из того, что я читал, не относится конкретно к вашей ситуации.

Я ничего не вижу в техническом описании HMC5983 (https://www.farnell.com /datasheets/1509871.pdf?_ga=2.219060057.1318745487.1555987311-293789508.1555987311), которые могут объяснить то, что вы видите.

У меня нет HMC5983 на модуле GY282 (вы упомянули модуль на другом форуме), как у вас, но у меня есть его предшественник, HMC5883, который, я думаю, во многом сопоставим, но медленнее.

Я протестировал ваш код и НЕ получил ошибку NACK — он просто сообщил об обнаружении устройства.

Затем я протестировал самый компактный код HMC5883, который смог найти, и увидел систематический вывод, который менялся по мере перемещения устройства.

Затем я протестировал аналогичный код для HMC5983 (см. https://wiki.eprolabs.com). /index.php?title=GY-282_HMC5983_Module#Hardware_Connections). Этот код работал на моей более медленной плате HMC5883 (например, систематический вывод).

Я предлагаю следующее: дважды проверьте точки пайки на плате, чтобы убедиться, что перемычки I2C/SPI установлены правильно, а также точки CS 3 на 3 — картинка будет полезна.

Я бы также посоветовал вам попробовать запустить код HMC5983, на который я дал ссылку, и посмотреть, что получится.

Надеюсь, это поможет.

,