Rev 1506 | Rev 1743 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1506 | Rev 1680 | ||
---|---|---|---|
Line 2... | Line 2... | ||
2 | Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit |
2 | Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit |
3 | #######################################################################################*/ |
3 | #######################################################################################*/ |
Line 4... | Line 4... | ||
4 | 4 | ||
5 | #include "Spektrum.h" |
5 | #include "Spektrum.h" |
6 | #include "main.h" |
6 | #include "main.h" |
Line 7... | Line 7... | ||
7 | //#define RECEIVER_SPEKTRUM_EXP |
7 | // Achtung: RECEIVER_SPEKTRUM_EXP wird in der Main.h gesetzt |
Line 8... | Line 8... | ||
8 | 8 | ||
9 | unsigned char SpektrumTimer = 0; |
9 | unsigned char SpektrumTimer = 0; |
10 | 10 | ||
11 | #ifdef RECEIVER_SPEKTRUM_EXP |
11 | #ifdef RECEIVER_SPEKTRUM_EXP |
12 | unsigned char sexcnt; // Counter for Spektrum-Expander |
12 | unsigned char s_excnt = 0; // Counter for Spektrum-Expander |
13 | unsigned char sexparity; // Parity Bit for Spektrum-Expander |
13 | unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander |
14 | signed char sexdata[7]; // Data for Spektrum-Expander |
14 | signed char s_exdata[11]; // Data for Spektrum-Expander |
15 | #endif |
15 | #endif |
16 | //--------------------------------------------------------------// |
16 | //--------------------------------------------------------------// |
Line 328... | Line 328... | ||
328 | #ifdef RECEIVER_SPEKTRUM_EXP |
328 | #ifdef RECEIVER_SPEKTRUM_EXP |
329 | if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
329 | if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
330 | { |
330 | { |
331 | if (signal > 100) // SYNC received |
331 | if (signal > 100) // SYNC received |
332 | { |
332 | { |
333 | sexcnt = 0; // Reset bitcounter |
333 | if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
334 | sexparity = 0; // Reset parity bit |
334 | 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 |
335 | } |
335 | { |
- | 336 | if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125; // Reconstruct tripole Flight-Mode value (CH5) |
|
- | 337 | else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5) |
|
- | 338 | else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125; // Reconstruct tripole Flight-Mode value (CH5) |
|
- | 339 | PPM_in[6] = s_exdata[3]; // Elevator (CH6) |
|
- | 340 | PPM_in[11] = s_exdata[4]; // Aileron (CH11) |
|
- | 341 | PPM_in[12] = s_exdata[5]; // Rudder (CH12) |
|
Line 336... | Line 342... | ||
336 | 342 | ||
337 | if (signal < 10) |
343 | if (s_excnt == 9) // New Mode (12 Channels) |
- | 344 | { |
|
338 | { |
345 | if (s_exdata[7] == 125) PPM_in[8] += 5; // Hover Pitch UP (CH8) |
339 | sexcnt++; // Increase counter only for non-sync bits |
346 | if (s_exdata[8] == 125) PPM_in[8] -= 5; // Hover Pitch DN (CH8) |
- | 347 | if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
|
- | 348 | else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
|
- | 349 | PPM_in[10] = s_exdata[6]; // AUX2 (CH10) |
|
340 | sexdata[sexcnt] = -113; // Bit = 0 -> value = -113 (min) |
350 | } |
Line 341... | Line 351... | ||
341 | } |
351 | } |
- | 352 | ||
- | 353 | s_excnt = 0; // Reset bitcounter |
|
Line -... | Line 354... | ||
- | 354 | s_exparity = 0; // Reset parity bit |
|
- | 355 | } |
|
342 | 356 | ||
343 | if (sexcnt == 7) sexcnt = 0; // Overflow protection |
357 | if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
344 | 358 | if (s_excnt == 10) s_excnt = 0; // Overflow protection |
|
345 | if (signal < -100) |
359 | if (signal < -100) |
346 | { |
360 | { |
Line 347... | Line -... | ||
347 | sexdata[sexcnt] = 114; // Bit = 1 -> value = 114 (max) |
- | |
348 | if (sexcnt < 6) sexparity = ~sexparity; // Bit = 1 -> Invert parity bit (without itself) |
- | |
349 | } |
- | |
350 | - | ||
351 | if (sexcnt == 6) // Wait for complete frame |
- | |
352 | { |
- | |
353 | if ((sexparity != 0 && sexdata[6] == -113) || (sexparity == 0 && sexdata[6] == 114)) // Parity check |
- | |
354 | { |
- | |
355 | if (sexdata[1] == 114 && sexdata[2] == -113) PPM_in[5] = -113;// Reconstruct tripole Flight-Mode value (CH5) |
- | |
356 | if (sexdata[1] == -113 && sexdata[2] == -113) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5) |
- | |
357 | if (sexdata[1] == -113 && sexdata[2] == 114) PPM_in[5] = 114; // Reconstruct tripole Flight-Mode value (CH5) |
- | |
358 | PPM_in[6] = sexdata[3]; // Elevator (CH6) |
- | |
359 | PPM_in[9] = sexdata[4]; // Aileron (CH9) |
361 | s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
360 | PPM_in[10] = sexdata[5]; // Rudder (CH10) |
362 | s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
361 | } |
363 | } |
362 | } |
- | |
363 | } |
364 | |
Line 364... | Line 365... | ||
364 | #endif |
365 | } |
365 | if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
366 | #endif |
366 | 367 | if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
|
367 | else PPM_diff[index] = 0; |
368 | else PPM_diff[index] = 0; |
368 | 369 | ||
369 | #ifdef RECEIVER_SPEKTRUM_EXP |
370 | #ifdef RECEIVER_SPEKTRUM_EXP |
370 | if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4) |
371 | if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4) |
371 | if (index == 5) PPM_in[7] = signal; // Gear (CH7) |
372 | else if (index == 5) PPM_in[7] = signal; // Gear (CH7) |
372 | if (index == 7) PPM_in[8] = signal; // AUX2 (CH8) |
373 | else if (index == 7) PPM_in[9] = signal; // Hover Throttle (CH9) |
Line 401... | Line 402... | ||
401 | Sync = 0; |
402 | Sync = 0; |
402 | SpektrumTimer = MIN_FRAMEGAP; |
403 | SpektrumTimer = MIN_FRAMEGAP; |
403 | } |
404 | } |
404 | } |
405 | } |
405 | } |
406 | } |
406 | - | ||
407 | - |