Rev 1497 | Rev 1652 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1497 | Rev 1622 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 2 | // + Copyright (c) Holger Buss, Ingo Busker |
|
- | 3 | // + Nur für den privaten Gebrauch |
|
- | 4 | // + porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
|
- | 5 | // + www.MikroKopter.com |
|
- | 6 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 7 | // + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
|
- | 8 | // + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
|
- | 9 | // + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
|
- | 10 | // + bzgl. der Nutzungsbedingungen aufzunehmen. |
|
- | 11 | // + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
|
- | 12 | // + Verkauf von Luftbildaufnahmen, usw. |
|
- | 13 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 14 | // + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
|
- | 15 | // + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
|
- | 16 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 17 | // + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
|
- | 18 | // + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
|
- | 19 | // + eindeutig als Ursprung verlinkt werden |
|
- | 20 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 21 | // + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
|
- | 22 | // + Benutzung auf eigene Gefahr |
|
- | 23 | // + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
|
- | 24 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 25 | // + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
|
- | 26 | // + mit unserer Zustimmung zulässig |
|
- | 27 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 28 | // + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
|
- | 29 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 30 | // + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
|
- | 31 | // + this list of conditions and the following disclaimer. |
|
- | 32 | // + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
|
- | 33 | // + from this software without specific prior written permission. |
|
- | 34 | // + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
|
- | 35 | // + for non-commercial use (directly or indirectly) |
|
- | 36 | // + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
|
- | 37 | // + with our written permission |
|
- | 38 | // + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
|
- | 39 | // + clearly linked as origin |
|
- | 40 | // + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
|
- | 41 | // + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
- | 42 | // + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
- | 43 | // + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
- | 44 | // + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
|
- | 45 | // + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
- | 46 | // + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
- | 47 | // + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
- | 48 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
- | 49 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
- | 50 | // + POSSIBILITY OF SUCH DAMAGE. |
|
- | 51 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 52 | ||
1 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
53 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 | // + Konstanten |
54 | // + Contant Values |
3 | // + 0-247 -> normale Werte |
55 | // + 0-250 -> normale Values |
4 | // + 255 -> Poti1 |
56 | // + 251 -> Poti1 |
5 | // + 254 -> Poti2 |
57 | // + 252 -> Poti2 |
6 | // + 253 -> Poti3 |
58 | // + 253 -> Poti3 |
7 | // + 252 -> Poti4 |
59 | // + 254 -> Poti4 |
8 | // + 251 -> Poti5 |
- | |
9 | // + 247 -> Poti6 |
- | |
10 | // + 249 -> Poti7 |
- | |
11 | // + 248 -> Poti8 |
- | |
12 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
60 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 61 | ||
- | 62 | #ifndef EEMEM |
|
- | 63 | #define EEMEM __attribute__ ((section (".eeprom"))) |
|
- | 64 | #endif |
|
- | 65 | ||
- | 66 | ||
- | 67 | #include <avr/eeprom.h> |
|
- | 68 | #include <string.h> |
|
- | 69 | #include "eeprom.h" |
|
- | 70 | #include "uart.h" |
|
- | 71 | #include "led.h" |
|
- | 72 | #include "main.h" |
|
- | 73 | #include "fc.h" |
|
- | 74 | ||
- | 75 | paramset_t EE_Parameter; |
|
- | 76 | MixerTable_t Mixer; |
|
- | 77 | ||
- | 78 | ||
- | 79 | uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len) |
|
- | 80 | { |
|
- | 81 | uint8_t crc = 0xAA; |
|
- | 82 | uint16_t i; |
|
- | 83 | ||
- | 84 | for(i=0; i<len; i++) |
|
- | 85 | { |
|
- | 86 | crc += pBuffer[i]; |
|
- | 87 | } |
|
- | 88 | return crc; |
|
- | 89 | } |
|
- | 90 | ||
- | 91 | uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len) |
|
- | 92 | { |
|
- | 93 | uint8_t crc = 0xAA; |
|
- | 94 | uint16_t off; |
|
- | 95 | ||
- | 96 | for(off=0; off<len; off++) |
|
- | 97 | { |
|
- | 98 | crc += eeprom_read_byte((uint8_t*)(EEAddr + off));; |
|
- | 99 | } |
|
- | 100 | return crc; |
|
- | 101 | } |
|
- | 102 | ||
13 | void DefaultStickMapping(void) // mode 2 |
103 | void ParamSet_DefaultStickMapping(void) |
14 | { |
104 | { |
15 | EE_Parameter.Kanalbelegung[K_GAS] = 1; |
105 | EE_Parameter.Kanalbelegung[K_GAS] = 1; |
16 | EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
106 | EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
17 | EE_Parameter.Kanalbelegung[K_NICK] = 3; |
107 | EE_Parameter.Kanalbelegung[K_NICK] = 3; |
18 | EE_Parameter.Kanalbelegung[K_GIER] = 4; |
108 | EE_Parameter.Kanalbelegung[K_GIER] = 4; |
Line 24... | Line 114... | ||
24 | EE_Parameter.Kanalbelegung[K_POTI6] = 10; |
114 | EE_Parameter.Kanalbelegung[K_POTI6] = 10; |
25 | EE_Parameter.Kanalbelegung[K_POTI7] = 11; |
115 | EE_Parameter.Kanalbelegung[K_POTI7] = 11; |
26 | EE_Parameter.Kanalbelegung[K_POTI8] = 12; |
116 | EE_Parameter.Kanalbelegung[K_POTI8] = 12; |
27 | } |
117 | } |
Line -... | Line 118... | ||
- | 118 | ||
- | 119 | ||
- | 120 | /***************************************************/ |
|
- | 121 | /* Default Values for parameter set 1 */ |
|
28 | 122 | /***************************************************/ |
|
- | 123 | void ParamSet_DefaultSet1(void) // sport |
|
- | 124 | { |
|
- | 125 | EE_Parameter.Revision = EEPARAM_REVISION; |
|
- | 126 | ||
- | 127 | if(PlatinenVersion >= 20) |
|
- | 128 | { |
|
- | 129 | EE_Parameter.Gyro_D = 5; |
|
- | 130 | EE_Parameter.Driftkomp = 0; |
|
- | 131 | EE_Parameter.GyroAccFaktor = 27; |
|
- | 132 | EE_Parameter.WinkelUmschlagNick = 78; |
|
- | 133 | EE_Parameter.WinkelUmschlagRoll = 78; |
|
- | 134 | } |
|
29 | void DefaultKonstanten1(void) |
135 | else |
- | 136 | { |
|
- | 137 | EE_Parameter.Gyro_D = 3; |
|
- | 138 | EE_Parameter.Driftkomp = 32; |
|
- | 139 | EE_Parameter.GyroAccFaktor = 30; |
|
- | 140 | EE_Parameter.WinkelUmschlagNick = 85; |
|
- | 141 | EE_Parameter.WinkelUmschlagRoll = 85; |
|
30 | { |
142 | } |
31 | EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
143 | EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
32 | EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC |
144 | EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC |
33 | EE_Parameter.Hoehe_MinGas = 30; |
145 | EE_Parameter.Hoehe_MinGas = 30; |
34 | EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1 |
146 | EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1 |
Line 42... | Line 154... | ||
42 | EE_Parameter.Stick_P = 14; // Wert : 1-6 |
154 | EE_Parameter.Stick_P = 14; // Wert : 1-6 |
43 | EE_Parameter.Stick_D = 16; // Wert : 0-64 |
155 | EE_Parameter.Stick_D = 16; // Wert : 0-64 |
44 | EE_Parameter.Gier_P = 12; // Wert : 1-20 |
156 | EE_Parameter.Gier_P = 12; // Wert : 1-20 |
45 | EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
157 | EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
46 | EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
158 | EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
47 | EE_Parameter.GyroAccFaktor = 30; // Wert : 1-64 |
- | |
48 | EE_Parameter.KompassWirkung = 128; // Wert : 0-247 |
159 | EE_Parameter.KompassWirkung = 128; // Wert : 0-247 |
49 | EE_Parameter.Gyro_P = 80; // Wert : 0-247 |
160 | EE_Parameter.Gyro_P = 80; // Wert : 0-247 |
50 | EE_Parameter.Gyro_I = 150; // Wert : 0-247 |
161 | EE_Parameter.Gyro_I = 150; // Wert : 0-247 |
51 | EE_Parameter.Gyro_D = 3; // Wert : 0-247 |
- | |
52 | EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247 |
162 | EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247 |
53 | EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247 |
163 | EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247 |
54 | EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
164 | EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
55 | EE_Parameter.NotGas = 35; // Wert : 0-247 // Gaswert bei Empangsverlust |
165 | EE_Parameter.NotGas = 35; // Wert : 0-247 // Gaswert bei Empangsverlust |
56 | EE_Parameter.NotGasZeit = 30; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
166 | EE_Parameter.NotGasZeit = 30; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
Line 81... | Line 191... | ||
81 | EE_Parameter.LoopHysterese = 50; |
191 | EE_Parameter.LoopHysterese = 50; |
82 | EE_Parameter.BitConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
192 | EE_Parameter.BitConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
83 | EE_Parameter.AchsKopplung1 = 90; |
193 | EE_Parameter.AchsKopplung1 = 90; |
84 | EE_Parameter.AchsKopplung2 = 80; |
194 | EE_Parameter.AchsKopplung2 = 80; |
85 | EE_Parameter.CouplingYawCorrection = 1; |
195 | EE_Parameter.CouplingYawCorrection = 1; |
86 | EE_Parameter.WinkelUmschlagNick = 85; |
- | |
87 | EE_Parameter.WinkelUmschlagRoll = 85; |
- | |
88 | EE_Parameter.GyroAccAbgleich = 16; // 1/k |
196 | EE_Parameter.GyroAccAbgleich = 16; // 1/k; |
89 | EE_Parameter.Driftkomp = 32; |
- | |
90 | EE_Parameter.DynamicStability = 100; |
197 | EE_Parameter.DynamicStability = 100; |
91 | EE_Parameter.J16Bitmask = 95; |
198 | EE_Parameter.J16Bitmask = 95; |
92 | EE_Parameter.J17Bitmask = 243; |
199 | EE_Parameter.J17Bitmask = 243; |
93 | EE_Parameter.WARN_J16_Bitmask = 0xAA; |
200 | EE_Parameter.WARN_J16_Bitmask = 0xAA; |
94 | EE_Parameter.WARN_J17_Bitmask = 0xAA; |
201 | EE_Parameter.WARN_J17_Bitmask = 0xAA; |
Line 110... | Line 217... | ||
110 | EE_Parameter.NaviOperatingRadius = 100; |
217 | EE_Parameter.NaviOperatingRadius = 100; |
111 | EE_Parameter.NaviAngleLimitation = 100; |
218 | EE_Parameter.NaviAngleLimitation = 100; |
112 | EE_Parameter.NaviPH_LoginTime = 4; |
219 | EE_Parameter.NaviPH_LoginTime = 4; |
113 | EE_Parameter.Receiver = RECEIVER_SPEKTRUM; |
220 | EE_Parameter.Receiver = RECEIVER_SPEKTRUM; |
114 | memcpy(EE_Parameter.Name, "Sport\0", 12); |
221 | memcpy(EE_Parameter.Name, "Sport\0", 12); |
- | 222 | EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
|
- | 223 | } |
|
- | 224 | ||
- | 225 | ||
- | 226 | /***************************************************/ |
|
- | 227 | /* Default Values for parameter set 2 */ |
|
- | 228 | /***************************************************/ |
|
- | 229 | void ParamSet_DefaultSet2(void) // normal |
|
- | 230 | { |
|
- | 231 | EE_Parameter.Revision = EEPARAM_REVISION; |
|
- | 232 | ||
- | 233 | if(PlatinenVersion >= 20) |
|
- | 234 | { |
|
- | 235 | EE_Parameter.Gyro_D = 5; |
|
- | 236 | EE_Parameter.Driftkomp = 0; |
|
- | 237 | EE_Parameter.GyroAccFaktor = 27; |
|
- | 238 | EE_Parameter.WinkelUmschlagNick = 78; |
|
- | 239 | EE_Parameter.WinkelUmschlagRoll = 78; |
|
115 | } |
240 | } |
116 | void DefaultKonstanten2(void) |
241 | else |
117 | { |
242 | { |
- | 243 | EE_Parameter.Gyro_D = 3; |
|
- | 244 | EE_Parameter.Driftkomp = 32; |
|
- | 245 | EE_Parameter.GyroAccFaktor = 30; |
|
- | 246 | EE_Parameter.WinkelUmschlagNick = 85; |
|
- | 247 | EE_Parameter.WinkelUmschlagRoll = 85; |
|
- | 248 | } |
|
118 | EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
249 | EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
119 | EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC |
250 | EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC |
120 | EE_Parameter.Hoehe_MinGas = 30; |
251 | EE_Parameter.Hoehe_MinGas = 30; |
121 | EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1 |
252 | EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1 |
122 | EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
253 | EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
Line 129... | Line 260... | ||
129 | EE_Parameter.Stick_P = 10; // Wert : 1-6 |
260 | EE_Parameter.Stick_P = 10; // Wert : 1-6 |
130 | EE_Parameter.Stick_D = 16; // Wert : 0-64 |
261 | EE_Parameter.Stick_D = 16; // Wert : 0-64 |
131 | EE_Parameter.Gier_P = 6; // Wert : 1-20 |
262 | EE_Parameter.Gier_P = 6; // Wert : 1-20 |
132 | EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
263 | EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
133 | EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
264 | EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
134 | EE_Parameter.GyroAccFaktor = 30; // Wert : 1-64 |
- | |
135 | EE_Parameter.KompassWirkung = 128; // Wert : 0-247 |
265 | EE_Parameter.KompassWirkung = 128; // Wert : 0-247 |
136 | EE_Parameter.Gyro_P = 90; // Wert : 0-247 |
266 | EE_Parameter.Gyro_P = 90; // Wert : 0-247 |
137 | EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
267 | EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
138 | EE_Parameter.Gyro_D = 3; // Wert : 0-247 |
- | |
139 | EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247 |
268 | EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247 |
140 | EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
269 | EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
141 | EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
270 | EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
142 | EE_Parameter.NotGas = 35; // Wert : 0-247 // Gaswert bei Empangsverlust |
271 | EE_Parameter.NotGas = 35; // Wert : 0-247 // Gaswert bei Empangsverlust |
143 | EE_Parameter.NotGasZeit = 30; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
272 | EE_Parameter.NotGasZeit = 30; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
Line 168... | Line 297... | ||
168 | EE_Parameter.LoopHysterese = 50; |
297 | EE_Parameter.LoopHysterese = 50; |
169 | EE_Parameter.BitConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
298 | EE_Parameter.BitConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
170 | EE_Parameter.AchsKopplung1 = 90; |
299 | EE_Parameter.AchsKopplung1 = 90; |
171 | EE_Parameter.AchsKopplung2 = 80; |
300 | EE_Parameter.AchsKopplung2 = 80; |
172 | EE_Parameter.CouplingYawCorrection = 60; |
301 | EE_Parameter.CouplingYawCorrection = 60; |
173 | EE_Parameter.WinkelUmschlagNick = 85; |
- | |
174 | EE_Parameter.WinkelUmschlagRoll = 85; |
- | |
175 | EE_Parameter.GyroAccAbgleich = 32; // 1/k |
302 | EE_Parameter.GyroAccAbgleich = 32; // 1/k |
176 | EE_Parameter.Driftkomp = 32; |
- | |
177 | EE_Parameter.DynamicStability = 75; |
303 | EE_Parameter.DynamicStability = 75; |
178 | EE_Parameter.J16Bitmask = 95; |
304 | EE_Parameter.J16Bitmask = 95; |
179 | EE_Parameter.J17Bitmask = 243; |
305 | EE_Parameter.J17Bitmask = 243; |
180 | EE_Parameter.WARN_J16_Bitmask = 0xAA; |
306 | EE_Parameter.WARN_J16_Bitmask = 0xAA; |
181 | EE_Parameter.WARN_J17_Bitmask = 0xAA; |
307 | EE_Parameter.WARN_J17_Bitmask = 0xAA; |
Line 197... | Line 323... | ||
197 | EE_Parameter.NaviOperatingRadius = 100; |
323 | EE_Parameter.NaviOperatingRadius = 100; |
198 | EE_Parameter.NaviAngleLimitation = 100; |
324 | EE_Parameter.NaviAngleLimitation = 100; |
199 | EE_Parameter.NaviPH_LoginTime = 4; |
325 | EE_Parameter.NaviPH_LoginTime = 4; |
200 | EE_Parameter.Receiver = RECEIVER_SPEKTRUM; |
326 | EE_Parameter.Receiver = RECEIVER_SPEKTRUM; |
201 | memcpy(EE_Parameter.Name, "Normal\0", 12); |
327 | memcpy(EE_Parameter.Name, "Normal\0", 12); |
- | 328 | EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
|
202 | } |
329 | } |
Line -... | Line 330... | ||
- | 330 | ||
- | 331 | ||
- | 332 | /***************************************************/ |
|
- | 333 | /* Default Values for parameter set 3 */ |
|
203 | 334 | /***************************************************/ |
|
- | 335 | void ParamSet_DefaultSet3(void) // beginner |
|
- | 336 | { |
|
- | 337 | EE_Parameter.Revision = EEPARAM_REVISION; |
|
204 | void DefaultKonstanten3(void) |
338 | if(PlatinenVersion >= 20) |
- | 339 | { |
|
- | 340 | EE_Parameter.Gyro_D = 5; |
|
- | 341 | EE_Parameter.Driftkomp = 0; |
|
- | 342 | EE_Parameter.GyroAccFaktor = 27; |
|
- | 343 | EE_Parameter.WinkelUmschlagNick = 78; |
|
- | 344 | EE_Parameter.WinkelUmschlagRoll = 78; |
|
- | 345 | } |
|
- | 346 | else |
|
- | 347 | { |
|
- | 348 | EE_Parameter.Gyro_D = 3; |
|
- | 349 | EE_Parameter.Driftkomp = 32; |
|
- | 350 | EE_Parameter.GyroAccFaktor = 30; |
|
- | 351 | EE_Parameter.WinkelUmschlagNick = 85; |
|
- | 352 | EE_Parameter.WinkelUmschlagRoll = 85; |
|
205 | { |
353 | } |
206 | EE_Parameter.GlobalConfig = /*CFG_DREHRATEN_BEGRENZER |*/ CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
354 | EE_Parameter.GlobalConfig = /*CFG_DREHRATEN_BEGRENZER |*/ CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
207 | EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC |
355 | EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC |
208 | EE_Parameter.Hoehe_MinGas = 30; |
356 | EE_Parameter.Hoehe_MinGas = 30; |
209 | EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1 |
357 | EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1 |
Line 217... | Line 365... | ||
217 | EE_Parameter.Stick_P = 8; // Wert : 1-6 |
365 | EE_Parameter.Stick_P = 8; // Wert : 1-6 |
218 | EE_Parameter.Stick_D = 16; // Wert : 0-64 |
366 | EE_Parameter.Stick_D = 16; // Wert : 0-64 |
219 | EE_Parameter.Gier_P = 6; // Wert : 1-20 |
367 | EE_Parameter.Gier_P = 6; // Wert : 1-20 |
220 | EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
368 | EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
221 | EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
369 | EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
222 | EE_Parameter.GyroAccFaktor = 30; // Wert : 1-64 |
- | |
223 | EE_Parameter.KompassWirkung = 128; // Wert : 0-247 |
370 | EE_Parameter.KompassWirkung = 128; // Wert : 0-247 |
224 | EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
371 | EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
225 | EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
372 | EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
226 | EE_Parameter.Gyro_D = 3; // Wert : 0-247 |
- | |
227 | EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
373 | EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
228 | EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
374 | EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
229 | EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
375 | EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
230 | EE_Parameter.NotGas = 35; // Wert : 0-247 // Gaswert bei Empangsverlust |
376 | EE_Parameter.NotGas = 35; // Wert : 0-247 // Gaswert bei Empangsverlust |
231 | EE_Parameter.NotGasZeit = 20; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
377 | EE_Parameter.NotGasZeit = 20; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
Line 256... | Line 402... | ||
256 | EE_Parameter.LoopHysterese = 50; |
402 | EE_Parameter.LoopHysterese = 50; |
257 | EE_Parameter.BitConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
403 | EE_Parameter.BitConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
258 | EE_Parameter.AchsKopplung1 = 90; |
404 | EE_Parameter.AchsKopplung1 = 90; |
259 | EE_Parameter.AchsKopplung2 = 80; |
405 | EE_Parameter.AchsKopplung2 = 80; |
260 | EE_Parameter.CouplingYawCorrection = 70; |
406 | EE_Parameter.CouplingYawCorrection = 70; |
261 | EE_Parameter.WinkelUmschlagNick = 85; |
- | |
262 | EE_Parameter.WinkelUmschlagRoll = 85; |
- | |
263 | EE_Parameter.GyroAccAbgleich = 32; // 1/k |
407 | EE_Parameter.GyroAccAbgleich = 32; // 1/k |
264 | EE_Parameter.Driftkomp = 32; |
- | |
265 | EE_Parameter.DynamicStability = 50; |
408 | EE_Parameter.DynamicStability = 50; |
266 | EE_Parameter.J16Bitmask = 95; |
409 | EE_Parameter.J16Bitmask = 95; |
267 | EE_Parameter.J17Bitmask = 243; |
410 | EE_Parameter.J17Bitmask = 243; |
268 | EE_Parameter.WARN_J16_Bitmask = 0xAA; |
411 | EE_Parameter.WARN_J16_Bitmask = 0xAA; |
269 | EE_Parameter.WARN_J17_Bitmask = 0xAA; |
412 | EE_Parameter.WARN_J17_Bitmask = 0xAA; |
Line 285... | Line 428... | ||
285 | EE_Parameter.NaviOperatingRadius = 100; |
428 | EE_Parameter.NaviOperatingRadius = 100; |
286 | EE_Parameter.NaviAngleLimitation = 100; |
429 | EE_Parameter.NaviAngleLimitation = 100; |
287 | EE_Parameter.NaviPH_LoginTime = 4; |
430 | EE_Parameter.NaviPH_LoginTime = 4; |
288 | EE_Parameter.Receiver = RECEIVER_SPEKTRUM; |
431 | EE_Parameter.Receiver = RECEIVER_SPEKTRUM; |
289 | memcpy(EE_Parameter.Name, "Beginner\0", 12); |
432 | memcpy(EE_Parameter.Name, "Beginner\0", 12); |
- | 433 | EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
|
- | 434 | } |
|
- | 435 | ||
- | 436 | /***************************************************/ |
|
- | 437 | /* Read Parameter from EEPROM as byte */ |
|
- | 438 | /***************************************************/ |
|
- | 439 | uint8_t GetParamByte(uint16_t param_id) |
|
- | 440 | { |
|
- | 441 | return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
|
- | 442 | } |
|
- | 443 | ||
- | 444 | /***************************************************/ |
|
- | 445 | /* Write Parameter to EEPROM as byte */ |
|
- | 446 | /***************************************************/ |
|
- | 447 | void SetParamByte(uint16_t param_id, uint8_t value) |
|
- | 448 | { |
|
- | 449 | eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
|
- | 450 | } |
|
- | 451 | ||
- | 452 | /***************************************************/ |
|
- | 453 | /* Read Parameter from EEPROM as word */ |
|
- | 454 | /***************************************************/ |
|
- | 455 | uint16_t GetParamWord(uint16_t param_id) |
|
- | 456 | { |
|
- | 457 | return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
|
- | 458 | } |
|
- | 459 | ||
- | 460 | /***************************************************/ |
|
- | 461 | /* Write Parameter to EEPROM as word */ |
|
- | 462 | /***************************************************/ |
|
- | 463 | void SetParamWord(uint16_t param_id, uint16_t value) |
|
- | 464 | { |
|
- | 465 | eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
|
- | 466 | } |
|
- | 467 | ||
- | 468 | /***************************************************/ |
|
- | 469 | /* Read Parameter Set from EEPROM */ |
|
- | 470 | /***************************************************/ |
|
- | 471 | // number [1..5] |
|
- | 472 | uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber) |
|
- | 473 | { |
|
- | 474 | uint8_t crc; |
|
- | 475 | uint16_t eeaddr; |
|
- | 476 | ||
- | 477 | // range the setnumber |
|
- | 478 | if((1 > setnumber) || (setnumber > 5)) setnumber = 3; |
|
- | 479 | ||
- | 480 | // calculate eeprom addr |
|
- | 481 | eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1); |
|
- | 482 | ||
- | 483 | // calculate checksum from eeprom |
|
- | 484 | crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1); |
|
- | 485 | ||
- | 486 | // check crc |
|
- | 487 | if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0; |
|
- | 488 | ||
- | 489 | // check revision |
|
- | 490 | if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0; |
|
- | 491 | ||
- | 492 | // read paramset from eeprom |
|
- | 493 | eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
|
- | 494 | LED_Init(); |
|
- | 495 | return 1; |
|
- | 496 | } |
|
- | 497 | ||
- | 498 | /***************************************************/ |
|
- | 499 | /* Write Parameter Set to EEPROM */ |
|
- | 500 | /***************************************************/ |
|
- | 501 | // number [1..5] |
|
- | 502 | uint8_t ParamSet_WriteToEEProm(uint8_t setnumber) |
|
- | 503 | { |
|
- | 504 | uint8_t crc; |
|
- | 505 | ||
- | 506 | if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom |
|
- | 507 | { |
|
- | 508 | if(setnumber > 5) setnumber = 5; |
|
- | 509 | if(setnumber < 1) return 0; |
|
- | 510 | ||
- | 511 | // update checksum |
|
- | 512 | EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
|
- | 513 | ||
- | 514 | // write paramset to eeprom |
|
- | 515 | eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
|
- | 516 | ||
- | 517 | // backup channel settings to separate block in eeprom |
|
- | 518 | eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
|
- | 519 | ||
- | 520 | // write crc of channel block to eeprom |
|
- | 521 | crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung)); |
|
- | 522 | eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc); |
|
- | 523 | ||
- | 524 | // update active settings number |
|
- | 525 | SetActiveParamSet(setnumber); |
|
- | 526 | LED_Init(); |
|
- | 527 | return 1; |
|
- | 528 | } |
|
- | 529 | // wrong revision |
|
- | 530 | return 0; |
|
- | 531 | } |
|
- | 532 | ||
- | 533 | /***************************************************/ |
|
- | 534 | /* Read MixerTable from EEPROM */ |
|
- | 535 | /***************************************************/ |
|
- | 536 | uint8_t MixerTable_ReadFromEEProm(void) |
|
- | 537 | { |
|
- | 538 | uint8_t crc; |
|
- | 539 | ||
- | 540 | // calculate checksum in eeprom |
|
- | 541 | crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1); |
|
- | 542 | ||
- | 543 | // check crc |
|
- | 544 | if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0; |
|
- | 545 | ||
- | 546 | // check revision |
|
- | 547 | if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0; |
|
- | 548 | ||
- | 549 | // read mixer table |
|
- | 550 | eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
|
- | 551 | return 1; |
|
- | 552 | } |
|
- | 553 | ||
- | 554 | /***************************************************/ |
|
- | 555 | /* Write Mixer Table to EEPROM */ |
|
- | 556 | /***************************************************/ |
|
- | 557 | uint8_t MixerTable_WriteToEEProm(void) |
|
- | 558 | { |
|
- | 559 | if(Mixer.Revision == EEMIXER_REVISION) |
|
- | 560 | { |
|
- | 561 | // update crc |
|
- | 562 | Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
|
- | 563 | ||
- | 564 | // write to eeprom |
|
- | 565 | eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
|
- | 566 | return 1; |
|
- | 567 | } |
|
- | 568 | else return 0; |
|
- | 569 | } |
|
- | 570 | ||
- | 571 | /***************************************************/ |
|
- | 572 | /* Default Values for Mixer Table */ |
|
- | 573 | /***************************************************/ |
|
- | 574 | void MixerTable_Default(void) // Quadro |
|
- | 575 | { |
|
- | 576 | uint8_t i; |
|
- | 577 | ||
- | 578 | Mixer.Revision = EEMIXER_REVISION; |
|
- | 579 | // clear mixer table |
|
- | 580 | for(i = 0; i < 16; i++) |
|
- | 581 | { |
|
- | 582 | Mixer.Motor[i][MIX_GAS] = 0; |
|
- | 583 | Mixer.Motor[i][MIX_NICK] = 0; |
|
- | 584 | Mixer.Motor[i][MIX_ROLL] = 0; |
|
- | 585 | Mixer.Motor[i][MIX_YAW] = 0; |
|
- | 586 | } |
|
- | 587 | // default = Quadro |
|
- | 588 | Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64; |
|
- | 589 | Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64; |
|
- | 590 | Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64; |
|
- | 591 | Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64; |
|
- | 592 | memcpy(Mixer.Name, "Quadro\0", 7); |
|
- | 593 | Mixer.crc = Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
|
- | 594 | } |
|
- | 595 | ||
- | 596 | ||
- | 597 | /***************************************************/ |
|
- | 598 | /* Get active parameter set */ |
|
- | 599 | /***************************************************/ |
|
- | 600 | uint8_t GetActiveParamSet(void) |
|
- | 601 | { |
|
- | 602 | uint8_t setnumber; |
|
- | 603 | setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET)); |
|
- | 604 | if(setnumber > 5) |
|
- | 605 | { |
|
- | 606 | setnumber = 3; |
|
- | 607 | eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber); |
|
- | 608 | } |
|
- | 609 | return(setnumber); |
|
- | 610 | } |
|
- | 611 | ||
- | 612 | /***************************************************/ |
|
- | 613 | /* Set active parameter set */ |
|
- | 614 | /***************************************************/ |
|
- | 615 | void SetActiveParamSet(uint8_t setnumber) |
|
- | 616 | { |
|
- | 617 | if(setnumber > 5) setnumber = 5; |
|
- | 618 | if(setnumber < 1) setnumber = 1; |
|
- | 619 | eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber); |
|
- | 620 | } |
|
- | 621 | ||
- | 622 | /***************************************************/ |
|
- | 623 | /* Initialize EEPROM Parameter Sets */ |
|
- | 624 | /***************************************************/ |
|
- | 625 | void ParamSet_Init(void) |
|
- | 626 | { |
|
- | 627 | uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i; |
|
- | 628 | ||
- | 629 | ||
- | 630 | if(EEPARAM_REVISION != GetParamByte(PID_EE_REVISION) ) |
|
- | 631 | { |
|
- | 632 | ee_default = 1; // software update or forced by mktool |
|
- | 633 | SetParamByte(PID_EE_REVISION, EEPARAM_REVISION); |
|
- | 634 | } |
|
- | 635 | ||
- | 636 | ||
- | 637 | // 1st check for a valid channel backup in eeprom |
|
- | 638 | i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
|
- | 639 | if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) channel_backup = 1; |
|
- | 640 | ||
- | 641 | ||
- | 642 | // parameter check |
|
- | 643 | ||
- | 644 | // check all 5 parameter settings |
|
- | 645 | for (i = 1;i < 6; i++) |
|
- | 646 | { |
|
- | 647 | if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom |
|
- | 648 | { |
|
- | 649 | bad_params = 1; |
|
- | 650 | printf("\n\rGenerating default Parameter Set %d",i); |
|
- | 651 | switch(i) |
|
- | 652 | { |
|
- | 653 | case 1: |
|
- | 654 | ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
|
- | 655 | break; |
|
- | 656 | case 2: |
|
- | 657 | ParamSet_DefaultSet2(); // Kamera |
|
- | 658 | break; |
|
- | 659 | case 3: |
|
- | 660 | ParamSet_DefaultSet3(); // Beginner |
|
- | 661 | break; |
|
- | 662 | default: |
|
- | 663 | ParamSet_DefaultSet2(); // Kamera |
|
- | 664 | break; |
|
- | 665 | } |
|
- | 666 | if(channel_backup) // if we have an channel mapping backup in eeprom |
|
- | 667 | { // restore it from eeprom |
|
- | 668 | eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
|
- | 669 | } |
|
- | 670 | else |
|
- | 671 | { // use default mapping |
|
- | 672 | ParamSet_DefaultStickMapping(); |
|
- | 673 | } |
|
- | 674 | ParamSet_WriteToEEProm(i); |
|
- | 675 | } |
|
- | 676 | } |
|
- | 677 | if(bad_params) // at least one of the parameter settings were invalid |
|
- | 678 | { |
|
- | 679 | // default-Setting is parameter set 3 |
|
- | 680 | SetActiveParamSet(3); |
|
- | 681 | } |
|
- | 682 | ||
- | 683 | ||
- | 684 | // read active parameter set to ParamSet stucture |
|
- | 685 | i = GetActiveParamSet(); |
|
- | 686 | ParamSet_ReadFromEEProm(i); |
|
- | 687 | printf("\n\rUsing Parameter Set %d", i); |
|
- | 688 | ||
- | 689 | // load mixer table |
|
- | 690 | if(ee_default || !MixerTable_ReadFromEEProm() ) |
|
- | 691 | { |
|
- | 692 | printf("\n\rGenerating default Mixer Table"); |
|
- | 693 | MixerTable_Default(); // Quadro |
|
- | 694 | MixerTable_WriteToEEProm(); |
|
- | 695 | } |
|
- | 696 | // determine motornumber |
|
- | 697 | RequiredMotors = 0; |
|
- | 698 | for(i = 0; i < 16; i++) |
|
- | 699 | { |
|
- | 700 | if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++; |
|
- | 701 | } |
|
- | 702 | ||
- | 703 | printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors); |
|
- | 704 | printf("\n\r=============================="); |
|
290 | } |
705 | } |