http://www.st.com/internet/com/TECHNICA ... 260288.pdf
LSM303DLM
http://www.st.com/internet/com/TECHNICA ... 026454.pdf
config.h:
Code: Select all
/* I2C accelerometer */
//#define ADXL345
//#define BMA020
//#define BMA180
//#define NUNCHACK // if you want to use the nunckuk as a standalone I2C ACC without WMP
//#define LIS3LV02
#define LSM303DLx_ACC
Code: Select all
/* I2C magnetometer */
//#define HMC5843
//#define HMC5883
//#define AK8975
#define LSM303DLx_MAG
def.h
Code: Select all
#if defined(ADXL345) || defined(BMA020) || defined(BMA180) || defined(NUNCHACK) || defined(ADCACC) || defined(LSM303DLx_ACC)
#define ACC 1
#else
#define ACC 0
#endif
#if defined(HMC5883) || defined(HMC5843) || defined(AK8975) || defined(LSM303DLx_MAG)
#define MAG 1
#else
#define MAG 0
#endif
sensors:
Code: Select all
// ************************************************************************************************************
// I2C Accelerometer LSM303DLx
// ************************************************************************************************************
// ************************************************************************************************************
#if defined(LSM303DLx_ACC)
void ACC_init () {
delay(10);
i2c_rep_start(0x30+0);
i2c_write(0x20);
i2c_write(0x27);
i2c_rep_start(0x30+0);
i2c_write(0x23);
i2c_write(0x30);
i2c_rep_start(0x30+0);
i2c_write(0x21);
i2c_write(0x00);
acc_1G = 256;
}
void ACC_getADC () {
TWBR = ((16000000L / 400000L) - 16) / 2;
i2c_getSixRawADC(0x30,0xA8);
ACC_ORIENTATION( - ((rawADC[3]<<8) | rawADC[2])/16 ,
((rawADC[1]<<8) | rawADC[0])/16 ,
((rawADC[5]<<8) | rawADC[4])/16 );
ACC_Common();
}
#endif
Code: Select all
// ************************************************************************************************************
// I2C Compass LSM303DLx
// ************************************************************************************************************
// ************************************************************************************************************
#if defined(LSM303DLx_MAG)
void Mag_init() {
delay(100);
i2c_writeReg(0X3C ,0x02 ,0x00 );
}
void Device_Mag_getADC() {
i2c_getSixRawADC(0X3C,0X03);
MAG_ORIENTATION( ((rawADC[0]<<8) | rawADC[1]) ,
((rawADC[2]<<8) | rawADC[3]) ,
-((rawADC[4]<<8) | rawADC[5]) );
}
#endif