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 | } |