Subversion Repositories NaviCtrl

Compare Revisions

Ignore whitespace Rev 453 → Rev 454

/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);