Subversion Repositories FlightCtrl

Rev

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

Rev 1171 Rev 1172
Line 44... Line 44...
44
        // 8-bit
44
        // 8-bit
45
        UCSR1B &= ~(1 << UCSZ12);
45
        UCSR1B &= ~(1 << UCSZ12);
46
        UCSR1C |=  (1 << UCSZ11);
46
        UCSR1C |=  (1 << UCSZ11);
47
        UCSR1C |=  (1 << UCSZ10);
47
        UCSR1C |=  (1 << UCSZ10);
48
        // flush receive buffer explicit
48
        // flush receive buffer explicit
49
        while ( UCSR1A & (1<<RXC1) ) UDR1;
49
        while(UCSR1A & (1<<RXC1)) UDR1;
50
        // enable RX-interrupts at the end
50
        // enable RX-interrupts at the end
51
        UCSR1B |= (1 << RXCIE1);
51
        UCSR1B |= (1 << RXCIE1);
52
        // -- End of USART1 initialisation
52
        // -- End of USART1 initialisation
53
  return;
53
  return;
54
 }
54
 }
Line 149... Line 149...
149
  else
149
  else
150
  {    
150
  {    
151
        bCheckDelay = CheckDelay(FrameTimer);
151
        bCheckDelay = CheckDelay(FrameTimer);
152
        if ( Sync == 0 )
152
        if ( Sync == 0 )
153
            {
153
            {
154
                if ( bCheckDelay )
154
                if(bCheckDelay)
155
                    {
155
                    {
156
                        // nach einer Pause von mind. 7ms erstes Sync-Character gefunden
156
                        // nach einer Pause von mind. 7ms erstes Sync-Character gefunden
157
                        // Zeichen ignorieren, da Bedeutung unbekannt
157
                        // Zeichen ignorieren, da Bedeutung unbekannt
158
                        Sync = 1;
158
                        Sync = 1;
159
                        FrameCnt ++;
159
                        FrameCnt ++;
Line 162... Line 162...
162
                        {
162
                        {
163
                        // Zeichen kam vor Ablauf der 7ms Sync-Pause
163
                        // Zeichen kam vor Ablauf der 7ms Sync-Pause
164
                        // warten auf erstes Sync-Zeichen
164
                        // warten auf erstes Sync-Zeichen
165
                        }
165
                        }
166
                }
166
                }
167
        else if ( (Sync == 1) && !bCheckDelay )
167
        else if((Sync == 1) && !bCheckDelay)
168
            {
168
            {
169
                // zweites Sync-Character ignorieren, Bedeutung unbekannt
169
                // zweites Sync-Character ignorieren, Bedeutung unbekannt
170
                Sync = 2;
170
                Sync = 2;
171
                FrameCnt ++;
171
                FrameCnt ++;
172
                }
172
                }
173
        else if ( (Sync == 2) && !bCheckDelay )
173
        else if((Sync == 2) && !bCheckDelay)
174
            {
174
            {
175
                // Datenbyte high
175
                // Datenbyte high
176
                ByteHigh = c;
176
                ByteHigh = c;
Line 177... Line 177...
177
               
177
               
178
                if (FrameCnt == 2)
178
                if (FrameCnt == 2)
179
                    {
179
                    {
180
                    // is 1st Byte of Channel-data
-
 
181
                       
180
                    // is 1st Byte of Channel-data
182
                        // Frame 1 with Channel 1-7 comming next
181
                        // Frame 1 with Channel 1-7 comming next
183
                        Frame2 = 0;
182
                        Frame2 = 0;
184
                        if ( ByteHigh & 0x80 )
183
                        if(ByteHigh & 0x80)
185
                            {
184
                            {
186
                                // DS9: Frame 2 with Channel 8-9 comming next
185
                                // DS9: Frame 2 with Channel 8-9 comming next
187
                                Frame2 = 1;
186
                                Frame2 = 1;
188
                                }
187
                                }
189
                        }      
188
                        }      
190
                Sync = 3;
189
                Sync = 3;
191
                FrameCnt ++;
190
                FrameCnt ++;
192
                }
191
                }
193
        else if ( (Sync == 3) && !bCheckDelay )
192
        else if((Sync == 3) && !bCheckDelay)
194
            {
193
            {
Line 195... Line 194...
195
                // Datenbyte low
194
                // Datenbyte low
196
               
195
               
Line 203... Line 202...
203
                Channel = (ByteHigh << 8) | c;
202
                Channel = (ByteHigh << 8) | c;
204
                signal = Channel & 0x3ff;
203
                signal = Channel & 0x3ff;
205
                signal -= 0x200;                // Offset, range 0x000..0x3ff?
204
                signal -= 0x200;                // Offset, range 0x000..0x3ff?
206
                signal = signal/3;              // scaling to fit PPM resolution
205
                signal = signal/3;              // scaling to fit PPM resolution
Line 207... Line 206...
207
               
206
               
208
                if (index >= 0  &&  index <= 10)
207
                if(index >= 0  &&  index <= 10)
209
                    {
-
 
210
                                                               
208
                    {
211
                        if(abs(signal - PPM_in[index]) < 6)
-
 
212
                                {
209
                // Stabiles Signal
213
                                if(SenderOkay < 200)
-
 
214
                                        {
-
 
215
                                        SenderOkay += 10;
-
 
216
                                        }
-
 
217
                                }
210
                if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;}
218
                        tmp = (3 * (PPM_in[index]) + signal) / 4;  
211
                tmp = (3 * (PPM_in[index]) + signal) / 4;  
219
                        if(tmp > signal+1)
-
 
220
                                {
-
 
221
                                tmp--;
-
 
222
                                }
-
 
223
                        else
-
 
224
                                {
212
                if(tmp > signal+1) tmp--; else
225
                                if(tmp < signal-1)
-
 
226
                                        {
-
 
227
                                        tmp++;
-
 
228
                                        }
-
 
229
                                }
-
 
230
                        if(SenderOkay >= 195)
-
 
231
                                {
213
                if(tmp < signal-1) tmp++;
232
                                PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
-
 
233
                                }
-
 
234
                        else
-
 
235
                                {
214
                if(SenderOkay >= 180)  PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
236
                                PPM_diff[index] = 0;
-
 
237
                                }
-
 
238
                       
215
                else PPM_diff[index] = 0;
239
                        PPM_in[index] = tmp;
216
                PPM_in[index] = tmp;
240
                        }
217
                        }
241
                }
218
                }
242
        else
219
        else
243
                {
220
                {
Line 246... Line 223...
246
                FrameCnt = 0;
223
                FrameCnt = 0;
247
                Frame2 = 0;
224
                Frame2 = 0;
248
                }
225
                }
Line 249... Line 226...
249
               
226
               
250
        // 16 Bytes per frame
227
        // 16 Bytes per frame
251
        if (FrameCnt >= 16)
228
        if(FrameCnt >= 16)
252
            {
229
            {
253
                // Frame complete
230
                // Frame complete
254
                if ( Frame2 == 0 )
231
                if(Frame2 == 0)
255
                        {
232
                        {
256
                        // Null bedeutet: Neue Daten
233
                        // Null bedeutet: Neue Daten
257
                        // nur beim ersten Frame (CH 0-7) setzen
234
                        // nur beim ersten Frame (CH 0-7) setzen
258
                        NewPpmData = 0;  
235
                        NewPpmData = 0;  
Line 261... Line 238...
261
                // new frame next, nach fruehestens 7ms erwartet
238
                // new frame next, nach fruehestens 7ms erwartet
262
                FrameCnt = 0;
239
                FrameCnt = 0;
263
                Frame2 = 0;
240
                Frame2 = 0;
264
                Sync = 0;
241
                Sync = 0;
265
                }
242
                }
266
 
-
 
267
        // Zeit bis zum nächsten Zeichen messen
243
        // Zeit bis zum nächsten Zeichen messen
268
        FrameTimer = SetDelay (7);
244
        FrameTimer = SetDelay(7);
269
   }
245
   }
270
}  
246
}