11,12 → 11,12 |
// The channel array is 0-based! |
volatile int16_t PPM_in[MAX_CHANNELS]; |
volatile uint16_t RC_buffer[MAX_CHANNELS]; |
volatile uint8_t inBfrPnt = 0; |
volatile uint8_t inBfrPnt; |
|
volatile uint8_t RCQuality; |
|
uint8_t lastRCCommand = COMMAND_NONE; |
uint8_t lastFlightMode = FLIGHT_MODE_NONE; |
uint8_t lastRCCommand; |
uint8_t lastFlightMode; |
|
#define TIME(s) ((int16_t)(((long)F_CPU/(long)8000)*(float)s)) |
|
72,9 → 72,7 |
// Enable Overflow Interrupt (bit: TOIE1=0) |
TIMSK1 &= ~((1<<OCIE1B) | (1<<OCIE1A) | (1<<TOIE1)); |
TIMSK1 |= (1<<ICIE1); |
|
RCQuality = 0; |
|
SREG = sreg; |
} |
|
87,9 → 85,9 |
oldICR1 = ICR1; |
//sync gap? (3.5 ms < signal < 25.6 ms) |
if (signal > TIME(3.5)) { |
inBfrPnt = 0; |
inBfrPnt = 0; |
} else if (inBfrPnt<MAX_CHANNELS) { |
RC_buffer[inBfrPnt++] = signal; |
RC_buffer[inBfrPnt++] = signal; |
} |
} |
|
115,7 → 113,7 |
the syncronization gap. |
*/ |
void RC_process(void) { |
if (RCQuality) RCQuality--; |
if (RCQuality) RCQuality--; |
for (uint8_t channel=0; channel<MAX_CHANNELS; channel++) { |
uint16_t signal = RC_buffer[channel]; |
if (signal != 0) { |