/branches/dongfang_FC_fixedwing/arduino_atmega328/README.txt |
---|
27,14 → 27,3 |
ADC6 Battery voltage divider |
ADC7 Airspeed sensor |
To do: |
- Throttle shut off in both versions |
- Check rc.h in both versions |
- Implement servo limiter |
Big Wing: |
- Redundant supply with separate batt and Trojan BEC |
- XBee |
/branches/dongfang_FC_fixedwing/arduino_atmega328/analog.c |
---|
6,7 → 6,6 |
#include "analog.h" |
#include "configuration.h" |
#include "attitude.h" |
#include "sensors.h" |
#include "printf_P.h" |
#include "isqrt.h" |
#include "twimaster.h" |
/branches/dongfang_FC_fixedwing/arduino_atmega328/configuration.c |
---|
2,7 → 2,6 |
#include <stddef.h> |
#include <string.h> |
#include "configuration.h" |
#include "sensors.h" |
#include "rc.h" |
#include "output.h" |
#include "flight.h" |
9,7 → 8,7 |
int16_t variables[VARIABLE_COUNT]; |
ParamSet_t staticParams; |
channelMap_t channelMap; |
ChannelMap_t channelMap; |
IMUConfig_t IMUConfig; |
volatile DynamicParams_t dynamicParams; |
154,6 → 153,7 |
/* Default Values for R/C Channels */ |
/***************************************************/ |
void channelMap_default(void) { |
channelMap.trim = 0; |
channelMap.channels[CH_ELEVATOR] = 1; |
channelMap.channels[CH_AILERONS] = 0; |
channelMap.channels[CH_THROTTLE] = 2; |
/branches/dongfang_FC_fixedwing/arduino_atmega328/configuration.h |
---|
111,9 → 111,11 |
*/ |
typedef struct { |
uint8_t trim; |
uint8_t variableOffset; |
uint8_t channels[MAX_CHANNELS]; |
} channelMap_t; |
extern channelMap_t channelMap; |
} ChannelMap_t; |
extern ChannelMap_t channelMap; |
typedef struct { |
int16_t offsets[3]; |
125,7 → 127,7 |
uint8_t minValue; |
uint8_t maxValue; |
uint8_t flags; |
} servo_t; |
} Servo_t; |
#define SERVO_STABILIZATION_REVERSE 1 |
162,8 → 164,11 |
uint8_t controlServosReverse; |
uint8_t servoCount; |
uint8_t controlServoMinValue; |
uint8_t controlServoMaxValue; |
uint8_t servoManualMaxSpeed; |
servo_t servoConfigurations[2]; // [PITCH, ROLL] |
Servo_t servoConfigurations[2]; // [PITCH, ROLL] |
// Outputs |
output_flash_t outputFlash[2]; |
/branches/dongfang_FC_fixedwing/arduino_atmega328/eeprom.c |
---|
147,11 → 147,11 |
/* ChannelMap */ |
/***************************************************/ |
void channelMap_writeToEEProm(void) { |
writeChecksummedBlock(CHANNELMAP_REVISION, (uint8_t*)&channelMap, EEPROM_ADR_CHANNELMAP, sizeof(channelMap_t)); |
writeChecksummedBlock(CHANNELMAP_REVISION, (uint8_t*)&channelMap, EEPROM_ADR_CHANNELMAP, sizeof(ChannelMap_t)); |
} |
void channelMap_readOrDefault(void) { |
if (readChecksummedBlock(CHANNELMAP_REVISION, (uint8_t*)&channelMap, EEPROM_ADR_CHANNELMAP, sizeof(channelMap_t))) { |
if (readChecksummedBlock(CHANNELMAP_REVISION, (uint8_t*)&channelMap, EEPROM_ADR_CHANNELMAP, sizeof(ChannelMap_t))) { |
printf("\n\rwriting default channel map"); |
channelMap_default(); |
channelMap_writeToEEProm(); |
/branches/dongfang_FC_fixedwing/arduino_atmega328/eeprom.h |
---|
23,7 → 23,7 |
#define EEPROM_ADR_IMU_CONFIG 100 |
#define EEPROM_ADR_PARAMSET_BEGIN 256 |
#define CHANNELMAP_REVISION 0 |
#define CHANNELMAP_REVISION 1 |
#define EEPARAM_REVISION 100 |
#define EEMIXER_REVISION 0 |
#define SENSOROFFSET_REVISION 0 |
/branches/dongfang_FC_fixedwing/arduino_atmega328/rc.c |
---|
99,7 → 99,7 |
if ((signal >= TIME(0.8)) && (signal < TIME(2.2))) { |
// shift signal to zero symmetric range -154 to 159 |
//signal -= 3750; // theoretical value |
signal -= (TIME(1.5) + RC_TRIM); // best value with my Futaba in zero trim. |
signal -= (TIME(1.5) - 128 + channelMap.trim-128); // best value with my Futaba in zero trim. |
// check for stable signal |
if (abs(signal - PPM_in[index]) < TIME(0.05)) { |
if (RCQuality < 200) |
198,12 → 198,12 |
int16_t RC_getVariable(uint8_t varNum) { |
if (varNum < 4) |
// 0th variable is 5th channel (1-based) etc. |
return (RCChannel(varNum + CH_POTS) >> 2) + VARIABLE_OFFSET; |
return (RCChannel(varNum + CH_POTS) >> 2) + channelMap.variableOffset; |
/* |
* Let's just say: |
* The RC variable i is hardwired to channel i, i>=4 |
*/ |
return (PPM_in[varNum] >> 2) + VARIABLE_OFFSET; |
return (PPM_in[varNum] >> 2) + channelMap.variableOffset; |
} |
uint8_t RC_getSignalQuality(void) { |