7,7 → 7,7 |
|
#include "main.h" |
|
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_az, UBat = 100; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
26,9 → 26,10 |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
//Free Running Mode, Division Factor 128, Interrupt on |
ADMUX = 0; // Referenz extern, Right Adjust, ADC0 |
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
// Single Conversion, Division Factor 128, Interrupt on |
// ~12 kSPS |
} |
|
void SucheLuftruckOffset(void) |
57,37 → 58,35 |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static unsigned char state = 0; |
static unsigned int gier1, roll1, nick1; |
ANALOG_OFF; |
|
switch(state++) |
{ |
case 0: |
gier1 = ADC; |
kanal = 1; |
ADMUX = 1; |
ZaehlMessungen++; |
break; |
case 1: |
roll1 = ADC; |
kanal = 2; |
ADMUX = 2; |
break; |
case 2: |
nick1 = ADC; |
kanal = 4; |
ADMUX = 4; |
break; |
case 3: |
UBat = (3 * UBat + ADC / 3) / 4; |
kanal = 6; |
ADMUX = 6; |
break; |
case 4: |
Aktuell_ay = acc_neutral.Y - ADC; |
AdWertAccRoll = Aktuell_ay; |
kanal = 7; |
AdWertAccRoll = acc_neutral.Y - ADC; |
ADMUX = 7; |
break; |
case 5: |
Aktuell_ax = ADC - acc_neutral.X; |
AdWertAccNick = Aktuell_ax; |
kanal = 0; |
AdWertAccNick = ADC - acc_neutral.X; |
ADMUX = 0; |
break; |
case 6: |
#if (PlatinenVersion == 10) |
95,7 → 94,7 |
#else |
AdWertGier = ADC + gier1; |
#endif |
kanal = 1; |
ADMUX = 1; |
break; |
case 7: |
#if (PlatinenVersion == 10) |
103,7 → 102,7 |
#else |
AdWertRoll = ADC + roll1; |
#endif |
kanal = 2; |
ADMUX = 2; |
break; |
case 8: |
#if (PlatinenVersion == 10) |
111,11 → 110,11 |
#else |
AdWertNick = ADC + nick1; |
#endif |
kanal = 5; |
ADMUX = 5; |
break; |
case 9: |
AdWertAccHoch = (signed int) ADC - acc_neutral.Z; |
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
AdWertAccHoch += abs(AdWertAccRoll) / 4 + abs(AdWertAccNick) / 4; |
if(AdWertAccHoch > 1) |
{ |
if(acc_neutral.Z < 800) acc_neutral.Z+= 0.02; |
127,8 → 126,8 |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = 3; |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämpfen |
ADMUX = 3; |
break; |
case 10: |
tmpLuftdruck += ADC; |
141,14 → 140,13 |
HoehenWert = StartLuftdruck - Luftdruck; |
tmpLuftdruck = 0; |
} |
kanal = 0; |
ADMUX = 0; |
state = 0; |
break; |
default: |
kanal = 0; |
ADMUX = 0; |
state = 0; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
if (state != 0) ANALOG_ON; // Nach einer kompletten Runde ADC nicht neu starten. Neustart wird in der fc.c initiiert. |
} |