Subversion Repositories FlightCtrl

Rev

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

Rev 2081 Rev 2093
Line 56... Line 56...
56
volatile int  Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
56
volatile int  Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
57
volatile int  AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0;
57
volatile int  AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0;
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 char messanzahl_AccHoch = 0; // MartinR
61
volatile long Luftdruck = 32000;
62
volatile long Luftdruck = 32000;
62
volatile long SummenHoehe = 0;
63
volatile long SummenHoehe = 0;
63
volatile int  StartLuftdruck;
64
volatile int  StartLuftdruck;
64
volatile unsigned int  MessLuftdruck = 1023;
65
volatile unsigned int  MessLuftdruck = 1023;
65
unsigned char DruckOffsetSetting;
66
unsigned char DruckOffsetSetting;
Line 183... Line 184...
183
//
184
//
184
ISR(ADC_vect)
185
ISR(ADC_vect)
185
//#######################################################################################
186
//#######################################################################################
186
{
187
{
187
    static unsigned char kanal=0,state = 0;
188
    static unsigned char kanal=0,state = 0;
188
        static signed char subcount = 0;
189
        //static signed char subcount = 0; // MartinR: wird nicht mehr benötigt, da deaktiviert
189
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;
190
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;
190
        static signed int accy, accx;
191
        static signed int accy, accx;
191
        static long tmpLuftdruck = 0;
192
        static long tmpLuftdruck = 0;
192
        static char messanzahl_Druck = 0;
193
        static char messanzahl_Druck = 0;
193
    switch(state++)
194
    switch(state++)
Line 230... Line 231...
230
                        UBat = (3 * UBat + ADC / 3) / 4;
231
                        UBat = (3 * UBat + ADC / 3) / 4;
231
                    kanal = AD_ACC_Z;
232
                    kanal = AD_ACC_Z;
232
            break;
233
            break;
233
       case 8:
234
       case 8:
234
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
235
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
-
 
236
                       
-
 
237
                        /*  // MartinR: deaktivieren Anfang
-
 
238
                       
235
            if(AdWertAccHoch > 1)
239
            if(AdWertAccHoch > 1)
236
             {
240
             {
237
              if(NeutralAccZ < 750)
241
              if(NeutralAccZ < 750)
238
               {
242
               {
239
                subcount += 5;
243
                subcount += 5;
Line 248... Line 252...
248
                 subcount -= 5;
252
                 subcount -= 5;
249
                 if(modell_fliegt < 500) subcount -= 10;
253
                 if(modell_fliegt < 500) subcount -= 10;
250
                 if(subcount < -100) { NeutralAccZ--; subcount += 100;}
254
                 if(subcount < -100) { NeutralAccZ--; subcount += 100;}
251
                }
255
                }
252
             }
256
             }
-
 
257
                         
-
 
258
                         */ // MartinR: deaktivieren Ende
-
 
259
                         
253
//            messanzahl_AccHoch = 1;
260
            //messanzahl_AccHoch = 1;
254
            Aktuell_az = ADC;
261
            Aktuell_az = ADC;
255
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
262
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
256
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
263
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
257
                kanal = AD_DRUCK;
264
                kanal = AD_DRUCK;
258
            break;
265
            break;
Line 285... Line 292...
285
        case 15:
292
        case 15:
286
            nick1 += ADC;
293
            nick1 += ADC;
287
            if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
294
            if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
288
            AdWertNick = nick1 / 8;
295
            AdWertNick = nick1 / 8;
289
            nick_filter = (nick_filter + nick1) / 2;
296
            nick_filter = (nick_filter + nick1) / 2;
290
            HiResNick = nick_filter - AdNeutralNick;
297
                        //HiResNick = nick_filter - AdNeutralNick; // MartinR: so war es
-
 
298
                        HiResNick = (nick_filter - AdNeutralNick + 4 ) / 8 ; // MartinR: + 4um Rundungsfehler zu verbessern
-
 
299
                        // MartinR: /8 von fc.c nach hier verschoben um Code zu sparen
291
            AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
300
            AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
292
            kanal = AD_ROLL;
301
            kanal = AD_ROLL;
293
            break;
302
            break;
294
        case 16:
303
        case 16:
295
            roll1 += ADC;
304
            roll1 += ADC;
296
            if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4;
305
            if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4;
297
            AdWertRoll = roll1 / 8;
306
            AdWertRoll = roll1 / 8;
298
            roll_filter = (roll_filter + roll1) / 2;
307
            roll_filter = (roll_filter + roll1) / 2;
299
            HiResRoll = roll_filter - AdNeutralRoll;
308
            //HiResRoll = roll_filter - AdNeutralRoll; // MartinR: so war es
-
 
309
                        HiResRoll = (roll_filter - AdNeutralRoll + 4 ) / 8; // MartinR: + 4um Rundungsfehler zu verbessern
-
 
310
                        // MartinR: /8 von fc.c nach hier verschoben um Code zu sparen
300
            AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
311
            AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
301
                kanal = AD_DRUCK;
312
                kanal = AD_DRUCK;
302
            break;
313
            break;
303
        case 17:
314
        case 17:
304
            state = 0;
315
            state = 0;
305
                        AdReady = 1;
316
                        AdReady = 1;
306
            ZaehlMessungen++;
317
            ZaehlMessungen++;
307
            // "break" fehlt hier absichtlich
318
            // "break" fehlt hier absichtlich
308
        case 9:
319
        case 9:
309
                MessLuftdruck = ADC;
320
                //MessLuftdruck = ADC; // MartinR: so war es
-
 
321
                        MessLuftdruck = ADC + ((Parameter_UserParam4 * AdWertAccHoch) / 256) ; // MartinR: 
-
 
322
                        // mit Korrektur der Beschleunigungsempfindlichkeit des Luftdrucksensors
310
            tmpLuftdruck += MessLuftdruck;
323
            tmpLuftdruck += MessLuftdruck;
311
            if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
324
            if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
312
            {
325
            {
313
                            signed int tmp;
326
                            signed int tmp;
314
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step
327
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step