Subversion Repositories FlightCtrl

Rev

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

Rev 1155 Rev 1166
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
// + Copyright (c) 04.2007 Holger Buss
2
// + Copyright (c) 04.2007 Holger Buss
3
// + only for non-profit use
3
// + only for non-profit use
4
// + www.MikroKopter.com
4
// + www.MikroKopter.com
5
// + see the File "License.txt" for further Informations
5
// + see the File "License.txt" for further Informations
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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;
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;
-
 
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;
14
volatile char messanzahl_AccHoch = 0;
13
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, 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;
18
signed char ExpandBaro = 0;
19
signed char ExpandBaro = 0;
19
volatile int HoeheD = 0;
20
volatile int HoeheD = 0;
20
volatile char messanzahl_Druck;
21
volatile char messanzahl_Druck;
21
volatile int  tmpLuftdruck;
22
volatile int  tmpLuftdruck;
22
volatile unsigned int ZaehlMessungen = 0;
23
volatile unsigned int ZaehlMessungen = 0;
23
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
24
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
24
unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0;
25
unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0;
25
unsigned char AdReady = 1;
26
unsigned char AdReady = 1;
26
//#######################################################################################
27
//#######################################################################################
27
//
28
//
28
void ADC_Init(void)
29
void ADC_Init(void)
29
//#######################################################################################
30
//#######################################################################################
30
{
31
{
31
    ADMUX = 0;//Referenz ist extern
32
    ADMUX = 0;//Referenz ist extern
32
    ANALOG_ON;
33
    ANALOG_ON;
33
}
34
}
34
 
35
 
35
void SucheLuftruckOffset(void)
36
void SucheLuftruckOffset(void)
36
{
37
{
37
 unsigned int off;
38
 unsigned int off;
38
 off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]);
39
 off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]);
39
 if(off > 20) off -= 10;
40
 if(off > 20) off -= 10;
40
 OCR0A = off;
41
 OCR0A = off;
41
 ExpandBaro = 0;
42
 ExpandBaro = 0;
42
 Delay_ms_Mess(100);
43
 Delay_ms_Mess(100);
43
 if(MessLuftdruck < 850) off = 0;
44
 if(MessLuftdruck < 850) off = 0;
44
 for(; off < 250;off++)
45
 for(; off < 250;off++)
45
  {
46
  {
46
  OCR0A = off;
47
  OCR0A = off;
47
  Delay_ms_Mess(50);
48
  Delay_ms_Mess(50);
48
  printf(".");  
49
  printf(".");  
49
  if(MessLuftdruck < 850) break;
50
  if(MessLuftdruck < 850) break;
50
  }
51
  }
51
 eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off);
52
 eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off);
52
 DruckOffsetSetting = off;
53
 DruckOffsetSetting = off;
53
 Delay_ms_Mess(300);
54
 Delay_ms_Mess(300);
54
}
55
}
55
 
56
 
56
void SucheGyroOffset(void)
57
void SucheGyroOffset(void)
57
{
58
{
58
 unsigned char i, ready = 0;
59
 unsigned char i, ready = 0;
59
 GyroDefektN = 0; GyroDefektR = 0; GyroDefektG = 0;
60
 GyroDefektN = 0; GyroDefektR = 0; GyroDefektG = 0;
60
 for(i=140; i != 0; i--)
61
 for(i=140; i != 0; i--)
61
  {
62
  {
62
   if(ready == 3 && i > 10) i = 9;
63
   if(ready == 3 && i > 10) i = 9;
63
   ready = 0;
64
   ready = 0;
64
   if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++;
65
   if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++;
65
   if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++;
66
   if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++;
66
   if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++;
67
   if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++;
67
   twi_state = 8;  
68
   twi_state = 8;  
68
   i2c_start();
69
   i2c_start();
69
   if(AnalogOffsetNick < 10)  { GyroDefektN = 1; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { GyroDefektN = 1; AnalogOffsetNick = 245;};
70
   if(AnalogOffsetNick < 10)  { GyroDefektN = 1; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { GyroDefektN = 1; AnalogOffsetNick = 245;};
70
   if(AnalogOffsetRoll < 10)  { GyroDefektR = 1; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { GyroDefektR = 1; AnalogOffsetRoll = 245;};
71
   if(AnalogOffsetRoll < 10)  { GyroDefektR = 1; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { GyroDefektR = 1; AnalogOffsetRoll = 245;};
71
   if(AnalogOffsetGier < 10)  { GyroDefektG = 1; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { GyroDefektG = 1; AnalogOffsetGier = 245;};
72
   if(AnalogOffsetGier < 10)  { GyroDefektG = 1; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { GyroDefektG = 1; AnalogOffsetGier = 245;};
72
   while(twi_state);
73
   while(twi_state);
73
   messanzahl_Druck = 0;
74
   messanzahl_Druck = 0;
74
   ANALOG_ON;
75
   ANALOG_ON;
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
80
 
122
 
81
//#######################################################################################
123
//#######################################################################################
82
//
124
//
83
SIGNAL(SIG_ADC)
125
SIGNAL(SIG_ADC)
84
//#######################################################################################
126
//#######################################################################################
85
{
127
{
86
    static unsigned char kanal=0,state = 0;
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
{
-
 
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
        {
91
        case 0:
523
        case 0:
92
            gier1 = ADC;
524
            gier1 = ADC;
93
            kanal = AD_ROLL;
525
            kanal = AD_ROLL;
94
            ZaehlMessungen++;
526
            ZaehlMessungen++;
95
            break;
527
            break;
96
        case 1:
528
        case 1:
97
            roll1 = ADC;
529
            roll1 = ADC;
98
            kanal = AD_NICK;
530
            kanal = AD_NICK;
99
            break;
531
            break;
100
        case 2:
532
        case 2:
101
            nick1 = ADC;
533
            nick1 = ADC;
102
            kanal = AD_ACC_Y;
534
            kanal = AD_ACC_Y;
103
            break;
535
            break;
104
        case 3:
536
        case 3:
105
            Aktuell_ay = NeutralAccY - ADC;
537
            Aktuell_ay = NeutralAccY - ADC;
106
            accy = Aktuell_ay;
538
            accy = Aktuell_ay;
107
            kanal = AD_ACC_X;
539
            kanal = AD_ACC_X;
108
            break;
540
            break;
109
        case 4:
541
        case 4:
110
            Aktuell_ax = ADC - NeutralAccX;
542
            Aktuell_ax = ADC - NeutralAccX;
111
            accx =  Aktuell_ax;
543
            accx =  Aktuell_ax;
112
                    kanal = AD_GIER;
544
                    kanal = AD_GIER;
113
            break;
545
            break;
114
        case 5:
546
        case 5:
115
            gier1 += ADC;
547
            gier1 += ADC;
116
            kanal = AD_ROLL;
548
            kanal = AD_ROLL;
117
            break;
549
            break;
118
        case 6:
550
        case 6:
119
            roll1 += ADC;
551
            roll1 += ADC;
120
            kanal = AD_NICK;
552
            kanal = AD_NICK;
121
            break;
553
            break;
122
        case 7:
554
        case 7:
123
            nick1 += ADC;
555
            nick1 += ADC;
124
            kanal = AD_UBAT;
556
            kanal = AD_UBAT;
125
            break;
557
            break;
126
        case 8:
558
        case 8:
127
            UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19)  / 2;
559
            UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19)  / 2;
128
            kanal = AD_ACC_Z;
560
            kanal = AD_ACC_Z;
129
            break;
561
            break;
130
       case 9:
562
       case 9:
131
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
563
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
132
            if(AdWertAccHoch > 1)
564
            if(AdWertAccHoch > 1)
133
             {
565
             {
134
              if(NeutralAccZ < 750)
566
              if(NeutralAccZ < 750)
135
               {
567
               {
136
                NeutralAccZ += 0.02;
568
                NeutralAccZ += 0.02;
137
                if(modell_fliegt < 500) NeutralAccZ += 0.1;
569
                if(modell_fliegt < 500) NeutralAccZ += 0.1;
138
               }
570
               }
139
             }  
571
             }  
140
             else if(AdWertAccHoch < -1)
572
             else if(AdWertAccHoch < -1)
141
             {
573
             {
142
              if(NeutralAccZ > 550)
574
              if(NeutralAccZ > 550)
143
                {
575
                {
144
                 NeutralAccZ-= 0.02;
576
                 NeutralAccZ-= 0.02;
145
                 if(modell_fliegt < 500) NeutralAccZ -= 0.1;              
577
                 if(modell_fliegt < 500) NeutralAccZ -= 0.1;              
146
                }
578
                }
147
             }
579
             }
148
            messanzahl_AccHoch = 1;
580
            messanzahl_AccHoch = 1;
149
            Aktuell_az = ADC;
581
            Aktuell_az = ADC;
150
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
582
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
151
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
583
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
152
            kanal = AD_GIER;
584
            kanal = AD_GIER;
153
            break;
585
            break;
154
        case 10:
586
        case 10:
155
            gier1 += ADC;
587
            gier1 += ADC;
156
            kanal = AD_ROLL;
588
            kanal = AD_ROLL;
157
            break;
589
            break;
158
        case 11:
590
        case 11:
159
            roll1 += ADC;
591
            roll1 += ADC;
160
            kanal = AD_NICK;
592
            kanal = AD_NICK;
161
            break;
593
            break;
162
        case 12:
594
        case 12:
163
            nick1 += ADC;
595
            nick1 += ADC;
164
                kanal = AD_DRUCK;
596
                kanal = AD_DRUCK;
165
            break;
597
            break;
166
        case 13:
598
        case 13:
167
            tmpLuftdruck += ADC;
599
            tmpLuftdruck += ADC;
168
            if(++messanzahl_Druck >= 5)
600
            if(++messanzahl_Druck >= 5)
169
                {
601
                {
170
                MessLuftdruck = ADC;
602
                MessLuftdruck = ADC;
171
                messanzahl_Druck = 0;
603
                messanzahl_Druck = 0;
172
                                HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8;  // D-Anteil = neuerWert - AlterWert
604
                                HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8;  // D-Anteil = neuerWert - AlterWert
173
                Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
605
                Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
174
                HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck;
606
                HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck;
175
                tmpLuftdruck = 0;
607
                tmpLuftdruck = 0;
176
                }
608
                }
177
            kanal = AD_ACC_Y;
609
            kanal = AD_ACC_Y;
178
            break;
610
            break;
179
        case 14:
611
        case 14:
180
            Aktuell_ay = NeutralAccY - ADC;
612
            Aktuell_ay = NeutralAccY - ADC;
181
            AdWertAccRoll = (Aktuell_ay + accy);
613
            AdWertAccRoll = (Aktuell_ay + accy);
182
            kanal = AD_ACC_X;
614
            kanal = AD_ACC_X;
183
            break;
615
            break;
184
        case 15:
616
        case 15:
185
            Aktuell_ax = ADC - NeutralAccX;
617
            Aktuell_ax = ADC - NeutralAccX;
186
            AdWertAccNick =  (Aktuell_ax + accx);
618
            AdWertAccNick =  (Aktuell_ax + accx);
187
                    kanal = AD_GIER;
619
                    kanal = AD_GIER;
188
            break;
620
            break;
189
        case 16:
621
        case 16:
190
            if(PlatinenVersion == 10)  AdWertGier = (ADC + gier1) / 4;
622
            if(PlatinenVersion == 10)  AdWertGier = (ADC + gier1) / 4;
191
            else
623
            else
192
            if(PlatinenVersion == 20)  AdWertGier = 2047 - (ADC + gier1)/2;
624
            if(PlatinenVersion == 20)  AdWertGier = 2047 - (ADC + gier1)/2;
193
                        else                                       AdWertGier = (ADC + gier1) / 2;
625
                        else                                       AdWertGier = (ADC + gier1) / 2;
194
            kanal = AD_ROLL;
626
            kanal = AD_ROLL;
195
            break;
627
            break;
196
        case 17:
628
        case 17:
197
            if(PlatinenVersion == 10)  AdWertRoll = (ADC + roll1) / 4;
629
            if(PlatinenVersion == 10)  AdWertRoll = (ADC + roll1) / 4;
198
                        else                                       AdWertRoll = (ADC + roll1) / 2;
630
                        else                                       AdWertRoll = (ADC + roll1) / 2;
199
            kanal = AD_NICK;
631
            kanal = AD_NICK;
200
            break;
632
            break;
201
        case 18:
633
        case 18:
202
            if(PlatinenVersion == 10)  AdWertNick = (ADC + nick1) / 4;
634
            if(PlatinenVersion == 10)  AdWertNick = (ADC + nick1) / 4;
203
                        else                                       AdWertNick = (ADC + nick1) / 2;
635
                        else                                       AdWertNick = (ADC + nick1) / 2;
204
            kanal = AD_GIER;
636
            kanal = AD_GIER;
205
            state = 0;
637
            state = 0;
206
                        AdReady = 1;
638
                        AdReady = 1;
207
            break;
639
            break;
208
        default:
640
        default:
209
            kanal = 0;
641
            kanal = 0;
210
            state = 0;
642
            state = 0;
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
 
216
 
660