/trunk/eeprom.c |
---|
413,6 → 413,7 |
// read paramset from eeprom |
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
LED_Init(); |
InitSerialPoti(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
/trunk/fc.c |
---|
440,11 → 440,10 |
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal |
else |
{ |
if((EE_Parameter.ServoCompInvert & SERVO_NICK_INV) && (EE_Parameter.ServoCompInvert & SERVO_RELATIVE)) NickServoValue = 12000;//((128 + 60) * 4 * 16); // neutral position = upper 1/4// else |
else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
CalculateServoSignals = 1; |
CalculateServo(); // nick |
CalculateServo(); // roll |
CalcNickServoValue(); |
CalculateServo(1); // nick |
CalculateServo(1); // roll |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
/trunk/libfc1284.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/main.c |
---|
218,6 → 218,67 |
} |
// +++++++++++++++++++++++++++++++++++++++++++ |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// check if ServoControl is serial Poti and if yes: check if there is valid data |
void InitSerialPoti(void) |
{ |
unsigned char i; |
if(!SerialChannelDataOkay) |
{ |
if(EE_Parameter.ServoNickControl >= 248) // Poti-Value |
{ |
i = 255 - EE_Parameter.ServoNickControl; // Poti-number |
i = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
if(i >= SERIAL_POTI_START && i <= SERIAL_POTI_END) // value comes from a serial poti |
{ |
if(EE_Parameter.ServoFS_Pos[0]) PPM_in[i] = EE_Parameter.ServoFS_Pos[0] - 127; // there is a failsafe position |
else PPM_in[i] = 0; // middle position |
} |
} |
if(EE_Parameter.ServoRollControl >= 248) // Poti-Value |
{ |
i = 255 - EE_Parameter.ServoRollControl; // Poti-number |
i = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
if(i >= SERIAL_POTI_START && i <= SERIAL_POTI_END) // value comes from a serial poti |
{ |
if(EE_Parameter.ServoFS_Pos[1]) PPM_in[i] = EE_Parameter.ServoFS_Pos[1] - 127; |
else PPM_in[i] = 0; // middle position |
} |
} |
if(EE_Parameter.Servo3 >= 248) // Poti-Value |
{ |
i = 255 - EE_Parameter.Servo3; // Poti-number |
i = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
if(i >= SERIAL_POTI_START && i <= SERIAL_POTI_END) // value comes from a serial poti |
{ |
if(EE_Parameter.ServoFS_Pos[2]) PPM_in[i] = EE_Parameter.ServoFS_Pos[2] - 127; |
else PPM_in[i] = 0; // middle position |
} |
} |
if(EE_Parameter.Servo4 >= 248) // Poti-Value |
{ |
i = 255 - EE_Parameter.Servo4; // Poti-number |
i = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
if(i >= SERIAL_POTI_START && i <= SERIAL_POTI_END) // value comes from a serial poti |
{ |
if(EE_Parameter.ServoFS_Pos[3]) PPM_in[i] = EE_Parameter.ServoFS_Pos[3] - 127; |
else PPM_in[i] = 0; // middle position |
} |
} |
if(EE_Parameter.Servo5 >= 248) // Poti-Value |
{ |
i = 255 - EE_Parameter.Servo5; // Poti-number |
i = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
if(i >= SERIAL_POTI_START && i <= SERIAL_POTI_END) // value comes from a serial poti |
{ |
if(EE_Parameter.ServoFS_Pos[4]) PPM_in[i] = EE_Parameter.ServoFS_Pos[4] - 127; |
else PPM_in[i] = 0; // middle position |
} |
} |
} |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
371,7 → 432,6 |
printf("\n\r\n\r--> REDUNDANT MASTER <---\n\r"); |
IamMaster = MASTER; |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Calibrating altitude sensor |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
427,7 → 487,6 |
printf("\n\rStart\n\r"); |
#endif |
// printf("\n\rSize %i\n\r", sizeof(HugeBlockToNavi)); |
while(1) |
{ |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
503,7 → 562,7 |
#endif |
{ |
if(BytegapSPI == 0) SPI_TransmitByte(); |
if(CalculateServoSignals) CalculateServo(); |
if(CalculateServoSignals) CalculateServo(0); |
DatenUebertragung(); |
BearbeiteRxDaten(); |
if(!(PINB & 0x04)) VersionInfo.HardwareError[1] |= FC_ERROR1_RC_VOLTAGE; |
654,6 → 713,7 |
if(ShowCmpsCalibrateTime) ShowCmpsCalibrateTime--; |
if(Delete_Stoppflag_Timer) Delete_Stoppflag_Timer--; else FC_StatusFlags3 &= ~FC_STATUS3_MOTORS_STOPPED_BY_RC; |
#endif |
if(SerialChannelDataOkay) if(--SerialChannelDataOkay == 0) InitSerialPoti(); |
if(NC_To_FC_Flags & NC_TO_FC_FAILSAFE_LANDING) ServoFailsafeActive = SERVO_FS_TIME; |
else |
if(ServoFailsafeActive) ServoFailsafeActive--; |
675,6 → 735,7 |
#endif |
} |
if(UBat > BattLowVoltageWarning + 1) FC_StatusFlags &= ~FC_STATUS_LOWBAT; |
TIMSK2 |= (1<<OCIE2A); // enable Servo-Interrupt now |
} |
// +++++++++++++++++++++++++++++++++ |
if(++timer2 == 2930) // eine Minute |
/trunk/main.h |
---|
51,6 → 51,7 |
extern unsigned int BL3_Current(unsigned char who); // in 0,1A |
extern unsigned char LipoCells; |
extern unsigned char Delete_Stoppflag_Timer; |
extern void InitSerialPoti(void); |
#define NOTHING 0 |
#define MASTER 1 |
/trunk/rc.h |
---|
33,6 → 33,7 |
// 32 -> 0 |
#define SERIAL_POTI_START 17 |
#define SERIAL_POTI_END 28 |
#define WP_EVENT_PPM_IN 29 |
#define PPM_IN_OFF 30 |
#define PPM_IN_MAX 31 |
/trunk/spi.c |
---|
572,7 → 572,8 |
case SPI_SERIAL_CH: // kommt nur, wenn NC den Datensatz empfangen hat |
{ |
unsigned char tempchar1; |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) FromNaviCtrl.Param.Byte[tempchar1]; |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) FromNaviCtrl.Param.Byte[tempchar1]; |
SerialChannelDataOkay = 30; |
} |
break; |
#endif |
/trunk/timer0.c |
---|
226,7 → 226,7 |
// Timer/Counter 2 Interrupt Mask Register |
// Enable timer output compare match A Interrupt only |
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2)); |
TIMSK2 |= (1<<OCIE2A); |
// TIMSK2 |= (1<<OCIE2A); -> will be done in the main() |
SREG = sreg; |
} |
263,7 → 263,8 |
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control |
} |
void CalculateServo(void) |
void CalculateServo(unsigned char init) |
{ |
signed char cosinus, sinus; |
signed long nick, roll; |
290,7 → 291,7 |
{ // inverting movement of servo |
nick = ServoNickOffset / 16 - nick; |
} |
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1); |
if(EE_Parameter.ServoFilterNick && !init) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1); |
else ServoNickValue = nick; |
// limit servo value to its parameter range definition |
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER)) |
319,7 → 320,7 |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 - roll; |
} |
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1); |
if(EE_Parameter.ServoFilterRoll && !init) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1); |
else ServoRollValue = roll; |
// limit servo value to its parameter range definition |
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER)) |
/trunk/timer0.h |
---|
10,7 → 10,7 |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
void CalculateServo(void); |
void CalculateServo(unsigned char init); |
void CalcNickServoValue(void); |
extern volatile unsigned int CountMilliseconds; |
/trunk/uart.c |
---|
110,6 → 110,7 |
unsigned int AboTimeOut = 0; |
unsigned volatile char ReceiverUpdateModeActive = 0; // 1 = Update 2 = JetiBox-Simulation |
unsigned char SwitchMultiplexerToUpdate = 0; // the Uart-Multiplexer on the FC V3.0 |
unsigned char SerialChannelDataOkay = 0; // timeout |
const unsigned char ANALOG_TEXT[32][16] PROGMEM = |
{ |
501,6 → 502,7 |
break; |
case 'y':// serial Potis |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) pRxData[tempchar1]; |
SerialChannelDataOkay = 30; |
break; |
case 'u': // request BL parameter |
Debug("Reading BL %d", pRxData[0]); |
/trunk/uart.h |
---|
25,6 → 25,7 |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[16]; |
extern unsigned char SwitchMultiplexerToUpdate; // the Uart-Multiplexer on the FC V3.0 |
extern unsigned char SerialChannelDataOkay; // timeout |
struct str_DebugOut |
{ |
/trunk/version.txt |
---|
829,8 → 829,14 |
- FC3.0: Transmit Status to Master FC |
- prevents switch-on in case of error |
- switches off if Master says: Switched off by RC-Command |
2.13e |
- New Parameter: CamCtrlModeChannel & CamCtrlZoomChannel |
- CamCtrl Character in HoTT & Jeti display |
- HugeBlock: wait until the I2C data is finished -> avoid I2C errors |
- Servo Position from Serial Poti: check if there is valid data |
- 30 sek Timout on serial Data (only for Servo Position until now) |
toDo: |
- CalAthmospheare nachführen |