ericalbers / ICM20948_DMP_Arduino

Invensense 20948 chip working with DMP code for Arduino environment
41 stars 10 forks source link

Problems running code with Sparkfun Qwiic 9DOF ICM20948 #5

Closed sidewaiise closed 2 years ago

sidewaiise commented 4 years ago

I've got a sparkfun breakout board to test the ICM20948. The example code from SF works well - I get a dump of accelerometer data.

Despite the data coming through just fine, I'm actually looking at the sensor because of it's DMP features.

I'm building and uploading the example project to an Arduino Due, and I'd like to get a DMP output somehow. When I run your example code, i get the following output:

SELECTED AD0 on DEVICE 0 Pin 25
whoami = 255
dmp image size = 14301
init got -3
B2s data
B2s data
B2s data
B2s data
B2s data
B2s data
B2s data
B2s data
B2s data
B2s data

and it just keeps going like this. Looking through the code, it seems that this init return code means there was a transmission error.

The pin hookup I've got is as follows:

DUE || Breakout

p20 -> SDA p21 -> SCL p25 -> AD0 5V -> VIN GND -> GND

Can you offer any advice on how to resolve this problem?

nanfang2000 commented 4 years ago

you can try 0x68 than 0x69. I can correctly get the the whoami to be 234 . (but not every time) However I still got error of -3 later.

I looked into ICM-20948 datasheet and the working voltage for I2C is 1.8V while my arduino board is 3.3V. I'm not sure whether this is the cause of not.

molecule commented 4 years ago

If you're using the Sparkfun Breakout, it comes with built-in level shifters, so it should be able to handle "anywhere from 1.8V to 5.5V". See the full description here: https://learn.sparkfun.com/tutorials/sparkfun-9dof-imu-icm-20948-breakout-hookup-guide

I'm getting the exact same error as @sidewaiise above - were you ever able to resolve this issue?

sidewaiise commented 4 years ago

@molecule We didn't get it working with the sparkfun port.

We ended up trying the TDK library. A problem we found, was that the DMP image / data size was 16kb. 16kb per sample @ 200hz is far too large for i2c. For this reason, TDK recommends only using over SPI which allows for much larger bandwidth.

We are communicating with the vendor on the bitrate issue over I2C. In theory you should be able to send only the block of DMP data you need back over I2c, but we had trouble interpreting the best method to achieve this.

Will update you if we hear anything back soon.

molecule commented 4 years ago

Major thanks! What's the "TDK library"?

sidewaiise commented 4 years ago

So tdk have a specific library for this sensor. Register as a developer on the tdk website and go to their developer portal. Under downloads youll find there are a few libs. I forget the right one to use but i think its motion sense or one of the other ones. If you have trouble, ping me and ill try to point you in the right direction.

Im actually going to sleep, but working on firmware that implements the driver tomorrow.

On Fri, 7 Aug 2020 at 8:02 am, Molly notifications@github.com wrote:

Major thanks! What's the "TDK library"?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/ericalbers/ICM20948_DMP_Arduino/issues/5#issuecomment-670213471, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABGZU3EM34QUBZFN5SAQOZTR7MR67ANCNFSM4MR4JUJQ .

aedge72 commented 3 years ago

using the Sparkfun ARtemis OLA (with AK099916 compass) and getting the following output:

SELECTED AD0 on DEVICE 2 Pin 27 whoami = 255 dmp image size = 14301 init got -3

seems like similar issue(s) to those mentioned above @sidewaiise . Anyone find solutions?
p.s. thanks for the code @ericalbers !

sidewaiise commented 2 years ago

Thanks all, ended up resolving this.