Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 170 → Rev 171

/branches/BL-Ctrl/BLMC.c
0,0 → 1,196
/*############################################################################
+ Regler für Brushless-Motoren
+ ATMEGA8 mit 8MHz
+ (c) 01.2007 Holger Buss
+ Nur für den privaten Gebrauch
+ Keine Garantie auf Fehlerfreiheit
+ Kommerzielle Nutzung nur mit meiner Zustimmung
+ Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
+ www.mikrocontroller.com
############################################################################*/
#include "main.h"
 
volatile unsigned char Phase = 0,ShadowTCCR1A = 0;
volatile unsigned char CompFreigabeTimer = 100;
volatile unsigned char CompInterruptFreigabe = 0;
 
 
//############################################################################
//
SIGNAL(SIG_OVERFLOW2)
//############################################################################
{
}
 
//############################################################################
// + Interruptroutine
// + Wird durch den Analogkomperator ausgelöst
// + Dadurch wird das Kommutieren erzeugt
SIGNAL(SIG_COMPARATOR)
//############################################################################
{
unsigned char sense = 0;
do
{
if(SENSE_H) sense = 1; else sense = 0;
switch(Phase)
{
case 0:
STEUER_A_H;
if(sense)
{
STEUER_C_L;
TCNT2 = 1;
if(ZeitZumAdWandeln) AdConvert();
SENSE_FALLING_INT;
SENSE_B;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_B_L;
}
break;
case 1:
STEUER_C_L;
if(!sense)
{
STEUER_B_H;
TCNT2 = 1;
if(ZeitZumAdWandeln) AdConvert();
SENSE_A;
SENSE_RISING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_A_H;
}
 
break;
case 2:
STEUER_B_H;
if(sense)
{
STEUER_A_L;
TCNT2 = 1;
if(ZeitZumAdWandeln) AdConvert();
SENSE_C;
SENSE_FALLING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_C_L;
}
break;
case 3:
STEUER_A_L;
if(!sense)
{
STEUER_C_H;
TCNT2 = 1;
if(ZeitZumAdWandeln) AdConvert();
SENSE_B;
SENSE_RISING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_B_H;
}
 
break;
case 4:
STEUER_C_H;
if(sense)
{
STEUER_B_L;
TCNT2 = 1;
if(ZeitZumAdWandeln) AdConvert();
SENSE_A;
SENSE_FALLING_INT;
Phase++;
CntKommutierungen++;
}
else
{
STEUER_A_L;
}
break;
case 5:
STEUER_B_L;
if(!sense)
{
STEUER_A_H;
TCNT2 = 1;
if(ZeitZumAdWandeln) AdConvert();
SENSE_C;
SENSE_RISING_INT;
Phase = 0;
CntKommutierungen++;
}
else
{
STEUER_C_H;
}
break;
}
}
while((SENSE_L && sense) || (SENSE_H && !sense));
ZeitZumAdWandeln = 0;
}
 
//############################################################################
//
void Manuell(void)
//############################################################################
{
switch(Phase)
{
case 0:
STEUER_A_H;
STEUER_B_L;
SENSE_C;
SENSE_RISING_INT;
break;
case 1:
STEUER_A_H;
STEUER_C_L;
SENSE_B;
SENSE_FALLING_INT;
break;
case 2:
STEUER_B_H;
STEUER_C_L;
SENSE_A;
SENSE_RISING_INT;
break;
case 3:
STEUER_B_H;
STEUER_A_L;
SENSE_C;
SENSE_FALLING_INT;
break;
case 4:
STEUER_C_H;
STEUER_A_L;
SENSE_B;
SENSE_RISING_INT;
break;
case 5:
STEUER_C_H;
STEUER_B_L;
SENSE_A;
SENSE_FALLING_INT;
break;
}
}
 
/branches/BL-Ctrl/BLMC.h
0,0 → 1,55
/*############################################################################
############################################################################*/
 
#ifndef BLMC_H_
#define BLMC_H_
 
extern volatile unsigned char Phase;
extern volatile unsigned char ShadowTCCR1A;
extern volatile unsigned char CompInterruptFreigabe;
 
void Blc(void);
void Manuell(void);
 
#ifdef _32KHZ
#define PWM_C_ON {TCCR1A = 0xA1; TCCR2 = 0x49; DDRB = 0x0A;}
#define PWM_B_ON {TCCR1A = 0xA1; TCCR2 = 0x49; DDRB = 0x0C;}
#define PWM_A_ON {TCCR1A = 0xA1; TCCR2 = 0x69; DDRB = 0x08;}
#define PWM_OFF {TCCR1A = 0x01; TCCR2 = 0x49; PORTC &= ~0x0E;}
#endif
 
#ifdef _16KHZ
#define PWM_C_ON {TCCR1A = 0xA2; TCCR2 = 0x41; DDRB = 0x0A;}
#define PWM_B_ON {TCCR1A = 0xA2; TCCR2 = 0x41; DDRB = 0x0C;}
#define PWM_A_ON {TCCR1A = 0xA2; TCCR2 = 0x61; DDRB = 0x08;}
#define PWM_OFF {TCCR1A = 0x02; TCCR2 = 0x41; PORTC &= ~0x0E;}
#endif
 
 
#define STEUER_A_H {PWM_A_ON}
#define STEUER_B_H {PWM_B_ON}
#define STEUER_C_H {PWM_C_ON}
 
#define STEUER_A_L {PORTD &= ~0x30; PORTD |= 0x08;}
#define STEUER_B_L {PORTD &= ~0x28; PORTD |= 0x10;}
#define STEUER_C_L {PORTD &= ~0x18; PORTD |= 0x20;}
#define STEUER_OFF {PORTD &= ~0x38; PWM_OFF;}
 
#define SENSE_A ADMUX = 0;
#define SENSE_B ADMUX = 1;
#define SENSE_C ADMUX = 2;
 
#define ClrSENSE ACSR |= 0x10
#define SENSE ((ACSR & 0x10))
#define SENSE_L (!(ACSR & 0x20))
#define SENSE_H ((ACSR & 0x20))
#define ENABLE_SENSE_INT {CompInterruptFreigabe = 1;ACSR |= 0x0A; }
#define DISABLE_SENSE_INT {CompInterruptFreigabe = 0; ACSR &= ~0x08; }
 
 
#define SENSE_FALLING_INT ACSR &= ~0x01
#define SENSE_RISING_INT ACSR |= 0x03
#define SENSE_TOGGLE_INT ACSR &= ~0x03
 
#endif //BLMC_H_
 
/branches/BL-Ctrl/BL_Ctrl.pnproj
0,0 → 1,0
<Project name="avr_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="timer0.c"></File><File path="timer0.h"></File><File path="analog.h"></File><File path="analog.c"></File><File path="PPM_Decode.c"></File><File path="PPM_Decode.h"></File><File path="twislave.c"></File><File path="twislave.h"></File><File path="BLMC.c"></File><File path="BLMC.h"></File></Project>
/branches/BL-Ctrl/BL_Ctrl.pnps
0,0 → 1,0
<pd><ViewState><e p="avr_ctrl" x="true"></e></ViewState></pd>
/branches/BL-Ctrl/BrushLess-Ctrl_8kHz_PWM_V0_31_1.hex
0,0 → 1,292
:1000000012C073C52BC02AC0D5C5D9C427C026C00D
:10001000C5C402C423C005C321C0D2C21FC01EC0B4
:1000200036C677C51BC011241FBECFE5D4E0DEBFA6
:10003000CDBF10E0A0E6B0E0EEE1F2E102C0059035
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73CD1E0C8D1CF20917F
:10006000700080916400821710F4AB9A282F809161
:100070007200909173008338910560F01BBC1ABC2C
:1000800019BC18BC13BCAB9A019790937300809372
:1000900072000895822F9927880F991F9BBD8ABDF2
:1000A00099BD88BD23BD089582E08FBD81E485BDE3
:1000B00085B3817F85BB89E08EBD089592B7980F87
:1000C00082B7891B87FDFCCF0895809178009091BD
:1000D0007900892B09F04EC080917A00882371F055
:1000E000909186008FEF989FC001112468EC70E01A
:1000F00044D8709385006093840044C0809191003F
:10010000882359F120918E0030918F0041E02D32EB
:10011000340730F4293C310540F42B30310538F4F4
:1001200010928500109284002CC028EC30E08CEFF7
:1001300090E0AC01249FC001259F900D349F900D4D
:100140001124885D994064EB70E017D86D5F7F4F94
:10015000709385006093840014C080918400909116
:100160008500009729F00197909385008093840083
:10017000AB9A08C08091880399279093850080935B
:100180008400AB9880918400909185008F3F910509
:1001900039F030F08FEF90E09093850080938400E9
:1001A0008091840099270895809172009091730046
:1001B00090937803809377038091750099279093AB
:1001C0007A038093790380918200909183009093C9
:1001D0007C0380937B0380918E0090918F0090939D
:1001E0007E0380937D030895AF92BF92CF92DF92FA
:1001F000EF92FF920F931F93CF93DF93182F1092DC
:100200009900439885E090E090937100809370008E
:1002100026DFDAD488EC90E05FD3C12FDD27D093BE
:100220007100C09370004CE2A42E41E0B42EC12CAA
:10023000D12CEE24FF2487010EC080916600882314
:1002400011F4C8D101C0B9D284E638DF0894E11CAA
:10025000F11C011D111DEA14FB040C051D0569F7B5
:10026000C601B5012FE030E040E050E09AD7A21A75
:10027000B30AC40AD50A0894A108B108C108D10874
:1002800089E1A816B104C104D104C0F09DD48091C5
:1002900097008F5F809397008091970066E061D709
:1002A0009093970034D3D0937100C0937000D7DE41
:1002B000449BBFCF82B3805882BBBBCFDF91CF912D
:1002C0001F910F91FF90EF90DF90CF90BF90AF9074
:1002D0000895AF92BF92CF92DF92EF92FF920F9369
:1002E0001F93CF93DF9388E084BB85BB8AEB81BBF0
:1002F00080E882BB8EE087BB81E388BB78D2CFD217
:10030000789486E990E0E8D297988AEF90E0E4D27A
:10031000C0E0D0E02196C130D10549F4979A86E932
:1003200090E0DAD297988AEF90E0D6D2F3CF86E9C0
:1003300090E0D2D297988AEF90E0CED2CE0101968B
:10034000059744F384EF91E0C7D251D2ADDE80E54A
:10035000DBD317D385E690E0ABD286E690E0A8D257
:1003600087E690E0A5D2EC018EEF90E0A1D25C018F
:100370008DEE93E09DD28C018EEE93E099D26C01CC
:10038000CE019FD28823E1F3979A109271001092C8
:10039000700065DE88E080BF81E087B98AE090E088
:1003A00087D2EC0181E090E090937A038093790307
:1003B00010928F0010928E00EE2487DE9927909382
:1003C000710080937000809197008E1551F010920B
:1003D00063001092620082E390E06AD2EC01E09048
:1003E00097008091700090917100892BC9F4109250
:1003F0007F0010926200C80164D28823D9F0109265
:100400009900439881E08093630082B3877C82BB2C
:1004100082E08FBD81E485BD85B3817F85BB0EC041
:1004200080916300882319F081E080937F008CED38
:1004300095E03ED280916300882321F010927100F4
:10044000109270000CDE809162008F5F80936200DA
:10045000813009F0B2CF809163008111979AC50174
:1004600030D2882339F182E390E022D25C0180917E
:100470007500482F55272091720030917300421764
:10048000530710F48F5F04C02417350718F4815008
:10049000809375008091750090916400823428F0FB
:1004A000915090936400AB9A05C09F3F19F09F5FF5
:1004B00090936400C80105D2882309F18AE090E096
:1004C000F7D18C012091800030918100C901880F03
:1004D000991F820F931F880F991F66E070E04DD619
:1004E00070938300609382001092810010928000CC
:1004F00080919100882319F481E080936500C60102
:10050000E0D1882321F08CED95E0D2D16C01CE01B1
:10051000D8D1882331F08091820090918300892B7B
:1005200029F080917F00882309F447CF61E0F62EFF
:10053000F092630010929900439884E690E0B8D15D
:10054000EC0180917F00882309F437CFAB9810929B
:100550007F008AE049DE979A1092630080919700AD
:1005600081508093970081E090E090937100809398
:10057000700075DD88B18C7F88B9F092990088B1E0
:100580008A6088B984E690E093D1EC01CE0199D1DC
:100590008823E1F38AE090E09093710080937000EB
:1005A0005EDD88EC90E084D1EC01CE018AD1882315
:1005B000E1F388EE93E07CD1EC0157E0E52EFDCE2F
:1005C0001F920F920FB60F9211240F900FBE0F9033
:1005D0001F9018955E9B24C0809166008823E1F4EB
:1005E0008091890090918A00019690938A0080936F
:1005F0008900FC01E556FD4FE081ED3019F08436AD
:10060000910539F410928A001092890081E080935C
:100610006600589AECB9089510928A0010928900E9
:1006200008951F920F920FB60F9211248F938CB1E1
:100630008093870080918700853F19F410926700AE
:1006400014C0809167008F5F80936700813041F410
:10065000809187008093860088EC80937A0005C0A3
:10066000853618F084E6809367008F910F900FBE57
:100670000F901F901895DC0120E030E040E050E042
:10068000EBE9F2E005C08191280F311D4F5F5F4F0C
:100690004A175B07C1F73F70C90136E09695879509
:1006A0003A95E1F7835CFD01E556FD4F8083119695
:1006B0002F73235CFD01E556FD4F2083A456BD4FEB
:1006C0008DE08C931092660080919B028CB9089506
:1006D000EF92FF920F931F93CF93DF937A01722FC4
:1006E00093E290939B0260939C0280939D0203E0AF
:1006F00010E060E0AEE9B2E046C0F701E60FF11DA0
:1007000090816F5F715019F4E0E040E00FC0F70195
:10071000E60FF11D40816F5F715011F4E0E006C0FB
:10072000F701E60FF11DE0816F5F7150892F86950B
:100730008695835C8C935527892F992783709070B9
:1007400024E0880F991F2A95E1F79A0194E03695E5
:1007500027959A95E1F7822B835CED0189834F7091
:100760005070440F551F440F551F8E2F829586954C
:1007700086958370842B835C8A83EF73E35CEB83C1
:100780000C5F1F4F1496772309F0B7CFC80173DFB2
:10079000DF91CF911F910F91FF90EF9008951F93DC
:1007A000182F8A3011F48DE0FADF5D9BFECF1CB963
:1007B00080E090E01F91089508958091FF0290914C
:1007C00000037FD0882391F080916600882371F028
:1007D00022E245E653E060919A0284E479DF82E305
:1007E00090E066D0909300038093FF02089588E123
:1007F0008AB9599A579A8CE089B960E070E08FEC19
:1008000093E049D388EC90E053D090930003809319
:10081000FF028AE28CB908951F920F920FB60F92D1
:1008200011248F939F9380E882BF809187038F5F0D
:100830008093870380918D00815080938D008F3F3E
:1008400039F583E080938D0080918B0090918C002E
:10085000019690938C0080938B008091780090910A
:100860007900009729F001979093790080937800A0
:1008700080919100882329F080919100815080938C
:10088000910080917A00882319F0815080937A003A
:100890009F918F910F900FBE0F901F90189582E03F
:1008A00083BF89B7816089BF89B7806489BF089594
:1008B00020918B0030918C00280F391FC9010197BE
:1008C000089520918B0030918C00821B930B892F0F
:1008D000992780789927089520918B0030918C007A
:1008E000280F391F2150304080918B0090918C004F
:1008F000A901481B590BCA01892F992787FFF4CFFB
:10090000089585EA86B987E087B9369A089527B1B0
:1009100096E097B910BE82ED86B9349A97B9369AA7
:10092000349BFECF27B944B155B1440F551F440F36
:10093000551F493C510510F048EC50E08091720081
:10094000909173009C0163E0220F331F6A95E1F7D9
:10095000281B390B240F351F83E0369527958A9580
:10096000E1F730937300209372008091740099270F
:100970008217930710F42093740016B888E080BFA4
:1009800008958EB5806C8EBD8EB580648EBD89B79E
:10099000806289BF89B7846089BF08951F920F92D2
:1009A0000FB60F9211248F93809190008F5F8093E8
:1009B00090008F910F900FBE0F901F9018951F926F
:1009C0000F920FB60F9211242F933F934F935F9383
:1009D0008F939F930EB406FE0FC01092900086B5C1
:1009E00097B590939500809394008EB58F7B8EBDC4
:1009F00084E6809391006EC08EB580648EBD46B54E
:100A000057B5809190002091940030919500421B41
:100A1000530B9927982F8827990F480F591F5295E4
:100A200042954F7045275F70452750939300409340
:100A3000920081E04831580758F4109293001092C8
:100A4000920080918E0090918F0040E050E013C0A2
:100A500048515140509393004093920080918E00F2
:100A600090918F008417950730F480918E009091BB
:100A70008F0001960CC080918E0090918F004817D6
:100A8000590748F480918E0090918F0001979093C0
:100A90008F0080938E0080918E0090918F009C013A
:100AA000220F331F220F331F220F331F281B390B36
:100AB000240F351F83E0369527958A95E1F730930B
:100AC00093002093920030938F0020938E0081E05A
:100AD000809365009F918F915F914F913F912F91EE
:100AE0000F900FBE0F901F9018951F920F920FB688
:100AF0000F9211248F938AB78F7B8ABF8F910F90AB
:100B00000FBE0F901F9018958E5F82B985EC86BF3F
:100B100008951F920F920FB60F9211248F939F93F7
:100B200081B19927887F907080389105C9F081380C
:100B3000910534F4009791F18036910591F50AC042
:100B4000883B9105B9F0883F910529F1883A9105D4
:100B500041F510C086B7806886BF1092960023C00A
:100B600083B18093880384EF91E090937900809320
:100B700078000EC080919600882339F4809175002A
:100B800083B981E08093960003C08091640083B9AB
:100B900086B7806807C086B7806986BF86B78069D8
:100BA00086BF85EC86BF9F918F910F900FBE0F90EF
:100BB0001F9018951F920F920FB60F9211240F904D
:100BC0000FBE0F901F90189590919700923041F1B1
:100BD000933030F4992361F0913009F057C014C07C
:100BE0009430C1F1943040F1953009F04FC042C0CB
:100BF00082EA8FBD81E685BD88E087BB82B3877DB1
:100C000082BB949A82E031C082EA8FBD81E685BDC5
:100C100088E087BB82B3877E82BB959A97B918C05C
:100C200082EA8FBD81E485BD8CE087BB82B3877E7D
:100C300082BB959A17B81AC082EA8FBD81E485BD40
:100C40008CE087BB82B38F7C82BB939A82E087B9AA
:100C50004098089582EA8FBD81E485BD8AE087BB14
:100C600082B38F7C82BB939A81E087B988B183601D
:100C700088B9089582EA8FBD81E485BD8AE087BB8B
:100C800082B3877D82BB949A17B8409808951F92CB
:100C90000F920FB60F9211240F931F932F933F9330
:100CA0004F935F936F937F938F939F93AF93BF9374
:100CB000EF93FF9388B19927689414F896958795D8
:100CC0001694E1F7082F017010919700123009F483
:100CD00056C0133030F4112371F0113009F0BCC04C
:100CE00024C0143009F47EC0143008F461C01530FB
:100CF00009F0B2C091C082EA8FBD81E685BD88E06F
:100D000087BB002369F082B3877E82BB959A11E08E
:100D100014BD809165008111FADD409817B91AC0A1
:100D200082B3877D82BB949A97C082B3877E82BB51
:100D3000959A0023F1F482EA8FBD81E485BD8CE0B1
:100D400087BB14BD809165008111E1DD17B888B1C2
:100D5000836088B9809197008F5F8093970080911E
:100D60008000909181000196909381008093800093
:100D700073C082EA8FBD81E685BD88E06CC082EADF
:100D80008FBD81E485BD8CE087BB002361F082B319
:100D90008F7C82BB939A81E084BD80916500811134
:100DA000B6DD17B932C082B3877E82BB959A54C034
:100DB00082B38F7C82BB939A002371F482EA8FBD49
:100DC00081E485BD8AE087BB11E014BD8091650098
:100DD00081119DDD17B9BBCF82EA8FBD81E485BD4E
:100DE0008CE039C082EA8FBD81E485BD8AE087BB93
:100DF000002369F082B3877D82BB949A81E084BD31
:100E000080916500811183DD17B84098A3CF82B32C
:100E10008F7C82BB939A20C082B3877D82BB949AD9
:100E20000023A1F482EA8FBD81E685BD88E087BBFF
:100E300081E084BD80916500811169DD82E087B920
:100E400088B1836088B91092970089CF82EA8FBDFC
:100E500081E485BD8AE087BB459903C0002309F082
:100E600029CF459B03C0002309F424CF10926500CD
:100E7000FF91EF91BF91AF919F918F917F916F9172
:100E80005F914F913F912F911F910F910F900FBE46
:100E90000F901F901895EF92FF920F931F93CF938F
:100EA000DF938C017B01892B11F4672BC9F16EE074
:100EB00070E081E090E03BD0FC01009789F1DC011B
:100EC00080E88383E114F10471F0F386E28681E81F
:100ED00083838091890390918A03892B21F4F09375
:100EE0008A03E093890301151105E1F0118700875A
:100EF00083818260838380918B0390918C03892B03
:100F000089F4F0938C03E0938B0380918D0390918F
:100F10008E03892B39F4F0938E03E0938D0302C086
:100F2000A0E0B0E0CD01E6E0CDB7DEB768C10F9339
:100F30001F93CF93DF93869F8001879F100D969F0D
:100F4000100D1124C8010DD0EC01009721F0A8016B
:100F500060E070E0FFD0CE01DF91CF911F910F9143
:100F60000895CF93DF93AC01029710F442E050E074
:100F7000A0919103B0919203FD01C0E0D0E020E088
:100F800030E020C0808191818417950769F48281C7
:100F90009381209719F09B838A8304C090939203D6
:100FA00080939103CF0132C04817590738F42115B7
:100FB000310519F08217930708F49C01EF010280B4
:100FC000F381E02D3097F1F62115310589F1C90142
:100FD000841B950B049708F4A901E0E0F0E026C01B
:100FE0008D919C91119782179307E9F4481759073F
:100FF00079F4ED018A819B81309719F09383828384
:1010000004C09093920380939103CD01029649C04E
:10101000841B950BFD01E80FF91F41935193029733
:101020008D939C933AC0FD01A281B3811097C1F6C4
:1010300080918F0390919003892B41F480916B00F4
:1010400090916C009093900380938F0320916D009A
:1010500030916E002115310541F42DB73EB78091D6
:10106000690090916A00281B390BE0918F03F09181
:1010700090032E1B3F0B2417350788F0CA010296F8
:101080002817390760F0CF01840F951F02969093BF
:10109000900380938F0341935193CF0102C080E06E
:1010A00090E0DF91CF910895CF93DF93009709F4FB
:1010B0004EC0EC0122971B821A82A0919103B0913D
:1010C0009203109711F140E050E001C0DC01AC1731
:1010D000BD0700F1BB83AA83FE0121913191E20F8C
:1010E000F31FEA17FB0771F42E5F3F4F8D919C9120
:1010F0001197820F931F99838883FD0182819381C9
:101100009B838A834115510559F4D0939203C09370
:1011100091031DC0FD0182819381AD010097B1F65D
:10112000FA01D383C28321913191E20FF31FEC17AF
:10113000FD0769F42E5F3F4F88819981820F931FCD
:10114000FA01918380838A819B8193838283DF91DB
:10115000CF910895DC0101C06D9341505040E0F7FC
:101160000895991B79E004C0991F961708F0961B03
:10117000881F7A95C9F780950895AA1BBB1B51E17A
:1011800007C0AA1FBB1FA617B70710F0A61BB70BF7
:10119000881F991F5A95A9F780959095BC01CD019C
:1011A0000895A1E21A2EAA1BBB1BFD010DC0AA1FA8
:1011B000BB1FEE1FFF1FA217B307E407F50720F0C0
:1011C000A21BB30BE40BF50B661F771F881F991F3B
:1011D0001A9469F760957095809590959B01AC0184
:1011E000BD01CF0108952A88398848885F846E84BC
:1011F0007D848C849B84AA84B984C884DF80EE803B
:10120000FD800C811B81AA81B981CE0FD11D0FB643
:0E121000F894DEBF0FBECDBFED010895FFCFF5
:10121E000A000101FF010164642000930300000035
:00000001FF
/branches/BL-Ctrl/BrushLess-Ctrl_8kHz_PWM_V0_31_2.hex
0,0 → 1,292
:1000000012C073C52BC02AC0D5C5D9C427C026C00D
:10001000C5C402C423C005C321C0D2C21FC01EC0B4
:1000200036C677C51BC011241FBECFE5D4E0DEBFA6
:10003000CDBF10E0A0E6B0E0EEE1F2E102C0059035
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73CD1E0C8D1CF20917F
:10006000700080916400821710F4AB9A282F809161
:100070007200909173008338910560F01BBC1ABC2C
:1000800019BC18BC13BCAB9A019790937300809372
:1000900072000895822F9927880F991F9BBD8ABDF2
:1000A00099BD88BD23BD089582E08FBD81E485BDE3
:1000B00085B3817F85BB89E08EBD089592B7980F87
:1000C00082B7891B87FDFCCF0895809178009091BD
:1000D0007900892B09F04EC080917A00882371F055
:1000E000909186008FEF989FC001112468EC70E01A
:1000F00044D8709385006093840044C0809191003F
:10010000882359F120918E0030918F0041E02D32EB
:10011000340730F4293C310540F42B30310538F4F4
:1001200010928500109284002CC028EC30E08CEFF7
:1001300090E0AC01249FC001259F900D349F900D4D
:100140001124885D994064EB70E017D86D5F7F4F94
:10015000709385006093840014C080918400909116
:100160008500009729F00197909385008093840083
:10017000AB9A08C08091880399279093850080935B
:100180008400AB9880918400909185008F3F910509
:1001900039F030F08FEF90E09093850080938400E9
:1001A0008091840099270895809172009091730046
:1001B00090937803809377038091750099279093AB
:1001C0007A038093790380918200909183009093C9
:1001D0007C0380937B0380918E0090918F0090939D
:1001E0007E0380937D030895AF92BF92CF92DF92FA
:1001F000EF92FF920F931F93CF93DF93182F1092DC
:100200009900439885E090E090937100809370008E
:1002100026DFDAD488EC90E05FD3C12FDD27D093BE
:100220007100C09370004CE2A42E41E0B42EC12CAA
:10023000D12CEE24FF2487010EC080916600882314
:1002400011F4C8D101C0B9D284E638DF0894E11CAA
:10025000F11C011D111DEA14FB040C051D0569F7B5
:10026000C601B5012FE030E040E050E09AD7A21A75
:10027000B30AC40AD50A0894A108B108C108D10874
:1002800089E1A816B104C104D104C0F09DD48091C5
:1002900097008F5F809397008091970066E061D709
:1002A0009093970034D3D0937100C0937000D7DE41
:1002B000449BBFCF82B3805882BBBBCFDF91CF912D
:1002C0001F910F91FF90EF90DF90CF90BF90AF9074
:1002D0000895AF92BF92CF92DF92EF92FF920F9369
:1002E0001F93CF93DF9388E084BB85BB8AEB81BBF0
:1002F00080E882BB8EE087BB81E388BB78D2CFD217
:10030000789486E990E0E8D297988AEF90E0E4D27A
:10031000C0E0D0E02196C230D10549F4979A86E931
:1003200090E0DAD297988AEF90E0D6D2F3CF86E9C0
:1003300090E0D2D297988AEF90E0CED2CE0101968B
:10034000059744F384EF91E0C7D251D2ADDE80E54A
:10035000DBD317D385E690E0ABD286E690E0A8D257
:1003600087E690E0A5D2EC018EEF90E0A1D25C018F
:100370008DEE93E09DD28C018EEE93E099D26C01CC
:10038000CE019FD28823E1F3979A109271001092C8
:10039000700065DE88E080BF81E087B98AE090E088
:1003A00087D2EC0181E090E090937A038093790307
:1003B00010928F0010928E00EE2487DE9927909382
:1003C000710080937000809197008E1551F010920B
:1003D00063001092620082E390E06AD2EC01E09048
:1003E00097008091700090917100892BC9F4109250
:1003F0007F0010926200C80164D28823D9F0109265
:100400009900439881E08093630082B3877C82BB2C
:1004100082E08FBD81E485BD85B3817F85BB0EC041
:1004200080916300882319F081E080937F008CED38
:1004300095E03ED280916300882321F010927100F4
:10044000109270000CDE809162008F5F80936200DA
:10045000813009F0B2CF809163008111979AC50174
:1004600030D2882339F182E390E022D25C0180917E
:100470007500482F55272091720030917300421764
:10048000530710F48F5F04C02417350718F4815008
:10049000809375008091750090916400823428F0FB
:1004A000915090936400AB9A05C09F3F19F09F5FF5
:1004B00090936400C80105D2882309F18AE090E096
:1004C000F7D18C012091800030918100C901880F03
:1004D000991F820F931F880F991F66E070E04DD619
:1004E00070938300609382001092810010928000CC
:1004F00080919100882319F481E080936500C60102
:10050000E0D1882321F08CED95E0D2D16C01CE01B1
:10051000D8D1882331F08091820090918300892B7B
:1005200029F080917F00882309F447CF61E0F62EFF
:10053000F092630010929900439884E690E0B8D15D
:10054000EC0180917F00882309F437CFAB9810929B
:100550007F008AE049DE979A1092630080919700AD
:1005600081508093970081E090E090937100809398
:10057000700075DD88B18C7F88B9F092990088B1E0
:100580008A6088B984E690E093D1EC01CE0199D1DC
:100590008823E1F38AE090E09093710080937000EB
:1005A0005EDD88EC90E084D1EC01CE018AD1882315
:1005B000E1F388EE93E07CD1EC0157E0E52EFDCE2F
:1005C0001F920F920FB60F9211240F900FBE0F9033
:1005D0001F9018955E9B24C0809166008823E1F4EB
:1005E0008091890090918A00019690938A0080936F
:1005F0008900FC01E556FD4FE081ED3019F08436AD
:10060000910539F410928A001092890081E080935C
:100610006600589AECB9089510928A0010928900E9
:1006200008951F920F920FB60F9211248F938CB1E1
:100630008093870080918700853F19F410926700AE
:1006400014C0809167008F5F80936700823041F40F
:10065000809187008093860088EC80937A0005C0A3
:10066000853618F084E6809367008F910F900FBE57
:100670000F901F901895DC0120E030E040E050E042
:10068000EBE9F2E005C08191280F311D4F5F5F4F0C
:100690004A175B07C1F73F70C90136E09695879509
:1006A0003A95E1F7835CFD01E556FD4F8083119695
:1006B0002F73235CFD01E556FD4F2083A456BD4FEB
:1006C0008DE08C931092660080919B028CB9089506
:1006D000EF92FF920F931F93CF93DF937A01722FC4
:1006E00093E290939B0260939C0280939D0203E0AF
:1006F00010E060E0AEE9B2E046C0F701E60FF11DA0
:1007000090816F5F715019F4E0E040E00FC0F70195
:10071000E60FF11D40816F5F715011F4E0E006C0FB
:10072000F701E60FF11DE0816F5F7150892F86950B
:100730008695835C8C935527892F992783709070B9
:1007400024E0880F991F2A95E1F79A0194E03695E5
:1007500027959A95E1F7822B835CED0189834F7091
:100760005070440F551F440F551F8E2F829586954C
:1007700086958370842B835C8A83EF73E35CEB83C1
:100780000C5F1F4F1496772309F0B7CFC80173DFB2
:10079000DF91CF911F910F91FF90EF9008951F93DC
:1007A000182F8A3011F48DE0FADF5D9BFECF1CB963
:1007B00080E090E01F91089508958091FF0290914C
:1007C00000037FD0882391F080916600882371F028
:1007D00022E245E653E060919A0284E479DF82E305
:1007E00090E066D0909300038093FF02089588E123
:1007F0008AB9599A579A8CE089B960E070E08FEC19
:1008000093E049D388EC90E053D090930003809319
:10081000FF028AE28CB908951F920F920FB60F92D1
:1008200011248F939F9380E882BF809187038F5F0D
:100830008093870380918D00815080938D008F3F3E
:1008400039F583E080938D0080918B0090918C002E
:10085000019690938C0080938B008091780090910A
:100860007900009729F001979093790080937800A0
:1008700080919100882329F080919100815080938C
:10088000910080917A00882319F0815080937A003A
:100890009F918F910F900FBE0F901F90189582E03F
:1008A00083BF89B7816089BF89B7806489BF089594
:1008B00020918B0030918C00280F391FC9010197BE
:1008C000089520918B0030918C00821B930B892F0F
:1008D000992780789927089520918B0030918C007A
:1008E000280F391F2150304080918B0090918C004F
:1008F000A901481B590BCA01892F992787FFF4CFFB
:10090000089585EA86B987E087B9369A089527B1B0
:1009100096E097B910BE82ED86B9349A97B9369AA7
:10092000349BFECF27B944B155B1440F551F440F36
:10093000551F493C510510F048EC50E08091720081
:10094000909173009C0163E0220F331F6A95E1F7D9
:10095000281B390B240F351F83E0369527958A9580
:10096000E1F730937300209372008091740099270F
:100970008217930710F42093740016B888E080BFA4
:1009800008958EB5806C8EBD8EB580648EBD89B79E
:10099000806289BF89B7846089BF08951F920F92D2
:1009A0000FB60F9211248F93809190008F5F8093E8
:1009B00090008F910F900FBE0F901F9018951F926F
:1009C0000F920FB60F9211242F933F934F935F9383
:1009D0008F939F930EB406FE0FC01092900086B5C1
:1009E00097B590939500809394008EB58F7B8EBDC4
:1009F00084E6809391006EC08EB580648EBD46B54E
:100A000057B5809190002091940030919500421B41
:100A1000530B9927982F8827990F480F591F5295E4
:100A200042954F7045275F70452750939300409340
:100A3000920081E04831580758F4109293001092C8
:100A4000920080918E0090918F0040E050E013C0A2
:100A500048515140509393004093920080918E00F2
:100A600090918F008417950730F480918E009091BB
:100A70008F0001960CC080918E0090918F004817D6
:100A8000590748F480918E0090918F0001979093C0
:100A90008F0080938E0080918E0090918F009C013A
:100AA000220F331F220F331F220F331F281B390B36
:100AB000240F351F83E0369527958A95E1F730930B
:100AC00093002093920030938F0020938E0081E05A
:100AD000809365009F918F915F914F913F912F91EE
:100AE0000F900FBE0F901F9018951F920F920FB688
:100AF0000F9211248F938AB78F7B8ABF8F910F90AB
:100B00000FBE0F901F9018958C5F82B985EC86BF41
:100B100008951F920F920FB60F9211248F939F93F7
:100B200081B19927887F907080389105C9F081380C
:100B3000910534F4009791F18036910591F50AC042
:100B4000883B9105B9F0883F910529F1883A9105D4
:100B500041F510C086B7806886BF1092960023C00A
:100B600083B18093880384EF91E090937900809320
:100B700078000EC080919600882339F4809175002A
:100B800083B981E08093960003C08091640083B9AB
:100B900086B7806807C086B7806986BF86B78069D8
:100BA00086BF85EC86BF9F918F910F900FBE0F90EF
:100BB0001F9018951F920F920FB60F9211240F904D
:100BC0000FBE0F901F90189590919700923041F1B1
:100BD000933030F4992361F0913009F057C014C07C
:100BE0009430C1F1943040F1953009F04FC042C0CB
:100BF00082EA8FBD81E685BD88E087BB82B3877DB1
:100C000082BB949A82E031C082EA8FBD81E685BDC5
:100C100088E087BB82B3877E82BB959A97B918C05C
:100C200082EA8FBD81E485BD8CE087BB82B3877E7D
:100C300082BB959A17B81AC082EA8FBD81E485BD40
:100C40008CE087BB82B38F7C82BB939A82E087B9AA
:100C50004098089582EA8FBD81E485BD8AE087BB14
:100C600082B38F7C82BB939A81E087B988B183601D
:100C700088B9089582EA8FBD81E485BD8AE087BB8B
:100C800082B3877D82BB949A17B8409808951F92CB
:100C90000F920FB60F9211240F931F932F933F9330
:100CA0004F935F936F937F938F939F93AF93BF9374
:100CB000EF93FF9388B19927689414F896958795D8
:100CC0001694E1F7082F017010919700123009F483
:100CD00056C0133030F4112371F0113009F0BCC04C
:100CE00024C0143009F47EC0143008F461C01530FB
:100CF00009F0B2C091C082EA8FBD81E685BD88E06F
:100D000087BB002369F082B3877E82BB959A11E08E
:100D100014BD809165008111FADD409817B91AC0A1
:100D200082B3877D82BB949A97C082B3877E82BB51
:100D3000959A0023F1F482EA8FBD81E485BD8CE0B1
:100D400087BB14BD809165008111E1DD17B888B1C2
:100D5000836088B9809197008F5F8093970080911E
:100D60008000909181000196909381008093800093
:100D700073C082EA8FBD81E685BD88E06CC082EADF
:100D80008FBD81E485BD8CE087BB002361F082B319
:100D90008F7C82BB939A81E084BD80916500811134
:100DA000B6DD17B932C082B3877E82BB959A54C034
:100DB00082B38F7C82BB939A002371F482EA8FBD49
:100DC00081E485BD8AE087BB11E014BD8091650098
:100DD00081119DDD17B9BBCF82EA8FBD81E485BD4E
:100DE0008CE039C082EA8FBD81E485BD8AE087BB93
:100DF000002369F082B3877D82BB949A81E084BD31
:100E000080916500811183DD17B84098A3CF82B32C
:100E10008F7C82BB939A20C082B3877D82BB949AD9
:100E20000023A1F482EA8FBD81E685BD88E087BBFF
:100E300081E084BD80916500811169DD82E087B920
:100E400088B1836088B91092970089CF82EA8FBDFC
:100E500081E485BD8AE087BB459903C0002309F082
:100E600029CF459B03C0002309F424CF10926500CD
:100E7000FF91EF91BF91AF919F918F917F916F9172
:100E80005F914F913F912F911F910F910F900FBE46
:100E90000F901F901895EF92FF920F931F93CF938F
:100EA000DF938C017B01892B11F4672BC9F16EE074
:100EB00070E081E090E03BD0FC01009789F1DC011B
:100EC00080E88383E114F10471F0F386E28681E81F
:100ED00083838091890390918A03892B21F4F09375
:100EE0008A03E093890301151105E1F0118700875A
:100EF00083818260838380918B0390918C03892B03
:100F000089F4F0938C03E0938B0380918D0390918F
:100F10008E03892B39F4F0938E03E0938D0302C086
:100F2000A0E0B0E0CD01E6E0CDB7DEB768C10F9339
:100F30001F93CF93DF93869F8001879F100D969F0D
:100F4000100D1124C8010DD0EC01009721F0A8016B
:100F500060E070E0FFD0CE01DF91CF911F910F9143
:100F60000895CF93DF93AC01029710F442E050E074
:100F7000A0919103B0919203FD01C0E0D0E020E088
:100F800030E020C0808191818417950769F48281C7
:100F90009381209719F09B838A8304C090939203D6
:100FA00080939103CF0132C04817590738F42115B7
:100FB000310519F08217930708F49C01EF010280B4
:100FC000F381E02D3097F1F62115310589F1C90142
:100FD000841B950B049708F4A901E0E0F0E026C01B
:100FE0008D919C91119782179307E9F4481759073F
:100FF00079F4ED018A819B81309719F09383828384
:1010000004C09093920380939103CD01029649C04E
:10101000841B950BFD01E80FF91F41935193029733
:101020008D939C933AC0FD01A281B3811097C1F6C4
:1010300080918F0390919003892B41F480916B00F4
:1010400090916C009093900380938F0320916D009A
:1010500030916E002115310541F42DB73EB78091D6
:10106000690090916A00281B390BE0918F03F09181
:1010700090032E1B3F0B2417350788F0CA010296F8
:101080002817390760F0CF01840F951F02969093BF
:10109000900380938F0341935193CF0102C080E06E
:1010A00090E0DF91CF910895CF93DF93009709F4FB
:1010B0004EC0EC0122971B821A82A0919103B0913D
:1010C0009203109711F140E050E001C0DC01AC1731
:1010D000BD0700F1BB83AA83FE0121913191E20F8C
:1010E000F31FEA17FB0771F42E5F3F4F8D919C9120
:1010F0001197820F931F99838883FD0182819381C9
:101100009B838A834115510559F4D0939203C09370
:1011100091031DC0FD0182819381AD010097B1F65D
:10112000FA01D383C28321913191E20FF31FEC17AF
:10113000FD0769F42E5F3F4F88819981820F931FCD
:10114000FA01918380838A819B8193838283DF91DB
:10115000CF910895DC0101C06D9341505040E0F7FC
:101160000895991B79E004C0991F961708F0961B03
:10117000881F7A95C9F780950895AA1BBB1B51E17A
:1011800007C0AA1FBB1FA617B70710F0A61BB70BF7
:10119000881F991F5A95A9F780959095BC01CD019C
:1011A0000895A1E21A2EAA1BBB1BFD010DC0AA1FA8
:1011B000BB1FEE1FFF1FA217B307E407F50720F0C0
:1011C000A21BB30BE40BF50B661F771F881F991F3B
:1011D0001A9469F760957095809590959B01AC0184
:1011E000BD01CF0108952A88398848885F846E84BC
:1011F0007D848C849B84AA84B984C884DF80EE803B
:10120000FD800C811B81AA81B981CE0FD11D0FB643
:0E121000F894DEBF0FBECDBFED010895FFCFF5
:10121E000A000101FF010164642000930300000035
:00000001FF
/branches/BL-Ctrl/BrushLess-Ctrl_8kHz_PWM_V0_31_3.hex
0,0 → 1,292
:1000000012C073C52BC02AC0D5C5D9C427C026C00D
:10001000C5C402C423C005C321C0D2C21FC01EC0B4
:1000200036C677C51BC011241FBECFE5D4E0DEBFA6
:10003000CDBF10E0A0E6B0E0EEE1F2E102C0059035
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73CD1E0C8D1CF20917F
:10006000700080916400821710F4AB9A282F809161
:100070007200909173008338910560F01BBC1ABC2C
:1000800019BC18BC13BCAB9A019790937300809372
:1000900072000895822F9927880F991F9BBD8ABDF2
:1000A00099BD88BD23BD089582E08FBD81E485BDE3
:1000B00085B3817F85BB89E08EBD089592B7980F87
:1000C00082B7891B87FDFCCF0895809178009091BD
:1000D0007900892B09F04EC080917A00882371F055
:1000E000909186008FEF989FC001112468EC70E01A
:1000F00044D8709385006093840044C0809191003F
:10010000882359F120918E0030918F0041E02D32EB
:10011000340730F4293C310540F42B30310538F4F4
:1001200010928500109284002CC028EC30E08CEFF7
:1001300090E0AC01249FC001259F900D349F900D4D
:100140001124885D994064EB70E017D86D5F7F4F94
:10015000709385006093840014C080918400909116
:100160008500009729F00197909385008093840083
:10017000AB9A08C08091880399279093850080935B
:100180008400AB9880918400909185008F3F910509
:1001900039F030F08FEF90E09093850080938400E9
:1001A0008091840099270895809172009091730046
:1001B00090937803809377038091750099279093AB
:1001C0007A038093790380918200909183009093C9
:1001D0007C0380937B0380918E0090918F0090939D
:1001E0007E0380937D030895AF92BF92CF92DF92FA
:1001F000EF92FF920F931F93CF93DF93182F1092DC
:100200009900439885E090E090937100809370008E
:1002100026DFDAD488EC90E05FD3C12FDD27D093BE
:100220007100C09370004CE2A42E41E0B42EC12CAA
:10023000D12CEE24FF2487010EC080916600882314
:1002400011F4C8D101C0B9D284E638DF0894E11CAA
:10025000F11C011D111DEA14FB040C051D0569F7B5
:10026000C601B5012FE030E040E050E09AD7A21A75
:10027000B30AC40AD50A0894A108B108C108D10874
:1002800089E1A816B104C104D104C0F09DD48091C5
:1002900097008F5F809397008091970066E061D709
:1002A0009093970034D3D0937100C0937000D7DE41
:1002B000449BBFCF82B3805882BBBBCFDF91CF912D
:1002C0001F910F91FF90EF90DF90CF90BF90AF9074
:1002D0000895AF92BF92CF92DF92EF92FF920F9369
:1002E0001F93CF93DF9388E084BB85BB8AEB81BBF0
:1002F00080E882BB8EE087BB81E388BB78D2CFD217
:10030000789486E990E0E8D297988AEF90E0E4D27A
:10031000C0E0D0E02196C330D10549F4979A86E930
:1003200090E0DAD297988AEF90E0D6D2F3CF86E9C0
:1003300090E0D2D297988AEF90E0CED2CE0101968B
:10034000059744F384EF91E0C7D251D2ADDE80E54A
:10035000DBD317D385E690E0ABD286E690E0A8D257
:1003600087E690E0A5D2EC018EEF90E0A1D25C018F
:100370008DEE93E09DD28C018EEE93E099D26C01CC
:10038000CE019FD28823E1F3979A109271001092C8
:10039000700065DE88E080BF81E087B98AE090E088
:1003A00087D2EC0181E090E090937A038093790307
:1003B00010928F0010928E00EE2487DE9927909382
:1003C000710080937000809197008E1551F010920B
:1003D00063001092620082E390E06AD2EC01E09048
:1003E00097008091700090917100892BC9F4109250
:1003F0007F0010926200C80164D28823D9F0109265
:100400009900439881E08093630082B3877C82BB2C
:1004100082E08FBD81E485BD85B3817F85BB0EC041
:1004200080916300882319F081E080937F008CED38
:1004300095E03ED280916300882321F010927100F4
:10044000109270000CDE809162008F5F80936200DA
:10045000813009F0B2CF809163008111979AC50174
:1004600030D2882339F182E390E022D25C0180917E
:100470007500482F55272091720030917300421764
:10048000530710F48F5F04C02417350718F4815008
:10049000809375008091750090916400823428F0FB
:1004A000915090936400AB9A05C09F3F19F09F5FF5
:1004B00090936400C80105D2882309F18AE090E096
:1004C000F7D18C012091800030918100C901880F03
:1004D000991F820F931F880F991F66E070E04DD619
:1004E00070938300609382001092810010928000CC
:1004F00080919100882319F481E080936500C60102
:10050000E0D1882321F08CED95E0D2D16C01CE01B1
:10051000D8D1882331F08091820090918300892B7B
:1005200029F080917F00882309F447CF61E0F62EFF
:10053000F092630010929900439884E690E0B8D15D
:10054000EC0180917F00882309F437CFAB9810929B
:100550007F008AE049DE979A1092630080919700AD
:1005600081508093970081E090E090937100809398
:10057000700075DD88B18C7F88B9F092990088B1E0
:100580008A6088B984E690E093D1EC01CE0199D1DC
:100590008823E1F38AE090E09093710080937000EB
:1005A0005EDD88EC90E084D1EC01CE018AD1882315
:1005B000E1F388EE93E07CD1EC0157E0E52EFDCE2F
:1005C0001F920F920FB60F9211240F900FBE0F9033
:1005D0001F9018955E9B24C0809166008823E1F4EB
:1005E0008091890090918A00019690938A0080936F
:1005F0008900FC01E556FD4FE081ED3019F08436AD
:10060000910539F410928A001092890081E080935C
:100610006600589AECB9089510928A0010928900E9
:1006200008951F920F920FB60F9211248F938CB1E1
:100630008093870080918700853F19F410926700AE
:1006400014C0809167008F5F80936700833041F40E
:10065000809187008093860088EC80937A0005C0A3
:10066000853618F084E6809367008F910F900FBE57
:100670000F901F901895DC0120E030E040E050E042
:10068000EBE9F2E005C08191280F311D4F5F5F4F0C
:100690004A175B07C1F73F70C90136E09695879509
:1006A0003A95E1F7835CFD01E556FD4F8083119695
:1006B0002F73235CFD01E556FD4F2083A456BD4FEB
:1006C0008DE08C931092660080919B028CB9089506
:1006D000EF92FF920F931F93CF93DF937A01722FC4
:1006E00093E290939B0260939C0280939D0203E0AF
:1006F00010E060E0AEE9B2E046C0F701E60FF11DA0
:1007000090816F5F715019F4E0E040E00FC0F70195
:10071000E60FF11D40816F5F715011F4E0E006C0FB
:10072000F701E60FF11DE0816F5F7150892F86950B
:100730008695835C8C935527892F992783709070B9
:1007400024E0880F991F2A95E1F79A0194E03695E5
:1007500027959A95E1F7822B835CED0189834F7091
:100760005070440F551F440F551F8E2F829586954C
:1007700086958370842B835C8A83EF73E35CEB83C1
:100780000C5F1F4F1496772309F0B7CFC80173DFB2
:10079000DF91CF911F910F91FF90EF9008951F93DC
:1007A000182F8A3011F48DE0FADF5D9BFECF1CB963
:1007B00080E090E01F91089508958091FF0290914C
:1007C00000037FD0882391F080916600882371F028
:1007D00022E245E653E060919A0284E479DF82E305
:1007E00090E066D0909300038093FF02089588E123
:1007F0008AB9599A579A8CE089B960E070E08FEC19
:1008000093E049D388EC90E053D090930003809319
:10081000FF028AE28CB908951F920F920FB60F92D1
:1008200011248F939F9380E882BF809187038F5F0D
:100830008093870380918D00815080938D008F3F3E
:1008400039F583E080938D0080918B0090918C002E
:10085000019690938C0080938B008091780090910A
:100860007900009729F001979093790080937800A0
:1008700080919100882329F080919100815080938C
:10088000910080917A00882319F0815080937A003A
:100890009F918F910F900FBE0F901F90189582E03F
:1008A00083BF89B7816089BF89B7806489BF089594
:1008B00020918B0030918C00280F391FC9010197BE
:1008C000089520918B0030918C00821B930B892F0F
:1008D000992780789927089520918B0030918C007A
:1008E000280F391F2150304080918B0090918C004F
:1008F000A901481B590BCA01892F992787FFF4CFFB
:10090000089585EA86B987E087B9369A089527B1B0
:1009100096E097B910BE82ED86B9349A97B9369AA7
:10092000349BFECF27B944B155B1440F551F440F36
:10093000551F493C510510F048EC50E08091720081
:10094000909173009C0163E0220F331F6A95E1F7D9
:10095000281B390B240F351F83E0369527958A9580
:10096000E1F730937300209372008091740099270F
:100970008217930710F42093740016B888E080BFA4
:1009800008958EB5806C8EBD8EB580648EBD89B79E
:10099000806289BF89B7846089BF08951F920F92D2
:1009A0000FB60F9211248F93809190008F5F8093E8
:1009B00090008F910F900FBE0F901F9018951F926F
:1009C0000F920FB60F9211242F933F934F935F9383
:1009D0008F939F930EB406FE0FC01092900086B5C1
:1009E00097B590939500809394008EB58F7B8EBDC4
:1009F00084E6809391006EC08EB580648EBD46B54E
:100A000057B5809190002091940030919500421B41
:100A1000530B9927982F8827990F480F591F5295E4
:100A200042954F7045275F70452750939300409340
:100A3000920081E04831580758F4109293001092C8
:100A4000920080918E0090918F0040E050E013C0A2
:100A500048515140509393004093920080918E00F2
:100A600090918F008417950730F480918E009091BB
:100A70008F0001960CC080918E0090918F004817D6
:100A8000590748F480918E0090918F0001979093C0
:100A90008F0080938E0080918E0090918F009C013A
:100AA000220F331F220F331F220F331F281B390B36
:100AB000240F351F83E0369527958A95E1F730930B
:100AC00093002093920030938F0020938E0081E05A
:100AD000809365009F918F915F914F913F912F91EE
:100AE0000F900FBE0F901F9018951F920F920FB688
:100AF0000F9211248F938AB78F7B8ABF8F910F90AB
:100B00000FBE0F901F9018958A5F82B985EC86BF43
:100B100008951F920F920FB60F9211248F939F93F7
:100B200081B19927887F907080389105C9F081380C
:100B3000910534F4009791F18036910591F50AC042
:100B4000883B9105B9F0883F910529F1883A9105D4
:100B500041F510C086B7806886BF1092960023C00A
:100B600083B18093880384EF91E090937900809320
:100B700078000EC080919600882339F4809175002A
:100B800083B981E08093960003C08091640083B9AB
:100B900086B7806807C086B7806986BF86B78069D8
:100BA00086BF85EC86BF9F918F910F900FBE0F90EF
:100BB0001F9018951F920F920FB60F9211240F904D
:100BC0000FBE0F901F90189590919700923041F1B1
:100BD000933030F4992361F0913009F057C014C07C
:100BE0009430C1F1943040F1953009F04FC042C0CB
:100BF00082EA8FBD81E685BD88E087BB82B3877DB1
:100C000082BB949A82E031C082EA8FBD81E685BDC5
:100C100088E087BB82B3877E82BB959A97B918C05C
:100C200082EA8FBD81E485BD8CE087BB82B3877E7D
:100C300082BB959A17B81AC082EA8FBD81E485BD40
:100C40008CE087BB82B38F7C82BB939A82E087B9AA
:100C50004098089582EA8FBD81E485BD8AE087BB14
:100C600082B38F7C82BB939A81E087B988B183601D
:100C700088B9089582EA8FBD81E485BD8AE087BB8B
:100C800082B3877D82BB949A17B8409808951F92CB
:100C90000F920FB60F9211240F931F932F933F9330
:100CA0004F935F936F937F938F939F93AF93BF9374
:100CB000EF93FF9388B19927689414F896958795D8
:100CC0001694E1F7082F017010919700123009F483
:100CD00056C0133030F4112371F0113009F0BCC04C
:100CE00024C0143009F47EC0143008F461C01530FB
:100CF00009F0B2C091C082EA8FBD81E685BD88E06F
:100D000087BB002369F082B3877E82BB959A11E08E
:100D100014BD809165008111FADD409817B91AC0A1
:100D200082B3877D82BB949A97C082B3877E82BB51
:100D3000959A0023F1F482EA8FBD81E485BD8CE0B1
:100D400087BB14BD809165008111E1DD17B888B1C2
:100D5000836088B9809197008F5F8093970080911E
:100D60008000909181000196909381008093800093
:100D700073C082EA8FBD81E685BD88E06CC082EADF
:100D80008FBD81E485BD8CE087BB002361F082B319
:100D90008F7C82BB939A81E084BD80916500811134
:100DA000B6DD17B932C082B3877E82BB959A54C034
:100DB00082B38F7C82BB939A002371F482EA8FBD49
:100DC00081E485BD8AE087BB11E014BD8091650098
:100DD00081119DDD17B9BBCF82EA8FBD81E485BD4E
:100DE0008CE039C082EA8FBD81E485BD8AE087BB93
:100DF000002369F082B3877D82BB949A81E084BD31
:100E000080916500811183DD17B84098A3CF82B32C
:100E10008F7C82BB939A20C082B3877D82BB949AD9
:100E20000023A1F482EA8FBD81E685BD88E087BBFF
:100E300081E084BD80916500811169DD82E087B920
:100E400088B1836088B91092970089CF82EA8FBDFC
:100E500081E485BD8AE087BB459903C0002309F082
:100E600029CF459B03C0002309F424CF10926500CD
:100E7000FF91EF91BF91AF919F918F917F916F9172
:100E80005F914F913F912F911F910F910F900FBE46
:100E90000F901F901895EF92FF920F931F93CF938F
:100EA000DF938C017B01892B11F4672BC9F16EE074
:100EB00070E081E090E03BD0FC01009789F1DC011B
:100EC00080E88383E114F10471F0F386E28681E81F
:100ED00083838091890390918A03892B21F4F09375
:100EE0008A03E093890301151105E1F0118700875A
:100EF00083818260838380918B0390918C03892B03
:100F000089F4F0938C03E0938B0380918D0390918F
:100F10008E03892B39F4F0938E03E0938D0302C086
:100F2000A0E0B0E0CD01E6E0CDB7DEB768C10F9339
:100F30001F93CF93DF93869F8001879F100D969F0D
:100F4000100D1124C8010DD0EC01009721F0A8016B
:100F500060E070E0FFD0CE01DF91CF911F910F9143
:100F60000895CF93DF93AC01029710F442E050E074
:100F7000A0919103B0919203FD01C0E0D0E020E088
:100F800030E020C0808191818417950769F48281C7
:100F90009381209719F09B838A8304C090939203D6
:100FA00080939103CF0132C04817590738F42115B7
:100FB000310519F08217930708F49C01EF010280B4
:100FC000F381E02D3097F1F62115310589F1C90142
:100FD000841B950B049708F4A901E0E0F0E026C01B
:100FE0008D919C91119782179307E9F4481759073F
:100FF00079F4ED018A819B81309719F09383828384
:1010000004C09093920380939103CD01029649C04E
:10101000841B950BFD01E80FF91F41935193029733
:101020008D939C933AC0FD01A281B3811097C1F6C4
:1010300080918F0390919003892B41F480916B00F4
:1010400090916C009093900380938F0320916D009A
:1010500030916E002115310541F42DB73EB78091D6
:10106000690090916A00281B390BE0918F03F09181
:1010700090032E1B3F0B2417350788F0CA010296F8
:101080002817390760F0CF01840F951F02969093BF
:10109000900380938F0341935193CF0102C080E06E
:1010A00090E0DF91CF910895CF93DF93009709F4FB
:1010B0004EC0EC0122971B821A82A0919103B0913D
:1010C0009203109711F140E050E001C0DC01AC1731
:1010D000BD0700F1BB83AA83FE0121913191E20F8C
:1010E000F31FEA17FB0771F42E5F3F4F8D919C9120
:1010F0001197820F931F99838883FD0182819381C9
:101100009B838A834115510559F4D0939203C09370
:1011100091031DC0FD0182819381AD010097B1F65D
:10112000FA01D383C28321913191E20FF31FEC17AF
:10113000FD0769F42E5F3F4F88819981820F931FCD
:10114000FA01918380838A819B8193838283DF91DB
:10115000CF910895DC0101C06D9341505040E0F7FC
:101160000895991B79E004C0991F961708F0961B03
:10117000881F7A95C9F780950895AA1BBB1B51E17A
:1011800007C0AA1FBB1FA617B70710F0A61BB70BF7
:10119000881F991F5A95A9F780959095BC01CD019C
:1011A0000895A1E21A2EAA1BBB1BFD010DC0AA1FA8
:1011B000BB1FEE1FFF1FA217B307E407F50720F0C0
:1011C000A21BB30BE40BF50B661F771F881F991F3B
:1011D0001A9469F760957095809590959B01AC0184
:1011E000BD01CF0108952A88398848885F846E84BC
:1011F0007D848C849B84AA84B984C884DF80EE803B
:10120000FD800C811B81AA81B981CE0FD11D0FB643
:0E121000F894DEBF0FBECDBFED010895FFCFF5
:10121E000A000101FF010164642000930300000035
:00000001FF
/branches/BL-Ctrl/BrushLess-Ctrl_8kHz_PWM_V0_31_4.hex
0,0 → 1,292
:1000000012C072C52BC02AC0D4C5D8C427C026C010
:10001000C4C401C423C004C321C0D1C21FC01EC0B8
:1000200035C676C51BC011241FBECFE5D4E0DEBFA8
:10003000CDBF10E0A0E6B0E0ECE1F2E102C0059037
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73CD1DFC8D1CF209180
:10006000700080916400821710F4AB9A282F809161
:100070007200909173008338910560F01BBC1ABC2C
:1000800019BC18BC13BCAB9A019790937300809372
:1000900072000895822F9927880F991F9BBD8ABDF2
:1000A00099BD88BD23BD089582E08FBD81E485BDE3
:1000B00085B3817F85BB89E08EBD089592B7980F87
:1000C00082B7891B87FDFCCF0895809178009091BD
:1000D0007900892B09F04EC080917A00882371F055
:1000E000909186008FEF989FC001112468EC70E01A
:1000F00043D8709385006093840044C08091910040
:10010000882359F120918E0030918F0041E02D32EB
:10011000340730F4293C310540F42B30310538F4F4
:1001200010928500109284002CC028EC30E08CEFF7
:1001300090E0AC01249FC001259F900D349F900D4D
:100140001124885D994064EB70E016D86D5F7F4F95
:10015000709385006093840014C080918400909116
:100160008500009729F00197909385008093840083
:10017000AB9A08C08091880399279093850080935B
:100180008400AB9880918400909185008F3F910509
:1001900039F030F08FEF90E09093850080938400E9
:1001A0008091840099270895809172009091730046
:1001B00090937803809377038091750099279093AB
:1001C0007A038093790380918200909183009093C9
:1001D0007C0380937B0380918E0090918F0090939D
:1001E0007E0380937D030895AF92BF92CF92DF92FA
:1001F000EF92FF920F931F93CF93DF93182F1092DC
:100200009900439885E090E090937100809370008E
:1002100026DFD9D488EC90E05ED3C12FDD27D093C0
:100220007100C09370004CE2A42E41E0B42EC12CAA
:10023000D12CEE24FF2487010EC080916600882314
:1002400011F4C7D101C0B8D284E638DF0894E11CAC
:10025000F11C011D111DEA14FB040C051D0569F7B5
:10026000C601B5012FE030E040E050E099D7A21A76
:10027000B30AC40AD50A0894A108B108C108D10874
:1002800089E1A816B104C104D104C0F09CD48091C6
:1002900097008F5F809397008091970066E060D70A
:1002A0009093970033D3D0937100C0937000D7DE42
:1002B000449BBFCF82B3805882BBBBCFDF91CF912D
:1002C0001F910F91FF90EF90DF90CF90BF90AF9074
:1002D0000895AF92BF92CF92DF92EF92FF920F9369
:1002E0001F93CF93DF9388E084BB85BB8AEB81BBF0
:1002F00080E882BB8EE087BB81E388BB77D2CED219
:10030000789486E990E0E7D297988AEF90E0E3D27C
:10031000C1E0D0E0C430D10549F4979A86E990E075
:10032000DAD297988AEF90E0D6D20BC086E990E0B7
:10033000D2D297988AEF90E0CED22196C530D105DF
:1003400049F784EF91E0C7D251D2AEDE80E5DBD32E
:1003500017D385E690E0ABD286E690E0A8D287E698
:1003600090E0A5D2EC018EEF90E0A1D25C018DEE81
:1003700093E09DD28C018EEE93E099D26C01CE0178
:100380009FD28823E1F3979A109271001092700027
:1003900066DE88E080BF81E087B98AE090E087D29E
:1003A000EC0181E090E090937A03809379031092BE
:1003B0008F0010928E00EE2488DE992790937100B2
:1003C00080937000809197008E1551F01092630019
:1003D0001092620082E390E06AD2EC01E090970014
:1003E0008091700090917100892BC9F410927F0068
:1003F00010926200C80164D28823D9F0109299004B
:10040000439881E08093630082B3877C82BB82E063
:100410008FBD81E485BD85B3817F85BB0EC0809192
:100420006300882319F081E080937F008CED95E0D4
:100430003ED280916300882321F0109271001092C7
:1004400070000DDE809162008F5F809362008130CA
:1004500009F0B2CF809163008111979AC50130D223
:10046000882339F182E390E022D25C01809175000B
:10047000482F55272091720030917300421753077F
:1004800010F48F5F04C02417350718F4815080934F
:1004900075008091750090916400823428F091502D
:1004A00090936400AB9A05C09F3F19F09F5F9093B3
:1004B0006400C80105D2882309F18AE090E0F7D1F1
:1004C0008C012091800030918100C901880F991F13
:1004D000820F931F880F991F66E070E04DD67093CE
:1004E00083006093820010928100109280008091BE
:1004F0009100882319F481E080936500C601E0D162
:10050000882321F08CED95E0D2D16C01CE01D8D1B9
:10051000882331F08091820090918300892B29F00B
:1005200080917F00882309F447CF61E0F62EF09296
:10053000630010929900439884E690E0B8D1EC01F2
:1005400080917F00882309F437CFAB9810927F0009
:100550008AE04ADE979A109263008091970081505A
:100560008093970081E090E09093710080937000F9
:1005700076DD88B18C7F88B9F092990088B18A6065
:1005800088B984E690E093D1EC01CE0199D188231B
:10059000E1F38AE090E090937100809370005FDD5A
:1005A00088EC90E084D1EC01CE018AD18823E1F37C
:1005B00088EE93E07CD1EC0157E0E52EFDCE1F9252
:1005C0000F920FB60F9211240F900FBE0F901F9035
:1005D00018955E9B24C0809166008823E1F4809189
:1005E000890090918A00019690938A0080938900F7
:1005F000FC01E556FD4FE081ED3019F084369105A0
:1006000039F410928A001092890081E0809366008C
:10061000589AECB9089510928A00109289000895B2
:100620001F920F920FB60F9211248F938CB180936B
:10063000870080918700853F19F41092670014C0ED
:10064000809167008F5F80936700843041F48091D0
:1006500087008093860088EC80937A0005C08536F9
:1006600018F084E6809367008F910F900FBE0F9073
:100670001F901895DC0120E030E040E050E0EBE90D
:10068000F2E005C08191280F311D4F5F5F4F4A177F
:100690005B07C1F73F70C90136E0969587953A959B
:1006A000E1F7835CFD01E556FD4F808311962F73C2
:1006B000235CFD01E556FD4F2083A456BD4F8DE020
:1006C0008C931092660080919B028CB90895EF92F2
:1006D000FF920F931F93CF93DF937A01722F93E2D0
:1006E00090939B0260939C0280939D0203E010E034
:1006F00060E0AEE9B2E046C0F701E60FF11D90817F
:100700006F5F715019F4E0E040E00FC0F701E60FB1
:10071000F11D40816F5F715011F4E0E006C0F701F8
:10072000E60FF11DE0816F5F7150892F86958695E8
:10073000835C8C935527892F99278370907024E0D0
:10074000880F991F2A95E1F79A0194E0369527952D
:100750009A95E1F7822B835CED0189834F7050708D
:10076000440F551F440F551F8E2F829586958695F1
:100770008370842B835C8A83EF73E35CEB830C5F71
:100780001F4F1496772309F0B7CFC80173DFDF91AD
:10079000CF911F910F91FF90EF9008951F93182F05
:1007A0008A3011F48DE0FADF5D9BFECF1CB980E04A
:1007B00090E01F91089508958091FF0290910003A9
:1007C0007FD0882391F080916600882371F022E227
:1007D00045E653E060919A0284E479DF82E390E099
:1007E00066D0909300038093FF02089588E18AB950
:1007F000599A579A8CE089B960E070E08EEC93E0EA
:1008000049D388EC90E053D0909300038093FF028B
:100810008AE28CB908951F920F920FB60F9211249D
:100820008F939F9380E882BF809187038F5F80932F
:10083000870380918D00815080938D008F3F39F523
:1008400083E080938D0080918B0090918C000196C5
:1008500090938C0080938B00809178009091790028
:10086000009729F001979093790080937800809108
:100870009100882329F0809191008150809391000C
:1008800080917A00882319F0815080937A009F919B
:100890008F910F900FBE0F901F90189582E083BF2D
:1008A00089B7816089BF89B7806489BF0895209125
:1008B0008B0030918C00280F391FC90101970895D2
:1008C00020918B0030918C00821B930B892F9927EC
:1008D00080789927089520918B0030918C00280F03
:1008E000391F2150304080918B0090918C00A901DC
:1008F000481B590BCA01892F992787FFF4CF089508
:1009000085EA86B987E087B9369A089527B196E0D7
:1009100097B910BE82ED86B9349A97B9369A349B4E
:10092000FECF27B944B155B1440F551F440F551F91
:10093000493C510510F048EC50E0809172009091D4
:1009400073009C0163E0220F331F6A95E1F7281BB7
:10095000390B240F351F83E0369527958A95E1F7EB
:10096000309373002093720080917400992782174E
:10097000930710F42093740016B888E080BF0895A0
:100980008EB5806C8EBD8EB580648EBD89B7806259
:1009900089BF89B7846089BF08951F920F920FB6EF
:1009A0000F9211248F93809190008F5F809390001D
:1009B0008F910F900FBE0F901F9018951F920F925E
:1009C0000FB60F9211242F933F934F935F938F9302
:1009D0009F930EB406FE0FC01092900086B597B597
:1009E00090939500809394008EB58F7B8EBD84E6A6
:1009F000809391006EC08EB580648EBD46B557B5AC
:100A0000809190002091940030919500421B530BEF
:100A10009927982F8827990F480F591F529542956B
:100A20004F7045275F704527509393004093920085
:100A300081E04831580758F41092930010929200C8
:100A400080918E0090918F0040E050E013C048519B
:100A50005140509393004093920080918E0090916A
:100A60008F008417950730F480918E0090918F004D
:100A700001960CC080918E0090918F004817590705
:100A800048F480918E0090918F00019790938F0091
:100A900080938E0080918E0090918F009C01220F98
:100AA000331F220F331F220F331F281B390B240F34
:100AB000351F83E0369527958A95E1F730939300AB
:100AC0002093920030938F0020938E0081E08093DA
:100AD00065009F918F915F914F913F912F910F9062
:100AE0000FBE0F901F9018951F920F920FB60F9286
:100AF00011248F938AB78F7B8ABF8F910F900FBE7F
:100B00000F901F901895885F82B985EC86BF089575
:100B10001F920F920FB60F9211248F939F9381B162
:100B20009927887F907080389105C9F081389105A8
:100B300034F4009791F18036910591F50AC0883B15
:100B40009105B9F0883F910529F1883A910541F561
:100B500010C086B7806886BF1092960023C083B10C
:100B60008093880384EF91E09093790080937800DC
:100B70000EC080919600882339F48091750083B966
:100B800081E08093960003C08091640083B986B7AA
:100B9000806807C086B7806986BF86B7806986BFD0
:100BA00085EC86BF9F918F910F900FBE0F901F9085
:100BB00018951F920F920FB60F9211240F900FBE2F
:100BC0000F901F90189590919700923041F19330BB
:100BD00030F4992361F0913009F057C014C094307B
:100BE000C1F1943040F1953009F04FC042C082EA23
:100BF0008FBD81E685BD88E087BB82B3877D82BBE0
:100C0000949A82E031C082EA8FBD81E685BD88E09A
:100C100087BB82B3877E82BB959A97B918C082EA58
:100C20008FBD81E485BD8CE087BB82B3877E82BBAC
:100C3000959A17B81AC082EA8FBD81E485BD8CE011
:100C400087BB82B38F7C82BB939A82E087B940983E
:100C5000089582EA8FBD81E485BD8AE087BB82B3B7
:100C60008F7C82BB939A81E087B988B1836088B911
:100C7000089582EA8FBD81E485BD8AE087BB82B397
:100C8000877D82BB949A17B8409808951F920F925F
:100C90000FB60F9211240F931F932F933F934F93EF
:100CA0005F936F937F938F939F93AF93BF93EF93D4
:100CB000FF9388B19927689414F8969587951694B0
:100CC000E1F7082F017010919700123009F456C017
:100CD000133030F4112371F0113009F0BCC024C07E
:100CE000143009F47EC0143008F461C0153009F0E6
:100CF000B2C091C082EA8FBD81E685BD88E087BB26
:100D0000002369F082B3877E82BB959A11E014BDFF
:100D1000809165008111FADD409817B91AC082B33D
:100D2000877D82BB949A97C082B3877E82BB959A57
:100D30000023F1F482EA8FBD81E485BD8CE087BB9E
:100D400014BD809165008111E1DD17B888B1836021
:100D500088B9809197008F5F809397008091800081
:100D6000909181000196909381008093800073C0E0
:100D700082EA8FBD81E685BD88E06CC082EA8FBDC6
:100D800081E485BD8CE087BB002361F082B38F7C5A
:100D900082BB939A81E084BD809165008111B6DDAC
:100DA00017B932C082B3877E82BB959A54C082B392
:100DB0008F7C82BB939A002371F482EA8FBD81E419
:100DC00085BD8AE087BB11E014BD8091650081116B
:100DD0009DDD17B9BBCF82EA8FBD81E485BD8CE074
:100DE00039C082EA8FBD81E485BD8AE087BB0023DC
:100DF00069F082B3877D82BB949A81E084BD809143
:100E00006500811183DD17B84098A3CF82B38F7C32
:100E100082BB939A20C082B3877D82BB949A0023C1
:100E2000A1F482EA8FBD81E685BD88E087BB81E0C1
:100E300084BD80916500811169DD82E087B988B148
:100E4000836088B91092970089CF82EA8FBD81E4D0
:100E500085BD8AE087BB459903C0002309F029CFEF
:100E6000459B03C0002309F424CF10926500FF9135
:100E7000EF91BF91AF919F918F917F916F915F9112
:100E80004F913F912F911F910F910F900FBE0F9097
:100E90001F901895EF92FF920F931F93CF93DF93BC
:100EA0008C017B01892B11F4672BC9F16EE070E096
:100EB00081E090E03BD0FC01009789F1DC0180E803
:100EC0008383E114F10471F0F386E28681E8838381
:100ED0008091890390918A03892B21F4F0938A03EE
:100EE000E093890301151105E1F0118700878381E3
:100EF0008260838380918B0390918C03892B89F48A
:100F0000F0938C03E0938B0380918D0390918E037B
:100F1000892B39F4F0938E03E0938D0302C0A0E097
:100F2000B0E0CD01E6E0CDB7DEB768C10F931F9307
:100F3000CF93DF93869F8001879F100D969F100DA2
:100F40001124C8010DD0EC01009721F0A80160E048
:100F500070E0FFD0CE01DF91CF911F910F910895E6
:100F6000CF93DF93AC01029710F442E050E0A091E0
:100F70009103B0919203FD01C0E0D0E020E030E0A9
:100F800020C0808191818417950769F482819381C3
:100F9000209719F09B838A8304C0909392038093D7
:100FA0009103CF0132C04817590738F42115310594
:100FB00019F08217930708F49C01EF010280F38176
:100FC000E02D3097F1F62115310589F1C901841B17
:100FD000950B049708F4A901E0E0F0E026C08D919C
:100FE0009C91119782179307E9F44817590779F4F0
:100FF000ED018A819B81309719F09383828304C02D
:101000009093920380939103CD01029649C0841B73
:10101000950BFD01E80FF91F4193519302978D93B2
:101020009C933AC0FD01A281B3811097C1F68091D3
:101030008F0390919003892B41F480916B009091E4
:101040006C009093900380938F0320916D003091FA
:101050006E002115310541F42DB73EB7809169002E
:1010600090916A00281B390BE0918F03F091900357
:101070002E1B3F0B2417350788F0CA01029628174C
:10108000390760F0CF01840F951F0296909390036B
:1010900080938F0341935193CF0102C080E090E091
:1010A000DF91CF910895CF93DF93009709F44EC05D
:1010B000EC0122971B821A82A0919103B0919203B6
:1010C000109711F140E050E001C0DC01AC17BD0702
:1010D00000F1BB83AA83FE0121913191E20FF31F3E
:1010E000EA17FB0771F42E5F3F4F8D919C9111978A
:1010F000820F931F99838883FD01828193819B8353
:101100008A834115510559F4D0939203C0939103FA
:101110001DC0FD0182819381AD010097B1F6FA01F6
:10112000D383C28321913191E20FF31FEC17FD07A6
:1011300069F42E5F3F4F88819981820F931FFA01D6
:10114000918380838A819B8193838283DF91CF9176
:101150000895DC0101C06D9341505040E0F70895BF
:10116000991B79E004C0991F961708F0961B881FF9
:101170007A95C9F780950895AA1BBB1B51E107C05A
:10118000AA1FBB1FA617B70710F0A61BB70B881F17
:10119000991F5A95A9F780959095BC01CD010895A6
:1011A000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F6B
:1011B000EE1FFF1FA217B307E407F50720F0A21BDD
:1011C000B30BE40BF50B661F771F881F991F1A944A
:1011D00069F760957095809590959B01AC01BD0174
:1011E000CF0108952A88398848885F846E847D8479
:1011F0008C849B84AA84B984C884DF80EE80FD80BF
:101200000C811B81AA81B981CE0FD11D0FB6F89434
:0C121000DEBF0FBECDBFED010895FFCF83
:10121C000A000101FF010164642000930300000037
:00000001FF
/branches/BL-Ctrl/PPM_Decode.c
0,0 → 1,76
/*############################################################################
+ Regler für Brushless-Motoren
+ ATMEGA8 mit 8MHz
+ (c) 01.2007 Holger Buss
+ Nur für den privaten Gebrauch
+ Keine Garantie auf Fehlerfreiheit
+ Kommerzielle Nutzung nur mit meiner Zustimmung
+ Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
+ www.mikrocontroller.com
############################################################################*/
#include "main.h"
volatile unsigned int PPM_Signal = 0;
volatile unsigned char Timer1Overflow = 0;
volatile unsigned char PPM_Timeout = 0; // Ungültig, wenn Null
 
//############################################################################
//
void InitPPM(void)
//############################################################################
{
TCCR1B |= (1<<ICES1)|(1<<ICNC1);
ICP_POS_FLANKE;
ICP_INT_ENABLE;
TIMER1_INT_ENABLE;
}
 
//############################################################################
//
SIGNAL(SIG_OVERFLOW1)
//############################################################################
{
Timer1Overflow++;
}
 
//############################################################################
//
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
{
static unsigned int tim_alt;
static unsigned int ppm;
if(TCCR1B & (1<<ICES1)) // Positive Flanke
{
Timer1Overflow = 0;
tim_alt = ICR1;
ICP_NEG_FLANKE;
PPM_Timeout = 100;
}
else // Negative Flanke
{
ICP_POS_FLANKE;
#ifdef _32KHZ
ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 256) / 16;
#endif
#ifdef _16KHZ
ppm = (ICR1 - tim_alt + (int) Timer1Overflow * 512) / 16;
#endif
if(ppm < 280) ppm = 280;
ppm -= 280;
if(PPM_Signal < ppm) PPM_Signal++;
else if(PPM_Signal > ppm) PPM_Signal--;
if(FILTER_PPM) ppm = (PPM_Signal * FILTER_PPM + ppm) / (FILTER_PPM + 1); // Filtern
PPM_Signal = ppm;
ZeitZumAdWandeln = 1;
}
}
 
//############################################################################
//
SIGNAL(SIG_INTERRUPT0)
//############################################################################
{
CLR_INT0_FLAG; // IntFlag Loeschen
}
 
/branches/BL-Ctrl/PPM_Decode.h
0,0 → 1,27
/*############################################################################
############################################################################*/
 
extern volatile unsigned int PPM_Signal;
extern volatile unsigned char PPM_Timeout;
void InitPPM(void);
 
 
#define INT0_ENABLE GIMSK |= 0x40
#define INT0_DISABLE GIMSK &= ~0x40
#define TIM0_START TIMSK |= 0x01
#define TIM0_STOPP TIMSK &= ~0x01
#define ICP_INT_ENABLE TIMSK |= 0x20
#define ICP_INT_DISABLE TIMSK &= ~0x20
#define TIMER1_INT_ENABLE TIMSK |= 0x04
#define TIMER1_INT_DISABLE TIMSK &= ~0x04
#define TIMER2_INT_ENABLE TIMSK |= 0x40
#define TIMER2_INT_DISABLE TIMSK &= ~0x40
#define INT0_POS_FLANKE MCUCR |= 0x01
#define INT0_ANY_FLANKE MCUCR |= 0x01
#define INT0_NEG_FLANKE MCUCR &= ~0x01
#define CLR_INT0_FLAG GIFR &= ~0x40
#define INIT_INT0_FLANKE MCUCR &= ~0x03; MCUCR |= 0x02;
#define TIMER0_PRESCALER TCCR0
#define ICP_POS_FLANKE TCCR1B |= (1<<ICES1)
#define ICP_NEG_FLANKE TCCR1B &= ~(1<<ICES1)
 
/branches/BL-Ctrl/README.TXT
0,0 → 1,10
Nicht vergessen:
 
ATmega8 auf 4 MHz stellen:
 
Fusebits:
 
CKSEL3: on
CKSEL2: on
CKSEL1: off
CKSEL0: off
/branches/BL-Ctrl/analog.c
0,0 → 1,39
/*############################################################################
 
############################################################################*/
 
#include "main.h"
 
//############################################################################
//Init ADC
void ADC_Init(void)
//############################################################################
{
ADCSRA = 0xA5; // Free Run, 125 kHZ
ADMUX = 7; // Kanal 7
ADCSRA |= 0x40; // Start
}
 
//############################################################################
//Strom Analogwerte lesen
void AdConvert(void)
//############################################################################
{
unsigned int i=0;
unsigned char sense;
sense = ADMUX; // Sense-Kanal merken
ADMUX = 0x06; // Kanal 6
SFIOR = 0x00; // Analog Comperator aus
ADCSRA = 0xD2; // Converter ein, single, 1 MHz
ADCSRA |= 0x10; // Ready löschen
ADMUX = 0x06; // Kanal 6
ADCSRA |= 0x40; // Start
while (((ADCSRA & 0x10) == 0));
ADMUX = sense; // zurück auf den Sense-Kanal
i = ADCW * 4;
if(i > 200) i = 200;
Strom = (i + Strom * 7) / 8;
if (Strom_max < Strom) Strom_max = Strom;
ADCSRA = 0x00;
SFIOR = 0x08; // Analog Comperator ein
}
/branches/BL-Ctrl/analog.h
0,0 → 1,5
 
extern void ADC_Init(void);
extern void GetAnalogWerte(void);
extern void AdConvert(void);
 
/branches/BL-Ctrl/avr.pjt
0,0 → 1,199
;Codewright Project File (do not remove or modify this line)
[ProjInit]
ConfigSetExtMode=2
ProjSetConfigFlags=0x04110940
 
[State]
SysSetCwd='C:\WinAVR\Projects\Flug\Flight-Ctrl_V0_22'
SrchSetFlags=0x0005600a
SrchSetAgainFlags=0x04056004,0
SrchSetAgainFlags=0x02056008,1
SrchSetAttrElements=
SrchSetAgainAttrElements=
FileSortMode=0x0
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\PPM_Decode.c',81,81,1058,605,-1,-1,29,16,2,1,12,'',0x00100008,0,80,0,0,'',0,12
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\main.c',135,135,1058,605,-1,-1,276,8,254,1,3,'',0x00100008,0,80,0,0,'',0,3
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\BLMC.c',0,0,1165,490,-1,-1,1,1,1,1,5,'',0x00100008,0,80,0,0,'',0,5
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\BLMC.h',27,27,1165,490,-1,-1,46,1,26,1,9,'',0x00100008,0,80,0,0,'',0,9
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\timer0.c',135,135,1058,605,-1,-1,30,31,1,1,7,'',0x00100008,0,80,0,0,'',0,7
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\twislave.c',162,162,1058,605,-1,-1,117,1,104,1,8,'',0x00100008,0,80,0,0,'',0,8
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.h',189,189,1058,605,-1,-1,30,5,1,1,2,'',0x00100008,0,80,0,0,'',0,2
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\analog.h',216,216,1058,605,-1,-1,2,1,1,1,14,'',0x00100008,0,80,0,0,'',0,14
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\main.h',243,243,1058,605,-1,-1,30,30,1,1,1,'',0x00100018,0,80,0,0,'',0,1
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\old_macros.h',270,270,1058,605,-1,-1,1,1,1,1,15,'',0x00100008,0,80,0,0,'',0,15
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\PPM_Decode.h',0,0,1058,605,-1,-1,13,9,1,1,10,'',0x00100008,0,80,0,0,'',0,10
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\timer0.h',54,54,1058,605,-1,-1,10,4,1,1,11,'',0x00100008,0,80,0,0,'',0,11
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\twislave.h',81,81,1058,605,-1,-1,1,1,1,1,16,'',0x00100008,0,80,0,0,'',0,16
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\makefile',108,108,1058,605,-1,-1,6,1,1,1,6,'',0x00100008,0,80,0,0,'',0,6
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.c',0,0,1058,605,-1,-1,161,1,139,1,4,'',0x00100008,0,80,0,0,'',0,4
_StateView='C:\WinAVR\Projects\Flug\BL_MC_0_27\analog.c',27,27,1058,605,-1,-1,30,48,1,1,13,'',0x00100008,0,80,0,0,'',0,13
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\PPM_Decode.c',0x0400048e,29,16,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\main.c',0x0400048e,276,8,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\BLMC.c',0x0000048e,1,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\BLMC.h',0x0400048e,46,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\timer0.c',0x0400048e,30,31,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\twislave.c',0x0400048e,117,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.h',0x0400048e,30,5,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\analog.h',0x0400048e,2,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\main.h',0x0c00048e,30,30,25,'5 9','',0x0,'',1,72,1,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\old_macros.h',0x0000048e,1,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\PPM_Decode.h',0x0400048e,13,9,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\timer0.h',0x0c00048e,10,4,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\twislave.h',0x0000048e,1,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\makefile',0x0400048e,6,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.c',0x0400048e,161,1,25,'5 9','',0x0,'',1,72,0,0,''
_StateBuffer='C:\WinAVR\Projects\Flug\BL_MC_0_27\analog.c',0x0c00048e,30,48,25,'5 9','',0x0,'',1,72,0,0,''
_StateHistory=FILELIST,'C:\WinAVR\Projects\Flug\BL_MC_0_27\old_macros.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\PPM_Decode.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\printf_P.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\timer0.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\twislave.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\makefile','C:\WinAVR\Projects\Flug\BL_MC_0_27\main.c','C:\WinAVR\Projects\Flug\BL_MC_0_27\BLMC.c','C:\WinAVR\Projects\Flug\BL_MC_0_27\BLMC.h'
_StateHistory=SEARCH,'ClrSENSE()','GRUEN','MANUELL_PWM','ENABLE_SENSE_INT','ACSR','GRUE','MotorGestoppt','MotorAnwerfen','SIO_DEBUG','X3D_SIO'
_StateHistory=REPLACE,'DebugDisplayZeilenAnforderung','SollPeriodendauer','TestschubTimer','SENSE_h','SENSE_L','SENSE_H','SENSE__FALLING_INT','SENSE_RISING_INT','SENSE_FALLING_INT'
_StateHistory=EDITFILE,'C:\WinAVR\Projects\Flug\BL_MC_0_27\PPM_Decode.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\printf_P.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\timer0.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\twislave.h','C:\WinAVR\Projects\Flug\BL_MC_0_27\main.c','C:\WinAVR\Projects\Flug\BL_MC_0_27\makefile','C:\WinAVR\Projects\Flug\Flight-Ctrl_V0_05\AVR.pjt','C:\WinAVR\Projects\Flug\Flight-Ctrl_V0_06\Main.psp','C:\compiler\M16C\UniversalGateway\UN_DP_V1_25\m16C.psp','C:\WinAVR\Projects\Flug\Flight-Ctrl_V0_22\Main.psp'
_StateHistory=DOCUMENTVISIT,'14 18 C:\WinAVR\Projects\Flug\BL_MC_0_27\main.h','276 8 C:\WinAVR\Projects\Flug\BL_MC_0_27\main.c','15 16 C:\WinAVR\Projects\Flug\BL_MC_0_27\main.h','161 1 C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.c','33 5 C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.h','30 30 C:\WinAVR\Projects\Flug\BL_MC_0_27\main.h','33 5 C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.h','30 30 C:\WinAVR\Projects\Flug\BL_MC_0_27\main.h','276 8 C:\WinAVR\Projects\Flug\BL_MC_0_27\main.c','33 5 C:\WinAVR\Projects\Flug\BL_MC_0_27\uart.h'
_StateDocumentVisit=10
 
[Editor]
_RestoreSysFlags=0x43097fca, 0xfffffffc, 0
FilterProjDeleteList
FilterProjAdd='Source Files','*.c;*.cc;*.cpp;*.cxx;*.ic;*.c96;*.fle;*.cmp;*.asm;*.src;*.s;*.a96;*.i;*.pcp',-1
FilterProjAdd='Header Files','*.h;*.inc;*.sfr',-1
FilterProjAdd='Project Files','*.pjt',-1
FilterProjAdd='Resources','*.rc;*.bmp;*.ico;*.cur;*.dlg',-1
FilterProjAdd='Other Files','*.*',-1
VCSProject=''
VCSProjectPath=''
VCSProjectLocalPath=''
ScrapSetCount=1
ClipboardSetCount=1
ClipboardEnableSepStr=1
ClipboardSetSepStr='\r\n',0
ClipboardEnableTermStr=1
ClipboardSetTermStr='\r\n',0
 
[Tools]
ToolDeleteList
ToolAddCmd='$_custom_tool_$_1','API Database Editor',1342177312,'cwtedit.exe'
ToolAddCmd='$_custom_tool_$_2','Paint',1342177713,'make.exe program'
ToolAddCmd='$_custom_tool_$_3','Build all',1342177680,'make.exe all'
ToolAddCmd='$_custom_tool_$_4','Bulid Clean',1342177680,'make.exe clean'
 
[Compiler]
CompilerAssign='TASKING src','.src'
CompilerNewExt=.htm
CompilerNewExt=.v
CompilerNewExt=.awk
CompilerNewExt=.bas
CompilerAssign='TASKING c','.c'
CompilerNewExt=.adb
CompilerNewExt=.cfml
CompilerNewExt=.jsp
CompilerNewExt=.pl
CompilerNewExt=.vhd
CompilerNewExt=.pas
CompilerNewExt=.tk
CompilerNewExt=.asp
CompilerNewExt=.rul
CompilerNewExt=.cob
CompilerNewExt=.js
CompilerNewExt=.php
CompilerNewExt=.rc
CompilerNewExt=.tcl
CompilerAssign='TASKING cc','.cc'
CompilerAssign='TASKING fle','.fle'
CompilerNewExt=.ini
CompilerAssign='TASKING ic','.ic'
CompilerNewExt=.cs
CompilerNewExt=.bat
CompilerNewExt=.html
CompilerAssign='TASKING cpp','.cpp'
CompilerAssign='TASKING cxx','.cxx'
CompilerAssign='TASKING asm','.asm'
CompilerNewExt=.txt
CompilerNewExt=.nrx
CompilerNewExt=.java
CompilerNewExt=.sqlj
CompilerNewExt=.xml
TagSetCmd='"${HOME}${WTAGS}" -oc -d -t"${TAGFILE}.tag" -p"${TAGFILE}.ptg"',0x8000060
BrowseSetFile='C:\Cw32_M16\tagfile.ptg'
TagSetFile='C:\Cw32_M16\tagfile.tag'
 
[VersionControl:PVCS]
VCSSetCmd=VCS_CHECKIN_ID,'put -n -T@"%Q" -M@"%Q" "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKINLOCK_ID,'put -n -T@"%Q" -M@"%Q" -l "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKOUT_ID,'get -y "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKOUTLOCK_ID,'get -y -l "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKLOCK_ID,'vcs -y -l "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKUNLOCK_ID,'vcs -y -u "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKLABEL_ID,'vcs -y -v"${VCSLABEL}" "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKLOG_ID,'vlog "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKPROP_ID,'vlog -b "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKDIFF_ID,'vdiff -r "%b%e"',0x8000040
VCSSetCmd=VCS_CHECKMENU_ID,'pvcsvmwn',0x8000000
VCSSetCmd=VCS_ADD_ID,'vcs -i -t@"%Q" "%b%e"',0x8000040
VCSSetCmd=VCS_REMOVE_ID,'del /f "%b%{??v|___}e"',0x8000040
 
[Project]
ConfigSetUserMakefile=''
ConfigSetUserMakefileParser=''
ConfigSetUserMakefileTimeStamp=0
ConfigSetUserMakefileAutoSync=0
ConfigSetLinkDBFilename='C:\Cw32\cwright.ldb'
ConfigSetMarkDBFilename='C:\Cw32\cwright.mrk'
ConfigSetSymbolDBFilename='C:\WinAVR\Projects\Flug\BL_MC_0_01\avr.sbl'
EditSetPath=''
 
[Files]
.\uart.c
.\analog.c
.\interrupt4.c
.\main.c
.\PPM_Decode.c
.\printf_P.c
.\timer0.c
.\twislave.c
.\uart.h
.\analog.h
.\main.h
.\old_macros.h
.\PPM_Decode.h
.\printf_P.h
.\timer0.h
.\twislave.h
.\makefile
 
 
[Ede]
Toolchain=c:\c166\etc\c166.dol
ToolchainName=TASKING C for C166/ST10 v6.0 r4
ProjectDir=C:\WinAVR\Projects\Flug\BL_MC_0_27
UserMode=Expert
EdeVersion=2.7r5 (094)
CodeWrightVersion=7.0
DefBuildSettings=True
SaveFiles=True
ScanDependencies=False
StopAfterError=True
KeepTmpFiles=False
ExtMakefile=False
ExtMakefileName=
UseMakeOptions=False
MakeOptions=
ShowOptions=False
ExtDebugger=False
ExtDebuggerName=
UseDOSShell=False
SaveOptionMethod=0
SaveOptionFileName=
LoadOptionFileName=
LoadOptionStartup=False
GroupList=
 
[Directories]
Executables=c:\c166\bin
Includes=c:\c166\include
Libraries=c:\c166\lib
 
[DefaultOptions]
CpuRwdc=CpuRwdcDelay
OptionList=CpuRwdc
 
[Options]
FileList=
/branches/BL-Ctrl/main.c
0,0 → 1,349
/*############################################################################
+ Regler für Brushless-Motoren
+ ATMEGA8 mit 8MHz
+ (c) 01.2007 Holger Buss
+ Nur für den privaten Gebrauch
+ Keine Garantie auf Fehlerfreiheit
+ Kommerzielle Nutzung nur mit meiner Zustimmung
+ Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
+ www.mikrocontroller.com
/############################################################################*/
 
#include "main.h"
 
unsigned int PWM = 0;
unsigned int Strom = 0; //ca. in 0,1A
unsigned char Strom_max = 0;
unsigned char Mittelstrom = 0;
unsigned int Drehzahl = 0; // in 100UPM 60 = 6000
unsigned int KommutierDelay = 10;
unsigned int I2C_Timeout = 0;
unsigned char SIO_Timeout = 0;
unsigned int SollDrehzahl = 0;
unsigned int IstDrehzahl = 0;
unsigned int DrehZahlTabelle[256];//vorberechnete Werte zur Drehzahlerfassung
unsigned char ZeitFuerBerechnungen = 1;
unsigned char MotorAnwerfen = 0;
unsigned char MotorGestoppt = 1;
unsigned char MaxPWM = MAX_PWM;
unsigned int CntKommutierungen = 0;
unsigned int SIO_Drehzahl = 0;
unsigned char ZeitZumAdWandeln = 1;
 
 
//############################################################################
//
void SetPWM(void)
//############################################################################
{
unsigned char tmp_pwm;
tmp_pwm = PWM;
if(tmp_pwm > MaxPWM) // Strombegrenzung
{
tmp_pwm = MaxPWM;
PORTC |= ROT;
}
if(Strom > MAX_STROM) // Strombegrenzung
{
OCR1A = 0; OCR1B = 0; OCR2 = 0;
PORTC |= ROT;
Strom--;
}
else
{
#ifdef _32KHZ
OCR1A = tmp_pwm; OCR1B = tmp_pwm; OCR2 = tmp_pwm;
#endif
 
#ifdef _16KHZ
OCR1A = 2 * (int)tmp_pwm; OCR1B = 2 * (int)tmp_pwm; OCR2 = tmp_pwm;
#endif
}
}
 
//############################################################################
//
void PWM_Init(void)
//############################################################################
{
PWM_OFF;
TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |
(0 << WGM13) | (0<< ICES1) | (0 << ICNC1);
}
 
//############################################################################
//
void Wait(unsigned char dauer)
//############################################################################
{
dauer = (unsigned char)TCNT0 + dauer;
while((TCNT0 - dauer) & 0x80);
}
 
//############################################################################
//
void Anwerfen(unsigned char pwm)
//############################################################################
{
unsigned long timer = 300,i;
DISABLE_SENSE_INT;
PWM = 5;
SetPWM();
Manuell();
Delay_ms(200);
PWM = pwm;
while(1)
{
for(i=0;i<timer; i++)
{
if(!UebertragungAbgeschlossen) SendUart();
else DatenUebertragung();
Wait(100); // warten
}
timer-= timer/15+1;
if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }
 
Manuell();
Phase++;
Phase %= 6;
AdConvert();
PWM = pwm;
SetPWM();
if(SENSE)
{
PORTD ^= GRUEN;
}
}
}
 
//############################################################################
//
unsigned char SollwertErmittlung(void)
//############################################################################
{
static unsigned int sollwert = 0;
unsigned int ppm;
if(!I2C_Timeout) // bei Erreichen von 0 ist der Wert ungültig
{
if(SIO_Timeout) // es gibt gültige SIO-Daten
{
sollwert = (MAX_PWM * (unsigned int) SIO_Sollwert) / 200; // skalieren auf 0-200 = 0-255
}
else
if(PPM_Timeout) // es gibt gültige PPM-Daten
{
ppm = PPM_Signal;
if(ppm > 300) ppm = 0; // ungültiges Signal
if(ppm > 200) ppm = 200;
if(ppm <= MIN_PPM) sollwert = 0;
else
{
sollwert = (int) MIN_PWM + ((MAX_PWM - MIN_PWM) * (ppm - MIN_PPM)) / (190 - MIN_PPM);
}
PORTC &= ~ROT;
}
else // Kein gültiger Sollwert
{
if(!TEST_SCHUB) { if(sollwert) sollwert--; }
PORTC |= ROT;
}
}
else // I2C-Daten sind gültig
{
sollwert = I2C_RXBuffer;
PORTC &= ~ROT;
}
if(sollwert > MAX_PWM) sollwert = MAX_PWM;
return(sollwert);
}
 
void DebugAusgaben(void)
{
DebugOut.Analog[0] = Strom;
DebugOut.Analog[1] = Mittelstrom;
DebugOut.Analog[2] = SIO_Drehzahl;
DebugOut.Analog[3] = PPM_Signal;
}
 
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
char altPhase = 0;
int test = 0;
unsigned int MinUpmPulse,Blink,TestschubTimer;
unsigned int Blink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;
 
DDRC = 0x08;
PORTC = 0x08;
DDRD = 0xBA;
PORTD = 0x80;
DDRB = 0x0E;
PORTB = 0x31;
UART_Init();
Timer0_Init();
sei ();//Globale Interrupts Einschalten
// Am Blinken erkennt man die richtige Motoradresse
for(test=0;test<5;test++)
{
if(test == MOTORADRESSE) PORTD |= GRUEN;
Delay_ms(150);
PORTD &= ~GRUEN;
Delay_ms(250);
}
 
Delay_ms(500);
UART_Init();
PWM_Init();
 
InitIC2_Slave(0x50);
InitPPM();
 
Blink = SetDelay(101);
Blink2 = SetDelay(102);
MinUpmPulse = SetDelay(103);
MittelstromTimer = SetDelay(254);
DrehzahlMessTimer = SetDelay(1005);
TestschubTimer = SetDelay(1006);
while(!CheckDelay(MinUpmPulse));
PORTD |= GRUEN;
PWM = 0;
 
SetPWM();
 
SFIOR = 0x08; // Analog Comperator ein
ADMUX = 1;
 
MinUpmPulse = SetDelay(10);
DebugOut.Analog[1] = 1;
PPM_Signal = 0;
 
// zum Test der Hardware; Motor dreht mit konstanter Drehzahl ohne Regelung
if(TEST_MANUELL) Anwerfen(TEST_MANUELL); // kommt von dort nicht wieder
 
while (1)
{
if(!TEST_SCHUB) PWM = SollwertErmittlung();
//I2C_TXBuffer = PWM; // Antwort über I2C-Bus
if(MANUELL_PWM) PWM = MANUELL_PWM;
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Phase != altPhase) // es gab eine Kommutierung im Interrupt
{
MotorGestoppt = 0;
ZeitFuerBerechnungen = 0; // direkt nach einer Kommutierung ist Zeit
MinUpmPulse = SetDelay(50); // Timeout, falls ein Motor stehen bleibt
altPhase = Phase;
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!PWM) // Sollwert == 0
{
MotorAnwerfen = 0; // kein Startversuch
ZeitFuerBerechnungen = 0;
// nach 1,5 Sekunden den Motor als gestoppt betrachten
if(CheckDelay(DrehzahlMessTimer))
{
DISABLE_SENSE_INT;
MotorGestoppt = 1;
STEUER_OFF;
}
}
else
{
if(MotorGestoppt) MotorAnwerfen = 1; // Startversuch
MotorGestopptTimer = SetDelay(1500);
}
 
if(MotorGestoppt && !TEST_SCHUB) PWM = 0;
SetPWM();
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!ZeitFuerBerechnungen++)
{
if(MotorGestoppt) PORTD |= GRUEN; //else PORTD &= ~GRUEN;
if(SIO_DEBUG)
{
DebugAusgaben(); // welche Werte sollen angezeigt werden?
if(!UebertragungAbgeschlossen) SendUart();
else DatenUebertragung();
}
// Berechnen des Mittleren Stroms zur (langsamen) Strombegrenzung
if(CheckDelay(MittelstromTimer))
{
MittelstromTimer = SetDelay(50); // alle 50ms
if(Mittelstrom < Strom) Mittelstrom++;// Mittelwert des Stroms bilden
else if(Mittelstrom > Strom) Mittelstrom--;
if(Mittelstrom > LIMIT_STROM)// Strom am Limit?
{
MaxPWM--;// dann die Maximale PWM herunterfahren
PORTC |= ROT;
}
else
{
if(MaxPWM < MAX_PWM) MaxPWM++;
}
}
 
if(CheckDelay(DrehzahlMessTimer)) // Ist-Drehzahl bestimmen
{
DrehzahlMessTimer = SetDelay(10);
SIO_Drehzahl = (6 * CntKommutierungen) / (POLANZAHL / 2);
CntKommutierungen = 0;
if(PPM_Timeout == 0) // keine PPM-Signale
ZeitZumAdWandeln = 1;
}
 
 
if(CheckDelay(TestschubTimer))
{
TestschubTimer = SetDelay(1500);
if(TEST_SCHUB)
{
switch(test)
{
case 0: PWM = 50; test++; break;
case 1: PWM = 60; test++; break;
case 2: PWM = 128; test++; break;
case 3: PWM = 200; test++; break;
case 4: PWM = 255; test = 0; break;
default: test = 0;
}
}
}
// Motor Stehen geblieben
if((CheckDelay(MinUpmPulse) && SIO_Drehzahl == 0) || MotorAnwerfen)
{
MotorGestoppt = 1;
DISABLE_SENSE_INT;
MinUpmPulse = SetDelay(100);
if(MotorAnwerfen)
{
PORTC &= ~ROT;
MotorAnwerfen = 0;
Anwerfen(10);
PORTD |= GRUEN;
MotorGestoppt = 0;
Phase--;
PWM = 1;
SetPWM();
SENSE_TOGGLE_INT;
ENABLE_SENSE_INT;
MinUpmPulse = SetDelay(100);
while(!CheckDelay(MinUpmPulse)); // kurz Synchronisieren
PWM = 10;
SetPWM();
MinUpmPulse = SetDelay(200);
while(!CheckDelay(MinUpmPulse)); // kurz Durchstarten
MinUpmPulse = SetDelay(1000);
altPhase = 7;
}
}
} // ZeitFuerBerechnungen
} // while(1) - Hauptschleife
}
 
/branches/BL-Ctrl/main.h
0,0 → 1,126
#ifndef _MAIN_H
#define _MAIN_H
 
#define MOTORADRESSE 4 // Adresse (1-4)
#define MANUELL_PWM 0 // zur manuellen Vorgabe der PWM Werte: 0-255
#define TEST_MANUELL 0 // zum Testen der Hardware ohne Kommutierungsdetektion Werte: 0-255 (PWM)
#define TEST_SCHUB 0 // Erzeugt ein Schubmuster Werte: 0 = normal 1 = Test
#define POLANZAHL 12 // Anzahl der Pole (Magnete) Wird nur zur Drehzahlausgabe über Debug gebraucht
#define MAX_PWM 255
#define MIN_PWM 3
#define MIN_PPM 10 // ab hier (PPM-Signal) schaltet der Regler erst ein
#define FILTER_PPM 7 // wie stark soll das PPM-Signal gefiltert werden (Werte: 0-30)?
 
#define SIO_DEBUG 0 // Testwertausgaben auf der seriellen Schnittstelle
#define X3D_SIO 1 // serielles Protokoll des X3D (38400Bd) Achtung: dann muss SIO_DEBUG = 0 sein
 
 
#define _16KHZ // Schaltfrequenz -- die gewünschte einkommentieren
//#define _32KHZ // Schaltfrequenz -- die gewünschte einkommentieren
 
 
#ifdef _16KHZ
#define MAX_STROM 130 // ab ca. 13A PWM ausschalten
#define LIMIT_STROM 65 // ab ca. 6,5A PWM begrenzen
#endif
 
#ifdef _32KHZ
#define MAX_STROM 130 // ab ca. 13A PWM ausschalten
#define LIMIT_STROM 50 // ab ca. 5,0A PWM begrenzen
#endif
 
#define SYSCLK 4000000L //Quarz Frequenz in Hz
 
 
//Robbe Roxxy 2824-34 mit Todd 10x4,5 bei 16kHz
//PWM Strom Schub
//10 0,18A 21g
//20 0,30A 38g
//30 0,40A 49g
//40 0,54A 60g
//50 0,70A 83g
//60 0,95A 102g
//70 1,25A 128g
//80 1,50A 151g
//90 1,83A 175g
//100 2,25A 206g
//110 2,66A 228g
//120 3,10A 257g
//130 3,55A 278g
//140 4,00A 305g
//150 4,50A 330g
//160 5,30A 355g
//170 5,85A 387g
//180 6,40A 400g
//190 7,10A 425g
//200 7,60A 460g
 
//0,5A 63g 14%
//1,0A 110g 24%
//1,5A 170g 32%
//2,0A 195g 37%
//2,5A 230g 41%
//3,0A 260g 46%
//3,5A 290g 50%
//4,0A 310g 53%
//4,5A 340g 58%
//5,0A 360g 63%
//5,5A 380g 67%
//6,0A 400g 68%
//6,5A 420g 70%
//7,0A 450g 75%
//7,5A 460g 78%
//8,0A 475g 82%
//9,0A 550g 86%
//11 A 600g 100%
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "twislave.h"
#include "old_macros.h"
#include "analog.h"
#include "uart.h"
#include "timer0.h"
#include "BLMC.h"
 
#include "PPM_Decode.h"
 
extern unsigned int I2C_Timeout;
extern unsigned char SIO_Timeout;
extern unsigned int PWM;
extern unsigned int Strom; //ca. in 0,1A
extern unsigned char Strom_max;
extern unsigned char Mittelstrom;
extern unsigned int CntKommutierungen;
extern unsigned char MotorAnwerfen;
extern unsigned char MotorGestoppt;
extern unsigned char ZeitZumAdWandeln;
extern unsigned char MaxPWM;
 
#define ROT 0x08
#define GRUEN 0x80
 
#if defined(__AVR_ATmega8__)
# define OC1 PB1
# define DDROC DDRB
# define OCR OCR1A
# define PWM10 WGM10
# define PWM11 WGM11
#endif
 
 
#endif //_MAIN_H
 
 
 
 
 
/branches/BL-Ctrl/makefile
0,0 → 1,386
#--------------------------------------------------------------------
# MCU name
MCU = atmega8
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 31
#-------------------------------------------------------------------
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
TARGET = BrushLess-Ctrl_8kHz_PWM_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c timer0.c analog.c PPM_Decode.c twislave.c BLMC.c
#printf_P.c
##########################################################################################################
 
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
 
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
 
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION)
 
ifeq ($(AVR_CTRL_PLATINE), 1)
CFLAGS += -DAVR_CTRL_PLATINE=$(AVR_CTRL_PLATINE)
endif
 
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
 
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
 
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = stk200
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V -E noreset
 
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
 
 
 
# ---------------------------------------------------------------------------
 
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
 
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
# $(REMOVE) $(TARGET).eep
# $(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/BL-Ctrl/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/BL-Ctrl/timer0.c
0,0 → 1,60
/*****************************************************************************
*****************************************************************************/
#include "main.h"
volatile unsigned int CountMilliseconds = 0;
volatile unsigned char Timer0Overflow;
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL(SIG_OVERFLOW0)
{
static unsigned char cnt;
TCNT0 = 0x80;
Timer0Overflow++;
if(!cnt--)
{
cnt = 3;
CountMilliseconds += 1;
if(I2C_Timeout) I2C_Timeout--;
if(PPM_Timeout) PPM_Timeout--;
if(SIO_Timeout) SIO_Timeout--;
}
}
 
 
void Timer0_Init(void)
{
TCCR0 = TIMER_TEILER;
//TCNT0 = -TIMER_RELOAD_VALUE; // reload
TIM0_START;
TIMER2_INT_ENABLE;
}
 
 
unsigned int SetDelay(unsigned int t)
{
return(CountMilliseconds + t - 1);
}
 
char CheckDelay (unsigned int t)
{
return(((t - CountMilliseconds) & 0x8000) >> 8);
}
 
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
/branches/BL-Ctrl/timer0.h
0,0 → 1,15
#if defined (__AVR_ATmega8__)
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 125
#endif
 
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char Timer0Overflow;
 
 
void Timer1_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
/branches/BL-Ctrl/twislave.c
0,0 → 1,75
/*############################################################################
Slaveadr = 0x52 = Vorne, 0x54 = Hinten, 0x56 = Rechts, 0x58 = Links
############################################################################*/
 
#include <avr/io.h>
#include <util/twi.h>
#include "main.h"
 
unsigned char I2C_RXBuffer;
unsigned char Byte_Counter=0;
 
//############################################################################
//I2C (TWI) Interface Init
void InitIC2_Slave(uint8_t adr)
//############################################################################
{
TWAR = adr + (2*MOTORADRESSE); // Eigene Adresse setzen
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
}
 
//############################################################################
//ISR, die bei einem Ereignis auf dem Bus ausgelöst wird. Im Register TWSR befindet
//sich dann ein Statuscode, anhand dessen die Situation festgestellt werden kann.
ISR (TWI_vect)
//############################################################################
{
switch (TWSR & 0xF8)
{
case SR_SLA_ACK:
TWCR |= (1<<TWINT);
Byte_Counter=0;
return;
// Daten Empfangen
case SR_PREV_ACK:
I2C_RXBuffer = TWDR;
I2C_Timeout = 500;
TWCR |= (1<<TWINT);
return;
// Daten Senden
case SW_SLA_ACK:
if (Byte_Counter==0)
{
TWDR = Mittelstrom;
Byte_Counter++;
}
else
{
TWDR = MaxPWM;
}
TWCR |= (1<<TWINT);
return;
// Daten Senden
case SW_DATA_ACK:
if (Byte_Counter==0)
{
TWDR = Mittelstrom;
Byte_Counter++;
}
else
{
TWDR = MaxPWM;
}
TWCR |= (1<<TWINT);
return;
// Bus-Fehler zurücksetzen
case TWI_BUS_ERR_2:
TWCR |=(1<<TWSTO) | (1<<TWINT);
// Bus-Fehler zurücksetzen
case TWI_BUS_ERR_1:
TWCR |=(1<<TWSTO) | (1<<TWINT);
}
TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE); // TWI Reset
}
 
 
/branches/BL-Ctrl/twislave.h
0,0 → 1,32
#ifndef _TWI_SLAVE_H_
#define _TWI_SLAVE_H_
 
extern unsigned char I2C_RXBuffer;
extern unsigned char Byte_Counter;
 
extern void InitIC2_Slave (uint8_t adr);
 
#define TWI_BUS_ERR_1 0x00
#define TWI_BUS_ERR_2 0xF8
 
// Status Slave RX Mode
#define SR_SLA_ACK 0x60
#define SR_LOST_ACK 0x68
#define SR_GEN_CALL_ACK 0x70
#define GEN_LOST_ACK 0x78
#define SR_PREV_ACK 0x80
#define SR_PREV_NACK 0x88
#define GEN_PREV_ACK 0x90
#define GEN_PREV_NACK 0x98
#define STOP_CONDITION 0xA0
#define REPEATED_START 0xA0
 
// Status Slave TX mode
#define SW_SLA_ACK 0xA8
#define SW_LOST_ACK 0xB0
#define SW_DATA_ACK 0xB8
#define SW_DATA_NACK 0xC0
#define SW_LAST_ACK 0xC8
 
#endif
 
/branches/BL-Ctrl/uart.c
0,0 → 1,191
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Regler für Brushless-Motoren
// + ATMEGA8 mit 8MHz
// + (c) 01.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + Keine Garantie auf Fehlerfreiheit
// + Kommerzielle Nutzung nur mit meiner Zustimmung
// + Der Code ist für die Hardware BL_Ctrl V1.0 entwickelt worden
// + www.mikrocontroller.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
#define MAX_SENDE_BUFF 100
#define MAX_EMPFANGS_BUFF 100
 
unsigned volatile char SIO_Sollwert = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned char MeineSlaveAdresse;
 
struct str_DebugOut DebugOut;
 
 
int Debug_Timer;
 
 
SIGNAL(INT_VEC_TX)
{
}
 
void SendUart(void)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!(UCSRA & 0x40)) return;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
USR |= (1<TXC);
UDR = tmp_tx;
}
else ptr = 0;
}
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned char serPacketCounter = 100;
SioTmp = UDR;
#if X3D_SIO == 1
if(SioTmp == 0xF5) // Startzeichen
{
serPacketCounter = 0;
}
else
{
if(++serPacketCounter == MOTORADRESSE) // (1-4)
{
SIO_Sollwert = SioTmp;
SIO_Timeout = 200; // werte für 200ms gültig
}
else
{
if(serPacketCounter > 100) serPacketCounter = 100;
}
}
#endif
};
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
#if X3D_SIO == 1
UCSRB |= (1<<RXCIE); // serieller Empfangsinterrupt
#endif
// TX-Interrupt Freigabe
// UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
//UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
#if X3D_SIO == 1
UBRR = 12; //38400 Baud @ 4 MHz
#else
UBRR = 8; //57600 Baud @ 4 MHz
#endif
//öffnet einen Kanal für printf (STDOUT)
fdevopen (uart_putchar, NULL);
Debug_Timer = SetDelay(200);
UDR = '*';
}
 
 
 
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
if((CheckDelay(Debug_Timer) && UebertragungAbgeschlossen)) // im Singlestep-Betrieb in jedem Schtitt senden
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
Debug_Timer = SetDelay(50); // Sendeintervall
}
}
/branches/BL-Ctrl/uart.h
0,0 → 1,81
#ifndef _UART_H
#define _UART_H
 
extern unsigned volatile char SIO_Sollwert;
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned char MeineSlaveAdresse;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void SendUart(void);
 
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[8]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
//Die Baud_Rate der Seriellen Schnittstelle
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
 
#if X3D_SIO == 1
#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#else
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
#endif
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega8__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/Chris_hallo/Flight-Ctrl_MEGA644_V0_60.hex
0,0 → 1,1457
:100000000C94D9010C94F6010C94F6010C94F601B1
:100010000C94F6010C94F6010C94F6010C94F60184
:100020000C94F6010C94100C0C94F6010C94F6014F
:100030000C94E1140C94F6010C94F6010C94F60166
:100040000C94F6010C94F6010C94670B0C94F601D9
:100050000C9443040C94F6010C9492030C94F60156
:100060000C94FC0C0C94F6010C942E140C94F601D8
:100070000A0A0D004E65757472616C004865616412
:10008000696E67486F6C64000A0D5374657565721C
:10009000756E673A20004F4B0A0D000A0D416267EA
:1000A0006C65696368204C756674647275636B7304
:1000B000656E736F722E2E000A0D42656E75747A2E
:1000C0006520506172616D657465727361747A2028
:1000D0002564000A0D496E69742E20454550524F23
:1000E0004D3A2047656E65726965726520446566A4
:1000F00061756C742D506172616D657465722E2E20
:100100002E000A0D3D3D3D3D3D3D3D3D3D3D3D3DCE
:100110003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0F
:100120003D3D000A0D466C69676874436F6E7472DA
:100130006F6C205625642E256420002E0052616EBF
:1001400067653A2533692D253369005374656C6CF6
:10015000756E673A2025336900536574706F696E58
:1001600074202025336900536572766F202000507B
:100170006F7469343A202025336900506F746933F5
:100180003A202025336900506F7469323A202025C7
:10019000336900506F7469313A2020253369005368
:1001A000746172743A2020202020253569004D6545
:1001B0007373776572743A2020253569005269633C
:1001C0006874756E673A2020253569004B6F6D7035
:1001D0006173732020202020202000456D70662E42
:1001E000506567656C3A253569005370616E6E75B0
:1001F0006E673A202025356900486F6368202534F2
:100200006920282533692900526F6C6C20253469D8
:10021000202825336929004E69636B202534692025
:10022000282533692900414343202D2053656E73EF
:100230006F7200476965722025346920282533696B
:100240002900526F6C6C20253469202825336929D8
:10025000004E69636B202534692028253369290005
:100260004779726F202D2053656E736F7200503383
:100270003A25346920204B616EE46C6520005031D2
:100280003A253469202050323A25346920004773DA
:100290003A253469202047693A25346920004E699F
:1002A0003A2534692020526F3A25346920004B37B3
:1002B0003A25346920204B616EE46C6520004B3593
:1002C0003A25346920204B363A25346920004B33D7
:1002D0003A25346920204B343A25346920004B31CB
:1002E0003A25346920204B323A25346920004B6F7F
:1002F0006D706173733A20202025356900526F6C50
:100300006C3A202020202020253569004E69636B3F
:100310003A20202020202025356900616B742E2092
:100320004C6167650048F668656E726567656C7557
:100330006E67004B65696E6520004F666620202061
:100340002020203A20253569004C7566746472754A
:10035000636B3A2025356900536F6C6C486F656894
:10036000653A2025356900486F6568653A20202088
:1003700020202535690028632920486F6C67657245
:1003800020427573730053657474696E673A202553
:100390006420005625642E2564002B2B204D696BAC
:1003A000726F4B6F70746572202B2B005B25695D3B
:1003B000000011241FBECFEFD0E1DEBFCDBF11E0A2
:1003C000A0E0B1E0E0E7FAE502C005900D92AE389A
:1003D000B107D9F715E0AEE8B1E001C01D92AD3B21
:1003E000B107E1F70E942D020C94372D0C94000008
:1003F000A2E0B0E00E94232D802D99270895FB01F3
:10040000282F863008F025E0842F9927429FD001BD
:100410001124AC59BF4F019724F001900E942B2D5D
:10042000FACFA2E0B0E0022E0E942B2D0895CF93C8
:10043000DF93FB01C42FDD27863008F085E0489F5D
:10044000D0011124AC59BF4F219724F00E94232DD5
:100450000192FACFDF91CF9108950F931F93CF931D
:10046000DF9391E097B98FEF88B98BE184B995B9A3
:100470008EE38AB9579A87EF8BB984B7877F84BF99
:10048000809160008861809360001092600080ED30
:1004900097E09093AC018093AB0110922D021092E3
:1004A0002C02109246051092450510922B021092D4
:1004B0002A02109229021092280228980E94BD0C4C
:1004C0000E942D070E94CC140E94F60C0E94141466
:1004D0007894109200048CE38093010484E080936C
:1004E00002048CE390E09F938F931F921F9283E20C
:1004F00091E09F938F931F920E94C30882E091E046
:100500009F938F931F920E94C308299AA1E0B0E0A5
:100510000E94232D802D2DB73EB7265F3F4F0FB68B
:10052000F8943EBF0FBE2DBF8B33A9F183ED90E051
:100530009F938F931F920E94C3080E94971C4AE3C7
:100540006DE675E080E00E94FF0101E00F900F90E2
:100550000F90023049F40E942A1C4AE36DE675E0D0
:1005600082E00E94FF0103E04AE36DE675E0802F20
:100570000E94FF010F5F063060F381E022E030E06F
:10058000D901082E0E942B2D8BE321503040D90138
:10059000082E0E942B2D02E010E0D8010E94232D8E
:1005A000802D4AE36DE675E00E941702D8010E9493
:1005B000232D802D99279F938F9388EB90E09F9315
:1005C0008F931F920E94C308809175050F900F9022
:1005D0000F900F900F9080FF20C08BE990E09F93C9
:1005E0008F931F920E94C30884EC99E00E94FB0B3A
:1005F000EC010E9420100F900F900F90CE010E94EE
:10060000040C8823D9F386E990E09F938F931F927F
:100610000E94C3080F900F900F900E944F1D2898C2
:1006200080ED97E09093AC018093AB0188EE93E06E
:100630009093FB038093FA0385E58093F50388E8A4
:1006400090E09F938F931F920E94C308809175053D
:100650000F900F900F9082FF03C08CE790E002C0D4
:1006600084E790E09F938F931F920E94C3080F909E
:100670000F900F9080E790E09F938F931F920E94BE
:10068000C3080E9447100F900F900F908091A8010F
:10069000882379F11092A8010E94601E0E94081D13
:1006A000289880910101882319F0815080930101DD
:1006B00080912702882329F080912702815080931E
:1006C0002702209104013091050180918505992729
:1006D0002817390734F480ED97E09093AC018093AC
:1006E000AB018091D601882319F40E94141401C033
:1006F00028980E944A070E94B80780E090E00E9474
:10070000040C882319F280912E02882329F088B1E5
:1007100090E1892788B901C0449884EF91E00E9454
:10072000FB0BB4CF1F920F920FB60F9211248F9331
:100730009F93EF93FF93809100018823E1F48091D0
:10074000A3019091A40101969093A4018093A30129
:10075000FC01EB54FD4FE081ED3019F08639910535
:1007600039F41092A4011092A30181E0809300015A
:10077000E093C60004C01092A4011092A301FF915F
:10078000EF919F918F910F900FBE0F901F90189532
:100790008091D704813091F58091C7049091C8046D
:1007A000A091C904B091CA0480930A0590930B05E7
:1007B000A0930C05B0930D058091CB049091CC04CF
:1007C000A091CD04B091CE0480930E0590930F05B7
:1007D000A0931005B09311058091CF049091D0049F
:1007E000A091D104B091D204809312059093130587
:1007F000A0931405B09315051092D7048091F403CB
:10080000813031F48091E803809322051092F40343
:1008100080912404813091F5809114049091150405
:10082000A0911604B09117048093160590931705B4
:10083000A0931805B093190580911804909119049C
:10084000A0911A04B0911B0480931A0590931B0584
:10085000A0931C05B0931D0580911C0490911D046C
:10086000A0911E04B0911F0480931E0590931F0554
:10087000A0932005B09321051092240480912205B5
:100880008111289A08951F920F920FB60F9211248A
:100890002F933F934F935F936F937F938F939F9388
:1008A000AF93BF93CF93DF93EF93FF938091C600F5
:1008B000809392018091C00040919201887109F06B
:1008C00005C18091A501843009F48AC0853050F4B7
:1008D0008130D1F0813098F0823001F1833009F01D
:1008E000F2C021C0863009F4ABC0863008F48CC059
:1008F000873009F4D6C0883009F0E5C0D8C0453B40
:1009000009F0E8C081E003C0423621F482E0809320
:10091000A501E0C0453B09F4DDC0D5C0413009F078
:10092000D2C083E0F4CF409324054F5F4093B402DC
:100930008091B4028F5F8093E30384E08093A501EC
:1009400080912405833031F0813161F1813009F0EB
:100950003FC014C084EE93E090930F0480930E0484
:1009600025E035E03093B2022093B1024096909397
:10097000BC048093BB048091F40327C083EC94E013
:1009800090930F0480930E042CE736E03093B2026C
:100990002093B10244969093BC048093BB04809151
:1009A000D70413C080E194E090930F0480930E0469
:1009B00029EC35E03093B2022093B1024496909333
:1009C000BC048093BB04809124048093250582C0DD
:1009D00081E0809325051092BC041092BB047AC07C
:1009E000842F99279093BE048093BD048091B40214
:1009F000840F8093B4028091E3039091B402890F35
:100A00008093E30385E083CF2091BD043091BE0441
:100A1000842F9927982F8827280F391F3093BE04D9
:100A20002093BD048091B402840F8093B40280911E
:100A3000E3039091B402890F8093E30386E067CFCC
:100A40008091B402840F8093B4028091E30390916B
:100A5000B402890F8093E30380912505882381F4F4
:100A6000E0910E04F0910F048091B1029091B202D6
:100A7000E817F90728F44193F0930F04E0930E046C
:100A80008091BD049091BE0401979093BE04809321
:100A9000BD048091BD049091BE04892BD9F487E0F8
:100AA00036CF8091B402481771F488E030CF80913E
:100AB000E303481741F4E091BB04F091BC04309784
:100AC00011F081E080831092A50104C01092A5016D
:100AD0000E94C8030E94C80340919E01463910F04D
:100AE00010929D01809192018D3009F05CC080913F
:100AF0009D01823009F057C010929D01A42FBB27A1
:100B0000FD01ED5DFB4F3081ED01CC5DDB4F2881B8
:100B10008091A1019091A201831B9109821B9109EF
:100B20009F709093A2018093A1019C0196E036955D
:100B300027959A95E1F7235C2093A001982F9F7346
:100B4000935C90939F018081281729F488819817DE
:100B500011F491E006C0809195018F5F809395011B
:100B600090E080919301882309F064C0992309F4EF
:100B700061C081E08093930140939601AB5DBB4FD0
:100B80008DE08C9380912704823509F053C088E171
:100B900090E02CE00FB6F894A895809360000FBE0B
:100BA0002093600047C080919D018130D9F0813051
:100BB00018F08230E9F530C080919201833239F427
:100BC00080919301882319F481E080939D018091A5
:100BD00092018093250481E080939E01809192018F
:100BE000992715C082E080939D01E42FFF27809113
:100BF0009201EB5DFB4F80834F5F40939E012091FC
:100C000092018091A1019091A201820F911D909378
:100C1000A2018093A1010EC0E42FFF2780919201D1
:100C2000EB5DFB4F8083463938F310929D01E7CF8F
:100C300010929D01FF91EF91DF91CF91BF91AF9104
:100C40009F918F917F916F915F914F913F912F91E4
:100C50000F900FBE0F901F901895DC0120E030E040
:100C600040E050E0E5EBF2E005C08191280F311D36
:100C70004F5F5F4F4A175B07C1F73F70C90166E0DE
:100C8000969587956A95E1F7835CFD01EB54FD4FDE
:100C9000808311962F73235CFD01EB54FD4F20835D
:100CA000AA54BD4F8DE08C93109200018091B50243
:100CB0008093C6000895EF92FF920F931F93CF93F6
:100CC000DF937A01722F93E29093B5026093B6029C
:100CD0008093B70203E010E060E0A8EBB2E046C00A
:100CE000F701E60FF11D90816F5F715019F4E0E09C
:100CF00040E00FC0F701E60FF11D40816F5F7150BA
:100D000011F4E0E006C0F701E60FF11DE0816F5F2E
:100D10007150892F86958695835C8C935527892FF2
:100D200099278370907024E0880F991F2A95E1F726
:100D30009A0194E0369527959A95E1F7822B835C8A
:100D4000ED0189834F705070440F551F440F551F9C
:100D50008E2F8295869586958370842B835C8A83FB
:100D6000EF73E35CEB830C5F1F4F1496772309F05E
:100D7000B7CFC8010E942D06DF91CF911F910F912F
:100D8000FF90EF9008951F93CF93DF93EC0170E0F5
:100D9000A22FBB27129748C0E42FFF27EB5DFB4F24
:100DA00030814F5FE42FFF27EB5DFB4F50814F5F9A
:100DB000E42FFF27EB5DFB4F10814F5FE42FFF27F0
:100DC000EB5DFB4F20814F5F842F9927A817B90750
:100DD00074F15D53FE01E70FF11D3D53330F330FE7
:100DE000852F82958F70382B3083613001F1912FE0
:100DF0009D537F5FFE01E70FF11D71505295507FAB
:100E0000892F86958695582B508363506F3F79F0D4
:100E10007E5FFE01E70FF11D9295990F990F907C6F
:100E20002D53922B90837F5F662309F0B5CFDF911E
:100E3000CF911F9108951F93182F8A3019F48DE0D8
:100E40000E941B078091C00085FFFCCF1093C60055
:100E500080E090E01F9108950895E1ECF0E088E1D2
:100E60008083A0ECB0E08C9182608C93808180685C
:100E700080838081806480838AE28093C40088ECD0
:100E800090E00E94FB0B9093E2038093E1031092A9
:100E9000A501089580910001882309F468C080911C
:100EA0008E01882371F080910001882351F02BE09E
:100EB00045EF53E06091B30287E40E945B06109215
:100EC0008E018091E1039091E2030E94040C88233B
:100ED00021F4809190018823B1F080910001882352
:100EE00091F022E348ED54E06091B30284E40E9463
:100EF0005B06109290018AEF90E00E94FB0B9093AA
:100F0000E2038093E10380918F018823F1F08091C7
:100F100000018823D1F00E94501010928F0180911F
:100F20009C018F5F80939C01843011F410929C018E
:100F300080919C0144E1849FA00111244A5E5E4F90
:100F400024E160E0805D0E945B068091910188232E
:100F500071F080910001882351F02AE040E054E0D4
:100F60006091B30286E50E945B061092910108959C
:100F70001F93CF93DF93CDB7DEB722970FB6F894C8
:100F8000DEBF0FBECDBF80919301882309F498C0C6
:100F90008FEF8093010180912704813760F48C36B4
:100FA00008F06FC0873609F440C08836F9F0833600
:100FB00009F084C008C0843759F1863791F1813730
:100FC00009F07CC036C02091960143E06BE085EFCC
:100FD00093E00E94C3068091CD019091F703892B85
:100FE0008093CD0181E08093900168C020919601AB
:100FF00043E062E0CE0101960E94C3068091CD01DC
:101000009981892B8093CD0181E080938F0156C017
:101010002091960143E064E088E991E00E94C306D4
:101020004DC081E08093910149C081E080938E01A1
:1010300045C02091960143E062E0CE0101960E94F6
:10104000C30689818F3F89F0863010F085E089835F
:101050004AE36DE675E089810E94170289812AE3DF
:101060004DE655E06091B30208C01091B3020E94B2
:10107000F8012AE34DE655E0612F855B0E945B068F
:101080001DC02091960143E06AE38DE695E00E9441
:10109000C306809127044AE36DE675E08B560E94F3
:1010A000FF01809127048B56A2E0B0E0082E0E9439
:1010B0002B2D0E94F80199270E944B1E109293013C
:1010C00022960FB6F894DEBF0FBECDBFDF91CF9151
:1010D0001F910895982F80912605813069F48091A1
:1010E000CC01E82FFF27EA5EFE4F90838F5F80934D
:1010F000CC0121E030E005C0892F0E941B07282F7A
:101100003327C90108951F93182F04C080E30E945C
:101110006A0811501116D4F31F9108951F93182FC8
:1011200004C080E20E946A0811501116D4F31F9186
:1011300008950F931F93CF93DF938C01EB0108C0A9
:10114000F8010F5F1F4FE4918E2F0E946A082197CC
:101150002097B1F7DF91CF911F910F9108950F93D1
:101160001F93CF93DF938C01EB0106C0F8018191AF
:101170008F010E946A0821972097C1F7DF91CF91D4
:101180001F910F9108952F923F924F925F926F920D
:101190007F928F929F92AF92BF92CF92DF92EF9207
:1011A000FF920F931F93CF93DF93CDB7DEB7E397F3
:1011B0000FB6F894DEBF0FBECDBF29968FAD29972D
:1011C00080932605CE01855B9F4F9D838C832B9654
:1011D0008EAD9FAD2B979FA78EA72224332421018C
:1011E00002C0130124010EA51FA502C00F5F1F4FEF
:1011F000F801F490FF2019F0F5E2FF16B9F7B801F5
:101200008EA59FA5681B790B11F00E949908FF20FD
:1012100009F444C20F5F1F4F1FA70EA71982AC81AC
:10122000BD811BAA1AAA9FEF99ABEEA5FFA5CF011E
:1012300001969FA78EA7B49095E7B91621F08B2D44
:101240008062883789F4EBA9E0FF07C02D903D90BC
:101250004D905C901397149607C08D919C911197B7
:101260001C01442455241296F0E2BF1621F4898112
:101270008823D9F685C083E2B81609F483C09AE2C0
:10128000B91621F0EDE2BE1669F408C0FD01129610
:10129000E081EAABE7FFC9CFE195EAABFBA9F061DA
:1012A000FF7D72C08BE2B81609F46AC09EE2B916DF
:1012B000B1F52EA53FA52F5F3F4FEEA5FFA5849169
:1012C0008A3221F0B82E20E030E01BC0FD011296DA
:1012D0004081518157FF02C04FEF5FEF49AB3FA7FD
:1012E0002EA7A3CFC90103E0880F991F0A95E1F744
:1012F000220F331F280F391F2B0D311D2053304073
:10130000B49031968B2D80538A3060F3FFA7EEA7FF
:10131000A90137FF02C04FEF5FEF49AB8DCFF0E37C
:10132000BF1631F48BA984FD80CF80628BAB7DCF5B
:101330008B2D81538930E8F420E030E0C901F3E0DF
:10134000880F991FFA95E1F7220F331F280F391FD5
:101350002B0D311D20533040EEA5FFA5CF01019686
:101360009FA78EA7B4908B2D80538A3038F32AAB79
:1013700063CF98E6B91651F4EBA9E460EBAB55CF17
:10138000B98253CFFBA9F860FBAB4FCF8CE6B81600
:1013900021F49BA991609BAB48CFBD83AC83E3E66E
:1013A000BE1639F41296BD83AC8312978C918E834E
:1013B0001AC1F4E4BF1639F084E6B81639F099E69C
:1013C000B91659F503C0EBA9E160EBABFBA9F0FF3F
:1013D00008C01496BD83AC835E904E903E902E90D4
:1013E0000AC01296BD83AC839E918E911C01442449
:1013F00037FC4094542C57FC03C08AE088AB94C05F
:101400005094409430942094211C311C411C511C58
:101410008DE289839AE098AB87C0EFE4BE1629F08D
:10142000FFE6BF1639F488E063C09BA991609BABCF
:10143000E8E058C0F0E7BF1681F41296BD83AC8394
:101440009E918E911C01442455248BA980648BAB02
:1014500090E198AB78E7B72E66C0E3E7BE16D9F502
:101460001296BD83AC83DE90CE90C114D10489F472
:1014700088E28E838EE68F8385E788878CE689876E
:101480008A8789E28B871C8666E0C62ED12CCC0E1B
:10149000DD1EF9A9F7FD13C04F2F552747FD5095C5
:1014A00060E070E0C6010E94D12A009711F419A9EA
:1014B0000DC08C1919A981174CF4182F07C0F6011B
:1014C00001900020E9F731971E2F1C191982420163
:1014D000310140E094C085E5B81631F095E7B916C2
:1014E00049F4EAE0E8AB1FC0FBA9F160FBAB8AE07E
:1014F00088AB19C098E5B91621F0E8E7BE1609F0E7
:101500006EC0FBA9F3FD02C080E1F2CF21143104CB
:101510004104510419F490E198AB05C0EBA9E064D3
:10152000EBABF0E1F8AB198289A987FD03C09BA959
:101530009F7D9BAB211431044104510461F4E9A95E
:10154000EE2349F46624772443015EE2C52ED12CB4
:10155000CC0EDD1E3EC04EE2C42ED12CCC0EDD1EC4
:10156000F8A9EF2EFF2400271127C201B101A8011D
:1015700097010E94E62C6A3020F430E3A32EA60ED9
:1015800008C027E5A22EA60E88E5B81611F49FED37
:10159000A922F601A2926F01C201B101A80197012F
:1015A0000E94E62C39014A012E143F0440065106E0
:1015B00018F019012A01D9CFF8A9F83051F48BA9F4
:1015C00083FF07C090E3A91621F080E3F601829320
:1015D0006F01CE018C19182F125D49A910C0BB20D4
:1015E00009F45CC0BE8219824201310100E011E0C1
:1015F00096E0C92ED12CCC0EDD1E21E005C0212F96
:10160000042F011B07FD00E08981882319F0812F39
:101610008F5F07C09BA996FD02C0812F02C0822F59
:101620008E5FA82EA00EEBA9EE2EFF2480E3482E9D
:10163000512C4E205F204114510421F48AA98A19AB
:101640000E948E088981882329F061E070E0CE0134
:10165000019609C0E6FE09C080E38A83BB8262E08E
:1016600070E0CE0102960E94AF08F0E24F165104DE
:1016700021F48AA98A190E948308802F0E94830876
:10168000612F772767FD7095C6010E94AF08E4FEC1
:10169000A8CD8AA98A190E948E08A3CDE3960FB619
:1016A000F894DEBF0FBECDBFDF91CF911F910F9198
:1016B000FF90EF90DF90CF90BF90AF909F908F9072
:1016C0007F906F905F904F903F902F9008951F9262
:1016D0000F920FB60F9211242F933F935F936F9346
:1016E0007F938F939F93AF93BF938091AF0181506E
:1016F0008093AF018F3F01F589E08093AF01809126
:1017000003018F5F817080930301882319F481E0C6
:101710008093A8018091A6019091A70101969093D2
:10172000A7018093A6018091D601882329F080919A
:10173000D60181508093D6018091AB019091AC018C
:10174000029758F08091AB019091AC010197909372
:10175000AC018093AB015A9A01C05A9880917505EB
:1017600083FF3BC0349B0AC08091A9019091AA01DC
:1017700001969093AA018093A9012FC08091A9019D
:101780009091AA01892B79F08091A9019091AA01E9
:10179000805A9F4040F48091A9019091AA019093B2
:1017A00018028093170280911702909118022091DD
:1017B000190230911A02821B930B845E9D4F68E6DA
:1017C00071E00E94D32C845B904090931C02809324
:1017D0001B021092AA011092A901BF91AF919F9193
:1017E0008F917F916F915F913F912F910F900FBEDD
:1017F0000F901F9018952091A6013091A7012F5F9F
:101800003F4F820F931F08952091A6013091A701A9
:10181000821B930B892F99278695807499270895A9
:101820001F920F920FB60F921124EF92FF920F9317
:101830001F932F933F934F935F936F937F938F9358
:101840009F93AF93BF93CF93DF93EF93FF938091D9
:1018500002018150809302018F3F09F073C083E839
:101860008093B00080918901C82FDD27D093AE010D
:10187000C093AD0180919305E0908F0580FF1EC05D
:101880006091E7017091E8018091E9019091EA018E
:10189000FF240027112720E830E040E050E00E94BC
:1018A000082DC801B7010E94A02C20E032E040E0E2
:1018B00050E00E94082DC20FD31F1DC06091E701A8
:1018C0007091E8018091E9019091EA01FF240027DD
:1018D000112720E830E040E050E00E94082DC801C8
:1018E000B7010E94A02C20E032E040E050E00E94CE
:1018F000082DC21BD30BD093AE01C093AD01209134
:10190000AD013091AE0180919005992728173907D4
:1019100034F08091910599278217930724F49093CE
:10192000AE018093AD018091AD019091AE01909395
:10193000FF048093FE048093B3008091920580930E
:10194000020104C083E08093B0005F98FF91EF91A3
:10195000DF91CF91BF91AF919F918F917F916F91C7
:101960005F914F913F912F911F910F91FF90EF90B9
:101970000F900FBE0F901F9018958091A601909127
:10198000A7010B969093B1018093B00182E085BDD1
:1019900083EA84BD17BC88E788BD96E096BD83ECDA
:1019A0008093B0009093B100E0E7F0E08081826026
:1019B0008083EEE6F0E08081816080838AE080931E
:1019C000B3001092B20008952091A6013091A701B2
:1019D0002F5F3F4F280F391F8091A6019091A701DB
:1019E000A901481B590B57FFF7CF089510927C00AF
:1019F0008FEE80937A0008951F920F920FB60F9288
:101A00001124EF92FF920F931F932F933F934F93C5
:101A10005F936F937F938F939F93AF93BF93CF9376
:101A2000DF93EF93FF9310927A004091C8014F5FCC
:101A30004093C8014150433009F41CC1443038F48C
:101A4000413009F463C0423008F0B9C00DC04530E0
:101A500009F450C1453008F42AC1463009F46FC179
:101A6000473009F0CBC252C22091DB013091DC013A
:101A70008091780090917900281B390B8091B601F4
:101A80009091B701820F931F9093B7018093B60195
:101A90008091C0018F5F8093C00180910B02909173
:101AA0000C02A0910D02B0910E02442737FD409523
:101AB000542F820F931FA41FB51F80930B02909386
:101AC0000C02A0930D02B0930E0280910F02909130
:101AD0001002A0911102B0911202820F931FA41F55
:101AE000B51F80930F0290931002A0931102B09340
:101AF000120281E08093C9018091C6019091C701D3
:101B000001969093C7018093C6017CC260917800D2
:101B1000709179008091D9019091DA01681B790B5D
:101B20008091030290910402A0910502B0910602F7
:101B30009B01442737FD4095542F820F931FA41F0C
:101B4000B51F8093030290930402A0930502B09303
:101B500006028091070290910802A0910902B091BB
:101B60000A02820F931FA41FB51F80930702909350
:101B70000802A0930902B0930A0280917800909124
:101B800079000A9710F464E47DEF809178009091D9
:101B90007900895E934010F06CEB72E08091B401A3
:101BA0009091B501860F971F9093B5018093B40172
:101BB0008091BF018F5F8093BF0182E058C0609128
:101BC0007800709179008091D7019091D801681BBD
:101BD000790B8091FB019091FC01A091FD01B091E6
:101BE000FE019B01442737FD4095542F820F931F20
:101BF000A41FB51F8093FB019093FC01A093FD01EE
:101C0000B093FE018091FF0190910002A09101022A
:101C1000B0910202820F931FA41FB51F8093FF0192
:101C200090930002A0930102B09302028091780089
:101C3000909179000A9710F464E47DEF8091780028
:101C400090917900895E934010F06CEB72E0809186
:101C5000B2019091B301860F971F9093B3018093C7
:101C6000B2018091BE018F5F8093BE0184E08093BA
:101C7000C901C8C1409104015091050180917800CB
:101C8000909179009A01220F331F240F351F63E0D2
:101C900070E00E94BF2C260F371F3695279536958A
:101CA0002795309305012093040186E0E0CF8091D1
:101CB000DF019091E0012091780030917900821B42
:101CC000930B90932805809327058091B8019091FC
:101CD000B9012091270530912805820F931F909319
:101CE000B9018093B8018091C2018F5F8093C201D6
:101CF00087E0BDCF80917800909179002091DD013F
:101D00003091DE01821B930B909328058093270569
:101D10008091BA019091BB0120912705309128054F
:101D2000820F931F9093BB018093BA018091C101F0
:101D30008F5F8093C1014093C90186E0E4C0609148
:101D4000780070917900E090E101F090E20100915B
:101D5000E3011091E401882777FD8095982F0E9478
:101D6000842BA80197010E94DE2A0E94672B7093A2
:101D7000BD016093BC012091BC013091BD01E09197
:101D80002705F0912805809132059091330597FF42
:101D900003C0909581959F4F64E070E00E94D32C22
:101DA000EB01CF01F7FF03C0909581959F4F64E051
:101DB00070E00E94D32C260F371F2C0F3D1F30934D
:101DC000BD012093BC018091BC019091BD0102979F
:101DD00004F16091E1017091E2018091E301909141
:101DE000E40120E030E048E454E40E948E2B882394
:101DF0000CF03CC06091E1017091E2018091E3013F
:101E00009091E4012AE037ED43EA5CE30E94DF2A87
:101E100025C08091BC019091BD018F5F9F4F34F52B
:101E20006091E1017091E2018091E3019091E40100
:101E300020E030E046E154E40E94912B1816B4F4FF
:101E40006091E1017091E2018091E3019091E401E0
:101E50002AE037ED43EA5CE30E94DE2A6093E10169
:101E60007093E2018093E3019093E40181E0809319
:101E7000C301809178009091790090932A05809316
:101E800029052091130230911402409115025091BE
:101E900016028091BC019091BD01AA2797FDA095E3
:101EA000BA2F280F391F4A1F5B1F2093130230934C
:101EB00014024093150250931602E0901302F09022
:101EC0001402009115021091160260911302709194
:101ED0001402809115029091160220E034E040E057
:101EE00050E00E94082DE21AF30A040B150BE09251
:101EF0001302F0921402009315021093160283E06D
:101F00008093C90187E08093C8017CC08091370528
:101F1000909138052091780030917900820F931FBD
:101F2000909338058093370580912F058F5F8093BC
:101F30002F0580912F05853008F460C080917800CE
:101F40009091790090930B0180930A0110922F05D4
:101F500080912B0590912C05209137053091380503
:101F6000821B930B20912F0230913002821B930B26
:101F70009093C5018093C401609137057091380535
:101F8000E0900601F090070100910801109109010D
:101F9000882777FD8095982FA8019701220F331F7E
:101FA000441F551F2E0D3F1D401F511F620F731FF1
:101FB000841F951F24E030E040E050E00E94082D8F
:101FC00020930601309307014093080150930901C3
:101FD00020912B0530912C058091060190910701ED
:101FE000A0910801B0910901281B390B30933002F0
:101FF00020932F0210923805109237051092C901D4
:102000001092C8018091C90180937C008FEE80936B
:102010007A00FF91EF91DF91CF91BF91AF919F91A6
:102020008F917F916F915F914F913F912F911F9170
:102030000F91FF90EF900F900FBE0F901F9018958B
:10204000CF93DF93C0E0D0E0C7BD82E390E00E9471
:10205000E40C8BE391E09F938F931F920E94C3083F
:1020600080910A0190910B010F900F900F9084586E
:10207000934020F02196CA3FD10531F7C093340533
:1020800088EC90E00E94E40CDF91CF910895E6E1A6
:10209000F1E080E2819391E0E636F907D9F70895FF
:1020A000FF920F931F938091CD01282F3327C901F1
:1020B00081709070682F882391F08091CE018823E1
:1020C00011F0815002C0809166018093CE01E6E15B
:1020D000F1E080E2819391E0E636F907D9F7A901B2
:1020E0004270507021FF0DC08091CE018F5F8093B0
:1020F000CE01E6E1F1E080E2819391E0E636F90776
:10210000D9F7662321F0452B11F01092CE0181E121
:102110008093CC018091CE0199279F938F938CEA75
:1021200093E09F938F93E1E0FE2EFF920E94C308FD
:102130000091CE010F900F900F900F900F900530EF
:1021400009F4D7C1063090F4023009F4B8C0033066
:1021500030F40023F1F0013009F05BC34DC00330CF
:1021600009F402C1043009F054C34BC1083009F42A
:1021700098C2093038F4063009F411C2073009F06A
:1021800048C36CC2093009F4C9C20A3009F041C31E
:1021900003C31092CC018AE993E09F938F93FF923F
:1021A0000E94C30884E18093CC018CE390E09F936C
:1021B0008F931F921F9283E993E09F938F93FF92D7
:1021C0000E94C30888E28093CC010E94F8019927FD
:1021D0009F938F9386E893E09F938F93FF920E9443
:1021E000C3088CE38093CC0186E793E09F938F93A1
:1021F000FF920E94C3088EC28091750580FF47C080
:102200001092CC0180912F02909130029F938F9376
:1022100087E693E09F938F930F930E94C30884E116
:102220008093CC0180913102909132029F938F93E1
:1022300088E593E09F938F930F930E94C30888E2F1
:102240008093CC0180910A0190910B019F938F9311
:1022500089E493E09F938F930F930E94C3088CE3CC
:102260008093CC018091340599279F938F938AE3C3
:1022700093E09F938F930F930E94C3088DB79EB7EF
:1022800044960FB6F8949EBF0FBE8DBFC7C284E1BF
:102290008093CC0183E393E09F938F930F930E94ED
:1022A000C30888E28093CC0185E293E09F938F93EB
:1022B0000F930E94C3088DB79EB70696E2CF109287
:1022C000CC018BE193E09F938F93FF920E94C30810
:1022D00084E18093CC016091E7017091E8018091E5
:1022E000E9019091EA0120E034E040E050E00E94F2
:1022F000082D5F934F933F932F938CE093E09F9330
:102300008F93FF920E94C30888E28093CC01609172
:10231000EF017091F0018091F1019091F20120E0C4
:1023200034E040E050E00E94082D5F934F933F93CC
:102330002F938DEF92E09F938F93FF920E94C3089B
:102340008CE38093CC0180911702909118029F93A7
:102350008F938EEE92E09F938F93FF920E94C3081B
:102360008DB79EB746968DCF1092CC0180914505D2
:102370009091460520914305309144059F938F939A
:102380003F932F938EED92E09F938F93FF920E9445
:10239000C30884E18093CC018091490590914A055E
:1023A00020914705309148059F938F933F932F933A
:1023B0008EEC92E09F938F93FF920E94C30888E275
:1023C0008093CC0180914D0590914E0520914B0555
:1023D00030914C059F938F933F932F938EEB92E018
:1023E0009F938F93FF920E94C3088CE38093CC014C
:1023F00080914F05909150059F938F938EEA92E0C4
:102400006FC01092CC01E0916E05FF27EE0FFF1F09
:10241000EF5BFA4F20813181E0916D05FF27EE0FD0
:10242000FF1FEF5BFA4F808191813F932F939F9322
:102430008F938EE992E09F938F93FF920E94C3083F
:1024400084E18093CC01E0917005FF27EE0FFF1F20
:10245000EF5BFA4F20813181E0916F05FF27EE0F8E
:10246000FF1FEF5BFA4F808191813F932F939F93E2
:102470008F938EE892E09F938F93FF920E94C30800
:1024800088E28093CC01E0917205FF27EE0FFF1FD9
:10249000EF5BFA4F20813181E0917105FF27EE0F4C
:1024A000FF1FEF5BFA4F808191813F932F939F93A2
:1024B0008F938EE792E09F938F93FF920E94C308C1
:1024C0008CE38093CC01E0917305FF27EE0FFF1F93
:1024D000EF5BFA4F808191819F938F938EE692E01C
:1024E0009F938F93FF920E94C3088DB79EB74A9621
:1024F000C8CE1092CC0180E692E09F938F93FF921A
:102500000E94C30884E18093CC012091D7013091CF
:10251000D8018091B2019091B3016091BE013F93C7
:102520002F9377270E94D32C7F936F9381E592E0BE
:102530009F938F93FF920E94C30888E28093CC01FF
:102540002091D9013091DA018091B4019091B501C7
:102550006091BF013F932F9377270E94D32C7F93E5
:102560006F9382E492E09F938F93FF920E94C3083F
:102570008CE38093CC012091DB013091DC018091D0
:10258000B6019091B7016091C0013F932F937727D7
:102590000E94D32C7F936F9383E392E056C01092F6
:1025A000CC0186E292E09F938F93FF920E94C30832
:1025B00084E18093CC012091DD013091DE01809196
:1025C000BA019091BB016091C1013F932F9377278E
:1025D0000E94D32C7F936F9387E192E09F938F9318
:1025E000FF920E94C30888E28093CC012091DF0112
:1025F0003091E0018091B8019091B9016091C201E0
:102600003F932F9377270E94D32C7F936F9388E07B
:1026100092E09F938F93FF920E94C3088CE3809374
:10262000CC016091E1017091E2018091E301909110
:10263000E4010091290510912A050E94672B7F93E0
:102640006F931F930F9389EF91E09F938F93FF9266
:102650000E94C3088DB79EB7489613CE84E180933D
:10266000CC0180910401909105019F938F938AEE94
:1026700091E09F938F93FF920E94C30888E280931A
:10268000CC018091270299279F938F938BED91E046
:102690009F938F93FF920E94C3088DB79EB70A96AF
:1026A000F0CD1092CC018CEC91E09F938F93FF9230
:1026B0000E94C30884E18093CC0180911B02909119
:1026C0001C029F938F938DEB91E09F938F93FF92CA
:1026D0000E94C30888E28093CC01809117029091F8
:1026E00018029F938F938EEA91E09F938F93FF92AE
:1026F0000E94C3088CE38093CC01809119029091D1
:102700001A029F938F938FE991E09F938F93FF928B
:102710000E94C3088DB79EB74296B3CD1092CC01EC
:1027200080911F02909120029F938F9383E991E003
:102730009F938F93FF920E94C30884E18093CC0102
:1027400080912102909122029F938F9387E891E0DC
:102750009F938F93FF920E94C30888E28093CC01DD
:1027600080912302909124029F938F938BE791E0B5
:102770009F938F93FF920E94C3088CE38093CC01B8
:1027800080912502909126029F938F938FE691E08E
:102790009F938F93FF9270CD1092CC0187E691E0CA
:1027A0009F938F93FF920E94C30884E18093CC0192
:1027B0008091890199279F938F9389E591E09F9359
:1027C0008F93FF920E94C30888E28093CC0180918E
:1027D000AD019091AE019F938F938BE491E09F9315
:1027E0008F93FF920E94C3088CE38093CC01809169
:1027F000910599279F938F938091900599279F9397
:102800008F938DE391E09F938F93FF920E94C30873
:1028100035CD0150009366011092CE011092CD018A
:102820001F910F91FF9008951092B9008AE2809352
:10283000B800089585EA8093BC0080E090E0089598
:1028400084E98093BC0008951092B9008093BB0086
:1028500085E88093BC0080E090E008951F920F927D
:102860000FB60F9211248F939F93EF93FF93809154
:10287000CF018F5F8093CF018150833009F442C034
:10288000843028F48130A1F0823070F50CC085309E
:1028900009F448C08530D8F1863009F44BC0873040
:1028A00009F071C05BC08091D001880F8E5A14C0AE
:1028B0008091D0018F5F8093D0018150813009F4E5
:1028C00044C0813038F0823009F442C0833009F0CE
:1028D0005AC041C0809196021092B9008093BB000B
:1028E00085E88093BC004FC084E98093BC00809150
:1028F000D001843018F41092CF0102C01092D001A0
:1029000085EAEFCF8091D101880F8D5AE5CF809174
:10291000D1018130D1F08130E8F28230C9F08330CA
:1029200091F519C08091BB00E091D101FF27E75CD0
:10293000FA4F80838091D101813039F0813050F29B
:10294000823031F08330F9F406C080919702C4CF11
:1029500080919A02C1CF8091A602BECF8091D10111
:102960009091BB00E82FFF27E75CFA4F94838F5FBD
:102970008093D101843010F01092D10184E98093CA
:10298000BC001092CF01FF91EF919F918F910F901A
:102990000FBE0F901F90189583EC80938100EFE697
:1029A000F0E08081806280831092DC011092DB0174
:1029B0001092DA011092D9011092D8011092D70129
:1029C00008951F920F920FB60F9211240F931F9329
:1029D0002F933F934F935F936F937F938F939F9327
:1029E000AF93BF93CF93DF93EF93FF932091860034
:1029F000309187008091D4019091D501281B390B2B
:102A000080918600909187009093D5018093D401A6
:102A1000C9018D5D95408356994148F481E090E06D
:102A20009093D3018093D2011092670154C0C0915A
:102A3000D201D091D301CA30D1050CF04CC0C901EC
:102A40008B5F9040845B914008F040C0A901425DDB
:102A50005140FE01EE0FFF1FEF5BFA4F8081918125
:102A6000FA01E81BF90BCF01F7FF03C090958195A0
:102A70009F4F06974CF480912702883C28F4809160
:102A80002702865F80932702FE01EE0FFF1F8F0152
:102A90000F5B1A4FD8012D913C91C901880F991FE6
:102AA000820F931F840F951F64E070E00E94D32C67
:102AB000D8018D919C9111979B01281B390BE95AE4
:102AC000FA4F3183208311967C936E932196D09395
:102AD000D301C093D201FF91EF91DF91CF91BF91CC
:102AE000AF919F918F917F916F915F914F913F91A6
:102AF0002F911F910F910F900FBE0F901F9018955F
:102B0000AF92BF92CF92DF92EF92FF920F931F93FB
:102B100010927A008091BE01882369F08091B20101
:102B20009091B3016091BE0177270E94D32C7093DE
:102B3000AA056093A9058091BF01882369F080915F
:102B4000B4019091B5016091BF0177270E94D32C09
:102B50007093A8056093A7058091C001882369F050
:102B60008091B6019091B7016091C00177270E94D2
:102B7000D32C7093B6056093B5058091C10188236D
:102B8000D9F1E090B205F090B3056091BA0170916F
:102B9000BB012091C1010027F7FC0095102F5701C0
:102BA000680143E0AA0CBB1CCC1CDD1C4A95D1F784
:102BB000AE18BF08C00AD10A882777FD8095982FE4
:102BC00034E0660F771F881F991F3A95D1F7332796
:102BD000442755270E94082DA20EB31EC41ED51EE1
:102BE000C601B50128E030E040E050E00E94082D29
:102BF0003093B3052093B2058091C2018823D9F1A7
:102C0000E090BB05F090BC056091B8017091B901EE
:102C10002091C2010027F7FC0095102F5701680191
:102C200083E0AA0CBB1CCC1CDD1C8A95D1F7AE1826
:102C3000BF08C00AD10A882777FD8095982FB4E095
:102C4000660F771F881F991FBA95D1F7332744273E
:102C500055270E94082DA20EB31EC41ED51EC60104
:102C6000B50128E030E040E050E00E94082D3093AC
:102C7000BC052093BB058091C3018823A1F1E0909E
:102C8000AC05F090AD056091BC017091BD01209143
:102C9000C3010027F7FC0095102F57016801A3E03E
:102CA000AA0CBB1CCC1CDD1CAA95D1F7AE18BF0822
:102CB000C00AD10A882777FD8095982F33274427AB
:102CC00055270E94082DA20EB31EC41ED51EC60194
:102CD000B50128E030E040E050E00E94082D30933C
:102CE000AD052093AC051092B3011092B201109281
:102CF000BE011092B5011092B4011092BF01109262
:102D0000B7011092B6011092C0011092B901109251
:102D1000B8011092C2011092BB011092BA01109238
:102D2000C1011092BD011092BC011092C3018091AB
:102D30000B0290910C02A0910D02B0910E028093B3
:102D4000F7019093F801A093F901B093FA018091F3
:102D5000FB019091FC01A091FD01B091FE018093D7
:102D6000E7019093E801A093E901B093EA01809113
:102D7000030290910402A0910502B0910602809393
:102D8000EF019093F001A093F101B093F2018091D3
:102D9000FF0190910002A0910102B0910202809384
:102DA000EB019093EC01A093ED01B093EE018091C3
:102DB000070290910802A0910902B0910A02809343
:102DC000F3019093F401A093F501B093F6018FEE17
:102DD00080937A008091A9059091AA05893C91057C
:102DE0007CF02091A9053091AA058091A9059091C8
:102DF000AA05880F991F880F991F2052334015C0CC
:102E00008091A9059091AA0588539F4FA4F4209121
:102E1000A9053091AA058091A9059091AA05880F6E
:102E2000991F880F991F205E3C4F820F931F90932C
:102E3000AA058093A9058091A7059091A805893CD2
:102E400091057CF02091A7053091A8058091A705F8
:102E50009091A805880F991F880F991F2052334021
:102E600015C08091A7059091A80588539F4FA4F4A1
:102E70002091A7053091A8058091A7059091A805FC
:102E8000880F991F880F991F205E3C4F820F931F58
:102E90009093A8058093A70520911F0230912002EE
:102EA00080917105E82FFF27EE0FFF1FEF5BFA4FB0
:102EB0008081918182599F4F281739071CF42F5F19
:102EC0003F4F0CC08081918182599F4F8217930799
:102ED0004CF42115310531F021503040309320025F
:102EE00020931F02209121023091220280917205CD
:102EF000E82FFF27EE0FFF1FEF5BFA4F80819181D4
:102F000082599F4F281739071CF42F5F3F4F0CC081
:102F10008081918182599F4F821793074CF421152C
:102F2000310531F0215030403093220220932102AC
:102F3000209123023091240280917305E82FFF270E
:102F4000EE0FFF1FEF5BFA4F8081918182599F4FF7
:102F5000281739071CF42F5F3F4F0CC080819181E7
:102F600082599F4F821793074CF42115310531F098
:102F700021503040309324022093230220912502D7
:102F80003091260280917405E82FFF27EE0FFF1F76
:102F9000EF5BFA4F8081918182599F4F2817390743
:102FA0001CF42F5F3F4F0CC08081918182599F4F4D
:102FB000821793074CF42115310531F02150304030
:102FC000309326022093250280911F0290912002C7
:102FD00097FF05C01092200210921F020AC08F3F77
:102FE000910539F034F08FEF90E0909320028093B8
:102FF0001F02809121029091220297FF05C010923A
:103000002202109221020AC08F3F910539F034F05C
:103010008FEF90E09093220280932102809123020F
:103020009091240297FF05C010922402109223026F
:103030000AC08F3F910539F034F08FEF90E0909304
:10304000240280932302809125029091260297FF0B
:1030500005C010922602109225020AC08F3F9105EA
:1030600039F034F08FEF90E09093260280932502A0
:103070001F910F91FF90EF90DF90CF90BF90AF9096
:10308000089510927A008091BE01882369F08091A2
:10309000B2019091B3016091BE0177270E94D32CB9
:1030A0007093AA056093A9058091BF01882369F0F8
:1030B0008091B4019091B5016091BF0177270E9482
:1030C000D32C7093A8056093A7058091C001882335
:1030D00069F08091B6019091B7016091C0017727A6
:1030E0000E94D32C7093B6056093B5058091C10101
:1030F0008823D1F06091BA017091BB012091C10188
:10310000882777FD8095982F34E0660F771F881FFA
:10311000991F3A95D1F73327442755270E94082D48
:103120003093B3052093B2058091C2018823D1F07A
:103130006091B8017091B9012091C201882777FD93
:103140008095982FB4E0660F771F881F991FBA9556
:10315000D1F73327442755270E94082D3093BC050B
:103160002093BB058091C301882399F06091BC0135
:103170007091BD012091C301882777FD8095982F1C
:103180003327442755270E94082D3093AD052093FF
:10319000AC051092B3011092B2011092BE011092D0
:1031A000B5011092B4011092BF011092B7011092B4
:1031B000B6011092C0011092B9011092B80110929C
:1031C000C2011092BB011092BA011092C10110927B
:1031D000BD011092BC011092C3018FEE80937A0062
:1031E00020911F023091200280917105E82FFF2766
:1031F000EE0FFF1FEF5BFA4F8081918182599F4F45
:10320000281739071CF42F5F3F4F0CC08081918134
:1032100082599F4F821793074CF42115310531F0E5
:10322000215030403093200220931F022091210230
:103230003091220280917205E82FFF27EE0FFF1FC9
:10324000EF5BFA4F8081918182599F4F2817390790
:103250001CF42F5F3F4F0CC08081918182599F4F9A
:10326000821793074CF42115310531F0215030407D
:1032700030932202209321022091230230912402D4
:1032800080917305E82FFF27EE0FFF1FEF5BFA4FCA
:103290008081918182599F4F281739071CF42F5F35
:1032A0003F4F0CC08081918182599F4F82179307B5
:1032B0004CF42115310531F0215030403093240277
:1032C00020932302209125023091260280917405DB
:1032D000E82FFF27EE0FFF1FEF5BFA4F80819181F0
:1032E00082599F4F281739071CF42F5F3F4F0CC09E
:1032F0008081918182599F4F821793074CF4211549
:10330000310531F0215030403093260220932502C0
:1033100080911F029091200297FF05C01092200219
:1033200010921F020AC08F3F910539F034F08FEFE1
:1033300090E09093200280931F028091210290914F
:10334000220297FF05C010922202109221020AC0A9
:103350008F3F910539F034F08FEF90E09093220287
:1033600080932102809123029091240297FF05C04F
:1033700010922402109223020AC08F3F910539F067
:1033800034F08FEF90E09093240280932302809199
:1033900025029091260297FF05C0109226021092F6
:1033A000250208958F3F910539F034F08FEF90E0BA
:1033B000909326028093250208951F9380917805AB
:1033C0008B3F98F08B3F19F480911F020EC08C3F09
:1033D00019F48091210209C08D3F19F480912302D4
:1033E00004C08E3F21F48091250280938101809159
:1033F0008101882319F41092810104C08F3F11F4D8
:1034000080938101809177058B3F98F08B3F19F471
:1034100080911F020EC08C3F19F48091210209C0D7
:103420008D3F19F48091230204C08E3F21F48091D6
:1034300025028093800180918001882319F41092E5
:10344000800105C0843618F084E680938001809165
:1034500079058B3F98F08B3F19F480911F020EC0C5
:103460008C3F19F48091210209C08D3F19F480919D
:10347000230204C08E3F21F48091250280938201B3
:1034800080918201882319F41092820105C084364C
:1034900018F084E68093820180917B058B3F98F041
:1034A0008B3F19F480911F020EC08C3F19F480915C
:1034B000210209C08D3F19F48091230204C08E3F80
:1034C00021F48091250280938301809183018823D8
:1034D00019F41092830104C08F3F11F4809383018B
:1034E000809182058B3F98F08B3F19F480911F02E9
:1034F0000EC08C3F19F48091210209C08D3F19F450
:103500008091230204C08E3F21F480912502809394
:10351000840180918401882319F41092840104C0ED
:103520008F3F11F480938401809183058B3F98F045
:103530008B3F19F480911F020EC08C3F19F48091CB
:10354000210209C08D3F19F48091230204C08E3FEF
:1035500021F48091250280938501809185018B3033
:1035600010F48AE002C08F3F11F4809385018091AE
:1035700084058B3F98F08B3F19F480911F020EC099
:103580008C3F19F48091210209C08D3F19F480917C
:10359000230204C08E3F21F480912502809386018E
:1035A00080918601882319F41092860104C08F3F10
:1035B00011F480938601809189058B3F98F08B3FB1
:1035C00019F480911F020EC08C3F19F480912102E2
:1035D00009C08D3F19F48091230204C08E3F21F46D
:1035E000809125028093880180918801882319F4B5
:1035F0001092880104C08F3F11F48093880180915C
:103600008A058B3F98F08B3F19F480911F020EC002
:103610008C3F19F48091210209C08D3F19F48091EB
:10362000230204C08E3F21F480912502809333024F
:1036300080913302882319F41092330204C08F3F23
:1036400011F48093330280918B058B3F98F08B3F70
:1036500019F480911F020EC08C3F19F48091210251
:1036600009C08D3F19F48091230204C08E3F21F4DC
:10367000809125028093340280913402882319F4CA
:103680001092340204C08F3F11F480933402809171
:103690008C058B3F98F08B3F19F480911F020EC070
:1036A0008C3F19F48091210209C08D3F19F480915B
:1036B000230204C08E3F21F48091250280933502BD
:1036C00080913502882319F41092350204C08F3F8F
:1036D00011F48093350280918D058B3F98F08B3FDC
:1036E00019F480911F020EC08C3F19F480912102C1
:1036F00009C08D3F19F48091230204C08E3F21F44C
:10370000809125028093360280913602882319F435
:103710001092360204C08F3F11F4809336029091CC
:103720008E059B3FB0F09B3F19F480911F0204C0AF
:103730009C3F29F480912102809389010CC09D3F18
:1037400019F480912302F8CF9E3F29F4809125023D
:10375000F3CF9093890180918901882319F4109205
:10376000890104C08F3F11F4809389019B3FB0F021
:103770009B3F19F480911F0204C09C3F29F4809163
:103780002102809389010CC09D3F19F4809123028E
:10379000F8CF9E3F29F480912502F3CF90938901C1
:1037A00080918901882319F41092890104C08F3F08
:1037B00011F4809389019B3FB0F09B3F19F48091F5
:1037C0001F0204C09C3F29F480912102809389014B
:1037D0000CC09D3F19F480912302F8CF9E3F29F43D
:1037E00080912502F3CF90938901809189018823EC
:1037F00019F41092890104C08F3F11F4809389015C
:1038000010918801612F772767FD7095872F972F7B
:103810000E94842B17FF06C020E030E040E853E40C
:103820000E94DF2A27E137EB41ED58E30E94FE2B8F
:1038300060937C0170937D0180937E0190937F0162
:10384000809180058093B40580917F058093AB05BE
:103850001F91089581E080936D0542E040936E05CD
:1038600083E080936F0524E02093700535E030936A
:10387000710586E08093720587E08093730510924E
:1038800075058EE1809376058BEF809378058AE04D
:103890008093790592E39093770590937B0540930D
:1038A0007A0520937C0510927D0580E180937E054A
:1038B0008FE080937F058AEF809380058AE1809373
:1038C000810580E8809382058FEA80938305809349
:1038D00084058AE58093850583E28093860584E1EB
:1038E00080938705109288053093890510928A0588
:1038F00010928B0510928C0510928D0584E68093B2
:103900008E0588E280938F05109293059093900521
:1039100086E98093910530939205ABE9B5E0E8E63E
:10392000F1E08CE001900D928150E1F7089581E083
:1039300080936D0552E050936E0583E080936F0590
:1039400044E04093700535E03093710586E0809344
:10395000720587E08093730528E020937405109228
:1039600075059EE1909376058BEF809378058AE04C
:103970008093790586E48093770590937B05509337
:103980007A0540937C0520937D0580E180937E0538
:103990008FE080937F058AEF809380058AE1809392
:1039A000810580E88093820588E78093830596E906
:1039B000909384058AE58093850583E2809386054C
:1039C00084E18093870510928805309389051092D1
:1039D0008A0510928B0510928C0510928D0584E655
:1039E00080938E0588E280938F051092930582E381
:1039F000809390059093910530939205ABE9B5E0E3
:103A0000E0E7F1E08CE001900D928150E1F708953C
:103A100080912E02882301F510929702109296024F
:103A200010929A021092A60280919801882311F0B8
:103A30008093960280919901882311F080939702D8
:103A400080919A01882311F08093A60280919B01B6
:103A5000882311F080939A0280919602992790937F
:103A6000030580930205809197029927909305059D
:103A7000809304058091A60299279093070580936F
:103A8000060580919A02992790930905809308056D
:103A90001092CF011092D0010E941A140895CF9372
:103AA000DF931092DE011092DD011092E00110927E
:103AB000DF0180E090E0A0E0B0E08093E10190932E
:103AC000E201A093E301B093E4011092D8011092B7
:103AD000D7011092DA011092D9011092DC011092F4
:103AE000DB010E94411885E090E00E94FB0BEC0195
:103AF000CE010E94040C8823D9F30E9441188091C2
:103B0000750580FF10C080910A0190910B01875BC1
:103B1000934038F480910A0190910B018E5E92409F
:103B200010F40E9420108091A9059091AA0597FF9A
:103B300003C0909581959F4F9093D8018093D701B2
:103B40008091A7059091A80597FF03C09095819556
:103B50009F4F9093DA018093D9018091B5059091A0
:103B6000B60597FF03C0909581959F4F9093DC0118
:103B70008093DB018091BB059091BC0597FF03C04A
:103B8000909581959F4F60E170E00E94D32C7093D7
:103B9000E0016093DF018091B2059091B30597FF3A
:103BA00003C0909581959F4F60E170E00E94D32CF7
:103BB0007093DE016093DD016091290570912A0503
:103BC000882777FD8095982F0E94842B6093E101D0
:103BD0007093E2018093E3019093E4011092FB0162
:103BE0001092FC011092FD011092FE011092FF0153
:103BF000109200021092010210920202109203022F
:103C0000109204021092050210920602109207020E
:103C1000109208021092090210920A0210920B02EE
:103C200010920C0210920D0210920E021092AA0530
:103C30001092A9051092A8051092A7051092B6053A
:103C40001092B5058091060190910701A09108019D
:103C5000B091090190932C0580932B051092C5011A
:103C60001092C401109213021092140210921502C5
:103C700010921602809117029091180290931A02E6
:103C80008093190282E390E09093AC018093AB01A2
:103C9000DF91CF9108951F93182F0EC080912E02AF
:103CA000882361F484E690E09093AC018093AB01AB
:103CB0008AEF90E00E94E40C115080F71F91089564
:103CC0002F923F924F925F926F927F928F929F922C
:103CD000AF92BF92CF92DF92EF92FF920F931F931A
:103CE000CF93DF93CDB7DEB724970FB6F894DEBF3E
:103CF0000FBECDBF0E948015299AE0916F05AE2FAF
:103D0000BB27AA0FBB1FAF5BBA4F0D90BC91A02D74
:103D10009D0128583F4F3A83298337FF02C01A82FA
:103D2000198280912702843608F04AC080910101EF
:103D3000882331F484EF91E09093AC018093AB0140
:103D40008091420290914302009731F00197909345
:103D500043028093420204C010922E0210921D0270
:103D6000289A80913D0290913E02815D974028F112
:103D700080918605482F55275A83498381E0809397
:103D80001D02E0916D05FF27EE0FFF1FEF5BFA4F5D
:103D900011821082E0916E05FF27EE0FFF1FEF5B8F
:103DA000FA4F11821082E0917005FF27EE0FFF1F7E
:103DB000EF5BFA4F11821082CEC110922E02CBC15E
:103DC000809127028D3808F4C6C110921D0280919F
:103DD000870522E3829FC0011124909343028093C0
:103DE000420269817A81693271056CF080913D02ED
:103DF00090913E027FEF8F3F970781F1019690935C
:103E00003E0280933D0280913D0290913E02883CAB
:103E1000910520F089819A81889704F510925802C3
:103E20001092590210925A0210925B0210925402A0
:103E300010925502109256021092570210920B02E5
:103E400010920C0210920D0210920E0210920F02AC
:103E5000109210021092110210921202E981FA815E
:103E6000E93CF1050CF4D6C080912E02882309F0BC
:103E700072C1E0917005FF27EE0FFF1FEF5BFA4F55
:103E8000808191818C3491050CF4C1C080914102F4
:103E90008F5F80934102893C08F45DC129980E949C
:103EA0004F1D10922E021092410210923E0210926B
:103EB0003D0280916D05282F3327F901EE0FFF1F7A
:103EC000EF5BFA4F80819181873491059CF4E091FA
:103ED0006E05FF27EE0FFF1FEF5BFA4F0190F08199
:103EE000E02DF7FF03C0F095E195FF4FE734F105B2
:103EF0000CF46CC080916E05682F7727DB01AA0F48
:103F0000BB1FAF5BBA4F8D919C9111978734910580
:103F10003CF0F901EE0FFF1FEF5BFA4F80819181BA
:103F20008D919C918734910564F0F901EE0FFF1F8C
:103F3000EF5BFA4F808191818734910514F042E064
:103F400001C041E0FB01EE0FFF1FEF5BFA4F8081E4
:103F50009181863491055CF4F901EE0FFF1FEF5B50
:103F6000FA4F80819181873491050CF043E0FB0189
:103F7000EE0FFF1FEF5BFA4F808191818A5B9F4FAD
:103F80005CF4F901EE0FFF1FEF5BFA4F8081918126
:103F9000873491050CF044E0660F771F6F5B7A4F12
:103FA000FB01808191818A5B9F4F5CF4220F331F5C
:103FB0002F5B3A4FF90180819181863491050CF491
:103FC00045E0A2E0B0E0042E0E942B2D0E94F801F3
:103FD0004AE36DE675E00E9417020E94F8010E9414
:103FE0004B1E8091750580FFB6C080910A019091AB
:103FF0000B01875B934040F480910A0190910B0183
:104000008E5E924008F0A7C00E942010A4C01092BB
:104010004102A1C049815A81433251050CF09BC035
:1040200080917005482F5527FA01EE0FFF1FEF5BB7
:10403000FA4F80819181855B9F4F0CF06DC080911C
:1040400040028F5F80934002893C08F467C088EC8F
:104050008093400281E090E090933E0280933D0285
:1040600081E080932E021092500210925102109221
:1040700052021092530210920B0210920C021092F4
:104080000D0210920E0210920F0210921002109266
:104090001102109212021092FB011092FC01109278
:1040A000FD011092FE011092030210920402109280
:1040B0000502109206028091E7019091E801A0911B
:1040C000E901B091EA018093FF0190930002A0936F
:1040D0000102B09302028091EF019091F001A09152
:1040E000F101B091F2018093070290930802A0932E
:1040F0000902B0930A0210925802109259021092CB
:104100005A0210925B0210925402109255021092C1
:1041100056021092570202C010924002440F551FDF
:104120004F5B5A4FFA01808191818C3491058CF05C
:1041300080913F028F5F80933F02893C60F0109234
:104140002E0288EC80933F0210923E0210923D02B4
:1041500002C010923F0280916701815080936701F5
:10416000809167018F3F29F080911D02882309F417
:1041700012C10E94DD19E0916D05FF27EE0FFF1FB0
:10418000DF01AF5BBA4F8D919C9160917C057727E1
:10419000E95AFA4F2081318140917D055527FC0174
:1041A000E69FC001E79F900DF69F900D1124F90145
:1041B000E49F9001E59F300DF49F300D1124820F94
:1041C000931F9093290280932802E0916E05FF27A8
:1041D000EE0FFF1FDF01AF5BBA4F8D919C91E95A43
:1041E000FA4F20813181FC01E69FC001E79F900DCD
:1041F000F69F900D1124B901649F9001659F300DC9
:10420000749F300D1124820F931F90932B02809383
:104210002A02E0917005FF27EE0FFF1FEF5BFA4FB8
:1042200080819181909581959F4F90932D028093ED
:104230002C0210918501612F772767FD7095872FDC
:10424000972F0E94842B17FF06C020E030E040E843
:1042500053E40E94DF2A20E030E040E251E40E9473
:10426000DF2A20E030E040E85BE30E94FE2B5B01A8
:104270006C016093B7057093B8058093B90590936E
:10428000BA0510918601612F772767FD7095872FFA
:10429000972F0E94842B17FF06C020E030E040E8F3
:1042A00053E40E94DF2A20E030EE4BE257E40E9404
:1042B000212B6093AE057093AF058093B00590936A
:1042C000B1058091750582FF0CC080E090E0A0E010
:1042D000B0E08093AE059093AF05A093B005B09386
:1042E000B10520E030E040E050E0C601B5010E9499
:1042F0008E2B882364F480E090E0A0E0B0E080930F
:10430000B7059093B805A093B905B093BA0520E01E
:1043100030E040E050E06091AE057091AF058091D3
:10432000B0059091B1050E948E2B882364F480E043
:1043300090E0A0E0B0E08093AE059093AF05A0932D
:10434000B005B093B10580911D02882321F1109230
:104350002D0210922C021092290210922802109223
:104360002B0210922A028DEC9CECACECBDE3809306
:10437000B7059093B805A093B905B093BA058AE044
:1043800097EDA3EABBE38093AE059093AF05A093AE
:10439000B005B093B1058091C6019091C7018D54CD
:1043A000914008F4BCC02091EB013091EC014091A8
:1043B000ED015091EE018091E7019091E801A0910B
:1043C000E901B091EA01B901681B790B70934702CA
:1043D000609346022091F3013091F4014091F50180
:1043E0005091F6018091EF019091F001A091F101BF
:1043F000B091F201281B390B3093450220934402FF
:104400001092C7011092C601673A710534F080918D
:10441000D7019091D801019608C06A557F4F4CF49E
:104420008091D7019091D80101979093D801809302
:10443000D701273A310534F08091D9019091DA0102
:10444000019608C02A553F4F4CF48091D9019091B4
:10445000DA0101979093DA018093D90180910F02DC
:1044600090911002A0911102B0911202873A910529
:10447000A105B1054CF08091DB019091DC01019721
:104480009093DC018093DB0180910F0290911002E8
:10449000A0911102B09112028A559F4FAF4FBF4FAA
:1044A0004CF48091DB019091DC0101969093DC014A
:1044B0008093DB0110927A008091E7019091E801EE
:1044C000A091E901B091EA018093FF01909300026D
:1044D000A0930102B09302028091EF019091F0014C
:1044E000A091F101B091F20180930702909308022C
:1044F000A0930902B0930A028091F7019091F8010C
:10450000A091F901B091FA0180930F0290931002EB
:10451000A0931102B09312028FEE80937A00609103
:10452000E7017091E8018091E9019091EA01A09082
:104530008105BB24CC24DD24E090B205F090B305C6
:10454000A60195010E94082D0027F7FC0095102F69
:104550002E193F09400B510BCA01B90120E130E08F
:1045600040E050E00E94082D39014A0120934C029E
:1045700030934D0240934E0250934F026091EF01F1
:104580007091F0018091F1019091F201E090BB05F2
:10459000F090BC05A60195010E94082D0027F7FCAC
:1045A0000095102F2E193F09400B510BCA01B9017C
:1045B00020E130E040E050E00E94082D20934802C6
:1045C0003093490240934A0250934B02F5EF6F1625
:1045D000F1E07F06F0E08F06F0E09F062CF084EF1C
:1045E00091E0A0E0B0E00DC06CE066166EEF7606DC
:1045F0006FEF86066FEF960664F48CE09EEFAFEFE8
:10460000BFEF80934C0290934D02A0934E02B09363
:104610004F02253F71E0370770E0470770E057070A
:104620002CF084EF91E0A0E0B0E009C02C503E4FA8
:104630004F4F5F4F64F48CE09EEFAFEFBFEF80937E
:10464000480290934902A0934A02B0934B02109201
:104650007A008091FB019091FC01A091FD01B09145
:10466000FE0120914C0230914D0240914E0250913A
:104670004F02821B930BA40BB50B8093FB0190930D
:10468000FC01A093FD01B093FE0180910302909183
:104690000402A0910502B0910602209148023091D7
:1046A000490240914A0250914B02821B930BA40B8A
:1046B000B50B8093030290930402A0930502B0937C
:1046C000060280912C0290912D025C01CC24B7FC53
:1046D000C094DC2CA0925002B0925102C0925202BF
:1046E000D092530297FF03C0909581959F4F849776
:1046F0003CF08091750584FD03C081E08093390210
:1047000060900B0270900C0280900D0290900E024F
:10471000C501B7FE03C0909581959F4F7C0100278E
:10472000F7FC0095102F20917E053327442755274D
:10473000C601B5010E94A02C9B01AC01C801B701C4
:104740000E94A02C20E031E040E050E00E94082DC3
:10475000442737FD4095542F621A730A840A950A3C
:1047600060920B0270920C0280920D0290920E02E7
:1047700080910B0290910C02A0910D02B0910E025B
:1047800081539547A040B04064F080E395E7A0E0F6
:10479000B0E080930B0290930C02A0930D02B093B3
:1047A0000E0280910B0290910C02A0910D02B0912B
:1047B0000E02805D9A48AF4FBF4F64F480ED9AE8D7
:1047C000AFEFBFEF80930B0290930C02A0930D020A
:1047D000B0930E028FEE80937A0080911702909131
:1047E0001802892B09F4A1C08091750583FF9DC033
:1047F0006091E7017091E8018091E9019091EA01EF
:1048000020E032E040E050E00E94082D890137FFAF
:1048100003C0109501951F4F6091EF017091F00159
:104820008091F1019091F20120E032E040E050E00F
:104830000E94082DB90137FF03C0709561957F4F25
:10484000601771070CF4B80169317105A4F4809107
:104850003902882381F08091370290913802892BA8
:1048600051F4809117029091180290931A0280934C
:10487000190210923902209184013327629FC001EE
:10488000639F900D729F900D112460E470E00E9470
:10489000D32CA901461B570B141615060CF03FC06C
:1048A00010927A002091370230913802211531059B
:1048B00061F500910B0210910C0220910D023091D4
:1048C0000E0280911B0290911C02BC01649FC001EA
:1048D000659F900D749F900D112460E270E00E941E
:1048E000D32C882777FD8095982F060F171F281F38
:1048F000391F00930B0210930C0220930D0230938A
:104900000E028FEE80937A0010C08FEE80937A00B3
:1049100021503040309338022093370206C084EF94
:1049200091E090933802809337028091750585FF5E
:1049300011C08091330299279093A3028093A20221
:104940008091340299279093A5028093A4020E943B
:104950002A2908C010928D0210928C0210928F02A8
:1049600010928E028091E9048F5F8093E904809118
:104970003A02815080933A028F3F09F068C081E388
:1049800080933A026091E7017091E8018091E9011A
:104990009091EA01E0908105FF2400271127A801EA
:1049A00097010E94082D3093EB042093EA04609154
:1049B000EF017091F0018091F1019091F201A80155
:1049C00097010E94082D3093ED042093EC04809110
:1049D000B2059091B3059093EF048093EE0480911B
:1049E000BB059091BC059093F1048093F0048091F5
:1049F000B5059091B6059093F3048093F2048091ED
:104A00002F02909130029093F5048093F40460910A
:104A1000130270911402809115029091160220E009
:104A200032E040E050E00E94082D3093F7042093DC
:104A3000F60489819A819093F9048093F804809117
:104A40001702909118029093FB048093FA046091EE
:104A5000E7017091E8018091E9019091EA012090CD
:104A6000AE053090AF054090B0055090B105E09094
:104A7000A905F090AA056090B7057090B8058090E0
:104A8000B9059090BA050E94842BA20191010E9461
:104A9000FE2B5B016C010027F7FC0095102FC8016D
:104AA000B7010E94842BA40193010E94FE2B9B015D
:104AB000AC01C601B5010E94DF2A0E94672B7093EA
:104AC000AA056093A9056091EF017091F0018091B2
:104AD000F1019091F201E090A705F090A8050E94E5
:104AE000842BA20191010E94FE2B5B016C01002727
:104AF000F7FC0095102FC801B7010E94842BA40178
:104B000093010E94FE2B9B01AC01C601B5010E94DE
:104B1000DF2A0E94672B7093A8056093A705609118
:104B2000B5057091B605A090F701B090F801C0905E
:104B3000F901D090FA01882777FD8095982F0E947F
:104B4000842B7B018C0120E030E040E05FE3C40176
:104B5000B3010E94FE2B9B01AC01C801B7010E946A
:104B6000FE2B7B018C01C601B5010E94842BA201A2
:104B700091010E94FE2B9B01AC01C801B7010E946C
:104B8000DF2A0E94672B7093B6056093B50580916C
:104B9000A9059091AA058150984034F080E098E0F2
:104BA0009093AA058093A9058091A9059091AA05E3
:104BB0008050984F34F480E098EF9093AA0580934A
:104BC000A9058091A7059091A8058150984034F0DF
:104BD00080E098E09093A8058093A7058091A705B1
:104BE0009091A8058050984F34F480E098EF90930E
:104BF000A8058093A7058091B5059091B6058150D1
:104C0000984034F080E098E09093B6058093B50525
:104C10008091B5059091B6058050984F34F480E0AE
:104C200098EF9093B6058093B50580917505992707
:104C300080FFCDC02091810181FF0EC02233B0F4EE
:104C400080912F029091300244979093320280938A
:104C5000310210921E020DC080917A05289FC0017A
:104C600011244497909332028093310281E0809323
:104C70001E0280911D02882321F0109232021092B0
:104C8000310220912F023091300240913102509137
:104C90003202421753070CF09AC080911E028823FB
:104CA00009F495C0241B350B809182019927BC0122
:104CB000269FC001279F900D369F900D112460E123
:104CC00070E00E94D32C09811A81061B170B2091DA
:104CD000C4013091C501809180019927FC012E9F6C
:104CE000C0012F9F900D3E9F900D112468E070E051
:104CF0000E94D32C061B170B6091130270911402B3
:104D0000809115029091160220E032E040E050E0E0
:104D10000E94082DCA01B90120918301332744273D
:104D200055270E94A02C20E230E040E050E00E9495
:104D3000082DFFEF2E3C3F0714F42EEC3FEF80913F
:104D40003B0290913C02AC0174E0440F551F7A95F0
:104D5000E1F7481B590B2333310514F022E330E00F
:104D6000021B130BCA01800F911F60E170E00E94CB
:104D7000D32C70933C0260933B0280917605992777
:104D8000681779078CF429813A81281739072CF0A4
:104D900090933C0280933B0207C049815A81509313
:104DA0003C0240933B020DC080913B0290913C023B
:104DB00069817A816817790724F470933C026093C3
:104DC0003B0280913B0290913C029A838983C09080
:104DD000B505D090B6058091500290915102C81A45
:104DE000D90A95E6C916D10424F064E6C62ED12C62
:104DF00009C0ECE9CE16EFEFDE0624F45CE9C52E1F
:104E00005FEFD52E409078015090790160907A0143
:104E100070907B016091A9057091AA0520912802EC
:104E20003091290240918C0250918D02241B350B48
:104E3000621B730B882777FD8095982F0E94842B27
:104E40009B01AC01C301B2010E94FE2B0E94672BA3
:104E500070939902609398028091980290919902C0
:104E60008C01222717FD2095322F809158029091B6
:104E70005902A0915A02B0915B02080F191F2A1F14
:104E80003B1F009358021093590220935A0230930B
:104E90005B021016110612061306ACF4C80117FFC8
:104EA00003C0909581959F4F60E071E00E94D32CE4
:104EB0006F5F7F4F882777FD8095982F061B170B14
:104EC000280B390B14C0C80117FF03C090958195BA
:104ED0009F4F60E071E00E94D32C6F5F7F4F882767
:104EE00077FD8095982F060F171F281F391F0093F5
:104EF00058021093590220935A0230935B0280911A
:104F0000580290915902A0915A02B0915B028138E7
:104F1000FEE39F07F0E0AF07F0E0BF072CF080E86A
:104F20009EE3A0E0B0E009C08058914CAF4FBF4F66
:104F300064F480E891ECAFEFBFEF80935802909358
:104F40005902A0935A02B0935B026091980270914B
:104F5000990280907C0190907D01A0907E01B0909C
:104F60007F01882777FD8095982F0E94842B7B01F5
:104F70008C01609158027091590280915A0290916F
:104F80005B020E94842B9B01AC01C501B4010E940D
:104F9000FE2B9B01AC01C801B7010E94DF2A0E94D1
:104FA000672B9601260F371F49815A81240F351F21
:104FB00022244A30510514F441E0242E37FD02C06A
:104FC000222019F040E050E008C08091B405482F3D
:104FD0005527241735070CF4A9018091AB05E82F5C
:104FE000FF27FC83EB839F01E417F5070CF49A017C
:104FF0002093960229813A81261B370BB9016C0D4B
:105000007D1D77FD02C0222019F080E090E007C0EE
:105010008091B4059927681779070CF4CB012B818F
:105020003C81281739070CF49C012093970260916A
:10503000A7057091A80520912A0230912B0240917A
:105040008E0250918F02241B350B621B730B882735
:1050500077FD8095982F0E94842B9B01AC01C301A2
:10506000B2010E94FE2B0E94672B70939502609301
:10507000940280919402909195028C01222717FD51
:105080002095322F8091540290915502A0915602A2
:10509000B0915702080F191F2A1F3B1F009354029B
:1050A00010935502209356023093570210161106A2
:1050B00012061306ACF4C80117FF03C09095819542
:1050C0009F4F60E071E00E94D32C6F5F7F4F882775
:1050D00077FD8095982F061B170B280B390B14C0F2
:1050E000C80117FF03C0909581959F4F60E071E064
:1050F0000E94D32C6F5F7F4F882777FD8095982F74
:10510000060F171F281F391F0093540210935502D2
:105110002093560230935702809154029091550289
:10512000A0915602B091570281383EE3930730E0D8
:10513000A30730E0B3072CF080E89EE3A0E0B0E0E6
:1051400009C08058914CAF4FBF4F64F480E891EC98
:10515000AFEFBFEF8093540290935502A093560295
:10516000B09357026091940270919502882777FD61
:105170008095982F0E94842B7B018C0160915402B2
:105180007091550280915602909157020E94842B93
:105190009B01AC01C501B4010E94FE2B9B01AC0137
:1051A000C801B7010E94DF2A0E94672B29813A813A
:1051B000260F371F2C193D0937FD02C0222019F098
:1051C00040E050E008C08091B405482F55272417CF
:1051D00035070CF4A9012B813C81241735070CF409
:1051E0009A012093A60289819A81861B970BBC01A4
:1051F0006C197D0977FD02C0222019F020E030E013
:1052000008C08091B405282F3327621773070CF468
:105210009B018B819C81821793070CF4C9018093B9
:105220009A0224960FB6F894DEBF0FBECDBFDF9171
:10523000CF911F910F91FF90EF90DF90CF90BF9093
:10524000AF909F908F907F906F905F904F903F9026
:105250002F9008956F927F928F929F92AF92BF92FC
:10526000CF92DF92EF92FF920F931F9380911F02D4
:1052700090912002181619060CF078C18091220531
:10528000882309F473C180918A0190918B01892B45
:10529000D1F180910A0590910B05A0910C05B09178
:1052A0000D0580935C0290935D02A0935E02B09323
:1052B0005F0280910E0590910F05A0911005B091AD
:1052C00011058093600290936102A0936202B093F3
:1052D00063028091120590911305A0911405B0917D
:1052E00015058093640290936502A0936602B093C3
:1052F000670282E390E09093AC018093AB0110923F
:105300008B0110928A01A090A202B090A30260913A
:1053100064027091650280916602909167026E5FEF
:105320007F4F8F4F9F4F20915C0230915D024091E3
:105330005E0250915F02E2E0EE2EF12C012D112D64
:105340002E253F254027512762277327842795273D
:105350000E94842B0E94462C3B014C016091120557
:105360007091130580911405909115056E5F7F4F24
:105370008F4F9F4F20910A0530910B0540910C05EE
:1053800050910D052E253F25402751276227732771
:10539000842795270E94842B0E94462C9B01AC01F8
:1053A000C401B3010E94DE2A7B018C01CC24B7FC2E
:1053B000C094DC2CC601B5010E94842B9B01AC017A
:1053C000C801B7010E94FE2B20E030E040E251E42A
:1053D0000E94212B0E94672B3B014C0160936A02C3
:1053E00070936B0280936C0290936D022091A202E5
:1053F0003091A3026091600270916102809162021B
:1054000090916302E0900E05F0900F050091100559
:10541000109111056E197F09800B910B442737FD00
:105420004095542F0E94A02C2AE030E040E050E04C
:105430000E94082D59016A0120936E0230936F0279
:1054400040937002509371026091A4027091A50282
:10545000882777FD8095982F2091160530911705A4
:1054600040911805509119050E94A02C2DEF3FEF97
:105470004FEF5FEF0E94082D79018A0120937A0295
:1054800030937B0240937C0250937D026091A40292
:105490007091A502882777FD8095982F20911A0595
:1054A00030911B0540911C0550911D050E94A02CB8
:1054B0002DEF3FEF4FEF5FEF0E94082D20937E020C
:1054C00030937F024093800250938102B3016E0DAE
:1054D0007F1D70938D0260938C022A0D3B1D3093CB
:1054E0008F0220938E0280918C0190918D018617FE
:1054F00097072CF480918C0190918D0111C08091BF
:105500008C0190918D01909581959F4F6817790737
:105510005CF480918C0190918D01909581959F4FC5
:1055200090938D0280938C0280918C0190918D01DB
:10553000821793072CF480918C0190918D0111C0FA
:1055400080918C0190918D01909581959F4F2817A6
:105550003907D4F480918C0190918D0190958195BB
:105560009F4F90938F0280938E020EC085E090E053
:1055700090938B0180938A0110928D0210928C027D
:1055800010928F0210928E021F910F91FF90EF9058
:10559000DF90CF90BF90AF909F908F907F906F9053
:1055A0000895FC014150504030F001900616D1F7AB
:1055B0003197CF0108958827992708955058192EBB
:1055C000EFD001D0D2C0BA176207730784079507DE
:1055D000B1F188F40EF410940B2EBA2FA02D062EE4
:1055E000622F202D072E732F302D082E842F402D53
:1055F000092E952F502DFF275523B9F0591B49F03F
:10560000573E98F0469537952795A795F0405395C6
:10561000C9F776F0BA0F621F731F841F30F48795A5
:1056200077956795B795F040939517FA0F2E0895E3
:10563000BF1BBB27BA0B620B730B840BF6CFDEF6D6
:10564000DBC0AED001D091C0552359F0992369F049
:105650009F575F57951B33F442F4903811F49158DB
:1056600005C09BC091589F3F09F4C6C0BB271124B9
:1056700062177307840730F4660F771F881FBB1FFC
:10568000915098F311D00F920FD00F920DD0A0E847
:105690002617370748071B0609F0A048BA2F602DC8
:1056A0007F918F9100240895A0E80024621773076A
:1056B0008407B10528F0621B730B840BB1090A2A19
:1056C000660F771F881FBB1FA69581F7089597FB6C
:1056D00073D09F3738F0FEE9F91B982F872F762F6C
:1056E0006B2F05C086C09695879577956795F15085
:1056F000D0F73EF490958095709561957F4F8F4FD0
:105700009F4F0895E89403C097FB0EF4F3DFB62F84
:10571000672F782F892F9EE9002427C00ED05EF0D6
:1057200004C00BD026F001C008D019F020F48FEF90
:10573000089580E0089581E0089597FB092E0526DD
:1057400000F8689430D0E89407FC07C0621773072C
:105750008407950721F008F400940794989408951D
:105760009A95BB0F661F771F881F11249923A1F0FC
:105770008823B2F79F3F59F0BB0F48F421F4002073
:1057800011F460FF04C06F5F7F4F8F4F9F4F881FE2
:105790009795879597F908952CC09FEF80EC089511
:1057A000052E092607FA440F551F5F3F79F0AA27F7
:1057B000A51708F051E04795880F991F9F3F31F0DA
:1057C000BB27B91708F091E0879508959F919F91A5
:1057D0001124E3CF97FB880F991F9F3F31F0BB2720
:1057E000B91708F091E0879508959F919F91112432
:1057F000D4CF66277727882799270895D1DF01D04E
:10580000B4CF992339F0552329F09F575F57950F4F
:1058100013F49AF1F1CF91589F3FE1F3629FA12DCC
:105820000F92BB27639FA00DB11DEE27729FA00DA5
:10583000B11DEE1FAF93AA27649FB00DE11D739FAA
:10584000B00DE11DAA1F6627829FB00DE11DA61FA6
:105850005527749FE00DA11D551F839FE00DA11DCD
:10586000561F849FA00D511D852F7A2F6E2F1F90DC
:105870000F9088231AF4939539F48FCF000C111CE4
:10588000BB1F661F771F881F0128089597FD85CFCE
:10589000992309F40895482F9DDFF92FFF57F595B7
:1058A0009F1B9F1BFF9361DFFF92EF92DF92CF92CE
:1058B000BF92AF929F928F926B017C0140584795A7
:1058C0003327222740685FE3B601C70149015A0127
:1058D0000E94212B9401A5010E94DF2A4FEF5FEF68
:1058E00013D09B01AC0182169306A406B50661F79E
:1058F0008F909F90AF90BF90CF90DF90EF90FF90F0
:105900005F9168DF950F31CF65DF992359F0AA27A2
:10591000940FA51F43F032F04FEF50E09417A50706
:1059200014F423CF66CF0EF006C000C09FEF80E8CE
:1059300070E060E008959FE780E870E060E008951F
:10594000629FD001739FF001829FE00DF11D649F63
:10595000E00DF11D929FF00D839FF00D749FF00DEF
:10596000659FF00D9927729FB00DE11DF91F639F90
:10597000B00DE11DF91FBD01CF0111240895AA1B2F
:10598000BB1B51E107C0AA1FBB1FA617B70710F02A
:10599000A61BB70B881F991F5A95A9F7809590955C
:1059A000BC01CD01089597FB092E07260AD077FD8B
:1059B00004D0E5DF06D000201AF4709561957F4F82
:1059C0000895F6F7909581959F4F0895A1E21A2EBC
:1059D000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F93
:1059E000A217B307E407F50720F0A21BB30BE40BE3
:1059F000F50B661F771F881F991F1A9469F760952A
:105A00007095809590959B01AC01BD01CF010895E3
:105A100097FB092E05260ED057FD04D0D7DF0AD0FC
:105A2000001C38F450954095309521953F4F4F4FCD
:105A30005F4F0895F6F790958095709561957F4F2B
:105A40008F4F9F4F0895F999FECFB2BDA1BDF89A2F
:105A5000119600B40895F999FECFB2BDA1BD00BC66
:105A600011960FB6F894FA9AF99A0FBE0895FFCFDF
:105A700001640A016400007D0000FF0301020304C9
:105A800005060708090A48616C6C6F2057656C743D
:105A90000000000000000000000000000000000006
:105AA00000000000000000000000000000000000F6
:105AB00000000000000000000000000000000000E6
:105AC00000000000000000000000000000000000D6
:105AD0000000000000000A014B616D65726100006A
:105AE0004E6F726D616C00000000803F17B7D138B7
:0E5AF00030FB103A403296020A640500230093
:00000001FF
/branches/Chris_hallo/GPS.c
0,0 → 1,89
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 08.2007 by Christopher Hartmann / Daniel Schmitz
// +
// + Bitte die read_me Datei beachten! Es handelt sich hierbei um eine erste Probeversion!
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
#include "math.h"
 
// GPS feste Variablen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//volatile int loop = 0;
//long gps_northing = 0, gps_easting = 0, gps_altitude = 0;
 
long target_x = 0, target_y = 0, target_z = 0;
 
volatile int alpha = 0;
 
long zwn = 0, zwe = 0, zwn1 = 0, zwe1 = 0, zwn2 = 0, zwe2 = 0;
volatile int gps_getpos = 5;
long gps_home_x = 0;
long gps_home_y = 0;
 
// GPS Einstellungen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
volatile int komp_dreh = 0; // verdrehten Kompasseinbau kompensieren (+/-Grad)
volatile int gpsmax = 35; //maximal zulässiger "GPS-Steuerausschlag"
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
void gps_main(void)
{
/*
if (MotorenEin = 1 && gps_gethome == 0 && actualPos.state != 0){ //speichert GPS-Home-Position
gps_home_x = actualPos.x;
gps_home_y = actualPos.y;
beeptime = 80;
gps_gethome = 1;
}*/
 
 
if (Poti1>0 && actualPos.state != 0){ //Beginn GPS-Position-Hold
 
if (gps_getpos != 0){ //Postion mit Schalter loggen
target_x = actualPos.x;
target_y = actualPos.y;
target_z = actualPos.z;
beeptime = 50;
gps_getpos = 0;}
 
//Regler ##########################################################################################################################
//P-Regler
zwn = ((sqrt(target_x^2+target_z^2)-sqrt(actualPos.x^2+actualPos.z^2))*gps_p)/10; //8
zwe = ((target_y-actualPos.y)*gps_p)/10;
 
//D-Regler
zwn2= (gps_d*actualPos.vx)/-3; //-2
zwe2= (gps_d*actualPos.vy)/-3;
 
GPS_Nick = (zwn+zwn2); // skal;
GPS_Roll = (zwe+zwe2); // skal;
 
//GPS-Mixer########################################################################################################################
if (GPS_Nick>gpsmax){GPS_Nick=gpsmax;} else if (GPS_Nick<(-1*gpsmax)){GPS_Nick=(-1*gpsmax);} //min-max Wert überprüfen
if (GPS_Roll>gpsmax){GPS_Roll=gpsmax;} else if (GPS_Roll<(-1*gpsmax)){GPS_Roll=(-1*gpsmax);}
 
/*
//Rotationsmatrix##################################################################################################################
//Kompass ++++++++++++++++++++++++++++
alpha=0;
alpha = komp_dreh+KompassValue;
if (KompassValue>300) {beeptime=50;}
if (alpha>359) {alpha=alpha-360;}
 
 
GPS_Nick=(sin(alpha)*GPS_Roll+cos(alpha)*GPS_Nick);
GPS_Roll=(cos(alpha)*GPS_Roll-sin(alpha)*GPS_Nick);
*/
 
}else {
gps_getpos=5;
GPS_Nick=0;
GPS_Roll=0;
}
}
 
 
 
 
/branches/Chris_hallo/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/Chris_hallo/V0.71_Beta_HEX/Flight-Ctrl_MEGA644_V0_71.hex
0,0 → 1,1556
:100000000C94EC010C9409020C9409020C94090262
:100010000C9409020C9409020C9409020C94090234
:100020000C9409020C942D0C0C9409020C940902F6
:100030000C94FE140C9409020C9409020C9409020D
:100040000C9409020C9409020C94840B0C94090280
:100050000C945D040C9409020C94A5030C94090201
:100060000C94190D0C9409020C944B140C94090275
:100070000829573F9F2D49CBA5310F76C73493F2FE
:100080007E37D00D013AB60B613D2AAAAB3F000086
:10009000003F800000000A0A0D004E657574726111
:1000A0006C0048656164696E67486F6C64000A0D96
:1000B000537465756572756E673A20004F4B0A0D73
:1000C000000A0D4162676C65696368204C7566744F
:1000D000647275636B73656E736F722E2E000A0DFA
:1000E00042656E75747A6520506172616D657465E4
:1000F000727361747A202564000A0D496E69742E4A
:1001000020454550524F4D3A2047656E65726965EE
:1001100072652044656661756C742D506172616D05
:10012000657465722E2E2E000A0D3D3D3D3D3D3D10
:100130003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DEF
:100140003D3D3D3D3D3D3D3D000A0D466C696768C6
:1001500074436F6E74726F6C205625642E25642074
:10016000002E0052616E67653A2533692D2533698B
:10017000005374656C6C756E673A202533690053C3
:100180006574706F696E7420202533690053657241
:10019000766F202000506F7469343A20202533692F
:1001A00000506F7469333A202025336900506F7412
:1001B00069323A202025336900506F7469313A2042
:1001C000202533690053746172743A202020202066
:1001D000253569004D657373776572743A20202563
:1001E0003569005269636874756E673A2020253559
:1001F00069004B6F6D7061737320202020202020D8
:1002000000456D70662E506567656C3A253569004E
:100210005370616E6E756E673A202025356900480F
:100220006F63682025346920282533692900526FBF
:100230006C6C20253469202825336929004E6963B8
:100240006B20253469202825336929004143432048
:100250002D2053656E736F720047696572202534D7
:100260006920282533692900526F6C6C2025346978
:10027000202825336929004E69636B2025346920C5
:100280002825336929004779726F202D2053656E28
:10029000736F720050333A25346920204B616EE44D
:1002A0006C65200050313A253469202050323A25BF
:1002B0003469200047733A253469202047693A257C
:1002C000346920004E693A2534692020526F3A255E
:1002D000346920004B373A25346920204B616EE4A5
:1002E0006C6520004B353A25346920204B363A2581
:1002F000346920004B333A25346920204B343A25A9
:10030000346920004B313A25346920204B323A259C
:10031000346920004B6F6D706173733A2020202583
:10032000356900526F6C6C3A202020202020253542
:1003300069004E69636B3A20202020202025356912
:1003400000616B742E204C6167650048F668656E2D
:10035000726567656C756E67004B65696E65200038
:100360004F66662020202020203A20253569004C49
:10037000756674647275636B3A2025356900536F36
:100380006C6C486F6568653A2025356900486F6573
:1003900068653A202020202025356900286329201F
:1003A000486F6C676572204275737300536574748F
:1003B000696E673A20256420005625642E25640066
:1003C0002B2B204D696B726F4B6F70746572202BF5
:1003D0002B005B25695D000011241FBECFEFD0E12B
:1003E000DEBFCDBF11E0A0E0B1E0E8E9F0E602C079
:1003F00005900D92AA38B107D9F716E0AAE8B1E046
:1004000001C01D92AB30B107E1F70E9440020C948D
:100410004B300C940000A2E0B0E00E943730802DF9
:1004200099270895FB01282F863008F025E0842FB6
:100430009927429FD0011124AC59BF4F019724F056
:1004400001900E943F30FACFA2E0B0E0022E0E945D
:100450003F300895CF93DF93FB01C42FDD27863013
:1004600008F085E0489FD0011124AC59BF4F219777
:1004700024F00E9437300192FACFDF91CF91089596
:100480000F931F93CF93DF9391E097B98FEF88B9C4
:100490008BE184B995B98EE38AB9579A87EF8BB906
:1004A00084B7877F84BF80916000886180936000FB
:1004B0001092600080ED97E09093A8018093A701CF
:1004C000109233021092320210929405109293050A
:1004D000109231021092300210922F0210922E02CE
:1004E00028980E94DA0C0E944C070E94E9140E948E
:1004F000130D0E943114789410924E048CE3809373
:100500004F0484E0809350048CE390E09F938F939A
:100510001F921F9289E491E09F938F931F920E94F4
:10052000E20888E291E09F938F931F920E94E20875
:10053000299AA1E0B0E00E943730802D2DB73EB758
:10054000265F3F4F0FB6F8943EBF0FBE2DBF8B33D3
:10055000A9F189EF90E09F938F931F920E94E20888
:100560000E94B41C4AE36BEB75E080E00E9412022B
:1005700001E00F900F900F90023049F40E94471C49
:100580004AE36BEB75E082E00E94120203E04AE36B
:100590006BEB75E0802F0E9412020F5F063060F354
:1005A00081E022E030E0D901082E0E943F308BE349
:1005B00021503040D901082E0E943F3002E010E067
:1005C000D8010E943730802D4AE36BEB75E00E9422
:1005D0002A02D8010E943730802D99279F938F934C
:1005E0008EED90E09F938F931F920E94E20880917E
:1005F000C3050F900F900F900F900F9080FF20C0B9
:1006000081EC90E09F938F931F920E94E20884EC0C
:1006100099E00E94180CEC010E943D100F900F9081
:100620000F90CE010E94210C8823D9F38CEB90E02F
:100630009F938F931F920E94E2080F900F900F904C
:100640000E946C1D289880ED97E09093A8018093FC
:10065000A70188EE93E0909349048093480485E5D0
:10066000809343048EEA90E09F938F931F920E94A1
:10067000E2088091C3050F900F900F9082FF03C096
:1006800082EA90E002C08AE990E09F938F931F92E4
:100690000E94E2080F900F900F9086E990E09F93E0
:1006A0008F931F920E94E2080E9464100F900F9097
:1006B0000F908091A401882379F11092A4010E94E7
:1006C0007D1E0E94251D289880910101882319F024
:1006D00081508093010180912D02882329F080911F
:1006E0002D02815080932D0220910401309105014B
:1006F0008091D30599272817390734F480ED97E0C6
:100700009093A8018093A7018091D201882319F4C6
:100710000E94311401C028980E9469070E94D707DF
:1007200080E090E00E94210C882319F2809134022D
:10073000882329F088B190E1892788B901C04498BD
:1007400084EF91E00E94180CB4CF1F920F920FB665
:100750000F9211248F939F93EF93FF938091000149
:100760008823E1F480919F019091A00101969093DC
:10077000A00180939F01FC01ED5FFC4FE081ED3013
:1007800019F08639910539F41092A00110929F0159
:1007900081E080930001E093C60004C01092A001A4
:1007A00010929F01FF91EF919F918F910F900FBE3B
:1007B0000F901F90189580912505813091F58091BB
:1007C000150590911605A0911705B0911805809315
:1007D000580590935905A0935A05B0935B058091F5
:1007E000190590911A05A0911B05B0911C058093E5
:1007F0005C0590935D05A0935E05B0935F058091C5
:100800001D0590911E05A0911F05B09120058093B4
:10081000600590936105A0936205B0936305109203
:10082000250580914204813031F480913604809313
:1008300070051092420480917204813091F580918C
:10084000620490916304A0916404B0916504809364
:10085000640590936505A0936605B0936705809144
:10086000660490916704A0916804B0916904809334
:10087000680590936905A0936A05B0936B05809114
:100880006A0490916B04A0916C04B0916D04809304
:100890006C0590936D05A0936E05B0936F05109253
:1008A000720480917005882339F0289A81E090E0E5
:1008B0009093D5028093D40208951F920F920FB6A1
:1008C0000F9211242F933F934F935F936F937F93D6
:1008D0008F939F93AF93BF93CF93DF93EF93FF9348
:1008E0008091C60080938E018091C00040918E015E
:1008F000887109F005C18091A101843009F48AC092
:10090000853050F48130D1F0813098F0823001F19F
:10091000833009F0F2C021C0863009F4ABC08630C4
:1009200008F48CC0873009F4D6C0883009F0E5C0DF
:10093000D8C0453B09F0E8C081E003C0423621F44D
:1009400082E08093A101E0C0453B09F4DDC0D5C041
:10095000413009F0D2C083E0F4CF409372054F5F7D
:1009600040930203809102038F5F8093310484E0FF
:100970008093A10180917205833031F0813161F162
:10098000813009F03FC014C082E394E090935D048D
:1009900080935C0423E535E0309300032093FF024D
:1009A000409690930A05809309058091420427C0E0
:1009B00081E195E090935D0480935C042AEC36E03D
:1009C000309300032093FF02449690930A0580938E
:1009D00009058091250513C08EE594E090935D0490
:1009E00080935C0427E136E0309300032093FF02FC
:1009F000449690930A058093090580917204809330
:100A0000730582C081E08093730510920A051092ED
:100A100009057AC0842F992790930C0580930B05C4
:100A200080910203840F809302038091310490919E
:100A30000203890F8093310485E083CF20910B0559
:100A400030910C05842F9927982F8827280F391F5C
:100A500030930C0520930B0580910203840F809343
:100A600002038091310490910203890F8093310435
:100A700086E067CF80910203840F80930203809108
:100A8000310490910203890F8093310480917305A2
:100A9000882381F4E0915C04F0915D048091FF0271
:100AA00090910003E817F90728F44193F0935D044F
:100AB000E0935C0480910B0590910C050197909355
:100AC0000C0580930B0580910B0590910C05892BEB
:100AD000D9F487E036CF80910203481771F488E09B
:100AE00030CF80913104481741F4E0910905F0912D
:100AF0000A05309711F081E080831092A10104C0B3
:100B00001092A1010E94DB030E94DB0340919A0135
:100B1000463910F01092990180918E018D3009F0C4
:100B20005CC080919901823009F057C01092990100
:100B3000A42FBB27FD01EF58FB4F3081ED01CE58AC
:100B4000DB4F288180919D0190919E01831B91092B
:100B5000821B91099F7090939E0180939D019C013F
:100B600096E0369527959A95E1F7235C20939C01B2
:100B7000982F9F73935C90939B018081281729F491
:100B80008881981711F491E006C0809191018F5FE0
:100B90008093910190E080918F01882309F064C0D7
:100BA000992309F461C081E080938F014093920101
:100BB000AD58BB4F8DE08C9380917504823509F060
:100BC00053C088E190E02CE00FB6F894A89580938C
:100BD00060000FBE2093600047C080919901813072
:100BE000D9F0813018F08230E9F530C080918E0163
:100BF000833239F480918F01882319F481E0809346
:100C0000990180918E018093730481E080939A0111
:100C100080918E01992715C082E080939901E42F7D
:100C2000FF2780918E01ED58FB4F80834F5F4093EB
:100C30009A0120918E0180919D0190919E01820FD9
:100C4000911D90939E0180939D010EC0E42FFF277C
:100C500080918E01ED58FB4F8083463938F3109216
:100C60009901E7CF10929901FF91EF91DF91CF9118
:100C7000BF91AF919F918F917F916F915F914F91B4
:100C80003F912F910F900FBE0F901F901895DC0190
:100C900020E030E040E050E0E3E0F3E005C0819187
:100CA000280F311D4F5F5F4F4A175B07C1F73F7039
:100CB000C90166E0969587956A95E1F7835CFD0129
:100CC000ED5FFC4F808311962F73235CFD01ED5F78
:100CD000FC4F2083AC5FBC4F8DE08C9310920001E1
:100CE000809103038093C6000895EF92FF920F93C3
:100CF0001F93CF93DF937A01722F93E290930303B4
:100D0000609304038093050303E010E060E0A6E035
:100D1000B3E046C0F701E60FF11D90816F5F71509F
:100D200019F4E0E040E00FC0F701E60FF11D40814B
:100D30006F5F715011F4E0E006C0F701E60FF11D9E
:100D4000E0816F5F7150892F86958695835C8C93C7
:100D50005527892F99278370907024E0880F991F59
:100D60002A95E1F79A0194E0369527959A95E1F74F
:100D7000822B835CED0189834F705070440F551FA7
:100D8000440F551F8E2F8295869586958370842BF0
:100D9000835C8A83EF73E35CEB830C5F1F4F1496D5
:100DA000772309F0B7CFC8010E944706DF91CF91A2
:100DB0001F910F91FF90EF9008950F931F93CF9382
:100DC000DF93EC01062F70E0A22FBB2712974AC0D9
:100DD000E42FFF27ED58FB4F30814F5FE42FFF27B3
:100DE000ED58FB4F50814F5FE42FFF27ED58FB4F2D
:100DF00010814F5FE42FFF27ED58FB4F20814F5F9D
:100E0000842F9927A817B90784F1701771F15D53E2
:100E1000FE01E70FF11D3D53330F330F852F8295F0
:100E20008F70382B3083613001F1912F9D537F5F9C
:100E3000FE01E70FF11D71505295507F892F869565
:100E40008695582B508363506F3F79F07E5FFE018B
:100E5000E70FF11D9295990F990F907C2D53922BCE
:100E600090837F5F662309F0B3CFDF91CF911F910D
:100E70000F9108951F93182F8A3019F48DE00E9466
:100E80003A078091C00085FFFCCF1093C60080E038
:100E900090E01F9108950895E1ECF0E088E18083EF
:100EA000A0ECB0E08C9182608C938081806880831C
:100EB0008081806480838AE28093C40088EC90E023
:100EC0000E94180C9093300480932F041092A1017B
:100ED000089580910001882309F468C080918A01F7
:100EE000882371F080910001882351F02BE043E4C6
:100EF00054E06091010387E40E94750610928A0114
:100F000080912F04909130040E94210C882321F4B9
:100F100080918C018823B1F080910001882391F0A9
:100F200022E346E255E06091010384E40E947506E5
:100F300010928C018AEF90E00E94180C909330047C
:100F400080932F0480918B018823F1F08091000120
:100F50008823D1F00E946D1010928B01809198012E
:100F60008F5F80939801843011F4109298018091E2
:100F7000980144E1849FA00111244A5E5E4F24E160
:100F800060E0805D0E94750680918D01882371F07C
:100F900080910001882351F02AE04EE454E06091F2
:100FA000010386E50E94750610928D0108951F9336
:100FB000CF93DF93CDB7DEB722970FB6F894DEBF9D
:100FC0000FBECDBF80918F01882309F498C08FEFA9
:100FD0008093010180917504813760F48C3608F0AC
:100FE0006FC0873609F440C08836F9F0833609F0BF
:100FF00084C008C0843759F1863791F1813709F0F0
:101000007CC036C02091920143E06BE083E494E021
:101010000E94DD068091C90190914504892B80933F
:10102000C90181E080938C0168C02091920143E066
:1010300062E0CE0101960E94DD068091C90199818E
:10104000892B8093C90181E080938B0156C0209148
:10105000920143E064E084E991E00E94DD064DC026
:1010600081E080938D0149C081E080938A0145C071
:101070002091920143E062E0CE0101960E94DD06DC
:1010800089818F3F89F0863010F085E089834AE3BB
:101090006BEB75E089810E942A0289812AE34BEB80
:1010A00055E06091010308C0109101030E940B02FA
:1010B0002AE34BEB55E0612F855B0E9475061DC04E
:1010C0002091920143E06AE38BEB95E00E94DD06FC
:1010D000809175044AE36BEB75E08B560E94120217
:1010E000809175048B56A2E0B0E0082E0E943F303C
:1010F0000E940B0299270E94681E10928F0122966F
:101100000FB6F894DEBF0FBECDBFDF91CF911F9118
:101110000895982F80917405813069F48091C801F9
:10112000E82FFF27EA5EFE4F90838F5F8093C80110
:1011300021E030E005C0892F0E943A07282F33278D
:10114000C90108951F93182F04C080E30E948908E5
:1011500011501116D4F31F9108951F93182F04C036
:1011600080E20E94890811501116D4F31F9108954E
:101170000F931F93CF93DF938C01EB0108C0F8010D
:101180000F5F1F4FE4918E2F0E94890821972097AF
:10119000B1F7DF91CF911F910F9108950F931F9396
:1011A000CF93DF938C01EB0106C0F80181918F0191
:1011B0000E94890821972097C1F7DF91CF911F9155
:1011C0000F9108952F923F924F925F926F927F926C
:1011D0008F929F92AF92BF92CF92DF92EF92FF9247
:1011E0000F931F93CF93DF93CDB7DEB7E3970FB67F
:1011F000F894DEBF0FBECDBF29968FAD299780939F
:101200007405CE01855B9F4F9D838C832B968EAD9D
:101210009FAD2B979FA78EA722243324210102C0C4
:10122000130124010EA51FA502C00F5F1F4FF80177
:10123000F490FF2019F0F5E2FF16B9F7B8018EA57A
:101240009FA5681B790B11F00E94B808FF2009F4D4
:1012500042C20F5F1F4F1FA70EA71982AC81BD812D
:101260001BAA1AAA9FEF99ABEEA5FFA5CF01019685
:101270009FA78EA7B49095E7B91621F08B2D8062B9
:10128000883789F4EBA9E0FF07C02D903D904D9081
:101290005C901397149607C08D919C9111971C0137
:1012A000442455241296F0E2BF1621F48981882344
:1012B000D9F685C083E2B81609F483C09AE2B9165C
:1012C00021F0EDE2BE1669F408C0FD011296E0813E
:1012D000EAABE7FFC9CFE195EAABFBA9F061FF7D7F
:1012E00072C08BE2B81609F46AC09EE2B916B1F575
:1012F0002EA53FA52F5F3F4FEEA5FFA584918A3213
:1013000021F0B82E20E030E01BC0FD011296408194
:10131000518157FF02C04FEF5FEF49AB3FA72EA7A8
:10132000A3CFC90103E0880F991F0A95E1F7220FA7
:10133000331F280F391F2B0D311D20533040B4901F
:1013400031968B2D80538A3060F3FFA7EEA7A90159
:1013500037FF02C04FEF5FEF49AB8DCFF0E3BF1611
:1013600031F48BA984FD80CF80628BAB7DCF8B2D38
:1013700081538930E8F420E030E0C901F3E0880FC0
:10138000991FFA95E1F7220F331F280F391F2B0DF4
:10139000311D20533040EEA5FFA5CF0101969FA738
:1013A0008EA7B4908B2D80538A3038F32AAB63CF4D
:1013B00098E6B91651F4EBA9E460EBAB55CFB982CE
:1013C00053CFFBA9F860FBAB4FCF8CE6B81621F4E6
:1013D0009BA991609BAB48CFBD83AC83E3E6BE166F
:1013E00039F41296BD83AC8312978C918E8318C109
:1013F000F4E4BF1639F084E6B81639F099E6B91668
:1014000059F503C0EBA9E160EBABFBA9F0FF08C005
:101410001496BD83AC835E904E903E902E900AC091
:101420001296BD83AC839E918E911C01442437FC9F
:101430004094542C57FC03C08AE088AB92C050946F
:10144000409430942094211C311C411C511C8DE28D
:1014500089839AE098AB85C0EFE4BE1629F0FFE6D9
:10146000BF1639F488E061C09BA991609BABE8E0AE
:1014700056C0F0E7BF1671F41296BD83AC839E91FF
:101480008E911C01442455248BA980648BAB78E792
:10149000B72E5EC0E3E7BE16D9F51296BD83AC83C6
:1014A000DE90CE90C114D10489F488E28E838EE65A
:1014B0008F8385E788878CE689878A8789E28B878F
:1014C0001C8666E0C62ED12CCC0EDD1EF9A9F7FDD8
:1014D00013C04F2F552747FD509560E070E0C601BF
:1014E0000E94702D009711F419A90DC08C1919A92B
:1014F00081174CF4182F07C0F60101900020E9F77E
:1015000031971E2F1C1919824201310140E094C00D
:1015100085E5B81631F095E7B91649F4EAE0E8AB8D
:101520001FC0FBA9F160FBAB8AE088AB19C098E54E
:10153000B91621F0E8E7BE1609F06EC0FBA9F3FD6D
:1015400002C080E1F2CF211431044104510419F4A6
:1015500090E198AB05C0EBA9E064EBABF0E1F8AB30
:10156000198289A987FD03C09BA99F7D9BAB21148C
:1015700031044104510461F4E9A9EE2349F46624DD
:10158000772443015EE2C52ED12CCC0EDD1E3EC079
:101590004EE2C42ED12CCC0EDD1EF8A9EF2EFF2476
:1015A00000271127C201B101A80197010E94FA2F5B
:1015B0006A3020F430E3A32EA60E08C027E5A22E41
:1015C000A60E88E5B81611F49FEDA922F601A292A5
:1015D0006F01C201B101A80197010E94FA2F3901E0
:1015E0004A012E143F044006510618F019012A0141
:1015F000D9CFF8A9F83051F48BA983FF07C090E345
:10160000A91621F080E3F60182936F01CE018C19B7
:10161000182F125D49A910C0BB2009F45CC0BE821E
:1016200019824201310100E096E0C92ED12CCC0E86
:10163000DD1E11E021E005C0212F042F011B07FD55
:1016400000E08981882319F0812F8F5F07C09BA953
:1016500096FD02C0812F02C0822F8E5FA82EA00EA1
:10166000EBA9EE2EFF2480E3482E512C4E205F2064
:101670004114510421F48AA98A190E94AD08898174
:10168000882329F061E070E0CE01019609C0E6FEF2
:1016900009C080E38A83BB8262E070E0CE010296DB
:1016A0000E94CE08F0E24F16510421F48AA98A194B
:1016B0000E94A208802F0E94A208612F772767FD51
:1016C0007095C6010E94CE08E4FEAACD8AA98A19A7
:1016D0000E94AD08A5CDE3960FB6F894DEBF0FBE0D
:1016E000CDBFDF91CF911F910F91FF90EF90DF90D1
:1016F000CF90BF90AF909F908F907F906F905F90B2
:101700004F903F902F9008951F920F920FB60F9217
:1017100011242F933F935F936F937F938F939F93A6
:10172000AF93BF938091AB0181508093AB018F3F0A
:1017300001F589E08093AB01809103018F5F817097
:1017400080930301882319F481E08093A4018091A0
:10175000A2019091A30101969093A3018093A2010D
:101760008091D201882329F08091D2018150809309
:10177000D2018091A7019091A801029758F0809121
:10178000A7019091A80101979093A8018093A701C8
:101790005A9A01C05A988091C30583FF3BC0349B7D
:1017A0000AC08091A5019091A60101969093A6018F
:1017B0008093A5012FC08091A5019091A601892B4E
:1017C00079F08091A5019091A601805A9F4040F444
:1017D0008091A5019091A60190931E0280931D0215
:1017E00080911D0290911E0220911F0230912002D3
:1017F000821B930B845E9D4F68E671E00E94E72F89
:10180000845B904090932202809321021092A60163
:101810001092A501BF91AF919F918F917F916F9190
:101820005F913F912F910F900FBE0F901F901895D1
:101830002091A2013091A3012F5F3F4F820F931F90
:1018400008952091A2013091A301821B930B892F4F
:10185000992786958074992708951F920F920FB645
:101860000F921124EF92FF920F931F932F933F93A8
:101870004F935F936F937F938F939F93AF93BF9398
:10188000CF93DF93EF93FF93809102018150809378
:1018900002018F3F09F073C083E88093B00080910C
:1018A0008901C82FDD27D093AA01C093A901809197
:1018B000E105E090DD0580FF1EC06091ED017091B3
:1018C000EE018091EF019091F001FF240027112794
:1018D00020E830E040E050E00E941C30C801B70131
:1018E0000E94B42F20E032E040E050E00E941C3023
:1018F000C20FD31F1DC06091ED017091EE01809168
:10190000EF019091F001FF240027112720E830E03B
:1019100040E050E00E941C30C801B7010E94B42F83
:1019200020E032E040E050E00E941C30C21BD30BAC
:10193000D093AA01C093A9012091A9013091AA01D5
:101940008091DE0599272817390734F08091DF054B
:1019500099278217930724F49093AA018093A901F1
:101960008091A9019091AA0190934D0580934C0517
:101970008093B3008091E0058093020104C083E06E
:101980008093B0005F98FF91EF91DF91CF91BF916D
:10199000AF919F918F917F916F915F914F913F9107
:1019A0002F911F910F91FF90EF900F900FBE0F900E
:1019B0001F9018958091A2019091A3010B9690938E
:1019C000AD018093AC0182E085BD83EA84BD17BC84
:1019D00088E788BD96E096BD83EC8093B000909335
:1019E000B100E0E7F0E0808182608083EEE6F0E025
:1019F0008081816080838AE08093B3001092B2007E
:101A000008952091A2013091A3012F5F3F4F280F2D
:101A1000391F8091A2019091A301A901481B590B84
:101A200057FFF7CF089510927C008FEE80937A00D5
:101A300008951F920F920FB60F921124EF92FF920A
:101A40000F931F932F933F934F935F936F937F93C6
:101A50008F939F93AF93BF93CF93DF93EF93FF93B6
:101A600010927A004091C4014F5F4093C4014150ED
:101A7000433009F41CC1443038F4413009F463C0E8
:101A8000423008F0B9C00DC0453009F450C14530AE
:101A900008F42AC1463009F46FC1473009F0CBC2BF
:101AA00052C22091D7013091D80180917800909155
:101AB0007900281B390B8091B2019091B301820FFC
:101AC000931F9093B3018093B2018091BC018F5F0B
:101AD0008093BC018091110290911202A091130297
:101AE000B0911402442737FD4095542F820F931F65
:101AF000A41FB51F8093110290931202A0931302AA
:101B0000B09314028091150290911602A0911702D1
:101B1000B0911802820F931FA41FB51F8093150266
:101B200090931602A0931702B093180281E080935D
:101B3000C5018091C2019091C30101969093C301A8
:101B40008093C2017CC2609178007091790080918D
:101B5000D5019091D601681B790B80910902909173
:101B60000A02A0910B02B0910C029B01442737FDA1
:101B70004095542F820F931FA41FB51F8093090215
:101B800090930A02A0930B02B0930C0280910D0275
:101B900090910E02A0910F02B0911002820F931F3C
:101BA000A41FB51F80930D0290930E02A0930F0205
:101BB000B093100280917800909179000A9710F408
:101BC00064E47DEF8091780090917900895E934084
:101BD00010F06CEB72E08091B0019091B101860F32
:101BE000971F9093B1018093B0018091BB018F5FEB
:101BF0008093BB0182E058C06091780070917900B9
:101C00008091D3019091D401681B790B80910102DE
:101C100090910202A0910302B09104029B0144271B
:101C200037FD4095542F820F931FA41FB51F80933B
:101C3000010290930202A0930302B09304028091E8
:101C4000050290910602A0910702B0910802820F4E
:101C5000931FA41FB51F8093050290930602A093C3
:101C60000702B093080280917800909179000A975A
:101C700010F464E47DEF8091780090917900895EA2
:101C8000934010F06CEB72E08091AE019091AF0147
:101C9000860F971F9093AF018093AE018091BA0198
:101CA0008F5F8093BA0184E08093C501C8C14091E1
:101CB00004015091050180917800909179009A017A
:101CC000220F331F240F351F63E070E00E94D32FD3
:101CD000260F371F369527953695279530930501A2
:101CE0002093040186E0E0CF8091DB019091DC013C
:101CF0002091780030917900821B930B90937605A8
:101D0000809375058091B4019091B501209175057E
:101D100030917605820F931F9093B5018093B401A3
:101D20008091BE018F5F8093BE0187E0BDCF80911F
:101D30007800909179002091D9013091DA01821BCD
:101D4000930B90937605809375058091B6019091E1
:101D5000B7012091750530917605820F931F9093FE
:101D6000B7018093B6018091BD018F5F8093BD0163
:101D70004093C50186E0E4C06091780070917900DD
:101D8000E090E701F090E8010091E9011091EA018B
:101D9000882777FD8095982F0E94292EA80197010A
:101DA0000E947D2D0E940C2E7093B9016093B801A2
:101DB0002091B8013091B901E0917505F091760557
:101DC000809180059091810597FF03C09095819542
:101DD0009F4F64E070E00E94E72FEB01CF01F7FF17
:101DE00003C0909581959F4F64E070E00E94E72FBB
:101DF000260F371F2C0F3D1F3093B9012093B801D8
:101E00008091B8019091B901029704F16091E701C6
:101E10007091E8018091E9019091EA0120E030E0C1
:101E200048E454E40E945F2E88230CF03CC060918B
:101E3000E7017091E8018091E9019091EA012AE0BF
:101E400037ED43EA5CE30E947E2D25C08091B80106
:101E50009091B9018F5F9F4F34F56091E7017091C8
:101E6000E8018091E9019091EA0120E030E046E14B
:101E700054E40E94622E1816B4F46091E701709148
:101E8000E8018091E9019091EA012AE037ED43EA07
:101E90005CE30E947D2D6093E7017093E8018093DD
:101EA000E9019093EA0181E08093BF01809178007D
:101EB000909179009093780580937705209119028D
:101EC00030911A0240911B0250911C028091B8017E
:101ED0009091B901AA2797FDA095BA2F280F391F15
:101EE0004A1F5B1F2093190230931A0240931B0272
:101EF00050931C02E0901902F0901A0200911B020C
:101F000010911C026091190270911A0280911B02BB
:101F100090911C0220E034E040E050E00E941C3030
:101F2000E21AF30A040B150BE0921902F0921A025E
:101F300000931B0210931C0283E08093C50187E08D
:101F40008093C4017CC08091850590918605209185
:101F5000780030917900820F931F909386058093CB
:101F6000850580917D058F5F80937D0580917D053E
:101F7000853008F460C0809178009091790090934A
:101F80000B0180930A0110927D0580917905909153
:101F90007A052091850530918605821B930B20914F
:101FA000350230913602821B930B9093C1018093CE
:101FB000C0016091850570918605E0900601F09062
:101FC00007010091080110910901882777FD80958C
:101FD000982FA8019701220F331F441F551F2E0D64
:101FE0003F1D401F511F620F731F841F951F24E068
:101FF00030E040E050E00E941C3020930601309316
:10200000070140930801509309012091790530910F
:102010007A058091060190910701A0910801B09185
:102020000901281B390B3093360220933502109298
:102030008605109285051092C5011092C401809109
:10204000C50180937C008FEE80937A00FF91EF9121
:10205000DF91CF91BF91AF919F918F917F916F91C0
:102060005F914F913F912F911F910F91FF90EF90B2
:102070000F900FBE0F901F901895CF93DF93C0E085
:10208000D0E0C7BD82E390E00E94010D81E691E0BF
:102090009F938F931F920E94E20880910A01909172
:1020A0000B010F900F900F908458934020F02196D1
:1020B000CA3FD10531F7C093820588EC90E00E94B9
:1020C000010DDF91CF910895E6E1F1E080E2819387
:1020D00091E0E636F907D9F70895FF920F931F9321
:1020E0008091C901282F3327C90181709070682F12
:1020F000882391F08091CA01882311F0815002C099
:10210000809166018093CA01E6E1F1E080E281936B
:1021100091E0E636F907D9F7A9014270507021FF26
:102120000DC08091CA018F5F8093CA01E6E1F1E0A2
:1021300080E2819391E0E636F907D9F7662321F032
:10214000452B11F01092CA0181E18093C801809162
:10215000CA0199279F938F9382ED93E09F938F936A
:10216000E1E0FE2EFF920E94E2080091CA010F906A
:102170000F900F900F900F90053009F4D7C10630E3
:1021800090F4023009F4B8C0033030F40023F1F0C9
:10219000013009F05BC34DC0033009F402C10430C3
:1021A00009F054C34BC1083009F498C2093038F41F
:1021B000063009F411C2073009F048C36CC2093077
:1021C00009F4C9C20A3009F041C303C31092C8011F
:1021D00080EC93E09F938F93FF920E94E20884E14A
:1021E0008093C8018CE390E09F938F931F921F927E
:1021F00089EB93E09F938F93FF920E94E20888E21D
:102200008093C8010E940B0299279F938F938CEAB9
:1022100093E09F938F93FF920E94E2088CE3809358
:10222000C8018CE993E09F938F93FF920E94E2088C
:102230008EC28091C30580FF47C01092C801809173
:102240003502909136029F938F938DE893E09F9390
:102250008F930F930E94E20884E18093C8018091DC
:102260003702909138029F938F938EE793E09F936C
:102270008F930F930E94E20888E28093C8018091B7
:102280000A0190910B019F938F938FE693E09F93A8
:102290008F930F930E94E2088CE38093C801809192
:1022A000820599279F938F9380E693E09F938F9366
:1022B0000F930E94E2088DB79EB744960FB6F8942C
:1022C0009EBF0FBE8DBFC7C284E18093C80189E560
:1022D00093E09F938F930F930E94E20888E280938C
:1022E000C8018BE493E09F938F930F930E94E208C1
:1022F0008DB79EB70696E2CF1092C80181E493E0B5
:102300009F938F93FF920E94E20884E18093C8011B
:102310006091ED017091EE018091EF019091F001DB
:1023200020E034E040E050E00E941C305F934F9387
:102330003F932F9382E393E09F938F93FF920E94AA
:10234000E20888E28093C8016091F5017091F6017E
:102350008091F7019091F80120E034E040E050E0F6
:102360000E941C305F934F933F932F9383E293E03F
:102370009F938F93FF920E94E2088CE38093C801A1
:1023800080911D0290911E029F938F9384E193E0B0
:102390009F938F93FF920E94E2088DB79EB7469657
:1023A0008DCF1092C8018091930590919405209152
:1023B0009105309192059F938F933F932F9384E0E3
:1023C00093E09F938F93FF920E94E20884E18093B1
:1023D000C8018091970590919805209195053091BD
:1023E00096059F938F933F932F9384EF92E09F9353
:1023F0008F93FF920E94E20888E28093C801809147
:102400009B0590919C052091990530919A059F9389
:102410008F933F932F9384EE92E09F938F93FF923D
:102420000E94E2088CE38093C80180919D05909101
:102430009E059F938F9384ED92E06FC01092C80128
:10244000E091BC05FF27EE0FFF1FE157FA4F2081F7
:102450003181E091BB05FF27EE0FFF1FE157FA4FD7
:10246000808191813F932F939F938F9384EC92E08F
:102470009F938F93FF920E94E20884E18093C801AA
:10248000E091BE05FF27EE0FFF1FE157FA4F2081B5
:102490003181E091BD05FF27EE0FFF1FE157FA4F95
:1024A000808191813F932F939F938F9384EB92E050
:1024B0009F938F93FF920E94E20888E28093C80165
:1024C000E091C005FF27EE0FFF1FE157FA4F208173
:1024D0003181E091BF05FF27EE0FFF1FE157FA4F53
:1024E000808191813F932F939F938F9384EA92E011
:1024F0009F938F93FF920E94E2088CE38093C80120
:10250000E091C105FF27EE0FFF1FE157FA4F8081D1
:1025100091819F938F9384E992E09F938F93FF9291
:102520000E94E2088DB79EB74A96C8CE1092C801A5
:1025300086E892E09F938F93FF920E94E20884E1E5
:102540008093C8012091D3013091D4018091AE01D4
:102550009091AF016091BA013F932F9377270E942A
:10256000E72F7F936F9387E792E09F938F93FF927C
:102570000E94E20888E28093C8012091D501309141
:10258000D6018091B0019091B1016091BB013F9360
:102590002F9377270E94E72F7F936F9388E692E02F
:1025A0009F938F93FF920E94E2088CE38093C8016F
:1025B0002091D7013091D8018091B2019091B3015F
:1025C0006091BC013F932F9377270E94E72F7F9361
:1025D0006F9389E592E056C01092C8018CE492E0B6
:1025E0009F938F93FF920E94E20884E18093C80139
:1025F0002091D9013091DA018091B6019091B70113
:102600006091BD013F932F9377270E94E72F7F931F
:102610006F938DE392E09F938F93FF920E94E20865
:1026200088E28093C8012091DB013091DC01809128
:10263000B4019091B5016091BE013F932F9377272C
:102640000E94E72F7F936F938EE292E09F938F9388
:10265000FF920E94E2088CE38093C8016091E70139
:102660007091E8018091E9019091EA01009177056C
:10267000109178050E940C2E7F936F931F930F93F8
:102680008FE192E09F938F93FF920E94E2088DB7B3
:102690009EB7489613CE84E18093C80180910401CF
:1026A000909105019F938F9380E192E09F938F9388
:1026B000FF920E94E20888E28093C80180912D0277
:1026C00099279F938F9381E092E09F938F93FF923E
:1026D0000E94E2088DB79EB70A96F0CD1092C8010D
:1026E00082EF91E09F938F93FF920E94E20884E132
:1026F0008093C80180912102909122029F938F9331
:1027000083EE91E09F938F93FF920E94E20888E20C
:102710008093C80180911D0290911E029F938F9318
:1027200084ED91E09F938F93FF920E94E2088CE3E7
:102730008093C80180911F02909120029F938F93F4
:1027400085EC91E09F938F93FF920E94E2088DB7F2
:102750009EB74296B3CD1092C80180912502909108
:1027600026029F938F9389EB91E09F938F93FF9223
:102770000E94E20884E18093C80180912702909131
:1027800028029F938F938DEA91E09F938F93FF92FE
:102790000E94E20888E28093C8018091290290910A
:1027A0002A029F938F9381EA91E09F938F93FF92E8
:1027B0000E94E2088CE38093C80180912B029091E3
:1027C0002C029F938F9385E991E09F938F93FF92C3
:1027D00070CD1092C8018DE891E09F938F93FF9286
:1027E0000E94E20884E18093C801809189019927C1
:1027F0009F938F938FE791E09F938F93FF920E9417
:10280000E20888E28093C8018091A9019091AA0111
:102810009F938F9381E791E09F938F93FF920E9404
:10282000E2088CE38093C8018091DF0599279F938C
:102830008F938091DE0599279F938F9383E691E094
:102840009F938F93FF920E94E20835CD0150009331
:1028500066011092CA011092C9011F910F91FF9059
:1028600008951092B9008AE28093B800089585EA2D
:102870008093BC0080E090E0089584E98093BC00E0
:1028800008951092B9008093BB0085E88093BC0046
:1028900080E090E008951F920F920FB60F921124DE
:1028A0008F939F93EF93FF938091CB018F5F8093E2
:1028B000CB018150833009F442C0843028F4813048
:1028C000A1F0823070F50CC0853009F448C0853025
:1028D000D8F1863009F44BC0873009F071C05BC075
:1028E0008091CC01880F8E5A14C08091CC018F5FEB
:1028F0008093CC018150813009F444C0813038F09C
:10290000823009F442C0833009F05AC041C080913E
:10291000C4021092B9008093BB0085E88093BC008C
:102920004FC084E98093BC008091CC01843018F4BE
:102930001092CB0102C01092CC0185EAEFCF8091BA
:10294000CD01880F8D5AE5CF8091CD018130D1F036
:102950008130E8F28230C9F0833091F519C080915E
:10296000BB00E091CD01FF27E957FA4F80838091AA
:10297000CD01813039F0813050F2823031F0833036
:10298000F9F406C08091C502C4CF8091D602C1CFB0
:102990008091EC02BECF8091CD019091BB00E82FD9
:1029A000FF27E957FA4F94838F5F8093CD018430DE
:1029B00010F01092CD0184E98093BC001092CB01FD
:1029C000FF91EF919F918F910F900FBE0F901F90ED
:1029D000189583EC80938100EFE6F0E080818062BF
:1029E00080831092D8011092D7011092D6011092D4
:1029F000D5011092D4011092D30108951F920F9225
:102A00000FB60F9211240F931F932F933F934F9361
:102A10005F936F937F938F939F93AF93BF93CF9366
:102A2000DF93EF93FF932091860030918700809190
:102A3000D0019091D101281B390B80918600909193
:102A400087009093D1018093D001C9018D5D95409D
:102A50008356994148F481E090E09093CF018093B0
:102A6000CE011092670154C0C091CE01D091CF0128
:102A7000CA30D1050CF04CC0C9018B5F9040845B1B
:102A8000914008F040C0A901425D5140FE01EE0FA7
:102A9000FF1FE157FA4F80819181FA01E81BF90B82
:102AA000CF01F7FF03C0909581959F4F06974CF497
:102AB00080912D02883C28F480912D02865F8093BE
:102AC0002D02FE01EE0FFF1F8F0101571A4FD80193
:102AD0002D913C91C901880F991F820F931F840F7C
:102AE000951F64E070E00E94E72FD8018D919C91C2
:102AF00011979B01281B390BEB55FA4F318320832B
:102B000011967C936E932196D093CF01C093CE0102
:102B1000FF91EF91DF91CF91BF91AF919F918F91F5
:102B20007F916F915F914F913F912F911F910F91E5
:102B30000F900FBE0F901F901895AF92BF92CF923B
:102B4000DF92EF92FF920F931F9310927A00809181
:102B5000BA01882369F08091AE019091AF01609134
:102B6000BA0177270E94E72F7093F8056093F70565
:102B70008091BB01882369F08091B0019091B101EF
:102B80006091BB0177270E94E72F7093F605609351
:102B9000F5058091BC01882369F08091B201909184
:102BA000B3016091BC0177270E94E72F7093040660
:102BB000609303068091BD018823D9F1E09000065F
:102BC000F09001066091B6017091B7012091BD01AE
:102BD0000027F7FC0095102F5701680143E0AA0C6D
:102BE000BB1CCC1CDD1C4A95D1F7AE18BF08C00A2F
:102BF000D10A882777FD8095982F34E0660F771FDC
:102C0000881F991F3A95D1F73327442755270E94EB
:102C10001C30A20EB31EC41ED51EC601B50128E08D
:102C200030E040E050E00E941C30309301062093D9
:102C300000068091BE018823D9F1E0900906F0904A
:102C40000A066091B4017091B5012091BE01002780
:102C5000F7FC0095102F5701680183E0AA0CBB1CFC
:102C6000CC1CDD1C8A95D1F7AE18BF08C00AD10A6A
:102C7000882777FD8095982FB4E0660F771F881F0F
:102C8000991FBA95D1F73327442755270E941C3046
:102C9000A20EB31EC41ED51EC601B50128E030E049
:102CA00040E050E00E941C3030930A062093090651
:102CB0008091BF018823A1F1E090FA05F090FB0517
:102CC0006091B8017091B9012091BF010027F7FC14
:102CD0000095102F57016801A3E0AA0CBB1CCC1C67
:102CE000DD1CAA95D1F7AE18BF08C00AD10A882703
:102CF00077FD8095982F3327442755270E941C3055
:102D0000A20EB31EC41ED51EC601B50128E030E0D8
:102D100040E050E00E941C303093FB052093FA0500
:102D20001092AF011092AE011092BA011092B1014F
:102D30001092B0011092BB011092B3011092B20137
:102D40001092BC011092B5011092B4011092BE0114
:102D50001092B7011092B6011092BD011092B90104
:102D60001092B8011092BF0180911102909112024D
:102D7000A0911302B09114028093FD019093FE0183
:102D8000A093FF01B0930002809101029091020292
:102D9000A0910302B09104028093ED019093EE01A3
:102DA000A093EF01B093F0018091090290910A0283
:102DB000A0910B02B0910C028093F5019093F60163
:102DC000A093F701B093F80180910502909106025B
:102DD000A0910702B09108028093F1019093F20153
:102DE000A093F301B093F40180910D0290910E0233
:102DF000A0910F02B09110028093F9019093FA0113
:102E0000A093FB01B093FC018FEE80937A00809138
:102E1000F7059091F805893C91057CF02091F70524
:102E20003091F8058091F7059091F805880F991F6A
:102E3000880F991F2052334015C08091F70590915B
:102E4000F80588539F4FA4F42091F7053091F805B9
:102E50008091F7059091F805880F991F880F991FA9
:102E6000205E3C4F820F931F9093F8058093F705E7
:102E70008091F5059091F605893C91057CF02091B3
:102E8000F5053091F6058091F5059091F605880FCE
:102E9000991F880F991F2052334015C08091F50566
:102EA0009091F60588539F4FA4F42091F505309139
:102EB000F6058091F5059091F605880F991F880F0A
:102EC000991F205E3C4F820F931F9093F6058093CD
:102ED000F50520912502309126028091BF05E82F4B
:102EE000FF27EE0FFF1FE157FA4F80819181825932
:102EF0009F4F281739071CF42F5F3F4F0CC080816C
:102F0000918182599F4F821793074CF42115310507
:102F100031F0215030403093260220932502209139
:102F20002702309128028091C005E82FFF27EE0F7D
:102F3000FF1FE157FA4F8081918182599F4F2817D7
:102F400039071CF42F5F3F4F0CC08081918182595B
:102F50009F4F821793074CF42115310531F0215012
:102F6000304030932802209327022091290230918B
:102F70002A028091C105E82FFF27EE0FFF1FE157BE
:102F8000FA4F8081918182599F4F281739071CF48D
:102F90002F5F3F4F0CC08081918182599F4F8217D4
:102FA00093074CF42115310531F021503040309316
:102FB0002A022093290220912B0230912C02809129
:102FC000C205E82FFF27EE0FFF1FE157FA4F808160
:102FD000918182599F4F281739071CF42F5F3F4F6B
:102FE0000CC08081918182599F4F821793074CF4C6
:102FF0002115310531F02150304030932C022093BF
:103000002B02809125029091260297FF05C0109215
:103010002602109225020AC08F3F910539F034F044
:103020008FEF90E0909326028093250280912702F3
:103030009091280297FF05C0109228021092270253
:103040000AC08F3F910539F034F08FEF90E09093F4
:103050002802809327028091290290912A0297FFEB
:1030600005C010922A02109229020AC08F3F9105D2
:1030700039F034F08FEF90E090932A028093290288
:1030800080912B0290912C0297FF05C010922C0288
:1030900010922B020AC08F3F910539F034F08FEF68
:1030A00090E090932C0280932B021F910F91FF9040
:1030B000EF90DF90CF90BF90AF90089510927A007C
:1030C0008091BA01882369F08091AE019091AF019F
:1030D0006091BA0177270E94E72F7093F8056093FB
:1030E000F7058091BB01882369F08091B001909130
:1030F000B1016091BB0177270E94E72F7093F6051D
:103100006093F5058091BC01882369F08091B2013C
:103110009091B3016091BC0177270E94E72F7093D3
:103120000406609303068091BD018823D1F060916D
:10313000B6017091B7012091BD01882777FD809578
:10314000982F34E0660F771F881F991F3A95D1F7A3
:103150003327442755270E941C30309301062093C3
:1031600000068091BE018823D1F06091B401709176
:10317000B5012091BE01882777FD8095982FB4E096
:10318000660F771F881F991FBA95D1F733274427F9
:1031900055270E941C3030930A062093090680911F
:1031A000BF01882399F06091B8017091B901209115
:1031B000BF01882777FD8095982F3327442755270F
:1031C0000E941C303093FB052093FA051092AF014A
:1031D0001092AE011092BA011092B1011092B0019A
:1031E0001092BB011092B3011092B2011092BC0177
:1031F0001092B5011092B4011092BE011092B70165
:103200001092B6011092BD011092B9011092B8014E
:103210001092BF018FEE80937A00209125023091A9
:1032200026028091BF05E82FFF27EE0FFF1FE15711
:10323000FA4F8081918182599F4F281739071CF4DA
:103240002F5F3F4F0CC08081918182599F4F821721
:1032500093074CF42115310531F021503040309363
:103260002602209325022091270230912802809186
:10327000C005E82FFF27EE0FFF1FE157FA4F8081AF
:10328000918182599F4F281739071CF42F5F3F4FB8
:103290000CC08081918182599F4F821793074CF413
:1032A0002115310531F02150304030932802209310
:1032B00027022091290230912A028091C105E82F2E
:1032C000FF27EE0FFF1FE157FA4F8081918182594E
:1032D0009F4F281739071CF42F5F3F4F0CC0808188
:1032E000918182599F4F821793074CF42115310524
:1032F00031F02150304030932A022093290220914E
:103300002B0230912C028091C205E82FFF27EE0F8F
:10331000FF1FE157FA4F8081918182599F4F2817F3
:1033200039071CF42F5F3F4F0CC080819181825977
:103330009F4F821793074CF42115310531F021502E
:10334000304030932C0220932B02809125029091E3
:10335000260297FF05C010922602109225020AC08D
:103360008F3F910539F034F08FEF90E09093260273
:1033700080932502809127029091280297FF05C033
:1033800010922802109227020AC08F3F910539F04F
:1033900034F08FEF90E09093280280932702809181
:1033A000290290912A0297FF05C010922A021092DA
:1033B00029020AC08F3F910539F034F08FEF90E079
:1033C00090932A028093290280912B0290912C02E3
:1033D00097FF05C010922C0210922B0208958F3F88
:1033E000910539F034F08FEF90E090932C028093A8
:1033F0002B0208951F938091C6058B3F98F08B3F59
:1034000019F4809125020EC08C3F19F48091270297
:1034100009C08D3F19F48091290204C08E3F21F428
:1034200080912B028093810180918101882319F47E
:103430001092810104C08F3F11F48093810180912B
:10344000C5058B3F98F08B3F19F4809125020EC083
:103450008C3F19F48091270209C08D3F19F48091A7
:10346000290204C08E3F21F480912B0280938001B9
:1034700080918001882319F41092800105C0843660
:1034800018F084E6809380018091C7058B3F98F007
:103490008B3F19F4809125020EC08C3F19F4809166
:1034A000270209C08D3F19F48091290204C08E3F84
:1034B00021F480912B0280938201809182018823E4
:1034C00019F41092820105C0843618F084E68093C6
:1034D00082018091C9058B3F98F08B3F19F4809150
:1034E00025020EC08C3F19F48091270209C08D3F40
:1034F00019F48091290204C08E3F21F480912B029F
:103500008093830180918301882319F410928301B1
:1035100004C08F3F11F4809383018091D0058B3FCD
:1035200098F08B3F19F4809125020EC08C3F19F45E
:103530008091270209C08D3F19F48091290204C0AF
:103540008E3F21F480912B0280938401809184012D
:10355000882319F41092840104C08F3F11F48093E2
:1035600084018091D1058B3F98F08B3F19F48091B5
:1035700025020EC08C3F19F48091270209C08D3FAF
:1035800019F48091290204C08E3F21F480912B020E
:1035900080938501809185018B3010F48AE002C010
:1035A0008F3F11F4809385018091D2058B3F98F075
:1035B0008B3F19F4809125020EC08C3F19F4809145
:1035C000270209C08D3F19F48091290204C08E3F63
:1035D00021F480912B0280938601809186018823BB
:1035E00019F41092860104C08F3F11F48093860174
:1035F0008091D7058B3F98F08B3F19F4809125027D
:103600000EC08C3F19F48091270209C08D3F19F438
:103610008091290204C08E3F21F480912B02809377
:10362000880180918801882319F41092880104C0D0
:103630008F3F11F4809388018091D8058B3F98F0DB
:103640008B3F19F4809125020EC08C3F19F48091B4
:10365000270209C08D3F19F48091290204C08E3FD2
:1036600021F480912B0280933902809139028823C2
:1036700019F41092390204C08F3F11F4809339027B
:103680008091D9058B3F98F08B3F19F480912502EA
:103690000EC08C3F19F48091270209C08D3F19F4A8
:1036A0008091290204C08E3F21F480912B028093E7
:1036B0003A0280913A02882319F410923A0204C027
:1036C0008F3F11F480933A028091DA058B3F98F096
:1036D0008B3F19F4809125020EC08C3F19F4809124
:1036E000270209C08D3F19F48091290204C08E3F42
:1036F00021F480912B0280933B0280913B0288232E
:1037000019F410923B0204C08F3F11F480933B02E6
:103710008091DB058B3F98F08B3F19F48091250257
:103720000EC08C3F19F48091270209C08D3F19F417
:103730008091290204C08E3F21F480912B02809356
:103740003C0280913C02882319F410923C0204C090
:103750008F3F11F480933C029091DC059B3FB0F0C9
:103760009B3F19F48091250204C09C3F29F480916D
:103770002702809389010CC09D3F19F48091290292
:10378000F8CF9E3F29F480912B02F3CF90938901CB
:1037900080918901882319F41092890104C08F3F18
:1037A00011F4809389019B3FB0F09B3F19F4809105
:1037B000250204C09C3F29F480912702809389014F
:1037C0000CC09D3F19F480912902F8CF9E3F29F447
:1037D00080912B02F3CF90938901809189018823F6
:1037E00019F41092890104C08F3F11F4809389016C
:1037F0009B3FB0F09B3F19F48091250204C09C3F91
:1038000029F480912702809389010CC09D3F19F40F
:1038100080912902F8CF9E3F29F480912B02F3CFAB
:103820009093890180918901882319F4109289016C
:1038300004C08F3F11F48093890110918801612F9A
:10384000772767FD7095872F972F0E94292E17FFE6
:1038500006C020E030E040E853E40E947E2D27E1DE
:1038600037EB41ED58E30E94502F60937C01709339
:103870007D0180937E0190937F018091CE0580939E
:1038800002068091CD058093F9051F91089581E08E
:103890008093BB0542E04093BC0583E08093BD0567
:1038A00024E02093BE0535E03093BF0586E0809389
:1038B000C00587E08093C1051092C3058EE1809317
:1038C000C4058BEF8093C6058AE08093C70592E319
:1038D0009093C5059093C9054093C8052093CA05E8
:1038E0001092CB0580E18093CC058FE08093CD05CD
:1038F0008AEF8093CE058AE18093CF0580E880939C
:10390000D0058FEA8093D1058093D2058AE5809314
:10391000D30583E28093D40584E18093D50510928A
:10392000D6053093D7051092D8051092D90510927C
:10393000DA051092DB0584E68093DC0588E280934B
:10394000DD051092E1059093DE0586E98093DF05A1
:103950003093E005A9EEB5E0E8E6F1E08CE00190F7
:103960000D928150E1F7089581E08093BB0552E00C
:103970005093BC0583E08093BD0544E04093BE05B1
:1039800035E03093BF0586E08093C00587E08093E3
:10399000C10528E02093C2051092C3059EE19093D3
:1039A000C4058BEF8093C6058AE08093C70586E443
:1039B0008093C5059093C9055093C8054093CA05E7
:1039C0002093CB0580E18093CC058FE08093CD05DB
:1039D0008AEF8093CE058AE18093CF0580E88093BB
:1039E000D00588E78093D10596E99093D2058AE5C2
:1039F0008093D30583E28093D40584E18093D50539
:103A00001092D6053093D7051092D8051092D9059B
:103A10001092DA051092DB0584E68093DC0588E2DB
:103A20008093DD051092E10582E38093DE0590939B
:103A3000DF053093E005A9EEB5E0E0E7F1E08CE0CA
:103A400001900D928150E1F708958091340288230E
:103A500001F51092C5021092C4021092D602109283
:103A6000EC0280919401882311F08093C40280912C
:103A70009501882311F08093C502809196018823D7
:103A800011F08093EC0280919701882311F08093CC
:103A9000D6028091C40299279093510580935005D6
:103AA0008091C50299279093530580935205809188
:103AB000EC02992790935505809354058091D60286
:103AC000992790935705809356051092CB01109239
:103AD000CC010E9437140895CF93DF931092DA013E
:103AE0001092D9011092DC011092DB0180E090E08D
:103AF000A0E0B0E08093E7019093E801A093E90192
:103B0000B093EA011092D4011092D3011092D60121
:103B10001092D5011092D8011092D7010E945E1820
:103B200085E090E00E94180CEC01CE010E94210C6F
:103B30008823D9F30E945E188091C30580FF10C0CE
:103B400080910A0190910B01875B934038F480913A
:103B50000A0190910B018E5E924010F40E943D107C
:103B60008091F7059091F80597FF03C09095819596
:103B70009F4F9093D4018093D3018091F50590914C
:103B8000F60597FF03C0909581959F4F9093D601BE
:103B90008093D501809103069091040697FF03C09E
:103BA000909581959F4F9093D8018093D7018091F4
:103BB000090690910A0697FF03C0909581959F4F43
:103BC00060E170E00E94E72F7093DC016093DB01FD
:103BD000809100069091010697FF03C09095819512
:103BE0009F4F60E170E00E94E72F7093DA016093CD
:103BF000D9016091770570917805882777FD8095C8
:103C0000982F0E94292E6093E7017093E80180931A
:103C1000E9019093EA0110920102109202021092BF
:103C200003021092040210920502109206021092F2
:103C30000702109208021092090210920A021092D2
:103C40000B0210920C0210920D0210920E021092B2
:103C50000F02109210021092110210921202109292
:103C60001302109214021092F8051092F7051092A8
:103C7000F6051092F5051092040610920306809145
:103C8000060190910701A0910801B091090190935C
:103C90007A05809379051092C1011092C0011092AB
:103CA000190210921A0210921B0210921C028091AB
:103CB0001D0290911E029093200280931F0282E3C6
:103CC00090E09093A8018093A701DF91CF91089590
:103CD0001F93182F0EC080913402882361F484E66C
:103CE00090E09093A8018093A7018AEF90E00E9452
:103CF000010D115080F71F9108952F923F924F921E
:103D00005F926F927F928F929F92AF92BF92CF926B
:103D1000DF92EF92FF920F931F93CF93DF93CDB774
:103D2000DEB724970FB6F894DEBF0FBECDBF0E945A
:103D30009D15299AE091BD05AE2FBB27AA0FBB1F89
:103D4000A157BA4F0D90BC91A02D9D0128583F4F0F
:103D50003A83298337FF02C01A82198280912D028B
:103D6000843608F04AC080910101882331F484EF41
:103D700091E09093A8018093A701809148029091CF
:103D80004902009731F001979093490280934802CD
:103D900004C01092340210922302289A80914302A8
:103DA00090914402815D974028F18091D405482F7D
:103DB00055275A83498381E080932302E091BB0514
:103DC000FF27EE0FFF1FE157FA4F11821082E0919B
:103DD000BC05FF27EE0FFF1FE157FA4F118210823B
:103DE000E091BE05FF27EE0FFF1FE157FA4F11824A
:103DF0001082CEC110923402CBC180912D028D3839
:103E000008F4C6C1109223028091D50522E3829F57
:103E1000C0011124909349028093480269817A81FC
:103E2000693271056CF080914302909144027FEFFA
:103E30008F3F970781F1019690934402809343024C
:103E40008091430290914402883C910520F0898141
:103E50009A81889704F510925E0210925F02109288
:103E600060021092610210925A0210925B0210924C
:103E70005C0210925D0210921102109212021092D6
:103E80001302109214021092150210921602109250
:103E9000170210921802E981FA81E93CF1050CF44D
:103EA000D6C080913402882309F072C1E091BE052A
:103EB000FF27EE0FFF1FE157FA4F808191818C346D
:103EC00091050CF4C1C0809147028F5F8093470237
:103ED000893C08F45DC129980E946C1D109234023F
:103EE0001092470210924402109243028091BB0547
:103EF000282F3327F901EE0FFF1FE157FA4F80817A
:103F00009181873491059CF4E091BC05FF27EE0F69
:103F1000FF1FE157FA4F0190F081E02DF7FF03C03A
:103F2000F095E195FF4FE734F1050CF46CC08091FA
:103F3000BC05682F7727DB01AA0FBB1FA157BA4F1B
:103F40008D919C911197873491053CF0F901EE0F0A
:103F5000FF1FE157FA4F808191818D919C918734A9
:103F6000910564F0F901EE0FFF1FE157FA4F8081D0
:103F700091818734910514F042E001C041E0FB01DA
:103F8000EE0FFF1FE157FA4F808191818634910532
:103F90005CF4F901EE0FFF1FE157FA4F8081918128
:103FA000873491050CF043E0FB01EE0FFF1FE15752
:103FB000FA4F808191818A5B9F4F5CF4F901EE0F8B
:103FC000FF1FE157FA4F80819181873491050CF0F2
:103FD00044E0660F771F61577A4FFB018081918122
:103FE0008A5B9F4F5CF4220F331F21573A4FF90130
:103FF00080819181863491050CF445E0A2E0B0E027
:10400000042E0E943F300E940B024AE36BEB75E0E6
:104010000E942A020E940B020E94681E8091C30522
:1040200080FFB6C080910A0190910B01875B93409D
:1040300040F480910A0190910B018E5E924008F04D
:10404000A7C00E943D10A4C010924702A1C04981A0
:104050005A81433251050CF09BC08091BE05482F18
:104060005527FA01EE0FFF1FE157FA4F808191812A
:10407000855B9F4F0CF06DC0809146028F5F8093EF
:104080004602893C08F467C088EC8093460281E0D0
:1040900090E0909344028093430281E08093340245
:1040A0001092560210925702109258021092590222
:1040B0001092110210921202109213021092140226
:1040C0001092150210921602109217021092180206
:1040D0001092010210920202109203021092040246
:1040E0001092090210920A0210920B0210920C0216
:1040F0008091ED019091EE01A091EF01B091F0015E
:104100008093050290930602A0930702B0930802E1
:104110008091F5019091F601A091F701B091F8011D
:1041200080930D0290930E02A0930F02B0931002A1
:1041300010925E0210925F02109260021092610271
:1041400010925A0210925B0210925C0210925D0271
:1041500002C010924602440F551F41575A4FFA01B0
:10416000808191818C3491058CF0809145028F5F24
:1041700080934502893C60F01092340288EC809371
:104180004502109244021092430202C0109245026E
:1041900080916701815080936701809167018F3F13
:1041A00029F080912302882309F412C10E94FA1990
:1041B000E091BB05FF27EE0FFF1FDF01A157BA4FAC
:1041C0008D919C916091CA057727EB55FA4F20811C
:1041D00031814091CB055527FC01E69FC001E79F47
:1041E000900DF69F900D1124F901E49F9001E59F39
:1041F000300DF49F300D1124820F931F90932F02E6
:1042000080932E02E091BC05FF27EE0FFF1FDF0118
:10421000A157BA4F8D919C91EB55FA4F2081318176
:10422000FC01E69FC001E79F900DF69F900D1124C1
:10423000B901649F9001659F300D749F300D11246A
:10424000820F931F9093310280933002E091BE055C
:10425000FF27EE0FFF1FE157FA4F80819181909564
:1042600081959F4F90933302809332021091850184
:10427000612F772767FD7095872F972F0E94292E32
:1042800017FF06C020E030E040E853E40E947E2D96
:1042900020E030E040E251E40E947E2D20E030E05A
:1042A00040E85BE30E94502F5B016C0160930506C0
:1042B0007093060680930706909308061091860176
:1042C000612F772767FD7095872F972F0E94292EE2
:1042D00017FF06C020E030E040E853E40E947E2D46
:1042E00020E030EE4BE257E40E94C62D6093FC05BF
:1042F0007093FD058093FE059093FF058091C305A3
:1043000082FF0CC080E090E0A0E0B0E08093FC056C
:104310009093FD05A093FE05B093FF0520E030E0EB
:1043200040E050E0C601B5010E945F2E882364F48E
:1043300080E090E0A0E0B0E0809305069093060650
:10434000A0930706B093080620E030E040E050E07C
:104350006091FC057091FD058091FE059091FF052F
:104360000E945F2E882364F480E090E0A0E0B0E03B
:104370008093FC059093FD05A093FE05B093FF0587
:1043800080912302882321F110923302109232028D
:1043900010922F0210922E021092310210923002CF
:1043A0008DEC9CECACECBDE3809305069093060687
:1043B000A0930706B09308068AE097EDA3EABBE353
:1043C0008093FC059093FD05A093FE05B093FF0537
:1043D0008091C2019091C3018D54914008F4BCC0FA
:1043E0002091F1013091F2014091F3015091F401DB
:1043F0008091ED019091EE01A091EF01B091F0015B
:10440000B901681B790B70934D0260934C022091A7
:10441000F9013091FA014091FB015091FC0180912A
:10442000F5019091F601A091F701B091F801281BD8
:10443000390B30934B0220934A021092C301109221
:10444000C201673A710534F08091D3019091D40193
:10445000019608C06A557F4F4CF48091D30190912A
:10446000D40101979093D4018093D301273A310569
:1044700034F08091D5019091D601019608C02A555B
:104480003F4F4CF48091D5019091D60101979093C4
:10449000D6018093D5018091150290911602A091CA
:1044A0001702B0911802873A9105A105B1054CF0A9
:1044B0008091D7019091D80101979093D801809372
:1044C000D7018091150290911602A0911702B09128
:1044D00018028A559F4FAF4FBF4F4CF48091D701C0
:1044E0009091D80101969093D8018093D7011092B2
:1044F0007A008091ED019091EE01A091EF01B091D1
:10450000F0018093050290930602A0930702B093F6
:1045100008028091F5019091F601A091F701B09108
:10452000F80180930D0290930E02A0930F02B093B6
:1045300010028091FD019091FE01A091FF01B091C8
:1045400000028093150290931602A0931702B09375
:1045500018028FEE80937A006091ED017091EE0168
:104560008091EF019091F001A090CF05BB24CC2465
:10457000DD24E0900006F0900106A60195010E945E
:104580001C300027F7FC0095102F2E193F09400B17
:10459000510BCA01B90120E130E040E050E00E9437
:1045A0001C3039014A012093520230935302409348
:1045B0005402509355026091F5017091F60180917B
:1045C000F7019091F801E0900906F0900A06A60123
:1045D00095010E941C300027F7FC0095102F2E1922
:1045E0003F09400B510BCA01B90120E130E040E026
:1045F00050E00E941C3020934E0230934F024093B3
:10460000500250935102F5EF6F16F1E07F06F0E093
:104610008F06F0E09F062CF084EF91E0A0E0B0E080
:104620000DC06CE066166EEF76066FEF86066FEFD4
:10463000960664F48CE09EEFAFEFBFEF80935202DA
:1046400090935302A0935402B0935502253F71E01A
:10465000370770E0470770E057072CF084EF91E0D0
:10466000A0E0B0E009C02C503E4F4F4F5F4F64F4C4
:104670008CE09EEFAFEFBFEF80934E0290934F021E
:10468000A0935002B093510210927A0080910102DF
:1046900090910202A0910302B09104022091520273
:1046A000309153024091540250915502821B930B5A
:1046B000A40BB50B8093010290930202A093030216
:1046C000B09304028091090290910A02A0910B021A
:1046D000B0910C0220914E0230914F024091500255
:1046E00050915102821B930BA40BB50B80930902CE
:1046F00090930A02A0930B02B0930C0280913202B5
:10470000909133025C01CC24B7FCC094DC2CA092C5
:104710005602B0925702C0925802D092590297FFA7
:1047200003C0909581959F4F84973CF08091C3057D
:1047300084FD03C081E080933F026090110270907D
:1047400012028090130290901402C501B7FE03C0BC
:10475000909581959F4F7C010027F7FC0095102FC5
:104760002091CC05332744275527C601B5010E9467
:10477000B42F9B01AC01C801B7010E94B42F20E007
:1047800031E040E050E00E941C30442737FD409566
:10479000542F621A730A840A950A60921102709269
:1047A0001202809213029092140280911102909151
:1047B0001202A0911302B091140281539547A040B8
:1047C000B04064F080E395E7A0E0B0E08093110290
:1047D00090931202A0931302B093140280911102DD
:1047E00090911202A0911302B0911402805D9A4838
:1047F000AF4FBF4F64F480ED9AE8AFEFBFEF809307
:10480000110290931202A0931302B09314028FEE40
:1048100080937A0080911D0290911E02892B09F4E9
:10482000A1C08091C30583FF9DC06091ED0170918F
:10483000EE018091EF019091F00120E032E040E044
:1048400050E00E941C30890137FF03C0109501958C
:104850001F4F6091F5017091F6018091F7019091E1
:10486000F80120E032E040E050E00E941C30B90145
:1048700037FF03C0709561957F4F601771070CF487
:10488000B80169317105A4F480913F02882381F059
:1048900080913D0290913E02892B51F480911D023E
:1048A00090911E029093200280931F0210923F026B
:1048B000209184013327629FC001639F900D729FF6
:1048C000900D112460E470E00E94E72FA901461BBF
:1048D000570B141615060CF03FC010927A00209169
:1048E0003D0230913E022115310561F50091110222
:1048F0001091120220911302309114028091210232
:1049000090912202BC01649FC001659F900D749F2D
:10491000900D112460E270E00E94E72F882777FD58
:104920008095982F060F171F281F391F009311021B
:104930001093120220931302309314028FEE80938F
:104940007A0010C08FEE80937A002150304030936F
:104950003E0220933D0206C084EF91E090933E0218
:1049600080933D028091390299279093E7028093CA
:10497000E60280913A0299279093E9028093E80237
:1049800080913B0299279093E3028093E202809109
:104990003C0299279093E5028093E40289E190E03C
:1049A0009093D3028093D2028091250290912602A7
:1049B0001816190614F40E94792980912502909105
:1049C0002602892B71F485E090E09093DD028093BC
:1049D000DC021092BF021092BE021092C10210922D
:1049E000C002809137058F5F809337058091400228
:1049F0008150809340028F3F09F078C081E380931B
:104A000040026091ED017091EE018091EF01909173
:104A1000F001E090CF05FF2400271127A80197019E
:104A20000E941C3030933905209338056091F501C0
:104A30007091F6018091F7019091F801A80197011A
:104A40000E941C3030933B0520933A05809100066C
:104A50009091010690933D0580933C058091090655
:104A600090910A0690933F0580933E05809103063E
:104A70009091040690934105809340058091350202
:104A800090913602909343058093420560911902FC
:104A900070911A0280911B0290911C0220E032E07A
:104AA00040E050E00E941C303093450520934405BF
:104AB00089819A81909347058093460580911D02D4
:104AC00090911E02909349058093480580911D02A4
:104AD00090911E0290934B0580934A0580911D0290
:104AE00090911E0290934D0580934C056091ED01CD
:104AF0007091EE018091EF019091F0012090FC0502
:104B00003090FD054090FE055090FF05E090F705C0
:104B1000F090F805609005067090060680900706F4
:104B2000909008060E94292EA20191010E94502F08
:104B30005B016C010027F7FC0095102FC801B7013D
:104B40000E94292EA40193010E94502F9B01AC01C9
:104B5000C601B5010E947E2D0E940C2E7093F805AF
:104B60006093F7056091F5017091F6018091F7016E
:104B70009091F801E090F505F090F6050E94292E3D
:104B8000A20191010E94502F5B016C010027F7FCEC
:104B90000095102FC801B7010E94292EA40193018E
:104BA0000E94502F9B01AC01C601B5010E947E2DD1
:104BB0000E940C2E7093F6056093F5056091030634
:104BC00070910406A090FD01B090FE01C090FF011D
:104BD000D0900002882777FD8095982F0E94292E7B
:104BE0007B018C0120E030E040E05FE3C401B301D1
:104BF0000E94502F9B01AC01C801B7010E94502FA9
:104C00007B018C01C601B5010E94292EA2019101F0
:104C10000E94502F9B01AC01C801B7010E947E2D5C
:104C20000E940C2E70930406609303068091F70592
:104C30009091F8058150984034F080E098E090938E
:104C4000F8058093F7058091F7059091F80580505D
:104C5000984F34F480E098EF9093F8058093F7052F
:104C60008091F5059091F6058150984034F080E0F0
:104C700098E09093F6058093F5058091F505909165
:104C8000F6058050984F34F480E098EF9093F60545
:104C90008093F50580910306909104068150984019
:104CA00034F080E098E090930406809303068091AE
:104CB0000306909104068050984F34F480E098EFFA
:104CC00090930406809303068091C305992780FF83
:104CD000CDC02091810181FF0EC02233B0F48091BC
:104CE00035029091360244979093380280933702B0
:104CF000109224020DC08091C805289FC001112484
:104D00004497909338028093370281E08093240285
:104D100080912302882321F01092380210923702EA
:104D2000209135023091360240913702509138027D
:104D3000421753070CF09AC080912402882309F48B
:104D400095C0241B350B809182019927BC01269FB9
:104D5000C001279F900D369F900D112460E170E0F7
:104D60000E94E72F09811A81061B170B2091C001B1
:104D70003091C101809180019927FC012E9FC001D3
:104D80002F9F900D3E9F900D112468E070E00E94CF
:104D9000E72F061B170B6091190270911A02809180
:104DA0001B0290911C0220E032E040E050E00E94A3
:104DB0001C30CA01B90120918301332744275527AC
:104DC0000E94B42F20E230E040E050E00E941C300E
:104DD000FFEF2E3C3F0714F42EEC3FEF8091410291
:104DE00090914202AC0174E0440F551F7A95E1F7AF
:104DF000481B590B2333310514F022E330E0021B2A
:104E0000130BCA01800F911F60E170E00E94E72F31
:104E100070934202609341028091C40599276817FC
:104E200079078CF429813A81281739072CF090935F
:104E300042028093410207C049815A815093420245
:104E4000409341020DC080914102909142026981DC
:104E50007A816817790724F47093420260934102C3
:104E600080914102909142029A838983C090030607
:104E7000D09004068091560290915702C81AD90A20
:104E800095E6C916D10424F064E6C62ED12C09C0DB
:104E9000ECE9CE16EFEFDE0624F45CE9C52E5FEFF9
:104EA000D52E409078015090790160907A017090F1
:104EB0007B016091F7057091F80520912E023091E9
:104EC0002F024091BE025091BF02241B350B621B82
:104ED000730B882777FD8095982F0E94292E9B01C0
:104EE000AC01C301B2010E94502F0E940C2E70939E
:104EF000D1026093D0028091D0029091D1028C01B6
:104F0000222717FD2095322F80915E0290915F023B
:104F1000A0916002B0916102080F191F2A1F3B1F68
:104F200000935E0210935F0220936002309361024F
:104F30001016110612061306ACF4C80117FF03C0C1
:104F4000909581959F4F60E071E00E94E72F6F5F21
:104F50007F4F882777FD8095982F061B170B280B0E
:104F6000390B14C0C80117FF03C0909581959F4F5E
:104F700060E071E00E94E72F6F5F7F4F882777FD29
:104F80008095982F060F171F281F391F00935E0268
:104F900010935F02209360023093610280915E0261
:104FA00090915F02A0916002B09161028138FEE3AE
:104FB0009F07F0E0AF07F0E0BF072CF080E89EE32A
:104FC000A0E0B0E009C08058914CAF4FBF4F64F4EF
:104FD00080E891ECAFEFBFEF80935E0290935F02A9
:104FE000A0936002B09361026091D0027091D102EF
:104FF00080907C0190907D01A0907E01B0907F0117
:10500000882777FD8095982F0E94292E7B018C019F
:1050100060915E0270915F028091600290916102E6
:105020000E94292E9B01AC01C501B4010E94502FA2
:105030009B01AC01C801B7010E947E2D0E940C2E7D
:105040009601260F371F49815A81240F351F2224CC
:105050004A30510514F441E0242E37FD02C02220CD
:1050600019F040E050E008C080910206482F552713
:10507000241735070CF4A9018091F905E82FFF27C3
:10508000FC83EB839F01E417F5070CF49A0120934E
:10509000C40229813A81261B370BB9016C0D7D1D95
:1050A00077FD02C0222019F080E090E007C08091D7
:1050B00002069927681779070CF4CB012B813C81F4
:1050C000281739070CF49C012093C5026091F5055F
:1050D0007091F60520913002309131024091C0026A
:1050E0005091C102241B350B621B730B882777FD7F
:1050F0008095982F0E94292E9B01AC01C301B2011B
:105100000E94502F0E940C2E7093C3026093C20223
:105110008091C2029091C3028C01222717FD209535
:10512000322F80915A0290915B02A0915C02B09163
:105130005D02080F191F2A1F3B1F00935A0210938C
:105140005B0220935C0230935D021016110612067A
:105150001306ACF4C80117FF03C0909581959F4FCB
:1051600060E071E00E94E72F6F5F7F4F882777FD37
:105170008095982F061B170B280B390B14C0C801FC
:1051800017FF03C0909581959F4F60E071E00E94EA
:10519000E72F6F5F7F4F882777FD8095982F060F49
:1051A000171F281F391F00935A0210935B02209388
:1051B0005C0230935D0280915A0290915B02A09153
:1051C0005C02B0915D0281383EE3930730E0A307B3
:1051D00030E0B3072CF080E89EE3A0E0B0E009C027
:1051E0008058914CAF4FBF4F64F480E891ECAFEF23
:1051F000BFEF80935A0290935B02A0935C02B0933E
:105200005D026091C2027091C302882777FD80958C
:10521000982F0E94292E7B018C0160915A02709177
:105220005B0280915C0290915D020E94292E9B019D
:10523000AC01C501B4010E94502F9B01AC01C80113
:10524000B7010E947E2D0E940C2E29813A81260FE3
:10525000371F2C193D0937FD02C0222019F040E00C
:1052600050E008C080910206482F552724173507C3
:105270000CF4A9012B813C81241735070CF49A0109
:105280002093EC0289819A81861B970BBC016C19D3
:105290007D0977FD02C0222019F020E030E008C02F
:1052A00080910206282F3327621773070CF49B01A5
:1052B0008B819C81821793070CF4C9018093D602DD
:1052C00024960FB6F894DEBF0FBECDBFDF91CF910D
:1052D0001F910F91FF90EF90DF90CF90BF90AF9014
:1052E0009F908F907F906F905F904F903F902F9006
:1052F00008952F923F924F925F926F927F928F927A
:105300009F92AF92BF92CF92DF92EF92FF920F9354
:105310001F93CF93DF93CDB7DEB764970FB6F894A2
:10532000DEBF0FBECDBF80917005882309F4BFC3D7
:105330008091BC029091BD0201969093BD02809332
:10534000BC028230910581F18330910524F40197EC
:1053500009F090C008C08330910509F446C0049755
:1053600009F088C063C08091580590915905A091BB
:105370005A05B0915B058093900290939102A0939F
:105380009202B093930280915C0590915D05A0918B
:105390005E05B0915F058093A0029093A102A09357
:1053A000A202B093A30266C080915805909159055E
:1053B000A0915A05B0915B05809394029093950259
:1053C000A0939602B093970280915C0590915D0541
:1053D000A0915E05B0915F058093A4029093A50211
:1053E000A093A602B093A70245C080915805909162
:1053F0005905A0915A05B0915B058093980290934E
:105400009902A0939A02B0939B0280915C059091BF
:105410005D05A0915E05B0915F058093A802909311
:10542000A902A093AA02B093AB0224C080915805B0
:1054300090915905A0915A05B0915B0580939C020B
:1054400090939D02A0939E02B0939F0280915C0571
:1054500090915D05A0915E05B0915F058093AC02CF
:105460009093AD02A093AE02B093AF021092BD0232
:105470001092BC0260919002709191028091920210
:10548000909193022091940230919502409196025E
:1054900050919702620F731F841F951F20919C02E9
:1054A00030919D0240919E0250919F02E09098029F
:1054B000F090990200919A0210919B022E0D3F1DCF
:1054C000401F511F620F731F841F951F24E030E09F
:1054D00040E050E00E941C30CA01B9010E94292E10
:1054E0000E94332E0E940C2E5B016C016093C80257
:1054F0007093C9028093CA029093CB026091A0027C
:105500007091A1028091A2029091A3022091A40225
:105510003091A5024091A6025091A702620F731F1D
:10552000841F951F2091AC023091AD024091AE02D4
:105530005091AF02E090A802F090A9020091AA0257
:105540001091AB022E0D3F1D401F511F620F731FA4
:10555000841F951F24E030E040E050E00E941C30A2
:10556000CA01B9010E94292E0E94332E0E940C2EDE
:105570007B018C016093F1027093F2028093F3023D
:105580009093F4028091D4029091D502019709F092
:105590008EC28091250290912602181619060CF0F1
:1055A00086C28091DC029091DD02892B51F18091BD
:1055B000580590915905A0915A05B0915B058093CB
:1055C000CC029093CD02A093CE02B093CF028091F3
:1055D0005C0590915D05A0915E05B0915F0580939B
:1055E000DE029093DF02A093E002B093E10282E337
:1055F00090E09093A8018093A7011092DD02109291
:10560000DC028091CC029091CD02A091CE02B091AB
:10561000CF028A199B09AC09BD09898B9A8BAB8B88
:10562000BC8B2091E6023091E702442737FD40957C
:10563000542FBC01CD010E94B42F5B016C0160931B
:105640006402709365028093660290936702809172
:10565000DE029091DF02A091E002B091E1028E198A
:105660009F09A00BB10B8D879E87AF87B88B2091C8
:10567000E6023091E702442737FD4095542FBC01E4
:10568000CD010E94B42F1B012C016093680270931E
:10569000690280936A0290936B02809164059091F5
:1056A0006505A0916605B091670589879A87AB87E4
:1056B000BC872091E8023091E902309521953F4F57
:1056C000442737FD4095542FBC01CD010E94B42FD3
:1056D0003B014C01609374027093750280937602D3
:1056E000909377028091680590916905A0916A0571
:1056F000B0916B058D839E83AF83B8872091E802BC
:105700003091E902309521953F4F442737FD409570
:10571000542FBC01CD010E94B42F69837A838B83FF
:105720009C83609378027093790280937A029093BD
:105730007B02E090E202F090E302A60CB71CC81CCA
:10574000D91CC601B5010E94292E0E94332E5B018F
:105750006C010027F7FC0095102FC801B7010E94CB
:10576000292E9B01AC01C601B5010E94C62D0E94E5
:105770000C2E4B017093BF026093BE02E090E202D8
:10578000F090E30289819A81AB81BC81280E391E99
:105790004A1E5B1EC201B1010E94292E0E94332EB7
:1057A0005B016C010027F7FC0095102FC801B701C1
:1057B0000E94292E9B01AC01C601B5010E94C62D95
:1057C0000E940C2E9B017093C1026093C0028091D5
:1057D000D2029091D302881599052CF48091D202BF
:1057E0009091D30211C08091D2029091D3029095F2
:1057F00081959F4F881699065CF48091D202909112
:10580000D302909581959F4F9093BF028093BE02E3
:105810008091D2029091D302821793072CF4809149
:10582000D2029091D30211C08091D2029091D30202
:10583000909581959F4F281739075CF48091D2028B
:105840009091D302909581959F4F9093C102809340
:10585000C00289899A89AB89BC8980937C02909324
:105860007D02A0937E02B0937F028D859E85AF85D9
:10587000B8898093800290938102A0938202B093B2
:1058800083028091C30583FFACC08091E4029091B4
:10589000E50220911D0230911E02820F931F90930A
:1058A0006302809362028091620290916302885643
:1058B000914054F080916202909163028856914029
:1058C0009093630280936202E0906202F090630220
:1058D0006091C0027091C102882777FD8095982F52
:1058E0000E94292E1B012C01A0906202B09063023D
:1058F0000027F7FC0095102FC801B7010E94292E40
:105900000E94982FA20191010E94502F3B014C014F
:10591000CC24B7FCC094DC2CC601B5010E94292E12
:105920000E94C02D7B018C016091BE027091BF026C
:10593000882777FD8095982F0E94292E9B01AC0126
:10594000C801B7010E94502F9B01AC01C401B301F3
:105950000E947E2D0E94332E0E940C2E5B017093BC
:10596000BF026093BE026091620270916302E09098
:105970006202F0906302882777FD8095982F0E943D
:10598000292E0E94C02DA20191010E94502F3B019F
:105990004C010027F7FC0095102FC801B7010E94A9
:1059A000292E0E94982F7B018C01CC24B7FCC09437
:1059B000DC2CC601B5010E94292E9B01AC01C80157
:1059C000B7010E94502F9B01AC01C401B3010E949A
:1059D0007D2D0E94332E0E940C2E7093C102609385
:1059E000C0028091BE029091BF021816190694F46D
:1059F00089859A85AB85BC854A97A105B10514F1C7
:105A000089899A89AB89BC898D599F4FAF4FBF4F08
:105A1000ACF418C0892BB1F089859A85AB85BC851B
:105A2000875E9F4FAF4FBF4F6CF489899A89AB89CE
:105A3000BC8984369105A105B10524F41092BF02FA
:105A40001092BE028091C0029091C10218161906F0
:105A500094F48D819E81AF81B8854A97A105B105E7
:105A600014F18D859E85AF85B8898D599F4FAF4FB5
:105A7000BF4FACF418C0892BB1F08D819E81AF81EE
:105A8000B885875E9F4FAF4FBF4F6CF48D859E8565
:105A9000AF85B88984369105A105B10524F410922B
:105AA000C1021092C0021092D5021092D4026496E4
:105AB0000FB6F894DEBF0FBECDBFDF91CF911F911F
:105AC0000F91FF90EF90DF90CF90BF90AF909F909D
:105AD0008F907F906F905F904F903F902F900895A0
:105AE000FC014150504030F001900616D1F731973B
:105AF000CF0108958827992708955058192E72D1FB
:105B000001D022C1BA176207730784079507B1F164
:105B100088F40EF410940B2EBA2FA02D062E622FAF
:105B2000202D072E732F302D082E842F402D092E67
:105B3000952F502DFF275523B9F0591B49F0573E9B
:105B400098F0469537952795A795F0405395C9F756
:105B500076F0BA0F621F731F841F30F48795779514
:105B60006795B795F040939517FA0F2E0895BF1BD0
:105B7000BB27BA0B620B730B840BF6CFDEF65EC14C
:105B800050E449EC3FE02BED87D0BBC02BD101D0D6
:105B9000DBC0552359F0992369F09F575F57951B38
:105BA00033F442F4903811F4915805C0E5C091588F
:105BB0009F3F09F443C1BB27112462177307840771
:105BC00030F4660F771F881FBB1F915098F311D0D8
:105BD0000F920FD00F920DD0A0E826173707480775
:105BE0001B0609F0A048BA2F602D7F918F910024E9
:105BF0000895A0E80024621773078407B10528F010
:105C0000621B730B840BB1090A2A660F771F881F6A
:105C1000BB1FA69581F7089597FBF0D09F3738F00A
:105C2000FEE9F91B982F872F762F6B2F05C003C134
:105C30009695879577956795F150D0F73EF49095B6
:105C40008095709561957F4F8F4F9F4F0895E89491
:105C500003C097FB0EF4F3DFB62F672F782F892F41
:105C60009EE9002471C0D8D09F3760F40EF0E3C0E5
:105C70009FEB80E877276627089586957795679547
:105C8000B11D93959639C8F32EF4BB2319F06F5FBD
:105C90007F4F8F4FBB2758C05F77552319F444239C
:105CA0000AF06AC02F933F934F935F936FDF55279E
:105CB0004427C6D05F914F913F912F91F1C00ED0F4
:105CC0005EF004C00BD026F001C008D019F020F41B
:105CD0008FEF089580E0089581E0089597FB092EE5
:105CE000052600F8689481D0E89407FC07C0621785
:105CF00073078407950721F008F40094079498949B
:105D000008951F939F7750EC49E43FE02BEDF6DEBA
:105D100010E89F775FE349EC3FE02BED62177307D4
:105D20008407950720F050EC49E4E8DE112713D1F1
:105D30009068E0E7F0E023D091271F9108959A95AD
:105D4000BB0F661F771F881F11249923A1F088239A
:105D5000B2F79F3F59F0BB0F48F421F4002011F433
:105D600060FF04C06F5F7F4F8F4F9F4F881F9795D5
:105D7000879597F908955FC09FEF80EC0895FF9293
:105D8000EF92DF92CF92BF926B017C01B59016D05B
:105D9000B590BB2069F09F938F937F936F93B6016B
:105DA000C7010CD02F913F914F915F910E94C62D5A
:105DB000BF90CF90DF90EF90FF900895D0D002C0B9
:105DC0009601A701EF93FF930E94502FFF91EF914F
:105DD000C6D0EF93FF930E947E2DFF91EF91BA946E
:105DE00079F70895052E092607FA440F551F5F3FDE
:105DF00079F0AA27A51708F051E04795880F991F59
:105E00009F3F31F0BB27B91708F091E087950895BF
:105E10009F919F911124B0CF97FB880F991F9F3FAF
:105E200031F0BB27B91708F091E0879508959F914D
:105E30009F911124A1CF6627772788279927089556
:105E4000EBDFCF93DF93D52FC42F5527442733277C
:105E500022279923D9F09F37C8F0F92F75DF592FE2
:105E6000482F372F262FF63968F4D6DEF2DEC03001
:105E7000CD0721F069937993899399939058DF9195
:105E8000CF913CCE9927882777276627C030CD074A
:105E900021F02993399349935993DF91CF9154CFAE
:105EA000A1DF01D051CF992339F0552329F09F5715
:105EB0005F57950F13F49AF1C1CF91589F3FE1F3CB
:105EC000629FA12D0F92BB27639FA00DB11DEE27EE
:105ED000729FA00DB11DEE1FAF93AA27649FB00D56
:105EE000E11D739FB00DE11DAA1F6627829FB00DB3
:105EF000E11DA61F5527749FE00DA11D551F839F0F
:105F0000E00DA11D561F849FA00D511D852F7A2FD6
:105F10006E2F1F900F9088231AF4939539F42CCF8D
:105F2000000C111CBB1F661F771F881F01280895D6
:105F30009F939F77993358F050E449EC3FE02BED65
:105F4000ABDE5FEB49EC3FE02BEDD8DDDADE5F91B5
:105F50005078952708959B01AC010C94502F5591D2
:105F60004591359125910895629FD001739FF0016D
:105F7000829FE00DF11D649FE00DF11D929FF00DD9
:105F8000839FF00D749FF00D659FF00D9927729F10
:105F9000B00DE11DF91F639FB00DE11DF91FBD019B
:105FA000CF0111240895AA1BBB1B51E107C0AA1FF2
:105FB000BB1FA617B70710F0A61BB70B881F991FAA
:105FC0005A95A9F780959095BC01CD01089597FB4E
:105FD000092E07260AD077FD04D0E5DF06D0002081
:105FE0001AF4709561957F4F0895F6F79095819515
:105FF0009F4F0895A1E21A2EAA1BBB1BFD010DC0E5
:10600000AA1FBB1FEE1FFF1FA217B307E407F50768
:1060100020F0A21BB30BE40BF50B661F771F881F44
:10602000991F1A9469F760957095809590959B01DA
:10603000AC01BD01CF01089597FB092E05260ED0B6
:1060400057FD04D0D7DF0AD0001C38F45095409596
:10605000309521953F4F4F4F5F4F0895F6F790953C
:106060008095709561957F4F8F4F9F4F0895F99957
:10607000FECFB2BDA1BDF89A119600B40895F9996A
:10608000FECFB2BDA1BD00BC11960FB6F894FA9A2E
:08609000F99A0FBE0895FFCF3D
:1060980001640A016400007D0000FF03010203049B
:1060A80005060708090A48616C6C6F2057656C740F
:1060B80000000000000000000000000000000000D8
:1060C80000000000000000000000000000000000C8
:1060D80000000000000000000000000000000000B8
:1060E80000000000000000000000000000000000A8
:1060F8000000000000000A014B616D65726100003C
:106108004E6F726D616C00000000803F17B7D13888
:0A61180030FB103A403296020A6490
:00000001FF
/branches/Chris_hallo/V0.71_Beta_HEX/readme.txt
0,0 → 1,80
GPS-Modifikation auf Basis der Original V0.6 by Holger Buss & Ingo Busker
 
----- BETA V0.71-----
 
 
Copyright by Christopher Hartmann und Daniel Schmitz.
 
-Disclaimer-
Wir übernehmen keinerlei Garantie für die Funktionstüchtigkeit dieser Software
jegliche Änderung geschehen auf Eigene Gefahr
für eventuelle Schäden übernehmen wir keinerlei Haftung
 
 
!!!!!!!!!!!!!! WICHTIG !!!!!!!!!!!!!
------------------------------------------------------------------------------------
DER HALBAUTONOME SCHWEBEFLUG MUSS VOM PILOTEN STEHTS ÜBERWACHT WERDEN!
DER PILOT MUSS IN JEDER SITUATION IN DER LAGE SEIN, BEI FEHLFUNKTIONEN EINZUGREIFEN!
------------------------------------------------------------------------------------
 
 
Parametrierung über Koptertool (getestet für MK mit 54cm Achsstand):
---------------------------------------------------------------------
- ggf. aktivieren des Höhenreglers über Schalter
- aktivieren der Option GPS
- anpassen des ACC Wertes unter dem Reiter "Gyro" von 26 auf 50
- Userpara1. -> 5
- Userpara2. -> 23
- Userpara3. -> zwischen 42 und 46
 
ACHTUNG:
Kompass arbeitet noch nicht richtig. Daher Kompass im MK Tool NICHT aktivieren!
Der MK muss von Hand nach Norden ausgerichtet bleiben!
 
 
 
___________________________________________________________________________________________________________________________________
Features:
 
 
-Auslesen der GPS Daten im UBX Protokoll (modifizierte Version, - Original von Pitschu (Peter Schulten) )
 
- integrierter PD Regler - Parametrierung des P-, D-Anteils und Skalierungsanteils
User Parameter 1: P-Regler, 2:D-Regler; 3: Skalierung
 
- Rotationsmatrix für Kompass (funktioniert noch nicht richtig)
 
- Postiton Hold (Aktivierung über Poti 1 ( 0=Aus , >0 =aktiviert)
- kurzes Piepsen bestätigt Aktivierung des PositionHold (PH)
 
- rote LED der Flight-Ctrl für Statusanzeige: (blinkend : GPS Aktiv)
- Aktivierung des Postiton-Hold ohne Empfang von GPS unterbunden
 
- Einbinden des GPS-Empfängers bitte Erklärung von PITSCHU aus XUFO-Forum entnehmen (http://forum.xufo.net/bb/viewtopic.php?t=5980)
 
----- BAUDRATE jedoch einstellen auf 57600 ------
 
----- unter Messages muss statt:
-NAV-POSLLH
-NAV-POSUTM
-NAV-VELNED
 
für für Target1 folgendes aktiviert werden (siehe Pitschu Anleitung):
 
-NAV-POSECEF
-NAV-VELECEF
 
 
____________________________________________________________________________________________________________________________________
 
in Planung: (TWI: teilweise Integriert, siehe Quelltext -- UNGETESTET -- )
 
- Kompass (TWI)
-"Home Postition" (TWI)
- Waypoint fliegen
- Auslagerung auf externen Prozessor
 
….
 
 
/branches/Chris_hallo/V0.74_Beta_HEX/Flight-Ctrl_MEGA644_GPSV0_74.hex
0,0 → 1,1515
:100000000C94EC010C9409020C9409020C94090262
:100010000C9409020C9409020C9409020C94090234
:100020000C9409020C94260C0C9409020C940902FD
:100030000C94F7140C9409020C9409020C94090214
:100040000C9409020C9409020C947D0B0C94090287
:100050000C945D040C9409020C94A5030C94090201
:100060000C94120D0C9409020C9444140C94090283
:100070000829573F9F2D49CBA5310F76C73493F2FE
:100080007E37D00D013AB60B613D2AAAAB3F000086
:10009000003F800000000A0A0D004E657574726111
:1000A0006C0048656164696E67486F6C64000A0D96
:1000B000537465756572756E673A20004F4B0A0D73
:1000C000000A0D4162676C65696368204C7566744F
:1000D000647275636B73656E736F722E2E000A0DFA
:1000E00042656E75747A6520506172616D657465E4
:1000F000727361747A202564000A0D496E69742E4A
:1001000020454550524F4D3A2047656E65726965EE
:1001100072652044656661756C742D506172616D05
:10012000657465722E2E2E000A0D3D3D3D3D3D3D10
:100130003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DEF
:100140003D3D3D3D3D3D3D3D000A0D466C696768C6
:1001500074436F6E74726F6C205625642E25642074
:10016000002E0052616E67653A2533692D2533698B
:10017000005374656C6C756E673A202533690053C3
:100180006574706F696E7420202533690053657241
:10019000766F202000506F7469343A20202533692F
:1001A00000506F7469333A202025336900506F7412
:1001B00069323A202025336900506F7469313A2042
:1001C000202533690053746172743A202020202066
:1001D000253569004D657373776572743A20202563
:1001E0003569005269636874756E673A2020253559
:1001F00069004B6F6D7061737320202020202020D8
:1002000000456D70662E506567656C3A253569004E
:100210005370616E6E756E673A202025356900480F
:100220006F63682025346920282533692900526FBF
:100230006C6C20253469202825336929004E6963B8
:100240006B20253469202825336929004143432048
:100250002D2053656E736F720047696572202534D7
:100260006920282533692900526F6C6C2025346978
:10027000202825336929004E69636B2025346920C5
:100280002825336929004779726F202D2053656E28
:10029000736F720050333A25346920204B616EE44D
:1002A0006C65200050313A253469202050323A25BF
:1002B0003469200047733A253469202047693A257C
:1002C000346920004E693A2534692020526F3A255E
:1002D000346920004B373A25346920204B616EE4A5
:1002E0006C6520004B353A25346920204B363A2581
:1002F000346920004B333A25346920204B343A25A9
:10030000346920004B313A25346920204B323A259C
:10031000346920004B6F6D706173733A2020202583
:10032000356900526F6C6C3A202020202020253542
:1003300069004E69636B3A20202020202025356912
:1003400000616B742E204C6167650048F668656E2D
:10035000726567656C756E67004B65696E65200038
:100360004F66662020202020203A20253569004C49
:10037000756674647275636B3A2025356900536F36
:100380006C6C486F6568653A2025356900486F6573
:1003900068653A202020202025356900286329201F
:1003A000486F6C676572204275737300536574748F
:1003B000696E673A20256420005625642E25640066
:1003C0002B2B204D696B726F4B6F70746572202BF5
:1003D0002B005B25695D000011241FBECFEFD0E12B
:1003E000DEBFCDBF11E0A0E0B1E0E0E1FEE502C07C
:1003F00005900D92AE38B107D9F716E0AEE8B1E03E
:1004000001C01D92A535B107E1F70E9440020C948E
:10041000072F0C940000A2E0B0E00E94F32E802D84
:1004200099270895FB01282F863008F025E0842FB6
:100430009927429FD0011124AC59BF4F019724F056
:1004400001900E94FB2EFACFA2E0B0E0022E0E94A3
:10045000FB2E0895CF93DF93FB01C42FDD27863059
:1004600008F085E0489FD0011124AC59BF4F219777
:1004700024F00E94F32E0192FACFDF91CF910895DC
:100480000F931F93CF93DF9391E097B98FEF88B9C4
:100490008BE184B995B98EE38AB9579A87EF8BB906
:1004A00084B7877F84BF80916000886180936000FB
:1004B0001092600080ED97E09093AC018093AB01C7
:1004C00010923702109236021092DE051092DD056E
:1004D00010923502109234021092330210923202BE
:1004E00028980E94D30C0E9445070E94E2140E94A3
:1004F0000C0D0E942A14789410928A048CE3809345
:100500008B0484E080938C048CE390E09F938F9322
:100510001F921F9289E491E09F938F931F920E94F4
:10052000DB0888E291E09F938F931F920E94DB0883
:10053000299AA1E0B0E00E94F32E802D2DB73EB79E
:10054000265F3F4F0FB6F8943EBF0FBE2DBF8B33D3
:10055000A9F189EF90E09F938F931F920E94DB088F
:100560000E94AD1C4AE365E076E080E00E94120242
:1005700001E00F900F900F90023049F40E94401C50
:100580004AE365E076E082E00E94120203E04AE37B
:1005900065E076E0802F0E9412020F5F063060F364
:1005A00081E022E030E0D901082E0E94FB2E8BE38F
:1005B00021503040D901082E0E94FB2E02E010E0AD
:1005C000D8010E94F32E802D4AE365E076E00E9478
:1005D0002A02D8010E94F32E802D99279F938F9392
:1005E0008EED90E09F938F931F920E94DB08809185
:1005F0000D060F900F900F900F900F9080FF20C06E
:1006000081EC90E09F938F931F920E94DB0884EC13
:1006100099E00E94110CEC010E9436100F900F908F
:100620000F90CE010E941A0C8823D9F38CEB90E036
:100630009F938F931F920E94DB080F900F900F9053
:100640000E94651D289880ED97E09093AC018093FF
:10065000AB0188EE93E0909385048093840485E554
:1006600080937F048EEA90E09F938F931F920E9465
:10067000DB0880910D060F900F900F9082FF03C052
:1006800082EA90E002C08AE990E09F938F931F92E4
:100690000E94DB080F900F900F9086E990E09F93E7
:1006A0008F931F920E94DB080E945D100F900F90A5
:1006B0000F908091A801882379F11092A8010E94DF
:1006C000761E0E941E1D289880910101882319F032
:1006D00081508093010180913102882329F080911B
:1006E0003102815080933102209104013091050143
:1006F00080911D0699272817390734F480ED97E07B
:100700009093AC018093AB018091D601882319F4BA
:100710000E942A1401C028980E9462070E94D007F4
:1007200080E090E00E941A0C882319F28091380230
:10073000882329F088B190E1892788B901C04498BD
:1007400084EF91E00E94110CB4CF1F920F920FB66C
:100750000F9211248F939F93EF93FF938091000149
:100760008823E1F48091A3019091A40101969093D4
:10077000A4018093A301FC01E15CFC4FE081ED301A
:1007800019F08639910539F41092A4011092A30151
:1007900081E080930001E093C60004C01092A401A0
:1007A0001092A301FF91EF919F918F910F900FBE37
:1007B0000F901F90189580917E04813031F48091C4
:1007C00072048093950510927E04809142058130D9
:1007D00091F58091380590913905A0913A05B09135
:1007E0003B0580937D0590937E05A0937F05B09394
:1007F00080058091340590913505A0913605B09122
:1008000037058093810590938205A0938305B0936B
:10081000840580913C0590913D05A0913E05B091E5
:100820003F058093850590938605A0938705B09337
:100830008805109242058091BD05813091F5809127
:100840009D0590919E05A0919F05B091A005809374
:10085000890590938A05A0938B05B0938C058091B0
:10086000A1059091A205A091A305B091A405809344
:100870008D0590938E05A0938F05B0939005809180
:10088000A5059091A605A091A705B091A805809314
:10089000910590939205A0939305B09394051092BF
:1008A000BD0580919505882339F0289A81E090E074
:1008B000909307038093060308951F920F920FB63B
:1008C0000F9211242F933F934F935F936F937F93D6
:1008D0008F939F93AF93BF93CF93DF93EF93FF9348
:1008E0008091C600809392018091C0004091920156
:1008F000887109F003C18091A501843009F488C092
:10090000853050F48130D1F0813098F0823001F19F
:10091000833009F0F0C021C0863009F4A9C08630C8
:1009200008F48AC0873009F4D4C0883009F0E3C0E5
:10093000D6C0453B09F0E6C081E003C0423621F451
:1009400082E08093A501DEC0453B09F4DBC0D3C043
:10095000413009F0D0C083E0F4CF409397054F5F5A
:1009600040933E0380913E038F5F80936D0484E04B
:100970008093A501809197058830C1F0823151F1B3
:100980008330F1F58EE694E0909399048093980477
:100990002FE835E030933C0320933B03409690933F
:1009A00044058093430580917E0427C080E395E051
:1009B000909399048093980429E936E030933C039E
:1009C00020933B0342969093440580934305809186
:1009D000420513C089E995E09093990480939804A7
:1009E00022EF3AE030933C0320933B0384969093AC
:1009F0004405809343058091BD058093980582C08E
:100A000081E08093980510924405109243057AC0C6
:100A1000842F9927909346058093450580913E0346
:100A2000840F80933E0380916D0490913E03890F63
:100A300080936D0485E085CF209145053091460572
:100A4000842F9927982F8827280F391F3093460520
:100A50002093450580913E03840F80933E0380914F
:100A60006D0490913E03890F80936D0486E069CFF9
:100A700080913E03840F80933E0380916D0490919A
:100A80003E03890F80936D0480919805882381F43B
:100A9000E0919804F091990480913B0390913C037C
:100AA000E817F90728F44193F0939904E093980428
:100AB0008091450590914605019790934605809356
:100AC00045058091450590914605892BD9F487E02D
:100AD00038CF80913E03481771F488E032CF80917F
:100AE0006D04481741F4E0914305F09144053097B7
:100AF00011F081E080831092A50104C01092A5013D
:100B00000E94DB030E94DB0340919E01463910F0F6
:100B100010929D01809192018D3009F05CC080910E
:100B20009D01823009F057C010929D01A42FBB2770
:100B3000FD01E856FB4F3081ED01C756DB4F2881A0
:100B40008091A1019091A201831B9109821B9109BF
:100B50009F709093A2018093A1019C0196E036952D
:100B600027959A95E1F7235C2093A001982F9F7316
:100B7000935C90939F018081281729F488819817AE
:100B800011F491E006C0809195018F5F80939501EB
:100B900090E080919301882309F064C0992309F4BF
:100BA00061C081E08093930140939601A656BB4FAC
:100BB0008DE08C9380919C04823509F053C088E1CC
:100BC00090E02CE00FB6F894A895809360000FBEDB
:100BD0002093600047C080919D018130D9F0813021
:100BE00018F08230E9F530C080919201833239F4F7
:100BF00080919301882319F481E080939D01809175
:100C0000920180939A0481E080939E0180919201E9
:100C1000992715C082E080939D01E42FFF278091E2
:100C20009201E656FB4F80834F5F40939E012091D7
:100C300092018091A1019091A201820F911D909348
:100C4000A2018093A1010EC0E42FFF2780919201A1
:100C5000E656FB4F8083463938F310929D01E7CF6B
:100C600010929D01FF91EF91DF91CF91BF91AF91D4
:100C70009F918F917F916F915F914F913F912F91B4
:100C80000F900FBE0F901F901895DC0120E030E010
:100C900040E050E0EFE3F3E005C08191280F311D03
:100CA0004F5F5F4F4A175B07C1F73F70C90166E0AE
:100CB000969587956A95E1F7835CFD01E15CFC4FB1
:100CC000808311962F73235CFD01E15CFC4F208330
:100CD000A05CBC4F8DE08C931092000180913F038B
:100CE0008093C6000895EF92FF920F931F93CF93C6
:100CF000DF937A01722F93E290933F036093400356
:100D00008093410303E010E060E0A2E4B3E046C05A
:100D1000F701E60FF11D90816F5F715019F4E0E06B
:100D200040E00FC0F701E60FF11D40816F5F715089
:100D300011F4E0E006C0F701E60FF11DE0816F5FFE
:100D40007150892F86958695835C8C935527892FC2
:100D500099278370907024E0880F991F2A95E1F7F6
:100D60009A0194E0369527959A95E1F7822B835C5A
:100D7000ED0189834F705070440F551F440F551F6C
:100D80008E2F8295869586958370842B835C8A83CB
:100D9000EF73E35CEB830C5F1F4F1496772309F02E
:100DA000B7CFC8010E944506DF91CF911F910F91E7
:100DB000FF90EF9008951F93CF93DF93EC0170E0C5
:100DC000A22FBB27129748C0E42FFF27E656FB4F00
:100DD00030814F5FE42FFF27E656FB4F50814F5F76
:100DE000E42FFF27E656FB4F10814F5FE42FFF27CC
:100DF000E656FB4F20814F5F842F9927A817B9072C
:100E000074F15D53FE01E70FF11D3D53330F330FB6
:100E1000852F82958F70382B3083613001F1912FAF
:100E20009D537F5FFE01E70FF11D71505295507F7A
:100E3000892F86958695582B508363506F3F79F0A4
:100E40007E5FFE01E70FF11D9295990F990F907C3F
:100E50002D53922B90837F5F662309F0B5CFDF91EE
:100E6000CF911F9108951F93182F8A3019F48DE0A8
:100E70000E9433078091C00085FFFCCF1093C6000D
:100E800080E090E01F9108950895E1ECF0E088E1A2
:100E90008083A0ECB0E08C9182608C93808180682C
:100EA00080838081806480838AE28093C40088ECA0
:100EB00090E00E94110C90936C0480936B0410924C
:100EC000A501089580910001882309F468C08091EC
:100ED0008E01882371F080910001882351F02BE06E
:100EE0004FE754E060913D0387E40E94730610923F
:100EF0008E0180916B0490916C040E941A0C8823DF
:100F000021F4809190018823B1F080910001882321
:100F100091F022E34BE455E060913D0384E40E94AC
:100F20007306109290018AEF90E00E94110C90934A
:100F30006C0480936B0480918F018823F1F0809181
:100F400000018823D1F00E94661010928F018091D9
:100F50009C018F5F80939C01843011F410929C015E
:100F600080919C0144E1849FA00111244A5E5E4F60
:100F700024E160E0805D0E947306809191018823E6
:100F800071F080910001882351F02AE04AE854E092
:100F900060913D0386E50E947306109291010895C9
:100FA0001F93CF93DF93CDB7DEB722970FB6F89498
:100FB000DEBF0FBECDBF80919301882309F498C096
:100FC0008FEF8093010180919C04813760F48C360F
:100FD00008F06FC0873609F440C08836F9F08336D0
:100FE00009F084C008C0843759F1863791F1813700
:100FF00009F07CC036C02091960143E06BE08FE79A
:1010000094E00E94DB068091CD0190918104892BB0
:101010008093CD0181E08093900168C0209196017A
:1010200043E062E0CE0101960E94DB068091CD0193
:101030009981892B8093CD0181E080938F0156C0E7
:101040002091960143E064E088E991E00E94DB068C
:101050004DC081E08093910149C081E080938E0171
:1010600045C02091960143E062E0CE0101960E94C6
:10107000DB0689818F3F89F0863010F085E0898317
:101080004AE365E076E089810E942A0289812AE3A9
:1010900045E056E060913D0308C010913D030E9479
:1010A0000B022AE345E056E0612F855B0E94730640
:1010B0001DC02091960143E06AE385E096E00E941E
:1010C000DB0680919C044AE365E076E08B560E9443
:1010D000120280919C048B56A2E0B0E0082E0E9480
:1010E000FB2E0E940B0299270E94611E1092930111
:1010F00022960FB6F894DEBF0FBECDBFDF91CF9121
:101100001F910895982F8091BE05813069F48091D8
:10111000CC01E82FFF27EA5EFE4F90838F5F80931C
:10112000CC0121E030E005C0892F0E943307282F31
:101130003327C90108951F93182F04C080E30E942C
:10114000820811501116D4F31F9108951F93182F80
:1011500004C080E20E94820811501116D4F31F913E
:1011600008950F931F93CF93DF938C01EB0108C079
:10117000F8010F5F1F4FE4918E2F0E948208219784
:101180002097B1F7DF91CF911F910F9108950F93A1
:101190001F93CF93DF938C01EB0106C0F80181917F
:1011A0008F010E94820821972097C1F7DF91CF918C
:1011B0001F910F9108952F923F924F925F926F92DD
:1011C0007F928F929F92AF92BF92CF92DF92EF92D7
:1011D000FF920F931F93CF93DF93CDB7DEB7E397C3
:1011E0000FB6F894DEBF0FBECDBF29968FAD2997FD
:1011F0008093BE05CE01855B9F4F9D838C832B968C
:101200008EAD9FAD2B979FA78EA72224332421015B
:1012100002C0130124010EA51FA502C00F5F1F4FBE
:10122000F801F490FF2019F0F5E2FF16B9F7B801C4
:101230008EA59FA5681B790B11F00E94B108FF20B5
:1012400009F442C20F5F1F4F1FA70EA71982AC817E
:10125000BD811BAA1AAA9FEF99ABEEA5FFA5CF01EE
:1012600001969FA78EA7B49095E7B91621F08B2D14
:101270008062883789F4EBA9E0FF07C02D903D908C
:101280004D905C901397149607C08D919C91119787
:101290001C01442455241296F0E2BF1621F48981E2
:1012A0008823D9F685C083E2B81609F483C09AE290
:1012B000B91621F0EDE2BE1669F408C0FD011296E0
:1012C000E081EAABE7FFC9CFE195EAABFBA9F061AA
:1012D000FF7D72C08BE2B81609F46AC09EE2B916AF
:1012E000B1F52EA53FA52F5F3F4FEEA5FFA5849139
:1012F0008A3221F0B82E20E030E01BC0FD011296AA
:101300004081518157FF02C04FEF5FEF49AB3FA7CC
:101310002EA7A3CFC90103E0880F991F0A95E1F713
:10132000220F331F280F391F2B0D311D2053304042
:10133000B49031968B2D80538A3060F3FFA7EEA7CF
:10134000A90137FF02C04FEF5FEF49AB8DCFF0E34C
:10135000BF1631F48BA984FD80CF80628BAB7DCF2B
:101360008B2D81538930E8F420E030E0C901F3E0AF
:10137000880F991FFA95E1F7220F331F280F391FA5
:101380002B0D311D20533040EEA5FFA5CF01019656
:101390009FA78EA7B4908B2D80538A3038F32AAB49
:1013A00063CF98E6B91651F4EBA9E460EBAB55CFE7
:1013B000B98253CFFBA9F860FBAB4FCF8CE6B816D0
:1013C00021F49BA991609BAB48CFBD83AC83E3E63E
:1013D000BE1639F41296BD83AC8312978C918E831E
:1013E00018C1F4E4BF1639F084E6B81639F099E66E
:1013F000B91659F503C0EBA9E160EBABFBA9F0FF0F
:1014000008C01496BD83AC835E904E903E902E90A3
:101410000AC01296BD83AC839E918E911C01442418
:1014200037FC4094542C57FC03C08AE088AB92C030
:101430005094409430942094211C311C411C511C28
:101440008DE289839AE098AB85C0EFE4BE1629F05F
:10145000FFE6BF1639F488E061C09BA991609BABA1
:10146000E8E056C0F0E7BF1671F41296BD83AC8376
:101470009E918E911C01442455248BA980648BABD2
:1014800078E7B72E5EC0E3E7BE16D9F51296BD83A6
:10149000AC83DE90CE90C114D10489F488E28E83AF
:1014A0008EE68F8385E788878CE689878A8789E23D
:1014B0008B871C8666E0C62ED12CCC0EDD1EF9A9CA
:1014C000F7FD13C04F2F552747FD509560E070E0A2
:1014D000C6010E942C2C009711F419A90DC08C197B
:1014E00019A981174CF4182F07C0F60101900020AC
:1014F000E9F731971E2F1C1919824201310140E092
:1015000094C085E5B81631F095E7B91649F4EAE0DC
:10151000E8AB1FC0FBA9F160FBAB8AE088AB19C048
:1015200098E5B91621F0E8E7BE1609F06EC0FBA9F0
:10153000F3FD02C080E1F2CF2114310441045104D3
:1015400019F490E198AB05C0EBA9E064EBABF0E1D6
:10155000F8AB198289A987FD03C09BA99F7D9BAB2E
:10156000211431044104510461F4E9A9EE2349F442
:101570006624772443015EE2C52ED12CCC0EDD1EFD
:101580003EC04EE2C42ED12CCC0EDD1EF8A9EF2EAB
:10159000FF2400271127C201B101A80197010E9471
:1015A000B62E6A3020F430E3A32EA60E08C027E53D
:1015B000A22EA60E88E5B81611F49FEDA922F60119
:1015C000A2926F01C201B101A80197010E94B62E3B
:1015D00039014A012E143F044006510618F0190142
:1015E0002A01D9CFF8A9F83051F48BA983FF07C09D
:1015F00090E3A91621F080E3F60182936F01CE01FA
:101600008C19182F125D49A910C0BB2009F45CC0C9
:10161000BE8219824201310100E096E0C92ED12C30
:10162000CC0EDD1E11E021E005C0212F042F011B8F
:1016300007FD00E08981882319F0812F8F5F07C0A3
:101640009BA996FD02C0812F02C0822F8E5FA82E1B
:10165000A00EEBA9EE2EFF2480E3482E512C4E2045
:101660005F204114510421F48AA98A190E94A60816
:101670008981882329F061E070E0CE01019609C0DC
:10168000E6FE09C080E38A83BB8262E070E0CE019F
:1016900002960E94C708F0E24F16510421F48AA96D
:1016A0008A190E949B08802F0E949B08612F772730
:1016B00067FD7095C6010E94C708E4FEAACD8AA9FD
:1016C0008A190E94A608A5CDE3960FB6F894DEBF4E
:1016D0000FBECDBFDF91CF911F910F91FF90EF9083
:1016E000DF90CF90BF90AF909F908F907F906F9042
:1016F0005F904F903F902F9008951F920F920FB6DA
:101700000F9211242F933F935F936F937F938F9347
:101710009F93AF93BF938091AF0181508093AF01AE
:101720008F3F01F589E08093AF01809103018F5FC6
:10173000817080930301882319F481E08093A801CC
:101740008091A6019091A70101969093A7018093A3
:10175000A6018091D601882329F08091D60181507D
:101760008093D6018091AB019091AC01029758F023
:101770008091AB019091AC0101979093AC01809363
:10178000AB015A9A01C05A9880910D0683FF3BC065
:10179000349B0AC08091A9019091AA01019690936F
:1017A000AA018093A9012FC08091A9019091AA015B
:1017B000892B79F08091A9019091AA01805A9F40CC
:1017C00040F48091A9019091AA0190932202809304
:1017D00021028091210290912202209123023091D6
:1017E0002402821B930B845E9D4F68E671E00E9489
:1017F000A32E845B90409093260280932502109242
:10180000AA011092A901BF91AF919F918F917F91F1
:101810006F915F913F912F910F900FBE0F901F908E
:1018200018952091A6013091A7012F5F3F4F820F9D
:10183000931F08952091A6013091A701821B930B5D
:10184000892F992786958074992708951F920F9262
:101850000FB60F921124EF92FF920F931F932F93C5
:101860003F934F935F936F937F938F939F93AF9328
:10187000BF93CF93DF93EF93FF9380910201815049
:10188000809302018F3F09F073C083E88093B0001A
:1018900080918901C82FDD27D093AE01C093AD019F
:1018A00080912B06E090270680FF1EC06091F10119
:1018B0007091F2018091F3019091F401FF240027CF
:1018C000112720E830E040E050E00E94D82EC80107
:1018D000B7010E94702E20E032E040E050E00E940C
:1018E000D82EC20FD31F1DC06091F1017091F2017B
:1018F0008091F3019091F401FF240027112720E843
:1019000030E040E050E00E94D82EC801B7010E94AC
:10191000702E20E032E040E050E00E94D82EC21B42
:10192000D30BD093AE01C093AD012091AD013091A6
:10193000AE018091280699272817390734F0809145
:10194000290699278217930724F49093AE01809378
:10195000AD018091AD019091AE019093720580939D
:1019600071058093B30080912A068093020104C020
:1019700083E08093B0005F98FF91EF91DF91CF916A
:10198000BF91AF919F918F917F916F915F914F9197
:101990003F912F911F910F91FF90EF900F900FBEED
:1019A0000F901F9018958091A6019091A7010B961A
:1019B0009093B1018093B00182E085BD83EA84BD3C
:1019C00017BC88E788BD96E096BD83EC8093B00095
:1019D0009093B100E0E7F0E0808182608083EEE6E2
:1019E000F0E08081816080838AE08093B300109270
:1019F000B20008952091A6013091A7012F5F3F4FBB
:101A0000280F391F8091A6019091A701A901481BB9
:101A1000590B57FFF7CF089510927C008FEE8093FB
:101A20007A0008951F920F920FB60F921124EF9231
:101A3000FF920F931F932F933F934F935F936F9357
:101A40007F938F939F93AF93BF93CF93DF93EF9346
:101A5000FF9310927A004091C8014F5F4093C801F4
:101A60004150433009F41CC1443038F4413009F48A
:101A700063C0423008F0B9C00DC0453009F450C110
:101A8000453008F42AC1463009F46FC1473009F0E7
:101A9000CBC252C22091DB013091DC0180917800F1
:101AA00090917900281B390B8091B6019091B70174
:101AB000820F931F9093B7018093B6018091C0016C
:101AC0008F5F8093C0018091150290911602A091C2
:101AD0001702B0911802442737FD4095542F820F0A
:101AE000931FA41FB51F8093150290931602A09315
:101AF0001702B09318028091190290911A02A091D6
:101B00001B02B0911C02820F931FA41FB51F80936C
:101B1000190290931A02A0931B02B0931C0281E059
:101B20008093C9018091C6019091C701019690935D
:101B3000C7018093C6017CC26091780070917900E2
:101B40008091D9019091DA01681B790B80910D0287
:101B500090910E02A0910F02B09110029B014427B8
:101B600037FD4095542F820F931FA41FB51F8093FC
:101B70000D0290930E02A0930F02B0931002809179
:101B8000110290911202A0911302B0911402820FDF
:101B9000931FA41FB51F8093110290931202A0936C
:101BA0001302B093140280917800909179000A9703
:101BB00010F464E47DEF8091780090917900895E63
:101BC000934010F06CEB72E08091B4019091B501FC
:101BD000860F971F9093B5018093B4018091BF0148
:101BE0008F5F8093BF0182E058C060917800709150
:101BF00079008091D7019091D801681B790B809171
:101C0000050290910602A0910702B09108029B0183
:101C1000442737FD4095542F820F931FA41FB51FF3
:101C20008093050290930602A0930702B0930802E6
:101C30008091090290910A02A0910B02B0910C02CE
:101C4000820F931FA41FB51F8093090290930A026D
:101C5000A0930B02B0930C028091780090917900D0
:101C60000A9710F464E47DEF8091780090917900F8
:101C7000895E934010F06CEB72E08091B20190911C
:101C8000B301860F971F9093B3018093B2018091A7
:101C9000BE018F5F8093BE0184E08093C901C8C1FB
:101CA0004091040150910501809178009091790054
:101CB0009A01220F331F240F351F63E070E00E944A
:101CC0008F2E260F371F36952795369527953093FB
:101CD00005012093040186E0E0CF8091DF0190911F
:101CE000E0012091780030917900821B930B909352
:101CF000C0058093BF058091B8019091B9012091F2
:101D0000BF053091C005820F931F9093B901809356
:101D1000B8018091C2018F5F8093C20187E0BDCF7F
:101D200080917800909179002091DD013091DE0161
:101D3000821B930B9093C0058093BF058091BA01DD
:101D40009091BB012091BF053091C005820F931F78
:101D50009093BB018093BA018091C1018F5F809302
:101D6000C1014093C90186E0E4C0609178007091A0
:101D70007900E090EB01F090EC010091ED01109101
:101D8000EE01882777FD8095982F0E94E52CA80109
:101D900097010E94392C0E94C82C7093BD0160935A
:101DA000BC012091BC013091BD01E091BF05F091D3
:101DB000C0058091CA059091CB0597FF03C090950F
:101DC00081959F4F64E070E00E94A32EEB01CF014C
:101DD000F7FF03C0909581959F4F64E070E00E94EB
:101DE000A32E260F371F2C0F3D1F3093BD012093CC
:101DF000BC018091BC019091BD01029704F16091FA
:101E0000EB017091EC018091ED019091EE0120E0E9
:101E100030E048E454E40E941B2D88230CF03CC0C1
:101E20006091EB017091EC018091ED019091EE01D8
:101E30002AE037ED43EA5CE30E943A2C25C080910A
:101E4000BC019091BD018F5F9F4F34F56091EB0114
:101E50007091EC018091ED019091EE0120E030E075
:101E600046E154E40E941E2D1816B4F46091EB0173
:101E70007091EC018091ED019091EE012AE037ED37
:101E800043EA5CE30E94392C6093EB017093EC0110
:101E90008093ED019093EE0181E08093C3018091E6
:101EA0007800909179009093C2058093C1052091AC
:101EB0001D0230911E0240911F025091200280911C
:101EC000BC019091BD01AA2797FDA095BA2F280FBC
:101ED000391F4A1F5B1F20931D0230931E0240933F
:101EE0001F0250932002E0901D02F0901E0200910C
:101EF0001F021091200260911D0270911E028091BC
:101F00001F029091200220E034E040E050E00E9467
:101F1000D82EE21AF30A040B150BE0921D02F09280
:101F20001E0200931F021093200283E08093C901D8
:101F300087E08093C8017CC08091CF059091D00547
:101F40002091780030917900820F931F9093D005F3
:101F50008093CF058091C7058F5F8093C7058091DF
:101F6000C705853008F460C08091780090917900B1
:101F700090930B0180930A011092C7058091C305CD
:101F80009091C4052091CF053091D005821B930B11
:101F90002091390230913A02821B930B9093C50134
:101FA0008093C4016091CF057091D005E090060147
:101FB000F09007010091080110910901882777FD31
:101FC0008095982FA8019701220F331F441F551F9A
:101FD0002E0D3F1D401F511F620F731F841F951F41
:101FE00024E030E040E050E00E94D82E209306012B
:101FF0003093070140930801509309012091C305D4
:102000003091C4058091060190910701A0910801CB
:10201000B0910901281B390B30933A022093390201
:102020001092D0051092CF051092C9011092C801EC
:102030008091C90180937C008FEE80937A00FF919C
:10204000EF91DF91CF91BF91AF919F918F917F9150
:102050006F915F914F913F912F911F910F91FF9041
:10206000EF900F900FBE0F901F901895CF93DF93B6
:10207000C0E0D0E0C7BD82E390E00E94FA0C81E6A8
:1020800091E09F938F931F920E94DB0880910A0139
:1020900090910B010F900F900F908458934020F077
:1020A0002196CA3FD10531F7C093CC0588EC90E06A
:1020B0000E94FA0CDF91CF910895E6E1F1E080E211
:1020C000819391E0E636F907D9F70895FF920F93CF
:1020D0001F938091CD01282F3327C9018170907003
:1020E000682F882391F08091CE01882311F08150D0
:1020F00002C0809166018093CE01E6E1F1E080E2CA
:10210000819391E0E636F907D9F7A9014270507042
:1021100021FF0DC08091CE018F5F8093CE01E6E15B
:10212000F1E080E2819391E0E636F907D9F7662382
:1021300021F0452B11F01092CE0181E18093CC016A
:102140008091CE0199279F938F9382ED93E09F9387
:102150008F93E1E0FE2EFF920E94DB080091CE01FA
:102160000F900F900F900F900F90053009F4D7C18A
:10217000063090F4023009F4B8C0033030F4002384
:10218000F1F0013009F05BC34DC0033009F402C126
:10219000043009F054C34BC1083009F498C2093027
:1021A00038F4063009F411C2073009F048C36CC294
:1021B000093009F4C9C20A3009F041C303C31092BF
:1021C000CC0180EC93E09F938F93FF920E94DB08F9
:1021D00084E18093CC018CE390E09F938F931F92D6
:1021E0001F9289EB93E09F938F93FF920E94DB08ED
:1021F00088E28093CC010E940B0299279F938F93D2
:102200008CEA93E09F938F93FF920E94DB088CE30C
:102210008093CC018CE993E09F938F93FF920E946F
:10222000DB088EC280910D0680FF47C01092CC0162
:102230008091390290913A029F938F938DE893E0B9
:102240009F938F930F930E94DB0884E18093CC01CE
:1022500080913B0290913C029F938F938EE793E095
:102260009F938F930F930E94DB0888E28093CC01A9
:1022700080910A0190910B019F938F938FE693E0D9
:102280009F938F930F930E94DB088CE38093CC0184
:102290008091CC0599279F938F9380E693E09F933D
:1022A0008F930F930E94DB088DB79EB744960FB6AD
:1022B000F8949EBF0FBE8DBFC7C284E18093CC014E
:1022C00089E593E09F938F930F930E94DB0888E248
:1022D0008093CC018BE493E09F938F930F930E94A4
:1022E000DB088DB79EB70696E2CF1092CC0181E451
:1022F00093E09F938F93FF920E94DB0884E1809389
:10230000CC016091F1017091F2018091F301909103
:10231000F40120E034E040E050E00E94D82E5F93CA
:102320004F933F932F9382E393E09F938F93FF927A
:102330000E94DB0888E28093CC016091F9017091E2
:10234000FA018091FB019091FC0120E034E040E033
:1023500050E00E94D82E5F934F933F932F9383E2D8
:1023600093E09F938F93FF920E94DB088CE380930E
:10237000CC0180912102909122029F938F9384E15E
:1023800093E09F938F93FF920E94DB088DB79EB7D7
:1023900046968DCF1092CC018091DD059091DE059F
:1023A0002091DB053091DC059F938F933F932F9312
:1023B00084E093E09F938F93FF920E94DB0884E177
:1023C0008093CC018091E1059091E2052091DF0599
:1023D0003091E0059F938F933F932F9384EF92E08A
:1023E0009F938F93FF920E94DB0888E28093CC0139
:1023F0008091E5059091E6052091E3053091E40593
:102400009F938F933F932F9384EE92E09F938F93AC
:10241000FF920E94DB088CE38093CC018091E7055A
:102420009091E8059F938F9384ED92E06FC0109296
:10243000CC01E0910606FF27EE0FFF1FE752FA4F8F
:1024400020813181E0910506FF27EE0FFF1FE75243
:10245000FA4F808191813F932F939F938F9384ECC8
:1024600092E09F938F93FF920E94DB0884E1809318
:10247000CC01E0910806FF27EE0FFF1FE752FA4F4D
:1024800020813181E0910706FF27EE0FFF1FE75201
:10249000FA4F808191813F932F939F938F9384EB89
:1024A00092E09F938F93FF920E94DB0888E28093D3
:1024B000CC01E0910A06FF27EE0FFF1FE752FA4F0B
:1024C00020813181E0910906FF27EE0FFF1FE752BF
:1024D000FA4F808191813F932F939F938F9384EA4A
:1024E00092E09F938F93FF920E94DB088CE380938E
:1024F000CC01E0910B06FF27EE0FFF1FE752FA4FCA
:10250000808191819F938F9384E992E09F938F9331
:10251000FF920E94DB088DB79EB74A96C8CE1092F4
:10252000CC0186E892E09F938F93FF920E94DB0894
:1025300084E18093CC012091D7013091D801809122
:10254000B2019091B3016091BE013F932F93772721
:102550000E94A32E7F936F9387E792E09F938F93C0
:10256000FF920E94DB0888E28093CC012091D90180
:102570003091DA018091B4019091B5016091BF0171
:102580003F932F9377270E94A32E7F936F9388E624
:1025900092E09F938F93FF920E94DB088CE38093DD
:1025A000CC012091DB013091DC018091B60190914A
:1025B000B7016091C0013F932F9377270E94A32E0C
:1025C0007F936F9389E592E056C01092CC018CE422
:1025D00092E09F938F93FF920E94DB0884E18093A7
:1025E000CC012091DD013091DE018091BA01909102
:1025F000BB016091C1013F932F9377270E94A32EC7
:102600007F936F938DE392E09F938F93FF920E944D
:10261000DB0888E28093CC012091DF013091E0015A
:102620008091B8019091B9016091C2013F932F93BD
:1026300077270E94A32E7F936F938EE292E09F9361
:102640008F93FF920E94DB088CE38093CC01609112
:10265000EB017091EC018091ED019091EE01009100
:10266000C1051091C2050E94C82C7F936F931F93E0
:102670000F938FE192E09F938F93FF920E94DB086C
:102680008DB79EB7489613CE84E18093CC0180919C
:102690000401909105019F938F9380E192E09F93B5
:1026A0008F93FF920E94DB0888E28093CC01809197
:1026B000310299279F938F9381E092E09F938F93AC
:1026C000FF920E94DB088DB79EB70A96F0CD10925C
:1026D000CC0182EF91E09F938F93FF920E94DB08E1
:1026E00084E18093CC0180912502909126029F93F2
:1026F0008F9383EE91E09F938F93FF920E94DB086C
:1027000088E28093CC0180912102909122029F93D4
:102710008F9384ED91E09F938F93FF920E94DB084B
:102720008CE38093CC0180912302909124029F93AB
:102730008F9385EC91E09F938F93FF920E94DB082B
:102740008DB79EB74296B3CD1092CC0180912902ED
:1027500090912A029F938F9389EB91E09F938F939F
:10276000FF920E94DB0884E18093CC0180912B02D0
:1027700090912C029F938F938DEA91E09F938F937A
:10278000FF920E94DB0888E28093CC0180912D02A9
:1027900090912E029F938F9381EA91E09F938F9364
:1027A000FF920E94DB088CE38093CC0180912F0282
:1027B000909130029F938F9385E991E09F938F933F
:1027C000FF9270CD1092CC018DE891E09F938F9392
:1027D000FF920E94DB0884E18093CC018091890103
:1027E00099279F938F938FE791E09F938F93FF9209
:1027F0000E94DB0888E28093CC018091AD0190912A
:10280000AE019F938F9381E791E09F938F93FF9207
:102810000E94DB088CE38093CC01809129069927E4
:102820009F938F938091280699279F938F9383E698
:1028300091E09F938F93FF920E94DB0835CD01506A
:10284000009366011092CE011092CD011F910F915D
:10285000FF9008951092B9008AE28093B80008951D
:1028600085EA8093BC0080E090E0089584E980933D
:10287000BC0008951092B9008093BB0085E8809356
:10288000BC0080E090E008951F920F920FB60F9267
:1028900011248F939F93EF93FF938091CF018F5FCC
:1028A0008093CF018150833009F442C0843028F4F2
:1028B0008130A1F0823070F50CC0853009F448C039
:1028C0008530D8F1863009F44BC0873009F071C0EB
:1028D0005BC08091D001880F8E5A14C08091D001C6
:1028E0008F5F8093D0018150813009F444C08130E2
:1028F00038F0823009F442C0833009F05AC041C038
:102900008091EC021092B9008093BB0085E880931F
:10291000BC004FC084E98093BC008091D00184301A
:1029200018F41092CF0102C01092D00185EAEFCFC7
:102930008091D101880F8D5AE5CF8091D1018130EE
:10294000D1F08130E8F28230C9F0833091F519C0BE
:102950008091BB00E091D101FF27EF52FA4F8083B5
:102960008091D101813039F0813050F2823031F0E4
:102970008330F9F406C08091ED02C4CF8091080342
:10298000C1CF80912003BECF8091D1019091BB0037
:10299000E82FFF27EF52FA4F94838F5F8093D10186
:1029A000843010F01092D10184E98093BC00109221
:1029B000CF01FF91EF919F918F910F900FBE0F90DC
:1029C0001F90189583EC80938100EFE6F0E0808102
:1029D000806280831092DC011092DB011092DA0198
:1029E0001092D9011092D8011092D70108951F9228
:1029F0000F920FB60F9211240F931F932F933F93B3
:102A00004F935F936F937F938F939F93AF93BF93F6
:102A1000CF93DF93EF93FF9320918600309187004F
:102A20008091D4019091D501281B390B80918600AB
:102A3000909187009093D5018093D401C9018D5D59
:102A400095408356994148F481E090E09093D301FA
:102A50008093D2011092670154C0C091D201D091ED
:102A6000D301CA30D1050CF04CC0C9018B5F904036
:102A7000845B914008F040C0A901425D5140FE01D5
:102A8000EE0FFF1FE752FA4F80819181FA01E81B98
:102A9000F90BCF01F7FF03C0909581959F4F0697E3
:102AA0004CF480913102883C28F480913102865F99
:102AB00080933102FE01EE0FFF1F8F0107521A4F64
:102AC000D8012D913C91C901880F991F820F931F46
:102AD000840F951F64E070E00E94A32ED8018D91B1
:102AE0009C9111979B01281B390BE151FA4F3183BF
:102AF000208311967C936E932196D093D301C0933B
:102B0000D201FF91EF91DF91CF91BF91AF919F9152
:102B10008F917F916F915F914F913F912F911F9175
:102B20000F910F900FBE0F901F901895AF92BF920C
:102B3000CF92DF92EF92FF920F931F9310927A0041
:102B40008091BE01882369F08091B2019091B30118
:102B50006091BE0177270E94A32E70934206609376
:102B600041068091BF01882369F08091B401909162
:102B7000B5016091BF0177270E94A32E7093400694
:102B800060933F068091C001882369F08091B6016F
:102B90009091B7016091C00177270E94A32E709396
:102BA0004E0660934D068091C1018823D9F1E090D3
:102BB0004A06F0904B066091BA017091BB012091DA
:102BC000C1010027F7FC0095102F5701680143E071
:102BD000AA0CBB1CCC1CDD1C4A95D1F7AE18BF0853
:102BE000C00AD10A882777FD8095982F34E0660FB8
:102BF000771F881F991F3A95D1F733274427552708
:102C00000E94D82EA20EB31EC41ED51EC601B50149
:102C100028E030E040E050E00E94D82E30934B0690
:102C200020934A068091C2018823D9F1E09053068F
:102C3000F09054066091B8017091B9012091C201E1
:102C40000027F7FC0095102F5701680183E0AA0CBC
:102C5000BB1CCC1CDD1C8A95D1F7AE18BF08C00A7E
:102C6000D10A882777FD8095982FB4E0660F771FEB
:102C7000881F991FBA95D1F73327442755270E94FB
:102C8000D82EA20EB31EC41ED51EC601B50128E063
:102C900030E040E050E00E94D82E3093540620935C
:102CA00053068091C3018823A1F1E0904406F0907F
:102CB00045066091BC017091BD012091C3010027C0
:102CC000F7FC0095102F57016801A3E0AA0CBB1C6C
:102CD000CC1CDD1CAA95D1F7AE18BF08C00AD10ADA
:102CE000882777FD8095982F3327442755270E9402
:102CF000D82EA20EB31EC41ED51EC601B50128E0F3
:102D000030E040E050E00E94D82E309345062093FA
:102D100044061092B3011092B2011092BE011092BB
:102D2000B5011092B4011092BF011092B701109238
:102D3000B6011092C0011092B9011092B801109220
:102D4000C2011092BB011092BA011092C1011092FF
:102D5000BD011092BC011092C301809115029091A7
:102D60001602A0911702B09118028093010290936D
:102D70000202A0930302B093040280910502909195
:102D80000602A0910702B09108028093F10190938E
:102D9000F201A093F301B093F40180910D029091A0
:102DA0000E02A0910F02B09110028093F90190934E
:102DB000FA01A093FB01B093FC018091090290916C
:102DC0000A02A0910B02B0910C028093F50190933E
:102DD000F601A093F701B093F80180911102909150
:102DE0001202A0911302B09114028093FD019093FE
:102DF000FE01A093FF01B09300028FEE80937A0052
:102E00008091410690914206893C91057CF0209189
:102E10004106309142068091410690914206880F0A
:102E2000991F880F991F2052334015C08091410689
:102E30009091420688539F4FA4F42091410630910F
:102E400042068091410690914206880F991F880F93
:102E5000991F205E3C4F820F931F909342068093F0
:102E6000410680913F0690914006893C91057CF097
:102E700020913F063091400680913F069091400698
:102E8000880F991F880F991F2052334015C08091D9
:102E90003F069091400688539F4FA4F420913F062F
:102EA0003091400680913F0690914006880F991F0F
:102EB000880F991F205E3C4F820F931F909340060E
:102EC00080933F062091290230912A0280910906C1
:102ED000E82FFF27EE0FFF1FE752FA4F8081918105
:102EE00082599F4F281739071CF42F5F3F4F0CC0A2
:102EF0008081918182599F4F821793074CF421154D
:102F0000310531F02150304030932A0220932902BC
:102F100020912B0230912C0280910A06E82FFF2786
:102F2000EE0FFF1FE752FA4F8081918182599F4F28
:102F3000281739071CF42F5F3F4F0CC08081918107
:102F400082599F4F821793074CF42115310531F0B8
:102F50002150304030932C0220932B0220912D02DF
:102F600030912E0280910B06E82FFF27EE0FFF1FF6
:102F7000E752FA4F8081918182599F4F2817390774
:102F80001CF42F5F3F4F0CC08081918182599F4F6D
:102F9000821793074CF42115310531F02150304050
:102FA00030932E0220932D0220912F023091300277
:102FB00080910C06E82FFF27EE0FFF1FE752FA4F14
:102FC0008081918182599F4F281739071CF42F5F08
:102FD0003F4F0CC08081918182599F4F8217930788
:102FE0004CF42115310531F021503040309330023E
:102FF00020932F028091290290912A0297FF05C009
:1030000010922A02109229020AC08F3F910539F0CE
:1030100034F08FEF90E090932A0280932902809100
:103020002B0290912C0297FF05C010922C02109257
:103030002B020AC08F3F910539F034F08FEF90E0FA
:1030400090932C0280932B0280912D0290912E025E
:1030500097FF05C010922E0210922D020AC08F3FDA
:10306000910539F034F08FEF90E090932E02809329
:103070002D0280912F029091300297FF05C010928F
:10308000300210922F020AC08F3F910539F034F0C0
:103090008FEF90E09093300280932F021F910F9159
:1030A000FF90EF90DF90CF90BF90AF900895109277
:1030B0007A008091BE01882369F08091B2019091DD
:1030C000B3016091BE0177270E94A32E7093420640
:1030D000609341068091BF01882369F08091B4011B
:1030E0009091B5016091BF0177270E94A32E709344
:1030F000400660933F068091C001882369F080916B
:10310000B6019091B7016091C00177270E94A32E6C
:1031100070934E0660934D068091C1018823D1F0D3
:103120006091BA017091BB012091C101882777FDA0
:103130008095982F34E0660F771F881F991F3A9566
:10314000D1F73327442755270E94D82E30934B06BA
:1031500020934A068091C2018823D1F06091B80182
:103160007091B9012091C201882777FD8095982F31
:10317000B4E0660F771F881F991FBA95D1F73327E0
:10318000442755270E94D82E309354062093530687
:103190008091C301882399F06091BC017091BD01B9
:1031A0002091C301882777FD8095982F33274427E6
:1031B00055270E94D82E309345062093440610923E
:1031C000B3011092B2011092BE011092B50110929B
:1031D000B4011092BF011092B7011092B601109283
:1031E000C0011092B9011092B8011092C201109260
:1031F000BB011092BA011092C1011092BD01109250
:10320000BC011092C3018FEE80937A0020912902B5
:1032100030912A0280910906E82FFF27EE0FFF1F49
:10322000E752FA4F8081918182599F4F28173907C1
:103230001CF42F5F3F4F0CC08081918182599F4FBA
:10324000821793074CF42115310531F0215030409D
:1032500030932A022093290220912B0230912C02D4
:1032600080910A06E82FFF27EE0FFF1FE752FA4F63
:103270008081918182599F4F281739071CF42F5F55
:103280003F4F0CC08081918182599F4F82179307D5
:103290004CF42115310531F02150304030932C028F
:1032A00020932B0220912D0230912E0280910B064B
:1032B000E82FFF27EE0FFF1FE752FA4F8081918121
:1032C00082599F4F281739071CF42F5F3F4F0CC0BE
:1032D0008081918182599F4F821793074CF4211569
:1032E000310531F02150304030932E0220932D02D1
:1032F00020912F023091300280910C06E82FFF2799
:10330000EE0FFF1FE752FA4F8081918182599F4F44
:10331000281739071CF42F5F3F4F0CC08081918123
:1033200082599F4F821793074CF42115310531F0D4
:10333000215030403093300220932F028091290297
:1033400090912A0297FF05C010922A02109229023A
:103350000AC08F3F910539F034F08FEF90E09093E1
:103360002A028093290280912B0290912C0297FFD0
:1033700005C010922C0210922B020AC08F3F9105BB
:1033800039F034F08FEF90E090932C0280932B0271
:1033900080912D0290912E0297FF05C010922E026F
:1033A00010922D020AC08F3F910539F034F08FEF53
:1033B00090E090932E0280932D0280912F029091A5
:1033C000300297FF05C01092300210922F0208952C
:1033D0008F3F910539F034F08FEF90E090933002F9
:1033E00080932F0208951F93809110068B3F98F0D1
:1033F0008B3F19F4809129020EC08C3F19F4809103
:103400002B0209C08D3F19F480912D0204C08E3F1C
:1034100021F480912F028093810180918101882382
:1034200019F41092810104C08F3F11F4809381013F
:1034300080910F068B3F98F08B3F19F48091290201
:103440000EC08C3F19F480912B0209C08D3F19F4F6
:1034500080912D0204C08E3F21F480912F02809331
:10346000800180918001882319F41092800105C0A9
:10347000843618F084E680938001809111068B3F9A
:1034800098F08B3F19F4809129020EC08C3F19F4FB
:1034900080912B0209C08D3F19F480912D0204C048
:1034A0008E3F21F480912F028093820180918201CE
:1034B000882319F41092820105C0843618F084E63E
:1034C00080938201809113068B3F98F08B3F19F413
:1034D000809129020EC08C3F19F480912B0209C003
:1034E0008D3F19F480912D0204C08E3F21F480910C
:1034F0002F028093830180918301882319F4109215
:10350000830104C08F3F11F48093830180911A06D8
:103510008B3F98F08B3F19F4809129020EC08C3FAD
:1035200019F480912B0209C08D3F19F480912D026E
:1035300004C08E3F21F480912F02809384018091FA
:103540008401882319F41092840104C08F3F11F480
:103550008093840180911B068B3F98F08B3F19F478
:10356000809129020EC08C3F19F480912B0209C072
:103570008D3F19F480912D0204C08E3F21F480917B
:103580002F0280938501809185018B3010F48AE0B1
:1035900002C08F3F11F48093850180911C068B3F00
:1035A00098F08B3F19F4809129020EC08C3F19F4DA
:1035B00080912B0209C08D3F19F480912D0204C027
:1035C0008E3F21F480912F028093860180918601A5
:1035D000882319F41092860104C08F3F11F4809360
:1035E0008601809121068B3F98F08B3F19F48091E2
:1035F00029020EC08C3F19F480912B0209C08D3F27
:1036000019F480912D0204C08E3F21F480912F0285
:103610008093880180918801882319F41092880191
:1036200004C08F3F11F480938801809122068B3F64
:1036300098F08B3F19F4809129020EC08C3F19F449
:1036400080912B0209C08D3F19F480912D0204C096
:103650008E3F21F480912F0280933D0280913D02A4
:10366000882319F410923D0204C08F3F11F4809317
:103670003D02809123068B3F98F08B3F19F4809197
:1036800029020EC08C3F19F480912B0209C08D3F96
:1036900019F480912D0204C08E3F21F480912F02F5
:1036A00080933E0280913E02882319F410923E02DC
:1036B00004C08F3F11F480933E02809124068B3F1B
:1036C00098F08B3F19F4809129020EC08C3F19F4B9
:1036D00080912B0209C08D3F19F480912D0204C006
:1036E0008E3F21F480912F0280933F0280913F0210
:1036F000882319F410923F0204C08F3F11F4809385
:103700003F02809125068B3F98F08B3F19F4809102
:1037100029020EC08C3F19F480912B0209C08D3F05
:1037200019F480912D0204C08E3F21F480912F0264
:103730008093400280914002882319F41092400245
:1037400004C08F3F11F480934002909126069B3F66
:10375000B0F09B3F19F48091290204C09C3F29F4EA
:1037600080912B02809389010CC09D3F19F48091B8
:103770002D02F8CF9E3F29F480912F02F3CF909332
:10378000890180918901882319F41092890104C06C
:103790008F3F11F4809389019B3FB0F09B3F19F458
:1037A0008091290204C09C3F29F480912B028093D0
:1037B00089010CC09D3F19F480912D02F8CF9E3FE6
:1037C00029F480912F02F3CF909389018091890190
:1037D000882319F41092890104C08F3F11F480935B
:1037E00089019B3FB0F09B3F19F48091290204C0EE
:1037F0009C3F29F480912B02809389010CC09D3F4E
:1038000019F480912D02F8CF9E3F29F480912F0268
:10381000F3CF9093890180918901882319F4109244
:10382000890104C08F3F11F48093890110918801B0
:10383000612F772767FD7095872F972F0E94E52CC2
:1038400017FF06C020E030E040E853E40E943A2C25
:1038500027E137EB41ED58E30E940C2E60937C0189
:1038600070937D0180937E0190937F018091180673
:1038700080934C0680911706809343061F9108950C
:1038800081E08093050642E04093060683E0809342
:10389000070624E02093080635E03093090686E009
:1038A00080930A0687E080930B0610920D068EE146
:1038B00080930E068BEF809310068AE080931106AA
:1038C00092E390930F069093130640931206209371
:1038D00014061092150680E1809316068FE08093FF
:1038E00017068AEF809318068AE18093190680E80C
:1038F00080931A068FEA80931B0680931C068AE544
:1039000080931D0683E280931E0684E180931F0648
:103910001092200630932106109222061092230660
:10392000109224061092250684E68093260688E2EB
:103930008093270610922B069093280686E98093A1
:10394000290630932A06A3E3B6E0E8E6F1E08CE02E
:1039500001900D928150E1F7089581E08093050672
:1039600052E05093060683E08093070644E04093BC
:10397000080635E03093090686E080930A0687E062
:1039800080930B0628E020930C0610920D069EE112
:1039900090930E068BEF809310068AE080931106B9
:1039A00086E480930F06909313065093120640937B
:1039B00014062093150680E1809316068FE080930D
:1039C00017068AEF809318068AE18093190680E82B
:1039D00080931A0688E780931B0696E990931C064D
:1039E0008AE580931D0683E280931E0684E180931E
:1039F0001F06109220063093210610922206109284
:103A00002306109224061092250684E6809326064B
:103A100088E28093270610922B0682E38093280683
:103A20009093290630932A06A3E3B6E0E0E7F1E09D
:103A30008CE001900D928150E1F708958091380259
:103A4000882301F51092ED021092EC021092080307
:103A50001092200380919801882311F08093EC024A
:103A600080919901882311F08093ED0280919A0151
:103A7000882311F08093200380919B01882311F00B
:103A8000809308038091EC029927909376058093A8
:103A900075058091ED0299279093780580937705BD
:103AA00080912003992790937A05809379058091DE
:103AB0000803992790937C0580937B051092CF0192
:103AC0001092D0010E9430140895CF93DF9310928A
:103AD000DE011092DD011092E0011092DF0180E022
:103AE00090E0A0E0B0E08093EB019093EC01A09314
:103AF000ED01B093EE011092D8011092D70110920F
:103B0000DA011092D9011092DC011092DB010E94BF
:103B1000571885E090E00E94110CEC01CE010E9444
:103B20001A0C8823D9F30E94571880910D0680FF44
:103B300010C080910A0190910B01875B934038F48B
:103B400080910A0190910B018E5E924010F40E94C8
:103B50003610809141069091420697FF03C09095E0
:103B600081959F4F9093D8018093D70180913F0614
:103B70009091400697FF03C0909581959F4F909339
:103B8000DA018093D90180914D0690914E0697FFFE
:103B900003C0909581959F4F9093DC018093DB014A
:103BA000809153069091540697FF03C0909581959C
:103BB0009F4F60E170E00E94A32E7093E00160933C
:103BC000DF0180914A0690914B0697FF03C09095C4
:103BD00081959F4F60E170E00E94A32E7093DE01FB
:103BE0006093DD016091C1057091C205882777FD62
:103BF0008095982F0E94E52C6093EB017093EC0167
:103C00008093ED019093EE0110920502109206024E
:103C100010920702109208021092090210920A02F2
:103C200010920B0210920C0210920D0210920E02D2
:103C300010920F02109210021092110210921202B2
:103C40001092130210921402109215021092160292
:103C5000109217021092180210924206109241061A
:103C60001092400610923F0610924E0610924D069A
:103C70008091060190910701A0910801B09109017E
:103C80009093C4058093C3051092C5011092C4019E
:103C900010921D0210921E0210921F02109220021A
:103CA000809121029091220290932402809323021A
:103CB00082E390E09093AC018093AB01DF91CF91D0
:103CC00008951F93182F0EC080913802882361F445
:103CD00084E690E09093AC018093AB018AEF90E092
:103CE0000E94FA0C115080F71F9108952F923F9275
:103CF0004F925F926F927F928F929F92AF92BF92FC
:103D0000CF92DF92EF92FF920F931F93CF93DF93A7
:103D1000CDB7DEB724970FB6F894DEBF0FBECDBF88
:103D20000E949615299AE0910706AE2FBB27AA0F8D
:103D3000BB1FA752BA4F0D90BC91A02D9D012858D2
:103D40003F4F3A83298337FF02C01A82198280913C
:103D50003102843608F04AC080910101882331F491
:103D600084EF91E09093AC018093AB0180914C0281
:103D700090914D02009731F0019790934D028093FE
:103D80004C0204C01092380210922702289A8091A7
:103D9000470290914802815D974028F180911E066C
:103DA000482F55275A83498381E080932702E09169
:103DB0000506FF27EE0FFF1FE752FA4F1182108210
:103DC000E0910606FF27EE0FFF1FE752FA4F118220
:103DD0001082E0910806FF27EE0FFF1FE752FA4F0F
:103DE00011821082CEC110923802CBC18091310273
:103DF0008D3808F4C6C11092270280911F0622E375
:103E0000829FC001112490934D0280934C026981DE
:103E10007A81693271056CF0809147029091480275
:103E20007FEF8F3F970781F101969093480280932F
:103E300047028091470290914802883C910520F00A
:103E400089819A81889704F5109262021092630228
:103E5000109264021092650210925E0210925F024C
:103E600010926002109261021092150210921602D6
:103E700010921702109218021092190210921A0250
:103E800010921B0210921C02E981FA81E93CF105B3
:103E90000CF4D6C080913802882309F072C1E091F9
:103EA0000806FF27EE0FFF1FE752FA4F808191812E
:103EB0008C3491050CF4C1C080914B028F5F8093CC
:103EC0004B02893C08F45DC129980E94651D10923F
:103ED000380210924B0210924802109247028091D1
:103EE0000506282F3327F901EE0FFF1FE752FA4F7F
:103EF00080819181873491059CF4E0910606FF272B
:103F0000EE0FFF1FE752FA4F0190F081E02DF7FF0F
:103F100003C0F095E195FF4FE734F1050CF46CC058
:103F200080910606682F7727DB01AA0FBB1FA752D7
:103F3000BA4F8D919C911197873491053CF0F9010E
:103F4000EE0FFF1FE752FA4F808191818D919C9176
:103F50008734910564F0F901EE0FFF1FE752FA4F25
:103F6000808191818734910514F042E001C041E0E5
:103F7000FB01EE0FFF1FE752FA4F808191818634DB
:103F800091055CF4F901EE0FFF1FE752FA4F8081B3
:103F90009181873491050CF043E0FB01EE0FFF1F88
:103FA000E752FA4F808191818A5B9F4F5CF4F9015F
:103FB000EE0FFF1FE752FA4F808191818734910500
:103FC0000CF044E0660F771F67527A4FFB01808147
:103FD00091818A5B9F4F5CF4220F331F27523A4F27
:103FE000F90180819181863491050CF445E0A2E0CD
:103FF000B0E0042E0E94FB2E0E940B024AE365E013
:1040000076E00E942A020E940B020E94611E8091AB
:104010000D0680FFB6C080910A0190910B01875B6D
:10402000934040F480910A0190910B018E5E924082
:1040300008F0A7C00E943610A4C010924B02A1C085
:1040400049815A81433251050CF09BC0809108068A
:10405000482F5527FA01EE0FFF1FE752FA4F8081D4
:104060009181855B9F4F0CF06DC080914A028F5FFC
:1040700080934A02893C08F467C088EC80934A0226
:1040800081E090E0909348028093470281E0809322
:10409000380210925A0210925B0210925C02109247
:1040A0005D021092150210921602109217021092E1
:1040B00018021092190210921A0210921B0210920A
:1040C0001C02109205021092060210920702109232
:1040D000080210920D0210920E0210920F0210921E
:1040E00010028091F1019091F201A091F301B09141
:1040F000F4018093090290930A02A0930B02B093FB
:104100000C028091F9019091FA01A091FB01B0910C
:10411000FC018093110290931202A0931302B093BA
:1041200014021092620210926302109264021092C2
:10413000650210925E0210925F021092600210926D
:10414000610202C010924A02440F551F47525A4F53
:10415000FA01808191818C3491058CF08091490223
:104160008F5F80934902893C60F01092380288EC9E
:1041700080934902109248021092470202C01092A6
:1041800049028091670181508093670180916701A6
:104190008F3F29F080912702882309F412C10E94E1
:1041A000F319E0910506FF27EE0FFF1FDF01A7526D
:1041B000BA4F8D919C91609114067727E151FA4F87
:1041C00020813181409115065527FC01E69FC001F1
:1041D000E79F900DF69F900D1124F901E49F900147
:1041E000E59F300DF49F300D1124820F931F9093A3
:1041F000330280933202E0910606FF27EE0FFF1F85
:10420000DF01A752BA4F8D919C91E151FA4F208165
:104210003181FC01E69FC001E79F900DF69F900D54
:104220001124B901649F9001659F300D749F300D7A
:104230001124820F931F9093350280933402E091F2
:104240000806FF27EE0FFF1FE752FA4F808191818A
:10425000909581959F4F90933702809336021091ED
:104260008501612F772767FD7095872F972F0E9413
:10427000E52C17FF06C020E030E040E853E40E9440
:104280003A2C20E030E040E251E40E943A2C20E059
:1042900030E040E85BE30E940C2E5B016C01609310
:1042A0004F067093500680935106909352061091DA
:1042B0008601612F772767FD7095872F972F0E94C2
:1042C000E52C17FF06C020E030E040E853E40E94F0
:1042D0003A2C20E030EE4BE257E40E94822C6093AF
:1042E000460670934706809348069093490680914E
:1042F0000D0682FF0CC080E090E0A0E0B0E080936B
:10430000460690934706A0934806B093490620E0DE
:1043100030E040E050E0C601B5010E941B2D88232B
:1043200064F480E090E0A0E0B0E080934F069093CA
:104330005006A0935106B093520620E030E040E0D2
:1043400050E0609146067091470680914806909132
:1043500049060E941B2D882364F480E090E0A0E0D1
:10436000B0E08093460690934706A0934806B0932A
:10437000490680912702882321F11092370210927A
:1043800036021092330210923202109235021092CD
:1043900034028DEC9CECACECBDE380934F06909323
:1043A0005006A0935106B09352068AE097EDA3EA17
:1043B000BBE38093460690934706A0934806B093CC
:1043C00049068091C6019091C7018D54914008F42F
:1043D000BCC02091F5013091F6014091F701509158
:1043E000F8018091F1019091F201A091F301B09157
:1043F000F401B901681B790B70935102609350026C
:104400002091FD013091FE014091FF015091000289
:104410008091F9019091FA01A091FB01B091FC010A
:10442000281B390B30934F0220934E021092C70184
:104430001092C601673A710534F08091D7019091CE
:10444000D801019608C06A557F4F4CF48091D7017E
:104450009091D80101979093D8018093D701273A82
:10446000310534F08091D9019091DA01019608C0AC
:104470002A553F4F4CF48091D9019091DA01019770
:104480009093DA018093D9018091190290911A02D8
:10449000A0911B02B0911C02873A9105A105B105BC
:1044A0004CF08091DB019091DC0101979093DC014D
:1044B0008093DB018091190290911A02A0911B0256
:1044C000B0911C028A559F4FAF4FBF4F4CF4809163
:1044D000DB019091DC0101969093DC018093DB017C
:1044E00010927A008091F1019091F201A091F30174
:1044F000B091F4018093090290930A02A0930B02F9
:10450000B0930C028091F9019091FA01A091FB0106
:10451000B091FC018093110290931202A0931302B8
:10452000B09314028091010290910202A0910302C3
:10453000B09104028093190290931A02A0931B0277
:10454000B0931C028FEE80937A006091F10170911C
:10455000F2018091F3019091F401A0901906BB241F
:10456000CC24DD24E0904A06F0904B06A60195018C
:104570000E94D82E0027F7FC0095102F2E193F0916
:10458000400B510BCA01B90120E130E040E050E09E
:104590000E94D82E39014A012093560230935702C7
:1045A00040935802509359026091F9017091FA01B9
:1045B0008091FB019091FC01E0905306F09054062D
:1045C000A60195010E94D82E0027F7FC0095102F18
:1045D0002E193F09400B510BCA01B90120E130E00F
:1045E00040E050E00E94D82E2093520230935302B4
:1045F0004093540250935502F5EF6F16F1E07F0699
:10460000F0E08F06F0E09F062CF084EF91E0A0E050
:10461000B0E00DC06CE066166EEF76066FEF8606B2
:104620006FEF960664F48CE09EEFAFEFBFEF8093E0
:10463000560290935702A0935802B0935902253F17
:1046400071E0370770E0470770E057072CF084EF00
:1046500091E0A0E0B0E009C02C503E4F4F4F5F4FBB
:1046600064F48CE09EEFAFEFBFEF80935202909323
:104670005302A0935402B093550210927A00809195
:10468000050290910602A0910702B09108022091C4
:104690005602309157024091580250915902821BA4
:1046A000930BA40BB50B8093050290930602A09385
:1046B0000702B093080280910D0290910E02A09122
:1046C0000F02B0911002209152023091530240919A
:1046D000540250915502821B930BA40BB50B80938F
:1046E0000D0290930E02A0930F02B09310028091DE
:1046F0003602909137025C01CC24B7FCC094DC2CCC
:10470000A0925A02B0925B02C0925C02D0925D020B
:1047100097FF03C0909581959F4F84973CF08091BF
:104720000D0684FD03C081E0809343026090150272
:10473000709016028090170290901802C501B7FE83
:1047400003C0909581959F4F7C010027F7FC009551
:10475000102F20911606332744275527C601B5018F
:104760000E94702E9B01AC01C801B7010E94702EFF
:1047700020E031E040E050E00E94D82E442737FD91
:104780004095542F621A730A840A950A60921502A2
:104790007092160280921702909218028091150270
:1047A00090911602A0911702B0911802815395477B
:1047B000A040B04064F080E395E7A0E0B0E08093D3
:1047C000150290931602A0931702B09318028091DD
:1047D000150290911602A0911702B0911802805D07
:1047E0009A48AF4FBF4F64F480ED9AE8AFEFBFEF48
:1047F0008093150290931602A0931702B0931802AB
:104800008FEE80937A008091210290912202892B71
:1048100009F4A1C080910D0683FF9DC06091F10154
:104820007091F2018091F3019091F40120E032E067
:1048300040E050E00E94D82E890137FF03C0109558
:1048400001951F4F6091F9017091FA018091FB0170
:104850009091FC0120E032E040E050E00E94D82E30
:10486000B90137FF03C0709561957F4F60177107DD
:104870000CF4B80169317105A4F4809143028823D6
:1048800081F08091410290914202892B51F48091F4
:10489000210290912202909324028093230210928D
:1048A0004302209184013327629FC001639F900DD2
:1048B000729F900D112460E470E00E94A32EA90164
:1048C000461B570B141615060CF03FC010927A00C9
:1048D00020914102309142022115310561F500918C
:1048E0001502109116022091170230911802809142
:1048F000250290912602BC01649FC001659F900D26
:10490000749F900D112460E270E00E94A32E88270E
:1049100077FD8095982F060F171F281F391F0093CA
:1049200015021093160220931702309318028FEE8F
:1049300080937A0010C08FEE80937A00215030402F
:10494000309342022093410206C084EF91E090939D
:1049500042028093410280913D02992790931B036C
:1049600080931A0380913E02992790931D038093B0
:104970001C0380913F02992790931703809316039D
:10498000809140022DE2829FC0011124909319036F
:104990008093180380910D0685FF23C089E190E084
:1049A00090930503809304038091290290912A0239
:1049B0001816190614F40E94792980912902909101
:1049C0002A02892B71F485E090E090931103809383
:1049D00010031092CB021092CA021092CD021092D4
:1049E000CC0280915C058F5F80935C0580914402CE
:1049F0008150809344028F3F09F078C081E3809317
:104A000044026091F1017091F2018091F301909163
:104A1000F401E0901906FF2400271127A80197014F
:104A20000E94D82E30935E0520935D056091F901B8
:104A30007091FA018091FB019091FC01A80197010E
:104A40000E94D82E3093600520935F0580914A061E
:104A500090914B0690936205809361058091530677
:104A600090915406909364058093630580914D0660
:104A700090914E069093660580936505809139026A
:104A800090913A02909368058093670560911D02AA
:104A900070911E0280911F029091200220E032E06E
:104AA00040E050E00E94D82E30936A0520936905BB
:104AB00089819A8190936C0580936B058091210286
:104AC0009091220290936E0580936D058091210252
:104AD000909122029093700580936F05809121023E
:104AE0009091220290937205809371056091F1017B
:104AF0007091F2018091F3019091F40120904606AB
:104B0000309047064090480650904906E090410694
:104B1000F090420660904F067090500680905106CB
:104B2000909052060E94E52CA20191010E940C2E49
:104B30005B016C010027F7FC0095102FC801B7013D
:104B40000E94E52CA40193010E940C2E9B01AC0154
:104B5000C601B5010E943A2C0E94C82C70934206EF
:104B6000609341066091F9017091FA018091FB0117
:104B70009091FC01E0903F06F09040060E94E52CE9
:104B8000A20191010E940C2E5B016C010027F7FC31
:104B90000095102FC801B7010E94E52CA4019301D4
:104BA0000E940C2E9B01AC01C601B5010E943A2C5B
:104BB0000E94C82C7093400660933F0660914D069A
:104BC00070914E06A0900102B0900202C0900302C4
:104BD000D0900402882777FD8095982F0E94E52CBD
:104BE0007B018C0120E030E040E05FE3C401B301D1
:104BF0000E940C2E9B01AC01C801B7010E940C2E33
:104C00007B018C01C601B5010E94E52CA201910136
:104C10000E940C2E9B01AC01C801B7010E943A2CE6
:104C20000E94C82C70934E0660934D0680914106F9
:104C3000909142068150984034F080E098E0909343
:104C40004206809341068091410690914206805031
:104C5000984F34F480E098EF909342068093410699
:104C600080913F06909140068150984034F080E05A
:104C700098E09093400680933F0680913F06909184
:104C800040068050984F34F480E098EF90934006AF
:104C900080933F0680914D0690914E06815098403A
:104CA00034F080E098E090934E0680934D0680911A
:104CB0004D0690914E068050984F34F480E098EF66
:104CC00090934E0680934D0680910D06992780FFA4
:104CD000CDC02091810181FF0EC02233B0F48091BC
:104CE000390290913A02449790933C0280933B02A0
:104CF000109228020DC080911206289FC001112435
:104D0000449790933C0280933B0281E08093280279
:104D100080912702882321F010923C0210923B02DE
:104D20002091390230913A0240913B0250913C026D
:104D3000421753070CF09AC080912802882309F487
:104D400095C0241B350B809182019927BC01269FB9
:104D5000C001279F900D369F900D112460E170E0F7
:104D60000E94A32E09811A81061B170B2091C401F2
:104D70003091C501809180019927FC012E9FC001CF
:104D80002F9F900D3E9F900D112468E070E00E94CF
:104D9000A32E061B170B60911D0270911E028091BD
:104DA0001F029091200220E032E040E050E00E949B
:104DB000D82ECA01B90120918301332744275527F2
:104DC0000E94702E20E230E040E050E00E94D82E99
:104DD000FFEF2E3C3F0714F42EEC3FEF809145028D
:104DE00090914602AC0174E0440F551F7A95E1F7AB
:104DF000481B590B2333310514F022E330E0021B2A
:104E0000130BCA01800F911F60E170E00E94A32E76
:104E1000709346026093450280910E0699276817A9
:104E200079078CF429813A81281739072CF090935F
:104E300046028093450207C049815A815093460239
:104E4000409345020DC080914502909146026981D0
:104E50007A816817790724F47093460260934502BB
:104E600080914502909146029A838983C0904D06B5
:104E7000D0904E0680915A0290915B02C81AD90ACE
:104E800095E6C916D10424F064E6C62ED12C09C0DB
:104E9000ECE9CE16EFEFDE0624F45CE9C52E5FEFF9
:104EA000D52E409078015090790160907A017090F1
:104EB0007B0160914106709142062091320230914F
:104EC00033024091CA025091CB02241B350B621B66
:104ED000730B882777FD8095982F0E94E52C9B0106
:104EE000AC01C301B2010E940C2E0E94C82C709329
:104EF00003036093020380910203909103038C01EA
:104F0000222717FD2095322F809162029091630233
:104F1000A0916402B0916502080F191F2A1F3B1F60
:104F2000009362021093630220936402309365023F
:104F30001016110612061306ACF4C80117FF03C0C1
:104F4000909581959F4F60E071E00E94A32E6F5F66
:104F50007F4F882777FD8095982F061B170B280B0E
:104F6000390B14C0C80117FF03C0909581959F4F5E
:104F700060E071E00E94A32E6F5F7F4F882777FD6E
:104F80008095982F060F171F281F391F0093620264
:104F90001093630220936402309365028091620251
:104FA00090916302A0916402B09165028138FEE3A2
:104FB0009F07F0E0AF07F0E0BF072CF080E89EE32A
:104FC000A0E0B0E009C08058914CAF4FBF4F64F4EF
:104FD00080E891ECAFEFBFEF8093620290936302A1
:104FE000A0936402B0936502609102037091030381
:104FF00080907C0190907D01A0907E01B0907F0117
:10500000882777FD8095982F0E94E52C7B018C01E5
:1050100060916202709163028091640290916502D6
:105020000E94E52C9B01AC01C501B4010E940C2E2D
:105030009B01AC01C801B7010E943A2C0E94C82C08
:105040009601260F371F49815A81240F351F2224CC
:105050004A30510514F441E0242E37FD02C02220CD
:1050600019F040E050E008C080914C06482F5527C9
:10507000241735070CF4A90180914306E82FFF2778
:10508000FC83EB839F01E417F5070CF49A0120934E
:10509000EC0229813A81261B370BB9016C0D7D1D6D
:1050A00077FD02C0222019F080E090E007C08091D7
:1050B0004C069927681779070CF4CB012B813C81AA
:1050C000281739070CF49C012093ED0260913F06EC
:1050D0007091400620913402309135024091CC020B
:1050E0005091CD02241B350B621B730B882777FD73
:1050F0008095982F0E94E52C9B01AC01C301B20161
:105100000E940C2E0E94C82C7093E9026093E80262
:105110008091E8029091E9028C01222717FD2095E9
:10512000322F80915E0290915F02A0916002B09157
:105130006102080F191F2A1F3B1F00935E02109384
:105140005F0220936002309361021016110612066E
:105150001306ACF4C80117FF03C0909581959F4FCB
:1051600060E071E00E94A32E6F5F7F4F882777FD7C
:105170008095982F061B170B280B390B14C0C801FC
:1051800017FF03C0909581959F4F60E071E00E94EA
:10519000A32E6F5F7F4F882777FD8095982F060F8E
:1051A000171F281F391F00935E0210935F02209380
:1051B00060023093610280915E0290915F02A09143
:1051C0006002B091610281383EE3930730E0A307AB
:1051D00030E0B3072CF080E89EE3A0E0B0E009C027
:1051E0008058914CAF4FBF4F64F480E891ECAFEF23
:1051F000BFEF80935E0290935F02A0936002B09332
:1052000061026091E8027091E902882777FD80953C
:10521000982F0E94E52C7B018C0160915E027091B9
:105220005F0280916002909161020E94E52C9B01D7
:10523000AC01C501B4010E940C2E9B01AC01C80158
:10524000B7010E943A2C0E94C82C29813A81260F6E
:10525000371F2C193D0937FD02C0222019F040E00C
:1052600050E008C080914C06482F55272417350779
:105270000CF4A9012B813C81241735070CF49A0109
:105280002093200389819A81861B970BBC016C199E
:105290007D0977FD02C0222019F020E030E008C02F
:1052A00080914C06282F3327621773070CF49B015B
:1052B0008B819C81821793070CF4C90180930803AA
:1052C00024960FB6F894DEBF0FBECDBFDF91CF910D
:1052D0001F910F91FF90EF90DF90CF90BF90AF9014
:1052E0009F908F907F906F905F904F903F902F9006
:1052F00008952F923F924F925F926F927F928F927A
:105300009F92AF92BF92CF92DF92EF92FF920F9354
:105310001F93CF93DF93CDB7DEB724970FB6F894E2
:10532000DEBF0FBECDBF80919505882309F47BC2F7
:105330008091060390910703019709F074C2809150
:10534000290290912A02181619060CF06CC280915D
:10535000100390911103892B51F180917D0590915B
:105360007E05A0917F05B09180058093F602909311
:10537000F702A093F802B093F90280918105909111
:105380008205A0918305B0918405809312039093C8
:105390001303A0931403B093150382E390E090935A
:1053A000AC018093AB011092110310921003209175
:1053B0001A0330911B036091F6027091F7028091FD
:1053C000F8029091F902E0907D05F0907E05009141
:1053D0007F05109180056E197F09800B910B442782
:1053E00037FD4095542F0E94702E3B014C01609375
:1053F00068027093690280936A0290936B02209115
:105400001A0330911B036091120370911303809172
:10541000140390911503E0908105F09082050091AE
:105420008305109184056E197F09800B910B442729
:1054300037FD4095542F0E94702E1B012C01609364
:105440006C0270936D0280936E0290936F02609174
:105450001C0370911D03709561957F4F882777FD20
:105460008095982F2091890530918A0540918B0570
:1054700050918C050E94702E7B018C016093780204
:105480007093790280937A0290937B0260911C035F
:1054900070911D03709561957F4F882777FD8095EA
:1054A000982F20918D0530918E0540918F05509158
:1054B00090050E94702E5B016C0160937C027093DA
:1054C0007D0280937E0290937F0280910D0683FF80
:1054D0002CC18091180390911903209123023091DF
:1054E0002402820F931F909367028093660280913B
:1054F0006602909167028856914054F0809166024E
:10550000909167028856914090936702809366025B
:105510008091660290916702AA2797FDA095BA2F05
:1055200020918A0130918B0140918C0150918D0125
:1055300082179307A407B50709F46CC0609166024F
:1055400070916702882777FD8095982F0E94E52C3F
:105550002BED3FE049E450E40E940C2E20E030E0C7
:1055600044E353E40E94822C0E94542E20E030E059
:1055700048EC52E40E940C2E0E94EF2C20E030E018
:1055800048EC52E40E94822C6093C2027093C302E2
:105590008093C4029093C502609166027091670285
:1055A000882777FD8095982F0E94E52C2BED3FE012
:1055B00049E450E40E940C2E20E030E044E353E440
:1055C0000E94822C0E947C2C20E030E048EC52E4C7
:1055D0000E940C2E0E94EF2C20E030E048EC52E4B8
:1055E0000E94822C6093C6027093C7028093C80207
:1055F0009093C9028091660290916702AA2797FD55
:10560000A095BA2F80938A0190938B01A0938C016F
:10561000B0938D012091160330911703C401B3019B
:105620006E0D7F1D801F911F442737FD4095542F1D
:105630000E94D82E79018A012093CE023093CF02A6
:105640004093D0025093D10220911603309117035A
:10565000C201B1016A0D7B1D8C1D9D1D442737FDC4
:105660004095542F0E94D82E2093D2023093D3021B
:105670004093D4025093D5028091C2029091C3020C
:10568000A091C402B091C50289839A83AB83BC8385
:10569000CA01B9010E94E52C5B016C016090C60251
:1056A0007090C7028090C8029090C902C801B701EB
:1056B0000E94E52C1B012C01A601950169817A81CC
:1056C0008B819C810E940C2E7B018C01A201910197
:1056D000C401B3010E940C2E9B01AC01C801B701AB
:1056E0000E943A2C0E94C82C7093CB026093CA028D
:1056F000A6019501C401B3010E940C2E7B018C010F
:10570000A201910169817A818B819C810E940C2E7A
:105710009B01AC01C801B7010E94392C0E94C82C22
:105720007093CD026093CC0228C020911603309173
:105730001703C401B3016E0D7F1D801F911F442705
:1057400037FD4095542F0E94D82E3093CB022093E2
:10575000CA022091160330911703C201B1016A0DEC
:105760007B1D8C1D9D1D442737FD4095542F0E94A5
:10577000D82E3093CD022093CC028091CA02909112
:10578000CB0222273327281B390B3093CB022093DF
:10579000CA028091040390910503821793072CF4A9
:1057A000809104039091050311C0809104039091AE
:1057B0000503909581959F4F281739075CF48091D8
:1057C000040390910503909581959F4F9093CB0290
:1057D0008093CA022091CC023091CD0280910403C3
:1057E00090910503821793072CF480910403909104
:1057F000050311C080910403909105039095819554
:105800009F4F281739075CF480910403909105039A
:10581000909581959F4F9093CD028093CC021092EA
:1058200007031092060324960FB6F894DEBF0FBE4E
:10583000CDBFDF91CF911F910F91FF90EF90DF903F
:10584000CF90BF90AF909F908F907F906F905F9020
:105850004F903F902F900895FC014150504030F000
:1058600001900616D1F73197CF010895882799271F
:1058700008955058192E72D101D022C1BA1762076B
:10588000730784079507B1F188F40EF410940B2E7A
:10589000BA2FA02D062E622F202D072E732F302D0C
:1058A000082E842F402D092E952F502DFF2755238C
:1058B000B9F0591B49F0573E98F046953795279512
:1058C000A795F0405395C9F776F0BA0F621F731F82
:1058D000841F30F4879577956795B795F040939539
:1058E00017FA0F2E0895BF1BBB27BA0B620B730B61
:1058F000840BF6CFDEF65EC150E449EC3FE02BEDC1
:1059000087D0BBC02BD101D0DBC0552359F09923E0
:1059100069F09F575F57951B33F442F4903811F4A8
:10592000915805C0E5C091589F3F09F443C1BB277A
:10593000112462177307840730F4660F771F881FDE
:10594000BB1F915098F311D00F920FD00F920DD032
:10595000A0E82617370748071B0609F0A048BA2F0A
:10596000602D7F918F9100240895A0E80024621794
:1059700073078407B10528F0621B730B840BB10910
:105980000A2A660F771F881FBB1FA69581F7089507
:1059900097FBF0D09F3738F0FEE9F91B982F872F3F
:1059A000762F6B2F05C003C19695879577956795E0
:1059B000F150D0F73EF490958095709561957F4FAA
:1059C0008F4F9F4F0895E89403C097FB0EF4F3DFC9
:1059D000B62F672F782F892F9EE9002471C0D8D069
:1059E0009F3760F40EF0E3C09FEB80E877276627CF
:1059F0000895869577956795B11D93959639C8F367
:105A00002EF4BB2319F06F5F7F4F8F4FBB2758C019
:105A10005F77552319F444230AF06AC02F933F930C
:105A20004F935F936FDF55274427C6D05F914F9107
:105A30003F912F91F1C00ED05EF004C00BD026F044
:105A400001C008D019F020F48FEF089580E0089588
:105A500081E0089597FB092E052600F8689481D00F
:105A6000E89407FC07C0621773078407950721F0C5
:105A700008F400940794989408951F939F7750EC2E
:105A800049E43FE02BEDF6DE10E89F775FE349EC59
:105A90003FE02BED621773078407950720F050EC69
:105AA00049E4E8DE112713D19068E0E7F0E023D065
:105AB00091271F9108959A95BB0F661F771F881F26
:105AC00011249923A1F08823B2F79F3F59F0BB0F0F
:105AD00048F421F4002011F460FF04C06F5F7F4F91
:105AE0008F4F9F4F881F9795879597F908955FC0AF
:105AF0009FEF80EC0895FF92EF92DF92CF92BF92DA
:105B00006B017C01B59016D0B590BB2069F09F93D6
:105B10008F937F936F93B601C7010CD02F913F9164
:105B20004F915F910E94822CBF90CF90DF90EF90B9
:105B3000FF900895D0D002C09601A701EF93FF9384
:105B40000E940C2EFF91EF91C6D0EF93FF930E941D
:105B50003A2CFF91EF91BA9479F70895052E092612
:105B600007FA440F551F5F3F79F0AA27A51708F0E1
:105B700051E04795880F991F9F3F31F0BB27B91718
:105B800008F091E0879508959F919F911124B0CFDF
:105B900097FB880F991F9F3F31F0BB27B91708F07B
:105BA00091E0879508959F919F911124A1CF662739
:105BB0007727882799270895EBDFCF93DF93D52F99
:105BC000C42F55274427332722279923D9F09F37FD
:105BD000C8F0F92F75DF592F482F372F262FF639A8
:105BE00068F4D6DEF2DEC030CD0721F069937993F8
:105BF000899399939058DF91CF913CCE992788272C
:105C000077276627C030CD0721F029933993499330
:105C10005993DF91CF9154CFA1DF01D051CF992378
:105C200039F0552329F09F575F57950F13F49AF1D8
:105C3000C1CF91589F3FE1F3629FA12D0F92BB27E7
:105C4000639FA00DB11DEE27729FA00DB11DEE1F29
:105C5000AF93AA27649FB00DE11D739FB00DE11DA6
:105C6000AA1F6627829FB00DE11DA61F5527749FAE
:105C7000E00DA11D551F839FE00DA11D561F849FA0
:105C8000A00D511D852F7A2F6E2F1F900F90882306
:105C90001AF4939539F42CCF000C111CBB1F661F0E
:105CA000771F881F012808959F939F77993358F095
:105CB00050E449EC3FE02BEDABDE5FEB49EC3FE01D
:105CC0002BEDD8DDDADE5F915078952708959B01A2
:105CD000AC010C940C2E5591459135912591089568
:105CE000629FD001739FF001829FE00DF11D649FC0
:105CF000E00DF11D929FF00D839FF00D749FF00D4C
:105D0000659FF00D9927729FB00DE11DF91F639FEC
:105D1000B00DE11DF91FBD01CF0111240895AA1B8B
:105D2000BB1B51E107C0AA1FBB1FA617B70710F086
:105D3000A61BB70B881F991F5A95A9F780959095B8
:105D4000BC01CD01089597FB092E07260AD077FDE7
:105D500004D0E5DF06D000201AF4709561957F4FDE
:105D60000895F6F7909581959F4F0895A1E21A2E18
:105D7000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FEF
:105D8000A217B307E407F50720F0A21BB30BE40B3F
:105D9000F50B661F771F881F991F1A9469F7609586
:105DA0007095809590959B01AC01BD01CF01089540
:105DB00097FB092E05260ED057FD04D0D7DF0AD059
:105DC000001C38F450954095309521953F4F4F4F2A
:105DD0005F4F0895F6F790958095709561957F4F88
:105DE0008F4F9F4F0895F999FECFB2BDA1BDF89A8C
:105DF000119600B40895F999FECFB2BDA1BD00BCC3
:105E000011960FB6F894FA9AF99A0FBE0895FFCF3B
:105E100001640A016400007D0000FF030102030425
:105E200005060708090A48616C6C6F2057656C7499
:105E30000000000000000000000000000000000062
:105E40000000000000000000000000000000000052
:105E50000000000000000000000000000000000042
:105E60000000000000000000000000000000000032
:105E70000000000000000A014B616D6572610000C6
:105E80004E6F726D616C00000000803F17B7D13813
:0E5E900030FB103A403296020A648403000090
:00000001FF
/branches/Chris_hallo/_Settings.h
0,0 → 1,50
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Testmodi
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define MOTOR_OFF 0
#define MOTOR_TEST 0
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Abstimmung
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ACC_AMPLIFY 16
#define FAKTOR_P 1
#define FAKTOR_I 0.0001
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debug-Interface
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Sender
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define K_NICK 0
#define K_ROLL 1
#define K_GAS 2
#define K_GIER 3
#define K_POTI1 4
#define K_POTI2 5
#define K_POTI3 6
#define K_POTI4 7
// +++++++++++++++++++++++++++++++
// + Getestete Settings:
// +++++++++++++++++++++++++++++++
// Setting: Kamera
// Stick_P:3
// Stick_D:0
// Gyro_P: 175
// Gyro_I: 175
// Ki_Anteil: 10
// +++++++++++++++++++++++++++++++
// + Getestete Settings:
// +++++++++++++++++++++++++++++++
// Setting: Normal
// Stick_P:2
// Stick_D:8
// Gyro_P: 80
// Gyro_I: 150
// Ki_Anteil: 5
 
/branches/Chris_hallo/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
for(off=0; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ay = ADC - NeutralAccX;
accumulate_AccNick += Aktuell_ay;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - NeutralAccZ;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
kanal = 3;
state = 7;
}
else
{
kanal = 0;
state = 0;
}*/
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/Chris_hallo/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/Chris_hallo/eeprom.c
--- Chris_hallo/fc.c (nonexistent)
+++ Chris_hallo/fc.c (revision 171)
@@ -0,0 +1,828 @@
+/*#######################################################################################
+Flight Control
+#######################################################################################*/
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) 04.2007 Holger Buss
+// + Nur für den privaten Gebrauch
+// + www.MikroKopter.com
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
+// + bzgl. der Nutzungsbedingungen aufzunehmen.
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
+// + Verkauf von Luftbildaufnahmen, usw.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
+// + eindeutig als Ursprung verlinkt werden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
+// + Benutzung auf eigene Gefahr
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
+// + mit unserer Zustimmung zulässig
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
+// + this list of conditions and the following disclaimer.
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
+// + from this software without specific prior written permission.
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
+// + for non-commercial use (directly or indirectly)
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
+// + with our written permission
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
+// + clearly linked as origin
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// + POSSIBILITY OF SUCH DAMAGE.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "main.h"
+
+unsigned char h,m,s;
+volatile unsigned char Timeout = 0;
+volatile int MesswertNick,MesswertRoll,MesswertGier;
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
+volatile float NeutralAccZ = 0;
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
+volatile long IntegralNick = 0,IntegralNick2 = 0;
+volatile long IntegralRoll = 0,IntegralRoll2 = 0;
+volatile long Integral_Gier = 0;
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
+volatile long Mess_Integral_Hoch = 0;
+volatile int KompassValue = 0;
+volatile int KompassStartwert = 0;
+volatile int KompassRichtung = 0;
+unsigned char MAX_GAS,MIN_GAS;
+unsigned char Notlandung = 0;
+unsigned char HoehenReglerAktiv = 0;
+
+float GyroFaktor;
+float IntegralFaktor;
+
+volatile int DiffNick,DiffRoll;
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
+unsigned char MotorWert[5];
+volatile unsigned char SenderOkay = 0;
+int StickNick = 0,StickRoll = 0,StickGier = 0;
+char MotorenEin = 0;
+int HoehenWert = 0;
+int SollHoehe = 0;
+
+float Kp = FAKTOR_P;
+float Ki = FAKTOR_I;
+
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
+unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
+unsigned char Parameter_UserParam1 = 0;
+unsigned char Parameter_UserParam2 = 0;
+unsigned char Parameter_UserParam3 = 0;
+unsigned char Parameter_UserParam4 = 0;
+unsigned char Parameter_ServoNickControl = 100;
+struct mk_param_struct EE_Parameter;
+
+void Piep(unsigned char Anzahl)
+{
+ while(Anzahl--)
+ {
+ if(MotorenEin) return; //auf keinen Fall im Flug!
+ beeptime = 100;
+ Delay_ms(250);
+ }
+}
+
+//############################################################################
+// Nullwerte ermitteln
+void SetNeutral(void)
+//############################################################################
+{
+ unsigned int timer;
+ NeutralAccX = 0;
+ NeutralAccY = 0;
+ NeutralAccZ = 0;
+ AdNeutralNick = 0;
+ AdNeutralRoll = 0;
+ AdNeutralGier = 0;
+ CalibrierMittelwert();
+ timer = SetDelay(5);
+ while (!CheckDelay(timer));
+ CalibrierMittelwert();
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ AdNeutralNick= abs(MesswertNick);
+ AdNeutralRoll= abs(MesswertRoll);
+ AdNeutralGier= abs(MesswertGier);
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
+ NeutralAccZ = Aktuell_az;
+
+ Mess_IntegralNick = 0;
+ Mess_IntegralNick2 = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralRoll2 = 0;
+ Mess_Integral_Gier = 0;
+ MesswertNick = 0;
+ MesswertRoll = 0;
+ MesswertGier = 0;
+ StartLuftdruck = Luftdruck;
+ HoeheD = 0;
+ Mess_Integral_Hoch = 0;
+ KompassStartwert = KompassValue;
+ beeptime = 50;
+}
+
+//############################################################################
+// Bildet den Mittelwert aus den Messwerten
+void Mittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ Integral_Gier = Mess_Integral_Gier;
+// Integral_Gier2 = Mess_Integral_Gier2;
+ IntegralNick = Mess_IntegralNick;
+ IntegralRoll = Mess_IntegralRoll;
+ IntegralNick2 = Mess_IntegralNick2;
+ IntegralRoll2 = Mess_IntegralRoll2;
+ // ADC einschalten
+ ANALOG_ON;
+
+//------------------------------------------------------------------------------
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
+ else
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
+
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
+ else
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
+//------------------------------------------------------------------------------
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Messwerte beim Ermitteln der Nullage
+void CalibrierMittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ // ADC einschalten
+ ANALOG_ON;
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Senden der Motorwerte per I2C-Bus
+void SendMotorData(void)
+//############################################################################
+{
+ if(MOTOR_OFF || !MotorenEin)
+ {
+ Motor_Hinten = 0;
+ Motor_Vorne = 0;
+ Motor_Rechts = 0;
+ Motor_Links = 0;
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0];
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1];
+ if(MotorTest[2]) Motor_Links = MotorTest[2];
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3];
+ }
+
+ DebugOut.Analog[12] = Motor_Vorne;
+ DebugOut.Analog[13] = Motor_Hinten;
+ DebugOut.Analog[14] = Motor_Links;
+ DebugOut.Analog[15] = Motor_Rechts;
+
+ //Start I2C Interrupt Mode
+ twi_state = 0;
+ motor = 0;
+ i2c_start();
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Konstanten
+// + 0-250 -> normale Werte
+// + 251 -> Poti1
+// + 252 -> Poti2
+// + 253 -> Poti3
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DefaultKonstanten1(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Normal\0", 12);
+}
+
+void DefaultKonstanten2(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Kamera\0", 12);
+}
+
+
+//############################################################################
+// Trägt ggf. das Poti als Parameter ein
+void ParameterZuordnung(void)
+//############################################################################
+{
+
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
+
+ unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
+ unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
+ unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
+
+
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+
+ Ki = (float) Parameter_I_Faktor * 0.0001;
+ MAX_GAS = EE_Parameter.Gas_Max;
+ MIN_GAS = EE_Parameter.Gas_Min;
+}
+
+
+//############################################################################
+//
+void MotorRegler(void)
+//############################################################################
+{
+ int motorwert,pd_ergebnis,h,tmp_int;
+ int GierMischanteil,GasMischanteil;
+ static long SummeNick=0,SummeRoll=0;
+ static long sollGier = 0,tmp_long,tmp_long2;
+ static int IntegralFehlerNick = 0;
+ static int IntegralFehlerRoll = 0;
+ static unsigned int RcLostTimer;
+ static unsigned char delay_neutral = 0;
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
+ static unsigned int modell_fliegt = 0;
+ static int hoehenregler = 0;
+ static char TimerWerteausgabe = 0;
+ static char NeueKompassRichtungMerken = 0;
+ Mittelwert();
+
+ GRN_ON;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gaswert ermitteln
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
+ if(GasMischanteil < 0) GasMischanteil = 0;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang schlecht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay < 100)
+ {
+ if(!PcZugriff) beeptime = 500;
+ if(RcLostTimer) RcLostTimer--;
+ else
+ {
+ MotorenEin = 0;
+ Notlandung = 0;
+ }
+ ROT_ON;
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
+ {
+ GasMischanteil = EE_Parameter.NotGas;
+ Notlandung = 1;
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
+/* Poti1 = 65;
+ Poti2 = 48;
+ Poti3 = 0;
+*/ }
+ else MotorenEin = 0;
+ }
+ else
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang gut
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay > 140)
+ {
+ Notlandung = 0;
+ RcLostTimer = EE_Parameter.NotGasZeit * 50;
+ if(GasMischanteil > 40)
+ {
+ if(modell_fliegt < 0xffff) modell_fliegt++;
+ }
+ if((modell_fliegt < 200) || (GasMischanteil < 40))
+ {
+ SummeNick = 0;
+ SummeRoll = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ }
+ if((GasMischanteil > 200) && MotorenEin == 0)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// auf Nullwerte kalibrieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
+ {
+ unsigned char setting;
+ if(++delay_neutral > 200) // nicht sofort
+ {
+ GRN_OFF;
+ SetNeutral();
+ MotorenEin = 0;
+ delay_neutral = 0;
+ modell_fliegt = 0;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
+ {
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
+ }
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
+ Piep(GetActiveParamSetNumber());
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ }
+ }
+ else delay_neutral = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gas ist unten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(GasMischanteil < 35)
+ {
+ // Starten
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Einschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(++delay_einschalten > 200)
+ {
+ delay_einschalten = 200;
+ modell_fliegt = 1;
+ MotorenEin = 1;
+ sollGier = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ Mess_IntegralNick = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ SummeNick = 0;
+ SummeRoll = 0;
+ }
+ }
+ else delay_einschalten = 0;
+ //Auf Neutralwerte setzen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Auschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
+ {
+ if(++delay_ausschalten > 200) // nicht sofort
+ {
+ MotorenEin = 0;
+ delay_ausschalten = 200;
+ modell_fliegt = 0;
+ }
+ }
+ else delay_ausschalten = 0;
+ }
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// neue Werte von der Funke
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(!NewPpmData-- || Notlandung)
+ {
+ ParameterZuordnung();
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
+
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
+
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
+ if(GyroFaktor < 0) GyroFaktor = 0;
+ if(IntegralFaktor < 0) IntegralFaktor = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Bei Empfangsausfall im Flug
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(Notlandung)
+ {
+ StickGier = 0;
+ StickNick = 0;
+ StickRoll = 0;
+ GyroFaktor = 0.1;
+ IntegralFaktor = 0.005;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gyro-Drift kompensieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define DRIFT_FAKTOR 3
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
+ {
+ IntegralFehlerNick = IntegralNick2 - IntegralNick;
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
+ ZaehlMessungen = 0;
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
+ if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
+ if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ Mess_Integral_Gier2 = Integral_Gier;
+ ANALOG_ON; // ADC einschalten
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Integrale auf ACC-Signal abgleichen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
+#define AUSGLEICH 500
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick -= tmp_long;
+ Mess_IntegralRoll -= tmp_long2;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sollGier = StickGier;
+ if(abs(StickGier) > 35)
+ {
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
+ }
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
+ Mess_Integral_Gier -= tmp_int;
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
+
+ ANALOG_ON; // ADC einschalten
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Kompass
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ //KompassValue = 12;
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
+ {
+ int w,v;
+ static int SignalSchlecht = 0;
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
+ v = abs(IntegralRoll /512);
+ if(v > w) w = v; // grösste Neigung ermitteln
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
+ {
+ KompassStartwert = KompassValue;
+ NeueKompassRichtungMerken = 0;
+ }
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
+ if(w > 0)
+ {
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
+ ANALOG_ON; // ADC einschalten
+ if(SignalSchlecht) SignalSchlecht--;
+ }
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// GPS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+if(EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)
+{
+ gps_p = Parameter_UserParam1;
+ gps_d = Parameter_UserParam2;
+
+ gps_main();
+}
+else
+{
+ GPS_Nick = 0;
+ GPS_Roll = 0;
+}
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debugwerte zuordnen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DebugOut.Sekunden++;
+ if(!TimerWerteausgabe--)
+ {
+ TimerWerteausgabe = 49;
+// DebugOut.Analog[0] = MesswertNick;
+// DebugOut.Analog[1] = MesswertRoll;
+// DebugOut.Analog[2] = MesswertGier;
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[2] = Mittelwert_AccNick;
+ DebugOut.Analog[3] = Mittelwert_AccRoll;
+ DebugOut.Analog[4] = MesswertGier;
+ DebugOut.Analog[5] = HoehenWert;
+ DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
+ DebugOut.Analog[7] = GasMischanteil;
+ DebugOut.Analog[8] = KompassValue;
+// DebugOut.Analog[9] = SollHoehe;
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
+// DebugOut.Analog[11] = KompassStartwert;
+// DebugOut.Analog[10] = Parameter_Gyro_I;
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
+// DebugOut.Analog[9] = KompassRichtung;
+// DebugOut.Analog[10] = GasMischanteil;
+// DebugOut.Analog[3] = HoeheD * 32;
+// DebugOut.Analog[4] = hoehenregler;
+ }
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
+
+ // Maximalwerte abfangen
+ #define MAX_SENSOR 2048
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Höhenregelung
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//OCR0B = 180 - (Poti1 + 120) / 4;
+//DruckOffsetSetting = OCR0B;
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
+ {
+ int tmp_int;
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
+ {
+ if(Parameter_MaxHoehe < 50)
+ {
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
+ HoehenReglerAktiv = 0;
+ }
+ else
+ HoehenReglerAktiv = 1;
+ }
+ else
+ {
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
+ HoehenReglerAktiv = 1;
+ }
+
+ if(Notlandung) SollHoehe = 0;
+ h = HoehenWert;
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
+ h = GasMischanteil - h; // vom Gas abziehen
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
+ if(tmp_int > 50) tmp_int = 50;
+ else if(tmp_int < -50) tmp_int = -50;
+ h -= tmp_int;
+ hoehenregler = (hoehenregler*15 + h) / 16;
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
+ {
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
+ }
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
+ GasMischanteil = hoehenregler;
+ }
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Mischer und PI-Regler
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gier-Anteil
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier
+ if(GierMischanteil > 100) GierMischanteil = 100;
+ if(GierMischanteil < -100) GierMischanteil = -100;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Nick-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
+ SummeNick += DiffNick; // I-Anteil
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
+ if(SummeNick > 16000) SummeNick = 16000;
+ if(SummeNick < -16000) SummeNick = -16000;
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
+ // Motor Vorn
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Vorne = motorwert;
+ // Motor Heck
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Hinten = motorwert;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Roll-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
+ SummeRoll += DiffRoll; // I-Anteil
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
+ if(SummeRoll > 16000) SummeRoll = 16000;
+ if(SummeRoll < -16000) SummeRoll = -16000;
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
+ // Motor Links
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Links = motorwert;
+ // Motor Rechts
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Rechts = motorwert;
+ // +++++++++++++++++++++++++++++++++++++++++++++++
+
+}
+
/branches/Chris_hallo/fc.h
0,0 → 1,106
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
#define STRUCT_PARAM_LAENGE 58
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
 
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/Chris_hallo/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="fc.c"></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="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File></Project>
/branches/Chris_hallo/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/Chris_hallo/format
0,0 → 1,0
5
/branches/Chris_hallo/gps.h
0,0 → 1,4
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_BerechneZielrichtung(void);
/branches/Chris_hallo/main.c
0,0 → 1,210
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
 
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/Chris_hallo/main.h
0,0 → 1,101
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~0x01
#define ROT_ON PORTB |= 0x01
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTD ^= 0x02
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
 
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
long durchschnitt_northing;
long durchschnitt_easting;
 
volatile int gps_p; //P-Anteil (10)
volatile int gps_d; //D-Anteil (4)
volatile int skal; //Skalierungsfaktor der Regelung (alter Wert: 10) (20)
 
volatile int gps_gethome;
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_Settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/Chris_hallo/makefile
0,0 → 1,391
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/Chris_hallo/menu.c
0,0 → 1,118
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 10,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
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,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/Chris_hallo/menu.h
0,0 → 1,5
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/Chris_hallo/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/Chris_hallo/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/Chris_hallo/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/Chris_hallo/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
/* if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen */
}
}
}
 
 
 
 
 
/branches/Chris_hallo/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/Chris_hallo/readme.txt
0,0 → 1,84
GPS-Modifikation auf Basis der Original V0.6 by Holger Buss & Ingo Busker
 
----- BETA V0.2-----
 
 
Copyright by Christopher Hartmann und Daniel Schmitz.
 
-Disclaimer-
Wir übernehmen keinerlei Garantie für die Funktionstüchtigkeit dieser Software
jegliche Änderung geschehen auf Eigene Gefahr
für eventuelle Schäden übernehmen wir keinerlei Haftung
 
 
 
 
______
 
 
Parametrierung ist noch nicht abgeschlossen !!!!
 
Kompass nicht integriert !!!! -> Ufo muss nach Norden ausgerichtet sein !!!!!!
 
Im Koptertool nicht vergessen GPS zu aktivieren !
 
 
Testparamter : P:2 / D:2
 
________ ***************ÄNDERUNGEN****************************
 
 
folgende Änderungen am GPS-Empfänger vornehmen (siehe auch Pitschu Anleitung für Details)
 
folgende Einstellungen werden nicht mehr benötigt (muss nicht zwingend deaktiviert werden)
 
unter Messages:
-NAV-POSLLH
-NAV-POSUTM
-NAV-VELNED
folgende Einstellungen müssen aktiviert werden: (für Target1)
 
 
unter Messages:
-NAV-POSECEF
-NAV-VELECEF
 
_________******************************************************
 
 
features:
 
 
-Auslesen der GPS Daten im UBX Protokoll (modifizierte Version, - Original von Pitschu (Peter Schulten) )
 
- integrierter PD Regler - Parametrierung des P-, D-Anteils (der D-Anteil sollte ggf. durch Änderung im Quelltext weiter verkleinert werden)
User Parameter 1: P-Regler, 2:D-Regler
 
- Rotationsmatrix für Kompass
 
- Postiton Hold (Aktivierung über Poti 1 ( 0=Aus , >0 =aktiviert)
- kruzes Piepsen bestätigt Aktivierung des PH
 
- rote LED der Flight-Ctrl für Statusanzeige: (blinkend : GPS Aktiv)
- Aktivierung des Postiton-Hold ohne Empfang von GPS unterbunden
 
- Einbinden des GPS-Empfängers bitte Erklärung von PITSCHU aus XUFO-Forum entnehmen (http://forum.xufo.net/bb/viewtopic.php?t=5980)
----- BAUDRATE einstellen auf 57600 ------
 
 
 
_____
 
in Planung: (TWI: teilweise Integriert, siehe Quelltext -- UNGETESTET -- )
 
- Kompass (TWI)
- dynamische Parametrierung anhand der mittleren Abweichung der GPS Daten (höhrere Genauigkeit im PH)
-"Home Postition" (TWI)
- Eingangsdatenfilterung (Kompensation von Ungenauigkeit)
- Auslagerung auf externen Prozessor
 
….
 
 
/branches/Chris_hallo/timer0.c
0,0 → 1,139
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<2);
}
else
PORTD &= ~(1<<2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/Chris_hallo/timer0.h
0,0 → 1,14
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
/branches/Chris_hallo/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/Chris_hallo/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/Chris_hallo/uart.c
0,0 → 1,656
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// +
// + GPS read out:
// + modified Version of the Pitschu Brushless Ufo - (c) Peter Schulten, Mülheim, Germany
// + only for non-profit use
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
static uint8_t gpsState;
#define GPS_EMPTY 0
#define GPS_SYNC1 1
#define GPS_SYNC2 2
#define GPS_CLASS 3
#define GPS_LEN1 4
#define GPS_LEN2 5
#define GPS_FILLING 6
#define GPS_CKA 7
#define GPS_CKB 8
 
//gpsInfo_t gpsPoints[5]; // stored position to fly to (currently only 1 target supported)
//gpsInfo_t *gpsTarget; // points to one of the targets
gpsInfo_t actualPos; // measured position (last gps record)
 
#define SYNC_CHAR1 0xb5
#define SYNC_CHAR2 0x62
 
#define CLASS_NAV 0x01
#define MSGID_POSECEF 0x01
#define MSGID_STATUS 0x03
//#define MSGID_POSLLH 0x02
#define MSGID_VELECEF 0x11
//#define MSGID_POSUTM 0x08
//#define MSGID_VELNED 0x12
 
 
 
typedef struct {
unsigned long ITOW; // time of week
uint8_t GPSfix; // GPSfix Type, range 0..6
uint8_t Flags; // Navigation Status Flags
uint8_t DiffS; // Differential Status
uint8_t res; // reserved
unsigned long TTFF; // Time to first fix (millisecond time tag)
unsigned long MSSS; // Milliseconds since Startup / Reset
uint8_t packetStatus;
} NAV_STATUS_t;
 
/*
typedef struct {
unsigned long ITOW; // time of week
long LON; // longitude in 1e-07 deg
long LAT; // lattitude
long HEIGHT; // height in mm
long HMSL; // height above mean sea level im mm
unsigned long Hacc; // horizontal accuracy in mm
unsigned long Vacc; // vertical accuracy in mm
uint8_t packetStatus;
} NAV_POSLLH_t;
 
 
typedef struct {
unsigned long ITOW; // time of week
long EAST; // cm UTM Easting
long NORTH; // cm UTM Nording
long ALT; // cm altitude
uint8_t ZONE; // UTM zone number
uint8_t HEM; // Hemisphere Indicator (0=North, 1=South)
uint8_t packetStatus;
} NAV_POSUTM_t;
 
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long VEL_N; // cm/s NED north velocity
long VEL_E; // cm/s NED east velocity
long VEL_D; // cm/s NED down velocity
unsigned long Speed; // cm/s Speed (3-D)
unsigned long GSpeed; // cm/s Ground Speed (2-D)
long Heading; // deg (1e-05) Heading 2-D
unsigned long SAcc; // cm/s Speed Accuracy Estimate
unsigned long CAcc; // deg Course / Heading Accuracy Estimate
uint8_t packetStatus;
} NAV_VELNED_t;
*/
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long ECEF_X; // ecef x / cm
long ECEF_Y; // ecef y / cm
long ECEF_Z; // ecef z / cm
unsigned long Pacc; // Abweichung
uint8_t packetStatus;
} NAV_POSECEF_t ;
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long ECEFVX; // ecef x velocity cm/s
long ECEFVY; // ecef y velocity cm/s
long ECEFVZ; // ecef z velocity cm/s
unsigned long SAcc; // Abweichung
uint8_t packetStatus;
} NAV_VELECEF_t;
 
 
NAV_STATUS_t navStatus;
NAV_POSECEF_t navPosECEF;
NAV_VELECEF_t navVelECEF;
 
//NAV_POSLLH_t navPosLlh;
//NAV_POSUTM_t navPosUtm;
//NAV_VELECEF avVelNed;
 
volatile char *ubxP, *ubxEp, *ubxSp; // pointers to packet currently transfered
volatile uint8_t CK_A, CK_B; // UBX checksum bytes
volatile unsigned short msgLen;
volatile uint8_t msgID;
volatile uint8_t ignorePacket; // true when previous packet was not processed
 
 
// distance to target position
long rollOffset; // in 10cm
long nickOffset;
 
#define GPS_INTCYCLES 100
#define GPS_I_LIMIT (long)(40 * MAINLOOPS_PER_SEC)
 
#ifdef GPS_DEBUG // if set then the GPS data is transfered to display
extern volatile uint8_t v24state;
char buf[200];
char *bp;
char *ep;
#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
void GPSscanData (void)
{
 
 
if (navPosECEF.packetStatus == 1) // valid packet
{
actualPos.x = navPosECEF.ECEF_X; //ECEF X in cm
actualPos.y = navPosECEF.ECEF_Y; //ECEF Y in cm
actualPos.z = navPosECEF.ECEF_Z; //ECEF Z in cm
navPosECEF.packetStatus = 0;
}
 
if (navStatus.packetStatus == 1) // valid packet
{
actualPos.state = navStatus.GPSfix;
navStatus.packetStatus = 0;
}
if (navVelECEF.packetStatus == 1) // valid packet
{
actualPos.vx = navVelECEF.ECEFVX; //ECEF VEL X in cm/s
actualPos.vy = navVelECEF.ECEFVY; //ECEF VEL Y in cm/s
actualPos.vz = navVelECEF.ECEFVZ; //ECEF VEL Z in cm/s
navVelECEF.packetStatus = 0;
}
/*
if (navPosUtm.packetStatus == 1) // valid packet
{
actualPos.northing = navPosUtm.NORTH; ///10; // in 10cm;
actualPos.easting = navPosUtm.EAST; //10;
actualPos.altitude = navPosUtm.ALT; //10;
navPosUtm.packetStatus = 0;
}
 
 
if (navPosLlh.packetStatus == 1)
navPosLlh.packetStatus = 0;
if (navVelNed.packetStatus == 1){
actualPos.velNorth = navVelNed.VEL_N;
actualPos.velEast = navVelNed.VEL_E;
navVelNed.packetStatus = 0;}
 
navPosLlh and navVelNed currently not used
*/
 
if (actualPos.state != 0){ROT_ON;} //-> Rot blinkt mit 4Hz wenn GPS Signal brauchbar
 
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
uint8_t c;
uint8_t re;
 
re = (UCSR0A & (_B1(FE0) | _B1(DOR0))); // any error occured ?
c = SioTmp;
#ifdef GPS_DEBUG
*bp++ = c;
if (bp >= (buf+200)) bp = buf;
if (v24state == 0)
{
v24state = 1;
UDR0 = *ep++;
if (ep >= buf+200)
ep = buf;
UCSR0B |= _B1(UDRIE0); //enable further irqs
}
#endif
 
if (re == 0)
{
switch (gpsState)
{
case GPS_EMPTY:
if (c == SYNC_CHAR1)
gpsState = GPS_SYNC1;
break;
case GPS_SYNC1:
if (c == SYNC_CHAR2)
gpsState = GPS_SYNC2;
else if (c != SYNC_CHAR1)
gpsState = GPS_EMPTY;
break;
case GPS_SYNC2:
if (c == CLASS_NAV)
gpsState = GPS_CLASS;
else
gpsState = GPS_EMPTY;
break;
case GPS_CLASS: // msg ID seen: init packed receive
msgID = c;
CK_A = CLASS_NAV + c;
CK_B = CLASS_NAV + CK_A;
gpsState = GPS_LEN1;
 
switch (msgID)
{
case MSGID_STATUS:
ubxP = (char*)&navStatus;
ubxEp = (char*)(&navStatus + sizeof(NAV_STATUS_t));
ubxSp = (char*)&navStatus.packetStatus;
ignorePacket = navStatus.packetStatus;
break;
case MSGID_POSECEF:
ubxP = (char*)&navPosECEF;
ubxEp = (char*)(&navPosECEF + sizeof(NAV_POSECEF_t));
ubxSp = (char*)&navPosECEF.packetStatus;
ignorePacket = navPosECEF.packetStatus;
break;
case MSGID_VELECEF:
ubxP = (char*)&navVelECEF;
ubxEp = (char*)(&navVelECEF + sizeof(NAV_VELECEF_t));
ubxSp = (char*)&navVelECEF.packetStatus;
ignorePacket = navVelECEF.packetStatus;
break;
/*
case MSGID_POSLLH:
ubxP = (char*)&navPosLlh;
ubxEp = (char*)(&navPosLlh + sizeof(NAV_POSLLH_t));
ubxSp = (char*)&navPosLlh.packetStatus;
ignorePacket = navPosLlh.packetStatus;
break;
case MSGID_POSUTM:
ubxP = (char*)&navPosUtm;
ubxEp = (char*)(&navPosUtm + sizeof(NAV_POSUTM_t));
ubxSp = (char*)&navPosUtm.packetStatus;
ignorePacket = navPosUtm.packetStatus;
break;
case MSGID_VELNED:
ubxP = (char*)&navVelNed;
ubxEp = (char*)(&navVelNed + sizeof(NAV_VELNED_t));
ubxSp = (char*)&navVelNed.packetStatus;
ignorePacket = navVelNed.packetStatus;
break;
*/
default:
ignorePacket = 1;
ubxSp = (char*)0;
}
break;
case GPS_LEN1: // first len byte
msgLen = c;
CK_A += c;
CK_B += CK_A;
gpsState = GPS_LEN2;
break;
case GPS_LEN2: // second len byte
msgLen = msgLen + (c * 256);
CK_A += c;
CK_B += CK_A;
gpsState = GPS_FILLING; // next data will be stored in packet struct
break;
case GPS_FILLING:
CK_A += c;
CK_B += CK_A;
 
if ( !ignorePacket && ubxP < ubxEp)
*ubxP++ = c;
 
if (--msgLen == 0)
gpsState = GPS_CKA;
break;
case GPS_CKA:
if (c == CK_A)
gpsState = GPS_CKB;
else
gpsState = GPS_EMPTY;
break;
case GPS_CKB:
if (c == CK_B && ubxSp) // No error -> packet received successfully
*ubxSp = 1; // set packetStatus in struct
gpsState = GPS_EMPTY; // ready for next packet
break;
default:
gpsState = GPS_EMPTY; // ready for next packet
}
}
else // discard any data if error occured
{
gpsState = GPS_EMPTY;
GPSscanData (); //Test kann ggf. wieder gelöscht werden!
}
GPSscanData ();
 
 
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
unsigned char tmp_char_arr3[3];
unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
gpsState = GPS_EMPTY;
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/Chris_hallo/uart.h
0,0 → 1,118
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
#define _B1(bit) (1 << (bit))
#define _B0(bit) (0 << (bit))
 
typedef struct {
long x; // in cm (+ = north)
long y; // in cm (+ = east)
long z; // in cm
long vx;
long vy;
long vz;
//long groundSpeed;
//long heading;
 
uint8_t state; // status of data: 0 = invlid; 1 = valid
uint8_t noSV; // number of sats
} gpsInfo_t;
 
 
extern gpsInfo_t lockedPos; // stored position to fly to
extern gpsInfo_t actualPos; // measured position (last gps record)
 
extern void GPSscanData (void);
extern void GPSupdate(void);
extern void GPSsaveTarget (uint8_t mode);
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/FLightCtrl/GPS.c
0,0 → 1,30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
}
 
void GPS_BerechneZielrichtung(void)
{
GPS_Nick = 0;
GPS_Roll = 0;
}
 
 
 
 
/branches/FLightCtrl/Hex-Files/BootLoader_MEGA644_20MHZ_V0_1.hex
0,0 → 1,64
:10F8000011241FBECFEFD0E1DEBFCDBF11E0A0E0DD
:10F81000B1E0E0EEFBEF02C005900D92A030B10721
:10F82000D9F712E0A0E0B1E001C01D92A230B1070B
:10F83000E1F70C943B7C0C941D7C0895982F8091EB
:10F84000C00085FFFCCF9093C60008958091C00052
:10F850008823E4F78091C600992708958DE40E94DB
:10F860001E7C8BE40E941E7C82E40E941E7C8CE441
:10F870000E941E7C0895CFEFD0E1DEBFCDBFE0E057
:10F88000F0E014915F01772474BE98E10FB6F8940C
:10F8900090936000109260000FBE7092C5008AE2E3
:10F8A0008093C4008091C00082608093C0009093D8
:10F8B000C10086E08093C200EF01072D8091C00057
:10F8C00087FF0DC0013031F48091C6008A3AB1F152
:10F8D00000E005C08091C6008B3109F401E0CE0143
:10F8E00021968436910528F11F3F41F0112331F014
:10F8F000E0910001F091010109951BC01092C50033
:10F900008AE28093C4008AE00E941E7C8DE00E94FF
:10F910001E7C86E50E941E7C80E30E941E7C8EE297
:10F920000E941E7C81E30E941E7C8AE30E941E7C52
:10F9300005C080E593EC0197F1F7C0CF0E942E7CC3
:10F940000E94267C813611F489E547C1813471F427
:10F950000E94267CA82EBB24BA2CAA240E94267CB6
:10F960009927A82AB92AB694A79406C1823629F401
:10F9700089E50E941E7C81E00BC1823409F083C0BE
:10F980000E94267C9927D82FCC270E94267C992775
:10F99000C82BD92B0E94267C082F12E0812E11E063
:10F9A000912EEE24FF2464010894811C911CEC1616
:10F9B000FD0618F40E94267C01C08FEFD6018C93BF
:10F9C0000894E11CF11CBFEFEB16F10461F358F34E
:10F9D000E4E77E1609F0DEC0063409F03DC0FFEF13
:10F9E000AF16F7EFBF0608F033C0DE01A5016627AA
:10F9F0007727440F551F661F771F6A017B01C2E0FE
:10FA0000D1E001E08991992729913327322F2227CC
:10FA1000822B932B0C01FA0100935700E8951124D7
:10FA20004E5F5F4F6F4F7F4F129761F785E0F60192
:10FA300080935700E89507B600FCFDCF81E18093E5
:10FA40005700E89576956795579547955A0194C064
:10FA500080E00E941E7C90C0053409F08DC0F50145
:10FA60009E01A2E0B1E0E1BD8F2F992782BD8D916B
:10FA700080BD3196FA9AF99AF999FECF215030401B
:10FA800091F75F0179C0873609F047C00E94267C54
:10FA90009927D82ECC240E94267C9927C82AD92AB7
:10FAA0000E94267C863411F5E6016501EE24FF24D0
:10FAB000CC0CDD1CEE1CFF1CF60105911491802F6F
:10FAC0000E941E7C812F99270E941E7C82E090E07C
:10FAD000A0E0B0E0C80ED91EEA1EFB1E229761F717
:10FAE000F694E794D794C79456012ACF853409F049
:10FAF00027CF7501E1BC8F2D992782BDF89A089414
:10FB0000E11CF11C80B50E941E7C0894C108D1083C
:10FB1000C114D10479F7570113CF853601F594E765
:10FB2000791651F580E090E0A0E0B0E023E0FC0120
:10FB300020935700E89507B600FCFDCF80509F4FFB
:10FB4000AF4FBF4F8F3FE7EF9E07E0E0AE07E0E02B
:10FB5000BE0768F381E180935700E8950DC08534B6
:10FB600069F488E190E02CE00FB6F894A8958093B2
:10FB700060000FBE209360008DE02FC08035E1F360
:10FB80008C34D1F3803711F483E527C0843721F416
:10FB90000E941E7C80E021C0843521F40E94267CD6
:10FBA000782EEACF8B3109F4C9CE8A3A09F4C6CE51
:10FBB000863529F480E30E941E7C81E30EC08337E2
:10FBC00041F489E00E941E7C86E90E941E7C8EE141
:10FBD00004C08B3109F4B4CE8FE30E941E7CB0CEFA
:040000030000F80001
:00000001FF
/branches/FLightCtrl/Hex-Files/BrushLess-Ctrl_16kHz_ADR1_V0_31.hex
0,0 → 1,286
:1000000012C05DC52AC029C0C3C5C5C426C025C04D
:10001000B1C4F8C322C0EFC220C0BCC21EC01DC004
:10002000C1C561C51AC011241FBECFE5D4E0DEBF33
:10003000CDBF10E0A0E6B0E0E8EBF1E102C0059032
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73AC1D2CF20918200B6
:1000600080916100821710F4282FAB9A8091800054
:10007000909181008338910560F01BBC1ABC19BCBB
:1000800018BC13BCAB9A01979093810080938000B9
:100090000895822F9927880F991F9BBD8ABD99BD0E
:1000A00088BD23BD089582E08FBD81E485BD85B301
:1000B000817F85BB89E08EBD089592B7980F82B786
:1000C000891B87FDFCCF0895AF92BF92CF92DF923C
:1000D000EF92FF920F931F93CF93DF93182F8CE231
:1000E000A82E81E0B82EC12CD12C109297004398F5
:1000F00085E090E09093830080938200AFDF57D635
:1001000088EC90E0DDD3C12FDD27D0938300C0932E
:100110008200EE24FF248701EA14FB040C051D0570
:1001200078F480916600882311F43ED201C050D348
:1001300084E6C3DF0894E11CF11C011D111DECCF06
:10014000C601B5012FE030E040E050E013D8A21A1C
:10015000B30AC40AD50A0894A108B108C108D10895
:1001600089E1A816B104C104D104C8F020D6809159
:1001700099008F5F809399008091990066E0DAD7AB
:1001800090939900AED3D0938300C093820066DF32
:10019000449BBFCF82B390E8892782BBBACFDF915F
:1001A000CF911F910F91FF90EF90DF90CF90BF9074
:1001B000AF90089540917A0050917B004115510510
:1001C00009F04BC080917900882371F090918800EC
:1001D0008FEF989FC001112468EC70E0B7D770933F
:1001E00085006093840041C080918E00882341F196
:1001F000209190003091910081E02D32380708F075
:100200009A01293C310510F028EC30E02B30310503
:1002100028F4509385004093840026C08CEF90E032
:10022000289FA001299F500D389F500D1124CA010D
:10023000885D994064EB70E089D7CB01039610C0CC
:100240008091840090918500009729F00197909308
:10025000850080938400AB9A08C080918803992719
:100260009093850080938400AB9880918400909156
:1002700085008F3F910539F030F08FEF90E090933B
:10028000850080938400809184009927089580914F
:100290008000909181009093780380937703809100
:1002A0007E00992790937A03809379038091700060
:1002B0009091710090937C0380937B0380919000D8
:1002C0009091910090937E0380937D030895CFE5F4
:1002D000D4E0DEBFCDBFEE2488E084BB85BB8AEBD3
:1002E00081BB80E882BB8EE087BB81E388BB5BD2A9
:1002F000CAD27894C0E0D0E0C130D10509F4979A11
:1003000086E990E0DDD297988AEF90E0D9D22196E5
:10031000C530D1058CF384EF91E0D2D244D2C3DE54
:1003200080E5DCD31AD385E690E0B6D286E690E08D
:10033000B3D287E690E0B0D2EC018EEF90E0ACD281
:100340005C018DEE93E0A8D28C018EEE93E0A4D2F6
:100350006C01CE01AAD28823E1F3979A1092830010
:10036000109282007BDE88E080BF81E087B98AE05E
:1003700090E092D2EC0181E090E090937A03809338
:100380007903109291001092900014DF99279093B6
:10039000830080938200809199008E1551F0109215
:1003A00062001092630082E390E076D2EC01E0906C
:1003B00099008091820090918300892BC9F410925A
:1003C000740010926300C80170D28823D9F0109293
:1003D0009700439881E08093620082B3877C82BB60
:1003E00082E08FBD81E485BD85B3817F85BB0AC076
:1003F00080916200882319F081E0809374008CED75
:1004000095E04AD280916200882321F01092830007
:100410001092820023DE809163008F5F80936300DF
:10042000813009F0B2CF809162008111979AC501A5
:100430003CD2882339F182E390E02ED25C01809196
:100440007E00482F5527209180003091810042176F
:10045000530710F48F5F04C02417350718F4815038
:1004600080937E0080917E0090916100823428F01C
:10047000915090936100AB9A05C09F3F19F09F5F28
:1004800090936100C80111D2882319F18AE090E0AD
:1004900003D28C012091720030917300C901880F42
:1004A000991F880F991F820F931F820F931F66E079
:1004B00070E04CD6709371006093700010927300DE
:1004C0001092720080918E00882319F481E080934D
:1004D0006000C601EAD1882321F08CED95E0DCD1E3
:1004E0006C01CE01E2D1882331F0809170009091AF
:1004F0007100892B29F080917400882309F445CF7D
:1005000021E0F22EF092620010929700439884E668
:1005100090E0C2D1EC0180917400882309F435CFBA
:10052000AB98109274008AE0CFDD979A1092620027
:100530008091990081508093990081E090E09093A0
:100540008300809382008ADD88B18C7F88B9F09225
:10055000970088B18A6088B984E690E09DD1EC016B
:10056000CE01A3D18823E1F38AE090E09093830049
:100570008093820073DD88EC90E08ED1EC01CE0197
:1005800094D18823E1F388EE93E086D1EC0197E0E3
:10059000E92EFBCE1F920F920FB60F9211240F90EF
:1005A0000FBE0F901F9018955E9B24C0809166002F
:1005B0008823E1F48091890090918A0001969093BC
:1005C0008A0080938900FC01E556FD4FE081ED3003
:1005D00019F08436910539F410928A00109289003E
:1005E00081E080936600589AECB9089510928A00D1
:1005F0001092890008951F920F920FB60F92112446
:100600008F938CB18093870080918700853F19F488
:100610001092670014C0809167008F5F809367001D
:10062000813041F4809187008093880088EC80932A
:10063000790005C0853618F084E6809367008F91B5
:100640000F900FBE0F901F901895AC01A0E0B0E086
:100650009D01A817B90748F4EBE9F2E08191280F52
:10066000311D1196A417B507C8F33F70FD01E5567B
:10067000FD4FC90146E0969587954A95E1F7835C61
:1006800080831196FD01E556FD4F2F733070822F48
:10069000835C8083A456BD4F8DE08C9310926600DE
:1006A00080919B028CB908951F93CF93DF93382FCD
:1006B000EA01722F10E083E280939B0260939C0218
:1006C00030939D02A3E0B0E0772309F458C077236C
:1006D00011F4972F07C0FE01E10FF11D1F5F9081FC
:1006E000715011F4472F0EC0FE01E10FF11D1F5F85
:1006F0004081715039F0FE01E10FF11D1F5F6081F3
:10070000715001C0672FFD01E556FD4F892F869579
:100710008695835C80831196FD01E556FD4F892FF8
:1007200099278370907024E0880F991F2A95E1F72C
:1007300055279A0194E0369527959A95E1F7822BF3
:10074000835C80831196FD01E556FD4F4F7050701C
:10075000440F551F440F551F862F992756E0969535
:1007600087955A95E1F7842B835C80831196FD0170
:10077000E556FD4F6F73635C60831196A5CFCD0185
:1007800064DFDF91CF911F910895CF93C82F8A30F6
:1007900011F48DE0FADF5D9BFECFCCB980E090E0F4
:1007A000CF910895089588E18AB9599A579A89E1B5
:1007B00089B960E070E085EC93E05FD388EC90E06D
:1007C0006BD0909300038093FF028AE28CB9089566
:1007D0008091FF029091000368D0882391F080916E
:1007E0006600882371F022E245E653E060919A02A8
:1007F00084E45ADF82E390E04FD09093000380932B
:10080000FF0208951F920F920FB60F9211248F933B
:100810009F93809187038F5F8093870380918D00E2
:10082000815080938D008F3F39F583E080938D0058
:1008300080918B0090918C00019690938C00809316
:100840008B0080917A0090917B00009729F00197AE
:1008500090937B0080937A0080918E00882329F00A
:1008600080918E00815080938E0080917900882342
:1008700019F08150809379009F918F910F900FBE56
:100880000F901F90189582E083BF89B7816089BF60
:1008900089B7806489BF089520918B0030918C00C6
:1008A000280F391FC9010197089520918B003091BD
:1008B0008C00821B930B892F9927807899270895A4
:1008C000CF93DF93E9DFEC01CE01EFDF8823E1F383
:1008D000DF91CF91089586EA86B987E087B9369A85
:1008E000089527B196E097B910BE83ED86B9349A82
:1008F00097B9369A349BFECF27B944B155B1440F0E
:10090000551F440F551F493C510510F048EC50E06D
:100910002091800030918100C90163E0880F991F08
:100920006A95E1F7821B930B840F951F23E0969540
:1009300087952A95E1F7909381008093800020911C
:100940007F0033272817390720F480918000809397
:100950007F0016B888E080BF08958EB5806C8EBD8C
:100960008EB580648EBD89B7806289BF89B7846087
:1009700089BF08951F920F920FB60F9211248F9383
:1009800080918F008F5F80938F008F910F900FBEAB
:100990000F901F9018951F920F920FB60F9211246F
:1009A0002F933F938F939F930EB406FE0FC0109228
:1009B0008F0086B597B590939300809392008EB583
:1009C0008F7B8EBD84E680938E0070C08EB5806470
:1009D0008EBD26B537B58091920090919300281B6B
:1009E000390B80918F009927982F8827990F280F0E
:1009F000391F689414F8369527951694E1F73093CB
:100A00009500209394002851314030F488E191E022
:100A100090939500809394002091940030919500DC
:100A2000285131403093950020939400809190009C
:100A3000909191008217930730F4809190009091EB
:100A4000910001960CC08091900090919100281720
:100A5000390748F48091900090919100019790930C
:100A60009100809390002091900030919100C901F5
:100A7000880F991F880F991F880F991F821B930B4E
:100A80002091940030919500820F931F23E096955A
:100A900087952A95E1F79093950080939400909321
:100AA00091008093900081E0809360009F918F91EE
:100AB0003F912F910F900FBE0F901F9018951F928E
:100AC0000F920FB60F9211248F938AB78F7B8ABF34
:100AD0008F910F900FBE0F901F9018958E5F82B967
:100AE00085EC86BF08951F920F920FB60F921124C6
:100AF0008F939F9381B19927887F9070803891055B
:100B0000E9F08138910534F40097B1F18036910510
:100B100079F035C0883B9105D9F0893B910524F4E3
:100B2000883A9105A9F02BC0883F910511F127C0A3
:100B300086B7806886BF1092960023C083B18093E9
:100B4000880384EF91E090937B0080937A000EC03D
:100B500090919600992339F480917E0083B99F5F2C
:100B60009093960003C08091610083B986B7806836
:100B700007C086B7806986BF86B7806986BF85EC67
:100B800086BF9F918F910F900FBE0F901F90189569
:100B90001F920F920FB60F9211240F900FBE0F905D
:100BA0001F9018951F920F920FB60F9211241F934A
:100BB0002F933F934F935F936F937F938F939F9365
:100BC000AF93BF93CF93EF93FF93459B02C011E088
:100BD00001C010E08091990099278230910509F4B5
:100BE00050C0833091052CF4009779F0019739F1CA
:100BF000BFC08430910509F478C0843091050CF4AD
:100C00005AC0059709F48BC0B3C082EA8FBD81E654
:100C100085BD88E087BB112369F082B3877E82BBE4
:100C2000959AC1E0C4BD8091600081115ADE409860
:100C3000C7B91BC082B3877D82BB949A99C082B327
:100C4000877E82BB959A1123B1F482EA8FBD81E43D
:100C500085BD8CE087BB81E084BD809160008111FF
:100C600040DE17B988B1836088B9809199008F5FA1
:100C7000809399006DC082EA8FBD81E685BD88E0D2
:100C800076C082EA8FBD81E485BD8CE087BB1123ED
:100C900069F082B38F7C82BB939A81E084BD80919E
:100CA000600081111EDE82E087B932C082B3877E88
:100CB00082BB959A5DC082B38F7C82BB939A1123CD
:100CC00071F482EA8FBD81E485BD8AE087BBC1E013
:100CD000C4BD80916000811104DEC7B9C3CF82EA30
:100CE0008FBD81E485BD8CE042C082EA8FBD81E486
:100CF00085BD8AE087BB112369F082B3877D82BB03
:100D0000949A81E084BD809160008111EADD17B87A
:100D10004098ABCF82B38F7C82BB939A29C082B3B9
:100D2000877D82BB949A1123E9F482EA8FBD81E624
:100D300085BD88E087BB81E084BD80916000811122
:100D4000D0DD82E087B988B1836088B910939900BB
:100D5000809172009091730001969093730080933C
:100D6000720006C082EA8FBD81E485BD8AE087BB40
:100D7000459903C0112309F028CF459B03C01123D7
:100D800009F423CF10926000FF91EF91CF91BF91B2
:100D9000AF919F918F917F916F915F914F913F9113
:100DA0002F911F910F900FBE0F901F90189580915B
:100DB000990099278230910551F1833091052CF4E7
:100DC000009769F00197B9F0089584309105E1F139
:100DD000843091055CF1059709F443C0089582EAD7
:100DE0008FBD81E685BD88E087BB82B3877D82BBEE
:100DF000949A82E034C082EA8FBD81E685BD88E0A6
:100E000087BB82B3877E82BB959A81E01AC082EA53
:100E10008FBD81E485BD8CE087BB82B3877E82BBBA
:100E2000959A17B888B1836088B9089582EA8FBD12
:100E300081E485BD8CE087BB82B38F7C82BB939AB3
:100E400082E087B94098089582EA8FBD81E485BD2C
:100E50008AE087BB82B38F7C82BB939A81E087B99B
:100E6000E1CF82EA8FBD81E485BD8AE087BB82B392
:100E7000877D82BB949A17B8E5CF0F931F93CF93CA
:100E8000DF938C01EB01009711F4672BB9F16EE051
:100E900070E081E090E037D0FC01892B71F180E8AF
:100EA0008383209771F0D387C28781E88383809101
:100EB000890390918A03892B21F4F0938A03E093AC
:100EC000890301151105C9F01187008783818260AC
:100ED000838380918B0390918C03892B71F4F09321
:100EE0008C03E0938B0380918D0390918E03892B6B
:100EF00021F4F0938E03E0938D03CF01DF91CF9126
:100F00001F910F9108950F931F93CF93DF93869FA7
:100F10008001879F100D969F100D1124C8010DD0E0
:100F2000EC01009721F0A80160E070E0FCD0CE0158
:100F3000DF91CF911F910F910895CF93DF93AC0173
:100F4000029710F442E050E020E030E0A0919103DD
:100F5000B0919203BD01F901109709F44CC08D9135
:100F60009C9111978417950731F14817590738F468
:100F70002115310519F08217930708F49C01FD0132
:100F8000A281B381109759F721153105A1F1C9014B
:100F9000841B950B049708F4A901DB01E0E0F0E065
:100FA000109749F18D919C91119782179307F9F44D
:100FB0004217530779F4ED018A819B81309719F02C
:100FC0009383828304C09093920380939103CD0115
:100FD00002964AC0241B350BFD01E20FF31F41931B
:100FE0005193225030402D933C93CF013DC0FD01E1
:100FF000A281B381D5CF80918F0390919003892BEB
:1010000041F480916B0090916C00909390038093D9
:101010008F03E0916900F0916A00309741F4EDB7D9
:10102000FEB780916D0090916E00E81BF90BA091C6
:101030008F03B09190039F012A1B3B0B24173507A8
:1010400088F0CA0102962817390760F0CD01840F95
:10105000951F02969093900380938F034D935D9319
:10106000CD0102C080E090E0DF91CF910895CF9351
:10107000DF93009709F454C0DC011297ED011B8245
:101080001A828091910390919203009721F1FC01C3
:1010900040E050E0EA17FB0718F1ED01FB83EA831B
:1010A0002D913C911197C20FD31FCE0102968E173E
:1010B0009F0771F48A819B81280F391F2E5F3F4F54
:1010C00011963C932E9382819381FD0193838283B9
:1010D0004115510559F4B0939203A093910320C098
:1010E000AF010280F381E02D3097A1F6EA01BB83C6
:1010F000AA83CA01029628813981820F931F8A1719
:101100009B0771F48D919C911197280F391F2E5FC9
:101110003F4F39832883FD01828193819B838A839A
:10112000DF91CF910895DC0101C06D934150504093
:10113000E0F70895991B79E004C0991F961708F00D
:10114000961B881F7A95C9F780950895AA1BBB1B2B
:1011500051E107C0AA1FBB1FA617B70710F0A61BB7
:10116000B70B881F991F5A95A9F780959095BC01D8
:10117000CD010895A1E21A2EAA1BBB1BFD010DC0D3
:10118000AA1FBB1FEE1FFF1FA217B307E407F50737
:1011900020F0A21BB30BE40BF50B661F771F881F13
:1011A000991F1A9469F760957095809590959B01A9
:0811B000AC01BD01CF0108955F
:1011B80001FF01010A00016464000093032000009C
:00000001FF
/branches/FLightCtrl/Hex-Files/BrushLess-Ctrl_16kHz_ADR2_V0_31.hex
0,0 → 1,286
:1000000012C05DC52AC029C0C3C5C5C426C025C04D
:10001000B1C4F8C322C0EFC220C0BCC21EC01DC004
:10002000C1C561C51AC011241FBECFE5D4E0DEBF33
:10003000CDBF10E0A0E6B0E0E8EBF1E102C0059032
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73AC1D2CF20918200B6
:1000600080916100821710F4282FAB9A8091800054
:10007000909181008338910560F01BBC1ABC19BCBB
:1000800018BC13BCAB9A01979093810080938000B9
:100090000895822F9927880F991F9BBD8ABD99BD0E
:1000A00088BD23BD089582E08FBD81E485BD85B301
:1000B000817F85BB89E08EBD089592B7980F82B786
:1000C000891B87FDFCCF0895AF92BF92CF92DF923C
:1000D000EF92FF920F931F93CF93DF93182F8CE231
:1000E000A82E81E0B82EC12CD12C109297004398F5
:1000F00085E090E09093830080938200AFDF57D635
:1001000088EC90E0DDD3C12FDD27D0938300C0932E
:100110008200EE24FF248701EA14FB040C051D0570
:1001200078F480916600882311F43ED201C050D348
:1001300084E6C3DF0894E11CF11C011D111DECCF06
:10014000C601B5012FE030E040E050E013D8A21A1C
:10015000B30AC40AD50A0894A108B108C108D10895
:1001600089E1A816B104C104D104C8F020D6809159
:1001700099008F5F809399008091990066E0DAD7AB
:1001800090939900AED3D0938300C093820066DF32
:10019000449BBFCF82B390E8892782BBBACFDF915F
:1001A000CF911F910F91FF90EF90DF90CF90BF9074
:1001B000AF90089540917A0050917B004115510510
:1001C00009F04BC080917900882371F090918800EC
:1001D0008FEF989FC001112468EC70E0B7D770933F
:1001E00085006093840041C080918E00882341F196
:1001F000209190003091910081E02D32380708F075
:100200009A01293C310510F028EC30E02B30310503
:1002100028F4509385004093840026C08CEF90E032
:10022000289FA001299F500D389F500D1124CA010D
:10023000885D994064EB70E089D7CB01039610C0CC
:100240008091840090918500009729F00197909308
:10025000850080938400AB9A08C080918803992719
:100260009093850080938400AB9880918400909156
:1002700085008F3F910539F030F08FEF90E090933B
:10028000850080938400809184009927089580914F
:100290008000909181009093780380937703809100
:1002A0007E00992790937A03809379038091700060
:1002B0009091710090937C0380937B0380919000D8
:1002C0009091910090937E0380937D030895CFE5F4
:1002D000D4E0DEBFCDBFEE2488E084BB85BB8AEBD3
:1002E00081BB80E882BB8EE087BB81E388BB5BD2A9
:1002F000CAD27894C0E0D0E0C230D10509F4979A10
:1003000086E990E0DDD297988AEF90E0D9D22196E5
:10031000C530D1058CF384EF91E0D2D244D2C3DE54
:1003200080E5DCD31AD385E690E0B6D286E690E08D
:10033000B3D287E690E0B0D2EC018EEF90E0ACD281
:100340005C018DEE93E0A8D28C018EEE93E0A4D2F6
:100350006C01CE01AAD28823E1F3979A1092830010
:10036000109282007BDE88E080BF81E087B98AE05E
:1003700090E092D2EC0181E090E090937A03809338
:100380007903109291001092900014DF99279093B6
:10039000830080938200809199008E1551F0109215
:1003A00062001092630082E390E076D2EC01E0906C
:1003B00099008091820090918300892BC9F410925A
:1003C000740010926300C80170D28823D9F0109293
:1003D0009700439881E08093620082B3877C82BB60
:1003E00082E08FBD81E485BD85B3817F85BB0AC076
:1003F00080916200882319F081E0809374008CED75
:1004000095E04AD280916200882321F01092830007
:100410001092820023DE809163008F5F80936300DF
:10042000813009F0B2CF809162008111979AC501A5
:100430003CD2882339F182E390E02ED25C01809196
:100440007E00482F5527209180003091810042176F
:10045000530710F48F5F04C02417350718F4815038
:1004600080937E0080917E0090916100823428F01C
:10047000915090936100AB9A05C09F3F19F09F5F28
:1004800090936100C80111D2882319F18AE090E0AD
:1004900003D28C012091720030917300C901880F42
:1004A000991F880F991F820F931F820F931F66E079
:1004B00070E04CD6709371006093700010927300DE
:1004C0001092720080918E00882319F481E080934D
:1004D0006000C601EAD1882321F08CED95E0DCD1E3
:1004E0006C01CE01E2D1882331F0809170009091AF
:1004F0007100892B29F080917400882309F445CF7D
:1005000021E0F22EF092620010929700439884E668
:1005100090E0C2D1EC0180917400882309F435CFBA
:10052000AB98109274008AE0CFDD979A1092620027
:100530008091990081508093990081E090E09093A0
:100540008300809382008ADD88B18C7F88B9F09225
:10055000970088B18A6088B984E690E09DD1EC016B
:10056000CE01A3D18823E1F38AE090E09093830049
:100570008093820073DD88EC90E08ED1EC01CE0197
:1005800094D18823E1F388EE93E086D1EC0197E0E3
:10059000E92EFBCE1F920F920FB60F9211240F90EF
:1005A0000FBE0F901F9018955E9B24C0809166002F
:1005B0008823E1F48091890090918A0001969093BC
:1005C0008A0080938900FC01E556FD4FE081ED3003
:1005D00019F08436910539F410928A00109289003E
:1005E00081E080936600589AECB9089510928A00D1
:1005F0001092890008951F920F920FB60F92112446
:100600008F938CB18093870080918700853F19F488
:100610001092670014C0809167008F5F809367001D
:10062000823041F4809187008093880088EC809329
:10063000790005C0853618F084E6809367008F91B5
:100640000F900FBE0F901F901895AC01A0E0B0E086
:100650009D01A817B90748F4EBE9F2E08191280F52
:10066000311D1196A417B507C8F33F70FD01E5567B
:10067000FD4FC90146E0969587954A95E1F7835C61
:1006800080831196FD01E556FD4F2F733070822F48
:10069000835C8083A456BD4F8DE08C9310926600DE
:1006A00080919B028CB908951F93CF93DF93382FCD
:1006B000EA01722F10E083E280939B0260939C0218
:1006C00030939D02A3E0B0E0772309F458C077236C
:1006D00011F4972F07C0FE01E10FF11D1F5F9081FC
:1006E000715011F4472F0EC0FE01E10FF11D1F5F85
:1006F0004081715039F0FE01E10FF11D1F5F6081F3
:10070000715001C0672FFD01E556FD4F892F869579
:100710008695835C80831196FD01E556FD4F892FF8
:1007200099278370907024E0880F991F2A95E1F72C
:1007300055279A0194E0369527959A95E1F7822BF3
:10074000835C80831196FD01E556FD4F4F7050701C
:10075000440F551F440F551F862F992756E0969535
:1007600087955A95E1F7842B835C80831196FD0170
:10077000E556FD4F6F73635C60831196A5CFCD0185
:1007800064DFDF91CF911F910895CF93C82F8A30F6
:1007900011F48DE0FADF5D9BFECFCCB980E090E0F4
:1007A000CF910895089588E18AB9599A579A89E1B5
:1007B00089B960E070E085EC93E05FD388EC90E06D
:1007C0006BD0909300038093FF028AE28CB9089566
:1007D0008091FF029091000368D0882391F080916E
:1007E0006600882371F022E245E653E060919A02A8
:1007F00084E45ADF82E390E04FD09093000380932B
:10080000FF0208951F920F920FB60F9211248F933B
:100810009F93809187038F5F8093870380918D00E2
:10082000815080938D008F3F39F583E080938D0058
:1008300080918B0090918C00019690938C00809316
:100840008B0080917A0090917B00009729F00197AE
:1008500090937B0080937A0080918E00882329F00A
:1008600080918E00815080938E0080917900882342
:1008700019F08150809379009F918F910F900FBE56
:100880000F901F90189582E083BF89B7816089BF60
:1008900089B7806489BF089520918B0030918C00C6
:1008A000280F391FC9010197089520918B003091BD
:1008B0008C00821B930B892F9927807899270895A4
:1008C000CF93DF93E9DFEC01CE01EFDF8823E1F383
:1008D000DF91CF91089586EA86B987E087B9369A85
:1008E000089527B196E097B910BE83ED86B9349A82
:1008F00097B9369A349BFECF27B944B155B1440F0E
:10090000551F440F551F493C510510F048EC50E06D
:100910002091800030918100C90163E0880F991F08
:100920006A95E1F7821B930B840F951F23E0969540
:1009300087952A95E1F7909381008093800020911C
:100940007F0033272817390720F480918000809397
:100950007F0016B888E080BF08958EB5806C8EBD8C
:100960008EB580648EBD89B7806289BF89B7846087
:1009700089BF08951F920F920FB60F9211248F9383
:1009800080918F008F5F80938F008F910F900FBEAB
:100990000F901F9018951F920F920FB60F9211246F
:1009A0002F933F938F939F930EB406FE0FC0109228
:1009B0008F0086B597B590939300809392008EB583
:1009C0008F7B8EBD84E680938E0070C08EB5806470
:1009D0008EBD26B537B58091920090919300281B6B
:1009E000390B80918F009927982F8827990F280F0E
:1009F000391F689414F8369527951694E1F73093CB
:100A00009500209394002851314030F488E191E022
:100A100090939500809394002091940030919500DC
:100A2000285131403093950020939400809190009C
:100A3000909191008217930730F4809190009091EB
:100A4000910001960CC08091900090919100281720
:100A5000390748F48091900090919100019790930C
:100A60009100809390002091900030919100C901F5
:100A7000880F991F880F991F880F991F821B930B4E
:100A80002091940030919500820F931F23E096955A
:100A900087952A95E1F79093950080939400909321
:100AA00091008093900081E0809360009F918F91EE
:100AB0003F912F910F900FBE0F901F9018951F928E
:100AC0000F920FB60F9211248F938AB78F7B8ABF34
:100AD0008F910F900FBE0F901F9018958C5F82B969
:100AE00085EC86BF08951F920F920FB60F921124C6
:100AF0008F939F9381B19927887F9070803891055B
:100B0000E9F08138910534F40097B1F18036910510
:100B100079F035C0883B9105D9F0893B910524F4E3
:100B2000883A9105A9F02BC0883F910511F127C0A3
:100B300086B7806886BF1092960023C083B18093E9
:100B4000880384EF91E090937B0080937A000EC03D
:100B500090919600992339F480917E0083B99F5F2C
:100B60009093960003C08091610083B986B7806836
:100B700007C086B7806986BF86B7806986BF85EC67
:100B800086BF9F918F910F900FBE0F901F90189569
:100B90001F920F920FB60F9211240F900FBE0F905D
:100BA0001F9018951F920F920FB60F9211241F934A
:100BB0002F933F934F935F936F937F938F939F9365
:100BC000AF93BF93CF93EF93FF93459B02C011E088
:100BD00001C010E08091990099278230910509F4B5
:100BE00050C0833091052CF4009779F0019739F1CA
:100BF000BFC08430910509F478C0843091050CF4AD
:100C00005AC0059709F48BC0B3C082EA8FBD81E654
:100C100085BD88E087BB112369F082B3877E82BBE4
:100C2000959AC1E0C4BD8091600081115ADE409860
:100C3000C7B91BC082B3877D82BB949A99C082B327
:100C4000877E82BB959A1123B1F482EA8FBD81E43D
:100C500085BD8CE087BB81E084BD809160008111FF
:100C600040DE17B988B1836088B9809199008F5FA1
:100C7000809399006DC082EA8FBD81E685BD88E0D2
:100C800076C082EA8FBD81E485BD8CE087BB1123ED
:100C900069F082B38F7C82BB939A81E084BD80919E
:100CA000600081111EDE82E087B932C082B3877E88
:100CB00082BB959A5DC082B38F7C82BB939A1123CD
:100CC00071F482EA8FBD81E485BD8AE087BBC1E013
:100CD000C4BD80916000811104DEC7B9C3CF82EA30
:100CE0008FBD81E485BD8CE042C082EA8FBD81E486
:100CF00085BD8AE087BB112369F082B3877D82BB03
:100D0000949A81E084BD809160008111EADD17B87A
:100D10004098ABCF82B38F7C82BB939A29C082B3B9
:100D2000877D82BB949A1123E9F482EA8FBD81E624
:100D300085BD88E087BB81E084BD80916000811122
:100D4000D0DD82E087B988B1836088B910939900BB
:100D5000809172009091730001969093730080933C
:100D6000720006C082EA8FBD81E485BD8AE087BB40
:100D7000459903C0112309F028CF459B03C01123D7
:100D800009F423CF10926000FF91EF91CF91BF91B2
:100D9000AF919F918F917F916F915F914F913F9113
:100DA0002F911F910F900FBE0F901F90189580915B
:100DB000990099278230910551F1833091052CF4E7
:100DC000009769F00197B9F0089584309105E1F139
:100DD000843091055CF1059709F443C0089582EAD7
:100DE0008FBD81E685BD88E087BB82B3877D82BBEE
:100DF000949A82E034C082EA8FBD81E685BD88E0A6
:100E000087BB82B3877E82BB959A81E01AC082EA53
:100E10008FBD81E485BD8CE087BB82B3877E82BBBA
:100E2000959A17B888B1836088B9089582EA8FBD12
:100E300081E485BD8CE087BB82B38F7C82BB939AB3
:100E400082E087B94098089582EA8FBD81E485BD2C
:100E50008AE087BB82B38F7C82BB939A81E087B99B
:100E6000E1CF82EA8FBD81E485BD8AE087BB82B392
:100E7000877D82BB949A17B8E5CF0F931F93CF93CA
:100E8000DF938C01EB01009711F4672BB9F16EE051
:100E900070E081E090E037D0FC01892B71F180E8AF
:100EA0008383209771F0D387C28781E88383809101
:100EB000890390918A03892B21F4F0938A03E093AC
:100EC000890301151105C9F01187008783818260AC
:100ED000838380918B0390918C03892B71F4F09321
:100EE0008C03E0938B0380918D0390918E03892B6B
:100EF00021F4F0938E03E0938D03CF01DF91CF9126
:100F00001F910F9108950F931F93CF93DF93869FA7
:100F10008001879F100D969F100D1124C8010DD0E0
:100F2000EC01009721F0A80160E070E0FCD0CE0158
:100F3000DF91CF911F910F910895CF93DF93AC0173
:100F4000029710F442E050E020E030E0A0919103DD
:100F5000B0919203BD01F901109709F44CC08D9135
:100F60009C9111978417950731F14817590738F468
:100F70002115310519F08217930708F49C01FD0132
:100F8000A281B381109759F721153105A1F1C9014B
:100F9000841B950B049708F4A901DB01E0E0F0E065
:100FA000109749F18D919C91119782179307F9F44D
:100FB0004217530779F4ED018A819B81309719F02C
:100FC0009383828304C09093920380939103CD0115
:100FD00002964AC0241B350BFD01E20FF31F41931B
:100FE0005193225030402D933C93CF013DC0FD01E1
:100FF000A281B381D5CF80918F0390919003892BEB
:1010000041F480916B0090916C00909390038093D9
:101010008F03E0916900F0916A00309741F4EDB7D9
:10102000FEB780916D0090916E00E81BF90BA091C6
:101030008F03B09190039F012A1B3B0B24173507A8
:1010400088F0CA0102962817390760F0CD01840F95
:10105000951F02969093900380938F034D935D9319
:10106000CD0102C080E090E0DF91CF910895CF9351
:10107000DF93009709F454C0DC011297ED011B8245
:101080001A828091910390919203009721F1FC01C3
:1010900040E050E0EA17FB0718F1ED01FB83EA831B
:1010A0002D913C911197C20FD31FCE0102968E173E
:1010B0009F0771F48A819B81280F391F2E5F3F4F54
:1010C00011963C932E9382819381FD0193838283B9
:1010D0004115510559F4B0939203A093910320C098
:1010E000AF010280F381E02D3097A1F6EA01BB83C6
:1010F000AA83CA01029628813981820F931F8A1719
:101100009B0771F48D919C911197280F391F2E5FC9
:101110003F4F39832883FD01828193819B838A839A
:10112000DF91CF910895DC0101C06D934150504093
:10113000E0F70895991B79E004C0991F961708F00D
:10114000961B881F7A95C9F780950895AA1BBB1B2B
:1011500051E107C0AA1FBB1FA617B70710F0A61BB7
:10116000B70B881F991F5A95A9F780959095BC01D8
:10117000CD010895A1E21A2EAA1BBB1BFD010DC0D3
:10118000AA1FBB1FEE1FFF1FA217B307E407F50737
:1011900020F0A21BB30BE40BF50B661F771F881F13
:1011A000991F1A9469F760957095809590959B01A9
:0811B000AC01BD01CF0108955F
:1011B80001FF01010A00016464000093032000009C
:00000001FF
/branches/FLightCtrl/Hex-Files/BrushLess-Ctrl_16kHz_ADR3_V0_31.hex
0,0 → 1,286
:1000000012C05DC52AC029C0C3C5C5C426C025C04D
:10001000B1C4F8C322C0EFC220C0BCC21EC01DC004
:10002000C1C561C51AC011241FBECFE5D4E0DEBF33
:10003000CDBF10E0A0E6B0E0E8EBF1E102C0059032
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73AC1D2CF20918200B6
:1000600080916100821710F4282FAB9A8091800054
:10007000909181008338910560F01BBC1ABC19BCBB
:1000800018BC13BCAB9A01979093810080938000B9
:100090000895822F9927880F991F9BBD8ABD99BD0E
:1000A00088BD23BD089582E08FBD81E485BD85B301
:1000B000817F85BB89E08EBD089592B7980F82B786
:1000C000891B87FDFCCF0895AF92BF92CF92DF923C
:1000D000EF92FF920F931F93CF93DF93182F8CE231
:1000E000A82E81E0B82EC12CD12C109297004398F5
:1000F00085E090E09093830080938200AFDF57D635
:1001000088EC90E0DDD3C12FDD27D0938300C0932E
:100110008200EE24FF248701EA14FB040C051D0570
:1001200078F480916600882311F43ED201C050D348
:1001300084E6C3DF0894E11CF11C011D111DECCF06
:10014000C601B5012FE030E040E050E013D8A21A1C
:10015000B30AC40AD50A0894A108B108C108D10895
:1001600089E1A816B104C104D104C8F020D6809159
:1001700099008F5F809399008091990066E0DAD7AB
:1001800090939900AED3D0938300C093820066DF32
:10019000449BBFCF82B390E8892782BBBACFDF915F
:1001A000CF911F910F91FF90EF90DF90CF90BF9074
:1001B000AF90089540917A0050917B004115510510
:1001C00009F04BC080917900882371F090918800EC
:1001D0008FEF989FC001112468EC70E0B7D770933F
:1001E00085006093840041C080918E00882341F196
:1001F000209190003091910081E02D32380708F075
:100200009A01293C310510F028EC30E02B30310503
:1002100028F4509385004093840026C08CEF90E032
:10022000289FA001299F500D389F500D1124CA010D
:10023000885D994064EB70E089D7CB01039610C0CC
:100240008091840090918500009729F00197909308
:10025000850080938400AB9A08C080918803992719
:100260009093850080938400AB9880918400909156
:1002700085008F3F910539F030F08FEF90E090933B
:10028000850080938400809184009927089580914F
:100290008000909181009093780380937703809100
:1002A0007E00992790937A03809379038091700060
:1002B0009091710090937C0380937B0380919000D8
:1002C0009091910090937E0380937D030895CFE5F4
:1002D000D4E0DEBFCDBFEE2488E084BB85BB8AEBD3
:1002E00081BB80E882BB8EE087BB81E388BB5BD2A9
:1002F000CAD27894C0E0D0E0C330D10509F4979A0F
:1003000086E990E0DDD297988AEF90E0D9D22196E5
:10031000C530D1058CF384EF91E0D2D244D2C3DE54
:1003200080E5DCD31AD385E690E0B6D286E690E08D
:10033000B3D287E690E0B0D2EC018EEF90E0ACD281
:100340005C018DEE93E0A8D28C018EEE93E0A4D2F6
:100350006C01CE01AAD28823E1F3979A1092830010
:10036000109282007BDE88E080BF81E087B98AE05E
:1003700090E092D2EC0181E090E090937A03809338
:100380007903109291001092900014DF99279093B6
:10039000830080938200809199008E1551F0109215
:1003A00062001092630082E390E076D2EC01E0906C
:1003B00099008091820090918300892BC9F410925A
:1003C000740010926300C80170D28823D9F0109293
:1003D0009700439881E08093620082B3877C82BB60
:1003E00082E08FBD81E485BD85B3817F85BB0AC076
:1003F00080916200882319F081E0809374008CED75
:1004000095E04AD280916200882321F01092830007
:100410001092820023DE809163008F5F80936300DF
:10042000813009F0B2CF809162008111979AC501A5
:100430003CD2882339F182E390E02ED25C01809196
:100440007E00482F5527209180003091810042176F
:10045000530710F48F5F04C02417350718F4815038
:1004600080937E0080917E0090916100823428F01C
:10047000915090936100AB9A05C09F3F19F09F5F28
:1004800090936100C80111D2882319F18AE090E0AD
:1004900003D28C012091720030917300C901880F42
:1004A000991F880F991F820F931F820F931F66E079
:1004B00070E04CD6709371006093700010927300DE
:1004C0001092720080918E00882319F481E080934D
:1004D0006000C601EAD1882321F08CED95E0DCD1E3
:1004E0006C01CE01E2D1882331F0809170009091AF
:1004F0007100892B29F080917400882309F445CF7D
:1005000021E0F22EF092620010929700439884E668
:1005100090E0C2D1EC0180917400882309F435CFBA
:10052000AB98109274008AE0CFDD979A1092620027
:100530008091990081508093990081E090E09093A0
:100540008300809382008ADD88B18C7F88B9F09225
:10055000970088B18A6088B984E690E09DD1EC016B
:10056000CE01A3D18823E1F38AE090E09093830049
:100570008093820073DD88EC90E08ED1EC01CE0197
:1005800094D18823E1F388EE93E086D1EC0197E0E3
:10059000E92EFBCE1F920F920FB60F9211240F90EF
:1005A0000FBE0F901F9018955E9B24C0809166002F
:1005B0008823E1F48091890090918A0001969093BC
:1005C0008A0080938900FC01E556FD4FE081ED3003
:1005D00019F08436910539F410928A00109289003E
:1005E00081E080936600589AECB9089510928A00D1
:1005F0001092890008951F920F920FB60F92112446
:100600008F938CB18093870080918700853F19F488
:100610001092670014C0809167008F5F809367001D
:10062000833041F4809187008093880088EC809328
:10063000790005C0853618F084E6809367008F91B5
:100640000F900FBE0F901F901895AC01A0E0B0E086
:100650009D01A817B90748F4EBE9F2E08191280F52
:10066000311D1196A417B507C8F33F70FD01E5567B
:10067000FD4FC90146E0969587954A95E1F7835C61
:1006800080831196FD01E556FD4F2F733070822F48
:10069000835C8083A456BD4F8DE08C9310926600DE
:1006A00080919B028CB908951F93CF93DF93382FCD
:1006B000EA01722F10E083E280939B0260939C0218
:1006C00030939D02A3E0B0E0772309F458C077236C
:1006D00011F4972F07C0FE01E10FF11D1F5F9081FC
:1006E000715011F4472F0EC0FE01E10FF11D1F5F85
:1006F0004081715039F0FE01E10FF11D1F5F6081F3
:10070000715001C0672FFD01E556FD4F892F869579
:100710008695835C80831196FD01E556FD4F892FF8
:1007200099278370907024E0880F991F2A95E1F72C
:1007300055279A0194E0369527959A95E1F7822BF3
:10074000835C80831196FD01E556FD4F4F7050701C
:10075000440F551F440F551F862F992756E0969535
:1007600087955A95E1F7842B835C80831196FD0170
:10077000E556FD4F6F73635C60831196A5CFCD0185
:1007800064DFDF91CF911F910895CF93C82F8A30F6
:1007900011F48DE0FADF5D9BFECFCCB980E090E0F4
:1007A000CF910895089588E18AB9599A579A89E1B5
:1007B00089B960E070E085EC93E05FD388EC90E06D
:1007C0006BD0909300038093FF028AE28CB9089566
:1007D0008091FF029091000368D0882391F080916E
:1007E0006600882371F022E245E653E060919A02A8
:1007F00084E45ADF82E390E04FD09093000380932B
:10080000FF0208951F920F920FB60F9211248F933B
:100810009F93809187038F5F8093870380918D00E2
:10082000815080938D008F3F39F583E080938D0058
:1008300080918B0090918C00019690938C00809316
:100840008B0080917A0090917B00009729F00197AE
:1008500090937B0080937A0080918E00882329F00A
:1008600080918E00815080938E0080917900882342
:1008700019F08150809379009F918F910F900FBE56
:100880000F901F90189582E083BF89B7816089BF60
:1008900089B7806489BF089520918B0030918C00C6
:1008A000280F391FC9010197089520918B003091BD
:1008B0008C00821B930B892F9927807899270895A4
:1008C000CF93DF93E9DFEC01CE01EFDF8823E1F383
:1008D000DF91CF91089586EA86B987E087B9369A85
:1008E000089527B196E097B910BE83ED86B9349A82
:1008F00097B9369A349BFECF27B944B155B1440F0E
:10090000551F440F551F493C510510F048EC50E06D
:100910002091800030918100C90163E0880F991F08
:100920006A95E1F7821B930B840F951F23E0969540
:1009300087952A95E1F7909381008093800020911C
:100940007F0033272817390720F480918000809397
:100950007F0016B888E080BF08958EB5806C8EBD8C
:100960008EB580648EBD89B7806289BF89B7846087
:1009700089BF08951F920F920FB60F9211248F9383
:1009800080918F008F5F80938F008F910F900FBEAB
:100990000F901F9018951F920F920FB60F9211246F
:1009A0002F933F938F939F930EB406FE0FC0109228
:1009B0008F0086B597B590939300809392008EB583
:1009C0008F7B8EBD84E680938E0070C08EB5806470
:1009D0008EBD26B537B58091920090919300281B6B
:1009E000390B80918F009927982F8827990F280F0E
:1009F000391F689414F8369527951694E1F73093CB
:100A00009500209394002851314030F488E191E022
:100A100090939500809394002091940030919500DC
:100A2000285131403093950020939400809190009C
:100A3000909191008217930730F4809190009091EB
:100A4000910001960CC08091900090919100281720
:100A5000390748F48091900090919100019790930C
:100A60009100809390002091900030919100C901F5
:100A7000880F991F880F991F880F991F821B930B4E
:100A80002091940030919500820F931F23E096955A
:100A900087952A95E1F79093950080939400909321
:100AA00091008093900081E0809360009F918F91EE
:100AB0003F912F910F900FBE0F901F9018951F928E
:100AC0000F920FB60F9211248F938AB78F7B8ABF34
:100AD0008F910F900FBE0F901F9018958A5F82B96B
:100AE00085EC86BF08951F920F920FB60F921124C6
:100AF0008F939F9381B19927887F9070803891055B
:100B0000E9F08138910534F40097B1F18036910510
:100B100079F035C0883B9105D9F0893B910524F4E3
:100B2000883A9105A9F02BC0883F910511F127C0A3
:100B300086B7806886BF1092960023C083B18093E9
:100B4000880384EF91E090937B0080937A000EC03D
:100B500090919600992339F480917E0083B99F5F2C
:100B60009093960003C08091610083B986B7806836
:100B700007C086B7806986BF86B7806986BF85EC67
:100B800086BF9F918F910F900FBE0F901F90189569
:100B90001F920F920FB60F9211240F900FBE0F905D
:100BA0001F9018951F920F920FB60F9211241F934A
:100BB0002F933F934F935F936F937F938F939F9365
:100BC000AF93BF93CF93EF93FF93459B02C011E088
:100BD00001C010E08091990099278230910509F4B5
:100BE00050C0833091052CF4009779F0019739F1CA
:100BF000BFC08430910509F478C0843091050CF4AD
:100C00005AC0059709F48BC0B3C082EA8FBD81E654
:100C100085BD88E087BB112369F082B3877E82BBE4
:100C2000959AC1E0C4BD8091600081115ADE409860
:100C3000C7B91BC082B3877D82BB949A99C082B327
:100C4000877E82BB959A1123B1F482EA8FBD81E43D
:100C500085BD8CE087BB81E084BD809160008111FF
:100C600040DE17B988B1836088B9809199008F5FA1
:100C7000809399006DC082EA8FBD81E685BD88E0D2
:100C800076C082EA8FBD81E485BD8CE087BB1123ED
:100C900069F082B38F7C82BB939A81E084BD80919E
:100CA000600081111EDE82E087B932C082B3877E88
:100CB00082BB959A5DC082B38F7C82BB939A1123CD
:100CC00071F482EA8FBD81E485BD8AE087BBC1E013
:100CD000C4BD80916000811104DEC7B9C3CF82EA30
:100CE0008FBD81E485BD8CE042C082EA8FBD81E486
:100CF00085BD8AE087BB112369F082B3877D82BB03
:100D0000949A81E084BD809160008111EADD17B87A
:100D10004098ABCF82B38F7C82BB939A29C082B3B9
:100D2000877D82BB949A1123E9F482EA8FBD81E624
:100D300085BD88E087BB81E084BD80916000811122
:100D4000D0DD82E087B988B1836088B910939900BB
:100D5000809172009091730001969093730080933C
:100D6000720006C082EA8FBD81E485BD8AE087BB40
:100D7000459903C0112309F028CF459B03C01123D7
:100D800009F423CF10926000FF91EF91CF91BF91B2
:100D9000AF919F918F917F916F915F914F913F9113
:100DA0002F911F910F900FBE0F901F90189580915B
:100DB000990099278230910551F1833091052CF4E7
:100DC000009769F00197B9F0089584309105E1F139
:100DD000843091055CF1059709F443C0089582EAD7
:100DE0008FBD81E685BD88E087BB82B3877D82BBEE
:100DF000949A82E034C082EA8FBD81E685BD88E0A6
:100E000087BB82B3877E82BB959A81E01AC082EA53
:100E10008FBD81E485BD8CE087BB82B3877E82BBBA
:100E2000959A17B888B1836088B9089582EA8FBD12
:100E300081E485BD8CE087BB82B38F7C82BB939AB3
:100E400082E087B94098089582EA8FBD81E485BD2C
:100E50008AE087BB82B38F7C82BB939A81E087B99B
:100E6000E1CF82EA8FBD81E485BD8AE087BB82B392
:100E7000877D82BB949A17B8E5CF0F931F93CF93CA
:100E8000DF938C01EB01009711F4672BB9F16EE051
:100E900070E081E090E037D0FC01892B71F180E8AF
:100EA0008383209771F0D387C28781E88383809101
:100EB000890390918A03892B21F4F0938A03E093AC
:100EC000890301151105C9F01187008783818260AC
:100ED000838380918B0390918C03892B71F4F09321
:100EE0008C03E0938B0380918D0390918E03892B6B
:100EF00021F4F0938E03E0938D03CF01DF91CF9126
:100F00001F910F9108950F931F93CF93DF93869FA7
:100F10008001879F100D969F100D1124C8010DD0E0
:100F2000EC01009721F0A80160E070E0FCD0CE0158
:100F3000DF91CF911F910F910895CF93DF93AC0173
:100F4000029710F442E050E020E030E0A0919103DD
:100F5000B0919203BD01F901109709F44CC08D9135
:100F60009C9111978417950731F14817590738F468
:100F70002115310519F08217930708F49C01FD0132
:100F8000A281B381109759F721153105A1F1C9014B
:100F9000841B950B049708F4A901DB01E0E0F0E065
:100FA000109749F18D919C91119782179307F9F44D
:100FB0004217530779F4ED018A819B81309719F02C
:100FC0009383828304C09093920380939103CD0115
:100FD00002964AC0241B350BFD01E20FF31F41931B
:100FE0005193225030402D933C93CF013DC0FD01E1
:100FF000A281B381D5CF80918F0390919003892BEB
:1010000041F480916B0090916C00909390038093D9
:101010008F03E0916900F0916A00309741F4EDB7D9
:10102000FEB780916D0090916E00E81BF90BA091C6
:101030008F03B09190039F012A1B3B0B24173507A8
:1010400088F0CA0102962817390760F0CD01840F95
:10105000951F02969093900380938F034D935D9319
:10106000CD0102C080E090E0DF91CF910895CF9351
:10107000DF93009709F454C0DC011297ED011B8245
:101080001A828091910390919203009721F1FC01C3
:1010900040E050E0EA17FB0718F1ED01FB83EA831B
:1010A0002D913C911197C20FD31FCE0102968E173E
:1010B0009F0771F48A819B81280F391F2E5F3F4F54
:1010C00011963C932E9382819381FD0193838283B9
:1010D0004115510559F4B0939203A093910320C098
:1010E000AF010280F381E02D3097A1F6EA01BB83C6
:1010F000AA83CA01029628813981820F931F8A1719
:101100009B0771F48D919C911197280F391F2E5FC9
:101110003F4F39832883FD01828193819B838A839A
:10112000DF91CF910895DC0101C06D934150504093
:10113000E0F70895991B79E004C0991F961708F00D
:10114000961B881F7A95C9F780950895AA1BBB1B2B
:1011500051E107C0AA1FBB1FA617B70710F0A61BB7
:10116000B70B881F991F5A95A9F780959095BC01D8
:10117000CD010895A1E21A2EAA1BBB1BFD010DC0D3
:10118000AA1FBB1FEE1FFF1FA217B307E407F50737
:1011900020F0A21BB30BE40BF50B661F771F881F13
:1011A000991F1A9469F760957095809590959B01A9
:0811B000AC01BD01CF0108955F
:1011B80001FF01010A00016464000093032000009C
:00000001FF
/branches/FLightCtrl/Hex-Files/BrushLess-Ctrl_16kHz_ADR4_V0_31.hex
0,0 → 1,286
:1000000012C05DC52AC029C0C3C5C5C426C025C04D
:10001000B1C4F8C322C0EFC220C0BCC21EC01DC004
:10002000C1C561C51AC011241FBECFE5D4E0DEBF33
:10003000CDBF10E0A0E6B0E0E8EBF1E102C0059032
:100040000D92A037B107D9F713E0A0E7B0E001C0E7
:100050001D92A339B107E1F73AC1D2CF20918200B6
:1000600080916100821710F4282FAB9A8091800054
:10007000909181008338910560F01BBC1ABC19BCBB
:1000800018BC13BCAB9A01979093810080938000B9
:100090000895822F9927880F991F9BBD8ABD99BD0E
:1000A00088BD23BD089582E08FBD81E485BD85B301
:1000B000817F85BB89E08EBD089592B7980F82B786
:1000C000891B87FDFCCF0895AF92BF92CF92DF923C
:1000D000EF92FF920F931F93CF93DF93182F8CE231
:1000E000A82E81E0B82EC12CD12C109297004398F5
:1000F00085E090E09093830080938200AFDF57D635
:1001000088EC90E0DDD3C12FDD27D0938300C0932E
:100110008200EE24FF248701EA14FB040C051D0570
:1001200078F480916600882311F43ED201C050D348
:1001300084E6C3DF0894E11CF11C011D111DECCF06
:10014000C601B5012FE030E040E050E013D8A21A1C
:10015000B30AC40AD50A0894A108B108C108D10895
:1001600089E1A816B104C104D104C8F020D6809159
:1001700099008F5F809399008091990066E0DAD7AB
:1001800090939900AED3D0938300C093820066DF32
:10019000449BBFCF82B390E8892782BBBACFDF915F
:1001A000CF911F910F91FF90EF90DF90CF90BF9074
:1001B000AF90089540917A0050917B004115510510
:1001C00009F04BC080917900882371F090918800EC
:1001D0008FEF989FC001112468EC70E0B7D770933F
:1001E00085006093840041C080918E00882341F196
:1001F000209190003091910081E02D32380708F075
:100200009A01293C310510F028EC30E02B30310503
:1002100028F4509385004093840026C08CEF90E032
:10022000289FA001299F500D389F500D1124CA010D
:10023000885D994064EB70E089D7CB01039610C0CC
:100240008091840090918500009729F00197909308
:10025000850080938400AB9A08C080918803992719
:100260009093850080938400AB9880918400909156
:1002700085008F3F910539F030F08FEF90E090933B
:10028000850080938400809184009927089580914F
:100290008000909181009093780380937703809100
:1002A0007E00992790937A03809379038091700060
:1002B0009091710090937C0380937B0380919000D8
:1002C0009091910090937E0380937D030895CFE5F4
:1002D000D4E0DEBFCDBFEE2488E084BB85BB8AEBD3
:1002E00081BB80E882BB8EE087BB81E388BB5BD2A9
:1002F000CAD27894C0E0D0E0C430D10509F4979A0E
:1003000086E990E0DDD297988AEF90E0D9D22196E5
:10031000C530D1058CF384EF91E0D2D244D2C3DE54
:1003200080E5DCD31AD385E690E0B6D286E690E08D
:10033000B3D287E690E0B0D2EC018EEF90E0ACD281
:100340005C018DEE93E0A8D28C018EEE93E0A4D2F6
:100350006C01CE01AAD28823E1F3979A1092830010
:10036000109282007BDE88E080BF81E087B98AE05E
:1003700090E092D2EC0181E090E090937A03809338
:100380007903109291001092900014DF99279093B6
:10039000830080938200809199008E1551F0109215
:1003A00062001092630082E390E076D2EC01E0906C
:1003B00099008091820090918300892BC9F410925A
:1003C000740010926300C80170D28823D9F0109293
:1003D0009700439881E08093620082B3877C82BB60
:1003E00082E08FBD81E485BD85B3817F85BB0AC076
:1003F00080916200882319F081E0809374008CED75
:1004000095E04AD280916200882321F01092830007
:100410001092820023DE809163008F5F80936300DF
:10042000813009F0B2CF809162008111979AC501A5
:100430003CD2882339F182E390E02ED25C01809196
:100440007E00482F5527209180003091810042176F
:10045000530710F48F5F04C02417350718F4815038
:1004600080937E0080917E0090916100823428F01C
:10047000915090936100AB9A05C09F3F19F09F5F28
:1004800090936100C80111D2882319F18AE090E0AD
:1004900003D28C012091720030917300C901880F42
:1004A000991F880F991F820F931F820F931F66E079
:1004B00070E04CD6709371006093700010927300DE
:1004C0001092720080918E00882319F481E080934D
:1004D0006000C601EAD1882321F08CED95E0DCD1E3
:1004E0006C01CE01E2D1882331F0809170009091AF
:1004F0007100892B29F080917400882309F445CF7D
:1005000021E0F22EF092620010929700439884E668
:1005100090E0C2D1EC0180917400882309F435CFBA
:10052000AB98109274008AE0CFDD979A1092620027
:100530008091990081508093990081E090E09093A0
:100540008300809382008ADD88B18C7F88B9F09225
:10055000970088B18A6088B984E690E09DD1EC016B
:10056000CE01A3D18823E1F38AE090E09093830049
:100570008093820073DD88EC90E08ED1EC01CE0197
:1005800094D18823E1F388EE93E086D1EC0197E0E3
:10059000E92EFBCE1F920F920FB60F9211240F90EF
:1005A0000FBE0F901F9018955E9B24C0809166002F
:1005B0008823E1F48091890090918A0001969093BC
:1005C0008A0080938900FC01E556FD4FE081ED3003
:1005D00019F08436910539F410928A00109289003E
:1005E00081E080936600589AECB9089510928A00D1
:1005F0001092890008951F920F920FB60F92112446
:100600008F938CB18093870080918700853F19F488
:100610001092670014C0809167008F5F809367001D
:10062000843041F4809187008093880088EC809327
:10063000790005C0853618F084E6809367008F91B5
:100640000F900FBE0F901F901895AC01A0E0B0E086
:100650009D01A817B90748F4EBE9F2E08191280F52
:10066000311D1196A417B507C8F33F70FD01E5567B
:10067000FD4FC90146E0969587954A95E1F7835C61
:1006800080831196FD01E556FD4F2F733070822F48
:10069000835C8083A456BD4F8DE08C9310926600DE
:1006A00080919B028CB908951F93CF93DF93382FCD
:1006B000EA01722F10E083E280939B0260939C0218
:1006C00030939D02A3E0B0E0772309F458C077236C
:1006D00011F4972F07C0FE01E10FF11D1F5F9081FC
:1006E000715011F4472F0EC0FE01E10FF11D1F5F85
:1006F0004081715039F0FE01E10FF11D1F5F6081F3
:10070000715001C0672FFD01E556FD4F892F869579
:100710008695835C80831196FD01E556FD4F892FF8
:1007200099278370907024E0880F991F2A95E1F72C
:1007300055279A0194E0369527959A95E1F7822BF3
:10074000835C80831196FD01E556FD4F4F7050701C
:10075000440F551F440F551F862F992756E0969535
:1007600087955A95E1F7842B835C80831196FD0170
:10077000E556FD4F6F73635C60831196A5CFCD0185
:1007800064DFDF91CF911F910895CF93C82F8A30F6
:1007900011F48DE0FADF5D9BFECFCCB980E090E0F4
:1007A000CF910895089588E18AB9599A579A89E1B5
:1007B00089B960E070E085EC93E05FD388EC90E06D
:1007C0006BD0909300038093FF028AE28CB9089566
:1007D0008091FF029091000368D0882391F080916E
:1007E0006600882371F022E245E653E060919A02A8
:1007F00084E45ADF82E390E04FD09093000380932B
:10080000FF0208951F920F920FB60F9211248F933B
:100810009F93809187038F5F8093870380918D00E2
:10082000815080938D008F3F39F583E080938D0058
:1008300080918B0090918C00019690938C00809316
:100840008B0080917A0090917B00009729F00197AE
:1008500090937B0080937A0080918E00882329F00A
:1008600080918E00815080938E0080917900882342
:1008700019F08150809379009F918F910F900FBE56
:100880000F901F90189582E083BF89B7816089BF60
:1008900089B7806489BF089520918B0030918C00C6
:1008A000280F391FC9010197089520918B003091BD
:1008B0008C00821B930B892F9927807899270895A4
:1008C000CF93DF93E9DFEC01CE01EFDF8823E1F383
:1008D000DF91CF91089586EA86B987E087B9369A85
:1008E000089527B196E097B910BE83ED86B9349A82
:1008F00097B9369A349BFECF27B944B155B1440F0E
:10090000551F440F551F493C510510F048EC50E06D
:100910002091800030918100C90163E0880F991F08
:100920006A95E1F7821B930B840F951F23E0969540
:1009300087952A95E1F7909381008093800020911C
:100940007F0033272817390720F480918000809397
:100950007F0016B888E080BF08958EB5806C8EBD8C
:100960008EB580648EBD89B7806289BF89B7846087
:1009700089BF08951F920F920FB60F9211248F9383
:1009800080918F008F5F80938F008F910F900FBEAB
:100990000F901F9018951F920F920FB60F9211246F
:1009A0002F933F938F939F930EB406FE0FC0109228
:1009B0008F0086B597B590939300809392008EB583
:1009C0008F7B8EBD84E680938E0070C08EB5806470
:1009D0008EBD26B537B58091920090919300281B6B
:1009E000390B80918F009927982F8827990F280F0E
:1009F000391F689414F8369527951694E1F73093CB
:100A00009500209394002851314030F488E191E022
:100A100090939500809394002091940030919500DC
:100A2000285131403093950020939400809190009C
:100A3000909191008217930730F4809190009091EB
:100A4000910001960CC08091900090919100281720
:100A5000390748F48091900090919100019790930C
:100A60009100809390002091900030919100C901F5
:100A7000880F991F880F991F880F991F821B930B4E
:100A80002091940030919500820F931F23E096955A
:100A900087952A95E1F79093950080939400909321
:100AA00091008093900081E0809360009F918F91EE
:100AB0003F912F910F900FBE0F901F9018951F928E
:100AC0000F920FB60F9211248F938AB78F7B8ABF34
:100AD0008F910F900FBE0F901F901895885F82B96D
:100AE00085EC86BF08951F920F920FB60F921124C6
:100AF0008F939F9381B19927887F9070803891055B
:100B0000E9F08138910534F40097B1F18036910510
:100B100079F035C0883B9105D9F0893B910524F4E3
:100B2000883A9105A9F02BC0883F910511F127C0A3
:100B300086B7806886BF1092960023C083B18093E9
:100B4000880384EF91E090937B0080937A000EC03D
:100B500090919600992339F480917E0083B99F5F2C
:100B60009093960003C08091610083B986B7806836
:100B700007C086B7806986BF86B7806986BF85EC67
:100B800086BF9F918F910F900FBE0F901F90189569
:100B90001F920F920FB60F9211240F900FBE0F905D
:100BA0001F9018951F920F920FB60F9211241F934A
:100BB0002F933F934F935F936F937F938F939F9365
:100BC000AF93BF93CF93EF93FF93459B02C011E088
:100BD00001C010E08091990099278230910509F4B5
:100BE00050C0833091052CF4009779F0019739F1CA
:100BF000BFC08430910509F478C0843091050CF4AD
:100C00005AC0059709F48BC0B3C082EA8FBD81E654
:100C100085BD88E087BB112369F082B3877E82BBE4
:100C2000959AC1E0C4BD8091600081115ADE409860
:100C3000C7B91BC082B3877D82BB949A99C082B327
:100C4000877E82BB959A1123B1F482EA8FBD81E43D
:100C500085BD8CE087BB81E084BD809160008111FF
:100C600040DE17B988B1836088B9809199008F5FA1
:100C7000809399006DC082EA8FBD81E685BD88E0D2
:100C800076C082EA8FBD81E485BD8CE087BB1123ED
:100C900069F082B38F7C82BB939A81E084BD80919E
:100CA000600081111EDE82E087B932C082B3877E88
:100CB00082BB959A5DC082B38F7C82BB939A1123CD
:100CC00071F482EA8FBD81E485BD8AE087BBC1E013
:100CD000C4BD80916000811104DEC7B9C3CF82EA30
:100CE0008FBD81E485BD8CE042C082EA8FBD81E486
:100CF00085BD8AE087BB112369F082B3877D82BB03
:100D0000949A81E084BD809160008111EADD17B87A
:100D10004098ABCF82B38F7C82BB939A29C082B3B9
:100D2000877D82BB949A1123E9F482EA8FBD81E624
:100D300085BD88E087BB81E084BD80916000811122
:100D4000D0DD82E087B988B1836088B910939900BB
:100D5000809172009091730001969093730080933C
:100D6000720006C082EA8FBD81E485BD8AE087BB40
:100D7000459903C0112309F028CF459B03C01123D7
:100D800009F423CF10926000FF91EF91CF91BF91B2
:100D9000AF919F918F917F916F915F914F913F9113
:100DA0002F911F910F900FBE0F901F90189580915B
:100DB000990099278230910551F1833091052CF4E7
:100DC000009769F00197B9F0089584309105E1F139
:100DD000843091055CF1059709F443C0089582EAD7
:100DE0008FBD81E685BD88E087BB82B3877D82BBEE
:100DF000949A82E034C082EA8FBD81E685BD88E0A6
:100E000087BB82B3877E82BB959A81E01AC082EA53
:100E10008FBD81E485BD8CE087BB82B3877E82BBBA
:100E2000959A17B888B1836088B9089582EA8FBD12
:100E300081E485BD8CE087BB82B38F7C82BB939AB3
:100E400082E087B94098089582EA8FBD81E485BD2C
:100E50008AE087BB82B38F7C82BB939A81E087B99B
:100E6000E1CF82EA8FBD81E485BD8AE087BB82B392
:100E7000877D82BB949A17B8E5CF0F931F93CF93CA
:100E8000DF938C01EB01009711F4672BB9F16EE051
:100E900070E081E090E037D0FC01892B71F180E8AF
:100EA0008383209771F0D387C28781E88383809101
:100EB000890390918A03892B21F4F0938A03E093AC
:100EC000890301151105C9F01187008783818260AC
:100ED000838380918B0390918C03892B71F4F09321
:100EE0008C03E0938B0380918D0390918E03892B6B
:100EF00021F4F0938E03E0938D03CF01DF91CF9126
:100F00001F910F9108950F931F93CF93DF93869FA7
:100F10008001879F100D969F100D1124C8010DD0E0
:100F2000EC01009721F0A80160E070E0FCD0CE0158
:100F3000DF91CF911F910F910895CF93DF93AC0173
:100F4000029710F442E050E020E030E0A0919103DD
:100F5000B0919203BD01F901109709F44CC08D9135
:100F60009C9111978417950731F14817590738F468
:100F70002115310519F08217930708F49C01FD0132
:100F8000A281B381109759F721153105A1F1C9014B
:100F9000841B950B049708F4A901DB01E0E0F0E065
:100FA000109749F18D919C91119782179307F9F44D
:100FB0004217530779F4ED018A819B81309719F02C
:100FC0009383828304C09093920380939103CD0115
:100FD00002964AC0241B350BFD01E20FF31F41931B
:100FE0005193225030402D933C93CF013DC0FD01E1
:100FF000A281B381D5CF80918F0390919003892BEB
:1010000041F480916B0090916C00909390038093D9
:101010008F03E0916900F0916A00309741F4EDB7D9
:10102000FEB780916D0090916E00E81BF90BA091C6
:101030008F03B09190039F012A1B3B0B24173507A8
:1010400088F0CA0102962817390760F0CD01840F95
:10105000951F02969093900380938F034D935D9319
:10106000CD0102C080E090E0DF91CF910895CF9351
:10107000DF93009709F454C0DC011297ED011B8245
:101080001A828091910390919203009721F1FC01C3
:1010900040E050E0EA17FB0718F1ED01FB83EA831B
:1010A0002D913C911197C20FD31FCE0102968E173E
:1010B0009F0771F48A819B81280F391F2E5F3F4F54
:1010C00011963C932E9382819381FD0193838283B9
:1010D0004115510559F4B0939203A093910320C098
:1010E000AF010280F381E02D3097A1F6EA01BB83C6
:1010F000AA83CA01029628813981820F931F8A1719
:101100009B0771F48D919C911197280F391F2E5FC9
:101110003F4F39832883FD01828193819B838A839A
:10112000DF91CF910895DC0101C06D934150504093
:10113000E0F70895991B79E004C0991F961708F00D
:10114000961B881F7A95C9F780950895AA1BBB1B2B
:1011500051E107C0AA1FBB1FA617B70710F0A61BB7
:10116000B70B881F991F5A95A9F780959095BC01D8
:10117000CD010895A1E21A2EAA1BBB1BFD010DC0D3
:10118000AA1FBB1FEE1FFF1FA217B307E407F50737
:1011900020F0A21BB30BE40BF50B661F771F881F13
:1011A000991F1A9469F760957095809590959B01A9
:0811B000AC01BD01CF0108955F
:1011B80001FF01010A00016464000093032000009C
:00000001FF
/branches/FLightCtrl/Hex-Files/Flight-Ctrl_MEGA644_V0_60.hex
0,0 → 1,1430
:100000000C94D9010C94F4010C94F4010C94F401B7
:100010000C94F4010C94F4010C94F4010C94F4018C
:100020000C94F4010C94B20A0C94F4010C94F401B5
:100030000C9474140C94F4010C94F4010C94F401D9
:100040000C94F4010C94F4010C94D6090C94F40172
:100050000C94B0030C94F4010C947A030C94F40106
:100060000C949E0B0C94F4010C9493130C94F401D7
:100070000A0D466C69676874436F6E74726F6C200A
:100080005625642E256420000A0D3D3D3D3D3D3D35
:100090003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D90
:1000A0003D3D3D3D3D3D3D3D000A0D496E69742E8F
:1000B00020454550524F4D3A2047656E657269653F
:1000C00072652044656661756C742D506172616D56
:1000D000657465722E2E2E000A0D42656E75747A57
:1000E0006520506172616D657465727361747A2008
:1000F0002564000A0D4162676C65696368204C7570
:100100006674647275636B73656E736F722E2E0006
:100110004F4B0A0D000A0D537465756572756E6755
:100120003A200048656164696E67486F6C64004EF0
:1001300065757472616C000A0A0D002E005B2569FA
:100140005D002B2B204D696B726F4B6F7074657265
:10015000202B2B005625642E25640053657474698A
:100160006E673A202564200028632920486F6C6759
:100170006572204275737300486F6568653A202088
:1001800020202025356900536F6C6C486F656865C9
:100190003A20253569004C756674647275636B3A54
:1001A00020253569004F66662020202020203A2037
:1001B000253569004B65696E65200048F668656EF7
:1001C000726567656C756E6700616B742E204C619B
:1001D0006765004E69636B3A20202020202025357A
:1001E0006900526F6C6C3A20202020202025356950
:1001F000004B6F6D706173733A20202025356900C4
:100200004B313A25346920204B323A25346920009D
:100210004B333A25346920204B343A253469200089
:100220004B353A25346920204B363A253469200075
:100230004B373A25346920204B616EE46C65200011
:100240004E693A2534692020526F3A2534692000DE
:1002500047733A253469202047693A2534692000DC
:1002600050313A253469202050323A253469200033
:1002700050333A25346920204B616EE46C652000D0
:100280004779726F202D2053656E736F72004E692F
:10029000636B2025346920282533692900526F6C4F
:1002A0006C20253469202825336929004769657247
:1002B0002025346920282533692900414343202D16
:1002C0002053656E736F72004E69636B202534692D
:1002D00020282533692900526F6C6C202534692051
:1002E000282533692900486F636820253469202850
:1002F00025336929005370616E6E756E673A202050
:1003000025356900456D70662E506567656C3A2528
:100310003569004B6F6D70617373202020202020A1
:1003200020005269636874756E673A20202535692C
:10033000004D657373776572743A20202535690026
:1003400053746172743A20202020202535690050B2
:100350006F7469313A202025336900506F74693217
:100360003A202025336900506F7469333A202025E4
:10037000336900506F7469343A2020253369005383
:100380006572766F202000536574706F696E7420FB
:1003900020253369005374656C6C756E673A2025AF
:1003A00033690052616E67653A2533692D253369DB
:1003B000000011241FBECFEFD0E1DEBFCDBF11E0A2
:1003C000A0E0B1E0E0ECF8E502C005900D92AA389B
:1003D000B107D9F715E0AAE8B1E001C01D92AF312D
:1003E000B107E1F70C9427020C940000FB01863062
:1003F00008F085E0489FD0011124AC59BF4F842FED
:100400009927019724F00E944C2C0192FACF08956D
:10041000282FFB01863008F025E0429FD0011124EF
:10042000AC59BF4F842F9927019724F001900E9467
:10043000542CFACFA2E0B0E0022E0E94542C089572
:10044000A2E0B0E00E944C2C802D99270895CFEFB8
:10045000D0E1DEBFCDBF91E097B98FEF88B98BE1D6
:1004600084B995B98EE38AB9579A87EF8BB984B767
:10047000877F84BF809160008861809360001092C4
:10048000600080ED97E09093A4018093A301109207
:10049000DB011092DA011092A8041092A7041092C6
:1004A000DD011092DC011092DF011092DE0128982C
:1004B0000E94730A0E9465060E945F140E94710BDD
:1004C0000E94791378941092B6038CE38093B7035B
:1004D00084E08093B8038CE390E09F938F931F9206
:1004E0001F9280E790E09F938F931F920E944C078A
:1004F0008DB79EB707960FB6F8949EBF0FBE8DBFFF
:1005000088E890E09F938F931F920E944C07299A4E
:100510000F900F900F90C1E0D0E0DE010E944C2CB4
:10052000802D8B3329F189EA90E09F938F931F925E
:100530000E944C070E941B1B10E00F900F900F9021
:10054000123011F40E948C1B4AE36FEC74E0812F8F
:100550000E9408021F5F163098F3A2E0B0E081E02D
:10056000082E0E94542C8BE3DE01082E0E94542C8E
:100570000E9420024AE36FEC74E00E94F6010E94A0
:10058000200299279F938F9388ED90E09F938F93FC
:100590001F920E944C078091D7040F900F900F90EC
:1005A0000F900F9080FF20C083EF90E09F938F9378
:1005B0001F920E944C0784EC99E00E946A0AEC01A9
:1005C0000E94770B0F900F900F90CE010E94990A16
:1005D0008823D9F380E191E09F938F931F920E942B
:1005E0004C070F900F900F900E94D116289880ED25
:1005F00097E09093A4018093A30188EE93E09093F9
:10060000B1038093B00385E58093AB0385E191E06E
:100610009F938F931F920E944C078091D7040F9055
:100620000F900F9082FF03C083E291E002C08FE23F
:1006300091E09F938F931F920E944C070F900F9011
:100640000F9087E391E09F938F931F920E944C0736
:100650000E94010F0F900F900F908091A7018823A7
:1006600081F11092A7010E94201E0E94D41A28989E
:1006700080910001882319F08150809300018091BE
:10068000E001882329F08091E00181508093E0010E
:100690008091E704282F332780910A0190910B0164
:1006A0008217930734F480ED97E09093A401809330
:1006B000A30180913102882319F40E94791301C0AB
:1006C00028980E9483060E949A0580E090E00E948C
:1006D000990A882311F28091D901882329F088B1E1
:1006E00090E1892788B901C0449884EF91E00E9485
:1006F0006A0AB3CF1F920F920FB60F9211248F93F5
:100700009F93EF93FF93809101018823E1F48091FF
:100710009801909199010196909399018093980185
:10072000FC01E358FD4FE081ED3019F08639910569
:1007300039F4109299011092980181E0809301019F
:10074000E093C60004C01092990110929801FF91A5
:10075000EF919F918F910F900FBE0F901F90189562
:100760001F920F920FB60F9211242F933F934F9326
:100770005F938F939F93AF93BF93EF93FF9390E01B
:100780008091C6008093930150919E01563910F0DC
:1007900090939F01809193018D3009F05FC080910B
:1007A0009F01823009F05AC090939F01852F9927AD
:1007B00080549C4FFC013297408120919A013091E6
:1007C0009B01241B3109DC0111978C91281B3109F5
:1007D000C9019F7090939B0180939A0146E0969582
:1007E00087954A95E1F7982F935C90939C012F731E
:1007F0003070235C20939D018081981729F48C919F
:10080000281711F491E006C090E0809190018F5F6D
:100810008093900180919201882309F06EC0992302
:1008200009F46BC081E08093920150938F01E52F12
:10083000FF27E054FC4F8DE080838091C203823516
:1008400009F05BC088E190E02CE00FB6F894A89521
:10085000809360000FBE209360004FC020919F01E5
:10086000822F992781309105F9F0823091051CF48F
:10087000892B21F040C0029711F13DC08091930176
:10088000833239F480919201882319F481E08093B6
:100890009F01809193018093C00381E080939E012A
:1008A00080919301992722C02F5F20939F01E52F0C
:1008B000FF27E054FC4F80919301808309C0E52F0E
:1008C000FF27E054FC4F809193018083563920F438
:1008D0005F5F50939E0102C010929F01209193018F
:1008E00080919A0190919B01820F911D90939B01A1
:1008F00080939A0102C010929F01FF91EF91BF91E6
:10090000AF919F918F915F914F913F912F910F9058
:100910000FBE0F901F901895AC01A0E0B0E09D01B4
:10092000A817B90748F4EDE7F2E08191280F311DCF
:100930001196A417B507C8F33F70FD01E358FD4FAA
:10094000C90156E0969587955A95E1F7835C8083B7
:100950001196FD01E358FD4F2F733070822F835C99
:100960008083A258BD4F8DE08C931092010180913D
:100970007D028093C60008951F93CF93DF93382F95
:10098000EA01722F10E083E280937D0260937E0281
:1009900030937F02A3E0B0E0772309F458C07723B7
:1009A00011F4972F07C0FE01E10FF11D1F5F908129
:1009B000715011F4472F0EC0FE01E10FF11D1F5FB2
:1009C0004081715039F0FE01E10FF11D1F5F608120
:1009D000715001C0672FFD01E358FD4F892F8695A7
:1009E0008695835C80831196FD01E358FD4F892F26
:1009F00099278370907024E0880F991F2A95E1F75A
:100A000055279A0194E0369527959A95E1F7822B20
:100A1000835C80831196FD01E358FD4F4F70507049
:100A2000440F551F440F551F862F992726E0969592
:100A300087952A95E1F7842B835C80831196FD01CD
:100A4000E358FD4F6F73635C60831196A5CFCD01B2
:100A50000E948C04DF91CF911F9108951F93CF9333
:100A6000DF93EC0110E0662309F460C0A22FBB27DE
:100A70001297E42FFF27E054FC4F30813D534F5F26
:100A8000E42FFF27E054FC4F50815D534F5FE42F6C
:100A9000FF27E054FC4F70817D534F5FE42FFF2709
:100AA000E054FC4FE081ED534F5F842F9927A81746
:100AB000B907E4F1832F9927880F991F880F991F91
:100AC000352F32953F70382B852F99278F70907076
:100AD000F4E0880F991FFA95E1F7572F5695569530
:100AE000582B872F99278370907076E0880F991F75
:100AF0007A95E1F78E2B61506F3FC1F0FE01E10F57
:100B0000F11D30831F5F61506F3F81F0FE01E10FE7
:100B1000F11D50831F5F61506F3F41F0FE01E10FF7
:100B2000F11D80831F5F662309F0A3CFDF91CF9172
:100B30001F910895CF93DF93CDB7DEB72B970FB6F4
:100B4000F894DEBF0FBECDBF80919201882309F4D7
:100B5000A1C08FEF809300018091C2039927813754
:100B600091059CF48C3691050CF075C08736910583
:100B700009F44BC08836910524F48336910599F029
:100B800087C08836910511F183C08437910581F1C2
:100B90008537910524F481379105D9F179C08637DD
:100BA000910579F175C020918F0143E06BE08BEAEC
:100BB00093E00E942E058091C5019091AD03892B91
:100BC0008093C50181E08093950162C020918F01DF
:100BD00043E062E0CE010A960E942E058091C50195
:100BE0009A85892B8093C50181E08093960150C03E
:100BF00020918F0143E064E08AE891E00E942E0595
:100C000047C081E08093940143C081E080939701C5
:100C10003FC020918F0143E062E0CE010A960E941E
:100C20002E058A858F3F61F0863010F085E08A8737
:100C30004AE36FEC74E08A850E94F6018A8502C05F
:100C40000E9420022AE34FEC54E060917C02855B15
:100C50000E94BC041DC020918F0143E06AE38FEC29
:100C600094E00E942E058091C2034AE36FEC74E089
:100C70008B560E940802A2E0B0E08091C2038B561E
:100C8000082E0E94542C0E94200299270E941215BF
:100C9000109292012B960FB6F894DEBF0FBECDBF17
:100CA000DF91CF910895CF93C82F8A3019F48DE04A
:100CB0000E9453068091C00085FFFCCFC093C60000
:100CC00080E090E0CF910895089588E18093C1007D
:100CD0008091C00082608093C0008091C1008068D4
:100CE0008093C1008091C10080648093C1008AE23A
:100CF0008093C40088EC90E00E946A0A9093AA0353
:100D00008093A903089580910101882309F469C0A3
:100D100080919701882371F080910101882351F01F
:100D20002BE04BEA53E060917C0287E40E94BC0414
:100D3000109297018091A9039091AA030E94990AA9
:100D4000882321F4809195018823B1F080910101DD
:100D5000882391F022E346E554E060917C0284E42C
:100D60000E94BC04109295018AEF90E00E946A0AEA
:100D70009093AA038093A903809196018823F9F0A8
:100D8000809101018823D9F00E940A0F10929601E8
:100D90008091A0018F5F8093A001843011F41092A4
:100DA000A0013091A00124E1329FC0011124845F91
:100DB0009E4FAC0160E0832F805D0E94BC04809157
:100DC0009401882371F080910101882351F02AE079
:100DD00046EB53E060917C0286E50E94BC041092D1
:100DE00094010895982F80918804813069F480914E
:100DF000C601E82FFF27E45FFE4F90838F5F80934B
:100E0000C60121E030E005C0892F0E945306282F3B
:100E10003327C90108950F931F93CF93DF938C015C
:100E2000EB01672B39F0F80181918F010E94F206E6
:100E30002197C9F7DF91CF911F910F9108950F93DB
:100E40001F93CF93DF938C01EB01672B41F0F801E7
:100E50000F5F1F4F84910E94F2062197C1F7DF9127
:100E6000CF911F910F910895CF93C82F181634F486
:100E700080E20E94F206C1501C16D4F3CF9108956F
:100E8000CF93C82F181634F480E30E94F206C150A5
:100E90001C16D4F3CF9108952F923F924F925F92F8
:100EA0006F927F928F929F92AF92BF92CF92DF927A
:100EB000EF92FF920F931F93CF93DF93CDB7DEB7DF
:100EC000E0970FB6F894DEBF0FBECDBF26968FAD6C
:100ED00026972896EEADFFAD28971CA61DA61EA648
:100EE0001FA680938804A8E46A2E712C6C0E7D1EC8
:100EF0005F01C50105C0053239F00894A11CB11C81
:100F0000F50104910023B9F7B501681B790B11F0C5
:100F10000E941F07002309F430C20894A11CB11CD1
:100F2000552458AA252C1FEF59A6F5010894A11C99
:100F3000B11C0491053721F0802F80628837F1F4CD
:100F400050FE0EC0F30124E030E0620E731E80817B
:100F50009181A281B3818CA79DA7AEA7BFA70EC028
:100F6000F301A2E0B0E06A0E7B1E808191819C01BA
:100F7000442755272CA73DA74EA75FA7003221F491
:100F800089A5882391F61BC0033211F438E081C093
:100F90000A3211F00D3289F40A3251F4F30142E0C1
:100FA00050E0640E751E208022200CF0BECF2194EC
:100FB00050E1552A8FED5822B8CF0B3211F409A712
:100FC000B4CF0E32C1F5F5010894A11CB11C0491F7
:100FD0000A3279F4F301A2E0B0E06A0E7B1E608170
:100FE0007181BFEF6F3F7B0714F46FEF7FEF162F18
:100FF0009CCF60E070E0802F80538A30A0F4CB015A
:10100000F3E0880F991FFA95E1F7860F971F680F95
:10101000791F600F711D60537040F5010894A11C89
:10102000B11C0491E8CFEFEF6F3F7E0714F46FEF30
:101030007FEF162F7FCF003329F454FC76CFF0E2F8
:101040005F2A73CF802F81538930D8F460E070E03D
:10105000CB01E3E0880F991FEA95E1F7860F971F10
:10106000680F791F600F711D60537040F50108947F
:10107000A11CB11C0491802F80538A3048F3262E86
:1010800059CF083619F424E0522A4FCF0C3619F400
:1010900031E0532A4ACF033661F44E010894811C93
:1010A000911CF30142E050E0640E751E808189833B
:1010B0001BC1043421F0043611F00936B1F50434B3
:1010C00011F451E0552A50FE0AC0F30184E090E08B
:1010D000680E791E20813181428153810CC0F30159
:1010E00042E050E0640E751E808191819C0144278E
:1010F00037FD4095542F2CA73DA74EA75FA78CA581
:101100009DA5AEA5BFA5B7FF0DC0B095A0959095C4
:1011100081959F4FAF4FBF4F8CA79DA7AEA7BFA78D
:101120008DE289A77AE0472E7BC00F3411F00F368D
:1011300039F40F3411F491E0592A68E0462E6FC05B
:101140000037A1F4F301A2E0B0E06A0E7B1E8081BB
:1011500091819C01442755272CA73DA74EA75FA747
:1011600050E1452E30E4532A08E759C00337C1F552
:10117000F30142E050E0640E751E8080918081147E
:10118000910489F44E010894811C911C88E28983A2
:101190008EE6F401818385E78B838CE68C838D83D7
:1011A00089E28E831F8217FD13C0812F992787FD47
:1011B0009095AC0160E070E0C4010E94542A009751
:1011C00029F0D82ED8181D150CF090C0D12E8EC045
:1011D000F40101900020E9F73197DE2ED81886C07F
:1011E000053511F0053739F4053511F4F1E05F2AC2
:1011F0004AE0442E14C0083519F0083709F06CC0D5
:1012000030E1432E53FE0BC02CA53DA54EA55FA596
:10121000211531054105510511F030E4532A19A675
:1012200018AB17FD02C04FED542229E2822E912CFB
:101230008C0E9D1E8CA59DA5AEA5BFA50097A105F2
:10124000B10521F498A9992309F43FC0C42CDD24E9
:10125000EE24FF2433242CA53DA54EA55FA52C1517
:101260003D054E055F0510F091E0392E6CA57DA57A
:101270008EA59FA5A70196010E940F2CDC01CB0132
:10128000182F8A3010F4105D04C0195A083509F47B
:101290001F7DD4011E934D016CA57DA58EA59FA534
:1012A000A70196010E940F2C2CA73DA74EA75FA770
:1012B000332081F6B8E04B1641F453FE06C01033DC
:1012C00021F080E3F40182934F01CE010196D82EE4
:1012D000D818F8E2DF0E0BC0002309F44EC04E010F
:1012E0000894811C911C098381E0D82E19A61D2D1C
:1012F000C8A8CD18C7FCCC2489A5882311F01F5F8E
:1013000002C056FC1E5F1C0DE52CFF24C701807334
:101310009070892B21F4822D811B0E94340789A5AE
:10132000882329F061E070E0CE01899609C0E6FECD
:1013300009C080E38AA70BA762E070E0CE018A961D
:101340000E940B07C70180739070809721F4822D53
:10135000811B0E9440078C2D0E9440078D2D9927EC
:1013600087FD9095BC01C4010E940B07E4FEC1CD2E
:10137000822D811B0E943407BCCDE0960FB6F894F5
:10138000DEBF0FBECDBFDF91CF911F910F91FF90B8
:10139000EF90DF90CF90BF90AF909F908F907F9015
:1013A0006F905F904F903F902F9008951F920F92F3
:1013B0000FB60F9211242F933F935F936F937F93F8
:1013C0008F939F93AF93BF938091AA018150809395
:1013D000AA018F3F01F589E08093AA018091020163
:1013E0008F5F817080930201882319F481E08093DC
:1013F000A7018091A8019091A90101969093A9015C
:101400008093A80180913102882329F080913102D4
:101410008150809331028091A3019091A4010297A1
:1014200058F08091A3019091A40101979093A40199
:101430008093A3015A9A01C05A988091D70483FFE0
:101440003BC0349B0AC08091A5019091A6010196F2
:101450009093A6018093A5012FC08091A501909142
:10146000A601892B79F08091A5019091A601805A5F
:101470009F4040F48091A5019091A6019093F001C6
:101480008093EF018091EF019091F0012091ED01A7
:101490003091EE01821B930B845E9D4F68E671E0F4
:1014A0000E94FC2B845B90409093EC018093EB01B5
:1014B0001092A6011092A501BF91AF919F918F91BB
:1014C0007F916F915F913F912F910F900FBE0F9081
:1014D0001F9018952091A8013091A901280F391F5C
:1014E000C901019608958AE090E00E946A0A9093EB
:1014F000AC018093AB0182E085BD83EA84BD17BC5B
:1015000088E788BD96E096BD83EC8093B000909309
:10151000B1008091700082608093700080916E00B5
:10152000816080936E008AE08093B3001092B200D5
:1015300008952091A8013091A901821B930B892F56
:1015400099278695807490700895CF93DF930E94B9
:101550006A0AEC01CE010E94990A8823D9F3DF912F
:10156000CF9108951F920F920FB60F9211242F93CF
:101570003F934F935F936F937F938F939F93AF931B
:10158000BF93CF93DF93EF93FF938091030181503B
:10159000809303018F3F09F08DC083E88093B000F2
:1015A00080916801C82FDD27D093A201C093A101CB
:1015B0008091F5046091F10480FF2AC07727882785
:1015C000992720911D0230911E0240911F025091D7
:1015D000200257FF04C021583F4F4F4F5F4FA7E0F5
:1015E0005595479537952795AA95D1F70E94C92B10
:1015F00097FF04C061507E4F8F4F9F4FF9E0959544
:10160000879577956795FA95D1F7C60FD71F29C0AB
:1016100077278827992720911D0230911E0240913B
:101620001F025091200257FF04C021583F4F4F4FD7
:101630005F4FE7E05595479537952795EA95D1F7A0
:101640000E94C92B97FF04C061507E4F8F4F9F4F60
:1016500039E095958795779567953A95D1F7C61BAB
:10166000D70BD093A201C093A1018091F2049927D6
:101670002091A1013091A2012817390734F08091FF
:10168000F30499278217930724F49093A20180937F
:10169000A1018091A1019091A20190937D0480937A
:1016A0007C048091A1018093B3008091F404809325
:1016B000030104C083E08093B0005F98FF91EF9135
:1016C000DF91CF91BF91AF919F918F917F916F915A
:1016D0005F914F913F912F910F900FBE0F901F90F0
:1016E000189510927C008FEE80937A000895CF9326
:1016F000DF93C0E0D0E0C7BD82E390E00E94A50A7E
:101700008BE391E09F938F931F920E944C078091EF
:101710000401909105010F900F900F908458934011
:1017200020F02196CA3FD10530F3C093960488EC8F
:1017300090E00E94A50ADF91CF9108951F920F9229
:101740000FB60F921124EF92FF920F931F932F93D6
:101750003F934F935F936F937F938F939F93AF9339
:10176000BF93CF93DF93EF93FF9310927A00809112
:10177000C401682F77278F5F8093C40163307105A0
:1017800009F424C1643071055CF46130710509F419
:101790006BC0623071050CF0C0C0672B91F00FC3B5
:1017A0006530710509F452C1653071050CF429C129
:1017B0006630710509F470C16730710509F47FC2A4
:1017C000FEC260912B0270912C0280917800909162
:1017D0007900681B790B8091BD019091BE01860F45
:1017E000971F9093BE018093BD018091B4018F5FDC
:1017F0008093B4019B01442737FD4095542F80917D
:10180000F9019091FA01A091FB01B091FC01820FC6
:10181000931FA41FB51F8093F9019093FA01A09321
:10182000FB01B093FC018091F5019091F601A0912C
:10183000F701B091F801820F931FA41FB51F809389
:10184000F5019093F601A093F701B093F80181E0C0
:101850008093C3018091AD019091AE010196909368
:10186000AE018093AD01AFC26091780070917900B4
:1018700080912D0290912E02681B790B9B014427C9
:1018800037FD4095542F8091010290910202A09162
:101890000302B0910402820F931FA41FB51F80930F
:1018A000010290930202A0930302B093040280917C
:1018B000FD019091FE01A091FF01B0910002820F05
:1018C000931FA41FB51F8093FD019093FE01A09369
:1018D000FF01B093000280917800909179000A97FF
:1018E00010F464E47DEF8091780090917900895E36
:1018F000934010F06CEB72E08091BF019091C001B9
:10190000860F971F9093C0018093BF018091B5010E
:101910008F5F8093B50182E096C0609178007091EE
:10192000790080912F0290913002681B790B9B0106
:10193000442737FD4095542F8091090290910A0267
:10194000A0910B02B0910C02820F931FA41FB51F30
:101950008093090290930A02A0930B02B0930C02A9
:101960008091050290910602A0910702B0910802B1
:10197000820F931FA41FB51F809305029093060248
:10198000A0930702B09308028091780090917900AB
:101990000A9710F464E47DEF8091780090917900CB
:1019A000895E934010F06CEB72E08091C1019091E0
:1019B000C201860F971F9093C2018093C10180914D
:1019C000B6018F5F8093B60184E03DC080910A012B
:1019D00090910B019C01220F331F280F391F80911A
:1019E0007800909179000E94E82B260F371F3695DA
:1019F00027953695279530930B0120930A0186E0B1
:101A000022C0809127029091280220917800309185
:101A10007900821B930B90938A04809389048091B0
:101A2000BB019091BC012091890430918A04820FFE
:101A3000931F9093BC018093BB018091B2018F5F93
:101A40008093B20187E08093C301BDC1809178008B
:101A5000909179002091290230912A02821B930BE8
:101A600090938A04809389048091B9019091BA017E
:101A70002091890430918A04820F931F9093BA01B8
:101A80008093B9018091B3018F5F8093B30185E0AA
:101A90008093C30186E010C1809178009091790015
:101AA000AA2797FDA095BA2FBC01CD010E94072B54
:101AB0007B018C018091230290912402A091250248
:101AC000B09126029C01AD01C801B7010E94612AB4
:101AD000DC01CB01BC01CD010E94EA2ADC01CB0173
:101AE0009093B8018093B7018091890490918A0402
:101AF0008091890490918A0497FF03C09095819505
:101B00009F4F97FD0396AC01559547955595479581
:101B100080919404909195048091940490919504FF
:101B200097FF03C0909581959F4F9C0197FF02C03E
:101B30002D5F3F4F3595279535952795240F351FF8
:101B40008091B7019091B801820F931F9093B801D3
:101B50008093B7018091B7019091B801029724F169
:101B60008091230290912402A0912502B091260237
:101B700020E030E048E454E4BC01CD010E94112B88
:101B800088230CF044C08091230290912402A091FC
:101B90002502B09126022AE037ED43EA5CE3BC015E
:101BA000CD010E94622A29C08091B7019091B801AD
:101BB0008F5F9F4F64F58091230290912402A09142
:101BC0002502B091260220E030E046E154E4BC0159
:101BD000CD010E94142B1816D4F480912302909109
:101BE0002402A0912502B09126022AE037ED43EAB3
:101BF0005CE3BC01CD010E94612ADC01CB01809332
:101C0000230290932402A0932502B093260281E040
:101C10008093B101809178009091790090938C0429
:101C200080938B048091B7019091B8019C01442767
:101C300037FD4095542F8091F1019091F201A091D0
:101C4000F301B091F401820F931FA41FB51F80937D
:101C5000F1019093F201A093F301B093F40120916C
:101C6000F1013091F2014091F3015091F40157FFDD
:101C700004C021503C4F4F4F5F4F7AE05595479538
:101C8000379527957A95D1F78091F1019091F201DE
:101C9000A091F301B091F401821B930BA40BB50B3F
:101CA0008093F1019093F201A093F301B093F401BA
:101CB00083E08093C30187E08093C40184C0809156
:101CC000990490919A042091780030917900820FC4
:101CD000931F90939A0480939904809191048F5F4D
:101CE0008093910480919104853008F468C08091BC
:101CF00078009091790090930501809304011092EF
:101D0000910480918D0490918E04209199043091DA
:101D10009A04821B930B2091D7013091D801821B2A
:101D2000930B9093B0018093AF01809199049091AF
:101D30009A04EC01EE27D7FDE095FE2F20910601D5
:101D4000309107014091080150910901DA01C90160
:101D5000880F991FAA1FBB1F820F931FA41FB51FB7
:101D6000C80FD91FEA1FFB1FF7FF03C02396E11D11
:101D7000F11D82E0F595E795D795C7958A95D1F73E
:101D8000C0930601D0930701E0930801F093090185
:101D90008091060190910701A0910801B09109017D
:101DA0009C0180918D0490918E04821B930B9093E3
:101DB000D8018093D70110929A041092990410923E
:101DC000C3011092C4018091C30180937C008FEE07
:101DD00080937A00FF91EF91DF91CF91BF91AF9106
:101DE0009F918F917F916F915F914F913F912F9133
:101DF0001F910F91FF90EF900F900FBE0F901F90CB
:101E0000189590E2ECE0F1E08FE49193815087FF28
:101E1000FCCF08951F93CF93DF938091C50180FF7E
:101E20000CC08091C901882311F0815002C08091BB
:101E300066018093C9010E94010F8091C50181FF55
:101E400007C08091C9018F5F8093C9010E94010F73
:101E50008091C501992780FF04C081FF02C01092C4
:101E6000C90181E18093C6018091C90199279F939F
:101E70008F938DE391E09F938F9311E01F930E94C6
:101E80004C070F900F900F900F900F908091C90109
:101E9000C82FDD27C530D10509F437C2C630D105BA
:101EA000ACF4C230D10509F4CEC0C330D10534F44E
:101EB000209719F1219709F45EC010C4C330D105F1
:101EC00009F42FC1249709F491C108C4C830D10581
:101ED00009F41CC3C930D10544F4C630D10509F456
:101EE00083C2279709F4F2C2F9C3C930D10509F4B6
:101EF0004FC32A9709F4A0C3F1C31092C60182E42C
:101F000091E09F938F931F930E944C0784E18093ED
:101F1000C6010F900F900F908CE390E09F938F93EA
:101F2000DF93CF9384E591E09F938F931F930E945B
:101F30004C0788E28093C6018DB79EB707960FB60F
:101F4000F8949EBF0FBE8DBF0E94200299279F93D9
:101F50008F938BE591E09F938F931F930E944C0783
:101F60008CE38093C6010F900F900F900F900F900D
:101F700088E691E05FC08091D70480FF49C010924D
:101F8000C6018091D7019091D8019F938F9388E7E4
:101F900091E09F938F931F930E944C0784E180935D
:101FA000C6010F900F900F900F900F908091D50168
:101FB0009091D6019F938F9387E891E09F938F93A1
:101FC0001F930E944C0788E28093C6010F900F90E8
:101FD0000F900F900F9080910401909105019F93B5
:101FE0008F9386E991E09F938F931F930E944C07F4
:101FF0008CE38093C6010F900F900F900F900F907D
:102000008091960499279F938F9385EA91E009C365
:1020100084E18093C60184EB91E09F938F931F939B
:102020000E944C0788E28093C6010F900F900F909A
:102030008BEB91E09F938F931F930E944C070F901F
:102040000F900F9050C31092C60189EC91E09F93BE
:102050008F931F930E944C0784E18093C6010F90D9
:102060000F900F9080911D0290911E02A0911F026F
:10207000B0912002B7FF04C081509C4FAF4FBF4FBB
:102080003AE0B595A795979587953A95D1F7BF937F
:10209000AF939F938F9383ED91E09F938F931F93C3
:1020A0000E944C0788E28093C6018DB79EB70796C1
:1020B0000FB6F8949EBF0FBE8DBF80911502909110
:1020C0001602A0911702B0911802B7FF04C0815008
:1020D0009C4FAF4FBF4F2AE0B595A7959795879531
:1020E0002A95D1F7BF93AF939F938F9382EE91E0A0
:1020F0009F938F931F930E944C078CE38093C6019C
:102100008DB79EB707960FB6F8949EBF0FBE8DBFD2
:102110008091EF019091F0019F938F9381EF91E077
:1021200080C21092C6018091A7049091A8049F9349
:102130008F938091A5049091A6049F938F9380E044
:1021400092E09F938F931F930E944C0784E18093AA
:10215000C6018DB79EB707960FB6F8949EBF0FBE07
:102160008DBF8091AB049091AC049F938F9380912D
:10217000A9049091AA049F938F9380E192E09F938A
:102180008F931F930E944C0788E28093C6018DB7FE
:102190009EB707960FB6F8949EBF0FBE8DBF809175
:1021A000AF049091B0049F938F938091AD04909170
:1021B000AE049F938F9380E292E09F938F931F933F
:1021C0000E944C078CE38093C6018DB79EB707969B
:1021D0000FB6F8949EBF0FBE8DBF8091B104909151
:1021E000B2049F938F9380E392E01BC21092C601CA
:1021F0008091D004E82FFF27EE0FFF1FED55FB4F16
:10220000808191819F938F938091CF04E82FFF2746
:10221000EE0FFF1FED55FB4F808191819F938F93B0
:1022200080E492E09F938F931F930E944C0784E178
:102230008093C6018DB79EB707960FB6F8949EBFE0
:102240000FBE8DBF8091D204E82FFF27EE0FFF1F36
:10225000ED55FB4F808191819F938F938091D104A5
:10226000E82FFF27EE0FFF1FED55FB4F8081918177
:102270009F938F9380E592E09F938F931F930E948B
:102280004C0788E28093C6018DB79EB707960FB6BC
:10229000F8949EBF0FBE8DBF8091D404E82FFF2716
:1022A000EE0FFF1FED55FB4F808191819F938F9320
:1022B0008091D304E82FFF27EE0FFF1FED55FB4F52
:1022C000808191819F938F9380E692E09F938F937B
:1022D0001F930E944C078CE38093C6018DB79EB775
:1022E00007960FB6F8949EBF0FBE8DBF8091D504A0
:1022F000E82FFF27EE0FFF1FED55FB4F80819181E7
:102300009F938F9380E792E08CC11092C60180E882
:1023100092E09F938F931F930E944C0784E18093D8
:10232000C6010F900F900F9080912F029091300274
:102330009F938F938091B601282F33278091C101FD
:102340009091C201B9010E94FC2B7F936F938EE89C
:1023500092E09F938F931F930E944C0788E2809393
:10236000C6018DB79EB707960FB6F8949EBF0FBEF5
:102370008DBF80912D0290912E029F938F9380911B
:10238000B501282F33278091BF019091C001B90179
:102390000E94FC2B7F936F938DE992E09F938F9324
:1023A0001F930E944C078CE38093C6018DB79EB7A4
:1023B00007960FB6F8949EBF0FBE8DBF80912B027B
:1023C00090912C029F938F938091B401282F3327F3
:1023D0008091BD019091BE01B9010E94FC2B7F93B9
:1023E0006F938CEA92E06CC11092C6018BEB92E085
:1023F0009F938F931F930E944C0784E18093C601A3
:102400000F900F900F908091290290912A029F9334
:102410008F938091B301282F33278091B901909138
:10242000BA01B9010E94FC2B7F936F9388EC92E074
:102430009F938F931F930E944C0788E28093C6015D
:102440008DB79EB707960FB6F8949EBF0FBE8DBF8F
:1024500080912702909128029F938F938091B201DF
:10246000282F33278091BB019091BC01B9010E94B4
:10247000FC2B7F936F9387ED92E09F938F931F9335
:102480000E944C078CE38093C6018DB79EB70796D8
:102490000FB6F8949EBF0FBE8DBF8091230290911E
:1024A0002402A0912502B0912602BC01CD010E9418
:1024B000EA2ADC01CB019F938F9380918B0490914A
:1024C0008C049F938F9386EE92E0FAC084E1809310
:1024D000C60180910A0190910B019F938F9385EF24
:1024E00092E09F938F931F930E944C0788E2809302
:1024F000C6010F900F900F900F900F908091E00108
:1025000099279F938F9384E093E08BC01092C6012C
:1025100083E193E09F938F931F930E944C0784E184
:102520008093C6010F900F900F908091EB019091D6
:10253000EC019F938F9382E293E09F938F931F937D
:102540000E944C0788E28093C6010F900F900F9075
:102550000F900F908091EF019091F0019F938F93D6
:1025600081E393E09F938F931F930E944C078CE32A
:102570008093C6010F900F900F900F900F90809155
:10258000ED019091EE019F938F9380E493E049C019
:102590001092C6018091E7019091E8019F938F937B
:1025A0008FE493E09F938F931F930E944C0784E1E5
:1025B0008093C6010F900F900F900F900F90809115
:1025C000E5019091E6019F938F938BE593E09F93B4
:1025D0008F931F930E944C0788E28093C6010F904F
:1025E0000F900F900F900F908091E3019091E40174
:1025F0009F938F9387E693E09F938F931F930E94FF
:102600004C078CE38093C6010F900F900F900F90B2
:102610000F908091E1019091E2019F938F9383E766
:1026200093E09F938F931F930E944C070F900F90FE
:102630000F900F900F9057C01092C6018FE793E054
:102640009F938F931F930E944C0784E18093C60150
:102650000F900F900F908091680199279F938F930F
:1026600087E893E09F938F931F930E944C0788E223
:102670008093C6010F900F900F900F900F90809154
:10268000A1019091A2019F938F9385E993E09F937D
:102690008F931F930E944C078CE38093C6010F9089
:1026A0000F900F900F900F908091F30499279F93B4
:1026B0008F938091F20499279F938F9383EA93E0FD
:1026C0009F938F931F930E944C078DB79EB70796D9
:1026D0000FB6F8949EBF0FBE8DBF05C0815080938A
:1026E00066011092C9011092C501DF91CF911F912F
:1026F00008951092B9008AE28093B800089585EA9F
:102700008093BC0080E090E0089584E98093BC0051
:1027100008951092B9008093BB0085E88093BC00B7
:1027200080E090E008951F920F920FB60F9211244F
:102730002F933F934F935F936F937F938F939F93C9
:10274000AF93BF93EF93FF938091CC01282F332752
:102750008F5F8093CC012330310509F44AC02430C7
:1027600031054CF421303105D9F0223031059CF58A
:10277000232B89F093C02530310509F451C0253051
:102780003105E4F12630310509F453C02730310515
:1027900009F46FC083C08091CB01880F8E5A66C048
:1027A0008091CB01282F33278F5F8093CB0121307D
:1027B000310509F453C02230310524F4232B09F4E8
:1027C0004AC06CC02230310509F44BC023303105BA
:1027D00009F44AC063C00E9485138091CB01843004
:1027E00018F41092CC0102C01092CB010E947F130A
:1027F00055C08091CA01880F8D5A38C08091CA0196
:1028000099278130910551F1823091051CF4892B73
:1028100011F144C08230910521F1039729F13EC0A6
:102820008091CA01E82FFF27E556FB4F8091BB003E
:1028300080838091CA0199278130910579F0823097
:1028400091051CF4892B39F029C08230910549F09B
:10285000039751F023C080916D0208C080916E02F1
:1028600005C08091710202C0809173020E94891399
:1028700015C09091CA01E92FFF27E556FB4F8091C3
:10288000BB008483892F8F5F8093CA01843010F04E
:102890001092CA010E9485131092CC01FF91EF9112
:1028A000BF91AF919F918F917F916F915F914F9168
:1028B0003F912F910F900FBE0F901F90189583ECB2
:1028C0008093810080916F00806280936F001092EE
:1028D0002C0210922B0210922E0210922D021092B6
:1028E000300210922F0208951F920F920FB60F928E
:1028F00011242F933F934F935F936F937F938F9305
:102900009F93AF93BF93EF93FF93409186005091B5
:1029100087008091CD019091CE01481B590B809189
:102920008600909187009093CE018093CD01CA01DB
:102930008D5D95408356994148F481E090E09093F5
:10294000D0018093CF01109267015BC02091CF012D
:102950003091D0012A3031050CF053C0CA018B5F91
:102960009040845B914008F043C0425D5140F901C2
:10297000E20FF31FED55FB4F80819181BA01681B77
:10298000790BCB0177FF03C0909581959F4F0697F8
:102990004CF48091E001883C28F48091E001865F4E
:1029A0008093E001F901E20FF31FDF01AD55BB4F4A
:1029B0008D919C9111979C01220F331F280F391F75
:1029C000240F351F37FF02C02D5F3F4FA9015595DA
:1029D000479555954795E754FB4F8D919C911197DD
:1029E0009A01281B390B3183208311965C934E93F7
:1029F0008091CF019091D00101969093D001809366
:102A0000CF01FF91EF91BF91AF919F918F917F91F6
:102A10006F915F914F913F912F910F900FBE0F904B
:102A20001F901895CF93C82FC150CF3F81F0809150
:102A3000D901882361F484E690E09093A401809307
:102A4000A3018AEF90E00E94A50AC15080F7CF91C0
:102A5000089510927A008091B601882379F08091D0
:102A6000B601282F33278091C1019091C201B9018D
:102A70000E94FC2B70930C0560930B058091B501AF
:102A8000882379F08091B501282F33278091BF01E9
:102A90009091C001B9010E94FC2B70930A056093CC
:102AA00009058091B401882379F08091B401282F21
:102AB00033278091BD019091BE01B9010E94FC2B8A
:102AC00070931805609317058091B3018823E1F096
:102AD0008091B9019091BA01AA2797FDA095BA2FCC
:102AE00034E0880F991FAA1FBB1F3A95D1F7209198
:102AF000B301332744275527BC01CD010E94312C57
:102B000030931505209314058091B2018823E1F0DC
:102B10008091BB019091BC01AA2797FDA095BA2F87
:102B200024E0880F991FAA1FBB1F2A95D1F7209177
:102B3000B201332744275527BC01CD010E94312C17
:102B400030931E0520931D058091B1018823A9F0C3
:102B50008091B7019091B801AA2797FDA095BA2F4F
:102B60002091B101332744275527BC01CD010E9494
:102B7000312C30930F0520930E051092C201109254
:102B8000C1011092B6011092C0011092BF011092C3
:102B9000B5011092BE011092BD011092B4011092C5
:102BA000BC011092BB011092B2011092BA011092B6
:102BB000B9011092B3011092B8011092B7011092AE
:102BC000B1018FEE80937A008091D304E82FFF2724
:102BD000EE0FFF1FED55FB4F8081918182599F4F72
:102BE0002091E7013091E801281739071CF42F5F85
:102BF0003F4F0CC08081918182599F4F821793076C
:102C00004CF42115310531F0215030403093E8016A
:102C10002093E7018091D404E82FFF27EE0FFF1FD8
:102C2000ED55FB4F8081918182599F4F2091E501A5
:102C30003091E601281739071CF42F5F3F4F0CC075
:102C40008081918182599F4F821793074CF42115FF
:102C5000310531F0215030403093E6012093E501F9
:102C60008091D504E82FFF27EE0FFF1FED55FB4F96
:102C70008081918182599F4F2091E3013091E4013D
:102C8000281739071CF42F5F3F4F0CC080819181BA
:102C900082599F4F821793074CF42115310531F06B
:102CA000215030403093E4012093E3018091D60419
:102CB000E82FFF27EE0FFF1FED55FB4F808191811D
:102CC00082599F4F2091E1013091E2012817390785
:102CD0001CF42F5F3F4F0CC08081918182599F4F20
:102CE000821793074CF42115310531F02150304003
:102CF0003093E2012093E1018091E7019091E80196
:102D000097FF05C01092E8011092E7010AC08F3FBB
:102D1000910539F034F08FEF90E09093E8018093C3
:102D2000E7018091E5019091E60197FF05C01092BF
:102D3000E6011092E5010AC08F3F910539F034F0A9
:102D40008FEF90E09093E6018093E5018091E3019D
:102D50009091E40197FF05C01092E4011092E30105
:102D60000AC08F3F910539F034F08FEF90E09093D7
:102D7000E4018093E3018091E1019091E20197FFEA
:102D800005C01092E2011092E10108958F3F910574
:102D900039F034F08FEF90E09093E2018093E101FD
:102DA0000895CF93DF9310922A0210922902109275
:102DB00028021092270280E090E0A0E0B0E080932B
:102DC000230290932402A0932502B093260210922E
:102DD000300210922F0210922E0210922D021092A9
:102DE0002C0210922B020E94291585E090E00E948F
:102DF0006A0AEC01CE010E94990A8823D9F30E9445
:102E000029158091D70480FF10C080910401909112
:102E10000501875B934038F480910401909105018E
:102E20008E5E924010F40E94770B80910B0590917A
:102E30000C0580910B0590910C0597FF03C09095B0
:102E400081959F4F9093300280932F0280910905C6
:102E500090910A058091090590910A0597FF03C09A
:102E6000909581959F4F90932E0280932D02809193
:102E7000170590911805809117059091180597FFF7
:102E800003C0909581959F4F90932C0280932B02C5
:102E900080911D0590911E0580911D0590911E0544
:102EA00097FF03C0909581959F4F97FD0F9654E033
:102EB000959587955A95E1F790932802809327027C
:102EC0008091140590911505809114059091150538
:102ED00097FF03C0909581959F4F97FD0F9644E013
:102EE000959587954A95E1F790932A028093290258
:102EF00080918B0490918C04AA2797FDA095BA2FFE
:102F0000BC01CD010E94072BDC01CB018093230281
:102F100090932402A0932502B093260210920902F6
:102F200010920A0210920B0210920C0210920502EB
:102F300010920602109207021092080210920102EB
:102F40001092020210920302109204021092FD01EC
:102F50001092FE011092FF01109200021092F901EE
:102F60001092FA011092FB011092FC0110920C05D4
:102F700010920B0510920A0510920905109218057F
:102F8000109217058091060190910701A091080108
:102F9000B091090190938E0480938D041092B0013A
:102FA0001092AF011092F1011092F2011092F30110
:102FB0001092F4018091EF019091F0019093EE0155
:102FC0008093ED010E942A2A82E390E09093A4016D
:102FD0008093A301DF91CF910895EF92FF920F9319
:102FE0001F9310927A008091B601882379F0809126
:102FF000B601282F33278091C1019091C201B901F8
:103000000E94FC2B70930C0560930B058091B50119
:10301000882379F08091B501282F33278091BF0153
:103020009091C001B9010E94FC2B70930A05609336
:1030300009058091B401882379F08091B401282F8B
:1030400033278091BD019091BE01B9010E94FC2BF4
:1030500070931805609317058091B301882309F4D4
:1030600046C08091140590911505AA2797FDA0955B
:10307000BA2F7C018D01E3E0EE0CFF1C001F111F35
:10308000EA95D1F7E81AF90A0A0B1B0B8091B901EE
:103090009091BA01AA2797FDA095BA2F74E0880FE6
:1030A000991FAA1FBB1F7A95D1F72091B30133272F
:1030B00044275527BC01CD010E94312CE20EF31E9E
:1030C000041F151F17FF08C087E090E0A0E0B0E0E4
:1030D000E80EF91E0A1F1B1F63E015950795F7946C
:1030E000E7946A95D1F7F0921505E0921405809166
:1030F000B201882309F446C080911D0590911E05F8
:10310000AA2797FDA095BA2F7C018D0153E0EE0C04
:10311000FF1C001F111F5A95D1F7E81AF90A0A0B74
:103120001B0B8091BB019091BC01AA2797FDA09534
:10313000BA2F44E0880F991FAA1FBB1F4A95D1F7E9
:103140002091B201332744275527BC01CD010E94AD
:10315000312CE20EF31E041F151F17FF08C087E075
:1031600090E0A0E0B0E0E80EF91E0A1F1B1F33E05C
:1031700015950795F794E7943A95D1F7F0921E05C7
:10318000E0921D058091B101882309F43FC0809130
:103190000E0590910F05AA2797FDA095BA2F7C01E7
:1031A0008D0123E0EE0CFF1C001F111F2A95D1F7A3
:1031B000E81AF90A0A0B1B0B8091B7019091B8012C
:1031C000AA2797FDA095BA2F2091B1013327442754
:1031D0005527BC01CD010E94312CE20EF31E041FC5
:1031E000151F17FF08C087E090E0A0E0B0E0E80EF0
:1031F000F91E0A1F1B1FA3E015950795F794E79486
:10320000AA95D1F7F0920F05E0920E051092C20137
:103210001092C1011092B6011092C0011092BF012C
:103220001092B5011092BE011092BD011092B4012E
:103230001092BC011092BB011092B2011092BA011F
:103240001092B9011092B3011092B8011092B70117
:103250001092B1018091F9019091FA01A091FB01C6
:10326000B091FC0180930D0290930E02A0930F0287
:10327000B09310028091090290910A02A0910B0272
:10328000B0910C0280931D0290931E02A0931F0226
:10329000B09320028091010290910202A09103025A
:1032A000B09104028093150290931602A093170226
:1032B000B09318028091050290910602A091070236
:1032C000B09108028093190290931A02A0931B02F6
:1032D000B0931C028091FD019091FE01A091FF012D
:1032E000B09100028093110290931202A0931302F6
:1032F000B09314028FEE80937A0080910B05909129
:103300000C05893C91058CF020910B0530910C0542
:10331000220F331F220F331F80910B0590910C0554
:10332000820F931F8052934017C080910B0590919C
:103330000C0588539F4FA4F420910B0530910C0588
:10334000220F331F220F331F80910B0590910C0524
:10335000820F931F805E9C4F90930C0580930B050A
:103360008091090590910A05893C91058CF0209186
:10337000090530910A05220F331F220F331F809158
:10338000090590910A05820F931F8052934017C040
:103390008091090590910A0588539F4FA4F42091CC
:1033A000090530910A05220F331F220F331F809128
:1033B000090590910A05820F931F805E9C4F9093A0
:1033C0000A05809309058091D304E82FFF27EE0FAB
:1033D000FF1FED55FB4F8081918182599F4F2091B6
:1033E000E7013091E801281739071CF42F5F3F4FA0
:1033F0000CC08081918182599F4F821793074CF4B2
:103400002115310531F0215030403093E8012093EF
:10341000E7018091D404E82FFF27EE0FFF1FED5541
:10342000FB4F8081918182599F4F2091E50130911E
:10343000E601281739071CF42F5F3F4F0CC080812D
:10344000918182599F4F821793074CF421153105C2
:1034500031F0215030403093E6012093E501809116
:10346000D504E82FFF27EE0FFF1FED55FB4F80819E
:10347000918182599F4F2091E3013091E4012817F7
:1034800039071CF42F5F3F4F0CC080819181825916
:103490009F4F821793074CF42115310531F02150CD
:1034A00030403093E4012093E3018091D604E82F6B
:1034B000FF27EE0FFF1FED55FB4F80819181825951
:1034C0009F4F2091E1013091E201281739071CF448
:1034D0002F5F3F4F0CC08081918182599F4F82178F
:1034E00093074CF42115310531F0215030403093D1
:1034F000E2012093E1018091E7019091E80197FFBB
:1035000005C01092E8011092E7010AC08F3F9105B3
:1035100039F034F08FEF90E09093E8018093E70169
:103520008091E5019091E60197FF05C01092E601B8
:103530001092E5010AC08F3F910539F034F08FEF0A
:1035400090E09093E6018093E5018091E3019091F2
:10355000E40197FF05C01092E4011092E3010AC054
:103560008F3F910539F034F08FEF90E09093E401B4
:103570008093E3018091E1019091E20197FF05C002
:103580001092E2011092E1010AC08F3F910539F0DB
:1035900034F08FEF90E09093E2018093E1011F916E
:1035A0000F91FF90EF9008958091D901882301F544
:1035B00080936E0280936D028093710280937302F8
:1035C00080918A01882311F080936D0280918B0194
:1035D000882311F080936E0280918C01882311F072
:1035E0008093730280918D01882311F08093710282
:1035F00080916D029927909381048093800480913B
:103600006E029927909383048093820480917302C1
:10361000992790938504809384048091710299275F
:1036200090938704809386041092CC011092CB0172
:103630000E947F13089581E08093CF0452E050935D
:10364000D00483E08093D10444E04093D20435E079
:103650003093D30486E08093D40487E08093D5042C
:1036600028E02093D6041092D7049EE19093D804CA
:103670008BEF8093DA048AE08093DB0486E4809306
:10368000D9049093DD045093DC044093DE0420932E
:10369000DF0480E18093E0048FE08093E1048AEF0F
:1036A0008093E2048AE18093E30480E88093E40459
:1036B00088E78093E50496E99093E6048AE5809391
:1036C000E70483E28093E80484E18093E9041092A4
:1036D000EA043093EB041092EC041092ED04109283
:1036E000EE041092EF0484E68093F00488E2809365
:1036F000F1041092F50482E38093F2049093F304B2
:103700003093F404ADEFB4E0EAE7F1E08CE001902F
:103710000D928150E1F7089581E08093CF0442E05B
:103720004093D00483E08093D10424E02093D2041A
:1037300035E03093D30486E08093D40487E080930F
:10374000D5041092D7048EE18093D8048BEF809338
:10375000DA048AE08093DB0492E39093D904909397
:10376000DD044093DC042093DE041092DF0480E14A
:103770008093E0048FE08093E1048AEF8093E20479
:103780008AE18093E30480E88093E4048FEA8093E5
:10379000E5048093E6048AE58093E70483E280935E
:1037A000E80484E18093E9041092EA043093EB0486
:1037B0001092EC041092ED041092EE041092EF04BB
:1037C00084E68093F00488E28093F1041092F5047B
:1037D0009093F20486E98093F3043093F404ADEF00
:1037E000B4E0E2E8F1E08CE001900D928150E1F765
:1037F00008951F938091DA048B3F98F08B3F19F462
:103800008091E7010EC08C3F19F48091E50109C059
:103810008D3F19F48091E30104C08E3F21F4809123
:10382000E1018093700180917001882321F08F3F26
:1038300011F4809370018091D9048B3F98F08B3FF5
:1038400019F48091E7010EC08C3F19F48091E501D5
:1038500009C08D3F19F48091E30104C08E3F21F42B
:103860008091E1018093710180917101882329F099
:10387000843618F084E6809371018091DB048B3FDD
:1038800098F08B3F19F48091E7010EC08C3F19F43A
:103890008091E50109C08D3F19F48091E30104C0D6
:1038A0008E3F21F48091E10180936F0180916F013F
:1038B000882329F0843618F084E680936F01809184
:1038C000DD048B3F98F08B3F19F48091E7010EC027
:1038D0008C3F19F48091E50109C08D3F19F4809166
:1038E000E30104C08E3F21F48091E10180936E01D9
:1038F00080916E01882321F08F3F11F480936E0137
:103900008091E4048B3F98F08B3F19F48091E7019C
:103910000EC08C3F19F48091E50109C08D3F19F468
:103920008091E30104C08E3F21F48091E1018093F6
:103930006D0180916D01882321F08F3F11F48093F8
:103940006D018091E5048B3F98F08B3F19F48091D5
:10395000E7010EC08C3F19F48091E50109C08D3F4D
:1039600019F48091E30104C08E3F21F48091E101BC
:1039700080936C0180916C018B3010F48AE002C05E
:103980008F3F11F480936C018091E6048B3F98F097
:103990008B3F19F48091E7010EC08C3F19F48091A0
:1039A000E50109C08D3F19F48091E30104C08E3F09
:1039B00021F48091E10180936B0180916B01882358
:1039C00021F08F3F11F480936B018091EB048B3FCA
:1039D00098F08B3F19F48091E7010EC08C3F19F4E9
:1039E0008091E50109C08D3F19F48091E30104C085
:1039F0008E3F21F48091E1018093690180916901FA
:103A0000882321F08F3F11F4809369018091EC04A9
:103A10008B3F98F08B3F19F48091E7010EC08C3FEB
:103A200019F48091E50109C08D3F19F48091E301FB
:103A300004C08E3F21F48091E1018093D4018091F4
:103A4000D401882321F08F3F11F48093D401809119
:103A5000ED048B3F98F08B3F19F48091E7010EC085
:103A60008C3F19F48091E50109C08D3F19F48091D4
:103A7000E30104C08E3F21F48091E1018093D301E2
:103A80008091D301882321F08F3F11F48093D301DB
:103A90008091EE048B3F98F08B3F19F48091E70101
:103AA0000EC08C3F19F48091E50109C08D3F19F4D7
:103AB0008091E30104C08E3F21F48091E101809365
:103AC000D2018091D201882321F08F3F11F480939D
:103AD000D2018091EF048B3F98F08B3F19F48091D5
:103AE000E7010EC08C3F19F48091E50109C08D3FBC
:103AF00019F48091E30104C08E3F21F48091E1012B
:103B00008093D1018091D101882321F08F3F11F45E
:103B10008093D1019091F0049B3FB0F09B3F19F44A
:103B20008091E7010EC09C3F19F48091E50109C026
:103B30009D3F19F48091E30104C09E3F39F48091C8
:103B4000E1018093680102C090936801809168014F
:103B5000882321F08F3F11F4809368019B3FB0F0E0
:103B60009B3F19F48091E7010EC09C3F19F48091AE
:103B7000E50109C09D3F19F48091E30104C09E3F17
:103B800039F48091E1018093680102C0909368014B
:103B900080916801882321F08F3F11F480936801A0
:103BA0009B3FB0F09B3F19F48091E7010EC09C3F12
:103BB00019F48091E50109C09D3F19F48091E3015A
:103BC00004C09E3F39F48091E1018093680102C0F6
:103BD0009093680180916801882321F08F3F11F450
:103BE0008093680110916901812F992787FD909535
:103BF000A92FB92FBC01CD010E94072B17FF06C0CA
:103C000020E030E040E853E40E94622A27E137EBED
:103C100041ED58E30E94812BDC01CB0180937201BE
:103C200090937301A0937401B09375018091E204A5
:103C3000809316058091E10480930D051F910895EE
:103C40002F923F924F925F926F927F928F929F92AC
:103C5000AF92BF92CF92DF92EF92FF920F931F939A
:103C6000CF93DF93CDB7DEB723970FB6F894DEBFBF
:103C70000FBECDBF0E94ED17299A8091D104E82F85
:103C8000FF27EE0FFF1FED55FB4F4080518028E7C7
:103C900030E0420E531E57FE02C04424552480914A
:103CA000E001843608F04BC080910001882331F494
:103CB00084EF91E09093A4018093A30180914A0244
:103CC00090914B02009731F0019790934B028093B3
:103CD0004A0204C01092D9011092EA01289A8091F8
:103CE0004F0290915002815D974030F18091E8043D
:103CF000482E552481E08093EA018091CF04E82F7B
:103D0000FF27EE0FFF1FED55FB4F118210828091B0
:103D1000D004E82FFF27EE0FFF1FED55FB4F118258
:103D200010828091D204E82FFF27EE0FFF1FED5580
:103D3000FB4F11821082E2C11092D901DFC1809144
:103D4000E0018D3808F4DAC11092EA019091E9049B
:103D500082E3989FC001112490934B0280934A0202
:103D600049E2441651046CF080914F029091500248
:103D70005FEF8F3F950729F0019690935002809353
:103D80004F0280914F0290915002883C910520F0A3
:103D900068E24616510404F5109232021092330282
:103DA00010923402109235021092360210923702AD
:103DB00010923802109239021092F9011092FA0111
:103DC0001092FB011092FC011092F5011092F60185
:103DD0001092F7011092F80179EC471651040CF497
:103DE000EDC00091D901002309F0E8C08091D20410
:103DF000E82FFF27EE0FFF1FED55FB4F80819181CC
:103E00008C3491050CF4D8C080914C028F5F809364
:103E10004C02893C08F4D2C029980E94D116009324
:103E2000D90100934C021092500210924F0230912F
:103E3000CF04E32FFF27EE0FFF1FED55FB4F8081CF
:103E4000918187349105B4F48091D004E82FFF2745
:103E5000EE0FFF1FED55FB4F808191810190F081A6
:103E6000E02DF7FF03C0F095E195FF4FE734F10532
:103E70000CF482C02091D004E22FFF27EE0FFF1F29
:103E8000ED55FB4F808191818734910564F0E32FDC
:103E9000FF27EE0FFF1FED55FB4F80819181863488
:103EA00091050CF411E0E22FFF27EE0FFF1FED55F7
:103EB000FB4F808191818734910574F08091CF040C
:103EC000E82FFF27EE0FFF1FED55FB4F80819181FB
:103ED000873491050CF012E0E22FFF27EE0FFF1F51
:103EE000ED55FB4F808191818634910574F480916A
:103EF000CF04E82FFF27EE0FFF1FED55FB4F80810A
:103F00009181873491050CF013E0E22FFF27EE0F2B
:103F1000FF1FED55FB4F808191818A5B9F4F74F4A9
:103F20008091CF04E82FFF27EE0FFF1FED55FB4FC9
:103F300080819181873491050CF014E0E22FFF27F6
:103F4000EE0FFF1FED55FB4F808191818A5B9F4FE4
:103F500074F48091CF04E82FFF27EE0FFF1FED557B
:103F6000FB4F80819181863491050CF415E0A2E02D
:103F7000B0E0012E0E94542C0E9420024AE36FEC14
:103F800074E00E94F6010E9420020E9412158091A6
:103F9000D70480FF13C08091040190910501875BD5
:103FA000934038F480910401909105018E5E924017
:103FB00028F40E94770B02C000934C0223E24216C1
:103FC00051040CF09BC02091D204E22FFF27EE0F8A
:103FD000FF1FED55FB4F80819181855B9F4F0CF05A
:103FE0006DC080914D028F5F80934D02893C08F433
:103FF00067C088EC80934D0281E090E0909350027E
:1040000080934F0281E08093D90110923A0210927E
:104010003B0210923C0210923D021092F901109264
:10402000FA011092FB011092FC011092F50110921E
:10403000F6011092F7011092F80110920902109205
:104040000A0210920B0210920C02109201021092BE
:104050000202109203021092040280911D029091BC
:104060001E02A0911F02B09120028093050290933E
:104070000602A0930702B093080280911502909166
:104080001602A0911702B09118028093FD0190933F
:10409000FE01A093FF01B093000210923202109231
:1040A00033021092340210923502109236021092AE
:1040B0003702109238021092390202C010924D025B
:1040C000E22FFF27EE0FFF1FED55FB4F80819181FF
:1040D0008C3491058CF080914E028F5F80934E025C
:1040E000893C60F01092D90188EC80934E021092C6
:1040F000500210924F0202C010924E02809167014E
:10410000815080936701809167018F3F29F08091F2
:10411000EA01882309F4F7C00E94F91B8091CF04BB
:10412000E82FFF27EE0FFF1FDF01AD55BB4F80913A
:10413000DE04682F77278D919C91869F9001879F41
:10414000300D969F300D1124E754FB4F8091DF0412
:10415000482F552780819181849FD001859FB00D84
:10416000949FB00D11242A0F3B1F3093DF01209341
:10417000DE018091D004E82FFF27EE0FFF1FDF0143
:10418000AD55BB4F8D919C91869F9001879F300DBF
:10419000969F300D1124E754FB4F80819181849FBD
:1041A000F001859FF00D949FF00D11242E0F3F1FFD
:1041B0003093DD012093DC018091D204E82FFF27AA
:1041C000EE0FFF1FED55FB4F8081918190958195FA
:1041D0009F4F9093DB018093DA0110916C01812F46
:1041E000992787FD9095A92FB92FBC01CD010E9479
:1041F000072B17FF06C020E030E040E853E40E94A0
:10420000622A20E030E040E251E40E94622ADC01B0
:10421000CB0120E030E040E85BE3BC01CD010E942F
:10422000812B6B017C016093190570931A058093B3
:104230001B0590931C0510916B01812F992787FD19
:104240009095A92FB92FBC01CD010E94072B17FF14
:1042500006C020E030E040E853E40E94622A20E0FB
:1042600030EE4BE257E40E94A42ADC01CB0180939C
:10427000100590931105A0931205B093130580913A
:10428000D70482FF0CC080E090E0A0E0B0E0809313
:10429000100590931105A0931205B093130520E02B
:1042A00030E040E050E0C701B6010E94112B8823A6
:1042B00064F480E090E0A0E0B0E080931905909372
:1042C0001A05A0931B05B0931C05809110059091D1
:1042D0001105A0911205B091130520E030E040E0F7
:1042E00050E0BC01CD010E94112B882364F480E0D2
:1042F00090E0A0E0B0E08093100590931105A093AA
:104300001205B0931305F091EA01F983FF2321F11F
:104310001092DB011092DA011092DF011092DE019F
:104320001092DD011092DC018DEC9CECACECBDE355
:104330008093190590931A05A0931B05B0931C0553
:104340008AE097EDA3EABBE38093100590931105F3
:10435000A0931205B09313058091AD019091AE0129
:104360008D54914008F4C3C08091190290911A02B3
:10437000A0911B02B0911C029C0180911D029091A2
:104380001E02A0911F02B0912002281B390B30930E
:104390004702209346028091110290911202A0914F
:1043A0001302B0911402AC01809115029091160293
:1043B000A0911702B0911802481B590B5093490263
:1043C000409348021092AE011092AD01273A310598
:1043D0004CF080912F029091300201969093300220
:1043E00080932F022A553F4F4CF480912F029091D9
:1043F000300201979093300280932F02473A510583
:104400004CF080912D0290912E02019690932E02F5
:1044100080932D024A555F4F4CF480912D0290916C
:104420002E02019790932E0280932D028091F50128
:104430009091F601A091F701B091F801873A9105AA
:10444000A105B1054CF080912B0290912C020197AF
:1044500090932C0280932B028091F5019091F601AC
:10446000A091F701B091F8018A559F4FAF4FBF4F10
:104470004CF480912B0290912C02019690932C0287
:1044800080932B0210927A0080911D0290911E025F
:10449000A0911F02B0912002809305029093060222
:1044A000A0930702B0930802809115029091160222
:1044B000A0911702B09118028093FD019093FE0124
:1044C000A093FF01B093000280910D0290910E0223
:1044D000A0910F02B09110028093F5019093F60124
:1044E000A093F701B093F8018FEE80937A0090903B
:1044F000E304A92CBB24CC24DD2480911D029091DF
:104500001E02A0911F02B0912002BC01CD01A601A4
:1045100095010E94312C8091140590911505AA27D0
:1045200097FDA095BA2F281B390B4A0B5B0B57FF41
:1045300004C0215F3F4F4F4F5F4F79018A01B4E0C4
:1045400015950795F794E794BA95D1F7E0923E0256
:10455000F0923F02009340021093410280911502B5
:1045600090911602A0911702B0911802BC01CD01E2
:10457000A60195010E94312C80911D0590911E0588
:10458000AA2797FDA095BA2F281B390B4A0B5B0B66
:1045900057FF04C0215F3F4F4F4F5F4FA4E0559539
:1045A000479537952795AA95D1F7209342023093E6
:1045B00043024093440250934502F5EFEF16F1E0B9
:1045C000FF06F0E00F07F0E01F0764F084EF91E0D2
:1045D000A0E0B0E080933E0290933F02A09340029F
:1045E000B093410280913E0290913F02A09140021F
:1045F000B09141028C509E4FAF4FBF4F64F48CE09E
:104600009EEFAFEFBFEF80933E0290933F02A093E7
:104610004002B0934102255F31404040504064F079
:1046200084EF91E0A0E0B0E08093420290934302D7
:10463000A0934402B09345028091420290914302BC
:10464000A0914402B09145028C509E4FAF4FBF4F96
:1046500064F48CE09EEFAFEFBFEF80934202909343
:104660004302A0934402B093450210927A008091D5
:10467000090290910A02A0910B02B0910C022091C4
:104680003E0230913F024091400250914102821B14
:10469000930BA40BB50B8093090290930A02A0938D
:1046A0000B02B0930C028091010290910202A09142
:1046B0000302B091040220914202309143024091E2
:1046C000440250914502821B930BA40BB50B8093BF
:1046D000010290930202A0930302B093040220917E
:1046E000DA013091DB01C901AA2797FDA095BA2F05
:1046F00080933A0290933B02A0933C02B0933D0218
:1047000037FF03C0309521953F4F243231053CF0EF
:104710008091D70484FD03C081E08093540280918E
:10472000E004A82EBB24CC24DD2420903A02309053
:104730003B02910137FE04C0222733272219330997
:10474000442737FD4095542F80913A0290913B02C7
:10475000A0913C02B0913D02BC01CD010E94C92B49
:104760009B01AC01C601B5010E94C92B97FF04C093
:1047700061507F4F8F4F9F4FBB2797FDBA95A92F51
:10478000982F872F9C01442737FD4095542F809107
:10479000F9019091FA01A091FB01B091FC01821BFB
:1047A000930BA40BB50B8093F9019093FA01A0939E
:1047B000FB01B093FC018091F9019091FA01A09165
:1047C000FB01B091FC0181539547A040B04064F0DB
:1047D00080E395E7A0E0B0E08093F9019093FA01BF
:1047E000A093FB01B093FC018091F9019091FA0133
:1047F000A091FB01B091FC01805D9A48AF4FBF4F83
:1048000064F480ED9AE8AFEFBFEF8093F9019093E5
:10481000FA01A093FB01B093FC018FEE80937A0024
:104820008091EF019091F001892B09F4B8C080913B
:10483000D70483FFB4C080911D0290911E02A09105
:104840001F02B0912002B7FF04C081509E4FAF4FAE
:10485000BF4FE9E0B595A79597958795EA95D1F76C
:104860009C0197FF03C0309521953F4F8091150221
:1048700090911602A0911702B0911802B7FF04C0E0
:1048800081509E4FAF4FBF4F79E0B595A795979553
:1048900087957A95D1F7BC0197FF03C07095619514
:1048A0007F4F261737070CF49B0129313105A4F4FB
:1048B00080915402882381F0809155029091560294
:1048C000892B51F48091EF019091F0019093EE01CA
:1048D0008093ED011092540280916D01482F55276D
:1048E000249FC001259F900D349F900D112497FDAA
:1048F000CF969C0166E0359527956A95E1F7421BB6
:10490000530B9A01141615060CF043C010927A004E
:1049100060915502709156026115710569F580919B
:10492000EB019091EC01829FA001839F500D929F1B
:10493000500D11249A0157FF02C0215E3F4F55E0F0
:10494000359527955A95E1F7442737FD4095542F23
:104950008091F9019091FA01A091FB01B091FC01C5
:10496000820F931FA41FB51F8093F9019093FA0142
:10497000A093FB01B093FC018FEE80937A00611548
:10498000710569F061507040709356026093550252
:1049900006C084EF91E09093560280935502809177
:1049A00067048F5F809367048091530281508093E6
:1049B00053028F3F09F070C081E380935302E92CCA
:1049C000FF240027112780911D0290911E02A091C3
:1049D0001F02B0912002BC01CD01A80197010E94E5
:1049E000312C3093690420936804809115029091D2
:1049F0001602A0911702B0911802BC01CD01A801C6
:104A000097010E94312C30936B0420936A048091AB
:104A100014059091150590936D0480936C0480911A
:104A20001D0590911E0590936F0480936E048091F4
:104A300017059091180590937104809370048091EC
:104A4000D7019091D8019093730480937204809160
:104A5000F1019091F201A091F301B091F401B7FF3F
:104A600004C081509E4FAF4FBF4F49E0B595A79509
:104A7000979587954A95D1F7909375048093740420
:104A800050927704409276048091EF019091F0016A
:104A9000909379048093780480911D0290911E0276
:104AA000A0911F02B0912002BC01CD010E94072BF2
:104AB000DC01CB016090100570901105809012050B
:104AC00090901305A4019301BC01CD010E94812B9C
:104AD0007B018C0180910B0590910C05AA2797FD15
:104AE000A095BA2FBC01CD010E94072BDC01CB01A0
:104AF000A0901905B0901A05C0901B05D0901C0518
:104B0000A6019501BC01CD010E94812BDC01CB01E6
:104B10009C01AD01C801B7010E94622ADC01CB01F2
:104B2000BC01CD010E94EA2ADC01CB0190930C0567
:104B300080930B058091150290911602A0911702A7
:104B4000B0911802BC01CD010E94072BDC01CB0102
:104B5000A4019301BC01CD010E94812B7B018C013A
:104B60008091090590910A05AA2797FDA095BA2F73
:104B7000BC01CD010E94072BDC01CB01A6019501F0
:104B8000BC01CD010E94812BDC01CB019C01AD0158
:104B9000C801B7010E94622ADC01CB01BC01CD0132
:104BA0000E94EA2ADC01CB0190930A058093090553
:104BB0008091170590911805AA2797FDA095BA2F07
:104BC000BC01CD010E94072B7B018C0120E030E06D
:104BD00040E05FE3C601B5010E94812BDC01CB01FF
:104BE0009C01AD01C801B7010E94812B7B018C01A2
:104BF00080910D0290910E02A0910F02B0911002CF
:104C0000BC01CD010E94072BDC01CB01A401930163
:104C1000BC01CD010E94812BDC01CB019C01AD01C7
:104C2000C801B7010E94622ADC01CB01BC01CD01A1
:104C30000E94EA2ADC01CB019093180580931705A6
:104C400080910B0590910C058150984034F080E0E4
:104C500098E090930C0580930B0580910B05909143
:104C60000C058050984F34F480E098EF90930C0539
:104C700080930B058091090590910A058150984019
:104C800034F080E098E090930A05809309058091C4
:104C9000090590910A058050984F34F480E098EF10
:104CA00090930A0580930905809117059091180546
:104CB0008150984034F080E098E0909318058093FC
:104CC000170580911705909118058050984F34F47E
:104CD00080E098EF90931805809317058091D70492
:104CE000992780FFE6C02091700181FF0EC022331A
:104CF000B0F48091D7019091D80144979093D60158
:104D00008093D5011092E9010DC08091DC04289FA9
:104D1000C001112444979093D6018093D50181E07E
:104D20008093E901F981FF2321F01092D6011092BE
:104D3000D5010091D7011091D8012091D501309172
:104D4000D601201731070CF0B4C08091E901882307
:104D500009F4AFC0021B130B80916F019927089FC4
:104D60009001099F300D189F300D1124C90137FDA6
:104D70000F968C0134E0159507953A95E1F7A2015D
:104D8000401B510B8A0180917101282F332780919C
:104D9000AF019091B001829FB001839F700D929FEF
:104DA000700D1124CB0177FD079623E0959587952B
:104DB0002A95E1F7081B190BC090F101D090F20180
:104DC000E090F301F090F401F7FE08C08FEF91E05E
:104DD000A0E0B0E0C80ED91EEA1EFB1EB9E0F594B3
:104DE000E794D794C794BA95D1F780916E01282F94
:104DF000332744275527C701B6010E94C92B97FFC7
:104E000004C0615E7F4F8F4F9F4FA5E095958795BA
:104E100077956795AA95D1F7633371051CF062E326
:104E200070E006C09FEF6E3C790714F46EEC7FEFE4
:104E3000061B170B80915102909152029C01F4E0E5
:104E4000220F331FFA95E1F7281B390B200F311F72
:104E500037FF02C0215F3F4FE4E035952795EA9583
:104E6000E1F730935202209351028091D804482FE9
:104E700055272417350774F44416550624F050932B
:104E80005202409351024416550624F450925202A5
:104E90004092510280915102909152024816590657
:104EA00024F450925202409251024090510250908C
:104EB0005202A0911705B0911805A219B309BB833E
:104EC000AA83A536B10524F0E4E6F0E0FB83EA838B
:104ED0002A813B812C593F4F24F46CE97FEF7B837F
:104EE0006A832091DE013091DF0180916902909107
:104EF0006A02281B390B80910B0590910C05821BCF
:104F0000930BAA2797FDA095BA2FBC01CD010E9453
:104F1000072BDC01CB0160907601709077018090C7
:104F20007801909079019C01AD01C401B3010E9408
:104F3000812BDC01CB01BC01CD010E94EA2ADC01FE
:104F4000CB019093700280936F0280916F029091D9
:104F50007002AA2797FDA095BA2F209132023091B6
:104F600033024091340250913502280F391F4A1FF5
:104F70005B1F2093320230933302409334025093EC
:104F80003502609132027091330212161306140634
:104F90001506C4F4CB0177FF04C088279927861B28
:104FA000970B97FF02C081509F4F892F990F990B44
:104FB0000196AA2797FDA095BA2F281B390B4A0BFB
:104FC0005B0B16C0CB0177FF03C0909581959F4F77
:104FD00097FF02C081509F4F892F990F990B01961F
:104FE000AA2797FDA095BA2F280F391F4A1F5B1FCC
:104FF00020933202309333024093340250933502AF
:105000008091320290913302A0913402B091350226
:1050100081589E43A040B04064F080E89EE3A0E049
:10502000B0E08093320290933302A0933402B093A5
:1050300035028091320290913302A0913402B091F6
:1050400035028058914CAF4FBF4F64F480E891EC2B
:10505000AFEFBFEF8093320290933302A0933402FC
:10506000B093350280916F0290917002AA2797FD4C
:10507000A095BA2FBC01CD010E94072B7B018C01AA
:105080008091320290913302A0913402B0913502A6
:10509000BC01CD010E94072BDC01CB01A090720165
:1050A000B0907301C0907401D09075019C01AD0166
:1050B000C601B5010E94812BDC01CB019C01AD0131
:1050C000C801B7010E94622ADC01CB01BC01CD01FD
:1050D0000E94EA2ADC01CB01FC019201280F391F52
:1050E0004A815B81240F351F432F552747FD50957B
:1050F0004427550F441F552760E070E08AE04816AA
:10510000510414F461E070E0462B572B452B19F045
:1051100020E030E008C080911605482F552742173F
:1051200053070CF49A0130900D05432D5527241791
:1051300035070CF49A0120936D0292012E1B3F0B50
:10514000AA81BB812A0F3B1F832F992787FD90954A
:105150008827990F881F992740E050E0BAE04B1646
:10516000510414F441E050E0842B952B892B19F065
:1051700020E030E007C08091160599278217930739
:105180000CF49C01832D9927281739070CF49C01F6
:1051900020936E022091DC013091DD018091670245
:1051A00090916802281B390B8091090590910A059E
:1051B000821B930BAA2797FDA095BA2FBC01CD01A6
:1051C0000E94072BDC01CB019C01AD01C401B3019E
:1051D0000E94812BDC01CB01BC01CD010E94EA2A97
:1051E000DC01CB0190936C0280936B0280916B0287
:1051F00090916C02AA2797FDA095BA2F20913602B4
:10520000309137024091380250913902280F391FEE
:105210004A1F5B1F209336023093370240933802B7
:1052200050933902609136027091370212161306BC
:1052300014061506C4F4CB0177FF04C0882799270C
:10524000861B970B97FF02C081509F4F892F990FA4
:10525000990B0196AA2797FDA095BA2F281B390B09
:105260004A0B5B0B16C0CB0177FF03C0909581956D
:105270009F4F97FF02C081509F4F892F990F990B25
:105280000196AA2797FDA095BA2F280F391F4A1F0C
:105290005B1F2093360230933702409338025093BD
:1052A00039028091360290913702A0913802B09174
:1052B000390281589E43A040B04064F080E89EE3EC
:1052C000A0E0B0E08093360290933702A0933802BA
:1052D000B09339028091360290913702A091380242
:1052E000B09139028058914CAF4FBF4F64F480E8C1
:1052F00091ECAFEFBFEF8093360290933702A0930B
:105300003802B093390280916B0290916C02AA2707
:1053100097FDA095BA2FBC01CD010E94072B7B0100
:105320008C018091360290913702A0913802B091A1
:105330003902BC01CD010E94072BDC01CB019C018D
:10534000AD01C601B5010E94812BDC01CB019C019E
:10535000AD01C801B7010E94622ADC01CB01BC018A
:10536000CD010E94EA2ADC01CB01FC019201280F49
:10537000391F4A815B81241B350B432F552747FD7D
:1053800050954427550F441F552760E070E08AE090
:105390004816510414F461E070E0462B572B452B5E
:1053A00019F020E030E008C080911605482F5527FD
:1053B000421753070CF49A01432D5527241735073C
:1053C0000CF49A012093730292012E1B3F0BAA81C9
:1053D000BB812A1B3B0B832F992787FD909588273C
:1053E000990F881F992740E050E0BAE04B1651040E
:1053F00014F441E050E0842B952B892B19F020E028
:1054000030E007C0809116059927821793070CF4A6
:105410009C01832D9927281739070CF49C012093B0
:10542000710223960FB6F894DEBF0FBECDBFDF9199
:10543000CF911F910F91FF90EF90DF90CF90BF9091
:10544000AF909F908F907F906F905F904F903F9024
:105450002F9008958091630290916402A09165025B
:10546000B091660280935B0290935C02A0935D0210
:10547000B0935E0280915F0290916002A091610200
:10548000B09162028093570290935802A093590200
:10549000B0935A02089510926A0210926902109213
:1054A0006802109267020895FC014150504030F0AC
:1054B00001900616D1F73197CF01089588279927D3
:1054C00008955058192EEFD001D0D2C0BA176207F4
:1054D000730784079507B1F188F40EF410940B2E2E
:1054E000BA2FA02D062E622F202D072E732F302DC0
:1054F000082E842F402D092E952F502DFF27552340
:10550000B9F0591B49F0573E98F0469537952795C5
:10551000A795F0405395C9F776F0BA0F621F731F35
:10552000841F30F4879577956795B795F0409395EC
:1055300017FA0F2E0895BF1BBB27BA0B620B730B14
:10554000840BF6CFDEF6DBC0AED001D091C0552380
:1055500059F0992369F09F575F57951B33F442F434
:10556000903811F4915805C09BC091589F3F09F4A1
:10557000C6C0BB27112462177307840730F4660F77
:10558000771F881FBB1F915098F311D00F920FD037
:105590000F920DD0A0E82617370748071B0609F021
:1055A000A048BA2F602D7F918F9100240895A0E824
:1055B0000024621773078407B10528F0621B730B80
:1055C000840BB1090A2A660F771F881FBB1FA69597
:1055D00081F7089597FB73D09F3738F0FEE9F91BE8
:1055E000982F872F762F6B2F05C086C096958795AD
:1055F00077956795F150D0F73EF49095809570952A
:1056000061957F4F8F4F9F4F0895E89403C097FB9C
:105610000EF4F3DFB62F672F782F892F9EE9002431
:1056200027C00ED05EF004C00BD026F001C008D019
:1056300019F020F48FEF089580E0089581E0089537
:1056400097FB092E052600F8689430D0E89407FCF3
:1056500007C0621773078407950721F008F40094C8
:105660000794989408959A95BB0F661F771F881F1B
:1056700011249923A1F08823B2F79F3F59F0BB0F63
:1056800048F421F4002011F460FF04C06F5F7F4FE5
:105690008F4F9F4F881F9795879597F908952CC036
:1056A0009FEF80EC0895052E092607FA440F551F39
:1056B0005F3F79F0AA27A51708F051E04795880FBA
:1056C000991F9F3F31F0BB27B91708F091E08795EC
:1056D00008959F919F911124E3CF97FB880F991F05
:1056E0009F3F31F0BB27B91708F091E087950895E7
:1056F0009F919F911124D4CF6627772788279927D8
:105700000895D1DF01D0B4CF992339F0552329F082
:105710009F575F57950F13F49AF1F1CF91589F3F20
:10572000E1F3629FA12D0F92BB27639FA00DB11DD6
:10573000EE27729FA00DB11DEE1FAF93AA27649FA5
:10574000B00DE11D739FB00DE11DAA1F6627829F5A
:10575000B00DE11DA61F5527749FE00DA11D551F1B
:10576000839FE00DA11D561F849FA00D511D852F05
:105770007A2F6E2F1F900F9088231AF4939539F487
:105780008FCF000C111CBB1F661F771F881F0128BD
:105790000895629FD001739FF001829FE00DF11D7B
:1057A000649FE00DF11D929FF00D839FF00D749F9B
:1057B000F00D659FF00D9927729FB00DE11DF91F47
:1057C000639FB00DE11DF91FBD01CF0111240895A4
:1057D000AA1BBB1B51E107C0AA1FBB1FA617B70717
:1057E00010F0A61BB70B881F991F5A95A9F7809533
:1057F0009095BC01CD01089597FB092E07260AD08C
:1058000077FD04D0E5DF06D000201AF4709561958D
:105810007F4F0895F6F7909581959F4F0895A1E2E7
:105820001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F1A
:10583000FF1FA217B307E407F50720F0A21BB30B65
:10584000E40BF50B661F771F881F991F1A9469F7E1
:1058500060957095809590959B01AC01BD01CF013D
:10586000089597FB092E05260ED057FD04D0D7DFEB
:105870000AD0001C38F450954095309521953F4F43
:105880004F4F5F4F0895F6F790958095709561950D
:105890007F4F8F4F9F4F0895F999FECFB2BDA1BDA5
:1058A000F89A119600B40895F999FECFB2BDA1BD42
:1058B00000BC11960FB6F894FA9AF99A0FBE0895A3
:1058C0006401010AFF03007D0000640048616C6C04
:1058D0006F2057656C74000000000000000000009D
:1058E00000000000000000000000000000000000B8
:1058F00000000000000000000000000000000000A8
:105900000000000000000000000000000000000097
:10591000000000000000000000000000010203047D
:1059200005060708090A0A01640A029632403A107D
:10593000FB3017B7D1380000803F4E6F726D616C3D
:0A59400000004B616D65726100000C
:00000001FF
/branches/FLightCtrl/Hex-Files/WasIstWas.txt
0,0 → 1,22
+++++++++++++++++++++++++
+ Flight-Ctrl:
+++++++++++++++++++++++++
BootLoader_MEGA644_20MHZ_V0_1.hex
Der Bootloader wird per ISP eingespielt
Der Bootloader nur dann eingespielt werden, wenn noch nie ein Bootloader eingespielt wurde!
Danach können Softwareupdates seriell eingespielt werden.
 
Flight-Ctrl_MEGA644_Vx_yy.hex
Aktuelle Firmware
Wird per serielle Schnittstelle (durch den Bootloader) eingespielt
 
Flight-Ctrl SW > 0.60 benötigt das Kopter-Tool >1.45
+++++++++++++++++++++++++
+ BL-Ctrl:
+++++++++++++++++++++++++
BrushLess-Ctrl_16kHz_ADRq_Vx_yy.hex
Firmware für den BL-Regler
Jeder Regler benötigt die Software mit seiner eigenen Adresse
/branches/FLightCtrl/Hex-Files/___Hex-Files_komplett__.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/FLightCtrl/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/FLightCtrl/Settings.h
--- FLightCtrl/_Settings.h (nonexistent)
+++ FLightCtrl/_Settings.h (revision 171)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 16
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/FLightCtrl/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
for(off=0; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ay = ADC - NeutralAccX;
accumulate_AccNick += Aktuell_ay;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - NeutralAccZ;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
kanal = 3;
state = 7;
}
else
{
kanal = 0;
state = 0;
}*/
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/FLightCtrl/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/FLightCtrl/eeprom.c
--- FLightCtrl/fc.c (nonexistent)
+++ FLightCtrl/fc.c (revision 171)
@@ -0,0 +1,812 @@
+/*#######################################################################################
+Flight Control
+#######################################################################################*/
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) 04.2007 Holger Buss
+// + Nur für den privaten Gebrauch
+// + www.MikroKopter.com
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
+// + bzgl. der Nutzungsbedingungen aufzunehmen.
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
+// + Verkauf von Luftbildaufnahmen, usw.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
+// + eindeutig als Ursprung verlinkt werden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
+// + Benutzung auf eigene Gefahr
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
+// + mit unserer Zustimmung zulässig
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
+// + this list of conditions and the following disclaimer.
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
+// + from this software without specific prior written permission.
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
+// + for non-commercial use (directly or indirectly)
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
+// + with our written permission
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
+// + clearly linked as origin
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// + POSSIBILITY OF SUCH DAMAGE.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "main.h"
+
+unsigned char h,m,s;
+volatile unsigned char Timeout = 0;
+volatile int MesswertNick,MesswertRoll,MesswertGier;
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
+volatile float NeutralAccZ = 0;
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
+volatile long IntegralNick = 0,IntegralNick2 = 0;
+volatile long IntegralRoll = 0,IntegralRoll2 = 0;
+volatile long Integral_Gier = 0;
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
+volatile long Mess_Integral_Hoch = 0;
+volatile int KompassValue = 0;
+volatile int KompassStartwert = 0;
+volatile int KompassRichtung = 0;
+unsigned char MAX_GAS,MIN_GAS;
+unsigned char Notlandung = 0;
+unsigned char HoehenReglerAktiv = 0;
+
+float GyroFaktor;
+float IntegralFaktor;
+
+volatile int DiffNick,DiffRoll;
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
+unsigned char MotorWert[5];
+volatile unsigned char SenderOkay = 0;
+int StickNick = 0,StickRoll = 0,StickGier = 0;
+char MotorenEin = 0;
+int HoehenWert = 0;
+int SollHoehe = 0;
+
+float Kp = FAKTOR_P;
+float Ki = FAKTOR_I;
+
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
+unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
+unsigned char Parameter_UserParam1 = 0;
+unsigned char Parameter_UserParam2 = 0;
+unsigned char Parameter_UserParam3 = 0;
+unsigned char Parameter_UserParam4 = 0;
+unsigned char Parameter_ServoNickControl = 100;
+struct mk_param_struct EE_Parameter;
+
+void Piep(unsigned char Anzahl)
+{
+ while(Anzahl--)
+ {
+ if(MotorenEin) return; //auf keinen Fall im Flug!
+ beeptime = 100;
+ Delay_ms(250);
+ }
+}
+
+//############################################################################
+// Nullwerte ermitteln
+void SetNeutral(void)
+//############################################################################
+{
+ unsigned int timer;
+ NeutralAccX = 0;
+ NeutralAccY = 0;
+ NeutralAccZ = 0;
+ AdNeutralNick = 0;
+ AdNeutralRoll = 0;
+ AdNeutralGier = 0;
+ CalibrierMittelwert();
+ timer = SetDelay(5);
+ while (!CheckDelay(timer));
+ CalibrierMittelwert();
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ AdNeutralNick= abs(MesswertNick);
+ AdNeutralRoll= abs(MesswertRoll);
+ AdNeutralGier= abs(MesswertGier);
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
+ NeutralAccZ = Aktuell_az;
+
+ Mess_IntegralNick = 0;
+ Mess_IntegralNick2 = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralRoll2 = 0;
+ Mess_Integral_Gier = 0;
+ MesswertNick = 0;
+ MesswertRoll = 0;
+ MesswertGier = 0;
+ StartLuftdruck = Luftdruck;
+ HoeheD = 0;
+ Mess_Integral_Hoch = 0;
+ KompassStartwert = KompassValue;
+ GPS_Neutral();
+ beeptime = 50;
+}
+
+//############################################################################
+// Bildet den Mittelwert aus den Messwerten
+void Mittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ Integral_Gier = Mess_Integral_Gier;
+// Integral_Gier2 = Mess_Integral_Gier2;
+ IntegralNick = Mess_IntegralNick;
+ IntegralRoll = Mess_IntegralRoll;
+ IntegralNick2 = Mess_IntegralNick2;
+ IntegralRoll2 = Mess_IntegralRoll2;
+ // ADC einschalten
+ ANALOG_ON;
+
+//------------------------------------------------------------------------------
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
+ else
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
+
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
+ else
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
+//------------------------------------------------------------------------------
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Messwerte beim Ermitteln der Nullage
+void CalibrierMittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ // ADC einschalten
+ ANALOG_ON;
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Senden der Motorwerte per I2C-Bus
+void SendMotorData(void)
+//############################################################################
+{
+ if(MOTOR_OFF || !MotorenEin)
+ {
+ Motor_Hinten = 0;
+ Motor_Vorne = 0;
+ Motor_Rechts = 0;
+ Motor_Links = 0;
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0];
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1];
+ if(MotorTest[2]) Motor_Links = MotorTest[2];
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3];
+ }
+
+ DebugOut.Analog[12] = Motor_Vorne;
+ DebugOut.Analog[13] = Motor_Hinten;
+ DebugOut.Analog[14] = Motor_Links;
+ DebugOut.Analog[15] = Motor_Rechts;
+
+ //Start I2C Interrupt Mode
+ twi_state = 0;
+ motor = 0;
+ i2c_start();
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Konstanten
+// + 0-250 -> normale Werte
+// + 251 -> Poti1
+// + 252 -> Poti2
+// + 253 -> Poti3
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DefaultKonstanten1(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Normal\0", 12);
+}
+
+void DefaultKonstanten2(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Kamera\0", 12);
+}
+
+
+//############################################################################
+// Trägt ggf. das Poti als Parameter ein
+void ParameterZuordnung(void)
+//############################################################################
+{
+
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
+
+ unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
+ unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
+ unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
+
+
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+
+ Ki = (float) Parameter_I_Faktor * 0.0001;
+ MAX_GAS = EE_Parameter.Gas_Max;
+ MIN_GAS = EE_Parameter.Gas_Min;
+}
+
+
+//############################################################################
+//
+void MotorRegler(void)
+//############################################################################
+{
+ int motorwert,pd_ergebnis,h,tmp_int;
+ int GierMischanteil,GasMischanteil;
+ static long SummeNick=0,SummeRoll=0;
+ static long sollGier = 0,tmp_long,tmp_long2;
+ static int IntegralFehlerNick = 0;
+ static int IntegralFehlerRoll = 0;
+ static unsigned int RcLostTimer;
+ static unsigned char delay_neutral = 0;
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
+ static unsigned int modell_fliegt = 0;
+ static int hoehenregler = 0;
+ static char TimerWerteausgabe = 0;
+ static char NeueKompassRichtungMerken = 0;
+ Mittelwert();
+
+ GRN_ON;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gaswert ermitteln
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
+ if(GasMischanteil < 0) GasMischanteil = 0;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang schlecht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay < 100)
+ {
+ if(!PcZugriff) beeptime = 500;
+ if(RcLostTimer) RcLostTimer--;
+ else
+ {
+ MotorenEin = 0;
+ Notlandung = 0;
+ }
+ ROT_ON;
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
+ {
+ GasMischanteil = EE_Parameter.NotGas;
+ Notlandung = 1;
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
+/* Poti1 = 65;
+ Poti2 = 48;
+ Poti3 = 0;
+*/ }
+ else MotorenEin = 0;
+ }
+ else
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang gut
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay > 140)
+ {
+ Notlandung = 0;
+ RcLostTimer = EE_Parameter.NotGasZeit * 50;
+ if(GasMischanteil > 40)
+ {
+ if(modell_fliegt < 0xffff) modell_fliegt++;
+ }
+ if((modell_fliegt < 200) || (GasMischanteil < 40))
+ {
+ SummeNick = 0;
+ SummeRoll = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ }
+ if((GasMischanteil > 200) && MotorenEin == 0)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// auf Nullwerte kalibrieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
+ {
+ unsigned char setting;
+ if(++delay_neutral > 200) // nicht sofort
+ {
+ GRN_OFF;
+ SetNeutral();
+ MotorenEin = 0;
+ delay_neutral = 0;
+ modell_fliegt = 0;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
+ {
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
+ }
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
+ Piep(GetActiveParamSetNumber());
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ }
+ }
+ else delay_neutral = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gas ist unten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(GasMischanteil < 35)
+ {
+ // Starten
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Einschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(++delay_einschalten > 200)
+ {
+ delay_einschalten = 200;
+ modell_fliegt = 1;
+ MotorenEin = 1;
+ sollGier = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ Mess_IntegralNick = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ SummeNick = 0;
+ SummeRoll = 0;
+ }
+ }
+ else delay_einschalten = 0;
+ //Auf Neutralwerte setzen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Auschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
+ {
+ if(++delay_ausschalten > 200) // nicht sofort
+ {
+ MotorenEin = 0;
+ delay_ausschalten = 200;
+ modell_fliegt = 0;
+ }
+ }
+ else delay_ausschalten = 0;
+ }
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// neue Werte von der Funke
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(!NewPpmData-- || Notlandung)
+ {
+ ParameterZuordnung();
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
+
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
+
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
+ if(GyroFaktor < 0) GyroFaktor = 0;
+ if(IntegralFaktor < 0) IntegralFaktor = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Bei Empfangsausfall im Flug
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(Notlandung)
+ {
+ StickGier = 0;
+ StickNick = 0;
+ StickRoll = 0;
+ GyroFaktor = 0.1;
+ IntegralFaktor = 0.005;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gyro-Drift kompensieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define DRIFT_FAKTOR 3
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
+ {
+ IntegralFehlerNick = IntegralNick2 - IntegralNick;
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
+ ZaehlMessungen = 0;
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
+ if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
+ if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ Mess_Integral_Gier2 = Integral_Gier;
+ ANALOG_ON; // ADC einschalten
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Integrale auf ACC-Signal abgleichen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
+#define AUSGLEICH 500
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick -= tmp_long;
+ Mess_IntegralRoll -= tmp_long2;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sollGier = StickGier;
+ if(abs(StickGier) > 35)
+ {
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
+ }
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
+ Mess_Integral_Gier -= tmp_int;
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
+
+ ANALOG_ON; // ADC einschalten
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Kompass
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ //KompassValue = 12;
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
+ {
+ int w,v;
+ static int SignalSchlecht = 0;
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
+ v = abs(IntegralRoll /512);
+ if(v > w) w = v; // grösste Neigung ermitteln
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
+ {
+ KompassStartwert = KompassValue;
+ NeueKompassRichtungMerken = 0;
+ }
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
+ if(w > 0)
+ {
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
+ ANALOG_ON; // ADC einschalten
+ if(SignalSchlecht) SignalSchlecht--;
+ }
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debugwerte zuordnen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DebugOut.Sekunden++;
+ if(!TimerWerteausgabe--)
+ {
+ TimerWerteausgabe = 49;
+// DebugOut.Analog[0] = MesswertNick;
+// DebugOut.Analog[1] = MesswertRoll;
+// DebugOut.Analog[2] = MesswertGier;
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[2] = Mittelwert_AccNick;
+ DebugOut.Analog[3] = Mittelwert_AccRoll;
+ DebugOut.Analog[4] = MesswertGier;
+ DebugOut.Analog[5] = HoehenWert;
+ DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
+ DebugOut.Analog[7] = GasMischanteil;
+ DebugOut.Analog[8] = KompassValue;
+// DebugOut.Analog[9] = SollHoehe;
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
+// DebugOut.Analog[11] = KompassStartwert;
+// DebugOut.Analog[10] = Parameter_Gyro_I;
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
+// DebugOut.Analog[9] = KompassRichtung;
+// DebugOut.Analog[10] = GasMischanteil;
+// DebugOut.Analog[3] = HoeheD * 32;
+// DebugOut.Analog[4] = hoehenregler;
+ }
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
+
+ // Maximalwerte abfangen
+ #define MAX_SENSOR 2048
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Höhenregelung
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//OCR0B = 180 - (Poti1 + 120) / 4;
+//DruckOffsetSetting = OCR0B;
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
+ {
+ int tmp_int;
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
+ {
+ if(Parameter_MaxHoehe < 50)
+ {
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
+ HoehenReglerAktiv = 0;
+ }
+ else
+ HoehenReglerAktiv = 1;
+ }
+ else
+ {
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
+ HoehenReglerAktiv = 1;
+ }
+
+ if(Notlandung) SollHoehe = 0;
+ h = HoehenWert;
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
+ h = GasMischanteil - h; // vom Gas abziehen
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
+ if(tmp_int > 50) tmp_int = 50;
+ else if(tmp_int < -50) tmp_int = -50;
+ h -= tmp_int;
+ hoehenregler = (hoehenregler*15 + h) / 16;
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
+ {
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
+ }
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
+ GasMischanteil = hoehenregler;
+ }
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Mischer und PI-Regler
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gier-Anteil
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier
+ if(GierMischanteil > 100) GierMischanteil = 100;
+ if(GierMischanteil < -100) GierMischanteil = -100;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Nick-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
+ SummeNick += DiffNick; // I-Anteil
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
+ if(SummeNick > 16000) SummeNick = 16000;
+ if(SummeNick < -16000) SummeNick = -16000;
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
+ // Motor Vorn
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Vorne = motorwert;
+ // Motor Heck
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Hinten = motorwert;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Roll-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
+ SummeRoll += DiffRoll; // I-Anteil
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
+ if(SummeRoll > 16000) SummeRoll = 16000;
+ if(SummeRoll < -16000) SummeRoll = -16000;
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
+ // Motor Links
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Links = motorwert;
+ // Motor Rechts
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Rechts = motorwert;
+ // +++++++++++++++++++++++++++++++++++++++++++++++
+
+}
+
/branches/FLightCtrl/fc.h
0,0 → 1,106
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
#define STRUCT_PARAM_LAENGE 58
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
 
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/FLightCtrl/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="fc.c"></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="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File></Project>
/branches/FLightCtrl/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/FLightCtrl/gps.h
0,0 → 1,4
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_BerechneZielrichtung(void);
/branches/FLightCtrl/main.c
0,0 → 1,210
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
 
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/FLightCtrl/main.h
0,0 → 1,92
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~0x01
#define ROT_ON PORTB |= 0x01
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTD ^= 0x02
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
 
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/FLightCtrl/makefile
0,0 → 1,391
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/FLightCtrl/menu.c
0,0 → 1,118
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 10,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
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,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/FLightCtrl/menu.h
0,0 → 1,5
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/FLightCtrl/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/FLightCtrl/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/FLightCtrl/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/FLightCtrl/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
/* if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen */
}
}
}
 
 
 
 
 
/branches/FLightCtrl/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/FLightCtrl/timer0.c
0,0 → 1,139
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<2);
}
else
PORTD &= ~(1<<2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/FLightCtrl/timer0.h
0,0 → 1,14
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
/branches/FLightCtrl/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/FLightCtrl/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/FLightCtrl/uart.c
0,0 → 1,328
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
unsigned char tmp_char_arr3[3];
unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/FLightCtrl/uart.h
0,0 → 1,93
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/FLightCtrl/version.txt
0,0 → 1,49
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
/branches/Flight-Ctrl/GPS.c
0,0 → 1,30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
}
 
void GPS_BerechneZielrichtung(void)
{
GPS_Nick = 0;
GPS_Roll = 0;
}
 
 
 
 
/branches/Flight-Ctrl/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/Flight-Ctrl/Settings.h
--- Flight-Ctrl/_Settings.h (nonexistent)
+++ Flight-Ctrl/_Settings.h (revision 171)
@@ -0,0 +1,55 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 16
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+ #define K_POTI5 8
+ #define K_POTI6 9
+ #define K_POTI7 10
+ #define K_POTI8 11
+
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/Flight-Ctrl/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
for(off=0; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ay = ADC - NeutralAccX;
accumulate_AccNick += Aktuell_ay;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - NeutralAccZ;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
kanal = 3;
state = 7;
}
else
{
kanal = 0;
state = 0;
}*/
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/Flight-Ctrl/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/Flight-Ctrl/eeprom.c
--- Flight-Ctrl/fc.c (nonexistent)
+++ Flight-Ctrl/fc.c (revision 171)
@@ -0,0 +1,845 @@
+/*#######################################################################################
+Flight Control
+#######################################################################################*/
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) 04.2007 Holger Buss
+// + Nur für den privaten Gebrauch
+// + www.MikroKopter.com
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
+// + bzgl. der Nutzungsbedingungen aufzunehmen.
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
+// + Verkauf von Luftbildaufnahmen, usw.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
+// + eindeutig als Ursprung verlinkt werden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
+// + Benutzung auf eigene Gefahr
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
+// + mit unserer Zustimmung zulässig
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
+// + this list of conditions and the following disclaimer.
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
+// + from this software without specific prior written permission.
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
+// + for non-commercial use (directly or indirectly)
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
+// + with our written permission
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
+// + clearly linked as origin
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// + POSSIBILITY OF SUCH DAMAGE.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "main.h"
+
+unsigned char h,m,s;
+volatile unsigned char Timeout = 0;
+volatile int MesswertNick,MesswertRoll,MesswertGier;
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
+volatile float NeutralAccZ = 0;
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
+volatile long IntegralNick = 0,IntegralNick2 = 0;
+volatile long IntegralRoll = 0,IntegralRoll2 = 0;
+volatile long Integral_Gier = 0;
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
+volatile long Mess_Integral_Hoch = 0;
+volatile int KompassValue = 0;
+volatile int KompassStartwert = 0;
+volatile int KompassRichtung = 0;
+unsigned char MAX_GAS,MIN_GAS;
+unsigned char Notlandung = 0;
+unsigned char HoehenReglerAktiv = 0;
+
+float GyroFaktor;
+float IntegralFaktor;
+
+volatile int DiffNick,DiffRoll;
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0,Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0;
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
+unsigned char MotorWert[5];
+volatile unsigned char SenderOkay = 0;
+int StickNick = 0,StickRoll = 0,StickGier = 0;
+char MotorenEin = 0;
+int HoehenWert = 0;
+int SollHoehe = 0;
+
+float Kp = FAKTOR_P;
+float Ki = FAKTOR_I;
+
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
+unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
+unsigned char Parameter_UserParam1 = 0;
+unsigned char Parameter_UserParam2 = 0;
+unsigned char Parameter_UserParam3 = 0;
+unsigned char Parameter_UserParam4 = 0;
+unsigned char Parameter_ServoNickControl = 100;
+struct mk_param_struct EE_Parameter;
+
+void Piep(unsigned char Anzahl)
+{
+ while(Anzahl--)
+ {
+ if(MotorenEin) return; //auf keinen Fall im Flug!
+ beeptime = 100;
+ Delay_ms(250);
+ }
+}
+
+//############################################################################
+// Nullwerte ermitteln
+void SetNeutral(void)
+//############################################################################
+{
+ unsigned int timer;
+ NeutralAccX = 0;
+ NeutralAccY = 0;
+ NeutralAccZ = 0;
+ AdNeutralNick = 0;
+ AdNeutralRoll = 0;
+ AdNeutralGier = 0;
+ CalibrierMittelwert();
+ timer = SetDelay(5);
+ while (!CheckDelay(timer));
+ CalibrierMittelwert();
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ AdNeutralNick= abs(MesswertNick);
+ AdNeutralRoll= abs(MesswertRoll);
+ AdNeutralGier= abs(MesswertGier);
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
+ NeutralAccZ = Aktuell_az;
+
+ Mess_IntegralNick = 0;
+ Mess_IntegralNick2 = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralRoll2 = 0;
+ Mess_Integral_Gier = 0;
+ MesswertNick = 0;
+ MesswertRoll = 0;
+ MesswertGier = 0;
+ StartLuftdruck = Luftdruck;
+ HoeheD = 0;
+ Mess_Integral_Hoch = 0;
+ KompassStartwert = KompassValue;
+ GPS_Neutral();
+ beeptime = 50;
+}
+
+//############################################################################
+// Bildet den Mittelwert aus den Messwerten
+void Mittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ Integral_Gier = Mess_Integral_Gier;
+// Integral_Gier2 = Mess_Integral_Gier2;
+ IntegralNick = Mess_IntegralNick;
+ IntegralRoll = Mess_IntegralRoll;
+ IntegralNick2 = Mess_IntegralNick2;
+ IntegralRoll2 = Mess_IntegralRoll2;
+ // ADC einschalten
+ ANALOG_ON;
+
+//------------------------------------------------------------------------------
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
+ else
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
+
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
+ else
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
+//------------------------------------------------------------------------------
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti5 < PPM_in[9] + 110) Poti5++; else if(Poti5 > PPM_in[9] + 110 && Poti5) Poti5--;
+ if(Poti6 < PPM_in[10] + 110) Poti6++; else if(Poti6 > PPM_in[10] + 110 && Poti6) Poti6--;
+ if(Poti7 < PPM_in[11] + 110) Poti7++; else if(Poti7 > PPM_in[11] + 110 && Poti7) Poti7--;
+ if(Poti8 < PPM_in[12] + 110) Poti8++; else if(Poti8 > PPM_in[12] + 110 && Poti8) Poti8--;
+
+
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+ if(Poti5 < 0) Poti5 = 0; else if(Poti5 > 255) Poti5 = 255;
+ if(Poti6 < 0) Poti6 = 0; else if(Poti6 > 255) Poti6 = 255;
+ if(Poti7 < 0) Poti7 = 0; else if(Poti7 > 255) Poti7 = 255;
+ if(Poti8 < 0) Poti8 = 0; else if(Poti8 > 255) Poti8 = 255;
+}
+
+//############################################################################
+// Messwerte beim Ermitteln der Nullage
+void CalibrierMittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ // ADC einschalten
+ ANALOG_ON;
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti5 < PPM_in[9] + 110) Poti5++; else if(Poti5 > PPM_in[9] + 110 && Poti5) Poti5--;
+ if(Poti6 < PPM_in[10] + 110) Poti6++; else if(Poti6 > PPM_in[10] + 110 && Poti6) Poti6--;
+ if(Poti7 < PPM_in[11] + 110) Poti7++; else if(Poti7 > PPM_in[11] + 110 && Poti7) Poti7--;
+ if(Poti8 < PPM_in[12] + 110) Poti8++; else if(Poti8 > PPM_in[12] + 110 && Poti8) Poti8--;
+
+
+
+
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+ if(Poti5 < 0) Poti5 = 0; else if(Poti5 > 255) Poti5 = 255;
+ if(Poti6 < 0) Poti6 = 0; else if(Poti6 > 255) Poti6 = 255;
+ if(Poti7 < 0) Poti7 = 0; else if(Poti7 > 255) Poti7 = 255;
+ if(Poti8 < 0) Poti8 = 0; else if(Poti8 > 255) Poti8 = 255;
+}
+
+//############################################################################
+// Senden der Motorwerte per I2C-Bus
+void SendMotorData(void)
+//############################################################################
+{
+ if(MOTOR_OFF || !MotorenEin)
+ {
+ Motor_Hinten = 0;
+ Motor_Vorne = 0;
+ Motor_Rechts = 0;
+ Motor_Links = 0;
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0];
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1];
+ if(MotorTest[2]) Motor_Links = MotorTest[2];
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3];
+ }
+
+// DebugOut.Analog[12] = Motor_Vorne;
+// DebugOut.Analog[13] = Motor_Hinten;
+// DebugOut.Analog[14] = Motor_Links;
+// DebugOut.Analog[15] = Motor_Rechts;
+
+ //Start I2C Interrupt Mode
+ twi_state = 0;
+ motor = 0;
+ i2c_start();
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Konstanten
+// + 0-250 -> normale Werte
+// + 251 -> Poti1
+// + 252 -> Poti2
+// + 253 -> Poti3
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DefaultKonstanten1(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.Kanalbelegung[K_POTI5] = 9;
+ EE_Parameter.Kanalbelegung[K_POTI6] = 10;
+ EE_Parameter.Kanalbelegung[K_POTI7] = 11;
+ EE_Parameter.Kanalbelegung[K_POTI8] = 12;
+
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Normal\0", 12);
+}
+
+void DefaultKonstanten2(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.Kanalbelegung[K_POTI5] = 9;
+ EE_Parameter.Kanalbelegung[K_POTI6] = 10;
+ EE_Parameter.Kanalbelegung[K_POTI7] = 11;
+ EE_Parameter.Kanalbelegung[K_POTI8] = 12;
+
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Kamera\0", 12);
+}
+
+
+//############################################################################
+// Trägt ggf. das Poti als Parameter ein
+void ParameterZuordnung(void)
+//############################################################################
+{
+
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
+
+ unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
+ unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
+ unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
+
+
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+
+ Ki = (float) Parameter_I_Faktor * 0.0001;
+ MAX_GAS = EE_Parameter.Gas_Max;
+ MIN_GAS = EE_Parameter.Gas_Min;
+}
+
+
+//############################################################################
+//
+void MotorRegler(void)
+//############################################################################
+{
+ int motorwert,pd_ergebnis,h,tmp_int;
+ int GierMischanteil,GasMischanteil;
+ static long SummeNick=0,SummeRoll=0;
+ static long sollGier = 0,tmp_long,tmp_long2;
+ static int IntegralFehlerNick = 0;
+ static int IntegralFehlerRoll = 0;
+ static unsigned int RcLostTimer;
+ static unsigned char delay_neutral = 0;
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
+ static unsigned int modell_fliegt = 0;
+ static int hoehenregler = 0;
+ static char TimerWerteausgabe = 0;
+ static char NeueKompassRichtungMerken = 0;
+ Mittelwert();
+
+ GRN_ON;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gaswert ermitteln
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
+ if(GasMischanteil < 0) GasMischanteil = 0;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang schlecht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay < 100)
+ {
+ if(!PcZugriff) beeptime = 500;
+ if(RcLostTimer) RcLostTimer--;
+ else
+ {
+ MotorenEin = 0;
+ Notlandung = 0;
+ }
+ ROT_ON;
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
+ {
+ GasMischanteil = EE_Parameter.NotGas;
+ Notlandung = 1;
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
+/* Poti1 = 65;
+ Poti2 = 48;
+ Poti3 = 0;
+*/ }
+ else MotorenEin = 0;
+ }
+ else
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang gut
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay > 140)
+ {
+ Notlandung = 0;
+ RcLostTimer = EE_Parameter.NotGasZeit * 50;
+ if(GasMischanteil > 40)
+ {
+ if(modell_fliegt < 0xffff) modell_fliegt++;
+ }
+ if((modell_fliegt < 200) || (GasMischanteil < 40))
+ {
+ SummeNick = 0;
+ SummeRoll = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ }
+ if((GasMischanteil > 200) && MotorenEin == 0)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// auf Nullwerte kalibrieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
+ {
+ unsigned char setting;
+ if(++delay_neutral > 200) // nicht sofort
+ {
+ GRN_OFF;
+ SetNeutral();
+ MotorenEin = 0;
+ delay_neutral = 0;
+ modell_fliegt = 0;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
+ {
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
+ }
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
+ Piep(GetActiveParamSetNumber());
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ }
+ }
+ else delay_neutral = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gas ist unten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(GasMischanteil < 35)
+ {
+ // Starten
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Einschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(++delay_einschalten > 200)
+ {
+ delay_einschalten = 200;
+ modell_fliegt = 1;
+ MotorenEin = 1;
+ sollGier = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ Mess_IntegralNick = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ SummeNick = 0;
+ SummeRoll = 0;
+ }
+ }
+ else delay_einschalten = 0;
+ //Auf Neutralwerte setzen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Auschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
+ {
+ if(++delay_ausschalten > 200) // nicht sofort
+ {
+ MotorenEin = 0;
+ delay_ausschalten = 200;
+ modell_fliegt = 0;
+ }
+ }
+ else delay_ausschalten = 0;
+ }
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// neue Werte von der Funke
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(!NewPpmData-- || Notlandung)
+ {
+ ParameterZuordnung();
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
+
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
+
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
+ if(GyroFaktor < 0) GyroFaktor = 0;
+ if(IntegralFaktor < 0) IntegralFaktor = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Bei Empfangsausfall im Flug
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(Notlandung)
+ {
+ StickGier = 0;
+ StickNick = 0;
+ StickRoll = 0;
+ GyroFaktor = 0.1;
+ IntegralFaktor = 0.005;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gyro-Drift kompensieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define DRIFT_FAKTOR 3
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
+ {
+ IntegralFehlerNick = IntegralNick2 - IntegralNick;
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
+ ZaehlMessungen = 0;
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
+ if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
+ if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ Mess_Integral_Gier2 = Integral_Gier;
+ ANALOG_ON; // ADC einschalten
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Integrale auf ACC-Signal abgleichen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
+#define AUSGLEICH 500
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick -= tmp_long;
+ Mess_IntegralRoll -= tmp_long2;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sollGier = StickGier;
+ if(abs(StickGier) > 35)
+ {
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
+ }
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
+ Mess_Integral_Gier -= tmp_int;
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
+
+ ANALOG_ON; // ADC einschalten
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Kompass
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ //KompassValue = 12;
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
+ {
+ int w,v;
+ static int SignalSchlecht = 0;
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
+ v = abs(IntegralRoll /512);
+ if(v > w) w = v; // grösste Neigung ermitteln
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
+ {
+ KompassStartwert = KompassValue;
+ NeueKompassRichtungMerken = 0;
+ }
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
+ if(w > 0)
+ {
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
+ ANALOG_ON; // ADC einschalten
+ if(SignalSchlecht) SignalSchlecht--;
+ }
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debugwerte zuordnen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DebugOut.Sekunden++;
+ if(!TimerWerteausgabe--)
+ {
+ TimerWerteausgabe = 49;
+// DebugOut.Analog[0] = MesswertNick;
+// DebugOut.Analog[1] = MesswertRoll;
+// DebugOut.Analog[2] = MesswertGier;
+ DebugOut.Analog[0] = Poti1;
+ DebugOut.Analog[1] = Poti2;
+ DebugOut.Analog[2] = Poti3;
+ DebugOut.Analog[3] = Poti4;
+ DebugOut.Analog[4] = Poti5;
+ DebugOut.Analog[5] = Poti6;
+ DebugOut.Analog[6] = Poti7;
+ DebugOut.Analog[7] = Poti8;
+ // DebugOut.Analog[8] = PPM_in[12];
+ // DebugOut.Analog[9] = PPM_in[13];
+ // DebugOut.Analog[10] = EE_Parameter.Kanalbelegung[K_POTI5];
+ // DebugOut.Analog[11] = EE_Parameter.Kanalbelegung[K_POTI6];
+ // DebugOut.Analog[12] = EE_Parameter.Kanalbelegung[K_POTI7];
+ // DebugOut.Analog[13] = EE_Parameter.Kanalbelegung[K_POTI8];
+ // DebugOut.Analog[14] = EE_Parameter.Kanalbelegung[K_POTI4];
+// DebugOut.Analog[10] = GasMischanteil;
+// DebugOut.Analog[3] = HoeheD * 32;
+// DebugOut.Analog[4] = hoehenregler;
+ }
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
+
+ // Maximalwerte abfangen
+ #define MAX_SENSOR 2048
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Höhenregelung
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//OCR0B = 180 - (Poti1 + 120) / 4;
+//DruckOffsetSetting = OCR0B;
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
+ {
+ int tmp_int;
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
+ {
+ if(Parameter_MaxHoehe < 50)
+ {
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
+ HoehenReglerAktiv = 0;
+ }
+ else
+ HoehenReglerAktiv = 1;
+ }
+ else
+ {
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
+ HoehenReglerAktiv = 1;
+ }
+
+ if(Notlandung) SollHoehe = 0;
+ h = HoehenWert;
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
+ h = GasMischanteil - h; // vom Gas abziehen
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
+ if(tmp_int > 50) tmp_int = 50;
+ else if(tmp_int < -50) tmp_int = -50;
+ h -= tmp_int;
+ hoehenregler = (hoehenregler*15 + h) / 16;
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
+ {
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
+ }
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
+ GasMischanteil = hoehenregler;
+ }
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Mischer und PI-Regler
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gier-Anteil
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier
+ if(GierMischanteil > 100) GierMischanteil = 100;
+ if(GierMischanteil < -100) GierMischanteil = -100;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Nick-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
+ SummeNick += DiffNick; // I-Anteil
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
+ if(SummeNick > 16000) SummeNick = 16000;
+ if(SummeNick < -16000) SummeNick = -16000;
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
+ // Motor Vorn
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Vorne = motorwert;
+ // Motor Heck
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Hinten = motorwert;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Roll-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
+ SummeRoll += DiffRoll; // I-Anteil
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
+ if(SummeRoll > 16000) SummeRoll = 16000;
+ if(SummeRoll < -16000) SummeRoll = -16000;
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
+ // Motor Links
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Links = motorwert;
+ // Motor Rechts
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Rechts = motorwert;
+ // +++++++++++++++++++++++++++++++++++++++++++++++
+
+}
+
/branches/Flight-Ctrl/fc.h
0,0 → 1,106
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4,Poti5,Poti6,Poti7,Poti8;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
#define STRUCT_PARAM_LAENGE 58
struct mk_param_struct
{
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 Poti5 Poti6 Poti7 Poti8
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
 
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/Flight-Ctrl/flight.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>flight</ProjectName><Created>18-Aug-2007 15:51:07</Created><LastEdit>20-Aug-2007 22:52:06</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>18-Aug-2007 15:51:07</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl_MEGA644_V0_60.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\</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>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><SOURCEFILE>uart.c</SOURCEFILE><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><HEADERFILE>uart.h</HEADERFILE><OTHERFILE>version.txt</OTHERFILE><OTHERFILE>License.txt</OTHERFILE></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_MEGA644_V0_60.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</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 -DVERSION_KOMPATIBEL=4 -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=60 -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</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><ProjectFiles><Files><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\_Settings.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\analog.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\fc.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\gps.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\main.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\menu.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\old_macros.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\printf_P.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\rc.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\Settings.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\timer0.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\twimaster.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\uart.h</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\analog.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\eeprom.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\fc.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\GPS.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\main.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\menu.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\printf_P.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\rc.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\timer0.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\twimaster.c</Name><Name>F:\SVN\FlightCtrl\branches\V0.60_CommunityVersion\uart.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>analog.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>fc.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>gps.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>main.h</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>menu.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>rc.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>Settings.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>timer0.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>uart.h</FileName><Status>1</Status></File00012></Files><Workspace><File00000><Position>266 105 1233 462</Position><LineCol>0 0</LineCol></File00000><File00001><Position>391 230 1304 701</Position><LineCol>18 0</LineCol></File00001><File00002><Position>416 255 1329 726</Position><LineCol>53 33</LineCol></File00002><File00003><Position>466 305 1379 776</Position><LineCol>4 0</LineCol></File00003><File00004><Position>491 330 1404 801</Position><LineCol>0 0</LineCol></File00004><File00005><Position>266 105 1179 576</Position><LineCol>0 0</LineCol></File00005><File00006><Position>291 130 1204 601</Position><LineCol>0 0</LineCol></File00006><File00007><Position>316 155 1229 626</Position><LineCol>0 0</LineCol></File00007><File00008><Position>341 180 1254 651</Position><LineCol>0 0</LineCol></File00008><File00009><Position>366 205 1279 676</Position><LineCol>0 0</LineCol></File00009><File00010><Position>391 230 1304 701</Position><LineCol>0 0</LineCol></File00010><File00011><Position>416 255 1329 726</Position><LineCol>0 0</LineCol></File00011><File00012><Position>257 74 1413 810</Position><LineCol>0 0</LineCol><State>Maximized</State></File00012></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/Flight-Ctrl/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="fc.c"></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="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File></Project>
/branches/Flight-Ctrl/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/Flight-Ctrl/gps.h
0,0 → 1,4
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_BerechneZielrichtung(void);
/branches/Flight-Ctrl/main.c
0,0 → 1,210
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
 
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/Flight-Ctrl/main.h
0,0 → 1,92
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~0x01
#define ROT_ON PORTB |= 0x01
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTD ^= 0x02
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
 
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/Flight-Ctrl/makefile
0,0 → 1,391
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/Flight-Ctrl/menu.c
0,0 → 1,118
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 10,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
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,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Po1: %3i Po5: %3i" ,Poti1,Poti5);
LCD_printfxy(0,1,"Po2: %3i Po6: %3i" ,Poti2,Poti6);
LCD_printfxy(0,2,"Po3: %3i Po7: %3i" ,Poti3,Poti7);
LCD_printfxy(0,3,"Po4: %3i Po8: %3i" ,Poti4,Poti8);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/Flight-Ctrl/menu.h
0,0 → 1,5
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/Flight-Ctrl/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/Flight-Ctrl/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/Flight-Ctrl/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/Flight-Ctrl/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[15];
volatile int PPM_diff[15]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 14)
{
if((signal > 250) && (signal < 687) )
{
signal -= 466; // Stabiles Signal
if(abs(signal - PPM_in[index]) < 6)
{
if(SenderOkay < 200) SenderOkay += 10;
}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
}
}
}
 
 
 
 
 
/branches/Flight-Ctrl/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[15];
extern volatile int PPM_diff[15]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/Flight-Ctrl/timer0.c
0,0 → 1,139
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<2);
}
else
PORTD &= ~(1<<2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/Flight-Ctrl/timer0.h
0,0 → 1,14
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
/branches/Flight-Ctrl/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/Flight-Ctrl/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/Flight-Ctrl/uart.c
0,0 → 1,328
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
unsigned char tmp_char_arr3[3];
unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/Flight-Ctrl/uart.h
0,0 → 1,93
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/Flight-Ctrl/version.txt
0,0 → 1,49
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
/branches/chris_hallo2/Flight-Ctrl_MEGA644_V0_60.eep
0,0 → 1,129
:1000000000000000000000000000000000000000F0
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:1000300000000000000000000000000000000000C0
:1000400000000000000000000000000000000000B0
:1000500000000000000000000000000000000000A0
:100060000000000000000000000000000000000090
:100070000000000000000000000000000000000080
:100080000000000000000000000000000000000070
:100090000000000000000000000000000000000060
:1000A0000000000000000000000000000000000050
:1000B0000000000000000000000000000000000040
:1000C0000000000000000000000000000000000030
:1000D0000000000000000000000000000000000020
:1000E0000000000000000000000000000000000010
:1000F0000000000000000000000000000000000000
:1001000000000000000000000000000000000000EF
:1001100000000000000000000000000000000000DF
:1001200000000000000000000000000000000000CF
:1001300000000000000000000000000000000000BF
:1001400000000000000000000000000000000000AF
:10015000000000000000000000000000000000009F
:10016000000000000000000000000000000000008F
:10017000000000000000000000000000000000007F
:10018000000000000000000000000000000000006F
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000000000000000000000000F
:1001F00000000000000000000000000000000000FF
:1002000000000000000000000000000000000000EE
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1003000000000000000000000000000000000000ED
:1003100000000000000000000000000000000000DD
:1003200000000000000000000000000000000000CD
:1003300000000000000000000000000000000000BD
:1003400000000000000000000000000000000000AD
:10035000000000000000000000000000000000009D
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000000004D
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D000000000000000000000000000000000001D
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:1004000000000000000000000000000000000000EC
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000000000000CA
:1006300000000000000000000000000000000000BA
:1006400000000000000000000000000000000000AA
:10065000000000000000000000000000000000009A
:10066000000000000000000000000000000000008A
:10067000000000000000000000000000000000007A
:10068000000000000000000000000000000000006A
:10069000000000000000000000000000000000005A
:1006A000000000000000000000000000000000004A
:1006B000000000000000000000000000000000003A
:1006C000000000000000000000000000000000002A
:1006D000000000000000000000000000000000001A
:1006E000000000000000000000000000000000000A
:1006F00000000000000000000000000000000000FA
:1007000000000000000000000000000000000000E9
:1007100000000000000000000000000000000000D9
:1007200000000000000000000000000000000000C9
:1007300000000000000000000000000000000000B9
:1007400000000000000000000000000000000000A9
:100750000000000000000000000000000000000099
:100760000000000000000000000000000000000089
:100770000000000000000000000000000000000079
:100780000000000000000000000000000000000069
:100790000000000000000000000000000000000059
:1007A0000000000000000000000000000000000049
:1007B0000000000000000000000000000000000039
:1007C0000000000000000000000000000000000029
:1007D0000000000000000000000000000000000019
:1007E0000000000000000000000000000000000009
:1007F00000000000000000000000000000000000F9
:00000001FF
/branches/chris_hallo2/Flight-Ctrl_MEGA644_V0_60.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/chris_hallo2/Flight-Ctrl_MEGA644_V0_60.hex
0,0 → 1,1457
:100000000C94D9010C94F6010C94F6010C94F601B1
:100010000C94F6010C94F6010C94F6010C94F60184
:100020000C94F6010C94100C0C94F6010C94F6014F
:100030000C94E1140C94F6010C94F6010C94F60166
:100040000C94F6010C94F6010C94670B0C94F601D9
:100050000C9443040C94F6010C9492030C94F60156
:100060000C94FC0C0C94F6010C942E140C94F601D8
:100070000A0A0D004E65757472616C004865616412
:10008000696E67486F6C64000A0D5374657565721C
:10009000756E673A20004F4B0A0D000A0D416267EA
:1000A0006C65696368204C756674647275636B7304
:1000B000656E736F722E2E000A0D42656E75747A2E
:1000C0006520506172616D657465727361747A2028
:1000D0002564000A0D496E69742E20454550524F23
:1000E0004D3A2047656E65726965726520446566A4
:1000F00061756C742D506172616D657465722E2E20
:100100002E000A0D3D3D3D3D3D3D3D3D3D3D3D3DCE
:100110003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0F
:100120003D3D000A0D466C69676874436F6E7472DA
:100130006F6C205625642E256420002E0052616EBF
:1001400067653A2533692D253369005374656C6CF6
:10015000756E673A2025336900536574706F696E58
:1001600074202025336900536572766F202000507B
:100170006F7469343A202025336900506F746933F5
:100180003A202025336900506F7469323A202025C7
:10019000336900506F7469313A2020253369005368
:1001A000746172743A2020202020253569004D6545
:1001B0007373776572743A2020253569005269633C
:1001C0006874756E673A2020253569004B6F6D7035
:1001D0006173732020202020202000456D70662E42
:1001E000506567656C3A253569005370616E6E75B0
:1001F0006E673A202025356900486F6368202534F2
:100200006920282533692900526F6C6C20253469D8
:10021000202825336929004E69636B202534692025
:10022000282533692900414343202D2053656E73EF
:100230006F7200476965722025346920282533696B
:100240002900526F6C6C20253469202825336929D8
:10025000004E69636B202534692028253369290005
:100260004779726F202D2053656E736F7200503383
:100270003A25346920204B616EE46C6520005031D2
:100280003A253469202050323A25346920004773DA
:100290003A253469202047693A25346920004E699F
:1002A0003A2534692020526F3A25346920004B37B3
:1002B0003A25346920204B616EE46C6520004B3593
:1002C0003A25346920204B363A25346920004B33D7
:1002D0003A25346920204B343A25346920004B31CB
:1002E0003A25346920204B323A25346920004B6F7F
:1002F0006D706173733A20202025356900526F6C50
:100300006C3A202020202020253569004E69636B3F
:100310003A20202020202025356900616B742E2092
:100320004C6167650048F668656E726567656C7557
:100330006E67004B65696E6520004F666620202061
:100340002020203A20253569004C7566746472754A
:10035000636B3A2025356900536F6C6C486F656894
:10036000653A2025356900486F6568653A20202088
:1003700020202535690028632920486F6C67657245
:1003800020427573730053657474696E673A202553
:100390006420005625642E2564002B2B204D696BAC
:1003A000726F4B6F70746572202B2B005B25695D3B
:1003B000000011241FBECFEFD0E1DEBFCDBF11E0A2
:1003C000A0E0B1E0E0E7FAE502C005900D92AE389A
:1003D000B107D9F715E0AEE8B1E001C01D92AD3B21
:1003E000B107E1F70E942D020C94372D0C94000008
:1003F000A2E0B0E00E94232D802D99270895FB01F3
:10040000282F863008F025E0842F9927429FD001BD
:100410001124AC59BF4F019724F001900E942B2D5D
:10042000FACFA2E0B0E0022E0E942B2D0895CF93C8
:10043000DF93FB01C42FDD27863008F085E0489F5D
:10044000D0011124AC59BF4F219724F00E94232DD5
:100450000192FACFDF91CF9108950F931F93CF931D
:10046000DF9391E097B98FEF88B98BE184B995B9A3
:100470008EE38AB9579A87EF8BB984B7877F84BF99
:10048000809160008861809360001092600080ED30
:1004900097E09093AC018093AB0110922D021092E3
:1004A0002C02109246051092450510922B021092D4
:1004B0002A02109229021092280228980E94BD0C4C
:1004C0000E942D070E94CC140E94F60C0E94141466
:1004D0007894109200048CE38093010484E080936C
:1004E00002048CE390E09F938F931F921F9283E20C
:1004F00091E09F938F931F920E94C30882E091E046
:100500009F938F931F920E94C308299AA1E0B0E0A5
:100510000E94232D802D2DB73EB7265F3F4F0FB68B
:10052000F8943EBF0FBE2DBF8B33A9F183ED90E051
:100530009F938F931F920E94C3080E94971C4AE3C7
:100540006DE675E080E00E94FF0101E00F900F90E2
:100550000F90023049F40E942A1C4AE36DE675E0D0
:1005600082E00E94FF0103E04AE36DE675E0802F20
:100570000E94FF010F5F063060F381E022E030E06F
:10058000D901082E0E942B2D8BE321503040D90138
:10059000082E0E942B2D02E010E0D8010E94232D8E
:1005A000802D4AE36DE675E00E941702D8010E9493
:1005B000232D802D99279F938F9388EB90E09F9315
:1005C0008F931F920E94C308809175050F900F9022
:1005D0000F900F900F9080FF20C08BE990E09F93C9
:1005E0008F931F920E94C30884EC99E00E94FB0B3A
:1005F000EC010E9420100F900F900F90CE010E94EE
:10060000040C8823D9F386E990E09F938F931F927F
:100610000E94C3080F900F900F900E944F1D2898C2
:1006200080ED97E09093AC018093AB0188EE93E06E
:100630009093FB038093FA0385E58093F50388E8A4
:1006400090E09F938F931F920E94C308809175053D
:100650000F900F900F9082FF03C08CE790E002C0D4
:1006600084E790E09F938F931F920E94C3080F909E
:100670000F900F9080E790E09F938F931F920E94BE
:10068000C3080E9447100F900F900F908091A8010F
:10069000882379F11092A8010E94601E0E94081D13
:1006A000289880910101882319F0815080930101DD
:1006B00080912702882329F080912702815080931E
:1006C0002702209104013091050180918505992729
:1006D0002817390734F480ED97E09093AC018093AC
:1006E000AB018091D601882319F40E94141401C033
:1006F00028980E944A070E94B80780E090E00E9474
:10070000040C882319F280912E02882329F088B1E5
:1007100090E1892788B901C0449884EF91E00E9454
:10072000FB0BB4CF1F920F920FB60F9211248F9331
:100730009F93EF93FF93809100018823E1F48091D0
:10074000A3019091A40101969093A4018093A30129
:10075000FC01EB54FD4FE081ED3019F08639910535
:1007600039F41092A4011092A30181E0809300015A
:10077000E093C60004C01092A4011092A301FF915F
:10078000EF919F918F910F900FBE0F901F90189532
:100790008091D704813091F58091C7049091C8046D
:1007A000A091C904B091CA0480930A0590930B05E7
:1007B000A0930C05B0930D058091CB049091CC04CF
:1007C000A091CD04B091CE0480930E0590930F05B7
:1007D000A0931005B09311058091CF049091D0049F
:1007E000A091D104B091D204809312059093130587
:1007F000A0931405B09315051092D7048091F403CB
:10080000813031F48091E803809322051092F40343
:1008100080912404813091F5809114049091150405
:10082000A0911604B09117048093160590931705B4
:10083000A0931805B093190580911804909119049C
:10084000A0911A04B0911B0480931A0590931B0584
:10085000A0931C05B0931D0580911C0490911D046C
:10086000A0911E04B0911F0480931E0590931F0554
:10087000A0932005B09321051092240480912205B5
:100880008111289A08951F920F920FB60F9211248A
:100890002F933F934F935F936F937F938F939F9388
:1008A000AF93BF93CF93DF93EF93FF938091C600F5
:1008B000809392018091C00040919201887109F06B
:1008C00005C18091A501843009F48AC0853050F4B7
:1008D0008130D1F0813098F0823001F1833009F01D
:1008E000F2C021C0863009F4ABC0863008F48CC059
:1008F000873009F4D6C0883009F0E5C0D8C0453B40
:1009000009F0E8C081E003C0423621F482E0809320
:10091000A501E0C0453B09F4DDC0D5C0413009F078
:10092000D2C083E0F4CF409324054F5F4093B402DC
:100930008091B4028F5F8093E30384E08093A501EC
:1009400080912405833031F0813161F1813009F0EB
:100950003FC014C084EE93E090930F0480930E0484
:1009600025E035E03093B2022093B1024096909397
:10097000BC048093BB048091F40327C083EC94E013
:1009800090930F0480930E042CE736E03093B2026C
:100990002093B10244969093BC048093BB04809151
:1009A000D70413C080E194E090930F0480930E0469
:1009B00029EC35E03093B2022093B1024496909333
:1009C000BC048093BB04809124048093250582C0DD
:1009D00081E0809325051092BC041092BB047AC07C
:1009E000842F99279093BE048093BD048091B40214
:1009F000840F8093B4028091E3039091B402890F35
:100A00008093E30385E083CF2091BD043091BE0441
:100A1000842F9927982F8827280F391F3093BE04D9
:100A20002093BD048091B402840F8093B40280911E
:100A3000E3039091B402890F8093E30386E067CFCC
:100A40008091B402840F8093B4028091E30390916B
:100A5000B402890F8093E30380912505882381F4F4
:100A6000E0910E04F0910F048091B1029091B202D6
:100A7000E817F90728F44193F0930F04E0930E046C
:100A80008091BD049091BE0401979093BE04809321
:100A9000BD048091BD049091BE04892BD9F487E0F8
:100AA00036CF8091B402481771F488E030CF80913E
:100AB000E303481741F4E091BB04F091BC04309784
:100AC00011F081E080831092A50104C01092A5016D
:100AD0000E94C8030E94C80340919E01463910F04D
:100AE00010929D01809192018D3009F05CC080913F
:100AF0009D01823009F057C010929D01A42FBB27A1
:100B0000FD01ED5DFB4F3081ED01CC5DDB4F2881B8
:100B10008091A1019091A201831B9109821B9109EF
:100B20009F709093A2018093A1019C0196E036955D
:100B300027959A95E1F7235C2093A001982F9F7346
:100B4000935C90939F018081281729F488819817DE
:100B500011F491E006C0809195018F5F809395011B
:100B600090E080919301882309F064C0992309F4EF
:100B700061C081E08093930140939601AB5DBB4FD0
:100B80008DE08C9380912704823509F053C088E171
:100B900090E02CE00FB6F894A895809360000FBE0B
:100BA0002093600047C080919D018130D9F0813051
:100BB00018F08230E9F530C080919201833239F427
:100BC00080919301882319F481E080939D018091A5
:100BD00092018093250481E080939E01809192018F
:100BE000992715C082E080939D01E42FFF27809113
:100BF0009201EB5DFB4F80834F5F40939E012091FC
:100C000092018091A1019091A201820F911D909378
:100C1000A2018093A1010EC0E42FFF2780919201D1
:100C2000EB5DFB4F8083463938F310929D01E7CF8F
:100C300010929D01FF91EF91DF91CF91BF91AF9104
:100C40009F918F917F916F915F914F913F912F91E4
:100C50000F900FBE0F901F901895DC0120E030E040
:100C600040E050E0E5EBF2E005C08191280F311D36
:100C70004F5F5F4F4A175B07C1F73F70C90166E0DE
:100C8000969587956A95E1F7835CFD01EB54FD4FDE
:100C9000808311962F73235CFD01EB54FD4F20835D
:100CA000AA54BD4F8DE08C93109200018091B50243
:100CB0008093C6000895EF92FF920F931F93CF93F6
:100CC000DF937A01722F93E29093B5026093B6029C
:100CD0008093B70203E010E060E0A8EBB2E046C00A
:100CE000F701E60FF11D90816F5F715019F4E0E09C
:100CF00040E00FC0F701E60FF11D40816F5F7150BA
:100D000011F4E0E006C0F701E60FF11DE0816F5F2E
:100D10007150892F86958695835C8C935527892FF2
:100D200099278370907024E0880F991F2A95E1F726
:100D30009A0194E0369527959A95E1F7822B835C8A
:100D4000ED0189834F705070440F551F440F551F9C
:100D50008E2F8295869586958370842B835C8A83FB
:100D6000EF73E35CEB830C5F1F4F1496772309F05E
:100D7000B7CFC8010E942D06DF91CF911F910F912F
:100D8000FF90EF9008951F93CF93DF93EC0170E0F5
:100D9000A22FBB27129748C0E42FFF27EB5DFB4F24
:100DA00030814F5FE42FFF27EB5DFB4F50814F5F9A
:100DB000E42FFF27EB5DFB4F10814F5FE42FFF27F0
:100DC000EB5DFB4F20814F5F842F9927A817B90750
:100DD00074F15D53FE01E70FF11D3D53330F330FE7
:100DE000852F82958F70382B3083613001F1912FE0
:100DF0009D537F5FFE01E70FF11D71505295507FAB
:100E0000892F86958695582B508363506F3F79F0D4
:100E10007E5FFE01E70FF11D9295990F990F907C6F
:100E20002D53922B90837F5F662309F0B5CFDF911E
:100E3000CF911F9108951F93182F8A3019F48DE0D8
:100E40000E941B078091C00085FFFCCF1093C60055
:100E500080E090E01F9108950895E1ECF0E088E1D2
:100E60008083A0ECB0E08C9182608C93808180685C
:100E700080838081806480838AE28093C40088ECD0
:100E800090E00E94FB0B9093E2038093E1031092A9
:100E9000A501089580910001882309F468C080911C
:100EA0008E01882371F080910001882351F02BE09E
:100EB00045EF53E06091B30287E40E945B06109215
:100EC0008E018091E1039091E2030E94040C88233B
:100ED00021F4809190018823B1F080910001882352
:100EE00091F022E348ED54E06091B30284E40E9463
:100EF0005B06109290018AEF90E00E94FB0B9093AA
:100F0000E2038093E10380918F018823F1F08091C7
:100F100000018823D1F00E94501010928F0180911F
:100F20009C018F5F80939C01843011F410929C018E
:100F300080919C0144E1849FA00111244A5E5E4F90
:100F400024E160E0805D0E945B068091910188232E
:100F500071F080910001882351F02AE040E054E0D4
:100F60006091B30286E50E945B061092910108959C
:100F70001F93CF93DF93CDB7DEB722970FB6F894C8
:100F8000DEBF0FBECDBF80919301882309F498C0C6
:100F90008FEF8093010180912704813760F48C36B4
:100FA00008F06FC0873609F440C08836F9F0833600
:100FB00009F084C008C0843759F1863791F1813730
:100FC00009F07CC036C02091960143E06BE085EFCC
:100FD00093E00E94C3068091CD019091F703892B85
:100FE0008093CD0181E08093900168C020919601AB
:100FF00043E062E0CE0101960E94C3068091CD01DC
:101000009981892B8093CD0181E080938F0156C017
:101010002091960143E064E088E991E00E94C306D4
:101020004DC081E08093910149C081E080938E01A1
:1010300045C02091960143E062E0CE0101960E94F6
:10104000C30689818F3F89F0863010F085E089835F
:101050004AE36DE675E089810E94170289812AE3DF
:101060004DE655E06091B30208C01091B3020E94B2
:10107000F8012AE34DE655E0612F855B0E945B068F
:101080001DC02091960143E06AE38DE695E00E9441
:10109000C306809127044AE36DE675E08B560E94F3
:1010A000FF01809127048B56A2E0B0E0082E0E9439
:1010B0002B2D0E94F80199270E944B1E109293013C
:1010C00022960FB6F894DEBF0FBECDBFDF91CF9151
:1010D0001F910895982F80912605813069F48091A1
:1010E000CC01E82FFF27EA5EFE4F90838F5F80934D
:1010F000CC0121E030E005C0892F0E941B07282F7A
:101100003327C90108951F93182F04C080E30E945C
:101110006A0811501116D4F31F9108951F93182FC8
:1011200004C080E20E946A0811501116D4F31F9186
:1011300008950F931F93CF93DF938C01EB0108C0A9
:10114000F8010F5F1F4FE4918E2F0E946A082197CC
:101150002097B1F7DF91CF911F910F9108950F93D1
:101160001F93CF93DF938C01EB0106C0F8018191AF
:101170008F010E946A0821972097C1F7DF91CF91D4
:101180001F910F9108952F923F924F925F926F920D
:101190007F928F929F92AF92BF92CF92DF92EF9207
:1011A000FF920F931F93CF93DF93CDB7DEB7E397F3
:1011B0000FB6F894DEBF0FBECDBF29968FAD29972D
:1011C00080932605CE01855B9F4F9D838C832B9654
:1011D0008EAD9FAD2B979FA78EA72224332421018C
:1011E00002C0130124010EA51FA502C00F5F1F4FEF
:1011F000F801F490FF2019F0F5E2FF16B9F7B801F5
:101200008EA59FA5681B790B11F00E949908FF20FD
:1012100009F444C20F5F1F4F1FA70EA71982AC81AC
:10122000BD811BAA1AAA9FEF99ABEEA5FFA5CF011E
:1012300001969FA78EA7B49095E7B91621F08B2D44
:101240008062883789F4EBA9E0FF07C02D903D90BC
:101250004D905C901397149607C08D919C911197B7
:101260001C01442455241296F0E2BF1621F4898112
:101270008823D9F685C083E2B81609F483C09AE2C0
:10128000B91621F0EDE2BE1669F408C0FD01129610
:10129000E081EAABE7FFC9CFE195EAABFBA9F061DA
:1012A000FF7D72C08BE2B81609F46AC09EE2B916DF
:1012B000B1F52EA53FA52F5F3F4FEEA5FFA5849169
:1012C0008A3221F0B82E20E030E01BC0FD011296DA
:1012D0004081518157FF02C04FEF5FEF49AB3FA7FD
:1012E0002EA7A3CFC90103E0880F991F0A95E1F744
:1012F000220F331F280F391F2B0D311D2053304073
:10130000B49031968B2D80538A3060F3FFA7EEA7FF
:10131000A90137FF02C04FEF5FEF49AB8DCFF0E37C
:10132000BF1631F48BA984FD80CF80628BAB7DCF5B
:101330008B2D81538930E8F420E030E0C901F3E0DF
:10134000880F991FFA95E1F7220F331F280F391FD5
:101350002B0D311D20533040EEA5FFA5CF01019686
:101360009FA78EA7B4908B2D80538A3038F32AAB79
:1013700063CF98E6B91651F4EBA9E460EBAB55CF17
:10138000B98253CFFBA9F860FBAB4FCF8CE6B81600
:1013900021F49BA991609BAB48CFBD83AC83E3E66E
:1013A000BE1639F41296BD83AC8312978C918E834E
:1013B0001AC1F4E4BF1639F084E6B81639F099E69C
:1013C000B91659F503C0EBA9E160EBABFBA9F0FF3F
:1013D00008C01496BD83AC835E904E903E902E90D4
:1013E0000AC01296BD83AC839E918E911C01442449
:1013F00037FC4094542C57FC03C08AE088AB94C05F
:101400005094409430942094211C311C411C511C58
:101410008DE289839AE098AB87C0EFE4BE1629F08D
:10142000FFE6BF1639F488E063C09BA991609BABCF
:10143000E8E058C0F0E7BF1681F41296BD83AC8394
:101440009E918E911C01442455248BA980648BAB02
:1014500090E198AB78E7B72E66C0E3E7BE16D9F502
:101460001296BD83AC83DE90CE90C114D10489F472
:1014700088E28E838EE68F8385E788878CE689876E
:101480008A8789E28B871C8666E0C62ED12CCC0E1B
:10149000DD1EF9A9F7FD13C04F2F552747FD5095C5
:1014A00060E070E0C6010E94D12A009711F419A9EA
:1014B0000DC08C1919A981174CF4182F07C0F6011B
:1014C00001900020E9F731971E2F1C191982420163
:1014D000310140E094C085E5B81631F095E7B916C2
:1014E00049F4EAE0E8AB1FC0FBA9F160FBAB8AE07E
:1014F00088AB19C098E5B91621F0E8E7BE1609F0E7
:101500006EC0FBA9F3FD02C080E1F2CF21143104CB
:101510004104510419F490E198AB05C0EBA9E064D3
:10152000EBABF0E1F8AB198289A987FD03C09BA959
:101530009F7D9BAB211431044104510461F4E9A95E
:10154000EE2349F46624772443015EE2C52ED12CB4
:10155000CC0EDD1E3EC04EE2C42ED12CCC0EDD1EC4
:10156000F8A9EF2EFF2400271127C201B101A8011D
:1015700097010E94E62C6A3020F430E3A32EA60ED9
:1015800008C027E5A22EA60E88E5B81611F49FED37
:10159000A922F601A2926F01C201B101A80197012F
:1015A0000E94E62C39014A012E143F0440065106E0
:1015B00018F019012A01D9CFF8A9F83051F48BA9F4
:1015C00083FF07C090E3A91621F080E3F601829320
:1015D0006F01CE018C19182F125D49A910C0BB20D4
:1015E00009F45CC0BE8219824201310100E011E0C1
:1015F00096E0C92ED12CCC0EDD1E21E005C0212F96
:10160000042F011B07FD00E08981882319F0812F39
:101610008F5F07C09BA996FD02C0812F02C0822F59
:101620008E5FA82EA00EEBA9EE2EFF2480E3482E9D
:10163000512C4E205F204114510421F48AA98A19AB
:101640000E948E088981882329F061E070E0CE0134
:10165000019609C0E6FE09C080E38A83BB8262E08E
:1016600070E0CE0102960E94AF08F0E24F165104DE
:1016700021F48AA98A190E948308802F0E94830876
:10168000612F772767FD7095C6010E94AF08E4FEC1
:10169000A8CD8AA98A190E948E08A3CDE3960FB619
:1016A000F894DEBF0FBECDBFDF91CF911F910F9198
:1016B000FF90EF90DF90CF90BF90AF909F908F9072
:1016C0007F906F905F904F903F902F9008951F9262
:1016D0000F920FB60F9211242F933F935F936F9346
:1016E0007F938F939F93AF93BF938091AF0181506E
:1016F0008093AF018F3F01F589E08093AF01809126
:1017000003018F5F817080930301882319F481E0C6
:101710008093A8018091A6019091A70101969093D2
:10172000A7018093A6018091D601882329F080919A
:10173000D60181508093D6018091AB019091AC018C
:10174000029758F08091AB019091AC010197909372
:10175000AC018093AB015A9A01C05A9880917505EB
:1017600083FF3BC0349B0AC08091A9019091AA01DC
:1017700001969093AA018093A9012FC08091A9019D
:101780009091AA01892B79F08091A9019091AA01E9
:10179000805A9F4040F48091A9019091AA019093B2
:1017A00018028093170280911702909118022091DD
:1017B000190230911A02821B930B845E9D4F68E6DA
:1017C00071E00E94D32C845B904090931C02809324
:1017D0001B021092AA011092A901BF91AF919F9193
:1017E0008F917F916F915F913F912F910F900FBEDD
:1017F0000F901F9018952091A6013091A7012F5F9F
:101800003F4F820F931F08952091A6013091A701A9
:10181000821B930B892F99278695807499270895A9
:101820001F920F920FB60F921124EF92FF920F9317
:101830001F932F933F934F935F936F937F938F9358
:101840009F93AF93BF93CF93DF93EF93FF938091D9
:1018500002018150809302018F3F09F073C083E839
:101860008093B00080918901C82FDD27D093AE010D
:10187000C093AD0180919305E0908F0580FF1EC05D
:101880006091E7017091E8018091E9019091EA018E
:10189000FF240027112720E830E040E050E00E94BC
:1018A000082DC801B7010E94A02C20E032E040E0E2
:1018B00050E00E94082DC20FD31F1DC06091E701A8
:1018C0007091E8018091E9019091EA01FF240027DD
:1018D000112720E830E040E050E00E94082DC801C8
:1018E000B7010E94A02C20E032E040E050E00E94CE
:1018F000082DC21BD30BD093AE01C093AD01209134
:10190000AD013091AE0180919005992728173907D4
:1019100034F08091910599278217930724F49093CE
:10192000AE018093AD018091AD019091AE01909395
:10193000FF048093FE048093B3008091920580930E
:10194000020104C083E08093B0005F98FF91EF91A3
:10195000DF91CF91BF91AF919F918F917F916F91C7
:101960005F914F913F912F911F910F91FF90EF90B9
:101970000F900FBE0F901F9018958091A601909127
:10198000A7010B969093B1018093B00182E085BDD1
:1019900083EA84BD17BC88E788BD96E096BD83ECDA
:1019A0008093B0009093B100E0E7F0E08081826026
:1019B0008083EEE6F0E08081816080838AE080931E
:1019C000B3001092B20008952091A6013091A701B2
:1019D0002F5F3F4F280F391F8091A6019091A701DB
:1019E000A901481B590B57FFF7CF089510927C00AF
:1019F0008FEE80937A0008951F920F920FB60F9288
:101A00001124EF92FF920F931F932F933F934F93C5
:101A10005F936F937F938F939F93AF93BF93CF9376
:101A2000DF93EF93FF9310927A004091C8014F5FCC
:101A30004093C8014150433009F41CC1443038F48C
:101A4000413009F463C0423008F0B9C00DC04530E0
:101A500009F450C1453008F42AC1463009F46FC179
:101A6000473009F0CBC252C22091DB013091DC013A
:101A70008091780090917900281B390B8091B601F4
:101A80009091B701820F931F9093B7018093B60195
:101A90008091C0018F5F8093C00180910B02909173
:101AA0000C02A0910D02B0910E02442737FD409523
:101AB000542F820F931FA41FB51F80930B02909386
:101AC0000C02A0930D02B0930E0280910F02909130
:101AD0001002A0911102B0911202820F931FA41F55
:101AE000B51F80930F0290931002A0931102B09340
:101AF000120281E08093C9018091C6019091C701D3
:101B000001969093C7018093C6017CC260917800D2
:101B1000709179008091D9019091DA01681B790B5D
:101B20008091030290910402A0910502B0910602F7
:101B30009B01442737FD4095542F820F931FA41F0C
:101B4000B51F8093030290930402A0930502B09303
:101B500006028091070290910802A0910902B091BB
:101B60000A02820F931FA41FB51F80930702909350
:101B70000802A0930902B0930A0280917800909124
:101B800079000A9710F464E47DEF809178009091D9
:101B90007900895E934010F06CEB72E08091B401A3
:101BA0009091B501860F971F9093B5018093B40172
:101BB0008091BF018F5F8093BF0182E058C0609128
:101BC0007800709179008091D7019091D801681BBD
:101BD000790B8091FB019091FC01A091FD01B091E6
:101BE000FE019B01442737FD4095542F820F931F20
:101BF000A41FB51F8093FB019093FC01A093FD01EE
:101C0000B093FE018091FF0190910002A09101022A
:101C1000B0910202820F931FA41FB51F8093FF0192
:101C200090930002A0930102B09302028091780089
:101C3000909179000A9710F464E47DEF8091780028
:101C400090917900895E934010F06CEB72E0809186
:101C5000B2019091B301860F971F9093B3018093C7
:101C6000B2018091BE018F5F8093BE0184E08093BA
:101C7000C901C8C1409104015091050180917800CB
:101C8000909179009A01220F331F240F351F63E0D2
:101C900070E00E94BF2C260F371F3695279536958A
:101CA0002795309305012093040186E0E0CF8091D1
:101CB000DF019091E0012091780030917900821B42
:101CC000930B90932805809327058091B8019091FC
:101CD000B9012091270530912805820F931F909319
:101CE000B9018093B8018091C2018F5F8093C201D6
:101CF00087E0BDCF80917800909179002091DD013F
:101D00003091DE01821B930B909328058093270569
:101D10008091BA019091BB0120912705309128054F
:101D2000820F931F9093BB018093BA018091C101F0
:101D30008F5F8093C1014093C90186E0E4C0609148
:101D4000780070917900E090E101F090E20100915B
:101D5000E3011091E401882777FD8095982F0E9478
:101D6000842BA80197010E94DE2A0E94672B7093A2
:101D7000BD016093BC012091BC013091BD01E09197
:101D80002705F0912805809132059091330597FF42
:101D900003C0909581959F4F64E070E00E94D32C22
:101DA000EB01CF01F7FF03C0909581959F4F64E051
:101DB00070E00E94D32C260F371F2C0F3D1F30934D
:101DC000BD012093BC018091BC019091BD0102979F
:101DD00004F16091E1017091E2018091E301909141
:101DE000E40120E030E048E454E40E948E2B882394
:101DF0000CF03CC06091E1017091E2018091E3013F
:101E00009091E4012AE037ED43EA5CE30E94DF2A87
:101E100025C08091BC019091BD018F5F9F4F34F52B
:101E20006091E1017091E2018091E3019091E40100
:101E300020E030E046E154E40E94912B1816B4F4FF
:101E40006091E1017091E2018091E3019091E401E0
:101E50002AE037ED43EA5CE30E94DE2A6093E10169
:101E60007093E2018093E3019093E40181E0809319
:101E7000C301809178009091790090932A05809316
:101E800029052091130230911402409115025091BE
:101E900016028091BC019091BD01AA2797FDA095E3
:101EA000BA2F280F391F4A1F5B1F2093130230934C
:101EB00014024093150250931602E0901302F09022
:101EC0001402009115021091160260911302709194
:101ED0001402809115029091160220E034E040E057
:101EE00050E00E94082DE21AF30A040B150BE09251
:101EF0001302F0921402009315021093160283E06D
:101F00008093C90187E08093C8017CC08091370528
:101F1000909138052091780030917900820F931FBD
:101F2000909338058093370580912F058F5F8093BC
:101F30002F0580912F05853008F460C080917800CE
:101F40009091790090930B0180930A0110922F05D4
:101F500080912B0590912C05209137053091380503
:101F6000821B930B20912F0230913002821B930B26
:101F70009093C5018093C401609137057091380535
:101F8000E0900601F090070100910801109109010D
:101F9000882777FD8095982FA8019701220F331F7E
:101FA000441F551F2E0D3F1D401F511F620F731FF1
:101FB000841F951F24E030E040E050E00E94082D8F
:101FC00020930601309307014093080150930901C3
:101FD00020912B0530912C058091060190910701ED
:101FE000A0910801B0910901281B390B30933002F0
:101FF00020932F0210923805109237051092C901D4
:102000001092C8018091C90180937C008FEE80936B
:102010007A00FF91EF91DF91CF91BF91AF919F91A6
:102020008F917F916F915F914F913F912F911F9170
:102030000F91FF90EF900F900FBE0F901F9018958B
:10204000CF93DF93C0E0D0E0C7BD82E390E00E9471
:10205000E40C8BE391E09F938F931F920E94C3083F
:1020600080910A0190910B010F900F900F9084586E
:10207000934020F02196CA3FD10531F7C093340533
:1020800088EC90E00E94E40CDF91CF910895E6E1A6
:10209000F1E080E2819391E0E636F907D9F70895FF
:1020A000FF920F931F938091CD01282F3327C901F1
:1020B00081709070682F882391F08091CE018823E1
:1020C00011F0815002C0809166018093CE01E6E15B
:1020D000F1E080E2819391E0E636F907D9F7A901B2
:1020E0004270507021FF0DC08091CE018F5F8093B0
:1020F000CE01E6E1F1E080E2819391E0E636F90776
:10210000D9F7662321F0452B11F01092CE0181E121
:102110008093CC018091CE0199279F938F938CEA75
:1021200093E09F938F93E1E0FE2EFF920E94C308FD
:102130000091CE010F900F900F900F900F900530EF
:1021400009F4D7C1063090F4023009F4B8C0033066
:1021500030F40023F1F0013009F05BC34DC00330CF
:1021600009F402C1043009F054C34BC1083009F42A
:1021700098C2093038F4063009F411C2073009F06A
:1021800048C36CC2093009F4C9C20A3009F041C31E
:1021900003C31092CC018AE993E09F938F93FF923F
:1021A0000E94C30884E18093CC018CE390E09F936C
:1021B0008F931F921F9283E993E09F938F93FF92D7
:1021C0000E94C30888E28093CC010E94F8019927FD
:1021D0009F938F9386E893E09F938F93FF920E9443
:1021E000C3088CE38093CC0186E793E09F938F93A1
:1021F000FF920E94C3088EC28091750580FF47C080
:102200001092CC0180912F02909130029F938F9376
:1022100087E693E09F938F930F930E94C30884E116
:102220008093CC0180913102909132029F938F93E1
:1022300088E593E09F938F930F930E94C30888E2F1
:102240008093CC0180910A0190910B019F938F9311
:1022500089E493E09F938F930F930E94C3088CE3CC
:102260008093CC018091340599279F938F938AE3C3
:1022700093E09F938F930F930E94C3088DB79EB7EF
:1022800044960FB6F8949EBF0FBE8DBFC7C284E1BF
:102290008093CC0183E393E09F938F930F930E94ED
:1022A000C30888E28093CC0185E293E09F938F93EB
:1022B0000F930E94C3088DB79EB70696E2CF109287
:1022C000CC018BE193E09F938F93FF920E94C30810
:1022D00084E18093CC016091E7017091E8018091E5
:1022E000E9019091EA0120E034E040E050E00E94F2
:1022F000082D5F934F933F932F938CE093E09F9330
:102300008F93FF920E94C30888E28093CC01609172
:10231000EF017091F0018091F1019091F20120E0C4
:1023200034E040E050E00E94082D5F934F933F93CC
:102330002F938DEF92E09F938F93FF920E94C3089B
:102340008CE38093CC0180911702909118029F93A7
:102350008F938EEE92E09F938F93FF920E94C3081B
:102360008DB79EB746968DCF1092CC0180914505D2
:102370009091460520914305309144059F938F939A
:102380003F932F938EED92E09F938F93FF920E9445
:10239000C30884E18093CC018091490590914A055E
:1023A00020914705309148059F938F933F932F933A
:1023B0008EEC92E09F938F93FF920E94C30888E275
:1023C0008093CC0180914D0590914E0520914B0555
:1023D00030914C059F938F933F932F938EEB92E018
:1023E0009F938F93FF920E94C3088CE38093CC014C
:1023F00080914F05909150059F938F938EEA92E0C4
:102400006FC01092CC01E0916E05FF27EE0FFF1F09
:10241000EF5BFA4F20813181E0916D05FF27EE0FD0
:10242000FF1FEF5BFA4F808191813F932F939F9322
:102430008F938EE992E09F938F93FF920E94C3083F
:1024400084E18093CC01E0917005FF27EE0FFF1F20
:10245000EF5BFA4F20813181E0916F05FF27EE0F8E
:10246000FF1FEF5BFA4F808191813F932F939F93E2
:102470008F938EE892E09F938F93FF920E94C30800
:1024800088E28093CC01E0917205FF27EE0FFF1FD9
:10249000EF5BFA4F20813181E0917105FF27EE0F4C
:1024A000FF1FEF5BFA4F808191813F932F939F93A2
:1024B0008F938EE792E09F938F93FF920E94C308C1
:1024C0008CE38093CC01E0917305FF27EE0FFF1F93
:1024D000EF5BFA4F808191819F938F938EE692E01C
:1024E0009F938F93FF920E94C3088DB79EB74A9621
:1024F000C8CE1092CC0180E692E09F938F93FF921A
:102500000E94C30884E18093CC012091D7013091CF
:10251000D8018091B2019091B3016091BE013F93C7
:102520002F9377270E94D32C7F936F9381E592E0BE
:102530009F938F93FF920E94C30888E28093CC01FF
:102540002091D9013091DA018091B4019091B501C7
:102550006091BF013F932F9377270E94D32C7F93E5
:102560006F9382E492E09F938F93FF920E94C3083F
:102570008CE38093CC012091DB013091DC018091D0
:10258000B6019091B7016091C0013F932F937727D7
:102590000E94D32C7F936F9383E392E056C01092F6
:1025A000CC0186E292E09F938F93FF920E94C30832
:1025B00084E18093CC012091DD013091DE01809196
:1025C000BA019091BB016091C1013F932F9377278E
:1025D0000E94D32C7F936F9387E192E09F938F9318
:1025E000FF920E94C30888E28093CC012091DF0112
:1025F0003091E0018091B8019091B9016091C201E0
:102600003F932F9377270E94D32C7F936F9388E07B
:1026100092E09F938F93FF920E94C3088CE3809374
:10262000CC016091E1017091E2018091E301909110
:10263000E4010091290510912A050E94672B7F93E0
:102640006F931F930F9389EF91E09F938F93FF9266
:102650000E94C3088DB79EB7489613CE84E180933D
:10266000CC0180910401909105019F938F938AEE94
:1026700091E09F938F93FF920E94C30888E280931A
:10268000CC018091270299279F938F938BED91E046
:102690009F938F93FF920E94C3088DB79EB70A96AF
:1026A000F0CD1092CC018CEC91E09F938F93FF9230
:1026B0000E94C30884E18093CC0180911B02909119
:1026C0001C029F938F938DEB91E09F938F93FF92CA
:1026D0000E94C30888E28093CC01809117029091F8
:1026E00018029F938F938EEA91E09F938F93FF92AE
:1026F0000E94C3088CE38093CC01809119029091D1
:102700001A029F938F938FE991E09F938F93FF928B
:102710000E94C3088DB79EB74296B3CD1092CC01EC
:1027200080911F02909120029F938F9383E991E003
:102730009F938F93FF920E94C30884E18093CC0102
:1027400080912102909122029F938F9387E891E0DC
:102750009F938F93FF920E94C30888E28093CC01DD
:1027600080912302909124029F938F938BE791E0B5
:102770009F938F93FF920E94C3088CE38093CC01B8
:1027800080912502909126029F938F938FE691E08E
:102790009F938F93FF9270CD1092CC0187E691E0CA
:1027A0009F938F93FF920E94C30884E18093CC0192
:1027B0008091890199279F938F9389E591E09F9359
:1027C0008F93FF920E94C30888E28093CC0180918E
:1027D000AD019091AE019F938F938BE491E09F9315
:1027E0008F93FF920E94C3088CE38093CC01809169
:1027F000910599279F938F938091900599279F9397
:102800008F938DE391E09F938F93FF920E94C30873
:1028100035CD0150009366011092CE011092CD018A
:102820001F910F91FF9008951092B9008AE2809352
:10283000B800089585EA8093BC0080E090E0089598
:1028400084E98093BC0008951092B9008093BB0086
:1028500085E88093BC0080E090E008951F920F927D
:102860000FB60F9211248F939F93EF93FF93809154
:10287000CF018F5F8093CF018150833009F442C034
:10288000843028F48130A1F0823070F50CC085309E
:1028900009F448C08530D8F1863009F44BC0873040
:1028A00009F071C05BC08091D001880F8E5A14C0AE
:1028B0008091D0018F5F8093D0018150813009F4E5
:1028C00044C0813038F0823009F442C0833009F0CE
:1028D0005AC041C0809196021092B9008093BB000B
:1028E00085E88093BC004FC084E98093BC00809150
:1028F000D001843018F41092CF0102C01092D001A0
:1029000085EAEFCF8091D101880F8D5AE5CF809174
:10291000D1018130D1F08130E8F28230C9F08330CA
:1029200091F519C08091BB00E091D101FF27E75CD0
:10293000FA4F80838091D101813039F0813050F29B
:10294000823031F08330F9F406C080919702C4CF11
:1029500080919A02C1CF8091A602BECF8091D10111
:102960009091BB00E82FFF27E75CFA4F94838F5FBD
:102970008093D101843010F01092D10184E98093CA
:10298000BC001092CF01FF91EF919F918F910F901A
:102990000FBE0F901F90189583EC80938100EFE697
:1029A000F0E08081806280831092DC011092DB0174
:1029B0001092DA011092D9011092D8011092D70129
:1029C00008951F920F920FB60F9211240F931F9329
:1029D0002F933F934F935F936F937F938F939F9327
:1029E000AF93BF93CF93DF93EF93FF932091860034
:1029F000309187008091D4019091D501281B390B2B
:102A000080918600909187009093D5018093D401A6
:102A1000C9018D5D95408356994148F481E090E06D
:102A20009093D3018093D2011092670154C0C0915A
:102A3000D201D091D301CA30D1050CF04CC0C901EC
:102A40008B5F9040845B914008F040C0A901425DDB
:102A50005140FE01EE0FFF1FEF5BFA4F8081918125
:102A6000FA01E81BF90BCF01F7FF03C090958195A0
:102A70009F4F06974CF480912702883C28F4809160
:102A80002702865F80932702FE01EE0FFF1F8F0152
:102A90000F5B1A4FD8012D913C91C901880F991FE6
:102AA000820F931F840F951F64E070E00E94D32C67
:102AB000D8018D919C9111979B01281B390BE95AE4
:102AC000FA4F3183208311967C936E932196D09395
:102AD000D301C093D201FF91EF91DF91CF91BF91CC
:102AE000AF919F918F917F916F915F914F913F91A6
:102AF0002F911F910F910F900FBE0F901F9018955F
:102B0000AF92BF92CF92DF92EF92FF920F931F93FB
:102B100010927A008091BE01882369F08091B20101
:102B20009091B3016091BE0177270E94D32C7093DE
:102B3000AA056093A9058091BF01882369F080915F
:102B4000B4019091B5016091BF0177270E94D32C09
:102B50007093A8056093A7058091C001882369F050
:102B60008091B6019091B7016091C00177270E94D2
:102B7000D32C7093B6056093B5058091C10188236D
:102B8000D9F1E090B205F090B3056091BA0170916F
:102B9000BB012091C1010027F7FC0095102F5701C0
:102BA000680143E0AA0CBB1CCC1CDD1C4A95D1F784
:102BB000AE18BF08C00AD10A882777FD8095982FE4
:102BC00034E0660F771F881F991F3A95D1F7332796
:102BD000442755270E94082DA20EB31EC41ED51EE1
:102BE000C601B50128E030E040E050E00E94082D29
:102BF0003093B3052093B2058091C2018823D9F1A7
:102C0000E090BB05F090BC056091B8017091B901EE
:102C10002091C2010027F7FC0095102F5701680191
:102C200083E0AA0CBB1CCC1CDD1C8A95D1F7AE1826
:102C3000BF08C00AD10A882777FD8095982FB4E095
:102C4000660F771F881F991FBA95D1F7332744273E
:102C500055270E94082DA20EB31EC41ED51EC60104
:102C6000B50128E030E040E050E00E94082D3093AC
:102C7000BC052093BB058091C3018823A1F1E0909E
:102C8000AC05F090AD056091BC017091BD01209143
:102C9000C3010027F7FC0095102F57016801A3E03E
:102CA000AA0CBB1CCC1CDD1CAA95D1F7AE18BF0822
:102CB000C00AD10A882777FD8095982F33274427AB
:102CC00055270E94082DA20EB31EC41ED51EC60194
:102CD000B50128E030E040E050E00E94082D30933C
:102CE000AD052093AC051092B3011092B201109281
:102CF000BE011092B5011092B4011092BF01109262
:102D0000B7011092B6011092C0011092B901109251
:102D1000B8011092C2011092BB011092BA01109238
:102D2000C1011092BD011092BC011092C3018091AB
:102D30000B0290910C02A0910D02B0910E028093B3
:102D4000F7019093F801A093F901B093FA018091F3
:102D5000FB019091FC01A091FD01B091FE018093D7
:102D6000E7019093E801A093E901B093EA01809113
:102D7000030290910402A0910502B0910602809393
:102D8000EF019093F001A093F101B093F2018091D3
:102D9000FF0190910002A0910102B0910202809384
:102DA000EB019093EC01A093ED01B093EE018091C3
:102DB000070290910802A0910902B0910A02809343
:102DC000F3019093F401A093F501B093F6018FEE17
:102DD00080937A008091A9059091AA05893C91057C
:102DE0007CF02091A9053091AA058091A9059091C8
:102DF000AA05880F991F880F991F2052334015C0CC
:102E00008091A9059091AA0588539F4FA4F4209121
:102E1000A9053091AA058091A9059091AA05880F6E
:102E2000991F880F991F205E3C4F820F931F90932C
:102E3000AA058093A9058091A7059091A805893CD2
:102E400091057CF02091A7053091A8058091A705F8
:102E50009091A805880F991F880F991F2052334021
:102E600015C08091A7059091A80588539F4FA4F4A1
:102E70002091A7053091A8058091A7059091A805FC
:102E8000880F991F880F991F205E3C4F820F931F58
:102E90009093A8058093A70520911F0230912002EE
:102EA00080917105E82FFF27EE0FFF1FEF5BFA4FB0
:102EB0008081918182599F4F281739071CF42F5F19
:102EC0003F4F0CC08081918182599F4F8217930799
:102ED0004CF42115310531F021503040309320025F
:102EE00020931F02209121023091220280917205CD
:102EF000E82FFF27EE0FFF1FEF5BFA4F80819181D4
:102F000082599F4F281739071CF42F5F3F4F0CC081
:102F10008081918182599F4F821793074CF421152C
:102F2000310531F0215030403093220220932102AC
:102F3000209123023091240280917305E82FFF270E
:102F4000EE0FFF1FEF5BFA4F8081918182599F4FF7
:102F5000281739071CF42F5F3F4F0CC080819181E7
:102F600082599F4F821793074CF42115310531F098
:102F700021503040309324022093230220912502D7
:102F80003091260280917405E82FFF27EE0FFF1F76
:102F9000EF5BFA4F8081918182599F4F2817390743
:102FA0001CF42F5F3F4F0CC08081918182599F4F4D
:102FB000821793074CF42115310531F02150304030
:102FC000309326022093250280911F0290912002C7
:102FD00097FF05C01092200210921F020AC08F3F77
:102FE000910539F034F08FEF90E0909320028093B8
:102FF0001F02809121029091220297FF05C010923A
:103000002202109221020AC08F3F910539F034F05C
:103010008FEF90E09093220280932102809123020F
:103020009091240297FF05C010922402109223026F
:103030000AC08F3F910539F034F08FEF90E0909304
:10304000240280932302809125029091260297FF0B
:1030500005C010922602109225020AC08F3F9105EA
:1030600039F034F08FEF90E09093260280932502A0
:103070001F910F91FF90EF90DF90CF90BF90AF9096
:10308000089510927A008091BE01882369F08091A2
:10309000B2019091B3016091BE0177270E94D32CB9
:1030A0007093AA056093A9058091BF01882369F0F8
:1030B0008091B4019091B5016091BF0177270E9482
:1030C000D32C7093A8056093A7058091C001882335
:1030D00069F08091B6019091B7016091C0017727A6
:1030E0000E94D32C7093B6056093B5058091C10101
:1030F0008823D1F06091BA017091BB012091C10188
:10310000882777FD8095982F34E0660F771F881FFA
:10311000991F3A95D1F73327442755270E94082D48
:103120003093B3052093B2058091C2018823D1F07A
:103130006091B8017091B9012091C201882777FD93
:103140008095982FB4E0660F771F881F991FBA9556
:10315000D1F73327442755270E94082D3093BC050B
:103160002093BB058091C301882399F06091BC0135
:103170007091BD012091C301882777FD8095982F1C
:103180003327442755270E94082D3093AD052093FF
:10319000AC051092B3011092B2011092BE011092D0
:1031A000B5011092B4011092BF011092B7011092B4
:1031B000B6011092C0011092B9011092B80110929C
:1031C000C2011092BB011092BA011092C10110927B
:1031D000BD011092BC011092C3018FEE80937A0062
:1031E00020911F023091200280917105E82FFF2766
:1031F000EE0FFF1FEF5BFA4F8081918182599F4F45
:10320000281739071CF42F5F3F4F0CC08081918134
:1032100082599F4F821793074CF42115310531F0E5
:10322000215030403093200220931F022091210230
:103230003091220280917205E82FFF27EE0FFF1FC9
:10324000EF5BFA4F8081918182599F4F2817390790
:103250001CF42F5F3F4F0CC08081918182599F4F9A
:10326000821793074CF42115310531F0215030407D
:1032700030932202209321022091230230912402D4
:1032800080917305E82FFF27EE0FFF1FEF5BFA4FCA
:103290008081918182599F4F281739071CF42F5F35
:1032A0003F4F0CC08081918182599F4F82179307B5
:1032B0004CF42115310531F0215030403093240277
:1032C00020932302209125023091260280917405DB
:1032D000E82FFF27EE0FFF1FEF5BFA4F80819181F0
:1032E00082599F4F281739071CF42F5F3F4F0CC09E
:1032F0008081918182599F4F821793074CF4211549
:10330000310531F0215030403093260220932502C0
:1033100080911F029091200297FF05C01092200219
:1033200010921F020AC08F3F910539F034F08FEFE1
:1033300090E09093200280931F028091210290914F
:10334000220297FF05C010922202109221020AC0A9
:103350008F3F910539F034F08FEF90E09093220287
:1033600080932102809123029091240297FF05C04F
:1033700010922402109223020AC08F3F910539F067
:1033800034F08FEF90E09093240280932302809199
:1033900025029091260297FF05C0109226021092F6
:1033A000250208958F3F910539F034F08FEF90E0BA
:1033B000909326028093250208951F9380917805AB
:1033C0008B3F98F08B3F19F480911F020EC08C3F09
:1033D00019F48091210209C08D3F19F480912302D4
:1033E00004C08E3F21F48091250280938101809159
:1033F0008101882319F41092810104C08F3F11F4D8
:1034000080938101809177058B3F98F08B3F19F471
:1034100080911F020EC08C3F19F48091210209C0D7
:103420008D3F19F48091230204C08E3F21F48091D6
:1034300025028093800180918001882319F41092E5
:10344000800105C0843618F084E680938001809165
:1034500079058B3F98F08B3F19F480911F020EC0C5
:103460008C3F19F48091210209C08D3F19F480919D
:10347000230204C08E3F21F48091250280938201B3
:1034800080918201882319F41092820105C084364C
:1034900018F084E68093820180917B058B3F98F041
:1034A0008B3F19F480911F020EC08C3F19F480915C
:1034B000210209C08D3F19F48091230204C08E3F80
:1034C00021F48091250280938301809183018823D8
:1034D00019F41092830104C08F3F11F4809383018B
:1034E000809182058B3F98F08B3F19F480911F02E9
:1034F0000EC08C3F19F48091210209C08D3F19F450
:103500008091230204C08E3F21F480912502809394
:10351000840180918401882319F41092840104C0ED
:103520008F3F11F480938401809183058B3F98F045
:103530008B3F19F480911F020EC08C3F19F48091CB
:10354000210209C08D3F19F48091230204C08E3FEF
:1035500021F48091250280938501809185018B3033
:1035600010F48AE002C08F3F11F4809385018091AE
:1035700084058B3F98F08B3F19F480911F020EC099
:103580008C3F19F48091210209C08D3F19F480917C
:10359000230204C08E3F21F480912502809386018E
:1035A00080918601882319F41092860104C08F3F10
:1035B00011F480938601809189058B3F98F08B3FB1
:1035C00019F480911F020EC08C3F19F480912102E2
:1035D00009C08D3F19F48091230204C08E3F21F46D
:1035E000809125028093880180918801882319F4B5
:1035F0001092880104C08F3F11F48093880180915C
:103600008A058B3F98F08B3F19F480911F020EC002
:103610008C3F19F48091210209C08D3F19F48091EB
:10362000230204C08E3F21F480912502809333024F
:1036300080913302882319F41092330204C08F3F23
:1036400011F48093330280918B058B3F98F08B3F70
:1036500019F480911F020EC08C3F19F48091210251
:1036600009C08D3F19F48091230204C08E3F21F4DC
:10367000809125028093340280913402882319F4CA
:103680001092340204C08F3F11F480933402809171
:103690008C058B3F98F08B3F19F480911F020EC070
:1036A0008C3F19F48091210209C08D3F19F480915B
:1036B000230204C08E3F21F48091250280933502BD
:1036C00080913502882319F41092350204C08F3F8F
:1036D00011F48093350280918D058B3F98F08B3FDC
:1036E00019F480911F020EC08C3F19F480912102C1
:1036F00009C08D3F19F48091230204C08E3F21F44C
:10370000809125028093360280913602882319F435
:103710001092360204C08F3F11F4809336029091CC
:103720008E059B3FB0F09B3F19F480911F0204C0AF
:103730009C3F29F480912102809389010CC09D3F18
:1037400019F480912302F8CF9E3F29F4809125023D
:10375000F3CF9093890180918901882319F4109205
:10376000890104C08F3F11F4809389019B3FB0F021
:103770009B3F19F480911F0204C09C3F29F4809163
:103780002102809389010CC09D3F19F4809123028E
:10379000F8CF9E3F29F480912502F3CF90938901C1
:1037A00080918901882319F41092890104C08F3F08
:1037B00011F4809389019B3FB0F09B3F19F48091F5
:1037C0001F0204C09C3F29F480912102809389014B
:1037D0000CC09D3F19F480912302F8CF9E3F29F43D
:1037E00080912502F3CF90938901809189018823EC
:1037F00019F41092890104C08F3F11F4809389015C
:1038000010918801612F772767FD7095872F972F7B
:103810000E94842B17FF06C020E030E040E853E40C
:103820000E94DF2A27E137EB41ED58E30E94FE2B8F
:1038300060937C0170937D0180937E0190937F0162
:10384000809180058093B40580917F058093AB05BE
:103850001F91089581E080936D0542E040936E05CD
:1038600083E080936F0524E02093700535E030936A
:10387000710586E08093720587E08093730510924E
:1038800075058EE1809376058BEF809378058AE04D
:103890008093790592E39093770590937B0540930D
:1038A0007A0520937C0510927D0580E180937E054A
:1038B0008FE080937F058AEF809380058AE1809373
:1038C000810580E8809382058FEA80938305809349
:1038D00084058AE58093850583E28093860584E1EB
:1038E00080938705109288053093890510928A0588
:1038F00010928B0510928C0510928D0584E68093B2
:103900008E0588E280938F05109293059093900521
:1039100086E98093910530939205ABE9B5E0E8E63E
:10392000F1E08CE001900D928150E1F7089581E083
:1039300080936D0552E050936E0583E080936F0590
:1039400044E04093700535E03093710586E0809344
:10395000720587E08093730528E020937405109228
:1039600075059EE1909376058BEF809378058AE04C
:103970008093790586E48093770590937B05509337
:103980007A0540937C0520937D0580E180937E0538
:103990008FE080937F058AEF809380058AE1809392
:1039A000810580E88093820588E78093830596E906
:1039B000909384058AE58093850583E2809386054C
:1039C00084E18093870510928805309389051092D1
:1039D0008A0510928B0510928C0510928D0584E655
:1039E00080938E0588E280938F051092930582E381
:1039F000809390059093910530939205ABE9B5E0E3
:103A0000E0E7F1E08CE001900D928150E1F708953C
:103A100080912E02882301F510929702109296024F
:103A200010929A021092A60280919801882311F0B8
:103A30008093960280919901882311F080939702D8
:103A400080919A01882311F08093A60280919B01B6
:103A5000882311F080939A0280919602992790937F
:103A6000030580930205809197029927909305059D
:103A7000809304058091A60299279093070580936F
:103A8000060580919A02992790930905809308056D
:103A90001092CF011092D0010E941A140895CF9372
:103AA000DF931092DE011092DD011092E00110927E
:103AB000DF0180E090E0A0E0B0E08093E10190932E
:103AC000E201A093E301B093E4011092D8011092B7
:103AD000D7011092DA011092D9011092DC011092F4
:103AE000DB010E94411885E090E00E94FB0BEC0195
:103AF000CE010E94040C8823D9F30E9441188091C2
:103B0000750580FF10C080910A0190910B01875BC1
:103B1000934038F480910A0190910B018E5E92409F
:103B200010F40E9420108091A9059091AA0597FF9A
:103B300003C0909581959F4F9093D8018093D701B2
:103B40008091A7059091A80597FF03C09095819556
:103B50009F4F9093DA018093D9018091B5059091A0
:103B6000B60597FF03C0909581959F4F9093DC0118
:103B70008093DB018091BB059091BC0597FF03C04A
:103B8000909581959F4F60E170E00E94D32C7093D7
:103B9000E0016093DF018091B2059091B30597FF3A
:103BA00003C0909581959F4F60E170E00E94D32CF7
:103BB0007093DE016093DD016091290570912A0503
:103BC000882777FD8095982F0E94842B6093E101D0
:103BD0007093E2018093E3019093E4011092FB0162
:103BE0001092FC011092FD011092FE011092FF0153
:103BF000109200021092010210920202109203022F
:103C0000109204021092050210920602109207020E
:103C1000109208021092090210920A0210920B02EE
:103C200010920C0210920D0210920E021092AA0530
:103C30001092A9051092A8051092A7051092B6053A
:103C40001092B5058091060190910701A09108019D
:103C5000B091090190932C0580932B051092C5011A
:103C60001092C401109213021092140210921502C5
:103C700010921602809117029091180290931A02E6
:103C80008093190282E390E09093AC018093AB01A2
:103C9000DF91CF9108951F93182F0EC080912E02AF
:103CA000882361F484E690E09093AC018093AB01AB
:103CB0008AEF90E00E94E40C115080F71F91089564
:103CC0002F923F924F925F926F927F928F929F922C
:103CD000AF92BF92CF92DF92EF92FF920F931F931A
:103CE000CF93DF93CDB7DEB724970FB6F894DEBF3E
:103CF0000FBECDBF0E948015299AE0916F05AE2FAF
:103D0000BB27AA0FBB1FAF5BBA4F0D90BC91A02D74
:103D10009D0128583F4F3A83298337FF02C01A82FA
:103D2000198280912702843608F04AC080910101EF
:103D3000882331F484EF91E09093AC018093AB0140
:103D40008091420290914302009731F00197909345
:103D500043028093420204C010922E0210921D0270
:103D6000289A80913D0290913E02815D974028F112
:103D700080918605482F55275A83498381E0809397
:103D80001D02E0916D05FF27EE0FFF1FEF5BFA4F5D
:103D900011821082E0916E05FF27EE0FFF1FEF5B8F
:103DA000FA4F11821082E0917005FF27EE0FFF1F7E
:103DB000EF5BFA4F11821082CEC110922E02CBC15E
:103DC000809127028D3808F4C6C110921D0280919F
:103DD000870522E3829FC0011124909343028093C0
:103DE000420269817A81693271056CF080913D02ED
:103DF00090913E027FEF8F3F970781F1019690935C
:103E00003E0280933D0280913D0290913E02883CAB
:103E1000910520F089819A81889704F510925802C3
:103E20001092590210925A0210925B0210925402A0
:103E300010925502109256021092570210920B02E5
:103E400010920C0210920D0210920E0210920F02AC
:103E5000109210021092110210921202E981FA815E
:103E6000E93CF1050CF4D6C080912E02882309F0BC
:103E700072C1E0917005FF27EE0FFF1FEF5BFA4F55
:103E8000808191818C3491050CF4C1C080914102F4
:103E90008F5F80934102893C08F45DC129980E949C
:103EA0004F1D10922E021092410210923E0210926B
:103EB0003D0280916D05282F3327F901EE0FFF1F7A
:103EC000EF5BFA4F80819181873491059CF4E091FA
:103ED0006E05FF27EE0FFF1FEF5BFA4F0190F08199
:103EE000E02DF7FF03C0F095E195FF4FE734F105B2
:103EF0000CF46CC080916E05682F7727DB01AA0F48
:103F0000BB1FAF5BBA4F8D919C9111978734910580
:103F10003CF0F901EE0FFF1FEF5BFA4F80819181BA
:103F20008D919C918734910564F0F901EE0FFF1F8C
:103F3000EF5BFA4F808191818734910514F042E064
:103F400001C041E0FB01EE0FFF1FEF5BFA4F8081E4
:103F50009181863491055CF4F901EE0FFF1FEF5B50
:103F6000FA4F80819181873491050CF043E0FB0189
:103F7000EE0FFF1FEF5BFA4F808191818A5B9F4FAD
:103F80005CF4F901EE0FFF1FEF5BFA4F8081918126
:103F9000873491050CF044E0660F771F6F5B7A4F12
:103FA000FB01808191818A5B9F4F5CF4220F331F5C
:103FB0002F5B3A4FF90180819181863491050CF491
:103FC00045E0A2E0B0E0042E0E942B2D0E94F801F3
:103FD0004AE36DE675E00E9417020E94F8010E9414
:103FE0004B1E8091750580FFB6C080910A019091AB
:103FF0000B01875B934040F480910A0190910B0183
:104000008E5E924008F0A7C00E942010A4C01092BB
:104010004102A1C049815A81433251050CF09BC035
:1040200080917005482F5527FA01EE0FFF1FEF5BB7
:10403000FA4F80819181855B9F4F0CF06DC080911C
:1040400040028F5F80934002893C08F467C088EC8F
:104050008093400281E090E090933E0280933D0285
:1040600081E080932E021092500210925102109221
:1040700052021092530210920B0210920C021092F4
:104080000D0210920E0210920F0210921002109266
:104090001102109212021092FB011092FC01109278
:1040A000FD011092FE011092030210920402109280
:1040B0000502109206028091E7019091E801A0911B
:1040C000E901B091EA018093FF0190930002A0936F
:1040D0000102B09302028091EF019091F001A09152
:1040E000F101B091F2018093070290930802A0932E
:1040F0000902B0930A0210925802109259021092CB
:104100005A0210925B0210925402109255021092C1
:1041100056021092570202C010924002440F551FDF
:104120004F5B5A4FFA01808191818C3491058CF05C
:1041300080913F028F5F80933F02893C60F0109234
:104140002E0288EC80933F0210923E0210923D02B4
:1041500002C010923F0280916701815080936701F5
:10416000809167018F3F29F080911D02882309F417
:1041700012C10E94DD19E0916D05FF27EE0FFF1FB0
:10418000DF01AF5BBA4F8D919C9160917C057727E1
:10419000E95AFA4F2081318140917D055527FC0174
:1041A000E69FC001E79F900DF69F900D1124F90145
:1041B000E49F9001E59F300DF49F300D1124820F94
:1041C000931F9093290280932802E0916E05FF27A8
:1041D000EE0FFF1FDF01AF5BBA4F8D919C91E95A43
:1041E000FA4F20813181FC01E69FC001E79F900DCD
:1041F000F69F900D1124B901649F9001659F300DC9
:10420000749F300D1124820F931F90932B02809383
:104210002A02E0917005FF27EE0FFF1FEF5BFA4FB8
:1042200080819181909581959F4F90932D028093ED
:104230002C0210918501612F772767FD7095872FDC
:10424000972F0E94842B17FF06C020E030E040E843
:1042500053E40E94DF2A20E030E040E251E40E9473
:10426000DF2A20E030E040E85BE30E94FE2B5B01A8
:104270006C016093B7057093B8058093B90590936E
:10428000BA0510918601612F772767FD7095872FFA
:10429000972F0E94842B17FF06C020E030E040E8F3
:1042A00053E40E94DF2A20E030EE4BE257E40E9404
:1042B000212B6093AE057093AF058093B00590936A
:1042C000B1058091750582FF0CC080E090E0A0E010
:1042D000B0E08093AE059093AF05A093B005B09386
:1042E000B10520E030E040E050E0C601B5010E9499
:1042F0008E2B882364F480E090E0A0E0B0E080930F
:10430000B7059093B805A093B905B093BA0520E01E
:1043100030E040E050E06091AE057091AF058091D3
:10432000B0059091B1050E948E2B882364F480E043
:1043300090E0A0E0B0E08093AE059093AF05A0932D
:10434000B005B093B10580911D02882321F1109230
:104350002D0210922C021092290210922802109223
:104360002B0210922A028DEC9CECACECBDE3809306
:10437000B7059093B805A093B905B093BA058AE044
:1043800097EDA3EABBE38093AE059093AF05A093AE
:10439000B005B093B1058091C6019091C7018D54CD
:1043A000914008F4BCC02091EB013091EC014091A8
:1043B000ED015091EE018091E7019091E801A0910B
:1043C000E901B091EA01B901681B790B70934702CA
:1043D000609346022091F3013091F4014091F50180
:1043E0005091F6018091EF019091F001A091F101BF
:1043F000B091F201281B390B3093450220934402FF
:104400001092C7011092C601673A710534F080918D
:10441000D7019091D801019608C06A557F4F4CF49E
:104420008091D7019091D80101979093D801809302
:10443000D701273A310534F08091D9019091DA0102
:10444000019608C02A553F4F4CF48091D9019091B4
:10445000DA0101979093DA018093D90180910F02DC
:1044600090911002A0911102B0911202873A910529
:10447000A105B1054CF08091DB019091DC01019721
:104480009093DC018093DB0180910F0290911002E8
:10449000A0911102B09112028A559F4FAF4FBF4FAA
:1044A0004CF48091DB019091DC0101969093DC014A
:1044B0008093DB0110927A008091E7019091E801EE
:1044C000A091E901B091EA018093FF01909300026D
:1044D000A0930102B09302028091EF019091F0014C
:1044E000A091F101B091F20180930702909308022C
:1044F000A0930902B0930A028091F7019091F8010C
:10450000A091F901B091FA0180930F0290931002EB
:10451000A0931102B09312028FEE80937A00609103
:10452000E7017091E8018091E9019091EA01A09082
:104530008105BB24CC24DD24E090B205F090B305C6
:10454000A60195010E94082D0027F7FC0095102F69
:104550002E193F09400B510BCA01B90120E130E08F
:1045600040E050E00E94082D39014A0120934C029E
:1045700030934D0240934E0250934F026091EF01F1
:104580007091F0018091F1019091F201E090BB05F2
:10459000F090BC05A60195010E94082D0027F7FCAC
:1045A0000095102F2E193F09400B510BCA01B9017C
:1045B00020E130E040E050E00E94082D20934802C6
:1045C0003093490240934A0250934B02F5EF6F1625
:1045D000F1E07F06F0E08F06F0E09F062CF084EF1C
:1045E00091E0A0E0B0E00DC06CE066166EEF7606DC
:1045F0006FEF86066FEF960664F48CE09EEFAFEFE8
:10460000BFEF80934C0290934D02A0934E02B09363
:104610004F02253F71E0370770E0470770E057070A
:104620002CF084EF91E0A0E0B0E009C02C503E4FA8
:104630004F4F5F4F64F48CE09EEFAFEFBFEF80937E
:10464000480290934902A0934A02B0934B02109201
:104650007A008091FB019091FC01A091FD01B09145
:10466000FE0120914C0230914D0240914E0250913A
:104670004F02821B930BA40BB50B8093FB0190930D
:10468000FC01A093FD01B093FE0180910302909183
:104690000402A0910502B0910602209148023091D7
:1046A000490240914A0250914B02821B930BA40B8A
:1046B000B50B8093030290930402A0930502B0937C
:1046C000060280912C0290912D025C01CC24B7FC53
:1046D000C094DC2CA0925002B0925102C0925202BF
:1046E000D092530297FF03C0909581959F4F849776
:1046F0003CF08091750584FD03C081E08093390210
:1047000060900B0270900C0280900D0290900E024F
:10471000C501B7FE03C0909581959F4F7C0100278E
:10472000F7FC0095102F20917E053327442755274D
:10473000C601B5010E94A02C9B01AC01C801B701C4
:104740000E94A02C20E031E040E050E00E94082DC3
:10475000442737FD4095542F621A730A840A950A3C
:1047600060920B0270920C0280920D0290920E02E7
:1047700080910B0290910C02A0910D02B0910E025B
:1047800081539547A040B04064F080E395E7A0E0F6
:10479000B0E080930B0290930C02A0930D02B093B3
:1047A0000E0280910B0290910C02A0910D02B0912B
:1047B0000E02805D9A48AF4FBF4F64F480ED9AE8D7
:1047C000AFEFBFEF80930B0290930C02A0930D020A
:1047D000B0930E028FEE80937A0080911702909131
:1047E0001802892B09F4A1C08091750583FF9DC033
:1047F0006091E7017091E8018091E9019091EA01EF
:1048000020E032E040E050E00E94082D890137FFAF
:1048100003C0109501951F4F6091EF017091F00159
:104820008091F1019091F20120E032E040E050E00F
:104830000E94082DB90137FF03C0709561957F4F25
:10484000601771070CF4B80169317105A4F4809107
:104850003902882381F08091370290913802892BA8
:1048600051F4809117029091180290931A0280934C
:10487000190210923902209184013327629FC001EE
:10488000639F900D729F900D112460E470E00E9470
:10489000D32CA901461B570B141615060CF03FC06C
:1048A00010927A002091370230913802211531059B
:1048B00061F500910B0210910C0220910D023091D4
:1048C0000E0280911B0290911C02BC01649FC001EA
:1048D000659F900D749F900D112460E270E00E941E
:1048E000D32C882777FD8095982F060F171F281F38
:1048F000391F00930B0210930C0220930D0230938A
:104900000E028FEE80937A0010C08FEE80937A00B3
:1049100021503040309338022093370206C084EF94
:1049200091E090933802809337028091750585FF5E
:1049300011C08091330299279093A3028093A20221
:104940008091340299279093A5028093A4020E943B
:104950002A2908C010928D0210928C0210928F02A8
:1049600010928E028091E9048F5F8093E904809118
:104970003A02815080933A028F3F09F068C081E388
:1049800080933A026091E7017091E8018091E9011A
:104990009091EA01E0908105FF2400271127A801EA
:1049A00097010E94082D3093EB042093EA04609154
:1049B000EF017091F0018091F1019091F201A80155
:1049C00097010E94082D3093ED042093EC04809110
:1049D000B2059091B3059093EF048093EE0480911B
:1049E000BB059091BC059093F1048093F0048091F5
:1049F000B5059091B6059093F3048093F2048091ED
:104A00002F02909130029093F5048093F40460910A
:104A1000130270911402809115029091160220E009
:104A200032E040E050E00E94082D3093F7042093DC
:104A3000F60489819A819093F9048093F804809117
:104A40001702909118029093FB048093FA046091EE
:104A5000E7017091E8018091E9019091EA012090CD
:104A6000AE053090AF054090B0055090B105E09094
:104A7000A905F090AA056090B7057090B8058090E0
:104A8000B9059090BA050E94842BA20191010E9461
:104A9000FE2B5B016C010027F7FC0095102FC8016D
:104AA000B7010E94842BA40193010E94FE2B9B015D
:104AB000AC01C601B5010E94DF2A0E94672B7093EA
:104AC000AA056093A9056091EF017091F0018091B2
:104AD000F1019091F201E090A705F090A8050E94E5
:104AE000842BA20191010E94FE2B5B016C01002727
:104AF000F7FC0095102FC801B7010E94842BA40178
:104B000093010E94FE2B9B01AC01C601B5010E94DE
:104B1000DF2A0E94672B7093A8056093A705609118
:104B2000B5057091B605A090F701B090F801C0905E
:104B3000F901D090FA01882777FD8095982F0E947F
:104B4000842B7B018C0120E030E040E05FE3C40176
:104B5000B3010E94FE2B9B01AC01C801B7010E946A
:104B6000FE2B7B018C01C601B5010E94842BA201A2
:104B700091010E94FE2B9B01AC01C801B7010E946C
:104B8000DF2A0E94672B7093B6056093B50580916C
:104B9000A9059091AA058150984034F080E098E0F2
:104BA0009093AA058093A9058091A9059091AA05E3
:104BB0008050984F34F480E098EF9093AA0580934A
:104BC000A9058091A7059091A8058150984034F0DF
:104BD00080E098E09093A8058093A7058091A705B1
:104BE0009091A8058050984F34F480E098EF90930E
:104BF000A8058093A7058091B5059091B6058150D1
:104C0000984034F080E098E09093B6058093B50525
:104C10008091B5059091B6058050984F34F480E0AE
:104C200098EF9093B6058093B50580917505992707
:104C300080FFCDC02091810181FF0EC02233B0F4EE
:104C400080912F029091300244979093320280938A
:104C5000310210921E020DC080917A05289FC0017A
:104C600011244497909332028093310281E0809323
:104C70001E0280911D02882321F0109232021092B0
:104C8000310220912F023091300240913102509137
:104C90003202421753070CF09AC080911E028823FB
:104CA00009F495C0241B350B809182019927BC0122
:104CB000269FC001279F900D369F900D112460E123
:104CC00070E00E94D32C09811A81061B170B2091DA
:104CD000C4013091C501809180019927FC012E9F6C
:104CE000C0012F9F900D3E9F900D112468E070E051
:104CF0000E94D32C061B170B6091130270911402B3
:104D0000809115029091160220E032E040E050E0E0
:104D10000E94082DCA01B90120918301332744273D
:104D200055270E94A02C20E230E040E050E00E9495
:104D3000082DFFEF2E3C3F0714F42EEC3FEF80913F
:104D40003B0290913C02AC0174E0440F551F7A95F0
:104D5000E1F7481B590B2333310514F022E330E00F
:104D6000021B130BCA01800F911F60E170E00E94CB
:104D7000D32C70933C0260933B0280917605992777
:104D8000681779078CF429813A81281739072CF0A4
:104D900090933C0280933B0207C049815A81509313
:104DA0003C0240933B020DC080913B0290913C023B
:104DB00069817A816817790724F470933C026093C3
:104DC0003B0280913B0290913C029A838983C09080
:104DD000B505D090B6058091500290915102C81A45
:104DE000D90A95E6C916D10424F064E6C62ED12C62
:104DF00009C0ECE9CE16EFEFDE0624F45CE9C52E1F
:104E00005FEFD52E409078015090790160907A0143
:104E100070907B016091A9057091AA0520912802EC
:104E20003091290240918C0250918D02241B350B48
:104E3000621B730B882777FD8095982F0E94842B27
:104E40009B01AC01C301B2010E94FE2B0E94672BA3
:104E500070939902609398028091980290919902C0
:104E60008C01222717FD2095322F809158029091B6
:104E70005902A0915A02B0915B02080F191F2A1F14
:104E80003B1F009358021093590220935A0230930B
:104E90005B021016110612061306ACF4C80117FFC8
:104EA00003C0909581959F4F60E071E00E94D32CE4
:104EB0006F5F7F4F882777FD8095982F061B170B14
:104EC000280B390B14C0C80117FF03C090958195BA
:104ED0009F4F60E071E00E94D32C6F5F7F4F882767
:104EE00077FD8095982F060F171F281F391F0093F5
:104EF00058021093590220935A0230935B0280911A
:104F0000580290915902A0915A02B0915B028138E7
:104F1000FEE39F07F0E0AF07F0E0BF072CF080E86A
:104F20009EE3A0E0B0E009C08058914CAF4FBF4F66
:104F300064F480E891ECAFEFBFEF80935802909358
:104F40005902A0935A02B0935B026091980270914B
:104F5000990280907C0190907D01A0907E01B0909C
:104F60007F01882777FD8095982F0E94842B7B01F5
:104F70008C01609158027091590280915A0290916F
:104F80005B020E94842B9B01AC01C501B4010E940D
:104F9000FE2B9B01AC01C801B7010E94DF2A0E94D1
:104FA000672B9601260F371F49815A81240F351F21
:104FB00022244A30510514F441E0242E37FD02C06A
:104FC000222019F040E050E008C08091B405482F3D
:104FD0005527241735070CF4A9018091AB05E82F5C
:104FE000FF27FC83EB839F01E417F5070CF49A017C
:104FF0002093960229813A81261B370BB9016C0D4B
:105000007D1D77FD02C0222019F080E090E007C0EE
:105010008091B4059927681779070CF4CB012B818F
:105020003C81281739070CF49C012093970260916A
:10503000A7057091A80520912A0230912B0240917A
:105040008E0250918F02241B350B621B730B882735
:1050500077FD8095982F0E94842B9B01AC01C301A2
:10506000B2010E94FE2B0E94672B70939502609301
:10507000940280919402909195028C01222717FD51
:105080002095322F8091540290915502A0915602A2
:10509000B0915702080F191F2A1F3B1F009354029B
:1050A00010935502209356023093570210161106A2
:1050B00012061306ACF4C80117FF03C09095819542
:1050C0009F4F60E071E00E94D32C6F5F7F4F882775
:1050D00077FD8095982F061B170B280B390B14C0F2
:1050E000C80117FF03C0909581959F4F60E071E064
:1050F0000E94D32C6F5F7F4F882777FD8095982F74
:10510000060F171F281F391F0093540210935502D2
:105110002093560230935702809154029091550289
:10512000A0915602B091570281383EE3930730E0D8
:10513000A30730E0B3072CF080E89EE3A0E0B0E0E6
:1051400009C08058914CAF4FBF4F64F480E891EC98
:10515000AFEFBFEF8093540290935502A093560295
:10516000B09357026091940270919502882777FD61
:105170008095982F0E94842B7B018C0160915402B2
:105180007091550280915602909157020E94842B93
:105190009B01AC01C501B4010E94FE2B9B01AC0137
:1051A000C801B7010E94DF2A0E94672B29813A813A
:1051B000260F371F2C193D0937FD02C0222019F098
:1051C00040E050E008C08091B405482F55272417CF
:1051D00035070CF4A9012B813C81241735070CF409
:1051E0009A012093A60289819A81861B970BBC01A4
:1051F0006C197D0977FD02C0222019F020E030E013
:1052000008C08091B405282F3327621773070CF468
:105210009B018B819C81821793070CF4C9018093B9
:105220009A0224960FB6F894DEBF0FBECDBFDF9171
:10523000CF911F910F91FF90EF90DF90CF90BF9093
:10524000AF909F908F907F906F905F904F903F9026
:105250002F9008956F927F928F929F92AF92BF92FC
:10526000CF92DF92EF92FF920F931F9380911F02D4
:1052700090912002181619060CF078C18091220531
:10528000882309F473C180918A0190918B01892B45
:10529000D1F180910A0590910B05A0910C05B09178
:1052A0000D0580935C0290935D02A0935E02B09323
:1052B0005F0280910E0590910F05A0911005B091AD
:1052C00011058093600290936102A0936202B093F3
:1052D00063028091120590911305A0911405B0917D
:1052E00015058093640290936502A0936602B093C3
:1052F000670282E390E09093AC018093AB0110923F
:105300008B0110928A01A090A202B090A30260913A
:1053100064027091650280916602909167026E5FEF
:105320007F4F8F4F9F4F20915C0230915D024091E3
:105330005E0250915F02E2E0EE2EF12C012D112D64
:105340002E253F254027512762277327842795273D
:105350000E94842B0E94462C3B014C016091120557
:105360007091130580911405909115056E5F7F4F24
:105370008F4F9F4F20910A0530910B0540910C05EE
:1053800050910D052E253F25402751276227732771
:10539000842795270E94842B0E94462C9B01AC01F8
:1053A000C401B3010E94DE2A7B018C01CC24B7FC2E
:1053B000C094DC2CC601B5010E94842B9B01AC017A
:1053C000C801B7010E94FE2B20E030E040E251E42A
:1053D0000E94212B0E94672B3B014C0160936A02C3
:1053E00070936B0280936C0290936D022091A202E5
:1053F0003091A3026091600270916102809162021B
:1054000090916302E0900E05F0900F050091100559
:10541000109111056E197F09800B910B442737FD00
:105420004095542F0E94A02C2AE030E040E050E04C
:105430000E94082D59016A0120936E0230936F0279
:1054400040937002509371026091A4027091A50282
:10545000882777FD8095982F2091160530911705A4
:1054600040911805509119050E94A02C2DEF3FEF97
:105470004FEF5FEF0E94082D79018A0120937A0295
:1054800030937B0240937C0250937D026091A40292
:105490007091A502882777FD8095982F20911A0595
:1054A00030911B0540911C0550911D050E94A02CB8
:1054B0002DEF3FEF4FEF5FEF0E94082D20937E020C
:1054C00030937F024093800250938102B3016E0DAE
:1054D0007F1D70938D0260938C022A0D3B1D3093CB
:1054E0008F0220938E0280918C0190918D018617FE
:1054F00097072CF480918C0190918D0111C08091BF
:105500008C0190918D01909581959F4F6817790737
:105510005CF480918C0190918D01909581959F4FC5
:1055200090938D0280938C0280918C0190918D01DB
:10553000821793072CF480918C0190918D0111C0FA
:1055400080918C0190918D01909581959F4F2817A6
:105550003907D4F480918C0190918D0190958195BB
:105560009F4F90938F0280938E020EC085E090E053
:1055700090938B0180938A0110928D0210928C027D
:1055800010928F0210928E021F910F91FF90EF9058
:10559000DF90CF90BF90AF909F908F907F906F9053
:1055A0000895FC014150504030F001900616D1F7AB
:1055B0003197CF0108958827992708955058192EBB
:1055C000EFD001D0D2C0BA176207730784079507DE
:1055D000B1F188F40EF410940B2EBA2FA02D062EE4
:1055E000622F202D072E732F302D082E842F402D53
:1055F000092E952F502DFF275523B9F0591B49F03F
:10560000573E98F0469537952795A795F0405395C6
:10561000C9F776F0BA0F621F731F841F30F48795A5
:1056200077956795B795F040939517FA0F2E0895E3
:10563000BF1BBB27BA0B620B730B840BF6CFDEF6D6
:10564000DBC0AED001D091C0552359F0992369F049
:105650009F575F57951B33F442F4903811F49158DB
:1056600005C09BC091589F3F09F4C6C0BB271124B9
:1056700062177307840730F4660F771F881FBB1FFC
:10568000915098F311D00F920FD00F920DD0A0E847
:105690002617370748071B0609F0A048BA2F602DC8
:1056A0007F918F9100240895A0E80024621773076A
:1056B0008407B10528F0621B730B840BB1090A2A19
:1056C000660F771F881FBB1FA69581F7089597FB6C
:1056D00073D09F3738F0FEE9F91B982F872F762F6C
:1056E0006B2F05C086C09695879577956795F15085
:1056F000D0F73EF490958095709561957F4F8F4FD0
:105700009F4F0895E89403C097FB0EF4F3DFB62F84
:10571000672F782F892F9EE9002427C00ED05EF0D6
:1057200004C00BD026F001C008D019F020F48FEF90
:10573000089580E0089581E0089597FB092E0526DD
:1057400000F8689430D0E89407FC07C0621773072C
:105750008407950721F008F400940794989408951D
:105760009A95BB0F661F771F881F11249923A1F0FC
:105770008823B2F79F3F59F0BB0F48F421F4002073
:1057800011F460FF04C06F5F7F4F8F4F9F4F881FE2
:105790009795879597F908952CC09FEF80EC089511
:1057A000052E092607FA440F551F5F3F79F0AA27F7
:1057B000A51708F051E04795880F991F9F3F31F0DA
:1057C000BB27B91708F091E0879508959F919F91A5
:1057D0001124E3CF97FB880F991F9F3F31F0BB2720
:1057E000B91708F091E0879508959F919F91112432
:1057F000D4CF66277727882799270895D1DF01D04E
:10580000B4CF992339F0552329F09F575F57950F4F
:1058100013F49AF1F1CF91589F3FE1F3629FA12DCC
:105820000F92BB27639FA00DB11DEE27729FA00DA5
:10583000B11DEE1FAF93AA27649FB00DE11D739FAA
:10584000B00DE11DAA1F6627829FB00DE11DA61FA6
:105850005527749FE00DA11D551F839FE00DA11DCD
:10586000561F849FA00D511D852F7A2F6E2F1F90DC
:105870000F9088231AF4939539F48FCF000C111CE4
:10588000BB1F661F771F881F0128089597FD85CFCE
:10589000992309F40895482F9DDFF92FFF57F595B7
:1058A0009F1B9F1BFF9361DFFF92EF92DF92CF92CE
:1058B000BF92AF929F928F926B017C0140584795A7
:1058C0003327222740685FE3B601C70149015A0127
:1058D0000E94212B9401A5010E94DF2A4FEF5FEF68
:1058E00013D09B01AC0182169306A406B50661F79E
:1058F0008F909F90AF90BF90CF90DF90EF90FF90F0
:105900005F9168DF950F31CF65DF992359F0AA27A2
:10591000940FA51F43F032F04FEF50E09417A50706
:1059200014F423CF66CF0EF006C000C09FEF80E8CE
:1059300070E060E008959FE780E870E060E008951F
:10594000629FD001739FF001829FE00DF11D649F63
:10595000E00DF11D929FF00D839FF00D749FF00DEF
:10596000659FF00D9927729FB00DE11DF91F639F90
:10597000B00DE11DF91FBD01CF0111240895AA1B2F
:10598000BB1B51E107C0AA1FBB1FA617B70710F02A
:10599000A61BB70B881F991F5A95A9F7809590955C
:1059A000BC01CD01089597FB092E07260AD077FD8B
:1059B00004D0E5DF06D000201AF4709561957F4F82
:1059C0000895F6F7909581959F4F0895A1E21A2EBC
:1059D000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F93
:1059E000A217B307E407F50720F0A21BB30BE40BE3
:1059F000F50B661F771F881F991F1A9469F760952A
:105A00007095809590959B01AC01BD01CF010895E3
:105A100097FB092E05260ED057FD04D0D7DF0AD0FC
:105A2000001C38F450954095309521953F4F4F4FCD
:105A30005F4F0895F6F790958095709561957F4F2B
:105A40008F4F9F4F0895F999FECFB2BDA1BDF89A2F
:105A5000119600B40895F999FECFB2BDA1BD00BC66
:105A600011960FB6F894FA9AF99A0FBE0895FFCFDF
:105A700001640A016400007D0000FF0301020304C9
:105A800005060708090A48616C6C6F2057656C743D
:105A90000000000000000000000000000000000006
:105AA00000000000000000000000000000000000F6
:105AB00000000000000000000000000000000000E6
:105AC00000000000000000000000000000000000D6
:105AD0000000000000000A014B616D65726100006A
:105AE0004E6F726D616C00000000803F17B7D138B7
:0E5AF00030FB103A403296020A640500230093
:00000001FF
/branches/chris_hallo2/Flight-Ctrl_MEGA644_V0_60.lss
0,0 → 1,9066
 
Flight-Ctrl_MEGA644_V0_60.elf: file format elf32-avr
 
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 0000008e 00800100 00005a70 00005b24 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00005a70 00000000 00000000 000000b4 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000042f 0080018e 0080018e 00005bb2 2**0
ALLOC
3 .eeprom 00000800 00810000 00810000 00005bb2 2**0
CONTENTS, ALLOC, LOAD, DATA
4 .stab 00000378 00000000 00000000 000063b4 2**2
CONTENTS, READONLY, DEBUGGING
5 .stabstr 00000071 00000000 00000000 0000672c 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
 
00000000 <__vectors>:
0: 0c 94 d9 01 jmp 0x3b2 ; 0x3b2 <__ctors_end>
4: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
8: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
10: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
14: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
18: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
1c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
20: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
24: 0c 94 10 0c jmp 0x1820 ; 0x1820 <__vector_9>
28: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
2c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
30: 0c 94 e1 14 jmp 0x29c2 ; 0x29c2 <__vector_12>
34: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
38: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
3c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
40: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
44: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
48: 0c 94 67 0b jmp 0x16ce ; 0x16ce <__vector_18>
4c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
50: 0c 94 43 04 jmp 0x886 ; 0x886 <__vector_20>
54: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
58: 0c 94 92 03 jmp 0x724 ; 0x724 <__vector_22>
5c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
60: 0c 94 fc 0c jmp 0x19f8 ; 0x19f8 <__vector_24>
64: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
68: 0c 94 2e 14 jmp 0x285c ; 0x285c <__vector_26>
6c: 0c 94 f6 01 jmp 0x3ec ; 0x3ec <__bad_interrupt>
 
00000070 <__c.2018>:
70: 0a 0a 0d 00 ....
 
00000074 <__c.2016>:
74: 4e 65 75 74 72 61 6c 00 Neutral.
 
0000007c <__c.2014>:
7c: 48 65 61 64 69 6e 67 48 6f 6c 64 00 HeadingHold.
 
00000088 <__c.2012>:
88: 0a 0d 53 74 65 75 65 72 75 6e 67 3a 20 00 ..Steuerung: .
 
00000096 <__c.2010>:
96: 4f 4b 0a 0d 00 OK...
 
0000009b <__c.2005>:
9b: 0a 0d 41 62 67 6c 65 69 63 68 20 4c 75 66 74 64 ..Abgleich Luftd
ab: 72 75 63 6b 73 65 6e 73 6f 72 2e 2e 00 rucksensor...
 
000000b8 <__c.2003>:
b8: 0a 0d 42 65 6e 75 74 7a 65 20 50 61 72 61 6d 65 ..Benutze Parame
c8: 74 65 72 73 61 74 7a 20 25 64 00 tersatz %d.
 
000000d3 <__c.1995>:
d3: 0a 0d 49 6e 69 74 2e 20 45 45 50 52 4f 4d 3a 20 ..Init. EEPROM:
e3: 47 65 6e 65 72 69 65 72 65 20 44 65 66 61 75 6c Generiere Defaul
f3: 74 2d 50 61 72 61 6d 65 74 65 72 2e 2e 2e 00 t-Parameter....
 
00000102 <__c.1993>:
102: 0a 0d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..==============
112: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
...
 
00000123 <__c.1991>:
123: 0a 0d 46 6c 69 67 68 74 43 6f 6e 74 72 6f 6c 20 ..FlightControl
133: 56 25 64 2e 25 64 20 00 V%d.%d .
 
0000013b <__c.1990>:
13b: 2e 00 ..
 
0000013d <__c.2072>:
13d: 52 61 6e 67 65 3a 25 33 69 2d 25 33 69 00 Range:%3i-%3i.
 
0000014b <__c.2070>:
14b: 53 74 65 6c 6c 75 6e 67 3a 20 25 33 69 00 Stellung: %3i.
 
00000159 <__c.2068>:
159: 53 65 74 70 6f 69 6e 74 20 20 25 33 69 00 Setpoint %3i.
 
00000167 <__c.2066>:
167: 53 65 72 76 6f 20 20 00 Servo .
 
0000016f <__c.2063>:
16f: 50 6f 74 69 34 3a 20 20 25 33 69 00 Poti4: %3i.
 
0000017b <__c.2061>:
17b: 50 6f 74 69 33 3a 20 20 25 33 69 00 Poti3: %3i.
 
00000187 <__c.2059>:
187: 50 6f 74 69 32 3a 20 20 25 33 69 00 Poti2: %3i.
 
00000193 <__c.2057>:
193: 50 6f 74 69 31 3a 20 20 25 33 69 00 Poti1: %3i.
 
0000019f <__c.2054>:
19f: 53 74 61 72 74 3a 20 20 20 20 20 25 35 69 00 Start: %5i.
 
000001ae <__c.2052>:
1ae: 4d 65 73 73 77 65 72 74 3a 20 20 25 35 69 00 Messwert: %5i.
 
000001bd <__c.2050>:
1bd: 52 69 63 68 74 75 6e 67 3a 20 20 25 35 69 00 Richtung: %5i.
 
000001cc <__c.2048>:
1cc: 4b 6f 6d 70 61 73 73 20 20 20 20 20 20 20 00 Kompass .
 
000001db <__c.2045>:
1db: 45 6d 70 66 2e 50 65 67 65 6c 3a 25 35 69 00 Empf.Pegel:%5i.
 
000001ea <__c.2043>:
1ea: 53 70 61 6e 6e 75 6e 67 3a 20 20 25 35 69 00 Spannung: %5i.
 
000001f9 <__c.2040>:
1f9: 48 6f 63 68 20 25 34 69 20 28 25 33 69 29 00 Hoch %4i (%3i).
 
00000208 <__c.2038>:
208: 52 6f 6c 6c 20 25 34 69 20 28 25 33 69 29 00 Roll %4i (%3i).
 
00000217 <__c.2036>:
217: 4e 69 63 6b 20 25 34 69 20 28 25 33 69 29 00 Nick %4i (%3i).
 
00000226 <__c.2034>:
226: 41 43 43 20 2d 20 53 65 6e 73 6f 72 00 ACC - Sensor.
 
00000233 <__c.2031>:
233: 47 69 65 72 20 25 34 69 20 28 25 33 69 29 00 Gier %4i (%3i).
 
00000242 <__c.2029>:
242: 52 6f 6c 6c 20 25 34 69 20 28 25 33 69 29 00 Roll %4i (%3i).
 
00000251 <__c.2027>:
251: 4e 69 63 6b 20 25 34 69 20 28 25 33 69 29 00 Nick %4i (%3i).
 
00000260 <__c.2025>:
260: 47 79 72 6f 20 2d 20 53 65 6e 73 6f 72 00 Gyro - Sensor.
 
0000026e <__c.2022>:
26e: 50 33 3a 25 34 69 20 20 4b 61 6e e4 6c 65 20 00 P3:%4i Kan.le .
 
0000027e <__c.2020>:
27e: 50 31 3a 25 34 69 20 20 50 32 3a 25 34 69 20 00 P1:%4i P2:%4i .
 
0000028e <__c.2018>:
28e: 47 73 3a 25 34 69 20 20 47 69 3a 25 34 69 20 00 Gs:%4i Gi:%4i .
 
0000029e <__c.2016>:
29e: 4e 69 3a 25 34 69 20 20 52 6f 3a 25 34 69 20 00 Ni:%4i Ro:%4i .
 
000002ae <__c.2013>:
2ae: 4b 37 3a 25 34 69 20 20 4b 61 6e e4 6c 65 20 00 K7:%4i Kan.le .
 
000002be <__c.2011>:
2be: 4b 35 3a 25 34 69 20 20 4b 36 3a 25 34 69 20 00 K5:%4i K6:%4i .
 
000002ce <__c.2009>:
2ce: 4b 33 3a 25 34 69 20 20 4b 34 3a 25 34 69 20 00 K3:%4i K4:%4i .
 
000002de <__c.2007>:
2de: 4b 31 3a 25 34 69 20 20 4b 32 3a 25 34 69 20 00 K1:%4i K2:%4i .
 
000002ee <__c.2004>:
2ee: 4b 6f 6d 70 61 73 73 3a 20 20 20 25 35 69 00 Kompass: %5i.
 
000002fd <__c.2002>:
2fd: 52 6f 6c 6c 3a 20 20 20 20 20 20 25 35 69 00 Roll: %5i.
 
0000030c <__c.2000>:
30c: 4e 69 63 6b 3a 20 20 20 20 20 20 25 35 69 00 Nick: %5i.
 
0000031b <__c.1998>:
31b: 61 6b 74 2e 20 4c 61 67 65 00 akt. Lage.
 
00000325 <__c.1995>:
325: 48 f6 68 65 6e 72 65 67 65 6c 75 6e 67 00 H.henregelung.
 
00000333 <__c.1993>:
333: 4b 65 69 6e 65 20 00 Keine .
 
0000033a <__c.1991>:
33a: 4f 66 66 20 20 20 20 20 20 3a 20 25 35 69 00 Off : %5i.
 
00000349 <__c.1989>:
349: 4c 75 66 74 64 72 75 63 6b 3a 20 25 35 69 00 Luftdruck: %5i.
 
00000358 <__c.1987>:
358: 53 6f 6c 6c 48 6f 65 68 65 3a 20 25 35 69 00 SollHoehe: %5i.
 
00000367 <__c.1985>:
367: 48 6f 65 68 65 3a 20 20 20 20 20 25 35 69 00 Hoehe: %5i.
 
00000376 <__c.1981>:
376: 28 63 29 20 48 6f 6c 67 65 72 20 42 75 73 73 00 (c) Holger Buss.
 
00000386 <__c.1979>:
386: 53 65 74 74 69 6e 67 3a 20 25 64 20 00 Setting: %d .
 
00000393 <__c.1977>:
393: 56 25 64 2e 25 64 00 V%d.%d.
 
0000039a <__c.1975>:
39a: 2b 2b 20 4d 69 6b 72 6f 4b 6f 70 74 65 72 20 2b ++ MikroKopter +
3aa: 2b 00 +.
 
000003ac <__c.1972>:
3ac: 5b 25 69 5d 00 00 [%i]..
 
000003b2 <__ctors_end>:
3b2: 11 24 eor r1, r1
3b4: 1f be out 0x3f, r1 ; 63
3b6: cf ef ldi r28, 0xFF ; 255
3b8: d0 e1 ldi r29, 0x10 ; 16
3ba: de bf out 0x3e, r29 ; 62
3bc: cd bf out 0x3d, r28 ; 61
 
000003be <__do_copy_data>:
3be: 11 e0 ldi r17, 0x01 ; 1
3c0: a0 e0 ldi r26, 0x00 ; 0
3c2: b1 e0 ldi r27, 0x01 ; 1
3c4: e0 e7 ldi r30, 0x70 ; 112
3c6: fa e5 ldi r31, 0x5A ; 90
3c8: 02 c0 rjmp .+4 ; 0x3ce <.do_copy_data_start>
 
000003ca <.do_copy_data_loop>:
3ca: 05 90 lpm r0, Z+
3cc: 0d 92 st X+, r0
 
000003ce <.do_copy_data_start>:
3ce: ae 38 cpi r26, 0x8E ; 142
3d0: b1 07 cpc r27, r17
3d2: d9 f7 brne .-10 ; 0x3ca <.do_copy_data_loop>
 
000003d4 <__do_clear_bss>:
3d4: 15 e0 ldi r17, 0x05 ; 5
3d6: ae e8 ldi r26, 0x8E ; 142
3d8: b1 e0 ldi r27, 0x01 ; 1
3da: 01 c0 rjmp .+2 ; 0x3de <.do_clear_bss_start>
 
000003dc <.do_clear_bss_loop>:
3dc: 1d 92 st X+, r1
 
000003de <.do_clear_bss_start>:
3de: ad 3b cpi r26, 0xBD ; 189
3e0: b1 07 cpc r27, r17
3e2: e1 f7 brne .-8 ; 0x3dc <.do_clear_bss_loop>
3e4: 0e 94 2d 02 call 0x45a ; 0x45a <main>
3e8: 0c 94 37 2d jmp 0x5a6e ; 0x5a6e <_exit>
 
000003ec <__bad_interrupt>:
3ec: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
 
000003f0 <GetActiveParamSetNumber>:
3f0: a2 e0 ldi r26, 0x02 ; 2
3f2: b0 e0 ldi r27, 0x00 ; 0
3f4: 0e 94 23 2d call 0x5a46 ; 0x5a46 <__eeprom_read_byte_1F2021>
3f8: 80 2d mov r24, r0
3fa: 99 27 eor r25, r25
3fc: 08 95 ret
 
000003fe <WriteParameterSet>:
3fe: fb 01 movw r30, r22
400: 28 2f mov r18, r24
402: 86 30 cpi r24, 0x06 ; 6
404: 08 f0 brcs .+2 ; 0x408 <WriteParameterSet+0xa>
406: 25 e0 ldi r18, 0x05 ; 5
408: 84 2f mov r24, r20
40a: 99 27 eor r25, r25
40c: 42 9f mul r20, r18
40e: d0 01 movw r26, r0
410: 11 24 eor r1, r1
412: ac 59 subi r26, 0x9C ; 156
414: bf 4f sbci r27, 0xFF ; 255
 
00000416 <.26_start>:
416: 01 97 sbiw r24, 0x01 ; 1
418: 24 f0 brlt .+8 ; 0x422 <.26_finished>
41a: 01 90 ld r0, Z+
41c: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eeprom_write_byte_1F2021>
420: fa cf rjmp .-12 ; 0x416 <.26_start>
 
00000422 <.26_finished>:
422: a2 e0 ldi r26, 0x02 ; 2
424: b0 e0 ldi r27, 0x00 ; 0
426: 02 2e mov r0, r18
428: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eeprom_write_byte_1F2021>
42c: 08 95 ret
 
0000042e <ReadParameterSet>:
42e: cf 93 push r28
430: df 93 push r29
432: fb 01 movw r30, r22
434: c4 2f mov r28, r20
436: dd 27 eor r29, r29
438: 86 30 cpi r24, 0x06 ; 6
43a: 08 f0 brcs .+2 ; 0x43e <ReadParameterSet+0x10>
43c: 85 e0 ldi r24, 0x05 ; 5
43e: 48 9f mul r20, r24
440: d0 01 movw r26, r0
442: 11 24 eor r1, r1
444: ac 59 subi r26, 0x9C ; 156
446: bf 4f sbci r27, 0xFF ; 255
 
00000448 <.44_start>:
448: 21 97 sbiw r28, 0x01 ; 1
44a: 24 f0 brlt .+8 ; 0x454 <.44_finished>
44c: 0e 94 23 2d call 0x5a46 ; 0x5a46 <__eeprom_read_byte_1F2021>
450: 01 92 st Z+, r0
452: fa cf rjmp .-12 ; 0x448 <.44_start>
 
00000454 <.44_finished>:
454: df 91 pop r29
456: cf 91 pop r28
458: 08 95 ret
 
0000045a <main>:
45a: 0f 93 push r16
45c: 1f 93 push r17
45e: cf 93 push r28
460: df 93 push r29
462: 91 e0 ldi r25, 0x01 ; 1
464: 97 b9 out 0x07, r25 ; 7
466: 8f ef ldi r24, 0xFF ; 255
468: 88 b9 out 0x08, r24 ; 8
46a: 8b e1 ldi r24, 0x1B ; 27
46c: 84 b9 out 0x04, r24 ; 4
46e: 95 b9 out 0x05, r25 ; 5
470: 8e e3 ldi r24, 0x3E ; 62
472: 8a b9 out 0x0a, r24 ; 10
474: 57 9a sbi 0x0a, 7 ; 10
476: 87 ef ldi r24, 0xF7 ; 247
478: 8b b9 out 0x0b, r24 ; 11
47a: 84 b7 in r24, 0x34 ; 52
47c: 87 7f andi r24, 0xF7 ; 247
47e: 84 bf out 0x34, r24 ; 52
480: 80 91 60 00 lds r24, 0x0060
484: 88 61 ori r24, 0x18 ; 24
486: 80 93 60 00 sts 0x0060, r24
48a: 10 92 60 00 sts 0x0060, r1
48e: 80 ed ldi r24, 0xD0 ; 208
490: 97 e0 ldi r25, 0x07 ; 7
492: 90 93 ac 01 sts 0x01AC, r25
496: 80 93 ab 01 sts 0x01AB, r24
49a: 10 92 2d 02 sts 0x022D, r1
49e: 10 92 2c 02 sts 0x022C, r1
4a2: 10 92 46 05 sts 0x0546, r1
4a6: 10 92 45 05 sts 0x0545, r1
4aa: 10 92 2b 02 sts 0x022B, r1
4ae: 10 92 2a 02 sts 0x022A, r1
4b2: 10 92 29 02 sts 0x0229, r1
4b6: 10 92 28 02 sts 0x0228, r1
4ba: 28 98 cbi 0x05, 0 ; 5
4bc: 0e 94 bd 0c call 0x197a ; 0x197a <Timer_Init>
4c0: 0e 94 2d 07 call 0xe5a ; 0xe5a <UART_Init>
4c4: 0e 94 cc 14 call 0x2998 ; 0x2998 <rc_sum_init>
4c8: 0e 94 f6 0c call 0x19ec ; 0x19ec <ADC_Init>
4cc: 0e 94 14 14 call 0x2828 ; 0x2828 <i2c_init>
4d0: 78 94 sei
4d2: 10 92 00 04 sts 0x0400, r1
4d6: 8c e3 ldi r24, 0x3C ; 60
4d8: 80 93 01 04 sts 0x0401, r24
4dc: 84 e0 ldi r24, 0x04 ; 4
4de: 80 93 02 04 sts 0x0402, r24
4e2: 8c e3 ldi r24, 0x3C ; 60
4e4: 90 e0 ldi r25, 0x00 ; 0
4e6: 9f 93 push r25
4e8: 8f 93 push r24
4ea: 1f 92 push r1
4ec: 1f 92 push r1
4ee: 83 e2 ldi r24, 0x23 ; 35
4f0: 91 e0 ldi r25, 0x01 ; 1
4f2: 9f 93 push r25
4f4: 8f 93 push r24
4f6: 1f 92 push r1
4f8: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
4fc: 82 e0 ldi r24, 0x02 ; 2
4fe: 91 e0 ldi r25, 0x01 ; 1
500: 9f 93 push r25
502: 8f 93 push r24
504: 1f 92 push r1
506: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
50a: 29 9a sbi 0x05, 1 ; 5
50c: a1 e0 ldi r26, 0x01 ; 1
50e: b0 e0 ldi r27, 0x00 ; 0
510: 0e 94 23 2d call 0x5a46 ; 0x5a46 <__eeprom_read_byte_1F2021>
514: 80 2d mov r24, r0
516: 2d b7 in r18, 0x3d ; 61
518: 3e b7 in r19, 0x3e ; 62
51a: 26 5f subi r18, 0xF6 ; 246
51c: 3f 4f sbci r19, 0xFF ; 255
51e: 0f b6 in r0, 0x3f ; 63
520: f8 94 cli
522: 3e bf out 0x3e, r19 ; 62
524: 0f be out 0x3f, r0 ; 63
526: 2d bf out 0x3d, r18 ; 61
528: 8b 33 cpi r24, 0x3B ; 59
52a: a9 f1 breq .+106 ; 0x596 <main+0x13c>
52c: 83 ed ldi r24, 0xD3 ; 211
52e: 90 e0 ldi r25, 0x00 ; 0
530: 9f 93 push r25
532: 8f 93 push r24
534: 1f 92 push r1
536: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
53a: 0e 94 97 1c call 0x392e ; 0x392e <DefaultKonstanten1>
53e: 4a e3 ldi r20, 0x3A ; 58
540: 6d e6 ldi r22, 0x6D ; 109
542: 75 e0 ldi r23, 0x05 ; 5
544: 80 e0 ldi r24, 0x00 ; 0
546: 0e 94 ff 01 call 0x3fe ; 0x3fe <WriteParameterSet>
54a: 01 e0 ldi r16, 0x01 ; 1
54c: 0f 90 pop r0
54e: 0f 90 pop r0
550: 0f 90 pop r0
552: 02 30 cpi r16, 0x02 ; 2
554: 49 f4 brne .+18 ; 0x568 <main+0x10e>
556: 0e 94 2a 1c call 0x3854 ; 0x3854 <DefaultKonstanten2>
55a: 4a e3 ldi r20, 0x3A ; 58
55c: 6d e6 ldi r22, 0x6D ; 109
55e: 75 e0 ldi r23, 0x05 ; 5
560: 82 e0 ldi r24, 0x02 ; 2
562: 0e 94 ff 01 call 0x3fe ; 0x3fe <WriteParameterSet>
566: 03 e0 ldi r16, 0x03 ; 3
568: 4a e3 ldi r20, 0x3A ; 58
56a: 6d e6 ldi r22, 0x6D ; 109
56c: 75 e0 ldi r23, 0x05 ; 5
56e: 80 2f mov r24, r16
570: 0e 94 ff 01 call 0x3fe ; 0x3fe <WriteParameterSet>
574: 0f 5f subi r16, 0xFF ; 255
576: 06 30 cpi r16, 0x06 ; 6
578: 60 f3 brcs .-40 ; 0x552 <main+0xf8>
57a: 81 e0 ldi r24, 0x01 ; 1
57c: 22 e0 ldi r18, 0x02 ; 2
57e: 30 e0 ldi r19, 0x00 ; 0
580: d9 01 movw r26, r18
582: 08 2e mov r0, r24
584: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eeprom_write_byte_1F2021>
588: 8b e3 ldi r24, 0x3B ; 59
58a: 21 50 subi r18, 0x01 ; 1
58c: 30 40 sbci r19, 0x00 ; 0
58e: d9 01 movw r26, r18
590: 08 2e mov r0, r24
592: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eeprom_write_byte_1F2021>
596: 02 e0 ldi r16, 0x02 ; 2
598: 10 e0 ldi r17, 0x00 ; 0
59a: d8 01 movw r26, r16
59c: 0e 94 23 2d call 0x5a46 ; 0x5a46 <__eeprom_read_byte_1F2021>
5a0: 80 2d mov r24, r0
5a2: 4a e3 ldi r20, 0x3A ; 58
5a4: 6d e6 ldi r22, 0x6D ; 109
5a6: 75 e0 ldi r23, 0x05 ; 5
5a8: 0e 94 17 02 call 0x42e ; 0x42e <ReadParameterSet>
5ac: d8 01 movw r26, r16
5ae: 0e 94 23 2d call 0x5a46 ; 0x5a46 <__eeprom_read_byte_1F2021>
5b2: 80 2d mov r24, r0
5b4: 99 27 eor r25, r25
5b6: 9f 93 push r25
5b8: 8f 93 push r24
5ba: 88 eb ldi r24, 0xB8 ; 184
5bc: 90 e0 ldi r25, 0x00 ; 0
5be: 9f 93 push r25
5c0: 8f 93 push r24
5c2: 1f 92 push r1
5c4: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
5c8: 80 91 75 05 lds r24, 0x0575
5cc: 0f 90 pop r0
5ce: 0f 90 pop r0
5d0: 0f 90 pop r0
5d2: 0f 90 pop r0
5d4: 0f 90 pop r0
5d6: 80 ff sbrs r24, 0
5d8: 20 c0 rjmp .+64 ; 0x61a <main+0x1c0>
5da: 8b e9 ldi r24, 0x9B ; 155
5dc: 90 e0 ldi r25, 0x00 ; 0
5de: 9f 93 push r25
5e0: 8f 93 push r24
5e2: 1f 92 push r1
5e4: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
5e8: 84 ec ldi r24, 0xC4 ; 196
5ea: 99 e0 ldi r25, 0x09 ; 9
5ec: 0e 94 fb 0b call 0x17f6 ; 0x17f6 <SetDelay>
5f0: ec 01 movw r28, r24
5f2: 0e 94 20 10 call 0x2040 ; 0x2040 <SucheLuftruckOffset>
5f6: 0f 90 pop r0
5f8: 0f 90 pop r0
5fa: 0f 90 pop r0
5fc: ce 01 movw r24, r28
5fe: 0e 94 04 0c call 0x1808 ; 0x1808 <CheckDelay>
602: 88 23 and r24, r24
604: d9 f3 breq .-10 ; 0x5fc <main+0x1a2>
606: 86 e9 ldi r24, 0x96 ; 150
608: 90 e0 ldi r25, 0x00 ; 0
60a: 9f 93 push r25
60c: 8f 93 push r24
60e: 1f 92 push r1
610: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
614: 0f 90 pop r0
616: 0f 90 pop r0
618: 0f 90 pop r0
61a: 0e 94 4f 1d call 0x3a9e ; 0x3a9e <SetNeutral>
61e: 28 98 cbi 0x05, 0 ; 5
620: 80 ed ldi r24, 0xD0 ; 208
622: 97 e0 ldi r25, 0x07 ; 7
624: 90 93 ac 01 sts 0x01AC, r25
628: 80 93 ab 01 sts 0x01AB, r24
62c: 88 ee ldi r24, 0xE8 ; 232
62e: 93 e0 ldi r25, 0x03 ; 3
630: 90 93 fb 03 sts 0x03FB, r25
634: 80 93 fa 03 sts 0x03FA, r24
638: 85 e5 ldi r24, 0x55 ; 85
63a: 80 93 f5 03 sts 0x03F5, r24
63e: 88 e8 ldi r24, 0x88 ; 136
640: 90 e0 ldi r25, 0x00 ; 0
642: 9f 93 push r25
644: 8f 93 push r24
646: 1f 92 push r1
648: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
64c: 80 91 75 05 lds r24, 0x0575
650: 0f 90 pop r0
652: 0f 90 pop r0
654: 0f 90 pop r0
656: 82 ff sbrs r24, 2
658: 03 c0 rjmp .+6 ; 0x660 <main+0x206>
65a: 8c e7 ldi r24, 0x7C ; 124
65c: 90 e0 ldi r25, 0x00 ; 0
65e: 02 c0 rjmp .+4 ; 0x664 <main+0x20a>
660: 84 e7 ldi r24, 0x74 ; 116
662: 90 e0 ldi r25, 0x00 ; 0
664: 9f 93 push r25
666: 8f 93 push r24
668: 1f 92 push r1
66a: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
66e: 0f 90 pop r0
670: 0f 90 pop r0
672: 0f 90 pop r0
674: 80 e7 ldi r24, 0x70 ; 112
676: 90 e0 ldi r25, 0x00 ; 0
678: 9f 93 push r25
67a: 8f 93 push r24
67c: 1f 92 push r1
67e: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
682: 0e 94 47 10 call 0x208e ; 0x208e <LcdClear>
686: 0f 90 pop r0
688: 0f 90 pop r0
68a: 0f 90 pop r0
68c: 80 91 a8 01 lds r24, 0x01A8
690: 88 23 and r24, r24
692: 79 f1 breq .+94 ; 0x6f2 <main+0x298>
694: 10 92 a8 01 sts 0x01A8, r1
698: 0e 94 60 1e call 0x3cc0 ; 0x3cc0 <MotorRegler>
69c: 0e 94 08 1d call 0x3a10 ; 0x3a10 <SendMotorData>
6a0: 28 98 cbi 0x05, 0 ; 5
6a2: 80 91 01 01 lds r24, 0x0101
6a6: 88 23 and r24, r24
6a8: 19 f0 breq .+6 ; 0x6b0 <main+0x256>
6aa: 81 50 subi r24, 0x01 ; 1
6ac: 80 93 01 01 sts 0x0101, r24
6b0: 80 91 27 02 lds r24, 0x0227
6b4: 88 23 and r24, r24
6b6: 29 f0 breq .+10 ; 0x6c2 <main+0x268>
6b8: 80 91 27 02 lds r24, 0x0227
6bc: 81 50 subi r24, 0x01 ; 1
6be: 80 93 27 02 sts 0x0227, r24
6c2: 20 91 04 01 lds r18, 0x0104
6c6: 30 91 05 01 lds r19, 0x0105
6ca: 80 91 85 05 lds r24, 0x0585
6ce: 99 27 eor r25, r25
6d0: 28 17 cp r18, r24
6d2: 39 07 cpc r19, r25
6d4: 34 f4 brge .+12 ; 0x6e2 <main+0x288>
6d6: 80 ed ldi r24, 0xD0 ; 208
6d8: 97 e0 ldi r25, 0x07 ; 7
6da: 90 93 ac 01 sts 0x01AC, r25
6de: 80 93 ab 01 sts 0x01AB, r24
6e2: 80 91 d6 01 lds r24, 0x01D6
6e6: 88 23 and r24, r24
6e8: 19 f4 brne .+6 ; 0x6f0 <main+0x296>
6ea: 0e 94 14 14 call 0x2828 ; 0x2828 <i2c_init>
6ee: 01 c0 rjmp .+2 ; 0x6f2 <main+0x298>
6f0: 28 98 cbi 0x05, 0 ; 5
6f2: 0e 94 4a 07 call 0xe94 ; 0xe94 <DatenUebertragung>
6f6: 0e 94 b8 07 call 0xf70 ; 0xf70 <BearbeiteRxDaten>
6fa: 80 e0 ldi r24, 0x00 ; 0
6fc: 90 e0 ldi r25, 0x00 ; 0
6fe: 0e 94 04 0c call 0x1808 ; 0x1808 <CheckDelay>
702: 88 23 and r24, r24
704: 19 f2 breq .-122 ; 0x68c <main+0x232>
706: 80 91 2e 02 lds r24, 0x022E
70a: 88 23 and r24, r24
70c: 29 f0 breq .+10 ; 0x718 <main+0x2be>
70e: 88 b1 in r24, 0x08 ; 8
710: 90 e1 ldi r25, 0x10 ; 16
712: 89 27 eor r24, r25
714: 88 b9 out 0x08, r24 ; 8
716: 01 c0 rjmp .+2 ; 0x71a <main+0x2c0>
718: 44 98 cbi 0x08, 4 ; 8
71a: 84 ef ldi r24, 0xF4 ; 244
71c: 91 e0 ldi r25, 0x01 ; 1
71e: 0e 94 fb 0b call 0x17f6 ; 0x17f6 <SetDelay>
722: b4 cf rjmp .-152 ; 0x68c <main+0x232>
 
00000724 <__vector_22>:
724: 1f 92 push r1
726: 0f 92 push r0
728: 0f b6 in r0, 0x3f ; 63
72a: 0f 92 push r0
72c: 11 24 eor r1, r1
72e: 8f 93 push r24
730: 9f 93 push r25
732: ef 93 push r30
734: ff 93 push r31
736: 80 91 00 01 lds r24, 0x0100
73a: 88 23 and r24, r24
73c: e1 f4 brne .+56 ; 0x776 <__vector_22+0x52>
73e: 80 91 a3 01 lds r24, 0x01A3
742: 90 91 a4 01 lds r25, 0x01A4
746: 01 96 adiw r24, 0x01 ; 1
748: 90 93 a4 01 sts 0x01A4, r25
74c: 80 93 a3 01 sts 0x01A3, r24
750: fc 01 movw r30, r24
752: eb 54 subi r30, 0x4B ; 75
754: fd 4f sbci r31, 0xFD ; 253
756: e0 81 ld r30, Z
758: ed 30 cpi r30, 0x0D ; 13
75a: 19 f0 breq .+6 ; 0x762 <__vector_22+0x3e>
75c: 86 39 cpi r24, 0x96 ; 150
75e: 91 05 cpc r25, r1
760: 39 f4 brne .+14 ; 0x770 <__vector_22+0x4c>
762: 10 92 a4 01 sts 0x01A4, r1
766: 10 92 a3 01 sts 0x01A3, r1
76a: 81 e0 ldi r24, 0x01 ; 1
76c: 80 93 00 01 sts 0x0100, r24
770: e0 93 c6 00 sts 0x00C6, r30
774: 04 c0 rjmp .+8 ; 0x77e <__vector_22+0x5a>
776: 10 92 a4 01 sts 0x01A4, r1
77a: 10 92 a3 01 sts 0x01A3, r1
77e: ff 91 pop r31
780: ef 91 pop r30
782: 9f 91 pop r25
784: 8f 91 pop r24
786: 0f 90 pop r0
788: 0f be out 0x3f, r0 ; 63
78a: 0f 90 pop r0
78c: 1f 90 pop r1
78e: 18 95 reti
 
00000790 <GPSscanData>:
790: 80 91 d7 04 lds r24, 0x04D7
794: 81 30 cpi r24, 0x01 ; 1
796: 91 f5 brne .+100 ; 0x7fc <GPSscanData+0x6c>
798: 80 91 c7 04 lds r24, 0x04C7
79c: 90 91 c8 04 lds r25, 0x04C8
7a0: a0 91 c9 04 lds r26, 0x04C9
7a4: b0 91 ca 04 lds r27, 0x04CA
7a8: 80 93 0a 05 sts 0x050A, r24
7ac: 90 93 0b 05 sts 0x050B, r25
7b0: a0 93 0c 05 sts 0x050C, r26
7b4: b0 93 0d 05 sts 0x050D, r27
7b8: 80 91 cb 04 lds r24, 0x04CB
7bc: 90 91 cc 04 lds r25, 0x04CC
7c0: a0 91 cd 04 lds r26, 0x04CD
7c4: b0 91 ce 04 lds r27, 0x04CE
7c8: 80 93 0e 05 sts 0x050E, r24
7cc: 90 93 0f 05 sts 0x050F, r25
7d0: a0 93 10 05 sts 0x0510, r26
7d4: b0 93 11 05 sts 0x0511, r27
7d8: 80 91 cf 04 lds r24, 0x04CF
7dc: 90 91 d0 04 lds r25, 0x04D0
7e0: a0 91 d1 04 lds r26, 0x04D1
7e4: b0 91 d2 04 lds r27, 0x04D2
7e8: 80 93 12 05 sts 0x0512, r24
7ec: 90 93 13 05 sts 0x0513, r25
7f0: a0 93 14 05 sts 0x0514, r26
7f4: b0 93 15 05 sts 0x0515, r27
7f8: 10 92 d7 04 sts 0x04D7, r1
7fc: 80 91 f4 03 lds r24, 0x03F4
800: 81 30 cpi r24, 0x01 ; 1
802: 31 f4 brne .+12 ; 0x810 <GPSscanData+0x80>
804: 80 91 e8 03 lds r24, 0x03E8
808: 80 93 22 05 sts 0x0522, r24
80c: 10 92 f4 03 sts 0x03F4, r1
810: 80 91 24 04 lds r24, 0x0424
814: 81 30 cpi r24, 0x01 ; 1
816: 91 f5 brne .+100 ; 0x87c <GPSscanData+0xec>
818: 80 91 14 04 lds r24, 0x0414
81c: 90 91 15 04 lds r25, 0x0415
820: a0 91 16 04 lds r26, 0x0416
824: b0 91 17 04 lds r27, 0x0417
828: 80 93 16 05 sts 0x0516, r24
82c: 90 93 17 05 sts 0x0517, r25
830: a0 93 18 05 sts 0x0518, r26
834: b0 93 19 05 sts 0x0519, r27
838: 80 91 18 04 lds r24, 0x0418
83c: 90 91 19 04 lds r25, 0x0419
840: a0 91 1a 04 lds r26, 0x041A
844: b0 91 1b 04 lds r27, 0x041B
848: 80 93 1a 05 sts 0x051A, r24
84c: 90 93 1b 05 sts 0x051B, r25
850: a0 93 1c 05 sts 0x051C, r26
854: b0 93 1d 05 sts 0x051D, r27
858: 80 91 1c 04 lds r24, 0x041C
85c: 90 91 1d 04 lds r25, 0x041D
860: a0 91 1e 04 lds r26, 0x041E
864: b0 91 1f 04 lds r27, 0x041F
868: 80 93 1e 05 sts 0x051E, r24
86c: 90 93 1f 05 sts 0x051F, r25
870: a0 93 20 05 sts 0x0520, r26
874: b0 93 21 05 sts 0x0521, r27
878: 10 92 24 04 sts 0x0424, r1
87c: 80 91 22 05 lds r24, 0x0522
880: 81 11 cpse r24, r1
882: 28 9a sbi 0x05, 0 ; 5
884: 08 95 ret
 
00000886 <__vector_20>:
886: 1f 92 push r1
888: 0f 92 push r0
88a: 0f b6 in r0, 0x3f ; 63
88c: 0f 92 push r0
88e: 11 24 eor r1, r1
890: 2f 93 push r18
892: 3f 93 push r19
894: 4f 93 push r20
896: 5f 93 push r21
898: 6f 93 push r22
89a: 7f 93 push r23
89c: 8f 93 push r24
89e: 9f 93 push r25
8a0: af 93 push r26
8a2: bf 93 push r27
8a4: cf 93 push r28
8a6: df 93 push r29
8a8: ef 93 push r30
8aa: ff 93 push r31
8ac: 80 91 c6 00 lds r24, 0x00C6
8b0: 80 93 92 01 sts 0x0192, r24
8b4: 80 91 c0 00 lds r24, 0x00C0
8b8: 40 91 92 01 lds r20, 0x0192
8bc: 88 71 andi r24, 0x18 ; 24
8be: 09 f0 breq .+2 ; 0x8c2 <__vector_20+0x3c>
8c0: 05 c1 rjmp .+522 ; 0xacc <__vector_20+0x246>
8c2: 80 91 a5 01 lds r24, 0x01A5
8c6: 84 30 cpi r24, 0x04 ; 4
8c8: 09 f4 brne .+2 ; 0x8cc <__vector_20+0x46>
8ca: 8a c0 rjmp .+276 ; 0x9e0 <__vector_20+0x15a>
8cc: 85 30 cpi r24, 0x05 ; 5
8ce: 50 f4 brcc .+20 ; 0x8e4 <__vector_20+0x5e>
8d0: 81 30 cpi r24, 0x01 ; 1
8d2: d1 f0 breq .+52 ; 0x908 <__vector_20+0x82>
8d4: 81 30 cpi r24, 0x01 ; 1
8d6: 98 f0 brcs .+38 ; 0x8fe <__vector_20+0x78>
8d8: 82 30 cpi r24, 0x02 ; 2
8da: 01 f1 breq .+64 ; 0x91c <__vector_20+0x96>
8dc: 83 30 cpi r24, 0x03 ; 3
8de: 09 f0 breq .+2 ; 0x8e2 <__vector_20+0x5c>
8e0: f2 c0 rjmp .+484 ; 0xac6 <__vector_20+0x240>
8e2: 21 c0 rjmp .+66 ; 0x926 <__vector_20+0xa0>
8e4: 86 30 cpi r24, 0x06 ; 6
8e6: 09 f4 brne .+2 ; 0x8ea <__vector_20+0x64>
8e8: ab c0 rjmp .+342 ; 0xa40 <__vector_20+0x1ba>
8ea: 86 30 cpi r24, 0x06 ; 6
8ec: 08 f4 brcc .+2 ; 0x8f0 <__vector_20+0x6a>
8ee: 8c c0 rjmp .+280 ; 0xa08 <__vector_20+0x182>
8f0: 87 30 cpi r24, 0x07 ; 7
8f2: 09 f4 brne .+2 ; 0x8f6 <__vector_20+0x70>
8f4: d6 c0 rjmp .+428 ; 0xaa2 <__vector_20+0x21c>
8f6: 88 30 cpi r24, 0x08 ; 8
8f8: 09 f0 breq .+2 ; 0x8fc <__vector_20+0x76>
8fa: e5 c0 rjmp .+458 ; 0xac6 <__vector_20+0x240>
8fc: d8 c0 rjmp .+432 ; 0xaae <__vector_20+0x228>
8fe: 45 3b cpi r20, 0xB5 ; 181
900: 09 f0 breq .+2 ; 0x904 <__vector_20+0x7e>
902: e8 c0 rjmp .+464 ; 0xad4 <__vector_20+0x24e>
904: 81 e0 ldi r24, 0x01 ; 1
906: 03 c0 rjmp .+6 ; 0x90e <__vector_20+0x88>
908: 42 36 cpi r20, 0x62 ; 98
90a: 21 f4 brne .+8 ; 0x914 <__vector_20+0x8e>
90c: 82 e0 ldi r24, 0x02 ; 2
90e: 80 93 a5 01 sts 0x01A5, r24
912: e0 c0 rjmp .+448 ; 0xad4 <__vector_20+0x24e>
914: 45 3b cpi r20, 0xB5 ; 181
916: 09 f4 brne .+2 ; 0x91a <__vector_20+0x94>
918: dd c0 rjmp .+442 ; 0xad4 <__vector_20+0x24e>
91a: d5 c0 rjmp .+426 ; 0xac6 <__vector_20+0x240>
91c: 41 30 cpi r20, 0x01 ; 1
91e: 09 f0 breq .+2 ; 0x922 <__vector_20+0x9c>
920: d2 c0 rjmp .+420 ; 0xac6 <__vector_20+0x240>
922: 83 e0 ldi r24, 0x03 ; 3
924: f4 cf rjmp .-24 ; 0x90e <__vector_20+0x88>
926: 40 93 24 05 sts 0x0524, r20
92a: 4f 5f subi r20, 0xFF ; 255
92c: 40 93 b4 02 sts 0x02B4, r20
930: 80 91 b4 02 lds r24, 0x02B4
934: 8f 5f subi r24, 0xFF ; 255
936: 80 93 e3 03 sts 0x03E3, r24
93a: 84 e0 ldi r24, 0x04 ; 4
93c: 80 93 a5 01 sts 0x01A5, r24
940: 80 91 24 05 lds r24, 0x0524
944: 83 30 cpi r24, 0x03 ; 3
946: 31 f0 breq .+12 ; 0x954 <__vector_20+0xce>
948: 81 31 cpi r24, 0x11 ; 17
94a: 61 f1 breq .+88 ; 0x9a4 <__vector_20+0x11e>
94c: 81 30 cpi r24, 0x01 ; 1
94e: 09 f0 breq .+2 ; 0x952 <__vector_20+0xcc>
950: 3f c0 rjmp .+126 ; 0x9d0 <__vector_20+0x14a>
952: 14 c0 rjmp .+40 ; 0x97c <__vector_20+0xf6>
954: 84 ee ldi r24, 0xE4 ; 228
956: 93 e0 ldi r25, 0x03 ; 3
958: 90 93 0f 04 sts 0x040F, r25
95c: 80 93 0e 04 sts 0x040E, r24
960: 25 e0 ldi r18, 0x05 ; 5
962: 35 e0 ldi r19, 0x05 ; 5
964: 30 93 b2 02 sts 0x02B2, r19
968: 20 93 b1 02 sts 0x02B1, r18
96c: 40 96 adiw r24, 0x10 ; 16
96e: 90 93 bc 04 sts 0x04BC, r25
972: 80 93 bb 04 sts 0x04BB, r24
976: 80 91 f4 03 lds r24, 0x03F4
97a: 27 c0 rjmp .+78 ; 0x9ca <__vector_20+0x144>
97c: 83 ec ldi r24, 0xC3 ; 195
97e: 94 e0 ldi r25, 0x04 ; 4
980: 90 93 0f 04 sts 0x040F, r25
984: 80 93 0e 04 sts 0x040E, r24
988: 2c e7 ldi r18, 0x7C ; 124
98a: 36 e0 ldi r19, 0x06 ; 6
98c: 30 93 b2 02 sts 0x02B2, r19
990: 20 93 b1 02 sts 0x02B1, r18
994: 44 96 adiw r24, 0x14 ; 20
996: 90 93 bc 04 sts 0x04BC, r25
99a: 80 93 bb 04 sts 0x04BB, r24
99e: 80 91 d7 04 lds r24, 0x04D7
9a2: 13 c0 rjmp .+38 ; 0x9ca <__vector_20+0x144>
9a4: 80 e1 ldi r24, 0x10 ; 16
9a6: 94 e0 ldi r25, 0x04 ; 4
9a8: 90 93 0f 04 sts 0x040F, r25
9ac: 80 93 0e 04 sts 0x040E, r24
9b0: 29 ec ldi r18, 0xC9 ; 201
9b2: 35 e0 ldi r19, 0x05 ; 5
9b4: 30 93 b2 02 sts 0x02B2, r19
9b8: 20 93 b1 02 sts 0x02B1, r18
9bc: 44 96 adiw r24, 0x14 ; 20
9be: 90 93 bc 04 sts 0x04BC, r25
9c2: 80 93 bb 04 sts 0x04BB, r24
9c6: 80 91 24 04 lds r24, 0x0424
9ca: 80 93 25 05 sts 0x0525, r24
9ce: 82 c0 rjmp .+260 ; 0xad4 <__vector_20+0x24e>
9d0: 81 e0 ldi r24, 0x01 ; 1
9d2: 80 93 25 05 sts 0x0525, r24
9d6: 10 92 bc 04 sts 0x04BC, r1
9da: 10 92 bb 04 sts 0x04BB, r1
9de: 7a c0 rjmp .+244 ; 0xad4 <__vector_20+0x24e>
9e0: 84 2f mov r24, r20
9e2: 99 27 eor r25, r25
9e4: 90 93 be 04 sts 0x04BE, r25
9e8: 80 93 bd 04 sts 0x04BD, r24
9ec: 80 91 b4 02 lds r24, 0x02B4
9f0: 84 0f add r24, r20
9f2: 80 93 b4 02 sts 0x02B4, r24
9f6: 80 91 e3 03 lds r24, 0x03E3
9fa: 90 91 b4 02 lds r25, 0x02B4
9fe: 89 0f add r24, r25
a00: 80 93 e3 03 sts 0x03E3, r24
a04: 85 e0 ldi r24, 0x05 ; 5
a06: 83 cf rjmp .-250 ; 0x90e <__vector_20+0x88>
a08: 20 91 bd 04 lds r18, 0x04BD
a0c: 30 91 be 04 lds r19, 0x04BE
a10: 84 2f mov r24, r20
a12: 99 27 eor r25, r25
a14: 98 2f mov r25, r24
a16: 88 27 eor r24, r24
a18: 28 0f add r18, r24
a1a: 39 1f adc r19, r25
a1c: 30 93 be 04 sts 0x04BE, r19
a20: 20 93 bd 04 sts 0x04BD, r18
a24: 80 91 b4 02 lds r24, 0x02B4
a28: 84 0f add r24, r20
a2a: 80 93 b4 02 sts 0x02B4, r24
a2e: 80 91 e3 03 lds r24, 0x03E3
a32: 90 91 b4 02 lds r25, 0x02B4
a36: 89 0f add r24, r25
a38: 80 93 e3 03 sts 0x03E3, r24
a3c: 86 e0 ldi r24, 0x06 ; 6
a3e: 67 cf rjmp .-306 ; 0x90e <__vector_20+0x88>
a40: 80 91 b4 02 lds r24, 0x02B4
a44: 84 0f add r24, r20
a46: 80 93 b4 02 sts 0x02B4, r24
a4a: 80 91 e3 03 lds r24, 0x03E3
a4e: 90 91 b4 02 lds r25, 0x02B4
a52: 89 0f add r24, r25
a54: 80 93 e3 03 sts 0x03E3, r24
a58: 80 91 25 05 lds r24, 0x0525
a5c: 88 23 and r24, r24
a5e: 81 f4 brne .+32 ; 0xa80 <__vector_20+0x1fa>
a60: e0 91 0e 04 lds r30, 0x040E
a64: f0 91 0f 04 lds r31, 0x040F
a68: 80 91 b1 02 lds r24, 0x02B1
a6c: 90 91 b2 02 lds r25, 0x02B2
a70: e8 17 cp r30, r24
a72: f9 07 cpc r31, r25
a74: 28 f4 brcc .+10 ; 0xa80 <__vector_20+0x1fa>
a76: 41 93 st Z+, r20
a78: f0 93 0f 04 sts 0x040F, r31
a7c: e0 93 0e 04 sts 0x040E, r30
a80: 80 91 bd 04 lds r24, 0x04BD
a84: 90 91 be 04 lds r25, 0x04BE
a88: 01 97 sbiw r24, 0x01 ; 1
a8a: 90 93 be 04 sts 0x04BE, r25
a8e: 80 93 bd 04 sts 0x04BD, r24
a92: 80 91 bd 04 lds r24, 0x04BD
a96: 90 91 be 04 lds r25, 0x04BE
a9a: 89 2b or r24, r25
a9c: d9 f4 brne .+54 ; 0xad4 <__vector_20+0x24e>
a9e: 87 e0 ldi r24, 0x07 ; 7
aa0: 36 cf rjmp .-404 ; 0x90e <__vector_20+0x88>
aa2: 80 91 b4 02 lds r24, 0x02B4
aa6: 48 17 cp r20, r24
aa8: 71 f4 brne .+28 ; 0xac6 <__vector_20+0x240>
aaa: 88 e0 ldi r24, 0x08 ; 8
aac: 30 cf rjmp .-416 ; 0x90e <__vector_20+0x88>
aae: 80 91 e3 03 lds r24, 0x03E3
ab2: 48 17 cp r20, r24
ab4: 41 f4 brne .+16 ; 0xac6 <__vector_20+0x240>
ab6: e0 91 bb 04 lds r30, 0x04BB
aba: f0 91 bc 04 lds r31, 0x04BC
abe: 30 97 sbiw r30, 0x00 ; 0
ac0: 11 f0 breq .+4 ; 0xac6 <__vector_20+0x240>
ac2: 81 e0 ldi r24, 0x01 ; 1
ac4: 80 83 st Z, r24
ac6: 10 92 a5 01 sts 0x01A5, r1
aca: 04 c0 rjmp .+8 ; 0xad4 <__vector_20+0x24e>
acc: 10 92 a5 01 sts 0x01A5, r1
ad0: 0e 94 c8 03 call 0x790 ; 0x790 <GPSscanData>
ad4: 0e 94 c8 03 call 0x790 ; 0x790 <GPSscanData>
ad8: 40 91 9e 01 lds r20, 0x019E
adc: 46 39 cpi r20, 0x96 ; 150
ade: 10 f0 brcs .+4 ; 0xae4 <__vector_20+0x25e>
ae0: 10 92 9d 01 sts 0x019D, r1
ae4: 80 91 92 01 lds r24, 0x0192
ae8: 8d 30 cpi r24, 0x0D ; 13
aea: 09 f0 breq .+2 ; 0xaee <__vector_20+0x268>
aec: 5c c0 rjmp .+184 ; 0xba6 <__vector_20+0x320>
aee: 80 91 9d 01 lds r24, 0x019D
af2: 82 30 cpi r24, 0x02 ; 2
af4: 09 f0 breq .+2 ; 0xaf8 <__vector_20+0x272>
af6: 57 c0 rjmp .+174 ; 0xba6 <__vector_20+0x320>
af8: 10 92 9d 01 sts 0x019D, r1
afc: a4 2f mov r26, r20
afe: bb 27 eor r27, r27
b00: fd 01 movw r30, r26
b02: ed 5d subi r30, 0xDD ; 221
b04: fb 4f sbci r31, 0xFB ; 251
b06: 30 81 ld r19, Z
b08: ed 01 movw r28, r26
b0a: cc 5d subi r28, 0xDC ; 220
b0c: db 4f sbci r29, 0xFB ; 251
b0e: 28 81 ld r18, Y
b10: 80 91 a1 01 lds r24, 0x01A1
b14: 90 91 a2 01 lds r25, 0x01A2
b18: 83 1b sub r24, r19
b1a: 91 09 sbc r25, r1
b1c: 82 1b sub r24, r18
b1e: 91 09 sbc r25, r1
b20: 9f 70 andi r25, 0x0F ; 15
b22: 90 93 a2 01 sts 0x01A2, r25
b26: 80 93 a1 01 sts 0x01A1, r24
b2a: 9c 01 movw r18, r24
b2c: 96 e0 ldi r25, 0x06 ; 6
b2e: 36 95 lsr r19
b30: 27 95 ror r18
b32: 9a 95 dec r25
b34: e1 f7 brne .-8 ; 0xb2e <__vector_20+0x2a8>
b36: 23 5c subi r18, 0xC3 ; 195
b38: 20 93 a0 01 sts 0x01A0, r18
b3c: 98 2f mov r25, r24
b3e: 9f 73 andi r25, 0x3F ; 63
b40: 93 5c subi r25, 0xC3 ; 195
b42: 90 93 9f 01 sts 0x019F, r25
b46: 80 81 ld r24, Z
b48: 28 17 cp r18, r24
b4a: 29 f4 brne .+10 ; 0xb56 <__vector_20+0x2d0>
b4c: 88 81 ld r24, Y
b4e: 98 17 cp r25, r24
b50: 11 f4 brne .+4 ; 0xb56 <__vector_20+0x2d0>
b52: 91 e0 ldi r25, 0x01 ; 1
b54: 06 c0 rjmp .+12 ; 0xb62 <__vector_20+0x2dc>
b56: 80 91 95 01 lds r24, 0x0195
b5a: 8f 5f subi r24, 0xFF ; 255
b5c: 80 93 95 01 sts 0x0195, r24
b60: 90 e0 ldi r25, 0x00 ; 0
b62: 80 91 93 01 lds r24, 0x0193
b66: 88 23 and r24, r24
b68: 09 f0 breq .+2 ; 0xb6c <__vector_20+0x2e6>
b6a: 64 c0 rjmp .+200 ; 0xc34 <__vector_20+0x3ae>
b6c: 99 23 and r25, r25
b6e: 09 f4 brne .+2 ; 0xb72 <__vector_20+0x2ec>
b70: 61 c0 rjmp .+194 ; 0xc34 <__vector_20+0x3ae>
b72: 81 e0 ldi r24, 0x01 ; 1
b74: 80 93 93 01 sts 0x0193, r24
b78: 40 93 96 01 sts 0x0196, r20
b7c: ab 5d subi r26, 0xDB ; 219
b7e: bb 4f sbci r27, 0xFB ; 251
b80: 8d e0 ldi r24, 0x0D ; 13
b82: 8c 93 st X, r24
b84: 80 91 27 04 lds r24, 0x0427
b88: 82 35 cpi r24, 0x52 ; 82
b8a: 09 f0 breq .+2 ; 0xb8e <__vector_20+0x308>
b8c: 53 c0 rjmp .+166 ; 0xc34 <__vector_20+0x3ae>
b8e: 88 e1 ldi r24, 0x18 ; 24
b90: 90 e0 ldi r25, 0x00 ; 0
b92: 2c e0 ldi r18, 0x0C ; 12
b94: 0f b6 in r0, 0x3f ; 63
b96: f8 94 cli
b98: a8 95 wdr
b9a: 80 93 60 00 sts 0x0060, r24
b9e: 0f be out 0x3f, r0 ; 63
ba0: 20 93 60 00 sts 0x0060, r18
ba4: 47 c0 rjmp .+142 ; 0xc34 <__vector_20+0x3ae>
ba6: 80 91 9d 01 lds r24, 0x019D
baa: 81 30 cpi r24, 0x01 ; 1
bac: d9 f0 breq .+54 ; 0xbe4 <__vector_20+0x35e>
bae: 81 30 cpi r24, 0x01 ; 1
bb0: 18 f0 brcs .+6 ; 0xbb8 <__vector_20+0x332>
bb2: 82 30 cpi r24, 0x02 ; 2
bb4: e9 f5 brne .+122 ; 0xc30 <__vector_20+0x3aa>
bb6: 30 c0 rjmp .+96 ; 0xc18 <__vector_20+0x392>
bb8: 80 91 92 01 lds r24, 0x0192
bbc: 83 32 cpi r24, 0x23 ; 35
bbe: 39 f4 brne .+14 ; 0xbce <__vector_20+0x348>
bc0: 80 91 93 01 lds r24, 0x0193
bc4: 88 23 and r24, r24
bc6: 19 f4 brne .+6 ; 0xbce <__vector_20+0x348>
bc8: 81 e0 ldi r24, 0x01 ; 1
bca: 80 93 9d 01 sts 0x019D, r24
bce: 80 91 92 01 lds r24, 0x0192
bd2: 80 93 25 04 sts 0x0425, r24
bd6: 81 e0 ldi r24, 0x01 ; 1
bd8: 80 93 9e 01 sts 0x019E, r24
bdc: 80 91 92 01 lds r24, 0x0192
be0: 99 27 eor r25, r25
be2: 15 c0 rjmp .+42 ; 0xc0e <__vector_20+0x388>
be4: 82 e0 ldi r24, 0x02 ; 2
be6: 80 93 9d 01 sts 0x019D, r24
bea: e4 2f mov r30, r20
bec: ff 27 eor r31, r31
bee: 80 91 92 01 lds r24, 0x0192
bf2: eb 5d subi r30, 0xDB ; 219
bf4: fb 4f sbci r31, 0xFB ; 251
bf6: 80 83 st Z, r24
bf8: 4f 5f subi r20, 0xFF ; 255
bfa: 40 93 9e 01 sts 0x019E, r20
bfe: 20 91 92 01 lds r18, 0x0192
c02: 80 91 a1 01 lds r24, 0x01A1
c06: 90 91 a2 01 lds r25, 0x01A2
c0a: 82 0f add r24, r18
c0c: 91 1d adc r25, r1
c0e: 90 93 a2 01 sts 0x01A2, r25
c12: 80 93 a1 01 sts 0x01A1, r24
c16: 0e c0 rjmp .+28 ; 0xc34 <__vector_20+0x3ae>
c18: e4 2f mov r30, r20
c1a: ff 27 eor r31, r31
c1c: 80 91 92 01 lds r24, 0x0192
c20: eb 5d subi r30, 0xDB ; 219
c22: fb 4f sbci r31, 0xFB ; 251
c24: 80 83 st Z, r24
c26: 46 39 cpi r20, 0x96 ; 150
c28: 38 f3 brcs .-50 ; 0xbf8 <__vector_20+0x372>
c2a: 10 92 9d 01 sts 0x019D, r1
c2e: e7 cf rjmp .-50 ; 0xbfe <__vector_20+0x378>
c30: 10 92 9d 01 sts 0x019D, r1
c34: ff 91 pop r31
c36: ef 91 pop r30
c38: df 91 pop r29
c3a: cf 91 pop r28
c3c: bf 91 pop r27
c3e: af 91 pop r26
c40: 9f 91 pop r25
c42: 8f 91 pop r24
c44: 7f 91 pop r23
c46: 6f 91 pop r22
c48: 5f 91 pop r21
c4a: 4f 91 pop r20
c4c: 3f 91 pop r19
c4e: 2f 91 pop r18
c50: 0f 90 pop r0
c52: 0f be out 0x3f, r0 ; 63
c54: 0f 90 pop r0
c56: 1f 90 pop r1
c58: 18 95 reti
 
00000c5a <AddCRC>:
c5a: dc 01 movw r26, r24
c5c: 20 e0 ldi r18, 0x00 ; 0
c5e: 30 e0 ldi r19, 0x00 ; 0
c60: 40 e0 ldi r20, 0x00 ; 0
c62: 50 e0 ldi r21, 0x00 ; 0
c64: e5 eb ldi r30, 0xB5 ; 181
c66: f2 e0 ldi r31, 0x02 ; 2
c68: 05 c0 rjmp .+10 ; 0xc74 <AddCRC+0x1a>
c6a: 81 91 ld r24, Z+
c6c: 28 0f add r18, r24
c6e: 31 1d adc r19, r1
c70: 4f 5f subi r20, 0xFF ; 255
c72: 5f 4f sbci r21, 0xFF ; 255
c74: 4a 17 cp r20, r26
c76: 5b 07 cpc r21, r27
c78: c1 f7 brne .-16 ; 0xc6a <AddCRC+0x10>
c7a: 3f 70 andi r19, 0x0F ; 15
c7c: c9 01 movw r24, r18
c7e: 66 e0 ldi r22, 0x06 ; 6
c80: 96 95 lsr r25
c82: 87 95 ror r24
c84: 6a 95 dec r22
c86: e1 f7 brne .-8 ; 0xc80 <AddCRC+0x26>
c88: 83 5c subi r24, 0xC3 ; 195
c8a: fd 01 movw r30, r26
c8c: eb 54 subi r30, 0x4B ; 75
c8e: fd 4f sbci r31, 0xFD ; 253
c90: 80 83 st Z, r24
c92: 11 96 adiw r26, 0x01 ; 1
c94: 2f 73 andi r18, 0x3F ; 63
c96: 23 5c subi r18, 0xC3 ; 195
c98: fd 01 movw r30, r26
c9a: eb 54 subi r30, 0x4B ; 75
c9c: fd 4f sbci r31, 0xFD ; 253
c9e: 20 83 st Z, r18
ca0: aa 54 subi r26, 0x4A ; 74
ca2: bd 4f sbci r27, 0xFD ; 253
ca4: 8d e0 ldi r24, 0x0D ; 13
ca6: 8c 93 st X, r24
ca8: 10 92 00 01 sts 0x0100, r1
cac: 80 91 b5 02 lds r24, 0x02B5
cb0: 80 93 c6 00 sts 0x00C6, r24
cb4: 08 95 ret
 
00000cb6 <SendOutData>:
cb6: ef 92 push r14
cb8: ff 92 push r15
cba: 0f 93 push r16
cbc: 1f 93 push r17
cbe: cf 93 push r28
cc0: df 93 push r29
cc2: 7a 01 movw r14, r20
cc4: 72 2f mov r23, r18
cc6: 93 e2 ldi r25, 0x23 ; 35
cc8: 90 93 b5 02 sts 0x02B5, r25
ccc: 60 93 b6 02 sts 0x02B6, r22
cd0: 80 93 b7 02 sts 0x02B7, r24
cd4: 03 e0 ldi r16, 0x03 ; 3
cd6: 10 e0 ldi r17, 0x00 ; 0
cd8: 60 e0 ldi r22, 0x00 ; 0
cda: a8 eb ldi r26, 0xB8 ; 184
cdc: b2 e0 ldi r27, 0x02 ; 2
cde: 46 c0 rjmp .+140 ; 0xd6c <SendOutData+0xb6>
ce0: f7 01 movw r30, r14
ce2: e6 0f add r30, r22
ce4: f1 1d adc r31, r1
ce6: 90 81 ld r25, Z
ce8: 6f 5f subi r22, 0xFF ; 255
cea: 71 50 subi r23, 0x01 ; 1
cec: 19 f4 brne .+6 ; 0xcf4 <SendOutData+0x3e>
cee: e0 e0 ldi r30, 0x00 ; 0
cf0: 40 e0 ldi r20, 0x00 ; 0
cf2: 0f c0 rjmp .+30 ; 0xd12 <SendOutData+0x5c>
cf4: f7 01 movw r30, r14
cf6: e6 0f add r30, r22
cf8: f1 1d adc r31, r1
cfa: 40 81 ld r20, Z
cfc: 6f 5f subi r22, 0xFF ; 255
cfe: 71 50 subi r23, 0x01 ; 1
d00: 11 f4 brne .+4 ; 0xd06 <SendOutData+0x50>
d02: e0 e0 ldi r30, 0x00 ; 0
d04: 06 c0 rjmp .+12 ; 0xd12 <SendOutData+0x5c>
d06: f7 01 movw r30, r14
d08: e6 0f add r30, r22
d0a: f1 1d adc r31, r1
d0c: e0 81 ld r30, Z
d0e: 6f 5f subi r22, 0xFF ; 255
d10: 71 50 subi r23, 0x01 ; 1
d12: 89 2f mov r24, r25
d14: 86 95 lsr r24
d16: 86 95 lsr r24
d18: 83 5c subi r24, 0xC3 ; 195
d1a: 8c 93 st X, r24
d1c: 55 27 eor r21, r21
d1e: 89 2f mov r24, r25
d20: 99 27 eor r25, r25
d22: 83 70 andi r24, 0x03 ; 3
d24: 90 70 andi r25, 0x00 ; 0
d26: 24 e0 ldi r18, 0x04 ; 4
d28: 88 0f add r24, r24
d2a: 99 1f adc r25, r25
d2c: 2a 95 dec r18
d2e: e1 f7 brne .-8 ; 0xd28 <SendOutData+0x72>
d30: 9a 01 movw r18, r20
d32: 94 e0 ldi r25, 0x04 ; 4
d34: 36 95 lsr r19
d36: 27 95 ror r18
d38: 9a 95 dec r25
d3a: e1 f7 brne .-8 ; 0xd34 <SendOutData+0x7e>
d3c: 82 2b or r24, r18
d3e: 83 5c subi r24, 0xC3 ; 195
d40: ed 01 movw r28, r26
d42: 89 83 std Y+1, r24 ; 0x01
d44: 4f 70 andi r20, 0x0F ; 15
d46: 50 70 andi r21, 0x00 ; 0
d48: 44 0f add r20, r20
d4a: 55 1f adc r21, r21
d4c: 44 0f add r20, r20
d4e: 55 1f adc r21, r21
d50: 8e 2f mov r24, r30
d52: 82 95 swap r24
d54: 86 95 lsr r24
d56: 86 95 lsr r24
d58: 83 70 andi r24, 0x03 ; 3
d5a: 84 2b or r24, r20
d5c: 83 5c subi r24, 0xC3 ; 195
d5e: 8a 83 std Y+2, r24 ; 0x02
d60: ef 73 andi r30, 0x3F ; 63
d62: e3 5c subi r30, 0xC3 ; 195
d64: eb 83 std Y+3, r30 ; 0x03
d66: 0c 5f subi r16, 0xFC ; 252
d68: 1f 4f sbci r17, 0xFF ; 255
d6a: 14 96 adiw r26, 0x04 ; 4
d6c: 77 23 and r23, r23
d6e: 09 f0 breq .+2 ; 0xd72 <SendOutData+0xbc>
d70: b7 cf rjmp .-146 ; 0xce0 <SendOutData+0x2a>
d72: c8 01 movw r24, r16
d74: 0e 94 2d 06 call 0xc5a ; 0xc5a <AddCRC>
d78: df 91 pop r29
d7a: cf 91 pop r28
d7c: 1f 91 pop r17
d7e: 0f 91 pop r16
d80: ff 90 pop r15
d82: ef 90 pop r14
d84: 08 95 ret
 
00000d86 <Decode64>:
d86: 1f 93 push r17
d88: cf 93 push r28
d8a: df 93 push r29
d8c: ec 01 movw r28, r24
d8e: 70 e0 ldi r23, 0x00 ; 0
d90: a2 2f mov r26, r18
d92: bb 27 eor r27, r27
d94: 12 97 sbiw r26, 0x02 ; 2
d96: 48 c0 rjmp .+144 ; 0xe28 <Decode64+0xa2>
d98: e4 2f mov r30, r20
d9a: ff 27 eor r31, r31
d9c: eb 5d subi r30, 0xDB ; 219
d9e: fb 4f sbci r31, 0xFB ; 251
da0: 30 81 ld r19, Z
da2: 4f 5f subi r20, 0xFF ; 255
da4: e4 2f mov r30, r20
da6: ff 27 eor r31, r31
da8: eb 5d subi r30, 0xDB ; 219
daa: fb 4f sbci r31, 0xFB ; 251
dac: 50 81 ld r21, Z
dae: 4f 5f subi r20, 0xFF ; 255
db0: e4 2f mov r30, r20
db2: ff 27 eor r31, r31
db4: eb 5d subi r30, 0xDB ; 219
db6: fb 4f sbci r31, 0xFB ; 251
db8: 10 81 ld r17, Z
dba: 4f 5f subi r20, 0xFF ; 255
dbc: e4 2f mov r30, r20
dbe: ff 27 eor r31, r31
dc0: eb 5d subi r30, 0xDB ; 219
dc2: fb 4f sbci r31, 0xFB ; 251
dc4: 20 81 ld r18, Z
dc6: 4f 5f subi r20, 0xFF ; 255
dc8: 84 2f mov r24, r20
dca: 99 27 eor r25, r25
dcc: a8 17 cp r26, r24
dce: b9 07 cpc r27, r25
dd0: 74 f1 brlt .+92 ; 0xe2e <Decode64+0xa8>
dd2: 5d 53 subi r21, 0x3D ; 61
dd4: fe 01 movw r30, r28
dd6: e7 0f add r30, r23
dd8: f1 1d adc r31, r1
dda: 3d 53 subi r19, 0x3D ; 61
ddc: 33 0f add r19, r19
dde: 33 0f add r19, r19
de0: 85 2f mov r24, r21
de2: 82 95 swap r24
de4: 8f 70 andi r24, 0x0F ; 15
de6: 38 2b or r19, r24
de8: 30 83 st Z, r19
dea: 61 30 cpi r22, 0x01 ; 1
dec: 01 f1 breq .+64 ; 0xe2e <Decode64+0xa8>
dee: 91 2f mov r25, r17
df0: 9d 53 subi r25, 0x3D ; 61
df2: 7f 5f subi r23, 0xFF ; 255
df4: fe 01 movw r30, r28
df6: e7 0f add r30, r23
df8: f1 1d adc r31, r1
dfa: 71 50 subi r23, 0x01 ; 1
dfc: 52 95 swap r21
dfe: 50 7f andi r21, 0xF0 ; 240
e00: 89 2f mov r24, r25
e02: 86 95 lsr r24
e04: 86 95 lsr r24
e06: 58 2b or r21, r24
e08: 50 83 st Z, r21
e0a: 63 50 subi r22, 0x03 ; 3
e0c: 6f 3f cpi r22, 0xFF ; 255
e0e: 79 f0 breq .+30 ; 0xe2e <Decode64+0xa8>
e10: 7e 5f subi r23, 0xFE ; 254
e12: fe 01 movw r30, r28
e14: e7 0f add r30, r23
e16: f1 1d adc r31, r1
e18: 92 95 swap r25
e1a: 99 0f add r25, r25
e1c: 99 0f add r25, r25
e1e: 90 7c andi r25, 0xC0 ; 192
e20: 2d 53 subi r18, 0x3D ; 61
e22: 92 2b or r25, r18
e24: 90 83 st Z, r25
e26: 7f 5f subi r23, 0xFF ; 255
e28: 66 23 and r22, r22
e2a: 09 f0 breq .+2 ; 0xe2e <Decode64+0xa8>
e2c: b5 cf rjmp .-150 ; 0xd98 <Decode64+0x12>
e2e: df 91 pop r29
e30: cf 91 pop r28
e32: 1f 91 pop r17
e34: 08 95 ret
 
00000e36 <uart_putchar>:
e36: 1f 93 push r17
e38: 18 2f mov r17, r24
e3a: 8a 30 cpi r24, 0x0A ; 10
e3c: 19 f4 brne .+6 ; 0xe44 <uart_putchar+0xe>
e3e: 8d e0 ldi r24, 0x0D ; 13
e40: 0e 94 1b 07 call 0xe36 ; 0xe36 <uart_putchar>
e44: 80 91 c0 00 lds r24, 0x00C0
e48: 85 ff sbrs r24, 5
e4a: fc cf rjmp .-8 ; 0xe44 <uart_putchar+0xe>
e4c: 10 93 c6 00 sts 0x00C6, r17
e50: 80 e0 ldi r24, 0x00 ; 0
e52: 90 e0 ldi r25, 0x00 ; 0
e54: 1f 91 pop r17
e56: 08 95 ret
 
00000e58 <WriteProgramData>:
e58: 08 95 ret
 
00000e5a <UART_Init>:
e5a: e1 ec ldi r30, 0xC1 ; 193
e5c: f0 e0 ldi r31, 0x00 ; 0
e5e: 88 e1 ldi r24, 0x18 ; 24
e60: 80 83 st Z, r24
e62: a0 ec ldi r26, 0xC0 ; 192
e64: b0 e0 ldi r27, 0x00 ; 0
e66: 8c 91 ld r24, X
e68: 82 60 ori r24, 0x02 ; 2
e6a: 8c 93 st X, r24
e6c: 80 81 ld r24, Z
e6e: 80 68 ori r24, 0x80 ; 128
e70: 80 83 st Z, r24
e72: 80 81 ld r24, Z
e74: 80 64 ori r24, 0x40 ; 64
e76: 80 83 st Z, r24
e78: 8a e2 ldi r24, 0x2A ; 42
e7a: 80 93 c4 00 sts 0x00C4, r24
e7e: 88 ec ldi r24, 0xC8 ; 200
e80: 90 e0 ldi r25, 0x00 ; 0
e82: 0e 94 fb 0b call 0x17f6 ; 0x17f6 <SetDelay>
e86: 90 93 e2 03 sts 0x03E2, r25
e8a: 80 93 e1 03 sts 0x03E1, r24
e8e: 10 92 a5 01 sts 0x01A5, r1
e92: 08 95 ret
 
00000e94 <DatenUebertragung>:
e94: 80 91 00 01 lds r24, 0x0100
e98: 88 23 and r24, r24
e9a: 09 f4 brne .+2 ; 0xe9e <DatenUebertragung+0xa>
e9c: 68 c0 rjmp .+208 ; 0xf6e <DatenUebertragung+0xda>
e9e: 80 91 8e 01 lds r24, 0x018E
ea2: 88 23 and r24, r24
ea4: 71 f0 breq .+28 ; 0xec2 <DatenUebertragung+0x2e>
ea6: 80 91 00 01 lds r24, 0x0100
eaa: 88 23 and r24, r24
eac: 51 f0 breq .+20 ; 0xec2 <DatenUebertragung+0x2e>
eae: 2b e0 ldi r18, 0x0B ; 11
eb0: 45 ef ldi r20, 0xF5 ; 245
eb2: 53 e0 ldi r21, 0x03 ; 3
eb4: 60 91 b3 02 lds r22, 0x02B3
eb8: 87 e4 ldi r24, 0x47 ; 71
eba: 0e 94 5b 06 call 0xcb6 ; 0xcb6 <SendOutData>
ebe: 10 92 8e 01 sts 0x018E, r1
ec2: 80 91 e1 03 lds r24, 0x03E1
ec6: 90 91 e2 03 lds r25, 0x03E2
eca: 0e 94 04 0c call 0x1808 ; 0x1808 <CheckDelay>
ece: 88 23 and r24, r24
ed0: 21 f4 brne .+8 ; 0xeda <DatenUebertragung+0x46>
ed2: 80 91 90 01 lds r24, 0x0190
ed6: 88 23 and r24, r24
ed8: b1 f0 breq .+44 ; 0xf06 <DatenUebertragung+0x72>
eda: 80 91 00 01 lds r24, 0x0100
ede: 88 23 and r24, r24
ee0: 91 f0 breq .+36 ; 0xf06 <DatenUebertragung+0x72>
ee2: 22 e3 ldi r18, 0x32 ; 50
ee4: 48 ed ldi r20, 0xD8 ; 216
ee6: 54 e0 ldi r21, 0x04 ; 4
ee8: 60 91 b3 02 lds r22, 0x02B3
eec: 84 e4 ldi r24, 0x44 ; 68
eee: 0e 94 5b 06 call 0xcb6 ; 0xcb6 <SendOutData>
ef2: 10 92 90 01 sts 0x0190, r1
ef6: 8a ef ldi r24, 0xFA ; 250
ef8: 90 e0 ldi r25, 0x00 ; 0
efa: 0e 94 fb 0b call 0x17f6 ; 0x17f6 <SetDelay>
efe: 90 93 e2 03 sts 0x03E2, r25
f02: 80 93 e1 03 sts 0x03E1, r24
f06: 80 91 8f 01 lds r24, 0x018F
f0a: 88 23 and r24, r24
f0c: f1 f0 breq .+60 ; 0xf4a <DatenUebertragung+0xb6>
f0e: 80 91 00 01 lds r24, 0x0100
f12: 88 23 and r24, r24
f14: d1 f0 breq .+52 ; 0xf4a <DatenUebertragung+0xb6>
f16: 0e 94 50 10 call 0x20a0 ; 0x20a0 <Menu>
f1a: 10 92 8f 01 sts 0x018F, r1
f1e: 80 91 9c 01 lds r24, 0x019C
f22: 8f 5f subi r24, 0xFF ; 255
f24: 80 93 9c 01 sts 0x019C, r24
f28: 84 30 cpi r24, 0x04 ; 4
f2a: 11 f4 brne .+4 ; 0xf30 <DatenUebertragung+0x9c>
f2c: 10 92 9c 01 sts 0x019C, r1
f30: 80 91 9c 01 lds r24, 0x019C
f34: 44 e1 ldi r20, 0x14 ; 20
f36: 84 9f mul r24, r20
f38: a0 01 movw r20, r0
f3a: 11 24 eor r1, r1
f3c: 4a 5e subi r20, 0xEA ; 234
f3e: 5e 4f sbci r21, 0xFE ; 254
f40: 24 e1 ldi r18, 0x14 ; 20
f42: 60 e0 ldi r22, 0x00 ; 0
f44: 80 5d subi r24, 0xD0 ; 208
f46: 0e 94 5b 06 call 0xcb6 ; 0xcb6 <SendOutData>
f4a: 80 91 91 01 lds r24, 0x0191
f4e: 88 23 and r24, r24
f50: 71 f0 breq .+28 ; 0xf6e <DatenUebertragung+0xda>
f52: 80 91 00 01 lds r24, 0x0100
f56: 88 23 and r24, r24
f58: 51 f0 breq .+20 ; 0xf6e <DatenUebertragung+0xda>
f5a: 2a e0 ldi r18, 0x0A ; 10
f5c: 40 e0 ldi r20, 0x00 ; 0
f5e: 54 e0 ldi r21, 0x04 ; 4
f60: 60 91 b3 02 lds r22, 0x02B3
f64: 86 e5 ldi r24, 0x56 ; 86
f66: 0e 94 5b 06 call 0xcb6 ; 0xcb6 <SendOutData>
f6a: 10 92 91 01 sts 0x0191, r1
f6e: 08 95 ret
 
00000f70 <BearbeiteRxDaten>:
f70: 1f 93 push r17
f72: cf 93 push r28
f74: df 93 push r29
f76: cd b7 in r28, 0x3d ; 61
f78: de b7 in r29, 0x3e ; 62
f7a: 22 97 sbiw r28, 0x02 ; 2
f7c: 0f b6 in r0, 0x3f ; 63
f7e: f8 94 cli
f80: de bf out 0x3e, r29 ; 62
f82: 0f be out 0x3f, r0 ; 63
f84: cd bf out 0x3d, r28 ; 61
f86: 80 91 93 01 lds r24, 0x0193
f8a: 88 23 and r24, r24
f8c: 09 f4 brne .+2 ; 0xf90 <BearbeiteRxDaten+0x20>
f8e: 98 c0 rjmp .+304 ; 0x10c0 <BearbeiteRxDaten+0x150>
f90: 8f ef ldi r24, 0xFF ; 255
f92: 80 93 01 01 sts 0x0101, r24
f96: 80 91 27 04 lds r24, 0x0427
f9a: 81 37 cpi r24, 0x71 ; 113
f9c: 60 f4 brcc .+24 ; 0xfb6 <BearbeiteRxDaten+0x46>
f9e: 8c 36 cpi r24, 0x6C ; 108
fa0: 08 f0 brcs .+2 ; 0xfa4 <BearbeiteRxDaten+0x34>
fa2: 6f c0 rjmp .+222 ; 0x1082 <BearbeiteRxDaten+0x112>
fa4: 87 36 cpi r24, 0x67 ; 103
fa6: 09 f4 brne .+2 ; 0xfaa <BearbeiteRxDaten+0x3a>
fa8: 40 c0 rjmp .+128 ; 0x102a <BearbeiteRxDaten+0xba>
faa: 88 36 cpi r24, 0x68 ; 104
fac: f9 f0 breq .+62 ; 0xfec <BearbeiteRxDaten+0x7c>
fae: 83 36 cpi r24, 0x63 ; 99
fb0: 09 f0 breq .+2 ; 0xfb4 <BearbeiteRxDaten+0x44>
fb2: 84 c0 rjmp .+264 ; 0x10bc <BearbeiteRxDaten+0x14c>
fb4: 08 c0 rjmp .+16 ; 0xfc6 <BearbeiteRxDaten+0x56>
fb6: 84 37 cpi r24, 0x74 ; 116
fb8: 59 f1 breq .+86 ; 0x1010 <BearbeiteRxDaten+0xa0>
fba: 86 37 cpi r24, 0x76 ; 118
fbc: 91 f1 breq .+100 ; 0x1022 <BearbeiteRxDaten+0xb2>
fbe: 81 37 cpi r24, 0x71 ; 113
fc0: 09 f0 breq .+2 ; 0xfc4 <BearbeiteRxDaten+0x54>
fc2: 7c c0 rjmp .+248 ; 0x10bc <BearbeiteRxDaten+0x14c>
fc4: 36 c0 rjmp .+108 ; 0x1032 <BearbeiteRxDaten+0xc2>
fc6: 20 91 96 01 lds r18, 0x0196
fca: 43 e0 ldi r20, 0x03 ; 3
fcc: 6b e0 ldi r22, 0x0B ; 11
fce: 85 ef ldi r24, 0xF5 ; 245
fd0: 93 e0 ldi r25, 0x03 ; 3
fd2: 0e 94 c3 06 call 0xd86 ; 0xd86 <Decode64>
fd6: 80 91 cd 01 lds r24, 0x01CD
fda: 90 91 f7 03 lds r25, 0x03F7
fde: 89 2b or r24, r25
fe0: 80 93 cd 01 sts 0x01CD, r24
fe4: 81 e0 ldi r24, 0x01 ; 1
fe6: 80 93 90 01 sts 0x0190, r24
fea: 68 c0 rjmp .+208 ; 0x10bc <BearbeiteRxDaten+0x14c>
fec: 20 91 96 01 lds r18, 0x0196
ff0: 43 e0 ldi r20, 0x03 ; 3
ff2: 62 e0 ldi r22, 0x02 ; 2
ff4: ce 01 movw r24, r28
ff6: 01 96 adiw r24, 0x01 ; 1
ff8: 0e 94 c3 06 call 0xd86 ; 0xd86 <Decode64>
ffc: 80 91 cd 01 lds r24, 0x01CD
1000: 99 81 ldd r25, Y+1 ; 0x01
1002: 89 2b or r24, r25
1004: 80 93 cd 01 sts 0x01CD, r24
1008: 81 e0 ldi r24, 0x01 ; 1
100a: 80 93 8f 01 sts 0x018F, r24
100e: 56 c0 rjmp .+172 ; 0x10bc <BearbeiteRxDaten+0x14c>
1010: 20 91 96 01 lds r18, 0x0196
1014: 43 e0 ldi r20, 0x03 ; 3
1016: 64 e0 ldi r22, 0x04 ; 4
1018: 88 e9 ldi r24, 0x98 ; 152
101a: 91 e0 ldi r25, 0x01 ; 1
101c: 0e 94 c3 06 call 0xd86 ; 0xd86 <Decode64>
1020: 4d c0 rjmp .+154 ; 0x10bc <BearbeiteRxDaten+0x14c>
1022: 81 e0 ldi r24, 0x01 ; 1
1024: 80 93 91 01 sts 0x0191, r24
1028: 49 c0 rjmp .+146 ; 0x10bc <BearbeiteRxDaten+0x14c>
102a: 81 e0 ldi r24, 0x01 ; 1
102c: 80 93 8e 01 sts 0x018E, r24
1030: 45 c0 rjmp .+138 ; 0x10bc <BearbeiteRxDaten+0x14c>
1032: 20 91 96 01 lds r18, 0x0196
1036: 43 e0 ldi r20, 0x03 ; 3
1038: 62 e0 ldi r22, 0x02 ; 2
103a: ce 01 movw r24, r28
103c: 01 96 adiw r24, 0x01 ; 1
103e: 0e 94 c3 06 call 0xd86 ; 0xd86 <Decode64>
1042: 89 81 ldd r24, Y+1 ; 0x01
1044: 8f 3f cpi r24, 0xFF ; 255
1046: 89 f0 breq .+34 ; 0x106a <BearbeiteRxDaten+0xfa>
1048: 86 30 cpi r24, 0x06 ; 6
104a: 10 f0 brcs .+4 ; 0x1050 <BearbeiteRxDaten+0xe0>
104c: 85 e0 ldi r24, 0x05 ; 5
104e: 89 83 std Y+1, r24 ; 0x01
1050: 4a e3 ldi r20, 0x3A ; 58
1052: 6d e6 ldi r22, 0x6D ; 109
1054: 75 e0 ldi r23, 0x05 ; 5
1056: 89 81 ldd r24, Y+1 ; 0x01
1058: 0e 94 17 02 call 0x42e ; 0x42e <ReadParameterSet>
105c: 89 81 ldd r24, Y+1 ; 0x01
105e: 2a e3 ldi r18, 0x3A ; 58
1060: 4d e6 ldi r20, 0x6D ; 109
1062: 55 e0 ldi r21, 0x05 ; 5
1064: 60 91 b3 02 lds r22, 0x02B3
1068: 08 c0 rjmp .+16 ; 0x107a <BearbeiteRxDaten+0x10a>
106a: 10 91 b3 02 lds r17, 0x02B3
106e: 0e 94 f8 01 call 0x3f0 ; 0x3f0 <GetActiveParamSetNumber>
1072: 2a e3 ldi r18, 0x3A ; 58
1074: 4d e6 ldi r20, 0x6D ; 109
1076: 55 e0 ldi r21, 0x05 ; 5
1078: 61 2f mov r22, r17
107a: 85 5b subi r24, 0xB5 ; 181
107c: 0e 94 5b 06 call 0xcb6 ; 0xcb6 <SendOutData>
1080: 1d c0 rjmp .+58 ; 0x10bc <BearbeiteRxDaten+0x14c>
1082: 20 91 96 01 lds r18, 0x0196
1086: 43 e0 ldi r20, 0x03 ; 3
1088: 6a e3 ldi r22, 0x3A ; 58
108a: 8d e6 ldi r24, 0x6D ; 109
108c: 95 e0 ldi r25, 0x05 ; 5
108e: 0e 94 c3 06 call 0xd86 ; 0xd86 <Decode64>
1092: 80 91 27 04 lds r24, 0x0427
1096: 4a e3 ldi r20, 0x3A ; 58
1098: 6d e6 ldi r22, 0x6D ; 109
109a: 75 e0 ldi r23, 0x05 ; 5
109c: 8b 56 subi r24, 0x6B ; 107
109e: 0e 94 ff 01 call 0x3fe ; 0x3fe <WriteParameterSet>
10a2: 80 91 27 04 lds r24, 0x0427
10a6: 8b 56 subi r24, 0x6B ; 107
10a8: a2 e0 ldi r26, 0x02 ; 2
10aa: b0 e0 ldi r27, 0x00 ; 0
10ac: 08 2e mov r0, r24
10ae: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eeprom_write_byte_1F2021>
10b2: 0e 94 f8 01 call 0x3f0 ; 0x3f0 <GetActiveParamSetNumber>
10b6: 99 27 eor r25, r25
10b8: 0e 94 4b 1e call 0x3c96 ; 0x3c96 <Piep>
10bc: 10 92 93 01 sts 0x0193, r1
10c0: 22 96 adiw r28, 0x02 ; 2
10c2: 0f b6 in r0, 0x3f ; 63
10c4: f8 94 cli
10c6: de bf out 0x3e, r29 ; 62
10c8: 0f be out 0x3f, r0 ; 63
10ca: cd bf out 0x3d, r28 ; 61
10cc: df 91 pop r29
10ce: cf 91 pop r28
10d0: 1f 91 pop r17
10d2: 08 95 ret
 
000010d4 <Putchar>:
10d4: 98 2f mov r25, r24
10d6: 80 91 26 05 lds r24, 0x0526
10da: 81 30 cpi r24, 0x01 ; 1
10dc: 69 f4 brne .+26 ; 0x10f8 <Putchar+0x24>
10de: 80 91 cc 01 lds r24, 0x01CC
10e2: e8 2f mov r30, r24
10e4: ff 27 eor r31, r31
10e6: ea 5e subi r30, 0xEA ; 234
10e8: fe 4f sbci r31, 0xFE ; 254
10ea: 90 83 st Z, r25
10ec: 8f 5f subi r24, 0xFF ; 255
10ee: 80 93 cc 01 sts 0x01CC, r24
10f2: 21 e0 ldi r18, 0x01 ; 1
10f4: 30 e0 ldi r19, 0x00 ; 0
10f6: 05 c0 rjmp .+10 ; 0x1102 <__stack+0x3>
10f8: 89 2f mov r24, r25
10fa: 0e 94 1b 07 call 0xe36 ; 0xe36 <uart_putchar>
10fe: 28 2f mov r18, r24
1100: 33 27 eor r19, r19
1102: c9 01 movw r24, r18
1104: 08 95 ret
 
00001106 <PAD_0>:
1106: 1f 93 push r17
1108: 18 2f mov r17, r24
110a: 04 c0 rjmp .+8 ; 0x1114 <PAD_0+0xe>
110c: 80 e3 ldi r24, 0x30 ; 48
110e: 0e 94 6a 08 call 0x10d4 ; 0x10d4 <Putchar>
1112: 11 50 subi r17, 0x01 ; 1
1114: 11 16 cp r1, r17
1116: d4 f3 brlt .-12 ; 0x110c <PAD_0+0x6>
1118: 1f 91 pop r17
111a: 08 95 ret
 
0000111c <PAD_SP>:
111c: 1f 93 push r17
111e: 18 2f mov r17, r24
1120: 04 c0 rjmp .+8 ; 0x112a <PAD_SP+0xe>
1122: 80 e2 ldi r24, 0x20 ; 32
1124: 0e 94 6a 08 call 0x10d4 ; 0x10d4 <Putchar>
1128: 11 50 subi r17, 0x01 ; 1
112a: 11 16 cp r1, r17
112c: d4 f3 brlt .-12 ; 0x1122 <PAD_SP+0x6>
112e: 1f 91 pop r17
1130: 08 95 ret
 
00001132 <PRINTP>:
1132: 0f 93 push r16
1134: 1f 93 push r17
1136: cf 93 push r28
1138: df 93 push r29
113a: 8c 01 movw r16, r24
113c: eb 01 movw r28, r22
113e: 08 c0 rjmp .+16 ; 0x1150 <PRINTP+0x1e>
1140: f8 01 movw r30, r16
1142: 0f 5f subi r16, 0xFF ; 255
1144: 1f 4f sbci r17, 0xFF ; 255
1146: e4 91 lpm r30, Z
1148: 8e 2f mov r24, r30
114a: 0e 94 6a 08 call 0x10d4 ; 0x10d4 <Putchar>
114e: 21 97 sbiw r28, 0x01 ; 1
1150: 20 97 sbiw r28, 0x00 ; 0
1152: b1 f7 brne .-20 ; 0x1140 <PRINTP+0xe>
1154: df 91 pop r29
1156: cf 91 pop r28
1158: 1f 91 pop r17
115a: 0f 91 pop r16
115c: 08 95 ret
 
0000115e <PRINT>:
115e: 0f 93 push r16
1160: 1f 93 push r17
1162: cf 93 push r28
1164: df 93 push r29
1166: 8c 01 movw r16, r24
1168: eb 01 movw r28, r22
116a: 06 c0 rjmp .+12 ; 0x1178 <PRINT+0x1a>
116c: f8 01 movw r30, r16
116e: 81 91 ld r24, Z+
1170: 8f 01 movw r16, r30
1172: 0e 94 6a 08 call 0x10d4 ; 0x10d4 <Putchar>
1176: 21 97 sbiw r28, 0x01 ; 1
1178: 20 97 sbiw r28, 0x00 ; 0
117a: c1 f7 brne .-16 ; 0x116c <PRINT+0xe>
117c: df 91 pop r29
117e: cf 91 pop r28
1180: 1f 91 pop r17
1182: 0f 91 pop r16
1184: 08 95 ret
 
00001186 <_printf_P>:
1186: 2f 92 push r2
1188: 3f 92 push r3
118a: 4f 92 push r4
118c: 5f 92 push r5
118e: 6f 92 push r6
1190: 7f 92 push r7
1192: 8f 92 push r8
1194: 9f 92 push r9
1196: af 92 push r10
1198: bf 92 push r11
119a: cf 92 push r12
119c: df 92 push r13
119e: ef 92 push r14
11a0: ff 92 push r15
11a2: 0f 93 push r16
11a4: 1f 93 push r17
11a6: cf 93 push r28
11a8: df 93 push r29
11aa: cd b7 in r28, 0x3d ; 61
11ac: de b7 in r29, 0x3e ; 62
11ae: e3 97 sbiw r28, 0x33 ; 51
11b0: 0f b6 in r0, 0x3f ; 63
11b2: f8 94 cli
11b4: de bf out 0x3e, r29 ; 62
11b6: 0f be out 0x3f, r0 ; 63
11b8: cd bf out 0x3d, r28 ; 61
11ba: 29 96 adiw r28, 0x09 ; 9
11bc: 8f ad ldd r24, Y+63 ; 0x3f
11be: 29 97 sbiw r28, 0x09 ; 9
11c0: 80 93 26 05 sts 0x0526, r24
11c4: ce 01 movw r24, r28
11c6: 85 5b subi r24, 0xB5 ; 181
11c8: 9f 4f sbci r25, 0xFF ; 255
11ca: 9d 83 std Y+5, r25 ; 0x05
11cc: 8c 83 std Y+4, r24 ; 0x04
11ce: 2b 96 adiw r28, 0x0b ; 11
11d0: 8e ad ldd r24, Y+62 ; 0x3e
11d2: 9f ad ldd r25, Y+63 ; 0x3f
11d4: 2b 97 sbiw r28, 0x0b ; 11
11d6: 9f a7 std Y+47, r25 ; 0x2f
11d8: 8e a7 std Y+46, r24 ; 0x2e
11da: 22 24 eor r2, r2
11dc: 33 24 eor r3, r3
11de: 21 01 movw r4, r2
11e0: 02 c0 rjmp .+4 ; 0x11e6 <_printf_P+0x60>
11e2: 13 01 movw r2, r6
11e4: 24 01 movw r4, r8
11e6: 0e a5 ldd r16, Y+46 ; 0x2e
11e8: 1f a5 ldd r17, Y+47 ; 0x2f
11ea: 02 c0 rjmp .+4 ; 0x11f0 <_printf_P+0x6a>
11ec: 0f 5f subi r16, 0xFF ; 255
11ee: 1f 4f sbci r17, 0xFF ; 255
11f0: f8 01 movw r30, r16
11f2: f4 90 lpm r15, Z
11f4: ff 20 and r15, r15
11f6: 19 f0 breq .+6 ; 0x11fe <_printf_P+0x78>
11f8: f5 e2 ldi r31, 0x25 ; 37
11fa: ff 16 cp r15, r31
11fc: b9 f7 brne .-18 ; 0x11ec <_printf_P+0x66>
11fe: b8 01 movw r22, r16
1200: 8e a5 ldd r24, Y+46 ; 0x2e
1202: 9f a5 ldd r25, Y+47 ; 0x2f
1204: 68 1b sub r22, r24
1206: 79 0b sbc r23, r25
1208: 11 f0 breq .+4 ; 0x120e <_printf_P+0x88>
120a: 0e 94 99 08 call 0x1132 ; 0x1132 <PRINTP>
120e: ff 20 and r15, r15
1210: 09 f4 brne .+2 ; 0x1214 <_printf_P+0x8e>
1212: 44 c2 rjmp .+1160 ; 0x169c <_printf_P+0x516>
1214: 0f 5f subi r16, 0xFF ; 255
1216: 1f 4f sbci r17, 0xFF ; 255
1218: 1f a7 std Y+47, r17 ; 0x2f
121a: 0e a7 std Y+46, r16 ; 0x2e
121c: 19 82 std Y+1, r1 ; 0x01
121e: ac 81 ldd r26, Y+4 ; 0x04
1220: bd 81 ldd r27, Y+5 ; 0x05
1222: 1b aa std Y+51, r1 ; 0x33
1224: 1a aa std Y+50, r1 ; 0x32
1226: 9f ef ldi r25, 0xFF ; 255
1228: 99 ab std Y+49, r25 ; 0x31
122a: ee a5 ldd r30, Y+46 ; 0x2e
122c: ff a5 ldd r31, Y+47 ; 0x2f
122e: cf 01 movw r24, r30
1230: 01 96 adiw r24, 0x01 ; 1
1232: 9f a7 std Y+47, r25 ; 0x2f
1234: 8e a7 std Y+46, r24 ; 0x2e
1236: b4 90 lpm r11, Z
1238: 95 e7 ldi r25, 0x75 ; 117
123a: b9 16 cp r11, r25
123c: 21 f0 breq .+8 ; 0x1246 <_printf_P+0xc0>
123e: 8b 2d mov r24, r11
1240: 80 62 ori r24, 0x20 ; 32
1242: 88 37 cpi r24, 0x78 ; 120
1244: 89 f4 brne .+34 ; 0x1268 <_printf_P+0xe2>
1246: eb a9 ldd r30, Y+51 ; 0x33
1248: e0 ff sbrs r30, 0
124a: 07 c0 rjmp .+14 ; 0x125a <_printf_P+0xd4>
124c: 2d 90 ld r2, X+
124e: 3d 90 ld r3, X+
1250: 4d 90 ld r4, X+
1252: 5c 90 ld r5, X
1254: 13 97 sbiw r26, 0x03 ; 3
1256: 14 96 adiw r26, 0x04 ; 4
1258: 07 c0 rjmp .+14 ; 0x1268 <_printf_P+0xe2>
125a: 8d 91 ld r24, X+
125c: 9c 91 ld r25, X
125e: 11 97 sbiw r26, 0x01 ; 1
1260: 1c 01 movw r2, r24
1262: 44 24 eor r4, r4
1264: 55 24 eor r5, r5
1266: 12 96 adiw r26, 0x02 ; 2
1268: f0 e2 ldi r31, 0x20 ; 32
126a: bf 16 cp r11, r31
126c: 21 f4 brne .+8 ; 0x1276 <_printf_P+0xf0>
126e: 89 81 ldd r24, Y+1 ; 0x01
1270: 88 23 and r24, r24
1272: d9 f6 brne .-74 ; 0x122a <_printf_P+0xa4>
1274: 85 c0 rjmp .+266 ; 0x1380 <_printf_P+0x1fa>
1276: 83 e2 ldi r24, 0x23 ; 35
1278: b8 16 cp r11, r24
127a: 09 f4 brne .+2 ; 0x127e <_printf_P+0xf8>
127c: 83 c0 rjmp .+262 ; 0x1384 <_printf_P+0x1fe>
127e: 9a e2 ldi r25, 0x2A ; 42
1280: b9 16 cp r11, r25
1282: 21 f0 breq .+8 ; 0x128c <_printf_P+0x106>
1284: ed e2 ldi r30, 0x2D ; 45
1286: be 16 cp r11, r30
1288: 69 f4 brne .+26 ; 0x12a4 <_printf_P+0x11e>
128a: 08 c0 rjmp .+16 ; 0x129c <_printf_P+0x116>
128c: fd 01 movw r30, r26
128e: 12 96 adiw r26, 0x02 ; 2
1290: e0 81 ld r30, Z
1292: ea ab std Y+50, r30 ; 0x32
1294: e7 ff sbrs r30, 7
1296: c9 cf rjmp .-110 ; 0x122a <_printf_P+0xa4>
1298: e1 95 neg r30
129a: ea ab std Y+50, r30 ; 0x32
129c: fb a9 ldd r31, Y+51 ; 0x33
129e: f0 61 ori r31, 0x10 ; 16
12a0: ff 7d andi r31, 0xDF ; 223
12a2: 72 c0 rjmp .+228 ; 0x1388 <_printf_P+0x202>
12a4: 8b e2 ldi r24, 0x2B ; 43
12a6: b8 16 cp r11, r24
12a8: 09 f4 brne .+2 ; 0x12ac <_printf_P+0x126>
12aa: 6a c0 rjmp .+212 ; 0x1380 <_printf_P+0x1fa>
12ac: 9e e2 ldi r25, 0x2E ; 46
12ae: b9 16 cp r11, r25
12b0: b1 f5 brne .+108 ; 0x131e <_printf_P+0x198>
12b2: 2e a5 ldd r18, Y+46 ; 0x2e
12b4: 3f a5 ldd r19, Y+47 ; 0x2f
12b6: 2f 5f subi r18, 0xFF ; 255
12b8: 3f 4f sbci r19, 0xFF ; 255
12ba: ee a5 ldd r30, Y+46 ; 0x2e
12bc: ff a5 ldd r31, Y+47 ; 0x2f
12be: 84 91 lpm r24, Z
12c0: 8a 32 cpi r24, 0x2A ; 42
12c2: 21 f0 breq .+8 ; 0x12cc <_printf_P+0x146>
12c4: b8 2e mov r11, r24
12c6: 20 e0 ldi r18, 0x00 ; 0
12c8: 30 e0 ldi r19, 0x00 ; 0
12ca: 1b c0 rjmp .+54 ; 0x1302 <_printf_P+0x17c>
12cc: fd 01 movw r30, r26
12ce: 12 96 adiw r26, 0x02 ; 2
12d0: 40 81 ld r20, Z
12d2: 51 81 ldd r21, Z+1 ; 0x01
12d4: 57 ff sbrs r21, 7
12d6: 02 c0 rjmp .+4 ; 0x12dc <_printf_P+0x156>
12d8: 4f ef ldi r20, 0xFF ; 255
12da: 5f ef ldi r21, 0xFF ; 255
12dc: 49 ab std Y+49, r20 ; 0x31
12de: 3f a7 std Y+47, r19 ; 0x2f
12e0: 2e a7 std Y+46, r18 ; 0x2e
12e2: a3 cf rjmp .-186 ; 0x122a <_printf_P+0xa4>
12e4: c9 01 movw r24, r18
12e6: 03 e0 ldi r16, 0x03 ; 3
12e8: 88 0f add r24, r24
12ea: 99 1f adc r25, r25
12ec: 0a 95 dec r16
12ee: e1 f7 brne .-8 ; 0x12e8 <_printf_P+0x162>
12f0: 22 0f add r18, r18
12f2: 33 1f adc r19, r19
12f4: 28 0f add r18, r24
12f6: 39 1f adc r19, r25
12f8: 2b 0d add r18, r11
12fa: 31 1d adc r19, r1
12fc: 20 53 subi r18, 0x30 ; 48
12fe: 30 40 sbci r19, 0x00 ; 0
1300: b4 90 lpm r11, Z
1302: 31 96 adiw r30, 0x01 ; 1
1304: 8b 2d mov r24, r11
1306: 80 53 subi r24, 0x30 ; 48
1308: 8a 30 cpi r24, 0x0A ; 10
130a: 60 f3 brcs .-40 ; 0x12e4 <_printf_P+0x15e>
130c: ff a7 std Y+47, r31 ; 0x2f
130e: ee a7 std Y+46, r30 ; 0x2e
1310: a9 01 movw r20, r18
1312: 37 ff sbrs r19, 7
1314: 02 c0 rjmp .+4 ; 0x131a <_printf_P+0x194>
1316: 4f ef ldi r20, 0xFF ; 255
1318: 5f ef ldi r21, 0xFF ; 255
131a: 49 ab std Y+49, r20 ; 0x31
131c: 8d cf rjmp .-230 ; 0x1238 <_printf_P+0xb2>
131e: f0 e3 ldi r31, 0x30 ; 48
1320: bf 16 cp r11, r31
1322: 31 f4 brne .+12 ; 0x1330 <_printf_P+0x1aa>
1324: 8b a9 ldd r24, Y+51 ; 0x33
1326: 84 fd sbrc r24, 4
1328: 80 cf rjmp .-256 ; 0x122a <_printf_P+0xa4>
132a: 80 62 ori r24, 0x20 ; 32
132c: 8b ab std Y+51, r24 ; 0x33
132e: 7d cf rjmp .-262 ; 0x122a <_printf_P+0xa4>
1330: 8b 2d mov r24, r11
1332: 81 53 subi r24, 0x31 ; 49
1334: 89 30 cpi r24, 0x09 ; 9
1336: e8 f4 brcc .+58 ; 0x1372 <_printf_P+0x1ec>
1338: 20 e0 ldi r18, 0x00 ; 0
133a: 30 e0 ldi r19, 0x00 ; 0
133c: c9 01 movw r24, r18
133e: f3 e0 ldi r31, 0x03 ; 3
1340: 88 0f add r24, r24
1342: 99 1f adc r25, r25
1344: fa 95 dec r31
1346: e1 f7 brne .-8 ; 0x1340 <_printf_P+0x1ba>
1348: 22 0f add r18, r18
134a: 33 1f adc r19, r19
134c: 28 0f add r18, r24
134e: 39 1f adc r19, r25
1350: 2b 0d add r18, r11
1352: 31 1d adc r19, r1
1354: 20 53 subi r18, 0x30 ; 48
1356: 30 40 sbci r19, 0x00 ; 0
1358: ee a5 ldd r30, Y+46 ; 0x2e
135a: ff a5 ldd r31, Y+47 ; 0x2f
135c: cf 01 movw r24, r30
135e: 01 96 adiw r24, 0x01 ; 1
1360: 9f a7 std Y+47, r25 ; 0x2f
1362: 8e a7 std Y+46, r24 ; 0x2e
1364: b4 90 lpm r11, Z
1366: 8b 2d mov r24, r11
1368: 80 53 subi r24, 0x30 ; 48
136a: 8a 30 cpi r24, 0x0A ; 10
136c: 38 f3 brcs .-50 ; 0x133c <_printf_P+0x1b6>
136e: 2a ab std Y+50, r18 ; 0x32
1370: 63 cf rjmp .-314 ; 0x1238 <_printf_P+0xb2>
1372: 98 e6 ldi r25, 0x68 ; 104
1374: b9 16 cp r11, r25
1376: 51 f4 brne .+20 ; 0x138c <_printf_P+0x206>
1378: eb a9 ldd r30, Y+51 ; 0x33
137a: e4 60 ori r30, 0x04 ; 4
137c: eb ab std Y+51, r30 ; 0x33
137e: 55 cf rjmp .-342 ; 0x122a <_printf_P+0xa4>
1380: b9 82 std Y+1, r11 ; 0x01
1382: 53 cf rjmp .-346 ; 0x122a <_printf_P+0xa4>
1384: fb a9 ldd r31, Y+51 ; 0x33
1386: f8 60 ori r31, 0x08 ; 8
1388: fb ab std Y+51, r31 ; 0x33
138a: 4f cf rjmp .-354 ; 0x122a <_printf_P+0xa4>
138c: 8c e6 ldi r24, 0x6C ; 108
138e: b8 16 cp r11, r24
1390: 21 f4 brne .+8 ; 0x139a <_printf_P+0x214>
1392: 9b a9 ldd r25, Y+51 ; 0x33
1394: 91 60 ori r25, 0x01 ; 1
1396: 9b ab std Y+51, r25 ; 0x33
1398: 48 cf rjmp .-368 ; 0x122a <_printf_P+0xa4>
139a: bd 83 std Y+5, r27 ; 0x05
139c: ac 83 std Y+4, r26 ; 0x04
139e: e3 e6 ldi r30, 0x63 ; 99
13a0: be 16 cp r11, r30
13a2: 39 f4 brne .+14 ; 0x13b2 <_printf_P+0x22c>
13a4: 12 96 adiw r26, 0x02 ; 2
13a6: bd 83 std Y+5, r27 ; 0x05
13a8: ac 83 std Y+4, r26 ; 0x04
13aa: 12 97 sbiw r26, 0x02 ; 2
13ac: 8c 91 ld r24, X
13ae: 8e 83 std Y+6, r24 ; 0x06
13b0: 1a c1 rjmp .+564 ; 0x15e6 <_printf_P+0x460>
13b2: f4 e4 ldi r31, 0x44 ; 68
13b4: bf 16 cp r11, r31
13b6: 39 f0 breq .+14 ; 0x13c6 <_printf_P+0x240>
13b8: 84 e6 ldi r24, 0x64 ; 100
13ba: b8 16 cp r11, r24
13bc: 39 f0 breq .+14 ; 0x13cc <_printf_P+0x246>
13be: 99 e6 ldi r25, 0x69 ; 105
13c0: b9 16 cp r11, r25
13c2: 59 f5 brne .+86 ; 0x141a <_printf_P+0x294>
13c4: 03 c0 rjmp .+6 ; 0x13cc <_printf_P+0x246>
13c6: eb a9 ldd r30, Y+51 ; 0x33
13c8: e1 60 ori r30, 0x01 ; 1
13ca: eb ab std Y+51, r30 ; 0x33
13cc: fb a9 ldd r31, Y+51 ; 0x33
13ce: f0 ff sbrs r31, 0
13d0: 08 c0 rjmp .+16 ; 0x13e2 <_printf_P+0x25c>
13d2: 14 96 adiw r26, 0x04 ; 4
13d4: bd 83 std Y+5, r27 ; 0x05
13d6: ac 83 std Y+4, r26 ; 0x04
13d8: 5e 90 ld r5, -X
13da: 4e 90 ld r4, -X
13dc: 3e 90 ld r3, -X
13de: 2e 90 ld r2, -X
13e0: 0a c0 rjmp .+20 ; 0x13f6 <_printf_P+0x270>
13e2: 12 96 adiw r26, 0x02 ; 2
13e4: bd 83 std Y+5, r27 ; 0x05
13e6: ac 83 std Y+4, r26 ; 0x04
13e8: 9e 91 ld r25, -X
13ea: 8e 91 ld r24, -X
13ec: 1c 01 movw r2, r24
13ee: 44 24 eor r4, r4
13f0: 37 fc sbrc r3, 7
13f2: 40 94 com r4
13f4: 54 2c mov r5, r4
13f6: 57 fc sbrc r5, 7
13f8: 03 c0 rjmp .+6 ; 0x1400 <_printf_P+0x27a>
13fa: 8a e0 ldi r24, 0x0A ; 10
13fc: 88 ab std Y+48, r24 ; 0x30
13fe: 94 c0 rjmp .+296 ; 0x1528 <_printf_P+0x3a2>
1400: 50 94 com r5
1402: 40 94 com r4
1404: 30 94 com r3
1406: 20 94 com r2
1408: 21 1c adc r2, r1
140a: 31 1c adc r3, r1
140c: 41 1c adc r4, r1
140e: 51 1c adc r5, r1
1410: 8d e2 ldi r24, 0x2D ; 45
1412: 89 83 std Y+1, r24 ; 0x01
1414: 9a e0 ldi r25, 0x0A ; 10
1416: 98 ab std Y+48, r25 ; 0x30
1418: 87 c0 rjmp .+270 ; 0x1528 <_printf_P+0x3a2>
141a: ef e4 ldi r30, 0x4F ; 79
141c: be 16 cp r11, r30
141e: 29 f0 breq .+10 ; 0x142a <_printf_P+0x2a4>
1420: ff e6 ldi r31, 0x6F ; 111
1422: bf 16 cp r11, r31
1424: 39 f4 brne .+14 ; 0x1434 <_printf_P+0x2ae>
1426: 88 e0 ldi r24, 0x08 ; 8
1428: 63 c0 rjmp .+198 ; 0x14f0 <_printf_P+0x36a>
142a: 9b a9 ldd r25, Y+51 ; 0x33
142c: 91 60 ori r25, 0x01 ; 1
142e: 9b ab std Y+51, r25 ; 0x33
1430: e8 e0 ldi r30, 0x08 ; 8
1432: 58 c0 rjmp .+176 ; 0x14e4 <_printf_P+0x35e>
1434: f0 e7 ldi r31, 0x70 ; 112
1436: bf 16 cp r11, r31
1438: 81 f4 brne .+32 ; 0x145a <_printf_P+0x2d4>
143a: 12 96 adiw r26, 0x02 ; 2
143c: bd 83 std Y+5, r27 ; 0x05
143e: ac 83 std Y+4, r26 ; 0x04
1440: 9e 91 ld r25, -X
1442: 8e 91 ld r24, -X
1444: 1c 01 movw r2, r24
1446: 44 24 eor r4, r4
1448: 55 24 eor r5, r5
144a: 8b a9 ldd r24, Y+51 ; 0x33
144c: 80 64 ori r24, 0x40 ; 64
144e: 8b ab std Y+51, r24 ; 0x33
1450: 90 e1 ldi r25, 0x10 ; 16
1452: 98 ab std Y+48, r25 ; 0x30
1454: 78 e7 ldi r23, 0x78 ; 120
1456: b7 2e mov r11, r23
1458: 66 c0 rjmp .+204 ; 0x1526 <_printf_P+0x3a0>
145a: e3 e7 ldi r30, 0x73 ; 115
145c: be 16 cp r11, r30
145e: d9 f5 brne .+118 ; 0x14d6 <_printf_P+0x350>
1460: 12 96 adiw r26, 0x02 ; 2
1462: bd 83 std Y+5, r27 ; 0x05
1464: ac 83 std Y+4, r26 ; 0x04
1466: de 90 ld r13, -X
1468: ce 90 ld r12, -X
146a: c1 14 cp r12, r1
146c: d1 04 cpc r13, r1
146e: 89 f4 brne .+34 ; 0x1492 <_printf_P+0x30c>
1470: 88 e2 ldi r24, 0x28 ; 40
1472: 8e 83 std Y+6, r24 ; 0x06
1474: 8e e6 ldi r24, 0x6E ; 110
1476: 8f 83 std Y+7, r24 ; 0x07
1478: 85 e7 ldi r24, 0x75 ; 117
147a: 88 87 std Y+8, r24 ; 0x08
147c: 8c e6 ldi r24, 0x6C ; 108
147e: 89 87 std Y+9, r24 ; 0x09
1480: 8a 87 std Y+10, r24 ; 0x0a
1482: 89 e2 ldi r24, 0x29 ; 41
1484: 8b 87 std Y+11, r24 ; 0x0b
1486: 1c 86 std Y+12, r1 ; 0x0c
1488: 66 e0 ldi r22, 0x06 ; 6
148a: c6 2e mov r12, r22
148c: d1 2c mov r13, r1
148e: cc 0e add r12, r28
1490: dd 1e adc r13, r29
1492: f9 a9 ldd r31, Y+49 ; 0x31
1494: f7 fd sbrc r31, 7
1496: 13 c0 rjmp .+38 ; 0x14be <_printf_P+0x338>
1498: 4f 2f mov r20, r31
149a: 55 27 eor r21, r21
149c: 47 fd sbrc r20, 7
149e: 50 95 com r21
14a0: 60 e0 ldi r22, 0x00 ; 0
14a2: 70 e0 ldi r23, 0x00 ; 0
14a4: c6 01 movw r24, r12
14a6: 0e 94 d1 2a call 0x55a2 ; 0x55a2 <memchr>
14aa: 00 97 sbiw r24, 0x00 ; 0
14ac: 11 f4 brne .+4 ; 0x14b2 <_printf_P+0x32c>
14ae: 19 a9 ldd r17, Y+49 ; 0x31
14b0: 0d c0 rjmp .+26 ; 0x14cc <_printf_P+0x346>
14b2: 8c 19 sub r24, r12
14b4: 19 a9 ldd r17, Y+49 ; 0x31
14b6: 81 17 cp r24, r17
14b8: 4c f4 brge .+18 ; 0x14cc <_printf_P+0x346>
14ba: 18 2f mov r17, r24
14bc: 07 c0 rjmp .+14 ; 0x14cc <_printf_P+0x346>
14be: f6 01 movw r30, r12
14c0: 01 90 ld r0, Z+
14c2: 00 20 and r0, r0
14c4: e9 f7 brne .-6 ; 0x14c0 <_printf_P+0x33a>
14c6: 31 97 sbiw r30, 0x01 ; 1
14c8: 1e 2f mov r17, r30
14ca: 1c 19 sub r17, r12
14cc: 19 82 std Y+1, r1 ; 0x01
14ce: 42 01 movw r8, r4
14d0: 31 01 movw r6, r2
14d2: 40 e0 ldi r20, 0x00 ; 0
14d4: 94 c0 rjmp .+296 ; 0x15fe <_printf_P+0x478>
14d6: 85 e5 ldi r24, 0x55 ; 85
14d8: b8 16 cp r11, r24
14da: 31 f0 breq .+12 ; 0x14e8 <_printf_P+0x362>
14dc: 95 e7 ldi r25, 0x75 ; 117
14de: b9 16 cp r11, r25
14e0: 49 f4 brne .+18 ; 0x14f4 <_printf_P+0x36e>
14e2: ea e0 ldi r30, 0x0A ; 10
14e4: e8 ab std Y+48, r30 ; 0x30
14e6: 1f c0 rjmp .+62 ; 0x1526 <_printf_P+0x3a0>
14e8: fb a9 ldd r31, Y+51 ; 0x33
14ea: f1 60 ori r31, 0x01 ; 1
14ec: fb ab std Y+51, r31 ; 0x33
14ee: 8a e0 ldi r24, 0x0A ; 10
14f0: 88 ab std Y+48, r24 ; 0x30
14f2: 19 c0 rjmp .+50 ; 0x1526 <_printf_P+0x3a0>
14f4: 98 e5 ldi r25, 0x58 ; 88
14f6: b9 16 cp r11, r25
14f8: 21 f0 breq .+8 ; 0x1502 <_printf_P+0x37c>
14fa: e8 e7 ldi r30, 0x78 ; 120
14fc: be 16 cp r11, r30
14fe: 09 f0 breq .+2 ; 0x1502 <_printf_P+0x37c>
1500: 6e c0 rjmp .+220 ; 0x15de <_printf_P+0x458>
1502: fb a9 ldd r31, Y+51 ; 0x33
1504: f3 fd sbrc r31, 3
1506: 02 c0 rjmp .+4 ; 0x150c <_printf_P+0x386>
1508: 80 e1 ldi r24, 0x10 ; 16
150a: f2 cf rjmp .-28 ; 0x14f0 <_printf_P+0x36a>
150c: 21 14 cp r2, r1
150e: 31 04 cpc r3, r1
1510: 41 04 cpc r4, r1
1512: 51 04 cpc r5, r1
1514: 19 f4 brne .+6 ; 0x151c <_printf_P+0x396>
1516: 90 e1 ldi r25, 0x10 ; 16
1518: 98 ab std Y+48, r25 ; 0x30
151a: 05 c0 rjmp .+10 ; 0x1526 <_printf_P+0x3a0>
151c: eb a9 ldd r30, Y+51 ; 0x33
151e: e0 64 ori r30, 0x40 ; 64
1520: eb ab std Y+51, r30 ; 0x33
1522: f0 e1 ldi r31, 0x10 ; 16
1524: f8 ab std Y+48, r31 ; 0x30
1526: 19 82 std Y+1, r1 ; 0x01
1528: 89 a9 ldd r24, Y+49 ; 0x31
152a: 87 fd sbrc r24, 7
152c: 03 c0 rjmp .+6 ; 0x1534 <_printf_P+0x3ae>
152e: 9b a9 ldd r25, Y+51 ; 0x33
1530: 9f 7d andi r25, 0xDF ; 223
1532: 9b ab std Y+51, r25 ; 0x33
1534: 21 14 cp r2, r1
1536: 31 04 cpc r3, r1
1538: 41 04 cpc r4, r1
153a: 51 04 cpc r5, r1
153c: 61 f4 brne .+24 ; 0x1556 <_printf_P+0x3d0>
153e: e9 a9 ldd r30, Y+49 ; 0x31
1540: ee 23 and r30, r30
1542: 49 f4 brne .+18 ; 0x1556 <_printf_P+0x3d0>
1544: 66 24 eor r6, r6
1546: 77 24 eor r7, r7
1548: 43 01 movw r8, r6
154a: 5e e2 ldi r21, 0x2E ; 46
154c: c5 2e mov r12, r21
154e: d1 2c mov r13, r1
1550: cc 0e add r12, r28
1552: dd 1e adc r13, r29
1554: 3e c0 rjmp .+124 ; 0x15d2 <_printf_P+0x44c>
1556: 4e e2 ldi r20, 0x2E ; 46
1558: c4 2e mov r12, r20
155a: d1 2c mov r13, r1
155c: cc 0e add r12, r28
155e: dd 1e adc r13, r29
1560: f8 a9 ldd r31, Y+48 ; 0x30
1562: ef 2e mov r14, r31
1564: ff 24 eor r15, r15
1566: 00 27 eor r16, r16
1568: 11 27 eor r17, r17
156a: c2 01 movw r24, r4
156c: b1 01 movw r22, r2
156e: a8 01 movw r20, r16
1570: 97 01 movw r18, r14
1572: 0e 94 e6 2c call 0x59cc ; 0x59cc <__udivmodsi4>
1576: 6a 30 cpi r22, 0x0A ; 10
1578: 20 f4 brcc .+8 ; 0x1582 <_printf_P+0x3fc>
157a: 30 e3 ldi r19, 0x30 ; 48
157c: a3 2e mov r10, r19
157e: a6 0e add r10, r22
1580: 08 c0 rjmp .+16 ; 0x1592 <_printf_P+0x40c>
1582: 27 e5 ldi r18, 0x57 ; 87
1584: a2 2e mov r10, r18
1586: a6 0e add r10, r22
1588: 88 e5 ldi r24, 0x58 ; 88
158a: b8 16 cp r11, r24
158c: 11 f4 brne .+4 ; 0x1592 <_printf_P+0x40c>
158e: 9f ed ldi r25, 0xDF ; 223
1590: a9 22 and r10, r25
1592: f6 01 movw r30, r12
1594: a2 92 st -Z, r10
1596: 6f 01 movw r12, r30
1598: c2 01 movw r24, r4
159a: b1 01 movw r22, r2
159c: a8 01 movw r20, r16
159e: 97 01 movw r18, r14
15a0: 0e 94 e6 2c call 0x59cc ; 0x59cc <__udivmodsi4>
15a4: 39 01 movw r6, r18
15a6: 4a 01 movw r8, r20
15a8: 2e 14 cp r2, r14
15aa: 3f 04 cpc r3, r15
15ac: 40 06 cpc r4, r16
15ae: 51 06 cpc r5, r17
15b0: 18 f0 brcs .+6 ; 0x15b8 <_printf_P+0x432>
15b2: 19 01 movw r2, r18
15b4: 2a 01 movw r4, r20
15b6: d9 cf rjmp .-78 ; 0x156a <_printf_P+0x3e4>
15b8: f8 a9 ldd r31, Y+48 ; 0x30
15ba: f8 30 cpi r31, 0x08 ; 8
15bc: 51 f4 brne .+20 ; 0x15d2 <_printf_P+0x44c>
15be: 8b a9 ldd r24, Y+51 ; 0x33
15c0: 83 ff sbrs r24, 3
15c2: 07 c0 rjmp .+14 ; 0x15d2 <_printf_P+0x44c>
15c4: 90 e3 ldi r25, 0x30 ; 48
15c6: a9 16 cp r10, r25
15c8: 21 f0 breq .+8 ; 0x15d2 <_printf_P+0x44c>
15ca: 80 e3 ldi r24, 0x30 ; 48
15cc: f6 01 movw r30, r12
15ce: 82 93 st -Z, r24
15d0: 6f 01 movw r12, r30
15d2: ce 01 movw r24, r28
15d4: 8c 19 sub r24, r12
15d6: 18 2f mov r17, r24
15d8: 12 5d subi r17, 0xD2 ; 210
15da: 49 a9 ldd r20, Y+49 ; 0x31
15dc: 10 c0 rjmp .+32 ; 0x15fe <_printf_P+0x478>
15de: bb 20 and r11, r11
15e0: 09 f4 brne .+2 ; 0x15e4 <_printf_P+0x45e>
15e2: 5c c0 rjmp .+184 ; 0x169c <_printf_P+0x516>
15e4: be 82 std Y+6, r11 ; 0x06
15e6: 19 82 std Y+1, r1 ; 0x01
15e8: 42 01 movw r8, r4
15ea: 31 01 movw r6, r2
15ec: 00 e0 ldi r16, 0x00 ; 0
15ee: 11 e0 ldi r17, 0x01 ; 1
15f0: 96 e0 ldi r25, 0x06 ; 6
15f2: c9 2e mov r12, r25
15f4: d1 2c mov r13, r1
15f6: cc 0e add r12, r28
15f8: dd 1e adc r13, r29
15fa: 21 e0 ldi r18, 0x01 ; 1
15fc: 05 c0 rjmp .+10 ; 0x1608 <_printf_P+0x482>
15fe: 21 2f mov r18, r17
1600: 04 2f mov r16, r20
1602: 01 1b sub r16, r17
1604: 07 fd sbrc r16, 7
1606: 00 e0 ldi r16, 0x00 ; 0
1608: 89 81 ldd r24, Y+1 ; 0x01
160a: 88 23 and r24, r24
160c: 19 f0 breq .+6 ; 0x1614 <_printf_P+0x48e>
160e: 81 2f mov r24, r17
1610: 8f 5f subi r24, 0xFF ; 255
1612: 07 c0 rjmp .+14 ; 0x1622 <_printf_P+0x49c>
1614: 9b a9 ldd r25, Y+51 ; 0x33
1616: 96 fd sbrc r25, 6
1618: 02 c0 rjmp .+4 ; 0x161e <_printf_P+0x498>
161a: 81 2f mov r24, r17
161c: 02 c0 rjmp .+4 ; 0x1622 <_printf_P+0x49c>
161e: 82 2f mov r24, r18
1620: 8e 5f subi r24, 0xFE ; 254
1622: a8 2e mov r10, r24
1624: a0 0e add r10, r16
1626: eb a9 ldd r30, Y+51 ; 0x33
1628: ee 2e mov r14, r30
162a: ff 24 eor r15, r15
162c: 80 e3 ldi r24, 0x30 ; 48
162e: 48 2e mov r4, r24
1630: 51 2c mov r5, r1
1632: 4e 20 and r4, r14
1634: 5f 20 and r5, r15
1636: 41 14 cp r4, r1
1638: 51 04 cpc r5, r1
163a: 21 f4 brne .+8 ; 0x1644 <_printf_P+0x4be>
163c: 8a a9 ldd r24, Y+50 ; 0x32
163e: 8a 19 sub r24, r10
1640: 0e 94 8e 08 call 0x111c ; 0x111c <PAD_SP>
1644: 89 81 ldd r24, Y+1 ; 0x01
1646: 88 23 and r24, r24
1648: 29 f0 breq .+10 ; 0x1654 <_printf_P+0x4ce>
164a: 61 e0 ldi r22, 0x01 ; 1
164c: 70 e0 ldi r23, 0x00 ; 0
164e: ce 01 movw r24, r28
1650: 01 96 adiw r24, 0x01 ; 1
1652: 09 c0 rjmp .+18 ; 0x1666 <_printf_P+0x4e0>
1654: e6 fe sbrs r14, 6
1656: 09 c0 rjmp .+18 ; 0x166a <_printf_P+0x4e4>
1658: 80 e3 ldi r24, 0x30 ; 48
165a: 8a 83 std Y+2, r24 ; 0x02
165c: bb 82 std Y+3, r11 ; 0x03
165e: 62 e0 ldi r22, 0x02 ; 2
1660: 70 e0 ldi r23, 0x00 ; 0
1662: ce 01 movw r24, r28
1664: 02 96 adiw r24, 0x02 ; 2
1666: 0e 94 af 08 call 0x115e ; 0x115e <PRINT>
166a: f0 e2 ldi r31, 0x20 ; 32
166c: 4f 16 cp r4, r31
166e: 51 04 cpc r5, r1
1670: 21 f4 brne .+8 ; 0x167a <_printf_P+0x4f4>
1672: 8a a9 ldd r24, Y+50 ; 0x32
1674: 8a 19 sub r24, r10
1676: 0e 94 83 08 call 0x1106 ; 0x1106 <PAD_0>
167a: 80 2f mov r24, r16
167c: 0e 94 83 08 call 0x1106 ; 0x1106 <PAD_0>
1680: 61 2f mov r22, r17
1682: 77 27 eor r23, r23
1684: 67 fd sbrc r22, 7
1686: 70 95 com r23
1688: c6 01 movw r24, r12
168a: 0e 94 af 08 call 0x115e ; 0x115e <PRINT>
168e: e4 fe sbrs r14, 4
1690: a8 cd rjmp .-1200 ; 0x11e2 <_printf_P+0x5c>
1692: 8a a9 ldd r24, Y+50 ; 0x32
1694: 8a 19 sub r24, r10
1696: 0e 94 8e 08 call 0x111c ; 0x111c <PAD_SP>
169a: a3 cd rjmp .-1210 ; 0x11e2 <_printf_P+0x5c>
169c: e3 96 adiw r28, 0x33 ; 51
169e: 0f b6 in r0, 0x3f ; 63
16a0: f8 94 cli
16a2: de bf out 0x3e, r29 ; 62
16a4: 0f be out 0x3f, r0 ; 63
16a6: cd bf out 0x3d, r28 ; 61
16a8: df 91 pop r29
16aa: cf 91 pop r28
16ac: 1f 91 pop r17
16ae: 0f 91 pop r16
16b0: ff 90 pop r15
16b2: ef 90 pop r14
16b4: df 90 pop r13
16b6: cf 90 pop r12
16b8: bf 90 pop r11
16ba: af 90 pop r10
16bc: 9f 90 pop r9
16be: 8f 90 pop r8
16c0: 7f 90 pop r7
16c2: 6f 90 pop r6
16c4: 5f 90 pop r5
16c6: 4f 90 pop r4
16c8: 3f 90 pop r3
16ca: 2f 90 pop r2
16cc: 08 95 ret
 
000016ce <__vector_18>:
16ce: 1f 92 push r1
16d0: 0f 92 push r0
16d2: 0f b6 in r0, 0x3f ; 63
16d4: 0f 92 push r0
16d6: 11 24 eor r1, r1
16d8: 2f 93 push r18
16da: 3f 93 push r19
16dc: 5f 93 push r21
16de: 6f 93 push r22
16e0: 7f 93 push r23
16e2: 8f 93 push r24
16e4: 9f 93 push r25
16e6: af 93 push r26
16e8: bf 93 push r27
16ea: 80 91 af 01 lds r24, 0x01AF
16ee: 81 50 subi r24, 0x01 ; 1
16f0: 80 93 af 01 sts 0x01AF, r24
16f4: 8f 3f cpi r24, 0xFF ; 255
16f6: 01 f5 brne .+64 ; 0x1738 <__vector_18+0x6a>
16f8: 89 e0 ldi r24, 0x09 ; 9
16fa: 80 93 af 01 sts 0x01AF, r24
16fe: 80 91 03 01 lds r24, 0x0103
1702: 8f 5f subi r24, 0xFF ; 255
1704: 81 70 andi r24, 0x01 ; 1
1706: 80 93 03 01 sts 0x0103, r24
170a: 88 23 and r24, r24
170c: 19 f4 brne .+6 ; 0x1714 <__vector_18+0x46>
170e: 81 e0 ldi r24, 0x01 ; 1
1710: 80 93 a8 01 sts 0x01A8, r24
1714: 80 91 a6 01 lds r24, 0x01A6
1718: 90 91 a7 01 lds r25, 0x01A7
171c: 01 96 adiw r24, 0x01 ; 1
171e: 90 93 a7 01 sts 0x01A7, r25
1722: 80 93 a6 01 sts 0x01A6, r24
1726: 80 91 d6 01 lds r24, 0x01D6
172a: 88 23 and r24, r24
172c: 29 f0 breq .+10 ; 0x1738 <__vector_18+0x6a>
172e: 80 91 d6 01 lds r24, 0x01D6
1732: 81 50 subi r24, 0x01 ; 1
1734: 80 93 d6 01 sts 0x01D6, r24
1738: 80 91 ab 01 lds r24, 0x01AB
173c: 90 91 ac 01 lds r25, 0x01AC
1740: 02 97 sbiw r24, 0x02 ; 2
1742: 58 f0 brcs .+22 ; 0x175a <__vector_18+0x8c>
1744: 80 91 ab 01 lds r24, 0x01AB
1748: 90 91 ac 01 lds r25, 0x01AC
174c: 01 97 sbiw r24, 0x01 ; 1
174e: 90 93 ac 01 sts 0x01AC, r25
1752: 80 93 ab 01 sts 0x01AB, r24
1756: 5a 9a sbi 0x0b, 2 ; 11
1758: 01 c0 rjmp .+2 ; 0x175c <__vector_18+0x8e>
175a: 5a 98 cbi 0x0b, 2 ; 11
175c: 80 91 75 05 lds r24, 0x0575
1760: 83 ff sbrs r24, 3
1762: 3b c0 rjmp .+118 ; 0x17da <__vector_18+0x10c>
1764: 34 9b sbis 0x06, 4 ; 6
1766: 0a c0 rjmp .+20 ; 0x177c <__vector_18+0xae>
1768: 80 91 a9 01 lds r24, 0x01A9
176c: 90 91 aa 01 lds r25, 0x01AA
1770: 01 96 adiw r24, 0x01 ; 1
1772: 90 93 aa 01 sts 0x01AA, r25
1776: 80 93 a9 01 sts 0x01A9, r24
177a: 2f c0 rjmp .+94 ; 0x17da <__vector_18+0x10c>
177c: 80 91 a9 01 lds r24, 0x01A9
1780: 90 91 aa 01 lds r25, 0x01AA
1784: 89 2b or r24, r25
1786: 79 f0 breq .+30 ; 0x17a6 <__vector_18+0xd8>
1788: 80 91 a9 01 lds r24, 0x01A9
178c: 90 91 aa 01 lds r25, 0x01AA
1790: 80 5a subi r24, 0xA0 ; 160
1792: 9f 40 sbci r25, 0x0F ; 15
1794: 40 f4 brcc .+16 ; 0x17a6 <__vector_18+0xd8>
1796: 80 91 a9 01 lds r24, 0x01A9
179a: 90 91 aa 01 lds r25, 0x01AA
179e: 90 93 18 02 sts 0x0218, r25
17a2: 80 93 17 02 sts 0x0217, r24
17a6: 80 91 17 02 lds r24, 0x0217
17aa: 90 91 18 02 lds r25, 0x0218
17ae: 20 91 19 02 lds r18, 0x0219
17b2: 30 91 1a 02 lds r19, 0x021A
17b6: 82 1b sub r24, r18
17b8: 93 0b sbc r25, r19
17ba: 84 5e subi r24, 0xE4 ; 228
17bc: 9d 4f sbci r25, 0xFD ; 253
17be: 68 e6 ldi r22, 0x68 ; 104
17c0: 71 e0 ldi r23, 0x01 ; 1
17c2: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
17c6: 84 5b subi r24, 0xB4 ; 180
17c8: 90 40 sbci r25, 0x00 ; 0
17ca: 90 93 1c 02 sts 0x021C, r25
17ce: 80 93 1b 02 sts 0x021B, r24
17d2: 10 92 aa 01 sts 0x01AA, r1
17d6: 10 92 a9 01 sts 0x01A9, r1
17da: bf 91 pop r27
17dc: af 91 pop r26
17de: 9f 91 pop r25
17e0: 8f 91 pop r24
17e2: 7f 91 pop r23
17e4: 6f 91 pop r22
17e6: 5f 91 pop r21
17e8: 3f 91 pop r19
17ea: 2f 91 pop r18
17ec: 0f 90 pop r0
17ee: 0f be out 0x3f, r0 ; 63
17f0: 0f 90 pop r0
17f2: 1f 90 pop r1
17f4: 18 95 reti
 
000017f6 <SetDelay>:
17f6: 20 91 a6 01 lds r18, 0x01A6
17fa: 30 91 a7 01 lds r19, 0x01A7
17fe: 2f 5f subi r18, 0xFF ; 255
1800: 3f 4f sbci r19, 0xFF ; 255
1802: 82 0f add r24, r18
1804: 93 1f adc r25, r19
1806: 08 95 ret
 
00001808 <CheckDelay>:
1808: 20 91 a6 01 lds r18, 0x01A6
180c: 30 91 a7 01 lds r19, 0x01A7
1810: 82 1b sub r24, r18
1812: 93 0b sbc r25, r19
1814: 89 2f mov r24, r25
1816: 99 27 eor r25, r25
1818: 86 95 lsr r24
181a: 80 74 andi r24, 0x40 ; 64
181c: 99 27 eor r25, r25
181e: 08 95 ret
 
00001820 <__vector_9>:
1820: 1f 92 push r1
1822: 0f 92 push r0
1824: 0f b6 in r0, 0x3f ; 63
1826: 0f 92 push r0
1828: 11 24 eor r1, r1
182a: ef 92 push r14
182c: ff 92 push r15
182e: 0f 93 push r16
1830: 1f 93 push r17
1832: 2f 93 push r18
1834: 3f 93 push r19
1836: 4f 93 push r20
1838: 5f 93 push r21
183a: 6f 93 push r22
183c: 7f 93 push r23
183e: 8f 93 push r24
1840: 9f 93 push r25
1842: af 93 push r26
1844: bf 93 push r27
1846: cf 93 push r28
1848: df 93 push r29
184a: ef 93 push r30
184c: ff 93 push r31
184e: 80 91 02 01 lds r24, 0x0102
1852: 81 50 subi r24, 0x01 ; 1
1854: 80 93 02 01 sts 0x0102, r24
1858: 8f 3f cpi r24, 0xFF ; 255
185a: 09 f0 breq .+2 ; 0x185e <__vector_9+0x3e>
185c: 73 c0 rjmp .+230 ; 0x1944 <__vector_9+0x124>
185e: 83 e8 ldi r24, 0x83 ; 131
1860: 80 93 b0 00 sts 0x00B0, r24
1864: 80 91 89 01 lds r24, 0x0189
1868: c8 2f mov r28, r24
186a: dd 27 eor r29, r29
186c: d0 93 ae 01 sts 0x01AE, r29
1870: c0 93 ad 01 sts 0x01AD, r28
1874: 80 91 93 05 lds r24, 0x0593
1878: e0 90 8f 05 lds r14, 0x058F
187c: 80 ff sbrs r24, 0
187e: 1e c0 rjmp .+60 ; 0x18bc <__vector_9+0x9c>
1880: 60 91 e7 01 lds r22, 0x01E7
1884: 70 91 e8 01 lds r23, 0x01E8
1888: 80 91 e9 01 lds r24, 0x01E9
188c: 90 91 ea 01 lds r25, 0x01EA
1890: ff 24 eor r15, r15
1892: 00 27 eor r16, r16
1894: 11 27 eor r17, r17
1896: 20 e8 ldi r18, 0x80 ; 128
1898: 30 e0 ldi r19, 0x00 ; 0
189a: 40 e0 ldi r20, 0x00 ; 0
189c: 50 e0 ldi r21, 0x00 ; 0
189e: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
18a2: c8 01 movw r24, r16
18a4: b7 01 movw r22, r14
18a6: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
18aa: 20 e0 ldi r18, 0x00 ; 0
18ac: 32 e0 ldi r19, 0x02 ; 2
18ae: 40 e0 ldi r20, 0x00 ; 0
18b0: 50 e0 ldi r21, 0x00 ; 0
18b2: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
18b6: c2 0f add r28, r18
18b8: d3 1f adc r29, r19
18ba: 1d c0 rjmp .+58 ; 0x18f6 <__vector_9+0xd6>
18bc: 60 91 e7 01 lds r22, 0x01E7
18c0: 70 91 e8 01 lds r23, 0x01E8
18c4: 80 91 e9 01 lds r24, 0x01E9
18c8: 90 91 ea 01 lds r25, 0x01EA
18cc: ff 24 eor r15, r15
18ce: 00 27 eor r16, r16
18d0: 11 27 eor r17, r17
18d2: 20 e8 ldi r18, 0x80 ; 128
18d4: 30 e0 ldi r19, 0x00 ; 0
18d6: 40 e0 ldi r20, 0x00 ; 0
18d8: 50 e0 ldi r21, 0x00 ; 0
18da: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
18de: c8 01 movw r24, r16
18e0: b7 01 movw r22, r14
18e2: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
18e6: 20 e0 ldi r18, 0x00 ; 0
18e8: 32 e0 ldi r19, 0x02 ; 2
18ea: 40 e0 ldi r20, 0x00 ; 0
18ec: 50 e0 ldi r21, 0x00 ; 0
18ee: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
18f2: c2 1b sub r28, r18
18f4: d3 0b sbc r29, r19
18f6: d0 93 ae 01 sts 0x01AE, r29
18fa: c0 93 ad 01 sts 0x01AD, r28
18fe: 20 91 ad 01 lds r18, 0x01AD
1902: 30 91 ae 01 lds r19, 0x01AE
1906: 80 91 90 05 lds r24, 0x0590
190a: 99 27 eor r25, r25
190c: 28 17 cp r18, r24
190e: 39 07 cpc r19, r25
1910: 34 f0 brlt .+12 ; 0x191e <__vector_9+0xfe>
1912: 80 91 91 05 lds r24, 0x0591
1916: 99 27 eor r25, r25
1918: 82 17 cp r24, r18
191a: 93 07 cpc r25, r19
191c: 24 f4 brge .+8 ; 0x1926 <__vector_9+0x106>
191e: 90 93 ae 01 sts 0x01AE, r25
1922: 80 93 ad 01 sts 0x01AD, r24
1926: 80 91 ad 01 lds r24, 0x01AD
192a: 90 91 ae 01 lds r25, 0x01AE
192e: 90 93 ff 04 sts 0x04FF, r25
1932: 80 93 fe 04 sts 0x04FE, r24
1936: 80 93 b3 00 sts 0x00B3, r24
193a: 80 91 92 05 lds r24, 0x0592
193e: 80 93 02 01 sts 0x0102, r24
1942: 04 c0 rjmp .+8 ; 0x194c <__vector_9+0x12c>
1944: 83 e0 ldi r24, 0x03 ; 3
1946: 80 93 b0 00 sts 0x00B0, r24
194a: 5f 98 cbi 0x0b, 7 ; 11
194c: ff 91 pop r31
194e: ef 91 pop r30
1950: df 91 pop r29
1952: cf 91 pop r28
1954: bf 91 pop r27
1956: af 91 pop r26
1958: 9f 91 pop r25
195a: 8f 91 pop r24
195c: 7f 91 pop r23
195e: 6f 91 pop r22
1960: 5f 91 pop r21
1962: 4f 91 pop r20
1964: 3f 91 pop r19
1966: 2f 91 pop r18
1968: 1f 91 pop r17
196a: 0f 91 pop r16
196c: ff 90 pop r15
196e: ef 90 pop r14
1970: 0f 90 pop r0
1972: 0f be out 0x3f, r0 ; 63
1974: 0f 90 pop r0
1976: 1f 90 pop r1
1978: 18 95 reti
 
0000197a <Timer_Init>:
197a: 80 91 a6 01 lds r24, 0x01A6
197e: 90 91 a7 01 lds r25, 0x01A7
1982: 0b 96 adiw r24, 0x0b ; 11
1984: 90 93 b1 01 sts 0x01B1, r25
1988: 80 93 b0 01 sts 0x01B0, r24
198c: 82 e0 ldi r24, 0x02 ; 2
198e: 85 bd out 0x25, r24 ; 37
1990: 83 ea ldi r24, 0xA3 ; 163
1992: 84 bd out 0x24, r24 ; 36
1994: 17 bc out 0x27, r1 ; 39
1996: 88 e7 ldi r24, 0x78 ; 120
1998: 88 bd out 0x28, r24 ; 40
199a: 96 e0 ldi r25, 0x06 ; 6
199c: 96 bd out 0x26, r25 ; 38
199e: 83 ec ldi r24, 0xC3 ; 195
19a0: 80 93 b0 00 sts 0x00B0, r24
19a4: 90 93 b1 00 sts 0x00B1, r25
19a8: e0 e7 ldi r30, 0x70 ; 112
19aa: f0 e0 ldi r31, 0x00 ; 0
19ac: 80 81 ld r24, Z
19ae: 82 60 ori r24, 0x02 ; 2
19b0: 80 83 st Z, r24
19b2: ee e6 ldi r30, 0x6E ; 110
19b4: f0 e0 ldi r31, 0x00 ; 0
19b6: 80 81 ld r24, Z
19b8: 81 60 ori r24, 0x01 ; 1
19ba: 80 83 st Z, r24
19bc: 8a e0 ldi r24, 0x0A ; 10
19be: 80 93 b3 00 sts 0x00B3, r24
19c2: 10 92 b2 00 sts 0x00B2, r1
19c6: 08 95 ret
 
000019c8 <Delay_ms>:
19c8: 20 91 a6 01 lds r18, 0x01A6
19cc: 30 91 a7 01 lds r19, 0x01A7
19d0: 2f 5f subi r18, 0xFF ; 255
19d2: 3f 4f sbci r19, 0xFF ; 255
19d4: 28 0f add r18, r24
19d6: 39 1f adc r19, r25
19d8: 80 91 a6 01 lds r24, 0x01A6
19dc: 90 91 a7 01 lds r25, 0x01A7
19e0: a9 01 movw r20, r18
19e2: 48 1b sub r20, r24
19e4: 59 0b sbc r21, r25
19e6: 57 ff sbrs r21, 7
19e8: f7 cf rjmp .-18 ; 0x19d8 <Delay_ms+0x10>
19ea: 08 95 ret
 
000019ec <ADC_Init>:
19ec: 10 92 7c 00 sts 0x007C, r1
19f0: 8f ee ldi r24, 0xEF ; 239
19f2: 80 93 7a 00 sts 0x007A, r24
19f6: 08 95 ret
 
000019f8 <__vector_24>:
19f8: 1f 92 push r1
19fa: 0f 92 push r0
19fc: 0f b6 in r0, 0x3f ; 63
19fe: 0f 92 push r0
1a00: 11 24 eor r1, r1
1a02: ef 92 push r14
1a04: ff 92 push r15
1a06: 0f 93 push r16
1a08: 1f 93 push r17
1a0a: 2f 93 push r18
1a0c: 3f 93 push r19
1a0e: 4f 93 push r20
1a10: 5f 93 push r21
1a12: 6f 93 push r22
1a14: 7f 93 push r23
1a16: 8f 93 push r24
1a18: 9f 93 push r25
1a1a: af 93 push r26
1a1c: bf 93 push r27
1a1e: cf 93 push r28
1a20: df 93 push r29
1a22: ef 93 push r30
1a24: ff 93 push r31
1a26: 10 92 7a 00 sts 0x007A, r1
1a2a: 40 91 c8 01 lds r20, 0x01C8
1a2e: 4f 5f subi r20, 0xFF ; 255
1a30: 40 93 c8 01 sts 0x01C8, r20
1a34: 41 50 subi r20, 0x01 ; 1
1a36: 43 30 cpi r20, 0x03 ; 3
1a38: 09 f4 brne .+2 ; 0x1a3c <__vector_24+0x44>
1a3a: 1c c1 rjmp .+568 ; 0x1c74 <__vector_24+0x27c>
1a3c: 44 30 cpi r20, 0x04 ; 4
1a3e: 38 f4 brcc .+14 ; 0x1a4e <__vector_24+0x56>
1a40: 41 30 cpi r20, 0x01 ; 1
1a42: 09 f4 brne .+2 ; 0x1a46 <__vector_24+0x4e>
1a44: 63 c0 rjmp .+198 ; 0x1b0c <__vector_24+0x114>
1a46: 42 30 cpi r20, 0x02 ; 2
1a48: 08 f0 brcs .+2 ; 0x1a4c <__vector_24+0x54>
1a4a: b9 c0 rjmp .+370 ; 0x1bbe <__vector_24+0x1c6>
1a4c: 0d c0 rjmp .+26 ; 0x1a68 <__vector_24+0x70>
1a4e: 45 30 cpi r20, 0x05 ; 5
1a50: 09 f4 brne .+2 ; 0x1a54 <__vector_24+0x5c>
1a52: 50 c1 rjmp .+672 ; 0x1cf4 <__vector_24+0x2fc>
1a54: 45 30 cpi r20, 0x05 ; 5
1a56: 08 f4 brcc .+2 ; 0x1a5a <__vector_24+0x62>
1a58: 2a c1 rjmp .+596 ; 0x1cae <__vector_24+0x2b6>
1a5a: 46 30 cpi r20, 0x06 ; 6
1a5c: 09 f4 brne .+2 ; 0x1a60 <__vector_24+0x68>
1a5e: 6f c1 rjmp .+734 ; 0x1d3e <__vector_24+0x346>
1a60: 47 30 cpi r20, 0x07 ; 7
1a62: 09 f0 breq .+2 ; 0x1a66 <__vector_24+0x6e>
1a64: cb c2 rjmp .+1430 ; 0x1ffc <__vector_24+0x604>
1a66: 52 c2 rjmp .+1188 ; 0x1f0c <__vector_24+0x514>
1a68: 20 91 db 01 lds r18, 0x01DB
1a6c: 30 91 dc 01 lds r19, 0x01DC
1a70: 80 91 78 00 lds r24, 0x0078
1a74: 90 91 79 00 lds r25, 0x0079
1a78: 28 1b sub r18, r24
1a7a: 39 0b sbc r19, r25
1a7c: 80 91 b6 01 lds r24, 0x01B6
1a80: 90 91 b7 01 lds r25, 0x01B7
1a84: 82 0f add r24, r18
1a86: 93 1f adc r25, r19
1a88: 90 93 b7 01 sts 0x01B7, r25
1a8c: 80 93 b6 01 sts 0x01B6, r24
1a90: 80 91 c0 01 lds r24, 0x01C0
1a94: 8f 5f subi r24, 0xFF ; 255
1a96: 80 93 c0 01 sts 0x01C0, r24
1a9a: 80 91 0b 02 lds r24, 0x020B
1a9e: 90 91 0c 02 lds r25, 0x020C
1aa2: a0 91 0d 02 lds r26, 0x020D
1aa6: b0 91 0e 02 lds r27, 0x020E
1aaa: 44 27 eor r20, r20
1aac: 37 fd sbrc r19, 7
1aae: 40 95 com r20
1ab0: 54 2f mov r21, r20
1ab2: 82 0f add r24, r18
1ab4: 93 1f adc r25, r19
1ab6: a4 1f adc r26, r20
1ab8: b5 1f adc r27, r21
1aba: 80 93 0b 02 sts 0x020B, r24
1abe: 90 93 0c 02 sts 0x020C, r25
1ac2: a0 93 0d 02 sts 0x020D, r26
1ac6: b0 93 0e 02 sts 0x020E, r27
1aca: 80 91 0f 02 lds r24, 0x020F
1ace: 90 91 10 02 lds r25, 0x0210
1ad2: a0 91 11 02 lds r26, 0x0211
1ad6: b0 91 12 02 lds r27, 0x0212
1ada: 82 0f add r24, r18
1adc: 93 1f adc r25, r19
1ade: a4 1f adc r26, r20
1ae0: b5 1f adc r27, r21
1ae2: 80 93 0f 02 sts 0x020F, r24
1ae6: 90 93 10 02 sts 0x0210, r25
1aea: a0 93 11 02 sts 0x0211, r26
1aee: b0 93 12 02 sts 0x0212, r27
1af2: 81 e0 ldi r24, 0x01 ; 1
1af4: 80 93 c9 01 sts 0x01C9, r24
1af8: 80 91 c6 01 lds r24, 0x01C6
1afc: 90 91 c7 01 lds r25, 0x01C7
1b00: 01 96 adiw r24, 0x01 ; 1
1b02: 90 93 c7 01 sts 0x01C7, r25
1b06: 80 93 c6 01 sts 0x01C6, r24
1b0a: 7c c2 rjmp .+1272 ; 0x2004 <__vector_24+0x60c>
1b0c: 60 91 78 00 lds r22, 0x0078
1b10: 70 91 79 00 lds r23, 0x0079
1b14: 80 91 d9 01 lds r24, 0x01D9
1b18: 90 91 da 01 lds r25, 0x01DA
1b1c: 68 1b sub r22, r24
1b1e: 79 0b sbc r23, r25
1b20: 80 91 03 02 lds r24, 0x0203
1b24: 90 91 04 02 lds r25, 0x0204
1b28: a0 91 05 02 lds r26, 0x0205
1b2c: b0 91 06 02 lds r27, 0x0206
1b30: 9b 01 movw r18, r22
1b32: 44 27 eor r20, r20
1b34: 37 fd sbrc r19, 7
1b36: 40 95 com r20
1b38: 54 2f mov r21, r20
1b3a: 82 0f add r24, r18
1b3c: 93 1f adc r25, r19
1b3e: a4 1f adc r26, r20
1b40: b5 1f adc r27, r21
1b42: 80 93 03 02 sts 0x0203, r24
1b46: 90 93 04 02 sts 0x0204, r25
1b4a: a0 93 05 02 sts 0x0205, r26
1b4e: b0 93 06 02 sts 0x0206, r27
1b52: 80 91 07 02 lds r24, 0x0207
1b56: 90 91 08 02 lds r25, 0x0208
1b5a: a0 91 09 02 lds r26, 0x0209
1b5e: b0 91 0a 02 lds r27, 0x020A
1b62: 82 0f add r24, r18
1b64: 93 1f adc r25, r19
1b66: a4 1f adc r26, r20
1b68: b5 1f adc r27, r21
1b6a: 80 93 07 02 sts 0x0207, r24
1b6e: 90 93 08 02 sts 0x0208, r25
1b72: a0 93 09 02 sts 0x0209, r26
1b76: b0 93 0a 02 sts 0x020A, r27
1b7a: 80 91 78 00 lds r24, 0x0078
1b7e: 90 91 79 00 lds r25, 0x0079
1b82: 0a 97 sbiw r24, 0x0a ; 10
1b84: 10 f4 brcc .+4 ; 0x1b8a <__vector_24+0x192>
1b86: 64 e4 ldi r22, 0x44 ; 68
1b88: 7d ef ldi r23, 0xFD ; 253
1b8a: 80 91 78 00 lds r24, 0x0078
1b8e: 90 91 79 00 lds r25, 0x0079
1b92: 89 5e subi r24, 0xE9 ; 233
1b94: 93 40 sbci r25, 0x03 ; 3
1b96: 10 f0 brcs .+4 ; 0x1b9c <__vector_24+0x1a4>
1b98: 6c eb ldi r22, 0xBC ; 188
1b9a: 72 e0 ldi r23, 0x02 ; 2
1b9c: 80 91 b4 01 lds r24, 0x01B4
1ba0: 90 91 b5 01 lds r25, 0x01B5
1ba4: 86 0f add r24, r22
1ba6: 97 1f adc r25, r23
1ba8: 90 93 b5 01 sts 0x01B5, r25
1bac: 80 93 b4 01 sts 0x01B4, r24
1bb0: 80 91 bf 01 lds r24, 0x01BF
1bb4: 8f 5f subi r24, 0xFF ; 255
1bb6: 80 93 bf 01 sts 0x01BF, r24
1bba: 82 e0 ldi r24, 0x02 ; 2
1bbc: 58 c0 rjmp .+176 ; 0x1c6e <__vector_24+0x276>
1bbe: 60 91 78 00 lds r22, 0x0078
1bc2: 70 91 79 00 lds r23, 0x0079
1bc6: 80 91 d7 01 lds r24, 0x01D7
1bca: 90 91 d8 01 lds r25, 0x01D8
1bce: 68 1b sub r22, r24
1bd0: 79 0b sbc r23, r25
1bd2: 80 91 fb 01 lds r24, 0x01FB
1bd6: 90 91 fc 01 lds r25, 0x01FC
1bda: a0 91 fd 01 lds r26, 0x01FD
1bde: b0 91 fe 01 lds r27, 0x01FE
1be2: 9b 01 movw r18, r22
1be4: 44 27 eor r20, r20
1be6: 37 fd sbrc r19, 7
1be8: 40 95 com r20
1bea: 54 2f mov r21, r20
1bec: 82 0f add r24, r18
1bee: 93 1f adc r25, r19
1bf0: a4 1f adc r26, r20
1bf2: b5 1f adc r27, r21
1bf4: 80 93 fb 01 sts 0x01FB, r24
1bf8: 90 93 fc 01 sts 0x01FC, r25
1bfc: a0 93 fd 01 sts 0x01FD, r26
1c00: b0 93 fe 01 sts 0x01FE, r27
1c04: 80 91 ff 01 lds r24, 0x01FF
1c08: 90 91 00 02 lds r25, 0x0200
1c0c: a0 91 01 02 lds r26, 0x0201
1c10: b0 91 02 02 lds r27, 0x0202
1c14: 82 0f add r24, r18
1c16: 93 1f adc r25, r19
1c18: a4 1f adc r26, r20
1c1a: b5 1f adc r27, r21
1c1c: 80 93 ff 01 sts 0x01FF, r24
1c20: 90 93 00 02 sts 0x0200, r25
1c24: a0 93 01 02 sts 0x0201, r26
1c28: b0 93 02 02 sts 0x0202, r27
1c2c: 80 91 78 00 lds r24, 0x0078
1c30: 90 91 79 00 lds r25, 0x0079
1c34: 0a 97 sbiw r24, 0x0a ; 10
1c36: 10 f4 brcc .+4 ; 0x1c3c <__vector_24+0x244>
1c38: 64 e4 ldi r22, 0x44 ; 68
1c3a: 7d ef ldi r23, 0xFD ; 253
1c3c: 80 91 78 00 lds r24, 0x0078
1c40: 90 91 79 00 lds r25, 0x0079
1c44: 89 5e subi r24, 0xE9 ; 233
1c46: 93 40 sbci r25, 0x03 ; 3
1c48: 10 f0 brcs .+4 ; 0x1c4e <__vector_24+0x256>
1c4a: 6c eb ldi r22, 0xBC ; 188
1c4c: 72 e0 ldi r23, 0x02 ; 2
1c4e: 80 91 b2 01 lds r24, 0x01B2
1c52: 90 91 b3 01 lds r25, 0x01B3
1c56: 86 0f add r24, r22
1c58: 97 1f adc r25, r23
1c5a: 90 93 b3 01 sts 0x01B3, r25
1c5e: 80 93 b2 01 sts 0x01B2, r24
1c62: 80 91 be 01 lds r24, 0x01BE
1c66: 8f 5f subi r24, 0xFF ; 255
1c68: 80 93 be 01 sts 0x01BE, r24
1c6c: 84 e0 ldi r24, 0x04 ; 4
1c6e: 80 93 c9 01 sts 0x01C9, r24
1c72: c8 c1 rjmp .+912 ; 0x2004 <__vector_24+0x60c>
1c74: 40 91 04 01 lds r20, 0x0104
1c78: 50 91 05 01 lds r21, 0x0105
1c7c: 80 91 78 00 lds r24, 0x0078
1c80: 90 91 79 00 lds r25, 0x0079
1c84: 9a 01 movw r18, r20
1c86: 22 0f add r18, r18
1c88: 33 1f adc r19, r19
1c8a: 24 0f add r18, r20
1c8c: 35 1f adc r19, r21
1c8e: 63 e0 ldi r22, 0x03 ; 3
1c90: 70 e0 ldi r23, 0x00 ; 0
1c92: 0e 94 bf 2c call 0x597e ; 0x597e <__udivmodhi4>
1c96: 26 0f add r18, r22
1c98: 37 1f adc r19, r23
1c9a: 36 95 lsr r19
1c9c: 27 95 ror r18
1c9e: 36 95 lsr r19
1ca0: 27 95 ror r18
1ca2: 30 93 05 01 sts 0x0105, r19
1ca6: 20 93 04 01 sts 0x0104, r18
1caa: 86 e0 ldi r24, 0x06 ; 6
1cac: e0 cf rjmp .-64 ; 0x1c6e <__vector_24+0x276>
1cae: 80 91 df 01 lds r24, 0x01DF
1cb2: 90 91 e0 01 lds r25, 0x01E0
1cb6: 20 91 78 00 lds r18, 0x0078
1cba: 30 91 79 00 lds r19, 0x0079
1cbe: 82 1b sub r24, r18
1cc0: 93 0b sbc r25, r19
1cc2: 90 93 28 05 sts 0x0528, r25
1cc6: 80 93 27 05 sts 0x0527, r24
1cca: 80 91 b8 01 lds r24, 0x01B8
1cce: 90 91 b9 01 lds r25, 0x01B9
1cd2: 20 91 27 05 lds r18, 0x0527
1cd6: 30 91 28 05 lds r19, 0x0528
1cda: 82 0f add r24, r18
1cdc: 93 1f adc r25, r19
1cde: 90 93 b9 01 sts 0x01B9, r25
1ce2: 80 93 b8 01 sts 0x01B8, r24
1ce6: 80 91 c2 01 lds r24, 0x01C2
1cea: 8f 5f subi r24, 0xFF ; 255
1cec: 80 93 c2 01 sts 0x01C2, r24
1cf0: 87 e0 ldi r24, 0x07 ; 7
1cf2: bd cf rjmp .-134 ; 0x1c6e <__vector_24+0x276>
1cf4: 80 91 78 00 lds r24, 0x0078
1cf8: 90 91 79 00 lds r25, 0x0079
1cfc: 20 91 dd 01 lds r18, 0x01DD
1d00: 30 91 de 01 lds r19, 0x01DE
1d04: 82 1b sub r24, r18
1d06: 93 0b sbc r25, r19
1d08: 90 93 28 05 sts 0x0528, r25
1d0c: 80 93 27 05 sts 0x0527, r24
1d10: 80 91 ba 01 lds r24, 0x01BA
1d14: 90 91 bb 01 lds r25, 0x01BB
1d18: 20 91 27 05 lds r18, 0x0527
1d1c: 30 91 28 05 lds r19, 0x0528
1d20: 82 0f add r24, r18
1d22: 93 1f adc r25, r19
1d24: 90 93 bb 01 sts 0x01BB, r25
1d28: 80 93 ba 01 sts 0x01BA, r24
1d2c: 80 91 c1 01 lds r24, 0x01C1
1d30: 8f 5f subi r24, 0xFF ; 255
1d32: 80 93 c1 01 sts 0x01C1, r24
1d36: 40 93 c9 01 sts 0x01C9, r20
1d3a: 86 e0 ldi r24, 0x06 ; 6
1d3c: e4 c0 rjmp .+456 ; 0x1f06 <__vector_24+0x50e>
1d3e: 60 91 78 00 lds r22, 0x0078
1d42: 70 91 79 00 lds r23, 0x0079
1d46: e0 90 e1 01 lds r14, 0x01E1
1d4a: f0 90 e2 01 lds r15, 0x01E2
1d4e: 00 91 e3 01 lds r16, 0x01E3
1d52: 10 91 e4 01 lds r17, 0x01E4
1d56: 88 27 eor r24, r24
1d58: 77 fd sbrc r23, 7
1d5a: 80 95 com r24
1d5c: 98 2f mov r25, r24
1d5e: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
1d62: a8 01 movw r20, r16
1d64: 97 01 movw r18, r14
1d66: 0e 94 de 2a call 0x55bc ; 0x55bc <__subsf3>
1d6a: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
1d6e: 70 93 bd 01 sts 0x01BD, r23
1d72: 60 93 bc 01 sts 0x01BC, r22
1d76: 20 91 bc 01 lds r18, 0x01BC
1d7a: 30 91 bd 01 lds r19, 0x01BD
1d7e: e0 91 27 05 lds r30, 0x0527
1d82: f0 91 28 05 lds r31, 0x0528
1d86: 80 91 32 05 lds r24, 0x0532
1d8a: 90 91 33 05 lds r25, 0x0533
1d8e: 97 ff sbrs r25, 7
1d90: 03 c0 rjmp .+6 ; 0x1d98 <__vector_24+0x3a0>
1d92: 90 95 com r25
1d94: 81 95 neg r24
1d96: 9f 4f sbci r25, 0xFF ; 255
1d98: 64 e0 ldi r22, 0x04 ; 4
1d9a: 70 e0 ldi r23, 0x00 ; 0
1d9c: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
1da0: eb 01 movw r28, r22
1da2: cf 01 movw r24, r30
1da4: f7 ff sbrs r31, 7
1da6: 03 c0 rjmp .+6 ; 0x1dae <__vector_24+0x3b6>
1da8: 90 95 com r25
1daa: 81 95 neg r24
1dac: 9f 4f sbci r25, 0xFF ; 255
1dae: 64 e0 ldi r22, 0x04 ; 4
1db0: 70 e0 ldi r23, 0x00 ; 0
1db2: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
1db6: 26 0f add r18, r22
1db8: 37 1f adc r19, r23
1dba: 2c 0f add r18, r28
1dbc: 3d 1f adc r19, r29
1dbe: 30 93 bd 01 sts 0x01BD, r19
1dc2: 20 93 bc 01 sts 0x01BC, r18
1dc6: 80 91 bc 01 lds r24, 0x01BC
1dca: 90 91 bd 01 lds r25, 0x01BD
1dce: 02 97 sbiw r24, 0x02 ; 2
1dd0: 04 f1 brlt .+64 ; 0x1e12 <__vector_24+0x41a>
1dd2: 60 91 e1 01 lds r22, 0x01E1
1dd6: 70 91 e2 01 lds r23, 0x01E2
1dda: 80 91 e3 01 lds r24, 0x01E3
1dde: 90 91 e4 01 lds r25, 0x01E4
1de2: 20 e0 ldi r18, 0x00 ; 0
1de4: 30 e0 ldi r19, 0x00 ; 0
1de6: 48 e4 ldi r20, 0x48 ; 72
1de8: 54 e4 ldi r21, 0x44 ; 68
1dea: 0e 94 8e 2b call 0x571c ; 0x571c <__eqsf2>
1dee: 88 23 and r24, r24
1df0: 0c f0 brlt .+2 ; 0x1df4 <__vector_24+0x3fc>
1df2: 3c c0 rjmp .+120 ; 0x1e6c <__vector_24+0x474>
1df4: 60 91 e1 01 lds r22, 0x01E1
1df8: 70 91 e2 01 lds r23, 0x01E2
1dfc: 80 91 e3 01 lds r24, 0x01E3
1e00: 90 91 e4 01 lds r25, 0x01E4
1e04: 2a e0 ldi r18, 0x0A ; 10
1e06: 37 ed ldi r19, 0xD7 ; 215
1e08: 43 ea ldi r20, 0xA3 ; 163
1e0a: 5c e3 ldi r21, 0x3C ; 60
1e0c: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
1e10: 25 c0 rjmp .+74 ; 0x1e5c <__vector_24+0x464>
1e12: 80 91 bc 01 lds r24, 0x01BC
1e16: 90 91 bd 01 lds r25, 0x01BD
1e1a: 8f 5f subi r24, 0xFF ; 255
1e1c: 9f 4f sbci r25, 0xFF ; 255
1e1e: 34 f5 brge .+76 ; 0x1e6c <__vector_24+0x474>
1e20: 60 91 e1 01 lds r22, 0x01E1
1e24: 70 91 e2 01 lds r23, 0x01E2
1e28: 80 91 e3 01 lds r24, 0x01E3
1e2c: 90 91 e4 01 lds r25, 0x01E4
1e30: 20 e0 ldi r18, 0x00 ; 0
1e32: 30 e0 ldi r19, 0x00 ; 0
1e34: 46 e1 ldi r20, 0x16 ; 22
1e36: 54 e4 ldi r21, 0x44 ; 68
1e38: 0e 94 91 2b call 0x5722 ; 0x5722 <__gesf2>
1e3c: 18 16 cp r1, r24
1e3e: b4 f4 brge .+44 ; 0x1e6c <__vector_24+0x474>
1e40: 60 91 e1 01 lds r22, 0x01E1
1e44: 70 91 e2 01 lds r23, 0x01E2
1e48: 80 91 e3 01 lds r24, 0x01E3
1e4c: 90 91 e4 01 lds r25, 0x01E4
1e50: 2a e0 ldi r18, 0x0A ; 10
1e52: 37 ed ldi r19, 0xD7 ; 215
1e54: 43 ea ldi r20, 0xA3 ; 163
1e56: 5c e3 ldi r21, 0x3C ; 60
1e58: 0e 94 de 2a call 0x55bc ; 0x55bc <__subsf3>
1e5c: 60 93 e1 01 sts 0x01E1, r22
1e60: 70 93 e2 01 sts 0x01E2, r23
1e64: 80 93 e3 01 sts 0x01E3, r24
1e68: 90 93 e4 01 sts 0x01E4, r25
1e6c: 81 e0 ldi r24, 0x01 ; 1
1e6e: 80 93 c3 01 sts 0x01C3, r24
1e72: 80 91 78 00 lds r24, 0x0078
1e76: 90 91 79 00 lds r25, 0x0079
1e7a: 90 93 2a 05 sts 0x052A, r25
1e7e: 80 93 29 05 sts 0x0529, r24
1e82: 20 91 13 02 lds r18, 0x0213
1e86: 30 91 14 02 lds r19, 0x0214
1e8a: 40 91 15 02 lds r20, 0x0215
1e8e: 50 91 16 02 lds r21, 0x0216
1e92: 80 91 bc 01 lds r24, 0x01BC
1e96: 90 91 bd 01 lds r25, 0x01BD
1e9a: aa 27 eor r26, r26
1e9c: 97 fd sbrc r25, 7
1e9e: a0 95 com r26
1ea0: ba 2f mov r27, r26
1ea2: 28 0f add r18, r24
1ea4: 39 1f adc r19, r25
1ea6: 4a 1f adc r20, r26
1ea8: 5b 1f adc r21, r27
1eaa: 20 93 13 02 sts 0x0213, r18
1eae: 30 93 14 02 sts 0x0214, r19
1eb2: 40 93 15 02 sts 0x0215, r20
1eb6: 50 93 16 02 sts 0x0216, r21
1eba: e0 90 13 02 lds r14, 0x0213
1ebe: f0 90 14 02 lds r15, 0x0214
1ec2: 00 91 15 02 lds r16, 0x0215
1ec6: 10 91 16 02 lds r17, 0x0216
1eca: 60 91 13 02 lds r22, 0x0213
1ece: 70 91 14 02 lds r23, 0x0214
1ed2: 80 91 15 02 lds r24, 0x0215
1ed6: 90 91 16 02 lds r25, 0x0216
1eda: 20 e0 ldi r18, 0x00 ; 0
1edc: 34 e0 ldi r19, 0x04 ; 4
1ede: 40 e0 ldi r20, 0x00 ; 0
1ee0: 50 e0 ldi r21, 0x00 ; 0
1ee2: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
1ee6: e2 1a sub r14, r18
1ee8: f3 0a sbc r15, r19
1eea: 04 0b sbc r16, r20
1eec: 15 0b sbc r17, r21
1eee: e0 92 13 02 sts 0x0213, r14
1ef2: f0 92 14 02 sts 0x0214, r15
1ef6: 00 93 15 02 sts 0x0215, r16
1efa: 10 93 16 02 sts 0x0216, r17
1efe: 83 e0 ldi r24, 0x03 ; 3
1f00: 80 93 c9 01 sts 0x01C9, r24
1f04: 87 e0 ldi r24, 0x07 ; 7
1f06: 80 93 c8 01 sts 0x01C8, r24
1f0a: 7c c0 rjmp .+248 ; 0x2004 <__vector_24+0x60c>
1f0c: 80 91 37 05 lds r24, 0x0537
1f10: 90 91 38 05 lds r25, 0x0538
1f14: 20 91 78 00 lds r18, 0x0078
1f18: 30 91 79 00 lds r19, 0x0079
1f1c: 82 0f add r24, r18
1f1e: 93 1f adc r25, r19
1f20: 90 93 38 05 sts 0x0538, r25
1f24: 80 93 37 05 sts 0x0537, r24
1f28: 80 91 2f 05 lds r24, 0x052F
1f2c: 8f 5f subi r24, 0xFF ; 255
1f2e: 80 93 2f 05 sts 0x052F, r24
1f32: 80 91 2f 05 lds r24, 0x052F
1f36: 85 30 cpi r24, 0x05 ; 5
1f38: 08 f4 brcc .+2 ; 0x1f3c <__vector_24+0x544>
1f3a: 60 c0 rjmp .+192 ; 0x1ffc <__vector_24+0x604>
1f3c: 80 91 78 00 lds r24, 0x0078
1f40: 90 91 79 00 lds r25, 0x0079
1f44: 90 93 0b 01 sts 0x010B, r25
1f48: 80 93 0a 01 sts 0x010A, r24
1f4c: 10 92 2f 05 sts 0x052F, r1
1f50: 80 91 2b 05 lds r24, 0x052B
1f54: 90 91 2c 05 lds r25, 0x052C
1f58: 20 91 37 05 lds r18, 0x0537
1f5c: 30 91 38 05 lds r19, 0x0538
1f60: 82 1b sub r24, r18
1f62: 93 0b sbc r25, r19
1f64: 20 91 2f 02 lds r18, 0x022F
1f68: 30 91 30 02 lds r19, 0x0230
1f6c: 82 1b sub r24, r18
1f6e: 93 0b sbc r25, r19
1f70: 90 93 c5 01 sts 0x01C5, r25
1f74: 80 93 c4 01 sts 0x01C4, r24
1f78: 60 91 37 05 lds r22, 0x0537
1f7c: 70 91 38 05 lds r23, 0x0538
1f80: e0 90 06 01 lds r14, 0x0106
1f84: f0 90 07 01 lds r15, 0x0107
1f88: 00 91 08 01 lds r16, 0x0108
1f8c: 10 91 09 01 lds r17, 0x0109
1f90: 88 27 eor r24, r24
1f92: 77 fd sbrc r23, 7
1f94: 80 95 com r24
1f96: 98 2f mov r25, r24
1f98: a8 01 movw r20, r16
1f9a: 97 01 movw r18, r14
1f9c: 22 0f add r18, r18
1f9e: 33 1f adc r19, r19
1fa0: 44 1f adc r20, r20
1fa2: 55 1f adc r21, r21
1fa4: 2e 0d add r18, r14
1fa6: 3f 1d adc r19, r15
1fa8: 40 1f adc r20, r16
1faa: 51 1f adc r21, r17
1fac: 62 0f add r22, r18
1fae: 73 1f adc r23, r19
1fb0: 84 1f adc r24, r20
1fb2: 95 1f adc r25, r21
1fb4: 24 e0 ldi r18, 0x04 ; 4
1fb6: 30 e0 ldi r19, 0x00 ; 0
1fb8: 40 e0 ldi r20, 0x00 ; 0
1fba: 50 e0 ldi r21, 0x00 ; 0
1fbc: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
1fc0: 20 93 06 01 sts 0x0106, r18
1fc4: 30 93 07 01 sts 0x0107, r19
1fc8: 40 93 08 01 sts 0x0108, r20
1fcc: 50 93 09 01 sts 0x0109, r21
1fd0: 20 91 2b 05 lds r18, 0x052B
1fd4: 30 91 2c 05 lds r19, 0x052C
1fd8: 80 91 06 01 lds r24, 0x0106
1fdc: 90 91 07 01 lds r25, 0x0107
1fe0: a0 91 08 01 lds r26, 0x0108
1fe4: b0 91 09 01 lds r27, 0x0109
1fe8: 28 1b sub r18, r24
1fea: 39 0b sbc r19, r25
1fec: 30 93 30 02 sts 0x0230, r19
1ff0: 20 93 2f 02 sts 0x022F, r18
1ff4: 10 92 38 05 sts 0x0538, r1
1ff8: 10 92 37 05 sts 0x0537, r1
1ffc: 10 92 c9 01 sts 0x01C9, r1
2000: 10 92 c8 01 sts 0x01C8, r1
2004: 80 91 c9 01 lds r24, 0x01C9
2008: 80 93 7c 00 sts 0x007C, r24
200c: 8f ee ldi r24, 0xEF ; 239
200e: 80 93 7a 00 sts 0x007A, r24
2012: ff 91 pop r31
2014: ef 91 pop r30
2016: df 91 pop r29
2018: cf 91 pop r28
201a: bf 91 pop r27
201c: af 91 pop r26
201e: 9f 91 pop r25
2020: 8f 91 pop r24
2022: 7f 91 pop r23
2024: 6f 91 pop r22
2026: 5f 91 pop r21
2028: 4f 91 pop r20
202a: 3f 91 pop r19
202c: 2f 91 pop r18
202e: 1f 91 pop r17
2030: 0f 91 pop r16
2032: ff 90 pop r15
2034: ef 90 pop r14
2036: 0f 90 pop r0
2038: 0f be out 0x3f, r0 ; 63
203a: 0f 90 pop r0
203c: 1f 90 pop r1
203e: 18 95 reti
 
00002040 <SucheLuftruckOffset>:
2040: cf 93 push r28
2042: df 93 push r29
2044: c0 e0 ldi r28, 0x00 ; 0
2046: d0 e0 ldi r29, 0x00 ; 0
2048: c7 bd out 0x27, r28 ; 39
204a: 82 e3 ldi r24, 0x32 ; 50
204c: 90 e0 ldi r25, 0x00 ; 0
204e: 0e 94 e4 0c call 0x19c8 ; 0x19c8 <Delay_ms>
2052: 8b e3 ldi r24, 0x3B ; 59
2054: 91 e0 ldi r25, 0x01 ; 1
2056: 9f 93 push r25
2058: 8f 93 push r24
205a: 1f 92 push r1
205c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2060: 80 91 0a 01 lds r24, 0x010A
2064: 90 91 0b 01 lds r25, 0x010B
2068: 0f 90 pop r0
206a: 0f 90 pop r0
206c: 0f 90 pop r0
206e: 84 58 subi r24, 0x84 ; 132
2070: 93 40 sbci r25, 0x03 ; 3
2072: 20 f0 brcs .+8 ; 0x207c <SucheLuftruckOffset+0x3c>
2074: 21 96 adiw r28, 0x01 ; 1
2076: ca 3f cpi r28, 0xFA ; 250
2078: d1 05 cpc r29, r1
207a: 31 f7 brne .-52 ; 0x2048 <SucheLuftruckOffset+0x8>
207c: c0 93 34 05 sts 0x0534, r28
2080: 88 ec ldi r24, 0xC8 ; 200
2082: 90 e0 ldi r25, 0x00 ; 0
2084: 0e 94 e4 0c call 0x19c8 ; 0x19c8 <Delay_ms>
2088: df 91 pop r29
208a: cf 91 pop r28
208c: 08 95 ret
 
0000208e <LcdClear>:
208e: e6 e1 ldi r30, 0x16 ; 22
2090: f1 e0 ldi r31, 0x01 ; 1
2092: 80 e2 ldi r24, 0x20 ; 32
2094: 81 93 st Z+, r24
2096: 91 e0 ldi r25, 0x01 ; 1
2098: e6 36 cpi r30, 0x66 ; 102
209a: f9 07 cpc r31, r25
209c: d9 f7 brne .-10 ; 0x2094 <LcdClear+0x6>
209e: 08 95 ret
 
000020a0 <Menu>:
20a0: ff 92 push r15
20a2: 0f 93 push r16
20a4: 1f 93 push r17
20a6: 80 91 cd 01 lds r24, 0x01CD
20aa: 28 2f mov r18, r24
20ac: 33 27 eor r19, r19
20ae: c9 01 movw r24, r18
20b0: 81 70 andi r24, 0x01 ; 1
20b2: 90 70 andi r25, 0x00 ; 0
20b4: 68 2f mov r22, r24
20b6: 88 23 and r24, r24
20b8: 91 f0 breq .+36 ; 0x20de <Menu+0x3e>
20ba: 80 91 ce 01 lds r24, 0x01CE
20be: 88 23 and r24, r24
20c0: 11 f0 breq .+4 ; 0x20c6 <Menu+0x26>
20c2: 81 50 subi r24, 0x01 ; 1
20c4: 02 c0 rjmp .+4 ; 0x20ca <Menu+0x2a>
20c6: 80 91 66 01 lds r24, 0x0166
20ca: 80 93 ce 01 sts 0x01CE, r24
20ce: e6 e1 ldi r30, 0x16 ; 22
20d0: f1 e0 ldi r31, 0x01 ; 1
20d2: 80 e2 ldi r24, 0x20 ; 32
20d4: 81 93 st Z+, r24
20d6: 91 e0 ldi r25, 0x01 ; 1
20d8: e6 36 cpi r30, 0x66 ; 102
20da: f9 07 cpc r31, r25
20dc: d9 f7 brne .-10 ; 0x20d4 <Menu+0x34>
20de: a9 01 movw r20, r18
20e0: 42 70 andi r20, 0x02 ; 2
20e2: 50 70 andi r21, 0x00 ; 0
20e4: 21 ff sbrs r18, 1
20e6: 0d c0 rjmp .+26 ; 0x2102 <Menu+0x62>
20e8: 80 91 ce 01 lds r24, 0x01CE
20ec: 8f 5f subi r24, 0xFF ; 255
20ee: 80 93 ce 01 sts 0x01CE, r24
20f2: e6 e1 ldi r30, 0x16 ; 22
20f4: f1 e0 ldi r31, 0x01 ; 1
20f6: 80 e2 ldi r24, 0x20 ; 32
20f8: 81 93 st Z+, r24
20fa: 91 e0 ldi r25, 0x01 ; 1
20fc: e6 36 cpi r30, 0x66 ; 102
20fe: f9 07 cpc r31, r25
2100: d9 f7 brne .-10 ; 0x20f8 <Menu+0x58>
2102: 66 23 and r22, r22
2104: 21 f0 breq .+8 ; 0x210e <Menu+0x6e>
2106: 45 2b or r20, r21
2108: 11 f0 breq .+4 ; 0x210e <Menu+0x6e>
210a: 10 92 ce 01 sts 0x01CE, r1
210e: 81 e1 ldi r24, 0x11 ; 17
2110: 80 93 cc 01 sts 0x01CC, r24
2114: 80 91 ce 01 lds r24, 0x01CE
2118: 99 27 eor r25, r25
211a: 9f 93 push r25
211c: 8f 93 push r24
211e: 8c ea ldi r24, 0xAC ; 172
2120: 93 e0 ldi r25, 0x03 ; 3
2122: 9f 93 push r25
2124: 8f 93 push r24
2126: e1 e0 ldi r30, 0x01 ; 1
2128: fe 2e mov r15, r30
212a: ff 92 push r15
212c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2130: 00 91 ce 01 lds r16, 0x01CE
2134: 0f 90 pop r0
2136: 0f 90 pop r0
2138: 0f 90 pop r0
213a: 0f 90 pop r0
213c: 0f 90 pop r0
213e: 05 30 cpi r16, 0x05 ; 5
2140: 09 f4 brne .+2 ; 0x2144 <Menu+0xa4>
2142: d7 c1 rjmp .+942 ; 0x24f2 <Menu+0x452>
2144: 06 30 cpi r16, 0x06 ; 6
2146: 90 f4 brcc .+36 ; 0x216c <Menu+0xcc>
2148: 02 30 cpi r16, 0x02 ; 2
214a: 09 f4 brne .+2 ; 0x214e <Menu+0xae>
214c: b8 c0 rjmp .+368 ; 0x22be <Menu+0x21e>
214e: 03 30 cpi r16, 0x03 ; 3
2150: 30 f4 brcc .+12 ; 0x215e <Menu+0xbe>
2152: 00 23 and r16, r16
2154: f1 f0 breq .+60 ; 0x2192 <Menu+0xf2>
2156: 01 30 cpi r16, 0x01 ; 1
2158: 09 f0 breq .+2 ; 0x215c <Menu+0xbc>
215a: 5b c3 rjmp .+1718 ; 0x2812 <Menu+0x772>
215c: 4d c0 rjmp .+154 ; 0x21f8 <Menu+0x158>
215e: 03 30 cpi r16, 0x03 ; 3
2160: 09 f4 brne .+2 ; 0x2164 <Menu+0xc4>
2162: 02 c1 rjmp .+516 ; 0x2368 <Menu+0x2c8>
2164: 04 30 cpi r16, 0x04 ; 4
2166: 09 f0 breq .+2 ; 0x216a <Menu+0xca>
2168: 54 c3 rjmp .+1704 ; 0x2812 <Menu+0x772>
216a: 4b c1 rjmp .+662 ; 0x2402 <Menu+0x362>
216c: 08 30 cpi r16, 0x08 ; 8
216e: 09 f4 brne .+2 ; 0x2172 <Menu+0xd2>
2170: 98 c2 rjmp .+1328 ; 0x26a2 <Menu+0x602>
2172: 09 30 cpi r16, 0x09 ; 9
2174: 38 f4 brcc .+14 ; 0x2184 <Menu+0xe4>
2176: 06 30 cpi r16, 0x06 ; 6
2178: 09 f4 brne .+2 ; 0x217c <Menu+0xdc>
217a: 11 c2 rjmp .+1058 ; 0x259e <Menu+0x4fe>
217c: 07 30 cpi r16, 0x07 ; 7
217e: 09 f0 breq .+2 ; 0x2182 <Menu+0xe2>
2180: 48 c3 rjmp .+1680 ; 0x2812 <Menu+0x772>
2182: 6c c2 rjmp .+1240 ; 0x265c <Menu+0x5bc>
2184: 09 30 cpi r16, 0x09 ; 9
2186: 09 f4 brne .+2 ; 0x218a <Menu+0xea>
2188: c9 c2 rjmp .+1426 ; 0x271c <Menu+0x67c>
218a: 0a 30 cpi r16, 0x0A ; 10
218c: 09 f0 breq .+2 ; 0x2190 <Menu+0xf0>
218e: 41 c3 rjmp .+1666 ; 0x2812 <Menu+0x772>
2190: 03 c3 rjmp .+1542 ; 0x2798 <Menu+0x6f8>
2192: 10 92 cc 01 sts 0x01CC, r1
2196: 8a e9 ldi r24, 0x9A ; 154
2198: 93 e0 ldi r25, 0x03 ; 3
219a: 9f 93 push r25
219c: 8f 93 push r24
219e: ff 92 push r15
21a0: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
21a4: 84 e1 ldi r24, 0x14 ; 20
21a6: 80 93 cc 01 sts 0x01CC, r24
21aa: 8c e3 ldi r24, 0x3C ; 60
21ac: 90 e0 ldi r25, 0x00 ; 0
21ae: 9f 93 push r25
21b0: 8f 93 push r24
21b2: 1f 92 push r1
21b4: 1f 92 push r1
21b6: 83 e9 ldi r24, 0x93 ; 147
21b8: 93 e0 ldi r25, 0x03 ; 3
21ba: 9f 93 push r25
21bc: 8f 93 push r24
21be: ff 92 push r15
21c0: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
21c4: 88 e2 ldi r24, 0x28 ; 40
21c6: 80 93 cc 01 sts 0x01CC, r24
21ca: 0e 94 f8 01 call 0x3f0 ; 0x3f0 <GetActiveParamSetNumber>
21ce: 99 27 eor r25, r25
21d0: 9f 93 push r25
21d2: 8f 93 push r24
21d4: 86 e8 ldi r24, 0x86 ; 134
21d6: 93 e0 ldi r25, 0x03 ; 3
21d8: 9f 93 push r25
21da: 8f 93 push r24
21dc: ff 92 push r15
21de: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
21e2: 8c e3 ldi r24, 0x3C ; 60
21e4: 80 93 cc 01 sts 0x01CC, r24
21e8: 86 e7 ldi r24, 0x76 ; 118
21ea: 93 e0 ldi r25, 0x03 ; 3
21ec: 9f 93 push r25
21ee: 8f 93 push r24
21f0: ff 92 push r15
21f2: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
21f6: 8e c2 rjmp .+1308 ; 0x2714 <Menu+0x674>
21f8: 80 91 75 05 lds r24, 0x0575
21fc: 80 ff sbrs r24, 0
21fe: 47 c0 rjmp .+142 ; 0x228e <Menu+0x1ee>
2200: 10 92 cc 01 sts 0x01CC, r1
2204: 80 91 2f 02 lds r24, 0x022F
2208: 90 91 30 02 lds r25, 0x0230
220c: 9f 93 push r25
220e: 8f 93 push r24
2210: 87 e6 ldi r24, 0x67 ; 103
2212: 93 e0 ldi r25, 0x03 ; 3
2214: 9f 93 push r25
2216: 8f 93 push r24
2218: 0f 93 push r16
221a: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
221e: 84 e1 ldi r24, 0x14 ; 20
2220: 80 93 cc 01 sts 0x01CC, r24
2224: 80 91 31 02 lds r24, 0x0231
2228: 90 91 32 02 lds r25, 0x0232
222c: 9f 93 push r25
222e: 8f 93 push r24
2230: 88 e5 ldi r24, 0x58 ; 88
2232: 93 e0 ldi r25, 0x03 ; 3
2234: 9f 93 push r25
2236: 8f 93 push r24
2238: 0f 93 push r16
223a: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
223e: 88 e2 ldi r24, 0x28 ; 40
2240: 80 93 cc 01 sts 0x01CC, r24
2244: 80 91 0a 01 lds r24, 0x010A
2248: 90 91 0b 01 lds r25, 0x010B
224c: 9f 93 push r25
224e: 8f 93 push r24
2250: 89 e4 ldi r24, 0x49 ; 73
2252: 93 e0 ldi r25, 0x03 ; 3
2254: 9f 93 push r25
2256: 8f 93 push r24
2258: 0f 93 push r16
225a: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
225e: 8c e3 ldi r24, 0x3C ; 60
2260: 80 93 cc 01 sts 0x01CC, r24
2264: 80 91 34 05 lds r24, 0x0534
2268: 99 27 eor r25, r25
226a: 9f 93 push r25
226c: 8f 93 push r24
226e: 8a e3 ldi r24, 0x3A ; 58
2270: 93 e0 ldi r25, 0x03 ; 3
2272: 9f 93 push r25
2274: 8f 93 push r24
2276: 0f 93 push r16
2278: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
227c: 8d b7 in r24, 0x3d ; 61
227e: 9e b7 in r25, 0x3e ; 62
2280: 44 96 adiw r24, 0x14 ; 20
2282: 0f b6 in r0, 0x3f ; 63
2284: f8 94 cli
2286: 9e bf out 0x3e, r25 ; 62
2288: 0f be out 0x3f, r0 ; 63
228a: 8d bf out 0x3d, r24 ; 61
228c: c7 c2 rjmp .+1422 ; 0x281c <Menu+0x77c>
228e: 84 e1 ldi r24, 0x14 ; 20
2290: 80 93 cc 01 sts 0x01CC, r24
2294: 83 e3 ldi r24, 0x33 ; 51
2296: 93 e0 ldi r25, 0x03 ; 3
2298: 9f 93 push r25
229a: 8f 93 push r24
229c: 0f 93 push r16
229e: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
22a2: 88 e2 ldi r24, 0x28 ; 40
22a4: 80 93 cc 01 sts 0x01CC, r24
22a8: 85 e2 ldi r24, 0x25 ; 37
22aa: 93 e0 ldi r25, 0x03 ; 3
22ac: 9f 93 push r25
22ae: 8f 93 push r24
22b0: 0f 93 push r16
22b2: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
22b6: 8d b7 in r24, 0x3d ; 61
22b8: 9e b7 in r25, 0x3e ; 62
22ba: 06 96 adiw r24, 0x06 ; 6
22bc: e2 cf rjmp .-60 ; 0x2282 <Menu+0x1e2>
22be: 10 92 cc 01 sts 0x01CC, r1
22c2: 8b e1 ldi r24, 0x1B ; 27
22c4: 93 e0 ldi r25, 0x03 ; 3
22c6: 9f 93 push r25
22c8: 8f 93 push r24
22ca: ff 92 push r15
22cc: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
22d0: 84 e1 ldi r24, 0x14 ; 20
22d2: 80 93 cc 01 sts 0x01CC, r24
22d6: 60 91 e7 01 lds r22, 0x01E7
22da: 70 91 e8 01 lds r23, 0x01E8
22de: 80 91 e9 01 lds r24, 0x01E9
22e2: 90 91 ea 01 lds r25, 0x01EA
22e6: 20 e0 ldi r18, 0x00 ; 0
22e8: 34 e0 ldi r19, 0x04 ; 4
22ea: 40 e0 ldi r20, 0x00 ; 0
22ec: 50 e0 ldi r21, 0x00 ; 0
22ee: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
22f2: 5f 93 push r21
22f4: 4f 93 push r20
22f6: 3f 93 push r19
22f8: 2f 93 push r18
22fa: 8c e0 ldi r24, 0x0C ; 12
22fc: 93 e0 ldi r25, 0x03 ; 3
22fe: 9f 93 push r25
2300: 8f 93 push r24
2302: ff 92 push r15
2304: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2308: 88 e2 ldi r24, 0x28 ; 40
230a: 80 93 cc 01 sts 0x01CC, r24
230e: 60 91 ef 01 lds r22, 0x01EF
2312: 70 91 f0 01 lds r23, 0x01F0
2316: 80 91 f1 01 lds r24, 0x01F1
231a: 90 91 f2 01 lds r25, 0x01F2
231e: 20 e0 ldi r18, 0x00 ; 0
2320: 34 e0 ldi r19, 0x04 ; 4
2322: 40 e0 ldi r20, 0x00 ; 0
2324: 50 e0 ldi r21, 0x00 ; 0
2326: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
232a: 5f 93 push r21
232c: 4f 93 push r20
232e: 3f 93 push r19
2330: 2f 93 push r18
2332: 8d ef ldi r24, 0xFD ; 253
2334: 92 e0 ldi r25, 0x02 ; 2
2336: 9f 93 push r25
2338: 8f 93 push r24
233a: ff 92 push r15
233c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2340: 8c e3 ldi r24, 0x3C ; 60
2342: 80 93 cc 01 sts 0x01CC, r24
2346: 80 91 17 02 lds r24, 0x0217
234a: 90 91 18 02 lds r25, 0x0218
234e: 9f 93 push r25
2350: 8f 93 push r24
2352: 8e ee ldi r24, 0xEE ; 238
2354: 92 e0 ldi r25, 0x02 ; 2
2356: 9f 93 push r25
2358: 8f 93 push r24
235a: ff 92 push r15
235c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2360: 8d b7 in r24, 0x3d ; 61
2362: 9e b7 in r25, 0x3e ; 62
2364: 46 96 adiw r24, 0x16 ; 22
2366: 8d cf rjmp .-230 ; 0x2282 <Menu+0x1e2>
2368: 10 92 cc 01 sts 0x01CC, r1
236c: 80 91 45 05 lds r24, 0x0545
2370: 90 91 46 05 lds r25, 0x0546
2374: 20 91 43 05 lds r18, 0x0543
2378: 30 91 44 05 lds r19, 0x0544
237c: 9f 93 push r25
237e: 8f 93 push r24
2380: 3f 93 push r19
2382: 2f 93 push r18
2384: 8e ed ldi r24, 0xDE ; 222
2386: 92 e0 ldi r25, 0x02 ; 2
2388: 9f 93 push r25
238a: 8f 93 push r24
238c: ff 92 push r15
238e: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2392: 84 e1 ldi r24, 0x14 ; 20
2394: 80 93 cc 01 sts 0x01CC, r24
2398: 80 91 49 05 lds r24, 0x0549
239c: 90 91 4a 05 lds r25, 0x054A
23a0: 20 91 47 05 lds r18, 0x0547
23a4: 30 91 48 05 lds r19, 0x0548
23a8: 9f 93 push r25
23aa: 8f 93 push r24
23ac: 3f 93 push r19
23ae: 2f 93 push r18
23b0: 8e ec ldi r24, 0xCE ; 206
23b2: 92 e0 ldi r25, 0x02 ; 2
23b4: 9f 93 push r25
23b6: 8f 93 push r24
23b8: ff 92 push r15
23ba: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
23be: 88 e2 ldi r24, 0x28 ; 40
23c0: 80 93 cc 01 sts 0x01CC, r24
23c4: 80 91 4d 05 lds r24, 0x054D
23c8: 90 91 4e 05 lds r25, 0x054E
23cc: 20 91 4b 05 lds r18, 0x054B
23d0: 30 91 4c 05 lds r19, 0x054C
23d4: 9f 93 push r25
23d6: 8f 93 push r24
23d8: 3f 93 push r19
23da: 2f 93 push r18
23dc: 8e eb ldi r24, 0xBE ; 190
23de: 92 e0 ldi r25, 0x02 ; 2
23e0: 9f 93 push r25
23e2: 8f 93 push r24
23e4: ff 92 push r15
23e6: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
23ea: 8c e3 ldi r24, 0x3C ; 60
23ec: 80 93 cc 01 sts 0x01CC, r24
23f0: 80 91 4f 05 lds r24, 0x054F
23f4: 90 91 50 05 lds r25, 0x0550
23f8: 9f 93 push r25
23fa: 8f 93 push r24
23fc: 8e ea ldi r24, 0xAE ; 174
23fe: 92 e0 ldi r25, 0x02 ; 2
2400: 6f c0 rjmp .+222 ; 0x24e0 <Menu+0x440>
2402: 10 92 cc 01 sts 0x01CC, r1
2406: e0 91 6e 05 lds r30, 0x056E
240a: ff 27 eor r31, r31
240c: ee 0f add r30, r30
240e: ff 1f adc r31, r31
2410: ef 5b subi r30, 0xBF ; 191
2412: fa 4f sbci r31, 0xFA ; 250
2414: 20 81 ld r18, Z
2416: 31 81 ldd r19, Z+1 ; 0x01
2418: e0 91 6d 05 lds r30, 0x056D
241c: ff 27 eor r31, r31
241e: ee 0f add r30, r30
2420: ff 1f adc r31, r31
2422: ef 5b subi r30, 0xBF ; 191
2424: fa 4f sbci r31, 0xFA ; 250
2426: 80 81 ld r24, Z
2428: 91 81 ldd r25, Z+1 ; 0x01
242a: 3f 93 push r19
242c: 2f 93 push r18
242e: 9f 93 push r25
2430: 8f 93 push r24
2432: 8e e9 ldi r24, 0x9E ; 158
2434: 92 e0 ldi r25, 0x02 ; 2
2436: 9f 93 push r25
2438: 8f 93 push r24
243a: ff 92 push r15
243c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2440: 84 e1 ldi r24, 0x14 ; 20
2442: 80 93 cc 01 sts 0x01CC, r24
2446: e0 91 70 05 lds r30, 0x0570
244a: ff 27 eor r31, r31
244c: ee 0f add r30, r30
244e: ff 1f adc r31, r31
2450: ef 5b subi r30, 0xBF ; 191
2452: fa 4f sbci r31, 0xFA ; 250
2454: 20 81 ld r18, Z
2456: 31 81 ldd r19, Z+1 ; 0x01
2458: e0 91 6f 05 lds r30, 0x056F
245c: ff 27 eor r31, r31
245e: ee 0f add r30, r30
2460: ff 1f adc r31, r31
2462: ef 5b subi r30, 0xBF ; 191
2464: fa 4f sbci r31, 0xFA ; 250
2466: 80 81 ld r24, Z
2468: 91 81 ldd r25, Z+1 ; 0x01
246a: 3f 93 push r19
246c: 2f 93 push r18
246e: 9f 93 push r25
2470: 8f 93 push r24
2472: 8e e8 ldi r24, 0x8E ; 142
2474: 92 e0 ldi r25, 0x02 ; 2
2476: 9f 93 push r25
2478: 8f 93 push r24
247a: ff 92 push r15
247c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2480: 88 e2 ldi r24, 0x28 ; 40
2482: 80 93 cc 01 sts 0x01CC, r24
2486: e0 91 72 05 lds r30, 0x0572
248a: ff 27 eor r31, r31
248c: ee 0f add r30, r30
248e: ff 1f adc r31, r31
2490: ef 5b subi r30, 0xBF ; 191
2492: fa 4f sbci r31, 0xFA ; 250
2494: 20 81 ld r18, Z
2496: 31 81 ldd r19, Z+1 ; 0x01
2498: e0 91 71 05 lds r30, 0x0571
249c: ff 27 eor r31, r31
249e: ee 0f add r30, r30
24a0: ff 1f adc r31, r31
24a2: ef 5b subi r30, 0xBF ; 191
24a4: fa 4f sbci r31, 0xFA ; 250
24a6: 80 81 ld r24, Z
24a8: 91 81 ldd r25, Z+1 ; 0x01
24aa: 3f 93 push r19
24ac: 2f 93 push r18
24ae: 9f 93 push r25
24b0: 8f 93 push r24
24b2: 8e e7 ldi r24, 0x7E ; 126
24b4: 92 e0 ldi r25, 0x02 ; 2
24b6: 9f 93 push r25
24b8: 8f 93 push r24
24ba: ff 92 push r15
24bc: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
24c0: 8c e3 ldi r24, 0x3C ; 60
24c2: 80 93 cc 01 sts 0x01CC, r24
24c6: e0 91 73 05 lds r30, 0x0573
24ca: ff 27 eor r31, r31
24cc: ee 0f add r30, r30
24ce: ff 1f adc r31, r31
24d0: ef 5b subi r30, 0xBF ; 191
24d2: fa 4f sbci r31, 0xFA ; 250
24d4: 80 81 ld r24, Z
24d6: 91 81 ldd r25, Z+1 ; 0x01
24d8: 9f 93 push r25
24da: 8f 93 push r24
24dc: 8e e6 ldi r24, 0x6E ; 110
24de: 92 e0 ldi r25, 0x02 ; 2
24e0: 9f 93 push r25
24e2: 8f 93 push r24
24e4: ff 92 push r15
24e6: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
24ea: 8d b7 in r24, 0x3d ; 61
24ec: 9e b7 in r25, 0x3e ; 62
24ee: 4a 96 adiw r24, 0x1a ; 26
24f0: c8 ce rjmp .-624 ; 0x2282 <Menu+0x1e2>
24f2: 10 92 cc 01 sts 0x01CC, r1
24f6: 80 e6 ldi r24, 0x60 ; 96
24f8: 92 e0 ldi r25, 0x02 ; 2
24fa: 9f 93 push r25
24fc: 8f 93 push r24
24fe: ff 92 push r15
2500: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2504: 84 e1 ldi r24, 0x14 ; 20
2506: 80 93 cc 01 sts 0x01CC, r24
250a: 20 91 d7 01 lds r18, 0x01D7
250e: 30 91 d8 01 lds r19, 0x01D8
2512: 80 91 b2 01 lds r24, 0x01B2
2516: 90 91 b3 01 lds r25, 0x01B3
251a: 60 91 be 01 lds r22, 0x01BE
251e: 3f 93 push r19
2520: 2f 93 push r18
2522: 77 27 eor r23, r23
2524: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
2528: 7f 93 push r23
252a: 6f 93 push r22
252c: 81 e5 ldi r24, 0x51 ; 81
252e: 92 e0 ldi r25, 0x02 ; 2
2530: 9f 93 push r25
2532: 8f 93 push r24
2534: ff 92 push r15
2536: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
253a: 88 e2 ldi r24, 0x28 ; 40
253c: 80 93 cc 01 sts 0x01CC, r24
2540: 20 91 d9 01 lds r18, 0x01D9
2544: 30 91 da 01 lds r19, 0x01DA
2548: 80 91 b4 01 lds r24, 0x01B4
254c: 90 91 b5 01 lds r25, 0x01B5
2550: 60 91 bf 01 lds r22, 0x01BF
2554: 3f 93 push r19
2556: 2f 93 push r18
2558: 77 27 eor r23, r23
255a: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
255e: 7f 93 push r23
2560: 6f 93 push r22
2562: 82 e4 ldi r24, 0x42 ; 66
2564: 92 e0 ldi r25, 0x02 ; 2
2566: 9f 93 push r25
2568: 8f 93 push r24
256a: ff 92 push r15
256c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2570: 8c e3 ldi r24, 0x3C ; 60
2572: 80 93 cc 01 sts 0x01CC, r24
2576: 20 91 db 01 lds r18, 0x01DB
257a: 30 91 dc 01 lds r19, 0x01DC
257e: 80 91 b6 01 lds r24, 0x01B6
2582: 90 91 b7 01 lds r25, 0x01B7
2586: 60 91 c0 01 lds r22, 0x01C0
258a: 3f 93 push r19
258c: 2f 93 push r18
258e: 77 27 eor r23, r23
2590: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
2594: 7f 93 push r23
2596: 6f 93 push r22
2598: 83 e3 ldi r24, 0x33 ; 51
259a: 92 e0 ldi r25, 0x02 ; 2
259c: 56 c0 rjmp .+172 ; 0x264a <Menu+0x5aa>
259e: 10 92 cc 01 sts 0x01CC, r1
25a2: 86 e2 ldi r24, 0x26 ; 38
25a4: 92 e0 ldi r25, 0x02 ; 2
25a6: 9f 93 push r25
25a8: 8f 93 push r24
25aa: ff 92 push r15
25ac: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
25b0: 84 e1 ldi r24, 0x14 ; 20
25b2: 80 93 cc 01 sts 0x01CC, r24
25b6: 20 91 dd 01 lds r18, 0x01DD
25ba: 30 91 de 01 lds r19, 0x01DE
25be: 80 91 ba 01 lds r24, 0x01BA
25c2: 90 91 bb 01 lds r25, 0x01BB
25c6: 60 91 c1 01 lds r22, 0x01C1
25ca: 3f 93 push r19
25cc: 2f 93 push r18
25ce: 77 27 eor r23, r23
25d0: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
25d4: 7f 93 push r23
25d6: 6f 93 push r22
25d8: 87 e1 ldi r24, 0x17 ; 23
25da: 92 e0 ldi r25, 0x02 ; 2
25dc: 9f 93 push r25
25de: 8f 93 push r24
25e0: ff 92 push r15
25e2: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
25e6: 88 e2 ldi r24, 0x28 ; 40
25e8: 80 93 cc 01 sts 0x01CC, r24
25ec: 20 91 df 01 lds r18, 0x01DF
25f0: 30 91 e0 01 lds r19, 0x01E0
25f4: 80 91 b8 01 lds r24, 0x01B8
25f8: 90 91 b9 01 lds r25, 0x01B9
25fc: 60 91 c2 01 lds r22, 0x01C2
2600: 3f 93 push r19
2602: 2f 93 push r18
2604: 77 27 eor r23, r23
2606: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
260a: 7f 93 push r23
260c: 6f 93 push r22
260e: 88 e0 ldi r24, 0x08 ; 8
2610: 92 e0 ldi r25, 0x02 ; 2
2612: 9f 93 push r25
2614: 8f 93 push r24
2616: ff 92 push r15
2618: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
261c: 8c e3 ldi r24, 0x3C ; 60
261e: 80 93 cc 01 sts 0x01CC, r24
2622: 60 91 e1 01 lds r22, 0x01E1
2626: 70 91 e2 01 lds r23, 0x01E2
262a: 80 91 e3 01 lds r24, 0x01E3
262e: 90 91 e4 01 lds r25, 0x01E4
2632: 00 91 29 05 lds r16, 0x0529
2636: 10 91 2a 05 lds r17, 0x052A
263a: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
263e: 7f 93 push r23
2640: 6f 93 push r22
2642: 1f 93 push r17
2644: 0f 93 push r16
2646: 89 ef ldi r24, 0xF9 ; 249
2648: 91 e0 ldi r25, 0x01 ; 1
264a: 9f 93 push r25
264c: 8f 93 push r24
264e: ff 92 push r15
2650: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2654: 8d b7 in r24, 0x3d ; 61
2656: 9e b7 in r25, 0x3e ; 62
2658: 48 96 adiw r24, 0x18 ; 24
265a: 13 ce rjmp .-986 ; 0x2282 <Menu+0x1e2>
265c: 84 e1 ldi r24, 0x14 ; 20
265e: 80 93 cc 01 sts 0x01CC, r24
2662: 80 91 04 01 lds r24, 0x0104
2666: 90 91 05 01 lds r25, 0x0105
266a: 9f 93 push r25
266c: 8f 93 push r24
266e: 8a ee ldi r24, 0xEA ; 234
2670: 91 e0 ldi r25, 0x01 ; 1
2672: 9f 93 push r25
2674: 8f 93 push r24
2676: ff 92 push r15
2678: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
267c: 88 e2 ldi r24, 0x28 ; 40
267e: 80 93 cc 01 sts 0x01CC, r24
2682: 80 91 27 02 lds r24, 0x0227
2686: 99 27 eor r25, r25
2688: 9f 93 push r25
268a: 8f 93 push r24
268c: 8b ed ldi r24, 0xDB ; 219
268e: 91 e0 ldi r25, 0x01 ; 1
2690: 9f 93 push r25
2692: 8f 93 push r24
2694: ff 92 push r15
2696: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
269a: 8d b7 in r24, 0x3d ; 61
269c: 9e b7 in r25, 0x3e ; 62
269e: 0a 96 adiw r24, 0x0a ; 10
26a0: f0 cd rjmp .-1056 ; 0x2282 <Menu+0x1e2>
26a2: 10 92 cc 01 sts 0x01CC, r1
26a6: 8c ec ldi r24, 0xCC ; 204
26a8: 91 e0 ldi r25, 0x01 ; 1
26aa: 9f 93 push r25
26ac: 8f 93 push r24
26ae: ff 92 push r15
26b0: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
26b4: 84 e1 ldi r24, 0x14 ; 20
26b6: 80 93 cc 01 sts 0x01CC, r24
26ba: 80 91 1b 02 lds r24, 0x021B
26be: 90 91 1c 02 lds r25, 0x021C
26c2: 9f 93 push r25
26c4: 8f 93 push r24
26c6: 8d eb ldi r24, 0xBD ; 189
26c8: 91 e0 ldi r25, 0x01 ; 1
26ca: 9f 93 push r25
26cc: 8f 93 push r24
26ce: ff 92 push r15
26d0: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
26d4: 88 e2 ldi r24, 0x28 ; 40
26d6: 80 93 cc 01 sts 0x01CC, r24
26da: 80 91 17 02 lds r24, 0x0217
26de: 90 91 18 02 lds r25, 0x0218
26e2: 9f 93 push r25
26e4: 8f 93 push r24
26e6: 8e ea ldi r24, 0xAE ; 174
26e8: 91 e0 ldi r25, 0x01 ; 1
26ea: 9f 93 push r25
26ec: 8f 93 push r24
26ee: ff 92 push r15
26f0: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
26f4: 8c e3 ldi r24, 0x3C ; 60
26f6: 80 93 cc 01 sts 0x01CC, r24
26fa: 80 91 19 02 lds r24, 0x0219
26fe: 90 91 1a 02 lds r25, 0x021A
2702: 9f 93 push r25
2704: 8f 93 push r24
2706: 8f e9 ldi r24, 0x9F ; 159
2708: 91 e0 ldi r25, 0x01 ; 1
270a: 9f 93 push r25
270c: 8f 93 push r24
270e: ff 92 push r15
2710: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2714: 8d b7 in r24, 0x3d ; 61
2716: 9e b7 in r25, 0x3e ; 62
2718: 42 96 adiw r24, 0x12 ; 18
271a: b3 cd rjmp .-1178 ; 0x2282 <Menu+0x1e2>
271c: 10 92 cc 01 sts 0x01CC, r1
2720: 80 91 1f 02 lds r24, 0x021F
2724: 90 91 20 02 lds r25, 0x0220
2728: 9f 93 push r25
272a: 8f 93 push r24
272c: 83 e9 ldi r24, 0x93 ; 147
272e: 91 e0 ldi r25, 0x01 ; 1
2730: 9f 93 push r25
2732: 8f 93 push r24
2734: ff 92 push r15
2736: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
273a: 84 e1 ldi r24, 0x14 ; 20
273c: 80 93 cc 01 sts 0x01CC, r24
2740: 80 91 21 02 lds r24, 0x0221
2744: 90 91 22 02 lds r25, 0x0222
2748: 9f 93 push r25
274a: 8f 93 push r24
274c: 87 e8 ldi r24, 0x87 ; 135
274e: 91 e0 ldi r25, 0x01 ; 1
2750: 9f 93 push r25
2752: 8f 93 push r24
2754: ff 92 push r15
2756: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
275a: 88 e2 ldi r24, 0x28 ; 40
275c: 80 93 cc 01 sts 0x01CC, r24
2760: 80 91 23 02 lds r24, 0x0223
2764: 90 91 24 02 lds r25, 0x0224
2768: 9f 93 push r25
276a: 8f 93 push r24
276c: 8b e7 ldi r24, 0x7B ; 123
276e: 91 e0 ldi r25, 0x01 ; 1
2770: 9f 93 push r25
2772: 8f 93 push r24
2774: ff 92 push r15
2776: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
277a: 8c e3 ldi r24, 0x3C ; 60
277c: 80 93 cc 01 sts 0x01CC, r24
2780: 80 91 25 02 lds r24, 0x0225
2784: 90 91 26 02 lds r25, 0x0226
2788: 9f 93 push r25
278a: 8f 93 push r24
278c: 8f e6 ldi r24, 0x6F ; 111
278e: 91 e0 ldi r25, 0x01 ; 1
2790: 9f 93 push r25
2792: 8f 93 push r24
2794: ff 92 push r15
2796: 70 cd rjmp .-1312 ; 0x2278 <Menu+0x1d8>
2798: 10 92 cc 01 sts 0x01CC, r1
279c: 87 e6 ldi r24, 0x67 ; 103
279e: 91 e0 ldi r25, 0x01 ; 1
27a0: 9f 93 push r25
27a2: 8f 93 push r24
27a4: ff 92 push r15
27a6: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
27aa: 84 e1 ldi r24, 0x14 ; 20
27ac: 80 93 cc 01 sts 0x01CC, r24
27b0: 80 91 89 01 lds r24, 0x0189
27b4: 99 27 eor r25, r25
27b6: 9f 93 push r25
27b8: 8f 93 push r24
27ba: 89 e5 ldi r24, 0x59 ; 89
27bc: 91 e0 ldi r25, 0x01 ; 1
27be: 9f 93 push r25
27c0: 8f 93 push r24
27c2: ff 92 push r15
27c4: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
27c8: 88 e2 ldi r24, 0x28 ; 40
27ca: 80 93 cc 01 sts 0x01CC, r24
27ce: 80 91 ad 01 lds r24, 0x01AD
27d2: 90 91 ae 01 lds r25, 0x01AE
27d6: 9f 93 push r25
27d8: 8f 93 push r24
27da: 8b e4 ldi r24, 0x4B ; 75
27dc: 91 e0 ldi r25, 0x01 ; 1
27de: 9f 93 push r25
27e0: 8f 93 push r24
27e2: ff 92 push r15
27e4: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
27e8: 8c e3 ldi r24, 0x3C ; 60
27ea: 80 93 cc 01 sts 0x01CC, r24
27ee: 80 91 91 05 lds r24, 0x0591
27f2: 99 27 eor r25, r25
27f4: 9f 93 push r25
27f6: 8f 93 push r24
27f8: 80 91 90 05 lds r24, 0x0590
27fc: 99 27 eor r25, r25
27fe: 9f 93 push r25
2800: 8f 93 push r24
2802: 8d e3 ldi r24, 0x3D ; 61
2804: 91 e0 ldi r25, 0x01 ; 1
2806: 9f 93 push r25
2808: 8f 93 push r24
280a: ff 92 push r15
280c: 0e 94 c3 08 call 0x1186 ; 0x1186 <_printf_P>
2810: 35 cd rjmp .-1430 ; 0x227c <Menu+0x1dc>
2812: 01 50 subi r16, 0x01 ; 1
2814: 00 93 66 01 sts 0x0166, r16
2818: 10 92 ce 01 sts 0x01CE, r1
281c: 10 92 cd 01 sts 0x01CD, r1
2820: 1f 91 pop r17
2822: 0f 91 pop r16
2824: ff 90 pop r15
2826: 08 95 ret
 
00002828 <i2c_init>:
2828: 10 92 b9 00 sts 0x00B9, r1
282c: 8a e2 ldi r24, 0x2A ; 42
282e: 80 93 b8 00 sts 0x00B8, r24
2832: 08 95 ret
 
00002834 <i2c_start>:
2834: 85 ea ldi r24, 0xA5 ; 165
2836: 80 93 bc 00 sts 0x00BC, r24
283a: 80 e0 ldi r24, 0x00 ; 0
283c: 90 e0 ldi r25, 0x00 ; 0
283e: 08 95 ret
 
00002840 <i2c_stop>:
2840: 84 e9 ldi r24, 0x94 ; 148
2842: 80 93 bc 00 sts 0x00BC, r24
2846: 08 95 ret
 
00002848 <i2c_write_byte>:
2848: 10 92 b9 00 sts 0x00B9, r1
284c: 80 93 bb 00 sts 0x00BB, r24
2850: 85 e8 ldi r24, 0x85 ; 133
2852: 80 93 bc 00 sts 0x00BC, r24
2856: 80 e0 ldi r24, 0x00 ; 0
2858: 90 e0 ldi r25, 0x00 ; 0
285a: 08 95 ret
 
0000285c <__vector_26>:
285c: 1f 92 push r1
285e: 0f 92 push r0
2860: 0f b6 in r0, 0x3f ; 63
2862: 0f 92 push r0
2864: 11 24 eor r1, r1
2866: 8f 93 push r24
2868: 9f 93 push r25
286a: ef 93 push r30
286c: ff 93 push r31
286e: 80 91 cf 01 lds r24, 0x01CF
2872: 8f 5f subi r24, 0xFF ; 255
2874: 80 93 cf 01 sts 0x01CF, r24
2878: 81 50 subi r24, 0x01 ; 1
287a: 83 30 cpi r24, 0x03 ; 3
287c: 09 f4 brne .+2 ; 0x2880 <__vector_26+0x24>
287e: 42 c0 rjmp .+132 ; 0x2904 <__vector_26+0xa8>
2880: 84 30 cpi r24, 0x04 ; 4
2882: 28 f4 brcc .+10 ; 0x288e <__vector_26+0x32>
2884: 81 30 cpi r24, 0x01 ; 1
2886: a1 f0 breq .+40 ; 0x28b0 <__vector_26+0x54>
2888: 82 30 cpi r24, 0x02 ; 2
288a: 70 f5 brcc .+92 ; 0x28e8 <__vector_26+0x8c>
288c: 0c c0 rjmp .+24 ; 0x28a6 <__vector_26+0x4a>
288e: 85 30 cpi r24, 0x05 ; 5
2890: 09 f4 brne .+2 ; 0x2894 <__vector_26+0x38>
2892: 48 c0 rjmp .+144 ; 0x2924 <__vector_26+0xc8>
2894: 85 30 cpi r24, 0x05 ; 5
2896: d8 f1 brcs .+118 ; 0x290e <__vector_26+0xb2>
2898: 86 30 cpi r24, 0x06 ; 6
289a: 09 f4 brne .+2 ; 0x289e <__vector_26+0x42>
289c: 4b c0 rjmp .+150 ; 0x2934 <__vector_26+0xd8>
289e: 87 30 cpi r24, 0x07 ; 7
28a0: 09 f0 breq .+2 ; 0x28a4 <__vector_26+0x48>
28a2: 71 c0 rjmp .+226 ; 0x2986 <__vector_26+0x12a>
28a4: 5b c0 rjmp .+182 ; 0x295c <__vector_26+0x100>
28a6: 80 91 d0 01 lds r24, 0x01D0
28aa: 88 0f add r24, r24
28ac: 8e 5a subi r24, 0xAE ; 174
28ae: 14 c0 rjmp .+40 ; 0x28d8 <__vector_26+0x7c>
28b0: 80 91 d0 01 lds r24, 0x01D0
28b4: 8f 5f subi r24, 0xFF ; 255
28b6: 80 93 d0 01 sts 0x01D0, r24
28ba: 81 50 subi r24, 0x01 ; 1
28bc: 81 30 cpi r24, 0x01 ; 1
28be: 09 f4 brne .+2 ; 0x28c2 <__vector_26+0x66>
28c0: 44 c0 rjmp .+136 ; 0x294a <__vector_26+0xee>
28c2: 81 30 cpi r24, 0x01 ; 1
28c4: 38 f0 brcs .+14 ; 0x28d4 <__vector_26+0x78>
28c6: 82 30 cpi r24, 0x02 ; 2
28c8: 09 f4 brne .+2 ; 0x28cc <__vector_26+0x70>
28ca: 42 c0 rjmp .+132 ; 0x2950 <__vector_26+0xf4>
28cc: 83 30 cpi r24, 0x03 ; 3
28ce: 09 f0 breq .+2 ; 0x28d2 <__vector_26+0x76>
28d0: 5a c0 rjmp .+180 ; 0x2986 <__vector_26+0x12a>
28d2: 41 c0 rjmp .+130 ; 0x2956 <__vector_26+0xfa>
28d4: 80 91 96 02 lds r24, 0x0296
28d8: 10 92 b9 00 sts 0x00B9, r1
28dc: 80 93 bb 00 sts 0x00BB, r24
28e0: 85 e8 ldi r24, 0x85 ; 133
28e2: 80 93 bc 00 sts 0x00BC, r24
28e6: 4f c0 rjmp .+158 ; 0x2986 <__vector_26+0x12a>
28e8: 84 e9 ldi r24, 0x94 ; 148
28ea: 80 93 bc 00 sts 0x00BC, r24
28ee: 80 91 d0 01 lds r24, 0x01D0
28f2: 84 30 cpi r24, 0x04 ; 4
28f4: 18 f4 brcc .+6 ; 0x28fc <__vector_26+0xa0>
28f6: 10 92 cf 01 sts 0x01CF, r1
28fa: 02 c0 rjmp .+4 ; 0x2900 <__vector_26+0xa4>
28fc: 10 92 d0 01 sts 0x01D0, r1
2900: 85 ea ldi r24, 0xA5 ; 165
2902: ef cf rjmp .-34 ; 0x28e2 <__vector_26+0x86>
2904: 80 91 d1 01 lds r24, 0x01D1
2908: 88 0f add r24, r24
290a: 8d 5a subi r24, 0xAD ; 173
290c: e5 cf rjmp .-54 ; 0x28d8 <__vector_26+0x7c>
290e: 80 91 d1 01 lds r24, 0x01D1
2912: 81 30 cpi r24, 0x01 ; 1
2914: d1 f0 breq .+52 ; 0x294a <__vector_26+0xee>
2916: 81 30 cpi r24, 0x01 ; 1
2918: e8 f2 brcs .-70 ; 0x28d4 <__vector_26+0x78>
291a: 82 30 cpi r24, 0x02 ; 2
291c: c9 f0 breq .+50 ; 0x2950 <__vector_26+0xf4>
291e: 83 30 cpi r24, 0x03 ; 3
2920: 91 f5 brne .+100 ; 0x2986 <__vector_26+0x12a>
2922: 19 c0 rjmp .+50 ; 0x2956 <__vector_26+0xfa>
2924: 80 91 bb 00 lds r24, 0x00BB
2928: e0 91 d1 01 lds r30, 0x01D1
292c: ff 27 eor r31, r31
292e: e7 5c subi r30, 0xC7 ; 199
2930: fa 4f sbci r31, 0xFA ; 250
2932: 80 83 st Z, r24
2934: 80 91 d1 01 lds r24, 0x01D1
2938: 81 30 cpi r24, 0x01 ; 1
293a: 39 f0 breq .+14 ; 0x294a <__vector_26+0xee>
293c: 81 30 cpi r24, 0x01 ; 1
293e: 50 f2 brcs .-108 ; 0x28d4 <__vector_26+0x78>
2940: 82 30 cpi r24, 0x02 ; 2
2942: 31 f0 breq .+12 ; 0x2950 <__vector_26+0xf4>
2944: 83 30 cpi r24, 0x03 ; 3
2946: f9 f4 brne .+62 ; 0x2986 <__vector_26+0x12a>
2948: 06 c0 rjmp .+12 ; 0x2956 <__vector_26+0xfa>
294a: 80 91 97 02 lds r24, 0x0297
294e: c4 cf rjmp .-120 ; 0x28d8 <__vector_26+0x7c>
2950: 80 91 9a 02 lds r24, 0x029A
2954: c1 cf rjmp .-126 ; 0x28d8 <__vector_26+0x7c>
2956: 80 91 a6 02 lds r24, 0x02A6
295a: be cf rjmp .-132 ; 0x28d8 <__vector_26+0x7c>
295c: 80 91 d1 01 lds r24, 0x01D1
2960: 90 91 bb 00 lds r25, 0x00BB
2964: e8 2f mov r30, r24
2966: ff 27 eor r31, r31
2968: e7 5c subi r30, 0xC7 ; 199
296a: fa 4f sbci r31, 0xFA ; 250
296c: 94 83 std Z+4, r25 ; 0x04
296e: 8f 5f subi r24, 0xFF ; 255
2970: 80 93 d1 01 sts 0x01D1, r24
2974: 84 30 cpi r24, 0x04 ; 4
2976: 10 f0 brcs .+4 ; 0x297c <__vector_26+0x120>
2978: 10 92 d1 01 sts 0x01D1, r1
297c: 84 e9 ldi r24, 0x94 ; 148
297e: 80 93 bc 00 sts 0x00BC, r24
2982: 10 92 cf 01 sts 0x01CF, r1
2986: ff 91 pop r31
2988: ef 91 pop r30
298a: 9f 91 pop r25
298c: 8f 91 pop r24
298e: 0f 90 pop r0
2990: 0f be out 0x3f, r0 ; 63
2992: 0f 90 pop r0
2994: 1f 90 pop r1
2996: 18 95 reti
 
00002998 <rc_sum_init>:
2998: 83 ec ldi r24, 0xC3 ; 195
299a: 80 93 81 00 sts 0x0081, r24
299e: ef e6 ldi r30, 0x6F ; 111
29a0: f0 e0 ldi r31, 0x00 ; 0
29a2: 80 81 ld r24, Z
29a4: 80 62 ori r24, 0x20 ; 32
29a6: 80 83 st Z, r24
29a8: 10 92 dc 01 sts 0x01DC, r1
29ac: 10 92 db 01 sts 0x01DB, r1
29b0: 10 92 da 01 sts 0x01DA, r1
29b4: 10 92 d9 01 sts 0x01D9, r1
29b8: 10 92 d8 01 sts 0x01D8, r1
29bc: 10 92 d7 01 sts 0x01D7, r1
29c0: 08 95 ret
 
000029c2 <__vector_12>:
29c2: 1f 92 push r1
29c4: 0f 92 push r0
29c6: 0f b6 in r0, 0x3f ; 63
29c8: 0f 92 push r0
29ca: 11 24 eor r1, r1
29cc: 0f 93 push r16
29ce: 1f 93 push r17
29d0: 2f 93 push r18
29d2: 3f 93 push r19
29d4: 4f 93 push r20
29d6: 5f 93 push r21
29d8: 6f 93 push r22
29da: 7f 93 push r23
29dc: 8f 93 push r24
29de: 9f 93 push r25
29e0: af 93 push r26
29e2: bf 93 push r27
29e4: cf 93 push r28
29e6: df 93 push r29
29e8: ef 93 push r30
29ea: ff 93 push r31
29ec: 20 91 86 00 lds r18, 0x0086
29f0: 30 91 87 00 lds r19, 0x0087
29f4: 80 91 d4 01 lds r24, 0x01D4
29f8: 90 91 d5 01 lds r25, 0x01D5
29fc: 28 1b sub r18, r24
29fe: 39 0b sbc r19, r25
2a00: 80 91 86 00 lds r24, 0x0086
2a04: 90 91 87 00 lds r25, 0x0087
2a08: 90 93 d5 01 sts 0x01D5, r25
2a0c: 80 93 d4 01 sts 0x01D4, r24
2a10: c9 01 movw r24, r18
2a12: 8d 5d subi r24, 0xDD ; 221
2a14: 95 40 sbci r25, 0x05 ; 5
2a16: 83 56 subi r24, 0x63 ; 99
2a18: 99 41 sbci r25, 0x19 ; 25
2a1a: 48 f4 brcc .+18 ; 0x2a2e <__vector_12+0x6c>
2a1c: 81 e0 ldi r24, 0x01 ; 1
2a1e: 90 e0 ldi r25, 0x00 ; 0
2a20: 90 93 d3 01 sts 0x01D3, r25
2a24: 80 93 d2 01 sts 0x01D2, r24
2a28: 10 92 67 01 sts 0x0167, r1
2a2c: 54 c0 rjmp .+168 ; 0x2ad6 <__vector_12+0x114>
2a2e: c0 91 d2 01 lds r28, 0x01D2
2a32: d0 91 d3 01 lds r29, 0x01D3
2a36: ca 30 cpi r28, 0x0A ; 10
2a38: d1 05 cpc r29, r1
2a3a: 0c f0 brlt .+2 ; 0x2a3e <__vector_12+0x7c>
2a3c: 4c c0 rjmp .+152 ; 0x2ad6 <__vector_12+0x114>
2a3e: c9 01 movw r24, r18
2a40: 8b 5f subi r24, 0xFB ; 251
2a42: 90 40 sbci r25, 0x00 ; 0
2a44: 84 5b subi r24, 0xB4 ; 180
2a46: 91 40 sbci r25, 0x01 ; 1
2a48: 08 f0 brcs .+2 ; 0x2a4c <__vector_12+0x8a>
2a4a: 40 c0 rjmp .+128 ; 0x2acc <__vector_12+0x10a>
2a4c: a9 01 movw r20, r18
2a4e: 42 5d subi r20, 0xD2 ; 210
2a50: 51 40 sbci r21, 0x01 ; 1
2a52: fe 01 movw r30, r28
2a54: ee 0f add r30, r30
2a56: ff 1f adc r31, r31
2a58: ef 5b subi r30, 0xBF ; 191
2a5a: fa 4f sbci r31, 0xFA ; 250
2a5c: 80 81 ld r24, Z
2a5e: 91 81 ldd r25, Z+1 ; 0x01
2a60: fa 01 movw r30, r20
2a62: e8 1b sub r30, r24
2a64: f9 0b sbc r31, r25
2a66: cf 01 movw r24, r30
2a68: f7 ff sbrs r31, 7
2a6a: 03 c0 rjmp .+6 ; 0x2a72 <__vector_12+0xb0>
2a6c: 90 95 com r25
2a6e: 81 95 neg r24
2a70: 9f 4f sbci r25, 0xFF ; 255
2a72: 06 97 sbiw r24, 0x06 ; 6
2a74: 4c f4 brge .+18 ; 0x2a88 <__vector_12+0xc6>
2a76: 80 91 27 02 lds r24, 0x0227
2a7a: 88 3c cpi r24, 0xC8 ; 200
2a7c: 28 f4 brcc .+10 ; 0x2a88 <__vector_12+0xc6>
2a7e: 80 91 27 02 lds r24, 0x0227
2a82: 86 5f subi r24, 0xF6 ; 246
2a84: 80 93 27 02 sts 0x0227, r24
2a88: fe 01 movw r30, r28
2a8a: ee 0f add r30, r30
2a8c: ff 1f adc r31, r31
2a8e: 8f 01 movw r16, r30
2a90: 0f 5b subi r16, 0xBF ; 191
2a92: 1a 4f sbci r17, 0xFA ; 250
2a94: d8 01 movw r26, r16
2a96: 2d 91 ld r18, X+
2a98: 3c 91 ld r19, X
2a9a: c9 01 movw r24, r18
2a9c: 88 0f add r24, r24
2a9e: 99 1f adc r25, r25
2aa0: 82 0f add r24, r18
2aa2: 93 1f adc r25, r19
2aa4: 84 0f add r24, r20
2aa6: 95 1f adc r25, r21
2aa8: 64 e0 ldi r22, 0x04 ; 4
2aaa: 70 e0 ldi r23, 0x00 ; 0
2aac: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
2ab0: d8 01 movw r26, r16
2ab2: 8d 91 ld r24, X+
2ab4: 9c 91 ld r25, X
2ab6: 11 97 sbiw r26, 0x01 ; 1
2ab8: 9b 01 movw r18, r22
2aba: 28 1b sub r18, r24
2abc: 39 0b sbc r19, r25
2abe: e9 5a subi r30, 0xA9 ; 169
2ac0: fa 4f sbci r31, 0xFA ; 250
2ac2: 31 83 std Z+1, r19 ; 0x01
2ac4: 20 83 st Z, r18
2ac6: 11 96 adiw r26, 0x01 ; 1
2ac8: 7c 93 st X, r23
2aca: 6e 93 st -X, r22
2acc: 21 96 adiw r28, 0x01 ; 1
2ace: d0 93 d3 01 sts 0x01D3, r29
2ad2: c0 93 d2 01 sts 0x01D2, r28
2ad6: ff 91 pop r31
2ad8: ef 91 pop r30
2ada: df 91 pop r29
2adc: cf 91 pop r28
2ade: bf 91 pop r27
2ae0: af 91 pop r26
2ae2: 9f 91 pop r25
2ae4: 8f 91 pop r24
2ae6: 7f 91 pop r23
2ae8: 6f 91 pop r22
2aea: 5f 91 pop r21
2aec: 4f 91 pop r20
2aee: 3f 91 pop r19
2af0: 2f 91 pop r18
2af2: 1f 91 pop r17
2af4: 0f 91 pop r16
2af6: 0f 90 pop r0
2af8: 0f be out 0x3f, r0 ; 63
2afa: 0f 90 pop r0
2afc: 1f 90 pop r1
2afe: 18 95 reti
 
00002b00 <Mittelwert>:
2b00: af 92 push r10
2b02: bf 92 push r11
2b04: cf 92 push r12
2b06: df 92 push r13
2b08: ef 92 push r14
2b0a: ff 92 push r15
2b0c: 0f 93 push r16
2b0e: 1f 93 push r17
2b10: 10 92 7a 00 sts 0x007A, r1
2b14: 80 91 be 01 lds r24, 0x01BE
2b18: 88 23 and r24, r24
2b1a: 69 f0 breq .+26 ; 0x2b36 <Mittelwert+0x36>
2b1c: 80 91 b2 01 lds r24, 0x01B2
2b20: 90 91 b3 01 lds r25, 0x01B3
2b24: 60 91 be 01 lds r22, 0x01BE
2b28: 77 27 eor r23, r23
2b2a: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
2b2e: 70 93 aa 05 sts 0x05AA, r23
2b32: 60 93 a9 05 sts 0x05A9, r22
2b36: 80 91 bf 01 lds r24, 0x01BF
2b3a: 88 23 and r24, r24
2b3c: 69 f0 breq .+26 ; 0x2b58 <Mittelwert+0x58>
2b3e: 80 91 b4 01 lds r24, 0x01B4
2b42: 90 91 b5 01 lds r25, 0x01B5
2b46: 60 91 bf 01 lds r22, 0x01BF
2b4a: 77 27 eor r23, r23
2b4c: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
2b50: 70 93 a8 05 sts 0x05A8, r23
2b54: 60 93 a7 05 sts 0x05A7, r22
2b58: 80 91 c0 01 lds r24, 0x01C0
2b5c: 88 23 and r24, r24
2b5e: 69 f0 breq .+26 ; 0x2b7a <Mittelwert+0x7a>
2b60: 80 91 b6 01 lds r24, 0x01B6
2b64: 90 91 b7 01 lds r25, 0x01B7
2b68: 60 91 c0 01 lds r22, 0x01C0
2b6c: 77 27 eor r23, r23
2b6e: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
2b72: 70 93 b6 05 sts 0x05B6, r23
2b76: 60 93 b5 05 sts 0x05B5, r22
2b7a: 80 91 c1 01 lds r24, 0x01C1
2b7e: 88 23 and r24, r24
2b80: d9 f1 breq .+118 ; 0x2bf8 <Mittelwert+0xf8>
2b82: e0 90 b2 05 lds r14, 0x05B2
2b86: f0 90 b3 05 lds r15, 0x05B3
2b8a: 60 91 ba 01 lds r22, 0x01BA
2b8e: 70 91 bb 01 lds r23, 0x01BB
2b92: 20 91 c1 01 lds r18, 0x01C1
2b96: 00 27 eor r16, r16
2b98: f7 fc sbrc r15, 7
2b9a: 00 95 com r16
2b9c: 10 2f mov r17, r16
2b9e: 57 01 movw r10, r14
2ba0: 68 01 movw r12, r16
2ba2: 43 e0 ldi r20, 0x03 ; 3
2ba4: aa 0c add r10, r10
2ba6: bb 1c adc r11, r11
2ba8: cc 1c adc r12, r12
2baa: dd 1c adc r13, r13
2bac: 4a 95 dec r20
2bae: d1 f7 brne .-12 ; 0x2ba4 <Mittelwert+0xa4>
2bb0: ae 18 sub r10, r14
2bb2: bf 08 sbc r11, r15
2bb4: c0 0a sbc r12, r16
2bb6: d1 0a sbc r13, r17
2bb8: 88 27 eor r24, r24
2bba: 77 fd sbrc r23, 7
2bbc: 80 95 com r24
2bbe: 98 2f mov r25, r24
2bc0: 34 e0 ldi r19, 0x04 ; 4
2bc2: 66 0f add r22, r22
2bc4: 77 1f adc r23, r23
2bc6: 88 1f adc r24, r24
2bc8: 99 1f adc r25, r25
2bca: 3a 95 dec r19
2bcc: d1 f7 brne .-12 ; 0x2bc2 <Mittelwert+0xc2>
2bce: 33 27 eor r19, r19
2bd0: 44 27 eor r20, r20
2bd2: 55 27 eor r21, r21
2bd4: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
2bd8: a2 0e add r10, r18
2bda: b3 1e adc r11, r19
2bdc: c4 1e adc r12, r20
2bde: d5 1e adc r13, r21
2be0: c6 01 movw r24, r12
2be2: b5 01 movw r22, r10
2be4: 28 e0 ldi r18, 0x08 ; 8
2be6: 30 e0 ldi r19, 0x00 ; 0
2be8: 40 e0 ldi r20, 0x00 ; 0
2bea: 50 e0 ldi r21, 0x00 ; 0
2bec: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
2bf0: 30 93 b3 05 sts 0x05B3, r19
2bf4: 20 93 b2 05 sts 0x05B2, r18
2bf8: 80 91 c2 01 lds r24, 0x01C2
2bfc: 88 23 and r24, r24
2bfe: d9 f1 breq .+118 ; 0x2c76 <Mittelwert+0x176>
2c00: e0 90 bb 05 lds r14, 0x05BB
2c04: f0 90 bc 05 lds r15, 0x05BC
2c08: 60 91 b8 01 lds r22, 0x01B8
2c0c: 70 91 b9 01 lds r23, 0x01B9
2c10: 20 91 c2 01 lds r18, 0x01C2
2c14: 00 27 eor r16, r16
2c16: f7 fc sbrc r15, 7
2c18: 00 95 com r16
2c1a: 10 2f mov r17, r16
2c1c: 57 01 movw r10, r14
2c1e: 68 01 movw r12, r16
2c20: 83 e0 ldi r24, 0x03 ; 3
2c22: aa 0c add r10, r10
2c24: bb 1c adc r11, r11
2c26: cc 1c adc r12, r12
2c28: dd 1c adc r13, r13
2c2a: 8a 95 dec r24
2c2c: d1 f7 brne .-12 ; 0x2c22 <Mittelwert+0x122>
2c2e: ae 18 sub r10, r14
2c30: bf 08 sbc r11, r15
2c32: c0 0a sbc r12, r16
2c34: d1 0a sbc r13, r17
2c36: 88 27 eor r24, r24
2c38: 77 fd sbrc r23, 7
2c3a: 80 95 com r24
2c3c: 98 2f mov r25, r24
2c3e: b4 e0 ldi r27, 0x04 ; 4
2c40: 66 0f add r22, r22
2c42: 77 1f adc r23, r23
2c44: 88 1f adc r24, r24
2c46: 99 1f adc r25, r25
2c48: ba 95 dec r27
2c4a: d1 f7 brne .-12 ; 0x2c40 <Mittelwert+0x140>
2c4c: 33 27 eor r19, r19
2c4e: 44 27 eor r20, r20
2c50: 55 27 eor r21, r21
2c52: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
2c56: a2 0e add r10, r18
2c58: b3 1e adc r11, r19
2c5a: c4 1e adc r12, r20
2c5c: d5 1e adc r13, r21
2c5e: c6 01 movw r24, r12
2c60: b5 01 movw r22, r10
2c62: 28 e0 ldi r18, 0x08 ; 8
2c64: 30 e0 ldi r19, 0x00 ; 0
2c66: 40 e0 ldi r20, 0x00 ; 0
2c68: 50 e0 ldi r21, 0x00 ; 0
2c6a: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
2c6e: 30 93 bc 05 sts 0x05BC, r19
2c72: 20 93 bb 05 sts 0x05BB, r18
2c76: 80 91 c3 01 lds r24, 0x01C3
2c7a: 88 23 and r24, r24
2c7c: a1 f1 breq .+104 ; 0x2ce6 <Mittelwert+0x1e6>
2c7e: e0 90 ac 05 lds r14, 0x05AC
2c82: f0 90 ad 05 lds r15, 0x05AD
2c86: 60 91 bc 01 lds r22, 0x01BC
2c8a: 70 91 bd 01 lds r23, 0x01BD
2c8e: 20 91 c3 01 lds r18, 0x01C3
2c92: 00 27 eor r16, r16
2c94: f7 fc sbrc r15, 7
2c96: 00 95 com r16
2c98: 10 2f mov r17, r16
2c9a: 57 01 movw r10, r14
2c9c: 68 01 movw r12, r16
2c9e: a3 e0 ldi r26, 0x03 ; 3
2ca0: aa 0c add r10, r10
2ca2: bb 1c adc r11, r11
2ca4: cc 1c adc r12, r12
2ca6: dd 1c adc r13, r13
2ca8: aa 95 dec r26
2caa: d1 f7 brne .-12 ; 0x2ca0 <Mittelwert+0x1a0>
2cac: ae 18 sub r10, r14
2cae: bf 08 sbc r11, r15
2cb0: c0 0a sbc r12, r16
2cb2: d1 0a sbc r13, r17
2cb4: 88 27 eor r24, r24
2cb6: 77 fd sbrc r23, 7
2cb8: 80 95 com r24
2cba: 98 2f mov r25, r24
2cbc: 33 27 eor r19, r19
2cbe: 44 27 eor r20, r20
2cc0: 55 27 eor r21, r21
2cc2: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
2cc6: a2 0e add r10, r18
2cc8: b3 1e adc r11, r19
2cca: c4 1e adc r12, r20
2ccc: d5 1e adc r13, r21
2cce: c6 01 movw r24, r12
2cd0: b5 01 movw r22, r10
2cd2: 28 e0 ldi r18, 0x08 ; 8
2cd4: 30 e0 ldi r19, 0x00 ; 0
2cd6: 40 e0 ldi r20, 0x00 ; 0
2cd8: 50 e0 ldi r21, 0x00 ; 0
2cda: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
2cde: 30 93 ad 05 sts 0x05AD, r19
2ce2: 20 93 ac 05 sts 0x05AC, r18
2ce6: 10 92 b3 01 sts 0x01B3, r1
2cea: 10 92 b2 01 sts 0x01B2, r1
2cee: 10 92 be 01 sts 0x01BE, r1
2cf2: 10 92 b5 01 sts 0x01B5, r1
2cf6: 10 92 b4 01 sts 0x01B4, r1
2cfa: 10 92 bf 01 sts 0x01BF, r1
2cfe: 10 92 b7 01 sts 0x01B7, r1
2d02: 10 92 b6 01 sts 0x01B6, r1
2d06: 10 92 c0 01 sts 0x01C0, r1
2d0a: 10 92 b9 01 sts 0x01B9, r1
2d0e: 10 92 b8 01 sts 0x01B8, r1
2d12: 10 92 c2 01 sts 0x01C2, r1
2d16: 10 92 bb 01 sts 0x01BB, r1
2d1a: 10 92 ba 01 sts 0x01BA, r1
2d1e: 10 92 c1 01 sts 0x01C1, r1
2d22: 10 92 bd 01 sts 0x01BD, r1
2d26: 10 92 bc 01 sts 0x01BC, r1
2d2a: 10 92 c3 01 sts 0x01C3, r1
2d2e: 80 91 0b 02 lds r24, 0x020B
2d32: 90 91 0c 02 lds r25, 0x020C
2d36: a0 91 0d 02 lds r26, 0x020D
2d3a: b0 91 0e 02 lds r27, 0x020E
2d3e: 80 93 f7 01 sts 0x01F7, r24
2d42: 90 93 f8 01 sts 0x01F8, r25
2d46: a0 93 f9 01 sts 0x01F9, r26
2d4a: b0 93 fa 01 sts 0x01FA, r27
2d4e: 80 91 fb 01 lds r24, 0x01FB
2d52: 90 91 fc 01 lds r25, 0x01FC
2d56: a0 91 fd 01 lds r26, 0x01FD
2d5a: b0 91 fe 01 lds r27, 0x01FE
2d5e: 80 93 e7 01 sts 0x01E7, r24
2d62: 90 93 e8 01 sts 0x01E8, r25
2d66: a0 93 e9 01 sts 0x01E9, r26
2d6a: b0 93 ea 01 sts 0x01EA, r27
2d6e: 80 91 03 02 lds r24, 0x0203
2d72: 90 91 04 02 lds r25, 0x0204
2d76: a0 91 05 02 lds r26, 0x0205
2d7a: b0 91 06 02 lds r27, 0x0206
2d7e: 80 93 ef 01 sts 0x01EF, r24
2d82: 90 93 f0 01 sts 0x01F0, r25
2d86: a0 93 f1 01 sts 0x01F1, r26
2d8a: b0 93 f2 01 sts 0x01F2, r27
2d8e: 80 91 ff 01 lds r24, 0x01FF
2d92: 90 91 00 02 lds r25, 0x0200
2d96: a0 91 01 02 lds r26, 0x0201
2d9a: b0 91 02 02 lds r27, 0x0202
2d9e: 80 93 eb 01 sts 0x01EB, r24
2da2: 90 93 ec 01 sts 0x01EC, r25
2da6: a0 93 ed 01 sts 0x01ED, r26
2daa: b0 93 ee 01 sts 0x01EE, r27
2dae: 80 91 07 02 lds r24, 0x0207
2db2: 90 91 08 02 lds r25, 0x0208
2db6: a0 91 09 02 lds r26, 0x0209
2dba: b0 91 0a 02 lds r27, 0x020A
2dbe: 80 93 f3 01 sts 0x01F3, r24
2dc2: 90 93 f4 01 sts 0x01F4, r25
2dc6: a0 93 f5 01 sts 0x01F5, r26
2dca: b0 93 f6 01 sts 0x01F6, r27
2dce: 8f ee ldi r24, 0xEF ; 239
2dd0: 80 93 7a 00 sts 0x007A, r24
2dd4: 80 91 a9 05 lds r24, 0x05A9
2dd8: 90 91 aa 05 lds r25, 0x05AA
2ddc: 89 3c cpi r24, 0xC9 ; 201
2dde: 91 05 cpc r25, r1
2de0: 7c f0 brlt .+30 ; 0x2e00 <Mittelwert+0x300>
2de2: 20 91 a9 05 lds r18, 0x05A9
2de6: 30 91 aa 05 lds r19, 0x05AA
2dea: 80 91 a9 05 lds r24, 0x05A9
2dee: 90 91 aa 05 lds r25, 0x05AA
2df2: 88 0f add r24, r24
2df4: 99 1f adc r25, r25
2df6: 88 0f add r24, r24
2df8: 99 1f adc r25, r25
2dfa: 20 52 subi r18, 0x20 ; 32
2dfc: 33 40 sbci r19, 0x03 ; 3
2dfe: 15 c0 rjmp .+42 ; 0x2e2a <Mittelwert+0x32a>
2e00: 80 91 a9 05 lds r24, 0x05A9
2e04: 90 91 aa 05 lds r25, 0x05AA
2e08: 88 53 subi r24, 0x38 ; 56
2e0a: 9f 4f sbci r25, 0xFF ; 255
2e0c: a4 f4 brge .+40 ; 0x2e36 <Mittelwert+0x336>
2e0e: 20 91 a9 05 lds r18, 0x05A9
2e12: 30 91 aa 05 lds r19, 0x05AA
2e16: 80 91 a9 05 lds r24, 0x05A9
2e1a: 90 91 aa 05 lds r25, 0x05AA
2e1e: 88 0f add r24, r24
2e20: 99 1f adc r25, r25
2e22: 88 0f add r24, r24
2e24: 99 1f adc r25, r25
2e26: 20 5e subi r18, 0xE0 ; 224
2e28: 3c 4f sbci r19, 0xFC ; 252
2e2a: 82 0f add r24, r18
2e2c: 93 1f adc r25, r19
2e2e: 90 93 aa 05 sts 0x05AA, r25
2e32: 80 93 a9 05 sts 0x05A9, r24
2e36: 80 91 a7 05 lds r24, 0x05A7
2e3a: 90 91 a8 05 lds r25, 0x05A8
2e3e: 89 3c cpi r24, 0xC9 ; 201
2e40: 91 05 cpc r25, r1
2e42: 7c f0 brlt .+30 ; 0x2e62 <Mittelwert+0x362>
2e44: 20 91 a7 05 lds r18, 0x05A7
2e48: 30 91 a8 05 lds r19, 0x05A8
2e4c: 80 91 a7 05 lds r24, 0x05A7
2e50: 90 91 a8 05 lds r25, 0x05A8
2e54: 88 0f add r24, r24
2e56: 99 1f adc r25, r25
2e58: 88 0f add r24, r24
2e5a: 99 1f adc r25, r25
2e5c: 20 52 subi r18, 0x20 ; 32
2e5e: 33 40 sbci r19, 0x03 ; 3
2e60: 15 c0 rjmp .+42 ; 0x2e8c <Mittelwert+0x38c>
2e62: 80 91 a7 05 lds r24, 0x05A7
2e66: 90 91 a8 05 lds r25, 0x05A8
2e6a: 88 53 subi r24, 0x38 ; 56
2e6c: 9f 4f sbci r25, 0xFF ; 255
2e6e: a4 f4 brge .+40 ; 0x2e98 <Mittelwert+0x398>
2e70: 20 91 a7 05 lds r18, 0x05A7
2e74: 30 91 a8 05 lds r19, 0x05A8
2e78: 80 91 a7 05 lds r24, 0x05A7
2e7c: 90 91 a8 05 lds r25, 0x05A8
2e80: 88 0f add r24, r24
2e82: 99 1f adc r25, r25
2e84: 88 0f add r24, r24
2e86: 99 1f adc r25, r25
2e88: 20 5e subi r18, 0xE0 ; 224
2e8a: 3c 4f sbci r19, 0xFC ; 252
2e8c: 82 0f add r24, r18
2e8e: 93 1f adc r25, r19
2e90: 90 93 a8 05 sts 0x05A8, r25
2e94: 80 93 a7 05 sts 0x05A7, r24
2e98: 20 91 1f 02 lds r18, 0x021F
2e9c: 30 91 20 02 lds r19, 0x0220
2ea0: 80 91 71 05 lds r24, 0x0571
2ea4: e8 2f mov r30, r24
2ea6: ff 27 eor r31, r31
2ea8: ee 0f add r30, r30
2eaa: ff 1f adc r31, r31
2eac: ef 5b subi r30, 0xBF ; 191
2eae: fa 4f sbci r31, 0xFA ; 250
2eb0: 80 81 ld r24, Z
2eb2: 91 81 ldd r25, Z+1 ; 0x01
2eb4: 82 59 subi r24, 0x92 ; 146
2eb6: 9f 4f sbci r25, 0xFF ; 255
2eb8: 28 17 cp r18, r24
2eba: 39 07 cpc r19, r25
2ebc: 1c f4 brge .+6 ; 0x2ec4 <Mittelwert+0x3c4>
2ebe: 2f 5f subi r18, 0xFF ; 255
2ec0: 3f 4f sbci r19, 0xFF ; 255
2ec2: 0c c0 rjmp .+24 ; 0x2edc <Mittelwert+0x3dc>
2ec4: 80 81 ld r24, Z
2ec6: 91 81 ldd r25, Z+1 ; 0x01
2ec8: 82 59 subi r24, 0x92 ; 146
2eca: 9f 4f sbci r25, 0xFF ; 255
2ecc: 82 17 cp r24, r18
2ece: 93 07 cpc r25, r19
2ed0: 4c f4 brge .+18 ; 0x2ee4 <Mittelwert+0x3e4>
2ed2: 21 15 cp r18, r1
2ed4: 31 05 cpc r19, r1
2ed6: 31 f0 breq .+12 ; 0x2ee4 <Mittelwert+0x3e4>
2ed8: 21 50 subi r18, 0x01 ; 1
2eda: 30 40 sbci r19, 0x00 ; 0
2edc: 30 93 20 02 sts 0x0220, r19
2ee0: 20 93 1f 02 sts 0x021F, r18
2ee4: 20 91 21 02 lds r18, 0x0221
2ee8: 30 91 22 02 lds r19, 0x0222
2eec: 80 91 72 05 lds r24, 0x0572
2ef0: e8 2f mov r30, r24
2ef2: ff 27 eor r31, r31
2ef4: ee 0f add r30, r30
2ef6: ff 1f adc r31, r31
2ef8: ef 5b subi r30, 0xBF ; 191
2efa: fa 4f sbci r31, 0xFA ; 250
2efc: 80 81 ld r24, Z
2efe: 91 81 ldd r25, Z+1 ; 0x01
2f00: 82 59 subi r24, 0x92 ; 146
2f02: 9f 4f sbci r25, 0xFF ; 255
2f04: 28 17 cp r18, r24
2f06: 39 07 cpc r19, r25
2f08: 1c f4 brge .+6 ; 0x2f10 <Mittelwert+0x410>
2f0a: 2f 5f subi r18, 0xFF ; 255
2f0c: 3f 4f sbci r19, 0xFF ; 255
2f0e: 0c c0 rjmp .+24 ; 0x2f28 <Mittelwert+0x428>
2f10: 80 81 ld r24, Z
2f12: 91 81 ldd r25, Z+1 ; 0x01
2f14: 82 59 subi r24, 0x92 ; 146
2f16: 9f 4f sbci r25, 0xFF ; 255
2f18: 82 17 cp r24, r18
2f1a: 93 07 cpc r25, r19
2f1c: 4c f4 brge .+18 ; 0x2f30 <Mittelwert+0x430>
2f1e: 21 15 cp r18, r1
2f20: 31 05 cpc r19, r1
2f22: 31 f0 breq .+12 ; 0x2f30 <Mittelwert+0x430>
2f24: 21 50 subi r18, 0x01 ; 1
2f26: 30 40 sbci r19, 0x00 ; 0
2f28: 30 93 22 02 sts 0x0222, r19
2f2c: 20 93 21 02 sts 0x0221, r18
2f30: 20 91 23 02 lds r18, 0x0223
2f34: 30 91 24 02 lds r19, 0x0224
2f38: 80 91 73 05 lds r24, 0x0573
2f3c: e8 2f mov r30, r24
2f3e: ff 27 eor r31, r31
2f40: ee 0f add r30, r30
2f42: ff 1f adc r31, r31
2f44: ef 5b subi r30, 0xBF ; 191
2f46: fa 4f sbci r31, 0xFA ; 250
2f48: 80 81 ld r24, Z
2f4a: 91 81 ldd r25, Z+1 ; 0x01
2f4c: 82 59 subi r24, 0x92 ; 146
2f4e: 9f 4f sbci r25, 0xFF ; 255
2f50: 28 17 cp r18, r24
2f52: 39 07 cpc r19, r25
2f54: 1c f4 brge .+6 ; 0x2f5c <Mittelwert+0x45c>
2f56: 2f 5f subi r18, 0xFF ; 255
2f58: 3f 4f sbci r19, 0xFF ; 255
2f5a: 0c c0 rjmp .+24 ; 0x2f74 <Mittelwert+0x474>
2f5c: 80 81 ld r24, Z
2f5e: 91 81 ldd r25, Z+1 ; 0x01
2f60: 82 59 subi r24, 0x92 ; 146
2f62: 9f 4f sbci r25, 0xFF ; 255
2f64: 82 17 cp r24, r18
2f66: 93 07 cpc r25, r19
2f68: 4c f4 brge .+18 ; 0x2f7c <Mittelwert+0x47c>
2f6a: 21 15 cp r18, r1
2f6c: 31 05 cpc r19, r1
2f6e: 31 f0 breq .+12 ; 0x2f7c <Mittelwert+0x47c>
2f70: 21 50 subi r18, 0x01 ; 1
2f72: 30 40 sbci r19, 0x00 ; 0
2f74: 30 93 24 02 sts 0x0224, r19
2f78: 20 93 23 02 sts 0x0223, r18
2f7c: 20 91 25 02 lds r18, 0x0225
2f80: 30 91 26 02 lds r19, 0x0226
2f84: 80 91 74 05 lds r24, 0x0574
2f88: e8 2f mov r30, r24
2f8a: ff 27 eor r31, r31
2f8c: ee 0f add r30, r30
2f8e: ff 1f adc r31, r31
2f90: ef 5b subi r30, 0xBF ; 191
2f92: fa 4f sbci r31, 0xFA ; 250
2f94: 80 81 ld r24, Z
2f96: 91 81 ldd r25, Z+1 ; 0x01
2f98: 82 59 subi r24, 0x92 ; 146
2f9a: 9f 4f sbci r25, 0xFF ; 255
2f9c: 28 17 cp r18, r24
2f9e: 39 07 cpc r19, r25
2fa0: 1c f4 brge .+6 ; 0x2fa8 <Mittelwert+0x4a8>
2fa2: 2f 5f subi r18, 0xFF ; 255
2fa4: 3f 4f sbci r19, 0xFF ; 255
2fa6: 0c c0 rjmp .+24 ; 0x2fc0 <Mittelwert+0x4c0>
2fa8: 80 81 ld r24, Z
2faa: 91 81 ldd r25, Z+1 ; 0x01
2fac: 82 59 subi r24, 0x92 ; 146
2fae: 9f 4f sbci r25, 0xFF ; 255
2fb0: 82 17 cp r24, r18
2fb2: 93 07 cpc r25, r19
2fb4: 4c f4 brge .+18 ; 0x2fc8 <Mittelwert+0x4c8>
2fb6: 21 15 cp r18, r1
2fb8: 31 05 cpc r19, r1
2fba: 31 f0 breq .+12 ; 0x2fc8 <Mittelwert+0x4c8>
2fbc: 21 50 subi r18, 0x01 ; 1
2fbe: 30 40 sbci r19, 0x00 ; 0
2fc0: 30 93 26 02 sts 0x0226, r19
2fc4: 20 93 25 02 sts 0x0225, r18
2fc8: 80 91 1f 02 lds r24, 0x021F
2fcc: 90 91 20 02 lds r25, 0x0220
2fd0: 97 ff sbrs r25, 7
2fd2: 05 c0 rjmp .+10 ; 0x2fde <Mittelwert+0x4de>
2fd4: 10 92 20 02 sts 0x0220, r1
2fd8: 10 92 1f 02 sts 0x021F, r1
2fdc: 0a c0 rjmp .+20 ; 0x2ff2 <Mittelwert+0x4f2>
2fde: 8f 3f cpi r24, 0xFF ; 255
2fe0: 91 05 cpc r25, r1
2fe2: 39 f0 breq .+14 ; 0x2ff2 <Mittelwert+0x4f2>
2fe4: 34 f0 brlt .+12 ; 0x2ff2 <Mittelwert+0x4f2>
2fe6: 8f ef ldi r24, 0xFF ; 255
2fe8: 90 e0 ldi r25, 0x00 ; 0
2fea: 90 93 20 02 sts 0x0220, r25
2fee: 80 93 1f 02 sts 0x021F, r24
2ff2: 80 91 21 02 lds r24, 0x0221
2ff6: 90 91 22 02 lds r25, 0x0222
2ffa: 97 ff sbrs r25, 7
2ffc: 05 c0 rjmp .+10 ; 0x3008 <Mittelwert+0x508>
2ffe: 10 92 22 02 sts 0x0222, r1
3002: 10 92 21 02 sts 0x0221, r1
3006: 0a c0 rjmp .+20 ; 0x301c <Mittelwert+0x51c>
3008: 8f 3f cpi r24, 0xFF ; 255
300a: 91 05 cpc r25, r1
300c: 39 f0 breq .+14 ; 0x301c <Mittelwert+0x51c>
300e: 34 f0 brlt .+12 ; 0x301c <Mittelwert+0x51c>
3010: 8f ef ldi r24, 0xFF ; 255
3012: 90 e0 ldi r25, 0x00 ; 0
3014: 90 93 22 02 sts 0x0222, r25
3018: 80 93 21 02 sts 0x0221, r24
301c: 80 91 23 02 lds r24, 0x0223
3020: 90 91 24 02 lds r25, 0x0224
3024: 97 ff sbrs r25, 7
3026: 05 c0 rjmp .+10 ; 0x3032 <Mittelwert+0x532>
3028: 10 92 24 02 sts 0x0224, r1
302c: 10 92 23 02 sts 0x0223, r1
3030: 0a c0 rjmp .+20 ; 0x3046 <Mittelwert+0x546>
3032: 8f 3f cpi r24, 0xFF ; 255
3034: 91 05 cpc r25, r1
3036: 39 f0 breq .+14 ; 0x3046 <Mittelwert+0x546>
3038: 34 f0 brlt .+12 ; 0x3046 <Mittelwert+0x546>
303a: 8f ef ldi r24, 0xFF ; 255
303c: 90 e0 ldi r25, 0x00 ; 0
303e: 90 93 24 02 sts 0x0224, r25
3042: 80 93 23 02 sts 0x0223, r24
3046: 80 91 25 02 lds r24, 0x0225
304a: 90 91 26 02 lds r25, 0x0226
304e: 97 ff sbrs r25, 7
3050: 05 c0 rjmp .+10 ; 0x305c <Mittelwert+0x55c>
3052: 10 92 26 02 sts 0x0226, r1
3056: 10 92 25 02 sts 0x0225, r1
305a: 0a c0 rjmp .+20 ; 0x3070 <Mittelwert+0x570>
305c: 8f 3f cpi r24, 0xFF ; 255
305e: 91 05 cpc r25, r1
3060: 39 f0 breq .+14 ; 0x3070 <Mittelwert+0x570>
3062: 34 f0 brlt .+12 ; 0x3070 <Mittelwert+0x570>
3064: 8f ef ldi r24, 0xFF ; 255
3066: 90 e0 ldi r25, 0x00 ; 0
3068: 90 93 26 02 sts 0x0226, r25
306c: 80 93 25 02 sts 0x0225, r24
3070: 1f 91 pop r17
3072: 0f 91 pop r16
3074: ff 90 pop r15
3076: ef 90 pop r14
3078: df 90 pop r13
307a: cf 90 pop r12
307c: bf 90 pop r11
307e: af 90 pop r10
3080: 08 95 ret
 
00003082 <CalibrierMittelwert>:
3082: 10 92 7a 00 sts 0x007A, r1
3086: 80 91 be 01 lds r24, 0x01BE
308a: 88 23 and r24, r24
308c: 69 f0 breq .+26 ; 0x30a8 <CalibrierMittelwert+0x26>
308e: 80 91 b2 01 lds r24, 0x01B2
3092: 90 91 b3 01 lds r25, 0x01B3
3096: 60 91 be 01 lds r22, 0x01BE
309a: 77 27 eor r23, r23
309c: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
30a0: 70 93 aa 05 sts 0x05AA, r23
30a4: 60 93 a9 05 sts 0x05A9, r22
30a8: 80 91 bf 01 lds r24, 0x01BF
30ac: 88 23 and r24, r24
30ae: 69 f0 breq .+26 ; 0x30ca <CalibrierMittelwert+0x48>
30b0: 80 91 b4 01 lds r24, 0x01B4
30b4: 90 91 b5 01 lds r25, 0x01B5
30b8: 60 91 bf 01 lds r22, 0x01BF
30bc: 77 27 eor r23, r23
30be: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
30c2: 70 93 a8 05 sts 0x05A8, r23
30c6: 60 93 a7 05 sts 0x05A7, r22
30ca: 80 91 c0 01 lds r24, 0x01C0
30ce: 88 23 and r24, r24
30d0: 69 f0 breq .+26 ; 0x30ec <CalibrierMittelwert+0x6a>
30d2: 80 91 b6 01 lds r24, 0x01B6
30d6: 90 91 b7 01 lds r25, 0x01B7
30da: 60 91 c0 01 lds r22, 0x01C0
30de: 77 27 eor r23, r23
30e0: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
30e4: 70 93 b6 05 sts 0x05B6, r23
30e8: 60 93 b5 05 sts 0x05B5, r22
30ec: 80 91 c1 01 lds r24, 0x01C1
30f0: 88 23 and r24, r24
30f2: d1 f0 breq .+52 ; 0x3128 <CalibrierMittelwert+0xa6>
30f4: 60 91 ba 01 lds r22, 0x01BA
30f8: 70 91 bb 01 lds r23, 0x01BB
30fc: 20 91 c1 01 lds r18, 0x01C1
3100: 88 27 eor r24, r24
3102: 77 fd sbrc r23, 7
3104: 80 95 com r24
3106: 98 2f mov r25, r24
3108: 34 e0 ldi r19, 0x04 ; 4
310a: 66 0f add r22, r22
310c: 77 1f adc r23, r23
310e: 88 1f adc r24, r24
3110: 99 1f adc r25, r25
3112: 3a 95 dec r19
3114: d1 f7 brne .-12 ; 0x310a <CalibrierMittelwert+0x88>
3116: 33 27 eor r19, r19
3118: 44 27 eor r20, r20
311a: 55 27 eor r21, r21
311c: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
3120: 30 93 b3 05 sts 0x05B3, r19
3124: 20 93 b2 05 sts 0x05B2, r18
3128: 80 91 c2 01 lds r24, 0x01C2
312c: 88 23 and r24, r24
312e: d1 f0 breq .+52 ; 0x3164 <CalibrierMittelwert+0xe2>
3130: 60 91 b8 01 lds r22, 0x01B8
3134: 70 91 b9 01 lds r23, 0x01B9
3138: 20 91 c2 01 lds r18, 0x01C2
313c: 88 27 eor r24, r24
313e: 77 fd sbrc r23, 7
3140: 80 95 com r24
3142: 98 2f mov r25, r24
3144: b4 e0 ldi r27, 0x04 ; 4
3146: 66 0f add r22, r22
3148: 77 1f adc r23, r23
314a: 88 1f adc r24, r24
314c: 99 1f adc r25, r25
314e: ba 95 dec r27
3150: d1 f7 brne .-12 ; 0x3146 <CalibrierMittelwert+0xc4>
3152: 33 27 eor r19, r19
3154: 44 27 eor r20, r20
3156: 55 27 eor r21, r21
3158: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
315c: 30 93 bc 05 sts 0x05BC, r19
3160: 20 93 bb 05 sts 0x05BB, r18
3164: 80 91 c3 01 lds r24, 0x01C3
3168: 88 23 and r24, r24
316a: 99 f0 breq .+38 ; 0x3192 <CalibrierMittelwert+0x110>
316c: 60 91 bc 01 lds r22, 0x01BC
3170: 70 91 bd 01 lds r23, 0x01BD
3174: 20 91 c3 01 lds r18, 0x01C3
3178: 88 27 eor r24, r24
317a: 77 fd sbrc r23, 7
317c: 80 95 com r24
317e: 98 2f mov r25, r24
3180: 33 27 eor r19, r19
3182: 44 27 eor r20, r20
3184: 55 27 eor r21, r21
3186: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
318a: 30 93 ad 05 sts 0x05AD, r19
318e: 20 93 ac 05 sts 0x05AC, r18
3192: 10 92 b3 01 sts 0x01B3, r1
3196: 10 92 b2 01 sts 0x01B2, r1
319a: 10 92 be 01 sts 0x01BE, r1
319e: 10 92 b5 01 sts 0x01B5, r1
31a2: 10 92 b4 01 sts 0x01B4, r1
31a6: 10 92 bf 01 sts 0x01BF, r1
31aa: 10 92 b7 01 sts 0x01B7, r1
31ae: 10 92 b6 01 sts 0x01B6, r1
31b2: 10 92 c0 01 sts 0x01C0, r1
31b6: 10 92 b9 01 sts 0x01B9, r1
31ba: 10 92 b8 01 sts 0x01B8, r1
31be: 10 92 c2 01 sts 0x01C2, r1
31c2: 10 92 bb 01 sts 0x01BB, r1
31c6: 10 92 ba 01 sts 0x01BA, r1
31ca: 10 92 c1 01 sts 0x01C1, r1
31ce: 10 92 bd 01 sts 0x01BD, r1
31d2: 10 92 bc 01 sts 0x01BC, r1
31d6: 10 92 c3 01 sts 0x01C3, r1
31da: 8f ee ldi r24, 0xEF ; 239
31dc: 80 93 7a 00 sts 0x007A, r24
31e0: 20 91 1f 02 lds r18, 0x021F
31e4: 30 91 20 02 lds r19, 0x0220
31e8: 80 91 71 05 lds r24, 0x0571
31ec: e8 2f mov r30, r24
31ee: ff 27 eor r31, r31
31f0: ee 0f add r30, r30
31f2: ff 1f adc r31, r31
31f4: ef 5b subi r30, 0xBF ; 191
31f6: fa 4f sbci r31, 0xFA ; 250
31f8: 80 81 ld r24, Z
31fa: 91 81 ldd r25, Z+1 ; 0x01
31fc: 82 59 subi r24, 0x92 ; 146
31fe: 9f 4f sbci r25, 0xFF ; 255
3200: 28 17 cp r18, r24
3202: 39 07 cpc r19, r25
3204: 1c f4 brge .+6 ; 0x320c <CalibrierMittelwert+0x18a>
3206: 2f 5f subi r18, 0xFF ; 255
3208: 3f 4f sbci r19, 0xFF ; 255
320a: 0c c0 rjmp .+24 ; 0x3224 <CalibrierMittelwert+0x1a2>
320c: 80 81 ld r24, Z
320e: 91 81 ldd r25, Z+1 ; 0x01
3210: 82 59 subi r24, 0x92 ; 146
3212: 9f 4f sbci r25, 0xFF ; 255
3214: 82 17 cp r24, r18
3216: 93 07 cpc r25, r19
3218: 4c f4 brge .+18 ; 0x322c <CalibrierMittelwert+0x1aa>
321a: 21 15 cp r18, r1
321c: 31 05 cpc r19, r1
321e: 31 f0 breq .+12 ; 0x322c <CalibrierMittelwert+0x1aa>
3220: 21 50 subi r18, 0x01 ; 1
3222: 30 40 sbci r19, 0x00 ; 0
3224: 30 93 20 02 sts 0x0220, r19
3228: 20 93 1f 02 sts 0x021F, r18
322c: 20 91 21 02 lds r18, 0x0221
3230: 30 91 22 02 lds r19, 0x0222
3234: 80 91 72 05 lds r24, 0x0572
3238: e8 2f mov r30, r24
323a: ff 27 eor r31, r31
323c: ee 0f add r30, r30
323e: ff 1f adc r31, r31
3240: ef 5b subi r30, 0xBF ; 191
3242: fa 4f sbci r31, 0xFA ; 250
3244: 80 81 ld r24, Z
3246: 91 81 ldd r25, Z+1 ; 0x01
3248: 82 59 subi r24, 0x92 ; 146
324a: 9f 4f sbci r25, 0xFF ; 255
324c: 28 17 cp r18, r24
324e: 39 07 cpc r19, r25
3250: 1c f4 brge .+6 ; 0x3258 <CalibrierMittelwert+0x1d6>
3252: 2f 5f subi r18, 0xFF ; 255
3254: 3f 4f sbci r19, 0xFF ; 255
3256: 0c c0 rjmp .+24 ; 0x3270 <CalibrierMittelwert+0x1ee>
3258: 80 81 ld r24, Z
325a: 91 81 ldd r25, Z+1 ; 0x01
325c: 82 59 subi r24, 0x92 ; 146
325e: 9f 4f sbci r25, 0xFF ; 255
3260: 82 17 cp r24, r18
3262: 93 07 cpc r25, r19
3264: 4c f4 brge .+18 ; 0x3278 <CalibrierMittelwert+0x1f6>
3266: 21 15 cp r18, r1
3268: 31 05 cpc r19, r1
326a: 31 f0 breq .+12 ; 0x3278 <CalibrierMittelwert+0x1f6>
326c: 21 50 subi r18, 0x01 ; 1
326e: 30 40 sbci r19, 0x00 ; 0
3270: 30 93 22 02 sts 0x0222, r19
3274: 20 93 21 02 sts 0x0221, r18
3278: 20 91 23 02 lds r18, 0x0223
327c: 30 91 24 02 lds r19, 0x0224
3280: 80 91 73 05 lds r24, 0x0573
3284: e8 2f mov r30, r24
3286: ff 27 eor r31, r31
3288: ee 0f add r30, r30
328a: ff 1f adc r31, r31
328c: ef 5b subi r30, 0xBF ; 191
328e: fa 4f sbci r31, 0xFA ; 250
3290: 80 81 ld r24, Z
3292: 91 81 ldd r25, Z+1 ; 0x01
3294: 82 59 subi r24, 0x92 ; 146
3296: 9f 4f sbci r25, 0xFF ; 255
3298: 28 17 cp r18, r24
329a: 39 07 cpc r19, r25
329c: 1c f4 brge .+6 ; 0x32a4 <CalibrierMittelwert+0x222>
329e: 2f 5f subi r18, 0xFF ; 255
32a0: 3f 4f sbci r19, 0xFF ; 255
32a2: 0c c0 rjmp .+24 ; 0x32bc <CalibrierMittelwert+0x23a>
32a4: 80 81 ld r24, Z
32a6: 91 81 ldd r25, Z+1 ; 0x01
32a8: 82 59 subi r24, 0x92 ; 146
32aa: 9f 4f sbci r25, 0xFF ; 255
32ac: 82 17 cp r24, r18
32ae: 93 07 cpc r25, r19
32b0: 4c f4 brge .+18 ; 0x32c4 <CalibrierMittelwert+0x242>
32b2: 21 15 cp r18, r1
32b4: 31 05 cpc r19, r1
32b6: 31 f0 breq .+12 ; 0x32c4 <CalibrierMittelwert+0x242>
32b8: 21 50 subi r18, 0x01 ; 1
32ba: 30 40 sbci r19, 0x00 ; 0
32bc: 30 93 24 02 sts 0x0224, r19
32c0: 20 93 23 02 sts 0x0223, r18
32c4: 20 91 25 02 lds r18, 0x0225
32c8: 30 91 26 02 lds r19, 0x0226
32cc: 80 91 74 05 lds r24, 0x0574
32d0: e8 2f mov r30, r24
32d2: ff 27 eor r31, r31
32d4: ee 0f add r30, r30
32d6: ff 1f adc r31, r31
32d8: ef 5b subi r30, 0xBF ; 191
32da: fa 4f sbci r31, 0xFA ; 250
32dc: 80 81 ld r24, Z
32de: 91 81 ldd r25, Z+1 ; 0x01
32e0: 82 59 subi r24, 0x92 ; 146
32e2: 9f 4f sbci r25, 0xFF ; 255
32e4: 28 17 cp r18, r24
32e6: 39 07 cpc r19, r25
32e8: 1c f4 brge .+6 ; 0x32f0 <CalibrierMittelwert+0x26e>
32ea: 2f 5f subi r18, 0xFF ; 255
32ec: 3f 4f sbci r19, 0xFF ; 255
32ee: 0c c0 rjmp .+24 ; 0x3308 <CalibrierMittelwert+0x286>
32f0: 80 81 ld r24, Z
32f2: 91 81 ldd r25, Z+1 ; 0x01
32f4: 82 59 subi r24, 0x92 ; 146
32f6: 9f 4f sbci r25, 0xFF ; 255
32f8: 82 17 cp r24, r18
32fa: 93 07 cpc r25, r19
32fc: 4c f4 brge .+18 ; 0x3310 <CalibrierMittelwert+0x28e>
32fe: 21 15 cp r18, r1
3300: 31 05 cpc r19, r1
3302: 31 f0 breq .+12 ; 0x3310 <CalibrierMittelwert+0x28e>
3304: 21 50 subi r18, 0x01 ; 1
3306: 30 40 sbci r19, 0x00 ; 0
3308: 30 93 26 02 sts 0x0226, r19
330c: 20 93 25 02 sts 0x0225, r18
3310: 80 91 1f 02 lds r24, 0x021F
3314: 90 91 20 02 lds r25, 0x0220
3318: 97 ff sbrs r25, 7
331a: 05 c0 rjmp .+10 ; 0x3326 <CalibrierMittelwert+0x2a4>
331c: 10 92 20 02 sts 0x0220, r1
3320: 10 92 1f 02 sts 0x021F, r1
3324: 0a c0 rjmp .+20 ; 0x333a <CalibrierMittelwert+0x2b8>
3326: 8f 3f cpi r24, 0xFF ; 255
3328: 91 05 cpc r25, r1
332a: 39 f0 breq .+14 ; 0x333a <CalibrierMittelwert+0x2b8>
332c: 34 f0 brlt .+12 ; 0x333a <CalibrierMittelwert+0x2b8>
332e: 8f ef ldi r24, 0xFF ; 255
3330: 90 e0 ldi r25, 0x00 ; 0
3332: 90 93 20 02 sts 0x0220, r25
3336: 80 93 1f 02 sts 0x021F, r24
333a: 80 91 21 02 lds r24, 0x0221
333e: 90 91 22 02 lds r25, 0x0222
3342: 97 ff sbrs r25, 7
3344: 05 c0 rjmp .+10 ; 0x3350 <CalibrierMittelwert+0x2ce>
3346: 10 92 22 02 sts 0x0222, r1
334a: 10 92 21 02 sts 0x0221, r1
334e: 0a c0 rjmp .+20 ; 0x3364 <CalibrierMittelwert+0x2e2>
3350: 8f 3f cpi r24, 0xFF ; 255
3352: 91 05 cpc r25, r1
3354: 39 f0 breq .+14 ; 0x3364 <CalibrierMittelwert+0x2e2>
3356: 34 f0 brlt .+12 ; 0x3364 <CalibrierMittelwert+0x2e2>
3358: 8f ef ldi r24, 0xFF ; 255
335a: 90 e0 ldi r25, 0x00 ; 0
335c: 90 93 22 02 sts 0x0222, r25
3360: 80 93 21 02 sts 0x0221, r24
3364: 80 91 23 02 lds r24, 0x0223
3368: 90 91 24 02 lds r25, 0x0224
336c: 97 ff sbrs r25, 7
336e: 05 c0 rjmp .+10 ; 0x337a <CalibrierMittelwert+0x2f8>
3370: 10 92 24 02 sts 0x0224, r1
3374: 10 92 23 02 sts 0x0223, r1
3378: 0a c0 rjmp .+20 ; 0x338e <CalibrierMittelwert+0x30c>
337a: 8f 3f cpi r24, 0xFF ; 255
337c: 91 05 cpc r25, r1
337e: 39 f0 breq .+14 ; 0x338e <CalibrierMittelwert+0x30c>
3380: 34 f0 brlt .+12 ; 0x338e <CalibrierMittelwert+0x30c>
3382: 8f ef ldi r24, 0xFF ; 255
3384: 90 e0 ldi r25, 0x00 ; 0
3386: 90 93 24 02 sts 0x0224, r25
338a: 80 93 23 02 sts 0x0223, r24
338e: 80 91 25 02 lds r24, 0x0225
3392: 90 91 26 02 lds r25, 0x0226
3396: 97 ff sbrs r25, 7
3398: 05 c0 rjmp .+10 ; 0x33a4 <CalibrierMittelwert+0x322>
339a: 10 92 26 02 sts 0x0226, r1
339e: 10 92 25 02 sts 0x0225, r1
33a2: 08 95 ret
33a4: 8f 3f cpi r24, 0xFF ; 255
33a6: 91 05 cpc r25, r1
33a8: 39 f0 breq .+14 ; 0x33b8 <CalibrierMittelwert+0x336>
33aa: 34 f0 brlt .+12 ; 0x33b8 <CalibrierMittelwert+0x336>
33ac: 8f ef ldi r24, 0xFF ; 255
33ae: 90 e0 ldi r25, 0x00 ; 0
33b0: 90 93 26 02 sts 0x0226, r25
33b4: 80 93 25 02 sts 0x0225, r24
33b8: 08 95 ret
 
000033ba <ParameterZuordnung>:
33ba: 1f 93 push r17
33bc: 80 91 78 05 lds r24, 0x0578
33c0: 8b 3f cpi r24, 0xFB ; 251
33c2: 98 f0 brcs .+38 ; 0x33ea <ParameterZuordnung+0x30>
33c4: 8b 3f cpi r24, 0xFB ; 251
33c6: 19 f4 brne .+6 ; 0x33ce <ParameterZuordnung+0x14>
33c8: 80 91 1f 02 lds r24, 0x021F
33cc: 0e c0 rjmp .+28 ; 0x33ea <ParameterZuordnung+0x30>
33ce: 8c 3f cpi r24, 0xFC ; 252
33d0: 19 f4 brne .+6 ; 0x33d8 <ParameterZuordnung+0x1e>
33d2: 80 91 21 02 lds r24, 0x0221
33d6: 09 c0 rjmp .+18 ; 0x33ea <ParameterZuordnung+0x30>
33d8: 8d 3f cpi r24, 0xFD ; 253
33da: 19 f4 brne .+6 ; 0x33e2 <ParameterZuordnung+0x28>
33dc: 80 91 23 02 lds r24, 0x0223
33e0: 04 c0 rjmp .+8 ; 0x33ea <ParameterZuordnung+0x30>
33e2: 8e 3f cpi r24, 0xFE ; 254
33e4: 21 f4 brne .+8 ; 0x33ee <ParameterZuordnung+0x34>
33e6: 80 91 25 02 lds r24, 0x0225
33ea: 80 93 81 01 sts 0x0181, r24
33ee: 80 91 81 01 lds r24, 0x0181
33f2: 88 23 and r24, r24
33f4: 19 f4 brne .+6 ; 0x33fc <ParameterZuordnung+0x42>
33f6: 10 92 81 01 sts 0x0181, r1
33fa: 04 c0 rjmp .+8 ; 0x3404 <ParameterZuordnung+0x4a>
33fc: 8f 3f cpi r24, 0xFF ; 255
33fe: 11 f4 brne .+4 ; 0x3404 <ParameterZuordnung+0x4a>
3400: 80 93 81 01 sts 0x0181, r24
3404: 80 91 77 05 lds r24, 0x0577
3408: 8b 3f cpi r24, 0xFB ; 251
340a: 98 f0 brcs .+38 ; 0x3432 <ParameterZuordnung+0x78>
340c: 8b 3f cpi r24, 0xFB ; 251
340e: 19 f4 brne .+6 ; 0x3416 <ParameterZuordnung+0x5c>
3410: 80 91 1f 02 lds r24, 0x021F
3414: 0e c0 rjmp .+28 ; 0x3432 <ParameterZuordnung+0x78>
3416: 8c 3f cpi r24, 0xFC ; 252
3418: 19 f4 brne .+6 ; 0x3420 <ParameterZuordnung+0x66>
341a: 80 91 21 02 lds r24, 0x0221
341e: 09 c0 rjmp .+18 ; 0x3432 <ParameterZuordnung+0x78>
3420: 8d 3f cpi r24, 0xFD ; 253
3422: 19 f4 brne .+6 ; 0x342a <ParameterZuordnung+0x70>
3424: 80 91 23 02 lds r24, 0x0223
3428: 04 c0 rjmp .+8 ; 0x3432 <ParameterZuordnung+0x78>
342a: 8e 3f cpi r24, 0xFE ; 254
342c: 21 f4 brne .+8 ; 0x3436 <ParameterZuordnung+0x7c>
342e: 80 91 25 02 lds r24, 0x0225
3432: 80 93 80 01 sts 0x0180, r24
3436: 80 91 80 01 lds r24, 0x0180
343a: 88 23 and r24, r24
343c: 19 f4 brne .+6 ; 0x3444 <ParameterZuordnung+0x8a>
343e: 10 92 80 01 sts 0x0180, r1
3442: 05 c0 rjmp .+10 ; 0x344e <ParameterZuordnung+0x94>
3444: 84 36 cpi r24, 0x64 ; 100
3446: 18 f0 brcs .+6 ; 0x344e <ParameterZuordnung+0x94>
3448: 84 e6 ldi r24, 0x64 ; 100
344a: 80 93 80 01 sts 0x0180, r24
344e: 80 91 79 05 lds r24, 0x0579
3452: 8b 3f cpi r24, 0xFB ; 251
3454: 98 f0 brcs .+38 ; 0x347c <ParameterZuordnung+0xc2>
3456: 8b 3f cpi r24, 0xFB ; 251
3458: 19 f4 brne .+6 ; 0x3460 <ParameterZuordnung+0xa6>
345a: 80 91 1f 02 lds r24, 0x021F
345e: 0e c0 rjmp .+28 ; 0x347c <ParameterZuordnung+0xc2>
3460: 8c 3f cpi r24, 0xFC ; 252
3462: 19 f4 brne .+6 ; 0x346a <ParameterZuordnung+0xb0>
3464: 80 91 21 02 lds r24, 0x0221
3468: 09 c0 rjmp .+18 ; 0x347c <ParameterZuordnung+0xc2>
346a: 8d 3f cpi r24, 0xFD ; 253
346c: 19 f4 brne .+6 ; 0x3474 <ParameterZuordnung+0xba>
346e: 80 91 23 02 lds r24, 0x0223
3472: 04 c0 rjmp .+8 ; 0x347c <ParameterZuordnung+0xc2>
3474: 8e 3f cpi r24, 0xFE ; 254
3476: 21 f4 brne .+8 ; 0x3480 <ParameterZuordnung+0xc6>
3478: 80 91 25 02 lds r24, 0x0225
347c: 80 93 82 01 sts 0x0182, r24
3480: 80 91 82 01 lds r24, 0x0182
3484: 88 23 and r24, r24
3486: 19 f4 brne .+6 ; 0x348e <ParameterZuordnung+0xd4>
3488: 10 92 82 01 sts 0x0182, r1
348c: 05 c0 rjmp .+10 ; 0x3498 <ParameterZuordnung+0xde>
348e: 84 36 cpi r24, 0x64 ; 100
3490: 18 f0 brcs .+6 ; 0x3498 <ParameterZuordnung+0xde>
3492: 84 e6 ldi r24, 0x64 ; 100
3494: 80 93 82 01 sts 0x0182, r24
3498: 80 91 7b 05 lds r24, 0x057B
349c: 8b 3f cpi r24, 0xFB ; 251
349e: 98 f0 brcs .+38 ; 0x34c6 <ParameterZuordnung+0x10c>
34a0: 8b 3f cpi r24, 0xFB ; 251
34a2: 19 f4 brne .+6 ; 0x34aa <ParameterZuordnung+0xf0>
34a4: 80 91 1f 02 lds r24, 0x021F
34a8: 0e c0 rjmp .+28 ; 0x34c6 <ParameterZuordnung+0x10c>
34aa: 8c 3f cpi r24, 0xFC ; 252
34ac: 19 f4 brne .+6 ; 0x34b4 <ParameterZuordnung+0xfa>
34ae: 80 91 21 02 lds r24, 0x0221
34b2: 09 c0 rjmp .+18 ; 0x34c6 <ParameterZuordnung+0x10c>
34b4: 8d 3f cpi r24, 0xFD ; 253
34b6: 19 f4 brne .+6 ; 0x34be <ParameterZuordnung+0x104>
34b8: 80 91 23 02 lds r24, 0x0223
34bc: 04 c0 rjmp .+8 ; 0x34c6 <ParameterZuordnung+0x10c>
34be: 8e 3f cpi r24, 0xFE ; 254
34c0: 21 f4 brne .+8 ; 0x34ca <ParameterZuordnung+0x110>
34c2: 80 91 25 02 lds r24, 0x0225
34c6: 80 93 83 01 sts 0x0183, r24
34ca: 80 91 83 01 lds r24, 0x0183
34ce: 88 23 and r24, r24
34d0: 19 f4 brne .+6 ; 0x34d8 <ParameterZuordnung+0x11e>
34d2: 10 92 83 01 sts 0x0183, r1
34d6: 04 c0 rjmp .+8 ; 0x34e0 <ParameterZuordnung+0x126>
34d8: 8f 3f cpi r24, 0xFF ; 255
34da: 11 f4 brne .+4 ; 0x34e0 <ParameterZuordnung+0x126>
34dc: 80 93 83 01 sts 0x0183, r24
34e0: 80 91 82 05 lds r24, 0x0582
34e4: 8b 3f cpi r24, 0xFB ; 251
34e6: 98 f0 brcs .+38 ; 0x350e <ParameterZuordnung+0x154>
34e8: 8b 3f cpi r24, 0xFB ; 251
34ea: 19 f4 brne .+6 ; 0x34f2 <ParameterZuordnung+0x138>
34ec: 80 91 1f 02 lds r24, 0x021F
34f0: 0e c0 rjmp .+28 ; 0x350e <ParameterZuordnung+0x154>
34f2: 8c 3f cpi r24, 0xFC ; 252
34f4: 19 f4 brne .+6 ; 0x34fc <ParameterZuordnung+0x142>
34f6: 80 91 21 02 lds r24, 0x0221
34fa: 09 c0 rjmp .+18 ; 0x350e <ParameterZuordnung+0x154>
34fc: 8d 3f cpi r24, 0xFD ; 253
34fe: 19 f4 brne .+6 ; 0x3506 <ParameterZuordnung+0x14c>
3500: 80 91 23 02 lds r24, 0x0223
3504: 04 c0 rjmp .+8 ; 0x350e <ParameterZuordnung+0x154>
3506: 8e 3f cpi r24, 0xFE ; 254
3508: 21 f4 brne .+8 ; 0x3512 <ParameterZuordnung+0x158>
350a: 80 91 25 02 lds r24, 0x0225
350e: 80 93 84 01 sts 0x0184, r24
3512: 80 91 84 01 lds r24, 0x0184
3516: 88 23 and r24, r24
3518: 19 f4 brne .+6 ; 0x3520 <ParameterZuordnung+0x166>
351a: 10 92 84 01 sts 0x0184, r1
351e: 04 c0 rjmp .+8 ; 0x3528 <ParameterZuordnung+0x16e>
3520: 8f 3f cpi r24, 0xFF ; 255
3522: 11 f4 brne .+4 ; 0x3528 <ParameterZuordnung+0x16e>
3524: 80 93 84 01 sts 0x0184, r24
3528: 80 91 83 05 lds r24, 0x0583
352c: 8b 3f cpi r24, 0xFB ; 251
352e: 98 f0 brcs .+38 ; 0x3556 <ParameterZuordnung+0x19c>
3530: 8b 3f cpi r24, 0xFB ; 251
3532: 19 f4 brne .+6 ; 0x353a <ParameterZuordnung+0x180>
3534: 80 91 1f 02 lds r24, 0x021F
3538: 0e c0 rjmp .+28 ; 0x3556 <ParameterZuordnung+0x19c>
353a: 8c 3f cpi r24, 0xFC ; 252
353c: 19 f4 brne .+6 ; 0x3544 <ParameterZuordnung+0x18a>
353e: 80 91 21 02 lds r24, 0x0221
3542: 09 c0 rjmp .+18 ; 0x3556 <ParameterZuordnung+0x19c>
3544: 8d 3f cpi r24, 0xFD ; 253
3546: 19 f4 brne .+6 ; 0x354e <ParameterZuordnung+0x194>
3548: 80 91 23 02 lds r24, 0x0223
354c: 04 c0 rjmp .+8 ; 0x3556 <ParameterZuordnung+0x19c>
354e: 8e 3f cpi r24, 0xFE ; 254
3550: 21 f4 brne .+8 ; 0x355a <ParameterZuordnung+0x1a0>
3552: 80 91 25 02 lds r24, 0x0225
3556: 80 93 85 01 sts 0x0185, r24
355a: 80 91 85 01 lds r24, 0x0185
355e: 8b 30 cpi r24, 0x0B ; 11
3560: 10 f4 brcc .+4 ; 0x3566 <ParameterZuordnung+0x1ac>
3562: 8a e0 ldi r24, 0x0A ; 10
3564: 02 c0 rjmp .+4 ; 0x356a <ParameterZuordnung+0x1b0>
3566: 8f 3f cpi r24, 0xFF ; 255
3568: 11 f4 brne .+4 ; 0x356e <ParameterZuordnung+0x1b4>
356a: 80 93 85 01 sts 0x0185, r24
356e: 80 91 84 05 lds r24, 0x0584
3572: 8b 3f cpi r24, 0xFB ; 251
3574: 98 f0 brcs .+38 ; 0x359c <ParameterZuordnung+0x1e2>
3576: 8b 3f cpi r24, 0xFB ; 251
3578: 19 f4 brne .+6 ; 0x3580 <ParameterZuordnung+0x1c6>
357a: 80 91 1f 02 lds r24, 0x021F
357e: 0e c0 rjmp .+28 ; 0x359c <ParameterZuordnung+0x1e2>
3580: 8c 3f cpi r24, 0xFC ; 252
3582: 19 f4 brne .+6 ; 0x358a <ParameterZuordnung+0x1d0>
3584: 80 91 21 02 lds r24, 0x0221
3588: 09 c0 rjmp .+18 ; 0x359c <ParameterZuordnung+0x1e2>
358a: 8d 3f cpi r24, 0xFD ; 253
358c: 19 f4 brne .+6 ; 0x3594 <ParameterZuordnung+0x1da>
358e: 80 91 23 02 lds r24, 0x0223
3592: 04 c0 rjmp .+8 ; 0x359c <ParameterZuordnung+0x1e2>
3594: 8e 3f cpi r24, 0xFE ; 254
3596: 21 f4 brne .+8 ; 0x35a0 <ParameterZuordnung+0x1e6>
3598: 80 91 25 02 lds r24, 0x0225
359c: 80 93 86 01 sts 0x0186, r24
35a0: 80 91 86 01 lds r24, 0x0186
35a4: 88 23 and r24, r24
35a6: 19 f4 brne .+6 ; 0x35ae <ParameterZuordnung+0x1f4>
35a8: 10 92 86 01 sts 0x0186, r1
35ac: 04 c0 rjmp .+8 ; 0x35b6 <ParameterZuordnung+0x1fc>
35ae: 8f 3f cpi r24, 0xFF ; 255
35b0: 11 f4 brne .+4 ; 0x35b6 <ParameterZuordnung+0x1fc>
35b2: 80 93 86 01 sts 0x0186, r24
35b6: 80 91 89 05 lds r24, 0x0589
35ba: 8b 3f cpi r24, 0xFB ; 251
35bc: 98 f0 brcs .+38 ; 0x35e4 <ParameterZuordnung+0x22a>
35be: 8b 3f cpi r24, 0xFB ; 251
35c0: 19 f4 brne .+6 ; 0x35c8 <ParameterZuordnung+0x20e>
35c2: 80 91 1f 02 lds r24, 0x021F
35c6: 0e c0 rjmp .+28 ; 0x35e4 <ParameterZuordnung+0x22a>
35c8: 8c 3f cpi r24, 0xFC ; 252
35ca: 19 f4 brne .+6 ; 0x35d2 <ParameterZuordnung+0x218>
35cc: 80 91 21 02 lds r24, 0x0221
35d0: 09 c0 rjmp .+18 ; 0x35e4 <ParameterZuordnung+0x22a>
35d2: 8d 3f cpi r24, 0xFD ; 253
35d4: 19 f4 brne .+6 ; 0x35dc <ParameterZuordnung+0x222>
35d6: 80 91 23 02 lds r24, 0x0223
35da: 04 c0 rjmp .+8 ; 0x35e4 <ParameterZuordnung+0x22a>
35dc: 8e 3f cpi r24, 0xFE ; 254
35de: 21 f4 brne .+8 ; 0x35e8 <ParameterZuordnung+0x22e>
35e0: 80 91 25 02 lds r24, 0x0225
35e4: 80 93 88 01 sts 0x0188, r24
35e8: 80 91 88 01 lds r24, 0x0188
35ec: 88 23 and r24, r24
35ee: 19 f4 brne .+6 ; 0x35f6 <ParameterZuordnung+0x23c>
35f0: 10 92 88 01 sts 0x0188, r1
35f4: 04 c0 rjmp .+8 ; 0x35fe <ParameterZuordnung+0x244>
35f6: 8f 3f cpi r24, 0xFF ; 255
35f8: 11 f4 brne .+4 ; 0x35fe <ParameterZuordnung+0x244>
35fa: 80 93 88 01 sts 0x0188, r24
35fe: 80 91 8a 05 lds r24, 0x058A
3602: 8b 3f cpi r24, 0xFB ; 251
3604: 98 f0 brcs .+38 ; 0x362c <ParameterZuordnung+0x272>
3606: 8b 3f cpi r24, 0xFB ; 251
3608: 19 f4 brne .+6 ; 0x3610 <ParameterZuordnung+0x256>
360a: 80 91 1f 02 lds r24, 0x021F
360e: 0e c0 rjmp .+28 ; 0x362c <ParameterZuordnung+0x272>
3610: 8c 3f cpi r24, 0xFC ; 252
3612: 19 f4 brne .+6 ; 0x361a <ParameterZuordnung+0x260>
3614: 80 91 21 02 lds r24, 0x0221
3618: 09 c0 rjmp .+18 ; 0x362c <ParameterZuordnung+0x272>
361a: 8d 3f cpi r24, 0xFD ; 253
361c: 19 f4 brne .+6 ; 0x3624 <ParameterZuordnung+0x26a>
361e: 80 91 23 02 lds r24, 0x0223
3622: 04 c0 rjmp .+8 ; 0x362c <ParameterZuordnung+0x272>
3624: 8e 3f cpi r24, 0xFE ; 254
3626: 21 f4 brne .+8 ; 0x3630 <ParameterZuordnung+0x276>
3628: 80 91 25 02 lds r24, 0x0225
362c: 80 93 33 02 sts 0x0233, r24
3630: 80 91 33 02 lds r24, 0x0233
3634: 88 23 and r24, r24
3636: 19 f4 brne .+6 ; 0x363e <ParameterZuordnung+0x284>
3638: 10 92 33 02 sts 0x0233, r1
363c: 04 c0 rjmp .+8 ; 0x3646 <ParameterZuordnung+0x28c>
363e: 8f 3f cpi r24, 0xFF ; 255
3640: 11 f4 brne .+4 ; 0x3646 <ParameterZuordnung+0x28c>
3642: 80 93 33 02 sts 0x0233, r24
3646: 80 91 8b 05 lds r24, 0x058B
364a: 8b 3f cpi r24, 0xFB ; 251
364c: 98 f0 brcs .+38 ; 0x3674 <ParameterZuordnung+0x2ba>
364e: 8b 3f cpi r24, 0xFB ; 251
3650: 19 f4 brne .+6 ; 0x3658 <ParameterZuordnung+0x29e>
3652: 80 91 1f 02 lds r24, 0x021F
3656: 0e c0 rjmp .+28 ; 0x3674 <ParameterZuordnung+0x2ba>
3658: 8c 3f cpi r24, 0xFC ; 252
365a: 19 f4 brne .+6 ; 0x3662 <ParameterZuordnung+0x2a8>
365c: 80 91 21 02 lds r24, 0x0221
3660: 09 c0 rjmp .+18 ; 0x3674 <ParameterZuordnung+0x2ba>
3662: 8d 3f cpi r24, 0xFD ; 253
3664: 19 f4 brne .+6 ; 0x366c <ParameterZuordnung+0x2b2>
3666: 80 91 23 02 lds r24, 0x0223
366a: 04 c0 rjmp .+8 ; 0x3674 <ParameterZuordnung+0x2ba>
366c: 8e 3f cpi r24, 0xFE ; 254
366e: 21 f4 brne .+8 ; 0x3678 <ParameterZuordnung+0x2be>
3670: 80 91 25 02 lds r24, 0x0225
3674: 80 93 34 02 sts 0x0234, r24
3678: 80 91 34 02 lds r24, 0x0234
367c: 88 23 and r24, r24
367e: 19 f4 brne .+6 ; 0x3686 <ParameterZuordnung+0x2cc>
3680: 10 92 34 02 sts 0x0234, r1
3684: 04 c0 rjmp .+8 ; 0x368e <ParameterZuordnung+0x2d4>
3686: 8f 3f cpi r24, 0xFF ; 255
3688: 11 f4 brne .+4 ; 0x368e <ParameterZuordnung+0x2d4>
368a: 80 93 34 02 sts 0x0234, r24
368e: 80 91 8c 05 lds r24, 0x058C
3692: 8b 3f cpi r24, 0xFB ; 251
3694: 98 f0 brcs .+38 ; 0x36bc <ParameterZuordnung+0x302>
3696: 8b 3f cpi r24, 0xFB ; 251
3698: 19 f4 brne .+6 ; 0x36a0 <ParameterZuordnung+0x2e6>
369a: 80 91 1f 02 lds r24, 0x021F
369e: 0e c0 rjmp .+28 ; 0x36bc <ParameterZuordnung+0x302>
36a0: 8c 3f cpi r24, 0xFC ; 252
36a2: 19 f4 brne .+6 ; 0x36aa <ParameterZuordnung+0x2f0>
36a4: 80 91 21 02 lds r24, 0x0221
36a8: 09 c0 rjmp .+18 ; 0x36bc <ParameterZuordnung+0x302>
36aa: 8d 3f cpi r24, 0xFD ; 253
36ac: 19 f4 brne .+6 ; 0x36b4 <ParameterZuordnung+0x2fa>
36ae: 80 91 23 02 lds r24, 0x0223
36b2: 04 c0 rjmp .+8 ; 0x36bc <ParameterZuordnung+0x302>
36b4: 8e 3f cpi r24, 0xFE ; 254
36b6: 21 f4 brne .+8 ; 0x36c0 <ParameterZuordnung+0x306>
36b8: 80 91 25 02 lds r24, 0x0225
36bc: 80 93 35 02 sts 0x0235, r24
36c0: 80 91 35 02 lds r24, 0x0235
36c4: 88 23 and r24, r24
36c6: 19 f4 brne .+6 ; 0x36ce <ParameterZuordnung+0x314>
36c8: 10 92 35 02 sts 0x0235, r1
36cc: 04 c0 rjmp .+8 ; 0x36d6 <ParameterZuordnung+0x31c>
36ce: 8f 3f cpi r24, 0xFF ; 255
36d0: 11 f4 brne .+4 ; 0x36d6 <ParameterZuordnung+0x31c>
36d2: 80 93 35 02 sts 0x0235, r24
36d6: 80 91 8d 05 lds r24, 0x058D
36da: 8b 3f cpi r24, 0xFB ; 251
36dc: 98 f0 brcs .+38 ; 0x3704 <ParameterZuordnung+0x34a>
36de: 8b 3f cpi r24, 0xFB ; 251
36e0: 19 f4 brne .+6 ; 0x36e8 <ParameterZuordnung+0x32e>
36e2: 80 91 1f 02 lds r24, 0x021F
36e6: 0e c0 rjmp .+28 ; 0x3704 <ParameterZuordnung+0x34a>
36e8: 8c 3f cpi r24, 0xFC ; 252
36ea: 19 f4 brne .+6 ; 0x36f2 <ParameterZuordnung+0x338>
36ec: 80 91 21 02 lds r24, 0x0221
36f0: 09 c0 rjmp .+18 ; 0x3704 <ParameterZuordnung+0x34a>
36f2: 8d 3f cpi r24, 0xFD ; 253
36f4: 19 f4 brne .+6 ; 0x36fc <ParameterZuordnung+0x342>
36f6: 80 91 23 02 lds r24, 0x0223
36fa: 04 c0 rjmp .+8 ; 0x3704 <ParameterZuordnung+0x34a>
36fc: 8e 3f cpi r24, 0xFE ; 254
36fe: 21 f4 brne .+8 ; 0x3708 <ParameterZuordnung+0x34e>
3700: 80 91 25 02 lds r24, 0x0225
3704: 80 93 36 02 sts 0x0236, r24
3708: 80 91 36 02 lds r24, 0x0236
370c: 88 23 and r24, r24
370e: 19 f4 brne .+6 ; 0x3716 <ParameterZuordnung+0x35c>
3710: 10 92 36 02 sts 0x0236, r1
3714: 04 c0 rjmp .+8 ; 0x371e <ParameterZuordnung+0x364>
3716: 8f 3f cpi r24, 0xFF ; 255
3718: 11 f4 brne .+4 ; 0x371e <ParameterZuordnung+0x364>
371a: 80 93 36 02 sts 0x0236, r24
371e: 90 91 8e 05 lds r25, 0x058E
3722: 9b 3f cpi r25, 0xFB ; 251
3724: b0 f0 brcs .+44 ; 0x3752 <ParameterZuordnung+0x398>
3726: 9b 3f cpi r25, 0xFB ; 251
3728: 19 f4 brne .+6 ; 0x3730 <ParameterZuordnung+0x376>
372a: 80 91 1f 02 lds r24, 0x021F
372e: 04 c0 rjmp .+8 ; 0x3738 <ParameterZuordnung+0x37e>
3730: 9c 3f cpi r25, 0xFC ; 252
3732: 29 f4 brne .+10 ; 0x373e <ParameterZuordnung+0x384>
3734: 80 91 21 02 lds r24, 0x0221
3738: 80 93 89 01 sts 0x0189, r24
373c: 0c c0 rjmp .+24 ; 0x3756 <ParameterZuordnung+0x39c>
373e: 9d 3f cpi r25, 0xFD ; 253
3740: 19 f4 brne .+6 ; 0x3748 <ParameterZuordnung+0x38e>
3742: 80 91 23 02 lds r24, 0x0223
3746: f8 cf rjmp .-16 ; 0x3738 <ParameterZuordnung+0x37e>
3748: 9e 3f cpi r25, 0xFE ; 254
374a: 29 f4 brne .+10 ; 0x3756 <ParameterZuordnung+0x39c>
374c: 80 91 25 02 lds r24, 0x0225
3750: f3 cf rjmp .-26 ; 0x3738 <ParameterZuordnung+0x37e>
3752: 90 93 89 01 sts 0x0189, r25
3756: 80 91 89 01 lds r24, 0x0189
375a: 88 23 and r24, r24
375c: 19 f4 brne .+6 ; 0x3764 <ParameterZuordnung+0x3aa>
375e: 10 92 89 01 sts 0x0189, r1
3762: 04 c0 rjmp .+8 ; 0x376c <ParameterZuordnung+0x3b2>
3764: 8f 3f cpi r24, 0xFF ; 255
3766: 11 f4 brne .+4 ; 0x376c <ParameterZuordnung+0x3b2>
3768: 80 93 89 01 sts 0x0189, r24
376c: 9b 3f cpi r25, 0xFB ; 251
376e: b0 f0 brcs .+44 ; 0x379c <ParameterZuordnung+0x3e2>
3770: 9b 3f cpi r25, 0xFB ; 251
3772: 19 f4 brne .+6 ; 0x377a <ParameterZuordnung+0x3c0>
3774: 80 91 1f 02 lds r24, 0x021F
3778: 04 c0 rjmp .+8 ; 0x3782 <ParameterZuordnung+0x3c8>
377a: 9c 3f cpi r25, 0xFC ; 252
377c: 29 f4 brne .+10 ; 0x3788 <ParameterZuordnung+0x3ce>
377e: 80 91 21 02 lds r24, 0x0221
3782: 80 93 89 01 sts 0x0189, r24
3786: 0c c0 rjmp .+24 ; 0x37a0 <ParameterZuordnung+0x3e6>
3788: 9d 3f cpi r25, 0xFD ; 253
378a: 19 f4 brne .+6 ; 0x3792 <ParameterZuordnung+0x3d8>
378c: 80 91 23 02 lds r24, 0x0223
3790: f8 cf rjmp .-16 ; 0x3782 <ParameterZuordnung+0x3c8>
3792: 9e 3f cpi r25, 0xFE ; 254
3794: 29 f4 brne .+10 ; 0x37a0 <ParameterZuordnung+0x3e6>
3796: 80 91 25 02 lds r24, 0x0225
379a: f3 cf rjmp .-26 ; 0x3782 <ParameterZuordnung+0x3c8>
379c: 90 93 89 01 sts 0x0189, r25
37a0: 80 91 89 01 lds r24, 0x0189
37a4: 88 23 and r24, r24
37a6: 19 f4 brne .+6 ; 0x37ae <ParameterZuordnung+0x3f4>
37a8: 10 92 89 01 sts 0x0189, r1
37ac: 04 c0 rjmp .+8 ; 0x37b6 <ParameterZuordnung+0x3fc>
37ae: 8f 3f cpi r24, 0xFF ; 255
37b0: 11 f4 brne .+4 ; 0x37b6 <ParameterZuordnung+0x3fc>
37b2: 80 93 89 01 sts 0x0189, r24
37b6: 9b 3f cpi r25, 0xFB ; 251
37b8: b0 f0 brcs .+44 ; 0x37e6 <ParameterZuordnung+0x42c>
37ba: 9b 3f cpi r25, 0xFB ; 251
37bc: 19 f4 brne .+6 ; 0x37c4 <ParameterZuordnung+0x40a>
37be: 80 91 1f 02 lds r24, 0x021F
37c2: 04 c0 rjmp .+8 ; 0x37cc <ParameterZuordnung+0x412>
37c4: 9c 3f cpi r25, 0xFC ; 252
37c6: 29 f4 brne .+10 ; 0x37d2 <ParameterZuordnung+0x418>
37c8: 80 91 21 02 lds r24, 0x0221
37cc: 80 93 89 01 sts 0x0189, r24
37d0: 0c c0 rjmp .+24 ; 0x37ea <ParameterZuordnung+0x430>
37d2: 9d 3f cpi r25, 0xFD ; 253
37d4: 19 f4 brne .+6 ; 0x37dc <ParameterZuordnung+0x422>
37d6: 80 91 23 02 lds r24, 0x0223
37da: f8 cf rjmp .-16 ; 0x37cc <ParameterZuordnung+0x412>
37dc: 9e 3f cpi r25, 0xFE ; 254
37de: 29 f4 brne .+10 ; 0x37ea <ParameterZuordnung+0x430>
37e0: 80 91 25 02 lds r24, 0x0225
37e4: f3 cf rjmp .-26 ; 0x37cc <ParameterZuordnung+0x412>
37e6: 90 93 89 01 sts 0x0189, r25
37ea: 80 91 89 01 lds r24, 0x0189
37ee: 88 23 and r24, r24
37f0: 19 f4 brne .+6 ; 0x37f8 <ParameterZuordnung+0x43e>
37f2: 10 92 89 01 sts 0x0189, r1
37f6: 04 c0 rjmp .+8 ; 0x3800 <ParameterZuordnung+0x446>
37f8: 8f 3f cpi r24, 0xFF ; 255
37fa: 11 f4 brne .+4 ; 0x3800 <ParameterZuordnung+0x446>
37fc: 80 93 89 01 sts 0x0189, r24
3800: 10 91 88 01 lds r17, 0x0188
3804: 61 2f mov r22, r17
3806: 77 27 eor r23, r23
3808: 67 fd sbrc r22, 7
380a: 70 95 com r23
380c: 87 2f mov r24, r23
380e: 97 2f mov r25, r23
3810: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
3814: 17 ff sbrs r17, 7
3816: 06 c0 rjmp .+12 ; 0x3824 <ParameterZuordnung+0x46a>
3818: 20 e0 ldi r18, 0x00 ; 0
381a: 30 e0 ldi r19, 0x00 ; 0
381c: 40 e8 ldi r20, 0x80 ; 128
381e: 53 e4 ldi r21, 0x43 ; 67
3820: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
3824: 27 e1 ldi r18, 0x17 ; 23
3826: 37 eb ldi r19, 0xB7 ; 183
3828: 41 ed ldi r20, 0xD1 ; 209
382a: 58 e3 ldi r21, 0x38 ; 56
382c: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
3830: 60 93 7c 01 sts 0x017C, r22
3834: 70 93 7d 01 sts 0x017D, r23
3838: 80 93 7e 01 sts 0x017E, r24
383c: 90 93 7f 01 sts 0x017F, r25
3840: 80 91 80 05 lds r24, 0x0580
3844: 80 93 b4 05 sts 0x05B4, r24
3848: 80 91 7f 05 lds r24, 0x057F
384c: 80 93 ab 05 sts 0x05AB, r24
3850: 1f 91 pop r17
3852: 08 95 ret
 
00003854 <DefaultKonstanten2>:
3854: 81 e0 ldi r24, 0x01 ; 1
3856: 80 93 6d 05 sts 0x056D, r24
385a: 42 e0 ldi r20, 0x02 ; 2
385c: 40 93 6e 05 sts 0x056E, r20
3860: 83 e0 ldi r24, 0x03 ; 3
3862: 80 93 6f 05 sts 0x056F, r24
3866: 24 e0 ldi r18, 0x04 ; 4
3868: 20 93 70 05 sts 0x0570, r18
386c: 35 e0 ldi r19, 0x05 ; 5
386e: 30 93 71 05 sts 0x0571, r19
3872: 86 e0 ldi r24, 0x06 ; 6
3874: 80 93 72 05 sts 0x0572, r24
3878: 87 e0 ldi r24, 0x07 ; 7
387a: 80 93 73 05 sts 0x0573, r24
387e: 10 92 75 05 sts 0x0575, r1
3882: 8e e1 ldi r24, 0x1E ; 30
3884: 80 93 76 05 sts 0x0576, r24
3888: 8b ef ldi r24, 0xFB ; 251
388a: 80 93 78 05 sts 0x0578, r24
388e: 8a e0 ldi r24, 0x0A ; 10
3890: 80 93 79 05 sts 0x0579, r24
3894: 92 e3 ldi r25, 0x32 ; 50
3896: 90 93 77 05 sts 0x0577, r25
389a: 90 93 7b 05 sts 0x057B, r25
389e: 40 93 7a 05 sts 0x057A, r20
38a2: 20 93 7c 05 sts 0x057C, r18
38a6: 10 92 7d 05 sts 0x057D, r1
38aa: 80 e1 ldi r24, 0x10 ; 16
38ac: 80 93 7e 05 sts 0x057E, r24
38b0: 8f e0 ldi r24, 0x0F ; 15
38b2: 80 93 7f 05 sts 0x057F, r24
38b6: 8a ef ldi r24, 0xFA ; 250
38b8: 80 93 80 05 sts 0x0580, r24
38bc: 8a e1 ldi r24, 0x1A ; 26
38be: 80 93 81 05 sts 0x0581, r24
38c2: 80 e8 ldi r24, 0x80 ; 128
38c4: 80 93 82 05 sts 0x0582, r24
38c8: 8f ea ldi r24, 0xAF ; 175
38ca: 80 93 83 05 sts 0x0583, r24
38ce: 80 93 84 05 sts 0x0584, r24
38d2: 8a e5 ldi r24, 0x5A ; 90
38d4: 80 93 85 05 sts 0x0585, r24
38d8: 83 e2 ldi r24, 0x23 ; 35
38da: 80 93 86 05 sts 0x0586, r24
38de: 84 e1 ldi r24, 0x14 ; 20
38e0: 80 93 87 05 sts 0x0587, r24
38e4: 10 92 88 05 sts 0x0588, r1
38e8: 30 93 89 05 sts 0x0589, r19
38ec: 10 92 8a 05 sts 0x058A, r1
38f0: 10 92 8b 05 sts 0x058B, r1
38f4: 10 92 8c 05 sts 0x058C, r1
38f8: 10 92 8d 05 sts 0x058D, r1
38fc: 84 e6 ldi r24, 0x64 ; 100
38fe: 80 93 8e 05 sts 0x058E, r24
3902: 88 e2 ldi r24, 0x28 ; 40
3904: 80 93 8f 05 sts 0x058F, r24
3908: 10 92 93 05 sts 0x0593, r1
390c: 90 93 90 05 sts 0x0590, r25
3910: 86 e9 ldi r24, 0x96 ; 150
3912: 80 93 91 05 sts 0x0591, r24
3916: 30 93 92 05 sts 0x0592, r19
391a: ab e9 ldi r26, 0x9B ; 155
391c: b5 e0 ldi r27, 0x05 ; 5
391e: e8 e6 ldi r30, 0x68 ; 104
3920: f1 e0 ldi r31, 0x01 ; 1
3922: 8c e0 ldi r24, 0x0C ; 12
3924: 01 90 ld r0, Z+
3926: 0d 92 st X+, r0
3928: 81 50 subi r24, 0x01 ; 1
392a: e1 f7 brne .-8 ; 0x3924 <DefaultKonstanten2+0xd0>
392c: 08 95 ret
 
0000392e <DefaultKonstanten1>:
392e: 81 e0 ldi r24, 0x01 ; 1
3930: 80 93 6d 05 sts 0x056D, r24
3934: 52 e0 ldi r21, 0x02 ; 2
3936: 50 93 6e 05 sts 0x056E, r21
393a: 83 e0 ldi r24, 0x03 ; 3
393c: 80 93 6f 05 sts 0x056F, r24
3940: 44 e0 ldi r20, 0x04 ; 4
3942: 40 93 70 05 sts 0x0570, r20
3946: 35 e0 ldi r19, 0x05 ; 5
3948: 30 93 71 05 sts 0x0571, r19
394c: 86 e0 ldi r24, 0x06 ; 6
394e: 80 93 72 05 sts 0x0572, r24
3952: 87 e0 ldi r24, 0x07 ; 7
3954: 80 93 73 05 sts 0x0573, r24
3958: 28 e0 ldi r18, 0x08 ; 8
395a: 20 93 74 05 sts 0x0574, r18
395e: 10 92 75 05 sts 0x0575, r1
3962: 9e e1 ldi r25, 0x1E ; 30
3964: 90 93 76 05 sts 0x0576, r25
3968: 8b ef ldi r24, 0xFB ; 251
396a: 80 93 78 05 sts 0x0578, r24
396e: 8a e0 ldi r24, 0x0A ; 10
3970: 80 93 79 05 sts 0x0579, r24
3974: 86 e4 ldi r24, 0x46 ; 70
3976: 80 93 77 05 sts 0x0577, r24
397a: 90 93 7b 05 sts 0x057B, r25
397e: 50 93 7a 05 sts 0x057A, r21
3982: 40 93 7c 05 sts 0x057C, r20
3986: 20 93 7d 05 sts 0x057D, r18
398a: 80 e1 ldi r24, 0x10 ; 16
398c: 80 93 7e 05 sts 0x057E, r24
3990: 8f e0 ldi r24, 0x0F ; 15
3992: 80 93 7f 05 sts 0x057F, r24
3996: 8a ef ldi r24, 0xFA ; 250
3998: 80 93 80 05 sts 0x0580, r24
399c: 8a e1 ldi r24, 0x1A ; 26
399e: 80 93 81 05 sts 0x0581, r24
39a2: 80 e8 ldi r24, 0x80 ; 128
39a4: 80 93 82 05 sts 0x0582, r24
39a8: 88 e7 ldi r24, 0x78 ; 120
39aa: 80 93 83 05 sts 0x0583, r24
39ae: 96 e9 ldi r25, 0x96 ; 150
39b0: 90 93 84 05 sts 0x0584, r25
39b4: 8a e5 ldi r24, 0x5A ; 90
39b6: 80 93 85 05 sts 0x0585, r24
39ba: 83 e2 ldi r24, 0x23 ; 35
39bc: 80 93 86 05 sts 0x0586, r24
39c0: 84 e1 ldi r24, 0x14 ; 20
39c2: 80 93 87 05 sts 0x0587, r24
39c6: 10 92 88 05 sts 0x0588, r1
39ca: 30 93 89 05 sts 0x0589, r19
39ce: 10 92 8a 05 sts 0x058A, r1
39d2: 10 92 8b 05 sts 0x058B, r1
39d6: 10 92 8c 05 sts 0x058C, r1
39da: 10 92 8d 05 sts 0x058D, r1
39de: 84 e6 ldi r24, 0x64 ; 100
39e0: 80 93 8e 05 sts 0x058E, r24
39e4: 88 e2 ldi r24, 0x28 ; 40
39e6: 80 93 8f 05 sts 0x058F, r24
39ea: 10 92 93 05 sts 0x0593, r1
39ee: 82 e3 ldi r24, 0x32 ; 50
39f0: 80 93 90 05 sts 0x0590, r24
39f4: 90 93 91 05 sts 0x0591, r25
39f8: 30 93 92 05 sts 0x0592, r19
39fc: ab e9 ldi r26, 0x9B ; 155
39fe: b5 e0 ldi r27, 0x05 ; 5
3a00: e0 e7 ldi r30, 0x70 ; 112
3a02: f1 e0 ldi r31, 0x01 ; 1
3a04: 8c e0 ldi r24, 0x0C ; 12
3a06: 01 90 ld r0, Z+
3a08: 0d 92 st X+, r0
3a0a: 81 50 subi r24, 0x01 ; 1
3a0c: e1 f7 brne .-8 ; 0x3a06 <DefaultKonstanten1+0xd8>
3a0e: 08 95 ret
 
00003a10 <SendMotorData>:
3a10: 80 91 2e 02 lds r24, 0x022E
3a14: 88 23 and r24, r24
3a16: 01 f5 brne .+64 ; 0x3a58 <SendMotorData+0x48>
3a18: 10 92 97 02 sts 0x0297, r1
3a1c: 10 92 96 02 sts 0x0296, r1
3a20: 10 92 9a 02 sts 0x029A, r1
3a24: 10 92 a6 02 sts 0x02A6, r1
3a28: 80 91 98 01 lds r24, 0x0198
3a2c: 88 23 and r24, r24
3a2e: 11 f0 breq .+4 ; 0x3a34 <SendMotorData+0x24>
3a30: 80 93 96 02 sts 0x0296, r24
3a34: 80 91 99 01 lds r24, 0x0199
3a38: 88 23 and r24, r24
3a3a: 11 f0 breq .+4 ; 0x3a40 <SendMotorData+0x30>
3a3c: 80 93 97 02 sts 0x0297, r24
3a40: 80 91 9a 01 lds r24, 0x019A
3a44: 88 23 and r24, r24
3a46: 11 f0 breq .+4 ; 0x3a4c <SendMotorData+0x3c>
3a48: 80 93 a6 02 sts 0x02A6, r24
3a4c: 80 91 9b 01 lds r24, 0x019B
3a50: 88 23 and r24, r24
3a52: 11 f0 breq .+4 ; 0x3a58 <SendMotorData+0x48>
3a54: 80 93 9a 02 sts 0x029A, r24
3a58: 80 91 96 02 lds r24, 0x0296
3a5c: 99 27 eor r25, r25
3a5e: 90 93 03 05 sts 0x0503, r25
3a62: 80 93 02 05 sts 0x0502, r24
3a66: 80 91 97 02 lds r24, 0x0297
3a6a: 99 27 eor r25, r25
3a6c: 90 93 05 05 sts 0x0505, r25
3a70: 80 93 04 05 sts 0x0504, r24
3a74: 80 91 a6 02 lds r24, 0x02A6
3a78: 99 27 eor r25, r25
3a7a: 90 93 07 05 sts 0x0507, r25
3a7e: 80 93 06 05 sts 0x0506, r24
3a82: 80 91 9a 02 lds r24, 0x029A
3a86: 99 27 eor r25, r25
3a88: 90 93 09 05 sts 0x0509, r25
3a8c: 80 93 08 05 sts 0x0508, r24
3a90: 10 92 cf 01 sts 0x01CF, r1
3a94: 10 92 d0 01 sts 0x01D0, r1
3a98: 0e 94 1a 14 call 0x2834 ; 0x2834 <i2c_start>
3a9c: 08 95 ret
 
00003a9e <SetNeutral>:
3a9e: cf 93 push r28
3aa0: df 93 push r29
3aa2: 10 92 de 01 sts 0x01DE, r1
3aa6: 10 92 dd 01 sts 0x01DD, r1
3aaa: 10 92 e0 01 sts 0x01E0, r1
3aae: 10 92 df 01 sts 0x01DF, r1
3ab2: 80 e0 ldi r24, 0x00 ; 0
3ab4: 90 e0 ldi r25, 0x00 ; 0
3ab6: a0 e0 ldi r26, 0x00 ; 0
3ab8: b0 e0 ldi r27, 0x00 ; 0
3aba: 80 93 e1 01 sts 0x01E1, r24
3abe: 90 93 e2 01 sts 0x01E2, r25
3ac2: a0 93 e3 01 sts 0x01E3, r26
3ac6: b0 93 e4 01 sts 0x01E4, r27
3aca: 10 92 d8 01 sts 0x01D8, r1
3ace: 10 92 d7 01 sts 0x01D7, r1
3ad2: 10 92 da 01 sts 0x01DA, r1
3ad6: 10 92 d9 01 sts 0x01D9, r1
3ada: 10 92 dc 01 sts 0x01DC, r1
3ade: 10 92 db 01 sts 0x01DB, r1
3ae2: 0e 94 41 18 call 0x3082 ; 0x3082 <CalibrierMittelwert>
3ae6: 85 e0 ldi r24, 0x05 ; 5
3ae8: 90 e0 ldi r25, 0x00 ; 0
3aea: 0e 94 fb 0b call 0x17f6 ; 0x17f6 <SetDelay>
3aee: ec 01 movw r28, r24
3af0: ce 01 movw r24, r28
3af2: 0e 94 04 0c call 0x1808 ; 0x1808 <CheckDelay>
3af6: 88 23 and r24, r24
3af8: d9 f3 breq .-10 ; 0x3af0 <SetNeutral+0x52>
3afa: 0e 94 41 18 call 0x3082 ; 0x3082 <CalibrierMittelwert>
3afe: 80 91 75 05 lds r24, 0x0575
3b02: 80 ff sbrs r24, 0
3b04: 10 c0 rjmp .+32 ; 0x3b26 <SetNeutral+0x88>
3b06: 80 91 0a 01 lds r24, 0x010A
3b0a: 90 91 0b 01 lds r25, 0x010B
3b0e: 87 5b subi r24, 0xB7 ; 183
3b10: 93 40 sbci r25, 0x03 ; 3
3b12: 38 f4 brcc .+14 ; 0x3b22 <SetNeutral+0x84>
3b14: 80 91 0a 01 lds r24, 0x010A
3b18: 90 91 0b 01 lds r25, 0x010B
3b1c: 8e 5e subi r24, 0xEE ; 238
3b1e: 92 40 sbci r25, 0x02 ; 2
3b20: 10 f4 brcc .+4 ; 0x3b26 <SetNeutral+0x88>
3b22: 0e 94 20 10 call 0x2040 ; 0x2040 <SucheLuftruckOffset>
3b26: 80 91 a9 05 lds r24, 0x05A9
3b2a: 90 91 aa 05 lds r25, 0x05AA
3b2e: 97 ff sbrs r25, 7
3b30: 03 c0 rjmp .+6 ; 0x3b38 <SetNeutral+0x9a>
3b32: 90 95 com r25
3b34: 81 95 neg r24
3b36: 9f 4f sbci r25, 0xFF ; 255
3b38: 90 93 d8 01 sts 0x01D8, r25
3b3c: 80 93 d7 01 sts 0x01D7, r24
3b40: 80 91 a7 05 lds r24, 0x05A7
3b44: 90 91 a8 05 lds r25, 0x05A8
3b48: 97 ff sbrs r25, 7
3b4a: 03 c0 rjmp .+6 ; 0x3b52 <SetNeutral+0xb4>
3b4c: 90 95 com r25
3b4e: 81 95 neg r24
3b50: 9f 4f sbci r25, 0xFF ; 255
3b52: 90 93 da 01 sts 0x01DA, r25
3b56: 80 93 d9 01 sts 0x01D9, r24
3b5a: 80 91 b5 05 lds r24, 0x05B5
3b5e: 90 91 b6 05 lds r25, 0x05B6
3b62: 97 ff sbrs r25, 7
3b64: 03 c0 rjmp .+6 ; 0x3b6c <SetNeutral+0xce>
3b66: 90 95 com r25
3b68: 81 95 neg r24
3b6a: 9f 4f sbci r25, 0xFF ; 255
3b6c: 90 93 dc 01 sts 0x01DC, r25
3b70: 80 93 db 01 sts 0x01DB, r24
3b74: 80 91 bb 05 lds r24, 0x05BB
3b78: 90 91 bc 05 lds r25, 0x05BC
3b7c: 97 ff sbrs r25, 7
3b7e: 03 c0 rjmp .+6 ; 0x3b86 <SetNeutral+0xe8>
3b80: 90 95 com r25
3b82: 81 95 neg r24
3b84: 9f 4f sbci r25, 0xFF ; 255
3b86: 60 e1 ldi r22, 0x10 ; 16
3b88: 70 e0 ldi r23, 0x00 ; 0
3b8a: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
3b8e: 70 93 e0 01 sts 0x01E0, r23
3b92: 60 93 df 01 sts 0x01DF, r22
3b96: 80 91 b2 05 lds r24, 0x05B2
3b9a: 90 91 b3 05 lds r25, 0x05B3
3b9e: 97 ff sbrs r25, 7
3ba0: 03 c0 rjmp .+6 ; 0x3ba8 <SetNeutral+0x10a>
3ba2: 90 95 com r25
3ba4: 81 95 neg r24
3ba6: 9f 4f sbci r25, 0xFF ; 255
3ba8: 60 e1 ldi r22, 0x10 ; 16
3baa: 70 e0 ldi r23, 0x00 ; 0
3bac: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
3bb0: 70 93 de 01 sts 0x01DE, r23
3bb4: 60 93 dd 01 sts 0x01DD, r22
3bb8: 60 91 29 05 lds r22, 0x0529
3bbc: 70 91 2a 05 lds r23, 0x052A
3bc0: 88 27 eor r24, r24
3bc2: 77 fd sbrc r23, 7
3bc4: 80 95 com r24
3bc6: 98 2f mov r25, r24
3bc8: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
3bcc: 60 93 e1 01 sts 0x01E1, r22
3bd0: 70 93 e2 01 sts 0x01E2, r23
3bd4: 80 93 e3 01 sts 0x01E3, r24
3bd8: 90 93 e4 01 sts 0x01E4, r25
3bdc: 10 92 fb 01 sts 0x01FB, r1
3be0: 10 92 fc 01 sts 0x01FC, r1
3be4: 10 92 fd 01 sts 0x01FD, r1
3be8: 10 92 fe 01 sts 0x01FE, r1
3bec: 10 92 ff 01 sts 0x01FF, r1
3bf0: 10 92 00 02 sts 0x0200, r1
3bf4: 10 92 01 02 sts 0x0201, r1
3bf8: 10 92 02 02 sts 0x0202, r1
3bfc: 10 92 03 02 sts 0x0203, r1
3c00: 10 92 04 02 sts 0x0204, r1
3c04: 10 92 05 02 sts 0x0205, r1
3c08: 10 92 06 02 sts 0x0206, r1
3c0c: 10 92 07 02 sts 0x0207, r1
3c10: 10 92 08 02 sts 0x0208, r1
3c14: 10 92 09 02 sts 0x0209, r1
3c18: 10 92 0a 02 sts 0x020A, r1
3c1c: 10 92 0b 02 sts 0x020B, r1
3c20: 10 92 0c 02 sts 0x020C, r1
3c24: 10 92 0d 02 sts 0x020D, r1
3c28: 10 92 0e 02 sts 0x020E, r1
3c2c: 10 92 aa 05 sts 0x05AA, r1
3c30: 10 92 a9 05 sts 0x05A9, r1
3c34: 10 92 a8 05 sts 0x05A8, r1
3c38: 10 92 a7 05 sts 0x05A7, r1
3c3c: 10 92 b6 05 sts 0x05B6, r1
3c40: 10 92 b5 05 sts 0x05B5, r1
3c44: 80 91 06 01 lds r24, 0x0106
3c48: 90 91 07 01 lds r25, 0x0107
3c4c: a0 91 08 01 lds r26, 0x0108
3c50: b0 91 09 01 lds r27, 0x0109
3c54: 90 93 2c 05 sts 0x052C, r25
3c58: 80 93 2b 05 sts 0x052B, r24
3c5c: 10 92 c5 01 sts 0x01C5, r1
3c60: 10 92 c4 01 sts 0x01C4, r1
3c64: 10 92 13 02 sts 0x0213, r1
3c68: 10 92 14 02 sts 0x0214, r1
3c6c: 10 92 15 02 sts 0x0215, r1
3c70: 10 92 16 02 sts 0x0216, r1
3c74: 80 91 17 02 lds r24, 0x0217
3c78: 90 91 18 02 lds r25, 0x0218
3c7c: 90 93 1a 02 sts 0x021A, r25
3c80: 80 93 19 02 sts 0x0219, r24
3c84: 82 e3 ldi r24, 0x32 ; 50
3c86: 90 e0 ldi r25, 0x00 ; 0
3c88: 90 93 ac 01 sts 0x01AC, r25
3c8c: 80 93 ab 01 sts 0x01AB, r24
3c90: df 91 pop r29
3c92: cf 91 pop r28
3c94: 08 95 ret
 
00003c96 <Piep>:
3c96: 1f 93 push r17
3c98: 18 2f mov r17, r24
3c9a: 0e c0 rjmp .+28 ; 0x3cb8 <Piep+0x22>
3c9c: 80 91 2e 02 lds r24, 0x022E
3ca0: 88 23 and r24, r24
3ca2: 61 f4 brne .+24 ; 0x3cbc <Piep+0x26>
3ca4: 84 e6 ldi r24, 0x64 ; 100
3ca6: 90 e0 ldi r25, 0x00 ; 0
3ca8: 90 93 ac 01 sts 0x01AC, r25
3cac: 80 93 ab 01 sts 0x01AB, r24
3cb0: 8a ef ldi r24, 0xFA ; 250
3cb2: 90 e0 ldi r25, 0x00 ; 0
3cb4: 0e 94 e4 0c call 0x19c8 ; 0x19c8 <Delay_ms>
3cb8: 11 50 subi r17, 0x01 ; 1
3cba: 80 f7 brcc .-32 ; 0x3c9c <Piep+0x6>
3cbc: 1f 91 pop r17
3cbe: 08 95 ret
 
00003cc0 <MotorRegler>:
3cc0: 2f 92 push r2
3cc2: 3f 92 push r3
3cc4: 4f 92 push r4
3cc6: 5f 92 push r5
3cc8: 6f 92 push r6
3cca: 7f 92 push r7
3ccc: 8f 92 push r8
3cce: 9f 92 push r9
3cd0: af 92 push r10
3cd2: bf 92 push r11
3cd4: cf 92 push r12
3cd6: df 92 push r13
3cd8: ef 92 push r14
3cda: ff 92 push r15
3cdc: 0f 93 push r16
3cde: 1f 93 push r17
3ce0: cf 93 push r28
3ce2: df 93 push r29
3ce4: cd b7 in r28, 0x3d ; 61
3ce6: de b7 in r29, 0x3e ; 62
3ce8: 24 97 sbiw r28, 0x04 ; 4
3cea: 0f b6 in r0, 0x3f ; 63
3cec: f8 94 cli
3cee: de bf out 0x3e, r29 ; 62
3cf0: 0f be out 0x3f, r0 ; 63
3cf2: cd bf out 0x3d, r28 ; 61
3cf4: 0e 94 80 15 call 0x2b00 ; 0x2b00 <Mittelwert>
3cf8: 29 9a sbi 0x05, 1 ; 5
3cfa: e0 91 6f 05 lds r30, 0x056F
3cfe: ae 2f mov r26, r30
3d00: bb 27 eor r27, r27
3d02: aa 0f add r26, r26
3d04: bb 1f adc r27, r27
3d06: af 5b subi r26, 0xBF ; 191
3d08: ba 4f sbci r27, 0xFA ; 250
3d0a: 0d 90 ld r0, X+
3d0c: bc 91 ld r27, X
3d0e: a0 2d mov r26, r0
3d10: 9d 01 movw r18, r26
3d12: 28 58 subi r18, 0x88 ; 136
3d14: 3f 4f sbci r19, 0xFF ; 255
3d16: 3a 83 std Y+2, r19 ; 0x02
3d18: 29 83 std Y+1, r18 ; 0x01
3d1a: 37 ff sbrs r19, 7
3d1c: 02 c0 rjmp .+4 ; 0x3d22 <MotorRegler+0x62>
3d1e: 1a 82 std Y+2, r1 ; 0x02
3d20: 19 82 std Y+1, r1 ; 0x01
3d22: 80 91 27 02 lds r24, 0x0227
3d26: 84 36 cpi r24, 0x64 ; 100
3d28: 08 f0 brcs .+2 ; 0x3d2c <MotorRegler+0x6c>
3d2a: 4a c0 rjmp .+148 ; 0x3dc0 <MotorRegler+0x100>
3d2c: 80 91 01 01 lds r24, 0x0101
3d30: 88 23 and r24, r24
3d32: 31 f4 brne .+12 ; 0x3d40 <MotorRegler+0x80>
3d34: 84 ef ldi r24, 0xF4 ; 244
3d36: 91 e0 ldi r25, 0x01 ; 1
3d38: 90 93 ac 01 sts 0x01AC, r25
3d3c: 80 93 ab 01 sts 0x01AB, r24
3d40: 80 91 42 02 lds r24, 0x0242
3d44: 90 91 43 02 lds r25, 0x0243
3d48: 00 97 sbiw r24, 0x00 ; 0
3d4a: 31 f0 breq .+12 ; 0x3d58 <MotorRegler+0x98>
3d4c: 01 97 sbiw r24, 0x01 ; 1
3d4e: 90 93 43 02 sts 0x0243, r25
3d52: 80 93 42 02 sts 0x0242, r24
3d56: 04 c0 rjmp .+8 ; 0x3d60 <MotorRegler+0xa0>
3d58: 10 92 2e 02 sts 0x022E, r1
3d5c: 10 92 1d 02 sts 0x021D, r1
3d60: 28 9a sbi 0x05, 0 ; 5
3d62: 80 91 3d 02 lds r24, 0x023D
3d66: 90 91 3e 02 lds r25, 0x023E
3d6a: 81 5d subi r24, 0xD1 ; 209
3d6c: 97 40 sbci r25, 0x07 ; 7
3d6e: 28 f1 brcs .+74 ; 0x3dba <MotorRegler+0xfa>
3d70: 80 91 86 05 lds r24, 0x0586
3d74: 48 2f mov r20, r24
3d76: 55 27 eor r21, r21
3d78: 5a 83 std Y+2, r21 ; 0x02
3d7a: 49 83 std Y+1, r20 ; 0x01
3d7c: 81 e0 ldi r24, 0x01 ; 1
3d7e: 80 93 1d 02 sts 0x021D, r24
3d82: e0 91 6d 05 lds r30, 0x056D
3d86: ff 27 eor r31, r31
3d88: ee 0f add r30, r30
3d8a: ff 1f adc r31, r31
3d8c: ef 5b subi r30, 0xBF ; 191
3d8e: fa 4f sbci r31, 0xFA ; 250
3d90: 11 82 std Z+1, r1 ; 0x01
3d92: 10 82 st Z, r1
3d94: e0 91 6e 05 lds r30, 0x056E
3d98: ff 27 eor r31, r31
3d9a: ee 0f add r30, r30
3d9c: ff 1f adc r31, r31
3d9e: ef 5b subi r30, 0xBF ; 191
3da0: fa 4f sbci r31, 0xFA ; 250
3da2: 11 82 std Z+1, r1 ; 0x01
3da4: 10 82 st Z, r1
3da6: e0 91 70 05 lds r30, 0x0570
3daa: ff 27 eor r31, r31
3dac: ee 0f add r30, r30
3dae: ff 1f adc r31, r31
3db0: ef 5b subi r30, 0xBF ; 191
3db2: fa 4f sbci r31, 0xFA ; 250
3db4: 11 82 std Z+1, r1 ; 0x01
3db6: 10 82 st Z, r1
3db8: ce c1 rjmp .+924 ; 0x4156 <MotorRegler+0x496>
3dba: 10 92 2e 02 sts 0x022E, r1
3dbe: cb c1 rjmp .+918 ; 0x4156 <MotorRegler+0x496>
3dc0: 80 91 27 02 lds r24, 0x0227
3dc4: 8d 38 cpi r24, 0x8D ; 141
3dc6: 08 f4 brcc .+2 ; 0x3dca <MotorRegler+0x10a>
3dc8: c6 c1 rjmp .+908 ; 0x4156 <MotorRegler+0x496>
3dca: 10 92 1d 02 sts 0x021D, r1
3dce: 80 91 87 05 lds r24, 0x0587
3dd2: 22 e3 ldi r18, 0x32 ; 50
3dd4: 82 9f mul r24, r18
3dd6: c0 01 movw r24, r0
3dd8: 11 24 eor r1, r1
3dda: 90 93 43 02 sts 0x0243, r25
3dde: 80 93 42 02 sts 0x0242, r24
3de2: 69 81 ldd r22, Y+1 ; 0x01
3de4: 7a 81 ldd r23, Y+2 ; 0x02
3de6: 69 32 cpi r22, 0x29 ; 41
3de8: 71 05 cpc r23, r1
3dea: 6c f0 brlt .+26 ; 0x3e06 <MotorRegler+0x146>
3dec: 80 91 3d 02 lds r24, 0x023D
3df0: 90 91 3e 02 lds r25, 0x023E
3df4: 7f ef ldi r23, 0xFF ; 255
3df6: 8f 3f cpi r24, 0xFF ; 255
3df8: 97 07 cpc r25, r23
3dfa: 81 f1 breq .+96 ; 0x3e5c <MotorRegler+0x19c>
3dfc: 01 96 adiw r24, 0x01 ; 1
3dfe: 90 93 3e 02 sts 0x023E, r25
3e02: 80 93 3d 02 sts 0x023D, r24
3e06: 80 91 3d 02 lds r24, 0x023D
3e0a: 90 91 3e 02 lds r25, 0x023E
3e0e: 88 3c cpi r24, 0xC8 ; 200
3e10: 91 05 cpc r25, r1
3e12: 20 f0 brcs .+8 ; 0x3e1c <MotorRegler+0x15c>
3e14: 89 81 ldd r24, Y+1 ; 0x01
3e16: 9a 81 ldd r25, Y+2 ; 0x02
3e18: 88 97 sbiw r24, 0x28 ; 40
3e1a: 04 f5 brge .+64 ; 0x3e5c <MotorRegler+0x19c>
3e1c: 10 92 58 02 sts 0x0258, r1
3e20: 10 92 59 02 sts 0x0259, r1
3e24: 10 92 5a 02 sts 0x025A, r1
3e28: 10 92 5b 02 sts 0x025B, r1
3e2c: 10 92 54 02 sts 0x0254, r1
3e30: 10 92 55 02 sts 0x0255, r1
3e34: 10 92 56 02 sts 0x0256, r1
3e38: 10 92 57 02 sts 0x0257, r1
3e3c: 10 92 0b 02 sts 0x020B, r1
3e40: 10 92 0c 02 sts 0x020C, r1
3e44: 10 92 0d 02 sts 0x020D, r1
3e48: 10 92 0e 02 sts 0x020E, r1
3e4c: 10 92 0f 02 sts 0x020F, r1
3e50: 10 92 10 02 sts 0x0210, r1
3e54: 10 92 11 02 sts 0x0211, r1
3e58: 10 92 12 02 sts 0x0212, r1
3e5c: e9 81 ldd r30, Y+1 ; 0x01
3e5e: fa 81 ldd r31, Y+2 ; 0x02
3e60: e9 3c cpi r30, 0xC9 ; 201
3e62: f1 05 cpc r31, r1
3e64: 0c f4 brge .+2 ; 0x3e68 <MotorRegler+0x1a8>
3e66: d6 c0 rjmp .+428 ; 0x4014 <MotorRegler+0x354>
3e68: 80 91 2e 02 lds r24, 0x022E
3e6c: 88 23 and r24, r24
3e6e: 09 f0 breq .+2 ; 0x3e72 <MotorRegler+0x1b2>
3e70: 72 c1 rjmp .+740 ; 0x4156 <MotorRegler+0x496>
3e72: e0 91 70 05 lds r30, 0x0570
3e76: ff 27 eor r31, r31
3e78: ee 0f add r30, r30
3e7a: ff 1f adc r31, r31
3e7c: ef 5b subi r30, 0xBF ; 191
3e7e: fa 4f sbci r31, 0xFA ; 250
3e80: 80 81 ld r24, Z
3e82: 91 81 ldd r25, Z+1 ; 0x01
3e84: 8c 34 cpi r24, 0x4C ; 76
3e86: 91 05 cpc r25, r1
3e88: 0c f4 brge .+2 ; 0x3e8c <MotorRegler+0x1cc>
3e8a: c1 c0 rjmp .+386 ; 0x400e <MotorRegler+0x34e>
3e8c: 80 91 41 02 lds r24, 0x0241
3e90: 8f 5f subi r24, 0xFF ; 255
3e92: 80 93 41 02 sts 0x0241, r24
3e96: 89 3c cpi r24, 0xC9 ; 201
3e98: 08 f4 brcc .+2 ; 0x3e9c <MotorRegler+0x1dc>
3e9a: 5d c1 rjmp .+698 ; 0x4156 <MotorRegler+0x496>
3e9c: 29 98 cbi 0x05, 1 ; 5
3e9e: 0e 94 4f 1d call 0x3a9e ; 0x3a9e <SetNeutral>
3ea2: 10 92 2e 02 sts 0x022E, r1
3ea6: 10 92 41 02 sts 0x0241, r1
3eaa: 10 92 3e 02 sts 0x023E, r1
3eae: 10 92 3d 02 sts 0x023D, r1
3eb2: 80 91 6d 05 lds r24, 0x056D
3eb6: 28 2f mov r18, r24
3eb8: 33 27 eor r19, r19
3eba: f9 01 movw r30, r18
3ebc: ee 0f add r30, r30
3ebe: ff 1f adc r31, r31
3ec0: ef 5b subi r30, 0xBF ; 191
3ec2: fa 4f sbci r31, 0xFA ; 250
3ec4: 80 81 ld r24, Z
3ec6: 91 81 ldd r25, Z+1 ; 0x01
3ec8: 87 34 cpi r24, 0x47 ; 71
3eca: 91 05 cpc r25, r1
3ecc: 9c f4 brge .+38 ; 0x3ef4 <MotorRegler+0x234>
3ece: e0 91 6e 05 lds r30, 0x056E
3ed2: ff 27 eor r31, r31
3ed4: ee 0f add r30, r30
3ed6: ff 1f adc r31, r31
3ed8: ef 5b subi r30, 0xBF ; 191
3eda: fa 4f sbci r31, 0xFA ; 250
3edc: 01 90 ld r0, Z+
3ede: f0 81 ld r31, Z
3ee0: e0 2d mov r30, r0
3ee2: f7 ff sbrs r31, 7
3ee4: 03 c0 rjmp .+6 ; 0x3eec <MotorRegler+0x22c>
3ee6: f0 95 com r31
3ee8: e1 95 neg r30
3eea: ff 4f sbci r31, 0xFF ; 255
3eec: e7 34 cpi r30, 0x47 ; 71
3eee: f1 05 cpc r31, r1
3ef0: 0c f4 brge .+2 ; 0x3ef4 <MotorRegler+0x234>
3ef2: 6c c0 rjmp .+216 ; 0x3fcc <MotorRegler+0x30c>
3ef4: 80 91 6e 05 lds r24, 0x056E
3ef8: 68 2f mov r22, r24
3efa: 77 27 eor r23, r23
3efc: db 01 movw r26, r22
3efe: aa 0f add r26, r26
3f00: bb 1f adc r27, r27
3f02: af 5b subi r26, 0xBF ; 191
3f04: ba 4f sbci r27, 0xFA ; 250
3f06: 8d 91 ld r24, X+
3f08: 9c 91 ld r25, X
3f0a: 11 97 sbiw r26, 0x01 ; 1
3f0c: 87 34 cpi r24, 0x47 ; 71
3f0e: 91 05 cpc r25, r1
3f10: 3c f0 brlt .+14 ; 0x3f20 <MotorRegler+0x260>
3f12: f9 01 movw r30, r18
3f14: ee 0f add r30, r30
3f16: ff 1f adc r31, r31
3f18: ef 5b subi r30, 0xBF ; 191
3f1a: fa 4f sbci r31, 0xFA ; 250
3f1c: 80 81 ld r24, Z
3f1e: 91 81 ldd r25, Z+1 ; 0x01
3f20: 8d 91 ld r24, X+
3f22: 9c 91 ld r25, X
3f24: 87 34 cpi r24, 0x47 ; 71
3f26: 91 05 cpc r25, r1
3f28: 64 f0 brlt .+24 ; 0x3f42 <MotorRegler+0x282>
3f2a: f9 01 movw r30, r18
3f2c: ee 0f add r30, r30
3f2e: ff 1f adc r31, r31
3f30: ef 5b subi r30, 0xBF ; 191
3f32: fa 4f sbci r31, 0xFA ; 250
3f34: 80 81 ld r24, Z
3f36: 91 81 ldd r25, Z+1 ; 0x01
3f38: 87 34 cpi r24, 0x47 ; 71
3f3a: 91 05 cpc r25, r1
3f3c: 14 f0 brlt .+4 ; 0x3f42 <MotorRegler+0x282>
3f3e: 42 e0 ldi r20, 0x02 ; 2
3f40: 01 c0 rjmp .+2 ; 0x3f44 <MotorRegler+0x284>
3f42: 41 e0 ldi r20, 0x01 ; 1
3f44: fb 01 movw r30, r22
3f46: ee 0f add r30, r30
3f48: ff 1f adc r31, r31
3f4a: ef 5b subi r30, 0xBF ; 191
3f4c: fa 4f sbci r31, 0xFA ; 250
3f4e: 80 81 ld r24, Z
3f50: 91 81 ldd r25, Z+1 ; 0x01
3f52: 86 34 cpi r24, 0x46 ; 70
3f54: 91 05 cpc r25, r1
3f56: 5c f4 brge .+22 ; 0x3f6e <MotorRegler+0x2ae>
3f58: f9 01 movw r30, r18
3f5a: ee 0f add r30, r30
3f5c: ff 1f adc r31, r31
3f5e: ef 5b subi r30, 0xBF ; 191
3f60: fa 4f sbci r31, 0xFA ; 250
3f62: 80 81 ld r24, Z
3f64: 91 81 ldd r25, Z+1 ; 0x01
3f66: 87 34 cpi r24, 0x47 ; 71
3f68: 91 05 cpc r25, r1
3f6a: 0c f0 brlt .+2 ; 0x3f6e <MotorRegler+0x2ae>
3f6c: 43 e0 ldi r20, 0x03 ; 3
3f6e: fb 01 movw r30, r22
3f70: ee 0f add r30, r30
3f72: ff 1f adc r31, r31
3f74: ef 5b subi r30, 0xBF ; 191
3f76: fa 4f sbci r31, 0xFA ; 250
3f78: 80 81 ld r24, Z
3f7a: 91 81 ldd r25, Z+1 ; 0x01
3f7c: 8a 5b subi r24, 0xBA ; 186
3f7e: 9f 4f sbci r25, 0xFF ; 255
3f80: 5c f4 brge .+22 ; 0x3f98 <MotorRegler+0x2d8>
3f82: f9 01 movw r30, r18
3f84: ee 0f add r30, r30
3f86: ff 1f adc r31, r31
3f88: ef 5b subi r30, 0xBF ; 191
3f8a: fa 4f sbci r31, 0xFA ; 250
3f8c: 80 81 ld r24, Z
3f8e: 91 81 ldd r25, Z+1 ; 0x01
3f90: 87 34 cpi r24, 0x47 ; 71
3f92: 91 05 cpc r25, r1
3f94: 0c f0 brlt .+2 ; 0x3f98 <MotorRegler+0x2d8>
3f96: 44 e0 ldi r20, 0x04 ; 4
3f98: 66 0f add r22, r22
3f9a: 77 1f adc r23, r23
3f9c: 6f 5b subi r22, 0xBF ; 191
3f9e: 7a 4f sbci r23, 0xFA ; 250
3fa0: fb 01 movw r30, r22
3fa2: 80 81 ld r24, Z
3fa4: 91 81 ldd r25, Z+1 ; 0x01
3fa6: 8a 5b subi r24, 0xBA ; 186
3fa8: 9f 4f sbci r25, 0xFF ; 255
3faa: 5c f4 brge .+22 ; 0x3fc2 <MotorRegler+0x302>
3fac: 22 0f add r18, r18
3fae: 33 1f adc r19, r19
3fb0: 2f 5b subi r18, 0xBF ; 191
3fb2: 3a 4f sbci r19, 0xFA ; 250
3fb4: f9 01 movw r30, r18
3fb6: 80 81 ld r24, Z
3fb8: 91 81 ldd r25, Z+1 ; 0x01
3fba: 86 34 cpi r24, 0x46 ; 70
3fbc: 91 05 cpc r25, r1
3fbe: 0c f4 brge .+2 ; 0x3fc2 <MotorRegler+0x302>
3fc0: 45 e0 ldi r20, 0x05 ; 5
3fc2: a2 e0 ldi r26, 0x02 ; 2
3fc4: b0 e0 ldi r27, 0x00 ; 0
3fc6: 04 2e mov r0, r20
3fc8: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eeprom_write_byte_1F2021>
3fcc: 0e 94 f8 01 call 0x3f0 ; 0x3f0 <GetActiveParamSetNumber>
3fd0: 4a e3 ldi r20, 0x3A ; 58
3fd2: 6d e6 ldi r22, 0x6D ; 109
3fd4: 75 e0 ldi r23, 0x05 ; 5
3fd6: 0e 94 17 02 call 0x42e ; 0x42e <ReadParameterSet>
3fda: 0e 94 f8 01 call 0x3f0 ; 0x3f0 <GetActiveParamSetNumber>
3fde: 0e 94 4b 1e call 0x3c96 ; 0x3c96 <Piep>
3fe2: 80 91 75 05 lds r24, 0x0575
3fe6: 80 ff sbrs r24, 0
3fe8: b6 c0 rjmp .+364 ; 0x4156 <MotorRegler+0x496>
3fea: 80 91 0a 01 lds r24, 0x010A
3fee: 90 91 0b 01 lds r25, 0x010B
3ff2: 87 5b subi r24, 0xB7 ; 183
3ff4: 93 40 sbci r25, 0x03 ; 3
3ff6: 40 f4 brcc .+16 ; 0x4008 <MotorRegler+0x348>
3ff8: 80 91 0a 01 lds r24, 0x010A
3ffc: 90 91 0b 01 lds r25, 0x010B
4000: 8e 5e subi r24, 0xEE ; 238
4002: 92 40 sbci r25, 0x02 ; 2
4004: 08 f0 brcs .+2 ; 0x4008 <MotorRegler+0x348>
4006: a7 c0 rjmp .+334 ; 0x4156 <MotorRegler+0x496>
4008: 0e 94 20 10 call 0x2040 ; 0x2040 <SucheLuftruckOffset>
400c: a4 c0 rjmp .+328 ; 0x4156 <MotorRegler+0x496>
400e: 10 92 41 02 sts 0x0241, r1
4012: a1 c0 rjmp .+322 ; 0x4156 <MotorRegler+0x496>
4014: 49 81 ldd r20, Y+1 ; 0x01
4016: 5a 81 ldd r21, Y+2 ; 0x02
4018: 43 32 cpi r20, 0x23 ; 35
401a: 51 05 cpc r21, r1
401c: 0c f0 brlt .+2 ; 0x4020 <MotorRegler+0x360>
401e: 9b c0 rjmp .+310 ; 0x4156 <MotorRegler+0x496>
4020: 80 91 70 05 lds r24, 0x0570
4024: 48 2f mov r20, r24
4026: 55 27 eor r21, r21
4028: fa 01 movw r30, r20
402a: ee 0f add r30, r30
402c: ff 1f adc r31, r31
402e: ef 5b subi r30, 0xBF ; 191
4030: fa 4f sbci r31, 0xFA ; 250
4032: 80 81 ld r24, Z
4034: 91 81 ldd r25, Z+1 ; 0x01
4036: 85 5b subi r24, 0xB5 ; 181
4038: 9f 4f sbci r25, 0xFF ; 255
403a: 0c f0 brlt .+2 ; 0x403e <MotorRegler+0x37e>
403c: 6d c0 rjmp .+218 ; 0x4118 <MotorRegler+0x458>
403e: 80 91 40 02 lds r24, 0x0240
4042: 8f 5f subi r24, 0xFF ; 255
4044: 80 93 40 02 sts 0x0240, r24
4048: 89 3c cpi r24, 0xC9 ; 201
404a: 08 f4 brcc .+2 ; 0x404e <MotorRegler+0x38e>
404c: 67 c0 rjmp .+206 ; 0x411c <MotorRegler+0x45c>
404e: 88 ec ldi r24, 0xC8 ; 200
4050: 80 93 40 02 sts 0x0240, r24
4054: 81 e0 ldi r24, 0x01 ; 1
4056: 90 e0 ldi r25, 0x00 ; 0
4058: 90 93 3e 02 sts 0x023E, r25
405c: 80 93 3d 02 sts 0x023D, r24
4060: 81 e0 ldi r24, 0x01 ; 1
4062: 80 93 2e 02 sts 0x022E, r24
4066: 10 92 50 02 sts 0x0250, r1
406a: 10 92 51 02 sts 0x0251, r1
406e: 10 92 52 02 sts 0x0252, r1
4072: 10 92 53 02 sts 0x0253, r1
4076: 10 92 0b 02 sts 0x020B, r1
407a: 10 92 0c 02 sts 0x020C, r1
407e: 10 92 0d 02 sts 0x020D, r1
4082: 10 92 0e 02 sts 0x020E, r1
4086: 10 92 0f 02 sts 0x020F, r1
408a: 10 92 10 02 sts 0x0210, r1
408e: 10 92 11 02 sts 0x0211, r1
4092: 10 92 12 02 sts 0x0212, r1
4096: 10 92 fb 01 sts 0x01FB, r1
409a: 10 92 fc 01 sts 0x01FC, r1
409e: 10 92 fd 01 sts 0x01FD, r1
40a2: 10 92 fe 01 sts 0x01FE, r1
40a6: 10 92 03 02 sts 0x0203, r1
40aa: 10 92 04 02 sts 0x0204, r1
40ae: 10 92 05 02 sts 0x0205, r1
40b2: 10 92 06 02 sts 0x0206, r1
40b6: 80 91 e7 01 lds r24, 0x01E7
40ba: 90 91 e8 01 lds r25, 0x01E8
40be: a0 91 e9 01 lds r26, 0x01E9
40c2: b0 91 ea 01 lds r27, 0x01EA
40c6: 80 93 ff 01 sts 0x01FF, r24
40ca: 90 93 00 02 sts 0x0200, r25
40ce: a0 93 01 02 sts 0x0201, r26
40d2: b0 93 02 02 sts 0x0202, r27
40d6: 80 91 ef 01 lds r24, 0x01EF
40da: 90 91 f0 01 lds r25, 0x01F0
40de: a0 91 f1 01 lds r26, 0x01F1
40e2: b0 91 f2 01 lds r27, 0x01F2
40e6: 80 93 07 02 sts 0x0207, r24
40ea: 90 93 08 02 sts 0x0208, r25
40ee: a0 93 09 02 sts 0x0209, r26
40f2: b0 93 0a 02 sts 0x020A, r27
40f6: 10 92 58 02 sts 0x0258, r1
40fa: 10 92 59 02 sts 0x0259, r1
40fe: 10 92 5a 02 sts 0x025A, r1
4102: 10 92 5b 02 sts 0x025B, r1
4106: 10 92 54 02 sts 0x0254, r1
410a: 10 92 55 02 sts 0x0255, r1
410e: 10 92 56 02 sts 0x0256, r1
4112: 10 92 57 02 sts 0x0257, r1
4116: 02 c0 rjmp .+4 ; 0x411c <MotorRegler+0x45c>
4118: 10 92 40 02 sts 0x0240, r1
411c: 44 0f add r20, r20
411e: 55 1f adc r21, r21
4120: 4f 5b subi r20, 0xBF ; 191
4122: 5a 4f sbci r21, 0xFA ; 250
4124: fa 01 movw r30, r20
4126: 80 81 ld r24, Z
4128: 91 81 ldd r25, Z+1 ; 0x01
412a: 8c 34 cpi r24, 0x4C ; 76
412c: 91 05 cpc r25, r1
412e: 8c f0 brlt .+34 ; 0x4152 <MotorRegler+0x492>
4130: 80 91 3f 02 lds r24, 0x023F
4134: 8f 5f subi r24, 0xFF ; 255
4136: 80 93 3f 02 sts 0x023F, r24
413a: 89 3c cpi r24, 0xC9 ; 201
413c: 60 f0 brcs .+24 ; 0x4156 <MotorRegler+0x496>
413e: 10 92 2e 02 sts 0x022E, r1
4142: 88 ec ldi r24, 0xC8 ; 200
4144: 80 93 3f 02 sts 0x023F, r24
4148: 10 92 3e 02 sts 0x023E, r1
414c: 10 92 3d 02 sts 0x023D, r1
4150: 02 c0 rjmp .+4 ; 0x4156 <MotorRegler+0x496>
4152: 10 92 3f 02 sts 0x023F, r1
4156: 80 91 67 01 lds r24, 0x0167
415a: 81 50 subi r24, 0x01 ; 1
415c: 80 93 67 01 sts 0x0167, r24
4160: 80 91 67 01 lds r24, 0x0167
4164: 8f 3f cpi r24, 0xFF ; 255
4166: 29 f0 breq .+10 ; 0x4172 <MotorRegler+0x4b2>
4168: 80 91 1d 02 lds r24, 0x021D
416c: 88 23 and r24, r24
416e: 09 f4 brne .+2 ; 0x4172 <MotorRegler+0x4b2>
4170: 12 c1 rjmp .+548 ; 0x4396 <MotorRegler+0x6d6>
4172: 0e 94 dd 19 call 0x33ba ; 0x33ba <ParameterZuordnung>
4176: e0 91 6d 05 lds r30, 0x056D
417a: ff 27 eor r31, r31
417c: ee 0f add r30, r30
417e: ff 1f adc r31, r31
4180: df 01 movw r26, r30
4182: af 5b subi r26, 0xBF ; 191
4184: ba 4f sbci r27, 0xFA ; 250
4186: 8d 91 ld r24, X+
4188: 9c 91 ld r25, X
418a: 60 91 7c 05 lds r22, 0x057C
418e: 77 27 eor r23, r23
4190: e9 5a subi r30, 0xA9 ; 169
4192: fa 4f sbci r31, 0xFA ; 250
4194: 20 81 ld r18, Z
4196: 31 81 ldd r19, Z+1 ; 0x01
4198: 40 91 7d 05 lds r20, 0x057D
419c: 55 27 eor r21, r21
419e: fc 01 movw r30, r24
41a0: e6 9f mul r30, r22
41a2: c0 01 movw r24, r0
41a4: e7 9f mul r30, r23
41a6: 90 0d add r25, r0
41a8: f6 9f mul r31, r22
41aa: 90 0d add r25, r0
41ac: 11 24 eor r1, r1
41ae: f9 01 movw r30, r18
41b0: e4 9f mul r30, r20
41b2: 90 01 movw r18, r0
41b4: e5 9f mul r30, r21
41b6: 30 0d add r19, r0
41b8: f4 9f mul r31, r20
41ba: 30 0d add r19, r0
41bc: 11 24 eor r1, r1
41be: 82 0f add r24, r18
41c0: 93 1f adc r25, r19
41c2: 90 93 29 02 sts 0x0229, r25
41c6: 80 93 28 02 sts 0x0228, r24
41ca: e0 91 6e 05 lds r30, 0x056E
41ce: ff 27 eor r31, r31
41d0: ee 0f add r30, r30
41d2: ff 1f adc r31, r31
41d4: df 01 movw r26, r30
41d6: af 5b subi r26, 0xBF ; 191
41d8: ba 4f sbci r27, 0xFA ; 250
41da: 8d 91 ld r24, X+
41dc: 9c 91 ld r25, X
41de: e9 5a subi r30, 0xA9 ; 169
41e0: fa 4f sbci r31, 0xFA ; 250
41e2: 20 81 ld r18, Z
41e4: 31 81 ldd r19, Z+1 ; 0x01
41e6: fc 01 movw r30, r24
41e8: e6 9f mul r30, r22
41ea: c0 01 movw r24, r0
41ec: e7 9f mul r30, r23
41ee: 90 0d add r25, r0
41f0: f6 9f mul r31, r22
41f2: 90 0d add r25, r0
41f4: 11 24 eor r1, r1
41f6: b9 01 movw r22, r18
41f8: 64 9f mul r22, r20
41fa: 90 01 movw r18, r0
41fc: 65 9f mul r22, r21
41fe: 30 0d add r19, r0
4200: 74 9f mul r23, r20
4202: 30 0d add r19, r0
4204: 11 24 eor r1, r1
4206: 82 0f add r24, r18
4208: 93 1f adc r25, r19
420a: 90 93 2b 02 sts 0x022B, r25
420e: 80 93 2a 02 sts 0x022A, r24
4212: e0 91 70 05 lds r30, 0x0570
4216: ff 27 eor r31, r31
4218: ee 0f add r30, r30
421a: ff 1f adc r31, r31
421c: ef 5b subi r30, 0xBF ; 191
421e: fa 4f sbci r31, 0xFA ; 250
4220: 80 81 ld r24, Z
4222: 91 81 ldd r25, Z+1 ; 0x01
4224: 90 95 com r25
4226: 81 95 neg r24
4228: 9f 4f sbci r25, 0xFF ; 255
422a: 90 93 2d 02 sts 0x022D, r25
422e: 80 93 2c 02 sts 0x022C, r24
4232: 10 91 85 01 lds r17, 0x0185
4236: 61 2f mov r22, r17
4238: 77 27 eor r23, r23
423a: 67 fd sbrc r22, 7
423c: 70 95 com r23
423e: 87 2f mov r24, r23
4240: 97 2f mov r25, r23
4242: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4246: 17 ff sbrs r17, 7
4248: 06 c0 rjmp .+12 ; 0x4256 <MotorRegler+0x596>
424a: 20 e0 ldi r18, 0x00 ; 0
424c: 30 e0 ldi r19, 0x00 ; 0
424e: 40 e8 ldi r20, 0x80 ; 128
4250: 53 e4 ldi r21, 0x43 ; 67
4252: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
4256: 20 e0 ldi r18, 0x00 ; 0
4258: 30 e0 ldi r19, 0x00 ; 0
425a: 40 e2 ldi r20, 0x20 ; 32
425c: 51 e4 ldi r21, 0x41 ; 65
425e: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
4262: 20 e0 ldi r18, 0x00 ; 0
4264: 30 e0 ldi r19, 0x00 ; 0
4266: 40 e8 ldi r20, 0x80 ; 128
4268: 5b e3 ldi r21, 0x3B ; 59
426a: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
426e: 5b 01 movw r10, r22
4270: 6c 01 movw r12, r24
4272: 60 93 b7 05 sts 0x05B7, r22
4276: 70 93 b8 05 sts 0x05B8, r23
427a: 80 93 b9 05 sts 0x05B9, r24
427e: 90 93 ba 05 sts 0x05BA, r25
4282: 10 91 86 01 lds r17, 0x0186
4286: 61 2f mov r22, r17
4288: 77 27 eor r23, r23
428a: 67 fd sbrc r22, 7
428c: 70 95 com r23
428e: 87 2f mov r24, r23
4290: 97 2f mov r25, r23
4292: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4296: 17 ff sbrs r17, 7
4298: 06 c0 rjmp .+12 ; 0x42a6 <MotorRegler+0x5e6>
429a: 20 e0 ldi r18, 0x00 ; 0
429c: 30 e0 ldi r19, 0x00 ; 0
429e: 40 e8 ldi r20, 0x80 ; 128
42a0: 53 e4 ldi r21, 0x43 ; 67
42a2: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
42a6: 20 e0 ldi r18, 0x00 ; 0
42a8: 30 ee ldi r19, 0xE0 ; 224
42aa: 4b e2 ldi r20, 0x2B ; 43
42ac: 57 e4 ldi r21, 0x47 ; 71
42ae: 0e 94 21 2b call 0x5642 ; 0x5642 <__divsf3>
42b2: 60 93 ae 05 sts 0x05AE, r22
42b6: 70 93 af 05 sts 0x05AF, r23
42ba: 80 93 b0 05 sts 0x05B0, r24
42be: 90 93 b1 05 sts 0x05B1, r25
42c2: 80 91 75 05 lds r24, 0x0575
42c6: 82 ff sbrs r24, 2
42c8: 0c c0 rjmp .+24 ; 0x42e2 <MotorRegler+0x622>
42ca: 80 e0 ldi r24, 0x00 ; 0
42cc: 90 e0 ldi r25, 0x00 ; 0
42ce: a0 e0 ldi r26, 0x00 ; 0
42d0: b0 e0 ldi r27, 0x00 ; 0
42d2: 80 93 ae 05 sts 0x05AE, r24
42d6: 90 93 af 05 sts 0x05AF, r25
42da: a0 93 b0 05 sts 0x05B0, r26
42de: b0 93 b1 05 sts 0x05B1, r27
42e2: 20 e0 ldi r18, 0x00 ; 0
42e4: 30 e0 ldi r19, 0x00 ; 0
42e6: 40 e0 ldi r20, 0x00 ; 0
42e8: 50 e0 ldi r21, 0x00 ; 0
42ea: c6 01 movw r24, r12
42ec: b5 01 movw r22, r10
42ee: 0e 94 8e 2b call 0x571c ; 0x571c <__eqsf2>
42f2: 88 23 and r24, r24
42f4: 64 f4 brge .+24 ; 0x430e <MotorRegler+0x64e>
42f6: 80 e0 ldi r24, 0x00 ; 0
42f8: 90 e0 ldi r25, 0x00 ; 0
42fa: a0 e0 ldi r26, 0x00 ; 0
42fc: b0 e0 ldi r27, 0x00 ; 0
42fe: 80 93 b7 05 sts 0x05B7, r24
4302: 90 93 b8 05 sts 0x05B8, r25
4306: a0 93 b9 05 sts 0x05B9, r26
430a: b0 93 ba 05 sts 0x05BA, r27
430e: 20 e0 ldi r18, 0x00 ; 0
4310: 30 e0 ldi r19, 0x00 ; 0
4312: 40 e0 ldi r20, 0x00 ; 0
4314: 50 e0 ldi r21, 0x00 ; 0
4316: 60 91 ae 05 lds r22, 0x05AE
431a: 70 91 af 05 lds r23, 0x05AF
431e: 80 91 b0 05 lds r24, 0x05B0
4322: 90 91 b1 05 lds r25, 0x05B1
4326: 0e 94 8e 2b call 0x571c ; 0x571c <__eqsf2>
432a: 88 23 and r24, r24
432c: 64 f4 brge .+24 ; 0x4346 <MotorRegler+0x686>
432e: 80 e0 ldi r24, 0x00 ; 0
4330: 90 e0 ldi r25, 0x00 ; 0
4332: a0 e0 ldi r26, 0x00 ; 0
4334: b0 e0 ldi r27, 0x00 ; 0
4336: 80 93 ae 05 sts 0x05AE, r24
433a: 90 93 af 05 sts 0x05AF, r25
433e: a0 93 b0 05 sts 0x05B0, r26
4342: b0 93 b1 05 sts 0x05B1, r27
4346: 80 91 1d 02 lds r24, 0x021D
434a: 88 23 and r24, r24
434c: 21 f1 breq .+72 ; 0x4396 <MotorRegler+0x6d6>
434e: 10 92 2d 02 sts 0x022D, r1
4352: 10 92 2c 02 sts 0x022C, r1
4356: 10 92 29 02 sts 0x0229, r1
435a: 10 92 28 02 sts 0x0228, r1
435e: 10 92 2b 02 sts 0x022B, r1
4362: 10 92 2a 02 sts 0x022A, r1
4366: 8d ec ldi r24, 0xCD ; 205
4368: 9c ec ldi r25, 0xCC ; 204
436a: ac ec ldi r26, 0xCC ; 204
436c: bd e3 ldi r27, 0x3D ; 61
436e: 80 93 b7 05 sts 0x05B7, r24
4372: 90 93 b8 05 sts 0x05B8, r25
4376: a0 93 b9 05 sts 0x05B9, r26
437a: b0 93 ba 05 sts 0x05BA, r27
437e: 8a e0 ldi r24, 0x0A ; 10
4380: 97 ed ldi r25, 0xD7 ; 215
4382: a3 ea ldi r26, 0xA3 ; 163
4384: bb e3 ldi r27, 0x3B ; 59
4386: 80 93 ae 05 sts 0x05AE, r24
438a: 90 93 af 05 sts 0x05AF, r25
438e: a0 93 b0 05 sts 0x05B0, r26
4392: b0 93 b1 05 sts 0x05B1, r27
4396: 80 91 c6 01 lds r24, 0x01C6
439a: 90 91 c7 01 lds r25, 0x01C7
439e: 8d 54 subi r24, 0x4D ; 77
43a0: 91 40 sbci r25, 0x01 ; 1
43a2: 08 f4 brcc .+2 ; 0x43a6 <MotorRegler+0x6e6>
43a4: bc c0 rjmp .+376 ; 0x451e <MotorRegler+0x85e>
43a6: 20 91 eb 01 lds r18, 0x01EB
43aa: 30 91 ec 01 lds r19, 0x01EC
43ae: 40 91 ed 01 lds r20, 0x01ED
43b2: 50 91 ee 01 lds r21, 0x01EE
43b6: 80 91 e7 01 lds r24, 0x01E7
43ba: 90 91 e8 01 lds r25, 0x01E8
43be: a0 91 e9 01 lds r26, 0x01E9
43c2: b0 91 ea 01 lds r27, 0x01EA
43c6: b9 01 movw r22, r18
43c8: 68 1b sub r22, r24
43ca: 79 0b sbc r23, r25
43cc: 70 93 47 02 sts 0x0247, r23
43d0: 60 93 46 02 sts 0x0246, r22
43d4: 20 91 f3 01 lds r18, 0x01F3
43d8: 30 91 f4 01 lds r19, 0x01F4
43dc: 40 91 f5 01 lds r20, 0x01F5
43e0: 50 91 f6 01 lds r21, 0x01F6
43e4: 80 91 ef 01 lds r24, 0x01EF
43e8: 90 91 f0 01 lds r25, 0x01F0
43ec: a0 91 f1 01 lds r26, 0x01F1
43f0: b0 91 f2 01 lds r27, 0x01F2
43f4: 28 1b sub r18, r24
43f6: 39 0b sbc r19, r25
43f8: 30 93 45 02 sts 0x0245, r19
43fc: 20 93 44 02 sts 0x0244, r18
4400: 10 92 c7 01 sts 0x01C7, r1
4404: 10 92 c6 01 sts 0x01C6, r1
4408: 67 3a cpi r22, 0xA7 ; 167
440a: 71 05 cpc r23, r1
440c: 34 f0 brlt .+12 ; 0x441a <MotorRegler+0x75a>
440e: 80 91 d7 01 lds r24, 0x01D7
4412: 90 91 d8 01 lds r25, 0x01D8
4416: 01 96 adiw r24, 0x01 ; 1
4418: 08 c0 rjmp .+16 ; 0x442a <MotorRegler+0x76a>
441a: 6a 55 subi r22, 0x5A ; 90
441c: 7f 4f sbci r23, 0xFF ; 255
441e: 4c f4 brge .+18 ; 0x4432 <MotorRegler+0x772>
4420: 80 91 d7 01 lds r24, 0x01D7
4424: 90 91 d8 01 lds r25, 0x01D8
4428: 01 97 sbiw r24, 0x01 ; 1
442a: 90 93 d8 01 sts 0x01D8, r25
442e: 80 93 d7 01 sts 0x01D7, r24
4432: 27 3a cpi r18, 0xA7 ; 167
4434: 31 05 cpc r19, r1
4436: 34 f0 brlt .+12 ; 0x4444 <MotorRegler+0x784>
4438: 80 91 d9 01 lds r24, 0x01D9
443c: 90 91 da 01 lds r25, 0x01DA
4440: 01 96 adiw r24, 0x01 ; 1
4442: 08 c0 rjmp .+16 ; 0x4454 <MotorRegler+0x794>
4444: 2a 55 subi r18, 0x5A ; 90
4446: 3f 4f sbci r19, 0xFF ; 255
4448: 4c f4 brge .+18 ; 0x445c <MotorRegler+0x79c>
444a: 80 91 d9 01 lds r24, 0x01D9
444e: 90 91 da 01 lds r25, 0x01DA
4452: 01 97 sbiw r24, 0x01 ; 1
4454: 90 93 da 01 sts 0x01DA, r25
4458: 80 93 d9 01 sts 0x01D9, r24
445c: 80 91 0f 02 lds r24, 0x020F
4460: 90 91 10 02 lds r25, 0x0210
4464: a0 91 11 02 lds r26, 0x0211
4468: b0 91 12 02 lds r27, 0x0212
446c: 87 3a cpi r24, 0xA7 ; 167
446e: 91 05 cpc r25, r1
4470: a1 05 cpc r26, r1
4472: b1 05 cpc r27, r1
4474: 4c f0 brlt .+18 ; 0x4488 <MotorRegler+0x7c8>
4476: 80 91 db 01 lds r24, 0x01DB
447a: 90 91 dc 01 lds r25, 0x01DC
447e: 01 97 sbiw r24, 0x01 ; 1
4480: 90 93 dc 01 sts 0x01DC, r25
4484: 80 93 db 01 sts 0x01DB, r24
4488: 80 91 0f 02 lds r24, 0x020F
448c: 90 91 10 02 lds r25, 0x0210
4490: a0 91 11 02 lds r26, 0x0211
4494: b0 91 12 02 lds r27, 0x0212
4498: 8a 55 subi r24, 0x5A ; 90
449a: 9f 4f sbci r25, 0xFF ; 255
449c: af 4f sbci r26, 0xFF ; 255
449e: bf 4f sbci r27, 0xFF ; 255
44a0: 4c f4 brge .+18 ; 0x44b4 <MotorRegler+0x7f4>
44a2: 80 91 db 01 lds r24, 0x01DB
44a6: 90 91 dc 01 lds r25, 0x01DC
44aa: 01 96 adiw r24, 0x01 ; 1
44ac: 90 93 dc 01 sts 0x01DC, r25
44b0: 80 93 db 01 sts 0x01DB, r24
44b4: 10 92 7a 00 sts 0x007A, r1
44b8: 80 91 e7 01 lds r24, 0x01E7
44bc: 90 91 e8 01 lds r25, 0x01E8
44c0: a0 91 e9 01 lds r26, 0x01E9
44c4: b0 91 ea 01 lds r27, 0x01EA
44c8: 80 93 ff 01 sts 0x01FF, r24
44cc: 90 93 00 02 sts 0x0200, r25
44d0: a0 93 01 02 sts 0x0201, r26
44d4: b0 93 02 02 sts 0x0202, r27
44d8: 80 91 ef 01 lds r24, 0x01EF
44dc: 90 91 f0 01 lds r25, 0x01F0
44e0: a0 91 f1 01 lds r26, 0x01F1
44e4: b0 91 f2 01 lds r27, 0x01F2
44e8: 80 93 07 02 sts 0x0207, r24
44ec: 90 93 08 02 sts 0x0208, r25
44f0: a0 93 09 02 sts 0x0209, r26
44f4: b0 93 0a 02 sts 0x020A, r27
44f8: 80 91 f7 01 lds r24, 0x01F7
44fc: 90 91 f8 01 lds r25, 0x01F8
4500: a0 91 f9 01 lds r26, 0x01F9
4504: b0 91 fa 01 lds r27, 0x01FA
4508: 80 93 0f 02 sts 0x020F, r24
450c: 90 93 10 02 sts 0x0210, r25
4510: a0 93 11 02 sts 0x0211, r26
4514: b0 93 12 02 sts 0x0212, r27
4518: 8f ee ldi r24, 0xEF ; 239
451a: 80 93 7a 00 sts 0x007A, r24
451e: 60 91 e7 01 lds r22, 0x01E7
4522: 70 91 e8 01 lds r23, 0x01E8
4526: 80 91 e9 01 lds r24, 0x01E9
452a: 90 91 ea 01 lds r25, 0x01EA
452e: a0 90 81 05 lds r10, 0x0581
4532: bb 24 eor r11, r11
4534: cc 24 eor r12, r12
4536: dd 24 eor r13, r13
4538: e0 90 b2 05 lds r14, 0x05B2
453c: f0 90 b3 05 lds r15, 0x05B3
4540: a6 01 movw r20, r12
4542: 95 01 movw r18, r10
4544: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4548: 00 27 eor r16, r16
454a: f7 fc sbrc r15, 7
454c: 00 95 com r16
454e: 10 2f mov r17, r16
4550: 2e 19 sub r18, r14
4552: 3f 09 sbc r19, r15
4554: 40 0b sbc r20, r16
4556: 51 0b sbc r21, r17
4558: ca 01 movw r24, r20
455a: b9 01 movw r22, r18
455c: 20 e1 ldi r18, 0x10 ; 16
455e: 30 e0 ldi r19, 0x00 ; 0
4560: 40 e0 ldi r20, 0x00 ; 0
4562: 50 e0 ldi r21, 0x00 ; 0
4564: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4568: 39 01 movw r6, r18
456a: 4a 01 movw r8, r20
456c: 20 93 4c 02 sts 0x024C, r18
4570: 30 93 4d 02 sts 0x024D, r19
4574: 40 93 4e 02 sts 0x024E, r20
4578: 50 93 4f 02 sts 0x024F, r21
457c: 60 91 ef 01 lds r22, 0x01EF
4580: 70 91 f0 01 lds r23, 0x01F0
4584: 80 91 f1 01 lds r24, 0x01F1
4588: 90 91 f2 01 lds r25, 0x01F2
458c: e0 90 bb 05 lds r14, 0x05BB
4590: f0 90 bc 05 lds r15, 0x05BC
4594: a6 01 movw r20, r12
4596: 95 01 movw r18, r10
4598: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
459c: 00 27 eor r16, r16
459e: f7 fc sbrc r15, 7
45a0: 00 95 com r16
45a2: 10 2f mov r17, r16
45a4: 2e 19 sub r18, r14
45a6: 3f 09 sbc r19, r15
45a8: 40 0b sbc r20, r16
45aa: 51 0b sbc r21, r17
45ac: ca 01 movw r24, r20
45ae: b9 01 movw r22, r18
45b0: 20 e1 ldi r18, 0x10 ; 16
45b2: 30 e0 ldi r19, 0x00 ; 0
45b4: 40 e0 ldi r20, 0x00 ; 0
45b6: 50 e0 ldi r21, 0x00 ; 0
45b8: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
45bc: 20 93 48 02 sts 0x0248, r18
45c0: 30 93 49 02 sts 0x0249, r19
45c4: 40 93 4a 02 sts 0x024A, r20
45c8: 50 93 4b 02 sts 0x024B, r21
45cc: f5 ef ldi r31, 0xF5 ; 245
45ce: 6f 16 cp r6, r31
45d0: f1 e0 ldi r31, 0x01 ; 1
45d2: 7f 06 cpc r7, r31
45d4: f0 e0 ldi r31, 0x00 ; 0
45d6: 8f 06 cpc r8, r31
45d8: f0 e0 ldi r31, 0x00 ; 0
45da: 9f 06 cpc r9, r31
45dc: 2c f0 brlt .+10 ; 0x45e8 <MotorRegler+0x928>
45de: 84 ef ldi r24, 0xF4 ; 244
45e0: 91 e0 ldi r25, 0x01 ; 1
45e2: a0 e0 ldi r26, 0x00 ; 0
45e4: b0 e0 ldi r27, 0x00 ; 0
45e6: 0d c0 rjmp .+26 ; 0x4602 <MotorRegler+0x942>
45e8: 6c e0 ldi r22, 0x0C ; 12
45ea: 66 16 cp r6, r22
45ec: 6e ef ldi r22, 0xFE ; 254
45ee: 76 06 cpc r7, r22
45f0: 6f ef ldi r22, 0xFF ; 255
45f2: 86 06 cpc r8, r22
45f4: 6f ef ldi r22, 0xFF ; 255
45f6: 96 06 cpc r9, r22
45f8: 64 f4 brge .+24 ; 0x4612 <MotorRegler+0x952>
45fa: 8c e0 ldi r24, 0x0C ; 12
45fc: 9e ef ldi r25, 0xFE ; 254
45fe: af ef ldi r26, 0xFF ; 255
4600: bf ef ldi r27, 0xFF ; 255
4602: 80 93 4c 02 sts 0x024C, r24
4606: 90 93 4d 02 sts 0x024D, r25
460a: a0 93 4e 02 sts 0x024E, r26
460e: b0 93 4f 02 sts 0x024F, r27
4612: 25 3f cpi r18, 0xF5 ; 245
4614: 71 e0 ldi r23, 0x01 ; 1
4616: 37 07 cpc r19, r23
4618: 70 e0 ldi r23, 0x00 ; 0
461a: 47 07 cpc r20, r23
461c: 70 e0 ldi r23, 0x00 ; 0
461e: 57 07 cpc r21, r23
4620: 2c f0 brlt .+10 ; 0x462c <MotorRegler+0x96c>
4622: 84 ef ldi r24, 0xF4 ; 244
4624: 91 e0 ldi r25, 0x01 ; 1
4626: a0 e0 ldi r26, 0x00 ; 0
4628: b0 e0 ldi r27, 0x00 ; 0
462a: 09 c0 rjmp .+18 ; 0x463e <MotorRegler+0x97e>
462c: 2c 50 subi r18, 0x0C ; 12
462e: 3e 4f sbci r19, 0xFE ; 254
4630: 4f 4f sbci r20, 0xFF ; 255
4632: 5f 4f sbci r21, 0xFF ; 255
4634: 64 f4 brge .+24 ; 0x464e <MotorRegler+0x98e>
4636: 8c e0 ldi r24, 0x0C ; 12
4638: 9e ef ldi r25, 0xFE ; 254
463a: af ef ldi r26, 0xFF ; 255
463c: bf ef ldi r27, 0xFF ; 255
463e: 80 93 48 02 sts 0x0248, r24
4642: 90 93 49 02 sts 0x0249, r25
4646: a0 93 4a 02 sts 0x024A, r26
464a: b0 93 4b 02 sts 0x024B, r27
464e: 10 92 7a 00 sts 0x007A, r1
4652: 80 91 fb 01 lds r24, 0x01FB
4656: 90 91 fc 01 lds r25, 0x01FC
465a: a0 91 fd 01 lds r26, 0x01FD
465e: b0 91 fe 01 lds r27, 0x01FE
4662: 20 91 4c 02 lds r18, 0x024C
4666: 30 91 4d 02 lds r19, 0x024D
466a: 40 91 4e 02 lds r20, 0x024E
466e: 50 91 4f 02 lds r21, 0x024F
4672: 82 1b sub r24, r18
4674: 93 0b sbc r25, r19
4676: a4 0b sbc r26, r20
4678: b5 0b sbc r27, r21
467a: 80 93 fb 01 sts 0x01FB, r24
467e: 90 93 fc 01 sts 0x01FC, r25
4682: a0 93 fd 01 sts 0x01FD, r26
4686: b0 93 fe 01 sts 0x01FE, r27
468a: 80 91 03 02 lds r24, 0x0203
468e: 90 91 04 02 lds r25, 0x0204
4692: a0 91 05 02 lds r26, 0x0205
4696: b0 91 06 02 lds r27, 0x0206
469a: 20 91 48 02 lds r18, 0x0248
469e: 30 91 49 02 lds r19, 0x0249
46a2: 40 91 4a 02 lds r20, 0x024A
46a6: 50 91 4b 02 lds r21, 0x024B
46aa: 82 1b sub r24, r18
46ac: 93 0b sbc r25, r19
46ae: a4 0b sbc r26, r20
46b0: b5 0b sbc r27, r21
46b2: 80 93 03 02 sts 0x0203, r24
46b6: 90 93 04 02 sts 0x0204, r25
46ba: a0 93 05 02 sts 0x0205, r26
46be: b0 93 06 02 sts 0x0206, r27
46c2: 80 91 2c 02 lds r24, 0x022C
46c6: 90 91 2d 02 lds r25, 0x022D
46ca: 5c 01 movw r10, r24
46cc: cc 24 eor r12, r12
46ce: b7 fc sbrc r11, 7
46d0: c0 94 com r12
46d2: dc 2c mov r13, r12
46d4: a0 92 50 02 sts 0x0250, r10
46d8: b0 92 51 02 sts 0x0251, r11
46dc: c0 92 52 02 sts 0x0252, r12
46e0: d0 92 53 02 sts 0x0253, r13
46e4: 97 ff sbrs r25, 7
46e6: 03 c0 rjmp .+6 ; 0x46ee <MotorRegler+0xa2e>
46e8: 90 95 com r25
46ea: 81 95 neg r24
46ec: 9f 4f sbci r25, 0xFF ; 255
46ee: 84 97 sbiw r24, 0x24 ; 36
46f0: 3c f0 brlt .+14 ; 0x4700 <MotorRegler+0xa40>
46f2: 80 91 75 05 lds r24, 0x0575
46f6: 84 fd sbrc r24, 4
46f8: 03 c0 rjmp .+6 ; 0x4700 <MotorRegler+0xa40>
46fa: 81 e0 ldi r24, 0x01 ; 1
46fc: 80 93 39 02 sts 0x0239, r24
4700: 60 90 0b 02 lds r6, 0x020B
4704: 70 90 0c 02 lds r7, 0x020C
4708: 80 90 0d 02 lds r8, 0x020D
470c: 90 90 0e 02 lds r9, 0x020E
4710: c5 01 movw r24, r10
4712: b7 fe sbrs r11, 7
4714: 03 c0 rjmp .+6 ; 0x471c <MotorRegler+0xa5c>
4716: 90 95 com r25
4718: 81 95 neg r24
471a: 9f 4f sbci r25, 0xFF ; 255
471c: 7c 01 movw r14, r24
471e: 00 27 eor r16, r16
4720: f7 fc sbrc r15, 7
4722: 00 95 com r16
4724: 10 2f mov r17, r16
4726: 20 91 7e 05 lds r18, 0x057E
472a: 33 27 eor r19, r19
472c: 44 27 eor r20, r20
472e: 55 27 eor r21, r21
4730: c6 01 movw r24, r12
4732: b5 01 movw r22, r10
4734: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
4738: 9b 01 movw r18, r22
473a: ac 01 movw r20, r24
473c: c8 01 movw r24, r16
473e: b7 01 movw r22, r14
4740: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
4744: 20 e0 ldi r18, 0x00 ; 0
4746: 31 e0 ldi r19, 0x01 ; 1
4748: 40 e0 ldi r20, 0x00 ; 0
474a: 50 e0 ldi r21, 0x00 ; 0
474c: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4750: 44 27 eor r20, r20
4752: 37 fd sbrc r19, 7
4754: 40 95 com r20
4756: 54 2f mov r21, r20
4758: 62 1a sub r6, r18
475a: 73 0a sbc r7, r19
475c: 84 0a sbc r8, r20
475e: 95 0a sbc r9, r21
4760: 60 92 0b 02 sts 0x020B, r6
4764: 70 92 0c 02 sts 0x020C, r7
4768: 80 92 0d 02 sts 0x020D, r8
476c: 90 92 0e 02 sts 0x020E, r9
4770: 80 91 0b 02 lds r24, 0x020B
4774: 90 91 0c 02 lds r25, 0x020C
4778: a0 91 0d 02 lds r26, 0x020D
477c: b0 91 0e 02 lds r27, 0x020E
4780: 81 53 subi r24, 0x31 ; 49
4782: 95 47 sbci r25, 0x75 ; 117
4784: a0 40 sbci r26, 0x00 ; 0
4786: b0 40 sbci r27, 0x00 ; 0
4788: 64 f0 brlt .+24 ; 0x47a2 <MotorRegler+0xae2>
478a: 80 e3 ldi r24, 0x30 ; 48
478c: 95 e7 ldi r25, 0x75 ; 117
478e: a0 e0 ldi r26, 0x00 ; 0
4790: b0 e0 ldi r27, 0x00 ; 0
4792: 80 93 0b 02 sts 0x020B, r24
4796: 90 93 0c 02 sts 0x020C, r25
479a: a0 93 0d 02 sts 0x020D, r26
479e: b0 93 0e 02 sts 0x020E, r27
47a2: 80 91 0b 02 lds r24, 0x020B
47a6: 90 91 0c 02 lds r25, 0x020C
47aa: a0 91 0d 02 lds r26, 0x020D
47ae: b0 91 0e 02 lds r27, 0x020E
47b2: 80 5d subi r24, 0xD0 ; 208
47b4: 9a 48 sbci r25, 0x8A ; 138
47b6: af 4f sbci r26, 0xFF ; 255
47b8: bf 4f sbci r27, 0xFF ; 255
47ba: 64 f4 brge .+24 ; 0x47d4 <MotorRegler+0xb14>
47bc: 80 ed ldi r24, 0xD0 ; 208
47be: 9a e8 ldi r25, 0x8A ; 138
47c0: af ef ldi r26, 0xFF ; 255
47c2: bf ef ldi r27, 0xFF ; 255
47c4: 80 93 0b 02 sts 0x020B, r24
47c8: 90 93 0c 02 sts 0x020C, r25
47cc: a0 93 0d 02 sts 0x020D, r26
47d0: b0 93 0e 02 sts 0x020E, r27
47d4: 8f ee ldi r24, 0xEF ; 239
47d6: 80 93 7a 00 sts 0x007A, r24
47da: 80 91 17 02 lds r24, 0x0217
47de: 90 91 18 02 lds r25, 0x0218
47e2: 89 2b or r24, r25
47e4: 09 f4 brne .+2 ; 0x47e8 <MotorRegler+0xb28>
47e6: a1 c0 rjmp .+322 ; 0x492a <MotorRegler+0xc6a>
47e8: 80 91 75 05 lds r24, 0x0575
47ec: 83 ff sbrs r24, 3
47ee: 9d c0 rjmp .+314 ; 0x492a <MotorRegler+0xc6a>
47f0: 60 91 e7 01 lds r22, 0x01E7
47f4: 70 91 e8 01 lds r23, 0x01E8
47f8: 80 91 e9 01 lds r24, 0x01E9
47fc: 90 91 ea 01 lds r25, 0x01EA
4800: 20 e0 ldi r18, 0x00 ; 0
4802: 32 e0 ldi r19, 0x02 ; 2
4804: 40 e0 ldi r20, 0x00 ; 0
4806: 50 e0 ldi r21, 0x00 ; 0
4808: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
480c: 89 01 movw r16, r18
480e: 37 ff sbrs r19, 7
4810: 03 c0 rjmp .+6 ; 0x4818 <MotorRegler+0xb58>
4812: 10 95 com r17
4814: 01 95 neg r16
4816: 1f 4f sbci r17, 0xFF ; 255
4818: 60 91 ef 01 lds r22, 0x01EF
481c: 70 91 f0 01 lds r23, 0x01F0
4820: 80 91 f1 01 lds r24, 0x01F1
4824: 90 91 f2 01 lds r25, 0x01F2
4828: 20 e0 ldi r18, 0x00 ; 0
482a: 32 e0 ldi r19, 0x02 ; 2
482c: 40 e0 ldi r20, 0x00 ; 0
482e: 50 e0 ldi r21, 0x00 ; 0
4830: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4834: b9 01 movw r22, r18
4836: 37 ff sbrs r19, 7
4838: 03 c0 rjmp .+6 ; 0x4840 <MotorRegler+0xb80>
483a: 70 95 com r23
483c: 61 95 neg r22
483e: 7f 4f sbci r23, 0xFF ; 255
4840: 60 17 cp r22, r16
4842: 71 07 cpc r23, r17
4844: 0c f4 brge .+2 ; 0x4848 <MotorRegler+0xb88>
4846: b8 01 movw r22, r16
4848: 69 31 cpi r22, 0x19 ; 25
484a: 71 05 cpc r23, r1
484c: a4 f4 brge .+40 ; 0x4876 <MotorRegler+0xbb6>
484e: 80 91 39 02 lds r24, 0x0239
4852: 88 23 and r24, r24
4854: 81 f0 breq .+32 ; 0x4876 <MotorRegler+0xbb6>
4856: 80 91 37 02 lds r24, 0x0237
485a: 90 91 38 02 lds r25, 0x0238
485e: 89 2b or r24, r25
4860: 51 f4 brne .+20 ; 0x4876 <MotorRegler+0xbb6>
4862: 80 91 17 02 lds r24, 0x0217
4866: 90 91 18 02 lds r25, 0x0218
486a: 90 93 1a 02 sts 0x021A, r25
486e: 80 93 19 02 sts 0x0219, r24
4872: 10 92 39 02 sts 0x0239, r1
4876: 20 91 84 01 lds r18, 0x0184
487a: 33 27 eor r19, r19
487c: 62 9f mul r22, r18
487e: c0 01 movw r24, r0
4880: 63 9f mul r22, r19
4882: 90 0d add r25, r0
4884: 72 9f mul r23, r18
4886: 90 0d add r25, r0
4888: 11 24 eor r1, r1
488a: 60 e4 ldi r22, 0x40 ; 64
488c: 70 e0 ldi r23, 0x00 ; 0
488e: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
4892: a9 01 movw r20, r18
4894: 46 1b sub r20, r22
4896: 57 0b sbc r21, r23
4898: 14 16 cp r1, r20
489a: 15 06 cpc r1, r21
489c: 0c f0 brlt .+2 ; 0x48a0 <MotorRegler+0xbe0>
489e: 3f c0 rjmp .+126 ; 0x491e <MotorRegler+0xc5e>
48a0: 10 92 7a 00 sts 0x007A, r1
48a4: 20 91 37 02 lds r18, 0x0237
48a8: 30 91 38 02 lds r19, 0x0238
48ac: 21 15 cp r18, r1
48ae: 31 05 cpc r19, r1
48b0: 61 f5 brne .+88 ; 0x490a <MotorRegler+0xc4a>
48b2: 00 91 0b 02 lds r16, 0x020B
48b6: 10 91 0c 02 lds r17, 0x020C
48ba: 20 91 0d 02 lds r18, 0x020D
48be: 30 91 0e 02 lds r19, 0x020E
48c2: 80 91 1b 02 lds r24, 0x021B
48c6: 90 91 1c 02 lds r25, 0x021C
48ca: bc 01 movw r22, r24
48cc: 64 9f mul r22, r20
48ce: c0 01 movw r24, r0
48d0: 65 9f mul r22, r21
48d2: 90 0d add r25, r0
48d4: 74 9f mul r23, r20
48d6: 90 0d add r25, r0
48d8: 11 24 eor r1, r1
48da: 60 e2 ldi r22, 0x20 ; 32
48dc: 70 e0 ldi r23, 0x00 ; 0
48de: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
48e2: 88 27 eor r24, r24
48e4: 77 fd sbrc r23, 7
48e6: 80 95 com r24
48e8: 98 2f mov r25, r24
48ea: 06 0f add r16, r22
48ec: 17 1f adc r17, r23
48ee: 28 1f adc r18, r24
48f0: 39 1f adc r19, r25
48f2: 00 93 0b 02 sts 0x020B, r16
48f6: 10 93 0c 02 sts 0x020C, r17
48fa: 20 93 0d 02 sts 0x020D, r18
48fe: 30 93 0e 02 sts 0x020E, r19
4902: 8f ee ldi r24, 0xEF ; 239
4904: 80 93 7a 00 sts 0x007A, r24
4908: 10 c0 rjmp .+32 ; 0x492a <MotorRegler+0xc6a>
490a: 8f ee ldi r24, 0xEF ; 239
490c: 80 93 7a 00 sts 0x007A, r24
4910: 21 50 subi r18, 0x01 ; 1
4912: 30 40 sbci r19, 0x00 ; 0
4914: 30 93 38 02 sts 0x0238, r19
4918: 20 93 37 02 sts 0x0237, r18
491c: 06 c0 rjmp .+12 ; 0x492a <MotorRegler+0xc6a>
491e: 84 ef ldi r24, 0xF4 ; 244
4920: 91 e0 ldi r25, 0x01 ; 1
4922: 90 93 38 02 sts 0x0238, r25
4926: 80 93 37 02 sts 0x0237, r24
492a: 80 91 75 05 lds r24, 0x0575
492e: 85 ff sbrs r24, 5
4930: 11 c0 rjmp .+34 ; 0x4954 <MotorRegler+0xc94>
4932: 80 91 33 02 lds r24, 0x0233
4936: 99 27 eor r25, r25
4938: 90 93 a3 02 sts 0x02A3, r25
493c: 80 93 a2 02 sts 0x02A2, r24
4940: 80 91 34 02 lds r24, 0x0234
4944: 99 27 eor r25, r25
4946: 90 93 a5 02 sts 0x02A5, r25
494a: 80 93 a4 02 sts 0x02A4, r24
494e: 0e 94 2a 29 call 0x5254 ; 0x5254 <gps_main>
4952: 08 c0 rjmp .+16 ; 0x4964 <MotorRegler+0xca4>
4954: 10 92 8d 02 sts 0x028D, r1
4958: 10 92 8c 02 sts 0x028C, r1
495c: 10 92 8f 02 sts 0x028F, r1
4960: 10 92 8e 02 sts 0x028E, r1
4964: 80 91 e9 04 lds r24, 0x04E9
4968: 8f 5f subi r24, 0xFF ; 255
496a: 80 93 e9 04 sts 0x04E9, r24
496e: 80 91 3a 02 lds r24, 0x023A
4972: 81 50 subi r24, 0x01 ; 1
4974: 80 93 3a 02 sts 0x023A, r24
4978: 8f 3f cpi r24, 0xFF ; 255
497a: 09 f0 breq .+2 ; 0x497e <MotorRegler+0xcbe>
497c: 68 c0 rjmp .+208 ; 0x4a4e <MotorRegler+0xd8e>
497e: 81 e3 ldi r24, 0x31 ; 49
4980: 80 93 3a 02 sts 0x023A, r24
4984: 60 91 e7 01 lds r22, 0x01E7
4988: 70 91 e8 01 lds r23, 0x01E8
498c: 80 91 e9 01 lds r24, 0x01E9
4990: 90 91 ea 01 lds r25, 0x01EA
4994: e0 90 81 05 lds r14, 0x0581
4998: ff 24 eor r15, r15
499a: 00 27 eor r16, r16
499c: 11 27 eor r17, r17
499e: a8 01 movw r20, r16
49a0: 97 01 movw r18, r14
49a2: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
49a6: 30 93 eb 04 sts 0x04EB, r19
49aa: 20 93 ea 04 sts 0x04EA, r18
49ae: 60 91 ef 01 lds r22, 0x01EF
49b2: 70 91 f0 01 lds r23, 0x01F0
49b6: 80 91 f1 01 lds r24, 0x01F1
49ba: 90 91 f2 01 lds r25, 0x01F2
49be: a8 01 movw r20, r16
49c0: 97 01 movw r18, r14
49c2: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
49c6: 30 93 ed 04 sts 0x04ED, r19
49ca: 20 93 ec 04 sts 0x04EC, r18
49ce: 80 91 b2 05 lds r24, 0x05B2
49d2: 90 91 b3 05 lds r25, 0x05B3
49d6: 90 93 ef 04 sts 0x04EF, r25
49da: 80 93 ee 04 sts 0x04EE, r24
49de: 80 91 bb 05 lds r24, 0x05BB
49e2: 90 91 bc 05 lds r25, 0x05BC
49e6: 90 93 f1 04 sts 0x04F1, r25
49ea: 80 93 f0 04 sts 0x04F0, r24
49ee: 80 91 b5 05 lds r24, 0x05B5
49f2: 90 91 b6 05 lds r25, 0x05B6
49f6: 90 93 f3 04 sts 0x04F3, r25
49fa: 80 93 f2 04 sts 0x04F2, r24
49fe: 80 91 2f 02 lds r24, 0x022F
4a02: 90 91 30 02 lds r25, 0x0230
4a06: 90 93 f5 04 sts 0x04F5, r25
4a0a: 80 93 f4 04 sts 0x04F4, r24
4a0e: 60 91 13 02 lds r22, 0x0213
4a12: 70 91 14 02 lds r23, 0x0214
4a16: 80 91 15 02 lds r24, 0x0215
4a1a: 90 91 16 02 lds r25, 0x0216
4a1e: 20 e0 ldi r18, 0x00 ; 0
4a20: 32 e0 ldi r19, 0x02 ; 2
4a22: 40 e0 ldi r20, 0x00 ; 0
4a24: 50 e0 ldi r21, 0x00 ; 0
4a26: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4a2a: 30 93 f7 04 sts 0x04F7, r19
4a2e: 20 93 f6 04 sts 0x04F6, r18
4a32: 89 81 ldd r24, Y+1 ; 0x01
4a34: 9a 81 ldd r25, Y+2 ; 0x02
4a36: 90 93 f9 04 sts 0x04F9, r25
4a3a: 80 93 f8 04 sts 0x04F8, r24
4a3e: 80 91 17 02 lds r24, 0x0217
4a42: 90 91 18 02 lds r25, 0x0218
4a46: 90 93 fb 04 sts 0x04FB, r25
4a4a: 80 93 fa 04 sts 0x04FA, r24
4a4e: 60 91 e7 01 lds r22, 0x01E7
4a52: 70 91 e8 01 lds r23, 0x01E8
4a56: 80 91 e9 01 lds r24, 0x01E9
4a5a: 90 91 ea 01 lds r25, 0x01EA
4a5e: 20 90 ae 05 lds r2, 0x05AE
4a62: 30 90 af 05 lds r3, 0x05AF
4a66: 40 90 b0 05 lds r4, 0x05B0
4a6a: 50 90 b1 05 lds r5, 0x05B1
4a6e: e0 90 a9 05 lds r14, 0x05A9
4a72: f0 90 aa 05 lds r15, 0x05AA
4a76: 60 90 b7 05 lds r6, 0x05B7
4a7a: 70 90 b8 05 lds r7, 0x05B8
4a7e: 80 90 b9 05 lds r8, 0x05B9
4a82: 90 90 ba 05 lds r9, 0x05BA
4a86: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4a8a: a2 01 movw r20, r4
4a8c: 91 01 movw r18, r2
4a8e: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4a92: 5b 01 movw r10, r22
4a94: 6c 01 movw r12, r24
4a96: 00 27 eor r16, r16
4a98: f7 fc sbrc r15, 7
4a9a: 00 95 com r16
4a9c: 10 2f mov r17, r16
4a9e: c8 01 movw r24, r16
4aa0: b7 01 movw r22, r14
4aa2: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4aa6: a4 01 movw r20, r8
4aa8: 93 01 movw r18, r6
4aaa: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4aae: 9b 01 movw r18, r22
4ab0: ac 01 movw r20, r24
4ab2: c6 01 movw r24, r12
4ab4: b5 01 movw r22, r10
4ab6: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
4aba: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
4abe: 70 93 aa 05 sts 0x05AA, r23
4ac2: 60 93 a9 05 sts 0x05A9, r22
4ac6: 60 91 ef 01 lds r22, 0x01EF
4aca: 70 91 f0 01 lds r23, 0x01F0
4ace: 80 91 f1 01 lds r24, 0x01F1
4ad2: 90 91 f2 01 lds r25, 0x01F2
4ad6: e0 90 a7 05 lds r14, 0x05A7
4ada: f0 90 a8 05 lds r15, 0x05A8
4ade: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4ae2: a2 01 movw r20, r4
4ae4: 91 01 movw r18, r2
4ae6: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4aea: 5b 01 movw r10, r22
4aec: 6c 01 movw r12, r24
4aee: 00 27 eor r16, r16
4af0: f7 fc sbrc r15, 7
4af2: 00 95 com r16
4af4: 10 2f mov r17, r16
4af6: c8 01 movw r24, r16
4af8: b7 01 movw r22, r14
4afa: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4afe: a4 01 movw r20, r8
4b00: 93 01 movw r18, r6
4b02: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4b06: 9b 01 movw r18, r22
4b08: ac 01 movw r20, r24
4b0a: c6 01 movw r24, r12
4b0c: b5 01 movw r22, r10
4b0e: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
4b12: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
4b16: 70 93 a8 05 sts 0x05A8, r23
4b1a: 60 93 a7 05 sts 0x05A7, r22
4b1e: 60 91 b5 05 lds r22, 0x05B5
4b22: 70 91 b6 05 lds r23, 0x05B6
4b26: a0 90 f7 01 lds r10, 0x01F7
4b2a: b0 90 f8 01 lds r11, 0x01F8
4b2e: c0 90 f9 01 lds r12, 0x01F9
4b32: d0 90 fa 01 lds r13, 0x01FA
4b36: 88 27 eor r24, r24
4b38: 77 fd sbrc r23, 7
4b3a: 80 95 com r24
4b3c: 98 2f mov r25, r24
4b3e: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4b42: 7b 01 movw r14, r22
4b44: 8c 01 movw r16, r24
4b46: 20 e0 ldi r18, 0x00 ; 0
4b48: 30 e0 ldi r19, 0x00 ; 0
4b4a: 40 e0 ldi r20, 0x00 ; 0
4b4c: 5f e3 ldi r21, 0x3F ; 63
4b4e: c4 01 movw r24, r8
4b50: b3 01 movw r22, r6
4b52: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4b56: 9b 01 movw r18, r22
4b58: ac 01 movw r20, r24
4b5a: c8 01 movw r24, r16
4b5c: b7 01 movw r22, r14
4b5e: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4b62: 7b 01 movw r14, r22
4b64: 8c 01 movw r16, r24
4b66: c6 01 movw r24, r12
4b68: b5 01 movw r22, r10
4b6a: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4b6e: a2 01 movw r20, r4
4b70: 91 01 movw r18, r2
4b72: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4b76: 9b 01 movw r18, r22
4b78: ac 01 movw r20, r24
4b7a: c8 01 movw r24, r16
4b7c: b7 01 movw r22, r14
4b7e: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
4b82: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
4b86: 70 93 b6 05 sts 0x05B6, r23
4b8a: 60 93 b5 05 sts 0x05B5, r22
4b8e: 80 91 a9 05 lds r24, 0x05A9
4b92: 90 91 aa 05 lds r25, 0x05AA
4b96: 81 50 subi r24, 0x01 ; 1
4b98: 98 40 sbci r25, 0x08 ; 8
4b9a: 34 f0 brlt .+12 ; 0x4ba8 <MotorRegler+0xee8>
4b9c: 80 e0 ldi r24, 0x00 ; 0
4b9e: 98 e0 ldi r25, 0x08 ; 8
4ba0: 90 93 aa 05 sts 0x05AA, r25
4ba4: 80 93 a9 05 sts 0x05A9, r24
4ba8: 80 91 a9 05 lds r24, 0x05A9
4bac: 90 91 aa 05 lds r25, 0x05AA
4bb0: 80 50 subi r24, 0x00 ; 0
4bb2: 98 4f sbci r25, 0xF8 ; 248
4bb4: 34 f4 brge .+12 ; 0x4bc2 <MotorRegler+0xf02>
4bb6: 80 e0 ldi r24, 0x00 ; 0
4bb8: 98 ef ldi r25, 0xF8 ; 248
4bba: 90 93 aa 05 sts 0x05AA, r25
4bbe: 80 93 a9 05 sts 0x05A9, r24
4bc2: 80 91 a7 05 lds r24, 0x05A7
4bc6: 90 91 a8 05 lds r25, 0x05A8
4bca: 81 50 subi r24, 0x01 ; 1
4bcc: 98 40 sbci r25, 0x08 ; 8
4bce: 34 f0 brlt .+12 ; 0x4bdc <MotorRegler+0xf1c>
4bd0: 80 e0 ldi r24, 0x00 ; 0
4bd2: 98 e0 ldi r25, 0x08 ; 8
4bd4: 90 93 a8 05 sts 0x05A8, r25
4bd8: 80 93 a7 05 sts 0x05A7, r24
4bdc: 80 91 a7 05 lds r24, 0x05A7
4be0: 90 91 a8 05 lds r25, 0x05A8
4be4: 80 50 subi r24, 0x00 ; 0
4be6: 98 4f sbci r25, 0xF8 ; 248
4be8: 34 f4 brge .+12 ; 0x4bf6 <MotorRegler+0xf36>
4bea: 80 e0 ldi r24, 0x00 ; 0
4bec: 98 ef ldi r25, 0xF8 ; 248
4bee: 90 93 a8 05 sts 0x05A8, r25
4bf2: 80 93 a7 05 sts 0x05A7, r24
4bf6: 80 91 b5 05 lds r24, 0x05B5
4bfa: 90 91 b6 05 lds r25, 0x05B6
4bfe: 81 50 subi r24, 0x01 ; 1
4c00: 98 40 sbci r25, 0x08 ; 8
4c02: 34 f0 brlt .+12 ; 0x4c10 <MotorRegler+0xf50>
4c04: 80 e0 ldi r24, 0x00 ; 0
4c06: 98 e0 ldi r25, 0x08 ; 8
4c08: 90 93 b6 05 sts 0x05B6, r25
4c0c: 80 93 b5 05 sts 0x05B5, r24
4c10: 80 91 b5 05 lds r24, 0x05B5
4c14: 90 91 b6 05 lds r25, 0x05B6
4c18: 80 50 subi r24, 0x00 ; 0
4c1a: 98 4f sbci r25, 0xF8 ; 248
4c1c: 34 f4 brge .+12 ; 0x4c2a <MotorRegler+0xf6a>
4c1e: 80 e0 ldi r24, 0x00 ; 0
4c20: 98 ef ldi r25, 0xF8 ; 248
4c22: 90 93 b6 05 sts 0x05B6, r25
4c26: 80 93 b5 05 sts 0x05B5, r24
4c2a: 80 91 75 05 lds r24, 0x0575
4c2e: 99 27 eor r25, r25
4c30: 80 ff sbrs r24, 0
4c32: cd c0 rjmp .+410 ; 0x4dce <MotorRegler+0x110e>
4c34: 20 91 81 01 lds r18, 0x0181
4c38: 81 ff sbrs r24, 1
4c3a: 0e c0 rjmp .+28 ; 0x4c58 <MotorRegler+0xf98>
4c3c: 22 33 cpi r18, 0x32 ; 50
4c3e: b0 f4 brcc .+44 ; 0x4c6c <MotorRegler+0xfac>
4c40: 80 91 2f 02 lds r24, 0x022F
4c44: 90 91 30 02 lds r25, 0x0230
4c48: 44 97 sbiw r24, 0x14 ; 20
4c4a: 90 93 32 02 sts 0x0232, r25
4c4e: 80 93 31 02 sts 0x0231, r24
4c52: 10 92 1e 02 sts 0x021E, r1
4c56: 0d c0 rjmp .+26 ; 0x4c72 <MotorRegler+0xfb2>
4c58: 80 91 7a 05 lds r24, 0x057A
4c5c: 28 9f mul r18, r24
4c5e: c0 01 movw r24, r0
4c60: 11 24 eor r1, r1
4c62: 44 97 sbiw r24, 0x14 ; 20
4c64: 90 93 32 02 sts 0x0232, r25
4c68: 80 93 31 02 sts 0x0231, r24
4c6c: 81 e0 ldi r24, 0x01 ; 1
4c6e: 80 93 1e 02 sts 0x021E, r24
4c72: 80 91 1d 02 lds r24, 0x021D
4c76: 88 23 and r24, r24
4c78: 21 f0 breq .+8 ; 0x4c82 <MotorRegler+0xfc2>
4c7a: 10 92 32 02 sts 0x0232, r1
4c7e: 10 92 31 02 sts 0x0231, r1
4c82: 20 91 2f 02 lds r18, 0x022F
4c86: 30 91 30 02 lds r19, 0x0230
4c8a: 40 91 31 02 lds r20, 0x0231
4c8e: 50 91 32 02 lds r21, 0x0232
4c92: 42 17 cp r20, r18
4c94: 53 07 cpc r21, r19
4c96: 0c f0 brlt .+2 ; 0x4c9a <MotorRegler+0xfda>
4c98: 9a c0 rjmp .+308 ; 0x4dce <MotorRegler+0x110e>
4c9a: 80 91 1e 02 lds r24, 0x021E
4c9e: 88 23 and r24, r24
4ca0: 09 f4 brne .+2 ; 0x4ca4 <MotorRegler+0xfe4>
4ca2: 95 c0 rjmp .+298 ; 0x4dce <MotorRegler+0x110e>
4ca4: 24 1b sub r18, r20
4ca6: 35 0b sbc r19, r21
4ca8: 80 91 82 01 lds r24, 0x0182
4cac: 99 27 eor r25, r25
4cae: bc 01 movw r22, r24
4cb0: 26 9f mul r18, r22
4cb2: c0 01 movw r24, r0
4cb4: 27 9f mul r18, r23
4cb6: 90 0d add r25, r0
4cb8: 36 9f mul r19, r22
4cba: 90 0d add r25, r0
4cbc: 11 24 eor r1, r1
4cbe: 60 e1 ldi r22, 0x10 ; 16
4cc0: 70 e0 ldi r23, 0x00 ; 0
4cc2: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
4cc6: 09 81 ldd r16, Y+1 ; 0x01
4cc8: 1a 81 ldd r17, Y+2 ; 0x02
4cca: 06 1b sub r16, r22
4ccc: 17 0b sbc r17, r23
4cce: 20 91 c4 01 lds r18, 0x01C4
4cd2: 30 91 c5 01 lds r19, 0x01C5
4cd6: 80 91 80 01 lds r24, 0x0180
4cda: 99 27 eor r25, r25
4cdc: fc 01 movw r30, r24
4cde: 2e 9f mul r18, r30
4ce0: c0 01 movw r24, r0
4ce2: 2f 9f mul r18, r31
4ce4: 90 0d add r25, r0
4ce6: 3e 9f mul r19, r30
4ce8: 90 0d add r25, r0
4cea: 11 24 eor r1, r1
4cec: 68 e0 ldi r22, 0x08 ; 8
4cee: 70 e0 ldi r23, 0x00 ; 0
4cf0: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
4cf4: 06 1b sub r16, r22
4cf6: 17 0b sbc r17, r23
4cf8: 60 91 13 02 lds r22, 0x0213
4cfc: 70 91 14 02 lds r23, 0x0214
4d00: 80 91 15 02 lds r24, 0x0215
4d04: 90 91 16 02 lds r25, 0x0216
4d08: 20 e0 ldi r18, 0x00 ; 0
4d0a: 32 e0 ldi r19, 0x02 ; 2
4d0c: 40 e0 ldi r20, 0x00 ; 0
4d0e: 50 e0 ldi r21, 0x00 ; 0
4d10: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4d14: ca 01 movw r24, r20
4d16: b9 01 movw r22, r18
4d18: 20 91 83 01 lds r18, 0x0183
4d1c: 33 27 eor r19, r19
4d1e: 44 27 eor r20, r20
4d20: 55 27 eor r21, r21
4d22: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
4d26: 20 e2 ldi r18, 0x20 ; 32
4d28: 30 e0 ldi r19, 0x00 ; 0
4d2a: 40 e0 ldi r20, 0x00 ; 0
4d2c: 50 e0 ldi r21, 0x00 ; 0
4d2e: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
4d32: ff ef ldi r31, 0xFF ; 255
4d34: 2e 3c cpi r18, 0xCE ; 206
4d36: 3f 07 cpc r19, r31
4d38: 14 f4 brge .+4 ; 0x4d3e <MotorRegler+0x107e>
4d3a: 2e ec ldi r18, 0xCE ; 206
4d3c: 3f ef ldi r19, 0xFF ; 255
4d3e: 80 91 3b 02 lds r24, 0x023B
4d42: 90 91 3c 02 lds r25, 0x023C
4d46: ac 01 movw r20, r24
4d48: 74 e0 ldi r23, 0x04 ; 4
4d4a: 44 0f add r20, r20
4d4c: 55 1f adc r21, r21
4d4e: 7a 95 dec r23
4d50: e1 f7 brne .-8 ; 0x4d4a <MotorRegler+0x108a>
4d52: 48 1b sub r20, r24
4d54: 59 0b sbc r21, r25
4d56: 23 33 cpi r18, 0x33 ; 51
4d58: 31 05 cpc r19, r1
4d5a: 14 f0 brlt .+4 ; 0x4d60 <MotorRegler+0x10a0>
4d5c: 22 e3 ldi r18, 0x32 ; 50
4d5e: 30 e0 ldi r19, 0x00 ; 0
4d60: 02 1b sub r16, r18
4d62: 13 0b sbc r17, r19
4d64: ca 01 movw r24, r20
4d66: 80 0f add r24, r16
4d68: 91 1f adc r25, r17
4d6a: 60 e1 ldi r22, 0x10 ; 16
4d6c: 70 e0 ldi r23, 0x00 ; 0
4d6e: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
4d72: 70 93 3c 02 sts 0x023C, r23
4d76: 60 93 3b 02 sts 0x023B, r22
4d7a: 80 91 76 05 lds r24, 0x0576
4d7e: 99 27 eor r25, r25
4d80: 68 17 cp r22, r24
4d82: 79 07 cpc r23, r25
4d84: 8c f4 brge .+34 ; 0x4da8 <MotorRegler+0x10e8>
4d86: 29 81 ldd r18, Y+1 ; 0x01
4d88: 3a 81 ldd r19, Y+2 ; 0x02
4d8a: 28 17 cp r18, r24
4d8c: 39 07 cpc r19, r25
4d8e: 2c f0 brlt .+10 ; 0x4d9a <MotorRegler+0x10da>
4d90: 90 93 3c 02 sts 0x023C, r25
4d94: 80 93 3b 02 sts 0x023B, r24
4d98: 07 c0 rjmp .+14 ; 0x4da8 <MotorRegler+0x10e8>
4d9a: 49 81 ldd r20, Y+1 ; 0x01
4d9c: 5a 81 ldd r21, Y+2 ; 0x02
4d9e: 50 93 3c 02 sts 0x023C, r21
4da2: 40 93 3b 02 sts 0x023B, r20
4da6: 0d c0 rjmp .+26 ; 0x4dc2 <MotorRegler+0x1102>
4da8: 80 91 3b 02 lds r24, 0x023B
4dac: 90 91 3c 02 lds r25, 0x023C
4db0: 69 81 ldd r22, Y+1 ; 0x01
4db2: 7a 81 ldd r23, Y+2 ; 0x02
4db4: 68 17 cp r22, r24
4db6: 79 07 cpc r23, r25
4db8: 24 f4 brge .+8 ; 0x4dc2 <MotorRegler+0x1102>
4dba: 70 93 3c 02 sts 0x023C, r23
4dbe: 60 93 3b 02 sts 0x023B, r22
4dc2: 80 91 3b 02 lds r24, 0x023B
4dc6: 90 91 3c 02 lds r25, 0x023C
4dca: 9a 83 std Y+2, r25 ; 0x02
4dcc: 89 83 std Y+1, r24 ; 0x01
4dce: c0 90 b5 05 lds r12, 0x05B5
4dd2: d0 90 b6 05 lds r13, 0x05B6
4dd6: 80 91 50 02 lds r24, 0x0250
4dda: 90 91 51 02 lds r25, 0x0251
4dde: c8 1a sub r12, r24
4de0: d9 0a sbc r13, r25
4de2: 95 e6 ldi r25, 0x65 ; 101
4de4: c9 16 cp r12, r25
4de6: d1 04 cpc r13, r1
4de8: 24 f0 brlt .+8 ; 0x4df2 <MotorRegler+0x1132>
4dea: 64 e6 ldi r22, 0x64 ; 100
4dec: c6 2e mov r12, r22
4dee: d1 2c mov r13, r1
4df0: 09 c0 rjmp .+18 ; 0x4e04 <MotorRegler+0x1144>
4df2: ec e9 ldi r30, 0x9C ; 156
4df4: ce 16 cp r12, r30
4df6: ef ef ldi r30, 0xFF ; 255
4df8: de 06 cpc r13, r30
4dfa: 24 f4 brge .+8 ; 0x4e04 <MotorRegler+0x1144>
4dfc: 5c e9 ldi r21, 0x9C ; 156
4dfe: c5 2e mov r12, r21
4e00: 5f ef ldi r21, 0xFF ; 255
4e02: d5 2e mov r13, r21
4e04: 40 90 78 01 lds r4, 0x0178
4e08: 50 90 79 01 lds r5, 0x0179
4e0c: 60 90 7a 01 lds r6, 0x017A
4e10: 70 90 7b 01 lds r7, 0x017B
4e14: 60 91 a9 05 lds r22, 0x05A9
4e18: 70 91 aa 05 lds r23, 0x05AA
4e1c: 20 91 28 02 lds r18, 0x0228
4e20: 30 91 29 02 lds r19, 0x0229
4e24: 40 91 8c 02 lds r20, 0x028C
4e28: 50 91 8d 02 lds r21, 0x028D
4e2c: 24 1b sub r18, r20
4e2e: 35 0b sbc r19, r21
4e30: 62 1b sub r22, r18
4e32: 73 0b sbc r23, r19
4e34: 88 27 eor r24, r24
4e36: 77 fd sbrc r23, 7
4e38: 80 95 com r24
4e3a: 98 2f mov r25, r24
4e3c: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4e40: 9b 01 movw r18, r22
4e42: ac 01 movw r20, r24
4e44: c3 01 movw r24, r6
4e46: b2 01 movw r22, r4
4e48: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4e4c: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
4e50: 70 93 99 02 sts 0x0299, r23
4e54: 60 93 98 02 sts 0x0298, r22
4e58: 80 91 98 02 lds r24, 0x0298
4e5c: 90 91 99 02 lds r25, 0x0299
4e60: 8c 01 movw r16, r24
4e62: 22 27 eor r18, r18
4e64: 17 fd sbrc r17, 7
4e66: 20 95 com r18
4e68: 32 2f mov r19, r18
4e6a: 80 91 58 02 lds r24, 0x0258
4e6e: 90 91 59 02 lds r25, 0x0259
4e72: a0 91 5a 02 lds r26, 0x025A
4e76: b0 91 5b 02 lds r27, 0x025B
4e7a: 08 0f add r16, r24
4e7c: 19 1f adc r17, r25
4e7e: 2a 1f adc r18, r26
4e80: 3b 1f adc r19, r27
4e82: 00 93 58 02 sts 0x0258, r16
4e86: 10 93 59 02 sts 0x0259, r17
4e8a: 20 93 5a 02 sts 0x025A, r18
4e8e: 30 93 5b 02 sts 0x025B, r19
4e92: 10 16 cp r1, r16
4e94: 11 06 cpc r1, r17
4e96: 12 06 cpc r1, r18
4e98: 13 06 cpc r1, r19
4e9a: ac f4 brge .+42 ; 0x4ec6 <MotorRegler+0x1206>
4e9c: c8 01 movw r24, r16
4e9e: 17 ff sbrs r17, 7
4ea0: 03 c0 rjmp .+6 ; 0x4ea8 <MotorRegler+0x11e8>
4ea2: 90 95 com r25
4ea4: 81 95 neg r24
4ea6: 9f 4f sbci r25, 0xFF ; 255
4ea8: 60 e0 ldi r22, 0x00 ; 0
4eaa: 71 e0 ldi r23, 0x01 ; 1
4eac: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
4eb0: 6f 5f subi r22, 0xFF ; 255
4eb2: 7f 4f sbci r23, 0xFF ; 255
4eb4: 88 27 eor r24, r24
4eb6: 77 fd sbrc r23, 7
4eb8: 80 95 com r24
4eba: 98 2f mov r25, r24
4ebc: 06 1b sub r16, r22
4ebe: 17 0b sbc r17, r23
4ec0: 28 0b sbc r18, r24
4ec2: 39 0b sbc r19, r25
4ec4: 14 c0 rjmp .+40 ; 0x4eee <MotorRegler+0x122e>
4ec6: c8 01 movw r24, r16
4ec8: 17 ff sbrs r17, 7
4eca: 03 c0 rjmp .+6 ; 0x4ed2 <MotorRegler+0x1212>
4ecc: 90 95 com r25
4ece: 81 95 neg r24
4ed0: 9f 4f sbci r25, 0xFF ; 255
4ed2: 60 e0 ldi r22, 0x00 ; 0
4ed4: 71 e0 ldi r23, 0x01 ; 1
4ed6: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
4eda: 6f 5f subi r22, 0xFF ; 255
4edc: 7f 4f sbci r23, 0xFF ; 255
4ede: 88 27 eor r24, r24
4ee0: 77 fd sbrc r23, 7
4ee2: 80 95 com r24
4ee4: 98 2f mov r25, r24
4ee6: 06 0f add r16, r22
4ee8: 17 1f adc r17, r23
4eea: 28 1f adc r18, r24
4eec: 39 1f adc r19, r25
4eee: 00 93 58 02 sts 0x0258, r16
4ef2: 10 93 59 02 sts 0x0259, r17
4ef6: 20 93 5a 02 sts 0x025A, r18
4efa: 30 93 5b 02 sts 0x025B, r19
4efe: 80 91 58 02 lds r24, 0x0258
4f02: 90 91 59 02 lds r25, 0x0259
4f06: a0 91 5a 02 lds r26, 0x025A
4f0a: b0 91 5b 02 lds r27, 0x025B
4f0e: 81 38 cpi r24, 0x81 ; 129
4f10: fe e3 ldi r31, 0x3E ; 62
4f12: 9f 07 cpc r25, r31
4f14: f0 e0 ldi r31, 0x00 ; 0
4f16: af 07 cpc r26, r31
4f18: f0 e0 ldi r31, 0x00 ; 0
4f1a: bf 07 cpc r27, r31
4f1c: 2c f0 brlt .+10 ; 0x4f28 <MotorRegler+0x1268>
4f1e: 80 e8 ldi r24, 0x80 ; 128
4f20: 9e e3 ldi r25, 0x3E ; 62
4f22: a0 e0 ldi r26, 0x00 ; 0
4f24: b0 e0 ldi r27, 0x00 ; 0
4f26: 09 c0 rjmp .+18 ; 0x4f3a <MotorRegler+0x127a>
4f28: 80 58 subi r24, 0x80 ; 128
4f2a: 91 4c sbci r25, 0xC1 ; 193
4f2c: af 4f sbci r26, 0xFF ; 255
4f2e: bf 4f sbci r27, 0xFF ; 255
4f30: 64 f4 brge .+24 ; 0x4f4a <MotorRegler+0x128a>
4f32: 80 e8 ldi r24, 0x80 ; 128
4f34: 91 ec ldi r25, 0xC1 ; 193
4f36: af ef ldi r26, 0xFF ; 255
4f38: bf ef ldi r27, 0xFF ; 255
4f3a: 80 93 58 02 sts 0x0258, r24
4f3e: 90 93 59 02 sts 0x0259, r25
4f42: a0 93 5a 02 sts 0x025A, r26
4f46: b0 93 5b 02 sts 0x025B, r27
4f4a: 60 91 98 02 lds r22, 0x0298
4f4e: 70 91 99 02 lds r23, 0x0299
4f52: 80 90 7c 01 lds r8, 0x017C
4f56: 90 90 7d 01 lds r9, 0x017D
4f5a: a0 90 7e 01 lds r10, 0x017E
4f5e: b0 90 7f 01 lds r11, 0x017F
4f62: 88 27 eor r24, r24
4f64: 77 fd sbrc r23, 7
4f66: 80 95 com r24
4f68: 98 2f mov r25, r24
4f6a: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4f6e: 7b 01 movw r14, r22
4f70: 8c 01 movw r16, r24
4f72: 60 91 58 02 lds r22, 0x0258
4f76: 70 91 59 02 lds r23, 0x0259
4f7a: 80 91 5a 02 lds r24, 0x025A
4f7e: 90 91 5b 02 lds r25, 0x025B
4f82: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
4f86: 9b 01 movw r18, r22
4f88: ac 01 movw r20, r24
4f8a: c5 01 movw r24, r10
4f8c: b4 01 movw r22, r8
4f8e: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
4f92: 9b 01 movw r18, r22
4f94: ac 01 movw r20, r24
4f96: c8 01 movw r24, r16
4f98: b7 01 movw r22, r14
4f9a: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
4f9e: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
4fa2: 96 01 movw r18, r12
4fa4: 26 0f add r18, r22
4fa6: 37 1f adc r19, r23
4fa8: 49 81 ldd r20, Y+1 ; 0x01
4faa: 5a 81 ldd r21, Y+2 ; 0x02
4fac: 24 0f add r18, r20
4fae: 35 1f adc r19, r21
4fb0: 22 24 eor r2, r2
4fb2: 4a 30 cpi r20, 0x0A ; 10
4fb4: 51 05 cpc r21, r1
4fb6: 14 f4 brge .+4 ; 0x4fbc <MotorRegler+0x12fc>
4fb8: 41 e0 ldi r20, 0x01 ; 1
4fba: 24 2e mov r2, r20
4fbc: 37 fd sbrc r19, 7
4fbe: 02 c0 rjmp .+4 ; 0x4fc4 <MotorRegler+0x1304>
4fc0: 22 20 and r2, r2
4fc2: 19 f0 breq .+6 ; 0x4fca <MotorRegler+0x130a>
4fc4: 40 e0 ldi r20, 0x00 ; 0
4fc6: 50 e0 ldi r21, 0x00 ; 0
4fc8: 08 c0 rjmp .+16 ; 0x4fda <MotorRegler+0x131a>
4fca: 80 91 b4 05 lds r24, 0x05B4
4fce: 48 2f mov r20, r24
4fd0: 55 27 eor r21, r21
4fd2: 24 17 cp r18, r20
4fd4: 35 07 cpc r19, r21
4fd6: 0c f4 brge .+2 ; 0x4fda <MotorRegler+0x131a>
4fd8: a9 01 movw r20, r18
4fda: 80 91 ab 05 lds r24, 0x05AB
4fde: e8 2f mov r30, r24
4fe0: ff 27 eor r31, r31
4fe2: fc 83 std Y+4, r31 ; 0x04
4fe4: eb 83 std Y+3, r30 ; 0x03
4fe6: 9f 01 movw r18, r30
4fe8: e4 17 cp r30, r20
4fea: f5 07 cpc r31, r21
4fec: 0c f4 brge .+2 ; 0x4ff0 <MotorRegler+0x1330>
4fee: 9a 01 movw r18, r20
4ff0: 20 93 96 02 sts 0x0296, r18
4ff4: 29 81 ldd r18, Y+1 ; 0x01
4ff6: 3a 81 ldd r19, Y+2 ; 0x02
4ff8: 26 1b sub r18, r22
4ffa: 37 0b sbc r19, r23
4ffc: b9 01 movw r22, r18
4ffe: 6c 0d add r22, r12
5000: 7d 1d adc r23, r13
5002: 77 fd sbrc r23, 7
5004: 02 c0 rjmp .+4 ; 0x500a <MotorRegler+0x134a>
5006: 22 20 and r2, r2
5008: 19 f0 breq .+6 ; 0x5010 <MotorRegler+0x1350>
500a: 80 e0 ldi r24, 0x00 ; 0
500c: 90 e0 ldi r25, 0x00 ; 0
500e: 07 c0 rjmp .+14 ; 0x501e <MotorRegler+0x135e>
5010: 80 91 b4 05 lds r24, 0x05B4
5014: 99 27 eor r25, r25
5016: 68 17 cp r22, r24
5018: 79 07 cpc r23, r25
501a: 0c f4 brge .+2 ; 0x501e <MotorRegler+0x135e>
501c: cb 01 movw r24, r22
501e: 2b 81 ldd r18, Y+3 ; 0x03
5020: 3c 81 ldd r19, Y+4 ; 0x04
5022: 28 17 cp r18, r24
5024: 39 07 cpc r19, r25
5026: 0c f4 brge .+2 ; 0x502a <MotorRegler+0x136a>
5028: 9c 01 movw r18, r24
502a: 20 93 97 02 sts 0x0297, r18
502e: 60 91 a7 05 lds r22, 0x05A7
5032: 70 91 a8 05 lds r23, 0x05A8
5036: 20 91 2a 02 lds r18, 0x022A
503a: 30 91 2b 02 lds r19, 0x022B
503e: 40 91 8e 02 lds r20, 0x028E
5042: 50 91 8f 02 lds r21, 0x028F
5046: 24 1b sub r18, r20
5048: 35 0b sbc r19, r21
504a: 62 1b sub r22, r18
504c: 73 0b sbc r23, r19
504e: 88 27 eor r24, r24
5050: 77 fd sbrc r23, 7
5052: 80 95 com r24
5054: 98 2f mov r25, r24
5056: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
505a: 9b 01 movw r18, r22
505c: ac 01 movw r20, r24
505e: c3 01 movw r24, r6
5060: b2 01 movw r22, r4
5062: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
5066: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
506a: 70 93 95 02 sts 0x0295, r23
506e: 60 93 94 02 sts 0x0294, r22
5072: 80 91 94 02 lds r24, 0x0294
5076: 90 91 95 02 lds r25, 0x0295
507a: 8c 01 movw r16, r24
507c: 22 27 eor r18, r18
507e: 17 fd sbrc r17, 7
5080: 20 95 com r18
5082: 32 2f mov r19, r18
5084: 80 91 54 02 lds r24, 0x0254
5088: 90 91 55 02 lds r25, 0x0255
508c: a0 91 56 02 lds r26, 0x0256
5090: b0 91 57 02 lds r27, 0x0257
5094: 08 0f add r16, r24
5096: 19 1f adc r17, r25
5098: 2a 1f adc r18, r26
509a: 3b 1f adc r19, r27
509c: 00 93 54 02 sts 0x0254, r16
50a0: 10 93 55 02 sts 0x0255, r17
50a4: 20 93 56 02 sts 0x0256, r18
50a8: 30 93 57 02 sts 0x0257, r19
50ac: 10 16 cp r1, r16
50ae: 11 06 cpc r1, r17
50b0: 12 06 cpc r1, r18
50b2: 13 06 cpc r1, r19
50b4: ac f4 brge .+42 ; 0x50e0 <MotorRegler+0x1420>
50b6: c8 01 movw r24, r16
50b8: 17 ff sbrs r17, 7
50ba: 03 c0 rjmp .+6 ; 0x50c2 <MotorRegler+0x1402>
50bc: 90 95 com r25
50be: 81 95 neg r24
50c0: 9f 4f sbci r25, 0xFF ; 255
50c2: 60 e0 ldi r22, 0x00 ; 0
50c4: 71 e0 ldi r23, 0x01 ; 1
50c6: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
50ca: 6f 5f subi r22, 0xFF ; 255
50cc: 7f 4f sbci r23, 0xFF ; 255
50ce: 88 27 eor r24, r24
50d0: 77 fd sbrc r23, 7
50d2: 80 95 com r24
50d4: 98 2f mov r25, r24
50d6: 06 1b sub r16, r22
50d8: 17 0b sbc r17, r23
50da: 28 0b sbc r18, r24
50dc: 39 0b sbc r19, r25
50de: 14 c0 rjmp .+40 ; 0x5108 <MotorRegler+0x1448>
50e0: c8 01 movw r24, r16
50e2: 17 ff sbrs r17, 7
50e4: 03 c0 rjmp .+6 ; 0x50ec <MotorRegler+0x142c>
50e6: 90 95 com r25
50e8: 81 95 neg r24
50ea: 9f 4f sbci r25, 0xFF ; 255
50ec: 60 e0 ldi r22, 0x00 ; 0
50ee: 71 e0 ldi r23, 0x01 ; 1
50f0: 0e 94 d3 2c call 0x59a6 ; 0x59a6 <__divmodhi4>
50f4: 6f 5f subi r22, 0xFF ; 255
50f6: 7f 4f sbci r23, 0xFF ; 255
50f8: 88 27 eor r24, r24
50fa: 77 fd sbrc r23, 7
50fc: 80 95 com r24
50fe: 98 2f mov r25, r24
5100: 06 0f add r16, r22
5102: 17 1f adc r17, r23
5104: 28 1f adc r18, r24
5106: 39 1f adc r19, r25
5108: 00 93 54 02 sts 0x0254, r16
510c: 10 93 55 02 sts 0x0255, r17
5110: 20 93 56 02 sts 0x0256, r18
5114: 30 93 57 02 sts 0x0257, r19
5118: 80 91 54 02 lds r24, 0x0254
511c: 90 91 55 02 lds r25, 0x0255
5120: a0 91 56 02 lds r26, 0x0256
5124: b0 91 57 02 lds r27, 0x0257
5128: 81 38 cpi r24, 0x81 ; 129
512a: 3e e3 ldi r19, 0x3E ; 62
512c: 93 07 cpc r25, r19
512e: 30 e0 ldi r19, 0x00 ; 0
5130: a3 07 cpc r26, r19
5132: 30 e0 ldi r19, 0x00 ; 0
5134: b3 07 cpc r27, r19
5136: 2c f0 brlt .+10 ; 0x5142 <MotorRegler+0x1482>
5138: 80 e8 ldi r24, 0x80 ; 128
513a: 9e e3 ldi r25, 0x3E ; 62
513c: a0 e0 ldi r26, 0x00 ; 0
513e: b0 e0 ldi r27, 0x00 ; 0
5140: 09 c0 rjmp .+18 ; 0x5154 <MotorRegler+0x1494>
5142: 80 58 subi r24, 0x80 ; 128
5144: 91 4c sbci r25, 0xC1 ; 193
5146: af 4f sbci r26, 0xFF ; 255
5148: bf 4f sbci r27, 0xFF ; 255
514a: 64 f4 brge .+24 ; 0x5164 <MotorRegler+0x14a4>
514c: 80 e8 ldi r24, 0x80 ; 128
514e: 91 ec ldi r25, 0xC1 ; 193
5150: af ef ldi r26, 0xFF ; 255
5152: bf ef ldi r27, 0xFF ; 255
5154: 80 93 54 02 sts 0x0254, r24
5158: 90 93 55 02 sts 0x0255, r25
515c: a0 93 56 02 sts 0x0256, r26
5160: b0 93 57 02 sts 0x0257, r27
5164: 60 91 94 02 lds r22, 0x0294
5168: 70 91 95 02 lds r23, 0x0295
516c: 88 27 eor r24, r24
516e: 77 fd sbrc r23, 7
5170: 80 95 com r24
5172: 98 2f mov r25, r24
5174: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
5178: 7b 01 movw r14, r22
517a: 8c 01 movw r16, r24
517c: 60 91 54 02 lds r22, 0x0254
5180: 70 91 55 02 lds r23, 0x0255
5184: 80 91 56 02 lds r24, 0x0256
5188: 90 91 57 02 lds r25, 0x0257
518c: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
5190: 9b 01 movw r18, r22
5192: ac 01 movw r20, r24
5194: c5 01 movw r24, r10
5196: b4 01 movw r22, r8
5198: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
519c: 9b 01 movw r18, r22
519e: ac 01 movw r20, r24
51a0: c8 01 movw r24, r16
51a2: b7 01 movw r22, r14
51a4: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
51a8: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
51ac: 29 81 ldd r18, Y+1 ; 0x01
51ae: 3a 81 ldd r19, Y+2 ; 0x02
51b0: 26 0f add r18, r22
51b2: 37 1f adc r19, r23
51b4: 2c 19 sub r18, r12
51b6: 3d 09 sbc r19, r13
51b8: 37 fd sbrc r19, 7
51ba: 02 c0 rjmp .+4 ; 0x51c0 <MotorRegler+0x1500>
51bc: 22 20 and r2, r2
51be: 19 f0 breq .+6 ; 0x51c6 <MotorRegler+0x1506>
51c0: 40 e0 ldi r20, 0x00 ; 0
51c2: 50 e0 ldi r21, 0x00 ; 0
51c4: 08 c0 rjmp .+16 ; 0x51d6 <MotorRegler+0x1516>
51c6: 80 91 b4 05 lds r24, 0x05B4
51ca: 48 2f mov r20, r24
51cc: 55 27 eor r21, r21
51ce: 24 17 cp r18, r20
51d0: 35 07 cpc r19, r21
51d2: 0c f4 brge .+2 ; 0x51d6 <MotorRegler+0x1516>
51d4: a9 01 movw r20, r18
51d6: 2b 81 ldd r18, Y+3 ; 0x03
51d8: 3c 81 ldd r19, Y+4 ; 0x04
51da: 24 17 cp r18, r20
51dc: 35 07 cpc r19, r21
51de: 0c f4 brge .+2 ; 0x51e2 <MotorRegler+0x1522>
51e0: 9a 01 movw r18, r20
51e2: 20 93 a6 02 sts 0x02A6, r18
51e6: 89 81 ldd r24, Y+1 ; 0x01
51e8: 9a 81 ldd r25, Y+2 ; 0x02
51ea: 86 1b sub r24, r22
51ec: 97 0b sbc r25, r23
51ee: bc 01 movw r22, r24
51f0: 6c 19 sub r22, r12
51f2: 7d 09 sbc r23, r13
51f4: 77 fd sbrc r23, 7
51f6: 02 c0 rjmp .+4 ; 0x51fc <MotorRegler+0x153c>
51f8: 22 20 and r2, r2
51fa: 19 f0 breq .+6 ; 0x5202 <MotorRegler+0x1542>
51fc: 20 e0 ldi r18, 0x00 ; 0
51fe: 30 e0 ldi r19, 0x00 ; 0
5200: 08 c0 rjmp .+16 ; 0x5212 <MotorRegler+0x1552>
5202: 80 91 b4 05 lds r24, 0x05B4
5206: 28 2f mov r18, r24
5208: 33 27 eor r19, r19
520a: 62 17 cp r22, r18
520c: 73 07 cpc r23, r19
520e: 0c f4 brge .+2 ; 0x5212 <MotorRegler+0x1552>
5210: 9b 01 movw r18, r22
5212: 8b 81 ldd r24, Y+3 ; 0x03
5214: 9c 81 ldd r25, Y+4 ; 0x04
5216: 82 17 cp r24, r18
5218: 93 07 cpc r25, r19
521a: 0c f4 brge .+2 ; 0x521e <MotorRegler+0x155e>
521c: c9 01 movw r24, r18
521e: 80 93 9a 02 sts 0x029A, r24
5222: 24 96 adiw r28, 0x04 ; 4
5224: 0f b6 in r0, 0x3f ; 63
5226: f8 94 cli
5228: de bf out 0x3e, r29 ; 62
522a: 0f be out 0x3f, r0 ; 63
522c: cd bf out 0x3d, r28 ; 61
522e: df 91 pop r29
5230: cf 91 pop r28
5232: 1f 91 pop r17
5234: 0f 91 pop r16
5236: ff 90 pop r15
5238: ef 90 pop r14
523a: df 90 pop r13
523c: cf 90 pop r12
523e: bf 90 pop r11
5240: af 90 pop r10
5242: 9f 90 pop r9
5244: 8f 90 pop r8
5246: 7f 90 pop r7
5248: 6f 90 pop r6
524a: 5f 90 pop r5
524c: 4f 90 pop r4
524e: 3f 90 pop r3
5250: 2f 90 pop r2
5252: 08 95 ret
 
00005254 <gps_main>:
5254: 6f 92 push r6
5256: 7f 92 push r7
5258: 8f 92 push r8
525a: 9f 92 push r9
525c: af 92 push r10
525e: bf 92 push r11
5260: cf 92 push r12
5262: df 92 push r13
5264: ef 92 push r14
5266: ff 92 push r15
5268: 0f 93 push r16
526a: 1f 93 push r17
526c: 80 91 1f 02 lds r24, 0x021F
5270: 90 91 20 02 lds r25, 0x0220
5274: 18 16 cp r1, r24
5276: 19 06 cpc r1, r25
5278: 0c f0 brlt .+2 ; 0x527c <gps_main+0x28>
527a: 78 c1 rjmp .+752 ; 0x556c <gps_main+0x318>
527c: 80 91 22 05 lds r24, 0x0522
5280: 88 23 and r24, r24
5282: 09 f4 brne .+2 ; 0x5286 <gps_main+0x32>
5284: 73 c1 rjmp .+742 ; 0x556c <gps_main+0x318>
5286: 80 91 8a 01 lds r24, 0x018A
528a: 90 91 8b 01 lds r25, 0x018B
528e: 89 2b or r24, r25
5290: d1 f1 breq .+116 ; 0x5306 <gps_main+0xb2>
5292: 80 91 0a 05 lds r24, 0x050A
5296: 90 91 0b 05 lds r25, 0x050B
529a: a0 91 0c 05 lds r26, 0x050C
529e: b0 91 0d 05 lds r27, 0x050D
52a2: 80 93 5c 02 sts 0x025C, r24
52a6: 90 93 5d 02 sts 0x025D, r25
52aa: a0 93 5e 02 sts 0x025E, r26
52ae: b0 93 5f 02 sts 0x025F, r27
52b2: 80 91 0e 05 lds r24, 0x050E
52b6: 90 91 0f 05 lds r25, 0x050F
52ba: a0 91 10 05 lds r26, 0x0510
52be: b0 91 11 05 lds r27, 0x0511
52c2: 80 93 60 02 sts 0x0260, r24
52c6: 90 93 61 02 sts 0x0261, r25
52ca: a0 93 62 02 sts 0x0262, r26
52ce: b0 93 63 02 sts 0x0263, r27
52d2: 80 91 12 05 lds r24, 0x0512
52d6: 90 91 13 05 lds r25, 0x0513
52da: a0 91 14 05 lds r26, 0x0514
52de: b0 91 15 05 lds r27, 0x0515
52e2: 80 93 64 02 sts 0x0264, r24
52e6: 90 93 65 02 sts 0x0265, r25
52ea: a0 93 66 02 sts 0x0266, r26
52ee: b0 93 67 02 sts 0x0267, r27
52f2: 82 e3 ldi r24, 0x32 ; 50
52f4: 90 e0 ldi r25, 0x00 ; 0
52f6: 90 93 ac 01 sts 0x01AC, r25
52fa: 80 93 ab 01 sts 0x01AB, r24
52fe: 10 92 8b 01 sts 0x018B, r1
5302: 10 92 8a 01 sts 0x018A, r1
5306: a0 90 a2 02 lds r10, 0x02A2
530a: b0 90 a3 02 lds r11, 0x02A3
530e: 60 91 64 02 lds r22, 0x0264
5312: 70 91 65 02 lds r23, 0x0265
5316: 80 91 66 02 lds r24, 0x0266
531a: 90 91 67 02 lds r25, 0x0267
531e: 6e 5f subi r22, 0xFE ; 254
5320: 7f 4f sbci r23, 0xFF ; 255
5322: 8f 4f sbci r24, 0xFF ; 255
5324: 9f 4f sbci r25, 0xFF ; 255
5326: 20 91 5c 02 lds r18, 0x025C
532a: 30 91 5d 02 lds r19, 0x025D
532e: 40 91 5e 02 lds r20, 0x025E
5332: 50 91 5f 02 lds r21, 0x025F
5336: e2 e0 ldi r30, 0x02 ; 2
5338: ee 2e mov r14, r30
533a: f1 2c mov r15, r1
533c: 01 2d mov r16, r1
533e: 11 2d mov r17, r1
5340: 2e 25 eor r18, r14
5342: 3f 25 eor r19, r15
5344: 40 27 eor r20, r16
5346: 51 27 eor r21, r17
5348: 62 27 eor r22, r18
534a: 73 27 eor r23, r19
534c: 84 27 eor r24, r20
534e: 95 27 eor r25, r21
5350: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
5354: 0e 94 46 2c call 0x588c ; 0x588c <sqrt>
5358: 3b 01 movw r6, r22
535a: 4c 01 movw r8, r24
535c: 60 91 12 05 lds r22, 0x0512
5360: 70 91 13 05 lds r23, 0x0513
5364: 80 91 14 05 lds r24, 0x0514
5368: 90 91 15 05 lds r25, 0x0515
536c: 6e 5f subi r22, 0xFE ; 254
536e: 7f 4f sbci r23, 0xFF ; 255
5370: 8f 4f sbci r24, 0xFF ; 255
5372: 9f 4f sbci r25, 0xFF ; 255
5374: 20 91 0a 05 lds r18, 0x050A
5378: 30 91 0b 05 lds r19, 0x050B
537c: 40 91 0c 05 lds r20, 0x050C
5380: 50 91 0d 05 lds r21, 0x050D
5384: 2e 25 eor r18, r14
5386: 3f 25 eor r19, r15
5388: 40 27 eor r20, r16
538a: 51 27 eor r21, r17
538c: 62 27 eor r22, r18
538e: 73 27 eor r23, r19
5390: 84 27 eor r24, r20
5392: 95 27 eor r25, r21
5394: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
5398: 0e 94 46 2c call 0x588c ; 0x588c <sqrt>
539c: 9b 01 movw r18, r22
539e: ac 01 movw r20, r24
53a0: c4 01 movw r24, r8
53a2: b3 01 movw r22, r6
53a4: 0e 94 de 2a call 0x55bc ; 0x55bc <__subsf3>
53a8: 7b 01 movw r14, r22
53aa: 8c 01 movw r16, r24
53ac: cc 24 eor r12, r12
53ae: b7 fc sbrc r11, 7
53b0: c0 94 com r12
53b2: dc 2c mov r13, r12
53b4: c6 01 movw r24, r12
53b6: b5 01 movw r22, r10
53b8: 0e 94 84 2b call 0x5708 ; 0x5708 <__floatsisf>
53bc: 9b 01 movw r18, r22
53be: ac 01 movw r20, r24
53c0: c8 01 movw r24, r16
53c2: b7 01 movw r22, r14
53c4: 0e 94 fe 2b call 0x57fc ; 0x57fc <__mulsf3>
53c8: 20 e0 ldi r18, 0x00 ; 0
53ca: 30 e0 ldi r19, 0x00 ; 0
53cc: 40 e2 ldi r20, 0x20 ; 32
53ce: 51 e4 ldi r21, 0x41 ; 65
53d0: 0e 94 21 2b call 0x5642 ; 0x5642 <__divsf3>
53d4: 0e 94 67 2b call 0x56ce ; 0x56ce <__fixsfsi>
53d8: 3b 01 movw r6, r22
53da: 4c 01 movw r8, r24
53dc: 60 93 6a 02 sts 0x026A, r22
53e0: 70 93 6b 02 sts 0x026B, r23
53e4: 80 93 6c 02 sts 0x026C, r24
53e8: 90 93 6d 02 sts 0x026D, r25
53ec: 20 91 a2 02 lds r18, 0x02A2
53f0: 30 91 a3 02 lds r19, 0x02A3
53f4: 60 91 60 02 lds r22, 0x0260
53f8: 70 91 61 02 lds r23, 0x0261
53fc: 80 91 62 02 lds r24, 0x0262
5400: 90 91 63 02 lds r25, 0x0263
5404: e0 90 0e 05 lds r14, 0x050E
5408: f0 90 0f 05 lds r15, 0x050F
540c: 00 91 10 05 lds r16, 0x0510
5410: 10 91 11 05 lds r17, 0x0511
5414: 6e 19 sub r22, r14
5416: 7f 09 sbc r23, r15
5418: 80 0b sbc r24, r16
541a: 91 0b sbc r25, r17
541c: 44 27 eor r20, r20
541e: 37 fd sbrc r19, 7
5420: 40 95 com r20
5422: 54 2f mov r21, r20
5424: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
5428: 2a e0 ldi r18, 0x0A ; 10
542a: 30 e0 ldi r19, 0x00 ; 0
542c: 40 e0 ldi r20, 0x00 ; 0
542e: 50 e0 ldi r21, 0x00 ; 0
5430: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
5434: 59 01 movw r10, r18
5436: 6a 01 movw r12, r20
5438: 20 93 6e 02 sts 0x026E, r18
543c: 30 93 6f 02 sts 0x026F, r19
5440: 40 93 70 02 sts 0x0270, r20
5444: 50 93 71 02 sts 0x0271, r21
5448: 60 91 a4 02 lds r22, 0x02A4
544c: 70 91 a5 02 lds r23, 0x02A5
5450: 88 27 eor r24, r24
5452: 77 fd sbrc r23, 7
5454: 80 95 com r24
5456: 98 2f mov r25, r24
5458: 20 91 16 05 lds r18, 0x0516
545c: 30 91 17 05 lds r19, 0x0517
5460: 40 91 18 05 lds r20, 0x0518
5464: 50 91 19 05 lds r21, 0x0519
5468: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
546c: 2d ef ldi r18, 0xFD ; 253
546e: 3f ef ldi r19, 0xFF ; 255
5470: 4f ef ldi r20, 0xFF ; 255
5472: 5f ef ldi r21, 0xFF ; 255
5474: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
5478: 79 01 movw r14, r18
547a: 8a 01 movw r16, r20
547c: 20 93 7a 02 sts 0x027A, r18
5480: 30 93 7b 02 sts 0x027B, r19
5484: 40 93 7c 02 sts 0x027C, r20
5488: 50 93 7d 02 sts 0x027D, r21
548c: 60 91 a4 02 lds r22, 0x02A4
5490: 70 91 a5 02 lds r23, 0x02A5
5494: 88 27 eor r24, r24
5496: 77 fd sbrc r23, 7
5498: 80 95 com r24
549a: 98 2f mov r25, r24
549c: 20 91 1a 05 lds r18, 0x051A
54a0: 30 91 1b 05 lds r19, 0x051B
54a4: 40 91 1c 05 lds r20, 0x051C
54a8: 50 91 1d 05 lds r21, 0x051D
54ac: 0e 94 a0 2c call 0x5940 ; 0x5940 <__mulsi3>
54b0: 2d ef ldi r18, 0xFD ; 253
54b2: 3f ef ldi r19, 0xFF ; 255
54b4: 4f ef ldi r20, 0xFF ; 255
54b6: 5f ef ldi r21, 0xFF ; 255
54b8: 0e 94 08 2d call 0x5a10 ; 0x5a10 <__divmodsi4>
54bc: 20 93 7e 02 sts 0x027E, r18
54c0: 30 93 7f 02 sts 0x027F, r19
54c4: 40 93 80 02 sts 0x0280, r20
54c8: 50 93 81 02 sts 0x0281, r21
54cc: b3 01 movw r22, r6
54ce: 6e 0d add r22, r14
54d0: 7f 1d adc r23, r15
54d2: 70 93 8d 02 sts 0x028D, r23
54d6: 60 93 8c 02 sts 0x028C, r22
54da: 2a 0d add r18, r10
54dc: 3b 1d adc r19, r11
54de: 30 93 8f 02 sts 0x028F, r19
54e2: 20 93 8e 02 sts 0x028E, r18
54e6: 80 91 8c 01 lds r24, 0x018C
54ea: 90 91 8d 01 lds r25, 0x018D
54ee: 86 17 cp r24, r22
54f0: 97 07 cpc r25, r23
54f2: 2c f4 brge .+10 ; 0x54fe <gps_main+0x2aa>
54f4: 80 91 8c 01 lds r24, 0x018C
54f8: 90 91 8d 01 lds r25, 0x018D
54fc: 11 c0 rjmp .+34 ; 0x5520 <gps_main+0x2cc>
54fe: 80 91 8c 01 lds r24, 0x018C
5502: 90 91 8d 01 lds r25, 0x018D
5506: 90 95 com r25
5508: 81 95 neg r24
550a: 9f 4f sbci r25, 0xFF ; 255
550c: 68 17 cp r22, r24
550e: 79 07 cpc r23, r25
5510: 5c f4 brge .+22 ; 0x5528 <gps_main+0x2d4>
5512: 80 91 8c 01 lds r24, 0x018C
5516: 90 91 8d 01 lds r25, 0x018D
551a: 90 95 com r25
551c: 81 95 neg r24
551e: 9f 4f sbci r25, 0xFF ; 255
5520: 90 93 8d 02 sts 0x028D, r25
5524: 80 93 8c 02 sts 0x028C, r24
5528: 80 91 8c 01 lds r24, 0x018C
552c: 90 91 8d 01 lds r25, 0x018D
5530: 82 17 cp r24, r18
5532: 93 07 cpc r25, r19
5534: 2c f4 brge .+10 ; 0x5540 <gps_main+0x2ec>
5536: 80 91 8c 01 lds r24, 0x018C
553a: 90 91 8d 01 lds r25, 0x018D
553e: 11 c0 rjmp .+34 ; 0x5562 <gps_main+0x30e>
5540: 80 91 8c 01 lds r24, 0x018C
5544: 90 91 8d 01 lds r25, 0x018D
5548: 90 95 com r25
554a: 81 95 neg r24
554c: 9f 4f sbci r25, 0xFF ; 255
554e: 28 17 cp r18, r24
5550: 39 07 cpc r19, r25
5552: d4 f4 brge .+52 ; 0x5588 <gps_main+0x334>
5554: 80 91 8c 01 lds r24, 0x018C
5558: 90 91 8d 01 lds r25, 0x018D
555c: 90 95 com r25
555e: 81 95 neg r24
5560: 9f 4f sbci r25, 0xFF ; 255
5562: 90 93 8f 02 sts 0x028F, r25
5566: 80 93 8e 02 sts 0x028E, r24
556a: 0e c0 rjmp .+28 ; 0x5588 <gps_main+0x334>
556c: 85 e0 ldi r24, 0x05 ; 5
556e: 90 e0 ldi r25, 0x00 ; 0
5570: 90 93 8b 01 sts 0x018B, r25
5574: 80 93 8a 01 sts 0x018A, r24
5578: 10 92 8d 02 sts 0x028D, r1
557c: 10 92 8c 02 sts 0x028C, r1
5580: 10 92 8f 02 sts 0x028F, r1
5584: 10 92 8e 02 sts 0x028E, r1
5588: 1f 91 pop r17
558a: 0f 91 pop r16
558c: ff 90 pop r15
558e: ef 90 pop r14
5590: df 90 pop r13
5592: cf 90 pop r12
5594: bf 90 pop r11
5596: af 90 pop r10
5598: 9f 90 pop r9
559a: 8f 90 pop r8
559c: 7f 90 pop r7
559e: 6f 90 pop r6
55a0: 08 95 ret
 
000055a2 <memchr>:
55a2: fc 01 movw r30, r24
55a4: 41 50 subi r20, 0x01 ; 1
55a6: 50 40 sbci r21, 0x00 ; 0
55a8: 30 f0 brcs .+12 ; 0x55b6 <memchr+0x14>
55aa: 01 90 ld r0, Z+
55ac: 06 16 cp r0, r22
55ae: d1 f7 brne .-12 ; 0x55a4 <memchr+0x2>
55b0: 31 97 sbiw r30, 0x01 ; 1
55b2: cf 01 movw r24, r30
55b4: 08 95 ret
55b6: 88 27 eor r24, r24
55b8: 99 27 eor r25, r25
55ba: 08 95 ret
 
000055bc <__subsf3>:
55bc: 50 58 subi r21, 0x80 ; 128
 
000055be <__addsf3>:
55be: 19 2e mov r1, r25
55c0: ef d0 rcall .+478 ; 0x57a0 <__fp_split3>
55c2: 01 d0 rcall .+2 ; 0x55c6 <__addsf3x>
55c4: d2 c0 rjmp .+420 ; 0x576a <__fp_merge>
 
000055c6 <__addsf3x>:
55c6: ba 17 cp r27, r26
55c8: 62 07 cpc r22, r18
55ca: 73 07 cpc r23, r19
55cc: 84 07 cpc r24, r20
55ce: 95 07 cpc r25, r21
55d0: b1 f1 breq .+108 ; 0x563e <__addsf3x+0x78>
55d2: 88 f4 brcc .+34 ; 0x55f6 <__addsf3x+0x30>
55d4: 0e f4 brtc .+2 ; 0x55d8 <__addsf3x+0x12>
55d6: 10 94 com r1
55d8: 0b 2e mov r0, r27
55da: ba 2f mov r27, r26
55dc: a0 2d mov r26, r0
55de: 06 2e mov r0, r22
55e0: 62 2f mov r22, r18
55e2: 20 2d mov r18, r0
55e4: 07 2e mov r0, r23
55e6: 73 2f mov r23, r19
55e8: 30 2d mov r19, r0
55ea: 08 2e mov r0, r24
55ec: 84 2f mov r24, r20
55ee: 40 2d mov r20, r0
55f0: 09 2e mov r0, r25
55f2: 95 2f mov r25, r21
55f4: 50 2d mov r21, r0
55f6: ff 27 eor r31, r31
55f8: 55 23 and r21, r21
55fa: b9 f0 breq .+46 ; 0x562a <__addsf3x+0x64>
55fc: 59 1b sub r21, r25
55fe: 49 f0 breq .+18 ; 0x5612 <__addsf3x+0x4c>
5600: 57 3e cpi r21, 0xE7 ; 231
5602: 98 f0 brcs .+38 ; 0x562a <__addsf3x+0x64>
5604: 46 95 lsr r20
5606: 37 95 ror r19
5608: 27 95 ror r18
560a: a7 95 ror r26
560c: f0 40 sbci r31, 0x00 ; 0
560e: 53 95 inc r21
5610: c9 f7 brne .-14 ; 0x5604 <__addsf3x+0x3e>
5612: 76 f0 brts .+28 ; 0x5630 <__addsf3x+0x6a>
5614: ba 0f add r27, r26
5616: 62 1f adc r22, r18
5618: 73 1f adc r23, r19
561a: 84 1f adc r24, r20
561c: 30 f4 brcc .+12 ; 0x562a <__addsf3x+0x64>
561e: 87 95 ror r24
5620: 77 95 ror r23
5622: 67 95 ror r22
5624: b7 95 ror r27
5626: f0 40 sbci r31, 0x00 ; 0
5628: 93 95 inc r25
562a: 17 fa bst r1, 7
562c: 0f 2e mov r0, r31
562e: 08 95 ret
5630: bf 1b sub r27, r31
5632: bb 27 eor r27, r27
5634: ba 0b sbc r27, r26
5636: 62 0b sbc r22, r18
5638: 73 0b sbc r23, r19
563a: 84 0b sbc r24, r20
563c: f6 cf rjmp .-20 ; 0x562a <__addsf3x+0x64>
563e: de f6 brtc .-74 ; 0x55f6 <__addsf3x+0x30>
5640: db c0 rjmp .+438 ; 0x57f8 <__fp_zerox>
 
00005642 <__divsf3>:
5642: ae d0 rcall .+348 ; 0x57a0 <__fp_split3>
5644: 01 d0 rcall .+2 ; 0x5648 <__divsf3x>
5646: 91 c0 rjmp .+290 ; 0x576a <__fp_merge>
 
00005648 <__divsf3x>:
5648: 55 23 and r21, r21
564a: 59 f0 breq .+22 ; 0x5662 <__divsf3x+0x1a>
564c: 99 23 and r25, r25
564e: 69 f0 breq .+26 ; 0x566a <__divsf3x+0x22>
5650: 9f 57 subi r25, 0x7F ; 127
5652: 5f 57 subi r21, 0x7F ; 127
5654: 95 1b sub r25, r21
5656: 33 f4 brvc .+12 ; 0x5664 <__divsf3x+0x1c>
5658: 42 f4 brpl .+16 ; 0x566a <__divsf3x+0x22>
565a: 90 38 cpi r25, 0x80 ; 128
565c: 11 f4 brne .+4 ; 0x5662 <__divsf3x+0x1a>
565e: 91 58 subi r25, 0x81 ; 129
5660: 05 c0 rjmp .+10 ; 0x566c <__divsf3x+0x24>
5662: 9b c0 rjmp .+310 ; 0x579a <__fp_nan>
5664: 91 58 subi r25, 0x81 ; 129
5666: 9f 3f cpi r25, 0xFF ; 255
5668: 09 f4 brne .+2 ; 0x566c <__divsf3x+0x24>
566a: c6 c0 rjmp .+396 ; 0x57f8 <__fp_zerox>
566c: bb 27 eor r27, r27
566e: 11 24 eor r1, r1
5670: 62 17 cp r22, r18
5672: 73 07 cpc r23, r19
5674: 84 07 cpc r24, r20
5676: 30 f4 brcc .+12 ; 0x5684 <__divsf3x+0x3c>
5678: 66 0f add r22, r22
567a: 77 1f adc r23, r23
567c: 88 1f adc r24, r24
567e: bb 1f adc r27, r27
5680: 91 50 subi r25, 0x01 ; 1
5682: 98 f3 brcs .-26 ; 0x566a <__divsf3x+0x22>
5684: 11 d0 rcall .+34 ; 0x56a8 <__divsf3x+0x60>
5686: 0f 92 push r0
5688: 0f d0 rcall .+30 ; 0x56a8 <__divsf3x+0x60>
568a: 0f 92 push r0
568c: 0d d0 rcall .+26 ; 0x56a8 <__divsf3x+0x60>
568e: a0 e8 ldi r26, 0x80 ; 128
5690: 26 17 cp r18, r22
5692: 37 07 cpc r19, r23
5694: 48 07 cpc r20, r24
5696: 1b 06 cpc r1, r27
5698: 09 f0 breq .+2 ; 0x569c <__divsf3x+0x54>
569a: a0 48 sbci r26, 0x80 ; 128
569c: ba 2f mov r27, r26
569e: 60 2d mov r22, r0
56a0: 7f 91 pop r23
56a2: 8f 91 pop r24
56a4: 00 24 eor r0, r0
56a6: 08 95 ret
56a8: a0 e8 ldi r26, 0x80 ; 128
56aa: 00 24 eor r0, r0
56ac: 62 17 cp r22, r18
56ae: 73 07 cpc r23, r19
56b0: 84 07 cpc r24, r20
56b2: b1 05 cpc r27, r1
56b4: 28 f0 brcs .+10 ; 0x56c0 <__divsf3x+0x78>
56b6: 62 1b sub r22, r18
56b8: 73 0b sbc r23, r19
56ba: 84 0b sbc r24, r20
56bc: b1 09 sbc r27, r1
56be: 0a 2a or r0, r26
56c0: 66 0f add r22, r22
56c2: 77 1f adc r23, r23
56c4: 88 1f adc r24, r24
56c6: bb 1f adc r27, r27
56c8: a6 95 lsr r26
56ca: 81 f7 brne .-32 ; 0x56ac <__divsf3x+0x64>
56cc: 08 95 ret
 
000056ce <__fixsfsi>:
56ce: 97 fb bst r25, 7
56d0: 73 d0 rcall .+230 ; 0x57b8 <__fp_split1>
56d2: 9f 37 cpi r25, 0x7F ; 127
56d4: 38 f0 brcs .+14 ; 0x56e4 <__fixsfsi+0x16>
56d6: fe e9 ldi r31, 0x9E ; 158
56d8: f9 1b sub r31, r25
56da: 98 2f mov r25, r24
56dc: 87 2f mov r24, r23
56de: 76 2f mov r23, r22
56e0: 6b 2f mov r22, r27
56e2: 05 c0 rjmp .+10 ; 0x56ee <__fixsfsi+0x20>
56e4: 86 c0 rjmp .+268 ; 0x57f2 <__fp_zero>
56e6: 96 95 lsr r25
56e8: 87 95 ror r24
56ea: 77 95 ror r23
56ec: 67 95 ror r22
56ee: f1 50 subi r31, 0x01 ; 1
56f0: d0 f7 brcc .-12 ; 0x56e6 <__fixsfsi+0x18>
56f2: 3e f4 brtc .+14 ; 0x5702 <__fp_lneg+0xe>
 
000056f4 <__fp_lneg>:
56f4: 90 95 com r25
56f6: 80 95 com r24
56f8: 70 95 com r23
56fa: 61 95 neg r22
56fc: 7f 4f sbci r23, 0xFF ; 255
56fe: 8f 4f sbci r24, 0xFF ; 255
5700: 9f 4f sbci r25, 0xFF ; 255
5702: 08 95 ret
 
00005704 <__floatunssisf>:
5704: e8 94 clt
5706: 03 c0 rjmp .+6 ; 0x570e <__floatsisf+0x6>
 
00005708 <__floatsisf>:
5708: 97 fb bst r25, 7
570a: 0e f4 brtc .+2 ; 0x570e <__floatsisf+0x6>
570c: f3 df rcall .-26 ; 0x56f4 <__fp_lneg>
570e: b6 2f mov r27, r22
5710: 67 2f mov r22, r23
5712: 78 2f mov r23, r24
5714: 89 2f mov r24, r25
5716: 9e e9 ldi r25, 0x9E ; 158
5718: 00 24 eor r0, r0
571a: 27 c0 rjmp .+78 ; 0x576a <__fp_merge>
 
0000571c <__eqsf2>:
571c: 0e d0 rcall .+28 ; 0x573a <.fp_cmp>
571e: 5e f0 brts .+22 ; 0x5736 <__cmpsf2+0xe>
5720: 04 c0 rjmp .+8 ; 0x572a <__cmpsf2+0x2>
 
00005722 <__gesf2>:
5722: 0b d0 rcall .+22 ; 0x573a <.fp_cmp>
5724: 26 f0 brts .+8 ; 0x572e <__cmpsf2+0x6>
5726: 01 c0 rjmp .+2 ; 0x572a <__cmpsf2+0x2>
 
00005728 <__cmpsf2>:
5728: 08 d0 rcall .+16 ; 0x573a <.fp_cmp>
572a: 19 f0 breq .+6 ; 0x5732 <__cmpsf2+0xa>
572c: 20 f4 brcc .+8 ; 0x5736 <__cmpsf2+0xe>
572e: 8f ef ldi r24, 0xFF ; 255
5730: 08 95 ret
5732: 80 e0 ldi r24, 0x00 ; 0
5734: 08 95 ret
5736: 81 e0 ldi r24, 0x01 ; 1
5738: 08 95 ret
 
0000573a <.fp_cmp>:
573a: 97 fb bst r25, 7
573c: 09 2e mov r0, r25
573e: 05 26 eor r0, r21
5740: 00 f8 bld r0, 0
5742: 68 94 set
5744: 30 d0 rcall .+96 ; 0x57a6 <__fp_split2>
5746: e8 94 clt
5748: 07 fc sbrc r0, 7
574a: 07 c0 rjmp .+14 ; 0x575a <.fp_cmp+0x20>
574c: 62 17 cp r22, r18
574e: 73 07 cpc r23, r19
5750: 84 07 cpc r24, r20
5752: 95 07 cpc r25, r21
5754: 21 f0 breq .+8 ; 0x575e <.fp_cmp+0x24>
5756: 08 f4 brcc .+2 ; 0x575a <.fp_cmp+0x20>
5758: 00 94 com r0
575a: 07 94 ror r0
575c: 98 94 clz
575e: 08 95 ret
5760: 9a 95 dec r25
5762: bb 0f add r27, r27
5764: 66 1f adc r22, r22
5766: 77 1f adc r23, r23
5768: 88 1f adc r24, r24
 
0000576a <__fp_merge>:
576a: 11 24 eor r1, r1
576c: 99 23 and r25, r25
576e: a1 f0 breq .+40 ; 0x5798 <__fp_merge+0x2e>
5770: 88 23 and r24, r24
5772: b2 f7 brpl .-20 ; 0x5760 <.fp_cmp+0x26>
5774: 9f 3f cpi r25, 0xFF ; 255
5776: 59 f0 breq .+22 ; 0x578e <__fp_merge+0x24>
5778: bb 0f add r27, r27
577a: 48 f4 brcc .+18 ; 0x578e <__fp_merge+0x24>
577c: 21 f4 brne .+8 ; 0x5786 <__fp_merge+0x1c>
577e: 00 20 and r0, r0
5780: 11 f4 brne .+4 ; 0x5786 <__fp_merge+0x1c>
5782: 60 ff sbrs r22, 0
5784: 04 c0 rjmp .+8 ; 0x578e <__fp_merge+0x24>
5786: 6f 5f subi r22, 0xFF ; 255
5788: 7f 4f sbci r23, 0xFF ; 255
578a: 8f 4f sbci r24, 0xFF ; 255
578c: 9f 4f sbci r25, 0xFF ; 255
578e: 88 1f adc r24, r24
5790: 97 95 ror r25
5792: 87 95 ror r24
5794: 97 f9 bld r25, 7
5796: 08 95 ret
5798: 2c c0 rjmp .+88 ; 0x57f2 <__fp_zero>
 
0000579a <__fp_nan>:
579a: 9f ef ldi r25, 0xFF ; 255
579c: 80 ec ldi r24, 0xC0 ; 192
579e: 08 95 ret
 
000057a0 <__fp_split3>:
57a0: 05 2e mov r0, r21
57a2: 09 26 eor r0, r25
57a4: 07 fa bst r0, 7
 
000057a6 <__fp_split2>:
57a6: 44 0f add r20, r20
57a8: 55 1f adc r21, r21
57aa: 5f 3f cpi r21, 0xFF ; 255
57ac: 79 f0 breq .+30 ; 0x57cc <__fp_split1+0x14>
57ae: aa 27 eor r26, r26
57b0: a5 17 cp r26, r21
57b2: 08 f0 brcs .+2 ; 0x57b6 <__fp_split2+0x10>
57b4: 51 e0 ldi r21, 0x01 ; 1
57b6: 47 95 ror r20
 
000057b8 <__fp_split1>:
57b8: 88 0f add r24, r24
57ba: 99 1f adc r25, r25
57bc: 9f 3f cpi r25, 0xFF ; 255
57be: 31 f0 breq .+12 ; 0x57cc <__fp_split1+0x14>
57c0: bb 27 eor r27, r27
57c2: b9 17 cp r27, r25
57c4: 08 f0 brcs .+2 ; 0x57c8 <__fp_split1+0x10>
57c6: 91 e0 ldi r25, 0x01 ; 1
57c8: 87 95 ror r24
57ca: 08 95 ret
57cc: 9f 91 pop r25
57ce: 9f 91 pop r25
57d0: 11 24 eor r1, r1
57d2: e3 cf rjmp .-58 ; 0x579a <__fp_nan>
 
000057d4 <__fp_split_a>:
57d4: 97 fb bst r25, 7
57d6: 88 0f add r24, r24
57d8: 99 1f adc r25, r25
57da: 9f 3f cpi r25, 0xFF ; 255
57dc: 31 f0 breq .+12 ; 0x57ea <__fp_split_a+0x16>
57de: bb 27 eor r27, r27
57e0: b9 17 cp r27, r25
57e2: 08 f0 brcs .+2 ; 0x57e6 <__fp_split_a+0x12>
57e4: 91 e0 ldi r25, 0x01 ; 1
57e6: 87 95 ror r24
57e8: 08 95 ret
57ea: 9f 91 pop r25
57ec: 9f 91 pop r25
57ee: 11 24 eor r1, r1
57f0: d4 cf rjmp .-88 ; 0x579a <__fp_nan>
 
000057f2 <__fp_zero>:
57f2: 66 27 eor r22, r22
57f4: 77 27 eor r23, r23
57f6: 88 27 eor r24, r24
 
000057f8 <__fp_zerox>:
57f8: 99 27 eor r25, r25
57fa: 08 95 ret
 
000057fc <__mulsf3>:
57fc: d1 df rcall .-94 ; 0x57a0 <__fp_split3>
57fe: 01 d0 rcall .+2 ; 0x5802 <__mulsf3x>
5800: b4 cf rjmp .-152 ; 0x576a <__fp_merge>
 
00005802 <__mulsf3x>:
5802: 99 23 and r25, r25
5804: 39 f0 breq .+14 ; 0x5814 <__mulsf3x+0x12>
5806: 55 23 and r21, r21
5808: 29 f0 breq .+10 ; 0x5814 <__mulsf3x+0x12>
580a: 9f 57 subi r25, 0x7F ; 127
580c: 5f 57 subi r21, 0x7F ; 127
580e: 95 0f add r25, r21
5810: 13 f4 brvc .+4 ; 0x5816 <__mulsf3x+0x14>
5812: 9a f1 brmi .+102 ; 0x587a <__mulsf3x+0x78>
5814: f1 cf rjmp .-30 ; 0x57f8 <__fp_zerox>
5816: 91 58 subi r25, 0x81 ; 129
5818: 9f 3f cpi r25, 0xFF ; 255
581a: e1 f3 breq .-8 ; 0x5814 <__mulsf3x+0x12>
581c: 62 9f mul r22, r18
581e: a1 2d mov r26, r1
5820: 0f 92 push r0
5822: bb 27 eor r27, r27
5824: 63 9f mul r22, r19
5826: a0 0d add r26, r0
5828: b1 1d adc r27, r1
582a: ee 27 eor r30, r30
582c: 72 9f mul r23, r18
582e: a0 0d add r26, r0
5830: b1 1d adc r27, r1
5832: ee 1f adc r30, r30
5834: af 93 push r26
5836: aa 27 eor r26, r26
5838: 64 9f mul r22, r20
583a: b0 0d add r27, r0
583c: e1 1d adc r30, r1
583e: 73 9f mul r23, r19
5840: b0 0d add r27, r0
5842: e1 1d adc r30, r1
5844: aa 1f adc r26, r26
5846: 66 27 eor r22, r22
5848: 82 9f mul r24, r18
584a: b0 0d add r27, r0
584c: e1 1d adc r30, r1
584e: a6 1f adc r26, r22
5850: 55 27 eor r21, r21
5852: 74 9f mul r23, r20
5854: e0 0d add r30, r0
5856: a1 1d adc r26, r1
5858: 55 1f adc r21, r21
585a: 83 9f mul r24, r19
585c: e0 0d add r30, r0
585e: a1 1d adc r26, r1
5860: 56 1f adc r21, r22
5862: 84 9f mul r24, r20
5864: a0 0d add r26, r0
5866: 51 1d adc r21, r1
5868: 85 2f mov r24, r21
586a: 7a 2f mov r23, r26
586c: 6e 2f mov r22, r30
586e: 1f 90 pop r1
5870: 0f 90 pop r0
5872: 88 23 and r24, r24
5874: 1a f4 brpl .+6 ; 0x587c <__mulsf3x+0x7a>
5876: 93 95 inc r25
5878: 39 f4 brne .+14 ; 0x5888 <__mulsf3x+0x86>
587a: 8f cf rjmp .-226 ; 0x579a <__fp_nan>
587c: 00 0c add r0, r0
587e: 11 1c adc r1, r1
5880: bb 1f adc r27, r27
5882: 66 1f adc r22, r22
5884: 77 1f adc r23, r23
5886: 88 1f adc r24, r24
5888: 01 28 or r0, r1
588a: 08 95 ret
 
0000588c <sqrt>:
588c: 97 fd sbrc r25, 7
588e: 85 cf rjmp .-246 ; 0x579a <__fp_nan>
5890: 99 23 and r25, r25
5892: 09 f4 brne .+2 ; 0x5896 <sqrt+0xa>
5894: 08 95 ret
5896: 48 2f mov r20, r24
5898: 9d df rcall .-198 ; 0x57d4 <__fp_split_a>
589a: f9 2f mov r31, r25
589c: ff 57 subi r31, 0x7F ; 127
589e: f5 95 asr r31
58a0: 9f 1b sub r25, r31
58a2: 9f 1b sub r25, r31
58a4: ff 93 push r31
58a6: 61 df rcall .-318 ; 0x576a <__fp_merge>
58a8: ff 92 push r15
58aa: ef 92 push r14
58ac: df 92 push r13
58ae: cf 92 push r12
58b0: bf 92 push r11
58b2: af 92 push r10
58b4: 9f 92 push r9
58b6: 8f 92 push r8
58b8: 6b 01 movw r12, r22
58ba: 7c 01 movw r14, r24
58bc: 40 58 subi r20, 0x80 ; 128
58be: 47 95 ror r20
58c0: 33 27 eor r19, r19
58c2: 22 27 eor r18, r18
58c4: 40 68 ori r20, 0x80 ; 128
58c6: 5f e3 ldi r21, 0x3F ; 63
58c8: b6 01 movw r22, r12
58ca: c7 01 movw r24, r14
58cc: 49 01 movw r8, r18
58ce: 5a 01 movw r10, r20
58d0: 0e 94 21 2b call 0x5642 ; 0x5642 <__divsf3>
58d4: 94 01 movw r18, r8
58d6: a5 01 movw r20, r10
58d8: 0e 94 df 2a call 0x55be ; 0x55be <__addsf3>
58dc: 4f ef ldi r20, 0xFF ; 255
58de: 5f ef ldi r21, 0xFF ; 255
58e0: 13 d0 rcall .+38 ; 0x5908 <ldexp>
58e2: 9b 01 movw r18, r22
58e4: ac 01 movw r20, r24
58e6: 82 16 cp r8, r18
58e8: 93 06 cpc r9, r19
58ea: a4 06 cpc r10, r20
58ec: b5 06 cpc r11, r21
58ee: 61 f7 brne .-40 ; 0x58c8 <sqrt+0x3c>
58f0: 8f 90 pop r8
58f2: 9f 90 pop r9
58f4: af 90 pop r10
58f6: bf 90 pop r11
58f8: cf 90 pop r12
58fa: df 90 pop r13
58fc: ef 90 pop r14
58fe: ff 90 pop r15
5900: 5f 91 pop r21
5902: 68 df rcall .-304 ; 0x57d4 <__fp_split_a>
5904: 95 0f add r25, r21
5906: 31 cf rjmp .-414 ; 0x576a <__fp_merge>
 
00005908 <ldexp>:
5908: 65 df rcall .-310 ; 0x57d4 <__fp_split_a>
590a: 99 23 and r25, r25
590c: 59 f0 breq .+22 ; 0x5924 <ldexp+0x1c>
590e: aa 27 eor r26, r26
5910: 94 0f add r25, r20
5912: a5 1f adc r26, r21
5914: 43 f0 brvs .+16 ; 0x5926 <ldexp+0x1e>
5916: 32 f0 brmi .+12 ; 0x5924 <ldexp+0x1c>
5918: 4f ef ldi r20, 0xFF ; 255
591a: 50 e0 ldi r21, 0x00 ; 0
591c: 94 17 cp r25, r20
591e: a5 07 cpc r26, r21
5920: 14 f4 brge .+4 ; 0x5926 <ldexp+0x1e>
5922: 23 cf rjmp .-442 ; 0x576a <__fp_merge>
5924: 66 cf rjmp .-308 ; 0x57f2 <__fp_zero>
5926: 0e f0 brts .+2 ; 0x592a <ldexp+0x22>
5928: 06 c0 rjmp .+12 ; 0x5936 <__fp_p_inf>
592a: 00 c0 rjmp .+0 ; 0x592c <__fp_m_inf>
 
0000592c <__fp_m_inf>:
592c: 9f ef ldi r25, 0xFF ; 255
592e: 80 e8 ldi r24, 0x80 ; 128
5930: 70 e0 ldi r23, 0x00 ; 0
5932: 60 e0 ldi r22, 0x00 ; 0
5934: 08 95 ret
 
00005936 <__fp_p_inf>:
5936: 9f e7 ldi r25, 0x7F ; 127
5938: 80 e8 ldi r24, 0x80 ; 128
593a: 70 e0 ldi r23, 0x00 ; 0
593c: 60 e0 ldi r22, 0x00 ; 0
593e: 08 95 ret
 
00005940 <__mulsi3>:
5940: 62 9f mul r22, r18
5942: d0 01 movw r26, r0
5944: 73 9f mul r23, r19
5946: f0 01 movw r30, r0
5948: 82 9f mul r24, r18
594a: e0 0d add r30, r0
594c: f1 1d adc r31, r1
594e: 64 9f mul r22, r20
5950: e0 0d add r30, r0
5952: f1 1d adc r31, r1
5954: 92 9f mul r25, r18
5956: f0 0d add r31, r0
5958: 83 9f mul r24, r19
595a: f0 0d add r31, r0
595c: 74 9f mul r23, r20
595e: f0 0d add r31, r0
5960: 65 9f mul r22, r21
5962: f0 0d add r31, r0
5964: 99 27 eor r25, r25
5966: 72 9f mul r23, r18
5968: b0 0d add r27, r0
596a: e1 1d adc r30, r1
596c: f9 1f adc r31, r25
596e: 63 9f mul r22, r19
5970: b0 0d add r27, r0
5972: e1 1d adc r30, r1
5974: f9 1f adc r31, r25
5976: bd 01 movw r22, r26
5978: cf 01 movw r24, r30
597a: 11 24 eor r1, r1
597c: 08 95 ret
 
0000597e <__udivmodhi4>:
597e: aa 1b sub r26, r26
5980: bb 1b sub r27, r27
5982: 51 e1 ldi r21, 0x11 ; 17
5984: 07 c0 rjmp .+14 ; 0x5994 <__udivmodhi4_ep>
 
00005986 <__udivmodhi4_loop>:
5986: aa 1f adc r26, r26
5988: bb 1f adc r27, r27
598a: a6 17 cp r26, r22
598c: b7 07 cpc r27, r23
598e: 10 f0 brcs .+4 ; 0x5994 <__udivmodhi4_ep>
5990: a6 1b sub r26, r22
5992: b7 0b sbc r27, r23
 
00005994 <__udivmodhi4_ep>:
5994: 88 1f adc r24, r24
5996: 99 1f adc r25, r25
5998: 5a 95 dec r21
599a: a9 f7 brne .-22 ; 0x5986 <__udivmodhi4_loop>
599c: 80 95 com r24
599e: 90 95 com r25
59a0: bc 01 movw r22, r24
59a2: cd 01 movw r24, r26
59a4: 08 95 ret
 
000059a6 <__divmodhi4>:
59a6: 97 fb bst r25, 7
59a8: 09 2e mov r0, r25
59aa: 07 26 eor r0, r23
59ac: 0a d0 rcall .+20 ; 0x59c2 <__divmodhi4_neg1>
59ae: 77 fd sbrc r23, 7
59b0: 04 d0 rcall .+8 ; 0x59ba <__divmodhi4_neg2>
59b2: e5 df rcall .-54 ; 0x597e <__udivmodhi4>
59b4: 06 d0 rcall .+12 ; 0x59c2 <__divmodhi4_neg1>
59b6: 00 20 and r0, r0
59b8: 1a f4 brpl .+6 ; 0x59c0 <__divmodhi4_exit>
 
000059ba <__divmodhi4_neg2>:
59ba: 70 95 com r23
59bc: 61 95 neg r22
59be: 7f 4f sbci r23, 0xFF ; 255
 
000059c0 <__divmodhi4_exit>:
59c0: 08 95 ret
 
000059c2 <__divmodhi4_neg1>:
59c2: f6 f7 brtc .-4 ; 0x59c0 <__divmodhi4_exit>
59c4: 90 95 com r25
59c6: 81 95 neg r24
59c8: 9f 4f sbci r25, 0xFF ; 255
59ca: 08 95 ret
 
000059cc <__udivmodsi4>:
59cc: a1 e2 ldi r26, 0x21 ; 33
59ce: 1a 2e mov r1, r26
59d0: aa 1b sub r26, r26
59d2: bb 1b sub r27, r27
59d4: fd 01 movw r30, r26
59d6: 0d c0 rjmp .+26 ; 0x59f2 <__udivmodsi4_ep>
 
000059d8 <__udivmodsi4_loop>:
59d8: aa 1f adc r26, r26
59da: bb 1f adc r27, r27
59dc: ee 1f adc r30, r30
59de: ff 1f adc r31, r31
59e0: a2 17 cp r26, r18
59e2: b3 07 cpc r27, r19
59e4: e4 07 cpc r30, r20
59e6: f5 07 cpc r31, r21
59e8: 20 f0 brcs .+8 ; 0x59f2 <__udivmodsi4_ep>
59ea: a2 1b sub r26, r18
59ec: b3 0b sbc r27, r19
59ee: e4 0b sbc r30, r20
59f0: f5 0b sbc r31, r21
 
000059f2 <__udivmodsi4_ep>:
59f2: 66 1f adc r22, r22
59f4: 77 1f adc r23, r23
59f6: 88 1f adc r24, r24
59f8: 99 1f adc r25, r25
59fa: 1a 94 dec r1
59fc: 69 f7 brne .-38 ; 0x59d8 <__udivmodsi4_loop>
59fe: 60 95 com r22
5a00: 70 95 com r23
5a02: 80 95 com r24
5a04: 90 95 com r25
5a06: 9b 01 movw r18, r22
5a08: ac 01 movw r20, r24
5a0a: bd 01 movw r22, r26
5a0c: cf 01 movw r24, r30
5a0e: 08 95 ret
 
00005a10 <__divmodsi4>:
5a10: 97 fb bst r25, 7
5a12: 09 2e mov r0, r25
5a14: 05 26 eor r0, r21
5a16: 0e d0 rcall .+28 ; 0x5a34 <__divmodsi4_neg1>
5a18: 57 fd sbrc r21, 7
5a1a: 04 d0 rcall .+8 ; 0x5a24 <__divmodsi4_neg2>
5a1c: d7 df rcall .-82 ; 0x59cc <__udivmodsi4>
5a1e: 0a d0 rcall .+20 ; 0x5a34 <__divmodsi4_neg1>
5a20: 00 1c adc r0, r0
5a22: 38 f4 brcc .+14 ; 0x5a32 <__divmodsi4_exit>
 
00005a24 <__divmodsi4_neg2>:
5a24: 50 95 com r21
5a26: 40 95 com r20
5a28: 30 95 com r19
5a2a: 21 95 neg r18
5a2c: 3f 4f sbci r19, 0xFF ; 255
5a2e: 4f 4f sbci r20, 0xFF ; 255
5a30: 5f 4f sbci r21, 0xFF ; 255
 
00005a32 <__divmodsi4_exit>:
5a32: 08 95 ret
 
00005a34 <__divmodsi4_neg1>:
5a34: f6 f7 brtc .-4 ; 0x5a32 <__divmodsi4_exit>
5a36: 90 95 com r25
5a38: 80 95 com r24
5a3a: 70 95 com r23
5a3c: 61 95 neg r22
5a3e: 7f 4f sbci r23, 0xFF ; 255
5a40: 8f 4f sbci r24, 0xFF ; 255
5a42: 9f 4f sbci r25, 0xFF ; 255
5a44: 08 95 ret
 
00005a46 <__eeprom_read_byte_1F2021>:
5a46: f9 99 sbic 0x1f, 1 ; 31
5a48: fe cf rjmp .-4 ; 0x5a46 <__eeprom_read_byte_1F2021>
5a4a: b2 bd out 0x22, r27 ; 34
5a4c: a1 bd out 0x21, r26 ; 33
5a4e: f8 9a sbi 0x1f, 0 ; 31
5a50: 11 96 adiw r26, 0x01 ; 1
5a52: 00 b4 in r0, 0x20 ; 32
5a54: 08 95 ret
 
00005a56 <__eeprom_write_byte_1F2021>:
5a56: f9 99 sbic 0x1f, 1 ; 31
5a58: fe cf rjmp .-4 ; 0x5a56 <__eeprom_write_byte_1F2021>
5a5a: b2 bd out 0x22, r27 ; 34
5a5c: a1 bd out 0x21, r26 ; 33
5a5e: 00 bc out 0x20, r0 ; 32
5a60: 11 96 adiw r26, 0x01 ; 1
5a62: 0f b6 in r0, 0x3f ; 63
5a64: f8 94 cli
5a66: fa 9a sbi 0x1f, 2 ; 31
5a68: f9 9a sbi 0x1f, 1 ; 31
5a6a: 0f be out 0x3f, r0 ; 63
5a6c: 08 95 ret
 
00005a6e <_exit>:
5a6e: ff cf rjmp .-2 ; 0x5a6e <_exit>
/branches/chris_hallo2/Flight-Ctrl_MEGA644_V0_60.map
0,0 → 1,1747
Archive member included because of file (symbol)
 
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
analog.o (__subsf3)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
fc.o (__divsf3)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
analog.o (__fixsfsi)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
analog.o (__floatsisf)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
analog.o (__ltsf2)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_merge)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o) (__fp_nanx)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_split3)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o) (__fp_zero)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
fc.o (__mulsf3)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
GPS.o (sqrt)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o) (ldexp)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_m_inf.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o) (__fp_m_inf)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_p_inf.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o) (__fp_p_inf)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
timer0.o (__mulsi3)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
analog.o (__udivmodhi4)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
timer0.o (__divmodhi4)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
printf_P.o (__udivmodsi4)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
timer0.o (__divmodsi4)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o (exit)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
main.o (__do_copy_data)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
printf_P.o (memchr)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
main.o (__eeprom_read_byte_1F2021)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
main.o (__eeprom_write_byte_1F2021)
 
Allocating common symbols
Common symbol size file
 
durchschnitt_easting
0x4 main.o
ubxEp 0x2 uart.o
MeineSlaveAdresse 0x1 uart.o
CK_A 0x1 uart.o
EE_Parameter 0x3a fc.o
DiffRoll 0x2 main.o
MesswertRoll 0x2 fc.o
Motor_Vorne 0x1 main.o
Motor_Hinten 0x1 main.o
MesswertNick 0x2 fc.o
Aktuell_ay 0x2 analog.o
MIN_GAS 0x1 fc.o
SendeBuffer 0x96 uart.o
NMEABuffer 0x96 uart.o
Mittelwert_AccHoch 0x2 fc.o
Debug_Timer 0x2 uart.o
CK_B 0x1 uart.o
DiffNick 0x2 main.o
navStatus 0x11 uart.o
DebugIn 0xb uart.o
VersionInfo 0xa uart.o
rollOffset 0x4 uart.o
motor_rx 0x8 twimaster.o
PPM_in 0x16 rc.o
IntegralFaktor 0x4 fc.o
Motor_Rechts 0x1 main.o
Count 0x1 main.o
Aktuell_az 0x2 analog.o
ubxP 0x2 uart.o
StartLuftdruck 0x2 analog.o
navVelECEF 0x15 uart.o
RxdBuffer 0x96 uart.o
durchschnitt_northing
0x4 main.o
ubxSp 0x2 uart.o
skal 0x2 main.o
gps_p 0x2 main.o
gps_d 0x2 main.o
PrintZiel 0x1 printf_P.o
Aktuell_Nick 0x2 analog.o
messanzahl_Druck 0x1 analog.o
Motor_Links 0x1 main.o
Aktuell_Roll 0x2 analog.o
msgLen 0x2 uart.o
nickOffset 0x4 uart.o
Aktuell_ax 0x2 analog.o
navPosECEF 0x15 uart.o
s 0x1 main.o
h 0x1 main.o
Mittelwert_AccNick 0x2 fc.o
DebugOut 0x32 uart.o
gps_gethome 0x2 main.o
DruckOffsetSetting 0x1 analog.o
actualPos 0x1a uart.o
Aktuell_Gier 0x2 analog.o
msgID 0x1 uart.o
MAX_GAS 0x1 fc.o
MesswertGier 0x2 fc.o
GyroFaktor 0x4 fc.o
m 0x1 main.o
Mittelwert_AccRoll 0x2 fc.o
ignorePacket 0x1 uart.o
MotorWert 0x5 main.o
PPM_diff 0x16 rc.o
tmpLuftdruck 0x2 analog.o
 
Discarded input sections
 
.stabstr 0x00000000 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00020000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
Address of section .data set to 0x800100
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
LOAD main.o
LOAD uart.o
LOAD printf_P.o
LOAD timer0.o
LOAD analog.o
LOAD menu.o
LOAD twimaster.o
LOAD rc.o
LOAD fc.o
LOAD GPS.o
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a
LOAD c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a
 
.hash
*(.hash)
 
.dynsym
*(.dynsym)
 
.dynstr
*(.dynstr)
 
.gnu.version
*(.gnu.version)
 
.gnu.version_d
*(.gnu.version_d)
 
.gnu.version_r
*(.gnu.version_r)
 
.rel.init
*(.rel.init)
 
.rela.init
*(.rela.init)
 
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
 
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
 
.rel.fini
*(.rel.fini)
 
.rela.fini
*(.rela.fini)
 
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
 
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
 
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
 
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
 
.rel.ctors
*(.rel.ctors)
 
.rela.ctors
*(.rela.ctors)
 
.rel.dtors
*(.rel.dtors)
 
.rela.dtors
*(.rela.dtors)
 
.rel.got
*(.rel.got)
 
.rela.got
*(.rela.got)
 
.rel.bss
*(.rel.bss)
 
.rela.bss
*(.rela.bss)
 
.rel.plt
*(.rel.plt)
 
.rela.plt
*(.rela.plt)
 
.text 0x00000000 0x5a70
*(.vectors)
.vectors 0x00000000 0x70 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
0x00000000 __vectors
0x00000000 __vector_default
*(.vectors)
*(.progmem.gcc*)
*(.progmem*)
.progmem.data 0x00000070 0xcb main.o
.progmem.data 0x0000013b 0x2 analog.o
.progmem.data 0x0000013d 0x274 menu.o
0x000003b2 . = ALIGN (0x2)
*fill* 0x000003b1 0x1 00
0x000003b2 __trampolines_start = .
*(.trampolines)
.trampolines 0x000003b2 0x0 linker stubs
*(.trampolines*)
0x000003b2 __trampolines_end = .
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x000003b2 __ctors_start = .
*(.ctors)
0x000003b2 __ctors_end = .
0x000003b2 __dtors_start = .
*(.dtors)
0x000003b2 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x000003b2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
0x000003b2 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x000003b2 0xc c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x000003be 0x16 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
0x000003be __do_copy_data
.init4 0x000003d4 0x10 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
0x000003d4 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x000003e4 0x8 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
*(.init9)
*(.text)
.text 0x000003ec 0x4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
0x000003ec __vector_1
0x000003ec __bad_interrupt
0x000003ec __vector_6
0x000003ec __vector_3
0x000003ec __vector_23
0x000003ec __vector_25
0x000003ec __vector_11
0x000003ec __vector_13
0x000003ec __vector_17
0x000003ec __vector_19
0x000003ec __vector_7
0x000003ec __vector_27
0x000003ec __vector_5
0x000003ec __vector_4
0x000003ec __vector_2
0x000003ec __vector_21
0x000003ec __vector_15
0x000003ec __vector_8
0x000003ec __vector_14
0x000003ec __vector_10
0x000003ec __vector_16
.text 0x000003f0 0x334 main.o
0x000003fe WriteParameterSet
0x0000042e ReadParameterSet
0x0000045a main
0x000003f0 GetActiveParamSetNumber
.text 0x00000724 0x9b0 uart.o
0x00000724 __vector_22
0x00000e58 WriteProgramData
0x00000e5a UART_Init
0x00000790 GPSscanData
0x00000f70 BearbeiteRxDaten
0x00000c5a AddCRC
0x00000e94 DatenUebertragung
0x00000d86 Decode64
0x00000cb6 SendOutData
0x00000886 __vector_20
0x00000e36 uart_putchar
.text 0x000010d4 0x5fa printf_P.o
0x000010d4 Putchar
0x00001186 _printf_P
0x00001106 PAD_0
0x00001132 PRINTP
0x0000115e PRINT
0x0000111c PAD_SP
.text 0x000016ce 0x31e timer0.o
0x000017f6 SetDelay
0x0000197a Timer_Init
0x00001808 CheckDelay
0x000019c8 Delay_ms
0x00001820 __vector_9
0x000016ce __vector_18
.text 0x000019ec 0x6a2 analog.o
0x000019f8 __vector_24
0x000019ec ADC_Init
0x00002040 SucheLuftruckOffset
.text 0x0000208e 0x79a menu.o
0x0000208e LcdClear
0x000020a0 Menu
.text 0x00002828 0x170 twimaster.o
0x00002834 i2c_start
0x00002840 i2c_stop
0x00002828 i2c_init
0x0000285c __vector_26
0x00002848 i2c_write_byte
.text 0x00002998 0x168 rc.o
0x000029c2 __vector_12
0x00002998 rc_sum_init
.text 0x00002b00 0x2754 fc.o
0x0000392e DefaultKonstanten1
0x00003a10 SendMotorData
0x00002b00 Mittelwert
0x00003c96 Piep
0x00003082 CalibrierMittelwert
0x00003a9e SetNeutral
0x00003854 DefaultKonstanten2
0x000033ba ParameterZuordnung
0x00003cc0 MotorRegler
.text 0x00005254 0x34e GPS.o
0x00005254 gps_main
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_m_inf.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_p_inf.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.text 0x000055a2 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.text 0x000055a2 0x1a c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
0x000055a2 memchr
.text 0x000055bc 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
.text 0x000055bc 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
0x000055bc . = ALIGN (0x2)
*(.text.*)
.text.fplib 0x000055bc 0xa c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
0x000055bc __subsf3
0x000055be __addsf3
.text.fplib 0x000055c6 0x7c c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
0x000055c6 __addsf3x
.text.fplib 0x00005642 0x6 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
0x00005642 __divsf3
.text.fplib 0x00005648 0x86 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
0x00005648 __divsf3x
.text.fplib 0x000056ce 0x36 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
0x000056ce __fixsfsi
0x000056f4 __fp_lneg
0x000056ce __fixunssfsi
.text.fplib 0x00005704 0x18 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
0x00005708 __floatsisf
0x00005704 __floatunssisf
.text.fplib 0x0000571c 0x44 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
0x0000571c __lesf2
0x0000571c __nesf2
0x00005722 __gtsf2
0x0000571c __eqsf2
0x00005728 __cmpsf2
0x0000571c __ltsf2
0x00005722 __gesf2
.text.fplib 0x00005760 0x3a c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
0x0000576a __fp_merge
.text.fplib 0x0000579a 0x6 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
0x0000579a __fp_nanERANGE
0x0000579a __fp_nan
0x0000579a __fp_nanEDOM
0x0000579a __fp_nanx
.text.fplib 0x000057a0 0x52 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
0x000057a0 __fp_split3
0x000057a6 __fp_split2
0x000057b8 __fp_split1
0x000057d4 __fp_split_a
.text.fplib 0x000057f2 0xa c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
0x000057f2 __fp_zero
0x000057f8 __fp_zerox
.text.fplib 0x000057fc 0x6 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
0x000057fc __mulsf3
.text.fplib 0x00005802 0x8a c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
0x00005802 __mulsf3x
.text.fplib 0x0000588c 0x7c c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
0x0000588c sqrt
.text.fplib 0x00005908 0x24 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
0x00005908 ldexp
.text.fplib 0x0000592c 0xa c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_m_inf.o)
0x0000592c __fp_m_inf
.text.fplib 0x00005936 0xa c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_p_inf.o)
0x00005936 __fp_p_inf
.text.libgcc 0x00005940 0x3e c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
0x00005940 __mulsi3
.text.libgcc 0x0000597e 0x28 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
0x0000597e __udivmodhi4
.text.libgcc 0x000059a6 0x26 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
0x000059a6 __divmodhi4
0x000059a6 _div
.text.libgcc 0x000059cc 0x44 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
0x000059cc __udivmodsi4
.text.libgcc 0x00005a10 0x36 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
0x00005a10 __divmodsi4
.text.libgcc 0x00005a46 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.text.libgcc 0x00005a46 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.text.libgcc 0x00005a46 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.text.eeprom 0x00005a46 0x10 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
0x00005a46 __eeprom_read_byte_1F2021
.text.eeprom 0x00005a56 0x18 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
0x00005a56 __eeprom_write_byte_1F2021
0x00005a6e . = ALIGN (0x2)
*(.fini9)
.fini9 0x00005a6e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
0x00005a6e exit
0x00005a6e _exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00005a6e 0x2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
*(.fini0)
0x00005a70 _etext = .
 
.data 0x00800100 0x8e load address 0x00005a70
0x00800100 PROVIDE (__data_start, .)
*(.data)
.data 0x00800100 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
.data 0x00800100 0x0 main.o
.data 0x00800100 0x2 uart.o
0x00800101 PcZugriff
0x00800100 UebertragungAbgeschlossen
.data 0x00800102 0x0 printf_P.o
.data 0x00800102 0x2 timer0.o
.data 0x00800104 0x8 analog.o
0x00800104 UBat
0x0080010a MessLuftdruck
0x00800106 Luftdruck
.data 0x0080010c 0x5b menu.o
0x0080010c Array
0x00800116 DisplayBuff
.data 0x00800167 0x0 twimaster.o
.data 0x00800167 0x1 rc.o
0x00800167 NewPpmData
.data 0x00800168 0x22 fc.o
0x0080017c Ki
0x00800180 Parameter_Luftdruck_D
0x00800184 Parameter_KompassWirkung
0x00800189 Parameter_ServoNickControl
0x00800185 Parameter_Gyro_P
0x00800182 Parameter_Hoehe_P
0x00800183 Parameter_Hoehe_ACC_Wirkung
0x00800186 Parameter_Gyro_I
0x00800181 Parameter_MaxHoehe
0x00800188 Parameter_I_Faktor
0x00800178 Kp
0x00800187 Parameter_Gier_P
.data 0x0080018a 0x4 GPS.o
0x0080018c gpsmax
0x0080018a gps_getpos
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_m_inf.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_p_inf.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
.data 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
*(.data*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.d*)
0x0080018e . = ALIGN (0x2)
0x0080018e _edata = .
0x0080018e PROVIDE (__data_end, .)
 
.bss 0x0080018e 0x42f
0x0080018e PROVIDE (__bss_start, .)
*(.bss)
.bss 0x0080018e 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
.bss 0x0080018e 0x0 main.o
.bss 0x0080018e 0x18 uart.o
0x0080018e DebugGetAnforderung
0x00800192 SioTmp
0x00800197 PC_DebugTimeout
0x00800191 GetVersionAnforderung
0x00800194 NeueKoordinateEmpfangen
0x00800190 DebugDataAnforderung
0x00800198 MotorTest
0x00800193 NeuerDatensatzEmpfangen
0x0080018f DebugDisplayAnforderung
0x00800195 CntCrcError
0x00800196 AnzahlEmpfangsBytes
.bss 0x008001a6 0x0 printf_P.o
.bss 0x008001a6 0xc timer0.o
0x008001ab beeptime
0x008001a6 CountMilliseconds
0x008001a9 cntKompass
0x008001a8 UpdateMotor
0x008001ad ServoValue
.bss 0x008001b2 0x18 analog.o
0x008001c4 HoeheD
0x008001b6 AccumulateGier
0x008001c1 messanzahl_AccNick
0x008001c3 messanzahl_AccHoch
0x008001b4 AccumulateRoll
0x008001c6 ZaehlMessungen
0x008001bc accumulate_AccHoch
0x008001c2 messanzahl_AccRoll
0x008001b8 accumulate_AccRoll
0x008001be MessanzahlNick
0x008001c0 MessanzahlGier
0x008001ba accumulate_AccNick
0x008001b2 AccumulateNick
0x008001bf MessanzahlRoll
.bss 0x008001ca 0x5 menu.o
0x008001cc DispPtr
0x008001cd RemoteTasten
0x008001ca TestInt
.bss 0x008001cf 0x3 twimaster.o
0x008001cf twi_state
0x008001d1 motorread
0x008001d0 motor
.bss 0x008001d2 0x4 rc.o
.bss 0x008001d6 0x86 fc.o
0x0080020f Mess_Integral_Gier2
0x0080022c StickGier
0x008001ff Mess_IntegralNick2
0x008001eb IntegralNick2
0x00800227 SenderOkay
0x008001f7 Integral_Gier
0x00800228 StickNick
0x00800221 Poti2
0x0080022e MotorenEin
0x008001e5 CosinusNickWinkel
0x0080022f HoehenWert
0x00800207 Mess_IntegralRoll2
0x00800223 Poti3
0x00800233 Parameter_UserParam1
0x008001d9 AdNeutralRoll
0x0080021d Notlandung
0x008001e7 IntegralNick
0x00800213 Mess_Integral_Hoch
0x008001dd NeutralAccX
0x0080020b Mess_Integral_Gier
0x00800236 Parameter_UserParam4
0x00800219 KompassStartwert
0x00800234 Parameter_UserParam2
0x00800217 KompassValue
0x0080021b KompassRichtung
0x00800203 Mess_IntegralRoll
0x0080022a StickRoll
0x008001d7 AdNeutralNick
0x008001df NeutralAccY
0x008001e1 NeutralAccZ
0x008001d6 Timeout
0x008001f3 IntegralRoll2
0x0080021f Poti1
0x00800235 Parameter_UserParam3
0x008001db AdNeutralGier
0x008001e6 CosinusRollWinkel
0x0080021e HoehenReglerAktiv
0x00800231 SollHoehe
0x00800225 Poti4
0x008001fb Mess_IntegralNick
0x008001ef IntegralRoll
.bss 0x0080025c 0x34 GPS.o
0x0080027a zwn2
0x00800286 gps_home_y
0x0080025c target_x
0x00800282 gps_home_x
0x00800264 target_z
0x00800260 target_y
0x0080028a komp_dreh
0x0080028c GPS_Nick
0x0080026e zwe
0x00800272 zwn1
0x00800276 zwe1
0x0080027e zwe2
0x0080028e GPS_Roll
0x0080026a zwn
0x00800268 alpha
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_m_inf.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_p_inf.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
.bss 0x00800290 0x0 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
*(.bss*)
*(COMMON)
COMMON 0x00800290 0x21 main.o
0x00800290 durchschnitt_easting
0x00800294 DiffRoll
0x00800296 Motor_Vorne
0x00800297 Motor_Hinten
0x00800298 DiffNick
0x0080029a Motor_Rechts
0x0080029b Count
0x0080029c durchschnitt_northing
0x008002a0 skal
0x008002a2 gps_p
0x008002a4 gps_d
0x008002a6 Motor_Links
0x008002a7 s
0x008002a8 h
0x008002a9 gps_gethome
0x008002ab m
0x008002ac MotorWert
COMMON 0x008002b1 0x275 uart.o
0x008002b1 ubxEp
0x008002b3 MeineSlaveAdresse
0x008002b4 CK_A
0x008002b5 SendeBuffer
0x0080034b NMEABuffer
0x008003e1 Debug_Timer
0x008003e3 CK_B
0x008003e4 navStatus
0x008003f5 DebugIn
0x00800400 VersionInfo
0x0080040a rollOffset
0x0080040e ubxP
0x00800410 navVelECEF
0x00800425 RxdBuffer
0x008004bb ubxSp
0x008004bd msgLen
0x008004bf nickOffset
0x008004c3 navPosECEF
0x008004d8 DebugOut
0x0080050a actualPos
0x00800524 msgID
0x00800525 ignorePacket
COMMON 0x00800526 0x1 printf_P.o
0x00800526 PrintZiel
COMMON 0x00800527 0x12 analog.o
0x00800527 Aktuell_ay
0x00800529 Aktuell_az
0x0080052b StartLuftdruck
0x0080052d Aktuell_Nick
0x0080052f messanzahl_Druck
0x00800530 Aktuell_Roll
0x00800532 Aktuell_ax
0x00800534 DruckOffsetSetting
0x00800535 Aktuell_Gier
0x00800537 tmpLuftdruck
COMMON 0x00800539 0x8 twimaster.o
0x00800539 motor_rx
COMMON 0x00800541 0x2c rc.o
0x00800541 PPM_in
0x00800557 PPM_diff
COMMON 0x0080056d 0x50 fc.o
0x0080056d EE_Parameter
0x008005a7 MesswertRoll
0x008005a9 MesswertNick
0x008005ab MIN_GAS
0x008005ac Mittelwert_AccHoch
0x008005ae IntegralFaktor
0x008005b2 Mittelwert_AccNick
0x008005b4 MAX_GAS
0x008005b5 MesswertGier
0x008005b7 GyroFaktor
0x008005bb Mittelwert_AccRoll
0x008005bd PROVIDE (__bss_end, .)
0x00005a70 __data_load_start = LOADADDR (.data)
0x00005afe __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x008005bd 0x0
0x008005bd PROVIDE (__noinit_start, .)
*(.noinit*)
0x008005bd PROVIDE (__noinit_end, .)
0x008005bd _end = .
0x008005bd PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x800
*(.eeprom*)
.eeprom 0x00810000 0x800 main.o
0x00810000 EEPromArray
0x00810800 __eeprom_end = .
 
.stab 0x00000000 0x378
*(.stab)
.stab 0x00000000 0x378 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
 
.stabstr 0x00000000 0x71
*(.stabstr)
.stabstr 0x00000000 0x71 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
 
.stab.excl
*(.stab.excl)
 
.stab.exclstr
*(.stab.exclstr)
 
.stab.index
*(.stab.index)
 
.stab.indexstr
*(.stab.indexstr)
 
.comment
*(.comment)
 
.debug
*(.debug)
 
.line
*(.line)
 
.debug_srcinfo
*(.debug_srcinfo)
 
.debug_sfnames
*(.debug_sfnames)
 
.debug_aranges
*(.debug_aranges)
 
.debug_pubnames
*(.debug_pubnames)
 
.debug_info
*(.debug_info)
*(.gnu.linkonce.wi.*)
 
.debug_abbrev
*(.debug_abbrev)
 
.debug_line
*(.debug_line)
 
.debug_frame
*(.debug_frame)
 
.debug_str
*(.debug_str)
 
.debug_loc
*(.debug_loc)
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(Flight-Ctrl_MEGA644_V0_60.elf elf32-avr)
LOAD linker stubs
 
Cross Reference Table
 
Symbol File
ADC_Init analog.o
main.o
AccumulateGier analog.o
fc.o
menu.o
AccumulateNick analog.o
fc.o
menu.o
AccumulateRoll analog.o
fc.o
menu.o
AdNeutralGier fc.o
rc.o
menu.o
analog.o
AdNeutralNick fc.o
rc.o
menu.o
analog.o
AdNeutralRoll fc.o
rc.o
menu.o
analog.o
AddCRC uart.o
Aktuell_Gier analog.o
Aktuell_Nick analog.o
Aktuell_Roll analog.o
Aktuell_ax analog.o
Aktuell_ay analog.o
Aktuell_az fc.o
menu.o
analog.o
AnzahlEmpfangsBytes uart.o
Array menu.o
BearbeiteRxDaten uart.o
main.o
CK_A uart.o
CK_B uart.o
CalibrierMittelwert fc.o
CheckDelay timer0.o
fc.o
uart.o
main.o
CntCrcError uart.o
CosinusNickWinkel fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
CosinusRollWinkel fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Count GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
CountMilliseconds timer0.o
DatenUebertragung uart.o
main.o
DebugDataAnforderung uart.o
DebugDisplayAnforderung uart.o
DebugGetAnforderung uart.o
DebugIn uart.o
main.o
DebugOut fc.o
timer0.o
uart.o
Debug_Timer uart.o
Decode64 uart.o
DefaultKonstanten1 fc.o
main.o
DefaultKonstanten2 fc.o
main.o
Delay_ms timer0.o
fc.o
analog.o
DiffNick GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
DiffRoll GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
DispPtr menu.o
printf_P.o
DisplayBuff menu.o
printf_P.o
uart.o
DruckOffsetSetting menu.o
analog.o
EEPromArray main.o
fc.o
uart.o
EE_Parameter fc.o
menu.o
timer0.o
uart.o
main.o
GPS_Nick GPS.o
fc.o
GPS_Roll GPS.o
fc.o
GPSscanData uart.o
GetActiveParamSetNumber main.o
fc.o
menu.o
uart.o
GetVersionAnforderung uart.o
GyroFaktor fc.o
HoeheD analog.o
fc.o
HoehenReglerAktiv fc.o
HoehenWert fc.o
menu.o
analog.o
IntegralFaktor fc.o
IntegralNick fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
IntegralNick2 fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
IntegralRoll fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
IntegralRoll2 fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Integral_Gier fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Ki fc.o
KompassRichtung fc.o
menu.o
timer0.o
KompassStartwert fc.o
menu.o
timer0.o
KompassValue fc.o
menu.o
timer0.o
Kp fc.o
LcdClear menu.o
main.o
Luftdruck analog.o
fc.o
MAX_GAS fc.o
MIN_GAS fc.o
MeineSlaveAdresse uart.o
Menu menu.o
uart.o
MessLuftdruck analog.o
fc.o
menu.o
Mess_IntegralNick fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Mess_IntegralNick2 fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Mess_IntegralRoll fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Mess_IntegralRoll2 fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Mess_Integral_Gier fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Mess_Integral_Gier2 fc.o
analog.o
Mess_Integral_Hoch fc.o
analog.o
MessanzahlGier analog.o
fc.o
menu.o
MessanzahlNick analog.o
fc.o
menu.o
MessanzahlRoll analog.o
fc.o
menu.o
MesswertGier fc.o
MesswertNick fc.o
MesswertRoll fc.o
Mittelwert fc.o
Mittelwert_AccHoch fc.o
Mittelwert_AccNick fc.o
Mittelwert_AccRoll fc.o
MotorRegler fc.o
main.o
MotorTest uart.o
fc.o
MotorWert GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Hinten GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Links GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Rechts GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Vorne GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
MotorenEin fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
NMEABuffer uart.o
NeueKoordinateEmpfangen uart.o
NeuerDatensatzEmpfangen uart.o
NeutralAccX fc.o
menu.o
analog.o
NeutralAccY fc.o
menu.o
analog.o
NeutralAccZ fc.o
menu.o
analog.o
NewPpmData rc.o
fc.o
Notlandung fc.o
PAD_0 printf_P.o
PAD_SP printf_P.o
PC_DebugTimeout uart.o
PPM_diff fc.o
rc.o
PPM_in fc.o
rc.o
menu.o
main.o
PRINT printf_P.o
PRINTP printf_P.o
ParameterZuordnung fc.o
Parameter_Gier_P fc.o
Parameter_Gyro_I fc.o
Parameter_Gyro_P fc.o
Parameter_Hoehe_ACC_Wirkung fc.o
Parameter_Hoehe_P fc.o
Parameter_I_Faktor fc.o
Parameter_KompassWirkung fc.o
Parameter_Luftdruck_D fc.o
Parameter_MaxHoehe fc.o
Parameter_ServoNickControl fc.o
menu.o
timer0.o
Parameter_UserParam1 fc.o
Parameter_UserParam2 fc.o
Parameter_UserParam3 fc.o
Parameter_UserParam4 fc.o
PcZugriff uart.o
fc.o
main.o
Piep fc.o
uart.o
Poti1 fc.o
GPS.o
menu.o
Poti2 fc.o
menu.o
Poti3 fc.o
menu.o
Poti4 fc.o
menu.o
PrintZiel printf_P.o
Putchar printf_P.o
ReadParameterSet main.o
fc.o
uart.o
RemoteTasten menu.o
GPS.o
fc.o
rc.o
twimaster.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
RxdBuffer uart.o
SendMotorData fc.o
main.o
SendOutData uart.o
SendeBuffer uart.o
SenderOkay fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
ServoValue timer0.o
menu.o
SetDelay timer0.o
fc.o
uart.o
main.o
SetNeutral fc.o
main.o
SioTmp uart.o
SollHoehe fc.o
menu.o
StartLuftdruck fc.o
analog.o
StickGier fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
StickNick fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
StickRoll fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
SucheLuftruckOffset analog.o
fc.o
main.o
TestInt menu.o
Timeout fc.o
GPS.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Timer_Init timer0.o
main.o
UART_Init uart.o
main.o
UBat analog.o
menu.o
main.o
UebertragungAbgeschlossen uart.o
UpdateMotor timer0.o
main.o
VersionInfo uart.o
main.o
WriteParameterSet main.o
uart.o
WriteProgramData uart.o
ZaehlMessungen analog.o
fc.o
__addsf3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
fc.o
analog.o
__addsf3x c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
__bad_interrupt c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__bss_end c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
__bss_start c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
__cmpsf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__data_end c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
__data_load_start c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
__data_start c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
__divmodhi4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
fc.o
rc.o
menu.o
analog.o
timer0.o
__divmodsi4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
GPS.o
fc.o
menu.o
analog.o
timer0.o
__divsf3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
GPS.o
fc.o
__divsf3x c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
__do_clear_bss c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
__do_copy_data c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
__eeprom_read_byte_1F2021 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
main.o
__eeprom_write_byte_1F2021 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
fc.o
uart.o
main.o
__eqsf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__fixsfsi c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
GPS.o
fc.o
menu.o
analog.o
__fixunssfsi c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
__floatsisf c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
GPS.o
fc.o
analog.o
__floatunssisf c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
__fp_lneg c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
__fp_m_inf c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_m_inf.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
__fp_merge c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
__fp_nan c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
__fp_nanEDOM c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
__fp_nanERANGE c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
__fp_nanx c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
__fp_p_inf c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_p_inf.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
__fp_split1 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
__fp_split2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__fp_split3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
__fp_split_a c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
__fp_zero c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
__fp_zerox c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
__gesf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__gtsf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
analog.o
__heap_end c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__init c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__lesf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__ltsf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
fc.o
analog.o
__mulsf3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
GPS.o
fc.o
__mulsf3x c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
__mulsi3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
GPS.o
fc.o
timer0.o
__nesf2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__stack c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__subsf3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
GPS.o
analog.o
__udivmodhi4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
analog.o
__udivmodsi4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
printf_P.o
__vector_1 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_10 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_11 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_12 rc.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_13 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_14 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_15 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_16 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_17 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_18 timer0.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_19 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_2 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_20 uart.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_21 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_22 uart.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_23 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_24 analog.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_25 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_26 twimaster.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_27 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_3 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_4 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_5 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_6 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_7 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_8 c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_9 timer0.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_default c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vectors c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
_div c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
_exit c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
_printf_P printf_P.o
menu.o
analog.o
main.o
accumulate_AccHoch analog.o
fc.o
accumulate_AccNick analog.o
fc.o
menu.o
accumulate_AccRoll analog.o
fc.o
menu.o
actualPos GPS.o
uart.o
alpha GPS.o
beeptime timer0.o
GPS.o
fc.o
main.o
cntKompass timer0.o
durchschnitt_easting GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
durchschnitt_northing GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
exit c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
gps_d GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
gps_gethome GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
gps_getpos GPS.o
gps_home_x GPS.o
gps_home_y GPS.o
gps_main GPS.o
fc.o
gps_p GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
gpsmax GPS.o
h GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
i2c_init twimaster.o
main.o
i2c_start twimaster.o
fc.o
i2c_stop twimaster.o
i2c_write_byte twimaster.o
ignorePacket uart.o
komp_dreh GPS.o
ldexp c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(ldexp.o)
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
m GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
main main.o
c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
memchr c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
printf_P.o
messanzahl_AccHoch analog.o
fc.o
messanzahl_AccNick analog.o
fc.o
menu.o
messanzahl_AccRoll analog.o
fc.o
menu.o
messanzahl_Druck analog.o
motor twimaster.o
fc.o
motor_rx twimaster.o
motorread twimaster.o
msgID uart.o
msgLen uart.o
navPosECEF uart.o
navStatus uart.o
navVelECEF uart.o
nickOffset uart.o
rc_sum_init rc.o
main.o
rollOffset uart.o
s GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
skal GPS.o
fc.o
rc.o
twimaster.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
sqrt c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(sqrt.o)
GPS.o
target_x GPS.o
target_y GPS.o
target_z GPS.o
tmpLuftdruck analog.o
twi_state twimaster.o
fc.o
uart_putchar uart.o
printf_P.o
ubxEp uart.o
ubxP uart.o
ubxSp uart.o
zwe GPS.o
zwe1 GPS.o
zwe2 GPS.o
zwn GPS.o
zwn1 GPS.o
zwn2 GPS.o
/branches/chris_hallo2/Flight-Ctrl_MEGA644_V0_60.sym
0,0 → 1,477
00000000 W __heap_end
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 W __vector_default
00000000 T __vectors
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
00000070 t __c.2018
00000074 t __c.2016
0000007c t __c.2014
00000088 t __c.2012
00000096 t __c.2010
0000009b t __c.2005
000000b8 t __c.2003
000000d3 t __c.1995
00000102 t __c.1993
00000123 t __c.1991
0000013b t __c.1990
0000013d t __c.2072
0000014b t __c.2070
00000159 t __c.2068
00000167 t __c.2066
0000016f t __c.2063
0000017b t __c.2061
00000187 t __c.2059
00000193 t __c.2057
0000019f t __c.2054
000001ae t __c.2052
000001bd t __c.2050
000001cc t __c.2048
000001db t __c.2045
000001ea t __c.2043
000001f9 t __c.2040
00000208 t __c.2038
00000217 t __c.2036
00000226 t __c.2034
00000233 t __c.2031
00000242 t __c.2029
00000251 t __c.2027
00000260 t __c.2025
0000026e t __c.2022
0000027e t __c.2020
0000028e t __c.2018
0000029e t __c.2016
000002ae t __c.2013
000002be t __c.2011
000002ce t __c.2009
000002de t __c.2007
000002ee t __c.2004
000002fd t __c.2002
0000030c t __c.2000
0000031b t __c.1998
00000325 t __c.1995
00000333 t __c.1993
0000033a t __c.1991
00000349 t __c.1989
00000358 t __c.1987
00000367 t __c.1985
00000376 t __c.1981
00000386 t __c.1979
00000393 t __c.1977
0000039a t __c.1975
000003ac t __c.1972
000003b2 T __ctors_end
000003b2 T __ctors_start
000003b2 T __dtors_end
000003b2 T __dtors_start
000003b2 W __init
000003b2 T __trampolines_end
000003b2 T __trampolines_start
000003be T __do_copy_data
000003ca t .do_copy_data_loop
000003ce t .do_copy_data_start
000003d4 T __do_clear_bss
000003dc t .do_clear_bss_loop
000003de t .do_clear_bss_start
000003ec T __bad_interrupt
000003ec W __vector_1
000003ec W __vector_10
000003ec W __vector_11
000003ec W __vector_13
000003ec W __vector_14
000003ec W __vector_15
000003ec W __vector_16
000003ec W __vector_17
000003ec W __vector_19
000003ec W __vector_2
000003ec W __vector_21
000003ec W __vector_23
000003ec W __vector_25
000003ec W __vector_27
000003ec W __vector_3
000003ec W __vector_4
000003ec W __vector_5
000003ec W __vector_6
000003ec W __vector_7
000003ec W __vector_8
000003f0 T GetActiveParamSetNumber
000003fe T WriteParameterSet
00000416 t .26_start
00000422 t .26_finished
0000042e T ReadParameterSet
00000448 t .44_start
00000454 t .44_finished
0000045a T main
00000724 T __vector_22
00000790 T GPSscanData
00000886 T __vector_20
00000c5a T AddCRC
00000cb6 T SendOutData
00000d86 T Decode64
00000e36 T uart_putchar
00000e58 T WriteProgramData
00000e5a T UART_Init
00000e94 T DatenUebertragung
00000f70 T BearbeiteRxDaten
000010d4 T Putchar
000010ff W __stack
00001106 T PAD_0
0000111c T PAD_SP
00001132 T PRINTP
0000115e T PRINT
00001186 T _printf_P
000016ce T __vector_18
000017f6 T SetDelay
00001808 T CheckDelay
00001820 T __vector_9
0000197a T Timer_Init
000019c8 T Delay_ms
000019ec T ADC_Init
000019f8 T __vector_24
00002040 T SucheLuftruckOffset
0000208e T LcdClear
000020a0 T Menu
00002828 T i2c_init
00002834 T i2c_start
00002840 T i2c_stop
00002848 T i2c_write_byte
0000285c T __vector_26
00002998 T rc_sum_init
000029c2 T __vector_12
00002b00 T Mittelwert
00003082 T CalibrierMittelwert
000033ba T ParameterZuordnung
00003854 T DefaultKonstanten2
0000392e T DefaultKonstanten1
00003a10 T SendMotorData
00003a9e T SetNeutral
00003c96 T Piep
00003cc0 T MotorRegler
00005254 T gps_main
000055a2 T memchr
000055bc T __subsf3
000055be T __addsf3
000055c6 T __addsf3x
00005642 T __divsf3
00005648 T __divsf3x
000056ce T __fixsfsi
000056ce T __fixunssfsi
000056f4 T __fp_lneg
00005704 T __floatunssisf
00005708 T __floatsisf
0000571c T __eqsf2
0000571c T __lesf2
0000571c T __ltsf2
0000571c T __nesf2
00005722 T __gesf2
00005722 T __gtsf2
00005728 T __cmpsf2
0000573a t .fp_cmp
0000576a T __fp_merge
0000579a T __fp_nan
0000579a T __fp_nanEDOM
0000579a T __fp_nanERANGE
0000579a T __fp_nanx
000057a0 T __fp_split3
000057a6 T __fp_split2
000057b8 T __fp_split1
000057d4 T __fp_split_a
000057f2 T __fp_zero
000057f8 T __fp_zerox
000057fc T __mulsf3
00005802 T __mulsf3x
0000588c T sqrt
00005908 T ldexp
0000592c T __fp_m_inf
00005936 T __fp_p_inf
00005940 T __mulsi3
0000597e T __udivmodhi4
00005986 t __udivmodhi4_loop
00005994 t __udivmodhi4_ep
000059a6 T __divmodhi4
000059a6 T _div
000059ba t __divmodhi4_neg2
000059c0 t __divmodhi4_exit
000059c2 t __divmodhi4_neg1
000059cc T __udivmodsi4
000059d8 t __udivmodsi4_loop
000059f2 t __udivmodsi4_ep
00005a10 T __divmodsi4
00005a24 t __divmodsi4_neg2
00005a32 t __divmodsi4_exit
00005a34 t __divmodsi4_neg1
00005a46 T __eeprom_read_byte_1F2021
00005a56 T __eeprom_write_byte_1F2021
00005a6e t __stop_program
00005a6e T _exit
00005a6e W exit
00005a70 A __data_load_start
00005a70 T _etext
00005afe A __data_load_end
00800100 D __data_start
00800100 D UebertragungAbgeschlossen
00800101 D PcZugriff
00800102 d timer.2061
00800103 d cnt_1ms.1974
00800104 D UBat
00800106 D Luftdruck
0080010a D MessLuftdruck
0080010c D Array
00800116 D DisplayBuff
00800166 d MaxMenue.1970
00800167 D NewPpmData
00800178 D Kp
0080017c D Ki
00800180 D Parameter_Luftdruck_D
00800181 D Parameter_MaxHoehe
00800182 D Parameter_Hoehe_P
00800183 D Parameter_Hoehe_ACC_Wirkung
00800184 D Parameter_KompassWirkung
00800185 D Parameter_Gyro_P
00800186 D Parameter_Gyro_I
00800187 D Parameter_Gier_P
00800188 D Parameter_I_Faktor
00800189 D Parameter_ServoNickControl
0080018a D gps_getpos
0080018c D gpsmax
0080018e B __bss_start
0080018e D __data_end
0080018e D _edata
0080018e B DebugGetAnforderung
0080018f B DebugDisplayAnforderung
00800190 B DebugDataAnforderung
00800191 B GetVersionAnforderung
00800192 B SioTmp
00800193 B NeuerDatensatzEmpfangen
00800194 B NeueKoordinateEmpfangen
00800195 B CntCrcError
00800196 B AnzahlEmpfangsBytes
00800197 B PC_DebugTimeout
00800198 B MotorTest
0080019c b dis_zeile.2372
0080019d b UartState.2055
0080019e b buf_ptr.2054
0080019f b crc2.2053
008001a0 b crc1.2052
008001a1 b crc.2051
008001a3 b ptr.2021
008001a5 b gpsState
008001a6 B CountMilliseconds
008001a8 B UpdateMotor
008001a9 B cntKompass
008001ab B beeptime
008001ad B ServoValue
008001af b cnt.1975
008001b0 b tim_main
008001b2 B AccumulateNick
008001b4 B AccumulateRoll
008001b6 B AccumulateGier
008001b8 B accumulate_AccRoll
008001ba B accumulate_AccNick
008001bc B accumulate_AccHoch
008001be B MessanzahlNick
008001bf B MessanzahlRoll
008001c0 B MessanzahlGier
008001c1 B messanzahl_AccNick
008001c2 B messanzahl_AccRoll
008001c3 B messanzahl_AccHoch
008001c4 B HoeheD
008001c6 B ZaehlMessungen
008001c8 b state.2005
008001c9 b kanal.2004
008001ca B TestInt
008001cc B DispPtr
008001cd B RemoteTasten
008001ce b MenuePunkt.1971
008001cf B twi_state
008001d0 B motor
008001d1 B motorread
008001d2 b index.1971
008001d4 b AltICR.1969
008001d6 B Timeout
008001d7 B AdNeutralNick
008001d9 B AdNeutralRoll
008001db B AdNeutralGier
008001dd B NeutralAccX
008001df B NeutralAccY
008001e1 B NeutralAccZ
008001e5 B CosinusNickWinkel
008001e6 B CosinusRollWinkel
008001e7 B IntegralNick
008001eb B IntegralNick2
008001ef B IntegralRoll
008001f3 B IntegralRoll2
008001f7 B Integral_Gier
008001fb B Mess_IntegralNick
008001ff B Mess_IntegralNick2
00800203 B Mess_IntegralRoll
00800207 B Mess_IntegralRoll2
0080020b B Mess_Integral_Gier
0080020f B Mess_Integral_Gier2
00800213 B Mess_Integral_Hoch
00800217 B KompassValue
00800219 B KompassStartwert
0080021b B KompassRichtung
0080021d B Notlandung
0080021e B HoehenReglerAktiv
0080021f B Poti1
00800221 B Poti2
00800223 B Poti3
00800225 B Poti4
00800227 B SenderOkay
00800228 B StickNick
0080022a B StickRoll
0080022c B StickGier
0080022e B MotorenEin
0080022f B HoehenWert
00800231 B SollHoehe
00800233 B Parameter_UserParam1
00800234 B Parameter_UserParam2
00800235 B Parameter_UserParam3
00800236 B Parameter_UserParam4
00800237 b SignalSchlecht.2366
00800239 b NeueKompassRichtungMerken.2362
0080023a b TimerWerteausgabe.2361
0080023b b hoehenregler.2360
0080023d b modell_fliegt.2359
0080023f b delay_ausschalten.2358
00800240 b delay_einschalten.2357
00800241 b delay_neutral.2356
00800242 b RcLostTimer.2355
00800244 b IntegralFehlerRoll.2354
00800246 b IntegralFehlerNick.2353
00800248 b tmp_long2.2352
0080024c b tmp_long.2351
00800250 b sollGier.2350
00800254 b SummeRoll.2349
00800258 b SummeNick.2348
0080025c B target_x
00800260 B target_y
00800264 B target_z
00800268 B alpha
0080026a B zwn
0080026e B zwe
00800272 B zwn1
00800276 B zwe1
0080027a B zwn2
0080027e B zwe2
00800282 B gps_home_x
00800286 B gps_home_y
0080028a B komp_dreh
0080028c B GPS_Nick
0080028e B GPS_Roll
00800290 B durchschnitt_easting
00800294 B DiffRoll
00800296 B Motor_Vorne
00800297 B Motor_Hinten
00800298 B DiffNick
0080029a B Motor_Rechts
0080029b B Count
0080029c B durchschnitt_northing
008002a0 B skal
008002a2 B gps_p
008002a4 B gps_d
008002a6 B Motor_Links
008002a7 B s
008002a8 B h
008002a9 B gps_gethome
008002ab B m
008002ac B MotorWert
008002b1 B ubxEp
008002b3 B MeineSlaveAdresse
008002b4 B CK_A
008002b5 B SendeBuffer
0080034b B NMEABuffer
008003e1 B Debug_Timer
008003e3 B CK_B
008003e4 B navStatus
008003f5 B DebugIn
00800400 B VersionInfo
0080040a B rollOffset
0080040e B ubxP
00800410 B navVelECEF
00800425 B RxdBuffer
008004bb B ubxSp
008004bd B msgLen
008004bf B nickOffset
008004c3 B navPosECEF
008004d8 B DebugOut
0080050a B actualPos
00800524 B msgID
00800525 B ignorePacket
00800526 B PrintZiel
00800527 B Aktuell_ay
00800529 B Aktuell_az
0080052b B StartLuftdruck
0080052d B Aktuell_Nick
0080052f B messanzahl_Druck
00800530 B Aktuell_Roll
00800532 B Aktuell_ax
00800534 B DruckOffsetSetting
00800535 B Aktuell_Gier
00800537 B tmpLuftdruck
00800539 B motor_rx
00800541 B PPM_in
00800557 B PPM_diff
0080056d B EE_Parameter
008005a7 B MesswertRoll
008005a9 B MesswertNick
008005ab B MIN_GAS
008005ac B Mittelwert_AccHoch
008005ae B IntegralFaktor
008005b2 B Mittelwert_AccNick
008005b4 B MAX_GAS
008005b5 B MesswertGier
008005b7 B GyroFaktor
008005bb B Mittelwert_AccRoll
008005bd B __bss_end
008005bd A _end
00810000 D EEPromArray
00810800 D __eeprom_end
/branches/chris_hallo2/GPS.c
0,0 → 1,89
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 08.2007 by Christopher Hartmann / Daniel Schmitz
// +
// + Bitte die read_me Datei beachten! Es handelt sich hierbei um eine erste Probeversion!
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
#include "math.h"
 
// GPS feste Variablen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//volatile int loop = 0;
//long gps_northing = 0, gps_easting = 0, gps_altitude = 0;
 
long target_x = 0, target_y = 0, target_z = 0;
 
volatile int alpha = 0;
 
long zwn = 0, zwe = 0, zwn1 = 0, zwe1 = 0, zwn2 = 0, zwe2 = 0;
volatile int gps_getpos = 5;
long gps_home_x = 0;
long gps_home_y = 0;
 
// GPS Einstellungen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
volatile int komp_dreh = 0; // verdrehten Kompasseinbau kompensieren (+/-Grad)
volatile int gpsmax = 35; //maximal zulässiger "GPS-Steuerausschlag"
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
void gps_main(void)
{
/*
if (MotorenEin = 1 && gps_gethome == 0 && actualPos.state != 0){ //speichert GPS-Home-Position
gps_home_x = actualPos.x;
gps_home_y = actualPos.y;
beeptime = 80;
gps_gethome = 1;
}*/
 
 
if (Poti1>0 && actualPos.state != 0){ //Beginn GPS-Position-Hold
 
if (gps_getpos != 0){ //Postion mit Schalter loggen
target_x = actualPos.x;
target_y = actualPos.y;
target_z = actualPos.z;
beeptime = 50;
gps_getpos = 0;}
 
//Regler ##########################################################################################################################
//P-Regler
zwn = ((sqrt(target_x^2+target_z^2)-sqrt(actualPos.x^2+actualPos.z^2))*gps_p)/10; //8
zwe = ((target_y-actualPos.y)*gps_p)/10;
 
//D-Regler
zwn2= (gps_d*actualPos.vx)/-3; //-2
zwe2= (gps_d*actualPos.vy)/-3;
 
GPS_Nick = (zwn+zwn2); // skal;
GPS_Roll = (zwe+zwe2); // skal;
 
//GPS-Mixer########################################################################################################################
if (GPS_Nick>gpsmax){GPS_Nick=gpsmax;} else if (GPS_Nick<(-1*gpsmax)){GPS_Nick=(-1*gpsmax);} //min-max Wert überprüfen
if (GPS_Roll>gpsmax){GPS_Roll=gpsmax;} else if (GPS_Roll<(-1*gpsmax)){GPS_Roll=(-1*gpsmax);}
 
/*
//Rotationsmatrix##################################################################################################################
//Kompass ++++++++++++++++++++++++++++
alpha=0;
alpha = komp_dreh+KompassValue;
if (KompassValue>300) {beeptime=50;}
if (alpha>359) {alpha=alpha-360;}
 
 
GPS_Nick=(sin(alpha)*GPS_Roll+cos(alpha)*GPS_Nick);
GPS_Roll=(cos(alpha)*GPS_Roll-sin(alpha)*GPS_Nick);
*/
 
}else {
gps_getpos=5;
GPS_Nick=0;
GPS_Roll=0;
}
}
 
 
 
 
/branches/chris_hallo2/GPS.d
0,0 → 1,2
GPS.o GPS.d : GPS.c main.h old_macros.h _settings.h printf_P.h timer0.h uart.h \
analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/GPS.lst
0,0 → 1,498
1 .file "GPS.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global gps_main
13 gps_main:
14 /* prologue: frame size=0 */
15 0000 6F92 push r6
16 0002 7F92 push r7
17 0004 8F92 push r8
18 0006 9F92 push r9
19 0008 AF92 push r10
20 000a BF92 push r11
21 000c CF92 push r12
22 000e DF92 push r13
23 0010 EF92 push r14
24 0012 FF92 push r15
25 0014 0F93 push r16
26 0016 1F93 push r17
27 /* prologue end (size=12) */
28 0018 8091 0000 lds r24,Poti1
29 001c 9091 0000 lds r25,(Poti1)+1
30 0020 1816 cp __zero_reg__,r24
31 0022 1906 cpc __zero_reg__,r25
32 0024 04F0 brlt .+2
33 0026 00C0 rjmp .L2
34 0028 8091 0000 lds r24,actualPos+24
35 002c 8823 tst r24
36 002e 01F4 brne .+2
37 0030 00C0 rjmp .L2
38 0032 8091 0000 lds r24,gps_getpos
39 0036 9091 0000 lds r25,(gps_getpos)+1
40 003a 892B or r24,r25
41 003c 01F0 breq .L5
42 003e 8091 0000 lds r24,actualPos
43 0042 9091 0000 lds r25,(actualPos)+1
44 0046 A091 0000 lds r26,(actualPos)+2
45 004a B091 0000 lds r27,(actualPos)+3
46 004e 8093 0000 sts target_x,r24
47 0052 9093 0000 sts (target_x)+1,r25
48 0056 A093 0000 sts (target_x)+2,r26
49 005a B093 0000 sts (target_x)+3,r27
50 005e 8091 0000 lds r24,actualPos+4
51 0062 9091 0000 lds r25,(actualPos+4)+1
52 0066 A091 0000 lds r26,(actualPos+4)+2
53 006a B091 0000 lds r27,(actualPos+4)+3
54 006e 8093 0000 sts target_y,r24
55 0072 9093 0000 sts (target_y)+1,r25
56 0076 A093 0000 sts (target_y)+2,r26
57 007a B093 0000 sts (target_y)+3,r27
58 007e 8091 0000 lds r24,actualPos+8
59 0082 9091 0000 lds r25,(actualPos+8)+1
60 0086 A091 0000 lds r26,(actualPos+8)+2
61 008a B091 0000 lds r27,(actualPos+8)+3
62 008e 8093 0000 sts target_z,r24
63 0092 9093 0000 sts (target_z)+1,r25
64 0096 A093 0000 sts (target_z)+2,r26
65 009a B093 0000 sts (target_z)+3,r27
66 009e 82E3 ldi r24,lo8(50)
67 00a0 90E0 ldi r25,hi8(50)
68 00a2 9093 0000 sts (beeptime)+1,r25
69 00a6 8093 0000 sts beeptime,r24
70 00aa 1092 0000 sts (gps_getpos)+1,__zero_reg__
71 00ae 1092 0000 sts gps_getpos,__zero_reg__
72 .L5:
73 00b2 A090 0000 lds r10,gps_p
74 00b6 B090 0000 lds r11,(gps_p)+1
75 00ba 6091 0000 lds r22,target_z
76 00be 7091 0000 lds r23,(target_z)+1
77 00c2 8091 0000 lds r24,(target_z)+2
78 00c6 9091 0000 lds r25,(target_z)+3
79 00ca 6E5F subi r22,lo8(-(2))
80 00cc 7F4F sbci r23,hi8(-(2))
81 00ce 8F4F sbci r24,hlo8(-(2))
82 00d0 9F4F sbci r25,hhi8(-(2))
83 00d2 2091 0000 lds r18,target_x
84 00d6 3091 0000 lds r19,(target_x)+1
85 00da 4091 0000 lds r20,(target_x)+2
86 00de 5091 0000 lds r21,(target_x)+3
87 00e2 E2E0 ldi r30,lo8(2)
88 00e4 EE2E mov r14,r30
89 00e6 F12C mov r15,__zero_reg__
90 00e8 012D mov r16,__zero_reg__
91 00ea 112D mov r17,__zero_reg__
92 00ec 2E25 eor r18,r14
93 00ee 3F25 eor r19,r15
94 00f0 4027 eor r20,r16
95 00f2 5127 eor r21,r17
96 00f4 6227 eor r22,r18
97 00f6 7327 eor r23,r19
98 00f8 8427 eor r24,r20
99 00fa 9527 eor r25,r21
100 00fc 0E94 0000 call __floatsisf
101 0100 0E94 0000 call sqrt
102 0104 3B01 movw r6,r22
103 0106 4C01 movw r8,r24
104 0108 6091 0000 lds r22,actualPos+8
105 010c 7091 0000 lds r23,(actualPos+8)+1
106 0110 8091 0000 lds r24,(actualPos+8)+2
107 0114 9091 0000 lds r25,(actualPos+8)+3
108 0118 6E5F subi r22,lo8(-(2))
109 011a 7F4F sbci r23,hi8(-(2))
110 011c 8F4F sbci r24,hlo8(-(2))
111 011e 9F4F sbci r25,hhi8(-(2))
112 0120 2091 0000 lds r18,actualPos
113 0124 3091 0000 lds r19,(actualPos)+1
114 0128 4091 0000 lds r20,(actualPos)+2
115 012c 5091 0000 lds r21,(actualPos)+3
116 0130 2E25 eor r18,r14
117 0132 3F25 eor r19,r15
118 0134 4027 eor r20,r16
119 0136 5127 eor r21,r17
120 0138 6227 eor r22,r18
121 013a 7327 eor r23,r19
122 013c 8427 eor r24,r20
123 013e 9527 eor r25,r21
124 0140 0E94 0000 call __floatsisf
125 0144 0E94 0000 call sqrt
126 0148 9B01 movw r18,r22
127 014a AC01 movw r20,r24
128 014c C401 movw r24,r8
129 014e B301 movw r22,r6
130 0150 0E94 0000 call __subsf3
131 0154 7B01 movw r14,r22
132 0156 8C01 movw r16,r24
133 0158 CC24 clr r12
134 015a B7FC sbrc r11,7
135 015c C094 com r12
136 015e DC2C mov r13,r12
137 0160 C601 movw r24,r12
138 0162 B501 movw r22,r10
139 0164 0E94 0000 call __floatsisf
140 0168 9B01 movw r18,r22
141 016a AC01 movw r20,r24
142 016c C801 movw r24,r16
143 016e B701 movw r22,r14
144 0170 0E94 0000 call __mulsf3
145 0174 20E0 ldi r18,lo8(0x41200000)
146 0176 30E0 ldi r19,hi8(0x41200000)
147 0178 40E2 ldi r20,hlo8(0x41200000)
148 017a 51E4 ldi r21,hhi8(0x41200000)
149 017c 0E94 0000 call __divsf3
150 0180 0E94 0000 call __fixsfsi
151 0184 3B01 movw r6,r22
152 0186 4C01 movw r8,r24
153 0188 6093 0000 sts zwn,r22
154 018c 7093 0000 sts (zwn)+1,r23
155 0190 8093 0000 sts (zwn)+2,r24
156 0194 9093 0000 sts (zwn)+3,r25
157 0198 2091 0000 lds r18,gps_p
158 019c 3091 0000 lds r19,(gps_p)+1
159 01a0 6091 0000 lds r22,target_y
160 01a4 7091 0000 lds r23,(target_y)+1
161 01a8 8091 0000 lds r24,(target_y)+2
162 01ac 9091 0000 lds r25,(target_y)+3
163 01b0 E090 0000 lds r14,actualPos+4
164 01b4 F090 0000 lds r15,(actualPos+4)+1
165 01b8 0091 0000 lds r16,(actualPos+4)+2
166 01bc 1091 0000 lds r17,(actualPos+4)+3
167 01c0 6E19 sub r22,r14
168 01c2 7F09 sbc r23,r15
169 01c4 800B sbc r24,r16
170 01c6 910B sbc r25,r17
171 01c8 4427 clr r20
172 01ca 37FD sbrc r19,7
173 01cc 4095 com r20
174 01ce 542F mov r21,r20
175 01d0 0E94 0000 call __mulsi3
176 01d4 2AE0 ldi r18,lo8(10)
177 01d6 30E0 ldi r19,hi8(10)
178 01d8 40E0 ldi r20,hlo8(10)
179 01da 50E0 ldi r21,hhi8(10)
180 01dc 0E94 0000 call __divmodsi4
181 01e0 5901 movw r10,r18
182 01e2 6A01 movw r12,r20
183 01e4 2093 0000 sts zwe,r18
184 01e8 3093 0000 sts (zwe)+1,r19
185 01ec 4093 0000 sts (zwe)+2,r20
186 01f0 5093 0000 sts (zwe)+3,r21
187 01f4 6091 0000 lds r22,gps_d
188 01f8 7091 0000 lds r23,(gps_d)+1
189 01fc 8827 clr r24
190 01fe 77FD sbrc r23,7
191 0200 8095 com r24
192 0202 982F mov r25,r24
193 0204 2091 0000 lds r18,actualPos+12
194 0208 3091 0000 lds r19,(actualPos+12)+1
195 020c 4091 0000 lds r20,(actualPos+12)+2
196 0210 5091 0000 lds r21,(actualPos+12)+3
197 0214 0E94 0000 call __mulsi3
198 0218 2DEF ldi r18,lo8(-3)
199 021a 3FEF ldi r19,hi8(-3)
200 021c 4FEF ldi r20,hlo8(-3)
201 021e 5FEF ldi r21,hhi8(-3)
202 0220 0E94 0000 call __divmodsi4
203 0224 7901 movw r14,r18
204 0226 8A01 movw r16,r20
205 0228 2093 0000 sts zwn2,r18
206 022c 3093 0000 sts (zwn2)+1,r19
207 0230 4093 0000 sts (zwn2)+2,r20
208 0234 5093 0000 sts (zwn2)+3,r21
209 0238 6091 0000 lds r22,gps_d
210 023c 7091 0000 lds r23,(gps_d)+1
211 0240 8827 clr r24
212 0242 77FD sbrc r23,7
213 0244 8095 com r24
214 0246 982F mov r25,r24
215 0248 2091 0000 lds r18,actualPos+16
216 024c 3091 0000 lds r19,(actualPos+16)+1
217 0250 4091 0000 lds r20,(actualPos+16)+2
218 0254 5091 0000 lds r21,(actualPos+16)+3
219 0258 0E94 0000 call __mulsi3
220 025c 2DEF ldi r18,lo8(-3)
221 025e 3FEF ldi r19,hi8(-3)
222 0260 4FEF ldi r20,hlo8(-3)
223 0262 5FEF ldi r21,hhi8(-3)
224 0264 0E94 0000 call __divmodsi4
225 0268 2093 0000 sts zwe2,r18
226 026c 3093 0000 sts (zwe2)+1,r19
227 0270 4093 0000 sts (zwe2)+2,r20
228 0274 5093 0000 sts (zwe2)+3,r21
229 0278 B301 movw r22,r6
230 027a 6E0D add r22,r14
231 027c 7F1D adc r23,r15
232 027e 7093 0000 sts (GPS_Nick)+1,r23
233 0282 6093 0000 sts GPS_Nick,r22
234 0286 2A0D add r18,r10
235 0288 3B1D adc r19,r11
236 028a 3093 0000 sts (GPS_Roll)+1,r19
237 028e 2093 0000 sts GPS_Roll,r18
238 0292 8091 0000 lds r24,gpsmax
239 0296 9091 0000 lds r25,(gpsmax)+1
240 029a 8617 cp r24,r22
241 029c 9707 cpc r25,r23
242 029e 04F4 brge .L7
243 02a0 8091 0000 lds r24,gpsmax
244 02a4 9091 0000 lds r25,(gpsmax)+1
245 02a8 00C0 rjmp .L16
246 .L7:
247 02aa 8091 0000 lds r24,gpsmax
248 02ae 9091 0000 lds r25,(gpsmax)+1
249 02b2 9095 com r25
250 02b4 8195 neg r24
251 02b6 9F4F sbci r25,lo8(-1)
252 02b8 6817 cp r22,r24
253 02ba 7907 cpc r23,r25
254 02bc 04F4 brge .L9
255 02be 8091 0000 lds r24,gpsmax
256 02c2 9091 0000 lds r25,(gpsmax)+1
257 02c6 9095 com r25
258 02c8 8195 neg r24
259 02ca 9F4F sbci r25,lo8(-1)
260 .L16:
261 02cc 9093 0000 sts (GPS_Nick)+1,r25
262 02d0 8093 0000 sts GPS_Nick,r24
263 .L9:
264 02d4 8091 0000 lds r24,gpsmax
265 02d8 9091 0000 lds r25,(gpsmax)+1
266 02dc 8217 cp r24,r18
267 02de 9307 cpc r25,r19
268 02e0 04F4 brge .L11
269 02e2 8091 0000 lds r24,gpsmax
270 02e6 9091 0000 lds r25,(gpsmax)+1
271 02ea 00C0 rjmp .L17
272 .L11:
273 02ec 8091 0000 lds r24,gpsmax
274 02f0 9091 0000 lds r25,(gpsmax)+1
275 02f4 9095 com r25
276 02f6 8195 neg r24
277 02f8 9F4F sbci r25,lo8(-1)
278 02fa 2817 cp r18,r24
279 02fc 3907 cpc r19,r25
280 02fe 04F4 brge .L15
281 0300 8091 0000 lds r24,gpsmax
282 0304 9091 0000 lds r25,(gpsmax)+1
283 0308 9095 com r25
284 030a 8195 neg r24
285 030c 9F4F sbci r25,lo8(-1)
286 .L17:
287 030e 9093 0000 sts (GPS_Roll)+1,r25
288 0312 8093 0000 sts GPS_Roll,r24
289 0316 00C0 rjmp .L15
290 .L2:
291 0318 85E0 ldi r24,lo8(5)
292 031a 90E0 ldi r25,hi8(5)
293 031c 9093 0000 sts (gps_getpos)+1,r25
294 0320 8093 0000 sts gps_getpos,r24
295 0324 1092 0000 sts (GPS_Nick)+1,__zero_reg__
296 0328 1092 0000 sts GPS_Nick,__zero_reg__
297 032c 1092 0000 sts (GPS_Roll)+1,__zero_reg__
298 0330 1092 0000 sts GPS_Roll,__zero_reg__
299 .L15:
300 /* epilogue: frame size=0 */
301 0334 1F91 pop r17
302 0336 0F91 pop r16
303 0338 FF90 pop r15
304 033a EF90 pop r14
305 033c DF90 pop r13
306 033e CF90 pop r12
307 0340 BF90 pop r11
308 0342 AF90 pop r10
309 0344 9F90 pop r9
310 0346 8F90 pop r8
311 0348 7F90 pop r7
312 034a 6F90 pop r6
313 034c 0895 ret
314 /* epilogue end (size=13) */
315 /* function gps_main size 423 (398) */
317 .global target_x
318 .global target_x
319 .section .bss
322 target_x:
323 0000 0000 0000 .skip 4,0
324 .global target_y
325 .global target_y
328 target_y:
329 0004 0000 0000 .skip 4,0
330 .global target_z
331 .global target_z
334 target_z:
335 0008 0000 0000 .skip 4,0
336 .global alpha
337 .global alpha
340 alpha:
341 000c 0000 .skip 2,0
342 .global zwn
343 .global zwn
346 zwn:
347 000e 0000 0000 .skip 4,0
348 .global zwe
349 .global zwe
352 zwe:
353 0012 0000 0000 .skip 4,0
354 .global zwn1
355 .global zwn1
358 zwn1:
359 0016 0000 0000 .skip 4,0
360 .global zwe1
361 .global zwe1
364 zwe1:
365 001a 0000 0000 .skip 4,0
366 .global zwn2
367 .global zwn2
370 zwn2:
371 001e 0000 0000 .skip 4,0
372 .global zwe2
373 .global zwe2
376 zwe2:
377 0022 0000 0000 .skip 4,0
378 .global gps_getpos
379 .data
382 gps_getpos:
383 0000 0500 .word 5
384 .global gps_home_x
385 .global gps_home_x
386 .section .bss
389 gps_home_x:
390 0026 0000 0000 .skip 4,0
391 .global gps_home_y
392 .global gps_home_y
395 gps_home_y:
396 002a 0000 0000 .skip 4,0
397 .global komp_dreh
398 .global komp_dreh
401 komp_dreh:
402 002e 0000 .skip 2,0
403 .global gpsmax
404 .data
407 gpsmax:
408 0002 2300 .word 35
409 .global GPS_Nick
410 .global GPS_Nick
411 .section .bss
414 GPS_Nick:
415 0030 0000 .skip 2,0
416 .global GPS_Roll
417 .global GPS_Roll
420 GPS_Roll:
421 0032 0000 .skip 2,0
422 .comm DiffNick,2,1
423 .comm DiffRoll,2,1
424 .comm SenderOkay,1,1
425 .comm CosinusNickWinkel,1,1
426 .comm CosinusRollWinkel,1,1
427 .comm durchschnitt_northing,4,1
428 .comm durchschnitt_easting,4,1
429 .comm gps_p,2,1
430 .comm gps_d,2,1
431 .comm skal,2,1
432 .comm gps_gethome,2,1
433 .comm RemoteTasten,1,1
434 .comm Timeout,1,1
435 .comm IntegralNick,4,1
436 .comm IntegralNick2,4,1
437 .comm IntegralRoll,4,1
438 .comm IntegralRoll2,4,1
439 .comm Mess_IntegralNick,4,1
440 .comm Mess_IntegralNick2,4,1
441 .comm Mess_IntegralRoll,4,1
442 .comm Mess_IntegralRoll2,4,1
443 .comm Integral_Gier,4,1
444 .comm Mess_Integral_Gier,4,1
445 .comm h,1,1
446 .comm m,1,1
447 .comm s,1,1
448 .comm Motor_Vorne,1,1
449 .comm Motor_Hinten,1,1
450 .comm Motor_Rechts,1,1
451 .comm Motor_Links,1,1
452 .comm Count,1,1
453 .comm MotorWert,5,1
454 .comm StickNick,2,1
455 .comm StickRoll,2,1
456 .comm StickGier,2,1
457 .comm MotorenEin,1,1
458 /* File "GPS.c": code 423 = 0x01a7 ( 398), prologues 12, epilogues 13 */
DEFINED SYMBOLS
*ABS*:00000000 GPS.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:13 .text:00000000 gps_main
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:382 .data:00000000 gps_getpos
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:322 .bss:00000000 target_x
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:328 .bss:00000004 target_y
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:334 .bss:00000008 target_z
*COM*:00000002 gps_p
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:346 .bss:0000000e zwn
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:352 .bss:00000012 zwe
*COM*:00000002 gps_d
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:370 .bss:0000001e zwn2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:376 .bss:00000022 zwe2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:414 .bss:00000030 GPS_Nick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:420 .bss:00000032 GPS_Roll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:407 .data:00000002 gpsmax
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:340 .bss:0000000c alpha
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:358 .bss:00000016 zwn1
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:364 .bss:0000001a zwe1
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:389 .bss:00000026 gps_home_x
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:395 .bss:0000002a gps_home_y
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccZtEoZ3.s:401 .bss:0000002e komp_dreh
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 SenderOkay
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
Poti1
actualPos
beeptime
__floatsisf
sqrt
__subsf3
__mulsf3
__divsf3
__fixsfsi
__mulsi3
__divmodsi4
/branches/chris_hallo2/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/chris_hallo2/Settings.h
--- chris_hallo2/_Settings.h (nonexistent)
+++ chris_hallo2/_Settings.h (revision 171)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 16
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/chris_hallo2/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
for(off=0; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ay = ADC - NeutralAccX;
accumulate_AccNick += Aktuell_ay;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - NeutralAccZ;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
kanal = 3;
state = 7;
}
else
{
kanal = 0;
state = 0;
}*/
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/chris_hallo2/analog.d
0,0 → 1,2
analog.o analog.d : analog.c main.h old_macros.h _settings.h printf_P.h timer0.h \
uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/chris_hallo2/analog.lst
0,0 → 1,862
1 .file "analog.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global ADC_Init
13 ADC_Init:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 0000 1092 7C00 sts 124,__zero_reg__
17 0004 8FEE ldi r24,lo8(-17)
18 0006 8093 7A00 sts 122,r24
19 /* epilogue: frame size=0 */
20 000a 0895 ret
21 /* epilogue end (size=1) */
22 /* function ADC_Init size 6 (5) */
24 .global __vector_24
26 __vector_24:
27 /* prologue: frame size=0 */
28 000c 1F92 push __zero_reg__
29 000e 0F92 push __tmp_reg__
30 0010 0FB6 in __tmp_reg__,__SREG__
31 0012 0F92 push __tmp_reg__
32 0014 1124 clr __zero_reg__
33 0016 EF92 push r14
34 0018 FF92 push r15
35 001a 0F93 push r16
36 001c 1F93 push r17
37 001e 2F93 push r18
38 0020 3F93 push r19
39 0022 4F93 push r20
40 0024 5F93 push r21
41 0026 6F93 push r22
42 0028 7F93 push r23
43 002a 8F93 push r24
44 002c 9F93 push r25
45 002e AF93 push r26
46 0030 BF93 push r27
47 0032 CF93 push r28
48 0034 DF93 push r29
49 0036 EF93 push r30
50 0038 FF93 push r31
51 /* prologue end (size=23) */
52 003a 1092 7A00 sts 122,__zero_reg__
53 003e 4091 0000 lds r20,state.2005
54 0042 4F5F subi r20,lo8(-(1))
55 0044 4093 0000 sts state.2005,r20
56 0048 4150 subi r20,lo8(-(-1))
57 004a 4330 cpi r20,lo8(3)
58 004c 01F4 brne .+2
59 004e 00C0 rjmp .L8
60 0050 4430 cpi r20,lo8(4)
61 0052 00F4 brsh .L13
62 0054 4130 cpi r20,lo8(1)
63 0056 01F4 brne .+2
64 0058 00C0 rjmp .L6
65 005a 4230 cpi r20,lo8(2)
66 005c 00F0 brlo .+2
67 005e 00C0 rjmp .L7
68 0060 00C0 rjmp .L36
69 .L13:
70 0062 4530 cpi r20,lo8(5)
71 0064 01F4 brne .+2
72 0066 00C0 rjmp .L10
73 0068 4530 cpi r20,lo8(5)
74 006a 00F4 brsh .+2
75 006c 00C0 rjmp .L9
76 006e 4630 cpi r20,lo8(6)
77 0070 01F4 brne .+2
78 0072 00C0 rjmp .L11
79 0074 4730 cpi r20,lo8(7)
80 0076 01F0 breq .+2
81 0078 00C0 rjmp .L37
82 007a 00C0 rjmp .L12
83 .L36:
84 007c 2091 0000 lds r18,AdNeutralGier
85 0080 3091 0000 lds r19,(AdNeutralGier)+1
86 0084 8091 7800 lds r24,120
87 0088 9091 7900 lds r25,(120)+1
88 008c 281B sub r18,r24
89 008e 390B sbc r19,r25
90 0090 8091 0000 lds r24,AccumulateGier
91 0094 9091 0000 lds r25,(AccumulateGier)+1
92 0098 820F add r24,r18
93 009a 931F adc r25,r19
94 009c 9093 0000 sts (AccumulateGier)+1,r25
95 00a0 8093 0000 sts AccumulateGier,r24
96 00a4 8091 0000 lds r24,MessanzahlGier
97 00a8 8F5F subi r24,lo8(-(1))
98 00aa 8093 0000 sts MessanzahlGier,r24
99 00ae 8091 0000 lds r24,Mess_Integral_Gier
100 00b2 9091 0000 lds r25,(Mess_Integral_Gier)+1
101 00b6 A091 0000 lds r26,(Mess_Integral_Gier)+2
102 00ba B091 0000 lds r27,(Mess_Integral_Gier)+3
103 00be 4427 clr r20
104 00c0 37FD sbrc r19,7
105 00c2 4095 com r20
106 00c4 542F mov r21,r20
107 00c6 820F add r24,r18
108 00c8 931F adc r25,r19
109 00ca A41F adc r26,r20
110 00cc B51F adc r27,r21
111 00ce 8093 0000 sts Mess_Integral_Gier,r24
112 00d2 9093 0000 sts (Mess_Integral_Gier)+1,r25
113 00d6 A093 0000 sts (Mess_Integral_Gier)+2,r26
114 00da B093 0000 sts (Mess_Integral_Gier)+3,r27
115 00de 8091 0000 lds r24,Mess_Integral_Gier2
116 00e2 9091 0000 lds r25,(Mess_Integral_Gier2)+1
117 00e6 A091 0000 lds r26,(Mess_Integral_Gier2)+2
118 00ea B091 0000 lds r27,(Mess_Integral_Gier2)+3
119 00ee 820F add r24,r18
120 00f0 931F adc r25,r19
121 00f2 A41F adc r26,r20
122 00f4 B51F adc r27,r21
123 00f6 8093 0000 sts Mess_Integral_Gier2,r24
124 00fa 9093 0000 sts (Mess_Integral_Gier2)+1,r25
125 00fe A093 0000 sts (Mess_Integral_Gier2)+2,r26
126 0102 B093 0000 sts (Mess_Integral_Gier2)+3,r27
127 0106 81E0 ldi r24,lo8(1)
128 0108 8093 0000 sts kanal.2004,r24
129 010c 8091 0000 lds r24,ZaehlMessungen
130 0110 9091 0000 lds r25,(ZaehlMessungen)+1
131 0114 0196 adiw r24,1
132 0116 9093 0000 sts (ZaehlMessungen)+1,r25
133 011a 8093 0000 sts ZaehlMessungen,r24
134 011e 00C0 rjmp .L14
135 .L6:
136 0120 6091 7800 lds r22,120
137 0124 7091 7900 lds r23,(120)+1
138 0128 8091 0000 lds r24,AdNeutralRoll
139 012c 9091 0000 lds r25,(AdNeutralRoll)+1
140 0130 681B sub r22,r24
141 0132 790B sbc r23,r25
142 0134 8091 0000 lds r24,Mess_IntegralRoll
143 0138 9091 0000 lds r25,(Mess_IntegralRoll)+1
144 013c A091 0000 lds r26,(Mess_IntegralRoll)+2
145 0140 B091 0000 lds r27,(Mess_IntegralRoll)+3
146 0144 9B01 movw r18,r22
147 0146 4427 clr r20
148 0148 37FD sbrc r19,7
149 014a 4095 com r20
150 014c 542F mov r21,r20
151 014e 820F add r24,r18
152 0150 931F adc r25,r19
153 0152 A41F adc r26,r20
154 0154 B51F adc r27,r21
155 0156 8093 0000 sts Mess_IntegralRoll,r24
156 015a 9093 0000 sts (Mess_IntegralRoll)+1,r25
157 015e A093 0000 sts (Mess_IntegralRoll)+2,r26
158 0162 B093 0000 sts (Mess_IntegralRoll)+3,r27
159 0166 8091 0000 lds r24,Mess_IntegralRoll2
160 016a 9091 0000 lds r25,(Mess_IntegralRoll2)+1
161 016e A091 0000 lds r26,(Mess_IntegralRoll2)+2
162 0172 B091 0000 lds r27,(Mess_IntegralRoll2)+3
163 0176 820F add r24,r18
164 0178 931F adc r25,r19
165 017a A41F adc r26,r20
166 017c B51F adc r27,r21
167 017e 8093 0000 sts Mess_IntegralRoll2,r24
168 0182 9093 0000 sts (Mess_IntegralRoll2)+1,r25
169 0186 A093 0000 sts (Mess_IntegralRoll2)+2,r26
170 018a B093 0000 sts (Mess_IntegralRoll2)+3,r27
171 018e 8091 7800 lds r24,120
172 0192 9091 7900 lds r25,(120)+1
173 0196 0A97 sbiw r24,10
174 0198 00F4 brsh .L15
175 019a 64E4 ldi r22,lo8(-700)
176 019c 7DEF ldi r23,hi8(-700)
177 .L15:
178 019e 8091 7800 lds r24,120
179 01a2 9091 7900 lds r25,(120)+1
180 01a6 895E subi r24,lo8(1001)
181 01a8 9340 sbci r25,hi8(1001)
182 01aa 00F0 brlo .L17
183 01ac 6CEB ldi r22,lo8(700)
184 01ae 72E0 ldi r23,hi8(700)
185 .L17:
186 01b0 8091 0000 lds r24,AccumulateRoll
187 01b4 9091 0000 lds r25,(AccumulateRoll)+1
188 01b8 860F add r24,r22
189 01ba 971F adc r25,r23
190 01bc 9093 0000 sts (AccumulateRoll)+1,r25
191 01c0 8093 0000 sts AccumulateRoll,r24
192 01c4 8091 0000 lds r24,MessanzahlRoll
193 01c8 8F5F subi r24,lo8(-(1))
194 01ca 8093 0000 sts MessanzahlRoll,r24
195 01ce 82E0 ldi r24,lo8(2)
196 01d0 00C0 rjmp .L39
197 .L7:
198 01d2 6091 7800 lds r22,120
199 01d6 7091 7900 lds r23,(120)+1
200 01da 8091 0000 lds r24,AdNeutralNick
201 01de 9091 0000 lds r25,(AdNeutralNick)+1
202 01e2 681B sub r22,r24
203 01e4 790B sbc r23,r25
204 01e6 8091 0000 lds r24,Mess_IntegralNick
205 01ea 9091 0000 lds r25,(Mess_IntegralNick)+1
206 01ee A091 0000 lds r26,(Mess_IntegralNick)+2
207 01f2 B091 0000 lds r27,(Mess_IntegralNick)+3
208 01f6 9B01 movw r18,r22
209 01f8 4427 clr r20
210 01fa 37FD sbrc r19,7
211 01fc 4095 com r20
212 01fe 542F mov r21,r20
213 0200 820F add r24,r18
214 0202 931F adc r25,r19
215 0204 A41F adc r26,r20
216 0206 B51F adc r27,r21
217 0208 8093 0000 sts Mess_IntegralNick,r24
218 020c 9093 0000 sts (Mess_IntegralNick)+1,r25
219 0210 A093 0000 sts (Mess_IntegralNick)+2,r26
220 0214 B093 0000 sts (Mess_IntegralNick)+3,r27
221 0218 8091 0000 lds r24,Mess_IntegralNick2
222 021c 9091 0000 lds r25,(Mess_IntegralNick2)+1
223 0220 A091 0000 lds r26,(Mess_IntegralNick2)+2
224 0224 B091 0000 lds r27,(Mess_IntegralNick2)+3
225 0228 820F add r24,r18
226 022a 931F adc r25,r19
227 022c A41F adc r26,r20
228 022e B51F adc r27,r21
229 0230 8093 0000 sts Mess_IntegralNick2,r24
230 0234 9093 0000 sts (Mess_IntegralNick2)+1,r25
231 0238 A093 0000 sts (Mess_IntegralNick2)+2,r26
232 023c B093 0000 sts (Mess_IntegralNick2)+3,r27
233 0240 8091 7800 lds r24,120
234 0244 9091 7900 lds r25,(120)+1
235 0248 0A97 sbiw r24,10
236 024a 00F4 brsh .L19
237 024c 64E4 ldi r22,lo8(-700)
238 024e 7DEF ldi r23,hi8(-700)
239 .L19:
240 0250 8091 7800 lds r24,120
241 0254 9091 7900 lds r25,(120)+1
242 0258 895E subi r24,lo8(1001)
243 025a 9340 sbci r25,hi8(1001)
244 025c 00F0 brlo .L21
245 025e 6CEB ldi r22,lo8(700)
246 0260 72E0 ldi r23,hi8(700)
247 .L21:
248 0262 8091 0000 lds r24,AccumulateNick
249 0266 9091 0000 lds r25,(AccumulateNick)+1
250 026a 860F add r24,r22
251 026c 971F adc r25,r23
252 026e 9093 0000 sts (AccumulateNick)+1,r25
253 0272 8093 0000 sts AccumulateNick,r24
254 0276 8091 0000 lds r24,MessanzahlNick
255 027a 8F5F subi r24,lo8(-(1))
256 027c 8093 0000 sts MessanzahlNick,r24
257 0280 84E0 ldi r24,lo8(4)
258 .L39:
259 0282 8093 0000 sts kanal.2004,r24
260 0286 00C0 rjmp .L14
261 .L8:
262 0288 4091 0000 lds r20,UBat
263 028c 5091 0000 lds r21,(UBat)+1
264 0290 8091 7800 lds r24,120
265 0294 9091 7900 lds r25,(120)+1
266 0298 9A01 movw r18,r20
267 029a 220F lsl r18
268 029c 331F rol r19
269 029e 240F add r18,r20
270 02a0 351F adc r19,r21
271 02a2 63E0 ldi r22,lo8(3)
272 02a4 70E0 ldi r23,hi8(3)
273 02a6 0E94 0000 call __udivmodhi4
274 02aa 260F add r18,r22
275 02ac 371F adc r19,r23
276 02ae 3695 lsr r19
277 02b0 2795 ror r18
278 02b2 3695 lsr r19
279 02b4 2795 ror r18
280 02b6 3093 0000 sts (UBat)+1,r19
281 02ba 2093 0000 sts UBat,r18
282 02be 86E0 ldi r24,lo8(6)
283 02c0 00C0 rjmp .L39
284 .L9:
285 02c2 8091 0000 lds r24,NeutralAccY
286 02c6 9091 0000 lds r25,(NeutralAccY)+1
287 02ca 2091 7800 lds r18,120
288 02ce 3091 7900 lds r19,(120)+1
289 02d2 821B sub r24,r18
290 02d4 930B sbc r25,r19
291 02d6 9093 0000 sts (Aktuell_ay)+1,r25
292 02da 8093 0000 sts Aktuell_ay,r24
293 02de 8091 0000 lds r24,accumulate_AccRoll
294 02e2 9091 0000 lds r25,(accumulate_AccRoll)+1
295 02e6 2091 0000 lds r18,Aktuell_ay
296 02ea 3091 0000 lds r19,(Aktuell_ay)+1
297 02ee 820F add r24,r18
298 02f0 931F adc r25,r19
299 02f2 9093 0000 sts (accumulate_AccRoll)+1,r25
300 02f6 8093 0000 sts accumulate_AccRoll,r24
301 02fa 8091 0000 lds r24,messanzahl_AccRoll
302 02fe 8F5F subi r24,lo8(-(1))
303 0300 8093 0000 sts messanzahl_AccRoll,r24
304 0304 87E0 ldi r24,lo8(7)
305 0306 00C0 rjmp .L39
306 .L10:
307 0308 8091 7800 lds r24,120
308 030c 9091 7900 lds r25,(120)+1
309 0310 2091 0000 lds r18,NeutralAccX
310 0314 3091 0000 lds r19,(NeutralAccX)+1
311 0318 821B sub r24,r18
312 031a 930B sbc r25,r19
313 031c 9093 0000 sts (Aktuell_ay)+1,r25
314 0320 8093 0000 sts Aktuell_ay,r24
315 0324 8091 0000 lds r24,accumulate_AccNick
316 0328 9091 0000 lds r25,(accumulate_AccNick)+1
317 032c 2091 0000 lds r18,Aktuell_ay
318 0330 3091 0000 lds r19,(Aktuell_ay)+1
319 0334 820F add r24,r18
320 0336 931F adc r25,r19
321 0338 9093 0000 sts (accumulate_AccNick)+1,r25
322 033c 8093 0000 sts accumulate_AccNick,r24
323 0340 8091 0000 lds r24,messanzahl_AccNick
324 0344 8F5F subi r24,lo8(-(1))
325 0346 8093 0000 sts messanzahl_AccNick,r24
326 034a 4093 0000 sts kanal.2004,r20
327 034e 86E0 ldi r24,lo8(6)
328 0350 00C0 rjmp .L40
329 .L11:
330 0352 6091 7800 lds r22,120
331 0356 7091 7900 lds r23,(120)+1
332 035a E090 0000 lds r14,NeutralAccZ
333 035e F090 0000 lds r15,(NeutralAccZ)+1
334 0362 0091 0000 lds r16,(NeutralAccZ)+2
335 0366 1091 0000 lds r17,(NeutralAccZ)+3
336 036a 8827 clr r24
337 036c 77FD sbrc r23,7
338 036e 8095 com r24
339 0370 982F mov r25,r24
340 0372 0E94 0000 call __floatsisf
341 0376 A801 movw r20,r16
342 0378 9701 movw r18,r14
343 037a 0E94 0000 call __subsf3
344 037e 0E94 0000 call __fixsfsi
345 0382 7093 0000 sts (accumulate_AccHoch)+1,r23
346 0386 6093 0000 sts accumulate_AccHoch,r22
347 038a 2091 0000 lds r18,accumulate_AccHoch
348 038e 3091 0000 lds r19,(accumulate_AccHoch)+1
349 0392 E091 0000 lds r30,Aktuell_ay
350 0396 F091 0000 lds r31,(Aktuell_ay)+1
351 039a 8091 0000 lds r24,Aktuell_ax
352 039e 9091 0000 lds r25,(Aktuell_ax)+1
353 03a2 97FF sbrs r25,7
354 03a4 00C0 rjmp .L23
355 03a6 9095 com r25
356 03a8 8195 neg r24
357 03aa 9F4F sbci r25,lo8(-1)
358 .L23:
359 03ac 64E0 ldi r22,lo8(4)
360 03ae 70E0 ldi r23,hi8(4)
361 03b0 0E94 0000 call __divmodhi4
362 03b4 EB01 movw r28,r22
363 03b6 CF01 movw r24,r30
364 03b8 F7FF sbrs r31,7
365 03ba 00C0 rjmp .L24
366 03bc 9095 com r25
367 03be 8195 neg r24
368 03c0 9F4F sbci r25,lo8(-1)
369 .L24:
370 03c2 64E0 ldi r22,lo8(4)
371 03c4 70E0 ldi r23,hi8(4)
372 03c6 0E94 0000 call __divmodhi4
373 03ca 260F add r18,r22
374 03cc 371F adc r19,r23
375 03ce 2C0F add r18,r28
376 03d0 3D1F adc r19,r29
377 03d2 3093 0000 sts (accumulate_AccHoch)+1,r19
378 03d6 2093 0000 sts accumulate_AccHoch,r18
379 03da 8091 0000 lds r24,accumulate_AccHoch
380 03de 9091 0000 lds r25,(accumulate_AccHoch)+1
381 03e2 0297 sbiw r24,2
382 03e4 04F0 brlt .L25
383 03e6 6091 0000 lds r22,NeutralAccZ
384 03ea 7091 0000 lds r23,(NeutralAccZ)+1
385 03ee 8091 0000 lds r24,(NeutralAccZ)+2
386 03f2 9091 0000 lds r25,(NeutralAccZ)+3
387 03f6 20E0 ldi r18,lo8(0x44480000)
388 03f8 30E0 ldi r19,hi8(0x44480000)
389 03fa 48E4 ldi r20,hlo8(0x44480000)
390 03fc 54E4 ldi r21,hhi8(0x44480000)
391 03fe 0E94 0000 call __ltsf2
392 0402 8823 tst r24
393 0404 04F0 brlt .+2
394 0406 00C0 rjmp .L27
395 0408 6091 0000 lds r22,NeutralAccZ
396 040c 7091 0000 lds r23,(NeutralAccZ)+1
397 0410 8091 0000 lds r24,(NeutralAccZ)+2
398 0414 9091 0000 lds r25,(NeutralAccZ)+3
399 0418 2AE0 ldi r18,lo8(0x3ca3d70a)
400 041a 37ED ldi r19,hi8(0x3ca3d70a)
401 041c 43EA ldi r20,hlo8(0x3ca3d70a)
402 041e 5CE3 ldi r21,hhi8(0x3ca3d70a)
403 0420 0E94 0000 call __addsf3
404 0424 00C0 rjmp .L38
405 .L25:
406 0426 8091 0000 lds r24,accumulate_AccHoch
407 042a 9091 0000 lds r25,(accumulate_AccHoch)+1
408 042e 8F5F subi r24,lo8(-1)
409 0430 9F4F sbci r25,hi8(-1)
410 0432 04F4 brge .L27
411 0434 6091 0000 lds r22,NeutralAccZ
412 0438 7091 0000 lds r23,(NeutralAccZ)+1
413 043c 8091 0000 lds r24,(NeutralAccZ)+2
414 0440 9091 0000 lds r25,(NeutralAccZ)+3
415 0444 20E0 ldi r18,lo8(0x44160000)
416 0446 30E0 ldi r19,hi8(0x44160000)
417 0448 46E1 ldi r20,hlo8(0x44160000)
418 044a 54E4 ldi r21,hhi8(0x44160000)
419 044c 0E94 0000 call __gtsf2
420 0450 1816 cp __zero_reg__,r24
421 0452 04F4 brge .L27
422 0454 6091 0000 lds r22,NeutralAccZ
423 0458 7091 0000 lds r23,(NeutralAccZ)+1
424 045c 8091 0000 lds r24,(NeutralAccZ)+2
425 0460 9091 0000 lds r25,(NeutralAccZ)+3
426 0464 2AE0 ldi r18,lo8(0x3ca3d70a)
427 0466 37ED ldi r19,hi8(0x3ca3d70a)
428 0468 43EA ldi r20,hlo8(0x3ca3d70a)
429 046a 5CE3 ldi r21,hhi8(0x3ca3d70a)
430 046c 0E94 0000 call __subsf3
431 .L38:
432 0470 6093 0000 sts NeutralAccZ,r22
433 0474 7093 0000 sts (NeutralAccZ)+1,r23
434 0478 8093 0000 sts (NeutralAccZ)+2,r24
435 047c 9093 0000 sts (NeutralAccZ)+3,r25
436 .L27:
437 0480 81E0 ldi r24,lo8(1)
438 0482 8093 0000 sts messanzahl_AccHoch,r24
439 0486 8091 7800 lds r24,120
440 048a 9091 7900 lds r25,(120)+1
441 048e 9093 0000 sts (Aktuell_az)+1,r25
442 0492 8093 0000 sts Aktuell_az,r24
443 0496 2091 0000 lds r18,Mess_Integral_Hoch
444 049a 3091 0000 lds r19,(Mess_Integral_Hoch)+1
445 049e 4091 0000 lds r20,(Mess_Integral_Hoch)+2
446 04a2 5091 0000 lds r21,(Mess_Integral_Hoch)+3
447 04a6 8091 0000 lds r24,accumulate_AccHoch
448 04aa 9091 0000 lds r25,(accumulate_AccHoch)+1
449 04ae AA27 clr r26
450 04b0 97FD sbrc r25,7
451 04b2 A095 com r26
452 04b4 BA2F mov r27,r26
453 04b6 280F add r18,r24
454 04b8 391F adc r19,r25
455 04ba 4A1F adc r20,r26
456 04bc 5B1F adc r21,r27
457 04be 2093 0000 sts Mess_Integral_Hoch,r18
458 04c2 3093 0000 sts (Mess_Integral_Hoch)+1,r19
459 04c6 4093 0000 sts (Mess_Integral_Hoch)+2,r20
460 04ca 5093 0000 sts (Mess_Integral_Hoch)+3,r21
461 04ce E090 0000 lds r14,Mess_Integral_Hoch
462 04d2 F090 0000 lds r15,(Mess_Integral_Hoch)+1
463 04d6 0091 0000 lds r16,(Mess_Integral_Hoch)+2
464 04da 1091 0000 lds r17,(Mess_Integral_Hoch)+3
465 04de 6091 0000 lds r22,Mess_Integral_Hoch
466 04e2 7091 0000 lds r23,(Mess_Integral_Hoch)+1
467 04e6 8091 0000 lds r24,(Mess_Integral_Hoch)+2
468 04ea 9091 0000 lds r25,(Mess_Integral_Hoch)+3
469 04ee 20E0 ldi r18,lo8(1024)
470 04f0 34E0 ldi r19,hi8(1024)
471 04f2 40E0 ldi r20,hlo8(1024)
472 04f4 50E0 ldi r21,hhi8(1024)
473 04f6 0E94 0000 call __divmodsi4
474 04fa E21A sub r14,r18
475 04fc F30A sbc r15,r19
476 04fe 040B sbc r16,r20
477 0500 150B sbc r17,r21
478 0502 E092 0000 sts Mess_Integral_Hoch,r14
479 0506 F092 0000 sts (Mess_Integral_Hoch)+1,r15
480 050a 0093 0000 sts (Mess_Integral_Hoch)+2,r16
481 050e 1093 0000 sts (Mess_Integral_Hoch)+3,r17
482 0512 83E0 ldi r24,lo8(3)
483 0514 8093 0000 sts kanal.2004,r24
484 0518 87E0 ldi r24,lo8(7)
485 .L40:
486 051a 8093 0000 sts state.2005,r24
487 051e 00C0 rjmp .L14
488 .L12:
489 0520 8091 0000 lds r24,tmpLuftdruck
490 0524 9091 0000 lds r25,(tmpLuftdruck)+1
491 0528 2091 7800 lds r18,120
492 052c 3091 7900 lds r19,(120)+1
493 0530 820F add r24,r18
494 0532 931F adc r25,r19
495 0534 9093 0000 sts (tmpLuftdruck)+1,r25
496 0538 8093 0000 sts tmpLuftdruck,r24
497 053c 8091 0000 lds r24,messanzahl_Druck
498 0540 8F5F subi r24,lo8(-(1))
499 0542 8093 0000 sts messanzahl_Druck,r24
500 0546 8091 0000 lds r24,messanzahl_Druck
501 054a 8530 cpi r24,lo8(5)
502 054c 00F4 brsh .+2
503 054e 00C0 rjmp .L37
504 0550 8091 7800 lds r24,120
505 0554 9091 7900 lds r25,(120)+1
506 0558 9093 0000 sts (MessLuftdruck)+1,r25
507 055c 8093 0000 sts MessLuftdruck,r24
508 0560 1092 0000 sts messanzahl_Druck,__zero_reg__
509 0564 8091 0000 lds r24,StartLuftdruck
510 0568 9091 0000 lds r25,(StartLuftdruck)+1
511 056c 2091 0000 lds r18,tmpLuftdruck
512 0570 3091 0000 lds r19,(tmpLuftdruck)+1
513 0574 821B sub r24,r18
514 0576 930B sbc r25,r19
515 0578 2091 0000 lds r18,HoehenWert
516 057c 3091 0000 lds r19,(HoehenWert)+1
517 0580 821B sub r24,r18
518 0582 930B sbc r25,r19
519 0584 9093 0000 sts (HoeheD)+1,r25
520 0588 8093 0000 sts HoeheD,r24
521 058c 6091 0000 lds r22,tmpLuftdruck
522 0590 7091 0000 lds r23,(tmpLuftdruck)+1
523 0594 E090 0000 lds r14,Luftdruck
524 0598 F090 0000 lds r15,(Luftdruck)+1
525 059c 0091 0000 lds r16,(Luftdruck)+2
526 05a0 1091 0000 lds r17,(Luftdruck)+3
527 05a4 8827 clr r24
528 05a6 77FD sbrc r23,7
529 05a8 8095 com r24
530 05aa 982F mov r25,r24
531 05ac A801 movw r20,r16
532 05ae 9701 movw r18,r14
533 05b0 220F lsl r18
534 05b2 331F rol r19
535 05b4 441F rol r20
536 05b6 551F rol r21
537 05b8 2E0D add r18,r14
538 05ba 3F1D adc r19,r15
539 05bc 401F adc r20,r16
540 05be 511F adc r21,r17
541 05c0 620F add r22,r18
542 05c2 731F adc r23,r19
543 05c4 841F adc r24,r20
544 05c6 951F adc r25,r21
545 05c8 24E0 ldi r18,lo8(4)
546 05ca 30E0 ldi r19,hi8(4)
547 05cc 40E0 ldi r20,hlo8(4)
548 05ce 50E0 ldi r21,hhi8(4)
549 05d0 0E94 0000 call __divmodsi4
550 05d4 2093 0000 sts Luftdruck,r18
551 05d8 3093 0000 sts (Luftdruck)+1,r19
552 05dc 4093 0000 sts (Luftdruck)+2,r20
553 05e0 5093 0000 sts (Luftdruck)+3,r21
554 05e4 2091 0000 lds r18,StartLuftdruck
555 05e8 3091 0000 lds r19,(StartLuftdruck)+1
556 05ec 8091 0000 lds r24,Luftdruck
557 05f0 9091 0000 lds r25,(Luftdruck)+1
558 05f4 A091 0000 lds r26,(Luftdruck)+2
559 05f8 B091 0000 lds r27,(Luftdruck)+3
560 05fc 281B sub r18,r24
561 05fe 390B sbc r19,r25
562 0600 3093 0000 sts (HoehenWert)+1,r19
563 0604 2093 0000 sts HoehenWert,r18
564 0608 1092 0000 sts (tmpLuftdruck)+1,__zero_reg__
565 060c 1092 0000 sts tmpLuftdruck,__zero_reg__
566 .L37:
567 0610 1092 0000 sts kanal.2004,__zero_reg__
568 0614 1092 0000 sts state.2005,__zero_reg__
569 .L14:
570 0618 8091 0000 lds r24,kanal.2004
571 061c 8093 7C00 sts 124,r24
572 0620 8FEE ldi r24,lo8(-17)
573 0622 8093 7A00 sts 122,r24
574 /* epilogue: frame size=0 */
575 0626 FF91 pop r31
576 0628 EF91 pop r30
577 062a DF91 pop r29
578 062c CF91 pop r28
579 062e BF91 pop r27
580 0630 AF91 pop r26
581 0632 9F91 pop r25
582 0634 8F91 pop r24
583 0636 7F91 pop r23
584 0638 6F91 pop r22
585 063a 5F91 pop r21
586 063c 4F91 pop r20
587 063e 3F91 pop r19
588 0640 2F91 pop r18
589 0642 1F91 pop r17
590 0644 0F91 pop r16
591 0646 FF90 pop r15
592 0648 EF90 pop r14
593 064a 0F90 pop __tmp_reg__
594 064c 0FBE out __SREG__,__tmp_reg__
595 064e 0F90 pop __tmp_reg__
596 0650 1F90 pop __zero_reg__
597 0652 1895 reti
598 /* epilogue end (size=23) */
599 /* function __vector_24 size 811 (765) */
601 .global SucheLuftruckOffset
603 SucheLuftruckOffset:
604 /* prologue: frame size=0 */
605 0654 CF93 push r28
606 0656 DF93 push r29
607 /* prologue end (size=2) */
608 0658 C0E0 ldi r28,lo8(0)
609 065a D0E0 ldi r29,hi8(0)
610 .L42:
611 065c C7BD out 71-0x20,r28
612 065e 82E3 ldi r24,lo8(50)
613 0660 90E0 ldi r25,hi8(50)
614 0662 0E94 0000 call Delay_ms
615 0666 80E0 ldi r24,lo8(__c.1990)
616 0668 90E0 ldi r25,hi8(__c.1990)
617 066a 9F93 push r25
618 066c 8F93 push r24
619 066e 1F92 push __zero_reg__
620 0670 0E94 0000 call _printf_P
621 0674 8091 0000 lds r24,MessLuftdruck
622 0678 9091 0000 lds r25,(MessLuftdruck)+1
623 067c 0F90 pop __tmp_reg__
624 067e 0F90 pop __tmp_reg__
625 0680 0F90 pop __tmp_reg__
626 0682 8458 subi r24,lo8(900)
627 0684 9340 sbci r25,hi8(900)
628 0686 00F0 brlo .L43
629 0688 2196 adiw r28,1
630 068a CA3F cpi r28,250
631 068c D105 cpc r29,__zero_reg__
632 068e 01F4 brne .L42
633 .L43:
634 0690 C093 0000 sts DruckOffsetSetting,r28
635 0694 88EC ldi r24,lo8(200)
636 0696 90E0 ldi r25,hi8(200)
637 0698 0E94 0000 call Delay_ms
638 /* epilogue: frame size=0 */
639 069c DF91 pop r29
640 069e CF91 pop r28
641 06a0 0895 ret
642 /* epilogue end (size=3) */
643 /* function SucheLuftruckOffset size 40 (35) */
645 .global UBat
646 .data
649 UBat:
650 0000 6400 .word 100
651 .global AccumulateNick
652 .global AccumulateNick
653 .section .bss
656 AccumulateNick:
657 0000 0000 .skip 2,0
658 .global AccumulateRoll
659 .global AccumulateRoll
662 AccumulateRoll:
663 0002 0000 .skip 2,0
664 .global AccumulateGier
665 .global AccumulateGier
668 AccumulateGier:
669 0004 0000 .skip 2,0
670 .global accumulate_AccRoll
671 .global accumulate_AccRoll
674 accumulate_AccRoll:
675 0006 0000 .skip 2,0
676 .global accumulate_AccNick
677 .global accumulate_AccNick
680 accumulate_AccNick:
681 0008 0000 .skip 2,0
682 .global accumulate_AccHoch
683 .global accumulate_AccHoch
686 accumulate_AccHoch:
687 000a 0000 .skip 2,0
688 .global MessanzahlNick
689 .global MessanzahlNick
692 MessanzahlNick:
693 000c 00 .skip 1,0
694 .global MessanzahlRoll
695 .global MessanzahlRoll
698 MessanzahlRoll:
699 000d 00 .skip 1,0
700 .global MessanzahlGier
701 .global MessanzahlGier
704 MessanzahlGier:
705 000e 00 .skip 1,0
706 .global messanzahl_AccNick
707 .global messanzahl_AccNick
710 messanzahl_AccNick:
711 000f 00 .skip 1,0
712 .global messanzahl_AccRoll
713 .global messanzahl_AccRoll
716 messanzahl_AccRoll:
717 0010 00 .skip 1,0
718 .global messanzahl_AccHoch
719 .global messanzahl_AccHoch
722 messanzahl_AccHoch:
723 0011 00 .skip 1,0
724 .global Luftdruck
725 .data
728 Luftdruck:
729 0002 00 .byte 0
730 0003 7D .byte 125
731 0004 00 .byte 0
732 0005 00 .byte 0
733 .global MessLuftdruck
736 MessLuftdruck:
737 0006 FF03 .word 1023
738 .global HoeheD
739 .global HoeheD
740 .section .bss
743 HoeheD:
744 0012 0000 .skip 2,0
745 .global ZaehlMessungen
746 .global ZaehlMessungen
749 ZaehlMessungen:
750 0014 0000 .skip 2,0
751 .lcomm state.2005,1
752 .lcomm kanal.2004,1
753 .section .progmem.data,"a",@progbits
756 __c.1990:
757 0000 2E00 .string "."
758 .comm DiffNick,2,1
759 .comm DiffRoll,2,1
760 .comm SenderOkay,1,1
761 .comm CosinusNickWinkel,1,1
762 .comm CosinusRollWinkel,1,1
763 .comm durchschnitt_northing,4,1
764 .comm durchschnitt_easting,4,1
765 .comm gps_p,2,1
766 .comm gps_d,2,1
767 .comm skal,2,1
768 .comm gps_gethome,2,1
769 .comm Aktuell_Nick,2,1
770 .comm Aktuell_Roll,2,1
771 .comm Aktuell_Gier,2,1
772 .comm Aktuell_ax,2,1
773 .comm Aktuell_ay,2,1
774 .comm Aktuell_az,2,1
775 .comm messanzahl_Druck,1,1
776 .comm DruckOffsetSetting,1,1
777 .comm StartLuftdruck,2,1
778 .comm RemoteTasten,1,1
779 .comm Timeout,1,1
780 .comm IntegralNick,4,1
781 .comm IntegralNick2,4,1
782 .comm IntegralRoll,4,1
783 .comm IntegralRoll2,4,1
784 .comm Mess_IntegralNick,4,1
785 .comm Mess_IntegralNick2,4,1
786 .comm Mess_IntegralRoll,4,1
787 .comm Mess_IntegralRoll2,4,1
788 .comm Integral_Gier,4,1
789 .comm Mess_Integral_Gier,4,1
790 .comm h,1,1
791 .comm m,1,1
792 .comm s,1,1
793 .comm Motor_Vorne,1,1
794 .comm Motor_Hinten,1,1
795 .comm Motor_Rechts,1,1
796 .comm Motor_Links,1,1
797 .comm Count,1,1
798 .comm MotorWert,5,1
799 .comm StickNick,2,1
800 .comm StickRoll,2,1
801 .comm StickGier,2,1
802 .comm MotorenEin,1,1
803 .comm tmpLuftdruck,2,1
804 /* File "analog.c": code 857 = 0x0359 ( 805), prologues 25, epilogues 27 */
DEFINED SYMBOLS
*ABS*:00000000 analog.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:13 .text:00000000 ADC_Init
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:26 .text:0000000c __vector_24
.bss:00000016 state.2005
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:668 .bss:00000004 AccumulateGier
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:704 .bss:0000000e MessanzahlGier
*COM*:00000004 Mess_Integral_Gier
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:751 .bss:00000017 kanal.2004
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:749 .bss:00000014 ZaehlMessungen
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:662 .bss:00000002 AccumulateRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:698 .bss:0000000d MessanzahlRoll
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:656 .bss:00000000 AccumulateNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:692 .bss:0000000c MessanzahlNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:649 .data:00000000 UBat
*COM*:00000002 Aktuell_ay
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:674 .bss:00000006 accumulate_AccRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:716 .bss:00000010 messanzahl_AccRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:680 .bss:00000008 accumulate_AccNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:710 .bss:0000000f messanzahl_AccNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:686 .bss:0000000a accumulate_AccHoch
*COM*:00000002 Aktuell_ax
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:722 .bss:00000011 messanzahl_AccHoch
*COM*:00000002 Aktuell_az
*COM*:00000002 tmpLuftdruck
*COM*:00000001 messanzahl_Druck
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:736 .data:00000006 MessLuftdruck
*COM*:00000002 StartLuftdruck
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:743 .bss:00000012 HoeheD
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:728 .data:00000002 Luftdruck
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:603 .text:00000654 SucheLuftruckOffset
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc6sAnBf.s:756 .progmem.data:00000000 __c.1990
*COM*:00000001 DruckOffsetSetting
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 SenderOkay
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000002 Aktuell_Nick
*COM*:00000002 Aktuell_Roll
*COM*:00000002 Aktuell_Gier
*COM*:00000001 RemoteTasten
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
AdNeutralGier
Mess_Integral_Gier2
AdNeutralRoll
AdNeutralNick
__udivmodhi4
NeutralAccY
NeutralAccX
NeutralAccZ
__floatsisf
__subsf3
__fixsfsi
__divmodhi4
__ltsf2
__addsf3
__gtsf2
Mess_Integral_Hoch
__divmodsi4
HoehenWert
Delay_ms
_printf_P
/branches/chris_hallo2/eeprom.c
--- chris_hallo2/fc.c (nonexistent)
+++ chris_hallo2/fc.c (revision 171)
@@ -0,0 +1,828 @@
+/*#######################################################################################
+Flight Control
+#######################################################################################*/
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) 04.2007 Holger Buss
+// + Nur für den privaten Gebrauch
+// + www.MikroKopter.com
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
+// + bzgl. der Nutzungsbedingungen aufzunehmen.
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
+// + Verkauf von Luftbildaufnahmen, usw.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
+// + eindeutig als Ursprung verlinkt werden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
+// + Benutzung auf eigene Gefahr
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
+// + mit unserer Zustimmung zulässig
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
+// + this list of conditions and the following disclaimer.
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
+// + from this software without specific prior written permission.
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
+// + for non-commercial use (directly or indirectly)
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
+// + with our written permission
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
+// + clearly linked as origin
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// + POSSIBILITY OF SUCH DAMAGE.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "main.h"
+
+unsigned char h,m,s;
+volatile unsigned char Timeout = 0;
+volatile int MesswertNick,MesswertRoll,MesswertGier;
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
+volatile float NeutralAccZ = 0;
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
+volatile long IntegralNick = 0,IntegralNick2 = 0;
+volatile long IntegralRoll = 0,IntegralRoll2 = 0;
+volatile long Integral_Gier = 0;
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
+volatile long Mess_Integral_Hoch = 0;
+volatile int KompassValue = 0;
+volatile int KompassStartwert = 0;
+volatile int KompassRichtung = 0;
+unsigned char MAX_GAS,MIN_GAS;
+unsigned char Notlandung = 0;
+unsigned char HoehenReglerAktiv = 0;
+
+float GyroFaktor;
+float IntegralFaktor;
+
+volatile int DiffNick,DiffRoll;
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
+unsigned char MotorWert[5];
+volatile unsigned char SenderOkay = 0;
+int StickNick = 0,StickRoll = 0,StickGier = 0;
+char MotorenEin = 0;
+int HoehenWert = 0;
+int SollHoehe = 0;
+
+float Kp = FAKTOR_P;
+float Ki = FAKTOR_I;
+
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
+unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
+unsigned char Parameter_UserParam1 = 0;
+unsigned char Parameter_UserParam2 = 0;
+unsigned char Parameter_UserParam3 = 0;
+unsigned char Parameter_UserParam4 = 0;
+unsigned char Parameter_ServoNickControl = 100;
+struct mk_param_struct EE_Parameter;
+
+void Piep(unsigned char Anzahl)
+{
+ while(Anzahl--)
+ {
+ if(MotorenEin) return; //auf keinen Fall im Flug!
+ beeptime = 100;
+ Delay_ms(250);
+ }
+}
+
+//############################################################################
+// Nullwerte ermitteln
+void SetNeutral(void)
+//############################################################################
+{
+ unsigned int timer;
+ NeutralAccX = 0;
+ NeutralAccY = 0;
+ NeutralAccZ = 0;
+ AdNeutralNick = 0;
+ AdNeutralRoll = 0;
+ AdNeutralGier = 0;
+ CalibrierMittelwert();
+ timer = SetDelay(5);
+ while (!CheckDelay(timer));
+ CalibrierMittelwert();
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ AdNeutralNick= abs(MesswertNick);
+ AdNeutralRoll= abs(MesswertRoll);
+ AdNeutralGier= abs(MesswertGier);
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
+ NeutralAccZ = Aktuell_az;
+
+ Mess_IntegralNick = 0;
+ Mess_IntegralNick2 = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralRoll2 = 0;
+ Mess_Integral_Gier = 0;
+ MesswertNick = 0;
+ MesswertRoll = 0;
+ MesswertGier = 0;
+ StartLuftdruck = Luftdruck;
+ HoeheD = 0;
+ Mess_Integral_Hoch = 0;
+ KompassStartwert = KompassValue;
+ beeptime = 50;
+}
+
+//############################################################################
+// Bildet den Mittelwert aus den Messwerten
+void Mittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ Integral_Gier = Mess_Integral_Gier;
+// Integral_Gier2 = Mess_Integral_Gier2;
+ IntegralNick = Mess_IntegralNick;
+ IntegralRoll = Mess_IntegralRoll;
+ IntegralNick2 = Mess_IntegralNick2;
+ IntegralRoll2 = Mess_IntegralRoll2;
+ // ADC einschalten
+ ANALOG_ON;
+
+//------------------------------------------------------------------------------
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
+ else
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
+
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
+ else
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
+//------------------------------------------------------------------------------
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Messwerte beim Ermitteln der Nullage
+void CalibrierMittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ // ADC einschalten
+ ANALOG_ON;
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Senden der Motorwerte per I2C-Bus
+void SendMotorData(void)
+//############################################################################
+{
+ if(MOTOR_OFF || !MotorenEin)
+ {
+ Motor_Hinten = 0;
+ Motor_Vorne = 0;
+ Motor_Rechts = 0;
+ Motor_Links = 0;
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0];
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1];
+ if(MotorTest[2]) Motor_Links = MotorTest[2];
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3];
+ }
+
+ DebugOut.Analog[12] = Motor_Vorne;
+ DebugOut.Analog[13] = Motor_Hinten;
+ DebugOut.Analog[14] = Motor_Links;
+ DebugOut.Analog[15] = Motor_Rechts;
+
+ //Start I2C Interrupt Mode
+ twi_state = 0;
+ motor = 0;
+ i2c_start();
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Konstanten
+// + 0-250 -> normale Werte
+// + 251 -> Poti1
+// + 252 -> Poti2
+// + 253 -> Poti3
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DefaultKonstanten1(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Normal\0", 12);
+}
+
+void DefaultKonstanten2(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Kamera\0", 12);
+}
+
+
+//############################################################################
+// Trägt ggf. das Poti als Parameter ein
+void ParameterZuordnung(void)
+//############################################################################
+{
+
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
+
+ unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
+ unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
+ unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
+
+
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+
+ Ki = (float) Parameter_I_Faktor * 0.0001;
+ MAX_GAS = EE_Parameter.Gas_Max;
+ MIN_GAS = EE_Parameter.Gas_Min;
+}
+
+
+//############################################################################
+//
+void MotorRegler(void)
+//############################################################################
+{
+ int motorwert,pd_ergebnis,h,tmp_int;
+ int GierMischanteil,GasMischanteil;
+ static long SummeNick=0,SummeRoll=0;
+ static long sollGier = 0,tmp_long,tmp_long2;
+ static int IntegralFehlerNick = 0;
+ static int IntegralFehlerRoll = 0;
+ static unsigned int RcLostTimer;
+ static unsigned char delay_neutral = 0;
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
+ static unsigned int modell_fliegt = 0;
+ static int hoehenregler = 0;
+ static char TimerWerteausgabe = 0;
+ static char NeueKompassRichtungMerken = 0;
+ Mittelwert();
+
+ GRN_ON;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gaswert ermitteln
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
+ if(GasMischanteil < 0) GasMischanteil = 0;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang schlecht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay < 100)
+ {
+ if(!PcZugriff) beeptime = 500;
+ if(RcLostTimer) RcLostTimer--;
+ else
+ {
+ MotorenEin = 0;
+ Notlandung = 0;
+ }
+ ROT_ON;
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
+ {
+ GasMischanteil = EE_Parameter.NotGas;
+ Notlandung = 1;
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
+/* Poti1 = 65;
+ Poti2 = 48;
+ Poti3 = 0;
+*/ }
+ else MotorenEin = 0;
+ }
+ else
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang gut
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay > 140)
+ {
+ Notlandung = 0;
+ RcLostTimer = EE_Parameter.NotGasZeit * 50;
+ if(GasMischanteil > 40)
+ {
+ if(modell_fliegt < 0xffff) modell_fliegt++;
+ }
+ if((modell_fliegt < 200) || (GasMischanteil < 40))
+ {
+ SummeNick = 0;
+ SummeRoll = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ }
+ if((GasMischanteil > 200) && MotorenEin == 0)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// auf Nullwerte kalibrieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
+ {
+ unsigned char setting;
+ if(++delay_neutral > 200) // nicht sofort
+ {
+ GRN_OFF;
+ SetNeutral();
+ MotorenEin = 0;
+ delay_neutral = 0;
+ modell_fliegt = 0;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
+ {
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
+ }
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
+ Piep(GetActiveParamSetNumber());
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ }
+ }
+ else delay_neutral = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gas ist unten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(GasMischanteil < 35)
+ {
+ // Starten
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Einschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(++delay_einschalten > 200)
+ {
+ delay_einschalten = 200;
+ modell_fliegt = 1;
+ MotorenEin = 1;
+ sollGier = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ Mess_IntegralNick = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ SummeNick = 0;
+ SummeRoll = 0;
+ }
+ }
+ else delay_einschalten = 0;
+ //Auf Neutralwerte setzen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Auschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
+ {
+ if(++delay_ausschalten > 200) // nicht sofort
+ {
+ MotorenEin = 0;
+ delay_ausschalten = 200;
+ modell_fliegt = 0;
+ }
+ }
+ else delay_ausschalten = 0;
+ }
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// neue Werte von der Funke
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(!NewPpmData-- || Notlandung)
+ {
+ ParameterZuordnung();
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
+
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
+
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
+ if(GyroFaktor < 0) GyroFaktor = 0;
+ if(IntegralFaktor < 0) IntegralFaktor = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Bei Empfangsausfall im Flug
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(Notlandung)
+ {
+ StickGier = 0;
+ StickNick = 0;
+ StickRoll = 0;
+ GyroFaktor = 0.1;
+ IntegralFaktor = 0.005;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gyro-Drift kompensieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define DRIFT_FAKTOR 3
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
+ {
+ IntegralFehlerNick = IntegralNick2 - IntegralNick;
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
+ ZaehlMessungen = 0;
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
+ if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
+ if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ Mess_Integral_Gier2 = Integral_Gier;
+ ANALOG_ON; // ADC einschalten
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Integrale auf ACC-Signal abgleichen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
+#define AUSGLEICH 500
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick -= tmp_long;
+ Mess_IntegralRoll -= tmp_long2;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sollGier = StickGier;
+ if(abs(StickGier) > 35)
+ {
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
+ }
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
+ Mess_Integral_Gier -= tmp_int;
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
+
+ ANALOG_ON; // ADC einschalten
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Kompass
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ //KompassValue = 12;
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
+ {
+ int w,v;
+ static int SignalSchlecht = 0;
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
+ v = abs(IntegralRoll /512);
+ if(v > w) w = v; // grösste Neigung ermitteln
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
+ {
+ KompassStartwert = KompassValue;
+ NeueKompassRichtungMerken = 0;
+ }
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
+ if(w > 0)
+ {
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
+ ANALOG_ON; // ADC einschalten
+ if(SignalSchlecht) SignalSchlecht--;
+ }
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// GPS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+if(EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)
+{
+ gps_p = Parameter_UserParam1;
+ gps_d = Parameter_UserParam2;
+
+ gps_main();
+}
+else
+{
+ GPS_Nick = 0;
+ GPS_Roll = 0;
+}
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debugwerte zuordnen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DebugOut.Sekunden++;
+ if(!TimerWerteausgabe--)
+ {
+ TimerWerteausgabe = 49;
+// DebugOut.Analog[0] = MesswertNick;
+// DebugOut.Analog[1] = MesswertRoll;
+// DebugOut.Analog[2] = MesswertGier;
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[2] = Mittelwert_AccNick;
+ DebugOut.Analog[3] = Mittelwert_AccRoll;
+ DebugOut.Analog[4] = MesswertGier;
+ DebugOut.Analog[5] = HoehenWert;
+ DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
+ DebugOut.Analog[7] = GasMischanteil;
+ DebugOut.Analog[8] = KompassValue;
+// DebugOut.Analog[9] = SollHoehe;
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
+// DebugOut.Analog[11] = KompassStartwert;
+// DebugOut.Analog[10] = Parameter_Gyro_I;
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
+// DebugOut.Analog[9] = KompassRichtung;
+// DebugOut.Analog[10] = GasMischanteil;
+// DebugOut.Analog[3] = HoeheD * 32;
+// DebugOut.Analog[4] = hoehenregler;
+ }
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
+
+ // Maximalwerte abfangen
+ #define MAX_SENSOR 2048
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Höhenregelung
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//OCR0B = 180 - (Poti1 + 120) / 4;
+//DruckOffsetSetting = OCR0B;
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
+ {
+ int tmp_int;
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
+ {
+ if(Parameter_MaxHoehe < 50)
+ {
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
+ HoehenReglerAktiv = 0;
+ }
+ else
+ HoehenReglerAktiv = 1;
+ }
+ else
+ {
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
+ HoehenReglerAktiv = 1;
+ }
+
+ if(Notlandung) SollHoehe = 0;
+ h = HoehenWert;
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
+ h = GasMischanteil - h; // vom Gas abziehen
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
+ if(tmp_int > 50) tmp_int = 50;
+ else if(tmp_int < -50) tmp_int = -50;
+ h -= tmp_int;
+ hoehenregler = (hoehenregler*15 + h) / 16;
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
+ {
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
+ }
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
+ GasMischanteil = hoehenregler;
+ }
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Mischer und PI-Regler
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gier-Anteil
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier
+ if(GierMischanteil > 100) GierMischanteil = 100;
+ if(GierMischanteil < -100) GierMischanteil = -100;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Nick-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
+ SummeNick += DiffNick; // I-Anteil
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
+ if(SummeNick > 16000) SummeNick = 16000;
+ if(SummeNick < -16000) SummeNick = -16000;
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
+ // Motor Vorn
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Vorne = motorwert;
+ // Motor Heck
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Hinten = motorwert;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Roll-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
+ SummeRoll += DiffRoll; // I-Anteil
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
+ if(SummeRoll > 16000) SummeRoll = 16000;
+ if(SummeRoll < -16000) SummeRoll = -16000;
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
+ // Motor Links
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Links = motorwert;
+ // Motor Rechts
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Rechts = motorwert;
+ // +++++++++++++++++++++++++++++++++++++++++++++++
+
+}
+
/branches/chris_hallo2/fc.d
0,0 → 1,2
fc.o fc.d : fc.c main.h old_macros.h _settings.h printf_P.h timer0.h uart.h \
analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/fc.h
0,0 → 1,106
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
#define STRUCT_PARAM_LAENGE 58
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
 
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/chris_hallo2/fc.lst
0,0 → 1,4487
1 .file "fc.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global Mittelwert
13 Mittelwert:
14 /* prologue: frame size=0 */
15 0000 AF92 push r10
16 0002 BF92 push r11
17 0004 CF92 push r12
18 0006 DF92 push r13
19 0008 EF92 push r14
20 000a FF92 push r15
21 000c 0F93 push r16
22 000e 1F93 push r17
23 /* prologue end (size=8) */
24 0010 1092 7A00 sts 122,__zero_reg__
25 0014 8091 0000 lds r24,MessanzahlNick
26 0018 8823 tst r24
27 001a 01F0 breq .L2
28 001c 8091 0000 lds r24,AccumulateNick
29 0020 9091 0000 lds r25,(AccumulateNick)+1
30 0024 6091 0000 lds r22,MessanzahlNick
31 0028 7727 clr r23
32 002a 0E94 0000 call __divmodhi4
33 002e 7093 0000 sts (MesswertNick)+1,r23
34 0032 6093 0000 sts MesswertNick,r22
35 .L2:
36 0036 8091 0000 lds r24,MessanzahlRoll
37 003a 8823 tst r24
38 003c 01F0 breq .L4
39 003e 8091 0000 lds r24,AccumulateRoll
40 0042 9091 0000 lds r25,(AccumulateRoll)+1
41 0046 6091 0000 lds r22,MessanzahlRoll
42 004a 7727 clr r23
43 004c 0E94 0000 call __divmodhi4
44 0050 7093 0000 sts (MesswertRoll)+1,r23
45 0054 6093 0000 sts MesswertRoll,r22
46 .L4:
47 0058 8091 0000 lds r24,MessanzahlGier
48 005c 8823 tst r24
49 005e 01F0 breq .L6
50 0060 8091 0000 lds r24,AccumulateGier
51 0064 9091 0000 lds r25,(AccumulateGier)+1
52 0068 6091 0000 lds r22,MessanzahlGier
53 006c 7727 clr r23
54 006e 0E94 0000 call __divmodhi4
55 0072 7093 0000 sts (MesswertGier)+1,r23
56 0076 6093 0000 sts MesswertGier,r22
57 .L6:
58 007a 8091 0000 lds r24,messanzahl_AccNick
59 007e 8823 tst r24
60 0080 01F0 breq .L8
61 0082 E090 0000 lds r14,Mittelwert_AccNick
62 0086 F090 0000 lds r15,(Mittelwert_AccNick)+1
63 008a 6091 0000 lds r22,accumulate_AccNick
64 008e 7091 0000 lds r23,(accumulate_AccNick)+1
65 0092 2091 0000 lds r18,messanzahl_AccNick
66 0096 0027 clr r16
67 0098 F7FC sbrc r15,7
68 009a 0095 com r16
69 009c 102F mov r17,r16
70 009e 5701 movw r10,r14
71 00a0 6801 movw r12,r16
72 00a2 43E0 ldi r20,3
73 00a4 AA0C 1: lsl r10
74 00a6 BB1C rol r11
75 00a8 CC1C rol r12
76 00aa DD1C rol r13
77 00ac 4A95 dec r20
78 00ae 01F4 brne 1b
79 00b0 AE18 sub r10,r14
80 00b2 BF08 sbc r11,r15
81 00b4 C00A sbc r12,r16
82 00b6 D10A sbc r13,r17
83 00b8 8827 clr r24
84 00ba 77FD sbrc r23,7
85 00bc 8095 com r24
86 00be 982F mov r25,r24
87 00c0 34E0 ldi r19,4
88 00c2 660F 1: lsl r22
89 00c4 771F rol r23
90 00c6 881F rol r24
91 00c8 991F rol r25
92 00ca 3A95 dec r19
93 00cc 01F4 brne 1b
94 00ce 3327 clr r19
95 00d0 4427 clr r20
96 00d2 5527 clr r21
97 00d4 0E94 0000 call __divmodsi4
98 00d8 A20E add r10,r18
99 00da B31E adc r11,r19
100 00dc C41E adc r12,r20
101 00de D51E adc r13,r21
102 00e0 C601 movw r24,r12
103 00e2 B501 movw r22,r10
104 00e4 28E0 ldi r18,lo8(8)
105 00e6 30E0 ldi r19,hi8(8)
106 00e8 40E0 ldi r20,hlo8(8)
107 00ea 50E0 ldi r21,hhi8(8)
108 00ec 0E94 0000 call __divmodsi4
109 00f0 3093 0000 sts (Mittelwert_AccNick)+1,r19
110 00f4 2093 0000 sts Mittelwert_AccNick,r18
111 .L8:
112 00f8 8091 0000 lds r24,messanzahl_AccRoll
113 00fc 8823 tst r24
114 00fe 01F0 breq .L10
115 0100 E090 0000 lds r14,Mittelwert_AccRoll
116 0104 F090 0000 lds r15,(Mittelwert_AccRoll)+1
117 0108 6091 0000 lds r22,accumulate_AccRoll
118 010c 7091 0000 lds r23,(accumulate_AccRoll)+1
119 0110 2091 0000 lds r18,messanzahl_AccRoll
120 0114 0027 clr r16
121 0116 F7FC sbrc r15,7
122 0118 0095 com r16
123 011a 102F mov r17,r16
124 011c 5701 movw r10,r14
125 011e 6801 movw r12,r16
126 0120 83E0 ldi r24,3
127 0122 AA0C 1: lsl r10
128 0124 BB1C rol r11
129 0126 CC1C rol r12
130 0128 DD1C rol r13
131 012a 8A95 dec r24
132 012c 01F4 brne 1b
133 012e AE18 sub r10,r14
134 0130 BF08 sbc r11,r15
135 0132 C00A sbc r12,r16
136 0134 D10A sbc r13,r17
137 0136 8827 clr r24
138 0138 77FD sbrc r23,7
139 013a 8095 com r24
140 013c 982F mov r25,r24
141 013e B4E0 ldi r27,4
142 0140 660F 1: lsl r22
143 0142 771F rol r23
144 0144 881F rol r24
145 0146 991F rol r25
146 0148 BA95 dec r27
147 014a 01F4 brne 1b
148 014c 3327 clr r19
149 014e 4427 clr r20
150 0150 5527 clr r21
151 0152 0E94 0000 call __divmodsi4
152 0156 A20E add r10,r18
153 0158 B31E adc r11,r19
154 015a C41E adc r12,r20
155 015c D51E adc r13,r21
156 015e C601 movw r24,r12
157 0160 B501 movw r22,r10
158 0162 28E0 ldi r18,lo8(8)
159 0164 30E0 ldi r19,hi8(8)
160 0166 40E0 ldi r20,hlo8(8)
161 0168 50E0 ldi r21,hhi8(8)
162 016a 0E94 0000 call __divmodsi4
163 016e 3093 0000 sts (Mittelwert_AccRoll)+1,r19
164 0172 2093 0000 sts Mittelwert_AccRoll,r18
165 .L10:
166 0176 8091 0000 lds r24,messanzahl_AccHoch
167 017a 8823 tst r24
168 017c 01F0 breq .L12
169 017e E090 0000 lds r14,Mittelwert_AccHoch
170 0182 F090 0000 lds r15,(Mittelwert_AccHoch)+1
171 0186 6091 0000 lds r22,accumulate_AccHoch
172 018a 7091 0000 lds r23,(accumulate_AccHoch)+1
173 018e 2091 0000 lds r18,messanzahl_AccHoch
174 0192 0027 clr r16
175 0194 F7FC sbrc r15,7
176 0196 0095 com r16
177 0198 102F mov r17,r16
178 019a 5701 movw r10,r14
179 019c 6801 movw r12,r16
180 019e A3E0 ldi r26,3
181 01a0 AA0C 1: lsl r10
182 01a2 BB1C rol r11
183 01a4 CC1C rol r12
184 01a6 DD1C rol r13
185 01a8 AA95 dec r26
186 01aa 01F4 brne 1b
187 01ac AE18 sub r10,r14
188 01ae BF08 sbc r11,r15
189 01b0 C00A sbc r12,r16
190 01b2 D10A sbc r13,r17
191 01b4 8827 clr r24
192 01b6 77FD sbrc r23,7
193 01b8 8095 com r24
194 01ba 982F mov r25,r24
195 01bc 3327 clr r19
196 01be 4427 clr r20
197 01c0 5527 clr r21
198 01c2 0E94 0000 call __divmodsi4
199 01c6 A20E add r10,r18
200 01c8 B31E adc r11,r19
201 01ca C41E adc r12,r20
202 01cc D51E adc r13,r21
203 01ce C601 movw r24,r12
204 01d0 B501 movw r22,r10
205 01d2 28E0 ldi r18,lo8(8)
206 01d4 30E0 ldi r19,hi8(8)
207 01d6 40E0 ldi r20,hlo8(8)
208 01d8 50E0 ldi r21,hhi8(8)
209 01da 0E94 0000 call __divmodsi4
210 01de 3093 0000 sts (Mittelwert_AccHoch)+1,r19
211 01e2 2093 0000 sts Mittelwert_AccHoch,r18
212 .L12:
213 01e6 1092 0000 sts (AccumulateNick)+1,__zero_reg__
214 01ea 1092 0000 sts AccumulateNick,__zero_reg__
215 01ee 1092 0000 sts MessanzahlNick,__zero_reg__
216 01f2 1092 0000 sts (AccumulateRoll)+1,__zero_reg__
217 01f6 1092 0000 sts AccumulateRoll,__zero_reg__
218 01fa 1092 0000 sts MessanzahlRoll,__zero_reg__
219 01fe 1092 0000 sts (AccumulateGier)+1,__zero_reg__
220 0202 1092 0000 sts AccumulateGier,__zero_reg__
221 0206 1092 0000 sts MessanzahlGier,__zero_reg__
222 020a 1092 0000 sts (accumulate_AccRoll)+1,__zero_reg__
223 020e 1092 0000 sts accumulate_AccRoll,__zero_reg__
224 0212 1092 0000 sts messanzahl_AccRoll,__zero_reg__
225 0216 1092 0000 sts (accumulate_AccNick)+1,__zero_reg__
226 021a 1092 0000 sts accumulate_AccNick,__zero_reg__
227 021e 1092 0000 sts messanzahl_AccNick,__zero_reg__
228 0222 1092 0000 sts (accumulate_AccHoch)+1,__zero_reg__
229 0226 1092 0000 sts accumulate_AccHoch,__zero_reg__
230 022a 1092 0000 sts messanzahl_AccHoch,__zero_reg__
231 022e 8091 0000 lds r24,Mess_Integral_Gier
232 0232 9091 0000 lds r25,(Mess_Integral_Gier)+1
233 0236 A091 0000 lds r26,(Mess_Integral_Gier)+2
234 023a B091 0000 lds r27,(Mess_Integral_Gier)+3
235 023e 8093 0000 sts Integral_Gier,r24
236 0242 9093 0000 sts (Integral_Gier)+1,r25
237 0246 A093 0000 sts (Integral_Gier)+2,r26
238 024a B093 0000 sts (Integral_Gier)+3,r27
239 024e 8091 0000 lds r24,Mess_IntegralNick
240 0252 9091 0000 lds r25,(Mess_IntegralNick)+1
241 0256 A091 0000 lds r26,(Mess_IntegralNick)+2
242 025a B091 0000 lds r27,(Mess_IntegralNick)+3
243 025e 8093 0000 sts IntegralNick,r24
244 0262 9093 0000 sts (IntegralNick)+1,r25
245 0266 A093 0000 sts (IntegralNick)+2,r26
246 026a B093 0000 sts (IntegralNick)+3,r27
247 026e 8091 0000 lds r24,Mess_IntegralRoll
248 0272 9091 0000 lds r25,(Mess_IntegralRoll)+1
249 0276 A091 0000 lds r26,(Mess_IntegralRoll)+2
250 027a B091 0000 lds r27,(Mess_IntegralRoll)+3
251 027e 8093 0000 sts IntegralRoll,r24
252 0282 9093 0000 sts (IntegralRoll)+1,r25
253 0286 A093 0000 sts (IntegralRoll)+2,r26
254 028a B093 0000 sts (IntegralRoll)+3,r27
255 028e 8091 0000 lds r24,Mess_IntegralNick2
256 0292 9091 0000 lds r25,(Mess_IntegralNick2)+1
257 0296 A091 0000 lds r26,(Mess_IntegralNick2)+2
258 029a B091 0000 lds r27,(Mess_IntegralNick2)+3
259 029e 8093 0000 sts IntegralNick2,r24
260 02a2 9093 0000 sts (IntegralNick2)+1,r25
261 02a6 A093 0000 sts (IntegralNick2)+2,r26
262 02aa B093 0000 sts (IntegralNick2)+3,r27
263 02ae 8091 0000 lds r24,Mess_IntegralRoll2
264 02b2 9091 0000 lds r25,(Mess_IntegralRoll2)+1
265 02b6 A091 0000 lds r26,(Mess_IntegralRoll2)+2
266 02ba B091 0000 lds r27,(Mess_IntegralRoll2)+3
267 02be 8093 0000 sts IntegralRoll2,r24
268 02c2 9093 0000 sts (IntegralRoll2)+1,r25
269 02c6 A093 0000 sts (IntegralRoll2)+2,r26
270 02ca B093 0000 sts (IntegralRoll2)+3,r27
271 02ce 8FEE ldi r24,lo8(-17)
272 02d0 8093 7A00 sts 122,r24
273 02d4 8091 0000 lds r24,MesswertNick
274 02d8 9091 0000 lds r25,(MesswertNick)+1
275 02dc 893C cpi r24,201
276 02de 9105 cpc r25,__zero_reg__
277 02e0 04F0 brlt .L14
278 02e2 2091 0000 lds r18,MesswertNick
279 02e6 3091 0000 lds r19,(MesswertNick)+1
280 02ea 8091 0000 lds r24,MesswertNick
281 02ee 9091 0000 lds r25,(MesswertNick)+1
282 02f2 880F lsl r24
283 02f4 991F rol r25
284 02f6 880F lsl r24
285 02f8 991F rol r25
286 02fa 2052 subi r18,lo8(-(-800))
287 02fc 3340 sbci r19,hi8(-(-800))
288 02fe 00C0 rjmp .L59
289 .L14:
290 0300 8091 0000 lds r24,MesswertNick
291 0304 9091 0000 lds r25,(MesswertNick)+1
292 0308 8853 subi r24,lo8(-200)
293 030a 9F4F sbci r25,hi8(-200)
294 030c 04F4 brge .L16
295 030e 2091 0000 lds r18,MesswertNick
296 0312 3091 0000 lds r19,(MesswertNick)+1
297 0316 8091 0000 lds r24,MesswertNick
298 031a 9091 0000 lds r25,(MesswertNick)+1
299 031e 880F lsl r24
300 0320 991F rol r25
301 0322 880F lsl r24
302 0324 991F rol r25
303 0326 205E subi r18,lo8(-(800))
304 0328 3C4F sbci r19,hi8(-(800))
305 .L59:
306 032a 820F add r24,r18
307 032c 931F adc r25,r19
308 032e 9093 0000 sts (MesswertNick)+1,r25
309 0332 8093 0000 sts MesswertNick,r24
310 .L16:
311 0336 8091 0000 lds r24,MesswertRoll
312 033a 9091 0000 lds r25,(MesswertRoll)+1
313 033e 893C cpi r24,201
314 0340 9105 cpc r25,__zero_reg__
315 0342 04F0 brlt .L18
316 0344 2091 0000 lds r18,MesswertRoll
317 0348 3091 0000 lds r19,(MesswertRoll)+1
318 034c 8091 0000 lds r24,MesswertRoll
319 0350 9091 0000 lds r25,(MesswertRoll)+1
320 0354 880F lsl r24
321 0356 991F rol r25
322 0358 880F lsl r24
323 035a 991F rol r25
324 035c 2052 subi r18,lo8(-(-800))
325 035e 3340 sbci r19,hi8(-(-800))
326 0360 00C0 rjmp .L60
327 .L18:
328 0362 8091 0000 lds r24,MesswertRoll
329 0366 9091 0000 lds r25,(MesswertRoll)+1
330 036a 8853 subi r24,lo8(-200)
331 036c 9F4F sbci r25,hi8(-200)
332 036e 04F4 brge .L20
333 0370 2091 0000 lds r18,MesswertRoll
334 0374 3091 0000 lds r19,(MesswertRoll)+1
335 0378 8091 0000 lds r24,MesswertRoll
336 037c 9091 0000 lds r25,(MesswertRoll)+1
337 0380 880F lsl r24
338 0382 991F rol r25
339 0384 880F lsl r24
340 0386 991F rol r25
341 0388 205E subi r18,lo8(-(800))
342 038a 3C4F sbci r19,hi8(-(800))
343 .L60:
344 038c 820F add r24,r18
345 038e 931F adc r25,r19
346 0390 9093 0000 sts (MesswertRoll)+1,r25
347 0394 8093 0000 sts MesswertRoll,r24
348 .L20:
349 0398 2091 0000 lds r18,Poti1
350 039c 3091 0000 lds r19,(Poti1)+1
351 03a0 8091 0000 lds r24,EE_Parameter+4
352 03a4 E82F mov r30,r24
353 03a6 FF27 clr r31
354 03a8 EE0F lsl r30
355 03aa FF1F rol r31
356 03ac E050 subi r30,lo8(-(PPM_in))
357 03ae F040 sbci r31,hi8(-(PPM_in))
358 03b0 8081 ld r24,Z
359 03b2 9181 ldd r25,Z+1
360 03b4 8259 subi r24,lo8(-(110))
361 03b6 9F4F sbci r25,hi8(-(110))
362 03b8 2817 cp r18,r24
363 03ba 3907 cpc r19,r25
364 03bc 04F4 brge .L22
365 03be 2F5F subi r18,lo8(-(1))
366 03c0 3F4F sbci r19,hi8(-(1))
367 03c2 00C0 rjmp .L61
368 .L22:
369 03c4 8081 ld r24,Z
370 03c6 9181 ldd r25,Z+1
371 03c8 8259 subi r24,lo8(-(110))
372 03ca 9F4F sbci r25,hi8(-(110))
373 03cc 8217 cp r24,r18
374 03ce 9307 cpc r25,r19
375 03d0 04F4 brge .L24
376 03d2 2115 cp r18,__zero_reg__
377 03d4 3105 cpc r19,__zero_reg__
378 03d6 01F0 breq .L24
379 03d8 2150 subi r18,lo8(-(-1))
380 03da 3040 sbci r19,hi8(-(-1))
381 .L61:
382 03dc 3093 0000 sts (Poti1)+1,r19
383 03e0 2093 0000 sts Poti1,r18
384 .L24:
385 03e4 2091 0000 lds r18,Poti2
386 03e8 3091 0000 lds r19,(Poti2)+1
387 03ec 8091 0000 lds r24,EE_Parameter+5
388 03f0 E82F mov r30,r24
389 03f2 FF27 clr r31
390 03f4 EE0F lsl r30
391 03f6 FF1F rol r31
392 03f8 E050 subi r30,lo8(-(PPM_in))
393 03fa F040 sbci r31,hi8(-(PPM_in))
394 03fc 8081 ld r24,Z
395 03fe 9181 ldd r25,Z+1
396 0400 8259 subi r24,lo8(-(110))
397 0402 9F4F sbci r25,hi8(-(110))
398 0404 2817 cp r18,r24
399 0406 3907 cpc r19,r25
400 0408 04F4 brge .L27
401 040a 2F5F subi r18,lo8(-(1))
402 040c 3F4F sbci r19,hi8(-(1))
403 040e 00C0 rjmp .L62
404 .L27:
405 0410 8081 ld r24,Z
406 0412 9181 ldd r25,Z+1
407 0414 8259 subi r24,lo8(-(110))
408 0416 9F4F sbci r25,hi8(-(110))
409 0418 8217 cp r24,r18
410 041a 9307 cpc r25,r19
411 041c 04F4 brge .L29
412 041e 2115 cp r18,__zero_reg__
413 0420 3105 cpc r19,__zero_reg__
414 0422 01F0 breq .L29
415 0424 2150 subi r18,lo8(-(-1))
416 0426 3040 sbci r19,hi8(-(-1))
417 .L62:
418 0428 3093 0000 sts (Poti2)+1,r19
419 042c 2093 0000 sts Poti2,r18
420 .L29:
421 0430 2091 0000 lds r18,Poti3
422 0434 3091 0000 lds r19,(Poti3)+1
423 0438 8091 0000 lds r24,EE_Parameter+6
424 043c E82F mov r30,r24
425 043e FF27 clr r31
426 0440 EE0F lsl r30
427 0442 FF1F rol r31
428 0444 E050 subi r30,lo8(-(PPM_in))
429 0446 F040 sbci r31,hi8(-(PPM_in))
430 0448 8081 ld r24,Z
431 044a 9181 ldd r25,Z+1
432 044c 8259 subi r24,lo8(-(110))
433 044e 9F4F sbci r25,hi8(-(110))
434 0450 2817 cp r18,r24
435 0452 3907 cpc r19,r25
436 0454 04F4 brge .L32
437 0456 2F5F subi r18,lo8(-(1))
438 0458 3F4F sbci r19,hi8(-(1))
439 045a 00C0 rjmp .L63
440 .L32:
441 045c 8081 ld r24,Z
442 045e 9181 ldd r25,Z+1
443 0460 8259 subi r24,lo8(-(110))
444 0462 9F4F sbci r25,hi8(-(110))
445 0464 8217 cp r24,r18
446 0466 9307 cpc r25,r19
447 0468 04F4 brge .L34
448 046a 2115 cp r18,__zero_reg__
449 046c 3105 cpc r19,__zero_reg__
450 046e 01F0 breq .L34
451 0470 2150 subi r18,lo8(-(-1))
452 0472 3040 sbci r19,hi8(-(-1))
453 .L63:
454 0474 3093 0000 sts (Poti3)+1,r19
455 0478 2093 0000 sts Poti3,r18
456 .L34:
457 047c 2091 0000 lds r18,Poti4
458 0480 3091 0000 lds r19,(Poti4)+1
459 0484 8091 0000 lds r24,EE_Parameter+7
460 0488 E82F mov r30,r24
461 048a FF27 clr r31
462 048c EE0F lsl r30
463 048e FF1F rol r31
464 0490 E050 subi r30,lo8(-(PPM_in))
465 0492 F040 sbci r31,hi8(-(PPM_in))
466 0494 8081 ld r24,Z
467 0496 9181 ldd r25,Z+1
468 0498 8259 subi r24,lo8(-(110))
469 049a 9F4F sbci r25,hi8(-(110))
470 049c 2817 cp r18,r24
471 049e 3907 cpc r19,r25
472 04a0 04F4 brge .L37
473 04a2 2F5F subi r18,lo8(-(1))
474 04a4 3F4F sbci r19,hi8(-(1))
475 04a6 00C0 rjmp .L64
476 .L37:
477 04a8 8081 ld r24,Z
478 04aa 9181 ldd r25,Z+1
479 04ac 8259 subi r24,lo8(-(110))
480 04ae 9F4F sbci r25,hi8(-(110))
481 04b0 8217 cp r24,r18
482 04b2 9307 cpc r25,r19
483 04b4 04F4 brge .L39
484 04b6 2115 cp r18,__zero_reg__
485 04b8 3105 cpc r19,__zero_reg__
486 04ba 01F0 breq .L39
487 04bc 2150 subi r18,lo8(-(-1))
488 04be 3040 sbci r19,hi8(-(-1))
489 .L64:
490 04c0 3093 0000 sts (Poti4)+1,r19
491 04c4 2093 0000 sts Poti4,r18
492 .L39:
493 04c8 8091 0000 lds r24,Poti1
494 04cc 9091 0000 lds r25,(Poti1)+1
495 04d0 97FF sbrs r25,7
496 04d2 00C0 rjmp .L42
497 04d4 1092 0000 sts (Poti1)+1,__zero_reg__
498 04d8 1092 0000 sts Poti1,__zero_reg__
499 04dc 00C0 rjmp .L44
500 .L42:
501 04de 8F3F cpi r24,255
502 04e0 9105 cpc r25,__zero_reg__
503 04e2 01F0 breq .L44
504 04e4 04F0 brlt .L44
505 04e6 8FEF ldi r24,lo8(255)
506 04e8 90E0 ldi r25,hi8(255)
507 04ea 9093 0000 sts (Poti1)+1,r25
508 04ee 8093 0000 sts Poti1,r24
509 .L44:
510 04f2 8091 0000 lds r24,Poti2
511 04f6 9091 0000 lds r25,(Poti2)+1
512 04fa 97FF sbrs r25,7
513 04fc 00C0 rjmp .L46
514 04fe 1092 0000 sts (Poti2)+1,__zero_reg__
515 0502 1092 0000 sts Poti2,__zero_reg__
516 0506 00C0 rjmp .L48
517 .L46:
518 0508 8F3F cpi r24,255
519 050a 9105 cpc r25,__zero_reg__
520 050c 01F0 breq .L48
521 050e 04F0 brlt .L48
522 0510 8FEF ldi r24,lo8(255)
523 0512 90E0 ldi r25,hi8(255)
524 0514 9093 0000 sts (Poti2)+1,r25
525 0518 8093 0000 sts Poti2,r24
526 .L48:
527 051c 8091 0000 lds r24,Poti3
528 0520 9091 0000 lds r25,(Poti3)+1
529 0524 97FF sbrs r25,7
530 0526 00C0 rjmp .L50
531 0528 1092 0000 sts (Poti3)+1,__zero_reg__
532 052c 1092 0000 sts Poti3,__zero_reg__
533 0530 00C0 rjmp .L52
534 .L50:
535 0532 8F3F cpi r24,255
536 0534 9105 cpc r25,__zero_reg__
537 0536 01F0 breq .L52
538 0538 04F0 brlt .L52
539 053a 8FEF ldi r24,lo8(255)
540 053c 90E0 ldi r25,hi8(255)
541 053e 9093 0000 sts (Poti3)+1,r25
542 0542 8093 0000 sts Poti3,r24
543 .L52:
544 0546 8091 0000 lds r24,Poti4
545 054a 9091 0000 lds r25,(Poti4)+1
546 054e 97FF sbrs r25,7
547 0550 00C0 rjmp .L54
548 0552 1092 0000 sts (Poti4)+1,__zero_reg__
549 0556 1092 0000 sts Poti4,__zero_reg__
550 055a 00C0 rjmp .L58
551 .L54:
552 055c 8F3F cpi r24,255
553 055e 9105 cpc r25,__zero_reg__
554 0560 01F0 breq .L58
555 0562 04F0 brlt .L58
556 0564 8FEF ldi r24,lo8(255)
557 0566 90E0 ldi r25,hi8(255)
558 0568 9093 0000 sts (Poti4)+1,r25
559 056c 8093 0000 sts Poti4,r24
560 .L58:
561 /* epilogue: frame size=0 */
562 0570 1F91 pop r17
563 0572 0F91 pop r16
564 0574 FF90 pop r15
565 0576 EF90 pop r14
566 0578 DF90 pop r13
567 057a CF90 pop r12
568 057c BF90 pop r11
569 057e AF90 pop r10
570 0580 0895 ret
571 /* epilogue end (size=9) */
572 /* function Mittelwert size 707 (690) */
574 .global CalibrierMittelwert
576 CalibrierMittelwert:
577 /* prologue: frame size=0 */
578 /* prologue end (size=0) */
579 0582 1092 7A00 sts 122,__zero_reg__
580 0586 8091 0000 lds r24,MessanzahlNick
581 058a 8823 tst r24
582 058c 01F0 breq .L66
583 058e 8091 0000 lds r24,AccumulateNick
584 0592 9091 0000 lds r25,(AccumulateNick)+1
585 0596 6091 0000 lds r22,MessanzahlNick
586 059a 7727 clr r23
587 059c 0E94 0000 call __divmodhi4
588 05a0 7093 0000 sts (MesswertNick)+1,r23
589 05a4 6093 0000 sts MesswertNick,r22
590 .L66:
591 05a8 8091 0000 lds r24,MessanzahlRoll
592 05ac 8823 tst r24
593 05ae 01F0 breq .L68
594 05b0 8091 0000 lds r24,AccumulateRoll
595 05b4 9091 0000 lds r25,(AccumulateRoll)+1
596 05b8 6091 0000 lds r22,MessanzahlRoll
597 05bc 7727 clr r23
598 05be 0E94 0000 call __divmodhi4
599 05c2 7093 0000 sts (MesswertRoll)+1,r23
600 05c6 6093 0000 sts MesswertRoll,r22
601 .L68:
602 05ca 8091 0000 lds r24,MessanzahlGier
603 05ce 8823 tst r24
604 05d0 01F0 breq .L70
605 05d2 8091 0000 lds r24,AccumulateGier
606 05d6 9091 0000 lds r25,(AccumulateGier)+1
607 05da 6091 0000 lds r22,MessanzahlGier
608 05de 7727 clr r23
609 05e0 0E94 0000 call __divmodhi4
610 05e4 7093 0000 sts (MesswertGier)+1,r23
611 05e8 6093 0000 sts MesswertGier,r22
612 .L70:
613 05ec 8091 0000 lds r24,messanzahl_AccNick
614 05f0 8823 tst r24
615 05f2 01F0 breq .L72
616 05f4 6091 0000 lds r22,accumulate_AccNick
617 05f8 7091 0000 lds r23,(accumulate_AccNick)+1
618 05fc 2091 0000 lds r18,messanzahl_AccNick
619 0600 8827 clr r24
620 0602 77FD sbrc r23,7
621 0604 8095 com r24
622 0606 982F mov r25,r24
623 0608 34E0 ldi r19,4
624 060a 660F 1: lsl r22
625 060c 771F rol r23
626 060e 881F rol r24
627 0610 991F rol r25
628 0612 3A95 dec r19
629 0614 01F4 brne 1b
630 0616 3327 clr r19
631 0618 4427 clr r20
632 061a 5527 clr r21
633 061c 0E94 0000 call __divmodsi4
634 0620 3093 0000 sts (Mittelwert_AccNick)+1,r19
635 0624 2093 0000 sts Mittelwert_AccNick,r18
636 .L72:
637 0628 8091 0000 lds r24,messanzahl_AccRoll
638 062c 8823 tst r24
639 062e 01F0 breq .L74
640 0630 6091 0000 lds r22,accumulate_AccRoll
641 0634 7091 0000 lds r23,(accumulate_AccRoll)+1
642 0638 2091 0000 lds r18,messanzahl_AccRoll
643 063c 8827 clr r24
644 063e 77FD sbrc r23,7
645 0640 8095 com r24
646 0642 982F mov r25,r24
647 0644 B4E0 ldi r27,4
648 0646 660F 1: lsl r22
649 0648 771F rol r23
650 064a 881F rol r24
651 064c 991F rol r25
652 064e BA95 dec r27
653 0650 01F4 brne 1b
654 0652 3327 clr r19
655 0654 4427 clr r20
656 0656 5527 clr r21
657 0658 0E94 0000 call __divmodsi4
658 065c 3093 0000 sts (Mittelwert_AccRoll)+1,r19
659 0660 2093 0000 sts Mittelwert_AccRoll,r18
660 .L74:
661 0664 8091 0000 lds r24,messanzahl_AccHoch
662 0668 8823 tst r24
663 066a 01F0 breq .L76
664 066c 6091 0000 lds r22,accumulate_AccHoch
665 0670 7091 0000 lds r23,(accumulate_AccHoch)+1
666 0674 2091 0000 lds r18,messanzahl_AccHoch
667 0678 8827 clr r24
668 067a 77FD sbrc r23,7
669 067c 8095 com r24
670 067e 982F mov r25,r24
671 0680 3327 clr r19
672 0682 4427 clr r20
673 0684 5527 clr r21
674 0686 0E94 0000 call __divmodsi4
675 068a 3093 0000 sts (Mittelwert_AccHoch)+1,r19
676 068e 2093 0000 sts Mittelwert_AccHoch,r18
677 .L76:
678 0692 1092 0000 sts (AccumulateNick)+1,__zero_reg__
679 0696 1092 0000 sts AccumulateNick,__zero_reg__
680 069a 1092 0000 sts MessanzahlNick,__zero_reg__
681 069e 1092 0000 sts (AccumulateRoll)+1,__zero_reg__
682 06a2 1092 0000 sts AccumulateRoll,__zero_reg__
683 06a6 1092 0000 sts MessanzahlRoll,__zero_reg__
684 06aa 1092 0000 sts (AccumulateGier)+1,__zero_reg__
685 06ae 1092 0000 sts AccumulateGier,__zero_reg__
686 06b2 1092 0000 sts MessanzahlGier,__zero_reg__
687 06b6 1092 0000 sts (accumulate_AccRoll)+1,__zero_reg__
688 06ba 1092 0000 sts accumulate_AccRoll,__zero_reg__
689 06be 1092 0000 sts messanzahl_AccRoll,__zero_reg__
690 06c2 1092 0000 sts (accumulate_AccNick)+1,__zero_reg__
691 06c6 1092 0000 sts accumulate_AccNick,__zero_reg__
692 06ca 1092 0000 sts messanzahl_AccNick,__zero_reg__
693 06ce 1092 0000 sts (accumulate_AccHoch)+1,__zero_reg__
694 06d2 1092 0000 sts accumulate_AccHoch,__zero_reg__
695 06d6 1092 0000 sts messanzahl_AccHoch,__zero_reg__
696 06da 8FEE ldi r24,lo8(-17)
697 06dc 8093 7A00 sts 122,r24
698 06e0 2091 0000 lds r18,Poti1
699 06e4 3091 0000 lds r19,(Poti1)+1
700 06e8 8091 0000 lds r24,EE_Parameter+4
701 06ec E82F mov r30,r24
702 06ee FF27 clr r31
703 06f0 EE0F lsl r30
704 06f2 FF1F rol r31
705 06f4 E050 subi r30,lo8(-(PPM_in))
706 06f6 F040 sbci r31,hi8(-(PPM_in))
707 06f8 8081 ld r24,Z
708 06fa 9181 ldd r25,Z+1
709 06fc 8259 subi r24,lo8(-(110))
710 06fe 9F4F sbci r25,hi8(-(110))
711 0700 2817 cp r18,r24
712 0702 3907 cpc r19,r25
713 0704 04F4 brge .L78
714 0706 2F5F subi r18,lo8(-(1))
715 0708 3F4F sbci r19,hi8(-(1))
716 070a 00C0 rjmp .L115
717 .L78:
718 070c 8081 ld r24,Z
719 070e 9181 ldd r25,Z+1
720 0710 8259 subi r24,lo8(-(110))
721 0712 9F4F sbci r25,hi8(-(110))
722 0714 8217 cp r24,r18
723 0716 9307 cpc r25,r19
724 0718 04F4 brge .L80
725 071a 2115 cp r18,__zero_reg__
726 071c 3105 cpc r19,__zero_reg__
727 071e 01F0 breq .L80
728 0720 2150 subi r18,lo8(-(-1))
729 0722 3040 sbci r19,hi8(-(-1))
730 .L115:
731 0724 3093 0000 sts (Poti1)+1,r19
732 0728 2093 0000 sts Poti1,r18
733 .L80:
734 072c 2091 0000 lds r18,Poti2
735 0730 3091 0000 lds r19,(Poti2)+1
736 0734 8091 0000 lds r24,EE_Parameter+5
737 0738 E82F mov r30,r24
738 073a FF27 clr r31
739 073c EE0F lsl r30
740 073e FF1F rol r31
741 0740 E050 subi r30,lo8(-(PPM_in))
742 0742 F040 sbci r31,hi8(-(PPM_in))
743 0744 8081 ld r24,Z
744 0746 9181 ldd r25,Z+1
745 0748 8259 subi r24,lo8(-(110))
746 074a 9F4F sbci r25,hi8(-(110))
747 074c 2817 cp r18,r24
748 074e 3907 cpc r19,r25
749 0750 04F4 brge .L83
750 0752 2F5F subi r18,lo8(-(1))
751 0754 3F4F sbci r19,hi8(-(1))
752 0756 00C0 rjmp .L116
753 .L83:
754 0758 8081 ld r24,Z
755 075a 9181 ldd r25,Z+1
756 075c 8259 subi r24,lo8(-(110))
757 075e 9F4F sbci r25,hi8(-(110))
758 0760 8217 cp r24,r18
759 0762 9307 cpc r25,r19
760 0764 04F4 brge .L85
761 0766 2115 cp r18,__zero_reg__
762 0768 3105 cpc r19,__zero_reg__
763 076a 01F0 breq .L85
764 076c 2150 subi r18,lo8(-(-1))
765 076e 3040 sbci r19,hi8(-(-1))
766 .L116:
767 0770 3093 0000 sts (Poti2)+1,r19
768 0774 2093 0000 sts Poti2,r18
769 .L85:
770 0778 2091 0000 lds r18,Poti3
771 077c 3091 0000 lds r19,(Poti3)+1
772 0780 8091 0000 lds r24,EE_Parameter+6
773 0784 E82F mov r30,r24
774 0786 FF27 clr r31
775 0788 EE0F lsl r30
776 078a FF1F rol r31
777 078c E050 subi r30,lo8(-(PPM_in))
778 078e F040 sbci r31,hi8(-(PPM_in))
779 0790 8081 ld r24,Z
780 0792 9181 ldd r25,Z+1
781 0794 8259 subi r24,lo8(-(110))
782 0796 9F4F sbci r25,hi8(-(110))
783 0798 2817 cp r18,r24
784 079a 3907 cpc r19,r25
785 079c 04F4 brge .L88
786 079e 2F5F subi r18,lo8(-(1))
787 07a0 3F4F sbci r19,hi8(-(1))
788 07a2 00C0 rjmp .L117
789 .L88:
790 07a4 8081 ld r24,Z
791 07a6 9181 ldd r25,Z+1
792 07a8 8259 subi r24,lo8(-(110))
793 07aa 9F4F sbci r25,hi8(-(110))
794 07ac 8217 cp r24,r18
795 07ae 9307 cpc r25,r19
796 07b0 04F4 brge .L90
797 07b2 2115 cp r18,__zero_reg__
798 07b4 3105 cpc r19,__zero_reg__
799 07b6 01F0 breq .L90
800 07b8 2150 subi r18,lo8(-(-1))
801 07ba 3040 sbci r19,hi8(-(-1))
802 .L117:
803 07bc 3093 0000 sts (Poti3)+1,r19
804 07c0 2093 0000 sts Poti3,r18
805 .L90:
806 07c4 2091 0000 lds r18,Poti4
807 07c8 3091 0000 lds r19,(Poti4)+1
808 07cc 8091 0000 lds r24,EE_Parameter+7
809 07d0 E82F mov r30,r24
810 07d2 FF27 clr r31
811 07d4 EE0F lsl r30
812 07d6 FF1F rol r31
813 07d8 E050 subi r30,lo8(-(PPM_in))
814 07da F040 sbci r31,hi8(-(PPM_in))
815 07dc 8081 ld r24,Z
816 07de 9181 ldd r25,Z+1
817 07e0 8259 subi r24,lo8(-(110))
818 07e2 9F4F sbci r25,hi8(-(110))
819 07e4 2817 cp r18,r24
820 07e6 3907 cpc r19,r25
821 07e8 04F4 brge .L93
822 07ea 2F5F subi r18,lo8(-(1))
823 07ec 3F4F sbci r19,hi8(-(1))
824 07ee 00C0 rjmp .L118
825 .L93:
826 07f0 8081 ld r24,Z
827 07f2 9181 ldd r25,Z+1
828 07f4 8259 subi r24,lo8(-(110))
829 07f6 9F4F sbci r25,hi8(-(110))
830 07f8 8217 cp r24,r18
831 07fa 9307 cpc r25,r19
832 07fc 04F4 brge .L95
833 07fe 2115 cp r18,__zero_reg__
834 0800 3105 cpc r19,__zero_reg__
835 0802 01F0 breq .L95
836 0804 2150 subi r18,lo8(-(-1))
837 0806 3040 sbci r19,hi8(-(-1))
838 .L118:
839 0808 3093 0000 sts (Poti4)+1,r19
840 080c 2093 0000 sts Poti4,r18
841 .L95:
842 0810 8091 0000 lds r24,Poti1
843 0814 9091 0000 lds r25,(Poti1)+1
844 0818 97FF sbrs r25,7
845 081a 00C0 rjmp .L98
846 081c 1092 0000 sts (Poti1)+1,__zero_reg__
847 0820 1092 0000 sts Poti1,__zero_reg__
848 0824 00C0 rjmp .L100
849 .L98:
850 0826 8F3F cpi r24,255
851 0828 9105 cpc r25,__zero_reg__
852 082a 01F0 breq .L100
853 082c 04F0 brlt .L100
854 082e 8FEF ldi r24,lo8(255)
855 0830 90E0 ldi r25,hi8(255)
856 0832 9093 0000 sts (Poti1)+1,r25
857 0836 8093 0000 sts Poti1,r24
858 .L100:
859 083a 8091 0000 lds r24,Poti2
860 083e 9091 0000 lds r25,(Poti2)+1
861 0842 97FF sbrs r25,7
862 0844 00C0 rjmp .L102
863 0846 1092 0000 sts (Poti2)+1,__zero_reg__
864 084a 1092 0000 sts Poti2,__zero_reg__
865 084e 00C0 rjmp .L104
866 .L102:
867 0850 8F3F cpi r24,255
868 0852 9105 cpc r25,__zero_reg__
869 0854 01F0 breq .L104
870 0856 04F0 brlt .L104
871 0858 8FEF ldi r24,lo8(255)
872 085a 90E0 ldi r25,hi8(255)
873 085c 9093 0000 sts (Poti2)+1,r25
874 0860 8093 0000 sts Poti2,r24
875 .L104:
876 0864 8091 0000 lds r24,Poti3
877 0868 9091 0000 lds r25,(Poti3)+1
878 086c 97FF sbrs r25,7
879 086e 00C0 rjmp .L106
880 0870 1092 0000 sts (Poti3)+1,__zero_reg__
881 0874 1092 0000 sts Poti3,__zero_reg__
882 0878 00C0 rjmp .L108
883 .L106:
884 087a 8F3F cpi r24,255
885 087c 9105 cpc r25,__zero_reg__
886 087e 01F0 breq .L108
887 0880 04F0 brlt .L108
888 0882 8FEF ldi r24,lo8(255)
889 0884 90E0 ldi r25,hi8(255)
890 0886 9093 0000 sts (Poti3)+1,r25
891 088a 8093 0000 sts Poti3,r24
892 .L108:
893 088e 8091 0000 lds r24,Poti4
894 0892 9091 0000 lds r25,(Poti4)+1
895 0896 97FF sbrs r25,7
896 0898 00C0 rjmp .L110
897 089a 1092 0000 sts (Poti4)+1,__zero_reg__
898 089e 1092 0000 sts Poti4,__zero_reg__
899 08a2 0895 ret
900 .L110:
901 08a4 8F3F cpi r24,255
902 08a6 9105 cpc r25,__zero_reg__
903 08a8 01F0 breq .L114
904 08aa 04F0 brlt .L114
905 08ac 8FEF ldi r24,lo8(255)
906 08ae 90E0 ldi r25,hi8(255)
907 08b0 9093 0000 sts (Poti4)+1,r25
908 08b4 8093 0000 sts Poti4,r24
909 .L114:
910 08b8 0895 ret
911 /* epilogue: frame size=0 */
912 /* epilogue: noreturn */
913 /* epilogue end (size=0) */
914 /* function CalibrierMittelwert size 412 (412) */
916 .global ParameterZuordnung
918 ParameterZuordnung:
919 /* prologue: frame size=0 */
920 08ba 1F93 push r17
921 /* prologue end (size=1) */
922 08bc 8091 0000 lds r24,EE_Parameter+11
923 08c0 8B3F cpi r24,lo8(-5)
924 08c2 00F0 brlo .L120
925 08c4 8B3F cpi r24,lo8(-5)
926 08c6 01F4 brne .L122
927 08c8 8091 0000 lds r24,Poti1
928 08cc 00C0 rjmp .L120
929 .L122:
930 08ce 8C3F cpi r24,lo8(-4)
931 08d0 01F4 brne .L125
932 08d2 8091 0000 lds r24,Poti2
933 08d6 00C0 rjmp .L120
934 .L125:
935 08d8 8D3F cpi r24,lo8(-3)
936 08da 01F4 brne .L127
937 08dc 8091 0000 lds r24,Poti3
938 08e0 00C0 rjmp .L120
939 .L127:
940 08e2 8E3F cpi r24,lo8(-2)
941 08e4 01F4 brne .L124
942 08e6 8091 0000 lds r24,Poti4
943 .L120:
944 08ea 8093 0000 sts Parameter_MaxHoehe,r24
945 .L124:
946 08ee 8091 0000 lds r24,Parameter_MaxHoehe
947 08f2 8823 tst r24
948 08f4 01F4 brne .L130
949 08f6 1092 0000 sts Parameter_MaxHoehe,__zero_reg__
950 08fa 00C0 rjmp .L132
951 .L130:
952 08fc 8F3F cpi r24,lo8(-1)
953 08fe 01F4 brne .L132
954 0900 8093 0000 sts Parameter_MaxHoehe,r24
955 .L132:
956 0904 8091 0000 lds r24,EE_Parameter+10
957 0908 8B3F cpi r24,lo8(-5)
958 090a 00F0 brlo .L134
959 090c 8B3F cpi r24,lo8(-5)
960 090e 01F4 brne .L136
961 0910 8091 0000 lds r24,Poti1
962 0914 00C0 rjmp .L134
963 .L136:
964 0916 8C3F cpi r24,lo8(-4)
965 0918 01F4 brne .L139
966 091a 8091 0000 lds r24,Poti2
967 091e 00C0 rjmp .L134
968 .L139:
969 0920 8D3F cpi r24,lo8(-3)
970 0922 01F4 brne .L141
971 0924 8091 0000 lds r24,Poti3
972 0928 00C0 rjmp .L134
973 .L141:
974 092a 8E3F cpi r24,lo8(-2)
975 092c 01F4 brne .L138
976 092e 8091 0000 lds r24,Poti4
977 .L134:
978 0932 8093 0000 sts Parameter_Luftdruck_D,r24
979 .L138:
980 0936 8091 0000 lds r24,Parameter_Luftdruck_D
981 093a 8823 tst r24
982 093c 01F4 brne .L144
983 093e 1092 0000 sts Parameter_Luftdruck_D,__zero_reg__
984 0942 00C0 rjmp .L146
985 .L144:
986 0944 8436 cpi r24,lo8(100)
987 0946 00F0 brlo .L146
988 0948 84E6 ldi r24,lo8(100)
989 094a 8093 0000 sts Parameter_Luftdruck_D,r24
990 .L146:
991 094e 8091 0000 lds r24,EE_Parameter+12
992 0952 8B3F cpi r24,lo8(-5)
993 0954 00F0 brlo .L148
994 0956 8B3F cpi r24,lo8(-5)
995 0958 01F4 brne .L150
996 095a 8091 0000 lds r24,Poti1
997 095e 00C0 rjmp .L148
998 .L150:
999 0960 8C3F cpi r24,lo8(-4)
1000 0962 01F4 brne .L153
1001 0964 8091 0000 lds r24,Poti2
1002 0968 00C0 rjmp .L148
1003 .L153:
1004 096a 8D3F cpi r24,lo8(-3)
1005 096c 01F4 brne .L155
1006 096e 8091 0000 lds r24,Poti3
1007 0972 00C0 rjmp .L148
1008 .L155:
1009 0974 8E3F cpi r24,lo8(-2)
1010 0976 01F4 brne .L152
1011 0978 8091 0000 lds r24,Poti4
1012 .L148:
1013 097c 8093 0000 sts Parameter_Hoehe_P,r24
1014 .L152:
1015 0980 8091 0000 lds r24,Parameter_Hoehe_P
1016 0984 8823 tst r24
1017 0986 01F4 brne .L158
1018 0988 1092 0000 sts Parameter_Hoehe_P,__zero_reg__
1019 098c 00C0 rjmp .L160
1020 .L158:
1021 098e 8436 cpi r24,lo8(100)
1022 0990 00F0 brlo .L160
1023 0992 84E6 ldi r24,lo8(100)
1024 0994 8093 0000 sts Parameter_Hoehe_P,r24
1025 .L160:
1026 0998 8091 0000 lds r24,EE_Parameter+14
1027 099c 8B3F cpi r24,lo8(-5)
1028 099e 00F0 brlo .L162
1029 09a0 8B3F cpi r24,lo8(-5)
1030 09a2 01F4 brne .L164
1031 09a4 8091 0000 lds r24,Poti1
1032 09a8 00C0 rjmp .L162
1033 .L164:
1034 09aa 8C3F cpi r24,lo8(-4)
1035 09ac 01F4 brne .L167
1036 09ae 8091 0000 lds r24,Poti2
1037 09b2 00C0 rjmp .L162
1038 .L167:
1039 09b4 8D3F cpi r24,lo8(-3)
1040 09b6 01F4 brne .L169
1041 09b8 8091 0000 lds r24,Poti3
1042 09bc 00C0 rjmp .L162
1043 .L169:
1044 09be 8E3F cpi r24,lo8(-2)
1045 09c0 01F4 brne .L166
1046 09c2 8091 0000 lds r24,Poti4
1047 .L162:
1048 09c6 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
1049 .L166:
1050 09ca 8091 0000 lds r24,Parameter_Hoehe_ACC_Wirkung
1051 09ce 8823 tst r24
1052 09d0 01F4 brne .L172
1053 09d2 1092 0000 sts Parameter_Hoehe_ACC_Wirkung,__zero_reg__
1054 09d6 00C0 rjmp .L174
1055 .L172:
1056 09d8 8F3F cpi r24,lo8(-1)
1057 09da 01F4 brne .L174
1058 09dc 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
1059 .L174:
1060 09e0 8091 0000 lds r24,EE_Parameter+21
1061 09e4 8B3F cpi r24,lo8(-5)
1062 09e6 00F0 brlo .L176
1063 09e8 8B3F cpi r24,lo8(-5)
1064 09ea 01F4 brne .L178
1065 09ec 8091 0000 lds r24,Poti1
1066 09f0 00C0 rjmp .L176
1067 .L178:
1068 09f2 8C3F cpi r24,lo8(-4)
1069 09f4 01F4 brne .L181
1070 09f6 8091 0000 lds r24,Poti2
1071 09fa 00C0 rjmp .L176
1072 .L181:
1073 09fc 8D3F cpi r24,lo8(-3)
1074 09fe 01F4 brne .L183
1075 0a00 8091 0000 lds r24,Poti3
1076 0a04 00C0 rjmp .L176
1077 .L183:
1078 0a06 8E3F cpi r24,lo8(-2)
1079 0a08 01F4 brne .L180
1080 0a0a 8091 0000 lds r24,Poti4
1081 .L176:
1082 0a0e 8093 0000 sts Parameter_KompassWirkung,r24
1083 .L180:
1084 0a12 8091 0000 lds r24,Parameter_KompassWirkung
1085 0a16 8823 tst r24
1086 0a18 01F4 brne .L186
1087 0a1a 1092 0000 sts Parameter_KompassWirkung,__zero_reg__
1088 0a1e 00C0 rjmp .L188
1089 .L186:
1090 0a20 8F3F cpi r24,lo8(-1)
1091 0a22 01F4 brne .L188
1092 0a24 8093 0000 sts Parameter_KompassWirkung,r24
1093 .L188:
1094 0a28 8091 0000 lds r24,EE_Parameter+22
1095 0a2c 8B3F cpi r24,lo8(-5)
1096 0a2e 00F0 brlo .L190
1097 0a30 8B3F cpi r24,lo8(-5)
1098 0a32 01F4 brne .L192
1099 0a34 8091 0000 lds r24,Poti1
1100 0a38 00C0 rjmp .L190
1101 .L192:
1102 0a3a 8C3F cpi r24,lo8(-4)
1103 0a3c 01F4 brne .L195
1104 0a3e 8091 0000 lds r24,Poti2
1105 0a42 00C0 rjmp .L190
1106 .L195:
1107 0a44 8D3F cpi r24,lo8(-3)
1108 0a46 01F4 brne .L197
1109 0a48 8091 0000 lds r24,Poti3
1110 0a4c 00C0 rjmp .L190
1111 .L197:
1112 0a4e 8E3F cpi r24,lo8(-2)
1113 0a50 01F4 brne .L194
1114 0a52 8091 0000 lds r24,Poti4
1115 .L190:
1116 0a56 8093 0000 sts Parameter_Gyro_P,r24
1117 .L194:
1118 0a5a 8091 0000 lds r24,Parameter_Gyro_P
1119 0a5e 8B30 cpi r24,lo8(11)
1120 0a60 00F4 brsh .L200
1121 0a62 8AE0 ldi r24,lo8(10)
1122 0a64 00C0 rjmp .L332
1123 .L200:
1124 0a66 8F3F cpi r24,lo8(-1)
1125 0a68 01F4 brne .L202
1126 .L332:
1127 0a6a 8093 0000 sts Parameter_Gyro_P,r24
1128 .L202:
1129 0a6e 8091 0000 lds r24,EE_Parameter+23
1130 0a72 8B3F cpi r24,lo8(-5)
1131 0a74 00F0 brlo .L204
1132 0a76 8B3F cpi r24,lo8(-5)
1133 0a78 01F4 brne .L206
1134 0a7a 8091 0000 lds r24,Poti1
1135 0a7e 00C0 rjmp .L204
1136 .L206:
1137 0a80 8C3F cpi r24,lo8(-4)
1138 0a82 01F4 brne .L209
1139 0a84 8091 0000 lds r24,Poti2
1140 0a88 00C0 rjmp .L204
1141 .L209:
1142 0a8a 8D3F cpi r24,lo8(-3)
1143 0a8c 01F4 brne .L211
1144 0a8e 8091 0000 lds r24,Poti3
1145 0a92 00C0 rjmp .L204
1146 .L211:
1147 0a94 8E3F cpi r24,lo8(-2)
1148 0a96 01F4 brne .L208
1149 0a98 8091 0000 lds r24,Poti4
1150 .L204:
1151 0a9c 8093 0000 sts Parameter_Gyro_I,r24
1152 .L208:
1153 0aa0 8091 0000 lds r24,Parameter_Gyro_I
1154 0aa4 8823 tst r24
1155 0aa6 01F4 brne .L214
1156 0aa8 1092 0000 sts Parameter_Gyro_I,__zero_reg__
1157 0aac 00C0 rjmp .L216
1158 .L214:
1159 0aae 8F3F cpi r24,lo8(-1)
1160 0ab0 01F4 brne .L216
1161 0ab2 8093 0000 sts Parameter_Gyro_I,r24
1162 .L216:
1163 0ab6 8091 0000 lds r24,EE_Parameter+28
1164 0aba 8B3F cpi r24,lo8(-5)
1165 0abc 00F0 brlo .L218
1166 0abe 8B3F cpi r24,lo8(-5)
1167 0ac0 01F4 brne .L220
1168 0ac2 8091 0000 lds r24,Poti1
1169 0ac6 00C0 rjmp .L218
1170 .L220:
1171 0ac8 8C3F cpi r24,lo8(-4)
1172 0aca 01F4 brne .L223
1173 0acc 8091 0000 lds r24,Poti2
1174 0ad0 00C0 rjmp .L218
1175 .L223:
1176 0ad2 8D3F cpi r24,lo8(-3)
1177 0ad4 01F4 brne .L225
1178 0ad6 8091 0000 lds r24,Poti3
1179 0ada 00C0 rjmp .L218
1180 .L225:
1181 0adc 8E3F cpi r24,lo8(-2)
1182 0ade 01F4 brne .L222
1183 0ae0 8091 0000 lds r24,Poti4
1184 .L218:
1185 0ae4 8093 0000 sts Parameter_I_Faktor,r24
1186 .L222:
1187 0ae8 8091 0000 lds r24,Parameter_I_Faktor
1188 0aec 8823 tst r24
1189 0aee 01F4 brne .L228
1190 0af0 1092 0000 sts Parameter_I_Faktor,__zero_reg__
1191 0af4 00C0 rjmp .L230
1192 .L228:
1193 0af6 8F3F cpi r24,lo8(-1)
1194 0af8 01F4 brne .L230
1195 0afa 8093 0000 sts Parameter_I_Faktor,r24
1196 .L230:
1197 0afe 8091 0000 lds r24,EE_Parameter+29
1198 0b02 8B3F cpi r24,lo8(-5)
1199 0b04 00F0 brlo .L232
1200 0b06 8B3F cpi r24,lo8(-5)
1201 0b08 01F4 brne .L234
1202 0b0a 8091 0000 lds r24,Poti1
1203 0b0e 00C0 rjmp .L232
1204 .L234:
1205 0b10 8C3F cpi r24,lo8(-4)
1206 0b12 01F4 brne .L237
1207 0b14 8091 0000 lds r24,Poti2
1208 0b18 00C0 rjmp .L232
1209 .L237:
1210 0b1a 8D3F cpi r24,lo8(-3)
1211 0b1c 01F4 brne .L239
1212 0b1e 8091 0000 lds r24,Poti3
1213 0b22 00C0 rjmp .L232
1214 .L239:
1215 0b24 8E3F cpi r24,lo8(-2)
1216 0b26 01F4 brne .L236
1217 0b28 8091 0000 lds r24,Poti4
1218 .L232:
1219 0b2c 8093 0000 sts Parameter_UserParam1,r24
1220 .L236:
1221 0b30 8091 0000 lds r24,Parameter_UserParam1
1222 0b34 8823 tst r24
1223 0b36 01F4 brne .L242
1224 0b38 1092 0000 sts Parameter_UserParam1,__zero_reg__
1225 0b3c 00C0 rjmp .L244
1226 .L242:
1227 0b3e 8F3F cpi r24,lo8(-1)
1228 0b40 01F4 brne .L244
1229 0b42 8093 0000 sts Parameter_UserParam1,r24
1230 .L244:
1231 0b46 8091 0000 lds r24,EE_Parameter+30
1232 0b4a 8B3F cpi r24,lo8(-5)
1233 0b4c 00F0 brlo .L246
1234 0b4e 8B3F cpi r24,lo8(-5)
1235 0b50 01F4 brne .L248
1236 0b52 8091 0000 lds r24,Poti1
1237 0b56 00C0 rjmp .L246
1238 .L248:
1239 0b58 8C3F cpi r24,lo8(-4)
1240 0b5a 01F4 brne .L251
1241 0b5c 8091 0000 lds r24,Poti2
1242 0b60 00C0 rjmp .L246
1243 .L251:
1244 0b62 8D3F cpi r24,lo8(-3)
1245 0b64 01F4 brne .L253
1246 0b66 8091 0000 lds r24,Poti3
1247 0b6a 00C0 rjmp .L246
1248 .L253:
1249 0b6c 8E3F cpi r24,lo8(-2)
1250 0b6e 01F4 brne .L250
1251 0b70 8091 0000 lds r24,Poti4
1252 .L246:
1253 0b74 8093 0000 sts Parameter_UserParam2,r24
1254 .L250:
1255 0b78 8091 0000 lds r24,Parameter_UserParam2
1256 0b7c 8823 tst r24
1257 0b7e 01F4 brne .L256
1258 0b80 1092 0000 sts Parameter_UserParam2,__zero_reg__
1259 0b84 00C0 rjmp .L258
1260 .L256:
1261 0b86 8F3F cpi r24,lo8(-1)
1262 0b88 01F4 brne .L258
1263 0b8a 8093 0000 sts Parameter_UserParam2,r24
1264 .L258:
1265 0b8e 8091 0000 lds r24,EE_Parameter+31
1266 0b92 8B3F cpi r24,lo8(-5)
1267 0b94 00F0 brlo .L260
1268 0b96 8B3F cpi r24,lo8(-5)
1269 0b98 01F4 brne .L262
1270 0b9a 8091 0000 lds r24,Poti1
1271 0b9e 00C0 rjmp .L260
1272 .L262:
1273 0ba0 8C3F cpi r24,lo8(-4)
1274 0ba2 01F4 brne .L265
1275 0ba4 8091 0000 lds r24,Poti2
1276 0ba8 00C0 rjmp .L260
1277 .L265:
1278 0baa 8D3F cpi r24,lo8(-3)
1279 0bac 01F4 brne .L267
1280 0bae 8091 0000 lds r24,Poti3
1281 0bb2 00C0 rjmp .L260
1282 .L267:
1283 0bb4 8E3F cpi r24,lo8(-2)
1284 0bb6 01F4 brne .L264
1285 0bb8 8091 0000 lds r24,Poti4
1286 .L260:
1287 0bbc 8093 0000 sts Parameter_UserParam3,r24
1288 .L264:
1289 0bc0 8091 0000 lds r24,Parameter_UserParam3
1290 0bc4 8823 tst r24
1291 0bc6 01F4 brne .L270
1292 0bc8 1092 0000 sts Parameter_UserParam3,__zero_reg__
1293 0bcc 00C0 rjmp .L272
1294 .L270:
1295 0bce 8F3F cpi r24,lo8(-1)
1296 0bd0 01F4 brne .L272
1297 0bd2 8093 0000 sts Parameter_UserParam3,r24
1298 .L272:
1299 0bd6 8091 0000 lds r24,EE_Parameter+32
1300 0bda 8B3F cpi r24,lo8(-5)
1301 0bdc 00F0 brlo .L274
1302 0bde 8B3F cpi r24,lo8(-5)
1303 0be0 01F4 brne .L276
1304 0be2 8091 0000 lds r24,Poti1
1305 0be6 00C0 rjmp .L274
1306 .L276:
1307 0be8 8C3F cpi r24,lo8(-4)
1308 0bea 01F4 brne .L279
1309 0bec 8091 0000 lds r24,Poti2
1310 0bf0 00C0 rjmp .L274
1311 .L279:
1312 0bf2 8D3F cpi r24,lo8(-3)
1313 0bf4 01F4 brne .L281
1314 0bf6 8091 0000 lds r24,Poti3
1315 0bfa 00C0 rjmp .L274
1316 .L281:
1317 0bfc 8E3F cpi r24,lo8(-2)
1318 0bfe 01F4 brne .L278
1319 0c00 8091 0000 lds r24,Poti4
1320 .L274:
1321 0c04 8093 0000 sts Parameter_UserParam4,r24
1322 .L278:
1323 0c08 8091 0000 lds r24,Parameter_UserParam4
1324 0c0c 8823 tst r24
1325 0c0e 01F4 brne .L284
1326 0c10 1092 0000 sts Parameter_UserParam4,__zero_reg__
1327 0c14 00C0 rjmp .L286
1328 .L284:
1329 0c16 8F3F cpi r24,lo8(-1)
1330 0c18 01F4 brne .L286
1331 0c1a 8093 0000 sts Parameter_UserParam4,r24
1332 .L286:
1333 0c1e 9091 0000 lds r25,EE_Parameter+33
1334 0c22 9B3F cpi r25,lo8(-5)
1335 0c24 00F0 brlo .L288
1336 0c26 9B3F cpi r25,lo8(-5)
1337 0c28 01F4 brne .L290
1338 0c2a 8091 0000 lds r24,Poti1
1339 0c2e 00C0 rjmp .L333
1340 .L290:
1341 0c30 9C3F cpi r25,lo8(-4)
1342 0c32 01F4 brne .L293
1343 0c34 8091 0000 lds r24,Poti2
1344 .L333:
1345 0c38 8093 0000 sts Parameter_ServoNickControl,r24
1346 0c3c 00C0 rjmp .L292
1347 .L293:
1348 0c3e 9D3F cpi r25,lo8(-3)
1349 0c40 01F4 brne .L295
1350 0c42 8091 0000 lds r24,Poti3
1351 0c46 00C0 rjmp .L333
1352 .L295:
1353 0c48 9E3F cpi r25,lo8(-2)
1354 0c4a 01F4 brne .L292
1355 0c4c 8091 0000 lds r24,Poti4
1356 0c50 00C0 rjmp .L333
1357 .L288:
1358 0c52 9093 0000 sts Parameter_ServoNickControl,r25
1359 .L292:
1360 0c56 8091 0000 lds r24,Parameter_ServoNickControl
1361 0c5a 8823 tst r24
1362 0c5c 01F4 brne .L298
1363 0c5e 1092 0000 sts Parameter_ServoNickControl,__zero_reg__
1364 0c62 00C0 rjmp .L300
1365 .L298:
1366 0c64 8F3F cpi r24,lo8(-1)
1367 0c66 01F4 brne .L300
1368 0c68 8093 0000 sts Parameter_ServoNickControl,r24
1369 .L300:
1370 0c6c 9B3F cpi r25,lo8(-5)
1371 0c6e 00F0 brlo .L302
1372 0c70 9B3F cpi r25,lo8(-5)
1373 0c72 01F4 brne .L304
1374 0c74 8091 0000 lds r24,Poti1
1375 0c78 00C0 rjmp .L334
1376 .L304:
1377 0c7a 9C3F cpi r25,lo8(-4)
1378 0c7c 01F4 brne .L307
1379 0c7e 8091 0000 lds r24,Poti2
1380 .L334:
1381 0c82 8093 0000 sts Parameter_ServoNickControl,r24
1382 0c86 00C0 rjmp .L306
1383 .L307:
1384 0c88 9D3F cpi r25,lo8(-3)
1385 0c8a 01F4 brne .L309
1386 0c8c 8091 0000 lds r24,Poti3
1387 0c90 00C0 rjmp .L334
1388 .L309:
1389 0c92 9E3F cpi r25,lo8(-2)
1390 0c94 01F4 brne .L306
1391 0c96 8091 0000 lds r24,Poti4
1392 0c9a 00C0 rjmp .L334
1393 .L302:
1394 0c9c 9093 0000 sts Parameter_ServoNickControl,r25
1395 .L306:
1396 0ca0 8091 0000 lds r24,Parameter_ServoNickControl
1397 0ca4 8823 tst r24
1398 0ca6 01F4 brne .L312
1399 0ca8 1092 0000 sts Parameter_ServoNickControl,__zero_reg__
1400 0cac 00C0 rjmp .L314
1401 .L312:
1402 0cae 8F3F cpi r24,lo8(-1)
1403 0cb0 01F4 brne .L314
1404 0cb2 8093 0000 sts Parameter_ServoNickControl,r24
1405 .L314:
1406 0cb6 9B3F cpi r25,lo8(-5)
1407 0cb8 00F0 brlo .L316
1408 0cba 9B3F cpi r25,lo8(-5)
1409 0cbc 01F4 brne .L318
1410 0cbe 8091 0000 lds r24,Poti1
1411 0cc2 00C0 rjmp .L335
1412 .L318:
1413 0cc4 9C3F cpi r25,lo8(-4)
1414 0cc6 01F4 brne .L321
1415 0cc8 8091 0000 lds r24,Poti2
1416 .L335:
1417 0ccc 8093 0000 sts Parameter_ServoNickControl,r24
1418 0cd0 00C0 rjmp .L320
1419 .L321:
1420 0cd2 9D3F cpi r25,lo8(-3)
1421 0cd4 01F4 brne .L323
1422 0cd6 8091 0000 lds r24,Poti3
1423 0cda 00C0 rjmp .L335
1424 .L323:
1425 0cdc 9E3F cpi r25,lo8(-2)
1426 0cde 01F4 brne .L320
1427 0ce0 8091 0000 lds r24,Poti4
1428 0ce4 00C0 rjmp .L335
1429 .L316:
1430 0ce6 9093 0000 sts Parameter_ServoNickControl,r25
1431 .L320:
1432 0cea 8091 0000 lds r24,Parameter_ServoNickControl
1433 0cee 8823 tst r24
1434 0cf0 01F4 brne .L326
1435 0cf2 1092 0000 sts Parameter_ServoNickControl,__zero_reg__
1436 0cf6 00C0 rjmp .L328
1437 .L326:
1438 0cf8 8F3F cpi r24,lo8(-1)
1439 0cfa 01F4 brne .L328
1440 0cfc 8093 0000 sts Parameter_ServoNickControl,r24
1441 .L328:
1442 0d00 1091 0000 lds r17,Parameter_I_Faktor
1443 0d04 612F mov r22,r17
1444 0d06 7727 clr r23
1445 0d08 67FD sbrc r22,7
1446 0d0a 7095 com r23
1447 0d0c 872F mov r24,r23
1448 0d0e 972F mov r25,r23
1449 0d10 0E94 0000 call __floatsisf
1450 0d14 17FF sbrs r17,7
1451 0d16 00C0 rjmp .L330
1452 0d18 20E0 ldi r18,lo8(0x43800000)
1453 0d1a 30E0 ldi r19,hi8(0x43800000)
1454 0d1c 40E8 ldi r20,hlo8(0x43800000)
1455 0d1e 53E4 ldi r21,hhi8(0x43800000)
1456 0d20 0E94 0000 call __addsf3
1457 .L330:
1458 0d24 27E1 ldi r18,lo8(0x38d1b717)
1459 0d26 37EB ldi r19,hi8(0x38d1b717)
1460 0d28 41ED ldi r20,hlo8(0x38d1b717)
1461 0d2a 58E3 ldi r21,hhi8(0x38d1b717)
1462 0d2c 0E94 0000 call __mulsf3
1463 0d30 6093 0000 sts Ki,r22
1464 0d34 7093 0000 sts (Ki)+1,r23
1465 0d38 8093 0000 sts (Ki)+2,r24
1466 0d3c 9093 0000 sts (Ki)+3,r25
1467 0d40 8091 0000 lds r24,EE_Parameter+19
1468 0d44 8093 0000 sts MAX_GAS,r24
1469 0d48 8091 0000 lds r24,EE_Parameter+18
1470 0d4c 8093 0000 sts MIN_GAS,r24
1471 /* epilogue: frame size=0 */
1472 0d50 1F91 pop r17
1473 0d52 0895 ret
1474 /* epilogue end (size=2) */
1475 /* function ParameterZuordnung size 589 (586) */
1477 .data
1478 .LC0:
1479 0000 4B61 6D65 .string "Kamera"
1479 7261 00
1480 0007 00 .string ""
1481 .text
1482 .global DefaultKonstanten2
1484 DefaultKonstanten2:
1485 /* prologue: frame size=0 */
1486 /* prologue end (size=0) */
1487 0d54 81E0 ldi r24,lo8(1)
1488 0d56 8093 0000 sts EE_Parameter,r24
1489 0d5a 42E0 ldi r20,lo8(2)
1490 0d5c 4093 0000 sts EE_Parameter+1,r20
1491 0d60 83E0 ldi r24,lo8(3)
1492 0d62 8093 0000 sts EE_Parameter+2,r24
1493 0d66 24E0 ldi r18,lo8(4)
1494 0d68 2093 0000 sts EE_Parameter+3,r18
1495 0d6c 35E0 ldi r19,lo8(5)
1496 0d6e 3093 0000 sts EE_Parameter+4,r19
1497 0d72 86E0 ldi r24,lo8(6)
1498 0d74 8093 0000 sts EE_Parameter+5,r24
1499 0d78 87E0 ldi r24,lo8(7)
1500 0d7a 8093 0000 sts EE_Parameter+6,r24
1501 0d7e 1092 0000 sts EE_Parameter+8,__zero_reg__
1502 0d82 8EE1 ldi r24,lo8(30)
1503 0d84 8093 0000 sts EE_Parameter+9,r24
1504 0d88 8BEF ldi r24,lo8(-5)
1505 0d8a 8093 0000 sts EE_Parameter+11,r24
1506 0d8e 8AE0 ldi r24,lo8(10)
1507 0d90 8093 0000 sts EE_Parameter+12,r24
1508 0d94 92E3 ldi r25,lo8(50)
1509 0d96 9093 0000 sts EE_Parameter+10,r25
1510 0d9a 9093 0000 sts EE_Parameter+14,r25
1511 0d9e 4093 0000 sts EE_Parameter+13,r20
1512 0da2 2093 0000 sts EE_Parameter+15,r18
1513 0da6 1092 0000 sts EE_Parameter+16,__zero_reg__
1514 0daa 80E1 ldi r24,lo8(16)
1515 0dac 8093 0000 sts EE_Parameter+17,r24
1516 0db0 8FE0 ldi r24,lo8(15)
1517 0db2 8093 0000 sts EE_Parameter+18,r24
1518 0db6 8AEF ldi r24,lo8(-6)
1519 0db8 8093 0000 sts EE_Parameter+19,r24
1520 0dbc 8AE1 ldi r24,lo8(26)
1521 0dbe 8093 0000 sts EE_Parameter+20,r24
1522 0dc2 80E8 ldi r24,lo8(-128)
1523 0dc4 8093 0000 sts EE_Parameter+21,r24
1524 0dc8 8FEA ldi r24,lo8(-81)
1525 0dca 8093 0000 sts EE_Parameter+22,r24
1526 0dce 8093 0000 sts EE_Parameter+23,r24
1527 0dd2 8AE5 ldi r24,lo8(90)
1528 0dd4 8093 0000 sts EE_Parameter+24,r24
1529 0dd8 83E2 ldi r24,lo8(35)
1530 0dda 8093 0000 sts EE_Parameter+25,r24
1531 0dde 84E1 ldi r24,lo8(20)
1532 0de0 8093 0000 sts EE_Parameter+26,r24
1533 0de4 1092 0000 sts EE_Parameter+27,__zero_reg__
1534 0de8 3093 0000 sts EE_Parameter+28,r19
1535 0dec 1092 0000 sts EE_Parameter+29,__zero_reg__
1536 0df0 1092 0000 sts EE_Parameter+30,__zero_reg__
1537 0df4 1092 0000 sts EE_Parameter+31,__zero_reg__
1538 0df8 1092 0000 sts EE_Parameter+32,__zero_reg__
1539 0dfc 84E6 ldi r24,lo8(100)
1540 0dfe 8093 0000 sts EE_Parameter+33,r24
1541 0e02 88E2 ldi r24,lo8(40)
1542 0e04 8093 0000 sts EE_Parameter+34,r24
1543 0e08 1092 0000 sts EE_Parameter+38,__zero_reg__
1544 0e0c 9093 0000 sts EE_Parameter+35,r25
1545 0e10 86E9 ldi r24,lo8(-106)
1546 0e12 8093 0000 sts EE_Parameter+36,r24
1547 0e16 3093 0000 sts EE_Parameter+37,r19
1548 0e1a A0E0 ldi r26,lo8(EE_Parameter+46)
1549 0e1c B0E0 ldi r27,hi8(EE_Parameter+46)
1550 0e1e E0E0 ldi r30,lo8(.LC0)
1551 0e20 F0E0 ldi r31,hi8(.LC0)
1552 0e22 8CE0 ldi r24,lo8(12)
1553 .L337:
1554 0e24 0190 ld r0,Z+
1555 0e26 0D92 st X+,r0
1556 0e28 8150 subi r24,lo8(-(-1))
1557 0e2a 01F4 brne .L337
1558 /* epilogue: frame size=0 */
1559 0e2c 0895 ret
1560 /* epilogue end (size=1) */
1561 /* function DefaultKonstanten2 size 110 (109) */
1563 .data
1564 .LC1:
1565 0008 4E6F 726D .string "Normal"
1565 616C 00
1566 000f 00 .string ""
1567 .text
1568 .global DefaultKonstanten1
1570 DefaultKonstanten1:
1571 /* prologue: frame size=0 */
1572 /* prologue end (size=0) */
1573 0e2e 81E0 ldi r24,lo8(1)
1574 0e30 8093 0000 sts EE_Parameter,r24
1575 0e34 52E0 ldi r21,lo8(2)
1576 0e36 5093 0000 sts EE_Parameter+1,r21
1577 0e3a 83E0 ldi r24,lo8(3)
1578 0e3c 8093 0000 sts EE_Parameter+2,r24
1579 0e40 44E0 ldi r20,lo8(4)
1580 0e42 4093 0000 sts EE_Parameter+3,r20
1581 0e46 35E0 ldi r19,lo8(5)
1582 0e48 3093 0000 sts EE_Parameter+4,r19
1583 0e4c 86E0 ldi r24,lo8(6)
1584 0e4e 8093 0000 sts EE_Parameter+5,r24
1585 0e52 87E0 ldi r24,lo8(7)
1586 0e54 8093 0000 sts EE_Parameter+6,r24
1587 0e58 28E0 ldi r18,lo8(8)
1588 0e5a 2093 0000 sts EE_Parameter+7,r18
1589 0e5e 1092 0000 sts EE_Parameter+8,__zero_reg__
1590 0e62 9EE1 ldi r25,lo8(30)
1591 0e64 9093 0000 sts EE_Parameter+9,r25
1592 0e68 8BEF ldi r24,lo8(-5)
1593 0e6a 8093 0000 sts EE_Parameter+11,r24
1594 0e6e 8AE0 ldi r24,lo8(10)
1595 0e70 8093 0000 sts EE_Parameter+12,r24
1596 0e74 86E4 ldi r24,lo8(70)
1597 0e76 8093 0000 sts EE_Parameter+10,r24
1598 0e7a 9093 0000 sts EE_Parameter+14,r25
1599 0e7e 5093 0000 sts EE_Parameter+13,r21
1600 0e82 4093 0000 sts EE_Parameter+15,r20
1601 0e86 2093 0000 sts EE_Parameter+16,r18
1602 0e8a 80E1 ldi r24,lo8(16)
1603 0e8c 8093 0000 sts EE_Parameter+17,r24
1604 0e90 8FE0 ldi r24,lo8(15)
1605 0e92 8093 0000 sts EE_Parameter+18,r24
1606 0e96 8AEF ldi r24,lo8(-6)
1607 0e98 8093 0000 sts EE_Parameter+19,r24
1608 0e9c 8AE1 ldi r24,lo8(26)
1609 0e9e 8093 0000 sts EE_Parameter+20,r24
1610 0ea2 80E8 ldi r24,lo8(-128)
1611 0ea4 8093 0000 sts EE_Parameter+21,r24
1612 0ea8 88E7 ldi r24,lo8(120)
1613 0eaa 8093 0000 sts EE_Parameter+22,r24
1614 0eae 96E9 ldi r25,lo8(-106)
1615 0eb0 9093 0000 sts EE_Parameter+23,r25
1616 0eb4 8AE5 ldi r24,lo8(90)
1617 0eb6 8093 0000 sts EE_Parameter+24,r24
1618 0eba 83E2 ldi r24,lo8(35)
1619 0ebc 8093 0000 sts EE_Parameter+25,r24
1620 0ec0 84E1 ldi r24,lo8(20)
1621 0ec2 8093 0000 sts EE_Parameter+26,r24
1622 0ec6 1092 0000 sts EE_Parameter+27,__zero_reg__
1623 0eca 3093 0000 sts EE_Parameter+28,r19
1624 0ece 1092 0000 sts EE_Parameter+29,__zero_reg__
1625 0ed2 1092 0000 sts EE_Parameter+30,__zero_reg__
1626 0ed6 1092 0000 sts EE_Parameter+31,__zero_reg__
1627 0eda 1092 0000 sts EE_Parameter+32,__zero_reg__
1628 0ede 84E6 ldi r24,lo8(100)
1629 0ee0 8093 0000 sts EE_Parameter+33,r24
1630 0ee4 88E2 ldi r24,lo8(40)
1631 0ee6 8093 0000 sts EE_Parameter+34,r24
1632 0eea 1092 0000 sts EE_Parameter+38,__zero_reg__
1633 0eee 82E3 ldi r24,lo8(50)
1634 0ef0 8093 0000 sts EE_Parameter+35,r24
1635 0ef4 9093 0000 sts EE_Parameter+36,r25
1636 0ef8 3093 0000 sts EE_Parameter+37,r19
1637 0efc A0E0 ldi r26,lo8(EE_Parameter+46)
1638 0efe B0E0 ldi r27,hi8(EE_Parameter+46)
1639 0f00 E0E0 ldi r30,lo8(.LC1)
1640 0f02 F0E0 ldi r31,hi8(.LC1)
1641 0f04 8CE0 ldi r24,lo8(12)
1642 .L342:
1643 0f06 0190 ld r0,Z+
1644 0f08 0D92 st X+,r0
1645 0f0a 8150 subi r24,lo8(-(-1))
1646 0f0c 01F4 brne .L342
1647 /* epilogue: frame size=0 */
1648 0f0e 0895 ret
1649 /* epilogue end (size=1) */
1650 /* function DefaultKonstanten1 size 114 (113) */
1652 .global SendMotorData
1654 SendMotorData:
1655 /* prologue: frame size=0 */
1656 /* prologue end (size=0) */
1657 0f10 8091 0000 lds r24,MotorenEin
1658 0f14 8823 tst r24
1659 0f16 01F4 brne .L347
1660 0f18 1092 0000 sts Motor_Hinten,__zero_reg__
1661 0f1c 1092 0000 sts Motor_Vorne,__zero_reg__
1662 0f20 1092 0000 sts Motor_Rechts,__zero_reg__
1663 0f24 1092 0000 sts Motor_Links,__zero_reg__
1664 0f28 8091 0000 lds r24,MotorTest
1665 0f2c 8823 tst r24
1666 0f2e 01F0 breq .L349
1667 0f30 8093 0000 sts Motor_Vorne,r24
1668 .L349:
1669 0f34 8091 0000 lds r24,MotorTest+1
1670 0f38 8823 tst r24
1671 0f3a 01F0 breq .L351
1672 0f3c 8093 0000 sts Motor_Hinten,r24
1673 .L351:
1674 0f40 8091 0000 lds r24,MotorTest+2
1675 0f44 8823 tst r24
1676 0f46 01F0 breq .L353
1677 0f48 8093 0000 sts Motor_Links,r24
1678 .L353:
1679 0f4c 8091 0000 lds r24,MotorTest+3
1680 0f50 8823 tst r24
1681 0f52 01F0 breq .L347
1682 0f54 8093 0000 sts Motor_Rechts,r24
1683 .L347:
1684 0f58 8091 0000 lds r24,Motor_Vorne
1685 0f5c 9927 clr r25
1686 0f5e 9093 0000 sts (DebugOut+42)+1,r25
1687 0f62 8093 0000 sts DebugOut+42,r24
1688 0f66 8091 0000 lds r24,Motor_Hinten
1689 0f6a 9927 clr r25
1690 0f6c 9093 0000 sts (DebugOut+44)+1,r25
1691 0f70 8093 0000 sts DebugOut+44,r24
1692 0f74 8091 0000 lds r24,Motor_Links
1693 0f78 9927 clr r25
1694 0f7a 9093 0000 sts (DebugOut+46)+1,r25
1695 0f7e 8093 0000 sts DebugOut+46,r24
1696 0f82 8091 0000 lds r24,Motor_Rechts
1697 0f86 9927 clr r25
1698 0f88 9093 0000 sts (DebugOut+48)+1,r25
1699 0f8c 8093 0000 sts DebugOut+48,r24
1700 0f90 1092 0000 sts twi_state,__zero_reg__
1701 0f94 1092 0000 sts motor,__zero_reg__
1702 0f98 0E94 0000 call i2c_start
1703 /* epilogue: frame size=0 */
1704 0f9c 0895 ret
1705 /* epilogue end (size=1) */
1706 /* function SendMotorData size 71 (70) */
1708 .global SetNeutral
1710 SetNeutral:
1711 /* prologue: frame size=0 */
1712 0f9e CF93 push r28
1713 0fa0 DF93 push r29
1714 /* prologue end (size=2) */
1715 0fa2 1092 0000 sts (NeutralAccX)+1,__zero_reg__
1716 0fa6 1092 0000 sts NeutralAccX,__zero_reg__
1717 0faa 1092 0000 sts (NeutralAccY)+1,__zero_reg__
1718 0fae 1092 0000 sts NeutralAccY,__zero_reg__
1719 0fb2 80E0 ldi r24,lo8(0x0)
1720 0fb4 90E0 ldi r25,hi8(0x0)
1721 0fb6 A0E0 ldi r26,hlo8(0x0)
1722 0fb8 B0E0 ldi r27,hhi8(0x0)
1723 0fba 8093 0000 sts NeutralAccZ,r24
1724 0fbe 9093 0000 sts (NeutralAccZ)+1,r25
1725 0fc2 A093 0000 sts (NeutralAccZ)+2,r26
1726 0fc6 B093 0000 sts (NeutralAccZ)+3,r27
1727 0fca 1092 0000 sts (AdNeutralNick)+1,__zero_reg__
1728 0fce 1092 0000 sts AdNeutralNick,__zero_reg__
1729 0fd2 1092 0000 sts (AdNeutralRoll)+1,__zero_reg__
1730 0fd6 1092 0000 sts AdNeutralRoll,__zero_reg__
1731 0fda 1092 0000 sts (AdNeutralGier)+1,__zero_reg__
1732 0fde 1092 0000 sts AdNeutralGier,__zero_reg__
1733 0fe2 0E94 0000 call CalibrierMittelwert
1734 0fe6 85E0 ldi r24,lo8(5)
1735 0fe8 90E0 ldi r25,hi8(5)
1736 0fea 0E94 0000 call SetDelay
1737 0fee EC01 movw r28,r24
1738 .L358:
1739 0ff0 CE01 movw r24,r28
1740 0ff2 0E94 0000 call CheckDelay
1741 0ff6 8823 tst r24
1742 0ff8 01F0 breq .L358
1743 0ffa 0E94 0000 call CalibrierMittelwert
1744 0ffe 8091 0000 lds r24,EE_Parameter+8
1745 1002 80FF sbrs r24,0
1746 1004 00C0 rjmp .L360
1747 1006 8091 0000 lds r24,MessLuftdruck
1748 100a 9091 0000 lds r25,(MessLuftdruck)+1
1749 100e 875B subi r24,lo8(951)
1750 1010 9340 sbci r25,hi8(951)
1751 1012 00F4 brsh .L362
1752 1014 8091 0000 lds r24,MessLuftdruck
1753 1018 9091 0000 lds r25,(MessLuftdruck)+1
1754 101c 8E5E subi r24,lo8(750)
1755 101e 9240 sbci r25,hi8(750)
1756 1020 00F4 brsh .L360
1757 .L362:
1758 1022 0E94 0000 call SucheLuftruckOffset
1759 .L360:
1760 1026 8091 0000 lds r24,MesswertNick
1761 102a 9091 0000 lds r25,(MesswertNick)+1
1762 102e 97FF sbrs r25,7
1763 1030 00C0 rjmp .L364
1764 1032 9095 com r25
1765 1034 8195 neg r24
1766 1036 9F4F sbci r25,lo8(-1)
1767 .L364:
1768 1038 9093 0000 sts (AdNeutralNick)+1,r25
1769 103c 8093 0000 sts AdNeutralNick,r24
1770 1040 8091 0000 lds r24,MesswertRoll
1771 1044 9091 0000 lds r25,(MesswertRoll)+1
1772 1048 97FF sbrs r25,7
1773 104a 00C0 rjmp .L365
1774 104c 9095 com r25
1775 104e 8195 neg r24
1776 1050 9F4F sbci r25,lo8(-1)
1777 .L365:
1778 1052 9093 0000 sts (AdNeutralRoll)+1,r25
1779 1056 8093 0000 sts AdNeutralRoll,r24
1780 105a 8091 0000 lds r24,MesswertGier
1781 105e 9091 0000 lds r25,(MesswertGier)+1
1782 1062 97FF sbrs r25,7
1783 1064 00C0 rjmp .L366
1784 1066 9095 com r25
1785 1068 8195 neg r24
1786 106a 9F4F sbci r25,lo8(-1)
1787 .L366:
1788 106c 9093 0000 sts (AdNeutralGier)+1,r25
1789 1070 8093 0000 sts AdNeutralGier,r24
1790 1074 8091 0000 lds r24,Mittelwert_AccRoll
1791 1078 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1792 107c 97FF sbrs r25,7
1793 107e 00C0 rjmp .L367
1794 1080 9095 com r25
1795 1082 8195 neg r24
1796 1084 9F4F sbci r25,lo8(-1)
1797 .L367:
1798 1086 60E1 ldi r22,lo8(16)
1799 1088 70E0 ldi r23,hi8(16)
1800 108a 0E94 0000 call __divmodhi4
1801 108e 7093 0000 sts (NeutralAccY)+1,r23
1802 1092 6093 0000 sts NeutralAccY,r22
1803 1096 8091 0000 lds r24,Mittelwert_AccNick
1804 109a 9091 0000 lds r25,(Mittelwert_AccNick)+1
1805 109e 97FF sbrs r25,7
1806 10a0 00C0 rjmp .L368
1807 10a2 9095 com r25
1808 10a4 8195 neg r24
1809 10a6 9F4F sbci r25,lo8(-1)
1810 .L368:
1811 10a8 60E1 ldi r22,lo8(16)
1812 10aa 70E0 ldi r23,hi8(16)
1813 10ac 0E94 0000 call __divmodhi4
1814 10b0 7093 0000 sts (NeutralAccX)+1,r23
1815 10b4 6093 0000 sts NeutralAccX,r22
1816 10b8 6091 0000 lds r22,Aktuell_az
1817 10bc 7091 0000 lds r23,(Aktuell_az)+1
1818 10c0 8827 clr r24
1819 10c2 77FD sbrc r23,7
1820 10c4 8095 com r24
1821 10c6 982F mov r25,r24
1822 10c8 0E94 0000 call __floatsisf
1823 10cc 6093 0000 sts NeutralAccZ,r22
1824 10d0 7093 0000 sts (NeutralAccZ)+1,r23
1825 10d4 8093 0000 sts (NeutralAccZ)+2,r24
1826 10d8 9093 0000 sts (NeutralAccZ)+3,r25
1827 10dc 1092 0000 sts Mess_IntegralNick,__zero_reg__
1828 10e0 1092 0000 sts (Mess_IntegralNick)+1,__zero_reg__
1829 10e4 1092 0000 sts (Mess_IntegralNick)+2,__zero_reg__
1830 10e8 1092 0000 sts (Mess_IntegralNick)+3,__zero_reg__
1831 10ec 1092 0000 sts Mess_IntegralNick2,__zero_reg__
1832 10f0 1092 0000 sts (Mess_IntegralNick2)+1,__zero_reg__
1833 10f4 1092 0000 sts (Mess_IntegralNick2)+2,__zero_reg__
1834 10f8 1092 0000 sts (Mess_IntegralNick2)+3,__zero_reg__
1835 10fc 1092 0000 sts Mess_IntegralRoll,__zero_reg__
1836 1100 1092 0000 sts (Mess_IntegralRoll)+1,__zero_reg__
1837 1104 1092 0000 sts (Mess_IntegralRoll)+2,__zero_reg__
1838 1108 1092 0000 sts (Mess_IntegralRoll)+3,__zero_reg__
1839 110c 1092 0000 sts Mess_IntegralRoll2,__zero_reg__
1840 1110 1092 0000 sts (Mess_IntegralRoll2)+1,__zero_reg__
1841 1114 1092 0000 sts (Mess_IntegralRoll2)+2,__zero_reg__
1842 1118 1092 0000 sts (Mess_IntegralRoll2)+3,__zero_reg__
1843 111c 1092 0000 sts Mess_Integral_Gier,__zero_reg__
1844 1120 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
1845 1124 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
1846 1128 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
1847 112c 1092 0000 sts (MesswertNick)+1,__zero_reg__
1848 1130 1092 0000 sts MesswertNick,__zero_reg__
1849 1134 1092 0000 sts (MesswertRoll)+1,__zero_reg__
1850 1138 1092 0000 sts MesswertRoll,__zero_reg__
1851 113c 1092 0000 sts (MesswertGier)+1,__zero_reg__
1852 1140 1092 0000 sts MesswertGier,__zero_reg__
1853 1144 8091 0000 lds r24,Luftdruck
1854 1148 9091 0000 lds r25,(Luftdruck)+1
1855 114c A091 0000 lds r26,(Luftdruck)+2
1856 1150 B091 0000 lds r27,(Luftdruck)+3
1857 1154 9093 0000 sts (StartLuftdruck)+1,r25
1858 1158 8093 0000 sts StartLuftdruck,r24
1859 115c 1092 0000 sts (HoeheD)+1,__zero_reg__
1860 1160 1092 0000 sts HoeheD,__zero_reg__
1861 1164 1092 0000 sts Mess_Integral_Hoch,__zero_reg__
1862 1168 1092 0000 sts (Mess_Integral_Hoch)+1,__zero_reg__
1863 116c 1092 0000 sts (Mess_Integral_Hoch)+2,__zero_reg__
1864 1170 1092 0000 sts (Mess_Integral_Hoch)+3,__zero_reg__
1865 1174 8091 0000 lds r24,KompassValue
1866 1178 9091 0000 lds r25,(KompassValue)+1
1867 117c 9093 0000 sts (KompassStartwert)+1,r25
1868 1180 8093 0000 sts KompassStartwert,r24
1869 1184 82E3 ldi r24,lo8(50)
1870 1186 90E0 ldi r25,hi8(50)
1871 1188 9093 0000 sts (beeptime)+1,r25
1872 118c 8093 0000 sts beeptime,r24
1873 /* epilogue: frame size=0 */
1874 1190 DF91 pop r29
1875 1192 CF91 pop r28
1876 1194 0895 ret
1877 /* epilogue end (size=3) */
1878 /* function SetNeutral size 254 (249) */
1880 .global Piep
1882 Piep:
1883 /* prologue: frame size=0 */
1884 1196 1F93 push r17
1885 /* prologue end (size=1) */
1886 1198 182F mov r17,r24
1887 119a 00C0 rjmp .L373
1888 .L374:
1889 119c 8091 0000 lds r24,MotorenEin
1890 11a0 8823 tst r24
1891 11a2 01F4 brne .L377
1892 11a4 84E6 ldi r24,lo8(100)
1893 11a6 90E0 ldi r25,hi8(100)
1894 11a8 9093 0000 sts (beeptime)+1,r25
1895 11ac 8093 0000 sts beeptime,r24
1896 11b0 8AEF ldi r24,lo8(250)
1897 11b2 90E0 ldi r25,hi8(250)
1898 11b4 0E94 0000 call Delay_ms
1899 .L373:
1900 11b8 1150 subi r17,1
1901 11ba 00F4 brcc .L374
1902 .L377:
1903 /* epilogue: frame size=0 */
1904 11bc 1F91 pop r17
1905 11be 0895 ret
1906 /* epilogue end (size=2) */
1907 /* function Piep size 22 (19) */
1909 .global MotorRegler
1911 MotorRegler:
1912 /* prologue: frame size=4 */
1913 11c0 2F92 push r2
1914 11c2 3F92 push r3
1915 11c4 4F92 push r4
1916 11c6 5F92 push r5
1917 11c8 6F92 push r6
1918 11ca 7F92 push r7
1919 11cc 8F92 push r8
1920 11ce 9F92 push r9
1921 11d0 AF92 push r10
1922 11d2 BF92 push r11
1923 11d4 CF92 push r12
1924 11d6 DF92 push r13
1925 11d8 EF92 push r14
1926 11da FF92 push r15
1927 11dc 0F93 push r16
1928 11de 1F93 push r17
1929 11e0 CF93 push r28
1930 11e2 DF93 push r29
1931 11e4 CDB7 in r28,__SP_L__
1932 11e6 DEB7 in r29,__SP_H__
1933 11e8 2497 sbiw r28,4
1934 11ea 0FB6 in __tmp_reg__,__SREG__
1935 11ec F894 cli
1936 11ee DEBF out __SP_H__,r29
1937 11f0 0FBE out __SREG__,__tmp_reg__
1938 11f2 CDBF out __SP_L__,r28
1939 /* prologue end (size=26) */
1940 11f4 0E94 0000 call Mittelwert
1941 11f8 299A sbi 37-0x20,1
1942 11fa E091 0000 lds r30,EE_Parameter+2
1943 11fe AE2F mov r26,r30
1944 1200 BB27 clr r27
1945 1202 AA0F lsl r26
1946 1204 BB1F rol r27
1947 1206 A050 subi r26,lo8(-(PPM_in))
1948 1208 B040 sbci r27,hi8(-(PPM_in))
1949 120a 0D90 ld __tmp_reg__,X+
1950 120c BC91 ld r27,X
1951 120e A02D mov r26,__tmp_reg__
1952 1210 9D01 movw r18,r26
1953 1212 2858 subi r18,lo8(-(120))
1954 1214 3F4F sbci r19,hi8(-(120))
1955 1216 3A83 std Y+2,r19
1956 1218 2983 std Y+1,r18
1957 121a 37FF sbrs r19,7
1958 121c 00C0 rjmp .L379
1959 121e 1A82 std Y+2,__zero_reg__
1960 1220 1982 std Y+1,__zero_reg__
1961 .L379:
1962 1222 8091 0000 lds r24,SenderOkay
1963 1226 8436 cpi r24,lo8(100)
1964 1228 00F0 brlo .+2
1965 122a 00C0 rjmp .L380
1966 122c 8091 0000 lds r24,PcZugriff
1967 1230 8823 tst r24
1968 1232 01F4 brne .L382
1969 1234 84EF ldi r24,lo8(500)
1970 1236 91E0 ldi r25,hi8(500)
1971 1238 9093 0000 sts (beeptime)+1,r25
1972 123c 8093 0000 sts beeptime,r24
1973 .L382:
1974 1240 8091 0000 lds r24,RcLostTimer.2355
1975 1244 9091 0000 lds r25,(RcLostTimer.2355)+1
1976 1248 0097 sbiw r24,0
1977 124a 01F0 breq .L384
1978 124c 0197 sbiw r24,1
1979 124e 9093 0000 sts (RcLostTimer.2355)+1,r25
1980 1252 8093 0000 sts RcLostTimer.2355,r24
1981 1256 00C0 rjmp .L386
1982 .L384:
1983 1258 1092 0000 sts MotorenEin,__zero_reg__
1984 125c 1092 0000 sts Notlandung,__zero_reg__
1985 .L386:
1986 1260 289A sbi 37-0x20,0
1987 1262 8091 0000 lds r24,modell_fliegt.2359
1988 1266 9091 0000 lds r25,(modell_fliegt.2359)+1
1989 126a 815D subi r24,lo8(2001)
1990 126c 9740 sbci r25,hi8(2001)
1991 126e 00F0 brlo .L387
1992 1270 8091 0000 lds r24,EE_Parameter+25
1993 1274 482F mov r20,r24
1994 1276 5527 clr r21
1995 1278 5A83 std Y+2,r21
1996 127a 4983 std Y+1,r20
1997 127c 81E0 ldi r24,lo8(1)
1998 127e 8093 0000 sts Notlandung,r24
1999 1282 E091 0000 lds r30,EE_Parameter
2000 1286 FF27 clr r31
2001 1288 EE0F lsl r30
2002 128a FF1F rol r31
2003 128c E050 subi r30,lo8(-(PPM_in))
2004 128e F040 sbci r31,hi8(-(PPM_in))
2005 1290 1182 std Z+1,__zero_reg__
2006 1292 1082 st Z,__zero_reg__
2007 1294 E091 0000 lds r30,EE_Parameter+1
2008 1298 FF27 clr r31
2009 129a EE0F lsl r30
2010 129c FF1F rol r31
2011 129e E050 subi r30,lo8(-(PPM_in))
2012 12a0 F040 sbci r31,hi8(-(PPM_in))
2013 12a2 1182 std Z+1,__zero_reg__
2014 12a4 1082 st Z,__zero_reg__
2015 12a6 E091 0000 lds r30,EE_Parameter+3
2016 12aa FF27 clr r31
2017 12ac EE0F lsl r30
2018 12ae FF1F rol r31
2019 12b0 E050 subi r30,lo8(-(PPM_in))
2020 12b2 F040 sbci r31,hi8(-(PPM_in))
2021 12b4 1182 std Z+1,__zero_reg__
2022 12b6 1082 st Z,__zero_reg__
2023 12b8 00C0 rjmp .L389
2024 .L387:
2025 12ba 1092 0000 sts MotorenEin,__zero_reg__
2026 12be 00C0 rjmp .L389
2027 .L380:
2028 12c0 8091 0000 lds r24,SenderOkay
2029 12c4 8D38 cpi r24,lo8(-115)
2030 12c6 00F4 brsh .+2
2031 12c8 00C0 rjmp .L389
2032 12ca 1092 0000 sts Notlandung,__zero_reg__
2033 12ce 8091 0000 lds r24,EE_Parameter+26
2034 12d2 22E3 ldi r18,lo8(50)
2035 12d4 829F mul r24,r18
2036 12d6 C001 movw r24,r0
2037 12d8 1124 clr r1
2038 12da 9093 0000 sts (RcLostTimer.2355)+1,r25
2039 12de 8093 0000 sts RcLostTimer.2355,r24
2040 12e2 6981 ldd r22,Y+1
2041 12e4 7A81 ldd r23,Y+2
2042 12e6 6932 cpi r22,41
2043 12e8 7105 cpc r23,__zero_reg__
2044 12ea 04F0 brlt .L391
2045 12ec 8091 0000 lds r24,modell_fliegt.2359
2046 12f0 9091 0000 lds r25,(modell_fliegt.2359)+1
2047 12f4 7FEF ldi r23,hi8(-1)
2048 12f6 8F3F cpi r24,lo8(-1)
2049 12f8 9707 cpc r25,r23
2050 12fa 01F0 breq .L393
2051 12fc 0196 adiw r24,1
2052 12fe 9093 0000 sts (modell_fliegt.2359)+1,r25
2053 1302 8093 0000 sts modell_fliegt.2359,r24
2054 .L391:
2055 1306 8091 0000 lds r24,modell_fliegt.2359
2056 130a 9091 0000 lds r25,(modell_fliegt.2359)+1
2057 130e 883C cpi r24,200
2058 1310 9105 cpc r25,__zero_reg__
2059 1312 00F0 brlo .L395
2060 1314 8981 ldd r24,Y+1
2061 1316 9A81 ldd r25,Y+2
2062 1318 8897 sbiw r24,40
2063 131a 04F4 brge .L393
2064 .L395:
2065 131c 1092 0000 sts SummeNick.2348,__zero_reg__
2066 1320 1092 0000 sts (SummeNick.2348)+1,__zero_reg__
2067 1324 1092 0000 sts (SummeNick.2348)+2,__zero_reg__
2068 1328 1092 0000 sts (SummeNick.2348)+3,__zero_reg__
2069 132c 1092 0000 sts SummeRoll.2349,__zero_reg__
2070 1330 1092 0000 sts (SummeRoll.2349)+1,__zero_reg__
2071 1334 1092 0000 sts (SummeRoll.2349)+2,__zero_reg__
2072 1338 1092 0000 sts (SummeRoll.2349)+3,__zero_reg__
2073 133c 1092 0000 sts Mess_Integral_Gier,__zero_reg__
2074 1340 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
2075 1344 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
2076 1348 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
2077 134c 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
2078 1350 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
2079 1354 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
2080 1358 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
2081 .L393:
2082 135c E981 ldd r30,Y+1
2083 135e FA81 ldd r31,Y+2
2084 1360 E93C cpi r30,201
2085 1362 F105 cpc r31,__zero_reg__
2086 1364 04F4 brge .+2
2087 1366 00C0 rjmp .L397
2088 1368 8091 0000 lds r24,MotorenEin
2089 136c 8823 tst r24
2090 136e 01F0 breq .+2
2091 1370 00C0 rjmp .L389
2092 1372 E091 0000 lds r30,EE_Parameter+3
2093 1376 FF27 clr r31
2094 1378 EE0F lsl r30
2095 137a FF1F rol r31
2096 137c E050 subi r30,lo8(-(PPM_in))
2097 137e F040 sbci r31,hi8(-(PPM_in))
2098 1380 8081 ld r24,Z
2099 1382 9181 ldd r25,Z+1
2100 1384 8C34 cpi r24,76
2101 1386 9105 cpc r25,__zero_reg__
2102 1388 04F4 brge .+2
2103 138a 00C0 rjmp .L400
2104 138c 8091 0000 lds r24,delay_neutral.2356
2105 1390 8F5F subi r24,lo8(-(1))
2106 1392 8093 0000 sts delay_neutral.2356,r24
2107 1396 893C cpi r24,lo8(-55)
2108 1398 00F4 brsh .+2
2109 139a 00C0 rjmp .L389
2110 139c 2998 cbi 37-0x20,1
2111 139e 0E94 0000 call SetNeutral
2112 13a2 1092 0000 sts MotorenEin,__zero_reg__
2113 13a6 1092 0000 sts delay_neutral.2356,__zero_reg__
2114 13aa 1092 0000 sts (modell_fliegt.2359)+1,__zero_reg__
2115 13ae 1092 0000 sts modell_fliegt.2359,__zero_reg__
2116 13b2 8091 0000 lds r24,EE_Parameter
2117 13b6 282F mov r18,r24
2118 13b8 3327 clr r19
2119 13ba F901 movw r30,r18
2120 13bc EE0F lsl r30
2121 13be FF1F rol r31
2122 13c0 E050 subi r30,lo8(-(PPM_in))
2123 13c2 F040 sbci r31,hi8(-(PPM_in))
2124 13c4 8081 ld r24,Z
2125 13c6 9181 ldd r25,Z+1
2126 13c8 8734 cpi r24,71
2127 13ca 9105 cpc r25,__zero_reg__
2128 13cc 04F4 brge .L403
2129 13ce E091 0000 lds r30,EE_Parameter+1
2130 13d2 FF27 clr r31
2131 13d4 EE0F lsl r30
2132 13d6 FF1F rol r31
2133 13d8 E050 subi r30,lo8(-(PPM_in))
2134 13da F040 sbci r31,hi8(-(PPM_in))
2135 13dc 0190 ld __tmp_reg__,Z+
2136 13de F081 ld r31,Z
2137 13e0 E02D mov r30,__tmp_reg__
2138 13e2 F7FF sbrs r31,7
2139 13e4 00C0 rjmp .L406
2140 13e6 F095 com r31
2141 13e8 E195 neg r30
2142 13ea FF4F sbci r31,lo8(-1)
2143 .L406:
2144 13ec E734 cpi r30,71
2145 13ee F105 cpc r31,__zero_reg__
2146 13f0 04F4 brge .+2
2147 13f2 00C0 rjmp .L405
2148 .L403:
2149 13f4 8091 0000 lds r24,EE_Parameter+1
2150 13f8 682F mov r22,r24
2151 13fa 7727 clr r23
2152 13fc DB01 movw r26,r22
2153 13fe AA0F lsl r26
2154 1400 BB1F rol r27
2155 1402 A050 subi r26,lo8(-(PPM_in))
2156 1404 B040 sbci r27,hi8(-(PPM_in))
2157 1406 8D91 ld r24,X+
2158 1408 9C91 ld r25,X
2159 140a 1197 sbiw r26,1
2160 140c 8734 cpi r24,71
2161 140e 9105 cpc r25,__zero_reg__
2162 1410 04F0 brlt .L407
2163 1412 F901 movw r30,r18
2164 1414 EE0F lsl r30
2165 1416 FF1F rol r31
2166 1418 E050 subi r30,lo8(-(PPM_in))
2167 141a F040 sbci r31,hi8(-(PPM_in))
2168 141c 8081 ld r24,Z
2169 141e 9181 ldd r25,Z+1
2170 .L407:
2171 1420 8D91 ld r24,X+
2172 1422 9C91 ld r25,X
2173 1424 8734 cpi r24,71
2174 1426 9105 cpc r25,__zero_reg__
2175 1428 04F0 brlt .L409
2176 142a F901 movw r30,r18
2177 142c EE0F lsl r30
2178 142e FF1F rol r31
2179 1430 E050 subi r30,lo8(-(PPM_in))
2180 1432 F040 sbci r31,hi8(-(PPM_in))
2181 1434 8081 ld r24,Z
2182 1436 9181 ldd r25,Z+1
2183 1438 8734 cpi r24,71
2184 143a 9105 cpc r25,__zero_reg__
2185 143c 04F0 brlt .L409
2186 143e 42E0 ldi r20,lo8(2)
2187 1440 00C0 rjmp .L412
2188 .L409:
2189 1442 41E0 ldi r20,lo8(1)
2190 .L412:
2191 1444 FB01 movw r30,r22
2192 1446 EE0F lsl r30
2193 1448 FF1F rol r31
2194 144a E050 subi r30,lo8(-(PPM_in))
2195 144c F040 sbci r31,hi8(-(PPM_in))
2196 144e 8081 ld r24,Z
2197 1450 9181 ldd r25,Z+1
2198 1452 8634 cpi r24,70
2199 1454 9105 cpc r25,__zero_reg__
2200 1456 04F4 brge .L413
2201 1458 F901 movw r30,r18
2202 145a EE0F lsl r30
2203 145c FF1F rol r31
2204 145e E050 subi r30,lo8(-(PPM_in))
2205 1460 F040 sbci r31,hi8(-(PPM_in))
2206 1462 8081 ld r24,Z
2207 1464 9181 ldd r25,Z+1
2208 1466 8734 cpi r24,71
2209 1468 9105 cpc r25,__zero_reg__
2210 146a 04F0 brlt .L413
2211 146c 43E0 ldi r20,lo8(3)
2212 .L413:
2213 146e FB01 movw r30,r22
2214 1470 EE0F lsl r30
2215 1472 FF1F rol r31
2216 1474 E050 subi r30,lo8(-(PPM_in))
2217 1476 F040 sbci r31,hi8(-(PPM_in))
2218 1478 8081 ld r24,Z
2219 147a 9181 ldd r25,Z+1
2220 147c 8A5B subi r24,lo8(-70)
2221 147e 9F4F sbci r25,hi8(-70)
2222 1480 04F4 brge .L416
2223 1482 F901 movw r30,r18
2224 1484 EE0F lsl r30
2225 1486 FF1F rol r31
2226 1488 E050 subi r30,lo8(-(PPM_in))
2227 148a F040 sbci r31,hi8(-(PPM_in))
2228 148c 8081 ld r24,Z
2229 148e 9181 ldd r25,Z+1
2230 1490 8734 cpi r24,71
2231 1492 9105 cpc r25,__zero_reg__
2232 1494 04F0 brlt .L416
2233 1496 44E0 ldi r20,lo8(4)
2234 .L416:
2235 1498 660F lsl r22
2236 149a 771F rol r23
2237 149c 6050 subi r22,lo8(-(PPM_in))
2238 149e 7040 sbci r23,hi8(-(PPM_in))
2239 14a0 FB01 movw r30,r22
2240 14a2 8081 ld r24,Z
2241 14a4 9181 ldd r25,Z+1
2242 14a6 8A5B subi r24,lo8(-70)
2243 14a8 9F4F sbci r25,hi8(-70)
2244 14aa 04F4 brge .L419
2245 14ac 220F lsl r18
2246 14ae 331F rol r19
2247 14b0 2050 subi r18,lo8(-(PPM_in))
2248 14b2 3040 sbci r19,hi8(-(PPM_in))
2249 14b4 F901 movw r30,r18
2250 14b6 8081 ld r24,Z
2251 14b8 9181 ldd r25,Z+1
2252 14ba 8634 cpi r24,70
2253 14bc 9105 cpc r25,__zero_reg__
2254 14be 04F4 brge .L419
2255 14c0 45E0 ldi r20,lo8(5)
2256 .L419:
2257 14c2 A0E0 ldi r26,lo8(EEPromArray+2)
2258 14c4 B0E0 ldi r27,hi8(EEPromArray+2)
2259 /* #APP */
2260 14c6 042E mov __tmp_reg__,r20
2261 14c8 0E94 0000 call __eeprom_write_byte_1F2021
2262 /* #NOAPP */
2263 .L405:
2264 14cc 0E94 0000 call GetActiveParamSetNumber
2265 14d0 4AE3 ldi r20,lo8(58)
2266 14d2 60E0 ldi r22,lo8(EE_Parameter)
2267 14d4 70E0 ldi r23,hi8(EE_Parameter)
2268 14d6 0E94 0000 call ReadParameterSet
2269 14da 0E94 0000 call GetActiveParamSetNumber
2270 14de 0E94 0000 call Piep
2271 14e2 8091 0000 lds r24,EE_Parameter+8
2272 14e6 80FF sbrs r24,0
2273 14e8 00C0 rjmp .L389
2274 14ea 8091 0000 lds r24,MessLuftdruck
2275 14ee 9091 0000 lds r25,(MessLuftdruck)+1
2276 14f2 875B subi r24,lo8(951)
2277 14f4 9340 sbci r25,hi8(951)
2278 14f6 00F4 brsh .L423
2279 14f8 8091 0000 lds r24,MessLuftdruck
2280 14fc 9091 0000 lds r25,(MessLuftdruck)+1
2281 1500 8E5E subi r24,lo8(750)
2282 1502 9240 sbci r25,hi8(750)
2283 1504 00F0 brlo .+2
2284 1506 00C0 rjmp .L389
2285 .L423:
2286 1508 0E94 0000 call SucheLuftruckOffset
2287 150c 00C0 rjmp .L389
2288 .L400:
2289 150e 1092 0000 sts delay_neutral.2356,__zero_reg__
2290 1512 00C0 rjmp .L389
2291 .L397:
2292 1514 4981 ldd r20,Y+1
2293 1516 5A81 ldd r21,Y+2
2294 1518 4332 cpi r20,35
2295 151a 5105 cpc r21,__zero_reg__
2296 151c 04F0 brlt .+2
2297 151e 00C0 rjmp .L389
2298 1520 8091 0000 lds r24,EE_Parameter+3
2299 1524 482F mov r20,r24
2300 1526 5527 clr r21
2301 1528 FA01 movw r30,r20
2302 152a EE0F lsl r30
2303 152c FF1F rol r31
2304 152e E050 subi r30,lo8(-(PPM_in))
2305 1530 F040 sbci r31,hi8(-(PPM_in))
2306 1532 8081 ld r24,Z
2307 1534 9181 ldd r25,Z+1
2308 1536 855B subi r24,lo8(-75)
2309 1538 9F4F sbci r25,hi8(-75)
2310 153a 04F0 brlt .+2
2311 153c 00C0 rjmp .L426
2312 153e 8091 0000 lds r24,delay_einschalten.2357
2313 1542 8F5F subi r24,lo8(-(1))
2314 1544 8093 0000 sts delay_einschalten.2357,r24
2315 1548 893C cpi r24,lo8(-55)
2316 154a 00F4 brsh .+2
2317 154c 00C0 rjmp .L428
2318 154e 88EC ldi r24,lo8(-56)
2319 1550 8093 0000 sts delay_einschalten.2357,r24
2320 1554 81E0 ldi r24,lo8(1)
2321 1556 90E0 ldi r25,hi8(1)
2322 1558 9093 0000 sts (modell_fliegt.2359)+1,r25
2323 155c 8093 0000 sts modell_fliegt.2359,r24
2324 1560 81E0 ldi r24,lo8(1)
2325 1562 8093 0000 sts MotorenEin,r24
2326 1566 1092 0000 sts sollGier.2350,__zero_reg__
2327 156a 1092 0000 sts (sollGier.2350)+1,__zero_reg__
2328 156e 1092 0000 sts (sollGier.2350)+2,__zero_reg__
2329 1572 1092 0000 sts (sollGier.2350)+3,__zero_reg__
2330 1576 1092 0000 sts Mess_Integral_Gier,__zero_reg__
2331 157a 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
2332 157e 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
2333 1582 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
2334 1586 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
2335 158a 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
2336 158e 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
2337 1592 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
2338 1596 1092 0000 sts Mess_IntegralNick,__zero_reg__
2339 159a 1092 0000 sts (Mess_IntegralNick)+1,__zero_reg__
2340 159e 1092 0000 sts (Mess_IntegralNick)+2,__zero_reg__
2341 15a2 1092 0000 sts (Mess_IntegralNick)+3,__zero_reg__
2342 15a6 1092 0000 sts Mess_IntegralRoll,__zero_reg__
2343 15aa 1092 0000 sts (Mess_IntegralRoll)+1,__zero_reg__
2344 15ae 1092 0000 sts (Mess_IntegralRoll)+2,__zero_reg__
2345 15b2 1092 0000 sts (Mess_IntegralRoll)+3,__zero_reg__
2346 15b6 8091 0000 lds r24,IntegralNick
2347 15ba 9091 0000 lds r25,(IntegralNick)+1
2348 15be A091 0000 lds r26,(IntegralNick)+2
2349 15c2 B091 0000 lds r27,(IntegralNick)+3
2350 15c6 8093 0000 sts Mess_IntegralNick2,r24
2351 15ca 9093 0000 sts (Mess_IntegralNick2)+1,r25
2352 15ce A093 0000 sts (Mess_IntegralNick2)+2,r26
2353 15d2 B093 0000 sts (Mess_IntegralNick2)+3,r27
2354 15d6 8091 0000 lds r24,IntegralRoll
2355 15da 9091 0000 lds r25,(IntegralRoll)+1
2356 15de A091 0000 lds r26,(IntegralRoll)+2
2357 15e2 B091 0000 lds r27,(IntegralRoll)+3
2358 15e6 8093 0000 sts Mess_IntegralRoll2,r24
2359 15ea 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2360 15ee A093 0000 sts (Mess_IntegralRoll2)+2,r26
2361 15f2 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2362 15f6 1092 0000 sts SummeNick.2348,__zero_reg__
2363 15fa 1092 0000 sts (SummeNick.2348)+1,__zero_reg__
2364 15fe 1092 0000 sts (SummeNick.2348)+2,__zero_reg__
2365 1602 1092 0000 sts (SummeNick.2348)+3,__zero_reg__
2366 1606 1092 0000 sts SummeRoll.2349,__zero_reg__
2367 160a 1092 0000 sts (SummeRoll.2349)+1,__zero_reg__
2368 160e 1092 0000 sts (SummeRoll.2349)+2,__zero_reg__
2369 1612 1092 0000 sts (SummeRoll.2349)+3,__zero_reg__
2370 1616 00C0 rjmp .L428
2371 .L426:
2372 1618 1092 0000 sts delay_einschalten.2357,__zero_reg__
2373 .L428:
2374 161c 440F lsl r20
2375 161e 551F rol r21
2376 1620 4050 subi r20,lo8(-(PPM_in))
2377 1622 5040 sbci r21,hi8(-(PPM_in))
2378 1624 FA01 movw r30,r20
2379 1626 8081 ld r24,Z
2380 1628 9181 ldd r25,Z+1
2381 162a 8C34 cpi r24,76
2382 162c 9105 cpc r25,__zero_reg__
2383 162e 04F0 brlt .L430
2384 1630 8091 0000 lds r24,delay_ausschalten.2358
2385 1634 8F5F subi r24,lo8(-(1))
2386 1636 8093 0000 sts delay_ausschalten.2358,r24
2387 163a 893C cpi r24,lo8(-55)
2388 163c 00F0 brlo .L389
2389 163e 1092 0000 sts MotorenEin,__zero_reg__
2390 1642 88EC ldi r24,lo8(-56)
2391 1644 8093 0000 sts delay_ausschalten.2358,r24
2392 1648 1092 0000 sts (modell_fliegt.2359)+1,__zero_reg__
2393 164c 1092 0000 sts modell_fliegt.2359,__zero_reg__
2394 1650 00C0 rjmp .L389
2395 .L430:
2396 1652 1092 0000 sts delay_ausschalten.2358,__zero_reg__
2397 .L389:
2398 1656 8091 0000 lds r24,NewPpmData
2399 165a 8150 subi r24,lo8(-(-1))
2400 165c 8093 0000 sts NewPpmData,r24
2401 1660 8091 0000 lds r24,NewPpmData
2402 1664 8F3F cpi r24,lo8(-1)
2403 1666 01F0 breq .L433
2404 1668 8091 0000 lds r24,Notlandung
2405 166c 8823 tst r24
2406 166e 01F4 brne .+2
2407 1670 00C0 rjmp .L435
2408 .L433:
2409 1672 0E94 0000 call ParameterZuordnung
2410 1676 E091 0000 lds r30,EE_Parameter
2411 167a FF27 clr r31
2412 167c EE0F lsl r30
2413 167e FF1F rol r31
2414 1680 DF01 movw r26,r30
2415 1682 A050 subi r26,lo8(-(PPM_in))
2416 1684 B040 sbci r27,hi8(-(PPM_in))
2417 1686 8D91 ld r24,X+
2418 1688 9C91 ld r25,X
2419 168a 6091 0000 lds r22,EE_Parameter+15
2420 168e 7727 clr r23
2421 1690 E050 subi r30,lo8(-(PPM_diff))
2422 1692 F040 sbci r31,hi8(-(PPM_diff))
2423 1694 2081 ld r18,Z
2424 1696 3181 ldd r19,Z+1
2425 1698 4091 0000 lds r20,EE_Parameter+16
2426 169c 5527 clr r21
2427 169e FC01 movw r30,r24
2428 16a0 E69F mul r30,r22
2429 16a2 C001 movw r24,r0
2430 16a4 E79F mul r30,r23
2431 16a6 900D add r25,r0
2432 16a8 F69F mul r31,r22
2433 16aa 900D add r25,r0
2434 16ac 1124 clr r1
2435 16ae F901 movw r30,r18
2436 16b0 E49F mul r30,r20
2437 16b2 9001 movw r18,r0
2438 16b4 E59F mul r30,r21
2439 16b6 300D add r19,r0
2440 16b8 F49F mul r31,r20
2441 16ba 300D add r19,r0
2442 16bc 1124 clr r1
2443 16be 820F add r24,r18
2444 16c0 931F adc r25,r19
2445 16c2 9093 0000 sts (StickNick)+1,r25
2446 16c6 8093 0000 sts StickNick,r24
2447 16ca E091 0000 lds r30,EE_Parameter+1
2448 16ce FF27 clr r31
2449 16d0 EE0F lsl r30
2450 16d2 FF1F rol r31
2451 16d4 DF01 movw r26,r30
2452 16d6 A050 subi r26,lo8(-(PPM_in))
2453 16d8 B040 sbci r27,hi8(-(PPM_in))
2454 16da 8D91 ld r24,X+
2455 16dc 9C91 ld r25,X
2456 16de E050 subi r30,lo8(-(PPM_diff))
2457 16e0 F040 sbci r31,hi8(-(PPM_diff))
2458 16e2 2081 ld r18,Z
2459 16e4 3181 ldd r19,Z+1
2460 16e6 FC01 movw r30,r24
2461 16e8 E69F mul r30,r22
2462 16ea C001 movw r24,r0
2463 16ec E79F mul r30,r23
2464 16ee 900D add r25,r0
2465 16f0 F69F mul r31,r22
2466 16f2 900D add r25,r0
2467 16f4 1124 clr r1
2468 16f6 B901 movw r22,r18
2469 16f8 649F mul r22,r20
2470 16fa 9001 movw r18,r0
2471 16fc 659F mul r22,r21
2472 16fe 300D add r19,r0
2473 1700 749F mul r23,r20
2474 1702 300D add r19,r0
2475 1704 1124 clr r1
2476 1706 820F add r24,r18
2477 1708 931F adc r25,r19
2478 170a 9093 0000 sts (StickRoll)+1,r25
2479 170e 8093 0000 sts StickRoll,r24
2480 1712 E091 0000 lds r30,EE_Parameter+3
2481 1716 FF27 clr r31
2482 1718 EE0F lsl r30
2483 171a FF1F rol r31
2484 171c E050 subi r30,lo8(-(PPM_in))
2485 171e F040 sbci r31,hi8(-(PPM_in))
2486 1720 8081 ld r24,Z
2487 1722 9181 ldd r25,Z+1
2488 1724 9095 com r25
2489 1726 8195 neg r24
2490 1728 9F4F sbci r25,lo8(-1)
2491 172a 9093 0000 sts (StickGier)+1,r25
2492 172e 8093 0000 sts StickGier,r24
2493 1732 1091 0000 lds r17,Parameter_Gyro_P
2494 1736 612F mov r22,r17
2495 1738 7727 clr r23
2496 173a 67FD sbrc r22,7
2497 173c 7095 com r23
2498 173e 872F mov r24,r23
2499 1740 972F mov r25,r23
2500 1742 0E94 0000 call __floatsisf
2501 1746 17FF sbrs r17,7
2502 1748 00C0 rjmp .L436
2503 174a 20E0 ldi r18,lo8(0x43800000)
2504 174c 30E0 ldi r19,hi8(0x43800000)
2505 174e 40E8 ldi r20,hlo8(0x43800000)
2506 1750 53E4 ldi r21,hhi8(0x43800000)
2507 1752 0E94 0000 call __addsf3
2508 .L436:
2509 1756 20E0 ldi r18,lo8(0x41200000)
2510 1758 30E0 ldi r19,hi8(0x41200000)
2511 175a 40E2 ldi r20,hlo8(0x41200000)
2512 175c 51E4 ldi r21,hhi8(0x41200000)
2513 175e 0E94 0000 call __addsf3
2514 1762 20E0 ldi r18,lo8(0x3b800000)
2515 1764 30E0 ldi r19,hi8(0x3b800000)
2516 1766 40E8 ldi r20,hlo8(0x3b800000)
2517 1768 5BE3 ldi r21,hhi8(0x3b800000)
2518 176a 0E94 0000 call __mulsf3
2519 176e 5B01 movw r10,r22
2520 1770 6C01 movw r12,r24
2521 1772 6093 0000 sts GyroFaktor,r22
2522 1776 7093 0000 sts (GyroFaktor)+1,r23
2523 177a 8093 0000 sts (GyroFaktor)+2,r24
2524 177e 9093 0000 sts (GyroFaktor)+3,r25
2525 1782 1091 0000 lds r17,Parameter_Gyro_I
2526 1786 612F mov r22,r17
2527 1788 7727 clr r23
2528 178a 67FD sbrc r22,7
2529 178c 7095 com r23
2530 178e 872F mov r24,r23
2531 1790 972F mov r25,r23
2532 1792 0E94 0000 call __floatsisf
2533 1796 17FF sbrs r17,7
2534 1798 00C0 rjmp .L437
2535 179a 20E0 ldi r18,lo8(0x43800000)
2536 179c 30E0 ldi r19,hi8(0x43800000)
2537 179e 40E8 ldi r20,hlo8(0x43800000)
2538 17a0 53E4 ldi r21,hhi8(0x43800000)
2539 17a2 0E94 0000 call __addsf3
2540 .L437:
2541 17a6 20E0 ldi r18,lo8(0x472be000)
2542 17a8 30EE ldi r19,hi8(0x472be000)
2543 17aa 4BE2 ldi r20,hlo8(0x472be000)
2544 17ac 57E4 ldi r21,hhi8(0x472be000)
2545 17ae 0E94 0000 call __divsf3
2546 17b2 6093 0000 sts IntegralFaktor,r22
2547 17b6 7093 0000 sts (IntegralFaktor)+1,r23
2548 17ba 8093 0000 sts (IntegralFaktor)+2,r24
2549 17be 9093 0000 sts (IntegralFaktor)+3,r25
2550 17c2 8091 0000 lds r24,EE_Parameter+8
2551 17c6 82FF sbrs r24,2
2552 17c8 00C0 rjmp .L438
2553 17ca 80E0 ldi r24,lo8(0x0)
2554 17cc 90E0 ldi r25,hi8(0x0)
2555 17ce A0E0 ldi r26,hlo8(0x0)
2556 17d0 B0E0 ldi r27,hhi8(0x0)
2557 17d2 8093 0000 sts IntegralFaktor,r24
2558 17d6 9093 0000 sts (IntegralFaktor)+1,r25
2559 17da A093 0000 sts (IntegralFaktor)+2,r26
2560 17de B093 0000 sts (IntegralFaktor)+3,r27
2561 .L438:
2562 17e2 20E0 ldi r18,lo8(0x0)
2563 17e4 30E0 ldi r19,hi8(0x0)
2564 17e6 40E0 ldi r20,hlo8(0x0)
2565 17e8 50E0 ldi r21,hhi8(0x0)
2566 17ea C601 movw r24,r12
2567 17ec B501 movw r22,r10
2568 17ee 0E94 0000 call __ltsf2
2569 17f2 8823 tst r24
2570 17f4 04F4 brge .L440
2571 17f6 80E0 ldi r24,lo8(0x0)
2572 17f8 90E0 ldi r25,hi8(0x0)
2573 17fa A0E0 ldi r26,hlo8(0x0)
2574 17fc B0E0 ldi r27,hhi8(0x0)
2575 17fe 8093 0000 sts GyroFaktor,r24
2576 1802 9093 0000 sts (GyroFaktor)+1,r25
2577 1806 A093 0000 sts (GyroFaktor)+2,r26
2578 180a B093 0000 sts (GyroFaktor)+3,r27
2579 .L440:
2580 180e 20E0 ldi r18,lo8(0x0)
2581 1810 30E0 ldi r19,hi8(0x0)
2582 1812 40E0 ldi r20,hlo8(0x0)
2583 1814 50E0 ldi r21,hhi8(0x0)
2584 1816 6091 0000 lds r22,IntegralFaktor
2585 181a 7091 0000 lds r23,(IntegralFaktor)+1
2586 181e 8091 0000 lds r24,(IntegralFaktor)+2
2587 1822 9091 0000 lds r25,(IntegralFaktor)+3
2588 1826 0E94 0000 call __ltsf2
2589 182a 8823 tst r24
2590 182c 04F4 brge .L443
2591 182e 80E0 ldi r24,lo8(0x0)
2592 1830 90E0 ldi r25,hi8(0x0)
2593 1832 A0E0 ldi r26,hlo8(0x0)
2594 1834 B0E0 ldi r27,hhi8(0x0)
2595 1836 8093 0000 sts IntegralFaktor,r24
2596 183a 9093 0000 sts (IntegralFaktor)+1,r25
2597 183e A093 0000 sts (IntegralFaktor)+2,r26
2598 1842 B093 0000 sts (IntegralFaktor)+3,r27
2599 .L443:
2600 1846 8091 0000 lds r24,Notlandung
2601 184a 8823 tst r24
2602 184c 01F0 breq .L435
2603 184e 1092 0000 sts (StickGier)+1,__zero_reg__
2604 1852 1092 0000 sts StickGier,__zero_reg__
2605 1856 1092 0000 sts (StickNick)+1,__zero_reg__
2606 185a 1092 0000 sts StickNick,__zero_reg__
2607 185e 1092 0000 sts (StickRoll)+1,__zero_reg__
2608 1862 1092 0000 sts StickRoll,__zero_reg__
2609 1866 8DEC ldi r24,lo8(0x3dcccccd)
2610 1868 9CEC ldi r25,hi8(0x3dcccccd)
2611 186a ACEC ldi r26,hlo8(0x3dcccccd)
2612 186c BDE3 ldi r27,hhi8(0x3dcccccd)
2613 186e 8093 0000 sts GyroFaktor,r24
2614 1872 9093 0000 sts (GyroFaktor)+1,r25
2615 1876 A093 0000 sts (GyroFaktor)+2,r26
2616 187a B093 0000 sts (GyroFaktor)+3,r27
2617 187e 8AE0 ldi r24,lo8(0x3ba3d70a)
2618 1880 97ED ldi r25,hi8(0x3ba3d70a)
2619 1882 A3EA ldi r26,hlo8(0x3ba3d70a)
2620 1884 BBE3 ldi r27,hhi8(0x3ba3d70a)
2621 1886 8093 0000 sts IntegralFaktor,r24
2622 188a 9093 0000 sts (IntegralFaktor)+1,r25
2623 188e A093 0000 sts (IntegralFaktor)+2,r26
2624 1892 B093 0000 sts (IntegralFaktor)+3,r27
2625 .L435:
2626 1896 8091 0000 lds r24,ZaehlMessungen
2627 189a 9091 0000 lds r25,(ZaehlMessungen)+1
2628 189e 8D54 subi r24,lo8(333)
2629 18a0 9140 sbci r25,hi8(333)
2630 18a2 00F4 brsh .+2
2631 18a4 00C0 rjmp .L447
2632 18a6 2091 0000 lds r18,IntegralNick2
2633 18aa 3091 0000 lds r19,(IntegralNick2)+1
2634 18ae 4091 0000 lds r20,(IntegralNick2)+2
2635 18b2 5091 0000 lds r21,(IntegralNick2)+3
2636 18b6 8091 0000 lds r24,IntegralNick
2637 18ba 9091 0000 lds r25,(IntegralNick)+1
2638 18be A091 0000 lds r26,(IntegralNick)+2
2639 18c2 B091 0000 lds r27,(IntegralNick)+3
2640 18c6 B901 movw r22,r18
2641 18c8 681B sub r22,r24
2642 18ca 790B sbc r23,r25
2643 18cc 7093 0000 sts (IntegralFehlerNick.2353)+1,r23
2644 18d0 6093 0000 sts IntegralFehlerNick.2353,r22
2645 18d4 2091 0000 lds r18,IntegralRoll2
2646 18d8 3091 0000 lds r19,(IntegralRoll2)+1
2647 18dc 4091 0000 lds r20,(IntegralRoll2)+2
2648 18e0 5091 0000 lds r21,(IntegralRoll2)+3
2649 18e4 8091 0000 lds r24,IntegralRoll
2650 18e8 9091 0000 lds r25,(IntegralRoll)+1
2651 18ec A091 0000 lds r26,(IntegralRoll)+2
2652 18f0 B091 0000 lds r27,(IntegralRoll)+3
2653 18f4 281B sub r18,r24
2654 18f6 390B sbc r19,r25
2655 18f8 3093 0000 sts (IntegralFehlerRoll.2354)+1,r19
2656 18fc 2093 0000 sts IntegralFehlerRoll.2354,r18
2657 1900 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
2658 1904 1092 0000 sts ZaehlMessungen,__zero_reg__
2659 1908 673A cpi r22,167
2660 190a 7105 cpc r23,__zero_reg__
2661 190c 04F0 brlt .L449
2662 190e 8091 0000 lds r24,AdNeutralNick
2663 1912 9091 0000 lds r25,(AdNeutralNick)+1
2664 1916 0196 adiw r24,1
2665 1918 00C0 rjmp .L576
2666 .L449:
2667 191a 6A55 subi r22,lo8(-166)
2668 191c 7F4F sbci r23,hi8(-166)
2669 191e 04F4 brge .L451
2670 1920 8091 0000 lds r24,AdNeutralNick
2671 1924 9091 0000 lds r25,(AdNeutralNick)+1
2672 1928 0197 sbiw r24,1
2673 .L576:
2674 192a 9093 0000 sts (AdNeutralNick)+1,r25
2675 192e 8093 0000 sts AdNeutralNick,r24
2676 .L451:
2677 1932 273A cpi r18,167
2678 1934 3105 cpc r19,__zero_reg__
2679 1936 04F0 brlt .L453
2680 1938 8091 0000 lds r24,AdNeutralRoll
2681 193c 9091 0000 lds r25,(AdNeutralRoll)+1
2682 1940 0196 adiw r24,1
2683 1942 00C0 rjmp .L577
2684 .L453:
2685 1944 2A55 subi r18,lo8(-166)
2686 1946 3F4F sbci r19,hi8(-166)
2687 1948 04F4 brge .L455
2688 194a 8091 0000 lds r24,AdNeutralRoll
2689 194e 9091 0000 lds r25,(AdNeutralRoll)+1
2690 1952 0197 sbiw r24,1
2691 .L577:
2692 1954 9093 0000 sts (AdNeutralRoll)+1,r25
2693 1958 8093 0000 sts AdNeutralRoll,r24
2694 .L455:
2695 195c 8091 0000 lds r24,Mess_Integral_Gier2
2696 1960 9091 0000 lds r25,(Mess_Integral_Gier2)+1
2697 1964 A091 0000 lds r26,(Mess_Integral_Gier2)+2
2698 1968 B091 0000 lds r27,(Mess_Integral_Gier2)+3
2699 196c 873A cpi r24,lo8(167)
2700 196e 9105 cpc r25,__zero_reg__
2701 1970 A105 cpc r26,__zero_reg__
2702 1972 B105 cpc r27,__zero_reg__
2703 1974 04F0 brlt .L457
2704 1976 8091 0000 lds r24,AdNeutralGier
2705 197a 9091 0000 lds r25,(AdNeutralGier)+1
2706 197e 0197 sbiw r24,1
2707 1980 9093 0000 sts (AdNeutralGier)+1,r25
2708 1984 8093 0000 sts AdNeutralGier,r24
2709 .L457:
2710 1988 8091 0000 lds r24,Mess_Integral_Gier2
2711 198c 9091 0000 lds r25,(Mess_Integral_Gier2)+1
2712 1990 A091 0000 lds r26,(Mess_Integral_Gier2)+2
2713 1994 B091 0000 lds r27,(Mess_Integral_Gier2)+3
2714 1998 8A55 subi r24,lo8(-166)
2715 199a 9F4F sbci r25,hi8(-166)
2716 199c AF4F sbci r26,hlo8(-166)
2717 199e BF4F sbci r27,hhi8(-166)
2718 19a0 04F4 brge .L459
2719 19a2 8091 0000 lds r24,AdNeutralGier
2720 19a6 9091 0000 lds r25,(AdNeutralGier)+1
2721 19aa 0196 adiw r24,1
2722 19ac 9093 0000 sts (AdNeutralGier)+1,r25
2723 19b0 8093 0000 sts AdNeutralGier,r24
2724 .L459:
2725 19b4 1092 7A00 sts 122,__zero_reg__
2726 19b8 8091 0000 lds r24,IntegralNick
2727 19bc 9091 0000 lds r25,(IntegralNick)+1
2728 19c0 A091 0000 lds r26,(IntegralNick)+2
2729 19c4 B091 0000 lds r27,(IntegralNick)+3
2730 19c8 8093 0000 sts Mess_IntegralNick2,r24
2731 19cc 9093 0000 sts (Mess_IntegralNick2)+1,r25
2732 19d0 A093 0000 sts (Mess_IntegralNick2)+2,r26
2733 19d4 B093 0000 sts (Mess_IntegralNick2)+3,r27
2734 19d8 8091 0000 lds r24,IntegralRoll
2735 19dc 9091 0000 lds r25,(IntegralRoll)+1
2736 19e0 A091 0000 lds r26,(IntegralRoll)+2
2737 19e4 B091 0000 lds r27,(IntegralRoll)+3
2738 19e8 8093 0000 sts Mess_IntegralRoll2,r24
2739 19ec 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2740 19f0 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2741 19f4 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2742 19f8 8091 0000 lds r24,Integral_Gier
2743 19fc 9091 0000 lds r25,(Integral_Gier)+1
2744 1a00 A091 0000 lds r26,(Integral_Gier)+2
2745 1a04 B091 0000 lds r27,(Integral_Gier)+3
2746 1a08 8093 0000 sts Mess_Integral_Gier2,r24
2747 1a0c 9093 0000 sts (Mess_Integral_Gier2)+1,r25
2748 1a10 A093 0000 sts (Mess_Integral_Gier2)+2,r26
2749 1a14 B093 0000 sts (Mess_Integral_Gier2)+3,r27
2750 1a18 8FEE ldi r24,lo8(-17)
2751 1a1a 8093 7A00 sts 122,r24
2752 .L447:
2753 1a1e 6091 0000 lds r22,IntegralNick
2754 1a22 7091 0000 lds r23,(IntegralNick)+1
2755 1a26 8091 0000 lds r24,(IntegralNick)+2
2756 1a2a 9091 0000 lds r25,(IntegralNick)+3
2757 1a2e A090 0000 lds r10,EE_Parameter+20
2758 1a32 BB24 clr r11
2759 1a34 CC24 clr r12
2760 1a36 DD24 clr r13
2761 1a38 E090 0000 lds r14,Mittelwert_AccNick
2762 1a3c F090 0000 lds r15,(Mittelwert_AccNick)+1
2763 1a40 A601 movw r20,r12
2764 1a42 9501 movw r18,r10
2765 1a44 0E94 0000 call __divmodsi4
2766 1a48 0027 clr r16
2767 1a4a F7FC sbrc r15,7
2768 1a4c 0095 com r16
2769 1a4e 102F mov r17,r16
2770 1a50 2E19 sub r18,r14
2771 1a52 3F09 sbc r19,r15
2772 1a54 400B sbc r20,r16
2773 1a56 510B sbc r21,r17
2774 1a58 CA01 movw r24,r20
2775 1a5a B901 movw r22,r18
2776 1a5c 20E1 ldi r18,lo8(16)
2777 1a5e 30E0 ldi r19,hi8(16)
2778 1a60 40E0 ldi r20,hlo8(16)
2779 1a62 50E0 ldi r21,hhi8(16)
2780 1a64 0E94 0000 call __divmodsi4
2781 1a68 3901 movw r6,r18
2782 1a6a 4A01 movw r8,r20
2783 1a6c 2093 0000 sts tmp_long.2351,r18
2784 1a70 3093 0000 sts (tmp_long.2351)+1,r19
2785 1a74 4093 0000 sts (tmp_long.2351)+2,r20
2786 1a78 5093 0000 sts (tmp_long.2351)+3,r21
2787 1a7c 6091 0000 lds r22,IntegralRoll
2788 1a80 7091 0000 lds r23,(IntegralRoll)+1
2789 1a84 8091 0000 lds r24,(IntegralRoll)+2
2790 1a88 9091 0000 lds r25,(IntegralRoll)+3
2791 1a8c E090 0000 lds r14,Mittelwert_AccRoll
2792 1a90 F090 0000 lds r15,(Mittelwert_AccRoll)+1
2793 1a94 A601 movw r20,r12
2794 1a96 9501 movw r18,r10
2795 1a98 0E94 0000 call __divmodsi4
2796 1a9c 0027 clr r16
2797 1a9e F7FC sbrc r15,7
2798 1aa0 0095 com r16
2799 1aa2 102F mov r17,r16
2800 1aa4 2E19 sub r18,r14
2801 1aa6 3F09 sbc r19,r15
2802 1aa8 400B sbc r20,r16
2803 1aaa 510B sbc r21,r17
2804 1aac CA01 movw r24,r20
2805 1aae B901 movw r22,r18
2806 1ab0 20E1 ldi r18,lo8(16)
2807 1ab2 30E0 ldi r19,hi8(16)
2808 1ab4 40E0 ldi r20,hlo8(16)
2809 1ab6 50E0 ldi r21,hhi8(16)
2810 1ab8 0E94 0000 call __divmodsi4
2811 1abc 2093 0000 sts tmp_long2.2352,r18
2812 1ac0 3093 0000 sts (tmp_long2.2352)+1,r19
2813 1ac4 4093 0000 sts (tmp_long2.2352)+2,r20
2814 1ac8 5093 0000 sts (tmp_long2.2352)+3,r21
2815 1acc F5EF ldi r31,lo8(501)
2816 1ace 6F16 cp r6,r31
2817 1ad0 F1E0 ldi r31,hi8(501)
2818 1ad2 7F06 cpc r7,r31
2819 1ad4 F0E0 ldi r31,hlo8(501)
2820 1ad6 8F06 cpc r8,r31
2821 1ad8 F0E0 ldi r31,hhi8(501)
2822 1ada 9F06 cpc r9,r31
2823 1adc 04F0 brlt .L461
2824 1ade 84EF ldi r24,lo8(500)
2825 1ae0 91E0 ldi r25,hi8(500)
2826 1ae2 A0E0 ldi r26,hlo8(500)
2827 1ae4 B0E0 ldi r27,hhi8(500)
2828 1ae6 00C0 rjmp .L578
2829 .L461:
2830 1ae8 6CE0 ldi r22,lo8(-500)
2831 1aea 6616 cp r6,r22
2832 1aec 6EEF ldi r22,hi8(-500)
2833 1aee 7606 cpc r7,r22
2834 1af0 6FEF ldi r22,hlo8(-500)
2835 1af2 8606 cpc r8,r22
2836 1af4 6FEF ldi r22,hhi8(-500)
2837 1af6 9606 cpc r9,r22
2838 1af8 04F4 brge .L463
2839 1afa 8CE0 ldi r24,lo8(-500)
2840 1afc 9EEF ldi r25,hi8(-500)
2841 1afe AFEF ldi r26,hlo8(-500)
2842 1b00 BFEF ldi r27,hhi8(-500)
2843 .L578:
2844 1b02 8093 0000 sts tmp_long.2351,r24
2845 1b06 9093 0000 sts (tmp_long.2351)+1,r25
2846 1b0a A093 0000 sts (tmp_long.2351)+2,r26
2847 1b0e B093 0000 sts (tmp_long.2351)+3,r27
2848 .L463:
2849 1b12 253F cpi r18,lo8(501)
2850 1b14 71E0 ldi r23,hi8(501)
2851 1b16 3707 cpc r19,r23
2852 1b18 70E0 ldi r23,hlo8(501)
2853 1b1a 4707 cpc r20,r23
2854 1b1c 70E0 ldi r23,hhi8(501)
2855 1b1e 5707 cpc r21,r23
2856 1b20 04F0 brlt .L465
2857 1b22 84EF ldi r24,lo8(500)
2858 1b24 91E0 ldi r25,hi8(500)
2859 1b26 A0E0 ldi r26,hlo8(500)
2860 1b28 B0E0 ldi r27,hhi8(500)
2861 1b2a 00C0 rjmp .L579
2862 .L465:
2863 1b2c 2C50 subi r18,lo8(-500)
2864 1b2e 3E4F sbci r19,hi8(-500)
2865 1b30 4F4F sbci r20,hlo8(-500)
2866 1b32 5F4F sbci r21,hhi8(-500)
2867 1b34 04F4 brge .L467
2868 1b36 8CE0 ldi r24,lo8(-500)
2869 1b38 9EEF ldi r25,hi8(-500)
2870 1b3a AFEF ldi r26,hlo8(-500)
2871 1b3c BFEF ldi r27,hhi8(-500)
2872 .L579:
2873 1b3e 8093 0000 sts tmp_long2.2352,r24
2874 1b42 9093 0000 sts (tmp_long2.2352)+1,r25
2875 1b46 A093 0000 sts (tmp_long2.2352)+2,r26
2876 1b4a B093 0000 sts (tmp_long2.2352)+3,r27
2877 .L467:
2878 1b4e 1092 7A00 sts 122,__zero_reg__
2879 1b52 8091 0000 lds r24,Mess_IntegralNick
2880 1b56 9091 0000 lds r25,(Mess_IntegralNick)+1
2881 1b5a A091 0000 lds r26,(Mess_IntegralNick)+2
2882 1b5e B091 0000 lds r27,(Mess_IntegralNick)+3
2883 1b62 2091 0000 lds r18,tmp_long.2351
2884 1b66 3091 0000 lds r19,(tmp_long.2351)+1
2885 1b6a 4091 0000 lds r20,(tmp_long.2351)+2
2886 1b6e 5091 0000 lds r21,(tmp_long.2351)+3
2887 1b72 821B sub r24,r18
2888 1b74 930B sbc r25,r19
2889 1b76 A40B sbc r26,r20
2890 1b78 B50B sbc r27,r21
2891 1b7a 8093 0000 sts Mess_IntegralNick,r24
2892 1b7e 9093 0000 sts (Mess_IntegralNick)+1,r25
2893 1b82 A093 0000 sts (Mess_IntegralNick)+2,r26
2894 1b86 B093 0000 sts (Mess_IntegralNick)+3,r27
2895 1b8a 8091 0000 lds r24,Mess_IntegralRoll
2896 1b8e 9091 0000 lds r25,(Mess_IntegralRoll)+1
2897 1b92 A091 0000 lds r26,(Mess_IntegralRoll)+2
2898 1b96 B091 0000 lds r27,(Mess_IntegralRoll)+3
2899 1b9a 2091 0000 lds r18,tmp_long2.2352
2900 1b9e 3091 0000 lds r19,(tmp_long2.2352)+1
2901 1ba2 4091 0000 lds r20,(tmp_long2.2352)+2
2902 1ba6 5091 0000 lds r21,(tmp_long2.2352)+3
2903 1baa 821B sub r24,r18
2904 1bac 930B sbc r25,r19
2905 1bae A40B sbc r26,r20
2906 1bb0 B50B sbc r27,r21
2907 1bb2 8093 0000 sts Mess_IntegralRoll,r24
2908 1bb6 9093 0000 sts (Mess_IntegralRoll)+1,r25
2909 1bba A093 0000 sts (Mess_IntegralRoll)+2,r26
2910 1bbe B093 0000 sts (Mess_IntegralRoll)+3,r27
2911 1bc2 8091 0000 lds r24,StickGier
2912 1bc6 9091 0000 lds r25,(StickGier)+1
2913 1bca 5C01 movw r10,r24
2914 1bcc CC24 clr r12
2915 1bce B7FC sbrc r11,7
2916 1bd0 C094 com r12
2917 1bd2 DC2C mov r13,r12
2918 1bd4 A092 0000 sts sollGier.2350,r10
2919 1bd8 B092 0000 sts (sollGier.2350)+1,r11
2920 1bdc C092 0000 sts (sollGier.2350)+2,r12
2921 1be0 D092 0000 sts (sollGier.2350)+3,r13
2922 1be4 97FF sbrs r25,7
2923 1be6 00C0 rjmp .L470
2924 1be8 9095 com r25
2925 1bea 8195 neg r24
2926 1bec 9F4F sbci r25,lo8(-1)
2927 .L470:
2928 1bee 8497 sbiw r24,36
2929 1bf0 04F0 brlt .L469
2930 1bf2 8091 0000 lds r24,EE_Parameter+8
2931 1bf6 84FD sbrc r24,4
2932 1bf8 00C0 rjmp .L469
2933 1bfa 81E0 ldi r24,lo8(1)
2934 1bfc 8093 0000 sts NeueKompassRichtungMerken.2362,r24
2935 .L469:
2936 1c00 6090 0000 lds r6,Mess_Integral_Gier
2937 1c04 7090 0000 lds r7,(Mess_Integral_Gier)+1
2938 1c08 8090 0000 lds r8,(Mess_Integral_Gier)+2
2939 1c0c 9090 0000 lds r9,(Mess_Integral_Gier)+3
2940 1c10 C501 movw r24,r10
2941 1c12 B7FE sbrs r11,7
2942 1c14 00C0 rjmp .L473
2943 1c16 9095 com r25
2944 1c18 8195 neg r24
2945 1c1a 9F4F sbci r25,lo8(-1)
2946 .L473:
2947 1c1c 7C01 movw r14,r24
2948 1c1e 0027 clr r16
2949 1c20 F7FC sbrc r15,7
2950 1c22 0095 com r16
2951 1c24 102F mov r17,r16
2952 1c26 2091 0000 lds r18,EE_Parameter+17
2953 1c2a 3327 clr r19
2954 1c2c 4427 clr r20
2955 1c2e 5527 clr r21
2956 1c30 C601 movw r24,r12
2957 1c32 B501 movw r22,r10
2958 1c34 0E94 0000 call __mulsi3
2959 1c38 9B01 movw r18,r22
2960 1c3a AC01 movw r20,r24
2961 1c3c C801 movw r24,r16
2962 1c3e B701 movw r22,r14
2963 1c40 0E94 0000 call __mulsi3
2964 1c44 20E0 ldi r18,lo8(256)
2965 1c46 31E0 ldi r19,hi8(256)
2966 1c48 40E0 ldi r20,hlo8(256)
2967 1c4a 50E0 ldi r21,hhi8(256)
2968 1c4c 0E94 0000 call __divmodsi4
2969 1c50 4427 clr r20
2970 1c52 37FD sbrc r19,7
2971 1c54 4095 com r20
2972 1c56 542F mov r21,r20
2973 1c58 621A sub r6,r18
2974 1c5a 730A sbc r7,r19
2975 1c5c 840A sbc r8,r20
2976 1c5e 950A sbc r9,r21
2977 1c60 6092 0000 sts Mess_Integral_Gier,r6
2978 1c64 7092 0000 sts (Mess_Integral_Gier)+1,r7
2979 1c68 8092 0000 sts (Mess_Integral_Gier)+2,r8
2980 1c6c 9092 0000 sts (Mess_Integral_Gier)+3,r9
2981 1c70 8091 0000 lds r24,Mess_Integral_Gier
2982 1c74 9091 0000 lds r25,(Mess_Integral_Gier)+1
2983 1c78 A091 0000 lds r26,(Mess_Integral_Gier)+2
2984 1c7c B091 0000 lds r27,(Mess_Integral_Gier)+3
2985 1c80 8153 subi r24,lo8(30001)
2986 1c82 9547 sbci r25,hi8(30001)
2987 1c84 A040 sbci r26,hlo8(30001)
2988 1c86 B040 sbci r27,hhi8(30001)
2989 1c88 04F0 brlt .L474
2990 1c8a 80E3 ldi r24,lo8(30000)
2991 1c8c 95E7 ldi r25,hi8(30000)
2992 1c8e A0E0 ldi r26,hlo8(30000)
2993 1c90 B0E0 ldi r27,hhi8(30000)
2994 1c92 8093 0000 sts Mess_Integral_Gier,r24
2995 1c96 9093 0000 sts (Mess_Integral_Gier)+1,r25
2996 1c9a A093 0000 sts (Mess_Integral_Gier)+2,r26
2997 1c9e B093 0000 sts (Mess_Integral_Gier)+3,r27
2998 .L474:
2999 1ca2 8091 0000 lds r24,Mess_Integral_Gier
3000 1ca6 9091 0000 lds r25,(Mess_Integral_Gier)+1
3001 1caa A091 0000 lds r26,(Mess_Integral_Gier)+2
3002 1cae B091 0000 lds r27,(Mess_Integral_Gier)+3
3003 1cb2 805D subi r24,lo8(-30000)
3004 1cb4 9A48 sbci r25,hi8(-30000)
3005 1cb6 AF4F sbci r26,hlo8(-30000)
3006 1cb8 BF4F sbci r27,hhi8(-30000)
3007 1cba 04F4 brge .L476
3008 1cbc 80ED ldi r24,lo8(-30000)
3009 1cbe 9AE8 ldi r25,hi8(-30000)
3010 1cc0 AFEF ldi r26,hlo8(-30000)
3011 1cc2 BFEF ldi r27,hhi8(-30000)
3012 1cc4 8093 0000 sts Mess_Integral_Gier,r24
3013 1cc8 9093 0000 sts (Mess_Integral_Gier)+1,r25
3014 1ccc A093 0000 sts (Mess_Integral_Gier)+2,r26
3015 1cd0 B093 0000 sts (Mess_Integral_Gier)+3,r27
3016 .L476:
3017 1cd4 8FEE ldi r24,lo8(-17)
3018 1cd6 8093 7A00 sts 122,r24
3019 1cda 8091 0000 lds r24,KompassValue
3020 1cde 9091 0000 lds r25,(KompassValue)+1
3021 1ce2 892B or r24,r25
3022 1ce4 01F4 brne .+2
3023 1ce6 00C0 rjmp .L478
3024 1ce8 8091 0000 lds r24,EE_Parameter+8
3025 1cec 83FF sbrs r24,3
3026 1cee 00C0 rjmp .L478
3027 1cf0 6091 0000 lds r22,IntegralNick
3028 1cf4 7091 0000 lds r23,(IntegralNick)+1
3029 1cf8 8091 0000 lds r24,(IntegralNick)+2
3030 1cfc 9091 0000 lds r25,(IntegralNick)+3
3031 1d00 20E0 ldi r18,lo8(512)
3032 1d02 32E0 ldi r19,hi8(512)
3033 1d04 40E0 ldi r20,hlo8(512)
3034 1d06 50E0 ldi r21,hhi8(512)
3035 1d08 0E94 0000 call __divmodsi4
3036 1d0c 8901 movw r16,r18
3037 1d0e 37FF sbrs r19,7
3038 1d10 00C0 rjmp .L481
3039 1d12 1095 com r17
3040 1d14 0195 neg r16
3041 1d16 1F4F sbci r17,lo8(-1)
3042 .L481:
3043 1d18 6091 0000 lds r22,IntegralRoll
3044 1d1c 7091 0000 lds r23,(IntegralRoll)+1
3045 1d20 8091 0000 lds r24,(IntegralRoll)+2
3046 1d24 9091 0000 lds r25,(IntegralRoll)+3
3047 1d28 20E0 ldi r18,lo8(512)
3048 1d2a 32E0 ldi r19,hi8(512)
3049 1d2c 40E0 ldi r20,hlo8(512)
3050 1d2e 50E0 ldi r21,hhi8(512)
3051 1d30 0E94 0000 call __divmodsi4
3052 1d34 B901 movw r22,r18
3053 1d36 37FF sbrs r19,7
3054 1d38 00C0 rjmp .L482
3055 1d3a 7095 com r23
3056 1d3c 6195 neg r22
3057 1d3e 7F4F sbci r23,lo8(-1)
3058 .L482:
3059 1d40 6017 cp r22,r16
3060 1d42 7107 cpc r23,r17
3061 1d44 04F4 brge .L483
3062 1d46 B801 movw r22,r16
3063 .L483:
3064 1d48 6931 cpi r22,25
3065 1d4a 7105 cpc r23,__zero_reg__
3066 1d4c 04F4 brge .L484
3067 1d4e 8091 0000 lds r24,NeueKompassRichtungMerken.2362
3068 1d52 8823 tst r24
3069 1d54 01F0 breq .L484
3070 1d56 8091 0000 lds r24,SignalSchlecht.2366
3071 1d5a 9091 0000 lds r25,(SignalSchlecht.2366)+1
3072 1d5e 892B or r24,r25
3073 1d60 01F4 brne .L484
3074 1d62 8091 0000 lds r24,KompassValue
3075 1d66 9091 0000 lds r25,(KompassValue)+1
3076 1d6a 9093 0000 sts (KompassStartwert)+1,r25
3077 1d6e 8093 0000 sts KompassStartwert,r24
3078 1d72 1092 0000 sts NeueKompassRichtungMerken.2362,__zero_reg__
3079 .L484:
3080 1d76 2091 0000 lds r18,Parameter_KompassWirkung
3081 1d7a 3327 clr r19
3082 1d7c 629F mul r22,r18
3083 1d7e C001 movw r24,r0
3084 1d80 639F mul r22,r19
3085 1d82 900D add r25,r0
3086 1d84 729F mul r23,r18
3087 1d86 900D add r25,r0
3088 1d88 1124 clr r1
3089 1d8a 60E4 ldi r22,lo8(64)
3090 1d8c 70E0 ldi r23,hi8(64)
3091 1d8e 0E94 0000 call __divmodhi4
3092 1d92 A901 movw r20,r18
3093 1d94 461B sub r20,r22
3094 1d96 570B sbc r21,r23
3095 1d98 1416 cp __zero_reg__,r20
3096 1d9a 1506 cpc __zero_reg__,r21
3097 1d9c 04F0 brlt .+2
3098 1d9e 00C0 rjmp .L488
3099 1da0 1092 7A00 sts 122,__zero_reg__
3100 1da4 2091 0000 lds r18,SignalSchlecht.2366
3101 1da8 3091 0000 lds r19,(SignalSchlecht.2366)+1
3102 1dac 2115 cp r18,__zero_reg__
3103 1dae 3105 cpc r19,__zero_reg__
3104 1db0 01F4 brne .L490
3105 1db2 0091 0000 lds r16,Mess_Integral_Gier
3106 1db6 1091 0000 lds r17,(Mess_Integral_Gier)+1
3107 1dba 2091 0000 lds r18,(Mess_Integral_Gier)+2
3108 1dbe 3091 0000 lds r19,(Mess_Integral_Gier)+3
3109 1dc2 8091 0000 lds r24,KompassRichtung
3110 1dc6 9091 0000 lds r25,(KompassRichtung)+1
3111 1dca BC01 movw r22,r24
3112 1dcc 649F mul r22,r20
3113 1dce C001 movw r24,r0
3114 1dd0 659F mul r22,r21
3115 1dd2 900D add r25,r0
3116 1dd4 749F mul r23,r20
3117 1dd6 900D add r25,r0
3118 1dd8 1124 clr r1
3119 1dda 60E2 ldi r22,lo8(32)
3120 1ddc 70E0 ldi r23,hi8(32)
3121 1dde 0E94 0000 call __divmodhi4
3122 1de2 8827 clr r24
3123 1de4 77FD sbrc r23,7
3124 1de6 8095 com r24
3125 1de8 982F mov r25,r24
3126 1dea 060F add r16,r22
3127 1dec 171F adc r17,r23
3128 1dee 281F adc r18,r24
3129 1df0 391F adc r19,r25
3130 1df2 0093 0000 sts Mess_Integral_Gier,r16
3131 1df6 1093 0000 sts (Mess_Integral_Gier)+1,r17
3132 1dfa 2093 0000 sts (Mess_Integral_Gier)+2,r18
3133 1dfe 3093 0000 sts (Mess_Integral_Gier)+3,r19
3134 1e02 8FEE ldi r24,lo8(-17)
3135 1e04 8093 7A00 sts 122,r24
3136 1e08 00C0 rjmp .L478
3137 .L490:
3138 1e0a 8FEE ldi r24,lo8(-17)
3139 1e0c 8093 7A00 sts 122,r24
3140 1e10 2150 subi r18,lo8(-(-1))
3141 1e12 3040 sbci r19,hi8(-(-1))
3142 1e14 3093 0000 sts (SignalSchlecht.2366)+1,r19
3143 1e18 2093 0000 sts SignalSchlecht.2366,r18
3144 1e1c 00C0 rjmp .L478
3145 .L488:
3146 1e1e 84EF ldi r24,lo8(500)
3147 1e20 91E0 ldi r25,hi8(500)
3148 1e22 9093 0000 sts (SignalSchlecht.2366)+1,r25
3149 1e26 8093 0000 sts SignalSchlecht.2366,r24
3150 .L478:
3151 1e2a 8091 0000 lds r24,EE_Parameter+8
3152 1e2e 85FF sbrs r24,5
3153 1e30 00C0 rjmp .L492
3154 1e32 8091 0000 lds r24,Parameter_UserParam1
3155 1e36 9927 clr r25
3156 1e38 9093 0000 sts (gps_p)+1,r25
3157 1e3c 8093 0000 sts gps_p,r24
3158 1e40 8091 0000 lds r24,Parameter_UserParam2
3159 1e44 9927 clr r25
3160 1e46 9093 0000 sts (gps_d)+1,r25
3161 1e4a 8093 0000 sts gps_d,r24
3162 1e4e 0E94 0000 call gps_main
3163 1e52 00C0 rjmp .L494
3164 .L492:
3165 1e54 1092 0000 sts (GPS_Nick)+1,__zero_reg__
3166 1e58 1092 0000 sts GPS_Nick,__zero_reg__
3167 1e5c 1092 0000 sts (GPS_Roll)+1,__zero_reg__
3168 1e60 1092 0000 sts GPS_Roll,__zero_reg__
3169 .L494:
3170 1e64 8091 0000 lds r24,DebugOut+17
3171 1e68 8F5F subi r24,lo8(-(1))
3172 1e6a 8093 0000 sts DebugOut+17,r24
3173 1e6e 8091 0000 lds r24,TimerWerteausgabe.2361
3174 1e72 8150 subi r24,lo8(-(-1))
3175 1e74 8093 0000 sts TimerWerteausgabe.2361,r24
3176 1e78 8F3F cpi r24,lo8(-1)
3177 1e7a 01F0 breq .+2
3178 1e7c 00C0 rjmp .L495
3179 1e7e 81E3 ldi r24,lo8(49)
3180 1e80 8093 0000 sts TimerWerteausgabe.2361,r24
3181 1e84 6091 0000 lds r22,IntegralNick
3182 1e88 7091 0000 lds r23,(IntegralNick)+1
3183 1e8c 8091 0000 lds r24,(IntegralNick)+2
3184 1e90 9091 0000 lds r25,(IntegralNick)+3
3185 1e94 E090 0000 lds r14,EE_Parameter+20
3186 1e98 FF24 clr r15
3187 1e9a 0027 clr r16
3188 1e9c 1127 clr r17
3189 1e9e A801 movw r20,r16
3190 1ea0 9701 movw r18,r14
3191 1ea2 0E94 0000 call __divmodsi4
3192 1ea6 3093 0000 sts (DebugOut+18)+1,r19
3193 1eaa 2093 0000 sts DebugOut+18,r18
3194 1eae 6091 0000 lds r22,IntegralRoll
3195 1eb2 7091 0000 lds r23,(IntegralRoll)+1
3196 1eb6 8091 0000 lds r24,(IntegralRoll)+2
3197 1eba 9091 0000 lds r25,(IntegralRoll)+3
3198 1ebe A801 movw r20,r16
3199 1ec0 9701 movw r18,r14
3200 1ec2 0E94 0000 call __divmodsi4
3201 1ec6 3093 0000 sts (DebugOut+20)+1,r19
3202 1eca 2093 0000 sts DebugOut+20,r18
3203 1ece 8091 0000 lds r24,Mittelwert_AccNick
3204 1ed2 9091 0000 lds r25,(Mittelwert_AccNick)+1
3205 1ed6 9093 0000 sts (DebugOut+22)+1,r25
3206 1eda 8093 0000 sts DebugOut+22,r24
3207 1ede 8091 0000 lds r24,Mittelwert_AccRoll
3208 1ee2 9091 0000 lds r25,(Mittelwert_AccRoll)+1
3209 1ee6 9093 0000 sts (DebugOut+24)+1,r25
3210 1eea 8093 0000 sts DebugOut+24,r24
3211 1eee 8091 0000 lds r24,MesswertGier
3212 1ef2 9091 0000 lds r25,(MesswertGier)+1
3213 1ef6 9093 0000 sts (DebugOut+26)+1,r25
3214 1efa 8093 0000 sts DebugOut+26,r24
3215 1efe 8091 0000 lds r24,HoehenWert
3216 1f02 9091 0000 lds r25,(HoehenWert)+1
3217 1f06 9093 0000 sts (DebugOut+28)+1,r25
3218 1f0a 8093 0000 sts DebugOut+28,r24
3219 1f0e 6091 0000 lds r22,Mess_Integral_Hoch
3220 1f12 7091 0000 lds r23,(Mess_Integral_Hoch)+1
3221 1f16 8091 0000 lds r24,(Mess_Integral_Hoch)+2
3222 1f1a 9091 0000 lds r25,(Mess_Integral_Hoch)+3
3223 1f1e 20E0 ldi r18,lo8(512)
3224 1f20 32E0 ldi r19,hi8(512)
3225 1f22 40E0 ldi r20,hlo8(512)
3226 1f24 50E0 ldi r21,hhi8(512)
3227 1f26 0E94 0000 call __divmodsi4
3228 1f2a 3093 0000 sts (DebugOut+30)+1,r19
3229 1f2e 2093 0000 sts DebugOut+30,r18
3230 1f32 8981 ldd r24,Y+1
3231 1f34 9A81 ldd r25,Y+2
3232 1f36 9093 0000 sts (DebugOut+32)+1,r25
3233 1f3a 8093 0000 sts DebugOut+32,r24
3234 1f3e 8091 0000 lds r24,KompassValue
3235 1f42 9091 0000 lds r25,(KompassValue)+1
3236 1f46 9093 0000 sts (DebugOut+34)+1,r25
3237 1f4a 8093 0000 sts DebugOut+34,r24
3238 .L495:
3239 1f4e 6091 0000 lds r22,IntegralNick
3240 1f52 7091 0000 lds r23,(IntegralNick)+1
3241 1f56 8091 0000 lds r24,(IntegralNick)+2
3242 1f5a 9091 0000 lds r25,(IntegralNick)+3
3243 1f5e 2090 0000 lds r2,IntegralFaktor
3244 1f62 3090 0000 lds r3,(IntegralFaktor)+1
3245 1f66 4090 0000 lds r4,(IntegralFaktor)+2
3246 1f6a 5090 0000 lds r5,(IntegralFaktor)+3
3247 1f6e E090 0000 lds r14,MesswertNick
3248 1f72 F090 0000 lds r15,(MesswertNick)+1
3249 1f76 6090 0000 lds r6,GyroFaktor
3250 1f7a 7090 0000 lds r7,(GyroFaktor)+1
3251 1f7e 8090 0000 lds r8,(GyroFaktor)+2
3252 1f82 9090 0000 lds r9,(GyroFaktor)+3
3253 1f86 0E94 0000 call __floatsisf
3254 1f8a A201 movw r20,r4
3255 1f8c 9101 movw r18,r2
3256 1f8e 0E94 0000 call __mulsf3
3257 1f92 5B01 movw r10,r22
3258 1f94 6C01 movw r12,r24
3259 1f96 0027 clr r16
3260 1f98 F7FC sbrc r15,7
3261 1f9a 0095 com r16
3262 1f9c 102F mov r17,r16
3263 1f9e C801 movw r24,r16
3264 1fa0 B701 movw r22,r14
3265 1fa2 0E94 0000 call __floatsisf
3266 1fa6 A401 movw r20,r8
3267 1fa8 9301 movw r18,r6
3268 1faa 0E94 0000 call __mulsf3
3269 1fae 9B01 movw r18,r22
3270 1fb0 AC01 movw r20,r24
3271 1fb2 C601 movw r24,r12
3272 1fb4 B501 movw r22,r10
3273 1fb6 0E94 0000 call __addsf3
3274 1fba 0E94 0000 call __fixsfsi
3275 1fbe 7093 0000 sts (MesswertNick)+1,r23
3276 1fc2 6093 0000 sts MesswertNick,r22
3277 1fc6 6091 0000 lds r22,IntegralRoll
3278 1fca 7091 0000 lds r23,(IntegralRoll)+1
3279 1fce 8091 0000 lds r24,(IntegralRoll)+2
3280 1fd2 9091 0000 lds r25,(IntegralRoll)+3
3281 1fd6 E090 0000 lds r14,MesswertRoll
3282 1fda F090 0000 lds r15,(MesswertRoll)+1
3283 1fde 0E94 0000 call __floatsisf
3284 1fe2 A201 movw r20,r4
3285 1fe4 9101 movw r18,r2
3286 1fe6 0E94 0000 call __mulsf3
3287 1fea 5B01 movw r10,r22
3288 1fec 6C01 movw r12,r24
3289 1fee 0027 clr r16
3290 1ff0 F7FC sbrc r15,7
3291 1ff2 0095 com r16
3292 1ff4 102F mov r17,r16
3293 1ff6 C801 movw r24,r16
3294 1ff8 B701 movw r22,r14
3295 1ffa 0E94 0000 call __floatsisf
3296 1ffe A401 movw r20,r8
3297 2000 9301 movw r18,r6
3298 2002 0E94 0000 call __mulsf3
3299 2006 9B01 movw r18,r22
3300 2008 AC01 movw r20,r24
3301 200a C601 movw r24,r12
3302 200c B501 movw r22,r10
3303 200e 0E94 0000 call __addsf3
3304 2012 0E94 0000 call __fixsfsi
3305 2016 7093 0000 sts (MesswertRoll)+1,r23
3306 201a 6093 0000 sts MesswertRoll,r22
3307 201e 6091 0000 lds r22,MesswertGier
3308 2022 7091 0000 lds r23,(MesswertGier)+1
3309 2026 A090 0000 lds r10,Integral_Gier
3310 202a B090 0000 lds r11,(Integral_Gier)+1
3311 202e C090 0000 lds r12,(Integral_Gier)+2
3312 2032 D090 0000 lds r13,(Integral_Gier)+3
3313 2036 8827 clr r24
3314 2038 77FD sbrc r23,7
3315 203a 8095 com r24
3316 203c 982F mov r25,r24
3317 203e 0E94 0000 call __floatsisf
3318 2042 7B01 movw r14,r22
3319 2044 8C01 movw r16,r24
3320 2046 20E0 ldi r18,lo8(0x3f000000)
3321 2048 30E0 ldi r19,hi8(0x3f000000)
3322 204a 40E0 ldi r20,hlo8(0x3f000000)
3323 204c 5FE3 ldi r21,hhi8(0x3f000000)
3324 204e C401 movw r24,r8
3325 2050 B301 movw r22,r6
3326 2052 0E94 0000 call __mulsf3
3327 2056 9B01 movw r18,r22
3328 2058 AC01 movw r20,r24
3329 205a C801 movw r24,r16
3330 205c B701 movw r22,r14
3331 205e 0E94 0000 call __mulsf3
3332 2062 7B01 movw r14,r22
3333 2064 8C01 movw r16,r24
3334 2066 C601 movw r24,r12
3335 2068 B501 movw r22,r10
3336 206a 0E94 0000 call __floatsisf
3337 206e A201 movw r20,r4
3338 2070 9101 movw r18,r2
3339 2072 0E94 0000 call __mulsf3
3340 2076 9B01 movw r18,r22
3341 2078 AC01 movw r20,r24
3342 207a C801 movw r24,r16
3343 207c B701 movw r22,r14
3344 207e 0E94 0000 call __addsf3
3345 2082 0E94 0000 call __fixsfsi
3346 2086 7093 0000 sts (MesswertGier)+1,r23
3347 208a 6093 0000 sts MesswertGier,r22
3348 208e 8091 0000 lds r24,MesswertNick
3349 2092 9091 0000 lds r25,(MesswertNick)+1
3350 2096 8150 subi r24,lo8(2049)
3351 2098 9840 sbci r25,hi8(2049)
3352 209a 04F0 brlt .L497
3353 209c 80E0 ldi r24,lo8(2048)
3354 209e 98E0 ldi r25,hi8(2048)
3355 20a0 9093 0000 sts (MesswertNick)+1,r25
3356 20a4 8093 0000 sts MesswertNick,r24
3357 .L497:
3358 20a8 8091 0000 lds r24,MesswertNick
3359 20ac 9091 0000 lds r25,(MesswertNick)+1
3360 20b0 8050 subi r24,lo8(-2048)
3361 20b2 984F sbci r25,hi8(-2048)
3362 20b4 04F4 brge .L499
3363 20b6 80E0 ldi r24,lo8(-2048)
3364 20b8 98EF ldi r25,hi8(-2048)
3365 20ba 9093 0000 sts (MesswertNick)+1,r25
3366 20be 8093 0000 sts MesswertNick,r24
3367 .L499:
3368 20c2 8091 0000 lds r24,MesswertRoll
3369 20c6 9091 0000 lds r25,(MesswertRoll)+1
3370 20ca 8150 subi r24,lo8(2049)
3371 20cc 9840 sbci r25,hi8(2049)
3372 20ce 04F0 brlt .L501
3373 20d0 80E0 ldi r24,lo8(2048)
3374 20d2 98E0 ldi r25,hi8(2048)
3375 20d4 9093 0000 sts (MesswertRoll)+1,r25
3376 20d8 8093 0000 sts MesswertRoll,r24
3377 .L501:
3378 20dc 8091 0000 lds r24,MesswertRoll
3379 20e0 9091 0000 lds r25,(MesswertRoll)+1
3380 20e4 8050 subi r24,lo8(-2048)
3381 20e6 984F sbci r25,hi8(-2048)
3382 20e8 04F4 brge .L503
3383 20ea 80E0 ldi r24,lo8(-2048)
3384 20ec 98EF ldi r25,hi8(-2048)
3385 20ee 9093 0000 sts (MesswertRoll)+1,r25
3386 20f2 8093 0000 sts MesswertRoll,r24
3387 .L503:
3388 20f6 8091 0000 lds r24,MesswertGier
3389 20fa 9091 0000 lds r25,(MesswertGier)+1
3390 20fe 8150 subi r24,lo8(2049)
3391 2100 9840 sbci r25,hi8(2049)
3392 2102 04F0 brlt .L505
3393 2104 80E0 ldi r24,lo8(2048)
3394 2106 98E0 ldi r25,hi8(2048)
3395 2108 9093 0000 sts (MesswertGier)+1,r25
3396 210c 8093 0000 sts MesswertGier,r24
3397 .L505:
3398 2110 8091 0000 lds r24,MesswertGier
3399 2114 9091 0000 lds r25,(MesswertGier)+1
3400 2118 8050 subi r24,lo8(-2048)
3401 211a 984F sbci r25,hi8(-2048)
3402 211c 04F4 brge .L507
3403 211e 80E0 ldi r24,lo8(-2048)
3404 2120 98EF ldi r25,hi8(-2048)
3405 2122 9093 0000 sts (MesswertGier)+1,r25
3406 2126 8093 0000 sts MesswertGier,r24
3407 .L507:
3408 212a 8091 0000 lds r24,EE_Parameter+8
3409 212e 9927 clr r25
3410 2130 80FF sbrs r24,0
3411 2132 00C0 rjmp .L509
3412 2134 2091 0000 lds r18,Parameter_MaxHoehe
3413 2138 81FF sbrs r24,1
3414 213a 00C0 rjmp .L511
3415 213c 2233 cpi r18,lo8(50)
3416 213e 00F4 brsh .L580
3417 2140 8091 0000 lds r24,HoehenWert
3418 2144 9091 0000 lds r25,(HoehenWert)+1
3419 2148 4497 sbiw r24,20
3420 214a 9093 0000 sts (SollHoehe)+1,r25
3421 214e 8093 0000 sts SollHoehe,r24
3422 2152 1092 0000 sts HoehenReglerAktiv,__zero_reg__
3423 2156 00C0 rjmp .L515
3424 .L511:
3425 2158 8091 0000 lds r24,EE_Parameter+13
3426 215c 289F mul r18,r24
3427 215e C001 movw r24,r0
3428 2160 1124 clr r1
3429 2162 4497 sbiw r24,20
3430 2164 9093 0000 sts (SollHoehe)+1,r25
3431 2168 8093 0000 sts SollHoehe,r24
3432 .L580:
3433 216c 81E0 ldi r24,lo8(1)
3434 216e 8093 0000 sts HoehenReglerAktiv,r24
3435 .L515:
3436 2172 8091 0000 lds r24,Notlandung
3437 2176 8823 tst r24
3438 2178 01F0 breq .L516
3439 217a 1092 0000 sts (SollHoehe)+1,__zero_reg__
3440 217e 1092 0000 sts SollHoehe,__zero_reg__
3441 .L516:
3442 2182 2091 0000 lds r18,HoehenWert
3443 2186 3091 0000 lds r19,(HoehenWert)+1
3444 218a 4091 0000 lds r20,SollHoehe
3445 218e 5091 0000 lds r21,(SollHoehe)+1
3446 2192 4217 cp r20,r18
3447 2194 5307 cpc r21,r19
3448 2196 04F0 brlt .+2
3449 2198 00C0 rjmp .L509
3450 219a 8091 0000 lds r24,HoehenReglerAktiv
3451 219e 8823 tst r24
3452 21a0 01F4 brne .+2
3453 21a2 00C0 rjmp .L509
3454 21a4 241B sub r18,r20
3455 21a6 350B sbc r19,r21
3456 21a8 8091 0000 lds r24,Parameter_Hoehe_P
3457 21ac 9927 clr r25
3458 21ae BC01 movw r22,r24
3459 21b0 269F mul r18,r22
3460 21b2 C001 movw r24,r0
3461 21b4 279F mul r18,r23
3462 21b6 900D add r25,r0
3463 21b8 369F mul r19,r22
3464 21ba 900D add r25,r0
3465 21bc 1124 clr r1
3466 21be 60E1 ldi r22,lo8(16)
3467 21c0 70E0 ldi r23,hi8(16)
3468 21c2 0E94 0000 call __divmodhi4
3469 21c6 0981 ldd r16,Y+1
3470 21c8 1A81 ldd r17,Y+2
3471 21ca 061B sub r16,r22
3472 21cc 170B sbc r17,r23
3473 21ce 2091 0000 lds r18,HoeheD
3474 21d2 3091 0000 lds r19,(HoeheD)+1
3475 21d6 8091 0000 lds r24,Parameter_Luftdruck_D
3476 21da 9927 clr r25
3477 21dc FC01 movw r30,r24
3478 21de 2E9F mul r18,r30
3479 21e0 C001 movw r24,r0
3480 21e2 2F9F mul r18,r31
3481 21e4 900D add r25,r0
3482 21e6 3E9F mul r19,r30
3483 21e8 900D add r25,r0
3484 21ea 1124 clr r1
3485 21ec 68E0 ldi r22,lo8(8)
3486 21ee 70E0 ldi r23,hi8(8)
3487 21f0 0E94 0000 call __divmodhi4
3488 21f4 061B sub r16,r22
3489 21f6 170B sbc r17,r23
3490 21f8 6091 0000 lds r22,Mess_Integral_Hoch
3491 21fc 7091 0000 lds r23,(Mess_Integral_Hoch)+1
3492 2200 8091 0000 lds r24,(Mess_Integral_Hoch)+2
3493 2204 9091 0000 lds r25,(Mess_Integral_Hoch)+3
3494 2208 20E0 ldi r18,lo8(512)
3495 220a 32E0 ldi r19,hi8(512)
3496 220c 40E0 ldi r20,hlo8(512)
3497 220e 50E0 ldi r21,hhi8(512)
3498 2210 0E94 0000 call __divmodsi4
3499 2214 CA01 movw r24,r20
3500 2216 B901 movw r22,r18
3501 2218 2091 0000 lds r18,Parameter_Hoehe_ACC_Wirkung
3502 221c 3327 clr r19
3503 221e 4427 clr r20
3504 2220 5527 clr r21
3505 2222 0E94 0000 call __mulsi3
3506 2226 20E2 ldi r18,lo8(32)
3507 2228 30E0 ldi r19,hi8(32)
3508 222a 40E0 ldi r20,hlo8(32)
3509 222c 50E0 ldi r21,hhi8(32)
3510 222e 0E94 0000 call __divmodsi4
3511 2232 FFEF ldi r31,hi8(-50)
3512 2234 2E3C cpi r18,lo8(-50)
3513 2236 3F07 cpc r19,r31
3514 2238 04F4 brge .L520
3515 223a 2EEC ldi r18,lo8(-50)
3516 223c 3FEF ldi r19,hi8(-50)
3517 .L520:
3518 223e 8091 0000 lds r24,hoehenregler.2360
3519 2242 9091 0000 lds r25,(hoehenregler.2360)+1
3520 2246 AC01 movw r20,r24
3521 2248 74E0 ldi r23,4
3522 224a 440F 1: lsl r20
3523 224c 551F rol r21
3524 224e 7A95 dec r23
3525 2250 01F4 brne 1b
3526 2252 481B sub r20,r24
3527 2254 590B sbc r21,r25
3528 2256 2333 cpi r18,51
3529 2258 3105 cpc r19,__zero_reg__
3530 225a 04F0 brlt .L521
3531 225c 22E3 ldi r18,lo8(50)
3532 225e 30E0 ldi r19,hi8(50)
3533 .L521:
3534 2260 021B sub r16,r18
3535 2262 130B sbc r17,r19
3536 2264 CA01 movw r24,r20
3537 2266 800F add r24,r16
3538 2268 911F adc r25,r17
3539 226a 60E1 ldi r22,lo8(16)
3540 226c 70E0 ldi r23,hi8(16)
3541 226e 0E94 0000 call __divmodhi4
3542 2272 7093 0000 sts (hoehenregler.2360)+1,r23
3543 2276 6093 0000 sts hoehenregler.2360,r22
3544 227a 8091 0000 lds r24,EE_Parameter+9
3545 227e 9927 clr r25
3546 2280 6817 cp r22,r24
3547 2282 7907 cpc r23,r25
3548 2284 04F4 brge .L522
3549 2286 2981 ldd r18,Y+1
3550 2288 3A81 ldd r19,Y+2
3551 228a 2817 cp r18,r24
3552 228c 3907 cpc r19,r25
3553 228e 04F0 brlt .L524
3554 2290 9093 0000 sts (hoehenregler.2360)+1,r25
3555 2294 8093 0000 sts hoehenregler.2360,r24
3556 2298 00C0 rjmp .L522
3557 .L524:
3558 229a 4981 ldd r20,Y+1
3559 229c 5A81 ldd r21,Y+2
3560 229e 5093 0000 sts (hoehenregler.2360)+1,r21
3561 22a2 4093 0000 sts hoehenregler.2360,r20
3562 22a6 00C0 rjmp .L526
3563 .L522:
3564 22a8 8091 0000 lds r24,hoehenregler.2360
3565 22ac 9091 0000 lds r25,(hoehenregler.2360)+1
3566 22b0 6981 ldd r22,Y+1
3567 22b2 7A81 ldd r23,Y+2
3568 22b4 6817 cp r22,r24
3569 22b6 7907 cpc r23,r25
3570 22b8 04F4 brge .L526
3571 22ba 7093 0000 sts (hoehenregler.2360)+1,r23
3572 22be 6093 0000 sts hoehenregler.2360,r22
3573 .L526:
3574 22c2 8091 0000 lds r24,hoehenregler.2360
3575 22c6 9091 0000 lds r25,(hoehenregler.2360)+1
3576 22ca 9A83 std Y+2,r25
3577 22cc 8983 std Y+1,r24
3578 .L509:
3579 22ce C090 0000 lds r12,MesswertGier
3580 22d2 D090 0000 lds r13,(MesswertGier)+1
3581 22d6 8091 0000 lds r24,sollGier.2350
3582 22da 9091 0000 lds r25,(sollGier.2350)+1
3583 22de C81A sub r12,r24
3584 22e0 D90A sbc r13,r25
3585 22e2 95E6 ldi r25,lo8(101)
3586 22e4 C916 cp r12,r25
3587 22e6 D104 cpc r13,__zero_reg__
3588 22e8 04F0 brlt .L528
3589 22ea 64E6 ldi r22,lo8(100)
3590 22ec C62E mov r12,r22
3591 22ee D12C mov r13,__zero_reg__
3592 22f0 00C0 rjmp .L530
3593 .L528:
3594 22f2 ECE9 ldi r30,lo8(-100)
3595 22f4 CE16 cp r12,r30
3596 22f6 EFEF ldi r30,hi8(-100)
3597 22f8 DE06 cpc r13,r30
3598 22fa 04F4 brge .L530
3599 22fc 5CE9 ldi r21,lo8(-100)
3600 22fe C52E mov r12,r21
3601 2300 5FEF ldi r21,hi8(-100)
3602 2302 D52E mov r13,r21
3603 .L530:
3604 2304 4090 0000 lds r4,Kp
3605 2308 5090 0000 lds r5,(Kp)+1
3606 230c 6090 0000 lds r6,(Kp)+2
3607 2310 7090 0000 lds r7,(Kp)+3
3608 2314 6091 0000 lds r22,MesswertNick
3609 2318 7091 0000 lds r23,(MesswertNick)+1
3610 231c 2091 0000 lds r18,StickNick
3611 2320 3091 0000 lds r19,(StickNick)+1
3612 2324 4091 0000 lds r20,GPS_Nick
3613 2328 5091 0000 lds r21,(GPS_Nick)+1
3614 232c 241B sub r18,r20
3615 232e 350B sbc r19,r21
3616 2330 621B sub r22,r18
3617 2332 730B sbc r23,r19
3618 2334 8827 clr r24
3619 2336 77FD sbrc r23,7
3620 2338 8095 com r24
3621 233a 982F mov r25,r24
3622 233c 0E94 0000 call __floatsisf
3623 2340 9B01 movw r18,r22
3624 2342 AC01 movw r20,r24
3625 2344 C301 movw r24,r6
3626 2346 B201 movw r22,r4
3627 2348 0E94 0000 call __mulsf3
3628 234c 0E94 0000 call __fixsfsi
3629 2350 7093 0000 sts (DiffNick)+1,r23
3630 2354 6093 0000 sts DiffNick,r22
3631 2358 8091 0000 lds r24,DiffNick
3632 235c 9091 0000 lds r25,(DiffNick)+1
3633 2360 8C01 movw r16,r24
3634 2362 2227 clr r18
3635 2364 17FD sbrc r17,7
3636 2366 2095 com r18
3637 2368 322F mov r19,r18
3638 236a 8091 0000 lds r24,SummeNick.2348
3639 236e 9091 0000 lds r25,(SummeNick.2348)+1
3640 2372 A091 0000 lds r26,(SummeNick.2348)+2
3641 2376 B091 0000 lds r27,(SummeNick.2348)+3
3642 237a 080F add r16,r24
3643 237c 191F adc r17,r25
3644 237e 2A1F adc r18,r26
3645 2380 3B1F adc r19,r27
3646 2382 0093 0000 sts SummeNick.2348,r16
3647 2386 1093 0000 sts (SummeNick.2348)+1,r17
3648 238a 2093 0000 sts (SummeNick.2348)+2,r18
3649 238e 3093 0000 sts (SummeNick.2348)+3,r19
3650 2392 1016 cp __zero_reg__,r16
3651 2394 1106 cpc __zero_reg__,r17
3652 2396 1206 cpc __zero_reg__,r18
3653 2398 1306 cpc __zero_reg__,r19
3654 239a 04F4 brge .L532
3655 239c C801 movw r24,r16
3656 239e 17FF sbrs r17,7
3657 23a0 00C0 rjmp .L534
3658 23a2 9095 com r25
3659 23a4 8195 neg r24
3660 23a6 9F4F sbci r25,lo8(-1)
3661 .L534:
3662 23a8 60E0 ldi r22,lo8(256)
3663 23aa 71E0 ldi r23,hi8(256)
3664 23ac 0E94 0000 call __divmodhi4
3665 23b0 6F5F subi r22,lo8(-(1))
3666 23b2 7F4F sbci r23,hi8(-(1))
3667 23b4 8827 clr r24
3668 23b6 77FD sbrc r23,7
3669 23b8 8095 com r24
3670 23ba 982F mov r25,r24
3671 23bc 061B sub r16,r22
3672 23be 170B sbc r17,r23
3673 23c0 280B sbc r18,r24
3674 23c2 390B sbc r19,r25
3675 23c4 00C0 rjmp .L581
3676 .L532:
3677 23c6 C801 movw r24,r16
3678 23c8 17FF sbrs r17,7
3679 23ca 00C0 rjmp .L536
3680 23cc 9095 com r25
3681 23ce 8195 neg r24
3682 23d0 9F4F sbci r25,lo8(-1)
3683 .L536:
3684 23d2 60E0 ldi r22,lo8(256)
3685 23d4 71E0 ldi r23,hi8(256)
3686 23d6 0E94 0000 call __divmodhi4
3687 23da 6F5F subi r22,lo8(-(1))
3688 23dc 7F4F sbci r23,hi8(-(1))
3689 23de 8827 clr r24
3690 23e0 77FD sbrc r23,7
3691 23e2 8095 com r24
3692 23e4 982F mov r25,r24
3693 23e6 060F add r16,r22
3694 23e8 171F adc r17,r23
3695 23ea 281F adc r18,r24
3696 23ec 391F adc r19,r25
3697 .L581:
3698 23ee 0093 0000 sts SummeNick.2348,r16
3699 23f2 1093 0000 sts (SummeNick.2348)+1,r17
3700 23f6 2093 0000 sts (SummeNick.2348)+2,r18
3701 23fa 3093 0000 sts (SummeNick.2348)+3,r19
3702 23fe 8091 0000 lds r24,SummeNick.2348
3703 2402 9091 0000 lds r25,(SummeNick.2348)+1
3704 2406 A091 0000 lds r26,(SummeNick.2348)+2
3705 240a B091 0000 lds r27,(SummeNick.2348)+3
3706 240e 8138 cpi r24,lo8(16001)
3707 2410 FEE3 ldi r31,hi8(16001)
3708 2412 9F07 cpc r25,r31
3709 2414 F0E0 ldi r31,hlo8(16001)
3710 2416 AF07 cpc r26,r31
3711 2418 F0E0 ldi r31,hhi8(16001)
3712 241a BF07 cpc r27,r31
3713 241c 04F0 brlt .L537
3714 241e 80E8 ldi r24,lo8(16000)
3715 2420 9EE3 ldi r25,hi8(16000)
3716 2422 A0E0 ldi r26,hlo8(16000)
3717 2424 B0E0 ldi r27,hhi8(16000)
3718 2426 00C0 rjmp .L582
3719 .L537:
3720 2428 8058 subi r24,lo8(-16000)
3721 242a 914C sbci r25,hi8(-16000)
3722 242c AF4F sbci r26,hlo8(-16000)
3723 242e BF4F sbci r27,hhi8(-16000)
3724 2430 04F4 brge .L539
3725 2432 80E8 ldi r24,lo8(-16000)
3726 2434 91EC ldi r25,hi8(-16000)
3727 2436 AFEF ldi r26,hlo8(-16000)
3728 2438 BFEF ldi r27,hhi8(-16000)
3729 .L582:
3730 243a 8093 0000 sts SummeNick.2348,r24
3731 243e 9093 0000 sts (SummeNick.2348)+1,r25
3732 2442 A093 0000 sts (SummeNick.2348)+2,r26
3733 2446 B093 0000 sts (SummeNick.2348)+3,r27
3734 .L539:
3735 244a 6091 0000 lds r22,DiffNick
3736 244e 7091 0000 lds r23,(DiffNick)+1
3737 2452 8090 0000 lds r8,Ki
3738 2456 9090 0000 lds r9,(Ki)+1
3739 245a A090 0000 lds r10,(Ki)+2
3740 245e B090 0000 lds r11,(Ki)+3
3741 2462 8827 clr r24
3742 2464 77FD sbrc r23,7
3743 2466 8095 com r24
3744 2468 982F mov r25,r24
3745 246a 0E94 0000 call __floatsisf
3746 246e 7B01 movw r14,r22
3747 2470 8C01 movw r16,r24
3748 2472 6091 0000 lds r22,SummeNick.2348
3749 2476 7091 0000 lds r23,(SummeNick.2348)+1
3750 247a 8091 0000 lds r24,(SummeNick.2348)+2
3751 247e 9091 0000 lds r25,(SummeNick.2348)+3
3752 2482 0E94 0000 call __floatsisf
3753 2486 9B01 movw r18,r22
3754 2488 AC01 movw r20,r24
3755 248a C501 movw r24,r10
3756 248c B401 movw r22,r8
3757 248e 0E94 0000 call __mulsf3
3758 2492 9B01 movw r18,r22
3759 2494 AC01 movw r20,r24
3760 2496 C801 movw r24,r16
3761 2498 B701 movw r22,r14
3762 249a 0E94 0000 call __addsf3
3763 249e 0E94 0000 call __fixsfsi
3764 24a2 9601 movw r18,r12
3765 24a4 260F add r18,r22
3766 24a6 371F adc r19,r23
3767 24a8 4981 ldd r20,Y+1
3768 24aa 5A81 ldd r21,Y+2
3769 24ac 240F add r18,r20
3770 24ae 351F adc r19,r21
3771 24b0 2224 clr r2
3772 24b2 4A30 cpi r20,10
3773 24b4 5105 cpc r21,__zero_reg__
3774 24b6 04F4 brge .L541
3775 24b8 41E0 ldi r20,lo8(1)
3776 24ba 242E mov r2,r20
3777 .L541:
3778 24bc 37FD sbrc r19,7
3779 24be 00C0 rjmp .L544
3780 24c0 2220 tst r2
3781 24c2 01F0 breq .L542
3782 .L544:
3783 24c4 40E0 ldi r20,lo8(0)
3784 24c6 50E0 ldi r21,hi8(0)
3785 24c8 00C0 rjmp .L545
3786 .L542:
3787 24ca 8091 0000 lds r24,MAX_GAS
3788 24ce 482F mov r20,r24
3789 24d0 5527 clr r21
3790 24d2 2417 cp r18,r20
3791 24d4 3507 cpc r19,r21
3792 24d6 04F4 brge .L545
3793 24d8 A901 movw r20,r18
3794 .L545:
3795 24da 8091 0000 lds r24,MIN_GAS
3796 24de E82F mov r30,r24
3797 24e0 FF27 clr r31
3798 24e2 FC83 std Y+4,r31
3799 24e4 EB83 std Y+3,r30
3800 24e6 9F01 movw r18,r30
3801 24e8 E417 cp r30,r20
3802 24ea F507 cpc r31,r21
3803 24ec 04F4 brge .L547
3804 24ee 9A01 movw r18,r20
3805 .L547:
3806 24f0 2093 0000 sts Motor_Vorne,r18
3807 24f4 2981 ldd r18,Y+1
3808 24f6 3A81 ldd r19,Y+2
3809 24f8 261B sub r18,r22
3810 24fa 370B sbc r19,r23
3811 24fc B901 movw r22,r18
3812 24fe 6C0D add r22,r12
3813 2500 7D1D adc r23,r13
3814 2502 77FD sbrc r23,7
3815 2504 00C0 rjmp .L550
3816 2506 2220 tst r2
3817 2508 01F0 breq .L548
3818 .L550:
3819 250a 80E0 ldi r24,lo8(0)
3820 250c 90E0 ldi r25,hi8(0)
3821 250e 00C0 rjmp .L551
3822 .L548:
3823 2510 8091 0000 lds r24,MAX_GAS
3824 2514 9927 clr r25
3825 2516 6817 cp r22,r24
3826 2518 7907 cpc r23,r25
3827 251a 04F4 brge .L551
3828 251c CB01 movw r24,r22
3829 .L551:
3830 251e 2B81 ldd r18,Y+3
3831 2520 3C81 ldd r19,Y+4
3832 2522 2817 cp r18,r24
3833 2524 3907 cpc r19,r25
3834 2526 04F4 brge .L553
3835 2528 9C01 movw r18,r24
3836 .L553:
3837 252a 2093 0000 sts Motor_Hinten,r18
3838 252e 6091 0000 lds r22,MesswertRoll
3839 2532 7091 0000 lds r23,(MesswertRoll)+1
3840 2536 2091 0000 lds r18,StickRoll
3841 253a 3091 0000 lds r19,(StickRoll)+1
3842 253e 4091 0000 lds r20,GPS_Roll
3843 2542 5091 0000 lds r21,(GPS_Roll)+1
3844 2546 241B sub r18,r20
3845 2548 350B sbc r19,r21
3846 254a 621B sub r22,r18
3847 254c 730B sbc r23,r19
3848 254e 8827 clr r24
3849 2550 77FD sbrc r23,7
3850 2552 8095 com r24
3851 2554 982F mov r25,r24
3852 2556 0E94 0000 call __floatsisf
3853 255a 9B01 movw r18,r22
3854 255c AC01 movw r20,r24
3855 255e C301 movw r24,r6
3856 2560 B201 movw r22,r4
3857 2562 0E94 0000 call __mulsf3
3858 2566 0E94 0000 call __fixsfsi
3859 256a 7093 0000 sts (DiffRoll)+1,r23
3860 256e 6093 0000 sts DiffRoll,r22
3861 2572 8091 0000 lds r24,DiffRoll
3862 2576 9091 0000 lds r25,(DiffRoll)+1
3863 257a 8C01 movw r16,r24
3864 257c 2227 clr r18
3865 257e 17FD sbrc r17,7
3866 2580 2095 com r18
3867 2582 322F mov r19,r18
3868 2584 8091 0000 lds r24,SummeRoll.2349
3869 2588 9091 0000 lds r25,(SummeRoll.2349)+1
3870 258c A091 0000 lds r26,(SummeRoll.2349)+2
3871 2590 B091 0000 lds r27,(SummeRoll.2349)+3
3872 2594 080F add r16,r24
3873 2596 191F adc r17,r25
3874 2598 2A1F adc r18,r26
3875 259a 3B1F adc r19,r27
3876 259c 0093 0000 sts SummeRoll.2349,r16
3877 25a0 1093 0000 sts (SummeRoll.2349)+1,r17
3878 25a4 2093 0000 sts (SummeRoll.2349)+2,r18
3879 25a8 3093 0000 sts (SummeRoll.2349)+3,r19
3880 25ac 1016 cp __zero_reg__,r16
3881 25ae 1106 cpc __zero_reg__,r17
3882 25b0 1206 cpc __zero_reg__,r18
3883 25b2 1306 cpc __zero_reg__,r19
3884 25b4 04F4 brge .L554
3885 25b6 C801 movw r24,r16
3886 25b8 17FF sbrs r17,7
3887 25ba 00C0 rjmp .L556
3888 25bc 9095 com r25
3889 25be 8195 neg r24
3890 25c0 9F4F sbci r25,lo8(-1)
3891 .L556:
3892 25c2 60E0 ldi r22,lo8(256)
3893 25c4 71E0 ldi r23,hi8(256)
3894 25c6 0E94 0000 call __divmodhi4
3895 25ca 6F5F subi r22,lo8(-(1))
3896 25cc 7F4F sbci r23,hi8(-(1))
3897 25ce 8827 clr r24
3898 25d0 77FD sbrc r23,7
3899 25d2 8095 com r24
3900 25d4 982F mov r25,r24
3901 25d6 061B sub r16,r22
3902 25d8 170B sbc r17,r23
3903 25da 280B sbc r18,r24
3904 25dc 390B sbc r19,r25
3905 25de 00C0 rjmp .L583
3906 .L554:
3907 25e0 C801 movw r24,r16
3908 25e2 17FF sbrs r17,7
3909 25e4 00C0 rjmp .L558
3910 25e6 9095 com r25
3911 25e8 8195 neg r24
3912 25ea 9F4F sbci r25,lo8(-1)
3913 .L558:
3914 25ec 60E0 ldi r22,lo8(256)
3915 25ee 71E0 ldi r23,hi8(256)
3916 25f0 0E94 0000 call __divmodhi4
3917 25f4 6F5F subi r22,lo8(-(1))
3918 25f6 7F4F sbci r23,hi8(-(1))
3919 25f8 8827 clr r24
3920 25fa 77FD sbrc r23,7
3921 25fc 8095 com r24
3922 25fe 982F mov r25,r24
3923 2600 060F add r16,r22
3924 2602 171F adc r17,r23
3925 2604 281F adc r18,r24
3926 2606 391F adc r19,r25
3927 .L583:
3928 2608 0093 0000 sts SummeRoll.2349,r16
3929 260c 1093 0000 sts (SummeRoll.2349)+1,r17
3930 2610 2093 0000 sts (SummeRoll.2349)+2,r18
3931 2614 3093 0000 sts (SummeRoll.2349)+3,r19
3932 2618 8091 0000 lds r24,SummeRoll.2349
3933 261c 9091 0000 lds r25,(SummeRoll.2349)+1
3934 2620 A091 0000 lds r26,(SummeRoll.2349)+2
3935 2624 B091 0000 lds r27,(SummeRoll.2349)+3
3936 2628 8138 cpi r24,lo8(16001)
3937 262a 3EE3 ldi r19,hi8(16001)
3938 262c 9307 cpc r25,r19
3939 262e 30E0 ldi r19,hlo8(16001)
3940 2630 A307 cpc r26,r19
3941 2632 30E0 ldi r19,hhi8(16001)
3942 2634 B307 cpc r27,r19
3943 2636 04F0 brlt .L559
3944 2638 80E8 ldi r24,lo8(16000)
3945 263a 9EE3 ldi r25,hi8(16000)
3946 263c A0E0 ldi r26,hlo8(16000)
3947 263e B0E0 ldi r27,hhi8(16000)
3948 2640 00C0 rjmp .L584
3949 .L559:
3950 2642 8058 subi r24,lo8(-16000)
3951 2644 914C sbci r25,hi8(-16000)
3952 2646 AF4F sbci r26,hlo8(-16000)
3953 2648 BF4F sbci r27,hhi8(-16000)
3954 264a 04F4 brge .L561
3955 264c 80E8 ldi r24,lo8(-16000)
3956 264e 91EC ldi r25,hi8(-16000)
3957 2650 AFEF ldi r26,hlo8(-16000)
3958 2652 BFEF ldi r27,hhi8(-16000)
3959 .L584:
3960 2654 8093 0000 sts SummeRoll.2349,r24
3961 2658 9093 0000 sts (SummeRoll.2349)+1,r25
3962 265c A093 0000 sts (SummeRoll.2349)+2,r26
3963 2660 B093 0000 sts (SummeRoll.2349)+3,r27
3964 .L561:
3965 2664 6091 0000 lds r22,DiffRoll
3966 2668 7091 0000 lds r23,(DiffRoll)+1
3967 266c 8827 clr r24
3968 266e 77FD sbrc r23,7
3969 2670 8095 com r24
3970 2672 982F mov r25,r24
3971 2674 0E94 0000 call __floatsisf
3972 2678 7B01 movw r14,r22
3973 267a 8C01 movw r16,r24
3974 267c 6091 0000 lds r22,SummeRoll.2349
3975 2680 7091 0000 lds r23,(SummeRoll.2349)+1
3976 2684 8091 0000 lds r24,(SummeRoll.2349)+2
3977 2688 9091 0000 lds r25,(SummeRoll.2349)+3
3978 268c 0E94 0000 call __floatsisf
3979 2690 9B01 movw r18,r22
3980 2692 AC01 movw r20,r24
3981 2694 C501 movw r24,r10
3982 2696 B401 movw r22,r8
3983 2698 0E94 0000 call __mulsf3
3984 269c 9B01 movw r18,r22
3985 269e AC01 movw r20,r24
3986 26a0 C801 movw r24,r16
3987 26a2 B701 movw r22,r14
3988 26a4 0E94 0000 call __addsf3
3989 26a8 0E94 0000 call __fixsfsi
3990 26ac 2981 ldd r18,Y+1
3991 26ae 3A81 ldd r19,Y+2
3992 26b0 260F add r18,r22
3993 26b2 371F adc r19,r23
3994 26b4 2C19 sub r18,r12
3995 26b6 3D09 sbc r19,r13
3996 26b8 37FD sbrc r19,7
3997 26ba 00C0 rjmp .L565
3998 26bc 2220 tst r2
3999 26be 01F0 breq .L563
4000 .L565:
4001 26c0 40E0 ldi r20,lo8(0)
4002 26c2 50E0 ldi r21,hi8(0)
4003 26c4 00C0 rjmp .L566
4004 .L563:
4005 26c6 8091 0000 lds r24,MAX_GAS
4006 26ca 482F mov r20,r24
4007 26cc 5527 clr r21
4008 26ce 2417 cp r18,r20
4009 26d0 3507 cpc r19,r21
4010 26d2 04F4 brge .L566
4011 26d4 A901 movw r20,r18
4012 .L566:
4013 26d6 2B81 ldd r18,Y+3
4014 26d8 3C81 ldd r19,Y+4
4015 26da 2417 cp r18,r20
4016 26dc 3507 cpc r19,r21
4017 26de 04F4 brge .L568
4018 26e0 9A01 movw r18,r20
4019 .L568:
4020 26e2 2093 0000 sts Motor_Links,r18
4021 26e6 8981 ldd r24,Y+1
4022 26e8 9A81 ldd r25,Y+2
4023 26ea 861B sub r24,r22
4024 26ec 970B sbc r25,r23
4025 26ee BC01 movw r22,r24
4026 26f0 6C19 sub r22,r12
4027 26f2 7D09 sbc r23,r13
4028 26f4 77FD sbrc r23,7
4029 26f6 00C0 rjmp .L571
4030 26f8 2220 tst r2
4031 26fa 01F0 breq .L569
4032 .L571:
4033 26fc 20E0 ldi r18,lo8(0)
4034 26fe 30E0 ldi r19,hi8(0)
4035 2700 00C0 rjmp .L572
4036 .L569:
4037 2702 8091 0000 lds r24,MAX_GAS
4038 2706 282F mov r18,r24
4039 2708 3327 clr r19
4040 270a 6217 cp r22,r18
4041 270c 7307 cpc r23,r19
4042 270e 04F4 brge .L572
4043 2710 9B01 movw r18,r22
4044 .L572:
4045 2712 8B81 ldd r24,Y+3
4046 2714 9C81 ldd r25,Y+4
4047 2716 8217 cp r24,r18
4048 2718 9307 cpc r25,r19
4049 271a 04F4 brge .L574
4050 271c C901 movw r24,r18
4051 .L574:
4052 271e 8093 0000 sts Motor_Rechts,r24
4053 /* epilogue: frame size=4 */
4054 2722 2496 adiw r28,4
4055 2724 0FB6 in __tmp_reg__,__SREG__
4056 2726 F894 cli
4057 2728 DEBF out __SP_H__,r29
4058 272a 0FBE out __SREG__,__tmp_reg__
4059 272c CDBF out __SP_L__,r28
4060 272e DF91 pop r29
4061 2730 CF91 pop r28
4062 2732 1F91 pop r17
4063 2734 0F91 pop r16
4064 2736 FF90 pop r15
4065 2738 EF90 pop r14
4066 273a DF90 pop r13
4067 273c CF90 pop r12
4068 273e BF90 pop r11
4069 2740 AF90 pop r10
4070 2742 9F90 pop r9
4071 2744 8F90 pop r8
4072 2746 7F90 pop r7
4073 2748 6F90 pop r6
4074 274a 5F90 pop r5
4075 274c 4F90 pop r4
4076 274e 3F90 pop r3
4077 2750 2F90 pop r2
4078 2752 0895 ret
4079 /* epilogue end (size=25) */
4080 /* function MotorRegler size 2799 (2748) */
4082 .global Timeout
4083 .global Timeout
4084 .section .bss
4087 Timeout:
4088 0000 00 .skip 1,0
4089 .global AdNeutralNick
4090 .global AdNeutralNick
4093 AdNeutralNick:
4094 0001 0000 .skip 2,0
4095 .global AdNeutralRoll
4096 .global AdNeutralRoll
4099 AdNeutralRoll:
4100 0003 0000 .skip 2,0
4101 .global AdNeutralGier
4102 .global AdNeutralGier
4105 AdNeutralGier:
4106 0005 0000 .skip 2,0
4107 .global NeutralAccX
4108 .global NeutralAccX
4111 NeutralAccX:
4112 0007 0000 .skip 2,0
4113 .global NeutralAccY
4114 .global NeutralAccY
4117 NeutralAccY:
4118 0009 0000 .skip 2,0
4119 .global NeutralAccZ
4120 .global NeutralAccZ
4123 NeutralAccZ:
4124 000b 0000 0000 .skip 4,0
4125 .global CosinusNickWinkel
4126 .global CosinusNickWinkel
4129 CosinusNickWinkel:
4130 000f 00 .skip 1,0
4131 .global CosinusRollWinkel
4132 .global CosinusRollWinkel
4135 CosinusRollWinkel:
4136 0010 00 .skip 1,0
4137 .global IntegralNick
4138 .global IntegralNick
4141 IntegralNick:
4142 0011 0000 0000 .skip 4,0
4143 .global IntegralNick2
4144 .global IntegralNick2
4147 IntegralNick2:
4148 0015 0000 0000 .skip 4,0
4149 .global IntegralRoll
4150 .global IntegralRoll
4153 IntegralRoll:
4154 0019 0000 0000 .skip 4,0
4155 .global IntegralRoll2
4156 .global IntegralRoll2
4159 IntegralRoll2:
4160 001d 0000 0000 .skip 4,0
4161 .global Integral_Gier
4162 .global Integral_Gier
4165 Integral_Gier:
4166 0021 0000 0000 .skip 4,0
4167 .global Mess_IntegralNick
4168 .global Mess_IntegralNick
4171 Mess_IntegralNick:
4172 0025 0000 0000 .skip 4,0
4173 .global Mess_IntegralNick2
4174 .global Mess_IntegralNick2
4177 Mess_IntegralNick2:
4178 0029 0000 0000 .skip 4,0
4179 .global Mess_IntegralRoll
4180 .global Mess_IntegralRoll
4183 Mess_IntegralRoll:
4184 002d 0000 0000 .skip 4,0
4185 .global Mess_IntegralRoll2
4186 .global Mess_IntegralRoll2
4189 Mess_IntegralRoll2:
4190 0031 0000 0000 .skip 4,0
4191 .global Mess_Integral_Gier
4192 .global Mess_Integral_Gier
4195 Mess_Integral_Gier:
4196 0035 0000 0000 .skip 4,0
4197 .global Mess_Integral_Gier2
4198 .global Mess_Integral_Gier2
4201 Mess_Integral_Gier2:
4202 0039 0000 0000 .skip 4,0
4203 .global Mess_Integral_Hoch
4204 .global Mess_Integral_Hoch
4207 Mess_Integral_Hoch:
4208 003d 0000 0000 .skip 4,0
4209 .global KompassValue
4210 .global KompassValue
4213 KompassValue:
4214 0041 0000 .skip 2,0
4215 .global KompassStartwert
4216 .global KompassStartwert
4219 KompassStartwert:
4220 0043 0000 .skip 2,0
4221 .global KompassRichtung
4222 .global KompassRichtung
4225 KompassRichtung:
4226 0045 0000 .skip 2,0
4227 .global Notlandung
4228 .global Notlandung
4231 Notlandung:
4232 0047 00 .skip 1,0
4233 .global HoehenReglerAktiv
4234 .global HoehenReglerAktiv
4237 HoehenReglerAktiv:
4238 0048 00 .skip 1,0
4239 .global Poti1
4240 .global Poti1
4243 Poti1:
4244 0049 0000 .skip 2,0
4245 .global Poti2
4246 .global Poti2
4249 Poti2:
4250 004b 0000 .skip 2,0
4251 .global Poti3
4252 .global Poti3
4255 Poti3:
4256 004d 0000 .skip 2,0
4257 .global Poti4
4258 .global Poti4
4261 Poti4:
4262 004f 0000 .skip 2,0
4263 .global SenderOkay
4264 .global SenderOkay
4267 SenderOkay:
4268 0051 00 .skip 1,0
4269 .global StickNick
4270 .global StickNick
4273 StickNick:
4274 0052 0000 .skip 2,0
4275 .global StickRoll
4276 .global StickRoll
4279 StickRoll:
4280 0054 0000 .skip 2,0
4281 .global StickGier
4282 .global StickGier
4285 StickGier:
4286 0056 0000 .skip 2,0
4287 .global MotorenEin
4288 .global MotorenEin
4291 MotorenEin:
4292 0058 00 .skip 1,0
4293 .global HoehenWert
4294 .global HoehenWert
4297 HoehenWert:
4298 0059 0000 .skip 2,0
4299 .global SollHoehe
4300 .global SollHoehe
4303 SollHoehe:
4304 005b 0000 .skip 2,0
4305 .global Kp
4306 .data
4309 Kp:
4310 0010 00 .byte 0
4311 0011 00 .byte 0
4312 0012 80 .byte -128
4313 0013 3F .byte 63
4314 .global Ki
4317 Ki:
4318 0014 17 .byte 23
4319 0015 B7 .byte -73
4320 0016 D1 .byte -47
4321 0017 38 .byte 56
4322 .global Parameter_Luftdruck_D
4325 Parameter_Luftdruck_D:
4326 0018 30 .byte 48
4327 .global Parameter_MaxHoehe
4330 Parameter_MaxHoehe:
4331 0019 FB .byte -5
4332 .global Parameter_Hoehe_P
4335 Parameter_Hoehe_P:
4336 001a 10 .byte 16
4337 .global Parameter_Hoehe_ACC_Wirkung
4340 Parameter_Hoehe_ACC_Wirkung:
4341 001b 3A .byte 58
4342 .global Parameter_KompassWirkung
4345 Parameter_KompassWirkung:
4346 001c 40 .byte 64
4347 .global Parameter_Gyro_P
4350 Parameter_Gyro_P:
4351 001d 32 .byte 50
4352 .global Parameter_Gyro_I
4355 Parameter_Gyro_I:
4356 001e 96 .byte -106
4357 .global Parameter_Gier_P
4360 Parameter_Gier_P:
4361 001f 02 .byte 2
4362 .global Parameter_I_Faktor
4365 Parameter_I_Faktor:
4366 0020 0A .byte 10
4367 .global Parameter_UserParam1
4368 .global Parameter_UserParam1
4369 .section .bss
4372 Parameter_UserParam1:
4373 005d 00 .skip 1,0
4374 .global Parameter_UserParam2
4375 .global Parameter_UserParam2
4378 Parameter_UserParam2:
4379 005e 00 .skip 1,0
4380 .global Parameter_UserParam3
4381 .global Parameter_UserParam3
4384 Parameter_UserParam3:
4385 005f 00 .skip 1,0
4386 .global Parameter_UserParam4
4387 .global Parameter_UserParam4
4390 Parameter_UserParam4:
4391 0060 00 .skip 1,0
4392 .global Parameter_ServoNickControl
4393 .data
4396 Parameter_ServoNickControl:
4397 0021 64 .byte 100
4398 .lcomm SignalSchlecht.2366,2
4399 .lcomm NeueKompassRichtungMerken.2362,1
4400 .lcomm TimerWerteausgabe.2361,1
4401 .lcomm hoehenregler.2360,2
4402 .lcomm modell_fliegt.2359,2
4403 .lcomm delay_ausschalten.2358,1
4404 .lcomm delay_einschalten.2357,1
4405 .lcomm delay_neutral.2356,1
4406 .lcomm RcLostTimer.2355,2
4407 .lcomm IntegralFehlerRoll.2354,2
4408 .lcomm IntegralFehlerNick.2353,2
4409 .lcomm tmp_long2.2352,4
4410 .lcomm tmp_long.2351,4
4411 .lcomm sollGier.2350,4
4412 .lcomm SummeRoll.2349,4
4413 .lcomm SummeNick.2348,4
4414 .comm DiffNick,2,1
4415 .comm DiffRoll,2,1
4416 .comm durchschnitt_northing,4,1
4417 .comm durchschnitt_easting,4,1
4418 .comm gps_p,2,1
4419 .comm gps_d,2,1
4420 .comm skal,2,1
4421 .comm gps_gethome,2,1
4422 .comm RemoteTasten,1,1
4423 .comm MesswertNick,2,1
4424 .comm MesswertRoll,2,1
4425 .comm MesswertGier,2,1
4426 .comm Mittelwert_AccNick,2,1
4427 .comm Mittelwert_AccRoll,2,1
4428 .comm Mittelwert_AccHoch,2,1
4429 .comm h,1,1
4430 .comm m,1,1
4431 .comm s,1,1
4432 .comm Motor_Vorne,1,1
4433 .comm Motor_Hinten,1,1
4434 .comm Motor_Rechts,1,1
4435 .comm Motor_Links,1,1
4436 .comm Count,1,1
4437 .comm MotorWert,5,1
4438 .comm EE_Parameter,58,1
4439 .comm MAX_GAS,1,1
4440 .comm MIN_GAS,1,1
4441 .comm GyroFaktor,4,1
4442 .comm IntegralFaktor,4,1
4443 /* File "fc.c": code 5078 = 0x13d6 (4996), prologues 38, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 fc.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:13 .text:00000000 Mittelwert
*COM*:00000002 MesswertNick
*COM*:00000002 MesswertRoll
*COM*:00000002 MesswertGier
*COM*:00000002 Mittelwert_AccNick
*COM*:00000002 Mittelwert_AccRoll
*COM*:00000002 Mittelwert_AccHoch
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4195 .bss:00000035 Mess_Integral_Gier
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4165 .bss:00000021 Integral_Gier
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4171 .bss:00000025 Mess_IntegralNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4141 .bss:00000011 IntegralNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4183 .bss:0000002d Mess_IntegralRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4153 .bss:00000019 IntegralRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4177 .bss:00000029 Mess_IntegralNick2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4147 .bss:00000015 IntegralNick2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4189 .bss:00000031 Mess_IntegralRoll2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4159 .bss:0000001d IntegralRoll2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4243 .bss:00000049 Poti1
*COM*:0000003a EE_Parameter
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4249 .bss:0000004b Poti2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4255 .bss:0000004d Poti3
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4261 .bss:0000004f Poti4
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:576 .text:00000582 CalibrierMittelwert
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:918 .text:000008ba ParameterZuordnung
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4330 .data:00000019 Parameter_MaxHoehe
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4325 .data:00000018 Parameter_Luftdruck_D
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4335 .data:0000001a Parameter_Hoehe_P
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4340 .data:0000001b Parameter_Hoehe_ACC_Wirkung
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4345 .data:0000001c Parameter_KompassWirkung
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4350 .data:0000001d Parameter_Gyro_P
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4355 .data:0000001e Parameter_Gyro_I
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4365 .data:00000020 Parameter_I_Faktor
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4372 .bss:0000005d Parameter_UserParam1
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4378 .bss:0000005e Parameter_UserParam2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4384 .bss:0000005f Parameter_UserParam3
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4390 .bss:00000060 Parameter_UserParam4
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4396 .data:00000021 Parameter_ServoNickControl
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4317 .data:00000014 Ki
*COM*:00000001 MAX_GAS
*COM*:00000001 MIN_GAS
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:1484 .text:00000d54 DefaultKonstanten2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:1570 .text:00000e2e DefaultKonstanten1
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:1654 .text:00000f10 SendMotorData
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4291 .bss:00000058 MotorenEin
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:1710 .text:00000f9e SetNeutral
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4111 .bss:00000007 NeutralAccX
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4117 .bss:00000009 NeutralAccY
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4123 .bss:0000000b NeutralAccZ
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4093 .bss:00000001 AdNeutralNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4099 .bss:00000003 AdNeutralRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4105 .bss:00000005 AdNeutralGier
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4207 .bss:0000003d Mess_Integral_Hoch
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4213 .bss:00000041 KompassValue
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4219 .bss:00000043 KompassStartwert
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:1882 .text:00001196 Piep
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:1911 .text:000011c0 MotorRegler
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4267 .bss:00000051 SenderOkay
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4405 .bss:0000006c RcLostTimer.2355
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4231 .bss:00000047 Notlandung
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4401 .bss:00000067 modell_fliegt.2359
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4412 .bss:00000082 SummeNick.2348
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4411 .bss:0000007e SummeRoll.2349
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4201 .bss:00000039 Mess_Integral_Gier2
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4404 .bss:0000006b delay_neutral.2356
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4403 .bss:0000006a delay_einschalten.2357
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4410 .bss:0000007a sollGier.2350
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4402 .bss:00000069 delay_ausschalten.2358
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4273 .bss:00000052 StickNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4279 .bss:00000054 StickRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4285 .bss:00000056 StickGier
*COM*:00000004 GyroFaktor
*COM*:00000004 IntegralFaktor
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4407 .bss:00000070 IntegralFehlerNick.2353
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4406 .bss:0000006e IntegralFehlerRoll.2354
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4409 .bss:00000076 tmp_long.2351
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4408 .bss:00000072 tmp_long2.2352
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4398 .bss:00000063 NeueKompassRichtungMerken.2362
.bss:00000061 SignalSchlecht.2366
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4225 .bss:00000045 KompassRichtung
*COM*:00000002 gps_p
*COM*:00000002 gps_d
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4399 .bss:00000064 TimerWerteausgabe.2361
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4297 .bss:00000059 HoehenWert
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4303 .bss:0000005b SollHoehe
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4237 .bss:00000048 HoehenReglerAktiv
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4400 .bss:00000065 hoehenregler.2360
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4309 .data:00000010 Kp
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4087 .bss:00000000 Timeout
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4129 .bss:0000000f CosinusNickWinkel
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4135 .bss:00000010 CosinusRollWinkel
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc9SL4d7.s:4360 .data:0000001f Parameter_Gier_P
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Count
*COM*:00000005 MotorWert
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
MessanzahlNick
AccumulateNick
__divmodhi4
MessanzahlRoll
AccumulateRoll
MessanzahlGier
AccumulateGier
messanzahl_AccNick
accumulate_AccNick
__divmodsi4
messanzahl_AccRoll
accumulate_AccRoll
messanzahl_AccHoch
accumulate_AccHoch
PPM_in
__floatsisf
__addsf3
__mulsf3
MotorTest
DebugOut
twi_state
motor
i2c_start
SetDelay
CheckDelay
MessLuftdruck
SucheLuftruckOffset
Aktuell_az
Luftdruck
StartLuftdruck
HoeheD
beeptime
Delay_ms
PcZugriff
EEPromArray
__eeprom_write_byte_1F2021
GetActiveParamSetNumber
ReadParameterSet
NewPpmData
PPM_diff
__divsf3
__ltsf2
ZaehlMessungen
__mulsi3
gps_main
GPS_Nick
GPS_Roll
__fixsfsi
/branches/chris_hallo2/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="fc.c"></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="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File></Project>
/branches/chris_hallo2/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/chris_hallo2/gps.h
0,0 → 1,4
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_BerechneZielrichtung(void);
/branches/chris_hallo2/main.c
0,0 → 1,210
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
 
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/chris_hallo2/main.d
0,0 → 1,2
main.o main.d : main.c main.h old_macros.h _settings.h printf_P.h timer0.h uart.h \
analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/main.h
0,0 → 1,101
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~0x01
#define ROT_ON PORTB |= 0x01
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTD ^= 0x02
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
 
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
long durchschnitt_northing;
long durchschnitt_easting;
 
volatile int gps_p; //P-Anteil (10)
volatile int gps_d; //D-Anteil (4)
volatile int skal; //Skalierungsfaktor der Regelung (alter Wert: 10) (20)
 
volatile int gps_gethome;
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/chris_hallo2/main.lst
0,0 → 1,598
1 .file "main.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global GetActiveParamSetNumber
13 GetActiveParamSetNumber:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 0000 A0E0 ldi r26,lo8(EEPromArray+2)
17 0002 B0E0 ldi r27,hi8(EEPromArray+2)
18 /* #APP */
19 0004 0E94 0000 call __eeprom_read_byte_1F2021
20 0008 802D mov r24,__tmp_reg__
21 /* #NOAPP */
22 000a 9927 clr r25
23 /* epilogue: frame size=0 */
24 000c 0895 ret
25 /* epilogue end (size=1) */
26 /* function GetActiveParamSetNumber size 8 (7) */
28 .global WriteParameterSet
30 WriteParameterSet:
31 /* prologue: frame size=0 */
32 /* prologue end (size=0) */
33 000e FB01 movw r30,r22
34 0010 282F mov r18,r24
35 0012 8630 cpi r24,lo8(6)
36 0014 00F0 brlo .L4
37 0016 25E0 ldi r18,lo8(5)
38 .L4:
39 0018 842F mov r24,r20
40 001a 9927 clr r25
41 001c 429F mul r20,r18
42 001e D001 movw r26,r0
43 0020 1124 clr r1
44 0022 A050 subi r26,lo8(-(EEPromArray+100))
45 0024 B040 sbci r27,hi8(-(EEPromArray+100))
46 /* #APP */
47 .26_start:
48 0026 0197 sbiw r24,1
49 0028 04F0 brlt .26_finished
50 002a 0190 ld __tmp_reg__,z+
51 002c 0E94 0000 call __eeprom_write_byte_1F2021
52 0030 00C0 rjmp .26_start
53 .26_finished:
54 /* #NOAPP */
55 0032 A0E0 ldi r26,lo8(EEPromArray+2)
56 0034 B0E0 ldi r27,hi8(EEPromArray+2)
57 /* #APP */
58 0036 022E mov __tmp_reg__,r18
59 0038 0E94 0000 call __eeprom_write_byte_1F2021
60 /* #NOAPP */
61 /* epilogue: frame size=0 */
62 003c 0895 ret
63 /* epilogue end (size=1) */
64 /* function WriteParameterSet size 33 (32) */
66 .global ReadParameterSet
68 ReadParameterSet:
69 /* prologue: frame size=0 */
70 003e CF93 push r28
71 0040 DF93 push r29
72 /* prologue end (size=2) */
73 0042 FB01 movw r30,r22
74 0044 C42F mov r28,r20
75 0046 DD27 clr r29
76 0048 8630 cpi r24,lo8(6)
77 004a 00F0 brlo .L7
78 004c 85E0 ldi r24,lo8(5)
79 .L7:
80 004e 489F mul r20,r24
81 0050 D001 movw r26,r0
82 0052 1124 clr r1
83 0054 A050 subi r26,lo8(-(EEPromArray+100))
84 0056 B040 sbci r27,hi8(-(EEPromArray+100))
85 /* #APP */
86 .44_start:
87 0058 2197 sbiw r28,1
88 005a 04F0 brlt .44_finished
89 005c 0E94 0000 call __eeprom_read_byte_1F2021
90 0060 0192 st z+,__tmp_reg__
91 0062 00C0 rjmp .44_start
92 .44_finished:
93 /* #NOAPP */
94 /* epilogue: frame size=0 */
95 0064 DF91 pop r29
96 0066 CF91 pop r28
97 0068 0895 ret
98 /* epilogue end (size=3) */
99 /* function ReadParameterSet size 30 (25) */
101 .global main
103 main:
104 /* prologue: frame size=0 */
105 006a 0F93 push r16
106 006c 1F93 push r17
107 006e CF93 push r28
108 0070 DF93 push r29
109 /* prologue end (size=4) */
110 0072 91E0 ldi r25,lo8(1)
111 0074 97B9 out 39-0x20,r25
112 0076 8FEF ldi r24,lo8(-1)
113 0078 88B9 out 40-0x20,r24
114 007a 8BE1 ldi r24,lo8(27)
115 007c 84B9 out 36-0x20,r24
116 007e 95B9 out 37-0x20,r25
117 0080 8EE3 ldi r24,lo8(62)
118 0082 8AB9 out 42-0x20,r24
119 0084 579A sbi 42-0x20,7
120 0086 87EF ldi r24,lo8(-9)
121 0088 8BB9 out 43-0x20,r24
122 008a 84B7 in r24,84-0x20
123 008c 877F andi r24,lo8(-9)
124 008e 84BF out 84-0x20,r24
125 0090 8091 6000 lds r24,96
126 0094 8861 ori r24,lo8(24)
127 0096 8093 6000 sts 96,r24
128 009a 1092 6000 sts 96,__zero_reg__
129 009e 80ED ldi r24,lo8(2000)
130 00a0 97E0 ldi r25,hi8(2000)
131 00a2 9093 0000 sts (beeptime)+1,r25
132 00a6 8093 0000 sts beeptime,r24
133 00aa 1092 0000 sts (StickGier)+1,__zero_reg__
134 00ae 1092 0000 sts StickGier,__zero_reg__
135 00b2 1092 0000 sts (PPM_in+4)+1,__zero_reg__
136 00b6 1092 0000 sts PPM_in+4,__zero_reg__
137 00ba 1092 0000 sts (StickRoll)+1,__zero_reg__
138 00be 1092 0000 sts StickRoll,__zero_reg__
139 00c2 1092 0000 sts (StickNick)+1,__zero_reg__
140 00c6 1092 0000 sts StickNick,__zero_reg__
141 00ca 2898 cbi 37-0x20,0
142 00cc 0E94 0000 call Timer_Init
143 00d0 0E94 0000 call UART_Init
144 00d4 0E94 0000 call rc_sum_init
145 00d8 0E94 0000 call ADC_Init
146 00dc 0E94 0000 call i2c_init
147 /* #APP */
148 00e0 7894 sei
149 /* #NOAPP */
150 00e2 1092 0000 sts VersionInfo,__zero_reg__
151 00e6 8CE3 ldi r24,lo8(60)
152 00e8 8093 0000 sts VersionInfo+1,r24
153 00ec 84E0 ldi r24,lo8(4)
154 00ee 8093 0000 sts VersionInfo+2,r24
155 00f2 8CE3 ldi r24,lo8(60)
156 00f4 90E0 ldi r25,hi8(60)
157 00f6 9F93 push r25
158 00f8 8F93 push r24
159 00fa 1F92 push __zero_reg__
160 00fc 1F92 push __zero_reg__
161 00fe 80E0 ldi r24,lo8(__c.1991)
162 0100 90E0 ldi r25,hi8(__c.1991)
163 0102 9F93 push r25
164 0104 8F93 push r24
165 0106 1F92 push __zero_reg__
166 0108 0E94 0000 call _printf_P
167 010c 80E0 ldi r24,lo8(__c.1993)
168 010e 90E0 ldi r25,hi8(__c.1993)
169 0110 9F93 push r25
170 0112 8F93 push r24
171 0114 1F92 push __zero_reg__
172 0116 0E94 0000 call _printf_P
173 011a 299A sbi 37-0x20,1
174 011c A0E0 ldi r26,lo8(EEPromArray+1)
175 011e B0E0 ldi r27,hi8(EEPromArray+1)
176 /* #APP */
177 0120 0E94 0000 call __eeprom_read_byte_1F2021
178 0124 802D mov r24,__tmp_reg__
179 /* #NOAPP */
180 0126 2DB7 in r18,__SP_L__
181 0128 3EB7 in r19,__SP_H__
182 012a 265F subi r18,lo8(-(10))
183 012c 3F4F sbci r19,hi8(-(10))
184 012e 0FB6 in __tmp_reg__,__SREG__
185 0130 F894 cli
186 0132 3EBF out __SP_H__,r19
187 0134 0FBE out __SREG__,__tmp_reg__
188 0136 2DBF out __SP_L__,r18
189 0138 8B33 cpi r24,lo8(59)
190 013a 01F0 breq .L10
191 013c 80E0 ldi r24,lo8(__c.1995)
192 013e 90E0 ldi r25,hi8(__c.1995)
193 0140 9F93 push r25
194 0142 8F93 push r24
195 0144 1F92 push __zero_reg__
196 0146 0E94 0000 call _printf_P
197 014a 0E94 0000 call DefaultKonstanten1
198 014e 4AE3 ldi r20,lo8(58)
199 0150 60E0 ldi r22,lo8(EE_Parameter)
200 0152 70E0 ldi r23,hi8(EE_Parameter)
201 0154 80E0 ldi r24,lo8(0)
202 0156 0E94 0000 call WriteParameterSet
203 015a 01E0 ldi r16,lo8(1)
204 015c 0F90 pop __tmp_reg__
205 015e 0F90 pop __tmp_reg__
206 0160 0F90 pop __tmp_reg__
207 .L12:
208 0162 0230 cpi r16,lo8(2)
209 0164 01F4 brne .L13
210 0166 0E94 0000 call DefaultKonstanten2
211 016a 4AE3 ldi r20,lo8(58)
212 016c 60E0 ldi r22,lo8(EE_Parameter)
213 016e 70E0 ldi r23,hi8(EE_Parameter)
214 0170 82E0 ldi r24,lo8(2)
215 0172 0E94 0000 call WriteParameterSet
216 0176 03E0 ldi r16,lo8(3)
217 .L13:
218 0178 4AE3 ldi r20,lo8(58)
219 017a 60E0 ldi r22,lo8(EE_Parameter)
220 017c 70E0 ldi r23,hi8(EE_Parameter)
221 017e 802F mov r24,r16
222 0180 0E94 0000 call WriteParameterSet
223 0184 0F5F subi r16,lo8(-(1))
224 0186 0630 cpi r16,lo8(6)
225 0188 00F0 brlo .L12
226 018a 81E0 ldi r24,lo8(1)
227 018c 20E0 ldi r18,lo8(EEPromArray+2)
228 018e 30E0 ldi r19,hi8(EEPromArray+2)
229 0190 D901 movw r26,r18
230 /* #APP */
231 0192 082E mov __tmp_reg__,r24
232 0194 0E94 0000 call __eeprom_write_byte_1F2021
233 /* #NOAPP */
234 0198 8BE3 ldi r24,lo8(59)
235 019a 2150 subi r18,lo8(-(-1))
236 019c 3040 sbci r19,hi8(-(-1))
237 019e D901 movw r26,r18
238 /* #APP */
239 01a0 082E mov __tmp_reg__,r24
240 01a2 0E94 0000 call __eeprom_write_byte_1F2021
241 /* #NOAPP */
242 .L10:
243 01a6 00E0 ldi r16,lo8(EEPromArray+2)
244 01a8 10E0 ldi r17,hi8(EEPromArray+2)
245 01aa D801 movw r26,r16
246 /* #APP */
247 01ac 0E94 0000 call __eeprom_read_byte_1F2021
248 01b0 802D mov r24,__tmp_reg__
249 /* #NOAPP */
250 01b2 4AE3 ldi r20,lo8(58)
251 01b4 60E0 ldi r22,lo8(EE_Parameter)
252 01b6 70E0 ldi r23,hi8(EE_Parameter)
253 01b8 0E94 0000 call ReadParameterSet
254 01bc D801 movw r26,r16
255 /* #APP */
256 01be 0E94 0000 call __eeprom_read_byte_1F2021
257 01c2 802D mov r24,__tmp_reg__
258 /* #NOAPP */
259 01c4 9927 clr r25
260 01c6 9F93 push r25
261 01c8 8F93 push r24
262 01ca 80E0 ldi r24,lo8(__c.2003)
263 01cc 90E0 ldi r25,hi8(__c.2003)
264 01ce 9F93 push r25
265 01d0 8F93 push r24
266 01d2 1F92 push __zero_reg__
267 01d4 0E94 0000 call _printf_P
268 01d8 8091 0000 lds r24,EE_Parameter+8
269 01dc 0F90 pop __tmp_reg__
270 01de 0F90 pop __tmp_reg__
271 01e0 0F90 pop __tmp_reg__
272 01e2 0F90 pop __tmp_reg__
273 01e4 0F90 pop __tmp_reg__
274 01e6 80FF sbrs r24,0
275 01e8 00C0 rjmp .L16
276 01ea 80E0 ldi r24,lo8(__c.2005)
277 01ec 90E0 ldi r25,hi8(__c.2005)
278 01ee 9F93 push r25
279 01f0 8F93 push r24
280 01f2 1F92 push __zero_reg__
281 01f4 0E94 0000 call _printf_P
282 01f8 84EC ldi r24,lo8(2500)
283 01fa 99E0 ldi r25,hi8(2500)
284 01fc 0E94 0000 call SetDelay
285 0200 EC01 movw r28,r24
286 0202 0E94 0000 call SucheLuftruckOffset
287 0206 0F90 pop __tmp_reg__
288 0208 0F90 pop __tmp_reg__
289 020a 0F90 pop __tmp_reg__
290 .L18:
291 020c CE01 movw r24,r28
292 020e 0E94 0000 call CheckDelay
293 0212 8823 tst r24
294 0214 01F0 breq .L18
295 0216 80E0 ldi r24,lo8(__c.2010)
296 0218 90E0 ldi r25,hi8(__c.2010)
297 021a 9F93 push r25
298 021c 8F93 push r24
299 021e 1F92 push __zero_reg__
300 0220 0E94 0000 call _printf_P
301 0224 0F90 pop __tmp_reg__
302 0226 0F90 pop __tmp_reg__
303 0228 0F90 pop __tmp_reg__
304 .L16:
305 022a 0E94 0000 call SetNeutral
306 022e 2898 cbi 37-0x20,0
307 0230 80ED ldi r24,lo8(2000)
308 0232 97E0 ldi r25,hi8(2000)
309 0234 9093 0000 sts (beeptime)+1,r25
310 0238 8093 0000 sts beeptime,r24
311 023c 88EE ldi r24,lo8(1000)
312 023e 93E0 ldi r25,hi8(1000)
313 0240 9093 0000 sts (DebugIn+5)+1,r25
314 0244 8093 0000 sts DebugIn+5,r24
315 0248 85E5 ldi r24,lo8(85)
316 024a 8093 0000 sts DebugIn,r24
317 024e 80E0 ldi r24,lo8(__c.2012)
318 0250 90E0 ldi r25,hi8(__c.2012)
319 0252 9F93 push r25
320 0254 8F93 push r24
321 0256 1F92 push __zero_reg__
322 0258 0E94 0000 call _printf_P
323 025c 8091 0000 lds r24,EE_Parameter+8
324 0260 0F90 pop __tmp_reg__
325 0262 0F90 pop __tmp_reg__
326 0264 0F90 pop __tmp_reg__
327 0266 82FF sbrs r24,2
328 0268 00C0 rjmp .L20
329 026a 80E0 ldi r24,lo8(__c.2014)
330 026c 90E0 ldi r25,hi8(__c.2014)
331 026e 00C0 rjmp .L48
332 .L20:
333 0270 80E0 ldi r24,lo8(__c.2016)
334 0272 90E0 ldi r25,hi8(__c.2016)
335 .L48:
336 0274 9F93 push r25
337 0276 8F93 push r24
338 0278 1F92 push __zero_reg__
339 027a 0E94 0000 call _printf_P
340 027e 0F90 pop __tmp_reg__
341 0280 0F90 pop __tmp_reg__
342 0282 0F90 pop __tmp_reg__
343 0284 80E0 ldi r24,lo8(__c.2018)
344 0286 90E0 ldi r25,hi8(__c.2018)
345 0288 9F93 push r25
346 028a 8F93 push r24
347 028c 1F92 push __zero_reg__
348 028e 0E94 0000 call _printf_P
349 0292 0E94 0000 call LcdClear
350 0296 0F90 pop __tmp_reg__
351 0298 0F90 pop __tmp_reg__
352 029a 0F90 pop __tmp_reg__
353 .L49:
354 029c 8091 0000 lds r24,UpdateMotor
355 02a0 8823 tst r24
356 02a2 01F0 breq .L24
357 02a4 1092 0000 sts UpdateMotor,__zero_reg__
358 02a8 0E94 0000 call MotorRegler
359 02ac 0E94 0000 call SendMotorData
360 02b0 2898 cbi 37-0x20,0
361 02b2 8091 0000 lds r24,PcZugriff
362 02b6 8823 tst r24
363 02b8 01F0 breq .L26
364 02ba 8150 subi r24,lo8(-(-1))
365 02bc 8093 0000 sts PcZugriff,r24
366 .L26:
367 02c0 8091 0000 lds r24,SenderOkay
368 02c4 8823 tst r24
369 02c6 01F0 breq .L28
370 02c8 8091 0000 lds r24,SenderOkay
371 02cc 8150 subi r24,lo8(-(-1))
372 02ce 8093 0000 sts SenderOkay,r24
373 .L28:
374 02d2 2091 0000 lds r18,UBat
375 02d6 3091 0000 lds r19,(UBat)+1
376 02da 8091 0000 lds r24,EE_Parameter+24
377 02de 9927 clr r25
378 02e0 2817 cp r18,r24
379 02e2 3907 cpc r19,r25
380 02e4 04F4 brge .L30
381 02e6 80ED ldi r24,lo8(2000)
382 02e8 97E0 ldi r25,hi8(2000)
383 02ea 9093 0000 sts (beeptime)+1,r25
384 02ee 8093 0000 sts beeptime,r24
385 .L30:
386 02f2 8091 0000 lds r24,Timeout
387 02f6 8823 tst r24
388 02f8 01F4 brne .L32
389 02fa 0E94 0000 call i2c_init
390 02fe 00C0 rjmp .L24
391 .L32:
392 0300 2898 cbi 37-0x20,0
393 .L24:
394 0302 0E94 0000 call DatenUebertragung
395 0306 0E94 0000 call BearbeiteRxDaten
396 030a 80E0 ldi r24,lo8(0)
397 030c 90E0 ldi r25,hi8(0)
398 030e 0E94 0000 call CheckDelay
399 0312 8823 tst r24
400 0314 01F0 breq .L49
401 0316 8091 0000 lds r24,MotorenEin
402 031a 8823 tst r24
403 031c 01F0 breq .L35
404 031e 88B1 in r24,40-0x20
405 0320 90E1 ldi r25,lo8(16)
406 0322 8927 eor r24,r25
407 0324 88B9 out 40-0x20,r24
408 0326 00C0 rjmp .L37
409 .L35:
410 0328 4498 cbi 40-0x20,4
411 .L37:
412 032a 84EF ldi r24,lo8(500)
413 032c 91E0 ldi r25,hi8(500)
414 032e 0E94 0000 call SetDelay
415 0332 00C0 rjmp .L49
416 /* epilogue: frame size=0 */
417 /* epilogue: noreturn */
418 /* epilogue end (size=0) */
419 /* function main size 363 (359) */
421 .section .progmem.data,"a",@progbits
424 __c.2018:
425 0000 0A0A 0D00 .string "\n\n\r"
428 __c.2016:
429 0004 4E65 7574 .string "Neutral"
429 7261 6C00
432 __c.2014:
433 000c 4865 6164 .string "HeadingHold"
433 696E 6748
433 6F6C 6400
436 __c.2012:
437 0018 0A0D 5374 .string "\n\rSteuerung: "
437 6575 6572
437 756E 673A
437 2000
440 __c.2010:
441 0026 4F4B 0A0D .string "OK\n\r"
441 00
444 __c.2005:
445 002b 0A0D 4162 .string "\n\rAbgleich Luftdrucksensor.."
445 676C 6569
445 6368 204C
445 7566 7464
445 7275 636B
448 __c.2003:
449 0048 0A0D 4265 .string "\n\rBenutze Parametersatz %d"
449 6E75 747A
449 6520 5061
449 7261 6D65
449 7465 7273
452 __c.1995:
453 0063 0A0D 496E .string "\n\rInit. EEPROM: Generiere Default-Parameter..."
453 6974 2E20
453 4545 5052
453 4F4D 3A20
453 4765 6E65
456 __c.1993:
457 0092 0A0D 3D3D .string "\n\r=============================="
457 3D3D 3D3D
457 3D3D 3D3D
457 3D3D 3D3D
457 3D3D 3D3D
460 __c.1991:
461 00b3 0A0D 466C .string "\n\rFlightControl V%d.%d "
461 6967 6874
461 436F 6E74
461 726F 6C20
461 5625 642E
462 .comm DiffNick,2,1
463 .comm DiffRoll,2,1
464 .comm SenderOkay,1,1
465 .comm CosinusNickWinkel,1,1
466 .comm CosinusRollWinkel,1,1
467 .global EEPromArray
468 .section .eeprom,"aw",@progbits
471 EEPromArray:
472 0000 0000 0000 .skip 2048,0
472 0000 0000
472 0000 0000
472 0000 0000
472 0000 0000
473 .comm durchschnitt_northing,4,1
474 .comm durchschnitt_easting,4,1
475 .comm gps_p,2,1
476 .comm gps_d,2,1
477 .comm skal,2,1
478 .comm gps_gethome,2,1
479 .comm RemoteTasten,1,1
480 .comm Timeout,1,1
481 .comm IntegralNick,4,1
482 .comm IntegralNick2,4,1
483 .comm IntegralRoll,4,1
484 .comm IntegralRoll2,4,1
485 .comm Mess_IntegralNick,4,1
486 .comm Mess_IntegralNick2,4,1
487 .comm Mess_IntegralRoll,4,1
488 .comm Mess_IntegralRoll2,4,1
489 .comm Integral_Gier,4,1
490 .comm Mess_Integral_Gier,4,1
491 .comm h,1,1
492 .comm m,1,1
493 .comm s,1,1
494 .comm Motor_Vorne,1,1
495 .comm Motor_Hinten,1,1
496 .comm Motor_Rechts,1,1
497 .comm Motor_Links,1,1
498 .comm Count,1,1
499 .comm MotorWert,5,1
500 .comm StickNick,2,1
501 .comm StickRoll,2,1
502 .comm StickGier,2,1
503 .comm MotorenEin,1,1
504 /* File "main.c": code 434 = 0x01b2 ( 423), prologues 6, epilogues 5 */
DEFINED SYMBOLS
*ABS*:00000000 main.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:13 .text:00000000 GetActiveParamSetNumber
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:471 .eeprom:00000000 EEPromArray
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:30 .text:0000000e WriteParameterSet
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:47 .text:00000026 .26_start
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:53 .text:00000032 .26_finished
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:68 .text:0000003e ReadParameterSet
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:86 .text:00000058 .44_start
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:92 .text:00000064 .44_finished
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:103 .text:0000006a main
*COM*:00000002 StickGier
*COM*:00000002 StickRoll
*COM*:00000002 StickNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:460 .progmem.data:000000b3 __c.1991
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:456 .progmem.data:00000092 __c.1993
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:452 .progmem.data:00000063 __c.1995
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:448 .progmem.data:00000048 __c.2003
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:444 .progmem.data:0000002b __c.2005
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:440 .progmem.data:00000026 __c.2010
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:436 .progmem.data:00000018 __c.2012
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:432 .progmem.data:0000000c __c.2014
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:428 .progmem.data:00000004 __c.2016
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccwMXjrd.s:424 .progmem.data:00000000 __c.2018
*COM*:00000001 SenderOkay
*COM*:00000001 Timeout
*COM*:00000001 MotorenEin
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__eeprom_read_byte_1F2021
__eeprom_write_byte_1F2021
beeptime
PPM_in
Timer_Init
UART_Init
rc_sum_init
ADC_Init
i2c_init
VersionInfo
_printf_P
DefaultKonstanten1
EE_Parameter
DefaultKonstanten2
SetDelay
SucheLuftruckOffset
CheckDelay
SetNeutral
DebugIn
LcdClear
UpdateMotor
MotorRegler
SendMotorData
PcZugriff
UBat
DatenUebertragung
BearbeiteRxDaten
/branches/chris_hallo2/makefile
0,0 → 1,391
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/chris_hallo2/menu.c
0,0 → 1,118
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 10,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
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,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/chris_hallo2/menu.d
0,0 → 1,2
menu.o menu.d : menu.c main.h old_macros.h _settings.h printf_P.h timer0.h uart.h \
analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/menu.h
0,0 → 1,5
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/chris_hallo2/menu.lst
0,0 → 1,1257
1 .file "menu.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global LcdClear
13 LcdClear:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 0000 E0E0 ldi r30,lo8(DisplayBuff)
17 0002 F0E0 ldi r31,hi8(DisplayBuff)
18 0004 80E2 ldi r24,lo8(32)
19 .L2:
20 0006 8193 st Z+,r24
21 0008 90E0 ldi r25,hi8(DisplayBuff+80)
22 000a E030 cpi r30,lo8(DisplayBuff+80)
23 000c F907 cpc r31,r25
24 000e 01F4 brne .L2
25 /* epilogue: frame size=0 */
26 0010 0895 ret
27 /* epilogue end (size=1) */
28 /* function LcdClear size 9 (8) */
30 .global Menu
32 Menu:
33 /* prologue: frame size=0 */
34 0012 FF92 push r15
35 0014 0F93 push r16
36 0016 1F93 push r17
37 /* prologue end (size=3) */
38 0018 8091 0000 lds r24,RemoteTasten
39 001c 282F mov r18,r24
40 001e 3327 clr r19
41 0020 C901 movw r24,r18
42 0022 8170 andi r24,lo8(1)
43 0024 9070 andi r25,hi8(1)
44 0026 682F mov r22,r24
45 0028 8823 tst r24
46 002a 01F0 breq .L8
47 002c 8091 0000 lds r24,MenuePunkt.1971
48 0030 8823 tst r24
49 0032 01F0 breq .L10
50 0034 8150 subi r24,lo8(-(-1))
51 0036 00C0 rjmp .L41
52 .L10:
53 0038 8091 0000 lds r24,MaxMenue.1970
54 .L41:
55 003c 8093 0000 sts MenuePunkt.1971,r24
56 0040 E0E0 ldi r30,lo8(DisplayBuff)
57 0042 F0E0 ldi r31,hi8(DisplayBuff)
58 0044 80E2 ldi r24,lo8(32)
59 .L13:
60 0046 8193 st Z+,r24
61 0048 90E0 ldi r25,hi8(DisplayBuff+80)
62 004a E030 cpi r30,lo8(DisplayBuff+80)
63 004c F907 cpc r31,r25
64 004e 01F4 brne .L13
65 .L8:
66 0050 A901 movw r20,r18
67 0052 4270 andi r20,lo8(2)
68 0054 5070 andi r21,hi8(2)
69 0056 21FF sbrs r18,1
70 0058 00C0 rjmp .L14
71 005a 8091 0000 lds r24,MenuePunkt.1971
72 005e 8F5F subi r24,lo8(-(1))
73 0060 8093 0000 sts MenuePunkt.1971,r24
74 0064 E0E0 ldi r30,lo8(DisplayBuff)
75 0066 F0E0 ldi r31,hi8(DisplayBuff)
76 0068 80E2 ldi r24,lo8(32)
77 .L16:
78 006a 8193 st Z+,r24
79 006c 90E0 ldi r25,hi8(DisplayBuff+80)
80 006e E030 cpi r30,lo8(DisplayBuff+80)
81 0070 F907 cpc r31,r25
82 0072 01F4 brne .L16
83 .L14:
84 0074 6623 tst r22
85 0076 01F0 breq .L17
86 0078 452B or r20,r21
87 007a 01F0 breq .L17
88 007c 1092 0000 sts MenuePunkt.1971,__zero_reg__
89 .L17:
90 0080 81E1 ldi r24,lo8(17)
91 0082 8093 0000 sts DispPtr,r24
92 0086 8091 0000 lds r24,MenuePunkt.1971
93 008a 9927 clr r25
94 008c 9F93 push r25
95 008e 8F93 push r24
96 0090 80E0 ldi r24,lo8(__c.1972)
97 0092 90E0 ldi r25,hi8(__c.1972)
98 0094 9F93 push r25
99 0096 8F93 push r24
100 0098 E1E0 ldi r30,lo8(1)
101 009a FE2E mov r15,r30
102 009c FF92 push r15
103 009e 0E94 0000 call _printf_P
104 00a2 0091 0000 lds r16,MenuePunkt.1971
105 00a6 0F90 pop __tmp_reg__
106 00a8 0F90 pop __tmp_reg__
107 00aa 0F90 pop __tmp_reg__
108 00ac 0F90 pop __tmp_reg__
109 00ae 0F90 pop __tmp_reg__
110 00b0 0530 cpi r16,lo8(5)
111 00b2 01F4 brne .+2
112 00b4 00C0 rjmp .L26
113 00b6 0630 cpi r16,lo8(6)
114 00b8 00F4 brsh .L32
115 00ba 0230 cpi r16,lo8(2)
116 00bc 01F4 brne .+2
117 00be 00C0 rjmp .L23
118 00c0 0330 cpi r16,lo8(3)
119 00c2 00F4 brsh .L33
120 00c4 0023 tst r16
121 00c6 01F0 breq .L21
122 00c8 0130 cpi r16,lo8(1)
123 00ca 01F0 breq .+2
124 00cc 00C0 rjmp .L20
125 00ce 00C0 rjmp .L22
126 .L33:
127 00d0 0330 cpi r16,lo8(3)
128 00d2 01F4 brne .+2
129 00d4 00C0 rjmp .L24
130 00d6 0430 cpi r16,lo8(4)
131 00d8 01F0 breq .+2
132 00da 00C0 rjmp .L20
133 00dc 00C0 rjmp .L25
134 .L32:
135 00de 0830 cpi r16,lo8(8)
136 00e0 01F4 brne .+2
137 00e2 00C0 rjmp .L29
138 00e4 0930 cpi r16,lo8(9)
139 00e6 00F4 brsh .L34
140 00e8 0630 cpi r16,lo8(6)
141 00ea 01F4 brne .+2
142 00ec 00C0 rjmp .L27
143 00ee 0730 cpi r16,lo8(7)
144 00f0 01F0 breq .+2
145 00f2 00C0 rjmp .L20
146 00f4 00C0 rjmp .L28
147 .L34:
148 00f6 0930 cpi r16,lo8(9)
149 00f8 01F4 brne .+2
150 00fa 00C0 rjmp .L30
151 00fc 0A30 cpi r16,lo8(10)
152 00fe 01F0 breq .+2
153 0100 00C0 rjmp .L20
154 0102 00C0 rjmp .L31
155 .L21:
156 0104 1092 0000 sts DispPtr,__zero_reg__
157 0108 80E0 ldi r24,lo8(__c.1975)
158 010a 90E0 ldi r25,hi8(__c.1975)
159 010c 9F93 push r25
160 010e 8F93 push r24
161 0110 FF92 push r15
162 0112 0E94 0000 call _printf_P
163 0116 84E1 ldi r24,lo8(20)
164 0118 8093 0000 sts DispPtr,r24
165 011c 8CE3 ldi r24,lo8(60)
166 011e 90E0 ldi r25,hi8(60)
167 0120 9F93 push r25
168 0122 8F93 push r24
169 0124 1F92 push __zero_reg__
170 0126 1F92 push __zero_reg__
171 0128 80E0 ldi r24,lo8(__c.1977)
172 012a 90E0 ldi r25,hi8(__c.1977)
173 012c 9F93 push r25
174 012e 8F93 push r24
175 0130 FF92 push r15
176 0132 0E94 0000 call _printf_P
177 0136 88E2 ldi r24,lo8(40)
178 0138 8093 0000 sts DispPtr,r24
179 013c 0E94 0000 call GetActiveParamSetNumber
180 0140 9927 clr r25
181 0142 9F93 push r25
182 0144 8F93 push r24
183 0146 80E0 ldi r24,lo8(__c.1979)
184 0148 90E0 ldi r25,hi8(__c.1979)
185 014a 9F93 push r25
186 014c 8F93 push r24
187 014e FF92 push r15
188 0150 0E94 0000 call _printf_P
189 0154 8CE3 ldi r24,lo8(60)
190 0156 8093 0000 sts DispPtr,r24
191 015a 80E0 ldi r24,lo8(__c.1981)
192 015c 90E0 ldi r25,hi8(__c.1981)
193 015e 9F93 push r25
194 0160 8F93 push r24
195 0162 FF92 push r15
196 0164 0E94 0000 call _printf_P
197 0168 00C0 rjmp .L43
198 .L22:
199 016a 8091 0000 lds r24,EE_Parameter+8
200 016e 80FF sbrs r24,0
201 0170 00C0 rjmp .L36
202 0172 1092 0000 sts DispPtr,__zero_reg__
203 0176 8091 0000 lds r24,HoehenWert
204 017a 9091 0000 lds r25,(HoehenWert)+1
205 017e 9F93 push r25
206 0180 8F93 push r24
207 0182 80E0 ldi r24,lo8(__c.1985)
208 0184 90E0 ldi r25,hi8(__c.1985)
209 0186 9F93 push r25
210 0188 8F93 push r24
211 018a 0F93 push r16
212 018c 0E94 0000 call _printf_P
213 0190 84E1 ldi r24,lo8(20)
214 0192 8093 0000 sts DispPtr,r24
215 0196 8091 0000 lds r24,SollHoehe
216 019a 9091 0000 lds r25,(SollHoehe)+1
217 019e 9F93 push r25
218 01a0 8F93 push r24
219 01a2 80E0 ldi r24,lo8(__c.1987)
220 01a4 90E0 ldi r25,hi8(__c.1987)
221 01a6 9F93 push r25
222 01a8 8F93 push r24
223 01aa 0F93 push r16
224 01ac 0E94 0000 call _printf_P
225 01b0 88E2 ldi r24,lo8(40)
226 01b2 8093 0000 sts DispPtr,r24
227 01b6 8091 0000 lds r24,MessLuftdruck
228 01ba 9091 0000 lds r25,(MessLuftdruck)+1
229 01be 9F93 push r25
230 01c0 8F93 push r24
231 01c2 80E0 ldi r24,lo8(__c.1989)
232 01c4 90E0 ldi r25,hi8(__c.1989)
233 01c6 9F93 push r25
234 01c8 8F93 push r24
235 01ca 0F93 push r16
236 01cc 0E94 0000 call _printf_P
237 01d0 8CE3 ldi r24,lo8(60)
238 01d2 8093 0000 sts DispPtr,r24
239 01d6 8091 0000 lds r24,DruckOffsetSetting
240 01da 9927 clr r25
241 01dc 9F93 push r25
242 01de 8F93 push r24
243 01e0 80E0 ldi r24,lo8(__c.1991)
244 01e2 90E0 ldi r25,hi8(__c.1991)
245 01e4 9F93 push r25
246 01e6 8F93 push r24
247 01e8 0F93 push r16
248 .L47:
249 01ea 0E94 0000 call _printf_P
250 .L44:
251 01ee 8DB7 in r24,__SP_L__
252 01f0 9EB7 in r25,__SP_H__
253 01f2 4496 adiw r24,20
254 .L42:
255 01f4 0FB6 in __tmp_reg__,__SREG__
256 01f6 F894 cli
257 01f8 9EBF out __SP_H__,r25
258 01fa 0FBE out __SREG__,__tmp_reg__
259 01fc 8DBF out __SP_L__,r24
260 01fe 00C0 rjmp .L35
261 .L36:
262 0200 84E1 ldi r24,lo8(20)
263 0202 8093 0000 sts DispPtr,r24
264 0206 80E0 ldi r24,lo8(__c.1993)
265 0208 90E0 ldi r25,hi8(__c.1993)
266 020a 9F93 push r25
267 020c 8F93 push r24
268 020e 0F93 push r16
269 0210 0E94 0000 call _printf_P
270 0214 88E2 ldi r24,lo8(40)
271 0216 8093 0000 sts DispPtr,r24
272 021a 80E0 ldi r24,lo8(__c.1995)
273 021c 90E0 ldi r25,hi8(__c.1995)
274 021e 9F93 push r25
275 0220 8F93 push r24
276 0222 0F93 push r16
277 0224 0E94 0000 call _printf_P
278 0228 8DB7 in r24,__SP_L__
279 022a 9EB7 in r25,__SP_H__
280 022c 0696 adiw r24,6
281 022e 00C0 rjmp .L42
282 .L23:
283 0230 1092 0000 sts DispPtr,__zero_reg__
284 0234 80E0 ldi r24,lo8(__c.1998)
285 0236 90E0 ldi r25,hi8(__c.1998)
286 0238 9F93 push r25
287 023a 8F93 push r24
288 023c FF92 push r15
289 023e 0E94 0000 call _printf_P
290 0242 84E1 ldi r24,lo8(20)
291 0244 8093 0000 sts DispPtr,r24
292 0248 6091 0000 lds r22,IntegralNick
293 024c 7091 0000 lds r23,(IntegralNick)+1
294 0250 8091 0000 lds r24,(IntegralNick)+2
295 0254 9091 0000 lds r25,(IntegralNick)+3
296 0258 20E0 ldi r18,lo8(1024)
297 025a 34E0 ldi r19,hi8(1024)
298 025c 40E0 ldi r20,hlo8(1024)
299 025e 50E0 ldi r21,hhi8(1024)
300 0260 0E94 0000 call __divmodsi4
301 0264 5F93 push r21
302 0266 4F93 push r20
303 0268 3F93 push r19
304 026a 2F93 push r18
305 026c 80E0 ldi r24,lo8(__c.2000)
306 026e 90E0 ldi r25,hi8(__c.2000)
307 0270 9F93 push r25
308 0272 8F93 push r24
309 0274 FF92 push r15
310 0276 0E94 0000 call _printf_P
311 027a 88E2 ldi r24,lo8(40)
312 027c 8093 0000 sts DispPtr,r24
313 0280 6091 0000 lds r22,IntegralRoll
314 0284 7091 0000 lds r23,(IntegralRoll)+1
315 0288 8091 0000 lds r24,(IntegralRoll)+2
316 028c 9091 0000 lds r25,(IntegralRoll)+3
317 0290 20E0 ldi r18,lo8(1024)
318 0292 34E0 ldi r19,hi8(1024)
319 0294 40E0 ldi r20,hlo8(1024)
320 0296 50E0 ldi r21,hhi8(1024)
321 0298 0E94 0000 call __divmodsi4
322 029c 5F93 push r21
323 029e 4F93 push r20
324 02a0 3F93 push r19
325 02a2 2F93 push r18
326 02a4 80E0 ldi r24,lo8(__c.2002)
327 02a6 90E0 ldi r25,hi8(__c.2002)
328 02a8 9F93 push r25
329 02aa 8F93 push r24
330 02ac FF92 push r15
331 02ae 0E94 0000 call _printf_P
332 02b2 8CE3 ldi r24,lo8(60)
333 02b4 8093 0000 sts DispPtr,r24
334 02b8 8091 0000 lds r24,KompassValue
335 02bc 9091 0000 lds r25,(KompassValue)+1
336 02c0 9F93 push r25
337 02c2 8F93 push r24
338 02c4 80E0 ldi r24,lo8(__c.2004)
339 02c6 90E0 ldi r25,hi8(__c.2004)
340 02c8 9F93 push r25
341 02ca 8F93 push r24
342 02cc FF92 push r15
343 02ce 0E94 0000 call _printf_P
344 02d2 8DB7 in r24,__SP_L__
345 02d4 9EB7 in r25,__SP_H__
346 02d6 4696 adiw r24,22
347 02d8 00C0 rjmp .L42
348 .L24:
349 02da 1092 0000 sts DispPtr,__zero_reg__
350 02de 8091 0000 lds r24,PPM_in+4
351 02e2 9091 0000 lds r25,(PPM_in+4)+1
352 02e6 2091 0000 lds r18,PPM_in+2
353 02ea 3091 0000 lds r19,(PPM_in+2)+1
354 02ee 9F93 push r25
355 02f0 8F93 push r24
356 02f2 3F93 push r19
357 02f4 2F93 push r18
358 02f6 80E0 ldi r24,lo8(__c.2007)
359 02f8 90E0 ldi r25,hi8(__c.2007)
360 02fa 9F93 push r25
361 02fc 8F93 push r24
362 02fe FF92 push r15
363 0300 0E94 0000 call _printf_P
364 0304 84E1 ldi r24,lo8(20)
365 0306 8093 0000 sts DispPtr,r24
366 030a 8091 0000 lds r24,PPM_in+8
367 030e 9091 0000 lds r25,(PPM_in+8)+1
368 0312 2091 0000 lds r18,PPM_in+6
369 0316 3091 0000 lds r19,(PPM_in+6)+1
370 031a 9F93 push r25
371 031c 8F93 push r24
372 031e 3F93 push r19
373 0320 2F93 push r18
374 0322 80E0 ldi r24,lo8(__c.2009)
375 0324 90E0 ldi r25,hi8(__c.2009)
376 0326 9F93 push r25
377 0328 8F93 push r24
378 032a FF92 push r15
379 032c 0E94 0000 call _printf_P
380 0330 88E2 ldi r24,lo8(40)
381 0332 8093 0000 sts DispPtr,r24
382 0336 8091 0000 lds r24,PPM_in+12
383 033a 9091 0000 lds r25,(PPM_in+12)+1
384 033e 2091 0000 lds r18,PPM_in+10
385 0342 3091 0000 lds r19,(PPM_in+10)+1
386 0346 9F93 push r25
387 0348 8F93 push r24
388 034a 3F93 push r19
389 034c 2F93 push r18
390 034e 80E0 ldi r24,lo8(__c.2011)
391 0350 90E0 ldi r25,hi8(__c.2011)
392 0352 9F93 push r25
393 0354 8F93 push r24
394 0356 FF92 push r15
395 0358 0E94 0000 call _printf_P
396 035c 8CE3 ldi r24,lo8(60)
397 035e 8093 0000 sts DispPtr,r24
398 0362 8091 0000 lds r24,PPM_in+14
399 0366 9091 0000 lds r25,(PPM_in+14)+1
400 036a 9F93 push r25
401 036c 8F93 push r24
402 036e 80E0 ldi r24,lo8(__c.2013)
403 0370 90E0 ldi r25,hi8(__c.2013)
404 0372 00C0 rjmp .L45
405 .L25:
406 0374 1092 0000 sts DispPtr,__zero_reg__
407 0378 E091 0000 lds r30,EE_Parameter+1
408 037c FF27 clr r31
409 037e EE0F lsl r30
410 0380 FF1F rol r31
411 0382 E050 subi r30,lo8(-(PPM_in))
412 0384 F040 sbci r31,hi8(-(PPM_in))
413 0386 2081 ld r18,Z
414 0388 3181 ldd r19,Z+1
415 038a E091 0000 lds r30,EE_Parameter
416 038e FF27 clr r31
417 0390 EE0F lsl r30
418 0392 FF1F rol r31
419 0394 E050 subi r30,lo8(-(PPM_in))
420 0396 F040 sbci r31,hi8(-(PPM_in))
421 0398 8081 ld r24,Z
422 039a 9181 ldd r25,Z+1
423 039c 3F93 push r19
424 039e 2F93 push r18
425 03a0 9F93 push r25
426 03a2 8F93 push r24
427 03a4 80E0 ldi r24,lo8(__c.2016)
428 03a6 90E0 ldi r25,hi8(__c.2016)
429 03a8 9F93 push r25
430 03aa 8F93 push r24
431 03ac FF92 push r15
432 03ae 0E94 0000 call _printf_P
433 03b2 84E1 ldi r24,lo8(20)
434 03b4 8093 0000 sts DispPtr,r24
435 03b8 E091 0000 lds r30,EE_Parameter+3
436 03bc FF27 clr r31
437 03be EE0F lsl r30
438 03c0 FF1F rol r31
439 03c2 E050 subi r30,lo8(-(PPM_in))
440 03c4 F040 sbci r31,hi8(-(PPM_in))
441 03c6 2081 ld r18,Z
442 03c8 3181 ldd r19,Z+1
443 03ca E091 0000 lds r30,EE_Parameter+2
444 03ce FF27 clr r31
445 03d0 EE0F lsl r30
446 03d2 FF1F rol r31
447 03d4 E050 subi r30,lo8(-(PPM_in))
448 03d6 F040 sbci r31,hi8(-(PPM_in))
449 03d8 8081 ld r24,Z
450 03da 9181 ldd r25,Z+1
451 03dc 3F93 push r19
452 03de 2F93 push r18
453 03e0 9F93 push r25
454 03e2 8F93 push r24
455 03e4 80E0 ldi r24,lo8(__c.2018)
456 03e6 90E0 ldi r25,hi8(__c.2018)
457 03e8 9F93 push r25
458 03ea 8F93 push r24
459 03ec FF92 push r15
460 03ee 0E94 0000 call _printf_P
461 03f2 88E2 ldi r24,lo8(40)
462 03f4 8093 0000 sts DispPtr,r24
463 03f8 E091 0000 lds r30,EE_Parameter+5
464 03fc FF27 clr r31
465 03fe EE0F lsl r30
466 0400 FF1F rol r31
467 0402 E050 subi r30,lo8(-(PPM_in))
468 0404 F040 sbci r31,hi8(-(PPM_in))
469 0406 2081 ld r18,Z
470 0408 3181 ldd r19,Z+1
471 040a E091 0000 lds r30,EE_Parameter+4
472 040e FF27 clr r31
473 0410 EE0F lsl r30
474 0412 FF1F rol r31
475 0414 E050 subi r30,lo8(-(PPM_in))
476 0416 F040 sbci r31,hi8(-(PPM_in))
477 0418 8081 ld r24,Z
478 041a 9181 ldd r25,Z+1
479 041c 3F93 push r19
480 041e 2F93 push r18
481 0420 9F93 push r25
482 0422 8F93 push r24
483 0424 80E0 ldi r24,lo8(__c.2020)
484 0426 90E0 ldi r25,hi8(__c.2020)
485 0428 9F93 push r25
486 042a 8F93 push r24
487 042c FF92 push r15
488 042e 0E94 0000 call _printf_P
489 0432 8CE3 ldi r24,lo8(60)
490 0434 8093 0000 sts DispPtr,r24
491 0438 E091 0000 lds r30,EE_Parameter+6
492 043c FF27 clr r31
493 043e EE0F lsl r30
494 0440 FF1F rol r31
495 0442 E050 subi r30,lo8(-(PPM_in))
496 0444 F040 sbci r31,hi8(-(PPM_in))
497 0446 8081 ld r24,Z
498 0448 9181 ldd r25,Z+1
499 044a 9F93 push r25
500 044c 8F93 push r24
501 044e 80E0 ldi r24,lo8(__c.2022)
502 0450 90E0 ldi r25,hi8(__c.2022)
503 .L45:
504 0452 9F93 push r25
505 0454 8F93 push r24
506 0456 FF92 push r15
507 0458 0E94 0000 call _printf_P
508 045c 8DB7 in r24,__SP_L__
509 045e 9EB7 in r25,__SP_H__
510 0460 4A96 adiw r24,26
511 0462 00C0 rjmp .L42
512 .L26:
513 0464 1092 0000 sts DispPtr,__zero_reg__
514 0468 80E0 ldi r24,lo8(__c.2025)
515 046a 90E0 ldi r25,hi8(__c.2025)
516 046c 9F93 push r25
517 046e 8F93 push r24
518 0470 FF92 push r15
519 0472 0E94 0000 call _printf_P
520 0476 84E1 ldi r24,lo8(20)
521 0478 8093 0000 sts DispPtr,r24
522 047c 2091 0000 lds r18,AdNeutralNick
523 0480 3091 0000 lds r19,(AdNeutralNick)+1
524 0484 8091 0000 lds r24,AccumulateNick
525 0488 9091 0000 lds r25,(AccumulateNick)+1
526 048c 6091 0000 lds r22,MessanzahlNick
527 0490 3F93 push r19
528 0492 2F93 push r18
529 0494 7727 clr r23
530 0496 0E94 0000 call __divmodhi4
531 049a 7F93 push r23
532 049c 6F93 push r22
533 049e 80E0 ldi r24,lo8(__c.2027)
534 04a0 90E0 ldi r25,hi8(__c.2027)
535 04a2 9F93 push r25
536 04a4 8F93 push r24
537 04a6 FF92 push r15
538 04a8 0E94 0000 call _printf_P
539 04ac 88E2 ldi r24,lo8(40)
540 04ae 8093 0000 sts DispPtr,r24
541 04b2 2091 0000 lds r18,AdNeutralRoll
542 04b6 3091 0000 lds r19,(AdNeutralRoll)+1
543 04ba 8091 0000 lds r24,AccumulateRoll
544 04be 9091 0000 lds r25,(AccumulateRoll)+1
545 04c2 6091 0000 lds r22,MessanzahlRoll
546 04c6 3F93 push r19
547 04c8 2F93 push r18
548 04ca 7727 clr r23
549 04cc 0E94 0000 call __divmodhi4
550 04d0 7F93 push r23
551 04d2 6F93 push r22
552 04d4 80E0 ldi r24,lo8(__c.2029)
553 04d6 90E0 ldi r25,hi8(__c.2029)
554 04d8 9F93 push r25
555 04da 8F93 push r24
556 04dc FF92 push r15
557 04de 0E94 0000 call _printf_P
558 04e2 8CE3 ldi r24,lo8(60)
559 04e4 8093 0000 sts DispPtr,r24
560 04e8 2091 0000 lds r18,AdNeutralGier
561 04ec 3091 0000 lds r19,(AdNeutralGier)+1
562 04f0 8091 0000 lds r24,AccumulateGier
563 04f4 9091 0000 lds r25,(AccumulateGier)+1
564 04f8 6091 0000 lds r22,MessanzahlGier
565 04fc 3F93 push r19
566 04fe 2F93 push r18
567 0500 7727 clr r23
568 0502 0E94 0000 call __divmodhi4
569 0506 7F93 push r23
570 0508 6F93 push r22
571 050a 80E0 ldi r24,lo8(__c.2031)
572 050c 90E0 ldi r25,hi8(__c.2031)
573 050e 00C0 rjmp .L46
574 .L27:
575 0510 1092 0000 sts DispPtr,__zero_reg__
576 0514 80E0 ldi r24,lo8(__c.2034)
577 0516 90E0 ldi r25,hi8(__c.2034)
578 0518 9F93 push r25
579 051a 8F93 push r24
580 051c FF92 push r15
581 051e 0E94 0000 call _printf_P
582 0522 84E1 ldi r24,lo8(20)
583 0524 8093 0000 sts DispPtr,r24
584 0528 2091 0000 lds r18,NeutralAccX
585 052c 3091 0000 lds r19,(NeutralAccX)+1
586 0530 8091 0000 lds r24,accumulate_AccNick
587 0534 9091 0000 lds r25,(accumulate_AccNick)+1
588 0538 6091 0000 lds r22,messanzahl_AccNick
589 053c 3F93 push r19
590 053e 2F93 push r18
591 0540 7727 clr r23
592 0542 0E94 0000 call __divmodhi4
593 0546 7F93 push r23
594 0548 6F93 push r22
595 054a 80E0 ldi r24,lo8(__c.2036)
596 054c 90E0 ldi r25,hi8(__c.2036)
597 054e 9F93 push r25
598 0550 8F93 push r24
599 0552 FF92 push r15
600 0554 0E94 0000 call _printf_P
601 0558 88E2 ldi r24,lo8(40)
602 055a 8093 0000 sts DispPtr,r24
603 055e 2091 0000 lds r18,NeutralAccY
604 0562 3091 0000 lds r19,(NeutralAccY)+1
605 0566 8091 0000 lds r24,accumulate_AccRoll
606 056a 9091 0000 lds r25,(accumulate_AccRoll)+1
607 056e 6091 0000 lds r22,messanzahl_AccRoll
608 0572 3F93 push r19
609 0574 2F93 push r18
610 0576 7727 clr r23
611 0578 0E94 0000 call __divmodhi4
612 057c 7F93 push r23
613 057e 6F93 push r22
614 0580 80E0 ldi r24,lo8(__c.2038)
615 0582 90E0 ldi r25,hi8(__c.2038)
616 0584 9F93 push r25
617 0586 8F93 push r24
618 0588 FF92 push r15
619 058a 0E94 0000 call _printf_P
620 058e 8CE3 ldi r24,lo8(60)
621 0590 8093 0000 sts DispPtr,r24
622 0594 6091 0000 lds r22,NeutralAccZ
623 0598 7091 0000 lds r23,(NeutralAccZ)+1
624 059c 8091 0000 lds r24,(NeutralAccZ)+2
625 05a0 9091 0000 lds r25,(NeutralAccZ)+3
626 05a4 0091 0000 lds r16,Aktuell_az
627 05a8 1091 0000 lds r17,(Aktuell_az)+1
628 05ac 0E94 0000 call __fixsfsi
629 05b0 7F93 push r23
630 05b2 6F93 push r22
631 05b4 1F93 push r17
632 05b6 0F93 push r16
633 05b8 80E0 ldi r24,lo8(__c.2040)
634 05ba 90E0 ldi r25,hi8(__c.2040)
635 .L46:
636 05bc 9F93 push r25
637 05be 8F93 push r24
638 05c0 FF92 push r15
639 05c2 0E94 0000 call _printf_P
640 05c6 8DB7 in r24,__SP_L__
641 05c8 9EB7 in r25,__SP_H__
642 05ca 4896 adiw r24,24
643 05cc 00C0 rjmp .L42
644 .L28:
645 05ce 84E1 ldi r24,lo8(20)
646 05d0 8093 0000 sts DispPtr,r24
647 05d4 8091 0000 lds r24,UBat
648 05d8 9091 0000 lds r25,(UBat)+1
649 05dc 9F93 push r25
650 05de 8F93 push r24
651 05e0 80E0 ldi r24,lo8(__c.2043)
652 05e2 90E0 ldi r25,hi8(__c.2043)
653 05e4 9F93 push r25
654 05e6 8F93 push r24
655 05e8 FF92 push r15
656 05ea 0E94 0000 call _printf_P
657 05ee 88E2 ldi r24,lo8(40)
658 05f0 8093 0000 sts DispPtr,r24
659 05f4 8091 0000 lds r24,SenderOkay
660 05f8 9927 clr r25
661 05fa 9F93 push r25
662 05fc 8F93 push r24
663 05fe 80E0 ldi r24,lo8(__c.2045)
664 0600 90E0 ldi r25,hi8(__c.2045)
665 0602 9F93 push r25
666 0604 8F93 push r24
667 0606 FF92 push r15
668 0608 0E94 0000 call _printf_P
669 060c 8DB7 in r24,__SP_L__
670 060e 9EB7 in r25,__SP_H__
671 0610 0A96 adiw r24,10
672 0612 00C0 rjmp .L42
673 .L29:
674 0614 1092 0000 sts DispPtr,__zero_reg__
675 0618 80E0 ldi r24,lo8(__c.2048)
676 061a 90E0 ldi r25,hi8(__c.2048)
677 061c 9F93 push r25
678 061e 8F93 push r24
679 0620 FF92 push r15
680 0622 0E94 0000 call _printf_P
681 0626 84E1 ldi r24,lo8(20)
682 0628 8093 0000 sts DispPtr,r24
683 062c 8091 0000 lds r24,KompassRichtung
684 0630 9091 0000 lds r25,(KompassRichtung)+1
685 0634 9F93 push r25
686 0636 8F93 push r24
687 0638 80E0 ldi r24,lo8(__c.2050)
688 063a 90E0 ldi r25,hi8(__c.2050)
689 063c 9F93 push r25
690 063e 8F93 push r24
691 0640 FF92 push r15
692 0642 0E94 0000 call _printf_P
693 0646 88E2 ldi r24,lo8(40)
694 0648 8093 0000 sts DispPtr,r24
695 064c 8091 0000 lds r24,KompassValue
696 0650 9091 0000 lds r25,(KompassValue)+1
697 0654 9F93 push r25
698 0656 8F93 push r24
699 0658 80E0 ldi r24,lo8(__c.2052)
700 065a 90E0 ldi r25,hi8(__c.2052)
701 065c 9F93 push r25
702 065e 8F93 push r24
703 0660 FF92 push r15
704 0662 0E94 0000 call _printf_P
705 0666 8CE3 ldi r24,lo8(60)
706 0668 8093 0000 sts DispPtr,r24
707 066c 8091 0000 lds r24,KompassStartwert
708 0670 9091 0000 lds r25,(KompassStartwert)+1
709 0674 9F93 push r25
710 0676 8F93 push r24
711 0678 80E0 ldi r24,lo8(__c.2054)
712 067a 90E0 ldi r25,hi8(__c.2054)
713 067c 9F93 push r25
714 067e 8F93 push r24
715 0680 FF92 push r15
716 0682 0E94 0000 call _printf_P
717 .L43:
718 0686 8DB7 in r24,__SP_L__
719 0688 9EB7 in r25,__SP_H__
720 068a 4296 adiw r24,18
721 068c 00C0 rjmp .L42
722 .L30:
723 068e 1092 0000 sts DispPtr,__zero_reg__
724 0692 8091 0000 lds r24,Poti1
725 0696 9091 0000 lds r25,(Poti1)+1
726 069a 9F93 push r25
727 069c 8F93 push r24
728 069e 80E0 ldi r24,lo8(__c.2057)
729 06a0 90E0 ldi r25,hi8(__c.2057)
730 06a2 9F93 push r25
731 06a4 8F93 push r24
732 06a6 FF92 push r15
733 06a8 0E94 0000 call _printf_P
734 06ac 84E1 ldi r24,lo8(20)
735 06ae 8093 0000 sts DispPtr,r24
736 06b2 8091 0000 lds r24,Poti2
737 06b6 9091 0000 lds r25,(Poti2)+1
738 06ba 9F93 push r25
739 06bc 8F93 push r24
740 06be 80E0 ldi r24,lo8(__c.2059)
741 06c0 90E0 ldi r25,hi8(__c.2059)
742 06c2 9F93 push r25
743 06c4 8F93 push r24
744 06c6 FF92 push r15
745 06c8 0E94 0000 call _printf_P
746 06cc 88E2 ldi r24,lo8(40)
747 06ce 8093 0000 sts DispPtr,r24
748 06d2 8091 0000 lds r24,Poti3
749 06d6 9091 0000 lds r25,(Poti3)+1
750 06da 9F93 push r25
751 06dc 8F93 push r24
752 06de 80E0 ldi r24,lo8(__c.2061)
753 06e0 90E0 ldi r25,hi8(__c.2061)
754 06e2 9F93 push r25
755 06e4 8F93 push r24
756 06e6 FF92 push r15
757 06e8 0E94 0000 call _printf_P
758 06ec 8CE3 ldi r24,lo8(60)
759 06ee 8093 0000 sts DispPtr,r24
760 06f2 8091 0000 lds r24,Poti4
761 06f6 9091 0000 lds r25,(Poti4)+1
762 06fa 9F93 push r25
763 06fc 8F93 push r24
764 06fe 80E0 ldi r24,lo8(__c.2063)
765 0700 90E0 ldi r25,hi8(__c.2063)
766 0702 9F93 push r25
767 0704 8F93 push r24
768 0706 FF92 push r15
769 0708 00C0 rjmp .L47
770 .L31:
771 070a 1092 0000 sts DispPtr,__zero_reg__
772 070e 80E0 ldi r24,lo8(__c.2066)
773 0710 90E0 ldi r25,hi8(__c.2066)
774 0712 9F93 push r25
775 0714 8F93 push r24
776 0716 FF92 push r15
777 0718 0E94 0000 call _printf_P
778 071c 84E1 ldi r24,lo8(20)
779 071e 8093 0000 sts DispPtr,r24
780 0722 8091 0000 lds r24,Parameter_ServoNickControl
781 0726 9927 clr r25
782 0728 9F93 push r25
783 072a 8F93 push r24
784 072c 80E0 ldi r24,lo8(__c.2068)
785 072e 90E0 ldi r25,hi8(__c.2068)
786 0730 9F93 push r25
787 0732 8F93 push r24
788 0734 FF92 push r15
789 0736 0E94 0000 call _printf_P
790 073a 88E2 ldi r24,lo8(40)
791 073c 8093 0000 sts DispPtr,r24
792 0740 8091 0000 lds r24,ServoValue
793 0744 9091 0000 lds r25,(ServoValue)+1
794 0748 9F93 push r25
795 074a 8F93 push r24
796 074c 80E0 ldi r24,lo8(__c.2070)
797 074e 90E0 ldi r25,hi8(__c.2070)
798 0750 9F93 push r25
799 0752 8F93 push r24
800 0754 FF92 push r15
801 0756 0E94 0000 call _printf_P
802 075a 8CE3 ldi r24,lo8(60)
803 075c 8093 0000 sts DispPtr,r24
804 0760 8091 0000 lds r24,EE_Parameter+36
805 0764 9927 clr r25
806 0766 9F93 push r25
807 0768 8F93 push r24
808 076a 8091 0000 lds r24,EE_Parameter+35
809 076e 9927 clr r25
810 0770 9F93 push r25
811 0772 8F93 push r24
812 0774 80E0 ldi r24,lo8(__c.2072)
813 0776 90E0 ldi r25,hi8(__c.2072)
814 0778 9F93 push r25
815 077a 8F93 push r24
816 077c FF92 push r15
817 077e 0E94 0000 call _printf_P
818 0782 00C0 rjmp .L44
819 .L20:
820 0784 0150 subi r16,lo8(-(-1))
821 0786 0093 0000 sts MaxMenue.1970,r16
822 078a 1092 0000 sts MenuePunkt.1971,__zero_reg__
823 .L35:
824 078e 1092 0000 sts RemoteTasten,__zero_reg__
825 /* epilogue: frame size=0 */
826 0792 1F91 pop r17
827 0794 0F91 pop r16
828 0796 FF90 pop r15
829 0798 0895 ret
830 /* epilogue end (size=4) */
831 /* function Menu size 964 (957) */
833 .global TestInt
834 .global TestInt
835 .section .bss
838 TestInt:
839 0000 0000 .skip 2,0
840 .global Array
841 .data
844 Array:
845 0000 01 .byte 1
846 0001 02 .byte 2
847 0002 03 .byte 3
848 0003 04 .byte 4
849 0004 05 .byte 5
850 0005 06 .byte 6
851 0006 07 .byte 7
852 0007 08 .byte 8
853 0008 09 .byte 9
854 0009 0A .byte 10
855 .global DisplayBuff
858 DisplayBuff:
859 000a 4861 6C6C .string "Hallo Welt"
859 6F20 5765
859 6C74 00
860 0015 0000 0000 .skip 69,0
860 0000 0000
860 0000 0000
860 0000 0000
860 0000 0000
861 .global DispPtr
862 .global DispPtr
863 .section .bss
866 DispPtr:
867 0002 00 .skip 1,0
868 .global RemoteTasten
869 .global RemoteTasten
872 RemoteTasten:
873 0003 00 .skip 1,0
874 .section .progmem.data,"a",@progbits
877 __c.2072:
878 0000 5261 6E67 .string "Range:%3i-%3i"
878 653A 2533
878 692D 2533
878 6900
881 __c.2070:
882 000e 5374 656C .string "Stellung: %3i"
882 6C75 6E67
882 3A20 2533
882 6900
885 __c.2068:
886 001c 5365 7470 .string "Setpoint %3i"
886 6F69 6E74
886 2020 2533
886 6900
889 __c.2066:
890 002a 5365 7276 .string "Servo "
890 6F20 2000
893 __c.2063:
894 0032 506F 7469 .string "Poti4: %3i"
894 343A 2020
894 2533 6900
897 __c.2061:
898 003e 506F 7469 .string "Poti3: %3i"
898 333A 2020
898 2533 6900
901 __c.2059:
902 004a 506F 7469 .string "Poti2: %3i"
902 323A 2020
902 2533 6900
905 __c.2057:
906 0056 506F 7469 .string "Poti1: %3i"
906 313A 2020
906 2533 6900
909 __c.2054:
910 0062 5374 6172 .string "Start: %5i"
910 743A 2020
910 2020 2025
910 3569 00
913 __c.2052:
914 0071 4D65 7373 .string "Messwert: %5i"
914 7765 7274
914 3A20 2025
914 3569 00
917 __c.2050:
918 0080 5269 6368 .string "Richtung: %5i"
918 7475 6E67
918 3A20 2025
918 3569 00
921 __c.2048:
922 008f 4B6F 6D70 .string "Kompass "
922 6173 7320
922 2020 2020
922 2020 00
925 __c.2045:
926 009e 456D 7066 .string "Empf.Pegel:%5i"
926 2E50 6567
926 656C 3A25
926 3569 00
929 __c.2043:
930 00ad 5370 616E .string "Spannung: %5i"
930 6E75 6E67
930 3A20 2025
930 3569 00
933 __c.2040:
934 00bc 486F 6368 .string "Hoch %4i (%3i)"
934 2025 3469
934 2028 2533
934 6929 00
937 __c.2038:
938 00cb 526F 6C6C .string "Roll %4i (%3i)"
938 2025 3469
938 2028 2533
938 6929 00
941 __c.2036:
942 00da 4E69 636B .string "Nick %4i (%3i)"
942 2025 3469
942 2028 2533
942 6929 00
945 __c.2034:
946 00e9 4143 4320 .string "ACC - Sensor"
946 2D20 5365
946 6E73 6F72
946 00
949 __c.2031:
950 00f6 4769 6572 .string "Gier %4i (%3i)"
950 2025 3469
950 2028 2533
950 6929 00
953 __c.2029:
954 0105 526F 6C6C .string "Roll %4i (%3i)"
954 2025 3469
954 2028 2533
954 6929 00
957 __c.2027:
958 0114 4E69 636B .string "Nick %4i (%3i)"
958 2025 3469
958 2028 2533
958 6929 00
961 __c.2025:
962 0123 4779 726F .string "Gyro - Sensor"
962 202D 2053
962 656E 736F
962 7200
965 __c.2022:
966 0131 5033 3A25 .string "P3:%4i Kan\344le "
966 3469 2020
966 4B61 6EE4
966 6C65 2000
969 __c.2020:
970 0141 5031 3A25 .string "P1:%4i P2:%4i "
970 3469 2020
970 5032 3A25
970 3469 2000
973 __c.2018:
974 0151 4773 3A25 .string "Gs:%4i Gi:%4i "
974 3469 2020
974 4769 3A25
974 3469 2000
977 __c.2016:
978 0161 4E69 3A25 .string "Ni:%4i Ro:%4i "
978 3469 2020
978 526F 3A25
978 3469 2000
981 __c.2013:
982 0171 4B37 3A25 .string "K7:%4i Kan\344le "
982 3469 2020
982 4B61 6EE4
982 6C65 2000
985 __c.2011:
986 0181 4B35 3A25 .string "K5:%4i K6:%4i "
986 3469 2020
986 4B36 3A25
986 3469 2000
989 __c.2009:
990 0191 4B33 3A25 .string "K3:%4i K4:%4i "
990 3469 2020
990 4B34 3A25
990 3469 2000
993 __c.2007:
994 01a1 4B31 3A25 .string "K1:%4i K2:%4i "
994 3469 2020
994 4B32 3A25
994 3469 2000
997 __c.2004:
998 01b1 4B6F 6D70 .string "Kompass: %5i"
998 6173 733A
998 2020 2025
998 3569 00
1001 __c.2002:
1002 01c0 526F 6C6C .string "Roll: %5i"
1002 3A20 2020
1002 2020 2025
1002 3569 00
1005 __c.2000:
1006 01cf 4E69 636B .string "Nick: %5i"
1006 3A20 2020
1006 2020 2025
1006 3569 00
1009 __c.1998:
1010 01de 616B 742E .string "akt. Lage"
1010 204C 6167
1010 6500
1013 __c.1995:
1014 01e8 48F6 6865 .string "H\366henregelung"
1014 6E72 6567
1014 656C 756E
1014 6700
1017 __c.1993:
1018 01f6 4B65 696E .string "Keine "
1018 6520 00
1021 __c.1991:
1022 01fd 4F66 6620 .string "Off : %5i"
1022 2020 2020
1022 203A 2025
1022 3569 00
1025 __c.1989:
1026 020c 4C75 6674 .string "Luftdruck: %5i"
1026 6472 7563
1026 6B3A 2025
1026 3569 00
1029 __c.1987:
1030 021b 536F 6C6C .string "SollHoehe: %5i"
1030 486F 6568
1030 653A 2025
1030 3569 00
1033 __c.1985:
1034 022a 486F 6568 .string "Hoehe: %5i"
1034 653A 2020
1034 2020 2025
1034 3569 00
1037 __c.1981:
1038 0239 2863 2920 .string "(c) Holger Buss"
1038 486F 6C67
1038 6572 2042
1038 7573 7300
1041 __c.1979:
1042 0249 5365 7474 .string "Setting: %d "
1042 696E 673A
1042 2025 6420
1042 00
1045 __c.1977:
1046 0256 5625 642E .string "V%d.%d"
1046 2564 00
1049 __c.1975:
1050 025d 2B2B 204D .string "++ MikroKopter ++"
1050 696B 726F
1050 4B6F 7074
1050 6572 202B
1050 2B00
1053 __c.1972:
1054 026f 5B25 695D .string "[%i]"
1054 00
1055 .lcomm MenuePunkt.1971,1
1056 .data
1059 MaxMenue.1970:
1060 005a 0A .byte 10
1061 .comm DiffNick,2,1
1062 .comm DiffRoll,2,1
1063 .comm SenderOkay,1,1
1064 .comm CosinusNickWinkel,1,1
1065 .comm CosinusRollWinkel,1,1
1066 .comm durchschnitt_northing,4,1
1067 .comm durchschnitt_easting,4,1
1068 .comm gps_p,2,1
1069 .comm gps_d,2,1
1070 .comm skal,2,1
1071 .comm gps_gethome,2,1
1072 .comm Timeout,1,1
1073 .comm IntegralNick,4,1
1074 .comm IntegralNick2,4,1
1075 .comm IntegralRoll,4,1
1076 .comm IntegralRoll2,4,1
1077 .comm Mess_IntegralNick,4,1
1078 .comm Mess_IntegralNick2,4,1
1079 .comm Mess_IntegralRoll,4,1
1080 .comm Mess_IntegralRoll2,4,1
1081 .comm Integral_Gier,4,1
1082 .comm Mess_Integral_Gier,4,1
1083 .comm h,1,1
1084 .comm m,1,1
1085 .comm s,1,1
1086 .comm Motor_Vorne,1,1
1087 .comm Motor_Hinten,1,1
1088 .comm Motor_Rechts,1,1
1089 .comm Motor_Links,1,1
1090 .comm Count,1,1
1091 .comm MotorWert,5,1
1092 .comm StickNick,2,1
1093 .comm StickRoll,2,1
1094 .comm StickGier,2,1
1095 .comm MotorenEin,1,1
1096 /* File "menu.c": code 973 = 0x03cd ( 965), prologues 3, epilogues 5 */
DEFINED SYMBOLS
*ABS*:00000000 menu.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:13 .text:00000000 LcdClear
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:858 .data:0000000a DisplayBuff
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:32 .text:00000012 Menu
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:872 .bss:00000003 RemoteTasten
.bss:00000004 MenuePunkt.1971
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1059 .data:0000005a MaxMenue.1970
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:866 .bss:00000002 DispPtr
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1053 .progmem.data:0000026f __c.1972
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1049 .progmem.data:0000025d __c.1975
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1045 .progmem.data:00000256 __c.1977
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1041 .progmem.data:00000249 __c.1979
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1037 .progmem.data:00000239 __c.1981
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1033 .progmem.data:0000022a __c.1985
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1029 .progmem.data:0000021b __c.1987
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1025 .progmem.data:0000020c __c.1989
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1021 .progmem.data:000001fd __c.1991
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1017 .progmem.data:000001f6 __c.1993
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1013 .progmem.data:000001e8 __c.1995
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1009 .progmem.data:000001de __c.1998
*COM*:00000004 IntegralNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1005 .progmem.data:000001cf __c.2000
*COM*:00000004 IntegralRoll
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:1001 .progmem.data:000001c0 __c.2002
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:997 .progmem.data:000001b1 __c.2004
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:993 .progmem.data:000001a1 __c.2007
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:989 .progmem.data:00000191 __c.2009
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:985 .progmem.data:00000181 __c.2011
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:981 .progmem.data:00000171 __c.2013
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:977 .progmem.data:00000161 __c.2016
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:973 .progmem.data:00000151 __c.2018
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:969 .progmem.data:00000141 __c.2020
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:965 .progmem.data:00000131 __c.2022
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:961 .progmem.data:00000123 __c.2025
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:957 .progmem.data:00000114 __c.2027
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:953 .progmem.data:00000105 __c.2029
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:949 .progmem.data:000000f6 __c.2031
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:945 .progmem.data:000000e9 __c.2034
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:941 .progmem.data:000000da __c.2036
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:937 .progmem.data:000000cb __c.2038
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:933 .progmem.data:000000bc __c.2040
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:929 .progmem.data:000000ad __c.2043
*COM*:00000001 SenderOkay
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:925 .progmem.data:0000009e __c.2045
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:921 .progmem.data:0000008f __c.2048
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:917 .progmem.data:00000080 __c.2050
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:913 .progmem.data:00000071 __c.2052
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:909 .progmem.data:00000062 __c.2054
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:905 .progmem.data:00000056 __c.2057
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:901 .progmem.data:0000004a __c.2059
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:897 .progmem.data:0000003e __c.2061
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:893 .progmem.data:00000032 __c.2063
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:889 .progmem.data:0000002a __c.2066
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:885 .progmem.data:0000001c __c.2068
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:881 .progmem.data:0000000e __c.2070
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:877 .progmem.data:00000000 __c.2072
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:838 .bss:00000000 TestInt
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cc3clghb.s:844 .data:00000000 Array
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
_printf_P
GetActiveParamSetNumber
EE_Parameter
HoehenWert
SollHoehe
MessLuftdruck
DruckOffsetSetting
__divmodsi4
KompassValue
PPM_in
AdNeutralNick
AccumulateNick
MessanzahlNick
__divmodhi4
AdNeutralRoll
AccumulateRoll
MessanzahlRoll
AdNeutralGier
AccumulateGier
MessanzahlGier
NeutralAccX
accumulate_AccNick
messanzahl_AccNick
NeutralAccY
accumulate_AccRoll
messanzahl_AccRoll
NeutralAccZ
Aktuell_az
__fixsfsi
UBat
KompassRichtung
KompassStartwert
Poti1
Poti2
Poti3
Poti4
Parameter_ServoNickControl
ServoValue
/branches/chris_hallo2/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/chris_hallo2/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/chris_hallo2/printf_P.d
0,0 → 1,2
printf_P.o printf_P.d : printf_P.c main.h old_macros.h _settings.h printf_P.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/chris_hallo2/printf_P.lst
0,0 → 1,997
1 .file "printf_P.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global Putchar
13 Putchar:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 0000 982F mov r25,r24
17 0002 8091 0000 lds r24,PrintZiel
18 0006 8130 cpi r24,lo8(1)
19 0008 01F4 brne .L2
20 000a 8091 0000 lds r24,DispPtr
21 000e E82F mov r30,r24
22 0010 FF27 clr r31
23 0012 E050 subi r30,lo8(-(DisplayBuff))
24 0014 F040 sbci r31,hi8(-(DisplayBuff))
25 0016 9083 st Z,r25
26 0018 8F5F subi r24,lo8(-(1))
27 001a 8093 0000 sts DispPtr,r24
28 001e 21E0 ldi r18,lo8(1)
29 0020 30E0 ldi r19,hi8(1)
30 0022 00C0 rjmp .L4
31 .L2:
32 0024 892F mov r24,r25
33 0026 0E94 0000 call uart_putchar
34 002a 282F mov r18,r24
35 002c 3327 clr r19
36 .L4:
37 002e C901 movw r24,r18
38 /* epilogue: frame size=0 */
39 0030 0895 ret
40 /* epilogue end (size=1) */
41 /* function Putchar size 25 (24) */
43 .global PAD_0
45 PAD_0:
46 /* prologue: frame size=0 */
47 0032 1F93 push r17
48 /* prologue end (size=1) */
49 0034 182F mov r17,r24
50 0036 00C0 rjmp .L7
51 .L8:
52 0038 80E3 ldi r24,lo8(48)
53 003a 0E94 0000 call Putchar
54 003e 1150 subi r17,lo8(-(-1))
55 .L7:
56 0040 1116 cp __zero_reg__,r17
57 0042 04F0 brlt .L8
58 /* epilogue: frame size=0 */
59 0044 1F91 pop r17
60 0046 0895 ret
61 /* epilogue end (size=2) */
62 /* function PAD_0 size 11 (8) */
64 .global PAD_SP
66 PAD_SP:
67 /* prologue: frame size=0 */
68 0048 1F93 push r17
69 /* prologue end (size=1) */
70 004a 182F mov r17,r24
71 004c 00C0 rjmp .L12
72 .L13:
73 004e 80E2 ldi r24,lo8(32)
74 0050 0E94 0000 call Putchar
75 0054 1150 subi r17,lo8(-(-1))
76 .L12:
77 0056 1116 cp __zero_reg__,r17
78 0058 04F0 brlt .L13
79 /* epilogue: frame size=0 */
80 005a 1F91 pop r17
81 005c 0895 ret
82 /* epilogue end (size=2) */
83 /* function PAD_SP size 11 (8) */
85 .global PRINTP
87 PRINTP:
88 /* prologue: frame size=0 */
89 005e 0F93 push r16
90 0060 1F93 push r17
91 0062 CF93 push r28
92 0064 DF93 push r29
93 /* prologue end (size=4) */
94 0066 8C01 movw r16,r24
95 0068 EB01 movw r28,r22
96 006a 00C0 rjmp .L17
97 .L18:
98 006c F801 movw r30,r16
99 006e 0F5F subi r16,lo8(-(1))
100 0070 1F4F sbci r17,hi8(-(1))
101 /* #APP */
102 0072 E491 lpm r30, Z
103
104 /* #NOAPP */
105 0074 8E2F mov r24,r30
106 0076 0E94 0000 call Putchar
107 007a 2197 sbiw r28,1
108 .L17:
109 007c 2097 sbiw r28,0
110 007e 01F4 brne .L18
111 /* epilogue: frame size=0 */
112 0080 DF91 pop r29
113 0082 CF91 pop r28
114 0084 1F91 pop r17
115 0086 0F91 pop r16
116 0088 0895 ret
117 /* epilogue end (size=5) */
118 /* function PRINTP size 25 (16) */
120 .global PRINT
122 PRINT:
123 /* prologue: frame size=0 */
124 008a 0F93 push r16
125 008c 1F93 push r17
126 008e CF93 push r28
127 0090 DF93 push r29
128 /* prologue end (size=4) */
129 0092 8C01 movw r16,r24
130 0094 EB01 movw r28,r22
131 0096 00C0 rjmp .L22
132 .L23:
133 0098 F801 movw r30,r16
134 009a 8191 ld r24,Z+
135 009c 8F01 movw r16,r30
136 009e 0E94 0000 call Putchar
137 00a2 2197 sbiw r28,1
138 .L22:
139 00a4 2097 sbiw r28,0
140 00a6 01F4 brne .L23
141 /* epilogue: frame size=0 */
142 00a8 DF91 pop r29
143 00aa CF91 pop r28
144 00ac 1F91 pop r17
145 00ae 0F91 pop r16
146 00b0 0895 ret
147 /* epilogue end (size=5) */
148 /* function PRINT size 20 (11) */
150 .global _printf_P
152 _printf_P:
153 /* prologue: frame size=51 */
154 00b2 2F92 push r2
155 00b4 3F92 push r3
156 00b6 4F92 push r4
157 00b8 5F92 push r5
158 00ba 6F92 push r6
159 00bc 7F92 push r7
160 00be 8F92 push r8
161 00c0 9F92 push r9
162 00c2 AF92 push r10
163 00c4 BF92 push r11
164 00c6 CF92 push r12
165 00c8 DF92 push r13
166 00ca EF92 push r14
167 00cc FF92 push r15
168 00ce 0F93 push r16
169 00d0 1F93 push r17
170 00d2 CF93 push r28
171 00d4 DF93 push r29
172 00d6 CDB7 in r28,__SP_L__
173 00d8 DEB7 in r29,__SP_H__
174 00da E397 sbiw r28,51
175 00dc 0FB6 in __tmp_reg__,__SREG__
176 00de F894 cli
177 00e0 DEBF out __SP_H__,r29
178 00e2 0FBE out __SREG__,__tmp_reg__
179 00e4 CDBF out __SP_L__,r28
180 /* prologue end (size=26) */
181 00e6 2996 adiw r28,72-63
182 00e8 8FAD ldd r24,Y+63
183 00ea 2997 sbiw r28,72-63
184 00ec 8093 0000 sts PrintZiel,r24
185 00f0 CE01 movw r24,r28
186 00f2 855B subi r24,lo8(-(75))
187 00f4 9F4F sbci r25,hi8(-(75))
188 00f6 9D83 std Y+5,r25
189 00f8 8C83 std Y+4,r24
190 00fa 2B96 adiw r28,73-62
191 00fc 8EAD ldd r24,Y+62
192 00fe 9FAD ldd r25,Y+63
193 0100 2B97 sbiw r28,73-62
194 0102 9FA7 std Y+47,r25
195 0104 8EA7 std Y+46,r24
196 0106 2224 clr r2
197 0108 3324 clr r3
198 010a 2101 movw r4,r2
199 010c 00C0 rjmp .L27
200 .L28:
201 010e 1301 movw r2,r6
202 0110 2401 movw r4,r8
203 .L27:
204 0112 0EA5 ldd r16,Y+46
205 0114 1FA5 ldd r17,Y+47
206 0116 00C0 rjmp .L29
207 .L30:
208 0118 0F5F subi r16,lo8(-(1))
209 011a 1F4F sbci r17,hi8(-(1))
210 .L29:
211 011c F801 movw r30,r16
212 /* #APP */
213 011e F490 lpm r15, Z
214
215 /* #NOAPP */
216 0120 FF20 tst r15
217 0122 01F0 breq .L31
218 0124 F5E2 ldi r31,lo8(37)
219 0126 FF16 cp r15,r31
220 0128 01F4 brne .L30
221 .L31:
222 012a B801 movw r22,r16
223 012c 8EA5 ldd r24,Y+46
224 012e 9FA5 ldd r25,Y+47
225 0130 681B sub r22,r24
226 0132 790B sbc r23,r25
227 0134 01F0 breq .L33
228 0136 0E94 0000 call PRINTP
229 .L33:
230 013a FF20 tst r15
231 013c 01F4 brne .+2
232 013e 00C0 rjmp .L152
233 0140 0F5F subi r16,lo8(-(1))
234 0142 1F4F sbci r17,hi8(-(1))
235 0144 1FA7 std Y+47,r17
236 0146 0EA7 std Y+46,r16
237 0148 1982 std Y+1,__zero_reg__
238 014a AC81 ldd r26,Y+4
239 014c BD81 ldd r27,Y+5
240 014e 1BAA std Y+51,__zero_reg__
241 0150 1AAA std Y+50,__zero_reg__
242 0152 9FEF ldi r25,lo8(-1)
243 0154 99AB std Y+49,r25
244 .L174:
245 0156 EEA5 ldd r30,Y+46
246 0158 FFA5 ldd r31,Y+47
247 015a CF01 movw r24,r30
248 015c 0196 adiw r24,1
249 015e 9FA7 std Y+47,r25
250 0160 8EA7 std Y+46,r24
251 /* #APP */
252 0162 B490 lpm r11, Z
253
254 /* #NOAPP */
255 .L175:
256 0164 95E7 ldi r25,lo8(117)
257 0166 B916 cp r11,r25
258 0168 01F0 breq .L39
259 016a 8B2D mov r24,r11
260 016c 8062 ori r24,lo8(32)
261 016e 8837 cpi r24,lo8(120)
262 0170 01F4 brne .L41
263 .L39:
264 0172 EBA9 ldd r30,Y+51
265 0174 E0FF sbrs r30,0
266 0176 00C0 rjmp .L42
267 0178 2D90 ld r2,X+
268 017a 3D90 ld r3,X+
269 017c 4D90 ld r4,X+
270 017e 5C90 ld r5,X
271 0180 1397 sbiw r26,3
272 0182 1496 adiw r26,4
273 0184 00C0 rjmp .L41
274 .L42:
275 0186 8D91 ld r24,X+
276 0188 9C91 ld r25,X
277 018a 1197 sbiw r26,1
278 018c 1C01 movw r2,r24
279 018e 4424 clr r4
280 0190 5524 clr r5
281 0192 1296 adiw r26,2
282 .L41:
283 0194 F0E2 ldi r31,lo8(32)
284 0196 BF16 cp r11,r31
285 0198 01F4 brne .L44
286 019a 8981 ldd r24,Y+1
287 019c 8823 tst r24
288 019e 01F4 brne .L174
289 01a0 00C0 rjmp .L156
290 .L44:
291 01a2 83E2 ldi r24,lo8(35)
292 01a4 B816 cp r11,r24
293 01a6 01F4 brne .+2
294 01a8 00C0 rjmp .L155
295 01aa 9AE2 ldi r25,lo8(42)
296 01ac B916 cp r11,r25
297 01ae 01F0 breq .L49
298 01b0 EDE2 ldi r30,lo8(45)
299 01b2 BE16 cp r11,r30
300 01b4 01F4 brne .L164
301 01b6 00C0 rjmp .L51
302 .L49:
303 01b8 FD01 movw r30,r26
304 01ba 1296 adiw r26,2
305 01bc E081 ld r30,Z
306 01be EAAB std Y+50,r30
307 01c0 E7FF sbrs r30,7
308 01c2 00C0 rjmp .L174
309 01c4 E195 neg r30
310 01c6 EAAB std Y+50,r30
311 .L51:
312 01c8 FBA9 ldd r31,Y+51
313 01ca F061 ori r31,lo8(16)
314 01cc FF7D andi r31,lo8(-33)
315 01ce 00C0 rjmp .L169
316 .L164:
317 01d0 8BE2 ldi r24,lo8(43)
318 01d2 B816 cp r11,r24
319 01d4 01F4 brne .+2
320 01d6 00C0 rjmp .L156
321 01d8 9EE2 ldi r25,lo8(46)
322 01da B916 cp r11,r25
323 01dc 01F4 brne .L56
324 01de 2EA5 ldd r18,Y+46
325 01e0 3FA5 ldd r19,Y+47
326 01e2 2F5F subi r18,lo8(-(1))
327 01e4 3F4F sbci r19,hi8(-(1))
328 01e6 EEA5 ldd r30,Y+46
329 01e8 FFA5 ldd r31,Y+47
330 /* #APP */
331 01ea 8491 lpm r24, Z
332
333 /* #NOAPP */
334 01ec 8A32 cpi r24,lo8(42)
335 01ee 01F0 breq .L58
336 01f0 B82E mov r11,r24
337 01f2 20E0 ldi r18,lo8(0)
338 01f4 30E0 ldi r19,hi8(0)
339 01f6 00C0 rjmp .L60
340 .L58:
341 01f8 FD01 movw r30,r26
342 01fa 1296 adiw r26,2
343 01fc 4081 ld r20,Z
344 01fe 5181 ldd r21,Z+1
345 0200 57FF sbrs r21,7
346 0202 00C0 rjmp .L61
347 0204 4FEF ldi r20,lo8(-1)
348 0206 5FEF ldi r21,hi8(-1)
349 .L61:
350 0208 49AB std Y+49,r20
351 020a 3FA7 std Y+47,r19
352 020c 2EA7 std Y+46,r18
353 020e 00C0 rjmp .L174
354 .L62:
355 0210 C901 movw r24,r18
356 0212 03E0 ldi r16,3
357 0214 880F 1: lsl r24
358 0216 991F rol r25
359 0218 0A95 dec r16
360 021a 01F4 brne 1b
361 021c 220F lsl r18
362 021e 331F rol r19
363 0220 280F add r18,r24
364 0222 391F adc r19,r25
365 0224 2B0D add r18,r11
366 0226 311D adc r19,__zero_reg__
367 0228 2053 subi r18,lo8(-(-48))
368 022a 3040 sbci r19,hi8(-(-48))
369 /* #APP */
370 022c B490 lpm r11, Z
371
372 /* #NOAPP */
373 .L60:
374 022e 3196 adiw r30,1
375 0230 8B2D mov r24,r11
376 0232 8053 subi r24,lo8(-(-48))
377 0234 8A30 cpi r24,lo8(10)
378 0236 00F0 brlo .L62
379 0238 FFA7 std Y+47,r31
380 023a EEA7 std Y+46,r30
381 023c A901 movw r20,r18
382 023e 37FF sbrs r19,7
383 0240 00C0 rjmp .L64
384 0242 4FEF ldi r20,lo8(-1)
385 0244 5FEF ldi r21,hi8(-1)
386 .L64:
387 0246 49AB std Y+49,r20
388 0248 00C0 rjmp .L175
389 .L56:
390 024a F0E3 ldi r31,lo8(48)
391 024c BF16 cp r11,r31
392 024e 01F4 brne .L65
393 0250 8BA9 ldd r24,Y+51
394 0252 84FD sbrc r24,4
395 0254 00C0 rjmp .L174
396 0256 8062 ori r24,lo8(32)
397 0258 8BAB std Y+51,r24
398 025a 00C0 rjmp .L174
399 .L65:
400 025c 8B2D mov r24,r11
401 025e 8153 subi r24,lo8(-(-49))
402 0260 8930 cpi r24,lo8(9)
403 0262 00F4 brsh .L68
404 0264 20E0 ldi r18,lo8(0)
405 0266 30E0 ldi r19,hi8(0)
406 .L70:
407 0268 C901 movw r24,r18
408 026a F3E0 ldi r31,3
409 026c 880F 1: lsl r24
410 026e 991F rol r25
411 0270 FA95 dec r31
412 0272 01F4 brne 1b
413 0274 220F lsl r18
414 0276 331F rol r19
415 0278 280F add r18,r24
416 027a 391F adc r19,r25
417 027c 2B0D add r18,r11
418 027e 311D adc r19,__zero_reg__
419 0280 2053 subi r18,lo8(-(-48))
420 0282 3040 sbci r19,hi8(-(-48))
421 0284 EEA5 ldd r30,Y+46
422 0286 FFA5 ldd r31,Y+47
423 0288 CF01 movw r24,r30
424 028a 0196 adiw r24,1
425 028c 9FA7 std Y+47,r25
426 028e 8EA7 std Y+46,r24
427 /* #APP */
428 0290 B490 lpm r11, Z
429
430 /* #NOAPP */
431 0292 8B2D mov r24,r11
432 0294 8053 subi r24,lo8(-(-48))
433 0296 8A30 cpi r24,lo8(10)
434 0298 00F0 brlo .L70
435 029a 2AAB std Y+50,r18
436 029c 00C0 rjmp .L175
437 .L68:
438 029e 98E6 ldi r25,lo8(104)
439 02a0 B916 cp r11,r25
440 02a2 01F4 brne .L72
441 02a4 EBA9 ldd r30,Y+51
442 02a6 E460 ori r30,lo8(4)
443 02a8 EBAB std Y+51,r30
444 02aa 00C0 rjmp .L174
445 .L156:
446 02ac B982 std Y+1,r11
447 02ae 00C0 rjmp .L174
448 .L155:
449 02b0 FBA9 ldd r31,Y+51
450 02b2 F860 ori r31,lo8(8)
451 .L169:
452 02b4 FBAB std Y+51,r31
453 02b6 00C0 rjmp .L174
454 .L72:
455 02b8 8CE6 ldi r24,lo8(108)
456 02ba B816 cp r11,r24
457 02bc 01F4 brne .L74
458 02be 9BA9 ldd r25,Y+51
459 02c0 9160 ori r25,lo8(1)
460 02c2 9BAB std Y+51,r25
461 02c4 00C0 rjmp .L174
462 .L74:
463 02c6 BD83 std Y+5,r27
464 02c8 AC83 std Y+4,r26
465 02ca E3E6 ldi r30,lo8(99)
466 02cc BE16 cp r11,r30
467 02ce 01F4 brne .L76
468 02d0 1296 adiw r26,2
469 02d2 BD83 std Y+5,r27
470 02d4 AC83 std Y+4,r26
471 02d6 1297 sbiw r26,2
472 02d8 8C91 ld r24,X
473 02da 8E83 std Y+6,r24
474 02dc 00C0 rjmp .L173
475 .L76:
476 02de F4E4 ldi r31,lo8(68)
477 02e0 BF16 cp r11,r31
478 02e2 01F0 breq .L79
479 02e4 84E6 ldi r24,lo8(100)
480 02e6 B816 cp r11,r24
481 02e8 01F0 breq .L81
482 02ea 99E6 ldi r25,lo8(105)
483 02ec B916 cp r11,r25
484 02ee 01F4 brne .L166
485 02f0 00C0 rjmp .L81
486 .L79:
487 02f2 EBA9 ldd r30,Y+51
488 02f4 E160 ori r30,lo8(1)
489 02f6 EBAB std Y+51,r30
490 .L81:
491 02f8 FBA9 ldd r31,Y+51
492 02fa F0FF sbrs r31,0
493 02fc 00C0 rjmp .L84
494 02fe 1496 adiw r26,4
495 0300 BD83 std Y+5,r27
496 0302 AC83 std Y+4,r26
497 0304 5E90 ld r5,-X
498 0306 4E90 ld r4,-X
499 0308 3E90 ld r3,-X
500 030a 2E90 ld r2,-X
501 030c 00C0 rjmp .L86
502 .L84:
503 030e 1296 adiw r26,2
504 0310 BD83 std Y+5,r27
505 0312 AC83 std Y+4,r26
506 0314 9E91 ld r25,-X
507 0316 8E91 ld r24,-X
508 0318 1C01 movw r2,r24
509 031a 4424 clr r4
510 031c 37FC sbrc r3,7
511 031e 4094 com r4
512 0320 542C mov r5,r4
513 .L86:
514 0322 57FC sbrc r5,7
515 0324 00C0 rjmp .L87
516 0326 8AE0 ldi r24,lo8(10)
517 0328 88AB std Y+48,r24
518 032a 00C0 rjmp .L89
519 .L87:
520 032c 5094 com r5
521 032e 4094 com r4
522 0330 3094 com r3
523 0332 2094 com r2
524 0334 211C adc r2,__zero_reg__
525 0336 311C adc r3,__zero_reg__
526 0338 411C adc r4,__zero_reg__
527 033a 511C adc r5,__zero_reg__
528 033c 8DE2 ldi r24,lo8(45)
529 033e 8983 std Y+1,r24
530 0340 9AE0 ldi r25,lo8(10)
531 0342 98AB std Y+48,r25
532 0344 00C0 rjmp .L89
533 .L166:
534 0346 EFE4 ldi r30,lo8(79)
535 0348 BE16 cp r11,r30
536 034a 01F0 breq .L90
537 034c FFE6 ldi r31,lo8(111)
538 034e BF16 cp r11,r31
539 0350 01F4 brne .L92
540 0352 88E0 ldi r24,lo8(8)
541 0354 00C0 rjmp .L170
542 .L90:
543 0356 9BA9 ldd r25,Y+51
544 0358 9160 ori r25,lo8(1)
545 035a 9BAB std Y+51,r25
546 035c E8E0 ldi r30,lo8(8)
547 035e 00C0 rjmp .L171
548 .L92:
549 0360 F0E7 ldi r31,lo8(112)
550 0362 BF16 cp r11,r31
551 0364 01F4 brne .L95
552 0366 1296 adiw r26,2
553 0368 BD83 std Y+5,r27
554 036a AC83 std Y+4,r26
555 036c 9E91 ld r25,-X
556 036e 8E91 ld r24,-X
557 0370 1C01 movw r2,r24
558 0372 4424 clr r4
559 0374 5524 clr r5
560 0376 8BA9 ldd r24,Y+51
561 0378 8064 ori r24,lo8(64)
562 037a 8BAB std Y+51,r24
563 037c 90E1 ldi r25,lo8(16)
564 037e 98AB std Y+48,r25
565 0380 78E7 ldi r23,lo8(120)
566 0382 B72E mov r11,r23
567 0384 00C0 rjmp .L94
568 .L95:
569 0386 E3E7 ldi r30,lo8(115)
570 0388 BE16 cp r11,r30
571 038a 01F4 brne .L97
572 038c 1296 adiw r26,2
573 038e BD83 std Y+5,r27
574 0390 AC83 std Y+4,r26
575 0392 DE90 ld r13,-X
576 0394 CE90 ld r12,-X
577 0396 C114 cp r12,__zero_reg__
578 0398 D104 cpc r13,__zero_reg__
579 039a 01F4 brne .L99
580 039c 88E2 ldi r24,lo8(40)
581 039e 8E83 std Y+6,r24
582 03a0 8EE6 ldi r24,lo8(110)
583 03a2 8F83 std Y+7,r24
584 03a4 85E7 ldi r24,lo8(117)
585 03a6 8887 std Y+8,r24
586 03a8 8CE6 ldi r24,lo8(108)
587 03aa 8987 std Y+9,r24
588 03ac 8A87 std Y+10,r24
589 03ae 89E2 ldi r24,lo8(41)
590 03b0 8B87 std Y+11,r24
591 03b2 1C86 std Y+12,__zero_reg__
592 03b4 66E0 ldi r22,lo8(6)
593 03b6 C62E mov r12,r22
594 03b8 D12C mov r13,__zero_reg__
595 03ba CC0E add r12,r28
596 03bc DD1E adc r13,r29
597 .L99:
598 03be F9A9 ldd r31,Y+49
599 03c0 F7FD sbrc r31,7
600 03c2 00C0 rjmp .L101
601 03c4 4F2F mov r20,r31
602 03c6 5527 clr r21
603 03c8 47FD sbrc r20,7
604 03ca 5095 com r21
605 03cc 60E0 ldi r22,lo8(0)
606 03ce 70E0 ldi r23,hi8(0)
607 03d0 C601 movw r24,r12
608 03d2 0E94 0000 call memchr
609 03d6 0097 sbiw r24,0
610 03d8 01F4 brne .L103
611 03da 19A9 ldd r17,Y+49
612 03dc 00C0 rjmp .L105
613 .L103:
614 03de 8C19 sub r24,r12
615 03e0 19A9 ldd r17,Y+49
616 03e2 8117 cp r24,r17
617 03e4 04F4 brge .L105
618 03e6 182F mov r17,r24
619 03e8 00C0 rjmp .L105
620 .L101:
621 03ea F601 movw r30,r12
622 03ec 0190 ld __tmp_reg__,Z+
623 03ee 0020 tst __tmp_reg__
624 03f0 01F4 brne .-6
625 03f2 3197 sbiw r30,1
626 03f4 1E2F mov r17,r30
627 03f6 1C19 sub r17,r12
628 .L105:
629 03f8 1982 std Y+1,__zero_reg__
630 03fa 4201 movw r8,r4
631 03fc 3101 movw r6,r2
632 03fe 40E0 ldi r20,lo8(0)
633 0400 00C0 rjmp .L107
634 .L97:
635 0402 85E5 ldi r24,lo8(85)
636 0404 B816 cp r11,r24
637 0406 01F0 breq .L108
638 0408 95E7 ldi r25,lo8(117)
639 040a B916 cp r11,r25
640 040c 01F4 brne .L110
641 040e EAE0 ldi r30,lo8(10)
642 .L171:
643 0410 E8AB std Y+48,r30
644 0412 00C0 rjmp .L94
645 .L108:
646 0414 FBA9 ldd r31,Y+51
647 0416 F160 ori r31,lo8(1)
648 0418 FBAB std Y+51,r31
649 041a 8AE0 ldi r24,lo8(10)
650 .L170:
651 041c 88AB std Y+48,r24
652 041e 00C0 rjmp .L94
653 .L110:
654 0420 98E5 ldi r25,lo8(88)
655 0422 B916 cp r11,r25
656 0424 01F0 breq .L112
657 0426 E8E7 ldi r30,lo8(120)
658 0428 BE16 cp r11,r30
659 042a 01F0 breq .+2
660 042c 00C0 rjmp .L114
661 .L112:
662 042e FBA9 ldd r31,Y+51
663 0430 F3FD sbrc r31,3
664 0432 00C0 rjmp .L115
665 0434 80E1 ldi r24,lo8(16)
666 0436 00C0 rjmp .L170
667 .L115:
668 0438 2114 cp r2,__zero_reg__
669 043a 3104 cpc r3,__zero_reg__
670 043c 4104 cpc r4,__zero_reg__
671 043e 5104 cpc r5,__zero_reg__
672 0440 01F4 brne .L117
673 0442 90E1 ldi r25,lo8(16)
674 0444 98AB std Y+48,r25
675 0446 00C0 rjmp .L94
676 .L117:
677 0448 EBA9 ldd r30,Y+51
678 044a E064 ori r30,lo8(64)
679 044c EBAB std Y+51,r30
680 044e F0E1 ldi r31,lo8(16)
681 0450 F8AB std Y+48,r31
682 .L94:
683 0452 1982 std Y+1,__zero_reg__
684 .L89:
685 0454 89A9 ldd r24,Y+49
686 0456 87FD sbrc r24,7
687 0458 00C0 rjmp .L119
688 045a 9BA9 ldd r25,Y+51
689 045c 9F7D andi r25,lo8(-33)
690 045e 9BAB std Y+51,r25
691 .L119:
692 0460 2114 cp r2,__zero_reg__
693 0462 3104 cpc r3,__zero_reg__
694 0464 4104 cpc r4,__zero_reg__
695 0466 5104 cpc r5,__zero_reg__
696 0468 01F4 brne .L121
697 046a E9A9 ldd r30,Y+49
698 046c EE23 tst r30
699 046e 01F4 brne .L121
700 0470 6624 clr r6
701 0472 7724 clr r7
702 0474 4301 movw r8,r6
703 0476 5EE2 ldi r21,lo8(46)
704 0478 C52E mov r12,r21
705 047a D12C mov r13,__zero_reg__
706 047c CC0E add r12,r28
707 047e DD1E adc r13,r29
708 0480 00C0 rjmp .L124
709 .L121:
710 0482 4EE2 ldi r20,lo8(46)
711 0484 C42E mov r12,r20
712 0486 D12C mov r13,__zero_reg__
713 0488 CC0E add r12,r28
714 048a DD1E adc r13,r29
715 048c F8A9 ldd r31,Y+48
716 048e EF2E mov r14,r31
717 0490 FF24 clr r15
718 0492 0027 clr r16
719 0494 1127 clr r17
720 .L125:
721 0496 C201 movw r24,r4
722 0498 B101 movw r22,r2
723 049a A801 movw r20,r16
724 049c 9701 movw r18,r14
725 049e 0E94 0000 call __udivmodsi4
726 04a2 6A30 cpi r22,lo8(10)
727 04a4 00F4 brsh .L126
728 04a6 30E3 ldi r19,lo8(48)
729 04a8 A32E mov r10,r19
730 04aa A60E add r10,r22
731 04ac 00C0 rjmp .L128
732 .L126:
733 04ae 27E5 ldi r18,lo8(87)
734 04b0 A22E mov r10,r18
735 04b2 A60E add r10,r22
736 04b4 88E5 ldi r24,lo8(88)
737 04b6 B816 cp r11,r24
738 04b8 01F4 brne .L128
739 04ba 9FED ldi r25,lo8(-33)
740 04bc A922 and r10,r25
741 .L128:
742 04be F601 movw r30,r12
743 04c0 A292 st -Z,r10
744 04c2 6F01 movw r12,r30
745 04c4 C201 movw r24,r4
746 04c6 B101 movw r22,r2
747 04c8 A801 movw r20,r16
748 04ca 9701 movw r18,r14
749 04cc 0E94 0000 call __udivmodsi4
750 04d0 3901 movw r6,r18
751 04d2 4A01 movw r8,r20
752 04d4 2E14 cp r2,r14
753 04d6 3F04 cpc r3,r15
754 04d8 4006 cpc r4,r16
755 04da 5106 cpc r5,r17
756 04dc 00F0 brlo .L130
757 04de 1901 movw r2,r18
758 04e0 2A01 movw r4,r20
759 04e2 00C0 rjmp .L125
760 .L130:
761 04e4 F8A9 ldd r31,Y+48
762 04e6 F830 cpi r31,lo8(8)
763 04e8 01F4 brne .L124
764 04ea 8BA9 ldd r24,Y+51
765 04ec 83FF sbrs r24,3
766 04ee 00C0 rjmp .L124
767 04f0 90E3 ldi r25,lo8(48)
768 04f2 A916 cp r10,r25
769 04f4 01F0 breq .L124
770 04f6 80E3 ldi r24,lo8(48)
771 04f8 F601 movw r30,r12
772 04fa 8293 st -Z,r24
773 04fc 6F01 movw r12,r30
774 .L124:
775 04fe CE01 movw r24,r28
776 0500 8C19 sub r24,r12
777 0502 182F mov r17,r24
778 0504 125D subi r17,lo8(-(46))
779 0506 49A9 ldd r20,Y+49
780 0508 00C0 rjmp .L107
781 .L114:
782 050a BB20 tst r11
783 050c 01F4 brne .+2
784 050e 00C0 rjmp .L152
785 0510 BE82 std Y+6,r11
786 .L173:
787 0512 1982 std Y+1,__zero_reg__
788 0514 4201 movw r8,r4
789 0516 3101 movw r6,r2
790 0518 00E0 ldi r16,lo8(0)
791 051a 11E0 ldi r17,lo8(1)
792 051c 96E0 ldi r25,lo8(6)
793 051e C92E mov r12,r25
794 0520 D12C mov r13,__zero_reg__
795 0522 CC0E add r12,r28
796 0524 DD1E adc r13,r29
797 0526 21E0 ldi r18,lo8(1)
798 0528 00C0 rjmp .L136
799 .L107:
800 052a 212F mov r18,r17
801 052c 042F mov r16,r20
802 052e 011B sub r16,r17
803 0530 07FD sbrc r16,7
804 0532 00E0 ldi r16,lo8(0)
805 .L136:
806 0534 8981 ldd r24,Y+1
807 0536 8823 tst r24
808 0538 01F0 breq .L138
809 053a 812F mov r24,r17
810 053c 8F5F subi r24,lo8(-(1))
811 053e 00C0 rjmp .L140
812 .L138:
813 0540 9BA9 ldd r25,Y+51
814 0542 96FD sbrc r25,6
815 0544 00C0 rjmp .L141
816 0546 812F mov r24,r17
817 0548 00C0 rjmp .L140
818 .L141:
819 054a 822F mov r24,r18
820 054c 8E5F subi r24,lo8(-(2))
821 .L140:
822 054e A82E mov r10,r24
823 0550 A00E add r10,r16
824 0552 EBA9 ldd r30,Y+51
825 0554 EE2E mov r14,r30
826 0556 FF24 clr r15
827 0558 80E3 ldi r24,lo8(48)
828 055a 482E mov r4,r24
829 055c 512C mov r5,__zero_reg__
830 055e 4E20 and r4,r14
831 0560 5F20 and r5,r15
832 0562 4114 cp r4,__zero_reg__
833 0564 5104 cpc r5,__zero_reg__
834 0566 01F4 brne .L143
835 0568 8AA9 ldd r24,Y+50
836 056a 8A19 sub r24,r10
837 056c 0E94 0000 call PAD_SP
838 .L143:
839 0570 8981 ldd r24,Y+1
840 0572 8823 tst r24
841 0574 01F0 breq .L145
842 0576 61E0 ldi r22,lo8(1)
843 0578 70E0 ldi r23,hi8(1)
844 057a CE01 movw r24,r28
845 057c 0196 adiw r24,1
846 057e 00C0 rjmp .L172
847 .L145:
848 0580 E6FE sbrs r14,6
849 0582 00C0 rjmp .L147
850 0584 80E3 ldi r24,lo8(48)
851 0586 8A83 std Y+2,r24
852 0588 BB82 std Y+3,r11
853 058a 62E0 ldi r22,lo8(2)
854 058c 70E0 ldi r23,hi8(2)
855 058e CE01 movw r24,r28
856 0590 0296 adiw r24,2
857 .L172:
858 0592 0E94 0000 call PRINT
859 .L147:
860 0596 F0E2 ldi r31,lo8(32)
861 0598 4F16 cp r4,r31
862 059a 5104 cpc r5,__zero_reg__
863 059c 01F4 brne .L149
864 059e 8AA9 ldd r24,Y+50
865 05a0 8A19 sub r24,r10
866 05a2 0E94 0000 call PAD_0
867 .L149:
868 05a6 802F mov r24,r16
869 05a8 0E94 0000 call PAD_0
870 05ac 612F mov r22,r17
871 05ae 7727 clr r23
872 05b0 67FD sbrc r22,7
873 05b2 7095 com r23
874 05b4 C601 movw r24,r12
875 05b6 0E94 0000 call PRINT
876 05ba E4FE sbrs r14,4
877 05bc 00C0 rjmp .L28
878 05be 8AA9 ldd r24,Y+50
879 05c0 8A19 sub r24,r10
880 05c2 0E94 0000 call PAD_SP
881 05c6 00C0 rjmp .L28
882 .L35:
883 .L152:
884 /* epilogue: frame size=51 */
885 05c8 E396 adiw r28,51
886 05ca 0FB6 in __tmp_reg__,__SREG__
887 05cc F894 cli
888 05ce DEBF out __SP_H__,r29
889 05d0 0FBE out __SREG__,__tmp_reg__
890 05d2 CDBF out __SP_L__,r28
891 05d4 DF91 pop r29
892 05d6 CF91 pop r28
893 05d8 1F91 pop r17
894 05da 0F91 pop r16
895 05dc FF90 pop r15
896 05de EF90 pop r14
897 05e0 DF90 pop r13
898 05e2 CF90 pop r12
899 05e4 BF90 pop r11
900 05e6 AF90 pop r10
901 05e8 9F90 pop r9
902 05ea 8F90 pop r8
903 05ec 7F90 pop r7
904 05ee 6F90 pop r6
905 05f0 5F90 pop r5
906 05f2 4F90 pop r4
907 05f4 3F90 pop r3
908 05f6 2F90 pop r2
909 05f8 0895 ret
910 /* epilogue end (size=25) */
911 /* function _printf_P size 694 (643) */
913 .comm DiffNick,2,1
914 .comm DiffRoll,2,1
915 .comm SenderOkay,1,1
916 .comm CosinusNickWinkel,1,1
917 .comm CosinusRollWinkel,1,1
918 .comm durchschnitt_northing,4,1
919 .comm durchschnitt_easting,4,1
920 .comm gps_p,2,1
921 .comm gps_d,2,1
922 .comm skal,2,1
923 .comm gps_gethome,2,1
924 .comm PrintZiel,1,1
925 .comm RemoteTasten,1,1
926 .comm Timeout,1,1
927 .comm IntegralNick,4,1
928 .comm IntegralNick2,4,1
929 .comm IntegralRoll,4,1
930 .comm IntegralRoll2,4,1
931 .comm Mess_IntegralNick,4,1
932 .comm Mess_IntegralNick2,4,1
933 .comm Mess_IntegralRoll,4,1
934 .comm Mess_IntegralRoll2,4,1
935 .comm Integral_Gier,4,1
936 .comm Mess_Integral_Gier,4,1
937 .comm h,1,1
938 .comm m,1,1
939 .comm s,1,1
940 .comm Motor_Vorne,1,1
941 .comm Motor_Hinten,1,1
942 .comm Motor_Rechts,1,1
943 .comm Motor_Links,1,1
944 .comm Count,1,1
945 .comm MotorWert,5,1
946 .comm StickNick,2,1
947 .comm StickRoll,2,1
948 .comm StickGier,2,1
949 .comm MotorenEin,1,1
950 /* File "printf_P.c": code 786 = 0x0312 ( 710), prologues 36, epilogues 40 */
DEFINED SYMBOLS
*ABS*:00000000 printf_P.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:13 .text:00000000 Putchar
*COM*:00000001 PrintZiel
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:45 .text:00000032 PAD_0
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:66 .text:00000048 PAD_SP
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:87 .text:0000005e PRINTP
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:122 .text:0000008a PRINT
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/cckDPzml.s:152 .text:000000b2 _printf_P
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 SenderOkay
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
DispPtr
DisplayBuff
uart_putchar
memchr
__udivmodsi4
/branches/chris_hallo2/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
/* if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen */
}
}
}
 
 
 
 
 
/branches/chris_hallo2/rc.d
0,0 → 1,2
rc.o rc.d : rc.c rc.h main.h old_macros.h _settings.h printf_P.h timer0.h \
uart.h analog.h twimaster.h menu.h fc.h gps.h
/branches/chris_hallo2/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/chris_hallo2/rc.lst
0,0 → 1,286
1 .file "rc.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global rc_sum_init
13 rc_sum_init:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 0000 83EC ldi r24,lo8(-61)
17 0002 8093 8100 sts 129,r24
18 0006 EFE6 ldi r30,lo8(111)
19 0008 F0E0 ldi r31,hi8(111)
20 000a 8081 ld r24,Z
21 000c 8062 ori r24,lo8(32)
22 000e 8083 st Z,r24
23 0010 1092 0000 sts (AdNeutralGier)+1,__zero_reg__
24 0014 1092 0000 sts AdNeutralGier,__zero_reg__
25 0018 1092 0000 sts (AdNeutralRoll)+1,__zero_reg__
26 001c 1092 0000 sts AdNeutralRoll,__zero_reg__
27 0020 1092 0000 sts (AdNeutralNick)+1,__zero_reg__
28 0024 1092 0000 sts AdNeutralNick,__zero_reg__
29 /* epilogue: frame size=0 */
30 0028 0895 ret
31 /* epilogue end (size=1) */
32 /* function rc_sum_init size 21 (20) */
34 .global __vector_12
36 __vector_12:
37 /* prologue: frame size=0 */
38 002a 1F92 push __zero_reg__
39 002c 0F92 push __tmp_reg__
40 002e 0FB6 in __tmp_reg__,__SREG__
41 0030 0F92 push __tmp_reg__
42 0032 1124 clr __zero_reg__
43 0034 0F93 push r16
44 0036 1F93 push r17
45 0038 2F93 push r18
46 003a 3F93 push r19
47 003c 4F93 push r20
48 003e 5F93 push r21
49 0040 6F93 push r22
50 0042 7F93 push r23
51 0044 8F93 push r24
52 0046 9F93 push r25
53 0048 AF93 push r26
54 004a BF93 push r27
55 004c CF93 push r28
56 004e DF93 push r29
57 0050 EF93 push r30
58 0052 FF93 push r31
59 /* prologue end (size=21) */
60 0054 2091 8600 lds r18,134
61 0058 3091 8700 lds r19,(134)+1
62 005c 8091 0000 lds r24,AltICR.1969
63 0060 9091 0000 lds r25,(AltICR.1969)+1
64 0064 281B sub r18,r24
65 0066 390B sbc r19,r25
66 0068 8091 8600 lds r24,134
67 006c 9091 8700 lds r25,(134)+1
68 0070 9093 0000 sts (AltICR.1969)+1,r25
69 0074 8093 0000 sts AltICR.1969,r24
70 0078 C901 movw r24,r18
71 007a 8D5D subi r24,lo8(-(-1501))
72 007c 9540 sbci r25,hi8(-(-1501))
73 007e 8356 subi r24,lo8(6499)
74 0080 9941 sbci r25,hi8(6499)
75 0082 00F4 brsh .L4
76 0084 81E0 ldi r24,lo8(1)
77 0086 90E0 ldi r25,hi8(1)
78 0088 9093 0000 sts (index.1971)+1,r25
79 008c 8093 0000 sts index.1971,r24
80 0090 1092 0000 sts NewPpmData,__zero_reg__
81 0094 00C0 rjmp .L14
82 .L4:
83 0096 C091 0000 lds r28,index.1971
84 009a D091 0000 lds r29,(index.1971)+1
85 009e CA30 cpi r28,10
86 00a0 D105 cpc r29,__zero_reg__
87 00a2 04F0 brlt .+2
88 00a4 00C0 rjmp .L14
89 00a6 C901 movw r24,r18
90 00a8 8B5F subi r24,lo8(-(-251))
91 00aa 9040 sbci r25,hi8(-(-251))
92 00ac 845B subi r24,lo8(436)
93 00ae 9140 sbci r25,hi8(436)
94 00b0 00F0 brlo .+2
95 00b2 00C0 rjmp .L8
96 00b4 A901 movw r20,r18
97 00b6 425D subi r20,lo8(-(-466))
98 00b8 5140 sbci r21,hi8(-(-466))
99 00ba FE01 movw r30,r28
100 00bc EE0F lsl r30
101 00be FF1F rol r31
102 00c0 E050 subi r30,lo8(-(PPM_in))
103 00c2 F040 sbci r31,hi8(-(PPM_in))
104 00c4 8081 ld r24,Z
105 00c6 9181 ldd r25,Z+1
106 00c8 FA01 movw r30,r20
107 00ca E81B sub r30,r24
108 00cc F90B sbc r31,r25
109 00ce CF01 movw r24,r30
110 00d0 F7FF sbrs r31,7
111 00d2 00C0 rjmp .L11
112 00d4 9095 com r25
113 00d6 8195 neg r24
114 00d8 9F4F sbci r25,lo8(-1)
115 .L11:
116 00da 0697 sbiw r24,6
117 00dc 04F4 brge .L10
118 00de 8091 0000 lds r24,SenderOkay
119 00e2 883C cpi r24,lo8(-56)
120 00e4 00F4 brsh .L10
121 00e6 8091 0000 lds r24,SenderOkay
122 00ea 865F subi r24,lo8(-(10))
123 00ec 8093 0000 sts SenderOkay,r24
124 .L10:
125 00f0 FE01 movw r30,r28
126 00f2 EE0F lsl r30
127 00f4 FF1F rol r31
128 00f6 8F01 movw r16,r30
129 00f8 0050 subi r16,lo8(-(PPM_in))
130 00fa 1040 sbci r17,hi8(-(PPM_in))
131 00fc D801 movw r26,r16
132 00fe 2D91 ld r18,X+
133 0100 3C91 ld r19,X
134 0102 C901 movw r24,r18
135 0104 880F lsl r24
136 0106 991F rol r25
137 0108 820F add r24,r18
138 010a 931F adc r25,r19
139 010c 840F add r24,r20
140 010e 951F adc r25,r21
141 0110 64E0 ldi r22,lo8(4)
142 0112 70E0 ldi r23,hi8(4)
143 0114 0E94 0000 call __divmodhi4
144 0118 D801 movw r26,r16
145 011a 8D91 ld r24,X+
146 011c 9C91 ld r25,X
147 011e 1197 sbiw r26,1
148 0120 9B01 movw r18,r22
149 0122 281B sub r18,r24
150 0124 390B sbc r19,r25
151 0126 E050 subi r30,lo8(-(PPM_diff))
152 0128 F040 sbci r31,hi8(-(PPM_diff))
153 012a 3183 std Z+1,r19
154 012c 2083 st Z,r18
155 012e 1196 adiw r26,1
156 0130 7C93 st X,r23
157 0132 6E93 st -X,r22
158 .L8:
159 0134 2196 adiw r28,1
160 0136 D093 0000 sts (index.1971)+1,r29
161 013a C093 0000 sts index.1971,r28
162 .L14:
163 /* epilogue: frame size=0 */
164 013e FF91 pop r31
165 0140 EF91 pop r30
166 0142 DF91 pop r29
167 0144 CF91 pop r28
168 0146 BF91 pop r27
169 0148 AF91 pop r26
170 014a 9F91 pop r25
171 014c 8F91 pop r24
172 014e 7F91 pop r23
173 0150 6F91 pop r22
174 0152 5F91 pop r21
175 0154 4F91 pop r20
176 0156 3F91 pop r19
177 0158 2F91 pop r18
178 015a 1F91 pop r17
179 015c 0F91 pop r16
180 015e 0F90 pop __tmp_reg__
181 0160 0FBE out __SREG__,__tmp_reg__
182 0162 0F90 pop __tmp_reg__
183 0164 1F90 pop __zero_reg__
184 0166 1895 reti
185 /* epilogue end (size=21) */
186 /* function __vector_12 size 162 (120) */
188 .global NewPpmData
189 .data
192 NewPpmData:
193 0000 01 .byte 1
194 .lcomm index.1971,2
195 .lcomm AltICR.1969,2
196 .comm PPM_in,22,1
197 .comm PPM_diff,22,1
198 .comm DiffNick,2,1
199 .comm DiffRoll,2,1
200 .comm SenderOkay,1,1
201 .comm CosinusNickWinkel,1,1
202 .comm CosinusRollWinkel,1,1
203 .comm durchschnitt_northing,4,1
204 .comm durchschnitt_easting,4,1
205 .comm gps_p,2,1
206 .comm gps_d,2,1
207 .comm skal,2,1
208 .comm gps_gethome,2,1
209 .comm RemoteTasten,1,1
210 .comm Timeout,1,1
211 .comm IntegralNick,4,1
212 .comm IntegralNick2,4,1
213 .comm IntegralRoll,4,1
214 .comm IntegralRoll2,4,1
215 .comm Mess_IntegralNick,4,1
216 .comm Mess_IntegralNick2,4,1
217 .comm Mess_IntegralRoll,4,1
218 .comm Mess_IntegralRoll2,4,1
219 .comm Integral_Gier,4,1
220 .comm Mess_Integral_Gier,4,1
221 .comm h,1,1
222 .comm m,1,1
223 .comm s,1,1
224 .comm Motor_Vorne,1,1
225 .comm Motor_Hinten,1,1
226 .comm Motor_Rechts,1,1
227 .comm Motor_Links,1,1
228 .comm Count,1,1
229 .comm MotorWert,5,1
230 .comm StickNick,2,1
231 .comm StickRoll,2,1
232 .comm StickGier,2,1
233 .comm MotorenEin,1,1
234 /* File "rc.c": code 183 = 0x00b7 ( 140), prologues 21, epilogues 22 */
DEFINED SYMBOLS
*ABS*:00000000 rc.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:13 .text:00000000 rc_sum_init
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:36 .text:0000002a __vector_12
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:194 .bss:00000002 AltICR.1969
.bss:00000000 index.1971
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccqyyvXd.s:192 .data:00000000 NewPpmData
*COM*:00000016 PPM_in
*COM*:00000001 SenderOkay
*COM*:00000016 PPM_diff
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
AdNeutralGier
AdNeutralRoll
AdNeutralNick
__divmodhi4
/branches/chris_hallo2/readme.txt
0,0 → 1,84
GPS-Modifikation auf Basis der Original V0.6 by Holger Buss & Ingo Busker
 
----- BETA V0.2-----
 
 
Copyright by Christopher Hartmann und Daniel Schmitz.
 
-Disclaimer-
Wir übernehmen keinerlei Garantie für die Funktionstüchtigkeit dieser Software
jegliche Änderung geschehen auf Eigene Gefahr
für eventuelle Schäden übernehmen wir keinerlei Haftung
 
 
 
 
______
 
 
Parametrierung ist noch nicht abgeschlossen !!!!
 
Kompass nicht integriert !!!! -> Ufo muss nach Norden ausgerichtet sein !!!!!!
 
Im Koptertool nicht vergessen GPS zu aktivieren !
 
 
Testparamter : P:2 / D:2
 
________ ***************ÄNDERUNGEN****************************
 
 
folgende Änderungen am GPS-Empfänger vornehmen (siehe auch Pitschu Anleitung für Details)
 
folgende Einstellungen werden nicht mehr benötigt (muss nicht zwingend deaktiviert werden)
 
unter Messages:
-NAV-POSLLH
-NAV-POSUTM
-NAV-VELNED
folgende Einstellungen müssen aktiviert werden: (für Target1)
 
 
unter Messages:
-NAV-POSECEF
-NAV-VELECEF
 
_________******************************************************
 
 
features:
 
 
-Auslesen der GPS Daten im UBX Protokoll (modifizierte Version, - Original von Pitschu (Peter Schulten) )
 
- integrierter PD Regler - Parametrierung des P-, D-Anteils (der D-Anteil sollte ggf. durch Änderung im Quelltext weiter verkleinert werden)
User Parameter 1: P-Regler, 2:D-Regler
 
- Rotationsmatrix für Kompass
 
- Postiton Hold (Aktivierung über Poti 1 ( 0=Aus , >0 =aktiviert)
- kruzes Piepsen bestätigt Aktivierung des PH
 
- rote LED der Flight-Ctrl für Statusanzeige: (blinkend : GPS Aktiv)
- Aktivierung des Postiton-Hold ohne Empfang von GPS unterbunden
 
- Einbinden des GPS-Empfängers bitte Erklärung von PITSCHU aus XUFO-Forum entnehmen (http://forum.xufo.net/bb/viewtopic.php?t=5980)
----- BAUDRATE einstellen auf 57600 ------
 
 
 
_____
 
in Planung: (TWI: teilweise Integriert, siehe Quelltext -- UNGETESTET -- )
 
- Kompass (TWI)
- dynamische Parametrierung anhand der mittleren Abweichung der GPS Daten (höhrere Genauigkeit im PH)
-"Home Postition" (TWI)
- Eingangsdatenfilterung (Kompensation von Ungenauigkeit)
- Auslagerung auf externen Prozessor
 
….
 
 
/branches/chris_hallo2/timer0.c
0,0 → 1,139
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<2);
}
else
PORTD &= ~(1<<2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/chris_hallo2/timer0.d
0,0 → 1,2
timer0.o timer0.d : timer0.c main.h old_macros.h _settings.h printf_P.h timer0.h \
uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/timer0.h
0,0 → 1,14
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
/branches/chris_hallo2/timer0.lst
0,0 → 1,506
1 .file "timer0.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global __vector_18
13 __vector_18:
14 /* prologue: frame size=0 */
15 0000 1F92 push __zero_reg__
16 0002 0F92 push __tmp_reg__
17 0004 0FB6 in __tmp_reg__,__SREG__
18 0006 0F92 push __tmp_reg__
19 0008 1124 clr __zero_reg__
20 000a 2F93 push r18
21 000c 3F93 push r19
22 000e 5F93 push r21
23 0010 6F93 push r22
24 0012 7F93 push r23
25 0014 8F93 push r24
26 0016 9F93 push r25
27 0018 AF93 push r26
28 001a BF93 push r27
29 /* prologue end (size=14) */
30 001c 8091 0000 lds r24,cnt.1975
31 0020 8150 subi r24,lo8(-(-1))
32 0022 8093 0000 sts cnt.1975,r24
33 0026 8F3F cpi r24,lo8(-1)
34 0028 01F4 brne .L2
35 002a 89E0 ldi r24,lo8(9)
36 002c 8093 0000 sts cnt.1975,r24
37 0030 8091 0000 lds r24,cnt_1ms.1974
38 0034 8F5F subi r24,lo8(-(1))
39 0036 8170 andi r24,lo8(1)
40 0038 8093 0000 sts cnt_1ms.1974,r24
41 003c 8823 tst r24
42 003e 01F4 brne .L4
43 0040 81E0 ldi r24,lo8(1)
44 0042 8093 0000 sts UpdateMotor,r24
45 .L4:
46 0046 8091 0000 lds r24,CountMilliseconds
47 004a 9091 0000 lds r25,(CountMilliseconds)+1
48 004e 0196 adiw r24,1
49 0050 9093 0000 sts (CountMilliseconds)+1,r25
50 0054 8093 0000 sts CountMilliseconds,r24
51 0058 8091 0000 lds r24,Timeout
52 005c 8823 tst r24
53 005e 01F0 breq .L2
54 0060 8091 0000 lds r24,Timeout
55 0064 8150 subi r24,lo8(-(-1))
56 0066 8093 0000 sts Timeout,r24
57 .L2:
58 006a 8091 0000 lds r24,beeptime
59 006e 9091 0000 lds r25,(beeptime)+1
60 0072 0297 sbiw r24,2
61 0074 00F0 brlo .L7
62 0076 8091 0000 lds r24,beeptime
63 007a 9091 0000 lds r25,(beeptime)+1
64 007e 0197 sbiw r24,1
65 0080 9093 0000 sts (beeptime)+1,r25
66 0084 8093 0000 sts beeptime,r24
67 0088 5A9A sbi 43-0x20,2
68 008a 00C0 rjmp .L9
69 .L7:
70 008c 5A98 cbi 43-0x20,2
71 .L9:
72 008e 8091 0000 lds r24,EE_Parameter+8
73 0092 83FF sbrs r24,3
74 0094 00C0 rjmp .L17
75 0096 349B sbis 38-0x20,4
76 0098 00C0 rjmp .L12
77 009a 8091 0000 lds r24,cntKompass
78 009e 9091 0000 lds r25,(cntKompass)+1
79 00a2 0196 adiw r24,1
80 00a4 9093 0000 sts (cntKompass)+1,r25
81 00a8 8093 0000 sts cntKompass,r24
82 00ac 00C0 rjmp .L17
83 .L12:
84 00ae 8091 0000 lds r24,cntKompass
85 00b2 9091 0000 lds r25,(cntKompass)+1
86 00b6 892B or r24,r25
87 00b8 01F0 breq .L14
88 00ba 8091 0000 lds r24,cntKompass
89 00be 9091 0000 lds r25,(cntKompass)+1
90 00c2 805A subi r24,lo8(4000)
91 00c4 9F40 sbci r25,hi8(4000)
92 00c6 00F4 brsh .L14
93 00c8 8091 0000 lds r24,cntKompass
94 00cc 9091 0000 lds r25,(cntKompass)+1
95 00d0 9093 0000 sts (KompassValue)+1,r25
96 00d4 8093 0000 sts KompassValue,r24
97 .L14:
98 00d8 8091 0000 lds r24,KompassValue
99 00dc 9091 0000 lds r25,(KompassValue)+1
100 00e0 2091 0000 lds r18,KompassStartwert
101 00e4 3091 0000 lds r19,(KompassStartwert)+1
102 00e8 821B sub r24,r18
103 00ea 930B sbc r25,r19
104 00ec 845E subi r24,lo8(-(540))
105 00ee 9D4F sbci r25,hi8(-(540))
106 00f0 68E6 ldi r22,lo8(360)
107 00f2 71E0 ldi r23,hi8(360)
108 00f4 0E94 0000 call __divmodhi4
109 00f8 845B subi r24,lo8(-(-180))
110 00fa 9040 sbci r25,hi8(-(-180))
111 00fc 9093 0000 sts (KompassRichtung)+1,r25
112 0100 8093 0000 sts KompassRichtung,r24
113 0104 1092 0000 sts (cntKompass)+1,__zero_reg__
114 0108 1092 0000 sts cntKompass,__zero_reg__
115 .L17:
116 /* epilogue: frame size=0 */
117 010c BF91 pop r27
118 010e AF91 pop r26
119 0110 9F91 pop r25
120 0112 8F91 pop r24
121 0114 7F91 pop r23
122 0116 6F91 pop r22
123 0118 5F91 pop r21
124 011a 3F91 pop r19
125 011c 2F91 pop r18
126 011e 0F90 pop __tmp_reg__
127 0120 0FBE out __SREG__,__tmp_reg__
128 0122 0F90 pop __tmp_reg__
129 0124 1F90 pop __zero_reg__
130 0126 1895 reti
131 /* epilogue end (size=14) */
132 /* function __vector_18 size 150 (122) */
134 .global SetDelay
136 SetDelay:
137 /* prologue: frame size=0 */
138 /* prologue end (size=0) */
139 0128 2091 0000 lds r18,CountMilliseconds
140 012c 3091 0000 lds r19,(CountMilliseconds)+1
141 0130 2F5F subi r18,lo8(-(1))
142 0132 3F4F sbci r19,hi8(-(1))
143 0134 820F add r24,r18
144 0136 931F adc r25,r19
145 /* epilogue: frame size=0 */
146 0138 0895 ret
147 /* epilogue end (size=1) */
148 /* function SetDelay size 9 (8) */
150 .global CheckDelay
152 CheckDelay:
153 /* prologue: frame size=0 */
154 /* prologue end (size=0) */
155 013a 2091 0000 lds r18,CountMilliseconds
156 013e 3091 0000 lds r19,(CountMilliseconds)+1
157 0142 821B sub r24,r18
158 0144 930B sbc r25,r19
159 0146 892F mov r24,r25
160 0148 9927 clr r25
161 014a 8695 lsr r24
162 014c 8074 andi r24,lo8(64)
163 014e 9927 clr r25
164 /* epilogue: frame size=0 */
165 0150 0895 ret
166 /* epilogue end (size=1) */
167 /* function CheckDelay size 12 (11) */
169 .global __vector_9
171 __vector_9:
172 /* prologue: frame size=0 */
173 0152 1F92 push __zero_reg__
174 0154 0F92 push __tmp_reg__
175 0156 0FB6 in __tmp_reg__,__SREG__
176 0158 0F92 push __tmp_reg__
177 015a 1124 clr __zero_reg__
178 015c EF92 push r14
179 015e FF92 push r15
180 0160 0F93 push r16
181 0162 1F93 push r17
182 0164 2F93 push r18
183 0166 3F93 push r19
184 0168 4F93 push r20
185 016a 5F93 push r21
186 016c 6F93 push r22
187 016e 7F93 push r23
188 0170 8F93 push r24
189 0172 9F93 push r25
190 0174 AF93 push r26
191 0176 BF93 push r27
192 0178 CF93 push r28
193 017a DF93 push r29
194 017c EF93 push r30
195 017e FF93 push r31
196 /* prologue end (size=23) */
197 0180 8091 0000 lds r24,timer.2061
198 0184 8150 subi r24,lo8(-(-1))
199 0186 8093 0000 sts timer.2061,r24
200 018a 8F3F cpi r24,lo8(-1)
201 018c 01F0 breq .+2
202 018e 00C0 rjmp .L23
203 0190 83E8 ldi r24,lo8(-125)
204 0192 8093 B000 sts 176,r24
205 0196 8091 0000 lds r24,Parameter_ServoNickControl
206 019a C82F mov r28,r24
207 019c DD27 clr r29
208 019e D093 0000 sts (ServoValue)+1,r29
209 01a2 C093 0000 sts ServoValue,r28
210 01a6 8091 0000 lds r24,EE_Parameter+38
211 01aa E090 0000 lds r14,EE_Parameter+34
212 01ae 80FF sbrs r24,0
213 01b0 00C0 rjmp .L25
214 01b2 6091 0000 lds r22,IntegralNick
215 01b6 7091 0000 lds r23,(IntegralNick)+1
216 01ba 8091 0000 lds r24,(IntegralNick)+2
217 01be 9091 0000 lds r25,(IntegralNick)+3
218 01c2 FF24 clr r15
219 01c4 0027 clr r16
220 01c6 1127 clr r17
221 01c8 20E8 ldi r18,lo8(128)
222 01ca 30E0 ldi r19,hi8(128)
223 01cc 40E0 ldi r20,hlo8(128)
224 01ce 50E0 ldi r21,hhi8(128)
225 01d0 0E94 0000 call __divmodsi4
226 01d4 C801 movw r24,r16
227 01d6 B701 movw r22,r14
228 01d8 0E94 0000 call __mulsi3
229 01dc 20E0 ldi r18,lo8(512)
230 01de 32E0 ldi r19,hi8(512)
231 01e0 40E0 ldi r20,hlo8(512)
232 01e2 50E0 ldi r21,hhi8(512)
233 01e4 0E94 0000 call __divmodsi4
234 01e8 C20F add r28,r18
235 01ea D31F adc r29,r19
236 01ec 00C0 rjmp .L34
237 .L25:
238 01ee 6091 0000 lds r22,IntegralNick
239 01f2 7091 0000 lds r23,(IntegralNick)+1
240 01f6 8091 0000 lds r24,(IntegralNick)+2
241 01fa 9091 0000 lds r25,(IntegralNick)+3
242 01fe FF24 clr r15
243 0200 0027 clr r16
244 0202 1127 clr r17
245 0204 20E8 ldi r18,lo8(128)
246 0206 30E0 ldi r19,hi8(128)
247 0208 40E0 ldi r20,hlo8(128)
248 020a 50E0 ldi r21,hhi8(128)
249 020c 0E94 0000 call __divmodsi4
250 0210 C801 movw r24,r16
251 0212 B701 movw r22,r14
252 0214 0E94 0000 call __mulsi3
253 0218 20E0 ldi r18,lo8(512)
254 021a 32E0 ldi r19,hi8(512)
255 021c 40E0 ldi r20,hlo8(512)
256 021e 50E0 ldi r21,hhi8(512)
257 0220 0E94 0000 call __divmodsi4
258 0224 C21B sub r28,r18
259 0226 D30B sbc r29,r19
260 .L34:
261 0228 D093 0000 sts (ServoValue)+1,r29
262 022c C093 0000 sts ServoValue,r28
263 0230 2091 0000 lds r18,ServoValue
264 0234 3091 0000 lds r19,(ServoValue)+1
265 0238 8091 0000 lds r24,EE_Parameter+35
266 023c 9927 clr r25
267 023e 2817 cp r18,r24
268 0240 3907 cpc r19,r25
269 0242 04F0 brlt .L35
270 0244 8091 0000 lds r24,EE_Parameter+36
271 0248 9927 clr r25
272 024a 8217 cp r24,r18
273 024c 9307 cpc r25,r19
274 024e 04F4 brge .L30
275 .L35:
276 0250 9093 0000 sts (ServoValue)+1,r25
277 0254 8093 0000 sts ServoValue,r24
278 .L30:
279 0258 8091 0000 lds r24,ServoValue
280 025c 9091 0000 lds r25,(ServoValue)+1
281 0260 9093 0000 sts (DebugOut+38)+1,r25
282 0264 8093 0000 sts DebugOut+38,r24
283 0268 8093 B300 sts 179,r24
284 026c 8091 0000 lds r24,EE_Parameter+37
285 0270 8093 0000 sts timer.2061,r24
286 0274 00C0 rjmp .L33
287 .L23:
288 0276 83E0 ldi r24,lo8(3)
289 0278 8093 B000 sts 176,r24
290 027c 5F98 cbi 43-0x20,7
291 .L33:
292 /* epilogue: frame size=0 */
293 027e FF91 pop r31
294 0280 EF91 pop r30
295 0282 DF91 pop r29
296 0284 CF91 pop r28
297 0286 BF91 pop r27
298 0288 AF91 pop r26
299 028a 9F91 pop r25
300 028c 8F91 pop r24
301 028e 7F91 pop r23
302 0290 6F91 pop r22
303 0292 5F91 pop r21
304 0294 4F91 pop r20
305 0296 3F91 pop r19
306 0298 2F91 pop r18
307 029a 1F91 pop r17
308 029c 0F91 pop r16
309 029e FF90 pop r15
310 02a0 EF90 pop r14
311 02a2 0F90 pop __tmp_reg__
312 02a4 0FBE out __SREG__,__tmp_reg__
313 02a6 0F90 pop __tmp_reg__
314 02a8 1F90 pop __zero_reg__
315 02aa 1895 reti
316 /* epilogue end (size=23) */
317 /* function __vector_9 size 173 (127) */
319 .global Timer_Init
321 Timer_Init:
322 /* prologue: frame size=0 */
323 /* prologue end (size=0) */
324 02ac 8091 0000 lds r24,CountMilliseconds
325 02b0 9091 0000 lds r25,(CountMilliseconds)+1
326 02b4 0B96 adiw r24,11
327 02b6 9093 0000 sts (tim_main)+1,r25
328 02ba 8093 0000 sts tim_main,r24
329 02be 82E0 ldi r24,lo8(2)
330 02c0 85BD out 69-0x20,r24
331 02c2 83EA ldi r24,lo8(-93)
332 02c4 84BD out 68-0x20,r24
333 02c6 17BC out 71-0x20,__zero_reg__
334 02c8 88E7 ldi r24,lo8(120)
335 02ca 88BD out 72-0x20,r24
336 02cc 96E0 ldi r25,lo8(6)
337 02ce 96BD out 70-0x20,r25
338 02d0 83EC ldi r24,lo8(-61)
339 02d2 8093 B000 sts 176,r24
340 02d6 9093 B100 sts 177,r25
341 02da E0E7 ldi r30,lo8(112)
342 02dc F0E0 ldi r31,hi8(112)
343 02de 8081 ld r24,Z
344 02e0 8260 ori r24,lo8(2)
345 02e2 8083 st Z,r24
346 02e4 EEE6 ldi r30,lo8(110)
347 02e6 F0E0 ldi r31,hi8(110)
348 02e8 8081 ld r24,Z
349 02ea 8160 ori r24,lo8(1)
350 02ec 8083 st Z,r24
351 02ee 8AE0 ldi r24,lo8(10)
352 02f0 8093 B300 sts 179,r24
353 02f4 1092 B200 sts 178,__zero_reg__
354 /* epilogue: frame size=0 */
355 02f8 0895 ret
356 /* epilogue end (size=1) */
357 /* function Timer_Init size 39 (38) */
359 .global Delay_ms
361 Delay_ms:
362 /* prologue: frame size=0 */
363 /* prologue end (size=0) */
364 02fa 2091 0000 lds r18,CountMilliseconds
365 02fe 3091 0000 lds r19,(CountMilliseconds)+1
366 0302 2F5F subi r18,lo8(-(1))
367 0304 3F4F sbci r19,hi8(-(1))
368 0306 280F add r18,r24
369 0308 391F adc r19,r25
370 .L39:
371 030a 8091 0000 lds r24,CountMilliseconds
372 030e 9091 0000 lds r25,(CountMilliseconds)+1
373 0312 A901 movw r20,r18
374 0314 481B sub r20,r24
375 0316 590B sbc r21,r25
376 0318 57FF sbrs r21,7
377 031a 00C0 rjmp .L39
378 /* epilogue: frame size=0 */
379 031c 0895 ret
380 /* epilogue end (size=1) */
381 /* function Delay_ms size 18 (17) */
383 .global CountMilliseconds
384 .global CountMilliseconds
385 .section .bss
388 CountMilliseconds:
389 0000 0000 .skip 2,0
390 .global UpdateMotor
391 .global UpdateMotor
394 UpdateMotor:
395 0002 00 .skip 1,0
396 .global cntKompass
397 .global cntKompass
400 cntKompass:
401 0003 0000 .skip 2,0
402 .global beeptime
403 .global beeptime
406 beeptime:
407 0005 0000 .skip 2,0
408 .global ServoValue
409 .global ServoValue
412 ServoValue:
413 0007 0000 .skip 2,0
414 .data
417 timer.2061:
418 0000 0A .byte 10
419 .lcomm cnt.1975,1
422 cnt_1ms.1974:
423 0001 01 .byte 1
424 .lcomm tim_main,2
425 .comm DiffNick,2,1
426 .comm DiffRoll,2,1
427 .comm SenderOkay,1,1
428 .comm CosinusNickWinkel,1,1
429 .comm CosinusRollWinkel,1,1
430 .comm durchschnitt_northing,4,1
431 .comm durchschnitt_easting,4,1
432 .comm gps_p,2,1
433 .comm gps_d,2,1
434 .comm skal,2,1
435 .comm gps_gethome,2,1
436 .comm RemoteTasten,1,1
437 .comm Timeout,1,1
438 .comm IntegralNick,4,1
439 .comm IntegralNick2,4,1
440 .comm IntegralRoll,4,1
441 .comm IntegralRoll2,4,1
442 .comm Mess_IntegralNick,4,1
443 .comm Mess_IntegralNick2,4,1
444 .comm Mess_IntegralRoll,4,1
445 .comm Mess_IntegralRoll2,4,1
446 .comm Integral_Gier,4,1
447 .comm Mess_Integral_Gier,4,1
448 .comm h,1,1
449 .comm m,1,1
450 .comm s,1,1
451 .comm Motor_Vorne,1,1
452 .comm Motor_Hinten,1,1
453 .comm Motor_Rechts,1,1
454 .comm Motor_Links,1,1
455 .comm Count,1,1
456 .comm MotorWert,5,1
457 .comm StickNick,2,1
458 .comm StickRoll,2,1
459 .comm StickGier,2,1
460 .comm MotorenEin,1,1
461 /* File "timer0.c": code 401 = 0x0191 ( 323), prologues 37, epilogues 41 */
DEFINED SYMBOLS
*ABS*:00000000 timer0.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:13 .text:00000000 __vector_18
.bss:00000009 cnt.1975
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:422 .data:00000001 cnt_1ms.1974
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:394 .bss:00000002 UpdateMotor
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:388 .bss:00000000 CountMilliseconds
*COM*:00000001 Timeout
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:406 .bss:00000005 beeptime
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:400 .bss:00000003 cntKompass
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:136 .text:00000128 SetDelay
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:152 .text:0000013a CheckDelay
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:171 .text:00000152 __vector_9
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:417 .data:00000000 timer.2061
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:412 .bss:00000007 ServoValue
*COM*:00000004 IntegralNick
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:321 .text:000002ac Timer_Init
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:419 .bss:0000000a tim_main
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccHWrDwn.s:361 .text:000002fa Delay_ms
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 SenderOkay
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
EE_Parameter
KompassValue
KompassStartwert
__divmodhi4
KompassRichtung
Parameter_ServoNickControl
__divmodsi4
__mulsi3
DebugOut
/branches/chris_hallo2/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/chris_hallo2/twimaster.d
0,0 → 1,2
twimaster.o twimaster.d : twimaster.c main.h old_macros.h _settings.h printf_P.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/chris_hallo2/twimaster.lst
0,0 → 1,321
1 .file "twimaster.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global i2c_init
13 i2c_init:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 0000 1092 B900 sts 185,__zero_reg__
17 0004 8AE2 ldi r24,lo8(42)
18 0006 8093 B800 sts 184,r24
19 /* epilogue: frame size=0 */
20 000a 0895 ret
21 /* epilogue end (size=1) */
22 /* function i2c_init size 6 (5) */
24 .global i2c_start
26 i2c_start:
27 /* prologue: frame size=0 */
28 /* prologue end (size=0) */
29 000c 85EA ldi r24,lo8(-91)
30 000e 8093 BC00 sts 188,r24
31 0012 80E0 ldi r24,lo8(0)
32 0014 90E0 ldi r25,hi8(0)
33 /* epilogue: frame size=0 */
34 0016 0895 ret
35 /* epilogue end (size=1) */
36 /* function i2c_start size 6 (5) */
38 .global i2c_stop
40 i2c_stop:
41 /* prologue: frame size=0 */
42 /* prologue end (size=0) */
43 0018 84E9 ldi r24,lo8(-108)
44 001a 8093 BC00 sts 188,r24
45 /* epilogue: frame size=0 */
46 001e 0895 ret
47 /* epilogue end (size=1) */
48 /* function i2c_stop size 4 (3) */
50 .global i2c_write_byte
52 i2c_write_byte:
53 /* prologue: frame size=0 */
54 /* prologue end (size=0) */
55 0020 1092 B900 sts 185,__zero_reg__
56 0024 8093 BB00 sts 187,r24
57 0028 85E8 ldi r24,lo8(-123)
58 002a 8093 BC00 sts 188,r24
59 002e 80E0 ldi r24,lo8(0)
60 0030 90E0 ldi r25,hi8(0)
61 /* epilogue: frame size=0 */
62 0032 0895 ret
63 /* epilogue end (size=1) */
64 /* function i2c_write_byte size 10 (9) */
66 .global __vector_26
68 __vector_26:
69 /* prologue: frame size=0 */
70 0034 1F92 push __zero_reg__
71 0036 0F92 push __tmp_reg__
72 0038 0FB6 in __tmp_reg__,__SREG__
73 003a 0F92 push __tmp_reg__
74 003c 1124 clr __zero_reg__
75 003e 8F93 push r24
76 0040 9F93 push r25
77 0042 EF93 push r30
78 0044 FF93 push r31
79 /* prologue end (size=9) */
80 0046 8091 0000 lds r24,twi_state
81 004a 8F5F subi r24,lo8(-(1))
82 004c 8093 0000 sts twi_state,r24
83 0050 8150 subi r24,lo8(-(-1))
84 0052 8330 cpi r24,lo8(3)
85 0054 01F4 brne .+2
86 0056 00C0 rjmp .L14
87 0058 8430 cpi r24,lo8(4)
88 005a 00F4 brsh .L19
89 005c 8130 cpi r24,lo8(1)
90 005e 01F0 breq .L12
91 0060 8230 cpi r24,lo8(2)
92 0062 00F4 brsh .L13
93 0064 00C0 rjmp .L38
94 .L19:
95 0066 8530 cpi r24,lo8(5)
96 0068 01F4 brne .+2
97 006a 00C0 rjmp .L16
98 006c 8530 cpi r24,lo8(5)
99 006e 00F0 brlo .L15
100 0070 8630 cpi r24,lo8(6)
101 0072 01F4 brne .+2
102 0074 00C0 rjmp .L17
103 0076 8730 cpi r24,lo8(7)
104 0078 01F0 breq .+2
105 007a 00C0 rjmp .L37
106 007c 00C0 rjmp .L18
107 .L38:
108 007e 8091 0000 lds r24,motor
109 0082 880F lsl r24
110 0084 8E5A subi r24,lo8(-(82))
111 0086 00C0 rjmp .L39
112 .L12:
113 0088 8091 0000 lds r24,motor
114 008c 8F5F subi r24,lo8(-(1))
115 008e 8093 0000 sts motor,r24
116 0092 8150 subi r24,lo8(-(-1))
117 0094 8130 cpi r24,lo8(1)
118 0096 01F4 brne .+2
119 0098 00C0 rjmp .L32
120 009a 8130 cpi r24,lo8(1)
121 009c 00F0 brlo .L20
122 009e 8230 cpi r24,lo8(2)
123 00a0 01F4 brne .+2
124 00a2 00C0 rjmp .L33
125 00a4 8330 cpi r24,lo8(3)
126 00a6 01F0 breq .+2
127 00a8 00C0 rjmp .L37
128 00aa 00C0 rjmp .L34
129 .L20:
130 00ac 8091 0000 lds r24,Motor_Vorne
131 .L39:
132 00b0 1092 B900 sts 185,__zero_reg__
133 00b4 8093 BB00 sts 187,r24
134 00b8 85E8 ldi r24,lo8(-123)
135 .L40:
136 00ba 8093 BC00 sts 188,r24
137 00be 00C0 rjmp .L37
138 .L13:
139 00c0 84E9 ldi r24,lo8(-108)
140 00c2 8093 BC00 sts 188,r24
141 00c6 8091 0000 lds r24,motor
142 00ca 8430 cpi r24,lo8(4)
143 00cc 00F4 brsh .L24
144 00ce 1092 0000 sts twi_state,__zero_reg__
145 00d2 00C0 rjmp .L26
146 .L24:
147 00d4 1092 0000 sts motor,__zero_reg__
148 .L26:
149 00d8 85EA ldi r24,lo8(-91)
150 00da 00C0 rjmp .L40
151 .L14:
152 00dc 8091 0000 lds r24,motorread
153 00e0 880F lsl r24
154 00e2 8D5A subi r24,lo8(-(83))
155 00e4 00C0 rjmp .L39
156 .L15:
157 00e6 8091 0000 lds r24,motorread
158 00ea 8130 cpi r24,lo8(1)
159 00ec 01F0 breq .L32
160 00ee 8130 cpi r24,lo8(1)
161 00f0 00F0 brlo .L20
162 00f2 8230 cpi r24,lo8(2)
163 00f4 01F0 breq .L33
164 00f6 8330 cpi r24,lo8(3)
165 00f8 01F4 brne .L37
166 00fa 00C0 rjmp .L34
167 .L16:
168 00fc 8091 BB00 lds r24,187
169 0100 E091 0000 lds r30,motorread
170 0104 FF27 clr r31
171 0106 E050 subi r30,lo8(-(motor_rx))
172 0108 F040 sbci r31,hi8(-(motor_rx))
173 010a 8083 st Z,r24
174 .L17:
175 010c 8091 0000 lds r24,motorread
176 0110 8130 cpi r24,lo8(1)
177 0112 01F0 breq .L32
178 0114 8130 cpi r24,lo8(1)
179 0116 00F0 brlo .L20
180 0118 8230 cpi r24,lo8(2)
181 011a 01F0 breq .L33
182 011c 8330 cpi r24,lo8(3)
183 011e 01F4 brne .L37
184 0120 00C0 rjmp .L34
185 .L32:
186 0122 8091 0000 lds r24,Motor_Hinten
187 0126 00C0 rjmp .L39
188 .L33:
189 0128 8091 0000 lds r24,Motor_Rechts
190 012c 00C0 rjmp .L39
191 .L34:
192 012e 8091 0000 lds r24,Motor_Links
193 0132 00C0 rjmp .L39
194 .L18:
195 0134 8091 0000 lds r24,motorread
196 0138 9091 BB00 lds r25,187
197 013c E82F mov r30,r24
198 013e FF27 clr r31
199 0140 E050 subi r30,lo8(-(motor_rx))
200 0142 F040 sbci r31,hi8(-(motor_rx))
201 0144 9483 std Z+4,r25
202 0146 8F5F subi r24,lo8(-(1))
203 0148 8093 0000 sts motorread,r24
204 014c 8430 cpi r24,lo8(4)
205 014e 00F0 brlo .L35
206 0150 1092 0000 sts motorread,__zero_reg__
207 .L35:
208 0154 84E9 ldi r24,lo8(-108)
209 0156 8093 BC00 sts 188,r24
210 015a 1092 0000 sts twi_state,__zero_reg__
211 .L37:
212 /* epilogue: frame size=0 */
213 015e FF91 pop r31
214 0160 EF91 pop r30
215 0162 9F91 pop r25
216 0164 8F91 pop r24
217 0166 0F90 pop __tmp_reg__
218 0168 0FBE out __SREG__,__tmp_reg__
219 016a 0F90 pop __tmp_reg__
220 016c 1F90 pop __zero_reg__
221 016e 1895 reti
222 /* epilogue end (size=9) */
223 /* function __vector_26 size 158 (140) */
225 .global twi_state
226 .global twi_state
227 .section .bss
230 twi_state:
231 0000 00 .skip 1,0
232 .global motor
233 .global motor
236 motor:
237 0001 00 .skip 1,0
238 .global motorread
239 .global motorread
242 motorread:
243 0002 00 .skip 1,0
244 .comm DiffNick,2,1
245 .comm DiffRoll,2,1
246 .comm SenderOkay,1,1
247 .comm CosinusNickWinkel,1,1
248 .comm CosinusRollWinkel,1,1
249 .comm durchschnitt_northing,4,1
250 .comm durchschnitt_easting,4,1
251 .comm gps_p,2,1
252 .comm gps_d,2,1
253 .comm skal,2,1
254 .comm gps_gethome,2,1
255 .comm motor_rx,8,1
256 .comm RemoteTasten,1,1
257 .comm Timeout,1,1
258 .comm IntegralNick,4,1
259 .comm IntegralNick2,4,1
260 .comm IntegralRoll,4,1
261 .comm IntegralRoll2,4,1
262 .comm Mess_IntegralNick,4,1
263 .comm Mess_IntegralNick2,4,1
264 .comm Mess_IntegralRoll,4,1
265 .comm Mess_IntegralRoll2,4,1
266 .comm Integral_Gier,4,1
267 .comm Mess_Integral_Gier,4,1
268 .comm h,1,1
269 .comm m,1,1
270 .comm s,1,1
271 .comm Motor_Vorne,1,1
272 .comm Motor_Hinten,1,1
273 .comm Motor_Rechts,1,1
274 .comm Motor_Links,1,1
275 .comm Count,1,1
276 .comm MotorWert,5,1
277 .comm StickNick,2,1
278 .comm StickRoll,2,1
279 .comm StickGier,2,1
280 .comm MotorenEin,1,1
281 /* File "twimaster.c": code 184 = 0x00b8 ( 162), prologues 9, epilogues 13 */
DEFINED SYMBOLS
*ABS*:00000000 twimaster.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:13 .text:00000000 i2c_init
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:26 .text:0000000c i2c_start
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:40 .text:00000018 i2c_stop
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:52 .text:00000020 i2c_write_byte
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:68 .text:00000034 __vector_26
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:230 .bss:00000000 twi_state
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:236 .bss:00000001 motor
*COM*:00000001 Motor_Vorne
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccQBlghb.s:242 .bss:00000002 motorread
*COM*:00000008 motor_rx
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 SenderOkay
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 RemoteTasten
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/chris_hallo2/uart.c
0,0 → 1,656
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// +
// + GPS read out:
// + modified Version of the Pitschu Brushless Ufo - (c) Peter Schulten, Mülheim, Germany
// + only for non-profit use
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
static uint8_t gpsState;
#define GPS_EMPTY 0
#define GPS_SYNC1 1
#define GPS_SYNC2 2
#define GPS_CLASS 3
#define GPS_LEN1 4
#define GPS_LEN2 5
#define GPS_FILLING 6
#define GPS_CKA 7
#define GPS_CKB 8
 
//gpsInfo_t gpsPoints[5]; // stored position to fly to (currently only 1 target supported)
//gpsInfo_t *gpsTarget; // points to one of the targets
gpsInfo_t actualPos; // measured position (last gps record)
 
#define SYNC_CHAR1 0xb5
#define SYNC_CHAR2 0x62
 
#define CLASS_NAV 0x01
#define MSGID_POSECEF 0x01
#define MSGID_STATUS 0x03
//#define MSGID_POSLLH 0x02
#define MSGID_VELECEF 0x11
//#define MSGID_POSUTM 0x08
//#define MSGID_VELNED 0x12
 
 
 
typedef struct {
unsigned long ITOW; // time of week
uint8_t GPSfix; // GPSfix Type, range 0..6
uint8_t Flags; // Navigation Status Flags
uint8_t DiffS; // Differential Status
uint8_t res; // reserved
unsigned long TTFF; // Time to first fix (millisecond time tag)
unsigned long MSSS; // Milliseconds since Startup / Reset
uint8_t packetStatus;
} NAV_STATUS_t;
 
/*
typedef struct {
unsigned long ITOW; // time of week
long LON; // longitude in 1e-07 deg
long LAT; // lattitude
long HEIGHT; // height in mm
long HMSL; // height above mean sea level im mm
unsigned long Hacc; // horizontal accuracy in mm
unsigned long Vacc; // vertical accuracy in mm
uint8_t packetStatus;
} NAV_POSLLH_t;
 
 
typedef struct {
unsigned long ITOW; // time of week
long EAST; // cm UTM Easting
long NORTH; // cm UTM Nording
long ALT; // cm altitude
uint8_t ZONE; // UTM zone number
uint8_t HEM; // Hemisphere Indicator (0=North, 1=South)
uint8_t packetStatus;
} NAV_POSUTM_t;
 
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long VEL_N; // cm/s NED north velocity
long VEL_E; // cm/s NED east velocity
long VEL_D; // cm/s NED down velocity
unsigned long Speed; // cm/s Speed (3-D)
unsigned long GSpeed; // cm/s Ground Speed (2-D)
long Heading; // deg (1e-05) Heading 2-D
unsigned long SAcc; // cm/s Speed Accuracy Estimate
unsigned long CAcc; // deg Course / Heading Accuracy Estimate
uint8_t packetStatus;
} NAV_VELNED_t;
*/
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long ECEF_X; // ecef x / cm
long ECEF_Y; // ecef y / cm
long ECEF_Z; // ecef z / cm
unsigned long Pacc; // Abweichung
uint8_t packetStatus;
} NAV_POSECEF_t ;
 
typedef struct {
unsigned long ITOW; // ms GPS Millisecond Time of Week
long ECEFVX; // ecef x velocity cm/s
long ECEFVY; // ecef y velocity cm/s
long ECEFVZ; // ecef z velocity cm/s
unsigned long SAcc; // Abweichung
uint8_t packetStatus;
} NAV_VELECEF_t;
 
 
NAV_STATUS_t navStatus;
NAV_POSECEF_t navPosECEF;
NAV_VELECEF_t navVelECEF;
 
//NAV_POSLLH_t navPosLlh;
//NAV_POSUTM_t navPosUtm;
//NAV_VELECEF avVelNed;
 
volatile char *ubxP, *ubxEp, *ubxSp; // pointers to packet currently transfered
volatile uint8_t CK_A, CK_B; // UBX checksum bytes
volatile unsigned short msgLen;
volatile uint8_t msgID;
volatile uint8_t ignorePacket; // true when previous packet was not processed
 
 
// distance to target position
long rollOffset; // in 10cm
long nickOffset;
 
#define GPS_INTCYCLES 100
#define GPS_I_LIMIT (long)(40 * MAINLOOPS_PER_SEC)
 
#ifdef GPS_DEBUG // if set then the GPS data is transfered to display
extern volatile uint8_t v24state;
char buf[200];
char *bp;
char *ep;
#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
void GPSscanData (void)
{
 
 
if (navPosECEF.packetStatus == 1) // valid packet
{
actualPos.x = navPosECEF.ECEF_X; //ECEF X in cm
actualPos.y = navPosECEF.ECEF_Y; //ECEF Y in cm
actualPos.z = navPosECEF.ECEF_Z; //ECEF Z in cm
navPosECEF.packetStatus = 0;
}
 
if (navStatus.packetStatus == 1) // valid packet
{
actualPos.state = navStatus.GPSfix;
navStatus.packetStatus = 0;
}
if (navVelECEF.packetStatus == 1) // valid packet
{
actualPos.vx = navVelECEF.ECEFVX; //ECEF VEL X in cm/s
actualPos.vy = navVelECEF.ECEFVY; //ECEF VEL Y in cm/s
actualPos.vz = navVelECEF.ECEFVZ; //ECEF VEL Z in cm/s
navVelECEF.packetStatus = 0;
}
/*
if (navPosUtm.packetStatus == 1) // valid packet
{
actualPos.northing = navPosUtm.NORTH; ///10; // in 10cm;
actualPos.easting = navPosUtm.EAST; //10;
actualPos.altitude = navPosUtm.ALT; //10;
navPosUtm.packetStatus = 0;
}
 
 
if (navPosLlh.packetStatus == 1)
navPosLlh.packetStatus = 0;
if (navVelNed.packetStatus == 1){
actualPos.velNorth = navVelNed.VEL_N;
actualPos.velEast = navVelNed.VEL_E;
navVelNed.packetStatus = 0;}
 
navPosLlh and navVelNed currently not used
*/
 
if (actualPos.state != 0){ROT_ON;} //-> Rot blinkt mit 4Hz wenn GPS Signal brauchbar
 
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
uint8_t c;
uint8_t re;
 
re = (UCSR0A & (_B1(FE0) | _B1(DOR0))); // any error occured ?
c = SioTmp;
#ifdef GPS_DEBUG
*bp++ = c;
if (bp >= (buf+200)) bp = buf;
if (v24state == 0)
{
v24state = 1;
UDR0 = *ep++;
if (ep >= buf+200)
ep = buf;
UCSR0B |= _B1(UDRIE0); //enable further irqs
}
#endif
 
if (re == 0)
{
switch (gpsState)
{
case GPS_EMPTY:
if (c == SYNC_CHAR1)
gpsState = GPS_SYNC1;
break;
case GPS_SYNC1:
if (c == SYNC_CHAR2)
gpsState = GPS_SYNC2;
else if (c != SYNC_CHAR1)
gpsState = GPS_EMPTY;
break;
case GPS_SYNC2:
if (c == CLASS_NAV)
gpsState = GPS_CLASS;
else
gpsState = GPS_EMPTY;
break;
case GPS_CLASS: // msg ID seen: init packed receive
msgID = c;
CK_A = CLASS_NAV + c;
CK_B = CLASS_NAV + CK_A;
gpsState = GPS_LEN1;
 
switch (msgID)
{
case MSGID_STATUS:
ubxP = (char*)&navStatus;
ubxEp = (char*)(&navStatus + sizeof(NAV_STATUS_t));
ubxSp = (char*)&navStatus.packetStatus;
ignorePacket = navStatus.packetStatus;
break;
case MSGID_POSECEF:
ubxP = (char*)&navPosECEF;
ubxEp = (char*)(&navPosECEF + sizeof(NAV_POSECEF_t));
ubxSp = (char*)&navPosECEF.packetStatus;
ignorePacket = navPosECEF.packetStatus;
break;
case MSGID_VELECEF:
ubxP = (char*)&navVelECEF;
ubxEp = (char*)(&navVelECEF + sizeof(NAV_VELECEF_t));
ubxSp = (char*)&navVelECEF.packetStatus;
ignorePacket = navVelECEF.packetStatus;
break;
/*
case MSGID_POSLLH:
ubxP = (char*)&navPosLlh;
ubxEp = (char*)(&navPosLlh + sizeof(NAV_POSLLH_t));
ubxSp = (char*)&navPosLlh.packetStatus;
ignorePacket = navPosLlh.packetStatus;
break;
case MSGID_POSUTM:
ubxP = (char*)&navPosUtm;
ubxEp = (char*)(&navPosUtm + sizeof(NAV_POSUTM_t));
ubxSp = (char*)&navPosUtm.packetStatus;
ignorePacket = navPosUtm.packetStatus;
break;
case MSGID_VELNED:
ubxP = (char*)&navVelNed;
ubxEp = (char*)(&navVelNed + sizeof(NAV_VELNED_t));
ubxSp = (char*)&navVelNed.packetStatus;
ignorePacket = navVelNed.packetStatus;
break;
*/
default:
ignorePacket = 1;
ubxSp = (char*)0;
}
break;
case GPS_LEN1: // first len byte
msgLen = c;
CK_A += c;
CK_B += CK_A;
gpsState = GPS_LEN2;
break;
case GPS_LEN2: // second len byte
msgLen = msgLen + (c * 256);
CK_A += c;
CK_B += CK_A;
gpsState = GPS_FILLING; // next data will be stored in packet struct
break;
case GPS_FILLING:
CK_A += c;
CK_B += CK_A;
 
if ( !ignorePacket && ubxP < ubxEp)
*ubxP++ = c;
 
if (--msgLen == 0)
gpsState = GPS_CKA;
break;
case GPS_CKA:
if (c == CK_A)
gpsState = GPS_CKB;
else
gpsState = GPS_EMPTY;
break;
case GPS_CKB:
if (c == CK_B && ubxSp) // No error -> packet received successfully
*ubxSp = 1; // set packetStatus in struct
gpsState = GPS_EMPTY; // ready for next packet
break;
default:
gpsState = GPS_EMPTY; // ready for next packet
}
}
else // discard any data if error occured
{
gpsState = GPS_EMPTY;
GPSscanData (); //Test kann ggf. wieder gelöscht werden!
}
GPSscanData ();
 
 
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
unsigned char tmp_char_arr3[3];
unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
gpsState = GPS_EMPTY;
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/chris_hallo2/uart.d
0,0 → 1,2
uart.o uart.d : uart.c main.h old_macros.h _settings.h printf_P.h timer0.h uart.h \
analog.h twimaster.h menu.h rc.h fc.h gps.h
/branches/chris_hallo2/uart.h
0,0 → 1,118
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
#define _B1(bit) (1 << (bit))
#define _B0(bit) (0 << (bit))
 
typedef struct {
long x; // in cm (+ = north)
long y; // in cm (+ = east)
long z; // in cm
long vx;
long vy;
long vz;
//long groundSpeed;
//long heading;
 
uint8_t state; // status of data: 0 = invlid; 1 = valid
uint8_t noSV; // number of sats
} gpsInfo_t;
 
 
extern gpsInfo_t lockedPos; // stored position to fly to
extern gpsInfo_t actualPos; // measured position (last gps record)
 
extern void GPSscanData (void);
extern void GPSupdate(void);
extern void GPSsaveTarget (uint8_t mode);
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/chris_hallo2/uart.lst
0,0 → 1,1374
1 .file "uart.c"
2 .arch atmega644
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
11 .global __vector_22
13 __vector_22:
14 /* prologue: frame size=0 */
15 0000 1F92 push __zero_reg__
16 0002 0F92 push __tmp_reg__
17 0004 0FB6 in __tmp_reg__,__SREG__
18 0006 0F92 push __tmp_reg__
19 0008 1124 clr __zero_reg__
20 000a 8F93 push r24
21 000c 9F93 push r25
22 000e EF93 push r30
23 0010 FF93 push r31
24 /* prologue end (size=9) */
25 0012 8091 0000 lds r24,UebertragungAbgeschlossen
26 0016 8823 tst r24
27 0018 01F4 brne .L2
28 001a 8091 0000 lds r24,ptr.2021
29 001e 9091 0000 lds r25,(ptr.2021)+1
30 0022 0196 adiw r24,1
31 0024 9093 0000 sts (ptr.2021)+1,r25
32 0028 8093 0000 sts ptr.2021,r24
33 002c FC01 movw r30,r24
34 002e E050 subi r30,lo8(-(SendeBuffer))
35 0030 F040 sbci r31,hi8(-(SendeBuffer))
36 0032 E081 ld r30,Z
37 0034 ED30 cpi r30,lo8(13)
38 0036 01F0 breq .L4
39 0038 8639 cpi r24,150
40 003a 9105 cpc r25,__zero_reg__
41 003c 01F4 brne .L6
42 .L4:
43 003e 1092 0000 sts (ptr.2021)+1,__zero_reg__
44 0042 1092 0000 sts ptr.2021,__zero_reg__
45 0046 81E0 ldi r24,lo8(1)
46 0048 8093 0000 sts UebertragungAbgeschlossen,r24
47 .L6:
48 004c E093 C600 sts 198,r30
49 0050 00C0 rjmp .L8
50 .L2:
51 0052 1092 0000 sts (ptr.2021)+1,__zero_reg__
52 0056 1092 0000 sts ptr.2021,__zero_reg__
53 .L8:
54 /* epilogue: frame size=0 */
55 005a FF91 pop r31
56 005c EF91 pop r30
57 005e 9F91 pop r25
58 0060 8F91 pop r24
59 0062 0F90 pop __tmp_reg__
60 0064 0FBE out __SREG__,__tmp_reg__
61 0066 0F90 pop __tmp_reg__
62 0068 1F90 pop __zero_reg__
63 006a 1895 reti
64 /* epilogue end (size=9) */
65 /* function __vector_22 size 54 (36) */
67 .global GPSscanData
69 GPSscanData:
70 /* prologue: frame size=0 */
71 /* prologue end (size=0) */
72 006c 8091 0000 lds r24,navPosECEF+20
73 0070 8130 cpi r24,lo8(1)
74 0072 01F4 brne .L10
75 0074 8091 0000 lds r24,navPosECEF+4
76 0078 9091 0000 lds r25,(navPosECEF+4)+1
77 007c A091 0000 lds r26,(navPosECEF+4)+2
78 0080 B091 0000 lds r27,(navPosECEF+4)+3
79 0084 8093 0000 sts actualPos,r24
80 0088 9093 0000 sts (actualPos)+1,r25
81 008c A093 0000 sts (actualPos)+2,r26
82 0090 B093 0000 sts (actualPos)+3,r27
83 0094 8091 0000 lds r24,navPosECEF+8
84 0098 9091 0000 lds r25,(navPosECEF+8)+1
85 009c A091 0000 lds r26,(navPosECEF+8)+2
86 00a0 B091 0000 lds r27,(navPosECEF+8)+3
87 00a4 8093 0000 sts actualPos+4,r24
88 00a8 9093 0000 sts (actualPos+4)+1,r25
89 00ac A093 0000 sts (actualPos+4)+2,r26
90 00b0 B093 0000 sts (actualPos+4)+3,r27
91 00b4 8091 0000 lds r24,navPosECEF+12
92 00b8 9091 0000 lds r25,(navPosECEF+12)+1
93 00bc A091 0000 lds r26,(navPosECEF+12)+2
94 00c0 B091 0000 lds r27,(navPosECEF+12)+3
95 00c4 8093 0000 sts actualPos+8,r24
96 00c8 9093 0000 sts (actualPos+8)+1,r25
97 00cc A093 0000 sts (actualPos+8)+2,r26
98 00d0 B093 0000 sts (actualPos+8)+3,r27
99 00d4 1092 0000 sts navPosECEF+20,__zero_reg__
100 .L10:
101 00d8 8091 0000 lds r24,navStatus+16
102 00dc 8130 cpi r24,lo8(1)
103 00de 01F4 brne .L12
104 00e0 8091 0000 lds r24,navStatus+4
105 00e4 8093 0000 sts actualPos+24,r24
106 00e8 1092 0000 sts navStatus+16,__zero_reg__
107 .L12:
108 00ec 8091 0000 lds r24,navVelECEF+20
109 00f0 8130 cpi r24,lo8(1)
110 00f2 01F4 brne .L14
111 00f4 8091 0000 lds r24,navVelECEF+4
112 00f8 9091 0000 lds r25,(navVelECEF+4)+1
113 00fc A091 0000 lds r26,(navVelECEF+4)+2
114 0100 B091 0000 lds r27,(navVelECEF+4)+3
115 0104 8093 0000 sts actualPos+12,r24
116 0108 9093 0000 sts (actualPos+12)+1,r25
117 010c A093 0000 sts (actualPos+12)+2,r26
118 0110 B093 0000 sts (actualPos+12)+3,r27
119 0114 8091 0000 lds r24,navVelECEF+8
120 0118 9091 0000 lds r25,(navVelECEF+8)+1
121 011c A091 0000 lds r26,(navVelECEF+8)+2
122 0120 B091 0000 lds r27,(navVelECEF+8)+3
123 0124 8093 0000 sts actualPos+16,r24
124 0128 9093 0000 sts (actualPos+16)+1,r25
125 012c A093 0000 sts (actualPos+16)+2,r26
126 0130 B093 0000 sts (actualPos+16)+3,r27
127 0134 8091 0000 lds r24,navVelECEF+12
128 0138 9091 0000 lds r25,(navVelECEF+12)+1
129 013c A091 0000 lds r26,(navVelECEF+12)+2
130 0140 B091 0000 lds r27,(navVelECEF+12)+3
131 0144 8093 0000 sts actualPos+20,r24
132 0148 9093 0000 sts (actualPos+20)+1,r25
133 014c A093 0000 sts (actualPos+20)+2,r26
134 0150 B093 0000 sts (actualPos+20)+3,r27
135 0154 1092 0000 sts navVelECEF+20,__zero_reg__
136 .L14:
137 0158 8091 0000 lds r24,actualPos+24
138 015c 8111 cpse r24,__zero_reg__
139 015e 289A sbi 37-0x20,0
140 .L18:
141 0160 0895 ret
142 /* epilogue: frame size=0 */
143 /* epilogue: noreturn */
144 /* epilogue end (size=0) */
145 /* function GPSscanData size 124 (124) */
147 .global __vector_20
149 __vector_20:
150 /* prologue: frame size=0 */
151 0162 1F92 push __zero_reg__
152 0164 0F92 push __tmp_reg__
153 0166 0FB6 in __tmp_reg__,__SREG__
154 0168 0F92 push __tmp_reg__
155 016a 1124 clr __zero_reg__
156 016c 2F93 push r18
157 016e 3F93 push r19
158 0170 4F93 push r20
159 0172 5F93 push r21
160 0174 6F93 push r22
161 0176 7F93 push r23
162 0178 8F93 push r24
163 017a 9F93 push r25
164 017c AF93 push r26
165 017e BF93 push r27
166 0180 CF93 push r28
167 0182 DF93 push r29
168 0184 EF93 push r30
169 0186 FF93 push r31
170 /* prologue end (size=19) */
171 0188 8091 C600 lds r24,198
172 018c 8093 0000 sts SioTmp,r24
173 0190 8091 C000 lds r24,192
174 0194 4091 0000 lds r20,SioTmp
175 0198 8871 andi r24,lo8(24)
176 019a 01F0 breq .+2
177 019c 00C0 rjmp .L20
178 019e 8091 0000 lds r24,gpsState
179 01a2 8430 cpi r24,lo8(4)
180 01a4 01F4 brne .+2
181 01a6 00C0 rjmp .L27
182 01a8 8530 cpi r24,lo8(5)
183 01aa 00F4 brsh .L32
184 01ac 8130 cpi r24,lo8(1)
185 01ae 01F0 breq .L24
186 01b0 8130 cpi r24,lo8(1)
187 01b2 00F0 brlo .L23
188 01b4 8230 cpi r24,lo8(2)
189 01b6 01F0 breq .L25
190 01b8 8330 cpi r24,lo8(3)
191 01ba 01F0 breq .+2
192 01bc 00C0 rjmp .L22
193 01be 00C0 rjmp .L26
194 .L32:
195 01c0 8630 cpi r24,lo8(6)
196 01c2 01F4 brne .+2
197 01c4 00C0 rjmp .L29
198 01c6 8630 cpi r24,lo8(6)
199 01c8 00F4 brsh .+2
200 01ca 00C0 rjmp .L28
201 01cc 8730 cpi r24,lo8(7)
202 01ce 01F4 brne .+2
203 01d0 00C0 rjmp .L30
204 01d2 8830 cpi r24,lo8(8)
205 01d4 01F0 breq .+2
206 01d6 00C0 rjmp .L22
207 01d8 00C0 rjmp .L31
208 .L23:
209 01da 453B cpi r20,lo8(-75)
210 01dc 01F0 breq .+2
211 01de 00C0 rjmp .L33
212 01e0 81E0 ldi r24,lo8(1)
213 01e2 00C0 rjmp .L79
214 .L24:
215 01e4 4236 cpi r20,lo8(98)
216 01e6 01F4 brne .L35
217 01e8 82E0 ldi r24,lo8(2)
218 .L79:
219 01ea 8093 0000 sts gpsState,r24
220 01ee 00C0 rjmp .L33
221 .L35:
222 01f0 453B cpi r20,lo8(-75)
223 01f2 01F4 brne .+2
224 01f4 00C0 rjmp .L33
225 01f6 00C0 rjmp .L22
226 .L25:
227 01f8 4130 cpi r20,lo8(1)
228 01fa 01F0 breq .+2
229 01fc 00C0 rjmp .L22
230 01fe 83E0 ldi r24,lo8(3)
231 0200 00C0 rjmp .L79
232 .L26:
233 0202 4093 0000 sts msgID,r20
234 0206 4F5F subi r20,lo8(-(1))
235 0208 4093 0000 sts CK_A,r20
236 020c 8091 0000 lds r24,CK_A
237 0210 8F5F subi r24,lo8(-(1))
238 0212 8093 0000 sts CK_B,r24
239 0216 84E0 ldi r24,lo8(4)
240 0218 8093 0000 sts gpsState,r24
241 021c 8091 0000 lds r24,msgID
242 0220 8330 cpi r24,lo8(3)
243 0222 01F0 breq .L42
244 0224 8131 cpi r24,lo8(17)
245 0226 01F0 breq .L43
246 0228 8130 cpi r24,lo8(1)
247 022a 01F0 breq .+2
248 022c 00C0 rjmp .L77
249 022e 00C0 rjmp .L41
250 .L42:
251 0230 80E0 ldi r24,lo8(navStatus)
252 0232 90E0 ldi r25,hi8(navStatus)
253 0234 9093 0000 sts (ubxP)+1,r25
254 0238 8093 0000 sts ubxP,r24
255 023c 20E0 ldi r18,lo8(navStatus+289)
256 023e 30E0 ldi r19,hi8(navStatus+289)
257 0240 3093 0000 sts (ubxEp)+1,r19
258 0244 2093 0000 sts ubxEp,r18
259 0248 4096 adiw r24,16
260 024a 9093 0000 sts (ubxSp)+1,r25
261 024e 8093 0000 sts ubxSp,r24
262 0252 8091 0000 lds r24,navStatus+16
263 0256 00C0 rjmp .L80
264 .L41:
265 0258 80E0 ldi r24,lo8(navPosECEF)
266 025a 90E0 ldi r25,hi8(navPosECEF)
267 025c 9093 0000 sts (ubxP)+1,r25
268 0260 8093 0000 sts ubxP,r24
269 0264 20E0 ldi r18,lo8(navPosECEF+441)
270 0266 30E0 ldi r19,hi8(navPosECEF+441)
271 0268 3093 0000 sts (ubxEp)+1,r19
272 026c 2093 0000 sts ubxEp,r18
273 0270 4496 adiw r24,20
274 0272 9093 0000 sts (ubxSp)+1,r25
275 0276 8093 0000 sts ubxSp,r24
276 027a 8091 0000 lds r24,navPosECEF+20
277 027e 00C0 rjmp .L80
278 .L43:
279 0280 80E0 ldi r24,lo8(navVelECEF)
280 0282 90E0 ldi r25,hi8(navVelECEF)
281 0284 9093 0000 sts (ubxP)+1,r25
282 0288 8093 0000 sts ubxP,r24
283 028c 20E0 ldi r18,lo8(navVelECEF+441)
284 028e 30E0 ldi r19,hi8(navVelECEF+441)
285 0290 3093 0000 sts (ubxEp)+1,r19
286 0294 2093 0000 sts ubxEp,r18
287 0298 4496 adiw r24,20
288 029a 9093 0000 sts (ubxSp)+1,r25
289 029e 8093 0000 sts ubxSp,r24
290 02a2 8091 0000 lds r24,navVelECEF+20
291 .L80:
292 02a6 8093 0000 sts ignorePacket,r24
293 02aa 00C0 rjmp .L33
294 .L77:
295 02ac 81E0 ldi r24,lo8(1)
296 02ae 8093 0000 sts ignorePacket,r24
297 02b2 1092 0000 sts (ubxSp)+1,__zero_reg__
298 02b6 1092 0000 sts ubxSp,__zero_reg__
299 02ba 00C0 rjmp .L33
300 .L27:
301 02bc 842F mov r24,r20
302 02be 9927 clr r25
303 02c0 9093 0000 sts (msgLen)+1,r25
304 02c4 8093 0000 sts msgLen,r24
305 02c8 8091 0000 lds r24,CK_A
306 02cc 840F add r24,r20
307 02ce 8093 0000 sts CK_A,r24
308 02d2 8091 0000 lds r24,CK_B
309 02d6 9091 0000 lds r25,CK_A
310 02da 890F add r24,r25
311 02dc 8093 0000 sts CK_B,r24
312 02e0 85E0 ldi r24,lo8(5)
313 02e2 00C0 rjmp .L79
314 .L28:
315 02e4 2091 0000 lds r18,msgLen
316 02e8 3091 0000 lds r19,(msgLen)+1
317 02ec 842F mov r24,r20
318 02ee 9927 clr r25
319 02f0 982F mov r25,r24
320 02f2 8827 clr r24
321 02f4 280F add r18,r24
322 02f6 391F adc r19,r25
323 02f8 3093 0000 sts (msgLen)+1,r19
324 02fc 2093 0000 sts msgLen,r18
325 0300 8091 0000 lds r24,CK_A
326 0304 840F add r24,r20
327 0306 8093 0000 sts CK_A,r24
328 030a 8091 0000 lds r24,CK_B
329 030e 9091 0000 lds r25,CK_A
330 0312 890F add r24,r25
331 0314 8093 0000 sts CK_B,r24
332 0318 86E0 ldi r24,lo8(6)
333 031a 00C0 rjmp .L79
334 .L29:
335 031c 8091 0000 lds r24,CK_A
336 0320 840F add r24,r20
337 0322 8093 0000 sts CK_A,r24
338 0326 8091 0000 lds r24,CK_B
339 032a 9091 0000 lds r25,CK_A
340 032e 890F add r24,r25
341 0330 8093 0000 sts CK_B,r24
342 0334 8091 0000 lds r24,ignorePacket
343 0338 8823 tst r24
344 033a 01F4 brne .L44
345 033c E091 0000 lds r30,ubxP
346 0340 F091 0000 lds r31,(ubxP)+1
347 0344 8091 0000 lds r24,ubxEp
348 0348 9091 0000 lds r25,(ubxEp)+1
349 034c E817 cp r30,r24
350 034e F907 cpc r31,r25
351 0350 00F4 brsh .L44
352 0352 4193 st Z+,r20
353 0354 F093 0000 sts (ubxP)+1,r31
354 0358 E093 0000 sts ubxP,r30
355 .L44:
356 035c 8091 0000 lds r24,msgLen
357 0360 9091 0000 lds r25,(msgLen)+1
358 0364 0197 sbiw r24,1
359 0366 9093 0000 sts (msgLen)+1,r25
360 036a 8093 0000 sts msgLen,r24
361 036e 8091 0000 lds r24,msgLen
362 0372 9091 0000 lds r25,(msgLen)+1
363 0376 892B or r24,r25
364 0378 01F4 brne .L33
365 037a 87E0 ldi r24,lo8(7)
366 037c 00C0 rjmp .L79
367 .L30:
368 037e 8091 0000 lds r24,CK_A
369 0382 4817 cp r20,r24
370 0384 01F4 brne .L22
371 0386 88E0 ldi r24,lo8(8)
372 0388 00C0 rjmp .L79
373 .L31:
374 038a 8091 0000 lds r24,CK_B
375 038e 4817 cp r20,r24
376 0390 01F4 brne .L22
377 0392 E091 0000 lds r30,ubxSp
378 0396 F091 0000 lds r31,(ubxSp)+1
379 039a 3097 sbiw r30,0
380 039c 01F0 breq .L22
381 039e 81E0 ldi r24,lo8(1)
382 03a0 8083 st Z,r24
383 .L22:
384 03a2 1092 0000 sts gpsState,__zero_reg__
385 03a6 00C0 rjmp .L33
386 .L20:
387 03a8 1092 0000 sts gpsState,__zero_reg__
388 03ac 0E94 0000 call GPSscanData
389 .L33:
390 03b0 0E94 0000 call GPSscanData
391 03b4 4091 0000 lds r20,buf_ptr.2054
392 03b8 4639 cpi r20,lo8(-106)
393 03ba 00F0 brlo .L53
394 03bc 1092 0000 sts UartState.2055,__zero_reg__
395 .L53:
396 03c0 8091 0000 lds r24,SioTmp
397 03c4 8D30 cpi r24,lo8(13)
398 03c6 01F0 breq .+2
399 03c8 00C0 rjmp .L55
400 03ca 8091 0000 lds r24,UartState.2055
401 03ce 8230 cpi r24,lo8(2)
402 03d0 01F0 breq .+2
403 03d2 00C0 rjmp .L55
404 03d4 1092 0000 sts UartState.2055,__zero_reg__
405 03d8 A42F mov r26,r20
406 03da BB27 clr r27
407 03dc FD01 movw r30,r26
408 03de E050 subi r30,lo8(-(RxdBuffer-2))
409 03e0 F040 sbci r31,hi8(-(RxdBuffer-2))
410 03e2 3081 ld r19,Z
411 03e4 ED01 movw r28,r26
412 03e6 C050 subi r28,lo8(-(RxdBuffer-1))
413 03e8 D040 sbci r29,hi8(-(RxdBuffer-1))
414 03ea 2881 ld r18,Y
415 03ec 8091 0000 lds r24,crc.2051
416 03f0 9091 0000 lds r25,(crc.2051)+1
417 03f4 831B sub r24,r19
418 03f6 9109 sbc r25,__zero_reg__
419 03f8 821B sub r24,r18
420 03fa 9109 sbc r25,__zero_reg__
421 03fc 9F70 andi r25,hi8(4095)
422 03fe 9093 0000 sts (crc.2051)+1,r25
423 0402 8093 0000 sts crc.2051,r24
424 0406 9C01 movw r18,r24
425 0408 96E0 ldi r25,6
426 040a 3695 1: lsr r19
427 040c 2795 ror r18
428 040e 9A95 dec r25
429 0410 01F4 brne 1b
430 0412 235C subi r18,lo8(-(61))
431 0414 2093 0000 sts crc1.2052,r18
432 0418 982F mov r25,r24
433 041a 9F73 andi r25,lo8(63)
434 041c 935C subi r25,lo8(-(61))
435 041e 9093 0000 sts crc2.2053,r25
436 0422 8081 ld r24,Z
437 0424 2817 cp r18,r24
438 0426 01F4 brne .L58
439 0428 8881 ld r24,Y
440 042a 9817 cp r25,r24
441 042c 01F4 brne .L58
442 042e 91E0 ldi r25,lo8(1)
443 0430 00C0 rjmp .L61
444 .L58:
445 0432 8091 0000 lds r24,CntCrcError
446 0436 8F5F subi r24,lo8(-(1))
447 0438 8093 0000 sts CntCrcError,r24
448 043c 90E0 ldi r25,lo8(0)
449 .L61:
450 043e 8091 0000 lds r24,NeuerDatensatzEmpfangen
451 0442 8823 tst r24
452 0444 01F0 breq .+2
453 0446 00C0 rjmp .L76
454 0448 9923 tst r25
455 044a 01F4 brne .+2
456 044c 00C0 rjmp .L76
457 044e 81E0 ldi r24,lo8(1)
458 0450 8093 0000 sts NeuerDatensatzEmpfangen,r24
459 0454 4093 0000 sts AnzahlEmpfangsBytes,r20
460 0458 A050 subi r26,lo8(-(RxdBuffer))
461 045a B040 sbci r27,hi8(-(RxdBuffer))
462 045c 8DE0 ldi r24,lo8(13)
463 045e 8C93 st X,r24
464 0460 8091 0000 lds r24,RxdBuffer+2
465 0464 8235 cpi r24,lo8(82)
466 0466 01F0 breq .+2
467 0468 00C0 rjmp .L76
468 046a 88E1 ldi r24,lo8(24)
469 046c 90E0 ldi r25,hi8(24)
470 046e 2CE0 ldi r18,lo8(12)
471 /* #APP */
472 0470 0FB6 in __tmp_reg__,__SREG__
473 0472 F894 cli
474 0474 A895 wdr
475 0476 8093 6000 sts 96,r24
476 047a 0FBE out __SREG__,__tmp_reg__
477 047c 2093 6000 sts 96,r18
478 /* #NOAPP */
479 0480 00C0 rjmp .L76
480 .L55:
481 0482 8091 0000 lds r24,UartState.2055
482 0486 8130 cpi r24,lo8(1)
483 0488 01F0 breq .L68
484 048a 8130 cpi r24,lo8(1)
485 048c 00F0 brlo .L67
486 048e 8230 cpi r24,lo8(2)
487 0490 01F4 brne .L78
488 0492 00C0 rjmp .L69
489 .L67:
490 0494 8091 0000 lds r24,SioTmp
491 0498 8332 cpi r24,lo8(35)
492 049a 01F4 brne .L70
493 049c 8091 0000 lds r24,NeuerDatensatzEmpfangen
494 04a0 8823 tst r24
495 04a2 01F4 brne .L70
496 04a4 81E0 ldi r24,lo8(1)
497 04a6 8093 0000 sts UartState.2055,r24
498 .L70:
499 04aa 8091 0000 lds r24,SioTmp
500 04ae 8093 0000 sts RxdBuffer,r24
501 04b2 81E0 ldi r24,lo8(1)
502 04b4 8093 0000 sts buf_ptr.2054,r24
503 04b8 8091 0000 lds r24,SioTmp
504 04bc 9927 clr r25
505 04be 00C0 rjmp .L81
506 .L68:
507 04c0 82E0 ldi r24,lo8(2)
508 04c2 8093 0000 sts UartState.2055,r24
509 04c6 E42F mov r30,r20
510 04c8 FF27 clr r31
511 04ca 8091 0000 lds r24,SioTmp
512 04ce E050 subi r30,lo8(-(RxdBuffer))
513 04d0 F040 sbci r31,hi8(-(RxdBuffer))
514 04d2 8083 st Z,r24
515 .L83:
516 04d4 4F5F subi r20,lo8(-(1))
517 04d6 4093 0000 sts buf_ptr.2054,r20
518 .L82:
519 04da 2091 0000 lds r18,SioTmp
520 04de 8091 0000 lds r24,crc.2051
521 04e2 9091 0000 lds r25,(crc.2051)+1
522 04e6 820F add r24,r18
523 04e8 911D adc r25,__zero_reg__
524 .L81:
525 04ea 9093 0000 sts (crc.2051)+1,r25
526 04ee 8093 0000 sts crc.2051,r24
527 04f2 00C0 rjmp .L76
528 .L69:
529 04f4 E42F mov r30,r20
530 04f6 FF27 clr r31
531 04f8 8091 0000 lds r24,SioTmp
532 04fc E050 subi r30,lo8(-(RxdBuffer))
533 04fe F040 sbci r31,hi8(-(RxdBuffer))
534 0500 8083 st Z,r24
535 0502 4639 cpi r20,lo8(-106)
536 0504 00F0 brlo .L83
537 0506 1092 0000 sts UartState.2055,__zero_reg__
538 050a 00C0 rjmp .L82
539 .L78:
540 050c 1092 0000 sts UartState.2055,__zero_reg__
541 .L76:
542 /* epilogue: frame size=0 */
543 0510 FF91 pop r31
544 0512 EF91 pop r30
545 0514 DF91 pop r29
546 0516 CF91 pop r28
547 0518 BF91 pop r27
548 051a AF91 pop r26
549 051c 9F91 pop r25
550 051e 8F91 pop r24
551 0520 7F91 pop r23
552 0522 6F91 pop r22
553 0524 5F91 pop r21
554 0526 4F91 pop r20
555 0528 3F91 pop r19
556 052a 2F91 pop r18
557 052c 0F90 pop __tmp_reg__
558 052e 0FBE out __SREG__,__tmp_reg__
559 0530 0F90 pop __tmp_reg__
560 0532 1F90 pop __zero_reg__
561 0534 1895 reti
562 /* epilogue end (size=19) */
563 /* function __vector_20 size 495 (457) */
565 .global AddCRC
567 AddCRC:
568 /* prologue: frame size=0 */
569 /* prologue end (size=0) */
570 0536 DC01 movw r26,r24
571 0538 20E0 ldi r18,lo8(0)
572 053a 30E0 ldi r19,hi8(0)
573 053c 40E0 ldi r20,lo8(0)
574 053e 50E0 ldi r21,hi8(0)
575 0540 E0E0 ldi r30,lo8(SendeBuffer)
576 0542 F0E0 ldi r31,hi8(SendeBuffer)
577 0544 00C0 rjmp .L85
578 .L86:
579 0546 8191 ld r24,Z+
580 0548 280F add r18,r24
581 054a 311D adc r19,__zero_reg__
582 054c 4F5F subi r20,lo8(-(1))
583 054e 5F4F sbci r21,hi8(-(1))
584 .L85:
585 0550 4A17 cp r20,r26
586 0552 5B07 cpc r21,r27
587 0554 01F4 brne .L86
588 0556 3F70 andi r19,hi8(4095)
589 0558 C901 movw r24,r18
590 055a 66E0 ldi r22,6
591 055c 9695 1: lsr r25
592 055e 8795 ror r24
593 0560 6A95 dec r22
594 0562 01F4 brne 1b
595 0564 835C subi r24,lo8(-(61))
596 0566 FD01 movw r30,r26
597 0568 E050 subi r30,lo8(-(SendeBuffer))
598 056a F040 sbci r31,hi8(-(SendeBuffer))
599 056c 8083 st Z,r24
600 056e 1196 adiw r26,1
601 0570 2F73 andi r18,lo8(63)
602 0572 235C subi r18,lo8(-(61))
603 0574 FD01 movw r30,r26
604 0576 E050 subi r30,lo8(-(SendeBuffer))
605 0578 F040 sbci r31,hi8(-(SendeBuffer))
606 057a 2083 st Z,r18
607 057c A050 subi r26,lo8(-(SendeBuffer+1))
608 057e B040 sbci r27,hi8(-(SendeBuffer+1))
609 0580 8DE0 ldi r24,lo8(13)
610 0582 8C93 st X,r24
611 0584 1092 0000 sts UebertragungAbgeschlossen,__zero_reg__
612 0588 8091 0000 lds r24,SendeBuffer
613 058c 8093 C600 sts 198,r24
614 /* epilogue: frame size=0 */
615 0590 0895 ret
616 /* epilogue end (size=1) */
617 /* function AddCRC size 47 (46) */
619 .global SendOutData
621 SendOutData:
622 /* prologue: frame size=0 */
623 0592 EF92 push r14
624 0594 FF92 push r15
625 0596 0F93 push r16
626 0598 1F93 push r17
627 059a CF93 push r28
628 059c DF93 push r29
629 /* prologue end (size=6) */
630 059e 7A01 movw r14,r20
631 05a0 722F mov r23,r18
632 05a2 93E2 ldi r25,lo8(35)
633 05a4 9093 0000 sts SendeBuffer,r25
634 05a8 6093 0000 sts SendeBuffer+1,r22
635 05ac 8093 0000 sts SendeBuffer+2,r24
636 05b0 03E0 ldi r16,lo8(3)
637 05b2 10E0 ldi r17,hi8(3)
638 05b4 60E0 ldi r22,lo8(0)
639 05b6 A0E0 ldi r26,lo8(SendeBuffer+3)
640 05b8 B0E0 ldi r27,hi8(SendeBuffer+3)
641 05ba 00C0 rjmp .L90
642 .L91:
643 05bc F701 movw r30,r14
644 05be E60F add r30,r22
645 05c0 F11D adc r31,__zero_reg__
646 05c2 9081 ld r25,Z
647 05c4 6F5F subi r22,lo8(-(1))
648 05c6 7150 subi r23,lo8(-(-1))
649 05c8 01F4 brne .L92
650 05ca E0E0 ldi r30,lo8(0)
651 05cc 40E0 ldi r20,lo8(0)
652 05ce 00C0 rjmp .L94
653 .L92:
654 05d0 F701 movw r30,r14
655 05d2 E60F add r30,r22
656 05d4 F11D adc r31,__zero_reg__
657 05d6 4081 ld r20,Z
658 05d8 6F5F subi r22,lo8(-(1))
659 05da 7150 subi r23,lo8(-(-1))
660 05dc 01F4 brne .L95
661 05de E0E0 ldi r30,lo8(0)
662 05e0 00C0 rjmp .L94
663 .L95:
664 05e2 F701 movw r30,r14
665 05e4 E60F add r30,r22
666 05e6 F11D adc r31,__zero_reg__
667 05e8 E081 ld r30,Z
668 05ea 6F5F subi r22,lo8(-(1))
669 05ec 7150 subi r23,lo8(-(-1))
670 .L94:
671 05ee 892F mov r24,r25
672 05f0 8695 lsr r24
673 05f2 8695 lsr r24
674 05f4 835C subi r24,lo8(-(61))
675 05f6 8C93 st X,r24
676 05f8 5527 clr r21
677 05fa 892F mov r24,r25
678 05fc 9927 clr r25
679 05fe 8370 andi r24,lo8(3)
680 0600 9070 andi r25,hi8(3)
681 0602 24E0 ldi r18,4
682 0604 880F 1: lsl r24
683 0606 991F rol r25
684 0608 2A95 dec r18
685 060a 01F4 brne 1b
686 060c 9A01 movw r18,r20
687 060e 94E0 ldi r25,4
688 0610 3695 1: lsr r19
689 0612 2795 ror r18
690 0614 9A95 dec r25
691 0616 01F4 brne 1b
692 0618 822B or r24,r18
693 061a 835C subi r24,lo8(-(61))
694 061c ED01 movw r28,r26
695 061e 8983 std Y+1,r24
696 0620 4F70 andi r20,lo8(15)
697 0622 5070 andi r21,hi8(15)
698 0624 440F lsl r20
699 0626 551F rol r21
700 0628 440F lsl r20
701 062a 551F rol r21
702 062c 8E2F mov r24,r30
703 062e 8295 swap r24
704 0630 8695 lsr r24
705 0632 8695 lsr r24
706 0634 8370 andi r24,0x3
707 0636 842B or r24,r20
708 0638 835C subi r24,lo8(-(61))
709 063a 8A83 std Y+2,r24
710 063c EF73 andi r30,lo8(63)
711 063e E35C subi r30,lo8(-(61))
712 0640 EB83 std Y+3,r30
713 0642 0C5F subi r16,lo8(-(4))
714 0644 1F4F sbci r17,hi8(-(4))
715 0646 1496 adiw r26,4
716 .L90:
717 0648 7723 tst r23
718 064a 01F0 breq .+2
719 064c 00C0 rjmp .L91
720 064e C801 movw r24,r16
721 0650 0E94 0000 call AddCRC
722 /* epilogue: frame size=0 */
723 0654 DF91 pop r29
724 0656 CF91 pop r28
725 0658 1F91 pop r17
726 065a 0F91 pop r16
727 065c FF90 pop r15
728 065e EF90 pop r14
729 0660 0895 ret
730 /* epilogue end (size=7) */
731 /* function SendOutData size 106 (93) */
733 .global Decode64
735 Decode64:
736 /* prologue: frame size=0 */
737 0662 1F93 push r17
738 0664 CF93 push r28
739 0666 DF93 push r29
740 /* prologue end (size=3) */
741 0668 EC01 movw r28,r24
742 066a 70E0 ldi r23,lo8(0)
743 066c A22F mov r26,r18
744 066e BB27 clr r27
745 0670 1297 sbiw r26,2
746 0672 00C0 rjmp .L100
747 .L101:
748 0674 E42F mov r30,r20
749 0676 FF27 clr r31
750 0678 E050 subi r30,lo8(-(RxdBuffer))
751 067a F040 sbci r31,hi8(-(RxdBuffer))
752 067c 3081 ld r19,Z
753 067e 4F5F subi r20,lo8(-(1))
754 0680 E42F mov r30,r20
755 0682 FF27 clr r31
756 0684 E050 subi r30,lo8(-(RxdBuffer))
757 0686 F040 sbci r31,hi8(-(RxdBuffer))
758 0688 5081 ld r21,Z
759 068a 4F5F subi r20,lo8(-(1))
760 068c E42F mov r30,r20
761 068e FF27 clr r31
762 0690 E050 subi r30,lo8(-(RxdBuffer))
763 0692 F040 sbci r31,hi8(-(RxdBuffer))
764 0694 1081 ld r17,Z
765 0696 4F5F subi r20,lo8(-(1))
766 0698 E42F mov r30,r20
767 069a FF27 clr r31
768 069c E050 subi r30,lo8(-(RxdBuffer))
769 069e F040 sbci r31,hi8(-(RxdBuffer))
770 06a0 2081 ld r18,Z
771 06a2 4F5F subi r20,lo8(-(1))
772 06a4 842F mov r24,r20
773 06a6 9927 clr r25
774 06a8 A817 cp r26,r24
775 06aa B907 cpc r27,r25
776 06ac 04F0 brlt .L106
777 06ae 5D53 subi r21,lo8(-(-61))
778 06b0 FE01 movw r30,r28
779 06b2 E70F add r30,r23
780 06b4 F11D adc r31,__zero_reg__
781 06b6 3D53 subi r19,lo8(-(-61))
782 06b8 330F lsl r19
783 06ba 330F lsl r19
784 06bc 852F mov r24,r21
785 06be 8295 swap r24
786 06c0 8F70 andi r24,0x0f
787 06c2 382B or r19,r24
788 06c4 3083 st Z,r19
789 06c6 6130 cpi r22,lo8(1)
790 06c8 01F0 breq .L106
791 06ca 912F mov r25,r17
792 06cc 9D53 subi r25,lo8(-(-61))
793 06ce 7F5F subi r23,lo8(-(1))
794 06d0 FE01 movw r30,r28
795 06d2 E70F add r30,r23
796 06d4 F11D adc r31,__zero_reg__
797 06d6 7150 subi r23,lo8(-(-1))
798 06d8 5295 swap r21
799 06da 507F andi r21,0xf0
800 06dc 892F mov r24,r25
801 06de 8695 lsr r24
802 06e0 8695 lsr r24
803 06e2 582B or r21,r24
804 06e4 5083 st Z,r21
805 06e6 6350 subi r22,lo8(-(-3))
806 06e8 6F3F cpi r22,lo8(-1)
807 06ea 01F0 breq .L106
808 06ec 7E5F subi r23,lo8(-(2))
809 06ee FE01 movw r30,r28
810 06f0 E70F add r30,r23
811 06f2 F11D adc r31,__zero_reg__
812 06f4 9295 swap r25
813 06f6 990F lsl r25
814 06f8 990F lsl r25
815 06fa 907C andi r25,0xc0
816 06fc 2D53 subi r18,lo8(-(-61))
817 06fe 922B or r25,r18
818 0700 9083 st Z,r25
819 0702 7F5F subi r23,lo8(-(1))
820 .L100:
821 0704 6623 tst r22
822 0706 01F0 breq .+2
823 0708 00C0 rjmp .L101
824 .L106:
825 /* epilogue: frame size=0 */
826 070a DF91 pop r29
827 070c CF91 pop r28
828 070e 1F91 pop r17
829 0710 0895 ret
830 /* epilogue end (size=4) */
831 /* function Decode64 size 88 (81) */
833 .global uart_putchar
835 uart_putchar:
836 /* prologue: frame size=0 */
837 0712 1F93 push r17
838 /* prologue end (size=1) */
839 0714 182F mov r17,r24
840 0716 8A30 cpi r24,lo8(10)
841 0718 01F4 brne .L112
842 071a 8DE0 ldi r24,lo8(13)
843 071c 0E94 0000 call uart_putchar
844 .L112:
845 0720 8091 C000 lds r24,192
846 0724 85FF sbrs r24,5
847 0726 00C0 rjmp .L112
848 0728 1093 C600 sts 198,r17
849 072c 80E0 ldi r24,lo8(0)
850 072e 90E0 ldi r25,hi8(0)
851 /* epilogue: frame size=0 */
852 0730 1F91 pop r17
853 0732 0895 ret
854 /* epilogue end (size=2) */
855 /* function uart_putchar size 17 (14) */
857 .global WriteProgramData
859 WriteProgramData:
860 /* prologue: frame size=0 */
861 /* prologue end (size=0) */
862 /* epilogue: frame size=0 */
863 0734 0895 ret
864 /* epilogue end (size=1) */
865 /* function WriteProgramData size 1 (0) */
867 .global UART_Init
869 UART_Init:
870 /* prologue: frame size=0 */
871 /* prologue end (size=0) */
872 0736 E1EC ldi r30,lo8(193)
873 0738 F0E0 ldi r31,hi8(193)
874 073a 88E1 ldi r24,lo8(24)
875 073c 8083 st Z,r24
876 073e A0EC ldi r26,lo8(192)
877 0740 B0E0 ldi r27,hi8(192)
878 0742 8C91 ld r24,X
879 0744 8260 ori r24,lo8(2)
880 0746 8C93 st X,r24
881 0748 8081 ld r24,Z
882 074a 8068 ori r24,lo8(-128)
883 074c 8083 st Z,r24
884 074e 8081 ld r24,Z
885 0750 8064 ori r24,lo8(64)
886 0752 8083 st Z,r24
887 0754 8AE2 ldi r24,lo8(42)
888 0756 8093 C400 sts 196,r24
889 075a 88EC ldi r24,lo8(200)
890 075c 90E0 ldi r25,hi8(200)
891 075e 0E94 0000 call SetDelay
892 0762 9093 0000 sts (Debug_Timer)+1,r25
893 0766 8093 0000 sts Debug_Timer,r24
894 076a 1092 0000 sts gpsState,__zero_reg__
895 /* epilogue: frame size=0 */
896 076e 0895 ret
897 /* epilogue end (size=1) */
898 /* function UART_Init size 29 (28) */
900 .global DatenUebertragung
902 DatenUebertragung:
903 /* prologue: frame size=0 */
904 /* prologue end (size=0) */
905 0770 8091 0000 lds r24,UebertragungAbgeschlossen
906 0774 8823 tst r24
907 0776 01F4 brne .+2
908 0778 00C0 rjmp .L136
909 077a 8091 0000 lds r24,DebugGetAnforderung
910 077e 8823 tst r24
911 0780 01F0 breq .L122
912 0782 8091 0000 lds r24,UebertragungAbgeschlossen
913 0786 8823 tst r24
914 0788 01F0 breq .L122
915 078a 2BE0 ldi r18,lo8(11)
916 078c 40E0 ldi r20,lo8(DebugIn)
917 078e 50E0 ldi r21,hi8(DebugIn)
918 0790 6091 0000 lds r22,MeineSlaveAdresse
919 0794 87E4 ldi r24,lo8(71)
920 0796 0E94 0000 call SendOutData
921 079a 1092 0000 sts DebugGetAnforderung,__zero_reg__
922 .L122:
923 079e 8091 0000 lds r24,Debug_Timer
924 07a2 9091 0000 lds r25,(Debug_Timer)+1
925 07a6 0E94 0000 call CheckDelay
926 07aa 8823 tst r24
927 07ac 01F4 brne .L125
928 07ae 8091 0000 lds r24,DebugDataAnforderung
929 07b2 8823 tst r24
930 07b4 01F0 breq .L127
931 .L125:
932 07b6 8091 0000 lds r24,UebertragungAbgeschlossen
933 07ba 8823 tst r24
934 07bc 01F0 breq .L127
935 07be 22E3 ldi r18,lo8(50)
936 07c0 40E0 ldi r20,lo8(DebugOut)
937 07c2 50E0 ldi r21,hi8(DebugOut)
938 07c4 6091 0000 lds r22,MeineSlaveAdresse
939 07c8 84E4 ldi r24,lo8(68)
940 07ca 0E94 0000 call SendOutData
941 07ce 1092 0000 sts DebugDataAnforderung,__zero_reg__
942 07d2 8AEF ldi r24,lo8(250)
943 07d4 90E0 ldi r25,hi8(250)
944 07d6 0E94 0000 call SetDelay
945 07da 9093 0000 sts (Debug_Timer)+1,r25
946 07de 8093 0000 sts Debug_Timer,r24
947 .L127:
948 07e2 8091 0000 lds r24,DebugDisplayAnforderung
949 07e6 8823 tst r24
950 07e8 01F0 breq .L129
951 07ea 8091 0000 lds r24,UebertragungAbgeschlossen
952 07ee 8823 tst r24
953 07f0 01F0 breq .L129
954 07f2 0E94 0000 call Menu
955 07f6 1092 0000 sts DebugDisplayAnforderung,__zero_reg__
956 07fa 8091 0000 lds r24,dis_zeile.2372
957 07fe 8F5F subi r24,lo8(-(1))
958 0800 8093 0000 sts dis_zeile.2372,r24
959 0804 8430 cpi r24,lo8(4)
960 0806 01F4 brne .L132
961 0808 1092 0000 sts dis_zeile.2372,__zero_reg__
962 .L132:
963 080c 8091 0000 lds r24,dis_zeile.2372
964 0810 44E1 ldi r20,lo8(20)
965 0812 849F mul r24,r20
966 0814 A001 movw r20,r0
967 0816 1124 clr r1
968 0818 4050 subi r20,lo8(-(DisplayBuff))
969 081a 5040 sbci r21,hi8(-(DisplayBuff))
970 081c 24E1 ldi r18,lo8(20)
971 081e 60E0 ldi r22,lo8(0)
972 0820 805D subi r24,lo8(-(48))
973 0822 0E94 0000 call SendOutData
974 .L129:
975 0826 8091 0000 lds r24,GetVersionAnforderung
976 082a 8823 tst r24
977 082c 01F0 breq .L136
978 082e 8091 0000 lds r24,UebertragungAbgeschlossen
979 0832 8823 tst r24
980 0834 01F0 breq .L136
981 0836 2AE0 ldi r18,lo8(10)
982 0838 40E0 ldi r20,lo8(VersionInfo)
983 083a 50E0 ldi r21,hi8(VersionInfo)
984 083c 6091 0000 lds r22,MeineSlaveAdresse
985 0840 86E5 ldi r24,lo8(86)
986 0842 0E94 0000 call SendOutData
987 0846 1092 0000 sts GetVersionAnforderung,__zero_reg__
988 .L136:
989 084a 0895 ret
990 /* epilogue: frame size=0 */
991 /* epilogue: noreturn */
992 /* epilogue end (size=0) */
993 /* function DatenUebertragung size 110 (110) */
995 .global BearbeiteRxDaten
997 BearbeiteRxDaten:
998 /* prologue: frame size=2 */
999 084c 1F93 push r17
1000 084e CF93 push r28
1001 0850 DF93 push r29
1002 0852 CDB7 in r28,__SP_L__
1003 0854 DEB7 in r29,__SP_H__
1004 0856 2297 sbiw r28,2
1005 0858 0FB6 in __tmp_reg__,__SREG__
1006 085a F894 cli
1007 085c DEBF out __SP_H__,r29
1008 085e 0FBE out __SREG__,__tmp_reg__
1009 0860 CDBF out __SP_L__,r28
1010 /* prologue end (size=11) */
1011 0862 8091 0000 lds r24,NeuerDatensatzEmpfangen
1012 0866 8823 tst r24
1013 0868 01F4 brne .+2
1014 086a 00C0 rjmp .L153
1015 086c 8FEF ldi r24,lo8(-1)
1016 086e 8093 0000 sts PcZugriff,r24
1017 0872 8091 0000 lds r24,RxdBuffer+2
1018 0876 8137 cpi r24,lo8(113)
1019 0878 00F4 brsh .L148
1020 087a 8C36 cpi r24,lo8(108)
1021 087c 00F0 brlo .+2
1022 087e 00C0 rjmp .L144
1023 0880 8736 cpi r24,lo8(103)
1024 0882 01F4 brne .+2
1025 0884 00C0 rjmp .L142
1026 0886 8836 cpi r24,lo8(104)
1027 0888 01F0 breq .L143
1028 088a 8336 cpi r24,lo8(99)
1029 088c 01F0 breq .+2
1030 088e 00C0 rjmp .L140
1031 0890 00C0 rjmp .L141
1032 .L148:
1033 0892 8437 cpi r24,lo8(116)
1034 0894 01F0 breq .L146
1035 0896 8637 cpi r24,lo8(118)
1036 0898 01F0 breq .L147
1037 089a 8137 cpi r24,lo8(113)
1038 089c 01F0 breq .+2
1039 089e 00C0 rjmp .L140
1040 08a0 00C0 rjmp .L145
1041 .L141:
1042 08a2 2091 0000 lds r18,AnzahlEmpfangsBytes
1043 08a6 43E0 ldi r20,lo8(3)
1044 08a8 6BE0 ldi r22,lo8(11)
1045 08aa 80E0 ldi r24,lo8(DebugIn)
1046 08ac 90E0 ldi r25,hi8(DebugIn)
1047 08ae 0E94 0000 call Decode64
1048 08b2 8091 0000 lds r24,RemoteTasten
1049 08b6 9091 0000 lds r25,DebugIn+2
1050 08ba 892B or r24,r25
1051 08bc 8093 0000 sts RemoteTasten,r24
1052 08c0 81E0 ldi r24,lo8(1)
1053 08c2 8093 0000 sts DebugDataAnforderung,r24
1054 08c6 00C0 rjmp .L140
1055 .L143:
1056 08c8 2091 0000 lds r18,AnzahlEmpfangsBytes
1057 08cc 43E0 ldi r20,lo8(3)
1058 08ce 62E0 ldi r22,lo8(2)
1059 08d0 CE01 movw r24,r28
1060 08d2 0196 adiw r24,1
1061 08d4 0E94 0000 call Decode64
1062 08d8 8091 0000 lds r24,RemoteTasten
1063 08dc 9981 ldd r25,Y+1
1064 08de 892B or r24,r25
1065 08e0 8093 0000 sts RemoteTasten,r24
1066 08e4 81E0 ldi r24,lo8(1)
1067 08e6 8093 0000 sts DebugDisplayAnforderung,r24
1068 08ea 00C0 rjmp .L140
1069 .L146:
1070 08ec 2091 0000 lds r18,AnzahlEmpfangsBytes
1071 08f0 43E0 ldi r20,lo8(3)
1072 08f2 64E0 ldi r22,lo8(4)
1073 08f4 80E0 ldi r24,lo8(MotorTest)
1074 08f6 90E0 ldi r25,hi8(MotorTest)
1075 08f8 0E94 0000 call Decode64
1076 08fc 00C0 rjmp .L140
1077 .L147:
1078 08fe 81E0 ldi r24,lo8(1)
1079 0900 8093 0000 sts GetVersionAnforderung,r24
1080 0904 00C0 rjmp .L140
1081 .L142:
1082 0906 81E0 ldi r24,lo8(1)
1083 0908 8093 0000 sts DebugGetAnforderung,r24
1084 090c 00C0 rjmp .L140
1085 .L145:
1086 090e 2091 0000 lds r18,AnzahlEmpfangsBytes
1087 0912 43E0 ldi r20,lo8(3)
1088 0914 62E0 ldi r22,lo8(2)
1089 0916 CE01 movw r24,r28
1090 0918 0196 adiw r24,1
1091 091a 0E94 0000 call Decode64
1092 091e 8981 ldd r24,Y+1
1093 0920 8F3F cpi r24,lo8(-1)
1094 0922 01F0 breq .L149
1095 0924 8630 cpi r24,lo8(6)
1096 0926 00F0 brlo .L151
1097 0928 85E0 ldi r24,lo8(5)
1098 092a 8983 std Y+1,r24
1099 .L151:
1100 092c 4AE3 ldi r20,lo8(58)
1101 092e 60E0 ldi r22,lo8(EE_Parameter)
1102 0930 70E0 ldi r23,hi8(EE_Parameter)
1103 0932 8981 ldd r24,Y+1
1104 0934 0E94 0000 call ReadParameterSet
1105 0938 8981 ldd r24,Y+1
1106 093a 2AE3 ldi r18,lo8(58)
1107 093c 40E0 ldi r20,lo8(EE_Parameter)
1108 093e 50E0 ldi r21,hi8(EE_Parameter)
1109 0940 6091 0000 lds r22,MeineSlaveAdresse
1110 0944 00C0 rjmp .L154
1111 .L149:
1112 0946 1091 0000 lds r17,MeineSlaveAdresse
1113 094a 0E94 0000 call GetActiveParamSetNumber
1114 094e 2AE3 ldi r18,lo8(58)
1115 0950 40E0 ldi r20,lo8(EE_Parameter)
1116 0952 50E0 ldi r21,hi8(EE_Parameter)
1117 0954 612F mov r22,r17
1118 .L154:
1119 0956 855B subi r24,lo8(-(75))
1120 0958 0E94 0000 call SendOutData
1121 095c 00C0 rjmp .L140
1122 .L144:
1123 095e 2091 0000 lds r18,AnzahlEmpfangsBytes
1124 0962 43E0 ldi r20,lo8(3)
1125 0964 6AE3 ldi r22,lo8(58)
1126 0966 80E0 ldi r24,lo8(EE_Parameter)
1127 0968 90E0 ldi r25,hi8(EE_Parameter)
1128 096a 0E94 0000 call Decode64
1129 096e 8091 0000 lds r24,RxdBuffer+2
1130 0972 4AE3 ldi r20,lo8(58)
1131 0974 60E0 ldi r22,lo8(EE_Parameter)
1132 0976 70E0 ldi r23,hi8(EE_Parameter)
1133 0978 8B56 subi r24,lo8(-(-107))
1134 097a 0E94 0000 call WriteParameterSet
1135 097e 8091 0000 lds r24,RxdBuffer+2
1136 0982 8B56 subi r24,lo8(-(-107))
1137 0984 A0E0 ldi r26,lo8(EEPromArray+2)
1138 0986 B0E0 ldi r27,hi8(EEPromArray+2)
1139 /* #APP */
1140 0988 082E mov __tmp_reg__,r24
1141 098a 0E94 0000 call __eeprom_write_byte_1F2021
1142 /* #NOAPP */
1143 098e 0E94 0000 call GetActiveParamSetNumber
1144 0992 9927 clr r25
1145 0994 0E94 0000 call Piep
1146 .L140:
1147 0998 1092 0000 sts NeuerDatensatzEmpfangen,__zero_reg__
1148 .L153:
1149 /* epilogue: frame size=2 */
1150 099c 2296 adiw r28,2
1151 099e 0FB6 in __tmp_reg__,__SREG__
1152 09a0 F894 cli
1153 09a2 DEBF out __SP_H__,r29
1154 09a4 0FBE out __SREG__,__tmp_reg__
1155 09a6 CDBF out __SP_L__,r28
1156 09a8 DF91 pop r29
1157 09aa CF91 pop r28
1158 09ac 1F91 pop r17
1159 09ae 0895 ret
1160 /* epilogue end (size=10) */
1161 /* function BearbeiteRxDaten size 179 (158) */
1163 .global DebugGetAnforderung
1164 .global DebugGetAnforderung
1165 .section .bss
1168 DebugGetAnforderung:
1169 0000 00 .skip 1,0
1170 .global DebugDisplayAnforderung
1171 .global DebugDisplayAnforderung
1174 DebugDisplayAnforderung:
1175 0001 00 .skip 1,0
1176 .global DebugDataAnforderung
1177 .global DebugDataAnforderung
1180 DebugDataAnforderung:
1181 0002 00 .skip 1,0
1182 .global GetVersionAnforderung
1183 .global GetVersionAnforderung
1186 GetVersionAnforderung:
1187 0003 00 .skip 1,0
1188 .global SioTmp
1189 .global SioTmp
1192 SioTmp:
1193 0004 00 .skip 1,0
1194 .global NeuerDatensatzEmpfangen
1195 .global NeuerDatensatzEmpfangen
1198 NeuerDatensatzEmpfangen:
1199 0005 00 .skip 1,0
1200 .global NeueKoordinateEmpfangen
1201 .global NeueKoordinateEmpfangen
1204 NeueKoordinateEmpfangen:
1205 0006 00 .skip 1,0
1206 .global UebertragungAbgeschlossen
1207 .data
1210 UebertragungAbgeschlossen:
1211 0000 01 .byte 1
1212 .global CntCrcError
1213 .global CntCrcError
1214 .section .bss
1217 CntCrcError:
1218 0007 00 .skip 1,0
1219 .global AnzahlEmpfangsBytes
1220 .global AnzahlEmpfangsBytes
1223 AnzahlEmpfangsBytes:
1224 0008 00 .skip 1,0
1225 .global PC_DebugTimeout
1226 .global PC_DebugTimeout
1229 PC_DebugTimeout:
1230 0009 00 .skip 1,0
1231 .global PcZugriff
1232 .data
1235 PcZugriff:
1236 0001 64 .byte 100
1237 .global MotorTest
1238 .global MotorTest
1239 .section .bss
1242 MotorTest:
1243 000a 0000 0000 .skip 4,0
1244 .lcomm dis_zeile.2372,1
1245 .lcomm UartState.2055,1
1246 .lcomm buf_ptr.2054,1
1247 .lcomm crc2.2053,1
1248 .lcomm crc1.2052,1
1249 .lcomm crc.2051,2
1250 .lcomm ptr.2021,2
1251 .lcomm gpsState,1
1252 .comm DiffNick,2,1
1253 .comm DiffRoll,2,1
1254 .comm SenderOkay,1,1
1255 .comm CosinusNickWinkel,1,1
1256 .comm CosinusRollWinkel,1,1
1257 .comm durchschnitt_northing,4,1
1258 .comm durchschnitt_easting,4,1
1259 .comm gps_p,2,1
1260 .comm gps_d,2,1
1261 .comm skal,2,1
1262 .comm gps_gethome,2,1
1263 .comm SendeBuffer,150,1
1264 .comm RxdBuffer,150,1
1265 .comm MeineSlaveAdresse,1,1
1266 .comm Debug_Timer,2,1
1267 .comm DebugOut,50,1
1268 .comm actualPos,26,1
1269 .comm DebugIn,11,1
1270 .comm VersionInfo,10,1
1271 .comm RemoteTasten,1,1
1272 .comm Timeout,1,1
1273 .comm IntegralNick,4,1
1274 .comm IntegralNick2,4,1
1275 .comm IntegralRoll,4,1
1276 .comm IntegralRoll2,4,1
1277 .comm Mess_IntegralNick,4,1
1278 .comm Mess_IntegralNick2,4,1
1279 .comm Mess_IntegralRoll,4,1
1280 .comm Mess_IntegralRoll2,4,1
1281 .comm Integral_Gier,4,1
1282 .comm Mess_Integral_Gier,4,1
1283 .comm h,1,1
1284 .comm m,1,1
1285 .comm s,1,1
1286 .comm Motor_Vorne,1,1
1287 .comm Motor_Hinten,1,1
1288 .comm Motor_Rechts,1,1
1289 .comm Motor_Links,1,1
1290 .comm Count,1,1
1291 .comm MotorWert,5,1
1292 .comm StickNick,2,1
1293 .comm StickRoll,2,1
1294 .comm StickGier,2,1
1295 .comm MotorenEin,1,1
1296 .comm NMEABuffer,150,1
1297 .comm navStatus,17,1
1298 .comm navPosECEF,21,1
1299 .comm navVelECEF,21,1
1300 .comm ubxP,2,1
1301 .comm ubxEp,2,1
1302 .comm ubxSp,2,1
1303 .comm CK_A,1,1
1304 .comm CK_B,1,1
1305 .comm msgLen,2,1
1306 .comm msgID,1,1
1307 .comm ignorePacket,1,1
1308 .comm rollOffset,4,1
1309 .comm nickOffset,4,1
1310 /* File "uart.c": code 1250 = 0x04e2 (1147), prologues 49, epilogues 54 */
DEFINED SYMBOLS
*ABS*:00000000 uart.c
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:13 .text:00000000 __vector_22
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1210 .data:00000000 UebertragungAbgeschlossen
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1249 .bss:00000015 ptr.2021
*COM*:00000096 SendeBuffer
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:69 .text:0000006c GPSscanData
*COM*:00000015 navPosECEF
*COM*:0000001a actualPos
*COM*:00000011 navStatus
*COM*:00000015 navVelECEF
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:149 .text:00000162 __vector_20
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1192 .bss:00000004 SioTmp
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1250 .bss:00000017 gpsState
*COM*:00000001 msgID
*COM*:00000001 CK_A
*COM*:00000001 CK_B
*COM*:00000002 ubxP
*COM*:00000002 ubxEp
*COM*:00000002 ubxSp
*COM*:00000001 ignorePacket
*COM*:00000002 msgLen
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1245 .bss:00000010 buf_ptr.2054
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1244 .bss:0000000f UartState.2055
*COM*:00000096 RxdBuffer
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1248 .bss:00000013 crc.2051
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1247 .bss:00000012 crc1.2052
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1246 .bss:00000011 crc2.2053
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1217 .bss:00000007 CntCrcError
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1198 .bss:00000005 NeuerDatensatzEmpfangen
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1223 .bss:00000008 AnzahlEmpfangsBytes
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:567 .text:00000536 AddCRC
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:621 .text:00000592 SendOutData
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:735 .text:00000662 Decode64
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:835 .text:00000712 uart_putchar
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:859 .text:00000734 WriteProgramData
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:869 .text:00000736 UART_Init
*COM*:00000002 Debug_Timer
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:902 .text:00000770 DatenUebertragung
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1168 .bss:00000000 DebugGetAnforderung
*COM*:0000000b DebugIn
*COM*:00000001 MeineSlaveAdresse
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1180 .bss:00000002 DebugDataAnforderung
*COM*:00000032 DebugOut
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1174 .bss:00000001 DebugDisplayAnforderung
.bss:0000000e dis_zeile.2372
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1186 .bss:00000003 GetVersionAnforderung
*COM*:0000000a VersionInfo
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:997 .text:0000084c BearbeiteRxDaten
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1235 .data:00000001 PcZugriff
*COM*:00000001 RemoteTasten
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1242 .bss:0000000a MotorTest
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1204 .bss:00000006 NeueKoordinateEmpfangen
C:\DOKUME~1\CHRIST~1\LOKALE~1\Temp/ccRsoX2g.s:1229 .bss:00000009 PC_DebugTimeout
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000001 SenderOkay
*COM*:00000001 CosinusNickWinkel
*COM*:00000001 CosinusRollWinkel
*COM*:00000004 durchschnitt_northing
*COM*:00000004 durchschnitt_easting
*COM*:00000002 gps_p
*COM*:00000002 gps_d
*COM*:00000002 skal
*COM*:00000002 gps_gethome
*COM*:00000001 Timeout
*COM*:00000004 IntegralNick
*COM*:00000004 IntegralNick2
*COM*:00000004 IntegralRoll
*COM*:00000004 IntegralRoll2
*COM*:00000004 Mess_IntegralNick
*COM*:00000004 Mess_IntegralNick2
*COM*:00000004 Mess_IntegralRoll
*COM*:00000004 Mess_IntegralRoll2
*COM*:00000004 Integral_Gier
*COM*:00000004 Mess_Integral_Gier
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Motor_Vorne
*COM*:00000001 Motor_Hinten
*COM*:00000001 Motor_Rechts
*COM*:00000001 Motor_Links
*COM*:00000001 Count
*COM*:00000005 MotorWert
*COM*:00000002 StickNick
*COM*:00000002 StickRoll
*COM*:00000002 StickGier
*COM*:00000001 MotorenEin
*COM*:00000096 NMEABuffer
*COM*:00000004 rollOffset
*COM*:00000004 nickOffset
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SetDelay
CheckDelay
Menu
DisplayBuff
EE_Parameter
ReadParameterSet
GetActiveParamSetNumber
WriteParameterSet
EEPromArray
__eeprom_write_byte_1F2021
Piep
/branches/martosi/Flight-Ctrl_MEGA644_V0_60.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>Flight-Ctrl_MEGA644_V0_60</ProjectName><Created>19-Aug-2007 14:38:13</Created><LastEdit>19-Aug-2007 14:51:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>19-Aug-2007 14:38:13</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Flight-Ctrl_MEGA644_V0_60.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\</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>main.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>gps_ubx.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><SOURCEFILE>uart.c</SOURCEFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>gps_ubx.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>std_c.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE><HEADERFILE>uart.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>Flight-Ctrl_MEGA644_V0_60.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\_Settings.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\analog.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\fc.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\gps.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\gps_ubx.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\main.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\menu.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\old_macros.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\printf_P.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\rc.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\Settings.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\std_c.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\timer0.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\twimaster.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\uart.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\main.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\analog.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\eeprom.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\fc.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\GPS.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\gps_ubx.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\menu.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\printf_P.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\rc.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\timer0.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\twimaster.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\uart.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000></Files><Workspace><File00000><Position>343 98 875 474</Position><LineCol>0 0</LineCol></File00000></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/martosi/Flight-Ctrl_MEGA644_V0_60.hex
0,0 → 1,1601
:100000000C94EA010C9405020C9405020C94050270
:100010000C9405020C9405020C9405020C94050244
:100020000C9405020C94A70A0C9405020C9405028A
:100030000C94A8130C9405020C9405020C94050270
:100040000C9405020C9405020C94FE090C94050214
:100050000C9423060C9405020C94AD030C94050239
:100060000C94930B0C9405020C94F5120C9405025D
:100070000A0A0D004E65757472616C004865616412
:10008000696E67486F6C64000A0D5374657565721C
:10009000756E673A20004F4B0A0D000A0D416267EA
:1000A0006C65696368204C756674647275636B7304
:1000B000656E736F722E2E000A0D42656E75747A2E
:1000C0006520506172616D657465727361747A2028
:1000D0002564000A0D496E69742E20454550524F23
:1000E0004D3A2047656E65726965726520446566A4
:1000F00061756C742D506172616D657465722E2E20
:100100002E000A0D3D3D3D3D3D3D3D3D3D3D3D3DCE
:100110003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0F
:100120003D3D000A0D466C69676874436F6E7472DA
:100130006F6C205625642E256420002E00475053F6
:100140005F526F6C6C3A20253369004750535F4E05
:1001500069636B20202533690047505320200052EB
:10016000616E67653A2533692D25336900537465DF
:100170006C6C756E673A2025336900536574706F37
:10018000696E74202025336900536572766F2020D4
:1001900000506F7469343A202025336900506F7421
:1001A00069333A202025336900506F7469323A2050
:1001B0002025336900506F7469313A202025336956
:1001C0000053746172743A20202020202535690084
:1001D0004D657373776572743A2020253569005236
:1001E00069636874756E673A2020253569004B6F26
:1001F0006D706173732020202020202000456D70D9
:10020000662E506567656C3A253569005370616EDE
:100210006E756E673A202025356900486F63682047
:1002200025346920282533692900526F6C6C2025FC
:100230003469202825336929004E69636B202534F1
:100240006920282533692900414343202D20536527
:100250006E736F7200476965722025346920282506
:1002600033692900526F6C6C2025346920282533AE
:100270006929004E69636B2025346920282533697C
:1002800029004779726F202D2053656E736F7200BD
:1002900050333A25346920204B616EE46C652000B0
:1002A00050313A253469202050323A2534692000F3
:1002B00047733A253469202047693A25346920007C
:1002C0004E693A2534692020526F3A25346920005E
:1002D0004B373A25346920204B616EE46C65200071
:1002E0004B353A25346920204B363A2534692000B5
:1002F0004B333A25346920204B343A2534692000A9
:100300004B313A25346920204B323A25346920009C
:100310004B6F6D706173733A202020253569005250
:100320006F6C6C3A202020202020253569004E6912
:10033000636B3A20202020202025356900616B74F2
:100340002E204C6167650048F668656E72656765CA
:100350006C756E67004B65696E6520004F666620A0
:1003600020202020203A20253569004C75667464D1
:100370007275636B3A2025356900536F6C6C486F5A
:100380006568653A2025356900486F6568653A20DB
:10039000202020202535690028632920486F6C67BC
:1003A000657220427573730053657474696E673AA1
:1003B00020256420005625642E2564002B2B204D1B
:1003C000696B726F4B6F70746572202B2B005B250D
:1003D000695D000011241FBECFEFD0E1DEBFCDBFAD
:1003E00011E0A0E0B1E0E0E3F3E602C005900D9279
:1003F000A83CB107D9F717E0A8ECB1E001C01D9205
:10040000A73AB107E1F70C9438020C940000A2E07F
:10041000B0E00E948431802D99270895FB01282F98
:10042000863008F025E0429FD0011124AC59BF4F1F
:10043000842F9927019724F001900E948C31FACFE4
:10044000A2E0B0E0022E0E948C310895FB018630BC
:1004500008F085E0489FD0011124AC59BF4F842F8C
:100460009927019724F00E9484310192FACF0895D0
:100470000F931F93CF93DF9391E097B98FEF88B9D4
:100480008BE184B995B98EE38AB9579A87EF8BB916
:1004900084B7877F84BF809160008861809360000B
:1004A0001092600080ED97E09093E5018093E40165
:1004B00010926602109265021092170610921606AC
:1004C0001092640210926302109262021092610212
:1004D00028980E94540B0E94E8040E9493130E94E3
:1004E0008D0B0E94DB127894109225058CE380938B
:1004F000260584E0809327058CE390E09F938F93FB
:100500001F921F9283E291E09F938F931F920E940C
:10051000590782E091E09F938F931F920E945907A1
:10052000299AA1E0B0E00E948431802D2DB73EB71A
:10053000265F3F4F0FB6F8943EBF0FBE2DBF8B33E3
:10054000A9F183ED90E09F938F931F920E9459072A
:100550000E945E1B4AE36EE376E080E00E940E029A
:1005600001E00F900F900F90023049F40E94F11AB1
:100570004AE36EE376E082E00E940E0203E04AE383
:100580006EE376E0802F0E940E020F5F063060F36C
:1005900081E022E030E0D901082E0E948C318BE30B
:1005A00021503040D901082E0E948C3102E010E029
:1005B000D8010E948431802D4AE36EE376E00E94E8
:1005C0002602D8010E948431802D99279F938F9312
:1005D00088EB90E09F938F931F920E945907809120
:1005E00046060F900F900F900F900F9080FF20C045
:1005F0008BE990E09F938F931F920E94590784ECA0
:1006000099E00E94920AEC010E94B70E0F900F90A1
:100610000F90CE010E949B0A8823D9F386E990E0CF
:100620009F938F931F920E9459070F900F900F90E6
:100630000E94161C289880ED97E09093E501809326
:10064000E40188EE93E09093200580931F0585E5F3
:1006500080931A0588E890E09F938F931F920E94E1
:100660005907809146060F900F900F9082FF03C0AC
:100670008CE790E002C084E790E09F938F931F92F5
:100680000E9459070F900F900F9080E790E09F9382
:100690008F931F920E9459070E94DE0E0F900F90B9
:1006A0000F908091E101882379F11092E1010E947D
:1006B000291D0E94CF1B289880910101882319F0E1
:1006C00081508093010180916002882329F08091FC
:1006D00060028150809360022091040130910501F5
:1006E0008091560699272817390734F480ED97E052
:1006F0009093E5018093E40180910F02882319F41F
:100700000E94DB1201C028988091460685FF03C035
:100710000E945A2908C010929602109295021092D7
:100720009802109297020E9403050E94710580E0D2
:1007300090E00E949B0A882309F4B3CF809167025E
:10074000882329F088B190E1892788B901C04498AD
:1007500084EF91E00E94920AA4CF1F920F920FB6ED
:100760000F9211248F939F93EF93FF938091000139
:100770008823E1F48091DD019091DE010196909350
:10078000DE018093DD01FC01E451FC4FE081ED309E
:1007900019F08639910539F41092DE011092DD01CD
:1007A00081E080930001E093C60004C01092DE0156
:1007B0001092DD01FF91EF919F918F910F900FBEED
:1007C0000F901F901895DC0120E030E040E050E0F1
:1007D000ECEEF3E005C08191280F311D4F5F5F4FB4
:1007E0004A175B07C1F73F70C90136E096958795B8
:1007F0003A95E1F7835CFD01E451FC4F808311964B
:100800002F73235CFD01E451FC4F2083A351BC4FA7
:100810008DE08C93109200018091EC038093C600D0
:100820000895EF92FF920F931F93CF93DF937A0176
:10083000722F93E29093EC036093ED038093EE03A9
:1008400003E010E060E0AFEEB3E046C0F701E60F72
:10085000F11D90816F5F715019F4E0E040E00FC02E
:10086000F701E60FF11D40816F5F715011F4E0E078
:1008700006C0F701E60FF11DE0816F5F7150892F0F
:1008800086958695835C8C935527892F992783704D
:10089000907024E0880F991F2A95E1F79A0194E05F
:1008A000369527959A95E1F7822B835CED01898334
:1008B0004F705070440F551F440F551F8E2F829557
:1008C000869586958370842B835C8A83EF73E35CC3
:1008D000EB830C5F1F4F1496772309F0B7CFC80145
:1008E0000E94E303DF91CF911F910F91FF90EF9052
:1008F00008950F931F93CF93DF93EC01062F70E0C1
:10090000A22FBB2712974AC0E42FFF27E15DFA4FC1
:1009100030814F5FE42FFF27E15DFA4F50814F5F39
:10092000E42FFF27E15DFA4F10814F5FE42FFF278F
:10093000E15DFA4F20814F5F842F9927A817B907EF
:1009400084F1701771F15D53FE01E70FF11D3D5306
:10095000330F330F852F82958F70382B30836130A2
:1009600001F1912F9D537F5FFE01E70FF11D715043
:100970005295507F892F86958695582B50836350CA
:100980006F3F79F07E5FFE01E70FF11D9295990FA1
:10099000990F907C2D53922B90837F5F662309F0F3
:1009A000B3CFDF91CF911F910F9108951F93182F0F
:1009B0008A3019F48DE00E94D6048091C00085FF32
:1009C000FCCF1093C60080E090E01F910895089539
:1009D000E1ECF0E088E18083A0ECB0E08C918260F3
:1009E0008C938081806880838081806480838AE2A8
:1009F0008093C40088EC90E00E94920A90931905BD
:100A000080931805089580910001882309F468C037
:100A10008091C801882371F080910001882351F0F2
:100A20002BE04AE155E06091EB0387E40E9411045A
:100A30001092C80180911805909119050E949B0A97
:100A4000882321F48091CA018823B1F080910001AC
:100A5000882391F022E345EC55E06091EB0384E4B8
:100A60000E9411041092CA018AEF90E00E94920A3B
:100A700090931905809318058091C9018823F1F09E
:100A8000809100018823D1F00E94E70E1092C901E5
:100A90008091D6018F5F8093D601843011F410923B
:100AA000D6018091D60144E1849FA00111244A5EC1
:100AB0005E4F24E160E0805D0E9411048091CB01D3
:100AC000882371F080910001882351F02AE045E2EB
:100AD00055E06091EB0386E50E9411041092CB0172
:100AE00008951F93CF93DF93CDB7DEB722970FB64C
:100AF000F894DEBF0FBECDBF8091CD01882309F4ED
:100B000098C08FEF8093010180913105813760F4A7
:100B10008C3608F06FC0873609F440C08836F9F08B
:100B2000833609F084C008C0843759F1863791F1C3
:100B3000813709F07CC036C02091D00143E06BE0E2
:100B40008AE195E00E9479048091060290911C054B
:100B5000892B8093060281E08093CA0168C02091AE
:100B6000D00143E062E0CE0101960E9479048091B9
:100B700006029981892B8093060281E08093C90146
:100B800056C02091D00143E064E082ED91E00E94E4
:100B900079044DC081E08093CB0149C081E080930E
:100BA000C80145C02091D00143E062E0CE0101962A
:100BB0000E94790489818F3F89F0863010F085E0AA
:100BC00089834AE36EE376E089810E942602898167
:100BD0002AE34EE356E06091EB0308C01091EB036B
:100BE0000E9407022AE34EE356E0612F855B0E94D4
:100BF00011041DC02091D00143E06AE38EE396E02A
:100C00000E947904809131054AE36EE376E08B56C9
:100C10000E940E02809131058B56A2E0B0E0082EB2
:100C20000E948C310E94070299270E94141D109285
:100C3000CD0122960FB6F894DEBF0FBECDBFDF9177
:100C4000CF911F9108951F920F920FB60F9211240A
:100C50002F933F934F935F936F937F938F939F93C4
:100C6000AF93BF93CF93DF93EF93FF938091C60031
:100C70008093CC018091CC010E94E22A4091D8015E
:100C8000463910F01092D7018091CC018D3009F0D7
:100C90005DC08091D701823009F058C01092D70111
:100CA000A42FBB27FD01E35DFA4F3081ED01C25D4A
:100CB000DA4F28818091DB019091DC01831B91093F
:100CC000821B91099F709093DC018093DB019C0152
:100CD000689415F8369527951694E1F7235C2093D0
:100CE000DA01982F9F73935C9093D9018081281724
:100CF00029F48881981711F491E006C08091CF0102
:100D00008F5F8093CF0190E08091CD01882309F01F
:100D100064C0992309F461C081E08093CD014093C0
:100D2000D001A15DBA4F8DE08C9380913105823561
:100D300009F053C088E190E02CE00FB6F894A89534
:100D4000809360000FBE2093600047C08091D70160
:100D50008130D9F0813018F08230E9F530C08091CF
:100D6000CC01833239F48091CD01882319F481E0DC
:100D70008093D7018091CC0180932F0581E08093EF
:100D8000D8018091CC01992715C082E08093D701CA
:100D9000E42FFF278091CC01E15DFA4F80834F5F04
:100DA0004093D8012091CC018091DB019091DC012E
:100DB000820F911D9093DC018093DB010EC0E42F24
:100DC000FF278091CC01E15DFA4F8083463938F3EB
:100DD0001092D701E7CF1092D701FF91EF91DF91E9
:100DE000CF91BF91AF919F918F917F916F915F91C3
:100DF0004F913F912F910F900FBE0F901F9018951C
:100E0000982F8091F705813069F480910502E82FD1
:100E1000FF27EA5EFE4F90838F5F8093050221E0FB
:100E200030E005C0892F0E94D604282F3327C9013E
:100E300008951F93182F04C080E30E9400071150EB
:100E40001116D4F31F9108951F93182F04C080E248
:100E50000E94000711501116D4F31F9108950F93AB
:100E60001F93CF93DF938C01EB0108C0F8010F5F54
:100E70001F4FE4918E2F0E94000721972097B1F712
:100E8000DF91CF911F910F9108950F931F93CF93EF
:100E9000DF938C01EB0106C0F80181918F010E9464
:100EA000000721972097C1F7DF91CF911F910F91F4
:100EB00008952F923F924F925F926F927F928F92FE
:100EC0009F92AF92BF92CF92DF92EF92FF920F93D9
:100ED0001F93CF93DF93CDB7DEB7E3970FB6F894A8
:100EE000DEBF0FBECDBF29968FAD29978093F70542
:100EF000CE01855B9F4F9D838C832B964EAD5FAD5E
:100F00002B975FA74EA722243324210102C013018F
:100F100024010EA51FA502C00F5F1F4FF801F4901A
:100F2000FF2019F0F5E2FF16B9F7B8014EA55FA54D
:100F3000641B750B19F0CA010E942F07FF2009F4EA
:100F400044C20F5F1F4F1FA70EA71982AC81BD813E
:100F50001BAA1AAA5FEF59ABEEA5FFA5CF01019618
:100F60009FA78EA7B49095E7B91621F08B2D8062CC
:100F7000883789F4EBA9E0FF07C02D903D904D9094
:100F80005C901397149607C08D919C9111971C014A
:100F9000442455241296F0E2BF1621F48981882357
:100FA000D9F686C043E2B41609F484C05AE2B516F5
:100FB00021F08DE2B81671F408C0FD011296E081AF
:100FC000EAABE7FFC9CFE195EAAB9BA990619F7DB2
:100FD0009BABC2CFEBE2BE1609F46AC0FEE2BF16BD
:100FE000B1F52EA53FA52F5F3F4FEEA5FFA584913C
:100FF0008A3221F0B82E20E030E01BC0FD011296AD
:101000004081518157FF02C04FEF5FEF49AB3FA7CF
:101010002EA7A2CF8AE090E0A901489F9001499FA6
:10102000300D589F300D11242B0D311D20533040B1
:10103000B49031968B2D80538A3060F3FFA7EEA7D2
:10104000A90137FF02C04FEF5FEF49AB8CCF50E3F0
:10105000B51631F48BA984FD7FCF80628BAB7CCF3A
:101060008B2D81538930E8F420E030E04AE050E0F5
:10107000F901E49F9001E59F300DF49F300D11249C
:101080002B0D311D20533040EEA5FFA5CF01019659
:101090009FA78EA7B4908B2D80538A3048F32AAB3C
:1010A00062CF98E6B91651F4EBA9E460EBAB54CFEC
:1010B000B98252CFFBA9F860FBAB4ECF4CE6B41619
:1010C00021F45BA951605BAB47CFBD83AC8383E662
:1010D000B81639F41296BD83AC8312978C918E8327
:1010E00019C194E4B91639F0E4E6BE1639F0F9E610
:1010F000BF1659F503C04BA941604BAB5BA950FF2C
:1011000008C01496BD83AC835E904E903E902E90A6
:101110000AC01296BD83AC839E918E911C0144241B
:1011200037FC4094542C57FC03C08AE088AB93C032
:101130005094409430942094211C311C411C511C2B
:101140008DE289839AE098AB86C0EFE4BE1629F061
:10115000FFE6BF1641F448E061C05BA951605BAB9C
:1011600088E088AB77C090E7B91671F41296BD831A
:10117000AC839E918E911C0144245524EBA9E0641C
:10118000EBAB78E7B72E5EC043E7B416D9F51296FD
:10119000BD83AC83DE90CE90C114D10489F488E283
:1011A0008E838EE68F8385E788878CE689878A879A
:1011B00089E28B871C8666E0C62ED12CCC0EDD1E04
:1011C00059A957FD13C0452F552747FD509560E09D
:1011D00070E0C6010E94252C009711F419A90DC0DA
:1011E0008C1919A981174CF4182F07C0F60101902A
:1011F0000020E9F731971E2F1C1919824201310195
:1012000040E094C085E5B81629F095E7B91641F499
:10121000EAE011C0FBA9F160FBAB4AE048AB1AC0A1
:1012200058E5B51621F088E7B81609F06FC09BA9FC
:1012300093FD03C0E0E1E8AB0DC02114310441048B
:10124000510419F4F0E1F8AB05C04BA940644BAB75
:1012500050E158AB198289A987FD03C09BA99F7DE6
:101260009BAB211431044104510461F4E9A9EE233C
:1012700049F46624772443015EE2C52ED12CCC0EBE
:10128000DD1E3EC04EE2C42ED12CCC0EDD1EF8A9D0
:10129000EF2EFF2400271127C201B101A8019701F9
:1012A0000E9447316A3020F430E3A32EA60E08C016
:1012B00027E5A22EA60E48E5B41611F45FEDA5228F
:1012C000F601A2926F01C201B101A80197010E942B
:1012D000473139014A012E143F044006510618F0E7
:1012E00019012A01D9CFF8A9F83051F44BA943FFCD
:1012F00007C050E3A51621F080E3F60182936F0149
:10130000AE014C19142F125D49A910C0BB2009F47D
:101310005CC0BE8219824201310100E096E0C92E14
:10132000D12CCC0EDD1E11E091E005C0912F042FD1
:10133000011B07FD00E08981882319F0812F8F5F51
:1013400007C05BA956FD02C0812F02C0892F8E5FA6
:10135000A82EA00E8BA9E82EFF2480E3482E512C46
:101360004E205F204114510421F48AA98A190E9459
:1013700024078981882329F061E070E0CE0101967D
:1013800009C0E6FE09C080E38A83BB8262E070E0A8
:10139000CE0102960E94450790E24916510421F4BD
:1013A0008AA98A190E941907802F0E941907612FA4
:1013B000772767FD7095C6010E944507E4FEA7CD1B
:1013C0008AA98A190E942407A2CDE3960FB6F89441
:1013D000DEBF0FBECDBFDF91CF911F910F91FF9068
:1013E000EF90DF90CF90BF90AF909F908F907F90C5
:1013F0006F905F904F903F902F9008951F920F92A3
:101400000FB60F9211242F933F935F936F937F93A7
:101410008F939F93AF93BF938091E8018150809306
:10142000E8018F3F01F589E08093E8018091030195
:101430008F5F817080930301882319F481E080938A
:10144000E1018091DF019091E00101969093E0012C
:101450008093DF0180910F02882329F080910F0291
:10146000815080930F028091E4019091E5010297F1
:1014700058F08091E4019091E50101979093E50186
:101480008093E4015A9A01C05A988091460683FFDE
:101490003BC0349B0AC08091E2019091E301019628
:1014A0009093E3018093E2012FC08091E20190913B
:1014B000E301892B79F08091E2019091E301805A58
:1014C0009F4040F48091E2019091E301909351029A
:1014D00080935002809150029091510220915202CB
:1014E00030915302821B930B845E9D4F68E671E03E
:1014F0000E943431845B9040909355028093540253
:101500001092E3011092E201BF91AF919F918F91F0
:101510007F916F915F913F912F910F900FBE0F9030
:101520001F9018952091DF013091E0012F5F3F4F10
:10153000820F931F08952091DF013091E001821BFB
:10154000930B892F992786958074992708951F9268
:101550000F920FB60F921124EF92FF920F931F93E9
:101560002F933F934F935F936F937F938F939F93AB
:10157000AF93BF93CF93DF93EF93FF9380910201DB
:101580008150809302018F3F09F073C083E88093FC
:10159000B00080918901C82FDD27D093E701C09367
:1015A000E60180916406E090600680FF1EC06091B5
:1015B0002002709121028091220290912302FF2447
:1015C0000027112720E830E040E050E00E94693118
:1015D000C801B7010E94013120E032E040E050E054
:1015E0000E946931C20FD31F1DC06091200270910B
:1015F00021028091220290912302FF2400271127CB
:1016000020E830E040E050E00E946931C801B701B5
:101610000E94013120E032E040E050E00E94693158
:10162000C21BD30BD093E701C093E6012091E601E2
:101630003091E7018091610699272817390734F026
:101640008091620699278217930724F49093E7010B
:101650008093E6018091E6019091E7019093EC057B
:101660008093EB058093B300809163068093020121
:1016700004C083E08093B0005F98FF91EF91DF9109
:10168000CF91BF91AF919F918F917F916F915F911A
:101690004F913F912F911F910F91FF90EF900F90DD
:1016A0000FBE0F901F9018958091DF019091E0017F
:1016B0000B969093EA018093E90182E085BD83EA6D
:1016C00084BD17BC88E788BD96E096BD83EC809307
:1016D000B0009093B100E0E7F0E080818260808309
:1016E000EEE6F0E08081816080838AE08093B30041
:1016F0001092B20008952091DF013091E0012F5F38
:101700003F4F280F391F8091DF019091E001A9011F
:10171000481B590B57FFF7CF089510927C008FEEAE
:1017200080937A0008951F920F920FB60F921124A2
:10173000EF92FF920F931F932F933F934F935F93DB
:101740006F937F938F939F93AF93BF93CF93DF93C9
:10175000EF93FF9310927A00409101024F5F409304
:1017600001024150433009F41CC1443038F4413087
:1017700009F463C0423008F0B9C00DC0453009F427
:1017800050C1453008F42AC1463009F46FC14730D2
:1017900009F0CBC252C220911402309115028091FF
:1017A000780090917900281B390B8091EF0190917E
:1017B000F001820F931F9093F0018093EF018091CD
:1017C000F9018F5F8093F901809144029091450265
:1017D000A0914602B0914702442737FD4095542F0F
:1017E000820F931FA41FB51F80934402909345025C
:1017F000A0934602B093470280914802909149021B
:10180000A0914A02B0914B02820F931FA41FB51FF3
:101810008093480290934902A0934A02B0934B02EE
:1018200081E0809302028091FF0190910002019675
:10183000909300028093FF017CC2609178007091C8
:1018400079008091120290911302681B790B8091AC
:101850003C0290913D02A0913E02B0913F029B015B
:10186000442737FD4095542F820F931FA41FB51FA7
:1018700080933C0290933D02A0933E02B0933F02BE
:101880008091400290914102A0914202B0914302A6
:10189000820F931FA41FB51F8093400290934102B3
:1018A000A0934202B0934302809178009091790016
:1018B0000A9710F464E47DEF8091780090917900AC
:1018C000895E934010F06CEB72E08091ED01909195
:1018D000EE01860F971F9093EE018093ED018091AA
:1018E000F8018F5F8093F80182E058C06091780022
:1018F000709179008091100290911102681B790B10
:101900008091340290913502A0913602B091370255
:101910009B01442737FD4095542F820F931FA41F2E
:10192000B51F8093340290933502A0933602B09392
:1019300037028091380290913902A0913A02B09119
:101940003B02820F931FA41FB51F80933802909310
:101950003902A0933A02B0933B02809178009091B3
:1019600079000A9710F464E47DEF809178009091FB
:101970007900895E934010F06CEB72E08091EB018E
:101980009091EC01860F971F9093EC018093EB01EF
:101990008091F7018F5F8093F70184E080930202CA
:1019A000C8C1409104015091050180917800909147
:1019B00079009A01220F331F240F351F63E070E076
:1019C0000E942031260F371F36952795369527958B
:1019D000309305012093040186E0E0CF8091180246
:1019E000909119022091780030917900821B930B1D
:1019F0009093F9058093F8058091F1019091F2019F
:101A00002091F8053091F905820F931F9093F20110
:101A10008093F1018091FB018F5F8093FB0187E050
:101A2000BDCF80917800909179002091160230917D
:101A30001702821B930B9093F9058093F805809110
:101A4000F3019091F4012091F8053091F905820F8E
:101A5000931F9093F4018093F3018091FA018F5FBB
:101A60008093FA014093020286E0E4C0609178001E
:101A700070917900E0901A02F0901B0200911C0214
:101A800010911D02882777FD8095982F0E943F3086
:101A9000A80197010E94992F0E9422307093F601AD
:101AA0006093F5012091F5013091F601E091F80580
:101AB000F091F905809103069091040697FF03C009
:101AC000909581959F4F64E070E00E943431EB0166
:101AD000CF01F7FF03C0909581959F4F64E070E0C0
:101AE0000E943431260F371F2C0F3D1F3093F60113
:101AF0002093F5018091F5019091F601029704F190
:101B000060911A0270911B0280911C0290911D023B
:101B100020E030E048E454E40E94493088230CF08F
:101B20003CC060911A0270911B0280911C0290913E
:101B30001D022AE037ED43EA5CE30E949A2F25C09C
:101B40008091F5019091F6018F5F9F4F34F5609180
:101B50001A0270911B0280911C0290911D0220E0DC
:101B600030E046E154E40E944C301816B4F4609121
:101B70001A0270911B0280911C0290911D022AE0B2
:101B800037ED43EA5CE30E94992F60931A02709349
:101B90001B0280931C0290931D0281E08093FC0144
:101BA00080917800909179009093FB058093FA05DD
:101BB00020914C0230914D0240914E0250914F02C3
:101BC0008091F5019091F601AA2797FDA095BA2F73
:101BD000280F391F4A1F5B1F20934C0230934D0280
:101BE00040934E0250934F02E0904C02F0904D0211
:101BF00000914E0210914F0260914C0270914D0283
:101C000080914E0290914F0220E034E040E050E09D
:101C10000E946931E21AF30A040B150BE0924C02A0
:101C2000F0924D0200934E0210934F0283E0809396
:101C3000020287E0809301027CC0809108069091A7
:101C400009062091780030917900820F931F9093BC
:101C5000090680930806809100068F5F8093000636
:101C600080910006853008F460C0809178009091E2
:101C7000790090930B0180930A01109200068091E5
:101C8000FC059091FD052091080630910906821B04
:101C9000930B2091680230916902821B930B909301
:101CA000FE018093FD016091080670910906E090A5
:101CB0000601F090070100910801109109018827A1
:101CC00077FD8095982FA8019701220F331F441F9D
:101CD000551F2E0D3F1D401F511F620F731F841F84
:101CE000951F24E030E040E050E00E9469312093ED
:101CF0000601309307014093080150930901209198
:101D0000FC053091FD058091060190910701A0919D
:101D10000801B0910901281B390B30936902209307
:101D200068021092090610920806109202021092A0
:101D300001028091020280937C008FEE80937A00F2
:101D4000FF91EF91DF91CF91BF91AF919F918F91D3
:101D50007F916F915F914F913F912F911F910F91C3
:101D6000FF90EF900F900FBE0F901F901895CF939C
:101D7000DF93C0E0D0E0C7BD82E390E00E947B0B20
:101D80008BE391E09F938F931F920E94590780915C
:101D90000A0190910B010F900F900F90845893407F
:101DA00020F02196CA3FD10531F7C093050688EC93
:101DB00090E00E947B0BDF91CF910895E6E1F1E086
:101DC00080E2819391E0E636F907D9F70895FF9212
:101DD0000F931F9380910602282F3327C90181702A
:101DE0009070682F882391F080910702882311F06A
:101DF000815002C08091660180930702E6E1F1E024
:101E000080E2819391E0E636F907D9F7A9014270A3
:101E1000507021FF0DC0809107028F5F80930702F1
:101E2000E6E1F1E080E2819391E0E636F907D9F747
:101E3000662321F0452B11F01092070281E1809377
:101E400005028091070299279F938F938EEC93E070
:101E50009F938F93E1E0FE2EFF920E94590700911D
:101E600007020F900F900F900F900F90053009F41C
:101E7000DAC1063090F4023009F4BBC0033030F40C
:101E8000002309F1013009F08BC350C0033009F47D
:101E900005C1043009F084C34EC1083009F49BC267
:101EA000093038F4063009F414C2073009F078C359
:101EB0006FC20A3009F40AC30A3008F4C9C20B30F1
:101EC00009F06EC340C3109205028CEB93E09F9320
:101ED0008F93FF920E94590784E1809305028CE35F
:101EE00090E09F938F931F921F9285EB93E09F93B7
:101EF0008F93FF920E94590788E2809305020E9407
:101F0000070299279F938F9388EA93E09F938F937B
:101F1000FF920E9459078CE38093050288E993E0C1
:101F20009F938F93FF920E9459078EC2809146061D
:101F300080FF47C01092050280916802909169026B
:101F40009F938F9389E893E09F938F930F930E94C1
:101F5000590784E18093050280916A0290916B0297
:101F60009F938F938AE793E09F938F930F930E94A1
:101F7000590788E28093050280910A0190910B0134
:101F80009F938F938BE693E09F938F930F930E9481
:101F900059078CE3809305028091050699279F934A
:101FA0008F938CE593E09F938F930F930E94590733
:101FB0008DB79EB744960FB6F8949EBF0FBE8DBFE7
:101FC000F4C284E18093050285E593E09F938F93AB
:101FD0000F930E94590788E28093050287E493E0FB
:101FE0009F938F930F930E9459078DB79EB70696C4
:101FF000E2CF109205028DE393E09F938F93FF92BF
:102000000E94590784E1809305026091200270913B
:102010002102809122029091230220E034E040E0EE
:1020200050E00E9469315F934F933F932F938EE26C
:1020300093E09F938F93FF920E94590788E28093C9
:102040000502609128027091290280912A029091E4
:102050002B0220E034E040E050E00E9469315F93C1
:102060004F933F932F938FE193E09F938F93FF9232
:102070000E9459078CE38093050280915002909151
:1020800051029F938F9380E193E09F938F93FF92F0
:102090000E9459078DB79EB746968DCF10920502C4
:1020A000809116069091170620911406309115061E
:1020B0009F938F933F932F9380E093E09F938F9311
:1020C000FF920E94590784E18093050280911A06CD
:1020D00090911B0620911806309119069F938F93BB
:1020E0003F932F9380EF92E09F938F93FF920E94F4
:1020F000590788E28093050280911E0690911F0681
:1021000020911C0630911D069F938F933F932F9330
:1021100080EE92E09F938F93FF920E9459078CE389
:102120008093050280912006909121069F938F93C2
:1021300080ED92E06FC010920502E0913F06FF270C
:10214000EE0FFF1FEE5EF94F20813181E0913E06D8
:10215000FF27EE0FFF1FEE5EF94F808191813F93C5
:102160002F939F938F9380EC92E09F938F93FF9296
:102170000E94590784E180930502E0914106FF2700
:10218000EE0FFF1FEE5EF94F20813181E091400696
:10219000FF27EE0FFF1FEE5EF94F808191813F9385
:1021A0002F939F938F9380EB92E09F938F93FF9257
:1021B0000E94590788E280930502E0914306FF27B9
:1021C000EE0FFF1FEE5EF94F20813181E091420654
:1021D000FF27EE0FFF1FEE5EF94F808191813F9345
:1021E0002F939F938F9380EA92E09F938F93FF9218
:1021F0000E9459078CE380930502E0914406FF2773
:10220000EE0FFF1FEE5EF94F808191819F938F93B8
:1022100080E992E09F938F93FF920E9459078DB7B8
:102220009EB74A96C8CE1092050282E892E09F932C
:102230008F93FF920E94590784E1809305022091B9
:102240001002309111028091EB019091EC016091AC
:10225000F7013F932F9377270E9434317F936F9339
:1022600083E792E09F938F93FF920E94590788E241
:102270008093050220911202309113028091ED01AA
:102280009091EE016091F8013F932F9377270E9480
:1022900034317F936F9384E692E09F938F93FF9204
:1022A0000E9459078CE3809305022091140230911B
:1022B00015028091EF019091F0016091F9013F9337
:1022C0002F9377270E9434317F936F9385E592E0B7
:1022D00056C01092050288E492E09F938F93FF927C
:1022E0000E94590784E180930502209116023091E3
:1022F00017028091F3019091F4016091FA013F93EC
:102300002F9377270E9434317F936F9389E392E074
:102310009F938F93FF920E94590788E28093050252
:1023200020911802309119028091F1019091F201EF
:102330006091FB013F932F9377270E9434317F9365
:102340006F938AE292E09F938F93FF920E945907C6
:102350008CE38093050260911A0270911B028091B8
:102360001C0290911D020091FA051091FB050E943C
:1023700022307F936F931F930F938BE192E09F9393
:102380008F93FF920E9459078DB79EB7489613CE40
:1023900084E18093050280910401909105019F934F
:1023A0008F938CE092E09F938F93FF920E94590746
:1023B00088E2809305028091600299279F938F9312
:1023C0008DEF91E09F938F93FF920E9459078DB7F5
:1023D0009EB70A96F0CD109205028EEE91E09F9383
:1023E0008F93FF920E94590784E1809305028091A8
:1023F0005402909155029F938F938FED91E09F939C
:102400008F93FF920E94590788E280930502809182
:102410005002909151029F938F9380ED91E09F9392
:102420008F93FF920E9459078CE38093050280915D
:102430005202909153029F938F9381EC91E09F936E
:102440008F93FF920E9459078DB79EB74296B3CDE6
:102450001092050280915802909159029F938F9398
:1024600085EB91E09F938F93FF920E94590784E13F
:102470008093050280915A0290915B029F938F9303
:1024800089EA91E09F938F93FF920E94590788E217
:102490008093050280915C0290915D029F938F93DF
:1024A0008DE991E09F938F93FF920E9459078CE3EF
:1024B0008093050280915E0290915F029F938F93BB
:1024C00081E991E09F938F93FF9270CD1092050266
:1024D00089E891E09F938F93FF920E94590784E1CE
:1024E000809305028091890199279F938F938BE7B1
:1024F00091E09F938F93FF920E94590788E2809307
:1025000005028091E6019091E7019F938F938DE6FC
:1025100091E09F938F93FF920E9459078CE38093E1
:1025200005028091620699279F938F93809161069F
:1025300099279F938F938FE591E09F938F93FF92BD
:102540000E94590735CD1092050289E591E09F93CD
:102550008F93FF920E94590784E180930502809136
:102560009502909196029F938F938BE491E09F93B5
:102570008F93FF920E94590788E280930502809111
:102580009702909198029F938F938DE391E09F9390
:102590008F93FF920E9459078DB79EB70D960BCD72
:1025A00001500093660110920702109206021F91DB
:1025B0000F91FF9008951092B9008AE28093B800BD
:1025C000089585EA8093BC0080E090E0089584E956
:1025D0008093BC0008951092B9008093BB0085E8F9
:1025E0008093BC0080E090E008951F920F920FB698
:1025F0000F9211248F939F93EF93FF938091080282
:102600008F5F809308028150833009F442C0843088
:1026100028F48130A1F0823070F50CC0853009F4C7
:1026200048C08530D8F1863009F44BC0873009F0B6
:1026300071C05BC080910902880F8E5A14C08091CE
:1026400009028F5F809309028150813009F444C0F0
:10265000813038F0823009F442C0833009F05AC02A
:1026600041C08091AF021092B9008093BB0085E811
:102670008093BC004FC084E98093BC008091090224
:10268000843018F41092080202C01092090285EA00
:10269000EFCF80910A02880F8D5AE5CF80910A0210
:1026A0008130D1F08130E8F28230C9F0833091F589
:1026B00019C08091BB00E0910A02FF27E65FF94F45
:1026C000808380910A02813039F0813050F282306B
:1026D00031F08330F9F406C08091B002C4CF80910C
:1026E000B703C1CF8091E203BECF80910A029091DF
:1026F000BB00E82FFF27E65FF94F94838F5F80933D
:102700000A02843010F010920A0284E98093BC001F
:1027100010920802FF91EF919F918F910F900FBE41
:102720000F901F90189583EC80938100EFE6F0E006
:1027300080818062808310921502109214021092A0
:1027400013021092120210921102109210020895B8
:102750001F920F920FB60F9211240F931F932F9376
:102760003F934F935F936F937F938F939F93AF9319
:10277000BF93CF93DF93EF93FF9320918600309127
:10278000870080910D0290910E02281B390B8091D9
:1027900086009091870090930E0280930D02C901EC
:1027A0008D5D95408356994148F481E090E0909387
:1027B0000C0280930B021092670154C0C0910B026F
:1027C000D0910C02CA30D1050CF04CC0C9018B5F0E
:1027D0009040845B914008F040C0A901425D5140A7
:1027E000FE01EE0FFF1FEE5EF94F80819181FA012D
:1027F000E81BF90BCF01F7FF03C0909581959F4F20
:1028000006974CF480916002883C28F48091600225
:10281000865F80936002FE01EE0FFF1F8F010E5E48
:10282000194FD8012D913C91C901880F991F820F32
:10283000931F840F951F64E070E00E943431D8012B
:102840008D919C9111979B01281B390BE85DF94FE5
:102850003183208311967C936E932196D0930C0242
:10286000C0930B02FF91EF91DF91CF91BF91AF9198
:102870009F918F917F916F915F914F913F912F9198
:102880001F910F910F900FBE0F901F901895AF9250
:10289000BF92CF92DF92EF92FF920F931F9310920D
:1028A0007A008091F701882369F08091EB01909183
:1028B000EC016091F70177270E94343170937B0619
:1028C00060937A068091F801882369F08091ED0188
:1028D0009091EE016091F80177270E943431709356
:1028E0007906609378068091F901882369F08091D8
:1028F000EF019091F0016091F90177270E94343146
:1029000070938706609386068091FA018823D9F137
:10291000E0908306F09084066091F3017091F401D9
:102920002091FA010027F7FC0095102F570168014C
:1029300043E0AA0CBB1CCC1CDD1C4A95D1F7AE1899
:10294000BF08C00AD10A882777FD8095982F34E008
:10295000660F771F881F991F3A95D1F733274427B1
:1029600055270E946931A20EB31EC41ED51EC60192
:10297000B50128E030E040E050E00E94693130933A
:102980008406209383068091FB018823D9F1E0908F
:102990008C06F0908D066091F1017091F20120910A
:1029A000FB010027F7FC0095102F5701680183E019
:1029B000AA0CBB1CCC1CDD1C8A95D1F7AE18BF0835
:1029C000C00AD10A882777FD8095982FB4E0660F5A
:1029D000771F881F991FBA95D1F7332744275527AA
:1029E0000E946931A20EB31EC41ED51EC601B501D8
:1029F00028E030E040E050E00E94693130938D06DD
:102A000020938C068091FC018823A1F1E0907D0643
:102A1000F0907E066091F5017091F6012091FC0125
:102A20000027F7FC0095102F57016801A3E0AA0CBE
:102A3000BB1CCC1CDD1CAA95D1F7AE18BF08C00A80
:102A4000D10A882777FD8095982F3327442755276B
:102A50000E946931A20EB31EC41ED51EC601B50167
:102A600028E030E040E050E00E94693130937E067B
:102A700020937D061092EC011092EB011092F70169
:102A80001092EE011092ED011092F8011092F001F7
:102A90001092EF011092F9011092F2011092F101DF
:102AA0001092FB011092F4011092F3011092FA01BE
:102AB0001092F6011092F5011092FC0180914402EF
:102AC00090914502A0914602B09147028093300256
:102AD00090933102A0933202B0933302809134027A
:102AE00090913502A0913602B09137028093200276
:102AF00090932102A0932202B093230280913C0282
:102B000090913D02A0913E02B0913F028093280235
:102B100090932902A0932A02B0932B02809138024D
:102B200090913902A0913A02B0913B028093240225
:102B300090932502A0932602B09327028091400231
:102B400090914102A0914202B091430280932C02E5
:102B500090932D02A0932E02B0932F028FEE8093BC
:102B60007A0080917A0690917B06893C91057CF0F1
:102B700020917A0630917B0680917A0690917B06AF
:102B8000880F991F880F991F2052334015C08091DC
:102B90007A0690917B0688539F4FA4F420917A0681
:102BA00030917B0680917A0690917B06880F991F61
:102BB000880F991F205E3C4F820F931F90937B06D6
:102BC00080937A068091780690917906893C9105E8
:102BD0007CF020917806309179068091780690916A
:102BE0007906880F991F880F991F2052334015C00E
:102BF000809178069091790688539F4FA4F4209194
:102C00007806309179068091780690917906880F40
:102C1000991F880F991F205E3C4F820F931F90933E
:102C2000790680937806209158023091590280915C
:102C30004206E82FFF27EE0FFF1FEE5EF94F80815F
:102C4000918182599F4F281739071CF42F5F3F4FFE
:102C50000CC08081918182599F4F821793074CF459
:102C60002115310531F02150304030935902209325
:102C7000580220915A0230915B0280914306E82F5E
:102C8000FF27EE0FFF1FEE5EF94F80819181825981
:102C90009F4F281739071CF42F5F3F4F0CC08081CE
:102CA000918182599F4F821793074CF4211531056A
:102CB00031F02150304030935B0220935A02209132
:102CC0005C0230915D0280914406E82FFF27EE0FF1
:102CD000FF1FEE5EF94F8081918182599F4F281727
:102CE00039071CF42F5F3F4F0CC0808191818259BE
:102CF0009F4F821793074CF42115310531F0215075
:102D0000304030935D0220935C0220915E0230914E
:102D10005F0280914506E82FFF27EE0FFF1FEE5E52
:102D2000F94F8081918182599F4F281739071CF4F0
:102D30002F5F3F4F0CC08081918182599F4F821736
:102D400093074CF42115310531F021503040309378
:102D50005F0220935E02809158029091590297FF82
:102D600005C010925902109258020AC08F3F910577
:102D700039F034F08FEF90E090935902809358022D
:102D800080915A0290915B0297FF05C010925B02FE
:102D900010925A020AC08F3F910539F034F08FEF3C
:102DA00090E090935B0280935A0280915C02909134
:102DB0005D0297FF05C010925D0210925C020AC08E
:102DC0008F3F910539F034F08FEF90E090935D02E2
:102DD00080935C0280915E0290915F0297FF05C034
:102DE00010925F0210925E020AC08F3F910539F087
:102DF00034F08FEF90E090935F0280935E021F911A
:102E00000F91FF90EF90DF90CF90BF90AF9008951B
:102E100010927A008091F701882369F08091EB018C
:102E20009091EC016091F70177270E943431709303
:102E30007B0660937A068091F801882369F080917F
:102E4000ED019091EE016091F80177270E943431F5
:102E500070937906609378068091F901882369F070
:102E60008091EF019091F0016091F90177270E9424
:102E7000343170938706609386068091FA01882327
:102E8000D1F06091F3017091F4012091FA0188274B
:102E900077FD8095982F34E0660F771F881F991F64
:102EA0003A95D1F73327442755270E94693130934B
:102EB0008406209383068091FB018823D1F06091E2
:102EC000F1017091F2012091FB01882777FD809537
:102ED000982FB4E0660F771F881F991FBA95D1F716
:102EE0003327442755270E94693130938D0620935C
:102EF0008C068091FC01882399F06091F501709116
:102F0000F6012091FC01882777FD8095982F3327C3
:102F1000442755270E94693130937E0620937D0611
:102F20001092EC011092EB011092F7011092EE0159
:102F30001092ED011092F8011092F0011092EF0141
:102F40001092F9011092F2011092F1011092FB011E
:102F50001092F4011092F3011092FA011092F6010E
:102F60001092F5011092FC018FEE80937A0020916F
:102F700058023091590280914206E82FFF27EE0F48
:102F8000FF1FEE5EF94F8081918182599F4F281774
:102F900039071CF42F5F3F4F0CC08081918182590B
:102FA0009F4F821793074CF42115310531F02150C2
:102FB0003040309359022093580220915A023091A8
:102FC0005B0280914306E82FFF27EE0FFF1FEE5EA6
:102FD000F94F8081918182599F4F281739071CF43E
:102FE0002F5F3F4F0CC08081918182599F4F821784
:102FF00093074CF42115310531F0215030403093C6
:103000005B0220935A0220915C0230915D02809114
:103010004406E82FFF27EE0FFF1FEE5EF94F808179
:10302000918182599F4F281739071CF42F5F3F4F1A
:103030000CC08081918182599F4F821793074CF475
:103040002115310531F02150304030935D0220933D
:103050005C0220915E0230915F0280914506E82F6C
:10306000FF27EE0FFF1FEE5EF94F8081918182599D
:103070009F4F281739071CF42F5F3F4F0CC08081EA
:10308000918182599F4F821793074CF42115310586
:1030900031F02150304030935F0220935E028091E6
:1030A00058029091590297FF05C010925902109250
:1030B00058020AC08F3F910539F034F08FEF90E04D
:1030C000909359028093580280915A0290915B022A
:1030D00097FF05C010925B0210925A020AC08F3F00
:1030E000910539F034F08FEF90E090935B0280937C
:1030F0005A0280915C0290915D0297FF05C0109288
:103100005D0210925C020AC08F3F910539F034F0E5
:103110008FEF90E090935D0280935C0280915E025D
:1031200090915F0297FF05C010925F0210925E02BD
:1031300008958F3F910539F034F08FEF90E0909330
:103140005F0280935E0208951F93809149068B3F32
:1031500098F08B3F19F4809158020EC08C3F19F4FF
:1031600080915A0209C08D3F19F480915C0204C01D
:103170008E3F21F480915E028093810180918101D4
:10318000882319F41092810104C08F3F11F48093B9
:103190008101809148068B3F98F08B3F19F4809114
:1031A00058020EC08C3F19F480915A0209C08D3F1D
:1031B00019F480915C0204C08E3F21F480915E027C
:1031C0008093800180918001882319F410928001FE
:1031D00005C0843618F084E68093800180914A0609
:1031E0008B3F98F08B3F19F4809158020EC08C3FB2
:1031F00019F480915A0209C08D3F19F480915C0244
:1032000004C08E3F21F480915E0280938201809100
:103210008201882319F41092820105C0843618F0C7
:1032200084E68093820180914C068B3F98F08B3F1F
:1032300019F4809158020EC08C3F19F480915A0203
:1032400009C08D3F19F480915C0204C08E3F21F4C7
:1032500080915E028093830180918301882319F419
:103260001092830104C08F3F11F4809383018091F9
:1032700053068B3F98F08B3F19F4809158020EC093
:103280008C3F19F480915A0209C08D3F19F4809146
:103290005C0204C08E3F21F480915E028093840121
:1032A00080918401882319F41092840104C08F3F17
:1032B00011F480938401809154068B3F98F08B3FEA
:1032C00019F4809158020EC08C3F19F480915A0273
:1032D00009C08D3F19F480915C0204C08E3F21F437
:1032E00080915E0280938501809185018B3010F47E
:1032F0008AE002C08F3F11F48093850180915506CA
:103300008B3F98F08B3F19F4809158020EC08C3F90
:1033100019F480915A0209C08D3F19F480915C0222
:1033200004C08E3F21F480915E02809386018091DB
:103330008601882319F41092860104C08F3F11F48E
:103340008093860180915A068B3F98F08B3F19F449
:10335000809158020EC08C3F19F480915A0209C026
:103360008D3F19F480915C0204C08E3F21F480915E
:103370005E028093880180918801882319F410925D
:10338000880104C08F3F11F48093880180915B060F
:103390008B3F98F08B3F19F4809158020EC08C3F00
:1033A00019F480915A0209C08D3F19F480915C0292
:1033B00004C08E3F21F480915E0280936C02809164
:1033C0006C02882319F410926C0204C08F3F11F430
:1033D00080936C0280915C068B3F98F08B3F19F4D0
:1033E000809158020EC08C3F19F480915A0209C096
:1033F0008D3F19F480915C0204C08E3F21F48091CE
:103400005E0280936D0280916D02882319F4109200
:103410006D0204C08F3F11F480936D0280915D06B0
:103420008B3F98F08B3F19F4809158020EC08C3F6F
:1034300019F480915A0209C08D3F19F480915C0201
:1034400004C08E3F21F480915E0280936E028091D1
:103450006E02882319F410926E0204C08F3F11F49B
:1034600080936E0280915E068B3F98F08B3F19F43B
:10347000809158020EC08C3F19F480915A0209C005
:103480008D3F19F480915C0204C08E3F21F480913D
:103490005E0280936F0280916F02882319F410926C
:1034A0006F0204C08F3F11F480936F0290915F060A
:1034B0009B3FB0F09B3F19F48091580204C09C3FA1
:1034C00029F480915A02809389010CC09D3F19F420
:1034D00080915C02F8CF9E3F29F480915E02F3CF89
:1034E0009093890180918901882319F410928901B0
:1034F00004C08F3F11F4809389019B3FB0F09B3F44
:1035000019F48091580204C09C3F29F480915A021A
:10351000809389010CC09D3F19F480915C02F8CF23
:103520009E3F29F480915E02F3CF909389018091B0
:103530008901882319F41092890104C08F3F11F486
:10354000809389019B3FB0F09B3F19F48091580212
:1035500004C09C3F29F480915A02809389010CC0D9
:103560009D3F19F480915C02F8CF9E3F29F4809131
:103570005E02F3CF9093890180918901882319F429
:103580001092890104C08F3F11F48093890110913A
:103590008801612F772767FD7095872F972F0E94ED
:1035A0003F3017FF06C020E030E040E853E40E94BF
:1035B0009A2F27E137EB41ED58E30E94B930609331
:1035C0007C0170937D0180937E0190937F018091B7
:1035D0005106809385068091500680937C061F914A
:1035E000089581E080933E0642E040933F0683E0E9
:1035F0008093400624E02093410635E03093420654
:1036000086E08093430687E0809344061092460646
:103610008EE1809347068BEF809349068AE0809382
:103620004A0692E39093480690934C0640934B06CB
:1036300020934D0610924E0680E180934F068FE056
:10364000809350068AEF809351068AE18093520658
:1036500080E8809353068FEA809354068093550642
:103660008AE58093560683E28093570684E180932F
:1036700058061092590630935A0610925B06109223
:103680005C0610925D0610925E0684E680935F06EB
:1036900088E280936006109264069093610686E942
:1036A0008093620630936306ACE6B6E0E8E6F1E0AC
:1036B0008CE001900D928150E1F7089581E08093B4
:1036C0003E0652E050933F0683E08093400644E07C
:1036D0004093410635E03093420686E080934306EE
:1036E00087E08093440628E0209345061092460622
:1036F0009EE1909347068BEF809349068AE0809382
:103700004A0686E48093480690934C0650934B06F5
:1037100040934D0620934E0680E180934F068FE044
:10372000809350068AEF809351068AE18093520677
:1037300080E88093530688E78093540696E9909337
:1037400055068AE58093560683E28093570684E106
:10375000809358061092590630935A0610925B06D1
:1037600010925C0610925D0610925E0684E68093CD
:103770005F0688E2809360061092640682E380937D
:1037800061069093620630936306ACE6B6E0E0E72C
:10379000F1E08CE001900D928150E1F70895809165
:1037A0006702882301F51092B0021092AF021092C6
:1037B000B7031092E2038091D201882311F0809325
:1037C000AF028091D301882311F08093B0028091E1
:1037D000D401882311F08093E2038091D5018823DE
:1037E00011F08093B7038091AF0299279093F00571
:1037F0008093EF058091B00299279093F205809312
:10380000F1058091E20399279093F4058093F305E5
:103810008091B70399279093F6058093F505109250
:103820000802109209020E94E1120895CF93DF93DB
:10383000109217021092160210921902109218029A
:1038400080E090E0A0E0B0E080931A0290931B0229
:10385000A0931C02B0931D0210921102109210024C
:10386000109213021092120210921502109214027A
:103870000E94081785E090E00E94920AEC01CE01B8
:103880000E949B0A8823D9F30E940817809146065C
:1038900080FF10C080910A0190910B01875B9340DB
:1038A00038F480910A0190910B018E5E924010F4E1
:1038B0000E94B70E80917A0690917B0697FF03C015
:1038C000909581959F4F9093110280931002809163
:1038D00078069091790697FF03C0909581959F4F48
:1038E000909313028093120280918606909187062E
:1038F00097FF03C0909581959F4F909315028093F9
:10390000140280918C0690918D0697FF03C09095CC
:1039100081959F4F60E170E00E94343170931902ED
:1039200060931802809183069091840697FF03C0EC
:10393000909581959F4F60E170E00E9434317093C3
:103940001702609316026091FA057091FB058827B3
:1039500077FD8095982F0E943F3060931A027093F4
:103960001B0280931C0290931D021092340210924D
:1039700035021092360210923702109238021092DD
:10398000390210923A0210923B0210923C021092BD
:103990003D0210923E0210923F021092400210929D
:1039A000410210924202109243021092440210927D
:1039B0004502109246021092470210927B06109226
:1039C0007A06109279061092780610928706109265
:1039D00086068091060190910701A0910801B0919F
:1039E00009019093FD058093FC051092FE01109251
:1039F000FD0110924C0210924D0210924E02109254
:103A00004F02809150029091510290935302809303
:103A100052020E94D82782E390E09093E5018093C0
:103A2000E401DF91CF9108951F93182F0EC080916C
:103A30006702882361F484E690E09093E501809327
:103A4000E4018AEF90E00E947B0B115080F71F91F8
:103A500008952F923F924F925F926F927F928F9232
:103A60009F92AF92BF92CF92DF92EF92FF920F930D
:103A70001F93CF93DF93CDB7DEB728970FB6F89497
:103A8000DEBF0FBECDBF0E944714299AE0914006C9
:103A9000AE2FBB27AA0FBB1FAE5EB94F0D90BC91D6
:103AA000A02D9D0128583F4F3A83298337FF02C03C
:103AB0001A82198280916002843608F04AC080918F
:103AC0000101882331F484EF91E09093E501809324
:103AD000E40180917B0290917C02009731F0019784
:103AE00090937C0280937B0204C010926702109234
:103AF0005602289A8091760290917702815D9740D4
:103B000028F180915706482F55275A83498381E031
:103B100080935602E0913E06FF27EE0FFF1FEE5EF8
:103B2000F94F11821082E0913F06FF27EE0FFF1F31
:103B3000EE5EF94F11821082E0914106FF27EE0FF1
:103B4000FF1FEE5EF94F11821082CEC11092670204
:103B5000CBC1809160028D3808F4C6C11092560224
:103B60008091580622E3829FC001112490937C0229
:103B700080937B0269817A81693271056CF0809152
:103B80007602909177027FEF8F3F970781F1019640
:103B900090937702809376028091760290917702DB
:103BA000883C910520F089819A81889704F51092CC
:103BB000910210929202109293021092940210922B
:103BC0008D0210928E0210928F021092900210922B
:103BD000440210924502109246021092470210923F
:103BE00048021092490210924A0210924B02E98157
:103BF000FA81E93CF1050CF4D6C080916702882374
:103C000009F072C1E0914106FF27EE0FFF1FEE5E43
:103C1000F94F808191818C3491050CF4C1C0809161
:103C20007A028F5F80937A02893C08F45DC12998FB
:103C30000E94161C1092670210927A02109277026C
:103C40001092760280913E06282F3327F901EE0F5D
:103C5000FF1FEE5EF94F80819181873491059CF4BE
:103C6000E0913F06FF27EE0FFF1FEE5EF94F019038
:103C7000F081E02DF7FF03C0F095E195FF4FE734A9
:103C8000F1050CF46CC080913F06682F7727DB01AB
:103C9000AA0FBB1FAE5EB94F8D919C9111978734CF
:103CA00091053CF0F901EE0FFF1FEE5EF94F8081A8
:103CB00091818D919C918734910564F0F901EE0F0B
:103CC000FF1FEE5EF94F808191818734910514F0DA
:103CD00042E001C041E0FB01EE0FFF1FEE5EF94F35
:103CE00080819181863491055CF4F901EE0FFF1F0C
:103CF000EE5EF94F80819181873491050CF043E0AD
:103D0000FB01EE0FFF1FEE5EF94F808191818A5B10
:103D10009F4F5CF4F901EE0FFF1FEE5EF94F8081BB
:103D20009181873491050CF044E0660F771F6E5E39
:103D3000794FFB01808191818A5B9F4F5CF4220F58
:103D4000331F2E5E394FF9018081918186349105B0
:103D50000CF445E0A2E0B0E0042E0E948C310E94F9
:103D600007024AE36EE376E00E9426020E94070201
:103D70000E94141D8091460680FFB6C080910A0102
:103D800090910B01875B934040F480910A019091E0
:103D90000B018E5E924008F0A7C00E94B70EA4C02F
:103DA00010927A02A1C049815A81433251050CF028
:103DB0009BC080914106482F5527FA01EE0FFF1F47
:103DC000EE5EF94F80819181855B9F4F0CF06DC055
:103DD000809179028F5F80937902893C08F467C0F3
:103DE00088EC8093790281E090E090937702809351
:103DF000760281E0809367021092890210928A0213
:103E000010928B0210928C02109244021092450282
:103E100010924602109247021092480210924902F4
:103E200010924A0210924B02109234021092350204
:103E3000109236021092370210923C0210923D020C
:103E400010923E0210923F02809120029091210236
:103E5000A0912202B09123028093380290933902FC
:103E6000A0933A02B0933B028091280290912902DC
:103E7000A0912A02B0912B028093400290934102BC
:103E8000A0934202B09343021092910210929202C8
:103E9000109293021092940210928D0210928E0250
:103EA00010928F021092900202C010927902440F79
:103EB000551F4E5E594FFA01808191818C349105D6
:103EC0008CF0809178028F5F80937802893C60F05B
:103ED0001092670288EC8093780210927702109219
:103EE000760202C01092780280916701815080931F
:103EF0006701809167018F3F29F0809156028823E6
:103F000009F412C10E94A418E0913E06FF27EE0FAB
:103F1000FF1FDF01AE5EB94F8D919C9160914D0600
:103F20007727E85DF94F2081318140914E06552772
:103F3000FC01E69FC001E79F900DF69F900D1124B4
:103F4000F901E49F9001E59F300DF49F300D11249D
:103F5000820F931F9093620280936102E0913F066B
:103F6000FF27EE0FFF1FDF01AE5EB94F8D919C91D1
:103F7000E85DF94F20813181FC01E69FC001E79F98
:103F8000900DF69F900D1124B901649F9001659FDB
:103F9000300D749F300D1124820F931F9093640293
:103FA00080936302E0914106FF27EE0FFF1FEE5E54
:103FB000F94F80819181909581959F4F90936602F2
:103FC0008093650210918501612F772767FD7095B9
:103FD000872F972F0E943F3017FF06C020E030E068
:103FE00040E853E40E949A2F20E030E040E251E4A0
:103FF0000E949A2F20E030E040E85BE30E94B93055
:104000005B016C01609388067093890680938A0631
:1040100090938B0610918601612F772767FD70952D
:10402000872F972F0E943F3017FF06C020E030E017
:1040300040E853E40E949A2F20E030EE4BE257E430
:104040000E94DC2F60937F06709380068093810628
:10405000909382068091460682FF0CC080E090E03B
:10406000A0E0B0E080937F0690938006A093810645
:10407000B093820620E030E040E050E0C601B50198
:104080000E944930882364F480E090E0A0E0B0E032
:104090008093880690938906A0938A06B0938B0636
:1040A00020E030E040E050E060917F0670918006B3
:1040B00080918106909182060E944930882364F4A1
:1040C00080E090E0A0E0B0E080937F0690938006CF
:1040D000A0938106B093820680915602882321F135
:1040E00010926602109265021092620210926102B2
:1040F00010926402109263028DEC9CECACECBDE378
:104100008093880690938906A0938A06B0938B06C5
:104110008AE097EDA3EABBE380937F069093800645
:10412000A0938106B09382068091FF0190910002D6
:104130008D54914008F4BCC0209124023091250296
:1041400040912602509127028091200290912102F5
:10415000A0912202B0912302B901681B790B7093E0
:10416000800260937F0220912C0230912D024091B9
:104170002E0250912F028091280290912902A09145
:104180002A02B0912B02281B390B30937E02209318
:104190007D02109200021092FF01673A710534F01F
:1041A0008091100290911102019608C06A557F4FCC
:1041B0004CF480911002909111020197909311029A
:1041C00080931002273A310534F0809112029091C9
:1041D0001302019608C02A553F4F4CF480911202F9
:1041E0009091130201979093130280931202809191
:1041F000480290914902A0914A02B0914B02873A3D
:104200009105A105B1054CF0809114029091150221
:104210000197909315028093140280914802909127
:104220004902A0914A02B0914B028A559F4FAF4F6D
:10423000BF4F4CF480911402909115020196909317
:1042400015028093140210927A00809120029091BE
:104250002102A0912202B091230280933802909310
:104260003902A0933A02B0933B02809128029091C8
:104270002902A0912A02B0912B02809340029093D0
:104280004102A0934202B093430280913002909188
:104290003102A0913202B091330280934802909390
:1042A0004902A0934A02B0934B028FEE80937A00AA
:1042B000609120027091210280912202909123024C
:1042C00020915206622E772488249924E090830658
:1042D000F0908406A40193010E9469310027F7FC45
:1042E0000095102F2E193F09400B510BCA01B9013F
:1042F00020E130E040E050E00E94693159016A015C
:10430000209385023093860240938702509388025F
:10431000609128027091290280912A0290912B02CB
:10432000E0908C06F0908D06A40193010E94693103
:104330000027F7FC0095102F2E193F09400B510B59
:10434000CA01B90120E130E040E050E00E9469314B
:10435000209381023093820240938302509384021F
:10436000F5EFAF16F1E0BF06F0E0CF06F0E0DF06B4
:104370002CF084EF91E0A0E0B0E00DC06CE0A61658
:104380006EEFB6066FEFC6066FEFD60664F48CE0EC
:104390009EEFAFEFBFEF8093850290938602A093CC
:1043A0008702B0938802253F71E0370770E0470726
:1043B00070E057072CF084EF91E0A0E0B0E009C076
:1043C0002C503E4F4F4F5F4F64F48CE09EEFAFEFA9
:1043D000BFEF8093810290938202A0938302B093F7
:1043E000840210927A008091340290913502A0915B
:1043F0003602B091370220918502309186024091B9
:10440000870250918802821B930BA40BB50B8093FB
:10441000340290933502A0933602B0933702809114
:104420003C0290913D02A0913E02B0913F0220914A
:104430008102309182024091830250918402821B5A
:10444000930BA40BB50B80933C0290933D02A09379
:104450003E02B0933F0280916502909166029C01FA
:10446000442737FD4095542F2B833C834D835E8337
:104470002093890230938A0240938B0250938C02DE
:1044800097FF03C0909581959F4F84973CF0809152
:10449000460684FD03C081E080937202A09044022E
:1044A000B0904502C0904602D09047028B819C811B
:1044B00097FF03C0909581959F4F7C010027F7FCE3
:1044C0000095102F20914F063327442755276B81E5
:1044D0007C818D819E810E9401319B01AC01C801CC
:1044E000B7010E94013120E031E040E050E00E943D
:1044F0006931442737FD4095542FA21AB30AC40AE4
:10450000D50AA0924402B0924502C0924602D092CF
:1045100047028091440290914502A0914602B091D9
:10452000470281539547A040B04064F080E395E78F
:10453000A0E0B0E08093440290934502A09346022D
:10454000B09347028091440290914502A0914602A7
:10455000B0914702805D9A48AF4FBF4F64F480ED41
:104560009AE8AFEFBFEF8093440290934502A09387
:104570004602B09347028FEE80937A0080915002FA
:1045800090915102892B09F4A1C08091460683FFC6
:104590009DC0609120027091210280912202909131
:1045A000230220E032E040E050E00E9469318901BE
:1045B00037FF03C0109501951F4F6091280270913D
:1045C000290280912A0290912B0220E032E040E003
:1045D00050E00E946931B90137FF03C070956195C1
:1045E0007F4F601771070CF4B80169317105A4F4AD
:1045F00080917202882381F0809170029091710203
:10460000892B51F480915002909151029093530262
:104610008093520210927202209184013327629F8C
:10462000C001639F900D729F900D112460E470E0B3
:104630000E943431A901461B570B141615060CF0C5
:104640003FC010927A0020917002309171022115C2
:10465000310561F500914402109145022091460216
:10466000309147028091540290915502FC01E49FE1
:10467000C001E59F900DF49F900D112460E270E061
:104680000E943431882777FD8095982F060F171FD9
:10469000281F391F009344021093450220934602BD
:1046A000309347028FEE80937A0010C08FEE809394
:1046B0007A0021503040309371022093700206C07E
:1046C00084EF91E090937102809370028091D605FF
:1046D0008F5F8093D605809173028150809373021F
:1046E0008F3F09F063C081E38093730260912002E1
:1046F000709121028091220290912302A4019301E2
:104700000E9469313093D8052093D7056091280223
:104710007091290280912A0290912B02A4019301A9
:104720000E9469313093DA052093D9058091830680
:10473000909184069093DC058093DB0580918C0634
:1047400090918D069093DE058093DD05809186061D
:10475000909187069093E0058093DF058091680231
:10476000909169029093E2058093E10560914C027B
:1047700070914D0280914E0290914F0220E032E004
:1047800040E050E00E9469313093E4052093E30556
:1047900029813A813093E6052093E5058091500206
:1047A000909151029093E8058093E7056091200273
:1047B00070912102809122029091230220907F0625
:1047C000309080064090810650908206E0907A06F4
:1047D000F0907B06609088067090890680908A062B
:1047E00090908B060E943F30A20191010E94B93047
:1047F0005B016C010027F7FC0095102FC801B70181
:104800000E943F30A40193010E94B9309B01AC018A
:10481000C601B5010E949A2F0E94223070937B0638
:1048200060937A06609128027091290280912A0291
:1048300090912B02E0907806F09079060E943F302C
:10484000A20191010E94B9305B016C010027F7FCC5
:104850000095102FC801B7010E943F30A4019301B9
:104860000E94B9309B01AC01C601B5010E949A2F8C
:104870000E942230709379066093780660918606D4
:1048800070918706A0903002B0903102C090320241
:10489000D0903302882777FD8095982F0E943F3073
:1048A0007B018C0120E030E040E05FE3C401B30114
:1048B0000E94B9309B01AC01C801B7010E94B93018
:1048C0007B018C01C601B5010E943F30A20191011C
:1048D0000E94B9309B01AC01C801B7010E949A2F18
:1048E0000E942230709387066093860680917A0634
:1048F00090917B068150984034F080E098E090934E
:104900007B0680937A0680917A0690917B06805090
:10491000984F34F480E098EF90937B0680937A066A
:1049200080917806909179068150984034F080E02B
:1049300098E090937906809378068091780690911C
:1049400079068050984F34F480E098EF9093790680
:1049500080937806809186069091870681509840D2
:1049600034F080E098E090938706809386068091EB
:104970008606909187068050984F34F480E098EF37
:10498000909387068093860680914606992780FF3C
:10499000CFC02091810181FF0EC02233B0F48091FD
:1049A000680290916902449790936B0280936A0227
:1049B000109257020DC080914B06289FC001112410
:1049C000449790936B0280936A0281E08093570230
:1049D00080915602882321F010926B0210926A0295
:1049E000209168023091690240916A0250916B02F5
:1049F000421753070CF09CC080915702882309F49A
:104A000097C0241B350B809182019927AC01249F0C
:104A1000C001259F900D349F900D112460E170E03E
:104A20000E94343109811A81061B170B2091FD0168
:104A30003091FE01809180019927BC01269FC00121
:104A4000279F900D369F900D112468E070E00E9422
:104A50003431061B170B60914C0270914D0280910E
:104A60004E0290914F0220E032E040E050E00E9480
:104A70006931CA01B90120918301332744275527A1
:104A80000E94013120E230E040E050E00E946931B4
:104A9000A9012E5C3F4F14F44EEC5FEF209174029D
:104AA000309175028FE090E0FC012E9FC0012F9F96
:104AB000900D3E9F900D11249A014333510514F03F
:104AC00022E330E0021B130B800F911F60E170E0C6
:104AD0000E9434317093750260937402809147068E
:104AE0009927681779078CF429813A8128173907A3
:104AF0002CF0909375028093740207C049815A810B
:104B000050937502409374020DC08091740290918D
:104B1000750269817A816817790724F470937502A8
:104B20006093740280917402909175029A838983D4
:104B3000C0908606D0908706EB81FC81CE1ADF0AF2
:104B4000F5E6CF16D10424F064E6C62ED12C09C0B8
:104B50002CE9C2162FEFD20624F45CE9C52E5FEFD4
:104B6000D52E409078015090790160907A01709034
:104B70007B0160917A0670917B06209161023091F1
:104B800062024091950250919602241B350B621BE4
:104B9000730B882777FD8095982F0E943F309B01EB
:104BA000AC01C301B2010E94B9300E94223070935F
:104BB000B6036093B5038091B5039091B6038C0161
:104BC000222717FD2095322F809191029091920219
:104BD000A0919302B0919402080F191F2A1F3B1F46
:104BE00000939102109392022093930230939402C7
:104BF0001016110612061306ACF4C80117FF03C005
:104C0000909581959F4F60E071E00E9434316F5F15
:104C10007F4F882777FD8095982F061B170B280B51
:104C2000390B14C0C80117FF03C0909581959F4FA1
:104C300060E071E00E9434316F5F7F4F882777FD1D
:104C40008095982F060F171F281F391F0093910278
:104C500010939202209393023093940280919102D8
:104C600090919202A0919302B091940281383EE318
:104C7000930730E0A30730E0B3072CF080E89EE311
:104C8000A0E0B0E009C08058914CAF4FBF4F64F432
:104C900080E891ECAFEFBFEF809391029093920286
:104CA000A0939302B09394026091B5037091B60300
:104CB00080907C0190907D01A0907E01B0907F015A
:104CC000882777FD8095982F0E943F307B018C01CB
:104CD000609191027091920280919302909194025E
:104CE0000E943F309B01AC01C501B4010E94B93064
:104CF0009B01AC01C801B7010E949A2F0E9422308B
:104D00009601260F371F89819A81280F391F222487
:104D10000A9714F441E0242E37FD02C0222019F036
:104D200040E050E008C080918506482F55272417A1
:104D300035070CF4A90180917C06E82FFF27F8873E
:104D4000EF839F01E417F5070CF49A012093AF025B
:104D500029813A81261B370BB9016C0D7D1D77FD2A
:104D600002C0222019F080E090E007C08091850603
:104D70009927681779070CF4CB012F8138852817FC
:104D800039070CF49C012093B00260917806709171
:104D9000790620916302309164024091970250910C
:104DA0009802241B350B621B730B882777FD8095B7
:104DB000982F0E943F309B01AC01C301B2010E94B9
:104DC000B9300E9422307093AE026093AD028091A0
:104DD000AD029091AE028C01222717FD2095322F53
:104DE00080918D0290918E02A0918F02B0919002DD
:104DF000080F191F2A1F3B1F00938D0210938E026C
:104E000020938F023093900210161106120613069B
:104E1000ACF4C80117FF03C0909581959F4F60E0E7
:104E200071E00E9434316F5F7F4F882777FD809556
:104E3000982F061B170B280B390B14C0C80117FF3E
:104E400003C0909581959F4F60E071E00E943431DE
:104E50006F5F7F4F882777FD8095982F060F171F6C
:104E6000281F391F00938D0210938E0220938F020A
:104E70003093900280918D0290918E02A0918F02CA
:104E8000B091900281383EE3930730E0A30730E011
:104E9000B3072CF080E89EE3A0E0B0E009C08058A2
:104EA000914CAF4FBF4F64F480E891ECAFEFBFEF90
:104EB00080938D0290938E02A0938F02B093900204
:104EC0006091AD027091AE02882777FD8095982F92
:104ED0000E943F307B018C0160918D0270918E02A7
:104EE00080918F02909190020E943F309B01AC0113
:104EF000C501B4010E94B9309B01AC01C801B701E2
:104F00000E949A2F0E94223029813A81260F371F52
:104F10002C193D0937FD02C0222019F040E050E075
:104F200008C080918506482F5527241735070CF4B3
:104F3000A9012F813885241735070CF49A01209395
:104F4000E20389819A81861B970BBC016C197D094C
:104F500077FD02C0222019F020E030E008C08091E7
:104F60008506282F3327621773070CF49B018F8166
:104F70009885821793070CF4C9018093B70328968C
:104F80000FB6F894DEBF0FBECDBFDF91CF911F915A
:104F90000F91FF90EF90DF90CF90BF90AF909F90D8
:104FA0008F907F906F905F904F903F902F900895DB
:104FB00080919D0290919E02A0919F02B091A002CB
:104FC0008093A5029093A602A093A702B093A80293
:104FD0008091A1029091A202A091A302B091A4029B
:104FE0008093A9029093AA02A093AB02B093AC0263
:104FF00010929602109295021092980210929702C7
:105000000895CF92DF92EF92FF921F93CF93DF9399
:10501000CDB7DEB72A970FB6F894DEBF0FBECDBF6F
:105020009C01162F40E0E62EFF246E010894C11C5F
:10503000D11C14C0F701E41BF109EC0DFD1D3197E3
:10504000C9016AE070E00E942031805D8083C9015F
:105050006AE070E00E9420319B014F5F411751F7D9
:1050600040E050E0212F332721503040BE016F5FD8
:105070007F4FA0E209C04F5F5F4FFB01E80FF91FB0
:105080008081803331F4A083842F9927821793077E
:1050900094F390919B0620E0AE014F5F5F4F0BC0F1
:1050A000E92FE20FFF27DA01A20FB11D8C91E45125
:1050B000FC4F80832F5F211799F7910F90939B06E8
:1050C0002A960FB6F894DEBF0FBECDBFDF91CF9109
:1050D0001F91FF90EF90DF90CF900895CF92DF92D5
:1050E000EF92FF920F931F93CF93DF93CDB7DEB76D
:1050F0002A970FB6F894DEBF0FBECDBF9C01F62EE7
:1051000097FD02C0EE2405C0309521953F4F81E008
:10511000E82E40E00F2D11276E010894C11CD11C10
:1051200014C0F801E41BF109EC0DFD1D3197C90114
:105130006AE070E00E943431805D8083C9016AE0DA
:1051400070E00E9434319B014F5F4F1551F712C040
:105150002F5F3F4FFE013196E40FF51F80818033B2
:1051600019F480E2808308C0EE2071F031978DE25F
:1051700080830AC020E030E0422F55278F2D9927E9
:1051800001974817590724F390919B0620E0AE0140
:105190004F5F5F4F0BC0E92FE20FFF27DA01A20F2D
:1051A000B11D8C91E451FC4F80832F5F2F1599F72F
:1051B0009F0D90939B062A960FB6F894DEBF0FBE04
:1051C000CDBFDF91CF911F910F91FF90EF90DF90B6
:1051D000CF900895DC010BC080919B06E82FFF273C
:1051E000E451FC4F90838F5F80939B0611969C91B6
:1051F000992391F708950F931F9310929B06809126
:10520000BE0361E099270E9401288AE891E00E948C
:10521000EA2867E080918E0690918F060E946E28A2
:1052200067E080919706909198060E946E280CE89E
:1052300011E0C8010E94EA2867E0809193069091EE
:1052400094060E946E2867E080919C0690919D06CE
:105250000E946E28C8010E94EA2867E080919702A8
:10526000909198020E946E2867E08091950290913B
:1052700096020E946E2880E991E00E94EA2867E089
:1052800080916302909164020E946E2867E0809191
:105290006102909162020E946E2884E991E00E946E
:1052A000EA28109200018091EC038093C6001F91C0
:1052B0000F9108952F923F924F925F926F927F923B
:1052C0008F929F92AF92BF92CF92DF92EF92FF9216
:1052D0000F931F93CF93DF93CDB7DEB728970FB609
:1052E000F894DEBF0FBECDBF80915C0290915D024D
:1052F0008E37910574F18091BE03882309F446C06E
:1053000080919206882309F041C080919D0290917E
:105310009E02A0919F02B091A0028093A50290935B
:10532000A602A093A702B093A8028091A102909137
:10533000A202A091A302B091A4028093A90290932B
:10534000AA02A093AB02B093AC0281E080939206D4
:105350001DC08D379105D4F41092A5021092A602BB
:105360001092A7021092A8021092A9021092AA020B
:105370001092AB021092AC0210929602109295021B
:105380001092980210929702109292068091B102A8
:10539000882309F4FEC01092B10281EB92E00E94D2
:1053A000472B8091B903882309F4F1C01092B90307
:1053B0008091BE03882331F088B194E0892788B9B1
:1053C000439805C088B198E0892788B942988091B0
:1053D000BF039091C003A091C103B091C203809319
:1053E0009D0290939E02A0939F02B093A0022091F1
:1053F000C3033091C4034091C5035091C603209369
:10540000A1023093A2024093A3025093A402E09021
:10541000A502F090A6020091A7021091A802E81A36
:10542000F90A0A0B1B0BE0929706F092980600937C
:10543000990610939A062090A9023090AA024090F3
:10544000AB025090AC02221A330A440A550A209249
:105450008E0630928F06409290065092910680916F
:10546000CF039091D003A091D103B091D203222712
:105470003327A901281B390B4A0B5B0B2D833E8375
:105480004F83588720939C0630939D0640939E0639
:1054900050939F068091D3039091D403A091D5039C
:1054A000B091D60322273327A901281B390B4A0BB9
:1054B0005B0B29833A834B835C8320939306309361
:1054C0009406409395065093960680919206882301
:1054D00009F455C0A0905802B0905902CC24B7FCF2
:1054E000C094DC2C60905A0270905B02882477FC98
:1054F0008094982CC801B701A60195010E94013142
:1055000020E032E040E050E00E94693179018A01F8
:105510006D817E818F819885A40193010E94013164
:1055200020E830E040E050E00E946931E20EF31ED6
:10553000F0929602E0929502C201B101A601950196
:105540000E94013120E032E040E050E00E946931E9
:1055500079018A0169817A818B819C81A4019301FF
:105560000E94013120E830E040E050E00E946931C3
:10557000E20EF31EF0929802E092970208C0109299
:1055800096021092950210929802109297020E9431
:10559000FB2828960FB6F894DEBF0FBECDBFDF9173
:1055A000CF911F910F91FF90EF90DF90CF90BF9020
:1055B000AF909F908F907F906F905F904F903F90B3
:1055C0002F900895CF93DF939091A006E92FFF27A6
:1055D000EF55F94F8083892F8F5F8093A00681302C
:1055E00031F48091A106853B09F44EC04BC0823056
:1055F00031F48091A206823609F446C043C0863059
:1056000008F442C04091A506A82FBB27842F9927F4
:105610000896A817B907C4F190E050E0C3EAD6E0B5
:10562000FD0132979F012F55394F03C08991980F83
:10563000590FC217D307D1F7EF55F94F808198174B
:1056400009F5A056B94F8C915817E1F48091A30643
:105650008093B2028091A4068093B3024093B40277
:1056600020E030E0A7EAB6E0E5EBF2E0552704C021
:105670008D9181932F5F3F4F24173507C8F381E049
:105680008093B1021092A006DF91CF910895CF933D
:10569000DF93EC012981213009F080C08A818630B6
:1056A00009F07CC08C819D81AE81BF818093BA035B
:1056B0009093BB03A093BC03B093BD038E858093EE
:1056C000BE03FE01349684859585A685B7858093B3
:1056D000BF039093C003A093C103B093C20380891A
:1056E0009189A289B3898093C3039093C403A09343
:1056F000C503B093C60384899589A689B789809329
:10570000C7039093C803A093C903B093CA03808DC5
:10571000918DA28DB38D8093CB039093CC03A093F6
:10572000CD03B093CE03848D958DA68DB78D8093D8
:10573000CF039093D003A093D103B093D20380A161
:1057400091A1A2A1B3A18093D3039093D403A0937A
:10575000D503B093D60384A195A1A6A1B7A1809348
:10576000D7039093D803A093D903B093DA0380A50D
:1057700091A5A2A5B3A58093DB039093DC03A0932E
:10578000DD03B093DE0388A999279093E00380930B
:10579000DF038BA98093E1032093B903DF91CF91BD
:1057A00008950F931F93CF93DF93EC01898199277D
:1057B0009F938F9387E991E09F938F930E94322C60
:1057C0008A8199279F938F9384EA91E09F938F9387
:1057D0000E94322C8B8199279F938F938EEA91E0C0
:1057E0009F938F930E94322C89EB91E09F938F932C
:1057F0000E94322C00E010E08DB79EB70E960FB6D7
:10580000F8949EBF0FBE8DBF11C0FE01E90FF11DC0
:10581000848199279F938F9380EC91E09F938F933E
:105820000E94322C0F900F900F900F90902F0F5FCF
:105830001F4F8B81981748F386EC91E00E94522C01
:10584000DF91CF911F910F910895FC01415050407D
:1058500030F001900616D1F73197CF0108958827CF
:1058600099270895CF93DF93CDB7DEB722970FB670
:10587000F894DEBF0FBECDBFFE01379661917191E6
:10588000FA83E983AF018091A3079091A4070E9456
:10589000852C22960FB6F894DEBF0FBECDBFDF91E8
:1058A000CF9108950F931F93CF93DF938C01E091D5
:1058B000A307F091A407838181FF1FC0C0E0D0E05F
:1058C0000AC0FD0120853185BD01F9010995892BAB
:1058D00011F0CFEFDFEFF80181918F01A091A307C5
:1058E000B091A407882369F7FD0120853185BD01AA
:1058F0008AE0F9010995892B11F0CFEFDFEFCE0196
:10590000DF91CF911F910F9108952F923F924F9267
:105910005F926F927F928F929F92AF92BF92CF923F
:10592000DF92EF92FF920F931F93CF93DF93CDB748
:10593000DEB764970FB6F894DEBF0FBECDBFCC24A0
:10594000DD2476011C017C8B6B8B2A01FC01178204
:105950001682838181FD03C08FEF9FEF85C2AA2449
:10596000BB246FC2A0FE54C28A8980538A30E8F4F7
:10597000FA89F03341F42D85222329F4A3FC03C0D6
:1059800080E091E06FC08AE0ED85E802C00111245B
:10599000FA89F80FF053FD87F7FF02C02FE72D8734
:1059A000A3FC49C23D853E8746C2C5018870907000
:1059B000A3FE05C0ED85EE2311F4F1E0FD872A89F1
:1059C000283624F525360CF05BC0233509F480C059
:1059D00024358CF42B32C1F12C3234F42032C1F155
:1059E000233209F00AC23CC03A893D32B1F13E325D
:1059F00009F003C23AC08A89833609F449C0843663
:105A00000CF081C0883509F0F8C11BC0EA89E03785
:105A100009F4A3C0E13744F4EC3669F1EF3671F0D4
:105A2000E93609F0EAC16FC0FA89F53709F49DC07B
:105A3000F83739F0F33709F0E0C134C028E0298B9A
:105A400094C030E1398B91C080E190E0A82AB92A56
:105A5000E0E2F0E0AE2ABF2AEEC120E830E00DC05F
:105A600080E490E0A82AB92AE6C1E8E0F0E0AE2A96
:105A7000BF2A1D86E0C124E030E0A22AB32ADBC1A0
:105A80003FE3C32E3E8531503E8783E68A8B41C17A
:105A9000F201C080FE85F150FE8722E030E0420E28
:105AA000531E37C1F201C080D180892B49F0FD859A
:105AB0006F2F772767FD7095C6010E94612F19C06F
:105AC000F60101900020E9F73197EC19E98B12C03B
:105AD000F201C080D180892B49F0FD856F2F772797
:105AE00067FD7095C6010E94562F03C0C6010E9433
:105AF0004D2F898B22E030E0420E531E3E8589896E
:105B0000381B3E8706C1A2FE08C0F2018081918148
:105B1000A281B38124E030E009C0F201808191814B
:105B2000AA2797FDA095BA2F22E030E0420E531E1F
:105B30006C017D01B7FF0CC082E090E0A82AB92A71
:105B4000F094E094D094C094C11CD11CE11CF11CD1
:105B5000EFEBFFEFAE22BF2221C020E430E0A22A0B
:105B6000B32A38E73A8B80E1898BA2FE08C0F201A4
:105B700080819181A281B38124E030E007C0F201ED
:105B800080819181AA27BB2722E030E0420E531E7C
:105B90006C017D018FEC9FEFA822B922870176016D
:105BA000FE013196F88BEF87F9896F2E77248824D0
:105BB0009924C801B701A40193010E9447316A30BA
:105BC00024F02A89620F615201C0605DEF85F88977
:105BD0006193F88BEF87C801B701A40193010E947C
:105BE000473179018A01211531054105510509F730
:105BF000CC24DD247601CE010196CF84C81AC501DC
:105C000082739070892B19F0FE85F150FE87A6FEF5
:105C100009C02989203111F482E001C081E03E856C
:105C2000381B3E8728E0822E912C8A209B20A3FEE1
:105C300018C08D85282F332727FD30958C2D992767
:105C4000821793073CF0E7EFFFEFAE22BF228824D4
:105C5000992407C0FD85FC19FD872E852F1B2E87F3
:105C600003C03E853C193E87C50180789170892B21
:105C700069F48E8506C0B10180E290E00E946C2F2D
:105C8000812F182F11501816B4F31E87A1FE04C0DF
:105C9000B1018DE290E00BC0A4FE04C0B1018BE223
:105CA00090E005C0A5FE05C0B10180E290E00E9431
:105CB0006C2FA6FE10C0B10180E390E00E946C2F13
:105CC0008989803141F4B101EA898E2F992787FDB6
:105CD00090950E946C2FB0FE0DC08E8506C0B1015C
:105CE00080E390E00E946C2F812F182F115018161E
:105CF000B4F31E87892869F02D8506C0B10180E3C1
:105D000090E00E946C2F212F122F11501216B4F325
:105D10001D8790E8692E712C6A207B20A7FC0DC09E
:105D20008E8506C0B10180E290E00E946C2F812F29
:105D3000182F11501816B4F31E87FA89F33641F460
:105D4000B1018C2D992787FD90950E946C2F45C03D
:105D50002A892337B1F446015601198909C0F50192
:105D600081915F01B101992787FD90950E946C2F69
:105D70001150A8F76401F989CF0ED11C2FEF298BA0
:105D80002CC03A89333519F00F8518891FC0460198
:105D90008601B98808C0F8018491B10199270E9451
:105DA0006C2F0F5F1F4FBA94FFEFBF16A1F764016E
:105DB0002989C20ED11CF98B10C0F80182918F0184
:105DC000B101992787FD90950E946C2FCE01019615
:105DD0000817190791F7188B0F876728B1F08E8580
:105DE00006C0B10180E290E00E946C2F812F182F35
:105DF00011501816B4F31E8708C0B101FA898F2F0D
:105E0000992787FD90950E946C2FAA24BB2413C06C
:105E10002A89253241F43AE0398B1E861D8681E0BD
:105E2000A82EB12C08C0B101EA898E2F992787FDD1
:105E300090950E946C2F2B893C892F5F3F4F3C8BA4
:105E40002B8BF101838183FF04C0EB89FC89F491E2
:105E500003C0EB89FC89F081FA8B2A89222309F09F
:105E600081CDF1018681978164960FB6F894DEBFEB
:105E70000FBECDBFDF91CF911F910F91FF90EF909B
:105E8000DF90CF90BF90AF909F908F907F906F905A
:105E90005F904F903F902F900895FC010590002057
:105EA000E9F7809590958E0F9F1F0895FC0105904E
:105EB000615070400110D8F7809590958E0F9F1F0C
:105EC0000895FC016150704001900110D8F7809551
:105ED00090958E0F9F1F08950F931F93CF93DF937D
:105EE0008C01EB018B81992781FF1BC082FF0DC0C4
:105EF0002E813F818C819D812817390764F4E881C8
:105F0000F9810193F983E88306C0E885F985802F3C
:105F10000995892B31F48E819F8101969F838E8311
:105F200002C00FEF1FEFC801DF91CF911F910F91BA
:105F300008955058192EEFD001D0D2C0BA17620779
:105F4000730784079507B1F188F40EF410940B2EB3
:105F5000BA2FA02D062E622F202D072E732F302D45
:105F6000082E842F402D092E952F502DFF275523C5
:105F7000B9F0591B49F0573E98F04695379527954B
:105F8000A795F0405395C9F776F0BA0F621F731FBB
:105F9000841F30F4879577956795B795F040939572
:105FA00017FA0F2E0895BF1BBB27BA0B620B730B9A
:105FB000840BF6CFDEF6DBC0AED001D091C0552306
:105FC00059F0992369F09F575F57951B33F442F4BA
:105FD000903811F4915805C09BC091589F3F09F427
:105FE000C6C0BB27112462177307840730F4660FFD
:105FF000771F881FBB1F915098F311D00F920FD0BD
:106000000F920DD0A0E82617370748071B0609F0A6
:10601000A048BA2F602D7F918F9100240895A0E8A9
:106020000024621773078407B10528F0621B730B05
:10603000840BB1090A2A660F771F881FBB1FA6951C
:1060400081F7089597FB73D09F3738F0FEE9F91B6D
:10605000982F872F762F6B2F05C086C09695879532
:1060600077956795F150D0F73EF4909580957095AF
:1060700061957F4F8F4F9F4F0895E89403C097FB22
:106080000EF4F3DFB62F672F782F892F9EE90024B7
:1060900027C00ED05EF004C00BD026F001C008D09F
:1060A00019F020F48FEF089580E0089581E00895BD
:1060B00097FB092E052600F8689430D0E89407FC79
:1060C00007C0621773078407950721F008F400944E
:1060D0000794989408959A95BB0F661F771F881FA1
:1060E00011249923A1F08823B2F79F3F59F0BB0FE9
:1060F00048F421F4002011F460FF04C06F5F7F4F6B
:106100008F4F9F4F881F9795879597F908952CC0BB
:106110009FEF80EC0895052E092607FA440F551FBE
:106120005F3F79F0AA27A51708F051E04795880F3F
:10613000991F9F3F31F0BB27B91708F091E0879571
:1061400008959F919F911124E3CF97FB880F991F8A
:106150009F3F31F0BB27B91708F091E0879508956C
:106160009F919F911124D4CF66277727882799275D
:106170000895D1DF01D0B4CF992339F0552329F008
:106180009F575F57950F13F49AF1F1CF91589F3FA6
:10619000E1F3629FA12D0F92BB27639FA00DB11D5C
:1061A000EE27729FA00DB11DEE1FAF93AA27649F2B
:1061B000B00DE11D739FB00DE11DAA1F6627829FE0
:1061C000B00DE11DA61F5527749FE00DA11D551FA1
:1061D000839FE00DA11D561F849FA00D511D852F8B
:1061E0007A2F6E2F1F900F9088231AF4939539F40D
:1061F0008FCF000C111CBB1F661F771F881F012843
:106200000895629FD001739FF001829FE00DF11D00
:10621000649FE00DF11D929FF00D839FF00D749F20
:10622000F00D659FF00D9927729FB00DE11DF91FCC
:10623000639FB00DE11DF91FBD01CF011124089529
:10624000AA1BBB1B51E107C0AA1FBB1FA617B7079C
:1062500010F0A61BB70B881F991F5A95A9F78095B8
:106260009095BC01CD01089597FB092E07260AD011
:1062700077FD04D0E5DF06D000201AF47095619513
:106280007F4F0895F6F7909581959F4F0895A1E26D
:106290001A2EAA1BBB1BFD010DC0AA1FBB1FEE1FA0
:1062A000FF1FA217B307E407F50720F0A21BB30BEB
:1062B000E40BF50B661F771F881F991F1A9469F767
:1062C00060957095809590959B01AC01BD01CF01C3
:1062D000089597FB092E05260ED057FD04D0D7DF71
:1062E0000AD0001C38F450954095309521953F4FC9
:1062F0004F4F5F4F0895F6F7909580957095619593
:106300007F4F8F4F9F4F0895F999FECFB2BDA1BD2A
:10631000F89A119600B40895F999FECFB2BDA1BDC7
:1063200000BC11960FB6F894FA9AF99A0FBE089528
:1063300001640A016400007D0000FF030102030400
:1063400005060708090A48616C6C6F2057656C7474
:10635000000000000000000000000000000000003D
:10636000000000000000000000000000000000002D
:10637000000000000000000000000000000000001D
:10638000000000000000000000000000000000000D
:106390000000000000000B014B616D6572610000A0
:1063A0004E6F726D616C00000000803F17B7D138EE
:1063B00030FB103A403296020A642000207C200014
:1063C000202320000D0A004D7367436C6173733DF9
:1063D000257520004D736749643D257520004C6587
:1063E0006E6774683D25752000446174613D20002E
:0863F0002530325820000D0099
:00000001FF
/branches/martosi/GPS.c
0,0 → 1,290
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: GPS.c
// Description:
//
// Author: Martin Steppuhn
// History: 15.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
 
/**** Includes ****************************************************************/
 
#include "std_c.h"
#include "main.h"
#include "fc.h"
#include "gps_ubx.h"
 
/**** Preprocessing directives (#define) **************************************/
 
/**** Type definitions (typedef) **********************************************/
 
/**** Global constants ********************************************************/
 
/**** Global variables ********************************************************/
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
 
/**** Local constants ********************************************************/
 
/**** Local variables *********************************************************/
 
signed int test_nick = 0;
signed int test_roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsAktuell_Z = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
long gps_dx;
long gps_dy;
long gps_dz;
long gps_vx;
long gps_vy;
long gps_vz;
bool gps_hold;
uint8 print_pos;
 
/**** Local function prototypes ***********************************************/
 
void print_uint16(uint16 value,uint8 width);
void print_int16(int16 value,uint8 width);
void print_string(char *s);
 
//------------------------------------------------------------------------------
// Name: GPS_Neutral
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
GPS_Nick = 0;
GPS_Roll = 0;
 
// LED_GPS_DATA_OFF;
//LED_GPS_FIX_OFF;
//LED_GPS_DATA_ON;
}
 
//------------------------------------------------------------------------------
// Name: gps_trace
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void gps_trace(void)
{
print_pos = 0;
 
print_uint16(nav_sol.gpsfix,1);
print_string(" ");
print_int16(gps_dy,7);
print_int16(gps_dx,7);
 
print_string(" | ");
 
print_int16(gps_vy,7);
print_int16(gps_vx,7);
 
print_string(" | ");
 
print_int16(GPS_Roll,7);
print_int16(GPS_Nick,7);
 
 
print_string(" # ");
 
print_int16(StickRoll,7);
print_int16(StickNick,7);
 
 
print_string("\r\n");
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0]; // Start
}
 
//------------------------------------------------------------------------------
// Name: gps_main
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void GPS_Main(void)
{
if((Poti3 > 125) && (nav_sol.gpsfix) && (gps_hold == false)) // Enable Hold
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
gps_hold = true;
}
 
if(Poti3 < 125) // Disable Hold
{
GpsZiel_X = 0;
GpsZiel_Y = 0;
GPS_Nick = 0;
GPS_Roll = 0;
 
gps_hold = false;
}
 
 
 
 
if(ubx.update)
{
ubx.update = false;
ubx_decode(&ubx);
if(nav_sol.update)
{
//trace_nav_sol();
nav_sol.update = false;
if(nav_sol.gpsfix)
{
LED_GPS_FIX_TOGGLE;
LED_GPS_DATA_OFF;
}
else
{
LED_GPS_DATA_TOGGLE;
LED_GPS_FIX_OFF;
}
//=== new Position ====================
 
GpsAktuell_X = nav_sol.ecef_x;
GpsAktuell_Y = nav_sol.ecef_y;
 
gps_dx = GpsZiel_X - GpsAktuell_X; // Süden +
gps_dy = GpsZiel_Y - GpsAktuell_Y; // Osten +
 
 
gps_vx = -nav_sol.ecefvx; // cm/s ECEF X velocity
gps_vy = -nav_sol.ecefvy; // cm/s ECEF Y velocity
if(gps_hold)
{
GPS_Nick = ((gps_dx * Poti1) / 512) + ((gps_vx * Poti2) / 128);
GPS_Roll = ((gps_dy * Poti1) / 512) + ((gps_vy * Poti2) / 128);
}
else
{
GPS_Nick = 0;
GPS_Roll = 0;
}
 
//=====================================
}
gps_trace();
}
}
 
 
 
//==============================================================================
//==============================================================================
//==============================================================================
//
//==============================================================================
//==============================================================================
//==============================================================================
 
 
//------------------------------------------------------------------------------
// Name:
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void print_uint16(uint16 value,uint8 width)
{
uint8 i,s[10];
 
for (i = 0; i < width; i++)
{
s[width - i - 1] = '0' + (value % 10);
value /= 10;
}
for (i=0; i<(width - 1); i++) // Overwrite trailing Zeros
{
if (s[i] == '0') s[i] = ' ';
else break;
}
for (i=0; i<width; i++) SendeBuffer[print_pos++] = s[i]; // Output String
// for (i=0; i<width; i++) putchar(s[i]); // Output String
 
}
 
//------------------------------------------------------------------------------
// Name:
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void print_int16(int16 value,uint8 width)
{
uint8 i,s[10];
bool neg;
 
neg = false;
if(value < 0) { value = -value; neg = true; }
 
for (i = 0; i < width; i++)
{
s[width - i - 1] = '0' + (value % 10);
value /= 10;
}
 
for (i=0; i<(width - 1); i++) // Overwrite trailing Zeros
{
if (s[i] == '0') s[i] = ' ';
else
{
if(neg) s[i-1] = '-';
break;
}
}
for (i=0; i<width; i++) SendeBuffer[print_pos++] = s[i]; // Output String
// for (i=0; i<width; i++) putchar(s[i]); // Output String
}
 
//------------------------------------------------------------------------------
// Name:
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void print_string(char *s)
{
while(*s)
{
SendeBuffer[print_pos++] = *s;
s++;
}
}
/branches/martosi/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/martosi/Settings.h
--- martosi/_Settings.h (nonexistent)
+++ martosi/_Settings.h (revision 171)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 16
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/martosi/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
for(off=0; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ay = ADC - NeutralAccX;
accumulate_AccNick += Aktuell_ay;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - NeutralAccZ;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
kanal = 3;
state = 7;
}
else
{
kanal = 0;
state = 0;
}*/
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/martosi/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/martosi/eeprom.c
--- martosi/fc.c (nonexistent)
+++ martosi/fc.c (revision 171)
@@ -0,0 +1,812 @@
+/*#######################################################################################
+Flight Control
+#######################################################################################*/
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) 04.2007 Holger Buss
+// + Nur für den privaten Gebrauch
+// + www.MikroKopter.com
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
+// + bzgl. der Nutzungsbedingungen aufzunehmen.
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
+// + Verkauf von Luftbildaufnahmen, usw.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
+// + eindeutig als Ursprung verlinkt werden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
+// + Benutzung auf eigene Gefahr
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
+// + mit unserer Zustimmung zulässig
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
+// + this list of conditions and the following disclaimer.
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
+// + from this software without specific prior written permission.
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
+// + for non-commercial use (directly or indirectly)
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
+// + with our written permission
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
+// + clearly linked as origin
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// + POSSIBILITY OF SUCH DAMAGE.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "main.h"
+
+unsigned char h,m,s;
+volatile unsigned char Timeout = 0;
+volatile int MesswertNick,MesswertRoll,MesswertGier;
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
+volatile float NeutralAccZ = 0;
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
+volatile long IntegralNick = 0,IntegralNick2 = 0;
+volatile long IntegralRoll = 0,IntegralRoll2 = 0;
+volatile long Integral_Gier = 0;
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
+volatile long Mess_Integral_Hoch = 0;
+volatile int KompassValue = 0;
+volatile int KompassStartwert = 0;
+volatile int KompassRichtung = 0;
+unsigned char MAX_GAS,MIN_GAS;
+unsigned char Notlandung = 0;
+unsigned char HoehenReglerAktiv = 0;
+
+float GyroFaktor;
+float IntegralFaktor;
+
+volatile int DiffNick,DiffRoll;
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
+unsigned char MotorWert[5];
+volatile unsigned char SenderOkay = 0;
+int StickNick = 0,StickRoll = 0,StickGier = 0;
+char MotorenEin = 0;
+int HoehenWert = 0;
+int SollHoehe = 0;
+
+float Kp = FAKTOR_P;
+float Ki = FAKTOR_I;
+
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
+unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
+unsigned char Parameter_UserParam1 = 0;
+unsigned char Parameter_UserParam2 = 0;
+unsigned char Parameter_UserParam3 = 0;
+unsigned char Parameter_UserParam4 = 0;
+unsigned char Parameter_ServoNickControl = 100;
+struct mk_param_struct EE_Parameter;
+
+void Piep(unsigned char Anzahl)
+{
+ while(Anzahl--)
+ {
+ if(MotorenEin) return; //auf keinen Fall im Flug!
+ beeptime = 100;
+ Delay_ms(250);
+ }
+}
+
+//############################################################################
+// Nullwerte ermitteln
+void SetNeutral(void)
+//############################################################################
+{
+ unsigned int timer;
+ NeutralAccX = 0;
+ NeutralAccY = 0;
+ NeutralAccZ = 0;
+ AdNeutralNick = 0;
+ AdNeutralRoll = 0;
+ AdNeutralGier = 0;
+ CalibrierMittelwert();
+ timer = SetDelay(5);
+ while (!CheckDelay(timer));
+ CalibrierMittelwert();
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ AdNeutralNick= abs(MesswertNick);
+ AdNeutralRoll= abs(MesswertRoll);
+ AdNeutralGier= abs(MesswertGier);
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
+ NeutralAccZ = Aktuell_az;
+
+ Mess_IntegralNick = 0;
+ Mess_IntegralNick2 = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralRoll2 = 0;
+ Mess_Integral_Gier = 0;
+ MesswertNick = 0;
+ MesswertRoll = 0;
+ MesswertGier = 0;
+ StartLuftdruck = Luftdruck;
+ HoeheD = 0;
+ Mess_Integral_Hoch = 0;
+ KompassStartwert = KompassValue;
+ GPS_Neutral();
+ beeptime = 50;
+}
+
+//############################################################################
+// Bildet den Mittelwert aus den Messwerten
+void Mittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ Integral_Gier = Mess_Integral_Gier;
+// Integral_Gier2 = Mess_Integral_Gier2;
+ IntegralNick = Mess_IntegralNick;
+ IntegralRoll = Mess_IntegralRoll;
+ IntegralNick2 = Mess_IntegralNick2;
+ IntegralRoll2 = Mess_IntegralRoll2;
+ // ADC einschalten
+ ANALOG_ON;
+
+//------------------------------------------------------------------------------
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
+ else
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
+
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
+ else
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
+//------------------------------------------------------------------------------
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Messwerte beim Ermitteln der Nullage
+void CalibrierMittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ // ADC einschalten
+ ANALOG_ON;
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Senden der Motorwerte per I2C-Bus
+void SendMotorData(void)
+//############################################################################
+{
+ if(MOTOR_OFF || !MotorenEin)
+ {
+ Motor_Hinten = 0;
+ Motor_Vorne = 0;
+ Motor_Rechts = 0;
+ Motor_Links = 0;
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0];
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1];
+ if(MotorTest[2]) Motor_Links = MotorTest[2];
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3];
+ }
+
+ DebugOut.Analog[12] = Motor_Vorne;
+ DebugOut.Analog[13] = Motor_Hinten;
+ DebugOut.Analog[14] = Motor_Links;
+ DebugOut.Analog[15] = Motor_Rechts;
+
+ //Start I2C Interrupt Mode
+ twi_state = 0;
+ motor = 0;
+ i2c_start();
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Konstanten
+// + 0-250 -> normale Werte
+// + 251 -> Poti1
+// + 252 -> Poti2
+// + 253 -> Poti3
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DefaultKonstanten1(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Normal\0", 12);
+}
+
+void DefaultKonstanten2(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Kamera\0", 12);
+}
+
+
+//############################################################################
+// Trägt ggf. das Poti als Parameter ein
+void ParameterZuordnung(void)
+//############################################################################
+{
+
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
+
+ unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
+ unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
+ unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
+
+
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+
+ Ki = (float) Parameter_I_Faktor * 0.0001;
+ MAX_GAS = EE_Parameter.Gas_Max;
+ MIN_GAS = EE_Parameter.Gas_Min;
+}
+
+
+//############################################################################
+//
+void MotorRegler(void)
+//############################################################################
+{
+ int motorwert,pd_ergebnis,h,tmp_int;
+ int GierMischanteil,GasMischanteil;
+ static long SummeNick=0,SummeRoll=0;
+ static long sollGier = 0,tmp_long,tmp_long2;
+ static int IntegralFehlerNick = 0;
+ static int IntegralFehlerRoll = 0;
+ static unsigned int RcLostTimer;
+ static unsigned char delay_neutral = 0;
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
+ static unsigned int modell_fliegt = 0;
+ static int hoehenregler = 0;
+ static char TimerWerteausgabe = 0;
+ static char NeueKompassRichtungMerken = 0;
+ Mittelwert();
+
+ GRN_ON;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gaswert ermitteln
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
+ if(GasMischanteil < 0) GasMischanteil = 0;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang schlecht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay < 100)
+ {
+ if(!PcZugriff) beeptime = 500;
+ if(RcLostTimer) RcLostTimer--;
+ else
+ {
+ MotorenEin = 0;
+ Notlandung = 0;
+ }
+ ROT_ON;
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
+ {
+ GasMischanteil = EE_Parameter.NotGas;
+ Notlandung = 1;
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
+/* Poti1 = 65;
+ Poti2 = 48;
+ Poti3 = 0;
+*/ }
+ else MotorenEin = 0;
+ }
+ else
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang gut
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay > 140)
+ {
+ Notlandung = 0;
+ RcLostTimer = EE_Parameter.NotGasZeit * 50;
+ if(GasMischanteil > 40)
+ {
+ if(modell_fliegt < 0xffff) modell_fliegt++;
+ }
+ if((modell_fliegt < 200) || (GasMischanteil < 40))
+ {
+ SummeNick = 0;
+ SummeRoll = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ }
+ if((GasMischanteil > 200) && MotorenEin == 0)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// auf Nullwerte kalibrieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
+ {
+ unsigned char setting;
+ if(++delay_neutral > 200) // nicht sofort
+ {
+ GRN_OFF;
+ SetNeutral();
+ MotorenEin = 0;
+ delay_neutral = 0;
+ modell_fliegt = 0;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
+ {
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
+ }
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
+ Piep(GetActiveParamSetNumber());
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ }
+ }
+ else delay_neutral = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gas ist unten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(GasMischanteil < 35)
+ {
+ // Starten
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Einschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(++delay_einschalten > 200)
+ {
+ delay_einschalten = 200;
+ modell_fliegt = 1;
+ MotorenEin = 1;
+ sollGier = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ Mess_IntegralNick = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ SummeNick = 0;
+ SummeRoll = 0;
+ }
+ }
+ else delay_einschalten = 0;
+ //Auf Neutralwerte setzen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Auschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
+ {
+ if(++delay_ausschalten > 200) // nicht sofort
+ {
+ MotorenEin = 0;
+ delay_ausschalten = 200;
+ modell_fliegt = 0;
+ }
+ }
+ else delay_ausschalten = 0;
+ }
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// neue Werte von der Funke
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(!NewPpmData-- || Notlandung)
+ {
+ ParameterZuordnung();
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
+
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
+
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
+ if(GyroFaktor < 0) GyroFaktor = 0;
+ if(IntegralFaktor < 0) IntegralFaktor = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Bei Empfangsausfall im Flug
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(Notlandung)
+ {
+ StickGier = 0;
+ StickNick = 0;
+ StickRoll = 0;
+ GyroFaktor = 0.1;
+ IntegralFaktor = 0.005;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gyro-Drift kompensieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define DRIFT_FAKTOR 3
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
+ {
+ IntegralFehlerNick = IntegralNick2 - IntegralNick;
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
+ ZaehlMessungen = 0;
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
+ if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
+ if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ Mess_Integral_Gier2 = Integral_Gier;
+ ANALOG_ON; // ADC einschalten
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Integrale auf ACC-Signal abgleichen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
+#define AUSGLEICH 500
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick -= tmp_long;
+ Mess_IntegralRoll -= tmp_long2;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sollGier = StickGier;
+ if(abs(StickGier) > 35)
+ {
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
+ }
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
+ Mess_Integral_Gier -= tmp_int;
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
+
+ ANALOG_ON; // ADC einschalten
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Kompass
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ //KompassValue = 12;
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
+ {
+ int w,v;
+ static int SignalSchlecht = 0;
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
+ v = abs(IntegralRoll /512);
+ if(v > w) w = v; // grösste Neigung ermitteln
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
+ {
+ KompassStartwert = KompassValue;
+ NeueKompassRichtungMerken = 0;
+ }
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
+ if(w > 0)
+ {
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
+ ANALOG_ON; // ADC einschalten
+ if(SignalSchlecht) SignalSchlecht--;
+ }
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debugwerte zuordnen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DebugOut.Sekunden++;
+ if(!TimerWerteausgabe--)
+ {
+ TimerWerteausgabe = 49;
+// DebugOut.Analog[0] = MesswertNick;
+// DebugOut.Analog[1] = MesswertRoll;
+// DebugOut.Analog[2] = MesswertGier;
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[2] = Mittelwert_AccNick;
+ DebugOut.Analog[3] = Mittelwert_AccRoll;
+ DebugOut.Analog[4] = MesswertGier;
+ DebugOut.Analog[5] = HoehenWert;
+ DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
+ DebugOut.Analog[7] = GasMischanteil;
+ DebugOut.Analog[8] = KompassValue;
+// DebugOut.Analog[9] = SollHoehe;
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
+// DebugOut.Analog[11] = KompassStartwert;
+// DebugOut.Analog[10] = Parameter_Gyro_I;
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
+// DebugOut.Analog[9] = KompassRichtung;
+// DebugOut.Analog[10] = GasMischanteil;
+// DebugOut.Analog[3] = HoeheD * 32;
+// DebugOut.Analog[4] = hoehenregler;
+ }
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
+
+ // Maximalwerte abfangen
+ #define MAX_SENSOR 2048
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Höhenregelung
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//OCR0B = 180 - (Poti1 + 120) / 4;
+//DruckOffsetSetting = OCR0B;
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
+ {
+ int tmp_int;
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
+ {
+ if(Parameter_MaxHoehe < 50)
+ {
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
+ HoehenReglerAktiv = 0;
+ }
+ else
+ HoehenReglerAktiv = 1;
+ }
+ else
+ {
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
+ HoehenReglerAktiv = 1;
+ }
+
+ if(Notlandung) SollHoehe = 0;
+ h = HoehenWert;
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
+ h = GasMischanteil - h; // vom Gas abziehen
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
+ if(tmp_int > 50) tmp_int = 50;
+ else if(tmp_int < -50) tmp_int = -50;
+ h -= tmp_int;
+ hoehenregler = (hoehenregler*15 + h) / 16;
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
+ {
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
+ }
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
+ GasMischanteil = hoehenregler;
+ }
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Mischer und PI-Regler
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gier-Anteil
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier
+ if(GierMischanteil > 100) GierMischanteil = 100;
+ if(GierMischanteil < -100) GierMischanteil = -100;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Nick-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
+ SummeNick += DiffNick; // I-Anteil
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
+ if(SummeNick > 16000) SummeNick = 16000;
+ if(SummeNick < -16000) SummeNick = -16000;
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
+ // Motor Vorn
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Vorne = motorwert;
+ // Motor Heck
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Hinten = motorwert;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Roll-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
+ SummeRoll += DiffRoll; // I-Anteil
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
+ if(SummeRoll > 16000) SummeRoll = 16000;
+ if(SummeRoll < -16000) SummeRoll = -16000;
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
+ // Motor Links
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Links = motorwert;
+ // Motor Rechts
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Rechts = motorwert;
+ // +++++++++++++++++++++++++++++++++++++++++++++++
+
+}
+
/branches/martosi/fc.h
0,0 → 1,106
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
#define STRUCT_PARAM_LAENGE 58
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
 
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/martosi/flight-ctrl_mega644_v0_60.aws
0,0 → 1,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="C:\hubi\ufo\mickrokopter\gps codes\V0.60_GPS_BETA_martosi\main.c" Position="336 71 1048 624" LineCol="198 0" State="Maximized"/></Files></AVRWorkspace>
/branches/martosi/gps.h
0,0 → 1,73
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: gps.h
// Description:
//
// Author: Martin Steppuhn
// History: 15.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
#ifndef GPS_H
#define GPS_H
 
/**** Includes ****************************************************************/
 
/**** Preprocessing directives (#define) **************************************/
 
#define LED_GPS_FIX_TOGGLE PORTC ^= (1<<2)
#define LED_GPS_FIX_ON PORTC |= (1<<2)
#define LED_GPS_FIX_OFF PORTC &= ~(1<<2)
 
#define LED_GPS_DATA_TOGGLE PORTC ^= (1<<3)
#define LED_GPS_DATA_ON PORTC |= (1<<3)
#define LED_GPS_DATA_OFF PORTC &= ~(1<<3)
 
/**** Type definitions (typedef) **********************************************/
 
/**** Global constants (extern) ***********************************************/
 
/**** Global variables (extern) ***********************************************/
 
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_Main(void);
 
/**** Global function prototypes **********************************************/
 
#endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/branches/martosi/gps_ubx.c
0,0 → 1,137
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: gps_ubx.c
// Description:
//
// Author: Martin Steppuhn
// History: 08.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
/**** Includes ****************************************************************/
 
#include "std_c.h"
#include "gps_ubx.h"
 
/**** Preprocessing directives (#define) **************************************/
 
/**** Type definitions (typedef) **********************************************/
 
/**** Global constants ********************************************************/
 
/**** Global variables ********************************************************/
 
struct ubx_struct ubx;
struct nav_sol_struct nav_sol;
 
/**** Local constants ********************************************************/
 
/**** Local variables *********************************************************/
 
uint8 ubx_buf[256];
uint8 ubx_buf_len;
 
/**** Local function prototypes ***********************************************/
 
 
 
//------------------------------------------------------------------------------
// Name: ubx_push
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void ubx_push(uint8 c)
{
uint8 length;
uint8 check_a,check_b;
uint16 i;
 
ubx_buf[ubx_buf_len] = c;
ubx_buf_len++;
 
if(ubx_buf_len == 1) { if(ubx_buf[0] != 0xB5) ubx_buf_len = 0; } // Sync
else if(ubx_buf_len == 2) { if(ubx_buf[1] != 0x62) ubx_buf_len = 0; } // Sync
else if(ubx_buf_len >= 6)
{
length = (((uint16)ubx_buf[5]) << 8)+ ubx_buf[4]; // length
if(ubx_buf_len >= (length+8)) // frame complete
{
//=== Calculate checksum ===
check_a = 0;
check_b = 0;
for(i=2;i<(ubx_buf_len-2);i++)
{
check_a = check_a + ubx_buf[i];
check_b = check_b + check_a;
}
 
//=== Test checksum ===
if((check_a == ubx_buf[ubx_buf_len-2]) && (check_b == ubx_buf[ubx_buf_len-1]))
{
ubx.msg_class = ubx_buf[2];
ubx.msg_id = ubx_buf[3];
ubx.length = length;
for(i=0;i<ubx.length;i++) ubx.data[i] = ubx_buf[i+6]; // copy data
ubx.update = true;
}
ubx_buf_len = 0;
}
}
}
 
//------------------------------------------------------------------------------
// Name: ubx_decode
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void ubx_decode(struct ubx_struct *ubx)
{
if((ubx->msg_class == 0x01) && (ubx->msg_id == 0x06)) // NAV-SOL
{
nav_sol.itow = *(uint32*)(&ubx->data[0]); // ms
nav_sol.gpsfix = ubx->data[10];
nav_sol.ecef_x = *(int32*)(&ubx->data[12]); // cm
nav_sol.ecef_y = *(int32*)(&ubx->data[16]); // cm
nav_sol.ecef_z = *(int32*)(&ubx->data[20]); // cm
nav_sol.pacc = *(int32*)(&ubx->data[24]); // cm
nav_sol.ecefvx = *(uint32*)(&ubx->data[28]); // cm/s
nav_sol.ecefvy = *(uint32*)(&ubx->data[32]); // cm/s
nav_sol.ecefvz = *(uint32*)(&ubx->data[36]); // cm/s
nav_sol.sacc = *(uint32*)(&ubx->data[40]); // cm/s
nav_sol.pdop = (uint16)ubx->data[44];
nav_sol.numsv = ubx->data[47];
 
nav_sol.update = true;
}
}
 
//------------------------------------------------------------------------------
// Name: show_ubx
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void show_ubx(struct ubx_struct *ubx)
{
uint8 i;
 
printf("MsgClass=%u ",ubx->msg_class);
printf("MsgId=%u ",ubx->msg_id);
printf("Length=%u ",ubx->length);
printf("Data= ");
for(i=0;i<ubx->length;i++) printf("%02X ",ubx->data[i]);
printf("\r\n");
}
/branches/martosi/gps_ubx.h
0,0 → 1,71
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: gps_ubx.h
// Description:
//
// Author: Martin Steppuhn
// History: 08.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
#ifndef GPS_UBX_H
#define GPS_UBX_H
 
/**** Includes ****************************************************************/
 
#include "std_c.h"
 
/**** Preprocessing directives (#define) **************************************/
 
/**** Type definitions (typedef) **********************************************/
 
typedef struct ubx_struct
{
bool update;
 
uint8 msg_class;
uint8 msg_id;
uint8 length;
uint8 data[256];
};
 
typedef struct nav_sol_struct
{
uint8 update;
 
uint32 itow; // Time
uint8 gpsfix; // GPSfix
int32 ecef_x; // cm ECEF X coordinate
int32 ecef_y; // cm ECEF Y coordinate
int32 ecef_z; // cm ECEF Z coordinate
uint32 pacc; // cm 3D Position Accuracy Estimate
int32 ecefvx; // cm/s ECEF X velocity
int32 ecefvy; // cm/s ECEF Y velocity
int32 ecefvz; // cm/s ECEF Z velocity
uint32 sacc; // cm/s Speed Accuracy Estimate
uint16 pdop; // Position DOP
 
uint8 numsv; // Number of SVs used in Nav Solution
};
 
/**** Global constants (extern) ***********************************************/
 
/**** Global variables (extern) ***********************************************/
 
struct ubx_struct ubx;
struct nav_sol_struct nav_sol;
 
/**** Global function prototypes **********************************************/
 
extern void ubx_push(uint8 c);
extern void ubx_decode(struct ubx_struct *ubx);
 
#endif
/branches/martosi/main.c
0,0 → 1,221
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
if(EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)
{
GPS_Main();
}
else
{
GPS_Nick = 0;
GPS_Roll = 0;
}
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/martosi/main.h
0,0 → 1,93
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~0x01
#define ROT_ON PORTB |= 0x01
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTD ^= 0x02
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
 
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
#include "gps_ubx.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/martosi/makefile
0,0 → 1,391
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c gps_ubx.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/martosi/menu.c
0,0 → 1,125
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 11,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
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,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
case 11:
LCD_printfxy(0,0,"GPS " );
LCD_printfxy(0,1,"GPS_Nick %3i",GPS_Nick);
LCD_printfxy(0,2,"GPS_Roll: %3i",GPS_Roll);
break;
 
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/martosi/menu.h
0,0 → 1,5
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/martosi/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/martosi/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/martosi/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/martosi/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
/* if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen */
}
}
}
 
 
 
 
 
/branches/martosi/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/martosi/std_c.h
0,0 → 1,49
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : std_c.h
//* Object : Standard C Header File
//*
//* 1.0 01/04/00 JCZ : Creation
//*----------------------------------------------------------------------------
 
#ifndef std_c_h
#define std_c_h
 
/*----------------*/
/* Standard types */
/*----------------*/
 
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
 
typedef unsigned char bool;
 
typedef signed char int8;
typedef signed short int16;
typedef signed long int32;
 
 
 
 
/* 16-bit Flash Data type */
typedef volatile unsigned short flash_word ;
 
/* AT91 Register type */
typedef volatile unsigned int at91_reg ;
 
/*----------------*/
/* Boolean values */
/*----------------*/
 
#define true 1
#define false 0
 
#endif /* std_c_h */
/branches/martosi/timer0.c
0,0 → 1,139
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<2);
}
else
PORTD &= ~(1<<2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/martosi/timer0.h
0,0 → 1,14
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
/branches/martosi/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/martosi/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/martosi/uart.c
0,0 → 1,331
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
ubx_push(SioTmp); // push die GPS daten in die GPS routine
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
unsigned char tmp_char_arr3[3];
unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/martosi/uart.h
0,0 → 1,93
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/martosi/version.txt
0,0 → 1,57
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
++ martosi
 
Ich habe den von mart veröffentlichen code 1 zu 1 verbaut und noch das fehlende
und später erklärte std_c.h hinzugefügt. Das ganze ist ein avrstudio4 Projekt.
Viel Spass damit und schaut nach Updates.
Die Lizenz lautet alles geht nix muss ausser bestehende lizenzen beachten!!
Das ganze ist Beerware also wer möchte darf mart und/oder mir ein Bier spendieren.
 
Osiair
/branches/matosi/Flight-Ctrl_MEGA644_V0_60.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>Flight-Ctrl_MEGA644_V0_60</ProjectName><Created>19-Aug-2007 14:38:13</Created><LastEdit>19-Aug-2007 14:51:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>19-Aug-2007 14:38:13</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Flight-Ctrl_MEGA644_V0_60.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\</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>main.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>gps_ubx.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><SOURCEFILE>uart.c</SOURCEFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>gps_ubx.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>std_c.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE><HEADERFILE>uart.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>Flight-Ctrl_MEGA644_V0_60.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\_Settings.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\analog.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\fc.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\gps.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\gps_ubx.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\main.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\menu.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\old_macros.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\printf_P.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\rc.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\Settings.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\std_c.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\timer0.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\twimaster.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\uart.h</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\main.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\analog.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\eeprom.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\fc.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\GPS.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\gps_ubx.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\menu.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\printf_P.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\rc.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\timer0.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\twimaster.c</Name><Name>C:\hubi\ufo\mickrokopter\gps codes\0.60\Flight-Ctrl_MEGA644_V0_60\uart.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000></Files><Workspace><File00000><Position>343 98 875 474</Position><LineCol>0 0</LineCol></File00000></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/matosi/Flight-Ctrl_MEGA644_V0_60.hex
0,0 → 1,1601
:100000000C94EA010C9405020C9405020C94050270
:100010000C9405020C9405020C9405020C94050244
:100020000C9405020C94A70A0C9405020C9405028A
:100030000C94A8130C9405020C9405020C94050270
:100040000C9405020C9405020C94FE090C94050214
:100050000C9423060C9405020C94AD030C94050239
:100060000C94930B0C9405020C94F5120C9405025D
:100070000A0A0D004E65757472616C004865616412
:10008000696E67486F6C64000A0D5374657565721C
:10009000756E673A20004F4B0A0D000A0D416267EA
:1000A0006C65696368204C756674647275636B7304
:1000B000656E736F722E2E000A0D42656E75747A2E
:1000C0006520506172616D657465727361747A2028
:1000D0002564000A0D496E69742E20454550524F23
:1000E0004D3A2047656E65726965726520446566A4
:1000F00061756C742D506172616D657465722E2E20
:100100002E000A0D3D3D3D3D3D3D3D3D3D3D3D3DCE
:100110003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0F
:100120003D3D000A0D466C69676874436F6E7472DA
:100130006F6C205625642E256420002E00475053F6
:100140005F526F6C6C3A20253369004750535F4E05
:1001500069636B20202533690047505320200052EB
:10016000616E67653A2533692D25336900537465DF
:100170006C6C756E673A2025336900536574706F37
:10018000696E74202025336900536572766F2020D4
:1001900000506F7469343A202025336900506F7421
:1001A00069333A202025336900506F7469323A2050
:1001B0002025336900506F7469313A202025336956
:1001C0000053746172743A20202020202535690084
:1001D0004D657373776572743A2020253569005236
:1001E00069636874756E673A2020253569004B6F26
:1001F0006D706173732020202020202000456D70D9
:10020000662E506567656C3A253569005370616EDE
:100210006E756E673A202025356900486F63682047
:1002200025346920282533692900526F6C6C2025FC
:100230003469202825336929004E69636B202534F1
:100240006920282533692900414343202D20536527
:100250006E736F7200476965722025346920282506
:1002600033692900526F6C6C2025346920282533AE
:100270006929004E69636B2025346920282533697C
:1002800029004779726F202D2053656E736F7200BD
:1002900050333A25346920204B616EE46C652000B0
:1002A00050313A253469202050323A2534692000F3
:1002B00047733A253469202047693A25346920007C
:1002C0004E693A2534692020526F3A25346920005E
:1002D0004B373A25346920204B616EE46C65200071
:1002E0004B353A25346920204B363A2534692000B5
:1002F0004B333A25346920204B343A2534692000A9
:100300004B313A25346920204B323A25346920009C
:100310004B6F6D706173733A202020253569005250
:100320006F6C6C3A202020202020253569004E6912
:10033000636B3A20202020202025356900616B74F2
:100340002E204C6167650048F668656E72656765CA
:100350006C756E67004B65696E6520004F666620A0
:1003600020202020203A20253569004C75667464D1
:100370007275636B3A2025356900536F6C6C486F5A
:100380006568653A2025356900486F6568653A20DB
:10039000202020202535690028632920486F6C67BC
:1003A000657220427573730053657474696E673AA1
:1003B00020256420005625642E2564002B2B204D1B
:1003C000696B726F4B6F70746572202B2B005B250D
:1003D000695D000011241FBECFEFD0E1DEBFCDBFAD
:1003E00011E0A0E0B1E0E0E3F3E602C005900D9279
:1003F000A83CB107D9F717E0A8ECB1E001C01D9205
:10040000A73AB107E1F70C9438020C940000A2E07F
:10041000B0E00E948431802D99270895FB01282F98
:10042000863008F025E0429FD0011124AC59BF4F1F
:10043000842F9927019724F001900E948C31FACFE4
:10044000A2E0B0E0022E0E948C310895FB018630BC
:1004500008F085E0489FD0011124AC59BF4F842F8C
:100460009927019724F00E9484310192FACF0895D0
:100470000F931F93CF93DF9391E097B98FEF88B9D4
:100480008BE184B995B98EE38AB9579A87EF8BB916
:1004900084B7877F84BF809160008861809360000B
:1004A0001092600080ED97E09093E5018093E40165
:1004B00010926602109265021092170610921606AC
:1004C0001092640210926302109262021092610212
:1004D00028980E94540B0E94E8040E9493130E94E3
:1004E0008D0B0E94DB127894109225058CE380938B
:1004F000260584E0809327058CE390E09F938F93FB
:100500001F921F9283E291E09F938F931F920E940C
:10051000590782E091E09F938F931F920E945907A1
:10052000299AA1E0B0E00E948431802D2DB73EB71A
:10053000265F3F4F0FB6F8943EBF0FBE2DBF8B33E3
:10054000A9F183ED90E09F938F931F920E9459072A
:100550000E945E1B4AE36EE376E080E00E940E029A
:1005600001E00F900F900F90023049F40E94F11AB1
:100570004AE36EE376E082E00E940E0203E04AE383
:100580006EE376E0802F0E940E020F5F063060F36C
:1005900081E022E030E0D901082E0E948C318BE30B
:1005A00021503040D901082E0E948C3102E010E029
:1005B000D8010E948431802D4AE36EE376E00E94E8
:1005C0002602D8010E948431802D99279F938F9312
:1005D00088EB90E09F938F931F920E945907809120
:1005E00046060F900F900F900F900F9080FF20C045
:1005F0008BE990E09F938F931F920E94590784ECA0
:1006000099E00E94920AEC010E94B70E0F900F90A1
:100610000F90CE010E949B0A8823D9F386E990E0CF
:100620009F938F931F920E9459070F900F900F90E6
:100630000E94161C289880ED97E09093E501809326
:10064000E40188EE93E09093200580931F0585E5F3
:1006500080931A0588E890E09F938F931F920E94E1
:100660005907809146060F900F900F9082FF03C0AC
:100670008CE790E002C084E790E09F938F931F92F5
:100680000E9459070F900F900F9080E790E09F9382
:100690008F931F920E9459070E94DE0E0F900F90B9
:1006A0000F908091E101882379F11092E1010E947D
:1006B000291D0E94CF1B289880910101882319F0E1
:1006C00081508093010180916002882329F08091FC
:1006D00060028150809360022091040130910501F5
:1006E0008091560699272817390734F480ED97E052
:1006F0009093E5018093E40180910F02882319F41F
:100700000E94DB1201C028988091460685FF03C035
:100710000E945A2908C010929602109295021092D7
:100720009802109297020E9403050E94710580E0D2
:1007300090E00E949B0A882309F4B3CF809167025E
:10074000882329F088B190E1892788B901C04498AD
:1007500084EF91E00E94920AA4CF1F920F920FB6ED
:100760000F9211248F939F93EF93FF938091000139
:100770008823E1F48091DD019091DE010196909350
:10078000DE018093DD01FC01E451FC4FE081ED309E
:1007900019F08639910539F41092DE011092DD01CD
:1007A00081E080930001E093C60004C01092DE0156
:1007B0001092DD01FF91EF919F918F910F900FBEED
:1007C0000F901F901895DC0120E030E040E050E0F1
:1007D000ECEEF3E005C08191280F311D4F5F5F4FB4
:1007E0004A175B07C1F73F70C90136E096958795B8
:1007F0003A95E1F7835CFD01E451FC4F808311964B
:100800002F73235CFD01E451FC4F2083A351BC4FA7
:100810008DE08C93109200018091EC038093C600D0
:100820000895EF92FF920F931F93CF93DF937A0176
:10083000722F93E29093EC036093ED038093EE03A9
:1008400003E010E060E0AFEEB3E046C0F701E60F72
:10085000F11D90816F5F715019F4E0E040E00FC02E
:10086000F701E60FF11D40816F5F715011F4E0E078
:1008700006C0F701E60FF11DE0816F5F7150892F0F
:1008800086958695835C8C935527892F992783704D
:10089000907024E0880F991F2A95E1F79A0194E05F
:1008A000369527959A95E1F7822B835CED01898334
:1008B0004F705070440F551F440F551F8E2F829557
:1008C000869586958370842B835C8A83EF73E35CC3
:1008D000EB830C5F1F4F1496772309F0B7CFC80145
:1008E0000E94E303DF91CF911F910F91FF90EF9052
:1008F00008950F931F93CF93DF93EC01062F70E0C1
:10090000A22FBB2712974AC0E42FFF27E15DFA4FC1
:1009100030814F5FE42FFF27E15DFA4F50814F5F39
:10092000E42FFF27E15DFA4F10814F5FE42FFF278F
:10093000E15DFA4F20814F5F842F9927A817B907EF
:1009400084F1701771F15D53FE01E70FF11D3D5306
:10095000330F330F852F82958F70382B30836130A2
:1009600001F1912F9D537F5FFE01E70FF11D715043
:100970005295507F892F86958695582B50836350CA
:100980006F3F79F07E5FFE01E70FF11D9295990FA1
:10099000990F907C2D53922B90837F5F662309F0F3
:1009A000B3CFDF91CF911F910F9108951F93182F0F
:1009B0008A3019F48DE00E94D6048091C00085FF32
:1009C000FCCF1093C60080E090E01F910895089539
:1009D000E1ECF0E088E18083A0ECB0E08C918260F3
:1009E0008C938081806880838081806480838AE2A8
:1009F0008093C40088EC90E00E94920A90931905BD
:100A000080931805089580910001882309F468C037
:100A10008091C801882371F080910001882351F0F2
:100A20002BE04AE155E06091EB0387E40E9411045A
:100A30001092C80180911805909119050E949B0A97
:100A4000882321F48091CA018823B1F080910001AC
:100A5000882391F022E345EC55E06091EB0384E4B8
:100A60000E9411041092CA018AEF90E00E94920A3B
:100A700090931905809318058091C9018823F1F09E
:100A8000809100018823D1F00E94E70E1092C901E5
:100A90008091D6018F5F8093D601843011F410923B
:100AA000D6018091D60144E1849FA00111244A5EC1
:100AB0005E4F24E160E0805D0E9411048091CB01D3
:100AC000882371F080910001882351F02AE045E2EB
:100AD00055E06091EB0386E50E9411041092CB0172
:100AE00008951F93CF93DF93CDB7DEB722970FB64C
:100AF000F894DEBF0FBECDBF8091CD01882309F4ED
:100B000098C08FEF8093010180913105813760F4A7
:100B10008C3608F06FC0873609F440C08836F9F08B
:100B2000833609F084C008C0843759F1863791F1C3
:100B3000813709F07CC036C02091D00143E06BE0E2
:100B40008AE195E00E9479048091060290911C054B
:100B5000892B8093060281E08093CA0168C02091AE
:100B6000D00143E062E0CE0101960E9479048091B9
:100B700006029981892B8093060281E08093C90146
:100B800056C02091D00143E064E082ED91E00E94E4
:100B900079044DC081E08093CB0149C081E080930E
:100BA000C80145C02091D00143E062E0CE0101962A
:100BB0000E94790489818F3F89F0863010F085E0AA
:100BC00089834AE36EE376E089810E942602898167
:100BD0002AE34EE356E06091EB0308C01091EB036B
:100BE0000E9407022AE34EE356E0612F855B0E94D4
:100BF00011041DC02091D00143E06AE38EE396E02A
:100C00000E947904809131054AE36EE376E08B56C9
:100C10000E940E02809131058B56A2E0B0E0082EB2
:100C20000E948C310E94070299270E94141D109285
:100C3000CD0122960FB6F894DEBF0FBECDBFDF9177
:100C4000CF911F9108951F920F920FB60F9211240A
:100C50002F933F934F935F936F937F938F939F93C4
:100C6000AF93BF93CF93DF93EF93FF938091C60031
:100C70008093CC018091CC010E94E22A4091D8015E
:100C8000463910F01092D7018091CC018D3009F0D7
:100C90005DC08091D701823009F058C01092D70111
:100CA000A42FBB27FD01E35DFA4F3081ED01C25D4A
:100CB000DA4F28818091DB019091DC01831B91093F
:100CC000821B91099F709093DC018093DB019C0152
:100CD000689415F8369527951694E1F7235C2093D0
:100CE000DA01982F9F73935C9093D9018081281724
:100CF00029F48881981711F491E006C08091CF0102
:100D00008F5F8093CF0190E08091CD01882309F01F
:100D100064C0992309F461C081E08093CD014093C0
:100D2000D001A15DBA4F8DE08C9380913105823561
:100D300009F053C088E190E02CE00FB6F894A89534
:100D4000809360000FBE2093600047C08091D70160
:100D50008130D9F0813018F08230E9F530C08091CF
:100D6000CC01833239F48091CD01882319F481E0DC
:100D70008093D7018091CC0180932F0581E08093EF
:100D8000D8018091CC01992715C082E08093D701CA
:100D9000E42FFF278091CC01E15DFA4F80834F5F04
:100DA0004093D8012091CC018091DB019091DC012E
:100DB000820F911D9093DC018093DB010EC0E42F24
:100DC000FF278091CC01E15DFA4F8083463938F3EB
:100DD0001092D701E7CF1092D701FF91EF91DF91E9
:100DE000CF91BF91AF919F918F917F916F915F91C3
:100DF0004F913F912F910F900FBE0F901F9018951C
:100E0000982F8091F705813069F480910502E82FD1
:100E1000FF27EA5EFE4F90838F5F8093050221E0FB
:100E200030E005C0892F0E94D604282F3327C9013E
:100E300008951F93182F04C080E30E9400071150EB
:100E40001116D4F31F9108951F93182F04C080E248
:100E50000E94000711501116D4F31F9108950F93AB
:100E60001F93CF93DF938C01EB0108C0F8010F5F54
:100E70001F4FE4918E2F0E94000721972097B1F712
:100E8000DF91CF911F910F9108950F931F93CF93EF
:100E9000DF938C01EB0106C0F80181918F010E9464
:100EA000000721972097C1F7DF91CF911F910F91F4
:100EB00008952F923F924F925F926F927F928F92FE
:100EC0009F92AF92BF92CF92DF92EF92FF920F93D9
:100ED0001F93CF93DF93CDB7DEB7E3970FB6F894A8
:100EE000DEBF0FBECDBF29968FAD29978093F70542
:100EF000CE01855B9F4F9D838C832B964EAD5FAD5E
:100F00002B975FA74EA722243324210102C013018F
:100F100024010EA51FA502C00F5F1F4FF801F4901A
:100F2000FF2019F0F5E2FF16B9F7B8014EA55FA54D
:100F3000641B750B19F0CA010E942F07FF2009F4EA
:100F400044C20F5F1F4F1FA70EA71982AC81BD813E
:100F50001BAA1AAA5FEF59ABEEA5FFA5CF01019618
:100F60009FA78EA7B49095E7B91621F08B2D8062CC
:100F7000883789F4EBA9E0FF07C02D903D904D9094
:100F80005C901397149607C08D919C9111971C014A
:100F9000442455241296F0E2BF1621F48981882357
:100FA000D9F686C043E2B41609F484C05AE2B516F5
:100FB00021F08DE2B81671F408C0FD011296E081AF
:100FC000EAABE7FFC9CFE195EAAB9BA990619F7DB2
:100FD0009BABC2CFEBE2BE1609F46AC0FEE2BF16BD
:100FE000B1F52EA53FA52F5F3F4FEEA5FFA584913C
:100FF0008A3221F0B82E20E030E01BC0FD011296AD
:101000004081518157FF02C04FEF5FEF49AB3FA7CF
:101010002EA7A2CF8AE090E0A901489F9001499FA6
:10102000300D589F300D11242B0D311D20533040B1
:10103000B49031968B2D80538A3060F3FFA7EEA7D2
:10104000A90137FF02C04FEF5FEF49AB8CCF50E3F0
:10105000B51631F48BA984FD7FCF80628BAB7CCF3A
:101060008B2D81538930E8F420E030E04AE050E0F5
:10107000F901E49F9001E59F300DF49F300D11249C
:101080002B0D311D20533040EEA5FFA5CF01019659
:101090009FA78EA7B4908B2D80538A3048F32AAB3C
:1010A00062CF98E6B91651F4EBA9E460EBAB54CFEC
:1010B000B98252CFFBA9F860FBAB4ECF4CE6B41619
:1010C00021F45BA951605BAB47CFBD83AC8383E662
:1010D000B81639F41296BD83AC8312978C918E8327
:1010E00019C194E4B91639F0E4E6BE1639F0F9E610
:1010F000BF1659F503C04BA941604BAB5BA950FF2C
:1011000008C01496BD83AC835E904E903E902E90A6
:101110000AC01296BD83AC839E918E911C0144241B
:1011200037FC4094542C57FC03C08AE088AB93C032
:101130005094409430942094211C311C411C511C2B
:101140008DE289839AE098AB86C0EFE4BE1629F061
:10115000FFE6BF1641F448E061C05BA951605BAB9C
:1011600088E088AB77C090E7B91671F41296BD831A
:10117000AC839E918E911C0144245524EBA9E0641C
:10118000EBAB78E7B72E5EC043E7B416D9F51296FD
:10119000BD83AC83DE90CE90C114D10489F488E283
:1011A0008E838EE68F8385E788878CE689878A879A
:1011B00089E28B871C8666E0C62ED12CCC0EDD1E04
:1011C00059A957FD13C0452F552747FD509560E09D
:1011D00070E0C6010E94252C009711F419A90DC0DA
:1011E0008C1919A981174CF4182F07C0F60101902A
:1011F0000020E9F731971E2F1C1919824201310195
:1012000040E094C085E5B81629F095E7B91641F499
:10121000EAE011C0FBA9F160FBAB4AE048AB1AC0A1
:1012200058E5B51621F088E7B81609F06FC09BA9FC
:1012300093FD03C0E0E1E8AB0DC02114310441048B
:10124000510419F4F0E1F8AB05C04BA940644BAB75
:1012500050E158AB198289A987FD03C09BA99F7DE6
:101260009BAB211431044104510461F4E9A9EE233C
:1012700049F46624772443015EE2C52ED12CCC0EBE
:10128000DD1E3EC04EE2C42ED12CCC0EDD1EF8A9D0
:10129000EF2EFF2400271127C201B101A8019701F9
:1012A0000E9447316A3020F430E3A32EA60E08C016
:1012B00027E5A22EA60E48E5B41611F45FEDA5228F
:1012C000F601A2926F01C201B101A80197010E942B
:1012D000473139014A012E143F044006510618F0E7
:1012E00019012A01D9CFF8A9F83051F44BA943FFCD
:1012F00007C050E3A51621F080E3F60182936F0149
:10130000AE014C19142F125D49A910C0BB2009F47D
:101310005CC0BE8219824201310100E096E0C92E14
:10132000D12CCC0EDD1E11E091E005C0912F042FD1
:10133000011B07FD00E08981882319F0812F8F5F51
:1013400007C05BA956FD02C0812F02C0892F8E5FA6
:10135000A82EA00E8BA9E82EFF2480E3482E512C46
:101360004E205F204114510421F48AA98A190E9459
:1013700024078981882329F061E070E0CE0101967D
:1013800009C0E6FE09C080E38A83BB8262E070E0A8
:10139000CE0102960E94450790E24916510421F4BD
:1013A0008AA98A190E941907802F0E941907612FA4
:1013B000772767FD7095C6010E944507E4FEA7CD1B
:1013C0008AA98A190E942407A2CDE3960FB6F89441
:1013D000DEBF0FBECDBFDF91CF911F910F91FF9068
:1013E000EF90DF90CF90BF90AF909F908F907F90C5
:1013F0006F905F904F903F902F9008951F920F92A3
:101400000FB60F9211242F933F935F936F937F93A7
:101410008F939F93AF93BF938091E8018150809306
:10142000E8018F3F01F589E08093E8018091030195
:101430008F5F817080930301882319F481E080938A
:10144000E1018091DF019091E00101969093E0012C
:101450008093DF0180910F02882329F080910F0291
:10146000815080930F028091E4019091E5010297F1
:1014700058F08091E4019091E50101979093E50186
:101480008093E4015A9A01C05A988091460683FFDE
:101490003BC0349B0AC08091E2019091E301019628
:1014A0009093E3018093E2012FC08091E20190913B
:1014B000E301892B79F08091E2019091E301805A58
:1014C0009F4040F48091E2019091E301909351029A
:1014D00080935002809150029091510220915202CB
:1014E00030915302821B930B845E9D4F68E671E03E
:1014F0000E943431845B9040909355028093540253
:101500001092E3011092E201BF91AF919F918F91F0
:101510007F916F915F913F912F910F900FBE0F9030
:101520001F9018952091DF013091E0012F5F3F4F10
:10153000820F931F08952091DF013091E001821BFB
:10154000930B892F992786958074992708951F9268
:101550000F920FB60F921124EF92FF920F931F93E9
:101560002F933F934F935F936F937F938F939F93AB
:10157000AF93BF93CF93DF93EF93FF9380910201DB
:101580008150809302018F3F09F073C083E88093FC
:10159000B00080918901C82FDD27D093E701C09367
:1015A000E60180916406E090600680FF1EC06091B5
:1015B0002002709121028091220290912302FF2447
:1015C0000027112720E830E040E050E00E94693118
:1015D000C801B7010E94013120E032E040E050E054
:1015E0000E946931C20FD31F1DC06091200270910B
:1015F00021028091220290912302FF2400271127CB
:1016000020E830E040E050E00E946931C801B701B5
:101610000E94013120E032E040E050E00E94693158
:10162000C21BD30BD093E701C093E6012091E601E2
:101630003091E7018091610699272817390734F026
:101640008091620699278217930724F49093E7010B
:101650008093E6018091E6019091E7019093EC057B
:101660008093EB058093B300809163068093020121
:1016700004C083E08093B0005F98FF91EF91DF9109
:10168000CF91BF91AF919F918F917F916F915F911A
:101690004F913F912F911F910F91FF90EF900F90DD
:1016A0000FBE0F901F9018958091DF019091E0017F
:1016B0000B969093EA018093E90182E085BD83EA6D
:1016C00084BD17BC88E788BD96E096BD83EC809307
:1016D000B0009093B100E0E7F0E080818260808309
:1016E000EEE6F0E08081816080838AE08093B30041
:1016F0001092B20008952091DF013091E0012F5F38
:101700003F4F280F391F8091DF019091E001A9011F
:10171000481B590B57FFF7CF089510927C008FEEAE
:1017200080937A0008951F920F920FB60F921124A2
:10173000EF92FF920F931F932F933F934F935F93DB
:101740006F937F938F939F93AF93BF93CF93DF93C9
:10175000EF93FF9310927A00409101024F5F409304
:1017600001024150433009F41CC1443038F4413087
:1017700009F463C0423008F0B9C00DC0453009F427
:1017800050C1453008F42AC1463009F46FC14730D2
:1017900009F0CBC252C220911402309115028091FF
:1017A000780090917900281B390B8091EF0190917E
:1017B000F001820F931F9093F0018093EF018091CD
:1017C000F9018F5F8093F901809144029091450265
:1017D000A0914602B0914702442737FD4095542F0F
:1017E000820F931FA41FB51F80934402909345025C
:1017F000A0934602B093470280914802909149021B
:10180000A0914A02B0914B02820F931FA41FB51FF3
:101810008093480290934902A0934A02B0934B02EE
:1018200081E0809302028091FF0190910002019675
:10183000909300028093FF017CC2609178007091C8
:1018400079008091120290911302681B790B8091AC
:101850003C0290913D02A0913E02B0913F029B015B
:10186000442737FD4095542F820F931FA41FB51FA7
:1018700080933C0290933D02A0933E02B0933F02BE
:101880008091400290914102A0914202B0914302A6
:10189000820F931FA41FB51F8093400290934102B3
:1018A000A0934202B0934302809178009091790016
:1018B0000A9710F464E47DEF8091780090917900AC
:1018C000895E934010F06CEB72E08091ED01909195
:1018D000EE01860F971F9093EE018093ED018091AA
:1018E000F8018F5F8093F80182E058C06091780022
:1018F000709179008091100290911102681B790B10
:101900008091340290913502A0913602B091370255
:101910009B01442737FD4095542F820F931FA41F2E
:10192000B51F8093340290933502A0933602B09392
:1019300037028091380290913902A0913A02B09119
:101940003B02820F931FA41FB51F80933802909310
:101950003902A0933A02B0933B02809178009091B3
:1019600079000A9710F464E47DEF809178009091FB
:101970007900895E934010F06CEB72E08091EB018E
:101980009091EC01860F971F9093EC018093EB01EF
:101990008091F7018F5F8093F70184E080930202CA
:1019A000C8C1409104015091050180917800909147
:1019B00079009A01220F331F240F351F63E070E076
:1019C0000E942031260F371F36952795369527958B
:1019D000309305012093040186E0E0CF8091180246
:1019E000909119022091780030917900821B930B1D
:1019F0009093F9058093F8058091F1019091F2019F
:101A00002091F8053091F905820F931F9093F20110
:101A10008093F1018091FB018F5F8093FB0187E050
:101A2000BDCF80917800909179002091160230917D
:101A30001702821B930B9093F9058093F805809110
:101A4000F3019091F4012091F8053091F905820F8E
:101A5000931F9093F4018093F3018091FA018F5FBB
:101A60008093FA014093020286E0E4C0609178001E
:101A700070917900E0901A02F0901B0200911C0214
:101A800010911D02882777FD8095982F0E943F3086
:101A9000A80197010E94992F0E9422307093F601AD
:101AA0006093F5012091F5013091F601E091F80580
:101AB000F091F905809103069091040697FF03C009
:101AC000909581959F4F64E070E00E943431EB0166
:101AD000CF01F7FF03C0909581959F4F64E070E0C0
:101AE0000E943431260F371F2C0F3D1F3093F60113
:101AF0002093F5018091F5019091F601029704F190
:101B000060911A0270911B0280911C0290911D023B
:101B100020E030E048E454E40E94493088230CF08F
:101B20003CC060911A0270911B0280911C0290913E
:101B30001D022AE037ED43EA5CE30E949A2F25C09C
:101B40008091F5019091F6018F5F9F4F34F5609180
:101B50001A0270911B0280911C0290911D0220E0DC
:101B600030E046E154E40E944C301816B4F4609121
:101B70001A0270911B0280911C0290911D022AE0B2
:101B800037ED43EA5CE30E94992F60931A02709349
:101B90001B0280931C0290931D0281E08093FC0144
:101BA00080917800909179009093FB058093FA05DD
:101BB00020914C0230914D0240914E0250914F02C3
:101BC0008091F5019091F601AA2797FDA095BA2F73
:101BD000280F391F4A1F5B1F20934C0230934D0280
:101BE00040934E0250934F02E0904C02F0904D0211
:101BF00000914E0210914F0260914C0270914D0283
:101C000080914E0290914F0220E034E040E050E09D
:101C10000E946931E21AF30A040B150BE0924C02A0
:101C2000F0924D0200934E0210934F0283E0809396
:101C3000020287E0809301027CC0809108069091A7
:101C400009062091780030917900820F931F9093BC
:101C5000090680930806809100068F5F8093000636
:101C600080910006853008F460C0809178009091E2
:101C7000790090930B0180930A01109200068091E5
:101C8000FC059091FD052091080630910906821B04
:101C9000930B2091680230916902821B930B909301
:101CA000FE018093FD016091080670910906E090A5
:101CB0000601F090070100910801109109018827A1
:101CC00077FD8095982FA8019701220F331F441F9D
:101CD000551F2E0D3F1D401F511F620F731F841F84
:101CE000951F24E030E040E050E00E9469312093ED
:101CF0000601309307014093080150930901209198
:101D0000FC053091FD058091060190910701A0919D
:101D10000801B0910901281B390B30936902209307
:101D200068021092090610920806109202021092A0
:101D300001028091020280937C008FEE80937A00F2
:101D4000FF91EF91DF91CF91BF91AF919F918F91D3
:101D50007F916F915F914F913F912F911F910F91C3
:101D6000FF90EF900F900FBE0F901F901895CF939C
:101D7000DF93C0E0D0E0C7BD82E390E00E947B0B20
:101D80008BE391E09F938F931F920E94590780915C
:101D90000A0190910B010F900F900F90845893407F
:101DA00020F02196CA3FD10531F7C093050688EC93
:101DB00090E00E947B0BDF91CF910895E6E1F1E086
:101DC00080E2819391E0E636F907D9F70895FF9212
:101DD0000F931F9380910602282F3327C90181702A
:101DE0009070682F882391F080910702882311F06A
:101DF000815002C08091660180930702E6E1F1E024
:101E000080E2819391E0E636F907D9F7A9014270A3
:101E1000507021FF0DC0809107028F5F80930702F1
:101E2000E6E1F1E080E2819391E0E636F907D9F747
:101E3000662321F0452B11F01092070281E1809377
:101E400005028091070299279F938F938EEC93E070
:101E50009F938F93E1E0FE2EFF920E94590700911D
:101E600007020F900F900F900F900F90053009F41C
:101E7000DAC1063090F4023009F4BBC0033030F40C
:101E8000002309F1013009F08BC350C0033009F47D
:101E900005C1043009F084C34EC1083009F49BC267
:101EA000093038F4063009F414C2073009F078C359
:101EB0006FC20A3009F40AC30A3008F4C9C20B30F1
:101EC00009F06EC340C3109205028CEB93E09F9320
:101ED0008F93FF920E94590784E1809305028CE35F
:101EE00090E09F938F931F921F9285EB93E09F93B7
:101EF0008F93FF920E94590788E2809305020E9407
:101F0000070299279F938F9388EA93E09F938F937B
:101F1000FF920E9459078CE38093050288E993E0C1
:101F20009F938F93FF920E9459078EC2809146061D
:101F300080FF47C01092050280916802909169026B
:101F40009F938F9389E893E09F938F930F930E94C1
:101F5000590784E18093050280916A0290916B0297
:101F60009F938F938AE793E09F938F930F930E94A1
:101F7000590788E28093050280910A0190910B0134
:101F80009F938F938BE693E09F938F930F930E9481
:101F900059078CE3809305028091050699279F934A
:101FA0008F938CE593E09F938F930F930E94590733
:101FB0008DB79EB744960FB6F8949EBF0FBE8DBFE7
:101FC000F4C284E18093050285E593E09F938F93AB
:101FD0000F930E94590788E28093050287E493E0FB
:101FE0009F938F930F930E9459078DB79EB70696C4
:101FF000E2CF109205028DE393E09F938F93FF92BF
:102000000E94590784E1809305026091200270913B
:102010002102809122029091230220E034E040E0EE
:1020200050E00E9469315F934F933F932F938EE26C
:1020300093E09F938F93FF920E94590788E28093C9
:102040000502609128027091290280912A029091E4
:102050002B0220E034E040E050E00E9469315F93C1
:102060004F933F932F938FE193E09F938F93FF9232
:102070000E9459078CE38093050280915002909151
:1020800051029F938F9380E193E09F938F93FF92F0
:102090000E9459078DB79EB746968DCF10920502C4
:1020A000809116069091170620911406309115061E
:1020B0009F938F933F932F9380E093E09F938F9311
:1020C000FF920E94590784E18093050280911A06CD
:1020D00090911B0620911806309119069F938F93BB
:1020E0003F932F9380EF92E09F938F93FF920E94F4
:1020F000590788E28093050280911E0690911F0681
:1021000020911C0630911D069F938F933F932F9330
:1021100080EE92E09F938F93FF920E9459078CE389
:102120008093050280912006909121069F938F93C2
:1021300080ED92E06FC010920502E0913F06FF270C
:10214000EE0FFF1FEE5EF94F20813181E0913E06D8
:10215000FF27EE0FFF1FEE5EF94F808191813F93C5
:102160002F939F938F9380EC92E09F938F93FF9296
:102170000E94590784E180930502E0914106FF2700
:10218000EE0FFF1FEE5EF94F20813181E091400696
:10219000FF27EE0FFF1FEE5EF94F808191813F9385
:1021A0002F939F938F9380EB92E09F938F93FF9257
:1021B0000E94590788E280930502E0914306FF27B9
:1021C000EE0FFF1FEE5EF94F20813181E091420654
:1021D000FF27EE0FFF1FEE5EF94F808191813F9345
:1021E0002F939F938F9380EA92E09F938F93FF9218
:1021F0000E9459078CE380930502E0914406FF2773
:10220000EE0FFF1FEE5EF94F808191819F938F93B8
:1022100080E992E09F938F93FF920E9459078DB7B8
:102220009EB74A96C8CE1092050282E892E09F932C
:102230008F93FF920E94590784E1809305022091B9
:102240001002309111028091EB019091EC016091AC
:10225000F7013F932F9377270E9434317F936F9339
:1022600083E792E09F938F93FF920E94590788E241
:102270008093050220911202309113028091ED01AA
:102280009091EE016091F8013F932F9377270E9480
:1022900034317F936F9384E692E09F938F93FF9204
:1022A0000E9459078CE3809305022091140230911B
:1022B00015028091EF019091F0016091F9013F9337
:1022C0002F9377270E9434317F936F9385E592E0B7
:1022D00056C01092050288E492E09F938F93FF927C
:1022E0000E94590784E180930502209116023091E3
:1022F00017028091F3019091F4016091FA013F93EC
:102300002F9377270E9434317F936F9389E392E074
:102310009F938F93FF920E94590788E28093050252
:1023200020911802309119028091F1019091F201EF
:102330006091FB013F932F9377270E9434317F9365
:102340006F938AE292E09F938F93FF920E945907C6
:102350008CE38093050260911A0270911B028091B8
:102360001C0290911D020091FA051091FB050E943C
:1023700022307F936F931F930F938BE192E09F9393
:102380008F93FF920E9459078DB79EB7489613CE40
:1023900084E18093050280910401909105019F934F
:1023A0008F938CE092E09F938F93FF920E94590746
:1023B00088E2809305028091600299279F938F9312
:1023C0008DEF91E09F938F93FF920E9459078DB7F5
:1023D0009EB70A96F0CD109205028EEE91E09F9383
:1023E0008F93FF920E94590784E1809305028091A8
:1023F0005402909155029F938F938FED91E09F939C
:102400008F93FF920E94590788E280930502809182
:102410005002909151029F938F9380ED91E09F9392
:102420008F93FF920E9459078CE38093050280915D
:102430005202909153029F938F9381EC91E09F936E
:102440008F93FF920E9459078DB79EB74296B3CDE6
:102450001092050280915802909159029F938F9398
:1024600085EB91E09F938F93FF920E94590784E13F
:102470008093050280915A0290915B029F938F9303
:1024800089EA91E09F938F93FF920E94590788E217
:102490008093050280915C0290915D029F938F93DF
:1024A0008DE991E09F938F93FF920E9459078CE3EF
:1024B0008093050280915E0290915F029F938F93BB
:1024C00081E991E09F938F93FF9270CD1092050266
:1024D00089E891E09F938F93FF920E94590784E1CE
:1024E000809305028091890199279F938F938BE7B1
:1024F00091E09F938F93FF920E94590788E2809307
:1025000005028091E6019091E7019F938F938DE6FC
:1025100091E09F938F93FF920E9459078CE38093E1
:1025200005028091620699279F938F93809161069F
:1025300099279F938F938FE591E09F938F93FF92BD
:102540000E94590735CD1092050289E591E09F93CD
:102550008F93FF920E94590784E180930502809136
:102560009502909196029F938F938BE491E09F93B5
:102570008F93FF920E94590788E280930502809111
:102580009702909198029F938F938DE391E09F9390
:102590008F93FF920E9459078DB79EB70D960BCD72
:1025A00001500093660110920702109206021F91DB
:1025B0000F91FF9008951092B9008AE28093B800BD
:1025C000089585EA8093BC0080E090E0089584E956
:1025D0008093BC0008951092B9008093BB0085E8F9
:1025E0008093BC0080E090E008951F920F920FB698
:1025F0000F9211248F939F93EF93FF938091080282
:102600008F5F809308028150833009F442C0843088
:1026100028F48130A1F0823070F50CC0853009F4C7
:1026200048C08530D8F1863009F44BC0873009F0B6
:1026300071C05BC080910902880F8E5A14C08091CE
:1026400009028F5F809309028150813009F444C0F0
:10265000813038F0823009F442C0833009F05AC02A
:1026600041C08091AF021092B9008093BB0085E811
:102670008093BC004FC084E98093BC008091090224
:10268000843018F41092080202C01092090285EA00
:10269000EFCF80910A02880F8D5AE5CF80910A0210
:1026A0008130D1F08130E8F28230C9F0833091F589
:1026B00019C08091BB00E0910A02FF27E65FF94F45
:1026C000808380910A02813039F0813050F282306B
:1026D00031F08330F9F406C08091B002C4CF80910C
:1026E000B703C1CF8091E203BECF80910A029091DF
:1026F000BB00E82FFF27E65FF94F94838F5F80933D
:102700000A02843010F010920A0284E98093BC001F
:1027100010920802FF91EF919F918F910F900FBE41
:102720000F901F90189583EC80938100EFE6F0E006
:1027300080818062808310921502109214021092A0
:1027400013021092120210921102109210020895B8
:102750001F920F920FB60F9211240F931F932F9376
:102760003F934F935F936F937F938F939F93AF9319
:10277000BF93CF93DF93EF93FF9320918600309127
:10278000870080910D0290910E02281B390B8091D9
:1027900086009091870090930E0280930D02C901EC
:1027A0008D5D95408356994148F481E090E0909387
:1027B0000C0280930B021092670154C0C0910B026F
:1027C000D0910C02CA30D1050CF04CC0C9018B5F0E
:1027D0009040845B914008F040C0A901425D5140A7
:1027E000FE01EE0FFF1FEE5EF94F80819181FA012D
:1027F000E81BF90BCF01F7FF03C0909581959F4F20
:1028000006974CF480916002883C28F48091600225
:10281000865F80936002FE01EE0FFF1F8F010E5E48
:10282000194FD8012D913C91C901880F991F820F32
:10283000931F840F951F64E070E00E943431D8012B
:102840008D919C9111979B01281B390BE85DF94FE5
:102850003183208311967C936E932196D0930C0242
:10286000C0930B02FF91EF91DF91CF91BF91AF9198
:102870009F918F917F916F915F914F913F912F9198
:102880001F910F910F900FBE0F901F901895AF9250
:10289000BF92CF92DF92EF92FF920F931F9310920D
:1028A0007A008091F701882369F08091EB01909183
:1028B000EC016091F70177270E94343170937B0619
:1028C00060937A068091F801882369F08091ED0188
:1028D0009091EE016091F80177270E943431709356
:1028E0007906609378068091F901882369F08091D8
:1028F000EF019091F0016091F90177270E94343146
:1029000070938706609386068091FA018823D9F137
:10291000E0908306F09084066091F3017091F401D9
:102920002091FA010027F7FC0095102F570168014C
:1029300043E0AA0CBB1CCC1CDD1C4A95D1F7AE1899
:10294000BF08C00AD10A882777FD8095982F34E008
:10295000660F771F881F991F3A95D1F733274427B1
:1029600055270E946931A20EB31EC41ED51EC60192
:10297000B50128E030E040E050E00E94693130933A
:102980008406209383068091FB018823D9F1E0908F
:102990008C06F0908D066091F1017091F20120910A
:1029A000FB010027F7FC0095102F5701680183E019
:1029B000AA0CBB1CCC1CDD1C8A95D1F7AE18BF0835
:1029C000C00AD10A882777FD8095982FB4E0660F5A
:1029D000771F881F991FBA95D1F7332744275527AA
:1029E0000E946931A20EB31EC41ED51EC601B501D8
:1029F00028E030E040E050E00E94693130938D06DD
:102A000020938C068091FC018823A1F1E0907D0643
:102A1000F0907E066091F5017091F6012091FC0125
:102A20000027F7FC0095102F57016801A3E0AA0CBE
:102A3000BB1CCC1CDD1CAA95D1F7AE18BF08C00A80
:102A4000D10A882777FD8095982F3327442755276B
:102A50000E946931A20EB31EC41ED51EC601B50167
:102A600028E030E040E050E00E94693130937E067B
:102A700020937D061092EC011092EB011092F70169
:102A80001092EE011092ED011092F8011092F001F7
:102A90001092EF011092F9011092F2011092F101DF
:102AA0001092FB011092F4011092F3011092FA01BE
:102AB0001092F6011092F5011092FC0180914402EF
:102AC00090914502A0914602B09147028093300256
:102AD00090933102A0933202B0933302809134027A
:102AE00090913502A0913602B09137028093200276
:102AF00090932102A0932202B093230280913C0282
:102B000090913D02A0913E02B0913F028093280235
:102B100090932902A0932A02B0932B02809138024D
:102B200090913902A0913A02B0913B028093240225
:102B300090932502A0932602B09327028091400231
:102B400090914102A0914202B091430280932C02E5
:102B500090932D02A0932E02B0932F028FEE8093BC
:102B60007A0080917A0690917B06893C91057CF0F1
:102B700020917A0630917B0680917A0690917B06AF
:102B8000880F991F880F991F2052334015C08091DC
:102B90007A0690917B0688539F4FA4F420917A0681
:102BA00030917B0680917A0690917B06880F991F61
:102BB000880F991F205E3C4F820F931F90937B06D6
:102BC00080937A068091780690917906893C9105E8
:102BD0007CF020917806309179068091780690916A
:102BE0007906880F991F880F991F2052334015C00E
:102BF000809178069091790688539F4FA4F4209194
:102C00007806309179068091780690917906880F40
:102C1000991F880F991F205E3C4F820F931F90933E
:102C2000790680937806209158023091590280915C
:102C30004206E82FFF27EE0FFF1FEE5EF94F80815F
:102C4000918182599F4F281739071CF42F5F3F4FFE
:102C50000CC08081918182599F4F821793074CF459
:102C60002115310531F02150304030935902209325
:102C7000580220915A0230915B0280914306E82F5E
:102C8000FF27EE0FFF1FEE5EF94F80819181825981
:102C90009F4F281739071CF42F5F3F4F0CC08081CE
:102CA000918182599F4F821793074CF4211531056A
:102CB00031F02150304030935B0220935A02209132
:102CC0005C0230915D0280914406E82FFF27EE0FF1
:102CD000FF1FEE5EF94F8081918182599F4F281727
:102CE00039071CF42F5F3F4F0CC0808191818259BE
:102CF0009F4F821793074CF42115310531F0215075
:102D0000304030935D0220935C0220915E0230914E
:102D10005F0280914506E82FFF27EE0FFF1FEE5E52
:102D2000F94F8081918182599F4F281739071CF4F0
:102D30002F5F3F4F0CC08081918182599F4F821736
:102D400093074CF42115310531F021503040309378
:102D50005F0220935E02809158029091590297FF82
:102D600005C010925902109258020AC08F3F910577
:102D700039F034F08FEF90E090935902809358022D
:102D800080915A0290915B0297FF05C010925B02FE
:102D900010925A020AC08F3F910539F034F08FEF3C
:102DA00090E090935B0280935A0280915C02909134
:102DB0005D0297FF05C010925D0210925C020AC08E
:102DC0008F3F910539F034F08FEF90E090935D02E2
:102DD00080935C0280915E0290915F0297FF05C034
:102DE00010925F0210925E020AC08F3F910539F087
:102DF00034F08FEF90E090935F0280935E021F911A
:102E00000F91FF90EF90DF90CF90BF90AF9008951B
:102E100010927A008091F701882369F08091EB018C
:102E20009091EC016091F70177270E943431709303
:102E30007B0660937A068091F801882369F080917F
:102E4000ED019091EE016091F80177270E943431F5
:102E500070937906609378068091F901882369F070
:102E60008091EF019091F0016091F90177270E9424
:102E7000343170938706609386068091FA01882327
:102E8000D1F06091F3017091F4012091FA0188274B
:102E900077FD8095982F34E0660F771F881F991F64
:102EA0003A95D1F73327442755270E94693130934B
:102EB0008406209383068091FB018823D1F06091E2
:102EC000F1017091F2012091FB01882777FD809537
:102ED000982FB4E0660F771F881F991FBA95D1F716
:102EE0003327442755270E94693130938D0620935C
:102EF0008C068091FC01882399F06091F501709116
:102F0000F6012091FC01882777FD8095982F3327C3
:102F1000442755270E94693130937E0620937D0611
:102F20001092EC011092EB011092F7011092EE0159
:102F30001092ED011092F8011092F0011092EF0141
:102F40001092F9011092F2011092F1011092FB011E
:102F50001092F4011092F3011092FA011092F6010E
:102F60001092F5011092FC018FEE80937A0020916F
:102F700058023091590280914206E82FFF27EE0F48
:102F8000FF1FEE5EF94F8081918182599F4F281774
:102F900039071CF42F5F3F4F0CC08081918182590B
:102FA0009F4F821793074CF42115310531F02150C2
:102FB0003040309359022093580220915A023091A8
:102FC0005B0280914306E82FFF27EE0FFF1FEE5EA6
:102FD000F94F8081918182599F4F281739071CF43E
:102FE0002F5F3F4F0CC08081918182599F4F821784
:102FF00093074CF42115310531F0215030403093C6
:103000005B0220935A0220915C0230915D02809114
:103010004406E82FFF27EE0FFF1FEE5EF94F808179
:10302000918182599F4F281739071CF42F5F3F4F1A
:103030000CC08081918182599F4F821793074CF475
:103040002115310531F02150304030935D0220933D
:103050005C0220915E0230915F0280914506E82F6C
:10306000FF27EE0FFF1FEE5EF94F8081918182599D
:103070009F4F281739071CF42F5F3F4F0CC08081EA
:10308000918182599F4F821793074CF42115310586
:1030900031F02150304030935F0220935E028091E6
:1030A00058029091590297FF05C010925902109250
:1030B00058020AC08F3F910539F034F08FEF90E04D
:1030C000909359028093580280915A0290915B022A
:1030D00097FF05C010925B0210925A020AC08F3F00
:1030E000910539F034F08FEF90E090935B0280937C
:1030F0005A0280915C0290915D0297FF05C0109288
:103100005D0210925C020AC08F3F910539F034F0E5
:103110008FEF90E090935D0280935C0280915E025D
:1031200090915F0297FF05C010925F0210925E02BD
:1031300008958F3F910539F034F08FEF90E0909330
:103140005F0280935E0208951F93809149068B3F32
:1031500098F08B3F19F4809158020EC08C3F19F4FF
:1031600080915A0209C08D3F19F480915C0204C01D
:103170008E3F21F480915E028093810180918101D4
:10318000882319F41092810104C08F3F11F48093B9
:103190008101809148068B3F98F08B3F19F4809114
:1031A00058020EC08C3F19F480915A0209C08D3F1D
:1031B00019F480915C0204C08E3F21F480915E027C
:1031C0008093800180918001882319F410928001FE
:1031D00005C0843618F084E68093800180914A0609
:1031E0008B3F98F08B3F19F4809158020EC08C3FB2
:1031F00019F480915A0209C08D3F19F480915C0244
:1032000004C08E3F21F480915E0280938201809100
:103210008201882319F41092820105C0843618F0C7
:1032200084E68093820180914C068B3F98F08B3F1F
:1032300019F4809158020EC08C3F19F480915A0203
:1032400009C08D3F19F480915C0204C08E3F21F4C7
:1032500080915E028093830180918301882319F419
:103260001092830104C08F3F11F4809383018091F9
:1032700053068B3F98F08B3F19F4809158020EC093
:103280008C3F19F480915A0209C08D3F19F4809146
:103290005C0204C08E3F21F480915E028093840121
:1032A00080918401882319F41092840104C08F3F17
:1032B00011F480938401809154068B3F98F08B3FEA
:1032C00019F4809158020EC08C3F19F480915A0273
:1032D00009C08D3F19F480915C0204C08E3F21F437
:1032E00080915E0280938501809185018B3010F47E
:1032F0008AE002C08F3F11F48093850180915506CA
:103300008B3F98F08B3F19F4809158020EC08C3F90
:1033100019F480915A0209C08D3F19F480915C0222
:1033200004C08E3F21F480915E02809386018091DB
:103330008601882319F41092860104C08F3F11F48E
:103340008093860180915A068B3F98F08B3F19F449
:10335000809158020EC08C3F19F480915A0209C026
:103360008D3F19F480915C0204C08E3F21F480915E
:103370005E028093880180918801882319F410925D
:10338000880104C08F3F11F48093880180915B060F
:103390008B3F98F08B3F19F4809158020EC08C3F00
:1033A00019F480915A0209C08D3F19F480915C0292
:1033B00004C08E3F21F480915E0280936C02809164
:1033C0006C02882319F410926C0204C08F3F11F430
:1033D00080936C0280915C068B3F98F08B3F19F4D0
:1033E000809158020EC08C3F19F480915A0209C096
:1033F0008D3F19F480915C0204C08E3F21F48091CE
:103400005E0280936D0280916D02882319F4109200
:103410006D0204C08F3F11F480936D0280915D06B0
:103420008B3F98F08B3F19F4809158020EC08C3F6F
:1034300019F480915A0209C08D3F19F480915C0201
:1034400004C08E3F21F480915E0280936E028091D1
:103450006E02882319F410926E0204C08F3F11F49B
:1034600080936E0280915E068B3F98F08B3F19F43B
:10347000809158020EC08C3F19F480915A0209C005
:103480008D3F19F480915C0204C08E3F21F480913D
:103490005E0280936F0280916F02882319F410926C
:1034A0006F0204C08F3F11F480936F0290915F060A
:1034B0009B3FB0F09B3F19F48091580204C09C3FA1
:1034C00029F480915A02809389010CC09D3F19F420
:1034D00080915C02F8CF9E3F29F480915E02F3CF89
:1034E0009093890180918901882319F410928901B0
:1034F00004C08F3F11F4809389019B3FB0F09B3F44
:1035000019F48091580204C09C3F29F480915A021A
:10351000809389010CC09D3F19F480915C02F8CF23
:103520009E3F29F480915E02F3CF909389018091B0
:103530008901882319F41092890104C08F3F11F486
:10354000809389019B3FB0F09B3F19F48091580212
:1035500004C09C3F29F480915A02809389010CC0D9
:103560009D3F19F480915C02F8CF9E3F29F4809131
:103570005E02F3CF9093890180918901882319F429
:103580001092890104C08F3F11F48093890110913A
:103590008801612F772767FD7095872F972F0E94ED
:1035A0003F3017FF06C020E030E040E853E40E94BF
:1035B0009A2F27E137EB41ED58E30E94B930609331
:1035C0007C0170937D0180937E0190937F018091B7
:1035D0005106809385068091500680937C061F914A
:1035E000089581E080933E0642E040933F0683E0E9
:1035F0008093400624E02093410635E03093420654
:1036000086E08093430687E0809344061092460646
:103610008EE1809347068BEF809349068AE0809382
:103620004A0692E39093480690934C0640934B06CB
:1036300020934D0610924E0680E180934F068FE056
:10364000809350068AEF809351068AE18093520658
:1036500080E8809353068FEA809354068093550642
:103660008AE58093560683E28093570684E180932F
:1036700058061092590630935A0610925B06109223
:103680005C0610925D0610925E0684E680935F06EB
:1036900088E280936006109264069093610686E942
:1036A0008093620630936306ACE6B6E0E8E6F1E0AC
:1036B0008CE001900D928150E1F7089581E08093B4
:1036C0003E0652E050933F0683E08093400644E07C
:1036D0004093410635E03093420686E080934306EE
:1036E00087E08093440628E0209345061092460622
:1036F0009EE1909347068BEF809349068AE0809382
:103700004A0686E48093480690934C0650934B06F5
:1037100040934D0620934E0680E180934F068FE044
:10372000809350068AEF809351068AE18093520677
:1037300080E88093530688E78093540696E9909337
:1037400055068AE58093560683E28093570684E106
:10375000809358061092590630935A0610925B06D1
:1037600010925C0610925D0610925E0684E68093CD
:103770005F0688E2809360061092640682E380937D
:1037800061069093620630936306ACE6B6E0E0E72C
:10379000F1E08CE001900D928150E1F70895809165
:1037A0006702882301F51092B0021092AF021092C6
:1037B000B7031092E2038091D201882311F0809325
:1037C000AF028091D301882311F08093B0028091E1
:1037D000D401882311F08093E2038091D5018823DE
:1037E00011F08093B7038091AF0299279093F00571
:1037F0008093EF058091B00299279093F205809312
:10380000F1058091E20399279093F4058093F305E5
:103810008091B70399279093F6058093F505109250
:103820000802109209020E94E1120895CF93DF93DB
:10383000109217021092160210921902109218029A
:1038400080E090E0A0E0B0E080931A0290931B0229
:10385000A0931C02B0931D0210921102109210024C
:10386000109213021092120210921502109214027A
:103870000E94081785E090E00E94920AEC01CE01B8
:103880000E949B0A8823D9F30E940817809146065C
:1038900080FF10C080910A0190910B01875B9340DB
:1038A00038F480910A0190910B018E5E924010F4E1
:1038B0000E94B70E80917A0690917B0697FF03C015
:1038C000909581959F4F9093110280931002809163
:1038D00078069091790697FF03C0909581959F4F48
:1038E000909313028093120280918606909187062E
:1038F00097FF03C0909581959F4F909315028093F9
:10390000140280918C0690918D0697FF03C09095CC
:1039100081959F4F60E170E00E94343170931902ED
:1039200060931802809183069091840697FF03C0EC
:10393000909581959F4F60E170E00E9434317093C3
:103940001702609316026091FA057091FB058827B3
:1039500077FD8095982F0E943F3060931A027093F4
:103960001B0280931C0290931D021092340210924D
:1039700035021092360210923702109238021092DD
:10398000390210923A0210923B0210923C021092BD
:103990003D0210923E0210923F021092400210929D
:1039A000410210924202109243021092440210927D
:1039B0004502109246021092470210927B06109226
:1039C0007A06109279061092780610928706109265
:1039D00086068091060190910701A0910801B0919F
:1039E00009019093FD058093FC051092FE01109251
:1039F000FD0110924C0210924D0210924E02109254
:103A00004F02809150029091510290935302809303
:103A100052020E94D82782E390E09093E5018093C0
:103A2000E401DF91CF9108951F93182F0EC080916C
:103A30006702882361F484E690E09093E501809327
:103A4000E4018AEF90E00E947B0B115080F71F91F8
:103A500008952F923F924F925F926F927F928F9232
:103A60009F92AF92BF92CF92DF92EF92FF920F930D
:103A70001F93CF93DF93CDB7DEB728970FB6F89497
:103A8000DEBF0FBECDBF0E944714299AE0914006C9
:103A9000AE2FBB27AA0FBB1FAE5EB94F0D90BC91D6
:103AA000A02D9D0128583F4F3A83298337FF02C03C
:103AB0001A82198280916002843608F04AC080918F
:103AC0000101882331F484EF91E09093E501809324
:103AD000E40180917B0290917C02009731F0019784
:103AE00090937C0280937B0204C010926702109234
:103AF0005602289A8091760290917702815D9740D4
:103B000028F180915706482F55275A83498381E031
:103B100080935602E0913E06FF27EE0FFF1FEE5EF8
:103B2000F94F11821082E0913F06FF27EE0FFF1F31
:103B3000EE5EF94F11821082E0914106FF27EE0FF1
:103B4000FF1FEE5EF94F11821082CEC11092670204
:103B5000CBC1809160028D3808F4C6C11092560224
:103B60008091580622E3829FC001112490937C0229
:103B700080937B0269817A81693271056CF0809152
:103B80007602909177027FEF8F3F970781F1019640
:103B900090937702809376028091760290917702DB
:103BA000883C910520F089819A81889704F51092CC
:103BB000910210929202109293021092940210922B
:103BC0008D0210928E0210928F021092900210922B
:103BD000440210924502109246021092470210923F
:103BE00048021092490210924A0210924B02E98157
:103BF000FA81E93CF1050CF4D6C080916702882374
:103C000009F072C1E0914106FF27EE0FFF1FEE5E43
:103C1000F94F808191818C3491050CF4C1C0809161
:103C20007A028F5F80937A02893C08F45DC12998FB
:103C30000E94161C1092670210927A02109277026C
:103C40001092760280913E06282F3327F901EE0F5D
:103C5000FF1FEE5EF94F80819181873491059CF4BE
:103C6000E0913F06FF27EE0FFF1FEE5EF94F019038
:103C7000F081E02DF7FF03C0F095E195FF4FE734A9
:103C8000F1050CF46CC080913F06682F7727DB01AB
:103C9000AA0FBB1FAE5EB94F8D919C9111978734CF
:103CA00091053CF0F901EE0FFF1FEE5EF94F8081A8
:103CB00091818D919C918734910564F0F901EE0F0B
:103CC000FF1FEE5EF94F808191818734910514F0DA
:103CD00042E001C041E0FB01EE0FFF1FEE5EF94F35
:103CE00080819181863491055CF4F901EE0FFF1F0C
:103CF000EE5EF94F80819181873491050CF043E0AD
:103D0000FB01EE0FFF1FEE5EF94F808191818A5B10
:103D10009F4F5CF4F901EE0FFF1FEE5EF94F8081BB
:103D20009181873491050CF044E0660F771F6E5E39
:103D3000794FFB01808191818A5B9F4F5CF4220F58
:103D4000331F2E5E394FF9018081918186349105B0
:103D50000CF445E0A2E0B0E0042E0E948C310E94F9
:103D600007024AE36EE376E00E9426020E94070201
:103D70000E94141D8091460680FFB6C080910A0102
:103D800090910B01875B934040F480910A019091E0
:103D90000B018E5E924008F0A7C00E94B70EA4C02F
:103DA00010927A02A1C049815A81433251050CF028
:103DB0009BC080914106482F5527FA01EE0FFF1F47
:103DC000EE5EF94F80819181855B9F4F0CF06DC055
:103DD000809179028F5F80937902893C08F467C0F3
:103DE00088EC8093790281E090E090937702809351
:103DF000760281E0809367021092890210928A0213
:103E000010928B0210928C02109244021092450282
:103E100010924602109247021092480210924902F4
:103E200010924A0210924B02109234021092350204
:103E3000109236021092370210923C0210923D020C
:103E400010923E0210923F02809120029091210236
:103E5000A0912202B09123028093380290933902FC
:103E6000A0933A02B0933B028091280290912902DC
:103E7000A0912A02B0912B028093400290934102BC
:103E8000A0934202B09343021092910210929202C8
:103E9000109293021092940210928D0210928E0250
:103EA00010928F021092900202C010927902440F79
:103EB000551F4E5E594FFA01808191818C349105D6
:103EC0008CF0809178028F5F80937802893C60F05B
:103ED0001092670288EC8093780210927702109219
:103EE000760202C01092780280916701815080931F
:103EF0006701809167018F3F29F0809156028823E6
:103F000009F412C10E94A418E0913E06FF27EE0FAB
:103F1000FF1FDF01AE5EB94F8D919C9160914D0600
:103F20007727E85DF94F2081318140914E06552772
:103F3000FC01E69FC001E79F900DF69F900D1124B4
:103F4000F901E49F9001E59F300DF49F300D11249D
:103F5000820F931F9093620280936102E0913F066B
:103F6000FF27EE0FFF1FDF01AE5EB94F8D919C91D1
:103F7000E85DF94F20813181FC01E69FC001E79F98
:103F8000900DF69F900D1124B901649F9001659FDB
:103F9000300D749F300D1124820F931F9093640293
:103FA00080936302E0914106FF27EE0FFF1FEE5E54
:103FB000F94F80819181909581959F4F90936602F2
:103FC0008093650210918501612F772767FD7095B9
:103FD000872F972F0E943F3017FF06C020E030E068
:103FE00040E853E40E949A2F20E030E040E251E4A0
:103FF0000E949A2F20E030E040E85BE30E94B93055
:104000005B016C01609388067093890680938A0631
:1040100090938B0610918601612F772767FD70952D
:10402000872F972F0E943F3017FF06C020E030E017
:1040300040E853E40E949A2F20E030EE4BE257E430
:104040000E94DC2F60937F06709380068093810628
:10405000909382068091460682FF0CC080E090E03B
:10406000A0E0B0E080937F0690938006A093810645
:10407000B093820620E030E040E050E0C601B50198
:104080000E944930882364F480E090E0A0E0B0E032
:104090008093880690938906A0938A06B0938B0636
:1040A00020E030E040E050E060917F0670918006B3
:1040B00080918106909182060E944930882364F4A1
:1040C00080E090E0A0E0B0E080937F0690938006CF
:1040D000A0938106B093820680915602882321F135
:1040E00010926602109265021092620210926102B2
:1040F00010926402109263028DEC9CECACECBDE378
:104100008093880690938906A0938A06B0938B06C5
:104110008AE097EDA3EABBE380937F069093800645
:10412000A0938106B09382068091FF0190910002D6
:104130008D54914008F4BCC0209124023091250296
:1041400040912602509127028091200290912102F5
:10415000A0912202B0912302B901681B790B7093E0
:10416000800260937F0220912C0230912D024091B9
:104170002E0250912F028091280290912902A09145
:104180002A02B0912B02281B390B30937E02209318
:104190007D02109200021092FF01673A710534F01F
:1041A0008091100290911102019608C06A557F4FCC
:1041B0004CF480911002909111020197909311029A
:1041C00080931002273A310534F0809112029091C9
:1041D0001302019608C02A553F4F4CF480911202F9
:1041E0009091130201979093130280931202809191
:1041F000480290914902A0914A02B0914B02873A3D
:104200009105A105B1054CF0809114029091150221
:104210000197909315028093140280914802909127
:104220004902A0914A02B0914B028A559F4FAF4F6D
:10423000BF4F4CF480911402909115020196909317
:1042400015028093140210927A00809120029091BE
:104250002102A0912202B091230280933802909310
:104260003902A0933A02B0933B02809128029091C8
:104270002902A0912A02B0912B02809340029093D0
:104280004102A0934202B093430280913002909188
:104290003102A0913202B091330280934802909390
:1042A0004902A0934A02B0934B028FEE80937A00AA
:1042B000609120027091210280912202909123024C
:1042C00020915206622E772488249924E090830658
:1042D000F0908406A40193010E9469310027F7FC45
:1042E0000095102F2E193F09400B510BCA01B9013F
:1042F00020E130E040E050E00E94693159016A015C
:10430000209385023093860240938702509388025F
:10431000609128027091290280912A0290912B02CB
:10432000E0908C06F0908D06A40193010E94693103
:104330000027F7FC0095102F2E193F09400B510B59
:10434000CA01B90120E130E040E050E00E9469314B
:10435000209381023093820240938302509384021F
:10436000F5EFAF16F1E0BF06F0E0CF06F0E0DF06B4
:104370002CF084EF91E0A0E0B0E00DC06CE0A61658
:104380006EEFB6066FEFC6066FEFD60664F48CE0EC
:104390009EEFAFEFBFEF8093850290938602A093CC
:1043A0008702B0938802253F71E0370770E0470726
:1043B00070E057072CF084EF91E0A0E0B0E009C076
:1043C0002C503E4F4F4F5F4F64F48CE09EEFAFEFA9
:1043D000BFEF8093810290938202A0938302B093F7
:1043E000840210927A008091340290913502A0915B
:1043F0003602B091370220918502309186024091B9
:10440000870250918802821B930BA40BB50B8093FB
:10441000340290933502A0933602B0933702809114
:104420003C0290913D02A0913E02B0913F0220914A
:104430008102309182024091830250918402821B5A
:10444000930BA40BB50B80933C0290933D02A09379
:104450003E02B0933F0280916502909166029C01FA
:10446000442737FD4095542F2B833C834D835E8337
:104470002093890230938A0240938B0250938C02DE
:1044800097FF03C0909581959F4F84973CF0809152
:10449000460684FD03C081E080937202A09044022E
:1044A000B0904502C0904602D09047028B819C811B
:1044B00097FF03C0909581959F4F7C010027F7FCE3
:1044C0000095102F20914F063327442755276B81E5
:1044D0007C818D819E810E9401319B01AC01C801CC
:1044E000B7010E94013120E031E040E050E00E943D
:1044F0006931442737FD4095542FA21AB30AC40AE4
:10450000D50AA0924402B0924502C0924602D092CF
:1045100047028091440290914502A0914602B091D9
:10452000470281539547A040B04064F080E395E78F
:10453000A0E0B0E08093440290934502A09346022D
:10454000B09347028091440290914502A0914602A7
:10455000B0914702805D9A48AF4FBF4F64F480ED41
:104560009AE8AFEFBFEF8093440290934502A09387
:104570004602B09347028FEE80937A0080915002FA
:1045800090915102892B09F4A1C08091460683FFC6
:104590009DC0609120027091210280912202909131
:1045A000230220E032E040E050E00E9469318901BE
:1045B00037FF03C0109501951F4F6091280270913D
:1045C000290280912A0290912B0220E032E040E003
:1045D00050E00E946931B90137FF03C070956195C1
:1045E0007F4F601771070CF4B80169317105A4F4AD
:1045F00080917202882381F0809170029091710203
:10460000892B51F480915002909151029093530262
:104610008093520210927202209184013327629F8C
:10462000C001639F900D729F900D112460E470E0B3
:104630000E943431A901461B570B141615060CF0C5
:104640003FC010927A0020917002309171022115C2
:10465000310561F500914402109145022091460216
:10466000309147028091540290915502FC01E49FE1
:10467000C001E59F900DF49F900D112460E270E061
:104680000E943431882777FD8095982F060F171FD9
:10469000281F391F009344021093450220934602BD
:1046A000309347028FEE80937A0010C08FEE809394
:1046B0007A0021503040309371022093700206C07E
:1046C00084EF91E090937102809370028091D605FF
:1046D0008F5F8093D605809173028150809373021F
:1046E0008F3F09F063C081E38093730260912002E1
:1046F000709121028091220290912302A4019301E2
:104700000E9469313093D8052093D7056091280223
:104710007091290280912A0290912B02A4019301A9
:104720000E9469313093DA052093D9058091830680
:10473000909184069093DC058093DB0580918C0634
:1047400090918D069093DE058093DD05809186061D
:10475000909187069093E0058093DF058091680231
:10476000909169029093E2058093E10560914C027B
:1047700070914D0280914E0290914F0220E032E004
:1047800040E050E00E9469313093E4052093E30556
:1047900029813A813093E6052093E5058091500206
:1047A000909151029093E8058093E7056091200273
:1047B00070912102809122029091230220907F0625
:1047C000309080064090810650908206E0907A06F4
:1047D000F0907B06609088067090890680908A062B
:1047E00090908B060E943F30A20191010E94B93047
:1047F0005B016C010027F7FC0095102FC801B70181
:104800000E943F30A40193010E94B9309B01AC018A
:10481000C601B5010E949A2F0E94223070937B0638
:1048200060937A06609128027091290280912A0291
:1048300090912B02E0907806F09079060E943F302C
:10484000A20191010E94B9305B016C010027F7FCC5
:104850000095102FC801B7010E943F30A4019301B9
:104860000E94B9309B01AC01C601B5010E949A2F8C
:104870000E942230709379066093780660918606D4
:1048800070918706A0903002B0903102C090320241
:10489000D0903302882777FD8095982F0E943F3073
:1048A0007B018C0120E030E040E05FE3C401B30114
:1048B0000E94B9309B01AC01C801B7010E94B93018
:1048C0007B018C01C601B5010E943F30A20191011C
:1048D0000E94B9309B01AC01C801B7010E949A2F18
:1048E0000E942230709387066093860680917A0634
:1048F00090917B068150984034F080E098E090934E
:104900007B0680937A0680917A0690917B06805090
:10491000984F34F480E098EF90937B0680937A066A
:1049200080917806909179068150984034F080E02B
:1049300098E090937906809378068091780690911C
:1049400079068050984F34F480E098EF9093790680
:1049500080937806809186069091870681509840D2
:1049600034F080E098E090938706809386068091EB
:104970008606909187068050984F34F480E098EF37
:10498000909387068093860680914606992780FF3C
:10499000CFC02091810181FF0EC02233B0F48091FD
:1049A000680290916902449790936B0280936A0227
:1049B000109257020DC080914B06289FC001112410
:1049C000449790936B0280936A0281E08093570230
:1049D00080915602882321F010926B0210926A0295
:1049E000209168023091690240916A0250916B02F5
:1049F000421753070CF09CC080915702882309F49A
:104A000097C0241B350B809182019927AC01249F0C
:104A1000C001259F900D349F900D112460E170E03E
:104A20000E94343109811A81061B170B2091FD0168
:104A30003091FE01809180019927BC01269FC00121
:104A4000279F900D369F900D112468E070E00E9422
:104A50003431061B170B60914C0270914D0280910E
:104A60004E0290914F0220E032E040E050E00E9480
:104A70006931CA01B90120918301332744275527A1
:104A80000E94013120E230E040E050E00E946931B4
:104A9000A9012E5C3F4F14F44EEC5FEF209174029D
:104AA000309175028FE090E0FC012E9FC0012F9F96
:104AB000900D3E9F900D11249A014333510514F03F
:104AC00022E330E0021B130B800F911F60E170E0C6
:104AD0000E9434317093750260937402809147068E
:104AE0009927681779078CF429813A8128173907A3
:104AF0002CF0909375028093740207C049815A810B
:104B000050937502409374020DC08091740290918D
:104B1000750269817A816817790724F470937502A8
:104B20006093740280917402909175029A838983D4
:104B3000C0908606D0908706EB81FC81CE1ADF0AF2
:104B4000F5E6CF16D10424F064E6C62ED12C09C0B8
:104B50002CE9C2162FEFD20624F45CE9C52E5FEFD4
:104B6000D52E409078015090790160907A01709034
:104B70007B0160917A0670917B06209161023091F1
:104B800062024091950250919602241B350B621BE4
:104B9000730B882777FD8095982F0E943F309B01EB
:104BA000AC01C301B2010E94B9300E94223070935F
:104BB000B6036093B5038091B5039091B6038C0161
:104BC000222717FD2095322F809191029091920219
:104BD000A0919302B0919402080F191F2A1F3B1F46
:104BE00000939102109392022093930230939402C7
:104BF0001016110612061306ACF4C80117FF03C005
:104C0000909581959F4F60E071E00E9434316F5F15
:104C10007F4F882777FD8095982F061B170B280B51
:104C2000390B14C0C80117FF03C0909581959F4FA1
:104C300060E071E00E9434316F5F7F4F882777FD1D
:104C40008095982F060F171F281F391F0093910278
:104C500010939202209393023093940280919102D8
:104C600090919202A0919302B091940281383EE318
:104C7000930730E0A30730E0B3072CF080E89EE311
:104C8000A0E0B0E009C08058914CAF4FBF4F64F432
:104C900080E891ECAFEFBFEF809391029093920286
:104CA000A0939302B09394026091B5037091B60300
:104CB00080907C0190907D01A0907E01B0907F015A
:104CC000882777FD8095982F0E943F307B018C01CB
:104CD000609191027091920280919302909194025E
:104CE0000E943F309B01AC01C501B4010E94B93064
:104CF0009B01AC01C801B7010E949A2F0E9422308B
:104D00009601260F371F89819A81280F391F222487
:104D10000A9714F441E0242E37FD02C0222019F036
:104D200040E050E008C080918506482F55272417A1
:104D300035070CF4A90180917C06E82FFF27F8873E
:104D4000EF839F01E417F5070CF49A012093AF025B
:104D500029813A81261B370BB9016C0D7D1D77FD2A
:104D600002C0222019F080E090E007C08091850603
:104D70009927681779070CF4CB012F8138852817FC
:104D800039070CF49C012093B00260917806709171
:104D9000790620916302309164024091970250910C
:104DA0009802241B350B621B730B882777FD8095B7
:104DB000982F0E943F309B01AC01C301B2010E94B9
:104DC000B9300E9422307093AE026093AD028091A0
:104DD000AD029091AE028C01222717FD2095322F53
:104DE00080918D0290918E02A0918F02B0919002DD
:104DF000080F191F2A1F3B1F00938D0210938E026C
:104E000020938F023093900210161106120613069B
:104E1000ACF4C80117FF03C0909581959F4F60E0E7
:104E200071E00E9434316F5F7F4F882777FD809556
:104E3000982F061B170B280B390B14C0C80117FF3E
:104E400003C0909581959F4F60E071E00E943431DE
:104E50006F5F7F4F882777FD8095982F060F171F6C
:104E6000281F391F00938D0210938E0220938F020A
:104E70003093900280918D0290918E02A0918F02CA
:104E8000B091900281383EE3930730E0A30730E011
:104E9000B3072CF080E89EE3A0E0B0E009C08058A2
:104EA000914CAF4FBF4F64F480E891ECAFEFBFEF90
:104EB00080938D0290938E02A0938F02B093900204
:104EC0006091AD027091AE02882777FD8095982F92
:104ED0000E943F307B018C0160918D0270918E02A7
:104EE00080918F02909190020E943F309B01AC0113
:104EF000C501B4010E94B9309B01AC01C801B701E2
:104F00000E949A2F0E94223029813A81260F371F52
:104F10002C193D0937FD02C0222019F040E050E075
:104F200008C080918506482F5527241735070CF4B3
:104F3000A9012F813885241735070CF49A01209395
:104F4000E20389819A81861B970BBC016C197D094C
:104F500077FD02C0222019F020E030E008C08091E7
:104F60008506282F3327621773070CF49B018F8166
:104F70009885821793070CF4C9018093B70328968C
:104F80000FB6F894DEBF0FBECDBFDF91CF911F915A
:104F90000F91FF90EF90DF90CF90BF90AF909F90D8
:104FA0008F907F906F905F904F903F902F900895DB
:104FB00080919D0290919E02A0919F02B091A002CB
:104FC0008093A5029093A602A093A702B093A80293
:104FD0008091A1029091A202A091A302B091A4029B
:104FE0008093A9029093AA02A093AB02B093AC0263
:104FF00010929602109295021092980210929702C7
:105000000895CF92DF92EF92FF921F93CF93DF9399
:10501000CDB7DEB72A970FB6F894DEBF0FBECDBF6F
:105020009C01162F40E0E62EFF246E010894C11C5F
:10503000D11C14C0F701E41BF109EC0DFD1D3197E3
:10504000C9016AE070E00E942031805D8083C9015F
:105050006AE070E00E9420319B014F5F411751F7D9
:1050600040E050E0212F332721503040BE016F5FD8
:105070007F4FA0E209C04F5F5F4FFB01E80FF91FB0
:105080008081803331F4A083842F9927821793077E
:1050900094F390919B0620E0AE014F5F5F4F0BC0F1
:1050A000E92FE20FFF27DA01A20FB11D8C91E45125
:1050B000FC4F80832F5F211799F7910F90939B06E8
:1050C0002A960FB6F894DEBF0FBECDBFDF91CF9109
:1050D0001F91FF90EF90DF90CF900895CF92DF92D5
:1050E000EF92FF920F931F93CF93DF93CDB7DEB76D
:1050F0002A970FB6F894DEBF0FBECDBF9C01F62EE7
:1051000097FD02C0EE2405C0309521953F4F81E008
:10511000E82E40E00F2D11276E010894C11CD11C10
:1051200014C0F801E41BF109EC0DFD1D3197C90114
:105130006AE070E00E943431805D8083C9016AE0DA
:1051400070E00E9434319B014F5F4F1551F712C040
:105150002F5F3F4FFE013196E40FF51F80818033B2
:1051600019F480E2808308C0EE2071F031978DE25F
:1051700080830AC020E030E0422F55278F2D9927E9
:1051800001974817590724F390919B0620E0AE0140
:105190004F5F5F4F0BC0E92FE20FFF27DA01A20F2D
:1051A000B11D8C91E451FC4F80832F5F2F1599F72F
:1051B0009F0D90939B062A960FB6F894DEBF0FBE04
:1051C000CDBFDF91CF911F910F91FF90EF90DF90B6
:1051D000CF900895DC010BC080919B06E82FFF273C
:1051E000E451FC4F90838F5F80939B0611969C91B6
:1051F000992391F708950F931F9310929B06809126
:10520000BE0361E099270E9401288AE891E00E948C
:10521000EA2867E080918E0690918F060E946E28A2
:1052200067E080919706909198060E946E280CE89E
:1052300011E0C8010E94EA2867E0809193069091EE
:1052400094060E946E2867E080919C0690919D06CE
:105250000E946E28C8010E94EA2867E080919702A8
:10526000909198020E946E2867E08091950290913B
:1052700096020E946E2880E991E00E94EA2867E089
:1052800080916302909164020E946E2867E0809191
:105290006102909162020E946E2884E991E00E946E
:1052A000EA28109200018091EC038093C6001F91C0
:1052B0000F9108952F923F924F925F926F927F923B
:1052C0008F929F92AF92BF92CF92DF92EF92FF9216
:1052D0000F931F93CF93DF93CDB7DEB728970FB609
:1052E000F894DEBF0FBECDBF80915C0290915D024D
:1052F0008E37910574F18091BE03882309F446C06E
:1053000080919206882309F041C080919D0290917E
:105310009E02A0919F02B091A0028093A50290935B
:10532000A602A093A702B093A8028091A102909137
:10533000A202A091A302B091A4028093A90290932B
:10534000AA02A093AB02B093AC0281E080939206D4
:105350001DC08D379105D4F41092A5021092A602BB
:105360001092A7021092A8021092A9021092AA020B
:105370001092AB021092AC0210929602109295021B
:105380001092980210929702109292068091B102A8
:10539000882309F4FEC01092B10281EB92E00E94D2
:1053A000472B8091B903882309F4F1C01092B90307
:1053B0008091BE03882331F088B194E0892788B9B1
:1053C000439805C088B198E0892788B942988091B0
:1053D000BF039091C003A091C103B091C203809319
:1053E0009D0290939E02A0939F02B093A0022091F1
:1053F000C3033091C4034091C5035091C603209369
:10540000A1023093A2024093A3025093A402E09021
:10541000A502F090A6020091A7021091A802E81A36
:10542000F90A0A0B1B0BE0929706F092980600937C
:10543000990610939A062090A9023090AA024090F3
:10544000AB025090AC02221A330A440A550A209249
:105450008E0630928F06409290065092910680916F
:10546000CF039091D003A091D103B091D203222712
:105470003327A901281B390B4A0B5B0B2D833E8375
:105480004F83588720939C0630939D0640939E0639
:1054900050939F068091D3039091D403A091D5039C
:1054A000B091D60322273327A901281B390B4A0BB9
:1054B0005B0B29833A834B835C8320939306309361
:1054C0009406409395065093960680919206882301
:1054D00009F455C0A0905802B0905902CC24B7FCF2
:1054E000C094DC2C60905A0270905B02882477FC98
:1054F0008094982CC801B701A60195010E94013142
:1055000020E032E040E050E00E94693179018A01F8
:105510006D817E818F819885A40193010E94013164
:1055200020E830E040E050E00E946931E20EF31ED6
:10553000F0929602E0929502C201B101A601950196
:105540000E94013120E032E040E050E00E946931E9
:1055500079018A0169817A818B819C81A4019301FF
:105560000E94013120E830E040E050E00E946931C3
:10557000E20EF31EF0929802E092970208C0109299
:1055800096021092950210929802109297020E9431
:10559000FB2828960FB6F894DEBF0FBECDBFDF9173
:1055A000CF911F910F91FF90EF90DF90CF90BF9020
:1055B000AF909F908F907F906F905F904F903F90B3
:1055C0002F900895CF93DF939091A006E92FFF27A6
:1055D000EF55F94F8083892F8F5F8093A00681302C
:1055E00031F48091A106853B09F44EC04BC0823056
:1055F00031F48091A206823609F446C043C0863059
:1056000008F442C04091A506A82FBB27842F9927F4
:105610000896A817B907C4F190E050E0C3EAD6E0B5
:10562000FD0132979F012F55394F03C08991980F83
:10563000590FC217D307D1F7EF55F94F808198174B
:1056400009F5A056B94F8C915817E1F48091A30643
:105650008093B2028091A4068093B3024093B40277
:1056600020E030E0A7EAB6E0E5EBF2E0552704C021
:105670008D9181932F5F3F4F24173507C8F381E049
:105680008093B1021092A006DF91CF910895CF933D
:10569000DF93EC012981213009F080C08A818630B6
:1056A00009F07CC08C819D81AE81BF818093BA035B
:1056B0009093BB03A093BC03B093BD038E858093EE
:1056C000BE03FE01349684859585A685B7858093B3
:1056D000BF039093C003A093C103B093C20380891A
:1056E0009189A289B3898093C3039093C403A09343
:1056F000C503B093C60384899589A689B789809329
:10570000C7039093C803A093C903B093CA03808DC5
:10571000918DA28DB38D8093CB039093CC03A093F6
:10572000CD03B093CE03848D958DA68DB78D8093D8
:10573000CF039093D003A093D103B093D20380A161
:1057400091A1A2A1B3A18093D3039093D403A0937A
:10575000D503B093D60384A195A1A6A1B7A1809348
:10576000D7039093D803A093D903B093DA0380A50D
:1057700091A5A2A5B3A58093DB039093DC03A0932E
:10578000DD03B093DE0388A999279093E00380930B
:10579000DF038BA98093E1032093B903DF91CF91BD
:1057A00008950F931F93CF93DF93EC01898199277D
:1057B0009F938F9387E991E09F938F930E94322C60
:1057C0008A8199279F938F9384EA91E09F938F9387
:1057D0000E94322C8B8199279F938F938EEA91E0C0
:1057E0009F938F930E94322C89EB91E09F938F932C
:1057F0000E94322C00E010E08DB79EB70E960FB6D7
:10580000F8949EBF0FBE8DBF11C0FE01E90FF11DC0
:10581000848199279F938F9380EC91E09F938F933E
:105820000E94322C0F900F900F900F90902F0F5FCF
:105830001F4F8B81981748F386EC91E00E94522C01
:10584000DF91CF911F910F910895FC01415050407D
:1058500030F001900616D1F73197CF0108958827CF
:1058600099270895CF93DF93CDB7DEB722970FB670
:10587000F894DEBF0FBECDBFFE01379661917191E6
:10588000FA83E983AF018091A3079091A4070E9456
:10589000852C22960FB6F894DEBF0FBECDBFDF91E8
:1058A000CF9108950F931F93CF93DF938C01E091D5
:1058B000A307F091A407838181FF1FC0C0E0D0E05F
:1058C0000AC0FD0120853185BD01F9010995892BAB
:1058D00011F0CFEFDFEFF80181918F01A091A307C5
:1058E000B091A407882369F7FD0120853185BD01AA
:1058F0008AE0F9010995892B11F0CFEFDFEFCE0196
:10590000DF91CF911F910F9108952F923F924F9267
:105910005F926F927F928F929F92AF92BF92CF923F
:10592000DF92EF92FF920F931F93CF93DF93CDB748
:10593000DEB764970FB6F894DEBF0FBECDBFCC24A0
:10594000DD2476011C017C8B6B8B2A01FC01178204
:105950001682838181FD03C08FEF9FEF85C2AA2449
:10596000BB246FC2A0FE54C28A8980538A30E8F4F7
:10597000FA89F03341F42D85222329F4A3FC03C0D6
:1059800080E091E06FC08AE0ED85E802C00111245B
:10599000FA89F80FF053FD87F7FF02C02FE72D8734
:1059A000A3FC49C23D853E8746C2C5018870907000
:1059B000A3FE05C0ED85EE2311F4F1E0FD872A89F1
:1059C000283624F525360CF05BC0233509F480C059
:1059D00024358CF42B32C1F12C3234F42032C1F155
:1059E000233209F00AC23CC03A893D32B1F13E325D
:1059F00009F003C23AC08A89833609F449C0843663
:105A00000CF081C0883509F0F8C11BC0EA89E03785
:105A100009F4A3C0E13744F4EC3669F1EF3671F0D4
:105A2000E93609F0EAC16FC0FA89F53709F49DC07B
:105A3000F83739F0F33709F0E0C134C028E0298B9A
:105A400094C030E1398B91C080E190E0A82AB92A56
:105A5000E0E2F0E0AE2ABF2AEEC120E830E00DC05F
:105A600080E490E0A82AB92AE6C1E8E0F0E0AE2A96
:105A7000BF2A1D86E0C124E030E0A22AB32ADBC1A0
:105A80003FE3C32E3E8531503E8783E68A8B41C17A
:105A9000F201C080FE85F150FE8722E030E0420E28
:105AA000531E37C1F201C080D180892B49F0FD859A
:105AB0006F2F772767FD7095C6010E94612F19C06F
:105AC000F60101900020E9F73197EC19E98B12C03B
:105AD000F201C080D180892B49F0FD856F2F772797
:105AE00067FD7095C6010E94562F03C0C6010E9433
:105AF0004D2F898B22E030E0420E531E3E8589896E
:105B0000381B3E8706C1A2FE08C0F2018081918148
:105B1000A281B38124E030E009C0F201808191814B
:105B2000AA2797FDA095BA2F22E030E0420E531E1F
:105B30006C017D01B7FF0CC082E090E0A82AB92A71
:105B4000F094E094D094C094C11CD11CE11CF11CD1
:105B5000EFEBFFEFAE22BF2221C020E430E0A22A0B
:105B6000B32A38E73A8B80E1898BA2FE08C0F201A4
:105B700080819181A281B38124E030E007C0F201ED
:105B800080819181AA27BB2722E030E0420E531E7C
:105B90006C017D018FEC9FEFA822B922870176016D
:105BA000FE013196F88BEF87F9896F2E77248824D0
:105BB0009924C801B701A40193010E9447316A30BA
:105BC00024F02A89620F615201C0605DEF85F88977
:105BD0006193F88BEF87C801B701A40193010E947C
:105BE000473179018A01211531054105510509F730
:105BF000CC24DD247601CE010196CF84C81AC501DC
:105C000082739070892B19F0FE85F150FE87A6FEF5
:105C100009C02989203111F482E001C081E03E856C
:105C2000381B3E8728E0822E912C8A209B20A3FEE1
:105C300018C08D85282F332727FD30958C2D992767
:105C4000821793073CF0E7EFFFEFAE22BF228824D4
:105C5000992407C0FD85FC19FD872E852F1B2E87F3
:105C600003C03E853C193E87C50180789170892B21
:105C700069F48E8506C0B10180E290E00E946C2F2D
:105C8000812F182F11501816B4F31E87A1FE04C0DF
:105C9000B1018DE290E00BC0A4FE04C0B1018BE223
:105CA00090E005C0A5FE05C0B10180E290E00E9431
:105CB0006C2FA6FE10C0B10180E390E00E946C2F13
:105CC0008989803141F4B101EA898E2F992787FDB6
:105CD00090950E946C2FB0FE0DC08E8506C0B1015C
:105CE00080E390E00E946C2F812F182F115018161E
:105CF000B4F31E87892869F02D8506C0B10180E3C1
:105D000090E00E946C2F212F122F11501216B4F325
:105D10001D8790E8692E712C6A207B20A7FC0DC09E
:105D20008E8506C0B10180E290E00E946C2F812F29
:105D3000182F11501816B4F31E87FA89F33641F460
:105D4000B1018C2D992787FD90950E946C2F45C03D
:105D50002A892337B1F446015601198909C0F50192
:105D600081915F01B101992787FD90950E946C2F69
:105D70001150A8F76401F989CF0ED11C2FEF298BA0
:105D80002CC03A89333519F00F8518891FC0460198
:105D90008601B98808C0F8018491B10199270E9451
:105DA0006C2F0F5F1F4FBA94FFEFBF16A1F764016E
:105DB0002989C20ED11CF98B10C0F80182918F0184
:105DC000B101992787FD90950E946C2FCE01019615
:105DD0000817190791F7188B0F876728B1F08E8580
:105DE00006C0B10180E290E00E946C2F812F182F35
:105DF00011501816B4F31E8708C0B101FA898F2F0D
:105E0000992787FD90950E946C2FAA24BB2413C06C
:105E10002A89253241F43AE0398B1E861D8681E0BD
:105E2000A82EB12C08C0B101EA898E2F992787FDD1
:105E300090950E946C2F2B893C892F5F3F4F3C8BA4
:105E40002B8BF101838183FF04C0EB89FC89F491E2
:105E500003C0EB89FC89F081FA8B2A89222309F09F
:105E600081CDF1018681978164960FB6F894DEBFEB
:105E70000FBECDBFDF91CF911F910F91FF90EF909B
:105E8000DF90CF90BF90AF909F908F907F906F905A
:105E90005F904F903F902F900895FC010590002057
:105EA000E9F7809590958E0F9F1F0895FC0105904E
:105EB000615070400110D8F7809590958E0F9F1F0C
:105EC0000895FC016150704001900110D8F7809551
:105ED00090958E0F9F1F08950F931F93CF93DF937D
:105EE0008C01EB018B81992781FF1BC082FF0DC0C4
:105EF0002E813F818C819D812817390764F4E881C8
:105F0000F9810193F983E88306C0E885F985802F3C
:105F10000995892B31F48E819F8101969F838E8311
:105F200002C00FEF1FEFC801DF91CF911F910F91BA
:105F300008955058192EEFD001D0D2C0BA17620779
:105F4000730784079507B1F188F40EF410940B2EB3
:105F5000BA2FA02D062E622F202D072E732F302D45
:105F6000082E842F402D092E952F502DFF275523C5
:105F7000B9F0591B49F0573E98F04695379527954B
:105F8000A795F0405395C9F776F0BA0F621F731FBB
:105F9000841F30F4879577956795B795F040939572
:105FA00017FA0F2E0895BF1BBB27BA0B620B730B9A
:105FB000840BF6CFDEF6DBC0AED001D091C0552306
:105FC00059F0992369F09F575F57951B33F442F4BA
:105FD000903811F4915805C09BC091589F3F09F427
:105FE000C6C0BB27112462177307840730F4660FFD
:105FF000771F881FBB1F915098F311D00F920FD0BD
:106000000F920DD0A0E82617370748071B0609F0A6
:10601000A048BA2F602D7F918F9100240895A0E8A9
:106020000024621773078407B10528F0621B730B05
:10603000840BB1090A2A660F771F881FBB1FA6951C
:1060400081F7089597FB73D09F3738F0FEE9F91B6D
:10605000982F872F762F6B2F05C086C09695879532
:1060600077956795F150D0F73EF4909580957095AF
:1060700061957F4F8F4F9F4F0895E89403C097FB22
:106080000EF4F3DFB62F672F782F892F9EE90024B7
:1060900027C00ED05EF004C00BD026F001C008D09F
:1060A00019F020F48FEF089580E0089581E00895BD
:1060B00097FB092E052600F8689430D0E89407FC79
:1060C00007C0621773078407950721F008F400944E
:1060D0000794989408959A95BB0F661F771F881FA1
:1060E00011249923A1F08823B2F79F3F59F0BB0FE9
:1060F00048F421F4002011F460FF04C06F5F7F4F6B
:106100008F4F9F4F881F9795879597F908952CC0BB
:106110009FEF80EC0895052E092607FA440F551FBE
:106120005F3F79F0AA27A51708F051E04795880F3F
:10613000991F9F3F31F0BB27B91708F091E0879571
:1061400008959F919F911124E3CF97FB880F991F8A
:106150009F3F31F0BB27B91708F091E0879508956C
:106160009F919F911124D4CF66277727882799275D
:106170000895D1DF01D0B4CF992339F0552329F008
:106180009F575F57950F13F49AF1F1CF91589F3FA6
:10619000E1F3629FA12D0F92BB27639FA00DB11D5C
:1061A000EE27729FA00DB11DEE1FAF93AA27649F2B
:1061B000B00DE11D739FB00DE11DAA1F6627829FE0
:1061C000B00DE11DA61F5527749FE00DA11D551FA1
:1061D000839FE00DA11D561F849FA00D511D852F8B
:1061E0007A2F6E2F1F900F9088231AF4939539F40D
:1061F0008FCF000C111CBB1F661F771F881F012843
:106200000895629FD001739FF001829FE00DF11D00
:10621000649FE00DF11D929FF00D839FF00D749F20
:10622000F00D659FF00D9927729FB00DE11DF91FCC
:10623000639FB00DE11DF91FBD01CF011124089529
:10624000AA1BBB1B51E107C0AA1FBB1FA617B7079C
:1062500010F0A61BB70B881F991F5A95A9F78095B8
:106260009095BC01CD01089597FB092E07260AD011
:1062700077FD04D0E5DF06D000201AF47095619513
:106280007F4F0895F6F7909581959F4F0895A1E26D
:106290001A2EAA1BBB1BFD010DC0AA1FBB1FEE1FA0
:1062A000FF1FA217B307E407F50720F0A21BB30BEB
:1062B000E40BF50B661F771F881F991F1A9469F767
:1062C00060957095809590959B01AC01BD01CF01C3
:1062D000089597FB092E05260ED057FD04D0D7DF71
:1062E0000AD0001C38F450954095309521953F4FC9
:1062F0004F4F5F4F0895F6F7909580957095619593
:106300007F4F8F4F9F4F0895F999FECFB2BDA1BD2A
:10631000F89A119600B40895F999FECFB2BDA1BDC7
:1063200000BC11960FB6F894FA9AF99A0FBE089528
:1063300001640A016400007D0000FF030102030400
:1063400005060708090A48616C6C6F2057656C7474
:10635000000000000000000000000000000000003D
:10636000000000000000000000000000000000002D
:10637000000000000000000000000000000000001D
:10638000000000000000000000000000000000000D
:106390000000000000000B014B616D6572610000A0
:1063A0004E6F726D616C00000000803F17B7D138EE
:1063B00030FB103A403296020A642000207C200014
:1063C000202320000D0A004D7367436C6173733DF9
:1063D000257520004D736749643D257520004C6587
:1063E0006E6774683D25752000446174613D20002E
:0863F0002530325820000D0099
:00000001FF
/branches/matosi/GPS.c
0,0 → 1,290
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: GPS.c
// Description:
//
// Author: Martin Steppuhn
// History: 15.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
 
/**** Includes ****************************************************************/
 
#include "std_c.h"
#include "main.h"
#include "fc.h"
#include "gps_ubx.h"
 
/**** Preprocessing directives (#define) **************************************/
 
/**** Type definitions (typedef) **********************************************/
 
/**** Global constants ********************************************************/
 
/**** Global variables ********************************************************/
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
 
/**** Local constants ********************************************************/
 
/**** Local variables *********************************************************/
 
signed int test_nick = 0;
signed int test_roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsAktuell_Z = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
long gps_dx;
long gps_dy;
long gps_dz;
long gps_vx;
long gps_vy;
long gps_vz;
bool gps_hold;
uint8 print_pos;
 
/**** Local function prototypes ***********************************************/
 
void print_uint16(uint16 value,uint8 width);
void print_int16(int16 value,uint8 width);
void print_string(char *s);
 
//------------------------------------------------------------------------------
// Name: GPS_Neutral
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
GPS_Nick = 0;
GPS_Roll = 0;
 
// LED_GPS_DATA_OFF;
//LED_GPS_FIX_OFF;
//LED_GPS_DATA_ON;
}
 
//------------------------------------------------------------------------------
// Name: gps_trace
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void gps_trace(void)
{
print_pos = 0;
 
print_uint16(nav_sol.gpsfix,1);
print_string(" ");
print_int16(gps_dy,7);
print_int16(gps_dx,7);
 
print_string(" | ");
 
print_int16(gps_vy,7);
print_int16(gps_vx,7);
 
print_string(" | ");
 
print_int16(GPS_Roll,7);
print_int16(GPS_Nick,7);
 
 
print_string(" # ");
 
print_int16(StickRoll,7);
print_int16(StickNick,7);
 
 
print_string("\r\n");
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0]; // Start
}
 
//------------------------------------------------------------------------------
// Name: gps_main
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void GPS_Main(void)
{
if((Poti3 > 125) && (nav_sol.gpsfix) && (gps_hold == false)) // Enable Hold
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
gps_hold = true;
}
 
if(Poti3 < 125) // Disable Hold
{
GpsZiel_X = 0;
GpsZiel_Y = 0;
GPS_Nick = 0;
GPS_Roll = 0;
 
gps_hold = false;
}
 
 
 
 
if(ubx.update)
{
ubx.update = false;
ubx_decode(&ubx);
if(nav_sol.update)
{
//trace_nav_sol();
nav_sol.update = false;
if(nav_sol.gpsfix)
{
LED_GPS_FIX_TOGGLE;
LED_GPS_DATA_OFF;
}
else
{
LED_GPS_DATA_TOGGLE;
LED_GPS_FIX_OFF;
}
//=== new Position ====================
 
GpsAktuell_X = nav_sol.ecef_x;
GpsAktuell_Y = nav_sol.ecef_y;
 
gps_dx = GpsZiel_X - GpsAktuell_X; // Süden +
gps_dy = GpsZiel_Y - GpsAktuell_Y; // Osten +
 
 
gps_vx = -nav_sol.ecefvx; // cm/s ECEF X velocity
gps_vy = -nav_sol.ecefvy; // cm/s ECEF Y velocity
if(gps_hold)
{
GPS_Nick = ((gps_dx * Poti1) / 512) + ((gps_vx * Poti2) / 128);
GPS_Roll = ((gps_dy * Poti1) / 512) + ((gps_vy * Poti2) / 128);
}
else
{
GPS_Nick = 0;
GPS_Roll = 0;
}
 
//=====================================
}
gps_trace();
}
}
 
 
 
//==============================================================================
//==============================================================================
//==============================================================================
//
//==============================================================================
//==============================================================================
//==============================================================================
 
 
//------------------------------------------------------------------------------
// Name:
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void print_uint16(uint16 value,uint8 width)
{
uint8 i,s[10];
 
for (i = 0; i < width; i++)
{
s[width - i - 1] = '0' + (value % 10);
value /= 10;
}
for (i=0; i<(width - 1); i++) // Overwrite trailing Zeros
{
if (s[i] == '0') s[i] = ' ';
else break;
}
for (i=0; i<width; i++) SendeBuffer[print_pos++] = s[i]; // Output String
// for (i=0; i<width; i++) putchar(s[i]); // Output String
 
}
 
//------------------------------------------------------------------------------
// Name:
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void print_int16(int16 value,uint8 width)
{
uint8 i,s[10];
bool neg;
 
neg = false;
if(value < 0) { value = -value; neg = true; }
 
for (i = 0; i < width; i++)
{
s[width - i - 1] = '0' + (value % 10);
value /= 10;
}
 
for (i=0; i<(width - 1); i++) // Overwrite trailing Zeros
{
if (s[i] == '0') s[i] = ' ';
else
{
if(neg) s[i-1] = '-';
break;
}
}
for (i=0; i<width; i++) SendeBuffer[print_pos++] = s[i]; // Output String
// for (i=0; i<width; i++) putchar(s[i]); // Output String
}
 
//------------------------------------------------------------------------------
// Name:
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void print_string(char *s)
{
while(*s)
{
SendeBuffer[print_pos++] = *s;
s++;
}
}
/branches/matosi/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/matosi/Settings.h
--- matosi/_Settings.h (nonexistent)
+++ matosi/_Settings.h (revision 171)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 16
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/matosi/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
for(off=0; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = NeutralAccY - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ay = ADC - NeutralAccX;
accumulate_AccNick += Aktuell_ay;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - NeutralAccZ;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
kanal = 3;
state = 7;
}
else
{
kanal = 0;
state = 0;
}*/
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/matosi/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/matosi/eeprom.c
--- matosi/fc.c (nonexistent)
+++ matosi/fc.c (revision 171)
@@ -0,0 +1,812 @@
+/*#######################################################################################
+Flight Control
+#######################################################################################*/
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) 04.2007 Holger Buss
+// + Nur für den privaten Gebrauch
+// + www.MikroKopter.com
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
+// + bzgl. der Nutzungsbedingungen aufzunehmen.
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
+// + Verkauf von Luftbildaufnahmen, usw.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
+// + eindeutig als Ursprung verlinkt werden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
+// + Benutzung auf eigene Gefahr
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
+// + mit unserer Zustimmung zulässig
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
+// + this list of conditions and the following disclaimer.
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
+// + from this software without specific prior written permission.
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
+// + for non-commercial use (directly or indirectly)
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
+// + with our written permission
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
+// + clearly linked as origin
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// + POSSIBILITY OF SUCH DAMAGE.
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#include "main.h"
+
+unsigned char h,m,s;
+volatile unsigned char Timeout = 0;
+volatile int MesswertNick,MesswertRoll,MesswertGier;
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0;
+volatile float NeutralAccZ = 0;
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
+volatile long IntegralNick = 0,IntegralNick2 = 0;
+volatile long IntegralRoll = 0,IntegralRoll2 = 0;
+volatile long Integral_Gier = 0;
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
+volatile long Mess_Integral_Hoch = 0;
+volatile int KompassValue = 0;
+volatile int KompassStartwert = 0;
+volatile int KompassRichtung = 0;
+unsigned char MAX_GAS,MIN_GAS;
+unsigned char Notlandung = 0;
+unsigned char HoehenReglerAktiv = 0;
+
+float GyroFaktor;
+float IntegralFaktor;
+
+volatile int DiffNick,DiffRoll;
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
+unsigned char MotorWert[5];
+volatile unsigned char SenderOkay = 0;
+int StickNick = 0,StickRoll = 0,StickGier = 0;
+char MotorenEin = 0;
+int HoehenWert = 0;
+int SollHoehe = 0;
+
+float Kp = FAKTOR_P;
+float Ki = FAKTOR_I;
+
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
+unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
+unsigned char Parameter_UserParam1 = 0;
+unsigned char Parameter_UserParam2 = 0;
+unsigned char Parameter_UserParam3 = 0;
+unsigned char Parameter_UserParam4 = 0;
+unsigned char Parameter_ServoNickControl = 100;
+struct mk_param_struct EE_Parameter;
+
+void Piep(unsigned char Anzahl)
+{
+ while(Anzahl--)
+ {
+ if(MotorenEin) return; //auf keinen Fall im Flug!
+ beeptime = 100;
+ Delay_ms(250);
+ }
+}
+
+//############################################################################
+// Nullwerte ermitteln
+void SetNeutral(void)
+//############################################################################
+{
+ unsigned int timer;
+ NeutralAccX = 0;
+ NeutralAccY = 0;
+ NeutralAccZ = 0;
+ AdNeutralNick = 0;
+ AdNeutralRoll = 0;
+ AdNeutralGier = 0;
+ CalibrierMittelwert();
+ timer = SetDelay(5);
+ while (!CheckDelay(timer));
+ CalibrierMittelwert();
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ AdNeutralNick= abs(MesswertNick);
+ AdNeutralRoll= abs(MesswertRoll);
+ AdNeutralGier= abs(MesswertGier);
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
+ NeutralAccZ = Aktuell_az;
+
+ Mess_IntegralNick = 0;
+ Mess_IntegralNick2 = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralRoll2 = 0;
+ Mess_Integral_Gier = 0;
+ MesswertNick = 0;
+ MesswertRoll = 0;
+ MesswertGier = 0;
+ StartLuftdruck = Luftdruck;
+ HoeheD = 0;
+ Mess_Integral_Hoch = 0;
+ KompassStartwert = KompassValue;
+ GPS_Neutral();
+ beeptime = 50;
+}
+
+//############################################################################
+// Bildet den Mittelwert aus den Messwerten
+void Mittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ Integral_Gier = Mess_Integral_Gier;
+// Integral_Gier2 = Mess_Integral_Gier2;
+ IntegralNick = Mess_IntegralNick;
+ IntegralRoll = Mess_IntegralRoll;
+ IntegralNick2 = Mess_IntegralNick2;
+ IntegralRoll2 = Mess_IntegralRoll2;
+ // ADC einschalten
+ ANALOG_ON;
+
+//------------------------------------------------------------------------------
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
+ else
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
+
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
+ else
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
+//------------------------------------------------------------------------------
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Messwerte beim Ermitteln der Nullage
+void CalibrierMittelwert(void)
+//############################################################################
+{
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
+ ANALOG_OFF;
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
+ AccumulateNick = 0; MessanzahlNick = 0;
+ AccumulateRoll = 0; MessanzahlRoll = 0;
+ AccumulateGier = 0; MessanzahlGier = 0;
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
+ accumulate_AccNick = 0;messanzahl_AccNick = 0;
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
+ // ADC einschalten
+ ANALOG_ON;
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
+}
+
+//############################################################################
+// Senden der Motorwerte per I2C-Bus
+void SendMotorData(void)
+//############################################################################
+{
+ if(MOTOR_OFF || !MotorenEin)
+ {
+ Motor_Hinten = 0;
+ Motor_Vorne = 0;
+ Motor_Rechts = 0;
+ Motor_Links = 0;
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0];
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1];
+ if(MotorTest[2]) Motor_Links = MotorTest[2];
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3];
+ }
+
+ DebugOut.Analog[12] = Motor_Vorne;
+ DebugOut.Analog[13] = Motor_Hinten;
+ DebugOut.Analog[14] = Motor_Links;
+ DebugOut.Analog[15] = Motor_Rechts;
+
+ //Start I2C Interrupt Mode
+ twi_state = 0;
+ motor = 0;
+ i2c_start();
+}
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Konstanten
+// + 0-250 -> normale Werte
+// + 251 -> Poti1
+// + 252 -> Poti2
+// + 253 -> Poti3
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DefaultKonstanten1(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Normal\0", 12);
+}
+
+void DefaultKonstanten2(void)
+{
+ EE_Parameter.Kanalbelegung[K_NICK] = 1;
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2;
+ EE_Parameter.Kanalbelegung[K_GAS] = 3;
+ EE_Parameter.Kanalbelegung[K_GIER] = 4;
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5;
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6;
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7;
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
+ EE_Parameter.Hoehe_MinGas = 30;
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
+ EE_Parameter.Gier_P = 16; // Wert : 1-20
+ EE_Parameter.Gas_Min = 15; // Wert : 0-32
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
+ EE_Parameter.KompassWirkung = 128; // Wert : 0-250
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250
+ EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
+ EE_Parameter.I_Faktor = 5;
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
+ EE_Parameter.ServoNickRefresh = 5;
+ memcpy(EE_Parameter.Name, "Kamera\0", 12);
+}
+
+
+//############################################################################
+// Trägt ggf. das Poti als Parameter ein
+void ParameterZuordnung(void)
+//############################################################################
+{
+
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
+
+ unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
+ unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
+ unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
+ unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
+
+
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
+
+ Ki = (float) Parameter_I_Faktor * 0.0001;
+ MAX_GAS = EE_Parameter.Gas_Max;
+ MIN_GAS = EE_Parameter.Gas_Min;
+}
+
+
+//############################################################################
+//
+void MotorRegler(void)
+//############################################################################
+{
+ int motorwert,pd_ergebnis,h,tmp_int;
+ int GierMischanteil,GasMischanteil;
+ static long SummeNick=0,SummeRoll=0;
+ static long sollGier = 0,tmp_long,tmp_long2;
+ static int IntegralFehlerNick = 0;
+ static int IntegralFehlerRoll = 0;
+ static unsigned int RcLostTimer;
+ static unsigned char delay_neutral = 0;
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
+ static unsigned int modell_fliegt = 0;
+ static int hoehenregler = 0;
+ static char TimerWerteausgabe = 0;
+ static char NeueKompassRichtungMerken = 0;
+ Mittelwert();
+
+ GRN_ON;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gaswert ermitteln
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
+ if(GasMischanteil < 0) GasMischanteil = 0;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang schlecht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay < 100)
+ {
+ if(!PcZugriff) beeptime = 500;
+ if(RcLostTimer) RcLostTimer--;
+ else
+ {
+ MotorenEin = 0;
+ Notlandung = 0;
+ }
+ ROT_ON;
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
+ {
+ GasMischanteil = EE_Parameter.NotGas;
+ Notlandung = 1;
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
+/* Poti1 = 65;
+ Poti2 = 48;
+ Poti3 = 0;
+*/ }
+ else MotorenEin = 0;
+ }
+ else
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Emfang gut
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(SenderOkay > 140)
+ {
+ Notlandung = 0;
+ RcLostTimer = EE_Parameter.NotGasZeit * 50;
+ if(GasMischanteil > 40)
+ {
+ if(modell_fliegt < 0xffff) modell_fliegt++;
+ }
+ if((modell_fliegt < 200) || (GasMischanteil < 40))
+ {
+ SummeNick = 0;
+ SummeRoll = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ }
+ if((GasMischanteil > 200) && MotorenEin == 0)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// auf Nullwerte kalibrieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
+ {
+ unsigned char setting;
+ if(++delay_neutral > 200) // nicht sofort
+ {
+ GRN_OFF;
+ SetNeutral();
+ MotorenEin = 0;
+ delay_neutral = 0;
+ modell_fliegt = 0;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
+ {
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
+ }
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
+ Piep(GetActiveParamSetNumber());
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
+ {
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
+ }
+ }
+ }
+ else delay_neutral = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gas ist unten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(GasMischanteil < 35)
+ {
+ // Starten
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Einschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(++delay_einschalten > 200)
+ {
+ delay_einschalten = 200;
+ modell_fliegt = 1;
+ MotorenEin = 1;
+ sollGier = 0;
+ Mess_Integral_Gier = 0;
+ Mess_Integral_Gier2 = 0;
+ Mess_IntegralNick = 0;
+ Mess_IntegralRoll = 0;
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ SummeNick = 0;
+ SummeRoll = 0;
+ }
+ }
+ else delay_einschalten = 0;
+ //Auf Neutralwerte setzen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Auschalten
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
+ {
+ if(++delay_ausschalten > 200) // nicht sofort
+ {
+ MotorenEin = 0;
+ delay_ausschalten = 200;
+ modell_fliegt = 0;
+ }
+ }
+ else delay_ausschalten = 0;
+ }
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// neue Werte von der Funke
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(!NewPpmData-- || Notlandung)
+ {
+ ParameterZuordnung();
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
+
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
+
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
+ if(GyroFaktor < 0) GyroFaktor = 0;
+ if(IntegralFaktor < 0) IntegralFaktor = 0;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Bei Empfangsausfall im Flug
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ if(Notlandung)
+ {
+ StickGier = 0;
+ StickNick = 0;
+ StickRoll = 0;
+ GyroFaktor = 0.1;
+ IntegralFaktor = 0.005;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gyro-Drift kompensieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define DRIFT_FAKTOR 3
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
+ {
+ IntegralFehlerNick = IntegralNick2 - IntegralNick;
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
+ ZaehlMessungen = 0;
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
+ if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
+ if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick2 = IntegralNick;
+ Mess_IntegralRoll2 = IntegralRoll;
+ Mess_Integral_Gier2 = Integral_Gier;
+ ANALOG_ON; // ADC einschalten
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Integrale auf ACC-Signal abgleichen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
+#define AUSGLEICH 500
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ Mess_IntegralNick -= tmp_long;
+ Mess_IntegralRoll -= tmp_long2;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gieren
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sollGier = StickGier;
+ if(abs(StickGier) > 35)
+ {
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
+ }
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
+ Mess_Integral_Gier -= tmp_int;
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
+
+ ANALOG_ON; // ADC einschalten
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Kompass
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ //KompassValue = 12;
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
+ {
+ int w,v;
+ static int SignalSchlecht = 0;
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
+ v = abs(IntegralRoll /512);
+ if(v > w) w = v; // grösste Neigung ermitteln
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht)
+ {
+ KompassStartwert = KompassValue;
+ NeueKompassRichtungMerken = 0;
+ }
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
+ if(w > 0)
+ {
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
+ ANALOG_ON; // ADC einschalten
+ if(SignalSchlecht) SignalSchlecht--;
+ }
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debugwerte zuordnen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+DebugOut.Sekunden++;
+ if(!TimerWerteausgabe--)
+ {
+ TimerWerteausgabe = 49;
+// DebugOut.Analog[0] = MesswertNick;
+// DebugOut.Analog[1] = MesswertRoll;
+// DebugOut.Analog[2] = MesswertGier;
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
+ DebugOut.Analog[2] = Mittelwert_AccNick;
+ DebugOut.Analog[3] = Mittelwert_AccRoll;
+ DebugOut.Analog[4] = MesswertGier;
+ DebugOut.Analog[5] = HoehenWert;
+ DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
+ DebugOut.Analog[7] = GasMischanteil;
+ DebugOut.Analog[8] = KompassValue;
+// DebugOut.Analog[9] = SollHoehe;
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
+// DebugOut.Analog[11] = KompassStartwert;
+// DebugOut.Analog[10] = Parameter_Gyro_I;
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
+// DebugOut.Analog[9] = KompassRichtung;
+// DebugOut.Analog[10] = GasMischanteil;
+// DebugOut.Analog[3] = HoeheD * 32;
+// DebugOut.Analog[4] = hoehenregler;
+ }
+
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
+
+ // Maximalwerte abfangen
+ #define MAX_SENSOR 2048
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Höhenregelung
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//OCR0B = 180 - (Poti1 + 120) / 4;
+//DruckOffsetSetting = OCR0B;
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
+ {
+ int tmp_int;
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
+ {
+ if(Parameter_MaxHoehe < 50)
+ {
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
+ HoehenReglerAktiv = 0;
+ }
+ else
+ HoehenReglerAktiv = 1;
+ }
+ else
+ {
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
+ HoehenReglerAktiv = 1;
+ }
+
+ if(Notlandung) SollHoehe = 0;
+ h = HoehenWert;
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
+ h = GasMischanteil - h; // vom Gas abziehen
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
+ if(tmp_int > 50) tmp_int = 50;
+ else if(tmp_int < -50) tmp_int = -50;
+ h -= tmp_int;
+ hoehenregler = (hoehenregler*15 + h) / 16;
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
+ {
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
+ }
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
+ GasMischanteil = hoehenregler;
+ }
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Mischer und PI-Regler
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Gier-Anteil
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier
+ if(GierMischanteil > 100) GierMischanteil = 100;
+ if(GierMischanteil < -100) GierMischanteil = -100;
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Nick-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
+ SummeNick += DiffNick; // I-Anteil
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
+ if(SummeNick > 16000) SummeNick = 16000;
+ if(SummeNick < -16000) SummeNick = -16000;
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
+ // Motor Vorn
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Vorne = motorwert;
+ // Motor Heck
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Hinten = motorwert;
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Roll-Achse
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
+ SummeRoll += DiffRoll; // I-Anteil
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
+ if(SummeRoll > 16000) SummeRoll = 16000;
+ if(SummeRoll < -16000) SummeRoll = -16000;
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
+ // Motor Links
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Links = motorwert;
+ // Motor Rechts
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
+ if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS;
+ Motor_Rechts = motorwert;
+ // +++++++++++++++++++++++++++++++++++++++++++++++
+
+}
+
/branches/matosi/fc.h
0,0 → 1,106
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern volatile int KompassValue;
extern volatile int KompassStartwert;
extern volatile int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
#define STRUCT_PARAM_LAENGE 58
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
 
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/matosi/flight-ctrl_mega644_v0_60.aws
0,0 → 1,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="C:\hubi\ufo\mickrokopter\gps codes\V0.60_GPS_BETA_martosi\main.c" Position="336 71 1048 624" LineCol="198 0" State="Maximized"/></Files></AVRWorkspace>
/branches/matosi/gps.h
0,0 → 1,73
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: gps.h
// Description:
//
// Author: Martin Steppuhn
// History: 15.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
#ifndef GPS_H
#define GPS_H
 
/**** Includes ****************************************************************/
 
/**** Preprocessing directives (#define) **************************************/
 
#define LED_GPS_FIX_TOGGLE PORTC ^= (1<<2)
#define LED_GPS_FIX_ON PORTC |= (1<<2)
#define LED_GPS_FIX_OFF PORTC &= ~(1<<2)
 
#define LED_GPS_DATA_TOGGLE PORTC ^= (1<<3)
#define LED_GPS_DATA_ON PORTC |= (1<<3)
#define LED_GPS_DATA_OFF PORTC &= ~(1<<3)
 
/**** Type definitions (typedef) **********************************************/
 
/**** Global constants (extern) ***********************************************/
 
/**** Global variables (extern) ***********************************************/
 
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_Main(void);
 
/**** Global function prototypes **********************************************/
 
#endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/branches/matosi/gps_ubx.c
0,0 → 1,137
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: gps_ubx.c
// Description:
//
// Author: Martin Steppuhn
// History: 08.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
/**** Includes ****************************************************************/
 
#include "std_c.h"
#include "gps_ubx.h"
 
/**** Preprocessing directives (#define) **************************************/
 
/**** Type definitions (typedef) **********************************************/
 
/**** Global constants ********************************************************/
 
/**** Global variables ********************************************************/
 
struct ubx_struct ubx;
struct nav_sol_struct nav_sol;
 
/**** Local constants ********************************************************/
 
/**** Local variables *********************************************************/
 
uint8 ubx_buf[256];
uint8 ubx_buf_len;
 
/**** Local function prototypes ***********************************************/
 
 
 
//------------------------------------------------------------------------------
// Name: ubx_push
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void ubx_push(uint8 c)
{
uint8 length;
uint8 check_a,check_b;
uint16 i;
 
ubx_buf[ubx_buf_len] = c;
ubx_buf_len++;
 
if(ubx_buf_len == 1) { if(ubx_buf[0] != 0xB5) ubx_buf_len = 0; } // Sync
else if(ubx_buf_len == 2) { if(ubx_buf[1] != 0x62) ubx_buf_len = 0; } // Sync
else if(ubx_buf_len >= 6)
{
length = (((uint16)ubx_buf[5]) << 8)+ ubx_buf[4]; // length
if(ubx_buf_len >= (length+8)) // frame complete
{
//=== Calculate checksum ===
check_a = 0;
check_b = 0;
for(i=2;i<(ubx_buf_len-2);i++)
{
check_a = check_a + ubx_buf[i];
check_b = check_b + check_a;
}
 
//=== Test checksum ===
if((check_a == ubx_buf[ubx_buf_len-2]) && (check_b == ubx_buf[ubx_buf_len-1]))
{
ubx.msg_class = ubx_buf[2];
ubx.msg_id = ubx_buf[3];
ubx.length = length;
for(i=0;i<ubx.length;i++) ubx.data[i] = ubx_buf[i+6]; // copy data
ubx.update = true;
}
ubx_buf_len = 0;
}
}
}
 
//------------------------------------------------------------------------------
// Name: ubx_decode
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void ubx_decode(struct ubx_struct *ubx)
{
if((ubx->msg_class == 0x01) && (ubx->msg_id == 0x06)) // NAV-SOL
{
nav_sol.itow = *(uint32*)(&ubx->data[0]); // ms
nav_sol.gpsfix = ubx->data[10];
nav_sol.ecef_x = *(int32*)(&ubx->data[12]); // cm
nav_sol.ecef_y = *(int32*)(&ubx->data[16]); // cm
nav_sol.ecef_z = *(int32*)(&ubx->data[20]); // cm
nav_sol.pacc = *(int32*)(&ubx->data[24]); // cm
nav_sol.ecefvx = *(uint32*)(&ubx->data[28]); // cm/s
nav_sol.ecefvy = *(uint32*)(&ubx->data[32]); // cm/s
nav_sol.ecefvz = *(uint32*)(&ubx->data[36]); // cm/s
nav_sol.sacc = *(uint32*)(&ubx->data[40]); // cm/s
nav_sol.pdop = (uint16)ubx->data[44];
nav_sol.numsv = ubx->data[47];
 
nav_sol.update = true;
}
}
 
//------------------------------------------------------------------------------
// Name: show_ubx
// Function:
//
// Parameter:
// Return:
//------------------------------------------------------------------------------
void show_ubx(struct ubx_struct *ubx)
{
uint8 i;
 
printf("MsgClass=%u ",ubx->msg_class);
printf("MsgId=%u ",ubx->msg_id);
printf("Length=%u ",ubx->length);
printf("Data= ");
for(i=0;i<ubx->length;i++) printf("%02X ",ubx->data[i]);
printf("\r\n");
}
/branches/matosi/gps_ubx.h
0,0 → 1,71
//------------------------------------------------------------------------------
// _ _
// | | | |
// ___ _ __ ___ ___ _ _ ___| |_ ___ ___| |__
// / _ \ '_ ` _ \/ __| | | / __| __/ _ \/ __| '_ \.
// | __/ | | | | \__ \ |_| \__ \ || __/ (__| | | |
// \___|_| |_| |_|___/\__, |___/\__\___|\___|_| |_|
// __/ |
// |___/ Engineering
//
// Filename: gps_ubx.h
// Description:
//
// Author: Martin Steppuhn
// History: 08.06.2007 Initial version
//
//------------------------------------------------------------------------------
 
#ifndef GPS_UBX_H
#define GPS_UBX_H
 
/**** Includes ****************************************************************/
 
#include "std_c.h"
 
/**** Preprocessing directives (#define) **************************************/
 
/**** Type definitions (typedef) **********************************************/
 
typedef struct ubx_struct
{
bool update;
 
uint8 msg_class;
uint8 msg_id;
uint8 length;
uint8 data[256];
};
 
typedef struct nav_sol_struct
{
uint8 update;
 
uint32 itow; // Time
uint8 gpsfix; // GPSfix
int32 ecef_x; // cm ECEF X coordinate
int32 ecef_y; // cm ECEF Y coordinate
int32 ecef_z; // cm ECEF Z coordinate
uint32 pacc; // cm 3D Position Accuracy Estimate
int32 ecefvx; // cm/s ECEF X velocity
int32 ecefvy; // cm/s ECEF Y velocity
int32 ecefvz; // cm/s ECEF Z velocity
uint32 sacc; // cm/s Speed Accuracy Estimate
uint16 pdop; // Position DOP
 
uint8 numsv; // Number of SVs used in Nav Solution
};
 
/**** Global constants (extern) ***********************************************/
 
/**** Global variables (extern) ***********************************************/
 
struct ubx_struct ubx;
struct nav_sol_struct nav_sol;
 
/**** Global function prototypes **********************************************/
 
extern void ubx_push(uint8 c);
extern void ubx_decode(struct ubx_struct *ubx);
 
#endif
/branches/matosi/main.c
0,0 → 1,221
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned char EEPromArray[E2END+1] EEMEM;
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
}
 
 
// -- Parametersatz ins EEPROM schreiben ---
// number [0..5]
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
 
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken
}
 
unsigned char GetActiveParamSetNumber(void)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |=0x80; // J7
PORTD = 0xF7; // LED
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
if(EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)
{
GPS_Main();
}
else
{
GPS_Nick = 0;
GPS_Roll = 0;
}
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/matosi/main.h
0,0 → 1,93
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~0x01
#define ROT_ON PORTB |= 0x01
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF PORTB &=~0x02
#define GRN_ON PORTB |= 0x02
#define GRN_FLASH PORTD ^= 0x02
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
 
#define EEPROM_ADR_PARAM_BEGIN 100
 
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
 
 
//#define SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
#include "gps_ubx.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/matosi/makefile
0,0 → 1,391
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c gps_ubx.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/matosi/menu.c
0,0 → 1,125
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
char DisplayBuff[80] = "Hallo Welt";
unsigned char DispPtr = 0;
unsigned char RemoteTasten = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu(void)
{
static unsigned char MaxMenue = 11,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
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,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
case 11:
LCD_printfxy(0,0,"GPS " );
LCD_printfxy(0,1,"GPS_Nick %3i",GPS_Nick);
LCD_printfxy(0,2,"GPS_Roll: %3i",GPS_Roll);
break;
 
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/matosi/menu.h
0,0 → 1,5
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/matosi/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/matosi/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/matosi/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/matosi/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
/* if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen */
}
}
}
 
 
 
 
 
/branches/matosi/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/matosi/std_c.h
0,0 → 1,49
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : std_c.h
//* Object : Standard C Header File
//*
//* 1.0 01/04/00 JCZ : Creation
//*----------------------------------------------------------------------------
 
#ifndef std_c_h
#define std_c_h
 
/*----------------*/
/* Standard types */
/*----------------*/
 
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
 
typedef unsigned char bool;
 
typedef signed char int8;
typedef signed short int16;
typedef signed long int32;
 
 
 
 
/* 16-bit Flash Data type */
typedef volatile unsigned short flash_word ;
 
/* AT91 Register type */
typedef volatile unsigned int at91_reg ;
 
/*----------------*/
/* Boolean values */
/*----------------*/
 
#define true 1
#define false 0
 
#endif /* std_c_h */
/branches/matosi/timer0.c
0,0 → 1,139
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
int ServoValue = 0;
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<2);
}
else
PORTD &= ~(1<<2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
cntKompass++;
}
else
{
if((cntKompass) && (cntKompass < 4000))
{
KompassValue = cntKompass;
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
}
}
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/matosi/timer0.h
0,0 → 1,14
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern int ServoValue;
/branches/matosi/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/matosi/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/matosi/uart.c
0,0 → 1,331
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
ubx_push(SioTmp); // push die GPS daten in die GPS routine
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
unsigned char tmp_char_arr3[3];
unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE);
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/matosi/uart.h
0,0 → 1,93
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/matosi/version.txt
0,0 → 1,57
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
++ martosi
 
Ich habe den von mart veröffentlichen code 1 zu 1 verbaut und noch das fehlende
und später erklärte std_c.h hinzugefügt. Das ganze ist ein avrstudio4 Projekt.
Viel Spass damit und schaut nach Updates.
Die Lizenz lautet alles geht nix muss ausser bestehende lizenzen beachten!!
Das ganze ist Beerware also wer möchte darf mart und/oder mir ein Bier spendieren.
 
Osiair