Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2626 → Rev 2627

/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