/trunk/compass.c |
---|
118,6 → 118,9 |
} |
fifo_init(&CompassCalcStateFiFo, CompassCalStateQueue, sizeof(CompassCalStateQueue), NO_ITLine, NO_ITLine); |
if(Compass_Device == COMPASS_MK3MAG) UART_VersionInfo.Flags |= NC_VERSION_FLAG_MK3MAG_PRESENT; else UART_VersionInfo.Flags &= ~NC_VERSION_FLAG_MK3MAG_PRESENT; |
} |
/trunk/main.c |
---|
273,6 → 273,7 |
{ |
sprintf(ErrorMSG,"no GPS communication"); |
UART_VersionInfo.HardwareError[0] |= NC_ERROR0_GPS_RX; |
UART_VersionInfo.Flags &= ~NC_VERSION_FLAG_GPS_PRESENT; |
newErrorCode = 5; |
} |
StopNavigation = 1; |
/trunk/main.h |
---|
13,8 → 13,8 |
//----------------------- |
#define VERSION_MAJOR 0 |
#define VERSION_MINOR 30 |
#define VERSION_PATCH 8 |
#define VERSION_MINOR 31 |
#define VERSION_PATCH 2 |
// 0 = A |
// 1 = B |
// 2 = C |
39,7 → 39,7 |
#define VERSION_SERIAL_MINOR 0 |
#ifndef FOLLOW_ME |
#define FC_SPI_COMPATIBLE 53 |
#define FC_SPI_COMPATIBLE 55 |
#else |
#define FC_SPI_COMPATIBLE 0xFF |
#endif |
175,6 → 175,7 |
u8 ComingHomeAltitude; |
u8 GlobalConfig3; |
u8 NaviOut1Parameter; // Distance between Photo releases |
u8 FromFC_LandingSpeed; |
} __attribute__((packed)) Param_t; |
typedef struct |
193,7 → 194,7 |
u8 Error[5]; |
u8 StatusFlags2; |
u8 FromFC_SpeakHoTT; |
} __attribute__((packed)) FC_t; |
} __attribute__((packed)) FC_t; // from FC |
extern Param_t Parameter; |
/trunk/mk3mag.c |
---|
63,6 → 63,7 |
#include "main.h" |
#include "uart1.h" |
#include "compass.h" |
#include "spi_slave.h" |
#define MK3MAG_SLAVE_ADDRESS 0x50 // i2C slave address |
266,7 → 267,7 |
{ |
static u32 TimerUpdate = 0; |
static s16 x_max,y_max,z_max,x_min,y_min,z_min; |
static u8 last_state; |
static u8 last_state,speak = 0; |
u8 msg[64]; |
u16 MinCaclibration = 500; |
302,16 → 303,22 |
} |
x_max = -30000; y_max = -30000; z_max = -30000; |
x_min = 30000; y_min = 30000; z_min = 30000; |
speak = 1; |
break; |
case 2: |
if(speak) SpeakHoTT = SPEAK_CALIBRATE; speak = 0; |
if(MagVector.X > x_max) { x_max = MagVector.X; BeepTime = 60; } |
else if(MagVector.X < x_min) { x_min = MagVector.X; BeepTime = 20; } |
if(MagVector.Y > y_max) { y_max = MagVector.Y; BeepTime = 60; } |
else if(MagVector.Y < y_min) { y_min = MagVector.Y; BeepTime = 20; } |
break; |
case 3: |
speak = 1; |
break; |
case 4: |
if(speak) SpeakHoTT = SPEAK_CALIBRATE; speak = 0; |
if(MagVector.Z > z_max) { z_max = MagVector.Z; BeepTime = 80; } |
else if(MagVector.Z < z_min) { z_min = MagVector.Z; BeepTime = 80; } |
break; |
321,6 → 328,7 |
{ |
BeepTime = 2500; |
UART1_PutString("\r\n-> Calibration okay <-\n\r"); |
SpeakHoTT = SPEAK_MIKROKOPTER; |
} |
else |
{ |
329,6 → 337,7 |
if((y_max - y_min) < MinCaclibration) UART1_PutString("Y! "); |
if((z_max - z_min) < MinCaclibration) UART1_PutString("Z! "); |
UART1_PutString("\r\n"); |
SpeakHoTT = SPEAK_ERR_CALIBARTION; |
} |
UART1_PutString(msg); |
sprintf(msg, "\r\nX: (%i - %i = %i)\r\n",x_max,x_min,x_max - x_min); |
/trunk/ncmag.c |
---|
65,6 → 65,7 |
#include "eeprom.h" |
#include "mymath.h" |
#include "main.h" |
#include "spi_slave.h" |
u8 NCMAG_Present = 0; |
u8 NCMAG_IsCalibrated = 0; |
333,6 → 334,7 |
void NCMAG_Calibrate(void) |
{ |
u8 msg[64]; |
static u8 speak = 0; |
static s16 Xmin = 0, Xmax = 0, Ymin = 0, Ymax = 0, Zmin = 0, Zmax = 0; |
static s16 X = 0, Y = 0, Z = 0; |
static u8 OldCalState = 0; |
354,6 → 356,7 |
Ymax = -10000; |
Zmin = 10000; |
Zmax = -10000; |
speak = 1; |
break; |
case 2: // 2nd step of calibration |
362,10 → 365,12 |
else if(X > Xmax) { Xmax = X; BeepTime = 20;} |
if(Y < Ymin) { Ymin = Y; BeepTime = 60;} |
else if(Y > Ymax) { Ymax = Y; BeepTime = 60;} |
if(speak) SpeakHoTT = SPEAK_CALIBRATE; speak = 0; |
break; |
case 3: // 3rd step of calibration |
// used to change the orientation of the MK3MAG vertical to the horizontal plane |
speak = 1; |
break; |
case 4: |
372,6 → 377,7 |
// find Min and Max of the Z-Sensor |
if(Z < Zmin) { Zmin = Z; BeepTime = 80;} |
else if(Z > Zmax) { Zmax = Z; BeepTime = 80;} |
if(speak) SpeakHoTT = SPEAK_CALIBRATE; speak = 0; |
break; |
case 5: |
410,9 → 416,11 |
NCMAG_IsCalibrated = NCMag_CalibrationWrite(); |
BeepTime = 2500; |
UART1_PutString("\r\n-> Calibration okay <-\n\r"); |
SpeakHoTT = SPEAK_MIKROKOPTER; |
} |
else |
{ |
SpeakHoTT = SPEAK_ERR_CALIBARTION; |
UART1_PutString("\r\nCalibration FAILED - Values too low: "); |
if(Calibration.MagX.Range < MinCalibration) UART1_PutString("X! "); |
if(Calibration.MagY.Range < MinCalibration) UART1_PutString("Y! "); |
/trunk/spi_slave.c |
---|
371,7 → 371,7 |
ToFlightCtrl.Param.Byte[4] = Version_HW; |
ToFlightCtrl.Param.Byte[5] = DebugOut.StatusGreen; |
ToFlightCtrl.Param.Byte[6] = DebugOut.StatusRed; |
ToFlightCtrl.Param.Byte[7] = ErrorCode; |
ToFlightCtrl.Param.Byte[7] = ErrorCode; // muss in SPI_NCCMD_VERSION bleiben! (siehe oben) |
ToFlightCtrl.Param.Byte[8] = NC_GPS_ModeCharacter; |
ToFlightCtrl.Param.Byte[9] = SerialLinkOkay; |
ToFlightCtrl.Param.Byte[10] = NC_To_FC_Flags; |
400,7 → 400,7 |
ToFlightCtrl.Param.Byte[3] = GPSData.Speed_Ground / 100; // m/s |
ToFlightCtrl.Param.Int[2] = NaviData.HomePositionDeviation.Distance; // dm //4&5 |
ToFlightCtrl.Param.sInt[3] = NaviData.HomePositionDeviation.Bearing; // deg //6&7 |
if(FC_WP_EventChannel > 254) FC_WP_EventChannel = 254; |
if(FC_WP_EventChannel > 254) FC_WP_EventChannel = 254; // Muss in SPI_NCCMD_GPSINFO bleiben! (siehe oben) |
if(FC_WP_EventChannel) LogFC_WP_EventChannel = FC_WP_EventChannel; // to make sure that it will be logged |
ToFlightCtrl.Param.Byte[8] = (s8)(FC_WP_EventChannel - 127); |
FC_WP_EventChannel = 0; // the GPS-Routine will set it again |
566,11 → 566,11 |
Parameter.ComingHomeAltitude = FromFlightCtrl.Param.Byte[10]; |
break; |
case SPI_FCCMD_ACCU: |
case SPI_FCCMD_BL_ACCU: |
FC.BAT_Current = FromFlightCtrl.Param.Int[0]; |
FC.BAT_UsedCapacity = FromFlightCtrl.Param.Int[1]; |
FC.BAT_Voltage = FromFlightCtrl.Param.Byte[4]; |
Parameter.LowVoltageWarning = FromFlightCtrl.Param.Byte[5]; |
Parameter.NaviGpsModeControl = FromFlightCtrl.Param.Byte[5]; |
FromFC_VarioCharacter = FromFlightCtrl.Param.Byte[6]; |
Motor[FromFlightCtrl.Param.Byte[7]].MaxPWM = FromFlightCtrl.Param.Byte[8]; |
Motor[FromFlightCtrl.Param.Byte[7]].State = FromFlightCtrl.Param.Byte[9]; |
585,7 → 585,7 |
NaviData.UsedCapacity = FC.BAT_UsedCapacity; |
break; |
case SPI_FCCMD_PARAMETER1: |
CHK_POTI_MM(Parameter.NaviGpsModeControl,FromFlightCtrl.Param.Byte[0],0,255); |
Parameter.LowVoltageWarning = FromFlightCtrl.Param.Byte[0]; |
CHK_POTI_MM(Parameter.NaviGpsGain,FromFlightCtrl.Param.Byte[1],0,255); |
CHK_POTI_MM(Parameter.NaviGpsP,FromFlightCtrl.Param.Byte[2],0,255); |
CHK_POTI_MM(Parameter.NaviGpsI,FromFlightCtrl.Param.Byte[3],0,255); |
601,6 → 601,7 |
case SPI_FCCMD_PARAMETER2: |
CHK_POTI_MM(Parameter.NaviOut1Parameter,FromFlightCtrl.Param.Byte[0],0,255); |
if(FromFlightCtrl.Param.Byte[1]) FC.FromFC_SpeakHoTT = FromFlightCtrl.Param.Byte[1]; // will be cleared in the SD-Logging |
Parameter.FromFC_LandingSpeed = FromFlightCtrl.Param.Byte[2]; |
break; |
case SPI_FCCMD_STICK: |
FC.StickGas = FromFlightCtrl.Param.sByte[0]; |
636,8 → 637,11 |
CHK_POTI_MM(Parameter.NaviGpsILimit,FromFlightCtrl.Param.Byte[7],0,255); |
CHK_POTI_MM(Parameter.NaviGpsDLimit,FromFlightCtrl.Param.Byte[8],0,255); |
FC.RC_Quality = FromFlightCtrl.Param.Byte[9]; |
FC.RC_RSSI = FromFlightCtrl.Param.Byte[10]; |
if(!FC.RC_RSSI) NaviData.RC_Quality = FC.RC_Quality; else NaviData.RC_Quality = FC.RC_RSSI; |
NaviData.RC_Quality = FC.RC_Quality; |
//FromFlightCtrl.Param.Byte[10]; |
// FC.RC_RSSI = FromFlightCtrl.Param.Byte[10]; |
// if(!FC.RC_RSSI) NaviData.RC_Quality = FC.RC_Quality; else NaviData.RC_Quality = FC.RC_RSSI; |
// NaviData.RC_RSSI = FC.RC_RSSI; |
NaviData.Gas = (FC.BAT_Voltage * (u32) FromFlightCtrl.Param.Byte[11]) / (u32) Parameter.LowVoltageWarning; |
break; |
/trunk/spi_slave.h |
---|
26,7 → 26,7 |
#define SPI_FCCMD_PARAMETER1 13 |
#define SPI_FCCMD_VERSION 14 |
#define SPI_FCCMD_SERVOS 15 |
#define SPI_FCCMD_ACCU 16 |
#define SPI_FCCMD_BL_ACCU 16 |
#define SPI_FCCMD_PARAMETER2 17 |
#define CHK_POTI(b,a) { if(a < 248) b = a; else b = FC.Poti[255 - a]; } |
/trunk/uart1.c |
---|
269,7 → 269,9 |
UART_VersionInfo.SWPatch = VERSION_PATCH; |
UART_VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR; |
UART_VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR; |
UART_VersionInfo.HWMajor = Version_HW; |
UART_VersionInfo.reserved2 = 0; |
UART_VersionInfo.Flags = 0; |
NaviData.Version = NAVIDATA_VERSION; |
UART1_PutString("\r\n UART1 init...ok"); |
/trunk/uart1.h |
---|
21,11 → 21,18 |
u8 ProtoMajor; |
u8 ProtoMinor; |
u8 SWPatch; |
u8 HardwareError[5]; |
u8 HardwareError[2]; |
u8 HWMajor; |
u8 reserved2; |
u8 Flags; |
} __attribute__((packed)) UART_VersionInfo_t; |
extern UART_VersionInfo_t UART_VersionInfo; |
//VersionInfo.Flags |
#define NC_VERSION_FLAG_MK3MAG_PRESENT 0x01 |
#define NC_VERSION_FLAG_GPS_PRESENT 0x02 |
typedef struct |
{ |
s16 AngleNick; // in 0.1 deg |
/trunk/ubx.c |
---|
283,6 → 283,7 |
// if a new set of ubx messages was collected |
if((UbxSol.Status == NEWDATA) && (UbxPosLlh.Status == NEWDATA) && (UbxVelNed.Status == NEWDATA)) |
{ // and the itow is equal (same time base) |
UART_VersionInfo.Flags |= NC_VERSION_FLAG_GPS_PRESENT; |
if((UbxSol.itow == UbxPosLlh.itow) && (UbxPosLlh.itow == UbxVelNed.itow)) |
{ |
UBX_Timeout = SetDelay(UBX_TIMEOUT); |