Rev 2240 | Rev 2296 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2240 | Rev 2263 | ||
---|---|---|---|
Line 212... | Line 212... | ||
212 | 212 | ||
213 | 213 | ||
- | 214 | ||
214 | 215 | void Piep(unsigned char Anzahl, unsigned int dauer) |
|
215 | void Piep(unsigned char Anzahl, unsigned int dauer) |
216 | { |
216 | { |
217 | unsigned int wait = 0; |
217 | if(MotorenEin) return; //auf keinen Fall im Flug! |
218 | if(MotorenEin) return; //auf keinen Fall im Flug! |
218 | GRN_OFF; |
219 | GRN_OFF; |
- | 220 | while(Anzahl--) |
|
219 | while(Anzahl--) |
221 | { |
- | 222 | beeptime = dauer; |
|
- | 223 | wait = dauer; |
|
- | 224 | while(beeptime || wait) |
|
220 | { |
225 | { |
- | 226 | if(UpdateMotor) |
|
- | 227 | { |
|
- | 228 | UpdateMotor = 0; |
|
- | 229 | if(!beeptime) wait--; |
|
221 | beeptime = dauer; |
230 | LIBFC_Polling(); |
222 | while(beeptime); |
231 | }; |
223 | Delay_ms(dauer * 2); |
232 | } |
Line 224... | Line 233... | ||
224 | } |
233 | } |
Line 350... | Line 359... | ||
350 | LED_Init(); |
359 | LED_Init(); |
351 | FC_StatusFlags |= FC_STATUS_CALIBRATE; |
360 | FC_StatusFlags |= FC_STATUS_CALIBRATE; |
352 | FromNaviCtrl_Value.Kalman_K = -1; |
361 | FromNaviCtrl_Value.Kalman_K = -1; |
353 | FromNaviCtrl_Value.Kalman_MaxDrift = 0; |
362 | FromNaviCtrl_Value.Kalman_MaxDrift = 0; |
354 | FromNaviCtrl_Value.Kalman_MaxFusion = 32; |
363 | FromNaviCtrl_Value.Kalman_MaxFusion = 32; |
355 | - | ||
356 | for(i=0;i<8;i++) |
364 | for(i=0;i<8;i++) |
357 | { |
365 | { |
358 | Poti[i] = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127; |
366 | Poti[i] = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127; |
359 | } |
367 | } |
360 | SenderOkay = 100; |
368 | SenderOkay = 100; |
Line 362... | Line 370... | ||
362 | { |
370 | { |
363 | DDRD |=0x80; // enable J7 -> Servo signal |
371 | DDRD |=0x80; // enable J7 -> Servo signal |
364 | } |
372 | } |
365 | else |
373 | else |
366 | { |
374 | { |
367 | if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4 |
375 | // if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4 |
- | 376 | // else |
|
368 | else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
377 | NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
369 | } |
378 | } |
Line 370... | Line 379... | ||
370 | 379 | ||
371 | if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
380 | if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
372 | if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; }; |
381 | if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; }; |
Line 767... | Line 776... | ||
767 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
776 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
768 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
777 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
769 | { |
778 | { |
770 | if(++delay_neutral > 200) // nicht sofort |
779 | if(++delay_neutral > 200) // nicht sofort |
771 | { |
780 | { |
772 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
- | |
773 | SpeakHoTT = SPEAK_CALIBRATE; |
- | |
774 | #endif |
- | |
775 | delay_neutral = 0; |
781 | delay_neutral = 0; |
776 | modell_fliegt = 0; |
782 | modell_fliegt = 0; |
777 | if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
783 | if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
778 | { |
784 | { |
779 | unsigned char setting=1; |
785 | unsigned char setting=1; |
Line 802... | Line 808... | ||
802 | // ServoActive = 0; |
808 | // ServoActive = 0; |
803 | SetNeutral(0); |
809 | SetNeutral(0); |
804 | CalibrationDone = 1; |
810 | CalibrationDone = 1; |
805 | ServoActive = 1; |
811 | ServoActive = 1; |
806 | DDRD |=0x80; // enable J7 -> Servo signal |
812 | DDRD |=0x80; // enable J7 -> Servo signal |
- | 813 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
|
- | 814 | SpeakHoTT = SPEAK_CALIBRATE; |
|
- | 815 | #endif |
|
807 | Piep(GetActiveParamSet(),120); |
816 | Piep(GetActiveParamSet(),120); |
808 | } |
817 | } |
809 | } |
818 | } |
810 | } |
819 | } |
811 | else |
820 | else |
Line 816... | Line 825... | ||
816 | MotorenEin = 0; |
825 | MotorenEin = 0; |
817 | delay_neutral = 0; |
826 | delay_neutral = 0; |
818 | modell_fliegt = 0; |
827 | modell_fliegt = 0; |
819 | SetNeutral(1); |
828 | SetNeutral(1); |
820 | CalibrationDone = 1; |
829 | CalibrationDone = 1; |
- | 830 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
|
- | 831 | SpeakHoTT = SPEAK_CALIBRATE; |
|
- | 832 | #endif |
|
821 | Piep(GetActiveParamSet(),120); |
833 | Piep(GetActiveParamSet(),120); |
822 | } |
834 | } |
823 | } |
835 | } |
824 | else delay_neutral = 0; |
836 | else delay_neutral = 0; |
825 | } |
837 | } |
Line 1044... | Line 1056... | ||
1044 | 1056 | ||
1045 | 1057 | ||
1046 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1058 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1047 | // Bei Empfangsausfall im Flug |
- | |
1048 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1049 | DebugOut.Analog[16] = GasIsZeroCnt; |
- | |
1050 | DebugOut.Analog[17] = VarioMeter; |
1059 | // Bei Empfangsausfall im Flug |
1051 | 1060 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
1052 | if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE) |
1061 | if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE) |
1053 | { |
1062 | { |
1054 | StickNick = -GPS_Nick; |
1063 | StickNick = -GPS_Nick; |
Line 1474... | Line 1483... | ||
1474 | if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1483 | if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1475 | { //height control not active |
1484 | { //height control not active |
1476 | if(!delay--) |
1485 | if(!delay--) |
1477 | { |
1486 | { |
1478 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1487 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1479 | if(HoehenReglerAktiv && !SpeakHoTT) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
1488 | if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
1480 | #endif |
1489 | #endif |
1481 | HoehenReglerAktiv = 0; // disable height control |
1490 | HoehenReglerAktiv = 0; // disable height control |
1482 | SollHoehe = HoehenWert; // update SetPoint with current reading |
1491 | SollHoehe = HoehenWert; // update SetPoint with current reading |
1483 | delay = 1; |
1492 | delay = 1; |
1484 | } |
1493 | } |
1485 | } |
1494 | } |
1486 | else |
1495 | else |
1487 | if(Parameter_HoehenSchalter > 70) |
1496 | if(Parameter_HoehenSchalter > 70) |
1488 | { //height control is activated |
1497 | { //height control is activated |
1489 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1498 | #if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
1490 | if(!HoehenReglerAktiv && !SpeakHoTT) SpeakHoTT = SPEAK_ALTITUDE_ON; |
1499 | if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON; |
1491 | #endif |
1500 | #endif |
1492 | HoehenReglerAktiv = 1; // enable height control |
- | |
1493 | delay = 200; |
1501 | delay = 200; |
- | 1502 | HoehenReglerAktiv = 1; // enable height control |
|
1494 | } |
1503 | } |
1495 | } |
1504 | } |
1496 | else // no switchable height control |
1505 | else // no switchable height control |
1497 | { |
1506 | { |
1498 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1507 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1499 | HoehenReglerAktiv = 1; |
1508 | HoehenReglerAktiv = 1; |
1500 | } |
1509 | } |
1501 | - | ||
1502 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1510 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1503 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1511 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1504 | tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
1512 | tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
1505 | CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
1513 | CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
1506 | LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle |
1514 | LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle |