Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1162 → Rev 1163

/branches/V0.71i_DSL_X_LED/Hex-Files/BootLoader_MEGA644_20MHZ_V0_1.hex
File deleted
/branches/V0.71i_DSL_X_LED/Hex-Files/Flight-Ctrl_MEGA644_V0_71i.hex
File deleted
/branches/V0.71i_DSL_X_LED/Hex-Files/WasIstWas.txt
File deleted
\ No newline at end of file
/branches/V0.71i_DSL_X_LED/fc.c
6,26 → 6,26
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Bin?rfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zul?ssig ist.
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Best?ckung und Verkauf von Platinen oder Baus?tzen,
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder ver?ffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright m?ssen dann beiliegen
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien ver?ffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gew?hr auf Fehlerfreiheit, Vollst?ndigkeit oder Funktion
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir ?bernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachsch?den
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zul?ssig
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
179,25 → 179,25
}
 
AdNeutralNick= AdWertNick;
AdNeutralRoll= AdWertRoll;
AdNeutralGier= AdWertGier;
AdNeutralRoll= AdWertRoll;
AdNeutralGier= AdWertGier;
AdNeutralGierBias = AdWertGier;
StartNeutralRoll = AdNeutralRoll;
StartNeutralNick = AdNeutralNick;
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
{
NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
NeutralAccZ = Aktuell_az;
}
else
{
NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]);
NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]);
NeutralAccY = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1]);
NeutralAccZ = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1]);
}
 
Mess_IntegralNick = 0;
Mess_IntegralNick = 0;
Mess_IntegralNick2 = 0;
Mess_IntegralRoll = 0;
Mess_IntegralRoll2 = 0;
225,7 → 225,7
FromNaviCtrl_Value.Kalman_MaxFusion = 32;
}
 
static inline void LesePotis(void) {
inline void LesePotis(void) {
/* Warum 110? Knüppel geht von -125 bis 125!
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
252,7 → 252,7
 
//############################################################################
// Bearbeitet die Messwerte
void Mittelwert(void)
inline void Mittelwert(void)
//############################################################################
{
static signed long tmpl,tmpl2;
262,7 → 262,7
MesswertNick = (signed int) AdWertNick - AdNeutralNick;
 
//DebugOut.Analog[26] = MesswertNick;
DebugOut.Analog[28] = MesswertRoll;
//DebugOut.Analog[28] = MesswertRoll;
 
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
423,7 → 423,7
 
 
//############################################################################
// Tr?gt ggf. das Poti als Parameter ein
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
441,8 → 441,13
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
/*
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6,0,255);
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5,0,255);
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6,0,255);
*/
CHK_POTI_MM(Parameter_J16Brightness, PARAM_LED_BRIGHTNESS_J16, 0, 250);
CHK_POTI_MM(Parameter_J17Brightness, PARAM_LED_BRIGHTNESS_J17, 0, 250);
 
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7,0,255);
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8,0,255);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
451,9 → 456,7
CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255);
CHK_POTI_MM(Parameter_J16Timing, EE_Parameter.J16Timing, 1, 255);
CHK_POTI_MM(Parameter_J16Brightness, PARAM_LED_BRIGHTNESS_J16, 0, 250);
CHK_POTI_MM(Parameter_J17Timing, EE_Parameter.J17Timing, 1, 255);
CHK_POTI_MM(Parameter_J17Brightness, PARAM_LED_BRIGHTNESS_J17, 0, 250);
 
// CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255);
//CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255);
703,11 → 706,9
*/
if (PARAM_X_FORMATION) {
 
chanRoll = -chanRoll;
 
// Stick-Koordinatensystem um -45° (rechts) drehen
chanNick *= COS45;
chanRoll *= COS45;
chanRoll *= -COS45;
 
int chanNickTemp = (chanNick - chanRoll) / 10000L;
int chanRollTemp = (chanRoll + chanNick) / 10000L;
717,11 → 718,11
 
if (chanNick > MAX_CHAN_VAL)
chanNick = MAX_CHAN_VAL;
if (chanNick < -MAX_CHAN_VAL)
else if (chanNick < -MAX_CHAN_VAL)
chanNick = -MAX_CHAN_VAL;
if (chanRoll > MAX_CHAN_VAL)
chanRoll = MAX_CHAN_VAL;
if (chanRoll < -MAX_CHAN_VAL)
else if (chanRoll < -MAX_CHAN_VAL)
chanRoll = -MAX_CHAN_VAL;
}
 
740,7 → 741,7
StickRoll = stick_roll - GPS_Roll;
 
 
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
 
/* if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) > MaxStickNick)
1181,10 → 1182,12
DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
DebugOut.Analog[19] = WinkelOut.CalcState;
DebugOut.Analog[20] = ServoValue;
/*
DebugOut.Analog[27] = (int)FromNaviCtrl_Value.Kalman_MaxDrift;
DebugOut.Analog[29] = (int)FromNaviCtrl_Value.Kalman_K;
DebugOut.Analog[30] = GPS_Nick;
DebugOut.Analog[31] = GPS_Roll;
*/
 
 
// DebugOut.Analog[19] -= DebugOut.Analog[19]/128;
/branches/V0.71i_DSL_X_LED/led.c
42,9 → 42,12
 
static inline void checkLightsEnabled(void) {
 
// Mit dem Gier-Stick rechts lassen sich bei stehenden Motoren die LED's ein- und mit links ausschalten
if (!MotorenEin) {
if (PARAM_LED_STICK_ENABLED) {
// Die LED's können mit den Motoren ein- ausgeschaltet werden
if (PARAM_LED_ENGINE_ENABLED)
lightsEnabled = MotorenEin;
// Die LED's können mit den Motoren ein- ausgeschaltet werden
else if (PARAM_LED_STICK_ENABLED) {
if (!MotorenEin) {
if (PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ] > 35 - 120
&& PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ] < 120 - 35) {
if (PPM_in[ EE_Parameter.Kanalbelegung[ K_GIER ] ] < -75)
52,14 → 55,10
if (PPM_in[ EE_Parameter.Kanalbelegung[ K_GIER ] ] > 75)
lightsEnabled = 0;
}
} else
lightsEnabled = 1;
}
}
} else
lightsEnabled = 1;
 
// Die LED's können mit den Motoren ein- ausgeschaltet werden
if (PARAM_LED_ENGINE_ENABLED)
lightsEnabled = MotorenEin;
 
lightsOn = lightsEnabled;
}
 
93,13 → 92,10
J16Mask = (J16Mask == 1 ? 0x80 : J16Mask >> 1);
 
J16 = EE_Parameter.J16Bitmask & J16Mask;
 
if (EE_Parameter.J16Bitmask & J16Mask)
J16Brightness = Parameter_J16Brightness / 23;
else
J16Brightness = 0;
}
 
J16Brightness = EE_Parameter.J16Bitmask & J16Mask ? Parameter_J16Brightness / 23 : 0;
 
// J17
if (EE_Parameter.J17Timing > 250 && Parameter_J17Timing > 230)
J17 = EE_Parameter.J17Bitmask & 128;
110,12 → 106,9
J17Mask = (J17Mask == 1 ? 0x80 : J17Mask >> 1);
 
J17 = EE_Parameter.J17Bitmask & J17Mask;
}
 
if (EE_Parameter.J17Bitmask & J17Mask)
J17Brightness = Parameter_J17Brightness / 23;
else
J17Brightness = 0;
}
J17Brightness = EE_Parameter.J17Bitmask & J17Mask ? Parameter_J17Brightness / 23 : 0;
}
 
// delay: 0...9 - BRIGHTNESS/23: 0-Aus...10-Max - Bei Unterspannung volle Leuchtkraft
/branches/V0.71i_DSL_X_LED/main.c
24,7 → 24,7
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// + Die Funktion printf_P() und das Modul rcdsl.c unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
212,14 → 212,14
SucheLuftruckOffset();
while (!CheckDelay(timer));
 
if (PARAM_USE_DSL_RC) {
if (PARAM_USE_DSL_RC)
rcdsl_init();
printf("\n\rUsing DSL...");
} else {
else
rc_sum_init();
printf("\n\rUsing PPM...");
}
printf("\n\rOK\n\r");
 
printf("\n\rUsing %s", (PARAM_USE_DSL_RC ? "DSL" : "PPM"));
 
printf("\n\rOK\n\r");
}
 
SetNeutral();
/branches/V0.71i_DSL_X_LED/makefile
5,7 → 5,7
#-------------------------------------------------------------------
VERSION_MAJOR = 0
VERSION_MINOR = 71
VERSION_PATCH = 8
VERSION_PATCH = 9
 
VERSION_SERIAL_MAJOR = 10 # Serial Protocol
VERSION_SERIAL_MINOR = 0 # Serial Protocol
/branches/V0.71i_DSL_X_LED/version.txt
1,5 → 1,11
Baseline V0.71h
 
V0.71j K. Rheinwald
 
- PWM für J16/17 funktioniert nun auch, wenn J16/17-Timing im Output-Tab auf Poti gesetzt ist
- Bugfix der Immer an/Gier/Motor-Steuerung von J16/17
- Inlining einiger Funktionen
 
V0.71i T. Jachmann / S. Engelke / K. Rheinwald
 
- 50Hz PWM für J16/17 (User Parameter 5 - J16, User Parameter 6 - J17)