Rev 1219 | Rev 1253 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1219 | Rev 1246 | ||
---|---|---|---|
Line 17... | Line 17... | ||
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 HoeheD = 0; |
21 | volatile char messanzahl_Druck; |
21 | volatile char messanzahl_Druck; |
22 | volatile int tmpLuftdruck; |
22 | volatile long tmpLuftdruck; |
23 | volatile unsigned int ZaehlMessungen = 0; |
23 | volatile unsigned int ZaehlMessungen = 0; |
24 | unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
24 | unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
25 | unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0; |
25 | unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0; |
26 | volatile unsigned char AdReady = 1; |
26 | volatile unsigned char AdReady = 1; |
27 | //####################################################################################### |
27 | //####################################################################################### |
28 | // |
28 | // |
29 | void ADC_Init(void) |
29 | void ADC_Init(void) |
30 | //####################################################################################### |
30 | //####################################################################################### |
31 | { |
31 | { |
32 | ADMUX = 0;//Referenz ist extern |
32 | ADMUX = 0;//Referenz ist extern |
33 | ANALOG_ON; |
33 | ANALOG_ON; |
34 | } |
34 | } |
Line 35... | Line 35... | ||
35 | 35 | ||
Line 44... | Line 44... | ||
44 | if(MessLuftdruck < 850) off = 0; |
44 | if(MessLuftdruck < 850) off = 0; |
45 | for(; off < 250;off++) |
45 | for(; off < 250;off++) |
46 | { |
46 | { |
47 | OCR0A = off; |
47 | OCR0A = off; |
48 | Delay_ms_Mess(50); |
48 | Delay_ms_Mess(50); |
49 | printf("."); |
49 | printf("."); |
50 | if(MessLuftdruck < 850) break; |
50 | if(MessLuftdruck < 850) break; |
51 | } |
51 | } |
52 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
52 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
53 | DruckOffsetSetting = off; |
53 | DruckOffsetSetting = off; |
54 | Delay_ms_Mess(300); |
54 | Delay_ms_Mess(300); |
Line 65... | Line 65... | ||
65 | if(ready == 3 && i > 10) i = 9; |
65 | if(ready == 3 && i > 10) i = 9; |
66 | ready = 0; |
66 | ready = 0; |
67 | if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
67 | if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
68 | if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
68 | if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
69 | if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
69 | if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
70 | twi_state = 8; |
70 | twi_state = 8; |
71 | i2c_start(); |
71 | i2c_start(); |
72 | if(AnalogOffsetNick < 10) { GyroDefektN = 1; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { GyroDefektN = 1; AnalogOffsetNick = 245;}; |
72 | 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;}; |
73 | 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;}; |
74 | 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;} |
75 | 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; |
76 | messanzahl_Druck = 0; |
77 | ANALOG_ON; |
77 | ANALOG_ON; |
78 | while(messanzahl_Druck == 0); |
78 | while(messanzahl_Druck == 0); |
79 | if(i<10) Delay_ms_Mess(10); |
79 | if(i<10) Delay_ms_Mess(10); |
80 | } |
80 | } |
81 | Delay_ms_Mess(70); |
81 | Delay_ms_Mess(70); |
82 | } |
82 | } |
Line 83... | Line 83... | ||
83 | 83 | ||
84 | /* |
84 | /* |
85 | 0 n |
85 | 0 n |
86 | 1 r |
86 | 1 r |
87 | 2 g |
87 | 2 g |
88 | 3 y |
88 | 3 y |
89 | 4 x |
89 | 4 x |
90 | 5 n |
90 | 5 n |
91 | 6 r |
91 | 6 r |
92 | 7 u |
92 | 7 u |
93 | 8 z |
93 | 8 z |
94 | 9 L |
94 | 9 L |
95 | 10 n |
95 | 10 n |
96 | 11 r |
96 | 11 r |
97 | 12 g |
97 | 12 g |
98 | 13 y |
98 | 13 y |
99 | 14 x |
99 | 14 x |
Line 106... | Line 106... | ||
106 | // |
106 | // |
107 | SIGNAL(SIG_ADC) |
107 | SIGNAL(SIG_ADC) |
108 | //####################################################################################### |
108 | //####################################################################################### |
109 | { |
109 | { |
110 | static unsigned char kanal=0,state = 0; |
110 | static unsigned char kanal=0,state = 0; |
111 | static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
111 | static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
112 | static signed int accy, accx; |
112 | static signed int accy, accx; |
113 | switch(state++) |
113 | switch(state++) |
114 | { |
114 | { |
115 | case 0: |
115 | case 0: |
116 | nick1 = ADC; |
116 | nick1 = ADC; |
Line 146... | Line 146... | ||
146 | UBat = (3 * UBat + ADC / 3) / 4; |
146 | UBat = (3 * UBat + ADC / 3) / 4; |
147 | kanal = AD_ACC_Z; |
147 | kanal = AD_ACC_Z; |
148 | break; |
148 | break; |
149 | case 8: |
149 | case 8: |
150 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
150 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
151 | if(AdWertAccHoch > 1) |
151 | if(AdWertAccHoch > 1) |
152 | { |
152 | { |
153 | if(NeutralAccZ < 750) |
153 | if(NeutralAccZ < 750) |
154 | { |
154 | { |
155 | NeutralAccZ += 0.02; |
155 | NeutralAccZ += 0.02; |
156 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
156 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
157 | } |
157 | } |
158 | } |
158 | } |
159 | else if(AdWertAccHoch < -1) |
159 | else if(AdWertAccHoch < -1) |
160 | { |
160 | { |
161 | if(NeutralAccZ > 550) |
161 | if(NeutralAccZ > 550) |
162 | { |
162 | { |
163 | NeutralAccZ-= 0.02; |
163 | NeutralAccZ-= 0.02; |
164 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
164 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
165 | } |
165 | } |
166 | } |
166 | } |
167 | messanzahl_AccHoch = 1; |
167 | messanzahl_AccHoch = 1; |
168 | Aktuell_az = ADC; |
168 | Aktuell_az = ADC; |
169 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
169 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
170 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
170 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
171 | kanal = AD_DRUCK; |
171 | kanal = AD_DRUCK; |
Line 179... | Line 179... | ||
179 | roll1 += ADC; |
179 | roll1 += ADC; |
180 | kanal = AD_GIER; |
180 | kanal = AD_GIER; |
181 | break; |
181 | break; |
182 | case 12: |
182 | case 12: |
183 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2; |
183 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2; |
184 | else |
184 | else |
185 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1); |
185 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1); |
186 | else AdWertGier = (ADC + gier1); |
186 | else AdWertGier = (ADC + gier1); |
187 | kanal = AD_ACC_Y; |
187 | kanal = AD_ACC_Y; |
188 | break; |
188 | break; |
189 | case 13: |
189 | case 13: |
Line 219... | Line 219... | ||
219 | AdReady = 1; |
219 | AdReady = 1; |
220 | ZaehlMessungen++; |
220 | ZaehlMessungen++; |
221 | // "break" fehlt hier absichtlich |
221 | // "break" fehlt hier absichtlich |
222 | case 9: |
222 | case 9: |
223 | tmpLuftdruck += ADC; |
223 | tmpLuftdruck += ADC; |
224 | if(++messanzahl_Druck >= 5) |
224 | if(++messanzahl_Druck >= 5) |
225 | { |
225 | { |
- | 226 | tmpLuftdruck -= 2616L * ExpandBaro; // -523.19 counts per 10 counts offset step |
|
226 | tmpLuftdruck /= 2; |
227 | tmpLuftdruck /= 2; |
227 | MessLuftdruck = ADC; |
228 | MessLuftdruck = ADC; |
228 | messanzahl_Druck = 0; |
229 | messanzahl_Druck = 0; |
229 | HoeheD = (31 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/32; // D-Anteil = neuerWert - AlterWert |
230 | HoeheD = (31 * HoeheD + (int) Parameter_Luftdruck_D * (int)((int)(StartLuftdruck - tmpLuftdruck) - HoehenWert))/32; // D-Anteil = neuerWert - AlterWert |
230 | Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8; |
231 | Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8; |
231 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
232 | HoehenWert = StartLuftdruck - Luftdruck; |
232 | tmpLuftdruck /= 2; |
233 | tmpLuftdruck /= 2; |
233 | } |
234 | } |
234 | kanal = AD_NICK; |
235 | kanal = AD_NICK; |
235 | break; |
236 | break; |
236 | default: |
237 | default: |
237 | kanal = 0; state = 0; kanal = AD_NICK; |
238 | kanal = 0; state = 0; kanal = AD_NICK; |
238 | break; |
239 | break; |
239 | } |
240 | } |
240 | ADMUX = kanal; |
241 | ADMUX = kanal; |
241 | if(state != 0) ANALOG_ON; |
242 | if(state != 0) ANALOG_ON; |
242 | } |
243 | } |
Line 249... | Line 250... | ||
249 | SIGNAL(SIG_ADC) |
250 | SIGNAL(SIG_ADC) |
250 | //####################################################################################### |
251 | //####################################################################################### |
251 | { |
252 | { |
252 | static unsigned char kanal=0,state = 0; |
253 | static unsigned char kanal=0,state = 0; |
253 | static signed int gier1, roll1, nick1; |
254 | static signed int gier1, roll1, nick1; |
254 | static signed long nick_filter, roll_filter; |
255 | static signed long nick_filter, roll_filter; |
255 | static signed int accy, accx; |
256 | static signed int accy, accx; |
256 | switch(state++) |
257 | switch(state++) |
257 | { |
258 | { |
258 | case 0: |
259 | case 0: |
259 | nick1 = ADC; |
260 | nick1 = ADC; |
Line 280... | Line 281... | ||
280 | roll1 += ADC; |
281 | roll1 += ADC; |
281 | kanal = AD_ACC_Z; |
282 | kanal = AD_ACC_Z; |
282 | break; |
283 | break; |
283 | case 6: |
284 | case 6: |
284 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
285 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
285 | if(AdWertAccHoch > 1) |
286 | if(AdWertAccHoch > 1) |
286 | { |
287 | { |
287 | if(NeutralAccZ < 750) |
288 | if(NeutralAccZ < 750) |
288 | { |
289 | { |
289 | NeutralAccZ += 0.02; |
290 | NeutralAccZ += 0.02; |
290 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
291 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
291 | } |
292 | } |
292 | } |
293 | } |
293 | else if(AdWertAccHoch < -1) |
294 | else if(AdWertAccHoch < -1) |
294 | { |
295 | { |
295 | if(NeutralAccZ > 550) |
296 | if(NeutralAccZ > 550) |
296 | { |
297 | { |
297 | NeutralAccZ-= 0.02; |
298 | NeutralAccZ-= 0.02; |
298 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
299 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
299 | } |
300 | } |
300 | } |
301 | } |
301 | messanzahl_AccHoch = 1; |
302 | messanzahl_AccHoch = 1; |
302 | Aktuell_az = ADC; |
303 | Aktuell_az = ADC; |
303 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
304 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
304 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
305 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
305 | kanal = AD_NICK; |
306 | kanal = AD_NICK; |
Line 376... | Line 377... | ||
376 | roll1 += ADC; |
377 | roll1 += ADC; |
377 | kanal = AD_DRUCK; |
378 | kanal = AD_DRUCK; |
378 | break; |
379 | break; |
379 | case 24: |
380 | case 24: |
380 | tmpLuftdruck += ADC; |
381 | tmpLuftdruck += ADC; |
381 | if(++messanzahl_Druck >= 5) |
382 | if(++messanzahl_Druck >= 5) |
382 | { |
383 | { |
383 | MessLuftdruck = ADC; |
384 | MessLuftdruck = ADC; |
384 | messanzahl_Druck = 0; |
385 | messanzahl_Druck = 0; |
385 | HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert)) / 8; // D-Anteil = neuerWert - AlterWert |
386 | HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert)) / 8; // D-Anteil = neuerWert - AlterWert |
386 | Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
387 | Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
387 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
388 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
388 | tmpLuftdruck = 0; |
389 | tmpLuftdruck = 0; |
389 | } |
390 | } |
390 | kanal = AD_NICK; |
391 | kanal = AD_NICK; |
391 | break; |
392 | break; |
392 | case 25: |
393 | case 25: |
393 | nick1 += ADC; |
394 | nick1 += ADC; |
394 | kanal = AD_ROLL; |
395 | kanal = AD_ROLL; |
Line 402... | Line 403... | ||
402 | accx += Aktuell_ax; |
403 | accx += Aktuell_ax; |
403 | kanal = AD_GIER; |
404 | kanal = AD_GIER; |
404 | break; |
405 | break; |
405 | case 28: |
406 | case 28: |
406 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 2) / 4; |
407 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 2) / 4; |
407 | else |
408 | else |
408 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1 + 1) / 2; |
409 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1 + 1) / 2; |
409 | else AdWertGier = (ADC + gier1 + 1) / 2; |
410 | else AdWertGier = (ADC + gier1 + 1) / 2; |
410 | kanal = AD_NICK; |
411 | kanal = AD_NICK; |
411 | break; |
412 | break; |
412 | case 29: |
413 | case 29: |
Line 426... | Line 427... | ||
426 | AdWertNick = (ADC + nick1 + 3) / 5; |
427 | AdWertNick = (ADC + nick1 + 3) / 5; |
427 | nick_filter = (long) (1 * (long) nick_filter + 4 * (long)(ADC + nick1) + 1) / 2; |
428 | nick_filter = (long) (1 * (long) nick_filter + 4 * (long)(ADC + nick1) + 1) / 2; |
428 | if(PlatinenVersion == 10) { AdWertNick /= 2;nick_filter /=2;} |
429 | if(PlatinenVersion == 10) { AdWertNick /= 2;nick_filter /=2;} |
429 | HiResNick = nick_filter - 20 * AdNeutralNick; |
430 | HiResNick = nick_filter - 20 * AdNeutralNick; |
430 | AdWertNickFilter = (long)(3L * (long)AdWertNickFilter + HiResNick + 2) / 4; |
431 | AdWertNickFilter = (long)(3L * (long)AdWertNickFilter + HiResNick + 2) / 4; |
431 | DebugOut.Analog[21] = AdWertNickFilter / 4; |
432 | DebugOut.Analog[21] = AdWertNickFilter / 4; |
432 | kanal = AD_ROLL; |
433 | kanal = AD_ROLL; |
433 | break; |
434 | break; |
434 | case 33: |
435 | case 33: |
435 | AdWertRoll = (ADC + roll1 + 3) / 5; |
436 | AdWertRoll = (ADC + roll1 + 3) / 5; |
436 | roll_filter = (long)(1 * (long)roll_filter + 4 * (long)(ADC + roll1) + 1) / 2; |
437 | roll_filter = (long)(1 * (long)roll_filter + 4 * (long)(ADC + roll1) + 1) / 2; |
Line 446... | Line 447... | ||
446 | kanal = AD_NICK; |
447 | kanal = AD_NICK; |
447 | state = 0; |
448 | state = 0; |
448 | AdReady = 1; |
449 | AdReady = 1; |
449 | ZaehlMessungen++; |
450 | ZaehlMessungen++; |
450 | break; |
451 | break; |
451 | default: |
452 | default: |
452 | kanal = 0; |
453 | kanal = 0; |
453 | state = 0; |
454 | state = 0; |
454 | break; |
455 | break; |
455 | } |
456 | } |
456 | ADMUX = kanal; |
457 | ADMUX = kanal; |
457 | if(state != 0) ANALOG_ON; |
458 | if(state != 0) ANALOG_ON; |
458 | } |
459 | } |
459 | */ |
460 | */ |