Subversion Repositories FlightCtrl

Rev

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;