Quantcast
Channel: Sensors - Arduino Forum
Viewing all articles
Browse latest Browse all 1074

BMI323 sensor not detected

$
0
0

#include <SPI.h>

#define BMI323_CS 10 // Chip Select Pin

#define ACC_CONF 0x20 // Accelerometer configuration register
#define GYR_CONF 0x21 // Gyroscope configuration register
#define CMD 0x7E // Command register
#define CHIP_ID 0x00 // Chip ID register

void setup() {
Serial.begin(115200);
SPI.begin();

pinMode(BMI323_CS, OUTPUT);
digitalWrite(BMI323_CS, HIGH); // Deselect sensor

delay(100);

uint8_t chipID = readRegister(CHIP_ID);
Serial.print("Chip ID: 0x");
Serial.println(chipID, HEX);

if (chipID != 0x41) { // Check the expected chip ID
    Serial.println("ERROR: BMI323 not detected correctly!");
    while (1);
}

writeRegister(ACC_CONF, 0x708B); // Configure Accelerometer
writeRegister(GYR_CONF, 0x708B); // Configure Gyroscope

}

void loop() {
int16_t x = readRegister16(0x03);
int16_t y = readRegister16(0x05);
int16_t z = readRegister16(0x07);

Serial.print("X: "); Serial.print(x);
Serial.print("\tY: "); Serial.print(y);
Serial.print("\tZ: "); Serial.println(z);

delay(500);

}

// SPI Read
uint8_t readRegister(uint8_t reg) {
digitalWrite(BMI323_CS, LOW);
SPI.transfer(reg | 0x80); // Set Read bit
uint8_t data = SPI.transfer(0x00);
digitalWrite(BMI323_CS, HIGH);
return data;
}

// SPI Read 16-bit
uint16_t readRegister16(uint8_t reg) {
digitalWrite(BMI323_CS, LOW);
SPI.transfer(reg | 0x80); // Set Read bit
uint8_t highByte = SPI.transfer(0x00);
uint8_t lowByte = SPI.transfer(0x00);
digitalWrite(BMI323_CS, HIGH);
return (highByte << 8) | lowByte;
}

// SPI Write
void writeRegister(uint8_t reg, uint8_t value) {
digitalWrite(BMI323_CS, LOW);
SPI.transfer(reg & 0x7F); // Clear Read bit
SPI.transfer(value);
digitalWrite(BMI323_CS, HIGH);
}
i try this code using spi in arduino uno but my sensor is not detected

11 posts - 4 participants

Read full topic


Viewing all articles
Browse latest Browse all 1074

Trending Articles