Subversion Repositories FlightCtrl

Rev

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

Rev 2316 Rev 2367
Line 66... Line 66...
66
signed char ExpandBaro = 0;
66
signed char ExpandBaro = 0;
67
volatile int VarioMeter = 0;
67
volatile int VarioMeter = 0;
68
volatile unsigned int ZaehlMessungen = 0;
68
volatile unsigned int ZaehlMessungen = 0;
69
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
69
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
70
volatile unsigned char AdReady = 1;
70
volatile unsigned char AdReady = 1;
-
 
71
unsigned int BaroStep = 500;
-
 
72
long ExpandBaroStep = 0;
71
volatile long HoehenWertF = 0;
73
volatile long HoehenWertF = 0;
Line -... Line 74...
-
 
74
 
-
 
75
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
-
 
76
unsigned char CalAthmospheare = 16;
-
 
77
#endif
72
 
78
 
73
//#######################################################################################
79
//#######################################################################################
74
void ADC_Init(void)
80
void ADC_Init(void)
75
//#######################################################################################
81
//#######################################################################################
76
{
82
{
77
    ADMUX = 0;//Referenz ist extern
83
    ADMUX = 0;//Referenz ist extern
78
    ANALOG_ON;
84
    ANALOG_ON;
Line 79... Line 85...
79
}
85
}
-
 
86
 
-
 
87
#define DESIRED_H_ADC 850
-
 
88
 
-
 
89
void CalcExpandBaroStep(void)
-
 
90
{
-
 
91
  if(ACC_AltitudeControl) ExpandBaroStep = BaroStep * (long)ExpandBaro;
Line 80... Line 92...
80
 
92
  else ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4;
81
#define DESIRED_H_ADC 800
93
}
82
 
94
 
83
void SucheLuftruckOffset(void)
95
void SucheLuftruckOffset(void)
84
{
-
 
85
 unsigned int off;
-
 
86
 ExpandBaro = 0;
-
 
87
 
96
{
88
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
-
 
89
 {
-
 
90
  unsigned char off2;
-
 
91
  OCR0A = 150;
-
 
92
  off2 = GetParamByte(PID_PRESSURE_OFFSET);
-
 
93
  if(off2 < 230) off2 += 10;
-
 
94
  OCR0B = off2;
-
 
95
  Delay_ms_Mess(100);
-
 
96
  if(MessLuftdruck > DESIRED_H_ADC) off2 = 240;
-
 
97
  for(; off2 >= 5; off2 -= 5)
-
 
98
   {
-
 
99
   OCR0B = off2;
-
 
100
   Delay_ms_Mess(50);
-
 
101
   printf("*");
-
 
102
   if(MessLuftdruck > DESIRED_H_ADC) break;
-
 
103
   }
-
 
104
   SetParamByte(PID_PRESSURE_OFFSET, off2);
-
 
105
  if(off2 >= 15) off = 140; else off = 0;
-
 
106
  for(; off < 250;off++)
-
 
107
   {
-
 
108
   OCR0A = off;
-
 
109
   Delay_ms_Mess(50);
-
 
110
   printf(".");
-
 
111
   if(MessLuftdruck < DESIRED_H_ADC) break;
-
 
112
   }
-
 
113
   DruckOffsetSetting = off;
97
 unsigned int off;
114
 }
98
 ExpandBaro = 0;
115
#else
99
 CalcExpandBaroStep();
-
 
100
  off = GetParamByte(PID_PRESSURE_OFFSET);
116
  off = GetParamByte(PID_PRESSURE_OFFSET);
101
  if(off > 20) off -= 10;
117
  if(off > 20) off -= 10;
102
  OCR0A = off;
118
  OCR0A = off;
103
  OCR0B = 255-off;
119
  Delay_ms_Mess(100);
104
  Delay_ms_Mess(150);
120
  if(MessLuftdruck < DESIRED_H_ADC) off = 0;
105
  if(MessLuftdruck < DESIRED_H_ADC) off = 0;
-
 
106
  for(; off < 250;off++)
121
  for(; off < 250;off++)
107
   {
122
   {
108
   OCR0A = off;
123
   OCR0A = off;
109
   OCR0B = 255-off;
124
   Delay_ms_Mess(50);
110
   Delay_ms_Mess(100);
125
   printf(".");
111
   printf(".");
126
   if(MessLuftdruck < DESIRED_H_ADC) break;
112
   if(MessLuftdruck < DESIRED_H_ADC) break;
-
 
113
   }
-
 
114
   DruckOffsetSetting = off;
-
 
115
   SetParamByte(PID_PRESSURE_OFFSET, off);
-
 
116
 if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 5 || DruckOffsetSetting >= 245)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE;
-
 
117
 
-
 
118
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
-
 
119
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
120
// + correction of the altitude error in higher altitudes
-
 
121
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
122
 CalAthmospheare = 16;
-
 
123
 if(ACC_AltitudeControl)
-
 
124
  {
-
 
125
   if(PlatinenVersion < 23) { if(off < 140) CalAthmospheare += (160 - off) / 26; }
127
   }
126
   else { if(off < 170) CalAthmospheare += (188 - off) / 19; }
128
   DruckOffsetSetting = off;
-
 
129
   SetParamByte(PID_PRESSURE_OFFSET, off);
-
 
130
#endif
127
  }
131
 if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 245)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE;
128
 Luftdruck = MessLuftdruck * CalAthmospheare;
Line 132... Line 129...
132
 OCR0A = off;
129
#endif
Line 345... Line 342...
345
        case 9:
342
        case 9:
346
                MessLuftdruck = ADC;
343
                MessLuftdruck = ADC;
347
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
344
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
348
                        if(ACC_AltitudeControl)                
345
                        if(ACC_AltitudeControl)                
349
                        {
346
                        {
-
 
347
//                              ExpandBaroStep = BaroStep * (long)ExpandBaro; // wird in fc.c aufgerufen
350
                                tmpLuftdruck = MessLuftdruck - 523 * (long)ExpandBaro;  // -523 counts per offset step
348
//                              tmpLuftdruck = MessLuftdruck - BaroStep * (long)ExpandBaro;  // -523 counts per offset step
-
 
349
                                tmpLuftdruck = MessLuftdruck - ExpandBaroStep;  // -523 counts per offset step
351
                                Luftdruck -= Luftdruck/16;
350
                                Luftdruck -= Luftdruck / CalAthmospheare; // 16
352
                                Luftdruck += tmpLuftdruck;
351
                                Luftdruck += tmpLuftdruck;
353
                                HoehenWert = StartLuftdruck - Luftdruck;        // cm
352
                                HoehenWert = StartLuftdruck - Luftdruck;        // cm
354
                        }
353
                        }
355
                        else
354
                        else
356
#endif
355
#endif
357
            {   // old version (until FC V2.1)
356
            {   // old version (until FC V2.1)
358
                                tmpLuftdruck += MessLuftdruck;
357
                                tmpLuftdruck += MessLuftdruck;
359
                                if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
358
                                if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
360
                                {
359
                                {
361
                            signed int tmp;
360
                            signed int tmp;
362
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step
361
//                              Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * BaroStep) * (long)ExpandBaro + 4) / 8;  // -523.19 counts per 10 counts offset step
-
 
362
//                              ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; // wird in fc.c aufgerufen
-
 
363
                                Luftdruck = (7 * Luftdruck + tmpLuftdruck - ExpandBaroStep) / 8;  // -523.19 counts per 10 counts offset step
363
                                HoehenWert = StartLuftdruck - Luftdruck;
364
                                HoehenWert = StartLuftdruck - Luftdruck;
364
                                SummenHoehe -= SummenHoehe/SM_FILTER;
365
                                SummenHoehe -= SummenHoehe/SM_FILTER;
365
                                SummenHoehe += HoehenWert;
366
                                SummenHoehe += HoehenWert;
366
                                tmp = (HoehenWert - SummenHoehe/SM_FILTER);
367
                                tmp = (HoehenWert - SummenHoehe/SM_FILTER);
367
                                if(tmp > 1024) tmp = 1024;      else if(tmp < -1024) tmp = -1024;
368
                                if(tmp > 1024) tmp = 1024;      else if(tmp < -1024) tmp = -1024;