/test_branches/FC2_2/analog.c |
---|
328,7 → 328,6 |
case 17: |
HoehenDiff = HoehenWert - HoeheAlt; |
// vvSum = vvSum - vv + ((Aktuell_az - NeutralAccZ) - AccShorter)*7 + HoehenDiff*500; // Fusion vert. velocity |
J17_ON; //Qopter: testweise zur Rechenzeitmessung |
if(Parameter_UserParam1 > 50) |
{ |
AccVertical = (long)(AdWertAccHoch + 172)*CosAttitude/8192 - 172; |
338,7 → 337,6 |
{ |
vvSum = vvSum - vv + AdWertAccHoch*13 + HoehenDiff*500; // Fusion vert. velocity, T=2s |
} |
J17_OFF; |
// AltLoss = HoehenWertF - HoehenWert; |
// if((AltLoss > 50) && (Parameter_UserParam1 > 50)) vvSum -= AltLoss*2; // avoids height loss |
vv = (vvSum + 512)/1024; // cm/s |
/test_branches/FC2_2/eeprom.c |
---|
139,7 → 139,7 |
EE_Parameter.BitConfig = 0; // Looping usw. |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP; |
EE_Parameter.GlobalConfig3 = 0;//CFG3_VARIO_FAILSAFE; |
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL;//CFG3_VARIO_FAILSAFE; |
EE_Parameter.Receiver = RECEIVER_HOTT; |
EE_Parameter.MotorSafetySwitch = 0; |
EE_Parameter.ExternalControl = 0; |
/test_branches/FC2_2/eeprom.h |
---|
49,6 → 49,7 |
#define CFG3_MOTOR_SWITCH_MODE 0x08 |
#define CFG3_NO_GPSFIX_NO_START 0x10 |
#define CFG3_USE_NC_FOR_OUT1 0x20 |
#define CFG3_SPEAK_ALL 0x40 |
//GlobalConfig |
#define CFG_HOEHENREGELUNG 0x01 |
/test_branches/FC2_2/fc.c |
---|
224,13 → 224,22 |
void Piep(unsigned char Anzahl, unsigned int dauer) |
{ |
unsigned int wait = 0; |
if(MotorenEin) return; //auf keinen Fall im Flug! |
GRN_OFF; |
while(Anzahl--) |
{ |
beeptime = dauer; |
while(beeptime); |
Delay_ms(dauer * 2); |
wait = dauer; |
while(beeptime || wait) |
{ |
if(UpdateMotor) |
{ |
UpdateMotor = 0; |
if(!beeptime) wait--; |
LIBFC_Polling(); |
}; |
} |
} |
GRN_ON; |
} |
376,8 → 385,9 |
} |
else |
{ |
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4 |
else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
// if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4 |
// else |
NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
} |
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
781,9 → 791,6 |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
delay_neutral = 0; |
modell_fliegt = 0; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
816,6 → 823,9 |
CalibrationDone = 1; |
ServoActive = 1; |
DDRD |=0x80; // enable J7 -> Servo signal |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
Piep(GetActiveParamSet(),120); |
} |
} |
830,6 → 840,9 |
modell_fliegt = 0; |
SetNeutral(1); |
CalibrationDone = 1; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
Piep(GetActiveParamSet(),120); |
} |
} |
/test_branches/FC2_2/hottmenu.c |
---|
203,22 → 203,22 |
static char old_status = 0; |
static int repeat; |
//if(Parameter_UserParam1) return(Parameter_UserParam1); |
//DebugOut.Analog[16] = 0; |
ToNC_SpeakHoTT = SpeakHoTT; |
if(FC_StatusFlags & FC_STATUS_LOWBAT) status = VOICE_MINIMALE_EINGANSSPANNUNG; |
else |
if(NC_ErrorCode) |
if(NC_ErrorCode) // Fehlercodes |
{ |
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]); |
} |
if(!status) |
if(!status) // Sprachansagen |
{ |
if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted? |
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted? |
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted? |
else status = SpeakHoTT; |
} |
else ToNC_SpeakHoTT = status; |
if(old_status == status) |
if(old_status == status) // Gleichen Fehler nur alle 5 sek bringen |
{ |
if(!CheckDelay(repeat)) return(0); |
repeat = SetDelay(5000); |
765,9 → 765,9 |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);} |
// else |
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
774,7 → 774,7 |
default: line = 0; |
break; |
} |
else |
/* else |
if(page == 3) |
switch(line++) |
{ |
782,7 → 782,8 |
HoTT_printfxy(0,2,"Speak:"); |
break; |
case 1: |
if(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01) HoTT_printfxy_INV(7,2,"All Messages ") |
// if(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01) |
if(!(GlobalConfig3 & CFG3_SPEAK_ALL) & 0x01)) HoTT_printfxy_INV(7,2,"All Messages ") |
else HoTT_printfxy_INV(7,2,"Warnings only"); |
break; |
case 2: |
799,6 → 800,7 |
line = 0; |
break; |
} |
*/ |
else page = 0; |
} |
/test_branches/FC2_2/jeti_ex.c |
---|
1,4 → 1,4 |
#include "libfc.h" |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
8,13 → 8,68 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
const char PROGMEM JETI_CODE[53] = |
{ |
0, // 0 |
'O', // SPEAK_ERR_CALIBARTION 1 |
'P', // SPEAK_ERR_RECEICER 2 |
'Q', // SPEAK_ERR_DATABUS 3 |
'R', // SPEAK_ERR_NAVI 4 |
'S', // SPEAK_ERROR 5 |
'T', // SPEAK_ERR_COMPASS 6 |
'S', // SPEAK_ERR_SENSOR 7 |
'V', // SPEAK_ERR_GPS 8 |
'W', // SPEAK_ERR_MOTOR 9 |
'H', // SPEAK_MAX_TEMPERAT 10 |
0, // SPEAK_ALTI_REACHED 11 |
'X', // SPEAK_WP_REACHED 12 |
'Y', // SPEAK_NEXT_WP 13 |
0, // SPEAK_LANDING 14 |
'Z', // SPEAK_GPS_FIX 15 |
'U', // SPEAK_UNDERVOLTAGE 16 |
'E', // SPEAK_GPS_HOLD 17 |
'F', // SPEAK_GPS_HOME 18 |
'G', // SPEAK_GPS_OFF 19 |
'H', // SPEAK_BEEP 20 |
'A', // SPEAK_MIKROKOPTER 21 |
0, // SPEAK_CAPACITY 22 |
'I', // SPEAK_CF_OFF 23 |
'B', // SPEAK_CALIBRATE 24 |
'J', // SPEAK_MAX_RANGE 25 |
'J', // SPEAK_MAX_ALTITUD 26 |
0, // 27 |
0, // 28 |
0, // 29 |
0, // 30 |
0, // 31 |
0, // 32 |
0, // 33 |
0, // 34 |
0, // 35 |
0, // 36 |
0, // 37 |
'D', // SPEAK_MK_OFF 38 |
'L', // SPEAK_ALTITUDE_ON 39 |
'M', // SPEAK_ALTITUDE_OFF 40 |
0, // 41 |
0, // 42 |
0, // 43 |
0, // 44 |
0, // 45 |
'N', // SPEAK_CF_ON 46 |
0, // SPEAK_SINKING 47 |
0, // SPEAK_RISING 48 |
0, // SPEAK_HOLDING 49 |
'K', // SPEAK_GPS_ON 50 |
0, // SPEAK_FOLLWING 51 |
'C' // SPEAK_STARTING 52 |
}; |
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0) |
{ |
// Label[10] unit[3], data type, Data , position of decimal point |
// "1234567890", "123", |
{ "-= M K =- " , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1 |
{ "Current " , "A ", 1, 0 , 1 }, // ID 2 |
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3 |
33,9 → 88,39 |
}; |
void BuildJeti_Vario(void) |
{ |
signed int tmp = 0; |
static signed int JetiVarioMeter = 0; |
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4; |
if(VarioCharacter == '+') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5; |
} |
else |
if(VarioCharacter == '-') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5; |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = (JetiVarioMeter/32); |
} |
else |
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed; |
else |
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed; |
JetiExData[12].Value = tmp; |
} |
// -------------------------------------------------------------------------------------------------- |
void JetiEX_Update(void) |
{ |
GetHottestBl(); |
JetiExData[1].Value = UBat; |
49,8 → 134,7 |
JetiExData[9].Value = GPSInfo.HomeBearing; |
JetiExData[10].Value = MaxBlTempertaure; |
JetiExData[11].Value = EarthMagneticField; |
JetiExData[12].Value = 0; |
JetiExData[13].Value = NC_ErrorCode; |
// JetiExData[12].Value = Vario; |
JetiExData[13].Value = NC_ErrorCode; |
} |
#endif |
/test_branches/FC2_2/jeti_ex.h |
---|
3,8 → 3,8 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern void BuildJeti_Vario(void); |
// define here how many Jeti EX parameters should be transmitted (max. = 15) |
// |
#define JETI_EX_PARAMETER_COUNT 15 |
11,9 → 11,7 |
// |
// ------------------------------------------------------------------------- |
extern const char PROGMEM JETI_CODE[53]; |
typedef struct |
{ |
/test_branches/FC2_2/main.c |
---|
323,6 → 323,8 |
CalcNickServoValue(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu(); |
else |
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario(); |
#endif |
if(MissingMotor) |
{ |
/test_branches/FC2_2/main.h |
---|
71,6 → 71,7 |
#include "hottmenu.h" |
#include "debug.h" |
#include "sbus.h" |
#include "jeti_ex.h" |
#endif //_MAIN_H |
/test_branches/FC2_2/spi.c |
---|
226,7 → 226,12 |
case SPI_FCCMD_PARAMETER2: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviOut1Parameter; // Distance between Photo releases |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.Receiver != RECEIVER_HOTT) HoTT_Waring(); // create the ToNC_SpeakHoTT |
// create the ToNC_SpeakHoTT |
if(EE_Parameter.Receiver != RECEIVER_HOTT) |
{ |
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]); |
else HoTT_Waring(); |
} |
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT; |
#else |
ToNaviCtrl.Param.Byte[1] = 0; |
364,7 → 369,7 |
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3]; |
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2]; |
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3]; |
PPM_in[25] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value |
PPM_in[25] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel) |
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9]; |
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm |
break; |