Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1226 → Rev 1286

/branches/V0.74d_ACC-HH_MartinR/analog.c
81,7 → 81,7
Delay_ms_Mess(70);
}
 
/*
/* // MartinR: so war es
0 n
1 r
2 g
102,6 → 102,25
17 L
*/
 
/* MartinR : geändert
0 n
1 r
2 g
3 L
4 n
5 r
6 y
7 x
8 n
9 r
10 g
11 L
12 n
13 r
14 u
15 z
*/
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
109,7 → 128,11
{
static unsigned char kanal=0,state = 0;
static signed int gier1, roll1, nick1, nick_filter, roll_filter;
static signed int roll_alt1, roll_alt2, roll_alt3, nick_alt1, nick_alt2, nick_alt3; // MartinR: 4x Mittelung
//static signed int roll_alt1, nick_alt1; // MartinR: 2x Mittelung
static signed int accy, accx;
/* // MartinR : so war es Anfang
switch(state++)
{
case 0:
237,9 → 260,196
kanal = 0; state = 0; kanal = AD_NICK;
break;
}
*/ // MartinR : so war es Ende
// MartinR : geändert Anfang
switch(state++)
{
case 0:
nick1 = ADC;
kanal = AD_ROLL;
break;
case 1:
roll1 = ADC;
kanal = AD_GIER;
break;
case 2:
gier1 = ADC;
kanal = AD_DRUCK;
break;
case 3:
tmpLuftdruck += ADC;
messanzahl_Druck ++;
kanal = AD_NICK;
break;
case 4:
nick1 += ADC;
kanal = AD_ROLL;
break;
case 5:
roll1 += ADC;
kanal = AD_ACC_Y;
break;
case 6:
Aktuell_ay = NeutralAccY - ADC;
AdWertAccRoll = (Aktuell_ay + accy);
accy = Aktuell_ay;
kanal = AD_ACC_X;
break;
case 7:
Aktuell_ax = ADC - NeutralAccX;
AdWertAccNick = (Aktuell_ax + accx);
accx = Aktuell_ax;
kanal = AD_NICK;
break;
case 8:
nick1 += ADC;
kanal = AD_ROLL;
break;
case 9:
roll1 += ADC;
kanal = AD_GIER;
break;
case 10:
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2;
else
if(PlatinenVersion == 20) AdWertGier = 2047 - (ADC + gier1);
else AdWertGier = (ADC + gier1);
kanal = AD_DRUCK;
break;
case 11:
// MartinR: neu
tmpLuftdruck += ADC;
//MessLuftdruck = tmpLuftdruck / 2;
MessLuftdruck = ADC;
if(++messanzahl_Druck >= 5)
{
tmpLuftdruck -= 2616L * ExpandBaro; // -523.19 counts per 10 counts offset step
tmpLuftdruck /= 2;
messanzahl_Druck = 0;
//HoeheD = (31 * HoeheD + (int) Parameter_Luftdruck_D * (int)((int)(StartLuftdruck - tmpLuftdruck) - HoehenWert))/32; // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8;
HoehenWert = StartLuftdruck - Luftdruck;
//tmpLuftdruck /= 2;
tmpLuftdruck = 0;
}
// Luftdruck = (tmpLuftdruck + 7 * Luftdruck + 4) / 8;
// HoehenWert = 255 * ExpandBaro + StartLuftdruck - Luftdruck; // MartinR: zu Höhenregler
kanal = AD_NICK;
break;
case 12:
nick1 += ADC;
//if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4; // MartinR: so war es
//if(PlatinenVersion == 10) ; else nick1 *= 2; // MartinR: 2x Mittelung
if(PlatinenVersion == 10) nick1 /= 2; //else nick1 *= 1; // MartinR: 4x Mittelung
//AdWertNick = nick1 / 8; // MartinR: so war es
//AdWertNick = nick1 / 4; // MartinR: 2x Mittelung
AdWertNick = nick1 / 2; // MartinR: 4x Mittelung
// nick_filter = (nick_filter + nick1) / 2; // MartinR: so war es
//nick_filter = (nick_alt1 + nick1); // MartinR: anderer Nick-Filter: 2x Mittelung
nick_filter = (nick_alt3 +nick_alt2 +nick_alt1 + nick1); // MartinR: anderer Nick-Filter: 4x Mittelung
nick_alt3 = nick_alt2; // MartinR: anderer Nick-Filter
nick_alt2 = nick_alt1; // MartinR: anderer Nick-Filter
nick_alt1 = nick1; // MartinR: anderer Nick-Filter
HiResNick = nick_filter - AdNeutralNick;
//AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2; // MartinR: so war es
AdWertNickFilter = HiResNick; // MartinR: Filter deaktiviert
kanal = AD_ROLL;
break;
case 13:
roll1 += ADC;
// if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4; // MartinR: so war es
//if(PlatinenVersion == 10) ; else roll1 *= 2; // MartinR: 2x Mittelung
if(PlatinenVersion == 10) roll1 /= 2; //else roll1 *= 1; // MartinR: 4x Mittelung
// AdWertRoll = roll1 / 8; // MartinR: so war es
//AdWertRoll = roll1 / 4; // MartinR: 2x Mittelung
AdWertRoll = roll1 / 2; // MartinR: 4x Mittelung
//roll_filter = (roll_filter + roll1) / 2; // MartinR: so war es
//roll_filter = (roll_alt1 + roll1); // MartinR: anderer Nick-Filter: 2x Mittelung
roll_filter = (roll_alt3 + roll_alt2 + roll_alt1 + roll1); // MartinR: anderer Nick-Filter: 4x Mittelung
roll_alt3 = roll_alt2; // MartinR: anderer Nick-Filter
roll_alt2 = roll_alt1; // MartinR: anderer Nick-Filter
roll_alt1 = roll1; // MartinR: anderer Nick-Filter
HiResRoll = roll_filter - AdNeutralRoll;
//AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; // MartinR: so war es
AdWertRollFilter = HiResRoll; // MartinR: Filter deaktiviert
kanal = AD_UBAT;
break;
case 14:
UBat = (3 * UBat + ADC / 3) / 4;
kanal = AD_ACC_Z;
break;
case 15:
// AdWertAccHoch = (signed int) ADC - NeutralAccZ; // MartinR : so war es
//AdWertAccHoch = ADC - NeutralAccZ; // MartinR: modifiziert für Tests
/* // MartinR: deaktiviert
if(AdWertAccHoch > 1)
{
if(NeutralAccZ < 750)
{
NeutralAccZ += 0.02;
if(modell_fliegt < 500) NeutralAccZ += 0.1;
}
}
else if(AdWertAccHoch < -1)
{
if(NeutralAccZ > 550)
{
NeutralAccZ -= 0.02;
if(modell_fliegt < 500) NeutralAccZ -= 0.1;
}
}
*/ // MartinR: deaktiviert Ende
// messanzahl_AccHoch = 1; MartinR: deaktiviert, da nicht verwendet
Aktuell_az = (Aktuell_az + ADC) / 2;
AdWertAccHoch = Aktuell_az - NeutralAccZ; // MartinR: modifiziert für Tests
//Mess_Integral_Hoch += AdWertAccHoch; // Integrieren // MartinR: zu Höhenregler in fc.c verschoben
//Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen // MartinR: zu Höhenregler in fc.c verschoben
AdReady = 1;
state = 0;
kanal = AD_NICK;
break;
default:
kanal = 0; state = 0; kanal = AD_NICK;
break;
}
// MartinR : geändert Ende
ADMUX = kanal;
if(state != 0) ANALOG_ON;
}
// if(state != 0) ANALOG_ON; // MartinR : so war es:
// Bei jedem Reglerzyklus wurde nur der Ablauf der Reihenfolge der AD-Wandlungen angestoßen.
// Solange die Reihe nicht durchgelaufen ist, wurde nach jeder AD-Wandlung die nächste AD-Wandlung über ANALOG_ON gestartet.
// if(state != 0) ANALOG_START; // MartinR verschoben zu timer0
}