Subversion Repositories FlightCtrl

Rev

Rev 1955 | Rev 1961 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1955 Rev 1960
1
#ifndef _ANALOG_H
1
#ifndef _ANALOG_H
2
#define _ANALOG_H
2
#define _ANALOG_H
3
#include <inttypes.h>
3
#include <inttypes.h>
4
 
4
 
5
//#include "invenSense.h"
5
//#include "invenSense.h"
6
//#include "ENC-03_FC1.3.h"
6
//#include "ENC-03_FC1.3.h"
7
//#include "ADXRS610_FC2.0.h"
7
//#include "ADXRS610_FC2.0.h"
8
 
8
 
9
/*
9
/*
10
 * How much low pass filtering to apply for gyro_PID.
10
 * How much low pass filtering to apply for gyro_PID.
11
 * 0=illegal, 1=no filtering, 2=50% last value + 50% new value, 3=67% last value + 33 % new value etc...
11
 * 0=illegal, 1=no filtering, 2=50% last value + 50% new value, 3=67% last value + 33 % new value etc...
12
 * Temporarily replaced by userparam-configurable variable.
12
 * Temporarily replaced by userparam-configurable variable.
13
 */
13
 */
14
// #define GYROS_PID_FILTER 1
14
// #define GYROS_PID_FILTER 1
15
 
15
 
16
/*
16
/*
17
 * How much low pass filtering to apply for gyro_ATT.
17
 * How much low pass filtering to apply for gyro_ATT.
18
 * 0=illegal, 1=no filtering, 2=50% last value + 50% new value, 3=67% last value + 33 % new value etc...
18
 * 0=illegal, 1=no filtering, 2=50% last value + 50% new value, 3=67% last value + 33 % new value etc...
19
 * Temporarily replaced by userparam-configurable variable.
19
 * Temporarily replaced by userparam-configurable variable.
20
 */
20
 */
21
// #define GYROS_ATT_FILTER 1
21
// #define GYROS_ATT_FILTER 1
22
 
22
 
23
// Temporarily replaced by userparam-configurable variable.
23
// Temporarily replaced by userparam-configurable variable.
24
// #define ACC_FILTER 4
24
// #define ACC_FILTER 4
25
 
25
 
26
/*
26
/*
27
 About setting constants for different gyros:
27
 About setting constants for different gyros:
28
 Main parameters are positive directions and voltage/angular speed gain.
28
 Main parameters are positive directions and voltage/angular speed gain.
29
 The "Positive direction" is the rotation direction around an axis where
29
 The "Positive direction" is the rotation direction around an axis where
30
 the corresponding gyro outputs a voltage > the no-rotation voltage.
30
 the corresponding gyro outputs a voltage > the no-rotation voltage.
31
 A gyro is considered, in this code, to be "forward" if its positive
31
 A gyro is considered, in this code, to be "forward" if its positive
32
 direction is:
32
 direction is:
33
 - Nose down for pitch
33
 - Nose down for pitch
34
 - Left hand side down for roll
34
 - Left hand side down for roll
35
 - Clockwise seen from above for yaw.
35
 - Clockwise seen from above for yaw.
36
 Declare the GYRO_REVERSE_YAW, GYRO_REVERSE_ROLL and
36
 Declare the GYRO_REVERSE_YAW, GYRO_REVERSE_ROLL and
37
 GYRO_REVERSE_PITCH #define's if the respective gyros are reverse.
37
 GYRO_REVERSE_PITCH #define's if the respective gyros are reverse.
38
 
38
 
39
 Setting gyro gain correctly: All sensor measurements in analog.c take
39
 Setting gyro gain correctly: All sensor measurements in analog.c take
40
 place in a cycle, each cycle comprising all sensors. Some sensors are
40
 place in a cycle, each cycle comprising all sensors. Some sensors are
41
 sampled more than ones, and the results added. The pitch and roll gyros
41
 sampled more than ones, and the results added. The pitch and roll gyros
42
 are sampled 4 times and the yaw gyro 2 times in the original H&I V0.74
42
 are sampled 4 times and the yaw gyro 2 times in the original H&I V0.74
43
 code.
43
 code.
44
 In the H&I code, the results for pitch and roll are multiplied by 2 (FC1.0)
44
 In the H&I code, the results for pitch and roll are multiplied by 2 (FC1.0)
45
 or 4 (other versions), offset to zero, low pass filtered and then assigned
45
 or 4 (other versions), offset to zero, low pass filtered and then assigned
46
 to the "HiResXXXX" and "AdWertXXXXFilter" variables, where XXXX is nick or
46
 to the "HiResXXXX" and "AdWertXXXXFilter" variables, where XXXX is nick or
47
 roll.
47
 roll.
48
 So:
48
 So:
49
 
49
 
50
 gyro = V * (ADCValue1 + ADCValue2 + ADCValue3 + ADCValue4),
50
 gyro = V * (ADCValue1 + ADCValue2 + ADCValue3 + ADCValue4),
51
 where V is 2 for FC1.0 and 4 for all others.
51
 where V is 2 for FC1.0 and 4 for all others.
52
 
52
 
53
 Assuming constant ADCValue, in the H&I code:
53
 Assuming constant ADCValue, in the H&I code:
54
 
54
 
55
 gyro = I * ADCValue.
55
 gyro = I * ADCValue.
56
 
56
 
57
 where I is 8 for FC1.0 and 16 for all others.
57
 where I is 8 for FC1.0 and 16 for all others.
58
 
58
 
59
 The relation between rotation rate and ADCValue:
59
 The relation between rotation rate and ADCValue:
60
 ADCValue [units] =
60
 ADCValue [units] =
61
 rotational speed [deg/s] *
61
 rotational speed [deg/s] *
62
 gyro sensitivity [V / deg/s] *
62
 gyro sensitivity [V / deg/s] *
63
 amplifier gain [units] *
63
 amplifier gain [units] *
64
 1024 [units] /
64
 1024 [units] /
65
 3V full range [V]
65
 3V full range [V]
66
 
66
 
67
 or: H is the number of steps the ADC value changes with,
67
 or: H is the number of steps the ADC value changes with,
68
 for a 1 deg/s change in rotational velocity:
68
 for a 1 deg/s change in rotational velocity:
69
 H = ADCValue [units] / rotation rate [deg/s] =
69
 H = ADCValue [units] / rotation rate [deg/s] =
70
 gyro sensitivity [V / deg/s] *
70
 gyro sensitivity [V / deg/s] *
71
 amplifier gain [units] *
71
 amplifier gain [units] *
72
 1024 [units] /
72
 1024 [units] /
73
 3V full range [V]
73
 3V full range [V]
74
 
74
 
75
 Examples:
75
 Examples:
76
 FC1.3 has 0.67 mV/deg/s gyros and amplifiers with a gain of 5.7:
76
 FC1.3 has 0.67 mV/deg/s gyros and amplifiers with a gain of 5.7:
77
 H = 0.00067 V / deg / s * 5.7 * 1024 / 3V = 1.304 units/(deg/s).
77
 H = 0.00067 V / deg / s * 5.7 * 1024 / 3V = 1.304 units/(deg/s).
78
 FC2.0 has 6*(3/5) mV/deg/s gyros (they are ratiometric) and no amplifiers:
78
 FC2.0 has 6*(3/5) mV/deg/s gyros (they are ratiometric) and no amplifiers:
79
 H = 0.006 V / deg / s * 1 * 1024 * 3V / (3V * 5V) = 1.2288 units/(deg/s).
79
 H = 0.006 V / deg / s * 1 * 1024 * 3V / (3V * 5V) = 1.2288 units/(deg/s).
80
 My InvenSense copter has 2mV/deg/s gyros and no amplifiers:
80
 My InvenSense copter has 2mV/deg/s gyros and no amplifiers:
81
 H = 0.002 V / deg / s * 1 * 1024 / 3V = 0.6827 units/(deg/s)
81
 H = 0.002 V / deg / s * 1 * 1024 / 3V = 0.6827 units/(deg/s)
82
 (only about half as sensitive as V1.3. But it will take about twice the
82
 (only about half as sensitive as V1.3. But it will take about twice the
83
 rotation rate!)
83
 rotation rate!)
84
 
84
 
85
 All together: gyro = I * H * rotation rate [units / (deg/s)].
85
 All together: gyro = I * H * rotation rate [units / (deg/s)].
86
 */
86
 */
87
 
87
 
88
/*
88
/*
89
 * A factor that the raw gyro values are multiplied by,
89
 * A factor that the raw gyro values are multiplied by,
90
 * before being filtered and passed to the attitude module.
90
 * before being filtered and passed to the attitude module.
91
 * A value of 1 would cause a little bit of loss of precision in the
91
 * A value of 1 would cause a little bit of loss of precision in the
92
 * filtering (on the other hand the values are so noisy in flight that
92
 * filtering (on the other hand the values are so noisy in flight that
93
 * it will not really matter - but when testing on the desk it might be
93
 * it will not really matter - but when testing on the desk it might be
94
 * noticeable). 4 is fine for the default filtering.
94
 * noticeable). 4 is fine for the default filtering.
95
 * Experiment: Set it to 1.
95
 * Experiment: Set it to 1.
96
 */
96
 */
97
#define GYRO_FACTOR_PITCHROLL 1
97
#define GYRO_FACTOR_PITCHROLL 1
98
 
98
 
99
/*
99
/*
100
 * How many samples are summed in one ADC loop, for pitch&roll and yaw,
100
 * How many samples are summed in one ADC loop, for pitch&roll and yaw,
101
 * respectively. This is = the number of occurences of each channel in the
101
 * respectively. This is = the number of occurences of each channel in the
102
 * channelsForStates array in analog.c.
102
 * channelsForStates array in analog.c.
103
 */
103
 */
104
#define GYRO_SUMMATION_FACTOR_PITCHROLL 4
104
#define GYRO_SUMMATION_FACTOR_PITCHROLL 4
105
#define GYRO_SUMMATION_FACTOR_YAW 2
105
#define GYRO_SUMMATION_FACTOR_YAW 2
106
 
106
 
107
#define ACC_SUMMATION_FACTOR_PITCHROLL 2
107
#define ACC_SUMMATION_FACTOR_PITCHROLL 2
108
#define ACC_SUMMATION_FACTOR_Z 1
108
#define ACC_SUMMATION_FACTOR_Z 1
109
 
109
 
110
/*
110
/*
111
 Integration:
111
 Integration:
112
 The HiResXXXX values are divided by 8 (in H&I firmware) before integration.
112
 The HiResXXXX values are divided by 8 (in H&I firmware) before integration.
113
 In the Killagreg rewrite of the H&I firmware, the factor 8 is called
113
 In the Killagreg rewrite of the H&I firmware, the factor 8 is called
114
 HIRES_GYRO_AMPLIFY. In this code, it is called HIRES_GYRO_INTEGRATION_FACTOR,
114
 HIRES_GYRO_AMPLIFY. In this code, it is called HIRES_GYRO_INTEGRATION_FACTOR,
115
 and care has been taken that all other constants (gyro to degree factor, and
115
 and care has been taken that all other constants (gyro to degree factor, and
116
 180 degree flip-over detection limits) are corrected to it. Because the
116
 180 degree flip-over detection limits) are corrected to it. Because the
117
 division by the constant takes place in the flight attitude code, the
117
 division by the constant takes place in the flight attitude code, the
118
 constant is there.
118
 constant is there.
119
 
119
 
120
 The control loop executes every 2ms, and for each iteration
120
 The control loop executes every 2ms, and for each iteration
121
 gyro_ATT[PITCH/ROLL] is added to gyroIntegral[PITCH/ROLL].
121
 gyro_ATT[PITCH/ROLL] is added to gyroIntegral[PITCH/ROLL].
122
 Assuming a constant rotation rate v and a zero initial gyroIntegral
122
 Assuming a constant rotation rate v and a zero initial gyroIntegral
123
 (for this explanation), we get:
123
 (for this explanation), we get:
124
 
124
 
125
 gyroIntegral =
125
 gyroIntegral =
126
 N * gyro / HIRES_GYRO_INTEGRATION_FACTOR =
126
 N * gyro / HIRES_GYRO_INTEGRATION_FACTOR =
127
 N * I * H * v / HIRES_GYRO_INTEGRATION_FACTOR
127
 N * I * H * v / HIRES_GYRO_INTEGRATION_FACTOR
128
 
128
 
129
 where N is the number of summations; N = t/2ms.
129
 where N is the number of summations; N = t/2ms.
130
 
130
 
131
 For one degree of rotation: t*v = 1:
131
 For one degree of rotation: t*v = 1:
132
 
132
 
133
 gyroIntegralXXXX = t/2ms * I * H * 1/t = INTEGRATION_FREQUENCY * I * H / HIRES_GYRO_INTEGRATION_FACTOR.
133
 gyroIntegralXXXX = t/2ms * I * H * 1/t = INTEGRATION_FREQUENCY * I * H / HIRES_GYRO_INTEGRATION_FACTOR.
134
 
134
 
135
 This number (INTEGRATION_FREQUENCY * I * H) is the integral-to-degree factor.
135
 This number (INTEGRATION_FREQUENCY * I * H) is the integral-to-degree factor.
136
 
136
 
137
 Examples:
137
 Examples:
138
 FC1.3: I=2, H=1.304, HIRES_GYRO_INTEGRATION_FACTOR=8 --> integralDegreeFactor = 1304
138
 FC1.3: I=2, H=1.304, HIRES_GYRO_INTEGRATION_FACTOR=8 --> integralDegreeFactor = 1304
139
 FC2.0: I=2, H=2.048, HIRES_GYRO_INTEGRATION_FACTOR=13 --> integralDegreeFactor = 1260
139
 FC2.0: I=2, H=2.048, HIRES_GYRO_INTEGRATION_FACTOR=13 --> integralDegreeFactor = 1260
140
 My InvenSense copter: HIRES_GYRO_INTEGRATION_FACTOR=4, H=0.6827 --> integralDegreeFactor = 1365
140
 My InvenSense copter: HIRES_GYRO_INTEGRATION_FACTOR=4, H=0.6827 --> integralDegreeFactor = 1365
141
 */
141
 */
142
 
142
 
143
/*
143
/*
144
 * The value of gyro[PITCH/ROLL] for one deg/s = The hardware factor H * the number of samples * multiplier factor.
144
 * The value of gyro[PITCH/ROLL] for one deg/s = The hardware factor H * the number of samples * multiplier factor.
145
 * Will be about 10 or so for InvenSense, and about 33 for ADXRS610.
145
 * Will be about 10 or so for InvenSense, and about 33 for ADXRS610.
146
 */
146
 */
147
#define GYRO_RATE_FACTOR_PITCHROLL (GYRO_HW_FACTOR * GYRO_SUMMATION_FACTOR_PITCHROLL * GYRO_FACTOR_PITCHROLL)
147
#define GYRO_RATE_FACTOR_PITCHROLL (GYRO_HW_FACTOR * GYRO_SUMMATION_FACTOR_PITCHROLL * GYRO_FACTOR_PITCHROLL)
148
#define GYRO_RATE_FACTOR_YAW (GYRO_HW_FACTOR * GYRO_SUMMATION_FACTOR_YAW)
148
#define GYRO_RATE_FACTOR_YAW (GYRO_HW_FACTOR * GYRO_SUMMATION_FACTOR_YAW)
149
 
149
 
150
/*
150
/*
151
 * Gyro saturation prevention.
151
 * Gyro saturation prevention.
152
 */
152
 */
153
// How far from the end of its range a gyro is considered near-saturated.
153
// How far from the end of its range a gyro is considered near-saturated.
154
#define SENSOR_MIN_PITCHROLL 32
154
#define SENSOR_MIN_PITCHROLL 32
155
// Other end of the range (calculated)
155
// Other end of the range (calculated)
156
#define SENSOR_MAX_PITCHROLL (GYRO_SUMMATION_FACTOR_PITCHROLL * 1023 - SENSOR_MIN_PITCHROLL)
156
#define SENSOR_MAX_PITCHROLL (GYRO_SUMMATION_FACTOR_PITCHROLL * 1023 - SENSOR_MIN_PITCHROLL)
157
// Max. boost to add "virtually" to gyro signal at total saturation.
157
// Max. boost to add "virtually" to gyro signal at total saturation.
158
#define EXTRAPOLATION_LIMIT 2500
158
#define EXTRAPOLATION_LIMIT 2500
159
// Slope of the boost (calculated)
159
// Slope of the boost (calculated)
160
#define EXTRAPOLATION_SLOPE (EXTRAPOLATION_LIMIT/SENSOR_MIN_PITCHROLL)
160
#define EXTRAPOLATION_SLOPE (EXTRAPOLATION_LIMIT/SENSOR_MIN_PITCHROLL)
161
 
161
 
162
/*
162
/*
163
 * This value is subtracted from the gyro noise measurement in each iteration,
163
 * This value is subtracted from the gyro noise measurement in each iteration,
164
 * making it return towards zero.
164
 * making it return towards zero.
165
 */
165
 */
166
#define GYRO_NOISE_MEASUREMENT_DAMPING 5
166
#define GYRO_NOISE_MEASUREMENT_DAMPING 5
167
 
167
 
168
#define PITCH 0
168
#define PITCH 0
169
#define ROLL 1
169
#define ROLL 1
170
#define YAW 2
170
#define YAW 2
171
#define Z 2
171
#define Z 2
172
/*
172
/*
173
 * The values that this module outputs
173
 * The values that this module outputs
174
 * These first 2 exported arrays are zero-offset. The "PID" ones are used
174
 * These first 2 exported arrays are zero-offset. The "PID" ones are used
175
 * in the attitude control as rotation rates. The "ATT" ones are for
175
 * in the attitude control as rotation rates. The "ATT" ones are for
176
 * integration to angles. For the same axis, the PID and ATT variables
176
 * integration to angles. For the same axis, the PID and ATT variables
177
 * generally have about the same values. There are just some differences
177
 * generally have about the same values. There are just some differences
178
 * in filtering, and when a gyro becomes near saturated.
178
 * in filtering, and when a gyro becomes near saturated.
179
 * Maybe this distinction is not really necessary.
179
 * Maybe this distinction is not really necessary.
180
 */
180
 */
181
extern volatile int16_t gyro_PID[2];
181
extern volatile int16_t gyro_PID[2];
182
extern volatile int16_t gyro_ATT[2];
182
extern volatile int16_t gyro_ATT[2];
183
extern volatile int16_t gyroD[2];
183
extern volatile int16_t gyroD[2];
184
extern volatile int16_t yawGyro;
184
extern volatile int16_t yawGyro;
185
extern volatile uint16_t ADCycleCount;
185
extern volatile uint16_t ADCycleCount;
186
extern volatile int16_t UBat;
186
extern volatile int16_t UBat;
187
 
187
 
188
// 1:11 voltage divider, 1024 counts per 3V, and result is divided by 3.
188
// 1:11 voltage divider, 1024 counts per 3V, and result is divided by 3.
189
#define UBAT_AT_5V (int16_t)((5.0 * (1.0/11.0)) * 1024 / (3.0 * 3))
189
#define UBAT_AT_5V (int16_t)((5.0 * (1.0/11.0)) * 1024 / (3.0 * 3))
-
 
190
 
-
 
191
typedef struct {
-
 
192
  uint8_t checksum;
-
 
193
  uint8_t revisionNumber;
-
 
194
  int16_t offsets[3];
-
 
195
} sensorOffset_t;
-
 
196
 
-
 
197
extern sensorOffset_t gyroOffset;
-
 
198
extern sensorOffset_t accOffset;
190
 
199
 
191
/*
200
/*
192
 * This is not really for external use - but the ENC-03 gyro modules needs it.
201
 * This is not really for external use - but the ENC-03 gyro modules needs it.
193
 */
202
 */
194
extern volatile int16_t rawGyroSum[3];
203
extern volatile int16_t rawGyroSum[3];
195
 
204
 
196
/*
205
/*
197
 * The acceleration values that this module outputs. They are zero based.
206
 * The acceleration values that this module outputs. They are zero based.
198
 */
207
 */
199
extern volatile int16_t acc[3];
208
extern volatile int16_t acc[3];
200
extern volatile int16_t filteredAcc[2];
209
extern volatile int16_t filteredAcc[2];
201
// extern volatile int32_t stronglyFilteredAcc[3];
210
// extern volatile int32_t stronglyFilteredAcc[3];
202
 
211
 
203
/*
212
/*
204
 * Diagnostics: Gyro noise level because of motor vibrations. The variables
213
 * Diagnostics: Gyro noise level because of motor vibrations. The variables
205
 * only really reflect the noise level when the copter stands still but with
214
 * only really reflect the noise level when the copter stands still but with
206
 * its motors running.
215
 * its motors running.
207
 */
216
 */
208
extern volatile uint16_t gyroNoisePeak[2];
217
extern volatile uint16_t gyroNoisePeak[2];
209
extern volatile uint16_t accNoisePeak[2];
218
extern volatile uint16_t accNoisePeak[2];
210
 
219
 
211
/*
220
/*
212
 * Air pressure.
221
 * Air pressure.
213
 * The sensor has a sensitivity of 46 mV/kPa.
222
 * The sensor has a sensitivity of 46 mV/kPa.
214
 * An approximate p(h) formula is = p(h[m])[Pa] = p_0 - 11.95 * 10^-3 * h
223
 * An approximate p(h) formula is = p(h[m])[Pa] = p_0 - 11.95 * 10^-3 * h
215
 * That is: dV = 46 mV * 11.95 * 10^-3 dh = 0.5497 mV / m.
224
 * That is: dV = 46 mV * 11.95 * 10^-3 dh = 0.5497 mV / m.
216
 * That is, with 2 * 1.024 / 3 steps per mV: 0.037 steps / m
225
 * That is, with 2 * 1.024 / 3 steps per mV: 0.037 steps / m
217
 */
226
 */
218
#define AIRPRESSURE_SUMMATION_FACTOR 16
227
#define AIRPRESSURE_SUMMATION_FACTOR 16
219
#define AIRPRESSURE_FILTER 8
228
#define AIRPRESSURE_FILTER 8
220
// Minimum A/D value before a range change is performed.
229
// Minimum A/D value before a range change is performed.
221
#define MIN_RAWPRESSURE (200 * 2)
230
#define MIN_RAWPRESSURE (200 * 2)
222
// Maximum A/D value before a range change is performed.
231
// Maximum A/D value before a range change is performed.
223
#define MAX_RAWPRESSURE (1023 * 2 - MIN_RAWPRESSURE)
232
#define MAX_RAWPRESSURE (1023 * 2 - MIN_RAWPRESSURE)
224
 
233
 
225
#define MIN_RANGES_EXTRAPOLATION 15
234
#define MIN_RANGES_EXTRAPOLATION 15
226
#define MAX_RANGES_EXTRAPOLATION 240
235
#define MAX_RANGES_EXTRAPOLATION 240
227
 
236
 
228
#define PRESSURE_EXTRAPOLATION_COEFF 25L
237
#define PRESSURE_EXTRAPOLATION_COEFF 25L
229
#define AUTORANGE_WAIT_FACTOR 1
238
#define AUTORANGE_WAIT_FACTOR 1
230
 
239
 
231
extern volatile uint16_t simpleAirPressure;
240
extern volatile uint16_t simpleAirPressure;
232
/*
241
/*
233
 * At saturation, the filteredAirPressure may actually be (simulated) negative.
242
 * At saturation, the filteredAirPressure may actually be (simulated) negative.
234
 */
243
 */
235
extern volatile int32_t filteredAirPressure;
244
extern volatile int32_t filteredAirPressure;
236
 
245
 
237
/*
246
/*
238
 * Flag: Interrupt handler has done all A/D conversion and processing.
247
 * Flag: Interrupt handler has done all A/D conversion and processing.
239
 */
248
 */
240
extern volatile uint8_t analogDataReady;
249
extern volatile uint8_t analogDataReady;
241
 
250
 
242
void analog_init(void);
251
void analog_init(void);
243
 
252
 
244
/*
253
/*
245
 * Start the conversion cycle. It will stop automatically.
254
 * Start the conversion cycle. It will stop automatically.
246
 */
255
 */
247
void startAnalogConversionCycle(void);
256
void startAnalogConversionCycle(void);
248
 
257
 
249
/*
258
/*
250
 * Process the sensor data to update the exported variables. Must be called after each measurement cycle and before the data is used.
259
 * Process the sensor data to update the exported variables. Must be called after each measurement cycle and before the data is used.
251
 */
260
 */
252
void analog_update(void);
261
void analog_update(void);
253
 
262
 
254
/*
263
/*
255
 * "Warm" calibration: Zero-offset gyros.
264
 * "Warm" calibration: Zero-offset gyros.
256
 */
265
 */
257
void analog_calibrate(void);
266
void analog_calibrate(void);
258
 
267
 
259
/*
268
/*
260
 * "Cold" calibration: Zero-offset accelerometers and write the calibration data to EEPROM.
269
 * "Cold" calibration: Zero-offset accelerometers and write the calibration data to EEPROM.
261
 */
270
 */
262
void analog_calibrateAcc(void);
271
void analog_calibrateAcc(void);
263
#endif //_ANALOG_H
272
#endif //_ANALOG_H
264
 
273