Subversion Repositories FlightCtrl

Rev

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

Rev 1868 Rev 2035
Line 1... Line 1...
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
// + Copyright (c) 04.2007 Holger Buss
2
// + Copyright (c) 04.2007 Holger Buss
3
// + Nur für den privaten Gebrauch
3
// + Nur f�r den privaten Gebrauch
4
// + www.MikroKopter.com
4
// + www.MikroKopter.com
5
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
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.
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
8
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
9
// + bzgl. der Nutzungsbedingungen aufzunehmen.
9
// + bzgl. der Nutzungsbedingungen aufzunehmen.
10
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
10
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Best�ckung und Verkauf von Platinen oder Baus�tzen,
11
// + Verkauf von Luftbildaufnahmen, usw.
11
// + Verkauf von Luftbildaufnahmen, usw.
12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
13
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
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
14
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright m�ssen dann beiliegen
15
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
15
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
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"
17
// + auf anderen Webseiten oder sonstigen Medien ver�ffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
18
// + eindeutig als Ursprung verlinkt werden
18
// + eindeutig als Ursprung verlinkt werden
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
20
// + Keine Gew�hr auf Fehlerfreiheit, Vollst�ndigkeit oder Funktion
21
// + Benutzung auf eigene Gefahr
21
// + Benutzung auf eigene Gefahr
22
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
22
// + Wir �bernehmen keinerlei Haftung f�r direkte oder indirekte Personen- oder Sachsch�den
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
24
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
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
25
// + mit unserer Zustimmung zul�ssig
26
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
26
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
27
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
27
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
28
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
28
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
29
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
29
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
30
// + this list of conditions and the following disclaimer.
30
// + this list of conditions and the following disclaimer.
Line 61... Line 61...
61
#include "attitude.h"
61
#include "attitude.h"
62
#include "GPSControl.h"
62
#include "GPSControl.h"
63
#include "flight.h"
63
#include "flight.h"
Line 64... Line 64...
64
 
64
 
65
//-----------------------------------------
-
 
66
#define DDR_SPI DDRB
-
 
67
#define DD_SS   PB4
-
 
68
#define DD_SCK  PB7
-
 
69
#define DD_MOSI PB5
-
 
Line 70... Line 65...
70
#define DD_MISO PB6
65
//-----------------------------------------
-
 
66
 
-
 
67
// for compatibility reasons gcc3.x <-> gcc4.x
71
 
68
// dongfang: Lets try to abandon GCC3.
72
// for compatibility reasons gcc3.x <-> gcc4.x
69
/*
73
#ifndef SPCR
70
#ifndef SPCR
74
#define SPCR   SPCR0
71
#define SPCR   SPCR0
75
#endif
72
#endif
Line 112... Line 109...
112
#define WCOL   WCOL0
109
#define WCOL   WCOL0
113
#endif
110
#endif
114
#ifndef SPI2X
111
#ifndef SPI2X
115
#define SPI2X  SPI2X0
112
#define SPI2X  SPI2X0
116
#endif
113
#endif
-
 
114
*/
117
// -------------------------
115
// -------------------------
-
 
116
#define DDR_SPI DDRB
-
 
117
#define DD_SS   PB4
-
 
118
#define DD_SCK  PB7
-
 
119
#define DD_MOSI PB5
-
 
120
#define DD_MISO PB6
Line 118... Line 121...
118
 
121
 
119
#define SLAVE_SELECT_DDR_PORT   DDRC
122
#define SLAVE_SELECT_DDR_PORT   DDRC
120
#define SLAVE_SELECT_PORT       PORTC
123
#define SLAVE_SELECT_PORT       PORTC
Line 167... Line 170...
167
        SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // Deselect Slave
170
        SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // Deselect Slave
Line 168... Line 171...
168
 
171
 
169
        SPI_TxBuffer = (uint8_t *) &toNaviCtrl; // set pointer to tx-buffer
172
        SPI_TxBuffer = (uint8_t *) &toNaviCtrl; // set pointer to tx-buffer
170
        SPITransferCompleted = 1;
173
        SPITransferCompleted = 1;
171
        // initialize data packet to NaviControl
174
        // initialize data packet to NaviControl
172
        toNaviCtrl.Sync1 = SPI_TXSYNCBYTE1;
175
        toNaviCtrl.sync1 = SPI_TXSYNCBYTE1;
Line 173... Line 176...
173
        toNaviCtrl.Sync2 = SPI_TXSYNCBYTE2;
176
        toNaviCtrl.sync2 = SPI_TXSYNCBYTE2;
174
 
177
 
175
        toNaviCtrl.Command = SPI_CMD_USER;
178
        toNaviCtrl.command = SPI_CMD_USER;
-
 
179
        toNaviCtrl.integralPitch = 0;
176
        toNaviCtrl.IntegralPitch = 0;
180
        toNaviCtrl.integralRoll = 0;
177
        toNaviCtrl.IntegralRoll = 0;
181
        naviCtrlData.serialDataOkay = 0;
Line 178... Line 182...
178
        NCSerialDataOkay = 0;
182
        //NCSerialDataOkay = 0;
Line 179... Line 183...
179
        NCDataOkay = 0;
183
        //NCDataOkay = 0;
180
 
184
 
181
        SPI_RxDataValid = 0;
185
        SPI_RxDataValid = 0;
182
 
186
 
183
        SPI_VersionInfo.Major = VERSION_MAJOR;
187
        //SPI_VersionInfo.Major = VERSION_MAJOR;
Line 184... Line 188...
184
        SPI_VersionInfo.Minor = VERSION_MINOR;
188
        //SPI_VersionInfo.Minor = VERSION_MINOR;
185
        SPI_VersionInfo.Patch = VERSION_PATCH;
189
        //SPI_VersionInfo.Patch = VERSION_PATCH;
186
        SPI_VersionInfo.Compatible = NC_SPI_COMPATIBLE;
190
        //SPI_VersionInfo.Compatible = NC_SPI_COMPATIBLE;
187
}
191
}
188
 
192
 
189
/**********************************************************/
193
/**********************************************************/
190
/*  Update Data transferd by the SPI from/to NaviCtrl     */
194
/*  Update Data transfered by the SPI from/to NaviCtrl     */
191
/**********************************************************/
195
/**********************************************************/
Line 192... Line 196...
192
void UpdateSPI_Buffer(void) {
196
void updateSPI_Buffer(void) {
193
        uint8_t i;
197
        uint8_t i;
194
        int16_t tmp;
198
        int16_t tmp;
195
        cli();
199
        cli();
196
        // stop all interrupts to avoid writing of new data during update of that packet.
200
        // stop all interrupts to avoid writing of new data during update of that packet.
197
 
201
 
198
        // update content of packet to NaviCtrl
202
        // update content of packet to NaviCtrl
-
 
203
        // Scaling?
199
        toNaviCtrl.IntegralPitch = (int16_t) ((10 * angle[PITCH])
204
        toNaviCtrl.integralPitch = (angle[PITCH] / (GYRO_DEG_FACTOR_PITCHROLL/10)); // convert to multiple of 0.1�
-
 
205
        // Scaling?
200
                        / GYRO_DEG_FACTOR_PITCHROLL); // convert to multiple of 0.1°
206
        toNaviCtrl.integralRoll =  (angle[ROLL]   / (GYRO_DEG_FACTOR_PITCHROLL/10)); // convert to multiple of 0.1�
-
 
207
        // Scaling?
201
        toNaviCtrl.IntegralRoll = (int16_t) ((10 * angle[ROLL])
208
        toNaviCtrl.gyroHeading =   (yawGyroHeading / (GYRO_DEG_FACTOR_YAW / 10));     // convert to multiple of 0.1�
202
                        / GYRO_DEG_FACTOR_PITCHROLL); // convert to multiple of 0.1°
209
        // Scaling?
203
        toNaviCtrl.GyroHeading = (int16_t) ((10 * yawGyroHeading)
210
        toNaviCtrl.gyroPitch = rate_ATT[PITCH];
-
 
211
        // Scaling?
204
                        / GYRO_DEG_FACTOR_YAW); // convert to multiple of 0.1°
212
        toNaviCtrl.gyroRoll = rate_ATT[ROLL];
205
        toNaviCtrl.GyroPitch = rate_ATT[PITCH];
-
 
206
        toNaviCtrl.GyroRoll = rate_ATT[ROLL];
-
 
Line 207... Line 213...
207
        toNaviCtrl.GyroYaw = yawRate;
213
        // Scaling?
Line 208... Line 214...
208
        toNaviCtrl.AccPitch = (10 * getAngleEstimateFromAcc(PITCH))
214
        toNaviCtrl.gyroYaw = yawRate;
Line 209... Line 215...
209
                        / GYRO_DEG_FACTOR_PITCHROLL; // convert to multiple of 0.1°
215
        // Scaling?
210
        toNaviCtrl.AccRoll = (10 * getAngleEstimateFromAcc(ROLL))
216
        toNaviCtrl.accPitch = getAngleEstimateFromAcc(PITCH) / (GYRO_DEG_FACTOR_PITCHROLL/10); // convert to multiple of 0.1�
211
                        / GYRO_DEG_FACTOR_PITCHROLL; // convert to multiple of 0.1°
217
        // Scaling?
212
 
218
        toNaviCtrl.AccRoll =  getAngleEstimateFromAcc(ROLL)  / (GYRO_DEG_FACTOR_PITCHROLL/10);
213
 
219
 
214
        // TODO: What are these little bastards?
220
        // TODO: What are these little bastards?
215
 
221
 
216
        averageAcc[PITCH] = averageAcc[ROLL] = averageAccCount = 0;
222
        averageAcc[PITCH] = averageAcc[ROLL] = averageAccCount = 0;
217
 
223
 
218
        switch (toNaviCtrl.Command) {
224
        switch (toNaviCtrl.command) {
219
        case SPI_CMD_USER:
225
        case SPI_CMD_USER:
Line 220... Line 226...
220
                for (i = 0; i < sizeof(dynamicParams.UserParams); i++) {
226
                for (i = 0; i < sizeof(dynamicParams.userParams); i++) {
221
                        toNaviCtrl.Param.Byte[i] = dynamicParams.UserParams[i];
227
                        toNaviCtrl.param.asByte[i] = dynamicParams.userParams[i];
222
                }
228
                }