Subversion Repositories FlightCtrl

Rev

Rev 1179 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1179 Rev 1180
Line 1... Line -...
1
/*#######################################################################################
-
 
2
Decodieren eines RC Summen Signals
-
 
3
#######################################################################################*/
-
 
4
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5
// + Copyright (c) 04.2007 Holger Buss
2
// + Copyright (c) 04.2007 Holger Buss
6
// + only for non-profit use
3
// + Nur für den privaten Gebrauch
7
// + www.MikroKopter.com
4
// + www.MikroKopter.com
8
// + see the File "License.txt" for further Informations
-
 
9
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
6
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
-
 
7
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
-
 
8
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
-
 
9
// + bzgl. der Nutzungsbedingungen aufzunehmen.
-
 
10
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
-
 
11
// + Verkauf von Luftbildaufnahmen, usw.
10
 
-
 
-
 
12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
13
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
-
 
14
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
-
 
15
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
16
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
-
 
17
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
-
 
18
// + eindeutig als Ursprung verlinkt werden
-
 
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
20
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
-
 
21
// + Benutzung auf eigene Gefahr
-
 
22
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
-
 
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
24
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
-
 
25
// + mit unserer Zustimmung zulässig
-
 
26
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
27
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
-
 
28
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
29
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
-
 
30
// + this list of conditions and the following disclaimer.
-
 
31
// +   * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
-
 
32
// +     from this software without specific prior written permission.
-
 
33
// +   * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
-
 
34
// +     for non-commercial use (directly or indirectly)
-
 
35
// +     Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
-
 
36
// +     with our written permission
-
 
37
// +   * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
-
 
38
// +     clearly linked as origin
-
 
39
// +   * porting to systems other than hardware from www.mikrokopter.de is not allowed
-
 
40
// +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-
 
41
// +  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-
 
42
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-
 
43
// +  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-
 
44
// +  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-
 
45
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-
 
46
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-
 
47
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-
 
48
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-
 
49
// +  POSSIBILITY OF SUCH DAMAGE.
-
 
50
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11
#include <stdlib.h>
51
#include <stdlib.h>
12
#include <avr/io.h>
52
#include <avr/io.h>
13
#include <avr/interrupt.h>
53
#include <avr/interrupt.h>
Line 14... Line 54...
14
 
54
 
Line 41... Line 81...
41
        // set as output
81
        // set as output
42
        DDRD |= (1<<DDD5)|(1<<DDD4);
82
        DDRD |= (1<<DDD5)|(1<<DDD4);
43
        // low level
83
        // low level
44
        PORTD &= ~((1<<PORTD5)|(1<<PORTD4));
84
        PORTD &= ~((1<<PORTD5)|(1<<PORTD4));
Line 45... Line 85...
45
 
85
 
46
        // PD3 can't be used in FC 1.1 if 2nd UART is activated
86
        // PD3 can't be used if 2nd UART is activated
47
        // because TXD1 is at that port
87
        // because TXD1 is at that port
48
        if(BoardRelease == 10)
88
        if(CPUType != ATMEGA644P)
49
        {
89
        {
50
                DDRD |= (1<<PORTD3);
90
                DDRD |= (1<<PORTD3);
51
                PORTD &= ~(1<<PORTD3);
91
                PORTD &= ~(1<<PORTD3);
Line 149... Line 189...
149
                signal -= 466; // offset of 1.4912 ms ??? (469 * 3.2µs = 1.5008 ms)
189
                signal -= 466; // offset of 1.4912 ms ??? (469 * 3.2µs = 1.5008 ms)
150
                // check for stable signal
190
                // check for stable signal
151
                if(abs(signal-PPM_in[index]) < 6)
191
                if(abs(signal-PPM_in[index]) < 6)
152
                {
192
                {
153
                                        if(RC_Quality < 200) RC_Quality +=10;
193
                                        if(RC_Quality < 200) RC_Quality +=10;
-
 
194
                                        else RC_Quality = 200;
154
                                }
195
                                }
155
                                // calculate exponential history for signal
196
                                // calculate exponential history for signal
156
                tmp = (3 * (PPM_in[index]) + signal) / 4;
197
                tmp = (3 * (PPM_in[index]) + signal) / 4;
157
                if(tmp > signal+1) tmp--; else
198
                if(tmp > signal+1) tmp--; else
158
                if(tmp < signal-1) tmp++;
199
                if(tmp < signal-1) tmp++;
Line 161... Line 202...
161
                else PPM_diff[index] = 0;
202
                else PPM_diff[index] = 0;
162
                PPM_in[index] = tmp; // update channel value
203
                PPM_in[index] = tmp; // update channel value
163
            }
204
            }
164
            index++; // next channel
205
            index++; // next channel
165
            // demux sum signal for channels 5 to 7 to J3, J4, J5
206
            // demux sum signal for channels 5 to 7 to J3, J4, J5
166
                if(index == 5) PORTD |= (1<<PORTD5); else PORTD &= ~(1<<PORTD5);
207
                if(index == 5) J3HIGH; else J3LOW;
167
                if(index == 6) PORTD |= (1<<PORTD4); else PORTD &= ~(1<<PORTD4);
208
                if(index == 6) J4HIGH; else J3LOW;
168
                if(BoardRelease == 10)
209
                if(CPUType != ATMEGA644P) // not used as TXD1
169
                {
210
                {
170
                                if(index == 7) PORTD |= (1<<PORTD3); else PORTD &= ~(1<<PORTD3);
211
                                if(index == 7) J5HIGH; else J5LOW;
171
                }
212
                }
172
        }
213
        }
173
        }
214
        }
174
        if(RC_Quality) RC_Quality--;
215
        if(RC_Quality) RC_Quality--;
175
}
216
}