Rev 553 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 553 | Rev 565 | ||
---|---|---|---|
Line 83... | Line 83... | ||
83 | unsigned char MAX_GAS,MIN_GAS; |
83 | unsigned char MAX_GAS,MIN_GAS; |
84 | unsigned char Notlandung = 0; |
84 | unsigned char Notlandung = 0; |
85 | unsigned char HoehenReglerAktiv = 0; |
85 | unsigned char HoehenReglerAktiv = 0; |
86 | long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
86 | long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
Line 87... | Line -... | ||
87 | - | ||
88 | 87 | ||
89 | //Salvo 12.10.2007 |
88 | //Salvo 12.10.2007 |
90 | uint8_t magkompass_ok=0; |
89 | uint8_t magkompass_ok=0; |
91 | uint8_t gps_cmd = GPS_CMD_STOP; |
90 | uint8_t gps_cmd = GPS_CMD_STOP; |
92 | static int ubat_cnt =0; |
91 | static int ubat_cnt =0; |
Line 396... | Line 395... | ||
396 | motor = 0; |
395 | motor = 0; |
397 | i2c_start(); |
396 | i2c_start(); |
398 | } |
397 | } |
Line 399... | Line -... | ||
399 | - | ||
400 | 398 | ||
401 | 399 | ||
402 | //############################################################################ |
400 | //############################################################################ |
403 | // Trägt ggf. das Poti als Parameter ein |
401 | // Trägt ggf. das Poti als Parameter ein |
404 | void ParameterZuordnung(void) |
402 | void ParameterZuordnung(void) |
Line 464... | Line 462... | ||
464 | ROT_ON; //led blitzen lassen |
462 | ROT_ON; //led blitzen lassen |
465 | } |
463 | } |
466 | //******PROVISORISCH*************** |
464 | //******PROVISORISCH*************** |
467 | GRN_ON; |
465 | GRN_ON; |
Line 468... | Line -... | ||
468 | - | ||
469 | GRN_ON; |
466 | |
470 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
467 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
471 | // Gaswert ermitteln |
468 | // Gaswert ermitteln |
472 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
469 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
473 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
470 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
474 | if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20; |
471 | if(GasMischanteil > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20; |
475 | //Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen |
472 | //Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen |
476 | // und dieser dann langsam zwangsweise reduziert |
473 | // und dieser dann langsam zwangsweise reduziert |
477 | if (UBat <= EE_Parameter.UnterspannungsWarnung - 2) //Unterhalb der Piepser Schwelle aktivieren |
474 | if (UBat <= EE_Parameter.UnterspannungsWarnung - 2) //Unterhalb der Piepser Schwelle aktivieren |
478 | { |
475 | { |
479 | if (ubat_cnt > 700) |
476 | if (ubat_cnt > 1000) |
480 | { |
477 | { |
481 | ubat_cnt = 0; |
478 | ubat_cnt = 0; |
482 | if (gas_actual > ((gas_mittel*12)/15)) gas_actual--; |
479 | if (gas_actual > ((gas_mittel*12)/15)) gas_actual--; |
483 | } |
480 | } |
Line 590... | Line 587... | ||
590 | } |
587 | } |
591 | GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar |
588 | GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar |
592 | if (gps_home_position.status > 0 ) |
589 | if (gps_home_position.status > 0 ) |
593 | { |
590 | { |
594 | Delay_ms(1000); //akustisch verkuenden dass GPS Home Daten da sind |
591 | Delay_ms(1000); //akustisch verkuenden dass GPS Home Daten da sind |
595 | beeptime = 2000; |
592 | beeptime = 1000; |
596 | Delay_ms(500); |
593 | Delay_ms(500); |
597 | } |
594 | } |
598 | } |
595 | } |
599 | } |
596 | } |
600 | else |
597 | else |
Line 631... | Line 628... | ||
631 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
628 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
632 | // Einschalten |
629 | // Einschalten |
633 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
630 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
634 | if(++delay_einschalten > 200) |
631 | if(++delay_einschalten > 200) |
635 | { |
632 | { |
- | 633 | int n; |
|
636 | // Salvo 9.12.2007 |
634 | // Salvo 9.12.2007 |
637 | RX_SWTCH_ON; //GPS Daten auf RX eingang schalten |
635 | RX_SWTCH_ON; //GPS Daten auf RX eingang schalten |
638 | // Salvo End |
636 | // Salvo End |
639 | delay_einschalten = 200; |
637 | delay_einschalten = 200; |
640 | modell_fliegt = 1; |
638 | modell_fliegt = 1; |
Line 646... | Line 644... | ||
646 | Mess_IntegralRoll = 0; |
644 | Mess_IntegralRoll = 0; |
647 | Mess_IntegralNick2 = IntegralNick; |
645 | Mess_IntegralNick2 = IntegralNick; |
648 | Mess_IntegralRoll2 = IntegralRoll; |
646 | Mess_IntegralRoll2 = IntegralRoll; |
649 | SummeNick = 0; |
647 | SummeNick = 0; |
650 | SummeRoll = 0; |
648 | SummeRoll = 0; |
- | 649 | n= GPS_CRTL(GPS_CMD_STOP); //GPS Lageregelung beenden |
|
651 | } |
650 | } |
652 | } |
651 | } |
653 | else delay_einschalten = 0; |
652 | else delay_einschalten = 0; |
654 | //Auf Neutralwerte setzen |
653 | //Auf Neutralwerte setzen |
655 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
654 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 932... | Line 931... | ||
932 | //Salvo 11.12.2007 |
931 | //Salvo 11.12.2007 |
933 | w = (abs(Mittelwert_AccNick)); |
932 | w = (abs(Mittelwert_AccNick)); |
934 | v = (abs(Mittelwert_AccRoll)); |
933 | v = (abs(Mittelwert_AccRoll)); |
935 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in wwagrechter Lage nachtrimmen |
934 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) // Gyro nur in wwagrechter Lage nachtrimmen |
936 | { |
935 | { |
937 | - | ||
938 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
936 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
939 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
937 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
940 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
938 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
941 | } |
939 | } |
942 | //Salvo End |
940 | //Salvo End |
Line 1003... | Line 1001... | ||
1003 | MittelIntegralNick2 = 0; |
1001 | MittelIntegralNick2 = 0; |
1004 | MittelIntegralRoll2 = 0; |
1002 | MittelIntegralRoll2 = 0; |
1005 | ZaehlMessungen = 0; |
1003 | ZaehlMessungen = 0; |
Line 1006... | Line -... | ||
1006 | - | ||
1007 | - | ||
1008 | // Salvo 6.10.2007 |
- | |
1009 | // GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist |
- | |
1010 | //GPS Hold Aktiveren wenn Knueppel in Ruhelage sind |
- | |
1011 | if ((EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) && (abs(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) < GPS_STICK_HOLDOFF) |
- | |
1012 | && (abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < GPS_STICK_HOLDOFF) && (gps_alive_cnt > 0)) |
- | |
1013 | { |
- | |
1014 | if (Parameter_MaxHoehe > 200) |
- | |
1015 | { |
- | |
1016 | if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
- | |
1017 | else gps_cmd = GPS_CMD_REQ_HOME; |
- | |
1018 | n = GPS_CRTL(gps_cmd); |
- | |
1019 | } |
- | |
1020 | else |
- | |
1021 | { |
- | |
1022 | if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
- | |
1023 | else gps_cmd = GPS_CMD_REQ_HOLD; |
- | |
1024 | n= GPS_CRTL(gps_cmd); |
- | |
1025 | } |
- | |
1026 | } |
- | |
1027 | else |
- | |
1028 | { |
- | |
1029 | if (gps_cmd != GPS_CMD_STOP) |
- | |
1030 | { |
- | |
1031 | gps_cmd = GPS_CMD_STOP; |
- | |
1032 | n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden |
- | |
1033 | } |
1004 | |
Line 1034... | Line 1005... | ||
1034 | } |
1005 | |
1035 | } // Ende Abgleich |
1006 | } // Ende Abgleich |
1036 | 1007 | ||
Line 1053... | Line 1024... | ||
1053 | w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT); |
1024 | w = (int) (GyroGier_Comp/(long)GYROKOMP_INC_GRAD_DEFAULT); |
1054 | v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen |
1025 | v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen |
1055 | if (v <-180) v +=360; // Uberlaufkorrektur |
1026 | if (v <-180) v +=360; // Uberlaufkorrektur |
1056 | if (v > 180) v -=360; // Uberlaufkorrektur |
1027 | if (v > 180) v -=360; // Uberlaufkorrektur |
Line 1057... | Line 1028... | ||
1057 | 1028 | ||
Line 1058... | Line 1029... | ||
1058 | w = w -v; //Differenz Gyro zu Kompass ist der Driftfehler |
1029 | v = w -v; //Differenz Gyro zu Kompass ist der Driftfehler |
1059 | 1030 | ||
1060 | #define GIER_COMP_MAX 4 |
1031 | #define GIER_COMP_MAX 4 |
1061 | if (w > GIER_COMP_MAX) w= GIER_COMP_MAX; |
1032 | if (v > GIER_COMP_MAX) v= GIER_COMP_MAX; |
1062 | if (w < -GIER_COMP_MAX) w= - GIER_COMP_MAX; |
1033 | if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX; |
1063 | if (!(w == 0)) |
1034 | if (abs(w) > 1) |
1064 | { |
1035 | { |
1065 | GyroGier_Comp = 0; |
1036 | GyroGier_Comp = 0; |
1066 | gyrogier_kompass = KompassValue; // Kompasswert merken |
1037 | gyrogier_kompass = KompassValue; // Kompasswert merken |
1067 | AdNeutralGier -= w; |
1038 | AdNeutralGier -= v; |
1068 | } |
1039 | } |
1069 | } |
1040 | } |
1070 | } |
1041 | } |
Line 1106... | Line 1077... | ||
1106 | } |
1077 | } |
1107 | Kompass_Value_Old = KompassValue; |
1078 | Kompass_Value_Old = KompassValue; |
1108 | } |
1079 | } |
1109 | // Salvo End ************************* |
1080 | // Salvo End ************************* |
Line -... | Line 1081... | ||
- | 1081 | ||
- | 1082 | // Salvo 6.10.2007 |
|
- | 1083 | // GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist |
|
- | 1084 | //GPS Hold Aktiveren wenn Knueppel in Ruhelage sind |
|
- | 1085 | if ((EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) && (abs(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) < GPS_STICK_HOLDOFF) |
|
- | 1086 | && (abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < GPS_STICK_HOLDOFF) && (gps_alive_cnt > 0) && (GasMischanteil > 30)) |
|
- | 1087 | { |
|
- | 1088 | if (Parameter_MaxHoehe > 200) |
|
- | 1089 | { |
|
- | 1090 | if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
|
- | 1091 | else gps_cmd = GPS_CMD_REQ_HOME; |
|
- | 1092 | n = GPS_CRTL(gps_cmd); |
|
- | 1093 | } |
|
- | 1094 | else |
|
- | 1095 | { |
|
- | 1096 | if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
|
- | 1097 | else gps_cmd = GPS_CMD_REQ_HOLD; |
|
- | 1098 | n= GPS_CRTL(gps_cmd); |
|
- | 1099 | } |
|
- | 1100 | } |
|
- | 1101 | else |
|
- | 1102 | { |
|
- | 1103 | if (gps_cmd != GPS_CMD_STOP) |
|
- | 1104 | { |
|
- | 1105 | gps_cmd = GPS_CMD_STOP; |
|
- | 1106 | n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden |
|
- | 1107 | } |
|
- | 1108 | } |
|
- | 1109 | if (gps_state != GPS_CRTL_IDLE) if (TimerWerteausgabe == 10) LED_J16_OFF; //led im GPS Mode schnell blinken lassen |
|
Line 1110... | Line 1110... | ||
1110 | 1110 | ||
1111 | 1111 | ||
1112 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1112 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1113 | // Gieren |
1113 | // Gieren |
Line 1145... | Line 1145... | ||
1145 | if(w > 0) |
1145 | if(w > 0) |
1146 | { |
1146 | { |
1147 | // Salvo Kompasssteuerung ********************** |
1147 | // Salvo Kompasssteuerung ********************** |
1148 | if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
1148 | if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
1149 | // Salvo End |
1149 | // Salvo End |
1150 | } |
1150 | } |
1151 | - | ||
1152 | } |
1151 | } |
Line 1153... | Line 1152... | ||
1153 | 1152 | ||
Line 1154... | Line 1153... | ||
1154 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1153 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1155 | 1154 | ||
1156 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1155 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1157 | // Debugwerte zuordnen |
1156 | // Debugwerte zuordnen |
1158 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1157 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1158 | if(!TimerWerteausgabe--) |
|
Line 1159... | Line 1159... | ||
1159 | if(!TimerWerteausgabe--) |
1159 | { |
1160 | { |
1160 | TimerWerteausgabe = 24; |
1161 | 1161 | ||
1162 | // Salvo 13.12.2007 Beleuchtung steuern |
1162 | // Salvo 13.12.2007 Beleuchtung steuern |
1163 | if (!(beeptime & BeepMuster)) LED_J16_FLASH; |
1163 | if (!(beeptime & BeepMuster)) LED_J16_FLASH; |
Line 1164... | Line -... | ||
1164 | else if (MotorenEin) LED_J16_ON; |
- | |
1165 | else LED_J16_OFF; |
1164 | else if (MotorenEin) LED_J16_ON; |
1166 | // Salvo End |
1165 | else LED_J16_OFF; |
1167 | 1166 | // Salvo End |
|
1168 | TimerWerteausgabe = 24; |
1167 | |
1169 | DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
1168 | DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
Line 1190... | Line 1189... | ||
1190 | // DebugOut.Analog[11] = GPS_hdng_rel_2trgt; |
1189 | // DebugOut.Analog[11] = GPS_hdng_rel_2trgt; |
1191 | DebugOut.Analog[10] = Parameter_UserParam1; |
1190 | DebugOut.Analog[10] = Parameter_UserParam1; |
1192 | DebugOut.Analog[11] = Parameter_UserParam3; |
1191 | DebugOut.Analog[11] = Parameter_UserParam3; |
1193 | DebugOut.Analog[24] = GPS_Nick; |
1192 | DebugOut.Analog[24] = GPS_Nick; |
1194 | DebugOut.Analog[25] = GPS_Roll; |
1193 | DebugOut.Analog[25] = GPS_Roll; |
1195 | DebugOut.Analog[26] = gps_rel_act_position.utm_east/10; //in m ausgeben |
1194 | DebugOut.Analog[26] = gps_rel_act_position.utm_east; //in 10cm ausgeben |
1196 | DebugOut.Analog[27] = gps_rel_act_position.utm_north/10; |
1195 | DebugOut.Analog[27] = gps_rel_act_position.utm_north; |
1197 | DebugOut.Analog[28] = gps_rel_act_position.utm_alt/10; |
1196 | DebugOut.Analog[28] = gps_rel_act_position.utm_alt; |
1198 | DebugOut.Analog[29] = gps_sub_state+(20*gps_cmd); |
1197 | DebugOut.Analog[29] = gps_state + (gps_sub_state*10)+(50*gps_cmd); |
- | 1198 | DebugOut.Analog[30] = GPS_dist_2trgt; |
|
1199 | DebugOut.Analog[31] = (int) GyroGier_Comp; |
1199 | DebugOut.Analog[31] = (int) GyroGier_Comp; |
1200 | - | ||
1201 | /* DebugOut.Analog[16] = motor_rx[0]; |
1200 | /* DebugOut.Analog[16] = motor_rx[0]; |
1202 | DebugOut.Analog[17] = motor_rx[1]; |
1201 | DebugOut.Analog[17] = motor_rx[1]; |
1203 | DebugOut.Analog[18] = motor_rx[2]; |
1202 | DebugOut.Analog[18] = motor_rx[2]; |
1204 | DebugOut.Analog[19] = motor_rx[3]; |
1203 | DebugOut.Analog[19] = motor_rx[3]; |
1205 | DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |
1204 | DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |