Subversion Repositories FlightCtrl

Rev

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
}