/trunk/main.c |
---|
209,19 → 209,19 |
else if(FC.Error[0] & FC_ERROR0_ACC_TOP) |
{ |
LED_RED_ON; |
sprintf(ErrorMSG,"ERR: FC Z-ACC"); |
sprintf(ErrorMSG,"ERR:FC Z-ACC"); |
ErrorCode = 15; |
} |
else if(FC.Error[0] & FC_ERROR0_PRESSURE) |
{ |
LED_RED_ON; |
sprintf(ErrorMSG,"ERR: Pressure sensor"); |
sprintf(ErrorMSG,"ERR:Pressure sensor"); |
ErrorCode = 16; |
} |
else if(FC.Error[1] & FC_ERROR1_I2C) |
{ |
LED_RED_ON; |
sprintf(ErrorMSG,"ERR: FC I2C"); |
sprintf(ErrorMSG,"ERR:I2C FC to BL"); |
ErrorCode = 17; |
} |
else if(FC.Error[1] & FC_ERROR1_BL_MISSING) |
395,12 → 395,15 |
UART2_TransmitTxData(); // send answer |
USB_TransmitTxData(); // send answer |
SPI0_UpdateBuffer(); // handle new SPI Data |
// ---------------- Error Check Timing ---------------------------- |
if(CheckDelay(TimerCheckError)) |
{ |
TimerCheckError = SetDelay(1000); |
if(CheckDelay(SPI0_Timeout)) GPS_Navigation(&GPSData, &(ToFlightCtrl.GPSStick)); // process the GPS data even if the FC is not connected |
CheckErrors(); |
if(CheckDelay(SPI0_Timeout) && (DebugUART == UART1)) GPS_Navigation(&GPSData, &(ToFlightCtrl.GPSStick)); // process the GPS data even if the FC is not connected |
if(!CheckDelay(SPI0_Timeout) || (DebugUART == UART1)) CheckErrors(); |
if(FC.StatusFlags & FC_STATUS_FLY) NaviData.FlyingTime++; // we want to count the battery-time |
// else NaviData.FlyingTime = 0; // not the time per flight |
if(SerialLinkOkay) SerialLinkOkay--; |
408,8 → 411,10 |
else NCFlags &= ~NC_FLAG_NOSERIALLINK; |
if(StopNavigation && (Parameter.NaviGpsModeControl >= 50) && (Parameter.GlobalConfig & FC_CFG_GPS_AKTIV)) BeepTime = 1000; |
} |
// ---------------- Logging --------------------------------------- |
Logging_Update(); // could be block some time for at max. 2 seconds, therefore move time critical part of the mainloop into the ISR of timer 1 |
/* |
// test |
if(CheckDelay(ftimer)) |
/trunk/main.h |
---|
14,7 → 14,7 |
#define VERSION_MAJOR 0 |
#define VERSION_MINOR 25 |
#define VERSION_PATCH 4 |
#define VERSION_PATCH 5 |
// 0 = A |
// 1 = B |
// 2 = C |
35,7 → 35,7 |
#define VERSION_SERIAL_MINOR 0 |
#ifndef FOLLOW_ME |
#define FC_SPI_COMPATIBLE 21 |
#define FC_SPI_COMPATIBLE 22 |
#else |
#define FC_SPI_COMPATIBLE 0xFF |
#endif |
104,7 → 104,7 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define CFG_TEACHABLE_CAREFREE 0x40 |
#define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
111,6 → 111,16 |
#define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
#define Poti1 FC.Poti[0] |
#define Poti2 FC.Poti[1] |
#define Poti3 FC.Poti[2] |
#define Poti4 FC.Poti[3] |
#define Poti5 FC.Poti[4] |
#define Poti6 FC.Poti[5] |
#define Poti7 FC.Poti[6] |
#define Poti8 FC.Poti[7] |
extern u16 BeepTime; |
extern u8 NCFlags; |
extern u8 ClearFCStatusFlags; |
117,7 → 127,6 |
void Interrupt_Init(void); |
extern s16 GeoMagDec; |
typedef struct |
{ |
u8 ActiveSetting; |
142,6 → 151,7 |
u8 NaviStickThreshold; |
u8 NaviOperatingRadius; |
u8 NaviWindCorrection; |
u8 NaviAccCompensation; |
u8 NaviSpeedCompensation; |
u8 LowVoltageWarning; |
u8 NaviAngleLimitation; |
159,10 → 169,6 |
s8 StickYaw; |
s8 StickGas; |
u8 Poti[8]; |
u8 Poti5; |
u8 Poti6; |
u8 Poti7; |
u8 Poti8; |
u8 RC_Quality; |
u8 RC_RSSI; |
u8 BAT_Voltage; |
/trunk/menu.c |
---|
244,7 → 244,7 |
LCD_printfxy(0,0,"Stick TS: %3i", Parameter.NaviStickThreshold); |
LCD_printfxy(0,1,"MaxRadius: %3i m", NaviData.OperatingRadius); |
LCD_printfxy(0,2,"WindCorr: %3i", Parameter.NaviWindCorrection); |
LCD_printfxy(0,3,"SpeedComp: %3i", Parameter.NaviSpeedCompensation); |
LCD_printfxy(0,3,"AccComp: %3i", Parameter.NaviSpeedCompensation); |
break; |
case 6: // Navi Params 3 from FC |
LCD_printfxy(0,0,"Angle-Limit: %3i", Parameter.NaviAngleLimitation); |
/trunk/spi_slave.c |
---|
286,8 → 286,8 |
ToFlightCtrl.CompassHeading = Compass_Heading; |
DebugOut.Analog[10] = ToFlightCtrl.CompassHeading; |
if(ToFlightCtrl.CompassHeading >= 0) ToFlightCtrl.CompassHeading = (360 + ToFlightCtrl.CompassHeading + FromFlightCtrl.GyroYaw / 12) % 360; |
ToFlightCtrl.MagVecX = MagVector.X; |
ToFlightCtrl.MagVecY = MagVector.Y; |
// ToFlightCtrl.MagVecX = MagVector.X; |
// ToFlightCtrl.MagVecY = MagVector.Y; |
ToFlightCtrl.MagVecZ = MagVector.Z; |
ToFlightCtrl.NCStatus = 0; |
// cycle spi commands |
408,9 → 408,10 |
{ |
FCCalibActive = 0; |
} |
if(FC.StatusFlags & FC_STATUS_START) if(Compass_Heading != -1) HeadFreeStartAngle = Compass_Heading * 10; else HeadFreeStartAngle = FromFlightCtrl.GyroHeading; |
if(FC.StatusFlags & FC_STATUS_START) |
{ if(Compass_Heading != -1) HeadFreeStartAngle = Compass_Heading * 10; else HeadFreeStartAngle = FromFlightCtrl.GyroHeading; } |
if((Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE)) |
if((Parameter.ExtraConfig & CFG_TEACHABLE_CAREFREE)) |
{ |
if(!(FC.StatusFlags2 & FC_STATUS2_CAREFREE)) // CF ist jetzt ausgeschaltet -> neue Richtung lernen |
{ |
464,7 → 465,7 |
Parameter.NaviStickThreshold = FromFlightCtrl.Param.Byte[7]; |
CHK_POTI_MM(Parameter.NaviOperatingRadius,FromFlightCtrl.Param.Byte[8],0,255); |
CHK_POTI_MM(Parameter.NaviWindCorrection,FromFlightCtrl.Param.Byte[9],0,255); |
CHK_POTI_MM(Parameter.NaviSpeedCompensation,FromFlightCtrl.Param.Byte[10],0,255); |
CHK_POTI_MM(Parameter.NaviAccCompensation,FromFlightCtrl.Param.Byte[10],0,255); |
CHK_POTI_MM(Parameter.NaviAngleLimitation,FromFlightCtrl.Param.Byte[11],0,255); |
break; |
/trunk/spi_slave.h |
---|
62,8 → 62,8 |
u8 Command; |
GPS_Stick_t GPSStick; |
s16 CompassHeading; |
s16 MagVecX; |
s16 MagVecY; |
s16 AccErrorN; // s16 MagVecX; |
s16 AccErrorR; // s16 MagVecY; |
s16 MagVecZ; |
s16 NCStatus; |
u16 BeepTime; |
/trunk/uart1.c |
---|
152,7 → 152,7 |
"16 ",// "Kalman_K ", |
"ACC_Speed_N ", |
"ACC_Speed_E ", |
"Speed_z ",// "GPS ACC ", |
"Speed_z ", |
"20 ",//20 |
"N_Speed ", |
"E_Speed ", |