Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The "begin" function always returns TRUE #2

Open
budryerson opened this issue Jan 4, 2016 · 3 comments
Open

The "begin" function always returns TRUE #2

budryerson opened this issue Jan 4, 2016 · 3 comments

Comments

@budryerson
Copy link

This function apparently means to detect whether an HMC5883 device is detected, and if no device is detected, to trigger the "Ooops, no HMC5883 detected ... Check your wiring!" message in the Adafruit sensor initialization example code. It does not. As written, the function must always returns TRUE.

bool Adafruit_HMC5883_Unified::begin()
{
  // Enable I2C
  Wire.begin();

  // Enable the magnetometer
  write8(HMC5883_ADDRESS_MAG, HMC5883_REGISTER_MAG_MR_REG_M, 0x00);

  // Set the gain to a known level
  setMagGain(HMC5883_MAGGAIN_1_3);

  return true;
}
@oliver30982
Copy link

oliver30982 commented Nov 2, 2016

Hi,

I had the same problem and solved it by putting

if (read8(HMC5883_ADDRESS_MAG, HMC5883_REGISTER_MAG_MR_REG_M) == 0xFF) return false;

directly after Wire.begin();

Oliver

@budryerson
Copy link
Author

Thanks, Oliver. Adafruit should add that correction to their library.

I cobbled together my own library from bits and pieces of this and the Honeywell version. In my setup, I request the ID from the device and fail if I get other than "H43".

But these days, everyone uses an IMU of some kind with the mag compass built in. I don't think anyone but a masochist would use this device anymore.

@zs6buj
Copy link

zs6buj commented Aug 27, 2018

Thanks Guys, but alas oliver30982's patch didn't immediately work for me on v1.8.5. Eventually I determined that, in my environment

(read8(HMC5883_ADDRESS_MAG, HMC5883_REGISTER_MAG_MR_REG_M)

returns 3 when the HMC5883 is present, and 0 when it is not.

In all fairness, my "HMC5883" might not be the real McCoy, as it came off an old CX-20 Quad. The chip is, however, marked L883.

I hope this is useful to someone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants