Rev 1155 | Rev 1167 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1155 | Rev 1166 | ||
---|---|---|---|
1 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 | // + Copyright (c) 04.2007 Holger Buss |
2 | // + Copyright (c) 04.2007 Holger Buss |
3 | // + only for non-profit use |
3 | // + only for non-profit use |
4 | // + www.MikroKopter.com |
4 | // + www.MikroKopter.com |
5 | // + see the File "License.txt" for further Informations |
5 | // + see the File "License.txt" for further Informations |
6 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
6 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
7 | 7 | ||
8 | #include "main.h" |
8 | #include "main.h" |
9 | volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
9 | volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
- | 10 | volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0; |
|
- | 11 | volatile int HiResNick = 2500, HiResRoll = 2500; |
|
10 | volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
12 | volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
11 | volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
13 | volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
12 | volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
14 | volatile char messanzahl_AccHoch = 0; |
13 | volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0; |
- | |
14 | volatile long Luftdruck = 32000; |
15 | volatile long Luftdruck = 32000; |
15 | volatile int StartLuftdruck; |
16 | volatile int StartLuftdruck; |
16 | volatile unsigned int MessLuftdruck = 1023; |
17 | volatile unsigned int MessLuftdruck = 1023; |
17 | unsigned char DruckOffsetSetting; |
18 | unsigned char DruckOffsetSetting; |
18 | signed char ExpandBaro = 0; |
19 | signed char ExpandBaro = 0; |
19 | volatile int HoeheD = 0; |
20 | volatile int HoeheD = 0; |
20 | volatile char messanzahl_Druck; |
21 | volatile char messanzahl_Druck; |
21 | volatile int tmpLuftdruck; |
22 | volatile int tmpLuftdruck; |
22 | volatile unsigned int ZaehlMessungen = 0; |
23 | volatile unsigned int ZaehlMessungen = 0; |
23 | unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
24 | unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
24 | unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0; |
25 | unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0; |
25 | unsigned char AdReady = 1; |
26 | unsigned char AdReady = 1; |
26 | //####################################################################################### |
27 | //####################################################################################### |
27 | // |
28 | // |
28 | void ADC_Init(void) |
29 | void ADC_Init(void) |
29 | //####################################################################################### |
30 | //####################################################################################### |
30 | { |
31 | { |
31 | ADMUX = 0;//Referenz ist extern |
32 | ADMUX = 0;//Referenz ist extern |
32 | ANALOG_ON; |
33 | ANALOG_ON; |
33 | } |
34 | } |
34 | 35 | ||
35 | void SucheLuftruckOffset(void) |
36 | void SucheLuftruckOffset(void) |
36 | { |
37 | { |
37 | unsigned int off; |
38 | unsigned int off; |
38 | off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]); |
39 | off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]); |
39 | if(off > 20) off -= 10; |
40 | if(off > 20) off -= 10; |
40 | OCR0A = off; |
41 | OCR0A = off; |
41 | ExpandBaro = 0; |
42 | ExpandBaro = 0; |
42 | Delay_ms_Mess(100); |
43 | Delay_ms_Mess(100); |
43 | if(MessLuftdruck < 850) off = 0; |
44 | if(MessLuftdruck < 850) off = 0; |
44 | for(; off < 250;off++) |
45 | for(; off < 250;off++) |
45 | { |
46 | { |
46 | OCR0A = off; |
47 | OCR0A = off; |
47 | Delay_ms_Mess(50); |
48 | Delay_ms_Mess(50); |
48 | printf("."); |
49 | printf("."); |
49 | if(MessLuftdruck < 850) break; |
50 | if(MessLuftdruck < 850) break; |
50 | } |
51 | } |
51 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
52 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
52 | DruckOffsetSetting = off; |
53 | DruckOffsetSetting = off; |
53 | Delay_ms_Mess(300); |
54 | Delay_ms_Mess(300); |
54 | } |
55 | } |
55 | 56 | ||
56 | void SucheGyroOffset(void) |
57 | void SucheGyroOffset(void) |
57 | { |
58 | { |
58 | unsigned char i, ready = 0; |
59 | unsigned char i, ready = 0; |
59 | GyroDefektN = 0; GyroDefektR = 0; GyroDefektG = 0; |
60 | GyroDefektN = 0; GyroDefektR = 0; GyroDefektG = 0; |
60 | for(i=140; i != 0; i--) |
61 | for(i=140; i != 0; i--) |
61 | { |
62 | { |
62 | if(ready == 3 && i > 10) i = 9; |
63 | if(ready == 3 && i > 10) i = 9; |
63 | ready = 0; |
64 | ready = 0; |
64 | if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
65 | if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
65 | if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
66 | if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
66 | if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
67 | if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
67 | twi_state = 8; |
68 | twi_state = 8; |
68 | i2c_start(); |
69 | i2c_start(); |
69 | 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;}; |
70 | 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;}; |
71 | 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;}; |
72 | while(twi_state); |
73 | while(twi_state); |
73 | messanzahl_Druck = 0; |
74 | messanzahl_Druck = 0; |
74 | ANALOG_ON; |
75 | ANALOG_ON; |
75 | while(messanzahl_Druck == 0); |
76 | while(messanzahl_Druck == 0); |
76 | if(i<10) Delay_ms_Mess(10); |
77 | if(i<10) Delay_ms_Mess(10); |
77 | } |
78 | } |
78 | Delay_ms_Mess(70); |
79 | Delay_ms_Mess(70); |
79 | } |
80 | } |
- | 81 | /* |
|
- | 82 | 0 n |
|
- | 83 | 1 r |
|
- | 84 | 2 g |
|
- | 85 | 3 y |
|
- | 86 | 4 n |
|
- | 87 | 5 r |
|
- | 88 | 6 z |
|
- | 89 | 7 l |
|
- | 90 | 8 n |
|
- | 91 | 9 r |
|
- | 92 | 10 x |
|
- | 93 | 11 g |
|
- | 94 | 12 n |
|
- | 95 | 13 r |
|
- | 96 | 14 u |
|
- | 97 | 15 y |
|
- | 98 | 16 n |
|
- | 99 | 17 r |
|
- | 100 | 18 x |
|
- | 101 | 19 n |
|
- | 102 | 20 r |
|
- | 103 | 21 g |
|
- | 104 | 22 y |
|
- | 105 | 4 n |
|
- | 106 | 5 r |
|
- | 107 | 6 z |
|
- | 108 | 7 l |
|
- | 109 | 8 n |
|
- | 110 | 9 r |
|
- | 111 | 10 x |
|
- | 112 | 11 g |
|
- | 113 | 12 n |
|
- | 114 | 13 r |
|
- | 115 | 14 u |
|
- | 116 | 15 y |
|
- | 117 | 16 n |
|
- | 118 | 17 r |
|
- | 119 | 18 x |
|
- | 120 | */ |
|
- | 121 | #define FILTER 3 |
|
80 | 122 | ||
81 | //####################################################################################### |
123 | //####################################################################################### |
82 | // |
124 | // |
83 | SIGNAL(SIG_ADC) |
125 | SIGNAL(SIG_ADC) |
84 | //####################################################################################### |
126 | //####################################################################################### |
85 | { |
127 | { |
86 | static unsigned char kanal=0,state = 0; |
128 | static unsigned char kanal=0,state = 0; |
- | 129 | static signed int gier1, roll1, nick1; |
|
- | 130 | static signed long nick_filter, roll_filter; |
|
- | 131 | static signed int accy, accx; |
|
- | 132 | // ANALOG_OFF; |
|
- | 133 | switch(state++) |
|
- | 134 | { |
|
- | 135 | case 0: |
|
- | 136 | J4High; |
|
- | 137 | nick1 = ADC; |
|
- | 138 | kanal = AD_ROLL; |
|
- | 139 | break; |
|
- | 140 | case 1: |
|
- | 141 | roll1 = ADC; |
|
- | 142 | kanal = AD_GIER; |
|
- | 143 | break; |
|
- | 144 | case 2: |
|
- | 145 | gier1 = ADC; |
|
- | 146 | kanal = AD_ACC_Y; |
|
- | 147 | break; |
|
- | 148 | case 3: |
|
- | 149 | J5High; |
|
- | 150 | Aktuell_ay = NeutralAccY - ADC; |
|
- | 151 | accy = Aktuell_ay; |
|
- | 152 | kanal = AD_NICK; |
|
- | 153 | break; |
|
- | 154 | case 4: |
|
- | 155 | J4High; |
|
- | 156 | nick1 += ADC; |
|
- | 157 | kanal = AD_ROLL; |
|
- | 158 | break; |
|
- | 159 | case 5: |
|
- | 160 | roll1 += ADC; |
|
- | 161 | kanal = AD_ACC_Z; |
|
- | 162 | break; |
|
- | 163 | case 6: |
|
- | 164 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
|
- | 165 | if(AdWertAccHoch > 1) |
|
- | 166 | { |
|
- | 167 | if(NeutralAccZ < 750) |
|
- | 168 | { |
|
- | 169 | NeutralAccZ += 0.02; |
|
- | 170 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
|
- | 171 | } |
|
- | 172 | } |
|
- | 173 | else if(AdWertAccHoch < -1) |
|
- | 174 | { |
|
- | 175 | if(NeutralAccZ > 550) |
|
- | 176 | { |
|
- | 177 | NeutralAccZ-= 0.02; |
|
- | 178 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
|
- | 179 | } |
|
- | 180 | } |
|
- | 181 | messanzahl_AccHoch = 1; |
|
- | 182 | Aktuell_az = ADC; |
|
- | 183 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
|
- | 184 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
|
- | 185 | kanal = AD_NICK; |
|
- | 186 | break; |
|
- | 187 | case 7: |
|
- | 188 | J4High; |
|
- | 189 | nick1 += ADC; |
|
- | 190 | kanal = AD_ROLL; |
|
- | 191 | break; |
|
- | 192 | case 8: |
|
- | 193 | roll1 += ADC; |
|
- | 194 | kanal = AD_ACC_X; |
|
- | 195 | break; |
|
- | 196 | case 9: |
|
- | 197 | Aktuell_ax = ADC - NeutralAccX; |
|
- | 198 | accx = Aktuell_ax; |
|
- | 199 | kanal = AD_GIER; |
|
- | 200 | break; |
|
- | 201 | case 10: |
|
- | 202 | gier1 += ADC; |
|
- | 203 | kanal = AD_NICK; |
|
- | 204 | break; |
|
- | 205 | case 11: |
|
- | 206 | J4High; |
|
- | 207 | nick1 += ADC; |
|
- | 208 | kanal = AD_ROLL; |
|
- | 209 | break; |
|
- | 210 | case 12: |
|
- | 211 | roll1 += ADC; |
|
- | 212 | kanal = AD_UBAT; |
|
- | 213 | break; |
|
- | 214 | case 13: |
|
- | 215 | UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
|
- | 216 | kanal = AD_ACC_Y; |
|
- | 217 | break; |
|
- | 218 | case 14: |
|
- | 219 | J5High; |
|
- | 220 | Aktuell_ay = NeutralAccY - ADC; |
|
- | 221 | accy += Aktuell_ay; |
|
- | 222 | kanal = AD_NICK; |
|
- | 223 | break; |
|
- | 224 | case 15: |
|
- | 225 | J4High; |
|
- | 226 | nick1 += ADC; |
|
- | 227 | kanal = AD_ROLL; |
|
- | 228 | break; |
|
- | 229 | case 16: |
|
- | 230 | roll1 += ADC; |
|
- | 231 | kanal = AD_ACC_X; |
|
- | 232 | break; |
|
- | 233 | case 17: |
|
- | 234 | Aktuell_ax = ADC - NeutralAccX; |
|
- | 235 | accx += Aktuell_ax; |
|
- | 236 | kanal = AD_NICK; |
|
- | 237 | break; |
|
- | 238 | case 18: |
|
- | 239 | J4High; |
|
- | 240 | nick1 += ADC; |
|
- | 241 | kanal = AD_ROLL; |
|
- | 242 | break; |
|
- | 243 | case 19: |
|
- | 244 | roll1 += ADC; |
|
- | 245 | kanal = AD_GIER; |
|
- | 246 | break; |
|
- | 247 | case 20: |
|
- | 248 | gier1 += ADC; |
|
- | 249 | kanal = AD_ACC_Y; |
|
- | 250 | break; |
|
- | 251 | case 21: |
|
- | 252 | J5High; |
|
- | 253 | Aktuell_ay = NeutralAccY - ADC; |
|
- | 254 | accy += Aktuell_ay; |
|
- | 255 | kanal = AD_NICK; |
|
- | 256 | break; |
|
- | 257 | case 22: |
|
- | 258 | J4High; |
|
- | 259 | nick1 += ADC; |
|
- | 260 | kanal = AD_ROLL; |
|
- | 261 | break; |
|
- | 262 | case 23: |
|
- | 263 | roll1 += ADC; |
|
- | 264 | kanal = AD_DRUCK; |
|
- | 265 | break; |
|
- | 266 | case 24: |
|
- | 267 | tmpLuftdruck += ADC; |
|
- | 268 | ||
- | 269 | if(++messanzahl_Druck >= 5) |
|
- | 270 | { |
|
- | 271 | MessLuftdruck = ADC; |
|
- | 272 | messanzahl_Druck = 0; |
|
- | 273 | HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8; // D-Anteil = neuerWert - AlterWert |
|
- | 274 | Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
|
- | 275 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
|
- | 276 | tmpLuftdruck = 0; |
|
- | 277 | } |
|
- | 278 | kanal = AD_NICK; |
|
- | 279 | break; |
|
- | 280 | case 25: |
|
- | 281 | J4High; |
|
- | 282 | nick1 += ADC; |
|
- | 283 | kanal = AD_ROLL; |
|
- | 284 | break; |
|
- | 285 | case 26: |
|
- | 286 | roll1 += ADC; |
|
- | 287 | kanal = AD_ACC_X; |
|
- | 288 | break; |
|
- | 289 | case 27: |
|
- | 290 | Aktuell_ax = ADC - NeutralAccX; |
|
- | 291 | accx += Aktuell_ax; |
|
- | 292 | kanal = AD_GIER; |
|
- | 293 | break; |
|
- | 294 | case 28: |
|
- | 295 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 2) / 4; |
|
- | 296 | else |
|
- | 297 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1 + 1) / 2; |
|
- | 298 | else AdWertGier = (ADC + gier1 + 1) / 2; |
|
- | 299 | kanal = AD_NICK; |
|
- | 300 | break; |
|
- | 301 | case 29: |
|
- | 302 | J4High; |
|
- | 303 | nick1 += ADC; |
|
- | 304 | kanal = AD_ROLL; |
|
- | 305 | break; |
|
- | 306 | case 30: |
|
- | 307 | roll1 += ADC; |
|
- | 308 | kanal = AD_ACC_Y; |
|
- | 309 | break; |
|
- | 310 | case 31: |
|
- | 311 | J5High; |
|
- | 312 | Aktuell_ay = NeutralAccY - ADC; |
|
- | 313 | AdWertAccRoll = (Aktuell_ay + accy); |
|
- | 314 | kanal = AD_NICK; |
|
- | 315 | break; |
|
- | 316 | case 32: |
|
- | 317 | J4High; |
|
- | 318 | AdWertNick = (ADC + nick1 + 3) / 5; |
|
- | 319 | nick_filter = (long) (1 * (long) nick_filter + 4 * (long)(ADC + nick1) + 1) / 2; |
|
- | 320 | if(PlatinenVersion == 10) { AdWertNick /= 2;nick_filter /=2;} |
|
- | 321 | HiResNick = nick_filter - 20 * AdNeutralNick; |
|
- | 322 | AdWertNickFilter = (long)(3L * (long)AdWertNickFilter + HiResNick + 2) / 4; |
|
- | 323 | DebugOut.Analog[21] = AdWertNickFilter / 4; |
|
- | 324 | kanal = AD_ROLL; |
|
- | 325 | break; |
|
- | 326 | case 33: |
|
- | 327 | AdWertRoll = (ADC + roll1 + 3) / 5; |
|
- | 328 | roll_filter = (long)(1 * (long)roll_filter + 4 * (long)(ADC + roll1) + 1) / 2; |
|
- | 329 | if(PlatinenVersion == 10) { AdWertRoll /= 2;roll_filter /=2;} |
|
- | 330 | HiResRoll = roll_filter - 20 * AdNeutralRoll; |
|
- | 331 | AdWertRollFilter = (long)(3L * (long)AdWertRollFilter + HiResRoll + 2) / 4; |
|
- | 332 | DebugOut.Analog[22] = AdWertRollFilter / 4; |
|
- | 333 | kanal = AD_ACC_X; |
|
- | 334 | break; |
|
- | 335 | case 34: |
|
- | 336 | Aktuell_ax = ADC - NeutralAccX; |
|
- | 337 | AdWertAccNick = (Aktuell_ax + accx); |
|
- | 338 | kanal = AD_NICK; |
|
- | 339 | state = 0; |
|
- | 340 | AdReady = 1; |
|
- | 341 | ZaehlMessungen++; |
|
- | 342 | break; |
|
- | 343 | default: |
|
- | 344 | kanal = 0; |
|
- | 345 | state = 0; |
|
- | 346 | break; |
|
- | 347 | } |
|
- | 348 | ADMUX = kanal; |
|
- | 349 | if(state != 0) ANALOG_ON; |
|
- | 350 | J4Low; |
|
- | 351 | J5Low; |
|
- | 352 | } |
|
- | 353 | ||
- | 354 | /* |
|
- | 355 | //####################################################################################### |
|
- | 356 | // |
|
- | 357 | SIGNAL(SIG_ADC) |
|
- | 358 | //####################################################################################### |
|
- | 359 | { |
|
- | 360 | static unsigned char kanal=0,state = 0; |
|
- | 361 | static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
|
- | 362 | static signed int accy, accx; |
|
- | 363 | // ANALOG_OFF; |
|
- | 364 | switch(state++) |
|
- | 365 | { |
|
- | 366 | case 0: |
|
- | 367 | J4High; |
|
- | 368 | nick1 = ADC; |
|
- | 369 | kanal = AD_ROLL; |
|
- | 370 | break; |
|
- | 371 | case 1: |
|
- | 372 | roll1 = ADC; |
|
- | 373 | kanal = AD_GIER; |
|
- | 374 | break; |
|
- | 375 | case 2: |
|
- | 376 | gier1 = ADC; |
|
- | 377 | kanal = AD_ACC_Y; |
|
- | 378 | break; |
|
- | 379 | case 3: |
|
- | 380 | Aktuell_ay = NeutralAccY - ADC; |
|
- | 381 | accy = Aktuell_ay; |
|
- | 382 | kanal = AD_NICK; |
|
- | 383 | break; |
|
- | 384 | case 4: |
|
- | 385 | J4High; |
|
- | 386 | nick1 += ADC; |
|
- | 387 | kanal = AD_ROLL; |
|
- | 388 | break; |
|
- | 389 | case 5: |
|
- | 390 | roll1 += ADC; |
|
- | 391 | kanal = AD_ACC_Z; |
|
- | 392 | break; |
|
- | 393 | case 6: |
|
- | 394 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
|
- | 395 | if(AdWertAccHoch > 1) |
|
- | 396 | { |
|
- | 397 | if(NeutralAccZ < 750) |
|
- | 398 | { |
|
- | 399 | NeutralAccZ += 0.02; |
|
- | 400 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
|
- | 401 | } |
|
- | 402 | } |
|
- | 403 | else if(AdWertAccHoch < -1) |
|
- | 404 | { |
|
- | 405 | if(NeutralAccZ > 550) |
|
- | 406 | { |
|
- | 407 | NeutralAccZ-= 0.02; |
|
- | 408 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
|
- | 409 | } |
|
- | 410 | } |
|
- | 411 | messanzahl_AccHoch = 1; |
|
- | 412 | Aktuell_az = ADC; |
|
- | 413 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
|
- | 414 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
|
- | 415 | kanal = AD_DRUCK; |
|
- | 416 | break; |
|
- | 417 | case 7: |
|
- | 418 | tmpLuftdruck += ADC; |
|
- | 419 | ||
- | 420 | if(++messanzahl_Druck >= 5) |
|
- | 421 | { |
|
- | 422 | MessLuftdruck = ADC; |
|
- | 423 | messanzahl_Druck = 0; |
|
- | 424 | HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8; // D-Anteil = neuerWert - AlterWert |
|
- | 425 | Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
|
- | 426 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
|
- | 427 | tmpLuftdruck = 0; |
|
- | 428 | } |
|
- | 429 | kanal = AD_NICK; |
|
- | 430 | break; |
|
- | 431 | case 8: |
|
- | 432 | J4High; |
|
- | 433 | nick1 += ADC; |
|
- | 434 | kanal = AD_ROLL; |
|
- | 435 | break; |
|
- | 436 | case 9: |
|
- | 437 | roll1 += ADC; |
|
- | 438 | kanal = AD_ACC_X; |
|
- | 439 | break; |
|
- | 440 | case 10: |
|
- | 441 | Aktuell_ax = ADC - NeutralAccX; |
|
- | 442 | accx = Aktuell_ax; |
|
- | 443 | kanal = AD_GIER; |
|
- | 444 | break; |
|
- | 445 | case 11: |
|
- | 446 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 2; |
|
- | 447 | else |
|
- | 448 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1); |
|
- | 449 | else AdWertGier = (ADC + gier1); |
|
- | 450 | kanal = AD_NICK; |
|
- | 451 | break; |
|
- | 452 | case 12: |
|
- | 453 | J4High; |
|
- | 454 | nick1 += ADC; |
|
- | 455 | kanal = AD_ROLL; |
|
- | 456 | break; |
|
- | 457 | case 13: |
|
- | 458 | roll1 += ADC; |
|
- | 459 | kanal = AD_UBAT; |
|
- | 460 | break; |
|
- | 461 | case 14: |
|
- | 462 | UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
|
- | 463 | kanal = AD_ACC_Y; |
|
- | 464 | break; |
|
- | 465 | case 15: |
|
- | 466 | Aktuell_ay = NeutralAccY - ADC; |
|
- | 467 | AdWertAccRoll = (Aktuell_ay + accy); |
|
- | 468 | kanal = AD_NICK; |
|
- | 469 | break; |
|
- | 470 | case 16: |
|
- | 471 | J4High; |
|
- | 472 | // if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 5; |
|
- | 473 | // else AdWertNick = (5 * AdWertNick + 2*(ADC + nick1)) / 10; |
|
- | 474 | AdWertNick = 2*(ADC + nick1) / 5; |
|
- | 475 | nick_filter = (2 * nick_filter + 2 * (ADC + nick1)) / 3; |
|
- | 476 | HiResNick = nick_filter - 5 * AdNeutralNick; |
|
- | 477 | AdWertNickFilter = (long)(3L * (long)AdWertNickFilter + 4 * HiResNick) / 4; |
|
- | 478 | DebugOut.Analog[21] = AdWertNickFilter / 4; |
|
- | 479 | kanal = AD_ROLL; |
|
- | 480 | break; |
|
- | 481 | case 17: |
|
- | 482 | // if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 5; |
|
- | 483 | // else AdWertRoll = (5 * AdWertRoll + 2*(ADC + roll1)) / 10; |
|
- | 484 | AdWertRoll = 2*(ADC + roll1) / 5; |
|
- | 485 | roll_filter = (2 * roll_filter + 2 * (ADC + roll1)) / 3; |
|
- | 486 | HiResRoll = roll_filter - 5 * AdNeutralRoll; |
|
- | 487 | AdWertRollFilter = (long)(3 * (long)AdWertRollFilter + 4 * HiResRoll) / 4; |
|
- | 488 | DebugOut.Analog[22] = AdWertRollFilter / 4; |
|
- | 489 | kanal = AD_ACC_X; |
|
- | 490 | break; |
|
- | 491 | case 18: |
|
- | 492 | Aktuell_ax = ADC - NeutralAccX; |
|
- | 493 | AdWertAccNick = (Aktuell_ax + accx); |
|
- | 494 | kanal = AD_NICK; |
|
- | 495 | state = 0; |
|
- | 496 | AdReady = 1; |
|
- | 497 | ZaehlMessungen++; |
|
- | 498 | J5High; |
|
- | 499 | break; |
|
- | 500 | default: |
|
- | 501 | kanal = 0; |
|
- | 502 | state = 0; |
|
- | 503 | break; |
|
- | 504 | } |
|
- | 505 | ADMUX = kanal; |
|
- | 506 | if(state != 0) ANALOG_ON; |
|
- | 507 | J4Low; |
|
- | 508 | J5Low; |
|
- | 509 | } |
|
- | 510 | */ |
|
- | 511 | ||
- | 512 | /* |
|
- | 513 | //####################################################################################### |
|
- | 514 | // |
|
- | 515 | SIGNAL(SIG_ADC) |
|
- | 516 | //####################################################################################### |
|
- | 517 | { |
|
- | 518 | static unsigned char kanal=0,state = 0; |
|
87 | static unsigned int gier1, roll1, nick1, accy, accx; |
519 | static unsigned int gier1, roll1, nick1, accy, accx; |
88 | ANALOG_OFF; |
520 | ANALOG_OFF; |
89 | switch(state++) |
521 | switch(state++) |
90 | { |
522 | { |
91 | case 0: |
523 | case 0: |
92 | gier1 = ADC; |
524 | gier1 = ADC; |
93 | kanal = AD_ROLL; |
525 | kanal = AD_ROLL; |
94 | ZaehlMessungen++; |
526 | ZaehlMessungen++; |
95 | break; |
527 | break; |
96 | case 1: |
528 | case 1: |
97 | roll1 = ADC; |
529 | roll1 = ADC; |
98 | kanal = AD_NICK; |
530 | kanal = AD_NICK; |
99 | break; |
531 | break; |
100 | case 2: |
532 | case 2: |
101 | nick1 = ADC; |
533 | nick1 = ADC; |
102 | kanal = AD_ACC_Y; |
534 | kanal = AD_ACC_Y; |
103 | break; |
535 | break; |
104 | case 3: |
536 | case 3: |
105 | Aktuell_ay = NeutralAccY - ADC; |
537 | Aktuell_ay = NeutralAccY - ADC; |
106 | accy = Aktuell_ay; |
538 | accy = Aktuell_ay; |
107 | kanal = AD_ACC_X; |
539 | kanal = AD_ACC_X; |
108 | break; |
540 | break; |
109 | case 4: |
541 | case 4: |
110 | Aktuell_ax = ADC - NeutralAccX; |
542 | Aktuell_ax = ADC - NeutralAccX; |
111 | accx = Aktuell_ax; |
543 | accx = Aktuell_ax; |
112 | kanal = AD_GIER; |
544 | kanal = AD_GIER; |
113 | break; |
545 | break; |
114 | case 5: |
546 | case 5: |
115 | gier1 += ADC; |
547 | gier1 += ADC; |
116 | kanal = AD_ROLL; |
548 | kanal = AD_ROLL; |
117 | break; |
549 | break; |
118 | case 6: |
550 | case 6: |
119 | roll1 += ADC; |
551 | roll1 += ADC; |
120 | kanal = AD_NICK; |
552 | kanal = AD_NICK; |
121 | break; |
553 | break; |
122 | case 7: |
554 | case 7: |
123 | nick1 += ADC; |
555 | nick1 += ADC; |
124 | kanal = AD_UBAT; |
556 | kanal = AD_UBAT; |
125 | break; |
557 | break; |
126 | case 8: |
558 | case 8: |
127 | UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
559 | UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
128 | kanal = AD_ACC_Z; |
560 | kanal = AD_ACC_Z; |
129 | break; |
561 | break; |
130 | case 9: |
562 | case 9: |
131 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
563 | AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
132 | if(AdWertAccHoch > 1) |
564 | if(AdWertAccHoch > 1) |
133 | { |
565 | { |
134 | if(NeutralAccZ < 750) |
566 | if(NeutralAccZ < 750) |
135 | { |
567 | { |
136 | NeutralAccZ += 0.02; |
568 | NeutralAccZ += 0.02; |
137 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
569 | if(modell_fliegt < 500) NeutralAccZ += 0.1; |
138 | } |
570 | } |
139 | } |
571 | } |
140 | else if(AdWertAccHoch < -1) |
572 | else if(AdWertAccHoch < -1) |
141 | { |
573 | { |
142 | if(NeutralAccZ > 550) |
574 | if(NeutralAccZ > 550) |
143 | { |
575 | { |
144 | NeutralAccZ-= 0.02; |
576 | NeutralAccZ-= 0.02; |
145 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
577 | if(modell_fliegt < 500) NeutralAccZ -= 0.1; |
146 | } |
578 | } |
147 | } |
579 | } |
148 | messanzahl_AccHoch = 1; |
580 | messanzahl_AccHoch = 1; |
149 | Aktuell_az = ADC; |
581 | Aktuell_az = ADC; |
150 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
582 | Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
151 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
583 | Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
152 | kanal = AD_GIER; |
584 | kanal = AD_GIER; |
153 | break; |
585 | break; |
154 | case 10: |
586 | case 10: |
155 | gier1 += ADC; |
587 | gier1 += ADC; |
156 | kanal = AD_ROLL; |
588 | kanal = AD_ROLL; |
157 | break; |
589 | break; |
158 | case 11: |
590 | case 11: |
159 | roll1 += ADC; |
591 | roll1 += ADC; |
160 | kanal = AD_NICK; |
592 | kanal = AD_NICK; |
161 | break; |
593 | break; |
162 | case 12: |
594 | case 12: |
163 | nick1 += ADC; |
595 | nick1 += ADC; |
164 | kanal = AD_DRUCK; |
596 | kanal = AD_DRUCK; |
165 | break; |
597 | break; |
166 | case 13: |
598 | case 13: |
167 | tmpLuftdruck += ADC; |
599 | tmpLuftdruck += ADC; |
168 | if(++messanzahl_Druck >= 5) |
600 | if(++messanzahl_Druck >= 5) |
169 | { |
601 | { |
170 | MessLuftdruck = ADC; |
602 | MessLuftdruck = ADC; |
171 | messanzahl_Druck = 0; |
603 | messanzahl_Druck = 0; |
172 | HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8; // D-Anteil = neuerWert - AlterWert |
604 | HoeheD = (7 * HoeheD + (int) Parameter_Luftdruck_D * (int)(255 * ExpandBaro + StartLuftdruck - tmpLuftdruck - HoehenWert))/8; // D-Anteil = neuerWert - AlterWert |
173 | Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
605 | Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
174 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
606 | HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; |
175 | tmpLuftdruck = 0; |
607 | tmpLuftdruck = 0; |
176 | } |
608 | } |
177 | kanal = AD_ACC_Y; |
609 | kanal = AD_ACC_Y; |
178 | break; |
610 | break; |
179 | case 14: |
611 | case 14: |
180 | Aktuell_ay = NeutralAccY - ADC; |
612 | Aktuell_ay = NeutralAccY - ADC; |
181 | AdWertAccRoll = (Aktuell_ay + accy); |
613 | AdWertAccRoll = (Aktuell_ay + accy); |
182 | kanal = AD_ACC_X; |
614 | kanal = AD_ACC_X; |
183 | break; |
615 | break; |
184 | case 15: |
616 | case 15: |
185 | Aktuell_ax = ADC - NeutralAccX; |
617 | Aktuell_ax = ADC - NeutralAccX; |
186 | AdWertAccNick = (Aktuell_ax + accx); |
618 | AdWertAccNick = (Aktuell_ax + accx); |
187 | kanal = AD_GIER; |
619 | kanal = AD_GIER; |
188 | break; |
620 | break; |
189 | case 16: |
621 | case 16: |
190 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 4; |
622 | if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 4; |
191 | else |
623 | else |
192 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1)/2; |
624 | if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1)/2; |
193 | else AdWertGier = (ADC + gier1) / 2; |
625 | else AdWertGier = (ADC + gier1) / 2; |
194 | kanal = AD_ROLL; |
626 | kanal = AD_ROLL; |
195 | break; |
627 | break; |
196 | case 17: |
628 | case 17: |
197 | if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 4; |
629 | if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 4; |
198 | else AdWertRoll = (ADC + roll1) / 2; |
630 | else AdWertRoll = (ADC + roll1) / 2; |
199 | kanal = AD_NICK; |
631 | kanal = AD_NICK; |
200 | break; |
632 | break; |
201 | case 18: |
633 | case 18: |
202 | if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 4; |
634 | if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 4; |
203 | else AdWertNick = (ADC + nick1) / 2; |
635 | else AdWertNick = (ADC + nick1) / 2; |
204 | kanal = AD_GIER; |
636 | kanal = AD_GIER; |
205 | state = 0; |
637 | state = 0; |
206 | AdReady = 1; |
638 | AdReady = 1; |
207 | break; |
639 | break; |
208 | default: |
640 | default: |
209 | kanal = 0; |
641 | kanal = 0; |
210 | state = 0; |
642 | state = 0; |
211 | break; |
643 | break; |
212 | } |
644 | } |
213 | ADMUX = kanal; |
645 | ADMUX = kanal; |
214 | if(state != 0) ANALOG_ON; |
646 | if(state != 0) ANALOG_ON; |
215 | } |
647 | } |
- | 648 | */ |
|
- | 649 | ||
- | 650 | ||
- | 651 | ||
- | 652 | ||
- | 653 | ||
- | 654 | ||
- | 655 | ||
- | 656 | ||
- | 657 | ||
- | 658 | ||
- | 659 | ||
216 | 660 |