4,15 → 4,23 |
|
#include "Spektrum.h" |
#include "main.h" |
// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der Main.h gesetzt |
|
unsigned char SpektrumTimer = 0; |
|
// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt |
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
unsigned char s_excnt = 0; // Counter for Spektrum-Expander |
unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander |
unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander |
signed char s_exdata[11]; // Data for Spektrum-Expander |
signed char s_exdata[11]; // Data for Spektrum-Expander |
|
void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in |
{ |
if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3; |
else PPM_diff[channel] = 0; |
PPM_in[channel] = value; |
} |
#endif |
|
//--------------------------------------------------------------// |
//--------------------------------------------------------------// |
/* |
310,13 → 318,13 |
{ |
// Stabiles Signal |
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4) |
if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4) |
else if (index == 4) index = 2; |
#endif |
if(abs(signal - PPM_in[index]) < 6) |
{ |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(SenderOkay < 200) SenderOkay += 10; |
else |
{ |
323,74 → 331,78 |
SenderOkay = 200; |
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
} |
} |
} |
} |
} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
|
#ifdef RECEIVER_SPEKTRUM_DX7EXP |
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
{ |
if (signal > 100) // SYNC received |
if (signal > 100) // SYNC received |
{ |
if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check |
{ |
if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125; // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125; // Reconstruct tripole Flight-Mode value (CH5) |
PPM_in[6] = s_exdata[3]; // Elevator (CH6) |
PPM_in[11] = s_exdata[4]; // Aileron (CH11) |
PPM_in[12] = s_exdata[5]; // Rudder (CH12) |
if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
s_update(6,s_exdata[3]); // Elevator (CH6) |
s_update(11,s_exdata[4]); // Aileron (CH11) |
s_update(12,s_exdata[5]); // Rudder (CH12) |
|
if (s_excnt == 9) // New Mode (12 Channels) |
if (s_excnt == 9) // New Mode (12 Channels) |
{ |
if (s_exdata[7] == 125) PPM_in[8] += 5; // Hover Pitch UP (CH8) |
if (s_exdata[8] == 125) PPM_in[8] -= 5; // Hover Pitch DN (CH8) |
if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
PPM_in[10] = s_exdata[6]; // AUX2 (CH10) |
if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8) |
if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8) |
if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
s_update(10,s_exdata[6]); // AUX2 (CH10) |
} |
} |
|
s_excnt = 0; // Reset bitcounter |
s_exparity = 0; // Reset parity bit |
s_excnt = 0; // Reset bitcounter |
s_exparity = 0; // Reset parity bit |
} |
|
if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
if (s_excnt == 10) s_excnt = 0; // Overflow protection |
if (signal < -100) |
{ |
s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
} |
|
} |
|
if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
else if (index == 5) s_update(7,signal); // Gear (CH7) |
else if (index == 7) s_update(9,signal); // Hover Throttle (CH9) |
|
#elif defined RECEIVER_SPEKTRUM_DX8EXP |
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
{ |
if (signal > 100) // SYNC received |
if (signal > 100) // SYNC received |
{ |
if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check |
{ |
if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125; // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125; // Reconstruct tripole Flight-Mode value (CH5) |
if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
|
if (s_exdata[3] == 125 && s_exdata[6] == -125) PPM_in[6] = 125; // Reconstruct tripole Elev D/R value (CH6) |
else if (s_exdata[3] == -125 && s_exdata[6] == -125) PPM_in[6] = 0; // Reconstruct tripole Elev D/R value (CH6) |
else if (s_exdata[3] == -125 && s_exdata[6] == 125) PPM_in[6] = -125; // Reconstruct tripole Elev D/R value (CH6) |
if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6) |
else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6) |
else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6) |
|
|
if (s_exdata[7] == 125 && s_exdata[8] == -125) PPM_in[9] = -125; // Reconstruct tripole AIL D/R value (CH9) |
else if (s_exdata[7] == -125 && s_exdata[8] == -125) PPM_in[9] = 0; // Reconstruct tripole AIL D/R value (CH9) |
else if (s_exdata[7] == -125 && s_exdata[8] == 125) PPM_in[9] = 125; // Reconstruct tripole AIL D/R value (CH9) |
if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9) |
else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9) |
else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9) |
|
PPM_in[10] = s_exdata[5]; // Gear (CH10) |
PPM_in[12] = s_exdata[4]; // Mix (CH12) |
s_update(10,s_exdata[5]); // Gear (CH10) |
s_update(12,s_exdata[4]); // Mix (CH12) |
} |
|
s_excnt = 0; // Reset bitcounter |
406,20 → 418,15 |
} |
|
} |
#endif |
|
if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
else if (index == 7) s_update(7,signal); // R Trim (CH7) |
else if (index == 5) s_update(8,signal); // AUX2 (CH8) |
else if (index == 8) s_update(11,signal); // AUX3 (CH11) |
|
#else |
if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
|
#ifdef RECEIVER_SPEKTRUM_DX7EXP |
if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4) |
else if (index == 5) PPM_in[7] = signal; // Gear (CH7) |
else if (index == 7) PPM_in[9] = signal; // Hover Throttle (CH9) |
#elif defined RECEIVER_SPEKTRUM_DX8EXP |
if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4) |
else if (index == 7) PPM_in[7] = signal; // R Trim (CH7) |
else if (index == 5) PPM_in[8] = signal; // AUX2 (CH8) |
else if (index == 8) PPM_in[11] = signal; // AUX3 (CH11) |
#else |
PPM_in[index] = tmp; |
#endif |
} |
453,3 → 460,4 |
} |
} |
|
|