Subversion Repositories FlightCtrl

Rev

Rev 1506 | 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
 
-