Rev 2316 | Rev 2369 | Go to most recent revision | Show entire file | Regard 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; |