Code for communicating with IMU3000 in I2C

Dependencies:   mbed

Committer:
godziram
Date:
Mon Oct 29 18:28:30 2012 +0000
Revision:
0:2ede7cf4f8fa
IMU3000

Who changed what in which revision?

UserRevisionLine numberNew contents of line
godziram 0:2ede7cf4f8fa 1 #include "mbed.h"
godziram 0:2ede7cf4f8fa 2
godziram 0:2ede7cf4f8fa 3 I2C i2c(p9, p10);
godziram 0:2ede7cf4f8fa 4 Serial pc(USBTX, USBRX);
godziram 0:2ede7cf4f8fa 5
godziram 0:2ede7cf4f8fa 6 Ticker tick; //Timer
godziram 0:2ede7cf4f8fa 7 double interval = 10; //[ms]
godziram 0:2ede7cf4f8fa 8
godziram 0:2ede7cf4f8fa 9 const int adrIMU3000 = 0xD0;//8-bit write
godziram 0:2ede7cf4f8fa 10
godziram 0:2ede7cf4f8fa 11
godziram 0:2ede7cf4f8fa 12 void measure();
godziram 0:2ede7cf4f8fa 13
godziram 0:2ede7cf4f8fa 14 int main() {
godziram 0:2ede7cf4f8fa 15
godziram 0:2ede7cf4f8fa 16 i2c.frequency(400000); //set 400kHz
godziram 0:2ede7cf4f8fa 17
godziram 0:2ede7cf4f8fa 18 pc.baud(115200);
godziram 0:2ede7cf4f8fa 19
godziram 0:2ede7cf4f8fa 20 char PWR_M[2] = {0x3E, 0x80};
godziram 0:2ede7cf4f8fa 21 i2c.write(adrIMU3000, PWR_M, 2, true);
godziram 0:2ede7cf4f8fa 22 char SMPL[2] = {0x15, 0x00};
godziram 0:2ede7cf4f8fa 23 i2c.write(adrIMU3000, SMPL, 2, true);
godziram 0:2ede7cf4f8fa 24 char DLPF[2] = {0x16, 0x18};
godziram 0:2ede7cf4f8fa 25 i2c.write(adrIMU3000, DLPF, 2, true);
godziram 0:2ede7cf4f8fa 26 char INT_C[2] = {0x17, 0x05};
godziram 0:2ede7cf4f8fa 27 i2c.write(adrIMU3000, INT_C, 2, true);
godziram 0:2ede7cf4f8fa 28 char PWR_M2[2] = {0x3E, 0x00};
godziram 0:2ede7cf4f8fa 29 i2c.write(adrIMU3000, PWR_M2, 2, true);
godziram 0:2ede7cf4f8fa 30
godziram 0:2ede7cf4f8fa 31 while(true)
godziram 0:2ede7cf4f8fa 32 measure();
godziram 0:2ede7cf4f8fa 33 //tick.attach_us(&measure, interval);
godziram 0:2ede7cf4f8fa 34
godziram 0:2ede7cf4f8fa 35 }
godziram 0:2ede7cf4f8fa 36
godziram 0:2ede7cf4f8fa 37 void measure()
godziram 0:2ede7cf4f8fa 38 {
godziram 0:2ede7cf4f8fa 39 char adrIMU3000_y[1];
godziram 0:2ede7cf4f8fa 40 char readIMU3000[8];
godziram 0:2ede7cf4f8fa 41
godziram 0:2ede7cf4f8fa 42 short int read_x_2byte = 0;
godziram 0:2ede7cf4f8fa 43 short int read_y_2byte = 0;
godziram 0:2ede7cf4f8fa 44 short int read_z_2byte = 0;
godziram 0:2ede7cf4f8fa 45
godziram 0:2ede7cf4f8fa 46 adrIMU3000_y[0] = 0x1D; //register GYRO_XOUT_H
godziram 0:2ede7cf4f8fa 47
godziram 0:2ede7cf4f8fa 48 i2c.write(adrIMU3000, adrIMU3000_y , 1);
godziram 0:2ede7cf4f8fa 49 i2c.read(adrIMU3000, readIMU3000, 8);
godziram 0:2ede7cf4f8fa 50
godziram 0:2ede7cf4f8fa 51 read_x_2byte = ((readIMU3000[0] << 8) + readIMU3000[1]);
godziram 0:2ede7cf4f8fa 52 read_y_2byte = ((readIMU3000[2] << 8) + readIMU3000[3]);
godziram 0:2ede7cf4f8fa 53 read_z_2byte = ((readIMU3000[4] << 8) + readIMU3000[5]);
godziram 0:2ede7cf4f8fa 54
godziram 0:2ede7cf4f8fa 55 pc.printf("%d, %d, %d\n", read_x_2byte, read_y_2byte, read_z_2byte);
godziram 0:2ede7cf4f8fa 56
godziram 0:2ede7cf4f8fa 57 }