Rev 2050 | Rev 2316 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2050 | Rev 2309 | ||
---|---|---|---|
Line 58... | Line 58... | ||
58 | volatile int HiResNick = 2500, HiResRoll = 2500; |
58 | volatile int HiResNick = 2500, HiResRoll = 2500; |
59 | volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
59 | volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
60 | volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
60 | volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
61 | volatile long Luftdruck = 32000; |
61 | volatile long Luftdruck = 32000; |
62 | volatile long SummenHoehe = 0; |
62 | volatile long SummenHoehe = 0; |
63 | volatile int StartLuftdruck; |
63 | volatile long StartLuftdruck; |
64 | volatile unsigned int MessLuftdruck = 1023; |
64 | volatile unsigned int MessLuftdruck = 1023; |
65 | unsigned char DruckOffsetSetting; |
65 | unsigned char DruckOffsetSetting; |
66 | signed char ExpandBaro = 0; |
66 | signed char ExpandBaro = 0; |
67 | volatile int VarioMeter = 0; |
67 | volatile int VarioMeter = 0; |
68 | volatile unsigned int ZaehlMessungen = 0; |
68 | volatile unsigned int ZaehlMessungen = 0; |
69 | unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
69 | unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
70 | volatile unsigned char AdReady = 1; |
70 | volatile unsigned char AdReady = 1; |
- | 71 | volatile long HoehenWertF = 0; |
|
- | 72 | volatile long VerticalVelocity; |
|
Line 71... | Line 73... | ||
71 | 73 | ||
72 | //####################################################################################### |
74 | //####################################################################################### |
73 | void ADC_Init(void) |
75 | void ADC_Init(void) |
74 | //####################################################################################### |
76 | //####################################################################################### |
Line 177... | Line 179... | ||
177 | 15 n |
179 | 15 n |
178 | 16 r |
180 | 16 r |
179 | 17 L |
181 | 17 L |
180 | */ |
182 | */ |
Line -... | Line 183... | ||
- | 183 | ||
181 | 184 | ||
182 | //####################################################################################### |
185 | //####################################################################################### |
183 | // |
186 | // |
184 | ISR(ADC_vect) |
187 | ISR(ADC_vect) |
185 | //####################################################################################### |
188 | //####################################################################################### |
Line 229... | Line 232... | ||
229 | #endif |
232 | #endif |
230 | UBat = (3 * UBat + ADC / 3) / 4; |
233 | UBat = (3 * UBat + ADC / 3) / 4; |
231 | kanal = AD_ACC_Z; |
234 | kanal = AD_ACC_Z; |
232 | break; |
235 | break; |
233 | case 8: |
236 | case 8: |
- | 237 | Aktuell_az = ADC; |
|
234 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
238 | AdWertAccHoch = Aktuell_az - NeutralAccZ; |
235 | if(AdWertAccHoch > 1) |
239 | if(!ACC_AltitudeControl) // The Offset must be corrected, because of the ACC-Drift from vibrations |
236 | { |
240 | { |
237 | if(NeutralAccZ < 750) |
241 | if(AdWertAccHoch > 1) |
238 | { |
242 | { |
- | 243 | if(NeutralAccZ < 750) |
|
- | 244 | { |
|
239 | subcount += 5; |
245 | subcount += 5; |
240 | if(modell_fliegt < 500) subcount += 10; |
246 | if(modell_fliegt < 500) subcount += 10; |
- | 247 | } |
|
- | 248 | if(subcount > 100) { NeutralAccZ++; subcount -= 100;} |
|
- | 249 | } |
|
- | 250 | else if(AdWertAccHoch < -1) |
|
- | 251 | { |
|
- | 252 | if(NeutralAccZ > 550) |
|
- | 253 | { |
|
- | 254 | subcount -= 5; |
|
- | 255 | if(modell_fliegt < 500) subcount -= 10; |
|
- | 256 | if(subcount < -100) { NeutralAccZ--; subcount += 100;} |
|
- | 257 | } |
|
241 | } |
258 | } |
242 | if(subcount > 100) { NeutralAccZ++; subcount -= 100;} |
- | |
243 | } |
- | |
244 | else if(AdWertAccHoch < -1) |
- | |
245 | { |
- | |
246 | if(NeutralAccZ > 550) |
- | |
247 | { |
- | |
248 | subcount -= 5; |
- | |
249 | if(modell_fliegt < 500) subcount -= 10; |
- | |
250 | if(subcount < -100) { NeutralAccZ--; subcount += 100;} |
- | |
251 | } |
- | |
252 | } |
259 | } |
253 | // messanzahl_AccHoch = 1; |
- | |
254 | Aktuell_az = ADC; |
- | |
255 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
260 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
256 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
261 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
257 | kanal = AD_DRUCK; |
262 | kanal = AD_DRUCK; |
258 | break; |
263 | break; |
259 | // "case 9:" fehlt hier absichtlich |
264 | // "case 9:" fehlt hier absichtlich |
Line 299... | Line 304... | ||
299 | HiResRoll = roll_filter - AdNeutralRoll; |
304 | HiResRoll = roll_filter - AdNeutralRoll; |
300 | AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; |
305 | AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; |
301 | kanal = AD_DRUCK; |
306 | kanal = AD_DRUCK; |
302 | break; |
307 | break; |
303 | case 17: |
308 | case 17: |
- | 309 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
|
- | 310 | if(ACC_AltitudeControl) |
|
- | 311 | { |
|
- | 312 | HoehenWertF = (ACC_AltitudeFusion() + SA_FILTER/2)/SA_FILTER; // cm |
|
- | 313 | } |
|
- | 314 | else HoehenWertF = HoehenWert; |
|
- | 315 | #else |
|
- | 316 | HoehenWertF = HoehenWert; |
|
- | 317 | #endif |
|
- | 318 | ||
304 | state = 0; |
319 | state = 0; |
305 | AdReady = 1; |
320 | AdReady = 1; |
306 | ZaehlMessungen++; |
321 | ZaehlMessungen++; |
307 | // "break" fehlt hier absichtlich |
322 | // "break" fehlt hier absichtlich |
308 | case 9: |
323 | case 9: |
309 | MessLuftdruck = ADC; |
324 | MessLuftdruck = ADC; |
- | 325 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
|
- | 326 | if(ACC_AltitudeControl) |
|
- | 327 | { |
|
- | 328 | tmpLuftdruck = MessLuftdruck - 523 * (long)ExpandBaro; // -523 counts per offset step |
|
- | 329 | Luftdruck -= Luftdruck/16; |
|
- | 330 | Luftdruck += tmpLuftdruck; |
|
- | 331 | HoehenWert = StartLuftdruck - Luftdruck; // cm |
|
- | 332 | HoehenWert = HoehenWert + AdWertAccHoch * 41 / 256; // Weight-compsensation <------- |
|
- | 333 | } |
|
- | 334 | else |
|
- | 335 | #endif |
|
- | 336 | { // old version (until FC V2.1) |
|
310 | tmpLuftdruck += MessLuftdruck; |
337 | tmpLuftdruck += MessLuftdruck; |
311 | if(++messanzahl_Druck >= 16) // war bis 0.86 "18" |
338 | if(++messanzahl_Druck >= 16) // war bis 0.86 "18" |
312 | { |
339 | { |
313 | signed int tmp; |
340 | signed int tmp; |
314 | Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step |
341 | Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step |
315 | HoehenWert = StartLuftdruck - Luftdruck; |
342 | HoehenWert = StartLuftdruck - Luftdruck; |
316 | SummenHoehe -= SummenHoehe/SM_FILTER; |
343 | SummenHoehe -= SummenHoehe/SM_FILTER; |
317 | SummenHoehe += HoehenWert; |
344 | SummenHoehe += HoehenWert; |
Line 319... | Line 346... | ||
319 | if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024; |
346 | if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024; |
320 | if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16; |
347 | if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16; |
321 | else VarioMeter = (31 * VarioMeter + 8 * tmp)/32; |
348 | else VarioMeter = (31 * VarioMeter + 8 * tmp)/32; |
322 | tmpLuftdruck /= 2; |
349 | tmpLuftdruck /= 2; |
323 | messanzahl_Druck = 16/2; |
350 | messanzahl_Druck = 16/2; |
324 | } |
351 | } |
- | 352 | } |
|
325 | kanal = AD_NICK; |
353 | kanal = AD_NICK; |
326 | break; |
354 | break; |
327 | default: |
355 | default: |
328 | kanal = 0; state = 0; kanal = AD_NICK; |
356 | kanal = 0; state = 0; kanal = AD_NICK; |
329 | break; |
357 | break; |