Subversion Repositories FlightCtrl

Rev

Rev 1226 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1226 Rev 1286
Line 79... Line 79...
79
   if(i<10) Delay_ms_Mess(10);  
79
   if(i<10) Delay_ms_Mess(10);  
80
  }
80
  }
81
   Delay_ms_Mess(70);  
81
   Delay_ms_Mess(70);  
82
}
82
}
Line 83... Line 83...
83
 
83
 
84
/*
84
/* // MartinR: so war es
85
0  n
85
0  n
86
1  r
86
1  r
87
2     g
87
2     g
88
3     y
88
3     y
Line 100... Line 100...
100
15 n
100
15 n
101
16 r
101
16 r
102
17    L
102
17    L
103
*/
103
*/
Line -... Line 104...
-
 
104
 
-
 
105
/*  MartinR : geändert
-
 
106
0  n
-
 
107
1  r
-
 
108
2     g
-
 
109
3     L
-
 
110
4  n
-
 
111
5  r
-
 
112
6         y
-
 
113
7     x
-
 
114
8  n  
-
 
115
9  r  
-
 
116
10    g
-
 
117
11    L
-
 
118
12 n  
-
 
119
13 r  
-
 
120
14    u
-
 
121
15    z
-
 
122
*/
104
 
123
 
105
//#######################################################################################
124
//#######################################################################################
106
//
125
//
107
SIGNAL(SIG_ADC)
126
SIGNAL(SIG_ADC)
108
//#######################################################################################
127
//#######################################################################################
109
{
128
{
110
    static unsigned char kanal=0,state = 0;
129
    static unsigned char kanal=0,state = 0;
-
 
130
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;   
-
 
131
        static signed int roll_alt1, roll_alt2, roll_alt3, nick_alt1, nick_alt2, nick_alt3;     // MartinR: 4x Mittelung
111
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;   
132
        //static signed int roll_alt1, nick_alt1;       // MartinR: 2x Mittelung
-
 
133
        static signed int accy, accx;
-
 
134
       
112
        static signed int accy, accx;
135
  /*    // MartinR : so war es Anfang  
113
    switch(state++)
136
    switch(state++)
114
        {
137
        {
115
        case 0:
138
        case 0:
116
            nick1 = ADC;
139
            nick1 = ADC;
Line 235... Line 258...
235
            break;
258
            break;
236
        default:  
259
        default:  
237
            kanal = 0; state = 0; kanal = AD_NICK;
260
            kanal = 0; state = 0; kanal = AD_NICK;
238
            break;
261
            break;
239
        }
262
        }
-
 
263
                */  // MartinR : so war es Ende
-
 
264
        // MartinR : geändert Anfang
-
 
265
       
-
 
266
switch(state++)
-
 
267
        {
-
 
268
        case 0:
-
 
269
            nick1 = ADC;
-
 
270
            kanal = AD_ROLL;
-
 
271
            break;
-
 
272
        case 1:
-
 
273
            roll1 = ADC;
-
 
274
                    kanal = AD_GIER;
-
 
275
            break;
-
 
276
                       
-
 
277
                case 2:
-
 
278
            gier1 = ADC;
-
 
279
            kanal = AD_DRUCK;
-
 
280
            break;     
-
 
281
                case 3:
-
 
282
                        tmpLuftdruck += ADC;
-
 
283
                        messanzahl_Druck ++;
-
 
284
            kanal = AD_NICK;
-
 
285
            break;     
-
 
286
                       
-
 
287
                case 4:
-
 
288
            nick1 += ADC;
-
 
289
            kanal = AD_ROLL;
-
 
290
            break;
-
 
291
        case 5:
-
 
292
            roll1 += ADC;
-
 
293
            kanal = AD_ACC_Y;
-
 
294
            break;             
-
 
295
                       
-
 
296
                case 6:
-
 
297
            Aktuell_ay = NeutralAccY - ADC;
-
 
298
                        AdWertAccRoll = (Aktuell_ay + accy);
-
 
299
                        accy = Aktuell_ay;
-
 
300
                    kanal = AD_ACC_X;
-
 
301
            break;     
-
 
302
                case 7:
-
 
303
            Aktuell_ax = ADC - NeutralAccX;
-
 
304
                        AdWertAccNick =  (Aktuell_ax + accx);
-
 
305
            accx =  Aktuell_ax;
-
 
306
            kanal = AD_NICK;
-
 
307
            break;
-
 
308
                       
-
 
309
                case 8:
-
 
310
            nick1 += ADC;
-
 
311
            kanal = AD_ROLL;
-
 
312
            break;
-
 
313
        case 9:
-
 
314
            roll1 += ADC;      
-
 
315
                        kanal = AD_GIER;
-
 
316
            break;     
-
 
317
                       
-
 
318
                case 10:
-
 
319
                        if(PlatinenVersion == 10)  AdWertGier = (ADC + gier1 + 1) / 2;
-
 
320
            else
-
 
321
            if(PlatinenVersion == 20)  AdWertGier = 2047 - (ADC + gier1);
-
 
322
                        else                                       AdWertGier = (ADC + gier1);
-
 
323
            kanal = AD_DRUCK;
-
 
324
            break;
-
 
325
                       
-
 
326
                case 11:               
-
 
327
                               
-
 
328
                        // MartinR: neu
-
 
329
                        tmpLuftdruck += ADC;
-
 
330
                        //MessLuftdruck = tmpLuftdruck / 2;
-
 
331
                        MessLuftdruck = ADC;
-
 
332
                       
-
 
333
                        if(++messanzahl_Druck >= 5)
-
 
334
                        {
-
 
335
                                tmpLuftdruck -= 2616L * ExpandBaro; // -523.19 counts per 10 counts offset step
-
 
336
                                tmpLuftdruck /= 2;
-
 
337
                messanzahl_Druck = 0;
-
 
338
                                //HoeheD = (31 * HoeheD + (int) Parameter_Luftdruck_D * (int)((int)(StartLuftdruck - tmpLuftdruck) - HoehenWert))/32;  // D-Anteil = neuerWert - AlterWert
-
 
339
                Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8;
-
 
340
                HoehenWert = StartLuftdruck - Luftdruck;
-
 
341
                //tmpLuftdruck /= 2;
-
 
342
                                tmpLuftdruck = 0;
-
 
343
                        }
-
 
344
                       
-
 
345
                        // Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8;
-
 
346
            // HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; // MartinR: zu Höhenregler
-
 
347
                       
-
 
348
            kanal = AD_NICK;
-
 
349
            break;
-
 
350
                       
-
 
351
                case 12:
-
 
352
            nick1 += ADC;
-
 
353
                        //if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4; // MartinR: so war es
-
 
354
                        //if(PlatinenVersion == 10) ; else nick1 *= 2; // MartinR: 2x Mittelung
-
 
355
                        if(PlatinenVersion == 10) nick1 /= 2; //else nick1 *= 1; // MartinR: 4x Mittelung
-
 
356
            //AdWertNick = nick1 / 8; // MartinR: so war es
-
 
357
                        //AdWertNick = nick1 / 4; // MartinR: 2x Mittelung
-
 
358
                        AdWertNick = nick1 / 2; // MartinR: 4x Mittelung
-
 
359
                       
-
 
360
            // nick_filter = (nick_filter + nick1) / 2; // MartinR: so war es
-
 
361
                        //nick_filter = (nick_alt1 + nick1); // MartinR: anderer Nick-Filter: 2x Mittelung 
-
 
362
                        nick_filter = (nick_alt3 +nick_alt2 +nick_alt1 + nick1); // MartinR: anderer Nick-Filter: 4x Mittelung
-
 
363
                        nick_alt3 = nick_alt2; // MartinR: anderer Nick-Filter
-
 
364
                        nick_alt2 = nick_alt1; // MartinR: anderer Nick-Filter
-
 
365
                        nick_alt1 = nick1; // MartinR: anderer Nick-Filter
-
 
366
                       
-
 
367
            HiResNick = nick_filter - AdNeutralNick;
-
 
368
            //AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2; // MartinR: so war es
-
 
369
                        AdWertNickFilter = HiResNick; // MartinR: Filter deaktiviert
-
 
370
            kanal = AD_ROLL;
-
 
371
                       
-
 
372
            break;
-
 
373
        case 13:
-
 
374
            roll1 += ADC;      
-
 
375
                        // if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4; // MartinR: so war es
-
 
376
                        //if(PlatinenVersion == 10) ; else roll1 *= 2; // MartinR: 2x Mittelung
-
 
377
                        if(PlatinenVersion == 10) roll1 /= 2; //else roll1 *= 1; // MartinR: 4x Mittelung
-
 
378
            // AdWertRoll = roll1 / 8; // MartinR: so war es
-
 
379
                        //AdWertRoll = roll1 / 4; // MartinR: 2x Mittelung
-
 
380
                        AdWertRoll = roll1 / 2; // MartinR: 4x Mittelung
-
 
381
                       
-
 
382
            //roll_filter = (roll_filter + roll1) / 2; // MartinR: so war es
-
 
383
                        //roll_filter = (roll_alt1 + roll1); // MartinR: anderer Nick-Filter: 2x Mittelung
-
 
384
                        roll_filter = (roll_alt3 + roll_alt2 + roll_alt1 + roll1); // MartinR: anderer Nick-Filter: 4x Mittelung
-
 
385
                        roll_alt3 = roll_alt2; // MartinR: anderer Nick-Filter
-
 
386
                        roll_alt2 = roll_alt1; // MartinR: anderer Nick-Filter
-
 
387
                        roll_alt1 = roll1; // MartinR: anderer Nick-Filter
-
 
388
                               
-
 
389
            HiResRoll = roll_filter - AdNeutralRoll;
-
 
390
            //AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;  // MartinR: so war es
-
 
391
                        AdWertRollFilter = HiResRoll; // MartinR: Filter deaktiviert
-
 
392
                       
-
 
393
                        kanal = AD_UBAT;
-
 
394
                       
-
 
395
            break;     
-
 
396
                       
-
 
397
                case 14:
-
 
398
            UBat = (3 * UBat + ADC / 3) / 4;
-
 
399
                    kanal = AD_ACC_Z;
-
 
400
            break;
-
 
401
                       
-
 
402
                case 15:       
-
 
403
                        // AdWertAccHoch =  (signed int) ADC - NeutralAccZ; // MartinR : so war es
-
 
404
                        //AdWertAccHoch =  ADC - NeutralAccZ; // MartinR: modifiziert für Tests
-
 
405
                        /* // MartinR: deaktiviert
-
 
406
                       
-
 
407
            if(AdWertAccHoch > 1)
-
 
408
             {
-
 
409
              if(NeutralAccZ < 750)
-
 
410
               {
-
 
411
                NeutralAccZ += 0.02;
-
 
412
                if(modell_fliegt < 500) NeutralAccZ += 0.1;
-
 
413
               }
-
 
414
             }  
-
 
415
             else if(AdWertAccHoch < -1)
-
 
416
             {
-
 
417
              if(NeutralAccZ > 550)
-
 
418
                {
-
 
419
                 NeutralAccZ -= 0.02;
-
 
420
                 if(modell_fliegt < 500) NeutralAccZ -= 0.1;              
-
 
421
                }
-
 
422
             }
-
 
423
                        */ // MartinR: deaktiviert Ende 
-
 
424
                         
-
 
425
            // messanzahl_AccHoch = 1; MartinR: deaktiviert, da nicht verwendet
-
 
426
               
-
 
427
                        Aktuell_az = (Aktuell_az + ADC) / 2;
-
 
428
                        AdWertAccHoch =  Aktuell_az - NeutralAccZ; // MartinR: modifiziert für Tests
-
 
429
                        //Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren  // MartinR: zu Höhenregler in fc.c verschoben
-
 
430
            //Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen // MartinR: zu Höhenregler in fc.c verschoben
-
 
431
                       
-
 
432
                        AdReady = 1;
-
 
433
                        state = 0;
-
 
434
                        kanal = AD_NICK;
-
 
435
            break;
-
 
436
                       
-
 
437
        default:  
-
 
438
            kanal = 0; state = 0; kanal = AD_NICK;
-
 
439
            break;
-
 
440
        }
-
 
441
       
-
 
442
        // MartinR : geändert Ende
-
 
443
       
-
 
444
       
240
    ADMUX = kanal;
445
    ADMUX = kanal;
241
    if(state != 0) ANALOG_ON;
446
        // if(state != 0) ANALOG_ON; // MartinR : so war es:
-
 
447
        // Bei jedem Reglerzyklus wurde nur der Ablauf der Reihenfolge der AD-Wandlungen angestoßen. 
-
 
448
        // Solange die Reihe nicht durchgelaufen ist, wurde nach jeder AD-Wandlung die nächste AD-Wandlung über ANALOG_ON gestartet.
-
 
449
       
-
 
450
        // if(state != 0) ANALOG_START; // MartinR verschoben zu timer0
-
 
451
               
242
}
452
}
Line 243... Line 453...
243
 
453
 
244
 
454