Subversion Repositories FlightCtrl

Rev

Rev 2011 | Rev 2309 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2011 Rev 2185
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"
-
 
Line 7... Line 6...
7
// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der Main.h gesetzt
6
#include "main.h"
Line -... Line 7...
-
 
7
 
8
 
8
unsigned char SpektrumTimer = 0;
9
unsigned char SpektrumTimer = 0;
9
 
10
 
10
// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt
11
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
11
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
-
 
12
unsigned char s_excnt = 0;                   // Bitcounter for Spektrum-Expander
-
 
13
unsigned char s_exparity = 0;                // Parity Bit for Spektrum-Expander
-
 
14
signed char s_exdata[11];                    // Data for Spektrum-Expander
-
 
15
 
-
 
16
void s_update(unsigned char channel, signed int value)  // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in
-
 
17
{
-
 
18
        if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3;
12
unsigned char s_excnt = 0;                   // Counter for Spektrum-Expander
19
        else PPM_diff[channel] = 0;
-
 
20
        PPM_in[channel] = value;
13
unsigned char s_exparity = 0;                // Parity Bit for Spektrum-Expander
21
}
14
signed char s_exdata[11];         // Data for Spektrum-Expander
22
#endif
15
#endif
23
 
16
//--------------------------------------------------------------//
24
//--------------------------------------------------------------//
17
//--------------------------------------------------------------//
25
//--------------------------------------------------------------//
Line 335... Line 343...
335
                                        if (signal > 100)                                                                                       // SYNC received
343
                                        if (signal > 100)                                                                       // SYNC received
336
                                        {
344
                                        {
337
                                                if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
345
                                                if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity;                         // Bit = 1 -> Re-Invert parity bit
338
                                                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
346
                                                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
339
                                                {
347
                                                {
340
                                                        if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125;                // Reconstruct tripole Flight-Mode value (CH5)
348
                                                        if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125);        // Reconstruct tripole Flight-Mode value (CH5)
341
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0;     // Reconstruct tripole Flight-Mode value (CH5)
349
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0);     // Reconstruct tripole Flight-Mode value (CH5)
342
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125;    // Reconstruct tripole Flight-Mode value (CH5)
350
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125);    // Reconstruct tripole Flight-Mode value (CH5)
343
                                                        PPM_in[6] = s_exdata[3];                                                        // Elevator (CH6)
351
                                                        s_update(6,s_exdata[3]);                                                // Elevator (CH6)
344
                                                        PPM_in[11] = s_exdata[4];                                                       // Aileron (CH11)
352
                                                        s_update(11,s_exdata[4]);                                               // Aileron (CH11)
345
                                                        PPM_in[12] = s_exdata[5];                                                       // Rudder (CH12)
353
                                                        s_update(12,s_exdata[5]);                                               // Rudder (CH12)
Line 346... Line 354...
346
 
354
 
347
                                                        if (s_excnt == 9)                                                                       // New Mode (12 Channels)
355
                                                        if (s_excnt == 9)                                                       // New Mode (12 Channels)
348
                                                        {
356
                                                        {
349
                                                                if (s_exdata[7] == 125) PPM_in[8] += 5;                 // Hover Pitch UP (CH8)
357
                                                                if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5);                // Hover Pitch UP (CH8)
350
                                                                if (s_exdata[8] == 125) PPM_in[8] -= 5;                 // Hover Pitch DN (CH8)
358
                                                                if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5);                // Hover Pitch DN (CH8)
351
                                                                if (PPM_in[8] < -125) PPM_in[8] = -125;         // Range-Limit
359
                                                                if (PPM_in[8] < -125) PPM_in[8] = -125;                         // Range-Limit
352
                                                                else if (PPM_in[8] > 125) PPM_in[8] = 125;      // Range-Limit
360
                                                                else if (PPM_in[8] > 125) PPM_in[8] = 125;                      // Range-Limit
353
                                                                PPM_in[10] = s_exdata[6];                                               // AUX2 (CH10)
361
                                                                s_update(10,s_exdata[6]);                                       // AUX2 (CH10)
354
                                                        }
362
                                                        }
Line 355... Line 363...
355
                                                }
363
                                                }
356
 
364
 
Line 366... Line 374...
366
                                                s_exparity = ~s_exparity;                                                                       // Bit = 1 -> Invert parity bit
374
                                                s_exparity = ~s_exparity;                                                       // Bit = 1 -> Invert parity bit
367
                                        }
375
                                        }
Line 368... Line 376...
368
 
376
 
Line -... Line 377...
-
 
377
                                }
-
 
378
 
-
 
379
                                if (index < 5 ) s_update(index,tmp);                                                            // Update normal potis (CH1-4)
-
 
380
                                else if (index == 5) s_update(7,signal);                                                        // Gear (CH7)
369
                                }
381
                                else if (index == 7) s_update(9,signal);                                                        // Hover Throttle (CH9)
370
 
382
 
371
#elif defined RECEIVER_SPEKTRUM_DX8EXP
383
#elif defined RECEIVER_SPEKTRUM_DX8EXP
372
                                if(index == 6)                                                                                                  // FLIGHT-MODE - The channel used for our data uplink
384
                                if(index == 6)                                                                                  // FLIGHT-MODE - The channel used for our data uplink
373
                                {
385
                                {
374
                                        if (signal > 100)                                                                                       // SYNC received
386
                                        if (signal > 100)                                                                       // SYNC received
375
                                        {
387
                                        {
376
                                                if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
388
                                                if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
377
                                                if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))  // Parity check
389
                                                if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))  // Parity check
378
                                                {
390
                                                {
379
                                                        if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125;        // Reconstruct tripole Flight-Mode value (CH5)
391
                                                        if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125);        // Reconstruct tripole Flight-Mode value (CH5)
Line 380... Line 392...
380
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0;     // Reconstruct tripole Flight-Mode value (CH5)
392
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0);     // Reconstruct tripole Flight-Mode value (CH5)
381
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125;    // Reconstruct tripole Flight-Mode value (CH5)
393
                                                        else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125);    // Reconstruct tripole Flight-Mode value (CH5)
382
 
394
 
Line 383... Line 395...
383
                                                        if (s_exdata[3] == 125 && s_exdata[6] == -125) PPM_in[6] = 125;         // Reconstruct tripole Elev D/R value (CH6)
395
                                                        if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125);         // Reconstruct tripole Elev D/R value (CH6)
384
                                                        else if (s_exdata[3] == -125 && s_exdata[6] == -125) PPM_in[6] = 0;     // Reconstruct tripole Elev D/R value (CH6)
396
                                                        else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0);     // Reconstruct tripole Elev D/R value (CH6)
385
                                                        else if (s_exdata[3] == -125 && s_exdata[6] == 125) PPM_in[6] = -125;   // Reconstruct tripole Elev D/R value (CH6)
397
                                                        else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125);   // Reconstruct tripole Elev D/R value (CH6)
Line 386... Line 398...
386
 
398
 
387
 
399
 
388
                                                        if (s_exdata[7] == 125 && s_exdata[8] == -125) PPM_in[9] = -125;        // Reconstruct tripole AIL D/R value (CH9)
400
                                                        if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125);        // Reconstruct tripole AIL D/R value (CH9)
Line 389... Line 401...
389
                                                        else if (s_exdata[7] == -125 && s_exdata[8] == -125) PPM_in[9] = 0;     // Reconstruct tripole AIL D/R value (CH9)
401
                                                        else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0);     // Reconstruct tripole AIL D/R value (CH9)
390
                                                        else if (s_exdata[7] == -125 && s_exdata[8] == 125) PPM_in[9] = 125;    // Reconstruct tripole AIL D/R value (CH9)
402
                                                        else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125);    // Reconstruct tripole AIL D/R value (CH9)
391
 
403
 
Line 404... Line 416...
404
                                                s_exdata[s_excnt] = 125;                                                        // Bit = 1 -> value = 125 (max)
416
                                                s_exdata[s_excnt] = 125;                                                        // Bit = 1 -> value = 125 (max)
405
                                                s_exparity = ~s_exparity;                                                       // Bit = 1 -> Invert parity bit
417
                                                s_exparity = ~s_exparity;                                                       // Bit = 1 -> Invert parity bit
406
                                        }
418
                                        }
Line 407... Line 419...
407
 
419
 
408
                                }
-
 
409
#endif
-
 
410
                                if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
-
 
Line 411... Line -...
411
                                else PPM_diff[index] = 0;
-
 
412
 
420
                                }
413
#ifdef RECEIVER_SPEKTRUM_DX7EXP
-
 
414
                                if (index < 5 ) PPM_in[index] = tmp;                                                            // Update normal potis (CH1-4)
-
 
415
                                else if (index == 5) PPM_in[7] = signal;                                                        // Gear (CH7)
-
 
416
                                else if (index == 7) PPM_in[9] = signal;                                                        // Hover Throttle (CH9)
-
 
417
#elif defined RECEIVER_SPEKTRUM_DX8EXP
421
 
418
                                if (index < 5 ) PPM_in[index] = tmp;                                                            // Update normal potis (CH1-4)
422
                                if (index < 5 ) s_update(index,tmp);                                                            // Update normal potis (CH1-4)
419
                                else if (index == 7) PPM_in[7] = signal;                                                        // R Trim (CH7)
423
                                else if (index == 7) s_update(7,signal);                                                        // R Trim (CH7)
-
 
424
                                else if (index == 5) s_update(8,signal);                                                        // AUX2 (CH8)
420
                                else if (index == 5) PPM_in[8] = signal;                                                        // AUX2 (CH8)
425
                                else if (index == 8) s_update(11,signal);                                                       // AUX3 (CH11)
-
 
426
 
-
 
427
#else
421
                                else if (index == 8) PPM_in[11] = signal;                                                       // AUX3 (CH11)
428
                                if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
422
#else
429
                                else PPM_diff[index] = 0;
423
                                PPM_in[index] = tmp;
430
                                PPM_in[index] = tmp;
424
#endif
431
#endif
425
                        }
432
                        }
Line 451... Line 458...
451
                SpektrumTimer = MIN_FRAMEGAP;
458
                SpektrumTimer = MIN_FRAMEGAP;
452
                }
459
                }
453
   }
460
   }
454
}
461
}
Line -... Line 462...
-
 
462