Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 858 → Rev 887

/branches/MicroMag3_Nick666/trunc/analog.c
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,24 → 110,24
#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;
case 9:
AdWertAccHoch = (signed int) ADC - acc_neutral.Z;
AdWertAccHoch += abs(AdWertAccRoll) / 4 + abs(AdWertAccNick) / 4;
if(AdWertAccHoch > 1)
{
if(acc_neutral.Z < 800) acc_neutral.Z+= 0.02;
if(acc_neutral.Z < 800) acc_neutral.Z += 0.02;
}
else if(AdWertAccHoch < -1)
{
if(acc_neutral.Z > 600) acc_neutral.Z-= 0.02;
if(acc_neutral.Z > 600) acc_neutral.Z -= 0.02;
}
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.
}