Subversion Repositories FlightCtrl

Rev

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

Rev 1002 Rev 1003
Line 49... Line 49...
49
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
49
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
50
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
51
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
51
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
52
// +  POSSIBILITY OF SUCH DAMAGE. 
52
// +  POSSIBILITY OF SUCH DAMAGE. 
53
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
53
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
54
// Aenderungen von Peter Muehlenbrock ("Salvo") Stand 9.11.2008
-
 
55
/*
-
 
56
Driftkompensation fuer Gyros verbessert
-
 
57
Linearsensor optional mit fixem Neutralwert
-
 
58
Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsunabhaengige Kompassfunktion
-
 
59
*/
Line 54... Line 60...
54
 
60
 
55
#include "main.h"
61
#include "main.h"
Line -... Line 62...
-
 
62
#include "eeprom.c"
56
#include "eeprom.c"
63
 
57
 
64
 
58
unsigned char h,m,s;
65
unsigned char h,m,s;
59
volatile unsigned int I2CTimeout = 100;
66
volatile unsigned int I2CTimeout = 100;
60
volatile int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias;
67
volatile int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias;
Line 83... Line 90...
83
unsigned char TrichterFlug = 0;
90
unsigned char TrichterFlug = 0;
84
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
91
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
85
long  ErsatzKompass;
92
long  ErsatzKompass;
86
int   ErsatzKompassInGrad; // Kompasswert in Grad
93
int   ErsatzKompassInGrad; // Kompasswert in Grad
87
int   GierGyroFehler = 0;
94
int   GierGyroFehler = 0;
-
 
95
//Salvo 12.10.2007
-
 
96
uint8_t magkompass_ok=0;
-
 
97
uint8_t gps_cmd = GPS_CMD_STOP;
-
 
98
static int       ubat_cnt =0;
-
 
99
static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung
-
 
100
int w,v;
-
 
101
//Salvo End
-
 
102
 
-
 
103
 //Salvo 15.12.2007 Ersatzkompass und Giergyrokompensation
-
 
104
long GyroKomp_Int;
-
 
105
long int GyroGier_Comp;
-
 
106
int GyroKomp_Value; //  Der ermittelte Kompasswert aus Gyro und Magnetkompass
-
 
107
short int cnt_stickgier_zero =0;
-
 
108
int gyrogier_kompass;
-
 
109
//Salvo End
-
 
110
 
-
 
111
 //Salvo 2.1.2008 Allgemeine Debugvariablen
-
 
112
int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7;
-
 
113
//Salvo End
88
float GyroFaktor;
114
float GyroFaktor;
89
float IntegralFaktor;
115
float IntegralFaktor;
90
volatile int  DiffNick,DiffRoll;
116
volatile int  DiffNick,DiffRoll;
91
int  Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
117
int  Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
92
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
118
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
Line 128... Line 154...
128
unsigned char Parameter_J17Timing;              // for the J17 Output
154
unsigned char Parameter_J17Timing;              // for the J17 Output
129
unsigned char Parameter_NaviGpsModeControl;     // Parameters for the Naviboard
155
unsigned char Parameter_NaviGpsModeControl;     // Parameters for the Naviboard
130
unsigned char Parameter_NaviGpsGain;    
156
unsigned char Parameter_NaviGpsGain;    
131
unsigned char Parameter_NaviGpsP;        
157
unsigned char Parameter_NaviGpsP;        
132
unsigned char Parameter_NaviGpsI;        
158
unsigned char Parameter_NaviGpsI;        
133
unsigned char Parameter_NaviGpsD;        
159
unsigned char Parameter_NaviGpsD;  
-
 
160
unsigned char Parameter_NaviStickThreshold; //salvo 16.10.2008      
134
unsigned char Parameter_NaviGpsACC;        
161
unsigned char Parameter_NaviGpsACC;        
135
unsigned char Parameter_ExternalControl;
162
unsigned char Parameter_ExternalControl;
136
struct mk_param_struct EE_Parameter;
163
struct mk_param_struct EE_Parameter;
137
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
164
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
138
int MaxStickNick = 0,MaxStickRoll = 0;
165
int MaxStickNick = 0,MaxStickRoll = 0;
139
unsigned int  modell_fliegt = 0;
166
unsigned int  modell_fliegt = 0;
140
unsigned char MikroKopterFlags = 0;
167
unsigned char MikroKopterFlags = 0;
Line -... Line 168...
-
 
168
 
-
 
169
//Salvo 2.1.2008 Allgemeine Debugvariablen
-
 
170
int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7;
-
 
171
//Salvo End
-
 
172
 
-
 
173
 
-
 
174
 
141
 
175
 
142
void Piep(unsigned char Anzahl)
176
void Piep(unsigned char Anzahl)
143
{
177
{
144
 while(Anzahl--)
178
 while(Anzahl--)
145
 {
179
 {
Line 152... Line 186...
152
//############################################################################
186
//############################################################################
153
//  Nullwerte ermitteln
187
//  Nullwerte ermitteln
154
void SetNeutral(void)
188
void SetNeutral(void)
155
//############################################################################
189
//############################################################################
156
{
190
{
-
 
191
        // Salvo 9.12.2007
-
 
192
        RX_SWTCH_ON; //GPS Daten auf RX eingang schalten 
-
 
193
        // Salvo End
157
        NeutralAccX = 0;
194
        NeutralAccX = 0;
158
        NeutralAccY = 0;
195
        NeutralAccY = 0;
159
        NeutralAccZ = 0;
196
        NeutralAccZ = 0;
160
    AdNeutralNick = 0; 
197
    AdNeutralNick = 0; 
161
        AdNeutralRoll = 0;     
198
        AdNeutralRoll = 0;     
Line 196... Line 233...
196
    Mess_IntegralRoll2 = 0;
233
    Mess_IntegralRoll2 = 0;
197
    Mess_Integral_Gier = 0;    
234
    Mess_Integral_Gier = 0;    
198
    MesswertNick = 0;
235
    MesswertNick = 0;
199
    MesswertRoll = 0;
236
    MesswertRoll = 0;
200
    MesswertGier = 0;
237
    MesswertGier = 0;
201
 Delay_ms_Mess(100);
238
        Delay_ms_Mess(100);
202
    StartLuftdruck = Luftdruck;
239
    StartLuftdruck = Luftdruck;
203
    HoeheD = 0;
240
    HoeheD = 0;
204
    Mess_Integral_Hoch = 0;
241
    Mess_Integral_Hoch = 0;
205
    KompassStartwert = KompassValue;
242
    KompassStartwert = KompassValue;
206
    GPS_Neutral();
243
    GPS_Neutral();
Line 211... Line 248...
211
    ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
248
    ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
212
    GierGyroFehler = 0;
249
    GierGyroFehler = 0;
213
    SendVersionToNavi = 1;
250
    SendVersionToNavi = 1;
214
    LED_Init();
251
    LED_Init();
215
    MikroKopterFlags |= FLAG_CALIBRATE;
252
    MikroKopterFlags |= FLAG_CALIBRATE;
-
 
253
   
-
 
254
//Salvo 13.10.2007 Ersatzkompass und Gas
-
 
255
        GyroKomp_Int =  KompassValue * GIER_GRAD_FAKTOR; //Neu ab 15.10.2008
-
 
256
//      gas_mittel      =       30;
-
 
257
//      gas_actual      =       gas_mittel;
-
 
258
// Salvo End
-
 
259
 
216
}
260
}
Line 217... Line 261...
217
 
261
 
218
//############################################################################
262
//############################################################################
219
// Bearbeitet die Messwerte
263
// Bearbeitet die Messwerte
Line 225... Line 269...
225
    MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier;
269
    MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier;
226
    MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll;
270
    MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll;
227
    MesswertNick = (signed int) AdWertNick - AdNeutralNick;
271
    MesswertNick = (signed int) AdWertNick - AdNeutralNick;
Line 228... Line 272...
228
 
272
 
229
//DebugOut.Analog[26] = MesswertNick;
273
//DebugOut.Analog[26] = MesswertNick;
Line 230... Line 274...
230
DebugOut.Analog[28] = MesswertRoll;
274
//DebugOut.Analog[28] = MesswertRoll;
231
 
275
 
232
// Beschleunigungssensor  ++++++++++++++++++++++++++++++++++++++++++++++++
276
// Beschleunigungssensor  ++++++++++++++++++++++++++++++++++++++++++++++++
233
        Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
277
        Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
Line 239... Line 283...
239
    NaviAccRoll    += AdWertAccRoll;
283
    NaviAccRoll    += AdWertAccRoll;
240
    NaviCntAcc++;
284
    NaviCntAcc++;
241
    IntegralAccZ    += Aktuell_az - NeutralAccZ;
285
    IntegralAccZ    += Aktuell_az - NeutralAccZ;
242
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
286
// Gier  ++++++++++++++++++++++++++++++++++++++++++++++++
243
            ErsatzKompass +=  MesswertGier;
287
            ErsatzKompass +=  MesswertGier;
-
 
288
//Salvo 12.11.2007
-
 
289
                        GyroKomp_Int   += (long)MesswertGier;
-
 
290
                        GyroGier_Comp  += (long)MesswertGier;
-
 
291
//Salvo End
244
            Mess_Integral_Gier +=  MesswertGier;
292
            Mess_Integral_Gier +=  MesswertGier;
245
//            Mess_Integral_Gier2 += MesswertGier;
293
//            Mess_Integral_Gier2 += MesswertGier;
246
                    if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR;  // 360° Umschlag
294
                    if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR;  // 360° Umschlag
247
                    if(ErsatzKompass < 0)                          ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
295
                    if(ErsatzKompass < 0)                          ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
248
// Kopplungsanteil  +++++++++++++++++++++++++++++++++++++
296
// Kopplungsanteil  +++++++++++++++++++++++++++++++++++++
Line 434... Line 482...
434
 CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255);
482
 CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255);
435
 CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255);
483
 CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255);
436
 CHK_POTI(Parameter_NaviGpsP,EE_Parameter.NaviGpsP,0,255);
484
 CHK_POTI(Parameter_NaviGpsP,EE_Parameter.NaviGpsP,0,255);
437
 CHK_POTI(Parameter_NaviGpsI,EE_Parameter.NaviGpsI,0,255);
485
 CHK_POTI(Parameter_NaviGpsI,EE_Parameter.NaviGpsI,0,255);
438
 CHK_POTI(Parameter_NaviGpsD,EE_Parameter.NaviGpsD,0,255);
486
 CHK_POTI(Parameter_NaviGpsD,EE_Parameter.NaviGpsD,0,255);
-
 
487
 CHK_POTI(Parameter_NaviStickThreshold,EE_Parameter.NaviStickThreshold,0,255); //Salvo 16.10.2008
439
 CHK_POTI(Parameter_NaviGpsACC,EE_Parameter.NaviGpsACC,0,255);
488
 CHK_POTI(Parameter_NaviGpsACC,EE_Parameter.NaviGpsACC,0,255);
440
 CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl,0,255);
489
 CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl,0,255);
-
 
490
 
Line 441... Line 491...
441
 
491
 
442
 Ki = (float) Parameter_I_Faktor * 0.0001;
492
 Ki = (float) Parameter_I_Faktor * 0.0001;
443
 MAX_GAS = EE_Parameter.Gas_Max;
493
 MAX_GAS = EE_Parameter.Gas_Max;
444
 MIN_GAS = EE_Parameter.Gas_Min;
494
 MIN_GAS = EE_Parameter.Gas_Min;
Line 465... Line 515...
465
     static char TimerWerteausgabe = 0;
515
     static char TimerWerteausgabe = 0;
466
     static char NeueKompassRichtungMerken = 0;
516
     static char NeueKompassRichtungMerken = 0;
467
     static long ausgleichNick, ausgleichRoll;
517
     static long ausgleichNick, ausgleichRoll;
Line 468... Line 518...
468
     
518
     
-
 
519
        Mittelwert();
-
 
520
//****** GPS Daten holen ***************
-
 
521
        short int n;
-
 
522
        if (gps_alive_cnt > 0) gps_alive_cnt--; //Dekrementieren. Wenn 0 kommen keine ausreichenden GPS Meldungen (Timeout)
-
 
523
        n = Get_Rel_Position();
469
        Mittelwert();
524
        if (n == 0)    
-
 
525
        {
-
 
526
                ROT_ON; //led blitzen lassen
-
 
527
        }
470
 
528
//******PROVISORISCH***************
471
    GRN_ON;
529
    GRN_ON;
472
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
530
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
473
// Gaswert ermitteln
531
// Gaswert ermitteln
474
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
532
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
Line 539... Line 597...
539
                if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)  // Neutralwerte
597
                if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)  // Neutralwerte
540
                    {
598
                    {
541
                    if(++delay_neutral > 200)  // nicht sofort
599
                    if(++delay_neutral > 200)  // nicht sofort
542
                        {
600
                        {
543
                        GRN_OFF;
601
                        GRN_OFF;
-
 
602
                        SetNeutral();
544
                        MotorenEin = 0;
603
                        MotorenEin = 0;
545
                        delay_neutral = 0;
604
                        delay_neutral = 0;
546
                        modell_fliegt = 0;
605
                        modell_fliegt = 0;
547
                        if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
606
                        if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
548
                        {
607
                        {
Line 567... Line 626...
567
                            {
626
                            {
568
                             if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
627
                             if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
569
                            }  
628
                            }  
570
                           SetNeutral();
629
                           SetNeutral();
571
                           Piep(GetActiveParamSetNumber());
630
                           Piep(GetActiveParamSetNumber());
-
 
631
                                                        GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar
-
 
632
                                                        if (gps_home_position.status > 0 )
-
 
633
                                                        {
-
 
634
                                                                Delay_ms(1000);  //akustisch verkuenden dass GPS Home Daten da sind
-
 
635
                                                                beeptime = 1000;
-
 
636
                                                                Delay_ms(500);
-
 
637
                                                        }
572
                         }
638
                         }
573
                        }
639
                        }
574
                    }
640
                    }
575
                 else
641
                 else
576
                if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)  // ACC Neutralwerte speichern
642
                if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)  // ACC Neutralwerte speichern
Line 605... Line 671...
605
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
671
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
606
// Einschalten
672
// Einschalten
607
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
673
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
608
                    if(++delay_einschalten > 200)
674
                    if(++delay_einschalten > 200)
609
                        {
675
                        {
-
 
676
                                                int n;
-
 
677
                                                // Salvo 9.12.2007
-
 
678
                                                RX_SWTCH_ON; //GPS Daten auf RX eingang schalten 
-
 
679
                                                // Salvo End
610
                        delay_einschalten = 200;
680
                        delay_einschalten = 200;
611
                        modell_fliegt = 1;
681
                        modell_fliegt = 1;
612
                        MotorenEin = 1;
682
                        MotorenEin = 1;
613
                        sollGier = 0;
683
                        sollGier = 0;
614
                        Mess_Integral_Gier = 0;
684
                        Mess_Integral_Gier = 0;
Line 617... Line 687...
617
                        Mess_IntegralRoll = 0;
687
                        Mess_IntegralRoll = 0;
618
                        Mess_IntegralNick2 = IntegralNick;
688
                        Mess_IntegralNick2 = IntegralNick;
619
                        Mess_IntegralRoll2 = IntegralRoll;
689
                        Mess_IntegralRoll2 = IntegralRoll;
620
                        SummeNick = 0;
690
                        SummeNick = 0;
621
                        SummeRoll = 0;
691
                        SummeRoll = 0;
-
 
692
                        n= GPS_CRTL(GPS_CMD_STOP); //GPS Lageregelung beenden
-
 
693
 
622
                        MikroKopterFlags |= FLAG_START;
694
                        MikroKopterFlags |= FLAG_START;
623
                        }          
695
                        }          
624
                    }  
696
                    }  
625
                    else delay_einschalten = 0;
697
                    else delay_einschalten = 0;
626
                //Auf Neutralwerte setzen
698
                //Auf Neutralwerte setzen
Line 629... Line 701...
629
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
701
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
630
                if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
702
                if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
631
                    {
703
                    {
632
                    if(++delay_ausschalten > 200)  // nicht sofort
704
                    if(++delay_ausschalten > 200)  // nicht sofort
633
                        {
705
                        {
-
 
706
                                                // Salvo 9.12.2007
-
 
707
                                                RX_SWTCH_OFF; //Bluetooth Daten auf RX eingang schalten 
-
 
708
                                                // Salvo End
-
 
709
 
634
                        MotorenEin = 0;
710
                        MotorenEin = 0;
635
                        delay_ausschalten = 200;
711
                        delay_ausschalten = 200;
636
                        modell_fliegt = 0;
712
                        modell_fliegt = 0;
637
                        }
713
                        }
638
                    }
714
                    }
Line 648... Line 724...
648
    int tmp_int;
724
    int tmp_int;
649
        static int stick_nick,stick_roll;
725
        static int stick_nick,stick_roll;
650
    ParameterZuordnung();
726
    ParameterZuordnung();
651
    stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4;
727
    stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4;
652
    stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
728
    stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
-
 
729
//    StickNick = stick_nick - (GPS_Nick*(STICK_GAIN/2) + GPS_Nick2); //Salvo 23.10.2008
653
    StickNick = stick_nick - (GPS_Nick + GPS_Nick2);
730
    StickNick = stick_nick - (GPS_Nick + GPS_Nick2);
654
//    StickNick  = (StickNick  * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; 
731
//    StickNick  = (StickNick  * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; 
Line 655... Line 732...
655
 
732
 
656
    stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
733
    stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
-
 
734
    stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
657
    stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
735
//    StickRoll = stick_roll - (GPS_Roll*(STICK_GAIN/2) + GPS_Roll2); //Salvo 23.10.2008
-
 
736
    StickRoll = stick_roll - (GPS_Roll + GPS_Roll2);
Line 658... Line 737...
658
    StickRoll = stick_roll - (GPS_Roll + GPS_Roll2);
737
 
Line 659... Line 738...
659
 
738
 
660
//    StickRoll = (StickRoll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
739
//    StickRoll = (StickRoll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4;
Line 883... Line 962...
883
//    IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
962
//    IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2;
884
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
963
//    IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2;
885
    if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; AdNeutralGierBias++; }
964
    if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; AdNeutralGierBias++; }
886
    if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; AdNeutralGierBias--; }
965
    if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; AdNeutralGierBias--; }
Line 887... Line 966...
887
 
966
 
888
DebugOut.Analog[22] = MittelIntegralRoll / 26;
967
//DebugOut.Analog[22] = MittelIntegralRoll / 26;
889
//DebugOut.Analog[24] = GierGyroFehler;
968
//DebugOut.Analog[24] = GierGyroFehler;
Line -... Line 969...
-
 
969
    GierGyroFehler = 0;
-
 
970
 
-
 
971
//Salvo Ersatzkompass Ueberlauf korrigieren
-
 
972
                if (GyroKomp_Int >= ((long)360 * GIER_GRAD_FAKTOR)) GyroKomp_Int = GyroKomp_Int - (GIER_GRAD_FAKTOR *(long)360); //neu ab 3.11.2007
-
 
973
                if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + (GIER_GRAD_FAKTOR *(long)360); //neu ab 3.11.2007
Line 890... Line 974...
890
    GierGyroFehler = 0;
974
                ROT_OFF;
891
 
975
// Salvo End
892
 
976
 
893
/*DebugOut.Analog[17] = IntegralAccNick / 26;
977
/*DebugOut.Analog[17] = IntegralAccNick / 26;
Line 936... Line 1020...
936
        else
1020
        else
937
        {
1021
        {
938
         cnt = 0;
1022
         cnt = 0;
939
         KompassSignalSchlecht = 1000;
1023
         KompassSignalSchlecht = 1000;
940
        }
1024
        }
-
 
1025
                w = (abs(Mittelwert_AccNick));
-
 
1026
                v = (abs(Mittelwert_AccRoll));
-
 
1027
//Salvo 16.10.2008
-
 
1028
                if  ((w  < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur in annaehernd waagrechter Lage nachtrimmen
-
 
1029
                {
941
        if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
1030
         if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
942
        if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
1031
         if(IntegralFehlerNick >  FEHLER_LIMIT)   AdNeutralNick += cnt;
943
        if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
1032
         if(IntegralFehlerNick < -FEHLER_LIMIT)   AdNeutralNick -= cnt;
944
 
1033
                }
-
 
1034
//Salvo End
945
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
1035
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
946
        cnt = 1;// + labs(IntegralFehlerNick) / 4096;
1036
        cnt = 1;// + labs(IntegralFehlerNick) / 4096;
Line 947... Line 1037...
947
 
1037
 
948
        ausgleichRoll = 0;
1038
        ausgleichRoll = 0;
Line 973... Line 1063...
973
        } else
1063
        } else
974
        {
1064
        {
975
         cnt = 0;
1065
         cnt = 0;
976
         KompassSignalSchlecht = 1000;
1066
         KompassSignalSchlecht = 1000;
977
        }
1067
        }
-
 
1068
//Salvo 26.12.2007
-
 
1069
                if  ((w  < ACC_WAAGRECHT_LIMIT*2) && (v < ACC_WAAGRECHT_LIMIT*2)) // Gyro nur in annaehernd waagrechter Lage nachtrimmen
-
 
1070
                {
-
 
1071
                if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
-
 
1072
                if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
-
 
1073
                if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
-
 
1074
            }
-
 
1075
//Salvo End
Line 978... Line -...
978
 
-
 
979
        if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
-
 
980
        if(IntegralFehlerRoll >  FEHLER_LIMIT)   AdNeutralRoll += cnt;
-
 
981
        if(IntegralFehlerRoll < -FEHLER_LIMIT)   AdNeutralRoll -= cnt;
1076
 
982
  }
1077
  }
983
  else
1078
  else
984
  {
1079
  {
985
   LageKorrekturRoll = 0;
1080
   LageKorrekturRoll = 0;
Line 1000... Line 1095...
1000
    MittelIntegralNick2 = 0;
1095
    MittelIntegralNick2 = 0;
1001
    MittelIntegralRoll2 = 0;
1096
    MittelIntegralRoll2 = 0;
1002
    ZaehlMessungen = 0;
1097
    ZaehlMessungen = 0;
1003
 }
1098
 }
1004
//DebugOut.Analog[31] = StickRoll / (26*IntegralFaktor);
1099
//DebugOut.Analog[31] = StickRoll / (26*IntegralFaktor);
-
 
1100
// Salvo Ersatzkompass  und Giergyrokompensation 15.12.2007 **********************
-
 
1101
if ((Kompass_Neuer_Wert > 0)) //nur wenn Kompass einen neuen Wert geliefert hat
-
 
1102
{
-
 
1103
           Kompass_Neuer_Wert = 0;
-
 
1104
   w = (abs(Mittelwert_AccNick));
-
 
1105
   v = (abs(Mittelwert_AccRoll));
-
 
1106
   if  ((w  < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok
-
 
1107
   {
-
 
1108
        if  ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
-
 
1109
        {
-
 
1110
 
-
 
1111
          if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass
-
 
1112
          {
-
 
1113
                        if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1;
-
 
1114
                        if (cnt_stickgier_zero > 2) // nur Abgleichen wenn keine Stickbewegung da
-
 
1115
                        {
-
 
1116
                                w = (int) (GyroGier_Comp/(long)GIER_GRAD_FAKTOR);
-
 
1117
                                v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen
-
 
1118
                                if (v <-180) v +=360; // Uberlaufkorrektur
-
 
1119
                                if (v > 180) v -=360; // Uberlaufkorrektur
-
 
1120
 
-
 
1121
                                v = w-v;  //Differenz Gyro zu Kompass ist der Driftfehler
-
 
1122
 
-
 
1123
                                #define GIER_COMP_MAX 2
-
 
1124
                                if (v > GIER_COMP_MAX)  v= GIER_COMP_MAX;
-
 
1125
                                if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX;
-
 
1126
                                if (abs(w) > 1)
-
 
1127
                                {      
-
 
1128
                                        GyroGier_Comp           = 0;
-
 
1129
                                        gyrogier_kompass        = KompassValue; // Kompasswert merken
-
 
1130
                                        AdNeutralGier           -= v;  
-
 
1131
                                }
-
 
1132
                        }
-
 
1133
          }
-
 
1134
          else
-
 
1135
          {
-
 
1136
                gyrogier_kompass        = KompassValue; // Kompasswert merken
-
 
1137
                cnt_stickgier_zero      = 0;
-
 
1138
                GyroGier_Comp = 0;
-
 
1139
          }
-
 
1140
 
-
 
1141
          magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet 
-
 
1142
          GyroKomp_Int = (GyroKomp_Int )/(long)GIER_GRAD_FAKTOR;
-
 
1143
 
-
 
1144
          w = KompassValue - GyroKomp_Int;
-
 
1145
          if ((w > 0) && (w < 180))
-
 
1146
          {
-
 
1147
           ++GyroKomp_Int;
-
 
1148
          }
-
 
1149
          else if ((w > 0) && (w >= 180))
-
 
1150
          {
-
 
1151
           --GyroKomp_Int;
-
 
1152
          }
-
 
1153
          else if ((w < 0) && (w >= -180))
-
 
1154
          {
-
 
1155
           --GyroKomp_Int;
-
 
1156
          }
-
 
1157
          else if ((w < 0) && (w < -180))
-
 
1158
          {
-
 
1159
           ++GyroKomp_Int;
-
 
1160
          }
-
 
1161
          if (GyroKomp_Int < 0)  GyroKomp_Int = GyroKomp_Int + 360L;
-
 
1162
          GyroKomp_Int = (GyroKomp_Int%360L) * (long)GIER_GRAD_FAKTOR; // An Magnetkompasswert annaehern
-
 
1163
        }
-
 
1164
   }
-
 
1165
   else //Kompassfehler
-
 
1166
   {
-
 
1167
    magkompass_ok = 0;
-
 
1168
        GyroGier_Comp = 0;
-
 
1169
   }
-
 
1170
   Kompass_Value_Old    =       KompassValue;
-
 
1171
}
-
 
1172
// Salvo End *************************
-
 
1173
 
-
 
1174
// Salvo 6.10.2007 
-
 
1175
        // GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist
-
 
1176
        //GPS Hold Aktiveren wenn Knueppel in Ruhelage sind
-
 
1177
        if ((abs(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) < Parameter_NaviStickThreshold)
-
 
1178
        && (abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < Parameter_NaviStickThreshold) && (gps_alive_cnt > 0))
-
 
1179
        {
-
 
1180
                if ((Parameter_NaviGpsModeControl > 170) && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) //Hoehenschalter und GPS Flag aktiv
-
 
1181
                {      
-
 
1182
                        if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet
-
 
1183
                        else gps_cmd = GPS_CMD_REQ_HOME;
-
 
1184
                        n = GPS_CRTL(gps_cmd);
-
 
1185
                }
-
 
1186
                else if ((Parameter_NaviGpsModeControl < 170) && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) //Hoehenschalter Mittelstellung und GPS Flag aktiv
-
 
1187
                {
-
 
1188
                        if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet
-
 
1189
                        else gps_cmd = GPS_CMD_REQ_HOLD;
-
 
1190
                        n= GPS_CRTL(gps_cmd);
-
 
1191
                }
-
 
1192
                else  // GPS komplett aus
-
 
1193
                {
-
 
1194
                        if (gps_cmd != GPS_CMD_STOP)
-
 
1195
                        {
-
 
1196
                                gps_cmd = GPS_CMD_STOP;
-
 
1197
                                n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden
-
 
1198
                        }
-
 
1199
                }
-
 
1200
        }
-
 
1201
        else
-
 
1202
        {
-
 
1203
                if (gps_cmd != GPS_CMD_STOP)
-
 
1204
                {
-
 
1205
                        gps_cmd = GPS_CMD_STOP;
-
 
1206
                        n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden
-
 
1207
                }
-
 
1208
        }
-
 
1209
        if (gps_state != GPS_CRTL_IDLE) if (TimerWerteausgabe == 12)  LED_J16_OFF; //led im GPS Mode schnell blinken lassen
Line 1005... Line 1210...
1005
 
1210
 
1006
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1211
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1007
//  Gieren
1212
//  Gieren
1008
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1213
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1009
//    if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;};
1214
//    if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;};
1010
    if(abs(StickGier) > 15) // war 35 
1215
    if(abs(StickGier) > 15) // war 35 
1011
     {
-
 
1012
      KompassSignalSchlecht = 1000;
1216
     {
1013
      if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX))
-
 
1014
       {
-
 
1015
         NeueKompassRichtungMerken = 1;
-
 
1016
        };
1217
      if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
1017
     }
1218
     }
1018
    tmp_int  = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo  y = ax + bx²
1219
    tmp_int  = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo  y = ax + bx²
1019
    tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
1220
    tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
1020
    sollGier = tmp_int;
1221
    sollGier = tmp_int;
1021
    Mess_Integral_Gier -= tmp_int;  
1222
    Mess_Integral_Gier -= tmp_int;  
1022
    if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000;  // begrenzen
1223
    if(Mess_Integral_Gier > GIER_INTEGRAL_MAX) Mess_Integral_Gier = GIER_INTEGRAL_MAX;  // begrenzen Salvo 18.10.2008
Line 1023... Line 1224...
1023
    if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
1224
    if(Mess_Integral_Gier <-GIER_INTEGRAL_MAX) Mess_Integral_Gier =-GIER_INTEGRAL_MAX;
1024
 
1225
 
1025
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1226
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1026
//  Kompass
-
 
1027
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
-
 
1028
//DebugOut.Analog[29] = (MaxStickNick + MaxStickRoll);
1227
//  Kompass
1029
 
1228
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1030
    if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
-
 
1031
     {
-
 
1032
       int w,v,r,fehler,korrektur;
-
 
1033
       w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
1229
    if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) && (Kompass_present > 0))
1034
       v = abs(IntegralRoll /512);
-
 
1035
       if(v > w) w = v; // grösste Neigung ermitteln
-
 
1036
       korrektur = w / 8 + 1;
-
 
1037
       fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
-
 
1038
//DebugOut.Analog[25] = KompassSignalSchlecht;
1230
     {
1039
       if(!KompassSignalSchlecht && w < 25)
1231
           if(v > w) w = v; // grösste Neigung ermitteln
1040
        {
1232
 
1041
        GierGyroFehler += fehler;
1233
// Salvo 13.9.2007 Nur wenn Magnetkompass ordentliche Werte liefert
1042
        if(NeueKompassRichtungMerken)    
-
 
1043
         {
1234
                if ((magkompass_ok > 0)  &&  NeueKompassRichtungMerken)  
1044
          beeptime = 200;
-
 
1045
//         KompassStartwert = KompassValue;
1235
        {
1046
          KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR);
-
 
1047
          NeueKompassRichtungMerken = 0;
1236
                 KompassStartwert = KompassValue;
-
 
1237
         NeueKompassRichtungMerken = 0;
1048
         }
1238
        }
-
 
1239
// Salvo 13.9.2007
1049
        }
1240
       w=0;
1050
       ErsatzKompass += (fehler * 8) / korrektur;
1241
// Salvo End
1051
       w = (w * Parameter_KompassWirkung) / 32;           // auf die Wirkung normieren
1242
       w = (w * Parameter_KompassWirkung) / 64;           // auf die Wirkung normieren
1052
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1243
       w = Parameter_KompassWirkung - w;                  // Wirkung ggf drosseln
1053
       if(w >= 0)
-
 
1054
        {
-
 
1055
          if(!KompassSignalSchlecht)
1244
       if(w > 0)
1056
          {
-
 
1057
           v = 64 + ((MaxStickNick + MaxStickRoll)) / 8;  
-
 
1058
           r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180;
1245
        {
1059
//           r = KompassRichtung;
-
 
1060
           v = (r * w) / v;  // nach Kompass ausrichten
-
 
1061
           w = 3 * Parameter_KompassWirkung;
-
 
1062
           if(v > w) v = w; // Begrenzen
-
 
1063
           else
-
 
1064
           if(v < -w) v = -w;
1246
// Salvo Kompasssteuerung **********************        
1065
           Mess_Integral_Gier += v;
-
 
1066
          }
1247
                 if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32;  // nach Kompass ausrichten
1067
          if(KompassSignalSchlecht) KompassSignalSchlecht--;
-
 
1068
        }  
1248
// Salvo End
-
 
1249
        }
1069
        else KompassSignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
1250
     }
Line 1070... Line 1251...
1070
     }
1251
 
1071
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1252
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1072
 
1253
 
1073
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1254
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1074
//  Debugwerte zuordnen
1255
//  Debugwerte zuordnen
1075
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1256
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
-
 
1257
  if(!TimerWerteausgabe--)
-
 
1258
   {
-
 
1259
    TimerWerteausgabe = 24;
-
 
1260
        // Salvo 13.12.2007 Beleuchtung steuern
-
 
1261
        if (!(beeptime & BeepMuster)) LED_J16_FLASH;
Line 1076... Line 1262...
1076
  if(!TimerWerteausgabe--)
1262
        else if (MotorenEin) LED_J16_ON;
1077
   {
1263
        else LED_J16_OFF;
1078
    TimerWerteausgabe = 24;
1264
        // Salvo End
1079
 
1265
 
1080
    DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
1266
    DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
1081
    DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
1267
    DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
1082
    DebugOut.Analog[2] = Mittelwert_AccNick;
1268
    DebugOut.Analog[2] = Mittelwert_AccNick;
-
 
1269
    DebugOut.Analog[3] = Mittelwert_AccRoll;
1083
    DebugOut.Analog[3] = Mittelwert_AccRoll;
1270
    DebugOut.Analog[4] = MesswertGier;
1084
    DebugOut.Analog[4] = MesswertGier;
1271
    DebugOut.Analog[5] = HoehenWert;
1085
    DebugOut.Analog[5] = HoehenWert;
1272
//    DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
1086
    DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
1273
       
-
 
1274
    DebugOut.Analog[8] = KompassValue;
1087
    DebugOut.Analog[8] = KompassValue;
1275
    DebugOut.Analog[9] = UBat;
1088
    DebugOut.Analog[9] = UBat;
1276
    DebugOut.Analog[10] = Mess_Integral_Gier / 128;
1089
    DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR;  
1277
//    DebugOut.Analog[10] = SenderOkay;
1090
    DebugOut.Analog[10] = SenderOkay;
1278
    DebugOut.Analog[11] = GyroKomp_Int / GIER_GRAD_FAKTOR;  
1091
    //DebugOut.Analog[16] = Mittelwert_AccHoch;
1279
    //DebugOut.Analog[16] = Mittelwert_AccHoch;
1092
//    DebugOut.Analog[17] = FromNaviCtrl_Value.Distance;
-
 
1093
//    DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
-
 
1094
    DebugOut.Analog[19] = WinkelOut.CalcState;
-
 
Line 1095... Line 1280...
1095
    DebugOut.Analog[20] = ServoValue;
1280
//    DebugOut.Analog[17] = FromNaviCtrl_Value.Distance;
1096
 
1281
//    DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
-
 
1282
//    DebugOut.Analog[19] = WinkelOut.CalcState;
-
 
1283
//    DebugOut.Analog[20] = ServoValue;
-
 
1284
 
-
 
1285
 
-
 
1286
//    DebugOut.Analog[19] -= DebugOut.Analog[19]/128;
-
 
1287
//    if(DebugOut.Analog[19] > 0) DebugOut.Analog[19]--; else DebugOut.Analog[19]++;
-
 
1288
        DebugOut.Analog[23] = debug_gp_0;
-
 
1289
    DebugOut.Analog[24] = debug_gp_1;
-
 
1290
    DebugOut.Analog[25] = debug_gp_2;
-
 
1291
        DebugOut.Analog[26] = gps_rel_act_position.utm_east; //in 10cm ausgeben
-
 
1292
        DebugOut.Analog[27] = gps_rel_act_position.utm_north;
Line 1097... Line 1293...
1097
    DebugOut.Analog[30] = GPS_Nick;
1293
        DebugOut.Analog[28] = gps_rel_act_position.utm_alt;
1098
    DebugOut.Analog[31] = GPS_Roll;
1294
        DebugOut.Analog[29] = gps_state + (gps_sub_state*10)+(50*gps_cmd);
1099
 
1295
 
1100
 
1296
    DebugOut.Analog[30] = GPS_Nick;
Line 1204... Line 1400...
1204
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1400
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1205
// Gier-Anteil
1401
// Gier-Anteil
1206
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1402
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1207
#define MUL_G  1.0
1403
#define MUL_G  1.0
1208
    GierMischanteil = MesswertGier - sollGier * STICK_GAIN;     // Regler für Gier
1404
    GierMischanteil = MesswertGier - sollGier * STICK_GAIN;     // Regler für Gier
-
 
1405
 
-
 
1406
 
1209
// GierMischanteil = 0;
1407
// GierMischanteil = 0;
1210
#define MIN_GIERGAS  (40*STICK_GAIN)  // unter diesem Gaswert trotzdem Gieren
1408
#define MIN_GIERGAS  (40*STICK_GAIN)  // unter diesem Gaswert trotzdem Gieren
1211
   if(GasMischanteil > MIN_GIERGAS)
1409
   if(GasMischanteil > MIN_GIERGAS)
1212
    {
1410
    {
1213
     if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
1411
     if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
Line 1219... Line 1417...
1219
     if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2);
1417
     if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2);
1220
    }
1418
    }
1221
    tmp_int = MAX_GAS*STICK_GAIN;
1419
    tmp_int = MAX_GAS*STICK_GAIN;
1222
    if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil));
1420
    if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil));
1223
    if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil));
1421
    if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil));
-
 
1422
        DebugOut.Analog[6] = GierMischanteil; //Salvo 19.10.2008
Line 1224... Line 1423...
1224
 
1423
 
1225
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1424
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1226
// Nick-Achse
1425
// Nick-Achse
1227
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                
1426
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++