Hi, I recently got the BMA180 breakout from sparkfun: Triple Axis Accelerometer Breakout - BMA180 - SEN-09723 - SparkFun Electronics
but i can't seem to figure it out. I have it hooked up like in the picture below:
So I'm pretty sure I have it hooked up right.
However, when I run the following really simple code, to just check the chip ID and set some values, I don't get proper results for the CHIP ID, it should be 3.
#include <Wire.h>
#define DEVICE 0x40
#define CHIP_ID 0x00
#define R_ACC_X_LSB 0x02
#define R_ACC_X_MSB 0x03
#define R_ACC_Y_LSB 0x04
#define R_ACC_Y_MSB 0x05
#define R_ACC_Z_LSB 0x06
#define R_ACC_Z_MSB 0x07
#define R_CTRL_REG0 0x0D
#define R_BW_TCS 0x20
#define R_CUST_DATA1 0x2C
#define R_OFFSET_LSB1 0x35
int temp, result, error;
void setup()
{
Wire.begin();
Serial.begin(115200);
initializeBMA180();
}
void loop()
{
//getXAccel();
}
void initializeBMA180()
{
checkID();
enableWrite();
setFilter();
setRange();
}
void checkID()
{
Wire.beginTransmission(DEVICE);
Wire.send(0x00);
Wire.requestFrom(DEVICE, 1);
while(Wire.available())
{
temp = Wire.receive();
}
error = Wire.endTransmission();
Serial.print("Chip ID: ");
Serial.print(temp);
Serial.print(" Result: ");
Serial.println(error);
}
void enableWrite()
{
//Connect to the ctrl_reg0 register and set the ee_w bit to enable writing
Wire.beginTransmission(DEVICE);
Wire.send(0x0D);
Wire.send(B0001);
result = Wire.endTransmission();
Serial.print("Enable Write Result: ");
Serial.println(result);
delay(10);
}
void setFilter()
{
// Connect to the bw_tcs register and set the filtering level to 10hz
Wire.beginTransmission(DEVICE);
Wire.send(0x20);
Wire.send(B00001000);
result = Wire.endTransmission();
Serial.print("Set Filter Result: ");
Serial.println(result);
delay(10);
}
void setRange()
{
Wire.beginTransmission(DEVICE);
Wire.send(0x35);
Wire.send(B0100);
result = Wire.endTransmission();
Serial.print("Set Range Result: ");
Serial.println(result);
delay(10);
}
inline int getXAccel()
{
byte msb = getRegister(R_ACC_X_MSB);
byte lsb = getRegister(R_ACC_X_LSB);
Serial.println((((msb << 8) | lsb) >>2));
}
int getRegister(byte registerAddr)
{
Wire.beginTransmission(DEVICE);
Wire.send(registerAddr);
Wire.endTransmission();
Wire.requestFrom(DEVICE,1); // request numbytes bytes
int n=Wire.available();
if (n==0) {
Serial.println("getRegister: error: 0 bytes available");
}
//printRegisterOperation(true,registerAddr,val);
return Wire.receive();
}
But, if I run that same code but with initializeBMA180() as:
void initializeBMA180()
{
checkID();
//enableWrite();
//setFilter();
//setRange();
}
I get the proper chip id. What would be causing this?
Thanks for all and any help!!
