pico-examples icon indicating copy to clipboard operation
pico-examples copied to clipboard

MPU6050 i2c example expanded into library

Open NirajPatelRobots opened this issue 1 year ago • 12 comments

I refactored and expanded the mpu6050_i2c example. This adds new functions for MPU6050 features and clarifies existing ones. It also refactors the example into an MPU6050_i2c library and main.c. There are C and C++ versions of the library. I've been using the C++ library in another project for around a year.

I realize that this is a pretty drastic change, and moves the code away from its original intent as a pico code example. I plan on separating this into a dedicated mpu6050_i2c pico library. However, some of these changes could be useful for the pico-examples repo. Some possibilities are:

  • Adding only certain features like mpu6050_power and the scale functions
  • Using only the refactor that defines constants for the register addresses
  • Removing the C++ part, or moving it to another directory
  • Refactoring out the library, so it's one .c and one .h file again

I'm happy to include any suggestions you have.

NirajPatelRobots avatar Jul 03 '24 03:07 NirajPatelRobots

Thanks. I have a so far untested MPU6050, I'll give it a go.

peterharperuk avatar Jul 03 '24 09:07 peterharperuk

Presumably this also fixes / supersedes the issues identified with the current example code? https://github.com/raspberrypi/pico-examples/issues?q=is%3Aopen+MPU6050

lurch avatar Jul 03 '24 10:07 lurch

@lurch , Several issues are related to the DEVICE_RESET value. The original example used 0x6B 0x00 in mpu6050_reset(). The register map says to set DEVICE_RESET =1 (0x6B 0x80) to reset the registers, so https://github.com/raspberrypi/pico-examples/pull/319 implemented that. However, https://github.com/raspberrypi/pico-examples/issues/352 and https://github.com/raspberrypi/pico-examples/pull/494 reported that the example didn't work after https://github.com/raspberrypi/pico-examples/pull/319 was merged. The discussion in 319 eventually determined that 0x80 is resetting the MPU6050, which causes the MPU6050 to enter sleep mode, which explains why the example stopped working. Several commenters in https://github.com/raspberrypi/pico-examples/pull/319 suggest writing DEVICE_RESET =1, waiting, then setting the register to 0x00 again. That works because DEVICE_RESET and SLEEP are in the same register, so sleep mode is disabled. I added a mpu6050_power() function after mpu6050_reset() to exit sleep mode.

NirajPatelRobots avatar Jul 07 '24 03:07 NirajPatelRobots

I've pushed some changes to improve it, including adding a test that demonstrates scaling with the C++ library. Unfortunately, my pico has stopped working, so I can't test it myself.

NirajPatelRobots avatar Jul 10 '24 03:07 NirajPatelRobots

fixed my pico, then fixed the code.

NirajPatelRobots avatar Aug 08 '24 01:08 NirajPatelRobots

@peterharperuk thanks for waiting, I've marked this PR as ready. I'm still unsure of the best way to integrate this into the repo. Should I wrap the C++ section to check for compilers without C++?

NirajPatelRobots avatar Oct 06 '24 21:10 NirajPatelRobots

Resolves #352 , #494 , and #557

NirajPatelRobots avatar Oct 24 '24 02:10 NirajPatelRobots

Can you please squash all your change into one commit? For some reason I can't seem to checkout your changes.

peterharperuk avatar Oct 25 '24 12:10 peterharperuk

@peterharperuk I rebased and squashed. The develop_rebased branch has the commit history if that becomes easier to checkout.

NirajPatelRobots avatar Oct 31 '24 02:10 NirajPatelRobots

@peterharperuk figured it out, my editor had been adding CRLF instead of LF. Sorry about that! I've rebased my master branch, that should be usable now.

NirajPatelRobots avatar Nov 01 '24 00:11 NirajPatelRobots

@NirajPatelRobots This PR has ballooned back up to 12 separate commits again :confused:

lurch avatar Nov 04 '24 23:11 lurch

@lurch sorry about that, I've re-squashed it.

NirajPatelRobots avatar Nov 10 '24 04:11 NirajPatelRobots