Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1138 → Rev 1139

/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