Subversion Repositories FlightCtrl

Rev

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

Rev 1246 Rev 1253
Line 15... Line 15...
15
volatile long Luftdruck = 32000;
15
volatile long Luftdruck = 32000;
16
volatile int  StartLuftdruck;
16
volatile int  StartLuftdruck;
17
volatile unsigned int  MessLuftdruck = 1023;
17
volatile unsigned int  MessLuftdruck = 1023;
18
unsigned char DruckOffsetSetting;
18
unsigned char DruckOffsetSetting;
19
signed char ExpandBaro = 0;
19
signed char ExpandBaro = 0;
20
volatile int HoeheD = 0;
20
volatile int VarioMeter = 0;
21
volatile char messanzahl_Druck;
-
 
22
volatile long tmpLuftdruck;
-
 
23
volatile unsigned int ZaehlMessungen = 0;
21
volatile unsigned int ZaehlMessungen = 0;
24
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
22
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
25
unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0;
23
unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0;
26
volatile unsigned char AdReady = 1;
24
volatile unsigned char AdReady = 1;
27
//#######################################################################################
25
//#######################################################################################
Line 71... Line 69...
71
   i2c_start();
69
   i2c_start();
72
   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;};
73
   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;};
74
   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;};
75
   while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;}
73
   while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;}
76
   messanzahl_Druck = 0;
74
   AdReady = 0;
77
   ANALOG_ON;
75
   ANALOG_ON;
78
   while(messanzahl_Druck == 0);
76
   while(!AdReady);
79
   if(i<10) Delay_ms_Mess(10);
77
   if(i<10) Delay_ms_Mess(10);
80
  }
78
  }
81
   Delay_ms_Mess(70);
79
   Delay_ms_Mess(70);
82
}
80
}
Line 108... Line 106...
108
//#######################################################################################
106
//#######################################################################################
109
{
107
{
110
    static unsigned char kanal=0,state = 0;
108
    static unsigned char kanal=0,state = 0;
111
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;
109
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;
112
        static signed int accy, accx;
110
        static signed int accy, accx;
-
 
111
 
-
 
112
        static long tmpLuftdruck = 0;
-
 
113
        static char messanzahl_Druck = 0;
-
 
114
    static long SummenHoehe = 0;
-
 
115
 
113
    switch(state++)
116
    switch(state++)
114
        {
117
        {
115
        case 0:
118
        case 0:
116
            nick1 = ADC;
119
            nick1 = ADC;
117
            kanal = AD_ROLL;
120
            kanal = AD_ROLL;
Line 218... Line 221...
218
            state = 0;
221
            state = 0;
219
                        AdReady = 1;
222
                        AdReady = 1;
220
            ZaehlMessungen++;
223
            ZaehlMessungen++;
221
            // "break" fehlt hier absichtlich
224
            // "break" fehlt hier absichtlich
222
        case 9:
225
        case 9:
223
            tmpLuftdruck += ADC;
226
                MessLuftdruck = ADC;
-
 
227
            tmpLuftdruck += MessLuftdruck;
224
            if(++messanzahl_Druck >= 5)
228
            if(++messanzahl_Druck >= 18)
225
                {
229
            {
226
                                tmpLuftdruck -= 2616L * ExpandBaro; // -523.19 counts per 10 counts offset step
230
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - 18 * 519 * ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step
227
                                tmpLuftdruck /= 2;
231
                                HoehenWert = StartLuftdruck - Luftdruck;
-
 
232
                                SummenHoehe -= SummenHoehe/8;
-
 
233
                                SummenHoehe += HoehenWert;
-
 
234
                                VarioMeter = (3 * VarioMeter + 25 * (int)(HoehenWert - SummenHoehe/8))/4;
228
                MessLuftdruck = ADC;
235
                tmpLuftdruck = 0;
229
                messanzahl_Druck = 0;
236
                messanzahl_Druck = 0;
230
                                HoeheD = (31 * HoeheD + (int) Parameter_Luftdruck_D * (int)((int)(StartLuftdruck - tmpLuftdruck) - HoehenWert))/32;  // D-Anteil = neuerWert - AlterWert
-
 
231
                Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8;
-
 
232
                HoehenWert = StartLuftdruck - Luftdruck;
-
 
233
                tmpLuftdruck /= 2;
-
 
234
                }
237
            }
235
            kanal = AD_NICK;
238
            kanal = AD_NICK;
236
            break;
239
            break;
237
        default:
240
        default:
238
            kanal = 0; state = 0; kanal = AD_NICK;
241
            kanal = 0; state = 0; kanal = AD_NICK;
239
            break;
242
            break;