Subversion Repositories FlightCtrl

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1993 - 1
// ITG-3200_output
2
// Copyright 2010-2011 Filipe Vieira & various contributors.
3
// http://code.google.com/p/itg-3200driver
4
// Simple example of library usage with almost every gyro and lib features being used.
5
 
6
#include <Wire.h>
7
#include <ITG3200.h>
8
 
9
ITG3200 gyro = ITG3200();
10
float xyz[3], temperature;
11
 
12
void setup(void) {
13
  Serial.begin(9600);
14
  Wire.begin();      // if experiencing gyro problems/crashes while reading XYZ values
15
                     // please read class constructor comments for further info.
16
  delay(1000);
17
  gyro.reset();
18
  // Use ITG3200_ADDR_AD0_HIGH or ITG3200_ADDR_AD0_LOW as the ITG3200 address
19
  // depending on how AD0 is connected on your breakout board, check its schematics for details
20
  gyro.init(ITG3200_ADDR_AD0_HIGH);
21
 
22
  Serial.print("zeroCalibrating...");
23
  gyro.zeroCalibrate(2500,2);
24
  Serial.println("done.");
25
 
26
  showall();
27
 
28
  Serial.println("Registers dump");
29
  Serial.println("==========================================================");
30
  dumpRegisters();
31
  Serial.println("==========================================================");
32
 
33
  delay(5000);
34
}
35
 
36
void loop(void) {
37
  while (gyro.isRawDataReady()) {
38
    gyro.readGyro(xyz);
39
    Serial.print("X:");
40
    Serial.print(xyz[0]);
41
    Serial.print("  Y:");
42
    Serial.print(xyz[1]);
43
    Serial.print("  Z:");
44
    Serial.println(xyz[2]);
45
  }
46
}
47
 
48
void showall(void) {
49
  Serial.println("Current ITG3200 settings");
50
  Serial.println("==========================================================");
51
  Serial.print("device address                  = 0x");
52
  Serial.println(gyro.getDevAddr(), HEX);
53
 
54
  Serial.print("Sample rate divider (Hz)        = ");
55
  if (gyro.getFilterBW() == BW256_SR8)
56
    Serial.println(8000 / (gyro.getSampleRateDiv()+1), DEC);
57
  else
58
    Serial.println(1000 / (gyro.getSampleRateDiv()+1), DEC);
59
 
60
  Serial.print("full scale range                = ");
61
  if (gyro.getFSRange() == RANGE2000)
62
    Serial.println("+-2000 deg/sec");
63
  else
64
    Serial.println("reserved");
65
 
66
  Serial.print("low pass filter BW              = ");
67
  switch (gyro.getFilterBW()) {
68
    case BW256_SR8:
69
        Serial.println("256Hz LowPassFilter BW/ 8Khz Sample Rate");
70
        break;
71
    case BW188_SR1:
72
        Serial.println("188Hz LowPassFilter BW/ 1Khz Sample Rate");
73
        break;
74
    case BW098_SR1:
75
        Serial.println("98Hz LowPassFilter BW/ 1Khz Sample Rate");
76
        break;
77
    case BW042_SR1:
78
        Serial.println("42Hz LowPassFilter BW/ 1Khz Sample Rate");
79
        break;
80
    case BW020_SR1:
81
        Serial.println("20Hz LowPassFilter BW/ 1Khz Sample Rate");
82
        break;
83
    case BW010_SR1:
84
        Serial.println("10Hz LowPassFilter BW/ 1Khz Sample Rate");
85
        break;
86
    case BW005_SR1:
87
        Serial.println("5Hz LowPassFilter BW/ 1Khz Sample Rate");
88
        break;
89
  }
90
 
91
  Serial.print("Logic level for INT output pin  = ");
92
  if (gyro.isINTActiveOnLow())
93
    Serial.println("Active on Low");
94
  else
95
    Serial.println("Active on High");
96
 
97
  Serial.print("INT drive type                  = ");
98
  if (gyro.isINTOpenDrain())
99
    Serial.println("Open Drain");
100
  else
101
    Serial.println("Push-Pull");
102
 
103
  Serial.print("INT latch mode                  = ");
104
  if (gyro.isLatchUntilCleared())
105
    Serial.println("Latch until interrupt is cleared");
106
  else
107
    Serial.println("50us pulse");
108
 
109
  Serial.print("INT latch clear mode            = ");
110
  if (gyro.isAnyRegClrMode())
111
    Serial.println("Any register read");
112
  else
113
    Serial.println("Status register read only");
114
 
115
  Serial.print("ITGReady trigger status         = ");
116
  if (gyro.isITGReadyOn())
117
    Serial.println("High/Set");
118
  else
119
    Serial.println("Low/Clear");
120
 
121
  Serial.print("RawDataReady trigger status     = ");
122
  if (gyro.isRawDataReady())
123
    Serial.println("High/Set");
124
  else
125
    Serial.println("Low/Clear");
126
 
127
  Serial.print("Temperature (Celsius)           = ");
128
  gyro.readTemp(&temperature);
129
  Serial.println(temperature);
130
 
131
  Serial.print("Power mode                      = ");
132
  gyro.setPowerMode(NORMAL);
133
  if (gyro.isLowPower() == STANDBY)
134
    Serial.println("Low power (sleep)");
135
  else
136
    Serial.println("Normal");
137
 
138
  Serial.print("Xgyro status                    = ");
139
  if (gyro.isXgyroStandby() == NORMAL )
140
    Serial.println("Normal");
141
  else
142
    Serial.println("StandBy");
143
 
144
  Serial.print("Ygyro status                    = ");
145
  if (gyro.isYgyroStandby() == NORMAL )
146
    Serial.println("Normal");
147
  else
148
    Serial.println("StandBy");
149
 
150
  Serial.print("Zgyro status                    = ");
151
  if (gyro.isZgyroStandby() == NORMAL )
152
    Serial.println("Normal");
153
  else
154
    Serial.println("StandBy");
155
 
156
  Serial.print("Clock source                    = ");
157
  switch (gyro.getClockSource()) {
158
    case INTERNALOSC:
159
        Serial.println("Internal oscillator");
160
        break;
161
    case PLL_XGYRO_REF:
162
        Serial.println("PLL with X Gyro reference");
163
        break;
164
    case PLL_YGYRO_REF:
165
        Serial.println("PLL with Y Gyro reference");
166
        break;
167
    case PLL_ZGYRO_REF:
168
        Serial.println("PLL with Z Gyro reference");
169
        break;
170
    case PLL_EXTERNAL32:
171
        Serial.println("PLL with external 32.768kHz reference");
172
        break;
173
    case PLL_EXTERNAL19:
174
        Serial.println("PLL with external 19.2MHz reference");
175
        break;
176
  }
177
 
178
  Serial.print("X offset                        = ");
179
  Serial.println(gyro.offsets[0]);
180
  Serial.print("Y offset                        = ");
181
  Serial.println(gyro.offsets[1]);
182
  Serial.print("Z offset                        = ");
183
  Serial.println(gyro.offsets[2]);
184
}
185
 
186
void dumpRegisters() {
187
  byte ValidRegisterAddr[]={0,21,22,23,26,27,28,29,30,31,32,33,34,57,56,62};
188
  byte _b, i, totregisters = sizeof(ValidRegisterAddr);
189
  Serial.println("---dump start---");
190
  Serial.println("Register address|Register data");
191
  Serial.println("Reg.address(hex,dec) Reg.data(bin,hex,dec)");
192
  for (i=0;i<totregisters;i++){
193
    Serial.print("0x");
194
    Serial.print(ValidRegisterAddr[i], HEX);
195
    Serial.print(",");
196
    Serial.print(ValidRegisterAddr[i], DEC);
197
    Serial.print(",");
198
    gyro.readmem(ValidRegisterAddr[i], 1, &_b);
199
    Serial.print("b");
200
    print_bits(_b);
201
    Serial.print(",0x");
202
    Serial.print(_b,HEX);
203
    Serial.print(",");
204
    Serial.println(_b,DEC);
205
  }
206
  Serial.println("---dump end---");
207
}
208
 
209
void print_bits(uint8_t val){
210
  for(int i=7; i>=0; i--)
211
    Serial.print(val >> i & 1, BIN);
212
}
213
 void print_unit16(uint16_t val){
214
  for(int i=15; i>=0; i--)
215
    Serial.print(val >> i & 1, BIN);
216
}