Subversion Repositories FlightCtrl

Rev

Rev 2334 | Rev 2341 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2334 Rev 2340
Line 56... Line 56...
56
 
56
 
57
#include "rc.h"
57
#include "rc.h"
58
#include "main.h"
58
#include "main.h"
Line 59... Line 59...
59
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt
59
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt
60
 
60
 
61
volatile int PPM_in[26];
61
volatile int PPM_in[26+4];
62
volatile int PPM_diff[26];  // das diffenzierte Stick-Signal
62
volatile int PPM_diff[26+4];  // das diffenzierte Stick-Signal
63
volatile char Channels,tmpChannels = 0;
63
volatile char Channels,tmpChannels = 0;
Line 64... Line 64...
64
volatile unsigned char NewPpmData = 1;
64
volatile unsigned char NewPpmData = 1;
65
unsigned int PPM_Neutral = 466;
65
unsigned int PPM_Neutral = 466;
66
 
66
 
67
//############################################################################
67
//############################################################################
68
// Clear the values
68
// Clear the values
69
void rc_sum_init (void)
69
void rc_sum_init (void)
70
//############################################################################
70
//############################################################################
71
{
71
{
72
 unsigned char i;
72
 unsigned char i;
73
 for(i=0;i<26;i++)
73
 for(i=0;i<sizeof(PPM_in);i++)
74
  {
74
  {
75
   if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127;
75
   if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127;
Line 104... Line 104...
104
        if(index >= 4)  NewPpmData = 0;  // Null bedeutet: Neue Daten
104
        if(index >= 4)  NewPpmData = 0;  // Null bedeutet: Neue Daten
105
        index = 1;
105
        index = 1;
106
        }
106
        }
107
        else
107
        else
108
        {
108
        {
109
        if(index < 13)
109
        if(index < 13+4)
110
            {
110
            {
111
            if((signal > 250) && (signal < 687))
111
            if((signal > 250) && (signal < 687))
112
                {
112
                {
113
                signal -= PPM_Neutral;
113
                signal -= PPM_Neutral;
114
                // Stabiles Signal
114
                // Stabiles Signal
Line 138... Line 138...
138
 }
138
 }
139
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
139
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
140
 else
140
 else
141
 {
141
 {
142
        static unsigned int AltICR=0;
142
        static unsigned int AltICR=0;
143
    static int ppm_in[13];
143
    static int ppm_in[13+4];
144
    static int ppm_diff[13];
144
    static int ppm_diff[13+4];
145
    static int old_ppm_in[13];
145
    static int old_ppm_in[13+4];
146
    static int old_ppm_diff[13];
146
    static int old_ppm_diff[13+4];
147
    signed int signal = 0,tmp;
147
    signed int signal = 0,tmp;
148
        static unsigned char index, okay_cnt = 0;
148
        static unsigned char index, okay_cnt = 0;
149
        signal = (unsigned int) ICR1 - AltICR;
149
        signal = (unsigned int) ICR1 - AltICR;
150
        AltICR = ICR1;
150
        AltICR = ICR1;
151
    //Syncronisationspause? (3.52 ms < signal < 25.6 ms)
151
    //Syncronisationspause? (3.52 ms < signal < 25.6 ms)
Line 155... Line 155...
155
        if(tmpChannels >= 4 && Channels == tmpChannels)
155
        if(tmpChannels >= 4 && Channels == tmpChannels)
156
                 {
156
                 {
157
          if(okay_cnt > 10)
157
          if(okay_cnt > 10)
158
                   {
158
                   {
159
                   NewPpmData = 0;  // Null bedeutet: Neue Daten
159
                   NewPpmData = 0;  // Null bedeutet: Neue Daten
160
                   for(index = 0; index < 13; index++)
160
                   for(index = 0; index < 13+4; index++)
161
                    {
161
                    {
162
                         if(okay_cnt > 30)
162
                         if(okay_cnt > 30)
163
                          {
163
                          {
164
                           old_ppm_in[index] = PPM_in[index];
164
                           old_ppm_in[index] = PPM_in[index];
165
                           old_ppm_diff[index] = PPM_diff[index];
165
                           old_ppm_diff[index] = PPM_diff[index];
Line 178... Line 178...
178
        index = 1;
178
        index = 1;
179
        if(!MotorenEin) Channels = tmpChannels;
179
        if(!MotorenEin) Channels = tmpChannels;
180
        }
180
        }
181
        else
181
        else
182
        {
182
        {
183
        if(index < 13)
183
        if(index < 13+4)
184
            {
184
            {
185
            if((signal > 250) && (signal < 687))
185
            if((signal > 250) && (signal < 687))
186
                {
186
                {
187
                signal -= PPM_Neutral;
187
                signal -= PPM_Neutral;
188
                // Stabiles Signal
188
                // Stabiles Signal
Line 219... Line 219...
219
                  if(index == 20)
219
                  if(index == 20)
220
                  {
220
                  {
221
            unsigned char i;
221
            unsigned char i;
222
            ROT_ON;
222
            ROT_ON;
223
                    index = 30;
223
                    index = 30;
224
            for(i=0;i<13;i++) // restore from older data
224
            for(i=0;i<13+4;i++) // restore from older data
225
                         {
225
                         {
226
                      PPM_in[i] = old_ppm_in[i];
226
                      PPM_in[i] = old_ppm_in[i];
227
                      PPM_diff[i] = 0;
227
                      PPM_diff[i] = 0;
228
//                        okay_cnt /= 2;
228
//                        okay_cnt /= 2;
229
                 }
229
                 }