Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 308 → Rev 309

/branches/MergedVersionsByOsiair/alpha/v060JokoGPSpakoxdaMM3/spi.c
242,23 → 242,23
 
if (MessungFertig == 0)
{
PORTD &= ~(1<<PB5); //SS auf low
PORTD &= ~(1<<PB3); //SS auf low
 
PORTD |= (1<<PB3); //Reset auf high
PORTD |= (1<<PB8); //Reset auf high
for(t=0;t<5;t++); //5 Zyklen warten
PORTD &= ~(1<<PB3); //Reset auf low
PORTD &= ~(1<<PB8); //Reset auf low
 
dontCare = (int)spiTransferByte(0x40+axis); // Achse + Mess. Kommando /512
 
PORTD |= (1<<PB5); //SS auf high
PORTD |= (1<<PB3); //SS auf high
MessungFertig = 1;
}
 
if (bit_is_set(PIND,PINB4) && MessungFertig == 1) // Warten bis Messung fertig
{
PORTD &= ~(1<<PB5); //SS auf low
PORTD &= ~(1<<PB3); //SS auf low
Data=spiTransferWord(0x00);
PORTD |= (1<<PB5); //SS auf high
PORTD |= (1<<PB3); //SS auf high
MessungFertig = 0;
return (Data);
}
279,18 → 279,18
int Data=0;
char dontCare; // For a reading we don't care about
 
PORTD &= ~(1<<PB5); //SS auf low
PORTD &= ~(1<<PB3); //SS auf low
 
PORTD |= (1<<PB3); //Reset auf high
PORTD |= (1<<PB8); //Reset auf high
for(t=0;t<5;t++); //5 Zyklen warten
PORTD &= ~(1<<PB3); //Reset auf low
PORTD &= ~(1<<PB8); //Reset auf low
dontCare = (int)spiTransferByte(0x40+axis); // Achse + Mess. Kommando /512
 
PORTD |= (1<<PB5); //SS auf high
PORTD |= (1<<PB3); //SS auf high
 
while(!bit_is_set(PIND,PINB4)) // Warten bis Messung fertig
 
PORTD &= ~(1<<PB5); //SS auf low
PORTD &= ~(1<<PB3); //SS auf low
Data=spiTransferWord(0x00);
PORTD |= (1<<PB5); //SS auf high
 
/branches/MergedVersionsByOsiair/alpha/v060JokoKompassNick666MM3Acc/compass.c
140,7 → 140,7
cos_roll = cos_f(MM3.RollGrad);
// Neigungskompensation
x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
x_corr = (cos_nick * MM3.x_axis) - (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
y_corr = ((cos_roll * MM3.y_axis) + (sin_roll * MM3.z_axis));
// Winkelberechnung
/branches/MergedVersionsByOsiair/alpha/v060JokoKompassNick666MM3Acc/timer0.c
48,8 → 48,15
 
if (!cntKompass--) // Aufruf mit 25 Hz
{
KompassValue = MM3_heading();
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
KompassValue = (MM3_heading());
 
if (KompassValue < 0 ) { KompassValue = 360+MM3_heading();}
if (KompassValue > 359) { KompassValue = 359;}
 
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360);
 
cntKompass = 320;
}
}
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3ACC/compass.c
140,7 → 140,9
cos_roll = cos_f(MM3.RollGrad);
// Neigungskompensation
x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
//x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
x_corr = (cos_nick * MM3.x_axis) - (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
y_corr = ((cos_roll * MM3.y_axis) + (sin_roll * MM3.z_axis));
// Winkelberechnung
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3ACC/fc.c
701,8 → 701,8
DebugOut.Analog[5] = HoehenWert;
DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
DebugOut.Analog[7] = GasMischanteil;
DebugOut.Analog[8] = KompassRichtung;
DebugOut.Analog[9] = KompassValue;
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[9] = KompassRichtung;
DebugOut.Analog[10] = MM3_heading();
 
 
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3ACC/timer0.c
60,8 → 60,12
 
if (!cntKompass--) // Aufruf mit 25 Hz
{
KompassValue = MM3_heading();
// KompassValue += 180;
KompassValue = (MM3_heading());
 
if (KompassValue < 0 ) { KompassValue = 380+MM3_heading();}
if (KompassValue > 359) { KompassValue = 359;}
 
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360);
 
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3Gyro/compass.c
14,6 → 14,7
*/
 
#include "main.h"
#include "math.h"
 
MM3_struct MM3;
 
63,8 → 64,8
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI)
case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in °
MM3.NickGrad = asin_i((float)Aktuell_ax/220*200);
MM3.RollGrad = asin_i((float)Aktuell_ay/220*200);
MM3.NickGrad = IntegralNick/(120*8);
MM3.RollGrad = IntegralRoll/(120*8);
MM3.AXIS = MM3_X;
MM3.STATE = MM3_RESET;
134,10 → 135,10
signed int heading;
// Berechung von sinus und cosinus
sin_nick = sin_i(MM3.NickGrad);
cos_nick = cos_i(MM3.NickGrad);
sin_roll = sin_i(MM3.RollGrad);
cos_roll = cos_i(MM3.RollGrad);
sin_nick = sin_f(MM3.NickGrad);
cos_nick = cos_f(MM3.NickGrad);
sin_roll = sin_f(MM3.RollGrad);
cos_roll = cos_f(MM3.RollGrad);
// Neigungskompensation
x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3Gyro/fc.c
284,9 → 284,9
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void DefaultKonstanten1(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_NICK] = 3;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GAS] = 1;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
328,9 → 328,9
 
void DefaultKonstanten2(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_NICK] = 3;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GAS] = 1;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
702,12 → 702,17
DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
DebugOut.Analog[7] = GasMischanteil;
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[12] = MM3_heading();
DebugOut.Analog[9] = MM3.x_axis;
DebugOut.Analog[10] = MM3.y_axis;
DebugOut.Analog[11] = MM3.z_axis;
DebugOut.Analog[9] = KompassRichtung;
DebugOut.Analog[10] = MM3_heading();
 
 
 
//DebugOut.Analog[9] = MM3.x_axis;
//DebugOut.Analog[10] = MM3.y_axis;
//DebugOut.Analog[11] = MM3.z_axis;
//DebugOut.Analog[13] = KompassRichtung;
 
 
}
 
 
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3Gyro/flight-ctrl_mega644_v0_60.aws
1,0 → 0,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v60SalvoKompassGyro\main.c" Position="322 71 1034 624" LineCol="17 0" State="Maximized"/><File00001 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v60SalvoKompassGyro\compass.c" Position="333 69 1045 622" LineCol="51 0" State="Maximized"/><File00002 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v60SalvoKompassGyro\math.c" Position="381 136 931 508" LineCol="229 0" State="Maximized"/><File00003 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v60SalvoKompassGyro\analog.c" Position="336 71 1182 830" LineCol="0 0" State="Maximized"/></Files></AVRWorkspace>
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\v60SalvoKompassGyro\main.c" Position="320 71 1032 624" LineCol="116 0" State="Maximized"/><File00001 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\v60SalvoKompassGyro\compass.c" Position="330 67 1396 826" LineCol="128 0" State="Maximized"/><File00002 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\v60SalvoKompassGyro\math.c" Position="375 132 925 504" LineCol="161 0" State="Maximized"/><File00003 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\v60SalvoKompassGyro\analog.c" Position="336 71 1182 830" LineCol="106 0" State="Maximized"/></Files></AVRWorkspace>
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3Gyro/math.c
182,8 → 182,12
return u.f;
}
 
// Kosinusfunktion im Gradmaß
float cos_f(signed int winkel)
{
return (sin_f(90-winkel));
}
 
 
// Sinusfunktion im Gradmaß
float sin_f(signed int winkel)
{
210,13 → 214,7
return (sinus*m*n);
}
 
// Kosinusfunktion im Gradmaß
float cos_f(signed int winkel)
{
return (sin_f(90-winkel));
}
 
 
const uint8_t pgm_asin[201] PROGMEM = {0,0,1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,12,12,12,12,13,13,13,14,14,14,14,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,20,20,20,20,21,21,21,22,22,22,23,23,23,24,24,24,25,25,25,25,26,26,26,27,27,27,28,28,28,29,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,35,35,35,36,36,37,37,37,38,38,38,39,39,39,40,40,41,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,49,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,62,62,63,64,64,65,66,66,67,68,68,69,70,71,72,73,74,75,76,77,79,80,82,84,90};
 
// Akurssinusfunktion im Gradmaß
229,4 → 227,3
return (pgm_read_byte(&pgm_asin[i]) * m);
}
 
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3Gyro/timer0.c
60,8 → 60,15
 
if (!cntKompass--) // Aufruf mit 25 Hz
{
KompassValue = MM3_heading();
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
KompassValue = (MM3_heading());
 
if (KompassValue < 0 ) { KompassValue = 380+MM3_heading();}
if (KompassValue > 359) { KompassValue = 359;}
 
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360);
 
cntKompass = 320;
}
}
/branches/MergedVersionsByOsiair/alpha/v060SalvoKompassNick666MM3Gyro/timer0.h
16,3 → 16,4
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
 
/branches/MergedVersionsByOsiair/alpha/v064JokoGPSNick666MM3Acc/compass.c
63,8 → 63,8
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI)
case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in °
MM3.NickGrad = asin_i((float)Aktuell_ax/EE_Parameter.UserParam1*200);
MM3.RollGrad = asin_i((float)Aktuell_ay/EE_Parameter.UserParam2*200);
MM3.NickGrad = asin_i((float)Aktuell_ax/220*200);
MM3.RollGrad = asin_i((float)Aktuell_ay/220*200);
MM3.AXIS = MM3_X;
MM3.STATE = MM3_RESET;
140,7 → 140,9
cos_roll = cos_f(MM3.RollGrad);
// Neigungskompensation
x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
//x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
x_corr = (cos_nick * MM3.x_axis) - (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick);
y_corr = ((cos_roll * MM3.y_axis) + (sin_roll * MM3.z_axis));
// Winkelberechnung
/branches/MergedVersionsByOsiair/alpha/v064JokoGPSNick666MM3Acc/flight-ctrl_mega644_v0_64.aws
1,0 → 0,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v064JokoGPSNick666Acc\main.c" Position="343 108 875 484" LineCol="155 0" State="Maximized"/><File00001 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v064JokoGPSNick666Acc\compass.c" Position="333 69 1045 622" LineCol="25 0" State="Maximized"/><File00002 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v064JokoGPSNick666Acc\compass.h" Position="368 130 914 498" LineCol="0 0" State="Maximized"/><File00003 Name="E:\hubi\ufo\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\alpha\v064JokoGPSNick666Acc\fc.c" Position="336 71 1182 830" LineCol="834 0" State="Maximized"/></Files></AVRWorkspace>
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\Flight-Ctrl_V0_64_3_GPS_work_Jochenaccvonhand\main.c" Position="344 108 876 484" LineCol="155 0" State="Maximized"/><File00001 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\Flight-Ctrl_V0_64_3_GPS_work_Jochenaccvonhand\compass.c" Position="336 71 1048 624" LineCol="25 63" State="Maximized"/><File00002 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\Flight-Ctrl_V0_64_3_GPS_work_Jochenaccvonhand\compass.h" Position="371 132 917 500" LineCol="0 0" State="Maximized"/><File00003 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\Flight-Ctrl_V0_64_3_GPS_work_Jochenaccvonhand\fc.c" Position="330 67 1042 620" LineCol="834 0" State="Maximized"/><File00004 Name="E:\hubi\ufo\mickrokopter\a Versions\eigene versionen\Kompass + GPS\Flight-Ctrl_V0_64_3_GPS_work_Jochenaccvonhand\analog.c" Position="428 182 978 554" LineCol="0 0" State="Maximized"/></Files></AVRWorkspace>
/branches/MergedVersionsByOsiair/alpha/v064JokoGPSNick666MM3Acc/timer0.c
3,11 → 3,16
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int beeptime = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
unsigned int BeepMuster = 0xffff;
int ServoValue = 0;
 
/*Salvo 8.9.2007
volatile uint8_t Kompass_Neuer_Wert= 0;
volatile unsigned int Kompass_Value_Old = 0;
// Salvo End
//Salvo 21.9.2007
short unsigned int Kompass_present= 0; //>0 bedeutet dass der Kompass vorhanden ist
// Salvo End */
enum {
STOP = 0,
CK = 1,
23,16 → 28,17
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
unsigned char pieper_ein = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
// if (Kompass_present > 0) Kompass_present--; //Runterzaehlen. Wenn 0 ist der Kompass nicht vorhanden
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
87,15 → 93,21
 
if (!cntKompass--) // Aufruf mit 25 Hz
{
KompassValue = MM3_heading();
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
KompassValue = (MM3_heading());
 
if (KompassValue < 0 ) { KompassValue = 380+MM3_heading();}
if (KompassValue > 359) { KompassValue = 359;}
 
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360);
 
cntKompass = 320;
}
}
}
 
//}
}
 
 
void Timer_Init(void)
162,6 → 174,7
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
//DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}