I have been trying to use an ITG-3205 from a wii motion plus unit from deal extreme. I was extremely happy when I read the WHO_AM_I register which returned the expected value (68). I thought "cool now I just change the register and I can read whatever I want" but it hasn't been that simple.
Firstly, where is there documentation on register locations? Presumably this is where I'll also find documentation on what registers need what values for different settings? I have the ITG3200 datasheet from the Invensense website, but it doesn't have a register map or anything.
So far I've been looking at other peoples' codes, and assumed that the following would work:
#define WHO 0x00
#define SMPL 0x15
#define DLPF 0x16
#define INT_C 0x17
#define INT_S 0x1A
#define TMP_H 0x1B
#define TMP_L 0x1C
#define GX_H 0x1D
#define GX_L 0x1E
#define GY_H 0x1F
#define GY_L 0x20
#define GZ_H 0x21
#define GZ_L 0x22
#define PWR_M 0x3E
However when I got a bunch of zeroes from places where there shouldn't be, I ran code which sequentially read from 0x00 to 0x3F, and found that the only registers that return values are:
00,20: 68 - WHO_AM_I, as expected
0E,2E: varying values, but always has 0 as the second hex value (60, 90, B0 etc.)
0F,2F: seemingly random even when stationary
10,30: seemingly random even when stationary
11,31: seemingly random even when stationary
1C: increments each time I read
3E: starts at whatever value I set it to (assume it is PWR, so I wrote 0x80 to reset, as I saw in other code but I haven't seen documentation on this), but usually changes value within a short time.
So it seems I have some different registers, but I'm not getting many expected values. I'm hoping I just need to initialise it properly, but can anyone shed light on what's going on?