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