/branches/thjac/V1_11/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/thjac/V1_11/altcon.c |
---|
9,16 → 9,17 |
#include "fc.h" |
char enabled = 0; |
int pressureOffset = 0; |
int accZOffset = 0; |
int lastError = 0; |
int lastN = 0; // Zuletzt errechneter Fehlerwert |
int averageN = 0; |
long altIntegral = 0; |
int temp; // Temporäre Werte; wird mehrfach verwendet |
static char enabled = 0; |
static int accZOffset = 0; |
static int lastError = 0; |
static int lastN = 0; // Zuletzt errechneter Fehlerwert |
static long altIntegral = 0; |
static int temp; // Temporäre Werte; wird mehrfach verwendet |
extern unsigned char Notlandung; // aus fc.c |
int pressureOffset = 0; |
int averageN = 0; |
extern unsigned char Notlandung; // aus fc.c |
extern int airPressure; |
43,15 → 44,15 |
*/ |
void altcon_start( void ) { |
accZOffset = Mess_Integral_Hoch / 128; |
enabled = 1; |
lastError = 0; |
lastN = 0; |
averageN = 0; |
altIntegral = 0L; |
accZOffset = Mess_Integral_Hoch / 128; |
// Einschalten der Höhenregelung signalisieren |
beeptime = 500; |
beeptime = 500; |
} |
62,7 → 63,7 |
enabled = 0; |
// Ausschalten der Höhenregelung signalisieren |
beeptime = 500; |
beeptime = 500; |
} |
81,7 → 82,7 |
// Proportionalanteil |
n = ( PARAM_ALT_P * error ) / 4; // dividiert durch ( 16 / STICK_GAIN ) = 16 / 4 = 4 |
/* |
// Integralanteil |
altIntegral += ( PARAM_ALT_I * error ) / 4; |
90,9 → 91,9 |
altIntegral = PARAM_ALT_INT_MAX; |
else if( altIntegral < -PARAM_ALT_INT_MAX ) |
altIntegral = -PARAM_ALT_INT_MAX; |
n += altIntegral / 4000; |
*/ |
// Differenzialanteil |
n += ( PARAM_ALT_D * ( error - lastError ) ) / 2; |
126,7 → 127,7 |
averageN = averageN + PARAM_ALT_EXP_SMOOTHING_FACTOR * ( n - averageN ) / 100; |
} |
DebugOut.Analog[30] = altIntegral / 4000; |
// DebugOut.Analog[30] = altIntegral / 4000; |
DebugOut.Analog[27] = n; |
return n; |
/branches/thjac/V1_11/altcon.h |
---|
11,6 → 11,7 |
extern int pressureOffset; |
extern int averageN; |
extern void altcon_init( void ); |
extern void altcon_start( void ); |
extern void altcon_lock( void ); |
extern void altcon_stop( void ); |
/branches/thjac/V1_11/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="printf_P.c"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="License.txt"></File><File path="eeprom.c"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="parameter.h"></File><File path="pitch.c"></File><File path="pitch.h"></File><File path="gps.c"></File><File path="gps.h"></File><File path="altcon.h"></File><File path="altcon.c"></File><File path="pitch_neutral.h"></File><File path="pitch_md.c"></File><File path="pitch_md.h"></File><File path="pitch_neutral.c"></File></Project> |
/branches/thjac/V1_11/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/thjac/V1_11/main.c |
---|
50,6 → 50,9 |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "altcon.h" |
#include "pitch.h" |
#include "led.h" |
unsigned char EEPromArray[E2END + 1] EEMEM; |
unsigned char PlatinenVersion = 10; |
57,10 → 60,17 |
// -- Parametersatz aus EEPROM lesen --- |
// number [1..5] |
void init( void ) { |
LED_Init(); |
altcon_init(); |
pitch_init(); |
} |
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) { |
if ((number > 5) || (number < 1)) number = 3; |
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * (number - 1)], length); |
LED_Init(); |
} |
// -- Parametersatz ins EEPROM schreiben --- |
71,7 → 81,6 |
if (number < 1) return; |
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * (number - 1)], length); |
SetActiveParamSetNumber(number); |
LED_Init(); |
} |
unsigned char GetActiveParamSetNumber(void) { |
88,6 → 97,7 |
if (number > 5) number = 5; |
if (number < 1) return; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken |
init(); |
} |
void CalMk3Mag(void) { |
105,6 → 115,7 |
DebugOut.Analog[19] = WinkelOut.CalcState; |
} |
//############################################################################ |
//Hauptprogramm |
148,6 → 159,7 |
ROT_OFF; |
LED_Init(); |
Timer_Init(); |
UART_Init(); |
rc_sum_init(); |
213,6 → 225,9 |
printf("\n\n\r"); |
// Initialisierung muß nach Einlesen der Konfiguration erfolgen |
init(); |
LcdClear(); |
I2CTimeout = 5000; |
WinkelOut.Orientation = 1; |
/branches/thjac/V1_11/main.h |
---|
33,6 → 33,7 |
#define EEPROM_ADR_ACC_NICK 4 |
#define EEPROM_ADR_ACC_ROLL 6 |
#define EEPROM_ADR_ACC_Z 8 |
#define EEPROM_ADR_PITCH_MD_HOVER 10 |
#define EEPROM_ADR_PARAM_BEGIN 100 |
/branches/thjac/V1_11/makefile |
---|
5,7 → 5,7 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 1 |
VERSION_MINOR = 11 |
VERSION_PATCH = 0 |
VERSION_PATCH = 1 |
VERSION_SERIAL_MAJOR = 10 # Serial Protocol |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
/branches/thjac/V1_11/menu.c |
---|
6,6 → 6,9 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "altcon.h" |
#include "pitch.h" |
#include "pitch_md.h" |
#include "parameter.h" |
unsigned int TestInt = 0; |
#define ARRAYGROESSE 10 |
13,7 → 16,7 |
char DisplayBuff[80] = "Hallo Welt"; |
unsigned char DispPtr = 0; |
unsigned char MaxMenue = 11; |
unsigned char MaxMenue = 12; |
unsigned char MenuePunkt = 0; |
unsigned char RemoteKeys = 0; |
142,6 → 145,19 |
LCD_printfxy(0,2,"Gs:%4i Gi:%4i ",ExternControl.Gas,ExternControl.Gier); |
LCD_printfxy(0,3,"Hi:%4i Cf:%4i ",ExternControl.Hight,ExternControl.Config); |
break; |
case 12: |
LCD_printfxy( 0, 0, "PitchSteuerung " ); |
LCD_printfxy( 0, 1, "Modus: %s ", pitchModeStrings[ pitch_current_mode() ] ); |
// MD-Modus |
switch( pitch_current_mode() ) { |
case PARAM_PITCH_MODE_MD: |
LCD_printfxy( 0, 2, "Standgas: %3i ", pitch_hover_value() ); |
break; |
} |
break; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
/branches/thjac/V1_11/parameter.h |
---|
32,7 → 32,6 |
/****************************************************************************************** |
* Parameter für MD-Pitch-Steuerung |
*/ |
#define PARAM_PITCH_MD_HOVER EE_Parameter.UserParam1 // Standgaswert |
#define PARAM_PITCH_MD_DELAY0 5 // Begrenzung der Pitch-Beschleunigung am Boden |
#define PARAM_PITCH_MD_DELAY1 0 // Begrenzung der Pitch-Beschleunigung im Flug |
/branches/thjac/V1_11/pitch.c |
---|
12,6 → 12,15 |
#include "pitch.h" |
unsigned char pitchMode; |
char *pitchModeStrings[] = { |
"Normal ", |
"Neutral ", |
"MD " |
}; |
// Zeiger auf den durch das Setting bestimmten Pitch-Steuerungsalgorithmus |
int (* pitch_value_ptr)( void ); |
25,8 → 34,12 |
*/ |
void pitch_init( void ) { |
pitchMode = PARAM_PITCH_MODE; |
pitch_md_init(); |
// FIXME Funktioniert noch nicht |
switch( PARAM_PITCH_MODE ) { |
switch( pitchMode ) { |
case PARAM_PITCH_MODE_NEUTRAL: |
pitch_value_ptr = pitch_neutral_value; |
break; |
44,7 → 57,7 |
int pitch_value( void ) { |
switch( PARAM_PITCH_MODE ) { |
switch( pitchMode ) { |
case PARAM_PITCH_MODE_NEUTRAL: |
return pitch_neutral_value(); |
/branches/thjac/V1_11/pitch.h |
---|
9,10 → 9,15 |
extern int (* pitch_value_ptr)( void ); |
// TODO Soll den Stick-Wert der Mittelstellung liefern |
#define pitch_stickoffset() 0 |
#define pitch_stickoffset() 0 |
extern int pitch_value( void ); |
#define pitch_current_mode() ( pitchMode ) |
#define pitch_current_mode_string() ( pitchModeStrings[ pitchMode ] ); |
// #define pitch_value() ( pitch_value_ptr != 0 ? pitch_value_ptr() : 0 ) |
extern void pitch_init( void ); |
extern int pitch_value( void ); |
extern unsigned char pitchMode; |
extern char *pitchModeStrings[]; |
#endif // PITCH_H |
/branches/thjac/V1_11/pitch_md.c |
---|
23,18 → 23,25 |
#define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
int stickValue = 0; // Aktueller Stick-Wert |
int lastStickValue = 0; // Vorheriger Stick-Wert |
int actualPitchCount; // Soll-Pitch-Wert |
int targetPitchCount; // Ist-Pitch-Wert |
int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
char state; // Zustand |
int timer; |
int delay = 0; |
int delayCounter = 0; |
int temp; // Temporäre Werte; wird mehrfach verwendet |
static int stickValue = 0; // Aktueller Stick-Wert |
static int lastStickValue = 0; // Vorheriger Stick-Wert |
static int actualPitchCount = 0; // Soll-Pitch-Wert |
static int targetPitchCount = 0; // Ist-Pitch-Wert |
static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
static char state; // Zustand |
static int timer; |
static int delay = 0; |
static int delayCounter = 0; |
static int temp; // Temporäre Werte; wird mehrfach verwendet |
unsigned char pitchHover = 0; // Standgaswert |
void pitch_md_init( void ) { |
pitchHover = eeprom_read_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ] ); |
} |
/* |
* Berechnet den aktuellen Pitch-Wert für die Regelung |
* |
80,7 → 87,7 |
} |
stickValue = temp; |
/* Aktuellen Pitch-Wert berechnen. Der Wert ergibt sich aus dem Pitch-Offset |
* zuzüglich dem Stick-Wert. */ |
targetPitchCount = stickValue + pitchOffset; |
122,17 → 129,19 |
/* Die Verweilzeit ist abgelaufen und der aktuelle Pitch-Wert |
* entspricht nicht dem bereits gespeicherten Wert. */ |
if( !timer && ( PARAM_PITCH_MD_HOVER != actualPitchCount ) ) { |
if( !timer && ( pitchHover != actualPitchCount ) ) { |
// Aktuellen Pitch-Wert in Konfiguration übernehmen |
PARAM_PITCH_MD_HOVER = actualPitchCount; |
pitchHover = actualPitchCount; |
// Konfiguration dauerhaft speichern |
eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ], pitchHover ); |
/* |
WriteParameterSet( |
GetActiveParamSetNumber(), |
(unsigned char *) &EE_Parameter.Kanalbelegung[0], |
STRUCT_PARAM_LAENGE ); |
*/ |
// Signalisieren |
beeptime = 500; |
} |
148,8 → 157,8 |
delay = PARAM_PITCH_MD_DELAY0; |
if( rawStickValue > PARAM_PITCH_STICK_THRESHOLD ) { |
pitchOffset = PARAM_PITCH_MD_HOVER; |
} else if( pitchOffset == PARAM_PITCH_MD_HOVER ) { |
pitchOffset = pitchHover; |
} else if( pitchOffset == pitchHover ) { |
state = STATE_BEGIN1; |
} |
break; |
273,9 → 282,6 |
state = STATE_INITIALIZE; |
} |
if( pitchOffset < 0 ) |
pitchOffset = 0; |
if( !delayCounter ) { |
/* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
294,11 → 300,9 |
delayCounter--; |
// Pitch-Wert darf nicht < 0 sein |
if( actualPitchCount < 0 ) { |
if( actualPitchCount < 0 ) |
actualPitchCount = 0; |
} |
// pitchCount als Debug-Wert rausschreiben |
DebugOut.Analog[26] = stickValue; |
DebugOut.Analog[28] = actualPitchCount; |
/branches/thjac/V1_11/pitch_md.h |
---|
6,7 → 6,11 |
#ifndef PITCH_MD_H |
#define PITCH_MD_H |
#define pitch_hover_value() pitchHover |
extern void pitch_md_init( void ); |
extern int pitch_md_value( void ); |
extern char pitchHover; |
#endif // PITCH_MD_H |
/branches/thjac/V1_11/version.txt |
---|
228,3 → 228,10 |
- Merge with altcon.c added by T. Jachmann |
- picth_XX ausgelagert |
V1_11b T. Jachmann |
- Neuer MD-ähnlicher Pitch-Modus |
- Kalibrierungsfunktion für Standgas |
- Standgas wird im EEProm abgespeichert |
- Neue Display-Seite für Pitch-Steuerung |
- Fehler in Höhenregelung korrigiert |
- Integralanteil in Höhenregelung vorerst stillgelegt |