Skip to content

Enable Set/Reset (write 0x29 to Z_MSB)#192

Closed
hussam-qawaqzeh wants to merge 18 commits intortlopez:masterfrom
hussam-qawaqzeh:master
Closed

Enable Set/Reset (write 0x29 to Z_MSB)#192
hussam-qawaqzeh wants to merge 18 commits intortlopez:masterfrom
hussam-qawaqzeh:master

Conversation

@hussam-qawaqzeh
Copy link
Copy Markdown
Contributor

No description provided.

Copy link
Copy Markdown
Owner

@rtlopez rtlopez left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. what problem does this change solve?
  2. there is a typo in file name, QMC5338P but should be QMC5883P.

Comment thread lib/Espfc/src/Device/MagQMC5338P.h Outdated
// We use ±8G (0x02) as the default range for the drone.
_currentRange = QMC5883P_RANGE_8G;
setMode(_currentRange);
// 🔑 Step 1: Enable Set/Reset (write 0x29 to Z_MSB)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Plase remove UTF symbols from code.

Comment thread lib/Espfc/src/Device/MagQMC5338P.h Outdated
_currentRange = QMC5883P_RANGE_8G;
setMode(_currentRange);
// Step 1: Enable Set/Reset (write 0x29 to Z_MSB)
_bus->writeByte(_addr, QMC5883P_REG_ZOUT_MSB, 0x29);
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is wrong, set/reset mode is part of control register 2, ZOUT_MSB is read-only register, writing to it has no effect.

Image

Is that AI code?

The improvements I added to the QMC5883P driver in MagQMC5338P.h are:

Aligned the driver more closely with the Adafruit library: same I2C address (0x2C), same chip ID (0x80), and the same CONTROL1 / CONTROL2 register layout.
Improved sensor detection in testConnection(): it now retries multiple times instead of relying on a single read, which helps during startup.
Improved initialization in begin(): I added softReset(), then explicitly configured the range, set/reset mode, and continuous measurement mode at 100Hz.
Made initialization safer: any failed write or read now causes a real initialization failure instead of continuing as if the sensor was detected successfully.
Improved compatibility with the project architecture: periodic reading now uses readMag() with readFast() like the other magnetometer drivers, and includes an initial read to support BusSlave.
Improved raw-to-Gauss conversion in convert() based on the active range instead of relying on a weaker implicit assumption.
Cleaned up the implementation by replacing magic numbers with explicit sensor constants, which makes the driver easier to maintain.
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

Successfully merging this pull request may close these issues.

2 participants