Subversion Repositories FlightCtrl

Rev

Rev 1155 | Rev 1167 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1155 Rev 1166
Line 5... Line 5...
5
// + see the File "License.txt" for further Informations
5
// + see the File "License.txt" for further Informations
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Line 7... Line 7...
7
 
7
 
8
#include "main.h"
8
#include "main.h"
-
 
9
volatile int  Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
-
 
10
volatile int  AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0;
9
volatile int  Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
11
volatile int  HiResNick = 2500, HiResRoll = 2500;
10
volatile int  AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0;
12
volatile int  AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0;
11
volatile int  AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0;
13
volatile int  AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0;
12
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
-
 
13
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
14
volatile char messanzahl_AccHoch = 0;
14
volatile long Luftdruck = 32000;
15
volatile long Luftdruck = 32000;
15
volatile int  StartLuftdruck;
16
volatile int  StartLuftdruck;
16
volatile unsigned int  MessLuftdruck = 1023;
17
volatile unsigned int  MessLuftdruck = 1023;
17
unsigned char DruckOffsetSetting;
18
unsigned char DruckOffsetSetting;
Line 75... Line 76...
75
   while(messanzahl_Druck == 0);
76
   while(messanzahl_Druck == 0);
76
   if(i<10) Delay_ms_Mess(10);  
77
   if(i<10) Delay_ms_Mess(10);  
77
  }
78
  }
78
   Delay_ms_Mess(70);  
79
   Delay_ms_Mess(70);  
79
}
80
}
-
 
81
/*
-
 
82
0  n
-
 
83
1  r
-
 
84
2     g
-
 
85
3     y
-
 
86
4  n
-
 
87
5  r
-
 
88
6     z
-
 
89
7     l
-
 
90
8  n  
-
 
91
9  r
-
 
92
10    x
-
 
93
11    g
-
 
94
12 n
-
 
95
13 r
-
 
96
14    u
-
 
97
15    y
-
 
98
16 n
-
 
99
17 r
-
 
100
18    x
-
 
101
19  n
-
 
102
20  r
-
 
103
21    g
-
 
104
22    y
-
 
105
4  n
-
 
106
5  r
-
 
107
6     z
-
 
108
7     l
-
 
109
8  n  
-
 
110
9  r
-
 
111
10    x
-
 
112
11    g
-
 
113
12 n
-
 
114
13 r
-
 
115
14    u
-
 
116
15    y
-
 
117
16 n
-
 
118
17 r
-
 
119
18    x
-
 
120
*/
-
 
121
#define FILTER 3
Line 80... Line 122...
80
 
122
 
81
//#######################################################################################
123
//#######################################################################################
82
//
124
//
83
SIGNAL(SIG_ADC)
125
SIGNAL(SIG_ADC)
84
//#######################################################################################
126
//#######################################################################################
85
{
127
{
-
 
128
    static unsigned char kanal=0,state = 0;
-
 
129
    static signed int gier1, roll1, nick1;
-
 
130
        static signed long nick_filter, roll_filter;   
-
 
131
        static signed int accy, accx;
-
 
132
//    ANALOG_OFF;
-
 
133
    switch(state++)
-
 
134
        {
-
 
135
        case 0:
-
 
136
J4High;
-
 
137
            nick1 = ADC;
-
 
138
            kanal = AD_ROLL;
-
 
139
            break;
-
 
140
        case 1:
-
 
141
            roll1 = ADC;
-
 
142
                    kanal = AD_GIER;
-
 
143
            break;
-
 
144
        case 2:
-
 
145
            gier1 = ADC;
-
 
146
            kanal = AD_ACC_Y;
-
 
147
            break;
-
 
148
        case 3:
-
 
149
J5High;
-
 
150
            Aktuell_ay = NeutralAccY - ADC;
-
 
151
            accy = Aktuell_ay;
-
 
152
            kanal = AD_NICK;
-
 
153
            break;
-
 
154
        case 4:
-
 
155
J4High;
-
 
156
            nick1 += ADC;
-
 
157
            kanal = AD_ROLL;
-
 
158
            break;
-
 
159
        case 5:
-
 
160
            roll1 += ADC;
-
 
161
                    kanal = AD_ACC_Z;
-
 
162
            break;
-
 
163
       case 6:
-
 
164
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
-
 
165
            if(AdWertAccHoch > 1)
-
 
166
             {
-
 
167
              if(NeutralAccZ < 750)
-
 
168
               {
-
 
169
                NeutralAccZ += 0.02;
-
 
170
                if(modell_fliegt < 500) NeutralAccZ += 0.1;
-
 
171
               }
-
 
172
             }  
-
 
173
             else if(AdWertAccHoch < -1)
-
 
174
             {
-
 
175
              if(NeutralAccZ > 550)
-
 
176
                {
-
 
177
                 NeutralAccZ-= 0.02;
-
 
178
                 if(modell_fliegt < 500) NeutralAccZ -= 0.1;              
-
 
179
                }
-
 
180
             }
-
 
181
            messanzahl_AccHoch = 1;
-
 
182
            Aktuell_az = ADC;
-
 
183
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
-
 
184
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
-
 
185
            kanal = AD_NICK;
-
 
186
            break;
-
 
187
        case 7:
-
 
188
J4High;
-
 
189
            nick1 += ADC;
-
 
190
            kanal = AD_ROLL;
-
 
191
            break;
-
 
192
        case 8:
-
 
193
            roll1 += ADC;
-
 
194
                    kanal = AD_ACC_X;
-
 
195
            break;
-
 
196
        case 9:
-
 
197
            Aktuell_ax = ADC - NeutralAccX;
-
 
198
            accx =  Aktuell_ax;
-
 
199
                    kanal = AD_GIER;
-
 
200
            break;
-
 
201
        case 10:
-
 
202
            gier1 += ADC;
-
 
203
            kanal = AD_NICK;
-
 
204
            break;
-
 
205
        case 11:
-
 
206
J4High;
-
 
207
            nick1 += ADC;
-
 
208
            kanal = AD_ROLL;
-
 
209
            break;
-
 
210
        case 12:
-
 
211
            roll1 += ADC;
-
 
212
            kanal = AD_UBAT;
-
 
213
            break;
-
 
214
        case 13:
-
 
215
            UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19)  / 2;
-
 
216
            kanal = AD_ACC_Y;
-
 
217
            break;
-
 
218
        case 14:
-
 
219
J5High;
-
 
220
            Aktuell_ay = NeutralAccY - ADC;
-
 
221
            accy += Aktuell_ay;
-
 
222
            kanal = AD_NICK;
-
 
223
            break;
-
 
224
        case 15:
-
 
225
J4High;
-
 
226
            nick1 += ADC;
-
 
227
            kanal = AD_ROLL;
-
 
228
            break;
-
 
229
        case 16:
-
 
230
            roll1 += ADC;
-
 
231
            kanal = AD_ACC_X;
-
 
232
            break;
-
 
233
        case 17:
-
 
234
            Aktuell_ax = ADC - NeutralAccX;
-
 
235
            accx += Aktuell_ax;
-
 
236
                    kanal = AD_NICK;
-
 
237
            break;
-
 
238
        case 18:
-
 
239
J4High;
-
 
240
            nick1 += ADC;
-
 
241
            kanal = AD_ROLL;
-
 
242
            break;
-
 
243
        case 19:
-
 
244
            roll1 += ADC;
-
 
245
                    kanal = AD_GIER;
-
 
246
            break;
-
 
247
        case 20:
-
 
248
            gier1 += ADC;
-
 
249
            kanal = AD_ACC_Y;
-
 
250
            break;
-
 
251
        case 21:
-
 
252
J5High;
-
 
253
            Aktuell_ay = NeutralAccY - ADC;
-
 
254
            accy += Aktuell_ay;
-
 
255
            kanal = AD_NICK;
-
 
256
            break;
-
 
257
        case 22:
-
 
258
J4High;
-
 
259
            nick1 += ADC;
-
 
260
            kanal = AD_ROLL;
-
 
261
            break;
-
 
262
        case 23:
-
 
263
            roll1 += ADC;
-
 
264
                kanal = AD_DRUCK;
-
 
265
            break;
-
 
266
        case 24:
-
 
267
            tmpLuftdruck += ADC;
-
 
268
 
-
 
269
            if(++messanzahl_Druck >= 5)
-
 
270
                {
-
 
271
                MessLuftdruck = ADC;
-
 
272
                messanzahl_Druck = 0;
-
 
273
                                HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8;  // D-Anteil = neuerWert - AlterWert
-
 
274
                Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
-
 
275
                HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck;
-
 
276
                tmpLuftdruck = 0;
-
 
277
                }
-
 
278
            kanal = AD_NICK;
-
 
279
            break;
-
 
280
        case 25:
-
 
281
J4High;
-
 
282
            nick1 += ADC;
-
 
283
            kanal = AD_ROLL;
-
 
284
            break;
-
 
285
        case 26:
-
 
286
            roll1 += ADC;
-
 
287
                    kanal = AD_ACC_X;
-
 
288
            break;
-
 
289
        case 27:
-
 
290
            Aktuell_ax = ADC - NeutralAccX;
-
 
291
            accx +=  Aktuell_ax;
-
 
292
                    kanal = AD_GIER;
-
 
293
            break;
-
 
294
        case 28:
-
 
295
            if(PlatinenVersion == 10)  AdWertGier = (ADC + gier1 + 2) / 4;
-
 
296
            else
-
 
297
            if(PlatinenVersion == 20)  AdWertGier = 2047 - (ADC + gier1 + 1) / 2;
-
 
298
                        else                                       AdWertGier = (ADC + gier1 + 1) / 2;
-
 
299
            kanal = AD_NICK;
-
 
300
            break;
-
 
301
        case 29:
-
 
302
J4High;
-
 
303
            nick1 += ADC;
-
 
304
            kanal = AD_ROLL;
-
 
305
            break;
-
 
306
        case 30:
-
 
307
            roll1 += ADC;
-
 
308
            kanal = AD_ACC_Y;
-
 
309
            break;
-
 
310
        case 31:
-
 
311
J5High;
-
 
312
            Aktuell_ay = NeutralAccY - ADC;
-
 
313
            AdWertAccRoll = (Aktuell_ay + accy);
-
 
314
            kanal = AD_NICK;
-
 
315
            break;
-
 
316
        case 32:
-
 
317
J4High;
-
 
318
            AdWertNick = (ADC + nick1 + 3) / 5;
-
 
319
            nick_filter = (long) (1 * (long) nick_filter + 4 * (long)(ADC + nick1) + 1) / 2;
-
 
320
            if(PlatinenVersion == 10) { AdWertNick /= 2;nick_filter /=2;}
-
 
321
            HiResNick = nick_filter - 20 * AdNeutralNick;
-
 
322
            AdWertNickFilter = (long)(3L * (long)AdWertNickFilter + HiResNick + 2) / 4;
-
 
323
            DebugOut.Analog[21] = AdWertNickFilter / 4;  
-
 
324
            kanal = AD_ROLL;
-
 
325
            break;
-
 
326
        case 33:
-
 
327
            AdWertRoll = (ADC + roll1 + 3) / 5;
-
 
328
            roll_filter = (long)(1 * (long)roll_filter + 4 * (long)(ADC + roll1) + 1) / 2;
-
 
329
            if(PlatinenVersion == 10) { AdWertRoll /= 2;roll_filter /=2;}
-
 
330
            HiResRoll = roll_filter - 20 * AdNeutralRoll;
-
 
331
            AdWertRollFilter = (long)(3L * (long)AdWertRollFilter + HiResRoll + 2) / 4;
-
 
332
            DebugOut.Analog[22] = AdWertRollFilter / 4;
-
 
333
            kanal = AD_ACC_X;
-
 
334
            break;
-
 
335
        case 34:
-
 
336
            Aktuell_ax = ADC - NeutralAccX;
-
 
337
            AdWertAccNick =  (Aktuell_ax + accx);
-
 
338
                    kanal = AD_NICK;
-
 
339
            state = 0;
-
 
340
                        AdReady = 1;
-
 
341
            ZaehlMessungen++;
-
 
342
            break;
-
 
343
        default:
-
 
344
            kanal = 0;
-
 
345
            state = 0;
-
 
346
            break;
-
 
347
        }
-
 
348
    ADMUX = kanal;
-
 
349
    if(state != 0) ANALOG_ON;
-
 
350
J4Low;
-
 
351
J5Low;
-
 
352
}
-
 
353
 
-
 
354
/*
-
 
355
//#######################################################################################
-
 
356
//
-
 
357
SIGNAL(SIG_ADC)
-
 
358
//#######################################################################################
-
 
359
{
-
 
360
    static unsigned char kanal=0,state = 0;
-
 
361
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;   
-
 
362
        static signed int accy, accx;
-
 
363
//    ANALOG_OFF;
-
 
364
    switch(state++)
-
 
365
        {
-
 
366
        case 0:
-
 
367
J4High;
-
 
368
            nick1 = ADC;
-
 
369
            kanal = AD_ROLL;
-
 
370
            break;
-
 
371
        case 1:
-
 
372
            roll1 = ADC;
-
 
373
                    kanal = AD_GIER;
-
 
374
            break;
-
 
375
        case 2:
-
 
376
            gier1 = ADC;
-
 
377
            kanal = AD_ACC_Y;
-
 
378
            break;
-
 
379
        case 3:
-
 
380
            Aktuell_ay = NeutralAccY - ADC;
-
 
381
            accy = Aktuell_ay;
-
 
382
            kanal = AD_NICK;
-
 
383
            break;
-
 
384
        case 4:
-
 
385
J4High;
-
 
386
            nick1 += ADC;
-
 
387
            kanal = AD_ROLL;
-
 
388
            break;
-
 
389
        case 5:
-
 
390
            roll1 += ADC;
-
 
391
                    kanal = AD_ACC_Z;
-
 
392
            break;
-
 
393
       case 6:
-
 
394
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
-
 
395
            if(AdWertAccHoch > 1)
-
 
396
             {
-
 
397
              if(NeutralAccZ < 750)
-
 
398
               {
-
 
399
                NeutralAccZ += 0.02;
-
 
400
                if(modell_fliegt < 500) NeutralAccZ += 0.1;
-
 
401
               }
-
 
402
             }  
-
 
403
             else if(AdWertAccHoch < -1)
-
 
404
             {
-
 
405
              if(NeutralAccZ > 550)
-
 
406
                {
-
 
407
                 NeutralAccZ-= 0.02;
-
 
408
                 if(modell_fliegt < 500) NeutralAccZ -= 0.1;              
-
 
409
                }
-
 
410
             }
-
 
411
            messanzahl_AccHoch = 1;
-
 
412
            Aktuell_az = ADC;
-
 
413
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
-
 
414
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
-
 
415
                kanal = AD_DRUCK;
-
 
416
            break;
-
 
417
        case 7:
-
 
418
            tmpLuftdruck += ADC;
-
 
419
 
-
 
420
            if(++messanzahl_Druck >= 5)
-
 
421
                {
-
 
422
                MessLuftdruck = ADC;
-
 
423
                messanzahl_Druck = 0;
-
 
424
                                HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8;  // D-Anteil = neuerWert - AlterWert
-
 
425
                Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
-
 
426
                HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck;
-
 
427
                tmpLuftdruck = 0;
-
 
428
                }
-
 
429
            kanal = AD_NICK;
-
 
430
            break;
-
 
431
        case 8:
-
 
432
J4High;
-
 
433
            nick1 += ADC;
-
 
434
            kanal = AD_ROLL;
-
 
435
            break;
-
 
436
        case 9:
-
 
437
            roll1 += ADC;
-
 
438
                    kanal = AD_ACC_X;
-
 
439
            break;
-
 
440
        case 10:
-
 
441
            Aktuell_ax = ADC - NeutralAccX;
-
 
442
            accx =  Aktuell_ax;
-
 
443
                    kanal = AD_GIER;
-
 
444
            break;
-
 
445
        case 11:
-
 
446
            if(PlatinenVersion == 10)  AdWertGier = (ADC + gier1) / 2;
-
 
447
            else
-
 
448
            if(PlatinenVersion == 20)  AdWertGier = 2047 - (ADC + gier1);
-
 
449
                        else                                       AdWertGier = (ADC + gier1);
-
 
450
            kanal = AD_NICK;
-
 
451
            break;
-
 
452
        case 12:
-
 
453
J4High;
-
 
454
            nick1 += ADC;
-
 
455
            kanal = AD_ROLL;
-
 
456
            break;
-
 
457
        case 13:
-
 
458
            roll1 += ADC;
-
 
459
            kanal = AD_UBAT;
-
 
460
            break;
-
 
461
        case 14:
-
 
462
            UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19)  / 2;
-
 
463
            kanal = AD_ACC_Y;
-
 
464
            break;
-
 
465
        case 15:
-
 
466
            Aktuell_ay = NeutralAccY - ADC;
-
 
467
            AdWertAccRoll = (Aktuell_ay + accy);
-
 
468
            kanal = AD_NICK;
-
 
469
            break;
-
 
470
        case 16:
-
 
471
J4High;
-
 
472
//            if(PlatinenVersion == 10)  AdWertNick = (ADC + nick1) / 5;
-
 
473
//                      else                                       AdWertNick = (5 * AdWertNick + 2*(ADC + nick1)) / 10;
-
 
474
            AdWertNick = 2*(ADC + nick1) / 5;
-
 
475
            nick_filter = (2 * nick_filter + 2 * (ADC + nick1)) / 3;
-
 
476
            HiResNick = nick_filter - 5 * AdNeutralNick;
-
 
477
            AdWertNickFilter = (long)(3L * (long)AdWertNickFilter + 4 * HiResNick) / 4;
-
 
478
            DebugOut.Analog[21] = AdWertNickFilter / 4;
-
 
479
            kanal = AD_ROLL;
-
 
480
            break;
-
 
481
        case 17:
-
 
482
//          if(PlatinenVersion == 10)  AdWertRoll = (ADC + roll1) / 5;
-
 
483
//                      else                                       AdWertRoll = (5 * AdWertRoll + 2*(ADC + roll1)) / 10;
-
 
484
            AdWertRoll = 2*(ADC + roll1) / 5;
-
 
485
            roll_filter = (2 * roll_filter + 2 * (ADC + roll1)) / 3;
-
 
486
            HiResRoll = roll_filter - 5 * AdNeutralRoll;
-
 
487
            AdWertRollFilter = (long)(3 * (long)AdWertRollFilter + 4 * HiResRoll) / 4;
-
 
488
            DebugOut.Analog[22] = AdWertRollFilter / 4;
-
 
489
            kanal = AD_ACC_X;
-
 
490
            break;
-
 
491
        case 18:
-
 
492
            Aktuell_ax = ADC - NeutralAccX;
-
 
493
            AdWertAccNick =  (Aktuell_ax + accx);
-
 
494
                    kanal = AD_NICK;
-
 
495
            state = 0;
-
 
496
                        AdReady = 1;
-
 
497
            ZaehlMessungen++;
-
 
498
J5High;
-
 
499
            break;
-
 
500
        default:
-
 
501
            kanal = 0;
-
 
502
            state = 0;
-
 
503
            break;
-
 
504
        }
-
 
505
    ADMUX = kanal;
-
 
506
    if(state != 0) ANALOG_ON;
-
 
507
J4Low;
-
 
508
J5Low;
-
 
509
}
-
 
510
*/
-
 
511
 
-
 
512
/*
-
 
513
//#######################################################################################
-
 
514
//
-
 
515
SIGNAL(SIG_ADC)
-
 
516
//#######################################################################################
-
 
517
{
86
    static unsigned char kanal=0,state = 0;
518
    static unsigned char kanal=0,state = 0;
87
    static unsigned int gier1, roll1, nick1, accy, accx;
519
    static unsigned int gier1, roll1, nick1, accy, accx;
88
    ANALOG_OFF;
520
    ANALOG_OFF;
89
    switch(state++)
521
    switch(state++)
90
        {
522
        {
Line 211... Line 643...
211
            break;
643
            break;
212
        }
644
        }
213
    ADMUX = kanal;
645
    ADMUX = kanal;
214
    if(state != 0) ANALOG_ON;
646
    if(state != 0) ANALOG_ON;
215
}
647
}
-
 
648
*/
-
 
649
 
-
 
650
 
-
 
651
 
-
 
652
 
-
 
653
 
-
 
654
 
-
 
655
 
-
 
656
 
-
 
657
 
-
 
658
 
-
 
659