/trunk/analog.c |
---|
23,7 → 23,6 |
volatile int VarioMeter = 0; |
volatile unsigned int ZaehlMessungen = 0; |
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0; |
volatile unsigned char AdReady = 1; |
float NeutralAccZ_float; |
//####################################################################################### |
55,9 → 54,9 |
} |
SetParamByte(PID_PRESSURE_OFFSET, off); |
DruckOffsetSetting = off; |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 245)) VersionInfo.HardwareError[0] |= DEFEKT_PRESSURE; |
OCR0A = off; |
Delay_ms_Mess(300); |
} |
void SucheGyroOffset(void) |
64,7 → 63,6 |
{ |
unsigned char i, ready = 0; |
int timeout; |
GyroDefektN = 0; GyroDefektR = 0; GyroDefektG = 0; |
timeout = SetDelay(2000); |
for(i=140; i != 0; i--) |
{ |
74,9 → 72,9 |
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); |
if(AnalogOffsetNick < 10) { GyroDefektN = 1; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { GyroDefektN = 1; AnalogOffsetNick = 245;}; |
if(AnalogOffsetRoll < 10) { GyroDefektR = 1; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { GyroDefektR = 1; AnalogOffsetRoll = 245;}; |
if(AnalogOffsetGier < 10) { GyroDefektG = 1; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { GyroDefektG = 1; AnalogOffsetGier = 245;}; |
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= DEFEKT_G_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= DEFEKT_G_NICK; AnalogOffsetNick = 245;}; |
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= DEFEKT_G_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= DEFEKT_G_ROLL; AnalogOffsetRoll = 245;}; |
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= DEFEKT_G_GIER; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= DEFEKT_G_GIER; AnalogOffsetGier = 245;}; |
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;} |
AdReady = 0; |
ANALOG_ON; |
/trunk/analog.h |
---|
25,7 → 25,6 |
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier; |
extern volatile unsigned char AdReady; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
/trunk/fc.c |
---|
180,6 → 180,10 |
DebugOut.Analog[9] = UBat; |
DebugOut.Analog[10] = SenderOkay; |
DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR; |
DebugOut.Analog[12] = Motor[0].SetPoint; |
DebugOut.Analog[13] = Motor[1].SetPoint; |
DebugOut.Analog[14] = Motor[2].SetPoint; |
DebugOut.Analog[15] = Motor[3].SetPoint; |
DebugOut.Analog[20] = ServoNickValue; |
DebugOut.Analog[22] = Capacity.ActualCurrent; |
DebugOut.Analog[23] = Capacity.UsedCapacity; |
188,6 → 192,7 |
DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
DebugOut.Analog[30] = GPS_Nick; |
DebugOut.Analog[31] = GPS_Roll; |
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe; |
} |
void Piep(unsigned char Anzahl, unsigned int dauer) |
236,7 → 241,7 |
{ |
unsigned char i; |
unsigned int gier_neutral=0, nick_neutral=0, roll_neutral=0; |
VersionInfo.HardwareError[0] = 0; |
HEF4017R_ON; |
NeutralAccX = 0; |
NeutralAccY = 0; |
341,8 → 346,16 |
HEF4017R_ON; |
DDRD |=0x80; // enable J7 -> Servo signal |
} |
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= DEFEKT_G_NICK; }; |
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= DEFEKT_G_ROLL; }; |
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= DEFEKT_G_GIER; }; |
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= DEFEKT_A_NICK; }; |
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= DEFEKT_A_ROLL; }; |
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= DEFEKT_A_Z; }; |
} |
//############################################################################ |
// Bearbeitet die Messwerte |
void Mittelwert(void) |
525,12 → 538,6 |
if(PC_MotortestActive) PC_MotortestActive--; |
} |
else FCFlags |= FCFLAG_MOTOR_RUN; |
DebugOut.Analog[12] = Motor[0].SetPoint; |
DebugOut.Analog[13] = Motor[1].SetPoint; |
DebugOut.Analog[14] = Motor[2].SetPoint; |
DebugOut.Analog[15] = Motor[3].SetPoint; |
//Start I2C Interrupt Mode |
motor_write = 0; |
I2C_Start(TWI_STATE_MOTOR_TX); |
594,6 → 601,7 |
#endif |
CareFree = 1; |
if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0; |
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= DEFEKT_CAREFREE_ERR; else VersionInfo.HardwareError[0] &= ~DEFEKT_CAREFREE_ERR; |
} |
else CareFree = 0; |
602,7 → 610,8 |
beeptime = 15000; |
BeepMuster = 0xA400; |
CareFree = 0; |
} |
} |
if(CareFree) {if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;} |
} |
721,7 → 730,7 |
} |
ServoActive = 0; |
SetNeutral(0); |
calibration_done = 1; |
calibration_done = 1; |
ServoActive = 1; |
DDRD |=0x80; // enable J7 -> Servo signal |
Piep(GetActiveParamSet(),120); |
760,7 → 769,7 |
if(++delay_einschalten > 200) |
{ |
delay_einschalten = 0; |
if(calibration_done) |
if(!VersionInfo.HardwareError[0] && calibration_done) |
{ |
modell_fliegt = 1; |
MotorenEin = 1; |
/trunk/fc.h |
---|
18,6 → 18,21 |
#define FCFLAG_SPI_RX_ERR 0x40 |
#define FCFLAG_I2CERR 0x80 |
#define DEFEKT_G_NICK 0x01 |
#define DEFEKT_G_ROLL 0x02 |
#define DEFEKT_G_GIER 0x04 |
#define DEFEKT_A_NICK 0x08 |
#define DEFEKT_A_ROLL 0x10 |
#define DEFEKT_A_Z 0x20 |
#define DEFEKT_PRESSURE 0x40 |
#define DEFEKT_CAREFREE_ERR 0x80 |
#define DEFEKT_I2C 0x01 |
#define DEFEKT_BL_MISSING 0x02 |
#define DEFEKT_SPI_RX_ERR 0x04 |
#define DEFEKT_PPM_ERR 0x08 |
#define DEFEKT_MIXER_ERR 0x10 |
#define Poti1 Poti[0] |
#define Poti2 Poti[1] |
#define Poti3 Poti[2] |
/trunk/libfc1284.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/libfc644.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/main.c |
---|
58,8 → 58,8 |
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0; |
unsigned int FlugSekunden = 0; |
pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
unsigned char FoundMotors = 0; |
void CalMk3Mag(void) |
{ |
static unsigned char stick = 1; |
187,6 → 187,7 |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
printf("%d",i+1); |
FoundMotors++; |
// if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new) "); |
} |
} |
201,6 → 202,8 |
} |
printf("\n\r==================================="); |
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= DEFEKT_MIXER_ERR; |
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rCalibrating pressure sensor.."); |
221,7 → 224,7 |
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1); |
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1); |
if( (FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF) ) |
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF)) |
{ |
FlugMinuten = 0; |
FlugMinutenGesamt = 0; |
245,6 → 248,7 |
timerPolling = SetDelay(250); |
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active |
DebugOut.Status[0] = 0x01 | 0x02; |
while (1) |
{ |
260,17 → 264,17 |
else MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(SenderOkay) SenderOkay--; |
if(SenderOkay) { SenderOkay--; VersionInfo.HardwareError[1] &= ~DEFEKT_PPM_ERR; } |
else |
{ |
TIMSK1 |= _BV(ICIE1); // enable PPM-Input |
PPM_in[0] = 0; // set RSSI to zero on data timeout |
VersionInfo.HardwareError[1] |= DEFEKT_PPM_ERR; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160; |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!--I2CTimeout || MissingMotor) |
{ |
if(!I2CTimeout) |
279,6 → 283,8 |
I2CTimeout = 5; |
DebugOut.Analog[28]++; // I2C-Error |
FCFlags |= FCFLAG_I2CERR; |
VersionInfo.HardwareError[1] |= DEFEKT_I2C; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
289,7 → 295,10 |
else |
{ |
ROT_OFF; |
if(!beeptime) FCFlags &= ~FCFLAG_I2CERR; |
if(!beeptime) |
{ |
FCFlags &= ~FCFLAG_I2CERR; |
} |
} |
if(!UpdateMotor) |
{ |
299,6 → 308,19 |
{ |
static unsigned char second; |
timer += 20; // 20 ms interval |
if(MissingMotor) |
{ |
VersionInfo.HardwareError[1] |= DEFEKT_BL_MISSING; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
else |
{ |
VersionInfo.HardwareError[1] &= ~DEFEKT_BL_MISSING; |
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status |
} |
if(I2CTimeout > 6) VersionInfo.HardwareError[1] &= ~DEFEKT_I2C; |
if(PcZugriff) PcZugriff--; |
else |
{ |
316,18 → 338,23 |
{ |
NaviDataOkay--; |
FCFlags &= ~FCFLAG_SPI_RX_ERR; |
VersionInfo.HardwareError[1] &= ~DEFEKT_SPI_RX_ERR; |
} |
else |
{ |
if(NC_Version.Compatible && BeepMuster == 0xffff && MotorenEin) |
{ |
beeptime = 15000; |
BeepMuster = 0xA800; |
} |
if(NC_Version.Compatible) |
{ |
FCFlags |= FCFLAG_SPI_RX_ERR; |
VersionInfo.HardwareError[1] |= DEFEKT_SPI_RX_ERR; |
if(BeepMuster == 0xffff && MotorenEin) |
{ |
beeptime = 15000; |
BeepMuster = 0xA800; |
} |
} |
GPS_Nick = 0; |
GPS_Roll = 0; |
//if(!beeptime) |
FCFlags |= FCFLAG_SPI_RX_ERR; |
FromNaviCtrl.CompassValue = -1; |
} |
if(UBat < BattLowVoltageWarning) |
/trunk/main.h |
---|
1,11 → 1,10 |
#ifndef _MAIN_H |
#define _MAIN_H |
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text); |
//#define ACT_S3D_SUMMENSIGNAL |
//#define SWITCH_LEARNS_CAREFREE |
//#define RECEIVER_SPEKTRUM_EXP |
// neue Hardware |
#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;} |
31,8 → 30,8 |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern unsigned char SendVersionToNavi; |
extern unsigned char FoundMotors; |
void LipoDetection(unsigned char print); |
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden; |
/trunk/makefile |
---|
6,7 → 6,7 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 0 |
VERSION_MINOR = 80 |
VERSION_PATCH = 0 |
VERSION_PATCH = 1 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
NC_SPI_COMPATIBLE = 13 # Navi-Kompatibilität |
/trunk/menu.c |
---|
47,9 → 47,15 |
LCD_printfxy(0,0,"+ MikroKopter +"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a'); |
LCD_printfxy(0,2,"Setting:%d %s", GetActiveParamSet(),Mixer.Name); |
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!") |
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0]) |
else |
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d!!",MissingMotor) |
else |
if(VersionInfo.HardwareError[1] & DEFEKT_MIXER_ERR) LCD_printfxy(0,3,"Mixer Error!") |
else |
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1]) |
// else |
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!") |
break; |
case 1: |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
/trunk/spi.c |
---|
247,8 → 247,10 |
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH; |
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE; |
ToNaviCtrl.Param.Byte[4] = PlatinenVersion; |
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0]; |
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1]; |
ToNaviCtrl.Param.Byte[7] = VersionInfo.HardwareError[2]; |
break; |
case SPI_FCCMD_SERVOS: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.ServoNickRefresh; // Parameters for the Servo Control |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.ServoCompInvert; |
295,6 → 297,8 |
NC_Version.Patch = FromNaviCtrl.Param.Byte[2]; |
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3]; |
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4]; |
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5]; |
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08)); |
break; |
case SPI_NCCMD_GPSINFO: |
/trunk/uart.c |
---|
109,7 → 109,7 |
"24 ", |
"25 ", //25 |
"26 ", |
"27 ", |
"Hardware Error ", |
"I2C-Error ", |
"BL Limit ", |
"GPS_Nick ", //30 |
358,6 → 358,7 |
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1); |
MixerTable_WriteToEEProm(); |
tempchar1 = 1; |
VersionInfo.HardwareError[1] &= ~DEFEKT_MIXER_ERR; |
} |
else |
{ |
365,7 → 366,6 |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
break; |
case 'p': // get PPM Channels |
/trunk/uart.h |
---|
25,7 → 25,7 |
extern unsigned char MotorTest[16]; |
struct str_DebugOut |
{ |
unsigned char Digital[2]; |
unsigned char Status[2]; |
signed int Analog[32]; // Debugwerte |
}; |
70,8 → 70,9 |
unsigned char ProtoMajor; |
unsigned char ProtoMinor; |
unsigned char SWPatch; |
unsigned char Reserved[5]; |
unsigned char HardwareError[5]; |
}; |
extern struct str_VersionInfo VersionInfo; |
//#define USART0_BAUD 9600 |
/trunk/version.txt |
---|
378,7 → 378,7 |
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox |
- BL-Timeout beim Start erhöht |
0.80a H. Buss + G.Stobrawa 20.5.2010 |
0.80a H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010 |
- Motoren Starten nicht ohne Kalibrierung |
- Unterstützung der BL2.0-Regler |
- statt 8 nun 10 Bit Auflösung der Lageregekung |
413,4 → 413,6 |
- Neu: GyroStability = 6 |
- GPS-Login-Time auf 2 reduziert |
0.80b H. Buss 23.7.2010 |
- Fehlerdiagnose implementiert |