08-01-2020 12:36 AM - edited 08-01-2020 12:37 AM
Hi
I am using the BMI160 shuttle board with Arduino Uno over SPI. Also, I am using the Driver developed by Hanyazou https://github.com/hanyazou/BMI160-Arduino. The connection is okay but the gyro results are incorrect (random data). Also, the device id is returned 7F which means somewhere in the code or connection is wrong. Can you please help me resolve the issue?
Please see the code below (The code is the example in the Hanyazou GitHub).
#include <BMI160.h>
#include <BMI160Gen.h>
#include <CurieIMU.h>
//const int i2c_addr = 0x69;
void setup() {
Serial.begin(9600); // initialize Serial communication
while (!Serial); // wait for the serial port to open
// initialize device
Serial.println("Initializing IMU device...");
BMI160.begin(BMI160GenClass::SPI_MODE, /* SS pin# = */10);
//BMI160.begin(BMI160GenClass::I2C_MODE);
uint8_t dev_id = BMI160.getDeviceID();
Serial.print("DEVICE ID: ");
Serial.println(dev_id, HEX);
// Set the accelerometer range to 250 degrees/second
BMI160.setGyroRange(125);
Serial.println("Initializing IMU device...done.");
}
void loop() {
int gx, gy, gz; // raw gyro values
// read raw gyro measurements from device
BMI160.readGyro(gx,gy,gz);
// display tab-separated gyro x/y/z values
Serial.print("g:\t");
Serial.print(gx);
Serial.print("\t");
Serial.print(gy);
Serial.print("\t");
Serial.print(gz);
Serial.println();
delay(1);
}
float convertRawGyro(int gRaw) {
// since we are using 250 degrees/seconds range
// -250 maps to a raw value of -32768
// +250 maps to a raw value of 32767
float g = (gRaw * 250.0) / 32768.0;
return g;
}
And this is the connection photo.
Your help is truly appreciated!
Thanks
Saber
Solved! Go to Solution.
08-01-2020 01:27 AM
The HW connection in the image looks OK.
I believe the SW code itself is also OK.
But from the result, the SPI connection is not setup correctly.
So, can you share the logic analyzer result for better understanding this issue?
08-03-2020 11:36 PM
Hi
Thanks for your reply.
Please kindly find the logic analyzer for the pins. This is the zoomed out photo.
Based on the datasheet the data transmission occurs when the CS is low, but here when the CS is low, almost nothing happens. Do you have any idea where the problem is?
Thanks
08-03-2020 11:58 PM
When the CS is low, we need also the host to send out the clock, and the register address. Then our sensor will response for it.
From your plotter, i can't see any data from host for read / write action. then there is also no ACK / response from our sensor.
We verify the example code at Arduino DUE platform, which works properly.
So you need double check at your side for the SPI host configuration.
08-04-2020 12:18 AM
Thanks for your reply.
I am using the exact example here.
Also, the SPI connections are the same as I showed in the first post:
pin 1: VDD:3.3 V
pin 2: VDDIO: 3.3 V
pin 3: GND
pin 4: MISO
pin 5: MOSI
pin 6: SCK
pin 7: CS
And all other pins are unconnected. Are they all correct? So it is strange that it is not working.
Thanks