Subversion Repositories FlightCtrl

Rev

Rev 935 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 935 Rev 936
1
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
// + Konstanten
2
// + Konstanten
3
// + 0-250 -> normale Werte
3
// + 0-250 -> normale Werte
4
// + 251 -> Poti1
4
// + 251 -> Poti1
5
// + 252 -> Poti2
5
// + 252 -> Poti2
6
// + 253 -> Poti3
6
// + 253 -> Poti3
7
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8
 
8
 
9
#ifndef EEMEM
9
#ifndef EEMEM
10
#define EEMEM __attribute__ ((section (".eeprom")))
10
#define EEMEM __attribute__ ((section (".eeprom")))
11
#endif
11
#endif
12
 
12
 
13
 
13
 
14
#include <avr/eeprom.h>
14
#include <avr/eeprom.h>
15
#include <string.h>
15
#include <string.h>
16
#include "eeprom.h"
16
#include "eeprom.h"
17
#include "printf_P.h"
17
#include "printf_P.h"
-
 
18
#include "led.h"
18
 
19
 
19
 
20
 
20
// byte array in eeprom
21
// byte array in eeprom
21
uint8_t EEPromArray[E2END+1] EEMEM;
22
uint8_t EEPromArray[E2END+1] EEMEM;
22
 
23
 
23
paramset_t ParamSet;
24
paramset_t ParamSet;
24
 
25
 
25
 
26
 
26
 
27
 
27
/***************************************************/
28
/***************************************************/
28
/*    Default Values for parameter set 1           */
29
/*    Default Values for parameter set 1           */
29
/***************************************************/
30
/***************************************************/
30
void ParamSet_DefaultSet1(void) // sport
31
void ParamSet_DefaultSet1(void) // sport
31
{
32
{
32
 ParamSet.ChannelAssignment[CH_NICK]  = 1;
33
 ParamSet.ChannelAssignment[CH_NICK]  = 1;
33
 ParamSet.ChannelAssignment[CH_ROLL]  = 2;
34
 ParamSet.ChannelAssignment[CH_ROLL]  = 2;
34
 ParamSet.ChannelAssignment[CH_GAS]   = 3;
35
 ParamSet.ChannelAssignment[CH_GAS]   = 3;
35
 ParamSet.ChannelAssignment[CH_YAW]  = 4;
36
 ParamSet.ChannelAssignment[CH_YAW]  = 4;
36
 ParamSet.ChannelAssignment[CH_POTI1] = 5;
37
 ParamSet.ChannelAssignment[CH_POTI1] = 5;
37
 ParamSet.ChannelAssignment[CH_POTI2] = 6;
38
 ParamSet.ChannelAssignment[CH_POTI2] = 6;
38
 ParamSet.ChannelAssignment[CH_POTI3] = 7;
39
 ParamSet.ChannelAssignment[CH_POTI3] = 7;
39
 ParamSet.ChannelAssignment[CH_POTI4] = 8;
40
 ParamSet.ChannelAssignment[CH_POTI4] = 8;
40
 ParamSet.GlobalConfig = CFG_AXIS_COUPLING_ACTIVE | CFG_COMPASS_ACTIVE | CFG_GPS_ACTIVE;//CFG_HEIGHT_CONTROL | CFG_HEIGHT_SWITCH | CFG_COMPASS_FIX;//0x01;
41
 ParamSet.GlobalConfig = CFG_AXIS_COUPLING_ACTIVE | CFG_COMPASS_ACTIVE | CFG_GPS_ACTIVE;//CFG_HEIGHT_CONTROL | CFG_HEIGHT_SWITCH | CFG_COMPASS_FIX;
41
 ParamSet.Height_MinGas = 30;
42
 ParamSet.Height_MinGas = 30;
42
 ParamSet.MaxHeight     = 251;      // Wert : 0-250   251 -> Poti1
43
 ParamSet.MaxHeight     = 251;      // Wert : 0-250   251 -> Poti1
43
 ParamSet.Height_P      = 10;       // Wert : 0-32
44
 ParamSet.Height_P      = 10;       // Wert : 0-32
44
 ParamSet.Height_D  = 30;       // Wert : 0-250
45
 ParamSet.Height_D  = 30;       // Wert : 0-250
45
 ParamSet.Height_ACC_Effect = 30;  // Wert : 0-250
46
 ParamSet.Height_ACC_Effect = 30;  // Wert : 0-250
46
 ParamSet.Height_Gain = 4;  // Wert : 0-50
47
 ParamSet.Height_Gain = 4;  // Wert : 0-50
47
 ParamSet.Stick_P = 15;         // Wert : 1-24
48
 ParamSet.Stick_P = 15;         // Wert : 1-24
48
 ParamSet.Stick_D = 30;         // Wert : 0-250
49
 ParamSet.Stick_D = 30;         // Wert : 0-250
49
 ParamSet.Yaw_P = 12;             // Wert : 1-20
50
 ParamSet.Yaw_P = 12;             // Wert : 1-20
50
 ParamSet.Gas_Min = 8;            // Wert : 0-32
51
 ParamSet.Gas_Min = 8;            // Wert : 0-32
51
 ParamSet.Gas_Max = 230;           // Wert : 33-250
52
 ParamSet.Gas_Max = 230;           // Wert : 33-250
52
 ParamSet.GyroAccFactor = 30;      // Wert : 1-64
53
 ParamSet.GyroAccFactor = 30;      // Wert : 1-64
53
 ParamSet.CompassYawEffect = 128;    // Wert : 0-250
54
 ParamSet.CompassYawEffect = 128;    // Wert : 0-250
54
 ParamSet.Gyro_P = 80;             // Wert : 0-250
55
 ParamSet.Gyro_P = 80;             // Wert : 0-250
55
 ParamSet.Gyro_I = 150;               // Wert : 0-250
56
 ParamSet.Gyro_I = 150;               // Wert : 0-250
56
 ParamSet.LowVoltageWarning = 94;       // Wert : 0-250
57
 ParamSet.LowVoltageWarning = 94;       // Wert : 0-250
57
 ParamSet.EmergencyGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
58
 ParamSet.EmergencyGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
58
 ParamSet.EmergencyGasDuration = 30;            // Wert : 0-250     // Zeit bis auf EmergencyGas geschaltet wird, wg. Rx-Problemen
59
 ParamSet.EmergencyGasDuration = 30;            // Wert : 0-250     // Zeit bis auf EmergencyGas geschaltet wird, wg. Rx-Problemen
59
 ParamSet.UfoArrangement = 0;         // X oder + Formation
60
 ParamSet.UfoArrangement = 0;         // X oder + Formation
60
 ParamSet.I_Factor = 32;
61
 ParamSet.I_Factor = 32;
61
 ParamSet.UserParam1 = 253;             //zur freien Verwendung
62
 ParamSet.UserParam1 = 0;             //zur freien Verwendung
62
 ParamSet.UserParam2 = 100;             //zur freien Verwendung
63
 ParamSet.UserParam2 = 0;             //zur freien Verwendung
63
 ParamSet.UserParam3 = 90;             //zur freien Verwendung
64
 ParamSet.UserParam3 = 0;             //zur freien Verwendung
64
 ParamSet.UserParam4 = 90;             //zur freien Verwendung
65
 ParamSet.UserParam4 = 0;             //zur freien Verwendung
65
 ParamSet.UserParam5 = 90;             // zur freien Verwendung
66
 ParamSet.UserParam5 = 0;             // zur freien Verwendung
66
 ParamSet.UserParam6 = 90;             // zur freien Verwendung
67
 ParamSet.UserParam6 = 0;             // zur freien Verwendung
67
 ParamSet.UserParam7 = 0;             // zur freien Verwendung
68
 ParamSet.UserParam7 = 0;             // zur freien Verwendung
68
 ParamSet.UserParam8 = 0;             // zur freien Verwendung
69
 ParamSet.UserParam8 = 0;             // zur freien Verwendung
69
 ParamSet.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
70
 ParamSet.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
70
 ParamSet.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
71
 ParamSet.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
71
 ParamSet.ServoNickCompInvert = 0;    // Wert : 0-250     // Richtung Einfluss Gyro/Servo
72
 ParamSet.ServoNickCompInvert = 0;    // Wert : 0-250     // Richtung Einfluss Gyro/Servo
72
 ParamSet.ServoNickMin = 50;          // Wert : 0-250     // Anschlag
73
 ParamSet.ServoNickMin = 50;          // Wert : 0-250     // Anschlag
73
 ParamSet.ServoNickMax = 150;         // Wert : 0-250     // Anschlag
74
 ParamSet.ServoNickMax = 150;         // Wert : 0-250     // Anschlag
74
 ParamSet.ServoNickRefresh = 5;
75
 ParamSet.ServoNickRefresh = 5;
75
 ParamSet.LoopGasLimit = 50;
76
 ParamSet.LoopGasLimit = 50;
76
 ParamSet.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
77
 ParamSet.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
77
 ParamSet.LoopHysteresis = 50;
78
 ParamSet.LoopHysteresis = 50;
78
 ParamSet.LoopConfig = 0;             // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
79
 ParamSet.LoopConfig = 0;             // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
79
 ParamSet.Yaw_PosFeedback = 90;
80
 ParamSet.Yaw_PosFeedback = 90;
80
 ParamSet.Yaw_NegFeedback = 5;
81
 ParamSet.Yaw_NegFeedback = 5;
81
 ParamSet.AngleTurnOverNick = 100;
82
 ParamSet.AngleTurnOverNick = 85;
82
 ParamSet.AngleTurnOverRoll = 100;
83
 ParamSet.AngleTurnOverRoll = 85;
83
 ParamSet.GyroAccTrim = 16;        // 1/k
84
 ParamSet.GyroAccTrim = 16;        // 1/k
84
 ParamSet.DriftComp = 4;
85
 ParamSet.DriftComp = 4;
85
 ParamSet.DynamicStability = 100;
86
 ParamSet.DynamicStability = 100;
-
 
87
 ParamSet.J16Bitmask = 95;
-
 
88
 ParamSet.J17Bitmask = 243;
-
 
89
 ParamSet.J16Timing = 15;
-
 
90
 ParamSet.J17Timing = 15;
-
 
91
 ParamSet.NaviGpsModeControl = 253;
-
 
92
 ParamSet.NaviGpsGain = 100;
-
 
93
 ParamSet.NaviGpsP = 90;
-
 
94
 ParamSet.NaviGpsI = 90;
-
 
95
 ParamSet.NaviGpsD = 90;
-
 
96
 ParamSet.NaviGpsACC = 0;
-
 
97
 ParamSet.NaviGpsMinSat = 6;
-
 
98
 ParamSet.NaviStickThreshold = 8;
86
 memcpy(ParamSet.Name, "Sport\0",6);
99
 memcpy(ParamSet.Name, "Sport\0",6);
87
}
100
}
88
 
101
 
89
 
102
 
90
/***************************************************/
103
/***************************************************/
91
/*    Default Values for parameter set 2           */
104
/*    Default Values for parameter set 2           */
92
/***************************************************/
105
/***************************************************/
93
void ParamSet_DefaultSet2(void) // normal
106
void ParamSet_DefaultSet2(void) // normal
94
{
107
{
95
 ParamSet.ChannelAssignment[CH_NICK]  = 1;
108
 ParamSet.ChannelAssignment[CH_NICK]  = 1;
96
 ParamSet.ChannelAssignment[CH_ROLL]  = 2;
109
 ParamSet.ChannelAssignment[CH_ROLL]  = 2;
97
 ParamSet.ChannelAssignment[CH_GAS]   = 3;
110
 ParamSet.ChannelAssignment[CH_GAS]   = 3;
98
 ParamSet.ChannelAssignment[CH_YAW]  = 4;
111
 ParamSet.ChannelAssignment[CH_YAW]  = 4;
99
 ParamSet.ChannelAssignment[CH_POTI1] = 5;
112
 ParamSet.ChannelAssignment[CH_POTI1] = 5;
100
 ParamSet.ChannelAssignment[CH_POTI2] = 6;
113
 ParamSet.ChannelAssignment[CH_POTI2] = 6;
101
 ParamSet.ChannelAssignment[CH_POTI3] = 7;
114
 ParamSet.ChannelAssignment[CH_POTI3] = 7;
102
 ParamSet.ChannelAssignment[CH_POTI4] = 8;
115
 ParamSet.ChannelAssignment[CH_POTI4] = 8;
103
 ParamSet.GlobalConfig = CFG_AXIS_COUPLING_ACTIVE | CFG_COMPASS_ACTIVE | CFG_GPS_ACTIVE;//CFG_HEIGHT_CONTROL | CFG_HEIGHT_SWITCH | CFG_COMPASS_FIX;//0x01;
116
 ParamSet.GlobalConfig = CFG_AXIS_COUPLING_ACTIVE | CFG_COMPASS_ACTIVE | CFG_GPS_ACTIVE;//CFG_HEIGHT_CONTROL | CFG_HEIGHT_SWITCH | CFG_COMPASS_FIX;
104
 ParamSet.Height_MinGas = 30;
117
 ParamSet.Height_MinGas = 30;
105
 ParamSet.MaxHeight     = 251;         // Wert : 0-250   251 -> Poti1
118
 ParamSet.MaxHeight     = 251;         // Wert : 0-250   251 -> Poti1
106
 ParamSet.Height_P      = 10;          // Wert : 0-32
119
 ParamSet.Height_P      = 10;          // Wert : 0-32
107
 ParamSet.Height_D  = 30;          // Wert : 0-250
120
 ParamSet.Height_D  = 30;          // Wert : 0-250
108
 ParamSet.Height_ACC_Effect = 30;     // Wert : 0-250
121
 ParamSet.Height_ACC_Effect = 30;     // Wert : 0-250
109
 ParamSet.Height_Gain = 3;     // Wert : 0-50
122
 ParamSet.Height_Gain = 3;     // Wert : 0-50
110
 ParamSet.Stick_P = 12;            // Wert : 1-24
123
 ParamSet.Stick_P = 12;            // Wert : 1-24
111
 ParamSet.Stick_D = 16;           // Wert : 0-250
124
 ParamSet.Stick_D = 16;           // Wert : 0-250
112
 ParamSet.Yaw_P = 6;                 // Wert : 1-20
125
 ParamSet.Yaw_P = 6;                 // Wert : 1-20
113
 ParamSet.Gas_Min = 8;               // Wert : 0-32
126
 ParamSet.Gas_Min = 8;               // Wert : 0-32
114
 ParamSet.Gas_Max = 230;              // Wert : 33-250
127
 ParamSet.Gas_Max = 230;              // Wert : 33-250
115
 ParamSet.GyroAccFactor = 30;         // Wert : 1-64
128
 ParamSet.GyroAccFactor = 30;         // Wert : 1-64
116
 ParamSet.CompassYawEffect = 128;        // Wert : 0-250
129
 ParamSet.CompassYawEffect = 128;        // Wert : 0-250
117
 ParamSet.Gyro_P = 80;                // Wert : 0-250
130
 ParamSet.Gyro_P = 80;                // Wert : 0-250
118
 ParamSet.Gyro_I = 120;               // Wert : 0-250
131
 ParamSet.Gyro_I = 120;               // Wert : 0-250
119
 ParamSet.LowVoltageWarning = 94; // Wert : 0-250
132
 ParamSet.LowVoltageWarning = 94; // Wert : 0-250
120
 ParamSet.EmergencyGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
133
 ParamSet.EmergencyGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
121
 ParamSet.EmergencyGasDuration = 30;            // Wert : 0-250     // Zeit bis auf EmergencyGas geschaltet wird, wg. Rx-Problemen
134
 ParamSet.EmergencyGasDuration = 30;            // Wert : 0-250     // Zeit bis auf EmergencyGas geschaltet wird, wg. Rx-Problemen
122
 ParamSet.UfoArrangement = 0;         // X oder + Formation
135
 ParamSet.UfoArrangement = 0;         // X oder + Formation
123
 ParamSet.I_Factor = 32;
136
 ParamSet.I_Factor = 32;
124
 ParamSet.UserParam1 = 253;             // zur freien Verwendung
137
 ParamSet.UserParam1 = 0;             // zur freien Verwendung
125
 ParamSet.UserParam2 = 100;             // zur freien Verwendung
138
 ParamSet.UserParam2 = 0;             // zur freien Verwendung
126
 ParamSet.UserParam3 = 90;             // zur freien Verwendung
139
 ParamSet.UserParam3 = 0;             // zur freien Verwendung
127
 ParamSet.UserParam4 = 90;             // zur freien Verwendung
140
 ParamSet.UserParam4 = 0;             // zur freien Verwendung
128
 ParamSet.UserParam5 = 90;             // zur freien Verwendung
141
 ParamSet.UserParam5 = 0;             // zur freien Verwendung
129
 ParamSet.UserParam6 = 90;             // zur freien Verwendung
142
 ParamSet.UserParam6 = 0;             // zur freien Verwendung
130
 ParamSet.UserParam7 = 0;             // zur freien Verwendung
143
 ParamSet.UserParam7 = 0;             // zur freien Verwendung
131
 ParamSet.UserParam8 = 0;             // zur freien Verwendung
144
 ParamSet.UserParam8 = 0;             // zur freien Verwendung
132
 ParamSet.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
145
 ParamSet.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
133
 ParamSet.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
146
 ParamSet.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
134
 ParamSet.ServoNickCompInvert = 0;    // Wert : 0-250     // Richtung Einfluss Gyro/Servo
147
 ParamSet.ServoNickCompInvert = 0;    // Wert : 0-250     // Richtung Einfluss Gyro/Servo
135
 ParamSet.ServoNickMin = 50;          // Wert : 0-250     // Anschlag
148
 ParamSet.ServoNickMin = 50;          // Wert : 0-250     // Anschlag
136
 ParamSet.ServoNickMax = 150;         // Wert : 0-250     // Anschlag
149
 ParamSet.ServoNickMax = 150;         // Wert : 0-250     // Anschlag
137
 ParamSet.ServoNickRefresh = 5;
150
 ParamSet.ServoNickRefresh = 5;
138
 ParamSet.LoopGasLimit = 50;
151
 ParamSet.LoopGasLimit = 50;
139
 ParamSet.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
152
 ParamSet.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
140
 ParamSet.LoopHysteresis = 50;
153
 ParamSet.LoopHysteresis = 50;
141
 ParamSet.LoopConfig = 0;             // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
154
 ParamSet.LoopConfig = 0;             // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
142
 ParamSet.Yaw_PosFeedback = 90;        // Faktor, mit dem Yaw die Achsen Roll und Nick verkoppelt
155
 ParamSet.Yaw_PosFeedback = 90;        // Faktor, mit dem Yaw die Achsen Roll und Nick verkoppelt
143
 ParamSet.Yaw_NegFeedback = 5;
156
 ParamSet.Yaw_NegFeedback = 5;
144
 ParamSet.AngleTurnOverNick = 100;
157
 ParamSet.AngleTurnOverNick = 85;
145
 ParamSet.AngleTurnOverRoll = 100;
158
 ParamSet.AngleTurnOverRoll = 85;
146
 ParamSet.GyroAccTrim = 32;        // 1/k
159
 ParamSet.GyroAccTrim = 32;        // 1/k
147
 ParamSet.DriftComp = 4;
160
 ParamSet.DriftComp = 4;
148
 ParamSet.DynamicStability = 75;
161
 ParamSet.DynamicStability = 75;
-
 
162
 ParamSet.J16Bitmask = 95;
-
 
163
 ParamSet.J17Bitmask = 243;
-
 
164
 ParamSet.J16Timing = 20;
-
 
165
 ParamSet.J17Timing = 20;
-
 
166
 ParamSet.NaviGpsModeControl = 253;
-
 
167
 ParamSet.NaviGpsGain = 100;
-
 
168
 ParamSet.NaviGpsP = 90;
-
 
169
 ParamSet.NaviGpsI = 90;
-
 
170
 ParamSet.NaviGpsD = 90;
-
 
171
 ParamSet.NaviGpsACC = 0;
-
 
172
 ParamSet.NaviGpsMinSat = 6;
-
 
173
 ParamSet.NaviStickThreshold = 8;
149
 memcpy(ParamSet.Name, "Normal\0", 7);
174
 memcpy(ParamSet.Name, "Normal\0", 7);
150
}
175
}
151
 
176
 
152
 
177
 
153
/***************************************************/
178
/***************************************************/
154
/*    Default Values for parameter set 3           */
179
/*    Default Values for parameter set 3           */
155
/***************************************************/
180
/***************************************************/
156
void ParamSet_DefaultSet3(void) // beginner
181
void ParamSet_DefaultSet3(void) // beginner
157
{
182
{
158
 ParamSet.ChannelAssignment[CH_NICK]  = 1;
183
 ParamSet.ChannelAssignment[CH_NICK]  = 1;
159
 ParamSet.ChannelAssignment[CH_ROLL]  = 2;
184
 ParamSet.ChannelAssignment[CH_ROLL]  = 2;
160
 ParamSet.ChannelAssignment[CH_GAS]   = 3;
185
 ParamSet.ChannelAssignment[CH_GAS]   = 3;
161
 ParamSet.ChannelAssignment[CH_YAW]  = 4;
186
 ParamSet.ChannelAssignment[CH_YAW]  = 4;
162
 ParamSet.ChannelAssignment[CH_POTI1] = 5;
187
 ParamSet.ChannelAssignment[CH_POTI1] = 5;
163
 ParamSet.ChannelAssignment[CH_POTI2] = 6;
188
 ParamSet.ChannelAssignment[CH_POTI2] = 6;
164
 ParamSet.ChannelAssignment[CH_POTI3] = 7;
189
 ParamSet.ChannelAssignment[CH_POTI3] = 7;
165
 ParamSet.ChannelAssignment[CH_POTI4] = 8;
190
 ParamSet.ChannelAssignment[CH_POTI4] = 8;
166
 ParamSet.GlobalConfig = CFG_ROTARY_RATE_LIMITER | CFG_AXIS_COUPLING_ACTIVE | CFG_COMPASS_ACTIVE | CFG_GPS_ACTIVE;//CFG_HEIGHT_CONTROL | CFG_HEIGHT_SWITCH | CFG_COMPASS_FIX;//0x01;
191
 ParamSet.GlobalConfig = CFG_ROTARY_RATE_LIMITER | CFG_AXIS_COUPLING_ACTIVE | CFG_COMPASS_ACTIVE | CFG_GPS_ACTIVE;//CFG_HEIGHT_CONTROL | CFG_HEIGHT_SWITCH | CFG_COMPASS_FIX;
167
 ParamSet.Height_MinGas = 30;
192
 ParamSet.Height_MinGas = 30;
168
 ParamSet.MaxHeight     = 251;         // Wert : 0-250   251 -> Poti1
193
 ParamSet.MaxHeight     = 251;         // Wert : 0-250   251 -> Poti1
169
 ParamSet.Height_P      = 10;          // Wert : 0-32
194
 ParamSet.Height_P      = 10;          // Wert : 0-32
170
 ParamSet.Height_D  = 30;              // Wert : 0-250
195
 ParamSet.Height_D  = 30;              // Wert : 0-250
171
 ParamSet.Height_ACC_Effect = 30;     // Wert : 0-250
196
 ParamSet.Height_ACC_Effect = 30;     // Wert : 0-250
172
 ParamSet.Height_Gain = 3;            // Wert : 0-50
197
 ParamSet.Height_Gain = 3;            // Wert : 0-50
173
 ParamSet.Stick_P = 8;              // Wert : 1-24
198
 ParamSet.Stick_P = 8;              // Wert : 1-24
174
 ParamSet.Stick_D = 16;              // Wert : 0-250
199
 ParamSet.Stick_D = 16;              // Wert : 0-250
175
 ParamSet.Yaw_P  = 6;                // Wert : 1-20
200
 ParamSet.Yaw_P  = 6;                // Wert : 1-20
176
 ParamSet.Gas_Min = 8;               // Wert : 0-32
201
 ParamSet.Gas_Min = 8;               // Wert : 0-32
177
 ParamSet.Gas_Max = 230;              // Wert : 33-250
202
 ParamSet.Gas_Max = 230;              // Wert : 33-250
178
 ParamSet.GyroAccFactor = 30;         // Wert : 1-64
203
 ParamSet.GyroAccFactor = 30;         // Wert : 1-64
179
 ParamSet.CompassYawEffect = 128;       // Wert : 0-250
204
 ParamSet.CompassYawEffect = 128;       // Wert : 0-250
180
 ParamSet.Gyro_P = 100;               // Wert : 0-250
205
 ParamSet.Gyro_P = 100;               // Wert : 0-250
181
 ParamSet.Gyro_I = 120;               // Wert : 0-250
206
 ParamSet.Gyro_I = 120;               // Wert : 0-250
182
 ParamSet.LowVoltageWarning = 94; // Wert : 0-250
207
 ParamSet.LowVoltageWarning = 94; // Wert : 0-250
183
 ParamSet.EmergencyGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
208
 ParamSet.EmergencyGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
184
 ParamSet.EmergencyGasDuration = 20;            // Wert : 0-250     // Zeit bis auf EmergencyGas geschaltet wird, wg. Rx-Problemen
209
 ParamSet.EmergencyGasDuration = 20;            // Wert : 0-250     // Zeit bis auf EmergencyGas geschaltet wird, wg. Rx-Problemen
185
 ParamSet.UfoArrangement = 0;         // X oder + Formation
210
 ParamSet.UfoArrangement = 0;         // X oder + Formation
186
 ParamSet.I_Factor = 16;
211
 ParamSet.I_Factor = 16;
187
 ParamSet.UserParam1 = 253;             // zur freien Verwendung
212
 ParamSet.UserParam1 = 0;             // zur freien Verwendung
188
 ParamSet.UserParam2 = 100;             // zur freien Verwendung
213
 ParamSet.UserParam2 = 0;             // zur freien Verwendung
189
 ParamSet.UserParam3 = 90;             // zur freien Verwendung
214
 ParamSet.UserParam3 = 0;             // zur freien Verwendung
190
 ParamSet.UserParam4 = 90;             // zur freien Verwendung
215
 ParamSet.UserParam4 = 0;             // zur freien Verwendung
191
 ParamSet.UserParam5 = 90;             // zur freien Verwendung
216
 ParamSet.UserParam5 = 0;             // zur freien Verwendung
192
 ParamSet.UserParam6 = 90;             // zur freien Verwendung
217
 ParamSet.UserParam6 = 0;             // zur freien Verwendung
193
 ParamSet.UserParam7 = 0;             // zur freien Verwendung
218
 ParamSet.UserParam7 = 0;             // zur freien Verwendung
194
 ParamSet.UserParam8 = 0;             // zur freien Verwendung
219
 ParamSet.UserParam8 = 0;             // zur freien Verwendung
195
 ParamSet.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
220
 ParamSet.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
196
 ParamSet.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
221
 ParamSet.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
197
 ParamSet.ServoNickCompInvert = 0;    // Wert : 0-250     // Richtung Einfluss Gyro/Servo
222
 ParamSet.ServoNickCompInvert = 0;    // Wert : 0-250     // Richtung Einfluss Gyro/Servo
198
 ParamSet.ServoNickMin = 50;          // Wert : 0-250     // Anschlag
223
 ParamSet.ServoNickMin = 50;          // Wert : 0-250     // Anschlag
199
 ParamSet.ServoNickMax = 150;         // Wert : 0-250     // Anschlag
224
 ParamSet.ServoNickMax = 150;         // Wert : 0-250     // Anschlag
200
 ParamSet.ServoNickRefresh = 5;
225
 ParamSet.ServoNickRefresh = 5;
201
 ParamSet.LoopGasLimit = 50;
226
 ParamSet.LoopGasLimit = 50;
202
 ParamSet.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
227
 ParamSet.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
203
 ParamSet.LoopHysteresis = 50;
228
 ParamSet.LoopHysteresis = 50;
204
 ParamSet.LoopConfig = 0;             // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
229
 ParamSet.LoopConfig = 0;             // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
205
 ParamSet.Yaw_PosFeedback = 90;        // Faktor, mit dem Yaw die Achsen Roll und Nick verkoppelt
230
 ParamSet.Yaw_PosFeedback = 90;        // Faktor, mit dem Yaw die Achsen Roll und Nick verkoppelt
206
 ParamSet.Yaw_NegFeedback = 5;
231
 ParamSet.Yaw_NegFeedback = 5;
207
 ParamSet.AngleTurnOverNick = 100;
232
 ParamSet.AngleTurnOverNick = 85;
208
 ParamSet.AngleTurnOverRoll = 100;
233
 ParamSet.AngleTurnOverRoll = 85;
209
 ParamSet.GyroAccTrim = 32;        // 1/k
234
 ParamSet.GyroAccTrim = 32;        // 1/k
210
 ParamSet.DriftComp = 4;
235
 ParamSet.DriftComp = 4;
211
 ParamSet.DynamicStability = 50;
236
 ParamSet.DynamicStability = 50;
-
 
237
 ParamSet.J16Bitmask = 95;
-
 
238
 ParamSet.J17Bitmask = 243;
-
 
239
 ParamSet.J16Timing = 30;
-
 
240
 ParamSet.J17Timing = 30;
-
 
241
 ParamSet.NaviGpsModeControl = 253;
-
 
242
 ParamSet.NaviGpsGain = 100;
-
 
243
 ParamSet.NaviGpsP = 90;
-
 
244
 ParamSet.NaviGpsI = 90;
-
 
245
 ParamSet.NaviGpsD = 90;
-
 
246
 ParamSet.NaviGpsACC = 0;
-
 
247
 ParamSet.NaviGpsMinSat = 6;
-
 
248
 ParamSet.NaviStickThreshold = 8;
212
 memcpy(ParamSet.Name, "Beginner\0", 9);
249
 memcpy(ParamSet.Name, "Beginner\0", 9);
213
}
250
}
214
 
251
 
215
/***************************************************/
252
/***************************************************/
216
/*       Read Parameter from EEPROM as byte        */
253
/*       Read Parameter from EEPROM as byte        */
217
/***************************************************/
254
/***************************************************/
218
uint8_t GetParamByte(uint8_t param_id)
255
uint8_t GetParamByte(uint8_t param_id)
219
{
256
{
220
        return eeprom_read_byte(&EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id]);
257
        return eeprom_read_byte(&EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id]);
221
}
258
}
222
 
259
 
223
/***************************************************/
260
/***************************************************/
224
/*       Write Parameter to EEPROM as byte         */
261
/*       Write Parameter to EEPROM as byte         */
225
/***************************************************/
262
/***************************************************/
226
void SetParamByte(uint8_t param_id, uint8_t value)
263
void SetParamByte(uint8_t param_id, uint8_t value)
227
{
264
{
228
        eeprom_write_byte(&EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id], value);
265
        eeprom_write_byte(&EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id], value);
229
}
266
}
230
 
267
 
231
/***************************************************/
268
/***************************************************/
232
/*       Read Parameter from EEPROM as word        */
269
/*       Read Parameter from EEPROM as word        */
233
/***************************************************/
270
/***************************************************/
234
uint16_t GetParamWord(uint8_t param_id)
271
uint16_t GetParamWord(uint8_t param_id)
235
{
272
{
236
        return eeprom_read_word((uint16_t *) &EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id]);
273
        return eeprom_read_word((uint16_t *) &EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id]);
237
}
274
}
238
 
275
 
239
/***************************************************/
276
/***************************************************/
240
/*       Write Parameter to EEPROM as word         */
277
/*       Write Parameter to EEPROM as word         */
241
/***************************************************/
278
/***************************************************/
242
void SetParamWord(uint8_t param_id, uint16_t value)
279
void SetParamWord(uint8_t param_id, uint16_t value)
243
{
280
{
244
        eeprom_write_word((uint16_t *) &EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id], value);
281
        eeprom_write_word((uint16_t *) &EEPromArray[EEPROM_ADR_PARAM_BEGIN + param_id], value);
245
}
282
}
246
 
283
 
247
 
284
 
248
/***************************************************/
285
/***************************************************/
249
/*       Read Parameter Set from EEPROM            */
286
/*       Read Parameter Set from EEPROM            */
250
/***************************************************/
287
/***************************************************/
251
// number [0..5]
288
// number [0..5]
252
void ParamSet_ReadFromEEProm(uint8_t setnumber)
289
void ParamSet_ReadFromEEProm(uint8_t setnumber)
253
{
290
{
254
   if (setnumber > 5) setnumber = 5;
291
   if (setnumber > 5) setnumber = 5;
255
   eeprom_read_block((uint8_t *) &ParamSet.ChannelAssignment[0], &EEPromArray[EEPROM_ADR_PARAMSET_BEGIN + PARAMSET_STRUCT_LEN * setnumber], PARAMSET_STRUCT_LEN);
292
   eeprom_read_block((uint8_t *) &ParamSet.ChannelAssignment[0], &EEPromArray[EEPROM_ADR_PARAMSET_BEGIN + PARAMSET_STRUCT_LEN * setnumber], PARAMSET_STRUCT_LEN);
-
 
293
   LED_Init();
256
}
294
}
257
 
295
 
258
/***************************************************/
296
/***************************************************/
259
/*        Write Parameter Set to EEPROM            */
297
/*        Write Parameter Set to EEPROM            */
260
/***************************************************/
298
/***************************************************/
261
// number [0..5]
299
// number [0..5]
262
void ParamSet_WriteToEEProm(uint8_t setnumber)
300
void ParamSet_WriteToEEProm(uint8_t setnumber)
263
{
301
{
264
   if(setnumber > 5) setnumber = 5;
302
   if(setnumber > 5) setnumber = 5;
265
   eeprom_write_block((uint8_t *) &ParamSet.ChannelAssignment[0], &EEPromArray[EEPROM_ADR_PARAMSET_BEGIN + PARAMSET_STRUCT_LEN * setnumber], PARAMSET_STRUCT_LEN);
303
   eeprom_write_block((uint8_t *) &ParamSet.ChannelAssignment[0], &EEPromArray[EEPROM_ADR_PARAMSET_BEGIN + PARAMSET_STRUCT_LEN * setnumber], PARAMSET_STRUCT_LEN);
266
   // set this parameter set to active set
304
   // set this parameter set to active set
267
   eeprom_write_byte(&EEPromArray[PID_ACTIVE_SET], setnumber);
305
   eeprom_write_byte(&EEPromArray[PID_ACTIVE_SET], setnumber);
-
 
306
   LED_Init();
268
}
307
}
269
 
308
 
270
/***************************************************/
309
/***************************************************/
271
/*       Get active parameter set                  */
310
/*       Get active parameter set                  */
272
/***************************************************/
311
/***************************************************/
273
uint8_t GetActiveParamSet(void)
312
uint8_t GetActiveParamSet(void)
274
{
313
{
275
        uint8_t setnumber;
314
        uint8_t setnumber;
276
        setnumber = eeprom_read_byte(&EEPromArray[PID_ACTIVE_SET]);
315
        setnumber = eeprom_read_byte(&EEPromArray[PID_ACTIVE_SET]);
277
        if(setnumber > 5)
316
        if(setnumber > 5)
278
        {
317
        {
279
        setnumber = 2;
318
        setnumber = 2;
280
        eeprom_write_byte(&EEPromArray[PID_ACTIVE_SET], setnumber);
319
        eeprom_write_byte(&EEPromArray[PID_ACTIVE_SET], setnumber);
281
        }
320
        }
282
        return(setnumber);
321
        return(setnumber);
283
}
322
}
284
 
323
 
285
/***************************************************/
324
/***************************************************/
286
/*       Set active parameter set                  */
325
/*       Set active parameter set                  */
287
/***************************************************/
326
/***************************************************/
288
void SetActiveParamSet(uint8_t setnumber)
327
void SetActiveParamSet(uint8_t setnumber)
289
{
328
{
290
        if(setnumber > 5) setnumber = 5;
329
        if(setnumber > 5) setnumber = 5;
291
        eeprom_write_byte(&EEPromArray[PID_ACTIVE_SET], setnumber);
330
        eeprom_write_byte(&EEPromArray[PID_ACTIVE_SET], setnumber);
292
}
331
}
293
 
332
 
294
/***************************************************/
333
/***************************************************/
295
/*       Initialize EEPROM Parameter Sets          */
334
/*       Initialize EEPROM Parameter Sets          */
296
/***************************************************/
335
/***************************************************/
297
void ParamSet_Init(void)
336
void ParamSet_Init(void)
298
{
337
{
299
        // version  check
338
        // version  check
300
        if(eeprom_read_byte(&EEPromArray[PID_VERSION]) != EEPARAM_VERSION)
339
        if(eeprom_read_byte(&EEPromArray[PID_VERSION]) != EEPARAM_VERSION)
301
        {
340
        {
302
                // if version check faild
341
                // if version check faild
303
                printf("\n\rInit. EEPROM: Generating Default-Parameter...");
342
                printf("\n\rInit. EEPROM: Generating Default-Parameter...");
304
                ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
343
                ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
305
                // fill all 5 parameter settings with set 1 except otherwise defined
344
                // fill all 5 parameter settings with set 1 except otherwise defined
306
                for (unsigned char i=0;i<6;i++)
345
                for (unsigned char i=0;i<6;i++)
307
                {
346
                {
308
                if(i==2) ParamSet_DefaultSet2(); // Kamera
347
                if(i==2) ParamSet_DefaultSet2(); // Kamera
309
                if(i==3) ParamSet_DefaultSet3(); // Beginner
348
                if(i==3) ParamSet_DefaultSet3(); // Beginner
310
                if(i>3)  ParamSet_DefaultSet2(); // Kamera
349
                if(i>3)  ParamSet_DefaultSet2(); // Kamera
311
                ParamSet_WriteToEEProm(i);
350
                ParamSet_WriteToEEProm(i);
312
                }
351
                }
313
                // default-Setting is parameter set 3
352
                // default-Setting is parameter set 3
314
                SetParamByte(PID_ACTIVE_SET, 3);
353
                SetParamByte(PID_ACTIVE_SET, 3);
315
                // update version info
354
                // update version info
316
                SetParamByte(PID_VERSION, EEPARAM_VERSION);
355
                SetParamByte(PID_VERSION, EEPARAM_VERSION);
317
        }
356
        }
318
        // read active parameter set to ParamSet stucture
357
        // read active parameter set to ParamSet stucture
319
        ParamSet_ReadFromEEProm(GetParamByte(PID_ACTIVE_SET));
358
        ParamSet_ReadFromEEProm(GetParamByte(PID_ACTIVE_SET));
320
        printf("\n\rUsing Parameter Set %d", GetParamByte(PID_ACTIVE_SET));
359
        printf("\n\rUsing Parameter Set %d", GetParamByte(PID_ACTIVE_SET));
321
}
360
}
322
 
361