Rev 466 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 466 | Rev 479 | ||
---|---|---|---|
Line 56... | Line 56... | ||
56 | #include "main.h" |
56 | #include "main.h" |
57 | #include "eeprom.c" |
57 | #include "eeprom.c" |
Line 58... | Line 58... | ||
58 | 58 | ||
59 | unsigned char h,m,s; |
59 | unsigned char h,m,s; |
60 | volatile unsigned int I2CTimeout = 100; |
60 | volatile unsigned int I2CTimeout = 100; |
61 | volatile int MesswertNick,MesswertRoll,MesswertGier; |
61 | int MesswertNick,MesswertRoll,MesswertGier; |
62 | volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
62 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0, StartNeutralRoll = 0, StartNeutralNick = 0; |
63 | volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
- | |
64 | volatile float NeutralAccZ = 0; |
- | |
- | 63 | int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch; |
|
65 | unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
64 | |
66 | volatile long IntegralNick = 0,IntegralNick2 = 0; |
65 | long IntegralNick = 0,IntegralNick2 = 0; |
67 | volatile long IntegralRoll = 0,IntegralRoll2 = 0; |
66 | long IntegralRoll = 0,IntegralRoll2 = 0; |
68 | volatile long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
67 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
69 | volatile long Integral_Gier = 0; |
68 | long Integral_Gier = 0; |
70 | volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
69 | volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
71 | volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
70 | volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
72 | volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
71 | volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
73 | volatile long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
72 | volatile long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
74 | volatile long Mess_Integral_Hoch = 0; |
73 | volatile long Mess_Integral_Hoch = 0; |
75 | int KompassValue = 0; |
74 | int KompassValue = 0; |
76 | int KompassStartwert = 0; |
75 | int KompassStartwert = 0; |
77 | int KompassRichtung = 0; |
76 | int KompassRichtung = 0; |
78 | uint8_t updKompass = 0; |
77 | uint8_t updKompass = 0; |
79 | unsigned char MAX_GAS,MIN_GAS; |
78 | unsigned char MAX_GAS,MIN_GAS; |
80 | unsigned char Notlandung = 0; |
79 | unsigned char Notlandung = 0; |
81 | unsigned char HoehenReglerAktiv = 0; |
80 | unsigned char HoehenReglerAktiv = 0; |
Line 82... | Line 81... | ||
82 | long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
81 | long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
83 | 82 | ||
Line 84... | Line 83... | ||
84 | float GyroFaktor; |
83 | float GyroFaktor; |
85 | float IntegralFaktor; |
84 | float IntegralFaktor; |
86 | 85 | ||
87 | volatile int DiffNick,DiffRoll; |
86 | int DiffNick,DiffRoll; |
88 | int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
87 | int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
89 | volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
88 | volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
Line 114... | Line 113... | ||
114 | unsigned char Parameter_UserParam4 = 0; |
113 | unsigned char Parameter_UserParam4 = 0; |
115 | unsigned char Parameter_ServoNickControl = 100; |
114 | unsigned char Parameter_ServoNickControl = 100; |
116 | unsigned char Parameter_LoopGasLimit = 70; |
115 | unsigned char Parameter_LoopGasLimit = 70; |
117 | unsigned char Parameter_AchsKopplung1 = 0; |
116 | unsigned char Parameter_AchsKopplung1 = 0; |
118 | unsigned char Parameter_AchsGegenKopplung1 = 0; |
117 | unsigned char Parameter_AchsGegenKopplung1 = 0; |
- | 118 | ||
119 | struct mk_param_struct EE_Parameter; |
119 | struct mk_param_struct EE_Parameter; |
- | 120 | struct acc_neutral_struct ee_acc_neutral EEMEM; // Reservierung im EEPROM |
|
- | 121 | struct acc_neutral_struct acc_neutral; |
|
- | 122 | ||
- | 123 | ||
Line 120... | Line 124... | ||
120 | 124 | ||
121 | void Piep(unsigned char Anzahl) |
125 | void Piep(unsigned char Anzahl) |
122 | { |
126 | { |
123 | while(Anzahl--) |
127 | while(Anzahl--) |
Line 127... | Line 131... | ||
127 | Delay_ms(250); |
131 | Delay_ms(250); |
128 | } |
132 | } |
129 | } |
133 | } |
Line 130... | Line 134... | ||
130 | 134 | ||
- | 135 | //############################################################################ |
|
- | 136 | // Neutrallage kalibrieren und fest im EEPROM abspeichern |
|
- | 137 | void calib_acc(void) |
|
- | 138 | //############################################################################ |
|
- | 139 | { |
|
- | 140 | acc_neutral.X = 0; |
|
- | 141 | acc_neutral.Y = 0; |
|
- | 142 | acc_neutral.Z = 0; |
|
- | 143 | CalibrierMittelwert(); |
|
- | 144 | Delay_ms_Mess(100); |
|
- | 145 | CalibrierMittelwert(); |
|
- | 146 | ||
- | 147 | acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
|
- | 148 | acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
|
- | 149 | acc_neutral.Z = Aktuell_az; |
|
- | 150 | ||
- | 151 | eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct)); |
|
- | 152 | } |
|
- | 153 | ||
131 | //############################################################################ |
154 | //############################################################################ |
132 | // Nullwerte ermitteln |
155 | // Nullwerte ermitteln |
133 | void SetNeutral(void) |
156 | void SetNeutral(void) |
134 | //############################################################################ |
157 | //############################################################################ |
135 | { |
158 | { |
136 | NeutralAccX = 0; |
159 | acc_neutral.X = 0; |
137 | NeutralAccY = 0; |
160 | acc_neutral.Y = 0; |
138 | NeutralAccZ = 0; |
161 | acc_neutral.Z = 0; |
139 | AdNeutralNick = 0; |
162 | AdNeutralNick = 0; |
140 | AdNeutralRoll = 0; |
163 | AdNeutralRoll = 0; |
141 | AdNeutralGier = 0; |
164 | AdNeutralGier = 0; |
142 | Parameter_AchsKopplung1 = 0; |
165 | Parameter_AchsKopplung1 = 0; |
Line 152... | Line 175... | ||
152 | AdNeutralNick= AdWertNick; |
175 | AdNeutralNick= AdWertNick; |
153 | AdNeutralRoll= AdWertRoll; |
176 | AdNeutralRoll= AdWertRoll; |
154 | AdNeutralGier= AdWertGier; |
177 | AdNeutralGier= AdWertGier; |
155 | StartNeutralRoll = AdNeutralRoll; |
178 | StartNeutralRoll = AdNeutralRoll; |
156 | StartNeutralNick = AdNeutralNick; |
179 | StartNeutralNick = AdNeutralNick; |
- | 180 | ||
157 | NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
181 | eeprom_read_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct)); |
158 | NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
- | |
159 | NeutralAccZ = Aktuell_az; |
- | |
Line 160... | Line 182... | ||
160 | 182 | ||
161 | Mess_IntegralNick = 0; |
183 | Mess_IntegralNick = 0; |
162 | Mess_IntegralNick2 = 0; |
184 | Mess_IntegralNick2 = 0; |
163 | Mess_IntegralRoll = 0; |
185 | Mess_IntegralRoll = 0; |
Line 190... | Line 212... | ||
190 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
212 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
191 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
213 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
192 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
214 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
193 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
215 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
194 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
216 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
195 | IntegralAccZ += Aktuell_az - 704;//NeutralAccZ; |
217 | IntegralAccZ += Aktuell_az - 704;//acc_neutral.Z; |
196 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
218 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
197 | Mess_Integral_Gier += MesswertGier; |
219 | Mess_Integral_Gier += MesswertGier; |
198 | Mess_Integral_Gier2 += MesswertGier; |
220 | Mess_Integral_Gier2 += MesswertGier; |
199 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
221 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
200 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
222 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |