I’ve been toying with an AltIMU-10 for a while now and successfully got it working well on both an Arduino Nano (ref this thread) and the Raspberry Pi. Now I’m trying to use it with an Arduino Due and for the life of me I just can’t get it to work.
I’ve read that the Arduino wire library has some issues on the Due and that the I2C pullup resistors are probably too small. I tried it anyway and, no suprises, nothing works. All values read from the AltIMU-10 are zero, and the read functions seem to time out.
Figuring it was an Arduino software issue I downloaded the Atmel Software Framework and started learning how to code for the Due from scratch. After making a LED blinker and UART repeated I tried I2C with the AltIMU-10 aaand it still doesn’t work. It should print the WHO_AM_I register over UART but it doesn’t do anything. It could be an issue with my code, I dunno.
Are you guys aware of this issue? Any clues on how to get the AltIMU running on the Due?
Ok, FYI I got it working. I swapped the AltIMU over to the second (Wire1) I2C buss. It doesn’t have its own pull-up resistors so I used 2.2K. I can now read registers with the Arduino Wire library but I have to manually specify the address of the devices. The autoDetectAddress() functions in Pololus L3G, LSM303 and LPS331 Arduino libraries don’t work.
It’s annoying but it works for me and hopefully it helps someone else too.
I am glad you got your AltIMU working with the Due! Thanks for letting us know and explaining how. We know that the autodetect functions don’t work on the Due and we have a note in the LSM303 library’s readme about it, but we will look at adding it to the other libraries’ documentation as well. Have you tried manually specifying the addresses using the original I2C bus (Wire)?
I have not had any luck using the original I2C bus. I did miswire the AltIMU at one point though. I put 5V on Vin instead of 3.3V on Vdd. Would this make the AltIMU logic level be +5V and therefore damage the Due? If so, that could explain why it doesn’t work for me.
Supplying 5V to VIN causes the I2C line to be pulled to 5V, which could damage the Due. You might try using it with other I2C devices to verify whether or not it is actually broken.