Subversion Repositories FlightCtrl

Rev

Rev 420 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 420 Rev 446
Line 50... Line 50...
50
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
50
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
51
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
51
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
52
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
52
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
53
// +  POSSIBILITY OF SUCH DAMAGE. 
53
// +  POSSIBILITY OF SUCH DAMAGE. 
54
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
54
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
55
// Aenderungen von Peter Muehlenbrock ("Salvo") Stand 6.10.2007
-
 
56
/*
-
 
57
Driftkompensation fuer Gyros verbessert
-
 
58
Linearsensor mit fixem Neutralwert
-
 
59
Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsunabhaengige Kompassfunktion
-
 
60
*/
Line 55... Line 61...
55
 
61
 
56
#include "main.h"
62
#include "main.h"
Line 57... Line 63...
57
#include "eeprom.c"
63
#include "eeprom.c"
Line 78... Line 84...
78
unsigned char MAX_GAS,MIN_GAS;
84
unsigned char MAX_GAS,MIN_GAS;
79
unsigned char Notlandung = 0;
85
unsigned char Notlandung = 0;
80
unsigned char HoehenReglerAktiv = 0;
86
unsigned char HoehenReglerAktiv = 0;
81
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
87
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
Line -... Line 88...
-
 
88
 
-
 
89
//Salvo 12.10.2007
-
 
90
uint8_t magkompass_ok=0;
-
 
91
uint8_t gps_cmd = GPS_CMD_STOP;
-
 
92
static int       ubat_cnt =0;
-
 
93
static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung
-
 
94
int w,v;
-
 
95
//Salvo End
-
 
96
 
-
 
97
 //Salvo 2.9.2007 Ersatzkompass
-
 
98
volatile long GyroKomp_Int;
-
 
99
volatile int GyroKomp_Value; //  Der ermittelte Kompasswert aus Gyro und Magnetkompass
-
 
100
// Salvo End
82
 
101
 
83
float GyroFaktor;
102
float GyroFaktor;
Line 84... Line 103...
84
float IntegralFaktor;
103
float IntegralFaktor;
85
 
104
 
Line 101... Line 120...
101
unsigned char Parameter_Luftdruck_D  = 48;      // Wert : 0-250
120
unsigned char Parameter_Luftdruck_D  = 48;      // Wert : 0-250
102
unsigned char Parameter_MaxHoehe     = 251;      // Wert : 0-250
121
unsigned char Parameter_MaxHoehe     = 251;      // Wert : 0-250
103
unsigned char Parameter_Hoehe_P      = 16;      // Wert : 0-32
122
unsigned char Parameter_Hoehe_P      = 16;      // Wert : 0-32
104
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
123
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
105
unsigned char Parameter_KompassWirkung = 64;    // Wert : 0-250
124
unsigned char Parameter_KompassWirkung = 64;    // Wert : 0-250
106
unsigned char Parameter_Gyro_P = 150;           // Wert : 10-250
125
unsigned char Parameter_Gyro_P = 50;           // Wert : 10-250
107
unsigned char Parameter_Gyro_I = 150;           // Wert : 0-250
126
unsigned char Parameter_Gyro_I = 150;           // Wert : 0-250
108
unsigned char Parameter_Gier_P = 2;             // Wert : 1-20
127
unsigned char Parameter_Gier_P = 2;             // Wert : 1-20
109
unsigned char Parameter_I_Faktor = 10;          // Wert : 1-20
128
unsigned char Parameter_I_Faktor = 10;          // Wert : 1-20
110
unsigned char Parameter_UserParam1 = 0;
129
unsigned char Parameter_UserParam1 = 0;
111
unsigned char Parameter_UserParam2 = 0;
130
unsigned char Parameter_UserParam2 = 0;
Line 138... Line 157...
138
    AdNeutralNick = 0; 
157
    AdNeutralNick = 0; 
139
        AdNeutralRoll = 0;     
158
        AdNeutralRoll = 0;     
140
        AdNeutralGier = 0;
159
        AdNeutralGier = 0;
141
    Parameter_AchsKopplung1 = 0;
160
    Parameter_AchsKopplung1 = 0;
142
    Parameter_AchsGegenKopplung1 = 0;
161
    Parameter_AchsGegenKopplung1 = 0;
-
 
162
 
143
    CalibrierMittelwert();     
163
    CalibrierMittelwert();     
144
    Delay_ms_Mess(100);
164
    Delay_ms_Mess(100);
145
        CalibrierMittelwert();
165
        CalibrierMittelwert();
146
    if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG))  // Höhenregelung aktiviert?
166
    if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG))  // Höhenregelung aktiviert?
147
     {    
167
     {    
Line 151... Line 171...
151
     AdNeutralNick= AdWertNick;
171
     AdNeutralNick= AdWertNick;
152
         AdNeutralRoll= AdWertRoll;    
172
         AdNeutralRoll= AdWertRoll;    
153
         AdNeutralGier= AdWertGier;
173
         AdNeutralGier= AdWertGier;
154
     StartNeutralRoll = AdNeutralRoll;
174
     StartNeutralRoll = AdNeutralRoll;
155
     StartNeutralNick = AdNeutralNick;
175
     StartNeutralNick = AdNeutralNick;
-
 
176
 
-
 
177
// Salvo 1.9.2007 ACC mit festen neutralwerten *****
-
 
178
        if (ACC_NEUTRAL_FIXED > 0)
-
 
179
        {
-
 
180
                NeutralAccX     = ACC_NICK_NEUTRAL;
-
 
181
                NeutralAccY     = ACC_ROLL_NEUTRAL;
-
 
182
        }
-
 
183
        else
-
 
184
        { // Automatisch bei Offsetabgleich ermitteln
156
    NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
185
                NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
157
        NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
186
                NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
-
 
187
        }
-
 
188
 // Salvo End   
158
        NeutralAccZ = Aktuell_az;
189
        NeutralAccZ = Aktuell_az;
Line 159... Line 190...
159
   
190
   
160
        Mess_IntegralNick = 0; 
191
        Mess_IntegralNick = 0; 
161
    Mess_IntegralNick2 = 0;
192
    Mess_IntegralNick2 = 0;
Line 171... Line 202...
171
    KompassStartwert = KompassValue;
202
    KompassStartwert = KompassValue;
172
    GPS_Neutral();
203
    GPS_Neutral();
173
    beeptime = 50;  
204
    beeptime = 50;  
174
        Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
205
        Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
175
        Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
206
        Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
-
 
207
 
-
 
208
//Salvo 13.10.2007 Ersatzkompass und Gas
-
 
209
        GyroKomp_Int =  KompassValue * GYROKOMP_INC_GRAD_DEFAULT; //Neu ab 3.1.2007
-
 
210
        gas_mittel      =       30;
-
 
211
        gas_actual      =       gas_mittel;
-
 
212
// Salvo End
176
}
213
}
Line 177... Line 214...
177
 
214
 
178
//############################################################################
215
//############################################################################
179
// Bearbeitet die Messwerte
216
// Bearbeitet die Messwerte
Line 191... Line 228...
191
        Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L;
228
        Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L;
192
    IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
229
    IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
193
    IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
230
    IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
194
    IntegralAccZ    += Aktuell_az - 704;//NeutralAccZ;
231
    IntegralAccZ    += Aktuell_az - 704;//NeutralAccZ;
195
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
232
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
-
 
233
//Salvo 12.11.2007
-
 
234
                        GyroKomp_Int  += MesswertGier;
-
 
235
//Salvo End
196
            Mess_Integral_Gier +=  MesswertGier;
236
            Mess_Integral_Gier +=  MesswertGier;
197
            Mess_Integral_Gier2 += MesswertGier;
237
            Mess_Integral_Gier2 += MesswertGier;
198
// Kopplungsanteil  +++++++++++++++++++++++++++++++++++++
238
// Kopplungsanteil  +++++++++++++++++++++++++++++++++++++
199
      if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
239
      if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
200
         {
240
         {
Line 398... Line 438...
398
     static char TimerWerteausgabe = 0;
438
     static char TimerWerteausgabe = 0;
399
     static char NeueKompassRichtungMerken = 0;
439
     static char NeueKompassRichtungMerken = 0;
400
     static long ausgleichNick, ausgleichRoll;
440
     static long ausgleichNick, ausgleichRoll;
Line 401... Line 441...
401
     
441
     
-
 
442
        Mittelwert();
-
 
443
//****** GPS Daten holen ***************
-
 
444
        short int n;
-
 
445
        if (gps_alive_cnt > 0) gps_alive_cnt--; //Dekrementieren. Wenn 0 kommen keine ausreichenden GPS Meldungen (Timeout)
-
 
446
        n = Get_Rel_Position();
402
        Mittelwert();
447
        if (n == 0)    
-
 
448
        {
-
 
449
                ROT_ON; //led blitzen lassen
-
 
450
        }
403
 
451
//******PROVISORISCH***************
-
 
452
    GRN_ON;
404
    GRN_ON;
453
 
405
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
454
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
406
// Gaswert ermitteln
455
// Gaswert ermitteln
407
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
456
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
457
        GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
-
 
458
//Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen
-
 
459
// und dieser dann langsam zwangsweise reduziert
-
 
460
        if (UBat <= EE_Parameter.UnterspannungsWarnung - 2)     //Unterhalb der Piepser Schwelle aktivieren
-
 
461
        {
-
 
462
                if (ubat_cnt > 700)
-
 
463
                {
-
 
464
                        ubat_cnt = 0;
-
 
465
                        if (gas_actual > ((gas_mittel*12)/15)) gas_actual--;
-
 
466
                }
-
 
467
                else ubat_cnt++;
-
 
468
                if (GasMischanteil > gas_actual) GasMischanteil = gas_actual;
-
 
469
        }
-
 
470
        else   //Falls UBAT wieder ok ist
-
 
471
        {
-
 
472
                if (ubat_cnt > 1000)
-
 
473
                {
-
 
474
                        gas_mittel = ((gas_mittel*9) + GasMischanteil)/10; //Filtern
-
 
475
                        gas_actual = GasMischanteil;
-
 
476
                }
-
 
477
                else
-
 
478
                {
-
 
479
                        ubat_cnt++;
-
 
480
                        if ((ubat_cnt % 10) == 0)
-
 
481
                        {
-
 
482
                                if (gas_actual < GasMischanteil) gas_actual++;
-
 
483
                                else gas_actual = GasMischanteil;
-
 
484
                }
-
 
485
                }
-
 
486
                GasMischanteil = gas_actual;
-
 
487
        }      
408
        GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
488
// Salvo End
409
    if(GasMischanteil < 0) GasMischanteil = 0;
489
    if(GasMischanteil < 0) GasMischanteil = 0;
410
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
490
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
411
// Emfang schlecht
491
// Empfang schlecht
412
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
492
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
413
   if(SenderOkay < 100)
493
   if(SenderOkay < 100)
414
        {
494
        {
415
        if(!PcZugriff)
495
        if(!PcZugriff)
Line 465... Line 545...
465
                    {
545
                    {
466
                    unsigned char setting = 2;
546
                    unsigned char setting = 2;
467
                    if(++delay_neutral > 200)  // nicht sofort
547
                    if(++delay_neutral > 200)  // nicht sofort
468
                        {
548
                        {
469
                        GRN_OFF;
549
                        GRN_OFF;
-
 
550
                        SetNeutral();
470
                        MotorenEin = 0;
551
                        MotorenEin = 0;
471
                        delay_neutral = 0;
552
                        delay_neutral = 0;
472
                        modell_fliegt = 0;
553
                        modell_fliegt = 0;
473
                        if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
554
                        if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
474
                        {
555
                        {
Line 478... Line 559...
478
                         if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
559
                         if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
479
                         if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
560
                         if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
480
                         if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
561
                         if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
481
                         eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting);  // aktiven Datensatz merken
562
                         eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting);  // aktiven Datensatz merken
482
                        }
563
                        }
483
                        if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG))  // Höhenregelung aktiviert?
-
 
484
                          {
-
 
485
                             if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
-
 
486
                          }  
-
 
-
 
564
 
-
 
565
 
-
 
566
 
-
 
567
 
487
                            ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
568
                            ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
488
                        SetNeutral();
-
 
-
 
569
 
489
                        Piep(GetActiveParamSetNumber());
570
                        Piep(GetActiveParamSetNumber());
-
 
571
                        if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG))  // Höhenregelung aktiviert?
-
 
572
                        {
-
 
573
                          if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
490
                        }
574
                        }  
-
 
575
                                                GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar
-
 
576
                                                if (gps_home_position.status > 0 )
-
 
577
                                                {
-
 
578
                                                        Delay_ms(1000);  //akustisch verkuenden dass GPS Home Daten da sind
-
 
579
                                                        beeptime = 2000;
-
 
580
                                                        Delay_ms(500);
-
 
581
                                                }
-
 
582
                       }
491
                    }
583
                    }
492
                 else delay_neutral = 0;
584
                 else delay_neutral = 0;
493
                }
585
                }
494
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
586
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
495
// Gas ist unten
587
// Gas ist unten
Line 639... Line 731...
639
     Looping_Roll = 0;
731
     Looping_Roll = 0;
640
     Looping_Nick = 0;
732
     Looping_Nick = 0;
641
    }  
733
    }  
Line -... Line 734...
-
 
734
 
642
 
735
 
643
 
736
 
644
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
737
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
645
// Integrale auf ACC-Signal abgleichen
738
// Integrale auf ACC-Signal abgleichen
Line 729... Line 822...
729
    Mess_IntegralRoll2 -= IntegralFehlerRoll;
822
    Mess_IntegralRoll2 -= IntegralFehlerRoll;
Line 730... Line 823...
730
 
823
 
731
//    IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
824
//    IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
Line -... Line 825...
-
 
825
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
-
 
826
 
-
 
827
//Salvo Ersatzkompass Ueberlauf korrigieren
-
 
828
                if (GyroKomp_Int >= ((long)360 * GYROKOMP_INC_GRAD_DEFAULT)) GyroKomp_Int = GyroKomp_Int - (GYROKOMP_INC_GRAD_DEFAULT *(long)360); //neu ab 3.11.2007
-
 
829
                if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + (GYROKOMP_INC_GRAD_DEFAULT *(long)360); //neu ab 3.11.2007
Line -... Line 830...
-
 
830
                ROT_OFF;
732
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
831
// Salvo End
733
 
832
 
734
 
833
/*
735
DebugOut.Analog[30] = I_LageRoll * 10;
834
DebugOut.Analog[30] = I_LageRoll * 10;
736
DebugOut.Analog[17] = IntegralAccNick / 26;
835
DebugOut.Analog[17] = IntegralAccNick / 26;
737
DebugOut.Analog[18] = IntegralAccRoll / 26;
836
DebugOut.Analog[18] = IntegralAccRoll / 26;
738
DebugOut.Analog[19] = IntegralFehlerNick;// / 26;
837
DebugOut.Analog[19] = IntegralFehlerNick;// / 26;
739
DebugOut.Analog[20] = IntegralFehlerRoll;// / 26;
838
DebugOut.Analog[20] = IntegralFehlerRoll;// / 26;
740
DebugOut.Analog[21] = MittelIntegralNick / 26;
839
DebugOut.Analog[21] = MittelIntegralNick / 26;
-
 
840
DebugOut.Analog[22] = MittelIntegralRoll / 26;
Line 741... Line 841...
741
DebugOut.Analog[22] = MittelIntegralRoll / 26;
841
DebugOut.Analog[28] = ausgleichNick;
742
DebugOut.Analog[28] = ausgleichNick;
842
DebugOut.Analog[29] = ausgleichRoll;
Line 743... Line 843...
743
DebugOut.Analog[29] = ausgleichRoll;
843
*/
Line 774... Line 874...
774
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
874
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
775
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
875
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
Line 776... Line 876...
776
 
876
 
777
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
877
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
778
        cnt = 1;// + labs(IntegralFehlerRoll) / 4096;
878
        cnt = 1;// + labs(IntegralFehlerRoll) / 4096;
779
ausgleichRoll = 0;
879
                ausgleichRoll = 0;
780
        if(IntegralFehlerRoll >  FEHLER_LIMIT2)
880
        if(IntegralFehlerRoll >  FEHLER_LIMIT2)
781
         {
881
         {
782
           if(last_r_p)
882
           if(last_r_p)
783
           {
883
           {
Line 828... Line 928...
828
    sollGier = tmp_int;
928
    sollGier = tmp_int;
829
    Mess_Integral_Gier -= tmp_int;  
929
    Mess_Integral_Gier -= tmp_int;  
830
    if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000;  // begrenzen
930
    if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000;  // begrenzen
831
    if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
931
    if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
Line -... Line 932...
-
 
932
 
-
 
933
// Salvo Ersatzkompass  26.9.2007 **********************
-
 
934
        if ((Kompass_Neuer_Wert > 0))
-
 
935
        {
-
 
936
           Kompass_Neuer_Wert = 0;
-
 
937
           w = (abs(Mittelwert_AccNick));
-
 
938
           v = (abs(Mittelwert_AccRoll));
-
 
939
           if  ((w  < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass nur mit Magnetkompass aktualisieren wenn alles ok
-
 
940
           {
-
 
941
                if  ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
-
 
942
                 {
-
 
943
                  magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet 
-
 
944
                  GyroKomp_Int = (GyroKomp_Int )/GYROKOMP_INC_GRAD_DEFAULT;
-
 
945
                  w = KompassValue - GyroKomp_Int;
-
 
946
                  if ((w > 0) && (w < 180))
-
 
947
                  {
-
 
948
                   ++GyroKomp_Int;
-
 
949
                  }
-
 
950
                  else if ((w > 0) && (w >= 180))
-
 
951
                  {
-
 
952
                   --GyroKomp_Int;
-
 
953
                  }
-
 
954
                  else if ((w < 0) && (w >= -180))
-
 
955
                  {
-
 
956
                   --GyroKomp_Int;
-
 
957
                  }
-
 
958
                  else if ((w < 0) && (w < -180))
-
 
959
                  {
-
 
960
                   ++GyroKomp_Int;
-
 
961
                  }
-
 
962
                  if (GyroKomp_Int < 0)  GyroKomp_Int = GyroKomp_Int + 360;
-
 
963
                  GyroKomp_Int = (GyroKomp_Int%360) * GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern
-
 
964
                 }
-
 
965
           }
-
 
966
           else magkompass_ok = 0;
-
 
967
        }
-
 
968
// Salvo End *************************
-
 
969
 
-
 
970
// Salvo 6.10.2007 
-
 
971
        // GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist
-
 
972
        //GPS Hold Aktiveren wenn Knueppel in Ruhelage sind
-
 
973
        if ((EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) && (abs(StickRoll) < GPS_STICK_HOLDOFF) && (abs(StickNick) < GPS_STICK_HOLDOFF) && (gps_alive_cnt > 0))
-
 
974
        {
-
 
975
                if (Parameter_MaxHoehe > 200)  
-
 
976
                {      
-
 
977
                        if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet
-
 
978
                        else gps_cmd = GPS_CMD_REQ_HOME;
-
 
979
                        n = GPS_CRTL(gps_cmd);
-
 
980
                }
-
 
981
                else
-
 
982
                {
-
 
983
                        if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet
-
 
984
                        else gps_cmd = GPS_CMD_REQ_HOLD;
-
 
985
                        n= GPS_CRTL(gps_cmd);
-
 
986
                }
-
 
987
        }
832
 
988
        else (n= GPS_CRTL(GPS_CMD_STOP)); //GPS Lageregelung beenden
833
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
989
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
834
//  Kompass
990
//  Kompass
835
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
991
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
836
    if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
992
    if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) && (Kompass_present > 0))
837
     {
-
 
838
       int w,v;
-
 
839
       static int SignalSchlecht = 0;
-
 
840
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
-
 
841
       v = abs(IntegralRoll /512);
993
     {
-
 
994
           if(v > w) w = v; // grösste Neigung ermitteln
-
 
995
 
842
       if(v > w) w = v; // grösste Neigung ermitteln
996
// Salvo 13.9.2007 Nur wenn Magnetkompass ordentliche Werte liefert
843
       if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)    
997
                if ((magkompass_ok > 0)  &&  NeueKompassRichtungMerken)  
844
        {
998
        {
845
         KompassStartwert = KompassValue;
999
                 KompassStartwert = KompassValue;
846
         NeueKompassRichtungMerken = 0;
1000
         NeueKompassRichtungMerken = 0;
-
 
1001
        }
-
 
1002
// Salvo 13.9.2007
-
 
1003
       w=0;
847
        }
1004
// Salvo End
848
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
1005
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
849
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1006
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
850
       if(w > 0)
1007
       if(w > 0)
-
 
1008
        {
851
        {
1009
// Salvo Kompasssteuerung **********************        
852
          if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32;  // nach Kompass ausrichten
1010
                 if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32;  // nach Kompass ausrichten
853
          if(SignalSchlecht) SignalSchlecht--;
1011
// Salvo End
854
        }  
-
 
-
 
1012
        }  
855
        else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
1013
 
856
     }
1014
     }
Line 857... Line 1015...
857
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1015
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
858
 
1016
 
Line 868... Line 1026...
868
    DebugOut.Analog[3] = Mittelwert_AccRoll;
1026
    DebugOut.Analog[3] = Mittelwert_AccRoll;
869
    DebugOut.Analog[4] = MesswertGier;
1027
    DebugOut.Analog[4] = MesswertGier;
870
    DebugOut.Analog[5] = HoehenWert;
1028
    DebugOut.Analog[5] = HoehenWert;
871
    DebugOut.Analog[6] =(Mess_Integral_Hoch / 512);
1029
    DebugOut.Analog[6] =(Mess_Integral_Hoch / 512);
872
    DebugOut.Analog[8] = KompassValue;
1030
    DebugOut.Analog[8] = KompassValue;
-
 
1031
        DebugOut.Analog[9] = GyroKomp_Int/GYROKOMP_INC_GRAD_DEFAULT;
-
 
1032
 
-
 
1033
// Diverse parameter Debugging
-
 
1034
        DebugOut.Analog[16] =  dataset_cnt;
873
    DebugOut.Analog[9] = UBat;
1035
        DebugOut.Analog[17] =  UBat;
874
    DebugOut.Analog[10] = SenderOkay;
1036
        DebugOut.Analog[18] =  MesswertNick;
875
    DebugOut.Analog[16] = Mittelwert_AccHoch;
1037
        DebugOut.Analog[19] =  MesswertRoll;
-
 
1038
        DebugOut.Analog[20] =  MesswertGier;
-
 
1039
        DebugOut.Analog[21] =  StickNick;
-
 
1040
        DebugOut.Analog[22] =  StickRoll;
-
 
1041
        DebugOut.Analog[23] =  StickGier;
-
 
1042
 
-
 
1043
 
-
 
1044
// GPS Debugging
-
 
1045
        DebugOut.Analog[26] =  gps_rel_act_position.utm_east;
-
 
1046
        DebugOut.Analog[27] =  gps_rel_act_position.utm_north;
-
 
1047
        DebugOut.Analog[28] =  gps_rel_act_position.utm_alt;
-
 
1048
        DebugOut.Analog[29] =  gps_sub_state+(20*gps_cmd);
Line 876... Line 1049...
876
 
1049
 
877
/*    DebugOut.Analog[16] = motor_rx[0];
1050
/*    DebugOut.Analog[16] = motor_rx[0];
878
    DebugOut.Analog[17] = motor_rx[1];
1051
    DebugOut.Analog[17] = motor_rx[1];
879
    DebugOut.Analog[18] = motor_rx[2];
1052
    DebugOut.Analog[18] = motor_rx[2];