Subversion Repositories FlightCtrl

Rev

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

Rev 1356 Rev 1377
Line 11... Line 11...
11
 
11
 
12
#include "rc.h"
12
#include "rc.h"
13
#include "main.h"
13
#include "main.h"
Line 14... Line 14...
14
//#define ACT_S3D_SUMMENSIGNAL
14
//#define ACT_S3D_SUMMENSIGNAL
15
 
15
 
16
volatile int PPM_in[11];
16
volatile int PPM_in[26];
17
volatile int PPM_diff[11];  // das diffenzierte Stick-Signal
17
volatile int PPM_diff[26];  // das diffenzierte Stick-Signal
Line 18... Line 18...
18
volatile char Channels,tmpChannels = 0;
18
volatile char Channels,tmpChannels = 0;
19
volatile unsigned char NewPpmData = 1;
19
volatile unsigned char NewPpmData = 1;
20
 
20
 
21
//############################################################################
21
//############################################################################
22
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
22
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
23
//Capture Funktion benutzt:
23
//Capture Funktion benutzt:
-
 
24
void rc_sum_init (void)
-
 
25
//############################################################################
-
 
26
{
-
 
27
 unsigned char i;
-
 
28
 for(i=0;i<26;i++)
-
 
29
  {
24
void rc_sum_init (void)
30
   PPM_in[i] = 0;
25
//############################################################################
31
   PPM_diff[i] = 0;
26
{
32
  }
27
#ifndef ACT_S3D_SUMMENSIGNAL
33
#ifndef ACT_S3D_SUMMENSIGNAL
28
        TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
34
        TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
Line 57... Line 63...
57
        if(index >= 4)  NewPpmData = 0;  // Null bedeutet: Neue Daten
63
        if(index >= 4)  NewPpmData = 0;  // Null bedeutet: Neue Daten
58
        index = 1;             
64
        index = 1;             
59
        }
65
        }
60
        else
66
        else
61
        {
67
        {
62
        if(index < 10)
68
        if(index < 13)
63
            {
69
            {
64
            if((signal > 250) && (signal < 687))
70
            if((signal > 250) && (signal < 687))
65
                {
71
                {
66
                signal -= 466;
72
                signal -= 466;
67
                // Stabiles Signal
73
                // Stabiles Signal
Line 81... Line 87...
81
        }
87
        }
82
 }
88
 }
83
 else
89
 else
84
 {
90
 {
85
        static unsigned int AltICR=0;
91
        static unsigned int AltICR=0;
86
    static int ppm_in[11];
92
    static int ppm_in[13];
87
    static int ppm_diff[11];  
93
    static int ppm_diff[13];  
88
    static int old_ppm_in[11];
94
    static int old_ppm_in[13];
89
    static int old_ppm_diff[11];  
95
    static int old_ppm_diff[13];  
90
    signed int signal = 0,tmp;
96
    signed int signal = 0,tmp;
91
        static unsigned char index, okay_cnt = 0;              
97
        static unsigned char index, okay_cnt = 0;              
92
        signal = (unsigned int) ICR1 - AltICR;         
98
        signal = (unsigned int) ICR1 - AltICR;         
93
        AltICR = ICR1; 
99
        AltICR = ICR1; 
94
    //Syncronisationspause? (3.52 ms < signal < 25.6 ms)
100
    //Syncronisationspause? (3.52 ms < signal < 25.6 ms)
Line 98... Line 104...
98
        if(tmpChannels >= 4 && Channels == tmpChannels)  
104
        if(tmpChannels >= 4 && Channels == tmpChannels)  
99
                 {
105
                 {
100
          if(okay_cnt > 10)
106
          if(okay_cnt > 10)
101
                   {
107
                   {
102
                   NewPpmData = 0;  // Null bedeutet: Neue Daten
108
                   NewPpmData = 0;  // Null bedeutet: Neue Daten
103
                   for(index = 0; index < 11; index++)
109
                   for(index = 0; index < 13; index++)
104
                    {
110
                    {
105
                         if(okay_cnt > 30)
111
                         if(okay_cnt > 30)
106
                          {
112
                          {
107
                           old_ppm_in[index] = PPM_in[index];
113
                           old_ppm_in[index] = PPM_in[index];
108
                           old_ppm_diff[index] = PPM_diff[index];
114
                           old_ppm_diff[index] = PPM_diff[index];
Line 121... Line 127...
121
        index = 1;             
127
        index = 1;             
122
        if(!MotorenEin) Channels = tmpChannels;
128
        if(!MotorenEin) Channels = tmpChannels;
123
        }
129
        }
124
        else
130
        else
125
        {
131
        {
126
        if(index < 10)
132
        if(index < 13)
127
            {
133
            {
128
            if((signal > 250) && (signal < 687))
134
            if((signal > 250) && (signal < 687))
129
                {
135
                {
130
                signal -= 466;
136
                signal -= 466;
131
                // Stabiles Signal
137
                // Stabiles Signal
Line 153... Line 159...
153
                  if(index == 20)
159
                  if(index == 20)
154
                  {
160
                  {
155
            unsigned char i;
161
            unsigned char i;
156
            ROT_ON;
162
            ROT_ON;
157
                    index = 30;
163
                    index = 30;
158
            for(i=0;i<11;i++) // restore from older data
164
            for(i=0;i<13;i++) // restore from older data
159
                         {
165
                         {
160
                      PPM_in[i] = old_ppm_in[i];
166
                      PPM_in[i] = old_ppm_in[i];
161
                      PPM_diff[i] = 0;
167
                      PPM_diff[i] = 0;
162
//                        okay_cnt /= 2;
168
//                        okay_cnt /= 2;
163
                 }
169
                 }
Line 177... Line 183...
177
        static unsigned int AltICR=0;
183
        static unsigned int AltICR=0;
178
    signed int signal = 0,tmp;
184
    signed int signal = 0,tmp;
179
        static int index;              
185
        static int index;              
Line 180... Line 186...
180
       
186
       
181
        signal = (unsigned int) ICR1 - AltICR;         
187
        signal = (unsigned int) ICR1 - AltICR;         
182
DebugOut.Analog[16] = signal;
188
//DebugOut.Analog[16] = signal;
183
        signal /= 2;
189
        signal /= 2;
184
        AltICR = ICR1; 
190
        AltICR = ICR1; 
185
    //Syncronisationspause?
191
    //Syncronisationspause?
186
        if((signal > 1100*2) && (signal < 8000*2))       
192
        if((signal > 1100*2) && (signal < 8000*2))       
187
        {
193
        {
188
        if(index >= 4)  NewPpmData = 0;  // Null bedeutet: Neue Daten
194
        if(index >= 4)  NewPpmData = 0;  // Null bedeutet: Neue Daten
189
        index = 1;             
195
        index = 1;             
190
        }
196
        }
191
        else
197
        else
192
        {
198
        {
193
        if(index < 10)
199
        if(index < 13)
194
            {
200
            {
195
            if((signal > 250) && (signal < 687*2))
201
            if((signal > 250) && (signal < 687*2))
196
                {
202
                {
197
                signal -= 962;
203
                signal -= 962;