Subversion Repositories FlightCtrl

Rev

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

Rev 1880 Rev 1888
Line 22... Line 22...
22
signed char ExpandBaro = 0;
22
signed char ExpandBaro = 0;
23
volatile int VarioMeter = 0;
23
volatile int VarioMeter = 0;
24
volatile unsigned int ZaehlMessungen = 0;
24
volatile unsigned int ZaehlMessungen = 0;
25
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
25
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
26
volatile unsigned char AdReady = 1;
26
volatile unsigned char AdReady = 1;
27
float NeutralAccZ_float;
27
//float NeutralAccZ_float; // MartinR : wozu ?
28
//#######################################################################################
28
//#######################################################################################
29
//
29
//
30
void ADC_Init(void)
30
void ADC_Init(void)
31
//#######################################################################################
31
//#######################################################################################
32
{
32
{
Line 140... Line 140...
140
//
140
//
141
ISR(ADC_vect)
141
ISR(ADC_vect)
142
//#######################################################################################
142
//#######################################################################################
143
{
143
{
144
    static unsigned char kanal=0,state = 0;
144
    static unsigned char kanal=0,state = 0;
145
        static signed char subcount = 0;
145
        //static signed char subcount = 0; // MartinR: wird nicht mehr benötigt, da deaktiviert
146
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;
146
    static signed int gier1, roll1, nick1, nick_filter, roll_filter;
147
        static signed int accy, accx;
147
        static signed int accy, accx;
148
        static long tmpLuftdruck = 0;
148
        static long tmpLuftdruck = 0;
149
        static char messanzahl_Druck = 0;
149
        static char messanzahl_Druck = 0;
150
    switch(state++)
150
    switch(state++)
Line 187... Line 187...
187
                        UBat = (3 * UBat + ADC / 3) / 4;
187
                        UBat = (3 * UBat + ADC / 3) / 4;
188
                    kanal = AD_ACC_Z;
188
                    kanal = AD_ACC_Z;
189
            break;
189
            break;
190
       case 8:
190
       case 8:
191
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
191
            AdWertAccHoch =  (signed int) ADC - NeutralAccZ;
-
 
192
                       
-
 
193
                        /*  // MartinR: deaktivieren Anfang
-
 
194
                       
192
            if(AdWertAccHoch > 1)
195
            if(AdWertAccHoch > 1)
193
             {
196
             {
194
              if(NeutralAccZ < 750)
197
              if(NeutralAccZ < 750)
195
               {
198
               {
196
                subcount += 5;
199
                subcount += 5;
Line 205... Line 208...
205
                 subcount -= 5;
208
                 subcount -= 5;
206
                 if(modell_fliegt < 500) subcount -= 10;
209
                 if(modell_fliegt < 500) subcount -= 10;
207
                 if(subcount < -100) { NeutralAccZ--; subcount += 100;}
210
                 if(subcount < -100) { NeutralAccZ--; subcount += 100;}
208
                }
211
                }
209
             }
212
             }
-
 
213
                         
-
 
214
                         */ // MartinR: deaktivieren Ende
-
 
215
                         
210
            messanzahl_AccHoch = 1;
216
            messanzahl_AccHoch = 1;
211
            Aktuell_az = ADC;
217
            Aktuell_az = ADC;
212
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
218
            Mess_Integral_Hoch += AdWertAccHoch;      // Integrieren
213
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
219
            Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
214
                kanal = AD_DRUCK;
220
                kanal = AD_DRUCK;
Line 242... Line 248...
242
        case 15:
248
        case 15:
243
            nick1 += ADC;
249
            nick1 += ADC;
244
            if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
250
            if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
245
            AdWertNick = nick1 / 8;
251
            AdWertNick = nick1 / 8;
246
            nick_filter = (nick_filter + nick1) / 2;
252
            nick_filter = (nick_filter + nick1) / 2;
247
            HiResNick = nick_filter - AdNeutralNick;
253
                        //HiResNick = nick_filter - AdNeutralNick; // MartinR: so war es
-
 
254
                        HiResNick = (nick_filter - AdNeutralNick + 4 ) / 8 ; // MartinR: + 4um Rundungsfehler zu verbessern
-
 
255
                        // MartinR: /8 von fc.c nach hier verschoben um Code zu sparen
248
            AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
256
            AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
249
            kanal = AD_ROLL;
257
            kanal = AD_ROLL;
250
            break;
258
            break;
251
        case 16:
259
        case 16:
252
            roll1 += ADC;
260
            roll1 += ADC;
253
            if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4;
261
            if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4;
254
            AdWertRoll = roll1 / 8;
262
            AdWertRoll = roll1 / 8;
255
            roll_filter = (roll_filter + roll1) / 2;
263
            roll_filter = (roll_filter + roll1) / 2;
256
            HiResRoll = roll_filter - AdNeutralRoll;
264
            //HiResRoll = roll_filter - AdNeutralRoll; // MartinR: so war es
-
 
265
                        HiResRoll = (roll_filter - AdNeutralRoll + 4 ) / 8; // MartinR: + 4um Rundungsfehler zu verbessern
-
 
266
                        // MartinR: /8 von fc.c nach hier verschoben um Code zu sparen
257
            AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
267
            AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
258
                kanal = AD_DRUCK;
268
                kanal = AD_DRUCK;
259
            break;
269
            break;
260
        case 17:
270
        case 17:
261
            state = 0;
271
            state = 0;
262
                        AdReady = 1;
272
                        AdReady = 1;
263
            ZaehlMessungen++;
273
            ZaehlMessungen++;
264
            // "break" fehlt hier absichtlich
274
            // "break" fehlt hier absichtlich
265
        case 9:
275
        case 9:
266
                MessLuftdruck = ADC;
276
                //MessLuftdruck = ADC; // MartinR: so war es
-
 
277
                        MessLuftdruck = ADC + ((Parameter_UserParam4 * AdWertAccHoch) / 256) ; // MartinR: 
-
 
278
                        // mit Korrektur der Beschleunigungsempfindlichkeit des Luftdrucksensors
267
            tmpLuftdruck += MessLuftdruck;
279
            tmpLuftdruck += MessLuftdruck;
268
            if(++messanzahl_Druck >= 18)
280
            if(++messanzahl_Druck >= 18)
269
            {
281
            {
270
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - (18 * 523) * (long)ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step
282
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - (18 * 523) * (long)ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step
271
                                HoehenWert = StartLuftdruck - Luftdruck;
283
                                HoehenWert = StartLuftdruck - Luftdruck;