Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2234 → Rev 2235

/test_branches/FC2_2/analog.c
322,13 → 322,15
break;
// - neu -------------------------------------------------
case 17:
J17_ON; //Qopter: testweise zur Rechenzeitmessung
HoehenDiff = HoehenWert - HoeheAlt;
vvSum = vvSum - vv + (Aktuell_az - NeutralAccZ)*6 + HoehenDiff*500; // Fusion vert. velocity
vv = vvSum/501;
vvSum = vvSum - vv + (Aktuell_az - NeutralAccZ)*7 + HoehenDiff*500; // Fusion vert. velocity
vv = vvSum/501; // cm/s
HoeheAlt = HoehenWert;
SummenHoehe = SummenHoehe - HoehenWertF + vv + HoehenWert; //Fusion Hoehe
HoehenWertF = SummenHoehe/501; // cm
J17_OFF;
DebugOut.Analog[17] = vv;
SummenHoehe = SummenHoehe - HoehenWertF + vv + HoehenWert;
HoehenWertF = SummenHoehe/501; //Fusion Hoehe
DebugOut.Analog[18] = HoehenWertF;
state = 0;
AdReady = 1;
339,7 → 341,7
tmpLuftdruck = MessLuftdruck - 507 * (long)ExpandBaro; // -507 counts per offset step
Luftdruck -= Luftdruck/16;
Luftdruck += tmpLuftdruck;
HoehenWert = (StartLuftdruck - Luftdruck)/1;
HoehenWert = (StartLuftdruck - Luftdruck)/1; // cm
if(PlatinenVersion > 21) HoehenWert = HoehenWert/3 + AdWertAccHoch/200; //+ compensates disturbance due to acceleration
/* // Qopter: deaktivieren Anfang
if(PlatinenVersion > 21 && NeutralAccZ) MessLuftdruck -= (Aktuell_az - NeutralAccZ)/12;
377,7 → 379,7
}
*/ // Qopter: deaktivieren Ende
kanal = AD_NICK;
DebugOut.Analog[16] = VarioMeter * 8;
//DebugOut.Analog[16] = VarioMeter * 8;
break;
// - neu -------------------------------------------------
 
/test_branches/FC2_2/analog.h
25,6 → 25,7
extern volatile char MessanzahlNick;
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier;
extern volatile unsigned char AdReady;
extern volatile long vv;
 
unsigned int ReadADC(unsigned char adc_input);
void ADC_Init(void);
/test_branches/FC2_2/fc.c
178,6 → 178,7
char VarioCharacter = ' ';
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while
int Variance = 0;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
1044,7 → 1045,7
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Analog[16] = GasIsZeroCnt;
//DebugOut.Analog[16] = GasIsZeroCnt;
//DebugOut.Analog[17] = VarioMeter;
 
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)
1451,10 → 1452,10
ExpandBaro += 1;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(PlatinenVersion > 21)
OCR0A = DruckOffsetSetting - (OPA_OFFSET_STEP/3) * ExpandBaro; // increase offset to shift ADC down
OCR0A = DruckOffsetSetting - (OPA_OFFSET_STEP/3) * ExpandBaro; // decrease offset to shift ADC up
else
#endif
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up
 
beeptime = 300;
BaroExpandActive = 350;
1672,8 → 1673,26
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
HeightDeviation = (int)(tmp_long); // positive when too high
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense
GasReduction = tmp_long;
// ------------------------- D-Part ---------------------------- Qopter: neu
tmp_long = vv;
if(WaypointTrimming) {
Variance = AltitudeSetpointTrimming*2*4; // oder *5, Anpassung nötig?
} else {
Variance = AltitudeSetpointTrimming*4;
}
DebugOut.Analog[16] = Variance;
tmp_long -= (long)Variance;
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN);
GasReduction += tmp_long;
} // EOF no baro range expanding
HCGas -= GasReduction;
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limits gas around hover point
/* Qopter: deaktiviert
// ------------------------- D-Part 1: Vario Meter ----------------------------
tmp_int = VarioMeter / 8;
LIMIT_MIN_MAX(tmp_int, -127, 128);
1696,6 → 1715,7
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_int;
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value
 
// ------------------------ ----------------------------------
HCGas -= GasReduction;
// limit deviation from hoover point within the target region
1723,6 → 1743,7
}
}
}
*/
// strech control output by inverse attitude projection 1/cos
// + 1/cos(angle) ++++++++++++++++++++++++++
tmp_long2 = (int32_t)HCGas;
1739,7 → 1760,8
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas
GasMischanteil = FilterHCGas;
}
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode
// else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode
else GasMischanteil = FilterHCGas;// + (GasMischanteil - HoverGas) / 4; // Qopter: geändert
}
}// EOF height control active
else // HC not active
1761,7 → 1783,8
// this is done only if height contol option is selected in global config and aircraft is flying
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation
// if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(HoverGas); // Qopter: geändert
if(StartTrigger == 1) StartTrigger = 2;
tmp_long2 = (int32_t)GasMischanteil; // take current thrust
tmp_long2 *= CosAttitude; // apply attitude projection
1778,7 → 1801,8
HoverGasFilter += 4L * tmp_long2;
}
else //later
if(abs(VarioMeter) < 100 && abs(HoehenWert - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending)
// if(abs(VarioMeter) < 100 && abs(HoehenWert - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending)
if(abs(vv) < 50 && abs(HoehenWert - SollHoehe) < 256) // Qopter: geändert, Anpassung nötig?
{
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE;
HoverGasFilter += tmp_long2;
/test_branches/FC2_2/jetimenu.c
117,17 → 117,9
void Menu_Temperature(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature);
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature);
if(RequiredMotors <= 4)
{
JetiBox_printfxy(0,1,"Temperatures ");
}
else
if(RequiredMotors <= 6)
{
JetiBox_printfxy(8,1,"\%cC ",0xdf);
}
JetiBox_printfxy(0,0,"P:%3i ", Parameter_Hoehe_P); // Testausgabe HR-Parameter
if(NaviDataOkay) { JetiBox_printfxy(6,0,"v: %2um/s", GPSInfo.Speed);}
JetiBox_printfxy(0,1,"D:%3i h:%3im%c", Parameter_Luftdruck_D, (int16_t)(HoehenWert/100),VarioCharacter);
 
#endif
}
/test_branches/FC2_2/main.c
420,7 → 420,7
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
}
}
LED_Update();
// LED_Update(); //Qopter: Zur Rechenzeitmessung testweise abgeschaltet
Capacity_Update();
} //else DebugOut.Analog[26]++;
}