Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1252 → Rev 1253

/trunk/analog.c
17,9 → 17,7
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
signed char ExpandBaro = 0;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile long tmpLuftdruck;
volatile int VarioMeter = 0;
volatile unsigned int ZaehlMessungen = 0;
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
unsigned char GyroDefektN = 0,GyroDefektR = 0,GyroDefektG = 0;
73,9 → 71,9
if(AnalogOffsetRoll < 10) { GyroDefektR = 1; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { GyroDefektR = 1; AnalogOffsetRoll = 245;};
if(AnalogOffsetGier < 10) { GyroDefektG = 1; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { GyroDefektG = 1; AnalogOffsetGier = 245;};
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;}
messanzahl_Druck = 0;
AdReady = 0;
ANALOG_ON;
while(messanzahl_Druck == 0);
while(!AdReady);
if(i<10) Delay_ms_Mess(10);
}
Delay_ms_Mess(70);
110,6 → 108,11
static unsigned char kanal=0,state = 0;
static signed int gier1, roll1, nick1, nick_filter, roll_filter;
static signed int accy, accx;
 
static long tmpLuftdruck = 0;
static char messanzahl_Druck = 0;
static long SummenHoehe = 0;
 
switch(state++)
{
case 0:
220,18 → 223,18
ZaehlMessungen++;
// "break" fehlt hier absichtlich
case 9:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
tmpLuftdruck -= 2616L * ExpandBaro; // -523.19 counts per 10 counts offset step
tmpLuftdruck /= 2;
MessLuftdruck = ADC;
MessLuftdruck = ADC;
tmpLuftdruck += MessLuftdruck;
if(++messanzahl_Druck >= 18)
{
Luftdruck = (7 * Luftdruck + tmpLuftdruck - 18 * 519 * ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step
HoehenWert = StartLuftdruck - Luftdruck;
SummenHoehe -= SummenHoehe/8;
SummenHoehe += HoehenWert;
VarioMeter = (3 * VarioMeter + 25 * (int)(HoehenWert - SummenHoehe/8))/4;
tmpLuftdruck = 0;
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;
}
}
kanal = AD_NICK;
break;
default:
/trunk/analog.h
15,12 → 15,12
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern signed char ExpandBaro;
extern volatile int HoeheD;
extern volatile int VarioMeter;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
extern volatile char MessanzahlNick;
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier;
extern volatile unsigned char AdReady;
extern volatile unsigned char AdReady;
 
 
unsigned int ReadADC(unsigned char adc_input);
/trunk/fc.c
237,7 → 237,7
Mess_IntegralRoll2 = IntegralRoll;
Mess_Integral_Gier = 0;
StartLuftdruck = Luftdruck;
HoeheD = 0;
VarioMeter = 0;
Mess_Integral_Hoch = 0;
KompassStartwert = KompassValue;
GPS_Neutral();
1186,7 → 1186,7
DebugOut.Analog[10] = SenderOkay;
//DebugOut.Analog[16] = Mittelwert_AccHoch;
//DebugOut.Analog[17] = FromNaviCtrl_Value.Distance;
//DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
DebugOut.Analog[18] = VarioMeter;
DebugOut.Analog[19] = WinkelOut.CalcState;
DebugOut.Analog[20] = ServoValue;
// DebugOut.Analog[24] = MesswertNick/2;
1315,9 → 1315,9
h = HoehenWert;
if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
{
h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / (16 / STICK_GAIN); // Differenz bestimmen --> P-Anteil
h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
h = GasMischanteil - h; // vom Gas abziehen
h -= (HoeheD)/(8/STICK_GAIN); // D-Anteil
h -= (Parameter_Luftdruck_D * VarioMeter)/128; // D-Anteil
tmp_int = ((Mess_Integral_Hoch / 128) * (signed long) Parameter_Hoehe_ACC_Wirkung) / (128 / STICK_GAIN);
if(tmp_int > 70*STICK_GAIN) tmp_int = 70*STICK_GAIN;
else if(tmp_int < -(70*STICK_GAIN)) tmp_int = -(70*STICK_GAIN);
/trunk/menu.c
57,8 → 57,8
case 1:
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert);
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe);
LCD_printfxy(0,0,"Hoehe: %5i",(int)(HoehenWert/5));
LCD_printfxy(0,1,"SollHoehe: %5i",(int)(SollHoehe/5));
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
156,9 → 156,9
LCD_printfxy(0,1," %c %c %c %c ",MotorPresent[0] + '-',MotorPresent[1] + '-',MotorPresent[2] + '-',MotorPresent[3] + '-');
LCD_printfxy(0,2," %c %c %c %c ",MotorPresent[4] + '-',MotorPresent[5] + '-',MotorPresent[6] + '-',MotorPresent[7] + '-');
LCD_printfxy(0,3," %c - - -",MotorPresent[8] + '-');
if(MotorPresent[9]) LCD_printfxy(4,3,"10");
if(MotorPresent[10]) LCD_printfxy(8,3,"11");
if(MotorPresent[11]) LCD_printfxy(12,3,"12");
if(MotorPresent[9]) LCD_printfxy(4,3,"10");
if(MotorPresent[10]) LCD_printfxy(8,3,"11");
if(MotorPresent[11]) LCD_printfxy(12,3,"12");
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
/trunk/spi.c
227,7 → 227,7
ToNaviCtrl.Param.Byte[0] = 5;
}
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
ToNaviCtrl.Param.Int[1] = HoehenWert;
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5);
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime;
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsPLimit;
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsILimit;
/trunk/uart.c
65,7 → 65,7
"Motor Right ", //15
" ",
" ",
" ",
"VarioMeter ",
"MK3Mag CalState ",
"Servo ", //20
" ",
131,11 → 131,11
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr + 1;
RxdBuffer[buf_ptr] = '\r';
if(RxdBuffer[2] == 'R')
if(RxdBuffer[2] == 'R')
{
wdt_enable(WDTO_250MS); // Reset-Commando
ServoActive = 0;
}
}
}
}
else
/trunk/version.txt
268,8 → 268,9
- Update-Cmd stoppt Servos
- Servos werden erst nach dem ersten Kalibrieren aktiviert
 
0.75c G.Sobrawa 22.7.2009
0.75c G.Sobrawa 25.7.2009
- Übertragung der Servo-Settings zur NC
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt
- Bugfix Messbereuichsumschaltung des Luftdrucksensors springt
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils