Subversion Repositories FlightCtrl

Rev

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