Subversion Repositories FlightCtrl

Rev

Rev 918 | Rev 927 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 918 Rev 921
Line 119... Line 119...
119
unsigned char Parameter_ServoNickControl = 100;
119
unsigned char Parameter_ServoNickControl = 100;
120
unsigned char Parameter_LoopGasLimit = 70;
120
unsigned char Parameter_LoopGasLimit = 70;
121
unsigned char Parameter_AchsKopplung1 = 0;
121
unsigned char Parameter_AchsKopplung1 = 0;
122
unsigned char Parameter_AchsGegenKopplung1 = 0;
122
unsigned char Parameter_AchsGegenKopplung1 = 0;
123
unsigned char Parameter_DynamicStability = 100;
123
unsigned char Parameter_DynamicStability = 100;
-
 
124
unsigned char Parameter_J16Bitmask;             // for the J16 Output
-
 
125
unsigned char Parameter_J16Timing;              // for the J16 Output
-
 
126
unsigned char Parameter_J17Bitmask;             // for the J17 Output
-
 
127
unsigned char Parameter_J17Timing;              // for the J17 Output
-
 
128
unsigned char Parameter_NaviGpsModeControl;     // Parameters for the Naviboard
-
 
129
unsigned char Parameter_NaviGpsGain;    
-
 
130
unsigned char Parameter_NaviGpsP;        
-
 
131
unsigned char Parameter_NaviGpsI;        
-
 
132
unsigned char Parameter_NaviGpsD;        
-
 
133
unsigned char Parameter_NaviGpsACC;        
-
 
134
unsigned char Parameter_ExternalControl;
124
struct mk_param_struct EE_Parameter;
135
struct mk_param_struct EE_Parameter;
125
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
136
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
126
int MaxStickNick = 0,MaxStickRoll = 0;
137
int MaxStickNick = 0,MaxStickRoll = 0;
127
unsigned int  modell_fliegt = 0;
138
unsigned int  modell_fliegt = 0;
-
 
139
unsigned char MikroKopterFlags = 0;
Line 128... Line 140...
128
 
140
 
129
void Piep(unsigned char Anzahl)
141
void Piep(unsigned char Anzahl)
130
{
142
{
131
 while(Anzahl--)
143
 while(Anzahl--)
Line 193... Line 205...
193
        Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L;
205
        Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L;
194
    ExternHoehenValue = 0;
206
    ExternHoehenValue = 0;
195
    ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
207
    ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
196
    GierGyroFehler = 0;
208
    GierGyroFehler = 0;
197
    SendVersionToNavi = 1;
209
    SendVersionToNavi = 1;
-
 
210
    LED_Init();
-
 
211
    MikroKopterFlags |= FLAG_CALIBRATE;
198
}
212
}
Line 199... Line 213...
199
 
213
 
200
//############################################################################
214
//############################################################################
201
// Bearbeitet die Messwerte
215
// Bearbeitet die Messwerte
Line 353... Line 367...
353
//############################################################################
367
//############################################################################
354
// Senden der Motorwerte per I2C-Bus
368
// Senden der Motorwerte per I2C-Bus
355
void SendMotorData(void)
369
void SendMotorData(void)
356
//############################################################################
370
//############################################################################
357
{
371
{
358
    if(MOTOR_OFF || !MotorenEin)
372
    if(!MotorenEin)
359
        {
373
        {
360
        Motor_Hinten = 0;
374
        Motor_Hinten = 0;
361
        Motor_Vorne = 0;
375
        Motor_Vorne = 0;
362
        Motor_Rechts = 0;
376
        Motor_Rechts = 0;
363
        Motor_Links = 0;
377
        Motor_Links = 0;
364
        if(MotorTest[0]) Motor_Vorne = MotorTest[0];
378
        if(MotorTest[0]) Motor_Vorne = MotorTest[0];
365
        if(MotorTest[1]) Motor_Hinten = MotorTest[1];
379
        if(MotorTest[1]) Motor_Hinten = MotorTest[1];
366
        if(MotorTest[2]) Motor_Links = MotorTest[2];
380
        if(MotorTest[2]) Motor_Links = MotorTest[2];
367
        if(MotorTest[3]) Motor_Rechts = MotorTest[3];
381
        if(MotorTest[3]) Motor_Rechts = MotorTest[3];
-
 
382
        MikroKopterFlags &= ~(FLAG_MOTOR_RUN | FLAG_FLY);
368
        }
383
        } else MikroKopterFlags |= FLAG_MOTOR_RUN;
Line 369... Line 384...
369
 
384
 
370
    DebugOut.Analog[12] = Motor_Vorne;
385
    DebugOut.Analog[12] = Motor_Vorne;
371
    DebugOut.Analog[13] = Motor_Hinten;
386
    DebugOut.Analog[13] = Motor_Hinten;
372
    DebugOut.Analog[14] = Motor_Links;
387
    DebugOut.Analog[14] = Motor_Links;
Line 384... Line 399...
384
// Trägt ggf. das Poti als Parameter ein
399
// Trägt ggf. das Poti als Parameter ein
385
void ParameterZuordnung(void)
400
void ParameterZuordnung(void)
386
//############################################################################
401
//############################################################################
387
{
402
{
Line 388... Line 403...
388
 
403
 
-
 
404
 #define CHK_POTI_MM(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
389
 #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
405
 #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; }
390
 CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
406
 CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
391
 CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
407
 CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
392
 CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
408
 CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
393
 CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
409
 CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
394
 CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
410
 CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
395
 CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
411
 CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
396
 CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
412
 CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
397
 CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
413
 CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
398
 CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
414
 CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
399
 CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
415
 CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
Line 406... Line 422...
406
 CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
422
 CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
407
 CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255);
423
 CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255);
408
 CHK_POTI(Parameter_AchsKopplung1,    EE_Parameter.AchsKopplung1,0,255);
424
 CHK_POTI(Parameter_AchsKopplung1,    EE_Parameter.AchsKopplung1,0,255);
409
 CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
425
 CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
410
 CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255);
426
 CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255);
-
 
427
 CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,1,255);
-
 
428
 CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255);
-
 
429
 CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255);
-
 
430
 CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255);
-
 
431
 CHK_POTI(Parameter_NaviGpsP,EE_Parameter.NaviGpsP,0,255);
-
 
432
 CHK_POTI(Parameter_NaviGpsI,EE_Parameter.NaviGpsI,0,255);
-
 
433
 CHK_POTI(Parameter_NaviGpsD,EE_Parameter.NaviGpsD,0,255);
-
 
434
 CHK_POTI(Parameter_NaviGpsACC,EE_Parameter.NaviGpsACC,0,255);
-
 
435
 CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl,0,255);
Line 411... Line 436...
411
 
436
 
412
 Ki = (float) Parameter_I_Faktor * 0.0001;
437
 Ki = (float) Parameter_I_Faktor * 0.0001;
413
 MAX_GAS = EE_Parameter.Gas_Max;
438
 MAX_GAS = EE_Parameter.Gas_Max;
414
 MIN_GAS = EE_Parameter.Gas_Min;
439
 MIN_GAS = EE_Parameter.Gas_Min;
Line 482... Line 507...
482
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
507
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
483
        if(SenderOkay > 140)
508
        if(SenderOkay > 140)
484
            {
509
            {
485
            Notlandung = 0;
510
            Notlandung = 0;
486
            RcLostTimer = EE_Parameter.NotGasZeit * 50;
511
            RcLostTimer = EE_Parameter.NotGasZeit * 50;
487
            if(GasMischanteil > 40)
512
            if(GasMischanteil > 40 && MotorenEin)
488
                {
513
                {
489
                if(modell_fliegt < 0xffff) modell_fliegt++;
514
                if(modell_fliegt < 0xffff) modell_fliegt++;
490
                }
515
                }
491
            if((modell_fliegt < 256))
516
            if((modell_fliegt < 256))
492
                {
517
                {
Line 497... Line 522...
497
                  NeueKompassRichtungMerken = 1;
522
                  NeueKompassRichtungMerken = 1;
498
                  sollGier = 0;
523
                  sollGier = 0;
499
                  Mess_Integral_Gier = 0;      
524
                  Mess_Integral_Gier = 0;      
500
                  Mess_Integral_Gier2 = 0;
525
                  Mess_Integral_Gier2 = 0;
501
                 }
526
                 }
502
                }
527
                } else MikroKopterFlags |= FLAG_FLY;
-
 
528
               
503
            if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
529
            if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
504
                {
530
                {
505
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
531
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
506
// auf Nullwerte kalibrieren
532
// auf Nullwerte kalibrieren
507
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
533
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
Line 586... Line 612...
586
                        Mess_IntegralRoll = 0;
612
                        Mess_IntegralRoll = 0;
587
                        Mess_IntegralNick2 = IntegralNick;
613
                        Mess_IntegralNick2 = IntegralNick;
588
                        Mess_IntegralRoll2 = IntegralRoll;
614
                        Mess_IntegralRoll2 = IntegralRoll;
589
                        SummeNick = 0;
615
                        SummeNick = 0;
590
                        SummeRoll = 0;
616
                        SummeRoll = 0;
-
 
617
                        MikroKopterFlags |= FLAG_START;
591
                        }          
618
                        }          
592
                    }  
619
                    }  
593
                    else delay_einschalten = 0;
620
                    else delay_einschalten = 0;
594
                //Auf Neutralwerte setzen
621
                //Auf Neutralwerte setzen
595
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
622
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
Line 639... Line 666...
639
    IntegralFaktor = ((float) Parameter_Gyro_I) / (44000 / STICK_GAIN);
666
    IntegralFaktor = ((float) Parameter_Gyro_I) / (44000 / STICK_GAIN);
Line 640... Line 667...
640
 
667
 
641
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
668
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
642
//+ Digitale Steuerung per DubWise
669
//+ Digitale Steuerung per DubWise
643
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
670
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
644
#define KEY_VALUE (Parameter_UserParam8 * 4)  //(Poti3 * 8)
671
#define KEY_VALUE (Parameter_ExternalControl * 4)  //(Poti3 * 8)
645
if(DubWiseKeys[1]) beeptime = 10;
672
if(DubWiseKeys[1]) beeptime = 10;
646
    if(DubWiseKeys[1] & DUB_KEY_UP)    tmp_int = KEY_VALUE;   else
673
    if(DubWiseKeys[1] & DUB_KEY_UP)    tmp_int = KEY_VALUE;   else
647
    if(DubWiseKeys[1] & DUB_KEY_DOWN)  tmp_int = -KEY_VALUE;  else   tmp_int = 0;
674
    if(DubWiseKeys[1] & DUB_KEY_DOWN)  tmp_int = -KEY_VALUE;  else   tmp_int = 0;
648
    ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8;
675
    ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8;
Line 659... Line 686...
659
    StickRoll += (STICK_GAIN * ExternStickRoll) / 8;
686
    StickRoll += (STICK_GAIN * ExternStickRoll) / 8;
660
    StickGier += STICK_GAIN * ExternStickGier;
687
    StickGier += STICK_GAIN * ExternStickGier;
661
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
688
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
662
//+ Analoge Steuerung per Seriell
689
//+ Analoge Steuerung per Seriell
663
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
690
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
664
   if(ExternControl.Config & 0x01 && Parameter_UserParam8 > 128)
691
   if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128)
665
    {
692
    {
666
         StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P;
693
         StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P;
667
         StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P;
694
         StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P;
668
         StickGier += ExternControl.Gier;
695
         StickGier += ExternControl.Gier;
669
     ExternHoehenValue =  (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung;
696
     ExternHoehenValue =  (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung;
Line 842... Line 869...
842
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
869
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
843
    if(GierGyroFehler > ABGLEICH_ANZAHL/2) AdNeutralGier++;
870
    if(GierGyroFehler > ABGLEICH_ANZAHL/2) AdNeutralGier++;
844
    if(GierGyroFehler <-ABGLEICH_ANZAHL/2) AdNeutralGier--;
871
    if(GierGyroFehler <-ABGLEICH_ANZAHL/2) AdNeutralGier--;
Line 845... Line 872...
845
 
872
 
846
DebugOut.Analog[22] = MittelIntegralRoll / 26;
-
 
-
 
873
DebugOut.Analog[22] = MittelIntegralRoll / 26;
847
 
874
//DebugOut.Analog[24] = GierGyroFehler;
Line 848... Line 875...
848
    GierGyroFehler = 0;
875
    GierGyroFehler = 0;
849
 
876
 
Line 892... Line 919...
892
         } else  last_n_n = 0;
919
         } else  last_n_n = 0;
893
        }
920
        }
894
        else
921
        else
895
        {
922
        {
896
         cnt = 0;
923
         cnt = 0;
897
         KompassSignalSchlecht = 500;
924
         KompassSignalSchlecht = 1000;
898
        }
925
        }
899
        if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
926
        if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
900
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
927
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
901
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
928
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
Line 929... Line 956...
929
           else last_r_n = 1;
956
           else last_r_n = 1;
930
         } else  last_r_n = 0;
957
         } else  last_r_n = 0;
931
        } else
958
        } else
932
        {
959
        {
933
         cnt = 0;
960
         cnt = 0;
934
         KompassSignalSchlecht = 500;
961
         KompassSignalSchlecht = 1000;
935
        }
962
        }
Line 936... Line 963...
936
 
963
 
937
        if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
964
        if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
938
        if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
965
        if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
939
        if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
-
 
940
/*DebugOut.Analog[27] = ausgleichRoll;
-
 
941
DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
-
 
942
DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
-
 
943
*/
966
        if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
944
  }
967
  }
945
  else
968
  else
946
  {
969
  {
947
   LageKorrekturRoll = 0;
970
   LageKorrekturRoll = 0;
Line 969... Line 992...
969
//  Gieren
992
//  Gieren
970
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
993
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
971
//    if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;};
994
//    if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;};
972
    if(abs(StickGier) > 15) // war 35 
995
    if(abs(StickGier) > 15) // war 35 
973
     {
996
     {
-
 
997
      KompassSignalSchlecht = 1000;
974
      if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX))
998
      if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX))
975
       {
999
       {
976
         NeueKompassRichtungMerken = 1;
1000
         NeueKompassRichtungMerken = 1;
977
         KompassStartwert = ErsatzKompass;
1001
         KompassStartwert = ErsatzKompass;
978
         KompassSignalSchlecht = 250;
-
 
979
        };
1002
        };
980
     }
1003
     }
981
    tmp_int  = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo  y = ax + bx²
1004
    tmp_int  = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo  y = ax + bx²
982
    tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
1005
    tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
983
    sollGier = tmp_int;
1006
    sollGier = tmp_int;
Line 995... Line 1018...
995
       int w,v,r,fehler,korrektur;
1018
       int w,v,r,fehler,korrektur;
996
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
1019
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
997
       v = abs(IntegralRoll /512);
1020
       v = abs(IntegralRoll /512);
998
       if(v > w) w = v; // grösste Neigung ermitteln
1021
       if(v > w) w = v; // grösste Neigung ermitteln
999
       korrektur = w / 8 + 1;
1022
       korrektur = w / 8 + 1;
-
 
1023
       fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
-
 
1024
//DebugOut.Analog[25] = KompassSignalSchlecht;
-
 
1025
       if(!KompassSignalSchlecht && w < 25)
-
 
1026
        {
-
 
1027
        GierGyroFehler += fehler;
1000
       if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht)    
1028
        if(NeueKompassRichtungMerken)    
1001
        {
1029
         {
1002
         beeptime = 200;
1030
          beeptime = 200;
1003
//         KompassStartwert = KompassValue;
1031
//         KompassStartwert = KompassValue;
1004
         KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR);
1032
          KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR);
1005
         NeueKompassRichtungMerken = 0;
1033
          NeueKompassRichtungMerken = 0;
-
 
1034
         }
1006
        }
1035
        }
1007
       fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
-
 
1008
       ErsatzKompass += (fehler * 8) / korrektur;
1036
       ErsatzKompass += (fehler * 8) / korrektur;
1009
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
1037
       w = (w * Parameter_KompassWirkung) / 32;           // auf die Wirkung normieren
1010
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1038
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1011
       if(w > 0)
1039
       if(w >= 0)
1012
        {
1040
        {
1013
          if(!KompassSignalSchlecht)
1041
          if(!KompassSignalSchlecht)
1014
          {
1042
          {
1015
           GierGyroFehler += fehler;
-
 
1016
           v = 64 + ((MaxStickNick + MaxStickRoll)) / 8;  
1043
           v = 64 + ((MaxStickNick + MaxStickRoll)) / 8;  
1017
           r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180;
1044
           r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180;
1018
//           r = KompassRichtung;
1045
//           r = KompassRichtung;
1019
           v = (r * w) / v;  // nach Kompass ausrichten
1046
           v = (r * w) / v;  // nach Kompass ausrichten
1020
           w = 3 * Parameter_KompassWirkung;
1047
           w = 3 * Parameter_KompassWirkung;
Line 1023... Line 1050...
1023
           if(v < -w) v = -w;
1050
           if(v < -w) v = -w;
1024
           Mess_Integral_Gier += v;
1051
           Mess_Integral_Gier += v;
1025
          }
1052
          }
1026
          if(KompassSignalSchlecht) KompassSignalSchlecht--;
1053
          if(KompassSignalSchlecht) KompassSignalSchlecht--;
1027
        }  
1054
        }  
1028
        else KompassSignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 0,5 sek
1055
        else KompassSignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
1029
       
-
 
1030
     }
1056
     }
1031
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1057
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
Line 1032... Line 1058...
1032
 
1058
 
1033
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1059
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++