Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2301 → Rev 2305

/branches/v0.90d_Ernstl_6-Motoren+Sexpander/FlightCtrl.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/GPS.c
0,0 → 1,16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) Holger Buss, Ingo Busker
// + 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;
unsigned char GPS_Aid_StickMultiplikator = 0; // 64 = 100%
 
 
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/GPS.lst
0,0 → 1,37
1 .file "GPS.c"
2 .arch atmega1284p
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 .global GPS_Aid_StickMultiplikator
11 .global GPS_Aid_StickMultiplikator
12 .section .bss
15 GPS_Aid_StickMultiplikator:
16 0000 00 .skip 1,0
17 .global GPS_Roll
18 .global GPS_Roll
21 GPS_Roll:
22 0001 0000 .skip 2,0
23 .global GPS_Nick
24 .global GPS_Nick
27 GPS_Nick:
28 0003 0000 .skip 2,0
29 /* File "GPS.c": code 0 = 0x0000 ( 0), prologues 0, epilogues 0 */
DEFINED SYMBOLS
*ABS*:00000000 GPS.c
C:\Temp/ccul2d4o.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccul2d4o.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccul2d4o.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccul2d4o.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccul2d4o.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccul2d4o.s:15 .bss:00000000 GPS_Aid_StickMultiplikator
C:\Temp/ccul2d4o.s:21 .bss:00000001 GPS_Roll
C:\Temp/ccul2d4o.s:27 .bss:00000003 GPS_Nick
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/Hex-Files/Flight-Ctrl_MEGA1284P_V0_90d_SVN.hex
0,0 → 1,4721
:100000000C94F9080C9448090C9448090C9448097C
:100010000C9448090C9448090C9448090C9448091C
:100020000C9448090C94591C0C9448090C944809E8
:100030000C946A360C9448090C9448090C944809AD
:100040000C9448090C9448090C947C180C944809A9
:100050000C94AA0E0C9448090C94740E0C94480944
:100060000C94491F0C9448090C94F0310C944809E5
:100070000C94A08F0C9448090C94CF860C944809DA
:100080000C9448090C9448090C944809701F751F7A
:100090007A1F831F9A1FB11FC11FD11F0C20F5218A
:1000A000B11FB720C820F720152132218C21E7216C
:1000B0000224CF245E25DE251626B926C0282A294B
:1000C000A429ED29372A652A922AF52A3F2B892B64
:1000D000822C0F3243328632F6320E334F330634DF
:1000E000CD34CD34CD34CD34CD34CD34CD34CD3408
:1000F000CD34CD34CD34823484348934A134A33426
:100100002E6AED6A726BA16AC86BF86B626AD06A7C
:10011000D2777078F5785779AB79147A7481957ABB
:10012000C77AC77AC77AC77AC77AC77AC77AC77AC7
:10013000C77AF57A707B057C2A7C6D7CC57C507D06
:10014000397EA07EA07EA07EA07EA07EA07EA07E26
:10015000A07EA07ED87EF67E1B7F777FB37F228035
:100160004F80EF8074814F814F814F814F814F814C
:100170004F814F814F81F38DF68DF68DF68DFF8D7A
:10018000028E058E178E148E0A0D3D3D3D3D3D3D80
:100190003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D8F
:1001A0003D3D3D3D3D3D3D3D3D3D3D3D3D000A0D1F
:1001B000426174743A002025642043656C6C73209E
:1001C00000204C6F77207761726E696E673A202548
:1001D000642E2564000A0D466F756E6420424C2D16
:1001E0004374726C3A20002564000A0D0A0D212127
:1001F000204D495353494E4720424C2D4354524CB5
:100200003A202564202121000A0D43616C69627245
:100210006174696E6720707265737375726520739F
:10022000656E736F722E2E004F4B0A0D000A0D463D
:100230006C696768742D74696D65202575206D691A
:100240006E20546F74616C3A2575206D696E0041A3
:100250006E676C654E69636B202020202020204152
:100260006E676C65526F6C6C20202020202020412E
:1002700063634E69636B20202020202020202041D2
:100280006363526F6C6C20202020202020202048A7
:100290006967687420536574706F696E74202048B4
:1002A00065696768742056616C756520202020435D
:1002B0006F6D7061737320536574706F696E7443F2
:1002C0006F6D706173732056616C756520202043DB
:1002D000757272656E74205B302E31415D20205640
:1002E0006F6C74616765205B302E31565D20204D48
:1002F0006F746F7220312020202020202020204D7C
:100300006F746F7220322020202020202020204D6A
:100310006F746F7220332020202020202020204D59
:100320006F746F7220342020202020202020204D48
:100330006F746F7220352020202020202020204D37
:100340006F746F7220362020202020202020205221
:1003500065636569766572204C6576656C2020471B
:1003600079726F20436F6D70617373202020205964
:1003700061774779726F2020202020202020202EB6
:100380002E2E20202020202020202020202020531E
:100390006572766F202020202020202020202048F9
:1003A0006F76657267617320202020202020202E28
:1003B0002E2E2020202020202020202020202043FE
:1003C00061706163697479205B6D41685D202042D2
:1003D0004C204C696D697420202020202020202E84
:1003E0002E2E202020202020202020202020202EE3
:1003F0002E2E202020202020202020202020202ED3
:100400002E2E2020202020202020202020202041AF
:1004100063635A2020202020202020202020202E0E
:100420002E2E202020202020202020202020204789
:1004300050535F4E69636B202020202020202047EE
:1004400050535F526F6C6C202020202020202021F0
:10045000212120494E434F4D50415449424C4520A3
:10046000212121002A002E000A0D20444143206F43
:100470007220493243204552524F52212043686531
:10048000636B204932432C2033567265662C20441E
:10049000414320616E6420424C2D4374726C005BBA
:1004A00025695D005B25695D002B204D696B726FCE
:1004B0004B6F70746572202B0048573A5625642E96
:1004C00025642053573A25642E256425632056342D
:1004D0000053657474696E673A2564202573004D76
:1004E00069786572204572726F72210045525225FB
:1004F00032643A00486172647761726520457272B5
:100500006F7220313A2564202121004D697373698F
:100510006E6720424C2D4374726C3A256421210091
:10052000493243204552524F5221212100486569EA
:100530006768743A202025356900536574706F69C7
:100540006E743A2535690050726573737572653A39
:10055000253569004F66667365743A202025356934
:100560000048656967687420636F6E74726F6C0011
:1005700044495341424C4544006163742E206265F6
:100580006172696E67004E69636B3A2020202020FB
:100590002025356900526F6C6C3A202020202020E5
:1005A00025356900436F6D706173733A20202025F3
:1005B0003569004B25693A25346920204B25693A75
:1005C00025346920004E693A2534692020526F3A5B
:1005D000253469200047733A253469202047693A59
:1005E000253469200050313A253469202050323AB0
:1005F000253469200050333A253469202050343A9C
:1006000025346920004779726F202D2053656E7361
:100610006F72004E69636B25346920282533692E7B
:1006200025692900526F6C6C2534692028253369AF
:100630002E256929004769657225346920282533EC
:100640006929004E69636B202534692028253369A8
:100650002E25782900526F6C6C20253469202825BE
:1006600033692E25782900596177202025346920A7
:100670002825336929004E69636B202534692028B9
:1006800025336929282533692900526F6C6C202590
:1006900034692028253369292825336929005961BF
:1006A00077202025346920282533692928253369B6
:1006B0002900414343202D2053656E736F72004E15
:1006C00069636B2025346920282533692900526F1E
:1006D0006C6C20253469202825336929005A202094
:1006E000202025346920282533692900566F6C7431
:1006F0006167653A2020202533692E25316956002F
:1007000043757272656E743A2020202533692E2558
:1007100031694100506F7765723A202020202025F2
:10072000346957004469736368617267653A2025CC
:1007300035696D416800526563656976657200527E
:10074000432D525353493A2020202025346900522A
:10075000432D5175616C6974793A202534690052D2
:10076000432D4368616E6E656C733A2534690043AE
:100770006F6D70617373004D61676E65743A202010
:1007800020253569004779726F3A202020202025E6
:10079000356900536574706F696E743A2025356948
:1007A00000506F746925693A202025336900506F25
:1007B000746925693A202025336900536572766F84
:1007C000202000536574706F696E74202025336992
:1007D00000506F736974696F6E3A20253369005257
:1007E000616E67653A2533692D25336900424C2DCA
:1007F0004374726C204572726F72732000253364EB
:100800002025336420253364202533642000424CA6
:100810002054656D7065726174757265002533646E
:100820002025336420253364202533642000424C86
:100830002D4374726C20666F756E642000202563F2
:1008400020202025632020202563202020256320D0
:1008500000202563202020256320202025632020E0
:1008600020256320002025632020202D2020202DFE
:100870002020202D2000313000313100313200465F
:100880006C696768742D54696D65202000546F741D
:10089000616C3A2535756D696E004163743A2020AC
:1008A0002535756D696E0028726573657429000AB7
:1008B0000D47656E65726174696E67206465666177
:1008C000756C7420506172616D657465722053653A
:1008D00074202564000A0D5573696E67205061729B
:1008E000616D6574657220536574202564000A0D7E
:1008F00047656E65726174696E67206465666175CF
:100900006C74204D69786572205461626C65000AD0
:100910000D4D697865722D436F6E6669673A2027C1
:1009200025732720282575204D6F746F7273290059
:100930000A0D414343206E6F742063616C696272DB
:1009400061746564210D0A0000008F001E01AD0175
:100950003B02CA025803E603740402058F051B0616
:10096000A7063307BE074808D2085B09E3096B0AEC
:10097000F20A780BFD0B810C040D860D070E870E15
:10098000060F840F00107B10F5106E11E5115B123D
:10099000CF124213B31323149214FE146A15D31505
:1009A0003B16A11605176717C81727188318DE18F6
:1009B00037198E19E319361A871AD61A231B6E1B9C
:1009C000B61BFD1B411C831CC31C001D3C1D751D5B
:1009D000AB1DE01D121E421E6F1E9A1EC31EE91E95
:1009E0000D1F2E1F4D1F691F841F9B1FB01FC31F8C
:1009F000D31FE11FEC1FF51FFB1FFF1F002000008E
:100A000005000500040106010800060102000400BB
:100A100004000700070007000700070007000700A1
:100A200003010301050017010F01060009010A0176
:100A300019010501050119011A010F0100004E6F8E
:100A4000204572726F722020202020202020004E2E
:100A50006F7420636F6D70617469626C6520200033
:100A60004D4B334D6167206E6F7420636F6D706105
:100A7000004E6F20464320636F6D6D756E69636134
:100A80007400436F6D7061737320636F6D6D756E6D
:100A900069630047505320636F6D6D756E696361C4
:100AA00074696F00636F6D706173732076616C752C
:100AB00065202020005243205369676E616C206CD2
:100AC0006F73742020004643207370692072782071
:100AD0006572726F7220004E6F204E4320636F6DFF
:100AE0006D756E69636174004643204E69636B20C7
:100AF0004779726F2020202000464320526F6C6C93
:100B0000204779726F2020202000464320596177CA
:100B1000204779726F2020202020004643204E6914
:100B2000636B204143432020202020004643205275
:100B30006F6C6C204143432020202020004643203E
:100B40005A2D414343202020202020202000507295
:100B50006573737572652073656E736F72200049DB
:100B600032432046432D3E424C2D4374726C20008C
:100B7000426C204D697373696E672020202020200D
:100B8000004D69786572204572726F7220202020B6
:100B900020004361726566726565204572726F72EE
:100BA00020200047505320466978206C6F737420D2
:100BB000202020004D61676E6574204572726F724F
:100BC00020202020004D6F746F7220726573746155
:100BD000727420202000424C204C696D697461744D
:100BE000696F6E202020004750532052616E676568
:100BF00020202020202020004E6F2053442D4361D0
:100C000072642020202020200053442D4C6F676701
:100C1000696E67206572726F7200466C79696E67E3
:100C20002072616E676521202020004D617820418F
:100C30006C74697475646521202020004E6F204714
:100C400050532066697820202020202000636F6D9B
:100C500070617373206E6F742063616C2E002021AD
:100C600021204C69506F20766F6C7461676520217C
:100C70002120200020202020204D696B726F4B6FB7
:100C80007074657220202020200020202020202049
:100C90002020202020202020202020202020200074
:100CA00020202532692E253169562020002020255C
:100CB00032692E25316956202000414C543A2534A2
:100CC000696D20256300414C543A2534696D20201C
:100CD00000414C543A2D2D2D2D2000202025326925
:100CE0003A2530326920200020202532693A25300B
:100CF00032692020004449523A202533642563009C
:100D000043002000202025356920200020202535A3
:100D100069202000493A2532692E25316941200099
:100D20003A003A003A002D2D2D2D2D2D2D2D2D2B55
:100D30002D2D2D2D2D2D2D2D2D2D2D002D2D2D2D10
:100D40002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DD3
:100D50002D003A005341543A25326420004449534F
:100D6000543A2533646D00442000334400212100AF
:100D70004D41473A25337525252000484D3A253306
:100D800064256320256300696E636C3A253264250F
:100D900063282532692900202020202532756D2FF7
:100DA000733A2020484D3A2533642563202563009B
:100DB0004552523A202532642021004552523A20B1
:100DC000002121204C69506F20766F6C746167653B
:100DD00020212100207777772E4D696B726F4B6F42
:100DE000707465722E6465202000202532693A25D2
:100DF00030326920202532692E253169562025346C
:100E0000696D416800202532693A25303269202019
:100E10002532692E25316956202534696D416800D7
:100E20004449523A253364256300414C543A2534F1
:100E3000696D00414C543A2534696D00414C543A77
:100E40002D2D2D2D2000256300484D3A2533642596
:100E5000632020444953543A2533646D20256300B0
:100E60005057523A2532692E25316941202825698B
:100E7000572920004346002020004750533A25328E
:100E8000756D2F73205341543A2564200020203380
:100E90004420004E4F4649580044475053200020FC
:100EA00020204E6F204E6176694374726C202020A2
:100EB00020202020002532692E2569202532692E28
:100EC0002569202532692E2569202532692E25695C
:100ED00041002533692025336920253369202533D6
:100EE00069256343002532692E2569202532692E44
:100EF000256941002532692E2569202532692E2574
:100F000069202532692E2569202532692E256941FF
:100F100000253369202533692563432020202020C4
:100F200020202000253369202533692025336920BE
:100F3000253369256343004552523A202532642007
:100F400021004552523A20002121204C69506F2047
:100F5000766F6C7461676520212100207777772E8A
:100F60004D696B726F4B6F707465722E64652020D3
:100F70000053657474696E673A25752025732000E7
:100F80004D696E3A2532692E253169562025732028
:100F900000414C543A00504F54493A2533752000D3
:100FA000284F4E29202000284F46462920004C4932
:100FB0004D495400564152494F0044495341424C17
:100FC00045440043463A0044495341424C4544009D
:100FD00020284F4E29200020284F46462900205423
:100FE00045414348004750533A0044495341424C1D
:100FF0004544002846524545290028484F4D45297B
:10100000002841494429200028484F4C4429002009
:1010100046533A257573656B2000484F4D45204176
:101020004C543A0025756D00484F4C4420004E69E1
:101030003A25346920526F3A25346920433A2533E2
:10104000690047733A2534692059613A253469208B
:101050000050313A2534692050323A253469203322
:101060003A2533690050343A2534692050353A2501
:10107000346920363A25336900434F55504C494E68
:1010800047204F46462120004C4F4F50494E4721A4
:1010900020004848212000434F4D50415353204FDA
:1010A0004646212000004F50515253545356574842
:1010B000005859005A5545464748410049424A4A56
:1010C0000000000000000000000000444C4D000043
:1010D0000000004E0000004B00430A0D7777772E8A
:1010E0004D696B726F4B6F707465722E646520284A
:1010F000632920486953797374656D7320476D6265
:1011000048000A0D74686520757365206F66207449
:1011100068697320736F66747761726520697320E4
:101120006F6E6C79207065726D6974746564200AE5
:101130000D6F6E206F726967696E616C204D696B0F
:10114000726F4B6F707465722D4861726477617253
:1011500065005573657200486F5454205634004141
:1011600043542044534C004A657469005370656BC6
:101170007472756D0050504D000A0D5265636569BB
:101180007665723A2000532E42757300756E6B6E51
:101190006F776E2E205573696E672050504D2E2E3E
:1011A0002E006E6F7420737570706F72746564209A
:1011B000627920686172647761726521000A0D4668
:1011C0006C69676874436F6E74726F6C0A0D486166
:1011D0007264776172653A25642E25640A0D536F37
:1011E0006674776172653A5625642E2564256320FE
:1011F000000011241FBECFEFD0E4DEBFCDBF12E050
:10120000A0E0B1E0E0E1F5E201E00BBF02C0079031
:101210000D92A43DB107D9F71BE0A4EDB2E001C0E7
:101220001D92AC3DB107E1F77AEAE2E0F0E081E23D
:1012300080935700D4907E010894E11CF11C20EFAC
:1012400037EF41E050E087016FE0DA01C9012F5F1D
:101250003F4F4F4F5F4FABBFFC018791F801819328
:101260008F01615067FFF1CFF7016EE08191782720
:101270007095615067FFFACF8889781729F0F7E9F0
:10128000DF1611F40000FECF0E941B0A0C94879217
:101290000C94000088E891E09F938F9380E695E19D
:1012A0009F938F93E0913B05F0913C0509950F903A
:1012B0000F900F900F90089580918407E82FFF27DB
:1012C000EE0FFF1FE954F74F808191818D5E9F4F94
:1012D00014F010920201808191818A5B9F4FCCF4BF
:1012E000809102018823A9F481E08093020180911A
:1012F0006F058F5F80936F05853038F088EE93E03F
:10130000909309038093080304C066E970E00E948B
:101310003E3A80916F0599279093070780930607BF
:1013200008951F93CF93DF93182F882389F08EEAB7
:1013300091E09F938F9380E695E19F938F93E09147
:101340003B05F0913C0509950F900F900F900F9081
:101350008091A707823308F044C084EF91E00E9497
:101360006F19EC01112329F0CE010E94781988230E
:10137000D9F3C2E0D0E026E530E080911F019091E2
:1013800020018217930730F02196255D3F4FC7302B
:10139000D10598F38091A7079927C89F9001C99F0D
:1013A000300DD89F300D1124209300011123D9F066
:1013B00068EC70E08C2F0E943E3ADF93CF9386EB6F
:1013C00091E09F938F9380E695E19F938F93E091B7
:1013D0003B05F0913C0509958DB79EB706968DBFEC
:1013E00002C080930001112311F1809100016AE095
:1013F0000E94DA91892F99279F938F938091000102
:101400000E94DA9199279F938F9381EC91E09F93AB
:101410008F9380E695E19F938F93E0913B05F09148
:101420003C0509952DB73EB7285F3F4F2DBFDF9193
:10143000CF911F910895CFEFD0E4DEBFCDBF8824B8
:10144000992414B815B8B7EEEB2EB3E0FB2E2EECB2
:101450003FEFE20EF31EF7FEFACF199B02C085E1C3
:1014600001C086E18093010181E887B93E9A8FEF40
:1014700088B98BE184B981E085B98EE38AB987E4C4
:101480008BB9469A84B7877F84BF8091600088615A
:10149000809360001092600084EC99E090930903BF
:1014A0008093080310921404109213041092BC0845
:1014B0001092BB0810921604109215041092180492
:1014C0001092170420910101243128F084EC94E05B
:1014D000A0E0B0E004C08BE095E0A0E0B0E0809335
:1014E0003C0190933D01A0933E01B0933F012A300F
:1014F00011F0243110F0289801C0289A2C3010F0F7
:10150000263111F4299A01C029980E94D8190E9405
:10151000A9190E9468150E9441360E94DA1D81E0D7
:101520000E94A4310E94C0680E9477720E946B8E54
:10153000809101018C3010F0863111F4299A01C09C
:10154000299878940E94C33080914D0382608093E3
:101550004D03109250030E948A4584EF91E00E944F
:101560006F197C0180914D0380FD05C0C7010E9469
:1015700078198823B9F385ED91E09F938F93A0E6C6
:10158000AA2EA5E1BA2EBF92AF92E0913B05F09151
:101590003C05099580EA9FE00E946F197C01C0E03C
:1015A000D0E00F900F900F900F9009E518E0FDE04C
:1015B000CF2EF8E0DF2E0E948A4580914D0380FDFA
:1015C00005C0C7010E9478198823B9F3F60180810C
:1015D0001816ACF40BC00E948A4580914D0380FD23
:1015E00005C0C7010E9478198823B9F3C7010E947A
:1015F0007819882321F4F8018081882364F7F801A1
:10160000808187FF19C02196DF93CF93219787EEC2
:1016100091E09F938F93BF92AF92E0913B05F09141
:101620003C0509958091D5028F5F8093D5022DB737
:101630003EB72A5F3F4F2DBF219684E090E0C80E51
:10164000D91E085F1F4FCC30D10508F4B4CFC0E0DD
:10165000D0E006E518E0EDE0EE2EE8E0FE2EF80121
:10166000838187FD1DC0F70180811816CCF4219677
:10167000DF93CF9321978AEE91E09F938F9380E63B
:1016800095E19F938F93E0913B05F0913C0509957F
:1016900082E0809306032DB73EB72A5F3F4F2DBFF0
:1016A000F801838180788383219624E030E0E20E84
:1016B000F31E085F1F4FCC30D10588F20E944A0903
:1016C000909182078091D502981728F48091550552
:1016D00080618093550588E092E09F938F93C0E6E8
:1016E000D5E1DF93CF93E0913B05F0913C0509955F
:1016F00088EE93E00E946F197C010E94E01D0F901C
:101700000F900F900F90C7010E9478198823D9F38A
:1017100088E292E09F938F93DF93CF93E0913B0514
:10172000F0913C05099580E00E94223B80910101E7
:101730000F900F900F900F908A3011F0843110F0BD
:10174000289801C0289A80ED97E090930903809330
:10175000080385E5809371058EE090E00E94E72EF6
:101760009927182F00278FE090E00E94E72E080F9E
:10177000111D1093DB020093DA028AE090E00E94D0
:10178000E72E9927182F00278BE090E00E94E72E84
:10179000080F111D1093D9020093D8020F5F1F4F3D
:1017A00039F08091DA029091DB028F5F9F4F41F414
:1017B0001092DB021092DA021092D9021092D80233
:1017C0008091D8029091D9029F938F938091DA02F1
:1017D0009091DB029F938F938DE292E09F938F9382
:1017E000DF93CF93E0913B05F0913C0509950E9472
:1017F000742388E893E19093370180933601C1E028
:10180000C09370058C2F0E9491098091AA070E94B5
:10181000B78D0E944A0980ED97E00E946F197C0104
:101820008AEF90E00E946F1983E08093DE061092A9
:10183000D4028091F1072DB73EB7285F3F4F2DBFEF
:1018400084FF02C0C093DC028091DE02882311F085
:101850004798FECF80910C03882309F43DC2809104
:101860001101882309F438C210920C0380916F058E
:10187000882319F00E945C0902C00E94C9480E9496
:101880008A45209101012A3011F0243110F0289866
:1018900001C0289A80910704882331F080910704C1
:1018A0008150809307040EC080916F008062809306
:1018B0006F001092B8081092B708809155058860A3
:1018C000809355058091360190913701019790934F
:1018D0003701809336018091360190913701892B31
:1018E00021F080914E038823C9F1809136019091B7
:1018F0003701892BD9F40E94CE3185E090E0909396
:10190000370180933601809118079091190701964D
:1019100090931907809318078091550581608093F3
:1019200055058091DF0682608093DF068091090172
:1019300090910A018F5F9F4FC1F480910604882324
:10194000A1F088EA91E6909309038093080380E868
:1019500090E090930A018093090107C02A3011F0AA
:10196000243110F0289801C0289A0E94238F80917A
:101970000C03882309F0B0C180911C05882319F05D
:101980000E94F881A9C180910F01882311F00E9463
:10199000311A0E94AC150E94FA10C7010E947819F2
:1019A000882309F495C184E190E0E80EF91E0E94B5
:1019B000EF198091AA07863019F40E94967704C027
:1019C000843011F40E94C88280914E03882349F02C
:1019D000809155058260809355058091DF06826075
:1019E0000FC08091080390910903892B59F48091CD
:1019F000360190913701079728F08091DF068D7F9F
:101A00008093DF068091DC02882361F080910704D7
:101A1000873940F01092DC0288E893E19093090343
:101A20008093080380910401882321F081508093E2
:101A300004012EC080937B051092DB031092DA0321
:101A40001092D9031092D8031092D7031092D603A4
:101A5000809107048823E1F48091090190910A01A3
:101A60008F5F9F4FA9F42091DC02223089F088E932
:101A70009AE3909309038093080380E09CE090939D
:101A80000A0180930901222319F082E08093DC028D
:101A900080919701893C48F0815080939701809113
:101AA00055058B7F809355053FC080919809882309
:101AB000F9F08091550584608093550589E0809305
:101AC000E2048091090190910A018F5F9F4F81F498
:101AD00080910604882361F088E99AE390930903D2
:101AE0008093080380E098EA90930A0180930901AB
:101AF0001092D4041092D3041092D2041092D10404
:101B00001092D00410928B091092CA091092C90940
:101B10001092CC091092CB098FEF9FEF9093C809D8
:101B20008093C7091092970180910001282F3327D5
:101B300080911F019091200182179307CCF480912E
:101B4000CF0380628093CF038091090190910A01B5
:101B50008F5F9F4FC1F480E797E1909309038093D3
:101B6000080380E093E090930A01809309010BC081
:101B70008091080390910903892B29F48091CF0368
:101B80008F7D8093CF030E94B76D84E0809307031D
:101B90008091DD028F5F8093DD02813309F04FC0B9
:101BA0001092DD028091CF0381FF0AC08091D6029E
:101BB0009091D70201969093D7028093D6023FC0AE
:101BC0005AEA852E55E0952E809127079091280797
:101BD0009C01442737FD4095542F80911701909127
:101BE0001801A0911901B0911A01281739074A0765
:101BF0005B0734F4809127079091280701961BC05A
:101C000080912707909128079C01442737FD409534
:101C1000542F8091170190911801A0911901B09152
:101C20001A0182179307A407B5074CF48091270780
:101C3000909128070197909328078093270708948D
:101C4000811C911C32E783163BE0930609F040C0EB
:101C5000882499242091DA023091DB022F5F3F4FD4
:101C60003093DB022093DA028091D8029091D9025E
:101C700001969093D9028093D802832F9927682FD9
:101C80008EE090E00E94EF2E8091DA029091DB02CC
:101C90009070682F8FE090E00E94EF2E8091D80224
:101CA0009091D902892F9927682F8AE090E00E94AD
:101CB000EF2E8091D8029091D9029070682F8BE01E
:101CC00090E00E94EF2E84E190E00E946F197C0169
:101CD0000E94076E0E948E7280910703882309F08C
:101CE000B3CD0E94E168B0CD1F920F920FB60F9254
:101CF00011248F939F93EF93FF9380910601882384
:101D0000E1F48091F8029091F90201969093F90222
:101D10008093F802FC01E15DF94FE081ED3019F0AC
:101D20008F3A910539F41092F9021092F80281E08D
:101D300080930601E093C60004C01092F90210924D
:101D4000F802FF91EF919F918F910F900FBE0F902E
:101D50001F9018951F920F920FB60F9211242F9378
:101D60003F934F935F936F937F938F939F93AF9323
:101D7000BF93CF93EF93FF9390E08091DE02813089
:101D800029F48091C6008093CE00CCC08091DE0201
:101D9000823029F48091C60080937E05C3C0809173
:101DA000C6008093F0025091FE025F3A10F09093CB
:101DB000FF028091F0028D3009F065C08091FF0232
:101DC000823009F060C09093FF02852F99278258D6
:101DD0009A4FFC01329740812091FA023091FB0228
:101DE000241B3109DC0111978C91281B3109C90191
:101DF0009F709093FB028093FA0246E09695879538
:101E00004A95E1F7982F935C9093FC022F73307002
:101E1000235C2093FD028081981729F48C91281768
:101E200011F491E006C090E08091ED028F5F809305
:101E3000ED02C091EF02CC2309F074C0992309F49C
:101E400071C081E08093EF02580F5093EC02515023
:101E5000E52FFF27E258FA4F8DE0808380918005BF
:101E6000823509F05FC00E94742388E190E02CE085
:101E70000FB6F894A895809360000FBE2093600081
:101E8000C09306034FC02091FF02822F9927813013
:101E90009105F9F0823091051CF4892B21F040C0A6
:101EA000029711F13DC08091F002833239F48091A4
:101EB000EF02882319F481E08093FF028091F00201
:101EC00080937E0581E08093FE028091F002992745
:101ED00022C02F5F2093FF02E52FFF27E258FA4F21
:101EE0008091F002808309C0E52FFF27E258FA4F66
:101EF0008091F00280835F3A20F45F5F5093FE028E
:101F000002C01092FF022091F0028091FA0290919B
:101F1000FB02820F911D9093FB028093FA0202C094
:101F20001092FF02FF91EF91CF91BF91AF919F91DE
:101F30008F917F916F915F914F913F912F910F9072
:101F40000FBE0F901F901895AC01A0E0B0E09D016E
:101F5000A817B90748F4EFE2F6E08191280F311D88
:101F60001196A417B507C8F33F70FD01E15DF94F65
:101F7000C90156E0969587955A95E1F7835C808371
:101F80001196FD01E15DF94F2F733070822F835C54
:101F90008083A05DB94F8DE08C93109206018091F3
:101FA0002F068093C6000895A0E0B0E0EAEDFFE0C0
:101FB0000C9453922C859D850E85BB2483E28093DF
:101FC0002F069F59909330062093310633E0E32E7D
:101FD000F12C002309F49EC0CF84D888BE016D5E29
:101FE0007F4FA989BA890150109709F493C01097BF
:101FF000B9F0F601EB0DF11DB3949081119791F4B6
:10200000002349F1FB016E5F7F4FDB01C080D1806F
:102010006E5F7F4F0D90BC91A02DBB24015002C07C
:1020200090E019C01097B9F0F601EB0DF11DB394D3
:102030004081119791F4002341F1FB016E5F7F4FC6
:10204000DB01C080D1806E5F7F4F0D90BC91A02DD1
:10205000BB24015002C040E018C01097B1F0F60157
:10206000EB0DF11DB3941081119781F4002371F0F1
:10207000FB013296DB01CD90DC90BF016E5F7F4F9C
:10208000A081B181BB24015001C010E0F701E15DE6
:10209000F94F892F86958695835C80830894E11C8F
:1020A000F11CF701E15DF94F892F9927837090703A
:1020B00024E0880F991F2A95E1F755279A0194E0AB
:1020C000369527959A95E1F7822B835C8083089457
:1020D000E11CF11CF701E15DF94F4F705070440FA6
:1020E000551F440F551F812F992726E096958795F8
:1020F0002A95E1F7842B835C80830894E11CF11C12
:10210000F701E15DF94F1F73135C10830894E11C24
:10211000F11C6ACFC7010E94A40FE9E00C946F92F2
:10212000A3E07A2F4091EC024650442309F458C0B2
:10213000E72FFF27E258FA4F80818D537F5FE72F0B
:10214000FF27E258FA4F20812D537F5FE72FFF27AB
:10215000E258FA4F30813D537F5FE72FFF27E25867
:10216000FA4F60816D537F5F9927880F991F880F01
:10217000991F522F52955F70582B822F99278F707D
:102180009070F4E0880F991FFA95E1F7232F2695B8
:102190002695282B832F992783709070E6E0880F6F
:1021A000991FEA95E1F7682B41504F3FC9F0EA2F9C
:1021B000FF27E258FA4F5083AF5F41504F3F81F005
:1021C000EA2FFF27E258FA4F2083AF5F41504F3F7D
:1021D00039F0EA2FFF27E258FA4F6083AF5FA5CFAF
:1021E00081E895E09093EB028093EA02A350A093DC
:1021F000E9020895A2E0B0E0E0E0F1E10C94599228
:102200008091EF02882309F457C40E9490108091B6
:102210007F05823609F023C3809180059927803796
:10222000910509F4AFC081379105C4F48A36910550
:1022300009F480C28B36910544F48B34910571F119
:102240008636910509F45FC10AC38D36910509F4FC
:1022500069C08E36910509F44DC001C384379105DC
:1022600041F1853791054CF48137910509F491C00E
:102270008337910509F4DFC0F2C28737910509F46D
:102280001BC2883791052CF48537910509F4D7C115
:10229000E6C28937910509F46DC1E1C2E091EA0215
:1022A000F091EB0280819181909389018093880164
:1022B000D6C28091EC02A091EA02B091EB02853186
:1022C00040F080E1E9E5F5E00D9001928A95E1F7B3
:1022D0000DC08D919D910D90BC91A02D80935905BD
:1022E00090935A05A0935B05B0935C0580EF8093B3
:1022F000E7024BC0809106018823E1F38DE490E072
:102300009F938F9380E098E09F938F9381E08F93CA
:102310008F938EE48F930E94D40F8DB79EB707964C
:102320008DBF9DC2A091EA02B091EB021C911130C9
:1023300081F48DE4E0E0F8E00D9001928A95E1F7F8
:102340000E9400301983809155058F7E809355053A
:1023500001C01982809106018823E1F381E090E0B9
:102360009F938F93CE0101969F938F9381E08F93DC
:102370008F938DE48F930E94D40FADB7BEB717969D
:10238000ADBF6DC281E08093F2028FEF80930401B4
:1023900066C2E091EA02F091EB02E0818E2F8A5052
:1023A0008A3058F48983882311F481E003C0863091
:1023B00010F085E0898361E00EC08E2F84518A3051
:1023C00070F48983882311F481E003C0863010F013
:1023D00085E0898360E089810E94803012C0E983B2
:1023E000EF3F19F40E94633089838981882311F4B7
:1023F00081E003C0863010F085E0898389810E94E6
:10240000052F809106018823E1F38CE790E09F93EC
:102410008F9383E897E09F938F9381E090E09F9361
:102420008F93CE0101969F938F9382E08F9381E0EB
:102430008F9381E577C12091EA023091EB02D901B7
:102440008C918150853008F045C0F90181818C352F
:1024500009F040C0809106048823E1F52F5F3F4FCB
:102460008CE7E3E8F7E0D9010D9001928A95E1F756
:10247000F90182910E94702F8091C4079927AA27A1
:10248000BB27BC01CD0124EC39E040E050E00E94C4
:10249000BB91DC01CB018093800190938101A093DB
:1024A0008201B09383018091C5079927AA27BB2792
:1024B000BC01CD010E94BB91DC01CB0180937C016A
:1024C00090937D01A0937E01B0937F010E946330C1
:1024D000898301C01982809106018823E1F381E09C
:1024E00090E09F938F93CE0101969F938F9381E00D
:1024F0008F938F9383E58F930E94D40F8DB79EB7F0
:1025000007968DBF26C0E091EA02F091EB02E081D0
:102510008E2F8150853018F48E2F0E94052F0E9437
:1025200063308983809106018823E1F381E090E0A4
:102530009F938F93CE0101969F938F9381E08F930A
:102540008F9386E48F930E94D40FADB7BEB71796D2
:10255000ADBF80910604882329F46EE670E089817E
:102560000E943E3A80E00E9491098091AA070E9451
:10257000B78D75C1E091EA02F091EB028081992755
:1025800087FD90959093D2088093D10881819927F7
:1025900087FD90959093D4088093D30882819927E2
:1025A00087FD90959093D6088093D50883819927CD
:1025B00087FD90959093D8088093D70884819927B8
:1025C00087FD90959093DA088093D90885819927A3
:1025D00087FD90959093DC088093DB08868199278E
:1025E00087FD90959093DE088093DD088781992779
:1025F00087FD90959093E0088093DF088085992768
:1026000087FD90959093E2088093E1088185992752
:1026100087FD90959093E4088093E308828599273D
:1026200087FD90959093E6088093E5088385992728
:1026300087FD90959093E8088093E70810C1E0919A
:10264000EA02F091EB0280810E949A358A83882306
:1026500019F481E0898301C01982809106018823E1
:10266000E1F388E090E09F938F938EE498E09F934E
:102670008F9321E030E03F932F938091EA02909175
:10268000EB029F938F933F932F93CE0102969F93DC
:102690008F933F932F93CE01820F931F9F938F931E
:1026A00084E08F9381E08F9385E58F930E94D40F10
:1026B000EDB7FEB773963CC08091E902893008F40B
:1026C000CEC02091EA023091EB022F5F3F4F88E0AD
:1026D000AEE4B8E0F90101900D928A95E1F7D901D5
:1026E0008E910E94F0348A83882319F481E08983D3
:1026F00001C01982809106018823E1F321E030E0D6
:102700003F932F93CE0102969F938F933F932F93E6
:10271000CE01820F931F9F938F9382E08F9381E06E
:102720008F9387E58F930E94D40FEDB7FEB73B964A
:10273000EDBF95C080910604882309F090C00E94E7
:102740006A8D8983823019F0843009F088C020E4D2
:1027500030E0F8948091C1008F738093C100809124
:10276000C9008F738093C9008091C100877E8093D8
:10277000C1008091C900877E8093C9008091C80004
:1027800087FF03C08091CE00F9CF8091C00087FF02
:1027900003C08091C600F9CFE091EA02F091EB020C
:1027A000E081E13021F482E08093DE022EC0E43645
:1027B00011F421E830E081E08093DE02832F992735
:1027C0008093CD002093CC008091CD008093C500F4
:1027D0008091CC008093C4008091CA008F7D80934B
:1027E000CA008091CA008F7E8093CA008091C90080
:1027F0008B7F8093C9008091CA0084608093CA0057
:102800008091CA0082608093CA008091CA00877F4D
:102810008093CA008091C200877F8093C20080911C
:10282000C9008E7F8093C9008091C1008861809328
:10283000C1008091C90088618093C9008091C10066
:1028400080688093C1008091C90080688093C9002E
:1028500010926E0010926F00109270007894809128
:10286000800599278436910509F4BBC0853691050A
:10287000ACF48136910509F46FC0823691052CF4D1
:102880008B34910509F45DC00FC18236910509F4BE
:1028900070C08336910509F47FC006C18C3691055E
:1028A00009F4EDC08D3691054CF48736910509F495
:1028B000F8C08836910509F4B2C0F6C08437910596
:1028C00029F08637910509F4E8C0EEC08091EC024A
:1028D000A091EA02B091EB02803140F080E1E9E59D
:1028E000F5E00D9001928A95E1F70DC08D919D91D3
:1028F0000D90BC91A02D8093590590935A05A093FB
:102900005B05B0935C05809106018823E1F31F927B
:10291000809103018F9384E58F930E94D40F8AEFF7
:102920008093E7028FEF8093040180EA9FE00E948A
:102930006F199093E0028093DF020F900F900F9039
:10294000B3C0E091EA02F091EB0280819181909313
:10295000890180938801A8C0E091EA02F091EB021E
:10296000808180930501803298F08FE1809305018A
:102970000FC0A091EA02B091EB028BE0E1E7F5E035
:102980000D9001928A95E1F780917A058093200756
:102990008FEF8093040188C08091E3029091E4025C
:1029A000892B89F4E091EA02F091EB02E081EE23B9
:1029B00051F08AE0E89FC00111240E946F199093A2
:1029C0004C0580934B05E091EA02F091EB02908177
:1029D0008AE0989FC00111249093E4028093E3025F
:1029E00015C08FEF80930401E091EA02F091EB02B1
:1029F00090818AE0989FC00111249093E602809311
:102A0000E502892B19F081E08093F40280EA9FE0CF
:102A10000E946F199093E0028093DF0245C08FEF10
:102A200080930401E091EA02F091EB02908197FD1E
:102A300008C082E08093F1021092E2021092E1025B
:102A40001AC0909580914603892B8093460391810B
:102A50008AE0989FC00111249093E2028093E102E2
:102A600084E08093F10280EA9FE00E946F199093C6
:102A7000E0028093DF0281E08093F50215C08FEFC2
:102A800080930401E091EA02F091EB02808180934F
:102A9000470381E08093F60207C081E08093F30250
:102AA00003C081E08093F7021092EF021092EB02D4
:102AB0001092EA021092E902E3E0CE5F0C94759264
:102AC000982F8091C00085FFFCCF9093C600089599
:102AD0000F931F9388E18093C1008091C0008260B2
:102AE0008093C0008091C10080688093C100809174
:102AF000C10080648093C10000E010E00093C50035
:102B00008AE290E08093C4008091E5029091E60211
:102B10000E946F1990934E0580934D058CED90E0C7
:102B20000E946F1990937D0580937C0510924F054C
:102B30008AE58093500583E0809353058BE0809372
:102B40005105109252051093EB020093EA02109285
:102B5000E9021F910F910895A0E1B0E0E2EBF5E1E9
:102B60000C94569280910601882309F4C1C2809189
:102B7000DF029091E0020E947819882361F01092A0
:102B8000E2021092E1021092E6021092E502109227
:102B9000E4021092E3028091E1029091E202892B1B
:102BA00041F080912D0690912E060E94781988237D
:102BB00029F48091F502882309F460C08091060110
:102BC000882309F45BC08091F10202E317E08430AE
:102BD000A8F00E948A2380E590E09F938F931F9333
:102BE0000F9381E08F938F9388E48F930E94D40F8B
:102BF0002DB73EB7295F3F4F2DBF34C01092480319
:102C00008FE494E09F938F938DE793E29F938F934C
:102C1000E0913B05F0913C05099584E190E09F939C
:102C20008F931F930F9381E090E09F938F9381EF99
:102C300092E09F938F9382E08F9381E08F9388E45B
:102C40008F930E94D40F8091F102982F8F5F809311
:102C5000F1022DB73EB7215F3F4F2DBF943010F0EA
:102C60001092F1028091E1029091E2020E946F19AC
:102C700090932E0680932D061092F5028091F60215
:102C8000882351F180910601882331F10E948A2323
:102C900080E590E09F938F9382E397E09F938F93DB
:102CA00021E030E03F932F9381E291E09F938F9357
:102CB0003F932F9387E493E09F938F9383E08F93C9
:102CC00081E08F938CE48F930E94D40F1092F602D0
:102CD0008DB79EB70F968DBF8091F3028823D1F0F8
:102CE000809106018823B1F08AE090E09F938F9352
:102CF0008FE495E09F938F9381E08F938F9386E588
:102D00008F930E94D40F1092F3022DB73EB7295F24
:102D10003F4F2DBF8091F7028823D9F080910601A3
:102D20008823B9F08BE090E09F938F9381E795E043
:102D30009F938F9381E08F93809103018F9387E41A
:102D40008F930E94D40F1092F7028DB79EB707960B
:102D50008DBF80917C0590917D050E947819882314
:102D600009F461C080910601882309F45CC0809158
:102D70009F079927880F991F880F991F7C010027AB
:102D8000F7FC0095102F8091610490916204A0914E
:102D90006304B0916404BC01CD01A80197010E94B5
:102DA0002F9230936A052093690580915904909180
:102DB0005A04A0915B04B0915C04BC01CD01A80150
:102DC00097010E942F9230936C0520936B058091A0
:102DD000E40380936D058091E30380936E0588E0A2
:102DE00090E09F938F9389E695E09F938F9381E086
:102DF0008F9383E08F938BE68F930E94D40F809103
:102E00006F052DB73EB7295F3F4F2DBF853018F0B6
:102E100086E080936F0583E690E00E946F1990939F
:102E20007D0580937C058091E5029091E602892BD7
:102E300041F080914D0590914E050E9478198823AC
:102E400021F48091F402882339F1809106018823CE
:102E500019F10E94EE3882E490E09F938F938EEDFB
:102E600096E09F938F9381E08F938F9384E48F9369
:102E70000E94D40F1092F4028DB79EB707968DBFB3
:102E80008091E5029091E602009731F00E946F195F
:102E900090934E0580934D058091E3029091E4025A
:102EA000892B09F4B8C080914B0590914C050E9484
:102EB0007819882309F4AFC080910601882309F4AA
:102EC000AAC080919F079927880F991F880F991F83
:102ED0007C010027F7FC0095102F809161049091F0
:102EE0006204A0916304B0916404BC01CD01A80107
:102EF00097010E942F9230933E0520933D058091CB
:102F0000590490915A04A0915B04B0915C04BC01F7
:102F1000CD01A80197010E942F9230934005209384
:102F20003F0520918009309181094091820950919B
:102F30008309DA01C90163E0880F991FAA1FBB1F2B
:102F40006A95D1F7820F931FA41FB51F820F931F9D
:102F5000A41FB51F20913C0130913D0140913E01DD
:102F600050913F01BC01CD010E942F923093420548
:102F7000209341058091290490912A04A0912B046B
:102F8000B0912C0449E0B595A795979587954A95FA
:102F9000D1F7809343058091250490912604A09158
:102FA0002704B091280439E0B595A79597958795A2
:102FB0003A95D1F780934405809131049091320481
:102FC000A0913304B091340429E0B595A795979565
:102FD00087952A95D1F7809345058EE090E09F93E1
:102FE0008F938DE395E09F938F9381E08F938F93E1
:102FF00083E48F930E94D40F8091E3029091E402C6
:103000000E946F1990934C0580934B052DB73EB7E6
:10301000295F3F4F2DBF809105018F3F71F19927A7
:1030200004E0880F991F0A95E1F7815B9D4F40E10D
:1030300050E0BC01CE0101960E94059080E190E035
:103040009F938F93CE0101969F938F9381E090E0A1
:103050009F938F9385E091E09F938F9382E08F936E
:1030600081E08F9381E48F930E94D40F8FEF809340
:1030700005018DB79EB70B968DBF809120078823E1
:10308000D1F0809106018823B1F081E090E09F9318
:103090008F9380E297E09F938F9381E08F938F933C
:1030A00082E48F930E94D40F109220072DB73EB771
:1030B000295F3F4F2DBF8091F2028823C9F0809194
:1030C00006018823A9F084E390E09F938F9387EB18
:1030D00098E09F938F9381E08F938F9380E58F93F8
:1030E0000E94D40F1092F2028DB79EB707968DBF43
:1030F000E6E0C05F0C9472921F920F920FB60F928F
:1031000011242F933F935F936F937F938F939F939C
:10311000AF93BF93EF93FF9320E080910703882341
:1031200029F0809107038150809307038091F60472
:10313000882319F081508093F60480910F03815009
:1031400080930F038F3F09F05BC089E080930F03EA
:1031500080910D0390910E03019690930E0380933E
:103160000D03809110018F5F81708093100188237F
:1031700019F481E080930C03349903C081E08093BB
:1031800010038091080390910903892B21F180910C
:103190000803909109030B9750F0809108039091D8
:1031A00009030A97909309038093080304C01092BF
:1031B000090310920803809108039091090320915C
:1031C000090130910A0182239323892B11F021E018
:1031D00008C020E006C08FEF9FEF90930A01809314
:1031E000090180910101222331F08A3011F45A9AA9
:1031F00007C0479A05C08A3011F45A9801C0479811
:1032000080911003882309F45AC02091970122234A
:1032100009F055C08091700983FF51C086B199278C
:10322000FC01E071F07084FF13C080910A0390915B
:103230000B03019690930B0380930A0380910A037A
:1032400090910B03895E9340D0F12093100337C017
:1032500080910A0390910B03892B69F180910A03F5
:1032600090910B038A56914030F580910A0390911A
:103270000B0369E270E00E94E69180910A0390914D
:103280000B03860F971F90930B0380930A03809183
:103290000A0390910B030B9750F080910A039091D1
:1032A0000B030A97909389018093880104C0F093DF
:1032B0008901E093880110920B0310920A03FF9199
:1032C000EF91BF91AF919F918F917F916F915F919E
:1032D0003F912F910F900FBE0F901F901895209146
:1032E0000D0330910E03280F391FC901019608956F
:1032F00020910D0330910E03821B930B892F992788
:103300008695807490700895CF93DF930E946F1913
:10331000EC01CE010E9478198823D9F3DF91CF9177
:103320000895CF93DF930E946F19EC0109C080913B
:103330001101882329F0909311018FEC80937A007A
:10334000CE010E947819982F882389F3DF91CF91BD
:1033500008959FB7F8945F983E9A469A8091B0007E
:103360008F708093B0008091B00083608093B00034
:103370008091B1008B738093B1008091B1008B601C
:103380008093B1001092B2008FEF8093B3008091D0
:10339000B00080688093B000809170008A7F809335
:1033A0007000809170008260809370009FBF0895CC
:1033B0008AE090E00E946F19909322078093210782
:1033C00082E085BD83EA84BD17BC84EB88BD86E0BE
:1033D00086BD80916E00816080936E00089580911B
:1033E000F0072091670182FF30C09091B3078CE312
:1033F000989FB00111249091B20780E5989FA00199
:103400001124922F905897FD9D5F9595959586E094
:103410009802C00111242091070130910801281B56
:10342000390B3093080120930701421753072CF002
:10343000509308014093070108952617370784F039
:1034400070930801609307010895822F992736E051
:10345000880F991F3A95E1F790930801809307012F
:103460000895A0E0B0E0E7E3FAE10C945592809172
:10347000BA07E82FFF27EE5BFE4F9681D080809140
:103480000F01A92FBB27A7FDB095CB2FDB2F8130D4
:1034900009F017C1209161043091620440916304E6
:1034A00050916404BD01CE010E94BB9197FF04C0FE
:1034B00061587F4F8F4F9F4F7B018C01C7E015955F
:1034C0000795F794E794CA95D1F78D2D992787FD35
:1034D0009095A92FB92F2091590430915A04409109
:1034E0005B0450915C04BC01CD010E94BB9197FF2D
:1034F00004C061587F4F8F4F9F4FB7E095958795D8
:1035000077956795BA95D1F7F801E701C61BD70BF8
:10351000E80BF90B2091DB043091DC04C901A3E036
:10352000880F991FAA95E1F7821B930BAA2797FD95
:10353000A095BA2FC81BD90BEA0BFB0B8091B107E2
:103540009927AA27BB27BC01CD019E01AF010E948C
:10355000BB9197FF04C061507E4F8F4F9F4FFC017E
:10356000EB0179E0F595E795D795C7957A95D1F771
:103570001091F007609107017091080112FF05C0DA
:1035800070930E0160930D0118C040910D01509190
:103590000E018091B907282F3327CB01841B950B8F
:1035A000B9010E94FA9180910D0190910E01860F50
:1035B000971F90930E0180930D0110FF14C080910E
:1035C0000D0190910E0197FD0F9664E095958795FA
:1035D0006A95E1F7AA2797FDA095BA2FC80FD91FC2
:1035E000EA1FFB1F15C080910D0190910E0197FD00
:1035F0000F9654E0959587955A95E1F7AA2797FD80
:10360000A095BA2F8C1B9D0BAE0BBF0BFD01EC01DF
:103610002091ED07222321F133278091020390911D
:103620000303829FA001839F500D929F500D112490
:10363000CA01AA2797FDA095BA2F8C0F9D1FAE1F18
:10364000BF1F2F5F3F4F442737FD4095542FBC01CC
:10365000CD010E942F92309303032093020304C0F4
:10366000D0930303C09302038091B207282F33271E
:10367000220F331F220F331F809102039091030307
:10368000821793077CF08091B307282F3327220FEE
:10369000331F220F331F80910203909103032817D9
:1036A000390724F43093030320930203809101012E
:1036B000843108F4F7C080910F018F5F80930F0170
:1036C000F3C02091590430915A0440915B04509109
:1036D0005C04BD01CE010E94BB9197FF04C06158FC
:1036E0007F4F8F4F9F4F7B018C0187E0159507958A
:1036F000F794E7948A95D1F78D2D992787FD9095BA
:10370000A92FB92F20916104309162044091630484
:1037100050916404BC01CD010E94BB919B01AC019E
:1037200097FF04C021583F4F4F4F5F4FC7E055955B
:10373000479537952795CA95D1F72E0D3F1D401F08
:10374000511F8091B5079927AA27BB27BC01CD013E
:103750000E94BB9197FF04C061507E4F8F4F9F4FD7
:10376000FC01EB01B9E0F595E795D795C795BA95BA
:10377000D1F7809166019927A6E0880F991FAA9535
:10378000E1F740910B0150910C012091B9073327CB
:10379000841B950BB9010E94FA9180910B019091C5
:1037A0000C01860F971F90930C0180930B01809161
:1037B000F00781FF14C080910B0190910C0197FDDF
:1037C0000F9674E0959587957A95E1F7AA2797FD6E
:1037D000A095BA2FC80FD91FEA1FFB1F15C08091F3
:1037E0000B0190910C0197FD0F9664E095958795DC
:1037F0006A95E1F7AA2797FDA095BA2F8C1B9D0B20
:10380000AE0BBF0BFD01EC012091EE07222321F14D
:1038100033278091000390910103829FA001839F31
:10382000500D929F500D1124CA01AA2797FDA09513
:10383000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442716
:1038400037FD4095542FBC01CD010E942F9230933B
:1038500001032093000304C0D0930103C09300032D
:103860008091B607282F3327220F331F220F331FD3
:103870008091000390910103821793077CF080915F
:10388000B707282F3327220F331F220F331F8091B2
:103890000003909101032817390724F430930103A2
:1038A0002093000310920F01E7E0CDB7DEB70C9430
:1038B00071921F920F920FB60F9211242F933F9384
:1038C0004F935F938F939F93EF93FF9380910101A9
:1038D00090911103843108F04CC0992309F029C15B
:1038E0008091B00086FF24C08091B0008F7B8093D0
:1038F000B000809102039091030387559E4F9093EF
:1039000005038093040325E08D3D920718F08CEDAC
:1039100095E005C08757914030F487E791E0909398
:103920000503809304038091040390910503C2C0B2
:103930008091B00080648093B0008091B807282FF8
:1039400033278DED96E0289FA001299F500D389FC9
:10395000500D1124CA012091120330911303821BD0
:10396000930B909305038093040381E080930F01F0
:10397000DDC0992309F0DDC08091B00086FF9FC0B3
:103980008091B0008F7B8093B000E0911403209170
:10399000B807EE23D9F433278DED96E0289FA001D8
:1039A000299F500D389F500D1124CA0120911203F8
:1039B00030911303821B930B9093050380930403B0
:1039C0001092130310921203469AB0C02E1738F4C7
:1039D0008AE090E09093050380930403A7C089EAEE
:1039E00093E090930503809304038E2F99278330EF
:1039F0009105D9F08430910534F48130910549F076
:103A0000029761F020C08430910591F0059799F0FC
:103A10001AC0809102039091030304C080910003B7
:103A20009091010387559E4F1DC080914C0905C0A0
:103A30008091250902C0809155099927880F991F07
:103A4000880F991FEFCFFF27EE0FFF1FE954F74FA5
:103A500020813181220F331F80910403909105034F
:103A6000820F931F909305038093040380910403B6
:103A70009091050355E08D3D950718F08CED95E08C
:103A800005C08757914030F487E791E09093050394
:103A90008093040320910403309105032C5B304094
:103AA0003093050320930403809112039091130334
:103AB000820F931F909313038093120337C080915A
:103AC000B00080648093B0008CEB90E0909305038D
:103AD00080930403809112039091130384549F4FA9
:103AE000909313038093120380910603882321F09F
:103AF00080910704882321F480910603823011F419
:103B0000469801C0469A809114038F5F80931403F6
:103B1000282F33278091B80799270196821793079A
:103B20002CF481E080930F011092140381E08093C4
:103B30001103209104033091050341E02F3734072E
:103B400030F08FEF8093B3002F5F30400FC02F3FD6
:103B50003105C9F0C0F0A9014F5F50404F37510502
:103B600050F480E88093B300205830403093050330
:103B70002093040312C08FEF8093B300509305038A
:103B8000409304030AC0809104038093B300109211
:103B900005031092040310921103FF91EF919F917E
:103BA0008F915F914F913F912F910F900FBE0F908A
:103BB0001F90189510927C008FEC80937A000895E6
:103BC000CF93DF931092190386E987BD83E090E0DD
:103BD0000E94E72EC82F863E08F4C65FC8BD84E663
:103BE00090E00E94911980911501909116018152E7
:103BF000934010F0C0EF02C0C530F8F0C8BD82E3BA
:103C000090E00E94911984E694E09F938F9380E660
:103C100095E19F938F93E0913B05F0913C050995C9
:103C200080911501909116010F900F900F900F90B9
:103C30008152934010F4C550DFCF6C2F83E090E0A9
:103C40000E94EF2ECF3018F0CCE8D0E002C0C0E0E8
:103C5000D0E0CA3FD105F8F4C7BD82E390E00E94EE
:103C6000911986E694E09F938F9380E695E19F9368
:103C70008F93E0913B05F0913C05099580911501EA
:103C8000909116010F900F900F900F9080529340DB
:103C900010F02196DECFC0932F078091900780FF10
:103CA00009C08C2F8A508B3E28F080915405806487
:103CB00080935405C7BD8CE291E00E949119DF9179
:103CC000CF910895EF92FF921F93CF9310E080ED74
:103CD00097E00E946F197C01CCE8133019F4CB30C7
:103CE00008F0C9E010E080912803909129038C5FCF
:103CF000934024F48091140181500AC080912803DC
:103D0000909129038750944034F0809114018F5F83
:103D10008093140101C011E0809126039091270344
:103D20008C5F934024F48091130181500AC08091EC
:103D30002603909127038750944034F0809113011B
:103D40008F5F8093130101C01F5F809124039091C6
:103D500025038C5F934024F48091120181500AC0A6
:103D6000809124039091250387509440C4F0809162
:103D700012018F5F8093120113C088E694E09F9335
:103D80008F9380E695E19F938F93E0913B05F091AF
:103D90003C0509950F900F900F900F905FC01F5F2B
:103DA00082E18093530380914D038E7F80934D0376
:103DB00085EA8093BC00809114018A3040F48091A0
:103DC00054058160809354058AE0809314018091AA
:103DD0001401863F40F08091540581608093540522
:103DE00085EF80931401809113018A3040F4809113
:103DF00054058260809354058AE08093130180917A
:103E00001301863F40F080915405826080935405F1
:103E100085EF80931301809112018A3040F48091E4
:103E200054058460809354058AE080931201809148
:103E30001201863F40F080915405846080935405C0
:103E400085EF8093120180915303882339F0C701D5
:103E50000E947819882309F090CFF5CF10921101B4
:103E60008FEC80937A00809111018823E1F3CA30AE
:103E700020F48AE090E00E949119C15009F02DCF02
:103E800086E490E00E949119CF911F91FF90EF90EE
:103E900008951F920F920FB60F921124EF92FF9286
:103EA0000F931F932F933F934F935F936F937F9342
:103EB0008F939F93AF93BF93EF93FF9380913103C1
:103EC000282F3327442755278F5F80933103F9012B
:103ED0002231310508F0E3C3EA5BFF4F0C94819275
:103EE000809178009091790046C0809178009091FF
:103EF000790047C1809178009091790090933403C4
:103F00008093330372C180916A0490916B04209175
:103F1000780030917900821B930B90932407809353
:103F20002307809123079091240790933E03809369
:103F30003D0379C1809178009091790020916C04C3
:103F400030916D04821B930B90932E0780932D0765
:103F500080912D0790912E079093400380933F030B
:103F6000A0C380913703909138032091780030915D
:103F70007900820F931F909338038093370381E079
:103F800091C3809135039091360320917800309150
:103F90007900820F931F909336038093350384E05A
:103FA00081C38091F10783FF1AC080911F01909116
:103FB00020019C01220F331F280F391F40917800E8
:103FC000509179008BE090E0489FB001499F700DBF
:103FD000589F700D1124CB016EE170E00FC08091ED
:103FE0001F01909120019C01220F331F280F391FC0
:103FF000809178009091790063E070E00E94E691F2
:10400000260F371F36952795369527953093200133
:1040100020931F0185E046C380917800909179003C
:104020004091660450916704841B950B90931F0385
:1040300080931E0380911E0390911F03029704F149
:1040400072E04E3E570784F4209132032B5F209399
:10405000320325508091D0039091D103845F914029
:1040600018F4215F2093320380913203853684F166
:104070004F5F5F4F5093670440936604845626C099
:1040800080911E0390911F038F5F9F4F0CF572E08C
:1040900047325707ECF0209132032550209332032A
:1040A0002B5F8091D0039091D103845F914018F4ED
:1040B0002F5020933203809132038C394CF44150BD
:1040C000504050936704409366048C5980933203A8
:1040D000809178009091790090932607809325072E
:1040E00080911E0390911F039C01442737FD40954A
:1040F000542F8091210490912204A0912304B09127
:104100002404820F931FA41FB51F80932104909352
:104110002204A0932304B09324042091210430911D
:104120002204409123045091240457FF04C02150DD
:104130003C4F4F4F5F4F6AE0559547953795279510
:104140006A95D1F78091210490912204A0912304D3
:10415000B0912404821B930BA40BB50B8093210414
:1041600090932204A0932304B09324042EC1809141
:104170003503909136032091780030917900820FB9
:10418000931F9093360380933503109230038CC2B3
:10419000809101018A3071F48091780090917900CA
:1041A0002091330330913403820F931F019696952B
:1041B000879517C04091330350913403843158F0F0
:1041C0002091780030917900240F351F8FEF97E010
:1041D000821B930B06C08091780090917900840F28
:1041E000951F909325038093240386E05BC2809102
:1041F0006A0490916B042091780030917900821BC1
:10420000930B909324078093230780912307909129
:10421000240720913D0330913E03820F931F90931A
:1042200023038093220387E03DC280917800909120
:10423000790020916C0430916D04821B930B909354
:104240002E0780932D0780912D0790912E072091A6
:104250003F0330914003820F931F9093210380937B
:1042600020031FC2209137033091380380917800DA
:1042700090917900280F391F30933803209337032A
:10428000809101018A3019F4220F331F04C0220FDC
:10429000331F220F331F30933803209337032091AD
:1042A000370330913803C90137FD079603E0959530
:1042B00087950A95E1F790932903809328038091CD
:1042C000390390913A03820F931F97FD01969595BC
:1042D000879590933A038093390320917604309127
:1042E0007704821B930B90931E0180931D012091F4
:1042F0002E0330912F0380911D0190911E01280FF4
:10430000391F37FF02C02F5F3F4F359527953093F8
:104310002F0320932E0333CE2091350330913603A3
:104320008091780090917900280F391F30933603DF
:1043300020933503809101018A3019F4220F331F35
:1043400004C0220F331F220F331F309336032093F4
:1043500035032091350330913603C90137FD0796A7
:10436000F3E095958795FA95E1F79093270380936D
:10437000260380913B0390913C03820F931F97FD8E
:1043800001969595879590933C0380933B032091EC
:10439000740430917504821B930B90931C018093DD
:1043A0001B0120912C0330912D0380911B019091D2
:1043B0001C01280F391F37FF02C02F5F3F4F359573
:1043C000279530932D0320932C0383E06BC110922B
:1043D000310381E0809311018091150390911603C0
:1043E0000196909316038093150380917800909125
:1043F0007900909316018093150180911501909199
:104400001601AA27BB272091410330914203409116
:10441000430350914403280F391F4A1F5B1F209309
:1044200041033093420340934303509344038091EC
:1044300045038F5F80934503803108F432C180913A
:10444000170190911801A0911901B0911A017C01F6
:104450008D0163E0EE0CFF1C001F111F6A95D1F760
:10446000E81AF90A0A0B1B0BE20EF31E041F151FB4
:1044700080911903992787FD9095A92FB92FBC0129
:10448000CD0120EB30E240E050E00E94BB91DC0126
:10449000CB01E81AF90A0A0B1B0BD801C7010496D5
:1044A000A11DB11DB7FF05C0D801C7010B96A11D05
:1044B000B11D23E0B595A795979587952A95D1F7D6
:1044C0008093170190931801A0931901B0931A01DA
:1044D00080912707909128077C010027F7FC009521
:1044E000102F8091170190911801A0911901B0919E
:1044F0001A01E81AF90A0A0B1B0BE0920104F09268
:104500000204009303041093040420911A033091D1
:104510001B0340911C0350911D0357FF04C0215FF2
:104520003F4F4F4F5F4F84E05595479537952795FF
:104530008A95D1F780911A0390911B03A0911C03D7
:10454000B0911D03821B930BA40BB50B80931A0330
:1045500090931B03A0931C03B0931D0380911A0337
:1045600090911B03A0911C03B0911D038E0D9F1D04
:10457000A01FB11F80931A0390931B03A0931C03E9
:10458000B0931D0380911A0390911B03A0911C030B
:10459000B0911D03B7FF03C00F96A11DB11D14E01C
:1045A000B595A795979587951A95D1F72091010410
:1045B00030910204281B390B64E0213036071CF0CF
:1045C00020E034E006C07CEF2030370714F420E010
:1045D0003CEF8091170390911803809117039091FD
:1045E000180397FF03C0909581959F4FA901F3E0B1
:1045F000440F551FFA95E1F78D5B9240C4F080910E
:104600001703909118039C01E4E0220F331FEA95F1
:10461000E1F7281B390B240F351F37FF02C0215F3C
:104620003F4F74E0359527957A95E1F717C0809153
:104630001703909118039C0165E0220F331F6A95C0
:10464000E1F7281B390B240F351F37FF02C0215E0D
:104650003F4F45E0359527954A95E1F7309318038C
:10466000209317038091410390914203A09143034B
:10467000B0914403B7FF03C00196A11DB11DB595CC
:10468000A795979587958093410390934203A093B4
:104690004303B093440388E08093450302C0109223
:1046A000310382E0809330038091300380937C005B
:1046B00080913103882319F08FEC80937A00FF9169
:1046C000EF91BF91AF919F918F917F916F915F918A
:1046D0004F913F912F911F910F91FF90EF900F906D
:1046E0000FBE0F901F90189590E2E2E3F7E08FE481
:1046F0009193815087FFFCCF0895909148039035A6
:1047000040F4E92FFF27EE5CF84F80839F5F909382
:1047100048030895AF92BF92CF92DF92FF920F931A
:104720001F93CF93DF932091460320FF0AC080910F
:104730004703882311F0815002C0809121018093AA
:10474000470321FF0CC090914703809121019817E6
:1047500019F41092470303C09F5F90934703822F81
:10476000992780FF04C081FF02C0109247030E9476
:10477000742380914703282F33279DE7C92E93E2A6
:10478000D92EC0913B05D0913C058A3098F481E147
:10479000809348033F932F938FE994E09F938F93E7
:1047A000DF92CF92FE0109952DB73EB72A5F3F4FAA
:1047B0002DBF11C080E1809348033F932F9384EA7B
:1047C00094E09F938F93DF92CF92FE0109958DB76E
:1047D0009EB706968DBF20914703822F9927AA275F
:1047E000BB27FC01419710F00C94E22CE85AFF4FD4
:1047F0000DE7C02E03E2D02EC0913B05D0913C05C1
:104800000C9481921092480389EA94E09F938F93CD
:104810000DE713E2DF92CF92FE01099584E18093C8
:1048200048030F900F900F900F9084E690E09F93B5
:104830008F938AE590E09F938F931F921F928091B0
:1048400001016AE00E94DA91892F99279F938F9343
:10485000809101010E94DA9199279F938F9389EBB0
:1048600094E09F938F93DF92CF92E0913B05F0917C
:104870003C05099588E280934803EDB7FEB73E9664
:10488000EDBF81E098E09F938F930E94633099275A
:104890009F938F9381ED94E09F938F93DF92CF92BC
:1048A000E0913B05F0913C050995809155059927CC
:1048B0002DB73EB7285F3F4F2DBFEC01C071D070C0
:1048C00084FF06C08CE3809348038FED94E0F1C031
:1048D0009091E204992349F18CE380934803892F56
:1048E00099279F938F938CEE94E09F938F931F93C0
:1048F0000F93E0913B05F0913C050995DF93CF9331
:104900009091E20481E1989FC0011124825C954F4F
:104910009F938F931F930F93E0913B05F0913C057C
:1049200009958DB79EB70C9647C190915405992370
:10493000B1F08CE380934803892F99279F938F933D
:1049400084EF94E09F938F931F930F93E0913B0527
:10495000F0913C050995EDB7FEB7369679C4909174
:104960004E03992371F08CE380934803892F992794
:104970009F938F938BE095E09F938F931F930F935B
:10498000D9C48091360190913701069710F00C94AC
:10499000EB2C8CE38093480380E295E0A5C78091DF
:1049A00070091DE7C12E13E2D12EC0913B05D091B5
:1049B0003C0580FF6BC010924803809101049091E8
:1049C0000204A0910304B0910404BC01CD0125E0D0
:1049D00030E040E050E00E942F923F932F938DE211
:1049E00095E09F938F93DF92CF92FE01099584E12A
:1049F000809348038DB79EB706968DBF8091FD03C7
:104A00009091FE03A091FF03B0910004BC01CD0181
:104A100025E030E040E050E00E942F923F932F933A
:104A20008AE395E09F938F93DF92CF92E0913B05CD
:104A3000F0913C05099588E280934803EDB7FEB7F5
:104A40003696EDBF80911501909116019F938F933B
:104A500087E495E09F938F93DF92CF92E0913B059F
:104A6000F0913C0509958CE3809348032DB73EB740
:104A70002A5F3F4F2DBF87B599279F938F9384E57A
:104A800095E09F938F93DF92CF928EC01092480350
:104A900081E695E09F938F93DF92CF92FE01099577
:104AA00084E1809348030F900F900F900F9080E760
:104AB00095E09F938F93DF92CF921AC7109248038D
:104AC00089E795E09F938F930DE713E2DF92CF92F2
:104AD000FE01099584E1809348030F900F900F9099
:104AE0000F908091610490916204A0916304B09151
:104AF0006404B7FF04C081509C4FAF4FBF4FCAE062
:104B0000B595A79597958795CA95D1F7BF93AF931C
:104B10009F938F9386E895E09F938F931F930F93B6
:104B2000E0913B05F0913C05099588E280934803AC
:104B3000EDB7FEB73896EDBF8091590490915A04B5
:104B4000A0915B04B0915C04B7FF04C081509C4FFE
:104B5000AF4FBF4FFAE0B595A79597958795FA9512
:104B6000D1F7BF93AF939F938F9385E995E09F9380
:104B70008F931F930F93E0913B05F0913C050995AE
:104B80008CE3809348032DB73EB7285F3F4F2DBF7E
:104B900080912D0990912E099F938F9384EA95E03F
:104BA0009F938F931F930F93E0913B05F0913C05EA
:104BB00009958DB79EB706968DBF0DC7E1E0FE2E15
:104BC000C1E0D0E009EB18E09F2D969584E1989F15
:104BD000C001112480934803F801828193819F933F
:104BE0008F932196DF93CF932197808191819F931B
:104BF0008F93DF93CF9383EB95E09F938F938DE714
:104C000093E29F938F93E0913B05F0913C050995CA
:104C10002DB73EB7245F3F4F2DBF32E0F30E2296F3
:104C20000C5F1F4F88E08F1578F6D5C610924803A9
:104C300080918507E82FFF27EE0FFF1FE954F74FFC
:104C4000808191819F938F9380918407E82FFF2724
:104C5000EE0FFF1FE954F74F808191819F938F934F
:104C600085EC95E09F938F93DF92CF92FE0109959B
:104C700084E180934803EDB7FEB73896EDBF80918D
:104C80008707E82FFF27EE0FFF1FE954F74F8081BA
:104C900091819F938F9380918607E82FFF27EE0FD6
:104CA000FF1FE954F74F8081918181589F4F9F9357
:104CB0008F9385ED95E09F938F93DF92CF92E09154
:104CC0003B05F0913C05099588E2809348032DB798
:104CD0003EB7285F3F4F2DBF80918907E82FFF2700
:104CE000EE0FFF1FE954F74F8081918181589F4F4C
:104CF0009F938F9380918807E82FFF27EE0FFF1F68
:104D0000E954F74F8081918181589F4F9F938F93F2
:104D100085EE95E09F938F93DF92CF92E0913B05D4
:104D2000F0913C0509958CE3809348038DB79EB7BD
:104D300008968DBF80918B07E82FFF27EE0FFF1F8E
:104D4000E954F74F8081918181589F4F9F938F93B2
:104D500080918A07E82FFF27EE0FFF1FE954F74FD6
:104D60008081918181589F4F9F938F9385EF95E02C
:104D700063C21092480385E096E09F938F930DE7FE
:104D800013E2DF92CF92FE010995809101010F900D
:104D90000F900F900F908A3009F09DC084E18093AE
:104DA000480380917604909177049C0197FF02C09C
:104DB000295F3F4F287F821B930B9F938F93809196
:104DC00076049091770497FD079673E09595879503
:104DD0007A95E1F79F938F93209176043091770431
:104DE00037FF02C0295F3F4F63E0359527956A95ED
:104DF000E1F78091280390912903821B930B9F93E5
:104E00008F9383E196E09F938F931F930F93E0918D
:104E10003B05F0913C05099588E2809348032DB746
:104E20003EB7265F3F4F2DBF80917404909175046B
:104E30009C0197FF02C0295F3F4F287F821B930B85
:104E40009F938F93809174049091750497FD0796BA
:104E500053E0959587955A95E1F79F938F9320910D
:104E600074043091750437FF02C0295F3F4F43E05F
:104E7000359527954A95E1F7809126039091270370
:104E8000821B930B9F938F9384E296E09F938F9363
:104E90001F930F93E0913B05F0913C0509958CE33E
:104EA000809348038DB79EB70A968DBF8091720498
:104EB000909173049F938F938091720490917304E7
:104EC0002091240330912503821B930B9F938F9392
:104ED00085E396E0ADC08B3019F0843108F4ADC0A5
:104EE00084E18093480380917604909177049C013B
:104EF00097FF02C0215F3F4F207F821B930B97FDDE
:104F00000196959587959F938F93809176049091C4
:104F1000770497FD0F9624E0959587952A95E1F7FC
:104F20009F938F93209176043091770437FF02C0CE
:104F3000295F3F4FC3E035952795CA95E1F78091EA
:104F4000280390912903821B930B9F938F9383E4F3
:104F500096E09F938F931F930F93E0913B05F09101
:104F60003C05099588E2809348032DB73EB7265F3C
:104F70003F4F2DBF80917404909175049C0197FF61
:104F800002C0215F3F4F207F821B930B97FD01964C
:104F9000959587959F938F93809174049091750454
:104FA00097FD0F96A4E095958795AA95E1F79F93B5
:104FB0008F93209174043091750437FF02C0295FEC
:104FC0003F4FF3E035952795FA95E1F78091260359
:104FD00090912703821B930B9F938F9385E596E017
:104FE0009F938F931F930F93E0913B05F0913C05A6
:104FF00009958CE3809348038DB79EB70A968DBFC1
:10500000809172049091730497FD01969595879510
:105010009F938F9380917204909173042091240345
:1050200030912503821B930B9F938F9387E696E025
:105030009F938F931F930F9303C18D3009F0CBC4BF
:1050400084E1809348038091140199279F938F9363
:10505000809176049091770497FD0F9674E0959572
:1050600087957A95E1F79F938F93209176043091FD
:10507000770437FF02C0295F3F4F63E035952795DE
:105080006A95E1F78091280390912903821B930B85
:105090009F938F9386E796E09F938F931F930F9331
:1050A000E0913B05F0913C05099588E28093480327
:1050B0002DB73EB7265F3F4F2DBF80911301992733
:1050C0009F938F93809174049091750497FD0F9630
:1050D00054E0959587955A95E1F79F938F9320918A
:1050E00074043091750437FF02C0295F3F4F43E0DD
:1050F000359527954A95E1F78091260390912703EE
:10510000821B930B9F938F938AE896E09F938F93D4
:105110001F930F93E0913B05F0913C0509958CE3BB
:10512000809348038DB79EB70A968DBF8091120178
:1051300099279F938F93809172049091730497FDA8
:105140000196959587959F938F9380917204909186
:1051500073042091240330912503821B930B9F93AA
:105160008F938EE996E09F938F931F930F93E09117
:105170003B05F0913C050995EDB7FEB73A9668C03E
:105180001092480382EB96E09F938F93DF92CF9229
:10519000FE01099584E1809348030F900F900F90D2
:1051A0000F9080916C0490916D049F938F938091E8
:1051B0002003909121039F938F938FEB96E09F9311
:1051C0008F93DF92CF92E0913B05F0913C050995DA
:1051D00088E2809348032DB73EB7285F3F4F2DBF2D
:1051E00080916A0490916B049F938F938091220326
:1051F000909123039F938F938EEC96E09F938F93D0
:10520000DF92CF92E0913B05F0913C0509958CE34C
:10521000809348038DB79EB708968DBF8091660432
:10522000909167049F938F9380911E0390911F0329
:105230009F938F938DED96E09F938F93DF92CF9204
:10524000E0913B05F0913C050995EDB7FEB7389626
:10525000EDBFC1C31092480380911F0190912001BE
:105260006AE070E00E94FA919F938F9380911F01F2
:10527000909120016AE070E00E94FA917F936F9311
:105280008CEE96E09F938F93DF92CF92FE0109956B
:1052900084E1809348032DB73EB7285F3F4F2DBF71
:1052A0008091100A9091110A6AE070E00E94E691E4
:1052B0009F938F938091100A9091110A6AE070E099
:1052C0000E94E6917F936F9380E097E09F938F9386
:1052D000DF92CF92E0913B05F0913C05099588E281
:1052E000809348038DB79EB708968DBF8091120AB0
:1052F0009091130A9F938F9384E197E09F938F93EC
:10530000DF92CF92E0913B05F0913C0509958CE34B
:1053100080934803EDB7FEB73696EDBF8091140A2F
:105320009091150A9F938F9384E297E09F938F93B8
:10533000DF92CF92E0913B05F0913C0509952DB7A6
:105340003EB72A5F3F4F4FC11092480386E397E074
:105350009F938F93DF92CF92FE01099584E1809312
:1053600048030F900F900F900F908091B708909185
:10537000B8089F938F938FE397E09F938F93DF926B
:10538000CF92E0913B05F0913C05099588E280932E
:1053900048038DB79EB706968DBF80910704992765
:1053A0009F938F938FE497E09F938F93DF92CF9299
:1053B000E0913B05F0913C0509958CE3809348030F
:1053C000EDB7FEB73696EDBF8091B60899270197E5
:1053D0009F938F938FE597E0A9CF109248038FE6B4
:1053E00097E09F938F93DF92CF92FE01099584E11E
:1053F000809348030F900F900F900F908091880139
:10540000909189019F938F9387E797E09F938F9364
:10541000DF92CF92E0913B05F0913C05099588E23F
:10542000809348038DB79EB706968DBF80912D0956
:1054300090912E099F938F9385E897E09F938F9388
:10544000DF92CF92E0913B05F0913C0509958CE30A
:1054500080934803EDB7FEB73696EDBF80911F04E9
:10546000909120049F938F9383E997E05FCFC8E0EA
:10547000CC2EC4E0DC2E20E030E0E901B3E0FB2ECE
:10548000C0934803F60181916F0199279F938F93F1
:1054900089010F5F1F4F1F930F9381EA97E09F933E
:1054A0008F938DE793E29F938F93E0913B05F0916B
:1054B0003C0509952DB73EB7285F3F4F2DBFFA94A5
:1054C00064969801F7FEDCCF86C2ACE0CA2EA4E059
:1054D000DA2EC0E0D0E08E01F3E0FF2E0093480307
:1054E000F60181916F0199279F938F932596DF9302
:1054F000CF938EEA97E09F938F938DE793E29F93EC
:105500008F93E0913B05F0913C0509952DB73EB78F
:10551000285F3F4F2DBFFA940C5E1F4F2497F7FE74
:10552000DDCF59C2109248038BEB97E09F938F9386
:105530000DE713E2DF92CF92FE01099584E180939B
:1055400048030F900F900F900F908091670199275B
:105550009F938F9383EC97E09F938F93DF92CF92EB
:10556000E0913B05F0913C05099588E28093480362
:105570008DB79EB706968DBF80910203909103036D
:1055800097FD039695958795959587959F938F930E
:1055900081ED97E09F938F931F930F93E0913B05CD
:1055A000F0913C0509958CE380934803EDB7FEB775
:1055B0003696EDBF8091B30799279F938F93809183
:1055C000B20799279F938F938FED97E09F938F93C7
:1055D0001F930F93E0913B05F0913C0509952DB782
:1055E0003EB7285F3F4F2DBFF6C1109248038DEEA6
:1055F00097E09F938F937DE7A72E73E2B72EDF92FC
:10560000CF92FE0109950F900F900F900F90C6E575
:10561000D8E000E010E062E0F62E802F8C5E8093F0
:1056200048038B8D99278F7790709F938F938B89E9
:1056300099278F7790709F938F938B8599278F777A
:1056400090709F938F938B8199278F7790709F9302
:105650008F938DEF97E09F938F93BF92AF92E091DE
:105660003B05F0913C0509958DB79EB70C968DBF13
:10567000FA940C5E1F4FA096F7FECFCFACC11092EC
:1056800048038EE098E09F938F935DE7A52E53E249
:10569000B52EDF92CF92FE0109950F900F900F90DB
:1056A0000F90C6E5D8E000E010E042E0F42E802F35
:1056B0008C5E809348038F8D992787FD90959F93EB
:1056C0008F938F89992787FD90959F938F938F85CF
:1056D000992787FD90959F938F938F81992787FDB9
:1056E00090959F938F938DE198E09F938F93BF92B6
:1056F000AF92E0913B05F0913C050995EDB7FEB7FF
:105700003C96EDBFFA940C5E1F4FA096F7FECFCFEC
:1057100062C1109248038EE298E09F938F930DE749
:1057200013E2DF92CF92FE01099584E18093480352
:105730000F900F900F900F9080917108881F88270D
:10574000881F97E0899FC00111248D969F938F93A6
:1057500080916908881F8827881F96E0899FC0016B
:1057600011248D969F938F9380916108881F8827BD
:10577000881F95E0899FC00111248D969F938F9378
:1057800080915908881F8827881F9927880F991F9B
:10579000880F991F8D969F938F938DE398E09F9329
:1057A0008F93DF92CF92E0913B05F0913C050995F4
:1057B00088E2809348032DB73EB7245F3F4F2DBF4B
:1057C00080919108881F8827881F9BE0899FC001CE
:1057D00011248D969F938F9380918908881F882725
:1057E000881F9AE0899FC00111248D969F938F9303
:1057F00080918108881F8827881F99E0899FC001B0
:1058000011248D969F938F9380917908881F882704
:10581000881F992723E0880F991F2A95E1F78D9615
:105820009F938F9381E598E09F938F93DF92CF9220
:10583000E0913B05F0913C0509958CE3809348038A
:105840008DB79EB70C968DBF80919908881F8827C9
:10585000881F9CE0899FC00111248D969F938F9390
:1058600085E698E09F938F93DF92CF92E0913B057E
:10587000F0913C0509958091A108EDB7FEB73696E9
:10588000EDBF87FF12C080E48093480386E798E06D
:105890009F938F93DF92CF92E0913B05F0913C056F
:1058A00009950F900F900F900F908091A90887FF96
:1058B00012C084E48093480389E798E09F938F9314
:1058C0001F930F93E0913B05F0913C0509950F90D4
:1058D0000F900F900F908091B10887FF7CC088E4F3
:1058E000809348038CE798E09F938F931F930F93C7
:1058F000E0913B05F0913C0509950F900F900F90BA
:105900000F9069C0109248038FE798E09F938F93A0
:10591000DF92CF92FE01099584E1809348030F90B6
:105920000F900F900F908091D8029091D9029F9381
:105930008F938DE898E09F938F93DF92CF92E091C1
:105940003B05F0913C05099588E2809348032DB70B
:105950003EB72A5F3F4F2DBF8091DA029091DB0264
:105960009F938F938AE998E09F938F93DF92CF92D2
:10597000E0913B05F0913C05099589E4809348034B
:105980008DB79EB706968DBF87EA98E09F938F9359
:10599000DF92CF92E0913B05F0913C050995809113
:1059A00046030F900F900F900F9083FF14C010923A
:1059B000DB021092DA0260E070E08EE090E00E947C
:1059C000002F09C080912101281719F4215020933C
:1059D00021011092470310924603DF91CF911F914E
:1059E0000F91FF90DF90CF90BF90AF900895F999FD
:1059F000FECF92BD81BDF89A80B599270895F99997
:105A0000FECF1FBA92BD81BD60BD0FB6F894FA9A61
:105A1000F99A0FBE08954AEA20E030E026173707CA
:105A200040F4FC018191480F2F5F3F4F2617370745
:105A3000C8F3842F99270895EAEA40E050E046171A
:105A4000570778F49C01F999FECF32BD21BDF89A31
:105A500080B5E80F4F5F5F4F2F5F3F4F46175707E7
:105A600090F38E2F9927089581E08093860782E036
:105A70008093850783E08093840784E08093870781
:105A800085E08093880786E08093890787E080938C
:105A90008A0788E080938B0789E080938C078AE0EF
:105AA00080938D078BE080938E078CE080938F0727
:105AB00008958CE5809383078CE0E3EFF7E0119283
:105AC0008A95E9F780910101843150F08AE0809352
:105AD000A3071092C7078BE180939F078EE40AC04B
:105AE00083E08093A30780E28093C7078EE18093D1
:105AF0009F0785E58093C4078093C50780E2809364
:105B0000C6071092EF078AE68093900782E280939F
:105B1000F10780E48093F20766E06093AA07109291
:105B2000E7071092E40748E040939D0756EE509334
:105B30009E078093A0079EE1909391078FEF80933B
:105B400093072FE020939407909392071092960763
:105B50004093970784E180939807109299072093C8
:105B600095071092AC071092AD071092AE071092F5
:105B7000AF071092C9071092CA071092CB07109274
:105B8000CC0790E89093B00732E33093B10782E0FE
:105B90008093F0072093B2075093B30784E080937B
:105BA000B8078DE78093BB078093BC078093BD0740
:105BB0009093B40725E52093B50786E48093B60754
:105BC0008CED8093B7078CE38093B9071092BA07E6
:105BD0008FE58093CD0783EF8093CF078AEA809388
:105BE000D1078093D20788E28093CE078093D007B5
:105BF0001092D3073093BE079AE59093BF07309376
:105C0000C0078EEF8093D40784E68093D5079093E6
:105C1000D6079093D7079093D8078BE48093D90742
:105C20002093DA078093DB071092DC076093DD078F
:105C30004093DE079093DF078AE28093E00785EFC9
:105C40008093E1078CE88093E20785E08093E30787
:105C50001092E5071092E60781E28093A70781E49E
:105C60008093A8079093A9071092E8071092E9077C
:105C70001092EA0786E98093EB079093C10787E3C8
:105C80008093C2071092EC071092ED071092EE0776
:105C900008950E94592D8AE080939A0780E18093AD
:105CA0009B0726E020939C079AE59093A10788E73D
:105CB0008093A2079093A4078093A5072093A6073B
:105CC00080E28093AB078CE38093C3078BE48093DF
:105CD000C80786E491E6A3E7B4E78093F3079093BF
:105CE000F407A093F507B093F6076CE770E083E83C
:105CF00097E00E940B2D8093FF070895CF93DF93C9
:105D00000E94592D88E080939A0730E130939B07D9
:105D100026E020939C0794E69093A10788E7809360
:105D2000A2079093A4078093A5072093A60730931A
:105D3000AB0786E48093C3078093C807A3EFB7E05F
:105D4000E2E2F1E0ED01019009922A95E1F76CE7BA
:105D500070E0CD01805790400E940B2D8093FF078B
:105D6000DF91CF9108950E94592D26E020939A0744
:105D70008AE080939B0784E080939C0794E690934D
:105D8000A10788E78093A2079093A4078093A507B3
:105D90002093A60780E18093AB0786E48093C30736
:105DA0008093C80785E491E6A3E7B9E78093F307FA
:105DB0009093F407A093F507B093F6076CE770E0B3
:105DC00083E897E00E940B2D8093FF070895F999CF
:105DD000FECF92BD81BDF89A80B599270895F999B3
:105DE000FECF1FBA92BD81BD60BD0FB6F894FA9A7E
:105DF000F99A0FBE089567EF7CE20E9449900895DA
:105E00004FEF5CE20E9483900895EF92FF920F9310
:105E10001F93CF93C82F8150853008F0C3E08DE7E2
:105E2000C89F8001112487EEE82E8FEFF82EE00E38
:105E3000F11E6CE770E0C7010E941C2D682F9801CD
:105E40002D593F4F8FB39927AC014270507081FD9F
:105E5000F9CF32BD21BDF89A80B5861711F0CA017D
:105E600023C08FB399279C012270307081FDF9CF38
:105E7000F2BCE1BCF89A80B58C3511F0C90114C0B0
:105E80008DE7C89FC0011124499727EF3CE24DE7F9
:105E900050E0BC0183E897E00E9424900E94F86DD6
:105EA0000E94018C81E090E0CF911F910F91FF90B3
:105EB000EF900895282F863010F025E003C0882346
:105EC00009F421E0F999FECF1FBA82E090E092BD7B
:105ED00081BD20BD0FB6F894FA9AF99A0FBE0895C5
:105EE000CF93C82F809183078C3509F051C0C630FD
:105EF00010F0C5E003C0CC2309F44AC00E940D8F06
:105F00008091F20782FF07C08091A807843618F0BD
:105F100080E58093A8076CE770E083E897E00E9433
:105F20000B2D8093FF078DE7C89FC00111242FEF31
:105F30003CE24DE750E063E877E049970E946190CA
:105F40002FEF3CE24CE050E064E877E080E590E041
:105F50000E9461906CE070E084E897E00E940B2D55
:105F6000282FF999FECF1FBA8CE590E092BD81BD34
:105F700020BD0FB6F894FA9AF99A0FBE8C2F0E94A2
:105F80005A2F0E94F86D0E94018C81E090E002C0BF
:105F900080E090E0CF9108956DE470E088EE93E0AA
:105FA0000E941C2D482F8FB399279C0122703070BE
:105FB00081FDF9CF85E394E092BD81BDF89A80B56B
:105FC000841779F48FB399279C012270307081FD7A
:105FD000F9CF88EE93E092BD81BDF89A80B581300B
:105FE00011F0C901089527EF3CE24EE450E068EE5D
:105FF00073E080E098E00E94249081E090E00895B2
:10600000809100088130A9F46DE470E080E098E0B0
:106010000E940B2D80934D082FEF3CE24EE450E0A0
:1060200060E078E088EE93E00E94619081E090E08B
:10603000089580E090E00895CF93DF9381E080930E
:106040000008E0E0F8E08FE0158616861786108AD3
:106050008150349687FFF8CF80E480930D088093B9
:106060000E0810920F08809310088093110890EC8E
:1060700090931208109213088093140880931508C7
:106080001092160890931708909318088093190897
:1060900010921A0880931B0890931C08A1E0B8E0A6
:1060A0008CE0E9E2F1E0ED01019009928A95E1F7D7
:1060B0006DE470E0CD0101970E940B2D80934D0897
:1060C000DF91CF910895F999FECF82E090E092BDE3
:1060D00081BDF89A80B5282F863078F023E0322FE2
:1060E000F999FECF1FBA82E090E092BD81BD30BD2C
:1060F0000FB6F894FA9AF99A0FBE822F992708954D
:106100001F93CF93C82F162F863010F0C5E003C021
:10611000882309F4C1E08C2F99278230910541F042
:106120008330910544F4019731F40E94492E05C053
:106130000E947E2E02C00E94B32E1123E1F06CE07B
:1061400070E080E590E00E941C2D282FF999FECF89
:106150008CE590E092BD81BDF89A80B5821759F424
:1061600027EF3CE24CE050E060E570E084E897E027
:106170000E94249002C00E94342D8C2F0E94702F08
:10618000CF911F910895DF92EF92FF920F931F938B
:10619000CF93FF24DF2CEF2C81E090E00E94E72ECC
:1061A0008C3511F031E0E32E6CE070E080E590E09A
:1061B0000E941C2DC82FF999FECF8CE590E092BD6E
:1061C00081BDF89A80B58C1711F421E0D22EC1E080
:1061D00001E010E0EE2029F48C2F0E94052F882387
:1061E000C9F591E0F92E1F930F938FEA98E09F93E2
:1061F0008F9380E695E19F938F93E0913B05F0911B
:106200003C0509952DB73EB72A5F3F4F2DBF0230A1
:10621000110549F0033011054CF40130110531F43A
:106220000E94492E05C00E947E2E02C00E94B32EFD
:10623000DD2059F027EF3CE24CE050E060E570E0F3
:1062400084E897E00E94249002C00E94342D8C2F95
:106250000E94702FCF5F0F5F1F4FC63008F4BACF78
:10626000FF2019F083E00E945A2F0E946330C82F4C
:106270000E94052F8C2F99279F938F9385ED98E08F
:106280009F938F9300E615E11F930F93E0913B05D9
:10629000F0913C05099581E090E00E94E72E2DB732
:1062A0003EB72A5F3F4F2DBF8F3F21F00E94CC2F7A
:1062B000882399F48EEE98E09F938F931F930F930A
:1062C000E0913B05F0913C0509950E941C300E942D
:1062D00000300F900F900F900F90EE2029F06CE59A
:1062E00081E090E00E94EF2E1092820790E0EDE0B6
:1062F000F8E0CFE08081349618160CF49F5FC1500F
:10630000C7FFF8CF90938207892F99279F938F9388
:1063100081E098E09F938F938FE099E09F938F9314
:106320001F930F93E0913B05F0913C0509950E9466
:106330004A098DB79EB708968DBFCF911F910F91D7
:10634000FF90EF90DF900895982F2FB7F894399829
:10635000389A88B1836088B98091B9008C7F809326
:10636000B9008AE28093B80010925303109251034F
:1063700010925003992379F0E6E5F8E08BE0108263
:106380001182128213821482158216821782815022
:10639000389687FFF4CF78942FBF08951092530357
:1063A00084E98093BC0080E88093BC001092BD001B
:1063B0001092BA001092BB001092B9001092B8006F
:1063C00010924F0380E00E94A4311092BB0085E838
:1063D0008093BC0080914D03826080934D030895AB
:1063E0001F920F920FB60F9211242F933F934F934A
:1063F0005F938F939F93EF93FF9380915303282F85
:106400003327442755278F5F80935303F9012731A2
:10641000310508F0C2C2E759FF4F0C94819281E028
:1064200080934F0309C0809151038C3090F4809188
:1064300051038F5F8093510380915103E82FFF2711
:10644000EE0FFF1FEE0FFF1FE050F84F8585181667
:1064500054F7809151038C3070F010924C031092DD
:106460004B031092510385E08093530380915003B6
:10647000880F8D5A04C080915103880F8E5A8093E3
:10648000BB0085E87FC280915103E82FFF2783E09E
:10649000EE0FFF1F8A95E1F7EA5AF74F818180934B
:1064A000BB0085E88093BC0080915103E82FFF2753
:1064B000EE0FFF1FEE0FFF1FEE0FFF1FEA5AF74F01
:1064C000808180FF91C080915103E82FFF27EE0F5C
:1064D000FF1FEE0FFF1FEE0FFF1FEA5AF74F8281DB
:1064E000882329F080918207873008F46CC280915C
:1064F0004B0390914C03892B09F065C280914903AD
:1065000090914A03892B09F05EC26EC080915103BD
:1065100021E030E002C0220F331F8A95E2F780911C
:10652000490390914A0328233923232B79F0809142
:106530005103E82FFF27EE0FFF1FEE0FFF1FEE0F97
:10654000FF1FEA5AF74F80E184830DC08091510309
:10655000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1FAD
:10656000EA5AF74F148280915103E82FFF2753E036
:10657000EE0FFF1F5A95E1F7EA5AF74F8481282F53
:10658000332743E0220F331F4A95E1F780915103EF
:10659000E82FFF2793E0EE0FFF1F9A95E1F7EA5AE5
:1065A000F74F82818770822B8093BB0085E88093B0
:1065B000BC002091510381E090E002C0880F991F38
:1065C0002A95E2F720914B0330914C0382239323C9
:1065D000892B51F08EE498E09093570380935603F3
:1065E00088E080935803EFC184E089C1E0915603AD
:1065F000F091570381918093BB0085E88093BC00A4
:10660000F0935703E0935603809158038150809391
:106610005803882309F4D7C183E071C18091B90080
:10662000803351F580915403882329F480915103DC
:106630008F5F8093540380915103E82FFF2783E0FD
:10664000EE0FFF1F8A95E1F7EA5AF74F83819927EA
:106650008F7790708F3791057CF480915103E82FEC
:10666000FF27EE0FFF1FEE0FFF1FEE0FFF1FEA5A6F
:10667000F74F83818F5F83831092530384E9809364
:10668000BC008AE090E090933701809336018091BE
:1066900051038F5F80935103109253036DC180911A
:1066A000B9008034C9F180915003E82FFF27EE0F25
:1066B000FF1FEE0FFF1FEE0FFF1FEA5AF74F8381F8
:1066C0008F778383809150038F5F809350038091F5
:1066D00050038C30A0F01092500310924A03109295
:1066E0004903809155038F5F809355038C3038F0B8
:1066F0001092550380914D038D7F80934D038091BF
:106700004D03816080934D031092530384E980937D
:10671000BC0010924F0373C080915003E82FFF27F5
:10672000EE0FFF1FEE0FFF1FEE0FFF1FEA5AF74F8E
:1067300083818068838380915003E82FFF27EE0FC9
:10674000FF1FEE0FFF1FEE0FFF1FEA5AF74F80816A
:1067500080FF2FC080915003E82FFF2753E0EE0FFA
:10676000FF1F5A95E1F7EA5AF74F8481992700975E
:1067700051F04097D9F58EE498E0909357038093B9
:10678000560388E031C080915003992743E0880F79
:10679000991F4A95E1F7855A974F90935703809335
:1067A000560390915003809155039817E1F483E0CC
:1067B0001BC080915003992733E0880F991F3A95A9
:1067C000E1F7855A974F9093570380935603809132
:1067D0004D0381FD06C09091500380915503981799
:1067E00011F482E001C081E0809358038091580346
:1067F000813011F485E801C085EC8093BC00809164
:10680000540380934E0310925403DDC0E09156036D
:10681000F09157038091BB00808380915603909143
:106820005703019690935703809356038091580322
:10683000815080935803823010F085EC5DC0813028
:1068400011F485E859C080914D0381FF2DC08091DE
:10685000CF0380FD1DC080915003E82FFF2723E068
:10686000EE0FFF1F2A95E1F7EA5AF74F86818A3F1C
:1068700079F480915003E82FFF2793E0EE0FFF1F7C
:106880009A95E1F7EA5AF74F8081816080830CC0C6
:1068900080915003E82FFF2783E0EE0FFF1F8A95BA
:1068A000E1F7EA5AF74F1082809150038F5F80938F
:1068B0005003809150038C30A0F01092500310923E
:1068C0004A0310924903809155038F5F80935503CB
:1068D0008C3038F01092550380914D038D7F80935A
:1068E0004D031092530384E98093BC0080914D03C3
:1068F000816080934D0365C08093BC0086E08093E7
:10690000530361C088E9BBCD80915203880F805F3B
:10691000B6CD8091520399278130910561F0823084
:1069200091051CF4892B21F04EC0029739F04BC021
:1069300080911401A4CD80911301A1CD8091120109
:106940009ECD80E89CCD1092530384E98093BC00D7
:1069500010924F038AE090E09093370180933601C4
:1069600080915203823088F4809152038F5F80932C
:10697000520382E18093530380914D038E7F809375
:106980004D0385EA8093BC001EC010925203809193
:106990004D03816080934D0316C01092530384E928
:1069A0008093BC0080914D03816080934D038AE009
:1069B00090E090933701809336011092510310922A
:1069C000500310924F03FF91EF919F918F915F9130
:1069D0004F913F912F910F900FBE0F901F901895E0
:1069E0001F93CF93DF93182F80910604882321F4FF
:1069F0008091E702882319F081E090E097C01D3074
:106A000008F092C01123B1F0E12FFF2723E0EE0F31
:106A1000FF1F2A95E1F7EA5AF74F3597808135969F
:106A200088230CF081C03897808180FD03C083E00B
:106A300090E07CC080914E08823019F084E090E0B4
:106A400075C067E070E08EE498E00E940B2D909195
:106A50005508891719F085E090E068C080ED97E04F
:106A60000E946F19EC0180914D0380FD05C0CE019D
:106A70000E9478198823B9F3112319F48FEF90E05D
:106A80000BC0212F33272150304081E090E002C01D
:106A9000880F991F2A95E2F790934C0380934B033C
:106AA000A1E0B0E0E6E5F8E040E050E06BE0CD01C9
:106AB000042E02C0880F991F0A94E2F720914B031D
:106AC00030914C0382239323892B11F0118212827F
:106AD00061504F5F5F4F389667FFE9CF10925103C7
:106AE0001092530380914D038E7F80934D0385EA6E
:106AF0008093BC0080914D0380FD05C0CE010E94B3
:106B000078198823B9F380914B0390914C03892B1A
:106B100029F0CE010E947819882311F380914B034C
:106B200090914C03009711F082E090E0DF91CF91BB
:106B30001F9108950F931F93CF93DF93982F809108
:106B40000604882321F48091E702882319F081E06C
:106B500090E092C09D30A0F4992319F486E090E073
:106B60008BC0C92FDD27FE0133E0EE0FFF1F3A95E2
:106B7000E1F7EA5AF74F35978081359687FD03C0D4
:106B800082E090E079C03897808180FD03C083E087
:106B900090E072C080ED97E00E946F198C018091A7
:106BA0004D0380FD05C0C8010E9478198823B9F300
:106BB000219721E030E0C90102C0880F991FCA95D2
:106BC000E2F790934A0380934903D901E6E5F8E0A0
:106BD00040E050E06BE0CD01042E02C0880F991F09
:106BE0000A94E2F72091490330914A0382239323C8
:106BF000892B11F01182128261504F5F5F4F3896DE
:106C000067FFE9CF1092500310924E08109255087A
:106C10001092530380914D038E7F80934D0385EA3C
:106C20008093BC0080914D0380FD05C0C8010E9487
:106C300078198823B9F38091490390914A03892BED
:106C400029F0C8010E947819882311F380914E0819
:106C5000823019F084E090E00FC067E070E08EE4CD
:106C600098E00E940B2D90915508891719F085E046
:106C700090E002C080E090E0DF91CF911F910F91F2
:106C80000895CF93DF9380E021E83FEFCBEED8E08B
:106C9000E7EBF8E0DF01853020F411961C921E929C
:106CA00002C0318320831982188222968F5F129648
:106CB00032968A3180F3109273041092720410920B
:106CC0007504109274041092770410927604DF9188
:106CD000CF9108951F920F920FB60F9211240F9328
:106CE0001F932F933F934F935F936F937F938F9354
:106CF0009F93AF93BF93CF93DF93EF93FF938091D5
:106D0000F10782FDE1C0409186005091870080919B
:106D10005A0390915B03481B590B80918600909118
:106D2000870090935B0380935A03CA018D5494406B
:106D3000A0915C03B0915D03835F9A4178F48091E8
:106D40005C038093B608149714F010923A0181E026
:106D500090E090935D0380935C032BC2AD30B1054E
:106D60000CF027C2CA018B5F9040845B914008F011
:106D700086C08091380190913901481B590BE091F0
:106D8000EC07EE2351F0FF27EE0FFF1FE954F74FFA
:106D90008081918184369105ECF4FD01EA0FFB1F9F
:106DA000E954F74F80819181FA01E81BF90BCF017B
:106DB000F7FF03C0909581959F4F06975CF48091F3
:106DC0000704883C20F480910704865F01C088ECAA
:106DD00080930704FD01EA0FFB1FE954F74F808100
:106DE00091819C01220F331F280F391F240F351F5B
:106DF00037FF02C02D5F3F4FE901D595C795D59567
:106E0000C795CA0101968C179D0714F4219706C0F7
:106E100041505040C417D5070CF4219680910704C7
:106E2000833CE0F08D010A0F1B1FF801E954F74F76
:106E3000808191819E01281B390BC90163E070E0BC
:106E40000E94FA91CB01880F991F860F971F055159
:106E5000174FD80111969C938E9307C0AA0FBB1FA2
:106E6000A551B74F11961C921E92E0915C03F091D0
:106E70005D03EE0FFF1FE954F74FD183C0832091CC
:106E80005C0330915D032F5F3F4F30935D03209390
:106E90005C0380910101843108F08BC125303105FC
:106EA00011F45D9A01C05D9880915C0390915D033F
:106EB0008630910511F45C9A01C05C98079711F433
:106EC0005B9A77C15B9875C14091860050918700AD
:106ED00080915E0390915F03481B590B809186005F
:106EE0009091870090935F0380935E03CA018D5455
:106EF00094406091C803835F9A4108F07AC0609320
:106F0000590380915903843008F453C09091B60816
:106F100080915903981709F04CC05091C9035B3018
:106F200008F43FC010923A011092C80340E05F316C
:106F3000C0F0E42FFF27EE0FFF1F9F012C563C4FA0
:106F4000DF01A954B74F8D919C91D9018D939C93EA
:106F5000DF01A551B74F8D919C91E255FC4F918374
:106F60008083E42FFF27EE0FFF1F9F012954374F27
:106F7000DF01A05ABC4F8D919C91D90111969C9331
:106F80008E93DF01A658BC4F8D919C91E551F74F30
:106F900091838083842F8F5F482F8D3040F28093C0
:106FA000C8038091C9038F3FB9F08F5F8093C903F5
:106FB00013C08091C903853620F08AE08093C9030D
:106FC00002C01092C903809101018A3011F084310E
:106FD00010F0289A01C0289881E08093C80380911E
:106FE0000604882309F0E5C0809159038093B60810
:106FF000E0C06D3008F0B5C0CA018B5F9040845B83
:10700000914008F090C08091380190913901481B5F
:10701000590BE62FFF27EE0FFF1FE05AFC4F808130
:107020009181FA01E81BF90BCF0105960B9720F52A
:10703000E091EC07EE2351F0FF27EE0FFF1FE9541C
:10704000F74F8081918184369105B4F48091C90312
:107050008A3120F080910704865F05C08B3028F0CC
:10706000809107048E5F8093070480910704893C18
:1070700018F088EC80930704E62FFF27EE0FFF1F20
:10708000E05AFC4F808191819C01220F331F280F11
:10709000391F240F351F37FF02C02D5F3F4FE90115
:1070A000D595C795D595C795CA0101968C179D07AB
:1070B00014F4219706C041505040C417D5070CF472
:1070C0002196809107048E3BD8F0E62FFF27EE0F24
:1070D000FF1FDF01A05ABC4F8D919C919E01281B80
:1070E000390BC90163E070E00E94FA91CB01880F6F
:1070F000991F860F971FE658FC4F9183808308C025
:10710000E62FFF27EE0FFF1FE658FC4F118210827B
:107110008091C803E82FFF27EE0FFF1FE05AFC4FB6
:10712000D183C08309C0809101018A3011F084317C
:1071300010F0289A01C0289880910101843188F4C8
:107140008091C803853011F45D9A05C05D98863042
:1071500011F45C9A05C05C98873011F45B9A01C009
:107160005B988091C803843120F48F5F8093C803BB
:1071700020C08431F1F4809101018A3011F0843112
:1071800010F0289A01C028988EE18093C8032CE063
:10719000CBEED8E0A4E9B3E0E7EBF8E08D919D9168
:1071A000918380833296198218822296215027FF7C
:1071B000F5CFFF91EF91DF91CF91BF91AF919F916B
:1071C0008F917F916F915F914F913F912F911F917F
:1071D0000F910F900FBE0F901F901895EF92FF9296
:1071E0000F931F9380919F079927880F991F880FEE
:1071F000991F7C010027F7FC0095102F80916104F6
:1072000090916204A0916304B0916404BC01CD012B
:10721000A80197010E942F923093E1062093E00687
:107220008091590490915A04A0915B04B0915C0440
:10723000BC01CD01A80197010E942F923093E30673
:107240002093E206809174099091750997FD039649
:1072500095958795959587959093E5068093E40697
:10726000809184099091850997FD0396959587955E
:10727000959587959093E7068093E6068091FD03A8
:107280009091FE03A091FF03B0910004BC01CD01D9
:1072900025E030E040E050E00E942F923093E90674
:1072A0002093E8068091010490910204A0910304C8
:1072B000B0910404BC01CD0125E030E040E050E095
:1072C0000E942F923093EB062093EA06809188016A
:1072D000909189019093ED068093EC0680911F04B4
:1072E000909120049093EF068093EE068091100A0F
:1072F0009091110A9093F1068093F00680911F01FE
:10730000909120019093F3068093F20680915708A4
:1073100099279093F5068093F40680915F0899274A
:107320009093F7068093F6068091670899279093CB
:10733000F9068093F80680916F0899279093FB06D1
:107340008093FA068091770899279093FD068093A1
:10735000FC0680917F0899279093FF068093FE0694
:1073600080910704992790930107809300078091EB
:10737000800990918109A0918209B091830920919F
:107380003C0130913D0140913E0150913F01BC01D3
:10739000CD010E942F923093030720930207809122
:1073A0007204909173042091240330912503821B71
:1073B000930B909305078093040710920707109290
:1073C000060780910203909103039093090780932D
:1073D000080710920B0710920A0710920D071092DF
:1073E0000C078091140A9091150A90930F078093CF
:1073F0000E078091160A9927909311078093100722
:10740000109213071092120710921507109214078A
:10741000109217071092160780911E0390911F0378
:10742000909319078093180710921B0710921A0760
:107430008091D3049091D40490931D0780931C07EE
:107440008091D1049091D20490931F0780931E07DE
:1074500080915405882321F480915505882321F0DB
:107460008091DF06816003C08091DF068E7F80936C
:10747000DF061F910F91FF90EF900895EF92FF921A
:107480001F93CF93DF93182F7B01809106048823ED
:1074900091F5809101018C3010F0863111F429981A
:1074A00001C0299A11501F3FE9F0F0920903E092C0
:1074B0000803E7018091080390910903892B11F4D7
:1074C000209781F380910C038823A1F310920C0381
:1074D0008091080390910903892B09F421970E9458
:1074E000238FE8CF809101018C3010F0863111F4A8
:1074F000299A01C02998DF91CF911F91FF90EF90B9
:107500000895CF93DF93809101018D3011F40E9493
:10751000621E10927A008091280390912903909323
:10752000390980933809809126039091270390931D
:107530002909809328098091240390912503909331
:107540007A09809379092091200330912103C901A0
:10755000880F991F880F991F820F931F820F931F07
:10756000909375098093740920912203309123032D
:10757000C901880F991F880F991F820F931F820FCF
:10758000931F90938509809384098FEC80937A00F0
:10759000A8E0B4E0C8E8D7E097E08991E82FFF279A
:1075A000EE0FFF1FE954F74F0190F081E02DE158F5
:1075B000FF4F1E161F061CF0E0E0F0E005C0EF3F95
:1075C000F10514F0EFEFF0E08C91282F3327E2174C
:1075D000F30714F4815004C02E173F0714F48F5F93
:1075E0008C939150119697FFD8CF8091C40799271B
:1075F000AA27BB27BC01CD0124EC39E040E050E0D4
:107600000E94BB91DC01CB018093800190938101AA
:10761000A0938201B09383018091C5079927AA277F
:10762000BB27BC01CD010E94BB91DC01CB01809343
:107630007C0190937D01A0937E01B0937F01DF9147
:10764000CF910895A0E0B0E0E8E2FBE30C94509203
:10765000882EC0E0D0E07E016E0110925405D093D8
:107660006D04C0936C04D0936B04C0936A04D093F0
:107670006704C0936604D0937704C0937604D093D4
:107680007504C0937404D0937304C0937204109271
:10769000640110926301109219030E94813A84E6FA
:1076A00090E00E9491190E94813A8091900780FF9A
:1076B00010C08091150190911601875B934038F4BA
:1076C00080911501909116018E5E924010F40E94F7
:1076D000E01D0FE18AE090E00E949119809124035F
:1076E00090912503C80FD91F8091280390912903F9
:1076F000E80EF91E8091260390912703C80ED91E2B
:10770000015007FFE7CF9701205F3F4F3695279540
:10771000369527953093770420937604C6014096DA
:1077200096958795969587959093750480937404A4
:107730006096F5E0D695C795FA95E1F7D093730476
:10774000C0937204909371048093700430936F041B
:1077500020936E04882009F441C0809174099091AF
:10776000750997FF03C0909581959F4F6CE070E07D
:107770000E94FA919B0170936D0460936C04809158
:1077800084099091850997FF03C0909581959F4F3B
:107790006CE070E00E94FA9170936B0460936A044D
:1077A0008091250790912607909367048093660443
:1077B000B90184E090E00E94002F60916A0470910A
:1077C0006B0486E090E00E94002F60916604709147
:1077D000670488E090E00E94002F65C084E090E09C
:1077E0000E94FB2E90936D0480936C0486E090E0E1
:1077F0000E94FB2E90936B0480936A0488E090E0D3
:107800000E94FB2E9C0190936704809366048091F4
:107810006C0490916D048150984050F480916A04FA
:1078200090916B048150984018F421503440D8F165
:1078300080E399E09F938F9380E695E19F938F93E8
:10784000E0913B05F0913C05099580917409909178
:10785000750997FF03C0909581959F4F6CE070E08C
:107860000E94FA9170936D0460936C048091840976
:107870009091850997FF03C0909581959F4F6CE08B
:1078800070E00E94FA9170936B0460936A04809197
:1078900025079091260790936704809366040F90C4
:1078A0000F900F900F901092390910923809109292
:1078B00029091092280910927A091092790984E610
:1078C00090E00E94911980912003909121039C01E6
:1078D000220F331F220F331F280F391F280F391F84
:1078E00030937509209374098091220390912303AA
:1078F0008C01000F111F000F111F080F191F080F17
:10790000191F109385090093840980919F07C82E41
:10791000DD24EE24FF24442737FD4095542FC70172
:10792000B6010E94BB914B015C01609361047093AE
:10793000620480936304909364049801442737FDA4
:107940004095542FC701B6010E94BB91DC01CB01C9
:107950008093590490935A04A0935B04B0935C0401
:107960008092410490924204A0924304B092440455
:107970008093390490933A04A0933B04B0933C0461
:107980001092310410923204109233041092340495
:107990008091170190911801A0911901B0911A01DD
:1079A00090932807809327071092180310921703CB
:1079B00010922104109222041092230410922404A5
:1079C00000918801109189011093200400931F04F5
:1079D00084E690E0909385018093840182E390E0B7
:1079E00090930903809308038091C4079927AA27DD
:1079F000BB27BC01CD0124EC39E040E050E00E94FF
:107A0000BB91DC01CB018856954CAF4FBF4F8093A3
:107A1000800190938101A0938201B09383018091B2
:107A2000C5079927AA27BB27BC01CD010E94BB919E
:107A3000DC01CB018856954CAF4FBF4F80937C0142
:107A400090937D01A0937E01B0937F01109241013C
:107A500010924001C801AA2797FDA095BA2F209146
:107A60003C0130913D0140913E0150913F01BC01EC
:107A7000CD010E94BB91DC01CB01809380099093E2
:107A80008109A0938209B093830910921C0410927B
:107A90001B040E94F86D8091CF0384608093CF0314
:107AA0008FEF8093000A1092010A80E28093020A0D
:107AB000C8E0D4E0A8E8B7E007E08D91E82FFF2701
:107AC000EE0FFF1FE954F74F808191818158899310
:107AD000015007FFF2CF84E68093070480910603EC
:107AE000882311F0579A06C080E091E19093080135
:107AF0008093070180917604909177048056994095
:107B0000815C9B4228F080915405816080935405EC
:107B1000809174049091750480569940815C9B42D9
:107B200028F08091540582608093540580917204FE
:107B3000909173048C5291408957954028F0809120
:107B4000540584608093540580916C0490916D0479
:107B50008C529140835C914028F08091540588605C
:107B60008093540580916A0490916B048C529140EB
:107B7000835C914028F08091540580618093540586
:107B800080916604909167048050924083559140A3
:107B900028F08091540580628093540586E4809398
:107BA00077010E94018CECE0CDB7DEB70C946C92AB
:107BB000A3E1B0E0EEEDFDE30C944A9280917204F3
:107BC000909173042091240330912503821B930B21
:107BD00090937A098093790980912E0390912F03D5
:107BE00097FD07969C0113E0359527951A95E1F7C7
:107BF000309339092093380980912C0390912D03FB
:107C000097FD0796B3E095958795BA95E1F7909320
:107C100029098093280930934409209343099093BC
:107C20003C0980933B098091740990917509AC01DE
:107C3000440F551F480F591F2091200330912103F5
:107C4000C901880F991F880F991F820F931F820FF8
:107C5000931F480F591F57FF02C04D5F5F4F559547
:107C600047955595479550937509409374098091B0
:107C7000840990918509AC01440F551F480F591F85
:107C80002091220330912303C901880F991F880F87
:107C9000991F820F931F820F931F480F591F57FF81
:107CA00002C04D5F5F4F5595479555954795509349
:107CB0008509409384092091200330912103C90153
:107CC000880F991F880F991F820F931F820F931F90
:107CD0009C01442737FD4095542F80915104909189
:107CE0005204A0915304B0915404820F931FA41F17
:107CF000B51F8093510490935204A0935304B09302
:107D000054042091220330912303C901880F991F45
:107D1000880F991F820F931F820F931F9C01442786
:107D200037FD4095542F80914D0490914E04A091C1
:107D30004F04B0915004820F931FA41FB51F80936E
:107D40004D0490934E04A0934F04B093500480913F
:107D50004D0990914E092091200330912103820F0B
:107D6000931F90934E0980934D0980917C099091C7
:107D70007D092091220330912303820F931F90935A
:107D80007D0980937C098091680490916904019633
:107D90009093690480936804809125079091260749
:107DA0002091660430916704821B930B9C01442749
:107DB00037FD4095542F8091490490914A04A09139
:107DC0004B04B0914C04820F931FA41FB51F8093E6
:107DD000490490934A04A0934B04B0934C048FEC55
:107DE00080937A00109211012091390430913A0465
:107DF00040913B0450913C0429873A874B875C872C
:107E000029543B46414050402CF028E43BE641E0F9
:107E100050E00DC089859A85AB85BC85885B944907
:107E2000AE4FBF4F4CF428EB34E94EEF5FEF2D839C
:107E30003E834F83588708C089859A85AB85BC856A
:107E40008D839E83AF83B887209141043091420493
:107E500040914304509144042D873E874F87588BAF
:107E600029543B46414050402CF028E43BE641E099
:107E700050E00DC08D859E85AF85B889885B94499B
:107E8000AE4FBF4F4CF428EB34E94EEF5FEF298340
:107E90003A834B835C8308C08D859E85AF85B88906
:107EA00089839A83AB83BC83A0917909B0917A09C5
:107EB000BB8BAA8BFD01CF01AA2797FDA095BA2FF6
:107EC000A0903104B0903204C0903304D0903404B8
:107ED000A80EB91ECA1EDB1EA0923104B092320455
:107EE000C0923304D0923404E0908009F09081096C
:107EF0000091820910918309E80EF91E0A1F1B1FC9
:107F0000E0928009F092810900938209109383091D
:107F1000F091EA03F98BFF2309F098C18091E903FE
:107F2000882309F093C18091700986FF8FC18091E9
:107F3000280990912909AA2797FDA095BA2FBC017D
:107F4000CD0129813A814B815C810E94BB919B01CB
:107F5000AC0197FF04C02150384F4F4F5F4FBBE03B
:107F60005595479537952795BA95D1F78091630137
:107F7000682E772488249924CA01B901A4019301A9
:107F80000E94BB91DC01CB01809382049093830417
:107F9000A0938404B0938504B7FF04C08150904F30
:107FA000AF4FBF4F1C012D01ACE05594479437945F
:107FB0002794AA95D1F720928204309283044092AC
:107FC0008404509285048091380990913909AA2738
:107FD00097FDA095BA2FBC01CD012D813E814F8127
:107FE00058850E94BB9197FF04C06150784F8F4F16
:107FF0009F4FFBE09595879577956795FA95D1F713
:10800000A40193010E94BB91DC01CB018093860403
:1080100090938704A0938804B0938904B7FF04C0A9
:108020008150904FAF4FBF4F9C01AD01ECE0559593
:10803000479537952795EA95D1F720938604309395
:10804000870440938804509389048091820490911E
:1080500083049093200980931F0980918604909156
:108060008704909324098093230922193309440932
:1080700055092093860430938704409388045093D5
:108080008904E20EF31E041F151FE0928009F0928E
:1080900081090093820910938309809162018823EA
:1080A000B1F457FF04C02F5F3F4F4F4F5F4F5595BF
:1080B000479537952795A21AB30AC40AD50AA09204
:1080C0003104B0923204C0923304D09234042A892D
:1080D0003B8979010027F7FC0095102F80918604D9
:1080E00090918704A0918804B0918904E80EF91E4C
:1080F0000A1F1B1FC801B70129813A814B815C818E
:108100000E94BB919B01AC0197FF04C02150384FE6
:108110004F4F5F4F6BE055954795379527956A957B
:10812000D1F780916401A82EBB24CC24DD24CA01A0
:10813000B901A60195010E94BB91DC01CB0180939E
:108140007A0490937B04A0937C04B0937D04B7FFE2
:1081500004C08150904FAF4FBF4F3C014D013CE0F8
:1081600095948794779467943A95D1F760927A04BE
:1081700070927B0480927C0490927D04C801B701C8
:108180002D813E814F8158850E94BB9197FF04C08D
:108190006150784F8F4F9F4F2BE09595879577953E
:1081A00067952A95D1F7A60195010E94BB91DC0144
:1081B000CB0180937E0490937F04A0938004B093BE
:1081C0008104B7FF04C08150904FAF4FBF4FAC0147
:1081D000BD018CE075956795579547958A95D1F7C0
:1081E00040937E0450937F046093800470938104D5
:1081F0002A893B8937FF03C0309521953F4F2134B1
:108200003105E4F1D401C30197FE07C0B095A095F4
:10821000909581959F4FAF4FBF4F81389105A10534
:10822000B10584F4DB01CA0177FF07C0B095A095C2
:10823000909581959F4FAF4FBF4F81389105A10514
:10824000B105E4F081E080931D0418C01092240968
:10825000109223091092200910921F0910927E0497
:1082600010927F04109280041092810410927A047C
:1082700010927B0410927C0410927D0480917E0405
:1082800090917F04A0918004B0918104BC01CD0144
:1082900024E630E040E050E00E942F92E0907A0423
:1082A000F0907B04E21AF30AF0923709E092360963
:1082B00080917A0490917B04A0917C04B0917D041C
:1082C000BC01CD0124E630E040E050E00E942F9256
:1082D000DA01C90120917E0430917F048C01021BD8
:1082E000130B10932B0900932A0980913C01909164
:1082F0003D01A0913E01B0913F01BC01CD0128E6B6
:1083000031E040E050E00E94BB9120918009309123
:108310008109409182095091830926173707480740
:10832000590764F0261B370B480B590B2093800923
:1083300030938109409382095093830920918009E9
:1083400030918109409182095091830957FF0CC0F7
:10835000260F371F481F591F20938009309381092A
:1083600040938209509383096091280970912909EB
:108370006E0D7F1D9B01442737FD4095542F809142
:10838000350490913604A0913704B0913804820FDF
:10839000931FA41FB51F8093350490933604A093B8
:1083A0003704B09338048091EF039091F003681B79
:1083B000790BCB01AA2797FDA095BA2F29853A857D
:1083C0004B855C85820F931FA41FB51F80933904D2
:1083D00090933A04A0933B04B0933C04C0907C017A
:1083E000D0907D01E0907E01F0907F01C816D90603
:1083F000EA06FB06C4F488EA91E6A0E0B0E08C1936
:108400009D09AE09BF098093390490933A04A09363
:108410003B04B0933C048093350490933604A093BE
:108420003704B093380422273327A9012C193D09BA
:108430004E095F098091390490913A04A0913B0460
:10844000B0913C0482179307A407B507B4F4D70191
:10845000C601885A9146A040B04080933904909359
:108460003A04A0933B04B0933C048093350490936A
:108470003604A0933704B0933804609138097091A2
:108480003909600F711F9B01442737FD4095542F18
:1084900080913D0490913E04A0913F04B09140042E
:1084A000820F931FA41FB51F80933D0490933E0439
:1084B000A0933F04B09340048091ED039091EE03AC
:1084C000681B790BCB01AA2797FDA095BA2F2D85A4
:1084D0003E854F855889820F931FA41FB51F809337
:1084E000410490934204A0934304B0934404E09069
:1084F0008001F09081010091820110918301E816C2
:10850000F9060A071B07C4F488EA91E6A0E0B0E088
:108510008E199F09A00BB10B8093410490934204E4
:10852000A0934304B093440480933D0490933E048D
:10853000A0933F04B093400422273327A9012E19AA
:108540003F09400B510B8091410490914204A0914E
:108550004304B091440482179307A407B507B4F409
:10856000D801C701885A9146A040B0408093410489
:1085700090934204A0934304B093440480933D0439
:1085800090933E04A0933F04B09340048091310443
:1085900090913204A0913304B09134048093450447
:1085A00090934604A0934704B093480480914104FB
:1085B00090914204A0914304B091440480936104DB
:1085C00090936204A0936304B0936404809139048F
:1085D00090913A04A0913B04B0913C0480935904DB
:1085E00090935A04A0935B04B0935C0480913D0483
:1085F00090913E04A0913F04B091400480935D04AB
:1086000090935E04A0935F04B0936004809135045E
:1086100090913604A0913704B091380480935504AA
:1086200090935604A0935704B093580480911D0171
:1086300090911E0197FD079603E0959587950A9501
:10864000E1F7909339098093380980911B0190914B
:108650001C0197FD079613E0959587951A95E1F70C
:1086600090932909809328098091280390912903E8
:108670000F9734F488E19CEF90933909809338097F
:108680008091280390912903079734F480E398EFB1
:108690009093390980933809209101012A30A9F477
:1086A0008091280390912903835F934034F088EEF2
:1086B00093E0909339098093380980912803909131
:1086C00029038A5F9340DCF014C0809128039091C5
:1086D0002903815D974034F088EE93E09093390947
:1086E000809338098091280390912903805E9740F8
:1086F00034F080ED97E090933909809338098091A8
:108700002603909127030F9734F488E19CEF909310
:1087100029098093280980912603909127030797C0
:1087200034F480E398EF90932909809328092A3044
:10873000A9F48091260390912703835F934034F03E
:1087400088EE93E09093290980932809809126036D
:10875000909127038A5F9340DCF014C08091260338
:1087600090912703815D974034F088EE93E09093D9
:108770002909809328098091260390912703805E20
:10878000974034F080ED97E0909329098093280971
:1087900060916E01662309F4AFC040911D015091B4
:1087A0001E0180918A0490918B04481B590B5093B1
:1087B00091044093900420911D0130911E01280FD7
:1087C000391F37FF02C02F5F3F4F359527953093F4
:1087D0008B0420938A04413851051CF080E890E016
:1087E00005C040585F4F34F480E89FEF90939104A8
:1087F0008093900440911B0150911C0180918C0446
:1088000090918D04481B590B50938F0440938E0414
:1088100020911B0130911C01280F391F37FF02C026
:108820002F5F3F4F3595279530938D0420938C040F
:10883000413851051CF080E890E005C040585F4F7A
:1088400034F480E89FEF90938F0480938E04462F3A
:1088500055278091900490919104849FB001859F49
:10886000700D949F700D11249B0177FF02C0215F52
:108870003F4FF4E035952795FA95E1F78091380957
:1088800090913909820F931F909339098093380989
:1088900080918E0490918F04849FD001859FB00DAC
:1088A000949FB00D1124AD019D01B7FF02C0215F5F
:1088B0003F4FE4E035952795EA95E1F78091280947
:1088C00090912909820F931F909329098093280979
:1088D00080911D0190911E01860F971F90931E019C
:1088E00080931D0180911B0190911C01840F951FA5
:1088F00090931C0180931B0100913B0910913C094E
:1089000080911F0990912009101611065CF59C01B9
:1089100097FF04C022273327281B390BC901AA2738
:1089200097FDA095BA2F2091620133274427552740
:10893000BC01CD010E94BB919B01AC0197FF04C01B
:10894000215C3F4F4F4F5F4F76E0559547953795E8
:1089500027957A95D1F78091360990913709820F42
:10896000931F27C097FF03C0909581959F4FAA271B
:1089700097FDA095BA2F20916201332744275527F0
:10898000BC01CD010E94BB919B01AC0197FF04C0CB
:10899000215C3F4F4F4F5F4F66E0559547953795A8
:1089A00027956A95D1F78091360990913709821BF6
:1089B000930B9093370980933609E0904309F09028
:1089C000440980912309909124091E141F045CF529
:1089D0009C0197FF04C022273327281B390BC901AC
:1089E000AA2797FDA095BA2F20916201332744272B
:1089F0005527BC01CD010E94BB919B01AC0197FFA3
:108A000004C0215C3F4F4F4F5F4F96E0559547950F
:108A1000379527959A95D1F780912A0990912B093E
:108A2000820F931F27C097FF03C0909581959F4F9A
:108A3000AA2797FDA095BA2F2091620133274427DA
:108A40005527BC01CD010E94BB919B01AC0197FF52
:108A500004C0215C3F4F4F4F5F4F86E055954795CF
:108A6000379527958A95D1F780912A0990912B09FE
:108A7000821B930B90932B0980932A098091700994
:108A800087FF44C0B989BB2309F040C08091E90346
:108A90008823E1F5E1E0EE16E1E0FE064CF080917E
:108AA0003809909139098E0D9F1D805091400DC05D
:108AB000F0E0EF16FFEFFF0664F480913809909123
:108AC00039098E0D9F1D80509F4F909339098093D7
:108AD000380921E0013012074CF08091280990916B
:108AE0002909800F911F805091400CC03FEF00304A
:108AF000130764F48091280990912909800F911F30
:108B000080509F4F9093290980932809E2E1CD5E20
:108B10000C94669280910604882301F58091CF031E
:108B20008C7F8093CF03A9E5B5E0E6E5F8E09BE014
:108B30008091E702882309F48C938D9181831282BE
:108B40009150389697FFF4CF8091E702882359F02F
:108B50008091E70281508093E70205C08091CF03A6
:108B600081608093CF0380914F03882319F0109286
:108B70004F030895809351038093530380914D03D5
:108B80008E7F80934D0385EA8093BC000895CF9338
:108B9000DF93A8E0B4E0C8E8D7E057E09991E92F67
:108BA000FF27EE0FFF1FE954F74F0190F081E02DF2
:108BB000E158FF4FEF3FF10521F01CF0EFEFF0E03F
:108BC00004C0F7FF02C0E0E0F0E0993111F4EC934B
:108BD0001BC04C91242F3327E217F307A9F0CF01D4
:108BE000821B930B97FD0396959587959595879591
:108BF000242F280F2C93822F9927E817F90714F4B4
:108C0000215001C02F5F2C935150119657FFC6CFB2
:108C100080919207883F38F0EFEFF0E0E81BF10910
:108C2000E85FFB4F808180937401809174018823F9
:108C300029F0843618F084E68093740180919407BB
:108C4000883F38F0EFEFF0E0E81BF109E85FFB4FF9
:108C500080818093720180917201882329F084368B
:108C600018F084E6809372018091A107883F38F064
:108C7000EFEFF0E0E81BF109E85FFB4F80818093A4
:108C80006D0180916D018B3010F48AE002C08F3F3E
:108C900011F480936D018091CE07883F38F0EFEF9B
:108CA000F0E0E81BF109E85FFB4F808180934F09FA
:108CB00080914F09863010F485E002C08F3F11F497
:108CC00080934F098091D007883F38F0EFEFF0E0B4
:108CD000E81BF109E85FFB4F808180937709809161
:108CE0007709863010F485E002C08F3F11F480933D
:108CF00077098091BB07873F19F4429905C006C0E8
:108D0000863F31F4439B02C08CE80BC086E409C067
:108D1000883F38F0EFEFF0E0E81BF109E85FFB4F28
:108D2000808180934C098091BC07873F19F4429958
:108D300005C006C0863F31F4439B02C08CE80BC0DF
:108D400086E409C0883F38F0EFEFF0E0E81BF10956
:108D5000E85FFB4F8081809325098091BD07883FA4
:108D600038F0EFEFF0E0E81BF109E85FFB4F80819E
:108D70008093550980919307883F38F0EFEFF0E03A
:108D8000E81BF109E85FFB4F8081809373018091BC
:108D90009607883F38F0EFEFF0E0E81BF109E85F55
:108DA000FB4F80818093710180919807883F38F054
:108DB000EFEFF0E0E81BF109E85FFB4F8081809363
:108DC0006F018091A007883F38F0EFEFF0E0E81BDB
:108DD000F109E85FFB4F8081809370018091A207C9
:108DE000883F38F0EFEFF0E0E81BF109E85FFB4F58
:108DF000808180936C018091A307883F38F0EFEF6A
:108E0000F0E0E81BF109E85FFB4F808180936E0181
:108E10008091A407883F38F0EFEFF0E0E81BF109FC
:108E2000E85FFB4F808180936B018091A507883FAD
:108E300038F0EFEFF0E0E81BF109E85FFB4F8081CD
:108E400080936A018091AB07883F38F0EFEFF0E044
:108E5000E81BF109E85FFB4F8081809368018091F6
:108E6000AC07883F38F0EFEFF0E0E81BF109E85F6E
:108E7000FB4F80818093E4038091AD07883F38F0F9
:108E8000EFEFF0E0E81BF109E85FFB4F8081809392
:108E9000E3038091AE07883F38F0EFEFF0E0E81B86
:108EA000F109E85FFB4F80818093E2038091AF0777
:108EB000883F38F0EFEFF0E0E81BF109E85FFB4F87
:108EC00080818093E1038091C907883F38F0EFEFFC
:108ED000F0E0E81BF109E85FFB4F80818093E0033D
:108EE0008091CA07883F38F0EFEFF0E0E81BF10906
:108EF000E85FFB4F80818093DF038091CB07883F41
:108F000038F0EFEFF0E0E81BF109E85FFB4F8081FC
:108F10008093DE038091CC07883F38F0EFEFF0E0DC
:108F2000E81BF109E85FFB4F80818093DD038091AE
:108F3000B007883F38F0EFEFF0E0E81BF109E85F99
:108F4000FB4F8081809367018091B407883F38F0A0
:108F5000EFEFF0E0E81BF109E85FFB4F80818093C1
:108F600066018091BE07883F38F0EFEFF0E0E81B24
:108F7000F109E85FFB4F8081809365018091C10713
:108F8000883F38F0EFEFF0E0E81BF109E85FFB4FB6
:108F90008081809364018091C207883F38F0EFEFB1
:108FA000F0E0E81BF109E85FFB4F808180936301EB
:108FB0008091C307883F38F0EFEFF0E0E81BF1093C
:108FC000E85FFB4F8081809362018091EB07883FCF
:108FD00038F0EFEFF0E0E81BF109E85FFB4F80812C
:108FE000809334099091DD04992321F08091340914
:108FF000981720F080913409882311F49093340954
:1090000080919007809370098091F10780935409B3
:109010008091C807883F38F0EFEFF0E0E81BF109D6
:10902000E85FFB4F8081809361018091E407883F76
:1090300038F0EFEFF0E0E81BF109E85FFB4F8081CB
:109040008093870980916801282F33272F5F3F4F36
:109050008CE398E2B9010E94FA91709376016093D3
:10906000750180919E078093780980919D07809378
:109070003D099091E607933308F44AC081E080935C
:10908000DC03983F58F0EFEFF0E0E91BF109E85FEF
:10909000FB4F8081823310F41092DC0380917701C2
:1090A0002091DC03821721F18330F8F430919D0187
:1090B000222351F08CED95E09093090380930803EF
:1090C000332369F48EE209C088EC90E090930903A1
:1090D00080930803332319F487E180939D0185E091
:1090E0008093F1032093770103C08150809377012F
:1090F0008091C7099091C80997FF0FC08091DC0348
:10910000882359F08091540580688093540505C0E8
:109110001092DC038AE0809377018091C7099091D7
:10912000C80997FF1DC0809106048823C9F080916B
:10913000DC038823A9F08091090190910A018F5FD7
:109140009F4F71F488E99AE3909309038093080391
:1091500080E094EA90930A01809309011092DC0365
:109160008091DC03882369F08091CE038160809335
:10917000CE0380916401823D48F4825E8093640155
:1091800005C08091CE038E7F8093CE03DF91CF9177
:109190000895A7E1B0E0EFECF8E40C944A920E9445
:1091A000D83D8091CF03992784719070892B91F5D8
:1091B0008091F20782FF27C08091EB039091EC032E
:1091C0000097F1F002E088359007D4F49C0197FFF6
:1091D00002C02D5F3F4F3595279535952795809196
:1091E000A8079927289FA001299F500D389F500D4F
:1091F0001124CA0164E670E00E94FA91CB0106C016
:109200008DE290E003C08091A80799279093CD0349
:109210008093CC032091CA033091CB0355E72033D0
:10922000350759F4109212041092110480913D09EF
:1092300099279093CD038093CC0360911104709192
:1092400012047A83698380913D0999270A966817E9
:10925000790714F49A83898380910704843608F08F
:109260006AC08091CE0382FD66C08091A604909171
:10927000A704009731F001979093A7048093A60468
:109280000BC0109206049093D1038093D003809179
:10929000CF038D7E8093CF03809101018A3011F03E
:1092A000843110F0289A01C028988091D0039091C1
:1092B000D103895E9340E0F18091160A8536C0F1B2
:1092C0008091CC039091CD039A8389838091CF03C1
:1092D00080618093CF0380918407A82FBB27AA0FBA
:1092E000BB1FFD01E551F74F118210828091850768
:1092F000282F3327220F331FC9018551974FFC01B7
:1093000011821082A954B74F11961C921E922954B3
:10931000374FD90111961C921E9280918707E82F32
:10932000FF27EE0FFF1FE954F74F118210823FC352
:10933000109206043CC3809107048D3808F40DC3D5
:109340008091CF038F7E8093CF039091A90782E312
:10935000989FC00111249093A7048093A604E981EB
:10936000FA81B9978CF080910604882369F0809186
:10937000D0039091D103FFEF8F3F9F0729F0019613
:109380009093D1038093D0038091D0039091D10327
:109390008F3F910509F008F51092290410922A04D4
:1093A00010922B0410922C04109225041092260483
:1093B00010922704109228041092920410929304A1
:1093C0001092940410929504109231041092320479
:1093D000109233041092340405C08091CF03826050
:1093E0008093CF0380918607E82FFF27EE0FFF1FA2
:1093F000E954F74F80819181813591050CF438C192
:1094000020910604222309F033C180918707E82FB9
:10941000FF27EE0FFF1FE954F74F808191818C34B5
:1094200091050CF4FFC08091A8048F5F8093A8047D
:10943000893C08F41DC12093A8041092D103109216
:10944000D00330918407E32FFF27EE0FFF1FE9546D
:10945000F74F8081918187349105B4F4809185071D
:10946000E82FFF27EE0FFF1FE954F74F808191810E
:109470000190F081E02DF7FF03C0F095E195FF4FDB
:10948000E734F1050CF478C041E020918507A22F64
:10949000BB27AA0FBB1FA954B74F8D919C91119761
:1094A0008734910544F0E32FFF27EE0FFF1FE954A7
:1094B000F74F808191818D919C918734910574F053
:1094C00080918407E82FFF27EE0FFF1FE954F74F25
:1094D00080819181873491050CF042E0E22FFF27D3
:1094E000EE0FFF1FE954F74F80819181863491057B
:1094F00074F480918407E82FFF27EE0FFF1FE954D3
:10950000F74F80819181873491050CF043E0E22F81
:10951000FF27EE0FFF1FE954F74F808191818A5B8F
:109520009F4F74F480918407E82FFF27EE0FFF1FF1
:10953000E954F74F80819181873491050CF044E024
:10954000E22FFF27EE0FFF1FE954F74F8081918133
:109550008A5B9F4F74F480918407E82FFF27EE0FFA
:10956000FF1FE954F74F80819181863491050CF4F7
:1095700045E0842F0E945A2F80918507E82FFF270E
:10958000EE0FFF1FE954F74F808191810190F08128
:10959000E02DF7FF03C0F095E195FF4F7E97CCF4E7
:1095A00080918407E82FFF27EE0FFF1FE954F74F44
:1095B000808191818A5B9F4F64F481E080936F0585
:1095C0001092F20388EE93E09093090380930803CE
:1095D0004FC00E9463300E94052F80E00E949109D5
:1095E0008091AA070E94B78D8091700980FF10C0FA
:1095F0008091150190911601875B934038F480911A
:109600001501909116018E5E924010F40E94E01DAB
:1096100080E00E94223B81E08093F2038093060366
:10962000579A1AC080819181855B9F4FFCF480918D
:10963000A8048F5F8093A804893CD0F0209306048F
:109640002093A8041092D1031092D00381E00E94CD
:10965000223B81E08093F20388E180939D010E9488
:10966000633068E770E00E943E3A02C02093A8048D
:1096700080918607E82FFF27EE0FFF1FE954F74F71
:10968000808191818B5A9F4F0CF060C12091E70738
:10969000E22FFF27EF77F070EE0FFF1FE551F74F36
:1096A00080819181069714F084E606C080819181C3
:1096B0008B5F9F4F1CF48CE98093AB048091060470
:1096C000E0918707882309F0ECC0FF27EE0FFF1F0A
:1096D000E954F74F80819181855B9F4F9CF4809185
:1096E000F20783FD0BC0E22FFF27EE0FFF1FE954A7
:1096F000F74F80819181855B9F4FDCF08091E70778
:109700008823B9F08091F20783FFC8C08091E707F2
:10971000E82FFF27EE0FFF1FE954F74F808191815B
:10972000875F9F4F0CF4BAC08091AB04843609F078
:10973000B5C02091F203222329F08091CF038860E5
:109740008093CF038091A9048F5F8093A9048E3FFB
:1097500008F4EEC01092A90480915405882309F002
:1097600092C0222309F48FC08091E204882309F07B
:109770008AC081E090E09093D1038093D00381E090
:109780008093060410929204109293041092940411
:109790001092950410923104109232041092330406
:1097A0001092340410922D0410922E0410922F0463
:1097B0001092300480919F07E82EFF240027112784
:1097C00080917409909175099C01442737FD40955B
:1097D000542FC801B7010E94BB91DC01CB018093DB
:1097E000410490934204A0934304B09344048091B5
:1097F0008409909185099C01442737FD4095542F99
:10980000C801B7010E94BB91DC01CB0180933904F0
:1098100090933A04A0933B04B0933C04809161047C
:1098200090916204A0916304B091640480933D041C
:1098300090933E04A0933F04B09340048091590458
:1098400090915A04A0915B04B0915C04809335041C
:1098500090933604A0933704B093380410922904EF
:1098600010922A0410922B0410922C0410922504BA
:1098700010922604109227041092280484E6809304
:10988000F10384E350C08CED95E09093090380933D
:109890000803222309F04CC081E045C01092A904BE
:1098A00047C0FF27EE0FFF1FE954F74F80819181DA
:1098B0008C3491059CF08091F20783FD0BC0E22F60
:1098C000FF27EE0FFF1FE954F74F80819181855BE1
:1098D0009F4FCCF08091E7078823A9F08091F20791
:1098E00083FF24C08091E707E82FFF27EE0FFF1FBB
:1098F000E954F74F808191818E5C9F4FBCF4809139
:10990000AB048C3999F48091AA048F5F8093AA04E8
:109910008B3F70F0109206041092AA041092D103AB
:109920001092D00386E280939D0102C01092AA0497
:109930008091CA039091CB0313E0883E9107B8F55C
:1099400001969093CB038093CA0331C01092AB046D
:109950001092CB031092CA032AC02E5E324038F117
:1099600080918F09909190098059914000F58091E4
:10997000010490910204A0910304B09104048C5D51
:109980009540A040B0409CF480E395E79093CB03D2
:109990008093CA038091D0039091D1038A5E934053
:1099A00030F089EE93E09093D1038093D0038091BF
:1099B0003A01815080933A0180913A018F3F21F022
:1099C0008091CF0384FFA9C30E94C745B0909A0736
:1099D0008091B4049091B5049C01220F331F280F8D
:1099E000391FC0908407AC2DBB27AA0FBB1FFD01F8
:1099F000E954F74F4B2D552780819181849FF001C9
:109A0000859FF00D949FF00D11242E0F3F1F37FFFF
:109A100002C02D5F3F4FB9017595679575956795A4
:109A2000A551B74F80919B07082F11278D919C91CD
:109A3000809F7001819FF00C909FF00C11246E0D9F
:109A40007F1D7093B5046093B4048091B604909127
:109A5000B7049C01220F331F280F391FD0908507B0
:109A6000AD2DBB27AA0FBB1FFD01E954F74F808125
:109A70009181849FF001859FF00D949FF00D11243A
:109A80002E0F3F1F37FF02C02D5F3F4FA901559595
:109A9000479555954795A551B74F8D919C91809FBE
:109AA0007001819FF00C909FF00C11244E0D5F1DF2
:109AB0005093B7044093B6048091DC03882309F4E3
:109AC00048C0CB0177FD0396DC01B595A795B59508
:109AD000A795CA0157FD0396FC01F595E795F59505
:109AE000E79580919801682F772767FD70956A9FA9
:109AF00090016B9F300D7A9F300D11248091E4040A
:109B0000482F552747FD50954E9FC0014F9F900D00
:109B10005E9F900D1124280F391F37FF02C0295F67
:109B20003F4F93E0359527959A95E1F730931804C8
:109B3000209317046E9F90016F9F300D7E9F300D14
:109B400011244A9FC0014B9F900D5A9F900D1124E4
:109B50003FC08091E507E82FFF27EE5BFE4F86812F
:109B60008093980190819093E404A82FBB27A7FDD0
:109B7000B095A69F9001A79F300DB69F300D112480
:109B8000E92FFF27E7FDF095E49FC001E59F900DC9
:109B9000F49F900D1124280F391F37FF02C0295F51
:109BA0003F4F83E0359527958A95E1F73093180468
:109BB00020931704A49F9001A59F300DB49F300DF2
:109BC0001124E69FC001E79F900DF69F900D112490
:109BD000281B390B37FF02C0295F3F4F03E0359543
:109BE00027950A95E1F73093160420931504809188
:109BF0008707E82FFF27EE0FFF1FE954F74F8081FB
:109C00009181909581959F4F9093140480931304B4
:109C10008530910514F0049705C00FEF8C3F900735
:109C200034F40496909314048093130404C01092A7
:109C30001404109213048091D004882309F43EC0C8
:109C4000282F3327809117049091180497FD0796C9
:109C500013E0959587951A95E1F7289FA001299F14
:109C6000500D389F500D1124CA0157FD0F96B4E0D6
:109C700095958795BA95E1F790931804809317040A
:109C8000809115049091160497FD0796A3E0959591
:109C90008795AA95E1F7289FB001299F700D389FFD
:109CA000700D1124CB0177FD0F96F4E09595879503
:109CB000FA95E1F7909316048093150480901704A9
:109CC000909018048091D3049091D404881A990A32
:109CD00090921804809217040091150410911604B4
:109CE0008091D1049091D204081B190B1093160493
:109CF0000093150480918607E82FFF27EE0FFF1FC2
:109D0000E954F74FE080F1808FE790E0E80EF91E0C
:109D1000F0921204E092110480916D019927AA2714
:109D200097FDA095BA2FBC01CD010E942F91DC01B7
:109D3000CB0120E030E040E251E4BC01CD010E94C3
:109D40009D90DC01CB01BC01CD010E940191DC01A1
:109D5000CB0180937E0980916C018093560980919C
:109D60006B019927AA2797FDA095BA2FBC01CD01B9
:109D70000E942F91DC01CB0120E030E040E251E471
:109D8000BC01CD010E949D90DC01CB01BC01CD0145
:109D90000E940191DC01CB0180932F0980916A011F
:109DA0008093450980917B0580FF59C08091870988
:109DB000813808F454C080917405992787FD9095E7
:109DC0002B2D3327829FD001839FB00D929FB00D22
:109DD00011248A0E9B1E9092180480921704809181
:109DE0007505992787FD9095829FF001839FF00D5F
:109DF000929FF00D11240E0F1F1F10931604009355
:109E0000150480917605282F332727FD3095809102
:109E1000130490911404820F931F90931404809361
:109E2000130480917805282F332727FD30958091E2
:109E300095079927289F8001299F100D389F100DA5
:109E400011241093410100934001809177059927D7
:109E50008E159F0524F49093120480931104809131
:109E600011049091120497FF04C0109212041092F2
:109E700011048091700982FF02C01092560940912E
:109E8000170450911804CA0157FD03969C0135959B
:109E900027953595279537FF03C0309521953F4F7E
:109EA0008091D4039091D50382179307B4F4CA012B
:109EB00057FF03C0909581959F4F97FD0396959509
:109EC0008795959587959093D5038093D403853690
:109ED000910544F084E690E001C001979093D5038A
:109EE0008093D4034091150450911604CA0157FD84
:109EF00003969C01359527953595279537FF03C027
:109F0000309521953F4F8091D2039091D3038217D2
:109F10009307B4F4CA0157FF03C0909581959F4FF2
:109F200097FD039695958795959587959093D3037F
:109F30008093D2038536910544F084E690E001C019
:109F400001979093D3038093D2038091CF0384FF32
:109F500008C01092D5031092D4031092D30310922C
:109F6000D203ED2DFF27EE0FFF1FE954F74F40916D
:109F7000BF07242F3327808191812817390744F4A4
:109F80008091EF0782FF04C081E08093E80313C053
:109F9000ED2DFF27EE0FFF1FE954F74F842F992770
:109FA0002091C007821B9109208131812817390730
:109FB00014F41092E80340918507E42FFF27EE0F79
:109FC000FF1FE954F74F5091BF07852F992722278C
:109FD0003327281B390B808191818217930744F422
:109FE0008091EF0783FF04C081E08093E70316C0F0
:109FF0008091E703882391F0E42FFF27EE0FFF1FE6
:10A00000E954F74F8091C0079927851B910920815A
:10A0100031818217930714F41092E703EC2DFF2788
:10A02000EE0FFF1FE954F74F4091BF07242F33274E
:10A03000808191812817390744F48091EF0780FFD0
:10A0400004C081E08093E50317C08091E503882375
:10A0500099F0EC2DFF27EE0FFF1FE954F74F842FE7
:10A0600099272091C007821B9109208131812817EF
:10A07000390714F41092E50340918407E42FFF2779
:10A08000EE0FFF1FE954F74F5091BF07852F992717
:10A0900022273327281B390B808191818217930750
:10A0A00044F48091EF0781FF04C081E08093E603D0
:10A0B00016C08091E603882391F0E42FFF27EE0F6E
:10A0C000FF1FE954F74F8091C0079927851B91091D
:10A0D000208131818217930714F41092E603809156
:10A0E000E803882319F48091E703811181E08093CC
:10A0F000E9038091E503882321F48091E603882316
:10A1000051F081E08093EA031092E9031092E80392
:10A110001092E70302C08093EA038091E903882349
:10A1200021F48091EA03882369F08091BE07992782
:10A1300029813A818217930714F49A83898381E0F5
:10A1400080931D048091CE0399279C012470307068
:10A1500082FF2DC08091D3049091D4049095819575
:10A160009F4F90931804809317048091D10490918D
:10A17000D204909581959F4F909316048093150477
:10A1800080917A0190917B01909312048093110445
:10A19000809170098B778B66809370098091540948
:10A1A0008C7B8093540988EC809373011EC080914E
:10A1B000CF0384FF1AC03093140420931304309308
:10A1C00018042093170430931604209315049AE57D
:10A1D00090937E0988E78093560990932F09809386
:10A1E00045091092E9031092EA0380914809909181
:10A1F0004909A0914A09B0914B092091610430911D
:10A2000062044091630450916404820F931FA41F61
:10A21000B51F8093480990934909A0934A09B093C8
:10A220004B098091500990915109A0915209B09128
:10A230005309E0905904F0905A0400915B04109186
:10A240005C04EB82FC820D831E838E0D9F1DA01F7C
:10A25000B11F8093500990935109A0935209B09374
:10A26000530980913F0990914009A0914109B09113
:10A270004209E0905D04F0905E0400915F0410914B
:10A280006004EF82F88609871A878E0D9F1DA01F34
:10A29000B11F80933F0990934009A0934109B09367
:10A2A00042098091300990913109A0913209B09111
:10A2B0003309E0905504F090560400915704109132
:10A2C0005804EB86FC860D871E878E0D9F1DA01FF0
:10A2D000B11F8093300990933109A0933209B09354
:10A2E0003309F090EA03FF86FF2029F48091E90307
:10A2F000882309F460C01092510410925204109205
:10A3000053041092540410924D0410924E04109273
:10A310004F0410925004109248091092490910926B
:10A320004A0910924B09109250091092510910924B
:10A3300052091092530910923F091092400910924D
:10A34000410910924209109230091092310910927D
:10A350003209109233098091410490914204A091F6
:10A360004304B091440480933D0490933E04A09331
:10A370003F04B09340048091390490913A04A09135
:10A380003B04B0913C048093350490933604A09331
:10A390003704B093380410921603109215031092EC
:10A3A000EE031092ED031092F0031092EF030F856D
:10A3B000002309F0D0C18091E903882309F0CBC1C3
:10A3C0008091250790912607815092402CF480912E
:10A3D0000604882309F4BFC19090000AA0909F074B
:10A3E0002090740930907509409084095090850937
:10A3F00019140CF0BBC0BB24CC24DD24CA01B90164
:10A40000A60195010E942F9279018A018091C909C4
:10A410009091CA09281A390AC101AA2797FDA09567
:10A42000BA2FE81AF90A0A0B1B0B6B817C818D810C
:10A430009E81A60195010E942F9259016A01809187
:10A44000CB099091CC09481A590AC201AA2797FD55
:10A45000A095BA2FA81AB90ACA0ADB0A292C3324F4
:10A4600027FC3094432C532CC801B701A201910161
:10A470000E94BB9197FF04C061507E4F8F4F9F4F4A
:10A480003B014C0109E095948794779467940A9571
:10A49000D1F7C601B501A20191010E94BB9197FFBE
:10A4A00004C061507E4F8F4F9F4F5B016C0119E0DC
:10A4B000D594C794B794A7941A95D1F78091D403F3
:10A4C0009091D503813491053CF48091D203909111
:10A4D000D30381349105D4F0D401C30197FE03C0A6
:10A4E0000196A11DB11D3C014D019594879477946F
:10A4F0006794D601C501D7FE03C00196A11DB11D09
:10A500005C016D01D594C794B794A7948091020A19
:10A51000282F332727FD3095432F532F2615370536
:10A520004805590514F439014A01992787FD90958A
:10A53000909581959F4FAA2797FDA095BA2F6816F1
:10A5400079068A069B0614F43C014D012A153B0549
:10A550004C055D0514F459016A01A816B906CA062E
:10A56000DB060CF0D0C05C016D01CDC0EA2CFF24ED
:10A5700000271127CA01B901A80197010E942F9253
:10A5800039014A01C101AA2797FDA095BA2F681A7F
:10A59000790A8A0A9B0A6B817C818D819E81A80140
:10A5A00097010E942F9259016A01C201AA2797FDC3
:10A5B000A095BA2FA81AB90ACA0ADB0AD401C301A6
:10A5C00097FE03C00F96A11DB11D3C014D01F4E0A3
:10A5D0009594879477946794FA95D1F7D601C5013D
:10A5E000D7FE03C00F96A11DB11D5C016D01E4E013
:10A5F000D594C794B794A794EA95D1F78091D403E2
:10A600009091D503813491053CF48091D2039091CF
:10A61000D30381349105A4F0C401B30123E030E0F9
:10A6200040E050E00E942F9239014A01C601B50175
:10A6300023E030E040E050E00E942F9259016A018F
:10A6400080918707E82FFF27EE0FFF1FE954F74F90
:10A65000808191810190F081E02DF7FF03C0F0959A
:10A66000E195FF4F7A97A4F0C401B30123E030E0F5
:10A6700040E050E00E942F9239014A01C601B50125
:10A6800023E030E040E050E00E942F9259016A013F
:10A6900089E18093860121E26216710481049104AC
:10A6A0002CF070E2672E712C812C912C30EE631609
:10A6B0003FEF73063FEF83063FEF930644F460EEEF
:10A6C000662E6FEF762E6FEF862E6FEF962E41E29D
:10A6D000A416B104C104D1042CF050E2A52EB12C73
:10A6E000C12CD12C50EEA5165FEFB5065FEFC50665
:10A6F0005FEFD50644F440EEA42E4FEFB42E4FEF9B
:10A70000C42E4FEFD42E8091410490914204A09129
:10A710004304B091440486199709A809B9098093A4
:10A72000410490934204A0934304B0934404809165
:10A73000390490913A04A0913B04B0913C048A19E9
:10A740009B09AC09BD098093390490933A04A09306
:10A750003B04B0933C0480911503909116038F3F06
:10A76000910509F008F4C4C56F85662309F04EC54C
:10A770008091E903882309F049C580911D0488234D
:10A7800009F044C57091C707788B772309F43EC55B
:10A790008091480990914909A0914A09B0914B09CB
:10A7A000B7FF04C081509F4FAF4FBF4FE92EFA2E25
:10A7B0000B2F112707FD1A95E0924809F0924909DD
:10A7C00000934A0910934B098091500990915109C7
:10A7D000A0915209B0915309B7FF04C081509F4F17
:10A7E000AF4FBF4F892F9A2FAB2FBB27A7FDBA952D
:10A7F000898B9A8BAB8BBC8B8093500990935109BA
:10A80000A0935209B093530980919F07A82EBB24AF
:10A81000CC24DD2420915104309152044091530402
:10A8200050915404C601B5010E94BB9197FF04C02A
:10A8300061507F4F8F4F9F4F672E782E892E99241E
:10A8400087FC9A946092510470925204809253044F
:10A850009092540420914D0430914E0440914F0445
:10A8600050915004C601B5010E94BB9197FF04C0EE
:10A8700061507F4F8F4F9F4F272E382E492E5524E2
:10A8800047FC5A9420924D0430924E0440924F045B
:10A89000509250048091490490914A04A0914B0435
:10A8A000B0914C04B7FF04C081509F4FAF4FBF4FD2
:10A8B000892F9A2FAB2FBB27A7FDBA958093490408
:10A8C00090934A04A0934B04B0934C04D801C70161
:10A8D00086199709A809B90980939E0490939F044B
:10A8E000A093A004B093A1042091C607E22EFF24F8
:10A8F00000271127BC01CD01A80197010E942F92CA
:10A9000059016A012093AC043093AD044093AE0426
:10A910005093AF0489899A89AB89BC8982199309BC
:10A92000A409B5098093A2049093A304A093A4045E
:10A93000B093A504BC01CD01A80197010E942F92FC
:10A940002093B0043093B1044093B2045093B30405
:10A95000D601C501D7FE04C081509F4FAF4FBF4FF6
:10A96000892F9A2FAB2FBB27A7FDBA959093EE03A3
:10A970008093ED0357FF04C021503F4F4F4F5F4F6F
:10A98000BB2757FDBA95A52F942F832F9093F003E3
:10A990008093EF038091D4039091D5038134910586
:10A9A000DCF48091D2039091D30381349105A4F417
:10A9B00080918707E82FFF27EE0FFF1FE954F74F1D
:10A9C000808191810190F081E02DF7FF03C0F09527
:10A9D000E195FF4F7A97E4F08091000A8F3FC1F430
:10A9E0008091ED039091EE0397FD019695958795E3
:10A9F0009093EE038093ED038091EF039091F00329
:10AA000097FD0196959587959093F0038093EF03BA
:10AA100080913F0990914009A0914109B09142096C
:10AA2000B7FF04C081509F4FAF4FBF4F892F9A2F60
:10AA3000AB2FBB27A7FDBA9580933F0990934009A0
:10AA4000A0934109B0934209809130099091310956
:10AA5000A0913209B0913309B7FF04C081509F4FD4
:10AA6000AF4FBF4F892F9A2FAB2FBB27A7FDBA95AA
:10AA70008093300990933109A0933209B093330940
:10AA80008091610490916204A0916304B091640488
:10AA90002F81388549855A85281B390B4A0B5B0B5A
:10AAA000209396043093970440939804509399040C
:10AAB0008091590490915A04A0915B04B0915C0478
:10AAC000EB84FC840D851E85E81AF90A0A0B1B0B22
:10AAD000E0929A04F0929B0400939C0410939D04CE
:10AAE00020939E0430939F044093A0045093A104AC
:10AAF000E092A204F092A3040093A4041093A5048E
:10AB000080913D0490913E04A0913F04B091400497
:10AB1000821B930BA40BB50B80933D0490933E04D2
:10AB2000A0933F04B0934004809135049091360483
:10AB3000A0913704B09138048E199F09A00BB10B76
:10AB40008093350490933604A0933704B09338046F
:10AB500088898823E1F020911B0430911C0421385E
:10AB600031054CF08091720490917304019690939A
:10AB700073048093720420583F4F4CF48091720408
:10AB800090917304019790937304809372041092D0
:10AB90001C0410921B0481E090E09093B904809310
:10ABA000B804E0909E04F0909F040091A0041091DE
:10ABB000A104D801C70117FF07C088279927DC0126
:10ABC0008E199F09A00BB10B81509240A040B0405C
:10ABD00034F084E090E09093B9048093B8048091BD
:10ABE000BE049091BF04A091C004B091C104209113
:10ABF00048093091490940914A0950914B09821BFB
:10AC0000930BA40BB50B815E914BAF4FBF4F8F538E
:10AC10009C49A040B04028F08091010A89310CF491
:10AC2000FFC021E0E21620E1F20620E0020720E06A
:10AC300012070CF473C08091BA04882309F46AC027
:10AC4000D801C70117FF07C088279927DC018E1993
:10AC50009F09A00BB10B9C01AD01B7FF04C02150AF
:10AC60003E4F4F4F5F4FF9E05595479537952795E4
:10AC7000FA95D1F78091B8049091B904820F931F8F
:10AC80009093B9048093B804D801C70117FF03C09B
:10AC90000796A11DB11DE3E0B595A79597958795FA
:10ACA000EA95D1F78093AC049093AD04A093AE04E1
:10ACB000B093AF0489589341A040B04064F088E855
:10ACC00093E1A0E0B0E08093AC049093AD04A09336
:10ACD000AE04B093AF042091AC043091AD04409128
:10ACE000AE045091AF0457FF04C021503F4F4F4F67
:10ACF0005F4F232F342F452F552747FD5A958091BD
:10AD0000ED039091EE03820F931F9093EE038093D7
:10AD1000ED0306C081E08093BA0402C01092BA0429
:10AD200040E0E41640EFF4064FEF04074FEF14073E
:10AD30000CF073C08091BB04882309F46AC0D80169
:10AD4000C70117FF07C088279927DC018E199F09C3
:10AD5000A00BB10B9C01AD01B7FF04C021503E4FC9
:10AD60004F4F5F4F69E055954795379527956A9501
:10AD7000D1F78091B8049091B904820F931F9093FA
:10AD8000B9048093B804D801C70117FF03C0079620
:10AD9000A11DB11D23E0B595A795979587952A9597
:10ADA000D1F78093AC049093AD04A093AE04B0931C
:10ADB000AF0488579C4EAF4FBF4F64F488E79CEEBA
:10ADC000AFEFBFEF8093AC049093AD04A093AE04BB
:10ADD000B093AF042091AC043091AD044091AE0427
:10ADE0005091AF0457FF04C021503F4F4F4F5F4F6A
:10ADF000232F342F452F552747FD5A958091ED037A
:10AE00009091EE03820F931F9093EE038093ED03D6
:10AE100011C081E08093BB040DC01092BB040AC036
:10AE20001092B9041092B80484E690E090938501E2
:10AE3000809384016889262F33278091B8049091EC
:10AE4000B9042817390724F43093B9042093B804BF
:10AE50001091010A112379F0212F332727FD309516
:10AE60008091B8049091B9042817390724F43093DD
:10AE7000B9042093B80440919E0450919F046091BE
:10AE8000A0047091A104413851056105710574F069
:10AE900080917604909177042091B8043091B904A0
:10AEA000820F931F909377048093760440585F4FEE
:10AEB0006F4F7F4F74F480917604909177042091C6
:10AEC000B8043091B904821B930B9093770480935C
:10AED000760481E090E09093B9048093B804C09028
:10AEE000A204D090A304E090A404F090A504D7019C
:10AEF000C601F7FE07C088279927DC018C199D0938
:10AF0000AE09BF0981509240A040B04034F084E0C7
:10AF100090E09093B9048093B8048091C20490911A
:10AF2000C304A091C404B091C5042091500930918C
:10AF300051094091520950915309821B930BA40B64
:10AF4000B50B815E914BAF4FBF4F8F539C49A040D3
:10AF5000B04018F019310CF4FFC001E0C01600E158
:10AF6000D00600E0E00600E0F0060CF473C080912B
:10AF7000BC04882309F46AC0D701C601F7FE07C0E4
:10AF800088279927DC018C199D09AE09BF099C010E
:10AF9000AD01B7FF04C021503E4F4F4F5F4F09E056
:10AFA00055954795379527950A95D1F78091B8041F
:10AFB0009091B904820F931F9093B9048093B804C1
:10AFC000D701C601F7FE03C00796A11DB11D13E00E
:10AFD000B595A795979587951A95D1F78093B00465
:10AFE0009093B104A093B204B093B30489589341F1
:10AFF000A040B04064F088E893E1A0E0B0E0809326
:10B00000B0049093B104A093B204B093B304209120
:10B01000B0043091B1044091B2045091B30457FF91
:10B0200004C021503F4F4F4F5F4F232F342F452FE8
:10B03000552747FD5A958091EF039091F003820FB9
:10B04000931F9093F0038093EF0306C081E08093F9
:10B05000BC0402C01092BC0420E0C21620EFD2064D
:10B060002FEFE2062FEFF2060CF073C08091BD04C3
:10B07000882309F46AC0D701C601F7FE07C08827F4
:10B080009927DC018C199D09AE09BF099C01AD010E
:10B09000B7FF04C021503E4F4F4F5F4FE9E0559539
:10B0A000479537952795EA95D1F78091B804909107
:10B0B000B904820F931F9093B9048093B804D70109
:10B0C000C601F7FE03C00796A11DB11D73E0B5953B
:10B0D000A795979587957A95D1F78093B00490932B
:10B0E000B104A093B204B093B30488579C4EAF4F01
:10B0F000BF4F64F488E79CEEAFEFBFEF8093B004DE
:10B100009093B104A093B204B093B3042091B0041F
:10B110003091B1044091B2045091B30457FF04C080
:10B1200021503F4F4F4F5F4F232F342F452F55272F
:10B1300047FD5A958091EF039091F003820F931F82
:10B140009093F0038093EF0311C081E08093BD04DE
:10B150000DC01092BD040AC01092B9041092B80438
:10B1600084E690E090938501809384014889242FA0
:10B1700033278091B8049091B9042817390724F433
:10B180003093B9042093B8048091010A882379F0A0
:10B19000282F332727FD30958091B8049091B9046A
:10B1A0002817390724F43093B9042093B804409148
:10B1B000A2045091A3046091A4047091A5044138A5
:10B1C00051056105710574F08091740490917504C6
:10B1D0002091B8043091B904820F931F90937504A5
:10B1E0008093740440585F4F6F4F7F4FCCF4809131
:10B1F0007404909175042091B8043091B904821BB5
:10B20000930B90937504809374040AC01092F0031A
:10B210001092EF031092EE031092ED0310921D04B2
:10B2200080915609882341F41092F0031092EF03A5
:10B230001092EE031092ED03809148099091490914
:10B24000A0914A09B0914B098093BE049093BF042A
:10B25000A093C004B093C10480915009909151090A
:10B26000A0915209B09153098093C2049093C304F2
:10B27000A093C404B093C5041092510410925204D8
:10B28000109253041092540410924D0410924E04E4
:10B2900010924F04109250041092490410924A04E4
:10B2A00010924B0410924C041092480910924909D4
:10B2B00010924A0910924B091092500910925109AC
:10B2C000109252091092530910923F0910924009AE
:10B2D00010924109109242091092300910923109DE
:10B2E000109232091092330910921603109215032E
:10B2F000E0901304F0901404C701F7FE04C08827FF
:10B3000099278E199F0904973CF08091700984FD5C
:10B3100003C082E38093F10310919C07A12EBB240C
:10B32000CC24DD24B701882777FD8095982F9701DD
:10B33000F7FE04C0222733272E193F09442737FD83
:10B340004095542F0E94BB919B01AC01C601B501F1
:10B350000E94BB9197FF04C061507E4F8F4F9F4F5B
:10B3600059E095958795779567955A95D1F79B0103
:10B37000812F99278E9DD0018F9DB00D9E9DB00D80
:10B380001124CD01B7FD03969595879595958795E1
:10B39000280F391F8091F3039091F403280F391F70
:10B3A000442737FD4095542F209392043093930403
:10B3B0004093940450939504809131049091320409
:10B3C000A0913304B0913404821B930BA40BB50BF2
:10B3D0008093310490933204A0933304B0933404E7
:10B3E0008155934CA040B04064F080E593ECA0E020
:10B3F000B0E08093310490933204A0933304B0936F
:10B4000034048091310490913204A0913304B091BE
:10B410003404805B9C43AF4FBF4F64F480EB9CE3EC
:10B42000AFEFBFEF8093310490933204A0933304C5
:10B43000B0933404009188011091890117FDFCC07C
:10B440008091700983FFF8C08091870181508093BB
:10B450008701882309F0F4C08DE0809387018091F3
:10B46000610490916204A0916304B0916404B7FFF9
:10B4700004C081509E4FAF4FBF4F39E0B595A7959F
:10B48000979587953A95D1F77C0197FF04C0F09482
:10B49000E194F108F3948091590490915A04A09199
:10B4A0005B04B0915C04B7FF04C081509E4FAF4F66
:10B4B000BF4F29E0B595A795979587952A95D1F720
:10B4C0009C0197FF03C0309521953F4FE216F3068C
:10B4D0000CF47901B701F7FE02C0695F7F4F2B01C1
:10B4E000A3E055944794AA95E1F722E030E0420E9C
:10B4F000531E60908009709081098090820990901D
:10B50000830920913C0130913D0140913E015091D1
:10B510003F01C401B3010E942F9259016A01309387
:10B520002E0920932D09021B130BC801845E9D4F29
:10B5300068E671E00E94FA919C01245B30408091A2
:10B54000840190918501009731F0019790938501D6
:10B55000809384011BC049E1E416F104BCF480919E
:10B560001B0490911C04820F931F90931C048093E2
:10B570001B048091F103882349F081508093F103EB
:10B58000882321F4B0922004A0921F0480918401AA
:10B5900090918501892BF9F4809186019927289F44
:10B5A000B001299F700D389F700D1124CB01B2019D
:10B5B0000E94FA91CB01AA2797FDA095BA2F680E99
:10B5C000791E8A1E9B1E609280097092810980926A
:10B5D0008209909283098091F103882369F5809113
:10B5E0001F049091200420912D0930912E09821B77
:10B5F000930B845E9D4F68E671E00E94FA919C0176
:10B60000245B30408091700186959927289FD00156
:10B61000299FB00D389FB00D11249D01B7FF02C0C6
:10B62000215F3F4FF4E035952795FA95E1F7309388
:10B63000F4032093F30304C01092F4031092F30375
:10B6400080911D04882381F0109225041092260415
:10B6500010922704109228041092290410922A04B0
:10B6600010922B0410922C04F090EA03FF20F1F4C6
:10B6700080915609282F332744275527809161044C
:10B6800090916204A0916304B0916404BC01CD0167
:10B690000E94BB91DC01CB01BC01CD0128EF3AE255
:10B6A00040E050E00E942F92390102C066247724C6
:10B6B000E090E903EE20F1F480915609282F33271A
:10B6C000442755278091590490915A04A0915B0416
:10B6D000B0915C04BC01CD010E94BB91DC01CB01A7
:10B6E000BC01CD0128EF3AE240E050E00E942F92E9
:10B6F000290102C04424552480912A0990912B09E4
:10B70000893C91051CF088EC90E005C088539F4F60
:10B7100034F488E39FEF90932B0980932A0980915A
:10B72000360990913709893C91051CF088EC90E02E
:10B7300005C088539F4F34F488E39FEF90933709F7
:10B74000809336098091380990913909AA2797FD8D
:10B75000A095BA2F20917E09A22EBB24CC24DD24F3
:10B76000BC01CD01A60195010E94BB919B01AC01DA
:10B7700080912A0990912B09AA2797FDA095BA2FAD
:10B78000E7E0880F991FAA1FBB1FEA95D1F7280F82
:10B79000391F4A1F5B1F57FF04C0215C3F4F4F4FAB
:10B7A0005F4F76E055954795379527957A95D1F770
:10B7B0008301020F131F10933909009338098091F8
:10B7C000280990912909AA2797FDA095BA2FBC01B5
:10B7D000CD01A60195010E94BB919B01AC01809116
:10B7E000360990913709AA2797FDA095BA2F67E0EF
:10B7F000880F991FAA1FBB1F6A95D1F7280F391F01
:10B800004A1F5B1F57FF04C0215C3F4F4F4F5F4FE4
:10B81000F6E05595479537952795FA95D1F742016A
:10B82000820E931E909229098092280980917909AD
:10B8300090917A09880F991FAA2797FDA095BA2F92
:10B8400020912F09332744275527BC01CD010E94A1
:10B85000BB915B016C0197FF08C02FE330E040E033
:10B8600050E0A20EB31EC41ED51EE6E0D594C794C8
:10B87000B794A794EA95D1F780914509282F3327EB
:10B88000442755278091450490914604A091470490
:10B89000B0914804BC01CD010E94BB91DC01CB01F9
:10B8A000BC01CD0120EF35E540E050E00E942F9231
:10B8B000B501620F731F70937A0960937909015083
:10B8C000104134F080E090E1909339098093380979
:10B8D00080913809909139098050904F34F480E07C
:10B8E00090EF909339098093380951E0851650E123
:10B8F000950634F080E090E190932909809328091F
:10B9000080912809909129098050904F34F480E06B
:10B9100090EF90932909809328096150704134F089
:10B9200080E090E190937A09809379098091790978
:10B9300090917A098050904F34F480E090EF90938A
:10B940007A098093790980910001482F55278091C9
:10B950001F01909120014817590794F420911F016D
:10B960003091200109811A81049FC001059F900D2B
:10B97000149F900D1124B9010E94E6917A83698386
:10B9800029813A81220F331F220F331F3A832983E3
:10B990004091700940FD02C00C94D664EE2011F075
:10B9A0000C94D664FF2011F00C94D66400E010E0F3
:10B9B00048018091EB039091EC0390930B078093E7
:10B9C0000A0720917804309179042115310509F096
:10B9D0003FC080911501909116018959934058F00C
:10B9E00087B5803F20F480911903815011C081E018
:10B9F0008093CF044EC0809115019091160184363A
:10BA0000910508F587B58031D0F0809119038F5FDB
:10BA1000809319039FE089029001112480912F07E0
:10BA2000821B87BD8CE291E0909309038093080309
:10BA30008EE591E090937904809378042AC081E0A8
:10BA40008093CE0426C0F092CE04F092CF0421C0A1
:10BA50008091010490910204A0910304B091040428
:10BA600064E0880F991FAA1FBB1F6A95D1F78093C6
:10BA70001A0390931B03A0931C03B0931D03109310
:10BA8000180300931703215030403093790420931A
:10BA900078042091730141FF3CC0223348F5809126
:10BAA0008A01815080938A018F3F09F052C08091B2
:10BAB0009D01882339F480911E04882319F088E2BF
:10BAC00080939D0110921E048091010490910204C4
:10BAD000A0910304B09104048093FD039093FE03AE
:10BAE000A093FF03B093000481E080938A0131C0EA
:10BAF000273478F180919D01882339F480911E04C8
:10BB0000882319F487E280939D0188EC80938A0151
:10BB10001DC08091400190914101820F911D2091A3
:10BB200095073327829FA001839F500D929F500D50
:10BB30001124CA01AA2797FDA095BA2F8093FD036F
:10BB40009093FE03A093FF03B093000481E08093E1
:10BB50001E048091610490916204A0916304B091ED
:10BB60006404E0903C01F0903D0100913E01109191
:10BB70003F01BC01CD01A80197010E942F925901FC
:10BB80006A018091590490915A04A0915B04B0918C
:10BB90005C04BC01CD01A80197010E942F92B9015C
:10BBA000C5010E9469845C01CC971CF05CE3A52E62
:10BBB000B12CC5010E9467725C0180E280933B0159
:10BBC0001092FC031092FB0380911E04882309F459
:10BBD0005FC58091CF0399279C012071307084FD4F
:10BBE00057C58091CE0382608093CE037091540933
:10BBF000872F992741E0C42ED12CC822D92280FD5D
:10BC000004C08091700981FD10C0C980DA80309332
:10BC1000C7042093C6043093FC032093FB03809158
:10BC2000CF03806C8093CF03ABC28091CF0381FFA1
:10BC30007AC200917A0110917B01C8010F96209081
:10BC4000110430901204821593050CF058C08091B5
:10BC5000CE04882309F053C08091CF0387FF15C01D
:10BC60008091CF038F778093CF03809101049091CF
:10BC70000204A0910304B09104048093FD03909307
:10BC8000FE03A093FF03B09300048091CF03806470
:10BC90008093CF03E0903409EE20F1F08091FD0312
:10BCA0009091FE03A091FF03B0910004BC01CD016F
:10BCB00024E630E040E050E00E942F928E2D99273C
:10BCC000AA27BB2782179307A407B5072CF4D092A5
:10BCD000FC03C092FB0310C0C101801B910B0F97A6
:10BCE00097FF03C0909581959F4F9093FC0380939D
:10BCF000FB038BE280933B011092F50316C1C80150
:10BD00000F9728163906C4F52091CF042223A1F5F8
:10BD10008091CF0386FF15C08091CF038F7B8093E6
:10BD2000CF038091010490910204A0910304B0918B
:10BD300004048093FD039093FE03A093FF03B0934C
:10BD400000048091CF0380688093CF03C101801BE2
:10BD5000910B0F9697FF03C0909581959F4F9095FB
:10BD600081959F4F9093FC038093FB038DE280931A
:10BD70003B012093F503D9C08DE380933B01609193
:10BD8000F603662371F12091F7033091F803409197
:10BD9000F9035091FA038091FD039091FE03A09165
:10BDA000FF03B091000482179307A407B507CCF4F2
:10BDB0008091CF0380648093CF03862F992790933F
:10BDC000FC038093FB038AE08093F5038EE5809368
:10BDD0003B018091CF0387FFA8C08091CF038F776D
:10BDE00033C0662309F443C02091F7033091F80370
:10BDF0004091F9035091FA038091FD039091FE0365
:10BE0000A091FF03B0910004281739074A075B0788
:10BE100074F58091CF0380688093CF03862F992794
:10BE2000909581959F4F9093FC038093FB0386EF41
:10BE30008093F50386E780933B018091CF0386FFD3
:10BE400074C08091CF038F7B8093CF0380910104D6
:10BE500090910204A0910304B09104048093FD0327
:10BE60009093FE03A093FF03B09300045EC0809103
:10BE7000CF03807C09F459C08091F503882379F5BC
:10BE8000E0900104F0900204009103041091040476
:10BE9000D801C70180589040A040B0402091FD03D8
:10BEA0003091FE034091FF035091000482179307E5
:10BEB000A407B5075CF4D801C70180589F4FAF4F66
:10BEC000BF4F281739074A075B075CF08093FD03D3
:10BED0009093FE03A093FF03B093000402C010925E
:10BEE000F5038091CF038F738093CF031092C70423
:10BEF0001092C60471FF06C084EF91E0909309038D
:10BF00008093080380910504882379F480910104CB
:10BF100090910204A0910304B0910404C397A10579
:10BF2000B1051CF081E0809305046091C604709116
:10BF3000C7048091FB039091FC03680F791F7093F5
:10BF4000C7046093C604CB0177FF04C088279927F4
:10BF5000861B970B855F91400CF4CEC04091F50392
:10BF6000442389F18091F7039091F8032091FD0318
:10BF70003091FE03821B930B0996439748F48091FE
:10BF8000F7039091F803A091F903B091FA0312C05E
:10BF9000242F332727FD3095432F532F8091FD0306
:10BFA0009091FE03A091FF03B0910004820F931FB4
:10BFB000A41FB51F8093FD039093FE03A093FF037E
:10BFC000B093000424C0809195072091FD03309127
:10BFD000FE034091FF03509100041616170644F427
:10BFE00063E00E94DA91280F311D411D511D07C0E9
:10BFF00063E00E94DA91281B31094109510920931D
:10C00000FD033093FE034093FF035093000410920E
:10C01000C7041092C604E0900104F090020400915D
:10C02000030410910404D801C70180509440A0403B
:10C03000B0402091FD033091FE034091FF035091E9
:10C04000000482179307A407B5075CF4D801C70161
:10C0500080509C4FAF4FBF4F281739074A075B07E7
:10C0600044F08093FD039093FE03A093FF03B093ED
:10C0700000048091540981FF06C084E690E090930B
:10C08000090380930803809199078823A9F580917B
:10C09000F603882389F54091EB035091EC0357FF99
:10C0A00002C04D5F5F4F55954795559547958091D7
:10C0B0001F0190912001209100013327489FF0013A
:10C0C000499FF00D589FF00D1124CF01B9010E9436
:10C0D000FA9170937B0160937A01663471051CF4C8
:10C0E00086E490E005C06739710534F086E990E098
:10C0F00090937B0180937A018091780490917904E8
:10C10000892BD1F18091010490910204A091030444
:10C11000B09104048093FD039093FE03A093FF036A
:10C12000B093000429C08091010490910204A09171
:10C130000304B091040480599140A040B040809322
:10C14000FD039093FE03A093FF03B093000480913E
:10C150009907882311F0992702C088E790E090930F
:10C160007B0180937A01E980FA80F092EC03E092FF
:10C17000EB038EE280933B01C090EB03D090EC0385
:10C18000E0900104F0900204009103041091040473
:10C190002091FD033091FE034091FF035091000474
:10C1A0002E153F054007510724F08091540980FD6A
:10C1B000BBC28091780490917904892B39F0C090AA
:10C1C000EB03D090EC0300E010E0D7C0D801C7012A
:10C1D000821B930BA40BB50B80939604909397044A
:10C1E000A0939804B0939904823000E890070FEF71
:10C1F000A0070FEFB0072CF481E090E8AFEFBFEF9E
:10C2000009C08F5F9F47A040B04064F08FEF9FE769
:10C21000A0E0B0E08093960490939704A0939804D4
:10C22000B093990400919604109197048091720143
:10C23000282F3327442755278091960490919704FF
:10C24000A0919804B0919904BC01CD010E94BB91CA
:10C2500097FF04C0615E7F4F8F4F9F4F25E09595FC
:10C260008795779567952A95D1F760939604709393
:10C270009704809398049093990465302EEF720789
:10C280002FEF82072FEF92072CF484E09EEFAFEFA1
:10C29000BFEF09C0605074408040904064F080E07F
:10C2A00094E0A0E0B0E08093960490939704A0936C
:10C2B0009804B093990480909604909097042091EC
:10C2C00017033091180337FF02C0295F3F4F83E007
:10C2D000359527958A95E1F74FEF223834071CF4FE
:10C2E00021E83FEF05C02038310514F020E830E0A8
:10C2F000C901AA2797FDA095BA2F20917401332771
:10C3000044275527BC01CD010E94BB9197FF04C073
:10C310006D5F7F4F8F4F9F4FB2E0959587957795D3
:10C320006795BA95D1F79B015FEF613075071CF4F3
:10C3300020E03FEF06C06F3F710519F014F020E0D8
:10C3400031E08091CF03807C49F0C90137FD03962D
:10C350009C0135952795359527950DC080915409F9
:10C3600080FF09C0C90137FD07969C01F3E03595B0
:10C370002795FA95E1F7820E931E209171012223F1
:10C3800009F454C060912104709122048091230427
:10C390009091240497FF04C061587F4F8F4F9F4FA7
:10C3A000E7E09595879577956795EA95D1F73327D7
:10C3B000442755270E94BB9197FF04C0615E7F4FC1
:10C3C0008F4F9F4F55E095958795779567955A952F
:10C3D000D1F7609396047093970480939804909398
:10C3E00099046138AFEF7A07AFEF8A07AFEF9A078A
:10C3F0002CF480E89FEFAFEFBFEF0AC06F3F7105ED
:10C400008105910569F064F080E091E0A0E0B0E082
:10C410008093960490939704A0939804B093990402
:10C420008091960490919704880E991E80916F01D7
:10C43000282F33278091040A992787FD9095289FFC
:10C44000F001299FF00D389FF00D11249F01F7FF97
:10C4500002C021583F4F220F232F221F330BFFEF23
:10C4600021383F071CF420E83FEF06C02F3F31057D
:10C4700019F014F020E031E0820E931EC401AA27C7
:10C4800097FDA095BA2FE090EB03F090EC03970195
:10C49000442737FD4095542FBC01CD010E94BB912C
:10C4A00097FF04C061507E4F8F4F9F4F29E09595B5
:10C4B0008795779567952A95D1F7C61AD70A8091FF
:10C4C000FB039091FC03892B09F060C01E141F042C
:10C4D0000CF05CC0980117FF03C0309521953F4FC9
:10C4E0002D33310540F48091190490911A048C1574
:10C4F0009D0574F526C02C53304085E03695279570
:10C500008A95E1F72031310510F02FE030E04091BD
:10C51000190450911A0410161106E4F480E190E019
:10C52000821B930B489F9001499F300D589F300DFF
:10C530001124B4E036952795BA95E1F72C153D0501
:10C5400020F58091780190917901C816D906F4F010
:10C550006C011CC0205F3F4F809178019091790160
:10C56000829F8001839F100D929F100D11249801CE
:10C57000A4E036952795AA95E1F74C155D0514F0D2
:10C580006A0104C0C216D30608F06901C601AA27D1
:10C5900097FDA095BA2FFDE0880F991FAA1FBB1F1A
:10C5A000FA95D1F79501442737FD4095542FBC01EA
:10C5B000CD010E942F9220939A0430939B044093C4
:10C5C0009C0450939D04C0909A04D0909B04809149
:10C5D000C8049091C9049C01220F331F280F391FF2
:10C5E0002C0D3D1D37FF02C02D5F3F4FA901559512
:10C5F0004795559547955093C9044093C804809139
:10C600009107282F3327220F331F220F331F2417A0
:10C6100035076CF480917809282F3327220F331FB8
:10C62000220F331F205530404217530724F0309318
:10C63000C9042093C8048091540980FF14C08091DC
:10C64000C8049091C90429813A818217930724F084
:10C650003093C9042093C8044091C8045091C90480
:10C660005A83498361C029813A812E193F0937FFD6
:10C6700002C02D5F3F4F35952795359527956091E1
:10C68000C8047091C904620F731F7A8369834CC018
:10C6900080919907882301F56091EB037091EC0379
:10C6A00077FF02C06D5F7F4F7595679575956795AC
:10C6B00040911F015091200180910001282F3327C4
:10C6C000649FC001659F900D749F900D1124B90166
:10C6D0000E94FA91CB0101C0992790937B0180932E
:10C6E0007A0180917A0190917B01873491051CF445
:10C6F00086E490E005C08639910534F086E990E043
:10C7000090937B0180937A0189819A819093C904E7
:10C710008093C8048091CF03806C8093CF03809175
:10C72000CE038D7F8093CE038091CF0399279C0108
:10C730002270307081FF2BC18091CA049091CB048C
:10C74000A091CC04B091CD040097A105B10521F0D2
:10C75000809105048130B1F4E981FA81CF01AA27E3
:10C7600097FDA095BA2F1EE0880F991FAA1FBB1F27
:10C770001A95D1F78093CA049093CB04A093CC046C
:10C78000B093CD0480910504813019F482E0809348
:10C790000504E980FA80C701AA2797FDA095BA2F62
:10C7A0009501442737FD4095542FBC01CD010E94CF
:10C7B000BB91DC01CB0180939A0490939B04A093DE
:10C7C0009C04B0939D04B7FF04C08150904EAF4FBE
:10C7D000BF4F7C018D01ADE015950795F794E79467
:10C7E000AA95D1F7E0929A04F0929B0400939C04DE
:10C7F00010939D046091D0037091D1032FE0603AB3
:10C80000720750F58091CA049091CB04A091CC049A
:10C81000B091CD049C01AD01FAE05695479537954E
:10C820002795FA95D1F7821B930BA40BB50BA801A2
:10C830009701E4E0220F331F441F551FEA95D1F7FB
:10C84000820F931FA41FB51F8093CA049093CB043B
:10C85000A093CC04B093CD0460547F4118F580912F
:10C86000CA049091CB04A091CC04B091CD049C015A
:10C87000AD016CE056954795379527956A95D1F7A8
:10C88000821B930BA40BB50BA8019701F2E0220FBA
:10C89000331F441F551FFA95D1F7820F931FA41F12
:10C8A000B51F38C08091170390911803809117032A
:10C8B0009091180397FF03C0909581959F4F843600
:10C8C000910584F580910104909102042091FD036B
:10C8D0003091FE03821B930B81509F4F8F5F9140DD
:10C8E00008F58091CA049091CB04A091CC04B0913A
:10C8F000CD049C01AD01EEE05695479537952795FF
:10C90000EA95D1F7821B930BA40BB50B8E0D9F1DDF
:10C91000A01FB11F8093CA049093CB04A093CC04B2
:10C92000B093CD048091CA049091CB04A091CC0423
:10C93000B091CD047EE0B695A795979587957A95A9
:10C94000D1F79093EC038093EB0340919707442336
:10C9500099F055279C01BA010E94FA91C901861BE2
:10C96000970B90931A0480931904260F371F309366
:10C970007901209378011FC010921A0410921904B3
:10C980008FEF93E0909379018093780114C0109217
:10C9900005041092CA041092CB041092CC04109299
:10C9A000CD043093EC032093EB0305C08091CF03BB
:10C9B000806C8093CF038091DE0481FF37C0898132
:10C9C0009A8197FD039695958795959587952091E2
:10C9D000CC033091CD032817390760F48091EB0325
:10C9E0009091EC03892B31F0220F331F220F331F5C
:10C9F0003A8329838091010490910204A091030459
:10CA0000B09104048093FD039093FE03A093FF0371
:10CA1000B093000488E99AE3909309038093080394
:10CA200080E09EE090930A018093090120913D09E6
:10CA3000822F9927880F991F880F991F88966981DF
:10CA40007A818617970714F09A8389837091780901
:10CA50007D8B872F9927880F991F880F991F8055E5
:10CA60009040A981BA818A179B0714F49A8389831D
:10CA700080914E03882341F48091160A8F3F21F460
:10CA80008091E2048823E9F08091D0039091D10352
:10CA90000297C097B0F4E981FA811E161F068CF444
:10CAA00081E090E09093D1038093D003E22EFF24A5
:10CAB000EE0CFF1CEE0CFF1C8701085D1F4F1A8354
:10CAC000098329813A813093EF062093EE06809105
:10CAD000920490919304A0919404B091950412E073
:10CAE000880F991FAA1FBB1F1A95D1F700917909CA
:10CAF00010917A09081B190B213A31058CF0C901F4
:10CB000037FD019695958795801791070CF48C0158
:10CB1000909581959F4F081719076CF48C010BC0F5
:10CB20000135110514F000E510E03FEF003B13075D
:10CB300014F400EB1FEF4D89242F3327220F331FEE
:10CB4000220F331FC90169817A81861B970B8017D9
:10CB500091070CF48C0189819A81821B930B081731
:10CB600019070CF48C018091380990913909609172
:10CB7000170470911804861B970B909347098093B4
:10CB80004609D09056092091290430912A044091F9
:10CB90002B0450912C04DD2041F0661A770AC30162
:10CBA000AA2797FDA095BA2F04C0AA2797FDA095A4
:10CBB000BA2F280F391F4A1F5B1F20932904309377
:10CBC0002A0440932B0450932C04809129049091C3
:10CBD0002A04A0912B04B0912C0481509A4FA040BC
:10CBE000B04064F080E09AEFA0E0B0E080932904C8
:10CBF00090932A04A0932B04B0932C0480912904D1
:10CC000090912A04A0912B04B0912C04805096405E
:10CC1000AF4FBF4F64F480E096E0AFEFBFEF80937B
:10CC2000290490932A04A0932B04B0932C04C09061
:10CC3000A607209146093091470978E0E72EEC14C9
:10CC400098F08C2D9927829FA001839F500D929F71
:10CC5000500D1124CA0157FD07967C0163E0F5943D
:10CC6000E7946A95E1F712C08C2D86959927829FEB
:10CC7000B001839F700D929F700D1124CB0177FD41
:10CC800003967C01F594E794F594E794A0907501E0
:10CC9000B09076019501442737FD4095542F80913F
:10CCA000290490912A04A0912B04B0912C04BC017A
:10CCB000CD010E942F92E20EF31E90906101692D2A
:10CCC000772788279927980117FF04C02227332741
:10CCD000201B310B37FF02C02F5F3F4F3595279543
:10CCE000A981BA812A0F3B1F442737FD4095542F55
:10CCF0000E94BB9197FF04C0615C7F4F8F4F9F4F95
:10CD000026E095958795779567952A95D1F79B01AC
:10CD10006E157F050CF47B01309521953F4FE2168F
:10CD2000F3060CF47901809128099091290960910A
:10CD3000150470911604861B970B90932709809316
:10CD40002609209125043091260440912704509112
:10CD50002804DD2041F0461A570AC201AA2797FD90
:10CD6000A095BA2F04C0AA2797FDA095BA2F280F27
:10CD7000391F4A1F5B1F20932504309326044093DC
:10CD80002704509328048091250490912604A091B3
:10CD90002704B091280481509A4FA040B04064F01D
:10CDA00080E09AEFA0E0B0E0809325049093260401
:10CDB000A0932704B0932804809125049091260421
:10CDC000A0912704B091280480509640AF4FBF4FE8
:10CDD00064F480E096E0AFEFBFEF8093250490937A
:10CDE0002604A0932704B0932804209126093091AB
:10CDF000270948E04C1598F08C2D9927829FB001A7
:10CE0000839F700D929F700D1124CB0177FD0796C3
:10CE10006C01B3E0D594C794BA95E1F712C0C694FB
:10CE20008C2D9927829FD001839FB00D929FB00DCA
:10CE30001124CD01B7FD03966C01D594C794D59408
:10CE4000C7949501442737FD4095542F80912504C0
:10CE500090912604A0912704B0912804BC01CD0133
:10CE60000E942F92C20ED31E692D772788279927FB
:10CE7000980117FF04C022273327201B310B37FFEF
:10CE800002C02F5F3F4F35952795E981FA812E0F1C
:10CE90003F1F442737FD4095542F0E94BB9197FFB9
:10CEA00004C0615C7F4F8F4F9F4FE6E0959587955B
:10CEB00077956795EA95D1F79B016C157D050CF484
:10CEC0006B01309521953F4FC216D3060CF46901D2
:10CED00080913D09282E33245090E80766E5862E80
:10CEE00068E0962E5DE0A52E58E0B52E4BE0442E6E
:10CEF00037E5632E39E0732ED5012C9112160CF014
:10CF000029C1203429F4E981FA81FF8BEE8B1FC0FF
:10CF100049815A81CA01AA2797FDA095BA2F3327C4
:10CF200027FD3095432F532FBC01CD010E94BB91AB
:10CF300097FF04C0615C7F4F8F4F9F4F26E0959510
:10CF40008795779567952A95D1F77F8B6E8BF5013D
:10CF50002181203439F42E893F892E0D3F1D3F8BCE
:10CF60002E8B2AC0203C39F44E895F894E195F0907
:10CF70005F8B4E8B21C0C701AA2797FDA095BA2FC2
:10CF8000332727FD3095432F532FBC01CD010E943D
:10CF9000BB9197FF04C0615C7F4F8F4F9F4FB6E0FE
:10CFA0009595879577956795BA95D1F7AE89BF899D
:10CFB000A60FB71FBF8BAE8BF5012281203439F449
:10CFC0002E893F892C0D3D1D3F8B2E8B2AC0203C86
:10CFD00039F44E895F894C195D095F8B4E8B21C0F6
:10CFE000C601AA2797FDA095BA2F332727FD3095B4
:10CFF000432F532FBC01CD010E94BB9197FF04C06A
:10D00000615C7F4F8F4F9F4FA6E0959587957795F1
:10D010006795AA95D1F7AE89BF89A60FB71FBF8BB9
:10D02000AE8BF5012381203439F42E893F89200FFE
:10D03000311F3F8B2E8B2AC0203C39F44E895F89EB
:10D04000401B510B5F8B4E8B21C0C801AA2797FD57
:10D05000A095BA2F332727FD3095432F532FBC01BE
:10D06000CD010E94BB9197FF04C0615C7F4F8F4F41
:10D070009F4FF6E09595879577956795FA95D1F747
:10D08000AE89BF89A60FB71FBF8BAE8BF30180811E
:10D0900091812E893F898217930764F4B901680F43
:10D0A000791F77FF02C06F5F7F4F759567957F8B04
:10D0B0006E8B1DC0552049F44E895F89440F551F62
:10D0C000481B590B5F8B4E8B12C051E0551578F4FD
:10D0D000252D33276E897F89861B970BB9010E9406
:10D0E000FA91AE89BF89A60FB71FBF8BAE8BC10166
:10D0F000880F991F880F991FEE89FF898E179F0748
:10D1000064F4FD898F2F9927880F991F880F991F25
:10D110002E893F892817390714F09F8B8E8B8E89B3
:10D120009F8997FD03969595879595958795F40129
:10D130008183880F991F880F991F2E893F89281B8B
:10D14000390BC901880F8283EE89FF89D301ED93E2
:10D15000FC9303C0F401118212824A9422E030E071
:10D16000620E731E44E050E0A40EB51E68E070E04D
:10D17000860E971E47FEC0CEE2E1C95E0C94669211
:10D1800084B1806A84B93D9A82E58CBD1DBC459A04
:10D1900081E080938A098AEA80939B0983E88093DF
:10D1A0009C098AE080939D0910929F0910929E0924
:10D1B0001092A1091092A0091092030A1092BF09BF
:10D1C000089530918A09332309F085C00DB407FE14
:10D1D00082C084E080930703459A2EB58091E504D0
:10D1E00099278130910589F0823091051CF4892BB3
:10D1F00021F03EC00297B9F03BC03093BE092093A6
:10D20000E6042138A9F581E008C0253549F480916C
:10D21000E604820F8093E60482E08093E50428C050
:10D220003093E50425C08091BE09E82FFF27E05226
:10D23000F64F20838F5F8093BE099091E604803281
:10D24000A0F0291769F480E2A0EEB9E0E0ECF9E083
:10D250000D9001928A95E1F781E08093BF0902C0A9
:10D260003093BF091092E50403C0920F9093E60437
:10D2700020919A09223208F028C045980000000049
:10D28000000000000000000000000000000000009E
:10D29000000000000000000000000000000000008E
:10D2A000000000000000000000000000E091930971
:10D2B000F0919409E20FF11D80818EBD8091BC092F
:10D2C0009081890F8093BC0903C081E080938A0913
:10D2D0002F5F20939A090895EF92FF920F931F9367
:10D2E00080919F079927880F991F880F991F7C01AC
:10D2F0000027F7FC0095102F809161049091620443
:10D30000A0916304B0916404BC01CD01A801970110
:10D310000E942F9230939F0920939E098091590477
:10D3200090915A04A0915B04B0915C04BC01CD01C2
:10D33000A80197010E942F923093A1092093A00980
:10D34000209180093091810940918209509183098F
:10D35000DA01C90163E0880F991FAA1FBB1F6A95F4
:10D36000D1F7820F931FA41FB51F820F931FA41F15
:10D37000B51F20913C0130913D0140913E015091FB
:10D380003F01BC01CD010E942F923093A709209349
:10D39000A609809172049091730420912403309126
:10D3A0002503821B930B9093AD098093AC09E09108
:10D3B0006804F091690480914D0990914E09BF0174
:10D3C0000E94FA919B01220F331F220F331F260F59
:10D3D000371F260F371F37FF02C02D5F3F4F359590
:10D3E0002795359527953093A3092093A20980911D
:10D3F0007C0990917D09BF010E94FA919B01220F47
:10D40000331F220F331F260F371F260F371F37FFFB
:10D4100002C02D5F3F4F3595279535952795309361
:10D42000A5092093A409109269041092680410922F
:10D430004E0910924D0910927D0910927C0980913D
:10D440009D099927AA27BB27FC013A97E830F105E7
:10D4500008F0FEC1E058FF4F0C9481928091E403E4
:10D460008093B0098091E3038093B1098091E20336
:10D470008093B2098091E1038093B3098091E00326
:10D480008093B4098091DF038093B5098091DE0316
:10D490008093B6098091DD038093B7098091CF0313
:10D4A0008093B8098091CF03837F8093CF030E943C
:10D4B00063308093B9098091E9078093BA0980911C
:10D4C000CE03C4C18091100A9091110A9093B109C2
:10D4D0008093B0098091140A9091150A9093B30932
:10D4E0008093B20980911F01909120018093B4092B
:10D4F000809100018093B50980913B018093B6092A
:10D500009091E7049093B709E92FFF27A3E0EE0F6E
:10D51000FF1FAA95E1F7EA5AF74F86818093B80971
:10D5200083818093B90987818093BA09858180932B
:10D53000BB09892F8F5F6CE00E94DA919093E7041A
:10D5400087C18091D4078093B0098091D5078093DB
:10D55000B1098091D6078093B2098091D707809353
:10D56000B3098091D8078093B4098091DC07809338
:10D57000B5098091DD078093B6098091DE0780931D
:10D58000B7098091E1078093B8098091DF07809304
:10D59000B9098091E0078093BA098091E20756C1EA
:10D5A0008091D3078093B0098091AA07863081F0DB
:10D5B0008091D402823451F00E94A973E82FFF2792
:10D5C000EB55FF4E84918093D40202C00E94A97350
:10D5D00080910A058093B1093BC1F8948091860738
:10D5E000E82FFF27EE0FFF1FE954F74F0190F0815E
:10D5F000E02DE038F1051CF0EFE7F0E006C02FEF7A
:10D60000E138F20714F4E1E8FFEFE093B00980910C
:10D610008707E82FFF27EE0FFF1FE954F74F019010
:10D62000F081E02DE038F1051CF0EFE7F0E006C0F6
:10D630007FEFE138F70714F4E1E8FFEFE093B10979
:10D6400080918507E82FFF27EE0FFF1FE954F74F62
:10D650000190F081E02DE038F1051CF0EFE7F0E0FB
:10D6600006C08FEFE138F80714F4E1E8FFEFE0932C
:10D67000B20980918407E82FFF27EE0FFF1FE954BE
:10D68000F74F0190F081E02DE038F1051CF0EFE755
:10D69000F0E006C02FEFE138F20714F4E1E8FFEF05
:10D6A0007894E093B309809108048093B409809141
:10D6B00009048093B50980910A048093B60980918A
:10D6C0000B048093B70980910C048093B809809172
:10D6D0000D048093B90980910E048093BA0980915A
:10D6E0000F04B4C080916F05863018F010926F055A
:10D6F00085E08093B0098091E3078093B109809120
:10D70000010490910204A0910304B0910404BC01AF
:10D71000CD0125E030E040E050E00E942F923093B0
:10D72000B3092093B2098091FD039091FE03A0916B
:10D73000FF03B0910004BC01CD0125E030E040E0E2
:10D7400050E00E942F923093B5092093B409809144
:10D75000D9078093B6098091DA078093B709809141
:10D76000DB078093B809809107048093B909809101
:10D77000B7089091B8088093BA098091EE0690910D
:10D78000EF0697FD039695958795959587955EC0CD
:10D790001092B0098AE58093B10983E08093B209C1
:10D7A00084E38093B309809101018093B40980914F
:10D7B00054058093B509909155059093B6098F77DC
:10D7C00080935405907190935505809156058093F0
:10D7D000B709809170098093B809809154098093AA
:10D7E000B9098091E5078093BA098091F2072EC0AC
:10D7F0008091B8078093B0098091F0078093B109B8
:10D80000809167018093B2098091B1078093B30939
:10D810008091B2078093B4098091B3078093B509D2
:10D82000809166018093B6098091B5078093B7090E
:10D830008091B6078093B8098091B7078093B909A2
:10D840008091160A8093BA09809118078093BB09CA
:10D850008091BF09882309F47DC16091C00980913E
:10D860009901681719F08AEF8093970160939901E5
:10D8700081E0809387014091C1095091C209CA019A
:10D8800081509E4F8F5F9340B0F42091C309309137
:10D89000C409C90181509E4F8F5F934060F480910D
:10D8A000900785FF08C05093D4044093D30430936D
:10D8B000D2042093D1048091C7099091C80921E036
:10D8C0008936920724F490938901809388012091EE
:10D8D000D1093091D20980910803909109038217F0
:10D8E000930740F48091DC02882321F430930903EC
:10D8F00020930803862F99278936910509F4A5C03E
:10D900008A36910544F48736910571F08836910581
:10D9100009F462C027C18A36910509F414C18B3617
:10D92000910509F4E2C01EC18091D3098093000AD9
:10D930008091D4098093020A8091D5098093010ACD
:10D940008091D609809386018091D7098093040A3B
:10D950008091D809809398018091D9098093E4043B
:10D960008091DA098093D0048091DC038823F9F058
:10D970002091DB093091DC0937FD19C03093200478
:10D9800020931F049091BA07992389F08FE0989F04
:10D99000C0011124281B390BC90188599E4F68E624
:10D9A00071E00E94FA919093200480931F042091CB
:10D9B000DB043091DC048091DD099091DE09280FB1
:10D9C000391F37FF02C02F5F3F4F359527953093A2
:10D9D000DC042093DB04C6C08091D30980939509B1
:10D9E0008091D409809396098091D50980939709F5
:10D9F0008091D609809398098091D70980939909DD
:10DA00008091DE069091D809892B8093DE06909153
:10DA1000DF0693708091D9098C70982B9093DF0664
:10DA20008091DA098093E2048091DB0980938B0175
:10DA30008091DC098093030A8091DD098093DE04E4
:10DA40008091DE098093DD048DC08091D30980939D
:10DA50008B098091D40980938C098091D50980939A
:10DA60008D098091D60980938E098091D709909174
:10DA7000D8099093900980938F098091D90990914A
:10DA8000DA0990939209809391098091DB09992793
:10DA900087FD90959093EA088093E9088091DC09CE
:10DAA0008093F6038091DD099091DE099C01442763
:10DAB00037FD4095542FDA01C90163E0880F991FA3
:10DAC000AA1FBB1F6A95D1F7820F931FA41FB51F12
:10DAD000820F931FA41FB51F8093F7039093F80341
:10DAE000A093F903B093FA033DC08091D3098093CA
:10DAF000E1048091D4098093E0048091D50980935A
:10DB0000DF049091D609992349F080919D018823E3
:10DB100019F08151833010F490939D018091D709C1
:10DB200080930F058091D80980930E058091D909C3
:10DB30009091DA0990930C0580930B058091DB0995
:10DB400080930D050FC08091AA07863059F40E947A
:10DB5000027408C01092D4041092D3041092D2041C
:10DB60001092D1041F910F91FF90EF900895809132
:10DB70008A09882309F43BC045988BE999E0909382
:10DB80009409809393099091E304E92FFF27E457C8
:10DB9000FE4F9F5F9093E304808180939D099B30AB
:10DBA00010F01092E30410928A090E946C6981E0DF
:10DBB00080939A09000000000000000000000000AF
:10DBC0000000000000000000000000000000000055
:10DBD0000000000000000000000000000000000045
:10DBE0000000000080919B098093BC098EBD0895C0
:10DBF00087B18C6087B9429843981092E90480E815
:10DC000080939B011092E80480939A01089580917B
:10DC1000EE0481508093EE048F3F09F055C189E0F6
:10DC20008093EE048091E9089091EA0881589F4F13
:10DC300039F08091E9089091EA0881588093F304C3
:10DC40008091CF03992780739070892B21F4809164
:10DC5000550580FF1DC08091D107882351F0809128
:10DC6000F104882319F484E08093E90481E080932F
:10DC7000F1048091D2078823B9F08091F2048823BF
:10DC800019F484E08093E80481E08093F2040CC0EE
:10DC90001092F1041092F2048091CD078093EF046A
:10DCA0008091CF078093F0048091F104882309F0DC
:10DCB00073C08091EF07282F332724FF07C080917E
:10DCC0000604882319F425FD80C081C09091CE07F9
:10DCD000983F48F080914F098D3D28F08091EF04E6
:10DCE00088236CF00AC0983F68F080914F09853016
:10DCF00049F48091EF0487FF02C0429801C0429A24
:10DD000081E032C08091E90481508093E9048F3F23
:10DD100009F05EC08091F20785FF29C09091F3045D
:10DD2000892F86958093E904992351F48091EF041B
:10DD300087FF02C0429801C0429A10929B0148C0DE
:10DD400080919B019091EF04882341F48093F30428
:10DD500080E880939B019923D4F137C0982311F078
:10DD6000429A01C04298869580939B0131C0809170
:10DD70004F0986958093E90480919B01813021F4BD
:10DD80001092F30480E801C0869580939B018091F6
:10DD90009B019091EF0417C08091E904815080931A
:10DDA000E9048F3FA9F489E08093E90480919B0105
:10DDB000813011F480E801C0869580939B018091A9
:10DDC0009B019091D107892311F0429A01C042989A
:10DDD0008091F204882309F043C09091EF0797FFE8
:10DDE00007C080910604882319F496FD52C053C0E1
:10DDF0009091D007983F48F0809177098D3D28F0A9
:10DE00008091F00488236CF00AC0983F78F08091EC
:10DE10007709853059F48091F00487FF02C0439858
:10DE200001C0439A81E080939A0136C08091E80452
:10DE300081508093E8048F3F79F58091770986952A
:10DE40008093E80480919A01813011F480E801C048
:10DE5000869580939A0180919A019091F00417C061
:10DE60008091E80481508093E8048F3FA9F489E011
:10DE70008093E80480919A01813011F480E801C018
:10DE8000869580939A0180919A019091D207892377
:10DE900011F0439A01C04398429B04C08091CE0385
:10DEA000886003C08091CE03877F8093CE03439B1D
:10DEB00006C08091CE0380618093CE030895809147
:10DEC000CE038F7E8093CE0308950F931F93CF933D
:10DED000DF93482FEB0180910704E42FFF27843B59
:10DEE000D8F08F010E0F1F1FF801E954F74F808102
:10DEF00091819B01281B390BC90163E070E00E94EE
:10DF0000FA91CB01880F991F860F971F0551174F64
:10DF1000F8019183808306C0EE0FFF1FE551F74F94
:10DF200011821082E42FFF27EE0FFF1FE954F74FF5
:10DF3000D183C083DF91CF911F910F9108954FB787
:10DF400024E130E0F8948091C9008F778093C90074
:10DF50008091C9008F7B8093C9008091C9008F7D1B
:10DF60008093C9005A9A52985B9A539A832F9927A3
:10DF70008093CD002093CC008091C8008260809374
:10DF8000C80080E18093C9008091CA008F77809398
:10DF9000CA008091CA008F7B8093CA008091CA001A
:10DFA0008F7D8093CA008091CA008F7E8093CA00C3
:10DFB0008091CA00877F8093CA008091C9008B7FBF
:10DFC0008093C9008091CA0084608093CA008091C8
:10DFD000CA0082608093CA008091C80087FF03C096
:10DFE0008091CE00F9CF8091C90080688093C900EC
:10DFF0004FBF0895EF92FF920F931F93CF93DF933C
:10E00000482F00E010E080919C01813061F4109273
:10E010009C0184E48093F6041092F8041092F704B3
:10E020001092F90403C28091F604882319F421E0C8
:10E0300030E001C098019091F704992371F4232BEB
:10E0400011F081E010C084E48093F6049093F8040A
:10E050009093F7049093F904D2C1913069F4232B83
:10E0600009F0C3C182E08093F7048091F8048F5FC8
:10E070008093F80483E0C1C19230D1F4232B09F0DE
:10E08000B4C183E08093F6044093F9049091F804BE
:10E09000923039F41092FA0447FF03C081E0809374
:10E0A000FA0483E08093F7049F5F9093F804A7C17C
:10E0B000933009F09AC1232B09F097C19093F6048D
:10E0C00082E08093F7048091F8048F5F8093F804D6
:10E0D0002091F904822F9927782F6627842F99277A
:10E0E000682B792B8091AA07813051F47370CB0192
:10E0F0008050924063E070E00E94FA91EB0119C0F9
:10E10000823069F47770CB018050944066E070E013
:10E110000E94FA91EB012695269526950CC0EB01FD
:10E12000D370C856D140CE01D7FD0196EC01D595EC
:10E13000C79526952695022F11270F7010700F5F37
:10E140001F4F0D30110508F049C10230110519F4B7
:10E1500004E010E005C00430110511F402E010E005
:10E16000D801A00FB11FFD01E954F74F80819181C3
:10E170009E01281B390BC90137FF03C0909581957B
:10E180009F4F069704F5E091EC07EE2351F0FF272F
:10E19000EE0FFF1FE954F74F80819181843691057E
:10E1A00094F480910704883C30F480910704865FE2
:10E1B0008093070408C088EC8093070480916F0067
:10E1C0008F7D80936F00A954B74F8D919C91BC01B6
:10E1D000660F771F680F791F6C0F7D1F77FF02C0D6
:10E1E0006D5F7F4F7B01F594E794F594E794CE0142
:10E1F00001968E159F0524F40894E108F10808C0E3
:10E20000CE010197E816F9061CF40894E11CF11CF4
:10E210000630110509F0CEC0C536D1050CF4A5C0F5
:10E220009091F504E92FFF27EB5FF54FE081ED3783
:10E2300029F48091F40480958093F404963061F47D
:10E240008091F404882311F0E338B9F0882309F0B1
:10E2500088C0ED3791F085C0993009F082C0809177
:10E26000F404882329F480910E0A833831F079C0B0
:10E2700080910E0A8D3709F074C08091060A8D379F
:10E2800039F48091070A833899F463E87FEF0DC071
:10E29000833871F48091070A833819F460E070E0E4
:10E2A00004C08D3729F46DE770E085E00E94656F4A
:10E2B0008091080A992787FD9095BC0186E00E940D
:10E2C000656F8091090A992787FD9095BC018BE0C5
:10E2D0000E94656F80910A0A992787FD9095BC017D
:10E2E0008CE00E94656F8091F5048930D1F58091B2
:10E2F0000C0A8D3749F48091C7089091C80805969B
:10E30000BC0188E00E94656F80910D0A8D3749F449
:10E310008091C7089091C8080597BC0188E00E94C9
:10E32000656F8091C7089091C80883589F4F1CF46F
:10E3300083E89FEF09C08091C7089091C8088E3785
:10E34000910534F08DE790E09093C8088093C7085A
:10E3500080910B0A992787FD9095BC018AE00E9465
:10E36000656F1092F5041092F404CA30D1055CF484
:10E370008091F5048F5F8093F504E82FFF27EB5F12
:10E38000F54F83E880838091F5048A3011F4109270
:10E39000F5048FEFCC39D8076CF48091F504E82FA1
:10E3A000FF27EB5FF54F8DE780838091F404809524
:10E3B0008093F4040530110518F4B701802F0BC0C9
:10E3C0000530110519F4BE0187E005C007301105BD
:10E3D000B1F4BE0189E00E94656F11C002311105E0
:10E3E00070F081E080939C010AC081E080939C01E1
:10E3F0001092F8041092FA0484E48093F604809159
:10E40000F804803198F08091FA04882331F48091E7
:10E410009C01882311F480933A011092F804109221
:10E42000FA041092F70484E48093F604E6E0CDB792
:10E43000DEB70C947292CF93FC0197FF05C0CFEF2B
:10E44000F095E195FF4F01C0C1E028E631E0CF0132
:10E45000B9010E94FA91FC018B35910554F08B555E
:10E4600090408A35910538F484EB90E08E1B9F0B29
:10E47000FC0141E00DC0CF01855B90408A359105DC
:10E4800018F4E45BF04003C02E1B3F0BF9014FEF83
:10E49000EE0FFF1FE85BF64F259134918C2F9927E3
:10E4A00087FD9095289FB001299F700D389F700DB2
:10E4B0001124842F992787FD9095689FA001699F5B
:10E4C000500D789F500D1124CA01CF9108952AE56F
:10E4D00030E0281B390BC9010E941B720895089572
:10E4E000089508950895089580E090E008951092A9
:10E4F000110A1092100A1092150A1092140A109222
:10E50000130A1092120A1092160A8AE090E00E94F2
:10E510006F199093FC048093FB040895CF93DF93CD
:10E520008091FB049091FC040E947819882309F4DF
:10E53000AFC08091FB049091FC040A969093FC0478
:10E540008093FB04E0E0F0E09F0190E05FEFA6E540
:10E55000B8E04BE0ED018B8187FF0BC09F5F8D81A1
:10E56000E80FF11D8981280F311D8E81851708F470
:10E57000582F4150189647FFEDCF5093160A232B82
:10E5800041F520910105309102054091030550911C
:10E590000405BB27A52F942F832F9093000580930C
:10E5A000FF04AA27BB27281B390B4A0B5B0BCF01A3
:10E5B000AA27BB27280F391F4A1F5B1F209301057D
:10E5C000309302054093030550930405E5E0F0E025
:10E5D00013C02091FF04309100052E173F0718F457
:10E5E000E21BF30B02C0E0E0F0E0892F9927880FCF
:10E5F000991FE80FF91F3596F093110AE093100A5E
:10E60000EF3FF10578F480911F01909120018E9FDA
:10E6100090018F9F300D9E9F300D1124C90164E63B
:10E6200070E013C0CF0196958795969587952091B8
:10E630001F0130912001289FA001299F500D389F74
:10E64000500D1124CA0169E170E00E94E6917093B7
:10E65000130A6093120A2091FD043091FE042E0FDC
:10E660003F1F3093FE042093FD045EE02131350707
:10E6700078F08091140A9091150A01969093150AEA
:10E680008093140A20513E403093FE042093FD04F1
:10E69000DF91CF91089530911005E32FFF2783E09C
:10E6A000EE0FFF1F8A95E1F7EA5AF74F2781422FB5
:10E6B000552747FD50958091110599278417950797
:10E6C0002CF420931105309313050AC0222341F046
:10E6D0008091120599274817590714F420931205C1
:10E6E000832F8F5F809310058D30D0F0109210052E
:10E6F000809112058F3F19F08093060502C0109299
:10E70000060580911105809307058091130580937C
:10E7100005058FEF809312051092110510921305D5
:10E72000089595E1899F802D11240E94FC8B8AE831
:10E730009CE09F938F938EEC9BE89F938F93E09147
:10E740003B05F0913C0509950F900F900F900F90AD
:10E750000895CF93C0E020919D0120930A058091F8
:10E76000CF0385FF02C0C0E123C09091E20499234A
:10E77000B1F080910604882349F4E92FFF27EE0FBA
:10E78000FF1FE150F64F8491882349F4E92FFF27BA
:10E79000EE0FFF1FE250F64FC491CC2349F4809155
:10E7A000F20786FD03C010929D0104C0C22F02C073
:10E7B000C0930A05809114058C1771F4809115059A
:10E7C000909116050E947819882319F480E090E052
:10E7D00017C088E893E102C080ED97E00E946F19AE
:10E7E0009093160580931505CC2331F080919D01FF
:10E7F000C81711F410929D01C09314058C2F99270E
:10E80000CF91089540E050E030E08091DE099927F3
:10E810008A38910589F08B38910524F4893891055F
:10E8200041F013C08D38910569F08E38910539F0AB
:10E830000CC04FE65AE008C047E45BE005C047E182
:10E840005AE002C043E45AE03CE29091D30920E050
:10E850008091D409281770F4931760F4DA01A90F96
:10E86000B11DE22FFF27E054F64F85898C939F5FFF
:10E870002F5FEECF089520E335E780913B018B3287
:10E8800011F08D32F9F480919507282F332780916C
:10E89000FB039091FC03829FA001839F500D929FE8
:10E8A000500D1124CA0163E070E00E94FA91CB017F
:10E8B0009B01205D3A48C196C19708F03FC02EEFFA
:10E8C00034E73CC0803229F58091CF0381FF36C008
:10E8D0002091080530910905205D3A4855E721331C
:10E8E000350748F085E72439380718F420E335E781
:10E8F00002C02456304045E720333407F8F454E78B
:10E900002D3C350718F020E335E718C02C593F4F50
:10E9100015C08E3549F49091F6038AE0989F9001D6
:10E920001124205D3A480AC0863741F49091F603DD
:10E930008AE0989FC0011124281B390BC901089552
:10E94000EF92FF920F931F9399278A38910509F44C
:10E9500044C18B38910524F48938910551F0DEC209
:10E960008D38910509F424C28E38910509F486C1C9
:10E97000D5C28091010490910204A0910304B0914A
:10E980000404BC01CD0124E630E040E050E00E94E8
:10E990002F92DA01C9018C509E4F9093750A809393
:10E9A000740A0E943B7490937B0A80937A0A909336
:10E9B0007D0A80937C0A90937F0A80937E0A20913F
:10E9C000740A3091750A8091780A9091790A281713
:10E9D000390724F43093790A2093780A8091760AD3
:10E9E0009091770A8217930724F43093770A209343
:10E9F000760A1092710A8FE69AE090932705809329
:10EA0000260580913B018093950A8091CE0380FF7B
:10EA100002C083E401C080E28093960A2091E20460
:10EA2000222309F1822F6AE00E94DA91805D8093AF
:10EA3000800A822F0E94DA91892F805D8093810A5B
:10EA40008AE38093820A81E1289FF0011124A3E8E0
:10EA5000BAE0E25CF54F9FE084918D93915031963E
:10EA600097FFFACF58C28091CF0385FF0CC0A0E872
:10EA7000BAE0EEE5FCE094E184918D9391503196FB
:10EA800097FFFACF48C230910E05332309F499C09D
:10EA900087E58093800A80E58093810A40E2409375
:10EAA000820A20910F05822F6AE00E94DA91805D30
:10EAB0008093830A822F0E94DA91892F805D809350
:10EAC000840A8FE28093850A832F0E94DA91805D09
:10EAD0008093860A832F0E94DA91892F805D80932C
:10EAE000870A4093880A20910B0530910C0583E03A
:10EAF000293E380780F0C90168EE73E00E94E69174
:10EB0000CB01805D8093890AC90168EE73E00E94A1
:10EB1000E6919C0102C04093890A2536310580F0B8
:10EB2000C90164E670E00E94E691CB01805D8093AC
:10EB30008A0AC90164E670E00E94E6919C0103C064
:10EB400080E280938A0AC9016AE070E00E94E6913F
:10EB5000CB01805D80938B0AC9016AE070E00E945E
:10EB6000E691805D80938C0A8DE680938D0A80E229
:10EB700080938E0A20910D05253660F0822F64E681
:10EB80000E94DA91805D80938F0A822F0E94DA9131
:10EB9000292F02C080938F0A822F6AE00E94DA91A7
:10EBA000805D8093900A822F0E94DA91892F805D88
:10EBB0008093910A83E78093920A80E28093930A7C
:10EBC000AAC1A0E8BAE0E4E7FCE094E184918D9367
:10EBD0009150319697FFFACF9EC180910104909198
:10EBE0000204A0910304B0910404BC01CD0124E609
:10EBF00030E040E050E00E942F92DA01C9018C50D1
:10EC00009E4F90935D0B80935C0B0E943B7490939E
:10EC10005F0B80935E0B88E78093600B80918C097B
:10EC20008093610B0E94A9738093490B80918B099B
:10EC300081FF02C084E407C080918D09833011F404
:10EC400080E201C081E28093620B87E49BE09093B5
:10EC500027058093260580918B0180936E0B809110
:10EC6000620B8093700B809191099091920997FDAE
:10EC70000196959587958093630B4DC10E944B73C8
:10EC80008091010490910204A0910304B0910404C6
:10EC9000BC01CD0124E630E040E050E00E942F921C
:10ECA000DA01C9018C509E4F9093320A8093310A49
:10ECB00080911F019091200190932C0A80932B0A40
:10ECC00080911F019091200190932E0A80932D0A2C
:10ECD00080912D0990912E0997FD01969595879524
:10ECE00080931D0A8093240A209191093091920902
:10ECF00037FF02C02F5F3F4F359527952093220A9B
:10ED000080918F099091900964E170E00E94E691F2
:10ED10006093230A2093290A60932A0A0E943B7475
:10ED200090933A0A8093390A88E780933B0A80914E
:10ED30001F01909120019093360A8093350A8091AB
:10ED400006058C5E80932F0A809107058C5E809368
:10ED5000300A8091140A9091150A6AE070E00E94CE
:10ED6000E6917093380A6093370A1092190A8091DD
:10ED7000100A9091110A9093340A8093330A87E124
:10ED80009AE090932705809326052091D602309132
:10ED9000D702C9016CE370E00E94E69160933E0ADD
:10EDA000C9016CE370E00E94E69180933F0AB3C012
:10EDB0000E944B7380918F099091900964E670E0F6
:10EDC0000E94E6917093590A6093580A80912D0928
:10EDD00090912E0997FD0196959587958093490A04
:10EDE000809191099091920997FD0196959587954B
:10EDF00080934E0A80910001482F55279A012B5F7E
:10EE00003F4F80911F01909120012817390784F40A
:10EE100080911F0190912001841B950B9C01220F72
:10EE2000331F280F391F822F82518093550A02C049
:10EE30001092550AE0900104F0900204009103043E
:10EE400010910404C801B70124E630E040E050E02E
:10EE50000E942F923093570A2093560A37FF04C01E
:10EE60001092570A1092560AC801B70124E630E002
:10EE700040E050E00E942F92DA01C9018C509E4F71
:10EE800090935B0A80935A0A80911F019091200110
:10EE90009093500A80934F0A80911F019091200116
:10EEA0009093520A8093510A0E943B7490935D0A9A
:10EEB00080935C0A88E780935E0A80911F0190919D
:10EEC00020019093620A8093610A809106058C5E0E
:10EED0008093530A809107058C5E8093540A809139
:10EEE000140A9091150A6AE070E00E94E69170930E
:10EEF000640A6093630A1092450A8091100A909107
:10EF0000110A9093600A80935F0A83E49AE09093D9
:10EF10002705809326052CE230E002C020E030E097
:10EF2000C9011F910F91FF90EF900895EF92FF920A
:10EF30000F931F93CF93DF9380910805909109055C
:10EF40009C0153E0220F331F5A95E1F7281B390B20
:10EF50008091170390911803280F391F37FF02C0C3
:10EF6000295F3F4F43E0359527954A95E1F7309368
:10EF700009052093080590911805992309F020C3ED
:10EF800080911705282F3327442755278F5F8093BB
:10EF90001705F9012131310508F00FC3E857FF4F7C
:10EFA0000C9481928091CF0385FF2AC080E00E945B
:10EFB000FC8B80911F01909120016AE070E00E941B
:10EFC000FA919F938F9380911F01909120016AE0A5
:10EFD00070E00E94FA917F936F9380EA9CE09F9388
:10EFE0008F938FEE9BE89F938F93E0913B05F09179
:10EFF0003C0509952DB73EB7285F3F4F2DBF28C070
:10F0000080E00E94FC8B80911F01909120016AE0BA
:10F0100070E00E94FA919F938F9380911F019091CD
:10F0200020016AE070E00E94FA917F936F938DEA6D
:10F030009CE09F938F938EEC9BE89F938F93E0913E
:10F040003B05F0913C0509958DB79EB708968DBF9D
:10F050008091700980FF39C080911E048823E9F0F7
:10F060008AE00E94FC8B80913B0199279F938F93AC
:10F070008091010490910204A0910304B0910404D2
:10F08000BC01CD0124E630E040E050E00E942F9228
:10F090003F932F938AEB9CE099C68AE00E94FC8BF9
:10F0A0008091010490910204A0910304B0910404A2
:10F0B000BC01CD0124E630E040E050E00E942F92F8
:10F0C0003F932F9386EC9CE0ADC78AE00E94FC8BB7
:10F0D00081ED9CE09F938F938EEC9BE80C94438191
:10F0E0008091CF0385FF2AC085E10E94FC8B80912F
:10F0F000D6029091D7026CE370E00E94E6919F9354
:10F100008F938091D6029091D7026CE370E00E94B9
:10F11000E6917F936F938BED9CE09F938F938FEE9F
:10F120009BE89F938F93E0913B05F0913C050995F7
:10F130002DB73EB7285F3F4F2DBF28C085E10E9405
:10F14000FC8B8091D6029091D7026CE370E00E9414
:10F15000E6919F938F938091D6029091D7026CE3B2
:10F1600070E00E94E6917F936F9388EE9CE09F93FE
:10F170008F938EEC9BE89F938F93E0913B05F091EA
:10F180003C0509958DB79EB708968DBF8FE10E940B
:10F19000FC8B80E690E09F938F9380912D09909156
:10F1A0002E099F938F9385EF9CE09F938F93CEECD6
:10F1B000DBE8DF93CF93E0913B05F0913C050995A7
:10F1C0008091CE032DB73EB7285F3F4F2DBF80FF04
:10F1D00006C089E20E94FC8B80E09DE073C389E257
:10F1E0000E94FC8B82E09DE0B9C68091CF0385FF31
:10F1F0001BC08AE20E94FC8B8091140A9091150A30
:10F200009F938F9384E09DE09F938F938FEE9BE875
:10F210009F938F93E0913B05F0913C0509958DB745
:10F220009EB706968DBF1BC08AE20E94FC8B809120
:10F23000140A9091150A9F938F938CE09DE09F9301
:10F240008F938EEC9BE89F938F93E0913B05F09119
:10F250003C0509952DB73EB72A5F3F4F2DBF86E38A
:10F260000E94FC8B8091100A9091110A6AE070E074
:10F270000E94E6919F938F938091100A9091110ABA
:10F280006AE070E00E94E6917F936F9384E19DE0D5
:10F290009F938F938EEC9BE89F938F93E0913B0518
:10F2A000F0913C0509958DB79EB70896C9C689E0CF
:10F2B0000E94FC8B80E29DE09F938F930EEC1BE8F5
:10F2C0001F930F93E0913B05F0913C0509958EE16A
:10F2D0000E94FC8B0F900F900F900F9082E29DE0A8
:10F2E0009F938F931F930F93E0913B05F0913C0503
:10F2F000099583E30E94FC8B0F900F900F900F9065
:10F3000084E29DE09F938F931F930F93E0913B05C1
:10F31000F0913C0509958FE30E94FC8B0F900F90B4
:10F320000F900F9086E29DE09F938F931F930F9312
:10F33000E0913B05F0913C0509958EE70E94FC8B1E
:10F340000F900F900F900F908CE39DE09F938F9301
:10F350001F930F939AC780919701882309F462C085
:10F360008DE50E94FC8B82E59DE09F938F93CEEC10
:10F37000DBE8DF93CF93E0913B05F0913C050995E5
:10F3800084E50E94FC8B0F900F900F900F9080915E
:10F390008C0999279F938F9384E59DE09F938F938A
:10F3A000DF93CF93E0913B05F0913C0509958EE505
:10F3B0000E94FC8B2DB73EB72A5F3F4F2DBF809137
:10F3C0008F09909190096AE070E00E94E6917F9326
:10F3D0006F938DE59DE09F938F93DF93CF93E091A3
:10F3E0003B05F0913C0509958DB79EB706968DBFFC
:10F3F00080918D09833081F480918B0981FF06C053
:10F400008BE50E94FC8B87E69DE0A8C58BE50E94FA
:10F41000FC8B8AE69DE0A2C58BE50E94FC8B8DE605
:10F420009DE02DC784E0D3C380919701882309F420
:10F430007AC080911A059EECE92E9BE8F92E88236C
:10F4400009F44BC089E60E94FC8B8091E104992766
:10F450009F938F9380E79DE09F938F93FF92EF920E
:10F46000E0913B05F0913C05099585E70E94FC8BF6
:10F470002DB73EB72A5F3F4F2DBF80918B01992753
:10F480009F938F9300E610E01F930F938091910953
:10F49000909192099F938F938BE79DE09F938F9319
:10F4A000FF92EF92E0913B05F0913C05099582E7D0
:10F4B0000E94FC8B8DB79EB70A968DBF8091DF04AA
:10F4C00099279F938F931F930F938091E00499271F
:10F4D0009F938F9387E89DE073C689E60E94FC8B1B
:10F4E00080918B0199279F938F9380E690E09F9363
:10F4F0008F9380919109909192099F938F9380911E
:10F500008E0999279F938F9387E99DE09F938F930F
:10F51000FF92EF92E0913B05F0913C0509958DB784
:10F520009EB70C968DC585E052C39091E204992355
:10F53000D1F080912305882381F0903270F487E028
:10F540000E94917383E90E94FC8B8091E2049927C9
:10F550009F938F9380EB9DE0A4C383E90E94FC8B73
:10F560008BEB9DE0B3C38091CF030EECE02E0BE854
:10F57000F02E85FF06C084E90E94FC8B81EC9DE0A3
:10F58000DAC383E90E94FC8B84ED9DE0D4C38091B3
:10F59000AC0B863059F480911A05882319F010922B
:10F5A0001A059AC681E080931A0596C6883009F03C
:10F5B00093C60E94018C81E0DBC39093170594C62B
:10F5C000913009F0E0C380911705282F3327442795
:10F5D00055278F5F80931705F9012131310508F018
:10F5E0007EC6E756FF4F0C9481928091CF0385FF32
:10F5F00043C080E00E94FC8B8091140A9091150A10
:10F600009F938F9380911F01909120016AE070E099
:10F610000E94FA919F938F9380911F0190912001F6
:10F620006AE070E00E94FA917F936F938091D60216
:10F630009091D7026CE370E00E94E6919F938F93C4
:10F640008091D6029091D7026CE370E00E94E6911F
:10F650007F936F938AEE9DE09F938F938FEE9BE84D
:10F660009F938F93E0913B05F0913C0509952DB751
:10F670003EB7225F3F4FB1C580E00E94FC8B809176
:10F68000140A9091150A9F938F9380911F01909176
:10F6900020016AE070E00E94FA919F938F9380911D
:10F6A0001F01909120016AE070E00E94FA917F931F
:10F6B0006F938091D6029091D7026CE370E00E9424
:10F6C000E6919F938F938091D6029091D7026CE33D
:10F6D00070E00E94E6917F936F9385E09EE0C2C246
:10F6E00085E10E94FC8B80E690E09F938F93809150
:10F6F0008801909189019F938F9380E29EE09F9370
:10F700008F93CEECDBE8DF93CF93E0913B05F09154
:10F710003C050995809170092DB73EB7285F3F4F92
:10F720002DBF80FF51C080911E04882339F18FE1E5
:10F730000E94FC8B8091010490910204A09103042B
:10F74000B0910404BC01CD0124E630E040E050E07B
:10F750000E942F923F932F938AE29EE09F938F9374
:10F760008EED9BE89F938F93E0913B05F0913C05D4
:10F7700009958DB79EB706968DBF38C08FE10E9460
:10F78000FC8B8091010490910204A0910304B0913C
:10F790000404BC01CD0124E630E040E050E00E94CA
:10F7A0002F923F932F9383E39EE09F938F93DF935A
:10F7B000CF93E0913B05F0913C0509952DB73EB7FD
:10F7C0002A5F3F4F2DBF12C08FE10E94FC8B8CE35C
:10F7D0009EE09F938F93DF93CF93E0913B05F09151
:10F7E0003C0509950F900F900F900F9089E20E94B1
:10F7F000FC8B80913B0199279F938F9386E49EE039
:10F800009F938F93DF93CF9313C4809197018823A5
:10F81000F9F08BE20E94FC8B80918B0199279F93DA
:10F820008F9380918F09909190096AE070E00E9417
:10F83000E6917F936F9380E690E09F938F93809102
:10F840009109909192099F938F9389E49EE058C10A
:10F8500082E0BDC18FE30E94FC8B8091120A9091DF
:10F86000130A9F938F938091100A9091110A6AE076
:10F8700070E00E94E6919F938F938091100A90917F
:10F88000110A6AE070E00E94E6917F936F9380E630
:10F890009EE09F938F93CEECDBE8DF93CF93E091D4
:10F8A0003B05F0913C0509958091CE032DB73EB7FD
:10F8B000265F3F4F2DBF80FF0AC082E50E94FC8B70
:10F8C00084E79EE09F938F938EED9BE8DCC482E5F6
:10F8D0000E94FC8B87E79EE041C3809197011EEC5C
:10F8E000E12E1BE8F12E882309F449C084E50E942B
:10F8F000FC8B80918C0999279F938F9380918E091F
:10F9000099279F938F938AE79EE09F938F93E701B8
:10F91000FF92EF92E0913B05F0913C0509958DB780
:10F920009EB708968DBF80918D09833051F484E68F
:10F930000E94FC8B8DE89EE09F938F93FF92EF9245
:10F940000BC084E60E94FC8B83E99EE09F938F931B
:10F950008FEE9BE89F938F93E0913B05F0913C05E0
:10F9600009950F900F900F900F9080918B0981FF58
:10F97000BBC484E60E94FC8B89E99EE0EFC284E56B
:10F980000E94FC8B8FE99EE0D6C180911905CEECD8
:10F99000EC2ECBE8FC2E882309F450C089E60E94A7
:10F9A000FC8B809173086AE00E94DA91892F992775
:10F9B0009F938F93809173080E94DA9199279F9368
:10F9C0008F9380916B080E94DA91892F99279F93DA
:10F9D0008F9380916B080E94DA9199279F938F9360
:10F9E000809163080E94DA91892F99279F938F93C2
:10F9F000809163080E94DA9199279F938F93809159
:10FA00005B080E94DA91892F99279F938F938091A9
:10FA10005B080E94DA9199279F938F9385EB9EE074
:10FA20009F938F93FF92EF92E0913B05F0913C05FD
:10FA300009952DB73EB72C5E3F4FCFC389E60E9494
:10FA4000FC8B80E690E09F938F93809175089927B7
:10FA500087FD90959F938F9380916D08992787FDDF
:10FA600090959F938F9380916508992787FD909536
:10FA70009F938F9380915D08992787FD90959F9321
:10FA80008F9382ED9EE09F938F93FF92EF92E09190
:10FA90003B05F0913C0509958DB79EB70E96D0C2F7
:10FAA0008091190590918207882309F48DC09430C4
:10FAB00009F48CC09630A1F58EE70E94FC8B8091F2
:10FAC00083086AE00E94DA91892F99279F938F9388
:10FAD000809183080E94DA9199279F938F93809158
:10FAE0007B080E94DA91892F99279F938F938091A9
:10FAF0007B080E94DA9199279F938F9385EE9EE071
:10FB00009F938F938EEC9BE89F938F93E0913B059F
:10FB1000F0913C0509952DB73EB7245F3F4F5DC37B
:10FB2000973008F4E1C38EE70E94FC8B8091930824
:10FB30006AE00E94DA91892F99279F938F93809191
:10FB400093080E94DA9199279F938F9380918B0855
:10FB50000E94DA91892F99279F938F9380918B0828
:10FB60000E94DA9199279F938F93809183080E9436
:10FB7000DA91892F99279F938F93809183080E9410
:10FB8000DA9199279F938F9380917B080E94DA9155
:10FB9000892F99279F938F9380917B080E94DA91F8
:10FBA00099279F938F9384EF9EE09F938F938EEC82
:10FBB0009BE89F938F93E0913B05F0913C0509955D
:10FBC0008DB79EB744963CC2943021F486E00E94E3
:10FBD00091738AC39630F1F48EE70E94FC8B80E625
:10FBE00090E09F938F9380918508992787FD90954A
:10FBF0009F938F9380917D08992787FD90959F9380
:10FC00008F9381E19FE09F938F938EEC9BE89F936E
:10FC10008F93DAC2973008F467C38EE70E94FC8B9B
:10FC200080E690E09F938F9380919508992787FDB8
:10FC300090959F938F9380918D08992787FD90953C
:10FC40009F938F9380918508992787FD90959F9327
:10FC50008F9380917D08992787FD90959F938F932F
:10FC600084E29FE09F938F938EEC9BE89F938F930A
:10FC70000ECF9091E204992309F44AC080912305A4
:10FC80008823F9F09032E8F487E00E94917383E9C9
:10FC90000E94FC8B8091E20499279F938F9387E3C6
:10FCA0009FE09F938F938EED9BE89F938F93E091BE
:10FCB0003B05F0913C0509952DB73EB72A5F3F4FB4
:10FCC0008CC283E90E94FC8B82E49FE09F938F9318
:10FCD0000EEC1BE81F930F93E0913B05F0913C0560
:10FCE00009951F921F929091E20481E1989FC001B3
:10FCF0001124825C954F9F938F931F930F93E091F4
:10FD00003B05F0913C0509958DB79EB70A9698C1C1
:10FD10008091CF03BEECEB2EBBE8FB2E85FF06C027
:10FD200084E90E94FC8B88E49FE005C083E90E947F
:10FD3000FC8B8BE59FE09F938F93FF92EF92A5C280
:10FD40008091AC0B863079F480911905882319F0E5
:10FD50001092190503C081E08093190585E00E9487
:10FD6000917386E0AEC2883031F40E94018C82E04B
:10FD700080931805AFC2813009F0AEC20E94018C99
:10FD800010921805A7C2923009F0ACC280911705F5
:10FD9000282F3327442755278F5F80931705F901B4
:10FDA0002131310508F09BC2E655FF4F0C9481923A
:10FDB00080E00E94FC8B83EF97E09F938F930E94DB
:10FDC000633099279F938F9381E79FE09F938F9351
:10FDD0008EED9BE89F938F93E0913B05F0913C055E
:10FDE00009952DB73EB7285F3F4FF7C185E10E94C7
:10FDF000FC8B81E098E09F938F93809100016AE0F3
:10FE00000E94DA91892F99279F938F938091000107
:10FE10000E94DA9199279F938F9380E89FE09F93A8
:10FE20008F938EEC9BE89F938F93E0913B05F0912D
:10FE30003C05099569CF8AE20E94FC8B81E99FE02D
:10FE40009F938F93CEECDBE8DF93CF93E0913B055C
:10FE5000F0913C050995809170090F900F900F90DB
:10FE60000F9080FF41C0809190079091730181FDB8
:10FE70000BC0892F99279F938F9386E99FE09F93CB
:10FE80008F93DF93CF9313CFE0913B05F0913C0527
:10FE9000933318F080EA9FE002C087EA9FE09F93C7
:10FEA0008F93DF93CF9309950F900F900F900F9042
:10FEB00080915409E0913B05F0913C0590917301CC
:10FEC00080FF0BC0892F99279F938F938EEA9FE025
:10FED0009F938F93DF93CF93AFC0892F99279F93E1
:10FEE0008F9384EB9FE0CFC08AEB9FE037C08FE316
:10FEF0000E94FC8B83EC9FE09F938F93CEECDBE81A
:10FF0000DF93CF93E0913B05F0913C0509950F906D
:10FF10000F900F900F908091E607882319F487ECDB
:10FF20009FE01CC08091DC03E0913B05F0913C0513
:10FF3000882319F080ED9FE002C087ED9FE09F933A
:10FF40008F93DF93CF9309950F900F900F900F90A1
:10FF50008091F10786FFC8C18EED9FE09F938F933C
:10FF6000DF93CF9392C184E50E94FC8B85EE9FE0E6
:10FF70009F938F93CEECDBE8DF93CF93E0913B052B
:10FF8000F0913C050995809170090F900F900F90AA
:10FF90000F9085FD03C08AEE9FE011C08091D407C9
:10FFA000883F10F4E82F07C0EFEFF0E0E81BF109FD
:10FFB000E85FFB4FE081E23358F483EF9FE09F93CB
:10FFC0008F93DF93CF93E0913B05F0913C0516C0F2
:10FFD000E43B18F08AEF9FE0F2CF8091F107E091C7
:10FFE0003B05F0913C0585FF03C081E090E102C034
:10FFF00088E090E19F938F93DF93CF9309950F90C3
:020000021000EC
:100000000F900F900F908091EA07882309F46CC13C
:100010008EE50E94FC8B8091EA0799279F938F932E
:100020008FE090E19F938F938EEC9BE89F938F934B
:10003000E0913B05F0913C0509958DB79EB706967A
:100040008DBF52C189E60E94FC8B8AE190E19F93AB
:100050008F93CEECDBE8DF93CF93E0913B05F091FB
:100060003C0509950F900F900F900F908091E90734
:10007000E0913B05F0913C05882351F099279F932F
:100080008F9384E290E19F938F93DF93CF9313CE6E
:1000900088E290E19F938F93DF93CF93FAC0809192
:1000A0001B05AEECEA2EABE8FA2E882309F053C00C
:1000B0008EE70E94FC8B8091670199279F938F9315
:1000C00080918507E82FFF27EE0FFF1FE954F74FB8
:1000D000808191819F938F9380918407E82FFF27E0
:1000E000EE0FFF1FE954F74F808191819F938F930B
:1000F0008EE290E19F938F93FF92EF92E0913B0508
:10010000F0913C05099583E90E94FC8B8DB79EB761
:100110000A968DBF80918707E82FFF27EE0FFF1FFC
:10012000E954F74F808191819F938F938091860747
:10013000E82FFF27EE0FFF1FE954F74F80819181D1
:1001400081589F4F9F938F9382E490E19F938F9369
:10015000FF92EF9241CE8EE70E94FC8B80910A04C1
:1001600099279F938F938091090499279F938F9349
:100170008091080499279F938F9381E590E19F9345
:100180008F93FF92EF92E0913B05F0913C0509952A
:1001900083E90E94FC8B8DB79EB70A968DBF809134
:1001A0000D0499279F938F9380910C0499279F9317
:1001B0008F9380910B0499279F938F9385E690E10D
:1001C0009F938F93FF92EF92E0913B05F0913C0556
:1001D00009952DB73EB7265F3F4F2DBF85C0809153
:1001E0002305882309F480C08EE70E94FC8B809150
:1001F000700986FD11C089E790E19F938F938FEE80
:100200009BE89F938F93E0913B05F0913C05099506
:100210000F900F900F900F908091EF0799278F709C
:100220009070892B89F088E890E19F938F938FEEEF
:100230009BE89F938F93E0913B05F0913C050995D6
:100240000F900F900F900F908091700982FF11C056
:1002500082E990E19F938F938FEE9BE89F938F931A
:10026000E0913B05F0913C0509950F900F900F90A0
:100270000F908091700983FD37C087E990E19F93CB
:100280008F938FEE9BE89F938F93E0913B05F091C6
:100290003C0509950F900F900F900F9025C000918D
:1002A000AC0B063089F480911B05882319F010925D
:1002B0001B0503C081E080931B0586E00E949173BB
:1002C00087E00E94917308C0013031F40E94018CD4
:1002D00000931805109217051092AC0B05C01092F0
:1002E000170502C010921805E6E0CDB7DEB70C94F2
:1002F00072924FB728E130E0F8948091C9008F776F
:100300008093C9008091C9008F7B8093C900809140
:10031000C9008F7D8093C9005A9A52985B9A539A6C
:10032000832F99278093CD002093CC008091C80023
:1003300082608093C80080E18093C9008091CA00E8
:100340008F778093CA008091CA008F7B8093CA0008
:100350008091CA008091CA008F7E8093CA008091EC
:10036000CA0088608093CA008091C9008B7F809307
:10037000C9008091CA0084608093CA008091CA003D
:1003800082608093CA008091C80087FF03C080917B
:10039000CE00F9CF8091C90080688093C900809118
:1003A0008A0B846080938A0B4FBF08959091F60466
:1003B000992341F48F3031F490931D0580E58093AB
:1003C000F6040895E0911D05EF5FE0931D05E83107
:1003D00021F481E080931C050895E93120F089E142
:1003E00080931D050895FF27ED58F44F80830895ED
:1003F000A0E0B0E0EEEFF1E80C94529291E0D92E3B
:1004000082E0A82EBD2CE12C01E0F02E80918A0B19
:1004100082FDB5C080916F008F7D80936F00E09169
:10042000EC07EE2351F0FF27EE0FFF1FE954F74FC3
:1004300080819181843691055CF480910704883C29
:1004400020F4809107048C5E01C088EC809307043F
:100450008091740B682F772780911E0581508093BF
:100460001E058F3F31F41CE7C12E82E080931E05EC
:1004700002C0C4E2CC2E40E04C1508F07EC0EA2D4C
:10048000FF27ED58F44F80818D2111F06E297F29CF
:100490008D2D9927880F991FD82E882319F4B1E044
:1004A000DB2EAD0CEE0CFF1C20E0E21628E0F2067D
:1004B00009F061C0A1E0EA2EF12CCB0180509440FC
:1004C00065E070E00E94FA91AB2DBB27FD01EA0FB9
:1004D000FB1FE954F74F808191819C01220F331F4C
:1004E000280F391F260F371F37FF02C02D5F3F4FE0
:1004F000E901D595C795D595C795CB0101968C1780
:100500009D0714F4219706C061507040C617D707A5
:100510000CF4219680910704833CD8F08D010A0FDA
:100520001B1FF801E954F74F80819181FE01E81B00
:10053000F90BCF0163E070E00E94FA91CB01880FC4
:10054000991F860F971F0551174FF80191838083DC
:1005500007C0AA0FBB1FA551B74F11961C921E9240
:10056000EB2DFF27EE0FFF1FE954F74FD183C08318
:1005700060E070E0B3944F5F7FCF10923A01109229
:100580001C05EAE0CDB7DEB70C946E92089508958D
:1005900040E050E080911F05909120059C01220FC2
:1005A000331F280F391F8091170390911803280FCC
:1005B000391F37FF02C02D5F3F4F35952795359581
:1005C00027953093200520931F0580913B018B32A6
:1005D000D9F480919507282F33278091FB039091C0
:1005E000FC03829FA001839F500D929F500D112408
:1005F000CA0157FD4F96AC0125E0559547952A95C0
:10060000E1F74B5F5F4F3DC08D32D9F48091950784
:10061000282F33278091FB039091FC03829FA00138
:10062000839F500D929F500D1124CA0157FD4F9684
:10063000AC0195E0559547959A95E1F745505040A6
:1006400020C0803271F48091CF0381FF1AC0C901AC
:1006500037FD4F96AC0185E0559547958A95E1F7B2
:1006600010C08E3529F48091F603482F552709C014
:10067000863739F48091F603992744275527481B7C
:10068000590BCA01AA2797FDA095BA2F8093900213
:1006900090939102A0939202B093930208950F93C6
:1006A0001F930E944B7380911F0190912001AA27F4
:1006B00097FDA095BA2F8093BF019093C001A0939E
:1006C000C101B093C2018091100A9091110AAA272A
:1006D000BB278093D2019093D301A093D401B09310
:1006E000D5010AE010E08091140A9091150AB80132
:1006F0000E94E691CB01AA27BB278093E501909346
:10070000E601A093E701B093E80180910104909184
:100710000204A0910304B0910404BC01CD0124E6BD
:1007200030E040E050E00E942F922093F801309397
:10073000F9014093FA015093FB0180918801909157
:100740008901AA2797FDA095BA2F80930B02909359
:100750000C02A0930D02B0930E0280918C09992790
:10076000AA27BB2780931E0290931F02A09320020A
:10077000B093210280918E099927AA27BB278093E5
:10078000310290933202A0933302B09334028091ED
:100790008F0990919009B8010E94E691CB01AA2798
:1007A000BB278093440290934502A0934602B093E6
:1007B00047028091910990919209AA2797FDA095EF
:1007C000BA2F8093570290935802A0935902B09386
:1007D0005A02809107059927AA27BB2780936A02AE
:1007E00090936B02A0936C02B0936D028091E10430
:1007F0009927AA27BB2780937D0290937E02A0931E
:100800007F02B09380028091E2049927AA27BB2738
:100810008093A3029093A402A093A502B093A60292
:100820001F910F910895002422273327442751E078
:10083000BB27EE27FF27A0E1660F771F881F991FB0
:10084000001C221F331F441F660F771F881F991F2C
:10085000001C221F331F441F2AF4050E2B1F3E1FAE
:100860004F1F04C0051A2B0B3E0B4F0B550FBB1F20
:10087000EE1F587F556047FD5250AA95E9F6E69560
:10088000B7955795E695B7955795852F9B2F089562
:100890002227332741E0552768E0880F991F221F40
:1008A000331F880F991F221F331F1AF4240F351F7F
:1008B00002C0241B350B440F551F487F456037FD90
:1008C00042506A9551F75695479556954795842F0E
:1008D0000895AA2797FF04C0809590958A1F9A1FB4
:1008E00077FF04C0609570956A1F7A1F669F90011C
:1008F000779FA001679F300D411D5A1F300D411D8C
:100900005A1F889FF001999F2E0F3F1F401D511DB8
:10091000899F300D411D5A1F300D411D5A1FCA01BC
:10092000B901112480CF4FB720E430E0F8948091D2
:10093000C9008F778093C9008091C9008F7B809315
:10094000C9008091C9008F7D8093C9005A9A52983E
:100950005B9A539A832F99278093CD002093CC00E4
:100960008091C80082608093C80088E18093C900AC
:100970008091CA008F778093CA008091CA008F7BD4
:100980008093CA008091CA008F7D8093CA008091B5
:10099000CA008F7E8093CA008091CA00877F8093AF
:1009A000CA008091C9008B7F8093C9008091CA00E2
:1009B00084608093CA008091CA0082608093CA00DC
:1009C0008091C80087FF03C08091CE00F9CF80914D
:1009D000C90080688093C9004FBF08950F931F938B
:1009E000CF93DF93482F4F5F893108F08BC0809100
:1009F000B608841720F44F5F4093B6084150CB01EE
:100A000083539B4268E170E00E94FA91A42FBB27B8
:100A1000FD01EA0FFB1FE954F74F808191819B0193
:100A2000281B390BC90137FF03C0909581959F4F53
:100A3000069794F480910704883C30F48091070471
:100A4000865F8093070408C088EC80930704809138
:100A50006F008F7D80936F00FD01EA0FFB1FE9544B
:100A6000F74F808191819C01220F331F280F391F7E
:100A7000260F371F37FF02C02D5F3F4FE901D59585
:100A8000C795D595C795CB0101968C179D0714F492
:100A9000219706C061507040C617D7070CF4219605
:100AA00080910704843BD8F08D010A0F1B1FF801C9
:100AB000E954F74F80819181FE01E81BF90BCF01CA
:100AC00063E070E00E94FA91CB01880F991F860FB6
:100AD000971F0551174FF8019183808307C0AA0F14
:100AE000BB1FA551B74F11961C921E92E42FFF27F2
:100AF000EE0FFF1FE954F74FD183C083443011F448
:100B000010923A01DF91CF911F910F910895CF93E9
:100B1000DF932091AD0B822F9927807F90704097B3
:100B200009F06CC02F3109F046C08091AE0B809364
:100B30002A052091B00B20932C058091B10B809356
:100B40002B05822F99279093B8088093B70822230A
:100B500009F054C080918407282F3327220F331FB8
:100B6000F901E551F74F1182108280918507A82F76
:100B7000BB27AA0FBB1FFD01E551F74F1182108261
:100B800080918707E82FFF27EE0FFF1FCF018551C8
:100B9000974FEC01198218822954374FE9011982C5
:100BA0001882A954B74F11961C921E92E954F74F20
:100BB0001182108223C0C22FCF70CA30F8F4809106
:100BC000AE0B8093D90B8091AF0B8093D80B8091A3
:100BD000B00B8093DB0B8091B10B8093DA0B6091AB
:100BE000D80B7091D90B8C2F0E94EE846091DA0B98
:100BF0007091DB0B8C2F8F5F0E94EE84DF91CF9181
:100C00000895CF93C82F8F3F49F480912D058F3FD2
:100C100029F410922F0510922E0532C020912F0535
:100C2000222339F4CF3111F485E001C084E08093B0
:100C300030058091300590912E058217A0F4892F00
:100C4000809580932E058F3F19F48EEF80932E05AB
:100C500080912E05C81711F40E94878510922F05E8
:100C600010922E050BC0E22FFF27E355F44FC083EF
:100C70002F5F20932F059C0F90932E05C0932D0579
:100C8000CF91089590912905933240F4E92FFF27E1
:100C9000EB54F44F80839F5F90932905089583322E
:100CA00018F48D5F80932905089590E2E8EBFBE04E
:100CB0008FE19193815087FFFCCF0895CF93CFB7F9
:100CC00023E031E0F8948091C9008F778093C900C8
:100CD0008091C9008F7B8093C9008091C9008F7D6E
:100CE0008093C9005A9A52985B9A539A832F9927F6
:100CF0008093CD002093CC008091C80082608093C7
:100D0000C80088E18093C9008091CA008F778093E2
:100D1000CA008091CA008F7B8093CA008091CA006C
:100D200080628093CA008091CA0080618093CA006B
:100D30008091CA0088608093CA008091C900846055
:100D40008093C9008091CA0084608093CA0080911A
:100D5000CA0082608093CA008091C80087FF03C0E8
:100D60008091CE00F9CF8091C90080688093C9003E
:100D70008091C90080648093C9000E945586CFBFCE
:100D8000CF910895282F99278F709070892B31F477
:100D9000209580912805822B8093280508951F9225
:100DA0000F920FB60F9211248F93EF93FF938091C0
:100DB000D002882309F068C0E0913205EE2389F45F
:100DC00080913105882369F48091B50B882321F047
:100DD00081E08093330505C08091C90081608093D4
:100DE000C90080913305882379F4EF5FE0933205E1
:100DF00080918C0B8E1720F481E0809333051CC00A
:100E0000FF27E457F44F3CC080913105882361F4FB
:100E10008091B50B882311F483E003C0813999F4E4
:100E200081E0809331050FC0833099F48091B50B38
:100E3000882349F01092B50B8091C9008E7F809372
:100E4000C9008EEF1EC08091C90081608093C900E7
:100E50000EC0833261F48091C9008E7F8093C900F7
:100E60008FEF8093CE0081E08093D00218C08091F4
:100E70003105E82FFF27EB54F44F8F5F8093310546
:100E800080818093CE000BC0109231051092320504
:100E9000109233058091C90080618093C900FF9151
:100EA000EF918F910F900FBE0F901F9018956827AC
:100EB00027E0322F67FF06C0862F9927880F991FDA
:100EC000832702C0862F880F682F215027FFF2CF7B
:100ED000992708950F931F93CF93DF93062F60E018
:100EE000162F601740F4EC0189910E945787682FF4
:100EF0001F5F1017C8F3862F9927DF91CF911F919D
:100F00000F910895DC0190E0961758F48C9180328F
:100F100041F09F5F961728F4FD01E90FF11D8081D4
:100F2000F6CF892F99270895A0E0B0E0EAE9F7E825
:100F30000C9453928FE980938D0B80E180938F0BFB
:100F400084EA8093900B85E58093910B8DE58093E7
:100F5000920B1092930B80913505882309F06AC09B
:100F60008091340513E1819FC001112463E088550D
:100F70009E4F0E948287082F80913405819FC00177
:100F800011246AE082569E4F0E948287982F800F1C
:100F9000865F80938C0B4EEFB42EB80EB0928E0B02
:100FA000209134052093940BE92EFF24C70133E0F0
:100FB000880F991F3A95E1F7802B8093950B822F2C
:100FC000992723E1C22ED12C8C9D90018D9D300D4F
:100FD0009C9D300D1124C90182569E4FA701BC0172
:100FE00086E99BE00E941B90112780913405992788
:100FF0008C9DE0018D9DD00D9C9DD00D1124CE01C6
:1010000088559E4FA801BC01C7018A56944F0E9483
:101010001B900457144F0E0D1F1D6B2D8EE89BE087
:101020000E946A87F8018287809135058F5F8093DF
:10103000350570C01091930B0E944F834091D102EF
:101040004031C8F563E170E0812F9927DC01AA0FD8
:10105000BB1FA80FB91FA457B44F842F9927869F91
:10106000F001879FF00D969FF00D1124E256FE4F80
:101070002585C4E0880F991FCA95E1F7282BED015B
:101080002887268537853F7982899927982F882751
:101090009295990F907E282B392B2987832F99279A
:1010A0008A87842F8F5F1F5F163018F4482F803196
:1010B00058F28093D10283E0189F90011124822F6F
:1010C000885F80938C0B825C80938E0B812F992795
:1010D0008C01000F111F080F191F0457144F822F86
:1010E0008A5F682F8EE89BE00E946A87F8018087FC
:1010F0008091D102803170F081E08093D102109212
:101100003505809134058F5F80933405803110F070
:1011100010923405E9E0CDB7DEB70C946F92809160
:10112000D002882309F447C08091CF0385FD04C015
:101130008091D402882381F082E98093B50B83E209
:101140008093B60B8091D402882309F485E58093BF
:10115000B70B1092D40202C08093B50B8091D202DB
:101160008F3071F4809128050E947472882341F0B9
:1011700081E98093B50B8093B60B81E38093B70B25
:101180001092D0028091C80085FFFCCF8091C900E9
:101190008F7E8093C9008091C9008E7F8093C900A3
:1011A0000E9494878EE78093CE00809128058093DB
:1011B000D202109228050895EF92FF920F931F9389
:1011C000CF93DF937C018B01EA01452B39F0F801C5
:1011D00081918F01F70109952197C9F7E6E0CDB715
:1011E000DEB70C947292EF92FF920F931F93CF93FE
:1011F000DF937C018B01EA01452B41F0F8010F5F81
:101200001F4F8491F70109952197C1F7E6E0CDB70B
:10121000DEB70C9472920F931F93CF938C01C62F5D
:10122000161634F480E2F8010995C1501C16D4F367
:10123000CF911F910F9108950F931F93CF938C011E
:10124000C62F161634F480E3F8010995C1501C1618
:10125000D4F3CF911F910F910895A5E3B0E0E3E39C
:10126000F9E80C944A922E96EEADFFAD2E978824A5
:101270009924540180912205882321F42C961FAED5
:101280001EAE2C97AEE44A2E512C4C0E5D1E6F0103
:10129000B60105C0153239F00894C11CD11CF60105
:1012A00014911123B9F7A601461B570B31F02C9668
:1012B0008EAD9FAD2C970E94F388112309F46AC26A
:1012C0000894C11CD11CFF24FDA6FCA6FFEFEF2E45
:1012D000F9A6F6010894C11CD11C1491153721F010
:1012E000812F80628837B1F4F0FE0AC0F20124E059
:1012F00030E0420E531E80809180A280B3800AC0ED
:10130000F20142E050E0440E551E808191814C0173
:10131000AA24BB24103221F489A58823D1F61DC04C
:10132000133219F458E0F52AD4CF1A3211F01D32D5
:1013300091F41A3259F4F20182E090E0480E591EFD
:10134000E081ECA7EE232CF6E195ECA790E1F92AD9
:10135000AFEDFA22BECF1B3211F419A7BACF1E325D
:10136000C1F5F6010894C11CD11C14911A3279F40C
:10137000F20122E030E0420E531E408151813FEFE6
:101380004F3F530714F44FEF5FEFE42EA2CF40E03E
:1013900050E0812F80538A30A0F4CA01E3E0880F27
:1013A000991FEA95E1F7840F951F480F591F410FC8
:1013B000511D40535040F6010894C11CD11C14919A
:1013C000E8CF8FEF4F3F580714F44FEF5FEFE42E55
:1013D00085CF103329F4F4FC7CCF90E2F92A79CF41
:1013E000812F81538930D8F440E050E0CA0173E086
:1013F000880F991F7A95E1F7840F951F480F591FA1
:10140000410F511D40535040F6010894C11CD11C9E
:101410001491812F80538A3048F34CA75FCF183640
:1014200019F4A4E0FA2A55CF1C3619F4B1E0FB2ACE
:1014300050CF133661F43E010894611C711CF20117
:1014400022E030E0420E531E808189833CC1143477
:1014500021F0143611F0193651F5143411F431E03D
:10146000F32AF0FE0AC0F20144E050E0440E551E9B
:1014700080809180A280B3800CC0F20182E090E075
:10148000480E591E808191814C01AA2497FCA0949A
:10149000BA2CB7FE0AC0B094A09490948094811C9A
:1014A000911CA11CB11C8DE289A70AE06FC01F34FA
:1014B00011F01F3631F41F3411F491E0F92A08E0DD
:1014C00064C0103779F4F201A2E0B0E04A0E5B1E6E
:1014D000808191814C01AA24BB2400E1B0E4FB2A65
:1014E00018E753C01337C1F5F20122E030E0420E95
:1014F000531E608071806114710489F43E01089468
:10150000611C711C88E289838EE6F301818385E783
:101510008B838CE68C838D8389E28E831F82E7FC2C
:1015200013C08E2D992787FD9095AC0160E070E087
:10153000C3010E940E90009729F0382E3618E3144C
:101540000CF0C3C03E2CC1C0F30101900020E9F7AC
:1015500031973E2E3618B9C0153511F0153731F4D4
:10156000153511F4F1E0FF2A0AE00FC0183519F023
:10157000183709F0A0C000E1F3FE07C08114910400
:10158000A104B10411F020E4F22A19A6EDA6E7FCAB
:1015900002C03FEDF32269E2662E712C6C0E7D1EB7
:1015A00081149104A104B10421F44DA5442309F44C
:1015B0007BC0802F9927AA27BB278EA79FA7A8AB00
:1015C000B9AB202E332490E0891690E0990691E083
:1015D000A90690E0B90648F0C501B4012EA53FA5C3
:1015E00048A959A90E940D9217C0AFEF8A1691041D
:1015F000A104B10449F040F0C401B1010E94E69198
:101600009B014427552708C0882D602F0E94DA913E
:10161000282F3327442755272AAB3BAB4CAB5DAB78
:101620000A3059F48AA9880F880F880F9AA9990F50
:10163000890F382D381B832F10C0003139F48AA947
:101640008295807F482D481B842F07C08AA9880F68
:10165000880F880F582D581B852F90E02EA53FA589
:1016600048A959A982169306A406B50608F091E088
:101670008AA89BA8ACA8BDA88A3010F4805D04C0DD
:10168000895A183509F48F7DD3018E933D01992332
:1016900009F099CF083041F4F3FE06C0803321F001
:1016A00080E3FD0182933F01CE010196382E36186A
:1016B000F8E23F0E0BC0112309F46CC03E01089400
:1016C000611C711C198351E0352E19A6032D2DA420
:1016D000231827FC222489A5882311F00F5F02C05C
:1016E000F6FC0E5F020DEF2CFF24C7018073907093
:1016F000892B49F48CA5801B682F2C968EAD9FAD4D
:101700002C970E940B8989A5882331F041E050E095
:10171000BE01675D7F4F0AC0E6FE0EC080E38AA768
:101720001BA742E050E0BE01665D7F4F2C968EAD58
:101730009FAD2C970E94DC88C701807390708097C2
:1017400049F48CA5801B682F2C968EAD9FAD2C97ED
:101750000E941C89622D2C968EAD9FAD2C970E9405
:101760001C89832D992787FD9095AC01B3012C9698
:101770008EAD9FAD2C970E94DC88E4FE89CD2CA510
:10178000201B2CA7622F2C968EAD9FAD2C970E940C
:101790000B897ECDE2E1CB5C0C946692982F809110
:1017A000B40B883A50F48091B40BE82FFF27E5562C
:1017B000F54F93838F5F8093B40B0895982F80919A
:1017C000B40B883A58F48091B40BE82FFF27E55604
:1017D000F54F906893838F5F8093B40B0895982F93
:1017E00080912305882321F0892F0E94DE8B0895A4
:1017F000892F0E94CE8B0895883A10F48093B40B01
:10180000089580E090E2EEE9FAE091938F5F883AE4
:10181000E0F308954FB721E830E0F8948091C900D3
:101820008F778093C9008091C9008F7B8093C90016
:101830008091C9008F7D8093C9005A9A52985B9A13
:10184000539A832F99278093CD002093CC008091C9
:10185000C80082608093C80088E18093C9008091AD
:10186000CA008F778093CA008091CA008F7B8093D3
:10187000CA008091CA008F7D8093CA008091CA00FF
:101880008F7E8093CA008091CA00877F8093CA00B0
:101890008091C90084608093C9008091CA008460EF
:1018A0008093CA008091CA0082608093CA008091B0
:1018B000C90081608093C9008091C80087FF03C080
:1018C0008091CE00F9CF8091C90080688093C900D3
:1018D0004FBF3CE73093170A2DE72093420A8EE86A
:1018E0008093180A1092340A1092330A10921D0A3B
:1018F00080EE80931A0A30936F0A20939A0A10920E
:101900007B0A10927A0A10927D0A10927C0A109239
:101910007F0A10927E0A84EF91E09093790A809377
:10192000780A9093770A8093760A9093750A809349
:10193000740A1092710A89E88093700A1092980ACA
:101940001092990A80E98093720A3093470B209392
:10195000720B1092490B8AE88093480B10924F0B40
:1019600010924E0B10924D0B1092510B1092520B85
:101970001092530B1092540B1092560B1092570B5F
:101980001092580B1092590B10925D0B10925C0B39
:1019900010925B0B10925A0B80EA80934A0B3093A3
:1019A000430A20936E0A1092450A8DE88093440AF8
:1019B00010926D0A80ED8093460A8BE780939B0A14
:1019C00080E880939C0A10929D0A80911D0A90E203
:1019D000EEE9FAE091938F5F883AE0F38DE7809328
:1019E000460B0895CF93C82F80913605803879F43F
:1019F0008C2F0E94A0748093250580912505882353
:101A000031F1C093B30B809125058F5F16C08F37DE
:101A1000F1F48091AC0B882329F48C2F80958F7082
:101A20008093AC0B0E94A97380939D0A8BE99AE086
:101A300090932705809326058DEA80932505809154
:101A4000C9008F7E8093C90082E080932405C093F3
:101A50003605CF91089530912405332331F08091DC
:101A600024058150809324050895809125058823BD
:101A700081F14091250590913705413091F4292F4E
:101A8000309337058091C90080618093C9008091AF
:101A90002305882319F03093230510C040932305B4
:101AA0000DC0E0912605F09127058191F09327055F
:101AB000E0932605282F980F909337058091C80052
:101AC00085FFFCCF2093CE00809125058150809327
:101AD000250508952FB740E0F894E0E0F0E081E2BA
:101AE000809357009491E2E0F0E0809357003491A6
:101AF000E4E0F0E08093570084912FBF9E3199F489
:101B0000363941F4893011F441E00DC08A3059F47E
:101B100042E009C0373939F4863011F443E003C09C
:101B2000853009F444E0842F992708959FB7F894ED
:101B30008091C900877F8093C9008091C9008F7E02
:101B40008093C9008091C9008F778093C9008091EC
:101B5000C9008F7B8093C9008091C9008F7D8093DD
:101B6000C90052985A9A53985B9A9FBF08951F9341
:101B7000CF93DF93182F80912205882309F4A7C003
:101B80008091CF02181709F4A2C080912105882303
:101B900021F40E946A8D8093210582ED91E090935B
:101BA00039018093380189E791E19F938F93C0E6D3
:101BB000D5E1DF93CF93E0913B05F0913C0509958A
:101BC0000F900F900F900F90812F9927AA27BB2776
:101BD000FC01099778F5E554FF4F20913B053091C2
:101BE0003C050C94819285E791E102C08CE691E17D
:101BF0009F938F93DF93CF93F901099527C087E6D1
:101C000091E1F6CF8FE591E1F3CF87E591E19F93E5
:101C10008F93DF93CF93F901099588ED91E090932D
:101C200039018093380112C082E591E1E1CF86E865
:101C300091E1DECF8CE891E19F938F93DF93CF9377
:101C4000E0913B05F0913C05099510E00F900F9055
:101C50000F900F9080912105843011F0823011F5A2
:101C60000E94968D812F8150833018F40E949F6FBF
:101C70002CC0143019F40E945E8627C0183019F465
:101C80000E94C68222C0153019F40E9493841DC0A0
:101C9000163019F40E940A8C18C01730B1F40E9453
:101CA000798113C0112389F082EA91E19F938F9388
:101CB00080E695E19F938F93E0913B05F0913C0581
:101CC00009950F900F900F900F901093CF02DF9116
:101CD000CF911F9108950F931F9381E08093220568
:101CE0004091CE02E2E0F1E120E030E05FE4849157
:101CF00099272F5F3F4F829FB001839F700D929F66
:101D0000700D112446275150319657FFF0CF409364
:101D1000CE02EAEDF0E120E030E057E2849199272D
:101D20002F5F3F4F829FB001839F700D929F700D78
:101D3000112446275150319657FFF0CF4093CE02E1
:101D400080912105882321F40E946A8D80932105CA
:101D50008091CE02833459F088E190E029E20FB6F9
:101D6000F894A895809360000FBE209360008DE2E8
:101D700099E890933C0580933B050E944A0984E6CC
:101D800090E09F938F938AE590E09F938F931F92AB
:101D90001F92809101016AE00E94DA91892F9927B0
:101DA0009F938F93809101010E94DA9199279F93CD
:101DB0008F938DEB91E19F938F9300E615E11F9335
:101DC0000F93E0913B05F0913C05099582E091E18C
:101DD0009F938F931F930F93E0913B05F0913C05E8
:101DE00009958AED90E19F938F931F930F93E09154
:101DF0003B05F0913C0509950E944A0983EC8093CC
:101E0000810080916F00806280936F008DB79EB7D4
:101E100046968DBF1F910F9108958091EA078D33EB
:101E200038F080918B0987FD03C08CE38093EA072B
:101E300080919907882331F08055853618F08FE717
:101E400080939907089580912205882309F477C02B
:101E500080913805815080933805882309F053C05C
:101E600089E1809338058091EA078E3338F08091BC
:101E70008B0987FD03C08DE38093EA0780910704F7
:101E8000823820F58091D0039091D103805D9740F6
:101E900020F08091160A843620F410923A051092B0
:101EA00039058091390590913A05009739F10197EC
:101EB00090933A0580933905419728F180918B09D9
:101EC00084FF21C08091CE0384601BC080910704F1
:101ED000853BC8F09091EA0784E1989FC0011124E6
:101EE00040962091390530913A052817390730F48A
:101EF0002F5F3F4F30933A05209339058091CE03F1
:101F00008B7F8093CE039091CF02963019F40E947C
:101F10002B8D0FC08091D302882321F081508093B4
:101F2000D30208958BE48093D302943011F40E947D
:101F30008F888091CE02833411F01092220508958B
:101F40001F920F920FB60F9211242F933F934F932E
:101F50005F936F937F938F939F93AF93BF93EF9311
:101F6000FF932091CE008091DE028823B1F0209370
:101F7000C6008091DE028230B9F52F3FA9F58FEFC0
:101F800094E3ACE0B0E0C297A109B109B7FFFBCF81
:101F900080917E058093CE0027C09091CF02892F3B
:101FA0008150833020F4822F0E94FA6F1DC094303C
:101FB00021F4822F0E94C28617C0983021F4822F0C
:101FC0000E94C78211C0953021F4822F0E940186A1
:101FD0000BC0963021F4822F0E94F28C05C09730FE
:101FE00019F4822F0E94D681FF91EF91BF91AF919A
:101FF0009F918F917F916F915F914F913F912F9121
:102000000F900FBE0F901F901895FB01DC0102C0CE
:1020100005900D9241505040D8F70895FC01415071
:10202000504030F001900616D1F73197CF01089556
:10203000882799270895FB01DC0102C001900D92C9
:1020400041505040D8F70895A0E0B0E0EAE2F0E94E
:102050000C9452926C017B01EA01590121978FEF98
:10206000CF3FD80789F086010894C11CD11CC70155
:102070000894E11CF11CF5010995F8018083219772
:10208000FFEFCF3FDF0779F7EAE0CDB7DEB70C947B
:102090006E92CF92DF92EF92FF920F931F937C018B
:1020A0006B01FB010995082FC7010196F6010995FF
:1020B000182FC8011F910F91FF90EF90DF90CF90E4
:1020C0000895A0E0B0E0E7E6F0E90C9454928C01AA
:1020D0007B01EA01690121978FEFCF3FD80771F0AB
:1020E000F70121917F01C8010F5F1F4F622FF60199
:1020F00009952197FFEFCF3FDF0791F7E8E0CDB7D4
:10210000DEB70C947092CF92DF92EF92FF920F9312
:102110001F936C018B017A01FA010995812F992790
:10212000682FC6010196F70109951F910F91FF9045
:10213000EF90DF90CF9008955058BB27AA270ED07C
:10214000E0C0D1D030F0D6D020F031F49F3F11F470
:102150001EF4C6C00EF4E095E7FBBCC0E92FE2D048
:1021600080F3BA17620773078407950718F071F4B4
:102170009EF5FAC00EF4E0950B2EBA2FA02D0B01A0
:10218000B90190010C01CA01A0011124FF27591BBC
:1021900099F0593F50F4503E68F11A16F040A22FC2
:1021A000232F342F4427585FF3CF46953795279533
:1021B000A795F0405395C9F77EF41F16BA0B620B32
:1021C000730B840BBAF09150A1F0FF0FBB1F661F79
:1021D000771F881FC2F70EC0BA0F621F731F841FBC
:1021E00048F4879577956795B795F7959E3F08F0E2
:1021F000B3CF9395880F08F09927EE0F97958795A1
:10220000089598D088F09F5790F0B92F9927B7512B
:10221000A0F0D1F0660F771F881F991F1AF0BA95AA
:10222000C9F712C0B13081F09FD0B1E008959CC0D1
:10223000672F782F8827B85F39F0B93FCCF38695A0
:1022400077956795B395D9F73EF4909580957095FD
:1022500061957F4F8F4F9F4F0895E89409C097FB7A
:102260003EF490958095709561957F4F8F4F9F4F6D
:102270009923A9F0F92F96E9BB279395F6958795B1
:1022800077956795B795F111F8CFFAF4BB0F11F474
:1022900060FF1BC06F5F7F4F8F4F9F4F16C088231B
:1022A00011F096E911C0772321F09EE8872F762F51
:1022B00005C0662371F096E8862F70E060E02AF092
:1022C0009A95660F771F881FDAF7880F969587957E
:1022D00097F9089597F99F6780E870E060E00895A6
:1022E0009FEF80EC089500240A941616170618062E
:1022F0000906089500240A9412161306140605060A
:102300000895092E0394000C11F4882352F0BB0F9A
:1023100040F4BF2B11F460FF04C06F5F7F4F8F4FFD
:102320009F4F089557FD9058440F551F59F05F3F38
:1023300071F04795880F97FB991F61F09F3F79F0E7
:1023400087950895121613061406551FF2CF469569
:10235000F1DF08C0161617061806991FF1CF8695EB
:102360007105610508940895E894BB2766277727CF
:10237000CB0197F90895629FD001739FF001829F6E
:10238000E00DF11D649FE00DF11D929FF00D839F04
:10239000F00D749FF00D659FF00D9927729FB00DA1
:1023A000E11DF91F639FB00DE11DF91FBD01CF01B4
:1023B00011240895991B79E004C0991F961708F01D
:1023C000961B881F7A95C9F780950895AA1BBB1B99
:1023D00051E107C0AA1FBB1FA617B70710F0A61B25
:1023E000B70B881F991F5A95A9F780959095BC0146
:1023F000CD01089597FB092E07260AD077FD04D05A
:10240000E5DF06D000201AF4709561957F4F08959E
:10241000F6F7909581959F4F0895A1E21A2EAA1B79
:10242000BB1BFD010DC0AA1FBB1FEE1FFF1FA21784
:10243000B307E407F50720F0A21BB30BE40BF50B81
:10244000661F771F881F991F1A9469F7609570950A
:10245000809590959B01AC01BD01CF01089597FB3C
:10246000092E05260ED057FD04D0D7DF0AD0001C58
:1024700038F450954095309521953F4F4F4F5F4F21
:102480000895F6F790958095709561957F4F8F4FE1
:102490009F4F08952F923F924F925F926F927F923B
:1024A0008F929F92AF92BF92CF92DF92EF92FF9264
:1024B0000F931F93CF93DF93CDB7DEB7CA1BDB0B10
:1024C0000FB6F894DEBF0FBECDBF09942A883988B5
:1024D00048885F846E847D848C849B84AA84B984BC
:1024E000C884DF80EE80FD800C811B81AA81B981C8
:1024F000CE0FD11D0FB6F894DEBF0FBECDBFED01DC
:102500000895EE0FFF1F0590F491E02D0994FFCF81
:102510005E0A010164FF010020FFFFC01FC01F0110
:102520000101737373FF03007D0000C409C40964D3
:1025300000104E6F726D616C0051756164726F00B6
:102540000000000000006400D20101200B05000023
:10255000ECFF00020406070808080706040200FE54
:10256000FCFAF9F8F8F8F9FAFCFE0002040607088C
:10257000086440415A4664640A029696969608405A
:10258000403A10FB30380132FF03780090D003004E
:1025900090D0030032002064FFFF64200B0A0D0B73
:1025A0000C0E0B0F100B11FA2068010101152D3DC7
:1025B0002E4D5F4B2E3D2D002020200100000000FD
:1025C00000566F6C74616765202020562020010042
:1025D0000000000143757272656E74202020412056
:1025E000200100000000014361706163697479207B
:1025F00020416820010000000002416C746974757C
:10260000646520206D2020010000000000436F6DF4
:1026100070617373202020B02020010000000000B2
:1026200053617473202020202020202020010000EE
:10263000000000537065656420202020206D2F73FA
:1026400001000000000044697374616E636520201E
:102650006D2020010000000000486F6D652D446969
:10266000722020B020200100000000006D61782E53
:1026700054656D702E20B043200100000000004D15
:1026800061676E2E6669656C64252020010000007C
:102690000000566172696F20202020202020200138
:1026A00000000000004572726F72436F6465202065
:1026B00020200100000000006672656920202020B3
:1026C00020202020200100000000036672656920A0
:1026D000202020202020202001000000000370FF87
:0426E00001010F6481
:00000001FF
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/Settings.h
--- Spektrum.c (nonexistent)
+++ Spektrum.c (revision 2305)
@@ -0,0 +1,463 @@
+/*#######################################################################################
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit
+#######################################################################################*/
+
+#include "Spektrum.h"
+#include "main.h"
+
+unsigned char SpektrumTimer = 0;
+
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander
+signed char s_exdata[11]; // Data for Spektrum-Expander
+
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in
+{
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3;
+ else PPM_diff[channel] = 0;
+ PPM_in[channel] = value;
+}
+#endif
+
+//--------------------------------------------------------------//
+//--------------------------------------------------------------//
+/*
+void SpektrumBinding(void)
+{
+ unsigned int timerTimeout = SetDelay(10000); // Timeout 10 sec.
+ unsigned char connected = 0;
+ unsigned int delaycounter;
+
+ UCSR1B &= ~(1 << RXCIE1); // disable rx-interrupt
+ UCSR1B &= ~(1<<RXEN1); // disable Uart-Rx
+ PORTD &= ~(1 << PORTD2); // disable pull-up
+
+ printf("\n\rPlease connect Spektrum receiver for binding NOW...");
+
+ while(!CheckDelay(timerTimeout))
+ {
+ if (PIND & (1 << PORTD2)) { timerTimeout = SetDelay(90); connected = 1; break; }
+ }
+
+ if (connected)
+ {
+
+ printf("ok.\n\r");
+ DDRD |= (1 << DDD2); // Rx as output
+
+ while(!CheckDelay(timerTimeout)); // delay after startup of RX
+ for (delaycounter = 0; delaycounter < 100; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+
+ }
+ else
+ { printf("Timeout.\n\r");
+
+
+ }
+
+ DDRD &= ~(1 << DDD2); // RX as input
+ PORTD &= ~(1 << PORTD2);
+
+ SpektrumUartInit(); // init Uart again
+}
+*/
+//############################################################################
+// USART1 initialisation from killagreg
+void SpektrumUartInit(void)
+//############################################################################
+ {
+ // -- Start of USART1 initialisation for Spekturm seriell-mode
+ // USART1 Control and Status Register A, B, C and baud rate register
+ uint8_t sreg = SREG;
+
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
+
+ // disable all interrupts before reconfiguration
+ cli();
+ // disable RX-Interrupt
+ UCSR1B &= ~(1 << RXCIE1);
+ // disable TX-Interrupt
+ UCSR1B &= ~(1 << TXCIE1);
+ // disable DRE-Interrupt
+ UCSR1B &= ~(1 << UDRIE1);
+ // set direction of RXD1 and TXD1 pins
+ // set RXD1 (PD2) as an input pin
+ PORTD |= (1 << PORTD2);
+ DDRD &= ~(1 << DDD2);
+
+ // set TXD1 (PD3) as an output pin
+ PORTD |= (1 << PORTD3);
+ DDRD |= (1 << DDD3);
+
+ // USART0 Baud Rate Register
+ // set clock divider
+ UBRR1H = (uint8_t)(ubrr>>8);
+ UBRR1L = (uint8_t)ubrr;
+ // enable double speed operation
+ UCSR1A |= (1 << U2X1);
+ // enable receiver and transmitter
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1);
+
+ UCSR1B = (1<<RXEN1);
+ // set asynchronous mode
+ UCSR1C &= ~(1 << UMSEL11);
+ UCSR1C &= ~(1 << UMSEL10);
+ // no parity
+ UCSR1C &= ~(1 << UPM11);
+ UCSR1C &= ~(1 << UPM10);
+ // 1 stop bit
+ UCSR1C &= ~(1 << USBS1);
+ // 8-bit
+ UCSR1B &= ~(1 << UCSZ12);
+ UCSR1C |= (1 << UCSZ11);
+ UCSR1C |= (1 << UCSZ10);
+ // flush receive buffer explicit
+ while(UCSR1A & (1<<RXC1)) UDR1;
+ // enable RX-interrupts at the end
+ UCSR1B |= (1 << RXCIE1);
+ // -- End of USART1 initialisation
+ // restore global interrupt flags
+
+ SREG = sreg;
+ return;
+ }
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) Rainer Walther
+// + RC-routines from original MK rc.c (c) H&I
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2
+// + only for non-profit use
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//
+// 20080808 rw Modified for Spektrum AR6100 (PPM)
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only)
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels)
+// Replace AR6100-coding with original composit-signal routines
+//
+// ---
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben!
+// Binding is not implemented. Bind with external Receiver.
+// Servo output J3, J4, J5 not serviced
+//
+// Anschuß Spektrum Receiver
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!)
+// Schwarz: GND
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker
+//
+// ---
+// Satellite-Reciever connected on USART1:
+//
+// DX7/DX6i: One data-frame at 115200 baud every 22ms.
+// DX7se: One data-frame at 115200 baud every 11ms.
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data (FLT-Mode)
+// byte5: and byte6: channel data (Roll)
+// byte7: and byte8: channel data (Nick)
+// byte9: and byte10: channel data (Gier)
+// byte11: and byte12: channel data (Gear Switch)
+// byte13: and byte14: channel data (Gas)
+// byte15: and byte16: channel data (AUX2)
+//
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9
+// 1st Frame:
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data
+// byte5: and byte6: channel data
+// byte7: and byte8: channel data
+// byte9: and byte10: channel data
+// byte11: and byte12: channel data
+// byte13: and byte14: channel data
+// byte15: and byte16: channel data
+// 2nd Frame:
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data
+// byte5: and byte6: channel data
+// byte7: and byte8: 0xffff
+// byte9: and byte10: 0xffff
+// byte11: and byte12: 0xffff
+// byte13: and byte14: 0xffff
+// byte15: and byte16: 0xffff
+//
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as:
+//
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
+//
+// 0 means a '0' bit
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only)
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter)
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel
+//
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#define MIN_FRAMEGAP 68 // 7ms
+#define MAX_BYTEGAP 3 // 310us
+
+
+//############################################################################
+// Wird im UART-Interrupt aufgerufen
+//############################################################################
+void SpektrumParser(unsigned char c)
+{
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0;
+ unsigned int Channel, index = 0;
+ signed int signal = 0, tmp;
+ int bCheckDelay;
+// c = UDR1; // get data byte
+ if(ReSync == 1)
+ {
+ // wait for beginning of new frame
+ ReSync = 0;
+ SpektrumTimer = MIN_FRAMEGAP;
+ FrameCnt = 0;
+ Sync = 0;
+ ByteHigh = 0;
+ }
+ else
+ {
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer);
+ if ( Sync == 0 )
+ {
+ if(bCheckDelay)
+ {
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden
+ // Zeichen ignorieren, da Bedeutung unbekannt
+ Sync = 1;
+ FrameCnt ++;
+ SpektrumTimer = MAX_BYTEGAP;
+ }
+ else
+ {
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause
+ // warten auf erstes Sync-Zeichen
+ SpektrumTimer = MIN_FRAMEGAP;
+ FrameCnt = 0;
+ Sync = 0;
+ ByteHigh = 0;
+ }
+ }
+ else if((Sync == 1) && !bCheckDelay)
+ {
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt
+ Sync = 2;
+ FrameCnt ++;
+ SpektrumTimer = MAX_BYTEGAP;
+ }
+ else if((Sync == 2) && !bCheckDelay)
+ {
+ SpektrumTimer = MAX_BYTEGAP;
+ // Datenbyte high
+ ByteHigh = c;
+ if (FrameCnt == 2)
+ {
+ // is 1st Byte of Channel-data
+ // Frame 1 with Channel 1-7 comming next
+ Frame2 = 0;
+ if(ByteHigh & 0x80)
+ {
+ // DS9: Frame 2 with Channel 8-9 comming next
+ Frame2 = 1;
+ }
+ }
+ Sync = 3;
+ FrameCnt ++;
+ }
+ else if((Sync == 3) && !bCheckDelay)
+ {
+ // Datenbyte low
+ // High-Byte for next channel comes next
+ SpektrumTimer = MAX_BYTEGAP;
+ Sync = 2;
+ FrameCnt ++;
+ Channel = ((unsigned int)ByteHigh << 8) | c;
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM)
+ {
+ signal = Channel & 0x3ff;
+ signal -= 0x200; // Offset, range 0x000..0x3ff?
+ signal = signal/3; // scaling to fit PPM resolution
+ index = (ByteHigh >> 2) & 0x0f;
+ }
+ else
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES)
+ {
+ signal = Channel & 0x7ff;
+ signal -= 0x400; // Offset, range 0x000..0x7ff?
+ signal = signal/6; // scaling to fit PPM resolution
+ index = (ByteHigh >> 3) & 0x0f;
+ }
+ else
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES)
+ {
+ signal = Channel & 0x3ff;
+ signal -= 360; // Offset, range 0x000..0x3ff?
+ signal = signal/2; // scaling to fit PPM resolution
+ index = (ByteHigh >> 2) & 0x0f;
+ }
+
+ index++;
+ if(index < 13)
+ {
+ // Stabiles Signal
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4)
+ else if (index == 4) index = 2;
+#endif
+ if(abs(signal - PPM_in[index]) < 6)
+ {
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
+ {
+ if(SenderOkay < 200) SenderOkay += 10;
+ else
+ {
+ SenderOkay = 200;
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
+ }
+ }
+ }
+ tmp = (3 * (PPM_in[index]) + signal) / 4;
+ if(tmp > signal+1) tmp--; else
+ if(tmp < signal-1) tmp++;
+
+#ifdef RECEIVER_SPEKTRUM_DX7EXP
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
+ {
+ if (signal > 100) // SYNC received
+ {
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check
+ {
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5)
+ s_update(6,s_exdata[3]); // Elevator (CH6)
+ s_update(11,s_exdata[4]); // Aileron (CH11)
+ s_update(12,s_exdata[5]); // Rudder (CH12)
+
+ if (s_excnt == 9) // New Mode (12 Channels)
+ {
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8)
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8)
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit
+ s_update(10,s_exdata[6]); // AUX2 (CH10)
+ }
+ }
+
+ s_excnt = 0; // Reset bitcounter
+ s_exparity = 0; // Reset parity bit
+ }
+
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection
+ if (signal < -100)
+ {
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
+ }
+
+ }
+
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4)
+ else if (index == 5) s_update(7,signal); // Gear (CH7)
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9)
+
+#elif defined RECEIVER_SPEKTRUM_DX8EXP
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
+ {
+ if (signal > 100) // SYNC received
+ {
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check
+ {
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5)
+
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6)
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6)
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6)
+
+
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9)
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9)
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9)
+
+ s_update(10,s_exdata[5]); // Gear (CH10)
+ s_update(12,s_exdata[4]); // Mix (CH12)
+ }
+
+ s_excnt = 0; // Reset bitcounter
+ s_exparity = 0; // Reset parity bit
+ }
+
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection
+ if (signal < -100)
+ {
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
+ }
+
+ }
+
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4)
+ else if (index == 7) s_update(7,signal); // R Trim (CH7)
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8)
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11)
+
+#else
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
+ else PPM_diff[index] = 0;
+ PPM_in[index] = tmp;
+#endif
+ }
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren
+ }
+ else
+ {
+ // hier stimmt was nicht: neu synchronisieren
+ ReSync = 1;
+ FrameCnt = 0;
+ Frame2 = 0;
+ // new frame next, nach fruehestens 7ms erwartet
+ SpektrumTimer = MIN_FRAMEGAP;
+ }
+
+ // 16 Bytes eingetroffen -> Komplett
+ if(FrameCnt >= 16)
+ {
+ // Frame complete
+ if(Frame2 == 0)
+ {
+ // Null bedeutet: Neue Daten
+ // nur beim ersten Frame (CH 0-7) setzen
+ if(!ReSync) NewPpmData = 0;
+ }
+ FrameCnt = 0;
+ Frame2 = 0;
+ Sync = 0;
+ SpektrumTimer = MIN_FRAMEGAP;
+ }
+ }
+}
+
+
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/Spektrum.h
0,0 → 1,12
/*#######################################################################################
Dekodieren eines Spektrum Signals
#######################################################################################*/
 
#ifndef _SPEKTRUM_H
#define _SPEKTRUM_H
void SpektrumUartInit(void);
void SpektrumBinding(void);
extern unsigned char SpektrumTimer;
extern void SpektrumParser(unsigned char c);
 
#endif //_RC_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/Spektrum.lst
0,0 → 1,707
1 .file "Spektrum.c"
2 .arch atmega1284p
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 .global s_exparity
11 .global s_exparity
12 .section .bss
15 s_exparity:
16 0000 00 .skip 1,0
17 .global s_excnt
18 .global s_excnt
21 s_excnt:
22 0001 00 .skip 1,0
23 .global SpektrumTimer
24 .global SpektrumTimer
27 SpektrumTimer:
28 0002 00 .skip 1,0
29 .text
30 .global s_update
32 s_update:
33 /* prologue: frame size=0 */
34 0000 0F93 push r16
35 0002 1F93 push r17
36 0004 CF93 push r28
37 0006 DF93 push r29
38 /* prologue end (size=4) */
39 0008 482F mov r20,r24
40 000a EB01 movw r28,r22
41 000c 8091 0000 lds r24,SenderOkay
42 0010 E42F mov r30,r20
43 0012 FF27 clr r31
44 0014 843B cpi r24,lo8(-76)
45 0016 00F0 brlo .L2
46 0018 8F01 movw r16,r30
47 001a 0E0F add r16,r30
48 001c 1F1F adc r17,r31
49 001e F801 movw r30,r16
50 0020 E050 subi r30,lo8(-(PPM_in))
51 0022 F040 sbci r31,hi8(-(PPM_in))
52 0024 8081 ld r24,Z
53 0026 9181 ldd r25,Z+1
54 0028 9B01 movw r18,r22
55 002a 281B sub r18,r24
56 002c 390B sbc r19,r25
57 002e C901 movw r24,r18
58 0030 63E0 ldi r22,lo8(3)
59 0032 70E0 ldi r23,hi8(3)
60 0034 0E94 0000 call __divmodhi4
61 0038 CB01 movw r24,r22
62 003a 880F lsl r24
63 003c 991F rol r25
64 003e 860F add r24,r22
65 0040 971F adc r25,r23
66 0042 0050 subi r16,lo8(-(PPM_diff))
67 0044 1040 sbci r17,hi8(-(PPM_diff))
68 0046 F801 movw r30,r16
69 0048 9183 std Z+1,r25
70 004a 8083 st Z,r24
71 004c 00C0 rjmp .L3
72 .L2:
73 004e EE0F add r30,r30
74 0050 FF1F adc r31,r31
75 0052 E050 subi r30,lo8(-(PPM_diff))
76 0054 F040 sbci r31,hi8(-(PPM_diff))
77 0056 1182 std Z+1,__zero_reg__
78 0058 1082 st Z,__zero_reg__
79 .L3:
80 005a E42F mov r30,r20
81 005c FF27 clr r31
82 005e EE0F add r30,r30
83 0060 FF1F adc r31,r31
84 0062 E050 subi r30,lo8(-(PPM_in))
85 0064 F040 sbci r31,hi8(-(PPM_in))
86 0066 D183 std Z+1,r29
87 0068 C083 st Z,r28
88 /* epilogue: frame size=0 */
89 006a DF91 pop r29
90 006c CF91 pop r28
91 006e 1F91 pop r17
92 0070 0F91 pop r16
93 0072 0895 ret
94 /* epilogue end (size=5) */
95 /* function s_update size 58 (49) */
97 .global SpektrumUartInit
99 SpektrumUartInit:
100 /* prologue: frame size=0 */
101 /* prologue end (size=0) */
102 0074 4FB7 in r20,95-0x20
103 0076 24E1 ldi r18,lo8(20)
104 0078 30E0 ldi r19,hi8(20)
105 /* #APP */
106 007a F894 cli
107 /* #NOAPP */
108 007c 8091 C900 lds r24,201
109 0080 8F77 andi r24,lo8(127)
110 0082 8093 C900 sts 201,r24
111 0086 8091 C900 lds r24,201
112 008a 8F7B andi r24,lo8(-65)
113 008c 8093 C900 sts 201,r24
114 0090 8091 C900 lds r24,201
115 0094 8F7D andi r24,lo8(-33)
116 0096 8093 C900 sts 201,r24
117 009a 5A9A sbi 43-0x20,2
118 009c 5298 cbi 42-0x20,2
119 009e 5B9A sbi 43-0x20,3
120 00a0 539A sbi 42-0x20,3
121 00a2 832F mov r24,r19
122 00a4 9927 clr r25
123 00a6 8093 CD00 sts 205,r24
124 00aa 2093 CC00 sts 204,r18
125 00ae 8091 C800 lds r24,200
126 00b2 8260 ori r24,lo8(2)
127 00b4 8093 C800 sts 200,r24
128 00b8 80E1 ldi r24,lo8(16)
129 00ba 8093 C900 sts 201,r24
130 00be 8091 CA00 lds r24,202
131 00c2 8F77 andi r24,lo8(127)
132 00c4 8093 CA00 sts 202,r24
133 00c8 8091 CA00 lds r24,202
134 00cc 8F7B andi r24,lo8(-65)
135 00ce 8093 CA00 sts 202,r24
136 00d2 8091 CA00 lds r24,202
137 00d6 8F7D andi r24,lo8(-33)
138 00d8 8093 CA00 sts 202,r24
139 00dc 8091 CA00 lds r24,202
140 00e0 8F7E andi r24,lo8(-17)
141 00e2 8093 CA00 sts 202,r24
142 00e6 8091 CA00 lds r24,202
143 00ea 877F andi r24,lo8(-9)
144 00ec 8093 CA00 sts 202,r24
145 00f0 8091 C900 lds r24,201
146 00f4 8B7F andi r24,lo8(-5)
147 00f6 8093 C900 sts 201,r24
148 00fa 8091 CA00 lds r24,202
149 00fe 8460 ori r24,lo8(4)
150 0100 8093 CA00 sts 202,r24
151 0104 8091 CA00 lds r24,202
152 0108 8260 ori r24,lo8(2)
153 010a 8093 CA00 sts 202,r24
154 .L10:
155 010e 8091 C800 lds r24,200
156 0112 87FF sbrs r24,7
157 0114 00C0 rjmp .L9
158 0116 8091 CE00 lds r24,206
159 011a 00C0 rjmp .L10
160 .L9:
161 011c 8091 C900 lds r24,201
162 0120 8068 ori r24,lo8(-128)
163 0122 8093 C900 sts 201,r24
164 0126 4FBF out 95-0x20,r20
165 /* epilogue: frame size=0 */
166 0128 0895 ret
167 /* epilogue end (size=1) */
168 /* function SpektrumUartInit size 92 (91) */
170 .lcomm Sync.0,1
171 .lcomm FrameCnt.1,1
172 .lcomm ByteHigh.2,1
173 .data
176 ReSync.3:
177 0000 01 .byte 1
178 .lcomm Frame2.4,1
179 .text
180 .global SpektrumParser
182 SpektrumParser:
183 /* prologue: frame size=0 */
184 012a EF92 push r14
185 012c FF92 push r15
186 012e 0F93 push r16
187 0130 1F93 push r17
188 0132 CF93 push r28
189 0134 DF93 push r29
190 /* prologue end (size=6) */
191 0136 482F mov r20,r24
192 0138 00E0 ldi r16,lo8(0)
193 013a 10E0 ldi r17,hi8(0)
194 013c 8091 0000 lds r24,ReSync.3
195 0140 8130 cpi r24,lo8(1)
196 0142 01F4 brne .L12
197 0144 1092 0000 sts ReSync.3,__zero_reg__
198 0148 84E4 ldi r24,lo8(68)
199 014a 8093 0000 sts SpektrumTimer,r24
200 014e 1092 0000 sts FrameCnt.1,__zero_reg__
201 0152 1092 0000 sts Sync.0,__zero_reg__
202 0156 1092 0000 sts ByteHigh.2,__zero_reg__
203 015a 00C0 rjmp .L11
204 .L12:
205 015c 8091 0000 lds r24,SpektrumTimer
206 0160 8823 tst r24
207 0162 01F4 brne .L14
208 0164 21E0 ldi r18,lo8(1)
209 0166 30E0 ldi r19,hi8(1)
210 0168 00C0 rjmp .L15
211 .L14:
212 016a 9801 movw r18,r16
213 .L15:
214 016c 9091 0000 lds r25,Sync.0
215 0170 9923 tst r25
216 0172 01F4 brne .L16
217 0174 232B or r18,r19
218 0176 01F0 breq .L17
219 0178 81E0 ldi r24,lo8(1)
220 017a 00C0 rjmp .L87
221 .L17:
222 017c 84E4 ldi r24,lo8(68)
223 017e 8093 0000 sts SpektrumTimer,r24
224 0182 9093 0000 sts FrameCnt.1,r25
225 0186 9093 0000 sts Sync.0,r25
226 018a 9093 0000 sts ByteHigh.2,r25
227 018e 00C0 rjmp .L19
228 .L16:
229 0190 9130 cpi r25,lo8(1)
230 0192 01F4 brne .L20
231 0194 232B or r18,r19
232 0196 01F0 breq .+2
233 0198 00C0 rjmp .L26
234 019a 82E0 ldi r24,lo8(2)
235 .L87:
236 019c 8093 0000 sts Sync.0,r24
237 01a0 8091 0000 lds r24,FrameCnt.1
238 01a4 8F5F subi r24,lo8(-(1))
239 01a6 8093 0000 sts FrameCnt.1,r24
240 01aa 83E0 ldi r24,lo8(3)
241 01ac 00C0 rjmp .L85
242 .L20:
243 01ae 9230 cpi r25,lo8(2)
244 01b0 01F4 brne .L22
245 01b2 232B or r18,r19
246 01b4 01F0 breq .+2
247 01b6 00C0 rjmp .L26
248 01b8 83E0 ldi r24,lo8(3)
249 01ba 8093 0000 sts SpektrumTimer,r24
250 01be 4093 0000 sts ByteHigh.2,r20
251 01c2 9091 0000 lds r25,FrameCnt.1
252 01c6 9230 cpi r25,lo8(2)
253 01c8 01F4 brne .L23
254 01ca 1092 0000 sts Frame2.4,__zero_reg__
255 01ce 47FF sbrs r20,7
256 01d0 00C0 rjmp .L23
257 01d2 81E0 ldi r24,lo8(1)
258 01d4 8093 0000 sts Frame2.4,r24
259 .L23:
260 01d8 83E0 ldi r24,lo8(3)
261 01da 8093 0000 sts Sync.0,r24
262 01de 9F5F subi r25,lo8(-(1))
263 01e0 9093 0000 sts FrameCnt.1,r25
264 01e4 00C0 rjmp .L19
265 .L22:
266 01e6 9330 cpi r25,lo8(3)
267 01e8 01F0 breq .+2
268 01ea 00C0 rjmp .L26
269 01ec 232B or r18,r19
270 01ee 01F0 breq .+2
271 01f0 00C0 rjmp .L26
272 01f2 9093 0000 sts SpektrumTimer,r25
273 01f6 82E0 ldi r24,lo8(2)
274 01f8 8093 0000 sts Sync.0,r24
275 01fc 8091 0000 lds r24,FrameCnt.1
276 0200 8F5F subi r24,lo8(-(1))
277 0202 8093 0000 sts FrameCnt.1,r24
278 0206 2091 0000 lds r18,ByteHigh.2
279 020a 822F mov r24,r18
280 020c 9927 clr r25
281 020e 782F mov r23,r24
282 0210 6627 clr r22
283 0212 842F mov r24,r20
284 0214 9927 clr r25
285 0216 682B or r22,r24
286 0218 792B or r23,r25
287 021a 8091 0000 lds r24,EE_Parameter+39
288 021e 8130 cpi r24,lo8(1)
289 0220 01F4 brne .L27
290 0222 7370 andi r23,hi8(1023)
291 0224 CB01 movw r24,r22
292 0226 8050 subi r24,lo8(-(-512))
293 0228 9240 sbci r25,hi8(-(-512))
294 022a 63E0 ldi r22,lo8(3)
295 022c 70E0 ldi r23,hi8(3)
296 022e 0E94 0000 call __divmodhi4
297 0232 EB01 movw r28,r22
298 0234 00C0 rjmp .L86
299 .L27:
300 0236 8230 cpi r24,lo8(2)
301 0238 01F4 brne .L29
302 023a 7770 andi r23,hi8(2047)
303 023c CB01 movw r24,r22
304 023e 8050 subi r24,lo8(-(-1024))
305 0240 9440 sbci r25,hi8(-(-1024))
306 0242 66E0 ldi r22,lo8(6)
307 0244 70E0 ldi r23,hi8(6)
308 0246 0E94 0000 call __divmodhi4
309 024a EB01 movw r28,r22
310 024c 2695 lsr r18
311 024e 2695 lsr r18
312 0250 2695 lsr r18
313 0252 00C0 rjmp .L81
314 .L29:
315 0254 EB01 movw r28,r22
316 0256 D370 andi r29,hi8(1023)
317 0258 C856 subi r28,lo8(-(-360))
318 025a D140 sbci r29,hi8(-(-360))
319 025c CE01 movw r24,r28
320 025e D7FD sbrc r29,7
321 0260 0196 adiw r24,1
322 .L31:
323 0262 EC01 movw r28,r24
324 0264 D595 asr r29
325 0266 C795 ror r28
326 .L86:
327 0268 2695 lsr r18
328 026a 2695 lsr r18
329 .L81:
330 026c 022F mov r16,r18
331 026e 1127 clr r17
332 0270 0F70 andi r16,lo8(15)
333 0272 1070 andi r17,hi8(15)
334 0274 0F5F subi r16,lo8(-(1))
335 0276 1F4F sbci r17,hi8(-(1))
336 0278 0D30 cpi r16,13
337 027a 1105 cpc r17,__zero_reg__
338 027c 00F0 brlo .+2
339 027e 00C0 rjmp .L32
340 0280 0230 cpi r16,2
341 0282 1105 cpc r17,__zero_reg__
342 0284 01F4 brne .L33
343 0286 04E0 ldi r16,lo8(4)
344 0288 10E0 ldi r17,hi8(4)
345 028a 00C0 rjmp .L34
346 .L33:
347 028c 0430 cpi r16,4
348 028e 1105 cpc r17,__zero_reg__
349 0290 01F4 brne .L34
350 0292 02E0 ldi r16,lo8(2)
351 0294 10E0 ldi r17,hi8(2)
352 .L34:
353 0296 D801 movw r26,r16
354 0298 A00F add r26,r16
355 029a B11F adc r27,r17
356 029c FD01 movw r30,r26
357 029e E050 subi r30,lo8(-(PPM_in))
358 02a0 F040 sbci r31,hi8(-(PPM_in))
359 02a2 8081 ld r24,Z
360 02a4 9181 ldd r25,Z+1
361 02a6 9E01 movw r18,r28
362 02a8 281B sub r18,r24
363 02aa 390B sbc r19,r25
364 02ac C901 movw r24,r18
365 02ae 37FF sbrs r19,7
366 02b0 00C0 rjmp .L37
367 02b2 9095 com r25
368 02b4 8195 neg r24
369 02b6 9F4F sbci r25,lo8(-1)
370 .L37:
371 02b8 0697 sbiw r24,6
372 02ba 04F4 brge .L36
373 02bc E091 0000 lds r30,EE_Parameter+105
374 02c0 EE23 tst r30
375 02c2 01F0 breq .L39
376 02c4 FF27 clr r31
377 02c6 EE0F add r30,r30
378 02c8 FF1F adc r31,r31
379 02ca E050 subi r30,lo8(-(PPM_in))
380 02cc F040 sbci r31,hi8(-(PPM_in))
381 02ce 8081 ld r24,Z
382 02d0 9181 ldd r25,Z+1
383 02d2 8436 cpi r24,100
384 02d4 9105 cpc r25,__zero_reg__
385 02d6 04F4 brge .L36
386 .L39:
387 02d8 8091 0000 lds r24,SenderOkay
388 02dc 883C cpi r24,lo8(-56)
389 02de 00F4 brsh .L40
390 02e0 8091 0000 lds r24,SenderOkay
391 02e4 865F subi r24,lo8(-(10))
392 02e6 8093 0000 sts SenderOkay,r24
393 02ea 00C0 rjmp .L36
394 .L40:
395 02ec 88EC ldi r24,lo8(-56)
396 02ee 8093 0000 sts SenderOkay,r24
397 02f2 8091 6F00 lds r24,111
398 02f6 8F7D andi r24,lo8(-33)
399 02f8 8093 6F00 sts 111,r24
400 .L36:
401 02fc A050 subi r26,lo8(-(PPM_in))
402 02fe B040 sbci r27,hi8(-(PPM_in))
403 0300 8D91 ld r24,X+
404 0302 9C91 ld r25,X
405 0304 BC01 movw r22,r24
406 0306 660F lsl r22
407 0308 771F rol r23
408 030a 680F add r22,r24
409 030c 791F adc r23,r25
410 030e 6C0F add r22,r28
411 0310 7D1F adc r23,r29
412 0312 77FF sbrs r23,7
413 0314 00C0 rjmp .L42
414 0316 6D5F subi r22,lo8(-(3))
415 0318 7F4F sbci r23,hi8(-(3))
416 .L42:
417 031a 7B01 movw r14,r22
418 031c F594 asr r15
419 031e E794 ror r14
420 0320 F594 asr r15
421 0322 E794 ror r14
422 0324 CE01 movw r24,r28
423 0326 0196 adiw r24,1
424 0328 8E15 cp r24,r14
425 032a 9F05 cpc r25,r15
426 032c 04F4 brge .L43
427 032e 0894 sec
428 0330 E108 sbc r14,__zero_reg__
429 0332 F108 sbc r15,__zero_reg__
430 0334 00C0 rjmp .L44
431 .L43:
432 0336 CE01 movw r24,r28
433 0338 0197 sbiw r24,1
434 033a E816 cp r14,r24
435 033c F906 cpc r15,r25
436 033e 04F4 brge .L44
437 0340 0894 sec
438 0342 E11C adc r14,__zero_reg__
439 0344 F11C adc r15,__zero_reg__
440 .L44:
441 0346 0630 cpi r16,6
442 0348 1105 cpc r17,__zero_reg__
443 034a 01F0 breq .+2
444 034c 00C0 rjmp .L46
445 034e C536 cpi r28,101
446 0350 D105 cpc r29,__zero_reg__
447 0352 04F4 brge .+2
448 0354 00C0 rjmp .L47
449 0356 9091 0000 lds r25,s_excnt
450 035a E92F mov r30,r25
451 035c FF27 clr r31
452 035e E050 subi r30,lo8(-(s_exdata))
453 0360 F040 sbci r31,hi8(-(s_exdata))
454 0362 E081 ld r30,Z
455 0364 ED37 cpi r30,lo8(125)
456 0366 01F4 brne .L48
457 0368 8091 0000 lds r24,s_exparity
458 036c 8095 com r24
459 036e 8093 0000 sts s_exparity,r24
460 .L48:
461 0372 9630 cpi r25,lo8(6)
462 0374 01F4 brne .L51
463 0376 8091 0000 lds r24,s_exparity
464 037a 8823 tst r24
465 037c 01F0 breq .L52
466 037e E338 cpi r30,lo8(-125)
467 0380 01F0 breq .L50
468 .L52:
469 0382 8823 tst r24
470 0384 01F0 breq .+2
471 0386 00C0 rjmp .L49
472 0388 ED37 cpi r30,lo8(125)
473 038a 01F0 breq .L50
474 038c 00C0 rjmp .L49
475 .L51:
476 038e 9930 cpi r25,lo8(9)
477 0390 01F0 breq .+2
478 0392 00C0 rjmp .L49
479 0394 8091 0000 lds r24,s_exparity
480 0398 8823 tst r24
481 039a 01F4 brne .L80
482 039c 8091 0000 lds r24,s_exdata+9
483 03a0 8338 cpi r24,lo8(-125)
484 03a2 01F0 breq .L50
485 03a4 00C0 rjmp .L49
486 .L80:
487 03a6 8091 0000 lds r24,s_exdata+9
488 03aa 8D37 cpi r24,lo8(125)
489 03ac 01F0 breq .+2
490 03ae 00C0 rjmp .L49
491 .L50:
492 03b0 8091 0000 lds r24,s_exdata+1
493 03b4 8D37 cpi r24,lo8(125)
494 03b6 01F4 brne .L54
495 03b8 8091 0000 lds r24,s_exdata+2
496 03bc 8338 cpi r24,lo8(-125)
497 03be 01F4 brne .L55
498 03c0 63E8 ldi r22,lo8(-125)
499 03c2 7FEF ldi r23,hi8(-125)
500 03c4 00C0 rjmp .L82
501 .L54:
502 03c6 8338 cpi r24,lo8(-125)
503 03c8 01F4 brne .L55
504 03ca 8091 0000 lds r24,s_exdata+2
505 03ce 8338 cpi r24,lo8(-125)
506 03d0 01F4 brne .L79
507 03d2 60E0 ldi r22,lo8(0)
508 03d4 70E0 ldi r23,hi8(0)
509 03d6 00C0 rjmp .L82
510 .L79:
511 03d8 8D37 cpi r24,lo8(125)
512 03da 01F4 brne .L55
513 03dc 6DE7 ldi r22,lo8(125)
514 03de 70E0 ldi r23,hi8(125)
515 .L82:
516 03e0 85E0 ldi r24,lo8(5)
517 03e2 0E94 0000 call s_update
518 .L55:
519 03e6 8091 0000 lds r24,s_exdata+3
520 03ea 9927 clr r25
521 03ec 87FD sbrc r24,7
522 03ee 9095 com r25
523 03f0 BC01 movw r22,r24
524 03f2 86E0 ldi r24,lo8(6)
525 03f4 0E94 0000 call s_update
526 03f8 8091 0000 lds r24,s_exdata+4
527 03fc 9927 clr r25
528 03fe 87FD sbrc r24,7
529 0400 9095 com r25
530 0402 BC01 movw r22,r24
531 0404 8BE0 ldi r24,lo8(11)
532 0406 0E94 0000 call s_update
533 040a 8091 0000 lds r24,s_exdata+5
534 040e 9927 clr r25
535 0410 87FD sbrc r24,7
536 0412 9095 com r25
537 0414 BC01 movw r22,r24
538 0416 8CE0 ldi r24,lo8(12)
539 0418 0E94 0000 call s_update
540 041c 8091 0000 lds r24,s_excnt
541 0420 8930 cpi r24,lo8(9)
542 0422 01F4 brne .L49
543 0424 8091 0000 lds r24,s_exdata+7
544 0428 8D37 cpi r24,lo8(125)
545 042a 01F4 brne .L60
546 042c 8091 0000 lds r24,PPM_in+16
547 0430 9091 0000 lds r25,(PPM_in+16)+1
548 0434 0596 adiw r24,5
549 0436 BC01 movw r22,r24
550 0438 88E0 ldi r24,lo8(8)
551 043a 0E94 0000 call s_update
552 .L60:
553 043e 8091 0000 lds r24,s_exdata+8
554 0442 8D37 cpi r24,lo8(125)
555 0444 01F4 brne .L61
556 0446 8091 0000 lds r24,PPM_in+16
557 044a 9091 0000 lds r25,(PPM_in+16)+1
558 044e 0597 sbiw r24,5
559 0450 BC01 movw r22,r24
560 0452 88E0 ldi r24,lo8(8)
561 0454 0E94 0000 call s_update
562 .L61:
563 0458 8091 0000 lds r24,PPM_in+16
564 045c 9091 0000 lds r25,(PPM_in+16)+1
565 0460 8358 subi r24,lo8(-125)
566 0462 9F4F sbci r25,hi8(-125)
567 0464 04F4 brge .L62
568 0466 83E8 ldi r24,lo8(-125)
569 0468 9FEF ldi r25,hi8(-125)
570 046a 00C0 rjmp .L83
571 .L62:
572 046c 8091 0000 lds r24,PPM_in+16
573 0470 9091 0000 lds r25,(PPM_in+16)+1
574 0474 8E37 cpi r24,126
575 0476 9105 cpc r25,__zero_reg__
576 0478 04F0 brlt .L63
577 047a 8DE7 ldi r24,lo8(125)
578 047c 90E0 ldi r25,hi8(125)
579 .L83:
580 047e 9093 0000 sts (PPM_in+16)+1,r25
581 0482 8093 0000 sts PPM_in+16,r24
582 .L63:
583 0486 8091 0000 lds r24,s_exdata+6
584 048a 9927 clr r25
585 048c 87FD sbrc r24,7
586 048e 9095 com r25
587 0490 BC01 movw r22,r24
588 0492 8AE0 ldi r24,lo8(10)
589 0494 0E94 0000 call s_update
590 .L49:
591 0498 1092 0000 sts s_excnt,__zero_reg__
592 049c 1092 0000 sts s_exparity,__zero_reg__
593 .L47:
594 04a0 CA30 cpi r28,10
595 04a2 D105 cpc r29,__zero_reg__
596 04a4 04F4 brge .L65
597 04a6 8091 0000 lds r24,s_excnt
598 04aa 8F5F subi r24,lo8(-(1))
599 04ac 8093 0000 sts s_excnt,r24
600 04b0 E82F mov r30,r24
601 04b2 FF27 clr r31
602 04b4 E050 subi r30,lo8(-(s_exdata))
603 04b6 F040 sbci r31,hi8(-(s_exdata))
604 04b8 83E8 ldi r24,lo8(-125)
605 04ba 8083 st Z,r24
606 .L65:
607 04bc 8091 0000 lds r24,s_excnt
608 04c0 8A30 cpi r24,lo8(10)
609 04c2 01F4 brne .L66
610 04c4 1092 0000 sts s_excnt,__zero_reg__
611 .L66:
612 04c8 8FEF ldi r24,hi8(-100)
613 04ca CC39 cpi r28,lo8(-100)
614 04cc D807 cpc r29,r24
615 04ce 04F4 brge .L46
616 04d0 8091 0000 lds r24,s_excnt
617 04d4 E82F mov r30,r24
618 04d6 FF27 clr r31
619 04d8 E050 subi r30,lo8(-(s_exdata))
620 04da F040 sbci r31,hi8(-(s_exdata))
621 04dc 8DE7 ldi r24,lo8(125)
622 04de 8083 st Z,r24
623 04e0 8091 0000 lds r24,s_exparity
624 04e4 8095 com r24
625 04e6 8093 0000 sts s_exparity,r24
626 .L46:
627 04ea 0530 cpi r16,5
628 04ec 1105 cpc r17,__zero_reg__
629 04ee 00F4 brsh .L68
630 04f0 B701 movw r22,r14
631 04f2 802F mov r24,r16
632 04f4 00C0 rjmp .L84
633 .L68:
634 04f6 0530 cpi r16,5
635 04f8 1105 cpc r17,__zero_reg__
636 04fa 01F4 brne .L70
637 04fc BE01 movw r22,r28
638 04fe 87E0 ldi r24,lo8(7)
639 0500 00C0 rjmp .L84
640 .L70:
641 0502 0730 cpi r16,7
642 0504 1105 cpc r17,__zero_reg__
643 0506 01F4 brne .L19
644 0508 BE01 movw r22,r28
645 050a 89E0 ldi r24,lo8(9)
646 .L84:
647 050c 0E94 0000 call s_update
648 0510 00C0 rjmp .L19
649 .L32:
650 0512 0231 cpi r16,18
651 0514 1105 cpc r17,__zero_reg__
652 0516 00F0 brlo .L19
653 0518 81E0 ldi r24,lo8(1)
654 051a 8093 0000 sts ReSync.3,r24
655 051e 00C0 rjmp .L19
656 .L26:
657 0520 81E0 ldi r24,lo8(1)
658 0522 8093 0000 sts ReSync.3,r24
659 0526 1092 0000 sts FrameCnt.1,__zero_reg__
660 052a 1092 0000 sts Frame2.4,__zero_reg__
661 052e 84E4 ldi r24,lo8(68)
662 .L85:
663 0530 8093 0000 sts SpektrumTimer,r24
664 .L19:
665 0534 8091 0000 lds r24,FrameCnt.1
666 0538 8031 cpi r24,lo8(16)
667 053a 00F0 brlo .L11
668 053c 8091 0000 lds r24,Frame2.4
669 0540 8823 tst r24
670 0542 01F4 brne .L77
671 0544 8091 0000 lds r24,ReSync.3
672 0548 8823 tst r24
673 054a 01F4 brne .L77
674 054c 8093 0000 sts NewPpmData,r24
675 .L77:
676 0550 1092 0000 sts FrameCnt.1,__zero_reg__
677 0554 1092 0000 sts Frame2.4,__zero_reg__
678 0558 1092 0000 sts Sync.0,__zero_reg__
679 055c 84E4 ldi r24,lo8(68)
680 055e 8093 0000 sts SpektrumTimer,r24
681 .L11:
682 /* epilogue: frame size=0 */
683 0562 E6E0 ldi r30,6
684 0564 CDB7 in r28,__SP_L__
685 0566 DEB7 in r29,__SP_H__
686 0568 0C94 0000 jmp __epilogue_restores__+24
687 /* epilogue end (size=5) */
688 /* function SpektrumParser size 551 (540) */
690 .comm s_exdata,11,1
691 /* File "Spektrum.c": code 701 = 0x02bd ( 680), prologues 10, epilogues 11 */
DEFINED SYMBOLS
*ABS*:00000000 Spektrum.c
C:\Temp/cca9yYHJ.s:3 *ABS*:0000003f __SREG__
C:\Temp/cca9yYHJ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cca9yYHJ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cca9yYHJ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cca9yYHJ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cca9yYHJ.s:15 .bss:00000000 s_exparity
C:\Temp/cca9yYHJ.s:21 .bss:00000001 s_excnt
C:\Temp/cca9yYHJ.s:27 .bss:00000002 SpektrumTimer
C:\Temp/cca9yYHJ.s:32 .text:00000000 s_update
C:\Temp/cca9yYHJ.s:99 .text:00000074 SpektrumUartInit
.bss:00000003 Sync.0
C:\Temp/cca9yYHJ.s:170 .bss:00000004 FrameCnt.1
C:\Temp/cca9yYHJ.s:171 .bss:00000005 ByteHigh.2
C:\Temp/cca9yYHJ.s:176 .data:00000000 ReSync.3
C:\Temp/cca9yYHJ.s:172 .bss:00000006 Frame2.4
C:\Temp/cca9yYHJ.s:182 .text:0000012a SpektrumParser
*COM*:0000000b s_exdata
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SenderOkay
PPM_in
__divmodhi4
PPM_diff
EE_Parameter
NewPpmData
__epilogue_restores__
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/analog.c
0,0 → 1,334
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "eeprom.h"
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0;
volatile int HiResNick = 2500, HiResRoll = 2500;
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0;
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0;
volatile long Luftdruck = 32000;
volatile long SummenHoehe = 0;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
signed char ExpandBaro = 0;
volatile int VarioMeter = 0;
volatile unsigned int ZaehlMessungen = 0;
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
volatile unsigned char AdReady = 1;
 
//#######################################################################################
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ANALOG_ON;
}
 
#define DESIRED_H_ADC 800
 
void SucheLuftruckOffset(void)
{
unsigned int off;
ExpandBaro = 0;
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
{
unsigned char off2;
OCR0A = 150;
off2 = GetParamByte(PID_PRESSURE_OFFSET);
if(off2 < 230) off2 += 10;
OCR0B = off2;
Delay_ms_Mess(100);
if(MessLuftdruck > DESIRED_H_ADC) off2 = 240;
for(; off2 >= 5; off2 -= 5)
{
OCR0B = off2;
Delay_ms_Mess(50);
printf("*");
if(MessLuftdruck > DESIRED_H_ADC) break;
}
SetParamByte(PID_PRESSURE_OFFSET, off2);
if(off2 >= 15) off = 140; else off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms_Mess(50);
printf(".");
if(MessLuftdruck < DESIRED_H_ADC) break;
}
DruckOffsetSetting = off;
}
#else
off = GetParamByte(PID_PRESSURE_OFFSET);
if(off > 20) off -= 10;
OCR0A = off;
Delay_ms_Mess(100);
if(MessLuftdruck < DESIRED_H_ADC) off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms_Mess(50);
printf(".");
if(MessLuftdruck < DESIRED_H_ADC) break;
}
DruckOffsetSetting = off;
SetParamByte(PID_PRESSURE_OFFSET, off);
#endif
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 245)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE;
OCR0A = off;
Delay_ms_Mess(300);
}
 
 
void SucheGyroOffset(void)
{
unsigned char i, ready = 0;
int timeout;
timeout = SetDelay(2000);
for(i=140; i != 0; i--)
{
if(ready == 3 && i > 10) i = 9;
ready = 0;
if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++;
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++;
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++;
I2C_Start(TWI_STATE_GYRO_OFFSET_TX);
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 245;};
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 245;};
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 245;};
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;}
AdReady = 0;
ANALOG_ON;
while(!AdReady);
if(i<10) Delay_ms_Mess(10);
}
Delay_ms_Mess(70);
}
 
/*
0 n
1 r
2 g
3 y
4 x
5 n
6 r
7 u
8 z
9 L
10 n
11 r
12 g
13 y
14 x
15 n
16 r
17 L
*/
 
//#######################################################################################
//
ISR(ADC_vect)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
static signed char subcount = 0;
static signed int gier1, roll1, nick1, nick_filter, roll_filter;
static signed int accy, accx;
static long tmpLuftdruck = 0;
static char messanzahl_Druck = 0;
switch(state++)
{
case 0:
nick1 = ADC;
kanal = AD_ROLL;
break;
case 1:
roll1 = ADC;
kanal = AD_GIER;
break;
case 2:
gier1 = ADC;
kanal = AD_ACC_Y;
break;
case 3:
Aktuell_ay = NeutralAccY - ADC;
accy = Aktuell_ay;
kanal = AD_ACC_X;
break;
case 4:
Aktuell_ax = ADC - NeutralAccX;
accx = Aktuell_ax;
kanal = AD_NICK;
break;
case 5:
nick1 += ADC;
kanal = AD_ROLL;
break;
case 6:
roll1 += ADC;
kanal = AD_UBAT;
break;
case 7:
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference
else
#endif
UBat = (3 * UBat + ADC / 3) / 4;
kanal = AD_ACC_Z;
break;
case 8:
AdWertAccHoch = (signed int) ADC - NeutralAccZ;
if(AdWertAccHoch > 1)
{
if(NeutralAccZ < 750)
{
subcount += 5;
if(modell_fliegt < 500) subcount += 10;
}
if(subcount > 100) { NeutralAccZ++; subcount -= 100;}
}
else if(AdWertAccHoch < -1)
{
if(NeutralAccZ > 550)
{
subcount -= 5;
if(modell_fliegt < 500) subcount -= 10;
if(subcount < -100) { NeutralAccZ--; subcount += 100;}
}
}
// messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
kanal = AD_DRUCK;
break;
// "case 9:" fehlt hier absichtlich
case 10:
nick1 += ADC;
kanal = AD_ROLL;
break;
case 11:
roll1 += ADC;
kanal = AD_GIER;
break;
case 12:
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2;
else
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1);
else AdWertGier = (ADC + gier1);
kanal = AD_ACC_Y;
break;
case 13:
Aktuell_ay = NeutralAccY - ADC;
AdWertAccRoll = (Aktuell_ay + accy);
kanal = AD_ACC_X;
break;
case 14:
Aktuell_ax = ADC - NeutralAccX;
AdWertAccNick = (Aktuell_ax + accx);
kanal = AD_NICK;
break;
case 15:
nick1 += ADC;
if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
AdWertNick = nick1 / 8;
nick_filter = (nick_filter + nick1) / 2;
HiResNick = nick_filter - AdNeutralNick;
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
kanal = AD_ROLL;
break;
case 16:
roll1 += ADC;
if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4;
AdWertRoll = roll1 / 8;
roll_filter = (roll_filter + roll1) / 2;
HiResRoll = roll_filter - AdNeutralRoll;
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
kanal = AD_DRUCK;
break;
case 17:
state = 0;
AdReady = 1;
ZaehlMessungen++;
// "break" fehlt hier absichtlich
case 9:
MessLuftdruck = ADC;
tmpLuftdruck += MessLuftdruck;
if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
{
signed int tmp;
Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step
HoehenWert = StartLuftdruck - Luftdruck;
SummenHoehe -= SummenHoehe/SM_FILTER;
SummenHoehe += HoehenWert;
tmp = (HoehenWert - SummenHoehe/SM_FILTER);
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024;
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16;
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32;
tmpLuftdruck /= 2;
messanzahl_Druck = 16/2;
}
kanal = AD_NICK;
break;
default:
kanal = 0; state = 0; kanal = AD_NICK;
break;
}
ADMUX = kanal;
if(state != 0) ANALOG_ON;
}
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/analog.h
0,0 → 1,47
#ifndef _ANALOG_H
#define _ANALOG_H
/*#######################################################################################
 
#######################################################################################*/
 
#define SM_FILTER 16
 
extern volatile int UBat;
extern volatile int AdWertNick, AdWertRoll, AdWertGier;
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch;
extern volatile int HiResNick, HiResRoll;
extern volatile int AdWertNickFilter, AdWertRollFilter, AdWertGierFilter;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile long SummenHoehe;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern signed char ExpandBaro;
extern volatile int VarioMeter;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
extern volatile char MessanzahlNick;
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier;
extern volatile unsigned char AdReady;
 
unsigned int ReadADC(unsigned char adc_input);
void ADC_Init(void);
void SucheLuftruckOffset(void);
void SucheGyroOffset(void);
 
#define AD_GIER 0
#define AD_ROLL 1
#define AD_NICK 2
#define AD_DRUCK 3
#define AD_UBAT 4
#define AD_ACC_Z 5
#define AD_ACC_Y 6
#define AD_ACC_X 7
 
 
#define ANALOG_OFF ADCSRA=0
 
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
//Signle trigger Mode, Interrupt on
#endif //_ANALOG_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/analog.lst
0,0 → 1,1412
1 .file "analog.c"
2 .arch atmega1284p
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 .global AdReady
11 .data
14 AdReady:
15 0000 01 .byte 1
16 .global AnalogOffsetGier
19 AnalogOffsetGier:
20 0001 73 .byte 115
21 .global AnalogOffsetRoll
24 AnalogOffsetRoll:
25 0002 73 .byte 115
26 .global AnalogOffsetNick
29 AnalogOffsetNick:
30 0003 73 .byte 115
31 .global ZaehlMessungen
32 .global ZaehlMessungen
33 .section .bss
36 ZaehlMessungen:
37 0000 0000 .skip 2,0
38 .global VarioMeter
39 .global VarioMeter
42 VarioMeter:
43 0002 0000 .skip 2,0
44 .global ExpandBaro
45 .global ExpandBaro
48 ExpandBaro:
49 0004 00 .skip 1,0
50 .global MessLuftdruck
51 .data
54 MessLuftdruck:
55 0004 FF03 .word 1023
56 .global SummenHoehe
57 .global SummenHoehe
58 .section .bss
61 SummenHoehe:
62 0005 0000 0000 .skip 4,0
63 .global Luftdruck
64 .data
67 Luftdruck:
68 0006 007D 0000 .long 32000
69 .global AdWertAccHoch
70 .global AdWertAccHoch
71 .section .bss
74 AdWertAccHoch:
75 0009 0000 .skip 2,0
76 .global AdWertAccNick
77 .global AdWertAccNick
80 AdWertAccNick:
81 000b 0000 .skip 2,0
82 .global AdWertAccRoll
83 .global AdWertAccRoll
86 AdWertAccRoll:
87 000d 0000 .skip 2,0
88 .global AdWertGier
89 .global AdWertGier
92 AdWertGier:
93 000f 0000 .skip 2,0
94 .global AdWertRoll
95 .global AdWertRoll
98 AdWertRoll:
99 0011 0000 .skip 2,0
100 .global AdWertNick
101 .global AdWertNick
104 AdWertNick:
105 0013 0000 .skip 2,0
106 .global HiResRoll
107 .data
110 HiResRoll:
111 000a C409 .word 2500
112 .global HiResNick
115 HiResNick:
116 000c C409 .word 2500
117 .global AdWertGierFilter
118 .global AdWertGierFilter
119 .section .bss
122 AdWertGierFilter:
123 0015 0000 .skip 2,0
124 .global AdWertRollFilter
125 .global AdWertRollFilter
128 AdWertRollFilter:
129 0017 0000 .skip 2,0
130 .global AdWertNickFilter
131 .global AdWertNickFilter
134 AdWertNickFilter:
135 0019 0000 .skip 2,0
136 .global UBat
137 .data
140 UBat:
141 000e 6400 .word 100
142 .text
143 .global ADC_Init
145 ADC_Init:
146 /* prologue: frame size=0 */
147 /* prologue end (size=0) */
148 0000 1092 7C00 sts 124,__zero_reg__
149 0004 8FEC ldi r24,lo8(-49)
150 0006 8093 7A00 sts 122,r24
151 /* epilogue: frame size=0 */
152 000a 0895 ret
153 /* epilogue end (size=1) */
154 /* function ADC_Init size 6 (5) */
156 .section .progmem.data,"a",@progbits
159 __c.13:
160 0000 2A00 .string "*"
163 __c.14:
164 0002 2E00 .string "."
165 .text
166 .global SucheLuftruckOffset
168 SucheLuftruckOffset:
169 /* prologue: frame size=0 */
170 000c CF93 push r28
171 000e DF93 push r29
172 /* prologue end (size=2) */
173 0010 1092 0000 sts ExpandBaro,__zero_reg__
174 0014 86E9 ldi r24,lo8(-106)
175 0016 87BD out 71-0x20,r24
176 0018 83E0 ldi r24,lo8(3)
177 001a 90E0 ldi r25,hi8(3)
178 001c 0E94 0000 call GetParamByte
179 0020 C82F mov r28,r24
180 0022 863E cpi r24,lo8(-26)
181 0024 00F4 brsh .L3
182 0026 C65F subi r28,lo8(-(10))
183 .L3:
184 0028 C8BD out 72-0x20,r28
185 002a 84E6 ldi r24,lo8(100)
186 002c 90E0 ldi r25,hi8(100)
187 002e 0E94 0000 call Delay_ms_Mess
188 0032 8091 0000 lds r24,MessLuftdruck
189 0036 9091 0000 lds r25,(MessLuftdruck)+1
190 003a 8152 subi r24,lo8(801)
191 003c 9340 sbci r25,hi8(801)
192 003e 00F0 brlo .L4
193 0040 C0EF ldi r28,lo8(-16)
194 0042 00C0 rjmp .L9
195 .L4:
196 0044 C530 cpi r28,lo8(5)
197 0046 00F0 brlo .L6
198 .L9:
199 0048 C8BD out 72-0x20,r28
200 004a 82E3 ldi r24,lo8(50)
201 004c 90E0 ldi r25,hi8(50)
202 004e 0E94 0000 call Delay_ms_Mess
203 0052 80E0 ldi r24,lo8(__c.13)
204 0054 90E0 ldi r25,hi8(__c.13)
205 0056 9F93 push r25
206 0058 8F93 push r24
207 005a 80E0 ldi r24,lo8(pm(uart_putchar))
208 005c 90E0 ldi r25,hi8(pm(uart_putchar))
209 005e 9F93 push r25
210 0060 8F93 push r24
211 0062 E091 0000 lds r30,_printf_P
212 0066 F091 0000 lds r31,(_printf_P)+1
213 006a 0995 icall
214 006c 8091 0000 lds r24,MessLuftdruck
215 0070 9091 0000 lds r25,(MessLuftdruck)+1
216 0074 0F90 pop __tmp_reg__
217 0076 0F90 pop __tmp_reg__
218 0078 0F90 pop __tmp_reg__
219 007a 0F90 pop __tmp_reg__
220 007c 8152 subi r24,lo8(801)
221 007e 9340 sbci r25,hi8(801)
222 0080 00F4 brsh .L6
223 0082 C550 subi r28,lo8(-(-5))
224 0084 00C0 rjmp .L4
225 .L6:
226 0086 6C2F mov r22,r28
227 0088 83E0 ldi r24,lo8(3)
228 008a 90E0 ldi r25,hi8(3)
229 008c 0E94 0000 call SetParamByte
230 0090 CF30 cpi r28,lo8(15)
231 0092 00F0 brlo .L10
232 0094 CCE8 ldi r28,lo8(140)
233 0096 D0E0 ldi r29,hi8(140)
234 0098 00C0 rjmp .L11
235 .L10:
236 009a C0E0 ldi r28,lo8(0)
237 009c D0E0 ldi r29,hi8(0)
238 .L11:
239 009e CA3F cpi r28,250
240 00a0 D105 cpc r29,__zero_reg__
241 00a2 00F4 brsh .L13
242 00a4 C7BD out 71-0x20,r28
243 00a6 82E3 ldi r24,lo8(50)
244 00a8 90E0 ldi r25,hi8(50)
245 00aa 0E94 0000 call Delay_ms_Mess
246 00ae 80E0 ldi r24,lo8(__c.14)
247 00b0 90E0 ldi r25,hi8(__c.14)
248 00b2 9F93 push r25
249 00b4 8F93 push r24
250 00b6 80E0 ldi r24,lo8(pm(uart_putchar))
251 00b8 90E0 ldi r25,hi8(pm(uart_putchar))
252 00ba 9F93 push r25
253 00bc 8F93 push r24
254 00be E091 0000 lds r30,_printf_P
255 00c2 F091 0000 lds r31,(_printf_P)+1
256 00c6 0995 icall
257 00c8 8091 0000 lds r24,MessLuftdruck
258 00cc 9091 0000 lds r25,(MessLuftdruck)+1
259 00d0 0F90 pop __tmp_reg__
260 00d2 0F90 pop __tmp_reg__
261 00d4 0F90 pop __tmp_reg__
262 00d6 0F90 pop __tmp_reg__
263 00d8 8052 subi r24,lo8(800)
264 00da 9340 sbci r25,hi8(800)
265 00dc 00F0 brlo .L13
266 00de 2196 adiw r28,1
267 00e0 00C0 rjmp .L11
268 .L13:
269 00e2 C093 0000 sts DruckOffsetSetting,r28
270 00e6 8091 0000 lds r24,EE_Parameter+13
271 00ea 80FF sbrs r24,0
272 00ec 00C0 rjmp .L17
273 00ee 8C2F mov r24,r28
274 00f0 8A50 subi r24,lo8(-(-10))
275 00f2 8B3E cpi r24,lo8(-21)
276 00f4 00F0 brlo .L17
277 00f6 8091 0000 lds r24,VersionInfo+5
278 00fa 8064 ori r24,lo8(64)
279 00fc 8093 0000 sts VersionInfo+5,r24
280 .L17:
281 0100 C7BD out 71-0x20,r28
282 0102 8CE2 ldi r24,lo8(300)
283 0104 91E0 ldi r25,hi8(300)
284 0106 0E94 0000 call Delay_ms_Mess
285 /* epilogue: frame size=0 */
286 010a DF91 pop r29
287 010c CF91 pop r28
288 010e 0895 ret
289 /* epilogue end (size=3) */
290 /* function SucheLuftruckOffset size 133 (128) */
292 .section .progmem.data
295 __c.12:
296 0004 0A0D 2044 .string "\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"
296 4143 206F
296 7220 4932
296 4320 4552
296 524F 5221
297 .text
298 .global SucheGyroOffset
300 SucheGyroOffset:
301 /* prologue: frame size=0 */
302 0110 EF92 push r14
303 0112 FF92 push r15
304 0114 1F93 push r17
305 0116 CF93 push r28
306 /* prologue end (size=4) */
307 0118 10E0 ldi r17,lo8(0)
308 011a 80ED ldi r24,lo8(2000)
309 011c 97E0 ldi r25,hi8(2000)
310 011e 0E94 0000 call SetDelay
311 0122 7C01 movw r14,r24
312 0124 CCE8 ldi r28,lo8(-116)
313 .L51:
314 0126 1330 cpi r17,lo8(3)
315 0128 01F4 brne .L24
316 012a CB30 cpi r28,lo8(11)
317 012c 00F0 brlo .L24
318 012e C9E0 ldi r28,lo8(9)
319 .L24:
320 0130 10E0 ldi r17,lo8(0)
321 0132 8091 0000 lds r24,AdWertNick
322 0136 9091 0000 lds r25,(AdWertNick)+1
323 013a 8C5F subi r24,lo8(1020)
324 013c 9340 sbci r25,hi8(1020)
325 013e 04F4 brge .L25
326 0140 8091 0000 lds r24,AnalogOffsetNick
327 0144 8150 subi r24,lo8(-(-1))
328 0146 00C0 rjmp .L56
329 .L25:
330 0148 8091 0000 lds r24,AdWertNick
331 014c 9091 0000 lds r25,(AdWertNick)+1
332 0150 8750 subi r24,lo8(1031)
333 0152 9440 sbci r25,hi8(1031)
334 0154 04F0 brlt .L27
335 0156 8091 0000 lds r24,AnalogOffsetNick
336 015a 8F5F subi r24,lo8(-(1))
337 .L56:
338 015c 8093 0000 sts AnalogOffsetNick,r24
339 0160 00C0 rjmp .L26
340 .L27:
341 0162 11E0 ldi r17,lo8(1)
342 .L26:
343 0164 8091 0000 lds r24,AdWertRoll
344 0168 9091 0000 lds r25,(AdWertRoll)+1
345 016c 8C5F subi r24,lo8(1020)
346 016e 9340 sbci r25,hi8(1020)
347 0170 04F4 brge .L29
348 0172 8091 0000 lds r24,AnalogOffsetRoll
349 0176 8150 subi r24,lo8(-(-1))
350 0178 00C0 rjmp .L57
351 .L29:
352 017a 8091 0000 lds r24,AdWertRoll
353 017e 9091 0000 lds r25,(AdWertRoll)+1
354 0182 8750 subi r24,lo8(1031)
355 0184 9440 sbci r25,hi8(1031)
356 0186 04F0 brlt .L31
357 0188 8091 0000 lds r24,AnalogOffsetRoll
358 018c 8F5F subi r24,lo8(-(1))
359 .L57:
360 018e 8093 0000 sts AnalogOffsetRoll,r24
361 0192 00C0 rjmp .L30
362 .L31:
363 0194 1F5F subi r17,lo8(-(1))
364 .L30:
365 0196 8091 0000 lds r24,AdWertGier
366 019a 9091 0000 lds r25,(AdWertGier)+1
367 019e 8C5F subi r24,lo8(1020)
368 01a0 9340 sbci r25,hi8(1020)
369 01a2 04F4 brge .L33
370 01a4 8091 0000 lds r24,AnalogOffsetGier
371 01a8 8150 subi r24,lo8(-(-1))
372 01aa 00C0 rjmp .L58
373 .L33:
374 01ac 8091 0000 lds r24,AdWertGier
375 01b0 9091 0000 lds r25,(AdWertGier)+1
376 01b4 8750 subi r24,lo8(1031)
377 01b6 9440 sbci r25,hi8(1031)
378 01b8 04F0 brlt .L35
379 01ba 8091 0000 lds r24,AnalogOffsetGier
380 01be 8F5F subi r24,lo8(-(1))
381 .L58:
382 01c0 8093 0000 sts AnalogOffsetGier,r24
383 01c4 00C0 rjmp .L34
384 .L55:
385 01c6 80E0 ldi r24,lo8(__c.12)
386 01c8 90E0 ldi r25,hi8(__c.12)
387 01ca 9F93 push r25
388 01cc 8F93 push r24
389 01ce 80E0 ldi r24,lo8(pm(uart_putchar))
390 01d0 90E0 ldi r25,hi8(pm(uart_putchar))
391 01d2 9F93 push r25
392 01d4 8F93 push r24
393 01d6 E091 0000 lds r30,_printf_P
394 01da F091 0000 lds r31,(_printf_P)+1
395 01de 0995 icall
396 01e0 0F90 pop __tmp_reg__
397 01e2 0F90 pop __tmp_reg__
398 01e4 0F90 pop __tmp_reg__
399 01e6 0F90 pop __tmp_reg__
400 01e8 00C0 rjmp .L44
401 .L35:
402 01ea 1F5F subi r17,lo8(-(1))
403 .L34:
404 01ec 82E1 ldi r24,lo8(18)
405 01ee 8093 0000 sts twi_state,r24
406 01f2 8091 0000 lds r24,BLFlags
407 01f6 8E7F andi r24,lo8(-2)
408 01f8 8093 0000 sts BLFlags,r24
409 01fc 85EA ldi r24,lo8(-91)
410 01fe 8093 BC00 sts 188,r24
411 0202 8091 0000 lds r24,AnalogOffsetNick
412 0206 8A30 cpi r24,lo8(10)
413 0208 00F4 brsh .L37
414 020a 8091 0000 lds r24,VersionInfo+5
415 020e 8160 ori r24,lo8(1)
416 0210 8093 0000 sts VersionInfo+5,r24
417 0214 8AE0 ldi r24,lo8(10)
418 0216 8093 0000 sts AnalogOffsetNick,r24
419 .L37:
420 021a 8091 0000 lds r24,AnalogOffsetNick
421 021e 863F cpi r24,lo8(-10)
422 0220 00F0 brlo .L38
423 0222 8091 0000 lds r24,VersionInfo+5
424 0226 8160 ori r24,lo8(1)
425 0228 8093 0000 sts VersionInfo+5,r24
426 022c 85EF ldi r24,lo8(-11)
427 022e 8093 0000 sts AnalogOffsetNick,r24
428 .L38:
429 0232 8091 0000 lds r24,AnalogOffsetRoll
430 0236 8A30 cpi r24,lo8(10)
431 0238 00F4 brsh .L39
432 023a 8091 0000 lds r24,VersionInfo+5
433 023e 8260 ori r24,lo8(2)
434 0240 8093 0000 sts VersionInfo+5,r24
435 0244 8AE0 ldi r24,lo8(10)
436 0246 8093 0000 sts AnalogOffsetRoll,r24
437 .L39:
438 024a 8091 0000 lds r24,AnalogOffsetRoll
439 024e 863F cpi r24,lo8(-10)
440 0250 00F0 brlo .L40
441 0252 8091 0000 lds r24,VersionInfo+5
442 0256 8260 ori r24,lo8(2)
443 0258 8093 0000 sts VersionInfo+5,r24
444 025c 85EF ldi r24,lo8(-11)
445 025e 8093 0000 sts AnalogOffsetRoll,r24
446 .L40:
447 0262 8091 0000 lds r24,AnalogOffsetGier
448 0266 8A30 cpi r24,lo8(10)
449 0268 00F4 brsh .L41
450 026a 8091 0000 lds r24,VersionInfo+5
451 026e 8460 ori r24,lo8(4)
452 0270 8093 0000 sts VersionInfo+5,r24
453 0274 8AE0 ldi r24,lo8(10)
454 0276 8093 0000 sts AnalogOffsetGier,r24
455 .L41:
456 027a 8091 0000 lds r24,AnalogOffsetGier
457 027e 863F cpi r24,lo8(-10)
458 0280 00F0 brlo .L42
459 0282 8091 0000 lds r24,VersionInfo+5
460 0286 8460 ori r24,lo8(4)
461 0288 8093 0000 sts VersionInfo+5,r24
462 028c 85EF ldi r24,lo8(-11)
463 028e 8093 0000 sts AnalogOffsetGier,r24
464 .L42:
465 0292 8091 0000 lds r24,twi_state
466 0296 8823 tst r24
467 0298 01F0 breq .L44
468 029a C701 movw r24,r14
469 029c 0E94 0000 call CheckDelay
470 02a0 8823 tst r24
471 02a2 01F0 breq .+2
472 02a4 00C0 rjmp .L55
473 02a6 00C0 rjmp .L42
474 .L44:
475 02a8 1092 0000 sts AdReady,__zero_reg__
476 02ac 8FEC ldi r24,lo8(-49)
477 02ae 8093 7A00 sts 122,r24
478 .L47:
479 02b2 8091 0000 lds r24,AdReady
480 02b6 8823 tst r24
481 02b8 01F0 breq .L47
482 02ba CA30 cpi r28,lo8(10)
483 02bc 00F4 brsh .L23
484 02be 8AE0 ldi r24,lo8(10)
485 02c0 90E0 ldi r25,hi8(10)
486 02c2 0E94 0000 call Delay_ms_Mess
487 .L23:
488 02c6 C150 subi r28,lo8(-(-1))
489 02c8 01F0 breq .+2
490 02ca 00C0 rjmp .L51
491 02cc 86E4 ldi r24,lo8(70)
492 02ce 90E0 ldi r25,hi8(70)
493 02d0 0E94 0000 call Delay_ms_Mess
494 /* epilogue: frame size=0 */
495 02d4 CF91 pop r28
496 02d6 1F91 pop r17
497 02d8 FF90 pop r15
498 02da EF90 pop r14
499 02dc 0895 ret
500 /* epilogue end (size=5) */
501 /* function SucheGyroOffset size 238 (229) */
503 .lcomm kanal.0,1
504 .lcomm state.1,1
505 .lcomm subcount.2,1
506 .lcomm gier1.3,2
507 .lcomm roll1.4,2
508 .lcomm nick1.5,2
509 .lcomm nick_filter.6,2
510 .lcomm roll_filter.7,2
511 .lcomm accy.8,2
512 .lcomm accx.9,2
513 .lcomm tmpLuftdruck.10,4
514 .lcomm messanzahl_Druck.11,1
515 .global __vector_24
517 __vector_24:
518 /* prologue: frame size=0 */
519 02de 1F92 push __zero_reg__
520 02e0 0F92 push __tmp_reg__
521 02e2 0FB6 in __tmp_reg__,__SREG__
522 02e4 0F92 push __tmp_reg__
523 02e6 1124 clr __zero_reg__
524 02e8 EF92 push r14
525 02ea FF92 push r15
526 02ec 0F93 push r16
527 02ee 1F93 push r17
528 02f0 2F93 push r18
529 02f2 3F93 push r19
530 02f4 4F93 push r20
531 02f6 5F93 push r21
532 02f8 6F93 push r22
533 02fa 7F93 push r23
534 02fc 8F93 push r24
535 02fe 9F93 push r25
536 0300 AF93 push r26
537 0302 BF93 push r27
538 0304 EF93 push r30
539 0306 FF93 push r31
540 /* prologue end (size=21) */
541 0308 8091 0000 lds r24,state.1
542 030c 282F mov r18,r24
543 030e 3327 clr r19
544 0310 4427 clr r20
545 0312 5527 clr r21
546 0314 8F5F subi r24,lo8(-(1))
547 0316 8093 0000 sts state.1,r24
548 031a F901 movw r30,r18
549 031c 2231 cpi r18,18
550 031e 3105 cpc r19,__zero_reg__
551 0320 00F0 brlo .+2
552 0322 00C0 rjmp .L118
553 0324 E050 subi r30,lo8(-(pm(.L119)))
554 0326 F040 sbci r31,hi8(-(pm(.L119)))
555 0328 0C94 0000 jmp __tablejump2__
556 .data
557 .section .progmem.gcc_sw_table, "a", @progbits
558 .p2align 1
559 .L119:
560 0000 0000 .word pm(.L61)
561 0002 0000 .word pm(.L62)
562 0004 0000 .word pm(.L63)
563 0006 0000 .word pm(.L64)
564 0008 0000 .word pm(.L65)
565 000a 0000 .word pm(.L66)
566 000c 0000 .word pm(.L67)
567 000e 0000 .word pm(.L68)
568 0010 0000 .word pm(.L71)
569 0012 0000 .word pm(.L104)
570 0014 0000 .word pm(.L66)
571 0016 0000 .word pm(.L83)
572 0018 0000 .word pm(.L84)
573 001a 0000 .word pm(.L89)
574 001c 0000 .word pm(.L90)
575 001e 0000 .word pm(.L91)
576 0020 0000 .word pm(.L97)
577 0022 0000 .word pm(.L103)
578 .text
579 .L61:
580 032c 8091 7800 lds r24,120
581 0330 9091 7900 lds r25,(120)+1
582 0334 00C0 rjmp .L130
583 .L62:
584 0336 8091 7800 lds r24,120
585 033a 9091 7900 lds r25,(120)+1
586 033e 00C0 rjmp .L129
587 .L63:
588 0340 8091 7800 lds r24,120
589 0344 9091 7900 lds r25,(120)+1
590 0348 9093 0000 sts (gier1.3)+1,r25
591 034c 8093 0000 sts gier1.3,r24
592 0350 00C0 rjmp .L131
593 .L64:
594 0352 8091 0000 lds r24,NeutralAccY
595 0356 9091 0000 lds r25,(NeutralAccY)+1
596 035a 2091 7800 lds r18,120
597 035e 3091 7900 lds r19,(120)+1
598 0362 821B sub r24,r18
599 0364 930B sbc r25,r19
600 0366 9093 0000 sts (Aktuell_ay)+1,r25
601 036a 8093 0000 sts Aktuell_ay,r24
602 036e 8091 0000 lds r24,Aktuell_ay
603 0372 9091 0000 lds r25,(Aktuell_ay)+1
604 0376 9093 0000 sts (accy.8)+1,r25
605 037a 8093 0000 sts accy.8,r24
606 037e 00C0 rjmp .L132
607 .L65:
608 0380 8091 7800 lds r24,120
609 0384 9091 7900 lds r25,(120)+1
610 0388 2091 0000 lds r18,NeutralAccX
611 038c 3091 0000 lds r19,(NeutralAccX)+1
612 0390 821B sub r24,r18
613 0392 930B sbc r25,r19
614 0394 9093 0000 sts (Aktuell_ax)+1,r25
615 0398 8093 0000 sts Aktuell_ax,r24
616 039c 8091 0000 lds r24,Aktuell_ax
617 03a0 9091 0000 lds r25,(Aktuell_ax)+1
618 03a4 9093 0000 sts (accx.9)+1,r25
619 03a8 8093 0000 sts accx.9,r24
620 03ac 00C0 rjmp .L127
621 .L66:
622 03ae 8091 0000 lds r24,nick1.5
623 03b2 9091 0000 lds r25,(nick1.5)+1
624 03b6 2091 7800 lds r18,120
625 03ba 3091 7900 lds r19,(120)+1
626 03be 820F add r24,r18
627 03c0 931F adc r25,r19
628 .L130:
629 03c2 9093 0000 sts (nick1.5)+1,r25
630 03c6 8093 0000 sts nick1.5,r24
631 .L134:
632 03ca 81E0 ldi r24,lo8(1)
633 03cc 00C0 rjmp .L128
634 .L67:
635 03ce 8091 0000 lds r24,roll1.4
636 03d2 9091 0000 lds r25,(roll1.4)+1
637 03d6 2091 7800 lds r18,120
638 03da 3091 7900 lds r19,(120)+1
639 03de 820F add r24,r18
640 03e0 931F adc r25,r19
641 03e2 9093 0000 sts (roll1.4)+1,r25
642 03e6 8093 0000 sts roll1.4,r24
643 03ea 84E0 ldi r24,lo8(4)
644 03ec 00C0 rjmp .L128
645 .L68:
646 03ee 8091 0000 lds r24,EE_Parameter+110
647 03f2 83FF sbrs r24,3
648 03f4 00C0 rjmp .L69
649 03f6 8091 0000 lds r24,UBat
650 03fa 9091 0000 lds r25,(UBat)+1
651 03fe 9C01 movw r18,r24
652 0400 220F lsl r18
653 0402 331F rol r19
654 0404 280F add r18,r24
655 0406 391F adc r19,r25
656 0408 4091 7800 lds r20,120
657 040c 5091 7900 lds r21,(120)+1
658 0410 8BE0 ldi r24,lo8(11)
659 0412 90E0 ldi r25,hi8(11)
660 0414 489F mul r20,r24
661 0416 B001 movw r22,r0
662 0418 499F mul r20,r25
663 041a 700D add r23,r0
664 041c 589F mul r21,r24
665 041e 700D add r23,r0
666 0420 1124 clr r1
667 0422 CB01 movw r24,r22
668 0424 6EE1 ldi r22,lo8(30)
669 0426 70E0 ldi r23,hi8(30)
670 0428 00C0 rjmp .L121
671 .L69:
672 042a 8091 0000 lds r24,UBat
673 042e 9091 0000 lds r25,(UBat)+1
674 0432 9C01 movw r18,r24
675 0434 220F lsl r18
676 0436 331F rol r19
677 0438 280F add r18,r24
678 043a 391F adc r19,r25
679 043c 8091 7800 lds r24,120
680 0440 9091 7900 lds r25,(120)+1
681 0444 63E0 ldi r22,lo8(3)
682 0446 70E0 ldi r23,hi8(3)
683 .L121:
684 0448 0E94 0000 call __udivmodhi4
685 044c 260F add r18,r22
686 044e 371F adc r19,r23
687 0450 3695 lsr r19
688 0452 2795 ror r18
689 0454 3695 lsr r19
690 0456 2795 ror r18
691 0458 3093 0000 sts (UBat)+1,r19
692 045c 2093 0000 sts UBat,r18
693 0460 85E0 ldi r24,lo8(5)
694 0462 00C0 rjmp .L128
695 .L71:
696 0464 8091 7800 lds r24,120
697 0468 9091 7900 lds r25,(120)+1
698 046c 4091 0000 lds r20,NeutralAccZ
699 0470 5091 0000 lds r21,(NeutralAccZ)+1
700 0474 841B sub r24,r20
701 0476 950B sbc r25,r21
702 0478 9093 0000 sts (AdWertAccHoch)+1,r25
703 047c 8093 0000 sts AdWertAccHoch,r24
704 0480 8091 0000 lds r24,AdWertAccHoch
705 0484 9091 0000 lds r25,(AdWertAccHoch)+1
706 0488 0297 sbiw r24,2
707 048a 04F0 brlt .L72
708 048c 72E0 ldi r23,hi8(750)
709 048e 4E3E cpi r20,lo8(750)
710 0490 5707 cpc r21,r23
711 0492 04F4 brge .L73
712 0494 2091 0000 lds r18,subcount.2
713 0498 2B5F subi r18,lo8(-(5))
714 049a 2093 0000 sts subcount.2,r18
715 049e 2550 subi r18,lo8(-(-5))
716 04a0 8091 0000 lds r24,modell_fliegt
717 04a4 9091 0000 lds r25,(modell_fliegt)+1
718 04a8 845F subi r24,lo8(500)
719 04aa 9140 sbci r25,hi8(500)
720 04ac 00F4 brsh .L73
721 04ae 215F subi r18,lo8(-(15))
722 04b0 2093 0000 sts subcount.2,r18
723 .L73:
724 04b4 8091 0000 lds r24,subcount.2
725 04b8 8536 cpi r24,lo8(101)
726 04ba 04F0 brlt .L76
727 04bc 4F5F subi r20,lo8(-(1))
728 04be 5F4F sbci r21,hi8(-(1))
729 04c0 5093 0000 sts (NeutralAccZ)+1,r21
730 04c4 4093 0000 sts NeutralAccZ,r20
731 04c8 8456 subi r24,lo8(-(-100))
732 04ca 00C0 rjmp .L122
733 .L72:
734 04cc 8091 0000 lds r24,AdWertAccHoch
735 04d0 9091 0000 lds r25,(AdWertAccHoch)+1
736 04d4 8F5F subi r24,lo8(-1)
737 04d6 9F4F sbci r25,hi8(-1)
738 04d8 04F4 brge .L76
739 04da 72E0 ldi r23,hi8(551)
740 04dc 4732 cpi r20,lo8(551)
741 04de 5707 cpc r21,r23
742 04e0 04F0 brlt .L76
743 04e2 2091 0000 lds r18,subcount.2
744 04e6 2550 subi r18,lo8(-(-5))
745 04e8 2093 0000 sts subcount.2,r18
746 04ec 2B5F subi r18,lo8(-(5))
747 04ee 8091 0000 lds r24,modell_fliegt
748 04f2 9091 0000 lds r25,(modell_fliegt)+1
749 04f6 845F subi r24,lo8(500)
750 04f8 9140 sbci r25,hi8(500)
751 04fa 00F4 brsh .L79
752 04fc 2F50 subi r18,lo8(-(-15))
753 04fe 2093 0000 sts subcount.2,r18
754 .L79:
755 0502 8091 0000 lds r24,subcount.2
756 0506 8C39 cpi r24,lo8(-100)
757 0508 04F4 brge .L76
758 050a 4150 subi r20,lo8(-(-1))
759 050c 5040 sbci r21,hi8(-(-1))
760 050e 5093 0000 sts (NeutralAccZ)+1,r21
761 0512 4093 0000 sts NeutralAccZ,r20
762 0516 8C59 subi r24,lo8(-(100))
763 .L122:
764 0518 8093 0000 sts subcount.2,r24
765 .L76:
766 051c 8091 7800 lds r24,120
767 0520 9091 7900 lds r25,(120)+1
768 0524 9093 0000 sts (Aktuell_az)+1,r25
769 0528 8093 0000 sts Aktuell_az,r24
770 052c 8091 0000 lds r24,AdWertAccHoch
771 0530 9091 0000 lds r25,(AdWertAccHoch)+1
772 0534 9C01 movw r18,r24
773 0536 4427 clr r20
774 0538 37FD sbrc r19,7
775 053a 4095 com r20
776 053c 542F mov r21,r20
777 053e 8091 0000 lds r24,Mess_Integral_Hoch
778 0542 9091 0000 lds r25,(Mess_Integral_Hoch)+1
779 0546 A091 0000 lds r26,(Mess_Integral_Hoch)+2
780 054a B091 0000 lds r27,(Mess_Integral_Hoch)+3
781 054e 820F add r24,r18
782 0550 931F adc r25,r19
783 0552 A41F adc r26,r20
784 0554 B51F adc r27,r21
785 0556 8093 0000 sts Mess_Integral_Hoch,r24
786 055a 9093 0000 sts (Mess_Integral_Hoch)+1,r25
787 055e A093 0000 sts (Mess_Integral_Hoch)+2,r26
788 0562 B093 0000 sts (Mess_Integral_Hoch)+3,r27
789 0566 2091 0000 lds r18,Mess_Integral_Hoch
790 056a 3091 0000 lds r19,(Mess_Integral_Hoch)+1
791 056e 4091 0000 lds r20,(Mess_Integral_Hoch)+2
792 0572 5091 0000 lds r21,(Mess_Integral_Hoch)+3
793 0576 57FF sbrs r21,7
794 0578 00C0 rjmp .L81
795 057a 2150 subi r18,lo8(-(1023))
796 057c 3C4F sbci r19,hi8(-(1023))
797 057e 4F4F sbci r20,hlo8(-(1023))
798 0580 5F4F sbci r21,hhi8(-(1023))
799 .L81:
800 0582 6AE0 ldi r22,10
801 0584 5595 1: asr r21
802 0586 4795 ror r20
803 0588 3795 ror r19
804 058a 2795 ror r18
805 058c 6A95 dec r22
806 058e 01F4 brne 1b
807 0590 8091 0000 lds r24,Mess_Integral_Hoch
808 0594 9091 0000 lds r25,(Mess_Integral_Hoch)+1
809 0598 A091 0000 lds r26,(Mess_Integral_Hoch)+2
810 059c B091 0000 lds r27,(Mess_Integral_Hoch)+3
811 05a0 821B sub r24,r18
812 05a2 930B sbc r25,r19
813 05a4 A40B sbc r26,r20
814 05a6 B50B sbc r27,r21
815 05a8 8093 0000 sts Mess_Integral_Hoch,r24
816 05ac 9093 0000 sts (Mess_Integral_Hoch)+1,r25
817 05b0 A093 0000 sts (Mess_Integral_Hoch)+2,r26
818 05b4 B093 0000 sts (Mess_Integral_Hoch)+3,r27
819 05b8 00C0 rjmp .L133
820 .L83:
821 05ba 8091 0000 lds r24,roll1.4
822 05be 9091 0000 lds r25,(roll1.4)+1
823 05c2 2091 7800 lds r18,120
824 05c6 3091 7900 lds r19,(120)+1
825 05ca 820F add r24,r18
826 05cc 931F adc r25,r19
827 .L129:
828 05ce 9093 0000 sts (roll1.4)+1,r25
829 05d2 8093 0000 sts roll1.4,r24
830 05d6 1092 0000 sts kanal.0,__zero_reg__
831 05da 00C0 rjmp .L60
832 .L84:
833 05dc 8091 0000 lds r24,PlatinenVersion
834 05e0 8A30 cpi r24,lo8(10)
835 05e2 01F4 brne .L85
836 05e4 8091 7800 lds r24,120
837 05e8 9091 7900 lds r25,(120)+1
838 05ec 2091 0000 lds r18,gier1.3
839 05f0 3091 0000 lds r19,(gier1.3)+1
840 05f4 820F add r24,r18
841 05f6 931F adc r25,r19
842 05f8 0196 adiw r24,1
843 05fa 9695 lsr r25
844 05fc 8795 ror r24
845 05fe 00C0 rjmp .L123
846 .L85:
847 0600 4091 0000 lds r20,gier1.3
848 0604 5091 0000 lds r21,(gier1.3)+1
849 0608 8431 cpi r24,lo8(20)
850 060a 00F0 brlo .L87
851 060c 2091 7800 lds r18,120
852 0610 3091 7900 lds r19,(120)+1
853 0614 240F add r18,r20
854 0616 351F adc r19,r21
855 0618 8FEF ldi r24,lo8(2047)
856 061a 97E0 ldi r25,hi8(2047)
857 061c 821B sub r24,r18
858 061e 930B sbc r25,r19
859 0620 00C0 rjmp .L123
860 .L87:
861 0622 8091 7800 lds r24,120
862 0626 9091 7900 lds r25,(120)+1
863 062a 840F add r24,r20
864 062c 951F adc r25,r21
865 .L123:
866 062e 9093 0000 sts (AdWertGier)+1,r25
867 0632 8093 0000 sts AdWertGier,r24
868 .L131:
869 0636 86E0 ldi r24,lo8(6)
870 0638 00C0 rjmp .L128
871 .L89:
872 063a 8091 0000 lds r24,NeutralAccY
873 063e 9091 0000 lds r25,(NeutralAccY)+1
874 0642 2091 7800 lds r18,120
875 0646 3091 7900 lds r19,(120)+1
876 064a 821B sub r24,r18
877 064c 930B sbc r25,r19
878 064e 9093 0000 sts (Aktuell_ay)+1,r25
879 0652 8093 0000 sts Aktuell_ay,r24
880 0656 8091 0000 lds r24,Aktuell_ay
881 065a 9091 0000 lds r25,(Aktuell_ay)+1
882 065e 2091 0000 lds r18,accy.8
883 0662 3091 0000 lds r19,(accy.8)+1
884 0666 820F add r24,r18
885 0668 931F adc r25,r19
886 066a 9093 0000 sts (AdWertAccRoll)+1,r25
887 066e 8093 0000 sts AdWertAccRoll,r24
888 .L132:
889 0672 87E0 ldi r24,lo8(7)
890 0674 00C0 rjmp .L128
891 .L90:
892 0676 8091 7800 lds r24,120
893 067a 9091 7900 lds r25,(120)+1
894 067e 2091 0000 lds r18,NeutralAccX
895 0682 3091 0000 lds r19,(NeutralAccX)+1
896 0686 821B sub r24,r18
897 0688 930B sbc r25,r19
898 068a 9093 0000 sts (Aktuell_ax)+1,r25
899 068e 8093 0000 sts Aktuell_ax,r24
900 0692 8091 0000 lds r24,Aktuell_ax
901 0696 9091 0000 lds r25,(Aktuell_ax)+1
902 069a 2091 0000 lds r18,accx.9
903 069e 3091 0000 lds r19,(accx.9)+1
904 06a2 820F add r24,r18
905 06a4 931F adc r25,r19
906 06a6 9093 0000 sts (AdWertAccNick)+1,r25
907 06aa 8093 0000 sts AdWertAccNick,r24
908 06ae 00C0 rjmp .L127
909 .L91:
910 06b0 2091 0000 lds r18,nick1.5
911 06b4 3091 0000 lds r19,(nick1.5)+1
912 06b8 8091 7800 lds r24,120
913 06bc 9091 7900 lds r25,(120)+1
914 06c0 280F add r18,r24
915 06c2 391F adc r19,r25
916 06c4 3093 0000 sts (nick1.5)+1,r19
917 06c8 2093 0000 sts nick1.5,r18
918 06cc 8091 0000 lds r24,PlatinenVersion
919 06d0 8A30 cpi r24,lo8(10)
920 06d2 01F4 brne .L92
921 06d4 220F add r18,r18
922 06d6 331F adc r19,r19
923 06d8 00C0 rjmp .L124
924 .L92:
925 06da 220F lsl r18
926 06dc 331F rol r19
927 06de 220F lsl r18
928 06e0 331F rol r19
929 .L124:
930 06e2 3093 0000 sts (nick1.5)+1,r19
931 06e6 2093 0000 sts nick1.5,r18
932 06ea 2091 0000 lds r18,nick1.5
933 06ee 3091 0000 lds r19,(nick1.5)+1
934 06f2 C901 movw r24,r18
935 06f4 37FD sbrc r19,7
936 06f6 0796 adiw r24,7
937 .L94:
938 06f8 03E0 ldi r16,3
939 06fa 9595 1: asr r25
940 06fc 8795 ror r24
941 06fe 0A95 dec r16
942 0700 01F4 brne 1b
943 0702 9093 0000 sts (AdWertNick)+1,r25
944 0706 8093 0000 sts AdWertNick,r24
945 070a 8091 0000 lds r24,nick_filter.6
946 070e 9091 0000 lds r25,(nick_filter.6)+1
947 0712 820F add r24,r18
948 0714 931F adc r25,r19
949 0716 97FD sbrc r25,7
950 0718 0196 adiw r24,1
951 .L95:
952 071a 9595 asr r25
953 071c 8795 ror r24
954 071e 9093 0000 sts (nick_filter.6)+1,r25
955 0722 8093 0000 sts nick_filter.6,r24
956 0726 2091 0000 lds r18,AdNeutralNick
957 072a 3091 0000 lds r19,(AdNeutralNick)+1
958 072e 821B sub r24,r18
959 0730 930B sbc r25,r19
960 0732 9093 0000 sts (HiResNick)+1,r25
961 0736 8093 0000 sts HiResNick,r24
962 073a 2091 0000 lds r18,AdWertNickFilter
963 073e 3091 0000 lds r19,(AdWertNickFilter)+1
964 0742 8091 0000 lds r24,HiResNick
965 0746 9091 0000 lds r25,(HiResNick)+1
966 074a 280F add r18,r24
967 074c 391F adc r19,r25
968 074e 37FF sbrs r19,7
969 0750 00C0 rjmp .L96
970 0752 2F5F subi r18,lo8(-(1))
971 0754 3F4F sbci r19,hi8(-(1))
972 .L96:
973 0756 3595 asr r19
974 0758 2795 ror r18
975 075a 3093 0000 sts (AdWertNickFilter)+1,r19
976 075e 2093 0000 sts AdWertNickFilter,r18
977 0762 00C0 rjmp .L134
978 .L97:
979 0764 2091 0000 lds r18,roll1.4
980 0768 3091 0000 lds r19,(roll1.4)+1
981 076c 8091 7800 lds r24,120
982 0770 9091 7900 lds r25,(120)+1
983 0774 280F add r18,r24
984 0776 391F adc r19,r25
985 0778 3093 0000 sts (roll1.4)+1,r19
986 077c 2093 0000 sts roll1.4,r18
987 0780 8091 0000 lds r24,PlatinenVersion
988 0784 8A30 cpi r24,lo8(10)
989 0786 01F4 brne .L98
990 0788 220F add r18,r18
991 078a 331F adc r19,r19
992 078c 00C0 rjmp .L125
993 .L98:
994 078e 220F lsl r18
995 0790 331F rol r19
996 0792 220F lsl r18
997 0794 331F rol r19
998 .L125:
999 0796 3093 0000 sts (roll1.4)+1,r19
1000 079a 2093 0000 sts roll1.4,r18
1001 079e 2091 0000 lds r18,roll1.4
1002 07a2 3091 0000 lds r19,(roll1.4)+1
1003 07a6 C901 movw r24,r18
1004 07a8 37FD sbrc r19,7
1005 07aa 0796 adiw r24,7
1006 .L100:
1007 07ac F3E0 ldi r31,3
1008 07ae 9595 1: asr r25
1009 07b0 8795 ror r24
1010 07b2 FA95 dec r31
1011 07b4 01F4 brne 1b
1012 07b6 9093 0000 sts (AdWertRoll)+1,r25
1013 07ba 8093 0000 sts AdWertRoll,r24
1014 07be 8091 0000 lds r24,roll_filter.7
1015 07c2 9091 0000 lds r25,(roll_filter.7)+1
1016 07c6 820F add r24,r18
1017 07c8 931F adc r25,r19
1018 07ca 97FD sbrc r25,7
1019 07cc 0196 adiw r24,1
1020 .L101:
1021 07ce 9595 asr r25
1022 07d0 8795 ror r24
1023 07d2 9093 0000 sts (roll_filter.7)+1,r25
1024 07d6 8093 0000 sts roll_filter.7,r24
1025 07da 2091 0000 lds r18,AdNeutralRoll
1026 07de 3091 0000 lds r19,(AdNeutralRoll)+1
1027 07e2 821B sub r24,r18
1028 07e4 930B sbc r25,r19
1029 07e6 9093 0000 sts (HiResRoll)+1,r25
1030 07ea 8093 0000 sts HiResRoll,r24
1031 07ee 2091 0000 lds r18,AdWertRollFilter
1032 07f2 3091 0000 lds r19,(AdWertRollFilter)+1
1033 07f6 8091 0000 lds r24,HiResRoll
1034 07fa 9091 0000 lds r25,(HiResRoll)+1
1035 07fe 280F add r18,r24
1036 0800 391F adc r19,r25
1037 0802 37FF sbrs r19,7
1038 0804 00C0 rjmp .L102
1039 0806 2F5F subi r18,lo8(-(1))
1040 0808 3F4F sbci r19,hi8(-(1))
1041 .L102:
1042 080a 3595 asr r19
1043 080c 2795 ror r18
1044 080e 3093 0000 sts (AdWertRollFilter)+1,r19
1045 0812 2093 0000 sts AdWertRollFilter,r18
1046 .L133:
1047 0816 83E0 ldi r24,lo8(3)
1048 0818 00C0 rjmp .L128
1049 .L103:
1050 081a 1092 0000 sts state.1,__zero_reg__
1051 081e 81E0 ldi r24,lo8(1)
1052 0820 8093 0000 sts AdReady,r24
1053 0824 8091 0000 lds r24,ZaehlMessungen
1054 0828 9091 0000 lds r25,(ZaehlMessungen)+1
1055 082c 0196 adiw r24,1
1056 082e 9093 0000 sts (ZaehlMessungen)+1,r25
1057 0832 8093 0000 sts ZaehlMessungen,r24
1058 .L104:
1059 0836 8091 7800 lds r24,120
1060 083a 9091 7900 lds r25,(120)+1
1061 083e 9093 0000 sts (MessLuftdruck)+1,r25
1062 0842 8093 0000 sts MessLuftdruck,r24
1063 0846 8091 0000 lds r24,MessLuftdruck
1064 084a 9091 0000 lds r25,(MessLuftdruck)+1
1065 084e AA27 clr r26
1066 0850 BB27 clr r27
1067 0852 2091 0000 lds r18,tmpLuftdruck.10
1068 0856 3091 0000 lds r19,(tmpLuftdruck.10)+1
1069 085a 4091 0000 lds r20,(tmpLuftdruck.10)+2
1070 085e 5091 0000 lds r21,(tmpLuftdruck.10)+3
1071 0862 280F add r18,r24
1072 0864 391F adc r19,r25
1073 0866 4A1F adc r20,r26
1074 0868 5B1F adc r21,r27
1075 086a 2093 0000 sts tmpLuftdruck.10,r18
1076 086e 3093 0000 sts (tmpLuftdruck.10)+1,r19
1077 0872 4093 0000 sts (tmpLuftdruck.10)+2,r20
1078 0876 5093 0000 sts (tmpLuftdruck.10)+3,r21
1079 087a 8091 0000 lds r24,messanzahl_Druck.11
1080 087e 8F5F subi r24,lo8(-(1))
1081 0880 8093 0000 sts messanzahl_Druck.11,r24
1082 0884 8031 cpi r24,lo8(16)
1083 0886 00F4 brsh .+2
1084 0888 00C0 rjmp .L127
1085 088a 8091 0000 lds r24,Luftdruck
1086 088e 9091 0000 lds r25,(Luftdruck)+1
1087 0892 A091 0000 lds r26,(Luftdruck)+2
1088 0896 B091 0000 lds r27,(Luftdruck)+3
1089 089a 7C01 movw r14,r24
1090 089c 8D01 movw r16,r26
1091 089e 63E0 ldi r22,3
1092 08a0 EE0C 1: lsl r14
1093 08a2 FF1C rol r15
1094 08a4 001F rol r16
1095 08a6 111F rol r17
1096 08a8 6A95 dec r22
1097 08aa 01F4 brne 1b
1098 08ac E81A sub r14,r24
1099 08ae F90A sbc r15,r25
1100 08b0 0A0B sbc r16,r26
1101 08b2 1B0B sbc r17,r27
1102 08b4 E20E add r14,r18
1103 08b6 F31E adc r15,r19
1104 08b8 041F adc r16,r20
1105 08ba 151F adc r17,r21
1106 08bc 8091 0000 lds r24,ExpandBaro
1107 08c0 9927 clr r25
1108 08c2 87FD sbrc r24,7
1109 08c4 9095 com r25
1110 08c6 A92F mov r26,r25
1111 08c8 B92F mov r27,r25
1112 08ca BC01 movw r22,r24
1113 08cc CD01 movw r24,r26
1114 08ce 20EB ldi r18,lo8(8368)
1115 08d0 30E2 ldi r19,hi8(8368)
1116 08d2 40E0 ldi r20,hlo8(8368)
1117 08d4 50E0 ldi r21,hhi8(8368)
1118 08d6 0E94 0000 call __mulsi3
1119 08da DC01 movw r26,r24
1120 08dc CB01 movw r24,r22
1121 08de E81A sub r14,r24
1122 08e0 F90A sbc r15,r25
1123 08e2 0A0B sbc r16,r26
1124 08e4 1B0B sbc r17,r27
1125 08e6 D801 movw r26,r16
1126 08e8 C701 movw r24,r14
1127 08ea 0496 adiw r24,4
1128 08ec A11D adc r26,__zero_reg__
1129 08ee B11D adc r27,__zero_reg__
1130 08f0 B7FF sbrs r27,7
1131 08f2 00C0 rjmp .L106
1132 08f4 D801 movw r26,r16
1133 08f6 C701 movw r24,r14
1134 08f8 0B96 adiw r24,11
1135 08fa A11D adc r26,__zero_reg__
1136 08fc B11D adc r27,__zero_reg__
1137 .L106:
1138 08fe 23E0 ldi r18,3
1139 0900 B595 1: asr r27
1140 0902 A795 ror r26
1141 0904 9795 ror r25
1142 0906 8795 ror r24
1143 0908 2A95 dec r18
1144 090a 01F4 brne 1b
1145 090c 8093 0000 sts Luftdruck,r24
1146 0910 9093 0000 sts (Luftdruck)+1,r25
1147 0914 A093 0000 sts (Luftdruck)+2,r26
1148 0918 B093 0000 sts (Luftdruck)+3,r27
1149 091c 8091 0000 lds r24,StartLuftdruck
1150 0920 9091 0000 lds r25,(StartLuftdruck)+1
1151 0924 7C01 movw r14,r24
1152 0926 0027 clr r16
1153 0928 F7FC sbrc r15,7
1154 092a 0095 com r16
1155 092c 102F mov r17,r16
1156 092e 8091 0000 lds r24,Luftdruck
1157 0932 9091 0000 lds r25,(Luftdruck)+1
1158 0936 A091 0000 lds r26,(Luftdruck)+2
1159 093a B091 0000 lds r27,(Luftdruck)+3
1160 093e E81A sub r14,r24
1161 0940 F90A sbc r15,r25
1162 0942 0A0B sbc r16,r26
1163 0944 1B0B sbc r17,r27
1164 0946 E092 0000 sts HoehenWert,r14
1165 094a F092 0000 sts (HoehenWert)+1,r15
1166 094e 0093 0000 sts (HoehenWert)+2,r16
1167 0952 1093 0000 sts (HoehenWert)+3,r17
1168 0956 2091 0000 lds r18,SummenHoehe
1169 095a 3091 0000 lds r19,(SummenHoehe)+1
1170 095e 4091 0000 lds r20,(SummenHoehe)+2
1171 0962 5091 0000 lds r21,(SummenHoehe)+3
1172 0966 57FF sbrs r21,7
1173 0968 00C0 rjmp .L107
1174 096a 215F subi r18,lo8(-(15))
1175 096c 3F4F sbci r19,hi8(-(15))
1176 096e 4F4F sbci r20,hlo8(-(15))
1177 0970 5F4F sbci r21,hhi8(-(15))
1178 .L107:
1179 0972 84E0 ldi r24,4
1180 0974 5595 1: asr r21
1181 0976 4795 ror r20
1182 0978 3795 ror r19
1183 097a 2795 ror r18
1184 097c 8A95 dec r24
1185 097e 01F4 brne 1b
1186 0980 8091 0000 lds r24,SummenHoehe
1187 0984 9091 0000 lds r25,(SummenHoehe)+1
1188 0988 A091 0000 lds r26,(SummenHoehe)+2
1189 098c B091 0000 lds r27,(SummenHoehe)+3
1190 0990 821B sub r24,r18
1191 0992 930B sbc r25,r19
1192 0994 A40B sbc r26,r20
1193 0996 B50B sbc r27,r21
1194 0998 8093 0000 sts SummenHoehe,r24
1195 099c 9093 0000 sts (SummenHoehe)+1,r25
1196 09a0 A093 0000 sts (SummenHoehe)+2,r26
1197 09a4 B093 0000 sts (SummenHoehe)+3,r27
1198 09a8 8091 0000 lds r24,SummenHoehe
1199 09ac 9091 0000 lds r25,(SummenHoehe)+1
1200 09b0 A091 0000 lds r26,(SummenHoehe)+2
1201 09b4 B091 0000 lds r27,(SummenHoehe)+3
1202 09b8 8E0D add r24,r14
1203 09ba 9F1D adc r25,r15
1204 09bc A01F adc r26,r16
1205 09be B11F adc r27,r17
1206 09c0 8093 0000 sts SummenHoehe,r24
1207 09c4 9093 0000 sts (SummenHoehe)+1,r25
1208 09c8 A093 0000 sts (SummenHoehe)+2,r26
1209 09cc B093 0000 sts (SummenHoehe)+3,r27
1210 09d0 8091 0000 lds r24,SummenHoehe
1211 09d4 9091 0000 lds r25,(SummenHoehe)+1
1212 09d8 A091 0000 lds r26,(SummenHoehe)+2
1213 09dc B091 0000 lds r27,(SummenHoehe)+3
1214 09e0 B7FF sbrs r27,7
1215 09e2 00C0 rjmp .L108
1216 09e4 0F96 adiw r24,15
1217 09e6 A11D adc r26,__zero_reg__
1218 09e8 B11D adc r27,__zero_reg__
1219 .L108:
1220 09ea 14E0 ldi r17,4
1221 09ec B595 1: asr r27
1222 09ee A795 ror r26
1223 09f0 9795 ror r25
1224 09f2 8795 ror r24
1225 09f4 1A95 dec r17
1226 09f6 01F4 brne 1b
1227 09f8 2091 0000 lds r18,HoehenWert
1228 09fc 3091 0000 lds r19,(HoehenWert)+1
1229 0a00 281B sub r18,r24
1230 0a02 390B sbc r19,r25
1231 0a04 64E0 ldi r22,hi8(1025)
1232 0a06 2130 cpi r18,lo8(1025)
1233 0a08 3607 cpc r19,r22
1234 0a0a 04F0 brlt .L109
1235 0a0c 20E0 ldi r18,lo8(1024)
1236 0a0e 34E0 ldi r19,hi8(1024)
1237 0a10 00C0 rjmp .L110
1238 .L109:
1239 0a12 7CEF ldi r23,hi8(-1024)
1240 0a14 2030 cpi r18,lo8(-1024)
1241 0a16 3707 cpc r19,r23
1242 0a18 04F4 brge .L110
1243 0a1a 20E0 ldi r18,lo8(-1024)
1244 0a1c 3CEF ldi r19,hi8(-1024)
1245 .L110:
1246 0a1e 8091 0000 lds r24,VarioMeter
1247 0a22 9091 0000 lds r25,(VarioMeter)+1
1248 0a26 8091 0000 lds r24,VarioMeter
1249 0a2a 9091 0000 lds r25,(VarioMeter)+1
1250 0a2e 97FF sbrs r25,7
1251 0a30 00C0 rjmp .L113
1252 0a32 9095 com r25
1253 0a34 8195 neg r24
1254 0a36 9F4F sbci r25,lo8(-1)
1255 .L113:
1256 0a38 A901 movw r20,r18
1257 0a3a F3E0 ldi r31,3
1258 0a3c 440F 1: lsl r20
1259 0a3e 551F rol r21
1260 0a40 FA95 dec r31
1261 0a42 01F4 brne 1b
1262 0a44 8D5B subi r24,lo8(701)
1263 0a46 9240 sbci r25,hi8(701)
1264 0a48 04F0 brlt .L112
1265 0a4a 8091 0000 lds r24,VarioMeter
1266 0a4e 9091 0000 lds r25,(VarioMeter)+1
1267 0a52 9C01 movw r18,r24
1268 0a54 E4E0 ldi r30,4
1269 0a56 220F 1: lsl r18
1270 0a58 331F rol r19
1271 0a5a EA95 dec r30
1272 0a5c 01F4 brne 1b
1273 0a5e 281B sub r18,r24
1274 0a60 390B sbc r19,r25
1275 0a62 240F add r18,r20
1276 0a64 351F adc r19,r21
1277 0a66 37FF sbrs r19,7
1278 0a68 00C0 rjmp .L114
1279 0a6a 215F subi r18,lo8(-(15))
1280 0a6c 3F4F sbci r19,hi8(-(15))
1281 .L114:
1282 0a6e 74E0 ldi r23,4
1283 0a70 3595 1: asr r19
1284 0a72 2795 ror r18
1285 0a74 7A95 dec r23
1286 0a76 01F4 brne 1b
1287 0a78 00C0 rjmp .L126
1288 .L112:
1289 0a7a 8091 0000 lds r24,VarioMeter
1290 0a7e 9091 0000 lds r25,(VarioMeter)+1
1291 0a82 9C01 movw r18,r24
1292 0a84 65E0 ldi r22,5
1293 0a86 220F 1: lsl r18
1294 0a88 331F rol r19
1295 0a8a 6A95 dec r22
1296 0a8c 01F4 brne 1b
1297 0a8e 281B sub r18,r24
1298 0a90 390B sbc r19,r25
1299 0a92 240F add r18,r20
1300 0a94 351F adc r19,r21
1301 0a96 37FF sbrs r19,7
1302 0a98 00C0 rjmp .L116
1303 0a9a 215E subi r18,lo8(-(31))
1304 0a9c 3F4F sbci r19,hi8(-(31))
1305 .L116:
1306 0a9e 45E0 ldi r20,5
1307 0aa0 3595 1: asr r19
1308 0aa2 2795 ror r18
1309 0aa4 4A95 dec r20
1310 0aa6 01F4 brne 1b
1311 .L126:
1312 0aa8 3093 0000 sts (VarioMeter)+1,r19
1313 0aac 2093 0000 sts VarioMeter,r18
1314 0ab0 8091 0000 lds r24,tmpLuftdruck.10
1315 0ab4 9091 0000 lds r25,(tmpLuftdruck.10)+1
1316 0ab8 A091 0000 lds r26,(tmpLuftdruck.10)+2
1317 0abc B091 0000 lds r27,(tmpLuftdruck.10)+3
1318 0ac0 B7FF sbrs r27,7
1319 0ac2 00C0 rjmp .L117
1320 0ac4 0196 adiw r24,1
1321 0ac6 A11D adc r26,__zero_reg__
1322 0ac8 B11D adc r27,__zero_reg__
1323 .L117:
1324 0aca B595 asr r27
1325 0acc A795 ror r26
1326 0ace 9795 ror r25
1327 0ad0 8795 ror r24
1328 0ad2 8093 0000 sts tmpLuftdruck.10,r24
1329 0ad6 9093 0000 sts (tmpLuftdruck.10)+1,r25
1330 0ada A093 0000 sts (tmpLuftdruck.10)+2,r26
1331 0ade B093 0000 sts (tmpLuftdruck.10)+3,r27
1332 0ae2 88E0 ldi r24,lo8(8)
1333 0ae4 8093 0000 sts messanzahl_Druck.11,r24
1334 0ae8 00C0 rjmp .L127
1335 .L118:
1336 0aea 1092 0000 sts state.1,__zero_reg__
1337 .L127:
1338 0aee 82E0 ldi r24,lo8(2)
1339 .L128:
1340 0af0 8093 0000 sts kanal.0,r24
1341 .L60:
1342 0af4 8091 0000 lds r24,kanal.0
1343 0af8 8093 7C00 sts 124,r24
1344 0afc 8091 0000 lds r24,state.1
1345 0b00 8823 tst r24
1346 0b02 01F0 breq .L59
1347 0b04 8FEC ldi r24,lo8(-49)
1348 0b06 8093 7A00 sts 122,r24
1349 .L59:
1350 /* epilogue: frame size=0 */
1351 0b0a FF91 pop r31
1352 0b0c EF91 pop r30
1353 0b0e BF91 pop r27
1354 0b10 AF91 pop r26
1355 0b12 9F91 pop r25
1356 0b14 8F91 pop r24
1357 0b16 7F91 pop r23
1358 0b18 6F91 pop r22
1359 0b1a 5F91 pop r21
1360 0b1c 4F91 pop r20
1361 0b1e 3F91 pop r19
1362 0b20 2F91 pop r18
1363 0b22 1F91 pop r17
1364 0b24 0F91 pop r16
1365 0b26 FF90 pop r15
1366 0b28 EF90 pop r14
1367 0b2a 0F90 pop __tmp_reg__
1368 0b2c 0FBE out __SREG__,__tmp_reg__
1369 0b2e 0F90 pop __tmp_reg__
1370 0b30 1F90 pop __zero_reg__
1371 0b32 1895 reti
1372 /* epilogue end (size=21) */
1373 /* function __vector_24 size 1094 (1052) */
1375 .comm Aktuell_Nick,2,1
1376 .comm Aktuell_Roll,2,1
1377 .comm Aktuell_Gier,2,1
1378 .comm Aktuell_ax,2,1
1379 .comm Aktuell_ay,2,1
1380 .comm Aktuell_az,2,1
1381 .comm DruckOffsetSetting,1,1
1382 .comm StartLuftdruck,2,1
1383 /* File "analog.c": code 1471 = 0x05bf (1414), prologues 27, epilogues 30 */
DEFINED SYMBOLS
*ABS*:00000000 analog.c
C:\Temp/ccYV0crO.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccYV0crO.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccYV0crO.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccYV0crO.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccYV0crO.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccYV0crO.s:14 .data:00000000 AdReady
C:\Temp/ccYV0crO.s:19 .data:00000001 AnalogOffsetGier
C:\Temp/ccYV0crO.s:24 .data:00000002 AnalogOffsetRoll
C:\Temp/ccYV0crO.s:29 .data:00000003 AnalogOffsetNick
C:\Temp/ccYV0crO.s:36 .bss:00000000 ZaehlMessungen
C:\Temp/ccYV0crO.s:42 .bss:00000002 VarioMeter
C:\Temp/ccYV0crO.s:48 .bss:00000004 ExpandBaro
C:\Temp/ccYV0crO.s:54 .data:00000004 MessLuftdruck
C:\Temp/ccYV0crO.s:61 .bss:00000005 SummenHoehe
C:\Temp/ccYV0crO.s:67 .data:00000006 Luftdruck
C:\Temp/ccYV0crO.s:74 .bss:00000009 AdWertAccHoch
C:\Temp/ccYV0crO.s:80 .bss:0000000b AdWertAccNick
C:\Temp/ccYV0crO.s:86 .bss:0000000d AdWertAccRoll
C:\Temp/ccYV0crO.s:92 .bss:0000000f AdWertGier
C:\Temp/ccYV0crO.s:98 .bss:00000011 AdWertRoll
C:\Temp/ccYV0crO.s:104 .bss:00000013 AdWertNick
C:\Temp/ccYV0crO.s:110 .data:0000000a HiResRoll
C:\Temp/ccYV0crO.s:115 .data:0000000c HiResNick
C:\Temp/ccYV0crO.s:122 .bss:00000015 AdWertGierFilter
C:\Temp/ccYV0crO.s:128 .bss:00000017 AdWertRollFilter
C:\Temp/ccYV0crO.s:134 .bss:00000019 AdWertNickFilter
C:\Temp/ccYV0crO.s:140 .data:0000000e UBat
C:\Temp/ccYV0crO.s:145 .text:00000000 ADC_Init
C:\Temp/ccYV0crO.s:159 .progmem.data:00000000 __c.13
C:\Temp/ccYV0crO.s:163 .progmem.data:00000002 __c.14
C:\Temp/ccYV0crO.s:168 .text:0000000c SucheLuftruckOffset
*COM*:00000001 DruckOffsetSetting
C:\Temp/ccYV0crO.s:295 .progmem.data:00000004 __c.12
C:\Temp/ccYV0crO.s:300 .text:00000110 SucheGyroOffset
.bss:0000001b kanal.0
C:\Temp/ccYV0crO.s:503 .bss:0000001c state.1
C:\Temp/ccYV0crO.s:504 .bss:0000001d subcount.2
C:\Temp/ccYV0crO.s:505 .bss:0000001e gier1.3
C:\Temp/ccYV0crO.s:506 .bss:00000020 roll1.4
C:\Temp/ccYV0crO.s:507 .bss:00000022 nick1.5
C:\Temp/ccYV0crO.s:508 .bss:00000024 nick_filter.6
C:\Temp/ccYV0crO.s:509 .bss:00000026 roll_filter.7
C:\Temp/ccYV0crO.s:510 .bss:00000028 accy.8
C:\Temp/ccYV0crO.s:511 .bss:0000002a accx.9
C:\Temp/ccYV0crO.s:512 .bss:0000002c tmpLuftdruck.10
C:\Temp/ccYV0crO.s:513 .bss:00000030 messanzahl_Druck.11
C:\Temp/ccYV0crO.s:517 .text:000002de __vector_24
*COM*:00000002 Aktuell_ay
*COM*:00000002 Aktuell_ax
*COM*:00000002 Aktuell_az
*COM*:00000002 StartLuftdruck
*COM*:00000002 Aktuell_Nick
*COM*:00000002 Aktuell_Roll
*COM*:00000002 Aktuell_Gier
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
GetParamByte
Delay_ms_Mess
uart_putchar
_printf_P
SetParamByte
EE_Parameter
VersionInfo
SetDelay
twi_state
BLFlags
CheckDelay
__tablejump2__
NeutralAccY
NeutralAccX
__udivmodhi4
NeutralAccZ
modell_fliegt
Mess_Integral_Hoch
PlatinenVersion
AdNeutralNick
AdNeutralRoll
__mulsi3
HoehenWert
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/capacity.c
0,0 → 1,144
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "capacity.h"
#include "twimaster.h"
#include "main.h"
#include "timer0.h"
#include "analog.h"
 
#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms
#define FC_OFFSET_CURRENT 5 // calculate with a current of 0.5A
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A
 
// global varialbles
unsigned short update_timer = 0;
Capacity_t Capacity;
 
// initialize capacity calculation
void Capacity_Init(void)
{
Capacity.ActualCurrent = 0;
Capacity.UsedCapacity = 0;
Capacity.ActualPower = 0;
Capacity.MinOfMaxPWM = 0;
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL);
}
 
 
// called in main loop at a regular interval
void Capacity_Update(void)
{
unsigned short Current, SetSum; // max value will be 255 * 12 = 3060
static unsigned short SubCounter = 0;
static unsigned short CurrentOffset = 0;
static unsigned long SumCurrentOffset = 0;
unsigned char i, NumOfMotors, MinOfMaxPWM;
 
if(CheckDelay(update_timer))
{
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks
// determine sum of all present BL currents and setpoints
Current = 0;
SetSum = 0;
NumOfMotors = 0;
MinOfMaxPWM = 255;
for(i = 0; i < MAX_MOTORS; i++)
{
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK)
{
NumOfMotors++;
Current += (unsigned int)(Motor[i].Current);
SetSum += (unsigned int)(Motor[i].SetPoint);
if(Motor[i].MaxPWM < MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM;
}
}
Capacity.MinOfMaxPWM = MinOfMaxPWM;
 
if(SetSum == 0) // if all setpoints are 0
{ // determine offsets of motor currents
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE);
SumCurrentOffset -= CurrentOffset;
SumCurrentOffset += Current;
// after averaging set current to static offset
Current = FC_OFFSET_CURRENT;
}
else // some motors are running, includes also motor test condition, where "MotorRunning" is false
{ // subtract offset
if(Current > CurrentOffset) Current -= CurrentOffset;
else Current = 0;
// add the FC and BL Offsets
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT;
}
 
// update actual Current
Capacity.ActualCurrent = Current;
// update actual Power
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W
 
// update used capacity
SubCounter += Current;
 
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL)
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL)
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL)
if(SubCounter > SUB_COUNTER_LIMIT)
{
Capacity.UsedCapacity++; // we have one mAh more
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part
}
} // EOF check delay update timer
}
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/capacity.h
0,0 → 1,18
#ifndef _CAPACITY_H
#define _CAPACITY_H
 
typedef struct
{
unsigned short ActualCurrent; // in 0.1A Steps
unsigned short ActualPower; // in 0.1W
unsigned short UsedCapacity; // in mAh
unsigned char MinOfMaxPWM; // BL Power Limit
} __attribute__((packed)) Capacity_t;
 
extern Capacity_t Capacity;
 
void Capacity_Init(void);
void Capacity_Update(void);
 
#endif //_CAPACITY_H
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/capacity.lst
0,0 → 1,229
1 .file "capacity.c"
2 .arch atmega1284p
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 .global update_timer
11 .global update_timer
12 .section .bss
15 update_timer:
16 0000 0000 .skip 2,0
17 .text
18 .global Capacity_Init
20 Capacity_Init:
21 /* prologue: frame size=0 */
22 /* prologue end (size=0) */
23 0000 1092 0000 sts (Capacity)+1,__zero_reg__
24 0004 1092 0000 sts Capacity,__zero_reg__
25 0008 1092 0000 sts (Capacity+4)+1,__zero_reg__
26 000c 1092 0000 sts Capacity+4,__zero_reg__
27 0010 1092 0000 sts (Capacity+2)+1,__zero_reg__
28 0014 1092 0000 sts Capacity+2,__zero_reg__
29 0018 1092 0000 sts Capacity+6,__zero_reg__
30 001c 8AE0 ldi r24,lo8(10)
31 001e 90E0 ldi r25,hi8(10)
32 0020 0E94 0000 call SetDelay
33 0024 9093 0000 sts (update_timer)+1,r25
34 0028 8093 0000 sts update_timer,r24
35 /* epilogue: frame size=0 */
36 002c 0895 ret
37 /* epilogue end (size=1) */
38 /* function Capacity_Init size 23 (22) */
40 .lcomm SubCounter.0,2
41 .lcomm CurrentOffset.1,2
42 .lcomm SumCurrentOffset.2,4
43 .global Capacity_Update
45 Capacity_Update:
46 /* prologue: frame size=0 */
47 002e CF93 push r28
48 0030 DF93 push r29
49 /* prologue end (size=2) */
50 0032 8091 0000 lds r24,update_timer
51 0036 9091 0000 lds r25,(update_timer)+1
52 003a 0E94 0000 call CheckDelay
53 003e 8823 tst r24
54 0040 01F4 brne .+2
55 0042 00C0 rjmp .L2
56 0044 8091 0000 lds r24,update_timer
57 0048 9091 0000 lds r25,(update_timer)+1
58 004c 0A96 adiw r24,10
59 004e 9093 0000 sts (update_timer)+1,r25
60 0052 8093 0000 sts update_timer,r24
61 0056 E0E0 ldi r30,lo8(0)
62 0058 F0E0 ldi r31,hi8(0)
63 005a 9F01 movw r18,r30
64 005c 90E0 ldi r25,lo8(0)
65 005e 5FEF ldi r21,lo8(-1)
66 0060 A0E0 ldi r26,lo8(Motor)
67 0062 B0E0 ldi r27,hi8(Motor)
68 0064 4BE0 ldi r20,lo8(11)
69 .L9:
70 0066 ED01 movw r28,r26
71 0068 8B81 ldd r24,Y+3
72 006a 87FF sbrs r24,7
73 006c 00C0 rjmp .L6
74 006e 9F5F subi r25,lo8(-(1))
75 0070 8D81 ldd r24,Y+5
76 0072 E80F add r30,r24
77 0074 F11D adc r31,__zero_reg__
78 0076 8981 ldd r24,Y+1
79 0078 280F add r18,r24
80 007a 311D adc r19,__zero_reg__
81 007c 8E81 ldd r24,Y+6
82 007e 8517 cp r24,r21
83 0080 00F4 brsh .L6
84 0082 582F mov r21,r24
85 .L6:
86 0084 4150 subi r20,lo8(-(-1))
87 0086 1896 adiw r26,8
88 0088 47FF sbrs r20,7
89 008a 00C0 rjmp .L9
90 008c 5093 0000 sts Capacity+6,r21
91 0090 232B or r18,r19
92 0092 01F4 brne .L10
93 0094 2091 0000 lds r18,SumCurrentOffset.2
94 0098 3091 0000 lds r19,(SumCurrentOffset.2)+1
95 009c 4091 0000 lds r20,(SumCurrentOffset.2)+2
96 00a0 5091 0000 lds r21,(SumCurrentOffset.2)+3
97 00a4 BB27 clr r27
98 00a6 A52F mov r26,r21
99 00a8 942F mov r25,r20
100 00aa 832F mov r24,r19
101 00ac 9093 0000 sts (CurrentOffset.1)+1,r25
102 00b0 8093 0000 sts CurrentOffset.1,r24
103 00b4 AA27 clr r26
104 00b6 BB27 clr r27
105 00b8 281B sub r18,r24
106 00ba 390B sbc r19,r25
107 00bc 4A0B sbc r20,r26
108 00be 5B0B sbc r21,r27
109 00c0 CF01 movw r24,r30
110 00c2 AA27 clr r26
111 00c4 BB27 clr r27
112 00c6 280F add r18,r24
113 00c8 391F adc r19,r25
114 00ca 4A1F adc r20,r26
115 00cc 5B1F adc r21,r27
116 00ce 2093 0000 sts SumCurrentOffset.2,r18
117 00d2 3093 0000 sts (SumCurrentOffset.2)+1,r19
118 00d6 4093 0000 sts (SumCurrentOffset.2)+2,r20
119 00da 5093 0000 sts (SumCurrentOffset.2)+3,r21
120 00de E5E0 ldi r30,lo8(5)
121 00e0 F0E0 ldi r31,hi8(5)
122 00e2 00C0 rjmp .L11
123 .L10:
124 00e4 2091 0000 lds r18,CurrentOffset.1
125 00e8 3091 0000 lds r19,(CurrentOffset.1)+1
126 00ec 2E17 cp r18,r30
127 00ee 3F07 cpc r19,r31
128 00f0 00F4 brsh .L12
129 00f2 E21B sub r30,r18
130 00f4 F30B sbc r31,r19
131 00f6 00C0 rjmp .L13
132 .L12:
133 00f8 E0E0 ldi r30,lo8(0)
134 00fa F0E0 ldi r31,hi8(0)
135 .L13:
136 00fc 892F mov r24,r25
137 00fe 9927 clr r25
138 0100 880F add r24,r24
139 0102 991F adc r25,r25
140 0104 E80F add r30,r24
141 0106 F91F adc r31,r25
142 0108 3596 adiw r30,5
143 .L11:
144 010a F093 0000 sts (Capacity)+1,r31
145 010e E093 0000 sts Capacity,r30
146 0112 EF3F cpi r30,255
147 0114 F105 cpc r31,__zero_reg__
148 0116 00F4 brsh .L14
149 0118 8091 0000 lds r24,UBat
150 011c 9091 0000 lds r25,(UBat)+1
151 0120 8E9F mul r24,r30
152 0122 9001 movw r18,r0
153 0124 8F9F mul r24,r31
154 0126 300D add r19,r0
155 0128 9E9F mul r25,r30
156 012a 300D add r19,r0
157 012c 1124 clr r1
158 012e C901 movw r24,r18
159 0130 64E6 ldi r22,lo8(100)
160 0132 70E0 ldi r23,hi8(100)
161 0134 00C0 rjmp .L19
162 .L14:
163 0136 CF01 movw r24,r30
164 0138 9695 lsr r25
165 013a 8795 ror r24
166 013c 9695 lsr r25
167 013e 8795 ror r24
168 0140 2091 0000 lds r18,UBat
169 0144 3091 0000 lds r19,(UBat)+1
170 0148 289F mul r18,r24
171 014a A001 movw r20,r0
172 014c 299F mul r18,r25
173 014e 500D add r21,r0
174 0150 389F mul r19,r24
175 0152 500D add r21,r0
176 0154 1124 clr r1
177 0156 CA01 movw r24,r20
178 0158 69E1 ldi r22,lo8(25)
179 015a 70E0 ldi r23,hi8(25)
180 .L19:
181 015c 0E94 0000 call __udivmodhi4
182 0160 7093 0000 sts (Capacity+2)+1,r23
183 0164 6093 0000 sts Capacity+2,r22
184 0168 2091 0000 lds r18,SubCounter.0
185 016c 3091 0000 lds r19,(SubCounter.0)+1
186 0170 2E0F add r18,r30
187 0172 3F1F adc r19,r31
188 0174 3093 0000 sts (SubCounter.0)+1,r19
189 0178 2093 0000 sts SubCounter.0,r18
190 017c 5EE0 ldi r21,hi8(3601)
191 017e 2131 cpi r18,lo8(3601)
192 0180 3507 cpc r19,r21
193 0182 00F0 brlo .L2
194 0184 8091 0000 lds r24,Capacity+4
195 0188 9091 0000 lds r25,(Capacity+4)+1
196 018c 0196 adiw r24,1
197 018e 9093 0000 sts (Capacity+4)+1,r25
198 0192 8093 0000 sts Capacity+4,r24
199 0196 2051 subi r18,lo8(-(-3600))
200 0198 3E40 sbci r19,hi8(-(-3600))
201 019a 3093 0000 sts (SubCounter.0)+1,r19
202 019e 2093 0000 sts SubCounter.0,r18
203 .L2:
204 /* epilogue: frame size=0 */
205 01a2 DF91 pop r29
206 01a4 CF91 pop r28
207 01a6 0895 ret
208 /* epilogue end (size=3) */
209 /* function Capacity_Update size 189 (184) */
211 .comm Capacity,7,1
212 /* File "capacity.c": code 212 = 0x00d4 ( 206), prologues 2, epilogues 4 */
DEFINED SYMBOLS
*ABS*:00000000 capacity.c
C:\Temp/cckCAB70.s:3 *ABS*:0000003f __SREG__
C:\Temp/cckCAB70.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cckCAB70.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cckCAB70.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cckCAB70.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cckCAB70.s:15 .bss:00000000 update_timer
C:\Temp/cckCAB70.s:20 .text:00000000 Capacity_Init
*COM*:00000007 Capacity
.bss:00000002 SubCounter.0
C:\Temp/cckCAB70.s:40 .bss:00000004 CurrentOffset.1
C:\Temp/cckCAB70.s:41 .bss:00000006 SumCurrentOffset.2
C:\Temp/cckCAB70.s:45 .text:0000002e Capacity_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SetDelay
CheckDelay
Motor
UBat
__udivmodhi4
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/debug.c
0,0 → 1,48
#include "main.h"
#include "debug.h"
 
#ifdef DEBUG // only include functions if DEBUG is defined in main.h
 
#warning : "### DEBUG-Funktion aktiv ###"
 
 
 
unsigned char Debug_BufPtr = 0;
struct str_Debug tDebug;
unsigned char SendDebugOutput = 0;
 
// function called from _printf_P to output character
void Debug_Putchar(char c)
{
if (!SendDebugOutput)
{
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow
}
}
 
void DebugSend(unsigned char cmd)
{
if (!SendDebugOutput)
{
tDebug.Cmd = cmd;
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker
Debug_BufPtr = 0; // set bufferindex to 0
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function
}
}
#endif
 
/*
add the following code block to the serial transmit function
 
#ifdef DEBUG // only include functions if DEBUG is defined
if(SendDebugOutput && UebertragungAbgeschlossen)
{
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
SendDebugOutput = 0;
}
#endif
 
*/
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/debug.h
0,0 → 1,60
#ifndef _DEBUG_H
#define _DEBUG_H
// ----------------------------------------------
#define CMD_NONE 0x00
#define CMD_RAW_OUTPUT 0x01
#define CMD_ERROR_MSG 0x02
#define CMD_WARNING_MSG 0x04
#define CMD_GREEN_MSG 0x08
 
// debug console in MK-Tool can also handle ANSI ESC seq.
#define ANSI_ATTRIBUTE_OFF "\033[0m"
#define ANSI_BOLD "\033[1m"
#define ANSI_UNDERSCORE "\033[4m"
#define ANSI_BLINK "\033[5m"
#define ANSI_INVERSE "\033[7m"
#define ANSI_INVISIBLE "\033[8m"
 
#define ANSI_COLOR_BLACK "\033[30m"
#define ANSI_COLOR_RED "\033[31m"
#define ANSI_COLOR_GREEN "\033[32m"
#define ANSI_COLOR_YELLOW "\033[33m"
#define ANSI_COLOR_BLUE "\033[34m"
#define ANSI_COLOR_VIOLETT "\033[35m"
#define ANSI_COLOR_KOBALTBLUE "\033[36m"
#define ANSI_COLOR_WHITE "\033[37m"
 
#define ANSI_CLEAR "\033[2J"
#define ANSI_HOME "\033[H"
 
// macros for easier use
#ifdef DEBUG // only include functions if DEBUG is defined in main.h
 
#define Debug(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_NONE); }
#define Debug_Raw(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_RAW_OUTPUT); }
#define Debug_Warning(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_WARNING_MSG); }
#define Debug_Error(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_ERROR_MSG); }
#define Debug_OK(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_GREEN_MSG); }
 
struct str_Debug
{
unsigned char Cmd; // bitcoded command
char Text[32];
};
 
extern struct str_Debug tDebug;
unsigned char SendDebugOutput;
 
void Debug_Putchar(char c);
void DebugSend(unsigned char cmd);
 
#else // dummy macros (won't waste flash, if #DEBUG is disabled)
#define Debug(format, args...) ;
#define Debug_Raw(format, args...) ;
#define Debug_Warning(format, args...) ;
#define Debug_Error(format, args...) ;
#define Debug_OK(format, args...) ;
#endif
 
// ----------------------------------------------
#endif
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/debug.lst
0,0 → 1,21
1 .file "debug.c"
2 .arch atmega1284p
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 /* File "debug.c": code 0 = 0x0000 ( 0), prologues 0, epilogues 0 */
DEFINED SYMBOLS
*ABS*:00000000 debug.c
C:\Temp/ccyX8Ga6.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccyX8Ga6.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccyX8Ga6.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccyX8Ga6.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccyX8Ga6.s:7 *ABS*:00000001 __zero_reg__
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/eeprom.c
0,0 → 1,632
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
 
#include <avr/eeprom.h>
#include <string.h>
#include "eeprom.h"
#include "uart.h"
#include "led.h"
#include "main.h"
#include "fc.h"
#include "twimaster.h"
 
paramset_t EE_Parameter;
MixerTable_t Mixer;
uint8_t RequiredMotors;
 
 
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t i;
 
for(i=0; i<len; i++)
{
crc += pBuffer[i];
}
return crc;
}
 
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t off;
 
for(off=0; off<len; off++)
{
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));;
}
return crc;
}
 
void ParamSet_DefaultStickMapping(void)
{
EE_Parameter.Kanalbelegung[K_GAS] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_NICK] = 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;
}
 
 
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void CommonDefaults(void)
{
EE_Parameter.Revision = EEPARAM_REVISION;
memset(EE_Parameter.Name,0,12); // delete name
if(PlatinenVersion >= 20)
{
EE_Parameter.Gyro_D = 10;
EE_Parameter.Driftkomp = 0;
EE_Parameter.GyroAccFaktor = 27;
EE_Parameter.WinkelUmschlagNick = 78;
EE_Parameter.WinkelUmschlagRoll = 78;
}
else
{
EE_Parameter.Gyro_D = 3;
EE_Parameter.Driftkomp = 32;
EE_Parameter.GyroAccFaktor = 30;
EE_Parameter.WinkelUmschlagNick = 85;
EE_Parameter.WinkelUmschlagRoll = 85;
}
EE_Parameter.GyroAccAbgleich = 32; // 1/k
EE_Parameter.BitConfig = 0; // Looping usw.
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER;
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP;
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL;//CFG3_VARIO_FAILSAFE;
EE_Parameter.Receiver = RECEIVER_HOTT;
EE_Parameter.MotorSafetySwitch = 0;
EE_Parameter.ExternalControl = 0;
 
EE_Parameter.Gas_Min = 8; // Wert : 0-32
EE_Parameter.Gas_Max = 230; // Wert : 33-247
EE_Parameter.KompassWirkung = 64; // Wert : 0-247
 
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1
EE_Parameter.Hoehe_P = 15; // Wert : 0-32
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation)
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag)
 
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.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
 
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 15; // Wert : 0-247 // Anschlag
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag
EE_Parameter.ServoNickRefresh = 4;
EE_Parameter.Servo3 = 125;
EE_Parameter.Servo4 = 125;
EE_Parameter.Servo5 = 125;
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag
EE_Parameter.ServoManualControlSpeed = 60;
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps
 
EE_Parameter.J16Bitmask = 95;
EE_Parameter.J17Bitmask = 243;
EE_Parameter.WARN_J16_Bitmask = 0xAA;
EE_Parameter.WARN_J17_Bitmask = 0xAA;
EE_Parameter.J16Timing = 40;
EE_Parameter.J17Timing = 40;
EE_Parameter.NaviOut1Parameter = 0; // Photo release in meter
EE_Parameter.LoopGasLimit = 50;
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag
EE_Parameter.LoopHysterese = 50;
 
EE_Parameter.NaviGpsModeControl = 254; // 254 -> Poti 2
EE_Parameter.NaviGpsGain = 100;
EE_Parameter.NaviGpsP = 90;
EE_Parameter.NaviGpsI = 90;
EE_Parameter.NaviGpsD = 90;
EE_Parameter.NaviGpsPLimit = 75;
EE_Parameter.NaviGpsILimit = 85;
EE_Parameter.NaviGpsDLimit = 75;
EE_Parameter.NaviGpsACC = 0;
EE_Parameter.NaviGpsMinSat = 6;
EE_Parameter.NaviStickThreshold = 8;
EE_Parameter.NaviWindCorrection = 90;
EE_Parameter.NaviAccCompensation = 42;
EE_Parameter.NaviOperatingRadius = 245;
EE_Parameter.NaviAngleLimitation = 140;
EE_Parameter.NaviPH_LoginTime = 5;
EE_Parameter.OrientationAngle = 0;
EE_Parameter.CareFreeModeControl = 0;
EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50)
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent)
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.MotorSmooth = 0;
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change
EE_Parameter.FailSafeTime = 0; // 0 = off
EE_Parameter.MaxAltitude = 150; // 0 = off
EE_Parameter.AchsKopplung1 = 90;
EE_Parameter.AchsKopplung2 = 55;
EE_Parameter.FailsafeChannel = 0;
EE_Parameter.ServoFilterNick = 0;
EE_Parameter.ServoFilterRoll = 0;
}
/*
void ParamSet_DefaultSet1(void) // sport
{
CommonDefaults();
EE_Parameter.Stick_P = 14; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 12; // Wert : 1-20
EE_Parameter.Gyro_P = 80; // Wert : 0-247
EE_Parameter.Gyro_I = 150; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 32;
EE_Parameter.CouplingYawCorrection = 1;
EE_Parameter.GyroAccAbgleich = 16; // 1/k;
EE_Parameter.DynamicStability = 100;
memcpy(EE_Parameter.Name, "Sport\0", 12);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
*/
 
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void ParamSet_DefaultSet1(void) // normal
{
CommonDefaults();
EE_Parameter.Stick_P = 10; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 6; // Wert : 1-20
EE_Parameter.Gyro_P = 90; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 32;
EE_Parameter.CouplingYawCorrection = 60;
EE_Parameter.DynamicStability = 75;
memcpy(EE_Parameter.Name, "Fast",4);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
 
/***************************************************/
/* Default Values for parameter set 2 */
/***************************************************/
void ParamSet_DefaultSet2(void) // beginner
{
CommonDefaults();
EE_Parameter.Stick_P = 8; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 6; // Wert : 1-20
EE_Parameter.Gyro_P = 100; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 16;
EE_Parameter.CouplingYawCorrection = 70;
EE_Parameter.DynamicStability = 70;
memcpy(EE_Parameter.Name, "Normal",6);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
/***************************************************/
/* Default Values for parameter set 3 */
/***************************************************/
void ParamSet_DefaultSet3(void) // beginner
{
CommonDefaults();
EE_Parameter.Stick_P = 6; // Wert : 1-20
EE_Parameter.Stick_D = 10; // Wert : 0-20
EE_Parameter.StickGier_P = 4; // Wert : 1-20
EE_Parameter.Gyro_P = 100; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 16;
EE_Parameter.CouplingYawCorrection = 70;
EE_Parameter.DynamicStability = 70;
memcpy(EE_Parameter.Name, "Easy", 4);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
 
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
}
 
/***************************************************/
/* Write Parameter to EEPROM as byte */
/***************************************************/
void SetParamByte(uint16_t param_id, uint8_t value)
{
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
}
 
/***************************************************/
/* Read Parameter from EEPROM as word */
/***************************************************/
uint16_t GetParamWord(uint16_t param_id)
{
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id));
}
 
/***************************************************/
/* Write Parameter to EEPROM as word */
/***************************************************/
void SetParamWord(uint16_t param_id, uint16_t value)
{
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
}
 
/***************************************************/
/* Read Parameter Set from EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber)
{
uint8_t crc;
uint16_t eeaddr;
 
// range the setnumber
if((1 > setnumber) || (setnumber > 5)) setnumber = 3;
 
// calculate eeprom addr
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1);
 
// calculate checksum from eeprom
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1);
 
// check crc
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0;
 
// check revision
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0;
 
// read paramset from eeprom
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
 
/***************************************************/
/* Write Parameter Set to EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber)
{
uint8_t crc;
 
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) return 0;
LIBFC_CheckSettings();
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas
{
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas
}
// update checksum
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
 
// write paramset to eeprom
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
 
// backup channel settings to separate block in eeprom
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
 
// write crc of channel block to eeprom
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung));
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc);
 
// update active settings number
SetActiveParamSet(setnumber);
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
// wrong revision
return 0;
}
 
/***************************************************/
/* Read MixerTable from EEPROM */
/***************************************************/
uint8_t MixerTable_ReadFromEEProm(void)
{
uint8_t crc;
 
// calculate checksum in eeprom
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1);
 
// check crc
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0;
 
// check revision
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0;
 
// read mixer table
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
 
/***************************************************/
/* Write Mixer Table to EEPROM */
/***************************************************/
uint8_t MixerTable_WriteToEEProm(void)
{
if(Mixer.Revision == EEMIXER_REVISION)
{
// update crc
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
 
// write to eeprom
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
else return 0;
}
 
/***************************************************/
/* Default Values for Mixer Table */
/***************************************************/
void MixerTable_Default(void) // Quadro
{
uint8_t i;
 
Mixer.Revision = EEMIXER_REVISION;
// clear mixer table
for(i = 0; i < 16; i++)
{
Mixer.Motor[i][MIX_GAS] = 0;
Mixer.Motor[i][MIX_NICK] = 0;
Mixer.Motor[i][MIX_ROLL] = 0;
Mixer.Motor[i][MIX_YAW] = 0;
}
// default = Quadro
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64;
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64;
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64;
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64;
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12);
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
}
 
/***************************************************/
/* Get active parameter set */
/***************************************************/
uint8_t GetActiveParamSet(void)
{
uint8_t setnumber;
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET));
if(setnumber > 5)
{
setnumber = 3;
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber);
}
return(setnumber);
}
 
/***************************************************/
/* Set active parameter set */
/***************************************************/
void SetActiveParamSet(uint8_t setnumber)
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) setnumber = 1;
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber);
}
 
/***************************************************/
/* Set default parameter set */
/***************************************************/
void SetDefaultParameter(uint8_t set, uint8_t restore_channels)
{
 
if(set > 5) set = 5;
else if(set < 1) set = 1;
 
switch(set)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
break;
case 2:
ParamSet_DefaultSet2(); // Kamera
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Beginner
break;
}
if(restore_channels)
{
uint8_t crc;
// 1st check for a valid channel backup in eeprom
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) )
{
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
}
else ParamSet_DefaultStickMapping();
}
else ParamSet_DefaultStickMapping();
ParamSet_WriteToEEProm(set);
}
 
/***************************************************/
/* Initialize EEPROM Parameter Sets */
/***************************************************/
void ParamSet_Init(void)
{
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i;
 
 
if(EEPARAM_REVISION != GetParamByte(PID_EE_REVISION) )
{
ee_default = 1; // software update or forced by mktool
}
 
 
// 1st check for a valid channel backup in eeprom
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) channel_backup = 1;
 
 
// parameter check
 
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
printf("\n\rGenerating default Parameter Set %d",i);
switch(i)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
break;
case 2:
ParamSet_DefaultSet2(); // Kamera
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Kamera
break;
}
if(channel_backup) // if we have an channel mapping backup in eeprom
{ // restore it from eeprom
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
}
else
{ // use default mapping
ParamSet_DefaultStickMapping();
}
ParamSet_WriteToEEProm(i);
}
}
if(bad_params) // at least one of the parameter settings were invalid
{
// default-Setting is parameter set 3
SetActiveParamSet(3);
}
 
 
// read active parameter set to ParamSet stucture
i = GetActiveParamSet();
ParamSet_ReadFromEEProm(i);
printf("\n\rUsing Parameter Set %d", i);
 
// load mixer table
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() )
{
printf("\n\rGenerating default Mixer Table");
MixerTable_Default(); // Quadro
MixerTable_WriteToEEProm();
}
if(ee_default) SetParamByte(PID_EE_REVISION, EEPARAM_REVISION);
// determine motornumber
RequiredMotors = 0;
for(i = 0; i < 16; i++)
{
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++;
}
 
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors);
PrintLine();// ("\n\r===================================");
 
}
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/eeprom.h
0,0 → 1,277
#ifndef _EEPROM_H
#define _EEPROM_H
 
#include <inttypes.h>
#include "twimaster.h"
 
#define EEPARAM_REVISION 92 // is count up, if paramater stucture has changed (compatibility)
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility)
 
#define EEPROM_ADR_PARAM_BEGIN 0
#define PID_EE_REVISION 1 // byte
#define PID_ACTIVE_SET 2 // byte
#define PID_PRESSURE_OFFSET 3 // byte
 
#define PID_ACC_NICK 4 // word
#define PID_ACC_ROLL 6 // word
#define PID_ACC_TOP 8 // word
 
#define PID_FLIGHT_MINUTES_TOTAL 10 // word
#define PID_FLIGHT_MINUTES 14 // word
 
#define PID_SPEAK_HOTT_CFG 16 // Byte
 
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc
#define EEPROM_ADR_PARAMSET 100 // 100 - 650, 5 * 110 bytes
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes
 
#define MIX_GAS 0
#define MIX_NICK 1
#define MIX_ROLL 2
#define MIX_YAW 3
 
typedef struct
{
uint8_t Revision;
int8_t Name[12];
int8_t Motor[16][4];
uint8_t crc;
} __attribute__((packed)) MixerTable_t;
 
extern MixerTable_t Mixer;
extern uint8_t RequiredMotors;
 
//GlobalConfig3
#define CFG3_NO_SDCARD_NO_START 0x01
#define CFG3_DPH_MAX_RADIUS 0x02
#define CFG3_VARIO_FAILSAFE 0x04
#define CFG3_MOTOR_SWITCH_MODE 0x08
#define CFG3_NO_GPSFIX_NO_START 0x10
#define CFG3_USE_NC_FOR_OUT1 0x20
#define CFG3_SPEAK_ALL 0x40
 
//GlobalConfig
#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 CFG_ACHSENKOPPLUNG_AKTIV 0x40
#define CFG_DREHRATEN_BEGRENZER 0x80
 
//BitConfig
#define CFG_LOOP_OBEN 0x01
#define CFG_LOOP_UNTEN 0x02
#define CFG_LOOP_LINKS 0x04
#define CFG_LOOP_RECHTS 0x08
#define CFG_MOTOR_BLINK1 0x10
#define CFG_MOTOR_OFF_LED1 0x20
#define CFG_MOTOR_OFF_LED2 0x40
#define CFG_MOTOR_BLINK2 0x80
 
// ExtraConfig
#define CFG2_HEIGHT_LIMIT 0x01
#define CFG2_VARIO_BEEP 0x02
#define CFG_SENSITIVE_RC 0x04
#define CFG_3_3V_REFERENCE 0x08
#define CFG_NO_RCOFF_BEEPING 0x10
#define CFG_GPS_AID 0x20
#define CFG_LEARNABLE_CAREFREE 0x40
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80
 
// bit mask for ParamSet.Config0
#define CFG0_AIRPRESS_SENSOR 0x01
#define CFG0_HEIGHT_SWITCH 0x02
#define CFG0_HEADING_HOLD 0x04
#define CFG0_COMPASS_ACTIVE 0x08
#define CFG0_COMPASS_FIX 0x10
#define CFG0_GPS_ACTIVE 0x20
#define CFG0_AXIS_COUPLING_ACTIVE 0x40
#define CFG0_ROTARY_RATE_LIMITER 0x80
 
// bitcoding for EE_Parameter.ServoCompInvert
#define SERVO_NICK_INV 0x01
#define SERVO_ROLL_INV 0x02
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value
 
// defines for the receiver selection
#define RECEIVER_PPM 0
#define RECEIVER_SPEKTRUM 1
#define RECEIVER_SPEKTRUM_HI_RES 2
#define RECEIVER_SPEKTRUM_LOW_RES 3
#define RECEIVER_JETI 4
#define RECEIVER_ACT_DSL 5
#define RECEIVER_HOTT 6
#define RECEIVER_SBUS 7
#define RECEIVER_USER 8
 
#define RECEIVER_UNKNOWN 0xFF
 
// defines for lookup ParamSet.ChannelAssignment
#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
 
 
// values above 247 representing poti1 to poti8
// poti1 = 255
// poti2 = 254
// poti3 = 253
// poti4 = 252
// poti5 = 251
// poti6 = 250
// poti7 = 249
// poti8 = 248
 
 
typedef struct
{
unsigned char Revision;
unsigned char Kanalbelegung[12]; // 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 Hoehe_HoverBand; // Wert : 0-250
unsigned char Hoehe_GPS_Z; // Wert : 0-250
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char StickGier_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 Gyro_D; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char Gyro_Stability; // Wert : 0-16
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 Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
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
//--- Seit V0.75
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoRollComp; // Wert : 0-250
unsigned char ServoRollMin; // Wert : 0-250
unsigned char ServoRollMax; // Wert : 0-250
//---
unsigned char ServoNickRefresh; // Speed of the Servo
unsigned char ServoManualControlSpeed;//
unsigned char CamOrientation; //
unsigned char Servo3; // Value or mapping of the Servo Output
unsigned char Servo4; // Value or mapping of the Servo Output
unsigned char Servo5; // Value or mapping of the Servo Output
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
//---Output ---------------------------------------------
unsigned char J16Bitmask; // for the J16 Output
unsigned char J16Timing; // for the J16 Output
unsigned char J17Bitmask; // for the J17 Output
unsigned char J17Timing; // for the J17 Output
// seit version V0.75c
unsigned char WARN_J16_Bitmask; // for the J16 Output
unsigned char WARN_J17_Bitmask; // for the J17 Output
//---NaviCtrl---------------------------------------------
unsigned char NaviOut1Parameter; // for the J16 Output
unsigned char NaviGpsModeControl; // Parameters for the Naviboard
unsigned char NaviGpsGain;
unsigned char NaviGpsP;
unsigned char NaviGpsI;
unsigned char NaviGpsD;
unsigned char NaviGpsPLimit;
unsigned char NaviGpsILimit;
unsigned char NaviGpsDLimit;
unsigned char NaviGpsACC;
unsigned char NaviGpsMinSat;
unsigned char NaviStickThreshold;
unsigned char NaviWindCorrection;
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
unsigned char NaviOperatingRadius;
unsigned char NaviAngleLimitation;
unsigned char NaviPH_LoginTime;
//---Ext.Ctrl---------------------------------------------
unsigned char ExternalControl; // for serial Control
//---CareFree---------------------------------------------
unsigned char OrientationAngle; // Where is the front-direction?
unsigned char CareFreeModeControl; // switch for CareFree
unsigned char MotorSafetySwitch;
unsigned char MotorSmooth;
unsigned char ComingHomeAltitude;
unsigned char FailSafeTime;
unsigned char MaxAltitude;
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
unsigned char ServoFilterNick;
unsigned char ServoFilterRoll;
//------------------------------------------------
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
unsigned char ExtraConfig; // bitcodiert
unsigned char GlobalConfig3; // bitcodiert
char Name[12];
unsigned char crc; // must be the last byte!
} paramset_t;
 
#define PARAMSET_STRUCT_LEN sizeof(paramset_t)
 
extern paramset_t EE_Parameter;
 
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len);
 
extern void ParamSet_Init(void);
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels);
 
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber);
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber);
 
extern uint8_t GetActiveParamSet(void);
extern void SetActiveParamSet(uint8_t setnumber);
 
extern uint8_t MixerTable_ReadFromEEProm(void);
extern uint8_t MixerTable_WriteToEEProm(void);
 
extern uint8_t GetParamByte(uint16_t param_id);
extern void SetParamByte(uint16_t param_id, uint8_t value);
extern uint16_t GetParamWord(uint16_t param_id);
extern void SetParamWord(uint16_t param_id, uint16_t value);
 
 
#endif //_EEPROM_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/eeprom.lst
0,0 → 1,1351
1 .file "eeprom.c"
2 .arch atmega1284p
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
12 eeprom_read_byte:
13 /* prologue: frame size=0 */
14 /* prologue end (size=0) */
15 .L2:
16 0000 F999 sbic 63-0x20,1
17 0002 00C0 rjmp .L2
18 0004 92BD out (65)+1-0x20,r25
19 0006 81BD out 65-0x20,r24
20 /* #APP */
21 /* START EEPROM READ CRITICAL SECTION */
22 0008 F89A sbi 31, 0
23 000a 80B5 in r24, 32
24 /* END EEPROM READ CRITICAL SECTION */
25
26 /* #NOAPP */
27 000c 9927 clr r25
28 /* epilogue: frame size=0 */
29 000e 0895 ret
30 /* epilogue end (size=1) */
31 /* function eeprom_read_byte size 16 (15) */
34 eeprom_write_byte:
35 /* prologue: frame size=0 */
36 /* prologue end (size=0) */
37 .L6:
38 0010 F999 sbic 63-0x20,1
39 0012 00C0 rjmp .L6
40 0014 1FBA out 63-0x20,__zero_reg__
41 0016 92BD out (65)+1-0x20,r25
42 0018 81BD out 65-0x20,r24
43 001a 60BD out 64-0x20,r22
44 /* #APP */
45 /* START EEPROM WRITE CRITICAL SECTION */
46 001c 0FB6 in r0, 63
47 001e F894 cli
48 0020 FA9A sbi 31, 2
49 0022 F99A sbi 31, 1
50 0024 0FBE out 63, r0
51 /* END EEPROM WRITE CRITICAL SECTION */
52 /* #NOAPP */
53 /* epilogue: frame size=0 */
54 0026 0895 ret
55 /* epilogue end (size=1) */
56 /* function eeprom_write_byte size 21 (20) */
58 .global RAM_Checksum
60 RAM_Checksum:
61 /* prologue: frame size=0 */
62 /* prologue end (size=0) */
63 0028 4AEA ldi r20,lo8(-86)
64 002a 20E0 ldi r18,lo8(0)
65 002c 30E0 ldi r19,hi8(0)
66 002e 2617 cp r18,r22
67 0030 3707 cpc r19,r23
68 0032 00F4 brsh .L15
69 0034 FC01 movw r30,r24
70 .L13:
71 0036 8191 ld r24,Z+
72 0038 480F add r20,r24
73 003a 2F5F subi r18,lo8(-(1))
74 003c 3F4F sbci r19,hi8(-(1))
75 003e 2617 cp r18,r22
76 0040 3707 cpc r19,r23
77 0042 00F0 brlo .L13
78 .L15:
79 0044 842F mov r24,r20
80 0046 9927 clr r25
81 /* epilogue: frame size=0 */
82 0048 0895 ret
83 /* epilogue end (size=1) */
84 /* function RAM_Checksum size 17 (16) */
86 .global EEProm_Checksum
88 EEProm_Checksum:
89 /* prologue: frame size=0 */
90 /* prologue end (size=0) */
91 004a EAEA ldi r30,lo8(-86)
92 004c 40E0 ldi r20,lo8(0)
93 004e 50E0 ldi r21,hi8(0)
94 0050 4617 cp r20,r22
95 0052 5707 cpc r21,r23
96 0054 00F4 brsh .L26
97 0056 9C01 movw r18,r24
98 .L30:
99 0058 F999 sbic 63-0x20,1
100 005a 00C0 rjmp .L30
101 005c 32BD out (65)+1-0x20,r19
102 005e 21BD out 65-0x20,r18
103 /* #APP */
104 /* START EEPROM READ CRITICAL SECTION */
105 0060 F89A sbi 31, 0
106 0062 80B5 in r24, 32
107 /* END EEPROM READ CRITICAL SECTION */
108
109 /* #NOAPP */
110 0064 E80F add r30,r24
111 0066 4F5F subi r20,lo8(-(1))
112 0068 5F4F sbci r21,hi8(-(1))
113 006a 2F5F subi r18,lo8(-(1))
114 006c 3F4F sbci r19,hi8(-(1))
115 006e 4617 cp r20,r22
116 0070 5707 cpc r21,r23
117 0072 00F0 brlo .L30
118 .L26:
119 0074 8E2F mov r24,r30
120 0076 9927 clr r25
121 /* epilogue: frame size=0 */
122 0078 0895 ret
123 /* epilogue end (size=1) */
124 /* function EEProm_Checksum size 32 (31) */
126 .global ParamSet_DefaultStickMapping
128 ParamSet_DefaultStickMapping:
129 /* prologue: frame size=0 */
130 /* prologue end (size=0) */
131 007a 81E0 ldi r24,lo8(1)
132 007c 8093 0000 sts EE_Parameter+3,r24
133 0080 82E0 ldi r24,lo8(2)
134 0082 8093 0000 sts EE_Parameter+2,r24
135 0086 83E0 ldi r24,lo8(3)
136 0088 8093 0000 sts EE_Parameter+1,r24
137 008c 84E0 ldi r24,lo8(4)
138 008e 8093 0000 sts EE_Parameter+4,r24
139 0092 85E0 ldi r24,lo8(5)
140 0094 8093 0000 sts EE_Parameter+5,r24
141 0098 86E0 ldi r24,lo8(6)
142 009a 8093 0000 sts EE_Parameter+6,r24
143 009e 87E0 ldi r24,lo8(7)
144 00a0 8093 0000 sts EE_Parameter+7,r24
145 00a4 88E0 ldi r24,lo8(8)
146 00a6 8093 0000 sts EE_Parameter+8,r24
147 00aa 89E0 ldi r24,lo8(9)
148 00ac 8093 0000 sts EE_Parameter+9,r24
149 00b0 8AE0 ldi r24,lo8(10)
150 00b2 8093 0000 sts EE_Parameter+10,r24
151 00b6 8BE0 ldi r24,lo8(11)
152 00b8 8093 0000 sts EE_Parameter+11,r24
153 00bc 8CE0 ldi r24,lo8(12)
154 00be 8093 0000 sts EE_Parameter+12,r24
155 /* epilogue: frame size=0 */
156 00c2 0895 ret
157 /* epilogue end (size=1) */
158 /* function ParamSet_DefaultStickMapping size 37 (36) */
160 .global CommonDefaults
162 CommonDefaults:
163 /* prologue: frame size=0 */
164 /* prologue end (size=0) */
165 00c4 8CE5 ldi r24,lo8(92)
166 00c6 8093 0000 sts EE_Parameter,r24
167 00ca 8CE0 ldi r24,lo8(12)
168 00cc E0E0 ldi r30,lo8(EE_Parameter+112)
169 00ce F0E0 ldi r31,hi8(EE_Parameter+112)
170 00d0 1192 st Z+,__zero_reg__
171 00d2 8A95 dec r24
172 00d4 01F4 brne .-6
173 00d6 8091 0000 lds r24,PlatinenVersion
174 00da 8431 cpi r24,lo8(20)
175 00dc 00F0 brlo .L33
176 00de 8AE0 ldi r24,lo8(10)
177 00e0 8093 0000 sts EE_Parameter+32,r24
178 00e4 1092 0000 sts EE_Parameter+68,__zero_reg__
179 00e8 8BE1 ldi r24,lo8(27)
180 00ea 8093 0000 sts EE_Parameter+28,r24
181 00ee 8EE4 ldi r24,lo8(78)
182 00f0 00C0 rjmp .L35
183 .L33:
184 00f2 83E0 ldi r24,lo8(3)
185 00f4 8093 0000 sts EE_Parameter+32,r24
186 00f8 80E2 ldi r24,lo8(32)
187 00fa 8093 0000 sts EE_Parameter+68,r24
188 00fe 8EE1 ldi r24,lo8(30)
189 0100 8093 0000 sts EE_Parameter+28,r24
190 0104 85E5 ldi r24,lo8(85)
191 .L35:
192 0106 8093 0000 sts EE_Parameter+65,r24
193 010a 8093 0000 sts EE_Parameter+66,r24
194 010e 80E2 ldi r24,lo8(32)
195 0110 8093 0000 sts EE_Parameter+67,r24
196 0114 1092 0000 sts EE_Parameter+108,__zero_reg__
197 0118 8AE6 ldi r24,lo8(106)
198 011a 8093 0000 sts EE_Parameter+13,r24
199 011e 82E2 ldi r24,lo8(34)
200 0120 8093 0000 sts EE_Parameter+110,r24
201 0124 80E4 ldi r24,lo8(64)
202 0126 8093 0000 sts EE_Parameter+111,r24
203 012a 66E0 ldi r22,lo8(6)
204 012c 6093 0000 sts EE_Parameter+39,r22
205 0130 1092 0000 sts EE_Parameter+100,__zero_reg__
206 0134 1092 0000 sts EE_Parameter+97,__zero_reg__
207 0138 48E0 ldi r20,lo8(8)
208 013a 4093 0000 sts EE_Parameter+26,r20
209 013e 56EE ldi r21,lo8(-26)
210 0140 5093 0000 sts EE_Parameter+27,r21
211 0144 8093 0000 sts EE_Parameter+29,r24
212 0148 9EE1 ldi r25,lo8(30)
213 014a 9093 0000 sts EE_Parameter+14,r25
214 014e 8FEF ldi r24,lo8(-1)
215 0150 8093 0000 sts EE_Parameter+16,r24
216 0154 2FE0 ldi r18,lo8(15)
217 0156 2093 0000 sts EE_Parameter+17,r18
218 015a 9093 0000 sts EE_Parameter+15,r25
219 015e 1092 0000 sts EE_Parameter+19,__zero_reg__
220 0162 4093 0000 sts EE_Parameter+20,r20
221 0166 84E1 ldi r24,lo8(20)
222 0168 8093 0000 sts EE_Parameter+21,r24
223 016c 1092 0000 sts EE_Parameter+22,__zero_reg__
224 0170 2093 0000 sts EE_Parameter+18,r18
225 0174 1092 0000 sts EE_Parameter+41,__zero_reg__
226 0178 1092 0000 sts EE_Parameter+42,__zero_reg__
227 017c 1092 0000 sts EE_Parameter+43,__zero_reg__
228 0180 1092 0000 sts EE_Parameter+44,__zero_reg__
229 0184 1092 0000 sts EE_Parameter+70,__zero_reg__
230 0188 1092 0000 sts EE_Parameter+71,__zero_reg__
231 018c 1092 0000 sts EE_Parameter+72,__zero_reg__
232 0190 1092 0000 sts EE_Parameter+73,__zero_reg__
233 0194 90E8 ldi r25,lo8(-128)
234 0196 9093 0000 sts EE_Parameter+45,r25
235 019a 32E3 ldi r19,lo8(50)
236 019c 3093 0000 sts EE_Parameter+46,r19
237 01a0 82E0 ldi r24,lo8(2)
238 01a2 8093 0000 sts EE_Parameter+109,r24
239 01a6 2093 0000 sts EE_Parameter+47,r18
240 01aa 5093 0000 sts EE_Parameter+48,r21
241 01ae 84E0 ldi r24,lo8(4)
242 01b0 8093 0000 sts EE_Parameter+53,r24
243 01b4 8DE7 ldi r24,lo8(125)
244 01b6 8093 0000 sts EE_Parameter+56,r24
245 01ba 8093 0000 sts EE_Parameter+57,r24
246 01be 8093 0000 sts EE_Parameter+58,r24
247 01c2 9093 0000 sts EE_Parameter+49,r25
248 01c6 25E5 ldi r18,lo8(85)
249 01c8 2093 0000 sts EE_Parameter+50,r18
250 01cc 86E4 ldi r24,lo8(70)
251 01ce 8093 0000 sts EE_Parameter+51,r24
252 01d2 8CED ldi r24,lo8(-36)
253 01d4 8093 0000 sts EE_Parameter+52,r24
254 01d8 8CE3 ldi r24,lo8(60)
255 01da 8093 0000 sts EE_Parameter+54,r24
256 01de 1092 0000 sts EE_Parameter+55,__zero_reg__
257 01e2 8FE5 ldi r24,lo8(95)
258 01e4 8093 0000 sts EE_Parameter+74,r24
259 01e8 83EF ldi r24,lo8(-13)
260 01ea 8093 0000 sts EE_Parameter+76,r24
261 01ee 8AEA ldi r24,lo8(-86)
262 01f0 8093 0000 sts EE_Parameter+78,r24
263 01f4 8093 0000 sts EE_Parameter+79,r24
264 01f8 88E2 ldi r24,lo8(40)
265 01fa 8093 0000 sts EE_Parameter+75,r24
266 01fe 8093 0000 sts EE_Parameter+77,r24
267 0202 1092 0000 sts EE_Parameter+80,__zero_reg__
268 0206 3093 0000 sts EE_Parameter+59,r19
269 020a 9AE5 ldi r25,lo8(90)
270 020c 9093 0000 sts EE_Parameter+60,r25
271 0210 3093 0000 sts EE_Parameter+61,r19
272 0214 8EEF ldi r24,lo8(-2)
273 0216 8093 0000 sts EE_Parameter+81,r24
274 021a 84E6 ldi r24,lo8(100)
275 021c 8093 0000 sts EE_Parameter+82,r24
276 0220 9093 0000 sts EE_Parameter+83,r25
277 0224 9093 0000 sts EE_Parameter+84,r25
278 0228 9093 0000 sts EE_Parameter+85,r25
279 022c 8BE4 ldi r24,lo8(75)
280 022e 8093 0000 sts EE_Parameter+86,r24
281 0232 2093 0000 sts EE_Parameter+87,r18
282 0236 8093 0000 sts EE_Parameter+88,r24
283 023a 1092 0000 sts EE_Parameter+89,__zero_reg__
284 023e 6093 0000 sts EE_Parameter+90,r22
285 0242 4093 0000 sts EE_Parameter+91,r20
286 0246 9093 0000 sts EE_Parameter+92,r25
287 024a 8AE2 ldi r24,lo8(42)
288 024c 8093 0000 sts EE_Parameter+93,r24
289 0250 85EF ldi r24,lo8(-11)
290 0252 8093 0000 sts EE_Parameter+94,r24
291 0256 8CE8 ldi r24,lo8(-116)
292 0258 8093 0000 sts EE_Parameter+95,r24
293 025c 85E0 ldi r24,lo8(5)
294 025e 8093 0000 sts EE_Parameter+96,r24
295 0262 1092 0000 sts EE_Parameter+98,__zero_reg__
296 0266 1092 0000 sts EE_Parameter+99,__zero_reg__
297 026a 81E2 ldi r24,lo8(33)
298 026c 8093 0000 sts EE_Parameter+36,r24
299 0270 81E4 ldi r24,lo8(65)
300 0272 8093 0000 sts EE_Parameter+37,r24
301 0276 9093 0000 sts EE_Parameter+38,r25
302 027a 1092 0000 sts EE_Parameter+101,__zero_reg__
303 027e 1092 0000 sts EE_Parameter+102,__zero_reg__
304 0282 1092 0000 sts EE_Parameter+103,__zero_reg__
305 0286 86E9 ldi r24,lo8(-106)
306 0288 8093 0000 sts EE_Parameter+104,r24
307 028c 9093 0000 sts EE_Parameter+62,r25
308 0290 87E3 ldi r24,lo8(55)
309 0292 8093 0000 sts EE_Parameter+63,r24
310 0296 1092 0000 sts EE_Parameter+105,__zero_reg__
311 029a 1092 0000 sts EE_Parameter+106,__zero_reg__
312 029e 1092 0000 sts EE_Parameter+107,__zero_reg__
313 /* epilogue: frame size=0 */
314 02a2 0895 ret
315 /* epilogue end (size=1) */
316 /* function CommonDefaults size 240 (239) */
318 .global ParamSet_DefaultSet1
320 ParamSet_DefaultSet1:
321 /* prologue: frame size=0 */
322 /* prologue end (size=0) */
323 02a4 0E94 0000 call CommonDefaults
324 02a8 8AE0 ldi r24,lo8(10)
325 02aa 8093 0000 sts EE_Parameter+23,r24
326 02ae 80E1 ldi r24,lo8(16)
327 02b0 8093 0000 sts EE_Parameter+24,r24
328 02b4 26E0 ldi r18,lo8(6)
329 02b6 2093 0000 sts EE_Parameter+25,r18
330 02ba 9AE5 ldi r25,lo8(90)
331 02bc 9093 0000 sts EE_Parameter+30,r25
332 02c0 88E7 ldi r24,lo8(120)
333 02c2 8093 0000 sts EE_Parameter+31,r24
334 02c6 9093 0000 sts EE_Parameter+33,r25
335 02ca 8093 0000 sts EE_Parameter+34,r24
336 02ce 2093 0000 sts EE_Parameter+35,r18
337 02d2 80E2 ldi r24,lo8(32)
338 02d4 8093 0000 sts EE_Parameter+40,r24
339 02d8 8CE3 ldi r24,lo8(60)
340 02da 8093 0000 sts EE_Parameter+64,r24
341 02de 8BE4 ldi r24,lo8(75)
342 02e0 8093 0000 sts EE_Parameter+69,r24
343 02e4 86E4 ldi r24,lo8(1953718598)
344 02e6 91E6 ldi r25,hi8(1953718598)
345 02e8 A3E7 ldi r26,hlo8(1953718598)
346 02ea B4E7 ldi r27,hhi8(1953718598)
347 02ec 8093 0000 sts EE_Parameter+112,r24
348 02f0 9093 0000 sts (EE_Parameter+112)+1,r25
349 02f4 A093 0000 sts (EE_Parameter+112)+2,r26
350 02f8 B093 0000 sts (EE_Parameter+112)+3,r27
351 02fc 6CE7 ldi r22,lo8(124)
352 02fe 70E0 ldi r23,hi8(124)
353 0300 80E0 ldi r24,lo8(EE_Parameter)
354 0302 90E0 ldi r25,hi8(EE_Parameter)
355 0304 0E94 0000 call RAM_Checksum
356 0308 8093 0000 sts EE_Parameter+124,r24
357 /* epilogue: frame size=0 */
358 030c 0895 ret
359 /* epilogue end (size=1) */
360 /* function ParamSet_DefaultSet1 size 53 (52) */
362 .data
363 .LC0:
364 0000 4E6F 726D .string "Normal"
364 616C 00
365 .text
366 .global ParamSet_DefaultSet2
368 ParamSet_DefaultSet2:
369 /* prologue: frame size=0 */
370 030e CF93 push r28
371 0310 DF93 push r29
372 /* prologue end (size=2) */
373 0312 0E94 0000 call CommonDefaults
374 0316 88E0 ldi r24,lo8(8)
375 0318 8093 0000 sts EE_Parameter+23,r24
376 031c 30E1 ldi r19,lo8(16)
377 031e 3093 0000 sts EE_Parameter+24,r19
378 0322 26E0 ldi r18,lo8(6)
379 0324 2093 0000 sts EE_Parameter+25,r18
380 0328 94E6 ldi r25,lo8(100)
381 032a 9093 0000 sts EE_Parameter+30,r25
382 032e 88E7 ldi r24,lo8(120)
383 0330 8093 0000 sts EE_Parameter+31,r24
384 0334 9093 0000 sts EE_Parameter+33,r25
385 0338 8093 0000 sts EE_Parameter+34,r24
386 033c 2093 0000 sts EE_Parameter+35,r18
387 0340 3093 0000 sts EE_Parameter+40,r19
388 0344 86E4 ldi r24,lo8(70)
389 0346 8093 0000 sts EE_Parameter+64,r24
390 034a 8093 0000 sts EE_Parameter+69,r24
391 034e A0E0 ldi r26,lo8(EE_Parameter+112)
392 0350 B0E0 ldi r27,hi8(EE_Parameter+112)
393 0352 E0E0 ldi r30,lo8(.LC0)
394 0354 F0E0 ldi r31,hi8(.LC0)
395 0356 ED01 movw r28,r26
396 0358 0190 ld __tmp_reg__,Z+
397 035a 0992 st Y+,__tmp_reg__
398 035c 2A95 dec r18
399 035e 01F4 brne .-8
400 0360 6CE7 ldi r22,lo8(124)
401 0362 70E0 ldi r23,hi8(124)
402 0364 CD01 movw r24,r26
403 0366 8057 subi r24,lo8(-(-112))
404 0368 9040 sbci r25,hi8(-(-112))
405 036a 0E94 0000 call RAM_Checksum
406 036e 8093 0000 sts EE_Parameter+124,r24
407 /* epilogue: frame size=0 */
408 0372 DF91 pop r29
409 0374 CF91 pop r28
410 0376 0895 ret
411 /* epilogue end (size=3) */
412 /* function ParamSet_DefaultSet2 size 53 (48) */
414 .global ParamSet_DefaultSet3
416 ParamSet_DefaultSet3:
417 /* prologue: frame size=0 */
418 /* prologue end (size=0) */
419 0378 0E94 0000 call CommonDefaults
420 037c 26E0 ldi r18,lo8(6)
421 037e 2093 0000 sts EE_Parameter+23,r18
422 0382 8AE0 ldi r24,lo8(10)
423 0384 8093 0000 sts EE_Parameter+24,r24
424 0388 84E0 ldi r24,lo8(4)
425 038a 8093 0000 sts EE_Parameter+25,r24
426 038e 94E6 ldi r25,lo8(100)
427 0390 9093 0000 sts EE_Parameter+30,r25
428 0394 88E7 ldi r24,lo8(120)
429 0396 8093 0000 sts EE_Parameter+31,r24
430 039a 9093 0000 sts EE_Parameter+33,r25
431 039e 8093 0000 sts EE_Parameter+34,r24
432 03a2 2093 0000 sts EE_Parameter+35,r18
433 03a6 80E1 ldi r24,lo8(16)
434 03a8 8093 0000 sts EE_Parameter+40,r24
435 03ac 86E4 ldi r24,lo8(70)
436 03ae 8093 0000 sts EE_Parameter+64,r24
437 03b2 8093 0000 sts EE_Parameter+69,r24
438 03b6 85E4 ldi r24,lo8(2037604677)
439 03b8 91E6 ldi r25,hi8(2037604677)
440 03ba A3E7 ldi r26,hlo8(2037604677)
441 03bc B9E7 ldi r27,hhi8(2037604677)
442 03be 8093 0000 sts EE_Parameter+112,r24
443 03c2 9093 0000 sts (EE_Parameter+112)+1,r25
444 03c6 A093 0000 sts (EE_Parameter+112)+2,r26
445 03ca B093 0000 sts (EE_Parameter+112)+3,r27
446 03ce 6CE7 ldi r22,lo8(124)
447 03d0 70E0 ldi r23,hi8(124)
448 03d2 80E0 ldi r24,lo8(EE_Parameter)
449 03d4 90E0 ldi r25,hi8(EE_Parameter)
450 03d6 0E94 0000 call RAM_Checksum
451 03da 8093 0000 sts EE_Parameter+124,r24
452 /* epilogue: frame size=0 */
453 03de 0895 ret
454 /* epilogue end (size=1) */
455 /* function ParamSet_DefaultSet3 size 52 (51) */
457 .global GetParamByte
459 GetParamByte:
460 /* prologue: frame size=0 */
461 /* prologue end (size=0) */
462 .L40:
463 03e0 F999 sbic 63-0x20,1
464 03e2 00C0 rjmp .L40
465 03e4 92BD out (65)+1-0x20,r25
466 03e6 81BD out 65-0x20,r24
467 /* #APP */
468 /* START EEPROM READ CRITICAL SECTION */
469 03e8 F89A sbi 31, 0
470 03ea 80B5 in r24, 32
471 /* END EEPROM READ CRITICAL SECTION */
472
473 /* #NOAPP */
474 03ec 9927 clr r25
475 /* epilogue: frame size=0 */
476 03ee 0895 ret
477 /* epilogue end (size=1) */
478 /* function GetParamByte size 16 (15) */
480 .global SetParamByte
482 SetParamByte:
483 /* prologue: frame size=0 */
484 /* prologue end (size=0) */
485 .L45:
486 03f0 F999 sbic 63-0x20,1
487 03f2 00C0 rjmp .L45
488 03f4 1FBA out 63-0x20,__zero_reg__
489 03f6 92BD out (65)+1-0x20,r25
490 03f8 81BD out 65-0x20,r24
491 03fa 60BD out 64-0x20,r22
492 /* #APP */
493 /* START EEPROM WRITE CRITICAL SECTION */
494 03fc 0FB6 in r0, 63
495 03fe F894 cli
496 0400 FA9A sbi 31, 2
497 0402 F99A sbi 31, 1
498 0404 0FBE out 63, r0
499 /* END EEPROM WRITE CRITICAL SECTION */
500 /* #NOAPP */
501 /* epilogue: frame size=0 */
502 0406 0895 ret
503 /* epilogue end (size=1) */
504 /* function SetParamByte size 21 (20) */
506 .global GetParamWord
508 GetParamWord:
509 /* prologue: frame size=0 */
510 /* prologue end (size=0) */
511 0408 60E0 ldi r22,lo8(pm(eeprom_read_byte))
512 040a 70E0 ldi r23,hi8(pm(eeprom_read_byte))
513 040c 0E94 0000 call __eerd_word
514 /* epilogue: frame size=0 */
515 0410 0895 ret
516 /* epilogue end (size=1) */
517 /* function GetParamWord size 5 (4) */
519 .global SetParamWord
521 SetParamWord:
522 /* prologue: frame size=0 */
523 /* prologue end (size=0) */
524 0412 40E0 ldi r20,lo8(pm(eeprom_write_byte))
525 0414 50E0 ldi r21,hi8(pm(eeprom_write_byte))
526 0416 0E94 0000 call __eewr_word
527 /* epilogue: frame size=0 */
528 041a 0895 ret
529 /* epilogue end (size=1) */
530 /* function SetParamWord size 5 (4) */
532 .global ParamSet_ReadFromEEProm
534 ParamSet_ReadFromEEProm:
535 /* prologue: frame size=0 */
536 041c EF92 push r14
537 041e FF92 push r15
538 0420 0F93 push r16
539 0422 1F93 push r17
540 0424 CF93 push r28
541 /* prologue end (size=5) */
542 0426 C82F mov r28,r24
543 0428 8150 subi r24,lo8(-(-1))
544 042a 8530 cpi r24,lo8(5)
545 042c 00F0 brlo .L54
546 042e C3E0 ldi r28,lo8(3)
547 .L54:
548 0430 8DE7 ldi r24,lo8(125)
549 0432 C89F mul r28,r24
550 0434 8001 movw r16,r0
551 0436 1124 clr r1
552 0438 87EE ldi r24,lo8(-25)
553 043a E82E mov r14,r24
554 043c 8FEF ldi r24,hi8(-25)
555 043e F82E mov r15,r24
556 0440 E00E add r14,r16
557 0442 F11E adc r15,r17
558 0444 6CE7 ldi r22,lo8(124)
559 0446 70E0 ldi r23,hi8(124)
560 0448 C701 movw r24,r14
561 044a 0E94 0000 call EEProm_Checksum
562 044e 682F mov r22,r24
563 0450 9801 movw r18,r16
564 0452 2D59 subi r18,lo8(-(99))
565 0454 3F4F sbci r19,hi8(-(99))
566 .L56:
567 0456 8FB3 in r24,63-0x20
568 0458 9927 clr r25
569 045a AC01 movw r20,r24
570 045c 4270 andi r20,lo8(2)
571 045e 5070 andi r21,hi8(2)
572 0460 81FD sbrc r24,1
573 0462 00C0 rjmp .L56
574 0464 32BD out (65)+1-0x20,r19
575 0466 21BD out 65-0x20,r18
576 /* #APP */
577 /* START EEPROM READ CRITICAL SECTION */
578 0468 F89A sbi 31, 0
579 046a 80B5 in r24, 32
580 /* END EEPROM READ CRITICAL SECTION */
581
582 /* #NOAPP */
583 046c 8617 cp r24,r22
584 046e 01F0 breq .L61
585 0470 CA01 movw r24,r20
586 0472 00C0 rjmp .L53
587 .L61:
588 0474 8FB3 in r24,63-0x20
589 0476 9927 clr r25
590 0478 9C01 movw r18,r24
591 047a 2270 andi r18,lo8(2)
592 047c 3070 andi r19,hi8(2)
593 047e 81FD sbrc r24,1
594 0480 00C0 rjmp .L61
595 0482 F2BC out (65)+1-0x20,r15
596 0484 E1BC out 65-0x20,r14
597 /* #APP */
598 /* START EEPROM READ CRITICAL SECTION */
599 0486 F89A sbi 31, 0
600 0488 80B5 in r24, 32
601 /* END EEPROM READ CRITICAL SECTION */
602
603 /* #NOAPP */
604 048a 8C35 cpi r24,lo8(92)
605 048c 01F0 breq .L60
606 048e C901 movw r24,r18
607 0490 00C0 rjmp .L53
608 .L60:
609 0492 8DE7 ldi r24,lo8(125)
610 0494 C89F mul r28,r24
611 0496 C001 movw r24,r0
612 0498 1124 clr r1
613 049a 4997 sbiw r24,25
614 049c 20E0 ldi r18,lo8(pm(eeprom_read_byte))
615 049e 30E0 ldi r19,hi8(pm(eeprom_read_byte))
616 04a0 4DE7 ldi r20,lo8(125)
617 04a2 50E0 ldi r21,hi8(125)
618 04a4 BC01 movw r22,r24
619 04a6 80E0 ldi r24,lo8(EE_Parameter)
620 04a8 90E0 ldi r25,hi8(EE_Parameter)
621 04aa 0E94 0000 call __eerd_block
622 04ae 0E94 0000 call LED_Init
623 04b2 0E94 0000 call LIBFC_HoTT_Clear
624 04b6 81E0 ldi r24,lo8(1)
625 04b8 90E0 ldi r25,hi8(1)
626 .L53:
627 /* epilogue: frame size=0 */
628 04ba CF91 pop r28
629 04bc 1F91 pop r17
630 04be 0F91 pop r16
631 04c0 FF90 pop r15
632 04c2 EF90 pop r14
633 04c4 0895 ret
634 /* epilogue end (size=6) */
635 /* function ParamSet_ReadFromEEProm size 101 (90) */
637 .global SetActiveParamSet
639 SetActiveParamSet:
640 /* prologue: frame size=0 */
641 /* prologue end (size=0) */
642 04c6 282F mov r18,r24
643 04c8 8630 cpi r24,lo8(6)
644 04ca 00F0 brlo .L67
645 04cc 25E0 ldi r18,lo8(5)
646 04ce 00C0 rjmp .L69
647 .L67:
648 04d0 8823 tst r24
649 04d2 01F4 brne .L69
650 04d4 21E0 ldi r18,lo8(1)
651 .L69:
652 04d6 F999 sbic 63-0x20,1
653 04d8 00C0 rjmp .L69
654 04da 1FBA out 63-0x20,__zero_reg__
655 04dc 82E0 ldi r24,lo8(2)
656 04de 90E0 ldi r25,hi8(2)
657 04e0 92BD out (65)+1-0x20,r25
658 04e2 81BD out 65-0x20,r24
659 04e4 20BD out 64-0x20,r18
660 /* #APP */
661 /* START EEPROM WRITE CRITICAL SECTION */
662 04e6 0FB6 in r0, 63
663 04e8 F894 cli
664 04ea FA9A sbi 31, 2
665 04ec F99A sbi 31, 1
666 04ee 0FBE out 63, r0
667 /* END EEPROM WRITE CRITICAL SECTION */
668 /* #NOAPP */
669 /* epilogue: frame size=0 */
670 04f0 0895 ret
671 /* epilogue end (size=1) */
672 /* function SetActiveParamSet size 31 (30) */
674 .global ParamSet_WriteToEEProm
676 ParamSet_WriteToEEProm:
677 /* prologue: frame size=0 */
678 04f2 CF93 push r28
679 /* prologue end (size=1) */
680 04f4 C82F mov r28,r24
681 04f6 8091 0000 lds r24,EE_Parameter
682 04fa 8C35 cpi r24,lo8(92)
683 04fc 01F0 breq .+2
684 04fe 00C0 rjmp .L74
685 0500 C630 cpi r28,lo8(6)
686 0502 00F0 brlo .L75
687 0504 C5E0 ldi r28,lo8(5)
688 0506 00C0 rjmp .L76
689 .L75:
690 0508 CC23 tst r28
691 050a 01F4 brne .+2
692 050c 00C0 rjmp .L74
693 .L76:
694 050e 0E94 0000 call LIBFC_CheckSettings
695 0512 8091 0000 lds r24,EE_Parameter+111
696 0516 82FF sbrs r24,2
697 0518 00C0 rjmp .L77
698 051a 8091 0000 lds r24,EE_Parameter+37
699 051e 8436 cpi r24,lo8(100)
700 0520 00F0 brlo .L77
701 0522 80E5 ldi r24,lo8(80)
702 0524 8093 0000 sts EE_Parameter+37,r24
703 .L77:
704 0528 6CE7 ldi r22,lo8(124)
705 052a 70E0 ldi r23,hi8(124)
706 052c 80E0 ldi r24,lo8(EE_Parameter)
707 052e 90E0 ldi r25,hi8(EE_Parameter)
708 0530 0E94 0000 call RAM_Checksum
709 0534 8093 0000 sts EE_Parameter+124,r24
710 0538 8DE7 ldi r24,lo8(125)
711 053a C89F mul r28,r24
712 053c C001 movw r24,r0
713 053e 1124 clr r1
714 0540 20E0 ldi r18,lo8(pm(eeprom_write_byte))
715 0542 30E0 ldi r19,hi8(pm(eeprom_write_byte))
716 0544 4DE7 ldi r20,lo8(125)
717 0546 50E0 ldi r21,hi8(125)
718 0548 60E0 ldi r22,lo8(EE_Parameter)
719 054a 70E0 ldi r23,hi8(EE_Parameter)
720 054c 4997 sbiw r24,25
721 054e 0E94 0000 call __eewr_block
722 0552 20E0 ldi r18,lo8(pm(eeprom_write_byte))
723 0554 30E0 ldi r19,hi8(pm(eeprom_write_byte))
724 0556 4CE0 ldi r20,lo8(12)
725 0558 50E0 ldi r21,hi8(12)
726 055a 60E0 ldi r22,lo8(EE_Parameter+1)
727 055c 70E0 ldi r23,hi8(EE_Parameter+1)
728 055e 80E5 ldi r24,lo8(80)
729 0560 90E0 ldi r25,hi8(80)
730 0562 0E94 0000 call __eewr_block
731 0566 6CE0 ldi r22,lo8(12)
732 0568 70E0 ldi r23,hi8(12)
733 056a 80E0 ldi r24,lo8(EE_Parameter+1)
734 056c 90E0 ldi r25,hi8(EE_Parameter+1)
735 056e 0E94 0000 call RAM_Checksum
736 0572 282F mov r18,r24
737 .L81:
738 0574 F999 sbic 63-0x20,1
739 0576 00C0 rjmp .L81
740 0578 1FBA out 63-0x20,__zero_reg__
741 057a 8CE5 ldi r24,lo8(92)
742 057c 90E0 ldi r25,hi8(92)
743 057e 92BD out (65)+1-0x20,r25
744 0580 81BD out 65-0x20,r24
745 0582 20BD out 64-0x20,r18
746 /* #APP */
747 /* START EEPROM WRITE CRITICAL SECTION */
748 0584 0FB6 in r0, 63
749 0586 F894 cli
750 0588 FA9A sbi 31, 2
751 058a F99A sbi 31, 1
752 058c 0FBE out 63, r0
753 /* END EEPROM WRITE CRITICAL SECTION */
754 /* #NOAPP */
755 058e 8C2F mov r24,r28
756 0590 0E94 0000 call SetActiveParamSet
757 0594 0E94 0000 call LED_Init
758 0598 0E94 0000 call LIBFC_HoTT_Clear
759 059c 81E0 ldi r24,lo8(1)
760 059e 90E0 ldi r25,hi8(1)
761 05a0 00C0 rjmp .L73
762 .L74:
763 05a2 80E0 ldi r24,lo8(0)
764 05a4 90E0 ldi r25,hi8(0)
765 .L73:
766 /* epilogue: frame size=0 */
767 05a6 CF91 pop r28
768 05a8 0895 ret
769 /* epilogue end (size=2) */
770 /* function ParamSet_WriteToEEProm size 101 (98) */
772 .global MixerTable_ReadFromEEProm
774 MixerTable_ReadFromEEProm:
775 /* prologue: frame size=0 */
776 /* prologue end (size=0) */
777 05aa 6DE4 ldi r22,lo8(77)
778 05ac 70E0 ldi r23,hi8(77)
779 05ae 88EE ldi r24,lo8(1000)
780 05b0 93E0 ldi r25,hi8(1000)
781 05b2 0E94 0000 call EEProm_Checksum
782 05b6 482F mov r20,r24
783 .L87:
784 05b8 8FB3 in r24,63-0x20
785 05ba 9927 clr r25
786 05bc 9C01 movw r18,r24
787 05be 2270 andi r18,lo8(2)
788 05c0 3070 andi r19,hi8(2)
789 05c2 81FD sbrc r24,1
790 05c4 00C0 rjmp .L87
791 05c6 85E3 ldi r24,lo8(1077)
792 05c8 94E0 ldi r25,hi8(1077)
793 05ca 92BD out (65)+1-0x20,r25
794 05cc 81BD out 65-0x20,r24
795 /* #APP */
796 /* START EEPROM READ CRITICAL SECTION */
797 05ce F89A sbi 31, 0
798 05d0 80B5 in r24, 32
799 /* END EEPROM READ CRITICAL SECTION */
800
801 /* #NOAPP */
802 05d2 8417 cp r24,r20
803 05d4 01F4 brne .L97
804 .L92:
805 05d6 8FB3 in r24,63-0x20
806 05d8 9927 clr r25
807 05da 9C01 movw r18,r24
808 05dc 2270 andi r18,lo8(2)
809 05de 3070 andi r19,hi8(2)
810 05e0 81FD sbrc r24,1
811 05e2 00C0 rjmp .L92
812 05e4 88EE ldi r24,lo8(1000)
813 05e6 93E0 ldi r25,hi8(1000)
814 05e8 92BD out (65)+1-0x20,r25
815 05ea 81BD out 65-0x20,r24
816 /* #APP */
817 /* START EEPROM READ CRITICAL SECTION */
818 05ec F89A sbi 31, 0
819 05ee 80B5 in r24, 32
820 /* END EEPROM READ CRITICAL SECTION */
821
822 /* #NOAPP */
823 05f0 8130 cpi r24,lo8(1)
824 05f2 01F0 breq .L91
825 .L97:
826 05f4 C901 movw r24,r18
827 05f6 0895 ret
828 .L91:
829 05f8 20E0 ldi r18,lo8(pm(eeprom_read_byte))
830 05fa 30E0 ldi r19,hi8(pm(eeprom_read_byte))
831 05fc 4EE4 ldi r20,lo8(78)
832 05fe 50E0 ldi r21,hi8(78)
833 0600 68EE ldi r22,lo8(1000)
834 0602 73E0 ldi r23,hi8(1000)
835 0604 80E0 ldi r24,lo8(Mixer)
836 0606 90E0 ldi r25,hi8(Mixer)
837 0608 0E94 0000 call __eerd_block
838 060c 81E0 ldi r24,lo8(1)
839 060e 90E0 ldi r25,hi8(1)
840 0610 0895 ret
841 /* epilogue: frame size=0 */
842 /* epilogue: noreturn */
843 /* epilogue end (size=0) */
844 /* function MixerTable_ReadFromEEProm size 68 (68) */
846 .global MixerTable_WriteToEEProm
848 MixerTable_WriteToEEProm:
849 /* prologue: frame size=0 */
850 /* prologue end (size=0) */
851 0612 8091 0000 lds r24,Mixer
852 0616 8130 cpi r24,lo8(1)
853 0618 01F4 brne .L99
854 061a 6DE4 ldi r22,lo8(77)
855 061c 70E0 ldi r23,hi8(77)
856 061e 80E0 ldi r24,lo8(Mixer)
857 0620 90E0 ldi r25,hi8(Mixer)
858 0622 0E94 0000 call RAM_Checksum
859 0626 8093 0000 sts Mixer+77,r24
860 062a 20E0 ldi r18,lo8(pm(eeprom_write_byte))
861 062c 30E0 ldi r19,hi8(pm(eeprom_write_byte))
862 062e 4EE4 ldi r20,lo8(78)
863 0630 50E0 ldi r21,hi8(78)
864 0632 60E0 ldi r22,lo8(Mixer)
865 0634 70E0 ldi r23,hi8(Mixer)
866 0636 88EE ldi r24,lo8(1000)
867 0638 93E0 ldi r25,hi8(1000)
868 063a 0E94 0000 call __eewr_block
869 063e 81E0 ldi r24,lo8(1)
870 0640 90E0 ldi r25,hi8(1)
871 0642 0895 ret
872 .L99:
873 0644 80E0 ldi r24,lo8(0)
874 0646 90E0 ldi r25,hi8(0)
875 0648 0895 ret
876 /* epilogue: frame size=0 */
877 /* epilogue: noreturn */
878 /* epilogue end (size=0) */
879 /* function MixerTable_WriteToEEProm size 28 (28) */
881 .data
882 .LC1:
883 0007 5175 6164 .string "Quadro"
883 726F 00
884 000e 00 .string ""
885 000f 00 .string ""
886 0010 00 .string ""
887 0011 00 .string ""
888 0012 00 .string ""
889 0013 00 .string ""
890 .text
891 .global MixerTable_Default
893 MixerTable_Default:
894 /* prologue: frame size=0 */
895 064a CF93 push r28
896 064c DF93 push r29
897 /* prologue end (size=2) */
898 064e 81E0 ldi r24,lo8(1)
899 0650 8093 0000 sts Mixer,r24
900 0654 E0E0 ldi r30,lo8(Mixer)
901 0656 F0E0 ldi r31,hi8(Mixer)
902 0658 8FE0 ldi r24,lo8(15)
903 .L106:
904 065a 1586 std Z+13,__zero_reg__
905 065c 1686 std Z+14,__zero_reg__
906 065e 1786 std Z+15,__zero_reg__
907 0660 108A std Z+16,__zero_reg__
908 0662 8150 subi r24,lo8(-(-1))
909 0664 3496 adiw r30,4
910 0666 87FF sbrs r24,7
911 0668 00C0 rjmp .L106
912 066a 80E4 ldi r24,lo8(64)
913 066c 8093 0000 sts Mixer+13,r24
914 0670 8093 0000 sts Mixer+14,r24
915 0674 1092 0000 sts Mixer+15,__zero_reg__
916 0678 8093 0000 sts Mixer+16,r24
917 067c 8093 0000 sts Mixer+17,r24
918 0680 90EC ldi r25,lo8(-64)
919 0682 9093 0000 sts Mixer+18,r25
920 0686 1092 0000 sts Mixer+19,__zero_reg__
921 068a 8093 0000 sts Mixer+20,r24
922 068e 8093 0000 sts Mixer+21,r24
923 0692 1092 0000 sts Mixer+22,__zero_reg__
924 0696 9093 0000 sts Mixer+23,r25
925 069a 9093 0000 sts Mixer+24,r25
926 069e 8093 0000 sts Mixer+25,r24
927 06a2 1092 0000 sts Mixer+26,__zero_reg__
928 06a6 8093 0000 sts Mixer+27,r24
929 06aa 9093 0000 sts Mixer+28,r25
930 06ae A0E0 ldi r26,lo8(Mixer+1)
931 06b0 B0E0 ldi r27,hi8(Mixer+1)
932 06b2 8CE0 ldi r24,lo8(12)
933 06b4 E0E0 ldi r30,lo8(.LC1)
934 06b6 F0E0 ldi r31,hi8(.LC1)
935 06b8 ED01 movw r28,r26
936 06ba 0190 ld __tmp_reg__,Z+
937 06bc 0992 st Y+,__tmp_reg__
938 06be 8A95 dec r24
939 06c0 01F4 brne .-8
940 06c2 6DE4 ldi r22,lo8(77)
941 06c4 70E0 ldi r23,hi8(77)
942 06c6 CD01 movw r24,r26
943 06c8 0197 sbiw r24,1
944 06ca 0E94 0000 call RAM_Checksum
945 06ce 8093 0000 sts Mixer+77,r24
946 /* epilogue: frame size=0 */
947 06d2 DF91 pop r29
948 06d4 CF91 pop r28
949 06d6 0895 ret
950 /* epilogue end (size=3) */
951 /* function MixerTable_Default size 71 (66) */
953 .global GetActiveParamSet
955 GetActiveParamSet:
956 /* prologue: frame size=0 */
957 /* prologue end (size=0) */
958 .L110:
959 06d8 F999 sbic 63-0x20,1
960 06da 00C0 rjmp .L110
961 06dc 82E0 ldi r24,lo8(2)
962 06de 90E0 ldi r25,hi8(2)
963 06e0 92BD out (65)+1-0x20,r25
964 06e2 81BD out 65-0x20,r24
965 /* #APP */
966 /* START EEPROM READ CRITICAL SECTION */
967 06e4 F89A sbi 31, 0
968 06e6 80B5 in r24, 32
969 /* END EEPROM READ CRITICAL SECTION */
970
971 /* #NOAPP */
972 06e8 282F mov r18,r24
973 06ea 8630 cpi r24,lo8(6)
974 06ec 00F0 brlo .L114
975 06ee 23E0 ldi r18,lo8(3)
976 06f0 322F mov r19,r18
977 .L115:
978 06f2 F999 sbic 63-0x20,1
979 06f4 00C0 rjmp .L115
980 06f6 1FBA out 63-0x20,__zero_reg__
981 06f8 82E0 ldi r24,lo8(2)
982 06fa 90E0 ldi r25,hi8(2)
983 06fc 92BD out (65)+1-0x20,r25
984 06fe 81BD out 65-0x20,r24
985 0700 30BD out 64-0x20,r19
986 /* #APP */
987 /* START EEPROM WRITE CRITICAL SECTION */
988 0702 0FB6 in r0, 63
989 0704 F894 cli
990 0706 FA9A sbi 31, 2
991 0708 F99A sbi 31, 1
992 070a 0FBE out 63, r0
993 /* END EEPROM WRITE CRITICAL SECTION */
994 /* #NOAPP */
995 .L114:
996 070c 822F mov r24,r18
997 070e 9927 clr r25
998 /* epilogue: frame size=0 */
999 0710 0895 ret
1000 /* epilogue end (size=1) */
1001 /* function GetActiveParamSet size 46 (45) */
1003 .global SetDefaultParameter
1005 SetDefaultParameter:
1006 /* prologue: frame size=0 */
1007 0712 1F93 push r17
1008 0714 CF93 push r28
1009 /* prologue end (size=2) */
1010 0716 C82F mov r28,r24
1011 0718 162F mov r17,r22
1012 071a 8630 cpi r24,lo8(6)
1013 071c 00F0 brlo .L120
1014 071e C5E0 ldi r28,lo8(5)
1015 0720 00C0 rjmp .L121
1016 .L120:
1017 0722 8823 tst r24
1018 0724 01F4 brne .L121
1019 0726 C1E0 ldi r28,lo8(1)
1020 .L121:
1021 0728 8C2F mov r24,r28
1022 072a 9927 clr r25
1023 072c 8230 cpi r24,2
1024 072e 9105 cpc r25,__zero_reg__
1025 0730 01F0 breq .L125
1026 0732 8330 cpi r24,3
1027 0734 9105 cpc r25,__zero_reg__
1028 0736 04F4 brge .L127
1029 0738 0197 sbiw r24,1
1030 073a 01F4 brne .L127
1031 073c 0E94 0000 call ParamSet_DefaultSet1
1032 0740 00C0 rjmp .L123
1033 .L125:
1034 0742 0E94 0000 call ParamSet_DefaultSet2
1035 0746 00C0 rjmp .L123
1036 .L127:
1037 0748 0E94 0000 call ParamSet_DefaultSet3
1038 .L123:
1039 074c 1123 tst r17
1040 074e 01F0 breq .L129
1041 0750 6CE0 ldi r22,lo8(12)
1042 0752 70E0 ldi r23,hi8(12)
1043 0754 80E5 ldi r24,lo8(80)
1044 0756 90E0 ldi r25,hi8(80)
1045 0758 0E94 0000 call EEProm_Checksum
1046 075c 282F mov r18,r24
1047 .L131:
1048 075e F999 sbic 63-0x20,1
1049 0760 00C0 rjmp .L131
1050 0762 8CE5 ldi r24,lo8(92)
1051 0764 90E0 ldi r25,hi8(92)
1052 0766 92BD out (65)+1-0x20,r25
1053 0768 81BD out 65-0x20,r24
1054 /* #APP */
1055 /* START EEPROM READ CRITICAL SECTION */
1056 076a F89A sbi 31, 0
1057 076c 80B5 in r24, 32
1058 /* END EEPROM READ CRITICAL SECTION */
1059
1060 /* #NOAPP */
1061 076e 8217 cp r24,r18
1062 0770 01F4 brne .L129
1063 0772 20E0 ldi r18,lo8(pm(eeprom_read_byte))
1064 0774 30E0 ldi r19,hi8(pm(eeprom_read_byte))
1065 0776 4CE0 ldi r20,lo8(12)
1066 0778 50E0 ldi r21,hi8(12)
1067 077a 60E5 ldi r22,lo8(80)
1068 077c 70E0 ldi r23,hi8(80)
1069 077e 80E0 ldi r24,lo8(EE_Parameter+1)
1070 0780 90E0 ldi r25,hi8(EE_Parameter+1)
1071 0782 0E94 0000 call __eerd_block
1072 0786 00C0 rjmp .L137
1073 .L129:
1074 0788 0E94 0000 call ParamSet_DefaultStickMapping
1075 .L137:
1076 078c 8C2F mov r24,r28
1077 078e 0E94 0000 call ParamSet_WriteToEEProm
1078 /* epilogue: frame size=0 */
1079 0792 CF91 pop r28
1080 0794 1F91 pop r17
1081 0796 0895 ret
1082 /* epilogue end (size=3) */
1083 /* function SetDefaultParameter size 76 (71) */
1085 .section .progmem.data,"a",@progbits
1088 __c.0:
1089 0000 0A0D 4765 .string "\n\rGenerating default Parameter Set %d"
1089 6E65 7261
1089 7469 6E67
1089 2064 6566
1089 6175 6C74
1092 __c.1:
1093 0026 0A0D 5573 .string "\n\rUsing Parameter Set %d"
1093 696E 6720
1093 5061 7261
1093 6D65 7465
1093 7220 5365
1096 __c.2:
1097 003f 0A0D 4765 .string "\n\rGenerating default Mixer Table"
1097 6E65 7261
1097 7469 6E67
1097 2064 6566
1097 6175 6C74
1100 __c.3:
1101 0060 0A0D 4D69 .string "\n\rMixer-Config: '%s' (%u Motors)"
1101 7865 722D
1101 436F 6E66
1101 6967 3A20
1101 2725 7327
1102 .text
1103 .global ParamSet_Init
1105 ParamSet_Init:
1106 /* prologue: frame size=0 */
1107 0798 DF92 push r13
1108 079a EF92 push r14
1109 079c FF92 push r15
1110 079e 0F93 push r16
1111 07a0 1F93 push r17
1112 07a2 CF93 push r28
1113 /* prologue end (size=6) */
1114 07a4 FF24 clr r15
1115 07a6 DF2C mov r13,r15
1116 07a8 EF2C mov r14,r15
1117 07aa 81E0 ldi r24,lo8(1)
1118 07ac 90E0 ldi r25,hi8(1)
1119 07ae 0E94 0000 call GetParamByte
1120 07b2 8C35 cpi r24,lo8(92)
1121 07b4 01F0 breq .L139
1122 07b6 31E0 ldi r19,lo8(1)
1123 07b8 E32E mov r14,r19
1124 .L139:
1125 07ba 6CE0 ldi r22,lo8(12)
1126 07bc 70E0 ldi r23,hi8(12)
1127 07be 80E5 ldi r24,lo8(80)
1128 07c0 90E0 ldi r25,hi8(80)
1129 07c2 0E94 0000 call EEProm_Checksum
1130 07c6 C82F mov r28,r24
1131 .L141:
1132 07c8 F999 sbic 63-0x20,1
1133 07ca 00C0 rjmp .L141
1134 07cc 8CE5 ldi r24,lo8(92)
1135 07ce 90E0 ldi r25,hi8(92)
1136 07d0 92BD out (65)+1-0x20,r25
1137 07d2 81BD out 65-0x20,r24
1138 /* #APP */
1139 /* START EEPROM READ CRITICAL SECTION */
1140 07d4 F89A sbi 31, 0
1141 07d6 80B5 in r24, 32
1142 /* END EEPROM READ CRITICAL SECTION */
1143
1144 /* #NOAPP */
1145 07d8 8C17 cp r24,r28
1146 07da 01F4 brne .L140
1147 07dc 21E0 ldi r18,lo8(1)
1148 07de D22E mov r13,r18
1149 .L140:
1150 07e0 C1E0 ldi r28,lo8(1)
1151 07e2 01E0 ldi r16,lo8(1)
1152 07e4 10E0 ldi r17,hi8(1)
1153 .L159:
1154 07e6 EE20 tst r14
1155 07e8 01F4 brne .L149
1156 07ea 8C2F mov r24,r28
1157 07ec 0E94 0000 call ParamSet_ReadFromEEProm
1158 07f0 8823 tst r24
1159 07f2 01F4 brne .L147
1160 .L149:
1161 07f4 91E0 ldi r25,lo8(1)
1162 07f6 F92E mov r15,r25
1163 07f8 1F93 push r17
1164 07fa 0F93 push r16
1165 07fc 80E0 ldi r24,lo8(__c.0)
1166 07fe 90E0 ldi r25,hi8(__c.0)
1167 0800 9F93 push r25
1168 0802 8F93 push r24
1169 0804 80E0 ldi r24,lo8(pm(uart_putchar))
1170 0806 90E0 ldi r25,hi8(pm(uart_putchar))
1171 0808 9F93 push r25
1172 080a 8F93 push r24
1173 080c E091 0000 lds r30,_printf_P
1174 0810 F091 0000 lds r31,(_printf_P)+1
1175 0814 0995 icall
1176 0816 2DB7 in r18,__SP_L__
1177 0818 3EB7 in r19,__SP_H__
1178 081a 2A5F subi r18,lo8(-(6))
1179 081c 3F4F sbci r19,hi8(-(6))
1180 081e 2DBF out __SP_L__,r18
1181 0820 0230 cpi r16,2
1182 0822 1105 cpc r17,__zero_reg__
1183 0824 01F0 breq .L152
1184 0826 0330 cpi r16,3
1185 0828 1105 cpc r17,__zero_reg__
1186 082a 04F4 brge .L154
1187 082c 0130 cpi r16,1
1188 082e 1105 cpc r17,__zero_reg__
1189 0830 01F4 brne .L154
1190 0832 0E94 0000 call ParamSet_DefaultSet1
1191 0836 00C0 rjmp .L150
1192 .L152:
1193 0838 0E94 0000 call ParamSet_DefaultSet2
1194 083c 00C0 rjmp .L150
1195 .L154:
1196 083e 0E94 0000 call ParamSet_DefaultSet3
1197 .L150:
1198 0842 DD20 tst r13
1199 0844 01F0 breq .L156
1200 0846 20E0 ldi r18,lo8(pm(eeprom_read_byte))
1201 0848 30E0 ldi r19,hi8(pm(eeprom_read_byte))
1202 084a 4CE0 ldi r20,lo8(12)
1203 084c 50E0 ldi r21,hi8(12)
1204 084e 60E5 ldi r22,lo8(80)
1205 0850 70E0 ldi r23,hi8(80)
1206 0852 80E0 ldi r24,lo8(EE_Parameter+1)
1207 0854 90E0 ldi r25,hi8(EE_Parameter+1)
1208 0856 0E94 0000 call __eerd_block
1209 085a 00C0 rjmp .L158
1210 .L156:
1211 085c 0E94 0000 call ParamSet_DefaultStickMapping
1212 .L158:
1213 0860 8C2F mov r24,r28
1214 0862 0E94 0000 call ParamSet_WriteToEEProm
1215 .L147:
1216 0866 CF5F subi r28,lo8(-(1))
1217 0868 0F5F subi r16,lo8(-(1))
1218 086a 1F4F sbci r17,hi8(-(1))
1219 086c C630 cpi r28,lo8(6)
1220 086e 00F4 brsh .+2
1221 0870 00C0 rjmp .L159
1222 0872 FF20 tst r15
1223 0874 01F0 breq .L160
1224 0876 83E0 ldi r24,lo8(3)
1225 0878 0E94 0000 call SetActiveParamSet
1226 .L160:
1227 087c 0E94 0000 call GetActiveParamSet
1228 0880 C82F mov r28,r24
1229 0882 0E94 0000 call ParamSet_ReadFromEEProm
1230 0886 8C2F mov r24,r28
1231 0888 9927 clr r25
1232 088a 9F93 push r25
1233 088c 8F93 push r24
1234 088e 80E0 ldi r24,lo8(__c.1)
1235 0890 90E0 ldi r25,hi8(__c.1)
1236 0892 9F93 push r25
1237 0894 8F93 push r24
1238 0896 00E0 ldi r16,lo8(pm(uart_putchar))
1239 0898 10E0 ldi r17,hi8(pm(uart_putchar))
1240 089a 1F93 push r17
1241 089c 0F93 push r16
1242 089e E091 0000 lds r30,_printf_P
1243 08a2 F091 0000 lds r31,(_printf_P)+1
1244 08a6 0995 icall
1245 08a8 81E0 ldi r24,lo8(1)
1246 08aa 90E0 ldi r25,hi8(1)
1247 08ac 0E94 0000 call GetParamByte
1248 08b0 2DB7 in r18,__SP_L__
1249 08b2 3EB7 in r19,__SP_H__
1250 08b4 2A5F subi r18,lo8(-(6))
1251 08b6 3F4F sbci r19,hi8(-(6))
1252 08b8 2DBF out __SP_L__,r18
1253 08ba 8F3F cpi r24,lo8(-1)
1254 08bc 01F0 breq .L162
1255 08be 0E94 0000 call MixerTable_ReadFromEEProm
1256 08c2 8823 tst r24
1257 08c4 01F4 brne .L161
1258 .L162:
1259 08c6 80E0 ldi r24,lo8(__c.2)
1260 08c8 90E0 ldi r25,hi8(__c.2)
1261 08ca 9F93 push r25
1262 08cc 8F93 push r24
1263 08ce 1F93 push r17
1264 08d0 0F93 push r16
1265 08d2 E091 0000 lds r30,_printf_P
1266 08d6 F091 0000 lds r31,(_printf_P)+1
1267 08da 0995 icall
1268 08dc 0E94 0000 call MixerTable_Default
1269 08e0 0E94 0000 call MixerTable_WriteToEEProm
1270 08e4 0F90 pop __tmp_reg__
1271 08e6 0F90 pop __tmp_reg__
1272 08e8 0F90 pop __tmp_reg__
1273 08ea 0F90 pop __tmp_reg__
1274 .L161:
1275 08ec EE20 tst r14
1276 08ee 01F0 breq .L163
1277 08f0 6CE5 ldi r22,lo8(92)
1278 08f2 81E0 ldi r24,lo8(1)
1279 08f4 90E0 ldi r25,hi8(1)
1280 08f6 0E94 0000 call SetParamByte
1281 .L163:
1282 08fa 1092 0000 sts RequiredMotors,__zero_reg__
1283 08fe 90E0 ldi r25,lo8(0)
1284 0900 E0E0 ldi r30,lo8(Mixer+13)
1285 0902 F0E0 ldi r31,hi8(Mixer+13)
1286 0904 CFE0 ldi r28,lo8(15)
1287 .L168:
1288 0906 8081 ld r24,Z
1289 0908 3496 adiw r30,4
1290 090a 1816 cp __zero_reg__,r24
1291 090c 04F4 brge .L166
1292 090e 9F5F subi r25,lo8(-(1))
1293 .L166:
1294 0910 C150 subi r28,lo8(-(-1))
1295 0912 C7FF sbrs r28,7
1296 0914 00C0 rjmp .L168
1297 0916 9093 0000 sts RequiredMotors,r25
1298 091a 892F mov r24,r25
1299 091c 9927 clr r25
1300 091e 9F93 push r25
1301 0920 8F93 push r24
1302 0922 80E0 ldi r24,lo8(Mixer+1)
1303 0924 90E0 ldi r25,hi8(Mixer+1)
1304 0926 9F93 push r25
1305 0928 8F93 push r24
1306 092a 80E0 ldi r24,lo8(__c.3)
1307 092c 90E0 ldi r25,hi8(__c.3)
1308 092e 9F93 push r25
1309 0930 8F93 push r24
1310 0932 1F93 push r17
1311 0934 0F93 push r16
1312 0936 E091 0000 lds r30,_printf_P
1313 093a F091 0000 lds r31,(_printf_P)+1
1314 093e 0995 icall
1315 0940 0E94 0000 call PrintLine
1316 0944 8DB7 in r24,__SP_L__
1317 0946 9EB7 in r25,__SP_H__
1318 0948 0896 adiw r24,8
1319 094a 8DBF out __SP_L__,r24
1320 /* epilogue: frame size=0 */
1321 094c CF91 pop r28
1322 094e 1F91 pop r17
1323 0950 0F91 pop r16
1324 0952 FF90 pop r15
1325 0954 EF90 pop r14
1326 0956 DF90 pop r13
1327 0958 0895 ret
1328 /* epilogue end (size=7) */
1329 /* function ParamSet_Init size 233 (220) */
1331 .comm Mixer,78,1
1332 .comm RequiredMotors,1,1
1333 .comm EE_Parameter,125,1
1334 /* File "eeprom.c": code 1323 = 0x052b (1267), prologues 18, epilogues 38 */
DEFINED SYMBOLS
*ABS*:00000000 eeprom.c
C:\Temp/ccwtIpkf.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccwtIpkf.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccwtIpkf.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccwtIpkf.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccwtIpkf.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccwtIpkf.s:12 .text:00000000 eeprom_read_byte
C:\Temp/ccwtIpkf.s:34 .text:00000010 eeprom_write_byte
C:\Temp/ccwtIpkf.s:60 .text:00000028 RAM_Checksum
C:\Temp/ccwtIpkf.s:88 .text:0000004a EEProm_Checksum
C:\Temp/ccwtIpkf.s:128 .text:0000007a ParamSet_DefaultStickMapping
*COM*:0000007d EE_Parameter
C:\Temp/ccwtIpkf.s:162 .text:000000c4 CommonDefaults
C:\Temp/ccwtIpkf.s:320 .text:000002a4 ParamSet_DefaultSet1
C:\Temp/ccwtIpkf.s:368 .text:0000030e ParamSet_DefaultSet2
C:\Temp/ccwtIpkf.s:416 .text:00000378 ParamSet_DefaultSet3
C:\Temp/ccwtIpkf.s:459 .text:000003e0 GetParamByte
C:\Temp/ccwtIpkf.s:482 .text:000003f0 SetParamByte
C:\Temp/ccwtIpkf.s:508 .text:00000408 GetParamWord
C:\Temp/ccwtIpkf.s:521 .text:00000412 SetParamWord
C:\Temp/ccwtIpkf.s:534 .text:0000041c ParamSet_ReadFromEEProm
C:\Temp/ccwtIpkf.s:639 .text:000004c6 SetActiveParamSet
C:\Temp/ccwtIpkf.s:676 .text:000004f2 ParamSet_WriteToEEProm
C:\Temp/ccwtIpkf.s:774 .text:000005aa MixerTable_ReadFromEEProm
*COM*:0000004e Mixer
C:\Temp/ccwtIpkf.s:848 .text:00000612 MixerTable_WriteToEEProm
C:\Temp/ccwtIpkf.s:893 .text:0000064a MixerTable_Default
C:\Temp/ccwtIpkf.s:955 .text:000006d8 GetActiveParamSet
C:\Temp/ccwtIpkf.s:1005 .text:00000712 SetDefaultParameter
C:\Temp/ccwtIpkf.s:1088 .progmem.data:00000000 __c.0
C:\Temp/ccwtIpkf.s:1092 .progmem.data:00000026 __c.1
C:\Temp/ccwtIpkf.s:1096 .progmem.data:0000003f __c.2
C:\Temp/ccwtIpkf.s:1100 .progmem.data:00000060 __c.3
C:\Temp/ccwtIpkf.s:1105 .text:00000798 ParamSet_Init
*COM*:00000001 RequiredMotors
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
PlatinenVersion
__eerd_word
__eewr_word
__eerd_block
LED_Init
LIBFC_HoTT_Clear
LIBFC_CheckSettings
__eewr_block
uart_putchar
_printf_P
PrintLine
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/fc.c
0,0 → 1,1947
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "mymath.h"
#include "isqrt.h"
 
unsigned char h,m,s;
unsigned int BaroExpandActive = 0;
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll;
int TrimNick, TrimRoll;
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
int Mittelwert_AccNick, Mittelwert_AccRoll;
unsigned int NeutralAccX=0, NeutralAccY=0;
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0;
int NeutralAccZ = 0;
unsigned char ControlHeading = 0;// in 2°
long IntegralNick = 0,IntegralNick2 = 0;
long IntegralRoll = 0,IntegralRoll2 = 0;
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
long Integral_Gier = 0;
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
long SummeNick=0,SummeRoll=0;
volatile long Mess_Integral_Hoch = 0;
int KompassValue = -1;
int KompassSollWert = 0;
//int KompassRichtung = 0;
char CalculateCompassTimer = 100;
unsigned char KompassFusion = 32;
unsigned int KompassSignalSchlecht = 50;
unsigned char MAX_GAS,MIN_GAS;
unsigned char HoehenReglerAktiv = 0;
unsigned char TrichterFlug = 0;
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
long ErsatzKompass;
int ErsatzKompassInGrad; // Kompasswert in Grad
int GierGyroFehler = 0;
char GyroFaktor,GyroFaktorGier;
char IntegralFaktor,IntegralFaktorGier;
int DiffNick,DiffRoll;
int StickGasHover = 120, HoverGasMin = 0, HoverGasMax = 1023;
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0;
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0;
unsigned char Poti[9] = {0,0,0,0,0,0,0,0};
volatile unsigned char SenderOkay = 0;
char MotorenEin = 0,StartTrigger = 0;
long HoehenWert = 0;
long SollHoehe = 0;
signed int AltitudeSetpointTrimming = 0;
long FromNC_AltitudeSetpoint = 0;
unsigned char FromNC_AltitudeSpeed = 0;
unsigned char carefree_old = 50; // to make the Beep when switching
signed char WaypointTrimming = 0;
int CompassGierSetpoint = 0;
unsigned char CalibrationDone = 0;
char NeueKompassRichtungMerken = 0;
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0;
//float Ki = FAKTOR_I;
int Ki = 10300 / 33;
unsigned char Looping_Nick = 0,Looping_Roll = 0;
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_HoehenSchalter = 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_Hoehe_GPS_Z = 64; // Wert : 0-250
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-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_UserParam5 = 0;
unsigned char Parameter_UserParam6 = 0;
unsigned char Parameter_UserParam7 = 0;
unsigned char Parameter_UserParam8 = 0;
unsigned char Parameter_ServoNickControl = 100;
unsigned char Parameter_ServoRollControl = 100;
unsigned char Parameter_LoopGasLimit = 70;
unsigned char Parameter_AchsKopplung1 = 90;
unsigned char Parameter_AchsKopplung2 = 65;
unsigned char Parameter_CouplingYawCorrection = 64;
//unsigned char Parameter_AchsGegenKopplung1 = 0;
unsigned char Parameter_DynamicStability = 100;
unsigned char Parameter_J16Bitmask; // for the J16 Output
unsigned char Parameter_J16Timing; // for the J16 Output
unsigned char Parameter_J17Bitmask; // for the J17 Output
unsigned char Parameter_J17Timing; // for the J17 Output
unsigned char Parameter_NaviGpsModeControl; // Parameters for the Naviboard
unsigned char Parameter_NaviGpsGain;
unsigned char Parameter_NaviGpsP;
unsigned char Parameter_NaviGpsI;
unsigned char Parameter_NaviGpsD;
unsigned char Parameter_NaviGpsACC;
unsigned char Parameter_NaviOperatingRadius;
unsigned char Parameter_NaviWindCorrection;
unsigned char Parameter_NaviSpeedCompensation;
unsigned char Parameter_ExternalControl;
unsigned char Parameter_GlobalConfig;
unsigned char Parameter_ExtraConfig;
unsigned char Parameter_MaximumAltitude;
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5;
unsigned char CareFree = 0;
const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps
 
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
int MaxStickNick = 0,MaxStickRoll = 0;
unsigned int modell_fliegt = 0;
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0;
long GIER_GRAD_FAKTOR = 1291;
signed int KopplungsteilNickRoll,KopplungsteilRollNick;
signed int tmp_motorwert[MAX_MOTORS];
char VarioCharacter = ' ';
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void CopyDebugValues(void)
{
DebugOut.Analog[0] = IntegralNick / (EE_Parameter.GyroAccFaktor * 4);
DebugOut.Analog[1] = IntegralRoll / (EE_Parameter.GyroAccFaktor * 4);
DebugOut.Analog[2] = Mittelwert_AccNick / 4;
DebugOut.Analog[3] = Mittelwert_AccRoll / 4;
DebugOut.Analog[4] = SollHoehe/5;
DebugOut.Analog[5] = HoehenWert/5;
DebugOut.Analog[6] = KompassValue;
DebugOut.Analog[7] = KompassSollWert;
DebugOut.Analog[8] = Capacity.ActualCurrent;
DebugOut.Analog[9] = UBat;
DebugOut.Analog[10] = Motor[0].SetPoint;
DebugOut.Analog[11] = Motor[1].SetPoint;
DebugOut.Analog[12] = Motor[2].SetPoint;
DebugOut.Analog[13] = Motor[3].SetPoint;
DebugOut.Analog[14] = Motor[4].SetPoint;
DebugOut.Analog[15] = Motor[5].SetPoint;
DebugOut.Analog[16] = SenderOkay;
DebugOut.Analog[17] = ErsatzKompass / GIER_GRAD_FAKTOR;
DebugOut.Analog[18] = (signed int) AdNeutralGier - AdWertGier;
DebugOut.Analog[19] = 0;
DebugOut.Analog[20] = ServoNickValue;
DebugOut.Analog[21] = 0;
DebugOut.Analog[22] = 0;
DebugOut.Analog[23] = Capacity.UsedCapacity;
DebugOut.Analog[24] = Capacity.MinOfMaxPWM;
DebugOut.Analog[25] = 0;
DebugOut.Analog[26] = 0;
DebugOut.Analog[27] = 0;
DebugOut.Analog[28] = AdWertAccHoch;//(Mess_Integral_Hoch / 512);// Aktuell_az;
DebugOut.Analog[29] = 0;
DebugOut.Analog[30] = GPS_Nick;
DebugOut.Analog[31] = GPS_Roll;
 
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe;
}
 
 
 
void Piep(unsigned char Anzahl, unsigned int dauer)
{
unsigned int wait = 0;
if(MotorenEin) return; //auf keinen Fall im Flug!
GRN_OFF;
while(Anzahl--)
{
beeptime = dauer;
wait = dauer;
while(beeptime || wait)
{
if(UpdateMotor)
{
UpdateMotor = 0;
if(!beeptime) wait--;
LIBFC_Polling();
};
}
}
GRN_ON;
}
 
//############################################################################
// Messwerte beim Ermitteln der Nullage
void CalibrierMittelwert(void)
//############################################################################
{
unsigned char i;
if(PlatinenVersion == 13) SucheGyroOffset();
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
ANALOG_OFF;
MesswertNick = AdWertNick;
MesswertRoll = AdWertRoll;
MesswertGier = AdWertGier;
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick;
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll;
// ADC einschalten
ANALOG_ON;
for(i=0;i<8;i++)
{
int tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127;
LIMIT_MIN_MAX(tmp, 0, 255);
if(Poti[i] > tmp) Poti[i]--; else if(Poti[i] < tmp) Poti[i]++;
}
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
}
 
//############################################################################
// Nullwerte ermitteln
void SetNeutral(unsigned char AccAdjustment)
//############################################################################
{
unsigned char i;
unsigned int gier_neutral=0, nick_neutral=0, roll_neutral=0;
VersionInfo.HardwareError[0] = 0;
// HEF4017Reset_ON;
NeutralAccX = 0;
NeutralAccY = 0;
NeutralAccZ = 0;
 
AdNeutralNick = 0;
AdNeutralRoll = 0;
AdNeutralGier = 0;
 
Parameter_AchsKopplung1 = 0;
Parameter_AchsKopplung2 = 0;
 
ExpandBaro = 0;
 
CalibrierMittelwert();
Delay_ms_Mess(100);
 
CalibrierMittelwert();
 
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
#define NEUTRAL_FILTER 32
for(i=0; i<NEUTRAL_FILTER; i++)
{
Delay_ms_Mess(10);
gier_neutral += AdWertGier;
nick_neutral += AdWertNick;
roll_neutral += AdWertRoll;
}
AdNeutralNick= (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8);
AdNeutralRoll= (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8);
AdNeutralGier= (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER);
 
StartNeutralRoll = AdNeutralRoll;
StartNeutralNick = AdNeutralNick;
 
if(AccAdjustment)
{
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
NeutralAccZ = Aktuell_az;
 
// Save ACC neutral settings to eeprom
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX);
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY);
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ);
}
else
{
// restore from eeprom
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK);
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL);
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP);
// strange settings?
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048) || ((unsigned int) NeutralAccZ > 1024))
{
printf("\n\rACC not calibrated!\r\n");
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
NeutralAccZ = Aktuell_az;
}
}
 
MesswertNick = 0;
MesswertRoll = 0;
MesswertGier = 0;
Delay_ms_Mess(100);
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick;
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll;
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
Mess_IntegralNick = IntegralNick;
Mess_IntegralRoll = IntegralRoll;
Mess_Integral_Gier = 0;
StartLuftdruck = Luftdruck;
VarioMeter = 0;
Mess_Integral_Hoch = 0;
KompassSollWert = KompassValue;
KompassSignalSchlecht = 100;
beeptime = 50;
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L;
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L;
ExternHoehenValue = 0;
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
GierGyroFehler = 0;
LED_Init();
FC_StatusFlags |= FC_STATUS_CALIBRATE;
FromNaviCtrl_Value.Kalman_K = -1;
FromNaviCtrl_Value.Kalman_MaxDrift = 0;
FromNaviCtrl_Value.Kalman_MaxFusion = 32;
for(i=0;i<8;i++)
{
Poti[i] = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127;
}
SenderOkay = 100;
if(ServoActive)
{
DDRD |=0x80; // enable J7 -> Servo signal
}
else
{
// if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4
// else
NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4
}
 
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; };
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; };
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; };
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; };
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; };
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; };
carefree_old = 70;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
}
 
 
//############################################################################
// Bearbeitet die Messwerte
void Mittelwert(void)
//############################################################################
{
static signed long tmpl,tmpl2,tmpl3,tmpl4;
static signed int oldNick, oldRoll, d2Roll, d2Nick;
signed long winkel_nick, winkel_roll;
MesswertGier = (signed int) AdNeutralGier - AdWertGier;
MesswertNick = (signed int) AdWertNickFilter / 8;
MesswertRoll = (signed int) AdWertRollFilter / 8;
RohMesswertNick = MesswertNick;
RohMesswertRoll = MesswertRoll;
 
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L;
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L;
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
NaviAccNick += AdWertAccNick;
NaviAccRoll += AdWertAccRoll;
NaviCntAcc++;
IntegralAccZ += Aktuell_az - NeutralAccZ;
 
//++++++++++++++++++++++++++++++++++++++++++++++++
// ADC einschalten
ANALOG_ON;
AdReady = 0;
//++++++++++++++++++++++++++++++++++++++++++++++++
 
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L;
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L;
else winkel_roll = Mess_IntegralRoll;
 
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L;
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L;
else winkel_nick = Mess_IntegralNick;
 
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_Integral_Gier += MesswertGier;
ErsatzKompass += MesswertGier;
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
{
tmpl3 = (MesswertRoll * winkel_nick) / 2048L;
tmpl3 *= Parameter_AchsKopplung2; //65
tmpl3 /= 4096L;
tmpl4 = (MesswertNick * winkel_roll) / 2048L;
tmpl4 *= Parameter_AchsKopplung2; //65
tmpl4 /= 4096L;
KopplungsteilNickRoll = tmpl3;
KopplungsteilRollNick = tmpl4;
tmpl4 -= tmpl3;
ErsatzKompass += tmpl4;
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen
 
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L;
tmpl *= Parameter_AchsKopplung1; // 90
tmpl /= 4096L;
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L;
tmpl2 *= Parameter_AchsKopplung1;
tmpl2 /= 4096L;
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1;
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256;
}
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0;
TrimRoll = tmpl - tmpl2 / 100L;
TrimNick = -tmpl2 + tmpl / 100L;
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_IntegralRoll2 += MesswertRoll + TrimRoll;
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll;
if(Mess_IntegralRoll > Umschlag180Roll)
{
Mess_IntegralRoll = -(Umschlag180Roll - 25000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(Mess_IntegralRoll <-Umschlag180Roll)
{
Mess_IntegralRoll = (Umschlag180Roll - 25000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_IntegralNick2 += MesswertNick + TrimNick;
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick;
if(Mess_IntegralNick > Umschlag180Nick)
{
Mess_IntegralNick = -(Umschlag180Nick - 25000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(Mess_IntegralNick <-Umschlag180Nick)
{
Mess_IntegralNick = (Umschlag180Nick - 25000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
 
Integral_Gier = Mess_Integral_Gier;
IntegralNick = Mess_IntegralNick;
IntegralRoll = Mess_IntegralRoll;
IntegralNick2 = Mess_IntegralNick2;
IntegralRoll2 = Mess_IntegralRoll2;
 
#define D_LIMIT 128
 
MesswertNick = HiResNick / 8;
MesswertRoll = HiResRoll / 8;
 
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000;
if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; }
else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; }
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000;
if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; }
else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; }
 
if(Parameter_Gyro_D)
{
d2Nick = HiResNick - oldNick;
oldNick = (oldNick + HiResNick)/2;
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT;
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT;
 
d2Roll = HiResRoll - oldRoll;
oldRoll = (oldRoll + HiResRoll)/2;
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT;
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT;
 
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16;
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16;
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D);
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D);
}
 
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L;
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L;
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L;
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L;
 
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll)
{
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256);
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256);
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256);
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256);
}
}
 
//############################################################################
// Senden der Motorwerte per I2C-Bus
void SendMotorData(void)
//############################################################################
{
unsigned char i;
if(!MotorenEin)
{
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY);
for(i=0;i<MAX_MOTORS;i++)
{
if(!PC_MotortestActive) MotorTest[i] = 0;
Motor[i].SetPoint = MotorTest[i];
Motor[i].SetPointLowerBits = 0;
/*
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution
Motor[i].SetPointLowerBits = MotorTest[i] % 4;
*/
}
if(PC_MotortestActive) PC_MotortestActive--;
}
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN;
 
if(I2C_TransferActive)
{
I2C_TransferActive = 0; // enable for the next time
}
else
{
motor_write = 0;
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode
}
}
 
 
 
//############################################################################
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
unsigned char tmp,i;
for(i=0;i<8;i++)
{
int tmp2;
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i];
tmp2 = PPM_in[tmp] + 127;
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0;
 
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter
else
if(tmp2 != Poti[i])
{
Poti[i] += (tmp2 - Poti[i]) / 4;
if(Poti[i] > tmp2) Poti[i]--;
else Poti[i]++;
}
}
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255);
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255);
 
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;} // Out1 (J16)
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;}
else CHK_POTI(Parameter_Servo3,EE_Parameter.Servo3);
 
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;}
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;} // Out2 (J17)
else CHK_POTI(Parameter_Servo4,EE_Parameter.Servo4);
 
CHK_POTI(Parameter_Servo5,EE_Parameter.Servo5);
CHK_POTI(Parameter_HoehenSchalter,EE_Parameter.MaxHoehe);
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung);
CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z);
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung);
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I);
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D);
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P);
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I);
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor);
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1);
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2);
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3);
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4);
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5);
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6);
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7);
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl);
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl);
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit);
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1);
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2);
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection);
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude);
if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude;
Parameter_GlobalConfig = EE_Parameter.GlobalConfig;
Parameter_ExtraConfig = EE_Parameter.ExtraConfig;
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability);
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl);
Ki = 10300 / (Parameter_I_Faktor + 1);
MAX_GAS = EE_Parameter.Gas_Max;
MIN_GAS = EE_Parameter.Gas_Min;
 
tmp = EE_Parameter.CareFreeModeControl;
if(tmp > 50)
{
CareFree = 1;
if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0;
if(carefree_old != CareFree)
{
if(carefree_old < 3)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; }
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; }
#else
if(CareFree) beeptime = 1500;
else beeptime = 200;
#endif
NeueKompassRichtungMerken = 5;
carefree_old = CareFree;
} else carefree_old--;
}
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE;
}
else
{
CareFree = 0;
carefree_old = 10;
}
 
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert
{
beeptime = 15000;
BeepMuster = 0xA400;
CareFree = 0;
}
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE;
}
 
//############################################################################
//
void MotorRegler(void)
//############################################################################
{
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2;
int GierMischanteil,GasMischanteil;
static long sollGier = 0,tmp_long,tmp_long2;
static long IntegralFehlerNick = 0;
static long IntegralFehlerRoll = 0;
static unsigned int RcLostTimer;
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static signed char move_safety_switch = 0;
static long ausgleichNick, ausgleichRoll;
int IntegralNickMalFaktor,IntegralRollMalFaktor;
unsigned char i;
Mittelwert();
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE)))
{
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE)
{
if(HoverGas && HoverGas < 150 * STICK_GAIN)
{
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas
}
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet
} else HooverGasEmergencyPercent = EE_Parameter.NotGas;
}
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed
{
StickGas = 0; // Hold Gas down in that case
HooverGasEmergencyPercent = MIN_GAS;
}
GasMischanteil = StickGas;
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Empfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE))
{
if(RcLostTimer) RcLostTimer--;
else
{
MotorenEin = 0;
modell_fliegt = 0;
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY);
}
ROT_ON;
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken
{
GasMischanteil = HooverGasEmergencyPercent;
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING;
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
}
else
{
MotorenEin = 0;
}
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
{
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING;
RcLostTimer = EE_Parameter.NotGasZeit * 50;
if(GasMischanteil > 40 && MotorenEin)
{
if(modell_fliegt < 0xffff) modell_fliegt++;
}
if((modell_fliegt < 256))
{
SummeNick = 0;
SummeRoll = 0;
sollGier = 0;
Mess_Integral_Gier = 0;
} else FC_StatusFlags |= FC_STATUS_FLY;
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
unsigned char setting=1;
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;
SetActiveParamSet(setting); // aktiven Datensatz merken
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70)
{
WinkelOut.CalcState = 1;
CalibrationDone = 0;
beeptime = 1000;
}
else
{
ParamSet_ReadFromEEProm(GetActiveParamSet());
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
// ServoActive = 0;
SetNeutral(0);
CalibrationDone = 1;
ServoActive = 1;
DDRD |=0x80; // enable J7 -> Servo signal
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_CALIBRATE;
#endif
Piep(GetActiveParamSet(),120);
}
}
}
else
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern
{
if(++delay_neutral > 200) // nicht sofort
{
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
SetNeutral(1);
CalibrationDone = 1;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_CALIBRATE;
#endif
Piep(GetActiveParamSet(),120);
}
}
else delay_neutral = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gas ist unten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 35-120)
{
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100;
else
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100;
// Motoren Starten
if(!MotorenEin)
{
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100)))
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START;
if(++delay_einschalten > 253)
{
delay_einschalten = 0;
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode)
{
modell_fliegt = 1;
MotorenEin = 1;
sollGier = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
SummeNick = 0;
SummeRoll = 0;
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2;
NeueKompassRichtungMerken = 100; // 2 sekunden
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_STARTING;
#endif
}
else
{
beeptime = 1500; // indicate missing calibration
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION;
#endif
}
}
}
else delay_einschalten = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
else // only if motors are running
{
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0))
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100)))
{
if(++delay_ausschalten > 250) // nicht sofort
{
MotorenEin = 0;
delay_ausschalten = 0;
modell_fliegt = 0;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_MK_OFF;
#endif
}
}
else delay_ausschalten = 0;
}
if(GasIsZeroCnt < 1000) GasIsZeroCnt++;
}
else // gas not at minimum
{
move_safety_switch = 0;
GasIsZeroCnt = 0;
}
}
else // Empfang zwischen 100 und 140 -> schlecht
{
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost
{
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed?
{
GasIsZeroCnt = 30000;
if(modell_fliegt > 1001) modell_fliegt = 1001;
}
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
static int stick_nick,stick_roll;
unsigned char stick_p;
ParameterZuordnung();
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4;
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4;
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// CareFree und freie Wahl der vorderen Richtung
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CareFree)
{
signed int nick, roll;
nick = stick_nick / 4;
roll = stick_roll / 4;
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4);
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4);
}
else
{
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6];
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle];
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8;
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8;
}
 
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
if(StickGier > 4) StickGier -= 4; else
if(StickGier < -4) StickGier += 4; else StickGier = 0;
 
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger
{
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16;
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16;
}
 
StickNick -= GPS_Nick;
StickRoll -= GPS_Roll;
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127;
 
GyroFaktor = (Parameter_Gyro_P + 10.0);
IntegralFaktor = Parameter_Gyro_I;
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0);
IntegralFaktorGier = Parameter_Gyro_Gier_I;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ Analoge Steuerung per Seriell
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128)
{
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P;
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P;
StickGier += ExternControl.Gier;
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung;
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas;
}
if(StickGas < 0) StickGas = 0;
 
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
 
if(abs(StickNick/STICK_GAIN) > MaxStickNick)
{
MaxStickNick = abs(StickNick)/STICK_GAIN;
if(MaxStickNick > 100) MaxStickNick = 100;
}
else MaxStickNick--;
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll)
{
MaxStickRoll = abs(StickRoll)/STICK_GAIN;
if(MaxStickRoll > 100) MaxStickRoll = 100;
}
else MaxStickRoll--;
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Looping?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1;
else
{
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1;
else
{
if(Looping_Rechts) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0;
}
}
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1;
else
{
if(Looping_Oben) // Hysterese
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1;
else
{
if(Looping_Unten) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0;
}
}
 
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0;
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0;
} // Ende neue Funken-Werte
 
if(Looping_Roll || Looping_Nick)
{
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit;
TrichterFlug = 1;
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)
{
StickNick = -GPS_Nick;
StickRoll = -GPS_Roll;
StickGas = StickGasHover;
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER);
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV;
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP);
Parameter_HoehenSchalter = 200; // switch on
}
else
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)
{
StickGier = 0;
StickNick = 0;
StickRoll = 0;
GyroFaktor = 90;
IntegralFaktor = 120;
GyroFaktorGier = 90;
IntegralFaktorGier = 120;
Looping_Roll = 0;
Looping_Nick = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ABGLEICH_ANZAHL 256L
 
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
MittelIntegralNick2 += IntegralNick2;
MittelIntegralRoll2 += IntegralRoll2;
 
if(Looping_Nick || Looping_Roll)
{
IntegralAccNick = 0;
IntegralAccRoll = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
Mess_IntegralNick2 = Mess_IntegralNick;
Mess_IntegralRoll2 = Mess_IntegralRoll;
ZaehlMessungen = 0;
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin))
{
long tmp_long, tmp_long2;
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/)
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN));
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR));
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
if((MaxStickNick > 64) || (MaxStickRoll > 64))
{
tmp_long /= 2;
tmp_long2 /= 2;
}
/* if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
{
tmp_long /= 3;
tmp_long2 /= 3;
}
*/ if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
}
else
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long /= 16;
tmp_long2 /= 16;
if((MaxStickNick > 64) || (MaxStickRoll > 64))
{
tmp_long /= 3;
tmp_long2 /= 3;
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
{
tmp_long /= 3;
tmp_long2 /= 3;
}
KompassFusion = 25;
#define AUSGLEICH 32
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;
}
 
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
{
static int cnt = 0;
static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp)
{
MittelIntegralNick /= ABGLEICH_ANZAHL;
MittelIntegralRoll /= ABGLEICH_ANZAHL;
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL;
#define MAX_I 0
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
 
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL;
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL;
 
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1))
{
LageKorrekturNick /= 2;
LageKorrekturRoll /= 2;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick2 /= ABGLEICH_ANZAHL;
MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
tmp_long = IntegralNick2 - IntegralNick;
tmp_long2 = IntegralRoll2 - IntegralRoll;
 
IntegralFehlerNick = tmp_long;
IntegralFehlerRoll = tmp_long2;
Mess_IntegralNick2 -= IntegralFehlerNick;
Mess_IntegralRoll2 -= IntegralFehlerRoll;
 
if(EE_Parameter.Driftkomp)
{
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; }
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; }
}
GierGyroFehler = 0;
 
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2)
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16
#define BEWEGUNGS_LIMIT 20000
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4;
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8))
{
if(IntegralFehlerNick > FEHLER_LIMIT2)
{
if(last_n_p)
{
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8);
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick > 5000) ausgleichNick = 5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_p = 1;
} else last_n_p = 0;
if(IntegralFehlerNick < -FEHLER_LIMIT2)
{
if(last_n_n)
{
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8);
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick < -5000) ausgleichNick = -5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_n = 1;
} else last_n_n = 0;
}
else
{
cnt = 0;
KompassSignalSchlecht = 100;
}
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift;
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt;
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt;
 
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerRoll) / 4096;
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4;
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8))
{
if(IntegralFehlerRoll > FEHLER_LIMIT2)
{
if(last_r_p)
{
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8);
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll > 5000) ausgleichRoll = 5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_p = 1;
} else last_r_p = 0;
if(IntegralFehlerRoll < -FEHLER_LIMIT2)
{
if(last_r_n)
{
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8);
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll < -5000) ausgleichRoll = -5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_n = 1;
} else last_r_n = 0;
} else
{
cnt = 0;
KompassSignalSchlecht = 100;
}
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift;
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt;
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt;
}
else
{
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
TrichterFlug = 0;
}
 
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
MittelIntegralRoll_Alt = MittelIntegralRoll;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
IntegralAccNick = 0;
IntegralAccRoll = 0;
IntegralAccZ = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
ZaehlMessungen = 0;
} // ZaehlMessungen >= ABGLEICH_ANZAHL
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 3) // war 15
{
// KompassSignalSchlecht = 1000;
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX))
{
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen
};
}
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4;
tmp_int += CompassGierSetpoint;
sollGier = tmp_int;
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV))
{
if(CalculateCompassTimer-- == 1)
{
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt
CalculateCompassTimer = 13; // falls keine Navi-Daten
// max. Korrekturwert schätzen
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /512);
if(v > w) w = v; // grösste Neigung ermitteln
// korrektur = w / 4 + 1;
korrektur = w / 8 + 2;
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR;
// Kompassfehlerwert bestimmen
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180;
// GIER_GRAD_FAKTOR ist ca. 1200
// Kompasswert einloggen
if(KompassSignalSchlecht) KompassSignalSchlecht--;
else
if(w < 25)
{
GierGyroFehler += fehler;
if(NeueKompassRichtungMerken)
{
if(--NeueKompassRichtungMerken == 0)
{
KompassSollWert = ErsatzKompassInGrad;
}
}
}
// Kompass fusionieren
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur;
// MK Gieren
if(!NeueKompassRichtungMerken)
{
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180;
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten
CompassGierSetpoint = v / 16;
}
else CompassGierSetpoint = 0;
} // CalculateCompassTimer
}
else CompassGierSetpoint = 0;
 
//DebugOut.Analog[16] = KompassFusion;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;};
 
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0;
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0;
 
#define TRIM_MAX 200
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX;
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX;
 
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN));
 
// Maximalwerte abfangen
#define MAX_SENSOR (4096)
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
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen
GasMischanteil *= STICK_GAIN;
// if height control is activated
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick)) // Höhenregelung
{
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
#define OPA_OFFSET_STEP 15
#else
#define OPA_OFFSET_STEP 10
#endif
int HCGas, HeightDeviation = 0,GasReduction = 0;
static int HeightTrimming = 0; // rate for change of height setpoint
static int FilterHCGas = 0;
static unsigned long HoverGasFilter = 0;
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0;
int CosAttitude; // for projection of hoover gas
 
// get the current hooverpoint
DebugOut.Analog[21] = HoverGas;
 
// Expand the measurement
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs
if(!BaroExpandActive)
{
if(MessLuftdruck > 920)
{ // increase offset
if(OCR0A < (255 - OPA_OFFSET_STEP))
{
ExpandBaro -= 1;
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down
beeptime = 300;
BaroExpandActive = 350;
}
else
{
BaroAtLowerLimit = 1;
}
}
// measurement of air pressure close to lower limit and
else
if(MessLuftdruck < 100)
{ // decrease offset
if(OCR0A > OPA_OFFSET_STEP)
{
ExpandBaro += 1;
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up
beeptime = 300;
BaroExpandActive = 350;
}
else
{
BaroAtUpperLimit = 1;
}
}
else
{
BaroAtUpperLimit = 0;
BaroAtLowerLimit = 0;
}
}
else // delay, because of expanding the Baro-Range
{
// now clear the D-values
SummenHoehe = HoehenWert * SM_FILTER;
VarioMeter = 0;
BaroExpandActive--;
}
 
// if height control is activated by an rc channel
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
{ // check if parameter is less than activation threshold
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position
{ //height control not active
if(!delay--)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF;
#endif
HoehenReglerAktiv = 0; // disable height control
SollHoehe = HoehenWert; // update SetPoint with current reading
delay = 1;
}
}
else
if(Parameter_HoehenSchalter > 70)
{ //height control is activated
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON;
#endif
delay = 200;
HoehenReglerAktiv = 1; // enable height control
}
}
else // no switchable height control
{
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung;
HoehenReglerAktiv = 1;
}
// calculate cos of nick and roll angle used for projection of the vertical hoover gas
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude
VarioCharacter = ' ';
AltitudeSetpointTrimming = 0;
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
#define HEIGHT_CONTROL_STICKTHRESHOLD 15
// Holger original version
// start of height control algorithm
// the height control is only an attenuation of the actual gas stick.
// I.e. it will work only if the gas stick is higher than the hover gas
// and the hover height will be allways larger than height setpoint.
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL;
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert)
{ // old version
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control
HeightTrimming = 0;
AltitudeSetpointTrimming = 0;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
}
else
{
// alternative height control
// PD-Control with respect to hoover point
// the thrust loss out of horizontal attitude is compensated
// the setpoint will be fine adjusted with the gas stick position
if(FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying
{ // gas stick is above hoover point
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit)
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN)
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
// Limit the maximum Altitude
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) AltitudeSetpointTrimming = 0;
else
{
// SollHoehe = (long) Parameter_MaximumAltitude * 100L;
// HeightTrimming += abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD));
VarioCharacter = '+';
}
WaypointTrimming = 0;
} // gas stick is below hoover point
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit )
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP)
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
// HeightTrimming -= abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
VarioCharacter = '-';
WaypointTrimming = 0;
}
else // Gas Stick in Hover Range
{
VarioCharacter = '=';
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
AltitudeSetpointTrimming = FromNC_AltitudeSpeed;
//HeightTrimming += FromNC_AltitudeSpeed;
WaypointTrimming = 10;
VarioCharacter = '^';
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
}
else
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed;
//HeightTrimming -= FromNC_AltitudeSpeed;
WaypointTrimming = -10;
VarioCharacter = 'v';
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
}
else
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN))
{
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWert-128), (HoehenWert+128)) // max. 1m Unterschied
else WaypointTrimming = 0;
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
HeightTrimming = 0;
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500;
if(!StartTrigger && HoehenWert > 50)
{
StartTrigger = 1;
}
}
}
// Trim height set point
HeightTrimming += AltitudeSetpointTrimming;
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz
{
if(WaypointTrimming)
{
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint;
else SollHoehe += WaypointTrimming;
}
else
{
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3;
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3;
}
HeightTrimming = 0;
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100;
//update hoover gas stick value when setpoint is shifted
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0)
{
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning;
if(StickGasHover < 70) StickGasHover = 70;
else if(StickGasHover > 150) StickGasHover = 150;
}
}
if(BaroExpandActive) SollHoehe = HoehenWert; // update setpoint to current altitude if Expanding is active
} //if FCFlags & MKFCFLAG_FLY
else
{
SollHoehe = HoehenWert - 400;
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
else StickGasHover = 120;
HoverGas = GasMischanteil;
VarioCharacter = '.';
}
HCGas = HoverGas; // take hover gas (neutral point)
}
if(HoehenWert > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT))
{
// from this point the Heigth Control Algorithm is identical for both versions
if(BaroExpandActive) // baro range expanding active
{
HCGas = HoverGas; // hover while expanding baro adc range
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWert - SollHoehe); // positive when too high
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
HeightDeviation = (int)(tmp_long); // positive when too high
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense
GasReduction = tmp_long;
// ------------------------- D-Part 1: Vario Meter ----------------------------
tmp_int = VarioMeter / 8;
LIMIT_MIN_MAX(tmp_int, -127, 128);
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN);
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint
else
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode
GasReduction += tmp_int;
} // EOF no baro range expanding
// ------------------------ D-Part 2: ACC-Z Integral ------------------------
if(Parameter_Hoehe_ACC_Wirkung)
{
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN);
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_long;
}
// ------------------------ D-Part 3: GpsZ ----------------------------------
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L;
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_int;
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value
// ------------------------ ----------------------------------
HCGas -= GasReduction;
// limit deviation from hoover point within the target region
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero
{
unsigned int tmp;
tmp = abs(HeightDeviation);
if(tmp <= 60)
{
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (tmp - 60) / 32;
if(tmp > 15) tmp = 15;
if(HeightDeviation > 0)
{
tmp = (HoverGasMin * (16 - tmp)) / 16;
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (HoverGasMax * (tmp + 16)) / 16;
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point
}
}
}
// strech control output by inverse attitude projection 1/cos
// + 1/cos(angle) ++++++++++++++++++++++++++
tmp_long2 = (int32_t)HCGas;
tmp_long2 *= 8192L;
tmp_long2 /= CosAttitude;
HCGas = (int16_t)tmp_long2;
// update height control gas averaging
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE;
// limit height control gas pd-control output
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN);
// set GasMischanteil to HeightControlGasFilter
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)
{ // old version
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas
GasMischanteil = FilterHCGas;
}
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode
}
}// EOF height control active
else // HC not active
{
//update hoover gas stick value when HC is not active
if(!EE_Parameter.Hoehe_StickNeutralPoint)
{
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning;
}
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
LIMIT_MIN_MAX(StickGasHover, 70, 150); // reserve some range for trim up and down
FilterHCGas = GasMischanteil;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL;
}
// Hover gas estimation by averaging gas control output on small z-velocities
// this is done only if height contol option is selected in global config and aircraft is flying
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation
if(StartTrigger == 1) StartTrigger = 2;
tmp_long2 = (int32_t)GasMischanteil; // take current thrust
tmp_long2 *= CosAttitude; // apply attitude projection
tmp_long2 /= 8192;
// average vertical projected thrust
if(modell_fliegt < 4000) // the first 8 seconds
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L);
HoverGasFilter += 16L * tmp_long2;
}
if(modell_fliegt < 8000) // the first 16 seconds
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L);
HoverGasFilter += 4L * tmp_long2;
}
else //later
if(abs(VarioMeter) < 100 && abs(HoehenWert - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending)
{
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE;
HoverGasFilter += tmp_long2;
}
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE);
if(EE_Parameter.Hoehe_HoverBand)
{
int16_t band;
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range
HoverGasMin = HoverGas - band;
HoverGasMax = HoverGas + band;
}
else
{ // no limit
HoverGasMin = 0;
HoverGasMax = 1023;
}
}
else
{
StartTrigger = 0;
HoverGasFilter = 0;
HoverGas = 0;
}
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL
else
{
// set undefined state to indicate vario off
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
} // EOF no height control
 
// Linits the maximum gas in case of "Out of Range emergency landing"
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING)
{
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN;
SollHoehe = HoehenWert; // update setpoint to current heigth
beeptime = 15000;
BeepMuster = 0x0E00;
}
// limit gas to parameter setting
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN);
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// all BL-Ctrl connected?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(MissingMotor || Capacity.MinOfMaxPWM != 255 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase
{
modell_fliegt = 1;
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Mischer und PI-Regler
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Analog[7] = GasMischanteil;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gier-Anteil
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren
if(GasMischanteil > MIN_GIERGAS)
{
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2);
}
else
{
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2;
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2);
}
tmp_int = MAX_GAS*STICK_GAIN;
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil));
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil));
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - StickNick; // Differenz bestimmen
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung
else SummeNick += DiffNick; // I-Anteil bei HH
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L);
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN);
 
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern
pd_ergebnis_nick += SummeNick / Ki;
 
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int;
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Roll-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung
else SummeRoll += DiffRoll; // I-Anteil bei HH
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L);
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN);
 
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern
pd_ergebnis_roll += SummeRoll / Ki;
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int;
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Universal Mixer
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for(i=0; i<MAX_MOTORS; i++)
{
signed int tmp_int;
if(Mixer.Motor[i][0] > 0)
{
// Gas
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L;
// Nick
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick;
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick;
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L;
// Roll
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll;
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll;
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L;
// Gier
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil;
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil;
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L;
 
if(tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // MotorSmoothing
// else tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
else
{
if(EE_Parameter.MotorSmooth == 0)
{
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
}
else // 1 means tmp_int = tmp_int;
if(EE_Parameter.MotorSmooth > 1)
{
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value.
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int)/EE_Parameter.MotorSmooth);
}
}
 
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4);
Motor[i].SetPoint = tmp_int / 4;
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total)
tmp_motorwert[i] = tmp_int;
}
else
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
}
//DebugOut.Analog[16]
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/fc.h
0,0 → 1,139
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel
//#define GIER_GRAD_FAKTOR 1160L
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel
#define STICK_GAIN 4
#define ACC_AMPLIFY 6
 
// FC_StatusFlags
#define FC_STATUS_MOTOR_RUN 0x01
#define FC_STATUS_FLY 0x02
#define FC_STATUS_CALIBRATE 0x04
#define FC_STATUS_START 0x08
#define FC_STATUS_EMERGENCY_LANDING 0x10
#define FC_STATUS_LOWBAT 0x20
#define FC_STATUS_VARIO_TRIM_UP 0x40
#define FC_STATUS_VARIO_TRIM_DOWN 0x80
 
// FC_StatusFlags2
#define FC_STATUS2_CAREFREE 0x01
#define FC_STATUS2_ALTITUDE_CONTROL 0x02
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04
#define FC_STATUS2_OUT1_ACTIVE 0x08
#define FC_STATUS2_OUT2_ACTIVE 0x10
 
//NC_To_FC_Flags
#define NC_TO_FC_FLYING_RANGE 0x01
#define NC_TO_FC_EMERGENCY_LANDING 0x02
 
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2;
extern void ParameterZuordnung(void);
 
#define Poti1 Poti[0]
#define Poti2 Poti[1]
#define Poti3 Poti[2]
#define Poti4 Poti[3]
#define Poti5 Poti[4]
#define Poti6 Poti[5]
#define Poti7 Poti[6]
#define Poti8 Poti[7]
 
#define LIMIT_MIN(value, min) {if(value <= min) value = min;}
#define LIMIT_MAX(value, max) {if(value >= max) value = max;}
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;}
 
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];}
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;}
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);}
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);}
 
extern unsigned char Sekunde,Minute;
extern unsigned int BaroExpandActive;
extern long IntegralNick,IntegralNick2;
extern long IntegralRoll,IntegralRoll2;
//extern int IntegralNick,IntegralNick2;
//extern int IntegralRoll,IntegralRoll2;
extern unsigned char Poti[9];
 
extern long Mess_IntegralNick,Mess_IntegralNick2;
extern long Mess_IntegralRoll,Mess_IntegralRoll2;
extern long IntegralAccNick,IntegralAccRoll;
extern long SummeNick,SummeRoll;
extern volatile long Mess_Integral_Hoch;
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern int KompassValue;
extern int KompassSollWert;
extern int KompassRichtung;
extern char CalculateCompassTimer;
extern unsigned char KompassFusion;
extern unsigned char ControlHeading;
extern int TrimNick, TrimRoll;
extern long ErsatzKompass;
extern int ErsatzKompassInGrad; // Kompasswert in Grad
extern long HoehenWert;
extern long SollHoehe;
extern long FromNC_AltitudeSetpoint;
extern unsigned char FromNC_AltitudeSpeed;
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250
extern unsigned char CareFree;
extern int MesswertNick,MesswertRoll,MesswertGier;
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern unsigned int NeutralAccX, NeutralAccY;
extern unsigned char HoehenReglerAktiv;
extern int NeutralAccZ;
extern long Umschlag180Nick, Umschlag180Roll;
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier;
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8;
extern int NaviAccNick,NaviAccRoll,NaviCntAcc;
extern unsigned int modell_fliegt;
extern void MotorRegler(void);
extern void SendMotorData(void);
//void CalibrierMittelwert(void);
//void Mittelwert(void);
extern void SetNeutral(unsigned char AccAdjustment);
extern void Piep(unsigned char Anzahl, unsigned int dauer);
extern void CopyDebugValues(void);
 
extern unsigned char h,m,s;
extern int StickNick,StickRoll,StickGier,StickGas;
extern volatile unsigned char Timeout ;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern int DiffNick,DiffRoll;
//extern int Poti1, Poti2, Poti3, Poti4;
extern volatile unsigned char SenderOkay;
extern int StickNick,StickRoll,StickGier;
extern char MotorenEin;
extern unsigned char CalibrationDone;
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5;
extern char VarioCharacter;
extern signed int AltitudeSetpointTrimming;
extern signed char WaypointTrimming;
extern int HoverGas;
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;
extern unsigned char Parameter_ServoRollControl;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsKopplung2;
//extern unsigned char Parameter_AchsGegenKopplung1;
extern unsigned char Parameter_J16Bitmask; // for the J16 Output
extern unsigned char Parameter_J16Timing; // for the J16 Output
extern unsigned char Parameter_J17Bitmask; // for the J17 Output
extern unsigned char Parameter_J17Timing; // for the J17 Output
extern unsigned char Parameter_GlobalConfig;
extern unsigned char Parameter_ExtraConfig;
extern signed char MixerTable[MAX_MOTORS][4];
extern const signed char sintab[31];
#endif //_FC_H
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/fc.lst
0,0 → 1,11011
1 .file "fc.c"
2 .arch atmega1284p
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 .global GasIsZeroCnt
11 .global GasIsZeroCnt
12 .section .bss
15 GasIsZeroCnt:
16 0000 0000 .skip 2,0
17 .global HooverGasEmergencyPercent
18 .global HooverGasEmergencyPercent
21 HooverGasEmergencyPercent:
22 0002 0000 .skip 2,0
23 .global VarioCharacter
24 .data
27 VarioCharacter:
28 0000 20 .byte 32
29 .global GIER_GRAD_FAKTOR
32 GIER_GRAD_FAKTOR:
33 0001 0B05 0000 .long 1291
34 .global FC_StatusFlags2
35 .global FC_StatusFlags2
36 .section .bss
39 FC_StatusFlags2:
40 0004 00 .skip 1,0
41 .global FC_StatusFlags
42 .global FC_StatusFlags
45 FC_StatusFlags:
46 0005 00 .skip 1,0
47 .global modell_fliegt
48 .global modell_fliegt
51 modell_fliegt:
52 0006 0000 .skip 2,0
53 .global MaxStickRoll
54 .global MaxStickRoll
57 MaxStickRoll:
58 0008 0000 .skip 2,0
59 .global MaxStickNick
60 .global MaxStickNick
63 MaxStickNick:
64 000a 0000 .skip 2,0
65 .global ExternHoehenValue
66 .data
69 ExternHoehenValue:
70 0005 ECFF .word -20
71 .global ExternStickGier
72 .global ExternStickGier
73 .section .bss
76 ExternStickGier:
77 000c 0000 .skip 2,0
78 .global ExternStickRoll
79 .global ExternStickRoll
82 ExternStickRoll:
83 000e 0000 .skip 2,0
84 .global ExternStickNick
85 .global ExternStickNick
88 ExternStickNick:
89 0010 0000 .skip 2,0
90 .global sintab
91 .data
94 sintab:
95 0007 00 .byte 0
96 0008 02 .byte 2
97 0009 04 .byte 4
98 000a 06 .byte 6
99 000b 07 .byte 7
100 000c 08 .byte 8
101 000d 08 .byte 8
102 000e 08 .byte 8
103 000f 07 .byte 7
104 0010 06 .byte 6
105 0011 04 .byte 4
106 0012 02 .byte 2
107 0013 00 .byte 0
108 0014 FE .byte -2
109 0015 FC .byte -4
110 0016 FA .byte -6
111 0017 F9 .byte -7
112 0018 F8 .byte -8
113 0019 F8 .byte -8
114 001a F8 .byte -8
115 001b F9 .byte -7
116 001c FA .byte -6
117 001d FC .byte -4
118 001e FE .byte -2
119 001f 00 .byte 0
120 0020 02 .byte 2
121 0021 04 .byte 4
122 0022 06 .byte 6
123 0023 07 .byte 7
124 0024 08 .byte 8
125 0025 08 .byte 8
126 .global CareFree
127 .global CareFree
128 .section .bss
131 CareFree:
132 0012 00 .skip 1,0
133 .global Parameter_DynamicStability
134 .data
137 Parameter_DynamicStability:
138 0026 64 .byte 100
139 .global Parameter_CouplingYawCorrection
142 Parameter_CouplingYawCorrection:
143 0027 40 .byte 64
144 .global Parameter_AchsKopplung2
147 Parameter_AchsKopplung2:
148 0028 41 .byte 65
149 .global Parameter_AchsKopplung1
152 Parameter_AchsKopplung1:
153 0029 5A .byte 90
154 .global Parameter_LoopGasLimit
157 Parameter_LoopGasLimit:
158 002a 46 .byte 70
159 .global Parameter_ServoRollControl
162 Parameter_ServoRollControl:
163 002b 64 .byte 100
164 .global Parameter_ServoNickControl
167 Parameter_ServoNickControl:
168 002c 64 .byte 100
169 .global Parameter_UserParam8
170 .global Parameter_UserParam8
171 .section .bss
174 Parameter_UserParam8:
175 0013 00 .skip 1,0
176 .global Parameter_UserParam7
177 .global Parameter_UserParam7
180 Parameter_UserParam7:
181 0014 00 .skip 1,0
182 .global Parameter_UserParam6
183 .global Parameter_UserParam6
186 Parameter_UserParam6:
187 0015 00 .skip 1,0
188 .global Parameter_UserParam5
189 .global Parameter_UserParam5
192 Parameter_UserParam5:
193 0016 00 .skip 1,0
194 .global Parameter_UserParam4
195 .global Parameter_UserParam4
198 Parameter_UserParam4:
199 0017 00 .skip 1,0
200 .global Parameter_UserParam3
201 .global Parameter_UserParam3
204 Parameter_UserParam3:
205 0018 00 .skip 1,0
206 .global Parameter_UserParam2
207 .global Parameter_UserParam2
210 Parameter_UserParam2:
211 0019 00 .skip 1,0
212 .global Parameter_UserParam1
213 .global Parameter_UserParam1
216 Parameter_UserParam1:
217 001a 00 .skip 1,0
218 .global Parameter_I_Faktor
219 .data
222 Parameter_I_Faktor:
223 002d 0A .byte 10
224 .global Parameter_Gier_P
227 Parameter_Gier_P:
228 002e 02 .byte 2
229 .global Parameter_Gyro_Gier_I
232 Parameter_Gyro_Gier_I:
233 002f 96 .byte -106
234 .global Parameter_Gyro_Gier_P
237 Parameter_Gyro_Gier_P:
238 0030 96 .byte -106
239 .global Parameter_Gyro_I
242 Parameter_Gyro_I:
243 0031 96 .byte -106
244 .global Parameter_Gyro_P
247 Parameter_Gyro_P:
248 0032 96 .byte -106
249 .global Parameter_Gyro_D
252 Parameter_Gyro_D:
253 0033 08 .byte 8
254 .global Parameter_Hoehe_GPS_Z
257 Parameter_Hoehe_GPS_Z:
258 0034 40 .byte 64
259 .global Parameter_KompassWirkung
262 Parameter_KompassWirkung:
263 0035 40 .byte 64
264 .global Parameter_Hoehe_ACC_Wirkung
267 Parameter_Hoehe_ACC_Wirkung:
268 0036 3A .byte 58
269 .global Parameter_Hoehe_P
272 Parameter_Hoehe_P:
273 0037 10 .byte 16
274 .global Parameter_HoehenSchalter
277 Parameter_HoehenSchalter:
278 0038 FB .byte -5
279 .global Parameter_Luftdruck_D
282 Parameter_Luftdruck_D:
283 0039 30 .byte 48
284 .global Looping_Oben
285 .global Looping_Oben
286 .section .bss
289 Looping_Oben:
290 001b 00 .skip 1,0
291 .global Looping_Unten
292 .global Looping_Unten
295 Looping_Unten:
296 001c 00 .skip 1,0
297 .global Looping_Rechts
298 .global Looping_Rechts
301 Looping_Rechts:
302 001d 00 .skip 1,0
303 .global Looping_Links
304 .global Looping_Links
307 Looping_Links:
308 001e 00 .skip 1,0
309 .global Looping_Roll
310 .global Looping_Roll
313 Looping_Roll:
314 001f 00 .skip 1,0
315 .global Looping_Nick
316 .global Looping_Nick
319 Looping_Nick:
320 0020 00 .skip 1,0
321 .global Ki
322 .data
325 Ki:
326 003a 3801 .word 312
327 .global HoverGas
328 .global HoverGas
329 .section .bss
332 HoverGas:
333 0021 0000 .skip 2,0
334 .global LageKorrekturNick
335 .global LageKorrekturNick
338 LageKorrekturNick:
339 0023 0000 .skip 2,0
340 .global LageKorrekturRoll
341 .global LageKorrekturRoll
344 LageKorrekturRoll:
345 0025 0000 .skip 2,0
346 .global NeueKompassRichtungMerken
347 .global NeueKompassRichtungMerken
350 NeueKompassRichtungMerken:
351 0027 00 .skip 1,0
352 .global CalibrationDone
353 .global CalibrationDone
356 CalibrationDone:
357 0028 00 .skip 1,0
358 .global CompassGierSetpoint
359 .global CompassGierSetpoint
362 CompassGierSetpoint:
363 0029 0000 .skip 2,0
364 .global WaypointTrimming
365 .global WaypointTrimming
368 WaypointTrimming:
369 002b 00 .skip 1,0
370 .global carefree_old
371 .data
374 carefree_old:
375 003c 32 .byte 50
376 .global FromNC_AltitudeSpeed
377 .global FromNC_AltitudeSpeed
378 .section .bss
381 FromNC_AltitudeSpeed:
382 002c 00 .skip 1,0
383 .global FromNC_AltitudeSetpoint
384 .global FromNC_AltitudeSetpoint
387 FromNC_AltitudeSetpoint:
388 002d 0000 0000 .skip 4,0
389 .global AltitudeSetpointTrimming
390 .global AltitudeSetpointTrimming
393 AltitudeSetpointTrimming:
394 0031 0000 .skip 2,0
395 .global SollHoehe
396 .global SollHoehe
399 SollHoehe:
400 0033 0000 0000 .skip 4,0
401 .global HoehenWert
402 .global HoehenWert
405 HoehenWert:
406 0037 0000 0000 .skip 4,0
407 .global StartTrigger
408 .global StartTrigger
411 StartTrigger:
412 003b 00 .skip 1,0
413 .global MotorenEin
414 .global MotorenEin
417 MotorenEin:
418 003c 00 .skip 1,0
419 .global SenderOkay
420 .global SenderOkay
423 SenderOkay:
424 003d 00 .skip 1,0
425 .global Poti
426 .global Poti
429 Poti:
430 003e 0000 0000 .skip 9,0
430 0000 0000
430 00
431 .global StickGas
432 .global StickGas
435 StickGas:
436 0047 0000 .skip 2,0
437 .global StickGier
438 .global StickGier
441 StickGier:
442 0049 0000 .skip 2,0
443 .global StickRoll
444 .global StickRoll
447 StickRoll:
448 004b 0000 .skip 2,0
449 .global StickNick
450 .global StickNick
453 StickNick:
454 004d 0000 .skip 2,0
455 .global HoverGasMax
456 .data
459 HoverGasMax:
460 003d FF03 .word 1023
461 .global HoverGasMin
462 .global HoverGasMin
463 .section .bss
466 HoverGasMin:
467 004f 0000 .skip 2,0
468 .global StickGasHover
469 .data
472 StickGasHover:
473 003f 7800 .word 120
474 .global GierGyroFehler
475 .global GierGyroFehler
476 .section .bss
479 GierGyroFehler:
480 0051 0000 .skip 2,0
481 .global Umschlag180Roll
482 .data
485 Umschlag180Roll:
486 0041 90D0 0300 .long 250000
487 .global Umschlag180Nick
490 Umschlag180Nick:
491 0045 90D0 0300 .long 250000
492 .global TrichterFlug
493 .global TrichterFlug
494 .section .bss
497 TrichterFlug:
498 0053 00 .skip 1,0
499 .global HoehenReglerAktiv
500 .global HoehenReglerAktiv
503 HoehenReglerAktiv:
504 0054 00 .skip 1,0
505 .global KompassSignalSchlecht
506 .data
509 KompassSignalSchlecht:
510 0049 3200 .word 50
511 .global KompassFusion
514 KompassFusion:
515 004b 20 .byte 32
516 .global CalculateCompassTimer
519 CalculateCompassTimer:
520 004c 64 .byte 100
521 .global KompassSollWert
522 .global KompassSollWert
523 .section .bss
526 KompassSollWert:
527 0055 0000 .skip 2,0
528 .global KompassValue
529 .data
532 KompassValue:
533 004d FFFF .word -1
534 .global Mess_Integral_Hoch
535 .global Mess_Integral_Hoch
536 .section .bss
539 Mess_Integral_Hoch:
540 0057 0000 0000 .skip 4,0
541 .global SummeRoll
542 .global SummeRoll
545 SummeRoll:
546 005b 0000 0000 .skip 4,0
547 .global SummeNick
548 .global SummeNick
551 SummeNick:
552 005f 0000 0000 .skip 4,0
553 .global Mess_Integral_Gier2
554 .global Mess_Integral_Gier2
557 Mess_Integral_Gier2:
558 0063 0000 0000 .skip 4,0
559 .global Mess_Integral_Gier
560 .global Mess_Integral_Gier
563 Mess_Integral_Gier:
564 0067 0000 0000 .skip 4,0
565 .global Mess_IntegralRoll2
566 .global Mess_IntegralRoll2
569 Mess_IntegralRoll2:
570 006b 0000 0000 .skip 4,0
571 .global Mess_IntegralRoll
572 .global Mess_IntegralRoll
575 Mess_IntegralRoll:
576 006f 0000 0000 .skip 4,0
577 .global Mess_IntegralNick2
578 .global Mess_IntegralNick2
581 Mess_IntegralNick2:
582 0073 0000 0000 .skip 4,0
583 .global Mess_IntegralNick
584 .global Mess_IntegralNick
587 Mess_IntegralNick:
588 0077 0000 0000 .skip 4,0
589 .global Integral_Gier
590 .global Integral_Gier
593 Integral_Gier:
594 007b 0000 0000 .skip 4,0
595 .global IntegralAccZ
596 .global IntegralAccZ
599 IntegralAccZ:
600 007f 0000 0000 .skip 4,0
601 .global IntegralAccRoll
602 .global IntegralAccRoll
605 IntegralAccRoll:
606 0083 0000 0000 .skip 4,0
607 .global IntegralAccNick
608 .global IntegralAccNick
611 IntegralAccNick:
612 0087 0000 0000 .skip 4,0
613 .global IntegralRoll2
614 .global IntegralRoll2
617 IntegralRoll2:
618 008b 0000 0000 .skip 4,0
619 .global IntegralRoll
620 .global IntegralRoll
623 IntegralRoll:
624 008f 0000 0000 .skip 4,0
625 .global IntegralNick2
626 .global IntegralNick2
629 IntegralNick2:
630 0093 0000 0000 .skip 4,0
631 .global IntegralNick
632 .global IntegralNick
635 IntegralNick:
636 0097 0000 0000 .skip 4,0
637 .global ControlHeading
638 .global ControlHeading
641 ControlHeading:
642 009b 00 .skip 1,0
643 .global NeutralAccZ
644 .global NeutralAccZ
647 NeutralAccZ:
648 009c 0000 .skip 2,0
649 .global NaviCntAcc
650 .global NaviCntAcc
653 NaviCntAcc:
654 009e 0000 .skip 2,0
655 .global NeutralAccY
656 .global NeutralAccY
659 NeutralAccY:
660 00a0 0000 .skip 2,0
661 .global NeutralAccX
662 .global NeutralAccX
665 NeutralAccX:
666 00a2 0000 .skip 2,0
667 .global StartNeutralNick
668 .global StartNeutralNick
671 StartNeutralNick:
672 00a4 0000 .skip 2,0
673 .global StartNeutralRoll
674 .global StartNeutralRoll
677 StartNeutralRoll:
678 00a6 0000 .skip 2,0
679 .global AdNeutralGier
680 .global AdNeutralGier
683 AdNeutralGier:
684 00a8 0000 .skip 2,0
685 .global AdNeutralRoll
686 .global AdNeutralRoll
689 AdNeutralRoll:
690 00aa 0000 .skip 2,0
691 .global AdNeutralNick
692 .global AdNeutralNick
695 AdNeutralNick:
696 00ac 0000 .skip 2,0
697 .global BaroExpandActive
698 .global BaroExpandActive
701 BaroExpandActive:
702 00ae 0000 .skip 2,0
703 .text
704 .global CopyDebugValues
706 CopyDebugValues:
707 /* prologue: frame size=0 */
708 0000 EF92 push r14
709 0002 FF92 push r15
710 0004 0F93 push r16
711 0006 1F93 push r17
712 /* prologue end (size=4) */
713 0008 8091 0000 lds r24,EE_Parameter+28
714 000c 9927 clr r25
715 000e 880F lsl r24
716 0010 991F rol r25
717 0012 880F lsl r24
718 0014 991F rol r25
719 0016 7C01 movw r14,r24
720 0018 0027 clr r16
721 001a F7FC sbrc r15,7
722 001c 0095 com r16
723 001e 102F mov r17,r16
724 0020 8091 0000 lds r24,IntegralNick
725 0024 9091 0000 lds r25,(IntegralNick)+1
726 0028 A091 0000 lds r26,(IntegralNick)+2
727 002c B091 0000 lds r27,(IntegralNick)+3
728 0030 BC01 movw r22,r24
729 0032 CD01 movw r24,r26
730 0034 A801 movw r20,r16
731 0036 9701 movw r18,r14
732 0038 0E94 0000 call __divmodsi4
733 003c 3093 0000 sts (DebugOut+2)+1,r19
734 0040 2093 0000 sts DebugOut+2,r18
735 0044 8091 0000 lds r24,IntegralRoll
736 0048 9091 0000 lds r25,(IntegralRoll)+1
737 004c A091 0000 lds r26,(IntegralRoll)+2
738 0050 B091 0000 lds r27,(IntegralRoll)+3
739 0054 BC01 movw r22,r24
740 0056 CD01 movw r24,r26
741 0058 A801 movw r20,r16
742 005a 9701 movw r18,r14
743 005c 0E94 0000 call __divmodsi4
744 0060 3093 0000 sts (DebugOut+4)+1,r19
745 0064 2093 0000 sts DebugOut+4,r18
746 0068 8091 0000 lds r24,Mittelwert_AccNick
747 006c 9091 0000 lds r25,(Mittelwert_AccNick)+1
748 0070 97FD sbrc r25,7
749 0072 0396 adiw r24,3
750 .L2:
751 0074 9595 asr r25
752 0076 8795 ror r24
753 0078 9595 asr r25
754 007a 8795 ror r24
755 007c 9093 0000 sts (DebugOut+6)+1,r25
756 0080 8093 0000 sts DebugOut+6,r24
757 0084 8091 0000 lds r24,Mittelwert_AccRoll
758 0088 9091 0000 lds r25,(Mittelwert_AccRoll)+1
759 008c 97FD sbrc r25,7
760 008e 0396 adiw r24,3
761 .L3:
762 0090 9595 asr r25
763 0092 8795 ror r24
764 0094 9595 asr r25
765 0096 8795 ror r24
766 0098 9093 0000 sts (DebugOut+8)+1,r25
767 009c 8093 0000 sts DebugOut+8,r24
768 00a0 8091 0000 lds r24,SollHoehe
769 00a4 9091 0000 lds r25,(SollHoehe)+1
770 00a8 A091 0000 lds r26,(SollHoehe)+2
771 00ac B091 0000 lds r27,(SollHoehe)+3
772 00b0 BC01 movw r22,r24
773 00b2 CD01 movw r24,r26
774 00b4 25E0 ldi r18,lo8(5)
775 00b6 30E0 ldi r19,hi8(5)
776 00b8 40E0 ldi r20,hlo8(5)
777 00ba 50E0 ldi r21,hhi8(5)
778 00bc 0E94 0000 call __divmodsi4
779 00c0 3093 0000 sts (DebugOut+10)+1,r19
780 00c4 2093 0000 sts DebugOut+10,r18
781 00c8 8091 0000 lds r24,HoehenWert
782 00cc 9091 0000 lds r25,(HoehenWert)+1
783 00d0 A091 0000 lds r26,(HoehenWert)+2
784 00d4 B091 0000 lds r27,(HoehenWert)+3
785 00d8 BC01 movw r22,r24
786 00da CD01 movw r24,r26
787 00dc 25E0 ldi r18,lo8(5)
788 00de 30E0 ldi r19,hi8(5)
789 00e0 40E0 ldi r20,hlo8(5)
790 00e2 50E0 ldi r21,hhi8(5)
791 00e4 0E94 0000 call __divmodsi4
792 00e8 3093 0000 sts (DebugOut+12)+1,r19
793 00ec 2093 0000 sts DebugOut+12,r18
794 00f0 8091 0000 lds r24,KompassValue
795 00f4 9091 0000 lds r25,(KompassValue)+1
796 00f8 9093 0000 sts (DebugOut+14)+1,r25
797 00fc 8093 0000 sts DebugOut+14,r24
798 0100 8091 0000 lds r24,KompassSollWert
799 0104 9091 0000 lds r25,(KompassSollWert)+1
800 0108 9093 0000 sts (DebugOut+16)+1,r25
801 010c 8093 0000 sts DebugOut+16,r24
802 0110 8091 0000 lds r24,Capacity
803 0114 9091 0000 lds r25,(Capacity)+1
804 0118 9093 0000 sts (DebugOut+18)+1,r25
805 011c 8093 0000 sts DebugOut+18,r24
806 0120 8091 0000 lds r24,UBat
807 0124 9091 0000 lds r25,(UBat)+1
808 0128 9093 0000 sts (DebugOut+20)+1,r25
809 012c 8093 0000 sts DebugOut+20,r24
810 0130 8091 0000 lds r24,Motor+1
811 0134 9927 clr r25
812 0136 9093 0000 sts (DebugOut+22)+1,r25
813 013a 8093 0000 sts DebugOut+22,r24
814 013e 8091 0000 lds r24,Motor+9
815 0142 9927 clr r25
816 0144 9093 0000 sts (DebugOut+24)+1,r25
817 0148 8093 0000 sts DebugOut+24,r24
818 014c 8091 0000 lds r24,Motor+17
819 0150 9927 clr r25
820 0152 9093 0000 sts (DebugOut+26)+1,r25
821 0156 8093 0000 sts DebugOut+26,r24
822 015a 8091 0000 lds r24,Motor+25
823 015e 9927 clr r25
824 0160 9093 0000 sts (DebugOut+28)+1,r25
825 0164 8093 0000 sts DebugOut+28,r24
826 0168 8091 0000 lds r24,Motor+33
827 016c 9927 clr r25
828 016e 9093 0000 sts (DebugOut+30)+1,r25
829 0172 8093 0000 sts DebugOut+30,r24
830 0176 8091 0000 lds r24,Motor+41
831 017a 9927 clr r25
832 017c 9093 0000 sts (DebugOut+32)+1,r25
833 0180 8093 0000 sts DebugOut+32,r24
834 0184 8091 0000 lds r24,SenderOkay
835 0188 9927 clr r25
836 018a 9093 0000 sts (DebugOut+34)+1,r25
837 018e 8093 0000 sts DebugOut+34,r24
838 0192 8091 0000 lds r24,ErsatzKompass
839 0196 9091 0000 lds r25,(ErsatzKompass)+1
840 019a A091 0000 lds r26,(ErsatzKompass)+2
841 019e B091 0000 lds r27,(ErsatzKompass)+3
842 01a2 2091 0000 lds r18,GIER_GRAD_FAKTOR
843 01a6 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
844 01aa 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
845 01ae 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
846 01b2 BC01 movw r22,r24
847 01b4 CD01 movw r24,r26
848 01b6 0E94 0000 call __divmodsi4
849 01ba 3093 0000 sts (DebugOut+36)+1,r19
850 01be 2093 0000 sts DebugOut+36,r18
851 01c2 8091 0000 lds r24,AdNeutralGier
852 01c6 9091 0000 lds r25,(AdNeutralGier)+1
853 01ca 2091 0000 lds r18,AdWertGier
854 01ce 3091 0000 lds r19,(AdWertGier)+1
855 01d2 821B sub r24,r18
856 01d4 930B sbc r25,r19
857 01d6 9093 0000 sts (DebugOut+38)+1,r25
858 01da 8093 0000 sts DebugOut+38,r24
859 01de 1092 0000 sts (DebugOut+40)+1,__zero_reg__
860 01e2 1092 0000 sts DebugOut+40,__zero_reg__
861 01e6 8091 0000 lds r24,ServoNickValue
862 01ea 9091 0000 lds r25,(ServoNickValue)+1
863 01ee 9093 0000 sts (DebugOut+42)+1,r25
864 01f2 8093 0000 sts DebugOut+42,r24
865 01f6 1092 0000 sts (DebugOut+44)+1,__zero_reg__
866 01fa 1092 0000 sts DebugOut+44,__zero_reg__
867 01fe 1092 0000 sts (DebugOut+46)+1,__zero_reg__
868 0202 1092 0000 sts DebugOut+46,__zero_reg__
869 0206 8091 0000 lds r24,Capacity+4
870 020a 9091 0000 lds r25,(Capacity+4)+1
871 020e 9093 0000 sts (DebugOut+48)+1,r25
872 0212 8093 0000 sts DebugOut+48,r24
873 0216 8091 0000 lds r24,Capacity+6
874 021a 9927 clr r25
875 021c 9093 0000 sts (DebugOut+50)+1,r25
876 0220 8093 0000 sts DebugOut+50,r24
877 0224 1092 0000 sts (DebugOut+52)+1,__zero_reg__
878 0228 1092 0000 sts DebugOut+52,__zero_reg__
879 022c 1092 0000 sts (DebugOut+54)+1,__zero_reg__
880 0230 1092 0000 sts DebugOut+54,__zero_reg__
881 0234 1092 0000 sts (DebugOut+56)+1,__zero_reg__
882 0238 1092 0000 sts DebugOut+56,__zero_reg__
883 023c 8091 0000 lds r24,AdWertAccHoch
884 0240 9091 0000 lds r25,(AdWertAccHoch)+1
885 0244 9093 0000 sts (DebugOut+58)+1,r25
886 0248 8093 0000 sts DebugOut+58,r24
887 024c 1092 0000 sts (DebugOut+60)+1,__zero_reg__
888 0250 1092 0000 sts DebugOut+60,__zero_reg__
889 0254 8091 0000 lds r24,GPS_Nick
890 0258 9091 0000 lds r25,(GPS_Nick)+1
891 025c 9093 0000 sts (DebugOut+62)+1,r25
892 0260 8093 0000 sts DebugOut+62,r24
893 0264 8091 0000 lds r24,GPS_Roll
894 0268 9091 0000 lds r25,(GPS_Roll)+1
895 026c 9093 0000 sts (DebugOut+64)+1,r25
896 0270 8093 0000 sts DebugOut+64,r24
897 0274 8091 0000 lds r24,VersionInfo+5
898 0278 8823 tst r24
899 027a 01F4 brne .L5
900 027c 8091 0000 lds r24,VersionInfo+6
901 0280 8823 tst r24
902 0282 01F0 breq .L4
903 .L5:
904 0284 8091 0000 lds r24,DebugOut+1
905 0288 8160 ori r24,lo8(1)
906 028a 00C0 rjmp .L7
907 .L4:
908 028c 8091 0000 lds r24,DebugOut+1
909 0290 8E7F andi r24,lo8(-2)
910 .L7:
911 0292 8093 0000 sts DebugOut+1,r24
912 /* epilogue: frame size=0 */
913 0296 1F91 pop r17
914 0298 0F91 pop r16
915 029a FF90 pop r15
916 029c EF90 pop r14
917 029e 0895 ret
918 /* epilogue end (size=5) */
919 /* function CopyDebugValues size 338 (329) */
921 .global Piep
923 Piep:
924 /* prologue: frame size=0 */
925 02a0 EF92 push r14
926 02a2 FF92 push r15
927 02a4 1F93 push r17
928 02a6 CF93 push r28
929 02a8 DF93 push r29
930 /* prologue end (size=5) */
931 02aa 182F mov r17,r24
932 02ac 7B01 movw r14,r22
933 02ae 8091 0000 lds r24,MotorenEin
934 02b2 8823 tst r24
935 02b4 01F4 brne .L8
936 02b6 8091 0000 lds r24,PlatinenVersion
937 02ba 8C30 cpi r24,lo8(12)
938 02bc 00F0 brlo .L11
939 02be 8631 cpi r24,lo8(22)
940 02c0 01F4 brne .L10
941 .L11:
942 02c2 2998 cbi 37-0x20,1
943 02c4 00C0 rjmp .L12
944 .L10:
945 02c6 299A sbi 37-0x20,1
946 .L12:
947 02c8 1150 subi r17,lo8(-(-1))
948 02ca 1F3F cpi r17,lo8(-1)
949 02cc 01F0 breq .L26
950 02ce F092 0000 sts (beeptime)+1,r15
951 02d2 E092 0000 sts beeptime,r14
952 02d6 E701 movw r28,r14
953 .L34:
954 02d8 8091 0000 lds r24,beeptime
955 02dc 9091 0000 lds r25,(beeptime)+1
956 02e0 892B or r24,r25
957 02e2 01F4 brne .L31
958 02e4 2097 sbiw r28,0
959 02e6 01F0 breq .L12
960 .L31:
961 02e8 8091 0000 lds r24,UpdateMotor
962 02ec 8823 tst r24
963 02ee 01F0 breq .L34
964 02f0 1092 0000 sts UpdateMotor,__zero_reg__
965 02f4 8091 0000 lds r24,beeptime
966 02f8 9091 0000 lds r25,(beeptime)+1
967 02fc 892B or r24,r25
968 02fe 01F4 brne .L19
969 0300 2197 sbiw r28,1
970 .L19:
971 0302 0E94 0000 call LIBFC_Polling
972 0306 00C0 rjmp .L34
973 .L26:
974 0308 8091 0000 lds r24,PlatinenVersion
975 030c 8C30 cpi r24,lo8(12)
976 030e 00F0 brlo .L23
977 0310 8631 cpi r24,lo8(22)
978 0312 01F4 brne .L22
979 .L23:
980 0314 299A sbi 37-0x20,1
981 0316 00C0 rjmp .L8
982 .L22:
983 0318 2998 cbi 37-0x20,1
984 .L8:
985 /* epilogue: frame size=0 */
986 031a DF91 pop r29
987 031c CF91 pop r28
988 031e 1F91 pop r17
989 0320 FF90 pop r15
990 0322 EF90 pop r14
991 0324 0895 ret
992 /* epilogue end (size=6) */
993 /* function Piep size 67 (56) */
995 .global CalibrierMittelwert
997 CalibrierMittelwert:
998 /* prologue: frame size=0 */
999 0326 CF93 push r28
1000 0328 DF93 push r29
1001 /* prologue end (size=2) */
1002 032a 8091 0000 lds r24,PlatinenVersion
1003 032e 8D30 cpi r24,lo8(13)
1004 0330 01F4 brne .L36
1005 0332 0E94 0000 call SucheGyroOffset
1006 .L36:
1007 0336 1092 7A00 sts 122,__zero_reg__
1008 033a 8091 0000 lds r24,AdWertNick
1009 033e 9091 0000 lds r25,(AdWertNick)+1
1010 0342 9093 0000 sts (MesswertNick)+1,r25
1011 0346 8093 0000 sts MesswertNick,r24
1012 034a 8091 0000 lds r24,AdWertRoll
1013 034e 9091 0000 lds r25,(AdWertRoll)+1
1014 0352 9093 0000 sts (MesswertRoll)+1,r25
1015 0356 8093 0000 sts MesswertRoll,r24
1016 035a 8091 0000 lds r24,AdWertGier
1017 035e 9091 0000 lds r25,(AdWertGier)+1
1018 0362 9093 0000 sts (MesswertGier)+1,r25
1019 0366 8093 0000 sts MesswertGier,r24
1020 036a 2091 0000 lds r18,AdWertAccNick
1021 036e 3091 0000 lds r19,(AdWertAccNick)+1
1022 0372 C901 movw r24,r18
1023 0374 880F lsl r24
1024 0376 991F rol r25
1025 0378 880F lsl r24
1026 037a 991F rol r25
1027 037c 820F add r24,r18
1028 037e 931F adc r25,r19
1029 0380 820F add r24,r18
1030 0382 931F adc r25,r19
1031 0384 9093 0000 sts (Mittelwert_AccNick)+1,r25
1032 0388 8093 0000 sts Mittelwert_AccNick,r24
1033 038c 2091 0000 lds r18,AdWertAccRoll
1034 0390 3091 0000 lds r19,(AdWertAccRoll)+1
1035 0394 C901 movw r24,r18
1036 0396 880F lsl r24
1037 0398 991F rol r25
1038 039a 880F lsl r24
1039 039c 991F rol r25
1040 039e 820F add r24,r18
1041 03a0 931F adc r25,r19
1042 03a2 820F add r24,r18
1043 03a4 931F adc r25,r19
1044 03a6 9093 0000 sts (Mittelwert_AccRoll)+1,r25
1045 03aa 8093 0000 sts Mittelwert_AccRoll,r24
1046 03ae 8FEC ldi r24,lo8(-49)
1047 03b0 8093 7A00 sts 122,r24
1048 03b4 A0E0 ldi r26,lo8(Poti)
1049 03b6 B0E0 ldi r27,hi8(Poti)
1050 03b8 C0E0 ldi r28,lo8(EE_Parameter+5)
1051 03ba D0E0 ldi r29,hi8(EE_Parameter+5)
1052 03bc 97E0 ldi r25,lo8(7)
1053 .L46:
1054 03be 8991 ld r24,Y+
1055 03c0 E82F mov r30,r24
1056 03c2 FF27 clr r31
1057 03c4 EE0F add r30,r30
1058 03c6 FF1F adc r31,r31
1059 03c8 E050 subi r30,lo8(-(PPM_in))
1060 03ca F040 sbci r31,hi8(-(PPM_in))
1061 03cc 0190 ld __tmp_reg__,Z+
1062 03ce F081 ld r31,Z
1063 03d0 E02D mov r30,__tmp_reg__
1064 03d2 E158 subi r30,lo8(-(127))
1065 03d4 FF4F sbci r31,hi8(-(127))
1066 03d6 1E16 cp __zero_reg__,r30
1067 03d8 1F06 cpc __zero_reg__,r31
1068 03da 04F0 brlt .L40
1069 03dc E0E0 ldi r30,lo8(0)
1070 03de F0E0 ldi r31,hi8(0)
1071 03e0 00C0 rjmp .L41
1072 .L40:
1073 03e2 EF3F cpi r30,255
1074 03e4 F105 cpc r31,__zero_reg__
1075 03e6 04F0 brlt .L41
1076 03e8 EFEF ldi r30,lo8(255)
1077 03ea F0E0 ldi r31,hi8(255)
1078 .L41:
1079 03ec 8C91 ld r24,X
1080 03ee 282F mov r18,r24
1081 03f0 3327 clr r19
1082 03f2 E217 cp r30,r18
1083 03f4 F307 cpc r31,r19
1084 03f6 04F4 brge .L43
1085 03f8 8150 subi r24,lo8(-(-1))
1086 03fa 00C0 rjmp .L49
1087 .L43:
1088 03fc 2E17 cp r18,r30
1089 03fe 3F07 cpc r19,r31
1090 0400 04F4 brge .L39
1091 0402 8F5F subi r24,lo8(-(1))
1092 .L49:
1093 0404 8C93 st X,r24
1094 .L39:
1095 0406 9150 subi r25,lo8(-(-1))
1096 0408 1196 adiw r26,1
1097 040a 97FF sbrs r25,7
1098 040c 00C0 rjmp .L46
1099 040e 8091 0000 lds r24,EE_Parameter+65
1100 0412 9927 clr r25
1101 0414 AA27 clr r26
1102 0416 BB27 clr r27
1103 0418 BC01 movw r22,r24
1104 041a CD01 movw r24,r26
1105 041c 24EC ldi r18,lo8(2500)
1106 041e 39E0 ldi r19,hi8(2500)
1107 0420 40E0 ldi r20,hlo8(2500)
1108 0422 50E0 ldi r21,hhi8(2500)
1109 0424 0E94 0000 call __mulsi3
1110 0428 DC01 movw r26,r24
1111 042a CB01 movw r24,r22
1112 042c 8093 0000 sts Umschlag180Nick,r24
1113 0430 9093 0000 sts (Umschlag180Nick)+1,r25
1114 0434 A093 0000 sts (Umschlag180Nick)+2,r26
1115 0438 B093 0000 sts (Umschlag180Nick)+3,r27
1116 043c 8091 0000 lds r24,EE_Parameter+66
1117 0440 9927 clr r25
1118 0442 AA27 clr r26
1119 0444 BB27 clr r27
1120 0446 BC01 movw r22,r24
1121 0448 CD01 movw r24,r26
1122 044a 0E94 0000 call __mulsi3
1123 044e DC01 movw r26,r24
1124 0450 CB01 movw r24,r22
1125 0452 8093 0000 sts Umschlag180Roll,r24
1126 0456 9093 0000 sts (Umschlag180Roll)+1,r25
1127 045a A093 0000 sts (Umschlag180Roll)+2,r26
1128 045e B093 0000 sts (Umschlag180Roll)+3,r27
1129 /* epilogue: frame size=0 */
1130 0462 DF91 pop r29
1131 0464 CF91 pop r28
1132 0466 0895 ret
1133 /* epilogue end (size=3) */
1134 /* function CalibrierMittelwert size 161 (156) */
1136 .section .progmem.data,"a",@progbits
1139 __c.35:
1140 0000 0A0D 4143 .string "\n\rACC not calibrated!\r\n"
1140 4320 6E6F
1140 7420 6361
1140 6C69 6272
1140 6174 6564
1141 .text
1142 .global SetNeutral
1144 SetNeutral:
1145 /* prologue: frame size=0 */
1146 0468 A0E0 ldi r26,lo8(0)
1147 046a B0E0 ldi r27,hi8(0)
1148 046c E0E0 ldi r30,pm_lo8(1f)
1149 046e F0E0 ldi r31,pm_hi8(1f)
1150 0470 0C94 0000 jmp __prologue_saves__+12
1151 1:
1152 /* prologue end (size=6) */
1153 0474 882E mov r8,r24
1154 0476 C0E0 ldi r28,lo8(0)
1155 0478 D0E0 ldi r29,hi8(0)
1156 047a 7E01 movw r14,r28
1157 047c 6E01 movw r12,r28
1158 047e 1092 0000 sts VersionInfo+5,__zero_reg__
1159 0482 D093 0000 sts (NeutralAccX)+1,r29
1160 0486 C093 0000 sts NeutralAccX,r28
1161 048a D093 0000 sts (NeutralAccY)+1,r29
1162 048e C093 0000 sts NeutralAccY,r28
1163 0492 D093 0000 sts (NeutralAccZ)+1,r29
1164 0496 C093 0000 sts NeutralAccZ,r28
1165 049a D093 0000 sts (AdNeutralNick)+1,r29
1166 049e C093 0000 sts AdNeutralNick,r28
1167 04a2 D093 0000 sts (AdNeutralRoll)+1,r29
1168 04a6 C093 0000 sts AdNeutralRoll,r28
1169 04aa D093 0000 sts (AdNeutralGier)+1,r29
1170 04ae C093 0000 sts AdNeutralGier,r28
1171 04b2 1092 0000 sts Parameter_AchsKopplung1,__zero_reg__
1172 04b6 1092 0000 sts Parameter_AchsKopplung2,__zero_reg__
1173 04ba 1092 0000 sts ExpandBaro,__zero_reg__
1174 04be 0E94 0000 call CalibrierMittelwert
1175 04c2 84E6 ldi r24,lo8(100)
1176 04c4 90E0 ldi r25,hi8(100)
1177 04c6 0E94 0000 call Delay_ms_Mess
1178 04ca 0E94 0000 call CalibrierMittelwert
1179 04ce 8091 0000 lds r24,EE_Parameter+13
1180 04d2 80FF sbrs r24,0
1181 04d4 00C0 rjmp .L51
1182 04d6 8091 0000 lds r24,MessLuftdruck
1183 04da 9091 0000 lds r25,(MessLuftdruck)+1
1184 04de 875B subi r24,lo8(951)
1185 04e0 9340 sbci r25,hi8(951)
1186 04e2 00F4 brsh .L53
1187 04e4 8091 0000 lds r24,MessLuftdruck
1188 04e8 9091 0000 lds r25,(MessLuftdruck)+1
1189 04ec 8E5E subi r24,lo8(750)
1190 04ee 9240 sbci r25,hi8(750)
1191 04f0 00F4 brsh .L51
1192 .L53:
1193 04f2 0E94 0000 call SucheLuftruckOffset
1194 .L51:
1195 04f6 0FE1 ldi r16,lo8(31)
1196 .L57:
1197 04f8 8AE0 ldi r24,lo8(10)
1198 04fa 90E0 ldi r25,hi8(10)
1199 04fc 0E94 0000 call Delay_ms_Mess
1200 0500 8091 0000 lds r24,AdWertGier
1201 0504 9091 0000 lds r25,(AdWertGier)+1
1202 0508 C80F add r28,r24
1203 050a D91F adc r29,r25
1204 050c 8091 0000 lds r24,AdWertNick
1205 0510 9091 0000 lds r25,(AdWertNick)+1
1206 0514 E80E add r14,r24
1207 0516 F91E adc r15,r25
1208 0518 8091 0000 lds r24,AdWertRoll
1209 051c 9091 0000 lds r25,(AdWertRoll)+1
1210 0520 C80E add r12,r24
1211 0522 D91E adc r13,r25
1212 0524 0150 subi r16,lo8(-(-1))
1213 0526 07FF sbrs r16,7
1214 0528 00C0 rjmp .L57
1215 052a 9701 movw r18,r14
1216 052c 205F subi r18,lo8(-(16))
1217 052e 3F4F sbci r19,hi8(-(16))
1218 0530 3695 lsr r19
1219 0532 2795 ror r18
1220 0534 3695 lsr r19
1221 0536 2795 ror r18
1222 0538 3093 0000 sts (AdNeutralNick)+1,r19
1223 053c 2093 0000 sts AdNeutralNick,r18
1224 0540 C601 movw r24,r12
1225 0542 4096 adiw r24,16
1226 0544 9695 lsr r25
1227 0546 8795 ror r24
1228 0548 9695 lsr r25
1229 054a 8795 ror r24
1230 054c 9093 0000 sts (AdNeutralRoll)+1,r25
1231 0550 8093 0000 sts AdNeutralRoll,r24
1232 0554 6096 adiw r28,16
1233 0556 F5E0 ldi r31,5
1234 0558 D695 1: lsr r29
1235 055a C795 ror r28
1236 055c FA95 dec r31
1237 055e 01F4 brne 1b
1238 0560 D093 0000 sts (AdNeutralGier)+1,r29
1239 0564 C093 0000 sts AdNeutralGier,r28
1240 0568 9093 0000 sts (StartNeutralRoll)+1,r25
1241 056c 8093 0000 sts StartNeutralRoll,r24
1242 0570 3093 0000 sts (StartNeutralNick)+1,r19
1243 0574 2093 0000 sts StartNeutralNick,r18
1244 0578 8820 tst r8
1245 057a 01F4 brne .+2
1246 057c 00C0 rjmp .L58
1247 057e 8091 0000 lds r24,Mittelwert_AccNick
1248 0582 9091 0000 lds r25,(Mittelwert_AccNick)+1
1249 0586 97FF sbrs r25,7
1250 0588 00C0 rjmp .L59
1251 058a 9095 com r25
1252 058c 8195 neg r24
1253 058e 9F4F sbci r25,lo8(-1)
1254 .L59:
1255 0590 6CE0 ldi r22,lo8(12)
1256 0592 70E0 ldi r23,hi8(12)
1257 0594 0E94 0000 call __divmodhi4
1258 0598 9B01 movw r18,r22
1259 059a 7093 0000 sts (NeutralAccX)+1,r23
1260 059e 6093 0000 sts NeutralAccX,r22
1261 05a2 8091 0000 lds r24,Mittelwert_AccRoll
1262 05a6 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1263 05aa 97FF sbrs r25,7
1264 05ac 00C0 rjmp .L60
1265 05ae 9095 com r25
1266 05b0 8195 neg r24
1267 05b2 9F4F sbci r25,lo8(-1)
1268 .L60:
1269 05b4 6CE0 ldi r22,lo8(12)
1270 05b6 70E0 ldi r23,hi8(12)
1271 05b8 0E94 0000 call __divmodhi4
1272 05bc 7093 0000 sts (NeutralAccY)+1,r23
1273 05c0 6093 0000 sts NeutralAccY,r22
1274 05c4 8091 0000 lds r24,Aktuell_az
1275 05c8 9091 0000 lds r25,(Aktuell_az)+1
1276 05cc 9093 0000 sts (NeutralAccZ)+1,r25
1277 05d0 8093 0000 sts NeutralAccZ,r24
1278 05d4 B901 movw r22,r18
1279 05d6 84E0 ldi r24,lo8(4)
1280 05d8 90E0 ldi r25,hi8(4)
1281 05da 0E94 0000 call SetParamWord
1282 05de 6091 0000 lds r22,NeutralAccY
1283 05e2 7091 0000 lds r23,(NeutralAccY)+1
1284 05e6 86E0 ldi r24,lo8(6)
1285 05e8 90E0 ldi r25,hi8(6)
1286 05ea 0E94 0000 call SetParamWord
1287 05ee 6091 0000 lds r22,NeutralAccZ
1288 05f2 7091 0000 lds r23,(NeutralAccZ)+1
1289 05f6 88E0 ldi r24,lo8(8)
1290 05f8 90E0 ldi r25,hi8(8)
1291 05fa 0E94 0000 call SetParamWord
1292 05fe 00C0 rjmp .L61
1293 .L58:
1294 0600 84E0 ldi r24,lo8(4)
1295 0602 90E0 ldi r25,hi8(4)
1296 0604 0E94 0000 call GetParamWord
1297 0608 9093 0000 sts (NeutralAccX)+1,r25
1298 060c 8093 0000 sts NeutralAccX,r24
1299 0610 86E0 ldi r24,lo8(6)
1300 0612 90E0 ldi r25,hi8(6)
1301 0614 0E94 0000 call GetParamWord
1302 0618 9093 0000 sts (NeutralAccY)+1,r25
1303 061c 8093 0000 sts NeutralAccY,r24
1304 0620 88E0 ldi r24,lo8(8)
1305 0622 90E0 ldi r25,hi8(8)
1306 0624 0E94 0000 call GetParamWord
1307 0628 9C01 movw r18,r24
1308 062a 9093 0000 sts (NeutralAccZ)+1,r25
1309 062e 8093 0000 sts NeutralAccZ,r24
1310 0632 8091 0000 lds r24,NeutralAccX
1311 0636 9091 0000 lds r25,(NeutralAccX)+1
1312 063a 8150 subi r24,lo8(2049)
1313 063c 9840 sbci r25,hi8(2049)
1314 063e 00F4 brsh .L63
1315 0640 8091 0000 lds r24,NeutralAccY
1316 0644 9091 0000 lds r25,(NeutralAccY)+1
1317 0648 8150 subi r24,lo8(2049)
1318 064a 9840 sbci r25,hi8(2049)
1319 064c 00F4 brsh .L63
1320 064e 2150 subi r18,lo8(1025)
1321 0650 3440 sbci r19,hi8(1025)
1322 0652 00F0 brlo .L61
1323 .L63:
1324 0654 80E0 ldi r24,lo8(__c.35)
1325 0656 90E0 ldi r25,hi8(__c.35)
1326 0658 9F93 push r25
1327 065a 8F93 push r24
1328 065c 80E0 ldi r24,lo8(pm(uart_putchar))
1329 065e 90E0 ldi r25,hi8(pm(uart_putchar))
1330 0660 9F93 push r25
1331 0662 8F93 push r24
1332 0664 E091 0000 lds r30,_printf_P
1333 0668 F091 0000 lds r31,(_printf_P)+1
1334 066c 0995 icall
1335 066e 8091 0000 lds r24,Mittelwert_AccNick
1336 0672 9091 0000 lds r25,(Mittelwert_AccNick)+1
1337 0676 97FF sbrs r25,7
1338 0678 00C0 rjmp .L64
1339 067a 9095 com r25
1340 067c 8195 neg r24
1341 067e 9F4F sbci r25,lo8(-1)
1342 .L64:
1343 0680 6CE0 ldi r22,lo8(12)
1344 0682 70E0 ldi r23,hi8(12)
1345 0684 0E94 0000 call __divmodhi4
1346 0688 7093 0000 sts (NeutralAccX)+1,r23
1347 068c 6093 0000 sts NeutralAccX,r22
1348 0690 8091 0000 lds r24,Mittelwert_AccRoll
1349 0694 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1350 0698 97FF sbrs r25,7
1351 069a 00C0 rjmp .L65
1352 069c 9095 com r25
1353 069e 8195 neg r24
1354 06a0 9F4F sbci r25,lo8(-1)
1355 .L65:
1356 06a2 6CE0 ldi r22,lo8(12)
1357 06a4 70E0 ldi r23,hi8(12)
1358 06a6 0E94 0000 call __divmodhi4
1359 06aa 7093 0000 sts (NeutralAccY)+1,r23
1360 06ae 6093 0000 sts NeutralAccY,r22
1361 06b2 8091 0000 lds r24,Aktuell_az
1362 06b6 9091 0000 lds r25,(Aktuell_az)+1
1363 06ba 9093 0000 sts (NeutralAccZ)+1,r25
1364 06be 8093 0000 sts NeutralAccZ,r24
1365 06c2 0F90 pop __tmp_reg__
1366 06c4 0F90 pop __tmp_reg__
1367 06c6 0F90 pop __tmp_reg__
1368 06c8 0F90 pop __tmp_reg__
1369 .L61:
1370 06ca 1092 0000 sts (MesswertNick)+1,__zero_reg__
1371 06ce 1092 0000 sts MesswertNick,__zero_reg__
1372 06d2 1092 0000 sts (MesswertRoll)+1,__zero_reg__
1373 06d6 1092 0000 sts MesswertRoll,__zero_reg__
1374 06da 1092 0000 sts (MesswertGier)+1,__zero_reg__
1375 06de 1092 0000 sts MesswertGier,__zero_reg__
1376 06e2 84E6 ldi r24,lo8(100)
1377 06e4 90E0 ldi r25,hi8(100)
1378 06e6 0E94 0000 call Delay_ms_Mess
1379 06ea 8091 0000 lds r24,AdWertAccNick
1380 06ee 9091 0000 lds r25,(AdWertAccNick)+1
1381 06f2 9C01 movw r18,r24
1382 06f4 220F lsl r18
1383 06f6 331F rol r19
1384 06f8 220F lsl r18
1385 06fa 331F rol r19
1386 06fc 280F add r18,r24
1387 06fe 391F adc r19,r25
1388 0700 280F add r18,r24
1389 0702 391F adc r19,r25
1390 0704 3093 0000 sts (Mittelwert_AccNick)+1,r19
1391 0708 2093 0000 sts Mittelwert_AccNick,r18
1392 070c 8091 0000 lds r24,AdWertAccRoll
1393 0710 9091 0000 lds r25,(AdWertAccRoll)+1
1394 0714 8C01 movw r16,r24
1395 0716 000F lsl r16
1396 0718 111F rol r17
1397 071a 000F lsl r16
1398 071c 111F rol r17
1399 071e 080F add r16,r24
1400 0720 191F adc r17,r25
1401 0722 080F add r16,r24
1402 0724 191F adc r17,r25
1403 0726 1093 0000 sts (Mittelwert_AccRoll)+1,r17
1404 072a 0093 0000 sts Mittelwert_AccRoll,r16
1405 072e 8091 0000 lds r24,EE_Parameter+28
1406 0732 C82E mov r12,r24
1407 0734 DD24 clr r13
1408 0736 EE24 clr r14
1409 0738 FF24 clr r15
1410 073a 4427 clr r20
1411 073c 37FD sbrc r19,7
1412 073e 4095 com r20
1413 0740 542F mov r21,r20
1414 0742 C701 movw r24,r14
1415 0744 B601 movw r22,r12
1416 0746 0E94 0000 call __mulsi3
1417 074a 4B01 movw r8,r22
1418 074c 5C01 movw r10,r24
1419 074e 6093 0000 sts IntegralNick,r22
1420 0752 7093 0000 sts (IntegralNick)+1,r23
1421 0756 8093 0000 sts (IntegralNick)+2,r24
1422 075a 9093 0000 sts (IntegralNick)+3,r25
1423 075e 9801 movw r18,r16
1424 0760 4427 clr r20
1425 0762 37FD sbrc r19,7
1426 0764 4095 com r20
1427 0766 542F mov r21,r20
1428 0768 C701 movw r24,r14
1429 076a B601 movw r22,r12
1430 076c 0E94 0000 call __mulsi3
1431 0770 DC01 movw r26,r24
1432 0772 CB01 movw r24,r22
1433 0774 8093 0000 sts IntegralRoll,r24
1434 0778 9093 0000 sts (IntegralRoll)+1,r25
1435 077c A093 0000 sts (IntegralRoll)+2,r26
1436 0780 B093 0000 sts (IntegralRoll)+3,r27
1437 0784 8092 0000 sts Mess_IntegralNick,r8
1438 0788 9092 0000 sts (Mess_IntegralNick)+1,r9
1439 078c A092 0000 sts (Mess_IntegralNick)+2,r10
1440 0790 B092 0000 sts (Mess_IntegralNick)+3,r11
1441 0794 8093 0000 sts Mess_IntegralRoll,r24
1442 0798 9093 0000 sts (Mess_IntegralRoll)+1,r25
1443 079c A093 0000 sts (Mess_IntegralRoll)+2,r26
1444 07a0 B093 0000 sts (Mess_IntegralRoll)+3,r27
1445 07a4 1092 0000 sts Mess_Integral_Gier,__zero_reg__
1446 07a8 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
1447 07ac 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
1448 07b0 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
1449 07b4 8091 0000 lds r24,Luftdruck
1450 07b8 9091 0000 lds r25,(Luftdruck)+1
1451 07bc A091 0000 lds r26,(Luftdruck)+2
1452 07c0 B091 0000 lds r27,(Luftdruck)+3
1453 07c4 9093 0000 sts (StartLuftdruck)+1,r25
1454 07c8 8093 0000 sts StartLuftdruck,r24
1455 07cc 1092 0000 sts (VarioMeter)+1,__zero_reg__
1456 07d0 1092 0000 sts VarioMeter,__zero_reg__
1457 07d4 1092 0000 sts Mess_Integral_Hoch,__zero_reg__
1458 07d8 1092 0000 sts (Mess_Integral_Hoch)+1,__zero_reg__
1459 07dc 1092 0000 sts (Mess_Integral_Hoch)+2,__zero_reg__
1460 07e0 1092 0000 sts (Mess_Integral_Hoch)+3,__zero_reg__
1461 07e4 0091 0000 lds r16,KompassValue
1462 07e8 1091 0000 lds r17,(KompassValue)+1
1463 07ec 1093 0000 sts (KompassSollWert)+1,r17
1464 07f0 0093 0000 sts KompassSollWert,r16
1465 07f4 84E6 ldi r24,lo8(100)
1466 07f6 90E0 ldi r25,hi8(100)
1467 07f8 9093 0000 sts (KompassSignalSchlecht)+1,r25
1468 07fc 8093 0000 sts KompassSignalSchlecht,r24
1469 0800 82E3 ldi r24,lo8(50)
1470 0802 90E0 ldi r25,hi8(50)
1471 0804 9093 0000 sts (beeptime)+1,r25
1472 0808 8093 0000 sts beeptime,r24
1473 080c 8091 0000 lds r24,EE_Parameter+65
1474 0810 9927 clr r25
1475 0812 AA27 clr r26
1476 0814 BB27 clr r27
1477 0816 BC01 movw r22,r24
1478 0818 CD01 movw r24,r26
1479 081a 24EC ldi r18,lo8(2500)
1480 081c 39E0 ldi r19,hi8(2500)
1481 081e 40E0 ldi r20,hlo8(2500)
1482 0820 50E0 ldi r21,hhi8(2500)
1483 0822 0E94 0000 call __mulsi3
1484 0826 DC01 movw r26,r24
1485 0828 CB01 movw r24,r22
1486 082a 8856 subi r24,lo8(-(15000))
1487 082c 954C sbci r25,hi8(-(15000))
1488 082e AF4F sbci r26,hlo8(-(15000))
1489 0830 BF4F sbci r27,hhi8(-(15000))
1490 0832 8093 0000 sts Umschlag180Nick,r24
1491 0836 9093 0000 sts (Umschlag180Nick)+1,r25
1492 083a A093 0000 sts (Umschlag180Nick)+2,r26
1493 083e B093 0000 sts (Umschlag180Nick)+3,r27
1494 0842 8091 0000 lds r24,EE_Parameter+66
1495 0846 9927 clr r25
1496 0848 AA27 clr r26
1497 084a BB27 clr r27
1498 084c BC01 movw r22,r24
1499 084e CD01 movw r24,r26
1500 0850 0E94 0000 call __mulsi3
1501 0854 DC01 movw r26,r24
1502 0856 CB01 movw r24,r22
1503 0858 8856 subi r24,lo8(-(15000))
1504 085a 954C sbci r25,hi8(-(15000))
1505 085c AF4F sbci r26,hlo8(-(15000))
1506 085e BF4F sbci r27,hhi8(-(15000))
1507 0860 8093 0000 sts Umschlag180Roll,r24
1508 0864 9093 0000 sts (Umschlag180Roll)+1,r25
1509 0868 A093 0000 sts (Umschlag180Roll)+2,r26
1510 086c B093 0000 sts (Umschlag180Roll)+3,r27
1511 0870 1092 0000 sts (ExternHoehenValue)+1,__zero_reg__
1512 0874 1092 0000 sts ExternHoehenValue,__zero_reg__
1513 0878 C801 movw r24,r16
1514 087a AA27 clr r26
1515 087c 97FD sbrc r25,7
1516 087e A095 com r26
1517 0880 BA2F mov r27,r26
1518 0882 2091 0000 lds r18,GIER_GRAD_FAKTOR
1519 0886 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
1520 088a 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
1521 088e 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
1522 0892 BC01 movw r22,r24
1523 0894 CD01 movw r24,r26
1524 0896 0E94 0000 call __mulsi3
1525 089a DC01 movw r26,r24
1526 089c CB01 movw r24,r22
1527 089e 8093 0000 sts ErsatzKompass,r24
1528 08a2 9093 0000 sts (ErsatzKompass)+1,r25
1529 08a6 A093 0000 sts (ErsatzKompass)+2,r26
1530 08aa B093 0000 sts (ErsatzKompass)+3,r27
1531 08ae 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
1532 08b2 1092 0000 sts GierGyroFehler,__zero_reg__
1533 08b6 0E94 0000 call LED_Init
1534 08ba 8091 0000 lds r24,FC_StatusFlags
1535 08be 8460 ori r24,lo8(4)
1536 08c0 8093 0000 sts FC_StatusFlags,r24
1537 08c4 8FEF ldi r24,lo8(-1)
1538 08c6 8093 0000 sts FromNaviCtrl_Value,r24
1539 08ca 1092 0000 sts FromNaviCtrl_Value+1,__zero_reg__
1540 08ce 80E2 ldi r24,lo8(32)
1541 08d0 8093 0000 sts FromNaviCtrl_Value+2,r24
1542 08d4 C0E0 ldi r28,lo8(Poti)
1543 08d6 D0E0 ldi r29,hi8(Poti)
1544 08d8 A0E0 ldi r26,lo8(EE_Parameter+5)
1545 08da B0E0 ldi r27,hi8(EE_Parameter+5)
1546 08dc 07E0 ldi r16,lo8(7)
1547 .L69:
1548 08de 8D91 ld r24,X+
1549 08e0 E82F mov r30,r24
1550 08e2 FF27 clr r31
1551 08e4 EE0F add r30,r30
1552 08e6 FF1F adc r31,r31
1553 08e8 E050 subi r30,lo8(-(PPM_in))
1554 08ea F040 sbci r31,hi8(-(PPM_in))
1555 08ec 8081 ld r24,Z
1556 08ee 9181 ldd r25,Z+1
1557 08f0 8158 subi r24,lo8(-(127))
1558 08f2 8993 st Y+,r24
1559 08f4 0150 subi r16,lo8(-(-1))
1560 08f6 07FF sbrs r16,7
1561 08f8 00C0 rjmp .L69
1562 08fa 84E6 ldi r24,lo8(100)
1563 08fc 8093 0000 sts SenderOkay,r24
1564 0900 8091 0000 lds r24,ServoActive
1565 0904 8823 tst r24
1566 0906 01F0 breq .L70
1567 0908 579A sbi 42-0x20,7
1568 090a 00C0 rjmp .L71
1569 .L70:
1570 090c 80E0 ldi r24,lo8(4352)
1571 090e 91E1 ldi r25,hi8(4352)
1572 0910 9093 0000 sts (NickServoValue)+1,r25
1573 0914 8093 0000 sts NickServoValue,r24
1574 .L71:
1575 0918 8091 0000 lds r24,AdNeutralNick
1576 091c 9091 0000 lds r25,(AdNeutralNick)+1
1577 0920 8056 subi r24,lo8(-(-2400))
1578 0922 9940 sbci r25,hi8(-(-2400))
1579 0924 815C subi r24,lo8(11201)
1580 0926 9B42 sbci r25,hi8(11201)
1581 0928 00F0 brlo .L72
1582 092a 8091 0000 lds r24,VersionInfo+5
1583 092e 8160 ori r24,lo8(1)
1584 0930 8093 0000 sts VersionInfo+5,r24
1585 .L72:
1586 0934 8091 0000 lds r24,AdNeutralRoll
1587 0938 9091 0000 lds r25,(AdNeutralRoll)+1
1588 093c 8056 subi r24,lo8(-(-2400))
1589 093e 9940 sbci r25,hi8(-(-2400))
1590 0940 815C subi r24,lo8(11201)
1591 0942 9B42 sbci r25,hi8(11201)
1592 0944 00F0 brlo .L73
1593 0946 8091 0000 lds r24,VersionInfo+5
1594 094a 8260 ori r24,lo8(2)
1595 094c 8093 0000 sts VersionInfo+5,r24
1596 .L73:
1597 0950 8091 0000 lds r24,AdNeutralGier
1598 0954 9091 0000 lds r25,(AdNeutralGier)+1
1599 0958 8C52 subi r24,lo8(-(-300))
1600 095a 9140 sbci r25,hi8(-(-300))
1601 095c 8957 subi r24,lo8(1401)
1602 095e 9540 sbci r25,hi8(1401)
1603 0960 00F0 brlo .L74
1604 0962 8091 0000 lds r24,VersionInfo+5
1605 0966 8460 ori r24,lo8(4)
1606 0968 8093 0000 sts VersionInfo+5,r24
1607 .L74:
1608 096c 8091 0000 lds r24,NeutralAccX
1609 0970 9091 0000 lds r25,(NeutralAccX)+1
1610 0974 8C52 subi r24,lo8(-(-300))
1611 0976 9140 sbci r25,hi8(-(-300))
1612 0978 835C subi r24,lo8(451)
1613 097a 9140 sbci r25,hi8(451)
1614 097c 00F0 brlo .L75
1615 097e 8091 0000 lds r24,VersionInfo+5
1616 0982 8860 ori r24,lo8(8)
1617 0984 8093 0000 sts VersionInfo+5,r24
1618 .L75:
1619 0988 8091 0000 lds r24,NeutralAccY
1620 098c 9091 0000 lds r25,(NeutralAccY)+1
1621 0990 8C52 subi r24,lo8(-(-300))
1622 0992 9140 sbci r25,hi8(-(-300))
1623 0994 835C subi r24,lo8(451)
1624 0996 9140 sbci r25,hi8(451)
1625 0998 00F0 brlo .L76
1626 099a 8091 0000 lds r24,VersionInfo+5
1627 099e 8061 ori r24,lo8(16)
1628 09a0 8093 0000 sts VersionInfo+5,r24
1629 .L76:
1630 09a4 8091 0000 lds r24,NeutralAccZ
1631 09a8 9091 0000 lds r25,(NeutralAccZ)+1
1632 09ac 8050 subi r24,lo8(-(-512))
1633 09ae 9240 sbci r25,hi8(-(-512))
1634 09b0 8355 subi r24,lo8(339)
1635 09b2 9140 sbci r25,hi8(339)
1636 09b4 00F0 brlo .L77
1637 09b6 8091 0000 lds r24,VersionInfo+5
1638 09ba 8062 ori r24,lo8(32)
1639 09bc 8093 0000 sts VersionInfo+5,r24
1640 .L77:
1641 09c0 86E4 ldi r24,lo8(70)
1642 09c2 8093 0000 sts carefree_old,r24
1643 09c6 0E94 0000 call LIBFC_HoTT_Clear
1644 /* epilogue: frame size=0 */
1645 09ca ECE0 ldi r30,12
1646 09cc CDB7 in r28,__SP_L__
1647 09ce DEB7 in r29,__SP_H__
1648 09d0 0C94 0000 jmp __epilogue_restores__+12
1649 /* epilogue end (size=5) */
1650 /* function SetNeutral size 705 (694) */
1652 .lcomm tmpl.27,4
1653 .lcomm tmpl2.28,4
1654 .lcomm tmpl3.29,4
1655 .lcomm tmpl4.30,4
1656 .lcomm oldNick.31,2
1657 .lcomm oldRoll.32,2
1658 .lcomm d2Roll.33,2
1659 .lcomm d2Nick.34,2
1660 .global Mittelwert
1662 Mittelwert:
1663 /* prologue: frame size=19 */
1664 09d4 A3E1 ldi r26,lo8(19)
1665 09d6 B0E0 ldi r27,hi8(19)
1666 09d8 E0E0 ldi r30,pm_lo8(1f)
1667 09da F0E0 ldi r31,pm_hi8(1f)
1668 09dc 0C94 0000 jmp __prologue_saves__+0
1669 1:
1670 /* prologue end (size=6) */
1671 09e0 8091 0000 lds r24,AdNeutralGier
1672 09e4 9091 0000 lds r25,(AdNeutralGier)+1
1673 09e8 2091 0000 lds r18,AdWertGier
1674 09ec 3091 0000 lds r19,(AdWertGier)+1
1675 09f0 821B sub r24,r18
1676 09f2 930B sbc r25,r19
1677 09f4 9093 0000 sts (MesswertGier)+1,r25
1678 09f8 8093 0000 sts MesswertGier,r24
1679 09fc 8091 0000 lds r24,AdWertNickFilter
1680 0a00 9091 0000 lds r25,(AdWertNickFilter)+1
1681 0a04 97FD sbrc r25,7
1682 0a06 0796 adiw r24,7
1683 .L83:
1684 0a08 9C01 movw r18,r24
1685 0a0a 13E0 ldi r17,3
1686 0a0c 3595 1: asr r19
1687 0a0e 2795 ror r18
1688 0a10 1A95 dec r17
1689 0a12 01F4 brne 1b
1690 0a14 3093 0000 sts (MesswertNick)+1,r19
1691 0a18 2093 0000 sts MesswertNick,r18
1692 0a1c 8091 0000 lds r24,AdWertRollFilter
1693 0a20 9091 0000 lds r25,(AdWertRollFilter)+1
1694 0a24 97FD sbrc r25,7
1695 0a26 0796 adiw r24,7
1696 .L84:
1697 0a28 B3E0 ldi r27,3
1698 0a2a 9595 1: asr r25
1699 0a2c 8795 ror r24
1700 0a2e BA95 dec r27
1701 0a30 01F4 brne 1b
1702 0a32 9093 0000 sts (MesswertRoll)+1,r25
1703 0a36 8093 0000 sts MesswertRoll,r24
1704 0a3a 3093 0000 sts (RohMesswertNick)+1,r19
1705 0a3e 2093 0000 sts RohMesswertNick,r18
1706 0a42 9093 0000 sts (RohMesswertRoll)+1,r25
1707 0a46 8093 0000 sts RohMesswertRoll,r24
1708 0a4a 8091 0000 lds r24,Mittelwert_AccNick
1709 0a4e 9091 0000 lds r25,(Mittelwert_AccNick)+1
1710 0a52 AC01 movw r20,r24
1711 0a54 440F lsl r20
1712 0a56 551F rol r21
1713 0a58 480F add r20,r24
1714 0a5a 591F adc r21,r25
1715 0a5c 2091 0000 lds r18,AdWertAccNick
1716 0a60 3091 0000 lds r19,(AdWertAccNick)+1
1717 0a64 C901 movw r24,r18
1718 0a66 880F lsl r24
1719 0a68 991F rol r25
1720 0a6a 880F lsl r24
1721 0a6c 991F rol r25
1722 0a6e 820F add r24,r18
1723 0a70 931F adc r25,r19
1724 0a72 820F add r24,r18
1725 0a74 931F adc r25,r19
1726 0a76 480F add r20,r24
1727 0a78 591F adc r21,r25
1728 0a7a 57FF sbrs r21,7
1729 0a7c 00C0 rjmp .L85
1730 0a7e 4D5F subi r20,lo8(-(3))
1731 0a80 5F4F sbci r21,hi8(-(3))
1732 .L85:
1733 0a82 5595 asr r21
1734 0a84 4795 ror r20
1735 0a86 5595 asr r21
1736 0a88 4795 ror r20
1737 0a8a 5093 0000 sts (Mittelwert_AccNick)+1,r21
1738 0a8e 4093 0000 sts Mittelwert_AccNick,r20
1739 0a92 8091 0000 lds r24,Mittelwert_AccRoll
1740 0a96 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1741 0a9a AC01 movw r20,r24
1742 0a9c 440F lsl r20
1743 0a9e 551F rol r21
1744 0aa0 480F add r20,r24
1745 0aa2 591F adc r21,r25
1746 0aa4 2091 0000 lds r18,AdWertAccRoll
1747 0aa8 3091 0000 lds r19,(AdWertAccRoll)+1
1748 0aac C901 movw r24,r18
1749 0aae 880F lsl r24
1750 0ab0 991F rol r25
1751 0ab2 880F lsl r24
1752 0ab4 991F rol r25
1753 0ab6 820F add r24,r18
1754 0ab8 931F adc r25,r19
1755 0aba 820F add r24,r18
1756 0abc 931F adc r25,r19
1757 0abe 480F add r20,r24
1758 0ac0 591F adc r21,r25
1759 0ac2 57FF sbrs r21,7
1760 0ac4 00C0 rjmp .L86
1761 0ac6 4D5F subi r20,lo8(-(3))
1762 0ac8 5F4F sbci r21,hi8(-(3))
1763 .L86:
1764 0aca 5595 asr r21
1765 0acc 4795 ror r20
1766 0ace 5595 asr r21
1767 0ad0 4795 ror r20
1768 0ad2 5093 0000 sts (Mittelwert_AccRoll)+1,r21
1769 0ad6 4093 0000 sts Mittelwert_AccRoll,r20
1770 0ada 2091 0000 lds r18,AdWertAccNick
1771 0ade 3091 0000 lds r19,(AdWertAccNick)+1
1772 0ae2 C901 movw r24,r18
1773 0ae4 880F lsl r24
1774 0ae6 991F rol r25
1775 0ae8 880F lsl r24
1776 0aea 991F rol r25
1777 0aec 820F add r24,r18
1778 0aee 931F adc r25,r19
1779 0af0 820F add r24,r18
1780 0af2 931F adc r25,r19
1781 0af4 9C01 movw r18,r24
1782 0af6 4427 clr r20
1783 0af8 37FD sbrc r19,7
1784 0afa 4095 com r20
1785 0afc 542F mov r21,r20
1786 0afe 8091 0000 lds r24,IntegralAccNick
1787 0b02 9091 0000 lds r25,(IntegralAccNick)+1
1788 0b06 A091 0000 lds r26,(IntegralAccNick)+2
1789 0b0a B091 0000 lds r27,(IntegralAccNick)+3
1790 0b0e 820F add r24,r18
1791 0b10 931F adc r25,r19
1792 0b12 A41F adc r26,r20
1793 0b14 B51F adc r27,r21
1794 0b16 8093 0000 sts IntegralAccNick,r24
1795 0b1a 9093 0000 sts (IntegralAccNick)+1,r25
1796 0b1e A093 0000 sts (IntegralAccNick)+2,r26
1797 0b22 B093 0000 sts (IntegralAccNick)+3,r27
1798 0b26 2091 0000 lds r18,AdWertAccRoll
1799 0b2a 3091 0000 lds r19,(AdWertAccRoll)+1
1800 0b2e C901 movw r24,r18
1801 0b30 880F lsl r24
1802 0b32 991F rol r25
1803 0b34 880F lsl r24
1804 0b36 991F rol r25
1805 0b38 820F add r24,r18
1806 0b3a 931F adc r25,r19
1807 0b3c 820F add r24,r18
1808 0b3e 931F adc r25,r19
1809 0b40 9C01 movw r18,r24
1810 0b42 4427 clr r20
1811 0b44 37FD sbrc r19,7
1812 0b46 4095 com r20
1813 0b48 542F mov r21,r20
1814 0b4a 8091 0000 lds r24,IntegralAccRoll
1815 0b4e 9091 0000 lds r25,(IntegralAccRoll)+1
1816 0b52 A091 0000 lds r26,(IntegralAccRoll)+2
1817 0b56 B091 0000 lds r27,(IntegralAccRoll)+3
1818 0b5a 820F add r24,r18
1819 0b5c 931F adc r25,r19
1820 0b5e A41F adc r26,r20
1821 0b60 B51F adc r27,r21
1822 0b62 8093 0000 sts IntegralAccRoll,r24
1823 0b66 9093 0000 sts (IntegralAccRoll)+1,r25
1824 0b6a A093 0000 sts (IntegralAccRoll)+2,r26
1825 0b6e B093 0000 sts (IntegralAccRoll)+3,r27
1826 0b72 8091 0000 lds r24,NaviAccNick
1827 0b76 9091 0000 lds r25,(NaviAccNick)+1
1828 0b7a 2091 0000 lds r18,AdWertAccNick
1829 0b7e 3091 0000 lds r19,(AdWertAccNick)+1
1830 0b82 820F add r24,r18
1831 0b84 931F adc r25,r19
1832 0b86 9093 0000 sts (NaviAccNick)+1,r25
1833 0b8a 8093 0000 sts NaviAccNick,r24
1834 0b8e 8091 0000 lds r24,NaviAccRoll
1835 0b92 9091 0000 lds r25,(NaviAccRoll)+1
1836 0b96 2091 0000 lds r18,AdWertAccRoll
1837 0b9a 3091 0000 lds r19,(AdWertAccRoll)+1
1838 0b9e 820F add r24,r18
1839 0ba0 931F adc r25,r19
1840 0ba2 9093 0000 sts (NaviAccRoll)+1,r25
1841 0ba6 8093 0000 sts NaviAccRoll,r24
1842 0baa 8091 0000 lds r24,NaviCntAcc
1843 0bae 9091 0000 lds r25,(NaviCntAcc)+1
1844 0bb2 0196 adiw r24,1
1845 0bb4 9093 0000 sts (NaviCntAcc)+1,r25
1846 0bb8 8093 0000 sts NaviCntAcc,r24
1847 0bbc 8091 0000 lds r24,Aktuell_az
1848 0bc0 9091 0000 lds r25,(Aktuell_az)+1
1849 0bc4 2091 0000 lds r18,NeutralAccZ
1850 0bc8 3091 0000 lds r19,(NeutralAccZ)+1
1851 0bcc 821B sub r24,r18
1852 0bce 930B sbc r25,r19
1853 0bd0 9C01 movw r18,r24
1854 0bd2 4427 clr r20
1855 0bd4 37FD sbrc r19,7
1856 0bd6 4095 com r20
1857 0bd8 542F mov r21,r20
1858 0bda 8091 0000 lds r24,IntegralAccZ
1859 0bde 9091 0000 lds r25,(IntegralAccZ)+1
1860 0be2 A091 0000 lds r26,(IntegralAccZ)+2
1861 0be6 B091 0000 lds r27,(IntegralAccZ)+3
1862 0bea 820F add r24,r18
1863 0bec 931F adc r25,r19
1864 0bee A41F adc r26,r20
1865 0bf0 B51F adc r27,r21
1866 0bf2 8093 0000 sts IntegralAccZ,r24
1867 0bf6 9093 0000 sts (IntegralAccZ)+1,r25
1868 0bfa A093 0000 sts (IntegralAccZ)+2,r26
1869 0bfe B093 0000 sts (IntegralAccZ)+3,r27
1870 0c02 8FEC ldi r24,lo8(-49)
1871 0c04 8093 7A00 sts 122,r24
1872 0c08 1092 0000 sts AdReady,__zero_reg__
1873 0c0c 2091 0000 lds r18,Mess_IntegralRoll
1874 0c10 3091 0000 lds r19,(Mess_IntegralRoll)+1
1875 0c14 4091 0000 lds r20,(Mess_IntegralRoll)+2
1876 0c18 5091 0000 lds r21,(Mess_IntegralRoll)+3
1877 0c1c 2987 std Y+9,r18
1878 0c1e 3A87 std Y+10,r19
1879 0c20 4B87 std Y+11,r20
1880 0c22 5C87 std Y+12,r21
1881 0c24 2954 subi r18,lo8(93001)
1882 0c26 3B46 sbci r19,hi8(93001)
1883 0c28 4140 sbci r20,hlo8(93001)
1884 0c2a 5040 sbci r21,hhi8(93001)
1885 0c2c 04F0 brlt .L87
1886 0c2e 28E4 ldi r18,lo8(93000)
1887 0c30 3BE6 ldi r19,hi8(93000)
1888 0c32 41E0 ldi r20,hlo8(93000)
1889 0c34 50E0 ldi r21,hhi8(93000)
1890 0c36 00C0 rjmp .L167
1891 .L87:
1892 0c38 8985 ldd r24,Y+9
1893 0c3a 9A85 ldd r25,Y+10
1894 0c3c AB85 ldd r26,Y+11
1895 0c3e BC85 ldd r27,Y+12
1896 0c40 885B subi r24,lo8(-93000)
1897 0c42 9449 sbci r25,hi8(-93000)
1898 0c44 AE4F sbci r26,hlo8(-93000)
1899 0c46 BF4F sbci r27,hhi8(-93000)
1900 0c48 04F4 brge .L89
1901 0c4a 28EB ldi r18,lo8(-93000)
1902 0c4c 34E9 ldi r19,hi8(-93000)
1903 0c4e 4EEF ldi r20,hlo8(-93000)
1904 0c50 5FEF ldi r21,hhi8(-93000)
1905 .L167:
1906 0c52 2D83 std Y+5,r18
1907 0c54 3E83 std Y+6,r19
1908 0c56 4F83 std Y+7,r20
1909 0c58 5887 std Y+8,r21
1910 0c5a 00C0 rjmp .L88
1911 .L89:
1912 0c5c 8985 ldd r24,Y+9
1913 0c5e 9A85 ldd r25,Y+10
1914 0c60 AB85 ldd r26,Y+11
1915 0c62 BC85 ldd r27,Y+12
1916 0c64 8D83 std Y+5,r24
1917 0c66 9E83 std Y+6,r25
1918 0c68 AF83 std Y+7,r26
1919 0c6a B887 std Y+8,r27
1920 .L88:
1921 0c6c 2091 0000 lds r18,Mess_IntegralNick
1922 0c70 3091 0000 lds r19,(Mess_IntegralNick)+1
1923 0c74 4091 0000 lds r20,(Mess_IntegralNick)+2
1924 0c78 5091 0000 lds r21,(Mess_IntegralNick)+3
1925 0c7c 2D87 std Y+13,r18
1926 0c7e 3E87 std Y+14,r19
1927 0c80 4F87 std Y+15,r20
1928 0c82 588B std Y+16,r21
1929 0c84 2954 subi r18,lo8(93001)
1930 0c86 3B46 sbci r19,hi8(93001)
1931 0c88 4140 sbci r20,hlo8(93001)
1932 0c8a 5040 sbci r21,hhi8(93001)
1933 0c8c 04F0 brlt .L91
1934 0c8e 28E4 ldi r18,lo8(93000)
1935 0c90 3BE6 ldi r19,hi8(93000)
1936 0c92 41E0 ldi r20,hlo8(93000)
1937 0c94 50E0 ldi r21,hhi8(93000)
1938 0c96 00C0 rjmp .L168
1939 .L91:
1940 0c98 8D85 ldd r24,Y+13
1941 0c9a 9E85 ldd r25,Y+14
1942 0c9c AF85 ldd r26,Y+15
1943 0c9e B889 ldd r27,Y+16
1944 0ca0 885B subi r24,lo8(-93000)
1945 0ca2 9449 sbci r25,hi8(-93000)
1946 0ca4 AE4F sbci r26,hlo8(-93000)
1947 0ca6 BF4F sbci r27,hhi8(-93000)
1948 0ca8 04F4 brge .L93
1949 0caa 28EB ldi r18,lo8(-93000)
1950 0cac 34E9 ldi r19,hi8(-93000)
1951 0cae 4EEF ldi r20,hlo8(-93000)
1952 0cb0 5FEF ldi r21,hhi8(-93000)
1953 .L168:
1954 0cb2 2983 std Y+1,r18
1955 0cb4 3A83 std Y+2,r19
1956 0cb6 4B83 std Y+3,r20
1957 0cb8 5C83 std Y+4,r21
1958 0cba 00C0 rjmp .L92
1959 .L93:
1960 0cbc 8D85 ldd r24,Y+13
1961 0cbe 9E85 ldd r25,Y+14
1962 0cc0 AF85 ldd r26,Y+15
1963 0cc2 B889 ldd r27,Y+16
1964 0cc4 8983 std Y+1,r24
1965 0cc6 9A83 std Y+2,r25
1966 0cc8 AB83 std Y+3,r26
1967 0cca BC83 std Y+4,r27
1968 .L92:
1969 0ccc A091 0000 lds r26,MesswertGier
1970 0cd0 B091 0000 lds r27,(MesswertGier)+1
1971 0cd4 BB8B std Y+19,r27
1972 0cd6 AA8B std Y+18,r26
1973 0cd8 FD01 movw r30,r26
1974 0cda CF01 movw r24,r30
1975 0cdc AA27 clr r26
1976 0cde 97FD sbrc r25,7
1977 0ce0 A095 com r26
1978 0ce2 BA2F mov r27,r26
1979 0ce4 A090 0000 lds r10,Mess_Integral_Gier
1980 0ce8 B090 0000 lds r11,(Mess_Integral_Gier)+1
1981 0cec C090 0000 lds r12,(Mess_Integral_Gier)+2
1982 0cf0 D090 0000 lds r13,(Mess_Integral_Gier)+3
1983 0cf4 A80E add r10,r24
1984 0cf6 B91E adc r11,r25
1985 0cf8 CA1E adc r12,r26
1986 0cfa DB1E adc r13,r27
1987 0cfc A092 0000 sts Mess_Integral_Gier,r10
1988 0d00 B092 0000 sts (Mess_Integral_Gier)+1,r11
1989 0d04 C092 0000 sts (Mess_Integral_Gier)+2,r12
1990 0d08 D092 0000 sts (Mess_Integral_Gier)+3,r13
1991 0d0c E090 0000 lds r14,ErsatzKompass
1992 0d10 F090 0000 lds r15,(ErsatzKompass)+1
1993 0d14 0091 0000 lds r16,(ErsatzKompass)+2
1994 0d18 1091 0000 lds r17,(ErsatzKompass)+3
1995 0d1c E80E add r14,r24
1996 0d1e F91E adc r15,r25
1997 0d20 0A1F adc r16,r26
1998 0d22 1B1F adc r17,r27
1999 0d24 E092 0000 sts ErsatzKompass,r14
2000 0d28 F092 0000 sts (ErsatzKompass)+1,r15
2001 0d2c 0093 0000 sts (ErsatzKompass)+2,r16
2002 0d30 1093 0000 sts (ErsatzKompass)+3,r17
2003 0d34 F091 0000 lds r31,Looping_Nick
2004 0d38 F98B std Y+17,r31
2005 0d3a FF23 tst r31
2006 0d3c 01F0 breq .+2
2007 0d3e 00C0 rjmp .L95
2008 0d40 8091 0000 lds r24,Looping_Roll
2009 0d44 8823 tst r24
2010 0d46 01F0 breq .+2
2011 0d48 00C0 rjmp .L95
2012 0d4a 8091 0000 lds r24,Parameter_GlobalConfig
2013 0d4e 86FF sbrs r24,6
2014 0d50 00C0 rjmp .L95
2015 0d52 8091 0000 lds r24,MesswertRoll
2016 0d56 9091 0000 lds r25,(MesswertRoll)+1
2017 0d5a AA27 clr r26
2018 0d5c 97FD sbrc r25,7
2019 0d5e A095 com r26
2020 0d60 BA2F mov r27,r26
2021 0d62 BC01 movw r22,r24
2022 0d64 CD01 movw r24,r26
2023 0d66 2981 ldd r18,Y+1
2024 0d68 3A81 ldd r19,Y+2
2025 0d6a 4B81 ldd r20,Y+3
2026 0d6c 5C81 ldd r21,Y+4
2027 0d6e 0E94 0000 call __mulsi3
2028 0d72 9B01 movw r18,r22
2029 0d74 AC01 movw r20,r24
2030 0d76 97FF sbrs r25,7
2031 0d78 00C0 rjmp .L96
2032 0d7a 2150 subi r18,lo8(-(2047))
2033 0d7c 384F sbci r19,hi8(-(2047))
2034 0d7e 4F4F sbci r20,hlo8(-(2047))
2035 0d80 5F4F sbci r21,hhi8(-(2047))
2036 .L96:
2037 0d82 BBE0 ldi r27,11
2038 0d84 5595 1: asr r21
2039 0d86 4795 ror r20
2040 0d88 3795 ror r19
2041 0d8a 2795 ror r18
2042 0d8c BA95 dec r27
2043 0d8e 01F4 brne 1b
2044 0d90 8091 0000 lds r24,Parameter_AchsKopplung2
2045 0d94 682E mov r6,r24
2046 0d96 7724 clr r7
2047 0d98 8824 clr r8
2048 0d9a 9924 clr r9
2049 0d9c CA01 movw r24,r20
2050 0d9e B901 movw r22,r18
2051 0da0 A401 movw r20,r8
2052 0da2 9301 movw r18,r6
2053 0da4 0E94 0000 call __mulsi3
2054 0da8 DC01 movw r26,r24
2055 0daa CB01 movw r24,r22
2056 0dac 8093 0000 sts tmpl3.29,r24
2057 0db0 9093 0000 sts (tmpl3.29)+1,r25
2058 0db4 A093 0000 sts (tmpl3.29)+2,r26
2059 0db8 B093 0000 sts (tmpl3.29)+3,r27
2060 0dbc B7FF sbrs r27,7
2061 0dbe 00C0 rjmp .L97
2062 0dc0 8150 subi r24,lo8(-(4095))
2063 0dc2 904F sbci r25,hi8(-(4095))
2064 0dc4 AF4F sbci r26,hlo8(-(4095))
2065 0dc6 BF4F sbci r27,hhi8(-(4095))
2066 .L97:
2067 0dc8 1C01 movw r2,r24
2068 0dca 2D01 movw r4,r26
2069 0dcc ACE0 ldi r26,12
2070 0dce 5594 1: asr r5
2071 0dd0 4794 ror r4
2072 0dd2 3794 ror r3
2073 0dd4 2794 ror r2
2074 0dd6 AA95 dec r26
2075 0dd8 01F4 brne 1b
2076 0dda 2092 0000 sts tmpl3.29,r2
2077 0dde 3092 0000 sts (tmpl3.29)+1,r3
2078 0de2 4092 0000 sts (tmpl3.29)+2,r4
2079 0de6 5092 0000 sts (tmpl3.29)+3,r5
2080 0dea 8091 0000 lds r24,MesswertNick
2081 0dee 9091 0000 lds r25,(MesswertNick)+1
2082 0df2 AA27 clr r26
2083 0df4 97FD sbrc r25,7
2084 0df6 A095 com r26
2085 0df8 BA2F mov r27,r26
2086 0dfa BC01 movw r22,r24
2087 0dfc CD01 movw r24,r26
2088 0dfe 2D81 ldd r18,Y+5
2089 0e00 3E81 ldd r19,Y+6
2090 0e02 4F81 ldd r20,Y+7
2091 0e04 5885 ldd r21,Y+8
2092 0e06 0E94 0000 call __mulsi3
2093 0e0a 97FF sbrs r25,7
2094 0e0c 00C0 rjmp .L98
2095 0e0e 6150 subi r22,lo8(-(2047))
2096 0e10 784F sbci r23,hi8(-(2047))
2097 0e12 8F4F sbci r24,hlo8(-(2047))
2098 0e14 9F4F sbci r25,hhi8(-(2047))
2099 .L98:
2100 0e16 FBE0 ldi r31,11
2101 0e18 9595 1: asr r25
2102 0e1a 8795 ror r24
2103 0e1c 7795 ror r23
2104 0e1e 6795 ror r22
2105 0e20 FA95 dec r31
2106 0e22 01F4 brne 1b
2107 0e24 A401 movw r20,r8
2108 0e26 9301 movw r18,r6
2109 0e28 0E94 0000 call __mulsi3
2110 0e2c DC01 movw r26,r24
2111 0e2e CB01 movw r24,r22
2112 0e30 8093 0000 sts tmpl4.30,r24
2113 0e34 9093 0000 sts (tmpl4.30)+1,r25
2114 0e38 A093 0000 sts (tmpl4.30)+2,r26
2115 0e3c B093 0000 sts (tmpl4.30)+3,r27
2116 0e40 B7FF sbrs r27,7
2117 0e42 00C0 rjmp .L99
2118 0e44 8150 subi r24,lo8(-(4095))
2119 0e46 904F sbci r25,hi8(-(4095))
2120 0e48 AF4F sbci r26,hlo8(-(4095))
2121 0e4a BF4F sbci r27,hhi8(-(4095))
2122 .L99:
2123 0e4c 9C01 movw r18,r24
2124 0e4e AD01 movw r20,r26
2125 0e50 ECE0 ldi r30,12
2126 0e52 5595 1: asr r21
2127 0e54 4795 ror r20
2128 0e56 3795 ror r19
2129 0e58 2795 ror r18
2130 0e5a EA95 dec r30
2131 0e5c 01F4 brne 1b
2132 0e5e 2093 0000 sts tmpl4.30,r18
2133 0e62 3093 0000 sts (tmpl4.30)+1,r19
2134 0e66 4093 0000 sts (tmpl4.30)+2,r20
2135 0e6a 5093 0000 sts (tmpl4.30)+3,r21
2136 0e6e 8091 0000 lds r24,tmpl3.29
2137 0e72 9091 0000 lds r25,(tmpl3.29)+1
2138 0e76 9093 0000 sts (KopplungsteilNickRoll)+1,r25
2139 0e7a 8093 0000 sts KopplungsteilNickRoll,r24
2140 0e7e 8091 0000 lds r24,tmpl4.30
2141 0e82 9091 0000 lds r25,(tmpl4.30)+1
2142 0e86 9093 0000 sts (KopplungsteilRollNick)+1,r25
2143 0e8a 8093 0000 sts KopplungsteilRollNick,r24
2144 0e8e 2219 sub r18,r2
2145 0e90 3309 sbc r19,r3
2146 0e92 4409 sbc r20,r4
2147 0e94 5509 sbc r21,r5
2148 0e96 2093 0000 sts tmpl4.30,r18
2149 0e9a 3093 0000 sts (tmpl4.30)+1,r19
2150 0e9e 4093 0000 sts (tmpl4.30)+2,r20
2151 0ea2 5093 0000 sts (tmpl4.30)+3,r21
2152 0ea6 E20E add r14,r18
2153 0ea8 F31E adc r15,r19
2154 0eaa 041F adc r16,r20
2155 0eac 151F adc r17,r21
2156 0eae E092 0000 sts ErsatzKompass,r14
2157 0eb2 F092 0000 sts (ErsatzKompass)+1,r15
2158 0eb6 0093 0000 sts (ErsatzKompass)+2,r16
2159 0eba 1093 0000 sts (ErsatzKompass)+3,r17
2160 0ebe 8091 0000 lds r24,Parameter_CouplingYawCorrection
2161 0ec2 8823 tst r24
2162 0ec4 01F4 brne .L100
2163 0ec6 57FF sbrs r21,7
2164 0ec8 00C0 rjmp .L101
2165 0eca 2F5F subi r18,lo8(-(1))
2166 0ecc 3F4F sbci r19,hi8(-(1))
2167 0ece 4F4F sbci r20,hlo8(-(1))
2168 0ed0 5F4F sbci r21,hhi8(-(1))
2169 .L101:
2170 0ed2 5595 asr r21
2171 0ed4 4795 ror r20
2172 0ed6 3795 ror r19
2173 0ed8 2795 ror r18
2174 0eda A21A sub r10,r18
2175 0edc B30A sbc r11,r19
2176 0ede C40A sbc r12,r20
2177 0ee0 D50A sbc r13,r21
2178 0ee2 A092 0000 sts Mess_Integral_Gier,r10
2179 0ee6 B092 0000 sts (Mess_Integral_Gier)+1,r11
2180 0eea C092 0000 sts (Mess_Integral_Gier)+2,r12
2181 0eee D092 0000 sts (Mess_Integral_Gier)+3,r13
2182 .L100:
2183 0ef2 2A89 ldd r18,Y+18
2184 0ef4 3B89 ldd r19,Y+19
2185 0ef6 7901 movw r14,r18
2186 0ef8 0027 clr r16
2187 0efa F7FC sbrc r15,7
2188 0efc 0095 com r16
2189 0efe 102F mov r17,r16
2190 0f00 8091 0000 lds r24,tmpl4.30
2191 0f04 9091 0000 lds r25,(tmpl4.30)+1
2192 0f08 A091 0000 lds r26,(tmpl4.30)+2
2193 0f0c B091 0000 lds r27,(tmpl4.30)+3
2194 0f10 E80E add r14,r24
2195 0f12 F91E adc r15,r25
2196 0f14 0A1F adc r16,r26
2197 0f16 1B1F adc r17,r27
2198 0f18 C801 movw r24,r16
2199 0f1a B701 movw r22,r14
2200 0f1c 2981 ldd r18,Y+1
2201 0f1e 3A81 ldd r19,Y+2
2202 0f20 4B81 ldd r20,Y+3
2203 0f22 5C81 ldd r21,Y+4
2204 0f24 0E94 0000 call __mulsi3
2205 0f28 9B01 movw r18,r22
2206 0f2a AC01 movw r20,r24
2207 0f2c 97FF sbrs r25,7
2208 0f2e 00C0 rjmp .L102
2209 0f30 2150 subi r18,lo8(-(2047))
2210 0f32 384F sbci r19,hi8(-(2047))
2211 0f34 4F4F sbci r20,hlo8(-(2047))
2212 0f36 5F4F sbci r21,hhi8(-(2047))
2213 .L102:
2214 0f38 6BE0 ldi r22,11
2215 0f3a 5595 1: asr r21
2216 0f3c 4795 ror r20
2217 0f3e 3795 ror r19
2218 0f40 2795 ror r18
2219 0f42 6A95 dec r22
2220 0f44 01F4 brne 1b
2221 0f46 8091 0000 lds r24,Parameter_AchsKopplung1
2222 0f4a A82E mov r10,r24
2223 0f4c BB24 clr r11
2224 0f4e CC24 clr r12
2225 0f50 DD24 clr r13
2226 0f52 CA01 movw r24,r20
2227 0f54 B901 movw r22,r18
2228 0f56 A601 movw r20,r12
2229 0f58 9501 movw r18,r10
2230 0f5a 0E94 0000 call __mulsi3
2231 0f5e DC01 movw r26,r24
2232 0f60 CB01 movw r24,r22
2233 0f62 8093 0000 sts tmpl.27,r24
2234 0f66 9093 0000 sts (tmpl.27)+1,r25
2235 0f6a A093 0000 sts (tmpl.27)+2,r26
2236 0f6e B093 0000 sts (tmpl.27)+3,r27
2237 0f72 B7FF sbrs r27,7
2238 0f74 00C0 rjmp .L103
2239 0f76 8150 subi r24,lo8(-(4095))
2240 0f78 904F sbci r25,hi8(-(4095))
2241 0f7a AF4F sbci r26,hlo8(-(4095))
2242 0f7c BF4F sbci r27,hhi8(-(4095))
2243 .L103:
2244 0f7e 3C01 movw r6,r24
2245 0f80 4D01 movw r8,r26
2246 0f82 3CE0 ldi r19,12
2247 0f84 9594 1: asr r9
2248 0f86 8794 ror r8
2249 0f88 7794 ror r7
2250 0f8a 6794 ror r6
2251 0f8c 3A95 dec r19
2252 0f8e 01F4 brne 1b
2253 0f90 6092 0000 sts tmpl.27,r6
2254 0f94 7092 0000 sts (tmpl.27)+1,r7
2255 0f98 8092 0000 sts (tmpl.27)+2,r8
2256 0f9c 9092 0000 sts (tmpl.27)+3,r9
2257 0fa0 C801 movw r24,r16
2258 0fa2 B701 movw r22,r14
2259 0fa4 2D81 ldd r18,Y+5
2260 0fa6 3E81 ldd r19,Y+6
2261 0fa8 4F81 ldd r20,Y+7
2262 0faa 5885 ldd r21,Y+8
2263 0fac 0E94 0000 call __mulsi3
2264 0fb0 97FF sbrs r25,7
2265 0fb2 00C0 rjmp .L104
2266 0fb4 6150 subi r22,lo8(-(2047))
2267 0fb6 784F sbci r23,hi8(-(2047))
2268 0fb8 8F4F sbci r24,hlo8(-(2047))
2269 0fba 9F4F sbci r25,hhi8(-(2047))
2270 .L104:
2271 0fbc 2BE0 ldi r18,11
2272 0fbe 9595 1: asr r25
2273 0fc0 8795 ror r24
2274 0fc2 7795 ror r23
2275 0fc4 6795 ror r22
2276 0fc6 2A95 dec r18
2277 0fc8 01F4 brne 1b
2278 0fca A601 movw r20,r12
2279 0fcc 9501 movw r18,r10
2280 0fce 0E94 0000 call __mulsi3
2281 0fd2 DC01 movw r26,r24
2282 0fd4 CB01 movw r24,r22
2283 0fd6 8093 0000 sts tmpl2.28,r24
2284 0fda 9093 0000 sts (tmpl2.28)+1,r25
2285 0fde A093 0000 sts (tmpl2.28)+2,r26
2286 0fe2 B093 0000 sts (tmpl2.28)+3,r27
2287 0fe6 B7FF sbrs r27,7
2288 0fe8 00C0 rjmp .L105
2289 0fea 8150 subi r24,lo8(-(4095))
2290 0fec 904F sbci r25,hi8(-(4095))
2291 0fee AF4F sbci r26,hlo8(-(4095))
2292 0ff0 BF4F sbci r27,hhi8(-(4095))
2293 .L105:
2294 0ff2 AC01 movw r20,r24
2295 0ff4 BD01 movw r22,r26
2296 0ff6 8CE0 ldi r24,12
2297 0ff8 7595 1: asr r23
2298 0ffa 6795 ror r22
2299 0ffc 5795 ror r21
2300 0ffe 4795 ror r20
2301 1000 8A95 dec r24
2302 1002 01F4 brne 1b
2303 1004 4093 0000 sts tmpl2.28,r20
2304 1008 5093 0000 sts (tmpl2.28)+1,r21
2305 100c 6093 0000 sts (tmpl2.28)+2,r22
2306 1010 7093 0000 sts (tmpl2.28)+3,r23
2307 1014 2A89 ldd r18,Y+18
2308 1016 3B89 ldd r19,Y+19
2309 1018 37FF sbrs r19,7
2310 101a 00C0 rjmp .L107
2311 101c 3095 com r19
2312 101e 2195 neg r18
2313 1020 3F4F sbci r19,lo8(-1)
2314 .L107:
2315 1022 2134 cpi r18,65
2316 1024 3105 cpc r19,__zero_reg__
2317 1026 04F0 brlt .L112
2318 1028 D401 movw r26,r8
2319 102a C301 movw r24,r6
2320 102c 97FE sbrs r9,7
2321 102e 00C0 rjmp .L110
2322 1030 B095 com r27
2323 1032 A095 com r26
2324 1034 9095 com r25
2325 1036 8195 neg r24
2326 1038 9F4F sbci r25,lo8(-1)
2327 103a AF4F sbci r26,lo8(-1)
2328 103c BF4F sbci r27,lo8(-1)
2329 .L110:
2330 103e 8138 cpi r24,lo8(129)
2331 1040 9105 cpc r25,__zero_reg__
2332 1042 A105 cpc r26,__zero_reg__
2333 1044 B105 cpc r27,__zero_reg__
2334 1046 04F4 brge .L109
2335 1048 DB01 movw r26,r22
2336 104a CA01 movw r24,r20
2337 104c 77FF sbrs r23,7
2338 104e 00C0 rjmp .L111
2339 1050 B095 com r27
2340 1052 A095 com r26
2341 1054 9095 com r25
2342 1056 8195 neg r24
2343 1058 9F4F sbci r25,lo8(-1)
2344 105a AF4F sbci r26,lo8(-1)
2345 105c BF4F sbci r27,lo8(-1)
2346 .L111:
2347 105e 8138 cpi r24,lo8(129)
2348 1060 9105 cpc r25,__zero_reg__
2349 1062 A105 cpc r26,__zero_reg__
2350 1064 B105 cpc r27,__zero_reg__
2351 1066 04F0 brlt .L112
2352 .L109:
2353 1068 81E0 ldi r24,lo8(1)
2354 106a 8093 0000 sts TrichterFlug,r24
2355 106e 00C0 rjmp .L112
2356 .L95:
2357 1070 1092 0000 sts (KopplungsteilRollNick)+1,__zero_reg__
2358 1074 1092 0000 sts KopplungsteilRollNick,__zero_reg__
2359 1078 1092 0000 sts (KopplungsteilNickRoll)+1,__zero_reg__
2360 107c 1092 0000 sts KopplungsteilNickRoll,__zero_reg__
2361 1080 1092 0000 sts tmpl2.28,__zero_reg__
2362 1084 1092 0000 sts (tmpl2.28)+1,__zero_reg__
2363 1088 1092 0000 sts (tmpl2.28)+2,__zero_reg__
2364 108c 1092 0000 sts (tmpl2.28)+3,__zero_reg__
2365 1090 1092 0000 sts tmpl.27,__zero_reg__
2366 1094 1092 0000 sts (tmpl.27)+1,__zero_reg__
2367 1098 1092 0000 sts (tmpl.27)+2,__zero_reg__
2368 109c 1092 0000 sts (tmpl.27)+3,__zero_reg__
2369 .L112:
2370 10a0 8091 0000 lds r24,tmpl2.28
2371 10a4 9091 0000 lds r25,(tmpl2.28)+1
2372 10a8 A091 0000 lds r26,(tmpl2.28)+2
2373 10ac B091 0000 lds r27,(tmpl2.28)+3
2374 10b0 BC01 movw r22,r24
2375 10b2 CD01 movw r24,r26
2376 10b4 24E6 ldi r18,lo8(100)
2377 10b6 30E0 ldi r19,hi8(100)
2378 10b8 40E0 ldi r20,hlo8(100)
2379 10ba 50E0 ldi r21,hhi8(100)
2380 10bc 0E94 0000 call __divmodsi4
2381 10c0 E090 0000 lds r14,tmpl.27
2382 10c4 F090 0000 lds r15,(tmpl.27)+1
2383 10c8 E21A sub r14,r18
2384 10ca F30A sbc r15,r19
2385 10cc F092 0000 sts (TrimRoll)+1,r15
2386 10d0 E092 0000 sts TrimRoll,r14
2387 10d4 8091 0000 lds r24,tmpl.27
2388 10d8 9091 0000 lds r25,(tmpl.27)+1
2389 10dc A091 0000 lds r26,(tmpl.27)+2
2390 10e0 B091 0000 lds r27,(tmpl.27)+3
2391 10e4 BC01 movw r22,r24
2392 10e6 CD01 movw r24,r26
2393 10e8 24E6 ldi r18,lo8(100)
2394 10ea 30E0 ldi r19,hi8(100)
2395 10ec 40E0 ldi r20,hlo8(100)
2396 10ee 50E0 ldi r21,hhi8(100)
2397 10f0 0E94 0000 call __divmodsi4
2398 10f4 DA01 movw r26,r20
2399 10f6 C901 movw r24,r18
2400 10f8 2091 0000 lds r18,tmpl2.28
2401 10fc 3091 0000 lds r19,(tmpl2.28)+1
2402 1100 8C01 movw r16,r24
2403 1102 021B sub r16,r18
2404 1104 130B sbc r17,r19
2405 1106 1093 0000 sts (TrimNick)+1,r17
2406 110a 0093 0000 sts TrimNick,r16
2407 110e 8091 0000 lds r24,GIER_GRAD_FAKTOR
2408 1112 9091 0000 lds r25,(GIER_GRAD_FAKTOR)+1
2409 1116 A091 0000 lds r26,(GIER_GRAD_FAKTOR)+2
2410 111a B091 0000 lds r27,(GIER_GRAD_FAKTOR)+3
2411 111e BC01 movw r22,r24
2412 1120 CD01 movw r24,r26
2413 1122 28E6 ldi r18,lo8(360)
2414 1124 31E0 ldi r19,hi8(360)
2415 1126 40E0 ldi r20,hlo8(360)
2416 1128 50E0 ldi r21,hhi8(360)
2417 112a 0E94 0000 call __mulsi3
2418 112e 2091 0000 lds r18,ErsatzKompass
2419 1132 3091 0000 lds r19,(ErsatzKompass)+1
2420 1136 4091 0000 lds r20,(ErsatzKompass)+2
2421 113a 5091 0000 lds r21,(ErsatzKompass)+3
2422 113e 2617 cp r18,r22
2423 1140 3707 cpc r19,r23
2424 1142 4807 cpc r20,r24
2425 1144 5907 cpc r21,r25
2426 1146 04F0 brlt .L113
2427 1148 261B sub r18,r22
2428 114a 370B sbc r19,r23
2429 114c 480B sbc r20,r24
2430 114e 590B sbc r21,r25
2431 1150 2093 0000 sts ErsatzKompass,r18
2432 1154 3093 0000 sts (ErsatzKompass)+1,r19
2433 1158 4093 0000 sts (ErsatzKompass)+2,r20
2434 115c 5093 0000 sts (ErsatzKompass)+3,r21
2435 .L113:
2436 1160 2091 0000 lds r18,ErsatzKompass
2437 1164 3091 0000 lds r19,(ErsatzKompass)+1
2438 1168 4091 0000 lds r20,(ErsatzKompass)+2
2439 116c 5091 0000 lds r21,(ErsatzKompass)+3
2440 1170 57FF sbrs r21,7
2441 1172 00C0 rjmp .L114
2442 1174 260F add r18,r22
2443 1176 371F adc r19,r23
2444 1178 481F adc r20,r24
2445 117a 591F adc r21,r25
2446 117c 2093 0000 sts ErsatzKompass,r18
2447 1180 3093 0000 sts (ErsatzKompass)+1,r19
2448 1184 4093 0000 sts (ErsatzKompass)+2,r20
2449 1188 5093 0000 sts (ErsatzKompass)+3,r21
2450 .L114:
2451 118c 6091 0000 lds r22,MesswertRoll
2452 1190 7091 0000 lds r23,(MesswertRoll)+1
2453 1194 6E0D add r22,r14
2454 1196 7F1D adc r23,r15
2455 1198 9B01 movw r18,r22
2456 119a 4427 clr r20
2457 119c 37FD sbrc r19,7
2458 119e 4095 com r20
2459 11a0 542F mov r21,r20
2460 11a2 8091 0000 lds r24,Mess_IntegralRoll2
2461 11a6 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2462 11aa A091 0000 lds r26,(Mess_IntegralRoll2)+2
2463 11ae B091 0000 lds r27,(Mess_IntegralRoll2)+3
2464 11b2 820F add r24,r18
2465 11b4 931F adc r25,r19
2466 11b6 A41F adc r26,r20
2467 11b8 B51F adc r27,r21
2468 11ba 8093 0000 sts Mess_IntegralRoll2,r24
2469 11be 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2470 11c2 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2471 11c6 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2472 11ca 8091 0000 lds r24,LageKorrekturRoll
2473 11ce 9091 0000 lds r25,(LageKorrekturRoll)+1
2474 11d2 681B sub r22,r24
2475 11d4 790B sbc r23,r25
2476 11d6 CB01 movw r24,r22
2477 11d8 AA27 clr r26
2478 11da 97FD sbrc r25,7
2479 11dc A095 com r26
2480 11de BA2F mov r27,r26
2481 11e0 2985 ldd r18,Y+9
2482 11e2 3A85 ldd r19,Y+10
2483 11e4 4B85 ldd r20,Y+11
2484 11e6 5C85 ldd r21,Y+12
2485 11e8 820F add r24,r18
2486 11ea 931F adc r25,r19
2487 11ec A41F adc r26,r20
2488 11ee B51F adc r27,r21
2489 11f0 8093 0000 sts Mess_IntegralRoll,r24
2490 11f4 9093 0000 sts (Mess_IntegralRoll)+1,r25
2491 11f8 A093 0000 sts (Mess_IntegralRoll)+2,r26
2492 11fc B093 0000 sts (Mess_IntegralRoll)+3,r27
2493 1200 C090 0000 lds r12,Umschlag180Roll
2494 1204 D090 0000 lds r13,(Umschlag180Roll)+1
2495 1208 E090 0000 lds r14,(Umschlag180Roll)+2
2496 120c F090 0000 lds r15,(Umschlag180Roll)+3
2497 1210 C816 cp r12,r24
2498 1212 D906 cpc r13,r25
2499 1214 EA06 cpc r14,r26
2500 1216 FB06 cpc r15,r27
2501 1218 04F4 brge .L115
2502 121a 88EA ldi r24,lo8(25000)
2503 121c 91E6 ldi r25,hi8(25000)
2504 121e A0E0 ldi r26,hlo8(25000)
2505 1220 B0E0 ldi r27,hhi8(25000)
2506 1222 8C19 sub r24,r12
2507 1224 9D09 sbc r25,r13
2508 1226 AE09 sbc r26,r14
2509 1228 BF09 sbc r27,r15
2510 122a 8093 0000 sts Mess_IntegralRoll,r24
2511 122e 9093 0000 sts (Mess_IntegralRoll)+1,r25
2512 1232 A093 0000 sts (Mess_IntegralRoll)+2,r26
2513 1236 B093 0000 sts (Mess_IntegralRoll)+3,r27
2514 123a 8093 0000 sts Mess_IntegralRoll2,r24
2515 123e 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2516 1242 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2517 1246 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2518 .L115:
2519 124a 2227 clr r18
2520 124c 3327 clr r19
2521 124e A901 movw r20,r18
2522 1250 2C19 sub r18,r12
2523 1252 3D09 sbc r19,r13
2524 1254 4E09 sbc r20,r14
2525 1256 5F09 sbc r21,r15
2526 1258 8091 0000 lds r24,Mess_IntegralRoll
2527 125c 9091 0000 lds r25,(Mess_IntegralRoll)+1
2528 1260 A091 0000 lds r26,(Mess_IntegralRoll)+2
2529 1264 B091 0000 lds r27,(Mess_IntegralRoll)+3
2530 1268 8217 cp r24,r18
2531 126a 9307 cpc r25,r19
2532 126c A407 cpc r26,r20
2533 126e B507 cpc r27,r21
2534 1270 04F4 brge .L116
2535 1272 D701 movw r26,r14
2536 1274 C601 movw r24,r12
2537 1276 885A subi r24,lo8(-(-25000))
2538 1278 9146 sbci r25,hi8(-(-25000))
2539 127a A040 sbci r26,hlo8(-(-25000))
2540 127c B040 sbci r27,hhi8(-(-25000))
2541 127e 8093 0000 sts Mess_IntegralRoll,r24
2542 1282 9093 0000 sts (Mess_IntegralRoll)+1,r25
2543 1286 A093 0000 sts (Mess_IntegralRoll)+2,r26
2544 128a B093 0000 sts (Mess_IntegralRoll)+3,r27
2545 128e 8093 0000 sts Mess_IntegralRoll2,r24
2546 1292 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2547 1296 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2548 129a B093 0000 sts (Mess_IntegralRoll2)+3,r27
2549 .L116:
2550 129e 6091 0000 lds r22,MesswertNick
2551 12a2 7091 0000 lds r23,(MesswertNick)+1
2552 12a6 600F add r22,r16
2553 12a8 711F adc r23,r17
2554 12aa 9B01 movw r18,r22
2555 12ac 4427 clr r20
2556 12ae 37FD sbrc r19,7
2557 12b0 4095 com r20
2558 12b2 542F mov r21,r20
2559 12b4 8091 0000 lds r24,Mess_IntegralNick2
2560 12b8 9091 0000 lds r25,(Mess_IntegralNick2)+1
2561 12bc A091 0000 lds r26,(Mess_IntegralNick2)+2
2562 12c0 B091 0000 lds r27,(Mess_IntegralNick2)+3
2563 12c4 820F add r24,r18
2564 12c6 931F adc r25,r19
2565 12c8 A41F adc r26,r20
2566 12ca B51F adc r27,r21
2567 12cc 8093 0000 sts Mess_IntegralNick2,r24
2568 12d0 9093 0000 sts (Mess_IntegralNick2)+1,r25
2569 12d4 A093 0000 sts (Mess_IntegralNick2)+2,r26
2570 12d8 B093 0000 sts (Mess_IntegralNick2)+3,r27
2571 12dc 8091 0000 lds r24,LageKorrekturNick
2572 12e0 9091 0000 lds r25,(LageKorrekturNick)+1
2573 12e4 681B sub r22,r24
2574 12e6 790B sbc r23,r25
2575 12e8 CB01 movw r24,r22
2576 12ea AA27 clr r26
2577 12ec 97FD sbrc r25,7
2578 12ee A095 com r26
2579 12f0 BA2F mov r27,r26
2580 12f2 2D85 ldd r18,Y+13
2581 12f4 3E85 ldd r19,Y+14
2582 12f6 4F85 ldd r20,Y+15
2583 12f8 5889 ldd r21,Y+16
2584 12fa 820F add r24,r18
2585 12fc 931F adc r25,r19
2586 12fe A41F adc r26,r20
2587 1300 B51F adc r27,r21
2588 1302 8093 0000 sts Mess_IntegralNick,r24
2589 1306 9093 0000 sts (Mess_IntegralNick)+1,r25
2590 130a A093 0000 sts (Mess_IntegralNick)+2,r26
2591 130e B093 0000 sts (Mess_IntegralNick)+3,r27
2592 1312 E090 0000 lds r14,Umschlag180Nick
2593 1316 F090 0000 lds r15,(Umschlag180Nick)+1
2594 131a 0091 0000 lds r16,(Umschlag180Nick)+2
2595 131e 1091 0000 lds r17,(Umschlag180Nick)+3
2596 1322 E816 cp r14,r24
2597 1324 F906 cpc r15,r25
2598 1326 0A07 cpc r16,r26
2599 1328 1B07 cpc r17,r27
2600 132a 04F4 brge .L117
2601 132c 88EA ldi r24,lo8(25000)
2602 132e 91E6 ldi r25,hi8(25000)
2603 1330 A0E0 ldi r26,hlo8(25000)
2604 1332 B0E0 ldi r27,hhi8(25000)
2605 1334 8E19 sub r24,r14
2606 1336 9F09 sbc r25,r15
2607 1338 A00B sbc r26,r16
2608 133a B10B sbc r27,r17
2609 133c 8093 0000 sts Mess_IntegralNick,r24
2610 1340 9093 0000 sts (Mess_IntegralNick)+1,r25
2611 1344 A093 0000 sts (Mess_IntegralNick)+2,r26
2612 1348 B093 0000 sts (Mess_IntegralNick)+3,r27
2613 134c 8093 0000 sts Mess_IntegralNick2,r24
2614 1350 9093 0000 sts (Mess_IntegralNick2)+1,r25
2615 1354 A093 0000 sts (Mess_IntegralNick2)+2,r26
2616 1358 B093 0000 sts (Mess_IntegralNick2)+3,r27
2617 .L117:
2618 135c 2227 clr r18
2619 135e 3327 clr r19
2620 1360 A901 movw r20,r18
2621 1362 2E19 sub r18,r14
2622 1364 3F09 sbc r19,r15
2623 1366 400B sbc r20,r16
2624 1368 510B sbc r21,r17
2625 136a 8091 0000 lds r24,Mess_IntegralNick
2626 136e 9091 0000 lds r25,(Mess_IntegralNick)+1
2627 1372 A091 0000 lds r26,(Mess_IntegralNick)+2
2628 1376 B091 0000 lds r27,(Mess_IntegralNick)+3
2629 137a 8217 cp r24,r18
2630 137c 9307 cpc r25,r19
2631 137e A407 cpc r26,r20
2632 1380 B507 cpc r27,r21
2633 1382 04F4 brge .L118
2634 1384 D801 movw r26,r16
2635 1386 C701 movw r24,r14
2636 1388 885A subi r24,lo8(-(-25000))
2637 138a 9146 sbci r25,hi8(-(-25000))
2638 138c A040 sbci r26,hlo8(-(-25000))
2639 138e B040 sbci r27,hhi8(-(-25000))
2640 1390 8093 0000 sts Mess_IntegralNick,r24
2641 1394 9093 0000 sts (Mess_IntegralNick)+1,r25
2642 1398 A093 0000 sts (Mess_IntegralNick)+2,r26
2643 139c B093 0000 sts (Mess_IntegralNick)+3,r27
2644 13a0 8093 0000 sts Mess_IntegralNick2,r24
2645 13a4 9093 0000 sts (Mess_IntegralNick2)+1,r25
2646 13a8 A093 0000 sts (Mess_IntegralNick2)+2,r26
2647 13ac B093 0000 sts (Mess_IntegralNick2)+3,r27
2648 .L118:
2649 13b0 8091 0000 lds r24,Mess_Integral_Gier
2650 13b4 9091 0000 lds r25,(Mess_Integral_Gier)+1
2651 13b8 A091 0000 lds r26,(Mess_Integral_Gier)+2
2652 13bc B091 0000 lds r27,(Mess_Integral_Gier)+3
2653 13c0 8093 0000 sts Integral_Gier,r24
2654 13c4 9093 0000 sts (Integral_Gier)+1,r25
2655 13c8 A093 0000 sts (Integral_Gier)+2,r26
2656 13cc B093 0000 sts (Integral_Gier)+3,r27
2657 13d0 8091 0000 lds r24,Mess_IntegralNick
2658 13d4 9091 0000 lds r25,(Mess_IntegralNick)+1
2659 13d8 A091 0000 lds r26,(Mess_IntegralNick)+2
2660 13dc B091 0000 lds r27,(Mess_IntegralNick)+3
2661 13e0 8093 0000 sts IntegralNick,r24
2662 13e4 9093 0000 sts (IntegralNick)+1,r25
2663 13e8 A093 0000 sts (IntegralNick)+2,r26
2664 13ec B093 0000 sts (IntegralNick)+3,r27
2665 13f0 8091 0000 lds r24,Mess_IntegralRoll
2666 13f4 9091 0000 lds r25,(Mess_IntegralRoll)+1
2667 13f8 A091 0000 lds r26,(Mess_IntegralRoll)+2
2668 13fc B091 0000 lds r27,(Mess_IntegralRoll)+3
2669 1400 8093 0000 sts IntegralRoll,r24
2670 1404 9093 0000 sts (IntegralRoll)+1,r25
2671 1408 A093 0000 sts (IntegralRoll)+2,r26
2672 140c B093 0000 sts (IntegralRoll)+3,r27
2673 1410 8091 0000 lds r24,Mess_IntegralNick2
2674 1414 9091 0000 lds r25,(Mess_IntegralNick2)+1
2675 1418 A091 0000 lds r26,(Mess_IntegralNick2)+2
2676 141c B091 0000 lds r27,(Mess_IntegralNick2)+3
2677 1420 8093 0000 sts IntegralNick2,r24
2678 1424 9093 0000 sts (IntegralNick2)+1,r25
2679 1428 A093 0000 sts (IntegralNick2)+2,r26
2680 142c B093 0000 sts (IntegralNick2)+3,r27
2681 1430 8091 0000 lds r24,Mess_IntegralRoll2
2682 1434 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2683 1438 A091 0000 lds r26,(Mess_IntegralRoll2)+2
2684 143c B091 0000 lds r27,(Mess_IntegralRoll2)+3
2685 1440 8093 0000 sts IntegralRoll2,r24
2686 1444 9093 0000 sts (IntegralRoll2)+1,r25
2687 1448 A093 0000 sts (IntegralRoll2)+2,r26
2688 144c B093 0000 sts (IntegralRoll2)+3,r27
2689 1450 8091 0000 lds r24,HiResNick
2690 1454 9091 0000 lds r25,(HiResNick)+1
2691 1458 97FD sbrc r25,7
2692 145a 0796 adiw r24,7
2693 .L119:
2694 145c 03E0 ldi r16,3
2695 145e 9595 1: asr r25
2696 1460 8795 ror r24
2697 1462 0A95 dec r16
2698 1464 01F4 brne 1b
2699 1466 9093 0000 sts (MesswertNick)+1,r25
2700 146a 8093 0000 sts MesswertNick,r24
2701 146e 8091 0000 lds r24,HiResRoll
2702 1472 9091 0000 lds r25,(HiResRoll)+1
2703 1476 97FD sbrc r25,7
2704 1478 0796 adiw r24,7
2705 .L120:
2706 147a 13E0 ldi r17,3
2707 147c 9595 1: asr r25
2708 147e 8795 ror r24
2709 1480 1A95 dec r17
2710 1482 01F4 brne 1b
2711 1484 9093 0000 sts (MesswertRoll)+1,r25
2712 1488 8093 0000 sts MesswertRoll,r24
2713 148c 8091 0000 lds r24,AdWertNick
2714 1490 9091 0000 lds r25,(AdWertNick)+1
2715 1494 0F97 sbiw r24,15
2716 1496 04F4 brge .L121
2717 1498 88E1 ldi r24,lo8(-1000)
2718 149a 9CEF ldi r25,hi8(-1000)
2719 149c 9093 0000 sts (MesswertNick)+1,r25
2720 14a0 8093 0000 sts MesswertNick,r24
2721 .L121:
2722 14a4 8091 0000 lds r24,AdWertNick
2723 14a8 9091 0000 lds r25,(AdWertNick)+1
2724 14ac 0797 sbiw r24,7
2725 14ae 04F4 brge .L122
2726 14b0 80E3 ldi r24,lo8(-2000)
2727 14b2 98EF ldi r25,hi8(-2000)
2728 14b4 9093 0000 sts (MesswertNick)+1,r25
2729 14b8 8093 0000 sts MesswertNick,r24
2730 .L122:
2731 14bc 2091 0000 lds r18,PlatinenVersion
2732 14c0 2A30 cpi r18,lo8(10)
2733 14c2 01F4 brne .L123
2734 14c4 8091 0000 lds r24,AdWertNick
2735 14c8 9091 0000 lds r25,(AdWertNick)+1
2736 14cc 835F subi r24,lo8(1011)
2737 14ce 9340 sbci r25,hi8(1011)
2738 14d0 04F0 brlt .L124
2739 14d2 88EE ldi r24,lo8(1000)
2740 14d4 93E0 ldi r25,hi8(1000)
2741 14d6 9093 0000 sts (MesswertNick)+1,r25
2742 14da 8093 0000 sts MesswertNick,r24
2743 .L124:
2744 14de 8091 0000 lds r24,AdWertNick
2745 14e2 9091 0000 lds r25,(AdWertNick)+1
2746 14e6 8A5F subi r24,lo8(1018)
2747 14e8 9340 sbci r25,hi8(1018)
2748 14ea 04F0 brlt .L126
2749 14ec 00C0 rjmp .L169
2750 .L123:
2751 14ee 8091 0000 lds r24,AdWertNick
2752 14f2 9091 0000 lds r25,(AdWertNick)+1
2753 14f6 815D subi r24,lo8(2001)
2754 14f8 9740 sbci r25,hi8(2001)
2755 14fa 04F0 brlt .L127
2756 14fc 88EE ldi r24,lo8(1000)
2757 14fe 93E0 ldi r25,hi8(1000)
2758 1500 9093 0000 sts (MesswertNick)+1,r25
2759 1504 8093 0000 sts MesswertNick,r24
2760 .L127:
2761 1508 8091 0000 lds r24,AdWertNick
2762 150c 9091 0000 lds r25,(AdWertNick)+1
2763 1510 805E subi r24,lo8(2016)
2764 1512 9740 sbci r25,hi8(2016)
2765 1514 04F0 brlt .L126
2766 .L169:
2767 1516 80ED ldi r24,lo8(2000)
2768 1518 97E0 ldi r25,hi8(2000)
2769 151a 9093 0000 sts (MesswertNick)+1,r25
2770 151e 8093 0000 sts MesswertNick,r24
2771 .L126:
2772 1522 8091 0000 lds r24,AdWertRoll
2773 1526 9091 0000 lds r25,(AdWertRoll)+1
2774 152a 0F97 sbiw r24,15
2775 152c 04F4 brge .L129
2776 152e 88E1 ldi r24,lo8(-1000)
2777 1530 9CEF ldi r25,hi8(-1000)
2778 1532 9093 0000 sts (MesswertRoll)+1,r25
2779 1536 8093 0000 sts MesswertRoll,r24
2780 .L129:
2781 153a 8091 0000 lds r24,AdWertRoll
2782 153e 9091 0000 lds r25,(AdWertRoll)+1
2783 1542 0797 sbiw r24,7
2784 1544 04F4 brge .L130
2785 1546 80E3 ldi r24,lo8(-2000)
2786 1548 98EF ldi r25,hi8(-2000)
2787 154a 9093 0000 sts (MesswertRoll)+1,r25
2788 154e 8093 0000 sts MesswertRoll,r24
2789 .L130:
2790 1552 2A30 cpi r18,lo8(10)
2791 1554 01F4 brne .L131
2792 1556 8091 0000 lds r24,AdWertRoll
2793 155a 9091 0000 lds r25,(AdWertRoll)+1
2794 155e 835F subi r24,lo8(1011)
2795 1560 9340 sbci r25,hi8(1011)
2796 1562 04F0 brlt .L132
2797 1564 88EE ldi r24,lo8(1000)
2798 1566 93E0 ldi r25,hi8(1000)
2799 1568 9093 0000 sts (MesswertRoll)+1,r25
2800 156c 8093 0000 sts MesswertRoll,r24
2801 .L132:
2802 1570 8091 0000 lds r24,AdWertRoll
2803 1574 9091 0000 lds r25,(AdWertRoll)+1
2804 1578 8A5F subi r24,lo8(1018)
2805 157a 9340 sbci r25,hi8(1018)
2806 157c 04F0 brlt .L134
2807 157e 00C0 rjmp .L170
2808 .L131:
2809 1580 8091 0000 lds r24,AdWertRoll
2810 1584 9091 0000 lds r25,(AdWertRoll)+1
2811 1588 815D subi r24,lo8(2001)
2812 158a 9740 sbci r25,hi8(2001)
2813 158c 04F0 brlt .L135
2814 158e 88EE ldi r24,lo8(1000)
2815 1590 93E0 ldi r25,hi8(1000)
2816 1592 9093 0000 sts (MesswertRoll)+1,r25
2817 1596 8093 0000 sts MesswertRoll,r24
2818 .L135:
2819 159a 8091 0000 lds r24,AdWertRoll
2820 159e 9091 0000 lds r25,(AdWertRoll)+1
2821 15a2 805E subi r24,lo8(2016)
2822 15a4 9740 sbci r25,hi8(2016)
2823 15a6 04F0 brlt .L134
2824 .L170:
2825 15a8 80ED ldi r24,lo8(2000)
2826 15aa 97E0 ldi r25,hi8(2000)
2827 15ac 9093 0000 sts (MesswertRoll)+1,r25
2828 15b0 8093 0000 sts MesswertRoll,r24
2829 .L134:
2830 15b4 6091 0000 lds r22,Parameter_Gyro_D
2831 15b8 6623 tst r22
2832 15ba 01F4 brne .+2
2833 15bc 00C0 rjmp .L137
2834 15be 4091 0000 lds r20,HiResNick
2835 15c2 5091 0000 lds r21,(HiResNick)+1
2836 15c6 8091 0000 lds r24,oldNick.31
2837 15ca 9091 0000 lds r25,(oldNick.31)+1
2838 15ce 481B sub r20,r24
2839 15d0 590B sbc r21,r25
2840 15d2 5093 0000 sts (d2Nick.34)+1,r21
2841 15d6 4093 0000 sts d2Nick.34,r20
2842 15da 2091 0000 lds r18,HiResNick
2843 15de 3091 0000 lds r19,(HiResNick)+1
2844 15e2 280F add r18,r24
2845 15e4 391F adc r19,r25
2846 15e6 37FF sbrs r19,7
2847 15e8 00C0 rjmp .L138
2848 15ea 2F5F subi r18,lo8(-(1))
2849 15ec 3F4F sbci r19,hi8(-(1))
2850 .L138:
2851 15ee 3595 asr r19
2852 15f0 2795 ror r18
2853 15f2 3093 0000 sts (oldNick.31)+1,r19
2854 15f6 2093 0000 sts oldNick.31,r18
2855 15fa 4138 cpi r20,129
2856 15fc 5105 cpc r21,__zero_reg__
2857 15fe 04F0 brlt .L139
2858 1600 80E8 ldi r24,lo8(128)
2859 1602 90E0 ldi r25,hi8(128)
2860 1604 00C0 rjmp .L171
2861 .L139:
2862 1606 4058 subi r20,lo8(-128)
2863 1608 5F4F sbci r21,hi8(-128)
2864 160a 04F4 brge .L140
2865 160c 80E8 ldi r24,lo8(-128)
2866 160e 9FEF ldi r25,hi8(-128)
2867 .L171:
2868 1610 9093 0000 sts (d2Nick.34)+1,r25
2869 1614 8093 0000 sts d2Nick.34,r24
2870 .L140:
2871 1618 4091 0000 lds r20,HiResRoll
2872 161c 5091 0000 lds r21,(HiResRoll)+1
2873 1620 8091 0000 lds r24,oldRoll.32
2874 1624 9091 0000 lds r25,(oldRoll.32)+1
2875 1628 481B sub r20,r24
2876 162a 590B sbc r21,r25
2877 162c 5093 0000 sts (d2Roll.33)+1,r21
2878 1630 4093 0000 sts d2Roll.33,r20
2879 1634 2091 0000 lds r18,HiResRoll
2880 1638 3091 0000 lds r19,(HiResRoll)+1
2881 163c 280F add r18,r24
2882 163e 391F adc r19,r25
2883 1640 37FF sbrs r19,7
2884 1642 00C0 rjmp .L142
2885 1644 2F5F subi r18,lo8(-(1))
2886 1646 3F4F sbci r19,hi8(-(1))
2887 .L142:
2888 1648 3595 asr r19
2889 164a 2795 ror r18
2890 164c 3093 0000 sts (oldRoll.32)+1,r19
2891 1650 2093 0000 sts oldRoll.32,r18
2892 1654 4138 cpi r20,129
2893 1656 5105 cpc r21,__zero_reg__
2894 1658 04F0 brlt .L143
2895 165a 80E8 ldi r24,lo8(128)
2896 165c 90E0 ldi r25,hi8(128)
2897 165e 00C0 rjmp .L172
2898 .L143:
2899 1660 4058 subi r20,lo8(-128)
2900 1662 5F4F sbci r21,hi8(-128)
2901 1664 04F4 brge .L144
2902 1666 80E8 ldi r24,lo8(-128)
2903 1668 9FEF ldi r25,hi8(-128)
2904 .L172:
2905 166a 9093 0000 sts (d2Roll.33)+1,r25
2906 166e 8093 0000 sts d2Roll.33,r24
2907 .L144:
2908 1672 462F mov r20,r22
2909 1674 5527 clr r21
2910 1676 8091 0000 lds r24,d2Nick.34
2911 167a 9091 0000 lds r25,(d2Nick.34)+1
2912 167e 849F mul r24,r20
2913 1680 B001 movw r22,r0
2914 1682 859F mul r24,r21
2915 1684 700D add r23,r0
2916 1686 949F mul r25,r20
2917 1688 700D add r23,r0
2918 168a 1124 clr r1
2919 168c 9B01 movw r18,r22
2920 168e 77FF sbrs r23,7
2921 1690 00C0 rjmp .L146
2922 1692 215F subi r18,lo8(-(15))
2923 1694 3F4F sbci r19,hi8(-(15))
2924 .L146:
2925 1696 F4E0 ldi r31,4
2926 1698 3595 1: asr r19
2927 169a 2795 ror r18
2928 169c FA95 dec r31
2929 169e 01F4 brne 1b
2930 16a0 8091 0000 lds r24,MesswertNick
2931 16a4 9091 0000 lds r25,(MesswertNick)+1
2932 16a8 820F add r24,r18
2933 16aa 931F adc r25,r19
2934 16ac 9093 0000 sts (MesswertNick)+1,r25
2935 16b0 8093 0000 sts MesswertNick,r24
2936 16b4 8091 0000 lds r24,d2Roll.33
2937 16b8 9091 0000 lds r25,(d2Roll.33)+1
2938 16bc 849F mul r24,r20
2939 16be D001 movw r26,r0
2940 16c0 859F mul r24,r21
2941 16c2 B00D add r27,r0
2942 16c4 949F mul r25,r20
2943 16c6 B00D add r27,r0
2944 16c8 1124 clr r1
2945 16ca AD01 movw r20,r26
2946 16cc 9D01 movw r18,r26
2947 16ce B7FF sbrs r27,7
2948 16d0 00C0 rjmp .L147
2949 16d2 215F subi r18,lo8(-(15))
2950 16d4 3F4F sbci r19,hi8(-(15))
2951 .L147:
2952 16d6 E4E0 ldi r30,4
2953 16d8 3595 1: asr r19
2954 16da 2795 ror r18
2955 16dc EA95 dec r30
2956 16de 01F4 brne 1b
2957 16e0 8091 0000 lds r24,MesswertRoll
2958 16e4 9091 0000 lds r25,(MesswertRoll)+1
2959 16e8 820F add r24,r18
2960 16ea 931F adc r25,r19
2961 16ec 9093 0000 sts (MesswertRoll)+1,r25
2962 16f0 8093 0000 sts MesswertRoll,r24
2963 16f4 8091 0000 lds r24,HiResNick
2964 16f8 9091 0000 lds r25,(HiResNick)+1
2965 16fc 860F add r24,r22
2966 16fe 971F adc r25,r23
2967 1700 9093 0000 sts (HiResNick)+1,r25
2968 1704 8093 0000 sts HiResNick,r24
2969 1708 8091 0000 lds r24,HiResRoll
2970 170c 9091 0000 lds r25,(HiResRoll)+1
2971 1710 840F add r24,r20
2972 1712 951F adc r25,r21
2973 1714 9093 0000 sts (HiResRoll)+1,r25
2974 1718 8093 0000 sts HiResRoll,r24
2975 .L137:
2976 171c 0091 0000 lds r16,RohMesswertRoll
2977 1720 1091 0000 lds r17,(RohMesswertRoll)+1
2978 1724 8091 0000 lds r24,KopplungsteilNickRoll
2979 1728 9091 0000 lds r25,(KopplungsteilNickRoll)+1
2980 172c 1016 cp __zero_reg__,r16
2981 172e 1106 cpc __zero_reg__,r17
2982 1730 04F4 brge .L148
2983 1732 9C01 movw r18,r24
2984 1734 97FF sbrs r25,7
2985 1736 00C0 rjmp .L149
2986 1738 2227 clr r18
2987 173a 3327 clr r19
2988 173c 281B sub r18,r24
2989 173e 390B sbc r19,r25
2990 .L149:
2991 1740 C901 movw r24,r18
2992 1742 AA27 clr r26
2993 1744 97FD sbrc r25,7
2994 1746 A095 com r26
2995 1748 BA2F mov r27,r26
2996 174a 2091 0000 lds r18,Parameter_CouplingYawCorrection
2997 174e 3327 clr r19
2998 1750 4427 clr r20
2999 1752 5527 clr r21
3000 1754 BC01 movw r22,r24
3001 1756 CD01 movw r24,r26
3002 1758 0E94 0000 call __mulsi3
3003 175c 9B01 movw r18,r22
3004 175e AC01 movw r20,r24
3005 1760 97FF sbrs r25,7
3006 1762 00C0 rjmp .L150
3007 1764 215C subi r18,lo8(-(63))
3008 1766 3F4F sbci r19,hi8(-(63))
3009 1768 4F4F sbci r20,hlo8(-(63))
3010 176a 5F4F sbci r21,hhi8(-(63))
3011 .L150:
3012 176c 76E0 ldi r23,6
3013 176e 5595 1: asr r21
3014 1770 4795 ror r20
3015 1772 3795 ror r19
3016 1774 2795 ror r18
3017 1776 7A95 dec r23
3018 1778 01F4 brne 1b
3019 177a 8091 0000 lds r24,TrimRoll
3020 177e 9091 0000 lds r25,(TrimRoll)+1
3021 1782 820F add r24,r18
3022 1784 931F adc r25,r19
3023 1786 00C0 rjmp .L173
3024 .L148:
3025 1788 97FF sbrs r25,7
3026 178a 00C0 rjmp .L152
3027 178c 9095 com r25
3028 178e 8195 neg r24
3029 1790 9F4F sbci r25,lo8(-1)
3030 .L152:
3031 1792 AA27 clr r26
3032 1794 97FD sbrc r25,7
3033 1796 A095 com r26
3034 1798 BA2F mov r27,r26
3035 179a 2091 0000 lds r18,Parameter_CouplingYawCorrection
3036 179e 3327 clr r19
3037 17a0 4427 clr r20
3038 17a2 5527 clr r21
3039 17a4 BC01 movw r22,r24
3040 17a6 CD01 movw r24,r26
3041 17a8 0E94 0000 call __mulsi3
3042 17ac 9B01 movw r18,r22
3043 17ae AC01 movw r20,r24
3044 17b0 97FF sbrs r25,7
3045 17b2 00C0 rjmp .L153
3046 17b4 215C subi r18,lo8(-(63))
3047 17b6 3F4F sbci r19,hi8(-(63))
3048 17b8 4F4F sbci r20,hlo8(-(63))
3049 17ba 5F4F sbci r21,hhi8(-(63))
3050 .L153:
3051 17bc 66E0 ldi r22,6
3052 17be 5595 1: asr r21
3053 17c0 4795 ror r20
3054 17c2 3795 ror r19
3055 17c4 2795 ror r18
3056 17c6 6A95 dec r22
3057 17c8 01F4 brne 1b
3058 17ca 8091 0000 lds r24,TrimRoll
3059 17ce 9091 0000 lds r25,(TrimRoll)+1
3060 17d2 821B sub r24,r18
3061 17d4 930B sbc r25,r19
3062 .L173:
3063 17d6 9093 0000 sts (TrimRoll)+1,r25
3064 17da 8093 0000 sts TrimRoll,r24
3065 17de E090 0000 lds r14,RohMesswertNick
3066 17e2 F090 0000 lds r15,(RohMesswertNick)+1
3067 17e6 8091 0000 lds r24,KopplungsteilRollNick
3068 17ea 9091 0000 lds r25,(KopplungsteilRollNick)+1
3069 17ee 1E14 cp __zero_reg__,r14
3070 17f0 1F04 cpc __zero_reg__,r15
3071 17f2 04F4 brge .L154
3072 17f4 9C01 movw r18,r24
3073 17f6 97FF sbrs r25,7
3074 17f8 00C0 rjmp .L155
3075 17fa 2227 clr r18
3076 17fc 3327 clr r19
3077 17fe 281B sub r18,r24
3078 1800 390B sbc r19,r25
3079 .L155:
3080 1802 C901 movw r24,r18
3081 1804 AA27 clr r26
3082 1806 97FD sbrc r25,7
3083 1808 A095 com r26
3084 180a BA2F mov r27,r26
3085 180c 2091 0000 lds r18,Parameter_CouplingYawCorrection
3086 1810 3327 clr r19
3087 1812 4427 clr r20
3088 1814 5527 clr r21
3089 1816 BC01 movw r22,r24
3090 1818 CD01 movw r24,r26
3091 181a 0E94 0000 call __mulsi3
3092 181e 9B01 movw r18,r22
3093 1820 AC01 movw r20,r24
3094 1822 97FF sbrs r25,7
3095 1824 00C0 rjmp .L156
3096 1826 215C subi r18,lo8(-(63))
3097 1828 3F4F sbci r19,hi8(-(63))
3098 182a 4F4F sbci r20,hlo8(-(63))
3099 182c 5F4F sbci r21,hhi8(-(63))
3100 .L156:
3101 182e 96E0 ldi r25,6
3102 1830 5595 1: asr r21
3103 1832 4795 ror r20
3104 1834 3795 ror r19
3105 1836 2795 ror r18
3106 1838 9A95 dec r25
3107 183a 01F4 brne 1b
3108 183c 8091 0000 lds r24,TrimNick
3109 1840 9091 0000 lds r25,(TrimNick)+1
3110 1844 820F add r24,r18
3111 1846 931F adc r25,r19
3112 1848 00C0 rjmp .L174
3113 .L154:
3114 184a 97FF sbrs r25,7
3115 184c 00C0 rjmp .L158
3116 184e 9095 com r25
3117 1850 8195 neg r24
3118 1852 9F4F sbci r25,lo8(-1)
3119 .L158:
3120 1854 AA27 clr r26
3121 1856 97FD sbrc r25,7
3122 1858 A095 com r26
3123 185a BA2F mov r27,r26
3124 185c 2091 0000 lds r18,Parameter_CouplingYawCorrection
3125 1860 3327 clr r19
3126 1862 4427 clr r20
3127 1864 5527 clr r21
3128 1866 BC01 movw r22,r24
3129 1868 CD01 movw r24,r26
3130 186a 0E94 0000 call __mulsi3
3131 186e 9B01 movw r18,r22
3132 1870 AC01 movw r20,r24
3133 1872 97FF sbrs r25,7
3134 1874 00C0 rjmp .L159
3135 1876 215C subi r18,lo8(-(63))
3136 1878 3F4F sbci r19,hi8(-(63))
3137 187a 4F4F sbci r20,hlo8(-(63))
3138 187c 5F4F sbci r21,hhi8(-(63))
3139 .L159:
3140 187e 86E0 ldi r24,6
3141 1880 5595 1: asr r21
3142 1882 4795 ror r20
3143 1884 3795 ror r19
3144 1886 2795 ror r18
3145 1888 8A95 dec r24
3146 188a 01F4 brne 1b
3147 188c 8091 0000 lds r24,TrimNick
3148 1890 9091 0000 lds r25,(TrimNick)+1
3149 1894 821B sub r24,r18
3150 1896 930B sbc r25,r19
3151 .L174:
3152 1898 9093 0000 sts (TrimNick)+1,r25
3153 189c 8093 0000 sts TrimNick,r24
3154 18a0 8091 0000 lds r24,Parameter_GlobalConfig
3155 18a4 87FF sbrs r24,7
3156 18a6 00C0 rjmp .L82
3157 18a8 B989 ldd r27,Y+17
3158 18aa BB23 tst r27
3159 18ac 01F0 breq .+2
3160 18ae 00C0 rjmp .L82
3161 18b0 8091 0000 lds r24,Looping_Roll
3162 18b4 8823 tst r24
3163 18b6 01F4 brne .L82
3164 18b8 E1E0 ldi r30,lo8(257)
3165 18ba EE16 cp r14,r30
3166 18bc E1E0 ldi r30,hi8(257)
3167 18be FE06 cpc r15,r30
3168 18c0 04F0 brlt .L161
3169 18c2 8091 0000 lds r24,MesswertNick
3170 18c6 9091 0000 lds r25,(MesswertNick)+1
3171 18ca 8E0D add r24,r14
3172 18cc 9F1D adc r25,r15
3173 18ce 8050 subi r24,lo8(-(-256))
3174 18d0 9140 sbci r25,hi8(-(-256))
3175 18d2 00C0 rjmp .L175
3176 .L161:
3177 18d4 F0E0 ldi r31,lo8(-256)
3178 18d6 EF16 cp r14,r31
3179 18d8 FFEF ldi r31,hi8(-256)
3180 18da FF06 cpc r15,r31
3181 18dc 04F4 brge .L162
3182 18de 8091 0000 lds r24,MesswertNick
3183 18e2 9091 0000 lds r25,(MesswertNick)+1
3184 18e6 8E0D add r24,r14
3185 18e8 9F1D adc r25,r15
3186 18ea 8050 subi r24,lo8(-(256))
3187 18ec 9F4F sbci r25,hi8(-(256))
3188 .L175:
3189 18ee 9093 0000 sts (MesswertNick)+1,r25
3190 18f2 8093 0000 sts MesswertNick,r24
3191 .L162:
3192 18f6 21E0 ldi r18,hi8(257)
3193 18f8 0130 cpi r16,lo8(257)
3194 18fa 1207 cpc r17,r18
3195 18fc 04F0 brlt .L164
3196 18fe 8091 0000 lds r24,MesswertRoll
3197 1902 9091 0000 lds r25,(MesswertRoll)+1
3198 1906 800F add r24,r16
3199 1908 911F adc r25,r17
3200 190a 8050 subi r24,lo8(-(-256))
3201 190c 9140 sbci r25,hi8(-(-256))
3202 190e 00C0 rjmp .L176
3203 .L164:
3204 1910 3FEF ldi r19,hi8(-256)
3205 1912 0030 cpi r16,lo8(-256)
3206 1914 1307 cpc r17,r19
3207 1916 04F4 brge .L82
3208 1918 8091 0000 lds r24,MesswertRoll
3209 191c 9091 0000 lds r25,(MesswertRoll)+1
3210 1920 800F add r24,r16
3211 1922 911F adc r25,r17
3212 1924 8050 subi r24,lo8(-(256))
3213 1926 9F4F sbci r25,hi8(-(256))
3214 .L176:
3215 1928 9093 0000 sts (MesswertRoll)+1,r25
3216 192c 8093 0000 sts MesswertRoll,r24
3217 .L82:
3218 /* epilogue: frame size=19 */
3219 1930 E2E1 ldi r30,18
3220 1932 CD5E subi r28,-19
3221 1934 0C94 0000 jmp __epilogue_restores__+0
3222 /* epilogue end (size=4) */
3223 /* function Mittelwert size 2000 (1990) */
3225 .global SendMotorData
3227 SendMotorData:
3228 /* prologue: frame size=0 */
3229 /* prologue end (size=0) */
3230 1938 8091 0000 lds r24,MotorenEin
3231 193c 8823 tst r24
3232 193e 01F4 brne .L178
3233 1940 8091 0000 lds r24,FC_StatusFlags
3234 1944 8C7F andi r24,lo8(-4)
3235 1946 8093 0000 sts FC_StatusFlags,r24
3236 194a A0E0 ldi r26,lo8(MotorTest)
3237 194c B0E0 ldi r27,hi8(MotorTest)
3238 194e E0E0 ldi r30,lo8(Motor)
3239 1950 F0E0 ldi r31,hi8(Motor)
3240 1952 9BE0 ldi r25,lo8(11)
3241 .L183:
3242 1954 8091 0000 lds r24,PC_MotortestActive
3243 1958 8823 tst r24
3244 195a 01F4 brne .L182
3245 195c 8C93 st X,r24
3246 .L182:
3247 195e 8D91 ld r24,X+
3248 1960 8183 std Z+1,r24
3249 1962 1282 std Z+2,__zero_reg__
3250 1964 9150 subi r25,lo8(-(-1))
3251 1966 3896 adiw r30,8
3252 1968 97FF sbrs r25,7
3253 196a 00C0 rjmp .L183
3254 196c 8091 0000 lds r24,PC_MotortestActive
3255 1970 8823 tst r24
3256 1972 01F0 breq .L185
3257 1974 8091 0000 lds r24,PC_MotortestActive
3258 1978 8150 subi r24,lo8(-(-1))
3259 197a 8093 0000 sts PC_MotortestActive,r24
3260 197e 00C0 rjmp .L185
3261 .L178:
3262 1980 8091 0000 lds r24,FC_StatusFlags
3263 1984 8160 ori r24,lo8(1)
3264 1986 8093 0000 sts FC_StatusFlags,r24
3265 .L185:
3266 198a 8091 0000 lds r24,I2C_TransferActive
3267 198e 8823 tst r24
3268 1990 01F0 breq .L186
3269 1992 1092 0000 sts I2C_TransferActive,__zero_reg__
3270 1996 0895 ret
3271 .L186:
3272 1998 8093 0000 sts motor_write,r24
3273 199c 8093 0000 sts twi_state,r24
3274 19a0 8091 0000 lds r24,BLFlags
3275 19a4 8E7F andi r24,lo8(-2)
3276 19a6 8093 0000 sts BLFlags,r24
3277 19aa 85EA ldi r24,lo8(-91)
3278 19ac 8093 BC00 sts 188,r24
3279 19b0 0895 ret
3280 /* epilogue: frame size=0 */
3281 /* epilogue: noreturn */
3282 /* epilogue end (size=0) */
3283 /* function SendMotorData size 61 (61) */
3285 .global ParameterZuordnung
3287 ParameterZuordnung:
3288 /* prologue: frame size=0 */
3289 19b2 CF93 push r28
3290 19b4 DF93 push r29
3291 /* prologue end (size=2) */
3292 19b6 A0E0 ldi r26,lo8(Poti)
3293 19b8 B0E0 ldi r27,hi8(Poti)
3294 19ba C0E0 ldi r28,lo8(EE_Parameter+5)
3295 19bc D0E0 ldi r29,hi8(EE_Parameter+5)
3296 19be 57E0 ldi r21,lo8(7)
3297 .L203:
3298 19c0 9991 ld r25,Y+
3299 19c2 E92F mov r30,r25
3300 19c4 FF27 clr r31
3301 19c6 EE0F add r30,r30
3302 19c8 FF1F adc r31,r31
3303 19ca E050 subi r30,lo8(-(PPM_in))
3304 19cc F040 sbci r31,hi8(-(PPM_in))
3305 19ce 0190 ld __tmp_reg__,Z+
3306 19d0 F081 ld r31,Z
3307 19d2 E02D mov r30,__tmp_reg__
3308 19d4 E158 subi r30,lo8(-(127))
3309 19d6 FF4F sbci r31,hi8(-(127))
3310 19d8 EF3F cpi r30,255
3311 19da F105 cpc r31,__zero_reg__
3312 19dc 01F0 breq .L194
3313 19de 04F0 brlt .L194
3314 19e0 EFEF ldi r30,lo8(255)
3315 19e2 F0E0 ldi r31,hi8(255)
3316 19e4 00C0 rjmp .L195
3317 .L194:
3318 19e6 F7FF sbrs r31,7
3319 19e8 00C0 rjmp .L195
3320 19ea E0E0 ldi r30,lo8(0)
3321 19ec F0E0 ldi r31,hi8(0)
3322 .L195:
3323 19ee 9931 cpi r25,lo8(25)
3324 19f0 01F4 brne .L197
3325 19f2 EC93 st X,r30
3326 19f4 00C0 rjmp .L193
3327 .L197:
3328 19f6 4C91 ld r20,X
3329 19f8 242F mov r18,r20
3330 19fa 3327 clr r19
3331 19fc E217 cp r30,r18
3332 19fe F307 cpc r31,r19
3333 1a00 01F0 breq .L193
3334 1a02 CF01 movw r24,r30
3335 1a04 821B sub r24,r18
3336 1a06 930B sbc r25,r19
3337 1a08 97FD sbrc r25,7
3338 1a0a 0396 adiw r24,3
3339 .L200:
3340 1a0c 9595 asr r25
3341 1a0e 8795 ror r24
3342 1a10 9595 asr r25
3343 1a12 8795 ror r24
3344 1a14 242F mov r18,r20
3345 1a16 280F add r18,r24
3346 1a18 2C93 st X,r18
3347 1a1a 822F mov r24,r18
3348 1a1c 9927 clr r25
3349 1a1e E817 cp r30,r24
3350 1a20 F907 cpc r31,r25
3351 1a22 04F4 brge .L201
3352 1a24 2150 subi r18,lo8(-(-1))
3353 1a26 00C0 rjmp .L323
3354 .L201:
3355 1a28 2F5F subi r18,lo8(-(1))
3356 .L323:
3357 1a2a 2C93 st X,r18
3358 .L193:
3359 1a2c 5150 subi r21,lo8(-(-1))
3360 1a2e 1196 adiw r26,1
3361 1a30 57FF sbrs r21,7
3362 1a32 00C0 rjmp .L203
3363 1a34 8091 0000 lds r24,EE_Parameter+15
3364 1a38 883F cpi r24,lo8(-8)
3365 1a3a 00F0 brlo .L324
3366 1a3c EFEF ldi r30,lo8(255)
3367 1a3e F0E0 ldi r31,hi8(255)
3368 1a40 E81B sub r30,r24
3369 1a42 F109 sbc r31,__zero_reg__
3370 1a44 E050 subi r30,lo8(-(Poti))
3371 1a46 F040 sbci r31,hi8(-(Poti))
3372 1a48 8081 ld r24,Z
3373 .L324:
3374 1a4a 8093 0000 sts Parameter_Luftdruck_D,r24
3375 1a4e 8091 0000 lds r24,Parameter_Luftdruck_D
3376 1a52 8823 tst r24
3377 1a54 01F0 breq .L207
3378 1a56 8436 cpi r24,lo8(100)
3379 1a58 00F0 brlo .L207
3380 1a5a 84E6 ldi r24,lo8(100)
3381 1a5c 8093 0000 sts Parameter_Luftdruck_D,r24
3382 .L207:
3383 1a60 8091 0000 lds r24,EE_Parameter+17
3384 1a64 883F cpi r24,lo8(-8)
3385 1a66 00F0 brlo .L325
3386 1a68 EFEF ldi r30,lo8(255)
3387 1a6a F0E0 ldi r31,hi8(255)
3388 1a6c E81B sub r30,r24
3389 1a6e F109 sbc r31,__zero_reg__
3390 1a70 E050 subi r30,lo8(-(Poti))
3391 1a72 F040 sbci r31,hi8(-(Poti))
3392 1a74 8081 ld r24,Z
3393 .L325:
3394 1a76 8093 0000 sts Parameter_Hoehe_P,r24
3395 1a7a 8091 0000 lds r24,Parameter_Hoehe_P
3396 1a7e 8823 tst r24
3397 1a80 01F0 breq .L212
3398 1a82 8436 cpi r24,lo8(100)
3399 1a84 00F0 brlo .L212
3400 1a86 84E6 ldi r24,lo8(100)
3401 1a88 8093 0000 sts Parameter_Hoehe_P,r24
3402 .L212:
3403 1a8c 8091 0000 lds r24,EE_Parameter+30
3404 1a90 883F cpi r24,lo8(-8)
3405 1a92 00F0 brlo .L326
3406 1a94 EFEF ldi r30,lo8(255)
3407 1a96 F0E0 ldi r31,hi8(255)
3408 1a98 E81B sub r30,r24
3409 1a9a F109 sbc r31,__zero_reg__
3410 1a9c E050 subi r30,lo8(-(Poti))
3411 1a9e F040 sbci r31,hi8(-(Poti))
3412 1aa0 8081 ld r24,Z
3413 .L326:
3414 1aa2 8093 0000 sts Parameter_Gyro_P,r24
3415 1aa6 8091 0000 lds r24,Parameter_Gyro_P
3416 1aaa 8B30 cpi r24,lo8(11)
3417 1aac 00F4 brsh .L216
3418 1aae 8AE0 ldi r24,lo8(10)
3419 1ab0 00C0 rjmp .L327
3420 .L216:
3421 1ab2 8F3F cpi r24,lo8(-1)
3422 1ab4 01F4 brne .L217
3423 .L327:
3424 1ab6 8093 0000 sts Parameter_Gyro_P,r24
3425 .L217:
3426 1aba 8091 0000 lds r24,EE_Parameter+75
3427 1abe 883F cpi r24,lo8(-8)
3428 1ac0 00F0 brlo .L328
3429 1ac2 EFEF ldi r30,lo8(255)
3430 1ac4 F0E0 ldi r31,hi8(255)
3431 1ac6 E81B sub r30,r24
3432 1ac8 F109 sbc r31,__zero_reg__
3433 1aca E050 subi r30,lo8(-(Poti))
3434 1acc F040 sbci r31,hi8(-(Poti))
3435 1ace 8081 ld r24,Z
3436 .L328:
3437 1ad0 8093 0000 sts Parameter_J16Timing,r24
3438 1ad4 8091 0000 lds r24,Parameter_J16Timing
3439 1ad8 8630 cpi r24,lo8(6)
3440 1ada 00F4 brsh .L221
3441 1adc 85E0 ldi r24,lo8(5)
3442 1ade 00C0 rjmp .L329
3443 .L221:
3444 1ae0 8F3F cpi r24,lo8(-1)
3445 1ae2 01F4 brne .L222
3446 .L329:
3447 1ae4 8093 0000 sts Parameter_J16Timing,r24
3448 .L222:
3449 1ae8 8091 0000 lds r24,EE_Parameter+77
3450 1aec 883F cpi r24,lo8(-8)
3451 1aee 00F0 brlo .L330
3452 1af0 EFEF ldi r30,lo8(255)
3453 1af2 F0E0 ldi r31,hi8(255)
3454 1af4 E81B sub r30,r24
3455 1af6 F109 sbc r31,__zero_reg__
3456 1af8 E050 subi r30,lo8(-(Poti))
3457 1afa F040 sbci r31,hi8(-(Poti))
3458 1afc 8081 ld r24,Z
3459 .L330:
3460 1afe 8093 0000 sts Parameter_J17Timing,r24
3461 1b02 8091 0000 lds r24,Parameter_J17Timing
3462 1b06 8630 cpi r24,lo8(6)
3463 1b08 00F4 brsh .L226
3464 1b0a 85E0 ldi r24,lo8(5)
3465 1b0c 00C0 rjmp .L331
3466 .L226:
3467 1b0e 8F3F cpi r24,lo8(-1)
3468 1b10 01F4 brne .L227
3469 .L331:
3470 1b12 8093 0000 sts Parameter_J17Timing,r24
3471 .L227:
3472 1b16 8091 0000 lds r24,EE_Parameter+56
3473 1b1a 873F cpi r24,lo8(-9)
3474 1b1c 01F4 brne .L229
3475 1b1e 4299 sbic 40-0x20,2
3476 1b20 00C0 rjmp .L362
3477 1b22 00C0 rjmp .L234
3478 .L229:
3479 1b24 863F cpi r24,lo8(-10)
3480 1b26 01F4 brne .L233
3481 1b28 439B sbis 40-0x20,3
3482 1b2a 00C0 rjmp .L234
3483 .L362:
3484 1b2c 8CE8 ldi r24,lo8(-116)
3485 1b2e 00C0 rjmp .L332
3486 .L234:
3487 1b30 86E4 ldi r24,lo8(70)
3488 1b32 00C0 rjmp .L332
3489 .L233:
3490 1b34 883F cpi r24,lo8(-8)
3491 1b36 00F0 brlo .L332
3492 1b38 EFEF ldi r30,lo8(255)
3493 1b3a F0E0 ldi r31,hi8(255)
3494 1b3c E81B sub r30,r24
3495 1b3e F109 sbc r31,__zero_reg__
3496 1b40 E050 subi r30,lo8(-(Poti))
3497 1b42 F040 sbci r31,hi8(-(Poti))
3498 1b44 8081 ld r24,Z
3499 .L332:
3500 1b46 8093 0000 sts Parameter_Servo3,r24
3501 1b4a 8091 0000 lds r24,EE_Parameter+57
3502 1b4e 873F cpi r24,lo8(-9)
3503 1b50 01F4 brne .L239
3504 1b52 4299 sbic 40-0x20,2
3505 1b54 00C0 rjmp .L363
3506 1b56 00C0 rjmp .L244
3507 .L239:
3508 1b58 863F cpi r24,lo8(-10)
3509 1b5a 01F4 brne .L243
3510 1b5c 439B sbis 40-0x20,3
3511 1b5e 00C0 rjmp .L244
3512 .L363:
3513 1b60 8CE8 ldi r24,lo8(-116)
3514 1b62 00C0 rjmp .L333
3515 .L244:
3516 1b64 86E4 ldi r24,lo8(70)
3517 1b66 00C0 rjmp .L333
3518 .L243:
3519 1b68 883F cpi r24,lo8(-8)
3520 1b6a 00F0 brlo .L333
3521 1b6c EFEF ldi r30,lo8(255)
3522 1b6e F0E0 ldi r31,hi8(255)
3523 1b70 E81B sub r30,r24
3524 1b72 F109 sbc r31,__zero_reg__
3525 1b74 E050 subi r30,lo8(-(Poti))
3526 1b76 F040 sbci r31,hi8(-(Poti))
3527 1b78 8081 ld r24,Z
3528 .L333:
3529 1b7a 8093 0000 sts Parameter_Servo4,r24
3530 1b7e 8091 0000 lds r24,EE_Parameter+58
3531 1b82 883F cpi r24,lo8(-8)
3532 1b84 00F0 brlo .L334
3533 1b86 EFEF ldi r30,lo8(255)
3534 1b88 F0E0 ldi r31,hi8(255)
3535 1b8a E81B sub r30,r24
3536 1b8c F109 sbc r31,__zero_reg__
3537 1b8e E050 subi r30,lo8(-(Poti))
3538 1b90 F040 sbci r31,hi8(-(Poti))
3539 1b92 8081 ld r24,Z
3540 .L334:
3541 1b94 8093 0000 sts Parameter_Servo5,r24
3542 1b98 8091 0000 lds r24,EE_Parameter+16
3543 1b9c 883F cpi r24,lo8(-8)
3544 1b9e 00F0 brlo .L335
3545 1ba0 EFEF ldi r30,lo8(255)
3546 1ba2 F0E0 ldi r31,hi8(255)
3547 1ba4 E81B sub r30,r24
3548 1ba6 F109 sbc r31,__zero_reg__
3549 1ba8 E050 subi r30,lo8(-(Poti))
3550 1baa F040 sbci r31,hi8(-(Poti))
3551 1bac 8081 ld r24,Z
3552 .L335:
3553 1bae 8093 0000 sts Parameter_HoehenSchalter,r24
3554 1bb2 8091 0000 lds r24,EE_Parameter+19
3555 1bb6 883F cpi r24,lo8(-8)
3556 1bb8 00F0 brlo .L336
3557 1bba EFEF ldi r30,lo8(255)
3558 1bbc F0E0 ldi r31,hi8(255)
3559 1bbe E81B sub r30,r24
3560 1bc0 F109 sbc r31,__zero_reg__
3561 1bc2 E050 subi r30,lo8(-(Poti))
3562 1bc4 F040 sbci r31,hi8(-(Poti))
3563 1bc6 8081 ld r24,Z
3564 .L336:
3565 1bc8 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
3566 1bcc 8091 0000 lds r24,EE_Parameter+21
3567 1bd0 883F cpi r24,lo8(-8)
3568 1bd2 00F0 brlo .L337
3569 1bd4 EFEF ldi r30,lo8(255)
3570 1bd6 F0E0 ldi r31,hi8(255)
3571 1bd8 E81B sub r30,r24
3572 1bda F109 sbc r31,__zero_reg__
3573 1bdc E050 subi r30,lo8(-(Poti))
3574 1bde F040 sbci r31,hi8(-(Poti))
3575 1be0 8081 ld r24,Z
3576 .L337:
3577 1be2 8093 0000 sts Parameter_Hoehe_GPS_Z,r24
3578 1be6 8091 0000 lds r24,EE_Parameter+29
3579 1bea 883F cpi r24,lo8(-8)
3580 1bec 00F0 brlo .L338
3581 1bee EFEF ldi r30,lo8(255)
3582 1bf0 F0E0 ldi r31,hi8(255)
3583 1bf2 E81B sub r30,r24
3584 1bf4 F109 sbc r31,__zero_reg__
3585 1bf6 E050 subi r30,lo8(-(Poti))
3586 1bf8 F040 sbci r31,hi8(-(Poti))
3587 1bfa 8081 ld r24,Z
3588 .L338:
3589 1bfc 8093 0000 sts Parameter_KompassWirkung,r24
3590 1c00 8091 0000 lds r24,EE_Parameter+31
3591 1c04 883F cpi r24,lo8(-8)
3592 1c06 00F0 brlo .L339
3593 1c08 EFEF ldi r30,lo8(255)
3594 1c0a F0E0 ldi r31,hi8(255)
3595 1c0c E81B sub r30,r24
3596 1c0e F109 sbc r31,__zero_reg__
3597 1c10 E050 subi r30,lo8(-(Poti))
3598 1c12 F040 sbci r31,hi8(-(Poti))
3599 1c14 8081 ld r24,Z
3600 .L339:
3601 1c16 8093 0000 sts Parameter_Gyro_I,r24
3602 1c1a 8091 0000 lds r24,EE_Parameter+32
3603 1c1e 883F cpi r24,lo8(-8)
3604 1c20 00F0 brlo .L340
3605 1c22 EFEF ldi r30,lo8(255)
3606 1c24 F0E0 ldi r31,hi8(255)
3607 1c26 E81B sub r30,r24
3608 1c28 F109 sbc r31,__zero_reg__
3609 1c2a E050 subi r30,lo8(-(Poti))
3610 1c2c F040 sbci r31,hi8(-(Poti))
3611 1c2e 8081 ld r24,Z
3612 .L340:
3613 1c30 8093 0000 sts Parameter_Gyro_D,r24
3614 1c34 8091 0000 lds r24,EE_Parameter+33
3615 1c38 883F cpi r24,lo8(-8)
3616 1c3a 00F0 brlo .L341
3617 1c3c EFEF ldi r30,lo8(255)
3618 1c3e F0E0 ldi r31,hi8(255)
3619 1c40 E81B sub r30,r24
3620 1c42 F109 sbc r31,__zero_reg__
3621 1c44 E050 subi r30,lo8(-(Poti))
3622 1c46 F040 sbci r31,hi8(-(Poti))
3623 1c48 8081 ld r24,Z
3624 .L341:
3625 1c4a 8093 0000 sts Parameter_Gyro_Gier_P,r24
3626 1c4e 8091 0000 lds r24,EE_Parameter+34
3627 1c52 883F cpi r24,lo8(-8)
3628 1c54 00F0 brlo .L342
3629 1c56 EFEF ldi r30,lo8(255)
3630 1c58 F0E0 ldi r31,hi8(255)
3631 1c5a E81B sub r30,r24
3632 1c5c F109 sbc r31,__zero_reg__
3633 1c5e E050 subi r30,lo8(-(Poti))
3634 1c60 F040 sbci r31,hi8(-(Poti))
3635 1c62 8081 ld r24,Z
3636 .L342:
3637 1c64 8093 0000 sts Parameter_Gyro_Gier_I,r24
3638 1c68 8091 0000 lds r24,EE_Parameter+40
3639 1c6c 883F cpi r24,lo8(-8)
3640 1c6e 00F0 brlo .L343
3641 1c70 EFEF ldi r30,lo8(255)
3642 1c72 F0E0 ldi r31,hi8(255)
3643 1c74 E81B sub r30,r24
3644 1c76 F109 sbc r31,__zero_reg__
3645 1c78 E050 subi r30,lo8(-(Poti))
3646 1c7a F040 sbci r31,hi8(-(Poti))
3647 1c7c 8081 ld r24,Z
3648 .L343:
3649 1c7e 8093 0000 sts Parameter_I_Faktor,r24
3650 1c82 8091 0000 lds r24,EE_Parameter+41
3651 1c86 883F cpi r24,lo8(-8)
3652 1c88 00F0 brlo .L344
3653 1c8a EFEF ldi r30,lo8(255)
3654 1c8c F0E0 ldi r31,hi8(255)
3655 1c8e E81B sub r30,r24
3656 1c90 F109 sbc r31,__zero_reg__
3657 1c92 E050 subi r30,lo8(-(Poti))
3658 1c94 F040 sbci r31,hi8(-(Poti))
3659 1c96 8081 ld r24,Z
3660 .L344:
3661 1c98 8093 0000 sts Parameter_UserParam1,r24
3662 1c9c 8091 0000 lds r24,EE_Parameter+42
3663 1ca0 883F cpi r24,lo8(-8)
3664 1ca2 00F0 brlo .L345
3665 1ca4 EFEF ldi r30,lo8(255)
3666 1ca6 F0E0 ldi r31,hi8(255)
3667 1ca8 E81B sub r30,r24
3668 1caa F109 sbc r31,__zero_reg__
3669 1cac E050 subi r30,lo8(-(Poti))
3670 1cae F040 sbci r31,hi8(-(Poti))
3671 1cb0 8081 ld r24,Z
3672 .L345:
3673 1cb2 8093 0000 sts Parameter_UserParam2,r24
3674 1cb6 8091 0000 lds r24,EE_Parameter+43
3675 1cba 883F cpi r24,lo8(-8)
3676 1cbc 00F0 brlo .L346
3677 1cbe EFEF ldi r30,lo8(255)
3678 1cc0 F0E0 ldi r31,hi8(255)
3679 1cc2 E81B sub r30,r24
3680 1cc4 F109 sbc r31,__zero_reg__
3681 1cc6 E050 subi r30,lo8(-(Poti))
3682 1cc8 F040 sbci r31,hi8(-(Poti))
3683 1cca 8081 ld r24,Z
3684 .L346:
3685 1ccc 8093 0000 sts Parameter_UserParam3,r24
3686 1cd0 8091 0000 lds r24,EE_Parameter+44
3687 1cd4 883F cpi r24,lo8(-8)
3688 1cd6 00F0 brlo .L347
3689 1cd8 EFEF ldi r30,lo8(255)
3690 1cda F0E0 ldi r31,hi8(255)
3691 1cdc E81B sub r30,r24
3692 1cde F109 sbc r31,__zero_reg__
3693 1ce0 E050 subi r30,lo8(-(Poti))
3694 1ce2 F040 sbci r31,hi8(-(Poti))
3695 1ce4 8081 ld r24,Z
3696 .L347:
3697 1ce6 8093 0000 sts Parameter_UserParam4,r24
3698 1cea 8091 0000 lds r24,EE_Parameter+70
3699 1cee 883F cpi r24,lo8(-8)
3700 1cf0 00F0 brlo .L348
3701 1cf2 EFEF ldi r30,lo8(255)
3702 1cf4 F0E0 ldi r31,hi8(255)
3703 1cf6 E81B sub r30,r24
3704 1cf8 F109 sbc r31,__zero_reg__
3705 1cfa E050 subi r30,lo8(-(Poti))
3706 1cfc F040 sbci r31,hi8(-(Poti))
3707 1cfe 8081 ld r24,Z
3708 .L348:
3709 1d00 8093 0000 sts Parameter_UserParam5,r24
3710 1d04 8091 0000 lds r24,EE_Parameter+71
3711 1d08 883F cpi r24,lo8(-8)
3712 1d0a 00F0 brlo .L349
3713 1d0c EFEF ldi r30,lo8(255)
3714 1d0e F0E0 ldi r31,hi8(255)
3715 1d10 E81B sub r30,r24
3716 1d12 F109 sbc r31,__zero_reg__
3717 1d14 E050 subi r30,lo8(-(Poti))
3718 1d16 F040 sbci r31,hi8(-(Poti))
3719 1d18 8081 ld r24,Z
3720 .L349:
3721 1d1a 8093 0000 sts Parameter_UserParam6,r24
3722 1d1e 8091 0000 lds r24,EE_Parameter+72
3723 1d22 883F cpi r24,lo8(-8)
3724 1d24 00F0 brlo .L350
3725 1d26 EFEF ldi r30,lo8(255)
3726 1d28 F0E0 ldi r31,hi8(255)
3727 1d2a E81B sub r30,r24
3728 1d2c F109 sbc r31,__zero_reg__
3729 1d2e E050 subi r30,lo8(-(Poti))
3730 1d30 F040 sbci r31,hi8(-(Poti))
3731 1d32 8081 ld r24,Z
3732 .L350:
3733 1d34 8093 0000 sts Parameter_UserParam7,r24
3734 1d38 8091 0000 lds r24,EE_Parameter+73
3735 1d3c 883F cpi r24,lo8(-8)
3736 1d3e 00F0 brlo .L351
3737 1d40 EFEF ldi r30,lo8(255)
3738 1d42 F0E0 ldi r31,hi8(255)
3739 1d44 E81B sub r30,r24
3740 1d46 F109 sbc r31,__zero_reg__
3741 1d48 E050 subi r30,lo8(-(Poti))
3742 1d4a F040 sbci r31,hi8(-(Poti))
3743 1d4c 8081 ld r24,Z
3744 .L351:
3745 1d4e 8093 0000 sts Parameter_UserParam8,r24
3746 1d52 8091 0000 lds r24,EE_Parameter+45
3747 1d56 883F cpi r24,lo8(-8)
3748 1d58 00F0 brlo .L352
3749 1d5a EFEF ldi r30,lo8(255)
3750 1d5c F0E0 ldi r31,hi8(255)
3751 1d5e E81B sub r30,r24
3752 1d60 F109 sbc r31,__zero_reg__
3753 1d62 E050 subi r30,lo8(-(Poti))
3754 1d64 F040 sbci r31,hi8(-(Poti))
3755 1d66 8081 ld r24,Z
3756 .L352:
3757 1d68 8093 0000 sts Parameter_ServoNickControl,r24
3758 1d6c 8091 0000 lds r24,EE_Parameter+49
3759 1d70 883F cpi r24,lo8(-8)
3760 1d72 00F0 brlo .L353
3761 1d74 EFEF ldi r30,lo8(255)
3762 1d76 F0E0 ldi r31,hi8(255)
3763 1d78 E81B sub r30,r24
3764 1d7a F109 sbc r31,__zero_reg__
3765 1d7c E050 subi r30,lo8(-(Poti))
3766 1d7e F040 sbci r31,hi8(-(Poti))
3767 1d80 8081 ld r24,Z
3768 .L353:
3769 1d82 8093 0000 sts Parameter_ServoRollControl,r24
3770 1d86 8091 0000 lds r24,EE_Parameter+59
3771 1d8a 883F cpi r24,lo8(-8)
3772 1d8c 00F0 brlo .L354
3773 1d8e EFEF ldi r30,lo8(255)
3774 1d90 F0E0 ldi r31,hi8(255)
3775 1d92 E81B sub r30,r24
3776 1d94 F109 sbc r31,__zero_reg__
3777 1d96 E050 subi r30,lo8(-(Poti))
3778 1d98 F040 sbci r31,hi8(-(Poti))
3779 1d9a 8081 ld r24,Z
3780 .L354:
3781 1d9c 8093 0000 sts Parameter_LoopGasLimit,r24
3782 1da0 8091 0000 lds r24,EE_Parameter+62
3783 1da4 883F cpi r24,lo8(-8)
3784 1da6 00F0 brlo .L355
3785 1da8 EFEF ldi r30,lo8(255)
3786 1daa F0E0 ldi r31,hi8(255)
3787 1dac E81B sub r30,r24
3788 1dae F109 sbc r31,__zero_reg__
3789 1db0 E050 subi r30,lo8(-(Poti))
3790 1db2 F040 sbci r31,hi8(-(Poti))
3791 1db4 8081 ld r24,Z
3792 .L355:
3793 1db6 8093 0000 sts Parameter_AchsKopplung1,r24
3794 1dba 8091 0000 lds r24,EE_Parameter+63
3795 1dbe 883F cpi r24,lo8(-8)
3796 1dc0 00F0 brlo .L356
3797 1dc2 EFEF ldi r30,lo8(255)
3798 1dc4 F0E0 ldi r31,hi8(255)
3799 1dc6 E81B sub r30,r24
3800 1dc8 F109 sbc r31,__zero_reg__
3801 1dca E050 subi r30,lo8(-(Poti))
3802 1dcc F040 sbci r31,hi8(-(Poti))
3803 1dce 8081 ld r24,Z
3804 .L356:
3805 1dd0 8093 0000 sts Parameter_AchsKopplung2,r24
3806 1dd4 8091 0000 lds r24,EE_Parameter+64
3807 1dd8 883F cpi r24,lo8(-8)
3808 1dda 00F0 brlo .L357
3809 1ddc EFEF ldi r30,lo8(255)
3810 1dde F0E0 ldi r31,hi8(255)
3811 1de0 E81B sub r30,r24
3812 1de2 F109 sbc r31,__zero_reg__
3813 1de4 E050 subi r30,lo8(-(Poti))
3814 1de6 F040 sbci r31,hi8(-(Poti))
3815 1de8 8081 ld r24,Z
3816 .L357:
3817 1dea 8093 0000 sts Parameter_CouplingYawCorrection,r24
3818 1dee 8091 0000 lds r24,EE_Parameter+104
3819 1df2 883F cpi r24,lo8(-8)
3820 1df4 00F0 brlo .L358
3821 1df6 EFEF ldi r30,lo8(255)
3822 1df8 F0E0 ldi r31,hi8(255)
3823 1dfa E81B sub r30,r24
3824 1dfc F109 sbc r31,__zero_reg__
3825 1dfe E050 subi r30,lo8(-(Poti))
3826 1e00 F040 sbci r31,hi8(-(Poti))
3827 1e02 8081 ld r24,Z
3828 .L358:
3829 1e04 8093 0000 sts Parameter_MaximumAltitude,r24
3830 1e08 9091 0000 lds r25,NC_To_FC_MaxAltitude
3831 1e0c 9923 tst r25
3832 1e0e 01F0 breq .L301
3833 1e10 8091 0000 lds r24,Parameter_MaximumAltitude
3834 1e14 9817 cp r25,r24
3835 1e16 00F0 brlo .L300
3836 .L301:
3837 1e18 8091 0000 lds r24,Parameter_MaximumAltitude
3838 1e1c 8823 tst r24
3839 1e1e 01F4 brne .L299
3840 .L300:
3841 1e20 9093 0000 sts Parameter_MaximumAltitude,r25
3842 .L299:
3843 1e24 8091 0000 lds r24,EE_Parameter+13
3844 1e28 8093 0000 sts Parameter_GlobalConfig,r24
3845 1e2c 8091 0000 lds r24,EE_Parameter+110
3846 1e30 8093 0000 sts Parameter_ExtraConfig,r24
3847 1e34 8091 0000 lds r24,EE_Parameter+69
3848 1e38 883F cpi r24,lo8(-8)
3849 1e3a 00F0 brlo .L359
3850 1e3c EFEF ldi r30,lo8(255)
3851 1e3e F0E0 ldi r31,hi8(255)
3852 1e40 E81B sub r30,r24
3853 1e42 F109 sbc r31,__zero_reg__
3854 1e44 E050 subi r30,lo8(-(Poti))
3855 1e46 F040 sbci r31,hi8(-(Poti))
3856 1e48 8081 ld r24,Z
3857 .L359:
3858 1e4a 8093 0000 sts Parameter_DynamicStability,r24
3859 1e4e 8091 0000 lds r24,EE_Parameter+97
3860 1e52 883F cpi r24,lo8(-8)
3861 1e54 00F0 brlo .L360
3862 1e56 EFEF ldi r30,lo8(255)
3863 1e58 F0E0 ldi r31,hi8(255)
3864 1e5a E81B sub r30,r24
3865 1e5c F109 sbc r31,__zero_reg__
3866 1e5e E050 subi r30,lo8(-(Poti))
3867 1e60 F040 sbci r31,hi8(-(Poti))
3868 1e62 8081 ld r24,Z
3869 .L360:
3870 1e64 8093 0000 sts Parameter_ExternalControl,r24
3871 1e68 8091 0000 lds r24,Parameter_I_Faktor
3872 1e6c 282F mov r18,r24
3873 1e6e 3327 clr r19
3874 1e70 2F5F subi r18,lo8(-(1))
3875 1e72 3F4F sbci r19,hi8(-(1))
3876 1e74 8CE3 ldi r24,lo8(10300)
3877 1e76 98E2 ldi r25,hi8(10300)
3878 1e78 B901 movw r22,r18
3879 1e7a 0E94 0000 call __divmodhi4
3880 1e7e 7093 0000 sts (Ki)+1,r23
3881 1e82 6093 0000 sts Ki,r22
3882 1e86 8091 0000 lds r24,EE_Parameter+27
3883 1e8a 8093 0000 sts MAX_GAS,r24
3884 1e8e 8091 0000 lds r24,EE_Parameter+26
3885 1e92 8093 0000 sts MIN_GAS,r24
3886 1e96 9091 0000 lds r25,EE_Parameter+99
3887 1e9a 9333 cpi r25,lo8(51)
3888 1e9c 00F4 brsh .+2
3889 1e9e 00C0 rjmp .L306
3890 1ea0 81E0 ldi r24,lo8(1)
3891 1ea2 8093 0000 sts CareFree,r24
3892 1ea6 983F cpi r25,lo8(-8)
3893 1ea8 00F0 brlo .L307
3894 1eaa EFEF ldi r30,lo8(255)
3895 1eac F0E0 ldi r31,hi8(255)
3896 1eae E91B sub r30,r25
3897 1eb0 F109 sbc r31,__zero_reg__
3898 1eb2 E050 subi r30,lo8(-(Poti))
3899 1eb4 F040 sbci r31,hi8(-(Poti))
3900 1eb6 8081 ld r24,Z
3901 1eb8 8233 cpi r24,lo8(50)
3902 1eba 00F4 brsh .L307
3903 1ebc 1092 0000 sts CareFree,__zero_reg__
3904 .L307:
3905 1ec0 8091 0000 lds r24,carefree_old
3906 1ec4 2091 0000 lds r18,CareFree
3907 1ec8 8217 cp r24,r18
3908 1eca 01F0 breq .L308
3909 1ecc 8330 cpi r24,lo8(3)
3910 1ece 00F4 brsh .L309
3911 1ed0 3091 0000 lds r19,SpeakHoTT
3912 1ed4 2223 tst r18
3913 1ed6 01F0 breq .L310
3914 1ed8 8CED ldi r24,lo8(1500)
3915 1eda 95E0 ldi r25,hi8(1500)
3916 1edc 9093 0000 sts (beeptime)+1,r25
3917 1ee0 8093 0000 sts beeptime,r24
3918 1ee4 3323 tst r19
3919 1ee6 01F4 brne .L312
3920 1ee8 8EE2 ldi r24,lo8(46)
3921 1eea 00C0 rjmp .L361
3922 .L310:
3923 1eec 88EC ldi r24,lo8(200)
3924 1eee 90E0 ldi r25,hi8(200)
3925 1ef0 9093 0000 sts (beeptime)+1,r25
3926 1ef4 8093 0000 sts beeptime,r24
3927 1ef8 3323 tst r19
3928 1efa 01F4 brne .L312
3929 1efc 87E1 ldi r24,lo8(23)
3930 .L361:
3931 1efe 8093 0000 sts SpeakHoTT,r24
3932 .L312:
3933 1f02 85E0 ldi r24,lo8(5)
3934 1f04 8093 0000 sts NeueKompassRichtungMerken,r24
3935 1f08 2093 0000 sts carefree_old,r18
3936 1f0c 00C0 rjmp .L308
3937 .L309:
3938 1f0e 8150 subi r24,lo8(-(-1))
3939 1f10 8093 0000 sts carefree_old,r24
3940 .L308:
3941 1f14 8091 0000 lds r24,FromNaviCtrl+7
3942 1f18 9091 0000 lds r25,(FromNaviCtrl+7)+1
3943 1f1c 97FF sbrs r25,7
3944 1f1e 00C0 rjmp .L316
3945 1f20 8091 0000 lds r24,CareFree
3946 1f24 8823 tst r24
3947 1f26 01F0 breq .L316
3948 1f28 8091 0000 lds r24,VersionInfo+5
3949 1f2c 8068 ori r24,lo8(-128)
3950 1f2e 8093 0000 sts VersionInfo+5,r24
3951 1f32 00C0 rjmp .L316
3952 .L306:
3953 1f34 1092 0000 sts CareFree,__zero_reg__
3954 1f38 8AE0 ldi r24,lo8(10)
3955 1f3a 8093 0000 sts carefree_old,r24
3956 .L316:
3957 1f3e 8091 0000 lds r24,FromNaviCtrl+7
3958 1f42 9091 0000 lds r25,(FromNaviCtrl+7)+1
3959 1f46 97FF sbrs r25,7
3960 1f48 00C0 rjmp .L317
3961 1f4a 8091 0000 lds r24,MotorenEin
3962 1f4e 8823 tst r24
3963 1f50 01F0 breq .L317
3964 1f52 8091 0000 lds r24,CareFree
3965 1f56 8823 tst r24
3966 1f58 01F0 breq .L317
3967 1f5a 8091 0000 lds r24,BeepMuster
3968 1f5e 9091 0000 lds r25,(BeepMuster)+1
3969 1f62 8F5F subi r24,lo8(-1)
3970 1f64 9F4F sbci r25,hi8(-1)
3971 1f66 01F4 brne .L317
3972 1f68 88E9 ldi r24,lo8(15000)
3973 1f6a 9AE3 ldi r25,hi8(15000)
3974 1f6c 9093 0000 sts (beeptime)+1,r25
3975 1f70 8093 0000 sts beeptime,r24
3976 1f74 80E0 ldi r24,lo8(-23552)
3977 1f76 94EA ldi r25,hi8(-23552)
3978 1f78 9093 0000 sts (BeepMuster)+1,r25
3979 1f7c 8093 0000 sts BeepMuster,r24
3980 1f80 1092 0000 sts CareFree,__zero_reg__
3981 .L317:
3982 1f84 8091 0000 lds r24,CareFree
3983 1f88 8823 tst r24
3984 1f8a 01F0 breq .L318
3985 1f8c 8091 0000 lds r24,FC_StatusFlags2
3986 1f90 8160 ori r24,lo8(1)
3987 1f92 8093 0000 sts FC_StatusFlags2,r24
3988 1f96 8091 0000 lds r24,Parameter_AchsKopplung1
3989 1f9a 823D cpi r24,lo8(-46)
3990 1f9c 00F4 brsh .L190
3991 1f9e 825E subi r24,lo8(-(30))
3992 1fa0 8093 0000 sts Parameter_AchsKopplung1,r24
3993 1fa4 00C0 rjmp .L190
3994 .L318:
3995 1fa6 8091 0000 lds r24,FC_StatusFlags2
3996 1faa 8E7F andi r24,lo8(-2)
3997 1fac 8093 0000 sts FC_StatusFlags2,r24
3998 .L190:
3999 /* epilogue: frame size=0 */
4000 1fb0 DF91 pop r29
4001 1fb2 CF91 pop r28
4002 1fb4 0895 ret
4003 /* epilogue end (size=3) */
4004 /* function ParameterZuordnung size 772 (767) */
4006 .lcomm sollGier.0,4
4007 .lcomm tmp_long.1,4
4008 .lcomm tmp_long2.2,4
4009 .lcomm IntegralFehlerNick.3,4
4010 .lcomm IntegralFehlerRoll.4,4
4011 .lcomm RcLostTimer.5,2
4012 .lcomm delay_neutral.6,1
4013 .lcomm delay_einschalten.7,1
4014 .lcomm delay_ausschalten.8,1
4015 .lcomm move_safety_switch.9,1
4016 .lcomm ausgleichNick.10,4
4017 .lcomm ausgleichRoll.11,4
4018 .lcomm stick_nick.12,2
4019 .lcomm stick_roll.13,2
4020 .lcomm cnt.14,2
4021 .lcomm last_n_p.15,1
4022 .lcomm last_n_n.16,1
4023 .lcomm last_r_p.17,1
4024 .lcomm last_r_n.18,1
4025 .lcomm MittelIntegralNick_Alt.19,4
4026 .lcomm MittelIntegralRoll_Alt.20,4
4027 .lcomm HeightTrimming.21,2
4028 .lcomm FilterHCGas.22,2
4029 .lcomm HoverGasFilter.23,4
4030 .data
4033 delay.24:
4034 004f 64 .byte 100
4035 .lcomm BaroAtUpperLimit.25,1
4036 .lcomm BaroAtLowerLimit.26,1
4037 .text
4038 .global MotorRegler
4040 MotorRegler:
4041 /* prologue: frame size=23 */
4042 1fb6 A7E1 ldi r26,lo8(23)
4043 1fb8 B0E0 ldi r27,hi8(23)
4044 1fba E0E0 ldi r30,pm_lo8(1f)
4045 1fbc F0E0 ldi r31,pm_hi8(1f)
4046 1fbe 0C94 0000 jmp __prologue_saves__+0
4047 1:
4048 /* prologue end (size=6) */
4049 1fc2 0E94 0000 call Mittelwert
4050 1fc6 8091 0000 lds r24,FC_StatusFlags
4051 1fca 9927 clr r25
4052 1fcc 8471 andi r24,lo8(20)
4053 1fce 9070 andi r25,hi8(20)
4054 1fd0 892B or r24,r25
4055 1fd2 01F4 brne .L365
4056 1fd4 8091 0000 lds r24,EE_Parameter+111
4057 1fd8 82FF sbrs r24,2
4058 1fda 00C0 rjmp .L366
4059 1fdc 8091 0000 lds r24,HoverGas
4060 1fe0 9091 0000 lds r25,(HoverGas)+1
4061 1fe4 0097 sbiw r24,0
4062 1fe6 01F0 breq .L367
4063 1fe8 02E0 ldi r16,hi8(600)
4064 1fea 8835 cpi r24,lo8(600)
4065 1fec 9007 cpc r25,r16
4066 1fee 04F4 brge .L367
4067 1ff0 9C01 movw r18,r24
4068 1ff2 97FF sbrs r25,7
4069 1ff4 00C0 rjmp .L368
4070 1ff6 2D5F subi r18,lo8(-(3))
4071 1ff8 3F4F sbci r19,hi8(-(3))
4072 .L368:
4073 1ffa 3595 asr r19
4074 1ffc 2795 ror r18
4075 1ffe 3595 asr r19
4076 2000 2795 ror r18
4077 2002 8091 0000 lds r24,EE_Parameter+37
4078 2006 9927 clr r25
4079 2008 289F mul r18,r24
4080 200a A001 movw r20,r0
4081 200c 299F mul r18,r25
4082 200e 500D add r21,r0
4083 2010 389F mul r19,r24
4084 2012 500D add r21,r0
4085 2014 1124 clr r1
4086 2016 CA01 movw r24,r20
4087 2018 64E6 ldi r22,lo8(100)
4088 201a 70E0 ldi r23,hi8(100)
4089 201c 0E94 0000 call __divmodhi4
4090 2020 CB01 movw r24,r22
4091 2022 00C0 rjmp .L887
4092 .L367:
4093 2024 8DE2 ldi r24,lo8(45)
4094 2026 90E0 ldi r25,hi8(45)
4095 2028 00C0 rjmp .L887
4096 .L366:
4097 202a 8091 0000 lds r24,EE_Parameter+37
4098 202e 9927 clr r25
4099 .L887:
4100 2030 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4101 2034 8093 0000 sts HooverGasEmergencyPercent,r24
4102 .L365:
4103 2038 2091 0000 lds r18,GasIsZeroCnt
4104 203c 3091 0000 lds r19,(GasIsZeroCnt)+1
4105 2040 55E7 ldi r21,hi8(30000)
4106 2042 2033 cpi r18,lo8(30000)
4107 2044 3507 cpc r19,r21
4108 2046 01F4 brne .L371
4109 2048 1092 0000 sts (StickGas)+1,__zero_reg__
4110 204c 1092 0000 sts StickGas,__zero_reg__
4111 2050 8091 0000 lds r24,MIN_GAS
4112 2054 9927 clr r25
4113 2056 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4114 205a 8093 0000 sts HooverGasEmergencyPercent,r24
4115 .L371:
4116 205e 6091 0000 lds r22,StickGas
4117 2062 7091 0000 lds r23,(StickGas)+1
4118 2066 7A83 std Y+2,r23
4119 2068 6983 std Y+1,r22
4120 206a 8091 0000 lds r24,MIN_GAS
4121 206e 9927 clr r25
4122 2070 0A96 adiw r24,10
4123 2072 6817 cp r22,r24
4124 2074 7907 cpc r23,r25
4125 2076 04F4 brge .L372
4126 2078 9A83 std Y+2,r25
4127 207a 8983 std Y+1,r24
4128 .L372:
4129 207c 8091 0000 lds r24,SenderOkay
4130 2080 8436 cpi r24,lo8(100)
4131 2082 00F0 brlo .+2
4132 2084 00C0 rjmp .L373
4133 2086 8091 0000 lds r24,FC_StatusFlags2
4134 208a 82FD sbrc r24,2
4135 208c 00C0 rjmp .L373
4136 208e 8091 0000 lds r24,RcLostTimer.5
4137 2092 9091 0000 lds r25,(RcLostTimer.5)+1
4138 2096 0097 sbiw r24,0
4139 2098 01F0 breq .L374
4140 209a 0197 sbiw r24,1
4141 209c 9093 0000 sts (RcLostTimer.5)+1,r25
4142 20a0 8093 0000 sts RcLostTimer.5,r24
4143 20a4 00C0 rjmp .L375
4144 .L374:
4145 20a6 1092 0000 sts MotorenEin,__zero_reg__
4146 20aa 9093 0000 sts (modell_fliegt)+1,r25
4147 20ae 8093 0000 sts modell_fliegt,r24
4148 20b2 8091 0000 lds r24,FC_StatusFlags
4149 20b6 8D7E andi r24,lo8(-19)
4150 20b8 8093 0000 sts FC_StatusFlags,r24
4151 .L375:
4152 20bc 8091 0000 lds r24,PlatinenVersion
4153 20c0 8A30 cpi r24,lo8(10)
4154 20c2 01F0 breq .L377
4155 20c4 8431 cpi r24,lo8(20)
4156 20c6 00F0 brlo .L376
4157 .L377:
4158 20c8 289A sbi 37-0x20,0
4159 20ca 00C0 rjmp .L378
4160 .L376:
4161 20cc 2898 cbi 37-0x20,0
4162 .L378:
4163 20ce 8091 0000 lds r24,modell_fliegt
4164 20d2 9091 0000 lds r25,(modell_fliegt)+1
4165 20d6 895E subi r24,lo8(1001)
4166 20d8 9340 sbci r25,hi8(1001)
4167 20da 00F0 brlo .L379
4168 20dc 8091 0000 lds r24,Capacity+6
4169 20e0 8536 cpi r24,lo8(101)
4170 20e2 00F0 brlo .L379
4171 20e4 8091 0000 lds r24,HooverGasEmergencyPercent
4172 20e8 9091 0000 lds r25,(HooverGasEmergencyPercent)+1
4173 20ec 9A83 std Y+2,r25
4174 20ee 8983 std Y+1,r24
4175 20f0 8091 0000 lds r24,FC_StatusFlags
4176 20f4 8061 ori r24,lo8(16)
4177 20f6 8093 0000 sts FC_StatusFlags,r24
4178 20fa 8091 0000 lds r24,EE_Parameter+1
4179 20fe A82F mov r26,r24
4180 2100 BB27 clr r27
4181 2102 AA0F add r26,r26
4182 2104 BB1F adc r27,r27
4183 2106 FD01 movw r30,r26
4184 2108 E050 subi r30,lo8(-(PPM_diff))
4185 210a F040 sbci r31,hi8(-(PPM_diff))
4186 210c 1182 std Z+1,__zero_reg__
4187 210e 1082 st Z,__zero_reg__
4188 2110 8091 0000 lds r24,EE_Parameter+2
4189 2114 282F mov r18,r24
4190 2116 3327 clr r19
4191 2118 220F add r18,r18
4192 211a 331F adc r19,r19
4193 211c C901 movw r24,r18
4194 211e 8050 subi r24,lo8(-(PPM_diff))
4195 2120 9040 sbci r25,hi8(-(PPM_diff))
4196 2122 FC01 movw r30,r24
4197 2124 1182 std Z+1,__zero_reg__
4198 2126 1082 st Z,__zero_reg__
4199 2128 A050 subi r26,lo8(-(PPM_in))
4200 212a B040 sbci r27,hi8(-(PPM_in))
4201 212c 1196 adiw r26,1
4202 212e 1C92 st X,__zero_reg__
4203 2130 1E92 st -X,__zero_reg__
4204 2132 2050 subi r18,lo8(-(PPM_in))
4205 2134 3040 sbci r19,hi8(-(PPM_in))
4206 2136 D901 movw r26,r18
4207 2138 1196 adiw r26,1
4208 213a 1C92 st X,__zero_reg__
4209 213c 1E92 st -X,__zero_reg__
4210 213e 8091 0000 lds r24,EE_Parameter+4
4211 2142 E82F mov r30,r24
4212 2144 FF27 clr r31
4213 2146 EE0F add r30,r30
4214 2148 FF1F adc r31,r31
4215 214a E050 subi r30,lo8(-(PPM_in))
4216 214c F040 sbci r31,hi8(-(PPM_in))
4217 214e 1182 std Z+1,__zero_reg__
4218 2150 1082 st Z,__zero_reg__
4219 2152 00C0 rjmp .L381
4220 .L379:
4221 2154 1092 0000 sts MotorenEin,__zero_reg__
4222 2158 00C0 rjmp .L381
4223 .L373:
4224 215a 8091 0000 lds r24,SenderOkay
4225 215e 8D38 cpi r24,lo8(-115)
4226 2160 00F4 brsh .+2
4227 2162 00C0 rjmp .L382
4228 2164 8091 0000 lds r24,FC_StatusFlags
4229 2168 8F7E andi r24,lo8(-17)
4230 216a 8093 0000 sts FC_StatusFlags,r24
4231 216e 9091 0000 lds r25,EE_Parameter+38
4232 2172 82E3 ldi r24,lo8(50)
4233 2174 989F mul r25,r24
4234 2176 C001 movw r24,r0
4235 2178 1124 clr r1
4236 217a 9093 0000 sts (RcLostTimer.5)+1,r25
4237 217e 8093 0000 sts RcLostTimer.5,r24
4238 2182 E981 ldd r30,Y+1
4239 2184 FA81 ldd r31,Y+2
4240 2186 B997 sbiw r30,41
4241 2188 04F0 brlt .L383
4242 218a 8091 0000 lds r24,MotorenEin
4243 218e 8823 tst r24
4244 2190 01F0 breq .L383
4245 2192 8091 0000 lds r24,modell_fliegt
4246 2196 9091 0000 lds r25,(modell_fliegt)+1
4247 219a FFEF ldi r31,hi8(-1)
4248 219c 8F3F cpi r24,lo8(-1)
4249 219e 9F07 cpc r25,r31
4250 21a0 01F0 breq .L383
4251 21a2 0196 adiw r24,1
4252 21a4 9093 0000 sts (modell_fliegt)+1,r25
4253 21a8 8093 0000 sts modell_fliegt,r24
4254 .L383:
4255 21ac 8091 0000 lds r24,modell_fliegt
4256 21b0 9091 0000 lds r25,(modell_fliegt)+1
4257 21b4 8F3F cpi r24,255
4258 21b6 9105 cpc r25,__zero_reg__
4259 21b8 01F0 breq .+2
4260 21ba 00F4 brsh .L385
4261 21bc 1092 0000 sts SummeNick,__zero_reg__
4262 21c0 1092 0000 sts (SummeNick)+1,__zero_reg__
4263 21c4 1092 0000 sts (SummeNick)+2,__zero_reg__
4264 21c8 1092 0000 sts (SummeNick)+3,__zero_reg__
4265 21cc 1092 0000 sts SummeRoll,__zero_reg__
4266 21d0 1092 0000 sts (SummeRoll)+1,__zero_reg__
4267 21d4 1092 0000 sts (SummeRoll)+2,__zero_reg__
4268 21d8 1092 0000 sts (SummeRoll)+3,__zero_reg__
4269 21dc 1092 0000 sts sollGier.0,__zero_reg__
4270 21e0 1092 0000 sts (sollGier.0)+1,__zero_reg__
4271 21e4 1092 0000 sts (sollGier.0)+2,__zero_reg__
4272 21e8 1092 0000 sts (sollGier.0)+3,__zero_reg__
4273 21ec 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4274 21f0 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4275 21f4 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4276 21f8 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4277 21fc 00C0 rjmp .L386
4278 .L385:
4279 21fe 8091 0000 lds r24,FC_StatusFlags
4280 2202 8260 ori r24,lo8(2)
4281 2204 8093 0000 sts FC_StatusFlags,r24
4282 .L386:
4283 2208 8091 0000 lds r24,EE_Parameter+3
4284 220c E82F mov r30,r24
4285 220e FF27 clr r31
4286 2210 EE0F add r30,r30
4287 2212 FF1F adc r31,r31
4288 2214 E050 subi r30,lo8(-(PPM_in))
4289 2216 F040 sbci r31,hi8(-(PPM_in))
4290 2218 8081 ld r24,Z
4291 221a 9181 ldd r25,Z+1
4292 221c 8135 cpi r24,81
4293 221e 9105 cpc r25,__zero_reg__
4294 2220 04F4 brge .+2
4295 2222 00C0 rjmp .L387
4296 2224 2091 0000 lds r18,MotorenEin
4297 2228 2223 tst r18
4298 222a 01F0 breq .+2
4299 222c 00C0 rjmp .L387
4300 222e 8091 0000 lds r24,EE_Parameter+4
4301 2232 E82F mov r30,r24
4302 2234 FF27 clr r31
4303 2236 EE0F add r30,r30
4304 2238 FF1F adc r31,r31
4305 223a E050 subi r30,lo8(-(PPM_in))
4306 223c F040 sbci r31,hi8(-(PPM_in))
4307 223e 8081 ld r24,Z
4308 2240 9181 ldd r25,Z+1
4309 2242 8C34 cpi r24,76
4310 2244 9105 cpc r25,__zero_reg__
4311 2246 04F4 brge .+2
4312 2248 00C0 rjmp .L388
4313 224a 8091 0000 lds r24,delay_neutral.6
4314 224e 8F5F subi r24,lo8(-(1))
4315 2250 8093 0000 sts delay_neutral.6,r24
4316 2254 893C cpi r24,lo8(-55)
4317 2256 00F4 brsh .+2
4318 2258 00C0 rjmp .L387
4319 225a 2093 0000 sts delay_neutral.6,r18
4320 225e 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4321 2262 1092 0000 sts modell_fliegt,__zero_reg__
4322 2266 3091 0000 lds r19,EE_Parameter+1
4323 226a E32F mov r30,r19
4324 226c FF27 clr r31
4325 226e EE0F add r30,r30
4326 2270 FF1F adc r31,r31
4327 2272 E050 subi r30,lo8(-(PPM_in))
4328 2274 F040 sbci r31,hi8(-(PPM_in))
4329 2276 8081 ld r24,Z
4330 2278 9181 ldd r25,Z+1
4331 227a 8734 cpi r24,71
4332 227c 9105 cpc r25,__zero_reg__
4333 227e 04F4 brge .L391
4334 2280 8091 0000 lds r24,EE_Parameter+2
4335 2284 E82F mov r30,r24
4336 2286 FF27 clr r31
4337 2288 EE0F add r30,r30
4338 228a FF1F adc r31,r31
4339 228c E050 subi r30,lo8(-(PPM_in))
4340 228e F040 sbci r31,hi8(-(PPM_in))
4341 2290 8081 ld r24,Z
4342 2292 9181 ldd r25,Z+1
4343 2294 0190 ld __tmp_reg__,Z+
4344 2296 F081 ld r31,Z
4345 2298 E02D mov r30,__tmp_reg__
4346 229a F7FF sbrs r31,7
4347 229c 00C0 rjmp .L392
4348 229e F095 com r31
4349 22a0 E195 neg r30
4350 22a2 FF4F sbci r31,lo8(-1)
4351 .L392:
4352 22a4 E734 cpi r30,71
4353 22a6 F105 cpc r31,__zero_reg__
4354 22a8 04F4 brge .+2
4355 22aa 00C0 rjmp .L390
4356 .L391:
4357 22ac 41E0 ldi r20,lo8(1)
4358 22ae 2091 0000 lds r18,EE_Parameter+2
4359 22b2 A22F mov r26,r18
4360 22b4 BB27 clr r27
4361 22b6 AA0F add r26,r26
4362 22b8 BB1F adc r27,r27
4363 22ba A050 subi r26,lo8(-(PPM_in))
4364 22bc B040 sbci r27,hi8(-(PPM_in))
4365 22be 8D91 ld r24,X+
4366 22c0 9C91 ld r25,X
4367 22c2 1197 sbiw r26,1
4368 22c4 8734 cpi r24,71
4369 22c6 9105 cpc r25,__zero_reg__
4370 22c8 04F0 brlt .L393
4371 22ca E32F mov r30,r19
4372 22cc FF27 clr r31
4373 22ce EE0F add r30,r30
4374 22d0 FF1F adc r31,r31
4375 22d2 E050 subi r30,lo8(-(PPM_in))
4376 22d4 F040 sbci r31,hi8(-(PPM_in))
4377 22d6 8081 ld r24,Z
4378 22d8 9181 ldd r25,Z+1
4379 .L393:
4380 22da 8D91 ld r24,X+
4381 22dc 9C91 ld r25,X
4382 22de 8734 cpi r24,71
4383 22e0 9105 cpc r25,__zero_reg__
4384 22e2 04F0 brlt .L394
4385 22e4 8091 0000 lds r24,EE_Parameter+1
4386 22e8 E82F mov r30,r24
4387 22ea FF27 clr r31
4388 22ec EE0F add r30,r30
4389 22ee FF1F adc r31,r31
4390 22f0 E050 subi r30,lo8(-(PPM_in))
4391 22f2 F040 sbci r31,hi8(-(PPM_in))
4392 22f4 8081 ld r24,Z
4393 22f6 9181 ldd r25,Z+1
4394 22f8 8734 cpi r24,71
4395 22fa 9105 cpc r25,__zero_reg__
4396 22fc 04F0 brlt .L394
4397 22fe 42E0 ldi r20,lo8(2)
4398 .L394:
4399 2300 E22F mov r30,r18
4400 2302 FF27 clr r31
4401 2304 EE0F add r30,r30
4402 2306 FF1F adc r31,r31
4403 2308 E050 subi r30,lo8(-(PPM_in))
4404 230a F040 sbci r31,hi8(-(PPM_in))
4405 230c 8081 ld r24,Z
4406 230e 9181 ldd r25,Z+1
4407 2310 8634 cpi r24,70
4408 2312 9105 cpc r25,__zero_reg__
4409 2314 04F4 brge .L395
4410 2316 8091 0000 lds r24,EE_Parameter+1
4411 231a E82F mov r30,r24
4412 231c FF27 clr r31
4413 231e EE0F add r30,r30
4414 2320 FF1F adc r31,r31
4415 2322 E050 subi r30,lo8(-(PPM_in))
4416 2324 F040 sbci r31,hi8(-(PPM_in))
4417 2326 8081 ld r24,Z
4418 2328 9181 ldd r25,Z+1
4419 232a 8734 cpi r24,71
4420 232c 9105 cpc r25,__zero_reg__
4421 232e 04F0 brlt .L395
4422 2330 43E0 ldi r20,lo8(3)
4423 .L395:
4424 2332 E22F mov r30,r18
4425 2334 FF27 clr r31
4426 2336 EE0F add r30,r30
4427 2338 FF1F adc r31,r31
4428 233a E050 subi r30,lo8(-(PPM_in))
4429 233c F040 sbci r31,hi8(-(PPM_in))
4430 233e 8081 ld r24,Z
4431 2340 9181 ldd r25,Z+1
4432 2342 8A5B subi r24,lo8(-70)
4433 2344 9F4F sbci r25,hi8(-70)
4434 2346 04F4 brge .L396
4435 2348 8091 0000 lds r24,EE_Parameter+1
4436 234c E82F mov r30,r24
4437 234e FF27 clr r31
4438 2350 EE0F add r30,r30
4439 2352 FF1F adc r31,r31
4440 2354 E050 subi r30,lo8(-(PPM_in))
4441 2356 F040 sbci r31,hi8(-(PPM_in))
4442 2358 8081 ld r24,Z
4443 235a 9181 ldd r25,Z+1
4444 235c 8734 cpi r24,71
4445 235e 9105 cpc r25,__zero_reg__
4446 2360 04F0 brlt .L396
4447 2362 44E0 ldi r20,lo8(4)
4448 .L396:
4449 2364 E22F mov r30,r18
4450 2366 FF27 clr r31
4451 2368 EE0F add r30,r30
4452 236a FF1F adc r31,r31
4453 236c E050 subi r30,lo8(-(PPM_in))
4454 236e F040 sbci r31,hi8(-(PPM_in))
4455 2370 8081 ld r24,Z
4456 2372 9181 ldd r25,Z+1
4457 2374 8A5B subi r24,lo8(-70)
4458 2376 9F4F sbci r25,hi8(-70)
4459 2378 04F4 brge .L397
4460 237a 8091 0000 lds r24,EE_Parameter+1
4461 237e E82F mov r30,r24
4462 2380 FF27 clr r31
4463 2382 EE0F add r30,r30
4464 2384 FF1F adc r31,r31
4465 2386 E050 subi r30,lo8(-(PPM_in))
4466 2388 F040 sbci r31,hi8(-(PPM_in))
4467 238a 8081 ld r24,Z
4468 238c 9181 ldd r25,Z+1
4469 238e 8634 cpi r24,70
4470 2390 9105 cpc r25,__zero_reg__
4471 2392 04F4 brge .L397
4472 2394 45E0 ldi r20,lo8(5)
4473 .L397:
4474 2396 842F mov r24,r20
4475 2398 0E94 0000 call SetActiveParamSet
4476 .L390:
4477 239c 8091 0000 lds r24,EE_Parameter+2
4478 23a0 E82F mov r30,r24
4479 23a2 FF27 clr r31
4480 23a4 EE0F add r30,r30
4481 23a6 FF1F adc r31,r31
4482 23a8 E050 subi r30,lo8(-(PPM_in))
4483 23aa F040 sbci r31,hi8(-(PPM_in))
4484 23ac 8081 ld r24,Z
4485 23ae 9181 ldd r25,Z+1
4486 23b0 0190 ld __tmp_reg__,Z+
4487 23b2 F081 ld r31,Z
4488 23b4 E02D mov r30,__tmp_reg__
4489 23b6 F7FF sbrs r31,7
4490 23b8 00C0 rjmp .L399
4491 23ba F095 com r31
4492 23bc E195 neg r30
4493 23be FF4F sbci r31,lo8(-1)
4494 .L399:
4495 23c0 7E97 sbiw r30,30
4496 23c2 04F4 brge .L398
4497 23c4 8091 0000 lds r24,EE_Parameter+1
4498 23c8 E82F mov r30,r24
4499 23ca FF27 clr r31
4500 23cc EE0F add r30,r30
4501 23ce FF1F adc r31,r31
4502 23d0 E050 subi r30,lo8(-(PPM_in))
4503 23d2 F040 sbci r31,hi8(-(PPM_in))
4504 23d4 8081 ld r24,Z
4505 23d6 9181 ldd r25,Z+1
4506 23d8 8A5B subi r24,lo8(-70)
4507 23da 9F4F sbci r25,hi8(-70)
4508 23dc 04F4 brge .L398
4509 23de 81E0 ldi r24,lo8(1)
4510 23e0 8093 0000 sts WinkelOut+6,r24
4511 23e4 1092 0000 sts CalibrationDone,__zero_reg__
4512 23e8 88EE ldi r24,lo8(1000)
4513 23ea 93E0 ldi r25,hi8(1000)
4514 23ec 9093 0000 sts (beeptime)+1,r25
4515 23f0 8093 0000 sts beeptime,r24
4516 23f4 00C0 rjmp .L387
4517 .L398:
4518 23f6 0E94 0000 call GetActiveParamSet
4519 23fa 0E94 0000 call ParamSet_ReadFromEEProm
4520 23fe 80E0 ldi r24,lo8(0)
4521 2400 0E94 0000 call LipoDetection
4522 2404 8091 0000 lds r24,EE_Parameter+39
4523 2408 0E94 0000 call LIBFC_ReceiverInit
4524 240c 8091 0000 lds r24,Parameter_GlobalConfig
4525 2410 80FF sbrs r24,0
4526 2412 00C0 rjmp .L401
4527 2414 8091 0000 lds r24,MessLuftdruck
4528 2418 9091 0000 lds r25,(MessLuftdruck)+1
4529 241c 875B subi r24,lo8(951)
4530 241e 9340 sbci r25,hi8(951)
4531 2420 00F4 brsh .L403
4532 2422 8091 0000 lds r24,MessLuftdruck
4533 2426 9091 0000 lds r25,(MessLuftdruck)+1
4534 242a 8E5E subi r24,lo8(750)
4535 242c 9240 sbci r25,hi8(750)
4536 242e 00F4 brsh .L401
4537 .L403:
4538 2430 0E94 0000 call SucheLuftruckOffset
4539 .L401:
4540 2434 80E0 ldi r24,lo8(0)
4541 2436 0E94 0000 call SetNeutral
4542 243a 81E0 ldi r24,lo8(1)
4543 243c 8093 0000 sts CalibrationDone,r24
4544 2440 8093 0000 sts ServoActive,r24
4545 2444 579A sbi 42-0x20,7
4546 2446 00C0 rjmp .L888
4547 .L388:
4548 2448 8081 ld r24,Z
4549 244a 9181 ldd r25,Z+1
4550 244c 855B subi r24,lo8(-75)
4551 244e 9F4F sbci r25,hi8(-75)
4552 2450 04F4 brge .L405
4553 2452 8091 0000 lds r24,delay_neutral.6
4554 2456 8F5F subi r24,lo8(-(1))
4555 2458 8093 0000 sts delay_neutral.6,r24
4556 245c 893C cpi r24,lo8(-55)
4557 245e 00F0 brlo .L387
4558 2460 2093 0000 sts MotorenEin,r18
4559 2464 2093 0000 sts delay_neutral.6,r18
4560 2468 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4561 246c 1092 0000 sts modell_fliegt,__zero_reg__
4562 2470 81E0 ldi r24,lo8(1)
4563 2472 0E94 0000 call SetNeutral
4564 2476 81E0 ldi r24,lo8(1)
4565 2478 8093 0000 sts CalibrationDone,r24
4566 .L888:
4567 247c 88E1 ldi r24,lo8(24)
4568 247e 8093 0000 sts SpeakHoTT,r24
4569 2482 0E94 0000 call GetActiveParamSet
4570 2486 68E7 ldi r22,lo8(120)
4571 2488 70E0 ldi r23,hi8(120)
4572 248a 0E94 0000 call Piep
4573 248e 00C0 rjmp .L387
4574 .L405:
4575 2490 2093 0000 sts delay_neutral.6,r18
4576 .L387:
4577 2494 8091 0000 lds r24,EE_Parameter+3
4578 2498 E82F mov r30,r24
4579 249a FF27 clr r31
4580 249c EE0F add r30,r30
4581 249e FF1F adc r31,r31
4582 24a0 E050 subi r30,lo8(-(PPM_in))
4583 24a2 F040 sbci r31,hi8(-(PPM_in))
4584 24a4 8081 ld r24,Z
4585 24a6 9181 ldd r25,Z+1
4586 24a8 8B5A subi r24,lo8(-85)
4587 24aa 9F4F sbci r25,hi8(-85)
4588 24ac 04F0 brlt .+2
4589 24ae 00C0 rjmp .L408
4590 24b0 2091 0000 lds r18,EE_Parameter+100
4591 24b4 E22F mov r30,r18
4592 24b6 FF27 clr r31
4593 24b8 EF77 andi r30,lo8(127)
4594 24ba F070 andi r31,hi8(127)
4595 24bc EE0F add r30,r30
4596 24be FF1F adc r31,r31
4597 24c0 E050 subi r30,lo8(-(PPM_diff))
4598 24c2 F040 sbci r31,hi8(-(PPM_diff))
4599 24c4 8081 ld r24,Z
4600 24c6 9181 ldd r25,Z+1
4601 24c8 0697 sbiw r24,6
4602 24ca 04F0 brlt .L409
4603 24cc 84E6 ldi r24,lo8(100)
4604 24ce 00C0 rjmp .L889
4605 .L409:
4606 24d0 8081 ld r24,Z
4607 24d2 9181 ldd r25,Z+1
4608 24d4 8B5F subi r24,lo8(-5)
4609 24d6 9F4F sbci r25,hi8(-5)
4610 24d8 04F4 brge .L410
4611 24da 8CE9 ldi r24,lo8(-100)
4612 .L889:
4613 24dc 8093 0000 sts move_safety_switch.9,r24
4614 .L410:
4615 24e0 8091 0000 lds r24,MotorenEin
4616 24e4 E091 0000 lds r30,EE_Parameter+4
4617 24e8 8823 tst r24
4618 24ea 01F0 breq .+2
4619 24ec 00C0 rjmp .L412
4620 24ee FF27 clr r31
4621 24f0 EE0F add r30,r30
4622 24f2 FF1F adc r31,r31
4623 24f4 E050 subi r30,lo8(-(PPM_in))
4624 24f6 F040 sbci r31,hi8(-(PPM_in))
4625 24f8 8081 ld r24,Z
4626 24fa 9181 ldd r25,Z+1
4627 24fc 855B subi r24,lo8(-75)
4628 24fe 9F4F sbci r25,hi8(-75)
4629 2500 04F4 brge .L415
4630 2502 8091 0000 lds r24,EE_Parameter+111
4631 2506 83FD sbrc r24,3
4632 2508 00C0 rjmp .L416
4633 250a E22F mov r30,r18
4634 250c FF27 clr r31
4635 250e EE0F add r30,r30
4636 2510 FF1F adc r31,r31
4637 2512 E050 subi r30,lo8(-(PPM_in))
4638 2514 F040 sbci r31,hi8(-(PPM_in))
4639 2516 8081 ld r24,Z
4640 2518 9181 ldd r25,Z+1
4641 251a 855B subi r24,lo8(-75)
4642 251c 9F4F sbci r25,hi8(-75)
4643 251e 04F0 brlt .L414
4644 .L416:
4645 2520 8091 0000 lds r24,EE_Parameter+100
4646 2524 8823 tst r24
4647 2526 01F0 breq .L414
4648 .L415:
4649 2528 8091 0000 lds r24,EE_Parameter+111
4650 252c 83FF sbrs r24,3
4651 252e 00C0 rjmp .L413
4652 2530 8091 0000 lds r24,EE_Parameter+100
4653 2534 E82F mov r30,r24
4654 2536 FF27 clr r31
4655 2538 EE0F add r30,r30
4656 253a FF1F adc r31,r31
4657 253c E050 subi r30,lo8(-(PPM_in))
4658 253e F040 sbci r31,hi8(-(PPM_in))
4659 2540 8081 ld r24,Z
4660 2542 9181 ldd r25,Z+1
4661 2544 875F subi r24,lo8(-9)
4662 2546 9F4F sbci r25,hi8(-9)
4663 2548 04F4 brge .+2
4664 254a 00C0 rjmp .L413
4665 254c 8091 0000 lds r24,move_safety_switch.9
4666 2550 8436 cpi r24,lo8(100)
4667 2552 01F0 breq .+2
4668 2554 00C0 rjmp .L413
4669 .L414:
4670 2556 2091 0000 lds r18,CalibrationDone
4671 255a 2223 tst r18
4672 255c 01F0 breq .L417
4673 255e 8091 0000 lds r24,FC_StatusFlags
4674 2562 8860 ori r24,lo8(8)
4675 2564 8093 0000 sts FC_StatusFlags,r24
4676 .L417:
4677 2568 8091 0000 lds r24,delay_einschalten.7
4678 256c 8F5F subi r24,lo8(-(1))
4679 256e 8093 0000 sts delay_einschalten.7,r24
4680 2572 8E3F cpi r24,lo8(-2)
4681 2574 00F4 brsh .+2
4682 2576 00C0 rjmp .L423
4683 2578 1092 0000 sts delay_einschalten.7,__zero_reg__
4684 257c 8091 0000 lds r24,VersionInfo+5
4685 2580 8823 tst r24
4686 2582 01F0 breq .+2
4687 2584 00C0 rjmp .L419
4688 2586 2223 tst r18
4689 2588 01F4 brne .+2
4690 258a 00C0 rjmp .L419
4691 258c 8091 0000 lds r24,NC_ErrorCode
4692 2590 8823 tst r24
4693 2592 01F0 breq .+2
4694 2594 00C0 rjmp .L419
4695 2596 81E0 ldi r24,lo8(1)
4696 2598 90E0 ldi r25,hi8(1)
4697 259a 9093 0000 sts (modell_fliegt)+1,r25
4698 259e 8093 0000 sts modell_fliegt,r24
4699 25a2 81E0 ldi r24,lo8(1)
4700 25a4 8093 0000 sts MotorenEin,r24
4701 25a8 1092 0000 sts sollGier.0,__zero_reg__
4702 25ac 1092 0000 sts (sollGier.0)+1,__zero_reg__
4703 25b0 1092 0000 sts (sollGier.0)+2,__zero_reg__
4704 25b4 1092 0000 sts (sollGier.0)+3,__zero_reg__
4705 25b8 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4706 25bc 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4707 25c0 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4708 25c4 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4709 25c8 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
4710 25cc 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
4711 25d0 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
4712 25d4 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
4713 25d8 8091 0000 lds r24,EE_Parameter+28
4714 25dc E82E mov r14,r24
4715 25de FF24 clr r15
4716 25e0 0027 clr r16
4717 25e2 1127 clr r17
4718 25e4 8091 0000 lds r24,Mittelwert_AccNick
4719 25e8 9091 0000 lds r25,(Mittelwert_AccNick)+1
4720 25ec 9C01 movw r18,r24
4721 25ee 4427 clr r20
4722 25f0 37FD sbrc r19,7
4723 25f2 4095 com r20
4724 25f4 542F mov r21,r20
4725 25f6 C801 movw r24,r16
4726 25f8 B701 movw r22,r14
4727 25fa 0E94 0000 call __mulsi3
4728 25fe DC01 movw r26,r24
4729 2600 CB01 movw r24,r22
4730 2602 8093 0000 sts Mess_IntegralNick,r24
4731 2606 9093 0000 sts (Mess_IntegralNick)+1,r25
4732 260a A093 0000 sts (Mess_IntegralNick)+2,r26
4733 260e B093 0000 sts (Mess_IntegralNick)+3,r27
4734 2612 8091 0000 lds r24,Mittelwert_AccRoll
4735 2616 9091 0000 lds r25,(Mittelwert_AccRoll)+1
4736 261a 9C01 movw r18,r24
4737 261c 4427 clr r20
4738 261e 37FD sbrc r19,7
4739 2620 4095 com r20
4740 2622 542F mov r21,r20
4741 2624 C801 movw r24,r16
4742 2626 B701 movw r22,r14
4743 2628 0E94 0000 call __mulsi3
4744 262c DC01 movw r26,r24
4745 262e CB01 movw r24,r22
4746 2630 8093 0000 sts Mess_IntegralRoll,r24
4747 2634 9093 0000 sts (Mess_IntegralRoll)+1,r25
4748 2638 A093 0000 sts (Mess_IntegralRoll)+2,r26
4749 263c B093 0000 sts (Mess_IntegralRoll)+3,r27
4750 2640 8091 0000 lds r24,IntegralNick
4751 2644 9091 0000 lds r25,(IntegralNick)+1
4752 2648 A091 0000 lds r26,(IntegralNick)+2
4753 264c B091 0000 lds r27,(IntegralNick)+3
4754 2650 8093 0000 sts Mess_IntegralNick2,r24
4755 2654 9093 0000 sts (Mess_IntegralNick2)+1,r25
4756 2658 A093 0000 sts (Mess_IntegralNick2)+2,r26
4757 265c B093 0000 sts (Mess_IntegralNick2)+3,r27
4758 2660 8091 0000 lds r24,IntegralRoll
4759 2664 9091 0000 lds r25,(IntegralRoll)+1
4760 2668 A091 0000 lds r26,(IntegralRoll)+2
4761 266c B091 0000 lds r27,(IntegralRoll)+3
4762 2670 8093 0000 sts Mess_IntegralRoll2,r24
4763 2674 9093 0000 sts (Mess_IntegralRoll2)+1,r25
4764 2678 A093 0000 sts (Mess_IntegralRoll2)+2,r26
4765 267c B093 0000 sts (Mess_IntegralRoll2)+3,r27
4766 2680 1092 0000 sts SummeNick,__zero_reg__
4767 2684 1092 0000 sts (SummeNick)+1,__zero_reg__
4768 2688 1092 0000 sts (SummeNick)+2,__zero_reg__
4769 268c 1092 0000 sts (SummeNick)+3,__zero_reg__
4770 2690 1092 0000 sts SummeRoll,__zero_reg__
4771 2694 1092 0000 sts (SummeRoll)+1,__zero_reg__
4772 2698 1092 0000 sts (SummeRoll)+2,__zero_reg__
4773 269c 1092 0000 sts (SummeRoll)+3,__zero_reg__
4774 26a0 84E6 ldi r24,lo8(100)
4775 26a2 8093 0000 sts NeueKompassRichtungMerken,r24
4776 26a6 84E3 ldi r24,lo8(52)
4777 26a8 00C0 rjmp .L890
4778 .L419:
4779 26aa 8CED ldi r24,lo8(1500)
4780 26ac 95E0 ldi r25,hi8(1500)
4781 26ae 9093 0000 sts (beeptime)+1,r25
4782 26b2 8093 0000 sts beeptime,r24
4783 26b6 2223 tst r18
4784 26b8 01F0 breq .+2
4785 26ba 00C0 rjmp .L423
4786 26bc 81E0 ldi r24,lo8(1)
4787 26be 00C0 rjmp .L890
4788 .L413:
4789 26c0 1092 0000 sts delay_einschalten.7,__zero_reg__
4790 26c4 00C0 rjmp .L423
4791 .L412:
4792 26c6 FF27 clr r31
4793 26c8 EE0F add r30,r30
4794 26ca FF1F adc r31,r31
4795 26cc E050 subi r30,lo8(-(PPM_in))
4796 26ce F040 sbci r31,hi8(-(PPM_in))
4797 26d0 8081 ld r24,Z
4798 26d2 9181 ldd r25,Z+1
4799 26d4 8C34 cpi r24,76
4800 26d6 9105 cpc r25,__zero_reg__
4801 26d8 04F0 brlt .L426
4802 26da 8091 0000 lds r24,EE_Parameter+111
4803 26de 83FD sbrc r24,3
4804 26e0 00C0 rjmp .L427
4805 26e2 E22F mov r30,r18
4806 26e4 FF27 clr r31
4807 26e6 EE0F add r30,r30
4808 26e8 FF1F adc r31,r31
4809 26ea E050 subi r30,lo8(-(PPM_in))
4810 26ec F040 sbci r31,hi8(-(PPM_in))
4811 26ee 8081 ld r24,Z
4812 26f0 9181 ldd r25,Z+1
4813 26f2 855B subi r24,lo8(-75)
4814 26f4 9F4F sbci r25,hi8(-75)
4815 26f6 04F0 brlt .L425
4816 .L427:
4817 26f8 8091 0000 lds r24,EE_Parameter+100
4818 26fc 8823 tst r24
4819 26fe 01F0 breq .L425
4820 .L426:
4821 2700 8091 0000 lds r24,EE_Parameter+111
4822 2704 83FF sbrs r24,3
4823 2706 00C0 rjmp .L424
4824 2708 8091 0000 lds r24,EE_Parameter+100
4825 270c E82F mov r30,r24
4826 270e FF27 clr r31
4827 2710 EE0F add r30,r30
4828 2712 FF1F adc r31,r31
4829 2714 E050 subi r30,lo8(-(PPM_in))
4830 2716 F040 sbci r31,hi8(-(PPM_in))
4831 2718 8081 ld r24,Z
4832 271a 9181 ldd r25,Z+1
4833 271c 8E5C subi r24,lo8(-50)
4834 271e 9F4F sbci r25,hi8(-50)
4835 2720 04F4 brge .L424
4836 2722 8091 0000 lds r24,move_safety_switch.9
4837 2726 8C39 cpi r24,lo8(-100)
4838 2728 01F4 brne .L424
4839 .L425:
4840 272a 8091 0000 lds r24,delay_ausschalten.8
4841 272e 8F5F subi r24,lo8(-(1))
4842 2730 8093 0000 sts delay_ausschalten.8,r24
4843 2734 8B3F cpi r24,lo8(-5)
4844 2736 00F0 brlo .L423
4845 2738 1092 0000 sts MotorenEin,__zero_reg__
4846 273c 1092 0000 sts delay_ausschalten.8,__zero_reg__
4847 2740 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4848 2744 1092 0000 sts modell_fliegt,__zero_reg__
4849 2748 86E2 ldi r24,lo8(38)
4850 .L890:
4851 274a 8093 0000 sts SpeakHoTT,r24
4852 274e 00C0 rjmp .L423
4853 .L424:
4854 2750 1092 0000 sts delay_ausschalten.8,__zero_reg__
4855 .L423:
4856 2754 8091 0000 lds r24,GasIsZeroCnt
4857 2758 9091 0000 lds r25,(GasIsZeroCnt)+1
4858 275c 13E0 ldi r17,hi8(1000)
4859 275e 883E cpi r24,lo8(1000)
4860 2760 9107 cpc r25,r17
4861 2762 00F4 brsh .L381
4862 2764 0196 adiw r24,1
4863 2766 9093 0000 sts (GasIsZeroCnt)+1,r25
4864 276a 8093 0000 sts GasIsZeroCnt,r24
4865 276e 00C0 rjmp .L381
4866 .L408:
4867 2770 1092 0000 sts move_safety_switch.9,__zero_reg__
4868 2774 1092 0000 sts (GasIsZeroCnt)+1,__zero_reg__
4869 2778 1092 0000 sts GasIsZeroCnt,__zero_reg__
4870 277c 00C0 rjmp .L381
4871 .L382:
4872 277e 2E5E subi r18,lo8(750)
4873 2780 3240 sbci r19,hi8(750)
4874 2782 00F0 brlo .L381
4875 2784 8091 0000 lds r24,GPSInfo+4
4876 2788 9091 0000 lds r25,(GPSInfo+4)+1
4877 278c 8059 subi r24,lo8(400)
4878 278e 9140 sbci r25,hi8(400)
4879 2790 00F4 brsh .L381
4880 2792 8091 0000 lds r24,HoehenWert
4881 2796 9091 0000 lds r25,(HoehenWert)+1
4882 279a A091 0000 lds r26,(HoehenWert)+2
4883 279e B091 0000 lds r27,(HoehenWert)+3
4884 27a2 8C5D subi r24,lo8(1500)
4885 27a4 9540 sbci r25,hi8(1500)
4886 27a6 A040 sbci r26,hlo8(1500)
4887 27a8 B040 sbci r27,hhi8(1500)
4888 27aa 04F4 brge .L381
4889 27ac 80E3 ldi r24,lo8(30000)
4890 27ae 95E7 ldi r25,hi8(30000)
4891 27b0 9093 0000 sts (GasIsZeroCnt)+1,r25
4892 27b4 8093 0000 sts GasIsZeroCnt,r24
4893 27b8 8091 0000 lds r24,modell_fliegt
4894 27bc 9091 0000 lds r25,(modell_fliegt)+1
4895 27c0 8A5E subi r24,lo8(1002)
4896 27c2 9340 sbci r25,hi8(1002)
4897 27c4 00F0 brlo .L381
4898 27c6 89EE ldi r24,lo8(1001)
4899 27c8 93E0 ldi r25,hi8(1001)
4900 27ca 9093 0000 sts (modell_fliegt)+1,r25
4901 27ce 8093 0000 sts modell_fliegt,r24
4902 .L381:
4903 27d2 8091 0000 lds r24,NewPpmData
4904 27d6 8150 subi r24,lo8(-(-1))
4905 27d8 8093 0000 sts NewPpmData,r24
4906 27dc 8091 0000 lds r24,NewPpmData
4907 27e0 8F3F cpi r24,lo8(-1)
4908 27e2 01F0 breq .L437
4909 27e4 8091 0000 lds r24,FC_StatusFlags
4910 27e8 84FF sbrs r24,4
4911 27ea 00C0 rjmp .L436
4912 .L437:
4913 27ec 0E94 0000 call ParameterZuordnung
4914 27f0 B090 0000 lds r11,EE_Parameter+23
4915 27f4 8091 0000 lds r24,stick_nick.12
4916 27f8 9091 0000 lds r25,(stick_nick.12)+1
4917 27fc 9C01 movw r18,r24
4918 27fe 220F lsl r18
4919 2800 331F rol r19
4920 2802 280F add r18,r24
4921 2804 391F adc r19,r25
4922 2806 C090 0000 lds r12,EE_Parameter+1
4923 280a AC2D mov r26,r12
4924 280c BB27 clr r27
4925 280e AA0F add r26,r26
4926 2810 BB1F adc r27,r27
4927 2812 FD01 movw r30,r26
4928 2814 E050 subi r30,lo8(-(PPM_in))
4929 2816 F040 sbci r31,hi8(-(PPM_in))
4930 2818 4B2D mov r20,r11
4931 281a 5527 clr r21
4932 281c 8081 ld r24,Z
4933 281e 9181 ldd r25,Z+1
4934 2820 849F mul r24,r20
4935 2822 F001 movw r30,r0
4936 2824 859F mul r24,r21
4937 2826 F00D add r31,r0
4938 2828 949F mul r25,r20
4939 282a F00D add r31,r0
4940 282c 1124 clr r1
4941 282e 2E0F add r18,r30
4942 2830 3F1F adc r19,r31
4943 2832 37FF sbrs r19,7
4944 2834 00C0 rjmp .L438
4945 2836 2D5F subi r18,lo8(-(3))
4946 2838 3F4F sbci r19,hi8(-(3))
4947 .L438:
4948 283a B901 movw r22,r18
4949 283c 7595 asr r23
4950 283e 6795 ror r22
4951 2840 7595 asr r23
4952 2842 6795 ror r22
4953 2844 A050 subi r26,lo8(-(PPM_diff))
4954 2846 B040 sbci r27,hi8(-(PPM_diff))
4955 2848 8091 0000 lds r24,EE_Parameter+24
4956 284c 082F mov r16,r24
4957 284e 1127 clr r17
4958 2850 8D91 ld r24,X+
4959 2852 9C91 ld r25,X
4960 2854 809F mul r24,r16
4961 2856 7001 movw r14,r0
4962 2858 819F mul r24,r17
4963 285a F00C add r15,r0
4964 285c 909F mul r25,r16
4965 285e F00C add r15,r0
4966 2860 1124 clr r1
4967 2862 6E0D add r22,r14
4968 2864 7F1D adc r23,r15
4969 2866 7093 0000 sts (stick_nick.12)+1,r23
4970 286a 6093 0000 sts stick_nick.12,r22
4971 286e 8091 0000 lds r24,stick_roll.13
4972 2872 9091 0000 lds r25,(stick_roll.13)+1
4973 2876 9C01 movw r18,r24
4974 2878 220F lsl r18
4975 287a 331F rol r19
4976 287c 280F add r18,r24
4977 287e 391F adc r19,r25
4978 2880 D090 0000 lds r13,EE_Parameter+2
4979 2884 AD2D mov r26,r13
4980 2886 BB27 clr r27
4981 2888 AA0F add r26,r26
4982 288a BB1F adc r27,r27
4983 288c FD01 movw r30,r26
4984 288e E050 subi r30,lo8(-(PPM_in))
4985 2890 F040 sbci r31,hi8(-(PPM_in))
4986 2892 8081 ld r24,Z
4987 2894 9181 ldd r25,Z+1
4988 2896 849F mul r24,r20
4989 2898 F001 movw r30,r0
4990 289a 859F mul r24,r21
4991 289c F00D add r31,r0
4992 289e 949F mul r25,r20
4993 28a0 F00D add r31,r0
4994 28a2 1124 clr r1
4995 28a4 2E0F add r18,r30
4996 28a6 3F1F adc r19,r31
4997 28a8 37FF sbrs r19,7
4998 28aa 00C0 rjmp .L439
4999 28ac 2D5F subi r18,lo8(-(3))
5000 28ae 3F4F sbci r19,hi8(-(3))
5001 .L439:
5002 28b0 A901 movw r20,r18
5003 28b2 5595 asr r21
5004 28b4 4795 ror r20
5005 28b6 5595 asr r21
5006 28b8 4795 ror r20
5007 28ba A050 subi r26,lo8(-(PPM_diff))
5008 28bc B040 sbci r27,hi8(-(PPM_diff))
5009 28be 8D91 ld r24,X+
5010 28c0 9C91 ld r25,X
5011 28c2 809F mul r24,r16
5012 28c4 7001 movw r14,r0
5013 28c6 819F mul r24,r17
5014 28c8 F00C add r15,r0
5015 28ca 909F mul r25,r16
5016 28cc F00C add r15,r0
5017 28ce 1124 clr r1
5018 28d0 4E0D add r20,r14
5019 28d2 5F1D adc r21,r15
5020 28d4 5093 0000 sts (stick_roll.13)+1,r21
5021 28d8 4093 0000 sts stick_roll.13,r20
5022 28dc 8091 0000 lds r24,CareFree
5023 28e0 8823 tst r24
5024 28e2 01F4 brne .+2
5025 28e4 00C0 rjmp .L440
5026 28e6 CB01 movw r24,r22
5027 28e8 77FD sbrc r23,7
5028 28ea 0396 adiw r24,3
5029 .L441:
5030 28ec DC01 movw r26,r24
5031 28ee B595 asr r27
5032 28f0 A795 ror r26
5033 28f2 B595 asr r27
5034 28f4 A795 ror r26
5035 28f6 CA01 movw r24,r20
5036 28f8 57FD sbrc r21,7
5037 28fa 0396 adiw r24,3
5038 .L442:
5039 28fc FC01 movw r30,r24
5040 28fe F595 asr r31
5041 2900 E795 ror r30
5042 2902 F595 asr r31
5043 2904 E795 ror r30
5044 2906 8091 0000 lds r24,FromNC_Rotate_C
5045 290a 682F mov r22,r24
5046 290c 7727 clr r23
5047 290e 67FD sbrc r22,7
5048 2910 7095 com r23
5049 2912 6A9F mul r22,r26
5050 2914 9001 movw r18,r0
5051 2916 6B9F mul r22,r27
5052 2918 300D add r19,r0
5053 291a 7A9F mul r23,r26
5054 291c 300D add r19,r0
5055 291e 1124 clr r1
5056 2920 8091 0000 lds r24,FromNC_Rotate_S
5057 2924 482F mov r20,r24
5058 2926 5527 clr r21
5059 2928 47FD sbrc r20,7
5060 292a 5095 com r21
5061 292c 4E9F mul r20,r30
5062 292e C001 movw r24,r0
5063 2930 4F9F mul r20,r31
5064 2932 900D add r25,r0
5065 2934 5E9F mul r21,r30
5066 2936 900D add r25,r0
5067 2938 1124 clr r1
5068 293a 280F add r18,r24
5069 293c 391F adc r19,r25
5070 293e 37FF sbrs r19,7
5071 2940 00C0 rjmp .L443
5072 2942 295F subi r18,lo8(-(7))
5073 2944 3F4F sbci r19,hi8(-(7))
5074 .L443:
5075 2946 93E0 ldi r25,3
5076 2948 3595 1: asr r19
5077 294a 2795 ror r18
5078 294c 9A95 dec r25
5079 294e 01F4 brne 1b
5080 2950 3093 0000 sts (StickNick)+1,r19
5081 2954 2093 0000 sts StickNick,r18
5082 2958 6E9F mul r22,r30
5083 295a 9001 movw r18,r0
5084 295c 6F9F mul r22,r31
5085 295e 300D add r19,r0
5086 2960 7E9F mul r23,r30
5087 2962 300D add r19,r0
5088 2964 1124 clr r1
5089 2966 4A9F mul r20,r26
5090 2968 C001 movw r24,r0
5091 296a 4B9F mul r20,r27
5092 296c 900D add r25,r0
5093 296e 5A9F mul r21,r26
5094 2970 900D add r25,r0
5095 2972 1124 clr r1
5096 2974 00C0 rjmp .L919
5097 .L440:
5098 2976 8091 0000 lds r24,EE_Parameter+98
5099 297a E82F mov r30,r24
5100 297c FF27 clr r31
5101 297e E050 subi r30,lo8(-(sintab))
5102 2980 F040 sbci r31,hi8(-(sintab))
5103 2982 8681 ldd r24,Z+6
5104 2984 8093 0000 sts FromNC_Rotate_C,r24
5105 2988 9081 ld r25,Z
5106 298a 9093 0000 sts FromNC_Rotate_S,r25
5107 298e A82F mov r26,r24
5108 2990 BB27 clr r27
5109 2992 A7FD sbrc r26,7
5110 2994 B095 com r27
5111 2996 A69F mul r26,r22
5112 2998 9001 movw r18,r0
5113 299a A79F mul r26,r23
5114 299c 300D add r19,r0
5115 299e B69F mul r27,r22
5116 29a0 300D add r19,r0
5117 29a2 1124 clr r1
5118 29a4 E92F mov r30,r25
5119 29a6 FF27 clr r31
5120 29a8 E7FD sbrc r30,7
5121 29aa F095 com r31
5122 29ac E49F mul r30,r20
5123 29ae C001 movw r24,r0
5124 29b0 E59F mul r30,r21
5125 29b2 900D add r25,r0
5126 29b4 F49F mul r31,r20
5127 29b6 900D add r25,r0
5128 29b8 1124 clr r1
5129 29ba 280F add r18,r24
5130 29bc 391F adc r19,r25
5131 29be 37FF sbrs r19,7
5132 29c0 00C0 rjmp .L446
5133 29c2 295F subi r18,lo8(-(7))
5134 29c4 3F4F sbci r19,hi8(-(7))
5135 .L446:
5136 29c6 83E0 ldi r24,3
5137 29c8 3595 1: asr r19
5138 29ca 2795 ror r18
5139 29cc 8A95 dec r24
5140 29ce 01F4 brne 1b
5141 29d0 3093 0000 sts (StickNick)+1,r19
5142 29d4 2093 0000 sts StickNick,r18
5143 29d8 A49F mul r26,r20
5144 29da 9001 movw r18,r0
5145 29dc A59F mul r26,r21
5146 29de 300D add r19,r0
5147 29e0 B49F mul r27,r20
5148 29e2 300D add r19,r0
5149 29e4 1124 clr r1
5150 29e6 E69F mul r30,r22
5151 29e8 C001 movw r24,r0
5152 29ea E79F mul r30,r23
5153 29ec 900D add r25,r0
5154 29ee F69F mul r31,r22
5155 29f0 900D add r25,r0
5156 29f2 1124 clr r1
5157 .L919:
5158 29f4 281B sub r18,r24
5159 29f6 390B sbc r19,r25
5160 29f8 37FF sbrs r19,7
5161 29fa 00C0 rjmp .L447
5162 29fc 295F subi r18,lo8(-(7))
5163 29fe 3F4F sbci r19,hi8(-(7))
5164 .L447:
5165 2a00 03E0 ldi r16,3
5166 2a02 3595 1: asr r19
5167 2a04 2795 ror r18
5168 2a06 0A95 dec r16
5169 2a08 01F4 brne 1b
5170 2a0a 3093 0000 sts (StickRoll)+1,r19
5171 2a0e 2093 0000 sts StickRoll,r18
5172 2a12 8091 0000 lds r24,EE_Parameter+4
5173 2a16 E82F mov r30,r24
5174 2a18 FF27 clr r31
5175 2a1a EE0F add r30,r30
5176 2a1c FF1F adc r31,r31
5177 2a1e E050 subi r30,lo8(-(PPM_in))
5178 2a20 F040 sbci r31,hi8(-(PPM_in))
5179 2a22 8081 ld r24,Z
5180 2a24 9181 ldd r25,Z+1
5181 2a26 9095 com r25
5182 2a28 8195 neg r24
5183 2a2a 9F4F sbci r25,lo8(-1)
5184 2a2c 9093 0000 sts (StickGier)+1,r25
5185 2a30 8093 0000 sts StickGier,r24
5186 2a34 8530 cpi r24,5
5187 2a36 9105 cpc r25,__zero_reg__
5188 2a38 04F0 brlt .L448
5189 2a3a 0497 sbiw r24,4
5190 2a3c 00C0 rjmp .L891
5191 .L448:
5192 2a3e 0FEF ldi r16,hi8(-4)
5193 2a40 8C3F cpi r24,lo8(-4)
5194 2a42 9007 cpc r25,r16
5195 2a44 04F4 brge .L450
5196 2a46 0496 adiw r24,4
5197 .L891:
5198 2a48 9093 0000 sts (StickGier)+1,r25
5199 2a4c 8093 0000 sts StickGier,r24
5200 2a50 00C0 rjmp .L449
5201 .L450:
5202 2a52 1092 0000 sts (StickGier)+1,__zero_reg__
5203 2a56 1092 0000 sts StickGier,__zero_reg__
5204 .L449:
5205 2a5a 8091 0000 lds r24,GPS_Aid_StickMultiplikator
5206 2a5e 8823 tst r24
5207 2a60 01F4 brne .+2
5208 2a62 00C0 rjmp .L452
5209 2a64 282F mov r18,r24
5210 2a66 3327 clr r19
5211 2a68 8091 0000 lds r24,StickNick
5212 2a6c 9091 0000 lds r25,(StickNick)+1
5213 2a70 97FD sbrc r25,7
5214 2a72 0796 adiw r24,7
5215 .L453:
5216 2a74 13E0 ldi r17,3
5217 2a76 9595 1: asr r25
5218 2a78 8795 ror r24
5219 2a7a 1A95 dec r17
5220 2a7c 01F4 brne 1b
5221 2a7e 289F mul r18,r24
5222 2a80 A001 movw r20,r0
5223 2a82 299F mul r18,r25
5224 2a84 500D add r21,r0
5225 2a86 389F mul r19,r24
5226 2a88 500D add r21,r0
5227 2a8a 1124 clr r1
5228 2a8c CA01 movw r24,r20
5229 2a8e 57FD sbrc r21,7
5230 2a90 0F96 adiw r24,15
5231 .L454:
5232 2a92 B4E0 ldi r27,4
5233 2a94 9595 1: asr r25
5234 2a96 8795 ror r24
5235 2a98 BA95 dec r27
5236 2a9a 01F4 brne 1b
5237 2a9c 9093 0000 sts (StickNick)+1,r25
5238 2aa0 8093 0000 sts StickNick,r24
5239 2aa4 8091 0000 lds r24,StickRoll
5240 2aa8 9091 0000 lds r25,(StickRoll)+1
5241 2aac 97FD sbrc r25,7
5242 2aae 0796 adiw r24,7
5243 .L455:
5244 2ab0 A3E0 ldi r26,3
5245 2ab2 9595 1: asr r25
5246 2ab4 8795 ror r24
5247 2ab6 AA95 dec r26
5248 2ab8 01F4 brne 1b
5249 2aba 289F mul r18,r24
5250 2abc B001 movw r22,r0
5251 2abe 299F mul r18,r25
5252 2ac0 700D add r23,r0
5253 2ac2 389F mul r19,r24
5254 2ac4 700D add r23,r0
5255 2ac6 1124 clr r1
5256 2ac8 CB01 movw r24,r22
5257 2aca 77FD sbrc r23,7
5258 2acc 0F96 adiw r24,15
5259 .L456:
5260 2ace F4E0 ldi r31,4
5261 2ad0 9595 1: asr r25
5262 2ad2 8795 ror r24
5263 2ad4 FA95 dec r31
5264 2ad6 01F4 brne 1b
5265 2ad8 9093 0000 sts (StickRoll)+1,r25
5266 2adc 8093 0000 sts StickRoll,r24
5267 .L452:
5268 2ae0 8090 0000 lds r8,StickNick
5269 2ae4 9090 0000 lds r9,(StickNick)+1
5270 2ae8 8091 0000 lds r24,GPS_Nick
5271 2aec 9091 0000 lds r25,(GPS_Nick)+1
5272 2af0 881A sub r8,r24
5273 2af2 990A sbc r9,r25
5274 2af4 9092 0000 sts (StickNick)+1,r9
5275 2af8 8092 0000 sts StickNick,r8
5276 2afc 0091 0000 lds r16,StickRoll
5277 2b00 1091 0000 lds r17,(StickRoll)+1
5278 2b04 8091 0000 lds r24,GPS_Roll
5279 2b08 9091 0000 lds r25,(GPS_Roll)+1
5280 2b0c 081B sub r16,r24
5281 2b0e 190B sbc r17,r25
5282 2b10 1093 0000 sts (StickRoll)+1,r17
5283 2b14 0093 0000 sts StickRoll,r16
5284 2b18 8091 0000 lds r24,EE_Parameter+3
5285 2b1c E82F mov r30,r24
5286 2b1e FF27 clr r31
5287 2b20 EE0F add r30,r30
5288 2b22 FF1F adc r31,r31
5289 2b24 E050 subi r30,lo8(-(PPM_in))
5290 2b26 F040 sbci r31,hi8(-(PPM_in))
5291 2b28 E080 ld r14,Z
5292 2b2a F180 ldd r15,Z+1
5293 2b2c 8FE7 ldi r24,lo8(127)
5294 2b2e 90E0 ldi r25,hi8(127)
5295 2b30 E80E add r14,r24
5296 2b32 F91E adc r15,r25
5297 2b34 F092 0000 sts (StickGas)+1,r15
5298 2b38 E092 0000 sts StickGas,r14
5299 2b3c 8091 0000 lds r24,Parameter_Gyro_P
5300 2b40 9927 clr r25
5301 2b42 AA27 clr r26
5302 2b44 97FD sbrc r25,7
5303 2b46 A095 com r26
5304 2b48 BA2F mov r27,r26
5305 2b4a BC01 movw r22,r24
5306 2b4c CD01 movw r24,r26
5307 2b4e 0E94 0000 call __floatsisf
5308 2b52 DC01 movw r26,r24
5309 2b54 CB01 movw r24,r22
5310 2b56 20E0 ldi r18,lo8(0x41200000)
5311 2b58 30E0 ldi r19,hi8(0x41200000)
5312 2b5a 40E2 ldi r20,hlo8(0x41200000)
5313 2b5c 51E4 ldi r21,hhi8(0x41200000)
5314 2b5e BC01 movw r22,r24
5315 2b60 CD01 movw r24,r26
5316 2b62 0E94 0000 call __addsf3
5317 2b66 DC01 movw r26,r24
5318 2b68 CB01 movw r24,r22
5319 2b6a BC01 movw r22,r24
5320 2b6c CD01 movw r24,r26
5321 2b6e 0E94 0000 call __fixunssfsi
5322 2b72 DC01 movw r26,r24
5323 2b74 CB01 movw r24,r22
5324 2b76 8093 0000 sts GyroFaktor,r24
5325 2b7a 8091 0000 lds r24,Parameter_Gyro_I
5326 2b7e 8093 0000 sts IntegralFaktor,r24
5327 2b82 8091 0000 lds r24,Parameter_Gyro_Gier_P
5328 2b86 9927 clr r25
5329 2b88 AA27 clr r26
5330 2b8a 97FD sbrc r25,7
5331 2b8c A095 com r26
5332 2b8e BA2F mov r27,r26
5333 2b90 BC01 movw r22,r24
5334 2b92 CD01 movw r24,r26
5335 2b94 0E94 0000 call __floatsisf
5336 2b98 DC01 movw r26,r24
5337 2b9a CB01 movw r24,r22
5338 2b9c 20E0 ldi r18,lo8(0x41200000)
5339 2b9e 30E0 ldi r19,hi8(0x41200000)
5340 2ba0 40E2 ldi r20,hlo8(0x41200000)
5341 2ba2 51E4 ldi r21,hhi8(0x41200000)
5342 2ba4 BC01 movw r22,r24
5343 2ba6 CD01 movw r24,r26
5344 2ba8 0E94 0000 call __addsf3
5345 2bac DC01 movw r26,r24
5346 2bae CB01 movw r24,r22
5347 2bb0 BC01 movw r22,r24
5348 2bb2 CD01 movw r24,r26
5349 2bb4 0E94 0000 call __fixunssfsi
5350 2bb8 DC01 movw r26,r24
5351 2bba CB01 movw r24,r22
5352 2bbc 8093 0000 sts GyroFaktorGier,r24
5353 2bc0 8091 0000 lds r24,Parameter_Gyro_Gier_I
5354 2bc4 8093 0000 sts IntegralFaktorGier,r24
5355 2bc8 8091 0000 lds r24,ExternControl+10
5356 2bcc 80FF sbrs r24,0
5357 2bce 00C0 rjmp .L457
5358 2bd0 8091 0000 lds r24,Parameter_ExternalControl
5359 2bd4 8138 cpi r24,lo8(-127)
5360 2bd6 00F4 brsh .+2
5361 2bd8 00C0 rjmp .L457
5362 2bda 8091 0000 lds r24,ExternControl+3
5363 2bde 9927 clr r25
5364 2be0 87FD sbrc r24,7
5365 2be2 9095 com r25
5366 2be4 2B2D mov r18,r11
5367 2be6 3327 clr r19
5368 2be8 829F mul r24,r18
5369 2bea D001 movw r26,r0
5370 2bec 839F mul r24,r19
5371 2bee B00D add r27,r0
5372 2bf0 929F mul r25,r18
5373 2bf2 B00D add r27,r0
5374 2bf4 1124 clr r1
5375 2bf6 8A0E add r8,r26
5376 2bf8 9B1E adc r9,r27
5377 2bfa 9092 0000 sts (StickNick)+1,r9
5378 2bfe 8092 0000 sts StickNick,r8
5379 2c02 8091 0000 lds r24,ExternControl+4
5380 2c06 9927 clr r25
5381 2c08 87FD sbrc r24,7
5382 2c0a 9095 com r25
5383 2c0c 829F mul r24,r18
5384 2c0e F001 movw r30,r0
5385 2c10 839F mul r24,r19
5386 2c12 F00D add r31,r0
5387 2c14 929F mul r25,r18
5388 2c16 F00D add r31,r0
5389 2c18 1124 clr r1
5390 2c1a 0E0F add r16,r30
5391 2c1c 1F1F adc r17,r31
5392 2c1e 1093 0000 sts (StickRoll)+1,r17
5393 2c22 0093 0000 sts StickRoll,r16
5394 2c26 8091 0000 lds r24,ExternControl+5
5395 2c2a 282F mov r18,r24
5396 2c2c 3327 clr r19
5397 2c2e 27FD sbrc r18,7
5398 2c30 3095 com r19
5399 2c32 8091 0000 lds r24,StickGier
5400 2c36 9091 0000 lds r25,(StickGier)+1
5401 2c3a 820F add r24,r18
5402 2c3c 931F adc r25,r19
5403 2c3e 9093 0000 sts (StickGier)+1,r25
5404 2c42 8093 0000 sts StickGier,r24
5405 2c46 8091 0000 lds r24,ExternControl+7
5406 2c4a 282F mov r18,r24
5407 2c4c 3327 clr r19
5408 2c4e 27FD sbrc r18,7
5409 2c50 3095 com r19
5410 2c52 8091 0000 lds r24,EE_Parameter+18
5411 2c56 9927 clr r25
5412 2c58 289F mul r18,r24
5413 2c5a 8001 movw r16,r0
5414 2c5c 299F mul r18,r25
5415 2c5e 100D add r17,r0
5416 2c60 389F mul r19,r24
5417 2c62 100D add r17,r0
5418 2c64 1124 clr r1
5419 2c66 1093 0000 sts (ExternHoehenValue)+1,r17
5420 2c6a 0093 0000 sts ExternHoehenValue,r16
5421 2c6e 8091 0000 lds r24,ExternControl+6
5422 2c72 9927 clr r25
5423 2c74 8E15 cp r24,r14
5424 2c76 9F05 cpc r25,r15
5425 2c78 04F4 brge .L457
5426 2c7a 9093 0000 sts (StickGas)+1,r25
5427 2c7e 8093 0000 sts StickGas,r24
5428 .L457:
5429 2c82 8091 0000 lds r24,StickGas
5430 2c86 9091 0000 lds r25,(StickGas)+1
5431 2c8a 97FF sbrs r25,7
5432 2c8c 00C0 rjmp .L459
5433 2c8e 1092 0000 sts (StickGas)+1,__zero_reg__
5434 2c92 1092 0000 sts StickGas,__zero_reg__
5435 .L459:
5436 2c96 8091 0000 lds r24,Parameter_GlobalConfig
5437 2c9a 82FF sbrs r24,2
5438 2c9c 00C0 rjmp .L460
5439 2c9e 1092 0000 sts IntegralFaktor,__zero_reg__
5440 .L460:
5441 2ca2 4091 0000 lds r20,StickNick
5442 2ca6 5091 0000 lds r21,(StickNick)+1
5443 2caa CA01 movw r24,r20
5444 2cac 57FD sbrc r21,7
5445 2cae 0396 adiw r24,3
5446 .L462:
5447 2cb0 9C01 movw r18,r24
5448 2cb2 3595 asr r19
5449 2cb4 2795 ror r18
5450 2cb6 3595 asr r19
5451 2cb8 2795 ror r18
5452 2cba 37FF sbrs r19,7
5453 2cbc 00C0 rjmp .L463
5454 2cbe 3095 com r19
5455 2cc0 2195 neg r18
5456 2cc2 3F4F sbci r19,lo8(-1)
5457 .L463:
5458 2cc4 8091 0000 lds r24,MaxStickNick
5459 2cc8 9091 0000 lds r25,(MaxStickNick)+1
5460 2ccc 8217 cp r24,r18
5461 2cce 9307 cpc r25,r19
5462 2cd0 04F4 brge .L461
5463 2cd2 CA01 movw r24,r20
5464 2cd4 57FF sbrs r21,7
5465 2cd6 00C0 rjmp .L464
5466 2cd8 9095 com r25
5467 2cda 8195 neg r24
5468 2cdc 9F4F sbci r25,lo8(-1)
5469 .L464:
5470 2cde 97FD sbrc r25,7
5471 2ce0 0396 adiw r24,3
5472 .L465:
5473 2ce2 9595 asr r25
5474 2ce4 8795 ror r24
5475 2ce6 9595 asr r25
5476 2ce8 8795 ror r24
5477 2cea 9093 0000 sts (MaxStickNick)+1,r25
5478 2cee 8093 0000 sts MaxStickNick,r24
5479 2cf2 8536 cpi r24,101
5480 2cf4 9105 cpc r25,__zero_reg__
5481 2cf6 04F0 brlt .L467
5482 2cf8 84E6 ldi r24,lo8(100)
5483 2cfa 90E0 ldi r25,hi8(100)
5484 2cfc 00C0 rjmp .L892
5485 .L461:
5486 2cfe 0197 sbiw r24,1
5487 .L892:
5488 2d00 9093 0000 sts (MaxStickNick)+1,r25
5489 2d04 8093 0000 sts MaxStickNick,r24
5490 .L467:
5491 2d08 4091 0000 lds r20,StickRoll
5492 2d0c 5091 0000 lds r21,(StickRoll)+1
5493 2d10 CA01 movw r24,r20
5494 2d12 57FD sbrc r21,7
5495 2d14 0396 adiw r24,3
5496 .L469:
5497 2d16 9C01 movw r18,r24
5498 2d18 3595 asr r19
5499 2d1a 2795 ror r18
5500 2d1c 3595 asr r19
5501 2d1e 2795 ror r18
5502 2d20 37FF sbrs r19,7
5503 2d22 00C0 rjmp .L470
5504 2d24 3095 com r19
5505 2d26 2195 neg r18
5506 2d28 3F4F sbci r19,lo8(-1)
5507 .L470:
5508 2d2a 8091 0000 lds r24,MaxStickRoll
5509 2d2e 9091 0000 lds r25,(MaxStickRoll)+1
5510 2d32 8217 cp r24,r18
5511 2d34 9307 cpc r25,r19
5512 2d36 04F4 brge .L468
5513 2d38 CA01 movw r24,r20
5514 2d3a 57FF sbrs r21,7
5515 2d3c 00C0 rjmp .L471
5516 2d3e 9095 com r25
5517 2d40 8195 neg r24
5518 2d42 9F4F sbci r25,lo8(-1)
5519 .L471:
5520 2d44 97FD sbrc r25,7
5521 2d46 0396 adiw r24,3
5522 .L472:
5523 2d48 9595 asr r25
5524 2d4a 8795 ror r24
5525 2d4c 9595 asr r25
5526 2d4e 8795 ror r24
5527 2d50 9093 0000 sts (MaxStickRoll)+1,r25
5528 2d54 8093 0000 sts MaxStickRoll,r24
5529 2d58 8536 cpi r24,101
5530 2d5a 9105 cpc r25,__zero_reg__
5531 2d5c 04F0 brlt .L474
5532 2d5e 84E6 ldi r24,lo8(100)
5533 2d60 90E0 ldi r25,hi8(100)
5534 2d62 00C0 rjmp .L893
5535 .L468:
5536 2d64 0197 sbiw r24,1
5537 .L893:
5538 2d66 9093 0000 sts (MaxStickRoll)+1,r25
5539 2d6a 8093 0000 sts MaxStickRoll,r24
5540 .L474:
5541 2d6e 8091 0000 lds r24,FC_StatusFlags
5542 2d72 84FF sbrs r24,4
5543 2d74 00C0 rjmp .L475
5544 2d76 1092 0000 sts (MaxStickNick)+1,__zero_reg__
5545 2d7a 1092 0000 sts MaxStickNick,__zero_reg__
5546 2d7e 1092 0000 sts (MaxStickRoll)+1,__zero_reg__
5547 2d82 1092 0000 sts MaxStickRoll,__zero_reg__
5548 .L475:
5549 2d86 ED2D mov r30,r13
5550 2d88 FF27 clr r31
5551 2d8a EE0F add r30,r30
5552 2d8c FF1F adc r31,r31
5553 2d8e E050 subi r30,lo8(-(PPM_in))
5554 2d90 F040 sbci r31,hi8(-(PPM_in))
5555 2d92 4091 0000 lds r20,EE_Parameter+60
5556 2d96 242F mov r18,r20
5557 2d98 3327 clr r19
5558 2d9a 8081 ld r24,Z
5559 2d9c 9181 ldd r25,Z+1
5560 2d9e 2817 cp r18,r24
5561 2da0 3907 cpc r19,r25
5562 2da2 04F4 brge .L476
5563 2da4 8091 0000 lds r24,EE_Parameter+108
5564 2da8 82FF sbrs r24,2
5565 2daa 00C0 rjmp .L476
5566 2dac 81E0 ldi r24,lo8(1)
5567 2dae 8093 0000 sts Looping_Links,r24
5568 2db2 00C0 rjmp .L477
5569 .L476:
5570 2db4 ED2D mov r30,r13
5571 2db6 FF27 clr r31
5572 2db8 EE0F add r30,r30
5573 2dba FF1F adc r31,r31
5574 2dbc E050 subi r30,lo8(-(PPM_in))
5575 2dbe F040 sbci r31,hi8(-(PPM_in))
5576 2dc0 842F mov r24,r20
5577 2dc2 9927 clr r25
5578 2dc4 2091 0000 lds r18,EE_Parameter+61
5579 2dc8 821B sub r24,r18
5580 2dca 9109 sbc r25,__zero_reg__
5581 2dcc 2081 ld r18,Z
5582 2dce 3181 ldd r19,Z+1
5583 2dd0 2817 cp r18,r24
5584 2dd2 3907 cpc r19,r25
5585 2dd4 04F4 brge .L477
5586 2dd6 1092 0000 sts Looping_Links,__zero_reg__
5587 .L477:
5588 2dda 4091 0000 lds r20,EE_Parameter+2
5589 2dde E42F mov r30,r20
5590 2de0 FF27 clr r31
5591 2de2 EE0F add r30,r30
5592 2de4 FF1F adc r31,r31
5593 2de6 E050 subi r30,lo8(-(PPM_in))
5594 2de8 F040 sbci r31,hi8(-(PPM_in))
5595 2dea 5091 0000 lds r21,EE_Parameter+60
5596 2dee 852F mov r24,r21
5597 2df0 9927 clr r25
5598 2df2 2227 clr r18
5599 2df4 3327 clr r19
5600 2df6 281B sub r18,r24
5601 2df8 390B sbc r19,r25
5602 2dfa 8081 ld r24,Z
5603 2dfc 9181 ldd r25,Z+1
5604 2dfe 8217 cp r24,r18
5605 2e00 9307 cpc r25,r19
5606 2e02 04F4 brge .L479
5607 2e04 8091 0000 lds r24,EE_Parameter+108
5608 2e08 83FF sbrs r24,3
5609 2e0a 00C0 rjmp .L479
5610 2e0c 81E0 ldi r24,lo8(1)
5611 2e0e 8093 0000 sts Looping_Rechts,r24
5612 2e12 00C0 rjmp .L480
5613 .L479:
5614 2e14 8091 0000 lds r24,Looping_Rechts
5615 2e18 8823 tst r24
5616 2e1a 01F0 breq .L480
5617 2e1c E42F mov r30,r20
5618 2e1e FF27 clr r31
5619 2e20 EE0F add r30,r30
5620 2e22 FF1F adc r31,r31
5621 2e24 E050 subi r30,lo8(-(PPM_in))
5622 2e26 F040 sbci r31,hi8(-(PPM_in))
5623 2e28 8091 0000 lds r24,EE_Parameter+61
5624 2e2c 9927 clr r25
5625 2e2e 851B sub r24,r21
5626 2e30 9109 sbc r25,__zero_reg__
5627 2e32 2081 ld r18,Z
5628 2e34 3181 ldd r19,Z+1
5629 2e36 8217 cp r24,r18
5630 2e38 9307 cpc r25,r19
5631 2e3a 04F4 brge .L480
5632 2e3c 1092 0000 sts Looping_Rechts,__zero_reg__
5633 .L480:
5634 2e40 EC2D mov r30,r12
5635 2e42 FF27 clr r31
5636 2e44 EE0F add r30,r30
5637 2e46 FF1F adc r31,r31
5638 2e48 E050 subi r30,lo8(-(PPM_in))
5639 2e4a F040 sbci r31,hi8(-(PPM_in))
5640 2e4c 4091 0000 lds r20,EE_Parameter+60
5641 2e50 242F mov r18,r20
5642 2e52 3327 clr r19
5643 2e54 8081 ld r24,Z
5644 2e56 9181 ldd r25,Z+1
5645 2e58 2817 cp r18,r24
5646 2e5a 3907 cpc r19,r25
5647 2e5c 04F4 brge .L483
5648 2e5e 8091 0000 lds r24,EE_Parameter+108
5649 2e62 80FF sbrs r24,0
5650 2e64 00C0 rjmp .L483
5651 2e66 81E0 ldi r24,lo8(1)
5652 2e68 8093 0000 sts Looping_Oben,r24
5653 2e6c 00C0 rjmp .L484
5654 .L483:
5655 2e6e 8091 0000 lds r24,Looping_Oben
5656 2e72 8823 tst r24
5657 2e74 01F0 breq .L484
5658 2e76 EC2D mov r30,r12
5659 2e78 FF27 clr r31
5660 2e7a EE0F add r30,r30
5661 2e7c FF1F adc r31,r31
5662 2e7e E050 subi r30,lo8(-(PPM_in))
5663 2e80 F040 sbci r31,hi8(-(PPM_in))
5664 2e82 842F mov r24,r20
5665 2e84 9927 clr r25
5666 2e86 2091 0000 lds r18,EE_Parameter+61
5667 2e8a 821B sub r24,r18
5668 2e8c 9109 sbc r25,__zero_reg__
5669 2e8e 2081 ld r18,Z
5670 2e90 3181 ldd r19,Z+1
5671 2e92 2817 cp r18,r24
5672 2e94 3907 cpc r19,r25
5673 2e96 04F4 brge .L484
5674 2e98 1092 0000 sts Looping_Oben,__zero_reg__
5675 .L484:
5676 2e9c 4091 0000 lds r20,EE_Parameter+1
5677 2ea0 E42F mov r30,r20
5678 2ea2 FF27 clr r31
5679 2ea4 EE0F add r30,r30
5680 2ea6 FF1F adc r31,r31
5681 2ea8 E050 subi r30,lo8(-(PPM_in))
5682 2eaa F040 sbci r31,hi8(-(PPM_in))
5683 2eac 5091 0000 lds r21,EE_Parameter+60
5684 2eb0 852F mov r24,r21
5685 2eb2 9927 clr r25
5686 2eb4 2227 clr r18
5687 2eb6 3327 clr r19
5688 2eb8 281B sub r18,r24
5689 2eba 390B sbc r19,r25
5690 2ebc 8081 ld r24,Z
5691 2ebe 9181 ldd r25,Z+1
5692 2ec0 8217 cp r24,r18
5693 2ec2 9307 cpc r25,r19
5694 2ec4 04F4 brge .L487
5695 2ec6 8091 0000 lds r24,EE_Parameter+108
5696 2eca 81FF sbrs r24,1
5697 2ecc 00C0 rjmp .L487
5698 2ece 81E0 ldi r24,lo8(1)
5699 2ed0 8093 0000 sts Looping_Unten,r24
5700 2ed4 00C0 rjmp .L488
5701 .L487:
5702 2ed6 8091 0000 lds r24,Looping_Unten
5703 2eda 8823 tst r24
5704 2edc 01F0 breq .L488
5705 2ede E42F mov r30,r20
5706 2ee0 FF27 clr r31
5707 2ee2 EE0F add r30,r30
5708 2ee4 FF1F adc r31,r31
5709 2ee6 E050 subi r30,lo8(-(PPM_in))
5710 2ee8 F040 sbci r31,hi8(-(PPM_in))
5711 2eea 8091 0000 lds r24,EE_Parameter+61
5712 2eee 9927 clr r25
5713 2ef0 851B sub r24,r21
5714 2ef2 9109 sbc r25,__zero_reg__
5715 2ef4 2081 ld r18,Z
5716 2ef6 3181 ldd r19,Z+1
5717 2ef8 8217 cp r24,r18
5718 2efa 9307 cpc r25,r19
5719 2efc 04F4 brge .L488
5720 2efe 1092 0000 sts Looping_Unten,__zero_reg__
5721 .L488:
5722 2f02 8091 0000 lds r24,Looping_Links
5723 2f06 8823 tst r24
5724 2f08 01F4 brne .L492
5725 2f0a 8091 0000 lds r24,Looping_Rechts
5726 2f0e 8111 cpse r24,__zero_reg__
5727 .L492:
5728 2f10 81E0 ldi r24,lo8(1)
5729 .L491:
5730 2f12 8093 0000 sts Looping_Roll,r24
5731 2f16 8091 0000 lds r24,Looping_Oben
5732 2f1a 8823 tst r24
5733 2f1c 01F4 brne .L495
5734 2f1e 8091 0000 lds r24,Looping_Unten
5735 2f22 8823 tst r24
5736 2f24 01F0 breq .L494
5737 .L495:
5738 2f26 81E0 ldi r24,lo8(1)
5739 2f28 8093 0000 sts Looping_Nick,r24
5740 2f2c 1092 0000 sts Looping_Roll,__zero_reg__
5741 2f30 1092 0000 sts Looping_Links,__zero_reg__
5742 2f34 1092 0000 sts Looping_Rechts,__zero_reg__
5743 2f38 00C0 rjmp .L436
5744 .L494:
5745 2f3a 8093 0000 sts Looping_Nick,r24
5746 .L436:
5747 2f3e 8091 0000 lds r24,Looping_Roll
5748 2f42 8823 tst r24
5749 2f44 01F4 brne .L498
5750 2f46 8091 0000 lds r24,Looping_Nick
5751 2f4a 8823 tst r24
5752 2f4c 01F0 breq .L497
5753 .L498:
5754 2f4e 8091 0000 lds r24,EE_Parameter+59
5755 2f52 9927 clr r25
5756 2f54 2981 ldd r18,Y+1
5757 2f56 3A81 ldd r19,Y+2
5758 2f58 8217 cp r24,r18
5759 2f5a 9307 cpc r25,r19
5760 2f5c 04F4 brge .L499
5761 2f5e 9A83 std Y+2,r25
5762 2f60 8983 std Y+1,r24
5763 .L499:
5764 2f62 81E0 ldi r24,lo8(1)
5765 2f64 8093 0000 sts TrichterFlug,r24
5766 .L497:
5767 2f68 8091 0000 lds r24,FC_StatusFlags2
5768 2f6c 9927 clr r25
5769 2f6e 9C01 movw r18,r24
5770 2f70 2470 andi r18,lo8(4)
5771 2f72 3070 andi r19,hi8(4)
5772 2f74 82FF sbrs r24,2
5773 2f76 00C0 rjmp .L500
5774 2f78 8091 0000 lds r24,GPS_Nick
5775 2f7c 9091 0000 lds r25,(GPS_Nick)+1
5776 2f80 9095 com r25
5777 2f82 8195 neg r24
5778 2f84 9F4F sbci r25,lo8(-1)
5779 2f86 9093 0000 sts (StickNick)+1,r25
5780 2f8a 8093 0000 sts StickNick,r24
5781 2f8e 8091 0000 lds r24,GPS_Roll
5782 2f92 9091 0000 lds r25,(GPS_Roll)+1
5783 2f96 9095 com r25
5784 2f98 8195 neg r24
5785 2f9a 9F4F sbci r25,lo8(-1)
5786 2f9c 9093 0000 sts (StickRoll)+1,r25
5787 2fa0 8093 0000 sts StickRoll,r24
5788 2fa4 8091 0000 lds r24,StickGasHover
5789 2fa8 9091 0000 lds r25,(StickGasHover)+1
5790 2fac 9093 0000 sts (StickGas)+1,r25
5791 2fb0 8093 0000 sts StickGas,r24
5792 2fb4 8091 0000 lds r24,Parameter_GlobalConfig
5793 2fb8 8B77 andi r24,lo8(123)
5794 2fba 8B66 ori r24,lo8(107)
5795 2fbc 8093 0000 sts Parameter_GlobalConfig,r24
5796 2fc0 8091 0000 lds r24,Parameter_ExtraConfig
5797 2fc4 8C7B andi r24,lo8(-68)
5798 2fc6 8093 0000 sts Parameter_ExtraConfig,r24
5799 2fca 88EC ldi r24,lo8(-56)
5800 2fcc 8093 0000 sts Parameter_HoehenSchalter,r24
5801 2fd0 00C0 rjmp .L501
5802 .L500:
5803 2fd2 8091 0000 lds r24,FC_StatusFlags
5804 2fd6 84FF sbrs r24,4
5805 2fd8 00C0 rjmp .L501
5806 2fda 3093 0000 sts (StickGier)+1,r19
5807 2fde 2093 0000 sts StickGier,r18
5808 2fe2 3093 0000 sts (StickNick)+1,r19
5809 2fe6 2093 0000 sts StickNick,r18
5810 2fea 3093 0000 sts (StickRoll)+1,r19
5811 2fee 2093 0000 sts StickRoll,r18
5812 2ff2 9AE5 ldi r25,lo8(90)
5813 2ff4 9093 0000 sts GyroFaktor,r25
5814 2ff8 88E7 ldi r24,lo8(120)
5815 2ffa 8093 0000 sts IntegralFaktor,r24
5816 2ffe 9093 0000 sts GyroFaktorGier,r25
5817 3002 8093 0000 sts IntegralFaktorGier,r24
5818 3006 1092 0000 sts Looping_Roll,__zero_reg__
5819 300a 1092 0000 sts Looping_Nick,__zero_reg__
5820 .L501:
5821 300e 8091 0000 lds r24,MittelIntegralNick
5822 3012 9091 0000 lds r25,(MittelIntegralNick)+1
5823 3016 A091 0000 lds r26,(MittelIntegralNick)+2
5824 301a B091 0000 lds r27,(MittelIntegralNick)+3
5825 301e 2091 0000 lds r18,IntegralNick
5826 3022 3091 0000 lds r19,(IntegralNick)+1
5827 3026 4091 0000 lds r20,(IntegralNick)+2
5828 302a 5091 0000 lds r21,(IntegralNick)+3
5829 302e 820F add r24,r18
5830 3030 931F adc r25,r19
5831 3032 A41F adc r26,r20
5832 3034 B51F adc r27,r21
5833 3036 8093 0000 sts MittelIntegralNick,r24
5834 303a 9093 0000 sts (MittelIntegralNick)+1,r25
5835 303e A093 0000 sts (MittelIntegralNick)+2,r26
5836 3042 B093 0000 sts (MittelIntegralNick)+3,r27
5837 3046 8091 0000 lds r24,MittelIntegralRoll
5838 304a 9091 0000 lds r25,(MittelIntegralRoll)+1
5839 304e A091 0000 lds r26,(MittelIntegralRoll)+2
5840 3052 B091 0000 lds r27,(MittelIntegralRoll)+3
5841 3056 E090 0000 lds r14,IntegralRoll
5842 305a F090 0000 lds r15,(IntegralRoll)+1
5843 305e 0091 0000 lds r16,(IntegralRoll)+2
5844 3062 1091 0000 lds r17,(IntegralRoll)+3
5845 3066 EB82 std Y+3,r14
5846 3068 FC82 std Y+4,r15
5847 306a 0D83 std Y+5,r16
5848 306c 1E83 std Y+6,r17
5849 306e 8E0D add r24,r14
5850 3070 9F1D adc r25,r15
5851 3072 A01F adc r26,r16
5852 3074 B11F adc r27,r17
5853 3076 8093 0000 sts MittelIntegralRoll,r24
5854 307a 9093 0000 sts (MittelIntegralRoll)+1,r25
5855 307e A093 0000 sts (MittelIntegralRoll)+2,r26
5856 3082 B093 0000 sts (MittelIntegralRoll)+3,r27
5857 3086 8091 0000 lds r24,MittelIntegralNick2
5858 308a 9091 0000 lds r25,(MittelIntegralNick2)+1
5859 308e A091 0000 lds r26,(MittelIntegralNick2)+2
5860 3092 B091 0000 lds r27,(MittelIntegralNick2)+3
5861 3096 E090 0000 lds r14,IntegralNick2
5862 309a F090 0000 lds r15,(IntegralNick2)+1
5863 309e 0091 0000 lds r16,(IntegralNick2)+2
5864 30a2 1091 0000 lds r17,(IntegralNick2)+3
5865 30a6 EF82 std Y+7,r14
5866 30a8 F886 std Y+8,r15
5867 30aa 0987 std Y+9,r16
5868 30ac 1A87 std Y+10,r17
5869 30ae 8E0D add r24,r14
5870 30b0 9F1D adc r25,r15
5871 30b2 A01F adc r26,r16
5872 30b4 B11F adc r27,r17
5873 30b6 8093 0000 sts MittelIntegralNick2,r24
5874 30ba 9093 0000 sts (MittelIntegralNick2)+1,r25
5875 30be A093 0000 sts (MittelIntegralNick2)+2,r26
5876 30c2 B093 0000 sts (MittelIntegralNick2)+3,r27
5877 30c6 8091 0000 lds r24,MittelIntegralRoll2
5878 30ca 9091 0000 lds r25,(MittelIntegralRoll2)+1
5879 30ce A091 0000 lds r26,(MittelIntegralRoll2)+2
5880 30d2 B091 0000 lds r27,(MittelIntegralRoll2)+3
5881 30d6 E090 0000 lds r14,IntegralRoll2
5882 30da F090 0000 lds r15,(IntegralRoll2)+1
5883 30de 0091 0000 lds r16,(IntegralRoll2)+2
5884 30e2 1091 0000 lds r17,(IntegralRoll2)+3
5885 30e6 EB86 std Y+11,r14
5886 30e8 FC86 std Y+12,r15
5887 30ea 0D87 std Y+13,r16
5888 30ec 1E87 std Y+14,r17
5889 30ee 8E0D add r24,r14
5890 30f0 9F1D adc r25,r15
5891 30f2 A01F adc r26,r16
5892 30f4 B11F adc r27,r17
5893 30f6 8093 0000 sts MittelIntegralRoll2,r24
5894 30fa 9093 0000 sts (MittelIntegralRoll2)+1,r25
5895 30fe A093 0000 sts (MittelIntegralRoll2)+2,r26
5896 3102 B093 0000 sts (MittelIntegralRoll2)+3,r27
5897 3106 F090 0000 lds r15,Looping_Nick
5898 310a FF86 std Y+15,r15
5899 310c FF20 tst r15
5900 310e 01F4 brne .L504
5901 3110 8091 0000 lds r24,Looping_Roll
5902 3114 8823 tst r24
5903 3116 01F4 brne .+2
5904 3118 00C0 rjmp .L886
5905 .L504:
5906 311a 1092 0000 sts IntegralAccNick,__zero_reg__
5907 311e 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
5908 3122 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
5909 3126 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
5910 312a 1092 0000 sts IntegralAccRoll,__zero_reg__
5911 312e 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
5912 3132 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
5913 3136 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
5914 313a 1092 0000 sts MittelIntegralNick,__zero_reg__
5915 313e 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
5916 3142 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
5917 3146 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
5918 314a 1092 0000 sts MittelIntegralRoll,__zero_reg__
5919 314e 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
5920 3152 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
5921 3156 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
5922 315a 1092 0000 sts MittelIntegralNick2,__zero_reg__
5923 315e 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
5924 3162 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
5925 3166 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
5926 316a 1092 0000 sts MittelIntegralRoll2,__zero_reg__
5927 316e 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
5928 3172 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
5929 3176 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
5930 317a 8091 0000 lds r24,Mess_IntegralNick
5931 317e 9091 0000 lds r25,(Mess_IntegralNick)+1
5932 3182 A091 0000 lds r26,(Mess_IntegralNick)+2
5933 3186 B091 0000 lds r27,(Mess_IntegralNick)+3
5934 318a 8093 0000 sts Mess_IntegralNick2,r24
5935 318e 9093 0000 sts (Mess_IntegralNick2)+1,r25
5936 3192 A093 0000 sts (Mess_IntegralNick2)+2,r26
5937 3196 B093 0000 sts (Mess_IntegralNick2)+3,r27
5938 319a 8091 0000 lds r24,Mess_IntegralRoll
5939 319e 9091 0000 lds r25,(Mess_IntegralRoll)+1
5940 31a2 A091 0000 lds r26,(Mess_IntegralRoll)+2
5941 31a6 B091 0000 lds r27,(Mess_IntegralRoll)+3
5942 31aa 8093 0000 sts Mess_IntegralRoll2,r24
5943 31ae 9093 0000 sts (Mess_IntegralRoll2)+1,r25
5944 31b2 A093 0000 sts (Mess_IntegralRoll2)+2,r26
5945 31b6 B093 0000 sts (Mess_IntegralRoll2)+3,r27
5946 31ba 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
5947 31be 1092 0000 sts ZaehlMessungen,__zero_reg__
5948 31c2 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
5949 31c6 1092 0000 sts LageKorrekturNick,__zero_reg__
5950 31ca 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
5951 31ce 1092 0000 sts LageKorrekturRoll,__zero_reg__
5952 31d2 0F85 ldd r16,Y+15
5953 31d4 0023 tst r16
5954 31d6 01F0 breq .+2
5955 31d8 00C0 rjmp .L505
5956 .L886:
5957 31da 8091 0000 lds r24,Looping_Roll
5958 31de 8823 tst r24
5959 31e0 01F0 breq .+2
5960 31e2 00C0 rjmp .L505
5961 31e4 8091 0000 lds r24,Aktuell_az
5962 31e8 9091 0000 lds r25,(Aktuell_az)+1
5963 31ec 8150 subi r24,lo8(513)
5964 31ee 9240 sbci r25,hi8(513)
5965 31f0 04F4 brge .L506
5966 31f2 8091 0000 lds r24,MotorenEin
5967 31f6 8823 tst r24
5968 31f8 01F4 brne .+2
5969 31fa 00C0 rjmp .L505
5970 .L506:
5971 31fc 9090 0000 lds r9,FromNaviCtrl_Value
5972 3200 A090 0000 lds r10,EE_Parameter+28
5973 3204 2090 0000 lds r2,Mittelwert_AccNick
5974 3208 3090 0000 lds r3,(Mittelwert_AccNick)+1
5975 320c 4090 0000 lds r4,Mittelwert_AccRoll
5976 3210 5090 0000 lds r5,(Mittelwert_AccRoll)+1
5977 3214 1914 cp __zero_reg__,r9
5978 3216 04F0 brlt .+2
5979 3218 00C0 rjmp .L507
5980 321a BB24 clr r11
5981 321c CC24 clr r12
5982 321e DD24 clr r13
5983 3220 CA01 movw r24,r20
5984 3222 B901 movw r22,r18
5985 3224 A601 movw r20,r12
5986 3226 9501 movw r18,r10
5987 3228 0E94 0000 call __divmodsi4
5988 322c 7901 movw r14,r18
5989 322e 8A01 movw r16,r20
5990 3230 8091 0000 lds r24,FromNaviCtrl+9
5991 3234 9091 0000 lds r25,(FromNaviCtrl+9)+1
5992 3238 281A sub r2,r24
5993 323a 390A sbc r3,r25
5994 323c C101 movw r24,r2
5995 323e AA27 clr r26
5996 3240 97FD sbrc r25,7
5997 3242 A095 com r26
5998 3244 BA2F mov r27,r26
5999 3246 E81A sub r14,r24
6000 3248 F90A sbc r15,r25
6001 324a 0A0B sbc r16,r26
6002 324c 1B0B sbc r17,r27
6003 324e 6B81 ldd r22,Y+3
6004 3250 7C81 ldd r23,Y+4
6005 3252 8D81 ldd r24,Y+5
6006 3254 9E81 ldd r25,Y+6
6007 3256 A601 movw r20,r12
6008 3258 9501 movw r18,r10
6009 325a 0E94 0000 call __divmodsi4
6010 325e 5901 movw r10,r18
6011 3260 6A01 movw r12,r20
6012 3262 8091 0000 lds r24,FromNaviCtrl+11
6013 3266 9091 0000 lds r25,(FromNaviCtrl+11)+1
6014 326a 481A sub r4,r24
6015 326c 590A sbc r5,r25
6016 326e C201 movw r24,r4
6017 3270 AA27 clr r26
6018 3272 97FD sbrc r25,7
6019 3274 A095 com r26
6020 3276 BA2F mov r27,r26
6021 3278 A81A sub r10,r24
6022 327a B90A sbc r11,r25
6023 327c CA0A sbc r12,r26
6024 327e DB0A sbc r13,r27
6025 3280 292C mov r2,r9
6026 3282 3324 clr r3
6027 3284 27FC sbrc r2,7
6028 3286 3094 com r3
6029 3288 432C mov r4,r3
6030 328a 532C mov r5,r3
6031 328c C801 movw r24,r16
6032 328e B701 movw r22,r14
6033 3290 A201 movw r20,r4
6034 3292 9101 movw r18,r2
6035 3294 0E94 0000 call __mulsi3
6036 3298 97FF sbrs r25,7
6037 329a 00C0 rjmp .L508
6038 329c 6150 subi r22,lo8(-(511))
6039 329e 7E4F sbci r23,hi8(-(511))
6040 32a0 8F4F sbci r24,hlo8(-(511))
6041 32a2 9F4F sbci r25,hhi8(-(511))
6042 .L508:
6043 32a4 3B01 movw r6,r22
6044 32a6 4C01 movw r8,r24
6045 32a8 09E0 ldi r16,9
6046 32aa 9594 1: asr r9
6047 32ac 8794 ror r8
6048 32ae 7794 ror r7
6049 32b0 6794 ror r6
6050 32b2 0A95 dec r16
6051 32b4 01F4 brne 1b
6052 32b6 C601 movw r24,r12
6053 32b8 B501 movw r22,r10
6054 32ba A201 movw r20,r4
6055 32bc 9101 movw r18,r2
6056 32be 0E94 0000 call __mulsi3
6057 32c2 97FF sbrs r25,7
6058 32c4 00C0 rjmp .L509
6059 32c6 6150 subi r22,lo8(-(511))
6060 32c8 7E4F sbci r23,hi8(-(511))
6061 32ca 8F4F sbci r24,hlo8(-(511))
6062 32cc 9F4F sbci r25,hhi8(-(511))
6063 .L509:
6064 32ce 5B01 movw r10,r22
6065 32d0 6C01 movw r12,r24
6066 32d2 19E0 ldi r17,9
6067 32d4 D594 1: asr r13
6068 32d6 C794 ror r12
6069 32d8 B794 ror r11
6070 32da A794 ror r10
6071 32dc 1A95 dec r17
6072 32de 01F4 brne 1b
6073 32e0 8091 0000 lds r24,MaxStickNick
6074 32e4 9091 0000 lds r25,(MaxStickNick)+1
6075 32e8 8134 cpi r24,65
6076 32ea 9105 cpc r25,__zero_reg__
6077 32ec 04F4 brge .L511
6078 32ee 8091 0000 lds r24,MaxStickRoll
6079 32f2 9091 0000 lds r25,(MaxStickRoll)+1
6080 32f6 8134 cpi r24,65
6081 32f8 9105 cpc r25,__zero_reg__
6082 32fa 04F0 brlt .L510
6083 .L511:
6084 32fc D401 movw r26,r8
6085 32fe C301 movw r24,r6
6086 3300 97FE sbrs r9,7
6087 3302 00C0 rjmp .L512
6088 3304 0196 adiw r24,1
6089 3306 A11D adc r26,__zero_reg__
6090 3308 B11D adc r27,__zero_reg__
6091 .L512:
6092 330a 3C01 movw r6,r24
6093 330c 4D01 movw r8,r26
6094 330e 9594 asr r9
6095 3310 8794 ror r8
6096 3312 7794 ror r7
6097 3314 6794 ror r6
6098 3316 D601 movw r26,r12
6099 3318 C501 movw r24,r10
6100 331a D7FE sbrs r13,7
6101 331c 00C0 rjmp .L513
6102 331e 0196 adiw r24,1
6103 3320 A11D adc r26,__zero_reg__
6104 3322 B11D adc r27,__zero_reg__
6105 .L513:
6106 3324 5C01 movw r10,r24
6107 3326 6D01 movw r12,r26
6108 3328 D594 asr r13
6109 332a C794 ror r12
6110 332c B794 ror r11
6111 332e A794 ror r10
6112 .L510:
6113 3330 8091 0000 lds r24,FromNaviCtrl_Value+2
6114 3334 282F mov r18,r24
6115 3336 3327 clr r19
6116 3338 27FD sbrc r18,7
6117 333a 3095 com r19
6118 333c 432F mov r20,r19
6119 333e 532F mov r21,r19
6120 3340 2615 cp r18,r6
6121 3342 3705 cpc r19,r7
6122 3344 4805 cpc r20,r8
6123 3346 5905 cpc r21,r9
6124 3348 04F4 brge .L514
6125 334a 3901 movw r6,r18
6126 334c 4A01 movw r8,r20
6127 .L514:
6128 334e 9927 clr r25
6129 3350 87FD sbrc r24,7
6130 3352 9095 com r25
6131 3354 9095 com r25
6132 3356 8195 neg r24
6133 3358 9F4F sbci r25,lo8(-1)
6134 335a AA27 clr r26
6135 335c 97FD sbrc r25,7
6136 335e A095 com r26
6137 3360 BA2F mov r27,r26
6138 3362 6816 cp r6,r24
6139 3364 7906 cpc r7,r25
6140 3366 8A06 cpc r8,r26
6141 3368 9B06 cpc r9,r27
6142 336a 04F4 brge .L515
6143 336c 3C01 movw r6,r24
6144 336e 4D01 movw r8,r26
6145 .L515:
6146 3370 2A15 cp r18,r10
6147 3372 3B05 cpc r19,r11
6148 3374 4C05 cpc r20,r12
6149 3376 5D05 cpc r21,r13
6150 3378 04F4 brge .L516
6151 337a 5901 movw r10,r18
6152 337c 6A01 movw r12,r20
6153 .L516:
6154 337e A816 cp r10,r24
6155 3380 B906 cpc r11,r25
6156 3382 CA06 cpc r12,r26
6157 3384 DB06 cpc r13,r27
6158 3386 04F0 brlt .+2
6159 3388 00C0 rjmp .L518
6160 338a 5C01 movw r10,r24
6161 338c 6D01 movw r12,r26
6162 338e 00C0 rjmp .L518
6163 .L507:
6164 3390 EA2C mov r14,r10
6165 3392 FF24 clr r15
6166 3394 0027 clr r16
6167 3396 1127 clr r17
6168 3398 CA01 movw r24,r20
6169 339a B901 movw r22,r18
6170 339c A801 movw r20,r16
6171 339e 9701 movw r18,r14
6172 33a0 0E94 0000 call __divmodsi4
6173 33a4 3901 movw r6,r18
6174 33a6 4A01 movw r8,r20
6175 33a8 C101 movw r24,r2
6176 33aa AA27 clr r26
6177 33ac 97FD sbrc r25,7
6178 33ae A095 com r26
6179 33b0 BA2F mov r27,r26
6180 33b2 681A sub r6,r24
6181 33b4 790A sbc r7,r25
6182 33b6 8A0A sbc r8,r26
6183 33b8 9B0A sbc r9,r27
6184 33ba 6B81 ldd r22,Y+3
6185 33bc 7C81 ldd r23,Y+4
6186 33be 8D81 ldd r24,Y+5
6187 33c0 9E81 ldd r25,Y+6
6188 33c2 A801 movw r20,r16
6189 33c4 9701 movw r18,r14
6190 33c6 0E94 0000 call __divmodsi4
6191 33ca 5901 movw r10,r18
6192 33cc 6A01 movw r12,r20
6193 33ce C201 movw r24,r4
6194 33d0 AA27 clr r26
6195 33d2 97FD sbrc r25,7
6196 33d4 A095 com r26
6197 33d6 BA2F mov r27,r26
6198 33d8 A81A sub r10,r24
6199 33da B90A sbc r11,r25
6200 33dc CA0A sbc r12,r26
6201 33de DB0A sbc r13,r27
6202 33e0 D401 movw r26,r8
6203 33e2 C301 movw r24,r6
6204 33e4 97FE sbrs r9,7
6205 33e6 00C0 rjmp .L519
6206 33e8 0F96 adiw r24,15
6207 33ea A11D adc r26,__zero_reg__
6208 33ec B11D adc r27,__zero_reg__
6209 .L519:
6210 33ee 3C01 movw r6,r24
6211 33f0 4D01 movw r8,r26
6212 33f2 F4E0 ldi r31,4
6213 33f4 9594 1: asr r9
6214 33f6 8794 ror r8
6215 33f8 7794 ror r7
6216 33fa 6794 ror r6
6217 33fc FA95 dec r31
6218 33fe 01F4 brne 1b
6219 3400 D601 movw r26,r12
6220 3402 C501 movw r24,r10
6221 3404 D7FE sbrs r13,7
6222 3406 00C0 rjmp .L520
6223 3408 0F96 adiw r24,15
6224 340a A11D adc r26,__zero_reg__
6225 340c B11D adc r27,__zero_reg__
6226 .L520:
6227 340e 5C01 movw r10,r24
6228 3410 6D01 movw r12,r26
6229 3412 E4E0 ldi r30,4
6230 3414 D594 1: asr r13
6231 3416 C794 ror r12
6232 3418 B794 ror r11
6233 341a A794 ror r10
6234 341c EA95 dec r30
6235 341e 01F4 brne 1b
6236 3420 8091 0000 lds r24,MaxStickNick
6237 3424 9091 0000 lds r25,(MaxStickNick)+1
6238 3428 8134 cpi r24,65
6239 342a 9105 cpc r25,__zero_reg__
6240 342c 04F4 brge .L522
6241 342e 8091 0000 lds r24,MaxStickRoll
6242 3432 9091 0000 lds r25,(MaxStickRoll)+1
6243 3436 8134 cpi r24,65
6244 3438 9105 cpc r25,__zero_reg__
6245 343a 04F0 brlt .L521
6246 .L522:
6247 343c C401 movw r24,r8
6248 343e B301 movw r22,r6
6249 3440 23E0 ldi r18,lo8(3)
6250 3442 30E0 ldi r19,hi8(3)
6251 3444 40E0 ldi r20,hlo8(3)
6252 3446 50E0 ldi r21,hhi8(3)
6253 3448 0E94 0000 call __divmodsi4
6254 344c 3901 movw r6,r18
6255 344e 4A01 movw r8,r20
6256 3450 C601 movw r24,r12
6257 3452 B501 movw r22,r10
6258 3454 23E0 ldi r18,lo8(3)
6259 3456 30E0 ldi r19,hi8(3)
6260 3458 40E0 ldi r20,hlo8(3)
6261 345a 50E0 ldi r21,hhi8(3)
6262 345c 0E94 0000 call __divmodsi4
6263 3460 5901 movw r10,r18
6264 3462 6A01 movw r12,r20
6265 .L521:
6266 3464 8091 0000 lds r24,EE_Parameter+4
6267 3468 E82F mov r30,r24
6268 346a FF27 clr r31
6269 346c EE0F add r30,r30
6270 346e FF1F adc r31,r31
6271 3470 E050 subi r30,lo8(-(PPM_in))
6272 3472 F040 sbci r31,hi8(-(PPM_in))
6273 3474 8081 ld r24,Z
6274 3476 9181 ldd r25,Z+1
6275 3478 0190 ld __tmp_reg__,Z+
6276 347a F081 ld r31,Z
6277 347c E02D mov r30,__tmp_reg__
6278 347e F7FF sbrs r31,7
6279 3480 00C0 rjmp .L524
6280 3482 F095 com r31
6281 3484 E195 neg r30
6282 3486 FF4F sbci r31,lo8(-1)
6283 .L524:
6284 3488 7A97 sbiw r30,26
6285 348a 04F0 brlt .L523
6286 348c C401 movw r24,r8
6287 348e B301 movw r22,r6
6288 3490 23E0 ldi r18,lo8(3)
6289 3492 30E0 ldi r19,hi8(3)
6290 3494 40E0 ldi r20,hlo8(3)
6291 3496 50E0 ldi r21,hhi8(3)
6292 3498 0E94 0000 call __divmodsi4
6293 349c 3901 movw r6,r18
6294 349e 4A01 movw r8,r20
6295 34a0 C601 movw r24,r12
6296 34a2 B501 movw r22,r10
6297 34a4 23E0 ldi r18,lo8(3)
6298 34a6 30E0 ldi r19,hi8(3)
6299 34a8 40E0 ldi r20,hlo8(3)
6300 34aa 50E0 ldi r21,hhi8(3)
6301 34ac 0E94 0000 call __divmodsi4
6302 34b0 5901 movw r10,r18
6303 34b2 6A01 movw r12,r20
6304 .L523:
6305 34b4 89E1 ldi r24,lo8(25)
6306 34b6 8093 0000 sts KompassFusion,r24
6307 34ba 21E2 ldi r18,lo8(33)
6308 34bc 6216 cp r6,r18
6309 34be 7104 cpc r7,__zero_reg__
6310 34c0 8104 cpc r8,__zero_reg__
6311 34c2 9104 cpc r9,__zero_reg__
6312 34c4 04F0 brlt .L525
6313 34c6 70E2 ldi r23,lo8(32)
6314 34c8 672E mov r6,r23
6315 34ca 712C mov r7,__zero_reg__
6316 34cc 812C mov r8,__zero_reg__
6317 34ce 912C mov r9,__zero_reg__
6318 .L525:
6319 34d0 30EE ldi r19,lo8(-32)
6320 34d2 6316 cp r6,r19
6321 34d4 3FEF ldi r19,hi8(-32)
6322 34d6 7306 cpc r7,r19
6323 34d8 3FEF ldi r19,hlo8(-32)
6324 34da 8306 cpc r8,r19
6325 34dc 3FEF ldi r19,hhi8(-32)
6326 34de 9306 cpc r9,r19
6327 34e0 04F4 brge .L526
6328 34e2 60EE ldi r22,lo8(-32)
6329 34e4 662E mov r6,r22
6330 34e6 6FEF ldi r22,hi8(-32)
6331 34e8 762E mov r7,r22
6332 34ea 6FEF ldi r22,hlo8(-32)
6333 34ec 862E mov r8,r22
6334 34ee 6FEF ldi r22,hhi8(-32)
6335 34f0 962E mov r9,r22
6336 .L526:
6337 34f2 41E2 ldi r20,lo8(33)
6338 34f4 A416 cp r10,r20
6339 34f6 B104 cpc r11,__zero_reg__
6340 34f8 C104 cpc r12,__zero_reg__
6341 34fa D104 cpc r13,__zero_reg__
6342 34fc 04F0 brlt .L527
6343 34fe 50E2 ldi r21,lo8(32)
6344 3500 A52E mov r10,r21
6345 3502 B12C mov r11,__zero_reg__
6346 3504 C12C mov r12,__zero_reg__
6347 3506 D12C mov r13,__zero_reg__
6348 .L527:
6349 3508 50EE ldi r21,lo8(-32)
6350 350a A516 cp r10,r21
6351 350c 5FEF ldi r21,hi8(-32)
6352 350e B506 cpc r11,r21
6353 3510 5FEF ldi r21,hlo8(-32)
6354 3512 C506 cpc r12,r21
6355 3514 5FEF ldi r21,hhi8(-32)
6356 3516 D506 cpc r13,r21
6357 3518 04F4 brge .L518
6358 351a 40EE ldi r20,lo8(-32)
6359 351c A42E mov r10,r20
6360 351e 4FEF ldi r20,hi8(-32)
6361 3520 B42E mov r11,r20
6362 3522 4FEF ldi r20,hlo8(-32)
6363 3524 C42E mov r12,r20
6364 3526 4FEF ldi r20,hhi8(-32)
6365 3528 D42E mov r13,r20
6366 .L518:
6367 352a 8091 0000 lds r24,Mess_IntegralNick
6368 352e 9091 0000 lds r25,(Mess_IntegralNick)+1
6369 3532 A091 0000 lds r26,(Mess_IntegralNick)+2
6370 3536 B091 0000 lds r27,(Mess_IntegralNick)+3
6371 353a 8619 sub r24,r6
6372 353c 9709 sbc r25,r7
6373 353e A809 sbc r26,r8
6374 3540 B909 sbc r27,r9
6375 3542 8093 0000 sts Mess_IntegralNick,r24
6376 3546 9093 0000 sts (Mess_IntegralNick)+1,r25
6377 354a A093 0000 sts (Mess_IntegralNick)+2,r26
6378 354e B093 0000 sts (Mess_IntegralNick)+3,r27
6379 3552 8091 0000 lds r24,Mess_IntegralRoll
6380 3556 9091 0000 lds r25,(Mess_IntegralRoll)+1
6381 355a A091 0000 lds r26,(Mess_IntegralRoll)+2
6382 355e B091 0000 lds r27,(Mess_IntegralRoll)+3
6383 3562 8A19 sub r24,r10
6384 3564 9B09 sbc r25,r11
6385 3566 AC09 sbc r26,r12
6386 3568 BD09 sbc r27,r13
6387 356a 8093 0000 sts Mess_IntegralRoll,r24
6388 356e 9093 0000 sts (Mess_IntegralRoll)+1,r25
6389 3572 A093 0000 sts (Mess_IntegralRoll)+2,r26
6390 3576 B093 0000 sts (Mess_IntegralRoll)+3,r27
6391 .L505:
6392 357a 8091 0000 lds r24,ZaehlMessungen
6393 357e 9091 0000 lds r25,(ZaehlMessungen)+1
6394 3582 8F3F cpi r24,255
6395 3584 9105 cpc r25,__zero_reg__
6396 3586 01F0 breq .+2
6397 3588 00F4 brsh .+2
6398 358a 00C0 rjmp .L529
6399 358c 6F85 ldd r22,Y+15
6400 358e 6623 tst r22
6401 3590 01F0 breq .+2
6402 3592 00C0 rjmp .L530
6403 3594 8091 0000 lds r24,Looping_Roll
6404 3598 8823 tst r24
6405 359a 01F0 breq .+2
6406 359c 00C0 rjmp .L530
6407 359e 8091 0000 lds r24,TrichterFlug
6408 35a2 8823 tst r24
6409 35a4 01F0 breq .+2
6410 35a6 00C0 rjmp .L530
6411 35a8 7091 0000 lds r23,EE_Parameter+68
6412 35ac 788B std Y+16,r23
6413 35ae 7723 tst r23
6414 35b0 01F4 brne .+2
6415 35b2 00C0 rjmp .L530
6416 35b4 8091 0000 lds r24,MittelIntegralNick
6417 35b8 9091 0000 lds r25,(MittelIntegralNick)+1
6418 35bc A091 0000 lds r26,(MittelIntegralNick)+2
6419 35c0 B091 0000 lds r27,(MittelIntegralNick)+3
6420 35c4 B7FF sbrs r27,7
6421 35c6 00C0 rjmp .L531
6422 35c8 8150 subi r24,lo8(-(255))
6423 35ca 9F4F sbci r25,hi8(-(255))
6424 35cc AF4F sbci r26,hlo8(-(255))
6425 35ce BF4F sbci r27,hhi8(-(255))
6426 .L531:
6427 35d0 E92E mov r14,r25
6428 35d2 FA2E mov r15,r26
6429 35d4 0B2F mov r16,r27
6430 35d6 1127 clr r17
6431 35d8 07FD sbrc r16,7
6432 35da 1A95 dec r17
6433 35dc E092 0000 sts MittelIntegralNick,r14
6434 35e0 F092 0000 sts (MittelIntegralNick)+1,r15
6435 35e4 0093 0000 sts (MittelIntegralNick)+2,r16
6436 35e8 1093 0000 sts (MittelIntegralNick)+3,r17
6437 35ec 8091 0000 lds r24,MittelIntegralRoll
6438 35f0 9091 0000 lds r25,(MittelIntegralRoll)+1
6439 35f4 A091 0000 lds r26,(MittelIntegralRoll)+2
6440 35f8 B091 0000 lds r27,(MittelIntegralRoll)+3
6441 35fc B7FF sbrs r27,7
6442 35fe 00C0 rjmp .L532
6443 3600 8150 subi r24,lo8(-(255))
6444 3602 9F4F sbci r25,hi8(-(255))
6445 3604 AF4F sbci r26,hlo8(-(255))
6446 3606 BF4F sbci r27,hhi8(-(255))
6447 .L532:
6448 3608 892F mov r24,r25
6449 360a 9A2F mov r25,r26
6450 360c AB2F mov r26,r27
6451 360e BB27 clr r27
6452 3610 A7FD sbrc r26,7
6453 3612 BA95 dec r27
6454 3614 898B std Y+17,r24
6455 3616 9A8B std Y+18,r25
6456 3618 AB8B std Y+19,r26
6457 361a BC8B std Y+20,r27
6458 361c 8093 0000 sts MittelIntegralRoll,r24
6459 3620 9093 0000 sts (MittelIntegralRoll)+1,r25
6460 3624 A093 0000 sts (MittelIntegralRoll)+2,r26
6461 3628 B093 0000 sts (MittelIntegralRoll)+3,r27
6462 362c 8091 0000 lds r24,EE_Parameter+28
6463 3630 A82E mov r10,r24
6464 3632 BB24 clr r11
6465 3634 CC24 clr r12
6466 3636 DD24 clr r13
6467 3638 2091 0000 lds r18,IntegralAccNick
6468 363c 3091 0000 lds r19,(IntegralAccNick)+1
6469 3640 4091 0000 lds r20,(IntegralAccNick)+2
6470 3644 5091 0000 lds r21,(IntegralAccNick)+3
6471 3648 C601 movw r24,r12
6472 364a B501 movw r22,r10
6473 364c 0E94 0000 call __mulsi3
6474 3650 97FF sbrs r25,7
6475 3652 00C0 rjmp .L533
6476 3654 6150 subi r22,lo8(-(255))
6477 3656 7F4F sbci r23,hi8(-(255))
6478 3658 8F4F sbci r24,hlo8(-(255))
6479 365a 9F4F sbci r25,hhi8(-(255))
6480 .L533:
6481 365c 672E mov r6,r23
6482 365e 782E mov r7,r24
6483 3660 892E mov r8,r25
6484 3662 9924 clr r9
6485 3664 87FC sbrc r8,7
6486 3666 9A94 dec r9
6487 3668 6092 0000 sts IntegralAccNick,r6
6488 366c 7092 0000 sts (IntegralAccNick)+1,r7
6489 3670 8092 0000 sts (IntegralAccNick)+2,r8
6490 3674 9092 0000 sts (IntegralAccNick)+3,r9
6491 3678 2091 0000 lds r18,IntegralAccRoll
6492 367c 3091 0000 lds r19,(IntegralAccRoll)+1
6493 3680 4091 0000 lds r20,(IntegralAccRoll)+2
6494 3684 5091 0000 lds r21,(IntegralAccRoll)+3
6495 3688 C601 movw r24,r12
6496 368a B501 movw r22,r10
6497 368c 0E94 0000 call __mulsi3
6498 3690 97FF sbrs r25,7
6499 3692 00C0 rjmp .L534
6500 3694 6150 subi r22,lo8(-(255))
6501 3696 7F4F sbci r23,hi8(-(255))
6502 3698 8F4F sbci r24,hlo8(-(255))
6503 369a 9F4F sbci r25,hhi8(-(255))
6504 .L534:
6505 369c 272E mov r2,r23
6506 369e 382E mov r3,r24
6507 36a0 492E mov r4,r25
6508 36a2 5524 clr r5
6509 36a4 47FC sbrc r4,7
6510 36a6 5A94 dec r5
6511 36a8 2092 0000 sts IntegralAccRoll,r2
6512 36ac 3092 0000 sts (IntegralAccRoll)+1,r3
6513 36b0 4092 0000 sts (IntegralAccRoll)+2,r4
6514 36b4 5092 0000 sts (IntegralAccRoll)+3,r5
6515 36b8 8091 0000 lds r24,IntegralAccZ
6516 36bc 9091 0000 lds r25,(IntegralAccZ)+1
6517 36c0 A091 0000 lds r26,(IntegralAccZ)+2
6518 36c4 B091 0000 lds r27,(IntegralAccZ)+3
6519 36c8 B7FF sbrs r27,7
6520 36ca 00C0 rjmp .L535
6521 36cc 8150 subi r24,lo8(-(255))
6522 36ce 9F4F sbci r25,hi8(-(255))
6523 36d0 AF4F sbci r26,hlo8(-(255))
6524 36d2 BF4F sbci r27,hhi8(-(255))
6525 .L535:
6526 36d4 892F mov r24,r25
6527 36d6 9A2F mov r25,r26
6528 36d8 AB2F mov r26,r27
6529 36da BB27 clr r27
6530 36dc A7FD sbrc r26,7
6531 36de BA95 dec r27
6532 36e0 8093 0000 sts IntegralAccZ,r24
6533 36e4 9093 0000 sts (IntegralAccZ)+1,r25
6534 36e8 A093 0000 sts (IntegralAccZ)+2,r26
6535 36ec B093 0000 sts (IntegralAccZ)+3,r27
6536 36f0 D801 movw r26,r16
6537 36f2 C701 movw r24,r14
6538 36f4 8619 sub r24,r6
6539 36f6 9709 sbc r25,r7
6540 36f8 A809 sbc r26,r8
6541 36fa B909 sbc r27,r9
6542 36fc 8093 0000 sts IntegralFehlerNick.3,r24
6543 3700 9093 0000 sts (IntegralFehlerNick.3)+1,r25
6544 3704 A093 0000 sts (IntegralFehlerNick.3)+2,r26
6545 3708 B093 0000 sts (IntegralFehlerNick.3)+3,r27
6546 370c 2091 0000 lds r18,EE_Parameter+67
6547 3710 E22E mov r14,r18
6548 3712 FF24 clr r15
6549 3714 0027 clr r16
6550 3716 1127 clr r17
6551 3718 BC01 movw r22,r24
6552 371a CD01 movw r24,r26
6553 371c A801 movw r20,r16
6554 371e 9701 movw r18,r14
6555 3720 0E94 0000 call __divmodsi4
6556 3724 5901 movw r10,r18
6557 3726 6A01 movw r12,r20
6558 3728 2093 0000 sts ausgleichNick.10,r18
6559 372c 3093 0000 sts (ausgleichNick.10)+1,r19
6560 3730 4093 0000 sts (ausgleichNick.10)+2,r20
6561 3734 5093 0000 sts (ausgleichNick.10)+3,r21
6562 3738 8989 ldd r24,Y+17
6563 373a 9A89 ldd r25,Y+18
6564 373c AB89 ldd r26,Y+19
6565 373e BC89 ldd r27,Y+20
6566 3740 8219 sub r24,r2
6567 3742 9309 sbc r25,r3
6568 3744 A409 sbc r26,r4
6569 3746 B509 sbc r27,r5
6570 3748 8093 0000 sts IntegralFehlerRoll.4,r24
6571 374c 9093 0000 sts (IntegralFehlerRoll.4)+1,r25
6572 3750 A093 0000 sts (IntegralFehlerRoll.4)+2,r26
6573 3754 B093 0000 sts (IntegralFehlerRoll.4)+3,r27
6574 3758 BC01 movw r22,r24
6575 375a CD01 movw r24,r26
6576 375c A801 movw r20,r16
6577 375e 9701 movw r18,r14
6578 3760 0E94 0000 call __divmodsi4
6579 3764 2093 0000 sts ausgleichRoll.11,r18
6580 3768 3093 0000 sts (ausgleichRoll.11)+1,r19
6581 376c 4093 0000 sts (ausgleichRoll.11)+2,r20
6582 3770 5093 0000 sts (ausgleichRoll.11)+3,r21
6583 3774 D601 movw r26,r12
6584 3776 C501 movw r24,r10
6585 3778 D7FE sbrs r13,7
6586 377a 00C0 rjmp .L536
6587 377c 8150 subi r24,lo8(-(255))
6588 377e 9F4F sbci r25,hi8(-(255))
6589 3780 AF4F sbci r26,hlo8(-(255))
6590 3782 BF4F sbci r27,hhi8(-(255))
6591 .L536:
6592 3784 892F mov r24,r25
6593 3786 9A2F mov r25,r26
6594 3788 AB2F mov r26,r27
6595 378a BB27 clr r27
6596 378c A7FD sbrc r26,7
6597 378e BA95 dec r27
6598 3790 9093 0000 sts (LageKorrekturNick)+1,r25
6599 3794 8093 0000 sts LageKorrekturNick,r24
6600 3798 57FF sbrs r21,7
6601 379a 00C0 rjmp .L537
6602 379c 2150 subi r18,lo8(-(255))
6603 379e 3F4F sbci r19,hi8(-(255))
6604 37a0 4F4F sbci r20,hlo8(-(255))
6605 37a2 5F4F sbci r21,hhi8(-(255))
6606 .L537:
6607 37a4 BB27 clr r27
6608 37a6 57FD sbrc r21,7
6609 37a8 BA95 dec r27
6610 37aa A52F mov r26,r21
6611 37ac 942F mov r25,r20
6612 37ae 832F mov r24,r19
6613 37b0 9093 0000 sts (LageKorrekturRoll)+1,r25
6614 37b4 8093 0000 sts LageKorrekturRoll,r24
6615 37b8 8091 0000 lds r24,MaxStickNick
6616 37bc 9091 0000 lds r25,(MaxStickNick)+1
6617 37c0 8134 cpi r24,65
6618 37c2 9105 cpc r25,__zero_reg__
6619 37c4 04F4 brge .L539
6620 37c6 8091 0000 lds r24,MaxStickRoll
6621 37ca 9091 0000 lds r25,(MaxStickRoll)+1
6622 37ce 8134 cpi r24,65
6623 37d0 9105 cpc r25,__zero_reg__
6624 37d2 04F4 brge .L539
6625 37d4 8091 0000 lds r24,EE_Parameter+4
6626 37d8 E82F mov r30,r24
6627 37da FF27 clr r31
6628 37dc EE0F add r30,r30
6629 37de FF1F adc r31,r31
6630 37e0 E050 subi r30,lo8(-(PPM_in))
6631 37e2 F040 sbci r31,hi8(-(PPM_in))
6632 37e4 8081 ld r24,Z
6633 37e6 9181 ldd r25,Z+1
6634 37e8 0190 ld __tmp_reg__,Z+
6635 37ea F081 ld r31,Z
6636 37ec E02D mov r30,__tmp_reg__
6637 37ee F7FF sbrs r31,7
6638 37f0 00C0 rjmp .L540
6639 37f2 F095 com r31
6640 37f4 E195 neg r30
6641 37f6 FF4F sbci r31,lo8(-1)
6642 .L540:
6643 37f8 7A97 sbiw r30,26
6644 37fa 04F0 brlt .L538
6645 .L539:
6646 37fc 8091 0000 lds r24,FromNaviCtrl_Value
6647 3800 8F3F cpi r24,lo8(-1)
6648 3802 01F4 brne .L538
6649 3804 8091 0000 lds r24,LageKorrekturNick
6650 3808 9091 0000 lds r25,(LageKorrekturNick)+1
6651 380c 97FD sbrc r25,7
6652 380e 0196 adiw r24,1
6653 .L541:
6654 3810 9595 asr r25
6655 3812 8795 ror r24
6656 3814 9093 0000 sts (LageKorrekturNick)+1,r25
6657 3818 8093 0000 sts LageKorrekturNick,r24
6658 381c 8091 0000 lds r24,LageKorrekturRoll
6659 3820 9091 0000 lds r25,(LageKorrekturRoll)+1
6660 3824 97FD sbrc r25,7
6661 3826 0196 adiw r24,1
6662 .L542:
6663 3828 9595 asr r25
6664 382a 8795 ror r24
6665 382c 9093 0000 sts (LageKorrekturRoll)+1,r25
6666 3830 8093 0000 sts LageKorrekturRoll,r24
6667 .L538:
6668 3834 8091 0000 lds r24,MittelIntegralNick2
6669 3838 9091 0000 lds r25,(MittelIntegralNick2)+1
6670 383c A091 0000 lds r26,(MittelIntegralNick2)+2
6671 3840 B091 0000 lds r27,(MittelIntegralNick2)+3
6672 3844 B7FF sbrs r27,7
6673 3846 00C0 rjmp .L543
6674 3848 8150 subi r24,lo8(-(255))
6675 384a 9F4F sbci r25,hi8(-(255))
6676 384c AF4F sbci r26,hlo8(-(255))
6677 384e BF4F sbci r27,hhi8(-(255))
6678 .L543:
6679 3850 892F mov r24,r25
6680 3852 9A2F mov r25,r26
6681 3854 AB2F mov r26,r27
6682 3856 BB27 clr r27
6683 3858 A7FD sbrc r26,7
6684 385a BA95 dec r27
6685 385c 8093 0000 sts MittelIntegralNick2,r24
6686 3860 9093 0000 sts (MittelIntegralNick2)+1,r25
6687 3864 A093 0000 sts (MittelIntegralNick2)+2,r26
6688 3868 B093 0000 sts (MittelIntegralNick2)+3,r27
6689 386c 8091 0000 lds r24,MittelIntegralRoll2
6690 3870 9091 0000 lds r25,(MittelIntegralRoll2)+1
6691 3874 A091 0000 lds r26,(MittelIntegralRoll2)+2
6692 3878 B091 0000 lds r27,(MittelIntegralRoll2)+3
6693 387c B7FF sbrs r27,7
6694 387e 00C0 rjmp .L544
6695 3880 8150 subi r24,lo8(-(255))
6696 3882 9F4F sbci r25,hi8(-(255))
6697 3884 AF4F sbci r26,hlo8(-(255))
6698 3886 BF4F sbci r27,hhi8(-(255))
6699 .L544:
6700 3888 892F mov r24,r25
6701 388a 9A2F mov r25,r26
6702 388c AB2F mov r26,r27
6703 388e BB27 clr r27
6704 3890 A7FD sbrc r26,7
6705 3892 BA95 dec r27
6706 3894 8093 0000 sts MittelIntegralRoll2,r24
6707 3898 9093 0000 sts (MittelIntegralRoll2)+1,r25
6708 389c A093 0000 sts (MittelIntegralRoll2)+2,r26
6709 38a0 B093 0000 sts (MittelIntegralRoll2)+3,r27
6710 38a4 8091 0000 lds r24,IntegralNick
6711 38a8 9091 0000 lds r25,(IntegralNick)+1
6712 38ac A091 0000 lds r26,(IntegralNick)+2
6713 38b0 B091 0000 lds r27,(IntegralNick)+3
6714 38b4 2F81 ldd r18,Y+7
6715 38b6 3885 ldd r19,Y+8
6716 38b8 4985 ldd r20,Y+9
6717 38ba 5A85 ldd r21,Y+10
6718 38bc 281B sub r18,r24
6719 38be 390B sbc r19,r25
6720 38c0 4A0B sbc r20,r26
6721 38c2 5B0B sbc r21,r27
6722 38c4 2093 0000 sts tmp_long.1,r18
6723 38c8 3093 0000 sts (tmp_long.1)+1,r19
6724 38cc 4093 0000 sts (tmp_long.1)+2,r20
6725 38d0 5093 0000 sts (tmp_long.1)+3,r21
6726 38d4 8091 0000 lds r24,IntegralRoll
6727 38d8 9091 0000 lds r25,(IntegralRoll)+1
6728 38dc A091 0000 lds r26,(IntegralRoll)+2
6729 38e0 B091 0000 lds r27,(IntegralRoll)+3
6730 38e4 EB84 ldd r14,Y+11
6731 38e6 FC84 ldd r15,Y+12
6732 38e8 0D85 ldd r16,Y+13
6733 38ea 1E85 ldd r17,Y+14
6734 38ec E81A sub r14,r24
6735 38ee F90A sbc r15,r25
6736 38f0 0A0B sbc r16,r26
6737 38f2 1B0B sbc r17,r27
6738 38f4 E092 0000 sts tmp_long2.2,r14
6739 38f8 F092 0000 sts (tmp_long2.2)+1,r15
6740 38fc 0093 0000 sts (tmp_long2.2)+2,r16
6741 3900 1093 0000 sts (tmp_long2.2)+3,r17
6742 3904 2093 0000 sts IntegralFehlerNick.3,r18
6743 3908 3093 0000 sts (IntegralFehlerNick.3)+1,r19
6744 390c 4093 0000 sts (IntegralFehlerNick.3)+2,r20
6745 3910 5093 0000 sts (IntegralFehlerNick.3)+3,r21
6746 3914 E092 0000 sts IntegralFehlerRoll.4,r14
6747 3918 F092 0000 sts (IntegralFehlerRoll.4)+1,r15
6748 391c 0093 0000 sts (IntegralFehlerRoll.4)+2,r16
6749 3920 1093 0000 sts (IntegralFehlerRoll.4)+3,r17
6750 3924 8091 0000 lds r24,Mess_IntegralNick2
6751 3928 9091 0000 lds r25,(Mess_IntegralNick2)+1
6752 392c A091 0000 lds r26,(Mess_IntegralNick2)+2
6753 3930 B091 0000 lds r27,(Mess_IntegralNick2)+3
6754 3934 821B sub r24,r18
6755 3936 930B sbc r25,r19
6756 3938 A40B sbc r26,r20
6757 393a B50B sbc r27,r21
6758 393c 8093 0000 sts Mess_IntegralNick2,r24
6759 3940 9093 0000 sts (Mess_IntegralNick2)+1,r25
6760 3944 A093 0000 sts (Mess_IntegralNick2)+2,r26
6761 3948 B093 0000 sts (Mess_IntegralNick2)+3,r27
6762 394c 8091 0000 lds r24,Mess_IntegralRoll2
6763 3950 9091 0000 lds r25,(Mess_IntegralRoll2)+1
6764 3954 A091 0000 lds r26,(Mess_IntegralRoll2)+2
6765 3958 B091 0000 lds r27,(Mess_IntegralRoll2)+3
6766 395c 8E19 sub r24,r14
6767 395e 9F09 sbc r25,r15
6768 3960 A00B sbc r26,r16
6769 3962 B10B sbc r27,r17
6770 3964 8093 0000 sts Mess_IntegralRoll2,r24
6771 3968 9093 0000 sts (Mess_IntegralRoll2)+1,r25
6772 396c A093 0000 sts (Mess_IntegralRoll2)+2,r26
6773 3970 B093 0000 sts (Mess_IntegralRoll2)+3,r27
6774 3974 8889 ldd r24,Y+16
6775 3976 8823 tst r24
6776 3978 01F0 breq .L545
6777 397a 2091 0000 lds r18,GierGyroFehler
6778 397e 3091 0000 lds r19,(GierGyroFehler)+1
6779 3982 2138 cpi r18,129
6780 3984 3105 cpc r19,__zero_reg__
6781 3986 04F0 brlt .L546
6782 3988 8091 0000 lds r24,AdNeutralGier
6783 398c 9091 0000 lds r25,(AdNeutralGier)+1
6784 3990 0196 adiw r24,1
6785 3992 9093 0000 sts (AdNeutralGier)+1,r25
6786 3996 8093 0000 sts AdNeutralGier,r24
6787 .L546:
6788 399a 2058 subi r18,lo8(-128)
6789 399c 3F4F sbci r19,hi8(-128)
6790 399e 04F4 brge .L545
6791 39a0 8091 0000 lds r24,AdNeutralGier
6792 39a4 9091 0000 lds r25,(AdNeutralGier)+1
6793 39a8 0197 sbiw r24,1
6794 39aa 9093 0000 sts (AdNeutralGier)+1,r25
6795 39ae 8093 0000 sts AdNeutralGier,r24
6796 .L545:
6797 39b2 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
6798 39b6 1092 0000 sts GierGyroFehler,__zero_reg__
6799 39ba 81E0 ldi r24,lo8(1)
6800 39bc 90E0 ldi r25,hi8(1)
6801 39be 9093 0000 sts (cnt.14)+1,r25
6802 39c2 8093 0000 sts cnt.14,r24
6803 39c6 E090 0000 lds r14,IntegralFehlerNick.3
6804 39ca F090 0000 lds r15,(IntegralFehlerNick.3)+1
6805 39ce 0091 0000 lds r16,(IntegralFehlerNick.3)+2
6806 39d2 1091 0000 lds r17,(IntegralFehlerNick.3)+3
6807 39d6 D801 movw r26,r16
6808 39d8 C701 movw r24,r14
6809 39da 17FF sbrs r17,7
6810 39dc 00C0 rjmp .L549
6811 39de 8827 clr r24
6812 39e0 9927 clr r25
6813 39e2 DC01 movw r26,r24
6814 39e4 8E19 sub r24,r14
6815 39e6 9F09 sbc r25,r15
6816 39e8 A00B sbc r26,r16
6817 39ea B10B sbc r27,r17
6818 .L549:
6819 39ec 8150 subi r24,lo8(513)
6820 39ee 9240 sbci r25,hi8(513)
6821 39f0 A040 sbci r26,hlo8(513)
6822 39f2 B040 sbci r27,hhi8(513)
6823 39f4 04F0 brlt .L548
6824 39f6 84E0 ldi r24,lo8(4)
6825 39f8 90E0 ldi r25,hi8(4)
6826 39fa 9093 0000 sts (cnt.14)+1,r25
6827 39fe 8093 0000 sts cnt.14,r24
6828 .L548:
6829 3a02 8091 0000 lds r24,MittelIntegralNick_Alt.19
6830 3a06 9091 0000 lds r25,(MittelIntegralNick_Alt.19)+1
6831 3a0a A091 0000 lds r26,(MittelIntegralNick_Alt.19)+2
6832 3a0e B091 0000 lds r27,(MittelIntegralNick_Alt.19)+3
6833 3a12 2091 0000 lds r18,MittelIntegralNick
6834 3a16 3091 0000 lds r19,(MittelIntegralNick)+1
6835 3a1a 4091 0000 lds r20,(MittelIntegralNick)+2
6836 3a1e 5091 0000 lds r21,(MittelIntegralNick)+3
6837 3a22 821B sub r24,r18
6838 3a24 930B sbc r25,r19
6839 3a26 A40B sbc r26,r20
6840 3a28 B50B sbc r27,r21
6841 3a2a 815E subi r24,lo8(-(19999))
6842 3a2c 914B sbci r25,hi8(-(19999))
6843 3a2e AF4F sbci r26,hlo8(-(19999))
6844 3a30 BF4F sbci r27,hhi8(-(19999))
6845 3a32 8F53 subi r24,lo8(39999)
6846 3a34 9C49 sbci r25,hi8(39999)
6847 3a36 A040 sbci r26,hlo8(39999)
6848 3a38 B040 sbci r27,hhi8(39999)
6849 3a3a 00F0 brlo .L551
6850 3a3c 8091 0000 lds r24,FromNaviCtrl_Value+1
6851 3a40 8931 cpi r24,lo8(25)
6852 3a42 04F4 brge .+2
6853 3a44 00C0 rjmp .L550
6854 .L551:
6855 3a46 21E0 ldi r18,lo8(4097)
6856 3a48 E216 cp r14,r18
6857 3a4a 20E1 ldi r18,hi8(4097)
6858 3a4c F206 cpc r15,r18
6859 3a4e 20E0 ldi r18,hlo8(4097)
6860 3a50 0207 cpc r16,r18
6861 3a52 20E0 ldi r18,hhi8(4097)
6862 3a54 1207 cpc r17,r18
6863 3a56 04F4 brge .+2
6864 3a58 00C0 rjmp .L552
6865 3a5a 8091 0000 lds r24,last_n_p.15
6866 3a5e 8823 tst r24
6867 3a60 01F4 brne .+2
6868 3a62 00C0 rjmp .L553
6869 3a64 D801 movw r26,r16
6870 3a66 C701 movw r24,r14
6871 3a68 17FF sbrs r17,7
6872 3a6a 00C0 rjmp .L554
6873 3a6c 8827 clr r24
6874 3a6e 9927 clr r25
6875 3a70 DC01 movw r26,r24
6876 3a72 8E19 sub r24,r14
6877 3a74 9F09 sbc r25,r15
6878 3a76 A00B sbc r26,r16
6879 3a78 B10B sbc r27,r17
6880 .L554:
6881 3a7a 9C01 movw r18,r24
6882 3a7c AD01 movw r20,r26
6883 3a7e B7FF sbrs r27,7
6884 3a80 00C0 rjmp .L555
6885 3a82 2150 subi r18,lo8(-(511))
6886 3a84 3E4F sbci r19,hi8(-(511))
6887 3a86 4F4F sbci r20,hlo8(-(511))
6888 3a88 5F4F sbci r21,hhi8(-(511))
6889 .L555:
6890 3a8a F9E0 ldi r31,9
6891 3a8c 5595 1: asr r21
6892 3a8e 4795 ror r20
6893 3a90 3795 ror r19
6894 3a92 2795 ror r18
6895 3a94 FA95 dec r31
6896 3a96 01F4 brne 1b
6897 3a98 8091 0000 lds r24,cnt.14
6898 3a9c 9091 0000 lds r25,(cnt.14)+1
6899 3aa0 820F add r24,r18
6900 3aa2 931F adc r25,r19
6901 3aa4 9093 0000 sts (cnt.14)+1,r25
6902 3aa8 8093 0000 sts cnt.14,r24
6903 3aac D801 movw r26,r16
6904 3aae C701 movw r24,r14
6905 3ab0 17FF sbrs r17,7
6906 3ab2 00C0 rjmp .L556
6907 3ab4 0796 adiw r24,7
6908 3ab6 A11D adc r26,__zero_reg__
6909 3ab8 B11D adc r27,__zero_reg__
6910 .L556:
6911 3aba E3E0 ldi r30,3
6912 3abc B595 1: asr r27
6913 3abe A795 ror r26
6914 3ac0 9795 ror r25
6915 3ac2 8795 ror r24
6916 3ac4 EA95 dec r30
6917 3ac6 01F4 brne 1b
6918 3ac8 8093 0000 sts ausgleichNick.10,r24
6919 3acc 9093 0000 sts (ausgleichNick.10)+1,r25
6920 3ad0 A093 0000 sts (ausgleichNick.10)+2,r26
6921 3ad4 B093 0000 sts (ausgleichNick.10)+3,r27
6922 3ad8 8958 subi r24,lo8(5001)
6923 3ada 9341 sbci r25,hi8(5001)
6924 3adc A040 sbci r26,hlo8(5001)
6925 3ade B040 sbci r27,hhi8(5001)
6926 3ae0 04F0 brlt .L557
6927 3ae2 88E8 ldi r24,lo8(5000)
6928 3ae4 93E1 ldi r25,hi8(5000)
6929 3ae6 A0E0 ldi r26,hlo8(5000)
6930 3ae8 B0E0 ldi r27,hhi8(5000)
6931 3aea 8093 0000 sts ausgleichNick.10,r24
6932 3aee 9093 0000 sts (ausgleichNick.10)+1,r25
6933 3af2 A093 0000 sts (ausgleichNick.10)+2,r26
6934 3af6 B093 0000 sts (ausgleichNick.10)+3,r27
6935 .L557:
6936 3afa 2091 0000 lds r18,ausgleichNick.10
6937 3afe 3091 0000 lds r19,(ausgleichNick.10)+1
6938 3b02 4091 0000 lds r20,(ausgleichNick.10)+2
6939 3b06 5091 0000 lds r21,(ausgleichNick.10)+3
6940 3b0a 57FF sbrs r21,7
6941 3b0c 00C0 rjmp .L558
6942 3b0e 2150 subi r18,lo8(-(255))
6943 3b10 3F4F sbci r19,hi8(-(255))
6944 3b12 4F4F sbci r20,hlo8(-(255))
6945 3b14 5F4F sbci r21,hhi8(-(255))
6946 .L558:
6947 3b16 232F mov r18,r19
6948 3b18 342F mov r19,r20
6949 3b1a 452F mov r20,r21
6950 3b1c 5527 clr r21
6951 3b1e 47FD sbrc r20,7
6952 3b20 5A95 dec r21
6953 3b22 8091 0000 lds r24,LageKorrekturNick
6954 3b26 9091 0000 lds r25,(LageKorrekturNick)+1
6955 3b2a 820F add r24,r18
6956 3b2c 931F adc r25,r19
6957 3b2e 9093 0000 sts (LageKorrekturNick)+1,r25
6958 3b32 8093 0000 sts LageKorrekturNick,r24
6959 3b36 00C0 rjmp .L560
6960 .L553:
6961 3b38 81E0 ldi r24,lo8(1)
6962 3b3a 8093 0000 sts last_n_p.15,r24
6963 3b3e 00C0 rjmp .L560
6964 .L552:
6965 3b40 1092 0000 sts last_n_p.15,__zero_reg__
6966 .L560:
6967 3b44 40E0 ldi r20,lo8(-4096)
6968 3b46 E416 cp r14,r20
6969 3b48 40EF ldi r20,hi8(-4096)
6970 3b4a F406 cpc r15,r20
6971 3b4c 4FEF ldi r20,hlo8(-4096)
6972 3b4e 0407 cpc r16,r20
6973 3b50 4FEF ldi r20,hhi8(-4096)
6974 3b52 1407 cpc r17,r20
6975 3b54 04F0 brlt .+2
6976 3b56 00C0 rjmp .L561
6977 3b58 8091 0000 lds r24,last_n_n.16
6978 3b5c 8823 tst r24
6979 3b5e 01F4 brne .+2
6980 3b60 00C0 rjmp .L562
6981 3b62 D801 movw r26,r16
6982 3b64 C701 movw r24,r14
6983 3b66 17FF sbrs r17,7
6984 3b68 00C0 rjmp .L563
6985 3b6a 8827 clr r24
6986 3b6c 9927 clr r25
6987 3b6e DC01 movw r26,r24
6988 3b70 8E19 sub r24,r14
6989 3b72 9F09 sbc r25,r15
6990 3b74 A00B sbc r26,r16
6991 3b76 B10B sbc r27,r17
6992 .L563:
6993 3b78 9C01 movw r18,r24
6994 3b7a AD01 movw r20,r26
6995 3b7c B7FF sbrs r27,7
6996 3b7e 00C0 rjmp .L564
6997 3b80 2150 subi r18,lo8(-(511))
6998 3b82 3E4F sbci r19,hi8(-(511))
6999 3b84 4F4F sbci r20,hlo8(-(511))
7000 3b86 5F4F sbci r21,hhi8(-(511))
7001 .L564:
7002 3b88 69E0 ldi r22,9
7003 3b8a 5595 1: asr r21
7004 3b8c 4795 ror r20
7005 3b8e 3795 ror r19
7006 3b90 2795 ror r18
7007 3b92 6A95 dec r22
7008 3b94 01F4 brne 1b
7009 3b96 8091 0000 lds r24,cnt.14
7010 3b9a 9091 0000 lds r25,(cnt.14)+1
7011 3b9e 820F add r24,r18
7012 3ba0 931F adc r25,r19
7013 3ba2 9093 0000 sts (cnt.14)+1,r25
7014 3ba6 8093 0000 sts cnt.14,r24
7015 3baa D801 movw r26,r16
7016 3bac C701 movw r24,r14
7017 3bae 17FF sbrs r17,7
7018 3bb0 00C0 rjmp .L565
7019 3bb2 0796 adiw r24,7
7020 3bb4 A11D adc r26,__zero_reg__
7021 3bb6 B11D adc r27,__zero_reg__
7022 .L565:
7023 3bb8 23E0 ldi r18,3
7024 3bba B595 1: asr r27
7025 3bbc A795 ror r26
7026 3bbe 9795 ror r25
7027 3bc0 8795 ror r24
7028 3bc2 2A95 dec r18
7029 3bc4 01F4 brne 1b
7030 3bc6 8093 0000 sts ausgleichNick.10,r24
7031 3bca 9093 0000 sts (ausgleichNick.10)+1,r25
7032 3bce A093 0000 sts (ausgleichNick.10)+2,r26
7033 3bd2 B093 0000 sts (ausgleichNick.10)+3,r27
7034 3bd6 8857 subi r24,lo8(-5000)
7035 3bd8 9C4E sbci r25,hi8(-5000)
7036 3bda AF4F sbci r26,hlo8(-5000)
7037 3bdc BF4F sbci r27,hhi8(-5000)
7038 3bde 04F4 brge .L566
7039 3be0 88E7 ldi r24,lo8(-5000)
7040 3be2 9CEE ldi r25,hi8(-5000)
7041 3be4 AFEF ldi r26,hlo8(-5000)
7042 3be6 BFEF ldi r27,hhi8(-5000)
7043 3be8 8093 0000 sts ausgleichNick.10,r24
7044 3bec 9093 0000 sts (ausgleichNick.10)+1,r25
7045 3bf0 A093 0000 sts (ausgleichNick.10)+2,r26
7046 3bf4 B093 0000 sts (ausgleichNick.10)+3,r27
7047 .L566:
7048 3bf8 2091 0000 lds r18,ausgleichNick.10
7049 3bfc 3091 0000 lds r19,(ausgleichNick.10)+1
7050 3c00 4091 0000 lds r20,(ausgleichNick.10)+2
7051 3c04 5091 0000 lds r21,(ausgleichNick.10)+3
7052 3c08 57FF sbrs r21,7
7053 3c0a 00C0 rjmp .L567
7054 3c0c 2150 subi r18,lo8(-(255))
7055 3c0e 3F4F sbci r19,hi8(-(255))
7056 3c10 4F4F sbci r20,hlo8(-(255))
7057 3c12 5F4F sbci r21,hhi8(-(255))
7058 .L567:
7059 3c14 232F mov r18,r19
7060 3c16 342F mov r19,r20
7061 3c18 452F mov r20,r21
7062 3c1a 5527 clr r21
7063 3c1c 47FD sbrc r20,7
7064 3c1e 5A95 dec r21
7065 3c20 8091 0000 lds r24,LageKorrekturNick
7066 3c24 9091 0000 lds r25,(LageKorrekturNick)+1
7067 3c28 820F add r24,r18
7068 3c2a 931F adc r25,r19
7069 3c2c 9093 0000 sts (LageKorrekturNick)+1,r25
7070 3c30 8093 0000 sts LageKorrekturNick,r24
7071 3c34 00C0 rjmp .L570
7072 .L562:
7073 3c36 81E0 ldi r24,lo8(1)
7074 3c38 8093 0000 sts last_n_n.16,r24
7075 3c3c 00C0 rjmp .L570
7076 .L561:
7077 3c3e 1092 0000 sts last_n_n.16,__zero_reg__
7078 3c42 00C0 rjmp .L570
7079 .L550:
7080 3c44 1092 0000 sts (cnt.14)+1,__zero_reg__
7081 3c48 1092 0000 sts cnt.14,__zero_reg__
7082 3c4c 84E6 ldi r24,lo8(100)
7083 3c4e 90E0 ldi r25,hi8(100)
7084 3c50 9093 0000 sts (KompassSignalSchlecht)+1,r25
7085 3c54 8093 0000 sts KompassSignalSchlecht,r24
7086 .L570:
7087 3c58 6889 ldd r22,Y+16
7088 3c5a 262F mov r18,r22
7089 3c5c 3327 clr r19
7090 3c5e 8091 0000 lds r24,cnt.14
7091 3c62 9091 0000 lds r25,(cnt.14)+1
7092 3c66 2817 cp r18,r24
7093 3c68 3907 cpc r19,r25
7094 3c6a 04F4 brge .L571
7095 3c6c 3093 0000 sts (cnt.14)+1,r19
7096 3c70 2093 0000 sts cnt.14,r18
7097 .L571:
7098 3c74 1091 0000 lds r17,FromNaviCtrl_Value+1
7099 3c78 1123 tst r17
7100 3c7a 01F0 breq .L572
7101 3c7c 212F mov r18,r17
7102 3c7e 3327 clr r19
7103 3c80 27FD sbrc r18,7
7104 3c82 3095 com r19
7105 3c84 8091 0000 lds r24,cnt.14
7106 3c88 9091 0000 lds r25,(cnt.14)+1
7107 3c8c 2817 cp r18,r24
7108 3c8e 3907 cpc r19,r25
7109 3c90 04F4 brge .L572
7110 3c92 3093 0000 sts (cnt.14)+1,r19
7111 3c96 2093 0000 sts cnt.14,r18
7112 .L572:
7113 3c9a 4091 0000 lds r20,IntegralFehlerNick.3
7114 3c9e 5091 0000 lds r21,(IntegralFehlerNick.3)+1
7115 3ca2 6091 0000 lds r22,(IntegralFehlerNick.3)+2
7116 3ca6 7091 0000 lds r23,(IntegralFehlerNick.3)+3
7117 3caa 4138 cpi r20,lo8(129)
7118 3cac 5105 cpc r21,__zero_reg__
7119 3cae 6105 cpc r22,__zero_reg__
7120 3cb0 7105 cpc r23,__zero_reg__
7121 3cb2 04F0 brlt .L574
7122 3cb4 8091 0000 lds r24,AdNeutralNick
7123 3cb8 9091 0000 lds r25,(AdNeutralNick)+1
7124 3cbc 2091 0000 lds r18,cnt.14
7125 3cc0 3091 0000 lds r19,(cnt.14)+1
7126 3cc4 820F add r24,r18
7127 3cc6 931F adc r25,r19
7128 3cc8 9093 0000 sts (AdNeutralNick)+1,r25
7129 3ccc 8093 0000 sts AdNeutralNick,r24
7130 .L574:
7131 3cd0 4058 subi r20,lo8(-128)
7132 3cd2 5F4F sbci r21,hi8(-128)
7133 3cd4 6F4F sbci r22,hlo8(-128)
7134 3cd6 7F4F sbci r23,hhi8(-128)
7135 3cd8 04F4 brge .L575
7136 3cda 8091 0000 lds r24,AdNeutralNick
7137 3cde 9091 0000 lds r25,(AdNeutralNick)+1
7138 3ce2 2091 0000 lds r18,cnt.14
7139 3ce6 3091 0000 lds r19,(cnt.14)+1
7140 3cea 821B sub r24,r18
7141 3cec 930B sbc r25,r19
7142 3cee 9093 0000 sts (AdNeutralNick)+1,r25
7143 3cf2 8093 0000 sts AdNeutralNick,r24
7144 .L575:
7145 3cf6 81E0 ldi r24,lo8(1)
7146 3cf8 90E0 ldi r25,hi8(1)
7147 3cfa 9093 0000 sts (cnt.14)+1,r25
7148 3cfe 8093 0000 sts cnt.14,r24
7149 3d02 C090 0000 lds r12,IntegralFehlerRoll.4
7150 3d06 D090 0000 lds r13,(IntegralFehlerRoll.4)+1
7151 3d0a E090 0000 lds r14,(IntegralFehlerRoll.4)+2
7152 3d0e F090 0000 lds r15,(IntegralFehlerRoll.4)+3
7153 3d12 D701 movw r26,r14
7154 3d14 C601 movw r24,r12
7155 3d16 F7FE sbrs r15,7
7156 3d18 00C0 rjmp .L577
7157 3d1a 8827 clr r24
7158 3d1c 9927 clr r25
7159 3d1e DC01 movw r26,r24
7160 3d20 8C19 sub r24,r12
7161 3d22 9D09 sbc r25,r13
7162 3d24 AE09 sbc r26,r14
7163 3d26 BF09 sbc r27,r15
7164 .L577:
7165 3d28 8150 subi r24,lo8(513)
7166 3d2a 9240 sbci r25,hi8(513)
7167 3d2c A040 sbci r26,hlo8(513)
7168 3d2e B040 sbci r27,hhi8(513)
7169 3d30 04F0 brlt .L576
7170 3d32 84E0 ldi r24,lo8(4)
7171 3d34 90E0 ldi r25,hi8(4)
7172 3d36 9093 0000 sts (cnt.14)+1,r25
7173 3d3a 8093 0000 sts cnt.14,r24
7174 .L576:
7175 3d3e 8091 0000 lds r24,MittelIntegralRoll_Alt.20
7176 3d42 9091 0000 lds r25,(MittelIntegralRoll_Alt.20)+1
7177 3d46 A091 0000 lds r26,(MittelIntegralRoll_Alt.20)+2
7178 3d4a B091 0000 lds r27,(MittelIntegralRoll_Alt.20)+3
7179 3d4e 2091 0000 lds r18,MittelIntegralRoll
7180 3d52 3091 0000 lds r19,(MittelIntegralRoll)+1
7181 3d56 4091 0000 lds r20,(MittelIntegralRoll)+2
7182 3d5a 5091 0000 lds r21,(MittelIntegralRoll)+3
7183 3d5e 821B sub r24,r18
7184 3d60 930B sbc r25,r19
7185 3d62 A40B sbc r26,r20
7186 3d64 B50B sbc r27,r21
7187 3d66 815E subi r24,lo8(-(19999))
7188 3d68 914B sbci r25,hi8(-(19999))
7189 3d6a AF4F sbci r26,hlo8(-(19999))
7190 3d6c BF4F sbci r27,hhi8(-(19999))
7191 3d6e 8F53 subi r24,lo8(39999)
7192 3d70 9C49 sbci r25,hi8(39999)
7193 3d72 A040 sbci r26,hlo8(39999)
7194 3d74 B040 sbci r27,hhi8(39999)
7195 3d76 00F0 brlo .L579
7196 3d78 1931 cpi r17,lo8(25)
7197 3d7a 04F4 brge .+2
7198 3d7c 00C0 rjmp .L578
7199 .L579:
7200 3d7e 01E0 ldi r16,lo8(4097)
7201 3d80 C016 cp r12,r16
7202 3d82 00E1 ldi r16,hi8(4097)
7203 3d84 D006 cpc r13,r16
7204 3d86 00E0 ldi r16,hlo8(4097)
7205 3d88 E006 cpc r14,r16
7206 3d8a 00E0 ldi r16,hhi8(4097)
7207 3d8c F006 cpc r15,r16
7208 3d8e 04F4 brge .+2
7209 3d90 00C0 rjmp .L580
7210 3d92 8091 0000 lds r24,last_r_p.17
7211 3d96 8823 tst r24
7212 3d98 01F4 brne .+2
7213 3d9a 00C0 rjmp .L581
7214 3d9c D701 movw r26,r14
7215 3d9e C601 movw r24,r12
7216 3da0 F7FE sbrs r15,7
7217 3da2 00C0 rjmp .L582
7218 3da4 8827 clr r24
7219 3da6 9927 clr r25
7220 3da8 DC01 movw r26,r24
7221 3daa 8C19 sub r24,r12
7222 3dac 9D09 sbc r25,r13
7223 3dae AE09 sbc r26,r14
7224 3db0 BF09 sbc r27,r15
7225 .L582:
7226 3db2 9C01 movw r18,r24
7227 3db4 AD01 movw r20,r26
7228 3db6 B7FF sbrs r27,7
7229 3db8 00C0 rjmp .L583
7230 3dba 2150 subi r18,lo8(-(511))
7231 3dbc 3E4F sbci r19,hi8(-(511))
7232 3dbe 4F4F sbci r20,hlo8(-(511))
7233 3dc0 5F4F sbci r21,hhi8(-(511))
7234 .L583:
7235 3dc2 09E0 ldi r16,9
7236 3dc4 5595 1: asr r21
7237 3dc6 4795 ror r20
7238 3dc8 3795 ror r19
7239 3dca 2795 ror r18
7240 3dcc 0A95 dec r16
7241 3dce 01F4 brne 1b
7242 3dd0 8091 0000 lds r24,cnt.14
7243 3dd4 9091 0000 lds r25,(cnt.14)+1
7244 3dd8 820F add r24,r18
7245 3dda 931F adc r25,r19
7246 3ddc 9093 0000 sts (cnt.14)+1,r25
7247 3de0 8093 0000 sts cnt.14,r24
7248 3de4 D701 movw r26,r14
7249 3de6 C601 movw r24,r12
7250 3de8 F7FE sbrs r15,7
7251 3dea 00C0 rjmp .L584
7252 3dec 0796 adiw r24,7
7253 3dee A11D adc r26,__zero_reg__
7254 3df0 B11D adc r27,__zero_reg__
7255 .L584:
7256 3df2 13E0 ldi r17,3
7257 3df4 B595 1: asr r27
7258 3df6 A795 ror r26
7259 3df8 9795 ror r25
7260 3dfa 8795 ror r24
7261 3dfc 1A95 dec r17
7262 3dfe 01F4 brne 1b
7263 3e00 8093 0000 sts ausgleichRoll.11,r24
7264 3e04 9093 0000 sts (ausgleichRoll.11)+1,r25
7265 3e08 A093 0000 sts (ausgleichRoll.11)+2,r26
7266 3e0c B093 0000 sts (ausgleichRoll.11)+3,r27
7267 3e10 8958 subi r24,lo8(5001)
7268 3e12 9341 sbci r25,hi8(5001)
7269 3e14 A040 sbci r26,hlo8(5001)
7270 3e16 B040 sbci r27,hhi8(5001)
7271 3e18 04F0 brlt .L585
7272 3e1a 88E8 ldi r24,lo8(5000)
7273 3e1c 93E1 ldi r25,hi8(5000)
7274 3e1e A0E0 ldi r26,hlo8(5000)
7275 3e20 B0E0 ldi r27,hhi8(5000)
7276 3e22 8093 0000 sts ausgleichRoll.11,r24
7277 3e26 9093 0000 sts (ausgleichRoll.11)+1,r25
7278 3e2a A093 0000 sts (ausgleichRoll.11)+2,r26
7279 3e2e B093 0000 sts (ausgleichRoll.11)+3,r27
7280 .L585:
7281 3e32 2091 0000 lds r18,ausgleichRoll.11
7282 3e36 3091 0000 lds r19,(ausgleichRoll.11)+1
7283 3e3a 4091 0000 lds r20,(ausgleichRoll.11)+2
7284 3e3e 5091 0000 lds r21,(ausgleichRoll.11)+3
7285 3e42 57FF sbrs r21,7
7286 3e44 00C0 rjmp .L586
7287 3e46 2150 subi r18,lo8(-(255))
7288 3e48 3F4F sbci r19,hi8(-(255))
7289 3e4a 4F4F sbci r20,hlo8(-(255))
7290 3e4c 5F4F sbci r21,hhi8(-(255))
7291 .L586:
7292 3e4e 232F mov r18,r19
7293 3e50 342F mov r19,r20
7294 3e52 452F mov r20,r21
7295 3e54 5527 clr r21
7296 3e56 47FD sbrc r20,7
7297 3e58 5A95 dec r21
7298 3e5a 8091 0000 lds r24,LageKorrekturRoll
7299 3e5e 9091 0000 lds r25,(LageKorrekturRoll)+1
7300 3e62 820F add r24,r18
7301 3e64 931F adc r25,r19
7302 3e66 9093 0000 sts (LageKorrekturRoll)+1,r25
7303 3e6a 8093 0000 sts LageKorrekturRoll,r24
7304 3e6e 00C0 rjmp .L588
7305 .L581:
7306 3e70 81E0 ldi r24,lo8(1)
7307 3e72 8093 0000 sts last_r_p.17,r24
7308 3e76 00C0 rjmp .L588
7309 .L580:
7310 3e78 1092 0000 sts last_r_p.17,__zero_reg__
7311 .L588:
7312 3e7c 20E0 ldi r18,lo8(-4096)
7313 3e7e C216 cp r12,r18
7314 3e80 20EF ldi r18,hi8(-4096)
7315 3e82 D206 cpc r13,r18
7316 3e84 2FEF ldi r18,hlo8(-4096)
7317 3e86 E206 cpc r14,r18
7318 3e88 2FEF ldi r18,hhi8(-4096)
7319 3e8a F206 cpc r15,r18
7320 3e8c 04F0 brlt .+2
7321 3e8e 00C0 rjmp .L589
7322 3e90 8091 0000 lds r24,last_r_n.18
7323 3e94 8823 tst r24
7324 3e96 01F4 brne .+2
7325 3e98 00C0 rjmp .L590
7326 3e9a D701 movw r26,r14
7327 3e9c C601 movw r24,r12
7328 3e9e F7FE sbrs r15,7
7329 3ea0 00C0 rjmp .L591
7330 3ea2 8827 clr r24
7331 3ea4 9927 clr r25
7332 3ea6 DC01 movw r26,r24
7333 3ea8 8C19 sub r24,r12
7334 3eaa 9D09 sbc r25,r13
7335 3eac AE09 sbc r26,r14
7336 3eae BF09 sbc r27,r15
7337 .L591:
7338 3eb0 9C01 movw r18,r24
7339 3eb2 AD01 movw r20,r26
7340 3eb4 B7FF sbrs r27,7
7341 3eb6 00C0 rjmp .L592
7342 3eb8 2150 subi r18,lo8(-(511))
7343 3eba 3E4F sbci r19,hi8(-(511))
7344 3ebc 4F4F sbci r20,hlo8(-(511))
7345 3ebe 5F4F sbci r21,hhi8(-(511))
7346 .L592:
7347 3ec0 E9E0 ldi r30,9
7348 3ec2 5595 1: asr r21
7349 3ec4 4795 ror r20
7350 3ec6 3795 ror r19
7351 3ec8 2795 ror r18
7352 3eca EA95 dec r30
7353 3ecc 01F4 brne 1b
7354 3ece 8091 0000 lds r24,cnt.14
7355 3ed2 9091 0000 lds r25,(cnt.14)+1
7356 3ed6 820F add r24,r18
7357 3ed8 931F adc r25,r19
7358 3eda 9093 0000 sts (cnt.14)+1,r25
7359 3ede 8093 0000 sts cnt.14,r24
7360 3ee2 D701 movw r26,r14
7361 3ee4 C601 movw r24,r12
7362 3ee6 F7FE sbrs r15,7
7363 3ee8 00C0 rjmp .L593
7364 3eea 0796 adiw r24,7
7365 3eec A11D adc r26,__zero_reg__
7366 3eee B11D adc r27,__zero_reg__
7367 .L593:
7368 3ef0 73E0 ldi r23,3
7369 3ef2 B595 1: asr r27
7370 3ef4 A795 ror r26
7371 3ef6 9795 ror r25
7372 3ef8 8795 ror r24
7373 3efa 7A95 dec r23
7374 3efc 01F4 brne 1b
7375 3efe 8093 0000 sts ausgleichRoll.11,r24
7376 3f02 9093 0000 sts (ausgleichRoll.11)+1,r25
7377 3f06 A093 0000 sts (ausgleichRoll.11)+2,r26
7378 3f0a B093 0000 sts (ausgleichRoll.11)+3,r27
7379 3f0e 8857 subi r24,lo8(-5000)
7380 3f10 9C4E sbci r25,hi8(-5000)
7381 3f12 AF4F sbci r26,hlo8(-5000)
7382 3f14 BF4F sbci r27,hhi8(-5000)
7383 3f16 04F4 brge .L594
7384 3f18 88E7 ldi r24,lo8(-5000)
7385 3f1a 9CEE ldi r25,hi8(-5000)
7386 3f1c AFEF ldi r26,hlo8(-5000)
7387 3f1e BFEF ldi r27,hhi8(-5000)
7388 3f20 8093 0000 sts ausgleichRoll.11,r24
7389 3f24 9093 0000 sts (ausgleichRoll.11)+1,r25
7390 3f28 A093 0000 sts (ausgleichRoll.11)+2,r26
7391 3f2c B093 0000 sts (ausgleichRoll.11)+3,r27
7392 .L594:
7393 3f30 2091 0000 lds r18,ausgleichRoll.11
7394 3f34 3091 0000 lds r19,(ausgleichRoll.11)+1
7395 3f38 4091 0000 lds r20,(ausgleichRoll.11)+2
7396 3f3c 5091 0000 lds r21,(ausgleichRoll.11)+3
7397 3f40 57FF sbrs r21,7
7398 3f42 00C0 rjmp .L595
7399 3f44 2150 subi r18,lo8(-(255))
7400 3f46 3F4F sbci r19,hi8(-(255))
7401 3f48 4F4F sbci r20,hlo8(-(255))
7402 3f4a 5F4F sbci r21,hhi8(-(255))
7403 .L595:
7404 3f4c 232F mov r18,r19
7405 3f4e 342F mov r19,r20
7406 3f50 452F mov r20,r21
7407 3f52 5527 clr r21
7408 3f54 47FD sbrc r20,7
7409 3f56 5A95 dec r21
7410 3f58 8091 0000 lds r24,LageKorrekturRoll
7411 3f5c 9091 0000 lds r25,(LageKorrekturRoll)+1
7412 3f60 820F add r24,r18
7413 3f62 931F adc r25,r19
7414 3f64 9093 0000 sts (LageKorrekturRoll)+1,r25
7415 3f68 8093 0000 sts LageKorrekturRoll,r24
7416 3f6c 00C0 rjmp .L598
7417 .L590:
7418 3f6e 81E0 ldi r24,lo8(1)
7419 3f70 8093 0000 sts last_r_n.18,r24
7420 3f74 00C0 rjmp .L598
7421 .L589:
7422 3f76 1092 0000 sts last_r_n.18,__zero_reg__
7423 3f7a 00C0 rjmp .L598
7424 .L578:
7425 3f7c 1092 0000 sts (cnt.14)+1,__zero_reg__
7426 3f80 1092 0000 sts cnt.14,__zero_reg__
7427 3f84 84E6 ldi r24,lo8(100)
7428 3f86 90E0 ldi r25,hi8(100)
7429 3f88 9093 0000 sts (KompassSignalSchlecht)+1,r25
7430 3f8c 8093 0000 sts KompassSignalSchlecht,r24
7431 .L598:
7432 3f90 4889 ldd r20,Y+16
7433 3f92 242F mov r18,r20
7434 3f94 3327 clr r19
7435 3f96 8091 0000 lds r24,cnt.14
7436 3f9a 9091 0000 lds r25,(cnt.14)+1
7437 3f9e 2817 cp r18,r24
7438 3fa0 3907 cpc r19,r25
7439 3fa2 04F4 brge .L599
7440 3fa4 3093 0000 sts (cnt.14)+1,r19
7441 3fa8 2093 0000 sts cnt.14,r18
7442 .L599:
7443 3fac 8091 0000 lds r24,FromNaviCtrl_Value+1
7444 3fb0 8823 tst r24
7445 3fb2 01F0 breq .L600
7446 3fb4 282F mov r18,r24
7447 3fb6 3327 clr r19
7448 3fb8 27FD sbrc r18,7
7449 3fba 3095 com r19
7450 3fbc 8091 0000 lds r24,cnt.14
7451 3fc0 9091 0000 lds r25,(cnt.14)+1
7452 3fc4 2817 cp r18,r24
7453 3fc6 3907 cpc r19,r25
7454 3fc8 04F4 brge .L600
7455 3fca 3093 0000 sts (cnt.14)+1,r19
7456 3fce 2093 0000 sts cnt.14,r18
7457 .L600:
7458 3fd2 4091 0000 lds r20,IntegralFehlerRoll.4
7459 3fd6 5091 0000 lds r21,(IntegralFehlerRoll.4)+1
7460 3fda 6091 0000 lds r22,(IntegralFehlerRoll.4)+2
7461 3fde 7091 0000 lds r23,(IntegralFehlerRoll.4)+3
7462 3fe2 4138 cpi r20,lo8(129)
7463 3fe4 5105 cpc r21,__zero_reg__
7464 3fe6 6105 cpc r22,__zero_reg__
7465 3fe8 7105 cpc r23,__zero_reg__
7466 3fea 04F0 brlt .L602
7467 3fec 8091 0000 lds r24,AdNeutralRoll
7468 3ff0 9091 0000 lds r25,(AdNeutralRoll)+1
7469 3ff4 2091 0000 lds r18,cnt.14
7470 3ff8 3091 0000 lds r19,(cnt.14)+1
7471 3ffc 820F add r24,r18
7472 3ffe 931F adc r25,r19
7473 4000 9093 0000 sts (AdNeutralRoll)+1,r25
7474 4004 8093 0000 sts AdNeutralRoll,r24
7475 .L602:
7476 4008 4058 subi r20,lo8(-128)
7477 400a 5F4F sbci r21,hi8(-128)
7478 400c 6F4F sbci r22,hlo8(-128)
7479 400e 7F4F sbci r23,hhi8(-128)
7480 4010 04F4 brge .L604
7481 4012 8091 0000 lds r24,AdNeutralRoll
7482 4016 9091 0000 lds r25,(AdNeutralRoll)+1
7483 401a 2091 0000 lds r18,cnt.14
7484 401e 3091 0000 lds r19,(cnt.14)+1
7485 4022 821B sub r24,r18
7486 4024 930B sbc r25,r19
7487 4026 9093 0000 sts (AdNeutralRoll)+1,r25
7488 402a 8093 0000 sts AdNeutralRoll,r24
7489 402e 00C0 rjmp .L604
7490 .L530:
7491 4030 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7492 4034 1092 0000 sts LageKorrekturRoll,__zero_reg__
7493 4038 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7494 403c 1092 0000 sts LageKorrekturNick,__zero_reg__
7495 4040 1092 0000 sts TrichterFlug,__zero_reg__
7496 .L604:
7497 4044 8091 0000 lds r24,IntegralFaktor
7498 4048 8823 tst r24
7499 404a 01F4 brne .L605
7500 404c 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7501 4050 1092 0000 sts LageKorrekturRoll,__zero_reg__
7502 4054 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7503 4058 1092 0000 sts LageKorrekturNick,__zero_reg__
7504 .L605:
7505 405c 8091 0000 lds r24,MittelIntegralNick
7506 4060 9091 0000 lds r25,(MittelIntegralNick)+1
7507 4064 A091 0000 lds r26,(MittelIntegralNick)+2
7508 4068 B091 0000 lds r27,(MittelIntegralNick)+3
7509 406c 8093 0000 sts MittelIntegralNick_Alt.19,r24
7510 4070 9093 0000 sts (MittelIntegralNick_Alt.19)+1,r25
7511 4074 A093 0000 sts (MittelIntegralNick_Alt.19)+2,r26
7512 4078 B093 0000 sts (MittelIntegralNick_Alt.19)+3,r27
7513 407c 8091 0000 lds r24,MittelIntegralRoll
7514 4080 9091 0000 lds r25,(MittelIntegralRoll)+1
7515 4084 A091 0000 lds r26,(MittelIntegralRoll)+2
7516 4088 B091 0000 lds r27,(MittelIntegralRoll)+3
7517 408c 8093 0000 sts MittelIntegralRoll_Alt.20,r24
7518 4090 9093 0000 sts (MittelIntegralRoll_Alt.20)+1,r25
7519 4094 A093 0000 sts (MittelIntegralRoll_Alt.20)+2,r26
7520 4098 B093 0000 sts (MittelIntegralRoll_Alt.20)+3,r27
7521 409c 1092 0000 sts IntegralAccNick,__zero_reg__
7522 40a0 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
7523 40a4 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
7524 40a8 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
7525 40ac 1092 0000 sts IntegralAccRoll,__zero_reg__
7526 40b0 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
7527 40b4 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
7528 40b8 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
7529 40bc 1092 0000 sts IntegralAccZ,__zero_reg__
7530 40c0 1092 0000 sts (IntegralAccZ)+1,__zero_reg__
7531 40c4 1092 0000 sts (IntegralAccZ)+2,__zero_reg__
7532 40c8 1092 0000 sts (IntegralAccZ)+3,__zero_reg__
7533 40cc 1092 0000 sts MittelIntegralNick,__zero_reg__
7534 40d0 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
7535 40d4 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
7536 40d8 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
7537 40dc 1092 0000 sts MittelIntegralRoll,__zero_reg__
7538 40e0 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
7539 40e4 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
7540 40e8 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
7541 40ec 1092 0000 sts MittelIntegralNick2,__zero_reg__
7542 40f0 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
7543 40f4 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
7544 40f8 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
7545 40fc 1092 0000 sts MittelIntegralRoll2,__zero_reg__
7546 4100 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
7547 4104 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
7548 4108 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
7549 410c 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
7550 4110 1092 0000 sts ZaehlMessungen,__zero_reg__
7551 .L529:
7552 4114 E090 0000 lds r14,StickGier
7553 4118 F090 0000 lds r15,(StickGier)+1
7554 411c C701 movw r24,r14
7555 411e F7FE sbrs r15,7
7556 4120 00C0 rjmp .L607
7557 4122 8827 clr r24
7558 4124 9927 clr r25
7559 4126 8E19 sub r24,r14
7560 4128 9F09 sbc r25,r15
7561 .L607:
7562 412a 0497 sbiw r24,4
7563 412c 04F0 brlt .L606
7564 412e 8091 0000 lds r24,Parameter_GlobalConfig
7565 4132 84FD sbrc r24,4
7566 4134 00C0 rjmp .L606
7567 4136 82E3 ldi r24,lo8(50)
7568 4138 8093 0000 sts NeueKompassRichtungMerken,r24
7569 .L606:
7570 413c 1091 0000 lds r17,EE_Parameter+25
7571 4140 A12E mov r10,r17
7572 4142 BB24 clr r11
7573 4144 CC24 clr r12
7574 4146 DD24 clr r13
7575 4148 B701 movw r22,r14
7576 414a 8827 clr r24
7577 414c 77FD sbrc r23,7
7578 414e 8095 com r24
7579 4150 982F mov r25,r24
7580 4152 9701 movw r18,r14
7581 4154 F7FE sbrs r15,7
7582 4156 00C0 rjmp .L609
7583 4158 2227 clr r18
7584 415a 3327 clr r19
7585 415c 2E19 sub r18,r14
7586 415e 3F09 sbc r19,r15
7587 .L609:
7588 4160 4427 clr r20
7589 4162 37FD sbrc r19,7
7590 4164 4095 com r20
7591 4166 542F mov r21,r20
7592 4168 0E94 0000 call __mulsi3
7593 416c 9B01 movw r18,r22
7594 416e AC01 movw r20,r24
7595 4170 C601 movw r24,r12
7596 4172 B501 movw r22,r10
7597 4174 0E94 0000 call __mulsi3
7598 4178 97FF sbrs r25,7
7599 417a 00C0 rjmp .L610
7600 417c 6150 subi r22,lo8(-(511))
7601 417e 7E4F sbci r23,hi8(-(511))
7602 4180 8F4F sbci r24,hlo8(-(511))
7603 4182 9F4F sbci r25,hhi8(-(511))
7604 .L610:
7605 4184 59E0 ldi r21,9
7606 4186 9595 1: asr r25
7607 4188 8795 ror r24
7608 418a 7795 ror r23
7609 418c 6795 ror r22
7610 418e 5A95 dec r21
7611 4190 01F4 brne 1b
7612 4192 9B01 movw r18,r22
7613 4194 812F mov r24,r17
7614 4196 9927 clr r25
7615 4198 8E9D mul r24,r14
7616 419a D001 movw r26,r0
7617 419c 8F9D mul r24,r15
7618 419e B00D add r27,r0
7619 41a0 9E9D mul r25,r14
7620 41a2 B00D add r27,r0
7621 41a4 1124 clr r1
7622 41a6 CD01 movw r24,r26
7623 41a8 B7FD sbrc r27,7
7624 41aa 0396 adiw r24,3
7625 .L611:
7626 41ac 9595 asr r25
7627 41ae 8795 ror r24
7628 41b0 9595 asr r25
7629 41b2 8795 ror r24
7630 41b4 280F add r18,r24
7631 41b6 391F adc r19,r25
7632 41b8 8091 0000 lds r24,CompassGierSetpoint
7633 41bc 9091 0000 lds r25,(CompassGierSetpoint)+1
7634 41c0 280F add r18,r24
7635 41c2 391F adc r19,r25
7636 41c4 4427 clr r20
7637 41c6 37FD sbrc r19,7
7638 41c8 4095 com r20
7639 41ca 542F mov r21,r20
7640 41cc 2093 0000 sts sollGier.0,r18
7641 41d0 3093 0000 sts (sollGier.0)+1,r19
7642 41d4 4093 0000 sts (sollGier.0)+2,r20
7643 41d8 5093 0000 sts (sollGier.0)+3,r21
7644 41dc 8091 0000 lds r24,Mess_Integral_Gier
7645 41e0 9091 0000 lds r25,(Mess_Integral_Gier)+1
7646 41e4 A091 0000 lds r26,(Mess_Integral_Gier)+2
7647 41e8 B091 0000 lds r27,(Mess_Integral_Gier)+3
7648 41ec 821B sub r24,r18
7649 41ee 930B sbc r25,r19
7650 41f0 A40B sbc r26,r20
7651 41f2 B50B sbc r27,r21
7652 41f4 8093 0000 sts Mess_Integral_Gier,r24
7653 41f8 9093 0000 sts (Mess_Integral_Gier)+1,r25
7654 41fc A093 0000 sts (Mess_Integral_Gier)+2,r26
7655 4200 B093 0000 sts (Mess_Integral_Gier)+3,r27
7656 4204 8155 subi r24,lo8(50001)
7657 4206 934C sbci r25,hi8(50001)
7658 4208 A040 sbci r26,hlo8(50001)
7659 420a B040 sbci r27,hhi8(50001)
7660 420c 04F0 brlt .L612
7661 420e 80E5 ldi r24,lo8(50000)
7662 4210 93EC ldi r25,hi8(50000)
7663 4212 A0E0 ldi r26,hlo8(50000)
7664 4214 B0E0 ldi r27,hhi8(50000)
7665 4216 8093 0000 sts Mess_Integral_Gier,r24
7666 421a 9093 0000 sts (Mess_Integral_Gier)+1,r25
7667 421e A093 0000 sts (Mess_Integral_Gier)+2,r26
7668 4222 B093 0000 sts (Mess_Integral_Gier)+3,r27
7669 .L612:
7670 4226 8091 0000 lds r24,Mess_Integral_Gier
7671 422a 9091 0000 lds r25,(Mess_Integral_Gier)+1
7672 422e A091 0000 lds r26,(Mess_Integral_Gier)+2
7673 4232 B091 0000 lds r27,(Mess_Integral_Gier)+3
7674 4236 805B subi r24,lo8(-50000)
7675 4238 9C43 sbci r25,hi8(-50000)
7676 423a AF4F sbci r26,hlo8(-50000)
7677 423c BF4F sbci r27,hhi8(-50000)
7678 423e 04F4 brge .L613
7679 4240 80EB ldi r24,lo8(-50000)
7680 4242 9CE3 ldi r25,hi8(-50000)
7681 4244 AFEF ldi r26,hlo8(-50000)
7682 4246 BFEF ldi r27,hhi8(-50000)
7683 4248 8093 0000 sts Mess_Integral_Gier,r24
7684 424c 9093 0000 sts (Mess_Integral_Gier)+1,r25
7685 4250 A093 0000 sts (Mess_Integral_Gier)+2,r26
7686 4254 B093 0000 sts (Mess_Integral_Gier)+3,r27
7687 .L613:
7688 4258 0091 0000 lds r16,KompassValue
7689 425c 1091 0000 lds r17,(KompassValue)+1
7690 4260 17FD sbrc r17,7
7691 4262 00C0 rjmp .L614
7692 4264 8091 0000 lds r24,Parameter_GlobalConfig
7693 4268 83FF sbrs r24,3
7694 426a 00C0 rjmp .L614
7695 426c 8091 0000 lds r24,CalculateCompassTimer
7696 4270 8150 subi r24,lo8(-(-1))
7697 4272 8093 0000 sts CalculateCompassTimer,r24
7698 4276 8823 tst r24
7699 4278 01F0 breq .+2
7700 427a 00C0 rjmp .L631
7701 427c 8DE0 ldi r24,lo8(13)
7702 427e 8093 0000 sts CalculateCompassTimer,r24
7703 4282 8091 0000 lds r24,IntegralNick
7704 4286 9091 0000 lds r25,(IntegralNick)+1
7705 428a A091 0000 lds r26,(IntegralNick)+2
7706 428e B091 0000 lds r27,(IntegralNick)+3
7707 4292 B7FF sbrs r27,7
7708 4294 00C0 rjmp .L616
7709 4296 8150 subi r24,lo8(-(511))
7710 4298 9E4F sbci r25,hi8(-(511))
7711 429a AF4F sbci r26,hlo8(-(511))
7712 429c BF4F sbci r27,hhi8(-(511))
7713 .L616:
7714 429e 39E0 ldi r19,9
7715 42a0 B595 1: asr r27
7716 42a2 A795 ror r26
7717 42a4 9795 ror r25
7718 42a6 8795 ror r24
7719 42a8 3A95 dec r19
7720 42aa 01F4 brne 1b
7721 42ac 7C01 movw r14,r24
7722 42ae 97FF sbrs r25,7
7723 42b0 00C0 rjmp .L617
7724 42b2 F094 com r15
7725 42b4 E194 neg r14
7726 42b6 F108 sbc r15,__zero_reg__
7727 42b8 F394 inc r15
7728 .L617:
7729 42ba 8091 0000 lds r24,IntegralRoll
7730 42be 9091 0000 lds r25,(IntegralRoll)+1
7731 42c2 A091 0000 lds r26,(IntegralRoll)+2
7732 42c6 B091 0000 lds r27,(IntegralRoll)+3
7733 42ca B7FF sbrs r27,7
7734 42cc 00C0 rjmp .L618
7735 42ce 8150 subi r24,lo8(-(511))
7736 42d0 9E4F sbci r25,hi8(-(511))
7737 42d2 AF4F sbci r26,hlo8(-(511))
7738 42d4 BF4F sbci r27,hhi8(-(511))
7739 .L618:
7740 42d6 29E0 ldi r18,9
7741 42d8 B595 1: asr r27
7742 42da A795 ror r26
7743 42dc 9795 ror r25
7744 42de 8795 ror r24
7745 42e0 2A95 dec r18
7746 42e2 01F4 brne 1b
7747 42e4 9C01 movw r18,r24
7748 42e6 97FF sbrs r25,7
7749 42e8 00C0 rjmp .L619
7750 42ea 3095 com r19
7751 42ec 2195 neg r18
7752 42ee 3F4F sbci r19,lo8(-1)
7753 .L619:
7754 42f0 E216 cp r14,r18
7755 42f2 F306 cpc r15,r19
7756 42f4 04F4 brge .L620
7757 42f6 7901 movw r14,r18
7758 .L620:
7759 42f8 B701 movw r22,r14
7760 42fa F7FE sbrs r15,7
7761 42fc 00C0 rjmp .L621
7762 42fe 695F subi r22,lo8(-(7))
7763 4300 7F4F sbci r23,hi8(-(7))
7764 .L621:
7765 4302 2B01 movw r4,r22
7766 4304 A3E0 ldi r26,3
7767 4306 5594 1: asr r5
7768 4308 4794 ror r4
7769 430a AA95 dec r26
7770 430c 01F4 brne 1b
7771 430e 22E0 ldi r18,lo8(2)
7772 4310 30E0 ldi r19,hi8(2)
7773 4312 420E add r4,r18
7774 4314 531E adc r5,r19
7775 4316 6090 0000 lds r6,ErsatzKompass
7776 431a 7090 0000 lds r7,(ErsatzKompass)+1
7777 431e 8090 0000 lds r8,(ErsatzKompass)+2
7778 4322 9090 0000 lds r9,(ErsatzKompass)+3
7779 4326 2091 0000 lds r18,GIER_GRAD_FAKTOR
7780 432a 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
7781 432e 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
7782 4332 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
7783 4336 C401 movw r24,r8
7784 4338 B301 movw r22,r6
7785 433a 0E94 0000 call __divmodsi4
7786 433e 5901 movw r10,r18
7787 4340 6A01 movw r12,r20
7788 4342 3093 0000 sts (ErsatzKompassInGrad)+1,r19
7789 4346 2093 0000 sts ErsatzKompassInGrad,r18
7790 434a 021B sub r16,r18
7791 434c 130B sbc r17,r19
7792 434e C801 movw r24,r16
7793 4350 845E subi r24,lo8(-(540))
7794 4352 9D4F sbci r25,hi8(-(540))
7795 4354 68E6 ldi r22,lo8(360)
7796 4356 71E0 ldi r23,hi8(360)
7797 4358 0E94 0000 call __divmodhi4
7798 435c 9C01 movw r18,r24
7799 435e 245B subi r18,lo8(-(-180))
7800 4360 3040 sbci r19,hi8(-(-180))
7801 4362 8091 0000 lds r24,KompassSignalSchlecht
7802 4366 9091 0000 lds r25,(KompassSignalSchlecht)+1
7803 436a 0097 sbiw r24,0
7804 436c 01F0 breq .L622
7805 436e 0197 sbiw r24,1
7806 4370 9093 0000 sts (KompassSignalSchlecht)+1,r25
7807 4374 8093 0000 sts KompassSignalSchlecht,r24
7808 4378 00C0 rjmp .L623
7809 .L622:
7810 437a 49E1 ldi r20,lo8(25)
7811 437c E416 cp r14,r20
7812 437e F104 cpc r15,__zero_reg__
7813 4380 04F4 brge .L623
7814 4382 8091 0000 lds r24,GierGyroFehler
7815 4386 9091 0000 lds r25,(GierGyroFehler)+1
7816 438a 820F add r24,r18
7817 438c 931F adc r25,r19
7818 438e 9093 0000 sts (GierGyroFehler)+1,r25
7819 4392 8093 0000 sts GierGyroFehler,r24
7820 4396 8091 0000 lds r24,NeueKompassRichtungMerken
7821 439a 8823 tst r24
7822 439c 01F0 breq .L623
7823 439e 8150 subi r24,lo8(-(-1))
7824 43a0 8093 0000 sts NeueKompassRichtungMerken,r24
7825 43a4 8823 tst r24
7826 43a6 01F4 brne .L623
7827 43a8 B092 0000 sts (KompassSollWert)+1,r11
7828 43ac A092 0000 sts KompassSollWert,r10
7829 .L623:
7830 43b0 8091 0000 lds r24,KompassSignalSchlecht
7831 43b4 9091 0000 lds r25,(KompassSignalSchlecht)+1
7832 43b8 892B or r24,r25
7833 43ba 01F4 brne .L627
7834 43bc 8091 0000 lds r24,KompassFusion
7835 43c0 9927 clr r25
7836 43c2 289F mul r18,r24
7837 43c4 B001 movw r22,r0
7838 43c6 299F mul r18,r25
7839 43c8 700D add r23,r0
7840 43ca 389F mul r19,r24
7841 43cc 700D add r23,r0
7842 43ce 1124 clr r1
7843 43d0 CB01 movw r24,r22
7844 43d2 B201 movw r22,r4
7845 43d4 0E94 0000 call __divmodhi4
7846 43d8 CB01 movw r24,r22
7847 43da AA27 clr r26
7848 43dc 97FD sbrc r25,7
7849 43de A095 com r26
7850 43e0 BA2F mov r27,r26
7851 43e2 680E add r6,r24
7852 43e4 791E adc r7,r25
7853 43e6 8A1E adc r8,r26
7854 43e8 9B1E adc r9,r27
7855 43ea 6092 0000 sts ErsatzKompass,r6
7856 43ee 7092 0000 sts (ErsatzKompass)+1,r7
7857 43f2 8092 0000 sts (ErsatzKompass)+2,r8
7858 43f6 9092 0000 sts (ErsatzKompass)+3,r9
7859 .L627:
7860 43fa 8091 0000 lds r24,NeueKompassRichtungMerken
7861 43fe 8823 tst r24
7862 4400 01F4 brne .L614
7863 4402 8091 0000 lds r24,KompassSollWert
7864 4406 9091 0000 lds r25,(KompassSollWert)+1
7865 440a 2091 0000 lds r18,ErsatzKompassInGrad
7866 440e 3091 0000 lds r19,(ErsatzKompassInGrad)+1
7867 4412 821B sub r24,r18
7868 4414 930B sbc r25,r19
7869 4416 845E subi r24,lo8(-(540))
7870 4418 9D4F sbci r25,hi8(-(540))
7871 441a 68E6 ldi r22,lo8(360)
7872 441c 71E0 ldi r23,hi8(360)
7873 441e 0E94 0000 call __divmodhi4
7874 4422 9C01 movw r18,r24
7875 4424 245B subi r18,lo8(-(-180))
7876 4426 3040 sbci r19,hi8(-(-180))
7877 4428 8091 0000 lds r24,Parameter_KompassWirkung
7878 442c 8695 lsr r24
7879 442e 9927 clr r25
7880 4430 289F mul r18,r24
7881 4432 D001 movw r26,r0
7882 4434 299F mul r18,r25
7883 4436 B00D add r27,r0
7884 4438 389F mul r19,r24
7885 443a B00D add r27,r0
7886 443c 1124 clr r1
7887 443e 9D01 movw r18,r26
7888 4440 B7FF sbrs r27,7
7889 4442 00C0 rjmp .L629
7890 4444 215F subi r18,lo8(-(15))
7891 4446 3F4F sbci r19,hi8(-(15))
7892 .L629:
7893 4448 F4E0 ldi r31,4
7894 444a 3595 1: asr r19
7895 444c 2795 ror r18
7896 444e FA95 dec r31
7897 4450 01F4 brne 1b
7898 4452 3093 0000 sts (CompassGierSetpoint)+1,r19
7899 4456 2093 0000 sts CompassGierSetpoint,r18
7900 445a 00C0 rjmp .L631
7901 .L614:
7902 445c 1092 0000 sts (CompassGierSetpoint)+1,__zero_reg__
7903 4460 1092 0000 sts CompassGierSetpoint,__zero_reg__
7904 .L631:
7905 4464 8091 0000 lds r24,TrichterFlug
7906 4468 8823 tst r24
7907 446a 01F0 breq .L632
7908 446c 1092 0000 sts SummeRoll,__zero_reg__
7909 4470 1092 0000 sts (SummeRoll)+1,__zero_reg__
7910 4474 1092 0000 sts (SummeRoll)+2,__zero_reg__
7911 4478 1092 0000 sts (SummeRoll)+3,__zero_reg__
7912 447c 1092 0000 sts SummeNick,__zero_reg__
7913 4480 1092 0000 sts (SummeNick)+1,__zero_reg__
7914 4484 1092 0000 sts (SummeNick)+2,__zero_reg__
7915 4488 1092 0000 sts (SummeNick)+3,__zero_reg__
7916 .L632:
7917 448c F090 0000 lds r15,Looping_Nick
7918 4490 FF20 tst r15
7919 4492 01F4 brne .L633
7920 4494 8091 0000 lds r24,IntegralFaktor
7921 4498 282F mov r18,r24
7922 449a 3327 clr r19
7923 449c 4427 clr r20
7924 449e 5527 clr r21
7925 44a0 8091 0000 lds r24,IntegralNick
7926 44a4 9091 0000 lds r25,(IntegralNick)+1
7927 44a8 A091 0000 lds r26,(IntegralNick)+2
7928 44ac B091 0000 lds r27,(IntegralNick)+3
7929 44b0 BC01 movw r22,r24
7930 44b2 CD01 movw r24,r26
7931 44b4 0E94 0000 call __mulsi3
7932 44b8 DC01 movw r26,r24
7933 44ba CB01 movw r24,r22
7934 44bc BC01 movw r22,r24
7935 44be CD01 movw r24,r26
7936 44c0 28EF ldi r18,lo8(11000)
7937 44c2 3AE2 ldi r19,hi8(11000)
7938 44c4 40E0 ldi r20,hlo8(11000)
7939 44c6 50E0 ldi r21,hhi8(11000)
7940 44c8 0E94 0000 call __divmodsi4
7941 44cc 3901 movw r6,r18
7942 44ce 00C0 rjmp .L634
7943 .L633:
7944 44d0 6624 clr r6
7945 44d2 7724 clr r7
7946 .L634:
7947 44d4 E090 0000 lds r14,Looping_Roll
7948 44d8 EE20 tst r14
7949 44da 01F4 brne .L635
7950 44dc 8091 0000 lds r24,IntegralFaktor
7951 44e0 282F mov r18,r24
7952 44e2 3327 clr r19
7953 44e4 4427 clr r20
7954 44e6 5527 clr r21
7955 44e8 8091 0000 lds r24,IntegralRoll
7956 44ec 9091 0000 lds r25,(IntegralRoll)+1
7957 44f0 A091 0000 lds r26,(IntegralRoll)+2
7958 44f4 B091 0000 lds r27,(IntegralRoll)+3
7959 44f8 BC01 movw r22,r24
7960 44fa CD01 movw r24,r26
7961 44fc 0E94 0000 call __mulsi3
7962 4500 DC01 movw r26,r24
7963 4502 CB01 movw r24,r22
7964 4504 BC01 movw r22,r24
7965 4506 CD01 movw r24,r26
7966 4508 28EF ldi r18,lo8(11000)
7967 450a 3AE2 ldi r19,hi8(11000)
7968 450c 40E0 ldi r20,hlo8(11000)
7969 450e 50E0 ldi r21,hhi8(11000)
7970 4510 0E94 0000 call __divmodsi4
7971 4514 2901 movw r4,r18
7972 4516 00C0 rjmp .L636
7973 .L635:
7974 4518 4424 clr r4
7975 451a 5524 clr r5
7976 .L636:
7977 451c 8091 0000 lds r24,TrimNick
7978 4520 9091 0000 lds r25,(TrimNick)+1
7979 4524 893C cpi r24,201
7980 4526 9105 cpc r25,__zero_reg__
7981 4528 04F0 brlt .L637
7982 452a 88EC ldi r24,lo8(200)
7983 452c 90E0 ldi r25,hi8(200)
7984 452e 00C0 rjmp .L894
7985 .L637:
7986 4530 8853 subi r24,lo8(-200)
7987 4532 9F4F sbci r25,hi8(-200)
7988 4534 04F4 brge .L638
7989 4536 88E3 ldi r24,lo8(-200)
7990 4538 9FEF ldi r25,hi8(-200)
7991 .L894:
7992 453a 9093 0000 sts (TrimNick)+1,r25
7993 453e 8093 0000 sts TrimNick,r24
7994 .L638:
7995 4542 8091 0000 lds r24,TrimRoll
7996 4546 9091 0000 lds r25,(TrimRoll)+1
7997 454a 893C cpi r24,201
7998 454c 9105 cpc r25,__zero_reg__
7999 454e 04F0 brlt .L640
8000 4550 88EC ldi r24,lo8(200)
8001 4552 90E0 ldi r25,hi8(200)
8002 4554 00C0 rjmp .L895
8003 .L640:
8004 4556 8853 subi r24,lo8(-200)
8005 4558 9F4F sbci r25,hi8(-200)
8006 455a 04F4 brge .L641
8007 455c 88E3 ldi r24,lo8(-200)
8008 455e 9FEF ldi r25,hi8(-200)
8009 .L895:
8010 4560 9093 0000 sts (TrimRoll)+1,r25
8011 4564 8093 0000 sts TrimRoll,r24
8012 .L641:
8013 4568 8091 0000 lds r24,MesswertNick
8014 456c 9091 0000 lds r25,(MesswertNick)+1
8015 4570 AA27 clr r26
8016 4572 97FD sbrc r25,7
8017 4574 A095 com r26
8018 4576 BA2F mov r27,r26
8019 4578 2091 0000 lds r18,GyroFaktor
8020 457c A22E mov r10,r18
8021 457e BB24 clr r11
8022 4580 CC24 clr r12
8023 4582 DD24 clr r13
8024 4584 BC01 movw r22,r24
8025 4586 CD01 movw r24,r26
8026 4588 A601 movw r20,r12
8027 458a 9501 movw r18,r10
8028 458c 0E94 0000 call __mulsi3
8029 4590 9B01 movw r18,r22
8030 4592 AC01 movw r20,r24
8031 4594 8091 0000 lds r24,TrimNick
8032 4598 9091 0000 lds r25,(TrimNick)+1
8033 459c AA27 clr r26
8034 459e 97FD sbrc r25,7
8035 45a0 A095 com r26
8036 45a2 BA2F mov r27,r26
8037 45a4 E7E0 ldi r30,7
8038 45a6 880F 1: lsl r24
8039 45a8 991F rol r25
8040 45aa AA1F rol r26
8041 45ac BB1F rol r27
8042 45ae EA95 dec r30
8043 45b0 01F4 brne 1b
8044 45b2 280F add r18,r24
8045 45b4 391F adc r19,r25
8046 45b6 4A1F adc r20,r26
8047 45b8 5B1F adc r21,r27
8048 45ba 57FF sbrs r21,7
8049 45bc 00C0 rjmp .L643
8050 45be 215C subi r18,lo8(-(63))
8051 45c0 3F4F sbci r19,hi8(-(63))
8052 45c2 4F4F sbci r20,hlo8(-(63))
8053 45c4 5F4F sbci r21,hhi8(-(63))
8054 .L643:
8055 45c6 76E0 ldi r23,6
8056 45c8 5595 1: asr r21
8057 45ca 4795 ror r20
8058 45cc 3795 ror r19
8059 45ce 2795 ror r18
8060 45d0 7A95 dec r23
8061 45d2 01F4 brne 1b
8062 45d4 8301 movw r16,r6
8063 45d6 020F add r16,r18
8064 45d8 131F adc r17,r19
8065 45da 1093 0000 sts (MesswertNick)+1,r17
8066 45de 0093 0000 sts MesswertNick,r16
8067 45e2 8091 0000 lds r24,MesswertRoll
8068 45e6 9091 0000 lds r25,(MesswertRoll)+1
8069 45ea AA27 clr r26
8070 45ec 97FD sbrc r25,7
8071 45ee A095 com r26
8072 45f0 BA2F mov r27,r26
8073 45f2 BC01 movw r22,r24
8074 45f4 CD01 movw r24,r26
8075 45f6 A601 movw r20,r12
8076 45f8 9501 movw r18,r10
8077 45fa 0E94 0000 call __mulsi3
8078 45fe 9B01 movw r18,r22
8079 4600 AC01 movw r20,r24
8080 4602 8091 0000 lds r24,TrimRoll
8081 4606 9091 0000 lds r25,(TrimRoll)+1
8082 460a AA27 clr r26
8083 460c 97FD sbrc r25,7
8084 460e A095 com r26
8085 4610 BA2F mov r27,r26
8086 4612 67E0 ldi r22,7
8087 4614 880F 1: lsl r24
8088 4616 991F rol r25
8089 4618 AA1F rol r26
8090 461a BB1F rol r27
8091 461c 6A95 dec r22
8092 461e 01F4 brne 1b
8093 4620 280F add r18,r24
8094 4622 391F adc r19,r25
8095 4624 4A1F adc r20,r26
8096 4626 5B1F adc r21,r27
8097 4628 57FF sbrs r21,7
8098 462a 00C0 rjmp .L644
8099 462c 215C subi r18,lo8(-(63))
8100 462e 3F4F sbci r19,hi8(-(63))
8101 4630 4F4F sbci r20,hlo8(-(63))
8102 4632 5F4F sbci r21,hhi8(-(63))
8103 .L644:
8104 4634 F6E0 ldi r31,6
8105 4636 5595 1: asr r21
8106 4638 4795 ror r20
8107 463a 3795 ror r19
8108 463c 2795 ror r18
8109 463e FA95 dec r31
8110 4640 01F4 brne 1b
8111 4642 4201 movw r8,r4
8112 4644 820E add r8,r18
8113 4646 931E adc r9,r19
8114 4648 9092 0000 sts (MesswertRoll)+1,r9
8115 464c 8092 0000 sts MesswertRoll,r8
8116 4650 8091 0000 lds r24,MesswertGier
8117 4654 9091 0000 lds r25,(MesswertGier)+1
8118 4658 880F add r24,r24
8119 465a 991F adc r25,r25
8120 465c AA27 clr r26
8121 465e 97FD sbrc r25,7
8122 4660 A095 com r26
8123 4662 BA2F mov r27,r26
8124 4664 2091 0000 lds r18,GyroFaktorGier
8125 4668 3327 clr r19
8126 466a 4427 clr r20
8127 466c 5527 clr r21
8128 466e BC01 movw r22,r24
8129 4670 CD01 movw r24,r26
8130 4672 0E94 0000 call __mulsi3
8131 4676 5B01 movw r10,r22
8132 4678 6C01 movw r12,r24
8133 467a 97FF sbrs r25,7
8134 467c 00C0 rjmp .L645
8135 467e 2FE3 ldi r18,lo8(63)
8136 4680 30E0 ldi r19,hi8(63)
8137 4682 40E0 ldi r20,hlo8(63)
8138 4684 50E0 ldi r21,hhi8(63)
8139 4686 A20E add r10,r18
8140 4688 B31E adc r11,r19
8141 468a C41E adc r12,r20
8142 468c D51E adc r13,r21
8143 .L645:
8144 468e E6E0 ldi r30,6
8145 4690 D594 1: asr r13
8146 4692 C794 ror r12
8147 4694 B794 ror r11
8148 4696 A794 ror r10
8149 4698 EA95 dec r30
8150 469a 01F4 brne 1b
8151 469c 8091 0000 lds r24,IntegralFaktorGier
8152 46a0 282F mov r18,r24
8153 46a2 3327 clr r19
8154 46a4 4427 clr r20
8155 46a6 5527 clr r21
8156 46a8 8091 0000 lds r24,Integral_Gier
8157 46ac 9091 0000 lds r25,(Integral_Gier)+1
8158 46b0 A091 0000 lds r26,(Integral_Gier)+2
8159 46b4 B091 0000 lds r27,(Integral_Gier)+3
8160 46b8 BC01 movw r22,r24
8161 46ba CD01 movw r24,r26
8162 46bc 0E94 0000 call __mulsi3
8163 46c0 DC01 movw r26,r24
8164 46c2 CB01 movw r24,r22
8165 46c4 BC01 movw r22,r24
8166 46c6 CD01 movw r24,r26
8167 46c8 20EF ldi r18,lo8(22000)
8168 46ca 35E5 ldi r19,hi8(22000)
8169 46cc 40E0 ldi r20,hlo8(22000)
8170 46ce 50E0 ldi r21,hhi8(22000)
8171 46d0 0E94 0000 call __divmodsi4
8172 46d4 B501 movw r22,r10
8173 46d6 620F add r22,r18
8174 46d8 731F adc r23,r19
8175 46da 7093 0000 sts (MesswertGier)+1,r23
8176 46de 6093 0000 sts MesswertGier,r22
8177 46e2 0150 subi r16,lo8(4097)
8178 46e4 1041 sbci r17,hi8(4097)
8179 46e6 04F0 brlt .L646
8180 46e8 80E0 ldi r24,lo8(4096)
8181 46ea 90E1 ldi r25,hi8(4096)
8182 46ec 9093 0000 sts (MesswertNick)+1,r25
8183 46f0 8093 0000 sts MesswertNick,r24
8184 .L646:
8185 46f4 8091 0000 lds r24,MesswertNick
8186 46f8 9091 0000 lds r25,(MesswertNick)+1
8187 46fc 8050 subi r24,lo8(-4096)
8188 46fe 904F sbci r25,hi8(-4096)
8189 4700 04F4 brge .L647
8190 4702 80E0 ldi r24,lo8(-4096)
8191 4704 90EF ldi r25,hi8(-4096)
8192 4706 9093 0000 sts (MesswertNick)+1,r25
8193 470a 8093 0000 sts MesswertNick,r24
8194 .L647:
8195 470e 51E0 ldi r21,lo8(4097)
8196 4710 8516 cp r8,r21
8197 4712 50E1 ldi r21,hi8(4097)
8198 4714 9506 cpc r9,r21
8199 4716 04F0 brlt .L648
8200 4718 80E0 ldi r24,lo8(4096)
8201 471a 90E1 ldi r25,hi8(4096)
8202 471c 9093 0000 sts (MesswertRoll)+1,r25
8203 4720 8093 0000 sts MesswertRoll,r24
8204 .L648:
8205 4724 8091 0000 lds r24,MesswertRoll
8206 4728 9091 0000 lds r25,(MesswertRoll)+1
8207 472c 8050 subi r24,lo8(-4096)
8208 472e 904F sbci r25,hi8(-4096)
8209 4730 04F4 brge .L649
8210 4732 80E0 ldi r24,lo8(-4096)
8211 4734 90EF ldi r25,hi8(-4096)
8212 4736 9093 0000 sts (MesswertRoll)+1,r25
8213 473a 8093 0000 sts MesswertRoll,r24
8214 .L649:
8215 473e 6150 subi r22,lo8(4097)
8216 4740 7041 sbci r23,hi8(4097)
8217 4742 04F0 brlt .L650
8218 4744 80E0 ldi r24,lo8(4096)
8219 4746 90E1 ldi r25,hi8(4096)
8220 4748 9093 0000 sts (MesswertGier)+1,r25
8221 474c 8093 0000 sts MesswertGier,r24
8222 .L650:
8223 4750 8091 0000 lds r24,MesswertGier
8224 4754 9091 0000 lds r25,(MesswertGier)+1
8225 4758 8050 subi r24,lo8(-4096)
8226 475a 904F sbci r25,hi8(-4096)
8227 475c 04F4 brge .L651
8228 475e 80E0 ldi r24,lo8(-4096)
8229 4760 90EF ldi r25,hi8(-4096)
8230 4762 9093 0000 sts (MesswertGier)+1,r25
8231 4766 8093 0000 sts MesswertGier,r24
8232 .L651:
8233 476a 8091 0000 lds r24,BattLowVoltageWarning
8234 476e 482F mov r20,r24
8235 4770 5527 clr r21
8236 4772 8091 0000 lds r24,UBat
8237 4776 9091 0000 lds r25,(UBat)+1
8238 477a 4817 cp r20,r24
8239 477c 5907 cpc r21,r25
8240 477e 04F4 brge .L652
8241 4780 2091 0000 lds r18,UBat
8242 4784 3091 0000 lds r19,(UBat)+1
8243 4788 0981 ldd r16,Y+1
8244 478a 1A81 ldd r17,Y+2
8245 478c 049F mul r16,r20
8246 478e C001 movw r24,r0
8247 4790 059F mul r16,r21
8248 4792 900D add r25,r0
8249 4794 149F mul r17,r20
8250 4796 900D add r25,r0
8251 4798 1124 clr r1
8252 479a B901 movw r22,r18
8253 479c 0E94 0000 call __udivmodhi4
8254 47a0 7A83 std Y+2,r23
8255 47a2 6983 std Y+1,r22
8256 .L652:
8257 47a4 2981 ldd r18,Y+1
8258 47a6 3A81 ldd r19,Y+2
8259 47a8 220F lsl r18
8260 47aa 331F rol r19
8261 47ac 220F lsl r18
8262 47ae 331F rol r19
8263 47b0 3A83 std Y+2,r19
8264 47b2 2983 std Y+1,r18
8265 47b4 4091 0000 lds r20,Parameter_GlobalConfig
8266 47b8 40FD sbrc r20,0
8267 47ba 00C0 rjmp .+4
8268 47bc 0C94 0000 jmp .L653
8269 47c0 EE20 tst r14
8270 47c2 01F0 breq .+4
8271 47c4 0C94 0000 jmp .L653
8272 47c8 FF20 tst r15
8273 47ca 01F0 breq .+4
8274 47cc 0C94 0000 jmp .L653
8275 47d0 00E0 ldi r16,lo8(0)
8276 47d2 10E0 ldi r17,hi8(0)
8277 47d4 4801 movw r8,r16
8278 47d6 8091 0000 lds r24,HoverGas
8279 47da 9091 0000 lds r25,(HoverGas)+1
8280 47de 9093 0000 sts (DebugOut+44)+1,r25
8281 47e2 8093 0000 sts DebugOut+44,r24
8282 47e6 2091 0000 lds r18,BaroExpandActive
8283 47ea 3091 0000 lds r19,(BaroExpandActive)+1
8284 47ee 2115 cp r18,__zero_reg__
8285 47f0 3105 cpc r19,__zero_reg__
8286 47f2 01F0 breq .+2
8287 47f4 00C0 rjmp .L654
8288 47f6 8091 0000 lds r24,MessLuftdruck
8289 47fa 9091 0000 lds r25,(MessLuftdruck)+1
8290 47fe 8959 subi r24,lo8(921)
8291 4800 9340 sbci r25,hi8(921)
8292 4802 00F0 brlo .L655
8293 4804 87B5 in r24,71-0x20
8294 4806 803F cpi r24,lo8(-16)
8295 4808 00F4 brsh .L656
8296 480a 8091 0000 lds r24,ExpandBaro
8297 480e 8150 subi r24,lo8(-(-1))
8298 4810 00C0 rjmp .L896
8299 .L656:
8300 4812 81E0 ldi r24,lo8(1)
8301 4814 8093 0000 sts BaroAtLowerLimit.26,r24
8302 4818 00C0 rjmp .L663
8303 .L655:
8304 481a 8091 0000 lds r24,MessLuftdruck
8305 481e 9091 0000 lds r25,(MessLuftdruck)+1
8306 4822 8436 cpi r24,100
8307 4824 9105 cpc r25,__zero_reg__
8308 4826 00F4 brsh .L659
8309 4828 87B5 in r24,71-0x20
8310 482a 8031 cpi r24,lo8(16)
8311 482c 00F0 brlo .L660
8312 482e 8091 0000 lds r24,ExpandBaro
8313 4832 8F5F subi r24,lo8(-(1))
8314 .L896:
8315 4834 8093 0000 sts ExpandBaro,r24
8316 4838 9FE0 ldi r25,lo8(15)
8317 483a 8902 muls r24,r25
8318 483c 9001 movw r18,r0
8319 483e 1124 clr r1
8320 4840 8091 0000 lds r24,DruckOffsetSetting
8321 4844 821B sub r24,r18
8322 4846 87BD out 71-0x20,r24
8323 4848 8CE2 ldi r24,lo8(300)
8324 484a 91E0 ldi r25,hi8(300)
8325 484c 9093 0000 sts (beeptime)+1,r25
8326 4850 8093 0000 sts beeptime,r24
8327 4854 8EE5 ldi r24,lo8(350)
8328 4856 91E0 ldi r25,hi8(350)
8329 4858 9093 0000 sts (BaroExpandActive)+1,r25
8330 485c 8093 0000 sts BaroExpandActive,r24
8331 4860 00C0 rjmp .L663
8332 .L660:
8333 4862 81E0 ldi r24,lo8(1)
8334 4864 8093 0000 sts BaroAtUpperLimit.25,r24
8335 4868 00C0 rjmp .L663
8336 .L659:
8337 486a F092 0000 sts BaroAtUpperLimit.25,r15
8338 486e F092 0000 sts BaroAtLowerLimit.26,r15
8339 4872 00C0 rjmp .L663
8340 .L654:
8341 4874 8091 0000 lds r24,HoehenWert
8342 4878 9091 0000 lds r25,(HoehenWert)+1
8343 487c A091 0000 lds r26,(HoehenWert)+2
8344 4880 B091 0000 lds r27,(HoehenWert)+3
8345 4884 64E0 ldi r22,4
8346 4886 880F 1: lsl r24
8347 4888 991F rol r25
8348 488a AA1F rol r26
8349 488c BB1F rol r27
8350 488e 6A95 dec r22
8351 4890 01F4 brne 1b
8352 4892 8093 0000 sts SummenHoehe,r24
8353 4896 9093 0000 sts (SummenHoehe)+1,r25
8354 489a A093 0000 sts (SummenHoehe)+2,r26
8355 489e B093 0000 sts (SummenHoehe)+3,r27
8356 48a2 1093 0000 sts (VarioMeter)+1,r17
8357 48a6 0093 0000 sts VarioMeter,r16
8358 48aa 2150 subi r18,lo8(-(-1))
8359 48ac 3040 sbci r19,hi8(-(-1))
8360 48ae 3093 0000 sts (BaroExpandActive)+1,r19
8361 48b2 2093 0000 sts BaroExpandActive,r18
8362 .L663:
8363 48b6 2091 0000 lds r18,Parameter_HoehenSchalter
8364 48ba 41FF sbrs r20,1
8365 48bc 00C0 rjmp .L664
8366 48be 2233 cpi r18,lo8(50)
8367 48c0 00F4 brsh .L665
8368 48c2 8091 0000 lds r24,delay.24
8369 48c6 8150 subi r24,lo8(-(-1))
8370 48c8 8093 0000 sts delay.24,r24
8371 48cc 8F3F cpi r24,lo8(-1)
8372 48ce 01F0 breq .+2
8373 48d0 00C0 rjmp .L671
8374 48d2 8091 0000 lds r24,SpeakHoTT
8375 48d6 8823 tst r24
8376 48d8 01F4 brne .L667
8377 48da 8091 0000 lds r24,HoehenReglerAktiv
8378 48de 8823 tst r24
8379 48e0 01F0 breq .L667
8380 48e2 88E2 ldi r24,lo8(40)
8381 48e4 8093 0000 sts SpeakHoTT,r24
8382 .L667:
8383 48e8 1092 0000 sts HoehenReglerAktiv,__zero_reg__
8384 48ec 8091 0000 lds r24,HoehenWert
8385 48f0 9091 0000 lds r25,(HoehenWert)+1
8386 48f4 A091 0000 lds r26,(HoehenWert)+2
8387 48f8 B091 0000 lds r27,(HoehenWert)+3
8388 48fc 8093 0000 sts SollHoehe,r24
8389 4900 9093 0000 sts (SollHoehe)+1,r25
8390 4904 A093 0000 sts (SollHoehe)+2,r26
8391 4908 B093 0000 sts (SollHoehe)+3,r27
8392 490c 81E0 ldi r24,lo8(1)
8393 490e 8093 0000 sts delay.24,r24
8394 4912 00C0 rjmp .L671
8395 .L665:
8396 4914 2734 cpi r18,lo8(71)
8397 4916 00F0 brlo .L671
8398 4918 8091 0000 lds r24,SpeakHoTT
8399 491c 8823 tst r24
8400 491e 01F4 brne .L670
8401 4920 8091 0000 lds r24,HoehenReglerAktiv
8402 4924 8823 tst r24
8403 4926 01F4 brne .L670
8404 4928 87E2 ldi r24,lo8(39)
8405 492a 8093 0000 sts SpeakHoTT,r24
8406 .L670:
8407 492e 88EC ldi r24,lo8(-56)
8408 4930 8093 0000 sts delay.24,r24
8409 4934 00C0 rjmp .L897
8410 .L664:
8411 4936 8091 0000 lds r24,ExternHoehenValue
8412 493a 9091 0000 lds r25,(ExternHoehenValue)+1
8413 493e 820F add r24,r18
8414 4940 911D adc r25,__zero_reg__
8415 4942 2091 0000 lds r18,EE_Parameter+18
8416 4946 3327 clr r19
8417 4948 829F mul r24,r18
8418 494a A001 movw r20,r0
8419 494c 839F mul r24,r19
8420 494e 500D add r21,r0
8421 4950 929F mul r25,r18
8422 4952 500D add r21,r0
8423 4954 1124 clr r1
8424 4956 CA01 movw r24,r20
8425 4958 AA27 clr r26
8426 495a 97FD sbrc r25,7
8427 495c A095 com r26
8428 495e BA2F mov r27,r26
8429 4960 8093 0000 sts SollHoehe,r24
8430 4964 9093 0000 sts (SollHoehe)+1,r25
8431 4968 A093 0000 sts (SollHoehe)+2,r26
8432 496c B093 0000 sts (SollHoehe)+3,r27
8433 .L897:
8434 4970 81E0 ldi r24,lo8(1)
8435 4972 8093 0000 sts HoehenReglerAktiv,r24
8436 .L671:
8437 4976 8091 0000 lds r24,IntegralNick
8438 497a 9091 0000 lds r25,(IntegralNick)+1
8439 497e A091 0000 lds r26,(IntegralNick)+2
8440 4982 B091 0000 lds r27,(IntegralNick)+3
8441 4986 E090 0000 lds r14,GIER_GRAD_FAKTOR
8442 498a F090 0000 lds r15,(GIER_GRAD_FAKTOR)+1
8443 498e 0091 0000 lds r16,(GIER_GRAD_FAKTOR)+2
8444 4992 1091 0000 lds r17,(GIER_GRAD_FAKTOR)+3
8445 4996 BC01 movw r22,r24
8446 4998 CD01 movw r24,r26
8447 499a A801 movw r20,r16
8448 499c 9701 movw r18,r14
8449 499e 0E94 0000 call __divmodsi4
8450 49a2 5901 movw r10,r18
8451 49a4 6A01 movw r12,r20
8452 49a6 8091 0000 lds r24,IntegralRoll
8453 49aa 9091 0000 lds r25,(IntegralRoll)+1
8454 49ae A091 0000 lds r26,(IntegralRoll)+2
8455 49b2 B091 0000 lds r27,(IntegralRoll)+3
8456 49b6 BC01 movw r22,r24
8457 49b8 CD01 movw r24,r26
8458 49ba A801 movw r20,r16
8459 49bc 9701 movw r18,r14
8460 49be 0E94 0000 call __divmodsi4
8461 49c2 B901 movw r22,r18
8462 49c4 C501 movw r24,r10
8463 49c6 0E94 0000 call ihypot
8464 49ca 5C01 movw r10,r24
8465 49cc CC97 sbiw r24,60
8466 49ce 04F0 brlt .L672
8467 49d0 5CE3 ldi r21,lo8(60)
8468 49d2 A52E mov r10,r21
8469 49d4 B12C mov r11,__zero_reg__
8470 .L672:
8471 49d6 C501 movw r24,r10
8472 49d8 0E94 0000 call c_cos_8192
8473 49dc 5C01 movw r10,r24
8474 49de 80E2 ldi r24,lo8(32)
8475 49e0 8093 0000 sts VarioCharacter,r24
8476 49e4 1092 0000 sts (AltitudeSetpointTrimming)+1,__zero_reg__
8477 49e8 1092 0000 sts AltitudeSetpointTrimming,__zero_reg__
8478 49ec 8091 0000 lds r24,HoehenReglerAktiv
8479 49f0 8823 tst r24
8480 49f2 01F4 brne .+2
8481 49f4 00C0 rjmp .L673
8482 49f6 8091 0000 lds r24,FC_StatusFlags
8483 49fa 9927 clr r25
8484 49fc 9C01 movw r18,r24
8485 49fe 2071 andi r18,lo8(16)
8486 4a00 3070 andi r19,hi8(16)
8487 4a02 84FD sbrc r24,4
8488 4a04 00C0 rjmp .L673
8489 4a06 8091 0000 lds r24,FC_StatusFlags2
8490 4a0a 8260 ori r24,lo8(2)
8491 4a0c 8093 0000 sts FC_StatusFlags2,r24
8492 4a10 7091 0000 lds r23,Parameter_ExtraConfig
8493 4a14 872F mov r24,r23
8494 4a16 9927 clr r25
8495 4a18 41E0 ldi r20,lo8(1)
8496 4a1a C42E mov r12,r20
8497 4a1c D12C mov r13,__zero_reg__
8498 4a1e C822 and r12,r24
8499 4a20 D922 and r13,r25
8500 4a22 80FD sbrc r24,0
8501 4a24 00C0 rjmp .L675
8502 4a26 8091 0000 lds r24,Parameter_GlobalConfig
8503 4a2a 81FD sbrc r24,1
8504 4a2c 00C0 rjmp .L674
8505 .L675:
8506 4a2e C980 ldd r12,Y+1
8507 4a30 DA80 ldd r13,Y+2
8508 4a32 3093 0000 sts (HeightTrimming.21)+1,r19
8509 4a36 2093 0000 sts HeightTrimming.21,r18
8510 4a3a 3093 0000 sts (AltitudeSetpointTrimming)+1,r19
8511 4a3e 2093 0000 sts AltitudeSetpointTrimming,r18
8512 4a42 8091 0000 lds r24,FC_StatusFlags
8513 4a46 806C ori r24,lo8(-64)
8514 4a48 8093 0000 sts FC_StatusFlags,r24
8515 4a4c 00C0 rjmp .L676
8516 .L674:
8517 4a4e 8091 0000 lds r24,FC_StatusFlags
8518 4a52 81FF sbrs r24,1
8519 4a54 00C0 rjmp .L677
8520 4a56 0091 0000 lds r16,StickGasHover
8521 4a5a 1091 0000 lds r17,(StickGasHover)+1
8522 4a5e C801 movw r24,r16
8523 4a60 0F96 adiw r24,15
8524 4a62 2090 0000 lds r2,StickGas
8525 4a66 3090 0000 lds r3,(StickGas)+1
8526 4a6a 8215 cp r24,r2
8527 4a6c 9305 cpc r25,r3
8528 4a6e 04F0 brlt .+2
8529 4a70 00C0 rjmp .L678
8530 4a72 8091 0000 lds r24,BaroAtUpperLimit.25
8531 4a76 8823 tst r24
8532 4a78 01F0 breq .+2
8533 4a7a 00C0 rjmp .L678
8534 4a7c 8091 0000 lds r24,FC_StatusFlags
8535 4a80 87FF sbrs r24,7
8536 4a82 00C0 rjmp .L679
8537 4a84 8091 0000 lds r24,FC_StatusFlags
8538 4a88 8F77 andi r24,lo8(127)
8539 4a8a 8093 0000 sts FC_StatusFlags,r24
8540 4a8e 8091 0000 lds r24,HoehenWert
8541 4a92 9091 0000 lds r25,(HoehenWert)+1
8542 4a96 A091 0000 lds r26,(HoehenWert)+2
8543 4a9a B091 0000 lds r27,(HoehenWert)+3
8544 4a9e 8093 0000 sts SollHoehe,r24
8545 4aa2 9093 0000 sts (SollHoehe)+1,r25
8546 4aa6 A093 0000 sts (SollHoehe)+2,r26
8547 4aaa B093 0000 sts (SollHoehe)+3,r27
8548 .L679:
8549 4aae 8091 0000 lds r24,FC_StatusFlags
8550 4ab2 8064 ori r24,lo8(64)
8551 4ab4 8093 0000 sts FC_StatusFlags,r24
8552 4ab8 E090 0000 lds r14,Parameter_MaximumAltitude
8553 4abc EE20 tst r14
8554 4abe 01F0 breq .L680
8555 4ac0 8091 0000 lds r24,SollHoehe
8556 4ac4 9091 0000 lds r25,(SollHoehe)+1
8557 4ac8 A091 0000 lds r26,(SollHoehe)+2
8558 4acc B091 0000 lds r27,(SollHoehe)+3
8559 4ad0 BC01 movw r22,r24
8560 4ad2 CD01 movw r24,r26
8561 4ad4 24E6 ldi r18,lo8(100)
8562 4ad6 30E0 ldi r19,hi8(100)
8563 4ad8 40E0 ldi r20,hlo8(100)
8564 4ada 50E0 ldi r21,hhi8(100)
8565 4adc 0E94 0000 call __divmodsi4
8566 4ae0 8E2D mov r24,r14
8567 4ae2 9927 clr r25
8568 4ae4 AA27 clr r26
8569 4ae6 BB27 clr r27
8570 4ae8 8217 cp r24,r18
8571 4aea 9307 cpc r25,r19
8572 4aec A407 cpc r26,r20
8573 4aee B507 cpc r27,r21
8574 4af0 04F4 brge .L680
8575 4af2 D092 0000 sts (AltitudeSetpointTrimming)+1,r13
8576 4af6 C092 0000 sts AltitudeSetpointTrimming,r12
8577 4afa 00C0 rjmp .L681
8578 .L680:
8579 4afc C101 movw r24,r2
8580 4afe 801B sub r24,r16
8581 4b00 910B sbc r25,r17
8582 4b02 0F97 sbiw r24,15
8583 4b04 97FF sbrs r25,7
8584 4b06 00C0 rjmp .L682
8585 4b08 9095 com r25
8586 4b0a 8195 neg r24
8587 4b0c 9F4F sbci r25,lo8(-1)
8588 .L682:
8589 4b0e 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8590 4b12 8093 0000 sts AltitudeSetpointTrimming,r24
8591 4b16 8BE2 ldi r24,lo8(43)
8592 4b18 8093 0000 sts VarioCharacter,r24
8593 .L681:
8594 4b1c 1092 0000 sts WaypointTrimming,__zero_reg__
8595 4b20 00C0 rjmp .L683
8596 .L678:
8597 4b22 C801 movw r24,r16
8598 4b24 0F97 sbiw r24,15
8599 4b26 2816 cp r2,r24
8600 4b28 3906 cpc r3,r25
8601 4b2a 04F4 brge .L684
8602 4b2c 2091 0000 lds r18,BaroAtLowerLimit.26
8603 4b30 2223 tst r18
8604 4b32 01F4 brne .L684
8605 4b34 8091 0000 lds r24,FC_StatusFlags
8606 4b38 86FF sbrs r24,6
8607 4b3a 00C0 rjmp .L685
8608 4b3c 8091 0000 lds r24,FC_StatusFlags
8609 4b40 8F7B andi r24,lo8(-65)
8610 4b42 8093 0000 sts FC_StatusFlags,r24
8611 4b46 8091 0000 lds r24,HoehenWert
8612 4b4a 9091 0000 lds r25,(HoehenWert)+1
8613 4b4e A091 0000 lds r26,(HoehenWert)+2
8614 4b52 B091 0000 lds r27,(HoehenWert)+3
8615 4b56 8093 0000 sts SollHoehe,r24
8616 4b5a 9093 0000 sts (SollHoehe)+1,r25
8617 4b5e A093 0000 sts (SollHoehe)+2,r26
8618 4b62 B093 0000 sts (SollHoehe)+3,r27
8619 .L685:
8620 4b66 8091 0000 lds r24,FC_StatusFlags
8621 4b6a 8068 ori r24,lo8(-128)
8622 4b6c 8093 0000 sts FC_StatusFlags,r24
8623 4b70 C101 movw r24,r2
8624 4b72 801B sub r24,r16
8625 4b74 910B sbc r25,r17
8626 4b76 0F96 adiw r24,15
8627 4b78 97FF sbrs r25,7
8628 4b7a 00C0 rjmp .L686
8629 4b7c 9095 com r25
8630 4b7e 8195 neg r24
8631 4b80 9F4F sbci r25,lo8(-1)
8632 .L686:
8633 4b82 9095 com r25
8634 4b84 8195 neg r24
8635 4b86 9F4F sbci r25,lo8(-1)
8636 4b88 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8637 4b8c 8093 0000 sts AltitudeSetpointTrimming,r24
8638 4b90 8DE2 ldi r24,lo8(45)
8639 4b92 8093 0000 sts VarioCharacter,r24
8640 4b96 2093 0000 sts WaypointTrimming,r18
8641 4b9a 00C0 rjmp .L683
8642 .L684:
8643 4b9c 8DE3 ldi r24,lo8(61)
8644 4b9e 8093 0000 sts VarioCharacter,r24
8645 4ba2 6091 0000 lds r22,FromNC_AltitudeSpeed
8646 4ba6 6623 tst r22
8647 4ba8 01F0 breq .L688
8648 4baa 2091 0000 lds r18,FromNC_AltitudeSetpoint
8649 4bae 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8650 4bb2 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8651 4bb6 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8652 4bba 8091 0000 lds r24,SollHoehe
8653 4bbe 9091 0000 lds r25,(SollHoehe)+1
8654 4bc2 A091 0000 lds r26,(SollHoehe)+2
8655 4bc6 B091 0000 lds r27,(SollHoehe)+3
8656 4bca 8217 cp r24,r18
8657 4bcc 9307 cpc r25,r19
8658 4bce A407 cpc r26,r20
8659 4bd0 B507 cpc r27,r21
8660 4bd2 04F4 brge .L688
8661 4bd4 8091 0000 lds r24,FC_StatusFlags
8662 4bd8 8064 ori r24,lo8(64)
8663 4bda 8093 0000 sts FC_StatusFlags,r24
8664 4bde 862F mov r24,r22
8665 4be0 9927 clr r25
8666 4be2 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8667 4be6 8093 0000 sts AltitudeSetpointTrimming,r24
8668 4bea 8AE0 ldi r24,lo8(10)
8669 4bec 8093 0000 sts WaypointTrimming,r24
8670 4bf0 8EE5 ldi r24,lo8(94)
8671 4bf2 8093 0000 sts VarioCharacter,r24
8672 4bf6 8091 0000 lds r24,FC_StatusFlags
8673 4bfa 87FF sbrs r24,7
8674 4bfc 00C0 rjmp .L683
8675 4bfe 8091 0000 lds r24,FC_StatusFlags
8676 4c02 8F77 andi r24,lo8(127)
8677 4c04 00C0 rjmp .L899
8678 .L688:
8679 4c06 6623 tst r22
8680 4c08 01F4 brne .+2
8681 4c0a 00C0 rjmp .L691
8682 4c0c 2091 0000 lds r18,FromNC_AltitudeSetpoint
8683 4c10 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8684 4c14 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8685 4c18 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8686 4c1c 8091 0000 lds r24,SollHoehe
8687 4c20 9091 0000 lds r25,(SollHoehe)+1
8688 4c24 A091 0000 lds r26,(SollHoehe)+2
8689 4c28 B091 0000 lds r27,(SollHoehe)+3
8690 4c2c 2817 cp r18,r24
8691 4c2e 3907 cpc r19,r25
8692 4c30 4A07 cpc r20,r26
8693 4c32 5B07 cpc r21,r27
8694 4c34 04F4 brge .L691
8695 4c36 8091 0000 lds r24,FC_StatusFlags
8696 4c3a 8068 ori r24,lo8(-128)
8697 4c3c 8093 0000 sts FC_StatusFlags,r24
8698 4c40 862F mov r24,r22
8699 4c42 9927 clr r25
8700 4c44 9095 com r25
8701 4c46 8195 neg r24
8702 4c48 9F4F sbci r25,lo8(-1)
8703 4c4a 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8704 4c4e 8093 0000 sts AltitudeSetpointTrimming,r24
8705 4c52 86EF ldi r24,lo8(-10)
8706 4c54 8093 0000 sts WaypointTrimming,r24
8707 4c58 86E7 ldi r24,lo8(118)
8708 4c5a 8093 0000 sts VarioCharacter,r24
8709 4c5e 8091 0000 lds r24,FC_StatusFlags
8710 4c62 86FF sbrs r24,6
8711 4c64 00C0 rjmp .L683
8712 4c66 8091 0000 lds r24,FC_StatusFlags
8713 4c6a 8F7B andi r24,lo8(-65)
8714 .L899:
8715 4c6c 8093 0000 sts FC_StatusFlags,r24
8716 4c70 8091 0000 lds r24,HoehenWert
8717 4c74 9091 0000 lds r25,(HoehenWert)+1
8718 4c78 A091 0000 lds r26,(HoehenWert)+2
8719 4c7c B091 0000 lds r27,(HoehenWert)+3
8720 4c80 8093 0000 sts SollHoehe,r24
8721 4c84 9093 0000 sts (SollHoehe)+1,r25
8722 4c88 A093 0000 sts (SollHoehe)+2,r26
8723 4c8c B093 0000 sts (SollHoehe)+3,r27
8724 4c90 00C0 rjmp .L683
8725 .L691:
8726 4c92 8091 0000 lds r24,FC_StatusFlags
8727 4c96 807C andi r24,lo8(-64)
8728 4c98 01F4 brne .+2
8729 4c9a 00C0 rjmp .L683
8730 4c9c 8091 0000 lds r24,WaypointTrimming
8731 4ca0 8823 tst r24
8732 4ca2 01F4 brne .L695
8733 4ca4 E090 0000 lds r14,HoehenWert
8734 4ca8 F090 0000 lds r15,(HoehenWert)+1
8735 4cac 0091 0000 lds r16,(HoehenWert)+2
8736 4cb0 1091 0000 lds r17,(HoehenWert)+3
8737 4cb4 D801 movw r26,r16
8738 4cb6 C701 movw r24,r14
8739 4cb8 8058 subi r24,lo8(-(-128))
8740 4cba 9040 sbci r25,hi8(-(-128))
8741 4cbc A040 sbci r26,hlo8(-(-128))
8742 4cbe B040 sbci r27,hhi8(-(-128))
8743 4cc0 2091 0000 lds r18,SollHoehe
8744 4cc4 3091 0000 lds r19,(SollHoehe)+1
8745 4cc8 4091 0000 lds r20,(SollHoehe)+2
8746 4ccc 5091 0000 lds r21,(SollHoehe)+3
8747 4cd0 8217 cp r24,r18
8748 4cd2 9307 cpc r25,r19
8749 4cd4 A407 cpc r26,r20
8750 4cd6 B507 cpc r27,r21
8751 4cd8 04F4 brge .L898
8752 4cda D801 movw r26,r16
8753 4cdc C701 movw r24,r14
8754 4cde 8058 subi r24,lo8(-(128))
8755 4ce0 9F4F sbci r25,hi8(-(128))
8756 4ce2 AF4F sbci r26,hlo8(-(128))
8757 4ce4 BF4F sbci r27,hhi8(-(128))
8758 4ce6 2817 cp r18,r24
8759 4ce8 3907 cpc r19,r25
8760 4cea 4A07 cpc r20,r26
8761 4cec 5B07 cpc r21,r27
8762 4cee 04F0 brlt .L699
8763 .L898:
8764 4cf0 8093 0000 sts SollHoehe,r24
8765 4cf4 9093 0000 sts (SollHoehe)+1,r25
8766 4cf8 A093 0000 sts (SollHoehe)+2,r26
8767 4cfc B093 0000 sts (SollHoehe)+3,r27
8768 4d00 00C0 rjmp .L699
8769 .L695:
8770 4d02 1092 0000 sts WaypointTrimming,__zero_reg__
8771 .L699:
8772 4d06 8091 0000 lds r24,FC_StatusFlags
8773 4d0a 8F73 andi r24,lo8(63)
8774 4d0c 8093 0000 sts FC_StatusFlags,r24
8775 4d10 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8776 4d14 1092 0000 sts HeightTrimming.21,__zero_reg__
8777 4d18 71FF sbrs r23,1
8778 4d1a 00C0 rjmp .L700
8779 4d1c 84EF ldi r24,lo8(500)
8780 4d1e 91E0 ldi r25,hi8(500)
8781 4d20 9093 0000 sts (beeptime)+1,r25
8782 4d24 8093 0000 sts beeptime,r24
8783 .L700:
8784 4d28 8091 0000 lds r24,StartTrigger
8785 4d2c 8823 tst r24
8786 4d2e 01F4 brne .L683
8787 4d30 8091 0000 lds r24,HoehenWert
8788 4d34 9091 0000 lds r25,(HoehenWert)+1
8789 4d38 A091 0000 lds r26,(HoehenWert)+2
8790 4d3c B091 0000 lds r27,(HoehenWert)+3
8791 4d40 C397 sbiw r24,51
8792 4d42 A105 cpc r26,__zero_reg__
8793 4d44 B105 cpc r27,__zero_reg__
8794 4d46 04F0 brlt .L683
8795 4d48 81E0 ldi r24,lo8(1)
8796 4d4a 8093 0000 sts StartTrigger,r24
8797 .L683:
8798 4d4e 6091 0000 lds r22,HeightTrimming.21
8799 4d52 7091 0000 lds r23,(HeightTrimming.21)+1
8800 4d56 8091 0000 lds r24,AltitudeSetpointTrimming
8801 4d5a 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
8802 4d5e 680F add r22,r24
8803 4d60 791F adc r23,r25
8804 4d62 7093 0000 sts (HeightTrimming.21)+1,r23
8805 4d66 6093 0000 sts HeightTrimming.21,r22
8806 4d6a CB01 movw r24,r22
8807 4d6c 77FF sbrs r23,7
8808 4d6e 00C0 rjmp .L703
8809 4d70 8827 clr r24
8810 4d72 9927 clr r25
8811 4d74 861B sub r24,r22
8812 4d76 970B sbc r25,r23
8813 .L703:
8814 4d78 855F subi r24,lo8(501)
8815 4d7a 9140 sbci r25,hi8(501)
8816 4d7c 04F4 brge .+2
8817 4d7e 00C0 rjmp .L702
8818 4d80 4091 0000 lds r20,WaypointTrimming
8819 4d84 4423 tst r20
8820 4d86 01F0 breq .L704
8821 4d88 8091 0000 lds r24,FromNC_AltitudeSetpoint
8822 4d8c 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8823 4d90 2091 0000 lds r18,SollHoehe
8824 4d94 3091 0000 lds r19,(SollHoehe)+1
8825 4d98 821B sub r24,r18
8826 4d9a 930B sbc r25,r19
8827 4d9c 0996 adiw r24,9
8828 4d9e 4397 sbiw r24,19
8829 4da0 00F4 brsh .L705
8830 4da2 8091 0000 lds r24,FromNC_AltitudeSetpoint
8831 4da6 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8832 4daa A091 0000 lds r26,(FromNC_AltitudeSetpoint)+2
8833 4dae B091 0000 lds r27,(FromNC_AltitudeSetpoint)+3
8834 4db2 00C0 rjmp .L901
8835 .L705:
8836 4db4 242F mov r18,r20
8837 4db6 3327 clr r19
8838 4db8 27FD sbrc r18,7
8839 4dba 3095 com r19
8840 4dbc 432F mov r20,r19
8841 4dbe 532F mov r21,r19
8842 4dc0 8091 0000 lds r24,SollHoehe
8843 4dc4 9091 0000 lds r25,(SollHoehe)+1
8844 4dc8 A091 0000 lds r26,(SollHoehe)+2
8845 4dcc B091 0000 lds r27,(SollHoehe)+3
8846 4dd0 820F add r24,r18
8847 4dd2 931F adc r25,r19
8848 4dd4 A41F adc r26,r20
8849 4dd6 B51F adc r27,r21
8850 .L901:
8851 4dd8 8093 0000 sts SollHoehe,r24
8852 4ddc 9093 0000 sts (SollHoehe)+1,r25
8853 4de0 A093 0000 sts (SollHoehe)+2,r26
8854 4de4 B093 0000 sts (SollHoehe)+3,r27
8855 4de8 00C0 rjmp .L707
8856 .L704:
8857 4dea 8091 0000 lds r24,EE_Parameter+18
8858 4dee 2091 0000 lds r18,SollHoehe
8859 4df2 3091 0000 lds r19,(SollHoehe)+1
8860 4df6 4091 0000 lds r20,(SollHoehe)+2
8861 4dfa 5091 0000 lds r21,(SollHoehe)+3
8862 4dfe 1616 cp __zero_reg__,r22
8863 4e00 1706 cpc __zero_reg__,r23
8864 4e02 04F4 brge .L708
8865 4e04 63E0 ldi r22,lo8(3)
8866 4e06 0E94 0000 call __udivmodqi4
8867 4e0a 280F add r18,r24
8868 4e0c 311D adc r19,__zero_reg__
8869 4e0e 411D adc r20,__zero_reg__
8870 4e10 511D adc r21,__zero_reg__
8871 4e12 00C0 rjmp .L900
8872 .L708:
8873 4e14 63E0 ldi r22,lo8(3)
8874 4e16 0E94 0000 call __udivmodqi4
8875 4e1a 281B sub r18,r24
8876 4e1c 3109 sbc r19,__zero_reg__
8877 4e1e 4109 sbc r20,__zero_reg__
8878 4e20 5109 sbc r21,__zero_reg__
8879 .L900:
8880 4e22 2093 0000 sts SollHoehe,r18
8881 4e26 3093 0000 sts (SollHoehe)+1,r19
8882 4e2a 4093 0000 sts (SollHoehe)+2,r20
8883 4e2e 5093 0000 sts (SollHoehe)+3,r21
8884 .L707:
8885 4e32 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8886 4e36 1092 0000 sts HeightTrimming.21,__zero_reg__
8887 4e3a E090 0000 lds r14,HoehenWert
8888 4e3e F090 0000 lds r15,(HoehenWert)+1
8889 4e42 0091 0000 lds r16,(HoehenWert)+2
8890 4e46 1091 0000 lds r17,(HoehenWert)+3
8891 4e4a D801 movw r26,r16
8892 4e4c C701 movw r24,r14
8893 4e4e 8050 subi r24,lo8(-(-1024))
8894 4e50 9440 sbci r25,hi8(-(-1024))
8895 4e52 A040 sbci r26,hlo8(-(-1024))
8896 4e54 B040 sbci r27,hhi8(-(-1024))
8897 4e56 2091 0000 lds r18,SollHoehe
8898 4e5a 3091 0000 lds r19,(SollHoehe)+1
8899 4e5e 4091 0000 lds r20,(SollHoehe)+2
8900 4e62 5091 0000 lds r21,(SollHoehe)+3
8901 4e66 8217 cp r24,r18
8902 4e68 9307 cpc r25,r19
8903 4e6a A407 cpc r26,r20
8904 4e6c B507 cpc r27,r21
8905 4e6e 04F4 brge .L902
8906 4e70 D801 movw r26,r16
8907 4e72 C701 movw r24,r14
8908 4e74 8050 subi r24,lo8(-(1024))
8909 4e76 9C4F sbci r25,hi8(-(1024))
8910 4e78 AF4F sbci r26,hlo8(-(1024))
8911 4e7a BF4F sbci r27,hhi8(-(1024))
8912 4e7c 2817 cp r18,r24
8913 4e7e 3907 cpc r19,r25
8914 4e80 4A07 cpc r20,r26
8915 4e82 5B07 cpc r21,r27
8916 4e84 04F0 brlt .L711
8917 .L902:
8918 4e86 8093 0000 sts SollHoehe,r24
8919 4e8a 9093 0000 sts (SollHoehe)+1,r25
8920 4e8e A093 0000 sts (SollHoehe)+2,r26
8921 4e92 B093 0000 sts (SollHoehe)+3,r27
8922 .L711:
8923 4e96 8091 0000 lds r24,Parameter_ExtraConfig
8924 4e9a 81FF sbrs r24,1
8925 4e9c 00C0 rjmp .L713
8926 4e9e 84E6 ldi r24,lo8(100)
8927 4ea0 90E0 ldi r25,hi8(100)
8928 4ea2 9093 0000 sts (beeptime)+1,r25
8929 4ea6 8093 0000 sts beeptime,r24
8930 .L713:
8931 4eaa 8091 0000 lds r24,EE_Parameter+22
8932 4eae 8823 tst r24
8933 4eb0 01F4 brne .L702
8934 4eb2 8091 0000 lds r24,FromNC_AltitudeSpeed
8935 4eb6 8823 tst r24
8936 4eb8 01F4 brne .L702
8937 4eba 4091 0000 lds r20,HoverGas
8938 4ebe 5091 0000 lds r21,(HoverGas)+1
8939 4ec2 57FF sbrs r21,7
8940 4ec4 00C0 rjmp .L715
8941 4ec6 4D5F subi r20,lo8(-(3))
8942 4ec8 5F4F sbci r21,hi8(-(3))
8943 .L715:
8944 4eca 5595 asr r21
8945 4ecc 4795 ror r20
8946 4ece 5595 asr r21
8947 4ed0 4795 ror r20
8948 4ed2 8091 0000 lds r24,UBat
8949 4ed6 9091 0000 lds r25,(UBat)+1
8950 4eda 2091 0000 lds r18,BattLowVoltageWarning
8951 4ede 3327 clr r19
8952 4ee0 489F mul r20,r24
8953 4ee2 F001 movw r30,r0
8954 4ee4 499F mul r20,r25
8955 4ee6 F00D add r31,r0
8956 4ee8 589F mul r21,r24
8957 4eea F00D add r31,r0
8958 4eec 1124 clr r1
8959 4eee CF01 movw r24,r30
8960 4ef0 B901 movw r22,r18
8961 4ef2 0E94 0000 call __divmodhi4
8962 4ef6 7093 0000 sts (StickGasHover)+1,r23
8963 4efa 6093 0000 sts StickGasHover,r22
8964 4efe 6634 cpi r22,70
8965 4f00 7105 cpc r23,__zero_reg__
8966 4f02 04F4 brge .L716
8967 4f04 86E4 ldi r24,lo8(70)
8968 4f06 90E0 ldi r25,hi8(70)
8969 4f08 00C0 rjmp .L903
8970 .L716:
8971 4f0a 6739 cpi r22,151
8972 4f0c 7105 cpc r23,__zero_reg__
8973 4f0e 04F0 brlt .L702
8974 4f10 86E9 ldi r24,lo8(150)
8975 4f12 90E0 ldi r25,hi8(150)
8976 .L903:
8977 4f14 9093 0000 sts (StickGasHover)+1,r25
8978 4f18 8093 0000 sts StickGasHover,r24
8979 .L702:
8980 4f1c 8091 0000 lds r24,BaroExpandActive
8981 4f20 9091 0000 lds r25,(BaroExpandActive)+1
8982 4f24 892B or r24,r25
8983 4f26 01F0 breq .L720
8984 4f28 8091 0000 lds r24,HoehenWert
8985 4f2c 9091 0000 lds r25,(HoehenWert)+1
8986 4f30 A091 0000 lds r26,(HoehenWert)+2
8987 4f34 B091 0000 lds r27,(HoehenWert)+3
8988 4f38 8093 0000 sts SollHoehe,r24
8989 4f3c 9093 0000 sts (SollHoehe)+1,r25
8990 4f40 A093 0000 sts (SollHoehe)+2,r26
8991 4f44 B093 0000 sts (SollHoehe)+3,r27
8992 4f48 00C0 rjmp .L720
8993 .L677:
8994 4f4a 8091 0000 lds r24,HoehenWert
8995 4f4e 9091 0000 lds r25,(HoehenWert)+1
8996 4f52 A091 0000 lds r26,(HoehenWert)+2
8997 4f56 B091 0000 lds r27,(HoehenWert)+3
8998 4f5a 8059 subi r24,lo8(-(-400))
8999 4f5c 9140 sbci r25,hi8(-(-400))
9000 4f5e A040 sbci r26,hlo8(-(-400))
9001 4f60 B040 sbci r27,hhi8(-(-400))
9002 4f62 8093 0000 sts SollHoehe,r24
9003 4f66 9093 0000 sts (SollHoehe)+1,r25
9004 4f6a A093 0000 sts (SollHoehe)+2,r26
9005 4f6e B093 0000 sts (SollHoehe)+3,r27
9006 4f72 8091 0000 lds r24,EE_Parameter+22
9007 4f76 8823 tst r24
9008 4f78 01F0 breq .L721
9009 4f7a 9927 clr r25
9010 4f7c 00C0 rjmp .L904
9011 .L721:
9012 4f7e 88E7 ldi r24,lo8(120)
9013 4f80 90E0 ldi r25,hi8(120)
9014 .L904:
9015 4f82 9093 0000 sts (StickGasHover)+1,r25
9016 4f86 8093 0000 sts StickGasHover,r24
9017 4f8a E980 ldd r14,Y+1
9018 4f8c FA80 ldd r15,Y+2
9019 4f8e F092 0000 sts (HoverGas)+1,r15
9020 4f92 E092 0000 sts HoverGas,r14
9021 4f96 8EE2 ldi r24,lo8(46)
9022 4f98 8093 0000 sts VarioCharacter,r24
9023 .L720:
9024 4f9c C090 0000 lds r12,HoverGas
9025 4fa0 D090 0000 lds r13,(HoverGas)+1
9026 .L676:
9027 4fa4 E090 0000 lds r14,HoehenWert
9028 4fa8 F090 0000 lds r15,(HoehenWert)+1
9029 4fac 0091 0000 lds r16,(HoehenWert)+2
9030 4fb0 1091 0000 lds r17,(HoehenWert)+3
9031 4fb4 2091 0000 lds r18,SollHoehe
9032 4fb8 3091 0000 lds r19,(SollHoehe)+1
9033 4fbc 4091 0000 lds r20,(SollHoehe)+2
9034 4fc0 5091 0000 lds r21,(SollHoehe)+3
9035 4fc4 2E15 cp r18,r14
9036 4fc6 3F05 cpc r19,r15
9037 4fc8 4007 cpc r20,r16
9038 4fca 5107 cpc r21,r17
9039 4fcc 04F0 brlt .L724
9040 4fce 8091 0000 lds r24,Parameter_ExtraConfig
9041 4fd2 80FD sbrc r24,0
9042 4fd4 00C0 rjmp .L782
9043 .L724:
9044 4fd6 8091 0000 lds r24,BaroExpandActive
9045 4fda 9091 0000 lds r25,(BaroExpandActive)+1
9046 4fde 892B or r24,r25
9047 4fe0 01F0 breq .L725
9048 4fe2 C090 0000 lds r12,HoverGas
9049 4fe6 D090 0000 lds r13,(HoverGas)+1
9050 4fea 00E0 ldi r16,lo8(0)
9051 4fec 10E0 ldi r17,hi8(0)
9052 4fee 00C0 rjmp .L726
9053 .L725:
9054 4ff0 D801 movw r26,r16
9055 4ff2 C701 movw r24,r14
9056 4ff4 821B sub r24,r18
9057 4ff6 930B sbc r25,r19
9058 4ff8 A40B sbc r26,r20
9059 4ffa B50B sbc r27,r21
9060 4ffc 8093 0000 sts tmp_long.1,r24
9061 5000 9093 0000 sts (tmp_long.1)+1,r25
9062 5004 A093 0000 sts (tmp_long.1)+2,r26
9063 5008 B093 0000 sts (tmp_long.1)+3,r27
9064 500c 8230 cpi r24,lo8(-32766)
9065 500e 00E8 ldi r16,hi8(-32766)
9066 5010 9007 cpc r25,r16
9067 5012 0FEF ldi r16,hlo8(-32766)
9068 5014 A007 cpc r26,r16
9069 5016 0FEF ldi r16,hhi8(-32766)
9070 5018 B007 cpc r27,r16
9071 501a 04F4 brge .L727
9072 501c 81E0 ldi r24,lo8(-32767)
9073 501e 90E8 ldi r25,hi8(-32767)
9074 5020 AFEF ldi r26,hlo8(-32767)
9075 5022 BFEF ldi r27,hhi8(-32767)
9076 5024 00C0 rjmp .L905
9077 .L727:
9078 5026 8F5F subi r24,lo8(32767)
9079 5028 9F47 sbci r25,hi8(32767)
9080 502a A040 sbci r26,hlo8(32767)
9081 502c B040 sbci r27,hhi8(32767)
9082 502e 04F0 brlt .L728
9083 5030 8FEF ldi r24,lo8(32767)
9084 5032 9FE7 ldi r25,hi8(32767)
9085 5034 A0E0 ldi r26,hlo8(32767)
9086 5036 B0E0 ldi r27,hhi8(32767)
9087 .L905:
9088 5038 8093 0000 sts tmp_long.1,r24
9089 503c 9093 0000 sts (tmp_long.1)+1,r25
9090 5040 A093 0000 sts (tmp_long.1)+2,r26
9091 5044 B093 0000 sts (tmp_long.1)+3,r27
9092 .L728:
9093 5048 0091 0000 lds r16,tmp_long.1
9094 504c 1091 0000 lds r17,(tmp_long.1)+1
9095 5050 8091 0000 lds r24,Parameter_Hoehe_P
9096 5054 282F mov r18,r24
9097 5056 3327 clr r19
9098 5058 4427 clr r20
9099 505a 5527 clr r21
9100 505c 8091 0000 lds r24,tmp_long.1
9101 5060 9091 0000 lds r25,(tmp_long.1)+1
9102 5064 A091 0000 lds r26,(tmp_long.1)+2
9103 5068 B091 0000 lds r27,(tmp_long.1)+3
9104 506c BC01 movw r22,r24
9105 506e CD01 movw r24,r26
9106 5070 0E94 0000 call __mulsi3
9107 5074 97FF sbrs r25,7
9108 5076 00C0 rjmp .L730
9109 5078 615E subi r22,lo8(-(31))
9110 507a 7F4F sbci r23,hi8(-(31))
9111 507c 8F4F sbci r24,hlo8(-(31))
9112 507e 9F4F sbci r25,hhi8(-(31))
9113 .L730:
9114 5080 25E0 ldi r18,5
9115 5082 9595 1: asr r25
9116 5084 8795 ror r24
9117 5086 7795 ror r23
9118 5088 6795 ror r22
9119 508a 2A95 dec r18
9120 508c 01F4 brne 1b
9121 508e 6093 0000 sts tmp_long.1,r22
9122 5092 7093 0000 sts (tmp_long.1)+1,r23
9123 5096 8093 0000 sts (tmp_long.1)+2,r24
9124 509a 9093 0000 sts (tmp_long.1)+3,r25
9125 509e 6530 cpi r22,lo8(-507)
9126 50a0 2EEF ldi r18,hi8(-507)
9127 50a2 7207 cpc r23,r18
9128 50a4 2FEF ldi r18,hlo8(-507)
9129 50a6 8207 cpc r24,r18
9130 50a8 2FEF ldi r18,hhi8(-507)
9131 50aa 9207 cpc r25,r18
9132 50ac 04F4 brge .L731
9133 50ae 84E0 ldi r24,lo8(-508)
9134 50b0 9EEF ldi r25,hi8(-508)
9135 50b2 AFEF ldi r26,hlo8(-508)
9136 50b4 BFEF ldi r27,hhi8(-508)
9137 50b6 00C0 rjmp .L906
9138 .L731:
9139 50b8 6050 subi r22,lo8(1024)
9140 50ba 7440 sbci r23,hi8(1024)
9141 50bc 8040 sbci r24,hlo8(1024)
9142 50be 9040 sbci r25,hhi8(1024)
9143 50c0 04F0 brlt .L732
9144 50c2 80E0 ldi r24,lo8(1024)
9145 50c4 94E0 ldi r25,hi8(1024)
9146 50c6 A0E0 ldi r26,hlo8(1024)
9147 50c8 B0E0 ldi r27,hhi8(1024)
9148 .L906:
9149 50ca 8093 0000 sts tmp_long.1,r24
9150 50ce 9093 0000 sts (tmp_long.1)+1,r25
9151 50d2 A093 0000 sts (tmp_long.1)+2,r26
9152 50d6 B093 0000 sts (tmp_long.1)+3,r27
9153 .L732:
9154 50da 8090 0000 lds r8,tmp_long.1
9155 50de 9090 0000 lds r9,(tmp_long.1)+1
9156 50e2 2091 0000 lds r18,VarioMeter
9157 50e6 3091 0000 lds r19,(VarioMeter)+1
9158 50ea 37FF sbrs r19,7
9159 50ec 00C0 rjmp .L734
9160 50ee 295F subi r18,lo8(-(7))
9161 50f0 3F4F sbci r19,hi8(-(7))
9162 .L734:
9163 50f2 83E0 ldi r24,3
9164 50f4 3595 1: asr r19
9165 50f6 2795 ror r18
9166 50f8 8A95 dec r24
9167 50fa 01F4 brne 1b
9168 50fc 4FEF ldi r20,hi8(-126)
9169 50fe 2238 cpi r18,lo8(-126)
9170 5100 3407 cpc r19,r20
9171 5102 04F4 brge .L735
9172 5104 21E8 ldi r18,lo8(-127)
9173 5106 3FEF ldi r19,hi8(-127)
9174 5108 00C0 rjmp .L736
9175 .L735:
9176 510a 2038 cpi r18,128
9177 510c 3105 cpc r19,__zero_reg__
9178 510e 04F0 brlt .L736
9179 5110 20E8 ldi r18,lo8(128)
9180 5112 30E0 ldi r19,hi8(128)
9181 .L736:
9182 5114 C901 movw r24,r18
9183 5116 AA27 clr r26
9184 5118 97FD sbrc r25,7
9185 511a A095 com r26
9186 511c BA2F mov r27,r26
9187 511e 2091 0000 lds r18,Parameter_Luftdruck_D
9188 5122 3327 clr r19
9189 5124 4427 clr r20
9190 5126 5527 clr r21
9191 5128 BC01 movw r22,r24
9192 512a CD01 movw r24,r26
9193 512c 0E94 0000 call __mulsi3
9194 5130 97FF sbrs r25,7
9195 5132 00C0 rjmp .L738
9196 5134 6D5F subi r22,lo8(-(3))
9197 5136 7F4F sbci r23,hi8(-(3))
9198 5138 8F4F sbci r24,hlo8(-(3))
9199 513a 9F4F sbci r25,hhi8(-(3))
9200 .L738:
9201 513c B2E0 ldi r27,2
9202 513e 9595 1: asr r25
9203 5140 8795 ror r24
9204 5142 7795 ror r23
9205 5144 6795 ror r22
9206 5146 BA95 dec r27
9207 5148 01F4 brne 1b
9208 514a 9B01 movw r18,r22
9209 514c 5FEF ldi r21,hi8(-255)
9210 514e 6130 cpi r22,lo8(-255)
9211 5150 7507 cpc r23,r21
9212 5152 04F4 brge .L739
9213 5154 20E0 ldi r18,lo8(-256)
9214 5156 3FEF ldi r19,hi8(-256)
9215 5158 00C0 rjmp .L740
9216 .L739:
9217 515a 6F3F cpi r22,255
9218 515c 7105 cpc r23,__zero_reg__
9219 515e 01F0 breq .L740
9220 5160 04F0 brlt .L740
9221 5162 20E0 ldi r18,lo8(256)
9222 5164 31E0 ldi r19,hi8(256)
9223 .L740:
9224 5166 8091 0000 lds r24,FC_StatusFlags
9225 516a 807C andi r24,lo8(-64)
9226 516c 01F0 breq .L742
9227 516e C901 movw r24,r18
9228 5170 37FD sbrc r19,7
9229 5172 0396 adiw r24,3
9230 .L743:
9231 5174 9C01 movw r18,r24
9232 5176 3595 asr r19
9233 5178 2795 ror r18
9234 517a 3595 asr r19
9235 517c 2795 ror r18
9236 517e 00C0 rjmp .L744
9237 .L742:
9238 5180 8091 0000 lds r24,Parameter_ExtraConfig
9239 5184 80FF sbrs r24,0
9240 5186 00C0 rjmp .L744
9241 5188 C901 movw r24,r18
9242 518a 37FD sbrc r19,7
9243 518c 0796 adiw r24,7
9244 .L746:
9245 518e 9C01 movw r18,r24
9246 5190 F3E0 ldi r31,3
9247 5192 3595 1: asr r19
9248 5194 2795 ror r18
9249 5196 FA95 dec r31
9250 5198 01F4 brne 1b
9251 .L744:
9252 519a 820E add r8,r18
9253 519c 931E adc r9,r19
9254 .L726:
9255 519e 2091 0000 lds r18,Parameter_Hoehe_ACC_Wirkung
9256 51a2 2223 tst r18
9257 51a4 01F4 brne .+2
9258 51a6 00C0 rjmp .L747
9259 51a8 6091 0000 lds r22,Mess_Integral_Hoch
9260 51ac 7091 0000 lds r23,(Mess_Integral_Hoch)+1
9261 51b0 8091 0000 lds r24,(Mess_Integral_Hoch)+2
9262 51b4 9091 0000 lds r25,(Mess_Integral_Hoch)+3
9263 51b8 97FF sbrs r25,7
9264 51ba 00C0 rjmp .L748
9265 51bc 6158 subi r22,lo8(-(127))
9266 51be 7F4F sbci r23,hi8(-(127))
9267 51c0 8F4F sbci r24,hlo8(-(127))
9268 51c2 9F4F sbci r25,hhi8(-(127))
9269 .L748:
9270 51c4 E7E0 ldi r30,7
9271 51c6 9595 1: asr r25
9272 51c8 8795 ror r24
9273 51ca 7795 ror r23
9274 51cc 6795 ror r22
9275 51ce EA95 dec r30
9276 51d0 01F4 brne 1b
9277 51d2 3327 clr r19
9278 51d4 4427 clr r20
9279 51d6 5527 clr r21
9280 51d8 0E94 0000 call __mulsi3
9281 51dc 97FF sbrs r25,7
9282 51de 00C0 rjmp .L749
9283 51e0 615E subi r22,lo8(-(31))
9284 51e2 7F4F sbci r23,hi8(-(31))
9285 51e4 8F4F sbci r24,hlo8(-(31))
9286 51e6 9F4F sbci r25,hhi8(-(31))
9287 .L749:
9288 51e8 55E0 ldi r21,5
9289 51ea 9595 1: asr r25
9290 51ec 8795 ror r24
9291 51ee 7795 ror r23
9292 51f0 6795 ror r22
9293 51f2 5A95 dec r21
9294 51f4 01F4 brne 1b
9295 51f6 6093 0000 sts tmp_long.1,r22
9296 51fa 7093 0000 sts (tmp_long.1)+1,r23
9297 51fe 8093 0000 sts (tmp_long.1)+2,r24
9298 5202 9093 0000 sts (tmp_long.1)+3,r25
9299 5206 6138 cpi r22,lo8(-127)
9300 5208 AFEF ldi r26,hi8(-127)
9301 520a 7A07 cpc r23,r26
9302 520c AFEF ldi r26,hlo8(-127)
9303 520e 8A07 cpc r24,r26
9304 5210 AFEF ldi r26,hhi8(-127)
9305 5212 9A07 cpc r25,r26
9306 5214 04F4 brge .L750
9307 5216 80E8 ldi r24,lo8(-128)
9308 5218 9FEF ldi r25,hi8(-128)
9309 521a AFEF ldi r26,hlo8(-128)
9310 521c BFEF ldi r27,hhi8(-128)
9311 521e 00C0 rjmp .L907
9312 .L750:
9313 5220 6F3F cpi r22,lo8(255)
9314 5222 7105 cpc r23,__zero_reg__
9315 5224 8105 cpc r24,__zero_reg__
9316 5226 9105 cpc r25,__zero_reg__
9317 5228 01F0 breq .L751
9318 522a 04F0 brlt .L751
9319 522c 80E0 ldi r24,lo8(256)
9320 522e 91E0 ldi r25,hi8(256)
9321 5230 A0E0 ldi r26,hlo8(256)
9322 5232 B0E0 ldi r27,hhi8(256)
9323 .L907:
9324 5234 8093 0000 sts tmp_long.1,r24
9325 5238 9093 0000 sts (tmp_long.1)+1,r25
9326 523c A093 0000 sts (tmp_long.1)+2,r26
9327 5240 B093 0000 sts (tmp_long.1)+3,r27
9328 .L751:
9329 5244 8091 0000 lds r24,tmp_long.1
9330 5248 9091 0000 lds r25,(tmp_long.1)+1
9331 524c 880E add r8,r24
9332 524e 991E adc r9,r25
9333 .L747:
9334 5250 8091 0000 lds r24,Parameter_Hoehe_GPS_Z
9335 5254 282F mov r18,r24
9336 5256 3327 clr r19
9337 5258 8091 0000 lds r24,FromNaviCtrl_Value+4
9338 525c 9927 clr r25
9339 525e 87FD sbrc r24,7
9340 5260 9095 com r25
9341 5262 289F mul r18,r24
9342 5264 F001 movw r30,r0
9343 5266 299F mul r18,r25
9344 5268 F00D add r31,r0
9345 526a 389F mul r19,r24
9346 526c F00D add r31,r0
9347 526e 1124 clr r1
9348 5270 9F01 movw r18,r30
9349 5272 F7FF sbrs r31,7
9350 5274 00C0 rjmp .L753
9351 5276 2158 subi r18,lo8(-(127))
9352 5278 3F4F sbci r19,hi8(-(127))
9353 .L753:
9354 527a 220F lsl r18
9355 527c 232F mov r18,r19
9356 527e 221F rol r18
9357 5280 330B sbc r19,r19
9358 5282 FFEF ldi r31,hi8(-127)
9359 5284 2138 cpi r18,lo8(-127)
9360 5286 3F07 cpc r19,r31
9361 5288 04F4 brge .L754
9362 528a 20E8 ldi r18,lo8(-128)
9363 528c 3FEF ldi r19,hi8(-128)
9364 528e 00C0 rjmp .L755
9365 .L754:
9366 5290 2F3F cpi r18,255
9367 5292 3105 cpc r19,__zero_reg__
9368 5294 01F0 breq .L755
9369 5296 04F0 brlt .L755
9370 5298 20E0 ldi r18,lo8(256)
9371 529a 31E0 ldi r19,hi8(256)
9372 .L755:
9373 529c 820E add r8,r18
9374 529e 931E adc r9,r19
9375 52a0 C401 movw r24,r8
9376 52a2 AA27 clr r26
9377 52a4 97FD sbrc r25,7
9378 52a6 A095 com r26
9379 52a8 BA2F mov r27,r26
9380 52aa E090 0000 lds r14,HoverGas
9381 52ae F090 0000 lds r15,(HoverGas)+1
9382 52b2 9701 movw r18,r14
9383 52b4 4427 clr r20
9384 52b6 37FD sbrc r19,7
9385 52b8 4095 com r20
9386 52ba 542F mov r21,r20
9387 52bc BC01 movw r22,r24
9388 52be CD01 movw r24,r26
9389 52c0 0E94 0000 call __mulsi3
9390 52c4 97FF sbrs r25,7
9391 52c6 00C0 rjmp .L757
9392 52c8 6150 subi r22,lo8(-(511))
9393 52ca 7E4F sbci r23,hi8(-(511))
9394 52cc 8F4F sbci r24,hlo8(-(511))
9395 52ce 9F4F sbci r25,hhi8(-(511))
9396 .L757:
9397 52d0 29E0 ldi r18,9
9398 52d2 9595 1: asr r25
9399 52d4 8795 ror r24
9400 52d6 7795 ror r23
9401 52d8 6795 ror r22
9402 52da 2A95 dec r18
9403 52dc 01F4 brne 1b
9404 52de C61A sub r12,r22
9405 52e0 D70A sbc r13,r23
9406 52e2 8091 0000 lds r24,AltitudeSetpointTrimming
9407 52e6 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
9408 52ea 892B or r24,r25
9409 52ec 01F0 breq .+2
9410 52ee 00C0 rjmp .L758
9411 52f0 1E14 cp __zero_reg__,r14
9412 52f2 1F04 cpc __zero_reg__,r15
9413 52f4 04F0 brlt .+2
9414 52f6 00C0 rjmp .L758
9415 52f8 9801 movw r18,r16
9416 52fa 17FF sbrs r17,7
9417 52fc 00C0 rjmp .L759
9418 52fe 3095 com r19
9419 5300 2195 neg r18
9420 5302 3F4F sbci r19,lo8(-1)
9421 .L759:
9422 5304 2D33 cpi r18,61
9423 5306 3105 cpc r19,__zero_reg__
9424 5308 00F4 brsh .L760
9425 530a 8091 0000 lds r24,HoverGasMin
9426 530e 9091 0000 lds r25,(HoverGasMin)+1
9427 5312 8C15 cp r24,r12
9428 5314 9D05 cpc r25,r13
9429 5316 04F4 brge .L909
9430 5318 00C0 rjmp .L918
9431 .L760:
9432 531a 2C53 subi r18,lo8(-(-60))
9433 531c 3040 sbci r19,hi8(-(-60))
9434 531e 85E0 ldi r24,5
9435 5320 3695 1: lsr r19
9436 5322 2795 ror r18
9437 5324 8A95 dec r24
9438 5326 01F4 brne 1b
9439 5328 2031 cpi r18,16
9440 532a 3105 cpc r19,__zero_reg__
9441 532c 00F0 brlo .L765
9442 532e 2FE0 ldi r18,lo8(15)
9443 5330 30E0 ldi r19,hi8(15)
9444 .L765:
9445 5332 4091 0000 lds r20,HoverGasMin
9446 5336 5091 0000 lds r21,(HoverGasMin)+1
9447 533a 1016 cp __zero_reg__,r16
9448 533c 1106 cpc __zero_reg__,r17
9449 533e 04F4 brge .L766
9450 5340 80E1 ldi r24,lo8(16)
9451 5342 90E0 ldi r25,hi8(16)
9452 5344 821B sub r24,r18
9453 5346 930B sbc r25,r19
9454 5348 489F mul r20,r24
9455 534a 9001 movw r18,r0
9456 534c 499F mul r20,r25
9457 534e 300D add r19,r0
9458 5350 589F mul r21,r24
9459 5352 300D add r19,r0
9460 5354 1124 clr r1
9461 5356 B4E0 ldi r27,4
9462 5358 3695 1: lsr r19
9463 535a 2795 ror r18
9464 535c BA95 dec r27
9465 535e 01F4 brne 1b
9466 5360 2C15 cp r18,r12
9467 5362 3D05 cpc r19,r13
9468 5364 00F4 brsh .L908
9469 .L918:
9470 5366 8091 0000 lds r24,HoverGasMax
9471 536a 9091 0000 lds r25,(HoverGasMax)+1
9472 536e C816 cp r12,r24
9473 5370 D906 cpc r13,r25
9474 5372 04F0 brlt .L758
9475 .L909:
9476 5374 6C01 movw r12,r24
9477 5376 00C0 rjmp .L758
9478 .L766:
9479 5378 205F subi r18,lo8(-(16))
9480 537a 3F4F sbci r19,hi8(-(16))
9481 537c 8091 0000 lds r24,HoverGasMax
9482 5380 9091 0000 lds r25,(HoverGasMax)+1
9483 5384 829F mul r24,r18
9484 5386 8001 movw r16,r0
9485 5388 839F mul r24,r19
9486 538a 100D add r17,r0
9487 538c 929F mul r25,r18
9488 538e 100D add r17,r0
9489 5390 1124 clr r1
9490 5392 9801 movw r18,r16
9491 5394 A4E0 ldi r26,4
9492 5396 3695 1: lsr r19
9493 5398 2795 ror r18
9494 539a AA95 dec r26
9495 539c 01F4 brne 1b
9496 539e 4C15 cp r20,r12
9497 53a0 5D05 cpc r21,r13
9498 53a2 04F0 brlt .L771
9499 53a4 6A01 movw r12,r20
9500 53a6 00C0 rjmp .L758
9501 .L771:
9502 53a8 C216 cp r12,r18
9503 53aa D306 cpc r13,r19
9504 53ac 00F0 brlo .L758
9505 .L908:
9506 53ae 6901 movw r12,r18
9507 .L758:
9508 53b0 C601 movw r24,r12
9509 53b2 AA27 clr r26
9510 53b4 97FD sbrc r25,7
9511 53b6 A095 com r26
9512 53b8 BA2F mov r27,r26
9513 53ba FDE0 ldi r31,13
9514 53bc 880F 1: lsl r24
9515 53be 991F rol r25
9516 53c0 AA1F rol r26
9517 53c2 BB1F rol r27
9518 53c4 FA95 dec r31
9519 53c6 01F4 brne 1b
9520 53c8 9501 movw r18,r10
9521 53ca 4427 clr r20
9522 53cc 37FD sbrc r19,7
9523 53ce 4095 com r20
9524 53d0 542F mov r21,r20
9525 53d2 BC01 movw r22,r24
9526 53d4 CD01 movw r24,r26
9527 53d6 0E94 0000 call __divmodsi4
9528 53da 2093 0000 sts tmp_long2.2,r18
9529 53de 3093 0000 sts (tmp_long2.2)+1,r19
9530 53e2 4093 0000 sts (tmp_long2.2)+2,r20
9531 53e6 5093 0000 sts (tmp_long2.2)+3,r21
9532 53ea C090 0000 lds r12,tmp_long2.2
9533 53ee D090 0000 lds r13,(tmp_long2.2)+1
9534 53f2 8091 0000 lds r24,FilterHCGas.22
9535 53f6 9091 0000 lds r25,(FilterHCGas.22)+1
9536 53fa 9C01 movw r18,r24
9537 53fc 220F lsl r18
9538 53fe 331F rol r19
9539 5400 280F add r18,r24
9540 5402 391F adc r19,r25
9541 5404 2C0D add r18,r12
9542 5406 3D1D adc r19,r13
9543 5408 37FF sbrs r19,7
9544 540a 00C0 rjmp .L774
9545 540c 2D5F subi r18,lo8(-(3))
9546 540e 3F4F sbci r19,hi8(-(3))
9547 .L774:
9548 5410 A901 movw r20,r18
9549 5412 5595 asr r21
9550 5414 4795 ror r20
9551 5416 5595 asr r21
9552 5418 4795 ror r20
9553 541a 5093 0000 sts (FilterHCGas.22)+1,r21
9554 541e 4093 0000 sts FilterHCGas.22,r20
9555 5422 8091 0000 lds r24,EE_Parameter+14
9556 5426 282F mov r18,r24
9557 5428 3327 clr r19
9558 542a 220F lsl r18
9559 542c 331F rol r19
9560 542e 220F lsl r18
9561 5430 331F rol r19
9562 5432 2417 cp r18,r20
9563 5434 3507 cpc r19,r21
9564 5436 04F4 brge .L910
9565 5438 8091 0000 lds r24,MAX_GAS
9566 543c 282F mov r18,r24
9567 543e 3327 clr r19
9568 5440 220F lsl r18
9569 5442 331F rol r19
9570 5444 220F lsl r18
9571 5446 331F rol r19
9572 5448 2055 subi r18,lo8(-(-80))
9573 544a 3040 sbci r19,hi8(-(-80))
9574 544c 4217 cp r20,r18
9575 544e 5307 cpc r21,r19
9576 5450 04F0 brlt .L776
9577 .L910:
9578 5452 3093 0000 sts (FilterHCGas.22)+1,r19
9579 5456 2093 0000 sts FilterHCGas.22,r18
9580 .L776:
9581 545a 8091 0000 lds r24,Parameter_ExtraConfig
9582 545e 80FF sbrs r24,0
9583 5460 00C0 rjmp .L778
9584 5462 8091 0000 lds r24,FilterHCGas.22
9585 5466 9091 0000 lds r25,(FilterHCGas.22)+1
9586 546a 2981 ldd r18,Y+1
9587 546c 3A81 ldd r19,Y+2
9588 546e 8217 cp r24,r18
9589 5470 9307 cpc r25,r19
9590 5472 04F0 brlt .L779
9591 5474 3093 0000 sts (FilterHCGas.22)+1,r19
9592 5478 2093 0000 sts FilterHCGas.22,r18
9593 .L779:
9594 547c 4091 0000 lds r20,FilterHCGas.22
9595 5480 5091 0000 lds r21,(FilterHCGas.22)+1
9596 5484 5A83 std Y+2,r21
9597 5486 4983 std Y+1,r20
9598 5488 00C0 rjmp .L782
9599 .L778:
9600 548a 2981 ldd r18,Y+1
9601 548c 3A81 ldd r19,Y+2
9602 548e 2E19 sub r18,r14
9603 5490 3F09 sbc r19,r15
9604 5492 37FF sbrs r19,7
9605 5494 00C0 rjmp .L781
9606 5496 2D5F subi r18,lo8(-(3))
9607 5498 3F4F sbci r19,hi8(-(3))
9608 .L781:
9609 549a 3595 asr r19
9610 549c 2795 ror r18
9611 549e 3595 asr r19
9612 54a0 2795 ror r18
9613 54a2 6091 0000 lds r22,FilterHCGas.22
9614 54a6 7091 0000 lds r23,(FilterHCGas.22)+1
9615 54aa 620F add r22,r18
9616 54ac 731F adc r23,r19
9617 54ae 7A83 std Y+2,r23
9618 54b0 6983 std Y+1,r22
9619 54b2 00C0 rjmp .L782
9620 .L673:
9621 54b4 8091 0000 lds r24,EE_Parameter+22
9622 54b8 8823 tst r24
9623 54ba 01F4 brne .L783
9624 54bc 6091 0000 lds r22,HoverGas
9625 54c0 7091 0000 lds r23,(HoverGas)+1
9626 54c4 77FF sbrs r23,7
9627 54c6 00C0 rjmp .L784
9628 54c8 6D5F subi r22,lo8(-(3))
9629 54ca 7F4F sbci r23,hi8(-(3))
9630 .L784:
9631 54cc 7595 asr r23
9632 54ce 6795 ror r22
9633 54d0 7595 asr r23
9634 54d2 6795 ror r22
9635 54d4 4091 0000 lds r20,UBat
9636 54d8 5091 0000 lds r21,(UBat)+1
9637 54dc 8091 0000 lds r24,BattLowVoltageWarning
9638 54e0 282F mov r18,r24
9639 54e2 3327 clr r19
9640 54e4 649F mul r22,r20
9641 54e6 C001 movw r24,r0
9642 54e8 659F mul r22,r21
9643 54ea 900D add r25,r0
9644 54ec 749F mul r23,r20
9645 54ee 900D add r25,r0
9646 54f0 1124 clr r1
9647 54f2 B901 movw r22,r18
9648 54f4 0E94 0000 call __divmodhi4
9649 54f8 CB01 movw r24,r22
9650 54fa 00C0 rjmp .L911
9651 .L783:
9652 54fc 9927 clr r25
9653 .L911:
9654 54fe 9093 0000 sts (StickGasHover)+1,r25
9655 5502 8093 0000 sts StickGasHover,r24
9656 5506 8091 0000 lds r24,StickGasHover
9657 550a 9091 0000 lds r25,(StickGasHover)+1
9658 550e 8734 cpi r24,71
9659 5510 9105 cpc r25,__zero_reg__
9660 5512 04F4 brge .L786
9661 5514 86E4 ldi r24,lo8(70)
9662 5516 90E0 ldi r25,hi8(70)
9663 5518 00C0 rjmp .L912
9664 .L786:
9665 551a 8639 cpi r24,150
9666 551c 9105 cpc r25,__zero_reg__
9667 551e 04F0 brlt .L787
9668 5520 86E9 ldi r24,lo8(150)
9669 5522 90E0 ldi r25,hi8(150)
9670 .L912:
9671 5524 9093 0000 sts (StickGasHover)+1,r25
9672 5528 8093 0000 sts StickGasHover,r24
9673 .L787:
9674 552c 8981 ldd r24,Y+1
9675 552e 9A81 ldd r25,Y+2
9676 5530 9093 0000 sts (FilterHCGas.22)+1,r25
9677 5534 8093 0000 sts FilterHCGas.22,r24
9678 5538 8091 0000 lds r24,FC_StatusFlags
9679 553c 806C ori r24,lo8(-64)
9680 553e 8093 0000 sts FC_StatusFlags,r24
9681 5542 8091 0000 lds r24,FC_StatusFlags2
9682 5546 8D7F andi r24,lo8(-3)
9683 5548 8093 0000 sts FC_StatusFlags2,r24
9684 .L782:
9685 554c 8091 0000 lds r24,FC_StatusFlags
9686 5550 9927 clr r25
9687 5552 9C01 movw r18,r24
9688 5554 2270 andi r18,lo8(2)
9689 5556 3070 andi r19,hi8(2)
9690 5558 81FF sbrs r24,1
9691 555a 00C0 rjmp .L789
9692 555c 8091 0000 lds r24,HoverGasFilter.23
9693 5560 9091 0000 lds r25,(HoverGasFilter.23)+1
9694 5564 A091 0000 lds r26,(HoverGasFilter.23)+2
9695 5568 B091 0000 lds r27,(HoverGasFilter.23)+3
9696 556c 0097 sbiw r24,0
9697 556e A105 cpc r26,__zero_reg__
9698 5570 B105 cpc r27,__zero_reg__
9699 5572 01F0 breq .L791
9700 5574 8091 0000 lds r24,StartTrigger
9701 5578 8130 cpi r24,lo8(1)
9702 557a 01F4 brne .L790
9703 .L791:
9704 557c E981 ldd r30,Y+1
9705 557e FA81 ldd r31,Y+2
9706 5580 CF01 movw r24,r30
9707 5582 AA27 clr r26
9708 5584 97FD sbrc r25,7
9709 5586 A095 com r26
9710 5588 BA2F mov r27,r26
9711 558a 1EE0 ldi r17,14
9712 558c 880F 1: lsl r24
9713 558e 991F rol r25
9714 5590 AA1F rol r26
9715 5592 BB1F rol r27
9716 5594 1A95 dec r17
9717 5596 01F4 brne 1b
9718 5598 8093 0000 sts HoverGasFilter.23,r24
9719 559c 9093 0000 sts (HoverGasFilter.23)+1,r25
9720 55a0 A093 0000 sts (HoverGasFilter.23)+2,r26
9721 55a4 B093 0000 sts (HoverGasFilter.23)+3,r27
9722 .L790:
9723 55a8 8091 0000 lds r24,StartTrigger
9724 55ac 8130 cpi r24,lo8(1)
9725 55ae 01F4 brne .L792
9726 55b0 82E0 ldi r24,lo8(2)
9727 55b2 8093 0000 sts StartTrigger,r24
9728 .L792:
9729 55b6 E980 ldd r14,Y+1
9730 55b8 FA80 ldd r15,Y+2
9731 55ba C701 movw r24,r14
9732 55bc AA27 clr r26
9733 55be 97FD sbrc r25,7
9734 55c0 A095 com r26
9735 55c2 BA2F mov r27,r26
9736 55c4 9501 movw r18,r10
9737 55c6 4427 clr r20
9738 55c8 37FD sbrc r19,7
9739 55ca 4095 com r20
9740 55cc 542F mov r21,r20
9741 55ce BC01 movw r22,r24
9742 55d0 CD01 movw r24,r26
9743 55d2 0E94 0000 call __mulsi3
9744 55d6 DC01 movw r26,r24
9745 55d8 CB01 movw r24,r22
9746 55da 8093 0000 sts tmp_long2.2,r24
9747 55de 9093 0000 sts (tmp_long2.2)+1,r25
9748 55e2 A093 0000 sts (tmp_long2.2)+2,r26
9749 55e6 B093 0000 sts (tmp_long2.2)+3,r27
9750 55ea B7FF sbrs r27,7
9751 55ec 00C0 rjmp .L793
9752 55ee 8150 subi r24,lo8(-(8191))
9753 55f0 904E sbci r25,hi8(-(8191))
9754 55f2 AF4F sbci r26,hlo8(-(8191))
9755 55f4 BF4F sbci r27,hhi8(-(8191))
9756 .L793:
9757 55f6 7C01 movw r14,r24
9758 55f8 8D01 movw r16,r26
9759 55fa ADE0 ldi r26,13
9760 55fc 1595 1: asr r17
9761 55fe 0795 ror r16
9762 5600 F794 ror r15
9763 5602 E794 ror r14
9764 5604 AA95 dec r26
9765 5606 01F4 brne 1b
9766 5608 E092 0000 sts tmp_long2.2,r14
9767 560c F092 0000 sts (tmp_long2.2)+1,r15
9768 5610 0093 0000 sts (tmp_long2.2)+2,r16
9769 5614 1093 0000 sts (tmp_long2.2)+3,r17
9770 5618 6091 0000 lds r22,modell_fliegt
9771 561c 7091 0000 lds r23,(modell_fliegt)+1
9772 5620 2FE0 ldi r18,hi8(4000)
9773 5622 603A cpi r22,lo8(4000)
9774 5624 7207 cpc r23,r18
9775 5626 00F4 brsh .L794
9776 5628 8091 0000 lds r24,HoverGasFilter.23
9777 562c 9091 0000 lds r25,(HoverGasFilter.23)+1
9778 5630 A091 0000 lds r26,(HoverGasFilter.23)+2
9779 5634 B091 0000 lds r27,(HoverGasFilter.23)+3
9780 5638 9C01 movw r18,r24
9781 563a AD01 movw r20,r26
9782 563c FAE0 ldi r31,10
9783 563e 5695 1: lsr r21
9784 5640 4795 ror r20
9785 5642 3795 ror r19
9786 5644 2795 ror r18
9787 5646 FA95 dec r31
9788 5648 01F4 brne 1b
9789 564a 821B sub r24,r18
9790 564c 930B sbc r25,r19
9791 564e A40B sbc r26,r20
9792 5650 B50B sbc r27,r21
9793 5652 A801 movw r20,r16
9794 5654 9701 movw r18,r14
9795 5656 E4E0 ldi r30,4
9796 5658 220F 1: lsl r18
9797 565a 331F rol r19
9798 565c 441F rol r20
9799 565e 551F rol r21
9800 5660 EA95 dec r30
9801 5662 01F4 brne 1b
9802 5664 820F add r24,r18
9803 5666 931F adc r25,r19
9804 5668 A41F adc r26,r20
9805 566a B51F adc r27,r21
9806 566c 8093 0000 sts HoverGasFilter.23,r24
9807 5670 9093 0000 sts (HoverGasFilter.23)+1,r25
9808 5674 A093 0000 sts (HoverGasFilter.23)+2,r26
9809 5678 B093 0000 sts (HoverGasFilter.23)+3,r27
9810 .L794:
9811 567c 6054 subi r22,lo8(8000)
9812 567e 7F41 sbci r23,hi8(8000)
9813 5680 00F4 brsh .L795
9814 5682 8091 0000 lds r24,HoverGasFilter.23
9815 5686 9091 0000 lds r25,(HoverGasFilter.23)+1
9816 568a A091 0000 lds r26,(HoverGasFilter.23)+2
9817 568e B091 0000 lds r27,(HoverGasFilter.23)+3
9818 5692 9C01 movw r18,r24
9819 5694 AD01 movw r20,r26
9820 5696 6CE0 ldi r22,12
9821 5698 5695 1: lsr r21
9822 569a 4795 ror r20
9823 569c 3795 ror r19
9824 569e 2795 ror r18
9825 56a0 6A95 dec r22
9826 56a2 01F4 brne 1b
9827 56a4 821B sub r24,r18
9828 56a6 930B sbc r25,r19
9829 56a8 A40B sbc r26,r20
9830 56aa B50B sbc r27,r21
9831 56ac A801 movw r20,r16
9832 56ae 9701 movw r18,r14
9833 56b0 F2E0 ldi r31,2
9834 56b2 220F 1: lsl r18
9835 56b4 331F rol r19
9836 56b6 441F rol r20
9837 56b8 551F rol r21
9838 56ba FA95 dec r31
9839 56bc 01F4 brne 1b
9840 56be 820F add r24,r18
9841 56c0 931F adc r25,r19
9842 56c2 A41F adc r26,r20
9843 56c4 B51F adc r27,r21
9844 56c6 00C0 rjmp .L913
9845 .L795:
9846 56c8 8091 0000 lds r24,VarioMeter
9847 56cc 9091 0000 lds r25,(VarioMeter)+1
9848 56d0 8091 0000 lds r24,VarioMeter
9849 56d4 9091 0000 lds r25,(VarioMeter)+1
9850 56d8 97FF sbrs r25,7
9851 56da 00C0 rjmp .L798
9852 56dc 9095 com r25
9853 56de 8195 neg r24
9854 56e0 9F4F sbci r25,lo8(-1)
9855 .L798:
9856 56e2 8436 cpi r24,100
9857 56e4 9105 cpc r25,__zero_reg__
9858 56e6 04F4 brge .L796
9859 56e8 8091 0000 lds r24,HoehenWert
9860 56ec 9091 0000 lds r25,(HoehenWert)+1
9861 56f0 2091 0000 lds r18,SollHoehe
9862 56f4 3091 0000 lds r19,(SollHoehe)+1
9863 56f8 821B sub r24,r18
9864 56fa 930B sbc r25,r19
9865 56fc 8150 subi r24,lo8(-(255))
9866 56fe 9F4F sbci r25,hi8(-(255))
9867 5700 8F5F subi r24,lo8(511)
9868 5702 9140 sbci r25,hi8(511)
9869 5704 00F4 brsh .L796
9870 5706 8091 0000 lds r24,HoverGasFilter.23
9871 570a 9091 0000 lds r25,(HoverGasFilter.23)+1
9872 570e A091 0000 lds r26,(HoverGasFilter.23)+2
9873 5712 B091 0000 lds r27,(HoverGasFilter.23)+3
9874 5716 9C01 movw r18,r24
9875 5718 AD01 movw r20,r26
9876 571a EEE0 ldi r30,14
9877 571c 5695 1: lsr r21
9878 571e 4795 ror r20
9879 5720 3795 ror r19
9880 5722 2795 ror r18
9881 5724 EA95 dec r30
9882 5726 01F4 brne 1b
9883 5728 821B sub r24,r18
9884 572a 930B sbc r25,r19
9885 572c A40B sbc r26,r20
9886 572e B50B sbc r27,r21
9887 5730 8E0D add r24,r14
9888 5732 9F1D adc r25,r15
9889 5734 A01F adc r26,r16
9890 5736 B11F adc r27,r17
9891 .L913:
9892 5738 8093 0000 sts HoverGasFilter.23,r24
9893 573c 9093 0000 sts (HoverGasFilter.23)+1,r25
9894 5740 A093 0000 sts (HoverGasFilter.23)+2,r26
9895 5744 B093 0000 sts (HoverGasFilter.23)+3,r27
9896 .L796:
9897 5748 8091 0000 lds r24,HoverGasFilter.23
9898 574c 9091 0000 lds r25,(HoverGasFilter.23)+1
9899 5750 A091 0000 lds r26,(HoverGasFilter.23)+2
9900 5754 B091 0000 lds r27,(HoverGasFilter.23)+3
9901 5758 7EE0 ldi r23,14
9902 575a B695 1: lsr r27
9903 575c A795 ror r26
9904 575e 9795 ror r25
9905 5760 8795 ror r24
9906 5762 7A95 dec r23
9907 5764 01F4 brne 1b
9908 5766 9093 0000 sts (HoverGas)+1,r25
9909 576a 8093 0000 sts HoverGas,r24
9910 576e 4091 0000 lds r20,EE_Parameter+20
9911 5772 4423 tst r20
9912 5774 01F0 breq .L799
9913 5776 5527 clr r21
9914 5778 9C01 movw r18,r24
9915 577a BA01 movw r22,r20
9916 577c 0E94 0000 call __divmodhi4
9917 5780 C901 movw r24,r18
9918 5782 861B sub r24,r22
9919 5784 970B sbc r25,r23
9920 5786 9093 0000 sts (HoverGasMin)+1,r25
9921 578a 8093 0000 sts HoverGasMin,r24
9922 578e 260F add r18,r22
9923 5790 371F adc r19,r23
9924 5792 3093 0000 sts (HoverGasMax)+1,r19
9925 5796 2093 0000 sts HoverGasMax,r18
9926 579a 00C0 rjmp .L802
9927 .L799:
9928 579c 1092 0000 sts (HoverGasMin)+1,__zero_reg__
9929 57a0 1092 0000 sts HoverGasMin,__zero_reg__
9930 57a4 8FEF ldi r24,lo8(1023)
9931 57a6 93E0 ldi r25,hi8(1023)
9932 57a8 9093 0000 sts (HoverGasMax)+1,r25
9933 57ac 8093 0000 sts HoverGasMax,r24
9934 57b0 00C0 rjmp .L802
9935 .L789:
9936 57b2 1092 0000 sts StartTrigger,__zero_reg__
9937 57b6 1092 0000 sts HoverGasFilter.23,__zero_reg__
9938 57ba 1092 0000 sts (HoverGasFilter.23)+1,__zero_reg__
9939 57be 1092 0000 sts (HoverGasFilter.23)+2,__zero_reg__
9940 57c2 1092 0000 sts (HoverGasFilter.23)+3,__zero_reg__
9941 57c6 3093 0000 sts (HoverGas)+1,r19
9942 57ca 2093 0000 sts HoverGas,r18
9943 57ce 00C0 rjmp .L802
9944 .L653:
9945 57d0 8091 0000 lds r24,FC_StatusFlags
9946 57d4 806C ori r24,lo8(-64)
9947 57d6 8093 0000 sts FC_StatusFlags,r24
9948 .L802:
9949 57da 8091 0000 lds r24,NC_To_FC_Flags
9950 57de 81FF sbrs r24,1
9951 57e0 00C0 rjmp .L803
9952 57e2 8981 ldd r24,Y+1
9953 57e4 9A81 ldd r25,Y+2
9954 57e6 97FD sbrc r25,7
9955 57e8 0396 adiw r24,3
9956 .L805:
9957 57ea 9595 asr r25
9958 57ec 8795 ror r24
9959 57ee 9595 asr r25
9960 57f0 8795 ror r24
9961 57f2 2091 0000 lds r18,HooverGasEmergencyPercent
9962 57f6 3091 0000 lds r19,(HooverGasEmergencyPercent)+1
9963 57fa 2817 cp r18,r24
9964 57fc 3907 cpc r19,r25
9965 57fe 00F4 brsh .L804
9966 5800 8091 0000 lds r24,HoverGas
9967 5804 9091 0000 lds r25,(HoverGas)+1
9968 5808 892B or r24,r25
9969 580a 01F0 breq .L804
9970 580c 220F lsl r18
9971 580e 331F rol r19
9972 5810 220F lsl r18
9973 5812 331F rol r19
9974 5814 3A83 std Y+2,r19
9975 5816 2983 std Y+1,r18
9976 .L804:
9977 5818 8091 0000 lds r24,HoehenWert
9978 581c 9091 0000 lds r25,(HoehenWert)+1
9979 5820 A091 0000 lds r26,(HoehenWert)+2
9980 5824 B091 0000 lds r27,(HoehenWert)+3
9981 5828 8093 0000 sts SollHoehe,r24
9982 582c 9093 0000 sts (SollHoehe)+1,r25
9983 5830 A093 0000 sts (SollHoehe)+2,r26
9984 5834 B093 0000 sts (SollHoehe)+3,r27
9985 5838 88E9 ldi r24,lo8(15000)
9986 583a 9AE3 ldi r25,hi8(15000)
9987 583c 9093 0000 sts (beeptime)+1,r25
9988 5840 8093 0000 sts beeptime,r24
9989 5844 80E0 ldi r24,lo8(3584)
9990 5846 9EE0 ldi r25,hi8(3584)
9991 5848 9093 0000 sts (BeepMuster)+1,r25
9992 584c 8093 0000 sts BeepMuster,r24
9993 .L803:
9994 5850 2091 0000 lds r18,MIN_GAS
9995 5854 822F mov r24,r18
9996 5856 9927 clr r25
9997 5858 880F lsl r24
9998 585a 991F rol r25
9999 585c 880F lsl r24
10000 585e 991F rol r25
10001 5860 8896 adiw r24,40
10002 5862 6981 ldd r22,Y+1
10003 5864 7A81 ldd r23,Y+2
10004 5866 8617 cp r24,r22
10005 5868 9707 cpc r25,r23
10006 586a 04F0 brlt .L806
10007 586c 9A83 std Y+2,r25
10008 586e 8983 std Y+1,r24
10009 .L806:
10010 5870 7091 0000 lds r23,MAX_GAS
10011 5874 7D8B std Y+21,r23
10012 5876 872F mov r24,r23
10013 5878 9927 clr r25
10014 587a 880F lsl r24
10015 587c 991F rol r25
10016 587e 880F lsl r24
10017 5880 991F rol r25
10018 5882 8055 subi r24,lo8(-(-80))
10019 5884 9040 sbci r25,hi8(-(-80))
10020 5886 A981 ldd r26,Y+1
10021 5888 BA81 ldd r27,Y+2
10022 588a 8A17 cp r24,r26
10023 588c 9B07 cpc r25,r27
10024 588e 04F4 brge .L807
10025 5890 9A83 std Y+2,r25
10026 5892 8983 std Y+1,r24
10027 .L807:
10028 5894 8091 0000 lds r24,MissingMotor
10029 5898 8823 tst r24
10030 589a 01F4 brne .L809
10031 589c 8091 0000 lds r24,Capacity+6
10032 58a0 8F3F cpi r24,lo8(-1)
10033 58a2 01F4 brne .L809
10034 58a4 8091 0000 lds r24,NC_ErrorCode
10035 58a8 8823 tst r24
10036 58aa 01F0 breq .L808
10037 .L809:
10038 58ac 8091 0000 lds r24,modell_fliegt
10039 58b0 9091 0000 lds r25,(modell_fliegt)+1
10040 58b4 0297 sbiw r24,2
10041 58b6 C097 sbiw r24,48
10042 58b8 00F4 brsh .L808
10043 58ba E981 ldd r30,Y+1
10044 58bc FA81 ldd r31,Y+2
10045 58be 1E16 cp __zero_reg__,r30
10046 58c0 1F06 cpc __zero_reg__,r31
10047 58c2 04F4 brge .L808
10048 58c4 81E0 ldi r24,lo8(1)
10049 58c6 90E0 ldi r25,hi8(1)
10050 58c8 9093 0000 sts (modell_fliegt)+1,r25
10051 58cc 8093 0000 sts modell_fliegt,r24
10052 58d0 E22E mov r14,r18
10053 58d2 FF24 clr r15
10054 58d4 EE0C lsl r14
10055 58d6 FF1C rol r15
10056 58d8 EE0C lsl r14
10057 58da FF1C rol r15
10058 58dc 8701 movw r16,r14
10059 58de 085D subi r16,lo8(-(40))
10060 58e0 1F4F sbci r17,hi8(-(40))
10061 58e2 1A83 std Y+2,r17
10062 58e4 0983 std Y+1,r16
10063 .L808:
10064 58e6 2981 ldd r18,Y+1
10065 58e8 3A81 ldd r19,Y+2
10066 58ea 3093 0000 sts (DebugOut+16)+1,r19
10067 58ee 2093 0000 sts DebugOut+16,r18
10068 58f2 8091 0000 lds r24,sollGier.0
10069 58f6 9091 0000 lds r25,(sollGier.0)+1
10070 58fa A091 0000 lds r26,(sollGier.0)+2
10071 58fe B091 0000 lds r27,(sollGier.0)+3
10072 5902 12E0 ldi r17,2
10073 5904 880F 1: lsl r24
10074 5906 991F rol r25
10075 5908 AA1F rol r26
10076 590a BB1F rol r27
10077 590c 1A95 dec r17
10078 590e 01F4 brne 1b
10079 5910 0091 0000 lds r16,MesswertGier
10080 5914 1091 0000 lds r17,(MesswertGier)+1
10081 5918 081B sub r16,r24
10082 591a 190B sbc r17,r25
10083 591c 213A cpi r18,161
10084 591e 3105 cpc r19,__zero_reg__
10085 5920 04F0 brlt .L811
10086 5922 C901 movw r24,r18
10087 5924 37FD sbrc r19,7
10088 5926 0196 adiw r24,1
10089 .L813:
10090 5928 9595 asr r25
10091 592a 8795 ror r24
10092 592c 8017 cp r24,r16
10093 592e 9107 cpc r25,r17
10094 5930 04F4 brge .L812
10095 5932 8C01 movw r16,r24
10096 .L812:
10097 5934 9095 com r25
10098 5936 8195 neg r24
10099 5938 9F4F sbci r25,lo8(-1)
10100 593a 0817 cp r16,r24
10101 593c 1907 cpc r17,r25
10102 593e 04F4 brge .L818
10103 5940 8C01 movw r16,r24
10104 5942 00C0 rjmp .L818
10105 .L811:
10106 5944 0135 cpi r16,81
10107 5946 1105 cpc r17,__zero_reg__
10108 5948 04F0 brlt .L819
10109 594a 00E5 ldi r16,lo8(80)
10110 594c 10E0 ldi r17,hi8(80)
10111 .L819:
10112 594e 3FEF ldi r19,hi8(-80)
10113 5950 003B cpi r16,lo8(-80)
10114 5952 1307 cpc r17,r19
10115 5954 04F4 brge .L818
10116 5956 00EB ldi r16,lo8(-80)
10117 5958 1FEF ldi r17,hi8(-80)
10118 .L818:
10119 595a 4D89 ldd r20,Y+21
10120 595c 242F mov r18,r20
10121 595e 3327 clr r19
10122 5960 220F lsl r18
10123 5962 331F rol r19
10124 5964 220F lsl r18
10125 5966 331F rol r19
10126 5968 C901 movw r24,r18
10127 596a 6981 ldd r22,Y+1
10128 596c 7A81 ldd r23,Y+2
10129 596e 861B sub r24,r22
10130 5970 970B sbc r25,r23
10131 5972 8017 cp r24,r16
10132 5974 9107 cpc r25,r17
10133 5976 04F4 brge .L821
10134 5978 8C01 movw r16,r24
10135 .L821:
10136 597a 8981 ldd r24,Y+1
10137 597c 9A81 ldd r25,Y+2
10138 597e 821B sub r24,r18
10139 5980 930B sbc r25,r19
10140 5982 0817 cp r16,r24
10141 5984 1907 cpc r17,r25
10142 5986 04F4 brge .L822
10143 5988 8C01 movw r16,r24
10144 .L822:
10145 598a 8091 0000 lds r24,MesswertNick
10146 598e 9091 0000 lds r25,(MesswertNick)+1
10147 5992 6091 0000 lds r22,StickNick
10148 5996 7091 0000 lds r23,(StickNick)+1
10149 599a 861B sub r24,r22
10150 599c 970B sbc r25,r23
10151 599e 9093 0000 sts (DiffNick)+1,r25
10152 59a2 8093 0000 sts DiffNick,r24
10153 59a6 D090 0000 lds r13,IntegralFaktor
10154 59aa 2091 0000 lds r18,SummeNick
10155 59ae 3091 0000 lds r19,(SummeNick)+1
10156 59b2 4091 0000 lds r20,(SummeNick)+2
10157 59b6 5091 0000 lds r21,(SummeNick)+3
10158 59ba DD20 tst r13
10159 59bc 01F0 breq .L823
10160 59be 661A sub r6,r22
10161 59c0 770A sbc r7,r23
10162 59c2 C301 movw r24,r6
10163 59c4 AA27 clr r26
10164 59c6 97FD sbrc r25,7
10165 59c8 A095 com r26
10166 59ca BA2F mov r27,r26
10167 59cc 00C0 rjmp .L914
10168 .L823:
10169 59ce AA27 clr r26
10170 59d0 97FD sbrc r25,7
10171 59d2 A095 com r26
10172 59d4 BA2F mov r27,r26
10173 .L914:
10174 59d6 280F add r18,r24
10175 59d8 391F adc r19,r25
10176 59da 4A1F adc r20,r26
10177 59dc 5B1F adc r21,r27
10178 59de 2093 0000 sts SummeNick,r18
10179 59e2 3093 0000 sts (SummeNick)+1,r19
10180 59e6 4093 0000 sts (SummeNick)+2,r20
10181 59ea 5093 0000 sts (SummeNick)+3,r21
10182 59ee 8091 0000 lds r24,SummeNick
10183 59f2 9091 0000 lds r25,(SummeNick)+1
10184 59f6 A091 0000 lds r26,(SummeNick)+2
10185 59fa B091 0000 lds r27,(SummeNick)+3
10186 59fe 8150 subi r24,lo8(64001)
10187 5a00 9A4F sbci r25,hi8(64001)
10188 5a02 A040 sbci r26,hlo8(64001)
10189 5a04 B040 sbci r27,hhi8(64001)
10190 5a06 04F0 brlt .L825
10191 5a08 80E0 ldi r24,lo8(64000)
10192 5a0a 9AEF ldi r25,hi8(64000)
10193 5a0c A0E0 ldi r26,hlo8(64000)
10194 5a0e B0E0 ldi r27,hhi8(64000)
10195 5a10 8093 0000 sts SummeNick,r24
10196 5a14 9093 0000 sts (SummeNick)+1,r25
10197 5a18 A093 0000 sts (SummeNick)+2,r26
10198 5a1c B093 0000 sts (SummeNick)+3,r27
10199 .L825:
10200 5a20 8091 0000 lds r24,SummeNick
10201 5a24 9091 0000 lds r25,(SummeNick)+1
10202 5a28 A091 0000 lds r26,(SummeNick)+2
10203 5a2c B091 0000 lds r27,(SummeNick)+3
10204 5a30 8050 subi r24,lo8(-64000)
10205 5a32 9640 sbci r25,hi8(-64000)
10206 5a34 AF4F sbci r26,hlo8(-64000)
10207 5a36 BF4F sbci r27,hhi8(-64000)
10208 5a38 04F4 brge .L826
10209 5a3a 80E0 ldi r24,lo8(-64000)
10210 5a3c 96E0 ldi r25,hi8(-64000)
10211 5a3e AFEF ldi r26,hlo8(-64000)
10212 5a40 BFEF ldi r27,hhi8(-64000)
10213 5a42 8093 0000 sts SummeNick,r24
10214 5a46 9093 0000 sts (SummeNick)+1,r25
10215 5a4a A093 0000 sts (SummeNick)+2,r26
10216 5a4e B093 0000 sts (SummeNick)+3,r27
10217 .L826:
10218 5a52 C090 0000 lds r12,EE_Parameter+35
10219 5a56 2091 0000 lds r18,DiffNick
10220 5a5a 3091 0000 lds r19,(DiffNick)+1
10221 5a5e 78E0 ldi r23,lo8(8)
10222 5a60 E72E mov r14,r23
10223 5a62 EC14 cp r14,r12
10224 5a64 00F0 brlo .L827
10225 5a66 8C2D mov r24,r12
10226 5a68 9927 clr r25
10227 5a6a 829F mul r24,r18
10228 5a6c A001 movw r20,r0
10229 5a6e 839F mul r24,r19
10230 5a70 500D add r21,r0
10231 5a72 929F mul r25,r18
10232 5a74 500D add r21,r0
10233 5a76 1124 clr r1
10234 5a78 CA01 movw r24,r20
10235 5a7a 57FD sbrc r21,7
10236 5a7c 0796 adiw r24,7
10237 .L828:
10238 5a7e 7C01 movw r14,r24
10239 5a80 63E0 ldi r22,3
10240 5a82 F594 1: asr r15
10241 5a84 E794 ror r14
10242 5a86 6A95 dec r22
10243 5a88 01F4 brne 1b
10244 5a8a 00C0 rjmp .L829
10245 .L827:
10246 5a8c 8C2D mov r24,r12
10247 5a8e 8695 lsr r24
10248 5a90 9927 clr r25
10249 5a92 829F mul r24,r18
10250 5a94 B001 movw r22,r0
10251 5a96 839F mul r24,r19
10252 5a98 700D add r23,r0
10253 5a9a 929F mul r25,r18
10254 5a9c 700D add r23,r0
10255 5a9e 1124 clr r1
10256 5aa0 CB01 movw r24,r22
10257 5aa2 77FD sbrc r23,7
10258 5aa4 0396 adiw r24,3
10259 .L830:
10260 5aa6 7C01 movw r14,r24
10261 5aa8 F594 asr r15
10262 5aaa E794 ror r14
10263 5aac F594 asr r15
10264 5aae E794 ror r14
10265 .L829:
10266 5ab0 A090 0000 lds r10,Ki
10267 5ab4 B090 0000 lds r11,(Ki)+1
10268 5ab8 9501 movw r18,r10
10269 5aba 4427 clr r20
10270 5abc 37FD sbrc r19,7
10271 5abe 4095 com r20
10272 5ac0 542F mov r21,r20
10273 5ac2 8091 0000 lds r24,SummeNick
10274 5ac6 9091 0000 lds r25,(SummeNick)+1
10275 5aca A091 0000 lds r26,(SummeNick)+2
10276 5ace B091 0000 lds r27,(SummeNick)+3
10277 5ad2 BC01 movw r22,r24
10278 5ad4 CD01 movw r24,r26
10279 5ad6 0E94 0000 call __divmodsi4
10280 5ada E20E add r14,r18
10281 5adc F31E adc r15,r19
10282 5ade 9090 0000 lds r9,Parameter_DynamicStability
10283 5ae2 692D mov r22,r9
10284 5ae4 7727 clr r23
10285 5ae6 8827 clr r24
10286 5ae8 9927 clr r25
10287 5aea 9801 movw r18,r16
10288 5aec 17FF sbrs r17,7
10289 5aee 00C0 rjmp .L831
10290 5af0 2227 clr r18
10291 5af2 3327 clr r19
10292 5af4 201B sub r18,r16
10293 5af6 310B sbc r19,r17
10294 .L831:
10295 5af8 37FF sbrs r19,7
10296 5afa 00C0 rjmp .L832
10297 5afc 2F5F subi r18,lo8(-(1))
10298 5afe 3F4F sbci r19,hi8(-(1))
10299 .L832:
10300 5b00 3595 asr r19
10301 5b02 2795 ror r18
10302 5b04 A981 ldd r26,Y+1
10303 5b06 BA81 ldd r27,Y+2
10304 5b08 2A0F add r18,r26
10305 5b0a 3B1F adc r19,r27
10306 5b0c 4427 clr r20
10307 5b0e 37FD sbrc r19,7
10308 5b10 4095 com r20
10309 5b12 542F mov r21,r20
10310 5b14 0E94 0000 call __mulsi3
10311 5b18 97FF sbrs r25,7
10312 5b1a 00C0 rjmp .L833
10313 5b1c 615C subi r22,lo8(-(63))
10314 5b1e 7F4F sbci r23,hi8(-(63))
10315 5b20 8F4F sbci r24,hlo8(-(63))
10316 5b22 9F4F sbci r25,hhi8(-(63))
10317 .L833:
10318 5b24 26E0 ldi r18,6
10319 5b26 9595 1: asr r25
10320 5b28 8795 ror r24
10321 5b2a 7795 ror r23
10322 5b2c 6795 ror r22
10323 5b2e 2A95 dec r18
10324 5b30 01F4 brne 1b
10325 5b32 9B01 movw r18,r22
10326 5b34 6E15 cp r22,r14
10327 5b36 7F05 cpc r23,r15
10328 5b38 04F4 brge .L834
10329 5b3a 7B01 movw r14,r22
10330 .L834:
10331 5b3c 3095 com r19
10332 5b3e 2195 neg r18
10333 5b40 3F4F sbci r19,lo8(-1)
10334 5b42 E216 cp r14,r18
10335 5b44 F306 cpc r15,r19
10336 5b46 04F4 brge .L835
10337 5b48 7901 movw r14,r18
10338 .L835:
10339 5b4a 8091 0000 lds r24,MesswertRoll
10340 5b4e 9091 0000 lds r25,(MesswertRoll)+1
10341 5b52 6091 0000 lds r22,StickRoll
10342 5b56 7091 0000 lds r23,(StickRoll)+1
10343 5b5a 861B sub r24,r22
10344 5b5c 970B sbc r25,r23
10345 5b5e 9093 0000 sts (DiffRoll)+1,r25
10346 5b62 8093 0000 sts DiffRoll,r24
10347 5b66 2091 0000 lds r18,SummeRoll
10348 5b6a 3091 0000 lds r19,(SummeRoll)+1
10349 5b6e 4091 0000 lds r20,(SummeRoll)+2
10350 5b72 5091 0000 lds r21,(SummeRoll)+3
10351 5b76 DD20 tst r13
10352 5b78 01F0 breq .L836
10353 5b7a 461A sub r4,r22
10354 5b7c 570A sbc r5,r23
10355 5b7e C201 movw r24,r4
10356 5b80 AA27 clr r26
10357 5b82 97FD sbrc r25,7
10358 5b84 A095 com r26
10359 5b86 BA2F mov r27,r26
10360 5b88 00C0 rjmp .L915
10361 .L836:
10362 5b8a AA27 clr r26
10363 5b8c 97FD sbrc r25,7
10364 5b8e A095 com r26
10365 5b90 BA2F mov r27,r26
10366 .L915:
10367 5b92 280F add r18,r24
10368 5b94 391F adc r19,r25
10369 5b96 4A1F adc r20,r26
10370 5b98 5B1F adc r21,r27
10371 5b9a 2093 0000 sts SummeRoll,r18
10372 5b9e 3093 0000 sts (SummeRoll)+1,r19
10373 5ba2 4093 0000 sts (SummeRoll)+2,r20
10374 5ba6 5093 0000 sts (SummeRoll)+3,r21
10375 5baa 8091 0000 lds r24,SummeRoll
10376 5bae 9091 0000 lds r25,(SummeRoll)+1
10377 5bb2 A091 0000 lds r26,(SummeRoll)+2
10378 5bb6 B091 0000 lds r27,(SummeRoll)+3
10379 5bba 8150 subi r24,lo8(64001)
10380 5bbc 9A4F sbci r25,hi8(64001)
10381 5bbe A040 sbci r26,hlo8(64001)
10382 5bc0 B040 sbci r27,hhi8(64001)
10383 5bc2 04F0 brlt .L838
10384 5bc4 80E0 ldi r24,lo8(64000)
10385 5bc6 9AEF ldi r25,hi8(64000)
10386 5bc8 A0E0 ldi r26,hlo8(64000)
10387 5bca B0E0 ldi r27,hhi8(64000)
10388 5bcc 8093 0000 sts SummeRoll,r24
10389 5bd0 9093 0000 sts (SummeRoll)+1,r25
10390 5bd4 A093 0000 sts (SummeRoll)+2,r26
10391 5bd8 B093 0000 sts (SummeRoll)+3,r27
10392 .L838:
10393 5bdc 8091 0000 lds r24,SummeRoll
10394 5be0 9091 0000 lds r25,(SummeRoll)+1
10395 5be4 A091 0000 lds r26,(SummeRoll)+2
10396 5be8 B091 0000 lds r27,(SummeRoll)+3
10397 5bec 8050 subi r24,lo8(-64000)
10398 5bee 9640 sbci r25,hi8(-64000)
10399 5bf0 AF4F sbci r26,hlo8(-64000)
10400 5bf2 BF4F sbci r27,hhi8(-64000)
10401 5bf4 04F4 brge .L839
10402 5bf6 80E0 ldi r24,lo8(-64000)
10403 5bf8 96E0 ldi r25,hi8(-64000)
10404 5bfa AFEF ldi r26,hlo8(-64000)
10405 5bfc BFEF ldi r27,hhi8(-64000)
10406 5bfe 8093 0000 sts SummeRoll,r24
10407 5c02 9093 0000 sts (SummeRoll)+1,r25
10408 5c06 A093 0000 sts (SummeRoll)+2,r26
10409 5c0a B093 0000 sts (SummeRoll)+3,r27
10410 .L839:
10411 5c0e 2091 0000 lds r18,DiffRoll
10412 5c12 3091 0000 lds r19,(DiffRoll)+1
10413 5c16 48E0 ldi r20,lo8(8)
10414 5c18 4C15 cp r20,r12
10415 5c1a 00F0 brlo .L840
10416 5c1c 8C2D mov r24,r12
10417 5c1e 9927 clr r25
10418 5c20 829F mul r24,r18
10419 5c22 B001 movw r22,r0
10420 5c24 839F mul r24,r19
10421 5c26 700D add r23,r0
10422 5c28 929F mul r25,r18
10423 5c2a 700D add r23,r0
10424 5c2c 1124 clr r1
10425 5c2e CB01 movw r24,r22
10426 5c30 77FD sbrc r23,7
10427 5c32 0796 adiw r24,7
10428 .L841:
10429 5c34 6C01 movw r12,r24
10430 5c36 B3E0 ldi r27,3
10431 5c38 D594 1: asr r13
10432 5c3a C794 ror r12
10433 5c3c BA95 dec r27
10434 5c3e 01F4 brne 1b
10435 5c40 00C0 rjmp .L842
10436 .L840:
10437 5c42 C694 lsr r12
10438 5c44 8C2D mov r24,r12
10439 5c46 9927 clr r25
10440 5c48 829F mul r24,r18
10441 5c4a D001 movw r26,r0
10442 5c4c 839F mul r24,r19
10443 5c4e B00D add r27,r0
10444 5c50 929F mul r25,r18
10445 5c52 B00D add r27,r0
10446 5c54 1124 clr r1
10447 5c56 CD01 movw r24,r26
10448 5c58 B7FD sbrc r27,7
10449 5c5a 0396 adiw r24,3
10450 .L843:
10451 5c5c 6C01 movw r12,r24
10452 5c5e D594 asr r13
10453 5c60 C794 ror r12
10454 5c62 D594 asr r13
10455 5c64 C794 ror r12
10456 .L842:
10457 5c66 9501 movw r18,r10
10458 5c68 4427 clr r20
10459 5c6a 37FD sbrc r19,7
10460 5c6c 4095 com r20
10461 5c6e 542F mov r21,r20
10462 5c70 8091 0000 lds r24,SummeRoll
10463 5c74 9091 0000 lds r25,(SummeRoll)+1
10464 5c78 A091 0000 lds r26,(SummeRoll)+2
10465 5c7c B091 0000 lds r27,(SummeRoll)+3
10466 5c80 BC01 movw r22,r24
10467 5c82 CD01 movw r24,r26
10468 5c84 0E94 0000 call __divmodsi4
10469 5c88 C20E add r12,r18
10470 5c8a D31E adc r13,r19
10471 5c8c 692D mov r22,r9
10472 5c8e 7727 clr r23
10473 5c90 8827 clr r24
10474 5c92 9927 clr r25
10475 5c94 9801 movw r18,r16
10476 5c96 17FF sbrs r17,7
10477 5c98 00C0 rjmp .L844
10478 5c9a 2227 clr r18
10479 5c9c 3327 clr r19
10480 5c9e 201B sub r18,r16
10481 5ca0 310B sbc r19,r17
10482 .L844:
10483 5ca2 37FF sbrs r19,7
10484 5ca4 00C0 rjmp .L845
10485 5ca6 2F5F subi r18,lo8(-(1))
10486 5ca8 3F4F sbci r19,hi8(-(1))
10487 .L845:
10488 5caa 3595 asr r19
10489 5cac 2795 ror r18
10490 5cae E981 ldd r30,Y+1
10491 5cb0 FA81 ldd r31,Y+2
10492 5cb2 2E0F add r18,r30
10493 5cb4 3F1F adc r19,r31
10494 5cb6 4427 clr r20
10495 5cb8 37FD sbrc r19,7
10496 5cba 4095 com r20
10497 5cbc 542F mov r21,r20
10498 5cbe 0E94 0000 call __mulsi3
10499 5cc2 97FF sbrs r25,7
10500 5cc4 00C0 rjmp .L846
10501 5cc6 615C subi r22,lo8(-(63))
10502 5cc8 7F4F sbci r23,hi8(-(63))
10503 5cca 8F4F sbci r24,hlo8(-(63))
10504 5ccc 9F4F sbci r25,hhi8(-(63))
10505 .L846:
10506 5cce E6E0 ldi r30,6
10507 5cd0 9595 1: asr r25
10508 5cd2 8795 ror r24
10509 5cd4 7795 ror r23
10510 5cd6 6795 ror r22
10511 5cd8 EA95 dec r30
10512 5cda 01F4 brne 1b
10513 5cdc 9B01 movw r18,r22
10514 5cde 6C15 cp r22,r12
10515 5ce0 7D05 cpc r23,r13
10516 5ce2 04F4 brge .L847
10517 5ce4 6B01 movw r12,r22
10518 .L847:
10519 5ce6 3095 com r19
10520 5ce8 2195 neg r18
10521 5cea 3F4F sbci r19,lo8(-1)
10522 5cec C216 cp r12,r18
10523 5cee D306 cpc r13,r19
10524 5cf0 04F4 brge .L848
10525 5cf2 6901 movw r12,r18
10526 .L848:
10527 5cf4 8091 0000 lds r24,MIN_GAS
10528 5cf8 282E mov r2,r24
10529 5cfa 3324 clr r3
10530 5cfc 5090 0000 lds r5,EE_Parameter+101
10531 5d00 60E0 ldi r22,lo8(Motor)
10532 5d02 862E mov r8,r22
10533 5d04 60E0 ldi r22,hi8(Motor)
10534 5d06 962E mov r9,r22
10535 5d08 50E0 ldi r21,lo8(Mixer+13)
10536 5d0a A52E mov r10,r21
10537 5d0c 50E0 ldi r21,hi8(Mixer+13)
10538 5d0e B52E mov r11,r21
10539 5d10 4BE0 ldi r20,lo8(11)
10540 5d12 442E mov r4,r20
10541 5d14 30E0 ldi r19,lo8(tmp_motorwert)
10542 5d16 632E mov r6,r19
10543 5d18 30E0 ldi r19,hi8(tmp_motorwert)
10544 5d1a 732E mov r7,r19
10545 .L883:
10546 5d1c D501 movw r26,r10
10547 5d1e 2C91 ld r18,X
10548 5d20 1216 cp __zero_reg__,r18
10549 5d22 04F0 brlt .+2
10550 5d24 00C0 rjmp .L852
10551 5d26 2034 cpi r18,lo8(64)
10552 5d28 01F4 brne .L853
10553 5d2a E981 ldd r30,Y+1
10554 5d2c FA81 ldd r31,Y+2
10555 5d2e FF8B std Y+23,r31
10556 5d30 EE8B std Y+22,r30
10557 5d32 00C0 rjmp .L854
10558 .L853:
10559 5d34 4981 ldd r20,Y+1
10560 5d36 5A81 ldd r21,Y+2
10561 5d38 CA01 movw r24,r20
10562 5d3a AA27 clr r26
10563 5d3c 97FD sbrc r25,7
10564 5d3e A095 com r26
10565 5d40 BA2F mov r27,r26
10566 5d42 3327 clr r19
10567 5d44 27FD sbrc r18,7
10568 5d46 3095 com r19
10569 5d48 432F mov r20,r19
10570 5d4a 532F mov r21,r19
10571 5d4c BC01 movw r22,r24
10572 5d4e CD01 movw r24,r26
10573 5d50 0E94 0000 call __mulsi3
10574 5d54 97FF sbrs r25,7
10575 5d56 00C0 rjmp .L855
10576 5d58 615C subi r22,lo8(-(63))
10577 5d5a 7F4F sbci r23,hi8(-(63))
10578 5d5c 8F4F sbci r24,hlo8(-(63))
10579 5d5e 9F4F sbci r25,hhi8(-(63))
10580 .L855:
10581 5d60 26E0 ldi r18,6
10582 5d62 9595 1: asr r25
10583 5d64 8795 ror r24
10584 5d66 7795 ror r23
10585 5d68 6795 ror r22
10586 5d6a 2A95 dec r18
10587 5d6c 01F4 brne 1b
10588 5d6e 7F8B std Y+23,r23
10589 5d70 6E8B std Y+22,r22
10590 .L854:
10591 5d72 F501 movw r30,r10
10592 5d74 2181 ldd r18,Z+1
10593 5d76 2034 cpi r18,lo8(64)
10594 5d78 01F4 brne .L856
10595 5d7a 2E89 ldd r18,Y+22
10596 5d7c 3F89 ldd r19,Y+23
10597 5d7e 2E0D add r18,r14
10598 5d80 3F1D adc r19,r15
10599 5d82 3F8B std Y+23,r19
10600 5d84 2E8B std Y+22,r18
10601 5d86 00C0 rjmp .L857
10602 .L856:
10603 5d88 203C cpi r18,lo8(-64)
10604 5d8a 01F4 brne .L858
10605 5d8c 4E89 ldd r20,Y+22
10606 5d8e 5F89 ldd r21,Y+23
10607 5d90 4E19 sub r20,r14
10608 5d92 5F09 sbc r21,r15
10609 5d94 5F8B std Y+23,r21
10610 5d96 4E8B std Y+22,r20
10611 5d98 00C0 rjmp .L857
10612 .L858:
10613 5d9a C701 movw r24,r14
10614 5d9c AA27 clr r26
10615 5d9e 97FD sbrc r25,7
10616 5da0 A095 com r26
10617 5da2 BA2F mov r27,r26
10618 5da4 3327 clr r19
10619 5da6 27FD sbrc r18,7
10620 5da8 3095 com r19
10621 5daa 432F mov r20,r19
10622 5dac 532F mov r21,r19
10623 5dae BC01 movw r22,r24
10624 5db0 CD01 movw r24,r26
10625 5db2 0E94 0000 call __mulsi3
10626 5db6 97FF sbrs r25,7
10627 5db8 00C0 rjmp .L860
10628 5dba 615C subi r22,lo8(-(63))
10629 5dbc 7F4F sbci r23,hi8(-(63))
10630 5dbe 8F4F sbci r24,hlo8(-(63))
10631 5dc0 9F4F sbci r25,hhi8(-(63))
10632 .L860:
10633 5dc2 B6E0 ldi r27,6
10634 5dc4 9595 1: asr r25
10635 5dc6 8795 ror r24
10636 5dc8 7795 ror r23
10637 5dca 6795 ror r22
10638 5dcc BA95 dec r27
10639 5dce 01F4 brne 1b
10640 5dd0 AE89 ldd r26,Y+22
10641 5dd2 BF89 ldd r27,Y+23
10642 5dd4 A60F add r26,r22
10643 5dd6 B71F adc r27,r23
10644 5dd8 BF8B std Y+23,r27
10645 5dda AE8B std Y+22,r26
10646 .L857:
10647 5ddc F501 movw r30,r10
10648 5dde 2281 ldd r18,Z+2
10649 5de0 2034 cpi r18,lo8(64)
10650 5de2 01F4 brne .L861
10651 5de4 2E89 ldd r18,Y+22
10652 5de6 3F89 ldd r19,Y+23
10653 5de8 2C0D add r18,r12
10654 5dea 3D1D adc r19,r13
10655 5dec 3F8B std Y+23,r19
10656 5dee 2E8B std Y+22,r18
10657 5df0 00C0 rjmp .L862
10658 .L861:
10659 5df2 203C cpi r18,lo8(-64)
10660 5df4 01F4 brne .L863
10661 5df6 4E89 ldd r20,Y+22
10662 5df8 5F89 ldd r21,Y+23
10663 5dfa 4C19 sub r20,r12
10664 5dfc 5D09 sbc r21,r13
10665 5dfe 5F8B std Y+23,r21
10666 5e00 4E8B std Y+22,r20
10667 5e02 00C0 rjmp .L862
10668 .L863:
10669 5e04 C601 movw r24,r12
10670 5e06 AA27 clr r26
10671 5e08 97FD sbrc r25,7
10672 5e0a A095 com r26
10673 5e0c BA2F mov r27,r26
10674 5e0e 3327 clr r19
10675 5e10 27FD sbrc r18,7
10676 5e12 3095 com r19
10677 5e14 432F mov r20,r19
10678 5e16 532F mov r21,r19
10679 5e18 BC01 movw r22,r24
10680 5e1a CD01 movw r24,r26
10681 5e1c 0E94 0000 call __mulsi3
10682 5e20 97FF sbrs r25,7
10683 5e22 00C0 rjmp .L865
10684 5e24 615C subi r22,lo8(-(63))
10685 5e26 7F4F sbci r23,hi8(-(63))
10686 5e28 8F4F sbci r24,hlo8(-(63))
10687 5e2a 9F4F sbci r25,hhi8(-(63))
10688 .L865:
10689 5e2c A6E0 ldi r26,6
10690 5e2e 9595 1: asr r25
10691 5e30 8795 ror r24
10692 5e32 7795 ror r23
10693 5e34 6795 ror r22
10694 5e36 AA95 dec r26
10695 5e38 01F4 brne 1b
10696 5e3a AE89 ldd r26,Y+22
10697 5e3c BF89 ldd r27,Y+23
10698 5e3e A60F add r26,r22
10699 5e40 B71F adc r27,r23
10700 5e42 BF8B std Y+23,r27
10701 5e44 AE8B std Y+22,r26
10702 .L862:
10703 5e46 F501 movw r30,r10
10704 5e48 2381 ldd r18,Z+3
10705 5e4a 2034 cpi r18,lo8(64)
10706 5e4c 01F4 brne .L866
10707 5e4e 2E89 ldd r18,Y+22
10708 5e50 3F89 ldd r19,Y+23
10709 5e52 200F add r18,r16
10710 5e54 311F adc r19,r17
10711 5e56 3F8B std Y+23,r19
10712 5e58 2E8B std Y+22,r18
10713 5e5a 00C0 rjmp .L867
10714 .L866:
10715 5e5c 203C cpi r18,lo8(-64)
10716 5e5e 01F4 brne .L868
10717 5e60 4E89 ldd r20,Y+22
10718 5e62 5F89 ldd r21,Y+23
10719 5e64 401B sub r20,r16
10720 5e66 510B sbc r21,r17
10721 5e68 5F8B std Y+23,r21
10722 5e6a 4E8B std Y+22,r20
10723 5e6c 00C0 rjmp .L867
10724 .L868:
10725 5e6e C801 movw r24,r16
10726 5e70 AA27 clr r26
10727 5e72 97FD sbrc r25,7
10728 5e74 A095 com r26
10729 5e76 BA2F mov r27,r26
10730 5e78 3327 clr r19
10731 5e7a 27FD sbrc r18,7
10732 5e7c 3095 com r19
10733 5e7e 432F mov r20,r19
10734 5e80 532F mov r21,r19
10735 5e82 BC01 movw r22,r24
10736 5e84 CD01 movw r24,r26
10737 5e86 0E94 0000 call __mulsi3
10738 5e8a 97FF sbrs r25,7
10739 5e8c 00C0 rjmp .L870
10740 5e8e 615C subi r22,lo8(-(63))
10741 5e90 7F4F sbci r23,hi8(-(63))
10742 5e92 8F4F sbci r24,hlo8(-(63))
10743 5e94 9F4F sbci r25,hhi8(-(63))
10744 .L870:
10745 5e96 F6E0 ldi r31,6
10746 5e98 9595 1: asr r25
10747 5e9a 8795 ror r24
10748 5e9c 7795 ror r23
10749 5e9e 6795 ror r22
10750 5ea0 FA95 dec r31
10751 5ea2 01F4 brne 1b
10752 5ea4 AE89 ldd r26,Y+22
10753 5ea6 BF89 ldd r27,Y+23
10754 5ea8 A60F add r26,r22
10755 5eaa B71F adc r27,r23
10756 5eac BF8B std Y+23,r27
10757 5eae AE8B std Y+22,r26
10758 .L867:
10759 5eb0 F301 movw r30,r6
10760 5eb2 8081 ld r24,Z
10761 5eb4 9181 ldd r25,Z+1
10762 5eb6 2E89 ldd r18,Y+22
10763 5eb8 3F89 ldd r19,Y+23
10764 5eba 8217 cp r24,r18
10765 5ebc 9307 cpc r25,r19
10766 5ebe 04F4 brge .L871
10767 5ec0 B901 movw r22,r18
10768 5ec2 680F add r22,r24
10769 5ec4 791F adc r23,r25
10770 5ec6 77FF sbrs r23,7
10771 5ec8 00C0 rjmp .L872
10772 5eca 6F5F subi r22,lo8(-(1))
10773 5ecc 7F4F sbci r23,hi8(-(1))
10774 .L872:
10775 5ece 7595 asr r23
10776 5ed0 6795 ror r22
10777 5ed2 7F8B std Y+23,r23
10778 5ed4 6E8B std Y+22,r22
10779 5ed6 00C0 rjmp .L873
10780 .L871:
10781 5ed8 5520 tst r5
10782 5eda 01F4 brne .L874
10783 5edc 4E89 ldd r20,Y+22
10784 5ede 5F89 ldd r21,Y+23
10785 5ee0 440F add r20,r20
10786 5ee2 551F adc r21,r21
10787 5ee4 481B sub r20,r24
10788 5ee6 590B sbc r21,r25
10789 5ee8 5F8B std Y+23,r21
10790 5eea 4E8B std Y+22,r20
10791 5eec 00C0 rjmp .L873
10792 .L874:
10793 5eee 51E0 ldi r21,lo8(1)
10794 5ef0 5515 cp r21,r5
10795 5ef2 00F4 brsh .L873
10796 5ef4 252D mov r18,r5
10797 5ef6 3327 clr r19
10798 5ef8 6E89 ldd r22,Y+22
10799 5efa 7F89 ldd r23,Y+23
10800 5efc 861B sub r24,r22
10801 5efe 970B sbc r25,r23
10802 5f00 B901 movw r22,r18
10803 5f02 0E94 0000 call __divmodhi4
10804 5f06 AE89 ldd r26,Y+22
10805 5f08 BF89 ldd r27,Y+23
10806 5f0a A60F add r26,r22
10807 5f0c B71F adc r27,r23
10808 5f0e BF8B std Y+23,r27
10809 5f10 AE8B std Y+22,r26
10810 .L873:
10811 5f12 C101 movw r24,r2
10812 5f14 880F lsl r24
10813 5f16 991F rol r25
10814 5f18 880F lsl r24
10815 5f1a 991F rol r25
10816 5f1c EE89 ldd r30,Y+22
10817 5f1e FF89 ldd r31,Y+23
10818 5f20 8E17 cp r24,r30
10819 5f22 9F07 cpc r25,r31
10820 5f24 04F4 brge .L916
10821 5f26 FD89 ldd r31,Y+21
10822 5f28 8F2F mov r24,r31
10823 5f2a 9927 clr r25
10824 5f2c 880F lsl r24
10825 5f2e 991F rol r25
10826 5f30 880F lsl r24
10827 5f32 991F rol r25
10828 5f34 2E89 ldd r18,Y+22
10829 5f36 3F89 ldd r19,Y+23
10830 5f38 2817 cp r18,r24
10831 5f3a 3907 cpc r19,r25
10832 5f3c 04F0 brlt .L878
10833 .L916:
10834 5f3e 9F8B std Y+23,r25
10835 5f40 8E8B std Y+22,r24
10836 .L878:
10837 5f42 8E89 ldd r24,Y+22
10838 5f44 9F89 ldd r25,Y+23
10839 5f46 97FD sbrc r25,7
10840 5f48 0396 adiw r24,3
10841 .L880:
10842 5f4a 9595 asr r25
10843 5f4c 8795 ror r24
10844 5f4e 9595 asr r25
10845 5f50 8795 ror r24
10846 5f52 F401 movw r30,r8
10847 5f54 8183 std Z+1,r24
10848 5f56 880F lsl r24
10849 5f58 991F rol r25
10850 5f5a 880F lsl r24
10851 5f5c 991F rol r25
10852 5f5e 2E89 ldd r18,Y+22
10853 5f60 3F89 ldd r19,Y+23
10854 5f62 281B sub r18,r24
10855 5f64 390B sbc r19,r25
10856 5f66 C901 movw r24,r18
10857 5f68 880F lsl r24
10858 5f6a 8283 std Z+2,r24
10859 5f6c EE89 ldd r30,Y+22
10860 5f6e FF89 ldd r31,Y+23
10861 5f70 D301 movw r26,r6
10862 5f72 ED93 st X+,r30
10863 5f74 FC93 st X,r31
10864 5f76 00C0 rjmp .L851
10865 .L852:
10866 5f78 F401 movw r30,r8
10867 5f7a 1182 std Z+1,__zero_reg__
10868 5f7c 1282 std Z+2,__zero_reg__
10869 .L851:
10870 5f7e 4A94 dec r4
10871 5f80 22E0 ldi r18,lo8(2)
10872 5f82 30E0 ldi r19,hi8(2)
10873 5f84 620E add r6,r18
10874 5f86 731E adc r7,r19
10875 5f88 44E0 ldi r20,lo8(4)
10876 5f8a 50E0 ldi r21,hi8(4)
10877 5f8c A40E add r10,r20
10878 5f8e B51E adc r11,r21
10879 5f90 68E0 ldi r22,lo8(8)
10880 5f92 70E0 ldi r23,hi8(8)
10881 5f94 860E add r8,r22
10882 5f96 971E adc r9,r23
10883 5f98 47FE sbrs r4,7
10884 5f9a 00C0 rjmp .L883
10885 /* epilogue: frame size=23 */
10886 5f9c E2E1 ldi r30,18
10887 5f9e C95E subi r28,-23
10888 5fa0 0C94 0000 jmp __epilogue_restores__+0
10889 /* epilogue end (size=4) */
10890 /* function MotorRegler size 8305 (8295) */
10892 .comm TrimNick,2,1
10893 .comm TrimRoll,2,1
10894 .comm ErsatzKompass,4,1
10895 .comm ErsatzKompassInGrad,2,1
10896 .comm MesswertNick,2,1
10897 .comm MesswertRoll,2,1
10898 .comm MesswertGier,2,1
10899 .comm Mittelwert_AccNick,2,1
10900 .comm Mittelwert_AccRoll,2,1
10901 .comm NaviAccNick,2,1
10902 .comm NaviAccRoll,2,1
10903 .comm h,1,1
10904 .comm m,1,1
10905 .comm s,1,1
10906 .comm DiffNick,2,1
10907 .comm DiffRoll,2,1
10908 .comm Parameter_Servo3,1,1
10909 .comm Parameter_Servo4,1,1
10910 .comm Parameter_Servo5,1,1
10911 .comm Parameter_J16Bitmask,1,1
10912 .comm Parameter_J16Timing,1,1
10913 .comm Parameter_J17Bitmask,1,1
10914 .comm Parameter_J17Timing,1,1
10915 .comm Parameter_GlobalConfig,1,1
10916 .comm Parameter_ExtraConfig,1,1
10917 .comm MesswertGierBias,2,1
10918 .comm RohMesswertNick,2,1
10919 .comm RohMesswertRoll,2,1
10920 .comm MittelIntegralNick,4,1
10921 .comm MittelIntegralRoll,4,1
10922 .comm MittelIntegralNick2,4,1
10923 .comm MittelIntegralRoll2,4,1
10924 .comm MAX_GAS,1,1
10925 .comm MIN_GAS,1,1
10926 .comm GyroFaktor,1,1
10927 .comm GyroFaktorGier,1,1
10928 .comm IntegralFaktor,1,1
10929 .comm IntegralFaktorGier,1,1
10930 .comm Parameter_NaviGpsModeControl,1,1
10931 .comm Parameter_NaviGpsGain,1,1
10932 .comm Parameter_NaviGpsP,1,1
10933 .comm Parameter_NaviGpsI,1,1
10934 .comm Parameter_NaviGpsD,1,1
10935 .comm Parameter_NaviGpsACC,1,1
10936 .comm Parameter_NaviOperatingRadius,1,1
10937 .comm Parameter_NaviWindCorrection,1,1
10938 .comm Parameter_NaviSpeedCompensation,1,1
10939 .comm Parameter_ExternalControl,1,1
10940 .comm Parameter_MaximumAltitude,1,1
10941 .comm KopplungsteilNickRoll,2,1
10942 .comm KopplungsteilRollNick,2,1
10943 .comm tmp_motorwert,24,1
10944 /* File "fc.c": code 12409 = 0x3079 (12348), prologues 31, epilogues 30 */
DEFINED SYMBOLS
*ABS*:00000000 fc.c
C:\Temp/ccjSs5Dt.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccjSs5Dt.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccjSs5Dt.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccjSs5Dt.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccjSs5Dt.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccjSs5Dt.s:15 .bss:00000000 GasIsZeroCnt
C:\Temp/ccjSs5Dt.s:21 .bss:00000002 HooverGasEmergencyPercent
C:\Temp/ccjSs5Dt.s:27 .data:00000000 VarioCharacter
C:\Temp/ccjSs5Dt.s:32 .data:00000001 GIER_GRAD_FAKTOR
C:\Temp/ccjSs5Dt.s:39 .bss:00000004 FC_StatusFlags2
C:\Temp/ccjSs5Dt.s:45 .bss:00000005 FC_StatusFlags
C:\Temp/ccjSs5Dt.s:51 .bss:00000006 modell_fliegt
C:\Temp/ccjSs5Dt.s:57 .bss:00000008 MaxStickRoll
C:\Temp/ccjSs5Dt.s:63 .bss:0000000a MaxStickNick
C:\Temp/ccjSs5Dt.s:69 .data:00000005 ExternHoehenValue
C:\Temp/ccjSs5Dt.s:76 .bss:0000000c ExternStickGier
C:\Temp/ccjSs5Dt.s:82 .bss:0000000e ExternStickRoll
C:\Temp/ccjSs5Dt.s:88 .bss:00000010 ExternStickNick
C:\Temp/ccjSs5Dt.s:94 .data:00000007 sintab
C:\Temp/ccjSs5Dt.s:131 .bss:00000012 CareFree
C:\Temp/ccjSs5Dt.s:137 .data:00000026 Parameter_DynamicStability
C:\Temp/ccjSs5Dt.s:142 .data:00000027 Parameter_CouplingYawCorrection
C:\Temp/ccjSs5Dt.s:147 .data:00000028 Parameter_AchsKopplung2
C:\Temp/ccjSs5Dt.s:152 .data:00000029 Parameter_AchsKopplung1
C:\Temp/ccjSs5Dt.s:157 .data:0000002a Parameter_LoopGasLimit
C:\Temp/ccjSs5Dt.s:162 .data:0000002b Parameter_ServoRollControl
C:\Temp/ccjSs5Dt.s:167 .data:0000002c Parameter_ServoNickControl
C:\Temp/ccjSs5Dt.s:174 .bss:00000013 Parameter_UserParam8
C:\Temp/ccjSs5Dt.s:180 .bss:00000014 Parameter_UserParam7
C:\Temp/ccjSs5Dt.s:186 .bss:00000015 Parameter_UserParam6
C:\Temp/ccjSs5Dt.s:192 .bss:00000016 Parameter_UserParam5
C:\Temp/ccjSs5Dt.s:198 .bss:00000017 Parameter_UserParam4
C:\Temp/ccjSs5Dt.s:204 .bss:00000018 Parameter_UserParam3
C:\Temp/ccjSs5Dt.s:210 .bss:00000019 Parameter_UserParam2
C:\Temp/ccjSs5Dt.s:216 .bss:0000001a Parameter_UserParam1
C:\Temp/ccjSs5Dt.s:222 .data:0000002d Parameter_I_Faktor
C:\Temp/ccjSs5Dt.s:227 .data:0000002e Parameter_Gier_P
C:\Temp/ccjSs5Dt.s:232 .data:0000002f Parameter_Gyro_Gier_I
C:\Temp/ccjSs5Dt.s:237 .data:00000030 Parameter_Gyro_Gier_P
C:\Temp/ccjSs5Dt.s:242 .data:00000031 Parameter_Gyro_I
C:\Temp/ccjSs5Dt.s:247 .data:00000032 Parameter_Gyro_P
C:\Temp/ccjSs5Dt.s:252 .data:00000033 Parameter_Gyro_D
C:\Temp/ccjSs5Dt.s:257 .data:00000034 Parameter_Hoehe_GPS_Z
C:\Temp/ccjSs5Dt.s:262 .data:00000035 Parameter_KompassWirkung
C:\Temp/ccjSs5Dt.s:267 .data:00000036 Parameter_Hoehe_ACC_Wirkung
C:\Temp/ccjSs5Dt.s:272 .data:00000037 Parameter_Hoehe_P
C:\Temp/ccjSs5Dt.s:277 .data:00000038 Parameter_HoehenSchalter
C:\Temp/ccjSs5Dt.s:282 .data:00000039 Parameter_Luftdruck_D
C:\Temp/ccjSs5Dt.s:289 .bss:0000001b Looping_Oben
C:\Temp/ccjSs5Dt.s:295 .bss:0000001c Looping_Unten
C:\Temp/ccjSs5Dt.s:301 .bss:0000001d Looping_Rechts
C:\Temp/ccjSs5Dt.s:307 .bss:0000001e Looping_Links
C:\Temp/ccjSs5Dt.s:313 .bss:0000001f Looping_Roll
C:\Temp/ccjSs5Dt.s:319 .bss:00000020 Looping_Nick
C:\Temp/ccjSs5Dt.s:325 .data:0000003a Ki
C:\Temp/ccjSs5Dt.s:332 .bss:00000021 HoverGas
C:\Temp/ccjSs5Dt.s:338 .bss:00000023 LageKorrekturNick
C:\Temp/ccjSs5Dt.s:344 .bss:00000025 LageKorrekturRoll
C:\Temp/ccjSs5Dt.s:350 .bss:00000027 NeueKompassRichtungMerken
C:\Temp/ccjSs5Dt.s:356 .bss:00000028 CalibrationDone
C:\Temp/ccjSs5Dt.s:362 .bss:00000029 CompassGierSetpoint
C:\Temp/ccjSs5Dt.s:368 .bss:0000002b WaypointTrimming
C:\Temp/ccjSs5Dt.s:374 .data:0000003c carefree_old
C:\Temp/ccjSs5Dt.s:381 .bss:0000002c FromNC_AltitudeSpeed
C:\Temp/ccjSs5Dt.s:387 .bss:0000002d FromNC_AltitudeSetpoint
C:\Temp/ccjSs5Dt.s:393 .bss:00000031 AltitudeSetpointTrimming
C:\Temp/ccjSs5Dt.s:399 .bss:00000033 SollHoehe
C:\Temp/ccjSs5Dt.s:405 .bss:00000037 HoehenWert
C:\Temp/ccjSs5Dt.s:411 .bss:0000003b StartTrigger
C:\Temp/ccjSs5Dt.s:417 .bss:0000003c MotorenEin
C:\Temp/ccjSs5Dt.s:423 .bss:0000003d SenderOkay
C:\Temp/ccjSs5Dt.s:429 .bss:0000003e Poti
C:\Temp/ccjSs5Dt.s:435 .bss:00000047 StickGas
C:\Temp/ccjSs5Dt.s:441 .bss:00000049 StickGier
C:\Temp/ccjSs5Dt.s:447 .bss:0000004b StickRoll
C:\Temp/ccjSs5Dt.s:453 .bss:0000004d StickNick
C:\Temp/ccjSs5Dt.s:459 .data:0000003d HoverGasMax
C:\Temp/ccjSs5Dt.s:466 .bss:0000004f HoverGasMin
C:\Temp/ccjSs5Dt.s:472 .data:0000003f StickGasHover
C:\Temp/ccjSs5Dt.s:479 .bss:00000051 GierGyroFehler
C:\Temp/ccjSs5Dt.s:485 .data:00000041 Umschlag180Roll
C:\Temp/ccjSs5Dt.s:490 .data:00000045 Umschlag180Nick
C:\Temp/ccjSs5Dt.s:497 .bss:00000053 TrichterFlug
C:\Temp/ccjSs5Dt.s:503 .bss:00000054 HoehenReglerAktiv
C:\Temp/ccjSs5Dt.s:509 .data:00000049 KompassSignalSchlecht
C:\Temp/ccjSs5Dt.s:514 .data:0000004b KompassFusion
C:\Temp/ccjSs5Dt.s:519 .data:0000004c CalculateCompassTimer
C:\Temp/ccjSs5Dt.s:526 .bss:00000055 KompassSollWert
C:\Temp/ccjSs5Dt.s:532 .data:0000004d KompassValue
C:\Temp/ccjSs5Dt.s:539 .bss:00000057 Mess_Integral_Hoch
C:\Temp/ccjSs5Dt.s:545 .bss:0000005b SummeRoll
C:\Temp/ccjSs5Dt.s:551 .bss:0000005f SummeNick
C:\Temp/ccjSs5Dt.s:557 .bss:00000063 Mess_Integral_Gier2
C:\Temp/ccjSs5Dt.s:563 .bss:00000067 Mess_Integral_Gier
C:\Temp/ccjSs5Dt.s:569 .bss:0000006b Mess_IntegralRoll2
C:\Temp/ccjSs5Dt.s:575 .bss:0000006f Mess_IntegralRoll
C:\Temp/ccjSs5Dt.s:581 .bss:00000073 Mess_IntegralNick2
C:\Temp/ccjSs5Dt.s:587 .bss:00000077 Mess_IntegralNick
C:\Temp/ccjSs5Dt.s:593 .bss:0000007b Integral_Gier
C:\Temp/ccjSs5Dt.s:599 .bss:0000007f IntegralAccZ
C:\Temp/ccjSs5Dt.s:605 .bss:00000083 IntegralAccRoll
C:\Temp/ccjSs5Dt.s:611 .bss:00000087 IntegralAccNick
C:\Temp/ccjSs5Dt.s:617 .bss:0000008b IntegralRoll2
C:\Temp/ccjSs5Dt.s:623 .bss:0000008f IntegralRoll
C:\Temp/ccjSs5Dt.s:629 .bss:00000093 IntegralNick2
C:\Temp/ccjSs5Dt.s:635 .bss:00000097 IntegralNick
C:\Temp/ccjSs5Dt.s:641 .bss:0000009b ControlHeading
C:\Temp/ccjSs5Dt.s:647 .bss:0000009c NeutralAccZ
C:\Temp/ccjSs5Dt.s:653 .bss:0000009e NaviCntAcc
C:\Temp/ccjSs5Dt.s:659 .bss:000000a0 NeutralAccY
C:\Temp/ccjSs5Dt.s:665 .bss:000000a2 NeutralAccX
C:\Temp/ccjSs5Dt.s:671 .bss:000000a4 StartNeutralNick
C:\Temp/ccjSs5Dt.s:677 .bss:000000a6 StartNeutralRoll
C:\Temp/ccjSs5Dt.s:683 .bss:000000a8 AdNeutralGier
C:\Temp/ccjSs5Dt.s:689 .bss:000000aa AdNeutralRoll
C:\Temp/ccjSs5Dt.s:695 .bss:000000ac AdNeutralNick
C:\Temp/ccjSs5Dt.s:701 .bss:000000ae BaroExpandActive
C:\Temp/ccjSs5Dt.s:706 .text:00000000 CopyDebugValues
*COM*:00000002 Mittelwert_AccNick
*COM*:00000002 Mittelwert_AccRoll
*COM*:00000004 ErsatzKompass
C:\Temp/ccjSs5Dt.s:923 .text:000002a0 Piep
C:\Temp/ccjSs5Dt.s:997 .text:00000326 CalibrierMittelwert
*COM*:00000002 MesswertNick
*COM*:00000002 MesswertRoll
*COM*:00000002 MesswertGier
C:\Temp/ccjSs5Dt.s:1139 .progmem.data:00000000 __c.35
C:\Temp/ccjSs5Dt.s:1144 .text:00000468 SetNeutral
.bss:000000b0 tmpl.27
C:\Temp/ccjSs5Dt.s:1652 .bss:000000b4 tmpl2.28
C:\Temp/ccjSs5Dt.s:1653 .bss:000000b8 tmpl3.29
C:\Temp/ccjSs5Dt.s:1654 .bss:000000bc tmpl4.30
C:\Temp/ccjSs5Dt.s:1655 .bss:000000c0 oldNick.31
C:\Temp/ccjSs5Dt.s:1656 .bss:000000c2 oldRoll.32
C:\Temp/ccjSs5Dt.s:1657 .bss:000000c4 d2Roll.33
C:\Temp/ccjSs5Dt.s:1658 .bss:000000c6 d2Nick.34
C:\Temp/ccjSs5Dt.s:1662 .text:000009d4 Mittelwert
*COM*:00000002 RohMesswertNick
*COM*:00000002 RohMesswertRoll
*COM*:00000002 NaviAccNick
*COM*:00000002 NaviAccRoll
*COM*:00000001 Parameter_GlobalConfig
*COM*:00000002 KopplungsteilNickRoll
*COM*:00000002 KopplungsteilRollNick
*COM*:00000002 TrimRoll
*COM*:00000002 TrimNick
C:\Temp/ccjSs5Dt.s:3227 .text:00001938 SendMotorData
C:\Temp/ccjSs5Dt.s:3287 .text:000019b2 ParameterZuordnung
*COM*:00000001 Parameter_J16Timing
*COM*:00000001 Parameter_J17Timing
*COM*:00000001 Parameter_Servo3
*COM*:00000001 Parameter_Servo4
*COM*:00000001 Parameter_Servo5
*COM*:00000001 Parameter_MaximumAltitude
*COM*:00000001 Parameter_ExtraConfig
*COM*:00000001 Parameter_ExternalControl
*COM*:00000001 MAX_GAS
*COM*:00000001 MIN_GAS
C:\Temp/ccjSs5Dt.s:1659 .bss:000000c8 sollGier.0
C:\Temp/ccjSs5Dt.s:4006 .bss:000000cc tmp_long.1
C:\Temp/ccjSs5Dt.s:4007 .bss:000000d0 tmp_long2.2
C:\Temp/ccjSs5Dt.s:4008 .bss:000000d4 IntegralFehlerNick.3
C:\Temp/ccjSs5Dt.s:4009 .bss:000000d8 IntegralFehlerRoll.4
C:\Temp/ccjSs5Dt.s:4010 .bss:000000dc RcLostTimer.5
C:\Temp/ccjSs5Dt.s:4011 .bss:000000de delay_neutral.6
C:\Temp/ccjSs5Dt.s:4012 .bss:000000df delay_einschalten.7
C:\Temp/ccjSs5Dt.s:4013 .bss:000000e0 delay_ausschalten.8
C:\Temp/ccjSs5Dt.s:4014 .bss:000000e1 move_safety_switch.9
C:\Temp/ccjSs5Dt.s:4015 .bss:000000e2 ausgleichNick.10
C:\Temp/ccjSs5Dt.s:4016 .bss:000000e6 ausgleichRoll.11
C:\Temp/ccjSs5Dt.s:4017 .bss:000000ea stick_nick.12
C:\Temp/ccjSs5Dt.s:4018 .bss:000000ec stick_roll.13
C:\Temp/ccjSs5Dt.s:4019 .bss:000000ee cnt.14
C:\Temp/ccjSs5Dt.s:4020 .bss:000000f0 last_n_p.15
C:\Temp/ccjSs5Dt.s:4021 .bss:000000f1 last_n_n.16
C:\Temp/ccjSs5Dt.s:4022 .bss:000000f2 last_r_p.17
C:\Temp/ccjSs5Dt.s:4023 .bss:000000f3 last_r_n.18
C:\Temp/ccjSs5Dt.s:4024 .bss:000000f4 MittelIntegralNick_Alt.19
C:\Temp/ccjSs5Dt.s:4025 .bss:000000f8 MittelIntegralRoll_Alt.20
C:\Temp/ccjSs5Dt.s:4026 .bss:000000fc HeightTrimming.21
C:\Temp/ccjSs5Dt.s:4027 .bss:000000fe FilterHCGas.22
C:\Temp/ccjSs5Dt.s:4028 .bss:00000100 HoverGasFilter.23
C:\Temp/ccjSs5Dt.s:4033 .data:0000004f delay.24
C:\Temp/ccjSs5Dt.s:4029 .bss:00000104 BaroAtUpperLimit.25
C:\Temp/ccjSs5Dt.s:4035 .bss:00000105 BaroAtLowerLimit.26
C:\Temp/ccjSs5Dt.s:4040 .text:00001fb6 MotorRegler
*COM*:00000001 GyroFaktor
*COM*:00000001 IntegralFaktor
*COM*:00000001 GyroFaktorGier
*COM*:00000001 IntegralFaktorGier
*COM*:00000004 MittelIntegralNick
*COM*:00000004 MittelIntegralRoll
*COM*:00000004 MittelIntegralNick2
*COM*:00000004 MittelIntegralRoll2
*COM*:00000002 ErsatzKompassInGrad
*COM*:00000002 DiffNick
*COM*:00000002 DiffRoll
*COM*:00000018 tmp_motorwert
*COM*:00000001 h
*COM*:00000001 m
*COM*:00000001 s
*COM*:00000001 Parameter_J16Bitmask
*COM*:00000001 Parameter_J17Bitmask
*COM*:00000002 MesswertGierBias
*COM*:00000001 Parameter_NaviGpsModeControl
*COM*:00000001 Parameter_NaviGpsGain
*COM*:00000001 Parameter_NaviGpsP
*COM*:00000001 Parameter_NaviGpsI
*COM*:00000001 Parameter_NaviGpsD
*COM*:00000001 Parameter_NaviGpsACC
*COM*:00000001 Parameter_NaviOperatingRadius
*COM*:00000001 Parameter_NaviWindCorrection
*COM*:00000001 Parameter_NaviSpeedCompensation
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
EE_Parameter
__divmodsi4
DebugOut
Capacity
UBat
Motor
AdWertGier
ServoNickValue
AdWertAccHoch
GPS_Nick
GPS_Roll
VersionInfo
PlatinenVersion
beeptime
UpdateMotor
LIBFC_Polling
SucheGyroOffset
AdWertNick
AdWertRoll
AdWertAccNick
AdWertAccRoll
PPM_in
__mulsi3
__prologue_saves__
ExpandBaro
Delay_ms_Mess
MessLuftdruck
SucheLuftruckOffset
__divmodhi4
Aktuell_az
SetParamWord
GetParamWord
uart_putchar
_printf_P
Luftdruck
StartLuftdruck
VarioMeter
LED_Init
FromNaviCtrl_Value
ServoActive
NickServoValue
LIBFC_HoTT_Clear
__epilogue_restores__
AdWertNickFilter
AdWertRollFilter
AdReady
HiResNick
HiResRoll
MotorTest
PC_MotortestActive
I2C_TransferActive
motor_write
twi_state
BLFlags
NC_To_FC_MaxAltitude
SpeakHoTT
FromNaviCtrl
BeepMuster
PPM_diff
SetActiveParamSet
WinkelOut
GetActiveParamSet
ParamSet_ReadFromEEProm
LipoDetection
LIBFC_ReceiverInit
NC_ErrorCode
GPSInfo
NewPpmData
FromNC_Rotate_C
FromNC_Rotate_S
GPS_Aid_StickMultiplikator
__floatsisf
__addsf3
__fixunssfsi
ExternControl
ZaehlMessungen
BattLowVoltageWarning
__udivmodhi4
DruckOffsetSetting
SummenHoehe
ihypot
c_cos_8192
__udivmodqi4
NC_To_FC_Flags
MissingMotor
Mixer
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/flight.pnproj
0,0 → 1,0
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="jeti.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="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="isqrt.S"></File><File path="Spektrum.c"></File><File path="Spektrum.h"></File><File path="eeprom.h"></File><File path="eeprom.c"></File><File path="libfc.h"></File><File path="debug.c"></File><File path="debug.h"></File></Project>
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/gps.h
0,0 → 1,3
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern unsigned char GPS_Aid_StickMultiplikator;
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/hottmenu.c
0,0 → 1,810
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "libfc.h"
#include "printf_P.h"
#include "main.h"
#include "spi.h"
#include "capacity.h"
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
#define HoTT_printf(format, args...) { _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);}
#define HoTT_printfxy(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);}
#define HoTT_printfxy_INV(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);}
#define HoTT_printfxy_BLINK(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);}
#define HoTT_printf_BLINK(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);}
#define HoTT_printf_INV(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);}
 
#define VOICE_MINIMALE_EINGANSSPANNUNG 16
#define VOICE_BEEP 5
#define HoTT_GRAD 96
#define HoTT_LINKS 123
#define HoTT_RECHTS 124
#define HoTT_OBEN 125
#define HoTT_UNTEN 126
 
#define HOTT_KEY_RIGHT 1
#define HOTT_KEY_DOWN 2
#define HOTT_KEY_UP 4
#define HOTT_KEY_SET 6
#define HOTT_KEY_LEFT 8
 
unsigned char NaviData_WaypointIndex = 0, NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0;
unsigned int NaviData_TargetDistance = 0;
 
GPSPacket_t GPSPacket;
VarioPacket_t VarioPacket;
ASCIIPacket_t ASCIIPacket;
ElectricAirPacket_t ElectricAirPacket;
HoTTGeneral_t HoTTGeneral;
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER;
unsigned char ToNC_SpeakHoTT = 0;
int HoTTVarioMeter = 0;
const char PROGMEM MIKROKOPTER[] = {" MikroKopter "};
const char PROGMEM UNDERVOLTAGE[] = {" !! LiPo voltage !! "};
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] =
{
//0123456789123456
"No Error \0", // 0
"Not compatible \0", // 1
"MK3Mag not compa\0", // 2
"No FC communicat\0", // 3
"Compass communic\0", // 4
"GPS communicatio\0", // 5
"compass value \0", // 6
"RC Signal lost \0", // 7
"FC spi rx error \0", // 8
"No NC communicat\0", // 9
"FC Nick Gyro \0", // 10
"FC Roll Gyro \0", // 11
"FC Yaw Gyro \0", // 12
"FC Nick ACC \0", // 13
"FC Roll ACC \0", // 14
"FC Z-ACC \0", // 15
"Pressure sensor \0", // 16
"I2C FC->BL-Ctrl \0", // 17
"Bl Missing \0", // 18
"Mixer Error \0", // 19
"Carefree Error \0", // 20
"GPS Fix lost \0", // 21
"Magnet Error \0", // 22
"Motor restart \0", // 23
"BL Limitation \0", // 24
"GPS Range \0", // 25
"No SD-Card \0", // 26
"SD-Logging error\0", // 27
"Flying range! \0", // 28
"Max Altitude! \0", // 29
"No GPS fix \0", // 30
"compass not cal.\0" // 31
};
 
 
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] =
{ // 1 -> only in flight 0 -> also on ground
//0123456789123456
{0,0},// "No Error \0", // 0
{SPEAK_ERROR,0},// "Not compatible \0", // 1
{SPEAK_ERROR,0},// "MK3Mag not compa\0", // 2
{SPEAK_ERR_NAVI,1},// "No FC communicat\0", // 3
{SPEAK_ERR_COMPASS,1},// "MK3Mag communica\0", // 4
{SPEAK_ERR_GPS,0},// "GPS communicatio\0", // 5
{SPEAK_ERR_COMPASS,1},// "compass value \0", // 6
{SPEAK_ERR_RECEICER,0},// "RC Signal lost \0", // 7
{SPEAK_ERR_NAVI,0},// "FC spi rx error \0", // 8
{SPEAK_ERR_NAVI,0},// "No NC communicat\0", // 9
{SPEAK_ERR_SENSOR,0},// "FC Nick Gyro \0", // 10
{SPEAK_ERR_SENSOR,0},// "FC Roll Gyro \0", // 11
{SPEAK_ERR_SENSOR,0},// "FC Yaw Gyro \0", // 12
{SPEAK_ERR_SENSOR,0},// "FC Nick ACC \0", // 13
{SPEAK_ERR_SENSOR,0},// "FC Roll ACC \0", // 14
{SPEAK_ERR_SENSOR,0},// "FC Z-ACC \0", // 15
{SPEAK_ERR_SENSOR,0},// "Pressure sensor \0", // 16
{SPEAK_ERR_DATABUS,1},// "I2C FC->BL-Ctrl \0", // 17
{SPEAK_ERR_DATABUS,1},// "Bl Missing \0", // 18
{SPEAK_ERROR,0},// "Mixer Error \0", // 19
{SPEAK_CF_OFF,1},// "Carefree Error \0", // 20
{SPEAK_GPS_FIX,1},// "GPS Fix lost \0", // 21
{SPEAK_ERR_COMPASS,0},// "Magnet Error \0", // 22
{SPEAK_ERR_MOTOR,1},// "Motor restart \0", // 23
{SPEAK_MAX_TEMPERAT,1},// "BL Limitation \0", // 24
{SPEAK_MAX_RANGE,1},// "GPS Range \0", // 25
{SPEAK_ERROR,1},// "No SD-Card \0", // 26
{SPEAK_ERROR,1},// "SD-Logging error\0", // 27
{SPEAK_MAX_RANGE,1},// "Flying range! \0", // 28
{SPEAK_MAX_ALTITUD,1},// "Max Altitude! \0" // 29
{SPEAK_GPS_FIX,1}// "no GPS Fix, // 30
};
 
 
unsigned char MaxBlTempertaure = 0;
unsigned char MinBlTempertaure = 0;
unsigned char HottestBl = 0;
 
void GetHottestBl(void)
{
static unsigned char search = 0,tmp_max,tmp_min,who;
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;}
else
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature;
if(++search > MAX_MOTORS)
{
search = 0;
if(tmp_min != 255) MinBlTempertaure = tmp_min; else MinBlTempertaure = 0;
MaxBlTempertaure = tmp_max;
HottestBl = who;
tmp_min = 255;
tmp_max = 0;
who = 0;
}
}
 
//---------------------------------------------------------------
void Hott_ClearLine(unsigned char line)
{
HoTT_printfxy(0,line," ");
}
//---------------------------------------------------------------
 
 
unsigned char HoTT_Waring(void)
{
unsigned char status = 0;
static char old_status = 0;
static int repeat;
//if(Parameter_UserParam1) return(Parameter_UserParam1);
ToNC_SpeakHoTT = SpeakHoTT;
if(FC_StatusFlags & FC_STATUS_LOWBAT) status = VOICE_MINIMALE_EINGANSSPANNUNG;
else
if(NC_ErrorCode) // Fehlercodes
{
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]);
}
if(!status) // Sprachansagen
{
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted?
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted?
else status = SpeakHoTT;
}
else ToNC_SpeakHoTT = status;
 
if(old_status == status) // Gleichen Fehler nur alle 5 sek bringen
{
if(!CheckDelay(repeat)) return(0);
repeat = SetDelay(5000);
}
else repeat = SetDelay(2000);
 
if(status)
{
if(status == SpeakHoTT) SpeakHoTT = 0;
}
old_status = status;
// DebugOut.Analog[16] = status;
return(status);
}
 
/*
unsigned char HoTTErrorCode(void)
{
return(NC_ErrorCode);
}
*/
//---------------------------------------------------------------
void NC_Fills_HoTT_Telemety(void)
{
unsigned char *ptr = NULL;
unsigned char max = 0,i,z;
switch(FromNaviCtrl.Param.Byte[11])
{
case HOTT_VARIO_PACKET_ID:
ptr = (unsigned char *) &VarioPacket;
max = sizeof(VarioPacket);
break;
case HOTT_GPS_PACKET_ID:
ptr = (unsigned char *) &GPSPacket;
max = sizeof(GPSPacket);
break;
case HOTT_ELECTRIC_AIR_PACKET_ID:
ptr = (unsigned char *) &ElectricAirPacket;
max = sizeof(ElectricAirPacket);
break;
case HOTT_GENERAL_PACKET_ID:
ptr = (unsigned char *) &HoTTGeneral;
max = sizeof(HoTTGeneral);
break;
}
z = FromNaviCtrl.Param.Byte[0]; // Data allocation
 
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++)
{
if(z >= max) break;
ptr[z] = FromNaviCtrl.Param.Byte[2+i];
z++;
}
}
 
unsigned int BuildHoTT_Vario(void)
{
unsigned int tmp = 30000;
if(VarioCharacter == '+' || VarioCharacter == '-')
{
tmp = 30000 + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3;
if(tmp < 30000 && tmp > 30000 - 50) tmp = 30000 - 50; // weil es sonst erst bei < 0,5m/sek piept
}
else
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
{
tmp = 30000 + HoTTVarioMeter;
if(tmp > 30000)
{
if(tmp < 30000 + 100) tmp = 30000;
else tmp -= 100;
}
if(tmp < 30000)
{
if(tmp > 30000 - 100) tmp = 30000;
else tmp += 100;
}
}
else
if(VarioCharacter == '^') tmp = 30000 + FromNC_AltitudeSpeed * 10;
else
if(VarioCharacter == 'v') tmp = 30000 - FromNC_AltitudeSpeed * 10;
 
return(tmp);
}
 
//---------------------------------------------------------------
unsigned char HoTT_Telemety(unsigned char packet_request)
{
unsigned char i;
//Debug("rqst: %02X",packet_request);
 
switch(packet_request)
{
case HOTT_VARIO_PACKET_ID:
VarioPacket.Altitude = HoehenWert/100 + 500;
VarioPacket.m_sec = BuildHoTT_Vario();
VarioPacket.m_3sec = VarioPacket.m_sec;
VarioPacket.m_10sec = VarioPacket.m_sec;
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude;
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude;
VarioPacket.WarnBeep = 0;//HoTT_Waring();
HoTT_DataPointer = (unsigned char *) &VarioPacket;
VarioPacket.FreeCharacters[0] = VarioCharacter;
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' ';
// VarioPacket.FreeCharacters[2] = ' ';
if(NC_ErrorCode)
{
VarioPacket.Text[0] = NC_ErrorCode/10 + '0';
VarioPacket.Text[1] = NC_ErrorCode%10 + '0';
VarioPacket.Text[2] = ':';
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]);
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error
else
if(NaviData_WaypointNumber)
{
unsigned int tmp_int;
unsigned char tmp;
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P';
VarioPacket.Text[2] = ' ';
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10;
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10;
VarioPacket.Text[5] = '/';
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10;
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10;
VarioPacket.Text[8] = ' ';
tmp_int = NaviData_TargetDistance;
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;}
else VarioPacket.Text[9] = ' ';
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;}
else VarioPacket.Text[10] = ' ';
VarioPacket.Text[11] = '0'+(tmp_int) / 10;
VarioPacket.Text[12] = '0'+(tmp_int) % 10;
VarioPacket.Text[13] = 'm';
VarioPacket.Text[14] = ' ';
tmp = NaviData_TargetHoldTime;
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' ';
VarioPacket.Text[16] = '0'+(tmp) / 10;
VarioPacket.Text[17] = '0'+(tmp) % 10;
VarioPacket.Text[18] = 's';
VarioPacket.Text[19] = ' ';
//unsigned char NaviData_WaypointIndex = 0, NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0;
//unsigned int NaviData_TargetDistance = 0;
}
else
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
return(sizeof(VarioPacket));
break;
 
case HOTT_GPS_PACKET_ID:
GPSPacket.Altitude = HoehenWert/100 + 500;
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC
GPSPacket.m_sec = BuildHoTT_Vario();
GPSPacket.m_3sec = 120;
GPSPacket.NumOfSats = GPSInfo.NumOfSats;
GPSPacket.WarnBeep = HoTT_Waring();
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D';
else
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' ';
else GPSPacket.SatFix = '!';
HoTT_DataPointer = (unsigned char *) &GPSPacket;
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter;
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix;
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230;
return(sizeof(GPSPacket));
break;
case HOTT_ELECTRIC_AIR_PACKET_ID:
GetHottestBl();
ElectricAirPacket.Altitude = HoehenWert/100 + 500;
ElectricAirPacket.Battery1 = UBat;
ElectricAirPacket.Battery2 = UBat;
ElectricAirPacket.VoltageCell1 = ErsatzKompassInGrad / 2;
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1;
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2;
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20;
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6;
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7;
ElectricAirPacket.m_sec = BuildHoTT_Vario();
ElectricAirPacket.m_3sec = 120;
ElectricAirPacket.InputVoltage = UBat;
ElectricAirPacket.Temperature1 = MinBlTempertaure + 20;
ElectricAirPacket.Temperature2 = MaxBlTempertaure + 20;
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10;
ElectricAirPacket.WarnBeep = 0;//HoTT_Waring();
ElectricAirPacket.Current = Capacity.ActualCurrent;
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket;
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60;
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60;
return(sizeof(ElectricAirPacket));
break;
case HOTT_GENERAL_PACKET_ID:
GetHottestBl();
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100;
HoTTGeneral.VoltageCell1 = ErsatzKompassInGrad / 2;
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2;
if(UBat > BattLowVoltageWarning + 5) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 6)) * 3;
else HoTTGeneral.FuelPercent = 0;
HoTTGeneral.FuelCapacity = HoehenWert/100;
if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0;
HoTTGeneral.Altitude = HoehenWert/100 + 500;
HoTTGeneral.Battery1 = UBat;
HoTTGeneral.Battery2 = UBat;
HoTTGeneral.m_sec = BuildHoTT_Vario();
HoTTGeneral.m_3sec = 120;
HoTTGeneral.InputVoltage = UBat;
HoTTGeneral.Temperature1 = MinBlTempertaure + 20;
HoTTGeneral.Temperature2 = MaxBlTempertaure + 20;
HoTTGeneral.Capacity = Capacity.UsedCapacity/10;
HoTTGeneral.WarnBeep = 0;//HoTT_Waring();
HoTTGeneral.Current = Capacity.ActualCurrent;
//HoTTGeneral.ErrorNumber = HoTTErrorCode();
HoTT_DataPointer = (unsigned char *) &HoTTGeneral;
return(sizeof(HoTTGeneral));
break;
default: return(0);
}
}
 
//---------------------------------------------------------------
void HoTT_Menu(void)
{
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0;
unsigned char tmp;
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8;
if(page == 0)
switch(line++)
{
case 0:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10)
else
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10)
 
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter)
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100))
}
else HoTT_printfxy(10,0,"ALT:---- ");
break;
case 1:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60)
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60);
HoTT_printfxy(10,1,"DIR: %3d%c",ErsatzKompassInGrad, HoTT_GRAD);
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," ");
break;
case 2:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity)
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity);
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
break;
case 3:
HoTT_printfxy(9,0,":");
HoTT_printfxy(9,1,":");
HoTT_printfxy(9,2,":");
HoTT_printfxy(0,3,"---------+-----------");
 
// HoTT_printfxy(0,3,"---------------------");
HoTT_printfxy(0,6,"---------------------");
break;
case 4:
if(NaviDataOkay)
{
HoTT_printfxy(9,4,":");
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats);
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10);
switch (GPSInfo.SatFix)
{
case SATFIX_3D:
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ")
else HoTT_printfxy(7,4,"3D");
break;
default:
HoTT_printfxy_BLINK(7,4,"!!");
break;
}
}
else
{
Hott_ClearLine(4);
}
break;
case 5:
if(NaviDataOkay)
{
if(show_mag)
{
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField);
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic);
}
else
{
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
}
}
else Hott_ClearLine(5);
break;
case 6:
break;
case 7: if(NC_ErrorCode)
{
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER)
{
Hott_ClearLine(7);
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode);
}
else
{
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!")
else HoTT_printfxy(0,7," www.MikroKopter.de ");
break;
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring();
// ASCIIPacket.WarnBeep = Parameter_UserParam1;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;}
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;};
HottKeyboard = 0;
break;
default: line = 0;
break;
}
else
if(page == 1)
switch(line++)
{
case 0:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity)
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity);
break;
case 1:
HoTT_printfxy(0,1,"DIR:%3d%c",KompassValue, HoTT_GRAD);
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100))
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100))
}
else HoTT_printfxy(10,1,"ALT:---- ");
HoTT_printfxy(20,1,"%c",VarioCharacter);
break;
case 2:
if(NaviDataOkay)
{
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter);
}
else
{
Hott_ClearLine(2);
}
break;
case 3:
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower);
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," ");
break;
case 4:
if(NaviDataOkay)
{
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats);
switch (GPSInfo.SatFix)
{
case SATFIX_3D:
HoTT_printfxy(16,4," 3D ");
break;
//case SATFIX_2D:
//case SATFIX_NONE:
default:
HoTT_printfxy_BLINK(16,4,"NOFIX");
break;
}
if(GPSInfo.Flags & FLAG_DIFFSOLN)
{
HoTT_printfxy(16,4,"DGPS ");
}
}
else
{ //012345678901234567890
HoTT_printfxy(0,4," No NaviCtrl ");
}
break;
case 5:
if(show_current)
{
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10);
}
else
{
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD);
}
break;
case 6:
if(show_current)
{
if(RequiredMotors == 4) Hott_ClearLine(6);
else
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10)
else
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10);
}
else
{
if(RequiredMotors == 4) Hott_ClearLine(6);
else
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD)
else
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD);
}
break;
case 7: if(NC_ErrorCode)
{
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER)
{
Hott_ClearLine(7);
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode);
}
else
{
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!")
else HoTT_printfxy(0,7," www.MikroKopter.de ");
break;
case 8: // ASCIIPacket.WarnBeep = HoTT_Waring();
// ASCIIPacket.WarnBeep = Parameter_UserParam1;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);}
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;}
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard);
HottKeyboard = 0;
break;
default: line = 0;
break;
}
else
if(page == 2)
switch(line++)
{
case 0:
HoTT_printfxy_INV(0,0,"Setting:%u %s ",GetActiveParamSet(),EE_Parameter.Name);
break;
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name);
break;
case 2: HoTT_printfxy(0,2,"ALT:");
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter)
else
{
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) ");
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter)
else HoTT_printf("VARIO", Parameter_HoehenSchalter);
}
}
else
HoTT_printf("DISABLED");
break;
case 3: HoTT_printfxy(0,3,"CF:");
if(!EE_Parameter.CareFreeModeControl) HoTT_printf("DISABLED")
else
{
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)");
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH");
}
break;
case 4: HoTT_printfxy(0,4,"GPS:");
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED")
else
{
CHK_POTI(tmp,EE_Parameter.NaviGpsModeControl);
if(tmp < 50) HoTT_printf("(FREE)")
else
if(tmp >= 180) HoTT_printf("(HOME)")
else
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ")
else HoTT_printf("(HOLD)")
}
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime)
 
break;
case 5: HoTT_printfxy(0,5,"HOME ALT:");
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD ");
break;
case 6:
if(!show_poti)
{
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl);
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
}
else
{
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3);
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6);
}
break;
case 7: //HoTT_printfxy(0,6,"WARNINGS:");
if(HoTTBlink)
{
LIBFC_HoTT_SetPos(6 * 21);
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! ");
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! ");
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! ");
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! ");
}
break;
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring();
break;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);}
// else
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;}
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;};
HottKeyboard = 0;
break;
default: line = 0;
break;
}
/* else
if(page == 3)
switch(line++)
{
case 0:
HoTT_printfxy(0,2,"Speak:");
break;
case 1:
// if(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)
if(!(GlobalConfig3 & CFG3_SPEAK_ALL) & 0x01)) HoTT_printfxy_INV(7,2,"All Messages ")
else HoTT_printfxy_INV(7,2,"Warnings only");
break;
case 2:
HoTT_printfxy(1,4,"Use (set) to select");
break;
default:
if(HottKeyboard == HOTT_KEY_SET)
{
SetParamByte(PID_SPEAK_HOTT_CFG, GetParamByte(PID_SPEAK_HOTT_CFG) ^ 0x01);
}
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;};
HottKeyboard = 0;
line = 0;
break;
}
*/
else page = 0;
}
 
#endif
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/hottmenu.h
0,0 → 1,230
#ifndef _HOTTMENU_H
#define _HOTTMENU_H
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
#define SPEAK_ERR_CALIBARTION 1
#define SPEAK_ERR_RECEICER 2
#define SPEAK_ERR_DATABUS 3
#define SPEAK_ERR_NAVI 4
#define SPEAK_ERROR 5
#define SPEAK_ERR_COMPASS 6
#define SPEAK_ERR_SENSOR 7
#define SPEAK_ERR_GPS 8
#define SPEAK_ERR_MOTOR 9
#define SPEAK_MAX_TEMPERAT 10
#define SPEAK_ALTI_REACHED 11
#define SPEAK_WP_REACHED 12
#define SPEAK_NEXT_WP 13
#define SPEAK_LANDING 14
#define SPEAK_GPS_FIX 15
#define SPEAK_UNDERVOLTAGE 16
#define SPEAK_GPS_HOLD 17
#define SPEAK_GPS_HOME 18
#define SPEAK_GPS_OFF 19
#define SPEAK_BEEP 20
#define SPEAK_MIKROKOPTER 21
#define SPEAK_CAPACITY 22
#define SPEAK_CF_OFF 23
#define SPEAK_CALIBRATE 24
#define SPEAK_MAX_RANGE 25
#define SPEAK_MAX_ALTITUD 26
 
#define SPEAK_MK_OFF 38
#define SPEAK_ALTITUDE_ON 39
#define SPEAK_ALTITUDE_OFF 40
#define SPEAK_CF_ON 46
#define SPEAK_SINKING 47
#define SPEAK_RISING 48
#define SPEAK_HOLDING 49
#define SPEAK_GPS_ON 50
#define SPEAK_FOLLWING 51
#define SPEAK_STARTING 52
 
#define MAX_ERR_NUMBER (31+1)
extern const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17];
extern unsigned char NaviData_WaypointIndex, NaviData_WaypointNumber, NaviData_TargetHoldTime;
extern unsigned int NaviData_TargetDistance;
 
extern unsigned char HottKeyboard,HoTT_RequestedSensor;
extern unsigned char HottUpdate(unsigned char key);
extern unsigned char SpeakHoTT;
extern unsigned char ToNC_SpeakHoTT;
extern volatile unsigned char *HoTT_DataPointer;
extern unsigned char MaxBlTempertaure;
 
extern void CreateHoTT_Menu(void);
extern void LIBFC_HoTT_Putchar(char);
extern void LIBFC_HoTT_Putchar_INV(char); // print Invers
extern void LIBFC_HoTT_Putchar_BLINK(char);
extern void LIBFC_HoTT_SetPos(unsigned char);
extern void LIBFC_HoTT_Clear(void);
extern void NC_Fills_HoTT_Telemety(void);
extern void HoTT_Menu(void);
extern unsigned char HoTT_Telemety(unsigned char);
extern unsigned char HoTT_Waring(void);
extern volatile unsigned char HoTTBlink;
extern void GetHottestBl(void);
 
typedef struct
{
unsigned char StartByte; // 0x7C
unsigned char Packet_ID; // HOTT_GENERAL_PACKET_ID
unsigned char WarnBeep; // 3 Anzahl der Töne 0..36
unsigned char SensorID; // 4 0xD0
unsigned char InverseStatus1; // 5
unsigned char InverseStatus2; // 6
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert)
unsigned char VoltageCell2; // 8 209 = 4,18V
unsigned char VoltageCell3; // 9
unsigned char VoltageCell4; // 10
unsigned char VoltageCell5; // 11
unsigned char VoltageCell6; // 12
unsigned int Battery1; // 13+14 51 = 5,1V
unsigned int Battery2; // 15+16 51 = 5,1V
unsigned char Temperature1; // 17 44 = 24°C, 0 = -20°C
unsigned char Temperature2; // 18 44 = 24°C, 0 = -20°C
unsigned char FuelPercent; // 19
signed int FuelCapacity; // 20+21
unsigned int Rpm; // 22+23
signed int Altitude; // 24+25
unsigned int m_sec; // 26+27 3000 = 0
unsigned char m_3sec; // 28 120 = 0
unsigned int Current; // 29+30 1 = 0.1A
unsigned int InputVoltage; // 31+32 66 = 6,6V
unsigned int Capacity; // 33+34 1 = 10mAh
unsigned int Speed; // 35+36
unsigned char LowestCellVoltage; // 37
unsigned char LowestCellNumber; // 38
unsigned int Rpm2; // 39+40
unsigned char ErrorNumber; // 41
unsigned char Pressure; // 42 in 0,1bar 20=2,0bar
unsigned char Version; // 43
unsigned char EndByte; // 0x7D
} HoTTGeneral_t;
 
typedef struct
{
unsigned char StartByte; // 0x7C
unsigned char Packet_ID; // HOTT_ELECTRIC_AIR_PACKET_ID
unsigned char WarnBeep; // Anzahl der Töne 0..36
unsigned char SensorID; // 4 0xE0
unsigned char InverseStatus1; // 5
unsigned char InverseStatus2; // 6
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert)
unsigned char VoltageCell2; // 209 = 4,18V
unsigned char VoltageCell3; //
unsigned char VoltageCell4; //
unsigned char VoltageCell5; //
unsigned char VoltageCell6; //
unsigned char VoltageCell7; //
unsigned char VoltageCell8; //
unsigned char VoltageCell9; //
unsigned char VoltageCell10; //
unsigned char VoltageCell11; //
unsigned char VoltageCell12; //
unsigned char VoltageCell13; //
unsigned char VoltageCell14; // 20
unsigned int Battery1; // 21+22 51 = 5,1V
unsigned int Battery2; // 23+24 51 = 5,1V
unsigned char Temperature1; // 25 44 = 24°C, 0 = -20°C
unsigned char Temperature2; // 26 44 = 24°C, 0 = -20°C
signed int Altitude; // 27+28
unsigned int Current; // 29+30 1 = 0.1A
unsigned int InputVoltage; // 31+32 66 = 6,6V
unsigned int Capacity; // 33+34 1 = 10mAh
unsigned int m_sec; // 35+36 30000 = 0
unsigned char m_3sec; // 37 120 = 0
unsigned int Rpm; // 38+39
unsigned char FlightTimeMinutes; // 40
unsigned char FlightTimeSeconds; // 41
unsigned char Speed; // 42 1=2km
unsigned char Version; // 43 0x00
unsigned char EndByte; // 0x7D
} ElectricAirPacket_t;
 
 
typedef struct
{
unsigned char StartByte; // 0x7C
unsigned char Packet_ID; // 0x89 - Vario ID
unsigned char WarnBeep; //3 // Anzahl der Töne 0..36
unsigned char SensorID; // 0x90
unsigned char InverseStatus;
signed int Altitude; //6+7 // 500 = 0m
signed int MaxAltitude; //8+9 // 500 = 0m
signed int MinAltitude; //10+11 // 500 = 0m
unsigned int m_sec; //12+13 // 3000 = 0
unsigned int m_3sec; //14+15
unsigned int m_10sec; //26+17
char Text[21]; //18-38
char FreeCharacters[3]; // 39-41
unsigned char NullByte; // 42 0x00
unsigned char Version; // 43
unsigned char EndByte; // 0x7D
} VarioPacket_t;
 
typedef struct
{
unsigned char StartByte; //0 // 0x7C
unsigned char Packet_ID; //1 // 0x8A - GPS ID
unsigned char WarnBeep; //2 // Anzahl der Töne 0..36
unsigned char SensorID; // 4 0xA0
unsigned char InverseStatus1; // 5
unsigned char InverseStatus2; // 6
unsigned char Heading; //7 // 1 = 2°
unsigned int Speed; //8+9 // in km/h
unsigned char Lat_North; //10
unsigned char Lat_G; //11
unsigned char Lat_M; //12
unsigned char Lat_Sek1; //13
unsigned char Lat_Sek2; //14
unsigned char Lon_East; //15
unsigned char Lon_G; //16
unsigned char Lon_M; //17
unsigned char Lon_Sek1; //18
unsigned char Lon_Sek2; //19
unsigned int Distance; //20+21 // 9000 = 0m
signed int Altitude; //22+23 // 500 = 0m
unsigned int m_sec; //24+25 // 3000 = 0
unsigned char m_3sec; //26 120 = 0
unsigned char NumOfSats; //27
unsigned char SatFix; //28
unsigned char HomeDirection; // 29
unsigned char AngleX; // 30
unsigned char AngleY; // 31
unsigned char AngleZ; // 32
signed int GyroX; //33+34
signed int GyroY; //35+36
signed int GyroZ; //37+38
unsigned char Vibration; // 39
char FreeCharacters[3]; // 40-42
unsigned char Version; // 43
unsigned char EndByte; // 0x7D
} GPSPacket_t;
 
typedef struct
{
unsigned char StartByte; // 0x7B
unsigned char Packet_ID; //
unsigned char WarnBeep; // Anzahl der Töne 0..36
char Text[8*21];
unsigned char EndByte; // 0x7D
} ASCIIPacket_t;
 
 
 
extern GPSPacket_t GPSPacket;
extern VarioPacket_t VarioPacket;
extern ASCIIPacket_t ASCIIPacket;
extern ElectricAirPacket_t ElectricAirPacket;
extern HoTTGeneral_t HoTTGeneral;
 
#define HOTT_VARIO_PACKET_ID 0x89
#define HOTT_GPS_PACKET_ID 0x8A
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E
#define HOTT_GENERAL_PACKET_ID 0x8D
 
#endif
#endif
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/hottmenu.lst
0,0 → 1,4096
1 .file "hottmenu.c"
2 .arch atmega1284p
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 .global HottestBl
11 .global HottestBl
12 .section .bss
15 HottestBl:
16 0000 00 .skip 1,0
17 .global MinBlTempertaure
18 .global MinBlTempertaure
21 MinBlTempertaure:
22 0001 00 .skip 1,0
23 .global MaxBlTempertaure
24 .global MaxBlTempertaure
27 MaxBlTempertaure:
28 0002 00 .skip 1,0
29 .global HOTT_ERROR
30 .section .progmem.data,"a",@progbits
33 HOTT_ERROR:
34 0000 00 .byte 0
35 0001 00 .byte 0
36 0002 05 .byte 5
37 0003 00 .byte 0
38 0004 05 .byte 5
39 0005 00 .byte 0
40 0006 04 .byte 4
41 0007 01 .byte 1
42 0008 06 .byte 6
43 0009 01 .byte 1
44 000a 08 .byte 8
45 000b 00 .byte 0
46 000c 06 .byte 6
47 000d 01 .byte 1
48 000e 02 .byte 2
49 000f 00 .byte 0
50 0010 04 .byte 4
51 0011 00 .byte 0
52 0012 04 .byte 4
53 0013 00 .byte 0
54 0014 07 .byte 7
55 0015 00 .byte 0
56 0016 07 .byte 7
57 0017 00 .byte 0
58 0018 07 .byte 7
59 0019 00 .byte 0
60 001a 07 .byte 7
61 001b 00 .byte 0
62 001c 07 .byte 7
63 001d 00 .byte 0
64 001e 07 .byte 7
65 001f 00 .byte 0
66 0020 07 .byte 7
67 0021 00 .byte 0
68 0022 03 .byte 3
69 0023 01 .byte 1
70 0024 03 .byte 3
71 0025 01 .byte 1
72 0026 05 .byte 5
73 0027 00 .byte 0
74 0028 17 .byte 23
75 0029 01 .byte 1
76 002a 0F .byte 15
77 002b 01 .byte 1
78 002c 06 .byte 6
79 002d 00 .byte 0
80 002e 09 .byte 9
81 002f 01 .byte 1
82 0030 0A .byte 10
83 0031 01 .byte 1
84 0032 19 .byte 25
85 0033 01 .byte 1
86 0034 05 .byte 5
87 0035 01 .byte 1
88 0036 05 .byte 5
89 0037 01 .byte 1
90 0038 19 .byte 25
91 0039 01 .byte 1
92 003a 1A .byte 26
93 003b 01 .byte 1
94 003c 0F .byte 15
95 003d 01 .byte 1
96 003e 0000 .skip 2,0
97 .global NC_ERROR_TEXT
100 NC_ERROR_TEXT:
101 0040 4E6F 2045 .string "No Error "
101 7272 6F72
101 2020 2020
101 2020 2020
101 00
102 0051 4E6F 7420 .string "Not compatible "
102 636F 6D70
102 6174 6962
102 6C65 2020
102 00
103 0062 4D4B 334D .string "MK3Mag not compa"
103 6167 206E
103 6F74 2063
103 6F6D 7061
103 00
104 0073 4E6F 2046 .string "No FC communicat"
104 4320 636F
104 6D6D 756E
104 6963 6174
104 00
105 0084 436F 6D70 .string "Compass communic"
105 6173 7320
105 636F 6D6D
105 756E 6963
105 00
106 0095 4750 5320 .string "GPS communicatio"
106 636F 6D6D
106 756E 6963
106 6174 696F
106 00
107 00a6 636F 6D70 .string "compass value "
107 6173 7320
107 7661 6C75
107 6520 2020
107 00
108 00b7 5243 2053 .string "RC Signal lost "
108 6967 6E61
108 6C20 6C6F
108 7374 2020
108 00
109 00c8 4643 2073 .string "FC spi rx error "
109 7069 2072
109 7820 6572
109 726F 7220
109 00
110 00d9 4E6F 204E .string "No NC communicat"
110 4320 636F
110 6D6D 756E
110 6963 6174
110 00
111 00ea 4643 204E .string "FC Nick Gyro "
111 6963 6B20
111 4779 726F
111 2020 2020
111 00
112 00fb 4643 2052 .string "FC Roll Gyro "
112 6F6C 6C20
112 4779 726F
112 2020 2020
112 00
113 010c 4643 2059 .string "FC Yaw Gyro "
113 6177 2047
113 7972 6F20
113 2020 2020
113 00
114 011d 4643 204E .string "FC Nick ACC "
114 6963 6B20
114 4143 4320
114 2020 2020
114 00
115 012e 4643 2052 .string "FC Roll ACC "
115 6F6C 6C20
115 4143 4320
115 2020 2020
115 00
116 013f 4643 205A .string "FC Z-ACC "
116 2D41 4343
116 2020 2020
116 2020 2020
116 00
117 0150 5072 6573 .string "Pressure sensor "
117 7375 7265
117 2073 656E
117 736F 7220
117 00
118 0161 4932 4320 .string "I2C FC->BL-Ctrl "
118 4643 2D3E
118 424C 2D43
118 7472 6C20
118 00
119 0172 426C 204D .string "Bl Missing "
119 6973 7369
119 6E67 2020
119 2020 2020
119 00
120 0183 4D69 7865 .string "Mixer Error "
120 7220 4572
120 726F 7220
120 2020 2020
120 00
121 0194 4361 7265 .string "Carefree Error "
121 6672 6565
121 2045 7272
121 6F72 2020
121 00
122 01a5 4750 5320 .string "GPS Fix lost "
122 4669 7820
122 6C6F 7374
122 2020 2020
122 00
123 01b6 4D61 676E .string "Magnet Error "
123 6574 2045
123 7272 6F72
123 2020 2020
123 00
124 01c7 4D6F 746F .string "Motor restart "
124 7220 7265
124 7374 6172
124 7420 2020
124 00
125 01d8 424C 204C .string "BL Limitation "
125 696D 6974
125 6174 696F
125 6E20 2020
125 00
126 01e9 4750 5320 .string "GPS Range "
126 5261 6E67
126 6520 2020
126 2020 2020
126 00
127 01fa 4E6F 2053 .string "No SD-Card "
127 442D 4361
127 7264 2020
127 2020 2020
127 00
128 020b 5344 2D4C .string "SD-Logging error"
128 6F67 6769
128 6E67 2065
128 7272 6F72
128 00
129 021c 466C 7969 .string "Flying range! "
129 6E67 2072
129 616E 6765
129 2120 2020
129 00
130 022d 4D61 7820 .string "Max Altitude! "
130 416C 7469
130 7475 6465
130 2120 2020
130 00
131 023e 4E6F 2047 .string "No GPS fix "
131 5053 2066
131 6978 2020
131 2020 2020
131 00
132 024f 636F 6D70 .string "compass not cal."
132 6173 7320
132 6E6F 7420
132 6361 6C2E
132 00
133 .global UNDERVOLTAGE
136 UNDERVOLTAGE:
137 0260 2021 2120 .string " !! LiPo voltage !! "
137 4C69 506F
137 2076 6F6C
137 7461 6765
137 2021 2120
138 .global MIKROKOPTER
141 MIKROKOPTER:
142 0276 2020 2020 .string " MikroKopter "
142 204D 696B
142 726F 4B6F
142 7074 6572
142 2020 2020
143 .global HoTTVarioMeter
144 .global HoTTVarioMeter
145 .section .bss
148 HoTTVarioMeter:
149 0003 0000 .skip 2,0
150 .global ToNC_SpeakHoTT
151 .global ToNC_SpeakHoTT
154 ToNC_SpeakHoTT:
155 0005 00 .skip 1,0
156 .global SpeakHoTT
157 .data
160 SpeakHoTT:
161 0000 15 .byte 21
162 .global NaviData_TargetDistance
163 .global NaviData_TargetDistance
164 .section .bss
167 NaviData_TargetDistance:
168 0006 0000 .skip 2,0
169 .global NaviData_TargetHoldTime
170 .global NaviData_TargetHoldTime
173 NaviData_TargetHoldTime:
174 0008 00 .skip 1,0
175 .global NaviData_WaypointNumber
176 .global NaviData_WaypointNumber
179 NaviData_WaypointNumber:
180 0009 00 .skip 1,0
181 .global NaviData_WaypointIndex
182 .global NaviData_WaypointIndex
185 NaviData_WaypointIndex:
186 000a 00 .skip 1,0
187 .lcomm search.98,1
188 .lcomm tmp_max.99,1
189 .lcomm tmp_min.100,1
190 .lcomm who.101,1
191 .text
192 .global GetHottestBl
194 GetHottestBl:
195 /* prologue: frame size=0 */
196 /* prologue end (size=0) */
197 0000 3091 0000 lds r19,search.98
198 0004 E32F mov r30,r19
199 0006 FF27 clr r31
200 0008 83E0 ldi r24,3
201 000a EE0F 1: lsl r30
202 000c FF1F rol r31
203 000e 8A95 dec r24
204 0010 01F4 brne 1b
205 0012 E050 subi r30,lo8(-(Motor))
206 0014 F040 sbci r31,hi8(-(Motor))
207 0016 2781 ldd r18,Z+7
208 0018 422F mov r20,r18
209 001a 5527 clr r21
210 001c 47FD sbrc r20,7
211 001e 5095 com r21
212 0020 8091 0000 lds r24,tmp_max.99
213 0024 9927 clr r25
214 0026 8417 cp r24,r20
215 0028 9507 cpc r25,r21
216 002a 04F4 brge .L2
217 002c 2093 0000 sts tmp_max.99,r18
218 0030 3093 0000 sts who.101,r19
219 0034 00C0 rjmp .L3
220 .L2:
221 0036 2223 tst r18
222 0038 01F0 breq .L3
223 003a 8091 0000 lds r24,tmp_min.100
224 003e 9927 clr r25
225 0040 4817 cp r20,r24
226 0042 5907 cpc r21,r25
227 0044 04F4 brge .L3
228 0046 2093 0000 sts tmp_min.100,r18
229 .L3:
230 004a 832F mov r24,r19
231 004c 8F5F subi r24,lo8(-(1))
232 004e 8093 0000 sts search.98,r24
233 0052 8D30 cpi r24,lo8(13)
234 0054 00F0 brlo .L1
235 0056 1092 0000 sts search.98,__zero_reg__
236 005a 8091 0000 lds r24,tmp_min.100
237 005e 8F3F cpi r24,lo8(-1)
238 0060 01F0 breq .L7
239 0062 8093 0000 sts MinBlTempertaure,r24
240 0066 00C0 rjmp .L8
241 .L7:
242 0068 1092 0000 sts MinBlTempertaure,__zero_reg__
243 .L8:
244 006c 8091 0000 lds r24,tmp_max.99
245 0070 8093 0000 sts MaxBlTempertaure,r24
246 0074 8091 0000 lds r24,who.101
247 0078 8093 0000 sts HottestBl,r24
248 007c 8FEF ldi r24,lo8(-1)
249 007e 8093 0000 sts tmp_min.100,r24
250 0082 1092 0000 sts tmp_max.99,__zero_reg__
251 0086 1092 0000 sts who.101,__zero_reg__
252 .L1:
253 008a 0895 ret
254 /* epilogue: frame size=0 */
255 /* epilogue: noreturn */
256 /* epilogue end (size=0) */
257 /* function GetHottestBl size 70 (70) */
259 .section .progmem.data
262 __c.97:
263 028c 2020 2020 .string " "
263 2020 2020
263 2020 2020
263 2020 2020
263 2020 2020
264 .text
265 .global Hott_ClearLine
267 Hott_ClearLine:
268 /* prologue: frame size=0 */
269 /* prologue end (size=0) */
270 008c 95E1 ldi r25,lo8(21)
271 008e 899F mul r24,r25
272 0090 802D mov r24,r0
273 0092 1124 clr r1
274 0094 0E94 0000 call LIBFC_HoTT_SetPos
275 0098 80E0 ldi r24,lo8(__c.97)
276 009a 90E0 ldi r25,hi8(__c.97)
277 009c 9F93 push r25
278 009e 8F93 push r24
279 00a0 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
280 00a2 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
281 00a4 9F93 push r25
282 00a6 8F93 push r24
283 00a8 E091 0000 lds r30,_printf_P
284 00ac F091 0000 lds r31,(_printf_P)+1
285 00b0 0995 icall
286 00b2 0F90 pop __tmp_reg__
287 00b4 0F90 pop __tmp_reg__
288 00b6 0F90 pop __tmp_reg__
289 00b8 0F90 pop __tmp_reg__
290 /* epilogue: frame size=0 */
291 00ba 0895 ret
292 /* epilogue end (size=1) */
293 /* function Hott_ClearLine size 24 (23) */
295 .lcomm old_status.95,1
296 .lcomm repeat.96,2
297 .global HoTT_Waring
299 HoTT_Waring:
300 /* prologue: frame size=0 */
301 00bc CF93 push r28
302 /* prologue end (size=1) */
303 00be C0E0 ldi r28,lo8(0)
304 00c0 2091 0000 lds r18,SpeakHoTT
305 00c4 2093 0000 sts ToNC_SpeakHoTT,r18
306 00c8 8091 0000 lds r24,FC_StatusFlags
307 00cc 85FF sbrs r24,5
308 00ce 00C0 rjmp .L11
309 00d0 C0E1 ldi r28,lo8(16)
310 00d2 00C0 rjmp .L16
311 .L11:
312 00d4 9091 0000 lds r25,NC_ErrorCode
313 00d8 9923 tst r25
314 00da 01F0 breq .L25
315 00dc 8091 0000 lds r24,MotorenEin
316 00e0 8823 tst r24
317 00e2 01F4 brne .L15
318 00e4 E92F mov r30,r25
319 00e6 FF27 clr r31
320 00e8 EE0F add r30,r30
321 00ea FF1F adc r31,r31
322 00ec E050 subi r30,lo8(-(HOTT_ERROR+1))
323 00ee F040 sbci r31,hi8(-(HOTT_ERROR+1))
324 /* #APP */
325 00f0 8491 lpm r24, Z
326
327 /* #NOAPP */
328 00f2 8823 tst r24
329 00f4 01F4 brne .L25
330 .L15:
331 00f6 E92F mov r30,r25
332 00f8 FF27 clr r31
333 00fa EE0F add r30,r30
334 00fc FF1F adc r31,r31
335 00fe E050 subi r30,lo8(-(HOTT_ERROR))
336 0100 F040 sbci r31,hi8(-(HOTT_ERROR))
337 /* #APP */
338 0102 C491 lpm r28, Z
339
340 /* #NOAPP */
341 0104 CC23 tst r28
342 0106 01F4 brne .L16
343 .L25:
344 0108 8091 0000 lds r24,EE_Parameter+111
345 010c 86FD sbrc r24,6
346 010e 00C0 rjmp .L17
347 0110 1092 0000 sts SpeakHoTT,__zero_reg__
348 0114 00C0 rjmp .L19
349 .L17:
350 0116 C22F mov r28,r18
351 0118 00C0 rjmp .L19
352 .L16:
353 011a C093 0000 sts ToNC_SpeakHoTT,r28
354 .L19:
355 011e 8091 0000 lds r24,old_status.95
356 0122 8C17 cp r24,r28
357 0124 01F4 brne .L20
358 0126 8091 0000 lds r24,repeat.96
359 012a 9091 0000 lds r25,(repeat.96)+1
360 012e 0E94 0000 call CheckDelay
361 0132 8823 tst r24
362 0134 01F4 brne .L21
363 0136 80E0 ldi r24,lo8(0)
364 0138 90E0 ldi r25,hi8(0)
365 013a 00C0 rjmp .L10
366 .L21:
367 013c 88E8 ldi r24,lo8(5000)
368 013e 93E1 ldi r25,hi8(5000)
369 0140 00C0 rjmp .L26
370 .L20:
371 0142 80ED ldi r24,lo8(2000)
372 0144 97E0 ldi r25,hi8(2000)
373 .L26:
374 0146 0E94 0000 call SetDelay
375 014a 9093 0000 sts (repeat.96)+1,r25
376 014e 8093 0000 sts repeat.96,r24
377 0152 CC23 tst r28
378 0154 01F0 breq .L23
379 0156 8091 0000 lds r24,SpeakHoTT
380 015a C817 cp r28,r24
381 015c 01F4 brne .L23
382 015e 1092 0000 sts SpeakHoTT,__zero_reg__
383 .L23:
384 0162 C093 0000 sts old_status.95,r28
385 0166 8C2F mov r24,r28
386 0168 9927 clr r25
387 .L10:
388 /* epilogue: frame size=0 */
389 016a CF91 pop r28
390 016c 0895 ret
391 /* epilogue end (size=2) */
392 /* function HoTT_Waring size 95 (92) */
394 .global NC_Fills_HoTT_Telemety
396 NC_Fills_HoTT_Telemety:
397 /* prologue: frame size=0 */
398 /* prologue end (size=0) */
399 016e 40E0 ldi r20,lo8(0)
400 0170 50E0 ldi r21,hi8(0)
401 0172 30E0 ldi r19,lo8(0)
402 0174 8091 0000 lds r24,FromNaviCtrl+30
403 0178 9927 clr r25
404 017a 8A38 cpi r24,138
405 017c 9105 cpc r25,__zero_reg__
406 017e 01F0 breq .L30
407 0180 8B38 cpi r24,139
408 0182 9105 cpc r25,__zero_reg__
409 0184 04F4 brge .L33
410 0186 8938 cpi r24,137
411 0188 9105 cpc r25,__zero_reg__
412 018a 01F0 breq .L29
413 018c 00C0 rjmp .L28
414 .L33:
415 018e 8D38 cpi r24,141
416 0190 9105 cpc r25,__zero_reg__
417 0192 01F0 breq .L32
418 0194 8E38 cpi r24,142
419 0196 9105 cpc r25,__zero_reg__
420 0198 01F0 breq .L31
421 019a 00C0 rjmp .L28
422 .L29:
423 019c 40E0 ldi r20,lo8(VarioPacket)
424 019e 50E0 ldi r21,hi8(VarioPacket)
425 01a0 00C0 rjmp .L40
426 .L30:
427 01a2 40E0 ldi r20,lo8(GPSPacket)
428 01a4 50E0 ldi r21,hi8(GPSPacket)
429 01a6 00C0 rjmp .L40
430 .L31:
431 01a8 40E0 ldi r20,lo8(ElectricAirPacket)
432 01aa 50E0 ldi r21,hi8(ElectricAirPacket)
433 01ac 00C0 rjmp .L40
434 .L32:
435 01ae 40E0 ldi r20,lo8(HoTTGeneral)
436 01b0 50E0 ldi r21,hi8(HoTTGeneral)
437 .L40:
438 01b2 3CE2 ldi r19,lo8(44)
439 .L28:
440 01b4 9091 0000 lds r25,FromNaviCtrl+19
441 01b8 20E0 ldi r18,lo8(0)
442 .L41:
443 01ba 8091 0000 lds r24,FromNaviCtrl+20
444 01be 2817 cp r18,r24
445 01c0 00F4 brsh .L35
446 01c2 9317 cp r25,r19
447 01c4 00F4 brsh .L35
448 01c6 DA01 movw r26,r20
449 01c8 A90F add r26,r25
450 01ca B11D adc r27,__zero_reg__
451 01cc E22F mov r30,r18
452 01ce FF27 clr r31
453 01d0 E050 subi r30,lo8(-(FromNaviCtrl))
454 01d2 F040 sbci r31,hi8(-(FromNaviCtrl))
455 01d4 8589 ldd r24,Z+21
456 01d6 8C93 st X,r24
457 01d8 9F5F subi r25,lo8(-(1))
458 01da 2F5F subi r18,lo8(-(1))
459 01dc 00C0 rjmp .L41
460 .L35:
461 01de 0895 ret
462 /* epilogue: frame size=0 */
463 /* epilogue: noreturn */
464 /* epilogue end (size=0) */
465 /* function NC_Fills_HoTT_Telemety size 57 (57) */
467 .global BuildHoTT_Vario
469 BuildHoTT_Vario:
470 /* prologue: frame size=0 */
471 /* prologue end (size=0) */
472 01e0 20E3 ldi r18,lo8(30000)
473 01e2 35E7 ldi r19,hi8(30000)
474 01e4 8091 0000 lds r24,VarioCharacter
475 01e8 8B32 cpi r24,lo8(43)
476 01ea 01F0 breq .L44
477 01ec 8D32 cpi r24,lo8(45)
478 01ee 01F4 brne .L43
479 .L44:
480 01f0 8091 0000 lds r24,EE_Parameter+18
481 01f4 282F mov r18,r24
482 01f6 3327 clr r19
483 01f8 8091 0000 lds r24,AltitudeSetpointTrimming
484 01fc 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
485 0200 829F mul r24,r18
486 0202 A001 movw r20,r0
487 0204 839F mul r24,r19
488 0206 500D add r21,r0
489 0208 929F mul r25,r18
490 020a 500D add r21,r0
491 020c 1124 clr r1
492 020e CA01 movw r24,r20
493 0210 63E0 ldi r22,lo8(3)
494 0212 70E0 ldi r23,hi8(3)
495 0214 0E94 0000 call __divmodhi4
496 0218 CB01 movw r24,r22
497 021a 9B01 movw r18,r22
498 021c 205D subi r18,lo8(-(30000))
499 021e 3A48 sbci r19,hi8(-(30000))
500 0220 C196 adiw r24,49
501 0222 C197 sbiw r24,49
502 0224 00F0 brlo .+2
503 0226 00C0 rjmp .L46
504 0228 2EEF ldi r18,lo8(29950)
505 022a 34E7 ldi r19,hi8(29950)
506 022c 00C0 rjmp .L46
507 .L43:
508 022e 8032 cpi r24,lo8(32)
509 0230 01F4 brne .L47
510 0232 8091 0000 lds r24,FC_StatusFlags
511 0236 81FF sbrs r24,1
512 0238 00C0 rjmp .L46
513 023a 2091 0000 lds r18,HoTTVarioMeter
514 023e 3091 0000 lds r19,(HoTTVarioMeter)+1
515 0242 205D subi r18,lo8(-(30000))
516 0244 3A48 sbci r19,hi8(-(30000))
517 0246 55E7 ldi r21,hi8(30001)
518 0248 2133 cpi r18,lo8(30001)
519 024a 3507 cpc r19,r21
520 024c 00F0 brlo .L48
521 024e 85E7 ldi r24,hi8(30100)
522 0250 2439 cpi r18,lo8(30100)
523 0252 3807 cpc r19,r24
524 0254 00F4 brsh .L49
525 0256 20E3 ldi r18,lo8(30000)
526 0258 35E7 ldi r19,hi8(30000)
527 025a 00C0 rjmp .L48
528 .L49:
529 025c 2456 subi r18,lo8(-(-100))
530 025e 3040 sbci r19,hi8(-(-100))
531 .L48:
532 0260 45E7 ldi r20,hi8(30000)
533 0262 2033 cpi r18,lo8(30000)
534 0264 3407 cpc r19,r20
535 0266 00F4 brsh .L46
536 0268 54E7 ldi r21,hi8(29901)
537 026a 2D3C cpi r18,lo8(29901)
538 026c 3507 cpc r19,r21
539 026e 00F0 brlo .L52
540 0270 20E3 ldi r18,lo8(30000)
541 0272 35E7 ldi r19,hi8(30000)
542 0274 00C0 rjmp .L46
543 .L52:
544 0276 2C59 subi r18,lo8(-(100))
545 0278 3F4F sbci r19,hi8(-(100))
546 027a 00C0 rjmp .L46
547 .L47:
548 027c 8E35 cpi r24,lo8(94)
549 027e 01F4 brne .L55
550 0280 9091 0000 lds r25,FromNC_AltitudeSpeed
551 0284 8AE0 ldi r24,lo8(10)
552 0286 989F mul r25,r24
553 0288 9001 movw r18,r0
554 028a 1124 clr r1
555 028c 205D subi r18,lo8(-(30000))
556 028e 3A48 sbci r19,hi8(-(30000))
557 0290 00C0 rjmp .L46
558 .L55:
559 0292 8637 cpi r24,lo8(118)
560 0294 01F4 brne .L46
561 0296 9091 0000 lds r25,FromNC_AltitudeSpeed
562 029a 8AE0 ldi r24,lo8(10)
563 029c 989F mul r25,r24
564 029e C001 movw r24,r0
565 02a0 1124 clr r1
566 02a2 281B sub r18,r24
567 02a4 390B sbc r19,r25
568 .L46:
569 02a6 C901 movw r24,r18
570 /* epilogue: frame size=0 */
571 02a8 0895 ret
572 /* epilogue end (size=1) */
573 /* function BuildHoTT_Vario size 101 (100) */
575 .global HoTT_Telemety
577 HoTT_Telemety:
578 /* prologue: frame size=0 */
579 02aa EF92 push r14
580 02ac FF92 push r15
581 02ae 0F93 push r16
582 02b0 1F93 push r17
583 /* prologue end (size=4) */
584 02b2 9927 clr r25
585 02b4 8A38 cpi r24,138
586 02b6 9105 cpc r25,__zero_reg__
587 02b8 01F4 brne .+2
588 02ba 00C0 rjmp .L89
589 02bc 8B38 cpi r24,139
590 02be 9105 cpc r25,__zero_reg__
591 02c0 04F4 brge .L105
592 02c2 8938 cpi r24,137
593 02c4 9105 cpc r25,__zero_reg__
594 02c6 01F0 breq .L60
595 02c8 00C0 rjmp .L104
596 .L105:
597 02ca 8D38 cpi r24,141
598 02cc 9105 cpc r25,__zero_reg__
599 02ce 01F4 brne .+2
600 02d0 00C0 rjmp .L98
601 02d2 8E38 cpi r24,142
602 02d4 9105 cpc r25,__zero_reg__
603 02d6 01F4 brne .+2
604 02d8 00C0 rjmp .L95
605 02da 00C0 rjmp .L104
606 .L60:
607 02dc 8091 0000 lds r24,HoehenWert
608 02e0 9091 0000 lds r25,(HoehenWert)+1
609 02e4 A091 0000 lds r26,(HoehenWert)+2
610 02e8 B091 0000 lds r27,(HoehenWert)+3
611 02ec BC01 movw r22,r24
612 02ee CD01 movw r24,r26
613 02f0 24E6 ldi r18,lo8(100)
614 02f2 30E0 ldi r19,hi8(100)
615 02f4 40E0 ldi r20,hlo8(100)
616 02f6 50E0 ldi r21,hhi8(100)
617 02f8 0E94 0000 call __divmodsi4
618 02fc DA01 movw r26,r20
619 02fe C901 movw r24,r18
620 0300 8C50 subi r24,lo8(-(500))
621 0302 9E4F sbci r25,hi8(-(500))
622 0304 9093 0000 sts (VarioPacket+5)+1,r25
623 0308 8093 0000 sts VarioPacket+5,r24
624 030c 0E94 0000 call BuildHoTT_Vario
625 0310 9093 0000 sts (VarioPacket+11)+1,r25
626 0314 8093 0000 sts VarioPacket+11,r24
627 0318 9093 0000 sts (VarioPacket+13)+1,r25
628 031c 8093 0000 sts VarioPacket+13,r24
629 0320 9093 0000 sts (VarioPacket+15)+1,r25
630 0324 8093 0000 sts VarioPacket+15,r24
631 0328 2091 0000 lds r18,VarioPacket+5
632 032c 3091 0000 lds r19,(VarioPacket+5)+1
633 0330 8091 0000 lds r24,VarioPacket+9
634 0334 9091 0000 lds r25,(VarioPacket+9)+1
635 0338 2817 cp r18,r24
636 033a 3907 cpc r19,r25
637 033c 04F4 brge .L61
638 033e 3093 0000 sts (VarioPacket+9)+1,r19
639 0342 2093 0000 sts VarioPacket+9,r18
640 .L61:
641 0346 8091 0000 lds r24,VarioPacket+7
642 034a 9091 0000 lds r25,(VarioPacket+7)+1
643 034e 8217 cp r24,r18
644 0350 9307 cpc r25,r19
645 0352 04F4 brge .L62
646 0354 3093 0000 sts (VarioPacket+7)+1,r19
647 0358 2093 0000 sts VarioPacket+7,r18
648 .L62:
649 035c 1092 0000 sts VarioPacket+2,__zero_reg__
650 0360 80E0 ldi r24,lo8(VarioPacket)
651 0362 90E0 ldi r25,hi8(VarioPacket)
652 0364 9093 0000 sts (HoTT_DataPointer)+1,r25
653 0368 8093 0000 sts HoTT_DataPointer,r24
654 036c 8091 0000 lds r24,VarioCharacter
655 0370 8093 0000 sts VarioPacket+38,r24
656 0374 8091 0000 lds r24,FC_StatusFlags2
657 0378 80FF sbrs r24,0
658 037a 00C0 rjmp .L63
659 037c 83E4 ldi r24,lo8(67)
660 037e 00C0 rjmp .L111
661 .L63:
662 0380 80E2 ldi r24,lo8(32)
663 .L111:
664 0382 8093 0000 sts VarioPacket+39,r24
665 0386 2091 0000 lds r18,NC_ErrorCode
666 038a 2223 tst r18
667 038c 01F0 breq .L65
668 038e 822F mov r24,r18
669 0390 6AE0 ldi r22,lo8(10)
670 0392 0E94 0000 call __udivmodqi4
671 0396 805D subi r24,lo8(-(48))
672 0398 8093 0000 sts VarioPacket+17,r24
673 039c 822F mov r24,r18
674 039e 0E94 0000 call __udivmodqi4
675 03a2 892F mov r24,r25
676 03a4 805D subi r24,lo8(-(48))
677 03a6 8093 0000 sts VarioPacket+18,r24
678 03aa 8AE3 ldi r24,lo8(58)
679 03ac 8093 0000 sts VarioPacket+19,r24
680 03b0 81E1 ldi r24,lo8(17)
681 03b2 289F mul r18,r24
682 03b4 F001 movw r30,r0
683 03b6 1124 clr r1
684 03b8 A0E0 ldi r26,lo8(VarioPacket+20)
685 03ba B0E0 ldi r27,hi8(VarioPacket+20)
686 03bc E050 subi r30,lo8(-(NC_ERROR_TEXT))
687 03be F040 sbci r31,hi8(-(NC_ERROR_TEXT))
688 03c0 9FE0 ldi r25,lo8(15)
689 .L69:
690 /* #APP */
691 03c2 8491 lpm r24, Z
692
693 /* #NOAPP */
694 03c4 8D93 st X+,r24
695 03c6 9150 subi r25,lo8(-(-1))
696 03c8 3196 adiw r30,1
697 03ca 97FF sbrs r25,7
698 03cc 00C0 rjmp .L69
699 03ce 00C0 rjmp .L113
700 .L65:
701 03d0 8091 0000 lds r24,FC_StatusFlags
702 03d4 85FF sbrs r24,5
703 03d6 00C0 rjmp .L71
704 03d8 A0E0 ldi r26,lo8(VarioPacket+17)
705 03da B0E0 ldi r27,hi8(VarioPacket+17)
706 03dc E0E0 ldi r30,lo8(UNDERVOLTAGE)
707 03de F0E0 ldi r31,hi8(UNDERVOLTAGE)
708 03e0 94E1 ldi r25,lo8(20)
709 .L75:
710 /* #APP */
711 03e2 8491 lpm r24, Z
712
713 /* #NOAPP */
714 03e4 8D93 st X+,r24
715 03e6 9150 subi r25,lo8(-(-1))
716 03e8 3196 adiw r30,1
717 03ea 97FF sbrs r25,7
718 03ec 00C0 rjmp .L75
719 03ee 00C0 rjmp .L113
720 .L71:
721 03f0 3091 0000 lds r19,NaviData_WaypointNumber
722 03f4 3323 tst r19
723 03f6 01F4 brne .+2
724 03f8 00C0 rjmp .L77
725 03fa 87E5 ldi r24,lo8(87)
726 03fc 8093 0000 sts VarioPacket+17,r24
727 0400 80E5 ldi r24,lo8(80)
728 0402 8093 0000 sts VarioPacket+18,r24
729 0406 40E2 ldi r20,lo8(32)
730 0408 4093 0000 sts VarioPacket+19,r20
731 040c 2091 0000 lds r18,NaviData_WaypointIndex
732 0410 822F mov r24,r18
733 0412 6AE0 ldi r22,lo8(10)
734 0414 0E94 0000 call __udivmodqi4
735 0418 805D subi r24,lo8(-(48))
736 041a 8093 0000 sts VarioPacket+20,r24
737 041e 822F mov r24,r18
738 0420 0E94 0000 call __udivmodqi4
739 0424 892F mov r24,r25
740 0426 805D subi r24,lo8(-(48))
741 0428 8093 0000 sts VarioPacket+21,r24
742 042c 8FE2 ldi r24,lo8(47)
743 042e 8093 0000 sts VarioPacket+22,r24
744 0432 832F mov r24,r19
745 0434 0E94 0000 call __udivmodqi4
746 0438 805D subi r24,lo8(-(48))
747 043a 8093 0000 sts VarioPacket+23,r24
748 043e 832F mov r24,r19
749 0440 0E94 0000 call __udivmodqi4
750 0444 892F mov r24,r25
751 0446 805D subi r24,lo8(-(48))
752 0448 8093 0000 sts VarioPacket+24,r24
753 044c 4093 0000 sts VarioPacket+25,r20
754 0450 2091 0000 lds r18,NaviData_TargetDistance
755 0454 3091 0000 lds r19,(NaviData_TargetDistance)+1
756 0458 83E0 ldi r24,hi8(1001)
757 045a 293E cpi r18,lo8(1001)
758 045c 3807 cpc r19,r24
759 045e 00F0 brlo .L78
760 0460 C901 movw r24,r18
761 0462 68EE ldi r22,lo8(1000)
762 0464 73E0 ldi r23,hi8(1000)
763 0466 0E94 0000 call __udivmodhi4
764 046a CB01 movw r24,r22
765 046c 805D subi r24,lo8(-(48))
766 046e 8093 0000 sts VarioPacket+26,r24
767 0472 C901 movw r24,r18
768 0474 68EE ldi r22,lo8(1000)
769 0476 73E0 ldi r23,hi8(1000)
770 0478 0E94 0000 call __udivmodhi4
771 047c 9C01 movw r18,r24
772 047e 00C0 rjmp .L79
773 .L78:
774 0480 4093 0000 sts VarioPacket+26,r20
775 .L79:
776 0484 2536 cpi r18,101
777 0486 3105 cpc r19,__zero_reg__
778 0488 00F0 brlo .L80
779 048a C901 movw r24,r18
780 048c 64E6 ldi r22,lo8(100)
781 048e 70E0 ldi r23,hi8(100)
782 0490 0E94 0000 call __udivmodhi4
783 0494 CB01 movw r24,r22
784 0496 805D subi r24,lo8(-(48))
785 0498 8093 0000 sts VarioPacket+27,r24
786 049c C901 movw r24,r18
787 049e 64E6 ldi r22,lo8(100)
788 04a0 70E0 ldi r23,hi8(100)
789 04a2 0E94 0000 call __udivmodhi4
790 04a6 9C01 movw r18,r24
791 04a8 00C0 rjmp .L81
792 .L80:
793 04aa 80E2 ldi r24,lo8(32)
794 04ac 8093 0000 sts VarioPacket+27,r24
795 .L81:
796 04b0 C901 movw r24,r18
797 04b2 6AE0 ldi r22,lo8(10)
798 04b4 70E0 ldi r23,hi8(10)
799 04b6 0E94 0000 call __udivmodhi4
800 04ba CB01 movw r24,r22
801 04bc 805D subi r24,lo8(-(48))
802 04be 8093 0000 sts VarioPacket+28,r24
803 04c2 C901 movw r24,r18
804 04c4 6AE0 ldi r22,lo8(10)
805 04c6 70E0 ldi r23,hi8(10)
806 04c8 0E94 0000 call __udivmodhi4
807 04cc 805D subi r24,lo8(-(48))
808 04ce 8093 0000 sts VarioPacket+29,r24
809 04d2 8DE6 ldi r24,lo8(109)
810 04d4 8093 0000 sts VarioPacket+30,r24
811 04d8 80E2 ldi r24,lo8(32)
812 04da 8093 0000 sts VarioPacket+31,r24
813 04de 2091 0000 lds r18,NaviData_TargetHoldTime
814 04e2 2536 cpi r18,lo8(101)
815 04e4 00F0 brlo .L82
816 04e6 822F mov r24,r18
817 04e8 64E6 ldi r22,lo8(100)
818 04ea 0E94 0000 call __udivmodqi4
819 04ee 805D subi r24,lo8(-(48))
820 04f0 8093 0000 sts VarioPacket+32,r24
821 04f4 822F mov r24,r18
822 04f6 0E94 0000 call __udivmodqi4
823 04fa 292F mov r18,r25
824 04fc 00C0 rjmp .L83
825 .L82:
826 04fe 8093 0000 sts VarioPacket+32,r24
827 .L83:
828 0502 822F mov r24,r18
829 0504 6AE0 ldi r22,lo8(10)
830 0506 0E94 0000 call __udivmodqi4
831 050a 805D subi r24,lo8(-(48))
832 050c 8093 0000 sts VarioPacket+33,r24
833 0510 822F mov r24,r18
834 0512 0E94 0000 call __udivmodqi4
835 0516 892F mov r24,r25
836 0518 805D subi r24,lo8(-(48))
837 051a 8093 0000 sts VarioPacket+34,r24
838 051e 83E7 ldi r24,lo8(115)
839 0520 8093 0000 sts VarioPacket+35,r24
840 0524 80E2 ldi r24,lo8(32)
841 0526 8093 0000 sts VarioPacket+36,r24
842 052a 00C0 rjmp .L113
843 .L77:
844 052c A0E0 ldi r26,lo8(VarioPacket+17)
845 052e B0E0 ldi r27,hi8(VarioPacket+17)
846 0530 E0E0 ldi r30,lo8(MIKROKOPTER)
847 0532 F0E0 ldi r31,hi8(MIKROKOPTER)
848 0534 94E1 ldi r25,lo8(20)
849 .L88:
850 /* #APP */
851 0536 8491 lpm r24, Z
852
853 /* #NOAPP */
854 0538 8D93 st X+,r24
855 053a 9150 subi r25,lo8(-(-1))
856 053c 3196 adiw r30,1
857 053e 97FF sbrs r25,7
858 0540 00C0 rjmp .L88
859 0542 00C0 rjmp .L113
860 .L89:
861 0544 8091 0000 lds r24,HoehenWert
862 0548 9091 0000 lds r25,(HoehenWert)+1
863 054c A091 0000 lds r26,(HoehenWert)+2
864 0550 B091 0000 lds r27,(HoehenWert)+3
865 0554 BC01 movw r22,r24
866 0556 CD01 movw r24,r26
867 0558 24E6 ldi r18,lo8(100)
868 055a 30E0 ldi r19,hi8(100)
869 055c 40E0 ldi r20,hlo8(100)
870 055e 50E0 ldi r21,hhi8(100)
871 0560 0E94 0000 call __divmodsi4
872 0564 DA01 movw r26,r20
873 0566 C901 movw r24,r18
874 0568 8C50 subi r24,lo8(-(500))
875 056a 9E4F sbci r25,hi8(-(500))
876 056c 9093 0000 sts (GPSPacket+21)+1,r25
877 0570 8093 0000 sts GPSPacket+21,r24
878 0574 0E94 0000 call BuildHoTT_Vario
879 0578 9093 0000 sts (GPSPacket+23)+1,r25
880 057c 8093 0000 sts GPSPacket+23,r24
881 0580 88E7 ldi r24,lo8(120)
882 0582 8093 0000 sts GPSPacket+25,r24
883 0586 8091 0000 lds r24,GPSInfo+1
884 058a 8093 0000 sts GPSPacket+26,r24
885 058e 0E94 0000 call HoTT_Waring
886 0592 8093 0000 sts GPSPacket+2,r24
887 0596 8091 0000 lds r24,GPSInfo
888 059a 81FF sbrs r24,1
889 059c 00C0 rjmp .L90
890 059e 84E4 ldi r24,lo8(68)
891 05a0 00C0 rjmp .L112
892 .L90:
893 05a2 8091 0000 lds r24,GPSInfo+2
894 05a6 8330 cpi r24,lo8(3)
895 05a8 01F4 brne .L92
896 05aa 80E2 ldi r24,lo8(32)
897 05ac 00C0 rjmp .L112
898 .L92:
899 05ae 81E2 ldi r24,lo8(33)
900 .L112:
901 05b0 8093 0000 sts GPSPacket+27,r24
902 05b4 80E0 ldi r24,lo8(GPSPacket)
903 05b6 90E0 ldi r25,hi8(GPSPacket)
904 05b8 9093 0000 sts (HoTT_DataPointer)+1,r25
905 05bc 8093 0000 sts HoTT_DataPointer,r24
906 05c0 8091 0000 lds r24,NC_GPS_ModeCharacter
907 05c4 8093 0000 sts GPSPacket+39,r24
908 05c8 8091 0000 lds r24,GPSPacket+27
909 05cc 8093 0000 sts GPSPacket+41,r24
910 05d0 8091 0000 lds r24,GPSInfo+6
911 05d4 9091 0000 lds r25,(GPSInfo+6)+1
912 05d8 97FD sbrc r25,7
913 05da 0196 adiw r24,1
914 .L94:
915 05dc 9595 asr r25
916 05de 8795 ror r24
917 05e0 8093 0000 sts GPSPacket+28,r24
918 05e4 00C0 rjmp .L113
919 .L95:
920 05e6 0E94 0000 call GetHottestBl
921 05ea 8091 0000 lds r24,HoehenWert
922 05ee 9091 0000 lds r25,(HoehenWert)+1
923 05f2 A091 0000 lds r26,(HoehenWert)+2
924 05f6 B091 0000 lds r27,(HoehenWert)+3
925 05fa BC01 movw r22,r24
926 05fc CD01 movw r24,r26
927 05fe 24E6 ldi r18,lo8(100)
928 0600 30E0 ldi r19,hi8(100)
929 0602 40E0 ldi r20,hlo8(100)
930 0604 50E0 ldi r21,hhi8(100)
931 0606 0E94 0000 call __divmodsi4
932 060a DA01 movw r26,r20
933 060c C901 movw r24,r18
934 060e 8C50 subi r24,lo8(-(500))
935 0610 9E4F sbci r25,hi8(-(500))
936 0612 9093 0000 sts (ElectricAirPacket+26)+1,r25
937 0616 8093 0000 sts ElectricAirPacket+26,r24
938 061a 8091 0000 lds r24,UBat
939 061e 9091 0000 lds r25,(UBat)+1
940 0622 9093 0000 sts (ElectricAirPacket+20)+1,r25
941 0626 8093 0000 sts ElectricAirPacket+20,r24
942 062a 8091 0000 lds r24,UBat
943 062e 9091 0000 lds r25,(UBat)+1
944 0632 9093 0000 sts (ElectricAirPacket+22)+1,r25
945 0636 8093 0000 sts ElectricAirPacket+22,r24
946 063a 8091 0000 lds r24,ErsatzKompassInGrad
947 063e 9091 0000 lds r25,(ErsatzKompassInGrad)+1
948 0642 97FD sbrc r25,7
949 0644 0196 adiw r24,1
950 .L96:
951 0646 9595 asr r25
952 0648 8795 ror r24
953 064a 8093 0000 sts ElectricAirPacket+6,r24
954 064e 8093 0000 sts ElectricAirPacket+13,r24
955 0652 2091 0000 lds r18,GPSInfo+6
956 0656 3091 0000 lds r19,(GPSInfo+6)+1
957 065a 37FF sbrs r19,7
958 065c 00C0 rjmp .L97
959 065e 2F5F subi r18,lo8(-(1))
960 0660 3F4F sbci r19,hi8(-(1))
961 .L97:
962 0662 3595 asr r19
963 0664 2795 ror r18
964 0666 2093 0000 sts ElectricAirPacket+11,r18
965 066a 8091 0000 lds r24,GPSInfo+4
966 066e 9091 0000 lds r25,(GPSInfo+4)+1
967 0672 64E1 ldi r22,lo8(20)
968 0674 70E0 ldi r23,hi8(20)
969 0676 0E94 0000 call __udivmodhi4
970 067a 6093 0000 sts ElectricAirPacket+12,r22
971 067e 2093 0000 sts ElectricAirPacket+18,r18
972 0682 6093 0000 sts ElectricAirPacket+19,r22
973 0686 0E94 0000 call BuildHoTT_Vario
974 068a 9093 0000 sts (ElectricAirPacket+34)+1,r25
975 068e 8093 0000 sts ElectricAirPacket+34,r24
976 0692 88E7 ldi r24,lo8(120)
977 0694 8093 0000 sts ElectricAirPacket+36,r24
978 0698 8091 0000 lds r24,UBat
979 069c 9091 0000 lds r25,(UBat)+1
980 06a0 9093 0000 sts (ElectricAirPacket+30)+1,r25
981 06a4 8093 0000 sts ElectricAirPacket+30,r24
982 06a8 8091 0000 lds r24,MinBlTempertaure
983 06ac 8C5E subi r24,lo8(-(20))
984 06ae 8093 0000 sts ElectricAirPacket+24,r24
985 06b2 8091 0000 lds r24,MaxBlTempertaure
986 06b6 8C5E subi r24,lo8(-(20))
987 06b8 8093 0000 sts ElectricAirPacket+25,r24
988 06bc 8091 0000 lds r24,Capacity+4
989 06c0 9091 0000 lds r25,(Capacity+4)+1
990 06c4 6AE0 ldi r22,lo8(10)
991 06c6 70E0 ldi r23,hi8(10)
992 06c8 0E94 0000 call __udivmodhi4
993 06cc 7093 0000 sts (ElectricAirPacket+32)+1,r23
994 06d0 6093 0000 sts ElectricAirPacket+32,r22
995 06d4 1092 0000 sts ElectricAirPacket+2,__zero_reg__
996 06d8 8091 0000 lds r24,Capacity
997 06dc 9091 0000 lds r25,(Capacity)+1
998 06e0 9093 0000 sts (ElectricAirPacket+28)+1,r25
999 06e4 8093 0000 sts ElectricAirPacket+28,r24
1000 06e8 80E0 ldi r24,lo8(ElectricAirPacket)
1001 06ea 90E0 ldi r25,hi8(ElectricAirPacket)
1002 06ec 9093 0000 sts (HoTT_DataPointer)+1,r25
1003 06f0 8093 0000 sts HoTT_DataPointer,r24
1004 06f4 2091 0000 lds r18,FlugSekunden
1005 06f8 3091 0000 lds r19,(FlugSekunden)+1
1006 06fc C901 movw r24,r18
1007 06fe 6CE3 ldi r22,lo8(60)
1008 0700 70E0 ldi r23,hi8(60)
1009 0702 0E94 0000 call __udivmodhi4
1010 0706 6093 0000 sts ElectricAirPacket+39,r22
1011 070a C901 movw r24,r18
1012 070c 6CE3 ldi r22,lo8(60)
1013 070e 70E0 ldi r23,hi8(60)
1014 0710 0E94 0000 call __udivmodhi4
1015 0714 8093 0000 sts ElectricAirPacket+40,r24
1016 0718 00C0 rjmp .L113
1017 .L98:
1018 071a 0E94 0000 call GetHottestBl
1019 071e 8091 0000 lds r24,GPSInfo+4
1020 0722 9091 0000 lds r25,(GPSInfo+4)+1
1021 0726 64E6 ldi r22,lo8(100)
1022 0728 70E0 ldi r23,hi8(100)
1023 072a 0E94 0000 call __udivmodhi4
1024 072e 7093 0000 sts (HoTTGeneral+21)+1,r23
1025 0732 6093 0000 sts HoTTGeneral+21,r22
1026 0736 8091 0000 lds r24,ErsatzKompassInGrad
1027 073a 9091 0000 lds r25,(ErsatzKompassInGrad)+1
1028 073e 97FD sbrc r25,7
1029 0740 0196 adiw r24,1
1030 .L99:
1031 0742 9595 asr r25
1032 0744 8795 ror r24
1033 0746 8093 0000 sts HoTTGeneral+6,r24
1034 074a 8091 0000 lds r24,GPSInfo+6
1035 074e 9091 0000 lds r25,(GPSInfo+6)+1
1036 0752 97FD sbrc r25,7
1037 0754 0196 adiw r24,1
1038 .L100:
1039 0756 9595 asr r25
1040 0758 8795 ror r24
1041 075a 8093 0000 sts HoTTGeneral+11,r24
1042 075e 8091 0000 lds r24,BattLowVoltageWarning
1043 0762 482F mov r20,r24
1044 0764 5527 clr r21
1045 0766 9A01 movw r18,r20
1046 0768 2B5F subi r18,lo8(-(5))
1047 076a 3F4F sbci r19,hi8(-(5))
1048 076c 8091 0000 lds r24,UBat
1049 0770 9091 0000 lds r25,(UBat)+1
1050 0774 2817 cp r18,r24
1051 0776 3907 cpc r19,r25
1052 0778 04F4 brge .L101
1053 077a 8091 0000 lds r24,UBat
1054 077e 9091 0000 lds r25,(UBat)+1
1055 0782 841B sub r24,r20
1056 0784 950B sbc r25,r21
1057 0786 9C01 movw r18,r24
1058 0788 220F lsl r18
1059 078a 331F rol r19
1060 078c 280F add r18,r24
1061 078e 391F adc r19,r25
1062 0790 822F mov r24,r18
1063 0792 8251 subi r24,lo8(-(-18))
1064 0794 8093 0000 sts HoTTGeneral+18,r24
1065 0798 00C0 rjmp .L102
1066 .L101:
1067 079a 1092 0000 sts HoTTGeneral+18,__zero_reg__
1068 .L102:
1069 079e E090 0000 lds r14,HoehenWert
1070 07a2 F090 0000 lds r15,(HoehenWert)+1
1071 07a6 0091 0000 lds r16,(HoehenWert)+2
1072 07aa 1091 0000 lds r17,(HoehenWert)+3
1073 07ae C801 movw r24,r16
1074 07b0 B701 movw r22,r14
1075 07b2 24E6 ldi r18,lo8(100)
1076 07b4 30E0 ldi r19,hi8(100)
1077 07b6 40E0 ldi r20,hlo8(100)
1078 07b8 50E0 ldi r21,hhi8(100)
1079 07ba 0E94 0000 call __divmodsi4
1080 07be 3093 0000 sts (HoTTGeneral+19)+1,r19
1081 07c2 2093 0000 sts HoTTGeneral+19,r18
1082 07c6 37FF sbrs r19,7
1083 07c8 00C0 rjmp .L103
1084 07ca 1092 0000 sts (HoTTGeneral+19)+1,__zero_reg__
1085 07ce 1092 0000 sts HoTTGeneral+19,__zero_reg__
1086 .L103:
1087 07d2 C801 movw r24,r16
1088 07d4 B701 movw r22,r14
1089 07d6 24E6 ldi r18,lo8(100)
1090 07d8 30E0 ldi r19,hi8(100)
1091 07da 40E0 ldi r20,hlo8(100)
1092 07dc 50E0 ldi r21,hhi8(100)
1093 07de 0E94 0000 call __divmodsi4
1094 07e2 DA01 movw r26,r20
1095 07e4 C901 movw r24,r18
1096 07e6 8C50 subi r24,lo8(-(500))
1097 07e8 9E4F sbci r25,hi8(-(500))
1098 07ea 9093 0000 sts (HoTTGeneral+23)+1,r25
1099 07ee 8093 0000 sts HoTTGeneral+23,r24
1100 07f2 8091 0000 lds r24,UBat
1101 07f6 9091 0000 lds r25,(UBat)+1
1102 07fa 9093 0000 sts (HoTTGeneral+12)+1,r25
1103 07fe 8093 0000 sts HoTTGeneral+12,r24
1104 0802 8091 0000 lds r24,UBat
1105 0806 9091 0000 lds r25,(UBat)+1
1106 080a 9093 0000 sts (HoTTGeneral+14)+1,r25
1107 080e 8093 0000 sts HoTTGeneral+14,r24
1108 0812 0E94 0000 call BuildHoTT_Vario
1109 0816 9093 0000 sts (HoTTGeneral+25)+1,r25
1110 081a 8093 0000 sts HoTTGeneral+25,r24
1111 081e 88E7 ldi r24,lo8(120)
1112 0820 8093 0000 sts HoTTGeneral+27,r24
1113 0824 8091 0000 lds r24,UBat
1114 0828 9091 0000 lds r25,(UBat)+1
1115 082c 9093 0000 sts (HoTTGeneral+30)+1,r25
1116 0830 8093 0000 sts HoTTGeneral+30,r24
1117 0834 8091 0000 lds r24,MinBlTempertaure
1118 0838 8C5E subi r24,lo8(-(20))
1119 083a 8093 0000 sts HoTTGeneral+16,r24
1120 083e 8091 0000 lds r24,MaxBlTempertaure
1121 0842 8C5E subi r24,lo8(-(20))
1122 0844 8093 0000 sts HoTTGeneral+17,r24
1123 0848 8091 0000 lds r24,Capacity+4
1124 084c 9091 0000 lds r25,(Capacity+4)+1
1125 0850 6AE0 ldi r22,lo8(10)
1126 0852 70E0 ldi r23,hi8(10)
1127 0854 0E94 0000 call __udivmodhi4
1128 0858 7093 0000 sts (HoTTGeneral+32)+1,r23
1129 085c 6093 0000 sts HoTTGeneral+32,r22
1130 0860 1092 0000 sts HoTTGeneral+2,__zero_reg__
1131 0864 8091 0000 lds r24,Capacity
1132 0868 9091 0000 lds r25,(Capacity)+1
1133 086c 9093 0000 sts (HoTTGeneral+28)+1,r25
1134 0870 8093 0000 sts HoTTGeneral+28,r24
1135 0874 80E0 ldi r24,lo8(HoTTGeneral)
1136 0876 90E0 ldi r25,hi8(HoTTGeneral)
1137 0878 9093 0000 sts (HoTT_DataPointer)+1,r25
1138 087c 8093 0000 sts HoTT_DataPointer,r24
1139 .L113:
1140 0880 2CE2 ldi r18,lo8(44)
1141 0882 30E0 ldi r19,hi8(44)
1142 0884 00C0 rjmp .L58
1143 .L104:
1144 0886 20E0 ldi r18,lo8(0)
1145 0888 30E0 ldi r19,hi8(0)
1146 .L58:
1147 088a C901 movw r24,r18
1148 /* epilogue: frame size=0 */
1149 088c 1F91 pop r17
1150 088e 0F91 pop r16
1151 0890 FF90 pop r15
1152 0892 EF90 pop r14
1153 0894 0895 ret
1154 /* epilogue end (size=5) */
1155 /* function HoTT_Telemety size 771 (762) */
1157 .lcomm line.0,1
1158 .lcomm page.1,1
1159 .lcomm show_current.2,1
1160 .lcomm show_mag.3,1
1161 .lcomm show_poti.4,1
1162 .section .progmem.data
1165 __c.5:
1166 02a2 2020 2532 .string " %2i.%1iV "
1166 692E 2531
1166 6956 2020
1166 00
1169 __c.6:
1170 02af 2020 2532 .string " %2i.%1iV "
1170 692E 2531
1170 6956 2020
1170 00
1173 __c.7:
1174 02bc 414C 543A .string "ALT:%4im %c"
1174 2534 696D
1174 2025 6300
1177 __c.8:
1178 02c8 414C 543A .string "ALT:%4im "
1178 2534 696D
1178 2020 00
1181 __c.9:
1182 02d3 414C 543A .string "ALT:---- "
1182 2D2D 2D2D
1182 2000
1185 __c.10:
1186 02dd 2020 2532 .string " %2i:%02i "
1186 693A 2530
1186 3269 2020
1186 00
1189 __c.11:
1190 02ea 2020 2532 .string " %2i:%02i "
1190 693A 2530
1190 3269 2020
1190 00
1193 __c.12:
1194 02f7 4449 523A .string "DIR: %3d%c"
1194 2025 3364
1194 2563 00
1197 __c.13:
1198 0302 4300 .string "C"
1201 __c.14:
1202 0304 2000 .string " "
1205 __c.15:
1206 0306 2020 2535 .string " %5i "
1206 6920 2000
1209 __c.16:
1210 030e 2020 2535 .string " %5i "
1210 6920 2000
1213 __c.17:
1214 0316 493A 2532 .string "I:%2i.%1iA "
1214 692E 2531
1214 6941 2000
1217 __c.18:
1218 0322 3A00 .string ":"
1221 __c.19:
1222 0324 3A00 .string ":"
1225 __c.20:
1226 0326 3A00 .string ":"
1229 __c.21:
1230 0328 2D2D 2D2D .string "---------+-----------"
1230 2D2D 2D2D
1230 2D2B 2D2D
1230 2D2D 2D2D
1230 2D2D 2D2D
1233 __c.22:
1234 033e 2D2D 2D2D .string "---------------------"
1234 2D2D 2D2D
1234 2D2D 2D2D
1234 2D2D 2D2D
1234 2D2D 2D2D
1237 __c.23:
1238 0354 3A00 .string ":"
1241 __c.24:
1242 0356 5341 543A .string "SAT:%2d "
1242 2532 6420
1242 00
1245 __c.25:
1246 035f 4449 5354 .string "DIST:%3dm"
1246 3A25 3364
1246 6D00
1249 __c.26:
1250 0369 4420 00 .string "D "
1253 __c.27:
1254 036c 3344 00 .string "3D"
1257 __c.28:
1258 036f 2121 00 .string "!!"
1261 __c.29:
1262 0372 4D41 473A .string "MAG:%3u%% "
1262 2533 7525
1262 2520 00
1265 __c.30:
1266 037d 484D 3A25 .string "HM:%3d%c %c"
1266 3364 2563
1266 2025 6300
1269 __c.31:
1270 0389 696E 636C .string "incl:%2d%c(%2i)"
1270 3A25 3264
1270 2563 2825
1270 3269 2900
1273 __c.32:
1274 0399 2020 2020 .string " %2um/s: HM:%3d%c %c"
1274 2532 756D
1274 2F73 3A20
1274 2048 4D3A
1274 2533 6425
1277 __c.33:
1278 03b2 4552 523A .string "ERR: %2d !"
1278 2025 3264
1278 2021 00
1281 __c.34:
1282 03bd 4552 523A .string "ERR: "
1282 2000
1285 __c.35:
1286 03c3 2121 204C .string "!! LiPo voltage !!"
1286 6950 6F20
1286 766F 6C74
1286 6167 6520
1286 2121 00
1289 __c.36:
1290 03d6 2077 7777 .string " www.MikroKopter.de "
1290 2E4D 696B
1290 726F 4B6F
1290 7074 6572
1290 2E64 6520
1293 __c.37:
1294 03ec 2025 3269 .string " %2i:%02i %2i.%1iV %4imAh"
1294 3A25 3032
1294 6920 2025
1294 3269 2E25
1294 3169 5620
1297 __c.38:
1298 0407 2025 3269 .string " %2i:%02i %2i.%1iV %4imAh"
1298 3A25 3032
1298 6920 2025
1298 3269 2E25
1298 3169 5620
1301 __c.39:
1302 0422 4449 523A .string "DIR:%3d%c"
1302 2533 6425
1302 6300
1305 __c.40:
1306 042c 414C 543A .string "ALT:%4im"
1306 2534 696D
1306 00
1309 __c.41:
1310 0435 414C 543A .string "ALT:%4im"
1310 2534 696D
1310 00
1313 __c.42:
1314 043e 414C 543A .string "ALT:---- "
1314 2D2D 2D2D
1314 2000
1317 __c.43:
1318 0448 2563 00 .string "%c"
1321 __c.44:
1322 044b 484D 3A25 .string "HM:%3d%c DIST:%3dm %c"
1322 3364 2563
1322 2020 4449
1322 5354 3A25
1322 3364 6D20
1325 __c.45:
1326 0462 5057 523A .string "PWR:%2i.%1iA (%iW) "
1326 2532 692E
1326 2531 6941
1326 2028 2569
1326 5729 2000
1329 __c.46:
1330 0476 4346 00 .string "CF"
1333 __c.47:
1334 0479 2020 00 .string " "
1337 __c.48:
1338 047c 4750 533A .string "GPS:%2um/s SAT:%d "
1338 2532 756D
1338 2F73 2053
1338 4154 3A25
1338 6420 00
1341 __c.49:
1342 048f 2020 3344 .string " 3D "
1342 2000
1345 __c.50:
1346 0495 4E4F 4649 .string "NOFIX"
1346 5800
1349 __c.51:
1350 049b 4447 5053 .string "DGPS "
1350 2000
1353 __c.52:
1354 04a1 2020 204E .string " No NaviCtrl "
1354 6F20 4E61
1354 7669 4374
1354 726C 2020
1354 2020 2020
1357 __c.53:
1358 04b7 2532 692E .string "%2i.%i %2i.%i %2i.%i %2i.%iA"
1358 2569 2025
1358 3269 2E25
1358 6920 2532
1358 692E 2569
1361 __c.54:
1362 04d4 2533 6920 .string "%3i %3i %3i %3i%cC"
1362 2533 6920
1362 2533 6920
1362 2533 6925
1362 6343 00
1365 __c.55:
1366 04e7 2532 692E .string "%2i.%i %2i.%iA"
1366 2569 2025
1366 3269 2E25
1366 6941 00
1369 __c.56:
1370 04f6 2532 692E .string "%2i.%i %2i.%i %2i.%i %2i.%iA"
1370 2569 2025
1370 3269 2E25
1370 6920 2532
1370 692E 2569
1373 __c.57:
1374 0513 2533 6920 .string "%3i %3i%cC "
1374 2533 6925
1374 6343 2020
1374 2020 2020
1374 2020 00
1377 __c.58:
1378 0526 2533 6920 .string "%3i %3i %3i %3i%cC"
1378 2533 6920
1378 2533 6920
1378 2533 6925
1378 6343 00
1381 __c.59:
1382 0539 4552 523A .string "ERR: %2d !"
1382 2025 3264
1382 2021 00
1385 __c.60:
1386 0544 4552 523A .string "ERR: "
1386 2000
1389 __c.61:
1390 054a 2121 204C .string "!! LiPo voltage !!"
1390 6950 6F20
1390 766F 6C74
1390 6167 6520
1390 2121 00
1393 __c.62:
1394 055d 2077 7777 .string " www.MikroKopter.de "
1394 2E4D 696B
1394 726F 4B6F
1394 7074 6572
1394 2E64 6520
1397 __c.63:
1398 0573 5365 7474 .string "Setting:%u %s "
1398 696E 673A
1398 2575 2025
1398 7320 00
1401 __c.64:
1402 0582 4D69 6E3A .string "Min:%2i.%1iV %s "
1402 2532 692E
1402 2531 6956
1402 2025 7320
1402 00
1405 __c.65:
1406 0593 414C 543A .string "ALT:"
1406 00
1409 __c.66:
1410 0598 504F 5449 .string "POTI:%3u "
1410 3A25 3375
1410 2000
1413 __c.67:
1414 05a2 284F 4E29 .string "(ON) "
1414 2020 00
1417 __c.68:
1418 05a9 284F 4646 .string "(OFF) "
1418 2920 00
1421 __c.69:
1422 05b0 4C49 4D49 .string "LIMIT"
1422 5400
1425 __c.70:
1426 05b6 5641 5249 .string "VARIO"
1426 4F00
1429 __c.71:
1430 05bc 4449 5341 .string "DISABLED"
1430 424C 4544
1430 00
1433 __c.72:
1434 05c5 4346 3A00 .string "CF:"
1437 __c.73:
1438 05c9 4449 5341 .string "DISABLED"
1438 424C 4544
1438 00
1441 __c.74:
1442 05d2 2028 4F4E .string " (ON) "
1442 2920 00
1445 __c.75:
1446 05d9 2028 4F46 .string " (OFF)"
1446 4629 00
1449 __c.76:
1450 05e0 2054 4541 .string " TEACH"
1450 4348 00
1453 __c.77:
1454 05e7 4750 533A .string "GPS:"
1454 00
1457 __c.78:
1458 05ec 4449 5341 .string "DISABLED"
1458 424C 4544
1458 00
1461 __c.79:
1462 05f5 2846 5245 .string "(FREE)"
1462 4529 00
1465 __c.80:
1466 05fc 2848 4F4D .string "(HOME)"
1466 4529 00
1469 __c.81:
1470 0603 2841 4944 .string "(AID) "
1470 2920 00
1473 __c.82:
1474 060a 2848 4F4C .string "(HOLD)"
1474 4429 00
1477 __c.83:
1478 0611 2046 533A .string " FS:%usek "
1478 2575 7365
1478 6B20 00
1481 __c.84:
1482 061c 484F 4D45 .string "HOME ALT:"
1482 2041 4C54
1482 3A00
1485 __c.85:
1486 0626 2575 6D00 .string "%um"
1489 __c.86:
1490 062a 484F 4C44 .string "HOLD "
1490 2000
1493 __c.87:
1494 0630 4E69 3A25 .string "Ni:%4i Ro:%4i C:%3i"
1494 3469 2052
1494 6F3A 2534
1494 6920 433A
1494 2533 6900
1497 __c.88:
1498 0644 4773 3A25 .string "Gs:%4i Ya:%4i "
1498 3469 2059
1498 613A 2534
1498 6920 00
1501 __c.89:
1502 0653 5031 3A25 .string "P1:%4i P2:%4i 3:%3i"
1502 3469 2050
1502 323A 2534
1502 6920 333A
1502 2533 6900
1505 __c.90:
1506 0667 5034 3A25 .string "P4:%4i P5:%4i 6:%3i"
1506 3469 2050
1506 353A 2534
1506 6920 363A
1506 2533 6900
1509 __c.91:
1510 067b 434F 5550 .string "COUPLING OFF! "
1510 4C49 4E47
1510 204F 4646
1510 2120 00
1513 __c.92:
1514 068a 4C4F 4F50 .string "LOOPING! "
1514 494E 4721
1514 2000
1517 __c.93:
1518 0694 4848 2120 .string "HH! "
1518 00
1521 __c.94:
1522 0699 434F 4D50 .string "COMPASS OFF! "
1522 4153 5320
1522 4F46 4621
1522 2000
1523 .text
1524 .global HoTT_Menu
1526 HoTT_Menu:
1527 /* prologue: frame size=0 */
1528 0896 EF92 push r14
1529 0898 FF92 push r15
1530 089a 0F93 push r16
1531 089c 1F93 push r17
1532 089e CF93 push r28
1533 08a0 DF93 push r29
1534 /* prologue end (size=6) */
1535 08a2 8091 0000 lds r24,HoTTVarioMeter
1536 08a6 9091 0000 lds r25,(HoTTVarioMeter)+1
1537 08aa 9C01 movw r18,r24
1538 08ac 53E0 ldi r21,3
1539 08ae 220F 1: lsl r18
1540 08b0 331F rol r19
1541 08b2 5A95 dec r21
1542 08b4 01F4 brne 1b
1543 08b6 281B sub r18,r24
1544 08b8 390B sbc r19,r25
1545 08ba 8091 0000 lds r24,VarioMeter
1546 08be 9091 0000 lds r25,(VarioMeter)+1
1547 08c2 280F add r18,r24
1548 08c4 391F adc r19,r25
1549 08c6 37FF sbrs r19,7
1550 08c8 00C0 rjmp .L115
1551 08ca 295F subi r18,lo8(-(7))
1552 08cc 3F4F sbci r19,hi8(-(7))
1553 .L115:
1554 08ce 43E0 ldi r20,3
1555 08d0 3595 1: asr r19
1556 08d2 2795 ror r18
1557 08d4 4A95 dec r20
1558 08d6 01F4 brne 1b
1559 08d8 3093 0000 sts (HoTTVarioMeter)+1,r19
1560 08dc 2093 0000 sts HoTTVarioMeter,r18
1561 08e0 9091 0000 lds r25,page.1
1562 08e4 9923 tst r25
1563 08e6 01F0 breq .+2
1564 08e8 00C0 rjmp .L116
1565 08ea 8091 0000 lds r24,line.0
1566 08ee 282F mov r18,r24
1567 08f0 3327 clr r19
1568 08f2 4427 clr r20
1569 08f4 5527 clr r21
1570 08f6 8F5F subi r24,lo8(-(1))
1571 08f8 8093 0000 sts line.0,r24
1572 08fc F901 movw r30,r18
1573 08fe 2131 cpi r18,17
1574 0900 3105 cpc r19,__zero_reg__
1575 0902 00F0 brlo .+2
1576 0904 00C0 rjmp .L169
1577 0906 E050 subi r30,lo8(-(pm(.L170)))
1578 0908 F040 sbci r31,hi8(-(pm(.L170)))
1579 090a 0C94 0000 jmp __tablejump2__
1580 .data
1581 .section .progmem.gcc_sw_table, "a", @progbits
1582 .p2align 1
1583 .L170:
1584 0000 0000 .word pm(.L118)
1585 0002 0000 .word pm(.L125)
1586 0004 0000 .word pm(.L130)
1587 0006 0000 .word pm(.L133)
1588 0008 0000 .word pm(.L134)
1589 000a 0000 .word pm(.L142)
1590 000c 0000 .word pm(.L114)
1591 000e 0000 .word pm(.L148)
1592 0010 0000 .word pm(.L163)
1593 0012 0000 .word pm(.L163)
1594 0014 0000 .word pm(.L163)
1595 0016 0000 .word pm(.L163)
1596 0018 0000 .word pm(.L163)
1597 001a 0000 .word pm(.L163)
1598 001c 0000 .word pm(.L163)
1599 001e 0000 .word pm(.L163)
1600 0020 0000 .word pm(.L163)
1601 .text
1602 .L118:
1603 090e 8091 0000 lds r24,FC_StatusFlags
1604 0912 85FF sbrs r24,5
1605 0914 00C0 rjmp .L119
1606 0916 80E0 ldi r24,lo8(0)
1607 0918 0E94 0000 call LIBFC_HoTT_SetPos
1608 091c 8091 0000 lds r24,UBat
1609 0920 9091 0000 lds r25,(UBat)+1
1610 0924 6AE0 ldi r22,lo8(10)
1611 0926 70E0 ldi r23,hi8(10)
1612 0928 0E94 0000 call __divmodhi4
1613 092c 9F93 push r25
1614 092e 8F93 push r24
1615 0930 8091 0000 lds r24,UBat
1616 0934 9091 0000 lds r25,(UBat)+1
1617 0938 6AE0 ldi r22,lo8(10)
1618 093a 70E0 ldi r23,hi8(10)
1619 093c 0E94 0000 call __divmodhi4
1620 0940 7F93 push r23
1621 0942 6F93 push r22
1622 0944 80E0 ldi r24,lo8(__c.5)
1623 0946 90E0 ldi r25,hi8(__c.5)
1624 0948 9F93 push r25
1625 094a 8F93 push r24
1626 094c 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
1627 094e 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
1628 0950 9F93 push r25
1629 0952 8F93 push r24
1630 0954 E091 0000 lds r30,_printf_P
1631 0958 F091 0000 lds r31,(_printf_P)+1
1632 095c 0995 icall
1633 095e 2DB7 in r18,__SP_L__
1634 0960 3EB7 in r19,__SP_H__
1635 0962 285F subi r18,lo8(-(8))
1636 0964 3F4F sbci r19,hi8(-(8))
1637 0966 2DBF out __SP_L__,r18
1638 0968 00C0 rjmp .L120
1639 .L119:
1640 096a 80E0 ldi r24,lo8(0)
1641 096c 0E94 0000 call LIBFC_HoTT_SetPos
1642 0970 8091 0000 lds r24,UBat
1643 0974 9091 0000 lds r25,(UBat)+1
1644 0978 6AE0 ldi r22,lo8(10)
1645 097a 70E0 ldi r23,hi8(10)
1646 097c 0E94 0000 call __divmodhi4
1647 0980 9F93 push r25
1648 0982 8F93 push r24
1649 0984 8091 0000 lds r24,UBat
1650 0988 9091 0000 lds r25,(UBat)+1
1651 098c 6AE0 ldi r22,lo8(10)
1652 098e 70E0 ldi r23,hi8(10)
1653 0990 0E94 0000 call __divmodhi4
1654 0994 7F93 push r23
1655 0996 6F93 push r22
1656 0998 80E0 ldi r24,lo8(__c.6)
1657 099a 90E0 ldi r25,hi8(__c.6)
1658 099c 9F93 push r25
1659 099e 8F93 push r24
1660 09a0 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
1661 09a2 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
1662 09a4 9F93 push r25
1663 09a6 8F93 push r24
1664 09a8 E091 0000 lds r30,_printf_P
1665 09ac F091 0000 lds r31,(_printf_P)+1
1666 09b0 0995 icall
1667 09b2 8DB7 in r24,__SP_L__
1668 09b4 9EB7 in r25,__SP_H__
1669 09b6 0896 adiw r24,8
1670 09b8 8DBF out __SP_L__,r24
1671 .L120:
1672 09ba 8091 0000 lds r24,Parameter_GlobalConfig
1673 09be 80FF sbrs r24,0
1674 09c0 00C0 rjmp .L121
1675 09c2 8091 0000 lds r24,HoehenReglerAktiv
1676 09c6 8823 tst r24
1677 09c8 01F0 breq .L122
1678 09ca 8AE0 ldi r24,lo8(10)
1679 09cc 0E94 0000 call LIBFC_HoTT_SetPos
1680 09d0 8091 0000 lds r24,VarioCharacter
1681 09d4 9927 clr r25
1682 09d6 9F93 push r25
1683 09d8 8F93 push r24
1684 09da 8091 0000 lds r24,HoehenWert
1685 09de 9091 0000 lds r25,(HoehenWert)+1
1686 09e2 A091 0000 lds r26,(HoehenWert)+2
1687 09e6 B091 0000 lds r27,(HoehenWert)+3
1688 09ea BC01 movw r22,r24
1689 09ec CD01 movw r24,r26
1690 09ee 24E6 ldi r18,lo8(100)
1691 09f0 30E0 ldi r19,hi8(100)
1692 09f2 40E0 ldi r20,hlo8(100)
1693 09f4 50E0 ldi r21,hhi8(100)
1694 09f6 0E94 0000 call __divmodsi4
1695 09fa 3F93 push r19
1696 09fc 2F93 push r18
1697 09fe 80E0 ldi r24,lo8(__c.7)
1698 0a00 90E0 ldi r25,hi8(__c.7)
1699 0a02 00C0 rjmp .L313
1700 .L122:
1701 0a04 8AE0 ldi r24,lo8(10)
1702 0a06 0E94 0000 call LIBFC_HoTT_SetPos
1703 0a0a 8091 0000 lds r24,HoehenWert
1704 0a0e 9091 0000 lds r25,(HoehenWert)+1
1705 0a12 A091 0000 lds r26,(HoehenWert)+2
1706 0a16 B091 0000 lds r27,(HoehenWert)+3
1707 0a1a BC01 movw r22,r24
1708 0a1c CD01 movw r24,r26
1709 0a1e 24E6 ldi r18,lo8(100)
1710 0a20 30E0 ldi r19,hi8(100)
1711 0a22 40E0 ldi r20,hlo8(100)
1712 0a24 50E0 ldi r21,hhi8(100)
1713 0a26 0E94 0000 call __divmodsi4
1714 0a2a 3F93 push r19
1715 0a2c 2F93 push r18
1716 0a2e 80E0 ldi r24,lo8(__c.8)
1717 0a30 90E0 ldi r25,hi8(__c.8)
1718 0a32 00C0 rjmp .L331
1719 .L121:
1720 0a34 8AE0 ldi r24,lo8(10)
1721 0a36 0E94 0000 call LIBFC_HoTT_SetPos
1722 0a3a 80E0 ldi r24,lo8(__c.9)
1723 0a3c 90E0 ldi r25,hi8(__c.9)
1724 0a3e 9F93 push r25
1725 0a40 8F93 push r24
1726 0a42 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
1727 0a44 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
1728 0a46 0C94 0000 jmp .L321
1729 .L125:
1730 0a4a 8091 0000 lds r24,FC_StatusFlags
1731 0a4e 85FF sbrs r24,5
1732 0a50 00C0 rjmp .L126
1733 0a52 85E1 ldi r24,lo8(21)
1734 0a54 0E94 0000 call LIBFC_HoTT_SetPos
1735 0a58 8091 0000 lds r24,FlugSekunden
1736 0a5c 9091 0000 lds r25,(FlugSekunden)+1
1737 0a60 6CE3 ldi r22,lo8(60)
1738 0a62 70E0 ldi r23,hi8(60)
1739 0a64 0E94 0000 call __udivmodhi4
1740 0a68 9F93 push r25
1741 0a6a 8F93 push r24
1742 0a6c 8091 0000 lds r24,FlugSekunden
1743 0a70 9091 0000 lds r25,(FlugSekunden)+1
1744 0a74 6CE3 ldi r22,lo8(60)
1745 0a76 70E0 ldi r23,hi8(60)
1746 0a78 0E94 0000 call __udivmodhi4
1747 0a7c 7F93 push r23
1748 0a7e 6F93 push r22
1749 0a80 80E0 ldi r24,lo8(__c.10)
1750 0a82 90E0 ldi r25,hi8(__c.10)
1751 0a84 9F93 push r25
1752 0a86 8F93 push r24
1753 0a88 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
1754 0a8a 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
1755 0a8c 9F93 push r25
1756 0a8e 8F93 push r24
1757 0a90 E091 0000 lds r30,_printf_P
1758 0a94 F091 0000 lds r31,(_printf_P)+1
1759 0a98 0995 icall
1760 0a9a 2DB7 in r18,__SP_L__
1761 0a9c 3EB7 in r19,__SP_H__
1762 0a9e 285F subi r18,lo8(-(8))
1763 0aa0 3F4F sbci r19,hi8(-(8))
1764 0aa2 2DBF out __SP_L__,r18
1765 0aa4 00C0 rjmp .L127
1766 .L126:
1767 0aa6 85E1 ldi r24,lo8(21)
1768 0aa8 0E94 0000 call LIBFC_HoTT_SetPos
1769 0aac 8091 0000 lds r24,FlugSekunden
1770 0ab0 9091 0000 lds r25,(FlugSekunden)+1
1771 0ab4 6CE3 ldi r22,lo8(60)
1772 0ab6 70E0 ldi r23,hi8(60)
1773 0ab8 0E94 0000 call __udivmodhi4
1774 0abc 9F93 push r25
1775 0abe 8F93 push r24
1776 0ac0 8091 0000 lds r24,FlugSekunden
1777 0ac4 9091 0000 lds r25,(FlugSekunden)+1
1778 0ac8 6CE3 ldi r22,lo8(60)
1779 0aca 70E0 ldi r23,hi8(60)
1780 0acc 0E94 0000 call __udivmodhi4
1781 0ad0 7F93 push r23
1782 0ad2 6F93 push r22
1783 0ad4 80E0 ldi r24,lo8(__c.11)
1784 0ad6 90E0 ldi r25,hi8(__c.11)
1785 0ad8 9F93 push r25
1786 0ada 8F93 push r24
1787 0adc 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
1788 0ade 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
1789 0ae0 9F93 push r25
1790 0ae2 8F93 push r24
1791 0ae4 E091 0000 lds r30,_printf_P
1792 0ae8 F091 0000 lds r31,(_printf_P)+1
1793 0aec 0995 icall
1794 0aee 8DB7 in r24,__SP_L__
1795 0af0 9EB7 in r25,__SP_H__
1796 0af2 0896 adiw r24,8
1797 0af4 8DBF out __SP_L__,r24
1798 .L127:
1799 0af6 8FE1 ldi r24,lo8(31)
1800 0af8 0E94 0000 call LIBFC_HoTT_SetPos
1801 0afc 80E6 ldi r24,lo8(96)
1802 0afe 90E0 ldi r25,hi8(96)
1803 0b00 9F93 push r25
1804 0b02 8F93 push r24
1805 0b04 8091 0000 lds r24,ErsatzKompassInGrad
1806 0b08 9091 0000 lds r25,(ErsatzKompassInGrad)+1
1807 0b0c 9F93 push r25
1808 0b0e 8F93 push r24
1809 0b10 80E0 ldi r24,lo8(__c.12)
1810 0b12 90E0 ldi r25,hi8(__c.12)
1811 0b14 9F93 push r25
1812 0b16 8F93 push r24
1813 0b18 C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
1814 0b1a D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
1815 0b1c DF93 push r29
1816 0b1e CF93 push r28
1817 0b20 E091 0000 lds r30,_printf_P
1818 0b24 F091 0000 lds r31,(_printf_P)+1
1819 0b28 0995 icall
1820 0b2a 8091 0000 lds r24,FC_StatusFlags2
1821 0b2e 2DB7 in r18,__SP_L__
1822 0b30 3EB7 in r19,__SP_H__
1823 0b32 285F subi r18,lo8(-(8))
1824 0b34 3F4F sbci r19,hi8(-(8))
1825 0b36 2DBF out __SP_L__,r18
1826 0b38 80FF sbrs r24,0
1827 0b3a 00C0 rjmp .L128
1828 0b3c 89E2 ldi r24,lo8(41)
1829 0b3e 0E94 0000 call LIBFC_HoTT_SetPos
1830 0b42 80E0 ldi r24,lo8(__c.13)
1831 0b44 90E0 ldi r25,hi8(__c.13)
1832 0b46 00C0 rjmp .L333
1833 .L128:
1834 0b48 89E2 ldi r24,lo8(41)
1835 0b4a 0E94 0000 call LIBFC_HoTT_SetPos
1836 0b4e 80E0 ldi r24,lo8(__c.14)
1837 0b50 90E0 ldi r25,hi8(__c.14)
1838 0b52 00C0 rjmp .L328
1839 .L130:
1840 0b54 8091 0000 lds r24,FC_StatusFlags
1841 0b58 85FF sbrs r24,5
1842 0b5a 00C0 rjmp .L131
1843 0b5c 8AE2 ldi r24,lo8(42)
1844 0b5e 0E94 0000 call LIBFC_HoTT_SetPos
1845 0b62 8091 0000 lds r24,Capacity+4
1846 0b66 9091 0000 lds r25,(Capacity+4)+1
1847 0b6a 9F93 push r25
1848 0b6c 8F93 push r24
1849 0b6e 80E0 ldi r24,lo8(__c.15)
1850 0b70 90E0 ldi r25,hi8(__c.15)
1851 0b72 9F93 push r25
1852 0b74 8F93 push r24
1853 0b76 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
1854 0b78 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
1855 0b7a 9F93 push r25
1856 0b7c 8F93 push r24
1857 0b7e E091 0000 lds r30,_printf_P
1858 0b82 F091 0000 lds r31,(_printf_P)+1
1859 0b86 0995 icall
1860 0b88 8DB7 in r24,__SP_L__
1861 0b8a 9EB7 in r25,__SP_H__
1862 0b8c 0696 adiw r24,6
1863 0b8e 8DBF out __SP_L__,r24
1864 0b90 00C0 rjmp .L132
1865 .L131:
1866 0b92 8AE2 ldi r24,lo8(42)
1867 0b94 0E94 0000 call LIBFC_HoTT_SetPos
1868 0b98 8091 0000 lds r24,Capacity+4
1869 0b9c 9091 0000 lds r25,(Capacity+4)+1
1870 0ba0 9F93 push r25
1871 0ba2 8F93 push r24
1872 0ba4 80E0 ldi r24,lo8(__c.16)
1873 0ba6 90E0 ldi r25,hi8(__c.16)
1874 0ba8 9F93 push r25
1875 0baa 8F93 push r24
1876 0bac 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
1877 0bae 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
1878 0bb0 9F93 push r25
1879 0bb2 8F93 push r24
1880 0bb4 E091 0000 lds r30,_printf_P
1881 0bb8 F091 0000 lds r31,(_printf_P)+1
1882 0bbc 0995 icall
1883 0bbe 2DB7 in r18,__SP_L__
1884 0bc0 3EB7 in r19,__SP_H__
1885 0bc2 2A5F subi r18,lo8(-(6))
1886 0bc4 3F4F sbci r19,hi8(-(6))
1887 0bc6 2DBF out __SP_L__,r18
1888 .L132:
1889 0bc8 86E3 ldi r24,lo8(54)
1890 0bca 0E94 0000 call LIBFC_HoTT_SetPos
1891 0bce 8091 0000 lds r24,Capacity
1892 0bd2 9091 0000 lds r25,(Capacity)+1
1893 0bd6 6AE0 ldi r22,lo8(10)
1894 0bd8 70E0 ldi r23,hi8(10)
1895 0bda 0E94 0000 call __udivmodhi4
1896 0bde 9F93 push r25
1897 0be0 8F93 push r24
1898 0be2 8091 0000 lds r24,Capacity
1899 0be6 9091 0000 lds r25,(Capacity)+1
1900 0bea 6AE0 ldi r22,lo8(10)
1901 0bec 70E0 ldi r23,hi8(10)
1902 0bee 0E94 0000 call __udivmodhi4
1903 0bf2 7F93 push r23
1904 0bf4 6F93 push r22
1905 0bf6 80E0 ldi r24,lo8(__c.17)
1906 0bf8 90E0 ldi r25,hi8(__c.17)
1907 0bfa 9F93 push r25
1908 0bfc 8F93 push r24
1909 0bfe 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
1910 0c00 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
1911 0c02 9F93 push r25
1912 0c04 8F93 push r24
1913 0c06 E091 0000 lds r30,_printf_P
1914 0c0a F091 0000 lds r31,(_printf_P)+1
1915 0c0e 0995 icall
1916 0c10 8DB7 in r24,__SP_L__
1917 0c12 9EB7 in r25,__SP_H__
1918 0c14 0896 adiw r24,8
1919 0c16 00C0 rjmp .L306
1920 .L133:
1921 0c18 89E0 ldi r24,lo8(9)
1922 0c1a 0E94 0000 call LIBFC_HoTT_SetPos
1923 0c1e 80E0 ldi r24,lo8(__c.18)
1924 0c20 90E0 ldi r25,hi8(__c.18)
1925 0c22 9F93 push r25
1926 0c24 8F93 push r24
1927 0c26 00E0 ldi r16,lo8(pm(LIBFC_HoTT_Putchar))
1928 0c28 10E0 ldi r17,hi8(pm(LIBFC_HoTT_Putchar))
1929 0c2a 1F93 push r17
1930 0c2c 0F93 push r16
1931 0c2e E091 0000 lds r30,_printf_P
1932 0c32 F091 0000 lds r31,(_printf_P)+1
1933 0c36 0995 icall
1934 0c38 8EE1 ldi r24,lo8(30)
1935 0c3a 0E94 0000 call LIBFC_HoTT_SetPos
1936 0c3e 0F90 pop __tmp_reg__
1937 0c40 0F90 pop __tmp_reg__
1938 0c42 0F90 pop __tmp_reg__
1939 0c44 0F90 pop __tmp_reg__
1940 0c46 80E0 ldi r24,lo8(__c.19)
1941 0c48 90E0 ldi r25,hi8(__c.19)
1942 0c4a 9F93 push r25
1943 0c4c 8F93 push r24
1944 0c4e 1F93 push r17
1945 0c50 0F93 push r16
1946 0c52 E091 0000 lds r30,_printf_P
1947 0c56 F091 0000 lds r31,(_printf_P)+1
1948 0c5a 0995 icall
1949 0c5c 83E3 ldi r24,lo8(51)
1950 0c5e 0E94 0000 call LIBFC_HoTT_SetPos
1951 0c62 0F90 pop __tmp_reg__
1952 0c64 0F90 pop __tmp_reg__
1953 0c66 0F90 pop __tmp_reg__
1954 0c68 0F90 pop __tmp_reg__
1955 0c6a 80E0 ldi r24,lo8(__c.20)
1956 0c6c 90E0 ldi r25,hi8(__c.20)
1957 0c6e 9F93 push r25
1958 0c70 8F93 push r24
1959 0c72 1F93 push r17
1960 0c74 0F93 push r16
1961 0c76 E091 0000 lds r30,_printf_P
1962 0c7a F091 0000 lds r31,(_printf_P)+1
1963 0c7e 0995 icall
1964 0c80 8FE3 ldi r24,lo8(63)
1965 0c82 0E94 0000 call LIBFC_HoTT_SetPos
1966 0c86 0F90 pop __tmp_reg__
1967 0c88 0F90 pop __tmp_reg__
1968 0c8a 0F90 pop __tmp_reg__
1969 0c8c 0F90 pop __tmp_reg__
1970 0c8e 80E0 ldi r24,lo8(__c.21)
1971 0c90 90E0 ldi r25,hi8(__c.21)
1972 0c92 9F93 push r25
1973 0c94 8F93 push r24
1974 0c96 1F93 push r17
1975 0c98 0F93 push r16
1976 0c9a E091 0000 lds r30,_printf_P
1977 0c9e F091 0000 lds r31,(_printf_P)+1
1978 0ca2 0995 icall
1979 0ca4 8EE7 ldi r24,lo8(126)
1980 0ca6 0E94 0000 call LIBFC_HoTT_SetPos
1981 0caa 0F90 pop __tmp_reg__
1982 0cac 0F90 pop __tmp_reg__
1983 0cae 0F90 pop __tmp_reg__
1984 0cb0 0F90 pop __tmp_reg__
1985 0cb2 80E0 ldi r24,lo8(__c.22)
1986 0cb4 90E0 ldi r25,hi8(__c.22)
1987 0cb6 9F93 push r25
1988 0cb8 8F93 push r24
1989 0cba 1F93 push r17
1990 0cbc 0F93 push r16
1991 0cbe 00C0 rjmp .L322
1992 .L134:
1993 0cc0 8091 0000 lds r24,NaviDataOkay
1994 0cc4 8823 tst r24
1995 0cc6 01F4 brne .+2
1996 0cc8 00C0 rjmp .L135
1997 0cca 8DE5 ldi r24,lo8(93)
1998 0ccc 0E94 0000 call LIBFC_HoTT_SetPos
1999 0cd0 80E0 ldi r24,lo8(__c.23)
2000 0cd2 90E0 ldi r25,hi8(__c.23)
2001 0cd4 9F93 push r25
2002 0cd6 8F93 push r24
2003 0cd8 C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
2004 0cda D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
2005 0cdc DF93 push r29
2006 0cde CF93 push r28
2007 0ce0 E091 0000 lds r30,_printf_P
2008 0ce4 F091 0000 lds r31,(_printf_P)+1
2009 0ce8 0995 icall
2010 0cea 84E5 ldi r24,lo8(84)
2011 0cec 0E94 0000 call LIBFC_HoTT_SetPos
2012 0cf0 0F90 pop __tmp_reg__
2013 0cf2 0F90 pop __tmp_reg__
2014 0cf4 0F90 pop __tmp_reg__
2015 0cf6 0F90 pop __tmp_reg__
2016 0cf8 8091 0000 lds r24,GPSInfo+1
2017 0cfc 9927 clr r25
2018 0cfe 9F93 push r25
2019 0d00 8F93 push r24
2020 0d02 80E0 ldi r24,lo8(__c.24)
2021 0d04 90E0 ldi r25,hi8(__c.24)
2022 0d06 9F93 push r25
2023 0d08 8F93 push r24
2024 0d0a DF93 push r29
2025 0d0c CF93 push r28
2026 0d0e E091 0000 lds r30,_printf_P
2027 0d12 F091 0000 lds r31,(_printf_P)+1
2028 0d16 0995 icall
2029 0d18 8EE5 ldi r24,lo8(94)
2030 0d1a 0E94 0000 call LIBFC_HoTT_SetPos
2031 0d1e 2DB7 in r18,__SP_L__
2032 0d20 3EB7 in r19,__SP_H__
2033 0d22 2A5F subi r18,lo8(-(6))
2034 0d24 3F4F sbci r19,hi8(-(6))
2035 0d26 2DBF out __SP_L__,r18
2036 0d28 8091 0000 lds r24,GPSInfo+4
2037 0d2c 9091 0000 lds r25,(GPSInfo+4)+1
2038 0d30 6AE0 ldi r22,lo8(10)
2039 0d32 70E0 ldi r23,hi8(10)
2040 0d34 0E94 0000 call __udivmodhi4
2041 0d38 7F93 push r23
2042 0d3a 6F93 push r22
2043 0d3c 80E0 ldi r24,lo8(__c.25)
2044 0d3e 90E0 ldi r25,hi8(__c.25)
2045 0d40 9F93 push r25
2046 0d42 8F93 push r24
2047 0d44 DF93 push r29
2048 0d46 CF93 push r28
2049 0d48 E091 0000 lds r30,_printf_P
2050 0d4c F091 0000 lds r31,(_printf_P)+1
2051 0d50 0995 icall
2052 0d52 8DB7 in r24,__SP_L__
2053 0d54 9EB7 in r25,__SP_H__
2054 0d56 0696 adiw r24,6
2055 0d58 8DBF out __SP_L__,r24
2056 0d5a 8091 0000 lds r24,GPSInfo+2
2057 0d5e 8330 cpi r24,lo8(3)
2058 0d60 01F4 brne .L140
2059 0d62 8091 0000 lds r24,GPSInfo
2060 0d66 81FF sbrs r24,1
2061 0d68 00C0 rjmp .L138
2062 0d6a 8BE5 ldi r24,lo8(91)
2063 0d6c 0E94 0000 call LIBFC_HoTT_SetPos
2064 0d70 80E0 ldi r24,lo8(__c.26)
2065 0d72 90E0 ldi r25,hi8(__c.26)
2066 0d74 00C0 rjmp .L328
2067 .L138:
2068 0d76 8BE5 ldi r24,lo8(91)
2069 0d78 0E94 0000 call LIBFC_HoTT_SetPos
2070 0d7c 80E0 ldi r24,lo8(__c.27)
2071 0d7e 90E0 ldi r25,hi8(__c.27)
2072 0d80 00C0 rjmp .L328
2073 .L140:
2074 0d82 8BE5 ldi r24,lo8(91)
2075 0d84 0E94 0000 call LIBFC_HoTT_SetPos
2076 0d88 80E0 ldi r24,lo8(__c.28)
2077 0d8a 90E0 ldi r25,hi8(__c.28)
2078 0d8c 00C0 rjmp .L332
2079 .L135:
2080 0d8e 84E0 ldi r24,lo8(4)
2081 0d90 00C0 rjmp .L308
2082 .L142:
2083 0d92 8091 0000 lds r24,NaviDataOkay
2084 0d96 8823 tst r24
2085 0d98 01F4 brne .+2
2086 0d9a 00C0 rjmp .L143
2087 0d9c 8091 0000 lds r24,show_mag.3
2088 0da0 90E0 ldi r25,lo8(pm(LIBFC_HoTT_Putchar))
2089 0da2 E92E mov r14,r25
2090 0da4 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
2091 0da6 F92E mov r15,r25
2092 0da8 8823 tst r24
2093 0daa 01F4 brne .+2
2094 0dac 00C0 rjmp .L144
2095 0dae 89E6 ldi r24,lo8(105)
2096 0db0 0E94 0000 call LIBFC_HoTT_SetPos
2097 0db4 8091 0000 lds r24,EarthMagneticField
2098 0db8 9927 clr r25
2099 0dba 9F93 push r25
2100 0dbc 8F93 push r24
2101 0dbe 80E0 ldi r24,lo8(__c.29)
2102 0dc0 90E0 ldi r25,hi8(__c.29)
2103 0dc2 9F93 push r25
2104 0dc4 8F93 push r24
2105 0dc6 FF92 push r15
2106 0dc8 EF92 push r14
2107 0dca E091 0000 lds r30,_printf_P
2108 0dce F091 0000 lds r31,(_printf_P)+1
2109 0dd2 0995 icall
2110 0dd4 85E7 ldi r24,lo8(117)
2111 0dd6 0E94 0000 call LIBFC_HoTT_SetPos
2112 0dda 2DB7 in r18,__SP_L__
2113 0ddc 3EB7 in r19,__SP_H__
2114 0dde 2A5F subi r18,lo8(-(6))
2115 0de0 3F4F sbci r19,hi8(-(6))
2116 0de2 2DBF out __SP_L__,r18
2117 0de4 8091 0000 lds r24,NC_GPS_ModeCharacter
2118 0de8 9927 clr r25
2119 0dea 9F93 push r25
2120 0dec 8F93 push r24
2121 0dee 00E6 ldi r16,lo8(96)
2122 0df0 10E0 ldi r17,hi8(96)
2123 0df2 1F93 push r17
2124 0df4 0F93 push r16
2125 0df6 8091 0000 lds r24,GPSInfo+6
2126 0dfa 9091 0000 lds r25,(GPSInfo+6)+1
2127 0dfe 9F93 push r25
2128 0e00 8F93 push r24
2129 0e02 80E0 ldi r24,lo8(__c.30)
2130 0e04 90E0 ldi r25,hi8(__c.30)
2131 0e06 9F93 push r25
2132 0e08 8F93 push r24
2133 0e0a FF92 push r15
2134 0e0c EF92 push r14
2135 0e0e E091 0000 lds r30,_printf_P
2136 0e12 F091 0000 lds r31,(_printf_P)+1
2137 0e16 0995 icall
2138 0e18 82E7 ldi r24,lo8(114)
2139 0e1a 0E94 0000 call LIBFC_HoTT_SetPos
2140 0e1e 8DB7 in r24,__SP_L__
2141 0e20 9EB7 in r25,__SP_H__
2142 0e22 0A96 adiw r24,10
2143 0e24 8DBF out __SP_L__,r24
2144 0e26 8091 0000 lds r24,EarthMagneticInclinationTheoretic
2145 0e2a 9927 clr r25
2146 0e2c 9F93 push r25
2147 0e2e 8F93 push r24
2148 0e30 1F93 push r17
2149 0e32 0F93 push r16
2150 0e34 8091 0000 lds r24,EarthMagneticInclination
2151 0e38 9927 clr r25
2152 0e3a 9F93 push r25
2153 0e3c 8F93 push r24
2154 0e3e 80E0 ldi r24,lo8(__c.31)
2155 0e40 90E0 ldi r25,hi8(__c.31)
2156 0e42 00C0 rjmp .L314
2157 .L144:
2158 0e44 89E6 ldi r24,lo8(105)
2159 0e46 0E94 0000 call LIBFC_HoTT_SetPos
2160 0e4a 8091 0000 lds r24,NC_GPS_ModeCharacter
2161 0e4e 9927 clr r25
2162 0e50 9F93 push r25
2163 0e52 8F93 push r24
2164 0e54 80E6 ldi r24,lo8(96)
2165 0e56 90E0 ldi r25,hi8(96)
2166 0e58 9F93 push r25
2167 0e5a 8F93 push r24
2168 0e5c 8091 0000 lds r24,GPSInfo+6
2169 0e60 9091 0000 lds r25,(GPSInfo+6)+1
2170 0e64 9F93 push r25
2171 0e66 8F93 push r24
2172 0e68 8091 0000 lds r24,GPSInfo+3
2173 0e6c 9927 clr r25
2174 0e6e 9F93 push r25
2175 0e70 8F93 push r24
2176 0e72 80E0 ldi r24,lo8(__c.32)
2177 0e74 90E0 ldi r25,hi8(__c.32)
2178 0e76 9F93 push r25
2179 0e78 8F93 push r24
2180 0e7a FF92 push r15
2181 0e7c EF92 push r14
2182 0e7e E091 0000 lds r30,_printf_P
2183 0e82 F091 0000 lds r31,(_printf_P)+1
2184 0e86 0995 icall
2185 0e88 8DB7 in r24,__SP_L__
2186 0e8a 9EB7 in r25,__SP_H__
2187 0e8c 0C96 adiw r24,12
2188 0e8e 00C0 rjmp .L306
2189 .L143:
2190 0e90 85E0 ldi r24,lo8(5)
2191 0e92 00C0 rjmp .L308
2192 .L148:
2193 0e94 9091 0000 lds r25,NC_ErrorCode
2194 0e98 9923 tst r25
2195 0e9a 01F0 breq .L149
2196 0e9c 8091 0000 lds r24,HoTTBlink
2197 0ea0 8823 tst r24
2198 0ea2 01F0 breq .L150
2199 0ea4 9032 cpi r25,lo8(32)
2200 0ea6 00F4 brsh .L150
2201 0ea8 87E0 ldi r24,lo8(7)
2202 0eaa 0E94 0000 call Hott_ClearLine
2203 0eae 83E9 ldi r24,lo8(-109)
2204 0eb0 0E94 0000 call LIBFC_HoTT_SetPos
2205 0eb4 8091 0000 lds r24,NC_ErrorCode
2206 0eb8 9927 clr r25
2207 0eba 9F93 push r25
2208 0ebc 8F93 push r24
2209 0ebe 80E0 ldi r24,lo8(__c.33)
2210 0ec0 90E0 ldi r25,hi8(__c.33)
2211 0ec2 00C0 rjmp .L315
2212 .L150:
2213 0ec4 83E9 ldi r24,lo8(-109)
2214 0ec6 0E94 0000 call LIBFC_HoTT_SetPos
2215 0eca 80E0 ldi r24,lo8(__c.34)
2216 0ecc 90E0 ldi r25,hi8(__c.34)
2217 0ece 00C0 rjmp .L310
2218 .L149:
2219 0ed0 8091 0000 lds r24,FC_StatusFlags
2220 0ed4 00E0 ldi r16,lo8(pm(LIBFC_HoTT_Putchar))
2221 0ed6 E02E mov r14,r16
2222 0ed8 00E0 ldi r16,hi8(pm(LIBFC_HoTT_Putchar))
2223 0eda F02E mov r15,r16
2224 0edc 85FF sbrs r24,5
2225 0ede 00C0 rjmp .L153
2226 0ee0 84E9 ldi r24,lo8(-108)
2227 0ee2 0E94 0000 call LIBFC_HoTT_SetPos
2228 0ee6 80E0 ldi r24,lo8(__c.35)
2229 0ee8 90E0 ldi r25,hi8(__c.35)
2230 0eea 00C0 rjmp .L329
2231 .L153:
2232 0eec 83E9 ldi r24,lo8(-109)
2233 0eee 0E94 0000 call LIBFC_HoTT_SetPos
2234 0ef2 80E0 ldi r24,lo8(__c.36)
2235 0ef4 90E0 ldi r25,hi8(__c.36)
2236 0ef6 00C0 rjmp .L329
2237 .L163:
2238 0ef8 8091 0000 lds r24,HottKeyboard
2239 0efc 8630 cpi r24,lo8(6)
2240 0efe 01F4 brne .L164
2241 0f00 8091 0000 lds r24,show_mag.3
2242 0f04 8823 tst r24
2243 0f06 01F0 breq .L165
2244 0f08 1092 0000 sts show_mag.3,__zero_reg__
2245 0f0c 00C0 rjmp .L292
2246 .L165:
2247 0f0e 81E0 ldi r24,lo8(1)
2248 0f10 8093 0000 sts show_mag.3,r24
2249 0f14 00C0 rjmp .L292
2250 .L164:
2251 0f16 8830 cpi r24,lo8(8)
2252 0f18 01F0 breq .+2
2253 0f1a 00C0 rjmp .L292
2254 0f1c 0E94 0000 call LIBFC_HoTT_Clear
2255 0f20 81E0 ldi r24,lo8(1)
2256 0f22 00C0 rjmp .L330
2257 .L169:
2258 0f24 9093 0000 sts line.0,r25
2259 0f28 00C0 rjmp .L114
2260 .L116:
2261 0f2a 9130 cpi r25,lo8(1)
2262 0f2c 01F0 breq .+2
2263 0f2e 00C0 rjmp .L172
2264 0f30 8091 0000 lds r24,line.0
2265 0f34 282F mov r18,r24
2266 0f36 3327 clr r19
2267 0f38 4427 clr r20
2268 0f3a 5527 clr r21
2269 0f3c 8F5F subi r24,lo8(-(1))
2270 0f3e 8093 0000 sts line.0,r24
2271 0f42 F901 movw r30,r18
2272 0f44 2131 cpi r18,17
2273 0f46 3105 cpc r19,__zero_reg__
2274 0f48 00F0 brlo .+2
2275 0f4a 00C0 rjmp .L294
2276 0f4c E050 subi r30,lo8(-(pm(.L235)))
2277 0f4e F040 sbci r31,hi8(-(pm(.L235)))
2278 0f50 0C94 0000 jmp __tablejump2__
2279 .data
2280 .section .progmem.gcc_sw_table, "a", @progbits
2281 .p2align 1
2282 .L235:
2283 0022 0000 .word pm(.L174)
2284 0024 0000 .word pm(.L177)
2285 0026 0000 .word pm(.L182)
2286 0028 0000 .word pm(.L185)
2287 002a 0000 .word pm(.L188)
2288 002c 0000 .word pm(.L195)
2289 002e 0000 .word pm(.L198)
2290 0030 0000 .word pm(.L211)
2291 0032 0000 .word pm(.L226)
2292 0034 0000 .word pm(.L226)
2293 0036 0000 .word pm(.L226)
2294 0038 0000 .word pm(.L226)
2295 003a 0000 .word pm(.L226)
2296 003c 0000 .word pm(.L226)
2297 003e 0000 .word pm(.L226)
2298 0040 0000 .word pm(.L226)
2299 0042 0000 .word pm(.L226)
2300 .text
2301 .L174:
2302 0f54 8091 0000 lds r24,FC_StatusFlags
2303 0f58 85FF sbrs r24,5
2304 0f5a 00C0 rjmp .L175
2305 0f5c 80E0 ldi r24,lo8(0)
2306 0f5e 0E94 0000 call LIBFC_HoTT_SetPos
2307 0f62 8091 0000 lds r24,Capacity+4
2308 0f66 9091 0000 lds r25,(Capacity+4)+1
2309 0f6a 9F93 push r25
2310 0f6c 8F93 push r24
2311 0f6e 8091 0000 lds r24,UBat
2312 0f72 9091 0000 lds r25,(UBat)+1
2313 0f76 6AE0 ldi r22,lo8(10)
2314 0f78 70E0 ldi r23,hi8(10)
2315 0f7a 0E94 0000 call __divmodhi4
2316 0f7e 9F93 push r25
2317 0f80 8F93 push r24
2318 0f82 8091 0000 lds r24,UBat
2319 0f86 9091 0000 lds r25,(UBat)+1
2320 0f8a 6AE0 ldi r22,lo8(10)
2321 0f8c 70E0 ldi r23,hi8(10)
2322 0f8e 0E94 0000 call __divmodhi4
2323 0f92 7F93 push r23
2324 0f94 6F93 push r22
2325 0f96 8091 0000 lds r24,FlugSekunden
2326 0f9a 9091 0000 lds r25,(FlugSekunden)+1
2327 0f9e 6CE3 ldi r22,lo8(60)
2328 0fa0 70E0 ldi r23,hi8(60)
2329 0fa2 0E94 0000 call __udivmodhi4
2330 0fa6 9F93 push r25
2331 0fa8 8F93 push r24
2332 0faa 8091 0000 lds r24,FlugSekunden
2333 0fae 9091 0000 lds r25,(FlugSekunden)+1
2334 0fb2 6CE3 ldi r22,lo8(60)
2335 0fb4 70E0 ldi r23,hi8(60)
2336 0fb6 0E94 0000 call __udivmodhi4
2337 0fba 7F93 push r23
2338 0fbc 6F93 push r22
2339 0fbe 80E0 ldi r24,lo8(__c.37)
2340 0fc0 90E0 ldi r25,hi8(__c.37)
2341 0fc2 9F93 push r25
2342 0fc4 8F93 push r24
2343 0fc6 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
2344 0fc8 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
2345 0fca 9F93 push r25
2346 0fcc 8F93 push r24
2347 0fce E091 0000 lds r30,_printf_P
2348 0fd2 F091 0000 lds r31,(_printf_P)+1
2349 0fd6 0995 icall
2350 0fd8 2DB7 in r18,__SP_L__
2351 0fda 3EB7 in r19,__SP_H__
2352 0fdc 225F subi r18,lo8(-(14))
2353 0fde 3F4F sbci r19,hi8(-(14))
2354 0fe0 00C0 rjmp .L303
2355 .L175:
2356 0fe2 80E0 ldi r24,lo8(0)
2357 0fe4 0E94 0000 call LIBFC_HoTT_SetPos
2358 0fe8 8091 0000 lds r24,Capacity+4
2359 0fec 9091 0000 lds r25,(Capacity+4)+1
2360 0ff0 9F93 push r25
2361 0ff2 8F93 push r24
2362 0ff4 8091 0000 lds r24,UBat
2363 0ff8 9091 0000 lds r25,(UBat)+1
2364 0ffc 6AE0 ldi r22,lo8(10)
2365 0ffe 70E0 ldi r23,hi8(10)
2366 1000 0E94 0000 call __divmodhi4
2367 1004 9F93 push r25
2368 1006 8F93 push r24
2369 1008 8091 0000 lds r24,UBat
2370 100c 9091 0000 lds r25,(UBat)+1
2371 1010 6AE0 ldi r22,lo8(10)
2372 1012 70E0 ldi r23,hi8(10)
2373 1014 0E94 0000 call __divmodhi4
2374 1018 7F93 push r23
2375 101a 6F93 push r22
2376 101c 8091 0000 lds r24,FlugSekunden
2377 1020 9091 0000 lds r25,(FlugSekunden)+1
2378 1024 6CE3 ldi r22,lo8(60)
2379 1026 70E0 ldi r23,hi8(60)
2380 1028 0E94 0000 call __udivmodhi4
2381 102c 9F93 push r25
2382 102e 8F93 push r24
2383 1030 8091 0000 lds r24,FlugSekunden
2384 1034 9091 0000 lds r25,(FlugSekunden)+1
2385 1038 6CE3 ldi r22,lo8(60)
2386 103a 70E0 ldi r23,hi8(60)
2387 103c 0E94 0000 call __udivmodhi4
2388 1040 7F93 push r23
2389 1042 6F93 push r22
2390 1044 80E0 ldi r24,lo8(__c.38)
2391 1046 90E0 ldi r25,hi8(__c.38)
2392 1048 00C0 rjmp .L325
2393 .L177:
2394 104a 85E1 ldi r24,lo8(21)
2395 104c 0E94 0000 call LIBFC_HoTT_SetPos
2396 1050 80E6 ldi r24,lo8(96)
2397 1052 90E0 ldi r25,hi8(96)
2398 1054 9F93 push r25
2399 1056 8F93 push r24
2400 1058 8091 0000 lds r24,KompassValue
2401 105c 9091 0000 lds r25,(KompassValue)+1
2402 1060 9F93 push r25
2403 1062 8F93 push r24
2404 1064 80E0 ldi r24,lo8(__c.39)
2405 1066 90E0 ldi r25,hi8(__c.39)
2406 1068 9F93 push r25
2407 106a 8F93 push r24
2408 106c C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
2409 106e D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
2410 1070 DF93 push r29
2411 1072 CF93 push r28
2412 1074 E091 0000 lds r30,_printf_P
2413 1078 F091 0000 lds r31,(_printf_P)+1
2414 107c 0995 icall
2415 107e 8091 0000 lds r24,Parameter_GlobalConfig
2416 1082 2DB7 in r18,__SP_L__
2417 1084 3EB7 in r19,__SP_H__
2418 1086 285F subi r18,lo8(-(8))
2419 1088 3F4F sbci r19,hi8(-(8))
2420 108a 2DBF out __SP_L__,r18
2421 108c 80FF sbrs r24,0
2422 108e 00C0 rjmp .L178
2423 1090 8091 0000 lds r24,HoehenReglerAktiv
2424 1094 8823 tst r24
2425 1096 01F0 breq .L179
2426 1098 8FE1 ldi r24,lo8(31)
2427 109a 0E94 0000 call LIBFC_HoTT_SetPos
2428 109e 8091 0000 lds r24,HoehenWert
2429 10a2 9091 0000 lds r25,(HoehenWert)+1
2430 10a6 A091 0000 lds r26,(HoehenWert)+2
2431 10aa B091 0000 lds r27,(HoehenWert)+3
2432 10ae BC01 movw r22,r24
2433 10b0 CD01 movw r24,r26
2434 10b2 24E6 ldi r18,lo8(100)
2435 10b4 30E0 ldi r19,hi8(100)
2436 10b6 40E0 ldi r20,hlo8(100)
2437 10b8 50E0 ldi r21,hhi8(100)
2438 10ba 0E94 0000 call __divmodsi4
2439 10be 3F93 push r19
2440 10c0 2F93 push r18
2441 10c2 80E0 ldi r24,lo8(__c.40)
2442 10c4 90E0 ldi r25,hi8(__c.40)
2443 10c6 9F93 push r25
2444 10c8 8F93 push r24
2445 10ca 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_INV))
2446 10cc 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_INV))
2447 10ce 9F93 push r25
2448 10d0 8F93 push r24
2449 10d2 E091 0000 lds r30,_printf_P
2450 10d6 F091 0000 lds r31,(_printf_P)+1
2451 10da 0995 icall
2452 10dc 8DB7 in r24,__SP_L__
2453 10de 9EB7 in r25,__SP_H__
2454 10e0 0696 adiw r24,6
2455 10e2 8DBF out __SP_L__,r24
2456 10e4 00C0 rjmp .L181
2457 .L179:
2458 10e6 8FE1 ldi r24,lo8(31)
2459 10e8 0E94 0000 call LIBFC_HoTT_SetPos
2460 10ec 8091 0000 lds r24,HoehenWert
2461 10f0 9091 0000 lds r25,(HoehenWert)+1
2462 10f4 A091 0000 lds r26,(HoehenWert)+2
2463 10f8 B091 0000 lds r27,(HoehenWert)+3
2464 10fc BC01 movw r22,r24
2465 10fe CD01 movw r24,r26
2466 1100 24E6 ldi r18,lo8(100)
2467 1102 30E0 ldi r19,hi8(100)
2468 1104 40E0 ldi r20,hlo8(100)
2469 1106 50E0 ldi r21,hhi8(100)
2470 1108 0E94 0000 call __divmodsi4
2471 110c 3F93 push r19
2472 110e 2F93 push r18
2473 1110 80E0 ldi r24,lo8(__c.41)
2474 1112 90E0 ldi r25,hi8(__c.41)
2475 1114 9F93 push r25
2476 1116 8F93 push r24
2477 1118 DF93 push r29
2478 111a CF93 push r28
2479 111c E091 0000 lds r30,_printf_P
2480 1120 F091 0000 lds r31,(_printf_P)+1
2481 1124 0995 icall
2482 1126 2DB7 in r18,__SP_L__
2483 1128 3EB7 in r19,__SP_H__
2484 112a 2A5F subi r18,lo8(-(6))
2485 112c 3F4F sbci r19,hi8(-(6))
2486 112e 2DBF out __SP_L__,r18
2487 1130 00C0 rjmp .L181
2488 .L178:
2489 1132 8FE1 ldi r24,lo8(31)
2490 1134 0E94 0000 call LIBFC_HoTT_SetPos
2491 1138 80E0 ldi r24,lo8(__c.42)
2492 113a 90E0 ldi r25,hi8(__c.42)
2493 113c 9F93 push r25
2494 113e 8F93 push r24
2495 1140 DF93 push r29
2496 1142 CF93 push r28
2497 1144 E091 0000 lds r30,_printf_P
2498 1148 F091 0000 lds r31,(_printf_P)+1
2499 114c 0995 icall
2500 114e 0F90 pop __tmp_reg__
2501 1150 0F90 pop __tmp_reg__
2502 1152 0F90 pop __tmp_reg__
2503 1154 0F90 pop __tmp_reg__
2504 .L181:
2505 1156 89E2 ldi r24,lo8(41)
2506 1158 0E94 0000 call LIBFC_HoTT_SetPos
2507 115c 8091 0000 lds r24,VarioCharacter
2508 1160 9927 clr r25
2509 1162 9F93 push r25
2510 1164 8F93 push r24
2511 1166 80E0 ldi r24,lo8(__c.43)
2512 1168 90E0 ldi r25,hi8(__c.43)
2513 116a 9F93 push r25
2514 116c 8F93 push r24
2515 116e DF93 push r29
2516 1170 CF93 push r28
2517 1172 00C0 rjmp .L327
2518 .L182:
2519 1174 8091 0000 lds r24,NaviDataOkay
2520 1178 8823 tst r24
2521 117a 01F0 breq .L183
2522 117c 8BE2 ldi r24,lo8(43)
2523 117e 0E94 0000 call LIBFC_HoTT_SetPos
2524 1182 8091 0000 lds r24,NC_GPS_ModeCharacter
2525 1186 9927 clr r25
2526 1188 9F93 push r25
2527 118a 8F93 push r24
2528 118c 8091 0000 lds r24,GPSInfo+4
2529 1190 9091 0000 lds r25,(GPSInfo+4)+1
2530 1194 6AE0 ldi r22,lo8(10)
2531 1196 70E0 ldi r23,hi8(10)
2532 1198 0E94 0000 call __udivmodhi4
2533 119c 7F93 push r23
2534 119e 6F93 push r22
2535 11a0 80E6 ldi r24,lo8(96)
2536 11a2 90E0 ldi r25,hi8(96)
2537 11a4 9F93 push r25
2538 11a6 8F93 push r24
2539 11a8 8091 0000 lds r24,GPSInfo+6
2540 11ac 9091 0000 lds r25,(GPSInfo+6)+1
2541 11b0 9F93 push r25
2542 11b2 8F93 push r24
2543 11b4 80E0 ldi r24,lo8(__c.44)
2544 11b6 90E0 ldi r25,hi8(__c.44)
2545 11b8 00C0 rjmp .L316
2546 .L183:
2547 11ba 82E0 ldi r24,lo8(2)
2548 11bc 00C0 rjmp .L308
2549 .L185:
2550 11be 8FE3 ldi r24,lo8(63)
2551 11c0 0E94 0000 call LIBFC_HoTT_SetPos
2552 11c4 8091 0000 lds r24,Capacity+2
2553 11c8 9091 0000 lds r25,(Capacity+2)+1
2554 11cc 9F93 push r25
2555 11ce 8F93 push r24
2556 11d0 8091 0000 lds r24,Capacity
2557 11d4 9091 0000 lds r25,(Capacity)+1
2558 11d8 6AE0 ldi r22,lo8(10)
2559 11da 70E0 ldi r23,hi8(10)
2560 11dc 0E94 0000 call __udivmodhi4
2561 11e0 9F93 push r25
2562 11e2 8F93 push r24
2563 11e4 8091 0000 lds r24,Capacity
2564 11e8 9091 0000 lds r25,(Capacity)+1
2565 11ec 6AE0 ldi r22,lo8(10)
2566 11ee 70E0 ldi r23,hi8(10)
2567 11f0 0E94 0000 call __udivmodhi4
2568 11f4 7F93 push r23
2569 11f6 6F93 push r22
2570 11f8 80E0 ldi r24,lo8(__c.45)
2571 11fa 90E0 ldi r25,hi8(__c.45)
2572 11fc 9F93 push r25
2573 11fe 8F93 push r24
2574 1200 C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
2575 1202 D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
2576 1204 DF93 push r29
2577 1206 CF93 push r28
2578 1208 E091 0000 lds r30,_printf_P
2579 120c F091 0000 lds r31,(_printf_P)+1
2580 1210 0995 icall
2581 1212 8091 0000 lds r24,FC_StatusFlags2
2582 1216 2DB7 in r18,__SP_L__
2583 1218 3EB7 in r19,__SP_H__
2584 121a 265F subi r18,lo8(-(10))
2585 121c 3F4F sbci r19,hi8(-(10))
2586 121e 2DBF out __SP_L__,r18
2587 1220 80FF sbrs r24,0
2588 1222 00C0 rjmp .L186
2589 1224 82E5 ldi r24,lo8(82)
2590 1226 0E94 0000 call LIBFC_HoTT_SetPos
2591 122a 80E0 ldi r24,lo8(__c.46)
2592 122c 90E0 ldi r25,hi8(__c.46)
2593 .L333:
2594 122e 9F93 push r25
2595 1230 8F93 push r24
2596 1232 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_INV))
2597 1234 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_INV))
2598 1236 00C0 rjmp .L321
2599 .L186:
2600 1238 82E5 ldi r24,lo8(82)
2601 123a 0E94 0000 call LIBFC_HoTT_SetPos
2602 123e 80E0 ldi r24,lo8(__c.47)
2603 1240 90E0 ldi r25,hi8(__c.47)
2604 1242 00C0 rjmp .L328
2605 .L188:
2606 1244 8091 0000 lds r24,NaviDataOkay
2607 1248 10E0 ldi r17,lo8(pm(LIBFC_HoTT_Putchar))
2608 124a E12E mov r14,r17
2609 124c 10E0 ldi r17,hi8(pm(LIBFC_HoTT_Putchar))
2610 124e F12E mov r15,r17
2611 1250 8823 tst r24
2612 1252 01F4 brne .+2
2613 1254 00C0 rjmp .L189
2614 1256 84E5 ldi r24,lo8(84)
2615 1258 0E94 0000 call LIBFC_HoTT_SetPos
2616 125c 8091 0000 lds r24,GPSInfo+1
2617 1260 9927 clr r25
2618 1262 9F93 push r25
2619 1264 8F93 push r24
2620 1266 8091 0000 lds r24,GPSInfo+3
2621 126a 9927 clr r25
2622 126c 9F93 push r25
2623 126e 8F93 push r24
2624 1270 80E0 ldi r24,lo8(__c.48)
2625 1272 90E0 ldi r25,hi8(__c.48)
2626 1274 9F93 push r25
2627 1276 8F93 push r24
2628 1278 E701 movw r28,r14
2629 127a FF92 push r15
2630 127c EF92 push r14
2631 127e E091 0000 lds r30,_printf_P
2632 1282 F091 0000 lds r31,(_printf_P)+1
2633 1286 0995 icall
2634 1288 8DB7 in r24,__SP_L__
2635 128a 9EB7 in r25,__SP_H__
2636 128c 0896 adiw r24,8
2637 128e 8DBF out __SP_L__,r24
2638 1290 8091 0000 lds r24,GPSInfo+2
2639 1294 8330 cpi r24,lo8(3)
2640 1296 01F4 brne .L192
2641 1298 84E6 ldi r24,lo8(100)
2642 129a 0E94 0000 call LIBFC_HoTT_SetPos
2643 129e 80E0 ldi r24,lo8(__c.49)
2644 12a0 90E0 ldi r25,hi8(__c.49)
2645 12a2 9F93 push r25
2646 12a4 8F93 push r24
2647 12a6 FF92 push r15
2648 12a8 EF92 push r14
2649 12aa 00C0 rjmp .L297
2650 .L192:
2651 12ac 84E6 ldi r24,lo8(100)
2652 12ae 0E94 0000 call LIBFC_HoTT_SetPos
2653 12b2 80E0 ldi r24,lo8(__c.50)
2654 12b4 90E0 ldi r25,hi8(__c.50)
2655 12b6 9F93 push r25
2656 12b8 8F93 push r24
2657 12ba 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
2658 12bc 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
2659 12be 9F93 push r25
2660 12c0 8F93 push r24
2661 .L297:
2662 12c2 E091 0000 lds r30,_printf_P
2663 12c6 F091 0000 lds r31,(_printf_P)+1
2664 12ca 0995 icall
2665 12cc 0F90 pop __tmp_reg__
2666 12ce 0F90 pop __tmp_reg__
2667 12d0 0F90 pop __tmp_reg__
2668 12d2 0F90 pop __tmp_reg__
2669 12d4 8091 0000 lds r24,GPSInfo
2670 12d8 81FF sbrs r24,1
2671 12da 00C0 rjmp .L114
2672 12dc 84E6 ldi r24,lo8(100)
2673 12de 0E94 0000 call LIBFC_HoTT_SetPos
2674 12e2 80E0 ldi r24,lo8(__c.51)
2675 12e4 90E0 ldi r25,hi8(__c.51)
2676 12e6 00C0 rjmp .L328
2677 .L189:
2678 12e8 84E5 ldi r24,lo8(84)
2679 12ea 0E94 0000 call LIBFC_HoTT_SetPos
2680 12ee 80E0 ldi r24,lo8(__c.52)
2681 12f0 90E0 ldi r25,hi8(__c.52)
2682 12f2 00C0 rjmp .L329
2683 .L195:
2684 12f4 8091 0000 lds r24,show_current.2
2685 12f8 C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
2686 12fa EC2E mov r14,r28
2687 12fc C0E0 ldi r28,hi8(pm(LIBFC_HoTT_Putchar))
2688 12fe FC2E mov r15,r28
2689 1300 8823 tst r24
2690 1302 01F4 brne .+2
2691 1304 00C0 rjmp .L196
2692 1306 89E6 ldi r24,lo8(105)
2693 1308 0E94 0000 call LIBFC_HoTT_SetPos
2694 130c 8091 0000 lds r24,Motor+29
2695 1310 6AE0 ldi r22,lo8(10)
2696 1312 0E94 0000 call __udivmodqi4
2697 1316 892F mov r24,r25
2698 1318 9927 clr r25
2699 131a 9F93 push r25
2700 131c 8F93 push r24
2701 131e 8091 0000 lds r24,Motor+29
2702 1322 0E94 0000 call __udivmodqi4
2703 1326 9927 clr r25
2704 1328 9F93 push r25
2705 132a 8F93 push r24
2706 132c 8091 0000 lds r24,Motor+21
2707 1330 0E94 0000 call __udivmodqi4
2708 1334 892F mov r24,r25
2709 1336 9927 clr r25
2710 1338 9F93 push r25
2711 133a 8F93 push r24
2712 133c 8091 0000 lds r24,Motor+21
2713 1340 0E94 0000 call __udivmodqi4
2714 1344 9927 clr r25
2715 1346 9F93 push r25
2716 1348 8F93 push r24
2717 134a 8091 0000 lds r24,Motor+13
2718 134e 0E94 0000 call __udivmodqi4
2719 1352 892F mov r24,r25
2720 1354 9927 clr r25
2721 1356 9F93 push r25
2722 1358 8F93 push r24
2723 135a 8091 0000 lds r24,Motor+13
2724 135e 0E94 0000 call __udivmodqi4
2725 1362 9927 clr r25
2726 1364 9F93 push r25
2727 1366 8F93 push r24
2728 1368 8091 0000 lds r24,Motor+5
2729 136c 0E94 0000 call __udivmodqi4
2730 1370 892F mov r24,r25
2731 1372 9927 clr r25
2732 1374 9F93 push r25
2733 1376 8F93 push r24
2734 1378 8091 0000 lds r24,Motor+5
2735 137c 0E94 0000 call __udivmodqi4
2736 1380 9927 clr r25
2737 1382 9F93 push r25
2738 1384 8F93 push r24
2739 1386 80E0 ldi r24,lo8(__c.53)
2740 1388 90E0 ldi r25,hi8(__c.53)
2741 138a 9F93 push r25
2742 138c 8F93 push r24
2743 138e FF92 push r15
2744 1390 EF92 push r14
2745 1392 E091 0000 lds r30,_printf_P
2746 1396 F091 0000 lds r31,(_printf_P)+1
2747 139a 0995 icall
2748 139c 2DB7 in r18,__SP_L__
2749 139e 3EB7 in r19,__SP_H__
2750 13a0 2C5E subi r18,lo8(-(20))
2751 13a2 3F4F sbci r19,hi8(-(20))
2752 13a4 00C0 rjmp .L303
2753 .L196:
2754 13a6 89E6 ldi r24,lo8(105)
2755 13a8 0E94 0000 call LIBFC_HoTT_SetPos
2756 13ac 80E6 ldi r24,lo8(96)
2757 13ae 90E0 ldi r25,hi8(96)
2758 13b0 9F93 push r25
2759 13b2 8F93 push r24
2760 13b4 8091 0000 lds r24,Motor+31
2761 13b8 9927 clr r25
2762 13ba 87FD sbrc r24,7
2763 13bc 9095 com r25
2764 13be 9F93 push r25
2765 13c0 8F93 push r24
2766 13c2 8091 0000 lds r24,Motor+23
2767 13c6 9927 clr r25
2768 13c8 87FD sbrc r24,7
2769 13ca 9095 com r25
2770 13cc 9F93 push r25
2771 13ce 8F93 push r24
2772 13d0 8091 0000 lds r24,Motor+15
2773 13d4 9927 clr r25
2774 13d6 87FD sbrc r24,7
2775 13d8 9095 com r25
2776 13da 9F93 push r25
2777 13dc 8F93 push r24
2778 13de 8091 0000 lds r24,Motor+7
2779 13e2 9927 clr r25
2780 13e4 87FD sbrc r24,7
2781 13e6 9095 com r25
2782 13e8 9F93 push r25
2783 13ea 8F93 push r24
2784 13ec 80E0 ldi r24,lo8(__c.54)
2785 13ee 90E0 ldi r25,hi8(__c.54)
2786 13f0 9F93 push r25
2787 13f2 8F93 push r24
2788 13f4 FF92 push r15
2789 13f6 EF92 push r14
2790 .L311:
2791 13f8 E091 0000 lds r30,_printf_P
2792 13fc F091 0000 lds r31,(_printf_P)+1
2793 1400 0995 icall
2794 1402 8DB7 in r24,__SP_L__
2795 1404 9EB7 in r25,__SP_H__
2796 1406 0E96 adiw r24,14
2797 1408 00C0 rjmp .L306
2798 .L198:
2799 140a 8091 0000 lds r24,show_current.2
2800 140e 9091 0000 lds r25,RequiredMotors
2801 1412 8823 tst r24
2802 1414 01F4 brne .+2
2803 1416 00C0 rjmp .L199
2804 1418 9430 cpi r25,lo8(4)
2805 141a 01F4 brne .+2
2806 141c 00C0 rjmp .L307
2807 141e 9630 cpi r25,lo8(6)
2808 1420 01F4 brne .L202
2809 1422 8EE7 ldi r24,lo8(126)
2810 1424 0E94 0000 call LIBFC_HoTT_SetPos
2811 1428 8091 0000 lds r24,Motor+45
2812 142c 6AE0 ldi r22,lo8(10)
2813 142e 0E94 0000 call __udivmodqi4
2814 1432 892F mov r24,r25
2815 1434 9927 clr r25
2816 1436 9F93 push r25
2817 1438 8F93 push r24
2818 143a 8091 0000 lds r24,Motor+45
2819 143e 0E94 0000 call __udivmodqi4
2820 1442 9927 clr r25
2821 1444 9F93 push r25
2822 1446 8F93 push r24
2823 1448 8091 0000 lds r24,Motor+37
2824 144c 0E94 0000 call __udivmodqi4
2825 1450 892F mov r24,r25
2826 1452 9927 clr r25
2827 1454 9F93 push r25
2828 1456 8F93 push r24
2829 1458 8091 0000 lds r24,Motor+37
2830 145c 0E94 0000 call __udivmodqi4
2831 1460 9927 clr r25
2832 1462 9F93 push r25
2833 1464 8F93 push r24
2834 1466 80E0 ldi r24,lo8(__c.55)
2835 1468 90E0 ldi r25,hi8(__c.55)
2836 .L316:
2837 146a 9F93 push r25
2838 146c 8F93 push r24
2839 146e 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
2840 1470 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
2841 1472 9F93 push r25
2842 1474 8F93 push r24
2843 1476 E091 0000 lds r30,_printf_P
2844 147a F091 0000 lds r31,(_printf_P)+1
2845 147e 0995 icall
2846 1480 2DB7 in r18,__SP_L__
2847 1482 3EB7 in r19,__SP_H__
2848 1484 245F subi r18,lo8(-(12))
2849 1486 3F4F sbci r19,hi8(-(12))
2850 1488 00C0 rjmp .L303
2851 .L202:
2852 148a 9730 cpi r25,lo8(7)
2853 148c 00F4 brsh .+2
2854 148e 00C0 rjmp .L114
2855 1490 8EE7 ldi r24,lo8(126)
2856 1492 0E94 0000 call LIBFC_HoTT_SetPos
2857 1496 8091 0000 lds r24,Motor+61
2858 149a 6AE0 ldi r22,lo8(10)
2859 149c 0E94 0000 call __udivmodqi4
2860 14a0 892F mov r24,r25
2861 14a2 9927 clr r25
2862 14a4 9F93 push r25
2863 14a6 8F93 push r24
2864 14a8 8091 0000 lds r24,Motor+61
2865 14ac 0E94 0000 call __udivmodqi4
2866 14b0 9927 clr r25
2867 14b2 9F93 push r25
2868 14b4 8F93 push r24
2869 14b6 8091 0000 lds r24,Motor+53
2870 14ba 0E94 0000 call __udivmodqi4
2871 14be 892F mov r24,r25
2872 14c0 9927 clr r25
2873 14c2 9F93 push r25
2874 14c4 8F93 push r24
2875 14c6 8091 0000 lds r24,Motor+53
2876 14ca 0E94 0000 call __udivmodqi4
2877 14ce 9927 clr r25
2878 14d0 9F93 push r25
2879 14d2 8F93 push r24
2880 14d4 8091 0000 lds r24,Motor+45
2881 14d8 0E94 0000 call __udivmodqi4
2882 14dc 892F mov r24,r25
2883 14de 9927 clr r25
2884 14e0 9F93 push r25
2885 14e2 8F93 push r24
2886 14e4 8091 0000 lds r24,Motor+45
2887 14e8 0E94 0000 call __udivmodqi4
2888 14ec 9927 clr r25
2889 14ee 9F93 push r25
2890 14f0 8F93 push r24
2891 14f2 8091 0000 lds r24,Motor+37
2892 14f6 0E94 0000 call __udivmodqi4
2893 14fa 892F mov r24,r25
2894 14fc 9927 clr r25
2895 14fe 9F93 push r25
2896 1500 8F93 push r24
2897 1502 8091 0000 lds r24,Motor+37
2898 1506 0E94 0000 call __udivmodqi4
2899 150a 9927 clr r25
2900 150c 9F93 push r25
2901 150e 8F93 push r24
2902 1510 80E0 ldi r24,lo8(__c.56)
2903 1512 90E0 ldi r25,hi8(__c.56)
2904 1514 9F93 push r25
2905 1516 8F93 push r24
2906 1518 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
2907 151a 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
2908 151c 9F93 push r25
2909 151e 8F93 push r24
2910 1520 E091 0000 lds r30,_printf_P
2911 1524 F091 0000 lds r31,(_printf_P)+1
2912 1528 0995 icall
2913 152a 8DB7 in r24,__SP_L__
2914 152c 9EB7 in r25,__SP_H__
2915 152e 4496 adiw r24,20
2916 1530 00C0 rjmp .L306
2917 .L199:
2918 1532 9430 cpi r25,lo8(4)
2919 1534 01F4 brne .L206
2920 .L307:
2921 1536 86E0 ldi r24,lo8(6)
2922 .L308:
2923 1538 0E94 0000 call Hott_ClearLine
2924 153c 00C0 rjmp .L114
2925 .L206:
2926 153e 9630 cpi r25,lo8(6)
2927 1540 01F4 brne .L208
2928 1542 8EE7 ldi r24,lo8(126)
2929 1544 0E94 0000 call LIBFC_HoTT_SetPos
2930 1548 80E6 ldi r24,lo8(96)
2931 154a 90E0 ldi r25,hi8(96)
2932 154c 9F93 push r25
2933 154e 8F93 push r24
2934 1550 8091 0000 lds r24,Motor+47
2935 1554 9927 clr r25
2936 1556 87FD sbrc r24,7
2937 1558 9095 com r25
2938 155a 9F93 push r25
2939 155c 8F93 push r24
2940 155e 8091 0000 lds r24,Motor+39
2941 1562 9927 clr r25
2942 1564 87FD sbrc r24,7
2943 1566 9095 com r25
2944 1568 9F93 push r25
2945 156a 8F93 push r24
2946 156c 80E0 ldi r24,lo8(__c.57)
2947 156e 90E0 ldi r25,hi8(__c.57)
2948 1570 9F93 push r25
2949 1572 8F93 push r24
2950 1574 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
2951 1576 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
2952 1578 9F93 push r25
2953 157a 8F93 push r24
2954 157c 00C0 rjmp .L317
2955 .L208:
2956 157e 9730 cpi r25,lo8(7)
2957 1580 00F4 brsh .+2
2958 1582 00C0 rjmp .L114
2959 1584 8EE7 ldi r24,lo8(126)
2960 1586 0E94 0000 call LIBFC_HoTT_SetPos
2961 158a 80E6 ldi r24,lo8(96)
2962 158c 90E0 ldi r25,hi8(96)
2963 158e 9F93 push r25
2964 1590 8F93 push r24
2965 1592 8091 0000 lds r24,Motor+63
2966 1596 9927 clr r25
2967 1598 87FD sbrc r24,7
2968 159a 9095 com r25
2969 159c 9F93 push r25
2970 159e 8F93 push r24
2971 15a0 8091 0000 lds r24,Motor+55
2972 15a4 9927 clr r25
2973 15a6 87FD sbrc r24,7
2974 15a8 9095 com r25
2975 15aa 9F93 push r25
2976 15ac 8F93 push r24
2977 15ae 8091 0000 lds r24,Motor+47
2978 15b2 9927 clr r25
2979 15b4 87FD sbrc r24,7
2980 15b6 9095 com r25
2981 15b8 9F93 push r25
2982 15ba 8F93 push r24
2983 15bc 8091 0000 lds r24,Motor+39
2984 15c0 9927 clr r25
2985 15c2 87FD sbrc r24,7
2986 15c4 9095 com r25
2987 15c6 9F93 push r25
2988 15c8 8F93 push r24
2989 15ca 80E0 ldi r24,lo8(__c.58)
2990 15cc 90E0 ldi r25,hi8(__c.58)
2991 .L325:
2992 15ce 9F93 push r25
2993 15d0 8F93 push r24
2994 15d2 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
2995 15d4 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
2996 15d6 9F93 push r25
2997 15d8 8F93 push r24
2998 15da 00C0 rjmp .L311
2999 .L211:
3000 15dc 9091 0000 lds r25,NC_ErrorCode
3001 15e0 9923 tst r25
3002 15e2 01F4 brne .+2
3003 15e4 00C0 rjmp .L212
3004 15e6 8091 0000 lds r24,HoTTBlink
3005 15ea 8823 tst r24
3006 15ec 01F0 breq .L213
3007 15ee 9032 cpi r25,lo8(32)
3008 15f0 00F4 brsh .L213
3009 15f2 87E0 ldi r24,lo8(7)
3010 15f4 0E94 0000 call Hott_ClearLine
3011 15f8 83E9 ldi r24,lo8(-109)
3012 15fa 0E94 0000 call LIBFC_HoTT_SetPos
3013 15fe 8091 0000 lds r24,NC_ErrorCode
3014 1602 9927 clr r25
3015 1604 9F93 push r25
3016 1606 8F93 push r24
3017 1608 80E0 ldi r24,lo8(__c.59)
3018 160a 90E0 ldi r25,hi8(__c.59)
3019 .L315:
3020 160c 9F93 push r25
3021 160e 8F93 push r24
3022 1610 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_INV))
3023 1612 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_INV))
3024 1614 9F93 push r25
3025 1616 8F93 push r24
3026 .L318:
3027 1618 E091 0000 lds r30,_printf_P
3028 161c F091 0000 lds r31,(_printf_P)+1
3029 .L319:
3030 1620 0995 icall
3031 1622 2DB7 in r18,__SP_L__
3032 1624 3EB7 in r19,__SP_H__
3033 1626 2A5F subi r18,lo8(-(6))
3034 1628 3F4F sbci r19,hi8(-(6))
3035 162a 00C0 rjmp .L303
3036 .L213:
3037 162c 83E9 ldi r24,lo8(-109)
3038 162e 0E94 0000 call LIBFC_HoTT_SetPos
3039 1632 80E0 ldi r24,lo8(__c.60)
3040 1634 90E0 ldi r25,hi8(__c.60)
3041 .L310:
3042 1636 9F93 push r25
3043 1638 8F93 push r24
3044 163a 00E0 ldi r16,lo8(pm(LIBFC_HoTT_Putchar))
3045 163c 10E0 ldi r17,hi8(pm(LIBFC_HoTT_Putchar))
3046 163e 1F93 push r17
3047 1640 0F93 push r16
3048 1642 E091 0000 lds r30,_printf_P
3049 1646 F091 0000 lds r31,(_printf_P)+1
3050 164a 0995 icall
3051 164c 1F92 push __zero_reg__
3052 164e 1F92 push __zero_reg__
3053 1650 9091 0000 lds r25,NC_ErrorCode
3054 1654 81E1 ldi r24,lo8(17)
3055 1656 989F mul r25,r24
3056 1658 C001 movw r24,r0
3057 165a 1124 clr r1
3058 165c 8050 subi r24,lo8(-(NC_ERROR_TEXT))
3059 165e 9040 sbci r25,hi8(-(NC_ERROR_TEXT))
3060 1660 9F93 push r25
3061 1662 8F93 push r24
3062 1664 1F93 push r17
3063 1666 0F93 push r16
3064 1668 E091 0000 lds r30,_printf_P
3065 166c F091 0000 lds r31,(_printf_P)+1
3066 1670 0995 icall
3067 .L312:
3068 1672 8DB7 in r24,__SP_L__
3069 1674 9EB7 in r25,__SP_H__
3070 1676 0A96 adiw r24,10
3071 1678 00C0 rjmp .L306
3072 .L212:
3073 167a 8091 0000 lds r24,FC_StatusFlags
3074 167e B0E0 ldi r27,lo8(pm(LIBFC_HoTT_Putchar))
3075 1680 EB2E mov r14,r27
3076 1682 B0E0 ldi r27,hi8(pm(LIBFC_HoTT_Putchar))
3077 1684 FB2E mov r15,r27
3078 1686 85FF sbrs r24,5
3079 1688 00C0 rjmp .L216
3080 168a 84E9 ldi r24,lo8(-108)
3081 168c 0E94 0000 call LIBFC_HoTT_SetPos
3082 1690 80E0 ldi r24,lo8(__c.61)
3083 1692 90E0 ldi r25,hi8(__c.61)
3084 1694 00C0 rjmp .L329
3085 .L216:
3086 1696 83E9 ldi r24,lo8(-109)
3087 1698 0E94 0000 call LIBFC_HoTT_SetPos
3088 169c 80E0 ldi r24,lo8(__c.62)
3089 169e 90E0 ldi r25,hi8(__c.62)
3090 .L329:
3091 16a0 9F93 push r25
3092 16a2 8F93 push r24
3093 16a4 FF92 push r15
3094 16a6 EF92 push r14
3095 16a8 00C0 rjmp .L322
3096 .L226:
3097 16aa 8091 0000 lds r24,HottKeyboard
3098 16ae 8630 cpi r24,lo8(6)
3099 16b0 01F4 brne .L227
3100 16b2 8091 0000 lds r24,show_current.2
3101 16b6 8823 tst r24
3102 16b8 01F0 breq .L228
3103 16ba 1092 0000 sts show_current.2,__zero_reg__
3104 16be 00C0 rjmp .L229
3105 .L228:
3106 16c0 81E0 ldi r24,lo8(1)
3107 16c2 8093 0000 sts show_current.2,r24
3108 .L229:
3109 16c6 85E0 ldi r24,lo8(5)
3110 16c8 0E94 0000 call Hott_ClearLine
3111 16cc 86E0 ldi r24,lo8(6)
3112 16ce 00C0 rjmp .L323
3113 .L227:
3114 16d0 8830 cpi r24,lo8(8)
3115 16d2 01F4 brne .L231
3116 16d4 0E94 0000 call LIBFC_HoTT_Clear
3117 16d8 82E0 ldi r24,lo8(2)
3118 .L330:
3119 16da 8093 0000 sts page.1,r24
3120 16de 00C0 rjmp .L324
3121 .L231:
3122 16e0 8130 cpi r24,lo8(1)
3123 16e2 01F0 breq .+2
3124 16e4 00C0 rjmp .L292
3125 16e6 0E94 0000 call LIBFC_HoTT_Clear
3126 16ea 1092 0000 sts page.1,__zero_reg__
3127 16ee 00C0 rjmp .L324
3128 .L172:
3129 16f0 9230 cpi r25,lo8(2)
3130 16f2 01F0 breq .+2
3131 16f4 00C0 rjmp .L237
3132 16f6 8091 0000 lds r24,line.0
3133 16fa 282F mov r18,r24
3134 16fc 3327 clr r19
3135 16fe 4427 clr r20
3136 1700 5527 clr r21
3137 1702 8F5F subi r24,lo8(-(1))
3138 1704 8093 0000 sts line.0,r24
3139 1708 F901 movw r30,r18
3140 170a 2131 cpi r18,17
3141 170c 3105 cpc r19,__zero_reg__
3142 170e 00F0 brlo .+2
3143 1710 00C0 rjmp .L294
3144 1712 E050 subi r30,lo8(-(pm(.L295)))
3145 1714 F040 sbci r31,hi8(-(pm(.L295)))
3146 1716 0C94 0000 jmp __tablejump2__
3147 .data
3148 .section .progmem.gcc_sw_table, "a", @progbits
3149 .p2align 1
3150 .L295:
3151 0044 0000 .word pm(.L239)
3152 0046 0000 .word pm(.L240)
3153 0048 0000 .word pm(.L241)
3154 004a 0000 .word pm(.L250)
3155 004c 0000 .word pm(.L256)
3156 004e 0000 .word pm(.L268)
3157 0050 0000 .word pm(.L271)
3158 0052 0000 .word pm(.L274)
3159 0054 0000 .word pm(.L114)
3160 0056 0000 .word pm(.L288)
3161 0058 0000 .word pm(.L288)
3162 005a 0000 .word pm(.L288)
3163 005c 0000 .word pm(.L288)
3164 005e 0000 .word pm(.L288)
3165 0060 0000 .word pm(.L288)
3166 0062 0000 .word pm(.L288)
3167 0064 0000 .word pm(.L288)
3168 .text
3169 .L239:
3170 171a 80E0 ldi r24,lo8(0)
3171 171c 0E94 0000 call LIBFC_HoTT_SetPos
3172 1720 80E0 ldi r24,lo8(EE_Parameter+112)
3173 1722 90E0 ldi r25,hi8(EE_Parameter+112)
3174 1724 9F93 push r25
3175 1726 8F93 push r24
3176 1728 0E94 0000 call GetActiveParamSet
3177 172c 9927 clr r25
3178 172e 9F93 push r25
3179 1730 8F93 push r24
3180 1732 80E0 ldi r24,lo8(__c.63)
3181 1734 90E0 ldi r25,hi8(__c.63)
3182 .L313:
3183 1736 9F93 push r25
3184 1738 8F93 push r24
3185 173a 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_INV))
3186 173c 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_INV))
3187 173e 9F93 push r25
3188 1740 8F93 push r24
3189 .L320:
3190 1742 E091 0000 lds r30,_printf_P
3191 1746 F091 0000 lds r31,(_printf_P)+1
3192 174a 0995 icall
3193 174c 2DB7 in r18,__SP_L__
3194 174e 3EB7 in r19,__SP_H__
3195 1750 285F subi r18,lo8(-(8))
3196 1752 3F4F sbci r19,hi8(-(8))
3197 1754 00C0 rjmp .L303
3198 .L240:
3199 1756 85E1 ldi r24,lo8(21)
3200 1758 0E94 0000 call LIBFC_HoTT_SetPos
3201 175c 80E0 ldi r24,lo8(Mixer+1)
3202 175e 90E0 ldi r25,hi8(Mixer+1)
3203 1760 9F93 push r25
3204 1762 8F93 push r24
3205 1764 8091 0000 lds r24,BattLowVoltageWarning
3206 1768 6AE0 ldi r22,lo8(10)
3207 176a 0E94 0000 call __udivmodqi4
3208 176e 892F mov r24,r25
3209 1770 9927 clr r25
3210 1772 9F93 push r25
3211 1774 8F93 push r24
3212 1776 8091 0000 lds r24,BattLowVoltageWarning
3213 177a 0E94 0000 call __udivmodqi4
3214 177e 9927 clr r25
3215 1780 9F93 push r25
3216 1782 8F93 push r24
3217 1784 80E0 ldi r24,lo8(__c.64)
3218 1786 90E0 ldi r25,hi8(__c.64)
3219 1788 9F93 push r25
3220 178a 8F93 push r24
3221 178c 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
3222 178e 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
3223 1790 9F93 push r25
3224 1792 8F93 push r24
3225 1794 E091 0000 lds r30,_printf_P
3226 1798 F091 0000 lds r31,(_printf_P)+1
3227 179c 0995 icall
3228 179e 00C0 rjmp .L312
3229 .L241:
3230 17a0 8AE2 ldi r24,lo8(42)
3231 17a2 0E94 0000 call LIBFC_HoTT_SetPos
3232 17a6 80E0 ldi r24,lo8(__c.65)
3233 17a8 90E0 ldi r25,hi8(__c.65)
3234 17aa 9F93 push r25
3235 17ac 8F93 push r24
3236 17ae C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
3237 17b0 D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
3238 17b2 DF93 push r29
3239 17b4 CF93 push r28
3240 17b6 E091 0000 lds r30,_printf_P
3241 17ba F091 0000 lds r31,(_printf_P)+1
3242 17be 0995 icall
3243 17c0 8091 0000 lds r24,Parameter_GlobalConfig
3244 17c4 0F90 pop __tmp_reg__
3245 17c6 0F90 pop __tmp_reg__
3246 17c8 0F90 pop __tmp_reg__
3247 17ca 0F90 pop __tmp_reg__
3248 17cc 80FF sbrs r24,0
3249 17ce 00C0 rjmp .L242
3250 17d0 8091 0000 lds r24,EE_Parameter+13
3251 17d4 9091 0000 lds r25,Parameter_HoehenSchalter
3252 17d8 81FD sbrc r24,1
3253 17da 00C0 rjmp .L243
3254 17dc 892F mov r24,r25
3255 17de 9927 clr r25
3256 17e0 9F93 push r25
3257 17e2 8F93 push r24
3258 17e4 80E0 ldi r24,lo8(__c.66)
3259 17e6 90E0 ldi r25,hi8(__c.66)
3260 17e8 9F93 push r25
3261 17ea 8F93 push r24
3262 17ec DF93 push r29
3263 17ee CF93 push r28
3264 17f0 00C0 rjmp .L318
3265 .L243:
3266 17f2 E091 0000 lds r30,_printf_P
3267 17f6 F091 0000 lds r31,(_printf_P)+1
3268 17fa 9333 cpi r25,lo8(51)
3269 17fc 00F0 brlo .L245
3270 17fe 80E0 ldi r24,lo8(__c.67)
3271 1800 90E0 ldi r25,hi8(__c.67)
3272 1802 00C0 rjmp .L299
3273 .L245:
3274 1804 80E0 ldi r24,lo8(__c.68)
3275 1806 90E0 ldi r25,hi8(__c.68)
3276 .L299:
3277 1808 9F93 push r25
3278 180a 8F93 push r24
3279 180c DF93 push r29
3280 180e CF93 push r28
3281 1810 0995 icall
3282 1812 0F90 pop __tmp_reg__
3283 1814 0F90 pop __tmp_reg__
3284 1816 0F90 pop __tmp_reg__
3285 1818 0F90 pop __tmp_reg__
3286 181a 8091 0000 lds r24,Parameter_ExtraConfig
3287 181e E091 0000 lds r30,_printf_P
3288 1822 F091 0000 lds r31,(_printf_P)+1
3289 1826 9091 0000 lds r25,Parameter_HoehenSchalter
3290 182a 80FF sbrs r24,0
3291 182c 00C0 rjmp .L247
3292 182e 892F mov r24,r25
3293 1830 9927 clr r25
3294 1832 9F93 push r25
3295 1834 8F93 push r24
3296 1836 80E0 ldi r24,lo8(__c.69)
3297 1838 90E0 ldi r25,hi8(__c.69)
3298 183a 9F93 push r25
3299 183c 8F93 push r24
3300 183e DF93 push r29
3301 1840 CF93 push r28
3302 1842 00C0 rjmp .L305
3303 .L247:
3304 1844 892F mov r24,r25
3305 1846 9927 clr r25
3306 1848 9F93 push r25
3307 184a 8F93 push r24
3308 184c 80E0 ldi r24,lo8(__c.70)
3309 184e 90E0 ldi r25,hi8(__c.70)
3310 1850 00C0 rjmp .L326
3311 .L242:
3312 1852 80E0 ldi r24,lo8(__c.71)
3313 1854 90E0 ldi r25,hi8(__c.71)
3314 1856 00C0 rjmp .L328
3315 .L250:
3316 1858 8FE3 ldi r24,lo8(63)
3317 185a 0E94 0000 call LIBFC_HoTT_SetPos
3318 185e 80E0 ldi r24,lo8(__c.72)
3319 1860 90E0 ldi r25,hi8(__c.72)
3320 1862 9F93 push r25
3321 1864 8F93 push r24
3322 1866 C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
3323 1868 D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
3324 186a DF93 push r29
3325 186c CF93 push r28
3326 186e E091 0000 lds r30,_printf_P
3327 1872 F091 0000 lds r31,(_printf_P)+1
3328 1876 0995 icall
3329 1878 0F90 pop __tmp_reg__
3330 187a 0F90 pop __tmp_reg__
3331 187c 0F90 pop __tmp_reg__
3332 187e 0F90 pop __tmp_reg__
3333 1880 8091 0000 lds r24,EE_Parameter+99
3334 1884 8823 tst r24
3335 1886 01F4 brne .L251
3336 1888 80E0 ldi r24,lo8(__c.73)
3337 188a 90E0 ldi r25,hi8(__c.73)
3338 188c 00C0 rjmp .L328
3339 .L251:
3340 188e 8091 0000 lds r24,CareFree
3341 1892 E091 0000 lds r30,_printf_P
3342 1896 F091 0000 lds r31,(_printf_P)+1
3343 189a 8823 tst r24
3344 189c 01F0 breq .L253
3345 189e 80E0 ldi r24,lo8(__c.74)
3346 18a0 90E0 ldi r25,hi8(__c.74)
3347 18a2 00C0 rjmp .L300
3348 .L253:
3349 18a4 80E0 ldi r24,lo8(__c.75)
3350 18a6 90E0 ldi r25,hi8(__c.75)
3351 .L300:
3352 18a8 9F93 push r25
3353 18aa 8F93 push r24
3354 18ac DF93 push r29
3355 18ae CF93 push r28
3356 18b0 0995 icall
3357 18b2 0F90 pop __tmp_reg__
3358 18b4 0F90 pop __tmp_reg__
3359 18b6 0F90 pop __tmp_reg__
3360 18b8 0F90 pop __tmp_reg__
3361 18ba 8091 0000 lds r24,EE_Parameter+110
3362 18be 86FF sbrs r24,6
3363 18c0 00C0 rjmp .L114
3364 18c2 80E0 ldi r24,lo8(__c.76)
3365 18c4 90E0 ldi r25,hi8(__c.76)
3366 .L328:
3367 18c6 9F93 push r25
3368 18c8 8F93 push r24
3369 18ca DF93 push r29
3370 18cc CF93 push r28
3371 18ce 00C0 rjmp .L322
3372 .L256:
3373 18d0 84E5 ldi r24,lo8(84)
3374 18d2 0E94 0000 call LIBFC_HoTT_SetPos
3375 18d6 80E0 ldi r24,lo8(__c.77)
3376 18d8 90E0 ldi r25,hi8(__c.77)
3377 18da 9F93 push r25
3378 18dc 8F93 push r24
3379 18de C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
3380 18e0 D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
3381 18e2 DF93 push r29
3382 18e4 CF93 push r28
3383 18e6 E091 0000 lds r30,_printf_P
3384 18ea F091 0000 lds r31,(_printf_P)+1
3385 18ee 0995 icall
3386 18f0 8091 0000 lds r24,Parameter_GlobalConfig
3387 18f4 0F90 pop __tmp_reg__
3388 18f6 0F90 pop __tmp_reg__
3389 18f8 0F90 pop __tmp_reg__
3390 18fa 0F90 pop __tmp_reg__
3391 18fc 85FD sbrc r24,5
3392 18fe 00C0 rjmp .L257
3393 1900 80E0 ldi r24,lo8(__c.78)
3394 1902 90E0 ldi r25,hi8(__c.78)
3395 1904 00C0 rjmp .L309
3396 .L257:
3397 1906 8091 0000 lds r24,EE_Parameter+81
3398 190a 883F cpi r24,lo8(-8)
3399 190c 00F4 brsh .L259
3400 190e E82F mov r30,r24
3401 1910 00C0 rjmp .L260
3402 .L259:
3403 1912 EFEF ldi r30,lo8(255)
3404 1914 F0E0 ldi r31,hi8(255)
3405 1916 E81B sub r30,r24
3406 1918 F109 sbc r31,__zero_reg__
3407 191a E050 subi r30,lo8(-(Poti))
3408 191c F040 sbci r31,hi8(-(Poti))
3409 191e E081 ld r30,Z
3410 .L260:
3411 1920 E233 cpi r30,lo8(50)
3412 1922 00F4 brsh .L261
3413 1924 80E0 ldi r24,lo8(__c.79)
3414 1926 90E0 ldi r25,hi8(__c.79)
3415 .L309:
3416 1928 9F93 push r25
3417 192a 8F93 push r24
3418 192c DF93 push r29
3419 192e CF93 push r28
3420 1930 E091 0000 lds r30,_printf_P
3421 1934 F091 0000 lds r31,(_printf_P)+1
3422 1938 00C0 rjmp .L302
3423 .L261:
3424 193a E43B cpi r30,lo8(-76)
3425 193c 00F0 brlo .L263
3426 193e 80E0 ldi r24,lo8(__c.80)
3427 1940 90E0 ldi r25,hi8(__c.80)
3428 1942 00C0 rjmp .L309
3429 .L263:
3430 1944 8091 0000 lds r24,EE_Parameter+110
3431 1948 E091 0000 lds r30,_printf_P
3432 194c F091 0000 lds r31,(_printf_P)+1
3433 1950 85FF sbrs r24,5
3434 1952 00C0 rjmp .L265
3435 1954 80E0 ldi r24,lo8(__c.81)
3436 1956 90E0 ldi r25,hi8(__c.81)
3437 1958 00C0 rjmp .L301
3438 .L265:
3439 195a 80E0 ldi r24,lo8(__c.82)
3440 195c 90E0 ldi r25,hi8(__c.82)
3441 .L301:
3442 195e 9F93 push r25
3443 1960 8F93 push r24
3444 1962 DF93 push r29
3445 1964 CF93 push r28
3446 .L302:
3447 1966 0995 icall
3448 1968 0F90 pop __tmp_reg__
3449 196a 0F90 pop __tmp_reg__
3450 196c 0F90 pop __tmp_reg__
3451 196e 0F90 pop __tmp_reg__
3452 1970 8091 0000 lds r24,EE_Parameter+103
3453 1974 8823 tst r24
3454 1976 01F4 brne .+2
3455 1978 00C0 rjmp .L114
3456 197a 8EE5 ldi r24,lo8(94)
3457 197c 0E94 0000 call LIBFC_HoTT_SetPos
3458 1980 8091 0000 lds r24,EE_Parameter+103
3459 1984 9927 clr r25
3460 1986 9F93 push r25
3461 1988 8F93 push r24
3462 198a 80E0 ldi r24,lo8(__c.83)
3463 198c 90E0 ldi r25,hi8(__c.83)
3464 .L331:
3465 198e 9F93 push r25
3466 1990 8F93 push r24
3467 1992 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar))
3468 1994 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar))
3469 1996 9F93 push r25
3470 1998 8F93 push r24
3471 .L327:
3472 199a E091 0000 lds r30,_printf_P
3473 199e F091 0000 lds r31,(_printf_P)+1
3474 .L305:
3475 19a2 0995 icall
3476 19a4 8DB7 in r24,__SP_L__
3477 19a6 9EB7 in r25,__SP_H__
3478 19a8 0696 adiw r24,6
3479 .L306:
3480 19aa 8DBF out __SP_L__,r24
3481 19ac 00C0 rjmp .L114
3482 .L268:
3483 19ae 89E6 ldi r24,lo8(105)
3484 19b0 0E94 0000 call LIBFC_HoTT_SetPos
3485 19b4 80E0 ldi r24,lo8(__c.84)
3486 19b6 90E0 ldi r25,hi8(__c.84)
3487 19b8 9F93 push r25
3488 19ba 8F93 push r24
3489 19bc C0E0 ldi r28,lo8(pm(LIBFC_HoTT_Putchar))
3490 19be D0E0 ldi r29,hi8(pm(LIBFC_HoTT_Putchar))
3491 19c0 DF93 push r29
3492 19c2 CF93 push r28
3493 19c4 E091 0000 lds r30,_printf_P
3494 19c8 F091 0000 lds r31,(_printf_P)+1
3495 19cc 0995 icall
3496 19ce 0F90 pop __tmp_reg__
3497 19d0 0F90 pop __tmp_reg__
3498 19d2 0F90 pop __tmp_reg__
3499 19d4 0F90 pop __tmp_reg__
3500 19d6 8091 0000 lds r24,EE_Parameter+102
3501 19da E091 0000 lds r30,_printf_P
3502 19de F091 0000 lds r31,(_printf_P)+1
3503 19e2 8823 tst r24
3504 19e4 01F0 breq .L269
3505 19e6 9927 clr r25
3506 19e8 9F93 push r25
3507 19ea 8F93 push r24
3508 19ec 80E0 ldi r24,lo8(__c.85)
3509 19ee 90E0 ldi r25,hi8(__c.85)
3510 .L326:
3511 19f0 9F93 push r25
3512 19f2 8F93 push r24
3513 19f4 DF93 push r29
3514 19f6 CF93 push r28
3515 19f8 00C0 rjmp .L319
3516 .L269:
3517 19fa 80E0 ldi r24,lo8(__c.86)
3518 19fc 90E0 ldi r25,hi8(__c.86)
3519 19fe 9F93 push r25
3520 1a00 8F93 push r24
3521 1a02 DF93 push r29
3522 1a04 CF93 push r28
3523 1a06 00C0 rjmp .L304
3524 .L271:
3525 1a08 8091 0000 lds r24,show_poti.4
3526 1a0c A0E0 ldi r26,lo8(pm(LIBFC_HoTT_Putchar))
3527 1a0e EA2E mov r14,r26
3528 1a10 A0E0 ldi r26,hi8(pm(LIBFC_HoTT_Putchar))
3529 1a12 FA2E mov r15,r26
3530 1a14 8823 tst r24
3531 1a16 01F0 breq .+2
3532 1a18 00C0 rjmp .L272
3533 1a1a 8EE7 ldi r24,lo8(126)
3534 1a1c 0E94 0000 call LIBFC_HoTT_SetPos
3535 1a20 8091 0000 lds r24,Parameter_ServoNickControl
3536 1a24 9927 clr r25
3537 1a26 9F93 push r25
3538 1a28 8F93 push r24
3539 1a2a 8091 0000 lds r24,EE_Parameter+2
3540 1a2e E82F mov r30,r24
3541 1a30 FF27 clr r31
3542 1a32 EE0F add r30,r30
3543 1a34 FF1F adc r31,r31
3544 1a36 E050 subi r30,lo8(-(PPM_in))
3545 1a38 F040 sbci r31,hi8(-(PPM_in))
3546 1a3a 8081 ld r24,Z
3547 1a3c 9181 ldd r25,Z+1
3548 1a3e 9F93 push r25
3549 1a40 8F93 push r24
3550 1a42 8091 0000 lds r24,EE_Parameter+1
3551 1a46 E82F mov r30,r24
3552 1a48 FF27 clr r31
3553 1a4a EE0F add r30,r30
3554 1a4c FF1F adc r31,r31
3555 1a4e E050 subi r30,lo8(-(PPM_in))
3556 1a50 F040 sbci r31,hi8(-(PPM_in))
3557 1a52 8081 ld r24,Z
3558 1a54 9181 ldd r25,Z+1
3559 1a56 9F93 push r25
3560 1a58 8F93 push r24
3561 1a5a 80E0 ldi r24,lo8(__c.87)
3562 1a5c 90E0 ldi r25,hi8(__c.87)
3563 1a5e 9F93 push r25
3564 1a60 8F93 push r24
3565 1a62 FF92 push r15
3566 1a64 EF92 push r14
3567 1a66 E091 0000 lds r30,_printf_P
3568 1a6a F091 0000 lds r31,(_printf_P)+1
3569 1a6e 0995 icall
3570 1a70 83E9 ldi r24,lo8(-109)
3571 1a72 0E94 0000 call LIBFC_HoTT_SetPos
3572 1a76 8DB7 in r24,__SP_L__
3573 1a78 9EB7 in r25,__SP_H__
3574 1a7a 0A96 adiw r24,10
3575 1a7c 8DBF out __SP_L__,r24
3576 1a7e 8091 0000 lds r24,EE_Parameter+4
3577 1a82 E82F mov r30,r24
3578 1a84 FF27 clr r31
3579 1a86 EE0F add r30,r30
3580 1a88 FF1F adc r31,r31
3581 1a8a E050 subi r30,lo8(-(PPM_in))
3582 1a8c F040 sbci r31,hi8(-(PPM_in))
3583 1a8e 8081 ld r24,Z
3584 1a90 9181 ldd r25,Z+1
3585 1a92 9F93 push r25
3586 1a94 8F93 push r24
3587 1a96 8091 0000 lds r24,EE_Parameter+3
3588 1a9a E82F mov r30,r24
3589 1a9c FF27 clr r31
3590 1a9e EE0F add r30,r30
3591 1aa0 FF1F adc r31,r31
3592 1aa2 E050 subi r30,lo8(-(PPM_in))
3593 1aa4 F040 sbci r31,hi8(-(PPM_in))
3594 1aa6 8081 ld r24,Z
3595 1aa8 9181 ldd r25,Z+1
3596 1aaa 8158 subi r24,lo8(-(127))
3597 1aac 9F4F sbci r25,hi8(-(127))
3598 1aae 9F93 push r25
3599 1ab0 8F93 push r24
3600 1ab2 80E0 ldi r24,lo8(__c.88)
3601 1ab4 90E0 ldi r25,hi8(__c.88)
3602 1ab6 9F93 push r25
3603 1ab8 8F93 push r24
3604 1aba FF92 push r15
3605 1abc EF92 push r14
3606 1abe 00C0 rjmp .L320
3607 .L272:
3608 1ac0 8EE7 ldi r24,lo8(126)
3609 1ac2 0E94 0000 call LIBFC_HoTT_SetPos
3610 1ac6 8091 0000 lds r24,Poti+2
3611 1aca 9927 clr r25
3612 1acc 9F93 push r25
3613 1ace 8F93 push r24
3614 1ad0 8091 0000 lds r24,Poti+1
3615 1ad4 9927 clr r25
3616 1ad6 9F93 push r25
3617 1ad8 8F93 push r24
3618 1ada 8091 0000 lds r24,Poti
3619 1ade 9927 clr r25
3620 1ae0 9F93 push r25
3621 1ae2 8F93 push r24
3622 1ae4 80E0 ldi r24,lo8(__c.89)
3623 1ae6 90E0 ldi r25,hi8(__c.89)
3624 1ae8 9F93 push r25
3625 1aea 8F93 push r24
3626 1aec FF92 push r15
3627 1aee EF92 push r14
3628 1af0 E091 0000 lds r30,_printf_P
3629 1af4 F091 0000 lds r31,(_printf_P)+1
3630 1af8 0995 icall
3631 1afa 83E9 ldi r24,lo8(-109)
3632 1afc 0E94 0000 call LIBFC_HoTT_SetPos
3633 1b00 8DB7 in r24,__SP_L__
3634 1b02 9EB7 in r25,__SP_H__
3635 1b04 0A96 adiw r24,10
3636 1b06 8DBF out __SP_L__,r24
3637 1b08 8091 0000 lds r24,Poti+5
3638 1b0c 9927 clr r25
3639 1b0e 9F93 push r25
3640 1b10 8F93 push r24
3641 1b12 8091 0000 lds r24,Poti+4
3642 1b16 9927 clr r25
3643 1b18 9F93 push r25
3644 1b1a 8F93 push r24
3645 1b1c 8091 0000 lds r24,Poti+3
3646 1b20 9927 clr r25
3647 1b22 9F93 push r25
3648 1b24 8F93 push r24
3649 1b26 80E0 ldi r24,lo8(__c.90)
3650 1b28 90E0 ldi r25,hi8(__c.90)
3651 .L314:
3652 1b2a 9F93 push r25
3653 1b2c 8F93 push r24
3654 1b2e FF92 push r15
3655 1b30 EF92 push r14
3656 .L317:
3657 1b32 E091 0000 lds r30,_printf_P
3658 1b36 F091 0000 lds r31,(_printf_P)+1
3659 1b3a 0995 icall
3660 1b3c 2DB7 in r18,__SP_L__
3661 1b3e 3EB7 in r19,__SP_H__
3662 1b40 265F subi r18,lo8(-(10))
3663 1b42 3F4F sbci r19,hi8(-(10))
3664 .L303:
3665 1b44 2DBF out __SP_L__,r18
3666 1b46 00C0 rjmp .L114
3667 .L274:
3668 1b48 8091 0000 lds r24,HoTTBlink
3669 1b4c 8823 tst r24
3670 1b4e 01F4 brne .+2
3671 1b50 00C0 rjmp .L114
3672 1b52 8EE7 ldi r24,lo8(126)
3673 1b54 0E94 0000 call LIBFC_HoTT_SetPos
3674 1b58 8091 0000 lds r24,Parameter_GlobalConfig
3675 1b5c 86FD sbrc r24,6
3676 1b5e 00C0 rjmp .L276
3677 1b60 80E0 ldi r24,lo8(__c.91)
3678 1b62 90E0 ldi r25,hi8(__c.91)
3679 1b64 9F93 push r25
3680 1b66 8F93 push r24
3681 1b68 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
3682 1b6a 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
3683 1b6c 9F93 push r25
3684 1b6e 8F93 push r24
3685 1b70 E091 0000 lds r30,_printf_P
3686 1b74 F091 0000 lds r31,(_printf_P)+1
3687 1b78 0995 icall
3688 1b7a 0F90 pop __tmp_reg__
3689 1b7c 0F90 pop __tmp_reg__
3690 1b7e 0F90 pop __tmp_reg__
3691 1b80 0F90 pop __tmp_reg__
3692 .L276:
3693 1b82 8091 0000 lds r24,EE_Parameter+108
3694 1b86 9927 clr r25
3695 1b88 8F70 andi r24,lo8(15)
3696 1b8a 9070 andi r25,hi8(15)
3697 1b8c 892B or r24,r25
3698 1b8e 01F0 breq .L277
3699 1b90 80E0 ldi r24,lo8(__c.92)
3700 1b92 90E0 ldi r25,hi8(__c.92)
3701 1b94 9F93 push r25
3702 1b96 8F93 push r24
3703 1b98 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
3704 1b9a 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
3705 1b9c 9F93 push r25
3706 1b9e 8F93 push r24
3707 1ba0 E091 0000 lds r30,_printf_P
3708 1ba4 F091 0000 lds r31,(_printf_P)+1
3709 1ba8 0995 icall
3710 1baa 0F90 pop __tmp_reg__
3711 1bac 0F90 pop __tmp_reg__
3712 1bae 0F90 pop __tmp_reg__
3713 1bb0 0F90 pop __tmp_reg__
3714 .L277:
3715 1bb2 8091 0000 lds r24,Parameter_GlobalConfig
3716 1bb6 82FF sbrs r24,2
3717 1bb8 00C0 rjmp .L278
3718 1bba 80E0 ldi r24,lo8(__c.93)
3719 1bbc 90E0 ldi r25,hi8(__c.93)
3720 1bbe 9F93 push r25
3721 1bc0 8F93 push r24
3722 1bc2 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
3723 1bc4 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
3724 1bc6 9F93 push r25
3725 1bc8 8F93 push r24
3726 1bca E091 0000 lds r30,_printf_P
3727 1bce F091 0000 lds r31,(_printf_P)+1
3728 1bd2 0995 icall
3729 1bd4 0F90 pop __tmp_reg__
3730 1bd6 0F90 pop __tmp_reg__
3731 1bd8 0F90 pop __tmp_reg__
3732 1bda 0F90 pop __tmp_reg__
3733 .L278:
3734 1bdc 8091 0000 lds r24,Parameter_GlobalConfig
3735 1be0 83FD sbrc r24,3
3736 1be2 00C0 rjmp .L114
3737 1be4 80E0 ldi r24,lo8(__c.94)
3738 1be6 90E0 ldi r25,hi8(__c.94)
3739 .L332:
3740 1be8 9F93 push r25
3741 1bea 8F93 push r24
3742 1bec 80E0 ldi r24,lo8(pm(LIBFC_HoTT_Putchar_BLINK))
3743 1bee 90E0 ldi r25,hi8(pm(LIBFC_HoTT_Putchar_BLINK))
3744 .L321:
3745 1bf0 9F93 push r25
3746 1bf2 8F93 push r24
3747 .L322:
3748 1bf4 E091 0000 lds r30,_printf_P
3749 1bf8 F091 0000 lds r31,(_printf_P)+1
3750 .L304:
3751 1bfc 0995 icall
3752 1bfe 0F90 pop __tmp_reg__
3753 1c00 0F90 pop __tmp_reg__
3754 1c02 0F90 pop __tmp_reg__
3755 1c04 0F90 pop __tmp_reg__
3756 1c06 00C0 rjmp .L114
3757 .L288:
3758 1c08 0091 0000 lds r16,HottKeyboard
3759 1c0c 0630 cpi r16,lo8(6)
3760 1c0e 01F4 brne .L289
3761 1c10 8091 0000 lds r24,show_poti.4
3762 1c14 8823 tst r24
3763 1c16 01F0 breq .L290
3764 1c18 1092 0000 sts show_poti.4,__zero_reg__
3765 1c1c 00C0 rjmp .L291
3766 .L290:
3767 1c1e 81E0 ldi r24,lo8(1)
3768 1c20 8093 0000 sts show_poti.4,r24
3769 .L291:
3770 1c24 86E0 ldi r24,lo8(6)
3771 1c26 0E94 0000 call Hott_ClearLine
3772 1c2a 87E0 ldi r24,lo8(7)
3773 .L323:
3774 1c2c 0E94 0000 call Hott_ClearLine
3775 1c30 00C0 rjmp .L292
3776 .L289:
3777 1c32 0130 cpi r16,lo8(1)
3778 1c34 01F4 brne .L292
3779 1c36 0E94 0000 call LIBFC_HoTT_Clear
3780 1c3a 0093 0000 sts page.1,r16
3781 .L324:
3782 1c3e 1092 0000 sts line.0,__zero_reg__
3783 .L292:
3784 1c42 1092 0000 sts HottKeyboard,__zero_reg__
3785 1c46 00C0 rjmp .L114
3786 .L294:
3787 1c48 1092 0000 sts line.0,__zero_reg__
3788 1c4c 00C0 rjmp .L114
3789 .L237:
3790 1c4e 1092 0000 sts page.1,__zero_reg__
3791 .L114:
3792 /* epilogue: frame size=0 */
3793 1c52 E6E0 ldi r30,6
3794 1c54 CDB7 in r28,__SP_L__
3795 1c56 DEB7 in r29,__SP_H__
3796 1c58 0C94 0000 jmp __epilogue_restores__+24
3797 /* epilogue end (size=5) */
3798 /* function HoTT_Menu size 2582 (2571) */
3800 .comm GPSPacket,44,1
3801 .comm VarioPacket,44,1
3802 .comm ASCIIPacket,172,1
3803 .comm ElectricAirPacket,44,1
3804 .comm HoTTGeneral,44,1
3805 /* File "hottmenu.c": code 3700 = 0x0e74 (3675), prologues 11, epilogues 14 */
DEFINED SYMBOLS
*ABS*:00000000 hottmenu.c
C:\Temp/cckO2rDa.s:3 *ABS*:0000003f __SREG__
C:\Temp/cckO2rDa.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cckO2rDa.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cckO2rDa.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cckO2rDa.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cckO2rDa.s:15 .bss:00000000 HottestBl
C:\Temp/cckO2rDa.s:21 .bss:00000001 MinBlTempertaure
C:\Temp/cckO2rDa.s:27 .bss:00000002 MaxBlTempertaure
C:\Temp/cckO2rDa.s:33 .progmem.data:00000000 HOTT_ERROR
C:\Temp/cckO2rDa.s:100 .progmem.data:00000040 NC_ERROR_TEXT
C:\Temp/cckO2rDa.s:136 .progmem.data:00000260 UNDERVOLTAGE
C:\Temp/cckO2rDa.s:141 .progmem.data:00000276 MIKROKOPTER
C:\Temp/cckO2rDa.s:148 .bss:00000003 HoTTVarioMeter
C:\Temp/cckO2rDa.s:154 .bss:00000005 ToNC_SpeakHoTT
C:\Temp/cckO2rDa.s:160 .data:00000000 SpeakHoTT
C:\Temp/cckO2rDa.s:167 .bss:00000006 NaviData_TargetDistance
C:\Temp/cckO2rDa.s:173 .bss:00000008 NaviData_TargetHoldTime
C:\Temp/cckO2rDa.s:179 .bss:00000009 NaviData_WaypointNumber
C:\Temp/cckO2rDa.s:185 .bss:0000000a NaviData_WaypointIndex
.bss:0000000b search.98
C:\Temp/cckO2rDa.s:187 .bss:0000000c tmp_max.99
C:\Temp/cckO2rDa.s:188 .bss:0000000d tmp_min.100
C:\Temp/cckO2rDa.s:189 .bss:0000000e who.101
C:\Temp/cckO2rDa.s:194 .text:00000000 GetHottestBl
C:\Temp/cckO2rDa.s:262 .progmem.data:0000028c __c.97
C:\Temp/cckO2rDa.s:267 .text:0000008c Hott_ClearLine
C:\Temp/cckO2rDa.s:190 .bss:0000000f old_status.95
C:\Temp/cckO2rDa.s:295 .bss:00000010 repeat.96
C:\Temp/cckO2rDa.s:299 .text:000000bc HoTT_Waring
C:\Temp/cckO2rDa.s:396 .text:0000016e NC_Fills_HoTT_Telemety
*COM*:0000002c VarioPacket
*COM*:0000002c GPSPacket
*COM*:0000002c ElectricAirPacket
*COM*:0000002c HoTTGeneral
C:\Temp/cckO2rDa.s:469 .text:000001e0 BuildHoTT_Vario
C:\Temp/cckO2rDa.s:577 .text:000002aa HoTT_Telemety
C:\Temp/cckO2rDa.s:296 .bss:00000012 line.0
C:\Temp/cckO2rDa.s:1157 .bss:00000013 page.1
C:\Temp/cckO2rDa.s:1158 .bss:00000014 show_current.2
C:\Temp/cckO2rDa.s:1159 .bss:00000015 show_mag.3
C:\Temp/cckO2rDa.s:1160 .bss:00000016 show_poti.4
C:\Temp/cckO2rDa.s:1165 .progmem.data:000002a2 __c.5
C:\Temp/cckO2rDa.s:1169 .progmem.data:000002af __c.6
C:\Temp/cckO2rDa.s:1173 .progmem.data:000002bc __c.7
C:\Temp/cckO2rDa.s:1177 .progmem.data:000002c8 __c.8
C:\Temp/cckO2rDa.s:1181 .progmem.data:000002d3 __c.9
C:\Temp/cckO2rDa.s:1185 .progmem.data:000002dd __c.10
C:\Temp/cckO2rDa.s:1189 .progmem.data:000002ea __c.11
C:\Temp/cckO2rDa.s:1193 .progmem.data:000002f7 __c.12
C:\Temp/cckO2rDa.s:1197 .progmem.data:00000302 __c.13
C:\Temp/cckO2rDa.s:1201 .progmem.data:00000304 __c.14
C:\Temp/cckO2rDa.s:1205 .progmem.data:00000306 __c.15
C:\Temp/cckO2rDa.s:1209 .progmem.data:0000030e __c.16
C:\Temp/cckO2rDa.s:1213 .progmem.data:00000316 __c.17
C:\Temp/cckO2rDa.s:1217 .progmem.data:00000322 __c.18
C:\Temp/cckO2rDa.s:1221 .progmem.data:00000324 __c.19
C:\Temp/cckO2rDa.s:1225 .progmem.data:00000326 __c.20
C:\Temp/cckO2rDa.s:1229 .progmem.data:00000328 __c.21
C:\Temp/cckO2rDa.s:1233 .progmem.data:0000033e __c.22
C:\Temp/cckO2rDa.s:1237 .progmem.data:00000354 __c.23
C:\Temp/cckO2rDa.s:1241 .progmem.data:00000356 __c.24
C:\Temp/cckO2rDa.s:1245 .progmem.data:0000035f __c.25
C:\Temp/cckO2rDa.s:1249 .progmem.data:00000369 __c.26
C:\Temp/cckO2rDa.s:1253 .progmem.data:0000036c __c.27
C:\Temp/cckO2rDa.s:1257 .progmem.data:0000036f __c.28
C:\Temp/cckO2rDa.s:1261 .progmem.data:00000372 __c.29
C:\Temp/cckO2rDa.s:1265 .progmem.data:0000037d __c.30
C:\Temp/cckO2rDa.s:1269 .progmem.data:00000389 __c.31
C:\Temp/cckO2rDa.s:1273 .progmem.data:00000399 __c.32
C:\Temp/cckO2rDa.s:1277 .progmem.data:000003b2 __c.33
C:\Temp/cckO2rDa.s:1281 .progmem.data:000003bd __c.34
C:\Temp/cckO2rDa.s:1285 .progmem.data:000003c3 __c.35
C:\Temp/cckO2rDa.s:1289 .progmem.data:000003d6 __c.36
C:\Temp/cckO2rDa.s:1293 .progmem.data:000003ec __c.37
C:\Temp/cckO2rDa.s:1297 .progmem.data:00000407 __c.38
C:\Temp/cckO2rDa.s:1301 .progmem.data:00000422 __c.39
C:\Temp/cckO2rDa.s:1305 .progmem.data:0000042c __c.40
C:\Temp/cckO2rDa.s:1309 .progmem.data:00000435 __c.41
C:\Temp/cckO2rDa.s:1313 .progmem.data:0000043e __c.42
C:\Temp/cckO2rDa.s:1317 .progmem.data:00000448 __c.43
C:\Temp/cckO2rDa.s:1321 .progmem.data:0000044b __c.44
C:\Temp/cckO2rDa.s:1325 .progmem.data:00000462 __c.45
C:\Temp/cckO2rDa.s:1329 .progmem.data:00000476 __c.46
C:\Temp/cckO2rDa.s:1333 .progmem.data:00000479 __c.47
C:\Temp/cckO2rDa.s:1337 .progmem.data:0000047c __c.48
C:\Temp/cckO2rDa.s:1341 .progmem.data:0000048f __c.49
C:\Temp/cckO2rDa.s:1345 .progmem.data:00000495 __c.50
C:\Temp/cckO2rDa.s:1349 .progmem.data:0000049b __c.51
C:\Temp/cckO2rDa.s:1353 .progmem.data:000004a1 __c.52
C:\Temp/cckO2rDa.s:1357 .progmem.data:000004b7 __c.53
C:\Temp/cckO2rDa.s:1361 .progmem.data:000004d4 __c.54
C:\Temp/cckO2rDa.s:1365 .progmem.data:000004e7 __c.55
C:\Temp/cckO2rDa.s:1369 .progmem.data:000004f6 __c.56
C:\Temp/cckO2rDa.s:1373 .progmem.data:00000513 __c.57
C:\Temp/cckO2rDa.s:1377 .progmem.data:00000526 __c.58
C:\Temp/cckO2rDa.s:1381 .progmem.data:00000539 __c.59
C:\Temp/cckO2rDa.s:1385 .progmem.data:00000544 __c.60
C:\Temp/cckO2rDa.s:1389 .progmem.data:0000054a __c.61
C:\Temp/cckO2rDa.s:1393 .progmem.data:0000055d __c.62
C:\Temp/cckO2rDa.s:1397 .progmem.data:00000573 __c.63
C:\Temp/cckO2rDa.s:1401 .progmem.data:00000582 __c.64
C:\Temp/cckO2rDa.s:1405 .progmem.data:00000593 __c.65
C:\Temp/cckO2rDa.s:1409 .progmem.data:00000598 __c.66
C:\Temp/cckO2rDa.s:1413 .progmem.data:000005a2 __c.67
C:\Temp/cckO2rDa.s:1417 .progmem.data:000005a9 __c.68
C:\Temp/cckO2rDa.s:1421 .progmem.data:000005b0 __c.69
C:\Temp/cckO2rDa.s:1425 .progmem.data:000005b6 __c.70
C:\Temp/cckO2rDa.s:1429 .progmem.data:000005bc __c.71
C:\Temp/cckO2rDa.s:1433 .progmem.data:000005c5 __c.72
C:\Temp/cckO2rDa.s:1437 .progmem.data:000005c9 __c.73
C:\Temp/cckO2rDa.s:1441 .progmem.data:000005d2 __c.74
C:\Temp/cckO2rDa.s:1445 .progmem.data:000005d9 __c.75
C:\Temp/cckO2rDa.s:1449 .progmem.data:000005e0 __c.76
C:\Temp/cckO2rDa.s:1453 .progmem.data:000005e7 __c.77
C:\Temp/cckO2rDa.s:1457 .progmem.data:000005ec __c.78
C:\Temp/cckO2rDa.s:1461 .progmem.data:000005f5 __c.79
C:\Temp/cckO2rDa.s:1465 .progmem.data:000005fc __c.80
C:\Temp/cckO2rDa.s:1469 .progmem.data:00000603 __c.81
C:\Temp/cckO2rDa.s:1473 .progmem.data:0000060a __c.82
C:\Temp/cckO2rDa.s:1477 .progmem.data:00000611 __c.83
C:\Temp/cckO2rDa.s:1481 .progmem.data:0000061c __c.84
C:\Temp/cckO2rDa.s:1485 .progmem.data:00000626 __c.85
C:\Temp/cckO2rDa.s:1489 .progmem.data:0000062a __c.86
C:\Temp/cckO2rDa.s:1493 .progmem.data:00000630 __c.87
C:\Temp/cckO2rDa.s:1497 .progmem.data:00000644 __c.88
C:\Temp/cckO2rDa.s:1501 .progmem.data:00000653 __c.89
C:\Temp/cckO2rDa.s:1505 .progmem.data:00000667 __c.90
C:\Temp/cckO2rDa.s:1509 .progmem.data:0000067b __c.91
C:\Temp/cckO2rDa.s:1513 .progmem.data:0000068a __c.92
C:\Temp/cckO2rDa.s:1517 .progmem.data:00000694 __c.93
C:\Temp/cckO2rDa.s:1521 .progmem.data:00000699 __c.94
C:\Temp/cckO2rDa.s:1526 .text:00000896 HoTT_Menu
*COM*:000000ac ASCIIPacket
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
Motor
LIBFC_HoTT_SetPos
LIBFC_HoTT_Putchar
_printf_P
FC_StatusFlags
NC_ErrorCode
MotorenEin
EE_Parameter
CheckDelay
SetDelay
FromNaviCtrl
VarioCharacter
AltitudeSetpointTrimming
__divmodhi4
FromNC_AltitudeSpeed
HoehenWert
__divmodsi4
HoTT_DataPointer
FC_StatusFlags2
__udivmodqi4
__udivmodhi4
GPSInfo
NC_GPS_ModeCharacter
UBat
ErsatzKompassInGrad
Capacity
FlugSekunden
BattLowVoltageWarning
VarioMeter
__tablejump2__
LIBFC_HoTT_Putchar_BLINK
Parameter_GlobalConfig
HoehenReglerAktiv
NaviDataOkay
EarthMagneticField
EarthMagneticInclinationTheoretic
EarthMagneticInclination
HoTTBlink
HottKeyboard
LIBFC_HoTT_Clear
KompassValue
LIBFC_HoTT_Putchar_INV
RequiredMotors
GetActiveParamSet
Mixer
Parameter_HoehenSchalter
Parameter_ExtraConfig
CareFree
Poti
Parameter_ServoNickControl
PPM_in
__epilogue_restores__
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/isqrt.S
0,0 → 1,203
;-----------------------------------------------------------------------------;
; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008
; http://elm-chan.org/docs/avrlib/sqrt32.S
;-----------------------------------------------------------------------------;
; uint16_t isqrt32 (uint32_t n);
; uint8_t isqrt16 (uint16_t n);
; uint16_t ihypot (int16_t x, int16_t y);
 
;-----------------------------------------------------------------------------:
; 32bit integer squareroot
;-----------------------------------------------------------------------------;
; uint16_t isqrt32 (
; uint32_t n
; );
;
; Return Value:
; Squareroot of n.
;
; Size = 53 words
; Clock = 532..548 cycles
; Stack = 0 byte
 
.global isqrt32
.func isqrt32
 
isqrt32:
clr r0
clr r18
clr r19
clr r20
ldi r21, 1
clr r27
clr r30
clr r31
ldi r26, 16
1: lsl r22
rol r23
rol r24
rol r25
rol r0
rol r18
rol r19
rol r20
lsl r22
rol r23
rol r24
rol r25
rol r0
rol r18
rol r19
rol r20
brpl 2f
add r0, r21
adc r18, r27
adc r19, r30
adc r20, r31
rjmp 3f
2: sub r0, r21
sbc r18, r27
sbc r19, r30
sbc r20, r31
3: lsl r21
rol r27
rol r30
andi r21, 0b11111000
ori r21, 0b00000101
sbrc r20, 7
subi r21, 2
dec r26
brne 1b
lsr r30
ror r27
ror r21
lsr r30
ror r27
ror r21
mov r24, r21
mov r25, r27
ret
.endfunc
 
 
 
;-----------------------------------------------------------------------------:
; 16bit integer squareroot
;-----------------------------------------------------------------------------;
; uint8_t isqrt16 (
; uint16_t n
; );
;
; Return Value:
; Squareroot of n.
;
; Size = 33 words
; Clock = 181..189 cycles
; Stack = 0 byte
 
.global isqrt16
.func isqrt16
 
isqrt16:
clr r18
clr r19
ldi r20, 1
clr r21
ldi r22, 8
1: lsl r24
rol r25
rol r18
rol r19
lsl r24
rol r25
rol r18
rol r19
brpl 2f
add r18, r20
adc r19, r21
rjmp 3f
2: sub r18, r20
sbc r19, r21
3: lsl r20
rol r21
andi r20, 0b11111000
ori r20, 0b00000101
sbrc r19, 7
subi r20, 2
dec r22
brne 1b
lsr r21
ror r20
lsr r21
ror r20
mov r24, r20
ret
.endfunc
 
 
 
;-----------------------------------------------------------------------------:
; 16bit integer hypot (megaAVR is required)
;-----------------------------------------------------------------------------;
; uint16_t ihypot (
; int16_t x,
; int16_t y
; );
;
; Return Value:
; Squareroot of (x*x + y*y)
;
; Size = 42 words
; Clock = 581..597 cycles
; Stack = 0 byte
 
.global ihypot
.func ihypot
 
ihypot:
clr r26
sbrs r25, 7
rjmp 1f
com r24
com r25
adc r24, r26
adc r25, r26
1: sbrs r23, 7
rjmp 2f
com r22
com r23
adc r22, r26
adc r23, r26
2: mul r22, r22
movw r18, r0
mul r23, r23
movw r20, r0
mul r22, r23
add r19, r0
adc r20, r1
adc r21, r26
add r19, r0
adc r20, r1
adc r21, r26
mul r24, r24
movw r30, r0
mul r25, r25
add r18, r30
adc r19, r31
adc r20, r0
adc r21, r1
mul r24, r25
add r19, r0
adc r20, r1
adc r21, r26
add r19, r0
adc r20, r1
adc r21, r26
movw r24, r20
movw r22, r18
clr r1
rjmp isqrt32
.endfunc
 
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/isqrt.h
0,0 → 1,11
#ifndef _ISQRT_H
#define _ISQRT_H
 
#include <inttypes.h>
 
// coded in assembler file
extern uint16_t isqrt32(uint32_t n);
extern uint8_t isqrt16(uint16_t n);
extern uint16_t ihypot(int16_t x, int16_t y);
 
#endif // _ISQRT_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/isqrt.lst
0,0 → 1,209
1 # 1 "isqrt.S"
1 ;-----------------------------------------------------------------------------;
0
0
2 ;-----------------------------------------------------------------------------;
3 ; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008
4 ; http://elm-chan.org/docs/avrlib/sqrt32.S
5 ;-----------------------------------------------------------------------------;
6 ; uint16_t isqrt32 (uint32_t n);
7 ; uint8_t isqrt16 (uint16_t n);
8 ; uint16_t ihypot (int16_t x, int16_t y);
9
10 ;-----------------------------------------------------------------------------:
11 ; 32bit integer squareroot
12 ;-----------------------------------------------------------------------------;
13 ; uint16_t isqrt32 (
14 ; uint32_t n
15 ; );
16 ;
17 ; Return Value:
18 ; Squareroot of n.
19 ;
20 ; Size = 53 words
21 ; Clock = 532..548 cycles
22 ; Stack = 0 byte
23
24 .global isqrt32
25 .func isqrt32
26
27:isqrt.S **** isqrt32:
28:isqrt.S **** clr r0
29:isqrt.S **** clr r18
30:isqrt.S **** clr r19
31:isqrt.S **** clr r20
32:isqrt.S **** ldi r21, 1
33:isqrt.S **** clr r27
34:isqrt.S **** clr r30
35:isqrt.S **** clr r31
36:isqrt.S **** ldi r26, 16
37:isqrt.S **** 1: lsl r22
38:isqrt.S **** rol r23
39:isqrt.S **** rol r24
40:isqrt.S **** rol r25
41:isqrt.S **** rol r0
42:isqrt.S **** rol r18
43:isqrt.S **** rol r19
44:isqrt.S **** rol r20
45:isqrt.S **** lsl r22
46:isqrt.S **** rol r23
47:isqrt.S **** rol r24
48:isqrt.S **** rol r25
49:isqrt.S **** rol r0
50:isqrt.S **** rol r18
51:isqrt.S **** rol r19
52:isqrt.S **** rol r20
53:isqrt.S **** brpl 2f
54:isqrt.S **** add r0, r21
55:isqrt.S **** adc r18, r27
56:isqrt.S **** adc r19, r30
57:isqrt.S **** adc r20, r31
58:isqrt.S **** rjmp 3f
59:isqrt.S **** 2: sub r0, r21
60:isqrt.S **** sbc r18, r27
61:isqrt.S **** sbc r19, r30
62:isqrt.S **** sbc r20, r31
63:isqrt.S **** 3: lsl r21
64:isqrt.S **** rol r27
65:isqrt.S **** rol r30
66:isqrt.S **** andi r21, 0b11111000
67:isqrt.S **** ori r21, 0b00000101
68:isqrt.S **** sbrc r20, 7
69:isqrt.S **** subi r21, 2
70:isqrt.S **** dec r26
71:isqrt.S **** brne 1b
72:isqrt.S **** lsr r30
73:isqrt.S **** ror r27
74:isqrt.S **** ror r21
75:isqrt.S **** lsr r30
76:isqrt.S **** ror r27
77:isqrt.S **** ror r21
78:isqrt.S **** mov r24, r21
79:isqrt.S **** mov r25, r27
80 ret
81 .endfunc
82
83
84
85 ;-----------------------------------------------------------------------------:
86 ; 16bit integer squareroot
87 ;-----------------------------------------------------------------------------;
88 ; uint8_t isqrt16 (
89 ; uint16_t n
90 ; );
91 ;
92 ; Return Value:
93 ; Squareroot of n.
94 ;
95 ; Size = 33 words
96 ; Clock = 181..189 cycles
97 ; Stack = 0 byte
98
99 .global isqrt16
100 .func isqrt16
101
102:isqrt.S **** isqrt16:
103:isqrt.S **** clr r18
104:isqrt.S **** clr r19
105:isqrt.S **** ldi r20, 1
106:isqrt.S **** clr r21
107:isqrt.S **** ldi r22, 8
108:isqrt.S **** 1: lsl r24
109:isqrt.S **** rol r25
110:isqrt.S **** rol r18
111:isqrt.S **** rol r19
112:isqrt.S **** lsl r24
113:isqrt.S **** rol r25
114:isqrt.S **** rol r18
115:isqrt.S **** rol r19
116:isqrt.S **** brpl 2f
117:isqrt.S **** add r18, r20
118:isqrt.S **** adc r19, r21
119:isqrt.S **** rjmp 3f
120:isqrt.S **** 2: sub r18, r20
121:isqrt.S **** sbc r19, r21
122:isqrt.S **** 3: lsl r20
123:isqrt.S **** rol r21
124:isqrt.S **** andi r20, 0b11111000
125:isqrt.S **** ori r20, 0b00000101
126:isqrt.S **** sbrc r19, 7
127:isqrt.S **** subi r20, 2
128:isqrt.S **** dec r22
129:isqrt.S **** brne 1b
130:isqrt.S **** lsr r21
131:isqrt.S **** ror r20
132:isqrt.S **** lsr r21
133:isqrt.S **** ror r20
134:isqrt.S **** mov r24, r20
135 ret
136 .endfunc
137
138
139
140 ;-----------------------------------------------------------------------------:
141 ; 16bit integer hypot (megaAVR is required)
142 ;-----------------------------------------------------------------------------;
143 ; uint16_t ihypot (
144 ; int16_t x,
145 ; int16_t y
146 ; );
147 ;
148 ; Return Value:
149 ; Squareroot of (x*x + y*y)
150 ;
151 ; Size = 42 words
152 ; Clock = 581..597 cycles
153 ; Stack = 0 byte
154
155 .global ihypot
156 .func ihypot
157
158:isqrt.S **** ihypot:
159:isqrt.S **** clr r26
160:isqrt.S **** sbrs r25, 7
161:isqrt.S **** rjmp 1f
162:isqrt.S **** com r24
163:isqrt.S **** com r25
164:isqrt.S **** adc r24, r26
165:isqrt.S **** adc r25, r26
166:isqrt.S **** 1: sbrs r23, 7
167:isqrt.S **** rjmp 2f
168:isqrt.S **** com r22
169:isqrt.S **** com r23
170:isqrt.S **** adc r22, r26
171:isqrt.S **** adc r23, r26
172:isqrt.S **** 2: mul r22, r22
173:isqrt.S **** movw r18, r0
174:isqrt.S **** mul r23, r23
175:isqrt.S **** movw r20, r0
176:isqrt.S **** mul r22, r23
177:isqrt.S **** add r19, r0
178:isqrt.S **** adc r20, r1
179:isqrt.S **** adc r21, r26
180:isqrt.S **** add r19, r0
181:isqrt.S **** adc r20, r1
182:isqrt.S **** adc r21, r26
183:isqrt.S **** mul r24, r24
184:isqrt.S **** movw r30, r0
185:isqrt.S **** mul r25, r25
186:isqrt.S **** add r18, r30
187:isqrt.S **** adc r19, r31
188:isqrt.S **** adc r20, r0
189:isqrt.S **** adc r21, r1
190:isqrt.S **** mul r24, r25
191:isqrt.S **** add r19, r0
192:isqrt.S **** adc r20, r1
193:isqrt.S **** adc r21, r26
194:isqrt.S **** add r19, r0
195:isqrt.S **** adc r20, r1
196:isqrt.S **** adc r21, r26
197:isqrt.S **** movw r24, r20
198:isqrt.S **** movw r22, r18
199:isqrt.S **** clr r1
200 rjmp isqrt32
DEFINED SYMBOLS
isqrt.S:26 .text:00000000 isqrt32
isqrt.S:101 .text:0000006a isqrt16
isqrt.S:157 .text:000000ac ihypot
 
NO UNDEFINED SYMBOLS
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/jeti_ex.c
0,0 → 1,140
#include "libfc.h"
#include "printf_P.h"
#include "main.h"
#include "spi.h"
#include "capacity.h"
#include "jeti_ex.h"
#include "hottmenu.h"
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
const char PROGMEM JETI_CODE[53] =
{
0, // 0
'O', // SPEAK_ERR_CALIBARTION 1
'P', // SPEAK_ERR_RECEICER 2
'Q', // SPEAK_ERR_DATABUS 3
'R', // SPEAK_ERR_NAVI 4
'S', // SPEAK_ERROR 5
'T', // SPEAK_ERR_COMPASS 6
'S', // SPEAK_ERR_SENSOR 7
'V', // SPEAK_ERR_GPS 8
'W', // SPEAK_ERR_MOTOR 9
'H', // SPEAK_MAX_TEMPERAT 10
0, // SPEAK_ALTI_REACHED 11
'X', // SPEAK_WP_REACHED 12
'Y', // SPEAK_NEXT_WP 13
0, // SPEAK_LANDING 14
'Z', // SPEAK_GPS_FIX 15
'U', // SPEAK_UNDERVOLTAGE 16
'E', // SPEAK_GPS_HOLD 17
'F', // SPEAK_GPS_HOME 18
'G', // SPEAK_GPS_OFF 19
'H', // SPEAK_BEEP 20
'A', // SPEAK_MIKROKOPTER 21
0, // SPEAK_CAPACITY 22
'I', // SPEAK_CF_OFF 23
'B', // SPEAK_CALIBRATE 24
'J', // SPEAK_MAX_RANGE 25
'J', // SPEAK_MAX_ALTITUD 26
0, // 27
0, // 28
0, // 29
0, // 30
0, // 31
0, // 32
0, // 33
0, // 34
0, // 35
0, // 36
0, // 37
'D', // SPEAK_MK_OFF 38
'L', // SPEAK_ALTITUDE_ON 39
'M', // SPEAK_ALTITUDE_OFF 40
0, // 41
0, // 42
0, // 43
0, // 44
0, // 45
'N', // SPEAK_CF_ON 46
0, // SPEAK_SINKING 47
0, // SPEAK_RISING 48
0, // SPEAK_HOLDING 49
'K', // SPEAK_GPS_ON 50
0, // SPEAK_FOLLWING 51
'C' // SPEAK_STARTING 52
};
 
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0)
{
// Label[10] unit[3], data type, Data , position of decimal point
// "1234567890", "123",
{ "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1
{ "Current " , "A ", 1, 0 , 1 }, // ID 2
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3
{ "Altitude " , "m ", 1, 0 , 0 }, // ID 4
{ "Compass " , "° ", 1, 0 , 0 }, // ID 5
{ "Sats " , " ", 1, 0 , 0 }, // ID 6
{ "Speed " , "m/s", 1, 0 , 0 }, // ID 7
{ "Distance " , "m ", 1, 0 , 0 }, // ID 8
{ "Home-Dir " , "° ", 1, 0 , 0 }, // ID 9
{ "max.Temp. " , "°C ", 1, 0 , 0 }, // ID 10
{ "Magn.field" , "% ", 1, 0 , 0 }, // ID 11
{ "Vario " , " ", 1, 0 , 0 }, // ID 12
{ "ErrorCode " , " ", 1, 0 , 0 }, // ID 13
{ "frei " , " ", 1, 0 , 3 }, // ID 14
{ "frei " , " ", 1, 0 , 3 }, // ID 15
};
 
 
void BuildJeti_Vario(void)
{
signed int tmp = 0;
static signed int JetiVarioMeter = 0;
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4;
 
if(VarioCharacter == '+')
{
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5;
}
else
if(VarioCharacter == '-')
{
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5;
}
else
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
{
tmp = (JetiVarioMeter/32);
}
else
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed;
else
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed;
 
JetiExData[12].Value = tmp;
}
 
 
// --------------------------------------------------------------------------------------------------
void JetiEX_Update(void)
{
 
GetHottestBl();
JetiExData[1].Value = UBat;
JetiExData[2].Value = Capacity.ActualCurrent;
JetiExData[3].Value = Capacity.UsedCapacity / 10;
JetiExData[4].Value = HoehenWert / 100;
JetiExData[5].Value = KompassValue;
JetiExData[6].Value = GPSInfo.NumOfSats;
JetiExData[7].Value = GPSInfo.Speed;
JetiExData[8].Value = GPSInfo.HomeDistance / 10;
JetiExData[9].Value = GPSInfo.HomeBearing;
JetiExData[10].Value = MaxBlTempertaure;
JetiExData[11].Value = EarthMagneticField;
// JetiExData[12].Value = Vario;
JetiExData[13].Value = NC_ErrorCode;
}
#endif
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/jeti_ex.h
0,0 → 1,37
#ifndef _JETI_EX_H
#define _JETI_EX_H
 
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
extern void BuildJeti_Vario(void);
 
// define here how many Jeti EX parameters should be transmitted (max. = 15)
//
#define JETI_EX_PARAMETER_COUNT 15
//
// -------------------------------------------------------------------------
 
extern const char PROGMEM JETI_CODE[53];
typedef struct
{
char Label[10];
char Unit[3];
unsigned char DataType;
long Value;
unsigned char DecimalPointPos;
} JetiExPacket_t;
extern JetiExPacket_t JetiExData[];
extern void JetiEX_Update(void);
 
 
 
#if (JETI_EX_PARAMETER_COUNT > 15)
#error "ERROR: Too many Jeti EX parameters (max. allowed 15)"
#endif
 
#endif
#endif //_JETI_EX_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/jeti_ex.lst
0,0 → 1,477
1 .file "jeti_ex.c"
2 .arch atmega1284p
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 .global JetiExData
11 .data
14 JetiExData:
15 0000 2D3D 2E4D .string "-=.M_K.=-"
15 5F4B 2E3D
15 2D00
16 000a 2020 20 .ascii " "
17 000d 01 .byte 1
18 000e 0000 0000 .long 0
19 0012 00 .byte 0
20 0013 566F 6C74 .ascii "Voltage "
20 6167 6520
20 2020
21 001d 5620 20 .ascii "V "
22 0020 01 .byte 1
23 0021 0000 0000 .long 0
24 0025 01 .byte 1
25 0026 4375 7272 .ascii "Current "
25 656E 7420
25 2020
26 0030 4120 20 .ascii "A "
27 0033 01 .byte 1
28 0034 0000 0000 .long 0
29 0038 01 .byte 1
30 0039 4361 7061 .ascii "Capacity "
30 6369 7479
30 2020
31 0043 4168 20 .ascii "Ah "
32 0046 01 .byte 1
33 0047 0000 0000 .long 0
34 004b 02 .byte 2
35 004c 416C 7469 .ascii "Altitude "
35 7475 6465
35 2020
36 0056 6D20 20 .ascii "m "
37 0059 01 .byte 1
38 005a 0000 0000 .long 0
39 005e 00 .byte 0
40 005f 436F 6D70 .ascii "Compass "
40 6173 7320
40 2020
41 0069 B020 20 .ascii "\260 "
42 006c 01 .byte 1
43 006d 0000 0000 .long 0
44 0071 00 .byte 0
45 0072 5361 7473 .ascii "Sats "
45 2020 2020
45 2020
46 007c 2020 20 .ascii " "
47 007f 01 .byte 1
48 0080 0000 0000 .long 0
49 0084 00 .byte 0
50 0085 5370 6565 .ascii "Speed "
50 6420 2020
50 2020
51 008f 6D2F 73 .ascii "m/s"
52 0092 01 .byte 1
53 0093 0000 0000 .long 0
54 0097 00 .byte 0
55 0098 4469 7374 .ascii "Distance "
55 616E 6365
55 2020
56 00a2 6D20 20 .ascii "m "
57 00a5 01 .byte 1
58 00a6 0000 0000 .long 0
59 00aa 00 .byte 0
60 00ab 486F 6D65 .ascii "Home-Dir "
60 2D44 6972
60 2020
61 00b5 B020 20 .ascii "\260 "
62 00b8 01 .byte 1
63 00b9 0000 0000 .long 0
64 00bd 00 .byte 0
65 00be 6D61 782E .ascii "max.Temp. "
65 5465 6D70
65 2E20
66 00c8 B043 20 .ascii "\260C "
67 00cb 01 .byte 1
68 00cc 0000 0000 .long 0
69 00d0 00 .byte 0
70 00d1 4D61 676E .ascii "Magn.field"
70 2E66 6965
70 6C64
71 00db 2520 20 .ascii "% "
72 00de 01 .byte 1
73 00df 0000 0000 .long 0
74 00e3 00 .byte 0
75 00e4 5661 7269 .ascii "Vario "
75 6F20 2020
75 2020
76 00ee 2020 20 .ascii " "
77 00f1 01 .byte 1
78 00f2 0000 0000 .long 0
79 00f6 00 .byte 0
80 00f7 4572 726F .ascii "ErrorCode "
80 7243 6F64
80 6520
81 0101 2020 20 .ascii " "
82 0104 01 .byte 1
83 0105 0000 0000 .long 0
84 0109 00 .byte 0
85 010a 6672 6569 .ascii "frei "
85 2020 2020
85 2020
86 0114 2020 20 .ascii " "
87 0117 01 .byte 1
88 0118 0000 0000 .long 0
89 011c 03 .byte 3
90 011d 6672 6569 .ascii "frei "
90 2020 2020
90 2020
91 0127 2020 20 .ascii " "
92 012a 01 .byte 1
93 012b 0000 0000 .long 0
94 012f 03 .byte 3
95 .global JETI_CODE
96 .section .progmem.data,"a",@progbits
99 JETI_CODE:
100 0000 00 .byte 0
101 0001 4F .byte 79
102 0002 50 .byte 80
103 0003 51 .byte 81
104 0004 52 .byte 82
105 0005 53 .byte 83
106 0006 54 .byte 84
107 0007 53 .byte 83
108 0008 56 .byte 86
109 0009 57 .byte 87
110 000a 48 .byte 72
111 000b 00 .byte 0
112 000c 58 .byte 88
113 000d 59 .byte 89
114 000e 00 .byte 0
115 000f 5A .byte 90
116 0010 55 .byte 85
117 0011 45 .byte 69
118 0012 46 .byte 70
119 0013 47 .byte 71
120 0014 48 .byte 72
121 0015 41 .byte 65
122 0016 00 .byte 0
123 0017 49 .byte 73
124 0018 42 .byte 66
125 0019 4A .byte 74
126 001a 4A .byte 74
127 001b 00 .byte 0
128 001c 00 .byte 0
129 001d 00 .byte 0
130 001e 00 .byte 0
131 001f 00 .byte 0
132 0020 00 .byte 0
133 0021 00 .byte 0
134 0022 00 .byte 0
135 0023 00 .byte 0
136 0024 00 .byte 0
137 0025 00 .byte 0
138 0026 44 .byte 68
139 0027 4C .byte 76
140 0028 4D .byte 77
141 0029 00 .byte 0
142 002a 00 .byte 0
143 002b 00 .byte 0
144 002c 00 .byte 0
145 002d 00 .byte 0
146 002e 4E .byte 78
147 002f 00 .byte 0
148 0030 00 .byte 0
149 0031 00 .byte 0
150 0032 4B .byte 75
151 0033 00 .byte 0
152 0034 43 .byte 67
153 .lcomm JetiVarioMeter.0,2
154 .text
155 .global BuildJeti_Vario
157 BuildJeti_Vario:
158 /* prologue: frame size=0 */
159 /* prologue end (size=0) */
160 0000 40E0 ldi r20,lo8(0)
161 0002 50E0 ldi r21,hi8(0)
162 0004 8091 0000 lds r24,JetiVarioMeter.0
163 0008 9091 0000 lds r25,(JetiVarioMeter.0)+1
164 000c 9C01 movw r18,r24
165 000e 220F lsl r18
166 0010 331F rol r19
167 0012 280F add r18,r24
168 0014 391F adc r19,r25
169 0016 8091 0000 lds r24,VarioMeter
170 001a 9091 0000 lds r25,(VarioMeter)+1
171 001e 280F add r18,r24
172 0020 391F adc r19,r25
173 0022 37FF sbrs r19,7
174 0024 00C0 rjmp .L2
175 0026 2D5F subi r18,lo8(-(3))
176 0028 3F4F sbci r19,hi8(-(3))
177 .L2:
178 002a 3595 asr r19
179 002c 2795 ror r18
180 002e 3595 asr r19
181 0030 2795 ror r18
182 0032 3093 0000 sts (JetiVarioMeter.0)+1,r19
183 0036 2093 0000 sts JetiVarioMeter.0,r18
184 003a 8091 0000 lds r24,VarioCharacter
185 003e 8B32 cpi r24,lo8(43)
186 0040 01F4 brne .L3
187 0042 8091 0000 lds r24,EE_Parameter+18
188 0046 282F mov r18,r24
189 0048 3327 clr r19
190 004a 8091 0000 lds r24,AltitudeSetpointTrimming
191 004e 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
192 0052 829F mul r24,r18
193 0054 A001 movw r20,r0
194 0056 839F mul r24,r19
195 0058 500D add r21,r0
196 005a 929F mul r25,r18
197 005c 500D add r21,r0
198 005e 1124 clr r1
199 0060 CA01 movw r24,r20
200 0062 57FD sbrc r21,7
201 0064 4F96 adiw r24,31
202 .L4:
203 0066 AC01 movw r20,r24
204 0068 25E0 ldi r18,5
205 006a 5595 1: asr r21
206 006c 4795 ror r20
207 006e 2A95 dec r18
208 0070 01F4 brne 1b
209 0072 4B5F subi r20,lo8(-(5))
210 0074 5F4F sbci r21,hi8(-(5))
211 0076 00C0 rjmp .L5
212 .L3:
213 0078 8D32 cpi r24,lo8(45)
214 007a 01F4 brne .L6
215 007c 8091 0000 lds r24,EE_Parameter+18
216 0080 282F mov r18,r24
217 0082 3327 clr r19
218 0084 8091 0000 lds r24,AltitudeSetpointTrimming
219 0088 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
220 008c 829F mul r24,r18
221 008e A001 movw r20,r0
222 0090 839F mul r24,r19
223 0092 500D add r21,r0
224 0094 929F mul r25,r18
225 0096 500D add r21,r0
226 0098 1124 clr r1
227 009a CA01 movw r24,r20
228 009c 57FD sbrc r21,7
229 009e 4F96 adiw r24,31
230 .L7:
231 00a0 AC01 movw r20,r24
232 00a2 95E0 ldi r25,5
233 00a4 5595 1: asr r21
234 00a6 4795 ror r20
235 00a8 9A95 dec r25
236 00aa 01F4 brne 1b
237 00ac 4550 subi r20,lo8(-(-5))
238 00ae 5040 sbci r21,hi8(-(-5))
239 00b0 00C0 rjmp .L5
240 .L6:
241 00b2 8032 cpi r24,lo8(32)
242 00b4 01F4 brne .L9
243 00b6 8091 0000 lds r24,FC_StatusFlags
244 00ba 81FF sbrs r24,1
245 00bc 00C0 rjmp .L5
246 00be C901 movw r24,r18
247 00c0 37FD sbrc r19,7
248 00c2 4F96 adiw r24,31
249 .L10:
250 00c4 AC01 movw r20,r24
251 00c6 85E0 ldi r24,5
252 00c8 5595 1: asr r21
253 00ca 4795 ror r20
254 00cc 8A95 dec r24
255 00ce 01F4 brne 1b
256 00d0 00C0 rjmp .L5
257 .L9:
258 00d2 8E35 cpi r24,lo8(94)
259 00d4 01F4 brne .L12
260 00d6 8091 0000 lds r24,FromNC_AltitudeSpeed
261 00da 482F mov r20,r24
262 00dc 5527 clr r21
263 00de 00C0 rjmp .L5
264 .L12:
265 00e0 8637 cpi r24,lo8(118)
266 00e2 01F4 brne .L5
267 00e4 8091 0000 lds r24,FromNC_AltitudeSpeed
268 00e8 9927 clr r25
269 00ea 4427 clr r20
270 00ec 5527 clr r21
271 00ee 481B sub r20,r24
272 00f0 590B sbc r21,r25
273 .L5:
274 00f2 CA01 movw r24,r20
275 00f4 AA27 clr r26
276 00f6 97FD sbrc r25,7
277 00f8 A095 com r26
278 00fa BA2F mov r27,r26
279 00fc 8093 0000 sts JetiExData+242,r24
280 0100 9093 0000 sts (JetiExData+242)+1,r25
281 0104 A093 0000 sts (JetiExData+242)+2,r26
282 0108 B093 0000 sts (JetiExData+242)+3,r27
283 /* epilogue: frame size=0 */
284 010c 0895 ret
285 /* epilogue end (size=1) */
286 /* function BuildJeti_Vario size 138 (137) */
288 .global JetiEX_Update
290 JetiEX_Update:
291 /* prologue: frame size=0 */
292 010e 0F93 push r16
293 0110 1F93 push r17
294 /* prologue end (size=2) */
295 0112 0E94 0000 call GetHottestBl
296 0116 8091 0000 lds r24,UBat
297 011a 9091 0000 lds r25,(UBat)+1
298 011e AA27 clr r26
299 0120 97FD sbrc r25,7
300 0122 A095 com r26
301 0124 BA2F mov r27,r26
302 0126 8093 0000 sts JetiExData+33,r24
303 012a 9093 0000 sts (JetiExData+33)+1,r25
304 012e A093 0000 sts (JetiExData+33)+2,r26
305 0132 B093 0000 sts (JetiExData+33)+3,r27
306 0136 8091 0000 lds r24,Capacity
307 013a 9091 0000 lds r25,(Capacity)+1
308 013e AA27 clr r26
309 0140 BB27 clr r27
310 0142 8093 0000 sts JetiExData+52,r24
311 0146 9093 0000 sts (JetiExData+52)+1,r25
312 014a A093 0000 sts (JetiExData+52)+2,r26
313 014e B093 0000 sts (JetiExData+52)+3,r27
314 0152 0AE0 ldi r16,lo8(10)
315 0154 10E0 ldi r17,hi8(10)
316 0156 8091 0000 lds r24,Capacity+4
317 015a 9091 0000 lds r25,(Capacity+4)+1
318 015e B801 movw r22,r16
319 0160 0E94 0000 call __udivmodhi4
320 0164 CB01 movw r24,r22
321 0166 AA27 clr r26
322 0168 BB27 clr r27
323 016a 8093 0000 sts JetiExData+71,r24
324 016e 9093 0000 sts (JetiExData+71)+1,r25
325 0172 A093 0000 sts (JetiExData+71)+2,r26
326 0176 B093 0000 sts (JetiExData+71)+3,r27
327 017a 8091 0000 lds r24,HoehenWert
328 017e 9091 0000 lds r25,(HoehenWert)+1
329 0182 A091 0000 lds r26,(HoehenWert)+2
330 0186 B091 0000 lds r27,(HoehenWert)+3
331 018a BC01 movw r22,r24
332 018c CD01 movw r24,r26
333 018e 24E6 ldi r18,lo8(100)
334 0190 30E0 ldi r19,hi8(100)
335 0192 40E0 ldi r20,hlo8(100)
336 0194 50E0 ldi r21,hhi8(100)
337 0196 0E94 0000 call __divmodsi4
338 019a 2093 0000 sts JetiExData+90,r18
339 019e 3093 0000 sts (JetiExData+90)+1,r19
340 01a2 4093 0000 sts (JetiExData+90)+2,r20
341 01a6 5093 0000 sts (JetiExData+90)+3,r21
342 01aa 8091 0000 lds r24,KompassValue
343 01ae 9091 0000 lds r25,(KompassValue)+1
344 01b2 AA27 clr r26
345 01b4 97FD sbrc r25,7
346 01b6 A095 com r26
347 01b8 BA2F mov r27,r26
348 01ba 8093 0000 sts JetiExData+109,r24
349 01be 9093 0000 sts (JetiExData+109)+1,r25
350 01c2 A093 0000 sts (JetiExData+109)+2,r26
351 01c6 B093 0000 sts (JetiExData+109)+3,r27
352 01ca 8091 0000 lds r24,GPSInfo+1
353 01ce 9927 clr r25
354 01d0 AA27 clr r26
355 01d2 BB27 clr r27
356 01d4 8093 0000 sts JetiExData+128,r24
357 01d8 9093 0000 sts (JetiExData+128)+1,r25
358 01dc A093 0000 sts (JetiExData+128)+2,r26
359 01e0 B093 0000 sts (JetiExData+128)+3,r27
360 01e4 8091 0000 lds r24,GPSInfo+3
361 01e8 9927 clr r25
362 01ea AA27 clr r26
363 01ec BB27 clr r27
364 01ee 8093 0000 sts JetiExData+147,r24
365 01f2 9093 0000 sts (JetiExData+147)+1,r25
366 01f6 A093 0000 sts (JetiExData+147)+2,r26
367 01fa B093 0000 sts (JetiExData+147)+3,r27
368 01fe 8091 0000 lds r24,GPSInfo+4
369 0202 9091 0000 lds r25,(GPSInfo+4)+1
370 0206 B801 movw r22,r16
371 0208 0E94 0000 call __udivmodhi4
372 020c CB01 movw r24,r22
373 020e AA27 clr r26
374 0210 BB27 clr r27
375 0212 8093 0000 sts JetiExData+166,r24
376 0216 9093 0000 sts (JetiExData+166)+1,r25
377 021a A093 0000 sts (JetiExData+166)+2,r26
378 021e B093 0000 sts (JetiExData+166)+3,r27
379 0222 8091 0000 lds r24,GPSInfo+6
380 0226 9091 0000 lds r25,(GPSInfo+6)+1
381 022a AA27 clr r26
382 022c 97FD sbrc r25,7
383 022e A095 com r26
384 0230 BA2F mov r27,r26
385 0232 8093 0000 sts JetiExData+185,r24
386 0236 9093 0000 sts (JetiExData+185)+1,r25
387 023a A093 0000 sts (JetiExData+185)+2,r26
388 023e B093 0000 sts (JetiExData+185)+3,r27
389 0242 8091 0000 lds r24,MaxBlTempertaure
390 0246 9927 clr r25
391 0248 AA27 clr r26
392 024a BB27 clr r27
393 024c 8093 0000 sts JetiExData+204,r24
394 0250 9093 0000 sts (JetiExData+204)+1,r25
395 0254 A093 0000 sts (JetiExData+204)+2,r26
396 0258 B093 0000 sts (JetiExData+204)+3,r27
397 025c 8091 0000 lds r24,EarthMagneticField
398 0260 9927 clr r25
399 0262 AA27 clr r26
400 0264 BB27 clr r27
401 0266 8093 0000 sts JetiExData+223,r24
402 026a 9093 0000 sts (JetiExData+223)+1,r25
403 026e A093 0000 sts (JetiExData+223)+2,r26
404 0272 B093 0000 sts (JetiExData+223)+3,r27
405 0276 8091 0000 lds r24,NC_ErrorCode
406 027a 9927 clr r25
407 027c AA27 clr r26
408 027e BB27 clr r27
409 0280 8093 0000 sts JetiExData+261,r24
410 0284 9093 0000 sts (JetiExData+261)+1,r25
411 0288 A093 0000 sts (JetiExData+261)+2,r26
412 028c B093 0000 sts (JetiExData+261)+3,r27
413 /* epilogue: frame size=0 */
414 0290 1F91 pop r17
415 0292 0F91 pop r16
416 0294 0895 ret
417 /* epilogue end (size=3) */
418 /* function JetiEX_Update size 196 (191) */
420 /* File "jeti_ex.c": code 334 = 0x014e ( 328), prologues 2, epilogues 4 */
DEFINED SYMBOLS
*ABS*:00000000 jeti_ex.c
C:\Temp/ccZOnWbv.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccZOnWbv.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccZOnWbv.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccZOnWbv.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccZOnWbv.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccZOnWbv.s:14 .data:00000000 JetiExData
C:\Temp/ccZOnWbv.s:99 .progmem.data:00000000 JETI_CODE
.bss:00000000 JetiVarioMeter.0
C:\Temp/ccZOnWbv.s:157 .text:00000000 BuildJeti_Vario
C:\Temp/ccZOnWbv.s:290 .text:0000010e JetiEX_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
VarioMeter
VarioCharacter
EE_Parameter
AltitudeSetpointTrimming
FC_StatusFlags
FromNC_AltitudeSpeed
GetHottestBl
UBat
Capacity
__udivmodhi4
HoehenWert
__divmodsi4
KompassValue
GPSInfo
MaxBlTempertaure
EarthMagneticField
NC_ErrorCode
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/jetimenu.c
0,0 → 1,259
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "jetimenu.h"
#include "libfc.h"
#include "printf_P.h"
#include "main.h"
#include "spi.h"
#include "capacity.h"
#include "hottmenu.h"
 
#define JETIBOX_KEY_RIGHT 0x1F
#define JETIBOX_KEY_UP 0x2F
#define JETIBOX_KEY_DOWN 0x4F
#define JETIBOX_KEY_LEFT 0x8F
#define JETIBOX_KEY_NONE 0x0F
#define JETIBOX_KEY_UNDEF 0x00
 
#define JetiBox_printfxy(x,y,format, args...) { LIBFC_JetiBox_SetPos(y * 16 + x); _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);}
#define JetiBox_printf(format, args...) { _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);}
 
// -----------------------------------------------------------
// the menu functions
// -----------------------------------------------------------
void Menu_Status(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10);
if(NaviDataOkay)
{
JetiBox_printfxy(6,0,"%3d%c %03dm%c",ErsatzKompassInGrad, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter);
}
else
{
JetiBox_printfxy(6,0,"Status");
}
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NC_ErrorCode)
{
static unsigned int timer;
static char toggle = 1;
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);};
if(toggle)
{
LIBFC_JetiBox_SetPos(0);
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);
}
else
{
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode);
if(MotorenEin) JetiBeep = 'O';
}
}
#else
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'O';};
#endif
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60);
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter);
}
#endif
}
 
 
void Menu_Temperature(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature);
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature);
if(RequiredMotors <= 4)
{
JetiBox_printfxy(0,1,"Temperatures ");
}
else
if(RequiredMotors <= 6)
{
JetiBox_printfxy(8,1,"\%cC ",0xdf);
}
 
#endif
}
 
void Menu_Battery(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity);
#endif
}
 
void Magnet_Values(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF);
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic);
#endif
}
 
 
void Menu_PosInfo(uint8_t key)
{
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
if(NaviDataOkay)
{
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats);
switch (GPSInfo.SatFix)
{
case SATFIX_3D:
JetiBox_printfxy(12,0," 3D");
break;
// case SATFIX_2D:
// case SATFIX_NONE:
default:
JetiBox_printfxy(12,0,"NoFx");
break;
}
if(GPSInfo.Flags & FLAG_DIFFSOLN)
{
JetiBox_printfxy(12,0,"DGPS");
}
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter);
}
else
{ //0123456789ABCDEF
JetiBox_printfxy(2,0,"No NaviCtrl!");
}
#endif
}
 
 
// -----------------------------------------------------------
// the menu topology
// -----------------------------------------------------------
typedef void (*pFctMenu) (uint8_t); // the menu item handler function pointer
 
typedef struct{
int8_t left;
int8_t right;
int8_t up;
int8_t down;
pFctMenu pHandler;
} MENU_ENTRY;
 
 
// the menu navigation structure
/* |
 
3 - 0 - 1 - 2 - 3 - 0
 
*/
 
const MENU_ENTRY JetiBox_Menu[] PROGMEM=
{ // l r u d pHandler
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
{4, 1, 0, 0, &Menu_Status }, // 0
{0, 2, 1, 1, &Menu_Temperature }, // 1
{1, 3, 2, 2, &Menu_Battery }, // 2
{2, 4, 3, 3, &Menu_PosInfo }, // 3
{3, 0, 4, 4, &Magnet_Values } // 4
#endif
};
 
// -----------------------------------------------------------
// Update display buffer
// -----------------------------------------------------------
unsigned char JetiBox_Update(unsigned char key)
{
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
static uint8_t item = 0, last_item = 0; // the menu item
static uint8_t updateDelay = 1;
 
// navigate within the menu by key action
last_item = item;
switch(key)
{
case JETIBOX_KEY_LEFT:
//if (item == 0) return (1); // switch back to jeti expander menu
// else
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item
break;
case JETIBOX_KEY_RIGHT:
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item
break;
case JETIBOX_KEY_UP:
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item
break;
case JETIBOX_KEY_DOWN:
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item
break;
default:
break;
}
// if the menu item has been changed, do not pass the key to the item handler
// to avoid jumping over to items
if(item != last_item) key = JETIBOX_KEY_UNDEF;
 
if (updateDelay++ & 0x01)
{
 
LIBFC_JetiBox_Clear();
//execute menu item handler
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key);
}
#endif
return (0);
}
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/jetimenu.h
0,0 → 1,6
#ifndef _JETIMENU_H
#define _JETIMENU_H
 
extern unsigned char JetiBox_Update(unsigned char key);
 
#endif //_JETIMENU_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/jetimenu.lst
0,0 → 1,82
1 .file "jetimenu.c"
2 .arch atmega1284p
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 .global JetiBox_Menu
11 .section .progmem.data,"a",@progbits
14 JetiBox_Menu:
15 .text
16 .global Menu_Status
18 Menu_Status:
19 /* prologue: frame size=0 */
20 /* prologue end (size=0) */
21 /* epilogue: frame size=0 */
22 0000 0895 ret
23 /* epilogue end (size=1) */
24 /* function Menu_Status size 1 (0) */
26 .global Menu_Temperature
28 Menu_Temperature:
29 /* prologue: frame size=0 */
30 /* prologue end (size=0) */
31 /* epilogue: frame size=0 */
32 0002 0895 ret
33 /* epilogue end (size=1) */
34 /* function Menu_Temperature size 1 (0) */
36 .global Menu_Battery
38 Menu_Battery:
39 /* prologue: frame size=0 */
40 /* prologue end (size=0) */
41 /* epilogue: frame size=0 */
42 0004 0895 ret
43 /* epilogue end (size=1) */
44 /* function Menu_Battery size 1 (0) */
46 .global Magnet_Values
48 Magnet_Values:
49 /* prologue: frame size=0 */
50 /* prologue end (size=0) */
51 /* epilogue: frame size=0 */
52 0006 0895 ret
53 /* epilogue end (size=1) */
54 /* function Magnet_Values size 1 (0) */
56 .global Menu_PosInfo
58 Menu_PosInfo:
59 /* prologue: frame size=0 */
60 /* prologue end (size=0) */
61 /* epilogue: frame size=0 */
62 0008 0895 ret
63 /* epilogue end (size=1) */
64 /* function Menu_PosInfo size 1 (0) */
66 .global JetiBox_Update
68 JetiBox_Update:
69 /* prologue: frame size=0 */
70 /* prologue end (size=0) */
71 000a 80E0 ldi r24,lo8(0)
72 000c 90E0 ldi r25,hi8(0)
73 /* epilogue: frame size=0 */
74 000e 0895 ret
75 /* epilogue end (size=1) */
76 /* function JetiBox_Update size 3 (2) */
78 /* File "jetimenu.c": code 8 = 0x0008 ( 2), prologues 0, epilogues 6 */
DEFINED SYMBOLS
*ABS*:00000000 jetimenu.c
C:\Temp/ccQmyUcX.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccQmyUcX.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccQmyUcX.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccQmyUcX.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccQmyUcX.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccQmyUcX.s:14 .progmem.data:00000000 JetiBox_Menu
C:\Temp/ccQmyUcX.s:18 .text:00000000 Menu_Status
C:\Temp/ccQmyUcX.s:28 .text:00000002 Menu_Temperature
C:\Temp/ccQmyUcX.s:38 .text:00000004 Menu_Battery
C:\Temp/ccQmyUcX.s:48 .text:00000006 Magnet_Values
C:\Temp/ccQmyUcX.s:58 .text:00000008 Menu_PosInfo
C:\Temp/ccQmyUcX.s:68 .text:0000000a JetiBox_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/led.c
0,0 → 1,127
#include <inttypes.h>
#include "main.h"
 
uint16_t LED1_Timing = 0;
uint16_t LED2_Timing = 0;
unsigned char J16Blinkcount = 0, J16Mask = 1;
unsigned char J17Blinkcount = 0, J17Mask = 1;
 
// initializes the LED control outputs J16, J17
void LED_Init(void)
{
// set PC2 & PC3 as output (control of J16 & J17)
DDRC |= (1<<DDC2)|(1<<DDC3);
J16_OFF;
J17_OFF;
J16Blinkcount = 0; J16Mask = 128;
J17Blinkcount = 0; J17Mask = 128;
}
 
// called in UpdateMotors() every 2ms
void LED_Update(void)
{
static char delay = 0;
static unsigned char J16Bitmask = 0;
static unsigned char J17Bitmask = 0;
static unsigned char J16Warn = 0, J17Warn = 0;
static unsigned char from_nc = 0;
if(!delay--) // 20ms Intervall
{
delay = 9;
if(FromNC_WP_EventChannel != -127) from_nc = (unsigned char) FromNC_WP_EventChannel + 127;
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C))
{
if(EE_Parameter.WARN_J16_Bitmask)
{
if(!J16Warn) J16Blinkcount = 4;
J16Warn = 1;
}
if(EE_Parameter.WARN_J17_Bitmask)
{
if(!J17Warn) J17Blinkcount = 4;
J17Warn = 1;
}
}
else
{
J16Warn = 0;
J17Warn = 0;
J16Bitmask = EE_Parameter.J16Bitmask;
J17Bitmask = EE_Parameter.J17Bitmask;
}
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3;
// Output 1
if(!J16Warn)
{
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;}
else
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1;}
else
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1;}
else
if(!J16Blinkcount--)
{
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1)
{
J16Blinkcount = from_nc / 2;
if(!from_nc) { if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 0; } // Ausschalten
else
{
if(J16Mask == 0)
{
from_nc = 0;
J16Mask = 128;
if(J16Bitmask & 128) J16_OFF; else J16_ON; // Ausschalten
}
else
{
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF;
J16Mask /= 2;
}
}
}
else
{
J16Blinkcount = Parameter_J16Timing / 2;
if(J16Mask == 1) { from_nc = 0; J16Mask = 128; } else J16Mask /= 2;
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF;
}
}
}
else // warning case
if(!J16Blinkcount--)
{
J16Blinkcount = 10-1;
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2;
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF;
}
// Output 2
 
if(!J17Warn)
{
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;}
else
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;}
else
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;}
else
if(!J17Blinkcount--)
{
J17Blinkcount = Parameter_J17Timing / 2;
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2;
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF;
}
}
else // warning case
if(!J17Blinkcount--)
{
J17Blinkcount = 10-1;
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2;
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF;
}
 
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16)
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17)
}
}
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/led.h
0,0 → 1,11
#include <avr/io.h>
 
#define J16_ON PORTC |= (1<<PORTC2)
#define J16_OFF PORTC &= ~(1<<PORTC2)
#define J16_TOGGLE PORTC ^= (1<<PORTC2)
#define J17_ON PORTC |= (1<<PORTC3)
#define J17_OFF PORTC &= ~(1<<PORTC3)
#define J17_TOGGLE PORTC ^= (1<<PORTC3)
 
extern void LED_Init(void);
extern void LED_Update(void);
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/led.lst
0,0 → 1,412
1 .file "led.c"
2 .arch atmega1284p
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 .global J17Mask
11 .data
14 J17Mask:
15 0000 01 .byte 1
16 .global J17Blinkcount
17 .global J17Blinkcount
18 .section .bss
21 J17Blinkcount:
22 0000 00 .skip 1,0
23 .global J16Mask
24 .data
27 J16Mask:
28 0001 01 .byte 1
29 .global J16Blinkcount
30 .global J16Blinkcount
31 .section .bss
34 J16Blinkcount:
35 0001 00 .skip 1,0
36 .global LED2_Timing
37 .global LED2_Timing
40 LED2_Timing:
41 0002 0000 .skip 2,0
42 .global LED1_Timing
43 .global LED1_Timing
46 LED1_Timing:
47 0004 0000 .skip 2,0
48 .text
49 .global LED_Init
51 LED_Init:
52 /* prologue: frame size=0 */
53 /* prologue end (size=0) */
54 0000 87B1 in r24,39-0x20
55 0002 8C60 ori r24,lo8(12)
56 0004 87B9 out 39-0x20,r24
57 0006 4298 cbi 40-0x20,2
58 0008 4398 cbi 40-0x20,3
59 000a 1092 0000 sts J16Blinkcount,__zero_reg__
60 000e 80E8 ldi r24,lo8(-128)
61 0010 8093 0000 sts J16Mask,r24
62 0014 1092 0000 sts J17Blinkcount,__zero_reg__
63 0018 8093 0000 sts J17Mask,r24
64 /* epilogue: frame size=0 */
65 001c 0895 ret
66 /* epilogue end (size=1) */
67 /* function LED_Init size 15 (14) */
69 .lcomm delay.0,1
70 .lcomm J16Bitmask.1,1
71 .lcomm J17Bitmask.2,1
72 .lcomm J16Warn.3,1
73 .lcomm J17Warn.4,1
74 .lcomm from_nc.5,1
75 .global LED_Update
77 LED_Update:
78 /* prologue: frame size=0 */
79 /* prologue end (size=0) */
80 001e 8091 0000 lds r24,delay.0
81 0022 8150 subi r24,lo8(-(-1))
82 0024 8093 0000 sts delay.0,r24
83 0028 8F3F cpi r24,lo8(-1)
84 002a 01F0 breq .+2
85 002c 00C0 rjmp .L2
86 002e 89E0 ldi r24,lo8(9)
87 0030 8093 0000 sts delay.0,r24
88 0034 8091 0000 lds r24,PPM_in+50
89 0038 9091 0000 lds r25,(PPM_in+50)+1
90 003c 8158 subi r24,lo8(-127)
91 003e 9F4F sbci r25,hi8(-127)
92 0040 01F0 breq .L4
93 0042 8091 0000 lds r24,PPM_in+50
94 0046 9091 0000 lds r25,(PPM_in+50)+1
95 004a 8158 subi r24,lo8(-(127))
96 004c 8093 0000 sts from_nc.5,r24
97 .L4:
98 0050 8091 0000 lds r24,FC_StatusFlags
99 0054 9927 clr r25
100 0056 8073 andi r24,lo8(48)
101 0058 9070 andi r25,hi8(48)
102 005a 892B or r24,r25
103 005c 01F4 brne .L6
104 005e 8091 0000 lds r24,VersionInfo+6
105 0062 80FF sbrs r24,0
106 0064 00C0 rjmp .L5
107 .L6:
108 0066 8091 0000 lds r24,EE_Parameter+78
109 006a 8823 tst r24
110 006c 01F0 breq .L7
111 006e 8091 0000 lds r24,J16Warn.3
112 0072 8823 tst r24
113 0074 01F4 brne .L8
114 0076 84E0 ldi r24,lo8(4)
115 0078 8093 0000 sts J16Blinkcount,r24
116 .L8:
117 007c 81E0 ldi r24,lo8(1)
118 007e 8093 0000 sts J16Warn.3,r24
119 .L7:
120 0082 8091 0000 lds r24,EE_Parameter+79
121 0086 8823 tst r24
122 0088 01F0 breq .L11
123 008a 8091 0000 lds r24,J17Warn.4
124 008e 8823 tst r24
125 0090 01F4 brne .L10
126 0092 84E0 ldi r24,lo8(4)
127 0094 8093 0000 sts J17Blinkcount,r24
128 .L10:
129 0098 81E0 ldi r24,lo8(1)
130 009a 8093 0000 sts J17Warn.4,r24
131 009e 00C0 rjmp .L11
132 .L5:
133 00a0 1092 0000 sts J16Warn.3,__zero_reg__
134 00a4 1092 0000 sts J17Warn.4,__zero_reg__
135 00a8 8091 0000 lds r24,EE_Parameter+74
136 00ac 8093 0000 sts J16Bitmask.1,r24
137 00b0 8091 0000 lds r24,EE_Parameter+76
138 00b4 8093 0000 sts J17Bitmask.2,r24
139 .L11:
140 00b8 8091 0000 lds r24,J16Warn.3
141 00bc 8823 tst r24
142 00be 01F0 breq .+2
143 00c0 00C0 rjmp .L12
144 00c2 8091 0000 lds r24,EE_Parameter+108
145 00c6 282F mov r18,r24
146 00c8 3327 clr r19
147 00ca 24FF sbrs r18,4
148 00cc 00C0 rjmp .L13
149 00ce 8091 0000 lds r24,MotorenEin
150 00d2 8823 tst r24
151 00d4 01F4 brne .L13
152 00d6 25FD sbrc r18,5
153 00d8 00C0 rjmp .L78
154 00da 00C0 rjmp .L46
155 .L13:
156 00dc 9091 0000 lds r25,EE_Parameter+75
157 00e0 983F cpi r25,lo8(-8)
158 00e2 00F0 brlo .L17
159 00e4 8091 0000 lds r24,Parameter_J16Timing
160 00e8 8D3D cpi r24,lo8(-35)
161 00ea 00F0 brlo .L17
162 00ec 8091 0000 lds r24,J16Bitmask.1
163 00f0 8823 tst r24
164 00f2 04F0 brlt .L22
165 00f4 00C0 rjmp .L87
166 .L17:
167 00f6 983F cpi r25,lo8(-8)
168 00f8 00F0 brlo .L21
169 00fa 8091 0000 lds r24,Parameter_J16Timing
170 00fe 8530 cpi r24,lo8(5)
171 0100 01F4 brne .L21
172 0102 8091 0000 lds r24,J16Bitmask.1
173 0106 87FF sbrs r24,7
174 0108 00C0 rjmp .L22
175 .L87:
176 010a 4298 cbi 40-0x20,2
177 010c 00C0 rjmp .L23
178 .L22:
179 010e 429A sbi 40-0x20,2
180 .L23:
181 0110 81E0 ldi r24,lo8(1)
182 0112 00C0 rjmp .L79
183 .L21:
184 0114 8091 0000 lds r24,J16Blinkcount
185 0118 8150 subi r24,lo8(-(-1))
186 011a 8093 0000 sts J16Blinkcount,r24
187 011e 8F3F cpi r24,lo8(-1)
188 0120 01F0 breq .+2
189 0122 00C0 rjmp .L42
190 0124 8091 0000 lds r24,EE_Parameter+111
191 0128 85FF sbrs r24,5
192 012a 00C0 rjmp .L26
193 012c 9091 0000 lds r25,from_nc.5
194 0130 892F mov r24,r25
195 0132 8695 lsr r24
196 0134 8093 0000 sts J16Blinkcount,r24
197 0138 9923 tst r25
198 013a 01F4 brne .L27
199 013c 8091 0000 lds r24,J16Bitmask.1
200 0140 87FF sbrs r24,7
201 0142 00C0 rjmp .L28
202 0144 4298 cbi 40-0x20,2
203 0146 00C0 rjmp .L29
204 .L28:
205 0148 429A sbi 40-0x20,2
206 .L29:
207 014a 1092 0000 sts J16Mask,__zero_reg__
208 014e 00C0 rjmp .L42
209 .L27:
210 0150 8091 0000 lds r24,J16Mask
211 0154 9091 0000 lds r25,J16Bitmask.1
212 0158 8823 tst r24
213 015a 01F4 brne .L31
214 015c 8093 0000 sts from_nc.5,r24
215 0160 80E8 ldi r24,lo8(-128)
216 0162 8093 0000 sts J16Mask,r24
217 0166 9923 tst r25
218 0168 04F0 brlt .L46
219 016a 00C0 rjmp .L78
220 .L31:
221 016c 9823 and r25,r24
222 016e 01F0 breq .L35
223 0170 429A sbi 40-0x20,2
224 0172 00C0 rjmp .L36
225 .L35:
226 0174 4298 cbi 40-0x20,2
227 .L36:
228 0176 8695 lsr r24
229 .L79:
230 0178 8093 0000 sts J16Mask,r24
231 017c 00C0 rjmp .L42
232 .L26:
233 017e 8091 0000 lds r24,Parameter_J16Timing
234 0182 8695 lsr r24
235 0184 8093 0000 sts J16Blinkcount,r24
236 0188 8091 0000 lds r24,J16Mask
237 018c 8130 cpi r24,lo8(1)
238 018e 01F4 brne .L38
239 0190 1092 0000 sts from_nc.5,__zero_reg__
240 0194 80E8 ldi r24,lo8(-128)
241 0196 00C0 rjmp .L76
242 .L38:
243 0198 8695 lsr r24
244 .L76:
245 019a 8093 0000 sts J16Mask,r24
246 019e 8091 0000 lds r24,J16Mask
247 01a2 9091 0000 lds r25,J16Bitmask.1
248 01a6 00C0 rjmp .L84
249 .L12:
250 01a8 8091 0000 lds r24,J16Blinkcount
251 01ac 8150 subi r24,lo8(-(-1))
252 01ae 8093 0000 sts J16Blinkcount,r24
253 01b2 8F3F cpi r24,lo8(-1)
254 01b4 01F4 brne .L42
255 01b6 89E0 ldi r24,lo8(9)
256 01b8 8093 0000 sts J16Blinkcount,r24
257 01bc 8091 0000 lds r24,J16Mask
258 01c0 8130 cpi r24,lo8(1)
259 01c2 01F4 brne .L44
260 01c4 80E8 ldi r24,lo8(-128)
261 01c6 00C0 rjmp .L77
262 .L44:
263 01c8 8695 lsr r24
264 .L77:
265 01ca 8093 0000 sts J16Mask,r24
266 01ce 8091 0000 lds r24,J16Mask
267 01d2 9091 0000 lds r25,EE_Parameter+78
268 .L84:
269 01d6 8923 and r24,r25
270 01d8 01F0 breq .L46
271 .L78:
272 01da 429A sbi 40-0x20,2
273 01dc 00C0 rjmp .L42
274 .L46:
275 01de 4298 cbi 40-0x20,2
276 .L42:
277 01e0 8091 0000 lds r24,J17Warn.4
278 01e4 8823 tst r24
279 01e6 01F0 breq .+2
280 01e8 00C0 rjmp .L48
281 01ea 9091 0000 lds r25,EE_Parameter+108
282 01ee 97FF sbrs r25,7
283 01f0 00C0 rjmp .L49
284 01f2 8091 0000 lds r24,MotorenEin
285 01f6 8823 tst r24
286 01f8 01F4 brne .L49
287 01fa 96FD sbrc r25,6
288 01fc 00C0 rjmp .L82
289 01fe 00C0 rjmp .L70
290 .L49:
291 0200 9091 0000 lds r25,EE_Parameter+77
292 0204 983F cpi r25,lo8(-8)
293 0206 00F0 brlo .L53
294 0208 8091 0000 lds r24,Parameter_J17Timing
295 020c 8D3D cpi r24,lo8(-35)
296 020e 00F0 brlo .L53
297 0210 8091 0000 lds r24,J17Bitmask.2
298 0214 8823 tst r24
299 0216 04F0 brlt .L58
300 0218 00C0 rjmp .L85
301 .L53:
302 021a 983F cpi r25,lo8(-8)
303 021c 00F0 brlo .L57
304 021e 8091 0000 lds r24,Parameter_J17Timing
305 0222 8530 cpi r24,lo8(5)
306 0224 01F4 brne .L57
307 0226 8091 0000 lds r24,J17Bitmask.2
308 022a 87FF sbrs r24,7
309 022c 00C0 rjmp .L58
310 .L85:
311 022e 4398 cbi 40-0x20,3
312 0230 00C0 rjmp .L59
313 .L58:
314 0232 439A sbi 40-0x20,3
315 .L59:
316 0234 81E0 ldi r24,lo8(1)
317 0236 8093 0000 sts J17Mask,r24
318 023a 00C0 rjmp .L66
319 .L57:
320 023c 8091 0000 lds r24,J17Blinkcount
321 0240 8150 subi r24,lo8(-(-1))
322 0242 8093 0000 sts J17Blinkcount,r24
323 0246 8F3F cpi r24,lo8(-1)
324 0248 01F4 brne .L66
325 024a 8091 0000 lds r24,Parameter_J17Timing
326 024e 8695 lsr r24
327 0250 8093 0000 sts J17Blinkcount,r24
328 0254 8091 0000 lds r24,J17Mask
329 0258 8130 cpi r24,lo8(1)
330 025a 01F4 brne .L62
331 025c 80E8 ldi r24,lo8(-128)
332 025e 00C0 rjmp .L80
333 .L62:
334 0260 8695 lsr r24
335 .L80:
336 0262 8093 0000 sts J17Mask,r24
337 0266 8091 0000 lds r24,J17Mask
338 026a 9091 0000 lds r25,J17Bitmask.2
339 026e 00C0 rjmp .L86
340 .L48:
341 0270 8091 0000 lds r24,J17Blinkcount
342 0274 8150 subi r24,lo8(-(-1))
343 0276 8093 0000 sts J17Blinkcount,r24
344 027a 8F3F cpi r24,lo8(-1)
345 027c 01F4 brne .L66
346 027e 89E0 ldi r24,lo8(9)
347 0280 8093 0000 sts J17Blinkcount,r24
348 0284 8091 0000 lds r24,J17Mask
349 0288 8130 cpi r24,lo8(1)
350 028a 01F4 brne .L68
351 028c 80E8 ldi r24,lo8(-128)
352 028e 00C0 rjmp .L81
353 .L68:
354 0290 8695 lsr r24
355 .L81:
356 0292 8093 0000 sts J17Mask,r24
357 0296 8091 0000 lds r24,J17Mask
358 029a 9091 0000 lds r25,EE_Parameter+79
359 .L86:
360 029e 8923 and r24,r25
361 02a0 01F0 breq .L70
362 .L82:
363 02a2 439A sbi 40-0x20,3
364 02a4 00C0 rjmp .L66
365 .L70:
366 02a6 4398 cbi 40-0x20,3
367 .L66:
368 02a8 429B sbis 40-0x20,2
369 02aa 00C0 rjmp .L72
370 02ac 8091 0000 lds r24,FC_StatusFlags2
371 02b0 8860 ori r24,lo8(8)
372 02b2 00C0 rjmp .L83
373 .L72:
374 02b4 8091 0000 lds r24,FC_StatusFlags2
375 02b8 877F andi r24,lo8(-9)
376 .L83:
377 02ba 8093 0000 sts FC_StatusFlags2,r24
378 02be 439B sbis 40-0x20,3
379 02c0 00C0 rjmp .L74
380 02c2 8091 0000 lds r24,FC_StatusFlags2
381 02c6 8061 ori r24,lo8(16)
382 02c8 8093 0000 sts FC_StatusFlags2,r24
383 02cc 0895 ret
384 .L74:
385 02ce 8091 0000 lds r24,FC_StatusFlags2
386 02d2 8F7E andi r24,lo8(-17)
387 02d4 8093 0000 sts FC_StatusFlags2,r24
388 .L2:
389 02d8 0895 ret
390 /* epilogue: frame size=0 */
391 /* epilogue: noreturn */
392 /* epilogue end (size=0) */
393 /* function LED_Update size 357 (357) */
395 /* File "led.c": code 372 = 0x0174 ( 371), prologues 0, epilogues 1 */
DEFINED SYMBOLS
*ABS*:00000000 led.c
C:\Temp/cc2SJusC.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc2SJusC.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc2SJusC.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc2SJusC.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc2SJusC.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc2SJusC.s:14 .data:00000000 J17Mask
C:\Temp/cc2SJusC.s:21 .bss:00000000 J17Blinkcount
C:\Temp/cc2SJusC.s:27 .data:00000001 J16Mask
C:\Temp/cc2SJusC.s:34 .bss:00000001 J16Blinkcount
C:\Temp/cc2SJusC.s:40 .bss:00000002 LED2_Timing
C:\Temp/cc2SJusC.s:46 .bss:00000004 LED1_Timing
C:\Temp/cc2SJusC.s:51 .text:00000000 LED_Init
.bss:00000006 delay.0
C:\Temp/cc2SJusC.s:69 .bss:00000007 J16Bitmask.1
C:\Temp/cc2SJusC.s:70 .bss:00000008 J17Bitmask.2
C:\Temp/cc2SJusC.s:71 .bss:00000009 J16Warn.3
C:\Temp/cc2SJusC.s:72 .bss:0000000a J17Warn.4
C:\Temp/cc2SJusC.s:73 .bss:0000000b from_nc.5
C:\Temp/cc2SJusC.s:77 .text:0000001e LED_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
PPM_in
FC_StatusFlags
VersionInfo
EE_Parameter
MotorenEin
Parameter_J16Timing
Parameter_J17Timing
FC_StatusFlags2
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/libfc.h
0,0 → 1,21
#ifndef _LIBFC_H
#define _LIBFC_H
 
 
#define CPU_UNKNOWN 0
#define CPU_ATMEGA644 1
#define CPU_ATMEGA644P 2
#define CPU_ATMEGA1284 3
#define CPU_ATMEGA1284P 4
 
extern void LIBFC_Init(void);
extern void LIBFC_Polling(void);
extern void LIBFC_ReceiverInit(unsigned char rtype);
 
extern void LIBFC_JetiBox_Putchar(char c);
extern void LIBFC_JetiBox_SetPos(unsigned char index);
extern void LIBFC_JetiBox_Clear(void);
extern void LIBFC_CheckSettings(void);
extern unsigned char LIBFC_GetCPUType(void);
 
#endif //_LIBFC_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/main.c
0,0 → 1,435
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
unsigned char DisableRcOffBeeping = 0;
unsigned char PlatinenVersion = 10;
unsigned char BattLowVoltageWarning = 94;
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0;
unsigned int FlugSekunden = 0;
pVoidFnct_pVoidFnctChar_const_fmt _printf_P;
unsigned char FoundMotors = 0;
unsigned char JetiBeep = 0; // to allow any Morse-Beeping of the Jeti-Box
 
void PrintLine(void)
{
printf("\n\r===================================");
}
 
 
void CalMk3Mag(void)
{
static unsigned char stick = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0;
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick)
{
stick = 1;
WinkelOut.CalcState++;
if(WinkelOut.CalcState > 4)
{
// WinkelOut.CalcState = 0; // in Uart.c
beeptime = 1000;
}
else Piep(WinkelOut.CalcState,150);
}
DebugOut.Analog[19] = WinkelOut.CalcState;
}
 
 
void LipoDetection(unsigned char print)
{
#define MAX_CELL_VOLTAGE 43 // max cell volatage for LiPO
unsigned int timer, cells;
if(print) printf("\n\rBatt:");
if(EE_Parameter.UnterspannungsWarnung < 50) // automatische Zellenerkennung
{
timer = SetDelay(500);
if(print) while (!CheckDelay(timer));
// up to 6s LiPo, less than 2s is technical impossible
for(cells = 2; cells < 7; cells++)
{
if(UBat < cells * MAX_CELL_VOLTAGE) break;
}
 
BattLowVoltageWarning = cells * EE_Parameter.UnterspannungsWarnung;
if(print)
{
Piep(cells, 200);
printf(" %d Cells ", cells);
}
}
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung;
if(print) printf(" Low warning: %d.%d",BattLowVoltageWarning/10,BattLowVoltageWarning%10);
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer,i,timer2 = 0, timerPolling;
 
DDRB = 0x00;
PORTB = 0x00;
for(timer = 0; timer < 1000; timer++); // verzögern
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(PINB & 0x02) PlatinenVersion = 21;
else
{
PlatinenVersion = 22;
// ACC_AMPLIFY = 7; // der ACC-Sensor hat etwa 16% weniger Ausschlag
}
 
#else
if(PINB & 0x01)
{
if(PINB & 0x02) PlatinenVersion = 13;
else PlatinenVersion = 11;
}
else
{
if(PINB & 0x02) PlatinenVersion = 20;
else PlatinenVersion = 10;
}
#endif
DDRC = 0x81; // SCL
DDRC |=0x40; // HEF4017 Reset
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
PORTD = 0x47; // LED
HEF4017Reset_ON;
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2500;
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0;
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC
ROT_OFF;
GRN_ON;
 
Timer_Init();
TIMER2_Init();
UART_Init();
rc_sum_init();
ADC_Init();
I2C_Init(1);
SPI_MasterInit();
Capacity_Init();
LIBFC_Init();
GRN_ON;
sei();
ParamSet_Init();
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Check connected BL-Ctrls
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Check connected BL-Ctrls
BLFlags |= BLFLAG_READ_VERSION;
motor_read = 0; // read the first I2C-Data
SendMotorData();
timer = SetDelay(500);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
 
printf("\n\rFound BL-Ctrl: ");
timer = SetDelay(4000);
for(i=0; i < MAX_MOTORS; i++)
{
SendMotorData();
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up
{
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) )
{
SendMotorData();
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}
}
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK)
{
printf("%d",i+1);
FoundMotors++;
// if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new) ");
}
}
for(i=0; i < MAX_MOTORS; i++)
{
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0)
{
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1);
ServoActive = 2; // just in case the FC would be used as camera-stabilizer
}
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter
}
PrintLine();// ("\n\r===================================");
 
 
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER;
 
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rCalibrating pressure sensor..");
timer = SetDelay(1000);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
 
SetNeutral(0);
 
ROT_OFF;
 
beeptime = 2000;
ExternControl.Digital[0] = 0x55;
 
 
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1);
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1);
 
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF))
{
FlugMinuten = 0;
FlugMinutenGesamt = 0;
}
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt);
 
LcdClear();
I2CTimeout = 5000;
WinkelOut.Orientation = 1;
LipoDetection(1);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
PrintLine();// ("\n\r===================================");
//SpektrumBinding();
timer = SetDelay(2000);
timerPolling = SetDelay(250);
 
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active
DebugOut.Status[0] = 0x01 | 0x02;
JetiBeep = 0;
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1;
while (1)
{
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off
 
//GRN_ON;
if(UpdateMotor && AdReady) // ReglerIntervall
{
//GRN_OFF;
UpdateMotor=0;
if(WinkelOut.CalcState) CalMk3Mag();
else MotorRegler();
SendMotorData();
ROT_OFF;
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ }
else
{
TIMSK1 |= _BV(ICIE1); // enable PPM-Input
PPM_in[0] = 0; // set RSSI to zero on data timeout
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160;
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!--I2CTimeout || MissingMotor)
{
if(!I2CTimeout)
{
I2C_Reset();
I2CTimeout = 5;
DebugOut.Analog[28]++; // I2C-Error
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C;
DebugOut.Status[1] |= 0x02; // BL-Error-Status
}
if((BeepMuster == 0xffff) && MotorenEin)
{
beeptime = 25000;
BeepMuster = 0x0080;
}
}
else
{
ROT_OFF;
}
LIBFC_Polling();
 
if(!UpdateMotor)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NewSBusData) ProcessSBus();
else
#endif
{
if(CalculateServoSignals) CalculateServo();
DatenUebertragung();
BearbeiteRxDaten();
if(CheckDelay(timer))
{
static unsigned char second;
timer += 20; // 20 ms interval
CalcNickServoValue();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu();
else
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario();
#endif
if(MissingMotor)
{
VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING;
DebugOut.Status[1] |= 0x02; // BL-Error-Status
}
else
{
if(!beeptime)
{
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status
}
}
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;};
if(PcZugriff) PcZugriff--;
else
{
ExternControl.Config = 0;
ExternStickNick = 0;
ExternStickRoll = 0;
ExternStickGier = 0;
if(!SenderOkay)
{
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2)
{
beeptime = 15000;
BeepMuster = 0x0c00;
if(DisableRcOffBeeping) DisableRcOffBeeping = 2;
}
}
}
if(NaviDataOkay > 200)
{
NaviDataOkay--;
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX;
}
else
{
if(NC_Version.Compatible)
{
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX;
NC_ErrorCode = 9; // "ERR: no NC communication"
if(BeepMuster == 0xffff && MotorenEin)
{
beeptime = 15000;
BeepMuster = 0xA800;
}
}
GPS_Nick = 0;
GPS_Roll = 0;
GPS_Aid_StickMultiplikator = 0;
GPSInfo.Flags = 0;
FromNaviCtrl.AccErrorN = 0;
FromNaviCtrl.AccErrorR = 0;
FromNaviCtrl.CompassValue = -1;
NaviDataOkay = 0;
}
if(UBat < BattLowVoltageWarning)
{
FC_StatusFlags |= FC_STATUS_LOWBAT;
if(BeepMuster == 0xffff)
{
beeptime = 6000;
BeepMuster = 0x0300;
}
}
else if(!beeptime) FC_StatusFlags &= ~FC_STATUS_LOWBAT;
 
SPI_StartTransmitPacket();
SendSPI = 4;
// +++++++++++++++++++++++++++++++++
// Sekundentakt
if(++second == 49)
{
second = 0;
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++;
else
{
timer2 = 1450; // 0,5 Minuten aufrunden
if(StartLuftdruck < Luftdruck) StartLuftdruck++;
else
if(StartLuftdruck > Luftdruck) StartLuftdruck--;
}
}
// +++++++++++++++++++++++++++++++++
if(++timer2 == 2930) // eine Minute
{
timer2 = 0;
FlugMinuten++;
FlugMinutenGesamt++;
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256);
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256);
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256);
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256);
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
}
}
LED_Update();
Capacity_Update();
} //else DebugOut.Analog[26]++;
}
}
if(!SendSPI) { SPI_TransmitByte(); }
}
return (1);
}
//DebugOut.Analog[16]
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/main.h
0,0 → 1,82
#ifndef _MAIN_H
#define _MAIN_H
 
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text);
//#define ACT_S3D_SUMMENSIGNAL
//#define UserParameter8_FAILSAFE
#define RECEIVER_SPEKTRUM_DX7EXP
//#define RECEIVER_SPEKTRUM_DX8EXP
 
// neue Hardware
#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;}
#define ROT_ON {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB |= 0x01; else PORTB &=~0x01;}
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF {if((PlatinenVersion < 12) || PlatinenVersion == 22) PORTB &=~0x02; else PORTB |= 0x02;}
#define GRN_ON {if((PlatinenVersion < 12) || PlatinenVersion == 22) PORTB |= 0x02; else PORTB &=~0x02;}
#define GRN_FLASH PORTB ^= 0x02
 
#define SYSCLK F_CPU
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#define J3High PORTD |= 0x20
#define J3Low PORTD &= ~0x20
#define J4High PORTD |= 0x10
#define J4Low PORTD &= ~0x10
#define J5High PORTD |= 0x08
#define J5Low PORTD &= ~0x08
 
extern volatile unsigned char SenderOkay;
extern unsigned char BattLowVoltageWarning;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern unsigned char PlatinenVersion;
extern unsigned char FoundMotors,DisableRcOffBeeping;
extern unsigned char JetiBeep;
void LipoDetection(unsigned char print);
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden;
extern void PrintLine(void); // "================================="
 
#include <avr/pgmspace.h>
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
#endif
 
#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 "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 "spi.h"
#include "led.h"
#include "spektrum.h"
#include "capacity.h"
#include "eeprom.h"
#include "libfc.h"
#include "hottmenu.h"
#include "debug.h"
#include "sbus.h"
#include "jeti_ex.h"
 
#endif //_MAIN_H
 
 
 
 
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/main.lst
0,0 → 1,1331
1 .file "main.c"
2 .arch atmega1284p
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 .global JetiBeep
11 .global JetiBeep
12 .section .bss
15 JetiBeep:
16 0000 00 .skip 1,0
17 .global FoundMotors
18 .global FoundMotors
21 FoundMotors:
22 0001 00 .skip 1,0
23 .global FlugSekunden
24 .global FlugSekunden
27 FlugSekunden:
28 0002 0000 .skip 2,0
29 .global FlugMinutenGesamt
30 .global FlugMinutenGesamt
33 FlugMinutenGesamt:
34 0004 0000 .skip 2,0
35 .global FlugMinuten
36 .global FlugMinuten
39 FlugMinuten:
40 0006 0000 .skip 2,0
41 .global BattLowVoltageWarning
42 .data
45 BattLowVoltageWarning:
46 0000 5E .byte 94
47 .global PlatinenVersion
50 PlatinenVersion:
51 0001 0A .byte 10
52 .global DisableRcOffBeeping
53 .global DisableRcOffBeeping
54 .section .bss
57 DisableRcOffBeeping:
58 0008 00 .skip 1,0
59 .section .progmem.data,"a",@progbits
62 __c.11:
63 0000 0A0D 3D3D .string "\n\r==================================="
63 3D3D 3D3D
63 3D3D 3D3D
63 3D3D 3D3D
63 3D3D 3D3D
64 .text
65 .global PrintLine
67 PrintLine:
68 /* prologue: frame size=0 */
69 /* prologue end (size=0) */
70 0000 80E0 ldi r24,lo8(__c.11)
71 0002 90E0 ldi r25,hi8(__c.11)
72 0004 9F93 push r25
73 0006 8F93 push r24
74 0008 80E0 ldi r24,lo8(pm(uart_putchar))
75 000a 90E0 ldi r25,hi8(pm(uart_putchar))
76 000c 9F93 push r25
77 000e 8F93 push r24
78 0010 E091 0000 lds r30,_printf_P
79 0014 F091 0000 lds r31,(_printf_P)+1
80 0018 0995 icall
81 001a 0F90 pop __tmp_reg__
82 001c 0F90 pop __tmp_reg__
83 001e 0F90 pop __tmp_reg__
84 0020 0F90 pop __tmp_reg__
85 /* epilogue: frame size=0 */
86 0022 0895 ret
87 /* epilogue end (size=1) */
88 /* function PrintLine size 18 (17) */
90 .data
93 stick.10:
94 0002 01 .byte 1
95 .text
96 .global CalMk3Mag
98 CalMk3Mag:
99 /* prologue: frame size=0 */
100 /* prologue end (size=0) */
101 0024 8091 0000 lds r24,EE_Parameter+1
102 0028 E82F mov r30,r24
103 002a FF27 clr r31
104 002c EE0F add r30,r30
105 002e FF1F adc r31,r31
106 0030 E050 subi r30,lo8(-(PPM_in))
107 0032 F040 sbci r31,hi8(-(PPM_in))
108 0034 8081 ld r24,Z
109 0036 9181 ldd r25,Z+1
110 0038 8D5E subi r24,lo8(-19)
111 003a 9F4F sbci r25,hi8(-19)
112 003c 04F0 brlt .L3
113 003e 1092 0000 sts stick.10,__zero_reg__
114 .L3:
115 0042 8081 ld r24,Z
116 0044 9181 ldd r25,Z+1
117 0046 8A5B subi r24,lo8(-70)
118 0048 9F4F sbci r25,hi8(-70)
119 004a 04F4 brge .L4
120 004c 8091 0000 lds r24,stick.10
121 0050 8823 tst r24
122 0052 01F4 brne .L4
123 0054 81E0 ldi r24,lo8(1)
124 0056 8093 0000 sts stick.10,r24
125 005a 8091 0000 lds r24,WinkelOut+6
126 005e 8F5F subi r24,lo8(-(1))
127 0060 8093 0000 sts WinkelOut+6,r24
128 0064 8530 cpi r24,lo8(5)
129 0066 00F0 brlo .L5
130 0068 88EE ldi r24,lo8(1000)
131 006a 93E0 ldi r25,hi8(1000)
132 006c 9093 0000 sts (beeptime)+1,r25
133 0070 8093 0000 sts beeptime,r24
134 0074 00C0 rjmp .L4
135 .L5:
136 0076 66E9 ldi r22,lo8(150)
137 0078 70E0 ldi r23,hi8(150)
138 007a 0E94 0000 call Piep
139 .L4:
140 007e 8091 0000 lds r24,WinkelOut+6
141 0082 9927 clr r25
142 0084 9093 0000 sts (DebugOut+40)+1,r25
143 0088 8093 0000 sts DebugOut+40,r24
144 /* epilogue: frame size=0 */
145 008c 0895 ret
146 /* epilogue end (size=1) */
147 /* function CalMk3Mag size 55 (54) */
149 .section .progmem.data
152 __c.7:
153 0026 0A0D 4261 .string "\n\rBatt:"
153 7474 3A00
156 __c.8:
157 002e 2025 6420 .string " %d Cells "
157 4365 6C6C
157 7320 00
160 __c.9:
161 0039 204C 6F77 .string " Low warning: %d.%d"
161 2077 6172
161 6E69 6E67
161 3A20 2564
161 2E25 6400
162 .text
163 .global LipoDetection
165 LipoDetection:
166 /* prologue: frame size=0 */
167 008e 1F93 push r17
168 0090 CF93 push r28
169 0092 DF93 push r29
170 /* prologue end (size=3) */
171 0094 182F mov r17,r24
172 0096 8823 tst r24
173 0098 01F0 breq .L8
174 009a 80E0 ldi r24,lo8(__c.7)
175 009c 90E0 ldi r25,hi8(__c.7)
176 009e 9F93 push r25
177 00a0 8F93 push r24
178 00a2 80E0 ldi r24,lo8(pm(uart_putchar))
179 00a4 90E0 ldi r25,hi8(pm(uart_putchar))
180 00a6 9F93 push r25
181 00a8 8F93 push r24
182 00aa E091 0000 lds r30,_printf_P
183 00ae F091 0000 lds r31,(_printf_P)+1
184 00b2 0995 icall
185 00b4 0F90 pop __tmp_reg__
186 00b6 0F90 pop __tmp_reg__
187 00b8 0F90 pop __tmp_reg__
188 00ba 0F90 pop __tmp_reg__
189 .L8:
190 00bc 8091 0000 lds r24,EE_Parameter+36
191 00c0 8233 cpi r24,lo8(50)
192 00c2 00F0 brlo .+2
193 00c4 00C0 rjmp .L9
194 00c6 84EF ldi r24,lo8(500)
195 00c8 91E0 ldi r25,hi8(500)
196 00ca 0E94 0000 call SetDelay
197 00ce EC01 movw r28,r24
198 00d0 1123 tst r17
199 00d2 01F0 breq .L10
200 .L11:
201 00d4 CE01 movw r24,r28
202 00d6 0E94 0000 call CheckDelay
203 00da 8823 tst r24
204 00dc 01F0 breq .L11
205 .L10:
206 00de C2E0 ldi r28,lo8(2)
207 00e0 D0E0 ldi r29,hi8(2)
208 00e2 26E5 ldi r18,lo8(86)
209 00e4 30E0 ldi r19,hi8(86)
210 .L18:
211 00e6 8091 0000 lds r24,UBat
212 00ea 9091 0000 lds r25,(UBat)+1
213 00ee 8217 cp r24,r18
214 00f0 9307 cpc r25,r19
215 00f2 00F0 brlo .L15
216 00f4 2196 adiw r28,1
217 00f6 255D subi r18,lo8(-(43))
218 00f8 3F4F sbci r19,hi8(-(43))
219 00fa C730 cpi r28,7
220 00fc D105 cpc r29,__zero_reg__
221 00fe 00F0 brlo .L18
222 .L15:
223 0100 8091 0000 lds r24,EE_Parameter+36
224 0104 9927 clr r25
225 0106 C89F mul r28,r24
226 0108 9001 movw r18,r0
227 010a C99F mul r28,r25
228 010c 300D add r19,r0
229 010e D89F mul r29,r24
230 0110 300D add r19,r0
231 0112 1124 clr r1
232 0114 2093 0000 sts BattLowVoltageWarning,r18
233 0118 1123 tst r17
234 011a 01F0 breq .L20
235 011c 68EC ldi r22,lo8(200)
236 011e 70E0 ldi r23,hi8(200)
237 0120 8C2F mov r24,r28
238 0122 0E94 0000 call Piep
239 0126 DF93 push r29
240 0128 CF93 push r28
241 012a 80E0 ldi r24,lo8(__c.8)
242 012c 90E0 ldi r25,hi8(__c.8)
243 012e 9F93 push r25
244 0130 8F93 push r24
245 0132 80E0 ldi r24,lo8(pm(uart_putchar))
246 0134 90E0 ldi r25,hi8(pm(uart_putchar))
247 0136 9F93 push r25
248 0138 8F93 push r24
249 013a E091 0000 lds r30,_printf_P
250 013e F091 0000 lds r31,(_printf_P)+1
251 0142 0995 icall
252 0144 8DB7 in r24,__SP_L__
253 0146 9EB7 in r25,__SP_H__
254 0148 0696 adiw r24,6
255 014a 8DBF out __SP_L__,r24
256 014c 00C0 rjmp .L20
257 .L9:
258 014e 8093 0000 sts BattLowVoltageWarning,r24
259 .L20:
260 0152 1123 tst r17
261 0154 01F0 breq .L7
262 0156 8091 0000 lds r24,BattLowVoltageWarning
263 015a 6AE0 ldi r22,lo8(10)
264 015c 0E94 0000 call __udivmodqi4
265 0160 892F mov r24,r25
266 0162 9927 clr r25
267 0164 9F93 push r25
268 0166 8F93 push r24
269 0168 8091 0000 lds r24,BattLowVoltageWarning
270 016c 0E94 0000 call __udivmodqi4
271 0170 9927 clr r25
272 0172 9F93 push r25
273 0174 8F93 push r24
274 0176 80E0 ldi r24,lo8(__c.9)
275 0178 90E0 ldi r25,hi8(__c.9)
276 017a 9F93 push r25
277 017c 8F93 push r24
278 017e 80E0 ldi r24,lo8(pm(uart_putchar))
279 0180 90E0 ldi r25,hi8(pm(uart_putchar))
280 0182 9F93 push r25
281 0184 8F93 push r24
282 0186 E091 0000 lds r30,_printf_P
283 018a F091 0000 lds r31,(_printf_P)+1
284 018e 0995 icall
285 0190 2DB7 in r18,__SP_L__
286 0192 3EB7 in r19,__SP_H__
287 0194 285F subi r18,lo8(-(8))
288 0196 3F4F sbci r19,hi8(-(8))
289 0198 2DBF out __SP_L__,r18
290 .L7:
291 /* epilogue: frame size=0 */
292 019a DF91 pop r29
293 019c CF91 pop r28
294 019e 1F91 pop r17
295 01a0 0895 ret
296 /* epilogue end (size=4) */
297 /* function LipoDetection size 138 (131) */
299 .section .progmem.data
302 __c.0:
303 004d 0A0D 466F .string "\n\rFound BL-Ctrl: "
303 756E 6420
303 424C 2D43
303 7472 6C3A
303 2000
306 __c.1:
307 005f 2564 00 .string "%d"
310 __c.2:
311 0062 0A0D 0A0D .string "\n\r\n\r!! MISSING BL-CTRL: %d !!"
311 2121 204D
311 4953 5349
311 4E47 2042
311 4C2D 4354
314 __c.3:
315 0080 0A0D 4361 .string "\n\rCalibrating pressure sensor.."
315 6C69 6272
315 6174 696E
315 6720 7072
315 6573 7375
318 __c.4:
319 00a0 4F4B 0A0D .string "OK\n\r"
319 00
322 __c.5:
323 00a5 0A0D 466C .string "\n\rFlight-time %u min Total:%u min"
323 6967 6874
323 2D74 696D
323 6520 2575
323 206D 696E
324 .lcomm second.6,1
325 .text
326 .global main
328 main:
329 /* prologue: frame size=0 */
330 01a2 C0E0 ldi r28,lo8(__stack - 0)
331 01a4 D0E0 ldi r29,hi8(__stack - 0)
332 01a6 DEBF out __SP_H__,r29
333 01a8 CDBF out __SP_L__,r28
334 /* prologue end (size=4) */
335 01aa 8824 clr r8
336 01ac 9924 clr r9
337 01ae 14B8 out 36-0x20,__zero_reg__
338 01b0 15B8 out 37-0x20,__zero_reg__
339 01b2 B7EE ldi r27,lo8(999)
340 01b4 EB2E mov r14,r27
341 01b6 B3E0 ldi r27,hi8(999)
342 01b8 FB2E mov r15,r27
343 .L27:
344 01ba 2EEC ldi r18,lo8(-50)
345 01bc 3FEF ldi r19,hi8(-50)
346 01be E20E add r14,r18
347 01c0 F31E adc r15,r19
348 01c2 F7FE sbrs r15,7
349 01c4 00C0 rjmp .L27
350 01c6 199B sbis 35-0x20,1
351 01c8 00C0 rjmp .L28
352 01ca 85E1 ldi r24,lo8(21)
353 01cc 00C0 rjmp .L242
354 .L28:
355 01ce 86E1 ldi r24,lo8(22)
356 .L242:
357 01d0 8093 0000 sts PlatinenVersion,r24
358 01d4 81E8 ldi r24,lo8(-127)
359 01d6 87B9 out 39-0x20,r24
360 01d8 3E9A sbi 39-0x20,6
361 01da 8FEF ldi r24,lo8(-1)
362 01dc 88B9 out 40-0x20,r24
363 01de 8BE1 ldi r24,lo8(27)
364 01e0 84B9 out 36-0x20,r24
365 01e2 81E0 ldi r24,lo8(1)
366 01e4 85B9 out 37-0x20,r24
367 01e6 8EE3 ldi r24,lo8(62)
368 01e8 8AB9 out 42-0x20,r24
369 01ea 87E4 ldi r24,lo8(71)
370 01ec 8BB9 out 43-0x20,r24
371 01ee 469A sbi 40-0x20,6
372 01f0 84B7 in r24,84-0x20
373 01f2 877F andi r24,lo8(-9)
374 01f4 84BF out 84-0x20,r24
375 01f6 8091 6000 lds r24,96
376 01fa 8861 ori r24,lo8(24)
377 01fc 8093 6000 sts 96,r24
378 0200 1092 6000 sts 96,__zero_reg__
379 0204 84EC ldi r24,lo8(2500)
380 0206 99E0 ldi r25,hi8(2500)
381 0208 9093 0000 sts (beeptime)+1,r25
382 020c 8093 0000 sts beeptime,r24
383 0210 1092 0000 sts (StickGier)+1,__zero_reg__
384 0214 1092 0000 sts StickGier,__zero_reg__
385 0218 1092 0000 sts (PPM_in+4)+1,__zero_reg__
386 021c 1092 0000 sts PPM_in+4,__zero_reg__
387 0220 1092 0000 sts (StickRoll)+1,__zero_reg__
388 0224 1092 0000 sts StickRoll,__zero_reg__
389 0228 1092 0000 sts (StickNick)+1,__zero_reg__
390 022c 1092 0000 sts StickNick,__zero_reg__
391 0230 2091 0000 lds r18,PlatinenVersion
392 0234 2431 cpi r18,lo8(20)
393 0236 00F0 brlo .L30
394 0238 84EC ldi r24,lo8(1220)
395 023a 94E0 ldi r25,hi8(1220)
396 023c A0E0 ldi r26,hlo8(1220)
397 023e B0E0 ldi r27,hhi8(1220)
398 0240 00C0 rjmp .L243
399 .L30:
400 0242 8BE0 ldi r24,lo8(1291)
401 0244 95E0 ldi r25,hi8(1291)
402 0246 A0E0 ldi r26,hlo8(1291)
403 0248 B0E0 ldi r27,hhi8(1291)
404 .L243:
405 024a 8093 0000 sts GIER_GRAD_FAKTOR,r24
406 024e 9093 0000 sts (GIER_GRAD_FAKTOR)+1,r25
407 0252 A093 0000 sts (GIER_GRAD_FAKTOR)+2,r26
408 0256 B093 0000 sts (GIER_GRAD_FAKTOR)+3,r27
409 025a 2A30 cpi r18,lo8(10)
410 025c 01F0 breq .L33
411 025e 2431 cpi r18,lo8(20)
412 0260 00F0 brlo .L32
413 .L33:
414 0262 2898 cbi 37-0x20,0
415 0264 00C0 rjmp .L34
416 .L32:
417 0266 289A sbi 37-0x20,0
418 .L34:
419 0268 2C30 cpi r18,lo8(12)
420 026a 00F0 brlo .L36
421 026c 2631 cpi r18,lo8(22)
422 026e 01F4 brne .L35
423 .L36:
424 0270 299A sbi 37-0x20,1
425 0272 00C0 rjmp .L37
426 .L35:
427 0274 2998 cbi 37-0x20,1
428 .L37:
429 0276 0E94 0000 call Timer_Init
430 027a 0E94 0000 call TIMER2_Init
431 027e 0E94 0000 call UART_Init
432 0282 0E94 0000 call rc_sum_init
433 0286 0E94 0000 call ADC_Init
434 028a 81E0 ldi r24,lo8(1)
435 028c 0E94 0000 call I2C_Init
436 0290 0E94 0000 call SPI_MasterInit
437 0294 0E94 0000 call Capacity_Init
438 0298 0E94 0000 call LIBFC_Init
439 029c 8091 0000 lds r24,PlatinenVersion
440 02a0 8C30 cpi r24,lo8(12)
441 02a2 00F0 brlo .L39
442 02a4 8631 cpi r24,lo8(22)
443 02a6 01F4 brne .L38
444 .L39:
445 02a8 299A sbi 37-0x20,1
446 02aa 00C0 rjmp .L40
447 .L38:
448 02ac 2998 cbi 37-0x20,1
449 .L40:
450 /* #APP */
451 02ae 7894 sei
452 /* #NOAPP */
453 02b0 0E94 0000 call ParamSet_Init
454 02b4 8091 0000 lds r24,BLFlags
455 02b8 8260 ori r24,lo8(2)
456 02ba 8093 0000 sts BLFlags,r24
457 02be 1092 0000 sts motor_read,__zero_reg__
458 02c2 0E94 0000 call SendMotorData
459 02c6 84EF ldi r24,lo8(500)
460 02c8 91E0 ldi r25,hi8(500)
461 02ca 0E94 0000 call SetDelay
462 02ce 7C01 movw r14,r24
463 .L41:
464 02d0 8091 0000 lds r24,BLFlags
465 02d4 80FD sbrc r24,0
466 02d6 00C0 rjmp .L42
467 02d8 C701 movw r24,r14
468 02da 0E94 0000 call CheckDelay
469 02de 8823 tst r24
470 02e0 01F0 breq .L41
471 .L42:
472 02e2 80E0 ldi r24,lo8(__c.0)
473 02e4 90E0 ldi r25,hi8(__c.0)
474 02e6 9F93 push r25
475 02e8 8F93 push r24
476 02ea A0E0 ldi r26,lo8(pm(uart_putchar))
477 02ec AA2E mov r10,r26
478 02ee A0E0 ldi r26,hi8(pm(uart_putchar))
479 02f0 BA2E mov r11,r26
480 02f2 BF92 push r11
481 02f4 AF92 push r10
482 02f6 E091 0000 lds r30,_printf_P
483 02fa F091 0000 lds r31,(_printf_P)+1
484 02fe 0995 icall
485 0300 80EA ldi r24,lo8(4000)
486 0302 9FE0 ldi r25,hi8(4000)
487 0304 0E94 0000 call SetDelay
488 0308 7C01 movw r14,r24
489 030a C0E0 ldi r28,lo8(0)
490 030c D0E0 ldi r29,hi8(0)
491 030e 0F90 pop __tmp_reg__
492 0310 0F90 pop __tmp_reg__
493 0312 0F90 pop __tmp_reg__
494 0314 0F90 pop __tmp_reg__
495 0316 00E0 ldi r16,lo8(Motor+3)
496 0318 10E0 ldi r17,hi8(Motor+3)
497 031a F0E0 ldi r31,lo8(Mixer+13)
498 031c CF2E mov r12,r31
499 031e F0E0 ldi r31,hi8(Mixer+13)
500 0320 DF2E mov r13,r31
501 .L58:
502 0322 0E94 0000 call SendMotorData
503 .L47:
504 0326 8091 0000 lds r24,BLFlags
505 032a 80FD sbrc r24,0
506 032c 00C0 rjmp .L48
507 032e C701 movw r24,r14
508 0330 0E94 0000 call CheckDelay
509 0334 8823 tst r24
510 0336 01F0 breq .L47
511 .L48:
512 0338 F601 movw r30,r12
513 033a 8081 ld r24,Z
514 033c 1816 cp __zero_reg__,r24
515 033e 04F4 brge .L50
516 0340 00C0 rjmp .L246
517 .L56:
518 0342 0E94 0000 call SendMotorData
519 .L53:
520 0346 8091 0000 lds r24,BLFlags
521 034a 80FD sbrc r24,0
522 034c 00C0 rjmp .L246
523 034e C701 movw r24,r14
524 0350 0E94 0000 call CheckDelay
525 0354 8823 tst r24
526 0356 01F0 breq .L53
527 .L246:
528 0358 C701 movw r24,r14
529 035a 0E94 0000 call CheckDelay
530 035e 8823 tst r24
531 0360 01F4 brne .L50
532 0362 F801 movw r30,r16
533 0364 8081 ld r24,Z
534 0366 8823 tst r24
535 0368 04F4 brge .L56
536 .L50:
537 036a F801 movw r30,r16
538 036c 8081 ld r24,Z
539 036e 87FF sbrs r24,7
540 0370 00C0 rjmp .L46
541 0372 2196 adiw r28,1
542 0374 DF93 push r29
543 0376 CF93 push r28
544 0378 2197 sbiw r28,1
545 037a 80E0 ldi r24,lo8(__c.1)
546 037c 90E0 ldi r25,hi8(__c.1)
547 037e 9F93 push r25
548 0380 8F93 push r24
549 0382 BF92 push r11
550 0384 AF92 push r10
551 0386 E091 0000 lds r30,_printf_P
552 038a F091 0000 lds r31,(_printf_P)+1
553 038e 0995 icall
554 0390 8091 0000 lds r24,FoundMotors
555 0394 8F5F subi r24,lo8(-(1))
556 0396 8093 0000 sts FoundMotors,r24
557 039a 2DB7 in r18,__SP_L__
558 039c 3EB7 in r19,__SP_H__
559 039e 2A5F subi r18,lo8(-(6))
560 03a0 3F4F sbci r19,hi8(-(6))
561 03a2 2DBF out __SP_L__,r18
562 .L46:
563 03a4 2196 adiw r28,1
564 03a6 84E0 ldi r24,lo8(4)
565 03a8 90E0 ldi r25,hi8(4)
566 03aa C80E add r12,r24
567 03ac D91E adc r13,r25
568 03ae 085F subi r16,lo8(-(8))
569 03b0 1F4F sbci r17,hi8(-(8))
570 03b2 CC30 cpi r28,12
571 03b4 D105 cpc r29,__zero_reg__
572 03b6 00F4 brsh .+2
573 03b8 00C0 rjmp .L58
574 03ba C0E0 ldi r28,lo8(0)
575 03bc D0E0 ldi r29,hi8(0)
576 03be 00E0 ldi r16,lo8(Motor)
577 03c0 10E0 ldi r17,hi8(Motor)
578 03c2 E0E0 ldi r30,lo8(Mixer+13)
579 03c4 EE2E mov r14,r30
580 03c6 E0E0 ldi r30,hi8(Mixer+13)
581 03c8 FE2E mov r15,r30
582 .L63:
583 03ca F801 movw r30,r16
584 03cc 8381 ldd r24,Z+3
585 03ce 87FD sbrc r24,7
586 03d0 00C0 rjmp .L62
587 03d2 F701 movw r30,r14
588 03d4 8081 ld r24,Z
589 03d6 1816 cp __zero_reg__,r24
590 03d8 04F4 brge .L62
591 03da 2196 adiw r28,1
592 03dc DF93 push r29
593 03de CF93 push r28
594 03e0 2197 sbiw r28,1
595 03e2 80E0 ldi r24,lo8(__c.2)
596 03e4 90E0 ldi r25,hi8(__c.2)
597 03e6 9F93 push r25
598 03e8 8F93 push r24
599 03ea 80E0 ldi r24,lo8(pm(uart_putchar))
600 03ec 90E0 ldi r25,hi8(pm(uart_putchar))
601 03ee 9F93 push r25
602 03f0 8F93 push r24
603 03f2 E091 0000 lds r30,_printf_P
604 03f6 F091 0000 lds r31,(_printf_P)+1
605 03fa 0995 icall
606 03fc 82E0 ldi r24,lo8(2)
607 03fe 8093 0000 sts ServoActive,r24
608 0402 2DB7 in r18,__SP_L__
609 0404 3EB7 in r19,__SP_H__
610 0406 2A5F subi r18,lo8(-(6))
611 0408 3F4F sbci r19,hi8(-(6))
612 040a 2DBF out __SP_L__,r18
613 .L62:
614 040c F801 movw r30,r16
615 040e 8381 ldd r24,Z+3
616 0410 8078 andi r24,lo8(-128)
617 0412 8383 std Z+3,r24
618 0414 2196 adiw r28,1
619 0416 24E0 ldi r18,lo8(4)
620 0418 30E0 ldi r19,hi8(4)
621 041a E20E add r14,r18
622 041c F31E adc r15,r19
623 041e 085F subi r16,lo8(-(8))
624 0420 1F4F sbci r17,hi8(-(8))
625 0422 CC30 cpi r28,12
626 0424 D105 cpc r29,__zero_reg__
627 0426 00F0 brlo .L63
628 0428 0E94 0000 call PrintLine
629 042c 9091 0000 lds r25,RequiredMotors
630 0430 8091 0000 lds r24,FoundMotors
631 0434 9817 cp r25,r24
632 0436 00F4 brsh .L64
633 0438 8091 0000 lds r24,VersionInfo+6
634 043c 8061 ori r24,lo8(16)
635 043e 8093 0000 sts VersionInfo+6,r24
636 .L64:
637 0442 80E0 ldi r24,lo8(__c.3)
638 0444 90E0 ldi r25,hi8(__c.3)
639 0446 9F93 push r25
640 0448 8F93 push r24
641 044a C0E0 ldi r28,lo8(pm(uart_putchar))
642 044c D0E0 ldi r29,hi8(pm(uart_putchar))
643 044e DF93 push r29
644 0450 CF93 push r28
645 0452 E091 0000 lds r30,_printf_P
646 0456 F091 0000 lds r31,(_printf_P)+1
647 045a 0995 icall
648 045c 88EE ldi r24,lo8(1000)
649 045e 93E0 ldi r25,hi8(1000)
650 0460 0E94 0000 call SetDelay
651 0464 7C01 movw r14,r24
652 0466 0E94 0000 call SucheLuftruckOffset
653 046a 0F90 pop __tmp_reg__
654 046c 0F90 pop __tmp_reg__
655 046e 0F90 pop __tmp_reg__
656 0470 0F90 pop __tmp_reg__
657 .L65:
658 0472 C701 movw r24,r14
659 0474 0E94 0000 call CheckDelay
660 0478 8823 tst r24
661 047a 01F0 breq .L65
662 047c 80E0 ldi r24,lo8(__c.4)
663 047e 90E0 ldi r25,hi8(__c.4)
664 0480 9F93 push r25
665 0482 8F93 push r24
666 0484 DF93 push r29
667 0486 CF93 push r28
668 0488 E091 0000 lds r30,_printf_P
669 048c F091 0000 lds r31,(_printf_P)+1
670 0490 0995 icall
671 0492 80E0 ldi r24,lo8(0)
672 0494 0E94 0000 call SetNeutral
673 0498 8091 0000 lds r24,PlatinenVersion
674 049c 0F90 pop __tmp_reg__
675 049e 0F90 pop __tmp_reg__
676 04a0 0F90 pop __tmp_reg__
677 04a2 0F90 pop __tmp_reg__
678 04a4 8A30 cpi r24,lo8(10)
679 04a6 01F0 breq .L69
680 04a8 8431 cpi r24,lo8(20)
681 04aa 00F0 brlo .L68
682 .L69:
683 04ac 2898 cbi 37-0x20,0
684 04ae 00C0 rjmp .L70
685 .L68:
686 04b0 289A sbi 37-0x20,0
687 .L70:
688 04b2 80ED ldi r24,lo8(2000)
689 04b4 97E0 ldi r25,hi8(2000)
690 04b6 9093 0000 sts (beeptime)+1,r25
691 04ba 8093 0000 sts beeptime,r24
692 04be 85E5 ldi r24,lo8(85)
693 04c0 8093 0000 sts ExternControl,r24
694 04c4 8EE0 ldi r24,lo8(14)
695 04c6 90E0 ldi r25,hi8(14)
696 04c8 0E94 0000 call GetParamByte
697 04cc 9927 clr r25
698 04ce 182F mov r17,r24
699 04d0 0027 clr r16
700 04d2 8FE0 ldi r24,lo8(15)
701 04d4 90E0 ldi r25,hi8(15)
702 04d6 0E94 0000 call GetParamByte
703 04da 080F add r16,r24
704 04dc 111D adc r17,__zero_reg__
705 04de 1093 0000 sts (FlugMinuten)+1,r17
706 04e2 0093 0000 sts FlugMinuten,r16
707 04e6 8AE0 ldi r24,lo8(10)
708 04e8 90E0 ldi r25,hi8(10)
709 04ea 0E94 0000 call GetParamByte
710 04ee 9927 clr r25
711 04f0 182F mov r17,r24
712 04f2 0027 clr r16
713 04f4 8BE0 ldi r24,lo8(11)
714 04f6 90E0 ldi r25,hi8(11)
715 04f8 0E94 0000 call GetParamByte
716 04fc 080F add r16,r24
717 04fe 111D adc r17,__zero_reg__
718 0500 1093 0000 sts (FlugMinutenGesamt)+1,r17
719 0504 0093 0000 sts FlugMinutenGesamt,r16
720 0508 0F5F subi r16,lo8(-1)
721 050a 1F4F sbci r17,hi8(-1)
722 050c 01F0 breq .L72
723 050e 8091 0000 lds r24,FlugMinuten
724 0512 9091 0000 lds r25,(FlugMinuten)+1
725 0516 8F5F subi r24,lo8(-1)
726 0518 9F4F sbci r25,hi8(-1)
727 051a 01F4 brne .L71
728 .L72:
729 051c 1092 0000 sts (FlugMinuten)+1,__zero_reg__
730 0520 1092 0000 sts FlugMinuten,__zero_reg__
731 0524 1092 0000 sts (FlugMinutenGesamt)+1,__zero_reg__
732 0528 1092 0000 sts FlugMinutenGesamt,__zero_reg__
733 .L71:
734 052c 8091 0000 lds r24,FlugMinutenGesamt
735 0530 9091 0000 lds r25,(FlugMinutenGesamt)+1
736 0534 9F93 push r25
737 0536 8F93 push r24
738 0538 8091 0000 lds r24,FlugMinuten
739 053c 9091 0000 lds r25,(FlugMinuten)+1
740 0540 9F93 push r25
741 0542 8F93 push r24
742 0544 80E0 ldi r24,lo8(__c.5)
743 0546 90E0 ldi r25,hi8(__c.5)
744 0548 9F93 push r25
745 054a 8F93 push r24
746 054c DF93 push r29
747 054e CF93 push r28
748 0550 E091 0000 lds r30,_printf_P
749 0554 F091 0000 lds r31,(_printf_P)+1
750 0558 0995 icall
751 055a 0E94 0000 call LcdClear
752 055e 88E8 ldi r24,lo8(5000)
753 0560 93E1 ldi r25,hi8(5000)
754 0562 9093 0000 sts (I2CTimeout)+1,r25
755 0566 8093 0000 sts I2CTimeout,r24
756 056a C1E0 ldi r28,lo8(1)
757 056c C093 0000 sts WinkelOut+7,r28
758 0570 8C2F mov r24,r28
759 0572 0E94 0000 call LipoDetection
760 0576 8091 0000 lds r24,EE_Parameter+39
761 057a 0E94 0000 call LIBFC_ReceiverInit
762 057e 0E94 0000 call PrintLine
763 0582 80ED ldi r24,lo8(2000)
764 0584 97E0 ldi r25,hi8(2000)
765 0586 0E94 0000 call SetDelay
766 058a 7C01 movw r14,r24
767 058c 8AEF ldi r24,lo8(250)
768 058e 90E0 ldi r25,hi8(250)
769 0590 0E94 0000 call SetDelay
770 0594 83E0 ldi r24,lo8(3)
771 0596 8093 0000 sts DebugOut,r24
772 059a 1092 0000 sts JetiBeep,__zero_reg__
773 059e 8091 0000 lds r24,EE_Parameter+110
774 05a2 2DB7 in r18,__SP_L__
775 05a4 3EB7 in r19,__SP_H__
776 05a6 285F subi r18,lo8(-(8))
777 05a8 3F4F sbci r19,hi8(-(8))
778 05aa 2DBF out __SP_L__,r18
779 05ac 84FF sbrs r24,4
780 05ae 00C0 rjmp .L247
781 05b0 C093 0000 sts DisableRcOffBeeping,r28
782 .L247:
783 05b4 8091 0000 lds r24,ReceiverUpdateModeActive
784 05b8 8823 tst r24
785 05ba 01F0 breq .L76
786 .L77:
787 05bc 4798 cbi 40-0x20,7
788 05be 00C0 rjmp .L77
789 .L76:
790 05c0 8091 0000 lds r24,UpdateMotor
791 05c4 8823 tst r24
792 05c6 01F4 brne .+2
793 05c8 00C0 rjmp .L79
794 05ca 8091 0000 lds r24,AdReady
795 05ce 8823 tst r24
796 05d0 01F4 brne .+2
797 05d2 00C0 rjmp .L79
798 05d4 1092 0000 sts UpdateMotor,__zero_reg__
799 05d8 8091 0000 lds r24,WinkelOut+6
800 05dc 8823 tst r24
801 05de 01F0 breq .L80
802 05e0 0E94 0000 call CalMk3Mag
803 05e4 00C0 rjmp .L81
804 .L80:
805 05e6 0E94 0000 call MotorRegler
806 .L81:
807 05ea 0E94 0000 call SendMotorData
808 05ee 2091 0000 lds r18,PlatinenVersion
809 05f2 2A30 cpi r18,lo8(10)
810 05f4 01F0 breq .L83
811 05f6 2431 cpi r18,lo8(20)
812 05f8 00F0 brlo .L82
813 .L83:
814 05fa 2898 cbi 37-0x20,0
815 05fc 00C0 rjmp .L84
816 .L82:
817 05fe 289A sbi 37-0x20,0
818 .L84:
819 0600 8091 0000 lds r24,SenderOkay
820 0604 8823 tst r24
821 0606 01F0 breq .L85
822 0608 8091 0000 lds r24,SenderOkay
823 060c 8150 subi r24,lo8(-(-1))
824 060e 8093 0000 sts SenderOkay,r24
825 0612 00C0 rjmp .L86
826 .L85:
827 0614 8091 6F00 lds r24,111
828 0618 8062 ori r24,lo8(32)
829 061a 8093 6F00 sts 111,r24
830 061e 1092 0000 sts (PPM_in)+1,__zero_reg__
831 0622 1092 0000 sts PPM_in,__zero_reg__
832 0626 8091 0000 lds r24,VersionInfo+6
833 062a 8860 ori r24,lo8(8)
834 062c 8093 0000 sts VersionInfo+6,r24
835 .L86:
836 0630 8091 0000 lds r24,I2CTimeout
837 0634 9091 0000 lds r25,(I2CTimeout)+1
838 0638 0197 sbiw r24,1
839 063a 9093 0000 sts (I2CTimeout)+1,r25
840 063e 8093 0000 sts I2CTimeout,r24
841 0642 8091 0000 lds r24,I2CTimeout
842 0646 9091 0000 lds r25,(I2CTimeout)+1
843 064a 892B or r24,r25
844 064c 01F0 breq .L88
845 064e 8091 0000 lds r24,MissingMotor
846 0652 8823 tst r24
847 0654 01F0 breq .L87
848 .L88:
849 0656 8091 0000 lds r24,I2CTimeout
850 065a 9091 0000 lds r25,(I2CTimeout)+1
851 065e 892B or r24,r25
852 0660 01F4 brne .L89
853 0662 0E94 0000 call I2C_Reset
854 0666 85E0 ldi r24,lo8(5)
855 0668 90E0 ldi r25,hi8(5)
856 066a 9093 0000 sts (I2CTimeout)+1,r25
857 066e 8093 0000 sts I2CTimeout,r24
858 0672 8091 0000 lds r24,DebugOut+58
859 0676 9091 0000 lds r25,(DebugOut+58)+1
860 067a 0196 adiw r24,1
861 067c 9093 0000 sts (DebugOut+58)+1,r25
862 0680 8093 0000 sts DebugOut+58,r24
863 0684 8091 0000 lds r24,VersionInfo+6
864 0688 8160 ori r24,lo8(1)
865 068a 8093 0000 sts VersionInfo+6,r24
866 068e 8091 0000 lds r24,DebugOut+1
867 0692 8260 ori r24,lo8(2)
868 0694 8093 0000 sts DebugOut+1,r24
869 .L89:
870 0698 8091 0000 lds r24,BeepMuster
871 069c 9091 0000 lds r25,(BeepMuster)+1
872 06a0 8F5F subi r24,lo8(-1)
873 06a2 9F4F sbci r25,hi8(-1)
874 06a4 01F4 brne .L91
875 06a6 8091 0000 lds r24,MotorenEin
876 06aa 8823 tst r24
877 06ac 01F0 breq .L91
878 06ae 88EA ldi r24,lo8(25000)
879 06b0 91E6 ldi r25,hi8(25000)
880 06b2 9093 0000 sts (beeptime)+1,r25
881 06b6 8093 0000 sts beeptime,r24
882 06ba 80E8 ldi r24,lo8(128)
883 06bc 90E0 ldi r25,hi8(128)
884 06be 9093 0000 sts (BeepMuster)+1,r25
885 06c2 8093 0000 sts BeepMuster,r24
886 06c6 00C0 rjmp .L91
887 .L87:
888 06c8 2A30 cpi r18,lo8(10)
889 06ca 01F0 breq .L93
890 06cc 2431 cpi r18,lo8(20)
891 06ce 00F0 brlo .L92
892 .L93:
893 06d0 2898 cbi 37-0x20,0
894 06d2 00C0 rjmp .L91
895 .L92:
896 06d4 289A sbi 37-0x20,0
897 .L91:
898 06d6 0E94 0000 call LIBFC_Polling
899 06da 8091 0000 lds r24,UpdateMotor
900 06de 8823 tst r24
901 06e0 01F0 breq .+2
902 06e2 00C0 rjmp .L79
903 06e4 8091 0000 lds r24,NewSBusData
904 06e8 8823 tst r24
905 06ea 01F0 breq .L96
906 06ec 0E94 0000 call ProcessSBus
907 06f0 00C0 rjmp .L79
908 .L96:
909 06f2 8091 0000 lds r24,CalculateServoSignals
910 06f6 8823 tst r24
911 06f8 01F0 breq .L98
912 06fa 0E94 0000 call CalculateServo
913 .L98:
914 06fe 0E94 0000 call DatenUebertragung
915 0702 0E94 0000 call BearbeiteRxDaten
916 0706 C701 movw r24,r14
917 0708 0E94 0000 call CheckDelay
918 070c 8823 tst r24
919 070e 01F4 brne .+2
920 0710 00C0 rjmp .L99
921 0712 84E1 ldi r24,lo8(20)
922 0714 90E0 ldi r25,hi8(20)
923 0716 E80E add r14,r24
924 0718 F91E adc r15,r25
925 071a 0E94 0000 call CalcNickServoValue
926 071e 8091 0000 lds r24,EE_Parameter+39
927 0722 8630 cpi r24,lo8(6)
928 0724 01F4 brne .L100
929 0726 0E94 0000 call HoTT_Menu
930 072a 00C0 rjmp .L101
931 .L100:
932 072c 8430 cpi r24,lo8(4)
933 072e 01F4 brne .L101
934 0730 0E94 0000 call BuildJeti_Vario
935 .L101:
936 0734 8091 0000 lds r24,MissingMotor
937 0738 8823 tst r24
938 073a 01F0 breq .L103
939 073c 8091 0000 lds r24,VersionInfo+6
940 0740 8260 ori r24,lo8(2)
941 0742 8093 0000 sts VersionInfo+6,r24
942 0746 8091 0000 lds r24,DebugOut+1
943 074a 8260 ori r24,lo8(2)
944 074c 00C0 rjmp .L244
945 .L103:
946 074e 8091 0000 lds r24,beeptime
947 0752 9091 0000 lds r25,(beeptime)+1
948 0756 892B or r24,r25
949 0758 01F4 brne .L104
950 075a 8091 0000 lds r24,I2CTimeout
951 075e 9091 0000 lds r25,(I2CTimeout)+1
952 0762 0797 sbiw r24,7
953 0764 00F0 brlo .L104
954 0766 8091 0000 lds r24,DebugOut+1
955 076a 8D7F andi r24,lo8(-3)
956 .L244:
957 076c 8093 0000 sts DebugOut+1,r24
958 .L104:
959 0770 8091 0000 lds r24,DisableRcOffBeeping
960 0774 8823 tst r24
961 0776 01F0 breq .L107
962 0778 8091 0000 lds r24,SenderOkay
963 077c 8739 cpi r24,lo8(-105)
964 077e 00F0 brlo .L107
965 0780 1092 0000 sts DisableRcOffBeeping,__zero_reg__
966 0784 88E8 ldi r24,lo8(5000)
967 0786 93E1 ldi r25,hi8(5000)
968 0788 9093 0000 sts (beeptime)+1,r25
969 078c 8093 0000 sts beeptime,r24
970 .L107:
971 0790 8091 0000 lds r24,PcZugriff
972 0794 8823 tst r24
973 0796 01F0 breq .L109
974 0798 8150 subi r24,lo8(-(-1))
975 079a 8093 0000 sts PcZugriff,r24
976 079e 00C0 rjmp .L110
977 .L109:
978 07a0 8093 0000 sts ExternControl+10,r24
979 07a4 1092 0000 sts (ExternStickNick)+1,__zero_reg__
980 07a8 1092 0000 sts ExternStickNick,__zero_reg__
981 07ac 1092 0000 sts (ExternStickRoll)+1,__zero_reg__
982 07b0 1092 0000 sts ExternStickRoll,__zero_reg__
983 07b4 1092 0000 sts (ExternStickGier)+1,__zero_reg__
984 07b8 1092 0000 sts ExternStickGier,__zero_reg__
985 07bc 8091 0000 lds r24,SenderOkay
986 07c0 8823 tst r24
987 07c2 01F4 brne .L110
988 07c4 8091 0000 lds r24,BeepMuster
989 07c8 9091 0000 lds r25,(BeepMuster)+1
990 07cc 8F5F subi r24,lo8(-1)
991 07ce 9F4F sbci r25,hi8(-1)
992 07d0 01F4 brne .L110
993 07d2 2091 0000 lds r18,DisableRcOffBeeping
994 07d6 2230 cpi r18,lo8(2)
995 07d8 01F0 breq .L110
996 07da 88E9 ldi r24,lo8(15000)
997 07dc 9AE3 ldi r25,hi8(15000)
998 07de 9093 0000 sts (beeptime)+1,r25
999 07e2 8093 0000 sts beeptime,r24
1000 07e6 80E0 ldi r24,lo8(3072)
1001 07e8 9CE0 ldi r25,hi8(3072)
1002 07ea 9093 0000 sts (BeepMuster)+1,r25
1003 07ee 8093 0000 sts BeepMuster,r24
1004 07f2 2223 tst r18
1005 07f4 01F0 breq .L110
1006 07f6 82E0 ldi r24,lo8(2)
1007 07f8 8093 0000 sts DisableRcOffBeeping,r24
1008 .L110:
1009 07fc 8091 0000 lds r24,NaviDataOkay
1010 0800 893C cpi r24,lo8(-55)
1011 0802 00F0 brlo .L114
1012 0804 8150 subi r24,lo8(-(-1))
1013 0806 8093 0000 sts NaviDataOkay,r24
1014 080a 8091 0000 lds r24,VersionInfo+6
1015 080e 8B7F andi r24,lo8(-5)
1016 0810 8093 0000 sts VersionInfo+6,r24
1017 0814 00C0 rjmp .L115
1018 .L114:
1019 0816 8091 0000 lds r24,NC_Version+3
1020 081a 8823 tst r24
1021 081c 01F0 breq .L116
1022 081e 8091 0000 lds r24,VersionInfo+6
1023 0822 8460 ori r24,lo8(4)
1024 0824 8093 0000 sts VersionInfo+6,r24
1025 0828 89E0 ldi r24,lo8(9)
1026 082a 8093 0000 sts NC_ErrorCode,r24
1027 082e 8091 0000 lds r24,BeepMuster
1028 0832 9091 0000 lds r25,(BeepMuster)+1
1029 0836 8F5F subi r24,lo8(-1)
1030 0838 9F4F sbci r25,hi8(-1)
1031 083a 01F4 brne .L116
1032 083c 8091 0000 lds r24,MotorenEin
1033 0840 8823 tst r24
1034 0842 01F0 breq .L116
1035 0844 88E9 ldi r24,lo8(15000)
1036 0846 9AE3 ldi r25,hi8(15000)
1037 0848 9093 0000 sts (beeptime)+1,r25
1038 084c 8093 0000 sts beeptime,r24
1039 0850 80E0 ldi r24,lo8(-22528)
1040 0852 98EA ldi r25,hi8(-22528)
1041 0854 9093 0000 sts (BeepMuster)+1,r25
1042 0858 8093 0000 sts BeepMuster,r24
1043 .L116:
1044 085c 1092 0000 sts (GPS_Nick)+1,__zero_reg__
1045 0860 1092 0000 sts GPS_Nick,__zero_reg__
1046 0864 1092 0000 sts (GPS_Roll)+1,__zero_reg__
1047 0868 1092 0000 sts GPS_Roll,__zero_reg__
1048 086c 1092 0000 sts GPS_Aid_StickMultiplikator,__zero_reg__
1049 0870 1092 0000 sts GPSInfo,__zero_reg__
1050 0874 1092 0000 sts (FromNaviCtrl+9)+1,__zero_reg__
1051 0878 1092 0000 sts FromNaviCtrl+9,__zero_reg__
1052 087c 1092 0000 sts (FromNaviCtrl+11)+1,__zero_reg__
1053 0880 1092 0000 sts FromNaviCtrl+11,__zero_reg__
1054 0884 8FEF ldi r24,lo8(-1)
1055 0886 9FEF ldi r25,hi8(-1)
1056 0888 9093 0000 sts (FromNaviCtrl+7)+1,r25
1057 088c 8093 0000 sts FromNaviCtrl+7,r24
1058 0890 1092 0000 sts NaviDataOkay,__zero_reg__
1059 .L115:
1060 0894 8091 0000 lds r24,BattLowVoltageWarning
1061 0898 282F mov r18,r24
1062 089a 3327 clr r19
1063 089c 8091 0000 lds r24,UBat
1064 08a0 9091 0000 lds r25,(UBat)+1
1065 08a4 8217 cp r24,r18
1066 08a6 9307 cpc r25,r19
1067 08a8 04F4 brge .L118
1068 08aa 8091 0000 lds r24,FC_StatusFlags
1069 08ae 8062 ori r24,lo8(32)
1070 08b0 8093 0000 sts FC_StatusFlags,r24
1071 08b4 8091 0000 lds r24,BeepMuster
1072 08b8 9091 0000 lds r25,(BeepMuster)+1
1073 08bc 8F5F subi r24,lo8(-1)
1074 08be 9F4F sbci r25,hi8(-1)
1075 08c0 01F4 brne .L120
1076 08c2 80E7 ldi r24,lo8(6000)
1077 08c4 97E1 ldi r25,hi8(6000)
1078 08c6 9093 0000 sts (beeptime)+1,r25
1079 08ca 8093 0000 sts beeptime,r24
1080 08ce 80E0 ldi r24,lo8(768)
1081 08d0 93E0 ldi r25,hi8(768)
1082 08d2 9093 0000 sts (BeepMuster)+1,r25
1083 08d6 8093 0000 sts BeepMuster,r24
1084 08da 00C0 rjmp .L120
1085 .L118:
1086 08dc 8091 0000 lds r24,beeptime
1087 08e0 9091 0000 lds r25,(beeptime)+1
1088 08e4 892B or r24,r25
1089 08e6 01F4 brne .L120
1090 08e8 8091 0000 lds r24,FC_StatusFlags
1091 08ec 8F7D andi r24,lo8(-33)
1092 08ee 8093 0000 sts FC_StatusFlags,r24
1093 .L120:
1094 08f2 0E94 0000 call SPI_StartTransmitPacket
1095 08f6 84E0 ldi r24,lo8(4)
1096 08f8 8093 0000 sts SendSPI,r24
1097 08fc 8091 0000 lds r24,second.6
1098 0900 8F5F subi r24,lo8(-(1))
1099 0902 8093 0000 sts second.6,r24
1100 0906 8133 cpi r24,lo8(49)
1101 0908 01F0 breq .+2
1102 090a 00C0 rjmp .L122
1103 090c 1092 0000 sts second.6,__zero_reg__
1104 0910 8091 0000 lds r24,FC_StatusFlags
1105 0914 81FF sbrs r24,1
1106 0916 00C0 rjmp .L123
1107 0918 8091 0000 lds r24,FlugSekunden
1108 091c 9091 0000 lds r25,(FlugSekunden)+1
1109 0920 0196 adiw r24,1
1110 0922 9093 0000 sts (FlugSekunden)+1,r25
1111 0926 8093 0000 sts FlugSekunden,r24
1112 092a 00C0 rjmp .L122
1113 .L123:
1114 092c 5AEA ldi r21,lo8(1450)
1115 092e 852E mov r8,r21
1116 0930 55E0 ldi r21,hi8(1450)
1117 0932 952E mov r9,r21
1118 0934 8091 0000 lds r24,StartLuftdruck
1119 0938 9091 0000 lds r25,(StartLuftdruck)+1
1120 093c 9C01 movw r18,r24
1121 093e 4427 clr r20
1122 0940 37FD sbrc r19,7
1123 0942 4095 com r20
1124 0944 542F mov r21,r20
1125 0946 8091 0000 lds r24,Luftdruck
1126 094a 9091 0000 lds r25,(Luftdruck)+1
1127 094e A091 0000 lds r26,(Luftdruck)+2
1128 0952 B091 0000 lds r27,(Luftdruck)+3
1129 0956 2817 cp r18,r24
1130 0958 3907 cpc r19,r25
1131 095a 4A07 cpc r20,r26
1132 095c 5B07 cpc r21,r27
1133 095e 04F4 brge .L125
1134 0960 8091 0000 lds r24,StartLuftdruck
1135 0964 9091 0000 lds r25,(StartLuftdruck)+1
1136 0968 0196 adiw r24,1
1137 096a 00C0 rjmp .L245
1138 .L125:
1139 096c 8091 0000 lds r24,StartLuftdruck
1140 0970 9091 0000 lds r25,(StartLuftdruck)+1
1141 0974 9C01 movw r18,r24
1142 0976 4427 clr r20
1143 0978 37FD sbrc r19,7
1144 097a 4095 com r20
1145 097c 542F mov r21,r20
1146 097e 8091 0000 lds r24,Luftdruck
1147 0982 9091 0000 lds r25,(Luftdruck)+1
1148 0986 A091 0000 lds r26,(Luftdruck)+2
1149 098a B091 0000 lds r27,(Luftdruck)+3
1150 098e 8217 cp r24,r18
1151 0990 9307 cpc r25,r19
1152 0992 A407 cpc r26,r20
1153 0994 B507 cpc r27,r21
1154 0996 04F4 brge .L122
1155 0998 8091 0000 lds r24,StartLuftdruck
1156 099c 9091 0000 lds r25,(StartLuftdruck)+1
1157 09a0 0197 sbiw r24,1
1158 .L245:
1159 09a2 9093 0000 sts (StartLuftdruck)+1,r25
1160 09a6 8093 0000 sts StartLuftdruck,r24
1161 .L122:
1162 09aa 0894 sec
1163 09ac 811C adc r8,__zero_reg__
1164 09ae 911C adc r9,__zero_reg__
1165 09b0 32E7 ldi r19,lo8(2930)
1166 09b2 8316 cp r8,r19
1167 09b4 3BE0 ldi r19,hi8(2930)
1168 09b6 9306 cpc r9,r19
1169 09b8 01F0 breq .+2
1170 09ba 00C0 rjmp .L99
1171 09bc 8824 clr r8
1172 09be 9924 clr r9
1173 09c0 2091 0000 lds r18,FlugMinuten
1174 09c4 3091 0000 lds r19,(FlugMinuten)+1
1175 09c8 2F5F subi r18,lo8(-(1))
1176 09ca 3F4F sbci r19,hi8(-(1))
1177 09cc 3093 0000 sts (FlugMinuten)+1,r19
1178 09d0 2093 0000 sts FlugMinuten,r18
1179 09d4 8091 0000 lds r24,FlugMinutenGesamt
1180 09d8 9091 0000 lds r25,(FlugMinutenGesamt)+1
1181 09dc 0196 adiw r24,1
1182 09de 9093 0000 sts (FlugMinutenGesamt)+1,r25
1183 09e2 8093 0000 sts FlugMinutenGesamt,r24
1184 09e6 832F mov r24,r19
1185 09e8 9927 clr r25
1186 09ea 682F mov r22,r24
1187 09ec 8EE0 ldi r24,lo8(14)
1188 09ee 90E0 ldi r25,hi8(14)
1189 09f0 0E94 0000 call SetParamByte
1190 09f4 8091 0000 lds r24,FlugMinuten
1191 09f8 9091 0000 lds r25,(FlugMinuten)+1
1192 09fc 9070 andi r25,hi8(255)
1193 09fe 682F mov r22,r24
1194 0a00 8FE0 ldi r24,lo8(15)
1195 0a02 90E0 ldi r25,hi8(15)
1196 0a04 0E94 0000 call SetParamByte
1197 0a08 8091 0000 lds r24,FlugMinutenGesamt
1198 0a0c 9091 0000 lds r25,(FlugMinutenGesamt)+1
1199 0a10 892F mov r24,r25
1200 0a12 9927 clr r25
1201 0a14 682F mov r22,r24
1202 0a16 8AE0 ldi r24,lo8(10)
1203 0a18 90E0 ldi r25,hi8(10)
1204 0a1a 0E94 0000 call SetParamByte
1205 0a1e 8091 0000 lds r24,FlugMinutenGesamt
1206 0a22 9091 0000 lds r25,(FlugMinutenGesamt)+1
1207 0a26 9070 andi r25,hi8(255)
1208 0a28 682F mov r22,r24
1209 0a2a 8BE0 ldi r24,lo8(11)
1210 0a2c 90E0 ldi r25,hi8(11)
1211 0a2e 0E94 0000 call SetParamByte
1212 0a32 84E1 ldi r24,lo8(20)
1213 0a34 90E0 ldi r25,hi8(20)
1214 0a36 0E94 0000 call SetDelay
1215 0a3a 7C01 movw r14,r24
1216 .L99:
1217 0a3c 0E94 0000 call LED_Update
1218 0a40 0E94 0000 call Capacity_Update
1219 .L79:
1220 0a44 8091 0000 lds r24,SendSPI
1221 0a48 8823 tst r24
1222 0a4a 01F0 breq .+2
1223 0a4c 00C0 rjmp .L247
1224 0a4e 0E94 0000 call SPI_TransmitByte
1225 0a52 00C0 rjmp .L247
1226 /* epilogue: frame size=0 */
1227 /* epilogue: noreturn */
1228 /* epilogue end (size=0) */
1229 /* function main size 1124 (1120) */
1231 .comm _printf_P,2,1
1232 /* File "main.c": code 1335 = 0x0537 (1322), prologues 7, epilogues 6 */
DEFINED SYMBOLS
*ABS*:00000000 main.c
C:\Temp/ccoZLyzd.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccoZLyzd.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccoZLyzd.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccoZLyzd.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccoZLyzd.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccoZLyzd.s:15 .bss:00000000 JetiBeep
C:\Temp/ccoZLyzd.s:21 .bss:00000001 FoundMotors
C:\Temp/ccoZLyzd.s:27 .bss:00000002 FlugSekunden
C:\Temp/ccoZLyzd.s:33 .bss:00000004 FlugMinutenGesamt
C:\Temp/ccoZLyzd.s:39 .bss:00000006 FlugMinuten
C:\Temp/ccoZLyzd.s:45 .data:00000000 BattLowVoltageWarning
C:\Temp/ccoZLyzd.s:50 .data:00000001 PlatinenVersion
C:\Temp/ccoZLyzd.s:57 .bss:00000008 DisableRcOffBeeping
C:\Temp/ccoZLyzd.s:62 .progmem.data:00000000 __c.11
C:\Temp/ccoZLyzd.s:67 .text:00000000 PrintLine
*COM*:00000002 _printf_P
C:\Temp/ccoZLyzd.s:93 .data:00000002 stick.10
C:\Temp/ccoZLyzd.s:98 .text:00000024 CalMk3Mag
C:\Temp/ccoZLyzd.s:152 .progmem.data:00000026 __c.7
C:\Temp/ccoZLyzd.s:156 .progmem.data:0000002e __c.8
C:\Temp/ccoZLyzd.s:160 .progmem.data:00000039 __c.9
C:\Temp/ccoZLyzd.s:165 .text:0000008e LipoDetection
C:\Temp/ccoZLyzd.s:302 .progmem.data:0000004d __c.0
C:\Temp/ccoZLyzd.s:306 .progmem.data:0000005f __c.1
C:\Temp/ccoZLyzd.s:310 .progmem.data:00000062 __c.2
C:\Temp/ccoZLyzd.s:314 .progmem.data:00000080 __c.3
C:\Temp/ccoZLyzd.s:318 .progmem.data:000000a0 __c.4
C:\Temp/ccoZLyzd.s:322 .progmem.data:000000a5 __c.5
.bss:00000009 second.6
C:\Temp/ccoZLyzd.s:328 .text:000001a2 main
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
uart_putchar
EE_Parameter
PPM_in
WinkelOut
beeptime
Piep
DebugOut
SetDelay
CheckDelay
UBat
__udivmodqi4
__stack
StickGier
StickRoll
StickNick
GIER_GRAD_FAKTOR
Timer_Init
TIMER2_Init
UART_Init
rc_sum_init
ADC_Init
I2C_Init
SPI_MasterInit
Capacity_Init
LIBFC_Init
ParamSet_Init
BLFlags
motor_read
SendMotorData
Motor
Mixer
ServoActive
RequiredMotors
VersionInfo
SucheLuftruckOffset
SetNeutral
ExternControl
GetParamByte
LcdClear
I2CTimeout
LIBFC_ReceiverInit
ReceiverUpdateModeActive
UpdateMotor
AdReady
MotorRegler
SenderOkay
MissingMotor
I2C_Reset
BeepMuster
MotorenEin
LIBFC_Polling
NewSBusData
ProcessSBus
CalculateServoSignals
CalculateServo
DatenUebertragung
BearbeiteRxDaten
CalcNickServoValue
HoTT_Menu
BuildJeti_Vario
PcZugriff
ExternStickNick
ExternStickRoll
ExternStickGier
NaviDataOkay
NC_Version
NC_ErrorCode
GPS_Nick
GPS_Roll
GPS_Aid_StickMultiplikator
GPSInfo
FromNaviCtrl
FC_StatusFlags
SPI_StartTransmitPacket
SendSPI
StartLuftdruck
Luftdruck
SetParamByte
LED_Update
Capacity_Update
SPI_TransmitByte
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/makefile
0,0 → 1,495
#--------------------------------------------------------------------
# MCU name
MCU = atmega1284p
#MCU = atmega644p
F_CPU = 20000000
#-------------------------------------------------------------------
VERSION_MAJOR = 0
VERSION_MINOR = 90
VERSION_PATCH = 3
VERSION_SERIAL_MAJOR = 11 # Serial Protocol
VERSION_SERIAL_MINOR = 0 # Serial Protocol
NC_SPI_COMPATIBLE = 52 # Navi-Kompatibilität
#-------------------------------------------------------------------
# ATMEGA644: 63487 is maximum
#-------------------------------------------------------------------
# 0 a
# 1 b
# 2 c
# 3 d
# 4 e
# 5 f
# 6 g
# 7 h
# 8 i
# 9 j
# 10 k
# 11 L
#-------------------------------------------------------------------
 
# get SVN revision
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'")
 
ifeq ($(MCU), atmega1284p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA1284P
LIBFC_EXT = 1284
endif
 
ifeq ($(MCU), atmega644p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA644
LIBFC_EXT = 644
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).
 
ifeq ($(VERSION_PATCH), 0)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 1)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 2)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 3)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 4)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 5)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 6)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 7)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 8)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 9)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 10)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 11)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 12)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 13)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 14)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 15)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 16)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 17)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 18)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 19)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 20)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 21)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 22)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 23)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 24)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 25)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV)
endif
 
 
# 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
#OPT = 2
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c
SRC += mymath.c jetimenu.c capacity.c debug.c
SRC += hottmenu.c sbus.c user_receiver.c
SRC += jeti_ex.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 = isqrt.S
 
 
 
# 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
 
# shrink code size
CFLAGS += -mtiny-stack
#CFLAGS += -fno-inline-functions
CFLAGS += -mcall-prologues
 
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE)
 
 
# 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 += libfc$(LIBFC_EXT).a
 
##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 = dt006
#AVRDUDE_PROGRAMMER = stk200
#AVRDUDE_PROGRAMMER = ponyser
AVRDUDE_PROGRAMMER = avrispv2
#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_PORT = usb # programmer connected to USB
 
#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 -c avrispv2 -P usb -p m32 -U flash:w:blink.hex
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) -x -A $(TARGET).elf
LIMITS = $(SIZE) --mcu=$(MCU) -C $(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 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 Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); 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) Flight-Ctrl_*.hex
$(REMOVE) Flight-Ctrl_*.eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) Flight-Ctrl_*.elf
$(REMOVE) Flight-Ctrl_*.map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) Flight-Ctrl_*.sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) $(SRC:.c=.o)
 
 
# 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/v0.90d_Ernstl_6-Motoren+Sexpander/menu.c
0,0 → 1,262
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
#include "eeprom.h"
 
char DisplayBuff[80];
unsigned char DispPtr = 0;
 
unsigned char MaxMenue = 16;
unsigned char MenuePunkt = 0;
unsigned char RemoteKeys = 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_Putchar(char c)
{
if(DispPtr < 80) DisplayBuff[DispPtr++] = c;
}
 
void Menu(void)
{
unsigned char i;
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;}
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;}
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0;
LcdClear();
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);}
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);};
 
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"+ MikroKopter +");
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c V4",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a');
LCD_printfxy(0,2,"Setting:%d %s", GetActiveParamSet(),Mixer.Name);
 
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!")
else
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NC_ErrorCode)
{
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode);
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);
}
else
#endif
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0])
else
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d!!",MissingMotor)
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
#else
else
if(NC_ErrorCode)
{
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode);
}
#endif
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1])
else
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!")
break;
case 1:
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5));
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5));
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck);
LCD_printfxy(0,3,"Offset: %5i",OCR0A);
}
else
{
LCD_printfxy(0,0,"Height control");
LCD_printfxy(0,1,"DISABLED");
//LCD_printfxy(0,2,"Height control");
//LCD_printfxy(0,3,"DISABLED");
}
 
break;
case 2:
LCD_printfxy(0,0,"act. bearing");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Compass: %5i",ErsatzKompassInGrad);
break;
case 3:
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]);
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]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127);
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
if(PlatinenVersion == 10)
{
LCD_printfxy(0,1,"Nick%4i (%3i.%i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/8, AdNeutralNick%8);
LCD_printfxy(0,2,"Roll%4i (%3i.%i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/8, AdNeutralRoll%8);
LCD_printfxy(0,3,"Gier%4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier);
}
else
if((PlatinenVersion == 11) || (PlatinenVersion >= 20))
{
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2);
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2);
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2);
}
else
if(PlatinenVersion == 13)
{
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick);
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll);
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier);
}
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY);
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10);
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower);
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity);
break;
case 8:
LCD_printfxy(0,0,"Receiver");
LCD_printfxy(0,1,"RC-RSSI: %4i", PPM_in[0]);
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay);
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1);
break;
case 9:
LCD_printfxy(0,0,"Compass");
LCD_printfxy(0,1,"Magnet: %5i",KompassValue);
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad);
LCD_printfxy(0,3,"Setpoint: %5i",KompassSollWert);
break;
case 10:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]);
break;
case 11:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]);
break;
case 12:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
/* case 13:
LCD_printfxy(0,0,"ExternControl " );
LCD_printfxy(0,1,"Ni:%4i Ro:%4i ",ExternControl.Nick,ExternControl.Roll);
LCD_printfxy(0,2,"Gs:%4i Gi:%4i ",ExternControl.Gas,ExternControl.Gier);
LCD_printfxy(0,3,"Hi:%4i Cf:%4i ",ExternControl.Hight,ExternControl.Config);
break;
*/
case 13:
LCD_printfxy(0,0,"BL-Ctrl Errors " );
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK);
// if(i*4 >= RequiredMotors) break;
}
break;
case 14:
LCD_printfxy(0,0,"BL Temperature" );
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature);
// if(4 + i * 4 >= RequiredMotors) break;
}
break;
case 15:
LCD_printfxy(0,0,"BL-Ctrl found " );
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7));
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7));
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7));
if(Motor[9].State>>7) LCD_printfxy(4,3,"10");
if(Motor[10].State>>7) LCD_printfxy(8,3,"11");
if(Motor[11].State>>7) LCD_printfxy(12,3,"12");
break;
case 16:
LCD_printfxy(0,0,"Flight-Time " );
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt);
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten);
LCD_printfxy(13,3,"(reset)");
if(RemoteKeys & KEY4)
{
FlugMinuten = 0;
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten);
}
break;
default:
if(MenuePunkt == MaxMenue) MaxMenue--;
MenuePunkt = 0;
break;
}
RemoteKeys = 0;
}
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/menu.h
0,0 → 1,17
#ifndef _MENU_H
#define _MENU_H
 
extern void Menu(void);
extern void LcdClear(void);
extern void Menu_Putchar(char c);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
 
extern unsigned char MaxMenue;
extern unsigned char MenuePunkt;
extern unsigned char RemoteKeys;
 
#define LCD_printfxy(x,y,format, args...) { DispPtr = (y) * 20 + (x); _printf_P(&Menu_Putchar,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(&Menu_Putchar, PSTR(format) , ## args);}
 
#endif //_MENU_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/menu.lst
0,0 → 1,2726
1 .file "menu.c"
2 .arch atmega1284p
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 .global RemoteKeys
11 .global RemoteKeys
12 .section .bss
15 RemoteKeys:
16 0000 00 .skip 1,0
17 .global MenuePunkt
18 .global MenuePunkt
21 MenuePunkt:
22 0001 00 .skip 1,0
23 .global MaxMenue
24 .data
27 MaxMenue:
28 0000 10 .byte 16
29 .global DispPtr
30 .global DispPtr
31 .section .bss
34 DispPtr:
35 0002 00 .skip 1,0
36 .text
37 .global LcdClear
39 LcdClear:
40 /* prologue: frame size=0 */
41 /* prologue end (size=0) */
42 0000 90E2 ldi r25,lo8(32)
43 0002 E0E0 ldi r30,lo8(DisplayBuff)
44 0004 F0E0 ldi r31,hi8(DisplayBuff)
45 0006 8FE4 ldi r24,lo8(79)
46 .L5:
47 0008 9193 st Z+,r25
48 000a 8150 subi r24,lo8(-(-1))
49 000c 87FF sbrs r24,7
50 000e 00C0 rjmp .L5
51 /* epilogue: frame size=0 */
52 0010 0895 ret
53 /* epilogue end (size=1) */
54 /* function LcdClear size 9 (8) */
56 .global Menu_Putchar
58 Menu_Putchar:
59 /* prologue: frame size=0 */
60 /* prologue end (size=0) */
61 0012 9091 0000 lds r25,DispPtr
62 0016 9035 cpi r25,lo8(80)
63 0018 00F4 brsh .L8
64 001a E92F mov r30,r25
65 001c FF27 clr r31
66 001e E050 subi r30,lo8(-(DisplayBuff))
67 0020 F040 sbci r31,hi8(-(DisplayBuff))
68 0022 8083 st Z,r24
69 0024 9F5F subi r25,lo8(-(1))
70 0026 9093 0000 sts DispPtr,r25
71 .L8:
72 002a 0895 ret
73 /* epilogue: frame size=0 */
74 /* epilogue: noreturn */
75 /* epilogue end (size=0) */
76 /* function Menu_Putchar size 13 (13) */
78 .section .progmem.data,"a",@progbits
81 __c.0:
82 0000 5B25 695D .string "[%i]"
82 00
85 __c.1:
86 0005 5B25 695D .string "[%i]"
86 00
89 __c.2:
90 000a 2B20 4D69 .string "+ MikroKopter +"
90 6B72 6F4B
90 6F70 7465
90 7220 2B00
93 __c.3:
94 001a 4857 3A56 .string "HW:V%d.%d SW:%d.%d%c V4"
94 2564 2E25
94 6420 5357
94 3A25 642E
94 2564 2563
97 __c.4:
98 0032 5365 7474 .string "Setting:%d %s"
98 696E 673A
98 2564 2025
98 7300
101 __c.5:
102 0040 4D69 7865 .string "Mixer Error!"
102 7220 4572
102 726F 7221
102 00
105 __c.6:
106 004d 4552 5225 .string "ERR%2d:"
106 3264 3A00
109 __c.7:
110 0055 4861 7264 .string "Hardware Error 1:%d !!"
110 7761 7265
110 2045 7272
110 6F72 2031
110 3A25 6420
113 __c.8:
114 006c 4D69 7373 .string "Missing BL-Ctrl:%d!!"
114 696E 6720
114 424C 2D43
114 7472 6C3A
114 2564 2121
117 __c.9:
118 0081 4932 4320 .string "I2C ERROR!!!"
118 4552 524F
118 5221 2121
118 00
121 __c.10:
122 008e 4865 6967 .string "Height: %5i"
122 6874 3A20
122 2025 3569
122 00
125 __c.11:
126 009b 5365 7470 .string "Setpoint:%5i"
126 6F69 6E74
126 3A25 3569
126 00
129 __c.12:
130 00a8 5072 6573 .string "Pressure:%5i"
130 7375 7265
130 3A25 3569
130 00
133 __c.13:
134 00b5 4F66 6673 .string "Offset: %5i"
134 6574 3A20
134 2025 3569
134 00
137 __c.14:
138 00c2 4865 6967 .string "Height control"
138 6874 2063
138 6F6E 7472
138 6F6C 00
141 __c.15:
142 00d1 4449 5341 .string "DISABLED"
142 424C 4544
142 00
145 __c.16:
146 00da 6163 742E .string "act. bearing"
146 2062 6561
146 7269 6E67
146 00
149 __c.17:
150 00e7 4E69 636B .string "Nick: %5i"
150 3A20 2020
150 2020 2025
150 3569 00
153 __c.18:
154 00f6 526F 6C6C .string "Roll: %5i"
154 3A20 2020
154 2020 2025
154 3569 00
157 __c.19:
158 0105 436F 6D70 .string "Compass: %5i"
158 6173 733A
158 2020 2025
158 3569 00
161 __c.20:
162 0114 4B25 693A .string "K%i:%4i K%i:%4i "
162 2534 6920
162 204B 2569
162 3A25 3469
162 2000
165 __c.21:
166 0126 4E69 3A25 .string "Ni:%4i Ro:%4i "
166 3469 2020
166 526F 3A25
166 3469 2000
169 __c.22:
170 0136 4773 3A25 .string "Gs:%4i Gi:%4i "
170 3469 2020
170 4769 3A25
170 3469 2000
173 __c.23:
174 0146 5031 3A25 .string "P1:%4i P2:%4i "
174 3469 2020
174 5032 3A25
174 3469 2000
177 __c.24:
178 0156 5033 3A25 .string "P3:%4i P4:%4i "
178 3469 2020
178 5034 3A25
178 3469 2000
181 __c.25:
182 0166 4779 726F .string "Gyro - Sensor"
182 202D 2053
182 656E 736F
182 7200
185 __c.26:
186 0174 4E69 636B .string "Nick%4i (%3i.%i)"
186 2534 6920
186 2825 3369
186 2E25 6929
186 00
189 __c.27:
190 0185 526F 6C6C .string "Roll%4i (%3i.%i)"
190 2534 6920
190 2825 3369
190 2E25 6929
190 00
193 __c.28:
194 0196 4769 6572 .string "Gier%4i (%3i)"
194 2534 6920
194 2825 3369
194 2900
197 __c.29:
198 01a4 4E69 636B .string "Nick %4i (%3i.%x)"
198 2025 3469
198 2028 2533
198 692E 2578
198 2900
201 __c.30:
202 01b6 526F 6C6C .string "Roll %4i (%3i.%x)"
202 2025 3469
202 2028 2533
202 692E 2578
202 2900
205 __c.31:
206 01c8 5961 7720 .string "Yaw %4i (%3i)"
206 2025 3469
206 2028 2533
206 6929 00
209 __c.32:
210 01d7 4E69 636B .string "Nick %4i (%3i)(%3i)"
210 2025 3469
210 2028 2533
210 6929 2825
210 3369 2900
213 __c.33:
214 01eb 526F 6C6C .string "Roll %4i (%3i)(%3i)"
214 2025 3469
214 2028 2533
214 6929 2825
214 3369 2900
217 __c.34:
218 01ff 5961 7720 .string "Yaw %4i (%3i)(%3i)"
218 2025 3469
218 2028 2533
218 6929 2825
218 3369 2900
221 __c.35:
222 0213 4143 4320 .string "ACC - Sensor"
222 2D20 5365
222 6E73 6F72
222 00
225 __c.36:
226 0220 4E69 636B .string "Nick %4i (%3i)"
226 2025 3469
226 2028 2533
226 6929 00
229 __c.37:
230 022f 526F 6C6C .string "Roll %4i (%3i)"
230 2025 3469
230 2028 2533
230 6929 00
233 __c.38:
234 023e 5A20 2020 .string "Z %4i (%3i)"
234 2025 3469
234 2028 2533
234 6929 00
237 __c.39:
238 024d 566F 6C74 .string "Voltage: %3i.%1iV"
238 6167 653A
238 2020 2025
238 3369 2E25
238 3169 5600
241 __c.40:
242 0261 4375 7272 .string "Current: %3i.%1iA"
242 656E 743A
242 2020 2025
242 3369 2E25
242 3169 4100
245 __c.41:
246 0275 506F 7765 .string "Power: %4iW"
246 723A 2020
246 2020 2025
246 3469 5700
249 __c.42:
250 0285 4469 7363 .string "Discharge: %5imAh"
250 6861 7267
250 653A 2025
250 3569 6D41
250 6800
253 __c.43:
254 0297 5265 6365 .string "Receiver"
254 6976 6572
254 00
257 __c.44:
258 02a0 5243 2D52 .string "RC-RSSI: %4i"
258 5353 493A
258 2020 2020
258 2534 6900
261 __c.45:
262 02b0 5243 2D51 .string "RC-Quality: %4i"
262 7561 6C69
262 7479 3A20
262 2534 6900
265 __c.46:
266 02c0 5243 2D43 .string "RC-Channels:%4i"
266 6861 6E6E
266 656C 733A
266 2534 6900
269 __c.47:
270 02d0 436F 6D70 .string "Compass"
270 6173 7300
273 __c.48:
274 02d8 4D61 676E .string "Magnet: %5i"
274 6574 3A20
274 2020 2535
274 6900
277 __c.49:
278 02e6 4779 726F .string "Gyro: %5i"
278 3A20 2020
278 2020 2535
278 6900
281 __c.50:
282 02f4 5365 7470 .string "Setpoint: %5i"
282 6F69 6E74
282 3A20 2535
282 6900
285 __c.51:
286 0302 506F 7469 .string "Poti%i: %3i"
286 2569 3A20
286 2025 3369
286 00
289 __c.52:
290 030f 506F 7469 .string "Poti%i: %3i"
290 2569 3A20
290 2025 3369
290 00
293 __c.53:
294 031c 5365 7276 .string "Servo "
294 6F20 2000
297 __c.54:
298 0324 5365 7470 .string "Setpoint %3i"
298 6F69 6E74
298 2020 2533
298 6900
301 __c.55:
302 0332 506F 7369 .string "Position: %3i"
302 7469 6F6E
302 3A20 2533
302 6900
305 __c.56:
306 0340 5261 6E67 .string "Range:%3i-%3i"
306 653A 2533
306 692D 2533
306 6900
309 __c.57:
310 034e 424C 2D43 .string "BL-Ctrl Errors "
310 7472 6C20
310 4572 726F
310 7273 2000
313 __c.58:
314 035e 2533 6420 .string "%3d %3d %3d %3d "
314 2533 6420
314 2533 6420
314 2533 6420
314 00
317 __c.59:
318 036f 424C 2054 .string "BL Temperature"
318 656D 7065
318 7261 7475
318 7265 00
321 __c.60:
322 037e 2533 6420 .string "%3d %3d %3d %3d "
322 2533 6420
322 2533 6420
322 2533 6420
322 00
325 __c.61:
326 038f 424C 2D43 .string "BL-Ctrl found "
326 7472 6C20
326 666F 756E
326 6420 00
329 __c.62:
330 039e 2025 6320 .string " %c %c %c %c "
330 2020 2563
330 2020 2025
330 6320 2020
330 2563 2000
333 __c.63:
334 03b2 2025 6320 .string " %c %c %c %c "
334 2020 2563
334 2020 2025
334 6320 2020
334 2563 2000
337 __c.64:
338 03c6 2025 6320 .string " %c - - - "
338 2020 2D20
338 2020 2D20
338 2020 2D20
338 00
341 __c.65:
342 03d7 3130 00 .string "10"
345 __c.66:
346 03da 3131 00 .string "11"
349 __c.67:
350 03dd 3132 00 .string "12"
353 __c.68:
354 03e0 466C 6967 .string "Flight-Time "
354 6874 2D54
354 696D 6520
354 2000
357 __c.69:
358 03ee 546F 7461 .string "Total:%5umin"
358 6C3A 2535
358 756D 696E
358 00
361 __c.70:
362 03fb 4163 743A .string "Act: %5umin"
362 2020 2535
362 756D 696E
362 00
365 __c.71:
366 0408 2872 6573 .string "(reset)"
366 6574 2900
367 .text
368 .global Menu
370 Menu:
371 /* prologue: frame size=0 */
372 002c AF92 push r10
373 002e BF92 push r11
374 0030 CF92 push r12
375 0032 DF92 push r13
376 0034 FF92 push r15
377 0036 0F93 push r16
378 0038 1F93 push r17
379 003a CF93 push r28
380 003c DF93 push r29
381 /* prologue end (size=9) */
382 003e 2091 0000 lds r18,RemoteKeys
383 0042 20FF sbrs r18,0
384 0044 00C0 rjmp .L11
385 0046 8091 0000 lds r24,MenuePunkt
386 004a 8823 tst r24
387 004c 01F0 breq .L12
388 004e 8150 subi r24,lo8(-(-1))
389 0050 00C0 rjmp .L115
390 .L12:
391 0052 8091 0000 lds r24,MaxMenue
392 .L115:
393 0056 8093 0000 sts MenuePunkt,r24
394 .L11:
395 005a 21FF sbrs r18,1
396 005c 00C0 rjmp .L14
397 005e 9091 0000 lds r25,MenuePunkt
398 0062 8091 0000 lds r24,MaxMenue
399 0066 9817 cp r25,r24
400 0068 01F4 brne .L15
401 006a 1092 0000 sts MenuePunkt,__zero_reg__
402 006e 00C0 rjmp .L14
403 .L15:
404 0070 9F5F subi r25,lo8(-(1))
405 0072 9093 0000 sts MenuePunkt,r25
406 .L14:
407 0076 822F mov r24,r18
408 0078 9927 clr r25
409 007a 80FF sbrs r24,0
410 007c 00C0 rjmp .L17
411 007e 81FF sbrs r24,1
412 0080 00C0 rjmp .L17
413 0082 1092 0000 sts MenuePunkt,__zero_reg__
414 .L17:
415 0086 0E94 0000 call LcdClear
416 008a 8091 0000 lds r24,MenuePunkt
417 008e 282F mov r18,r24
418 0090 3327 clr r19
419 0092 90E0 ldi r25,lo8(pm(Menu_Putchar))
420 0094 C92E mov r12,r25
421 0096 90E0 ldi r25,hi8(pm(Menu_Putchar))
422 0098 D92E mov r13,r25
423 009a C091 0000 lds r28,_printf_P
424 009e D091 0000 lds r29,(_printf_P)+1
425 00a2 8A30 cpi r24,lo8(10)
426 00a4 00F4 brsh .L18
427 00a6 81E1 ldi r24,lo8(17)
428 00a8 8093 0000 sts DispPtr,r24
429 00ac 3F93 push r19
430 00ae 2F93 push r18
431 00b0 80E0 ldi r24,lo8(__c.0)
432 00b2 90E0 ldi r25,hi8(__c.0)
433 00b4 9F93 push r25
434 00b6 8F93 push r24
435 00b8 DF92 push r13
436 00ba CF92 push r12
437 00bc FE01 movw r30,r28
438 00be 0995 icall
439 00c0 2DB7 in r18,__SP_L__
440 00c2 3EB7 in r19,__SP_H__
441 00c4 2A5F subi r18,lo8(-(6))
442 00c6 3F4F sbci r19,hi8(-(6))
443 00c8 2DBF out __SP_L__,r18
444 00ca 00C0 rjmp .L19
445 .L18:
446 00cc 80E1 ldi r24,lo8(16)
447 00ce 8093 0000 sts DispPtr,r24
448 00d2 3F93 push r19
449 00d4 2F93 push r18
450 00d6 80E0 ldi r24,lo8(__c.1)
451 00d8 90E0 ldi r25,hi8(__c.1)
452 00da 9F93 push r25
453 00dc 8F93 push r24
454 00de DF92 push r13
455 00e0 CF92 push r12
456 00e2 FE01 movw r30,r28
457 00e4 0995 icall
458 00e6 8DB7 in r24,__SP_L__
459 00e8 9EB7 in r25,__SP_H__
460 00ea 0696 adiw r24,6
461 00ec 8DBF out __SP_L__,r24
462 .L19:
463 00ee 2091 0000 lds r18,MenuePunkt
464 00f2 822F mov r24,r18
465 00f4 9927 clr r25
466 00f6 AA27 clr r26
467 00f8 BB27 clr r27
468 00fa FC01 movw r30,r24
469 00fc 4197 sbiw r24,17
470 00fe 00F0 brlo .+4
471 0100 0C94 0000 jmp .L102
472 0104 E050 subi r30,lo8(-(pm(.L104)))
473 0106 F040 sbci r31,hi8(-(pm(.L104)))
474 0108 00E0 ldi r16,lo8(pm(Menu_Putchar))
475 010a C02E mov r12,r16
476 010c 00E0 ldi r16,hi8(pm(Menu_Putchar))
477 010e D02E mov r13,r16
478 0110 C091 0000 lds r28,_printf_P
479 0114 D091 0000 lds r29,(_printf_P)+1
480 0118 0C94 0000 jmp __tablejump2__
481 .data
482 .section .progmem.gcc_sw_table, "a", @progbits
483 .p2align 1
484 .L104:
485 0000 0000 .word pm(.L21)
486 0002 0000 .word pm(.L31)
487 0004 0000 .word pm(.L34)
488 0006 0000 .word pm(.L37)
489 0008 0000 .word pm(.L42)
490 000a 0000 .word pm(.L43)
491 000c 0000 .word pm(.L70)
492 000e 0000 .word pm(.L71)
493 0010 0000 .word pm(.L72)
494 0012 0000 .word pm(.L73)
495 0014 0000 .word pm(.L74)
496 0016 0000 .word pm(.L79)
497 0018 0000 .word pm(.L84)
498 001a 0000 .word pm(.L86)
499 001c 0000 .word pm(.L91)
500 001e 0000 .word pm(.L96)
501 0020 0000 .word pm(.L100)
502 .text
503 .L21:
504 011c 1092 0000 sts DispPtr,__zero_reg__
505 0120 80E0 ldi r24,lo8(__c.2)
506 0122 90E0 ldi r25,hi8(__c.2)
507 0124 9F93 push r25
508 0126 8F93 push r24
509 0128 00E0 ldi r16,lo8(pm(Menu_Putchar))
510 012a 10E0 ldi r17,hi8(pm(Menu_Putchar))
511 012c DF92 push r13
512 012e CF92 push r12
513 0130 FE01 movw r30,r28
514 0132 0995 icall
515 0134 84E1 ldi r24,lo8(20)
516 0136 8093 0000 sts DispPtr,r24
517 013a 0F90 pop __tmp_reg__
518 013c 0F90 pop __tmp_reg__
519 013e 0F90 pop __tmp_reg__
520 0140 0F90 pop __tmp_reg__
521 0142 84E6 ldi r24,lo8(100)
522 0144 90E0 ldi r25,hi8(100)
523 0146 9F93 push r25
524 0148 8F93 push r24
525 014a 8AE5 ldi r24,lo8(90)
526 014c 90E0 ldi r25,hi8(90)
527 014e 9F93 push r25
528 0150 8F93 push r24
529 0152 1F92 push __zero_reg__
530 0154 1F92 push __zero_reg__
531 0156 8091 0000 lds r24,PlatinenVersion
532 015a 6AE0 ldi r22,lo8(10)
533 015c 0E94 0000 call __udivmodqi4
534 0160 892F mov r24,r25
535 0162 9927 clr r25
536 0164 9F93 push r25
537 0166 8F93 push r24
538 0168 8091 0000 lds r24,PlatinenVersion
539 016c 0E94 0000 call __udivmodqi4
540 0170 9927 clr r25
541 0172 9F93 push r25
542 0174 8F93 push r24
543 0176 80E0 ldi r24,lo8(__c.3)
544 0178 90E0 ldi r25,hi8(__c.3)
545 017a 9F93 push r25
546 017c 8F93 push r24
547 017e DF92 push r13
548 0180 CF92 push r12
549 0182 E091 0000 lds r30,_printf_P
550 0186 F091 0000 lds r31,(_printf_P)+1
551 018a 0995 icall
552 018c 88E2 ldi r24,lo8(40)
553 018e 8093 0000 sts DispPtr,r24
554 0192 EDB7 in r30,__SP_L__
555 0194 FEB7 in r31,__SP_H__
556 0196 3E96 adiw r30,14
557 0198 EDBF out __SP_L__,r30
558 019a 80E0 ldi r24,lo8(Mixer+1)
559 019c 90E0 ldi r25,hi8(Mixer+1)
560 019e 9F93 push r25
561 01a0 8F93 push r24
562 01a2 0E94 0000 call GetActiveParamSet
563 01a6 9927 clr r25
564 01a8 9F93 push r25
565 01aa 8F93 push r24
566 01ac 80E0 ldi r24,lo8(__c.4)
567 01ae 90E0 ldi r25,hi8(__c.4)
568 01b0 9F93 push r25
569 01b2 8F93 push r24
570 01b4 DF92 push r13
571 01b6 CF92 push r12
572 01b8 E091 0000 lds r30,_printf_P
573 01bc F091 0000 lds r31,(_printf_P)+1
574 01c0 0995 icall
575 01c2 8091 0000 lds r24,VersionInfo+6
576 01c6 9927 clr r25
577 01c8 2DB7 in r18,__SP_L__
578 01ca 3EB7 in r19,__SP_H__
579 01cc 285F subi r18,lo8(-(8))
580 01ce 3F4F sbci r19,hi8(-(8))
581 01d0 2DBF out __SP_L__,r18
582 01d2 EC01 movw r28,r24
583 01d4 C071 andi r28,lo8(16)
584 01d6 D070 andi r29,hi8(16)
585 01d8 84FF sbrs r24,4
586 01da 00C0 rjmp .L22
587 01dc 8CE3 ldi r24,lo8(60)
588 01de 8093 0000 sts DispPtr,r24
589 01e2 80E0 ldi r24,lo8(__c.5)
590 01e4 90E0 ldi r25,hi8(__c.5)
591 01e6 00C0 rjmp .L124
592 .L22:
593 01e8 9091 0000 lds r25,NC_ErrorCode
594 01ec 9923 tst r25
595 01ee 01F0 breq .L24
596 01f0 8CE3 ldi r24,lo8(60)
597 01f2 8093 0000 sts DispPtr,r24
598 01f6 892F mov r24,r25
599 01f8 9927 clr r25
600 01fa 9F93 push r25
601 01fc 8F93 push r24
602 01fe 80E0 ldi r24,lo8(__c.6)
603 0200 90E0 ldi r25,hi8(__c.6)
604 0202 9F93 push r25
605 0204 8F93 push r24
606 0206 1F93 push r17
607 0208 0F93 push r16
608 020a E091 0000 lds r30,_printf_P
609 020e F091 0000 lds r31,(_printf_P)+1
610 0212 0995 icall
611 0214 DF93 push r29
612 0216 CF93 push r28
613 0218 9091 0000 lds r25,NC_ErrorCode
614 021c 81E1 ldi r24,lo8(17)
615 021e 989F mul r25,r24
616 0220 C001 movw r24,r0
617 0222 1124 clr r1
618 0224 8050 subi r24,lo8(-(NC_ERROR_TEXT))
619 0226 9040 sbci r25,hi8(-(NC_ERROR_TEXT))
620 0228 9F93 push r25
621 022a 8F93 push r24
622 022c 1F93 push r17
623 022e 0F93 push r16
624 0230 E091 0000 lds r30,_printf_P
625 0234 F091 0000 lds r31,(_printf_P)+1
626 0238 0995 icall
627 023a 8DB7 in r24,__SP_L__
628 023c 9EB7 in r25,__SP_H__
629 023e 0C96 adiw r24,12
630 0240 00C0 rjmp .L120
631 .L24:
632 0242 9091 0000 lds r25,VersionInfo+5
633 0246 9923 tst r25
634 0248 01F0 breq .L26
635 024a 8CE3 ldi r24,lo8(60)
636 024c 8093 0000 sts DispPtr,r24
637 0250 892F mov r24,r25
638 0252 9927 clr r25
639 0254 9F93 push r25
640 0256 8F93 push r24
641 0258 80E0 ldi r24,lo8(__c.7)
642 025a 90E0 ldi r25,hi8(__c.7)
643 025c 9F93 push r25
644 025e 8F93 push r24
645 0260 1F93 push r17
646 0262 0F93 push r16
647 0264 E091 0000 lds r30,_printf_P
648 0268 F091 0000 lds r31,(_printf_P)+1
649 026c 0995 icall
650 026e EDB7 in r30,__SP_L__
651 0270 FEB7 in r31,__SP_H__
652 0272 3696 adiw r30,6
653 0274 00C0 rjmp .L117
654 .L26:
655 0276 9091 0000 lds r25,MissingMotor
656 027a 9923 tst r25
657 027c 01F0 breq .L28
658 027e 8CE3 ldi r24,lo8(60)
659 0280 8093 0000 sts DispPtr,r24
660 0284 892F mov r24,r25
661 0286 9927 clr r25
662 0288 9F93 push r25
663 028a 8F93 push r24
664 028c 80E0 ldi r24,lo8(__c.8)
665 028e 90E0 ldi r25,hi8(__c.8)
666 0290 9F93 push r25
667 0292 8F93 push r24
668 0294 1F93 push r17
669 0296 0F93 push r16
670 0298 00C0 rjmp .L123
671 .L28:
672 029a 8091 0000 lds r24,I2CTimeout
673 029e 9091 0000 lds r25,(I2CTimeout)+1
674 02a2 0697 sbiw r24,6
675 02a4 00F0 brlo .+4
676 02a6 0C94 0000 jmp .L20
677 02aa 8CE3 ldi r24,lo8(60)
678 02ac 8093 0000 sts DispPtr,r24
679 02b0 80E0 ldi r24,lo8(__c.9)
680 02b2 90E0 ldi r25,hi8(__c.9)
681 02b4 00C0 rjmp .L125
682 .L31:
683 02b6 8091 0000 lds r24,Parameter_GlobalConfig
684 02ba 10E0 ldi r17,lo8(pm(Menu_Putchar))
685 02bc C12E mov r12,r17
686 02be 10E0 ldi r17,hi8(pm(Menu_Putchar))
687 02c0 D12E mov r13,r17
688 02c2 C091 0000 lds r28,_printf_P
689 02c6 D091 0000 lds r29,(_printf_P)+1
690 02ca 80FF sbrs r24,0
691 02cc 00C0 rjmp .L32
692 02ce 1092 0000 sts DispPtr,__zero_reg__
693 02d2 8091 0000 lds r24,HoehenWert
694 02d6 9091 0000 lds r25,(HoehenWert)+1
695 02da A091 0000 lds r26,(HoehenWert)+2
696 02de B091 0000 lds r27,(HoehenWert)+3
697 02e2 BC01 movw r22,r24
698 02e4 CD01 movw r24,r26
699 02e6 25E0 ldi r18,lo8(5)
700 02e8 30E0 ldi r19,hi8(5)
701 02ea 40E0 ldi r20,hlo8(5)
702 02ec 50E0 ldi r21,hhi8(5)
703 02ee 0E94 0000 call __divmodsi4
704 02f2 3F93 push r19
705 02f4 2F93 push r18
706 02f6 80E0 ldi r24,lo8(__c.10)
707 02f8 90E0 ldi r25,hi8(__c.10)
708 02fa 9F93 push r25
709 02fc 8F93 push r24
710 02fe DF92 push r13
711 0300 CF92 push r12
712 0302 FE01 movw r30,r28
713 0304 0995 icall
714 0306 84E1 ldi r24,lo8(20)
715 0308 8093 0000 sts DispPtr,r24
716 030c 8DB7 in r24,__SP_L__
717 030e 9EB7 in r25,__SP_H__
718 0310 0696 adiw r24,6
719 0312 8DBF out __SP_L__,r24
720 0314 8091 0000 lds r24,SollHoehe
721 0318 9091 0000 lds r25,(SollHoehe)+1
722 031c A091 0000 lds r26,(SollHoehe)+2
723 0320 B091 0000 lds r27,(SollHoehe)+3
724 0324 BC01 movw r22,r24
725 0326 CD01 movw r24,r26
726 0328 25E0 ldi r18,lo8(5)
727 032a 30E0 ldi r19,hi8(5)
728 032c 40E0 ldi r20,hlo8(5)
729 032e 50E0 ldi r21,hhi8(5)
730 0330 0E94 0000 call __divmodsi4
731 0334 3F93 push r19
732 0336 2F93 push r18
733 0338 80E0 ldi r24,lo8(__c.11)
734 033a 90E0 ldi r25,hi8(__c.11)
735 033c 9F93 push r25
736 033e 8F93 push r24
737 0340 DF92 push r13
738 0342 CF92 push r12
739 0344 E091 0000 lds r30,_printf_P
740 0348 F091 0000 lds r31,(_printf_P)+1
741 034c 0995 icall
742 034e 88E2 ldi r24,lo8(40)
743 0350 8093 0000 sts DispPtr,r24
744 0354 EDB7 in r30,__SP_L__
745 0356 FEB7 in r31,__SP_H__
746 0358 3696 adiw r30,6
747 035a EDBF out __SP_L__,r30
748 035c 8091 0000 lds r24,MessLuftdruck
749 0360 9091 0000 lds r25,(MessLuftdruck)+1
750 0364 9F93 push r25
751 0366 8F93 push r24
752 0368 80E0 ldi r24,lo8(__c.12)
753 036a 90E0 ldi r25,hi8(__c.12)
754 036c 9F93 push r25
755 036e 8F93 push r24
756 0370 DF92 push r13
757 0372 CF92 push r12
758 0374 E091 0000 lds r30,_printf_P
759 0378 F091 0000 lds r31,(_printf_P)+1
760 037c 0995 icall
761 037e 8CE3 ldi r24,lo8(60)
762 0380 8093 0000 sts DispPtr,r24
763 0384 2DB7 in r18,__SP_L__
764 0386 3EB7 in r19,__SP_H__
765 0388 2A5F subi r18,lo8(-(6))
766 038a 3F4F sbci r19,hi8(-(6))
767 038c 2DBF out __SP_L__,r18
768 038e 87B5 in r24,71-0x20
769 0390 9927 clr r25
770 0392 9F93 push r25
771 0394 8F93 push r24
772 0396 80E0 ldi r24,lo8(__c.13)
773 0398 90E0 ldi r25,hi8(__c.13)
774 039a 9F93 push r25
775 039c 8F93 push r24
776 039e DF92 push r13
777 03a0 CF92 push r12
778 03a2 00C0 rjmp .L119
779 .L32:
780 03a4 1092 0000 sts DispPtr,__zero_reg__
781 03a8 80E0 ldi r24,lo8(__c.14)
782 03aa 90E0 ldi r25,hi8(__c.14)
783 03ac 9F93 push r25
784 03ae 8F93 push r24
785 03b0 DF92 push r13
786 03b2 CF92 push r12
787 03b4 FE01 movw r30,r28
788 03b6 0995 icall
789 03b8 84E1 ldi r24,lo8(20)
790 03ba 8093 0000 sts DispPtr,r24
791 03be 0F90 pop __tmp_reg__
792 03c0 0F90 pop __tmp_reg__
793 03c2 0F90 pop __tmp_reg__
794 03c4 0F90 pop __tmp_reg__
795 03c6 80E0 ldi r24,lo8(__c.15)
796 03c8 90E0 ldi r25,hi8(__c.15)
797 .L124:
798 03ca 9F93 push r25
799 03cc 8F93 push r24
800 03ce DF92 push r13
801 03d0 CF92 push r12
802 03d2 00C0 rjmp .L118
803 .L34:
804 03d4 1092 0000 sts DispPtr,__zero_reg__
805 03d8 80E0 ldi r24,lo8(__c.16)
806 03da 90E0 ldi r25,hi8(__c.16)
807 03dc 9F93 push r25
808 03de 8F93 push r24
809 03e0 00E0 ldi r16,lo8(pm(Menu_Putchar))
810 03e2 10E0 ldi r17,hi8(pm(Menu_Putchar))
811 03e4 DF92 push r13
812 03e6 CF92 push r12
813 03e8 FE01 movw r30,r28
814 03ea 0995 icall
815 03ec 84E1 ldi r24,lo8(20)
816 03ee 8093 0000 sts DispPtr,r24
817 03f2 0F90 pop __tmp_reg__
818 03f4 0F90 pop __tmp_reg__
819 03f6 0F90 pop __tmp_reg__
820 03f8 0F90 pop __tmp_reg__
821 03fa 8091 0000 lds r24,IntegralNick
822 03fe 9091 0000 lds r25,(IntegralNick)+1
823 0402 A091 0000 lds r26,(IntegralNick)+2
824 0406 B091 0000 lds r27,(IntegralNick)+3
825 040a B7FF sbrs r27,7
826 040c 00C0 rjmp .L35
827 040e 8150 subi r24,lo8(-(1023))
828 0410 9C4F sbci r25,hi8(-(1023))
829 0412 AF4F sbci r26,hlo8(-(1023))
830 0414 BF4F sbci r27,hhi8(-(1023))
831 .L35:
832 0416 CAE0 ldi r28,10
833 0418 B595 1: asr r27
834 041a A795 ror r26
835 041c 9795 ror r25
836 041e 8795 ror r24
837 0420 CA95 dec r28
838 0422 01F4 brne 1b
839 0424 BF93 push r27
840 0426 AF93 push r26
841 0428 9F93 push r25
842 042a 8F93 push r24
843 042c 80E0 ldi r24,lo8(__c.17)
844 042e 90E0 ldi r25,hi8(__c.17)
845 0430 9F93 push r25
846 0432 8F93 push r24
847 0434 1F93 push r17
848 0436 0F93 push r16
849 0438 E091 0000 lds r30,_printf_P
850 043c F091 0000 lds r31,(_printf_P)+1
851 0440 0995 icall
852 0442 88E2 ldi r24,lo8(40)
853 0444 8093 0000 sts DispPtr,r24
854 0448 EDB7 in r30,__SP_L__
855 044a FEB7 in r31,__SP_H__
856 044c 3896 adiw r30,8
857 044e EDBF out __SP_L__,r30
858 0450 8091 0000 lds r24,IntegralRoll
859 0454 9091 0000 lds r25,(IntegralRoll)+1
860 0458 A091 0000 lds r26,(IntegralRoll)+2
861 045c B091 0000 lds r27,(IntegralRoll)+3
862 0460 B7FF sbrs r27,7
863 0462 00C0 rjmp .L36
864 0464 8150 subi r24,lo8(-(1023))
865 0466 9C4F sbci r25,hi8(-(1023))
866 0468 AF4F sbci r26,hlo8(-(1023))
867 046a BF4F sbci r27,hhi8(-(1023))
868 .L36:
869 046c FAE0 ldi r31,10
870 046e B595 1: asr r27
871 0470 A795 ror r26
872 0472 9795 ror r25
873 0474 8795 ror r24
874 0476 FA95 dec r31
875 0478 01F4 brne 1b
876 047a BF93 push r27
877 047c AF93 push r26
878 047e 9F93 push r25
879 0480 8F93 push r24
880 0482 80E0 ldi r24,lo8(__c.18)
881 0484 90E0 ldi r25,hi8(__c.18)
882 0486 9F93 push r25
883 0488 8F93 push r24
884 048a 1F93 push r17
885 048c 0F93 push r16
886 048e E091 0000 lds r30,_printf_P
887 0492 F091 0000 lds r31,(_printf_P)+1
888 0496 0995 icall
889 0498 8CE3 ldi r24,lo8(60)
890 049a 8093 0000 sts DispPtr,r24
891 049e 2DB7 in r18,__SP_L__
892 04a0 3EB7 in r19,__SP_H__
893 04a2 285F subi r18,lo8(-(8))
894 04a4 3F4F sbci r19,hi8(-(8))
895 04a6 2DBF out __SP_L__,r18
896 04a8 8091 0000 lds r24,ErsatzKompassInGrad
897 04ac 9091 0000 lds r25,(ErsatzKompassInGrad)+1
898 04b0 9F93 push r25
899 04b2 8F93 push r24
900 04b4 80E0 ldi r24,lo8(__c.19)
901 04b6 90E0 ldi r25,hi8(__c.19)
902 04b8 9F93 push r25
903 04ba 8F93 push r24
904 04bc 1F93 push r17
905 04be 0F93 push r16
906 .L119:
907 04c0 E091 0000 lds r30,_printf_P
908 04c4 F091 0000 lds r31,(_printf_P)+1
909 04c8 0995 icall
910 04ca 8DB7 in r24,__SP_L__
911 04cc 9EB7 in r25,__SP_H__
912 04ce 0696 adiw r24,6
913 .L120:
914 04d0 8DBF out __SP_L__,r24
915 04d2 00C0 rjmp .L20
916 .L37:
917 04d4 E1E0 ldi r30,lo8(1)
918 04d6 FE2E mov r15,r30
919 04d8 C1E0 ldi r28,lo8(1)
920 04da D0E0 ldi r29,hi8(1)
921 04dc 00E0 ldi r16,lo8(PPM_in+2)
922 04de 10E0 ldi r17,hi8(PPM_in+2)
923 .L41:
924 04e0 9F2D mov r25,r15
925 04e2 9695 lsr r25
926 04e4 84E1 ldi r24,lo8(20)
927 04e6 989F mul r25,r24
928 04e8 C001 movw r24,r0
929 04ea 1124 clr r1
930 04ec 8093 0000 sts DispPtr,r24
931 04f0 F801 movw r30,r16
932 04f2 8281 ldd r24,Z+2
933 04f4 9381 ldd r25,Z+3
934 04f6 9F93 push r25
935 04f8 8F93 push r24
936 04fa 2196 adiw r28,1
937 04fc DF93 push r29
938 04fe CF93 push r28
939 0500 2197 sbiw r28,1
940 0502 8081 ld r24,Z
941 0504 9181 ldd r25,Z+1
942 0506 9F93 push r25
943 0508 8F93 push r24
944 050a DF93 push r29
945 050c CF93 push r28
946 050e 80E0 ldi r24,lo8(__c.20)
947 0510 90E0 ldi r25,hi8(__c.20)
948 0512 9F93 push r25
949 0514 8F93 push r24
950 0516 80E0 ldi r24,lo8(pm(Menu_Putchar))
951 0518 90E0 ldi r25,hi8(pm(Menu_Putchar))
952 051a 9F93 push r25
953 051c 8F93 push r24
954 051e E091 0000 lds r30,_printf_P
955 0522 F091 0000 lds r31,(_printf_P)+1
956 0526 0995 icall
957 0528 2DB7 in r18,__SP_L__
958 052a 3EB7 in r19,__SP_H__
959 052c 245F subi r18,lo8(-(12))
960 052e 3F4F sbci r19,hi8(-(12))
961 0530 2DBF out __SP_L__,r18
962 0532 32E0 ldi r19,lo8(2)
963 0534 F30E add r15,r19
964 0536 2296 adiw r28,2
965 0538 0C5F subi r16,lo8(-(4))
966 053a 1F4F sbci r17,hi8(-(4))
967 053c 88E0 ldi r24,lo8(8)
968 053e 8F15 cp r24,r15
969 0540 00F4 brsh .L41
970 0542 00C0 rjmp .L20
971 .L42:
972 0544 1092 0000 sts DispPtr,__zero_reg__
973 0548 8091 0000 lds r24,EE_Parameter+2
974 054c E82F mov r30,r24
975 054e FF27 clr r31
976 0550 EE0F add r30,r30
977 0552 FF1F adc r31,r31
978 0554 E050 subi r30,lo8(-(PPM_in))
979 0556 F040 sbci r31,hi8(-(PPM_in))
980 0558 8081 ld r24,Z
981 055a 9181 ldd r25,Z+1
982 055c 9F93 push r25
983 055e 8F93 push r24
984 0560 8091 0000 lds r24,EE_Parameter+1
985 0564 E82F mov r30,r24
986 0566 FF27 clr r31
987 0568 EE0F add r30,r30
988 056a FF1F adc r31,r31
989 056c E050 subi r30,lo8(-(PPM_in))
990 056e F040 sbci r31,hi8(-(PPM_in))
991 0570 8081 ld r24,Z
992 0572 9181 ldd r25,Z+1
993 0574 9F93 push r25
994 0576 8F93 push r24
995 0578 80E0 ldi r24,lo8(__c.21)
996 057a 90E0 ldi r25,hi8(__c.21)
997 057c 9F93 push r25
998 057e 8F93 push r24
999 0580 DF92 push r13
1000 0582 CF92 push r12
1001 0584 FE01 movw r30,r28
1002 0586 0995 icall
1003 0588 84E1 ldi r24,lo8(20)
1004 058a 8093 0000 sts DispPtr,r24
1005 058e EDB7 in r30,__SP_L__
1006 0590 FEB7 in r31,__SP_H__
1007 0592 3896 adiw r30,8
1008 0594 EDBF out __SP_L__,r30
1009 0596 8091 0000 lds r24,EE_Parameter+4
1010 059a E82F mov r30,r24
1011 059c FF27 clr r31
1012 059e EE0F add r30,r30
1013 05a0 FF1F adc r31,r31
1014 05a2 E050 subi r30,lo8(-(PPM_in))
1015 05a4 F040 sbci r31,hi8(-(PPM_in))
1016 05a6 8081 ld r24,Z
1017 05a8 9181 ldd r25,Z+1
1018 05aa 9F93 push r25
1019 05ac 8F93 push r24
1020 05ae 8091 0000 lds r24,EE_Parameter+3
1021 05b2 E82F mov r30,r24
1022 05b4 FF27 clr r31
1023 05b6 EE0F add r30,r30
1024 05b8 FF1F adc r31,r31
1025 05ba E050 subi r30,lo8(-(PPM_in))
1026 05bc F040 sbci r31,hi8(-(PPM_in))
1027 05be 8081 ld r24,Z
1028 05c0 9181 ldd r25,Z+1
1029 05c2 8158 subi r24,lo8(-(127))
1030 05c4 9F4F sbci r25,hi8(-(127))
1031 05c6 9F93 push r25
1032 05c8 8F93 push r24
1033 05ca 80E0 ldi r24,lo8(__c.22)
1034 05cc 90E0 ldi r25,hi8(__c.22)
1035 05ce 9F93 push r25
1036 05d0 8F93 push r24
1037 05d2 DF92 push r13
1038 05d4 CF92 push r12
1039 05d6 E091 0000 lds r30,_printf_P
1040 05da F091 0000 lds r31,(_printf_P)+1
1041 05de 0995 icall
1042 05e0 88E2 ldi r24,lo8(40)
1043 05e2 8093 0000 sts DispPtr,r24
1044 05e6 2DB7 in r18,__SP_L__
1045 05e8 3EB7 in r19,__SP_H__
1046 05ea 285F subi r18,lo8(-(8))
1047 05ec 3F4F sbci r19,hi8(-(8))
1048 05ee 2DBF out __SP_L__,r18
1049 05f0 8091 0000 lds r24,EE_Parameter+6
1050 05f4 E82F mov r30,r24
1051 05f6 FF27 clr r31
1052 05f8 EE0F add r30,r30
1053 05fa FF1F adc r31,r31
1054 05fc E050 subi r30,lo8(-(PPM_in))
1055 05fe F040 sbci r31,hi8(-(PPM_in))
1056 0600 8081 ld r24,Z
1057 0602 9181 ldd r25,Z+1
1058 0604 8158 subi r24,lo8(-(127))
1059 0606 9F4F sbci r25,hi8(-(127))
1060 0608 9F93 push r25
1061 060a 8F93 push r24
1062 060c 8091 0000 lds r24,EE_Parameter+5
1063 0610 E82F mov r30,r24
1064 0612 FF27 clr r31
1065 0614 EE0F add r30,r30
1066 0616 FF1F adc r31,r31
1067 0618 E050 subi r30,lo8(-(PPM_in))
1068 061a F040 sbci r31,hi8(-(PPM_in))
1069 061c 8081 ld r24,Z
1070 061e 9181 ldd r25,Z+1
1071 0620 8158 subi r24,lo8(-(127))
1072 0622 9F4F sbci r25,hi8(-(127))
1073 0624 9F93 push r25
1074 0626 8F93 push r24
1075 0628 80E0 ldi r24,lo8(__c.23)
1076 062a 90E0 ldi r25,hi8(__c.23)
1077 062c 9F93 push r25
1078 062e 8F93 push r24
1079 0630 DF92 push r13
1080 0632 CF92 push r12
1081 0634 E091 0000 lds r30,_printf_P
1082 0638 F091 0000 lds r31,(_printf_P)+1
1083 063c 0995 icall
1084 063e 8CE3 ldi r24,lo8(60)
1085 0640 8093 0000 sts DispPtr,r24
1086 0644 8DB7 in r24,__SP_L__
1087 0646 9EB7 in r25,__SP_H__
1088 0648 0896 adiw r24,8
1089 064a 8DBF out __SP_L__,r24
1090 064c 8091 0000 lds r24,EE_Parameter+8
1091 0650 E82F mov r30,r24
1092 0652 FF27 clr r31
1093 0654 EE0F add r30,r30
1094 0656 FF1F adc r31,r31
1095 0658 E050 subi r30,lo8(-(PPM_in))
1096 065a F040 sbci r31,hi8(-(PPM_in))
1097 065c 8081 ld r24,Z
1098 065e 9181 ldd r25,Z+1
1099 0660 8158 subi r24,lo8(-(127))
1100 0662 9F4F sbci r25,hi8(-(127))
1101 0664 9F93 push r25
1102 0666 8F93 push r24
1103 0668 8091 0000 lds r24,EE_Parameter+7
1104 066c E82F mov r30,r24
1105 066e FF27 clr r31
1106 0670 EE0F add r30,r30
1107 0672 FF1F adc r31,r31
1108 0674 E050 subi r30,lo8(-(PPM_in))
1109 0676 F040 sbci r31,hi8(-(PPM_in))
1110 0678 8081 ld r24,Z
1111 067a 9181 ldd r25,Z+1
1112 067c 8158 subi r24,lo8(-(127))
1113 067e 9F4F sbci r25,hi8(-(127))
1114 0680 9F93 push r25
1115 0682 8F93 push r24
1116 0684 80E0 ldi r24,lo8(__c.24)
1117 0686 90E0 ldi r25,hi8(__c.24)
1118 0688 00C0 rjmp .L121
1119 .L43:
1120 068a 1092 0000 sts DispPtr,__zero_reg__
1121 068e 80E0 ldi r24,lo8(__c.25)
1122 0690 90E0 ldi r25,hi8(__c.25)
1123 0692 9F93 push r25
1124 0694 8F93 push r24
1125 0696 00E0 ldi r16,lo8(pm(Menu_Putchar))
1126 0698 10E0 ldi r17,hi8(pm(Menu_Putchar))
1127 069a DF92 push r13
1128 069c CF92 push r12
1129 069e FE01 movw r30,r28
1130 06a0 0995 icall
1131 06a2 8091 0000 lds r24,PlatinenVersion
1132 06a6 0F90 pop __tmp_reg__
1133 06a8 0F90 pop __tmp_reg__
1134 06aa 0F90 pop __tmp_reg__
1135 06ac 0F90 pop __tmp_reg__
1136 06ae 8A30 cpi r24,lo8(10)
1137 06b0 01F0 breq .+2
1138 06b2 00C0 rjmp .L44
1139 06b4 84E1 ldi r24,lo8(20)
1140 06b6 8093 0000 sts DispPtr,r24
1141 06ba 8091 0000 lds r24,AdNeutralNick
1142 06be 9091 0000 lds r25,(AdNeutralNick)+1
1143 06c2 9C01 movw r18,r24
1144 06c4 97FF sbrs r25,7
1145 06c6 00C0 rjmp .L45
1146 06c8 295F subi r18,lo8(-(7))
1147 06ca 3F4F sbci r19,hi8(-(7))
1148 .L45:
1149 06cc 287F andi r18,lo8(-8)
1150 06ce 821B sub r24,r18
1151 06d0 930B sbc r25,r19
1152 06d2 9F93 push r25
1153 06d4 8F93 push r24
1154 06d6 8091 0000 lds r24,AdNeutralNick
1155 06da 9091 0000 lds r25,(AdNeutralNick)+1
1156 06de 97FD sbrc r25,7
1157 06e0 0796 adiw r24,7
1158 .L46:
1159 06e2 73E0 ldi r23,3
1160 06e4 9595 1: asr r25
1161 06e6 8795 ror r24
1162 06e8 7A95 dec r23
1163 06ea 01F4 brne 1b
1164 06ec 9F93 push r25
1165 06ee 8F93 push r24
1166 06f0 2091 0000 lds r18,AdNeutralNick
1167 06f4 3091 0000 lds r19,(AdNeutralNick)+1
1168 06f8 37FF sbrs r19,7
1169 06fa 00C0 rjmp .L47
1170 06fc 295F subi r18,lo8(-(7))
1171 06fe 3F4F sbci r19,hi8(-(7))
1172 .L47:
1173 0700 63E0 ldi r22,3
1174 0702 3595 1: asr r19
1175 0704 2795 ror r18
1176 0706 6A95 dec r22
1177 0708 01F4 brne 1b
1178 070a 8091 0000 lds r24,AdWertNick
1179 070e 9091 0000 lds r25,(AdWertNick)+1
1180 0712 821B sub r24,r18
1181 0714 930B sbc r25,r19
1182 0716 9F93 push r25
1183 0718 8F93 push r24
1184 071a 80E0 ldi r24,lo8(__c.26)
1185 071c 90E0 ldi r25,hi8(__c.26)
1186 071e 9F93 push r25
1187 0720 8F93 push r24
1188 0722 1F93 push r17
1189 0724 0F93 push r16
1190 0726 E091 0000 lds r30,_printf_P
1191 072a F091 0000 lds r31,(_printf_P)+1
1192 072e 0995 icall
1193 0730 88E2 ldi r24,lo8(40)
1194 0732 8093 0000 sts DispPtr,r24
1195 0736 2DB7 in r18,__SP_L__
1196 0738 3EB7 in r19,__SP_H__
1197 073a 265F subi r18,lo8(-(10))
1198 073c 3F4F sbci r19,hi8(-(10))
1199 073e 2DBF out __SP_L__,r18
1200 0740 8091 0000 lds r24,AdNeutralRoll
1201 0744 9091 0000 lds r25,(AdNeutralRoll)+1
1202 0748 9C01 movw r18,r24
1203 074a 97FF sbrs r25,7
1204 074c 00C0 rjmp .L48
1205 074e 295F subi r18,lo8(-(7))
1206 0750 3F4F sbci r19,hi8(-(7))
1207 .L48:
1208 0752 287F andi r18,lo8(-8)
1209 0754 821B sub r24,r18
1210 0756 930B sbc r25,r19
1211 0758 9F93 push r25
1212 075a 8F93 push r24
1213 075c 8091 0000 lds r24,AdNeutralRoll
1214 0760 9091 0000 lds r25,(AdNeutralRoll)+1
1215 0764 97FD sbrc r25,7
1216 0766 0796 adiw r24,7
1217 .L49:
1218 0768 53E0 ldi r21,3
1219 076a 9595 1: asr r25
1220 076c 8795 ror r24
1221 076e 5A95 dec r21
1222 0770 01F4 brne 1b
1223 0772 9F93 push r25
1224 0774 8F93 push r24
1225 0776 2091 0000 lds r18,AdNeutralRoll
1226 077a 3091 0000 lds r19,(AdNeutralRoll)+1
1227 077e 37FF sbrs r19,7
1228 0780 00C0 rjmp .L50
1229 0782 295F subi r18,lo8(-(7))
1230 0784 3F4F sbci r19,hi8(-(7))
1231 .L50:
1232 0786 43E0 ldi r20,3
1233 0788 3595 1: asr r19
1234 078a 2795 ror r18
1235 078c 4A95 dec r20
1236 078e 01F4 brne 1b
1237 0790 8091 0000 lds r24,AdWertRoll
1238 0794 9091 0000 lds r25,(AdWertRoll)+1
1239 0798 821B sub r24,r18
1240 079a 930B sbc r25,r19
1241 079c 9F93 push r25
1242 079e 8F93 push r24
1243 07a0 80E0 ldi r24,lo8(__c.27)
1244 07a2 90E0 ldi r25,hi8(__c.27)
1245 07a4 9F93 push r25
1246 07a6 8F93 push r24
1247 07a8 1F93 push r17
1248 07aa 0F93 push r16
1249 07ac E091 0000 lds r30,_printf_P
1250 07b0 F091 0000 lds r31,(_printf_P)+1
1251 07b4 0995 icall
1252 07b6 8CE3 ldi r24,lo8(60)
1253 07b8 8093 0000 sts DispPtr,r24
1254 07bc 8DB7 in r24,__SP_L__
1255 07be 9EB7 in r25,__SP_H__
1256 07c0 0A96 adiw r24,10
1257 07c2 8DBF out __SP_L__,r24
1258 07c4 8091 0000 lds r24,AdNeutralGier
1259 07c8 9091 0000 lds r25,(AdNeutralGier)+1
1260 07cc 9F93 push r25
1261 07ce 8F93 push r24
1262 07d0 8091 0000 lds r24,AdNeutralGier
1263 07d4 9091 0000 lds r25,(AdNeutralGier)+1
1264 07d8 2091 0000 lds r18,AdWertGier
1265 07dc 3091 0000 lds r19,(AdWertGier)+1
1266 07e0 821B sub r24,r18
1267 07e2 930B sbc r25,r19
1268 07e4 9F93 push r25
1269 07e6 8F93 push r24
1270 07e8 80E0 ldi r24,lo8(__c.28)
1271 07ea 90E0 ldi r25,hi8(__c.28)
1272 07ec 00C0 rjmp .L126
1273 .L44:
1274 07ee 8B30 cpi r24,lo8(11)
1275 07f0 01F0 breq .L53
1276 07f2 8431 cpi r24,lo8(20)
1277 07f4 00F4 brsh .+2
1278 07f6 00C0 rjmp .L52
1279 .L53:
1280 07f8 84E1 ldi r24,lo8(20)
1281 07fa 8093 0000 sts DispPtr,r24
1282 07fe 8091 0000 lds r24,AdNeutralNick
1283 0802 9091 0000 lds r25,(AdNeutralNick)+1
1284 0806 9C01 movw r18,r24
1285 0808 97FF sbrs r25,7
1286 080a 00C0 rjmp .L54
1287 080c 215F subi r18,lo8(-(15))
1288 080e 3F4F sbci r19,hi8(-(15))
1289 .L54:
1290 0810 207F andi r18,lo8(-16)
1291 0812 821B sub r24,r18
1292 0814 930B sbc r25,r19
1293 0816 97FD sbrc r25,7
1294 0818 0196 adiw r24,1
1295 .L55:
1296 081a 9595 asr r25
1297 081c 8795 ror r24
1298 081e 9F93 push r25
1299 0820 8F93 push r24
1300 0822 8091 0000 lds r24,AdNeutralNick
1301 0826 9091 0000 lds r25,(AdNeutralNick)+1
1302 082a 97FD sbrc r25,7
1303 082c 0F96 adiw r24,15
1304 .L56:
1305 082e 24E0 ldi r18,4
1306 0830 9595 1: asr r25
1307 0832 8795 ror r24
1308 0834 2A95 dec r18
1309 0836 01F4 brne 1b
1310 0838 9F93 push r25
1311 083a 8F93 push r24
1312 083c 2091 0000 lds r18,AdNeutralNick
1313 0840 3091 0000 lds r19,(AdNeutralNick)+1
1314 0844 37FF sbrs r19,7
1315 0846 00C0 rjmp .L57
1316 0848 295F subi r18,lo8(-(7))
1317 084a 3F4F sbci r19,hi8(-(7))
1318 .L57:
1319 084c C3E0 ldi r28,3
1320 084e 3595 1: asr r19
1321 0850 2795 ror r18
1322 0852 CA95 dec r28
1323 0854 01F4 brne 1b
1324 0856 8091 0000 lds r24,AdWertNick
1325 085a 9091 0000 lds r25,(AdWertNick)+1
1326 085e 821B sub r24,r18
1327 0860 930B sbc r25,r19
1328 0862 9F93 push r25
1329 0864 8F93 push r24
1330 0866 80E0 ldi r24,lo8(__c.29)
1331 0868 90E0 ldi r25,hi8(__c.29)
1332 086a 9F93 push r25
1333 086c 8F93 push r24
1334 086e 1F93 push r17
1335 0870 0F93 push r16
1336 0872 E091 0000 lds r30,_printf_P
1337 0876 F091 0000 lds r31,(_printf_P)+1
1338 087a 0995 icall
1339 087c 88E2 ldi r24,lo8(40)
1340 087e 8093 0000 sts DispPtr,r24
1341 0882 2DB7 in r18,__SP_L__
1342 0884 3EB7 in r19,__SP_H__
1343 0886 265F subi r18,lo8(-(10))
1344 0888 3F4F sbci r19,hi8(-(10))
1345 088a 2DBF out __SP_L__,r18
1346 088c 8091 0000 lds r24,AdNeutralRoll
1347 0890 9091 0000 lds r25,(AdNeutralRoll)+1
1348 0894 9C01 movw r18,r24
1349 0896 97FF sbrs r25,7
1350 0898 00C0 rjmp .L58
1351 089a 215F subi r18,lo8(-(15))
1352 089c 3F4F sbci r19,hi8(-(15))
1353 .L58:
1354 089e 207F andi r18,lo8(-16)
1355 08a0 821B sub r24,r18
1356 08a2 930B sbc r25,r19
1357 08a4 97FD sbrc r25,7
1358 08a6 0196 adiw r24,1
1359 .L59:
1360 08a8 9595 asr r25
1361 08aa 8795 ror r24
1362 08ac 9F93 push r25
1363 08ae 8F93 push r24
1364 08b0 8091 0000 lds r24,AdNeutralRoll
1365 08b4 9091 0000 lds r25,(AdNeutralRoll)+1
1366 08b8 97FD sbrc r25,7
1367 08ba 0F96 adiw r24,15
1368 .L60:
1369 08bc A4E0 ldi r26,4
1370 08be 9595 1: asr r25
1371 08c0 8795 ror r24
1372 08c2 AA95 dec r26
1373 08c4 01F4 brne 1b
1374 08c6 9F93 push r25
1375 08c8 8F93 push r24
1376 08ca 2091 0000 lds r18,AdNeutralRoll
1377 08ce 3091 0000 lds r19,(AdNeutralRoll)+1
1378 08d2 37FF sbrs r19,7
1379 08d4 00C0 rjmp .L61
1380 08d6 295F subi r18,lo8(-(7))
1381 08d8 3F4F sbci r19,hi8(-(7))
1382 .L61:
1383 08da F3E0 ldi r31,3
1384 08dc 3595 1: asr r19
1385 08de 2795 ror r18
1386 08e0 FA95 dec r31
1387 08e2 01F4 brne 1b
1388 08e4 8091 0000 lds r24,AdWertRoll
1389 08e8 9091 0000 lds r25,(AdWertRoll)+1
1390 08ec 821B sub r24,r18
1391 08ee 930B sbc r25,r19
1392 08f0 9F93 push r25
1393 08f2 8F93 push r24
1394 08f4 80E0 ldi r24,lo8(__c.30)
1395 08f6 90E0 ldi r25,hi8(__c.30)
1396 08f8 9F93 push r25
1397 08fa 8F93 push r24
1398 08fc 1F93 push r17
1399 08fe 0F93 push r16
1400 0900 E091 0000 lds r30,_printf_P
1401 0904 F091 0000 lds r31,(_printf_P)+1
1402 0908 0995 icall
1403 090a 8CE3 ldi r24,lo8(60)
1404 090c 8093 0000 sts DispPtr,r24
1405 0910 8DB7 in r24,__SP_L__
1406 0912 9EB7 in r25,__SP_H__
1407 0914 0A96 adiw r24,10
1408 0916 8DBF out __SP_L__,r24
1409 0918 8091 0000 lds r24,AdNeutralGier
1410 091c 9091 0000 lds r25,(AdNeutralGier)+1
1411 0920 97FD sbrc r25,7
1412 0922 0196 adiw r24,1
1413 .L62:
1414 0924 9595 asr r25
1415 0926 8795 ror r24
1416 0928 9F93 push r25
1417 092a 8F93 push r24
1418 092c 8091 0000 lds r24,AdNeutralGier
1419 0930 9091 0000 lds r25,(AdNeutralGier)+1
1420 0934 2091 0000 lds r18,AdWertGier
1421 0938 3091 0000 lds r19,(AdWertGier)+1
1422 093c 821B sub r24,r18
1423 093e 930B sbc r25,r19
1424 0940 9F93 push r25
1425 0942 8F93 push r24
1426 0944 80E0 ldi r24,lo8(__c.31)
1427 0946 90E0 ldi r25,hi8(__c.31)
1428 .L126:
1429 0948 9F93 push r25
1430 094a 8F93 push r24
1431 094c 1F93 push r17
1432 094e 0F93 push r16
1433 0950 00C0 rjmp .L122
1434 .L52:
1435 0952 8D30 cpi r24,lo8(13)
1436 0954 01F0 breq .+2
1437 0956 00C0 rjmp .L20
1438 0958 84E1 ldi r24,lo8(20)
1439 095a 8093 0000 sts DispPtr,r24
1440 095e 8091 0000 lds r24,AnalogOffsetNick
1441 0962 9927 clr r25
1442 0964 9F93 push r25
1443 0966 8F93 push r24
1444 0968 8091 0000 lds r24,AdNeutralNick
1445 096c 9091 0000 lds r25,(AdNeutralNick)+1
1446 0970 97FD sbrc r25,7
1447 0972 0F96 adiw r24,15
1448 .L65:
1449 0974 74E0 ldi r23,4
1450 0976 9595 1: asr r25
1451 0978 8795 ror r24
1452 097a 7A95 dec r23
1453 097c 01F4 brne 1b
1454 097e 9F93 push r25
1455 0980 8F93 push r24
1456 0982 2091 0000 lds r18,AdNeutralNick
1457 0986 3091 0000 lds r19,(AdNeutralNick)+1
1458 098a 37FF sbrs r19,7
1459 098c 00C0 rjmp .L66
1460 098e 295F subi r18,lo8(-(7))
1461 0990 3F4F sbci r19,hi8(-(7))
1462 .L66:
1463 0992 63E0 ldi r22,3
1464 0994 3595 1: asr r19
1465 0996 2795 ror r18
1466 0998 6A95 dec r22
1467 099a 01F4 brne 1b
1468 099c 8091 0000 lds r24,AdWertNick
1469 09a0 9091 0000 lds r25,(AdWertNick)+1
1470 09a4 821B sub r24,r18
1471 09a6 930B sbc r25,r19
1472 09a8 9F93 push r25
1473 09aa 8F93 push r24
1474 09ac 80E0 ldi r24,lo8(__c.32)
1475 09ae 90E0 ldi r25,hi8(__c.32)
1476 09b0 9F93 push r25
1477 09b2 8F93 push r24
1478 09b4 1F93 push r17
1479 09b6 0F93 push r16
1480 09b8 E091 0000 lds r30,_printf_P
1481 09bc F091 0000 lds r31,(_printf_P)+1
1482 09c0 0995 icall
1483 09c2 88E2 ldi r24,lo8(40)
1484 09c4 8093 0000 sts DispPtr,r24
1485 09c8 2DB7 in r18,__SP_L__
1486 09ca 3EB7 in r19,__SP_H__
1487 09cc 265F subi r18,lo8(-(10))
1488 09ce 3F4F sbci r19,hi8(-(10))
1489 09d0 2DBF out __SP_L__,r18
1490 09d2 8091 0000 lds r24,AnalogOffsetRoll
1491 09d6 9927 clr r25
1492 09d8 9F93 push r25
1493 09da 8F93 push r24
1494 09dc 8091 0000 lds r24,AdNeutralRoll
1495 09e0 9091 0000 lds r25,(AdNeutralRoll)+1
1496 09e4 97FD sbrc r25,7
1497 09e6 0F96 adiw r24,15
1498 .L67:
1499 09e8 54E0 ldi r21,4
1500 09ea 9595 1: asr r25
1501 09ec 8795 ror r24
1502 09ee 5A95 dec r21
1503 09f0 01F4 brne 1b
1504 09f2 9F93 push r25
1505 09f4 8F93 push r24
1506 09f6 2091 0000 lds r18,AdNeutralRoll
1507 09fa 3091 0000 lds r19,(AdNeutralRoll)+1
1508 09fe 37FF sbrs r19,7
1509 0a00 00C0 rjmp .L68
1510 0a02 295F subi r18,lo8(-(7))
1511 0a04 3F4F sbci r19,hi8(-(7))
1512 .L68:
1513 0a06 43E0 ldi r20,3
1514 0a08 3595 1: asr r19
1515 0a0a 2795 ror r18
1516 0a0c 4A95 dec r20
1517 0a0e 01F4 brne 1b
1518 0a10 8091 0000 lds r24,AdWertRoll
1519 0a14 9091 0000 lds r25,(AdWertRoll)+1
1520 0a18 821B sub r24,r18
1521 0a1a 930B sbc r25,r19
1522 0a1c 9F93 push r25
1523 0a1e 8F93 push r24
1524 0a20 80E0 ldi r24,lo8(__c.33)
1525 0a22 90E0 ldi r25,hi8(__c.33)
1526 0a24 9F93 push r25
1527 0a26 8F93 push r24
1528 0a28 1F93 push r17
1529 0a2a 0F93 push r16
1530 0a2c E091 0000 lds r30,_printf_P
1531 0a30 F091 0000 lds r31,(_printf_P)+1
1532 0a34 0995 icall
1533 0a36 8CE3 ldi r24,lo8(60)
1534 0a38 8093 0000 sts DispPtr,r24
1535 0a3c 8DB7 in r24,__SP_L__
1536 0a3e 9EB7 in r25,__SP_H__
1537 0a40 0A96 adiw r24,10
1538 0a42 8DBF out __SP_L__,r24
1539 0a44 8091 0000 lds r24,AnalogOffsetGier
1540 0a48 9927 clr r25
1541 0a4a 9F93 push r25
1542 0a4c 8F93 push r24
1543 0a4e 8091 0000 lds r24,AdNeutralGier
1544 0a52 9091 0000 lds r25,(AdNeutralGier)+1
1545 0a56 97FD sbrc r25,7
1546 0a58 0196 adiw r24,1
1547 .L69:
1548 0a5a 9595 asr r25
1549 0a5c 8795 ror r24
1550 0a5e 9F93 push r25
1551 0a60 8F93 push r24
1552 0a62 8091 0000 lds r24,AdNeutralGier
1553 0a66 9091 0000 lds r25,(AdNeutralGier)+1
1554 0a6a 2091 0000 lds r18,AdWertGier
1555 0a6e 3091 0000 lds r19,(AdWertGier)+1
1556 0a72 821B sub r24,r18
1557 0a74 930B sbc r25,r19
1558 0a76 9F93 push r25
1559 0a78 8F93 push r24
1560 0a7a 80E0 ldi r24,lo8(__c.34)
1561 0a7c 90E0 ldi r25,hi8(__c.34)
1562 0a7e 9F93 push r25
1563 0a80 8F93 push r24
1564 0a82 1F93 push r17
1565 0a84 0F93 push r16
1566 0a86 E091 0000 lds r30,_printf_P
1567 0a8a F091 0000 lds r31,(_printf_P)+1
1568 0a8e 0995 icall
1569 0a90 EDB7 in r30,__SP_L__
1570 0a92 FEB7 in r31,__SP_H__
1571 0a94 3A96 adiw r30,10
1572 0a96 00C0 rjmp .L117
1573 .L70:
1574 0a98 1092 0000 sts DispPtr,__zero_reg__
1575 0a9c 80E0 ldi r24,lo8(__c.35)
1576 0a9e 90E0 ldi r25,hi8(__c.35)
1577 0aa0 9F93 push r25
1578 0aa2 8F93 push r24
1579 0aa4 DF92 push r13
1580 0aa6 CF92 push r12
1581 0aa8 FE01 movw r30,r28
1582 0aaa 0995 icall
1583 0aac 84E1 ldi r24,lo8(20)
1584 0aae 8093 0000 sts DispPtr,r24
1585 0ab2 0F90 pop __tmp_reg__
1586 0ab4 0F90 pop __tmp_reg__
1587 0ab6 0F90 pop __tmp_reg__
1588 0ab8 0F90 pop __tmp_reg__
1589 0aba 8091 0000 lds r24,NeutralAccX
1590 0abe 9091 0000 lds r25,(NeutralAccX)+1
1591 0ac2 9F93 push r25
1592 0ac4 8F93 push r24
1593 0ac6 8091 0000 lds r24,AdWertAccNick
1594 0aca 9091 0000 lds r25,(AdWertAccNick)+1
1595 0ace 9F93 push r25
1596 0ad0 8F93 push r24
1597 0ad2 80E0 ldi r24,lo8(__c.36)
1598 0ad4 90E0 ldi r25,hi8(__c.36)
1599 0ad6 9F93 push r25
1600 0ad8 8F93 push r24
1601 0ada DF92 push r13
1602 0adc CF92 push r12
1603 0ade E091 0000 lds r30,_printf_P
1604 0ae2 F091 0000 lds r31,(_printf_P)+1
1605 0ae6 0995 icall
1606 0ae8 88E2 ldi r24,lo8(40)
1607 0aea 8093 0000 sts DispPtr,r24
1608 0aee 2DB7 in r18,__SP_L__
1609 0af0 3EB7 in r19,__SP_H__
1610 0af2 285F subi r18,lo8(-(8))
1611 0af4 3F4F sbci r19,hi8(-(8))
1612 0af6 2DBF out __SP_L__,r18
1613 0af8 8091 0000 lds r24,NeutralAccY
1614 0afc 9091 0000 lds r25,(NeutralAccY)+1
1615 0b00 9F93 push r25
1616 0b02 8F93 push r24
1617 0b04 8091 0000 lds r24,AdWertAccRoll
1618 0b08 9091 0000 lds r25,(AdWertAccRoll)+1
1619 0b0c 9F93 push r25
1620 0b0e 8F93 push r24
1621 0b10 80E0 ldi r24,lo8(__c.37)
1622 0b12 90E0 ldi r25,hi8(__c.37)
1623 0b14 9F93 push r25
1624 0b16 8F93 push r24
1625 0b18 DF92 push r13
1626 0b1a CF92 push r12
1627 0b1c E091 0000 lds r30,_printf_P
1628 0b20 F091 0000 lds r31,(_printf_P)+1
1629 0b24 0995 icall
1630 0b26 8CE3 ldi r24,lo8(60)
1631 0b28 8093 0000 sts DispPtr,r24
1632 0b2c 8DB7 in r24,__SP_L__
1633 0b2e 9EB7 in r25,__SP_H__
1634 0b30 0896 adiw r24,8
1635 0b32 8DBF out __SP_L__,r24
1636 0b34 8091 0000 lds r24,NeutralAccZ
1637 0b38 9091 0000 lds r25,(NeutralAccZ)+1
1638 0b3c 9F93 push r25
1639 0b3e 8F93 push r24
1640 0b40 8091 0000 lds r24,AdWertAccHoch
1641 0b44 9091 0000 lds r25,(AdWertAccHoch)+1
1642 0b48 9F93 push r25
1643 0b4a 8F93 push r24
1644 0b4c 80E0 ldi r24,lo8(__c.38)
1645 0b4e 90E0 ldi r25,hi8(__c.38)
1646 .L121:
1647 0b50 9F93 push r25
1648 0b52 8F93 push r24
1649 0b54 DF92 push r13
1650 0b56 CF92 push r12
1651 .L122:
1652 0b58 E091 0000 lds r30,_printf_P
1653 0b5c F091 0000 lds r31,(_printf_P)+1
1654 0b60 0995 icall
1655 0b62 EDB7 in r30,__SP_L__
1656 0b64 FEB7 in r31,__SP_H__
1657 0b66 3896 adiw r30,8
1658 .L117:
1659 0b68 EDBF out __SP_L__,r30
1660 0b6a 00C0 rjmp .L20
1661 .L71:
1662 0b6c 1092 0000 sts DispPtr,__zero_reg__
1663 0b70 8091 0000 lds r24,UBat
1664 0b74 9091 0000 lds r25,(UBat)+1
1665 0b78 6AE0 ldi r22,lo8(10)
1666 0b7a 70E0 ldi r23,hi8(10)
1667 0b7c 0E94 0000 call __divmodhi4
1668 0b80 9F93 push r25
1669 0b82 8F93 push r24
1670 0b84 8091 0000 lds r24,UBat
1671 0b88 9091 0000 lds r25,(UBat)+1
1672 0b8c 6AE0 ldi r22,lo8(10)
1673 0b8e 70E0 ldi r23,hi8(10)
1674 0b90 0E94 0000 call __divmodhi4
1675 0b94 7F93 push r23
1676 0b96 6F93 push r22
1677 0b98 80E0 ldi r24,lo8(__c.39)
1678 0b9a 90E0 ldi r25,hi8(__c.39)
1679 0b9c 9F93 push r25
1680 0b9e 8F93 push r24
1681 0ba0 DF92 push r13
1682 0ba2 CF92 push r12
1683 0ba4 FE01 movw r30,r28
1684 0ba6 0995 icall
1685 0ba8 84E1 ldi r24,lo8(20)
1686 0baa 8093 0000 sts DispPtr,r24
1687 0bae 2DB7 in r18,__SP_L__
1688 0bb0 3EB7 in r19,__SP_H__
1689 0bb2 285F subi r18,lo8(-(8))
1690 0bb4 3F4F sbci r19,hi8(-(8))
1691 0bb6 2DBF out __SP_L__,r18
1692 0bb8 8091 0000 lds r24,Capacity
1693 0bbc 9091 0000 lds r25,(Capacity)+1
1694 0bc0 6AE0 ldi r22,lo8(10)
1695 0bc2 70E0 ldi r23,hi8(10)
1696 0bc4 0E94 0000 call __udivmodhi4
1697 0bc8 9F93 push r25
1698 0bca 8F93 push r24
1699 0bcc 8091 0000 lds r24,Capacity
1700 0bd0 9091 0000 lds r25,(Capacity)+1
1701 0bd4 6AE0 ldi r22,lo8(10)
1702 0bd6 70E0 ldi r23,hi8(10)
1703 0bd8 0E94 0000 call __udivmodhi4
1704 0bdc 7F93 push r23
1705 0bde 6F93 push r22
1706 0be0 80E0 ldi r24,lo8(__c.40)
1707 0be2 90E0 ldi r25,hi8(__c.40)
1708 0be4 9F93 push r25
1709 0be6 8F93 push r24
1710 0be8 DF92 push r13
1711 0bea CF92 push r12
1712 0bec E091 0000 lds r30,_printf_P
1713 0bf0 F091 0000 lds r31,(_printf_P)+1
1714 0bf4 0995 icall
1715 0bf6 88E2 ldi r24,lo8(40)
1716 0bf8 8093 0000 sts DispPtr,r24
1717 0bfc 8DB7 in r24,__SP_L__
1718 0bfe 9EB7 in r25,__SP_H__
1719 0c00 0896 adiw r24,8
1720 0c02 8DBF out __SP_L__,r24
1721 0c04 8091 0000 lds r24,Capacity+2
1722 0c08 9091 0000 lds r25,(Capacity+2)+1
1723 0c0c 9F93 push r25
1724 0c0e 8F93 push r24
1725 0c10 80E0 ldi r24,lo8(__c.41)
1726 0c12 90E0 ldi r25,hi8(__c.41)
1727 0c14 9F93 push r25
1728 0c16 8F93 push r24
1729 0c18 DF92 push r13
1730 0c1a CF92 push r12
1731 0c1c E091 0000 lds r30,_printf_P
1732 0c20 F091 0000 lds r31,(_printf_P)+1
1733 0c24 0995 icall
1734 0c26 8CE3 ldi r24,lo8(60)
1735 0c28 8093 0000 sts DispPtr,r24
1736 0c2c EDB7 in r30,__SP_L__
1737 0c2e FEB7 in r31,__SP_H__
1738 0c30 3696 adiw r30,6
1739 0c32 EDBF out __SP_L__,r30
1740 0c34 8091 0000 lds r24,Capacity+4
1741 0c38 9091 0000 lds r25,(Capacity+4)+1
1742 0c3c 9F93 push r25
1743 0c3e 8F93 push r24
1744 0c40 80E0 ldi r24,lo8(__c.42)
1745 0c42 90E0 ldi r25,hi8(__c.42)
1746 .L127:
1747 0c44 9F93 push r25
1748 0c46 8F93 push r24
1749 0c48 DF92 push r13
1750 0c4a CF92 push r12
1751 .L123:
1752 0c4c E091 0000 lds r30,_printf_P
1753 0c50 F091 0000 lds r31,(_printf_P)+1
1754 0c54 0995 icall
1755 0c56 2DB7 in r18,__SP_L__
1756 0c58 3EB7 in r19,__SP_H__
1757 0c5a 2A5F subi r18,lo8(-(6))
1758 0c5c 3F4F sbci r19,hi8(-(6))
1759 0c5e 00C0 rjmp .L116
1760 .L72:
1761 0c60 1092 0000 sts DispPtr,__zero_reg__
1762 0c64 80E0 ldi r24,lo8(__c.43)
1763 0c66 90E0 ldi r25,hi8(__c.43)
1764 0c68 9F93 push r25
1765 0c6a 8F93 push r24
1766 0c6c DF92 push r13
1767 0c6e CF92 push r12
1768 0c70 FE01 movw r30,r28
1769 0c72 0995 icall
1770 0c74 84E1 ldi r24,lo8(20)
1771 0c76 8093 0000 sts DispPtr,r24
1772 0c7a 0F90 pop __tmp_reg__
1773 0c7c 0F90 pop __tmp_reg__
1774 0c7e 0F90 pop __tmp_reg__
1775 0c80 0F90 pop __tmp_reg__
1776 0c82 8091 0000 lds r24,PPM_in
1777 0c86 9091 0000 lds r25,(PPM_in)+1
1778 0c8a 9F93 push r25
1779 0c8c 8F93 push r24
1780 0c8e 80E0 ldi r24,lo8(__c.44)
1781 0c90 90E0 ldi r25,hi8(__c.44)
1782 0c92 9F93 push r25
1783 0c94 8F93 push r24
1784 0c96 DF92 push r13
1785 0c98 CF92 push r12
1786 0c9a E091 0000 lds r30,_printf_P
1787 0c9e F091 0000 lds r31,(_printf_P)+1
1788 0ca2 0995 icall
1789 0ca4 88E2 ldi r24,lo8(40)
1790 0ca6 8093 0000 sts DispPtr,r24
1791 0caa 8DB7 in r24,__SP_L__
1792 0cac 9EB7 in r25,__SP_H__
1793 0cae 0696 adiw r24,6
1794 0cb0 8DBF out __SP_L__,r24
1795 0cb2 8091 0000 lds r24,SenderOkay
1796 0cb6 9927 clr r25
1797 0cb8 9F93 push r25
1798 0cba 8F93 push r24
1799 0cbc 80E0 ldi r24,lo8(__c.45)
1800 0cbe 90E0 ldi r25,hi8(__c.45)
1801 0cc0 9F93 push r25
1802 0cc2 8F93 push r24
1803 0cc4 DF92 push r13
1804 0cc6 CF92 push r12
1805 0cc8 E091 0000 lds r30,_printf_P
1806 0ccc F091 0000 lds r31,(_printf_P)+1
1807 0cd0 0995 icall
1808 0cd2 8CE3 ldi r24,lo8(60)
1809 0cd4 8093 0000 sts DispPtr,r24
1810 0cd8 EDB7 in r30,__SP_L__
1811 0cda FEB7 in r31,__SP_H__
1812 0cdc 3696 adiw r30,6
1813 0cde EDBF out __SP_L__,r30
1814 0ce0 8091 0000 lds r24,Channels
1815 0ce4 9927 clr r25
1816 0ce6 0197 sbiw r24,1
1817 0ce8 9F93 push r25
1818 0cea 8F93 push r24
1819 0cec 80E0 ldi r24,lo8(__c.46)
1820 0cee 90E0 ldi r25,hi8(__c.46)
1821 0cf0 00C0 rjmp .L127
1822 .L73:
1823 0cf2 1092 0000 sts DispPtr,__zero_reg__
1824 0cf6 80E0 ldi r24,lo8(__c.47)
1825 0cf8 90E0 ldi r25,hi8(__c.47)
1826 0cfa 9F93 push r25
1827 0cfc 8F93 push r24
1828 0cfe DF92 push r13
1829 0d00 CF92 push r12
1830 0d02 FE01 movw r30,r28
1831 0d04 0995 icall
1832 0d06 84E1 ldi r24,lo8(20)
1833 0d08 8093 0000 sts DispPtr,r24
1834 0d0c 0F90 pop __tmp_reg__
1835 0d0e 0F90 pop __tmp_reg__
1836 0d10 0F90 pop __tmp_reg__
1837 0d12 0F90 pop __tmp_reg__
1838 0d14 8091 0000 lds r24,KompassValue
1839 0d18 9091 0000 lds r25,(KompassValue)+1
1840 0d1c 9F93 push r25
1841 0d1e 8F93 push r24
1842 0d20 80E0 ldi r24,lo8(__c.48)
1843 0d22 90E0 ldi r25,hi8(__c.48)
1844 0d24 9F93 push r25
1845 0d26 8F93 push r24
1846 0d28 DF92 push r13
1847 0d2a CF92 push r12
1848 0d2c E091 0000 lds r30,_printf_P
1849 0d30 F091 0000 lds r31,(_printf_P)+1
1850 0d34 0995 icall
1851 0d36 88E2 ldi r24,lo8(40)
1852 0d38 8093 0000 sts DispPtr,r24
1853 0d3c 8DB7 in r24,__SP_L__
1854 0d3e 9EB7 in r25,__SP_H__
1855 0d40 0696 adiw r24,6
1856 0d42 8DBF out __SP_L__,r24
1857 0d44 8091 0000 lds r24,ErsatzKompassInGrad
1858 0d48 9091 0000 lds r25,(ErsatzKompassInGrad)+1
1859 0d4c 9F93 push r25
1860 0d4e 8F93 push r24
1861 0d50 80E0 ldi r24,lo8(__c.49)
1862 0d52 90E0 ldi r25,hi8(__c.49)
1863 0d54 9F93 push r25
1864 0d56 8F93 push r24
1865 0d58 DF92 push r13
1866 0d5a CF92 push r12
1867 0d5c E091 0000 lds r30,_printf_P
1868 0d60 F091 0000 lds r31,(_printf_P)+1
1869 0d64 0995 icall
1870 0d66 8CE3 ldi r24,lo8(60)
1871 0d68 8093 0000 sts DispPtr,r24
1872 0d6c EDB7 in r30,__SP_L__
1873 0d6e FEB7 in r31,__SP_H__
1874 0d70 3696 adiw r30,6
1875 0d72 EDBF out __SP_L__,r30
1876 0d74 8091 0000 lds r24,KompassSollWert
1877 0d78 9091 0000 lds r25,(KompassSollWert)+1
1878 0d7c 9F93 push r25
1879 0d7e 8F93 push r24
1880 0d80 80E0 ldi r24,lo8(__c.50)
1881 0d82 90E0 ldi r25,hi8(__c.50)
1882 0d84 00C0 rjmp .L127
1883 .L74:
1884 0d86 C0E0 ldi r28,lo8(Poti)
1885 0d88 CC2E mov r12,r28
1886 0d8a C0E0 ldi r28,hi8(Poti)
1887 0d8c DC2E mov r13,r28
1888 0d8e 20E0 ldi r18,lo8(0)
1889 0d90 30E0 ldi r19,hi8(0)
1890 0d92 E901 movw r28,r18
1891 0d94 B3E0 ldi r27,lo8(3)
1892 0d96 FB2E mov r15,r27
1893 .L78:
1894 0d98 C093 0000 sts DispPtr,r28
1895 0d9c F601 movw r30,r12
1896 0d9e 8191 ld r24,Z+
1897 0da0 6F01 movw r12,r30
1898 0da2 9927 clr r25
1899 0da4 9F93 push r25
1900 0da6 8F93 push r24
1901 0da8 8901 movw r16,r18
1902 0daa 0F5F subi r16,lo8(-(1))
1903 0dac 1F4F sbci r17,hi8(-(1))
1904 0dae 1F93 push r17
1905 0db0 0F93 push r16
1906 0db2 80E0 ldi r24,lo8(__c.51)
1907 0db4 90E0 ldi r25,hi8(__c.51)
1908 0db6 9F93 push r25
1909 0db8 8F93 push r24
1910 0dba 80E0 ldi r24,lo8(pm(Menu_Putchar))
1911 0dbc 90E0 ldi r25,hi8(pm(Menu_Putchar))
1912 0dbe 9F93 push r25
1913 0dc0 8F93 push r24
1914 0dc2 E091 0000 lds r30,_printf_P
1915 0dc6 F091 0000 lds r31,(_printf_P)+1
1916 0dca 0995 icall
1917 0dcc 2DB7 in r18,__SP_L__
1918 0dce 3EB7 in r19,__SP_H__
1919 0dd0 285F subi r18,lo8(-(8))
1920 0dd2 3F4F sbci r19,hi8(-(8))
1921 0dd4 2DBF out __SP_L__,r18
1922 0dd6 FA94 dec r15
1923 0dd8 6496 adiw r28,20
1924 0dda 9801 movw r18,r16
1925 0ddc F7FE sbrs r15,7
1926 0dde 00C0 rjmp .L78
1927 0de0 00C0 rjmp .L20
1928 .L79:
1929 0de2 A0E0 ldi r26,lo8(Poti+4)
1930 0de4 CA2E mov r12,r26
1931 0de6 A0E0 ldi r26,hi8(Poti+4)
1932 0de8 DA2E mov r13,r26
1933 0dea C0E0 ldi r28,lo8(0)
1934 0dec D0E0 ldi r29,hi8(0)
1935 0dee 8E01 movw r16,r28
1936 0df0 F3E0 ldi r31,lo8(3)
1937 0df2 FF2E mov r15,r31
1938 .L83:
1939 0df4 0093 0000 sts DispPtr,r16
1940 0df8 F601 movw r30,r12
1941 0dfa 8191 ld r24,Z+
1942 0dfc 6F01 movw r12,r30
1943 0dfe 9927 clr r25
1944 0e00 9F93 push r25
1945 0e02 8F93 push r24
1946 0e04 2596 adiw r28,5
1947 0e06 DF93 push r29
1948 0e08 CF93 push r28
1949 0e0a 80E0 ldi r24,lo8(__c.52)
1950 0e0c 90E0 ldi r25,hi8(__c.52)
1951 0e0e 9F93 push r25
1952 0e10 8F93 push r24
1953 0e12 80E0 ldi r24,lo8(pm(Menu_Putchar))
1954 0e14 90E0 ldi r25,hi8(pm(Menu_Putchar))
1955 0e16 9F93 push r25
1956 0e18 8F93 push r24
1957 0e1a E091 0000 lds r30,_printf_P
1958 0e1e F091 0000 lds r31,(_printf_P)+1
1959 0e22 0995 icall
1960 0e24 2DB7 in r18,__SP_L__
1961 0e26 3EB7 in r19,__SP_H__
1962 0e28 285F subi r18,lo8(-(8))
1963 0e2a 3F4F sbci r19,hi8(-(8))
1964 0e2c 2DBF out __SP_L__,r18
1965 0e2e FA94 dec r15
1966 0e30 0C5E subi r16,lo8(-(20))
1967 0e32 1F4F sbci r17,hi8(-(20))
1968 0e34 2497 sbiw r28,4
1969 0e36 F7FE sbrs r15,7
1970 0e38 00C0 rjmp .L83
1971 0e3a 00C0 rjmp .L20
1972 .L84:
1973 0e3c 1092 0000 sts DispPtr,__zero_reg__
1974 0e40 80E0 ldi r24,lo8(__c.53)
1975 0e42 90E0 ldi r25,hi8(__c.53)
1976 0e44 9F93 push r25
1977 0e46 8F93 push r24
1978 0e48 00E0 ldi r16,lo8(pm(Menu_Putchar))
1979 0e4a 10E0 ldi r17,hi8(pm(Menu_Putchar))
1980 0e4c DF92 push r13
1981 0e4e CF92 push r12
1982 0e50 FE01 movw r30,r28
1983 0e52 0995 icall
1984 0e54 84E1 ldi r24,lo8(20)
1985 0e56 8093 0000 sts DispPtr,r24
1986 0e5a 0F90 pop __tmp_reg__
1987 0e5c 0F90 pop __tmp_reg__
1988 0e5e 0F90 pop __tmp_reg__
1989 0e60 0F90 pop __tmp_reg__
1990 0e62 8091 0000 lds r24,Parameter_ServoNickControl
1991 0e66 9927 clr r25
1992 0e68 9F93 push r25
1993 0e6a 8F93 push r24
1994 0e6c 80E0 ldi r24,lo8(__c.54)
1995 0e6e 90E0 ldi r25,hi8(__c.54)
1996 0e70 9F93 push r25
1997 0e72 8F93 push r24
1998 0e74 DF92 push r13
1999 0e76 CF92 push r12
2000 0e78 E091 0000 lds r30,_printf_P
2001 0e7c F091 0000 lds r31,(_printf_P)+1
2002 0e80 0995 icall
2003 0e82 88E2 ldi r24,lo8(40)
2004 0e84 8093 0000 sts DispPtr,r24
2005 0e88 8DB7 in r24,__SP_L__
2006 0e8a 9EB7 in r25,__SP_H__
2007 0e8c 0696 adiw r24,6
2008 0e8e 8DBF out __SP_L__,r24
2009 0e90 8091 0000 lds r24,ServoNickValue
2010 0e94 9091 0000 lds r25,(ServoNickValue)+1
2011 0e98 97FD sbrc r25,7
2012 0e9a 0396 adiw r24,3
2013 .L85:
2014 0e9c 9595 asr r25
2015 0e9e 8795 ror r24
2016 0ea0 9595 asr r25
2017 0ea2 8795 ror r24
2018 0ea4 9F93 push r25
2019 0ea6 8F93 push r24
2020 0ea8 80E0 ldi r24,lo8(__c.55)
2021 0eaa 90E0 ldi r25,hi8(__c.55)
2022 0eac 9F93 push r25
2023 0eae 8F93 push r24
2024 0eb0 1F93 push r17
2025 0eb2 0F93 push r16
2026 0eb4 E091 0000 lds r30,_printf_P
2027 0eb8 F091 0000 lds r31,(_printf_P)+1
2028 0ebc 0995 icall
2029 0ebe 8CE3 ldi r24,lo8(60)
2030 0ec0 8093 0000 sts DispPtr,r24
2031 0ec4 EDB7 in r30,__SP_L__
2032 0ec6 FEB7 in r31,__SP_H__
2033 0ec8 3696 adiw r30,6
2034 0eca EDBF out __SP_L__,r30
2035 0ecc 8091 0000 lds r24,EE_Parameter+48
2036 0ed0 9927 clr r25
2037 0ed2 9F93 push r25
2038 0ed4 8F93 push r24
2039 0ed6 8091 0000 lds r24,EE_Parameter+47
2040 0eda 9927 clr r25
2041 0edc 9F93 push r25
2042 0ede 8F93 push r24
2043 0ee0 80E0 ldi r24,lo8(__c.56)
2044 0ee2 90E0 ldi r25,hi8(__c.56)
2045 0ee4 9F93 push r25
2046 0ee6 8F93 push r24
2047 0ee8 1F93 push r17
2048 0eea 0F93 push r16
2049 0eec E091 0000 lds r30,_printf_P
2050 0ef0 F091 0000 lds r31,(_printf_P)+1
2051 0ef4 0995 icall
2052 0ef6 2DB7 in r18,__SP_L__
2053 0ef8 3EB7 in r19,__SP_H__
2054 0efa 285F subi r18,lo8(-(8))
2055 0efc 3F4F sbci r19,hi8(-(8))
2056 .L116:
2057 0efe 2DBF out __SP_L__,r18
2058 0f00 00C0 rjmp .L20
2059 .L86:
2060 0f02 1092 0000 sts DispPtr,__zero_reg__
2061 0f06 80E0 ldi r24,lo8(__c.57)
2062 0f08 90E0 ldi r25,hi8(__c.57)
2063 0f0a 9F93 push r25
2064 0f0c 8F93 push r24
2065 0f0e 70E0 ldi r23,lo8(pm(Menu_Putchar))
2066 0f10 A72E mov r10,r23
2067 0f12 70E0 ldi r23,hi8(pm(Menu_Putchar))
2068 0f14 B72E mov r11,r23
2069 0f16 DF92 push r13
2070 0f18 CF92 push r12
2071 0f1a FE01 movw r30,r28
2072 0f1c 0995 icall
2073 0f1e 0F90 pop __tmp_reg__
2074 0f20 0F90 pop __tmp_reg__
2075 0f22 0F90 pop __tmp_reg__
2076 0f24 0F90 pop __tmp_reg__
2077 0f26 C0E0 ldi r28,lo8(Motor)
2078 0f28 D0E0 ldi r29,hi8(Motor)
2079 0f2a 00E0 ldi r16,lo8(0)
2080 0f2c 10E0 ldi r17,hi8(0)
2081 0f2e 62E0 ldi r22,lo8(2)
2082 0f30 F62E mov r15,r22
2083 .L90:
2084 0f32 802F mov r24,r16
2085 0f34 8C5E subi r24,lo8(-(20))
2086 0f36 8093 0000 sts DispPtr,r24
2087 0f3a 8B8D ldd r24,Y+27
2088 0f3c 9927 clr r25
2089 0f3e 8F77 andi r24,lo8(127)
2090 0f40 9070 andi r25,hi8(127)
2091 0f42 9F93 push r25
2092 0f44 8F93 push r24
2093 0f46 8B89 ldd r24,Y+19
2094 0f48 9927 clr r25
2095 0f4a 8F77 andi r24,lo8(127)
2096 0f4c 9070 andi r25,hi8(127)
2097 0f4e 9F93 push r25
2098 0f50 8F93 push r24
2099 0f52 8B85 ldd r24,Y+11
2100 0f54 9927 clr r25
2101 0f56 8F77 andi r24,lo8(127)
2102 0f58 9070 andi r25,hi8(127)
2103 0f5a 9F93 push r25
2104 0f5c 8F93 push r24
2105 0f5e 8B81 ldd r24,Y+3
2106 0f60 9927 clr r25
2107 0f62 8F77 andi r24,lo8(127)
2108 0f64 9070 andi r25,hi8(127)
2109 0f66 9F93 push r25
2110 0f68 8F93 push r24
2111 0f6a 80E0 ldi r24,lo8(__c.58)
2112 0f6c 90E0 ldi r25,hi8(__c.58)
2113 0f6e 9F93 push r25
2114 0f70 8F93 push r24
2115 0f72 BF92 push r11
2116 0f74 AF92 push r10
2117 0f76 E091 0000 lds r30,_printf_P
2118 0f7a F091 0000 lds r31,(_printf_P)+1
2119 0f7e 0995 icall
2120 0f80 8DB7 in r24,__SP_L__
2121 0f82 9EB7 in r25,__SP_H__
2122 0f84 0C96 adiw r24,12
2123 0f86 8DBF out __SP_L__,r24
2124 0f88 FA94 dec r15
2125 0f8a 0C5E subi r16,lo8(-(20))
2126 0f8c 1F4F sbci r17,hi8(-(20))
2127 0f8e A096 adiw r28,32
2128 0f90 F7FE sbrs r15,7
2129 0f92 00C0 rjmp .L90
2130 0f94 00C0 rjmp .L20
2131 .L91:
2132 0f96 1092 0000 sts DispPtr,__zero_reg__
2133 0f9a 80E0 ldi r24,lo8(__c.59)
2134 0f9c 90E0 ldi r25,hi8(__c.59)
2135 0f9e 9F93 push r25
2136 0fa0 8F93 push r24
2137 0fa2 50E0 ldi r21,lo8(pm(Menu_Putchar))
2138 0fa4 A52E mov r10,r21
2139 0fa6 50E0 ldi r21,hi8(pm(Menu_Putchar))
2140 0fa8 B52E mov r11,r21
2141 0faa DF92 push r13
2142 0fac CF92 push r12
2143 0fae FE01 movw r30,r28
2144 0fb0 0995 icall
2145 0fb2 0F90 pop __tmp_reg__
2146 0fb4 0F90 pop __tmp_reg__
2147 0fb6 0F90 pop __tmp_reg__
2148 0fb8 0F90 pop __tmp_reg__
2149 0fba C0E0 ldi r28,lo8(Motor)
2150 0fbc D0E0 ldi r29,hi8(Motor)
2151 0fbe 00E0 ldi r16,lo8(0)
2152 0fc0 10E0 ldi r17,hi8(0)
2153 0fc2 42E0 ldi r20,lo8(2)
2154 0fc4 F42E mov r15,r20
2155 .L95:
2156 0fc6 802F mov r24,r16
2157 0fc8 8C5E subi r24,lo8(-(20))
2158 0fca 8093 0000 sts DispPtr,r24
2159 0fce 8F8D ldd r24,Y+31
2160 0fd0 9927 clr r25
2161 0fd2 87FD sbrc r24,7
2162 0fd4 9095 com r25
2163 0fd6 9F93 push r25
2164 0fd8 8F93 push r24
2165 0fda 8F89 ldd r24,Y+23
2166 0fdc 9927 clr r25
2167 0fde 87FD sbrc r24,7
2168 0fe0 9095 com r25
2169 0fe2 9F93 push r25
2170 0fe4 8F93 push r24
2171 0fe6 8F85 ldd r24,Y+15
2172 0fe8 9927 clr r25
2173 0fea 87FD sbrc r24,7
2174 0fec 9095 com r25
2175 0fee 9F93 push r25
2176 0ff0 8F93 push r24
2177 0ff2 8F81 ldd r24,Y+7
2178 0ff4 9927 clr r25
2179 0ff6 87FD sbrc r24,7
2180 0ff8 9095 com r25
2181 0ffa 9F93 push r25
2182 0ffc 8F93 push r24
2183 0ffe 80E0 ldi r24,lo8(__c.60)
2184 1000 90E0 ldi r25,hi8(__c.60)
2185 1002 9F93 push r25
2186 1004 8F93 push r24
2187 1006 BF92 push r11
2188 1008 AF92 push r10
2189 100a E091 0000 lds r30,_printf_P
2190 100e F091 0000 lds r31,(_printf_P)+1
2191 1012 0995 icall
2192 1014 EDB7 in r30,__SP_L__
2193 1016 FEB7 in r31,__SP_H__
2194 1018 3C96 adiw r30,12
2195 101a EDBF out __SP_L__,r30
2196 101c FA94 dec r15
2197 101e 0C5E subi r16,lo8(-(20))
2198 1020 1F4F sbci r17,hi8(-(20))
2199 1022 A096 adiw r28,32
2200 1024 F7FE sbrs r15,7
2201 1026 00C0 rjmp .L95
2202 1028 00C0 rjmp .L20
2203 .L96:
2204 102a 1092 0000 sts DispPtr,__zero_reg__
2205 102e 80E0 ldi r24,lo8(__c.61)
2206 1030 90E0 ldi r25,hi8(__c.61)
2207 1032 9F93 push r25
2208 1034 8F93 push r24
2209 1036 00E0 ldi r16,lo8(pm(Menu_Putchar))
2210 1038 10E0 ldi r17,hi8(pm(Menu_Putchar))
2211 103a DF92 push r13
2212 103c CF92 push r12
2213 103e FE01 movw r30,r28
2214 1040 0995 icall
2215 1042 84E1 ldi r24,lo8(20)
2216 1044 8093 0000 sts DispPtr,r24
2217 1048 0F90 pop __tmp_reg__
2218 104a 0F90 pop __tmp_reg__
2219 104c 0F90 pop __tmp_reg__
2220 104e 0F90 pop __tmp_reg__
2221 1050 8091 0000 lds r24,Motor+27
2222 1054 881F rol r24
2223 1056 8827 clr r24
2224 1058 881F rol r24
2225 105a 97E0 ldi r25,lo8(7)
2226 105c 899F mul r24,r25
2227 105e C001 movw r24,r0
2228 1060 1124 clr r1
2229 1062 8D96 adiw r24,45
2230 1064 9F93 push r25
2231 1066 8F93 push r24
2232 1068 8091 0000 lds r24,Motor+19
2233 106c 881F rol r24
2234 106e 8827 clr r24
2235 1070 881F rol r24
2236 1072 96E0 ldi r25,lo8(6)
2237 1074 899F mul r24,r25
2238 1076 C001 movw r24,r0
2239 1078 1124 clr r1
2240 107a 8D96 adiw r24,45
2241 107c 9F93 push r25
2242 107e 8F93 push r24
2243 1080 8091 0000 lds r24,Motor+11
2244 1084 881F rol r24
2245 1086 8827 clr r24
2246 1088 881F rol r24
2247 108a 95E0 ldi r25,lo8(5)
2248 108c 899F mul r24,r25
2249 108e C001 movw r24,r0
2250 1090 1124 clr r1
2251 1092 8D96 adiw r24,45
2252 1094 9F93 push r25
2253 1096 8F93 push r24
2254 1098 8091 0000 lds r24,Motor+3
2255 109c 881F rol r24
2256 109e 8827 clr r24
2257 10a0 881F rol r24
2258 10a2 9927 clr r25
2259 10a4 880F lsl r24
2260 10a6 991F rol r25
2261 10a8 880F lsl r24
2262 10aa 991F rol r25
2263 10ac 8D96 adiw r24,45
2264 10ae 9F93 push r25
2265 10b0 8F93 push r24
2266 10b2 80E0 ldi r24,lo8(__c.62)
2267 10b4 90E0 ldi r25,hi8(__c.62)
2268 10b6 9F93 push r25
2269 10b8 8F93 push r24
2270 10ba DF92 push r13
2271 10bc CF92 push r12
2272 10be E091 0000 lds r30,_printf_P
2273 10c2 F091 0000 lds r31,(_printf_P)+1
2274 10c6 0995 icall
2275 10c8 88E2 ldi r24,lo8(40)
2276 10ca 8093 0000 sts DispPtr,r24
2277 10ce 2DB7 in r18,__SP_L__
2278 10d0 3EB7 in r19,__SP_H__
2279 10d2 245F subi r18,lo8(-(12))
2280 10d4 3F4F sbci r19,hi8(-(12))
2281 10d6 2DBF out __SP_L__,r18
2282 10d8 8091 0000 lds r24,Motor+59
2283 10dc 881F rol r24
2284 10de 8827 clr r24
2285 10e0 881F rol r24
2286 10e2 9BE0 ldi r25,lo8(11)
2287 10e4 899F mul r24,r25
2288 10e6 C001 movw r24,r0
2289 10e8 1124 clr r1
2290 10ea 8D96 adiw r24,45
2291 10ec 9F93 push r25
2292 10ee 8F93 push r24
2293 10f0 8091 0000 lds r24,Motor+51
2294 10f4 881F rol r24
2295 10f6 8827 clr r24
2296 10f8 881F rol r24
2297 10fa 9AE0 ldi r25,lo8(10)
2298 10fc 899F mul r24,r25
2299 10fe C001 movw r24,r0
2300 1100 1124 clr r1
2301 1102 8D96 adiw r24,45
2302 1104 9F93 push r25
2303 1106 8F93 push r24
2304 1108 8091 0000 lds r24,Motor+43
2305 110c 881F rol r24
2306 110e 8827 clr r24
2307 1110 881F rol r24
2308 1112 99E0 ldi r25,lo8(9)
2309 1114 899F mul r24,r25
2310 1116 C001 movw r24,r0
2311 1118 1124 clr r1
2312 111a 8D96 adiw r24,45
2313 111c 9F93 push r25
2314 111e 8F93 push r24
2315 1120 8091 0000 lds r24,Motor+35
2316 1124 881F rol r24
2317 1126 8827 clr r24
2318 1128 881F rol r24
2319 112a 9927 clr r25
2320 112c 23E0 ldi r18,3
2321 112e 880F 1: lsl r24
2322 1130 991F rol r25
2323 1132 2A95 dec r18
2324 1134 01F4 brne 1b
2325 1136 8D96 adiw r24,45
2326 1138 9F93 push r25
2327 113a 8F93 push r24
2328 113c 80E0 ldi r24,lo8(__c.63)
2329 113e 90E0 ldi r25,hi8(__c.63)
2330 1140 9F93 push r25
2331 1142 8F93 push r24
2332 1144 DF92 push r13
2333 1146 CF92 push r12
2334 1148 E091 0000 lds r30,_printf_P
2335 114c F091 0000 lds r31,(_printf_P)+1
2336 1150 0995 icall
2337 1152 8CE3 ldi r24,lo8(60)
2338 1154 8093 0000 sts DispPtr,r24
2339 1158 8DB7 in r24,__SP_L__
2340 115a 9EB7 in r25,__SP_H__
2341 115c 0C96 adiw r24,12
2342 115e 8DBF out __SP_L__,r24
2343 1160 8091 0000 lds r24,Motor+67
2344 1164 881F rol r24
2345 1166 8827 clr r24
2346 1168 881F rol r24
2347 116a 9CE0 ldi r25,lo8(12)
2348 116c 899F mul r24,r25
2349 116e C001 movw r24,r0
2350 1170 1124 clr r1
2351 1172 8D96 adiw r24,45
2352 1174 9F93 push r25
2353 1176 8F93 push r24
2354 1178 80E0 ldi r24,lo8(__c.64)
2355 117a 90E0 ldi r25,hi8(__c.64)
2356 117c 9F93 push r25
2357 117e 8F93 push r24
2358 1180 DF92 push r13
2359 1182 CF92 push r12
2360 1184 E091 0000 lds r30,_printf_P
2361 1188 F091 0000 lds r31,(_printf_P)+1
2362 118c 0995 icall
2363 118e 8091 0000 lds r24,Motor+75
2364 1192 EDB7 in r30,__SP_L__
2365 1194 FEB7 in r31,__SP_H__
2366 1196 3696 adiw r30,6
2367 1198 EDBF out __SP_L__,r30
2368 119a 87FF sbrs r24,7
2369 119c 00C0 rjmp .L97
2370 119e 80E4 ldi r24,lo8(64)
2371 11a0 8093 0000 sts DispPtr,r24
2372 11a4 80E0 ldi r24,lo8(__c.65)
2373 11a6 90E0 ldi r25,hi8(__c.65)
2374 11a8 9F93 push r25
2375 11aa 8F93 push r24
2376 11ac DF92 push r13
2377 11ae CF92 push r12
2378 11b0 E091 0000 lds r30,_printf_P
2379 11b4 F091 0000 lds r31,(_printf_P)+1
2380 11b8 0995 icall
2381 11ba 0F90 pop __tmp_reg__
2382 11bc 0F90 pop __tmp_reg__
2383 11be 0F90 pop __tmp_reg__
2384 11c0 0F90 pop __tmp_reg__
2385 .L97:
2386 11c2 8091 0000 lds r24,Motor+83
2387 11c6 87FF sbrs r24,7
2388 11c8 00C0 rjmp .L98
2389 11ca 84E4 ldi r24,lo8(68)
2390 11cc 8093 0000 sts DispPtr,r24
2391 11d0 80E0 ldi r24,lo8(__c.66)
2392 11d2 90E0 ldi r25,hi8(__c.66)
2393 11d4 9F93 push r25
2394 11d6 8F93 push r24
2395 11d8 1F93 push r17
2396 11da 0F93 push r16
2397 11dc E091 0000 lds r30,_printf_P
2398 11e0 F091 0000 lds r31,(_printf_P)+1
2399 11e4 0995 icall
2400 11e6 0F90 pop __tmp_reg__
2401 11e8 0F90 pop __tmp_reg__
2402 11ea 0F90 pop __tmp_reg__
2403 11ec 0F90 pop __tmp_reg__
2404 .L98:
2405 11ee 8091 0000 lds r24,Motor+91
2406 11f2 87FF sbrs r24,7
2407 11f4 00C0 rjmp .L20
2408 11f6 88E4 ldi r24,lo8(72)
2409 11f8 8093 0000 sts DispPtr,r24
2410 11fc 80E0 ldi r24,lo8(__c.67)
2411 11fe 90E0 ldi r25,hi8(__c.67)
2412 .L125:
2413 1200 9F93 push r25
2414 1202 8F93 push r24
2415 1204 1F93 push r17
2416 1206 0F93 push r16
2417 .L118:
2418 1208 E091 0000 lds r30,_printf_P
2419 120c F091 0000 lds r31,(_printf_P)+1
2420 1210 0995 icall
2421 1212 0F90 pop __tmp_reg__
2422 1214 0F90 pop __tmp_reg__
2423 1216 0F90 pop __tmp_reg__
2424 1218 0F90 pop __tmp_reg__
2425 121a 00C0 rjmp .L20
2426 .L100:
2427 121c 1092 0000 sts DispPtr,__zero_reg__
2428 1220 80E0 ldi r24,lo8(__c.68)
2429 1222 90E0 ldi r25,hi8(__c.68)
2430 1224 9F93 push r25
2431 1226 8F93 push r24
2432 1228 DF92 push r13
2433 122a CF92 push r12
2434 122c FE01 movw r30,r28
2435 122e 0995 icall
2436 1230 84E1 ldi r24,lo8(20)
2437 1232 8093 0000 sts DispPtr,r24
2438 1236 0F90 pop __tmp_reg__
2439 1238 0F90 pop __tmp_reg__
2440 123a 0F90 pop __tmp_reg__
2441 123c 0F90 pop __tmp_reg__
2442 123e 8091 0000 lds r24,FlugMinutenGesamt
2443 1242 9091 0000 lds r25,(FlugMinutenGesamt)+1
2444 1246 9F93 push r25
2445 1248 8F93 push r24
2446 124a 80E0 ldi r24,lo8(__c.69)
2447 124c 90E0 ldi r25,hi8(__c.69)
2448 124e 9F93 push r25
2449 1250 8F93 push r24
2450 1252 DF92 push r13
2451 1254 CF92 push r12
2452 1256 E091 0000 lds r30,_printf_P
2453 125a F091 0000 lds r31,(_printf_P)+1
2454 125e 0995 icall
2455 1260 88E2 ldi r24,lo8(40)
2456 1262 8093 0000 sts DispPtr,r24
2457 1266 2DB7 in r18,__SP_L__
2458 1268 3EB7 in r19,__SP_H__
2459 126a 2A5F subi r18,lo8(-(6))
2460 126c 3F4F sbci r19,hi8(-(6))
2461 126e 2DBF out __SP_L__,r18
2462 1270 8091 0000 lds r24,FlugMinuten
2463 1274 9091 0000 lds r25,(FlugMinuten)+1
2464 1278 9F93 push r25
2465 127a 8F93 push r24
2466 127c 80E0 ldi r24,lo8(__c.70)
2467 127e 90E0 ldi r25,hi8(__c.70)
2468 1280 9F93 push r25
2469 1282 8F93 push r24
2470 1284 DF92 push r13
2471 1286 CF92 push r12
2472 1288 E091 0000 lds r30,_printf_P
2473 128c F091 0000 lds r31,(_printf_P)+1
2474 1290 0995 icall
2475 1292 89E4 ldi r24,lo8(73)
2476 1294 8093 0000 sts DispPtr,r24
2477 1298 8DB7 in r24,__SP_L__
2478 129a 9EB7 in r25,__SP_H__
2479 129c 0696 adiw r24,6
2480 129e 8DBF out __SP_L__,r24
2481 12a0 80E0 ldi r24,lo8(__c.71)
2482 12a2 90E0 ldi r25,hi8(__c.71)
2483 12a4 9F93 push r25
2484 12a6 8F93 push r24
2485 12a8 DF92 push r13
2486 12aa CF92 push r12
2487 12ac E091 0000 lds r30,_printf_P
2488 12b0 F091 0000 lds r31,(_printf_P)+1
2489 12b4 0995 icall
2490 12b6 8091 0000 lds r24,RemoteKeys
2491 12ba 0F90 pop __tmp_reg__
2492 12bc 0F90 pop __tmp_reg__
2493 12be 0F90 pop __tmp_reg__
2494 12c0 0F90 pop __tmp_reg__
2495 12c2 83FF sbrs r24,3
2496 12c4 00C0 rjmp .L20
2497 12c6 1092 0000 sts (FlugMinuten)+1,__zero_reg__
2498 12ca 1092 0000 sts FlugMinuten,__zero_reg__
2499 12ce 60E0 ldi r22,lo8(0)
2500 12d0 70E0 ldi r23,hi8(0)
2501 12d2 8EE0 ldi r24,lo8(14)
2502 12d4 90E0 ldi r25,hi8(14)
2503 12d6 0E94 0000 call SetParamWord
2504 12da 00C0 rjmp .L20
2505 .L102:
2506 12dc 8091 0000 lds r24,MaxMenue
2507 12e0 2817 cp r18,r24
2508 12e2 01F4 brne .L103
2509 12e4 2150 subi r18,lo8(-(-1))
2510 12e6 2093 0000 sts MaxMenue,r18
2511 .L103:
2512 12ea 1092 0000 sts MenuePunkt,__zero_reg__
2513 .L20:
2514 12ee 1092 0000 sts RemoteKeys,__zero_reg__
2515 /* epilogue: frame size=0 */
2516 12f2 DF91 pop r29
2517 12f4 CF91 pop r28
2518 12f6 1F91 pop r17
2519 12f8 0F91 pop r16
2520 12fa FF90 pop r15
2521 12fc DF90 pop r13
2522 12fe CF90 pop r12
2523 1300 BF90 pop r11
2524 1302 AF90 pop r10
2525 1304 0895 ret
2526 /* epilogue end (size=10) */
2527 /* function Menu size 2447 (2428) */
2529 .comm DisplayBuff,80,1
2530 /* File "menu.c": code 2469 = 0x09a5 (2449), prologues 9, epilogues 11 */
DEFINED SYMBOLS
*ABS*:00000000 menu.c
C:\Temp/ccacEMFZ.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccacEMFZ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccacEMFZ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccacEMFZ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccacEMFZ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccacEMFZ.s:15 .bss:00000000 RemoteKeys
C:\Temp/ccacEMFZ.s:21 .bss:00000001 MenuePunkt
C:\Temp/ccacEMFZ.s:27 .data:00000000 MaxMenue
C:\Temp/ccacEMFZ.s:34 .bss:00000002 DispPtr
C:\Temp/ccacEMFZ.s:39 .text:00000000 LcdClear
*COM*:00000050 DisplayBuff
C:\Temp/ccacEMFZ.s:58 .text:00000012 Menu_Putchar
C:\Temp/ccacEMFZ.s:81 .progmem.data:00000000 __c.0
C:\Temp/ccacEMFZ.s:85 .progmem.data:00000005 __c.1
C:\Temp/ccacEMFZ.s:89 .progmem.data:0000000a __c.2
C:\Temp/ccacEMFZ.s:93 .progmem.data:0000001a __c.3
C:\Temp/ccacEMFZ.s:97 .progmem.data:00000032 __c.4
C:\Temp/ccacEMFZ.s:101 .progmem.data:00000040 __c.5
C:\Temp/ccacEMFZ.s:105 .progmem.data:0000004d __c.6
C:\Temp/ccacEMFZ.s:109 .progmem.data:00000055 __c.7
C:\Temp/ccacEMFZ.s:113 .progmem.data:0000006c __c.8
C:\Temp/ccacEMFZ.s:117 .progmem.data:00000081 __c.9
C:\Temp/ccacEMFZ.s:121 .progmem.data:0000008e __c.10
C:\Temp/ccacEMFZ.s:125 .progmem.data:0000009b __c.11
C:\Temp/ccacEMFZ.s:129 .progmem.data:000000a8 __c.12
C:\Temp/ccacEMFZ.s:133 .progmem.data:000000b5 __c.13
C:\Temp/ccacEMFZ.s:137 .progmem.data:000000c2 __c.14
C:\Temp/ccacEMFZ.s:141 .progmem.data:000000d1 __c.15
C:\Temp/ccacEMFZ.s:145 .progmem.data:000000da __c.16
C:\Temp/ccacEMFZ.s:149 .progmem.data:000000e7 __c.17
C:\Temp/ccacEMFZ.s:153 .progmem.data:000000f6 __c.18
C:\Temp/ccacEMFZ.s:157 .progmem.data:00000105 __c.19
C:\Temp/ccacEMFZ.s:161 .progmem.data:00000114 __c.20
C:\Temp/ccacEMFZ.s:165 .progmem.data:00000126 __c.21
C:\Temp/ccacEMFZ.s:169 .progmem.data:00000136 __c.22
C:\Temp/ccacEMFZ.s:173 .progmem.data:00000146 __c.23
C:\Temp/ccacEMFZ.s:177 .progmem.data:00000156 __c.24
C:\Temp/ccacEMFZ.s:181 .progmem.data:00000166 __c.25
C:\Temp/ccacEMFZ.s:185 .progmem.data:00000174 __c.26
C:\Temp/ccacEMFZ.s:189 .progmem.data:00000185 __c.27
C:\Temp/ccacEMFZ.s:193 .progmem.data:00000196 __c.28
C:\Temp/ccacEMFZ.s:197 .progmem.data:000001a4 __c.29
C:\Temp/ccacEMFZ.s:201 .progmem.data:000001b6 __c.30
C:\Temp/ccacEMFZ.s:205 .progmem.data:000001c8 __c.31
C:\Temp/ccacEMFZ.s:209 .progmem.data:000001d7 __c.32
C:\Temp/ccacEMFZ.s:213 .progmem.data:000001eb __c.33
C:\Temp/ccacEMFZ.s:217 .progmem.data:000001ff __c.34
C:\Temp/ccacEMFZ.s:221 .progmem.data:00000213 __c.35
C:\Temp/ccacEMFZ.s:225 .progmem.data:00000220 __c.36
C:\Temp/ccacEMFZ.s:229 .progmem.data:0000022f __c.37
C:\Temp/ccacEMFZ.s:233 .progmem.data:0000023e __c.38
C:\Temp/ccacEMFZ.s:237 .progmem.data:0000024d __c.39
C:\Temp/ccacEMFZ.s:241 .progmem.data:00000261 __c.40
C:\Temp/ccacEMFZ.s:245 .progmem.data:00000275 __c.41
C:\Temp/ccacEMFZ.s:249 .progmem.data:00000285 __c.42
C:\Temp/ccacEMFZ.s:253 .progmem.data:00000297 __c.43
C:\Temp/ccacEMFZ.s:257 .progmem.data:000002a0 __c.44
C:\Temp/ccacEMFZ.s:261 .progmem.data:000002b0 __c.45
C:\Temp/ccacEMFZ.s:265 .progmem.data:000002c0 __c.46
C:\Temp/ccacEMFZ.s:269 .progmem.data:000002d0 __c.47
C:\Temp/ccacEMFZ.s:273 .progmem.data:000002d8 __c.48
C:\Temp/ccacEMFZ.s:277 .progmem.data:000002e6 __c.49
C:\Temp/ccacEMFZ.s:281 .progmem.data:000002f4 __c.50
C:\Temp/ccacEMFZ.s:285 .progmem.data:00000302 __c.51
C:\Temp/ccacEMFZ.s:289 .progmem.data:0000030f __c.52
C:\Temp/ccacEMFZ.s:293 .progmem.data:0000031c __c.53
C:\Temp/ccacEMFZ.s:297 .progmem.data:00000324 __c.54
C:\Temp/ccacEMFZ.s:301 .progmem.data:00000332 __c.55
C:\Temp/ccacEMFZ.s:305 .progmem.data:00000340 __c.56
C:\Temp/ccacEMFZ.s:309 .progmem.data:0000034e __c.57
C:\Temp/ccacEMFZ.s:313 .progmem.data:0000035e __c.58
C:\Temp/ccacEMFZ.s:317 .progmem.data:0000036f __c.59
C:\Temp/ccacEMFZ.s:321 .progmem.data:0000037e __c.60
C:\Temp/ccacEMFZ.s:325 .progmem.data:0000038f __c.61
C:\Temp/ccacEMFZ.s:329 .progmem.data:0000039e __c.62
C:\Temp/ccacEMFZ.s:333 .progmem.data:000003b2 __c.63
C:\Temp/ccacEMFZ.s:337 .progmem.data:000003c6 __c.64
C:\Temp/ccacEMFZ.s:341 .progmem.data:000003d7 __c.65
C:\Temp/ccacEMFZ.s:345 .progmem.data:000003da __c.66
C:\Temp/ccacEMFZ.s:349 .progmem.data:000003dd __c.67
C:\Temp/ccacEMFZ.s:353 .progmem.data:000003e0 __c.68
C:\Temp/ccacEMFZ.s:357 .progmem.data:000003ee __c.69
C:\Temp/ccacEMFZ.s:361 .progmem.data:000003fb __c.70
C:\Temp/ccacEMFZ.s:365 .progmem.data:00000408 __c.71
C:\Temp/ccacEMFZ.s:370 .text:0000002c Menu
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
_printf_P
__tablejump2__
PlatinenVersion
__udivmodqi4
Mixer
GetActiveParamSet
VersionInfo
NC_ErrorCode
NC_ERROR_TEXT
MissingMotor
I2CTimeout
Parameter_GlobalConfig
HoehenWert
__divmodsi4
SollHoehe
MessLuftdruck
IntegralNick
IntegralRoll
ErsatzKompassInGrad
PPM_in
EE_Parameter
AdNeutralNick
AdWertNick
AdNeutralRoll
AdWertRoll
AdNeutralGier
AdWertGier
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
NeutralAccX
AdWertAccNick
NeutralAccY
AdWertAccRoll
NeutralAccZ
AdWertAccHoch
UBat
__divmodhi4
Capacity
__udivmodhi4
SenderOkay
Channels
KompassValue
KompassSollWert
Poti
Parameter_ServoNickControl
ServoNickValue
Motor
FlugMinutenGesamt
FlugMinuten
SetParamWord
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/mymath.c
0,0 → 1,41
#include <stdlib.h>
#include <avr/pgmspace.h>
#include "mymath.h"
 
// discrete mathematics
 
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit.
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192};
 
int16_t c_sin_8192(int16_t angle)
{
int8_t m,n;
int16_t sinus;
 
// avoid negative angles
if (angle < 0)
{
m = -1;
angle = abs(angle);
}
else m = +1;
 
// fold angle to intervall 0 to 359
angle %= 360;
 
// check quadrant
if (angle <= 90) n=1; // first quadrant
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant
else {angle = 360 - angle; n = -1;} //fourth quadrant
// get lookup value
sinus = pgm_read_word(&pgm_sinlookup[angle]);
// calculate sinus value
return (sinus * m * n);
}
 
// Cosinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit.
int16_t c_cos_8192(int16_t angle)
{
return (c_sin_8192(90 - angle));
}
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/mymath.h
0,0 → 1,10
#ifndef _MYMATH_H
#define _MYMATH_H
 
#include <inttypes.h>
 
extern int16_t c_sin_8192(int16_t angle);
extern int16_t c_cos_8192(int16_t angle);
extern int16_t c_atan2(int16_t y, int16_t x);
extern uint32_t c_sqrt(uint32_t a);
#endif // _MYMATH_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/mymath.lst
0,0 → 1,226
1 .file "mymath.c"
2 .arch atmega1284p
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 .global pgm_sinlookup
11 .section .progmem.data,"a",@progbits
14 pgm_sinlookup:
15 0000 0000 .word 0
16 0002 8F00 .word 143
17 0004 1E01 .word 286
18 0006 AD01 .word 429
19 0008 3B02 .word 571
20 000a CA02 .word 714
21 000c 5803 .word 856
22 000e E603 .word 998
23 0010 7404 .word 1140
24 0012 0205 .word 1282
25 0014 8F05 .word 1423
26 0016 1B06 .word 1563
27 0018 A706 .word 1703
28 001a 3307 .word 1843
29 001c BE07 .word 1982
30 001e 4808 .word 2120
31 0020 D208 .word 2258
32 0022 5B09 .word 2395
33 0024 E309 .word 2531
34 0026 6B0A .word 2667
35 0028 F20A .word 2802
36 002a 780B .word 2936
37 002c FD0B .word 3069
38 002e 810C .word 3201
39 0030 040D .word 3332
40 0032 860D .word 3462
41 0034 070E .word 3591
42 0036 870E .word 3719
43 0038 060F .word 3846
44 003a 840F .word 3972
45 003c 0010 .word 4096
46 003e 7B10 .word 4219
47 0040 F510 .word 4341
48 0042 6E11 .word 4462
49 0044 E511 .word 4581
50 0046 5B12 .word 4699
51 0048 CF12 .word 4815
52 004a 4213 .word 4930
53 004c B313 .word 5043
54 004e 2314 .word 5155
55 0050 9214 .word 5266
56 0052 FE14 .word 5374
57 0054 6A15 .word 5482
58 0056 D315 .word 5587
59 0058 3B16 .word 5691
60 005a A116 .word 5793
61 005c 0517 .word 5893
62 005e 6717 .word 5991
63 0060 C817 .word 6088
64 0062 2718 .word 6183
65 0064 8318 .word 6275
66 0066 DE18 .word 6366
67 0068 3719 .word 6455
68 006a 8E19 .word 6542
69 006c E319 .word 6627
70 006e 361A .word 6710
71 0070 871A .word 6791
72 0072 D61A .word 6870
73 0074 231B .word 6947
74 0076 6E1B .word 7022
75 0078 B61B .word 7094
76 007a FD1B .word 7165
77 007c 411C .word 7233
78 007e 831C .word 7299
79 0080 C31C .word 7363
80 0082 001D .word 7424
81 0084 3C1D .word 7484
82 0086 751D .word 7541
83 0088 AB1D .word 7595
84 008a E01D .word 7648
85 008c 121E .word 7698
86 008e 421E .word 7746
87 0090 6F1E .word 7791
88 0092 9A1E .word 7834
89 0094 C31E .word 7875
90 0096 E91E .word 7913
91 0098 0D1F .word 7949
92 009a 2E1F .word 7982
93 009c 4D1F .word 8013
94 009e 691F .word 8041
95 00a0 841F .word 8068
96 00a2 9B1F .word 8091
97 00a4 B01F .word 8112
98 00a6 C31F .word 8131
99 00a8 D31F .word 8147
100 00aa E11F .word 8161
101 00ac EC1F .word 8172
102 00ae F51F .word 8181
103 00b0 FB1F .word 8187
104 00b2 FF1F .word 8191
105 00b4 0020 .word 8192
106 .text
107 .global c_sin_8192
109 c_sin_8192:
110 /* prologue: frame size=0 */
111 0000 CF93 push r28
112 /* prologue end (size=1) */
113 0002 FC01 movw r30,r24
114 0004 97FF sbrs r25,7
115 0006 00C0 rjmp .L2
116 0008 CFEF ldi r28,lo8(-1)
117 000a F095 com r31
118 000c E195 neg r30
119 000e FF4F sbci r31,lo8(-1)
120 0010 00C0 rjmp .L4
121 .L2:
122 0012 C1E0 ldi r28,lo8(1)
123 .L4:
124 0014 28E6 ldi r18,lo8(360)
125 0016 31E0 ldi r19,hi8(360)
126 0018 CF01 movw r24,r30
127 001a B901 movw r22,r18
128 001c 0E94 0000 call __divmodhi4
129 0020 FC01 movw r30,r24
130 0022 8B35 cpi r24,91
131 0024 9105 cpc r25,__zero_reg__
132 0026 04F0 brlt .L12
133 0028 8B55 subi r24,lo8(-(-91))
134 002a 9040 sbci r25,hi8(-(-91))
135 002c 8A35 cpi r24,90
136 002e 9105 cpc r25,__zero_reg__
137 0030 00F4 brsh .L7
138 0032 84EB ldi r24,lo8(180)
139 0034 90E0 ldi r25,hi8(180)
140 0036 8E1B sub r24,r30
141 0038 9F0B sbc r25,r31
142 003a FC01 movw r30,r24
143 .L12:
144 003c 41E0 ldi r20,lo8(1)
145 003e 00C0 rjmp .L6
146 .L7:
147 0040 CF01 movw r24,r30
148 0042 855B subi r24,lo8(-(-181))
149 0044 9040 sbci r25,hi8(-(-181))
150 0046 8A35 cpi r24,90
151 0048 9105 cpc r25,__zero_reg__
152 004a 00F4 brsh .L9
153 004c E45B subi r30,lo8(-(-180))
154 004e F040 sbci r31,hi8(-(-180))
155 0050 00C0 rjmp .L11
156 .L9:
157 0052 2E1B sub r18,r30
158 0054 3F0B sbc r19,r31
159 0056 F901 movw r30,r18
160 .L11:
161 0058 4FEF ldi r20,lo8(-1)
162 .L6:
163 005a EE0F add r30,r30
164 005c FF1F adc r31,r31
165 005e E050 subi r30,lo8(-(pgm_sinlookup))
166 0060 F040 sbci r31,hi8(-(pgm_sinlookup))
167 /* #APP */
168 0062 2591 lpm r18, Z+
169 0064 3491 lpm r19, Z
170
171 /* #NOAPP */
172 0066 8C2F mov r24,r28
173 0068 9927 clr r25
174 006a 87FD sbrc r24,7
175 006c 9095 com r25
176 006e 289F mul r18,r24
177 0070 B001 movw r22,r0
178 0072 299F mul r18,r25
179 0074 700D add r23,r0
180 0076 389F mul r19,r24
181 0078 700D add r23,r0
182 007a 1124 clr r1
183 007c 842F mov r24,r20
184 007e 9927 clr r25
185 0080 87FD sbrc r24,7
186 0082 9095 com r25
187 0084 689F mul r22,r24
188 0086 A001 movw r20,r0
189 0088 699F mul r22,r25
190 008a 500D add r21,r0
191 008c 789F mul r23,r24
192 008e 500D add r21,r0
193 0090 1124 clr r1
194 0092 CA01 movw r24,r20
195 /* epilogue: frame size=0 */
196 0094 CF91 pop r28
197 0096 0895 ret
198 /* epilogue end (size=2) */
199 /* function c_sin_8192 size 80 (77) */
201 .global c_cos_8192
203 c_cos_8192:
204 /* prologue: frame size=0 */
205 /* prologue end (size=0) */
206 0098 2AE5 ldi r18,lo8(90)
207 009a 30E0 ldi r19,hi8(90)
208 009c 281B sub r18,r24
209 009e 390B sbc r19,r25
210 00a0 C901 movw r24,r18
211 00a2 0E94 0000 call c_sin_8192
212 /* epilogue: frame size=0 */
213 00a6 0895 ret
214 /* epilogue end (size=1) */
215 /* function c_cos_8192 size 8 (7) */
217 /* File "mymath.c": code 88 = 0x0058 ( 84), prologues 1, epilogues 3 */
DEFINED SYMBOLS
*ABS*:00000000 mymath.c
C:\Temp/cccUX5XQ.s:3 *ABS*:0000003f __SREG__
C:\Temp/cccUX5XQ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cccUX5XQ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cccUX5XQ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cccUX5XQ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cccUX5XQ.s:14 .progmem.data:00000000 pgm_sinlookup
C:\Temp/cccUX5XQ.s:109 .text:00000000 c_sin_8192
C:\Temp/cccUX5XQ.s:203 .text:00000098 c_cos_8192
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/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/v0.90d_Ernstl_6-Motoren+Sexpander/printf_P.h
0,0 → 1,69
// 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.
*/
 
/******************************************************************************/
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
// function pointer to external callback function
typedef void (*pVoidFnctChar) (char );
typedef void (*pVoidFnct_pVoidFnctChar_const_fmt) (pVoidFnctChar, char const *fmt0, ...);
extern pVoidFnct_pVoidFnctChar_const_fmt _printf_P;
 
 
#endif //_PRINTF_P_H_
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/rc.c
0,0 → 1,269
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt
 
volatile int PPM_in[26];
volatile int PPM_diff[26]; // das diffenzierte Stick-Signal
volatile char Channels,tmpChannels = 0;
volatile unsigned char NewPpmData = 1;
unsigned int PPM_Neutral = 466;
 
//############################################################################
// Clear the values
void rc_sum_init (void)
//############################################################################
{
unsigned char i;
for(i=0;i<26;i++)
{
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127;
PPM_diff[i] = 0;
}
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
#ifndef ACT_S3D_SUMMENSIGNAL
//############################################################################
// Interrupt function for the PPM-Input
ISR(TIMER1_CAPT_vect)
//############################################################################
{
if(!(EE_Parameter.ExtraConfig & CFG_SENSITIVE_RC))
{
static unsigned int AltICR=0;
signed int signal = 0,tmp;
static int index;
 
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause? (3.52 ms < signal < 25.6 ms)
if((signal > 1100) && (signal < 8000))
{
Channels = index;
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
index = 1;
}
else
{
if(index < 13)
{
if((signal > 250) && (signal < 687))
{
signal -= PPM_Neutral;
// Stabiles Signal
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;}
}
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
}
index++;
if(PlatinenVersion < 20)
{
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen
}
}
}
}
else
{
static unsigned int AltICR=0;
static int ppm_in[13];
static int ppm_diff[13];
static int old_ppm_in[13];
static int old_ppm_diff[13];
signed int signal = 0,tmp;
static unsigned char index, okay_cnt = 0;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause? (3.52 ms < signal < 25.6 ms)
if((signal > 1100) && (signal < 8000))
{
tmpChannels = index;
if(tmpChannels >= 4 && Channels == tmpChannels)
{
if(okay_cnt > 10)
{
NewPpmData = 0; // Null bedeutet: Neue Daten
for(index = 0; index < 13; index++)
{
if(okay_cnt > 30)
{
old_ppm_in[index] = PPM_in[index];
old_ppm_diff[index] = PPM_diff[index];
}
PPM_in[index] = ppm_in[index];
PPM_diff[index] = ppm_diff[index];
}
}
if(okay_cnt < 255) okay_cnt++;
}
else
{
if(okay_cnt > 100) okay_cnt = 10; else okay_cnt = 0;
ROT_ON;
}
index = 1;
if(!MotorenEin) Channels = tmpChannels;
}
else
{
if(index < 13)
{
if((signal > 250) && (signal < 687))
{
signal -= PPM_Neutral;
// Stabiles Signal
if((abs(signal - ppm_in[index]) < 6))
{
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(okay_cnt > 25) SenderOkay += 10;
else
if(okay_cnt > 10) SenderOkay += 2;
if(SenderOkay > 200) SenderOkay = 200;
}
}
tmp = (3 * (ppm_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 190) ppm_diff[index] = ((tmp - ppm_in[index]) / 3) * 3;
else ppm_diff[index] = 0;
ppm_in[index] = tmp;
}
else ROT_ON;
if(PlatinenVersion < 20)
{
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen
}
}
if(index < 20) index++;
else
if(index == 20)
{
unsigned char i;
ROT_ON;
index = 30;
for(i=0;i<13;i++) // restore from older data
{
PPM_in[i] = old_ppm_in[i];
PPM_diff[i] = 0;
// okay_cnt /= 2;
}
}
}
}
}
 
#else
//############################################################################
// Interrupt function for the PPM-Input
ISR(TIMER1_CAPT_vect)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0,tmp;
static int index;
 
signal = (unsigned int) ICR1 - AltICR;
signal /= 2;
AltICR = ICR1;
//Syncronisationspause?
if((signal > 1100*2) && (signal < 8000*2))
{
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
index = 1;
}
else
{
if(index < 13)
{
if((signal > 250) && (signal < 687*2))
{
signal -= 962;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
}
index++;
}
}
}
#endif
 
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/rc.h
0,0 → 1,27
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega644__)
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644P__)
#define TIMER_RELOAD_VALUE 250
#endif
 
#define GAS PPM_in[2]
#define FromNC_WP_EventChannel PPM_in[25] // WP_EVENT-Channel-Value
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[26];
extern volatile int PPM_diff[26]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
extern volatile char Channels,tmpChannels;
extern unsigned int PPM_Neutral;
 
#endif //_RC_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/rc.lst
0,0 → 1,741
1 .file "rc.c"
2 .arch atmega1284p
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 .global PPM_Neutral
11 .data
14 PPM_Neutral:
15 0000 D201 .word 466
16 .global NewPpmData
19 NewPpmData:
20 0002 01 .byte 1
21 .global tmpChannels
22 .global tmpChannels
23 .section .bss
26 tmpChannels:
27 0000 00 .skip 1,0
28 .text
29 .global rc_sum_init
31 rc_sum_init:
32 /* prologue: frame size=0 */
33 0000 CF93 push r28
34 0002 DF93 push r29
35 /* prologue end (size=2) */
36 0004 80E0 ldi r24,lo8(0)
37 0006 21E8 ldi r18,lo8(-127)
38 0008 3FEF ldi r19,hi8(-127)
39 000a C0E0 ldi r28,lo8(PPM_diff)
40 000c D0E0 ldi r29,hi8(PPM_diff)
41 000e E0E0 ldi r30,lo8(PPM_in)
42 0010 F0E0 ldi r31,hi8(PPM_in)
43 0012 DF01 movw r26,r30
44 .L7:
45 0014 8530 cpi r24,lo8(5)
46 0016 00F4 brsh .L5
47 0018 1196 adiw r26,1
48 001a 1C92 st X,__zero_reg__
49 001c 1E92 st -X,__zero_reg__
50 001e 00C0 rjmp .L6
51 .L5:
52 0020 3183 std Z+1,r19
53 0022 2083 st Z,r18
54 .L6:
55 0024 1982 std Y+1,__zero_reg__
56 0026 1882 st Y,__zero_reg__
57 0028 2296 adiw r28,2
58 002a 8F5F subi r24,lo8(-(1))
59 002c 1296 adiw r26,2
60 002e 3296 adiw r30,2
61 0030 8A31 cpi r24,lo8(26)
62 0032 00F0 brlo .L7
63 0034 1092 0000 sts (AdNeutralGier)+1,__zero_reg__
64 0038 1092 0000 sts AdNeutralGier,__zero_reg__
65 003c 1092 0000 sts (AdNeutralRoll)+1,__zero_reg__
66 0040 1092 0000 sts AdNeutralRoll,__zero_reg__
67 0044 1092 0000 sts (AdNeutralNick)+1,__zero_reg__
68 0048 1092 0000 sts AdNeutralNick,__zero_reg__
69 /* epilogue: frame size=0 */
70 004c DF91 pop r29
71 004e CF91 pop r28
72 0050 0895 ret
73 /* epilogue end (size=3) */
74 /* function rc_sum_init size 41 (36) */
76 .lcomm AltICR.0,2
77 .lcomm index.1,2
78 .lcomm AltICR.2,2
79 .lcomm ppm_in.3,26
80 .lcomm ppm_diff.4,26
81 .lcomm old_ppm_in.5,26
82 .lcomm old_ppm_diff.6,26
83 .lcomm index.7,1
84 .lcomm okay_cnt.8,1
85 .global __vector_12
87 __vector_12:
88 /* prologue: frame size=0 */
89 0052 1F92 push __zero_reg__
90 0054 0F92 push __tmp_reg__
91 0056 0FB6 in __tmp_reg__,__SREG__
92 0058 0F92 push __tmp_reg__
93 005a 1124 clr __zero_reg__
94 005c 0F93 push r16
95 005e 1F93 push r17
96 0060 2F93 push r18
97 0062 3F93 push r19
98 0064 4F93 push r20
99 0066 5F93 push r21
100 0068 6F93 push r22
101 006a 7F93 push r23
102 006c 8F93 push r24
103 006e 9F93 push r25
104 0070 AF93 push r26
105 0072 BF93 push r27
106 0074 CF93 push r28
107 0076 DF93 push r29
108 0078 EF93 push r30
109 007a FF93 push r31
110 /* prologue end (size=21) */
111 007c 8091 0000 lds r24,EE_Parameter+110
112 0080 82FD sbrc r24,2
113 0082 00C0 rjmp .L11
114 0084 4091 8600 lds r20,134
115 0088 5091 8700 lds r21,(134)+1
116 008c 8091 0000 lds r24,AltICR.0
117 0090 9091 0000 lds r25,(AltICR.0)+1
118 0094 481B sub r20,r24
119 0096 590B sbc r21,r25
120 0098 8091 8600 lds r24,134
121 009c 9091 8700 lds r25,(134)+1
122 00a0 9093 0000 sts (AltICR.0)+1,r25
123 00a4 8093 0000 sts AltICR.0,r24
124 00a8 CA01 movw r24,r20
125 00aa 8D54 subi r24,lo8(-(-1101))
126 00ac 9440 sbci r25,hi8(-(-1101))
127 00ae A091 0000 lds r26,index.1
128 00b2 B091 0000 lds r27,(index.1)+1
129 00b6 835F subi r24,lo8(6899)
130 00b8 9A41 sbci r25,hi8(6899)
131 00ba 00F4 brsh .L12
132 00bc 8091 0000 lds r24,index.1
133 00c0 8093 0000 sts Channels,r24
134 00c4 1497 sbiw r26,4
135 00c6 04F0 brlt .L13
136 00c8 1092 0000 sts NewPpmData,__zero_reg__
137 .L13:
138 00cc 81E0 ldi r24,lo8(1)
139 00ce 90E0 ldi r25,hi8(1)
140 00d0 9093 0000 sts (index.1)+1,r25
141 00d4 8093 0000 sts index.1,r24
142 00d8 00C0 rjmp .L10
143 .L12:
144 00da AD30 cpi r26,13
145 00dc B105 cpc r27,__zero_reg__
146 00de 04F0 brlt .+2
147 00e0 00C0 rjmp .L10
148 00e2 CA01 movw r24,r20
149 00e4 8B5F subi r24,lo8(-(-251))
150 00e6 9040 sbci r25,hi8(-(-251))
151 00e8 845B subi r24,lo8(436)
152 00ea 9140 sbci r25,hi8(436)
153 00ec 00F0 brlo .+2
154 00ee 00C0 rjmp .L16
155 00f0 8091 0000 lds r24,PPM_Neutral
156 00f4 9091 0000 lds r25,(PPM_Neutral)+1
157 00f8 481B sub r20,r24
158 00fa 590B sbc r21,r25
159 00fc E091 0000 lds r30,EE_Parameter+105
160 0100 EE23 tst r30
161 0102 01F0 breq .L18
162 0104 FF27 clr r31
163 0106 EE0F add r30,r30
164 0108 FF1F adc r31,r31
165 010a E050 subi r30,lo8(-(PPM_in))
166 010c F040 sbci r31,hi8(-(PPM_in))
167 010e 8081 ld r24,Z
168 0110 9181 ldd r25,Z+1
169 0112 8436 cpi r24,100
170 0114 9105 cpc r25,__zero_reg__
171 0116 04F4 brge .L17
172 .L18:
173 0118 FD01 movw r30,r26
174 011a EA0F add r30,r26
175 011c FB1F adc r31,r27
176 011e E050 subi r30,lo8(-(PPM_in))
177 0120 F040 sbci r31,hi8(-(PPM_in))
178 0122 8081 ld r24,Z
179 0124 9181 ldd r25,Z+1
180 0126 FA01 movw r30,r20
181 0128 E81B sub r30,r24
182 012a F90B sbc r31,r25
183 012c CF01 movw r24,r30
184 012e F7FF sbrs r31,7
185 0130 00C0 rjmp .L20
186 0132 9095 com r25
187 0134 8195 neg r24
188 0136 9F4F sbci r25,lo8(-1)
189 .L20:
190 0138 0697 sbiw r24,6
191 013a 04F4 brge .L17
192 013c 8091 0000 lds r24,SenderOkay
193 0140 883C cpi r24,lo8(-56)
194 0142 00F4 brsh .L21
195 0144 8091 0000 lds r24,SenderOkay
196 0148 865F subi r24,lo8(-(10))
197 014a 00C0 rjmp .L93
198 .L21:
199 014c 88EC ldi r24,lo8(-56)
200 .L93:
201 014e 8093 0000 sts SenderOkay,r24
202 .L17:
203 0152 FD01 movw r30,r26
204 0154 EA0F add r30,r26
205 0156 FB1F adc r31,r27
206 0158 E050 subi r30,lo8(-(PPM_in))
207 015a F040 sbci r31,hi8(-(PPM_in))
208 015c 8081 ld r24,Z
209 015e 9181 ldd r25,Z+1
210 0160 9C01 movw r18,r24
211 0162 220F lsl r18
212 0164 331F rol r19
213 0166 280F add r18,r24
214 0168 391F adc r19,r25
215 016a 240F add r18,r20
216 016c 351F adc r19,r21
217 016e 37FF sbrs r19,7
218 0170 00C0 rjmp .L23
219 0172 2D5F subi r18,lo8(-(3))
220 0174 3F4F sbci r19,hi8(-(3))
221 .L23:
222 0176 E901 movw r28,r18
223 0178 D595 asr r29
224 017a C795 ror r28
225 017c D595 asr r29
226 017e C795 ror r28
227 0180 CA01 movw r24,r20
228 0182 0196 adiw r24,1
229 0184 8C17 cp r24,r28
230 0186 9D07 cpc r25,r29
231 0188 04F4 brge .L24
232 018a 2197 sbiw r28,1
233 018c 00C0 rjmp .L25
234 .L24:
235 018e 4150 subi r20,lo8(-(-1))
236 0190 5040 sbci r21,hi8(-(-1))
237 0192 C417 cp r28,r20
238 0194 D507 cpc r29,r21
239 0196 04F4 brge .L25
240 0198 2196 adiw r28,1
241 .L25:
242 019a 8091 0000 lds r24,SenderOkay
243 019e 833C cpi r24,lo8(-61)
244 01a0 00F0 brlo .L27
245 01a2 8D01 movw r16,r26
246 01a4 0A0F add r16,r26
247 01a6 1B1F adc r17,r27
248 01a8 F801 movw r30,r16
249 01aa E050 subi r30,lo8(-(PPM_in))
250 01ac F040 sbci r31,hi8(-(PPM_in))
251 01ae 8081 ld r24,Z
252 01b0 9181 ldd r25,Z+1
253 01b2 9E01 movw r18,r28
254 01b4 281B sub r18,r24
255 01b6 390B sbc r19,r25
256 01b8 C901 movw r24,r18
257 01ba 63E0 ldi r22,lo8(3)
258 01bc 70E0 ldi r23,hi8(3)
259 01be 0E94 0000 call __divmodhi4
260 01c2 CB01 movw r24,r22
261 01c4 880F lsl r24
262 01c6 991F rol r25
263 01c8 860F add r24,r22
264 01ca 971F adc r25,r23
265 01cc 0050 subi r16,lo8(-(PPM_diff))
266 01ce 1040 sbci r17,hi8(-(PPM_diff))
267 01d0 D801 movw r26,r16
268 01d2 1196 adiw r26,1
269 01d4 9C93 st X,r25
270 01d6 8E93 st -X,r24
271 01d8 00C0 rjmp .L28
272 .L27:
273 01da AA0F add r26,r26
274 01dc BB1F adc r27,r27
275 01de A050 subi r26,lo8(-(PPM_diff))
276 01e0 B040 sbci r27,hi8(-(PPM_diff))
277 01e2 1196 adiw r26,1
278 01e4 1C92 st X,__zero_reg__
279 01e6 1E92 st -X,__zero_reg__
280 .L28:
281 01e8 E091 0000 lds r30,index.1
282 01ec F091 0000 lds r31,(index.1)+1
283 01f0 EE0F add r30,r30
284 01f2 FF1F adc r31,r31
285 01f4 E050 subi r30,lo8(-(PPM_in))
286 01f6 F040 sbci r31,hi8(-(PPM_in))
287 01f8 D183 std Z+1,r29
288 01fa C083 st Z,r28
289 .L16:
290 01fc 2091 0000 lds r18,index.1
291 0200 3091 0000 lds r19,(index.1)+1
292 0204 2F5F subi r18,lo8(-(1))
293 0206 3F4F sbci r19,hi8(-(1))
294 0208 3093 0000 sts (index.1)+1,r19
295 020c 2093 0000 sts index.1,r18
296 0210 8091 0000 lds r24,PlatinenVersion
297 0214 8431 cpi r24,lo8(20)
298 0216 00F0 brlo .+2
299 0218 00C0 rjmp .L10
300 021a 2530 cpi r18,5
301 021c 3105 cpc r19,__zero_reg__
302 021e 01F4 brne .L30
303 0220 5D9A sbi 43-0x20,5
304 0222 00C0 rjmp .L31
305 .L30:
306 0224 5D98 cbi 43-0x20,5
307 .L31:
308 0226 8091 0000 lds r24,index.1
309 022a 9091 0000 lds r25,(index.1)+1
310 022e 8630 cpi r24,6
311 0230 9105 cpc r25,__zero_reg__
312 0232 01F4 brne .L32
313 0234 5C9A sbi 43-0x20,4
314 0236 00C0 rjmp .L33
315 .L32:
316 0238 5C98 cbi 43-0x20,4
317 .L33:
318 023a 0797 sbiw r24,7
319 023c 01F4 brne .L34
320 023e 5B9A sbi 43-0x20,3
321 0240 00C0 rjmp .L10
322 .L34:
323 0242 5B98 cbi 43-0x20,3
324 0244 00C0 rjmp .L10
325 .L11:
326 0246 4091 8600 lds r20,134
327 024a 5091 8700 lds r21,(134)+1
328 024e 8091 0000 lds r24,AltICR.2
329 0252 9091 0000 lds r25,(AltICR.2)+1
330 0256 481B sub r20,r24
331 0258 590B sbc r21,r25
332 025a 8091 8600 lds r24,134
333 025e 9091 8700 lds r25,(134)+1
334 0262 9093 0000 sts (AltICR.2)+1,r25
335 0266 8093 0000 sts AltICR.2,r24
336 026a CA01 movw r24,r20
337 026c 8D54 subi r24,lo8(-(-1101))
338 026e 9440 sbci r25,hi8(-(-1101))
339 0270 6091 0000 lds r22,index.7
340 0274 835F subi r24,lo8(6899)
341 0276 9A41 sbci r25,hi8(6899)
342 0278 00F0 brlo .+2
343 027a 00C0 rjmp .L37
344 027c 6093 0000 sts tmpChannels,r22
345 0280 8091 0000 lds r24,tmpChannels
346 0284 8430 cpi r24,lo8(4)
347 0286 00F4 brsh .+2
348 0288 00C0 rjmp .L38
349 028a 9091 0000 lds r25,Channels
350 028e 8091 0000 lds r24,tmpChannels
351 0292 9817 cp r25,r24
352 0294 01F0 breq .+2
353 0296 00C0 rjmp .L38
354 0298 5091 0000 lds r21,okay_cnt.8
355 029c 5B30 cpi r21,lo8(11)
356 029e 00F4 brsh .+2
357 02a0 00C0 rjmp .L39
358 02a2 1092 0000 sts NewPpmData,__zero_reg__
359 02a6 1092 0000 sts index.7,__zero_reg__
360 02aa 40E0 ldi r20,lo8(0)
361 .L44:
362 02ac 5F31 cpi r21,lo8(31)
363 02ae 00F0 brlo .L43
364 02b0 E42F mov r30,r20
365 02b2 FF27 clr r31
366 02b4 EE0F add r30,r30
367 02b6 FF1F adc r31,r31
368 02b8 9F01 movw r18,r30
369 02ba 2050 subi r18,lo8(-(old_ppm_in.5))
370 02bc 3040 sbci r19,hi8(-(old_ppm_in.5))
371 02be DF01 movw r26,r30
372 02c0 A050 subi r26,lo8(-(PPM_in))
373 02c2 B040 sbci r27,hi8(-(PPM_in))
374 02c4 8D91 ld r24,X+
375 02c6 9C91 ld r25,X
376 02c8 D901 movw r26,r18
377 02ca 8D93 st X+,r24
378 02cc 9C93 st X,r25
379 02ce DF01 movw r26,r30
380 02d0 A050 subi r26,lo8(-(PPM_diff))
381 02d2 B040 sbci r27,hi8(-(PPM_diff))
382 02d4 8D91 ld r24,X+
383 02d6 9C91 ld r25,X
384 02d8 E050 subi r30,lo8(-(old_ppm_diff.6))
385 02da F040 sbci r31,hi8(-(old_ppm_diff.6))
386 02dc 9183 std Z+1,r25
387 02de 8083 st Z,r24
388 .L43:
389 02e0 E42F mov r30,r20
390 02e2 FF27 clr r31
391 02e4 EE0F add r30,r30
392 02e6 FF1F adc r31,r31
393 02e8 9F01 movw r18,r30
394 02ea 2050 subi r18,lo8(-(PPM_in))
395 02ec 3040 sbci r19,hi8(-(PPM_in))
396 02ee DF01 movw r26,r30
397 02f0 A050 subi r26,lo8(-(ppm_in.3))
398 02f2 B040 sbci r27,hi8(-(ppm_in.3))
399 02f4 8D91 ld r24,X+
400 02f6 9C91 ld r25,X
401 02f8 D901 movw r26,r18
402 02fa 1196 adiw r26,1
403 02fc 9C93 st X,r25
404 02fe 8E93 st -X,r24
405 0300 DF01 movw r26,r30
406 0302 A050 subi r26,lo8(-(ppm_diff.4))
407 0304 B040 sbci r27,hi8(-(ppm_diff.4))
408 0306 8D91 ld r24,X+
409 0308 9C91 ld r25,X
410 030a E050 subi r30,lo8(-(PPM_diff))
411 030c F040 sbci r31,hi8(-(PPM_diff))
412 030e 9183 std Z+1,r25
413 0310 8083 st Z,r24
414 0312 842F mov r24,r20
415 0314 8F5F subi r24,lo8(-(1))
416 0316 482F mov r20,r24
417 0318 8D30 cpi r24,lo8(13)
418 031a 00F0 brlo .L44
419 031c 8093 0000 sts index.7,r24
420 .L39:
421 0320 8091 0000 lds r24,okay_cnt.8
422 0324 8F3F cpi r24,lo8(-1)
423 0326 01F0 breq .L46
424 0328 8F5F subi r24,lo8(-(1))
425 032a 8093 0000 sts okay_cnt.8,r24
426 032e 00C0 rjmp .L46
427 .L38:
428 0330 8091 0000 lds r24,okay_cnt.8
429 0334 8536 cpi r24,lo8(101)
430 0336 00F0 brlo .L47
431 0338 8AE0 ldi r24,lo8(10)
432 033a 8093 0000 sts okay_cnt.8,r24
433 033e 00C0 rjmp .L48
434 .L47:
435 0340 1092 0000 sts okay_cnt.8,__zero_reg__
436 .L48:
437 0344 8091 0000 lds r24,PlatinenVersion
438 0348 8A30 cpi r24,lo8(10)
439 034a 01F0 breq .L50
440 034c 8431 cpi r24,lo8(20)
441 034e 00F0 brlo .L49
442 .L50:
443 0350 289A sbi 37-0x20,0
444 0352 00C0 rjmp .L46
445 .L49:
446 0354 2898 cbi 37-0x20,0
447 .L46:
448 0356 81E0 ldi r24,lo8(1)
449 0358 8093 0000 sts index.7,r24
450 035c 8091 0000 lds r24,MotorenEin
451 0360 8823 tst r24
452 0362 01F0 breq .+2
453 0364 00C0 rjmp .L10
454 0366 8091 0000 lds r24,tmpChannels
455 036a 8093 0000 sts Channels,r24
456 036e 00C0 rjmp .L10
457 .L37:
458 0370 6D30 cpi r22,lo8(13)
459 0372 00F0 brlo .+2
460 0374 00C0 rjmp .L54
461 0376 CA01 movw r24,r20
462 0378 8B5F subi r24,lo8(-(-251))
463 037a 9040 sbci r25,hi8(-(-251))
464 037c 845B subi r24,lo8(436)
465 037e 9140 sbci r25,hi8(436)
466 0380 00F0 brlo .+2
467 0382 00C0 rjmp .L55
468 0384 8091 0000 lds r24,PPM_Neutral
469 0388 9091 0000 lds r25,(PPM_Neutral)+1
470 038c 481B sub r20,r24
471 038e 590B sbc r21,r25
472 0390 E62F mov r30,r22
473 0392 FF27 clr r31
474 0394 EE0F add r30,r30
475 0396 FF1F adc r31,r31
476 0398 E050 subi r30,lo8(-(ppm_in.3))
477 039a F040 sbci r31,hi8(-(ppm_in.3))
478 039c 8081 ld r24,Z
479 039e 9181 ldd r25,Z+1
480 03a0 FA01 movw r30,r20
481 03a2 E81B sub r30,r24
482 03a4 F90B sbc r31,r25
483 03a6 CF01 movw r24,r30
484 03a8 0596 adiw r24,5
485 03aa 0B97 sbiw r24,11
486 03ac 00F4 brsh .L56
487 03ae E091 0000 lds r30,EE_Parameter+105
488 03b2 EE23 tst r30
489 03b4 01F0 breq .L58
490 03b6 FF27 clr r31
491 03b8 EE0F add r30,r30
492 03ba FF1F adc r31,r31
493 03bc E050 subi r30,lo8(-(PPM_in))
494 03be F040 sbci r31,hi8(-(PPM_in))
495 03c0 8081 ld r24,Z
496 03c2 9181 ldd r25,Z+1
497 03c4 8436 cpi r24,100
498 03c6 9105 cpc r25,__zero_reg__
499 03c8 04F4 brge .L56
500 .L58:
501 03ca 8091 0000 lds r24,okay_cnt.8
502 03ce 8A31 cpi r24,lo8(26)
503 03d0 00F0 brlo .L59
504 03d2 8091 0000 lds r24,SenderOkay
505 03d6 865F subi r24,lo8(-(10))
506 03d8 00C0 rjmp .L94
507 .L59:
508 03da 8B30 cpi r24,lo8(11)
509 03dc 00F0 brlo .L60
510 03de 8091 0000 lds r24,SenderOkay
511 03e2 8E5F subi r24,lo8(-(2))
512 .L94:
513 03e4 8093 0000 sts SenderOkay,r24
514 .L60:
515 03e8 8091 0000 lds r24,SenderOkay
516 03ec 893C cpi r24,lo8(-55)
517 03ee 00F0 brlo .L56
518 03f0 88EC ldi r24,lo8(-56)
519 03f2 8093 0000 sts SenderOkay,r24
520 .L56:
521 03f6 E62F mov r30,r22
522 03f8 FF27 clr r31
523 03fa EE0F add r30,r30
524 03fc FF1F adc r31,r31
525 03fe E050 subi r30,lo8(-(ppm_in.3))
526 0400 F040 sbci r31,hi8(-(ppm_in.3))
527 0402 8081 ld r24,Z
528 0404 9181 ldd r25,Z+1
529 0406 9C01 movw r18,r24
530 0408 220F lsl r18
531 040a 331F rol r19
532 040c 280F add r18,r24
533 040e 391F adc r19,r25
534 0410 240F add r18,r20
535 0412 351F adc r19,r21
536 0414 37FF sbrs r19,7
537 0416 00C0 rjmp .L63
538 0418 2D5F subi r18,lo8(-(3))
539 041a 3F4F sbci r19,hi8(-(3))
540 .L63:
541 041c E901 movw r28,r18
542 041e D595 asr r29
543 0420 C795 ror r28
544 0422 D595 asr r29
545 0424 C795 ror r28
546 0426 CA01 movw r24,r20
547 0428 0196 adiw r24,1
548 042a 8C17 cp r24,r28
549 042c 9D07 cpc r25,r29
550 042e 04F4 brge .L64
551 0430 2197 sbiw r28,1
552 0432 00C0 rjmp .L65
553 .L64:
554 0434 4150 subi r20,lo8(-(-1))
555 0436 5040 sbci r21,hi8(-(-1))
556 0438 C417 cp r28,r20
557 043a D507 cpc r29,r21
558 043c 04F4 brge .L65
559 043e 2196 adiw r28,1
560 .L65:
561 0440 8091 0000 lds r24,SenderOkay
562 0444 8E3B cpi r24,lo8(-66)
563 0446 00F0 brlo .L67
564 0448 E62F mov r30,r22
565 044a FF27 clr r31
566 044c EE0F add r30,r30
567 044e FF1F adc r31,r31
568 0450 DF01 movw r26,r30
569 0452 A050 subi r26,lo8(-(ppm_in.3))
570 0454 B040 sbci r27,hi8(-(ppm_in.3))
571 0456 8D91 ld r24,X+
572 0458 9C91 ld r25,X
573 045a 9E01 movw r18,r28
574 045c 281B sub r18,r24
575 045e 390B sbc r19,r25
576 0460 C901 movw r24,r18
577 0462 63E0 ldi r22,lo8(3)
578 0464 70E0 ldi r23,hi8(3)
579 0466 0E94 0000 call __divmodhi4
580 046a CB01 movw r24,r22
581 046c 880F lsl r24
582 046e 991F rol r25
583 0470 860F add r24,r22
584 0472 971F adc r25,r23
585 0474 E050 subi r30,lo8(-(ppm_diff.4))
586 0476 F040 sbci r31,hi8(-(ppm_diff.4))
587 0478 9183 std Z+1,r25
588 047a 8083 st Z,r24
589 047c 00C0 rjmp .L68
590 .L67:
591 047e E62F mov r30,r22
592 0480 FF27 clr r31
593 0482 EE0F add r30,r30
594 0484 FF1F adc r31,r31
595 0486 E050 subi r30,lo8(-(ppm_diff.4))
596 0488 F040 sbci r31,hi8(-(ppm_diff.4))
597 048a 1182 std Z+1,__zero_reg__
598 048c 1082 st Z,__zero_reg__
599 .L68:
600 048e 8091 0000 lds r24,index.7
601 0492 E82F mov r30,r24
602 0494 FF27 clr r31
603 0496 EE0F add r30,r30
604 0498 FF1F adc r31,r31
605 049a E050 subi r30,lo8(-(ppm_in.3))
606 049c F040 sbci r31,hi8(-(ppm_in.3))
607 049e D183 std Z+1,r29
608 04a0 C083 st Z,r28
609 04a2 00C0 rjmp .L69
610 .L55:
611 04a4 8091 0000 lds r24,PlatinenVersion
612 04a8 8A30 cpi r24,lo8(10)
613 04aa 01F0 breq .L71
614 04ac 8431 cpi r24,lo8(20)
615 04ae 00F0 brlo .L70
616 .L71:
617 04b0 289A sbi 37-0x20,0
618 04b2 00C0 rjmp .L69
619 .L70:
620 04b4 2898 cbi 37-0x20,0
621 .L69:
622 04b6 8091 0000 lds r24,PlatinenVersion
623 04ba 8431 cpi r24,lo8(20)
624 04bc 00F4 brsh .L54
625 04be 8091 0000 lds r24,index.7
626 04c2 8530 cpi r24,lo8(5)
627 04c4 01F4 brne .L74
628 04c6 5D9A sbi 43-0x20,5
629 04c8 00C0 rjmp .L76
630 .L74:
631 04ca 5D98 cbi 43-0x20,5
632 04cc 8630 cpi r24,lo8(6)
633 04ce 01F4 brne .L76
634 04d0 5C9A sbi 43-0x20,4
635 04d2 00C0 rjmp .L78
636 .L76:
637 04d4 5C98 cbi 43-0x20,4
638 04d6 8730 cpi r24,lo8(7)
639 04d8 01F4 brne .L78
640 04da 5B9A sbi 43-0x20,3
641 04dc 00C0 rjmp .L54
642 .L78:
643 04de 5B98 cbi 43-0x20,3
644 .L54:
645 04e0 8091 0000 lds r24,index.7
646 04e4 8431 cpi r24,lo8(20)
647 04e6 00F4 brsh .L80
648 04e8 8F5F subi r24,lo8(-(1))
649 04ea 8093 0000 sts index.7,r24
650 04ee 00C0 rjmp .L10
651 .L80:
652 04f0 8431 cpi r24,lo8(20)
653 04f2 01F4 brne .L10
654 04f4 8091 0000 lds r24,PlatinenVersion
655 04f8 8A30 cpi r24,lo8(10)
656 04fa 01F0 breq .L84
657 04fc 8431 cpi r24,lo8(20)
658 04fe 00F0 brlo .L83
659 .L84:
660 0500 289A sbi 37-0x20,0
661 0502 00C0 rjmp .L85
662 .L83:
663 0504 2898 cbi 37-0x20,0
664 .L85:
665 0506 8EE1 ldi r24,lo8(30)
666 0508 8093 0000 sts index.7,r24
667 050c 2CE0 ldi r18,lo8(12)
668 050e C0E0 ldi r28,lo8(PPM_diff)
669 0510 D0E0 ldi r29,hi8(PPM_diff)
670 0512 A0E0 ldi r26,lo8(old_ppm_in.5)
671 0514 B0E0 ldi r27,hi8(old_ppm_in.5)
672 0516 E0E0 ldi r30,lo8(PPM_in)
673 0518 F0E0 ldi r31,hi8(PPM_in)
674 .L89:
675 051a 8D91 ld r24,X+
676 051c 9D91 ld r25,X+
677 051e 9183 std Z+1,r25
678 0520 8083 st Z,r24
679 0522 3296 adiw r30,2
680 0524 1982 std Y+1,__zero_reg__
681 0526 1882 st Y,__zero_reg__
682 0528 2296 adiw r28,2
683 052a 2150 subi r18,lo8(-(-1))
684 052c 27FF sbrs r18,7
685 052e 00C0 rjmp .L89
686 .L10:
687 /* epilogue: frame size=0 */
688 0530 FF91 pop r31
689 0532 EF91 pop r30
690 0534 DF91 pop r29
691 0536 CF91 pop r28
692 0538 BF91 pop r27
693 053a AF91 pop r26
694 053c 9F91 pop r25
695 053e 8F91 pop r24
696 0540 7F91 pop r23
697 0542 6F91 pop r22
698 0544 5F91 pop r21
699 0546 4F91 pop r20
700 0548 3F91 pop r19
701 054a 2F91 pop r18
702 054c 1F91 pop r17
703 054e 0F91 pop r16
704 0550 0F90 pop __tmp_reg__
705 0552 0FBE out __SREG__,__tmp_reg__
706 0554 0F90 pop __tmp_reg__
707 0556 1F90 pop __zero_reg__
708 0558 1895 reti
709 /* epilogue end (size=21) */
710 /* function __vector_12 size 651 (609) */
712 .comm PPM_in,52,1
713 .comm PPM_diff,52,1
714 .comm Channels,1,1
715 /* File "rc.c": code 692 = 0x02b4 ( 645), prologues 23, epilogues 24 */
DEFINED SYMBOLS
*ABS*:00000000 rc.c
C:\Temp/ccT6Peqm.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccT6Peqm.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccT6Peqm.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccT6Peqm.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccT6Peqm.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccT6Peqm.s:14 .data:00000000 PPM_Neutral
C:\Temp/ccT6Peqm.s:19 .data:00000002 NewPpmData
C:\Temp/ccT6Peqm.s:26 .bss:00000000 tmpChannels
C:\Temp/ccT6Peqm.s:31 .text:00000000 rc_sum_init
*COM*:00000034 PPM_diff
*COM*:00000034 PPM_in
.bss:00000001 AltICR.0
C:\Temp/ccT6Peqm.s:76 .bss:00000003 index.1
C:\Temp/ccT6Peqm.s:77 .bss:00000005 AltICR.2
C:\Temp/ccT6Peqm.s:78 .bss:00000007 ppm_in.3
C:\Temp/ccT6Peqm.s:79 .bss:00000021 ppm_diff.4
C:\Temp/ccT6Peqm.s:80 .bss:0000003b old_ppm_in.5
C:\Temp/ccT6Peqm.s:81 .bss:00000055 old_ppm_diff.6
C:\Temp/ccT6Peqm.s:82 .bss:0000006f index.7
C:\Temp/ccT6Peqm.s:83 .bss:00000070 okay_cnt.8
C:\Temp/ccT6Peqm.s:87 .text:00000052 __vector_12
*COM*:00000001 Channels
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
AdNeutralGier
AdNeutralRoll
AdNeutralNick
EE_Parameter
SenderOkay
__divmodhi4
PlatinenVersion
MotorenEin
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/sbus.c
0,0 → 1,199
/*#######################################################################################
Decodes the sbus protocol
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "sbus.h"
#include "main.h"
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
unsigned char NewSBusData = 0, sBusBuffer[25];
 
//############################################################################
// USART1 initialisation from killagreg
void SbusUartInit(void)
//############################################################################
{
// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint8_t sreg = SREG;
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1);
// disable all interrupts before reconfiguration
cli();
// disable RX-Interrupt
UCSR1B &= ~(1 << RXCIE1);
// disable TX-Interrupt
UCSR1B &= ~(1 << TXCIE1);
// disable DRE-Interrupt
UCSR1B &= ~(1 << UDRIE1);
// set direction of RXD1 and TXD1 pins
// set RXD1 (PD2) as an input pin
PORTD |= (1 << PORTD2);
DDRD &= ~(1 << DDD2);
 
// set TXD1 (PD3) as an output pin
PORTD |= (1 << PORTD3);
DDRD |= (1 << DDD3);
// USART0 Baud Rate Register
// set clock divider
UBRR1H = (uint8_t)(ubrr>>8);
UBRR1L = (uint8_t)ubrr;
// enable double speed operation
UCSR1A |= (1 << U2X1);
// enable receiver and transmitter
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);
 
UCSR1B = (1<<RXEN1);
// set asynchronous mode
UCSR1C &= ~(1 << UMSEL11);
UCSR1C &= ~(1 << UMSEL10);
// parity
UCSR1C <= (1 << UPM11); // even
UCSR1C &= ~(1 << UPM10);
// stop bit
UCSR1C |= (1 << USBS1); // two
// 8-bit
UCSR1B &= ~(1 << UCSZ12);
UCSR1C |= (1 << UCSZ11);
UCSR1C |= (1 << UCSZ10);
// flush receive buffer explicit
while(UCSR1A & (1<<RXC1)) UDR1;
// enable RX-interrupts at the end
UCSR1B |= (1 << RXCIE1);
// -- End of USART1 initialisation
// restore global interrupt flags
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss'
SREG = sreg;
return;
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define MIN_FRAMEGAP 68 // 7ms
#define MAX_BYTEGAP 3 // 310us
 
//############################################################################
// Is called by the uart RX interrupt
//############################################################################
void SbusParser(unsigned char udr)
{
static unsigned char ptr = 0;
if(!SpektrumTimer && udr == 0x0f) // wait for the start
{
ptr = 0;
SpektrumTimer = 80; // 8ms gap
}
else
{
if(++ptr == 24) // last byte
{
NewSBusData = 1;
}
else
if(ptr > 24) ptr = 25;
else
{
sBusBuffer[ptr] = udr; // collect all bytes
}
}
}
 
void ProcessSBus(void)
{
static unsigned char load = 0;
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process;
unsigned int bitmask11 = 256;
signed int signal = 0,tmp;
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss'
{
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200;
}
signal = sBusBuffer[1];
if(!load--) { process = (12*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load
for(i = 0; i < process; i++) // collect the single bits
{
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11;
bitmask8 *= 2;
if(!bitmask8)
{
bitmask8 = 1;
sbyte++;
}
bitmask11 *= 2;
if(bitmask11 == 2048)
{
bitmask11 = 1;
signal = (signal-1024) / 5; // the resolution is higher than required
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
signal = 0;
index++; // next channel
}
}
NewPpmData = 0; // Null bedeutet: Neue Daten
}
NewSBusData = 0;
}
 
#endif
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/sbus.h
0,0 → 1,11
#ifndef _SBUS_H
#define _SBUS_H
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
extern unsigned char NewSBusData, sBusBuffer[25];
extern void SbusParser(unsigned char);
extern void SbusUartInit(void);
extern void ProcessSBus(void);
 
#endif
#endif
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/sbus.lst
0,0 → 1,369
1 .file "sbus.c"
2 .arch atmega1284p
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 .global NewSBusData
11 .global NewSBusData
12 .section .bss
15 NewSBusData:
16 0000 00 .skip 1,0
17 .text
18 .global SbusUartInit
20 SbusUartInit:
21 /* prologue: frame size=0 */
22 /* prologue end (size=0) */
23 0000 4FB7 in r20,95-0x20
24 0002 28E1 ldi r18,lo8(24)
25 0004 30E0 ldi r19,hi8(24)
26 /* #APP */
27 0006 F894 cli
28 /* #NOAPP */
29 0008 8091 C900 lds r24,201
30 000c 8F77 andi r24,lo8(127)
31 000e 8093 C900 sts 201,r24
32 0012 8091 C900 lds r24,201
33 0016 8F7B andi r24,lo8(-65)
34 0018 8093 C900 sts 201,r24
35 001c 8091 C900 lds r24,201
36 0020 8F7D andi r24,lo8(-33)
37 0022 8093 C900 sts 201,r24
38 0026 5A9A sbi 43-0x20,2
39 0028 5298 cbi 42-0x20,2
40 002a 5B9A sbi 43-0x20,3
41 002c 539A sbi 42-0x20,3
42 002e 832F mov r24,r19
43 0030 9927 clr r25
44 0032 8093 CD00 sts 205,r24
45 0036 2093 CC00 sts 204,r18
46 003a 8091 C800 lds r24,200
47 003e 8260 ori r24,lo8(2)
48 0040 8093 C800 sts 200,r24
49 0044 80E1 ldi r24,lo8(16)
50 0046 8093 C900 sts 201,r24
51 004a 8091 CA00 lds r24,202
52 004e 8F77 andi r24,lo8(127)
53 0050 8093 CA00 sts 202,r24
54 0054 8091 CA00 lds r24,202
55 0058 8F7B andi r24,lo8(-65)
56 005a 8093 CA00 sts 202,r24
57 005e 8091 CA00 lds r24,202
58 0062 8091 CA00 lds r24,202
59 0066 8F7E andi r24,lo8(-17)
60 0068 8093 CA00 sts 202,r24
61 006c 8091 CA00 lds r24,202
62 0070 8860 ori r24,lo8(8)
63 0072 8093 CA00 sts 202,r24
64 0076 8091 C900 lds r24,201
65 007a 8B7F andi r24,lo8(-5)
66 007c 8093 C900 sts 201,r24
67 0080 8091 CA00 lds r24,202
68 0084 8460 ori r24,lo8(4)
69 0086 8093 CA00 sts 202,r24
70 008a 8091 CA00 lds r24,202
71 008e 8260 ori r24,lo8(2)
72 0090 8093 CA00 sts 202,r24
73 .L7:
74 0094 8091 C800 lds r24,200
75 0098 87FF sbrs r24,7
76 009a 00C0 rjmp .L6
77 009c 8091 CE00 lds r24,206
78 00a0 00C0 rjmp .L7
79 .L6:
80 00a2 8091 C900 lds r24,201
81 00a6 8068 ori r24,lo8(-128)
82 00a8 8093 C900 sts 201,r24
83 00ac 8091 0000 lds r24,sBusBuffer+23
84 00b0 8460 ori r24,lo8(4)
85 00b2 8093 0000 sts sBusBuffer+23,r24
86 00b6 4FBF out 95-0x20,r20
87 /* epilogue: frame size=0 */
88 00b8 0895 ret
89 /* epilogue end (size=1) */
90 /* function SbusUartInit size 94 (93) */
92 .lcomm ptr.1,1
93 .global SbusParser
95 SbusParser:
96 /* prologue: frame size=0 */
97 /* prologue end (size=0) */
98 00ba 9091 0000 lds r25,SpektrumTimer
99 00be 9923 tst r25
100 00c0 01F4 brne .L9
101 00c2 8F30 cpi r24,lo8(15)
102 00c4 01F4 brne .L9
103 00c6 9093 0000 sts ptr.1,r25
104 00ca 80E5 ldi r24,lo8(80)
105 00cc 8093 0000 sts SpektrumTimer,r24
106 00d0 0895 ret
107 .L9:
108 00d2 E091 0000 lds r30,ptr.1
109 00d6 EF5F subi r30,lo8(-(1))
110 00d8 E093 0000 sts ptr.1,r30
111 00dc E831 cpi r30,lo8(24)
112 00de 01F4 brne .L11
113 00e0 81E0 ldi r24,lo8(1)
114 00e2 8093 0000 sts NewSBusData,r24
115 00e6 0895 ret
116 .L11:
117 00e8 E931 cpi r30,lo8(25)
118 00ea 00F0 brlo .L13
119 00ec 89E1 ldi r24,lo8(25)
120 00ee 8093 0000 sts ptr.1,r24
121 00f2 0895 ret
122 .L13:
123 00f4 FF27 clr r31
124 00f6 E050 subi r30,lo8(-(sBusBuffer))
125 00f8 F040 sbci r31,hi8(-(sBusBuffer))
126 00fa 8083 st Z,r24
127 00fc 0895 ret
128 /* epilogue: frame size=0 */
129 /* epilogue: noreturn */
130 /* epilogue end (size=0) */
131 /* function SbusParser size 34 (34) */
133 .lcomm load.0,1
134 .global ProcessSBus
136 ProcessSBus:
137 /* prologue: frame size=0 */
138 00fe A0E0 ldi r26,lo8(0)
139 0100 B0E0 ldi r27,hi8(0)
140 0102 E0E0 ldi r30,pm_lo8(1f)
141 0104 F0E0 ldi r31,pm_hi8(1f)
142 0106 0C94 0000 jmp __prologue_saves__+16
143 1:
144 /* prologue end (size=6) */
145 010a 91E0 ldi r25,lo8(1)
146 010c D92E mov r13,r25
147 010e 82E0 ldi r24,lo8(2)
148 0110 A82E mov r10,r24
149 0112 BD2C mov r11,r13
150 0114 E12C mov r14,__zero_reg__
151 0116 01E0 ldi r16,hi8(256)
152 0118 F02E mov r15,r16
153 011a 8091 0000 lds r24,sBusBuffer+23
154 011e 82FD sbrc r24,2
155 0120 00C0 rjmp .L16
156 0122 8091 6F00 lds r24,111
157 0126 8F7D andi r24,lo8(-33)
158 0128 8093 6F00 sts 111,r24
159 012c E091 0000 lds r30,EE_Parameter+105
160 0130 EE23 tst r30
161 0132 01F0 breq .L18
162 0134 FF27 clr r31
163 0136 EE0F add r30,r30
164 0138 FF1F adc r31,r31
165 013a E050 subi r30,lo8(-(PPM_in))
166 013c F040 sbci r31,hi8(-(PPM_in))
167 013e 8081 ld r24,Z
168 0140 9181 ldd r25,Z+1
169 0142 8436 cpi r24,100
170 0144 9105 cpc r25,__zero_reg__
171 0146 04F4 brge .L17
172 .L18:
173 0148 8091 0000 lds r24,SenderOkay
174 014c 883C cpi r24,lo8(-56)
175 014e 00F4 brsh .L19
176 0150 8091 0000 lds r24,SenderOkay
177 0154 8C5E subi r24,lo8(-(20))
178 0156 00C0 rjmp .L38
179 .L19:
180 0158 88EC ldi r24,lo8(-56)
181 .L38:
182 015a 8093 0000 sts SenderOkay,r24
183 .L17:
184 015e 8091 0000 lds r24,sBusBuffer+1
185 0162 682F mov r22,r24
186 0164 7727 clr r23
187 0166 8091 0000 lds r24,load.0
188 016a 8150 subi r24,lo8(-(-1))
189 016c 8093 0000 sts load.0,r24
190 0170 8F3F cpi r24,lo8(-1)
191 0172 01F4 brne .L21
192 0174 1CE7 ldi r17,lo8(124)
193 0176 C12E mov r12,r17
194 0178 82E0 ldi r24,lo8(2)
195 017a 8093 0000 sts load.0,r24
196 017e 00C0 rjmp .L22
197 .L21:
198 0180 C4E2 ldi r28,lo8(36)
199 0182 CC2E mov r12,r28
200 .L22:
201 0184 40E0 ldi r20,lo8(0)
202 .L39:
203 0186 4C15 cp r20,r12
204 0188 00F0 brlo .+2
205 018a 00C0 rjmp .L37
206 018c EA2D mov r30,r10
207 018e FF27 clr r31
208 0190 E050 subi r30,lo8(-(sBusBuffer))
209 0192 F040 sbci r31,hi8(-(sBusBuffer))
210 0194 8081 ld r24,Z
211 0196 8D21 and r24,r13
212 0198 01F0 breq .L26
213 019a 6E29 or r22,r14
214 019c 7F29 or r23,r15
215 .L26:
216 019e 8D2D mov r24,r13
217 01a0 9927 clr r25
218 01a2 880F add r24,r24
219 01a4 991F adc r25,r25
220 01a6 D82E mov r13,r24
221 01a8 8823 tst r24
222 01aa 01F4 brne .L27
223 01ac B1E0 ldi r27,lo8(1)
224 01ae DB2E mov r13,r27
225 01b0 AD0C add r10,r13
226 .L27:
227 01b2 EE0C add r14,r14
228 01b4 FF1C adc r15,r15
229 01b6 20E0 ldi r18,lo8(2048)
230 01b8 E216 cp r14,r18
231 01ba 28E0 ldi r18,hi8(2048)
232 01bc F206 cpc r15,r18
233 01be 01F0 breq .+2
234 01c0 00C0 rjmp .L25
235 01c2 A1E0 ldi r26,lo8(1)
236 01c4 EA2E mov r14,r26
237 01c6 F12C mov r15,__zero_reg__
238 01c8 CB01 movw r24,r22
239 01ca 8050 subi r24,lo8(-(-1024))
240 01cc 9440 sbci r25,hi8(-(-1024))
241 01ce 65E0 ldi r22,lo8(5)
242 01d0 70E0 ldi r23,hi8(5)
243 01d2 0E94 0000 call __divmodhi4
244 01d6 AB2D mov r26,r11
245 01d8 BB27 clr r27
246 01da FD01 movw r30,r26
247 01dc EA0F add r30,r26
248 01de FB1F adc r31,r27
249 01e0 E050 subi r30,lo8(-(PPM_in))
250 01e2 F040 sbci r31,hi8(-(PPM_in))
251 01e4 8081 ld r24,Z
252 01e6 9181 ldd r25,Z+1
253 01e8 9C01 movw r18,r24
254 01ea 220F lsl r18
255 01ec 331F rol r19
256 01ee 280F add r18,r24
257 01f0 391F adc r19,r25
258 01f2 260F add r18,r22
259 01f4 371F adc r19,r23
260 01f6 37FF sbrs r19,7
261 01f8 00C0 rjmp .L29
262 01fa 2D5F subi r18,lo8(-(3))
263 01fc 3F4F sbci r19,hi8(-(3))
264 .L29:
265 01fe E901 movw r28,r18
266 0200 D595 asr r29
267 0202 C795 ror r28
268 0204 D595 asr r29
269 0206 C795 ror r28
270 0208 CB01 movw r24,r22
271 020a 0196 adiw r24,1
272 020c 8C17 cp r24,r28
273 020e 9D07 cpc r25,r29
274 0210 04F4 brge .L30
275 0212 2197 sbiw r28,1
276 0214 00C0 rjmp .L31
277 .L30:
278 0216 6150 subi r22,lo8(-(-1))
279 0218 7040 sbci r23,hi8(-(-1))
280 021a C617 cp r28,r22
281 021c D707 cpc r29,r23
282 021e 04F4 brge .L31
283 0220 2196 adiw r28,1
284 .L31:
285 0222 8091 0000 lds r24,SenderOkay
286 0226 833C cpi r24,lo8(-61)
287 0228 00F0 brlo .L33
288 022a 8D01 movw r16,r26
289 022c 0A0F add r16,r26
290 022e 1B1F adc r17,r27
291 0230 F801 movw r30,r16
292 0232 E050 subi r30,lo8(-(PPM_in))
293 0234 F040 sbci r31,hi8(-(PPM_in))
294 0236 8081 ld r24,Z
295 0238 9181 ldd r25,Z+1
296 023a FE01 movw r30,r28
297 023c E81B sub r30,r24
298 023e F90B sbc r31,r25
299 0240 CF01 movw r24,r30
300 0242 63E0 ldi r22,lo8(3)
301 0244 70E0 ldi r23,hi8(3)
302 0246 0E94 0000 call __divmodhi4
303 024a CB01 movw r24,r22
304 024c 880F lsl r24
305 024e 991F rol r25
306 0250 860F add r24,r22
307 0252 971F adc r25,r23
308 0254 0050 subi r16,lo8(-(PPM_diff))
309 0256 1040 sbci r17,hi8(-(PPM_diff))
310 0258 F801 movw r30,r16
311 025a 9183 std Z+1,r25
312 025c 8083 st Z,r24
313 025e 00C0 rjmp .L34
314 .L33:
315 0260 AA0F add r26,r26
316 0262 BB1F adc r27,r27
317 0264 A050 subi r26,lo8(-(PPM_diff))
318 0266 B040 sbci r27,hi8(-(PPM_diff))
319 0268 1196 adiw r26,1
320 026a 1C92 st X,__zero_reg__
321 026c 1E92 st -X,__zero_reg__
322 .L34:
323 026e EB2D mov r30,r11
324 0270 FF27 clr r31
325 0272 EE0F add r30,r30
326 0274 FF1F adc r31,r31
327 0276 E050 subi r30,lo8(-(PPM_in))
328 0278 F040 sbci r31,hi8(-(PPM_in))
329 027a D183 std Z+1,r29
330 027c C083 st Z,r28
331 027e 60E0 ldi r22,lo8(0)
332 0280 70E0 ldi r23,hi8(0)
333 0282 B394 inc r11
334 .L25:
335 0284 4F5F subi r20,lo8(-(1))
336 0286 00C0 rjmp .L39
337 .L37:
338 0288 1092 0000 sts NewPpmData,__zero_reg__
339 .L16:
340 028c 1092 0000 sts NewSBusData,__zero_reg__
341 /* epilogue: frame size=0 */
342 0290 EAE0 ldi r30,10
343 0292 CDB7 in r28,__SP_L__
344 0294 DEB7 in r29,__SP_H__
345 0296 0C94 0000 jmp __epilogue_restores__+16
346 /* epilogue end (size=5) */
347 /* function ProcessSBus size 207 (196) */
349 .comm sBusBuffer,25,1
350 /* File "sbus.c": code 335 = 0x014f ( 323), prologues 6, epilogues 6 */
DEFINED SYMBOLS
*ABS*:00000000 sbus.c
C:\Temp/ccZAe6Uj.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccZAe6Uj.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccZAe6Uj.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccZAe6Uj.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccZAe6Uj.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccZAe6Uj.s:15 .bss:00000000 NewSBusData
C:\Temp/ccZAe6Uj.s:20 .text:00000000 SbusUartInit
*COM*:00000019 sBusBuffer
.bss:00000001 ptr.1
C:\Temp/ccZAe6Uj.s:95 .text:000000ba SbusParser
C:\Temp/ccZAe6Uj.s:92 .bss:00000002 load.0
C:\Temp/ccZAe6Uj.s:136 .text:000000fe ProcessSBus
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SpektrumTimer
__prologue_saves__
EE_Parameter
PPM_in
SenderOkay
__divmodhi4
PPM_diff
NewPpmData
__epilogue_restores__
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/spi.c
0,0 → 1,417
// ######################## SPI - FlightCtrl ###################
#include "main.h"
#include "eeprom.h"
 
//struct str_ToNaviCtrl_Version ToNaviCtrl_Version;
//struct str_FromNaviCtrl_Version FromNaviCtrl_Version;
struct str_ToNaviCtrl ToNaviCtrl;
struct str_FromNaviCtrl FromNaviCtrl;
struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
struct str_SPI_VersionInfo NC_Version;
struct str_GPSInfo GPSInfo;
 
unsigned char SPI_BufferIndex;
unsigned char SPI_RxBufferIndex;
signed char FromNC_Rotate_C = 32, FromNC_Rotate_S = 0;
 
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)];
unsigned char *SPI_TX_Buffer;
 
unsigned char SPITransferCompleted, SPI_ChkSum;
unsigned char SPI_RxDataValid,NaviDataOkay = 250;
 
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1,
SPI_FCCMD_STICK, SPI_FCCMD_MISC, SPI_FCCMD_VERSION,
SPI_FCCMD_STICK, SPI_FCCMD_SERVOS, SPI_FCCMD_ACCU,
SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2
};
unsigned char SPI_CommandCounter = 0;
unsigned char NC_ErrorCode = 0;
unsigned char NC_GPS_ModeCharacter = ' ';
unsigned char EarthMagneticField = 0;
unsigned char EarthMagneticInclination = 0, EarthMagneticInclinationTheoretic = 0;
unsigned char NC_To_FC_Flags = 0;
unsigned char NC_To_FC_MaxAltitude = 0; // this is a Parameter on the SD-card
signed int POI_KameraNick = 0; // in 0,1°
vector16_t MagVec = {0,0,0};
 
#ifdef USE_SPI_COMMUNICATION
 
//------------------------------------------------------
void SPI_MasterInit(void)
{
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT);
 
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64
SPSR = 0;//(1<<SPI2X);
 
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT);
SPITransferCompleted = 1;
 
//SPDR = 0x00; // dummy write
 
ToNaviCtrl.Sync1 = 0xAA;
ToNaviCtrl.Sync2 = 0x83;
 
ToNaviCtrl.Command = SPI_FCCMD_USER;
ToNaviCtrl.IntegralNick = 0;
ToNaviCtrl.IntegralRoll = 0;
FromNaviCtrl_Value.SerialDataOkay = 0;
SPI_RxDataValid = 0;
 
}
 
//------------------------------------------------------
void SPI_StartTransmitPacket(void)
{
//if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return; // transfer of prev. packet not completed
if (!SPITransferCompleted) return;
// _delay_us(30);
 
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
 
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
 
SPITransferCompleted = 0;
UpdateSPI_Buffer(); // update buffer
 
SPI_BufferIndex = 1;
// -- Debug-Output ---
//----
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
SPDR = ToNaviCtrl.Sync1; // Start transmission
// SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
 
}
 
//------------------------------------------------------
//SIGNAL(SIG_SPI)
void SPI_TransmitByte(void)
{
static unsigned char SPI_RXState = 0;
unsigned char rxdata;
static unsigned char rxchksum;
 
if (SPITransferCompleted) return;
if (!(SPSR & (1 << SPIF))) return;
SendSPI = 4;
 
// _delay_us(30);
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
 
rxdata = SPDR;
switch ( SPI_RXState)
{
case 0:
 
SPI_RxBufferIndex = 0;
rxchksum = rxdata;
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok
 
break;
 
case 1:
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok
else SPI_RXState = 0;
break;
 
case 2:
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data
//DebugOut.Analog[19]++;
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
{
 
if (rxdata == rxchksum)
{
unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer));
SPI_RxDataValid = 1;
}
else
{
SPI_RxDataValid = 0;
}
 
 
SPI_RXState = 0;
}
else rxchksum += rxdata;
break;
 
}
 
if (SPI_BufferIndex < sizeof(ToNaviCtrl))
{
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
 
SPDR = SPI_TX_Buffer[SPI_BufferIndex];
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
// SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
 
}
else SPITransferCompleted = 1;
 
SPI_BufferIndex++;
}
 
 
//------------------------------------------------------
void UpdateSPI_Buffer(void)
{
signed int tmp;
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION;
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4));
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4));
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR;
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier;
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4;
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4;
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0;
// ToNaviCtrl.User8 = Parameter_UserParam8;
// ToNaviCtrl.CalState = WinkelOut.CalcState;
switch(ToNaviCtrl.Command) //
{
case SPI_FCCMD_USER:
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1;
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2;
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3;
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4;
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5;
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6;
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7;
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8;
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags;
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START);
ToNaviCtrl.Param.Byte[9] = GetActiveParamSet();
ToNaviCtrl.Param.Byte[10] = EE_Parameter.ComingHomeAltitude;
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2;
break;
 
case SPI_FCCMD_ACCU:
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A
ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh
ToNaviCtrl.Param.Byte[4] = (unsigned char) UBat; // 0.1V
ToNaviCtrl.Param.Byte[5] = (unsigned char) BattLowVoltageWarning; //0.1V
ToNaviCtrl.Param.Byte[6] = VarioCharacter;
ToNaviCtrl.Param.Byte[7] = motorindex;
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM;
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State;
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature;
ToNaviCtrl.Param.Byte[11] = Motor[motorindex++].Current;
motorindex %= 12;
break;
case SPI_FCCMD_PARAMETER1:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviGpsModeControl; // Parameters for the Naviboard
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsACC;
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat;
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviOperatingRadius;
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation;
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation;
break;
case SPI_FCCMD_PARAMETER2:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviOut1Parameter; // Distance between Photo releases
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
// create the ToNC_SpeakHoTT
if(EE_Parameter.Receiver != RECEIVER_HOTT)
{
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]);
else HoTT_Waring();
}
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT;
#else
ToNaviCtrl.Param.Byte[1] = 0;
#endif
break;
case SPI_FCCMD_STICK:
cli();
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
ToNaviCtrl.Param.Byte[0] = (char) tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
ToNaviCtrl.Param.Byte[1] = (char) tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
ToNaviCtrl.Param.Byte[2] = (char) tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
sei();
ToNaviCtrl.Param.Byte[3] = (char) tmp;
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0];
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1];
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2];
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3];
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4];
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5];
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6];
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7];
break;
case SPI_FCCMD_MISC:
if(WinkelOut.CalcState > 5)
{
WinkelOut.CalcState = 0;
ToNaviCtrl.Param.Byte[0] = 5;
}
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime;
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5);
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit;
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit;
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit;
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
ToNaviCtrl.Param.Byte[10] = (unsigned char) PPM_in[0];
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
break;
case SPI_FCCMD_VERSION:
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH;
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE;
ToNaviCtrl.Param.Byte[4] = PlatinenVersion;
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0];
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1];
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0;
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER;
ToNaviCtrl.Param.Byte[7] = VersionInfo.HardwareError[2]; // unused
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig;
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig;
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle;
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3;
break;
case SPI_FCCMD_SERVOS:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.ServoNickRefresh; // Parameters for the Servo Control
ToNaviCtrl.Param.Byte[1] = EE_Parameter.ServoCompInvert;
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl;
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ServoNickComp;
ToNaviCtrl.Param.Byte[4] = EE_Parameter.ServoNickMin;
ToNaviCtrl.Param.Byte[5] = EE_Parameter.ServoNickMax;
ToNaviCtrl.Param.Byte[6] = Parameter_ServoRollControl;
ToNaviCtrl.Param.Byte[7] = EE_Parameter.ServoRollComp;
ToNaviCtrl.Param.Byte[8] = EE_Parameter.ServoRollMin;
ToNaviCtrl.Param.Byte[9] = EE_Parameter.ServoRollMax;
ToNaviCtrl.Param.Byte[10] = Capacity.MinOfMaxPWM;
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[28]; // I2C-Error counter
break;
}
if(SPI_RxDataValid)
{
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250;
oldcommand = FromNaviCtrl.Command;
CalculateCompassTimer = 1;
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV))
{
GPS_Nick = FromNaviCtrl.GPS_Nick;
GPS_Roll = FromNaviCtrl.GPS_Roll;
}
 
// update compass readings
// MagVec.x = FromNaviCtrl.MagVecX;
// MagVec.y = FromNaviCtrl.MagVecY;
// MagVec.z = FromNaviCtrl.MagVecZ;
 
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue;
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
 
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime;
switch (FromNaviCtrl.Command)
{
case SPI_NCCMD_KALMAN:
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0];
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1];
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2];
KompassFusion = FromNaviCtrl.Param.sByte[3];
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4];
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5];
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6];
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7];
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0)
{
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben
if(EE_Parameter.CamOrientation) // Kamera angle is not front
{
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15);
KompassSollWert %= 360;
}
}
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel
break;
case SPI_NCCMD_VERSION:
NC_Version.Major = FromNaviCtrl.Param.Byte[0];
NC_Version.Minor = FromNaviCtrl.Param.Byte[1];
NC_Version.Patch = FromNaviCtrl.Param.Byte[2];
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3];
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4];
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5];
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08));
NC_ErrorCode = FromNaviCtrl.Param.Byte[7];
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8];
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9];
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10];
NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11];
break;
case SPI_NCCMD_GPSINFO:
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0];
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1];
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2];
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3];
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2];
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3];
PPM_in[25] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel)
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9];
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm
break;
case SPI_MISC:
EarthMagneticField = FromNaviCtrl.Param.Byte[0];
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1];
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2];
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(FromNaviCtrl.Param.Byte[3])
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3];
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4];
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5];
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3];
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8];
#endif
break;
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
case SPI_NCCMD_HOTT_DATA:
if(EE_Parameter.Receiver == RECEIVER_HOTT) NC_Fills_HoTT_Telemety();
break;
#endif
 
// 0 = 0,1
// 1 = 2,3
// 2 = 4,5
// 3 = 6,7
// 4 = 8,9
// 5 = 10,11
default:
break;
}
}
else
{
// KompassValue = 0;
// KompassRichtung = 0;
GPS_Nick = 0;
GPS_Roll = 0;
}
}
 
#endif
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/spi.h
0,0 → 1,197
// ######################## SPI - FlightCtrl ###################
#ifndef _SPI_H
#define _SPI_H
 
#include <util/delay.h>
#include "vector.h"
 
#define USE_SPI_COMMUNICATION
 
//-----------------------------------------
#define DDR_SPI DDRB
#define SLAVE_SELECT_DDR_PORT DDRC
#define SLAVE_SELECT_PORT PORTC
 
#if defined(__AVR_ATmega1284P__)
#define DD_SS PORTB4
#define DD_SCK PORTB7
#define DD_MOSI PORTB5
#define DD_MISO PORTB6
#define SPI_SLAVE_SELECT PORTC5
#else
#define DD_SS PB4
#define DD_SCK PB7
#define DD_MOSI PB5
#define DD_MISO PB6
#define SPI_SLAVE_SELECT PC5
#endif
 
// for compatibility reasons gcc3.x <-> gcc4.x
#ifndef SPCR
#define SPCR SPCR0
#endif
#ifndef SPE
#define SPE SPE0
#endif
#ifndef MSTR
#define MSTR MSTR0
#endif
#ifndef SPR1
#define SPR1 SPR01
#endif
#ifndef SPR0
#define SPR0 SPR00
#endif
#ifndef SPIE
#define SPIE SPIE0
#endif
#ifndef SPDR
#define SPDR SPDR0
#endif
#ifndef SPIF
#define SPIF SPIF0
#endif
#ifndef SPSR
#define SPSR SPSR0
#endif
// -------------------------
 
#define SPI_FCCMD_USER 10
#define SPI_FCCMD_STICK 11
#define SPI_FCCMD_MISC 12
#define SPI_FCCMD_PARAMETER1 13
#define SPI_FCCMD_VERSION 14
#define SPI_FCCMD_SERVOS 15
#define SPI_FCCMD_ACCU 16
#define SPI_FCCMD_PARAMETER2 17
 
struct str_ToNaviCtrl
{
unsigned char Sync1, Sync2;
unsigned char Command;
signed int IntegralNick;
signed int IntegralRoll;
signed int AccNick;
signed int AccRoll;
signed int GyroCompass;
signed int GyroNick;
signed int GyroRoll;
signed int GyroGier;
unsigned int FCStatus;
union
{
unsigned char Byte[12];
char sByte[12];
unsigned int Int[6];
int sInt[6];
unsigned long Long[3];
long sLong[3];
float Float[3];
} Param;
unsigned char Chksum;
};
 
#define SPI_NCCMD_KALMAN 103
#define SPI_NCCMD_VERSION 104
#define SPI_NCCMD_GPSINFO 105
#define SPI_NCCMD_HOTT_DATA 106
#define SPI_MISC 107
 
struct str_FromNaviCtrl
{
unsigned char Command;
signed int GPS_Nick;
signed int GPS_Roll;
signed int MagVecX;
signed int CompassValue;
signed int AccErrorN;
signed int AccErrorR;
signed int MagVecY;
signed int MagVecZ;
unsigned int BeepTime;
union
{
unsigned char Byte[12];
char sByte[12];
unsigned int Int[6];
int sInt[6];
unsigned long Long[3];
long sLong[3];
float Float[3];
} Param;
unsigned char Chksum;
};
 
struct str_FromNaviCtrl_Value
{
signed char Kalman_K;
signed char Kalman_MaxDrift;
signed char Kalman_MaxFusion;
unsigned char SerialDataOkay;
signed char GpsZ;
};
 
struct str_SPI_VersionInfo
{
unsigned char Major;
unsigned char Minor;
unsigned char Patch;
unsigned char Compatible;
unsigned char Hardware;
};
 
// Satfix types for GPSData.SatFix
#define SATFIX_NONE 0x00
#define SATFIX_DEADRECKOING 0x01
#define SATFIX_2D 0x02
#define SATFIX_3D 0x03
#define SATFIX_GPS_DEADRECKOING 0x04
#define SATFIX_TIMEONLY 0x05
// Flags for interpretation of the GPSData.Flags
#define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks)
#define FLAG_DIFFSOLN 0x02 // (is DGPS used)
#define FLAG_WKNSET 0x04 // (is Week Number valid)
#define FLAG_TOWSET 0x08 // (is Time of Week valid)
#define FLAG_GPS_NAVIGATION_ACTIVE 0x10 // NC to FC -> NC is ready to navigate
 
struct str_GPSInfo
{
unsigned char Flags; // Status Flags
unsigned char NumOfSats; // number of satelites
unsigned char SatFix; // type of satfix
unsigned char Speed; // m/sek
unsigned int HomeDistance; // distance to Home in dm
int HomeBearing; // bearing to home in deg
};
 
 
#ifdef USE_SPI_COMMUNICATION
extern struct str_GPSInfo GPSInfo;
extern struct str_SPI_VersionInfo NC_Version;
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
extern struct str_ToNaviCtrl ToNaviCtrl;
extern struct str_FromNaviCtrl FromNaviCtrl;
extern unsigned char SPI_CommandCounter,NaviDataOkay;
extern signed char FromNC_Rotate_C, FromNC_Rotate_S;
extern unsigned char NC_ErrorCode;
extern void SPI_MasterInit(void);
extern void SPI_StartTransmitPacket(void);
extern void UpdateSPI_Buffer(void);
extern void SPI_TransmitByte(void);
extern signed int POI_KameraNick;
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude;
extern vector16_t MagVec;
extern unsigned char EarthMagneticField;
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic;
#else
 
 
// -------------------------------- Dummy -----------------------------------------
#define SPI_MasterInit() ;
#define SPI_StartTransmitPacket() ;
#define UpdateSPI_Buffer() ;
#define SPI_TransmitByte() ;
#endif
 
 
#endif
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/spi.lst
0,0 → 1,1243
1 .file "spi.c"
2 .arch atmega1284p
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 .global MagVec
11 .global MagVec
12 .section .bss
15 MagVec:
16 0000 0000 0000 .skip 6,0
16 0000
17 .global POI_KameraNick
18 .global POI_KameraNick
21 POI_KameraNick:
22 0006 0000 .skip 2,0
23 .global NC_To_FC_MaxAltitude
24 .global NC_To_FC_MaxAltitude
27 NC_To_FC_MaxAltitude:
28 0008 00 .skip 1,0
29 .global NC_To_FC_Flags
30 .global NC_To_FC_Flags
33 NC_To_FC_Flags:
34 0009 00 .skip 1,0
35 .global EarthMagneticInclinationTheoretic
36 .global EarthMagneticInclinationTheoretic
39 EarthMagneticInclinationTheoretic:
40 000a 00 .skip 1,0
41 .global EarthMagneticInclination
42 .global EarthMagneticInclination
45 EarthMagneticInclination:
46 000b 00 .skip 1,0
47 .global EarthMagneticField
48 .global EarthMagneticField
51 EarthMagneticField:
52 000c 00 .skip 1,0
53 .global NC_GPS_ModeCharacter
54 .data
57 NC_GPS_ModeCharacter:
58 0000 20 .byte 32
59 .global NC_ErrorCode
60 .global NC_ErrorCode
61 .section .bss
64 NC_ErrorCode:
65 000d 00 .skip 1,0
66 .global SPI_CommandCounter
67 .global SPI_CommandCounter
70 SPI_CommandCounter:
71 000e 00 .skip 1,0
72 .global SPI_CommandSequence
73 .data
76 SPI_CommandSequence:
77 0001 0B .byte 11
78 0002 0A .byte 10
79 0003 0D .byte 13
80 0004 0B .byte 11
81 0005 0C .byte 12
82 0006 0E .byte 14
83 0007 0B .byte 11
84 0008 0F .byte 15
85 0009 10 .byte 16
86 000a 0B .byte 11
87 000b 11 .byte 17
88 .global NaviDataOkay
91 NaviDataOkay:
92 000c FA .byte -6
93 .global FromNC_Rotate_S
94 .global FromNC_Rotate_S
95 .section .bss
98 FromNC_Rotate_S:
99 000f 00 .skip 1,0
100 .global FromNC_Rotate_C
101 .data
104 FromNC_Rotate_C:
105 000d 20 .byte 32
106 .text
107 .global SPI_MasterInit
109 SPI_MasterInit:
110 /* prologue: frame size=0 */
111 /* prologue end (size=0) */
112 0000 84B1 in r24,36-0x20
113 0002 806A ori r24,lo8(-96)
114 0004 84B9 out 36-0x20,r24
115 0006 3D9A sbi 39-0x20,5
116 0008 82E5 ldi r24,lo8(82)
117 000a 8CBD out 76-0x20,r24
118 000c 1DBC out 77-0x20,__zero_reg__
119 000e 459A sbi 40-0x20,5
120 0010 81E0 ldi r24,lo8(1)
121 0012 8093 0000 sts SPITransferCompleted,r24
122 0016 8AEA ldi r24,lo8(-86)
123 0018 8093 0000 sts ToNaviCtrl,r24
124 001c 83E8 ldi r24,lo8(-125)
125 001e 8093 0000 sts ToNaviCtrl+1,r24
126 0022 8AE0 ldi r24,lo8(10)
127 0024 8093 0000 sts ToNaviCtrl+2,r24
128 0028 1092 0000 sts (ToNaviCtrl+3)+1,__zero_reg__
129 002c 1092 0000 sts ToNaviCtrl+3,__zero_reg__
130 0030 1092 0000 sts (ToNaviCtrl+5)+1,__zero_reg__
131 0034 1092 0000 sts ToNaviCtrl+5,__zero_reg__
132 0038 1092 0000 sts FromNaviCtrl_Value+3,__zero_reg__
133 003c 1092 0000 sts SPI_RxDataValid,__zero_reg__
134 /* epilogue: frame size=0 */
135 0040 0895 ret
136 /* epilogue end (size=1) */
137 /* function SPI_MasterInit size 33 (32) */
139 .lcomm SPI_RXState.2,1
140 .lcomm rxchksum.3,1
141 .global SPI_TransmitByte
143 SPI_TransmitByte:
144 /* prologue: frame size=0 */
145 /* prologue end (size=0) */
146 0042 3091 0000 lds r19,SPITransferCompleted
147 0046 3323 tst r19
148 0048 01F0 breq .+2
149 004a 00C0 rjmp .L2
150 004c 0DB4 in __tmp_reg__,77-0x20
151 004e 07FE sbrs __tmp_reg__,7
152 0050 00C0 rjmp .L2
153 0052 84E0 ldi r24,lo8(4)
154 0054 8093 0000 sts SendSPI,r24
155 0058 459A sbi 40-0x20,5
156 005a 2EB5 in r18,78-0x20
157 005c 8091 0000 lds r24,SPI_RXState.2
158 0060 9927 clr r25
159 0062 8130 cpi r24,1
160 0064 9105 cpc r25,__zero_reg__
161 0066 01F0 breq .L8
162 0068 8230 cpi r24,2
163 006a 9105 cpc r25,__zero_reg__
164 006c 04F4 brge .L16
165 006e 892B or r24,r25
166 0070 01F0 breq .L6
167 0072 00C0 rjmp .L5
168 .L16:
169 0074 0297 sbiw r24,2
170 0076 01F0 breq .L11
171 0078 00C0 rjmp .L5
172 .L6:
173 007a 3093 0000 sts SPI_RxBufferIndex,r19
174 007e 2093 0000 sts rxchksum.3,r18
175 0082 2138 cpi r18,lo8(-127)
176 0084 01F4 brne .L5
177 0086 81E0 ldi r24,lo8(1)
178 0088 00C0 rjmp .L19
179 .L8:
180 008a 2535 cpi r18,lo8(85)
181 008c 01F4 brne .L9
182 008e 8091 0000 lds r24,rxchksum.3
183 0092 820F add r24,r18
184 0094 8093 0000 sts rxchksum.3,r24
185 0098 82E0 ldi r24,lo8(2)
186 .L19:
187 009a 8093 0000 sts SPI_RXState.2,r24
188 009e 00C0 rjmp .L5
189 .L9:
190 00a0 3093 0000 sts SPI_RXState.2,r19
191 00a4 00C0 rjmp .L5
192 .L11:
193 00a6 8091 0000 lds r24,SPI_RxBufferIndex
194 00aa E82F mov r30,r24
195 00ac FF27 clr r31
196 00ae E050 subi r30,lo8(-(SPI_Buffer))
197 00b0 F040 sbci r31,hi8(-(SPI_Buffer))
198 00b2 2083 st Z,r18
199 00b4 8F5F subi r24,lo8(-(1))
200 00b6 8093 0000 sts SPI_RxBufferIndex,r24
201 00ba 9091 0000 lds r25,rxchksum.3
202 00be 8032 cpi r24,lo8(32)
203 00c0 00F0 brlo .L12
204 00c2 2917 cp r18,r25
205 00c4 01F4 brne .L13
206 00c6 80E2 ldi r24,lo8(32)
207 00c8 A0E0 ldi r26,lo8(SPI_Buffer)
208 00ca B0E0 ldi r27,hi8(SPI_Buffer)
209 00cc E0E0 ldi r30,lo8(FromNaviCtrl)
210 00ce F0E0 ldi r31,hi8(FromNaviCtrl)
211 00d0 0D90 ld __tmp_reg__,X+
212 00d2 0192 st Z+,__tmp_reg__
213 00d4 8A95 dec r24
214 00d6 01F4 brne .-8
215 00d8 81E0 ldi r24,lo8(1)
216 00da 8093 0000 sts SPI_RxDataValid,r24
217 00de 00C0 rjmp .L14
218 .L13:
219 00e0 3093 0000 sts SPI_RxDataValid,r19
220 .L14:
221 00e4 1092 0000 sts SPI_RXState.2,__zero_reg__
222 00e8 00C0 rjmp .L5
223 .L12:
224 00ea 920F add r25,r18
225 00ec 9093 0000 sts rxchksum.3,r25
226 .L5:
227 00f0 2091 0000 lds r18,SPI_BufferIndex
228 00f4 2232 cpi r18,lo8(34)
229 00f6 00F0 brlo .+2
230 00f8 00C0 rjmp .L17
231 00fa 4598 cbi 40-0x20,5
232 /* #APP */
233 00fc 0000 nop
234 00fe 0000 nop
235 0100 0000 nop
236 0102 0000 nop
237 0104 0000 nop
238 0106 0000 nop
239 0108 0000 nop
240 010a 0000 nop
241 010c 0000 nop
242 010e 0000 nop
243 0110 0000 nop
244 0112 0000 nop
245 0114 0000 nop
246 0116 0000 nop
247 0118 0000 nop
248 011a 0000 nop
249 011c 0000 nop
250 011e 0000 nop
251 0120 0000 nop
252 0122 0000 nop
253 0124 0000 nop
254 0126 0000 nop
255 0128 0000 nop
256 012a 0000 nop
257 /* #NOAPP */
258 012c E091 0000 lds r30,SPI_TX_Buffer
259 0130 F091 0000 lds r31,(SPI_TX_Buffer)+1
260 0134 E20F add r30,r18
261 0136 F11D adc r31,__zero_reg__
262 0138 8081 ld r24,Z
263 013a 8EBD out 78-0x20,r24
264 013c 8091 0000 lds r24,ToNaviCtrl+33
265 0140 9081 ld r25,Z
266 0142 890F add r24,r25
267 0144 8093 0000 sts ToNaviCtrl+33,r24
268 0148 00C0 rjmp .L18
269 .L17:
270 014a 81E0 ldi r24,lo8(1)
271 014c 8093 0000 sts SPITransferCompleted,r24
272 .L18:
273 0150 2F5F subi r18,lo8(-(1))
274 0152 2093 0000 sts SPI_BufferIndex,r18
275 .L2:
276 0156 0895 ret
277 /* epilogue: frame size=0 */
278 /* epilogue: noreturn */
279 /* epilogue end (size=0) */
280 /* function SPI_TransmitByte size 164 (164) */
282 .lcomm motorindex.0,1
283 .data
286 oldcommand.1:
287 000e 68 .byte 104
288 .text
289 .global UpdateSPI_Buffer
291 UpdateSPI_Buffer:
292 /* prologue: frame size=0 */
293 0158 EF92 push r14
294 015a FF92 push r15
295 015c 0F93 push r16
296 015e 1F93 push r17
297 /* prologue end (size=4) */
298 0160 8091 0000 lds r24,EE_Parameter+28
299 0164 9927 clr r25
300 0166 880F lsl r24
301 0168 991F rol r25
302 016a 880F lsl r24
303 016c 991F rol r25
304 016e 7C01 movw r14,r24
305 0170 0027 clr r16
306 0172 F7FC sbrc r15,7
307 0174 0095 com r16
308 0176 102F mov r17,r16
309 0178 8091 0000 lds r24,IntegralNick
310 017c 9091 0000 lds r25,(IntegralNick)+1
311 0180 A091 0000 lds r26,(IntegralNick)+2
312 0184 B091 0000 lds r27,(IntegralNick)+3
313 0188 BC01 movw r22,r24
314 018a CD01 movw r24,r26
315 018c A801 movw r20,r16
316 018e 9701 movw r18,r14
317 0190 0E94 0000 call __divmodsi4
318 0194 3093 0000 sts (ToNaviCtrl+3)+1,r19
319 0198 2093 0000 sts ToNaviCtrl+3,r18
320 019c 8091 0000 lds r24,IntegralRoll
321 01a0 9091 0000 lds r25,(IntegralRoll)+1
322 01a4 A091 0000 lds r26,(IntegralRoll)+2
323 01a8 B091 0000 lds r27,(IntegralRoll)+3
324 01ac BC01 movw r22,r24
325 01ae CD01 movw r24,r26
326 01b0 A801 movw r20,r16
327 01b2 9701 movw r18,r14
328 01b4 0E94 0000 call __divmodsi4
329 01b8 3093 0000 sts (ToNaviCtrl+5)+1,r19
330 01bc 2093 0000 sts ToNaviCtrl+5,r18
331 01c0 2091 0000 lds r18,ErsatzKompass
332 01c4 3091 0000 lds r19,(ErsatzKompass)+1
333 01c8 4091 0000 lds r20,(ErsatzKompass)+2
334 01cc 5091 0000 lds r21,(ErsatzKompass)+3
335 01d0 DA01 movw r26,r20
336 01d2 C901 movw r24,r18
337 01d4 63E0 ldi r22,3
338 01d6 880F 1: lsl r24
339 01d8 991F rol r25
340 01da AA1F rol r26
341 01dc BB1F rol r27
342 01de 6A95 dec r22
343 01e0 01F4 brne 1b
344 01e2 820F add r24,r18
345 01e4 931F adc r25,r19
346 01e6 A41F adc r26,r20
347 01e8 B51F adc r27,r21
348 01ea 820F add r24,r18
349 01ec 931F adc r25,r19
350 01ee A41F adc r26,r20
351 01f0 B51F adc r27,r21
352 01f2 2091 0000 lds r18,GIER_GRAD_FAKTOR
353 01f6 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
354 01fa 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
355 01fe 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
356 0202 BC01 movw r22,r24
357 0204 CD01 movw r24,r26
358 0206 0E94 0000 call __divmodsi4
359 020a 3093 0000 sts (ToNaviCtrl+11)+1,r19
360 020e 2093 0000 sts ToNaviCtrl+11,r18
361 0212 8091 0000 lds r24,AdNeutralGier
362 0216 9091 0000 lds r25,(AdNeutralGier)+1
363 021a 2091 0000 lds r18,AdWertGier
364 021e 3091 0000 lds r19,(AdWertGier)+1
365 0222 821B sub r24,r18
366 0224 930B sbc r25,r19
367 0226 9093 0000 sts (ToNaviCtrl+17)+1,r25
368 022a 8093 0000 sts ToNaviCtrl+17,r24
369 022e E091 0000 lds r30,NaviCntAcc
370 0232 F091 0000 lds r31,(NaviCntAcc)+1
371 0236 8091 0000 lds r24,NaviAccNick
372 023a 9091 0000 lds r25,(NaviAccNick)+1
373 023e BF01 movw r22,r30
374 0240 0E94 0000 call __divmodhi4
375 0244 9B01 movw r18,r22
376 0246 220F lsl r18
377 0248 331F rol r19
378 024a 220F lsl r18
379 024c 331F rol r19
380 024e 260F add r18,r22
381 0250 371F adc r19,r23
382 0252 260F add r18,r22
383 0254 371F adc r19,r23
384 0256 37FF sbrs r19,7
385 0258 00C0 rjmp .L21
386 025a 2D5F subi r18,lo8(-(3))
387 025c 3F4F sbci r19,hi8(-(3))
388 .L21:
389 025e 3595 asr r19
390 0260 2795 ror r18
391 0262 3595 asr r19
392 0264 2795 ror r18
393 0266 3093 0000 sts (ToNaviCtrl+7)+1,r19
394 026a 2093 0000 sts ToNaviCtrl+7,r18
395 026e 8091 0000 lds r24,NaviAccRoll
396 0272 9091 0000 lds r25,(NaviAccRoll)+1
397 0276 BF01 movw r22,r30
398 0278 0E94 0000 call __divmodhi4
399 027c 9B01 movw r18,r22
400 027e 220F lsl r18
401 0280 331F rol r19
402 0282 220F lsl r18
403 0284 331F rol r19
404 0286 260F add r18,r22
405 0288 371F adc r19,r23
406 028a 260F add r18,r22
407 028c 371F adc r19,r23
408 028e 37FF sbrs r19,7
409 0290 00C0 rjmp .L22
410 0292 2D5F subi r18,lo8(-(3))
411 0294 3F4F sbci r19,hi8(-(3))
412 .L22:
413 0296 3595 asr r19
414 0298 2795 ror r18
415 029a 3595 asr r19
416 029c 2795 ror r18
417 029e 3093 0000 sts (ToNaviCtrl+9)+1,r19
418 02a2 2093 0000 sts ToNaviCtrl+9,r18
419 02a6 1092 0000 sts (NaviCntAcc)+1,__zero_reg__
420 02aa 1092 0000 sts NaviCntAcc,__zero_reg__
421 02ae 1092 0000 sts (NaviAccNick)+1,__zero_reg__
422 02b2 1092 0000 sts NaviAccNick,__zero_reg__
423 02b6 1092 0000 sts (NaviAccRoll)+1,__zero_reg__
424 02ba 1092 0000 sts NaviAccRoll,__zero_reg__
425 02be 8091 0000 lds r24,ToNaviCtrl+2
426 02c2 9927 clr r25
427 02c4 AA27 clr r26
428 02c6 BB27 clr r27
429 02c8 FC01 movw r30,r24
430 02ca 3A97 sbiw r30,10
431 02cc E830 cpi r30,8
432 02ce F105 cpc r31,__zero_reg__
433 02d0 00F0 brlo .+2
434 02d2 00C0 rjmp .L23
435 02d4 E050 subi r30,lo8(-(pm(.L50)))
436 02d6 F040 sbci r31,hi8(-(pm(.L50)))
437 02d8 0C94 0000 jmp __tablejump2__
438 .data
439 .section .progmem.gcc_sw_table, "a", @progbits
440 .p2align 1
441 .L50:
442 0000 0000 .word pm(.L24)
443 0002 0000 .word pm(.L31)
444 0004 0000 .word pm(.L44)
445 0006 0000 .word pm(.L26)
446 0008 0000 .word pm(.L48)
447 000a 0000 .word pm(.L49)
448 000c 0000 .word pm(.L25)
449 000e 0000 .word pm(.L27)
450 .text
451 .L24:
452 02dc 8091 0000 lds r24,Parameter_UserParam1
453 02e0 8093 0000 sts ToNaviCtrl+21,r24
454 02e4 8091 0000 lds r24,Parameter_UserParam2
455 02e8 8093 0000 sts ToNaviCtrl+22,r24
456 02ec 8091 0000 lds r24,Parameter_UserParam3
457 02f0 8093 0000 sts ToNaviCtrl+23,r24
458 02f4 8091 0000 lds r24,Parameter_UserParam4
459 02f8 8093 0000 sts ToNaviCtrl+24,r24
460 02fc 8091 0000 lds r24,Parameter_UserParam5
461 0300 8093 0000 sts ToNaviCtrl+25,r24
462 0304 8091 0000 lds r24,Parameter_UserParam6
463 0308 8093 0000 sts ToNaviCtrl+26,r24
464 030c 8091 0000 lds r24,Parameter_UserParam7
465 0310 8093 0000 sts ToNaviCtrl+27,r24
466 0314 8091 0000 lds r24,Parameter_UserParam8
467 0318 8093 0000 sts ToNaviCtrl+28,r24
468 031c 8091 0000 lds r24,FC_StatusFlags
469 0320 8093 0000 sts ToNaviCtrl+29,r24
470 0324 8091 0000 lds r24,FC_StatusFlags
471 0328 837F andi r24,lo8(-13)
472 032a 8093 0000 sts FC_StatusFlags,r24
473 032e 0E94 0000 call GetActiveParamSet
474 0332 8093 0000 sts ToNaviCtrl+30,r24
475 0336 8091 0000 lds r24,EE_Parameter+102
476 033a 8093 0000 sts ToNaviCtrl+31,r24
477 033e 8091 0000 lds r24,FC_StatusFlags2
478 0342 00C0 rjmp .L72
479 .L25:
480 0344 8091 0000 lds r24,Capacity
481 0348 9091 0000 lds r25,(Capacity)+1
482 034c 9093 0000 sts (ToNaviCtrl+21)+1,r25
483 0350 8093 0000 sts ToNaviCtrl+21,r24
484 0354 8091 0000 lds r24,Capacity+4
485 0358 9091 0000 lds r25,(Capacity+4)+1
486 035c 9093 0000 sts (ToNaviCtrl+23)+1,r25
487 0360 8093 0000 sts ToNaviCtrl+23,r24
488 0364 8091 0000 lds r24,UBat
489 0368 9091 0000 lds r25,(UBat)+1
490 036c 8093 0000 sts ToNaviCtrl+25,r24
491 0370 8091 0000 lds r24,BattLowVoltageWarning
492 0374 8093 0000 sts ToNaviCtrl+26,r24
493 0378 8091 0000 lds r24,VarioCharacter
494 037c 8093 0000 sts ToNaviCtrl+27,r24
495 0380 9091 0000 lds r25,motorindex.0
496 0384 9093 0000 sts ToNaviCtrl+28,r25
497 0388 E92F mov r30,r25
498 038a FF27 clr r31
499 038c A3E0 ldi r26,3
500 038e EE0F 1: lsl r30
501 0390 FF1F rol r31
502 0392 AA95 dec r26
503 0394 01F4 brne 1b
504 0396 E050 subi r30,lo8(-(Motor))
505 0398 F040 sbci r31,hi8(-(Motor))
506 039a 8681 ldd r24,Z+6
507 039c 8093 0000 sts ToNaviCtrl+29,r24
508 03a0 8381 ldd r24,Z+3
509 03a2 8093 0000 sts ToNaviCtrl+30,r24
510 03a6 8781 ldd r24,Z+7
511 03a8 8093 0000 sts ToNaviCtrl+31,r24
512 03ac 8581 ldd r24,Z+5
513 03ae 8093 0000 sts ToNaviCtrl+32,r24
514 03b2 892F mov r24,r25
515 03b4 8F5F subi r24,lo8(-(1))
516 03b6 6CE0 ldi r22,lo8(12)
517 03b8 0E94 0000 call __udivmodqi4
518 03bc 9093 0000 sts motorindex.0,r25
519 03c0 00C0 rjmp .L23
520 .L26:
521 03c2 8091 0000 lds r24,EE_Parameter+81
522 03c6 8093 0000 sts ToNaviCtrl+21,r24
523 03ca 8091 0000 lds r24,EE_Parameter+82
524 03ce 8093 0000 sts ToNaviCtrl+22,r24
525 03d2 8091 0000 lds r24,EE_Parameter+83
526 03d6 8093 0000 sts ToNaviCtrl+23,r24
527 03da 8091 0000 lds r24,EE_Parameter+84
528 03de 8093 0000 sts ToNaviCtrl+24,r24
529 03e2 8091 0000 lds r24,EE_Parameter+85
530 03e6 8093 0000 sts ToNaviCtrl+25,r24
531 03ea 8091 0000 lds r24,EE_Parameter+89
532 03ee 8093 0000 sts ToNaviCtrl+26,r24
533 03f2 8091 0000 lds r24,EE_Parameter+90
534 03f6 8093 0000 sts ToNaviCtrl+27,r24
535 03fa 8091 0000 lds r24,EE_Parameter+91
536 03fe 8093 0000 sts ToNaviCtrl+28,r24
537 0402 8091 0000 lds r24,EE_Parameter+94
538 0406 8093 0000 sts ToNaviCtrl+29,r24
539 040a 8091 0000 lds r24,EE_Parameter+92
540 040e 8093 0000 sts ToNaviCtrl+30,r24
541 0412 8091 0000 lds r24,EE_Parameter+93
542 0416 8093 0000 sts ToNaviCtrl+31,r24
543 041a 8091 0000 lds r24,EE_Parameter+95
544 041e 00C0 rjmp .L72
545 .L27:
546 0420 8091 0000 lds r24,EE_Parameter+80
547 0424 8093 0000 sts ToNaviCtrl+21,r24
548 0428 8091 0000 lds r24,EE_Parameter+39
549 042c 8630 cpi r24,lo8(6)
550 042e 01F0 breq .L28
551 0430 8091 0000 lds r24,JetiBeep
552 0434 8234 cpi r24,lo8(66)
553 0436 01F0 breq .L29
554 0438 0E94 0000 call HoTT_Waring
555 043c E82F mov r30,r24
556 043e FF27 clr r31
557 0440 E050 subi r30,lo8(-(JETI_CODE))
558 0442 F040 sbci r31,hi8(-(JETI_CODE))
559 /* #APP */
560 0444 8491 lpm r24, Z
561
562 /* #NOAPP */
563 0446 8093 0000 sts JetiBeep,r24
564 044a 00C0 rjmp .L28
565 .L29:
566 044c 0E94 0000 call HoTT_Waring
567 .L28:
568 0450 8091 0000 lds r24,ToNC_SpeakHoTT
569 0454 8093 0000 sts ToNaviCtrl+22,r24
570 0458 00C0 rjmp .L23
571 .L31:
572 /* #APP */
573 045a F894 cli
574 /* #NOAPP */
575 045c 8091 0000 lds r24,EE_Parameter+3
576 0460 E82F mov r30,r24
577 0462 FF27 clr r31
578 0464 EE0F add r30,r30
579 0466 FF1F adc r31,r31
580 0468 E050 subi r30,lo8(-(PPM_in))
581 046a F040 sbci r31,hi8(-(PPM_in))
582 046c 0190 ld __tmp_reg__,Z+
583 046e F081 ld r31,Z
584 0470 E02D mov r30,__tmp_reg__
585 0472 E038 cpi r30,128
586 0474 F105 cpc r31,__zero_reg__
587 0476 04F0 brlt .L32
588 0478 EFE7 ldi r30,lo8(127)
589 047a F0E0 ldi r31,hi8(127)
590 047c 00C0 rjmp .L33
591 .L32:
592 047e 2FEF ldi r18,hi8(-127)
593 0480 E138 cpi r30,lo8(-127)
594 0482 F207 cpc r31,r18
595 0484 04F4 brge .L33
596 0486 E1E8 ldi r30,lo8(-127)
597 0488 FFEF ldi r31,hi8(-127)
598 .L33:
599 048a E093 0000 sts ToNaviCtrl+21,r30
600 048e 8091 0000 lds r24,EE_Parameter+4
601 0492 E82F mov r30,r24
602 0494 FF27 clr r31
603 0496 EE0F add r30,r30
604 0498 FF1F adc r31,r31
605 049a E050 subi r30,lo8(-(PPM_in))
606 049c F040 sbci r31,hi8(-(PPM_in))
607 049e 0190 ld __tmp_reg__,Z+
608 04a0 F081 ld r31,Z
609 04a2 E02D mov r30,__tmp_reg__
610 04a4 E038 cpi r30,128
611 04a6 F105 cpc r31,__zero_reg__
612 04a8 04F0 brlt .L35
613 04aa EFE7 ldi r30,lo8(127)
614 04ac F0E0 ldi r31,hi8(127)
615 04ae 00C0 rjmp .L36
616 .L35:
617 04b0 7FEF ldi r23,hi8(-127)
618 04b2 E138 cpi r30,lo8(-127)
619 04b4 F707 cpc r31,r23
620 04b6 04F4 brge .L36
621 04b8 E1E8 ldi r30,lo8(-127)
622 04ba FFEF ldi r31,hi8(-127)
623 .L36:
624 04bc E093 0000 sts ToNaviCtrl+22,r30
625 04c0 8091 0000 lds r24,EE_Parameter+2
626 04c4 E82F mov r30,r24
627 04c6 FF27 clr r31
628 04c8 EE0F add r30,r30
629 04ca FF1F adc r31,r31
630 04cc E050 subi r30,lo8(-(PPM_in))
631 04ce F040 sbci r31,hi8(-(PPM_in))
632 04d0 0190 ld __tmp_reg__,Z+
633 04d2 F081 ld r31,Z
634 04d4 E02D mov r30,__tmp_reg__
635 04d6 E038 cpi r30,128
636 04d8 F105 cpc r31,__zero_reg__
637 04da 04F0 brlt .L38
638 04dc EFE7 ldi r30,lo8(127)
639 04de F0E0 ldi r31,hi8(127)
640 04e0 00C0 rjmp .L39
641 .L38:
642 04e2 8FEF ldi r24,hi8(-127)
643 04e4 E138 cpi r30,lo8(-127)
644 04e6 F807 cpc r31,r24
645 04e8 04F4 brge .L39
646 04ea E1E8 ldi r30,lo8(-127)
647 04ec FFEF ldi r31,hi8(-127)
648 .L39:
649 04ee E093 0000 sts ToNaviCtrl+23,r30
650 04f2 8091 0000 lds r24,EE_Parameter+1
651 04f6 E82F mov r30,r24
652 04f8 FF27 clr r31
653 04fa EE0F add r30,r30
654 04fc FF1F adc r31,r31
655 04fe E050 subi r30,lo8(-(PPM_in))
656 0500 F040 sbci r31,hi8(-(PPM_in))
657 0502 0190 ld __tmp_reg__,Z+
658 0504 F081 ld r31,Z
659 0506 E02D mov r30,__tmp_reg__
660 0508 E038 cpi r30,128
661 050a F105 cpc r31,__zero_reg__
662 050c 04F0 brlt .L41
663 050e EFE7 ldi r30,lo8(127)
664 0510 F0E0 ldi r31,hi8(127)
665 0512 00C0 rjmp .L42
666 .L41:
667 0514 2FEF ldi r18,hi8(-127)
668 0516 E138 cpi r30,lo8(-127)
669 0518 F207 cpc r31,r18
670 051a 04F4 brge .L42
671 051c E1E8 ldi r30,lo8(-127)
672 051e FFEF ldi r31,hi8(-127)
673 .L42:
674 /* #APP */
675 0520 7894 sei
676 /* #NOAPP */
677 0522 E093 0000 sts ToNaviCtrl+24,r30
678 0526 8091 0000 lds r24,Poti
679 052a 8093 0000 sts ToNaviCtrl+25,r24
680 052e 8091 0000 lds r24,Poti+1
681 0532 8093 0000 sts ToNaviCtrl+26,r24
682 0536 8091 0000 lds r24,Poti+2
683 053a 8093 0000 sts ToNaviCtrl+27,r24
684 053e 8091 0000 lds r24,Poti+3
685 0542 8093 0000 sts ToNaviCtrl+28,r24
686 0546 8091 0000 lds r24,Poti+4
687 054a 8093 0000 sts ToNaviCtrl+29,r24
688 054e 8091 0000 lds r24,Poti+5
689 0552 8093 0000 sts ToNaviCtrl+30,r24
690 0556 8091 0000 lds r24,Poti+6
691 055a 8093 0000 sts ToNaviCtrl+31,r24
692 055e 8091 0000 lds r24,Poti+7
693 0562 00C0 rjmp .L72
694 .L44:
695 0564 8091 0000 lds r24,WinkelOut+6
696 0568 8630 cpi r24,lo8(6)
697 056a 00F0 brlo .L45
698 056c 1092 0000 sts WinkelOut+6,__zero_reg__
699 0570 85E0 ldi r24,lo8(5)
700 .L45:
701 0572 8093 0000 sts ToNaviCtrl+21,r24
702 0576 8091 0000 lds r24,EE_Parameter+96
703 057a 8093 0000 sts ToNaviCtrl+22,r24
704 057e 8091 0000 lds r24,HoehenWert
705 0582 9091 0000 lds r25,(HoehenWert)+1
706 0586 A091 0000 lds r26,(HoehenWert)+2
707 058a B091 0000 lds r27,(HoehenWert)+3
708 058e BC01 movw r22,r24
709 0590 CD01 movw r24,r26
710 0592 25E0 ldi r18,lo8(5)
711 0594 30E0 ldi r19,hi8(5)
712 0596 40E0 ldi r20,hlo8(5)
713 0598 50E0 ldi r21,hhi8(5)
714 059a 0E94 0000 call __divmodsi4
715 059e 3093 0000 sts (ToNaviCtrl+23)+1,r19
716 05a2 2093 0000 sts ToNaviCtrl+23,r18
717 05a6 8091 0000 lds r24,SollHoehe
718 05aa 9091 0000 lds r25,(SollHoehe)+1
719 05ae A091 0000 lds r26,(SollHoehe)+2
720 05b2 B091 0000 lds r27,(SollHoehe)+3
721 05b6 BC01 movw r22,r24
722 05b8 CD01 movw r24,r26
723 05ba 25E0 ldi r18,lo8(5)
724 05bc 30E0 ldi r19,hi8(5)
725 05be 40E0 ldi r20,hlo8(5)
726 05c0 50E0 ldi r21,hhi8(5)
727 05c2 0E94 0000 call __divmodsi4
728 05c6 3093 0000 sts (ToNaviCtrl+25)+1,r19
729 05ca 2093 0000 sts ToNaviCtrl+25,r18
730 05ce 8091 0000 lds r24,EE_Parameter+86
731 05d2 8093 0000 sts ToNaviCtrl+27,r24
732 05d6 8091 0000 lds r24,EE_Parameter+87
733 05da 8093 0000 sts ToNaviCtrl+28,r24
734 05de 8091 0000 lds r24,EE_Parameter+88
735 05e2 8093 0000 sts ToNaviCtrl+29,r24
736 05e6 8091 0000 lds r24,SenderOkay
737 05ea 8093 0000 sts ToNaviCtrl+30,r24
738 05ee 8091 0000 lds r24,PPM_in
739 05f2 9091 0000 lds r25,(PPM_in)+1
740 05f6 8093 0000 sts ToNaviCtrl+31,r24
741 05fa 8091 0000 lds r24,DebugOut+16
742 05fe 9091 0000 lds r25,(DebugOut+16)+1
743 0602 97FD sbrc r25,7
744 0604 0396 adiw r24,3
745 .L47:
746 0606 9595 asr r25
747 0608 8795 ror r24
748 060a 9595 asr r25
749 060c 8795 ror r24
750 060e 00C0 rjmp .L72
751 .L48:
752 0610 1092 0000 sts ToNaviCtrl+21,__zero_reg__
753 0614 8AE5 ldi r24,lo8(90)
754 0616 8093 0000 sts ToNaviCtrl+22,r24
755 061a 83E0 ldi r24,lo8(3)
756 061c 8093 0000 sts ToNaviCtrl+23,r24
757 0620 84E3 ldi r24,lo8(52)
758 0622 8093 0000 sts ToNaviCtrl+24,r24
759 0626 8091 0000 lds r24,PlatinenVersion
760 062a 8093 0000 sts ToNaviCtrl+25,r24
761 062e 8091 0000 lds r24,VersionInfo+5
762 0632 8093 0000 sts ToNaviCtrl+26,r24
763 0636 9091 0000 lds r25,VersionInfo+6
764 063a 9093 0000 sts ToNaviCtrl+27,r25
765 063e 8F77 andi r24,lo8(127)
766 0640 8093 0000 sts VersionInfo+5,r24
767 0644 9071 andi r25,lo8(16)
768 0646 9093 0000 sts VersionInfo+6,r25
769 064a 8091 0000 lds r24,VersionInfo+7
770 064e 8093 0000 sts ToNaviCtrl+28,r24
771 0652 8091 0000 lds r24,Parameter_GlobalConfig
772 0656 8093 0000 sts ToNaviCtrl+29,r24
773 065a 8091 0000 lds r24,Parameter_ExtraConfig
774 065e 8093 0000 sts ToNaviCtrl+30,r24
775 0662 8091 0000 lds r24,EE_Parameter+98
776 0666 8093 0000 sts ToNaviCtrl+31,r24
777 066a 8091 0000 lds r24,EE_Parameter+111
778 066e 00C0 rjmp .L72
779 .L49:
780 0670 8091 0000 lds r24,EE_Parameter+53
781 0674 8093 0000 sts ToNaviCtrl+21,r24
782 0678 8091 0000 lds r24,EE_Parameter+109
783 067c 8093 0000 sts ToNaviCtrl+22,r24
784 0680 8091 0000 lds r24,Parameter_ServoNickControl
785 0684 8093 0000 sts ToNaviCtrl+23,r24
786 0688 8091 0000 lds r24,EE_Parameter+46
787 068c 8093 0000 sts ToNaviCtrl+24,r24
788 0690 8091 0000 lds r24,EE_Parameter+47
789 0694 8093 0000 sts ToNaviCtrl+25,r24
790 0698 8091 0000 lds r24,EE_Parameter+48
791 069c 8093 0000 sts ToNaviCtrl+26,r24
792 06a0 8091 0000 lds r24,Parameter_ServoRollControl
793 06a4 8093 0000 sts ToNaviCtrl+27,r24
794 06a8 8091 0000 lds r24,EE_Parameter+50
795 06ac 8093 0000 sts ToNaviCtrl+28,r24
796 06b0 8091 0000 lds r24,EE_Parameter+51
797 06b4 8093 0000 sts ToNaviCtrl+29,r24
798 06b8 8091 0000 lds r24,EE_Parameter+52
799 06bc 8093 0000 sts ToNaviCtrl+30,r24
800 06c0 8091 0000 lds r24,Capacity+6
801 06c4 8093 0000 sts ToNaviCtrl+31,r24
802 06c8 8091 0000 lds r24,DebugOut+58
803 .L72:
804 06cc 8093 0000 sts ToNaviCtrl+32,r24
805 .L23:
806 06d0 8091 0000 lds r24,SPI_RxDataValid
807 06d4 8823 tst r24
808 06d6 01F4 brne .+2
809 06d8 00C0 rjmp .L51
810 06da 6091 0000 lds r22,FromNaviCtrl
811 06de 8091 0000 lds r24,oldcommand.1
812 06e2 6817 cp r22,r24
813 06e4 01F0 breq .L52
814 06e6 8AEF ldi r24,lo8(-6)
815 06e8 8093 0000 sts NaviDataOkay,r24
816 .L52:
817 06ec 6093 0000 sts oldcommand.1,r22
818 06f0 81E0 ldi r24,lo8(1)
819 06f2 8093 0000 sts CalculateCompassTimer,r24
820 06f6 4091 0000 lds r20,FromNaviCtrl+1
821 06fa 5091 0000 lds r21,(FromNaviCtrl+1)+1
822 06fe CA01 movw r24,r20
823 0700 8150 subi r24,lo8(-(511))
824 0702 9E4F sbci r25,hi8(-(511))
825 0704 8F5F subi r24,lo8(1023)
826 0706 9340 sbci r25,hi8(1023)
827 0708 00F4 brsh .L53
828 070a 2091 0000 lds r18,FromNaviCtrl+3
829 070e 3091 0000 lds r19,(FromNaviCtrl+3)+1
830 0712 C901 movw r24,r18
831 0714 8150 subi r24,lo8(-(511))
832 0716 9E4F sbci r25,hi8(-(511))
833 0718 8F5F subi r24,lo8(1023)
834 071a 9340 sbci r25,hi8(1023)
835 071c 00F4 brsh .L53
836 071e 8091 0000 lds r24,EE_Parameter+13
837 0722 85FF sbrs r24,5
838 0724 00C0 rjmp .L53
839 0726 5093 0000 sts (GPS_Nick)+1,r21
840 072a 4093 0000 sts GPS_Nick,r20
841 072e 3093 0000 sts (GPS_Roll)+1,r19
842 0732 2093 0000 sts GPS_Roll,r18
843 .L53:
844 0736 8091 0000 lds r24,FromNaviCtrl+7
845 073a 9091 0000 lds r25,(FromNaviCtrl+7)+1
846 073e 21E0 ldi r18,hi8(361)
847 0740 8936 cpi r24,lo8(361)
848 0742 9207 cpc r25,r18
849 0744 04F4 brge .L54
850 0746 9093 0000 sts (KompassValue)+1,r25
851 074a 8093 0000 sts KompassValue,r24
852 .L54:
853 074e 2091 0000 lds r18,FromNaviCtrl+17
854 0752 3091 0000 lds r19,(FromNaviCtrl+17)+1
855 0756 8091 0000 lds r24,beeptime
856 075a 9091 0000 lds r25,(beeptime)+1
857 075e 8217 cp r24,r18
858 0760 9307 cpc r25,r19
859 0762 00F4 brsh .L55
860 0764 8091 0000 lds r24,DisableRcOffBeeping
861 0768 8823 tst r24
862 076a 01F4 brne .L55
863 076c 3093 0000 sts (beeptime)+1,r19
864 0770 2093 0000 sts beeptime,r18
865 .L55:
866 0774 862F mov r24,r22
867 0776 9927 clr r25
868 0778 8936 cpi r24,105
869 077a 9105 cpc r25,__zero_reg__
870 077c 01F4 brne .+2
871 077e 00C0 rjmp .L62
872 0780 8A36 cpi r24,106
873 0782 9105 cpc r25,__zero_reg__
874 0784 04F4 brge .L70
875 0786 8736 cpi r24,103
876 0788 9105 cpc r25,__zero_reg__
877 078a 01F0 breq .L57
878 078c 8836 cpi r24,104
879 078e 9105 cpc r25,__zero_reg__
880 0790 01F4 brne .+2
881 0792 00C0 rjmp .L61
882 0794 00C0 rjmp .L20
883 .L70:
884 0796 8A36 cpi r24,106
885 0798 9105 cpc r25,__zero_reg__
886 079a 01F4 brne .+2
887 079c 00C0 rjmp .L67
888 079e 8B36 cpi r24,107
889 07a0 9105 cpc r25,__zero_reg__
890 07a2 01F4 brne .+2
891 07a4 00C0 rjmp .L63
892 07a6 00C0 rjmp .L20
893 .L57:
894 07a8 8091 0000 lds r24,FromNaviCtrl+19
895 07ac 8093 0000 sts FromNaviCtrl_Value,r24
896 07b0 8091 0000 lds r24,FromNaviCtrl+20
897 07b4 8093 0000 sts FromNaviCtrl_Value+2,r24
898 07b8 8091 0000 lds r24,FromNaviCtrl+21
899 07bc 8093 0000 sts FromNaviCtrl_Value+1,r24
900 07c0 8091 0000 lds r24,FromNaviCtrl+22
901 07c4 8093 0000 sts KompassFusion,r24
902 07c8 8091 0000 lds r24,FromNaviCtrl+23
903 07cc 8093 0000 sts FromNaviCtrl_Value+4,r24
904 07d0 8091 0000 lds r24,FromNaviCtrl+24
905 07d4 8093 0000 sts FromNC_Rotate_C,r24
906 07d8 8091 0000 lds r24,FromNaviCtrl+25
907 07dc 8093 0000 sts FromNC_Rotate_S,r24
908 07e0 8091 0000 lds r24,FromNaviCtrl+26
909 07e4 8093 0000 sts GPS_Aid_StickMultiplikator,r24
910 07e8 8091 0000 lds r24,CareFree
911 07ec 8823 tst r24
912 07ee 01F0 breq .L58
913 07f0 2091 0000 lds r18,FromNaviCtrl+27
914 07f4 3091 0000 lds r19,(FromNaviCtrl+27)+1
915 07f8 37FD sbrc r19,7
916 07fa 00C0 rjmp .L58
917 07fc 3093 0000 sts (KompassSollWert)+1,r19
918 0800 2093 0000 sts KompassSollWert,r18
919 0804 9091 0000 lds r25,EE_Parameter+55
920 0808 9923 tst r25
921 080a 01F0 breq .L58
922 080c 8FE0 ldi r24,lo8(15)
923 080e 989F mul r25,r24
924 0810 C001 movw r24,r0
925 0812 1124 clr r1
926 0814 281B sub r18,r24
927 0816 390B sbc r19,r25
928 0818 C901 movw r24,r18
929 081a 8859 subi r24,lo8(-(360))
930 081c 9E4F sbci r25,hi8(-(360))
931 081e 68E6 ldi r22,lo8(360)
932 0820 71E0 ldi r23,hi8(360)
933 0822 0E94 0000 call __divmodhi4
934 0826 9093 0000 sts (KompassSollWert)+1,r25
935 082a 8093 0000 sts KompassSollWert,r24
936 .L58:
937 082e 2091 0000 lds r18,POI_KameraNick
938 0832 3091 0000 lds r19,(POI_KameraNick)+1
939 0836 8091 0000 lds r24,FromNaviCtrl+29
940 083a 9091 0000 lds r25,(FromNaviCtrl+29)+1
941 083e 280F add r18,r24
942 0840 391F adc r19,r25
943 0842 37FF sbrs r19,7
944 0844 00C0 rjmp .L60
945 0846 2F5F subi r18,lo8(-(1))
946 0848 3F4F sbci r19,hi8(-(1))
947 .L60:
948 084a 3595 asr r19
949 084c 2795 ror r18
950 084e 3093 0000 sts (POI_KameraNick)+1,r19
951 0852 2093 0000 sts POI_KameraNick,r18
952 0856 00C0 rjmp .L20
953 .L61:
954 0858 8091 0000 lds r24,FromNaviCtrl+19
955 085c 8093 0000 sts NC_Version,r24
956 0860 8091 0000 lds r24,FromNaviCtrl+20
957 0864 8093 0000 sts NC_Version+1,r24
958 0868 8091 0000 lds r24,FromNaviCtrl+21
959 086c 8093 0000 sts NC_Version+2,r24
960 0870 8091 0000 lds r24,FromNaviCtrl+22
961 0874 8093 0000 sts NC_Version+3,r24
962 0878 8091 0000 lds r24,FromNaviCtrl+23
963 087c 8093 0000 sts NC_Version+4,r24
964 0880 8091 0000 lds r24,DebugOut
965 0884 9091 0000 lds r25,FromNaviCtrl+24
966 0888 892B or r24,r25
967 088a 8093 0000 sts DebugOut,r24
968 088e 9091 0000 lds r25,DebugOut+1
969 0892 9370 andi r25,lo8(3)
970 0894 8091 0000 lds r24,FromNaviCtrl+25
971 0898 8C70 andi r24,lo8(12)
972 089a 982B or r25,r24
973 089c 9093 0000 sts DebugOut+1,r25
974 08a0 8091 0000 lds r24,FromNaviCtrl+26
975 08a4 8093 0000 sts NC_ErrorCode,r24
976 08a8 8091 0000 lds r24,FromNaviCtrl+27
977 08ac 8093 0000 sts NC_GPS_ModeCharacter,r24
978 08b0 8091 0000 lds r24,FromNaviCtrl+28
979 08b4 8093 0000 sts FromNaviCtrl_Value+3,r24
980 08b8 8091 0000 lds r24,FromNaviCtrl+29
981 08bc 8093 0000 sts NC_To_FC_Flags,r24
982 08c0 8091 0000 lds r24,FromNaviCtrl+30
983 08c4 8093 0000 sts NC_To_FC_MaxAltitude,r24
984 08c8 00C0 rjmp .L20
985 .L62:
986 08ca 8091 0000 lds r24,FromNaviCtrl+19
987 08ce 8093 0000 sts GPSInfo,r24
988 08d2 8091 0000 lds r24,FromNaviCtrl+20
989 08d6 8093 0000 sts GPSInfo+1,r24
990 08da 8091 0000 lds r24,FromNaviCtrl+21
991 08de 8093 0000 sts GPSInfo+2,r24
992 08e2 8091 0000 lds r24,FromNaviCtrl+22
993 08e6 8093 0000 sts GPSInfo+3,r24
994 08ea 8091 0000 lds r24,FromNaviCtrl+23
995 08ee 9091 0000 lds r25,(FromNaviCtrl+23)+1
996 08f2 9093 0000 sts (GPSInfo+4)+1,r25
997 08f6 8093 0000 sts GPSInfo+4,r24
998 08fa 8091 0000 lds r24,FromNaviCtrl+25
999 08fe 9091 0000 lds r25,(FromNaviCtrl+25)+1
1000 0902 9093 0000 sts (GPSInfo+6)+1,r25
1001 0906 8093 0000 sts GPSInfo+6,r24
1002 090a 8091 0000 lds r24,FromNaviCtrl+27
1003 090e 9927 clr r25
1004 0910 87FD sbrc r24,7
1005 0912 9095 com r25
1006 0914 9093 0000 sts (PPM_in+50)+1,r25
1007 0918 8093 0000 sts PPM_in+50,r24
1008 091c 8091 0000 lds r24,FromNaviCtrl+28
1009 0920 8093 0000 sts FromNC_AltitudeSpeed,r24
1010 0924 8091 0000 lds r24,FromNaviCtrl+29
1011 0928 9091 0000 lds r25,(FromNaviCtrl+29)+1
1012 092c 9C01 movw r18,r24
1013 092e 4427 clr r20
1014 0930 37FD sbrc r19,7
1015 0932 4095 com r20
1016 0934 542F mov r21,r20
1017 0936 DA01 movw r26,r20
1018 0938 C901 movw r24,r18
1019 093a 63E0 ldi r22,3
1020 093c 880F 1: lsl r24
1021 093e 991F rol r25
1022 0940 AA1F rol r26
1023 0942 BB1F rol r27
1024 0944 6A95 dec r22
1025 0946 01F4 brne 1b
1026 0948 820F add r24,r18
1027 094a 931F adc r25,r19
1028 094c A41F adc r26,r20
1029 094e B51F adc r27,r21
1030 0950 820F add r24,r18
1031 0952 931F adc r25,r19
1032 0954 A41F adc r26,r20
1033 0956 B51F adc r27,r21
1034 0958 8093 0000 sts FromNC_AltitudeSetpoint,r24
1035 095c 9093 0000 sts (FromNC_AltitudeSetpoint)+1,r25
1036 0960 A093 0000 sts (FromNC_AltitudeSetpoint)+2,r26
1037 0964 B093 0000 sts (FromNC_AltitudeSetpoint)+3,r27
1038 0968 00C0 rjmp .L20
1039 .L63:
1040 096a 8091 0000 lds r24,FromNaviCtrl+19
1041 096e 8093 0000 sts EarthMagneticField,r24
1042 0972 8091 0000 lds r24,FromNaviCtrl+20
1043 0976 8093 0000 sts EarthMagneticInclination,r24
1044 097a 8091 0000 lds r24,FromNaviCtrl+21
1045 097e 8093 0000 sts EarthMagneticInclinationTheoretic,r24
1046 0982 9091 0000 lds r25,FromNaviCtrl+22
1047 0986 9923 tst r25
1048 0988 01F0 breq .L64
1049 098a 8091 0000 lds r24,SpeakHoTT
1050 098e 8823 tst r24
1051 0990 01F0 breq .L66
1052 0992 8151 subi r24,lo8(-(-17))
1053 0994 8330 cpi r24,lo8(3)
1054 0996 00F4 brsh .L64
1055 .L66:
1056 0998 9093 0000 sts SpeakHoTT,r25
1057 .L64:
1058 099c 8091 0000 lds r24,FromNaviCtrl+23
1059 09a0 8093 0000 sts NaviData_WaypointIndex,r24
1060 09a4 8091 0000 lds r24,FromNaviCtrl+24
1061 09a8 8093 0000 sts NaviData_WaypointNumber,r24
1062 09ac 8091 0000 lds r24,FromNaviCtrl+25
1063 09b0 9091 0000 lds r25,(FromNaviCtrl+25)+1
1064 09b4 9093 0000 sts (NaviData_TargetDistance)+1,r25
1065 09b8 8093 0000 sts NaviData_TargetDistance,r24
1066 09bc 8091 0000 lds r24,FromNaviCtrl+27
1067 09c0 8093 0000 sts NaviData_TargetHoldTime,r24
1068 09c4 00C0 rjmp .L20
1069 .L67:
1070 09c6 8091 0000 lds r24,EE_Parameter+39
1071 09ca 8630 cpi r24,lo8(6)
1072 09cc 01F4 brne .L20
1073 09ce 0E94 0000 call NC_Fills_HoTT_Telemety
1074 09d2 00C0 rjmp .L20
1075 .L51:
1076 09d4 1092 0000 sts (GPS_Nick)+1,__zero_reg__
1077 09d8 1092 0000 sts GPS_Nick,__zero_reg__
1078 09dc 1092 0000 sts (GPS_Roll)+1,__zero_reg__
1079 09e0 1092 0000 sts GPS_Roll,__zero_reg__
1080 .L20:
1081 /* epilogue: frame size=0 */
1082 09e4 1F91 pop r17
1083 09e6 0F91 pop r16
1084 09e8 FF90 pop r15
1085 09ea EF90 pop r14
1086 09ec 0895 ret
1087 /* epilogue end (size=5) */
1088 /* function UpdateSPI_Buffer size 1115 (1106) */
1090 .global SPI_StartTransmitPacket
1092 SPI_StartTransmitPacket:
1093 /* prologue: frame size=0 */
1094 /* prologue end (size=0) */
1095 09ee 8091 0000 lds r24,SPITransferCompleted
1096 09f2 8823 tst r24
1097 09f4 01F4 brne .+2
1098 09f6 00C0 rjmp .L73
1099 09f8 4598 cbi 40-0x20,5
1100 09fa 80E0 ldi r24,lo8(ToNaviCtrl)
1101 09fc 90E0 ldi r25,hi8(ToNaviCtrl)
1102 09fe 9093 0000 sts (SPI_TX_Buffer)+1,r25
1103 0a02 8093 0000 sts SPI_TX_Buffer,r24
1104 0a06 9091 0000 lds r25,SPI_CommandCounter
1105 0a0a E92F mov r30,r25
1106 0a0c FF27 clr r31
1107 0a0e E050 subi r30,lo8(-(SPI_CommandSequence))
1108 0a10 F040 sbci r31,hi8(-(SPI_CommandSequence))
1109 0a12 9F5F subi r25,lo8(-(1))
1110 0a14 9093 0000 sts SPI_CommandCounter,r25
1111 0a18 8081 ld r24,Z
1112 0a1a 8093 0000 sts ToNaviCtrl+2,r24
1113 0a1e 9B30 cpi r25,lo8(11)
1114 0a20 00F0 brlo .L75
1115 0a22 1092 0000 sts SPI_CommandCounter,__zero_reg__
1116 .L75:
1117 0a26 1092 0000 sts SPITransferCompleted,__zero_reg__
1118 0a2a 0E94 0000 call UpdateSPI_Buffer
1119 0a2e 81E0 ldi r24,lo8(1)
1120 0a30 8093 0000 sts SPI_BufferIndex,r24
1121 /* #APP */
1122 0a34 0000 nop
1123 0a36 0000 nop
1124 0a38 0000 nop
1125 0a3a 0000 nop
1126 0a3c 0000 nop
1127 0a3e 0000 nop
1128 0a40 0000 nop
1129 0a42 0000 nop
1130 0a44 0000 nop
1131 0a46 0000 nop
1132 0a48 0000 nop
1133 0a4a 0000 nop
1134 0a4c 0000 nop
1135 0a4e 0000 nop
1136 0a50 0000 nop
1137 0a52 0000 nop
1138 0a54 0000 nop
1139 0a56 0000 nop
1140 0a58 0000 nop
1141 0a5a 0000 nop
1142 0a5c 0000 nop
1143 0a5e 0000 nop
1144 0a60 0000 nop
1145 0a62 0000 nop
1146 /* #NOAPP */
1147 0a64 8091 0000 lds r24,ToNaviCtrl
1148 0a68 8093 0000 sts ToNaviCtrl+33,r24
1149 0a6c 8EBD out 78-0x20,r24
1150 .L73:
1151 0a6e 0895 ret
1152 /* epilogue: frame size=0 */
1153 /* epilogue: noreturn */
1154 /* epilogue end (size=0) */
1155 /* function SPI_StartTransmitPacket size 89 (89) */
1157 .comm GPSInfo,8,1
1158 .comm NC_Version,5,1
1159 .comm FromNaviCtrl_Value,5,1
1160 .comm ToNaviCtrl,34,1
1161 .comm FromNaviCtrl,32,1
1162 .comm SPI_BufferIndex,1,1
1163 .comm SPI_RxBufferIndex,1,1
1164 .comm SPI_Buffer,32,1
1165 .comm SPI_TX_Buffer,2,1
1166 .comm SPITransferCompleted,1,1
1167 .comm SPI_ChkSum,1,1
1168 .comm SPI_RxDataValid,1,1
1169 /* File "spi.c": code 1401 = 0x0579 (1391), prologues 4, epilogues 6 */
DEFINED SYMBOLS
*ABS*:00000000 spi.c
C:\Temp/ccCZfIIu.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccCZfIIu.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccCZfIIu.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccCZfIIu.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccCZfIIu.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccCZfIIu.s:15 .bss:00000000 MagVec
C:\Temp/ccCZfIIu.s:21 .bss:00000006 POI_KameraNick
C:\Temp/ccCZfIIu.s:27 .bss:00000008 NC_To_FC_MaxAltitude
C:\Temp/ccCZfIIu.s:33 .bss:00000009 NC_To_FC_Flags
C:\Temp/ccCZfIIu.s:39 .bss:0000000a EarthMagneticInclinationTheoretic
C:\Temp/ccCZfIIu.s:45 .bss:0000000b EarthMagneticInclination
C:\Temp/ccCZfIIu.s:51 .bss:0000000c EarthMagneticField
C:\Temp/ccCZfIIu.s:57 .data:00000000 NC_GPS_ModeCharacter
C:\Temp/ccCZfIIu.s:64 .bss:0000000d NC_ErrorCode
C:\Temp/ccCZfIIu.s:70 .bss:0000000e SPI_CommandCounter
C:\Temp/ccCZfIIu.s:76 .data:00000001 SPI_CommandSequence
C:\Temp/ccCZfIIu.s:91 .data:0000000c NaviDataOkay
C:\Temp/ccCZfIIu.s:98 .bss:0000000f FromNC_Rotate_S
C:\Temp/ccCZfIIu.s:104 .data:0000000d FromNC_Rotate_C
C:\Temp/ccCZfIIu.s:109 .text:00000000 SPI_MasterInit
*COM*:00000001 SPITransferCompleted
*COM*:00000022 ToNaviCtrl
*COM*:00000005 FromNaviCtrl_Value
*COM*:00000001 SPI_RxDataValid
.bss:00000010 SPI_RXState.2
C:\Temp/ccCZfIIu.s:139 .bss:00000011 rxchksum.3
C:\Temp/ccCZfIIu.s:143 .text:00000042 SPI_TransmitByte
*COM*:00000001 SPI_RxBufferIndex
*COM*:00000020 SPI_Buffer
*COM*:00000020 FromNaviCtrl
*COM*:00000001 SPI_BufferIndex
*COM*:00000002 SPI_TX_Buffer
C:\Temp/ccCZfIIu.s:140 .bss:00000012 motorindex.0
C:\Temp/ccCZfIIu.s:286 .data:0000000e oldcommand.1
C:\Temp/ccCZfIIu.s:291 .text:00000158 UpdateSPI_Buffer
*COM*:00000005 NC_Version
*COM*:00000008 GPSInfo
C:\Temp/ccCZfIIu.s:1092 .text:000009ee SPI_StartTransmitPacket
*COM*:00000001 SPI_ChkSum
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SendSPI
EE_Parameter
IntegralNick
__divmodsi4
IntegralRoll
ErsatzKompass
GIER_GRAD_FAKTOR
AdNeutralGier
AdWertGier
NaviCntAcc
NaviAccNick
__divmodhi4
NaviAccRoll
__tablejump2__
Parameter_UserParam1
Parameter_UserParam2
Parameter_UserParam3
Parameter_UserParam4
Parameter_UserParam5
Parameter_UserParam6
Parameter_UserParam7
Parameter_UserParam8
FC_StatusFlags
GetActiveParamSet
FC_StatusFlags2
Capacity
UBat
BattLowVoltageWarning
VarioCharacter
Motor
__udivmodqi4
JetiBeep
HoTT_Waring
JETI_CODE
ToNC_SpeakHoTT
PPM_in
Poti
WinkelOut
HoehenWert
SollHoehe
SenderOkay
DebugOut
PlatinenVersion
VersionInfo
Parameter_GlobalConfig
Parameter_ExtraConfig
Parameter_ServoNickControl
Parameter_ServoRollControl
CalculateCompassTimer
GPS_Nick
GPS_Roll
KompassValue
beeptime
DisableRcOffBeeping
KompassFusion
GPS_Aid_StickMultiplikator
CareFree
KompassSollWert
FromNC_AltitudeSpeed
FromNC_AltitudeSetpoint
SpeakHoTT
NaviData_WaypointIndex
NaviData_WaypointNumber
NaviData_TargetDistance
NaviData_TargetHoldTime
NC_Fills_HoTT_Telemety
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/timer0.c
0,0 → 1,478
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#define MULTIPLYER 4
 
volatile unsigned int CountMilliseconds = 0;
volatile unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
volatile unsigned char SendSPI = 0, ServoActive = 0, CalculateServoSignals = 1;
uint16_t RemainingPulse = 0;
volatile int16_t ServoNickOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon
volatile int16_t ServoRollOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon
 
unsigned int BeepMuster = 0xffff;
signed int NickServoValue = 128 * MULTIPLYER * 16;
 
volatile int16_t ServoNickValue = 0;
volatile int16_t ServoRollValue = 0;
 
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
ISR(TIMER0_OVF_vect) // 9,7kHz
{
static unsigned char cnt_1ms = 1,cnt = 0, compass_active = 0;
unsigned char pieper_ein = 0;
if(SendSPI) SendSPI--;
if(SpektrumTimer) SpektrumTimer--;
if(!cnt--)
{
cnt = 9;
CountMilliseconds++;
cnt_1ms++;
cnt_1ms %= 2;
 
if(!cnt_1ms) UpdateMotor = 1;
if(!(PINC & 0x10)) compass_active = 1;
 
if(beeptime)
{
if(beeptime > 10) beeptime -= 10; else beeptime = 0;
if(beeptime & BeepMuster)
{
pieper_ein = 1;
}
else pieper_ein = 0;
}
else
{
pieper_ein = 0;
BeepMuster = 0xffff;
}
if(pieper_ein)
{
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2
else PORTC |= (1<<7); // Speaker an PORTC.7
}
else
{
if(PlatinenVersion == 10) PORTD &= ~(1<<2);
else PORTC &= ~(1<<7);
}
}
if(compass_active && !NaviDataOkay && Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
if(++cntKompass > 1000) compass_active = 0;
}
else
{
if((cntKompass) && (cntKompass < 362))
{
cntKompass += cntKompass / 41;
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0;
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
}
cntKompass = 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));
}
 
void Delay_ms_Mess(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;}
}
 
/*****************************************************/
/* Initialize Timer 2 */
/*****************************************************/
// The timer 2 is used to generate the PWM at PD7 (J7)
// to control a camera servo for nick compensation.
void TIMER2_Init(void)
{
uint8_t sreg = SREG;
 
// disable all interrupts before reconfiguration
cli();
 
PORTD &= ~(1<<PORTD7); // set PD7 to low
 
DDRC |= (1<<DDC6); // set PC6 as output (Reset for HEF4017)
HEF4017Reset_ON;
// Timer/Counter 2 Control Register A
 
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1)
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0)
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0)
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0));
TCCR2A |= (1<<WGM21)|(1<<WGM20);
 
// Timer/Counter 2 Control Register B
 
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms
 
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1)
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22));
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22);
 
// Initialize the Timer/Counter 2 Register
TCNT2 = 0;
 
// Initialize the Output Compare Register A used for PWM generation on port PD7.
OCR2A = 255;
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0
 
// Timer/Counter 2 Interrupt Mask Register
// Enable timer output compare match A Interrupt only
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2));
TIMSK2 |= (1<<OCIE2A);
 
SREG = sreg;
}
 
//----------------------------
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 180;
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
TIMSK0 |= _BV(TOIE0);
}
 
 
/*****************************************************/
/* Control Servo Position */
/*****************************************************/
void CalcNickServoValue(void)
{
signed int max, min;
 
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value
{
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15);
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20);
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6;
LIMIT_MIN_MAX(NickServoValue,min, max);
}
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control
}
 
void CalculateServo(void)
{
signed char cosinus, sinus;
signed long nick, roll;
 
cosinus = sintab[EE_Parameter.CamOrientation + 6];
sinus = sintab[EE_Parameter.CamOrientation];
 
if(CalculateServoSignals == 1)
{
nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L;
nick -= POI_KameraNick * 7;
nick = ((long)EE_Parameter.ServoNickComp * nick) / 512L;
// offset (Range from 0 to 255 * 3 = 765)
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue;
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed;
 
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo
{
nick = ServoNickOffset / 16 + nick;
}
else
{ // inverting movement of servo
nick = ServoNickOffset / 16 - nick;
}
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1);
else ServoNickValue = nick;
// limit servo value to its parameter range definition
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER))
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER;
}
else
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER))
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER;
}
if(PlatinenVersion < 20) CalculateServoSignals = 0; else CalculateServoSignals++;
}
else
{
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L;
roll = ((long)EE_Parameter.ServoRollComp * roll) / 512L;
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed;
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV)
{ // inverting movement of servo
roll = ServoRollOffset / 16 + roll;
}
else
{ // inverting movement of servo
roll = ServoRollOffset / 16 - roll;
}
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1);
else ServoRollValue = roll;
// limit servo value to its parameter range definition
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER))
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER;
}
else
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER))
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER;
}
CalculateServoSignals = 0;
}
}
 
ISR(TIMER2_COMPA_vect)
{
// frame len 22.5 ms = 14063 * 1.6 us
// stop pulse: 0.3 ms = 188 * 1.6 us
// min servo pulse: 0.6 ms = 375 * 1.6 us
// max servo pulse: 2.4 ms = 1500 * 1.6 us
// resolution: 1500 - 375 = 1125 steps
 
#define IRS_RUNTIME 127
#define PPM_STOPPULSE 188
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh)
#define MINSERVOPULSE 375
#define MAXSERVOPULSE 1500
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE)
 
static uint8_t PulseOutput = 0;
static uint16_t ServoFrameTime = 0;
static uint8_t ServoIndex = 0;
 
 
if(PlatinenVersion < 20)
{
//---------------------------
// Nick servo state machine
//---------------------------
if(!PulseOutput) // pulse output complete
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
// accumulate time for correct update rate
ServoFrameTime = RemainingPulse;
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
RemainingPulse = PPM_FRAMELEN - ServoFrameTime;
CalculateServoSignals = 1;
}
// set pulse output active
PulseOutput = 1;
}
} // EOF Nick servo state machine
else
{
//-----------------------------------------------------
// PPM state machine, onboard demultiplexed by HEF4017
//-----------------------------------------------------
if(!PulseOutput) // pulse output complete
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
if(ServoIndex == 0) // if we are at the sync gap
{
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time
ServoFrameTime = 0; // reset servo frame time
HEF4017Reset_ON; // enable HEF4017 reset
}
else // servo channels
if(ServoIndex > EE_Parameter.ServoNickRefresh)
{
RemainingPulse = 10; // end it here
}
else
{
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
switch(ServoIndex) // map servo channels
{
case 1: // Nick Compensation Servo
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
break;
case 2: // Roll Compensation Servo
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
break;
case 3:
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
case 4:
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
case 5:
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
default: // other servo channels
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs
break;
}
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
// substract stop pulse width
RemainingPulse -= PPM_STOPPULSE;
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
}
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
// set pulsewidth to stop pulse width
RemainingPulse = PPM_STOPPULSE;
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset
else HEF4017Reset_ON;
ServoIndex++;
if(ServoIndex > EE_Parameter.ServoNickRefresh+1)
{
CalculateServoSignals = 1;
ServoIndex = 0; // reset to the sync gap
}
}
// set pulse output active
PulseOutput = 1;
}
} // EOF PPM state machine
 
// General pulse output generator
if(RemainingPulse > (255 + IRS_RUNTIME))
{
OCR2A = 255;
RemainingPulse -= 255;
}
else
{
if(RemainingPulse > 255) // this is the 2nd last part
{
if((RemainingPulse - 255) < IRS_RUNTIME)
{
OCR2A = 255 - IRS_RUNTIME;
RemainingPulse -= 255 - IRS_RUNTIME;
 
}
else // last part > ISR_RUNTIME
{
OCR2A = 255;
RemainingPulse -= 255;
}
}
else // this is the last part
{
OCR2A = RemainingPulse;
RemainingPulse = 0;
PulseOutput = 0; // trigger to stop pulse
}
} // EOF general pulse output generator
}
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/timer0.h
0,0 → 1,24
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
#define HEF4017Reset_ON PORTC |= (1<<PORTC6)
#define HEF4017Reset_OFF PORTC &= ~(1<<PORTC6)
 
void Timer_Init(void);
void TIMER2_Init(void);
void Delay_ms(unsigned int);
void Delay_ms_Mess(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
void CalculateServo(void);
void CalcNickServoValue(void);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern unsigned int BeepMuster;
extern volatile unsigned char SendSPI, ServoActive, CalculateServoSignals;
extern volatile int16_t ServoNickValue;
extern volatile int16_t ServoRollValue;
extern signed int NickServoValue;
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/timer0.lst
0,0 → 1,1376
1 .file "timer0.c"
2 .arch atmega1284p
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 .global ServoRollValue
11 .global ServoRollValue
12 .section .bss
15 ServoRollValue:
16 0000 0000 .skip 2,0
17 .global ServoNickValue
18 .global ServoNickValue
21 ServoNickValue:
22 0002 0000 .skip 2,0
23 .global NickServoValue
24 .data
27 NickServoValue:
28 0000 0020 .word 8192
29 .global BeepMuster
32 BeepMuster:
33 0002 FFFF .word -1
34 .global ServoRollOffset
37 ServoRollOffset:
38 0004 C01F .word 8128
39 .global ServoNickOffset
42 ServoNickOffset:
43 0006 C01F .word 8128
44 .global RemainingPulse
45 .global RemainingPulse
46 .section .bss
49 RemainingPulse:
50 0004 0000 .skip 2,0
51 .global CalculateServoSignals
52 .data
55 CalculateServoSignals:
56 0008 01 .byte 1
57 .global ServoActive
58 .global ServoActive
59 .section .bss
62 ServoActive:
63 0006 00 .skip 1,0
64 .global SendSPI
65 .global SendSPI
68 SendSPI:
69 0007 00 .skip 1,0
70 .global beeptime
71 .global beeptime
74 beeptime:
75 0008 0000 .skip 2,0
76 .global cntKompass
77 .global cntKompass
80 cntKompass:
81 000a 0000 .skip 2,0
82 .global UpdateMotor
83 .global UpdateMotor
86 UpdateMotor:
87 000c 00 .skip 1,0
88 .global CountMilliseconds
89 .global CountMilliseconds
92 CountMilliseconds:
93 000d 0000 .skip 2,0
94 .data
97 cnt_1ms.3:
98 0009 01 .byte 1
99 .lcomm cnt.4,1
100 .lcomm compass_active.5,1
101 .text
102 .global __vector_18
104 __vector_18:
105 /* prologue: frame size=0 */
106 0000 1F92 push __zero_reg__
107 0002 0F92 push __tmp_reg__
108 0004 0FB6 in __tmp_reg__,__SREG__
109 0006 0F92 push __tmp_reg__
110 0008 1124 clr __zero_reg__
111 000a 2F93 push r18
112 000c 3F93 push r19
113 000e 5F93 push r21
114 0010 6F93 push r22
115 0012 7F93 push r23
116 0014 8F93 push r24
117 0016 9F93 push r25
118 0018 AF93 push r26
119 001a BF93 push r27
120 001c EF93 push r30
121 001e FF93 push r31
122 /* prologue end (size=16) */
123 0020 20E0 ldi r18,lo8(0)
124 0022 8091 0000 lds r24,SendSPI
125 0026 8823 tst r24
126 0028 01F0 breq .L2
127 002a 8091 0000 lds r24,SendSPI
128 002e 8150 subi r24,lo8(-(-1))
129 0030 8093 0000 sts SendSPI,r24
130 .L2:
131 0034 8091 0000 lds r24,SpektrumTimer
132 0038 8823 tst r24
133 003a 01F0 breq .L3
134 003c 8150 subi r24,lo8(-(-1))
135 003e 8093 0000 sts SpektrumTimer,r24
136 .L3:
137 0042 8091 0000 lds r24,cnt.4
138 0046 8150 subi r24,lo8(-(-1))
139 0048 8093 0000 sts cnt.4,r24
140 004c 8F3F cpi r24,lo8(-1)
141 004e 01F0 breq .+2
142 0050 00C0 rjmp .L4
143 0052 89E0 ldi r24,lo8(9)
144 0054 8093 0000 sts cnt.4,r24
145 0058 8091 0000 lds r24,CountMilliseconds
146 005c 9091 0000 lds r25,(CountMilliseconds)+1
147 0060 0196 adiw r24,1
148 0062 9093 0000 sts (CountMilliseconds)+1,r25
149 0066 8093 0000 sts CountMilliseconds,r24
150 006a 8091 0000 lds r24,cnt_1ms.3
151 006e 8F5F subi r24,lo8(-(1))
152 0070 8170 andi r24,lo8(1)
153 0072 8093 0000 sts cnt_1ms.3,r24
154 0076 8823 tst r24
155 0078 01F4 brne .L5
156 007a 81E0 ldi r24,lo8(1)
157 007c 8093 0000 sts UpdateMotor,r24
158 .L5:
159 0080 3499 sbic 38-0x20,4
160 0082 00C0 rjmp .L6
161 0084 81E0 ldi r24,lo8(1)
162 0086 8093 0000 sts compass_active.5,r24
163 .L6:
164 008a 8091 0000 lds r24,beeptime
165 008e 9091 0000 lds r25,(beeptime)+1
166 0092 892B or r24,r25
167 0094 01F0 breq .L7
168 0096 8091 0000 lds r24,beeptime
169 009a 9091 0000 lds r25,(beeptime)+1
170 009e 0B97 sbiw r24,11
171 00a0 00F0 brlo .L8
172 00a2 8091 0000 lds r24,beeptime
173 00a6 9091 0000 lds r25,(beeptime)+1
174 00aa 0A97 sbiw r24,10
175 00ac 9093 0000 sts (beeptime)+1,r25
176 00b0 8093 0000 sts beeptime,r24
177 00b4 00C0 rjmp .L9
178 .L8:
179 00b6 1092 0000 sts (beeptime)+1,__zero_reg__
180 00ba 1092 0000 sts beeptime,__zero_reg__
181 .L9:
182 00be 8091 0000 lds r24,beeptime
183 00c2 9091 0000 lds r25,(beeptime)+1
184 00c6 2091 0000 lds r18,BeepMuster
185 00ca 3091 0000 lds r19,(BeepMuster)+1
186 00ce 8223 and r24,r18
187 00d0 9323 and r25,r19
188 00d2 892B or r24,r25
189 00d4 01F0 breq .L10
190 00d6 21E0 ldi r18,lo8(1)
191 00d8 00C0 rjmp .L12
192 .L10:
193 00da 20E0 ldi r18,lo8(0)
194 00dc 00C0 rjmp .L12
195 .L7:
196 00de 8FEF ldi r24,lo8(-1)
197 00e0 9FEF ldi r25,hi8(-1)
198 00e2 9093 0000 sts (BeepMuster)+1,r25
199 00e6 8093 0000 sts BeepMuster,r24
200 .L12:
201 00ea 8091 0000 lds r24,PlatinenVersion
202 00ee 2223 tst r18
203 00f0 01F0 breq .L13
204 00f2 8A30 cpi r24,lo8(10)
205 00f4 01F4 brne .L14
206 00f6 5A9A sbi 43-0x20,2
207 00f8 00C0 rjmp .L4
208 .L14:
209 00fa 479A sbi 40-0x20,7
210 00fc 00C0 rjmp .L4
211 .L13:
212 00fe 8A30 cpi r24,lo8(10)
213 0100 01F4 brne .L17
214 0102 5A98 cbi 43-0x20,2
215 0104 00C0 rjmp .L4
216 .L17:
217 0106 4798 cbi 40-0x20,7
218 .L4:
219 0108 8091 0000 lds r24,compass_active.5
220 010c 8823 tst r24
221 010e 01F4 brne .+2
222 0110 00C0 rjmp .L1
223 0112 2091 0000 lds r18,NaviDataOkay
224 0116 2223 tst r18
225 0118 01F0 breq .+2
226 011a 00C0 rjmp .L1
227 011c 8091 0000 lds r24,Parameter_GlobalConfig
228 0120 83FF sbrs r24,3
229 0122 00C0 rjmp .L1
230 0124 86B1 in r24,38-0x20
231 0126 9927 clr r25
232 0128 FC01 movw r30,r24
233 012a E071 andi r30,lo8(16)
234 012c F070 andi r31,hi8(16)
235 012e 84FF sbrs r24,4
236 0130 00C0 rjmp .L20
237 0132 8091 0000 lds r24,cntKompass
238 0136 9091 0000 lds r25,(cntKompass)+1
239 013a 0196 adiw r24,1
240 013c 9093 0000 sts (cntKompass)+1,r25
241 0140 8093 0000 sts cntKompass,r24
242 0144 8091 0000 lds r24,cntKompass
243 0148 9091 0000 lds r25,(cntKompass)+1
244 014c 895E subi r24,lo8(1001)
245 014e 9340 sbci r25,hi8(1001)
246 0150 00F0 brlo .L1
247 0152 2093 0000 sts compass_active.5,r18
248 0156 00C0 rjmp .L1
249 .L20:
250 0158 8091 0000 lds r24,cntKompass
251 015c 9091 0000 lds r25,(cntKompass)+1
252 0160 892B or r24,r25
253 0162 01F0 breq .L23
254 0164 8091 0000 lds r24,cntKompass
255 0168 9091 0000 lds r25,(cntKompass)+1
256 016c 8A56 subi r24,lo8(362)
257 016e 9140 sbci r25,hi8(362)
258 0170 00F4 brsh .L23
259 0172 8091 0000 lds r24,cntKompass
260 0176 9091 0000 lds r25,(cntKompass)+1
261 017a 69E2 ldi r22,lo8(41)
262 017c 70E0 ldi r23,hi8(41)
263 017e 0E94 0000 call __udivmodhi4
264 0182 8091 0000 lds r24,cntKompass
265 0186 9091 0000 lds r25,(cntKompass)+1
266 018a 860F add r24,r22
267 018c 971F adc r25,r23
268 018e 9093 0000 sts (cntKompass)+1,r25
269 0192 8093 0000 sts cntKompass,r24
270 0196 8091 0000 lds r24,cntKompass
271 019a 9091 0000 lds r25,(cntKompass)+1
272 019e 0B97 sbiw r24,11
273 01a0 00F0 brlo .L24
274 01a2 8091 0000 lds r24,cntKompass
275 01a6 9091 0000 lds r25,(cntKompass)+1
276 01aa 0A97 sbiw r24,10
277 01ac 9093 0000 sts (KompassValue)+1,r25
278 01b0 8093 0000 sts KompassValue,r24
279 01b4 00C0 rjmp .L23
280 .L24:
281 01b6 F093 0000 sts (KompassValue)+1,r31
282 01ba E093 0000 sts KompassValue,r30
283 .L23:
284 01be 1092 0000 sts (cntKompass)+1,__zero_reg__
285 01c2 1092 0000 sts cntKompass,__zero_reg__
286 .L1:
287 /* epilogue: frame size=0 */
288 01c6 FF91 pop r31
289 01c8 EF91 pop r30
290 01ca BF91 pop r27
291 01cc AF91 pop r26
292 01ce 9F91 pop r25
293 01d0 8F91 pop r24
294 01d2 7F91 pop r23
295 01d4 6F91 pop r22
296 01d6 5F91 pop r21
297 01d8 3F91 pop r19
298 01da 2F91 pop r18
299 01dc 0F90 pop __tmp_reg__
300 01de 0FBE out __SREG__,__tmp_reg__
301 01e0 0F90 pop __tmp_reg__
302 01e2 1F90 pop __zero_reg__
303 01e4 1895 reti
304 /* epilogue end (size=16) */
305 /* function __vector_18 size 247 (215) */
307 .global SetDelay
309 SetDelay:
310 /* prologue: frame size=0 */
311 /* prologue end (size=0) */
312 01e6 2091 0000 lds r18,CountMilliseconds
313 01ea 3091 0000 lds r19,(CountMilliseconds)+1
314 01ee 280F add r18,r24
315 01f0 391F adc r19,r25
316 01f2 C901 movw r24,r18
317 01f4 0196 adiw r24,1
318 /* epilogue: frame size=0 */
319 01f6 0895 ret
320 /* epilogue end (size=1) */
321 /* function SetDelay size 9 (8) */
323 .global CheckDelay
325 CheckDelay:
326 /* prologue: frame size=0 */
327 /* prologue end (size=0) */
328 01f8 2091 0000 lds r18,CountMilliseconds
329 01fc 3091 0000 lds r19,(CountMilliseconds)+1
330 0200 821B sub r24,r18
331 0202 930B sbc r25,r19
332 0204 892F mov r24,r25
333 0206 9927 clr r25
334 0208 8695 lsr r24
335 020a 8074 andi r24,lo8(64)
336 020c 9070 andi r25,hi8(64)
337 /* epilogue: frame size=0 */
338 020e 0895 ret
339 /* epilogue end (size=1) */
340 /* function CheckDelay size 12 (11) */
342 .global Delay_ms
344 Delay_ms:
345 /* prologue: frame size=0 */
346 0210 CF93 push r28
347 0212 DF93 push r29
348 /* prologue end (size=2) */
349 0214 0E94 0000 call SetDelay
350 0218 EC01 movw r28,r24
351 .L29:
352 021a CE01 movw r24,r28
353 021c 0E94 0000 call CheckDelay
354 0220 8823 tst r24
355 0222 01F0 breq .L29
356 /* epilogue: frame size=0 */
357 0224 DF91 pop r29
358 0226 CF91 pop r28
359 0228 0895 ret
360 /* epilogue end (size=3) */
361 /* function Delay_ms size 13 (8) */
363 .global Delay_ms_Mess
365 Delay_ms_Mess:
366 /* prologue: frame size=0 */
367 022a CF93 push r28
368 022c DF93 push r29
369 /* prologue end (size=2) */
370 022e 0E94 0000 call SetDelay
371 0232 EC01 movw r28,r24
372 0234 00C0 rjmp .L40
373 .L36:
374 0236 8091 0000 lds r24,AdReady
375 023a 8823 tst r24
376 023c 01F0 breq .L40
377 023e 9093 0000 sts AdReady,r25
378 0242 8FEC ldi r24,lo8(-49)
379 0244 8093 7A00 sts 122,r24
380 .L40:
381 0248 CE01 movw r24,r28
382 024a 0E94 0000 call CheckDelay
383 024e 982F mov r25,r24
384 0250 8823 tst r24
385 0252 01F0 breq .L36
386 /* epilogue: frame size=0 */
387 0254 DF91 pop r29
388 0256 CF91 pop r28
389 0258 0895 ret
390 /* epilogue end (size=3) */
391 /* function Delay_ms_Mess size 24 (19) */
393 .global TIMER2_Init
395 TIMER2_Init:
396 /* prologue: frame size=0 */
397 /* prologue end (size=0) */
398 025a 9FB7 in r25,95-0x20
399 /* #APP */
400 025c F894 cli
401 /* #NOAPP */
402 025e 5F98 cbi 43-0x20,7
403 0260 3E9A sbi 39-0x20,6
404 0262 469A sbi 40-0x20,6
405 0264 8091 B000 lds r24,176
406 0268 8F70 andi r24,lo8(15)
407 026a 8093 B000 sts 176,r24
408 026e 8091 B000 lds r24,176
409 0272 8360 ori r24,lo8(3)
410 0274 8093 B000 sts 176,r24
411 0278 8091 B100 lds r24,177
412 027c 8B73 andi r24,lo8(59)
413 027e 8093 B100 sts 177,r24
414 0282 8091 B100 lds r24,177
415 0286 8B60 ori r24,lo8(11)
416 0288 8093 B100 sts 177,r24
417 028c 1092 B200 sts 178,__zero_reg__
418 0290 8FEF ldi r24,lo8(-1)
419 0292 8093 B300 sts 179,r24
420 0296 8091 B000 lds r24,176
421 029a 8068 ori r24,lo8(-128)
422 029c 8093 B000 sts 176,r24
423 02a0 8091 7000 lds r24,112
424 02a4 8A7F andi r24,lo8(-6)
425 02a6 8093 7000 sts 112,r24
426 02aa 8091 7000 lds r24,112
427 02ae 8260 ori r24,lo8(2)
428 02b0 8093 7000 sts 112,r24
429 02b4 9FBF out 95-0x20,r25
430 /* epilogue: frame size=0 */
431 02b6 0895 ret
432 /* epilogue end (size=1) */
433 /* function TIMER2_Init size 48 (47) */
435 .global Timer_Init
437 Timer_Init:
438 /* prologue: frame size=0 */
439 /* prologue end (size=0) */
440 02b8 8AE0 ldi r24,lo8(10)
441 02ba 90E0 ldi r25,hi8(10)
442 02bc 0E94 0000 call SetDelay
443 02c0 9093 0000 sts (tim_main)+1,r25
444 02c4 8093 0000 sts tim_main,r24
445 02c8 82E0 ldi r24,lo8(2)
446 02ca 85BD out 69-0x20,r24
447 02cc 83EA ldi r24,lo8(-93)
448 02ce 84BD out 68-0x20,r24
449 02d0 17BC out 71-0x20,__zero_reg__
450 02d2 84EB ldi r24,lo8(-76)
451 02d4 88BD out 72-0x20,r24
452 02d6 86E0 ldi r24,lo8(6)
453 02d8 86BD out 70-0x20,r24
454 02da 8091 6E00 lds r24,110
455 02de 8160 ori r24,lo8(1)
456 02e0 8093 6E00 sts 110,r24
457 /* epilogue: frame size=0 */
458 02e4 0895 ret
459 /* epilogue end (size=1) */
460 /* function Timer_Init size 23 (22) */
462 .global CalcNickServoValue
464 CalcNickServoValue:
465 /* prologue: frame size=0 */
466 /* prologue end (size=0) */
467 02e6 8091 0000 lds r24,EE_Parameter+109
468 02ea 2091 0000 lds r18,Parameter_ServoNickControl
469 02ee 82FF sbrs r24,2
470 02f0 00C0 rjmp .L44
471 02f2 9091 0000 lds r25,EE_Parameter+48
472 02f6 8CE3 ldi r24,lo8(60)
473 02f8 989F mul r25,r24
474 02fa B001 movw r22,r0
475 02fc 1124 clr r1
476 02fe 9091 0000 lds r25,EE_Parameter+47
477 0302 80E5 ldi r24,lo8(80)
478 0304 989F mul r25,r24
479 0306 A001 movw r20,r0
480 0308 1124 clr r1
481 030a 922F mov r25,r18
482 030c 9058 subi r25,lo8(-(-128))
483 030e 97FD sbrc r25,7
484 0310 9D5F subi r25,lo8(-(3))
485 .L45:
486 0312 9595 asr r25
487 0314 9595 asr r25
488 0316 86E0 ldi r24,lo8(6)
489 0318 9802 muls r25,r24
490 031a C001 movw r24,r0
491 031c 1124 clr r1
492 031e 2091 0000 lds r18,NickServoValue
493 0322 3091 0000 lds r19,(NickServoValue)+1
494 0326 281B sub r18,r24
495 0328 390B sbc r19,r25
496 032a 3093 0000 sts (NickServoValue)+1,r19
497 032e 2093 0000 sts NickServoValue,r18
498 0332 4217 cp r20,r18
499 0334 5307 cpc r21,r19
500 0336 04F0 brlt .L46
501 0338 5093 0000 sts (NickServoValue)+1,r21
502 033c 4093 0000 sts NickServoValue,r20
503 0340 0895 ret
504 .L46:
505 0342 2617 cp r18,r22
506 0344 3707 cpc r19,r23
507 0346 04F0 brlt .L43
508 0348 7093 0000 sts (NickServoValue)+1,r23
509 034c 6093 0000 sts NickServoValue,r22
510 0350 0895 ret
511 .L44:
512 0352 822F mov r24,r18
513 0354 9927 clr r25
514 0356 36E0 ldi r19,6
515 0358 880F 1: lsl r24
516 035a 991F rol r25
517 035c 3A95 dec r19
518 035e 01F4 brne 1b
519 0360 9093 0000 sts (NickServoValue)+1,r25
520 0364 8093 0000 sts NickServoValue,r24
521 .L43:
522 0368 0895 ret
523 /* epilogue: frame size=0 */
524 /* epilogue: noreturn */
525 /* epilogue end (size=0) */
526 /* function CalcNickServoValue size 67 (67) */
528 .global CalculateServo
530 CalculateServo:
531 /* prologue: frame size=0 */
532 036a A0E0 ldi r26,lo8(0)
533 036c B0E0 ldi r27,hi8(0)
534 036e E0E0 ldi r30,pm_lo8(1f)
535 0370 F0E0 ldi r31,pm_hi8(1f)
536 0372 0C94 0000 jmp __prologue_saves__+22
537 1:
538 /* prologue end (size=6) */
539 0376 8091 0000 lds r24,EE_Parameter+55
540 037a E82F mov r30,r24
541 037c FF27 clr r31
542 037e E050 subi r30,lo8(-(sintab))
543 0380 F040 sbci r31,hi8(-(sintab))
544 0382 9681 ldd r25,Z+6
545 0384 D080 ld r13,Z
546 0386 8091 0000 lds r24,CalculateServoSignals
547 038a A92F mov r26,r25
548 038c BB27 clr r27
549 038e A7FD sbrc r26,7
550 0390 B095 com r27
551 0392 CB2F mov r28,r27
552 0394 DB2F mov r29,r27
553 0396 8130 cpi r24,lo8(1)
554 0398 01F0 breq .+2
555 039a 00C0 rjmp .L51
556 039c 2091 0000 lds r18,IntegralNick
557 03a0 3091 0000 lds r19,(IntegralNick)+1
558 03a4 4091 0000 lds r20,(IntegralNick)+2
559 03a8 5091 0000 lds r21,(IntegralNick)+3
560 03ac BD01 movw r22,r26
561 03ae CE01 movw r24,r28
562 03b0 0E94 0000 call __mulsi3
563 03b4 97FF sbrs r25,7
564 03b6 00C0 rjmp .L52
565 03b8 6158 subi r22,lo8(-(127))
566 03ba 7F4F sbci r23,hi8(-(127))
567 03bc 8F4F sbci r24,hlo8(-(127))
568 03be 9F4F sbci r25,hhi8(-(127))
569 .L52:
570 03c0 7B01 movw r14,r22
571 03c2 8C01 movw r16,r24
572 03c4 C7E0 ldi r28,7
573 03c6 1595 1: asr r17
574 03c8 0795 ror r16
575 03ca F794 ror r15
576 03cc E794 ror r14
577 03ce CA95 dec r28
578 03d0 01F4 brne 1b
579 03d2 8D2D mov r24,r13
580 03d4 9927 clr r25
581 03d6 87FD sbrc r24,7
582 03d8 9095 com r25
583 03da A92F mov r26,r25
584 03dc B92F mov r27,r25
585 03de 2091 0000 lds r18,IntegralRoll
586 03e2 3091 0000 lds r19,(IntegralRoll)+1
587 03e6 4091 0000 lds r20,(IntegralRoll)+2
588 03ea 5091 0000 lds r21,(IntegralRoll)+3
589 03ee BC01 movw r22,r24
590 03f0 CD01 movw r24,r26
591 03f2 0E94 0000 call __mulsi3
592 03f6 97FF sbrs r25,7
593 03f8 00C0 rjmp .L53
594 03fa 6158 subi r22,lo8(-(127))
595 03fc 7F4F sbci r23,hi8(-(127))
596 03fe 8F4F sbci r24,hlo8(-(127))
597 0400 9F4F sbci r25,hhi8(-(127))
598 .L53:
599 0402 B7E0 ldi r27,7
600 0404 9595 1: asr r25
601 0406 8795 ror r24
602 0408 7795 ror r23
603 040a 6795 ror r22
604 040c BA95 dec r27
605 040e 01F4 brne 1b
606 0410 F801 movw r30,r16
607 0412 E701 movw r28,r14
608 0414 C61B sub r28,r22
609 0416 D70B sbc r29,r23
610 0418 E80B sbc r30,r24
611 041a F90B sbc r31,r25
612 041c 2091 0000 lds r18,POI_KameraNick
613 0420 3091 0000 lds r19,(POI_KameraNick)+1
614 0424 C901 movw r24,r18
615 0426 A3E0 ldi r26,3
616 0428 880F 1: lsl r24
617 042a 991F rol r25
618 042c AA95 dec r26
619 042e 01F4 brne 1b
620 0430 821B sub r24,r18
621 0432 930B sbc r25,r19
622 0434 AA27 clr r26
623 0436 97FD sbrc r25,7
624 0438 A095 com r26
625 043a BA2F mov r27,r26
626 043c C81B sub r28,r24
627 043e D90B sbc r29,r25
628 0440 EA0B sbc r30,r26
629 0442 FB0B sbc r31,r27
630 0444 8091 0000 lds r24,EE_Parameter+46
631 0448 9927 clr r25
632 044a AA27 clr r26
633 044c BB27 clr r27
634 044e BC01 movw r22,r24
635 0450 CD01 movw r24,r26
636 0452 9E01 movw r18,r28
637 0454 AF01 movw r20,r30
638 0456 0E94 0000 call __mulsi3
639 045a 97FF sbrs r25,7
640 045c 00C0 rjmp .L54
641 045e 6150 subi r22,lo8(-(511))
642 0460 7E4F sbci r23,hi8(-(511))
643 0462 8F4F sbci r24,hlo8(-(511))
644 0464 9F4F sbci r25,hhi8(-(511))
645 .L54:
646 0466 FC01 movw r30,r24
647 0468 EB01 movw r28,r22
648 046a 79E0 ldi r23,9
649 046c F595 1: asr r31
650 046e E795 ror r30
651 0470 D795 ror r29
652 0472 C795 ror r28
653 0474 7A95 dec r23
654 0476 01F4 brne 1b
655 0478 1091 0000 lds r17,EE_Parameter+109
656 047c 6091 0000 lds r22,NickServoValue
657 0480 7091 0000 lds r23,(NickServoValue)+1
658 0484 12FF sbrs r17,2
659 0486 00C0 rjmp .L55
660 0488 7093 0000 sts (ServoNickOffset)+1,r23
661 048c 6093 0000 sts ServoNickOffset,r22
662 0490 00C0 rjmp .L56
663 .L55:
664 0492 4091 0000 lds r20,ServoNickOffset
665 0496 5091 0000 lds r21,(ServoNickOffset)+1
666 049a 8091 0000 lds r24,EE_Parameter+54
667 049e 282F mov r18,r24
668 04a0 3327 clr r19
669 04a2 CB01 movw r24,r22
670 04a4 841B sub r24,r20
671 04a6 950B sbc r25,r21
672 04a8 B901 movw r22,r18
673 04aa 0E94 0000 call __divmodhi4
674 04ae 8091 0000 lds r24,ServoNickOffset
675 04b2 9091 0000 lds r25,(ServoNickOffset)+1
676 04b6 860F add r24,r22
677 04b8 971F adc r25,r23
678 04ba 9093 0000 sts (ServoNickOffset)+1,r25
679 04be 8093 0000 sts ServoNickOffset,r24
680 .L56:
681 04c2 10FF sbrs r17,0
682 04c4 00C0 rjmp .L57
683 04c6 8091 0000 lds r24,ServoNickOffset
684 04ca 9091 0000 lds r25,(ServoNickOffset)+1
685 04ce 97FD sbrc r25,7
686 04d0 0F96 adiw r24,15
687 .L58:
688 04d2 64E0 ldi r22,4
689 04d4 9595 1: asr r25
690 04d6 8795 ror r24
691 04d8 6A95 dec r22
692 04da 01F4 brne 1b
693 04dc AA27 clr r26
694 04de 97FD sbrc r25,7
695 04e0 A095 com r26
696 04e2 BA2F mov r27,r26
697 04e4 C80F add r28,r24
698 04e6 D91F adc r29,r25
699 04e8 EA1F adc r30,r26
700 04ea FB1F adc r31,r27
701 04ec 00C0 rjmp .L59
702 .L57:
703 04ee 8091 0000 lds r24,ServoNickOffset
704 04f2 9091 0000 lds r25,(ServoNickOffset)+1
705 04f6 97FD sbrc r25,7
706 04f8 0F96 adiw r24,15
707 .L60:
708 04fa 54E0 ldi r21,4
709 04fc 9595 1: asr r25
710 04fe 8795 ror r24
711 0500 5A95 dec r21
712 0502 01F4 brne 1b
713 0504 AA27 clr r26
714 0506 97FD sbrc r25,7
715 0508 A095 com r26
716 050a BA2F mov r27,r26
717 050c 8C1B sub r24,r28
718 050e 9D0B sbc r25,r29
719 0510 AE0B sbc r26,r30
720 0512 BF0B sbc r27,r31
721 0514 FD01 movw r30,r26
722 0516 EC01 movw r28,r24
723 .L59:
724 0518 2091 0000 lds r18,EE_Parameter+106
725 051c 2223 tst r18
726 051e 01F0 breq .L61
727 0520 3327 clr r19
728 0522 8091 0000 lds r24,ServoNickValue
729 0526 9091 0000 lds r25,(ServoNickValue)+1
730 052a 829F mul r24,r18
731 052c A001 movw r20,r0
732 052e 839F mul r24,r19
733 0530 500D add r21,r0
734 0532 929F mul r25,r18
735 0534 500D add r21,r0
736 0536 1124 clr r1
737 0538 CA01 movw r24,r20
738 053a AA27 clr r26
739 053c 97FD sbrc r25,7
740 053e A095 com r26
741 0540 BA2F mov r27,r26
742 0542 8C0F add r24,r28
743 0544 9D1F adc r25,r29
744 0546 AE1F adc r26,r30
745 0548 BF1F adc r27,r31
746 054a 2F5F subi r18,lo8(-(1))
747 054c 3F4F sbci r19,hi8(-(1))
748 054e 4427 clr r20
749 0550 37FD sbrc r19,7
750 0552 4095 com r20
751 0554 542F mov r21,r20
752 0556 BC01 movw r22,r24
753 0558 CD01 movw r24,r26
754 055a 0E94 0000 call __divmodsi4
755 055e 3093 0000 sts (ServoNickValue)+1,r19
756 0562 2093 0000 sts ServoNickValue,r18
757 0566 00C0 rjmp .L62
758 .L61:
759 0568 D093 0000 sts (ServoNickValue)+1,r29
760 056c C093 0000 sts ServoNickValue,r28
761 .L62:
762 0570 8091 0000 lds r24,EE_Parameter+47
763 0574 282F mov r18,r24
764 0576 3327 clr r19
765 0578 220F lsl r18
766 057a 331F rol r19
767 057c 220F lsl r18
768 057e 331F rol r19
769 0580 8091 0000 lds r24,ServoNickValue
770 0584 9091 0000 lds r25,(ServoNickValue)+1
771 0588 8217 cp r24,r18
772 058a 9307 cpc r25,r19
773 058c 04F0 brlt .L81
774 058e 8091 0000 lds r24,EE_Parameter+48
775 0592 282F mov r18,r24
776 0594 3327 clr r19
777 0596 220F lsl r18
778 0598 331F rol r19
779 059a 220F lsl r18
780 059c 331F rol r19
781 059e 8091 0000 lds r24,ServoNickValue
782 05a2 9091 0000 lds r25,(ServoNickValue)+1
783 05a6 2817 cp r18,r24
784 05a8 3907 cpc r19,r25
785 05aa 04F4 brge .L64
786 .L81:
787 05ac 3093 0000 sts (ServoNickValue)+1,r19
788 05b0 2093 0000 sts ServoNickValue,r18
789 .L64:
790 05b4 8091 0000 lds r24,PlatinenVersion
791 05b8 8431 cpi r24,lo8(20)
792 05ba 00F4 brsh .+2
793 05bc 00C0 rjmp .L79
794 05be 8091 0000 lds r24,CalculateServoSignals
795 05c2 8F5F subi r24,lo8(-(1))
796 05c4 8093 0000 sts CalculateServoSignals,r24
797 05c8 00C0 rjmp .L50
798 .L51:
799 05ca 2091 0000 lds r18,IntegralRoll
800 05ce 3091 0000 lds r19,(IntegralRoll)+1
801 05d2 4091 0000 lds r20,(IntegralRoll)+2
802 05d6 5091 0000 lds r21,(IntegralRoll)+3
803 05da BD01 movw r22,r26
804 05dc CE01 movw r24,r28
805 05de 0E94 0000 call __mulsi3
806 05e2 97FF sbrs r25,7
807 05e4 00C0 rjmp .L69
808 05e6 6158 subi r22,lo8(-(127))
809 05e8 7F4F sbci r23,hi8(-(127))
810 05ea 8F4F sbci r24,hlo8(-(127))
811 05ec 9F4F sbci r25,hhi8(-(127))
812 .L69:
813 05ee 7B01 movw r14,r22
814 05f0 8C01 movw r16,r24
815 05f2 87E0 ldi r24,7
816 05f4 1595 1: asr r17
817 05f6 0795 ror r16
818 05f8 F794 ror r15
819 05fa E794 ror r14
820 05fc 8A95 dec r24
821 05fe 01F4 brne 1b
822 0600 8D2D mov r24,r13
823 0602 9927 clr r25
824 0604 87FD sbrc r24,7
825 0606 9095 com r25
826 0608 A92F mov r26,r25
827 060a B92F mov r27,r25
828 060c 2091 0000 lds r18,IntegralNick
829 0610 3091 0000 lds r19,(IntegralNick)+1
830 0614 4091 0000 lds r20,(IntegralNick)+2
831 0618 5091 0000 lds r21,(IntegralNick)+3
832 061c BC01 movw r22,r24
833 061e CD01 movw r24,r26
834 0620 0E94 0000 call __mulsi3
835 0624 9B01 movw r18,r22
836 0626 AC01 movw r20,r24
837 0628 97FF sbrs r25,7
838 062a 00C0 rjmp .L70
839 062c 2158 subi r18,lo8(-(127))
840 062e 3F4F sbci r19,hi8(-(127))
841 0630 4F4F sbci r20,hlo8(-(127))
842 0632 5F4F sbci r21,hhi8(-(127))
843 .L70:
844 0634 C7E0 ldi r28,7
845 0636 5595 1: asr r21
846 0638 4795 ror r20
847 063a 3795 ror r19
848 063c 2795 ror r18
849 063e CA95 dec r28
850 0640 01F4 brne 1b
851 0642 2E0D add r18,r14
852 0644 3F1D adc r19,r15
853 0646 401F adc r20,r16
854 0648 511F adc r21,r17
855 064a 8091 0000 lds r24,EE_Parameter+50
856 064e 9927 clr r25
857 0650 AA27 clr r26
858 0652 BB27 clr r27
859 0654 BC01 movw r22,r24
860 0656 CD01 movw r24,r26
861 0658 0E94 0000 call __mulsi3
862 065c 97FF sbrs r25,7
863 065e 00C0 rjmp .L71
864 0660 6150 subi r22,lo8(-(511))
865 0662 7E4F sbci r23,hi8(-(511))
866 0664 8F4F sbci r24,hlo8(-(511))
867 0666 9F4F sbci r25,hhi8(-(511))
868 .L71:
869 0668 FC01 movw r30,r24
870 066a EB01 movw r28,r22
871 066c B9E0 ldi r27,9
872 066e F595 1: asr r31
873 0670 E795 ror r30
874 0672 D795 ror r29
875 0674 C795 ror r28
876 0676 BA95 dec r27
877 0678 01F4 brne 1b
878 067a 8091 0000 lds r24,Parameter_ServoRollControl
879 067e 9927 clr r25
880 0680 A6E0 ldi r26,6
881 0682 880F 1: lsl r24
882 0684 991F rol r25
883 0686 AA95 dec r26
884 0688 01F4 brne 1b
885 068a 4091 0000 lds r20,ServoRollOffset
886 068e 5091 0000 lds r21,(ServoRollOffset)+1
887 0692 2091 0000 lds r18,EE_Parameter+54
888 0696 3327 clr r19
889 0698 841B sub r24,r20
890 069a 950B sbc r25,r21
891 069c B901 movw r22,r18
892 069e 0E94 0000 call __divmodhi4
893 06a2 8091 0000 lds r24,ServoRollOffset
894 06a6 9091 0000 lds r25,(ServoRollOffset)+1
895 06aa 860F add r24,r22
896 06ac 971F adc r25,r23
897 06ae 9093 0000 sts (ServoRollOffset)+1,r25
898 06b2 8093 0000 sts ServoRollOffset,r24
899 06b6 8091 0000 lds r24,EE_Parameter+109
900 06ba 81FF sbrs r24,1
901 06bc 00C0 rjmp .L72
902 06be 8091 0000 lds r24,ServoRollOffset
903 06c2 9091 0000 lds r25,(ServoRollOffset)+1
904 06c6 97FD sbrc r25,7
905 06c8 0F96 adiw r24,15
906 .L73:
907 06ca 74E0 ldi r23,4
908 06cc 9595 1: asr r25
909 06ce 8795 ror r24
910 06d0 7A95 dec r23
911 06d2 01F4 brne 1b
912 06d4 AA27 clr r26
913 06d6 97FD sbrc r25,7
914 06d8 A095 com r26
915 06da BA2F mov r27,r26
916 06dc C80F add r28,r24
917 06de D91F adc r29,r25
918 06e0 EA1F adc r30,r26
919 06e2 FB1F adc r31,r27
920 06e4 00C0 rjmp .L74
921 .L72:
922 06e6 8091 0000 lds r24,ServoRollOffset
923 06ea 9091 0000 lds r25,(ServoRollOffset)+1
924 06ee 97FD sbrc r25,7
925 06f0 0F96 adiw r24,15
926 .L75:
927 06f2 64E0 ldi r22,4
928 06f4 9595 1: asr r25
929 06f6 8795 ror r24
930 06f8 6A95 dec r22
931 06fa 01F4 brne 1b
932 06fc AA27 clr r26
933 06fe 97FD sbrc r25,7
934 0700 A095 com r26
935 0702 BA2F mov r27,r26
936 0704 8C1B sub r24,r28
937 0706 9D0B sbc r25,r29
938 0708 AE0B sbc r26,r30
939 070a BF0B sbc r27,r31
940 070c FD01 movw r30,r26
941 070e EC01 movw r28,r24
942 .L74:
943 0710 2091 0000 lds r18,EE_Parameter+107
944 0714 2223 tst r18
945 0716 01F0 breq .L76
946 0718 3327 clr r19
947 071a 8091 0000 lds r24,ServoRollValue
948 071e 9091 0000 lds r25,(ServoRollValue)+1
949 0722 829F mul r24,r18
950 0724 A001 movw r20,r0
951 0726 839F mul r24,r19
952 0728 500D add r21,r0
953 072a 929F mul r25,r18
954 072c 500D add r21,r0
955 072e 1124 clr r1
956 0730 CA01 movw r24,r20
957 0732 AA27 clr r26
958 0734 97FD sbrc r25,7
959 0736 A095 com r26
960 0738 BA2F mov r27,r26
961 073a 8C0F add r24,r28
962 073c 9D1F adc r25,r29
963 073e AE1F adc r26,r30
964 0740 BF1F adc r27,r31
965 0742 2F5F subi r18,lo8(-(1))
966 0744 3F4F sbci r19,hi8(-(1))
967 0746 4427 clr r20
968 0748 37FD sbrc r19,7
969 074a 4095 com r20
970 074c 542F mov r21,r20
971 074e BC01 movw r22,r24
972 0750 CD01 movw r24,r26
973 0752 0E94 0000 call __divmodsi4
974 0756 3093 0000 sts (ServoRollValue)+1,r19
975 075a 2093 0000 sts ServoRollValue,r18
976 075e 00C0 rjmp .L77
977 .L76:
978 0760 D093 0000 sts (ServoRollValue)+1,r29
979 0764 C093 0000 sts ServoRollValue,r28
980 .L77:
981 0768 8091 0000 lds r24,EE_Parameter+51
982 076c 282F mov r18,r24
983 076e 3327 clr r19
984 0770 220F lsl r18
985 0772 331F rol r19
986 0774 220F lsl r18
987 0776 331F rol r19
988 0778 8091 0000 lds r24,ServoRollValue
989 077c 9091 0000 lds r25,(ServoRollValue)+1
990 0780 8217 cp r24,r18
991 0782 9307 cpc r25,r19
992 0784 04F0 brlt .L82
993 0786 8091 0000 lds r24,EE_Parameter+52
994 078a 282F mov r18,r24
995 078c 3327 clr r19
996 078e 220F lsl r18
997 0790 331F rol r19
998 0792 220F lsl r18
999 0794 331F rol r19
1000 0796 8091 0000 lds r24,ServoRollValue
1001 079a 9091 0000 lds r25,(ServoRollValue)+1
1002 079e 2817 cp r18,r24
1003 07a0 3907 cpc r19,r25
1004 07a2 04F4 brge .L79
1005 .L82:
1006 07a4 3093 0000 sts (ServoRollValue)+1,r19
1007 07a8 2093 0000 sts ServoRollValue,r18
1008 .L79:
1009 07ac 1092 0000 sts CalculateServoSignals,__zero_reg__
1010 .L50:
1011 /* epilogue: frame size=0 */
1012 07b0 E7E0 ldi r30,7
1013 07b2 CDB7 in r28,__SP_L__
1014 07b4 DEB7 in r29,__SP_H__
1015 07b6 0C94 0000 jmp __epilogue_restores__+22
1016 /* epilogue end (size=5) */
1017 /* function CalculateServo size 556 (545) */
1019 .lcomm PulseOutput.0,1
1020 .lcomm ServoFrameTime.1,2
1021 .lcomm ServoIndex.2,1
1022 .global __vector_9
1024 __vector_9:
1025 /* prologue: frame size=0 */
1026 07ba 1F92 push __zero_reg__
1027 07bc 0F92 push __tmp_reg__
1028 07be 0FB6 in __tmp_reg__,__SREG__
1029 07c0 0F92 push __tmp_reg__
1030 07c2 1124 clr __zero_reg__
1031 07c4 2F93 push r18
1032 07c6 3F93 push r19
1033 07c8 4F93 push r20
1034 07ca 5F93 push r21
1035 07cc 8F93 push r24
1036 07ce 9F93 push r25
1037 07d0 EF93 push r30
1038 07d2 FF93 push r31
1039 /* prologue end (size=13) */
1040 07d4 8091 0000 lds r24,PlatinenVersion
1041 07d8 9091 0000 lds r25,PulseOutput.0
1042 07dc 8431 cpi r24,lo8(20)
1043 07de 00F0 brlo .+2
1044 07e0 00C0 rjmp .L84
1045 07e2 9923 tst r25
1046 07e4 01F0 breq .+2
1047 07e6 00C0 rjmp .L91
1048 07e8 8091 B000 lds r24,176
1049 07ec 86FF sbrs r24,6
1050 07ee 00C0 rjmp .L86
1051 07f0 8091 B000 lds r24,176
1052 07f4 8F7B andi r24,lo8(-65)
1053 07f6 8093 B000 sts 176,r24
1054 07fa 8091 0000 lds r24,ServoNickValue
1055 07fe 9091 0000 lds r25,(ServoNickValue)+1
1056 0802 8755 subi r24,lo8(-(425))
1057 0804 9E4F sbci r25,hi8(-(425))
1058 0806 9093 0000 sts (RemainingPulse)+1,r25
1059 080a 8093 0000 sts RemainingPulse,r24
1060 080e 25E0 ldi r18,hi8(1501)
1061 0810 8D3D cpi r24,lo8(1501)
1062 0812 9207 cpc r25,r18
1063 0814 00F0 brlo .L87
1064 0816 8CED ldi r24,lo8(1500)
1065 0818 95E0 ldi r25,hi8(1500)
1066 081a 00C0 rjmp .L121
1067 .L87:
1068 081c 8757 subi r24,lo8(375)
1069 081e 9140 sbci r25,hi8(375)
1070 0820 00F4 brsh .L88
1071 0822 87E7 ldi r24,lo8(375)
1072 0824 91E0 ldi r25,hi8(375)
1073 .L121:
1074 0826 9093 0000 sts (RemainingPulse)+1,r25
1075 082a 8093 0000 sts RemainingPulse,r24
1076 .L88:
1077 082e 8091 0000 lds r24,RemainingPulse
1078 0832 9091 0000 lds r25,(RemainingPulse)+1
1079 0836 00C0 rjmp .L126
1080 .L86:
1081 0838 8091 B000 lds r24,176
1082 083c 8064 ori r24,lo8(64)
1083 083e 8093 B000 sts 176,r24
1084 0842 8091 0000 lds r24,EE_Parameter+53
1085 0846 282F mov r18,r24
1086 0848 3327 clr r19
1087 084a 8DED ldi r24,lo8(1757)
1088 084c 96E0 ldi r25,hi8(1757)
1089 084e 289F mul r18,r24
1090 0850 A001 movw r20,r0
1091 0852 299F mul r18,r25
1092 0854 500D add r21,r0
1093 0856 389F mul r19,r24
1094 0858 500D add r21,r0
1095 085a 1124 clr r1
1096 085c CA01 movw r24,r20
1097 085e 2091 0000 lds r18,ServoFrameTime.1
1098 0862 3091 0000 lds r19,(ServoFrameTime.1)+1
1099 0866 821B sub r24,r18
1100 0868 930B sbc r25,r19
1101 086a 9093 0000 sts (RemainingPulse)+1,r25
1102 086e 8093 0000 sts RemainingPulse,r24
1103 0872 81E0 ldi r24,lo8(1)
1104 0874 8093 0000 sts CalculateServoSignals,r24
1105 0878 00C0 rjmp .L109
1106 .L84:
1107 087a 9923 tst r25
1108 087c 01F0 breq .+2
1109 087e 00C0 rjmp .L91
1110 0880 8091 B000 lds r24,176
1111 0884 86FF sbrs r24,6
1112 0886 00C0 rjmp .L93
1113 0888 8091 B000 lds r24,176
1114 088c 8F7B andi r24,lo8(-65)
1115 088e 8093 B000 sts 176,r24
1116 0892 E091 0000 lds r30,ServoIndex.2
1117 0896 2091 0000 lds r18,EE_Parameter+53
1118 089a EE23 tst r30
1119 089c 01F4 brne .L94
1120 089e 3327 clr r19
1121 08a0 8DED ldi r24,lo8(1757)
1122 08a2 96E0 ldi r25,hi8(1757)
1123 08a4 289F mul r18,r24
1124 08a6 A001 movw r20,r0
1125 08a8 299F mul r18,r25
1126 08aa 500D add r21,r0
1127 08ac 389F mul r19,r24
1128 08ae 500D add r21,r0
1129 08b0 1124 clr r1
1130 08b2 CA01 movw r24,r20
1131 08b4 2091 0000 lds r18,ServoFrameTime.1
1132 08b8 3091 0000 lds r19,(ServoFrameTime.1)+1
1133 08bc 821B sub r24,r18
1134 08be 930B sbc r25,r19
1135 08c0 9093 0000 sts (RemainingPulse)+1,r25
1136 08c4 8093 0000 sts RemainingPulse,r24
1137 08c8 1092 0000 sts (ServoFrameTime.1)+1,__zero_reg__
1138 08cc 1092 0000 sts ServoFrameTime.1,__zero_reg__
1139 08d0 469A sbi 40-0x20,6
1140 08d2 00C0 rjmp .L109
1141 .L94:
1142 08d4 2E17 cp r18,r30
1143 08d6 00F4 brsh .L96
1144 08d8 8AE0 ldi r24,lo8(10)
1145 08da 90E0 ldi r25,hi8(10)
1146 08dc 9093 0000 sts (RemainingPulse)+1,r25
1147 08e0 8093 0000 sts RemainingPulse,r24
1148 08e4 00C0 rjmp .L109
1149 .L96:
1150 08e6 89EA ldi r24,lo8(937)
1151 08e8 93E0 ldi r25,hi8(937)
1152 08ea 9093 0000 sts (RemainingPulse)+1,r25
1153 08ee 8093 0000 sts RemainingPulse,r24
1154 08f2 8E2F mov r24,r30
1155 08f4 9927 clr r25
1156 08f6 8330 cpi r24,3
1157 08f8 9105 cpc r25,__zero_reg__
1158 08fa 01F0 breq .L101
1159 08fc 8430 cpi r24,4
1160 08fe 9105 cpc r25,__zero_reg__
1161 0900 04F4 brge .L105
1162 0902 8130 cpi r24,1
1163 0904 9105 cpc r25,__zero_reg__
1164 0906 01F0 breq .L99
1165 0908 0297 sbiw r24,2
1166 090a 01F0 breq .L100
1167 090c 00C0 rjmp .L104
1168 .L105:
1169 090e 8430 cpi r24,4
1170 0910 9105 cpc r25,__zero_reg__
1171 0912 01F0 breq .L102
1172 0914 0597 sbiw r24,5
1173 0916 01F0 breq .L103
1174 0918 00C0 rjmp .L104
1175 .L99:
1176 091a 8091 0000 lds r24,ServoNickValue
1177 091e 9091 0000 lds r25,(ServoNickValue)+1
1178 0922 00C0 rjmp .L125
1179 .L100:
1180 0924 8091 0000 lds r24,ServoRollValue
1181 0928 9091 0000 lds r25,(ServoRollValue)+1
1182 .L125:
1183 092c 8755 subi r24,lo8(-(425))
1184 092e 9E4F sbci r25,hi8(-(425))
1185 0930 00C0 rjmp .L122
1186 .L101:
1187 0932 8091 0000 lds r24,Parameter_Servo3
1188 0936 00C0 rjmp .L127
1189 .L102:
1190 0938 8091 0000 lds r24,Parameter_Servo4
1191 093c 00C0 rjmp .L127
1192 .L103:
1193 093e 8091 0000 lds r24,Parameter_Servo5
1194 .L127:
1195 0942 9927 clr r25
1196 0944 880F lsl r24
1197 0946 991F rol r25
1198 0948 880F lsl r24
1199 094a 991F rol r25
1200 094c 00C0 rjmp .L125
1201 .L104:
1202 094e FF27 clr r31
1203 0950 EE0F add r30,r30
1204 0952 FF1F adc r31,r31
1205 0954 E050 subi r30,lo8(-(PPM_in))
1206 0956 F040 sbci r31,hi8(-(PPM_in))
1207 0958 2081 ld r18,Z
1208 095a 3181 ldd r19,Z+1
1209 095c 220F add r18,r18
1210 095e 331F adc r19,r19
1211 0960 8091 0000 lds r24,RemainingPulse
1212 0964 9091 0000 lds r25,(RemainingPulse)+1
1213 0968 820F add r24,r18
1214 096a 931F adc r25,r19
1215 .L122:
1216 096c 9093 0000 sts (RemainingPulse)+1,r25
1217 0970 8093 0000 sts RemainingPulse,r24
1218 0974 8091 0000 lds r24,RemainingPulse
1219 0978 9091 0000 lds r25,(RemainingPulse)+1
1220 097c 55E0 ldi r21,hi8(1501)
1221 097e 8D3D cpi r24,lo8(1501)
1222 0980 9507 cpc r25,r21
1223 0982 00F0 brlo .L106
1224 0984 8CED ldi r24,lo8(1500)
1225 0986 95E0 ldi r25,hi8(1500)
1226 0988 00C0 rjmp .L123
1227 .L106:
1228 098a 8757 subi r24,lo8(375)
1229 098c 9140 sbci r25,hi8(375)
1230 098e 00F4 brsh .L107
1231 0990 87E7 ldi r24,lo8(375)
1232 0992 91E0 ldi r25,hi8(375)
1233 .L123:
1234 0994 9093 0000 sts (RemainingPulse)+1,r25
1235 0998 8093 0000 sts RemainingPulse,r24
1236 .L107:
1237 099c 2091 0000 lds r18,RemainingPulse
1238 09a0 3091 0000 lds r19,(RemainingPulse)+1
1239 09a4 2C5B subi r18,lo8(-(-188))
1240 09a6 3040 sbci r19,hi8(-(-188))
1241 09a8 3093 0000 sts (RemainingPulse)+1,r19
1242 09ac 2093 0000 sts RemainingPulse,r18
1243 09b0 8091 0000 lds r24,ServoFrameTime.1
1244 09b4 9091 0000 lds r25,(ServoFrameTime.1)+1
1245 09b8 820F add r24,r18
1246 09ba 931F adc r25,r19
1247 .L126:
1248 09bc 9093 0000 sts (ServoFrameTime.1)+1,r25
1249 09c0 8093 0000 sts ServoFrameTime.1,r24
1250 09c4 00C0 rjmp .L109
1251 .L93:
1252 09c6 8091 B000 lds r24,176
1253 09ca 8064 ori r24,lo8(64)
1254 09cc 8093 B000 sts 176,r24
1255 09d0 8CEB ldi r24,lo8(188)
1256 09d2 90E0 ldi r25,hi8(188)
1257 09d4 9093 0000 sts (RemainingPulse)+1,r25
1258 09d8 8093 0000 sts RemainingPulse,r24
1259 09dc 8091 0000 lds r24,ServoFrameTime.1
1260 09e0 9091 0000 lds r25,(ServoFrameTime.1)+1
1261 09e4 8454 subi r24,lo8(-(188))
1262 09e6 9F4F sbci r25,hi8(-(188))
1263 09e8 9093 0000 sts (ServoFrameTime.1)+1,r25
1264 09ec 8093 0000 sts ServoFrameTime.1,r24
1265 09f0 8091 0000 lds r24,ServoActive
1266 09f4 8823 tst r24
1267 09f6 01F0 breq .L112
1268 09f8 8091 0000 lds r24,SenderOkay
1269 09fc 8823 tst r24
1270 09fe 01F4 brne .L111
1271 .L112:
1272 0a00 8091 0000 lds r24,ServoActive
1273 0a04 8230 cpi r24,lo8(2)
1274 0a06 01F4 brne .L110
1275 .L111:
1276 0a08 4698 cbi 40-0x20,6
1277 0a0a 00C0 rjmp .L113
1278 .L110:
1279 0a0c 469A sbi 40-0x20,6
1280 .L113:
1281 0a0e 8091 0000 lds r24,ServoIndex.2
1282 0a12 8F5F subi r24,lo8(-(1))
1283 0a14 8093 0000 sts ServoIndex.2,r24
1284 0a18 282F mov r18,r24
1285 0a1a 3327 clr r19
1286 0a1c 8091 0000 lds r24,EE_Parameter+53
1287 0a20 9927 clr r25
1288 0a22 0196 adiw r24,1
1289 0a24 8217 cp r24,r18
1290 0a26 9307 cpc r25,r19
1291 0a28 04F4 brge .L109
1292 0a2a 81E0 ldi r24,lo8(1)
1293 0a2c 8093 0000 sts CalculateServoSignals,r24
1294 0a30 1092 0000 sts ServoIndex.2,__zero_reg__
1295 .L109:
1296 0a34 81E0 ldi r24,lo8(1)
1297 0a36 8093 0000 sts PulseOutput.0,r24
1298 .L91:
1299 0a3a 2091 0000 lds r18,RemainingPulse
1300 0a3e 3091 0000 lds r19,(RemainingPulse)+1
1301 0a42 41E0 ldi r20,hi8(383)
1302 0a44 2F37 cpi r18,lo8(383)
1303 0a46 3407 cpc r19,r20
1304 0a48 00F0 brlo .L115
1305 0a4a 8FEF ldi r24,lo8(-1)
1306 0a4c 8093 B300 sts 179,r24
1307 0a50 2F5F subi r18,lo8(-(-255))
1308 0a52 3040 sbci r19,hi8(-(-255))
1309 0a54 00C0 rjmp .L124
1310 .L115:
1311 0a56 2F3F cpi r18,255
1312 0a58 3105 cpc r19,__zero_reg__
1313 0a5a 01F0 breq .L117
1314 0a5c 00F0 brlo .L117
1315 0a5e A901 movw r20,r18
1316 0a60 4F5F subi r20,lo8(-(-255))
1317 0a62 5040 sbci r21,hi8(-(-255))
1318 0a64 4F37 cpi r20,127
1319 0a66 5105 cpc r21,__zero_reg__
1320 0a68 00F4 brsh .L118
1321 0a6a 80E8 ldi r24,lo8(-128)
1322 0a6c 8093 B300 sts 179,r24
1323 0a70 2058 subi r18,lo8(-(-128))
1324 0a72 3040 sbci r19,hi8(-(-128))
1325 .L124:
1326 0a74 3093 0000 sts (RemainingPulse)+1,r19
1327 0a78 2093 0000 sts RemainingPulse,r18
1328 0a7c 00C0 rjmp .L83
1329 .L118:
1330 0a7e 8FEF ldi r24,lo8(-1)
1331 0a80 8093 B300 sts 179,r24
1332 0a84 5093 0000 sts (RemainingPulse)+1,r21
1333 0a88 4093 0000 sts RemainingPulse,r20
1334 0a8c 00C0 rjmp .L83
1335 .L117:
1336 0a8e 8091 0000 lds r24,RemainingPulse
1337 0a92 8093 B300 sts 179,r24
1338 0a96 1092 0000 sts (RemainingPulse)+1,__zero_reg__
1339 0a9a 1092 0000 sts RemainingPulse,__zero_reg__
1340 0a9e 1092 0000 sts PulseOutput.0,__zero_reg__
1341 .L83:
1342 /* epilogue: frame size=0 */
1343 0aa2 FF91 pop r31
1344 0aa4 EF91 pop r30
1345 0aa6 9F91 pop r25
1346 0aa8 8F91 pop r24
1347 0aaa 5F91 pop r21
1348 0aac 4F91 pop r20
1349 0aae 3F91 pop r19
1350 0ab0 2F91 pop r18
1351 0ab2 0F90 pop __tmp_reg__
1352 0ab4 0FBE out __SREG__,__tmp_reg__
1353 0ab6 0F90 pop __tmp_reg__
1354 0ab8 1F90 pop __zero_reg__
1355 0aba 1895 reti
1356 /* epilogue end (size=13) */
1357 /* function __vector_9 size 389 (363) */
1359 .comm tim_main,2,1
1360 /* File "timer0.c": code 1388 = 0x056c (1305), prologues 39, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 timer0.c
C:\Temp/ccwra2gD.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccwra2gD.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccwra2gD.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccwra2gD.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccwra2gD.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccwra2gD.s:15 .bss:00000000 ServoRollValue
C:\Temp/ccwra2gD.s:21 .bss:00000002 ServoNickValue
C:\Temp/ccwra2gD.s:27 .data:00000000 NickServoValue
C:\Temp/ccwra2gD.s:32 .data:00000002 BeepMuster
C:\Temp/ccwra2gD.s:37 .data:00000004 ServoRollOffset
C:\Temp/ccwra2gD.s:42 .data:00000006 ServoNickOffset
C:\Temp/ccwra2gD.s:49 .bss:00000004 RemainingPulse
C:\Temp/ccwra2gD.s:55 .data:00000008 CalculateServoSignals
C:\Temp/ccwra2gD.s:62 .bss:00000006 ServoActive
C:\Temp/ccwra2gD.s:68 .bss:00000007 SendSPI
C:\Temp/ccwra2gD.s:74 .bss:00000008 beeptime
C:\Temp/ccwra2gD.s:80 .bss:0000000a cntKompass
C:\Temp/ccwra2gD.s:86 .bss:0000000c UpdateMotor
C:\Temp/ccwra2gD.s:92 .bss:0000000d CountMilliseconds
C:\Temp/ccwra2gD.s:97 .data:00000009 cnt_1ms.3
.bss:0000000f cnt.4
C:\Temp/ccwra2gD.s:99 .bss:00000010 compass_active.5
C:\Temp/ccwra2gD.s:104 .text:00000000 __vector_18
C:\Temp/ccwra2gD.s:309 .text:000001e6 SetDelay
C:\Temp/ccwra2gD.s:325 .text:000001f8 CheckDelay
C:\Temp/ccwra2gD.s:344 .text:00000210 Delay_ms
C:\Temp/ccwra2gD.s:365 .text:0000022a Delay_ms_Mess
C:\Temp/ccwra2gD.s:395 .text:0000025a TIMER2_Init
C:\Temp/ccwra2gD.s:437 .text:000002b8 Timer_Init
*COM*:00000002 tim_main
C:\Temp/ccwra2gD.s:464 .text:000002e6 CalcNickServoValue
C:\Temp/ccwra2gD.s:530 .text:0000036a CalculateServo
C:\Temp/ccwra2gD.s:100 .bss:00000011 PulseOutput.0
C:\Temp/ccwra2gD.s:1019 .bss:00000012 ServoFrameTime.1
C:\Temp/ccwra2gD.s:1020 .bss:00000014 ServoIndex.2
C:\Temp/ccwra2gD.s:1024 .text:000007ba __vector_9
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SpektrumTimer
PlatinenVersion
NaviDataOkay
Parameter_GlobalConfig
__udivmodhi4
KompassValue
AdReady
EE_Parameter
Parameter_ServoNickControl
__prologue_saves__
sintab
IntegralNick
__mulsi3
IntegralRoll
POI_KameraNick
__divmodhi4
__divmodsi4
Parameter_ServoRollControl
__epilogue_restores__
Parameter_Servo3
Parameter_Servo4
Parameter_Servo5
PPM_in
SenderOkay
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/twimaster.c
0,0 → 1,469
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/twi.h>
#include "eeprom.h"
#include "twimaster.h"
#include "fc.h"
#include "analog.h"
#include "uart.h"
#include "timer0.h"
 
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX;
volatile uint8_t dac_channel = 0;
volatile uint8_t motor_write = 0;
volatile uint8_t motor_read = 0;
volatile uint8_t I2C_TransferActive = 0;
 
volatile uint16_t I2CTimeout = 100;
 
uint8_t MissingMotor = 0;
 
volatile uint8_t BLFlags = 0;
 
MotorData_t Motor[MAX_MOTORS];
 
// bit mask for witch BL the configuration should be sent
volatile uint16_t BLConfig_WriteMask = 0;
// bit mask for witch BL the configuration should be read
volatile uint16_t BLConfig_ReadMask = 0;
// buffer for BL Configuration
BLConfig_t BLConfig;
 
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);}
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);}
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);}
 
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define TWI_BASE_ADDRESS 0x52
 
/**************************************************/
/* Initialize I2C (TWI) */
/**************************************************/
 
void I2C_Init(char clear)
{
uint8_t i;
uint8_t sreg = SREG;
cli();
 
// SDA is INPUT
DDRC &= ~(1<<DDC1);
// SCL is output
DDRC |= (1<<DDC0);
// pull up SDA
PORTC |= (1<<PORTC0)|(1<<PORTC1);
 
// TWI Status Register
// prescaler 1 (TWPS1 = 0, TWPS0 = 0)
TWSR &= ~((1<<TWPS1)|(1<<TWPS0));
 
// set TWI Bit Rate Register
TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
 
twi_state = TWI_STATE_MOTOR_TX;
motor_write = 0;
motor_read = 0;
 
if(clear) for(i=0; i < MAX_MOTORS; i++)
{
Motor[i].Version = 0;
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
Motor[i].State = 0;
Motor[i].ReadMode = BL_READMODE_STATUS;
Motor[i].Current = 0;
Motor[i].MaxPWM = 0;
Motor[i].Temperature = 0;
}
sei();
SREG = sreg;
}
 
void I2C_Reset(void)
{
// stop i2c bus
I2C_Stop(TWI_STATE_MOTOR_TX);
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset
TWAMR = 0;
TWAR = 0;
TWDR = 0;
TWSR = 0;
TWBR = 0;
I2C_TransferActive = 0;
I2C_Init(0);
I2C_WriteByte(0);
BLFlags |= BLFLAG_READ_VERSION;
}
 
/****************************************/
/* I2C ISR */
/****************************************/
ISR (TWI_vect)
{
static uint8_t missing_motor = 0, motor_read_temperature = 0;
static uint8_t *pBuff = 0;
static uint8_t BuffLen = 0;
 
switch (twi_state++)
{
// Master Transmit
case 0: // TWI_STATE_MOTOR_TX
I2C_TransferActive = 1;
// skip motor if not used in mixer
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++;
if(motor_write >= MAX_MOTORS) // writing finished, read now
{
BLConfig_WriteMask = 0; // reset configuration bitmask
motor_write = 0; // reset motor write counter for next cycle
twi_state = TWI_STATE_MOTOR_RX;
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode
}
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode
break;
case 1: // Send Data to Slave
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint
// if old version has been detected
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK))
{
twi_state = 4; //jump over sending more data
}
// the new version has been detected
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) )
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time)
twi_state = 4; //jump over sending more data
}
break;
case 2: // lower bits of setpoint (higher resolution)
if ((0x0001<<motor_write) & BLConfig_ReadMask)
{
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request
}
else
{
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request
}
// send read mode and the lower bits of setpoint
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07));
// configuration tranmission request?
if((0x0001<<motor_write) & BLConfig_WriteMask)
{ // redirect tx pointer to configuration data
pBuff = (uint8_t*)&BLConfig; // select config for motor
BuffLen = sizeof(BLConfig_t);
}
else
{ // jump to end of transmission for that motor
twi_state = 4;
}
break;
case 3: // send configuration
I2C_WriteByte(*pBuff);
pBuff++;
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left
break;
case 4: // repeat case 0-4 for all motors
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received
{
if(!missing_motor) missing_motor = motor_write + 1;
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow
}
I2C_Stop(TWI_STATE_MOTOR_TX);
I2CTimeout = 10;
motor_write++; // next motor
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive
break;
// Master Receive Data
case 5: // TWI_STATE_MOTOR_RX
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received
{ // no response from the addressed slave received
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit
if(++motor_read >= MAX_MOTORS)
{ // all motors read
motor_read = 0; // restart from beginning
BLConfig_ReadMask = 0; // reset read configuration bitmask
if(++motor_read_temperature >= MAX_MOTORS)
{
motor_read_temperature = 0;
BLFlags &= ~BLFLAG_READ_VERSION;
}
}
BLFlags |= BLFLAG_TX_COMPLETE;
I2C_Stop(TWI_STATE_MOTOR_TX);
I2C_TransferActive = 0;
}
else
{ // motor successfully addressed
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)
{
// new BL found
switch(Motor[motor_read].ReadMode)
{
case BL_READMODE_CONFIG:
pBuff = (uint8_t*)&BLConfig;
BuffLen = sizeof(BLConfig_t);
break;
 
case BL_READMODE_STATUS:
pBuff = (uint8_t*)&(Motor[motor_read].Current);
if(motor_read == motor_read_temperature) BuffLen = 3; // read Current, MaxPwm & Temp
else BuffLen = 1;// read Current only
break;
}
}
else // old BL version
{
pBuff = (uint8_t*)&(Motor[motor_read].Current);
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm
else BuffLen = 1; // read Current only
}
if(BuffLen == 1)
{
I2C_ReceiveLastByte(); // read last byte
}
else
{
I2C_ReceiveByte(); // read next byte
}
}
MissingMotor = missing_motor;
missing_motor = 0;
break;
case 6: // receive bytes
*pBuff = TWDR;
pBuff++;
BuffLen--;
if(BuffLen>1)
{
I2C_ReceiveByte(); // read next byte
}
else if (BuffLen == 1)
{
I2C_ReceiveLastByte(); // read last byte
}
else // nothing left
{
if(BLFlags & BLFLAG_READ_VERSION)
{
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN) && (Motor[motor_read].MaxPWM == 250) ) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK;
else Motor[motor_read].Version = 0;
}
if(++motor_read >= MAX_MOTORS)
{
motor_read = 0; // restart from beginning
BLConfig_ReadMask = 0; // reset read configuration bitmask
if(++motor_read_temperature >= MAX_MOTORS)
{
motor_read_temperature = 0;
BLFlags &= ~BLFLAG_READ_VERSION;
}
}
I2C_Stop(TWI_STATE_MOTOR_TX);
BLFlags |= BLFLAG_TX_COMPLETE;
I2C_TransferActive = 0;
return;
}
twi_state = 6; // if there are some bytes left
break;
 
// writing Gyro-Offsets
case 18:
I2C_WriteByte(0x98); // Address the DAC
break;
 
case 19:
I2C_WriteByte(0x10 + (dac_channel * 2)); // Select DAC Channel (0x10 = A, 0x12 = B, 0x14 = C)
break;
 
case 20:
switch(dac_channel)
{
case 0:
I2C_WriteByte(AnalogOffsetNick); // 1st byte for Channel A
break;
case 1:
I2C_WriteByte(AnalogOffsetRoll); // 1st byte for Channel B
break;
case 2:
I2C_WriteByte(AnalogOffsetGier); // 1st byte for Channel C
break;
}
break;
 
case 21:
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80
break;
 
case 22:
I2C_Stop(TWI_STATE_MOTOR_TX);
I2C_TransferActive = 0;
I2CTimeout = 10;
// repeat case 18...22 until all DAC Channels are updated
if(dac_channel < 2)
{
dac_channel ++; // jump to next channel
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel
}
else
{
dac_channel = 0; // reset dac channel counter
BLFlags |= BLFLAG_TX_COMPLETE;
}
break;
default:
I2C_Stop(TWI_STATE_MOTOR_TX);
BLFlags |= BLFLAG_TX_COMPLETE;
I2CTimeout = 10;
motor_write = 0;
motor_read = 0;
I2C_TransferActive = 0;
break;
}
 
}
 
 
uint8_t I2C_WriteBLConfig(uint8_t motor)
{
uint8_t i;
uint16_t timer;
 
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(motor)
{
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
}
// check BL configuration to send
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
 
timer = SetDelay(2000);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
 
// prepare the bitmask
if(!motor) // 0 means all
{
BLConfig_WriteMask = 0xFF; // all motors at once with the same configuration
}
else //only one specific motor
{
BLConfig_WriteMask = 0x0001<<(motor-1);
}
for(i = 0; i < MAX_MOTORS; i++)
{
if((0x0001<<i) & BLConfig_WriteMask)
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
 
motor_write = 0;
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms)
do
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST);
return(BLCONFIG_SUCCESS);
}
 
uint8_t I2C_ReadBLConfig(uint8_t motor)
{
uint8_t i;
uint16_t timer;
 
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE);
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
 
timer = SetDelay(2000);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
 
// prepare the bitmask
BLConfig_ReadMask = 0x0001<<(motor-1);
 
for(i = 0; i < MAX_MOTORS; i++)
{
if((0x0001<<i) & BLConfig_ReadMask)
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
 
motor_read = 0;
BLConfig.Revision = 0; // bad revision
BLConfig.crc = 0; // bad checksum
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms)
do
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors
// validate result
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
return(BLCONFIG_SUCCESS);
}
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/twimaster.h
0,0 → 1,100
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
+
+#include <inttypes.h>
+
+#define TWI_STATE_MOTOR_TX 0
+#define TWI_STATE_MOTOR_RX 5
+#define TWI_STATE_GYRO_OFFSET_TX 18
+
+extern volatile uint8_t twi_state;
+extern volatile uint8_t motor_write;
+extern volatile uint8_t motor_read;
+extern volatile uint8_t I2C_TransferActive;
+
+extern uint8_t MissingMotor;
+
+#define MAX_MOTORS 12
+#define MOTOR_STATE_PRESENT_MASK 0x80
+#define MOTOR_STATE_ERROR_MASK 0x7F
+
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01
+
+#define BLFLAG_TX_COMPLETE 0x01
+#define BLFLAG_READ_VERSION 0x02
+
+extern volatile uint8_t BLFlags;
+
+
+#define BL_READMODE_STATUS 0
+#define BL_READMODE_CONFIG 16
+
+typedef struct
+{
+ uint8_t Version; // the version of the BL (0 = old)
+ uint8_t SetPoint; // written by attitude controller
+ uint8_t SetPointLowerBits; // for higher Resolution of new BLs
+ uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present
+ uint8_t ReadMode; // select data to read
+ // the following bytes must be exactly in that order!
+ uint8_t Current; // in 0.1 A steps, read back from BL
+ uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40)
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C
+} __attribute__((packed)) MotorData_t;
+
+extern MotorData_t Motor[MAX_MOTORS];
+
+#define BLCONFIG_REVISION 2
+
+#define MASK_SET_PWM_SCALING 0x01
+#define MASK_SET_CURRENT_LIMIT 0x02
+#define MASK_SET_TEMP_LIMIT 0x04
+#define MASK_SET_CURRENT_SCALING 0x08
+#define MASK_SET_BITCONFIG 0x10
+#define MASK_RESET_CAPCOUNTER 0x20
+#define MASK_SET_DEFAULT_PARAMS 0x40
+#define MASK_SET_SAVE_EEPROM 0x80
+
+#define BITCONF_REVERSE_ROTATION 0x01
+#define BITCONF_RES1 0x02
+#define BITCONF_RES2 0x04
+#define BITCONF_RES3 0x08
+#define BITCONF_RES4 0x10
+#define BITCONF_RES5 0x20
+#define BITCONF_RES6 0x40
+#define BITCONF_RES7 0x80
+
+typedef struct
+{
+ uint8_t Revision; // must be BL_REVISION
+ uint8_t SetMask; // settings mask
+ uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit
+ uint8_t CurrentLimit; // current limit in A
+ uint8_t TempLimit; // in °C
+ uint8_t CurrentScaling; // scaling factor for current measurement
+ uint8_t BitConfig; // see defines above
+ uint8_t crc; // checksum
+} __attribute__((packed)) BLConfig_t;
+
+extern BLConfig_t BLConfig;
+
+extern volatile uint16_t I2CTimeout;
+
+void I2C_Init(char); // Initialize I2C
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);}
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);}
+void I2C_Reset(void); // Reset I2C
+
+#define BLCONFIG_SUCCESS 0
+#define BLCONFIG_ERR_MOTOR_RUNNING 1
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4
+#define BLCONFIG_ERR_CHECKSUM 5
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6
+
+uint8_t I2C_WriteBLConfig(uint8_t motor);
+uint8_t I2C_ReadBLConfig(uint8_t motor);
+
+#endif
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/twimaster.lst
0,0 → 1,1208
1 .file "twimaster.c"
2 .arch atmega1284p
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 .global BLConfig_ReadMask
11 .global BLConfig_ReadMask
12 .section .bss
15 BLConfig_ReadMask:
16 0000 0000 .skip 2,0
17 .global BLConfig_WriteMask
18 .global BLConfig_WriteMask
21 BLConfig_WriteMask:
22 0002 0000 .skip 2,0
23 .global BLFlags
24 .global BLFlags
27 BLFlags:
28 0004 00 .skip 1,0
29 .global MissingMotor
30 .global MissingMotor
33 MissingMotor:
34 0005 00 .skip 1,0
35 .global I2CTimeout
36 .data
39 I2CTimeout:
40 0000 6400 .word 100
41 .global I2C_TransferActive
42 .global I2C_TransferActive
43 .section .bss
46 I2C_TransferActive:
47 0006 00 .skip 1,0
48 .global motor_read
49 .global motor_read
52 motor_read:
53 0007 00 .skip 1,0
54 .global motor_write
55 .global motor_write
58 motor_write:
59 0008 00 .skip 1,0
60 .global dac_channel
61 .global dac_channel
64 dac_channel:
65 0009 00 .skip 1,0
66 .global twi_state
67 .global twi_state
70 twi_state:
71 000a 00 .skip 1,0
72 .text
73 .global I2C_Init
75 I2C_Init:
76 /* prologue: frame size=0 */
77 /* prologue end (size=0) */
78 0000 982F mov r25,r24
79 0002 2FB7 in r18,95-0x20
80 /* #APP */
81 0004 F894 cli
82 /* #NOAPP */
83 0006 3998 cbi 39-0x20,1
84 0008 389A sbi 39-0x20,0
85 000a 88B1 in r24,40-0x20
86 000c 8360 ori r24,lo8(3)
87 000e 88B9 out 40-0x20,r24
88 0010 8091 B900 lds r24,185
89 0014 8C7F andi r24,lo8(-4)
90 0016 8093 B900 sts 185,r24
91 001a 8AE2 ldi r24,lo8(42)
92 001c 8093 B800 sts 184,r24
93 0020 1092 0000 sts twi_state,__zero_reg__
94 0024 1092 0000 sts motor_write,__zero_reg__
95 0028 1092 0000 sts motor_read,__zero_reg__
96 002c 9923 tst r25
97 002e 01F0 breq .L2
98 0030 E0E0 ldi r30,lo8(Motor)
99 0032 F0E0 ldi r31,hi8(Motor)
100 0034 8BE0 ldi r24,lo8(11)
101 .L6:
102 0036 1082 st Z,__zero_reg__
103 0038 1182 std Z+1,__zero_reg__
104 003a 1282 std Z+2,__zero_reg__
105 003c 1382 std Z+3,__zero_reg__
106 003e 1482 std Z+4,__zero_reg__
107 0040 1582 std Z+5,__zero_reg__
108 0042 1682 std Z+6,__zero_reg__
109 0044 1782 std Z+7,__zero_reg__
110 0046 8150 subi r24,lo8(-(-1))
111 0048 3896 adiw r30,8
112 004a 87FF sbrs r24,7
113 004c 00C0 rjmp .L6
114 .L2:
115 /* #APP */
116 004e 7894 sei
117 /* #NOAPP */
118 0050 2FBF out 95-0x20,r18
119 /* epilogue: frame size=0 */
120 0052 0895 ret
121 /* epilogue end (size=1) */
122 /* function I2C_Init size 44 (43) */
124 .global I2C_Reset
126 I2C_Reset:
127 /* prologue: frame size=0 */
128 /* prologue end (size=0) */
129 0054 1092 0000 sts twi_state,__zero_reg__
130 0058 84E9 ldi r24,lo8(-108)
131 005a 8093 BC00 sts 188,r24
132 005e 80E8 ldi r24,lo8(-128)
133 0060 8093 BC00 sts 188,r24
134 0064 1092 BD00 sts 189,__zero_reg__
135 0068 1092 BA00 sts 186,__zero_reg__
136 006c 1092 BB00 sts 187,__zero_reg__
137 0070 1092 B900 sts 185,__zero_reg__
138 0074 1092 B800 sts 184,__zero_reg__
139 0078 1092 0000 sts I2C_TransferActive,__zero_reg__
140 007c 80E0 ldi r24,lo8(0)
141 007e 0E94 0000 call I2C_Init
142 0082 1092 BB00 sts 187,__zero_reg__
143 0086 85E8 ldi r24,lo8(-123)
144 0088 8093 BC00 sts 188,r24
145 008c 8091 0000 lds r24,BLFlags
146 0090 8260 ori r24,lo8(2)
147 0092 8093 0000 sts BLFlags,r24
148 /* epilogue: frame size=0 */
149 0096 0895 ret
150 /* epilogue end (size=1) */
151 /* function I2C_Reset size 34 (33) */
153 .lcomm missing_motor.0,1
154 .lcomm motor_read_temperature.1,1
155 .lcomm pBuff.2,2
156 .lcomm BuffLen.3,1
157 .global __vector_26
159 __vector_26:
160 /* prologue: frame size=0 */
161 0098 1F92 push __zero_reg__
162 009a 0F92 push __tmp_reg__
163 009c 0FB6 in __tmp_reg__,__SREG__
164 009e 0F92 push __tmp_reg__
165 00a0 1124 clr __zero_reg__
166 00a2 2F93 push r18
167 00a4 3F93 push r19
168 00a6 4F93 push r20
169 00a8 5F93 push r21
170 00aa 8F93 push r24
171 00ac 9F93 push r25
172 00ae EF93 push r30
173 00b0 FF93 push r31
174 /* prologue end (size=13) */
175 00b2 8091 0000 lds r24,twi_state
176 00b6 282F mov r18,r24
177 00b8 3327 clr r19
178 00ba 4427 clr r20
179 00bc 5527 clr r21
180 00be 8F5F subi r24,lo8(-(1))
181 00c0 8093 0000 sts twi_state,r24
182 00c4 F901 movw r30,r18
183 00c6 2731 cpi r18,23
184 00c8 3105 cpc r19,__zero_reg__
185 00ca 00F0 brlo .+2
186 00cc 00C0 rjmp .L72
187 00ce E050 subi r30,lo8(-(pm(.L73)))
188 00d0 F040 sbci r31,hi8(-(pm(.L73)))
189 00d2 0C94 0000 jmp __tablejump2__
190 .data
191 .section .progmem.gcc_sw_table, "a", @progbits
192 .p2align 1
193 .L73:
194 0000 0000 .word pm(.L11)
195 0002 0000 .word pm(.L17)
196 0004 0000 .word pm(.L22)
197 0006 0000 .word pm(.L27)
198 0008 0000 .word pm(.L29)
199 000a 0000 .word pm(.L33)
200 000c 0000 .word pm(.L50)
201 000e 0000 .word pm(.L72)
202 0010 0000 .word pm(.L72)
203 0012 0000 .word pm(.L72)
204 0014 0000 .word pm(.L72)
205 0016 0000 .word pm(.L72)
206 0018 0000 .word pm(.L72)
207 001a 0000 .word pm(.L72)
208 001c 0000 .word pm(.L72)
209 001e 0000 .word pm(.L72)
210 0020 0000 .word pm(.L72)
211 0022 0000 .word pm(.L72)
212 0024 0000 .word pm(.L60)
213 0026 0000 .word pm(.L61)
214 0028 0000 .word pm(.L62)
215 002a 0000 .word pm(.L68)
216 002c 0000 .word pm(.L69)
217 .text
218 .L11:
219 00d6 81E0 ldi r24,lo8(1)
220 00d8 8093 0000 sts I2C_TransferActive,r24
221 00dc 00C0 rjmp .L76
222 .L75:
223 00de 8091 0000 lds r24,motor_write
224 00e2 8C30 cpi r24,lo8(12)
225 00e4 00F4 brsh .L13
226 00e6 8091 0000 lds r24,motor_write
227 00ea 8F5F subi r24,lo8(-(1))
228 00ec 8093 0000 sts motor_write,r24
229 .L76:
230 00f0 8091 0000 lds r24,motor_write
231 00f4 E82F mov r30,r24
232 00f6 FF27 clr r31
233 00f8 EE0F lsl r30
234 00fa FF1F rol r31
235 00fc EE0F lsl r30
236 00fe FF1F rol r31
237 0100 E050 subi r30,lo8(-(Mixer))
238 0102 F040 sbci r31,hi8(-(Mixer))
239 0104 8585 ldd r24,Z+13
240 0106 1816 cp __zero_reg__,r24
241 0108 04F4 brge .L75
242 .L13:
243 010a 8091 0000 lds r24,motor_write
244 010e 8C30 cpi r24,lo8(12)
245 0110 00F0 brlo .L15
246 0112 1092 0000 sts (BLConfig_WriteMask)+1,__zero_reg__
247 0116 1092 0000 sts BLConfig_WriteMask,__zero_reg__
248 011a 1092 0000 sts motor_write,__zero_reg__
249 011e 85E0 ldi r24,lo8(5)
250 0120 8093 0000 sts twi_state,r24
251 0124 8091 0000 lds r24,motor_read
252 0128 880F lsl r24
253 012a 8D5A subi r24,lo8(-(83))
254 012c 00C0 rjmp .L84
255 .L15:
256 012e 8091 0000 lds r24,motor_write
257 0132 880F lsl r24
258 0134 8E5A subi r24,lo8(-(82))
259 .L84:
260 0136 8093 BB00 sts 187,r24
261 013a 85E8 ldi r24,lo8(-123)
262 013c 00C0 rjmp .L80
263 .L17:
264 013e 8091 0000 lds r24,motor_write
265 0142 E82F mov r30,r24
266 0144 FF27 clr r31
267 0146 83E0 ldi r24,3
268 0148 EE0F 1: lsl r30
269 014a FF1F rol r31
270 014c 8A95 dec r24
271 014e 01F4 brne 1b
272 0150 E050 subi r30,lo8(-(Motor))
273 0152 F040 sbci r31,hi8(-(Motor))
274 0154 8181 ldd r24,Z+1
275 0156 8093 BB00 sts 187,r24
276 015a 85E8 ldi r24,lo8(-123)
277 015c 8093 BC00 sts 188,r24
278 0160 8091 0000 lds r24,motor_write
279 0164 E82F mov r30,r24
280 0166 FF27 clr r31
281 0168 EE0F lsl r30
282 016a FF1F rol r31
283 016c EE0F lsl r30
284 016e FF1F rol r31
285 0170 EE0F lsl r30
286 0172 FF1F rol r31
287 0174 E050 subi r30,lo8(-(Motor))
288 0176 F040 sbci r31,hi8(-(Motor))
289 0178 8081 ld r24,Z
290 017a 80FF sbrs r24,0
291 017c 00C0 rjmp .L25
292 017e 8091 0000 lds r24,motor_write
293 0182 E82F mov r30,r24
294 0184 FF27 clr r31
295 0186 EE0F lsl r30
296 0188 FF1F rol r31
297 018a EE0F lsl r30
298 018c FF1F rol r31
299 018e EE0F lsl r30
300 0190 FF1F rol r31
301 0192 E050 subi r30,lo8(-(Motor))
302 0194 F040 sbci r31,hi8(-(Motor))
303 0196 8281 ldd r24,Z+2
304 0198 8823 tst r24
305 019a 01F0 breq .L21
306 019c 8091 0000 lds r24,RequiredMotors
307 01a0 8730 cpi r24,lo8(7)
308 01a2 00F4 brsh .+2
309 01a4 00C0 rjmp .L9
310 .L21:
311 01a6 8091 0000 lds r24,BLConfig_WriteMask
312 01aa 9091 0000 lds r25,(BLConfig_WriteMask)+1
313 01ae 892B or r24,r25
314 01b0 01F0 breq .+2
315 01b2 00C0 rjmp .L9
316 01b4 8091 0000 lds r24,BLConfig_ReadMask
317 01b8 9091 0000 lds r25,(BLConfig_ReadMask)+1
318 01bc 892B or r24,r25
319 01be 01F0 breq .+2
320 01c0 00C0 rjmp .L9
321 01c2 00C0 rjmp .L25
322 .L22:
323 01c4 8091 0000 lds r24,motor_write
324 01c8 21E0 ldi r18,lo8(1)
325 01ca 30E0 ldi r19,hi8(1)
326 01cc 00C0 rjmp 2f
327 01ce 220F 1: lsl r18
328 01d0 331F rol r19
329 01d2 8A95 2: dec r24
330 01d4 02F4 brpl 1b
331 01d6 8091 0000 lds r24,BLConfig_ReadMask
332 01da 9091 0000 lds r25,(BLConfig_ReadMask)+1
333 01de 2823 and r18,r24
334 01e0 3923 and r19,r25
335 01e2 232B or r18,r19
336 01e4 01F0 breq .L23
337 01e6 8091 0000 lds r24,motor_write
338 01ea E82F mov r30,r24
339 01ec FF27 clr r31
340 01ee EE0F lsl r30
341 01f0 FF1F rol r31
342 01f2 EE0F lsl r30
343 01f4 FF1F rol r31
344 01f6 EE0F lsl r30
345 01f8 FF1F rol r31
346 01fa E050 subi r30,lo8(-(Motor))
347 01fc F040 sbci r31,hi8(-(Motor))
348 01fe 80E1 ldi r24,lo8(16)
349 0200 8483 std Z+4,r24
350 0202 00C0 rjmp .L24
351 .L23:
352 0204 8091 0000 lds r24,motor_write
353 0208 E82F mov r30,r24
354 020a FF27 clr r31
355 020c EE0F lsl r30
356 020e FF1F rol r31
357 0210 EE0F lsl r30
358 0212 FF1F rol r31
359 0214 EE0F lsl r30
360 0216 FF1F rol r31
361 0218 E050 subi r30,lo8(-(Motor))
362 021a F040 sbci r31,hi8(-(Motor))
363 021c 1482 std Z+4,__zero_reg__
364 .L24:
365 021e 8091 0000 lds r24,motor_write
366 0222 E82F mov r30,r24
367 0224 FF27 clr r31
368 0226 53E0 ldi r21,3
369 0228 EE0F 1: lsl r30
370 022a FF1F rol r31
371 022c 5A95 dec r21
372 022e 01F4 brne 1b
373 0230 E050 subi r30,lo8(-(Motor))
374 0232 F040 sbci r31,hi8(-(Motor))
375 0234 8481 ldd r24,Z+4
376 0236 282F mov r18,r24
377 0238 3327 clr r19
378 023a 43E0 ldi r20,3
379 023c 220F 1: lsl r18
380 023e 331F rol r19
381 0240 4A95 dec r20
382 0242 01F4 brne 1b
383 0244 8091 0000 lds r24,motor_write
384 0248 E82F mov r30,r24
385 024a FF27 clr r31
386 024c 93E0 ldi r25,3
387 024e EE0F 1: lsl r30
388 0250 FF1F rol r31
389 0252 9A95 dec r25
390 0254 01F4 brne 1b
391 0256 E050 subi r30,lo8(-(Motor))
392 0258 F040 sbci r31,hi8(-(Motor))
393 025a 8281 ldd r24,Z+2
394 025c 8770 andi r24,lo8(7)
395 025e 822B or r24,r18
396 0260 8093 BB00 sts 187,r24
397 0264 85E8 ldi r24,lo8(-123)
398 0266 8093 BC00 sts 188,r24
399 026a 2091 0000 lds r18,motor_write
400 026e 81E0 ldi r24,lo8(1)
401 0270 90E0 ldi r25,hi8(1)
402 0272 00C0 rjmp 2f
403 0274 880F 1: lsl r24
404 0276 991F rol r25
405 0278 2A95 2: dec r18
406 027a 02F4 brpl 1b
407 027c 2091 0000 lds r18,BLConfig_WriteMask
408 0280 3091 0000 lds r19,(BLConfig_WriteMask)+1
409 0284 8223 and r24,r18
410 0286 9323 and r25,r19
411 0288 892B or r24,r25
412 028a 01F0 breq .L25
413 028c 80E0 ldi r24,lo8(BLConfig)
414 028e 90E0 ldi r25,hi8(BLConfig)
415 0290 9093 0000 sts (pBuff.2)+1,r25
416 0294 8093 0000 sts pBuff.2,r24
417 0298 88E0 ldi r24,lo8(8)
418 029a 8093 0000 sts BuffLen.3,r24
419 029e 00C0 rjmp .L9
420 .L25:
421 02a0 84E0 ldi r24,lo8(4)
422 02a2 00C0 rjmp .L82
423 .L27:
424 02a4 E091 0000 lds r30,pBuff.2
425 02a8 F091 0000 lds r31,(pBuff.2)+1
426 02ac 8191 ld r24,Z+
427 02ae 8093 BB00 sts 187,r24
428 02b2 85E8 ldi r24,lo8(-123)
429 02b4 8093 BC00 sts 188,r24
430 02b8 F093 0000 sts (pBuff.2)+1,r31
431 02bc E093 0000 sts pBuff.2,r30
432 02c0 8091 0000 lds r24,BuffLen.3
433 02c4 8150 subi r24,lo8(-(-1))
434 02c6 8093 0000 sts BuffLen.3,r24
435 02ca 8823 tst r24
436 02cc 01F4 brne .+2
437 02ce 00C0 rjmp .L9
438 02d0 83E0 ldi r24,lo8(3)
439 02d2 00C0 rjmp .L82
440 .L29:
441 02d4 8091 B900 lds r24,185
442 02d8 8033 cpi r24,lo8(48)
443 02da 01F4 brne .L30
444 02dc 8091 0000 lds r24,missing_motor.0
445 02e0 8823 tst r24
446 02e2 01F4 brne .L31
447 02e4 8091 0000 lds r24,motor_write
448 02e8 8F5F subi r24,lo8(-(1))
449 02ea 8093 0000 sts missing_motor.0,r24
450 .L31:
451 02ee 8091 0000 lds r24,motor_write
452 02f2 E82F mov r30,r24
453 02f4 FF27 clr r31
454 02f6 83E0 ldi r24,3
455 02f8 EE0F 1: lsl r30
456 02fa FF1F rol r31
457 02fc 8A95 dec r24
458 02fe 01F4 brne 1b
459 0300 E050 subi r30,lo8(-(Motor))
460 0302 F040 sbci r31,hi8(-(Motor))
461 0304 8381 ldd r24,Z+3
462 0306 9927 clr r25
463 0308 8F77 andi r24,lo8(127)
464 030a 9070 andi r25,hi8(127)
465 030c 8F37 cpi r24,127
466 030e 9105 cpc r25,__zero_reg__
467 0310 04F4 brge .L30
468 0312 8091 0000 lds r24,motor_write
469 0316 E82F mov r30,r24
470 0318 FF27 clr r31
471 031a EE0F lsl r30
472 031c FF1F rol r31
473 031e EE0F lsl r30
474 0320 FF1F rol r31
475 0322 EE0F lsl r30
476 0324 FF1F rol r31
477 0326 E050 subi r30,lo8(-(Motor))
478 0328 F040 sbci r31,hi8(-(Motor))
479 032a 8381 ldd r24,Z+3
480 032c 8F5F subi r24,lo8(-(1))
481 032e 8383 std Z+3,r24
482 .L30:
483 0330 1092 0000 sts twi_state,__zero_reg__
484 0334 84E9 ldi r24,lo8(-108)
485 0336 8093 BC00 sts 188,r24
486 033a 8AE0 ldi r24,lo8(10)
487 033c 90E0 ldi r25,hi8(10)
488 033e 9093 0000 sts (I2CTimeout)+1,r25
489 0342 8093 0000 sts I2CTimeout,r24
490 0346 8091 0000 lds r24,motor_write
491 034a 8F5F subi r24,lo8(-(1))
492 034c 8093 0000 sts motor_write,r24
493 0350 1092 0000 sts twi_state,__zero_reg__
494 0354 00C0 rjmp .L85
495 .L33:
496 0356 8091 B900 lds r24,185
497 035a 8034 cpi r24,lo8(64)
498 035c 01F0 breq .L34
499 035e 8091 0000 lds r24,motor_read
500 0362 E82F mov r30,r24
501 0364 FF27 clr r31
502 0366 EE0F lsl r30
503 0368 FF1F rol r31
504 036a EE0F lsl r30
505 036c FF1F rol r31
506 036e EE0F lsl r30
507 0370 FF1F rol r31
508 0372 E050 subi r30,lo8(-(Motor))
509 0374 F040 sbci r31,hi8(-(Motor))
510 0376 8381 ldd r24,Z+3
511 0378 8F77 andi r24,lo8(127)
512 037a 8383 std Z+3,r24
513 037c 8091 0000 lds r24,motor_read
514 0380 8F5F subi r24,lo8(-(1))
515 0382 8093 0000 sts motor_read,r24
516 0386 8091 0000 lds r24,motor_read
517 038a 8C30 cpi r24,lo8(12)
518 038c 00F0 brlo .L35
519 038e 1092 0000 sts motor_read,__zero_reg__
520 0392 1092 0000 sts (BLConfig_ReadMask)+1,__zero_reg__
521 0396 1092 0000 sts BLConfig_ReadMask,__zero_reg__
522 039a 8091 0000 lds r24,motor_read_temperature.1
523 039e 8F5F subi r24,lo8(-(1))
524 03a0 8093 0000 sts motor_read_temperature.1,r24
525 03a4 8C30 cpi r24,lo8(12)
526 03a6 00F0 brlo .L35
527 03a8 1092 0000 sts motor_read_temperature.1,__zero_reg__
528 03ac 8091 0000 lds r24,BLFlags
529 03b0 8D7F andi r24,lo8(-3)
530 03b2 8093 0000 sts BLFlags,r24
531 .L35:
532 03b6 8091 0000 lds r24,BLFlags
533 03ba 8160 ori r24,lo8(1)
534 03bc 8093 0000 sts BLFlags,r24
535 03c0 1092 0000 sts twi_state,__zero_reg__
536 03c4 84E9 ldi r24,lo8(-108)
537 03c6 8093 BC00 sts 188,r24
538 03ca 1092 0000 sts I2C_TransferActive,__zero_reg__
539 03ce 00C0 rjmp .L37
540 .L34:
541 03d0 8091 0000 lds r24,motor_read
542 03d4 E82F mov r30,r24
543 03d6 FF27 clr r31
544 03d8 EE0F lsl r30
545 03da FF1F rol r31
546 03dc EE0F lsl r30
547 03de FF1F rol r31
548 03e0 EE0F lsl r30
549 03e2 FF1F rol r31
550 03e4 E050 subi r30,lo8(-(Motor))
551 03e6 F040 sbci r31,hi8(-(Motor))
552 03e8 8381 ldd r24,Z+3
553 03ea 8068 ori r24,lo8(-128)
554 03ec 8383 std Z+3,r24
555 03ee 8091 0000 lds r24,motor_read
556 03f2 E82F mov r30,r24
557 03f4 FF27 clr r31
558 03f6 EE0F lsl r30
559 03f8 FF1F rol r31
560 03fa EE0F lsl r30
561 03fc FF1F rol r31
562 03fe EE0F lsl r30
563 0400 FF1F rol r31
564 0402 E050 subi r30,lo8(-(Motor))
565 0404 F040 sbci r31,hi8(-(Motor))
566 0406 8081 ld r24,Z
567 0408 80FF sbrs r24,0
568 040a 00C0 rjmp .L38
569 040c 8091 0000 lds r24,motor_read
570 0410 E82F mov r30,r24
571 0412 FF27 clr r31
572 0414 53E0 ldi r21,3
573 0416 EE0F 1: lsl r30
574 0418 FF1F rol r31
575 041a 5A95 dec r21
576 041c 01F4 brne 1b
577 041e E050 subi r30,lo8(-(Motor))
578 0420 F040 sbci r31,hi8(-(Motor))
579 0422 8481 ldd r24,Z+4
580 0424 9927 clr r25
581 0426 0097 sbiw r24,0
582 0428 01F0 breq .L41
583 042a 4097 sbiw r24,16
584 042c 01F4 brne .L44
585 042e 80E0 ldi r24,lo8(BLConfig)
586 0430 90E0 ldi r25,hi8(BLConfig)
587 0432 9093 0000 sts (pBuff.2)+1,r25
588 0436 8093 0000 sts pBuff.2,r24
589 043a 88E0 ldi r24,lo8(8)
590 043c 00C0 rjmp .L77
591 .L41:
592 043e 8091 0000 lds r24,motor_read
593 0442 9927 clr r25
594 0444 43E0 ldi r20,3
595 0446 880F 1: lsl r24
596 0448 991F rol r25
597 044a 4A95 dec r20
598 044c 01F4 brne 1b
599 044e 8050 subi r24,lo8(-(Motor+5))
600 0450 9040 sbci r25,hi8(-(Motor+5))
601 0452 9093 0000 sts (pBuff.2)+1,r25
602 0456 8093 0000 sts pBuff.2,r24
603 045a 9091 0000 lds r25,motor_read
604 045e 8091 0000 lds r24,motor_read_temperature.1
605 0462 9817 cp r25,r24
606 0464 01F4 brne .L45
607 0466 83E0 ldi r24,lo8(3)
608 0468 00C0 rjmp .L77
609 .L38:
610 046a 8091 0000 lds r24,motor_read
611 046e 9927 clr r25
612 0470 33E0 ldi r19,3
613 0472 880F 1: lsl r24
614 0474 991F rol r25
615 0476 3A95 dec r19
616 0478 01F4 brne 1b
617 047a 8050 subi r24,lo8(-(Motor+5))
618 047c 9040 sbci r25,hi8(-(Motor+5))
619 047e 9093 0000 sts (pBuff.2)+1,r25
620 0482 8093 0000 sts pBuff.2,r24
621 0486 8091 0000 lds r24,BLFlags
622 048a 81FD sbrc r24,1
623 048c 00C0 rjmp .L46
624 048e 9091 0000 lds r25,motor_read
625 0492 8091 0000 lds r24,motor_read_temperature.1
626 0496 9817 cp r25,r24
627 0498 01F4 brne .L45
628 .L46:
629 049a 82E0 ldi r24,lo8(2)
630 049c 00C0 rjmp .L77
631 .L45:
632 049e 81E0 ldi r24,lo8(1)
633 .L77:
634 04a0 8093 0000 sts BuffLen.3,r24
635 .L44:
636 04a4 8091 0000 lds r24,BuffLen.3
637 04a8 8130 cpi r24,lo8(1)
638 04aa 01F4 brne .L48
639 04ac 85E8 ldi r24,lo8(-123)
640 04ae 00C0 rjmp .L78
641 .L48:
642 04b0 85EC ldi r24,lo8(-59)
643 .L78:
644 04b2 8093 BC00 sts 188,r24
645 .L37:
646 04b6 8091 0000 lds r24,missing_motor.0
647 04ba 8093 0000 sts MissingMotor,r24
648 04be 1092 0000 sts missing_motor.0,__zero_reg__
649 04c2 00C0 rjmp .L9
650 .L50:
651 04c4 E091 0000 lds r30,pBuff.2
652 04c8 F091 0000 lds r31,(pBuff.2)+1
653 04cc 8091 BB00 lds r24,187
654 04d0 8083 st Z,r24
655 04d2 8091 0000 lds r24,pBuff.2
656 04d6 9091 0000 lds r25,(pBuff.2)+1
657 04da 0196 adiw r24,1
658 04dc 9093 0000 sts (pBuff.2)+1,r25
659 04e0 8093 0000 sts pBuff.2,r24
660 04e4 8091 0000 lds r24,BuffLen.3
661 04e8 8150 subi r24,lo8(-(-1))
662 04ea 8093 0000 sts BuffLen.3,r24
663 04ee 8230 cpi r24,lo8(2)
664 04f0 00F0 brlo .L51
665 04f2 85EC ldi r24,lo8(-59)
666 04f4 00C0 rjmp .L79
667 .L51:
668 04f6 8130 cpi r24,lo8(1)
669 04f8 01F4 brne .L53
670 04fa 85E8 ldi r24,lo8(-123)
671 04fc 00C0 rjmp .L79
672 .L53:
673 04fe 8091 0000 lds r24,BLFlags
674 0502 81FF sbrs r24,1
675 0504 00C0 rjmp .L55
676 0506 8091 0000 lds r24,FC_StatusFlags
677 050a 80FD sbrc r24,0
678 050c 00C0 rjmp .L56
679 050e 8091 0000 lds r24,motor_read
680 0512 E82F mov r30,r24
681 0514 FF27 clr r31
682 0516 23E0 ldi r18,3
683 0518 EE0F 1: lsl r30
684 051a FF1F rol r31
685 051c 2A95 dec r18
686 051e 01F4 brne 1b
687 0520 E050 subi r30,lo8(-(Motor))
688 0522 F040 sbci r31,hi8(-(Motor))
689 0524 8681 ldd r24,Z+6
690 0526 8A3F cpi r24,lo8(-6)
691 0528 01F4 brne .L56
692 052a 8091 0000 lds r24,motor_read
693 052e E82F mov r30,r24
694 0530 FF27 clr r31
695 0532 93E0 ldi r25,3
696 0534 EE0F 1: lsl r30
697 0536 FF1F rol r31
698 0538 9A95 dec r25
699 053a 01F4 brne 1b
700 053c E050 subi r30,lo8(-(Motor))
701 053e F040 sbci r31,hi8(-(Motor))
702 0540 8081 ld r24,Z
703 0542 8160 ori r24,lo8(1)
704 0544 8083 st Z,r24
705 0546 00C0 rjmp .L55
706 .L56:
707 0548 8091 0000 lds r24,motor_read
708 054c E82F mov r30,r24
709 054e FF27 clr r31
710 0550 83E0 ldi r24,3
711 0552 EE0F 1: lsl r30
712 0554 FF1F rol r31
713 0556 8A95 dec r24
714 0558 01F4 brne 1b
715 055a E050 subi r30,lo8(-(Motor))
716 055c F040 sbci r31,hi8(-(Motor))
717 055e 1082 st Z,__zero_reg__
718 .L55:
719 0560 8091 0000 lds r24,motor_read
720 0564 8F5F subi r24,lo8(-(1))
721 0566 8093 0000 sts motor_read,r24
722 056a 8091 0000 lds r24,motor_read
723 056e 8C30 cpi r24,lo8(12)
724 0570 00F0 brlo .L58
725 0572 1092 0000 sts motor_read,__zero_reg__
726 0576 1092 0000 sts (BLConfig_ReadMask)+1,__zero_reg__
727 057a 1092 0000 sts BLConfig_ReadMask,__zero_reg__
728 057e 8091 0000 lds r24,motor_read_temperature.1
729 0582 8F5F subi r24,lo8(-(1))
730 0584 8093 0000 sts motor_read_temperature.1,r24
731 0588 8C30 cpi r24,lo8(12)
732 058a 00F0 brlo .L58
733 058c 1092 0000 sts motor_read_temperature.1,__zero_reg__
734 0590 8091 0000 lds r24,BLFlags
735 0594 8D7F andi r24,lo8(-3)
736 0596 8093 0000 sts BLFlags,r24
737 .L58:
738 059a 1092 0000 sts twi_state,__zero_reg__
739 059e 84E9 ldi r24,lo8(-108)
740 05a0 8093 BC00 sts 188,r24
741 05a4 8091 0000 lds r24,BLFlags
742 05a8 8160 ori r24,lo8(1)
743 05aa 8093 0000 sts BLFlags,r24
744 05ae 00C0 rjmp .L81
745 .L79:
746 05b0 8093 BC00 sts 188,r24
747 05b4 86E0 ldi r24,lo8(6)
748 .L82:
749 05b6 8093 0000 sts twi_state,r24
750 05ba 00C0 rjmp .L9
751 .L60:
752 05bc 88E9 ldi r24,lo8(-104)
753 05be 00C0 rjmp .L84
754 .L61:
755 05c0 8091 0000 lds r24,dac_channel
756 05c4 880F lsl r24
757 05c6 805F subi r24,lo8(-(16))
758 05c8 00C0 rjmp .L84
759 .L62:
760 05ca 8091 0000 lds r24,dac_channel
761 05ce 9927 clr r25
762 05d0 8130 cpi r24,1
763 05d2 9105 cpc r25,__zero_reg__
764 05d4 01F0 breq .L65
765 05d6 8230 cpi r24,2
766 05d8 9105 cpc r25,__zero_reg__
767 05da 04F4 brge .L67
768 05dc 892B or r24,r25
769 05de 01F0 breq .L64
770 05e0 00C0 rjmp .L9
771 .L67:
772 05e2 0297 sbiw r24,2
773 05e4 01F0 breq .L66
774 05e6 00C0 rjmp .L9
775 .L64:
776 05e8 8091 0000 lds r24,AnalogOffsetNick
777 05ec 00C0 rjmp .L84
778 .L65:
779 05ee 8091 0000 lds r24,AnalogOffsetRoll
780 05f2 00C0 rjmp .L84
781 .L66:
782 05f4 8091 0000 lds r24,AnalogOffsetGier
783 05f8 00C0 rjmp .L84
784 .L68:
785 05fa 80E8 ldi r24,lo8(-128)
786 05fc 00C0 rjmp .L84
787 .L69:
788 05fe 1092 0000 sts twi_state,__zero_reg__
789 0602 84E9 ldi r24,lo8(-108)
790 0604 8093 BC00 sts 188,r24
791 0608 1092 0000 sts I2C_TransferActive,__zero_reg__
792 060c 8AE0 ldi r24,lo8(10)
793 060e 90E0 ldi r25,hi8(10)
794 0610 9093 0000 sts (I2CTimeout)+1,r25
795 0614 8093 0000 sts I2CTimeout,r24
796 0618 8091 0000 lds r24,dac_channel
797 061c 8230 cpi r24,lo8(2)
798 061e 00F4 brsh .L70
799 0620 8091 0000 lds r24,dac_channel
800 0624 8F5F subi r24,lo8(-(1))
801 0626 8093 0000 sts dac_channel,r24
802 062a 82E1 ldi r24,lo8(18)
803 062c 8093 0000 sts twi_state,r24
804 .L85:
805 0630 8091 0000 lds r24,BLFlags
806 0634 8E7F andi r24,lo8(-2)
807 0636 8093 0000 sts BLFlags,r24
808 063a 85EA ldi r24,lo8(-91)
809 .L80:
810 063c 8093 BC00 sts 188,r24
811 0640 00C0 rjmp .L9
812 .L70:
813 0642 1092 0000 sts dac_channel,__zero_reg__
814 0646 8091 0000 lds r24,BLFlags
815 064a 8160 ori r24,lo8(1)
816 064c 8093 0000 sts BLFlags,r24
817 0650 00C0 rjmp .L9
818 .L72:
819 0652 1092 0000 sts twi_state,__zero_reg__
820 0656 84E9 ldi r24,lo8(-108)
821 0658 8093 BC00 sts 188,r24
822 065c 8091 0000 lds r24,BLFlags
823 0660 8160 ori r24,lo8(1)
824 0662 8093 0000 sts BLFlags,r24
825 0666 8AE0 ldi r24,lo8(10)
826 0668 90E0 ldi r25,hi8(10)
827 066a 9093 0000 sts (I2CTimeout)+1,r25
828 066e 8093 0000 sts I2CTimeout,r24
829 0672 1092 0000 sts motor_write,__zero_reg__
830 0676 1092 0000 sts motor_read,__zero_reg__
831 .L81:
832 067a 1092 0000 sts I2C_TransferActive,__zero_reg__
833 .L9:
834 /* epilogue: frame size=0 */
835 067e FF91 pop r31
836 0680 EF91 pop r30
837 0682 9F91 pop r25
838 0684 8F91 pop r24
839 0686 5F91 pop r21
840 0688 4F91 pop r20
841 068a 3F91 pop r19
842 068c 2F91 pop r18
843 068e 0F90 pop __tmp_reg__
844 0690 0FBE out __SREG__,__tmp_reg__
845 0692 0F90 pop __tmp_reg__
846 0694 1F90 pop __zero_reg__
847 0696 1895 reti
848 /* epilogue end (size=13) */
849 /* function __vector_26 size 796 (770) */
851 .global I2C_WriteBLConfig
853 I2C_WriteBLConfig:
854 /* prologue: frame size=0 */
855 0698 1F93 push r17
856 069a CF93 push r28
857 069c DF93 push r29
858 /* prologue end (size=3) */
859 069e 182F mov r17,r24
860 06a0 8091 0000 lds r24,MotorenEin
861 06a4 8823 tst r24
862 06a6 01F4 brne .L88
863 06a8 8091 0000 lds r24,PC_MotortestActive
864 06ac 8823 tst r24
865 06ae 01F0 breq .L87
866 .L88:
867 06b0 81E0 ldi r24,lo8(1)
868 06b2 90E0 ldi r25,hi8(1)
869 06b4 00C0 rjmp .L86
870 .L87:
871 06b6 1D30 cpi r17,lo8(13)
872 06b8 00F0 brlo .+2
873 06ba 00C0 rjmp .L115
874 06bc 1123 tst r17
875 06be 01F0 breq .L90
876 06c0 E12F mov r30,r17
877 06c2 FF27 clr r31
878 06c4 23E0 ldi r18,3
879 06c6 EE0F 1: lsl r30
880 06c8 FF1F rol r31
881 06ca 2A95 dec r18
882 06cc 01F4 brne 1b
883 06ce E050 subi r30,lo8(-(Motor))
884 06d0 F040 sbci r31,hi8(-(Motor))
885 06d2 3597 sbiw r30,5
886 06d4 8081 ld r24,Z
887 06d6 3596 adiw r30,5
888 06d8 8823 tst r24
889 06da 04F0 brlt .+2
890 06dc 00C0 rjmp .L115
891 06de 3897 sbiw r30,8
892 06e0 8081 ld r24,Z
893 06e2 80FD sbrc r24,0
894 06e4 00C0 rjmp .L90
895 06e6 83E0 ldi r24,lo8(3)
896 06e8 90E0 ldi r25,hi8(3)
897 06ea 00C0 rjmp .L86
898 .L90:
899 06ec 8091 0000 lds r24,BLConfig
900 06f0 8230 cpi r24,lo8(2)
901 06f2 01F0 breq .L93
902 06f4 84E0 ldi r24,lo8(4)
903 06f6 90E0 ldi r25,hi8(4)
904 06f8 00C0 rjmp .L86
905 .L93:
906 06fa 67E0 ldi r22,lo8(7)
907 06fc 70E0 ldi r23,hi8(7)
908 06fe 80E0 ldi r24,lo8(BLConfig)
909 0700 90E0 ldi r25,hi8(BLConfig)
910 0702 0E94 0000 call RAM_Checksum
911 0706 9091 0000 lds r25,BLConfig+7
912 070a 8917 cp r24,r25
913 070c 01F0 breq .L94
914 070e 85E0 ldi r24,lo8(5)
915 0710 90E0 ldi r25,hi8(5)
916 0712 00C0 rjmp .L86
917 .L94:
918 0714 80ED ldi r24,lo8(2000)
919 0716 97E0 ldi r25,hi8(2000)
920 0718 0E94 0000 call SetDelay
921 071c EC01 movw r28,r24
922 .L95:
923 071e 8091 0000 lds r24,BLFlags
924 0722 80FD sbrc r24,0
925 0724 00C0 rjmp .L96
926 0726 CE01 movw r24,r28
927 0728 0E94 0000 call CheckDelay
928 072c 8823 tst r24
929 072e 01F0 breq .L95
930 .L96:
931 0730 1123 tst r17
932 0732 01F4 brne .L98
933 0734 8FEF ldi r24,lo8(255)
934 0736 90E0 ldi r25,hi8(255)
935 0738 00C0 rjmp .L114
936 .L98:
937 073a 212F mov r18,r17
938 073c 3327 clr r19
939 073e 2150 subi r18,lo8(-(-1))
940 0740 3040 sbci r19,hi8(-(-1))
941 0742 81E0 ldi r24,lo8(1)
942 0744 90E0 ldi r25,hi8(1)
943 0746 00C0 rjmp 2f
944 0748 880F 1: lsl r24
945 074a 991F rol r25
946 074c 2A95 2: dec r18
947 074e 02F4 brpl 1b
948 .L114:
949 0750 9093 0000 sts (BLConfig_WriteMask)+1,r25
950 0754 8093 0000 sts BLConfig_WriteMask,r24
951 0758 A1E0 ldi r26,lo8(1)
952 075a B0E0 ldi r27,hi8(1)
953 075c E0E0 ldi r30,lo8(Motor)
954 075e F0E0 ldi r31,hi8(Motor)
955 0760 40E0 ldi r20,lo8(0)
956 0762 50E0 ldi r21,hi8(0)
957 0764 6BE0 ldi r22,lo8(11)
958 .L104:
959 0766 CD01 movw r24,r26
960 0768 042E mov r0,r20
961 076a 00C0 rjmp 2f
962 076c 880F 1: lsl r24
963 076e 991F rol r25
964 0770 0A94 2: dec r0
965 0772 02F4 brpl 1b
966 0774 2091 0000 lds r18,BLConfig_WriteMask
967 0778 3091 0000 lds r19,(BLConfig_WriteMask)+1
968 077c 8223 and r24,r18
969 077e 9323 and r25,r19
970 0780 892B or r24,r25
971 0782 01F0 breq .L102
972 0784 1182 std Z+1,__zero_reg__
973 0786 1282 std Z+2,__zero_reg__
974 .L102:
975 0788 6150 subi r22,lo8(-(-1))
976 078a 4F5F subi r20,lo8(-(1))
977 078c 5F4F sbci r21,hi8(-(1))
978 078e 3896 adiw r30,8
979 0790 67FF sbrs r22,7
980 0792 00C0 rjmp .L104
981 0794 1092 0000 sts motor_write,__zero_reg__
982 .L105:
983 0798 1092 0000 sts twi_state,__zero_reg__
984 079c 8091 0000 lds r24,BLFlags
985 07a0 8E7F andi r24,lo8(-2)
986 07a2 8093 0000 sts BLFlags,r24
987 07a6 85EA ldi r24,lo8(-91)
988 07a8 8093 BC00 sts 188,r24
989 .L108:
990 07ac 8091 0000 lds r24,BLFlags
991 07b0 80FD sbrc r24,0
992 07b2 00C0 rjmp .L109
993 07b4 CE01 movw r24,r28
994 07b6 0E94 0000 call CheckDelay
995 07ba 8823 tst r24
996 07bc 01F0 breq .L108
997 .L109:
998 07be 8091 0000 lds r24,BLConfig_WriteMask
999 07c2 9091 0000 lds r25,(BLConfig_WriteMask)+1
1000 07c6 892B or r24,r25
1001 07c8 01F0 breq .L106
1002 07ca CE01 movw r24,r28
1003 07cc 0E94 0000 call CheckDelay
1004 07d0 8823 tst r24
1005 07d2 01F0 breq .L105
1006 .L106:
1007 07d4 8091 0000 lds r24,BLConfig_WriteMask
1008 07d8 9091 0000 lds r25,(BLConfig_WriteMask)+1
1009 07dc 0097 sbiw r24,0
1010 07de 01F0 breq .L86
1011 .L115:
1012 07e0 82E0 ldi r24,lo8(2)
1013 07e2 90E0 ldi r25,hi8(2)
1014 .L86:
1015 /* epilogue: frame size=0 */
1016 07e4 DF91 pop r29
1017 07e6 CF91 pop r28
1018 07e8 1F91 pop r17
1019 07ea 0895 ret
1020 /* epilogue end (size=4) */
1021 /* function I2C_WriteBLConfig size 172 (165) */
1023 .global I2C_ReadBLConfig
1025 I2C_ReadBLConfig:
1026 /* prologue: frame size=0 */
1027 07ec 0F93 push r16
1028 07ee 1F93 push r17
1029 07f0 CF93 push r28
1030 07f2 DF93 push r29
1031 /* prologue end (size=4) */
1032 07f4 982F mov r25,r24
1033 07f6 8091 0000 lds r24,MotorenEin
1034 07fa 8823 tst r24
1035 07fc 01F4 brne .L118
1036 07fe 8091 0000 lds r24,PC_MotortestActive
1037 0802 8823 tst r24
1038 0804 01F0 breq .L117
1039 .L118:
1040 0806 81E0 ldi r24,lo8(1)
1041 0808 90E0 ldi r25,hi8(1)
1042 080a 00C0 rjmp .L116
1043 .L117:
1044 080c 9D30 cpi r25,lo8(13)
1045 080e 00F4 brsh .L141
1046 0810 9923 tst r25
1047 0812 01F4 brne .L120
1048 0814 86E0 ldi r24,lo8(6)
1049 0816 90E0 ldi r25,hi8(6)
1050 0818 00C0 rjmp .L116
1051 .L120:
1052 081a C92F mov r28,r25
1053 081c DD27 clr r29
1054 081e FE01 movw r30,r28
1055 0820 33E0 ldi r19,3
1056 0822 EE0F 1: lsl r30
1057 0824 FF1F rol r31
1058 0826 3A95 dec r19
1059 0828 01F4 brne 1b
1060 082a E050 subi r30,lo8(-(Motor))
1061 082c F040 sbci r31,hi8(-(Motor))
1062 082e 3597 sbiw r30,5
1063 0830 8081 ld r24,Z
1064 0832 3596 adiw r30,5
1065 0834 87FD sbrc r24,7
1066 0836 00C0 rjmp .L121
1067 .L141:
1068 0838 82E0 ldi r24,lo8(2)
1069 083a 90E0 ldi r25,hi8(2)
1070 083c 00C0 rjmp .L116
1071 .L121:
1072 083e 3897 sbiw r30,8
1073 0840 8081 ld r24,Z
1074 0842 80FD sbrc r24,0
1075 0844 00C0 rjmp .L122
1076 0846 83E0 ldi r24,lo8(3)
1077 0848 90E0 ldi r25,hi8(3)
1078 084a 00C0 rjmp .L116
1079 .L122:
1080 084c 80ED ldi r24,lo8(2000)
1081 084e 97E0 ldi r25,hi8(2000)
1082 0850 0E94 0000 call SetDelay
1083 0854 8C01 movw r16,r24
1084 .L123:
1085 0856 8091 0000 lds r24,BLFlags
1086 085a 80FD sbrc r24,0
1087 085c 00C0 rjmp .L124
1088 085e C801 movw r24,r16
1089 0860 0E94 0000 call CheckDelay
1090 0864 8823 tst r24
1091 0866 01F0 breq .L123
1092 .L124:
1093 0868 2197 sbiw r28,1
1094 086a 21E0 ldi r18,lo8(1)
1095 086c 30E0 ldi r19,hi8(1)
1096 086e C901 movw r24,r18
1097 0870 00C0 rjmp 2f
1098 0872 880F 1: lsl r24
1099 0874 991F rol r25
1100 0876 CA95 2: dec r28
1101 0878 02F4 brpl 1b
1102 087a 9093 0000 sts (BLConfig_ReadMask)+1,r25
1103 087e 8093 0000 sts BLConfig_ReadMask,r24
1104 0882 D901 movw r26,r18
1105 0884 E0E0 ldi r30,lo8(Motor)
1106 0886 F0E0 ldi r31,hi8(Motor)
1107 0888 40E0 ldi r20,lo8(0)
1108 088a 50E0 ldi r21,hi8(0)
1109 088c 6BE0 ldi r22,lo8(11)
1110 .L130:
1111 088e CD01 movw r24,r26
1112 0890 042E mov r0,r20
1113 0892 00C0 rjmp 2f
1114 0894 880F 1: lsl r24
1115 0896 991F rol r25
1116 0898 0A94 2: dec r0
1117 089a 02F4 brpl 1b
1118 089c 2091 0000 lds r18,BLConfig_ReadMask
1119 08a0 3091 0000 lds r19,(BLConfig_ReadMask)+1
1120 08a4 8223 and r24,r18
1121 08a6 9323 and r25,r19
1122 08a8 892B or r24,r25
1123 08aa 01F0 breq .L128
1124 08ac 1182 std Z+1,__zero_reg__
1125 08ae 1282 std Z+2,__zero_reg__
1126 .L128:
1127 08b0 6150 subi r22,lo8(-(-1))
1128 08b2 4F5F subi r20,lo8(-(1))
1129 08b4 5F4F sbci r21,hi8(-(1))
1130 08b6 3896 adiw r30,8
1131 08b8 67FF sbrs r22,7
1132 08ba 00C0 rjmp .L130
1133 08bc 1092 0000 sts motor_read,__zero_reg__
1134 08c0 1092 0000 sts BLConfig,__zero_reg__
1135 08c4 1092 0000 sts BLConfig+7,__zero_reg__
1136 .L131:
1137 08c8 1092 0000 sts twi_state,__zero_reg__
1138 08cc 8091 0000 lds r24,BLFlags
1139 08d0 8E7F andi r24,lo8(-2)
1140 08d2 8093 0000 sts BLFlags,r24
1141 08d6 85EA ldi r24,lo8(-91)
1142 08d8 8093 BC00 sts 188,r24
1143 .L134:
1144 08dc 8091 0000 lds r24,BLFlags
1145 08e0 80FD sbrc r24,0
1146 08e2 00C0 rjmp .L135
1147 08e4 C801 movw r24,r16
1148 08e6 0E94 0000 call CheckDelay
1149 08ea 8823 tst r24
1150 08ec 01F0 breq .L134
1151 .L135:
1152 08ee 8091 0000 lds r24,BLConfig_ReadMask
1153 08f2 9091 0000 lds r25,(BLConfig_ReadMask)+1
1154 08f6 892B or r24,r25
1155 08f8 01F0 breq .L132
1156 08fa C801 movw r24,r16
1157 08fc 0E94 0000 call CheckDelay
1158 0900 8823 tst r24
1159 0902 01F0 breq .L131
1160 .L132:
1161 0904 8091 0000 lds r24,BLConfig
1162 0908 8230 cpi r24,lo8(2)
1163 090a 01F0 breq .L137
1164 090c 84E0 ldi r24,lo8(4)
1165 090e 90E0 ldi r25,hi8(4)
1166 0910 00C0 rjmp .L116
1167 .L137:
1168 0912 67E0 ldi r22,lo8(7)
1169 0914 70E0 ldi r23,hi8(7)
1170 0916 80E0 ldi r24,lo8(BLConfig)
1171 0918 90E0 ldi r25,hi8(BLConfig)
1172 091a 0E94 0000 call RAM_Checksum
1173 091e 9091 0000 lds r25,BLConfig+7
1174 0922 8917 cp r24,r25
1175 0924 01F0 breq .L138
1176 0926 85E0 ldi r24,lo8(5)
1177 0928 90E0 ldi r25,hi8(5)
1178 092a 00C0 rjmp .L116
1179 .L138:
1180 092c 80E0 ldi r24,lo8(0)
1181 092e 90E0 ldi r25,hi8(0)
1182 .L116:
1183 /* epilogue: frame size=0 */
1184 0930 DF91 pop r29
1185 0932 CF91 pop r28
1186 0934 1F91 pop r17
1187 0936 0F91 pop r16
1188 0938 0895 ret
1189 /* epilogue end (size=5) */
1190 /* function I2C_ReadBLConfig size 168 (159) */
1192 .comm Motor,96,1
1193 .comm BLConfig,8,1
1194 /* File "twimaster.c": code 1214 = 0x04be (1170), prologues 20, epilogues 24 */
DEFINED SYMBOLS
*ABS*:00000000 twimaster.c
C:\Temp/ccpR2Iud.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccpR2Iud.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccpR2Iud.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccpR2Iud.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccpR2Iud.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccpR2Iud.s:15 .bss:00000000 BLConfig_ReadMask
C:\Temp/ccpR2Iud.s:21 .bss:00000002 BLConfig_WriteMask
C:\Temp/ccpR2Iud.s:27 .bss:00000004 BLFlags
C:\Temp/ccpR2Iud.s:33 .bss:00000005 MissingMotor
C:\Temp/ccpR2Iud.s:39 .data:00000000 I2CTimeout
C:\Temp/ccpR2Iud.s:46 .bss:00000006 I2C_TransferActive
C:\Temp/ccpR2Iud.s:52 .bss:00000007 motor_read
C:\Temp/ccpR2Iud.s:58 .bss:00000008 motor_write
C:\Temp/ccpR2Iud.s:64 .bss:00000009 dac_channel
C:\Temp/ccpR2Iud.s:70 .bss:0000000a twi_state
C:\Temp/ccpR2Iud.s:75 .text:00000000 I2C_Init
*COM*:00000060 Motor
C:\Temp/ccpR2Iud.s:126 .text:00000054 I2C_Reset
.bss:0000000b missing_motor.0
C:\Temp/ccpR2Iud.s:153 .bss:0000000c motor_read_temperature.1
C:\Temp/ccpR2Iud.s:154 .bss:0000000d pBuff.2
C:\Temp/ccpR2Iud.s:155 .bss:0000000f BuffLen.3
C:\Temp/ccpR2Iud.s:159 .text:00000098 __vector_26
*COM*:00000008 BLConfig
C:\Temp/ccpR2Iud.s:853 .text:00000698 I2C_WriteBLConfig
C:\Temp/ccpR2Iud.s:1025 .text:000007ec I2C_ReadBLConfig
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__tablejump2__
Mixer
RequiredMotors
FC_StatusFlags
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
MotorenEin
PC_MotortestActive
RAM_Checksum
SetDelay
CheckDelay
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/uart.c
0,0 → 1,795
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include <stdarg.h>
#include <string.h>
#include <avr/pgmspace.h>
#include "main.h"
#include "uart.h"
#include "libfc.h"
#include "eeprom.h"
 
#define FC_ADDRESS 1
#define NC_ADDRESS 2
#define MK3MAG_ADDRESS 3
#define BL_CTRL_ADDRESS 5
 
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
#define MAX_SENDE_BUFF 175
#define MAX_EMPFANGS_BUFF 175
 
#define BLPARAM_REVISION 1
#define MASK_SET_PWM_SCALING 0x01
#define MASK_SET_CURRENT_LIMIT 0x02
#define MASK_SET_TEMP_LIMIT 0x04
#define MASK_SET_CURRENT_SCALING 0x08
#define MASK_SET_BITCONFIG 0x10
#define MASK_RESET_CAPCOUNTER 0x20
#define MASK_SET_DEFAULT_PARAMS 0x40
#define MASK_SET_SAVE_EEPROM 0x80
 
unsigned char GetExternalControl = 0,DebugDisplayAnforderung1 = 0, DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0, GetPPMChannelAnforderung = 0;
unsigned char DisplayLine = 0;
unsigned volatile char SioTmp = 0;
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 TxdBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
 
unsigned char *pRxData = 0;
unsigned char RxDataLen = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned volatile char PC_MotortestActive = 0;
unsigned char DebugTextAnforderung = 255;
 
unsigned char PcZugriff = 100;
unsigned char MotorTest[16];
unsigned char MeineSlaveAdresse = 1; // Flight-Ctrl
unsigned char ConfirmFrame;
struct str_DebugOut DebugOut;
struct str_ExternControl ExternControl;
struct str_VersionInfo VersionInfo;
struct str_WinkelOut WinkelOut;
struct str_Data3D Data3D;
 
int Display_Timer, Debug_Timer,Kompass_Timer,Timer3D;
unsigned int DebugDataIntervall = 0, Intervall3D = 0, Display_Interval = 0;
unsigned int AboTimeOut = 0;
unsigned volatile char ReceiverUpdateModeActive = 0; // 1 = Update 2 = JetiBox-Simulation
 
const unsigned char ANALOG_TEXT[32][16] PROGMEM =
{
//1234567890123456
"AngleNick ", //0
"AngleRoll ", //1
"AccNick ", //2
"AccRoll ", //3
"Hight Setpoint ", //4
"Height Value ", //5
"Compass Setpoint", //6
"Compass Value ", //7
"Current [0.1A] ", //8
"Voltage [0.1V] ", //9
"Motor 1 ", //10
"Motor 2 ", //11
"Motor 3 ", //12
"Motor 4 ", //13
"Motor 5 ", //14
"Motor 6 ", //15
"Receiver Level ", //16
"Gyro Compass ", //17
"YawGyro ", //18
"... ", //19
"Servo ", //20
"Hovergas ", //21
"... ", //22
"Capacity [mAh] ", //23
"BL Limit ", //24
"... ", //25
"... ", //26
"... ", //27
"AccZ ", //28
"... ", //29
"GPS_Nick ", //30
"GPS_Roll "
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ISR(USART0_TX_vect)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
 
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = TxdBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR0 = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ISR(USART0_RX_vect)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation
 
SioTmp = UDR0;
 
if(buf_ptr >= MAX_SENDE_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 + 1;
RxdBuffer[buf_ptr] = '\r';
if(RxdBuffer[2] == 'R')
{
LcdClear();
wdt_enable(WDTO_250MS); // Reset-Commando
ServoActive = 0;
}
 
}
}
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 += TxdBuffer[i];
}
tmpCRC %= 4096;
TxdBuffer[i++] = '=' + tmpCRC / 64;
TxdBuffer[i++] = '=' + tmpCRC % 64;
TxdBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR0 = TxdBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len)
{
va_list ap;
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
unsigned char *snd = 0;
int len = 0;
 
TxdBuffer[pt++] = '#'; // Startzeichen
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...)
TxdBuffer[pt++] = cmd; // Commando
 
va_start(ap, BufferAnzahl);
if(BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
while(len)
{
if(len)
{
a = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else a = 0;
if(len)
{
b = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else b = 0;
if(len)
{
c = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else c = 0;
TxdBuffer[pt++] = '=' + (a >> 2);
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TxdBuffer[pt++] = '=' + ( c & 0x3f);
}
va_end(ap);
AddCRC(pt);
}
 
// --------------------------------------------------------------------------
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden.
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 3;
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
 
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) RxdBuffer[ptrOut++] = x; else break;
if(len--) RxdBuffer[ptrOut++] = y; else break;
if(len--) RxdBuffer[ptrOut++] = z; else break;
}
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert?
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned char tempchar1, tempchar2;
Decode64(); // dekodiere datenblock im Empfangsbuffer
switch(RxdBuffer[1]-'a') // check for Slave Address
{
case FC_ADDRESS: // FC special commands
switch(RxdBuffer[2])
{
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
case 't':// Motortest
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest));
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4);
PC_MotortestActive = 240;
//while(!UebertragungAbgeschlossen);
//SendOutData('T', MeineSlaveAdresse, 0);
PcZugriff = 255;
break;
 
case 'n':// "Get Mixer
while(!UebertragungAbgeschlossen);
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1);
Debug("Mixer lesen");
break;
 
case 'm':// "Write Mixer
if(pRxData[0] == EEMIXER_REVISION)
{
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1);
MixerTable_WriteToEEProm();
tempchar1 = 1;
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER;
}
else
{
tempchar1 = 0;
}
while(!UebertragungAbgeschlossen);
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
break;
 
case 'p': // get PPM Channels
GetPPMChannelAnforderung = 1;
PcZugriff = 255;
break;
 
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
if((10 <= pRxData[0]) && (pRxData[0] < 20))
{
tempchar1 = pRxData[0] - 10;
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
SetDefaultParameter(tempchar1, 1);
}
else if((20 <= pRxData[0]) && (pRxData[0] < 30))
{
tempchar1 = pRxData[0] - 20;
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
SetDefaultParameter(tempchar1, 0);
}
else
{
tempchar1 = pRxData[0];
if(tempchar1 == 0xFF)
{
tempchar1 = GetActiveParamSet();
}
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
// load requested parameter set
ParamSet_ReadFromEEProm(tempchar1);
}
while(!UebertragungAbgeschlossen);
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1);
Debug("Lese Setting %d", tempchar1);
 
break;
 
case 's': // Parametersatz speichern
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range
{
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1);
ParamSet_WriteToEEProm(pRxData[0]);
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
tempchar1 = GetActiveParamSet();
}
else
{
tempchar1 = 0; // mark in response an invlid setting
}
while(!UebertragungAbgeschlossen);
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
if(!MotorenEin) Piep(tempchar1,110);
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
break;
case 'f': // auf anderen Parametersatz umschalten
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]);
tempchar1 = GetActiveParamSet();
while(!UebertragungAbgeschlossen);
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
if(!MotorenEin) Piep(tempchar1,110);
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
break;
case 'y':// serial Potis
PPM_in[13] = (signed char) pRxData[0]; PPM_in[14] = (signed char) pRxData[1]; PPM_in[15] = (signed char) pRxData[2]; PPM_in[16] = (signed char) pRxData[3];
PPM_in[17] = (signed char) pRxData[4]; PPM_in[18] = (signed char) pRxData[5]; PPM_in[19] = (signed char) pRxData[6]; PPM_in[20] = (signed char) pRxData[7];
PPM_in[21] = (signed char) pRxData[8]; PPM_in[22] = (signed char) pRxData[9]; PPM_in[23] = (signed char) pRxData[10]; PPM_in[24] = (signed char) pRxData[11];
break;
 
case 'u': // request BL parameter
Debug("Reading BL %d", pRxData[0]);
// try to read BL configuration
tempchar2 = I2C_ReadBLConfig(pRxData[0]);
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1;
else tempchar1 = 0;
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t));
break;
 
case 'w': // write BL parameter
Debug("Writing BL %d", pRxData[0]);
if(RxDataLen >= 1+sizeof(BLConfig_t))
{
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t));
tempchar2 = I2C_WriteBLConfig(pRxData[0]);
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1;
else tempchar1 = 0; // indicate error
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2));
}
break;
case 'j':
if(MotorenEin) break;
tempchar1 = LIBFC_GetCPUType();
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P))
{
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1);
 
cli();
 
// UART0 & UART1 disable RX and TX-Interrupt
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0));
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1));
 
// UART0 & UART1 disable receiver and transmitter
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0));
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1));
 
// UART0 & UART1 flush receive buffer explicit
while ( UCSR1A & (1<<RXC1) ) UDR1;
while ( UCSR0A & (1<<RXC0) ) UDR0;
 
 
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2;
else
{ // Jeti or HoTT update
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT
//#endif
ReceiverUpdateModeActive = 1;
// UART0 & UART1 set baudrate
UBRR1H = (uint8_t)(ubrr>>8);
UBRR1L = (uint8_t)ubrr;
UBRR0H = UBRR1H;
UBRR0L = UBRR1L;
// UART1 no parity
UCSR1C &= ~(1 << UPM11);
UCSR1C &= ~(1 << UPM10);
// UART1 8-bit
UCSR1B &= ~(1 << UCSZ12);
UCSR1C |= (1 << UCSZ11);
UCSR1C |= (1 << UCSZ10);
}
// UART0 & UART1 1 stop bit
UCSR1C &= ~(1 << USBS1);
UCSR0C &= ~(1 << USBS0);
// UART1 clear 9th bit
UCSR1B &= ~(1<<TXB81);
// enable receiver and transmitter for UART0 and UART1
UCSR0B |= (1 << TXEN0) | (1 << RXEN0);
UCSR1B |= (1 << TXEN1) | (1 << RXEN1);
// enable RX-Interrupt for UART0 and UART1
UCSR0B |= (1 << RXCIE0);
UCSR1B |= (1 << RXCIE1);
// disable other Interrupts
TIMSK0 = 0;
TIMSK1 = 0;
TIMSK2 = 0;
 
sei();
}
break;
 
} // case FC_ADDRESS:
 
default: // any Slave Address
 
switch(RxdBuffer[2])
{
// 't' comand placed here only for compatibility to BL
case 't':// Motortest
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest));
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4);
while(!UebertragungAbgeschlossen);
SendOutData('T', MeineSlaveAdresse, 0);
PC_MotortestActive = 250;
PcZugriff = 255;
AboTimeOut = SetDelay(ABO_TIMEOUT);
break;
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
case 'a':// Texte der Analogwerte
DebugTextAnforderung = pRxData[0];
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31;
PcZugriff = 255;
break;
case 'b':
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl));
ConfirmFrame = ExternControl.Frame;
PcZugriff = 255;
break;
case 'c': // Poll the 3D-Data
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);}
Intervall3D = pRxData[0] * 10;
AboTimeOut = SetDelay(ABO_TIMEOUT);
break;
case 'd': // Poll the debug data
PcZugriff = 255;
DebugDataIntervall = (unsigned int)pRxData[0] * 10;
if(DebugDataIntervall > 0) DebugDataAnforderung = 1;
AboTimeOut = SetDelay(ABO_TIMEOUT);
break;
 
case 'h':// x-1 Displayzeilen
PcZugriff = 255;
if((pRxData[0] & 0x80) == 0x00) // old format
{
DisplayLine = 2;
Display_Interval = 0;
}
else // new format
{
RemoteKeys |= ~pRxData[0];
Display_Interval = (unsigned int)pRxData[1] * 10;
DisplayLine = 4;
AboTimeOut = SetDelay(ABO_TIMEOUT);
}
DebugDisplayAnforderung = 1;
break;
 
case 'l':// x-1 Displayzeilen
PcZugriff = 255;
MenuePunkt = pRxData[0];
DebugDisplayAnforderung1 = 1;
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
 
case 'g'://
GetExternalControl = 1;
break;
 
default:
//unsupported command received
break;
}
break; // default:
}
NeuerDatensatzEmpfangen = 0;
pRxData = 0;
RxDataLen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
void uart_putchar (char c)
//############################################################################
{
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(UCSR0A, UDRE0);
//Ausgabe des Zeichens
UDR0 = c;
}
 
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1);
 
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
UCSR0B = (1 << TXEN0) | (1 << RXEN0);
// UART Double Speed (U2X)
UCSR0A |= (1 << U2X0);
// RX-Interrupt Freigabe
UCSR0B |= (1 << RXCIE0);
// TX-Interrupt Freigabe
UCSR0B |= (1 << TXCIE0);
// USART0 Baud Rate Register
// set clock divider
UBRR0H = (uint8_t)(ubrr >> 8);
UBRR0L = (uint8_t)ubrr;
 
Debug_Timer = SetDelay(DebugDataIntervall);
Kompass_Timer = SetDelay(220);
 
VersionInfo.SWMajor = VERSION_MAJOR;
VersionInfo.SWMinor = VERSION_MINOR;
VersionInfo.SWPatch = VERSION_PATCH;
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR;
 
pRxData = 0;
RxDataLen = 0;
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
if(!UebertragungAbgeschlossen) return;
 
if(CheckDelay(AboTimeOut))
{
Display_Interval = 0;
DebugDataIntervall = 0;
Intervall3D = 0;
}
 
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen)
{
if(DisplayLine > 3)// new format
{
Menu();
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80);
}
else // old format
{
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!");
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20);
if(DisplayLine++ > 3) DisplayLine = 0;
}
Display_Timer = SetDelay(Display_Interval);
DebugDisplayAnforderung = 0;
}
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen)
{
Menu();
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff));
DebugDisplayAnforderung1 = 0;
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo));
GetVersionAnforderung = 0;
Debug_OK("Version gesendet");
}
 
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl));
GetExternalControl = 0;
}
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen)
{
WinkelOut.Winkel[0] = (int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
WinkelOut.Winkel[1] = (int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
WinkelOut.UserParameter[0] = Parameter_UserParam1;
WinkelOut.UserParameter[1] = Parameter_UserParam2;
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut));
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt
Kompass_Timer = SetDelay(99);
}
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
CopyDebugValues();
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall);
}
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen)
{
Data3D.Winkel[0] = (int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
Data3D.Winkel[1] = (int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR);
Data3D.Centroid[0] = SummeNick >> 9;
Data3D.Centroid[1] = SummeRoll >> 9;
Data3D.Centroid[2] = Mess_Integral_Gier >> 9;
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D));
Timer3D = SetDelay(Intervall3D);
}
if(DebugTextAnforderung != 255) // Texte für die Analogdaten
{
unsigned char label[16]; // local sram buffer
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16);
DebugTextAnforderung = 255;
}
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen
{
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame));
ConfirmFrame = 0;
}
 
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen)
{
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in));
GetPPMChannelAnforderung = 0;
}
 
#ifdef DEBUG // only include functions if DEBUG is defined
if(SendDebugOutput && UebertragungAbgeschlossen)
{
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
SendDebugOutput = 0;
}
#endif
 
}
 
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/uart.h
0,0 → 1,107
#ifndef _UART_H
#define _UART_H
 
#define printf_P(format, args...) _printf_P(&uart_putchar, format , ## args)
#define printf(format, args...) _printf_P(&uart_putchar, PSTR(format) , ## args)
 
void BearbeiteRxDaten(void);
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char ReceiverUpdateModeActive;
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned volatile char PC_MotortestActive;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern unsigned char RemotePollDisplayLine;
extern unsigned volatile char RxdBuffer[];
extern int Debug_Timer,Kompass_Timer;
extern void UART_Init (void);
extern void uart_putchar (char c);
//extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void Uart1Init(void);
extern void BearbeiteRxDaten(void);
extern unsigned char MotorTest[16];
struct str_DebugOut
{
unsigned char Status[2];
signed int Analog[32]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_WinkelOut
{
signed int Winkel[2];
unsigned char UserParameter[2];
unsigned char CalcState;
unsigned char Orientation;
};
extern struct str_WinkelOut WinkelOut;
 
struct str_Data3D
{
signed int Winkel[3]; // nick, roll, compass in 0,1°
signed char Centroid[3];
signed char reserve[5];
};
extern struct str_Data3D Data3D;
 
struct str_ExternControl
{
unsigned char Digital[2];
unsigned char RemoteTasten;
signed char Nick;
signed char Roll;
signed char Gier;
unsigned char Gas;
signed char Hight;
unsigned char free;
unsigned char Frame;
unsigned char Config;
};
extern struct str_ExternControl ExternControl;
 
// FC hardware errors
 
// bitmask for UART_VersionInfo_t.HardwareError[0]
#define FC_ERROR0_GYRO_NICK 0x01
#define FC_ERROR0_GYRO_ROLL 0x02
#define FC_ERROR0_GYRO_YAW 0x04
#define FC_ERROR0_ACC_NICK 0x08
#define FC_ERROR0_ACC_ROLL 0x10
#define FC_ERROR0_ACC_TOP 0x20
#define FC_ERROR0_PRESSURE 0x40
#define FC_ERROR0_CAREFREE 0x80
// bitmask for UART_VersionInfo_t.HardwareError[1]
#define FC_ERROR1_I2C 0x01
#define FC_ERROR1_BL_MISSING 0x02
#define FC_ERROR1_SPI_RX 0x04
#define FC_ERROR1_PPM 0x08
#define FC_ERROR1_MIXER 0x10
#define FC_ERROR1_RES1 0x20
#define FC_ERROR1_RES2 0x40
#define FC_ERROR1_RES3 0x80
 
struct str_VersionInfo
{
unsigned char SWMajor;
unsigned char SWMinor;
unsigned char ProtoMajor;
unsigned char ProtoMinor;
unsigned char SWPatch;
unsigned char HardwareError[5];
};
 
extern struct str_VersionInfo VersionInfo;
 
//#define USART0_BAUD 9600
//#define USART0_BAUD 14400
//#define USART0_BAUD 28800
//#define USART0_BAUD 38400
#define USART0_BAUD 57600
 
 
#endif //_UART_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/uart.lst
0,0 → 1,2665
1 .file "uart.c"
2 .arch atmega1284p
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 .global ANALOG_TEXT
11 .section .progmem.data,"a",@progbits
14 ANALOG_TEXT:
15 0000 416E 676C .ascii "AngleNick "
15 654E 6963
15 6B20 2020
15 2020 2020
16 0010 416E 676C .ascii "AngleRoll "
16 6552 6F6C
16 6C20 2020
16 2020 2020
17 0020 4163 634E .ascii "AccNick "
17 6963 6B20
17 2020 2020
17 2020 2020
18 0030 4163 6352 .ascii "AccRoll "
18 6F6C 6C20
18 2020 2020
18 2020 2020
19 0040 4869 6768 .ascii "Hight Setpoint "
19 7420 5365
19 7470 6F69
19 6E74 2020
20 0050 4865 6967 .ascii "Height Value "
20 6874 2056
20 616C 7565
20 2020 2020
21 0060 436F 6D70 .ascii "Compass Setpoint"
21 6173 7320
21 5365 7470
21 6F69 6E74
22 0070 436F 6D70 .ascii "Compass Value "
22 6173 7320
22 5661 6C75
22 6520 2020
23 0080 4375 7272 .ascii "Current [0.1A] "
23 656E 7420
23 5B30 2E31
23 415D 2020
24 0090 566F 6C74 .ascii "Voltage [0.1V] "
24 6167 6520
24 5B30 2E31
24 565D 2020
25 00a0 4D6F 746F .ascii "Motor 1 "
25 7220 3120
25 2020 2020
25 2020 2020
26 00b0 4D6F 746F .ascii "Motor 2 "
26 7220 3220
26 2020 2020
26 2020 2020
27 00c0 4D6F 746F .ascii "Motor 3 "
27 7220 3320
27 2020 2020
27 2020 2020
28 00d0 4D6F 746F .ascii "Motor 4 "
28 7220 3420
28 2020 2020
28 2020 2020
29 00e0 4D6F 746F .ascii "Motor 5 "
29 7220 3520
29 2020 2020
29 2020 2020
30 00f0 4D6F 746F .ascii "Motor 6 "
30 7220 3620
30 2020 2020
30 2020 2020
31 0100 5265 6365 .ascii "Receiver Level "
31 6976 6572
31 204C 6576
31 656C 2020
32 0110 4779 726F .ascii "Gyro Compass "
32 2043 6F6D
32 7061 7373
32 2020 2020
33 0120 5961 7747 .ascii "YawGyro "
33 7972 6F20
33 2020 2020
33 2020 2020
34 0130 2E2E 2E20 .ascii "... "
34 2020 2020
34 2020 2020
34 2020 2020
35 0140 5365 7276 .ascii "Servo "
35 6F20 2020
35 2020 2020
35 2020 2020
36 0150 486F 7665 .ascii "Hovergas "
36 7267 6173
36 2020 2020
36 2020 2020
37 0160 2E2E 2E20 .ascii "... "
37 2020 2020
37 2020 2020
37 2020 2020
38 0170 4361 7061 .ascii "Capacity [mAh] "
38 6369 7479
38 205B 6D41
38 685D 2020
39 0180 424C 204C .ascii "BL Limit "
39 696D 6974
39 2020 2020
39 2020 2020
40 0190 2E2E 2E20 .ascii "... "
40 2020 2020
40 2020 2020
40 2020 2020
41 01a0 2E2E 2E20 .ascii "... "
41 2020 2020
41 2020 2020
41 2020 2020
42 01b0 2E2E 2E20 .ascii "... "
42 2020 2020
42 2020 2020
42 2020 2020
43 01c0 4163 635A .ascii "AccZ "
43 2020 2020
43 2020 2020
43 2020 2020
44 01d0 2E2E 2E20 .ascii "... "
44 2020 2020
44 2020 2020
44 2020 2020
45 01e0 4750 535F .ascii "GPS_Nick "
45 4E69 636B
45 2020 2020
45 2020 2020
46 01f0 4750 535F .ascii "GPS_Roll "
46 526F 6C6C
46 2020 2020
46 2020 2020
47 .global ReceiverUpdateModeActive
48 .global ReceiverUpdateModeActive
49 .section .bss
52 ReceiverUpdateModeActive:
53 0000 00 .skip 1,0
54 .global AboTimeOut
55 .global AboTimeOut
58 AboTimeOut:
59 0001 0000 .skip 2,0
60 .global Display_Interval
61 .global Display_Interval
64 Display_Interval:
65 0003 0000 .skip 2,0
66 .global Intervall3D
67 .global Intervall3D
70 Intervall3D:
71 0005 0000 .skip 2,0
72 .global DebugDataIntervall
73 .global DebugDataIntervall
76 DebugDataIntervall:
77 0007 0000 .skip 2,0
78 .global MeineSlaveAdresse
79 .data
82 MeineSlaveAdresse:
83 0000 01 .byte 1
84 .global PcZugriff
87 PcZugriff:
88 0001 64 .byte 100
89 .global DebugTextAnforderung
92 DebugTextAnforderung:
93 0002 FF .byte -1
94 .global PC_MotortestActive
95 .global PC_MotortestActive
96 .section .bss
99 PC_MotortestActive:
100 0009 00 .skip 1,0
101 .global PC_DebugTimeout
102 .global PC_DebugTimeout
105 PC_DebugTimeout:
106 000a 00 .skip 1,0
107 .global RxDataLen
108 .global RxDataLen
111 RxDataLen:
112 000b 00 .skip 1,0
113 .global pRxData
114 .global pRxData
117 pRxData:
118 000c 0000 .skip 2,0
119 .global AnzahlEmpfangsBytes
120 .global AnzahlEmpfangsBytes
123 AnzahlEmpfangsBytes:
124 000e 00 .skip 1,0
125 .global CntCrcError
126 .global CntCrcError
129 CntCrcError:
130 000f 00 .skip 1,0
131 .global UebertragungAbgeschlossen
132 .data
135 UebertragungAbgeschlossen:
136 0003 01 .byte 1
137 .global NeueKoordinateEmpfangen
138 .global NeueKoordinateEmpfangen
139 .section .bss
142 NeueKoordinateEmpfangen:
143 0010 00 .skip 1,0
144 .global NeuerDatensatzEmpfangen
145 .global NeuerDatensatzEmpfangen
148 NeuerDatensatzEmpfangen:
149 0011 00 .skip 1,0
150 .global SioTmp
151 .global SioTmp
154 SioTmp:
155 0012 00 .skip 1,0
156 .global DisplayLine
157 .global DisplayLine
160 DisplayLine:
161 0013 00 .skip 1,0
162 .global GetPPMChannelAnforderung
163 .global GetPPMChannelAnforderung
166 GetPPMChannelAnforderung:
167 0014 00 .skip 1,0
168 .global GetVersionAnforderung
169 .global GetVersionAnforderung
172 GetVersionAnforderung:
173 0015 00 .skip 1,0
174 .global DebugDataAnforderung
175 .global DebugDataAnforderung
178 DebugDataAnforderung:
179 0016 00 .skip 1,0
180 .global DebugDisplayAnforderung
181 .global DebugDisplayAnforderung
184 DebugDisplayAnforderung:
185 0017 00 .skip 1,0
186 .global DebugDisplayAnforderung1
187 .global DebugDisplayAnforderung1
190 DebugDisplayAnforderung1:
191 0018 00 .skip 1,0
192 .global GetExternalControl
193 .global GetExternalControl
196 GetExternalControl:
197 0019 00 .skip 1,0
198 .lcomm ptr.6,2
199 .text
200 .global __vector_22
202 __vector_22:
203 /* prologue: frame size=0 */
204 0000 1F92 push __zero_reg__
205 0002 0F92 push __tmp_reg__
206 0004 0FB6 in __tmp_reg__,__SREG__
207 0006 0F92 push __tmp_reg__
208 0008 1124 clr __zero_reg__
209 000a 8F93 push r24
210 000c 9F93 push r25
211 000e EF93 push r30
212 0010 FF93 push r31
213 /* prologue end (size=9) */
214 0012 8091 0000 lds r24,UebertragungAbgeschlossen
215 0016 8823 tst r24
216 0018 01F4 brne .L2
217 001a 8091 0000 lds r24,ptr.6
218 001e 9091 0000 lds r25,(ptr.6)+1
219 0022 0196 adiw r24,1
220 0024 9093 0000 sts (ptr.6)+1,r25
221 0028 8093 0000 sts ptr.6,r24
222 002c FC01 movw r30,r24
223 002e E050 subi r30,lo8(-(TxdBuffer))
224 0030 F040 sbci r31,hi8(-(TxdBuffer))
225 0032 E081 ld r30,Z
226 0034 ED30 cpi r30,lo8(13)
227 0036 01F0 breq .L4
228 0038 8F3A cpi r24,175
229 003a 9105 cpc r25,__zero_reg__
230 003c 01F4 brne .L3
231 .L4:
232 003e 1092 0000 sts (ptr.6)+1,__zero_reg__
233 0042 1092 0000 sts ptr.6,__zero_reg__
234 0046 81E0 ldi r24,lo8(1)
235 0048 8093 0000 sts UebertragungAbgeschlossen,r24
236 .L3:
237 004c E093 C600 sts 198,r30
238 0050 00C0 rjmp .L1
239 .L2:
240 0052 1092 0000 sts (ptr.6)+1,__zero_reg__
241 0056 1092 0000 sts ptr.6,__zero_reg__
242 .L1:
243 /* epilogue: frame size=0 */
244 005a FF91 pop r31
245 005c EF91 pop r30
246 005e 9F91 pop r25
247 0060 8F91 pop r24
248 0062 0F90 pop __tmp_reg__
249 0064 0FBE out __SREG__,__tmp_reg__
250 0066 0F90 pop __tmp_reg__
251 0068 1F90 pop __zero_reg__
252 006a 1895 reti
253 /* epilogue end (size=9) */
254 /* function __vector_22 size 54 (36) */
256 .lcomm crc.1,2
257 .lcomm crc1.2,1
258 .lcomm crc2.3,1
259 .lcomm buf_ptr.4,1
260 .lcomm UartState.5,1
261 .global __vector_20
263 __vector_20:
264 /* prologue: frame size=0 */
265 006c 1F92 push __zero_reg__
266 006e 0F92 push __tmp_reg__
267 0070 0FB6 in __tmp_reg__,__SREG__
268 0072 0F92 push __tmp_reg__
269 0074 1124 clr __zero_reg__
270 0076 2F93 push r18
271 0078 3F93 push r19
272 007a 4F93 push r20
273 007c 5F93 push r21
274 007e 6F93 push r22
275 0080 7F93 push r23
276 0082 8F93 push r24
277 0084 9F93 push r25
278 0086 AF93 push r26
279 0088 BF93 push r27
280 008a CF93 push r28
281 008c EF93 push r30
282 008e FF93 push r31
283 /* prologue end (size=18) */
284 0090 90E0 ldi r25,lo8(0)
285 0092 8091 0000 lds r24,ReceiverUpdateModeActive
286 0096 8130 cpi r24,lo8(1)
287 0098 01F4 brne .L7
288 009a 8091 C600 lds r24,198
289 009e 8093 CE00 sts 206,r24
290 00a2 00C0 rjmp .L6
291 .L7:
292 00a4 8091 0000 lds r24,ReceiverUpdateModeActive
293 00a8 8230 cpi r24,lo8(2)
294 00aa 01F4 brne .L8
295 00ac 8091 C600 lds r24,198
296 00b0 8093 0000 sts RxdBuffer,r24
297 00b4 00C0 rjmp .L6
298 .L8:
299 00b6 8091 C600 lds r24,198
300 00ba 8093 0000 sts SioTmp,r24
301 00be 5091 0000 lds r21,buf_ptr.4
302 00c2 5F3A cpi r21,lo8(-81)
303 00c4 00F0 brlo .L9
304 00c6 9093 0000 sts UartState.5,r25
305 .L9:
306 00ca 8091 0000 lds r24,SioTmp
307 00ce 8D30 cpi r24,lo8(13)
308 00d0 01F0 breq .+2
309 00d2 00C0 rjmp .L10
310 00d4 8091 0000 lds r24,UartState.5
311 00d8 8230 cpi r24,lo8(2)
312 00da 01F0 breq .+2
313 00dc 00C0 rjmp .L10
314 00de 9093 0000 sts UartState.5,r25
315 00e2 852F mov r24,r21
316 00e4 9927 clr r25
317 00e6 8050 subi r24,lo8(-(RxdBuffer))
318 00e8 9040 sbci r25,hi8(-(RxdBuffer))
319 00ea FC01 movw r30,r24
320 00ec 3297 sbiw r30,2
321 00ee 4081 ld r20,Z
322 00f0 2091 0000 lds r18,crc.1
323 00f4 3091 0000 lds r19,(crc.1)+1
324 00f8 241B sub r18,r20
325 00fa 3109 sbc r19,__zero_reg__
326 00fc DC01 movw r26,r24
327 00fe 1197 sbiw r26,1
328 0100 8C91 ld r24,X
329 0102 281B sub r18,r24
330 0104 3109 sbc r19,__zero_reg__
331 0106 C901 movw r24,r18
332 0108 9F70 andi r25,hi8(4095)
333 010a 9093 0000 sts (crc.1)+1,r25
334 010e 8093 0000 sts crc.1,r24
335 0112 46E0 ldi r20,6
336 0114 9695 1: lsr r25
337 0116 8795 ror r24
338 0118 4A95 dec r20
339 011a 01F4 brne 1b
340 011c 982F mov r25,r24
341 011e 935C subi r25,lo8(-(61))
342 0120 9093 0000 sts crc1.2,r25
343 0124 2F73 andi r18,lo8(63)
344 0126 3070 andi r19,hi8(63)
345 0128 235C subi r18,lo8(-(61))
346 012a 2093 0000 sts crc2.3,r18
347 012e 8081 ld r24,Z
348 0130 9817 cp r25,r24
349 0132 01F4 brne .L11
350 0134 8C91 ld r24,X
351 0136 2817 cp r18,r24
352 0138 01F4 brne .L11
353 013a 91E0 ldi r25,lo8(1)
354 013c 00C0 rjmp .L12
355 .L11:
356 013e 90E0 ldi r25,lo8(0)
357 0140 8091 0000 lds r24,CntCrcError
358 0144 8F5F subi r24,lo8(-(1))
359 0146 8093 0000 sts CntCrcError,r24
360 .L12:
361 014a C091 0000 lds r28,NeuerDatensatzEmpfangen
362 014e CC23 tst r28
363 0150 01F0 breq .+2
364 0152 00C0 rjmp .L6
365 0154 9923 tst r25
366 0156 01F4 brne .+2
367 0158 00C0 rjmp .L6
368 015a 81E0 ldi r24,lo8(1)
369 015c 8093 0000 sts NeuerDatensatzEmpfangen,r24
370 0160 580F add r21,r24
371 0162 5093 0000 sts AnzahlEmpfangsBytes,r21
372 0166 5150 subi r21,lo8(-(-1))
373 0168 E52F mov r30,r21
374 016a FF27 clr r31
375 016c E050 subi r30,lo8(-(RxdBuffer))
376 016e F040 sbci r31,hi8(-(RxdBuffer))
377 0170 8DE0 ldi r24,lo8(13)
378 0172 8083 st Z,r24
379 0174 8091 0000 lds r24,RxdBuffer+2
380 0178 8235 cpi r24,lo8(82)
381 017a 01F0 breq .+2
382 017c 00C0 rjmp .L6
383 017e 0E94 0000 call LcdClear
384 0182 88E1 ldi r24,lo8(24)
385 0184 90E0 ldi r25,hi8(24)
386 0186 2CE0 ldi r18,lo8(12)
387 /* #APP */
388 0188 0FB6 in __tmp_reg__,__SREG__
389 018a F894 cli
390 018c A895 wdr
391 018e 8093 6000 sts 96,r24
392 0192 0FBE out __SREG__,__tmp_reg__
393 0194 2093 6000 sts 96,r18
394
395 /* #NOAPP */
396 0198 C093 0000 sts ServoActive,r28
397 019c 00C0 rjmp .L6
398 .L10:
399 019e 2091 0000 lds r18,UartState.5
400 01a2 822F mov r24,r18
401 01a4 9927 clr r25
402 01a6 8130 cpi r24,1
403 01a8 9105 cpc r25,__zero_reg__
404 01aa 01F0 breq .L19
405 01ac 8230 cpi r24,2
406 01ae 9105 cpc r25,__zero_reg__
407 01b0 04F4 brge .L24
408 01b2 892B or r24,r25
409 01b4 01F0 breq .L17
410 01b6 00C0 rjmp .L23
411 .L24:
412 01b8 0297 sbiw r24,2
413 01ba 01F0 breq .L20
414 01bc 00C0 rjmp .L23
415 .L17:
416 01be 8091 0000 lds r24,SioTmp
417 01c2 8332 cpi r24,lo8(35)
418 01c4 01F4 brne .L18
419 01c6 8091 0000 lds r24,NeuerDatensatzEmpfangen
420 01ca 8823 tst r24
421 01cc 01F4 brne .L18
422 01ce 81E0 ldi r24,lo8(1)
423 01d0 8093 0000 sts UartState.5,r24
424 .L18:
425 01d4 8091 0000 lds r24,SioTmp
426 01d8 8093 0000 sts RxdBuffer,r24
427 01dc 81E0 ldi r24,lo8(1)
428 01de 8093 0000 sts buf_ptr.4,r24
429 01e2 8091 0000 lds r24,SioTmp
430 01e6 9927 clr r25
431 01e8 00C0 rjmp .L25
432 .L19:
433 01ea 2F5F subi r18,lo8(-(1))
434 01ec 2093 0000 sts UartState.5,r18
435 01f0 E52F mov r30,r21
436 01f2 FF27 clr r31
437 01f4 E050 subi r30,lo8(-(RxdBuffer))
438 01f6 F040 sbci r31,hi8(-(RxdBuffer))
439 01f8 8091 0000 lds r24,SioTmp
440 01fc 8083 st Z,r24
441 01fe 00C0 rjmp .L26
442 .L20:
443 0200 E52F mov r30,r21
444 0202 FF27 clr r31
445 0204 E050 subi r30,lo8(-(RxdBuffer))
446 0206 F040 sbci r31,hi8(-(RxdBuffer))
447 0208 8091 0000 lds r24,SioTmp
448 020c 8083 st Z,r24
449 020e 5F3A cpi r21,lo8(-81)
450 0210 00F4 brsh .L21
451 .L26:
452 0212 5F5F subi r21,lo8(-(1))
453 0214 5093 0000 sts buf_ptr.4,r21
454 0218 00C0 rjmp .L22
455 .L21:
456 021a 1092 0000 sts UartState.5,__zero_reg__
457 .L22:
458 021e 2091 0000 lds r18,SioTmp
459 0222 8091 0000 lds r24,crc.1
460 0226 9091 0000 lds r25,(crc.1)+1
461 022a 820F add r24,r18
462 022c 911D adc r25,__zero_reg__
463 .L25:
464 022e 9093 0000 sts (crc.1)+1,r25
465 0232 8093 0000 sts crc.1,r24
466 0236 00C0 rjmp .L6
467 .L23:
468 0238 1092 0000 sts UartState.5,__zero_reg__
469 .L6:
470 /* epilogue: frame size=0 */
471 023c FF91 pop r31
472 023e EF91 pop r30
473 0240 CF91 pop r28
474 0242 BF91 pop r27
475 0244 AF91 pop r26
476 0246 9F91 pop r25
477 0248 8F91 pop r24
478 024a 7F91 pop r23
479 024c 6F91 pop r22
480 024e 5F91 pop r21
481 0250 4F91 pop r20
482 0252 3F91 pop r19
483 0254 2F91 pop r18
484 0256 0F90 pop __tmp_reg__
485 0258 0FBE out __SREG__,__tmp_reg__
486 025a 0F90 pop __tmp_reg__
487 025c 1F90 pop __zero_reg__
488 025e 1895 reti
489 /* epilogue end (size=18) */
490 /* function __vector_20 size 258 (222) */
492 .global AddCRC
494 AddCRC:
495 /* prologue: frame size=0 */
496 /* prologue end (size=0) */
497 0260 AC01 movw r20,r24
498 0262 A0E0 ldi r26,lo8(0)
499 0264 B0E0 ldi r27,hi8(0)
500 0266 9D01 movw r18,r26
501 0268 A817 cp r26,r24
502 026a B907 cpc r27,r25
503 026c 00F4 brsh .L33
504 026e E0E0 ldi r30,lo8(TxdBuffer)
505 0270 F0E0 ldi r31,hi8(TxdBuffer)
506 .L31:
507 0272 8191 ld r24,Z+
508 0274 280F add r18,r24
509 0276 311D adc r19,__zero_reg__
510 0278 1196 adiw r26,1
511 027a A417 cp r26,r20
512 027c B507 cpc r27,r21
513 027e 00F0 brlo .L31
514 .L33:
515 0280 3F70 andi r19,hi8(4095)
516 0282 FD01 movw r30,r26
517 0284 E050 subi r30,lo8(-(TxdBuffer))
518 0286 F040 sbci r31,hi8(-(TxdBuffer))
519 0288 C901 movw r24,r18
520 028a 56E0 ldi r21,6
521 028c 9695 1: lsr r25
522 028e 8795 ror r24
523 0290 5A95 dec r21
524 0292 01F4 brne 1b
525 0294 835C subi r24,lo8(-(61))
526 0296 8083 st Z,r24
527 0298 1196 adiw r26,1
528 029a FD01 movw r30,r26
529 029c E050 subi r30,lo8(-(TxdBuffer))
530 029e F040 sbci r31,hi8(-(TxdBuffer))
531 02a0 2F73 andi r18,lo8(63)
532 02a2 3070 andi r19,hi8(63)
533 02a4 822F mov r24,r18
534 02a6 835C subi r24,lo8(-(61))
535 02a8 8083 st Z,r24
536 02aa A050 subi r26,lo8(-(TxdBuffer+1))
537 02ac B040 sbci r27,hi8(-(TxdBuffer+1))
538 02ae 8DE0 ldi r24,lo8(13)
539 02b0 8C93 st X,r24
540 02b2 1092 0000 sts UebertragungAbgeschlossen,__zero_reg__
541 02b6 8091 0000 lds r24,TxdBuffer
542 02ba 8093 C600 sts 198,r24
543 /* epilogue: frame size=0 */
544 02be 0895 ret
545 /* epilogue end (size=1) */
546 /* function AddCRC size 49 (48) */
548 .global SendOutData
550 SendOutData:
551 /* prologue: frame size=0 */
552 02c0 A0E0 ldi r26,lo8(0)
553 02c2 B0E0 ldi r27,hi8(0)
554 02c4 E0E0 ldi r30,pm_lo8(1f)
555 02c6 F0E0 ldi r31,pm_hi8(1f)
556 02c8 0C94 0000 jmp __prologue_saves__+18
557 1:
558 /* prologue end (size=6) */
559 02cc 2C85 ldd r18,Y+12
560 02ce 9D85 ldd r25,Y+13
561 02d0 0E85 ldd r16,Y+14
562 02d2 BB24 clr r11
563 02d4 83E2 ldi r24,lo8(35)
564 02d6 8093 0000 sts TxdBuffer,r24
565 02da 9F59 subi r25,lo8(-(97))
566 02dc 9093 0000 sts TxdBuffer+1,r25
567 02e0 2093 0000 sts TxdBuffer+2,r18
568 02e4 33E0 ldi r19,lo8(3)
569 02e6 E32E mov r14,r19
570 02e8 F12C mov r15,__zero_reg__
571 02ea 0023 tst r16
572 02ec 01F4 brne .+2
573 02ee 00C0 rjmp .L49
574 02f0 CF84 ldd r12,Y+15
575 02f2 D888 ldd r13,Y+16
576 02f4 BE01 movw r22,r28
577 02f6 6D5E subi r22,lo8(-(19))
578 02f8 7F4F sbci r23,hi8(-(19))
579 02fa A989 ldd r26,Y+17
580 02fc BA89 ldd r27,Y+18
581 02fe 0150 subi r16,lo8(-(-1))
582 .L50:
583 0300 1097 sbiw r26,0
584 0302 01F4 brne .+2
585 0304 00C0 rjmp .L49
586 0306 1097 sbiw r26,0
587 0308 01F0 breq .L38
588 030a F601 movw r30,r12
589 030c EB0D add r30,r11
590 030e F11D adc r31,__zero_reg__
591 0310 B394 inc r11
592 0312 9081 ld r25,Z
593 0314 1197 sbiw r26,1
594 0316 01F4 brne .L40
595 0318 0023 tst r16
596 031a 01F0 breq .L41
597 031c FB01 movw r30,r22
598 031e 6E5F subi r22,lo8(-(2))
599 0320 7F4F sbci r23,hi8(-(2))
600 0322 DB01 movw r26,r22
601 0324 C080 ld r12,Z
602 0326 D180 ldd r13,Z+1
603 0328 6E5F subi r22,lo8(-(2))
604 032a 7F4F sbci r23,hi8(-(2))
605 032c 0D90 ld __tmp_reg__,X+
606 032e BC91 ld r27,X
607 0330 A02D mov r26,__tmp_reg__
608 0332 BB24 clr r11
609 0334 0150 subi r16,lo8(-(-1))
610 0336 00C0 rjmp .L40
611 .L38:
612 0338 90E0 ldi r25,lo8(0)
613 033a 00C0 rjmp .L41
614 .L40:
615 033c 1097 sbiw r26,0
616 033e 01F0 breq .L41
617 0340 F601 movw r30,r12
618 0342 EB0D add r30,r11
619 0344 F11D adc r31,__zero_reg__
620 0346 B394 inc r11
621 0348 4081 ld r20,Z
622 034a 1197 sbiw r26,1
623 034c 01F4 brne .L43
624 034e 0023 tst r16
625 0350 01F0 breq .L44
626 0352 FB01 movw r30,r22
627 0354 6E5F subi r22,lo8(-(2))
628 0356 7F4F sbci r23,hi8(-(2))
629 0358 DB01 movw r26,r22
630 035a C080 ld r12,Z
631 035c D180 ldd r13,Z+1
632 035e 6E5F subi r22,lo8(-(2))
633 0360 7F4F sbci r23,hi8(-(2))
634 0362 0D90 ld __tmp_reg__,X+
635 0364 BC91 ld r27,X
636 0366 A02D mov r26,__tmp_reg__
637 0368 BB24 clr r11
638 036a 0150 subi r16,lo8(-(-1))
639 036c 00C0 rjmp .L43
640 .L41:
641 036e 40E0 ldi r20,lo8(0)
642 0370 00C0 rjmp .L44
643 .L43:
644 0372 1097 sbiw r26,0
645 0374 01F0 breq .L44
646 0376 F601 movw r30,r12
647 0378 EB0D add r30,r11
648 037a F11D adc r31,__zero_reg__
649 037c B394 inc r11
650 037e 1081 ld r17,Z
651 0380 1197 sbiw r26,1
652 0382 01F4 brne .L46
653 0384 0023 tst r16
654 0386 01F0 breq .L46
655 0388 FB01 movw r30,r22
656 038a 3296 adiw r30,2
657 038c DB01 movw r26,r22
658 038e CD90 ld r12,X+
659 0390 DC90 ld r13,X
660 0392 BF01 movw r22,r30
661 0394 6E5F subi r22,lo8(-(2))
662 0396 7F4F sbci r23,hi8(-(2))
663 0398 A081 ld r26,Z
664 039a B181 ldd r27,Z+1
665 039c BB24 clr r11
666 039e 0150 subi r16,lo8(-(-1))
667 03a0 00C0 rjmp .L46
668 .L44:
669 03a2 10E0 ldi r17,lo8(0)
670 .L46:
671 03a4 F701 movw r30,r14
672 03a6 E050 subi r30,lo8(-(TxdBuffer))
673 03a8 F040 sbci r31,hi8(-(TxdBuffer))
674 03aa 892F mov r24,r25
675 03ac 8695 lsr r24
676 03ae 8695 lsr r24
677 03b0 835C subi r24,lo8(-(61))
678 03b2 8083 st Z,r24
679 03b4 0894 sec
680 03b6 E11C adc r14,__zero_reg__
681 03b8 F11C adc r15,__zero_reg__
682 03ba F701 movw r30,r14
683 03bc E050 subi r30,lo8(-(TxdBuffer))
684 03be F040 sbci r31,hi8(-(TxdBuffer))
685 03c0 892F mov r24,r25
686 03c2 9927 clr r25
687 03c4 8370 andi r24,lo8(3)
688 03c6 9070 andi r25,hi8(3)
689 03c8 24E0 ldi r18,4
690 03ca 880F 1: lsl r24
691 03cc 991F rol r25
692 03ce 2A95 dec r18
693 03d0 01F4 brne 1b
694 03d2 5527 clr r21
695 03d4 9A01 movw r18,r20
696 03d6 94E0 ldi r25,4
697 03d8 3695 1: lsr r19
698 03da 2795 ror r18
699 03dc 9A95 dec r25
700 03de 01F4 brne 1b
701 03e0 822B or r24,r18
702 03e2 835C subi r24,lo8(-(61))
703 03e4 8083 st Z,r24
704 03e6 0894 sec
705 03e8 E11C adc r14,__zero_reg__
706 03ea F11C adc r15,__zero_reg__
707 03ec F701 movw r30,r14
708 03ee E050 subi r30,lo8(-(TxdBuffer))
709 03f0 F040 sbci r31,hi8(-(TxdBuffer))
710 03f2 4F70 andi r20,lo8(15)
711 03f4 5070 andi r21,hi8(15)
712 03f6 440F lsl r20
713 03f8 551F rol r21
714 03fa 440F lsl r20
715 03fc 551F rol r21
716 03fe 812F mov r24,r17
717 0400 9927 clr r25
718 0402 26E0 ldi r18,6
719 0404 9695 1: lsr r25
720 0406 8795 ror r24
721 0408 2A95 dec r18
722 040a 01F4 brne 1b
723 040c 842B or r24,r20
724 040e 835C subi r24,lo8(-(61))
725 0410 8083 st Z,r24
726 0412 0894 sec
727 0414 E11C adc r14,__zero_reg__
728 0416 F11C adc r15,__zero_reg__
729 0418 F701 movw r30,r14
730 041a E050 subi r30,lo8(-(TxdBuffer))
731 041c F040 sbci r31,hi8(-(TxdBuffer))
732 041e 1F73 andi r17,lo8(63)
733 0420 135C subi r17,lo8(-(61))
734 0422 1083 st Z,r17
735 0424 0894 sec
736 0426 E11C adc r14,__zero_reg__
737 0428 F11C adc r15,__zero_reg__
738 042a 00C0 rjmp .L50
739 .L49:
740 042c C701 movw r24,r14
741 042e 0E94 0000 call AddCRC
742 /* epilogue: frame size=0 */
743 0432 E9E0 ldi r30,9
744 0434 0C94 0000 jmp __epilogue_restores__+18
745 /* epilogue end (size=3) */
746 /* function SendOutData size 191 (182) */
748 .global Decode64
750 Decode64:
751 /* prologue: frame size=0 */
752 /* prologue end (size=0) */
753 0438 A3E0 ldi r26,lo8(3)
754 043a 7A2F mov r23,r26
755 043c 4091 0000 lds r20,AnzahlEmpfangsBytes
756 0440 4650 subi r20,lo8(-(-6))
757 .L62:
758 0442 4423 tst r20
759 0444 01F4 brne .+2
760 0446 00C0 rjmp .L53
761 0448 E72F mov r30,r23
762 044a FF27 clr r31
763 044c E050 subi r30,lo8(-(RxdBuffer))
764 044e F040 sbci r31,hi8(-(RxdBuffer))
765 0450 8081 ld r24,Z
766 0452 8D53 subi r24,lo8(-(-61))
767 0454 7F5F subi r23,lo8(-(1))
768 0456 E72F mov r30,r23
769 0458 FF27 clr r31
770 045a E050 subi r30,lo8(-(RxdBuffer))
771 045c F040 sbci r31,hi8(-(RxdBuffer))
772 045e 2081 ld r18,Z
773 0460 2D53 subi r18,lo8(-(-61))
774 0462 7F5F subi r23,lo8(-(1))
775 0464 E72F mov r30,r23
776 0466 FF27 clr r31
777 0468 E050 subi r30,lo8(-(RxdBuffer))
778 046a F040 sbci r31,hi8(-(RxdBuffer))
779 046c 3081 ld r19,Z
780 046e 3D53 subi r19,lo8(-(-61))
781 0470 7F5F subi r23,lo8(-(1))
782 0472 E72F mov r30,r23
783 0474 FF27 clr r31
784 0476 E050 subi r30,lo8(-(RxdBuffer))
785 0478 F040 sbci r31,hi8(-(RxdBuffer))
786 047a 6081 ld r22,Z
787 047c 6D53 subi r22,lo8(-(-61))
788 047e 7F5F subi r23,lo8(-(1))
789 0480 9927 clr r25
790 0482 880F lsl r24
791 0484 991F rol r25
792 0486 880F lsl r24
793 0488 991F rol r25
794 048a 522F mov r21,r18
795 048c 5295 swap r21
796 048e 5F70 andi r21,0x0f
797 0490 582B or r21,r24
798 0492 822F mov r24,r18
799 0494 9927 clr r25
800 0496 8F70 andi r24,lo8(15)
801 0498 9070 andi r25,hi8(15)
802 049a F4E0 ldi r31,4
803 049c 880F 1: lsl r24
804 049e 991F rol r25
805 04a0 FA95 dec r31
806 04a2 01F4 brne 1b
807 04a4 232F mov r18,r19
808 04a6 2695 lsr r18
809 04a8 2695 lsr r18
810 04aa 282B or r18,r24
811 04ac 832F mov r24,r19
812 04ae 9927 clr r25
813 04b0 8370 andi r24,lo8(3)
814 04b2 9070 andi r25,hi8(3)
815 04b4 E6E0 ldi r30,6
816 04b6 880F 1: lsl r24
817 04b8 991F rol r25
818 04ba EA95 dec r30
819 04bc 01F4 brne 1b
820 04be 682B or r22,r24
821 04c0 4150 subi r20,lo8(-(-1))
822 04c2 4F3F cpi r20,lo8(-1)
823 04c4 01F0 breq .L53
824 04c6 EA2F mov r30,r26
825 04c8 FF27 clr r31
826 04ca E050 subi r30,lo8(-(RxdBuffer))
827 04cc F040 sbci r31,hi8(-(RxdBuffer))
828 04ce 5083 st Z,r21
829 04d0 AF5F subi r26,lo8(-(1))
830 04d2 4150 subi r20,lo8(-(-1))
831 04d4 4F3F cpi r20,lo8(-1)
832 04d6 01F0 breq .L53
833 04d8 EA2F mov r30,r26
834 04da FF27 clr r31
835 04dc E050 subi r30,lo8(-(RxdBuffer))
836 04de F040 sbci r31,hi8(-(RxdBuffer))
837 04e0 2083 st Z,r18
838 04e2 AF5F subi r26,lo8(-(1))
839 04e4 4150 subi r20,lo8(-(-1))
840 04e6 4F3F cpi r20,lo8(-1)
841 04e8 01F0 breq .L53
842 04ea EA2F mov r30,r26
843 04ec FF27 clr r31
844 04ee E050 subi r30,lo8(-(RxdBuffer))
845 04f0 F040 sbci r31,hi8(-(RxdBuffer))
846 04f2 6083 st Z,r22
847 04f4 AF5F subi r26,lo8(-(1))
848 04f6 00C0 rjmp .L62
849 .L53:
850 04f8 80E0 ldi r24,lo8(RxdBuffer+3)
851 04fa 90E0 ldi r25,hi8(RxdBuffer+3)
852 04fc 9093 0000 sts (pRxData)+1,r25
853 0500 8093 0000 sts pRxData,r24
854 0504 A350 subi r26,lo8(-(-3))
855 0506 A093 0000 sts RxDataLen,r26
856 /* epilogue: frame size=0 */
857 050a 0895 ret
858 /* epilogue end (size=1) */
859 /* function Decode64 size 106 (105) */
861 .global BearbeiteRxDaten
863 BearbeiteRxDaten:
864 /* prologue: frame size=2 */
865 050c A2E0 ldi r26,lo8(2)
866 050e B0E0 ldi r27,hi8(2)
867 0510 E0E0 ldi r30,pm_lo8(1f)
868 0512 F0E0 ldi r31,pm_hi8(1f)
869 0514 0C94 0000 jmp __prologue_saves__+30
870 1:
871 /* prologue end (size=6) */
872 0518 8091 0000 lds r24,NeuerDatensatzEmpfangen
873 051c 8823 tst r24
874 051e 01F4 brne .+2
875 0520 00C0 rjmp .L63
876 0522 0E94 0000 call Decode64
877 0526 8091 0000 lds r24,RxdBuffer+1
878 052a 8236 cpi r24,lo8(98)
879 052c 01F0 breq .+2
880 052e 00C0 rjmp .L145
881 0530 8091 0000 lds r24,RxdBuffer+2
882 0534 9927 clr r25
883 0536 8037 cpi r24,112
884 0538 9105 cpc r25,__zero_reg__
885 053a 01F4 brne .+2
886 053c 00C0 rjmp .L82
887 053e 8137 cpi r24,113
888 0540 9105 cpc r25,__zero_reg__
889 0542 04F4 brge .L141
890 0544 8A36 cpi r24,106
891 0546 9105 cpc r25,__zero_reg__
892 0548 01F4 brne .+2
893 054a 00C0 rjmp .L128
894 054c 8B36 cpi r24,107
895 054e 9105 cpc r25,__zero_reg__
896 0550 04F4 brge .L142
897 0552 8B34 cpi r24,75
898 0554 9105 cpc r25,__zero_reg__
899 0556 01F0 breq .L68
900 0558 8636 cpi r24,102
901 055a 9105 cpc r25,__zero_reg__
902 055c 01F4 brne .+2
903 055e 00C0 rjmp .L108
904 0560 00C0 rjmp .L145
905 .L142:
906 0562 8D36 cpi r24,109
907 0564 9105 cpc r25,__zero_reg__
908 0566 01F4 brne .+2
909 0568 00C0 rjmp .L76
910 056a 8E36 cpi r24,110
911 056c 9105 cpc r25,__zero_reg__
912 056e 01F4 brne .+2
913 0570 00C0 rjmp .L73
914 0572 00C0 rjmp .L145
915 .L141:
916 0574 8437 cpi r24,116
917 0576 9105 cpc r25,__zero_reg__
918 0578 01F0 breq .L69
919 057a 8537 cpi r24,117
920 057c 9105 cpc r25,__zero_reg__
921 057e 04F4 brge .L143
922 0580 8137 cpi r24,113
923 0582 9105 cpc r25,__zero_reg__
924 0584 01F4 brne .+2
925 0586 00C0 rjmp .L83
926 0588 8337 cpi r24,115
927 058a 9105 cpc r25,__zero_reg__
928 058c 01F4 brne .+2
929 058e 00C0 rjmp .L101
930 0590 00C0 rjmp .L145
931 .L143:
932 0592 8737 cpi r24,119
933 0594 9105 cpc r25,__zero_reg__
934 0596 01F4 brne .+2
935 0598 00C0 rjmp .L121
936 059a 8837 cpi r24,120
937 059c 9105 cpc r25,__zero_reg__
938 059e 04F4 brge .L144
939 05a0 8537 cpi r24,117
940 05a2 9105 cpc r25,__zero_reg__
941 05a4 01F4 brne .+2
942 05a6 00C0 rjmp .L115
943 05a8 00C0 rjmp .L145
944 .L144:
945 05aa 8937 cpi r24,121
946 05ac 9105 cpc r25,__zero_reg__
947 05ae 01F4 brne .+2
948 05b0 00C0 rjmp .L114
949 05b2 00C0 rjmp .L145
950 .L68:
951 05b4 E091 0000 lds r30,pRxData
952 05b8 F091 0000 lds r31,(pRxData)+1
953 05bc 8081 ld r24,Z
954 05be 9181 ldd r25,Z+1
955 05c0 9093 0000 sts (KompassValue)+1,r25
956 05c4 8093 0000 sts KompassValue,r24
957 05c8 00C0 rjmp .L145
958 .L69:
959 05ca 8091 0000 lds r24,AnzahlEmpfangsBytes
960 05ce A091 0000 lds r26,pRxData
961 05d2 B091 0000 lds r27,(pRxData)+1
962 05d6 8531 cpi r24,lo8(21)
963 05d8 00F0 brlo .L70
964 05da 80E1 ldi r24,lo8(16)
965 05dc E0E0 ldi r30,lo8(MotorTest)
966 05de F0E0 ldi r31,hi8(MotorTest)
967 05e0 0D90 ld __tmp_reg__,X+
968 05e2 0192 st Z+,__tmp_reg__
969 05e4 8A95 dec r24
970 05e6 01F4 brne .-8
971 05e8 00C0 rjmp .L71
972 .L70:
973 05ea 8D91 ld r24,X+
974 05ec 9D91 ld r25,X+
975 05ee 0D90 ld __tmp_reg__,X+
976 05f0 BC91 ld r27,X
977 05f2 A02D mov r26,__tmp_reg__
978 05f4 8093 0000 sts MotorTest,r24
979 05f8 9093 0000 sts (MotorTest)+1,r25
980 05fc A093 0000 sts (MotorTest)+2,r26
981 0600 B093 0000 sts (MotorTest)+3,r27
982 .L71:
983 0604 80EF ldi r24,lo8(-16)
984 0606 8093 0000 sts PC_MotortestActive,r24
985 060a 00C0 rjmp .L182
986 .L73:
987 060c 8091 0000 lds r24,UebertragungAbgeschlossen
988 0610 8823 tst r24
989 0612 01F0 breq .L73
990 0614 8DE4 ldi r24,lo8(77)
991 0616 90E0 ldi r25,hi8(77)
992 0618 9F93 push r25
993 061a 8F93 push r24
994 061c 80E0 ldi r24,lo8(Mixer)
995 061e 90E0 ldi r25,hi8(Mixer)
996 0620 9F93 push r25
997 0622 8F93 push r24
998 0624 81E0 ldi r24,lo8(1)
999 0626 8F93 push r24
1000 0628 8F93 push r24
1001 062a 8EE4 ldi r24,lo8(78)
1002 062c 8F93 push r24
1003 062e 0E94 0000 call SendOutData
1004 0632 8DB7 in r24,__SP_L__
1005 0634 9EB7 in r25,__SP_H__
1006 0636 0796 adiw r24,7
1007 0638 8DBF out __SP_L__,r24
1008 063a 00C0 rjmp .L145
1009 .L76:
1010 063c A091 0000 lds r26,pRxData
1011 0640 B091 0000 lds r27,(pRxData)+1
1012 0644 1C91 ld r17,X
1013 0646 1130 cpi r17,lo8(1)
1014 0648 01F4 brne .L77
1015 064a 8DE4 ldi r24,lo8(77)
1016 064c E0E0 ldi r30,lo8(Mixer)
1017 064e F0E0 ldi r31,hi8(Mixer)
1018 0650 0D90 ld __tmp_reg__,X+
1019 0652 0192 st Z+,__tmp_reg__
1020 0654 8A95 dec r24
1021 0656 01F4 brne .-8
1022 0658 0E94 0000 call MixerTable_WriteToEEProm
1023 065c 1983 std Y+1,r17
1024 065e 8091 0000 lds r24,VersionInfo+6
1025 0662 8F7E andi r24,lo8(-17)
1026 0664 8093 0000 sts VersionInfo+6,r24
1027 0668 00C0 rjmp .L79
1028 .L77:
1029 066a 1982 std Y+1,__zero_reg__
1030 .L79:
1031 066c 8091 0000 lds r24,UebertragungAbgeschlossen
1032 0670 8823 tst r24
1033 0672 01F0 breq .L79
1034 0674 81E0 ldi r24,lo8(1)
1035 0676 90E0 ldi r25,hi8(1)
1036 0678 9F93 push r25
1037 067a 8F93 push r24
1038 067c CE01 movw r24,r28
1039 067e 0196 adiw r24,1
1040 0680 9F93 push r25
1041 0682 8F93 push r24
1042 0684 81E0 ldi r24,lo8(1)
1043 0686 8F93 push r24
1044 0688 8F93 push r24
1045 068a 8DE4 ldi r24,lo8(77)
1046 068c 8F93 push r24
1047 068e 0E94 0000 call SendOutData
1048 0692 ADB7 in r26,__SP_L__
1049 0694 BEB7 in r27,__SP_H__
1050 0696 1796 adiw r26,7
1051 0698 ADBF out __SP_L__,r26
1052 069a 00C0 rjmp .L145
1053 .L82:
1054 069c 81E0 ldi r24,lo8(1)
1055 069e 8093 0000 sts GetPPMChannelAnforderung,r24
1056 .L182:
1057 06a2 8FEF ldi r24,lo8(-1)
1058 06a4 8093 0000 sts PcZugriff,r24
1059 06a8 00C0 rjmp .L145
1060 .L83:
1061 06aa E091 0000 lds r30,pRxData
1062 06ae F091 0000 lds r31,(pRxData)+1
1063 06b2 E081 ld r30,Z
1064 06b4 8E2F mov r24,r30
1065 06b6 8A50 subi r24,lo8(-(-10))
1066 06b8 8A30 cpi r24,lo8(10)
1067 06ba 00F4 brsh .L84
1068 06bc 8983 std Y+1,r24
1069 06be 8823 tst r24
1070 06c0 01F4 brne .L85
1071 06c2 81E0 ldi r24,lo8(1)
1072 06c4 00C0 rjmp .L176
1073 .L85:
1074 06c6 8630 cpi r24,lo8(6)
1075 06c8 00F0 brlo .L86
1076 06ca 85E0 ldi r24,lo8(5)
1077 .L176:
1078 06cc 8983 std Y+1,r24
1079 .L86:
1080 06ce 61E0 ldi r22,lo8(1)
1081 06d0 00C0 rjmp .L179
1082 .L84:
1083 06d2 8E2F mov r24,r30
1084 06d4 8451 subi r24,lo8(-(-20))
1085 06d6 8A30 cpi r24,lo8(10)
1086 06d8 00F4 brsh .L89
1087 06da 8983 std Y+1,r24
1088 06dc 8823 tst r24
1089 06de 01F4 brne .L90
1090 06e0 81E0 ldi r24,lo8(1)
1091 06e2 00C0 rjmp .L177
1092 .L90:
1093 06e4 8630 cpi r24,lo8(6)
1094 06e6 00F0 brlo .L91
1095 06e8 85E0 ldi r24,lo8(5)
1096 .L177:
1097 06ea 8983 std Y+1,r24
1098 .L91:
1099 06ec 60E0 ldi r22,lo8(0)
1100 .L179:
1101 06ee 8981 ldd r24,Y+1
1102 06f0 0E94 0000 call SetDefaultParameter
1103 06f4 00C0 rjmp .L98
1104 .L89:
1105 06f6 E983 std Y+1,r30
1106 06f8 EF3F cpi r30,lo8(-1)
1107 06fa 01F4 brne .L94
1108 06fc 0E94 0000 call GetActiveParamSet
1109 0700 8983 std Y+1,r24
1110 .L94:
1111 0702 8981 ldd r24,Y+1
1112 0704 8823 tst r24
1113 0706 01F4 brne .L95
1114 0708 81E0 ldi r24,lo8(1)
1115 070a 00C0 rjmp .L178
1116 .L95:
1117 070c 8630 cpi r24,lo8(6)
1118 070e 00F0 brlo .L96
1119 0710 85E0 ldi r24,lo8(5)
1120 .L178:
1121 0712 8983 std Y+1,r24
1122 .L96:
1123 0714 8981 ldd r24,Y+1
1124 0716 0E94 0000 call ParamSet_ReadFromEEProm
1125 .L98:
1126 071a 8091 0000 lds r24,UebertragungAbgeschlossen
1127 071e 8823 tst r24
1128 0720 01F0 breq .L98
1129 0722 8CE7 ldi r24,lo8(124)
1130 0724 90E0 ldi r25,hi8(124)
1131 0726 9F93 push r25
1132 0728 8F93 push r24
1133 072a 80E0 ldi r24,lo8(EE_Parameter)
1134 072c 90E0 ldi r25,hi8(EE_Parameter)
1135 072e 9F93 push r25
1136 0730 8F93 push r24
1137 0732 81E0 ldi r24,lo8(1)
1138 0734 90E0 ldi r25,hi8(1)
1139 0736 9F93 push r25
1140 0738 8F93 push r24
1141 073a CE01 movw r24,r28
1142 073c 0196 adiw r24,1
1143 073e 9F93 push r25
1144 0740 8F93 push r24
1145 0742 82E0 ldi r24,lo8(2)
1146 0744 8F93 push r24
1147 0746 81E0 ldi r24,lo8(1)
1148 0748 8F93 push r24
1149 074a 81E5 ldi r24,lo8(81)
1150 074c 00C0 rjmp .L185
1151 .L101:
1152 074e 2091 0000 lds r18,pRxData
1153 0752 3091 0000 lds r19,(pRxData)+1
1154 0756 D901 movw r26,r18
1155 0758 8C91 ld r24,X
1156 075a 8150 subi r24,lo8(-(-1))
1157 075c 8530 cpi r24,lo8(5)
1158 075e 00F0 brlo .+2
1159 0760 00C0 rjmp .L102
1160 0762 F901 movw r30,r18
1161 0764 8181 ldd r24,Z+1
1162 0766 8C35 cpi r24,lo8(92)
1163 0768 01F0 breq .+2
1164 076a 00C0 rjmp .L102
1165 076c 8091 0000 lds r24,MotorenEin
1166 0770 8823 tst r24
1167 0772 01F4 brne .L102
1168 0774 2F5F subi r18,lo8(-(1))
1169 0776 3F4F sbci r19,hi8(-(1))
1170 0778 8CE7 ldi r24,lo8(124)
1171 077a E0E0 ldi r30,lo8(EE_Parameter)
1172 077c F0E0 ldi r31,hi8(EE_Parameter)
1173 077e D901 movw r26,r18
1174 0780 0D90 ld __tmp_reg__,X+
1175 0782 0192 st Z+,__tmp_reg__
1176 0784 8A95 dec r24
1177 0786 01F4 brne .-8
1178 0788 F901 movw r30,r18
1179 078a 8291 ld r24,-Z
1180 078c 0E94 0000 call ParamSet_WriteToEEProm
1181 0790 8091 0000 lds r24,EE_Parameter+65
1182 0794 9927 clr r25
1183 0796 AA27 clr r26
1184 0798 BB27 clr r27
1185 079a BC01 movw r22,r24
1186 079c CD01 movw r24,r26
1187 079e 24EC ldi r18,lo8(2500)
1188 07a0 39E0 ldi r19,hi8(2500)
1189 07a2 40E0 ldi r20,hlo8(2500)
1190 07a4 50E0 ldi r21,hhi8(2500)
1191 07a6 0E94 0000 call __mulsi3
1192 07aa DC01 movw r26,r24
1193 07ac CB01 movw r24,r22
1194 07ae 8093 0000 sts Umschlag180Nick,r24
1195 07b2 9093 0000 sts (Umschlag180Nick)+1,r25
1196 07b6 A093 0000 sts (Umschlag180Nick)+2,r26
1197 07ba B093 0000 sts (Umschlag180Nick)+3,r27
1198 07be 8091 0000 lds r24,EE_Parameter+66
1199 07c2 9927 clr r25
1200 07c4 AA27 clr r26
1201 07c6 BB27 clr r27
1202 07c8 BC01 movw r22,r24
1203 07ca CD01 movw r24,r26
1204 07cc 0E94 0000 call __mulsi3
1205 07d0 DC01 movw r26,r24
1206 07d2 CB01 movw r24,r22
1207 07d4 8093 0000 sts Umschlag180Roll,r24
1208 07d8 9093 0000 sts (Umschlag180Roll)+1,r25
1209 07dc A093 0000 sts (Umschlag180Roll)+2,r26
1210 07e0 B093 0000 sts (Umschlag180Roll)+3,r27
1211 07e4 0E94 0000 call GetActiveParamSet
1212 07e8 8983 std Y+1,r24
1213 07ea 00C0 rjmp .L104
1214 .L102:
1215 07ec 1982 std Y+1,__zero_reg__
1216 .L104:
1217 07ee 8091 0000 lds r24,UebertragungAbgeschlossen
1218 07f2 8823 tst r24
1219 07f4 01F0 breq .L104
1220 07f6 81E0 ldi r24,lo8(1)
1221 07f8 90E0 ldi r25,hi8(1)
1222 07fa 9F93 push r25
1223 07fc 8F93 push r24
1224 07fe CE01 movw r24,r28
1225 0800 0196 adiw r24,1
1226 0802 9F93 push r25
1227 0804 8F93 push r24
1228 0806 81E0 ldi r24,lo8(1)
1229 0808 8F93 push r24
1230 080a 8F93 push r24
1231 080c 83E5 ldi r24,lo8(83)
1232 080e 8F93 push r24
1233 0810 0E94 0000 call SendOutData
1234 0814 8DB7 in r24,__SP_L__
1235 0816 9EB7 in r25,__SP_H__
1236 0818 0796 adiw r24,7
1237 081a 8DBF out __SP_L__,r24
1238 081c 00C0 rjmp .L186
1239 .L108:
1240 081e E091 0000 lds r30,pRxData
1241 0822 F091 0000 lds r31,(pRxData)+1
1242 0826 E081 ld r30,Z
1243 0828 8E2F mov r24,r30
1244 082a 8150 subi r24,lo8(-(-1))
1245 082c 8530 cpi r24,lo8(5)
1246 082e 00F4 brsh .L109
1247 0830 8E2F mov r24,r30
1248 0832 0E94 0000 call ParamSet_ReadFromEEProm
1249 .L109:
1250 0836 0E94 0000 call GetActiveParamSet
1251 083a 8983 std Y+1,r24
1252 .L110:
1253 083c 8091 0000 lds r24,UebertragungAbgeschlossen
1254 0840 8823 tst r24
1255 0842 01F0 breq .L110
1256 0844 81E0 ldi r24,lo8(1)
1257 0846 90E0 ldi r25,hi8(1)
1258 0848 9F93 push r25
1259 084a 8F93 push r24
1260 084c CE01 movw r24,r28
1261 084e 0196 adiw r24,1
1262 0850 9F93 push r25
1263 0852 8F93 push r24
1264 0854 81E0 ldi r24,lo8(1)
1265 0856 8F93 push r24
1266 0858 8F93 push r24
1267 085a 86E4 ldi r24,lo8(70)
1268 085c 8F93 push r24
1269 085e 0E94 0000 call SendOutData
1270 0862 ADB7 in r26,__SP_L__
1271 0864 BEB7 in r27,__SP_H__
1272 0866 1796 adiw r26,7
1273 0868 ADBF out __SP_L__,r26
1274 .L186:
1275 086a 8091 0000 lds r24,MotorenEin
1276 086e 8823 tst r24
1277 0870 01F4 brne .L113
1278 0872 6EE6 ldi r22,lo8(110)
1279 0874 70E0 ldi r23,hi8(110)
1280 0876 8981 ldd r24,Y+1
1281 0878 0E94 0000 call Piep
1282 .L113:
1283 087c 80E0 ldi r24,lo8(0)
1284 087e 0E94 0000 call LipoDetection
1285 0882 8091 0000 lds r24,EE_Parameter+39
1286 0886 0E94 0000 call LIBFC_ReceiverInit
1287 088a 00C0 rjmp .L145
1288 .L114:
1289 088c E091 0000 lds r30,pRxData
1290 0890 F091 0000 lds r31,(pRxData)+1
1291 0894 8081 ld r24,Z
1292 0896 9927 clr r25
1293 0898 87FD sbrc r24,7
1294 089a 9095 com r25
1295 089c 9093 0000 sts (PPM_in+26)+1,r25
1296 08a0 8093 0000 sts PPM_in+26,r24
1297 08a4 8181 ldd r24,Z+1
1298 08a6 9927 clr r25
1299 08a8 87FD sbrc r24,7
1300 08aa 9095 com r25
1301 08ac 9093 0000 sts (PPM_in+28)+1,r25
1302 08b0 8093 0000 sts PPM_in+28,r24
1303 08b4 8281 ldd r24,Z+2
1304 08b6 9927 clr r25
1305 08b8 87FD sbrc r24,7
1306 08ba 9095 com r25
1307 08bc 9093 0000 sts (PPM_in+30)+1,r25
1308 08c0 8093 0000 sts PPM_in+30,r24
1309 08c4 8381 ldd r24,Z+3
1310 08c6 9927 clr r25
1311 08c8 87FD sbrc r24,7
1312 08ca 9095 com r25
1313 08cc 9093 0000 sts (PPM_in+32)+1,r25
1314 08d0 8093 0000 sts PPM_in+32,r24
1315 08d4 8481 ldd r24,Z+4
1316 08d6 9927 clr r25
1317 08d8 87FD sbrc r24,7
1318 08da 9095 com r25
1319 08dc 9093 0000 sts (PPM_in+34)+1,r25
1320 08e0 8093 0000 sts PPM_in+34,r24
1321 08e4 8581 ldd r24,Z+5
1322 08e6 9927 clr r25
1323 08e8 87FD sbrc r24,7
1324 08ea 9095 com r25
1325 08ec 9093 0000 sts (PPM_in+36)+1,r25
1326 08f0 8093 0000 sts PPM_in+36,r24
1327 08f4 8681 ldd r24,Z+6
1328 08f6 9927 clr r25
1329 08f8 87FD sbrc r24,7
1330 08fa 9095 com r25
1331 08fc 9093 0000 sts (PPM_in+38)+1,r25
1332 0900 8093 0000 sts PPM_in+38,r24
1333 0904 8781 ldd r24,Z+7
1334 0906 9927 clr r25
1335 0908 87FD sbrc r24,7
1336 090a 9095 com r25
1337 090c 9093 0000 sts (PPM_in+40)+1,r25
1338 0910 8093 0000 sts PPM_in+40,r24
1339 0914 8085 ldd r24,Z+8
1340 0916 9927 clr r25
1341 0918 87FD sbrc r24,7
1342 091a 9095 com r25
1343 091c 9093 0000 sts (PPM_in+42)+1,r25
1344 0920 8093 0000 sts PPM_in+42,r24
1345 0924 8185 ldd r24,Z+9
1346 0926 9927 clr r25
1347 0928 87FD sbrc r24,7
1348 092a 9095 com r25
1349 092c 9093 0000 sts (PPM_in+44)+1,r25
1350 0930 8093 0000 sts PPM_in+44,r24
1351 0934 8285 ldd r24,Z+10
1352 0936 9927 clr r25
1353 0938 87FD sbrc r24,7
1354 093a 9095 com r25
1355 093c 9093 0000 sts (PPM_in+46)+1,r25
1356 0940 8093 0000 sts PPM_in+46,r24
1357 0944 8385 ldd r24,Z+11
1358 0946 9927 clr r25
1359 0948 87FD sbrc r24,7
1360 094a 9095 com r25
1361 094c 9093 0000 sts (PPM_in+48)+1,r25
1362 0950 8093 0000 sts PPM_in+48,r24
1363 0954 00C0 rjmp .L145
1364 .L115:
1365 0956 E091 0000 lds r30,pRxData
1366 095a F091 0000 lds r31,(pRxData)+1
1367 095e 8081 ld r24,Z
1368 0960 0E94 0000 call I2C_ReadBLConfig
1369 0964 8A83 std Y+2,r24
1370 0966 8823 tst r24
1371 0968 01F4 brne .L116
1372 096a 81E0 ldi r24,lo8(1)
1373 096c 8983 std Y+1,r24
1374 096e 00C0 rjmp .L118
1375 .L116:
1376 0970 1982 std Y+1,__zero_reg__
1377 .L118:
1378 0972 8091 0000 lds r24,UebertragungAbgeschlossen
1379 0976 8823 tst r24
1380 0978 01F0 breq .L118
1381 097a 88E0 ldi r24,lo8(8)
1382 097c 90E0 ldi r25,hi8(8)
1383 097e 9F93 push r25
1384 0980 8F93 push r24
1385 0982 80E0 ldi r24,lo8(BLConfig)
1386 0984 90E0 ldi r25,hi8(BLConfig)
1387 0986 9F93 push r25
1388 0988 8F93 push r24
1389 098a 21E0 ldi r18,lo8(1)
1390 098c 30E0 ldi r19,hi8(1)
1391 098e 3F93 push r19
1392 0990 2F93 push r18
1393 0992 8091 0000 lds r24,pRxData
1394 0996 9091 0000 lds r25,(pRxData)+1
1395 099a 9F93 push r25
1396 099c 8F93 push r24
1397 099e 3F93 push r19
1398 09a0 2F93 push r18
1399 09a2 CE01 movw r24,r28
1400 09a4 0296 adiw r24,2
1401 09a6 9F93 push r25
1402 09a8 8F93 push r24
1403 09aa 3F93 push r19
1404 09ac 2F93 push r18
1405 09ae CE01 movw r24,r28
1406 09b0 820F add r24,r18
1407 09b2 931F adc r25,r19
1408 09b4 9F93 push r25
1409 09b6 8F93 push r24
1410 09b8 84E0 ldi r24,lo8(4)
1411 09ba 8F93 push r24
1412 09bc 81E0 ldi r24,lo8(1)
1413 09be 8F93 push r24
1414 09c0 85E5 ldi r24,lo8(85)
1415 09c2 8F93 push r24
1416 09c4 0E94 0000 call SendOutData
1417 09c8 EDB7 in r30,__SP_L__
1418 09ca FEB7 in r31,__SP_H__
1419 09cc 7396 adiw r30,19
1420 09ce 00C0 rjmp .L181
1421 .L121:
1422 09d0 8091 0000 lds r24,RxDataLen
1423 09d4 8930 cpi r24,lo8(9)
1424 09d6 00F4 brsh .+2
1425 09d8 00C0 rjmp .L145
1426 09da 2091 0000 lds r18,pRxData
1427 09de 3091 0000 lds r19,(pRxData)+1
1428 09e2 2F5F subi r18,lo8(-(1))
1429 09e4 3F4F sbci r19,hi8(-(1))
1430 09e6 88E0 ldi r24,lo8(8)
1431 09e8 A0E0 ldi r26,lo8(BLConfig)
1432 09ea B0E0 ldi r27,hi8(BLConfig)
1433 09ec F901 movw r30,r18
1434 09ee 0190 ld __tmp_reg__,Z+
1435 09f0 0D92 st X+,__tmp_reg__
1436 09f2 8A95 dec r24
1437 09f4 01F4 brne .-8
1438 09f6 D901 movw r26,r18
1439 09f8 8E91 ld r24,-X
1440 09fa 0E94 0000 call I2C_WriteBLConfig
1441 09fe 8A83 std Y+2,r24
1442 0a00 8823 tst r24
1443 0a02 01F4 brne .L123
1444 0a04 81E0 ldi r24,lo8(1)
1445 0a06 8983 std Y+1,r24
1446 0a08 00C0 rjmp .L125
1447 .L123:
1448 0a0a 1982 std Y+1,__zero_reg__
1449 .L125:
1450 0a0c 8091 0000 lds r24,UebertragungAbgeschlossen
1451 0a10 8823 tst r24
1452 0a12 01F0 breq .L125
1453 0a14 21E0 ldi r18,lo8(1)
1454 0a16 30E0 ldi r19,hi8(1)
1455 0a18 3F93 push r19
1456 0a1a 2F93 push r18
1457 0a1c CE01 movw r24,r28
1458 0a1e 0296 adiw r24,2
1459 0a20 9F93 push r25
1460 0a22 8F93 push r24
1461 0a24 3F93 push r19
1462 0a26 2F93 push r18
1463 0a28 CE01 movw r24,r28
1464 0a2a 820F add r24,r18
1465 0a2c 931F adc r25,r19
1466 0a2e 9F93 push r25
1467 0a30 8F93 push r24
1468 0a32 82E0 ldi r24,lo8(2)
1469 0a34 8F93 push r24
1470 0a36 81E0 ldi r24,lo8(1)
1471 0a38 8F93 push r24
1472 0a3a 87E5 ldi r24,lo8(87)
1473 .L185:
1474 0a3c 8F93 push r24
1475 0a3e 0E94 0000 call SendOutData
1476 0a42 EDB7 in r30,__SP_L__
1477 0a44 FEB7 in r31,__SP_H__
1478 0a46 3B96 adiw r30,11
1479 .L181:
1480 0a48 EDBF out __SP_L__,r30
1481 0a4a 00C0 rjmp .L145
1482 .L128:
1483 0a4c 8091 0000 lds r24,MotorenEin
1484 0a50 8823 tst r24
1485 0a52 01F0 breq .+2
1486 0a54 00C0 rjmp .L145
1487 0a56 0E94 0000 call LIBFC_GetCPUType
1488 0a5a 8983 std Y+1,r24
1489 0a5c 8230 cpi r24,lo8(2)
1490 0a5e 01F0 breq .L131
1491 0a60 8430 cpi r24,lo8(4)
1492 0a62 01F0 breq .+2
1493 0a64 00C0 rjmp .L145
1494 .L131:
1495 0a66 20E4 ldi r18,lo8(64)
1496 0a68 30E0 ldi r19,hi8(64)
1497 /* #APP */
1498 0a6a F894 cli
1499 /* #NOAPP */
1500 0a6c 8091 C100 lds r24,193
1501 0a70 8F73 andi r24,lo8(63)
1502 0a72 8093 C100 sts 193,r24
1503 0a76 8091 C900 lds r24,201
1504 0a7a 8F73 andi r24,lo8(63)
1505 0a7c 8093 C900 sts 201,r24
1506 0a80 8091 C100 lds r24,193
1507 0a84 877E andi r24,lo8(-25)
1508 0a86 8093 C100 sts 193,r24
1509 0a8a 8091 C900 lds r24,201
1510 0a8e 877E andi r24,lo8(-25)
1511 0a90 8093 C900 sts 201,r24
1512 .L180:
1513 0a94 8091 C800 lds r24,200
1514 0a98 87FF sbrs r24,7
1515 0a9a 00C0 rjmp .L173
1516 0a9c 8091 CE00 lds r24,206
1517 0aa0 00C0 rjmp .L180
1518 .L173:
1519 0aa2 8091 C000 lds r24,192
1520 0aa6 87FF sbrs r24,7
1521 0aa8 00C0 rjmp .L175
1522 0aaa 8091 C600 lds r24,198
1523 0aae 00C0 rjmp .L173
1524 .L175:
1525 0ab0 E091 0000 lds r30,pRxData
1526 0ab4 F091 0000 lds r31,(pRxData)+1
1527 0ab8 E081 ld r30,Z
1528 0aba E130 cpi r30,lo8(1)
1529 0abc 01F4 brne .L138
1530 0abe 82E0 ldi r24,lo8(2)
1531 0ac0 8093 0000 sts ReceiverUpdateModeActive,r24
1532 0ac4 00C0 rjmp .L139
1533 .L138:
1534 0ac6 E436 cpi r30,lo8(100)
1535 0ac8 01F4 brne .L140
1536 0aca 21E8 ldi r18,lo8(129)
1537 0acc 30E0 ldi r19,hi8(129)
1538 .L140:
1539 0ace 81E0 ldi r24,lo8(1)
1540 0ad0 8093 0000 sts ReceiverUpdateModeActive,r24
1541 0ad4 832F mov r24,r19
1542 0ad6 9927 clr r25
1543 0ad8 8093 CD00 sts 205,r24
1544 0adc 2093 CC00 sts 204,r18
1545 0ae0 8091 CD00 lds r24,205
1546 0ae4 8093 C500 sts 197,r24
1547 0ae8 8091 CC00 lds r24,204
1548 0aec 8093 C400 sts 196,r24
1549 0af0 8091 CA00 lds r24,202
1550 0af4 8F7D andi r24,lo8(-33)
1551 0af6 8093 CA00 sts 202,r24
1552 0afa 8091 CA00 lds r24,202
1553 0afe 8F7E andi r24,lo8(-17)
1554 0b00 8093 CA00 sts 202,r24
1555 0b04 8091 C900 lds r24,201
1556 0b08 8B7F andi r24,lo8(-5)
1557 0b0a 8093 C900 sts 201,r24
1558 0b0e 8091 CA00 lds r24,202
1559 0b12 8460 ori r24,lo8(4)
1560 0b14 8093 CA00 sts 202,r24
1561 0b18 8091 CA00 lds r24,202
1562 0b1c 8260 ori r24,lo8(2)
1563 0b1e 8093 CA00 sts 202,r24
1564 .L139:
1565 0b22 8091 CA00 lds r24,202
1566 0b26 877F andi r24,lo8(-9)
1567 0b28 8093 CA00 sts 202,r24
1568 0b2c 8091 C200 lds r24,194
1569 0b30 877F andi r24,lo8(-9)
1570 0b32 8093 C200 sts 194,r24
1571 0b36 8091 C900 lds r24,201
1572 0b3a 8E7F andi r24,lo8(-2)
1573 0b3c 8093 C900 sts 201,r24
1574 0b40 8091 C100 lds r24,193
1575 0b44 8861 ori r24,lo8(24)
1576 0b46 8093 C100 sts 193,r24
1577 0b4a 8091 C900 lds r24,201
1578 0b4e 8861 ori r24,lo8(24)
1579 0b50 8093 C900 sts 201,r24
1580 0b54 8091 C100 lds r24,193
1581 0b58 8068 ori r24,lo8(-128)
1582 0b5a 8093 C100 sts 193,r24
1583 0b5e 8091 C900 lds r24,201
1584 0b62 8068 ori r24,lo8(-128)
1585 0b64 8093 C900 sts 201,r24
1586 0b68 1092 6E00 sts 110,__zero_reg__
1587 0b6c 1092 6F00 sts 111,__zero_reg__
1588 0b70 1092 7000 sts 112,__zero_reg__
1589 /* #APP */
1590 0b74 7894 sei
1591 /* #NOAPP */
1592 .L145:
1593 0b76 8091 0000 lds r24,RxdBuffer+2
1594 0b7a 9927 clr r25
1595 0b7c 8436 cpi r24,100
1596 0b7e 9105 cpc r25,__zero_reg__
1597 0b80 01F4 brne .+2
1598 0b82 00C0 rjmp .L160
1599 0b84 8536 cpi r24,101
1600 0b86 9105 cpc r25,__zero_reg__
1601 0b88 04F4 brge .L169
1602 0b8a 8136 cpi r24,97
1603 0b8c 9105 cpc r25,__zero_reg__
1604 0b8e 01F4 brne .+2
1605 0b90 00C0 rjmp .L154
1606 0b92 8236 cpi r24,98
1607 0b94 9105 cpc r25,__zero_reg__
1608 0b96 04F4 brge .L170
1609 0b98 8B34 cpi r24,75
1610 0b9a 9105 cpc r25,__zero_reg__
1611 0b9c 01F4 brne .+2
1612 0b9e 00C0 rjmp .L153
1613 0ba0 00C0 rjmp .L65
1614 .L170:
1615 0ba2 8236 cpi r24,98
1616 0ba4 9105 cpc r25,__zero_reg__
1617 0ba6 01F4 brne .+2
1618 0ba8 00C0 rjmp .L156
1619 0baa 8336 cpi r24,99
1620 0bac 9105 cpc r25,__zero_reg__
1621 0bae 01F4 brne .+2
1622 0bb0 00C0 rjmp .L157
1623 0bb2 00C0 rjmp .L65
1624 .L169:
1625 0bb4 8C36 cpi r24,108
1626 0bb6 9105 cpc r25,__zero_reg__
1627 0bb8 01F4 brne .+2
1628 0bba 00C0 rjmp .L165
1629 0bbc 8D36 cpi r24,109
1630 0bbe 9105 cpc r25,__zero_reg__
1631 0bc0 04F4 brge .L171
1632 0bc2 8736 cpi r24,103
1633 0bc4 9105 cpc r25,__zero_reg__
1634 0bc6 01F4 brne .+2
1635 0bc8 00C0 rjmp .L167
1636 0bca 8836 cpi r24,104
1637 0bcc 9105 cpc r25,__zero_reg__
1638 0bce 01F4 brne .+2
1639 0bd0 00C0 rjmp .L162
1640 0bd2 00C0 rjmp .L65
1641 .L171:
1642 0bd4 8437 cpi r24,116
1643 0bd6 9105 cpc r25,__zero_reg__
1644 0bd8 01F0 breq .L147
1645 0bda 8637 cpi r24,118
1646 0bdc 9105 cpc r25,__zero_reg__
1647 0bde 01F4 brne .+2
1648 0be0 00C0 rjmp .L166
1649 0be2 00C0 rjmp .L65
1650 .L147:
1651 0be4 8091 0000 lds r24,AnzahlEmpfangsBytes
1652 0be8 A091 0000 lds r26,pRxData
1653 0bec B091 0000 lds r27,(pRxData)+1
1654 0bf0 8031 cpi r24,lo8(16)
1655 0bf2 00F0 brlo .L148
1656 0bf4 80E1 ldi r24,lo8(16)
1657 0bf6 E0E0 ldi r30,lo8(MotorTest)
1658 0bf8 F0E0 ldi r31,hi8(MotorTest)
1659 0bfa 0D90 ld __tmp_reg__,X+
1660 0bfc 0192 st Z+,__tmp_reg__
1661 0bfe 8A95 dec r24
1662 0c00 01F4 brne .-8
1663 0c02 00C0 rjmp .L150
1664 .L148:
1665 0c04 8D91 ld r24,X+
1666 0c06 9D91 ld r25,X+
1667 0c08 0D90 ld __tmp_reg__,X+
1668 0c0a BC91 ld r27,X
1669 0c0c A02D mov r26,__tmp_reg__
1670 0c0e 8093 0000 sts MotorTest,r24
1671 0c12 9093 0000 sts (MotorTest)+1,r25
1672 0c16 A093 0000 sts (MotorTest)+2,r26
1673 0c1a B093 0000 sts (MotorTest)+3,r27
1674 .L150:
1675 0c1e 8091 0000 lds r24,UebertragungAbgeschlossen
1676 0c22 8823 tst r24
1677 0c24 01F0 breq .L150
1678 0c26 1F92 push __zero_reg__
1679 0c28 8091 0000 lds r24,MeineSlaveAdresse
1680 0c2c 8F93 push r24
1681 0c2e 84E5 ldi r24,lo8(84)
1682 0c30 8F93 push r24
1683 0c32 0E94 0000 call SendOutData
1684 0c36 8AEF ldi r24,lo8(-6)
1685 0c38 8093 0000 sts PC_MotortestActive,r24
1686 0c3c 8FEF ldi r24,lo8(-1)
1687 0c3e 8093 0000 sts PcZugriff,r24
1688 0c42 80EA ldi r24,lo8(4000)
1689 0c44 9FE0 ldi r25,hi8(4000)
1690 0c46 0E94 0000 call SetDelay
1691 0c4a 9093 0000 sts (AboTimeOut)+1,r25
1692 0c4e 8093 0000 sts AboTimeOut,r24
1693 0c52 0F90 pop __tmp_reg__
1694 0c54 0F90 pop __tmp_reg__
1695 0c56 0F90 pop __tmp_reg__
1696 0c58 00C0 rjmp .L65
1697 .L153:
1698 0c5a E091 0000 lds r30,pRxData
1699 0c5e F091 0000 lds r31,(pRxData)+1
1700 0c62 8081 ld r24,Z
1701 0c64 9181 ldd r25,Z+1
1702 0c66 9093 0000 sts (KompassValue)+1,r25
1703 0c6a 8093 0000 sts KompassValue,r24
1704 0c6e 00C0 rjmp .L65
1705 .L154:
1706 0c70 E091 0000 lds r30,pRxData
1707 0c74 F091 0000 lds r31,(pRxData)+1
1708 0c78 8081 ld r24,Z
1709 0c7a 8093 0000 sts DebugTextAnforderung,r24
1710 0c7e 8032 cpi r24,lo8(32)
1711 0c80 00F0 brlo .L183
1712 0c82 8FE1 ldi r24,lo8(31)
1713 0c84 8093 0000 sts DebugTextAnforderung,r24
1714 0c88 00C0 rjmp .L183
1715 .L156:
1716 0c8a A091 0000 lds r26,pRxData
1717 0c8e B091 0000 lds r27,(pRxData)+1
1718 0c92 8BE0 ldi r24,lo8(11)
1719 0c94 E0E0 ldi r30,lo8(ExternControl)
1720 0c96 F0E0 ldi r31,hi8(ExternControl)
1721 0c98 0D90 ld __tmp_reg__,X+
1722 0c9a 0192 st Z+,__tmp_reg__
1723 0c9c 8A95 dec r24
1724 0c9e 01F4 brne .-8
1725 0ca0 8091 0000 lds r24,ExternControl+9
1726 0ca4 8093 0000 sts ConfirmFrame,r24
1727 .L183:
1728 0ca8 8FEF ldi r24,lo8(-1)
1729 0caa 8093 0000 sts PcZugriff,r24
1730 0cae 00C0 rjmp .L65
1731 .L157:
1732 0cb0 8091 0000 lds r24,Intervall3D
1733 0cb4 9091 0000 lds r25,(Intervall3D)+1
1734 0cb8 892B or r24,r25
1735 0cba 01F4 brne .L158
1736 0cbc E091 0000 lds r30,pRxData
1737 0cc0 F091 0000 lds r31,(pRxData)+1
1738 0cc4 E081 ld r30,Z
1739 0cc6 EE23 tst r30
1740 0cc8 01F0 breq .L158
1741 0cca 8AE0 ldi r24,lo8(10)
1742 0ccc E89F mul r30,r24
1743 0cce C001 movw r24,r0
1744 0cd0 1124 clr r1
1745 0cd2 0E94 0000 call SetDelay
1746 0cd6 9093 0000 sts (Timer3D)+1,r25
1747 0cda 8093 0000 sts Timer3D,r24
1748 .L158:
1749 0cde E091 0000 lds r30,pRxData
1750 0ce2 F091 0000 lds r31,(pRxData)+1
1751 0ce6 9081 ld r25,Z
1752 0ce8 8AE0 ldi r24,lo8(10)
1753 0cea 989F mul r25,r24
1754 0cec C001 movw r24,r0
1755 0cee 1124 clr r1
1756 0cf0 9093 0000 sts (Intervall3D)+1,r25
1757 0cf4 8093 0000 sts Intervall3D,r24
1758 0cf8 00C0 rjmp .L161
1759 .L160:
1760 0cfa 8FEF ldi r24,lo8(-1)
1761 0cfc 8093 0000 sts PcZugriff,r24
1762 0d00 E091 0000 lds r30,pRxData
1763 0d04 F091 0000 lds r31,(pRxData)+1
1764 0d08 9081 ld r25,Z
1765 0d0a 8AE0 ldi r24,lo8(10)
1766 0d0c 989F mul r25,r24
1767 0d0e C001 movw r24,r0
1768 0d10 1124 clr r1
1769 0d12 9093 0000 sts (DebugDataIntervall)+1,r25
1770 0d16 8093 0000 sts DebugDataIntervall,r24
1771 0d1a 892B or r24,r25
1772 0d1c 01F0 breq .L161
1773 0d1e 81E0 ldi r24,lo8(1)
1774 0d20 8093 0000 sts DebugDataAnforderung,r24
1775 .L161:
1776 0d24 80EA ldi r24,lo8(4000)
1777 0d26 9FE0 ldi r25,hi8(4000)
1778 0d28 0E94 0000 call SetDelay
1779 0d2c 9093 0000 sts (AboTimeOut)+1,r25
1780 0d30 8093 0000 sts AboTimeOut,r24
1781 0d34 00C0 rjmp .L65
1782 .L162:
1783 0d36 8FEF ldi r24,lo8(-1)
1784 0d38 8093 0000 sts PcZugriff,r24
1785 0d3c E091 0000 lds r30,pRxData
1786 0d40 F091 0000 lds r31,(pRxData)+1
1787 0d44 9081 ld r25,Z
1788 0d46 97FD sbrc r25,7
1789 0d48 00C0 rjmp .L163
1790 0d4a 82E0 ldi r24,lo8(2)
1791 0d4c 8093 0000 sts DisplayLine,r24
1792 0d50 1092 0000 sts (Display_Interval)+1,__zero_reg__
1793 0d54 1092 0000 sts Display_Interval,__zero_reg__
1794 0d58 00C0 rjmp .L164
1795 .L163:
1796 0d5a 9095 com r25
1797 0d5c 8091 0000 lds r24,RemoteKeys
1798 0d60 892B or r24,r25
1799 0d62 8093 0000 sts RemoteKeys,r24
1800 0d66 9181 ldd r25,Z+1
1801 0d68 8AE0 ldi r24,lo8(10)
1802 0d6a 989F mul r25,r24
1803 0d6c C001 movw r24,r0
1804 0d6e 1124 clr r1
1805 0d70 9093 0000 sts (Display_Interval)+1,r25
1806 0d74 8093 0000 sts Display_Interval,r24
1807 0d78 84E0 ldi r24,lo8(4)
1808 0d7a 8093 0000 sts DisplayLine,r24
1809 0d7e 80EA ldi r24,lo8(4000)
1810 0d80 9FE0 ldi r25,hi8(4000)
1811 0d82 0E94 0000 call SetDelay
1812 0d86 9093 0000 sts (AboTimeOut)+1,r25
1813 0d8a 8093 0000 sts AboTimeOut,r24
1814 .L164:
1815 0d8e 81E0 ldi r24,lo8(1)
1816 0d90 8093 0000 sts DebugDisplayAnforderung,r24
1817 0d94 00C0 rjmp .L65
1818 .L165:
1819 0d96 8FEF ldi r24,lo8(-1)
1820 0d98 8093 0000 sts PcZugriff,r24
1821 0d9c E091 0000 lds r30,pRxData
1822 0da0 F091 0000 lds r31,(pRxData)+1
1823 0da4 8081 ld r24,Z
1824 0da6 8093 0000 sts MenuePunkt,r24
1825 0daa 81E0 ldi r24,lo8(1)
1826 0dac 8093 0000 sts DebugDisplayAnforderung1,r24
1827 0db0 00C0 rjmp .L65
1828 .L166:
1829 0db2 81E0 ldi r24,lo8(1)
1830 0db4 8093 0000 sts GetVersionAnforderung,r24
1831 0db8 00C0 rjmp .L65
1832 .L167:
1833 0dba 81E0 ldi r24,lo8(1)
1834 0dbc 8093 0000 sts GetExternalControl,r24
1835 .L65:
1836 0dc0 1092 0000 sts NeuerDatensatzEmpfangen,__zero_reg__
1837 0dc4 1092 0000 sts (pRxData)+1,__zero_reg__
1838 0dc8 1092 0000 sts pRxData,__zero_reg__
1839 0dcc 1092 0000 sts RxDataLen,__zero_reg__
1840 .L63:
1841 /* epilogue: frame size=2 */
1842 0dd0 E3E0 ldi r30,3
1843 0dd2 CE5F subi r28,-2
1844 0dd4 0C94 0000 jmp __epilogue_restores__+30
1845 /* epilogue end (size=4) */
1846 /* function BearbeiteRxDaten size 1128 (1118) */
1848 .global uart_putchar
1850 uart_putchar:
1851 /* prologue: frame size=0 */
1852 /* prologue end (size=0) */
1853 0dd8 982F mov r25,r24
1854 .L188:
1855 0dda 8091 C000 lds r24,192
1856 0dde 85FF sbrs r24,5
1857 0de0 00C0 rjmp .L188
1858 0de2 9093 C600 sts 198,r25
1859 /* epilogue: frame size=0 */
1860 0de6 0895 ret
1861 /* epilogue end (size=1) */
1862 /* function uart_putchar size 8 (7) */
1864 .global UART_Init
1866 UART_Init:
1867 /* prologue: frame size=0 */
1868 0de8 0F93 push r16
1869 0dea 1F93 push r17
1870 /* prologue end (size=2) */
1871 0dec 88E1 ldi r24,lo8(24)
1872 0dee 8093 C100 sts 193,r24
1873 0df2 8091 C000 lds r24,192
1874 0df6 8260 ori r24,lo8(2)
1875 0df8 8093 C000 sts 192,r24
1876 0dfc 8091 C100 lds r24,193
1877 0e00 8068 ori r24,lo8(-128)
1878 0e02 8093 C100 sts 193,r24
1879 0e06 8091 C100 lds r24,193
1880 0e0a 8064 ori r24,lo8(64)
1881 0e0c 8093 C100 sts 193,r24
1882 0e10 00E0 ldi r16,lo8(0)
1883 0e12 10E0 ldi r17,hi8(0)
1884 0e14 0093 C500 sts 197,r16
1885 0e18 8AE2 ldi r24,lo8(42)
1886 0e1a 90E0 ldi r25,hi8(42)
1887 0e1c 8093 C400 sts 196,r24
1888 0e20 8091 0000 lds r24,DebugDataIntervall
1889 0e24 9091 0000 lds r25,(DebugDataIntervall)+1
1890 0e28 0E94 0000 call SetDelay
1891 0e2c 9093 0000 sts (Debug_Timer)+1,r25
1892 0e30 8093 0000 sts Debug_Timer,r24
1893 0e34 8CED ldi r24,lo8(220)
1894 0e36 90E0 ldi r25,hi8(220)
1895 0e38 0E94 0000 call SetDelay
1896 0e3c 9093 0000 sts (Kompass_Timer)+1,r25
1897 0e40 8093 0000 sts Kompass_Timer,r24
1898 0e44 1092 0000 sts VersionInfo,__zero_reg__
1899 0e48 8AE5 ldi r24,lo8(90)
1900 0e4a 8093 0000 sts VersionInfo+1,r24
1901 0e4e 83E0 ldi r24,lo8(3)
1902 0e50 8093 0000 sts VersionInfo+4,r24
1903 0e54 8BE0 ldi r24,lo8(11)
1904 0e56 8093 0000 sts VersionInfo+2,r24
1905 0e5a 1092 0000 sts VersionInfo+3,__zero_reg__
1906 0e5e 1093 0000 sts (pRxData)+1,r17
1907 0e62 0093 0000 sts pRxData,r16
1908 0e66 1092 0000 sts RxDataLen,__zero_reg__
1909 /* epilogue: frame size=0 */
1910 0e6a 1F91 pop r17
1911 0e6c 0F91 pop r16
1912 0e6e 0895 ret
1913 /* epilogue end (size=3) */
1914 /* function UART_Init size 68 (63) */
1916 .section .progmem.data
1919 __c.0:
1920 0200 2121 2120 .string "!!! INCOMPATIBLE !!!"
1920 494E 434F
1920 4D50 4154
1920 4942 4C45
1920 2021 2121
1921 .text
1922 .global DatenUebertragung
1924 DatenUebertragung:
1925 /* prologue: frame size=16 */
1926 0e70 A0E1 ldi r26,lo8(16)
1927 0e72 B0E0 ldi r27,hi8(16)
1928 0e74 E0E0 ldi r30,pm_lo8(1f)
1929 0e76 F0E0 ldi r31,pm_hi8(1f)
1930 0e78 0C94 0000 jmp __prologue_saves__+24
1931 1:
1932 /* prologue end (size=6) */
1933 0e7c 8091 0000 lds r24,UebertragungAbgeschlossen
1934 0e80 8823 tst r24
1935 0e82 01F4 brne .+2
1936 0e84 00C0 rjmp .L192
1937 0e86 8091 0000 lds r24,AboTimeOut
1938 0e8a 9091 0000 lds r25,(AboTimeOut)+1
1939 0e8e 0E94 0000 call CheckDelay
1940 0e92 8823 tst r24
1941 0e94 01F0 breq .L194
1942 0e96 1092 0000 sts (Display_Interval)+1,__zero_reg__
1943 0e9a 1092 0000 sts Display_Interval,__zero_reg__
1944 0e9e 1092 0000 sts (DebugDataIntervall)+1,__zero_reg__
1945 0ea2 1092 0000 sts DebugDataIntervall,__zero_reg__
1946 0ea6 1092 0000 sts (Intervall3D)+1,__zero_reg__
1947 0eaa 1092 0000 sts Intervall3D,__zero_reg__
1948 .L194:
1949 0eae 8091 0000 lds r24,Display_Interval
1950 0eb2 9091 0000 lds r25,(Display_Interval)+1
1951 0eb6 892B or r24,r25
1952 0eb8 01F0 breq .L197
1953 0eba 8091 0000 lds r24,Display_Timer
1954 0ebe 9091 0000 lds r25,(Display_Timer)+1
1955 0ec2 0E94 0000 call CheckDelay
1956 0ec6 8823 tst r24
1957 0ec8 01F4 brne .L196
1958 .L197:
1959 0eca 8091 0000 lds r24,DebugDisplayAnforderung
1960 0ece 8823 tst r24
1961 0ed0 01F4 brne .+2
1962 0ed2 00C0 rjmp .L195
1963 .L196:
1964 0ed4 8091 0000 lds r24,UebertragungAbgeschlossen
1965 0ed8 8823 tst r24
1966 0eda 01F4 brne .+2
1967 0edc 00C0 rjmp .L195
1968 0ede 8091 0000 lds r24,DisplayLine
1969 0ee2 00E0 ldi r16,lo8(DisplayBuff)
1970 0ee4 10E0 ldi r17,hi8(DisplayBuff)
1971 0ee6 8430 cpi r24,lo8(4)
1972 0ee8 00F0 brlo .L198
1973 0eea 0E94 0000 call Menu
1974 0eee 80E5 ldi r24,lo8(80)
1975 0ef0 90E0 ldi r25,hi8(80)
1976 0ef2 9F93 push r25
1977 0ef4 8F93 push r24
1978 0ef6 1F93 push r17
1979 0ef8 0F93 push r16
1980 0efa 81E0 ldi r24,lo8(1)
1981 0efc 8F93 push r24
1982 0efe 8F93 push r24
1983 0f00 88E4 ldi r24,lo8(72)
1984 0f02 8F93 push r24
1985 0f04 0E94 0000 call SendOutData
1986 0f08 2DB7 in r18,__SP_L__
1987 0f0a 3EB7 in r19,__SP_H__
1988 0f0c 295F subi r18,lo8(-(7))
1989 0f0e 3F4F sbci r19,hi8(-(7))
1990 0f10 2DBF out __SP_L__,r18
1991 0f12 00C0 rjmp .L199
1992 .L198:
1993 0f14 1092 0000 sts DispPtr,__zero_reg__
1994 0f18 80E0 ldi r24,lo8(__c.0)
1995 0f1a 90E0 ldi r25,hi8(__c.0)
1996 0f1c 9F93 push r25
1997 0f1e 8F93 push r24
1998 0f20 80E0 ldi r24,lo8(pm(Menu_Putchar))
1999 0f22 90E0 ldi r25,hi8(pm(Menu_Putchar))
2000 0f24 9F93 push r25
2001 0f26 8F93 push r24
2002 0f28 E091 0000 lds r30,_printf_P
2003 0f2c F091 0000 lds r31,(_printf_P)+1
2004 0f30 0995 icall
2005 0f32 84E1 ldi r24,lo8(20)
2006 0f34 90E0 ldi r25,hi8(20)
2007 0f36 9F93 push r25
2008 0f38 8F93 push r24
2009 0f3a 1F93 push r17
2010 0f3c 0F93 push r16
2011 0f3e 81E0 ldi r24,lo8(1)
2012 0f40 90E0 ldi r25,hi8(1)
2013 0f42 9F93 push r25
2014 0f44 8F93 push r24
2015 0f46 80E0 ldi r24,lo8(DisplayLine)
2016 0f48 90E0 ldi r25,hi8(DisplayLine)
2017 0f4a 9F93 push r25
2018 0f4c 8F93 push r24
2019 0f4e 82E0 ldi r24,lo8(2)
2020 0f50 8F93 push r24
2021 0f52 81E0 ldi r24,lo8(1)
2022 0f54 8F93 push r24
2023 0f56 88E4 ldi r24,lo8(72)
2024 0f58 8F93 push r24
2025 0f5a 0E94 0000 call SendOutData
2026 0f5e 8091 0000 lds r24,DisplayLine
2027 0f62 982F mov r25,r24
2028 0f64 8F5F subi r24,lo8(-(1))
2029 0f66 8093 0000 sts DisplayLine,r24
2030 0f6a 2DB7 in r18,__SP_L__
2031 0f6c 3EB7 in r19,__SP_H__
2032 0f6e 215F subi r18,lo8(-(15))
2033 0f70 3F4F sbci r19,hi8(-(15))
2034 0f72 2DBF out __SP_L__,r18
2035 0f74 9430 cpi r25,lo8(4)
2036 0f76 00F0 brlo .L199
2037 0f78 1092 0000 sts DisplayLine,__zero_reg__
2038 .L199:
2039 0f7c 8091 0000 lds r24,Display_Interval
2040 0f80 9091 0000 lds r25,(Display_Interval)+1
2041 0f84 0E94 0000 call SetDelay
2042 0f88 9093 0000 sts (Display_Timer)+1,r25
2043 0f8c 8093 0000 sts Display_Timer,r24
2044 0f90 1092 0000 sts DebugDisplayAnforderung,__zero_reg__
2045 .L195:
2046 0f94 8091 0000 lds r24,DebugDisplayAnforderung1
2047 0f98 8823 tst r24
2048 0f9a 01F0 breq .L201
2049 0f9c 8091 0000 lds r24,UebertragungAbgeschlossen
2050 0fa0 8823 tst r24
2051 0fa2 01F0 breq .L201
2052 0fa4 0E94 0000 call Menu
2053 0fa8 80E5 ldi r24,lo8(80)
2054 0faa 90E0 ldi r25,hi8(80)
2055 0fac 9F93 push r25
2056 0fae 8F93 push r24
2057 0fb0 80E0 ldi r24,lo8(DisplayBuff)
2058 0fb2 90E0 ldi r25,hi8(DisplayBuff)
2059 0fb4 9F93 push r25
2060 0fb6 8F93 push r24
2061 0fb8 21E0 ldi r18,lo8(1)
2062 0fba 30E0 ldi r19,hi8(1)
2063 0fbc 3F93 push r19
2064 0fbe 2F93 push r18
2065 0fc0 80E0 ldi r24,lo8(MaxMenue)
2066 0fc2 90E0 ldi r25,hi8(MaxMenue)
2067 0fc4 9F93 push r25
2068 0fc6 8F93 push r24
2069 0fc8 3F93 push r19
2070 0fca 2F93 push r18
2071 0fcc 80E0 ldi r24,lo8(MenuePunkt)
2072 0fce 90E0 ldi r25,hi8(MenuePunkt)
2073 0fd0 9F93 push r25
2074 0fd2 8F93 push r24
2075 0fd4 83E0 ldi r24,lo8(3)
2076 0fd6 8F93 push r24
2077 0fd8 81E0 ldi r24,lo8(1)
2078 0fda 8F93 push r24
2079 0fdc 8CE4 ldi r24,lo8(76)
2080 0fde 8F93 push r24
2081 0fe0 0E94 0000 call SendOutData
2082 0fe4 1092 0000 sts DebugDisplayAnforderung1,__zero_reg__
2083 0fe8 8DB7 in r24,__SP_L__
2084 0fea 9EB7 in r25,__SP_H__
2085 0fec 0F96 adiw r24,15
2086 0fee 8DBF out __SP_L__,r24
2087 .L201:
2088 0ff0 8091 0000 lds r24,GetVersionAnforderung
2089 0ff4 8823 tst r24
2090 0ff6 01F0 breq .L202
2091 0ff8 8091 0000 lds r24,UebertragungAbgeschlossen
2092 0ffc 8823 tst r24
2093 0ffe 01F0 breq .L202
2094 1000 8AE0 ldi r24,lo8(10)
2095 1002 90E0 ldi r25,hi8(10)
2096 1004 9F93 push r25
2097 1006 8F93 push r24
2098 1008 80E0 ldi r24,lo8(VersionInfo)
2099 100a 90E0 ldi r25,hi8(VersionInfo)
2100 100c 9F93 push r25
2101 100e 8F93 push r24
2102 1010 81E0 ldi r24,lo8(1)
2103 1012 8F93 push r24
2104 1014 8F93 push r24
2105 1016 86E5 ldi r24,lo8(86)
2106 1018 8F93 push r24
2107 101a 0E94 0000 call SendOutData
2108 101e 1092 0000 sts GetVersionAnforderung,__zero_reg__
2109 1022 2DB7 in r18,__SP_L__
2110 1024 3EB7 in r19,__SP_H__
2111 1026 295F subi r18,lo8(-(7))
2112 1028 3F4F sbci r19,hi8(-(7))
2113 102a 2DBF out __SP_L__,r18
2114 .L202:
2115 102c 8091 0000 lds r24,GetExternalControl
2116 1030 8823 tst r24
2117 1032 01F0 breq .L203
2118 1034 8091 0000 lds r24,UebertragungAbgeschlossen
2119 1038 8823 tst r24
2120 103a 01F0 breq .L203
2121 103c 8BE0 ldi r24,lo8(11)
2122 103e 90E0 ldi r25,hi8(11)
2123 1040 9F93 push r25
2124 1042 8F93 push r24
2125 1044 80E0 ldi r24,lo8(ExternControl)
2126 1046 90E0 ldi r25,hi8(ExternControl)
2127 1048 9F93 push r25
2128 104a 8F93 push r24
2129 104c 81E0 ldi r24,lo8(1)
2130 104e 8F93 push r24
2131 1050 8091 0000 lds r24,MeineSlaveAdresse
2132 1054 8F93 push r24
2133 1056 87E4 ldi r24,lo8(71)
2134 1058 8F93 push r24
2135 105a 0E94 0000 call SendOutData
2136 105e 1092 0000 sts GetExternalControl,__zero_reg__
2137 1062 8DB7 in r24,__SP_L__
2138 1064 9EB7 in r25,__SP_H__
2139 1066 0796 adiw r24,7
2140 1068 8DBF out __SP_L__,r24
2141 .L203:
2142 106a 8091 0000 lds r24,Kompass_Timer
2143 106e 9091 0000 lds r25,(Kompass_Timer)+1
2144 1072 0E94 0000 call CheckDelay
2145 1076 8823 tst r24
2146 1078 01F4 brne .+2
2147 107a 00C0 rjmp .L204
2148 107c 8091 0000 lds r24,UebertragungAbgeschlossen
2149 1080 8823 tst r24
2150 1082 01F4 brne .+2
2151 1084 00C0 rjmp .L204
2152 1086 8091 0000 lds r24,EE_Parameter+28
2153 108a 9927 clr r25
2154 108c 880F lsl r24
2155 108e 991F rol r25
2156 1090 880F lsl r24
2157 1092 991F rol r25
2158 1094 7C01 movw r14,r24
2159 1096 0027 clr r16
2160 1098 F7FC sbrc r15,7
2161 109a 0095 com r16
2162 109c 102F mov r17,r16
2163 109e 8091 0000 lds r24,IntegralNick
2164 10a2 9091 0000 lds r25,(IntegralNick)+1
2165 10a6 A091 0000 lds r26,(IntegralNick)+2
2166 10aa B091 0000 lds r27,(IntegralNick)+3
2167 10ae BC01 movw r22,r24
2168 10b0 CD01 movw r24,r26
2169 10b2 A801 movw r20,r16
2170 10b4 9701 movw r18,r14
2171 10b6 0E94 0000 call __divmodsi4
2172 10ba 3093 0000 sts (WinkelOut)+1,r19
2173 10be 2093 0000 sts WinkelOut,r18
2174 10c2 8091 0000 lds r24,IntegralRoll
2175 10c6 9091 0000 lds r25,(IntegralRoll)+1
2176 10ca A091 0000 lds r26,(IntegralRoll)+2
2177 10ce B091 0000 lds r27,(IntegralRoll)+3
2178 10d2 BC01 movw r22,r24
2179 10d4 CD01 movw r24,r26
2180 10d6 A801 movw r20,r16
2181 10d8 9701 movw r18,r14
2182 10da 0E94 0000 call __divmodsi4
2183 10de 3093 0000 sts (WinkelOut+2)+1,r19
2184 10e2 2093 0000 sts WinkelOut+2,r18
2185 10e6 8091 0000 lds r24,Parameter_UserParam1
2186 10ea 8093 0000 sts WinkelOut+4,r24
2187 10ee 8091 0000 lds r24,Parameter_UserParam2
2188 10f2 8093 0000 sts WinkelOut+5,r24
2189 10f6 88E0 ldi r24,lo8(8)
2190 10f8 90E0 ldi r25,hi8(8)
2191 10fa 9F93 push r25
2192 10fc 8F93 push r24
2193 10fe 80E0 ldi r24,lo8(WinkelOut)
2194 1100 90E0 ldi r25,hi8(WinkelOut)
2195 1102 9F93 push r25
2196 1104 8F93 push r24
2197 1106 81E0 ldi r24,lo8(1)
2198 1108 8F93 push r24
2199 110a 83E0 ldi r24,lo8(3)
2200 110c 8F93 push r24
2201 110e 8BE6 ldi r24,lo8(107)
2202 1110 8F93 push r24
2203 1112 0E94 0000 call SendOutData
2204 1116 8091 0000 lds r24,WinkelOut+6
2205 111a 2DB7 in r18,__SP_L__
2206 111c 3EB7 in r19,__SP_H__
2207 111e 295F subi r18,lo8(-(7))
2208 1120 3F4F sbci r19,hi8(-(7))
2209 1122 2DBF out __SP_L__,r18
2210 1124 8530 cpi r24,lo8(5)
2211 1126 00F0 brlo .L205
2212 1128 86E0 ldi r24,lo8(6)
2213 112a 8093 0000 sts WinkelOut+6,r24
2214 .L205:
2215 112e 83E6 ldi r24,lo8(99)
2216 1130 90E0 ldi r25,hi8(99)
2217 1132 0E94 0000 call SetDelay
2218 1136 9093 0000 sts (Kompass_Timer)+1,r25
2219 113a 8093 0000 sts Kompass_Timer,r24
2220 .L204:
2221 113e 8091 0000 lds r24,DebugDataIntervall
2222 1142 9091 0000 lds r25,(DebugDataIntervall)+1
2223 1146 892B or r24,r25
2224 1148 01F0 breq .L208
2225 114a 8091 0000 lds r24,Debug_Timer
2226 114e 9091 0000 lds r25,(Debug_Timer)+1
2227 1152 0E94 0000 call CheckDelay
2228 1156 8823 tst r24
2229 1158 01F4 brne .L207
2230 .L208:
2231 115a 8091 0000 lds r24,DebugDataAnforderung
2232 115e 8823 tst r24
2233 1160 01F0 breq .L206
2234 .L207:
2235 1162 8091 0000 lds r24,UebertragungAbgeschlossen
2236 1166 8823 tst r24
2237 1168 01F0 breq .L206
2238 116a 0E94 0000 call CopyDebugValues
2239 116e 82E4 ldi r24,lo8(66)
2240 1170 90E0 ldi r25,hi8(66)
2241 1172 9F93 push r25
2242 1174 8F93 push r24
2243 1176 80E0 ldi r24,lo8(DebugOut)
2244 1178 90E0 ldi r25,hi8(DebugOut)
2245 117a 9F93 push r25
2246 117c 8F93 push r24
2247 117e 81E0 ldi r24,lo8(1)
2248 1180 8F93 push r24
2249 1182 8F93 push r24
2250 1184 84E4 ldi r24,lo8(68)
2251 1186 8F93 push r24
2252 1188 0E94 0000 call SendOutData
2253 118c 1092 0000 sts DebugDataAnforderung,__zero_reg__
2254 1190 8DB7 in r24,__SP_L__
2255 1192 9EB7 in r25,__SP_H__
2256 1194 0796 adiw r24,7
2257 1196 8DBF out __SP_L__,r24
2258 1198 8091 0000 lds r24,DebugDataIntervall
2259 119c 9091 0000 lds r25,(DebugDataIntervall)+1
2260 11a0 0097 sbiw r24,0
2261 11a2 01F0 breq .L206
2262 11a4 0E94 0000 call SetDelay
2263 11a8 9093 0000 sts (Debug_Timer)+1,r25
2264 11ac 8093 0000 sts Debug_Timer,r24
2265 .L206:
2266 11b0 8091 0000 lds r24,Intervall3D
2267 11b4 9091 0000 lds r25,(Intervall3D)+1
2268 11b8 892B or r24,r25
2269 11ba 01F4 brne .+2
2270 11bc 00C0 rjmp .L210
2271 11be 8091 0000 lds r24,Timer3D
2272 11c2 9091 0000 lds r25,(Timer3D)+1
2273 11c6 0E94 0000 call CheckDelay
2274 11ca 8823 tst r24
2275 11cc 01F4 brne .+2
2276 11ce 00C0 rjmp .L210
2277 11d0 8091 0000 lds r24,UebertragungAbgeschlossen
2278 11d4 8823 tst r24
2279 11d6 01F4 brne .+2
2280 11d8 00C0 rjmp .L210
2281 11da 8091 0000 lds r24,EE_Parameter+28
2282 11de 9927 clr r25
2283 11e0 880F lsl r24
2284 11e2 991F rol r25
2285 11e4 880F lsl r24
2286 11e6 991F rol r25
2287 11e8 7C01 movw r14,r24
2288 11ea 0027 clr r16
2289 11ec F7FC sbrc r15,7
2290 11ee 0095 com r16
2291 11f0 102F mov r17,r16
2292 11f2 8091 0000 lds r24,IntegralNick
2293 11f6 9091 0000 lds r25,(IntegralNick)+1
2294 11fa A091 0000 lds r26,(IntegralNick)+2
2295 11fe B091 0000 lds r27,(IntegralNick)+3
2296 1202 BC01 movw r22,r24
2297 1204 CD01 movw r24,r26
2298 1206 A801 movw r20,r16
2299 1208 9701 movw r18,r14
2300 120a 0E94 0000 call __divmodsi4
2301 120e 3093 0000 sts (Data3D)+1,r19
2302 1212 2093 0000 sts Data3D,r18
2303 1216 8091 0000 lds r24,IntegralRoll
2304 121a 9091 0000 lds r25,(IntegralRoll)+1
2305 121e A091 0000 lds r26,(IntegralRoll)+2
2306 1222 B091 0000 lds r27,(IntegralRoll)+3
2307 1226 BC01 movw r22,r24
2308 1228 CD01 movw r24,r26
2309 122a A801 movw r20,r16
2310 122c 9701 movw r18,r14
2311 122e 0E94 0000 call __divmodsi4
2312 1232 3093 0000 sts (Data3D+2)+1,r19
2313 1236 2093 0000 sts Data3D+2,r18
2314 123a 2091 0000 lds r18,ErsatzKompass
2315 123e 3091 0000 lds r19,(ErsatzKompass)+1
2316 1242 4091 0000 lds r20,(ErsatzKompass)+2
2317 1246 5091 0000 lds r21,(ErsatzKompass)+3
2318 124a DA01 movw r26,r20
2319 124c C901 movw r24,r18
2320 124e 63E0 ldi r22,3
2321 1250 880F 1: lsl r24
2322 1252 991F rol r25
2323 1254 AA1F rol r26
2324 1256 BB1F rol r27
2325 1258 6A95 dec r22
2326 125a 01F4 brne 1b
2327 125c 820F add r24,r18
2328 125e 931F adc r25,r19
2329 1260 A41F adc r26,r20
2330 1262 B51F adc r27,r21
2331 1264 820F add r24,r18
2332 1266 931F adc r25,r19
2333 1268 A41F adc r26,r20
2334 126a B51F adc r27,r21
2335 126c 2091 0000 lds r18,GIER_GRAD_FAKTOR
2336 1270 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
2337 1274 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
2338 1278 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
2339 127c BC01 movw r22,r24
2340 127e CD01 movw r24,r26
2341 1280 0E94 0000 call __divmodsi4
2342 1284 3093 0000 sts (Data3D+4)+1,r19
2343 1288 2093 0000 sts Data3D+4,r18
2344 128c 8091 0000 lds r24,SummeNick
2345 1290 9091 0000 lds r25,(SummeNick)+1
2346 1294 A091 0000 lds r26,(SummeNick)+2
2347 1298 B091 0000 lds r27,(SummeNick)+3
2348 129c 49E0 ldi r20,9
2349 129e B595 1: asr r27
2350 12a0 A795 ror r26
2351 12a2 9795 ror r25
2352 12a4 8795 ror r24
2353 12a6 4A95 dec r20
2354 12a8 01F4 brne 1b
2355 12aa 8093 0000 sts Data3D+6,r24
2356 12ae 8091 0000 lds r24,SummeRoll
2357 12b2 9091 0000 lds r25,(SummeRoll)+1
2358 12b6 A091 0000 lds r26,(SummeRoll)+2
2359 12ba B091 0000 lds r27,(SummeRoll)+3
2360 12be 39E0 ldi r19,9
2361 12c0 B595 1: asr r27
2362 12c2 A795 ror r26
2363 12c4 9795 ror r25
2364 12c6 8795 ror r24
2365 12c8 3A95 dec r19
2366 12ca 01F4 brne 1b
2367 12cc 8093 0000 sts Data3D+7,r24
2368 12d0 8091 0000 lds r24,Mess_Integral_Gier
2369 12d4 9091 0000 lds r25,(Mess_Integral_Gier)+1
2370 12d8 A091 0000 lds r26,(Mess_Integral_Gier)+2
2371 12dc B091 0000 lds r27,(Mess_Integral_Gier)+3
2372 12e0 29E0 ldi r18,9
2373 12e2 B595 1: asr r27
2374 12e4 A795 ror r26
2375 12e6 9795 ror r25
2376 12e8 8795 ror r24
2377 12ea 2A95 dec r18
2378 12ec 01F4 brne 1b
2379 12ee 8093 0000 sts Data3D+8,r24
2380 12f2 8EE0 ldi r24,lo8(14)
2381 12f4 90E0 ldi r25,hi8(14)
2382 12f6 9F93 push r25
2383 12f8 8F93 push r24
2384 12fa 80E0 ldi r24,lo8(Data3D)
2385 12fc 90E0 ldi r25,hi8(Data3D)
2386 12fe 9F93 push r25
2387 1300 8F93 push r24
2388 1302 81E0 ldi r24,lo8(1)
2389 1304 8F93 push r24
2390 1306 8F93 push r24
2391 1308 83E4 ldi r24,lo8(67)
2392 130a 8F93 push r24
2393 130c 0E94 0000 call SendOutData
2394 1310 8091 0000 lds r24,Intervall3D
2395 1314 9091 0000 lds r25,(Intervall3D)+1
2396 1318 0E94 0000 call SetDelay
2397 131c 9093 0000 sts (Timer3D)+1,r25
2398 1320 8093 0000 sts Timer3D,r24
2399 1324 2DB7 in r18,__SP_L__
2400 1326 3EB7 in r19,__SP_H__
2401 1328 295F subi r18,lo8(-(7))
2402 132a 3F4F sbci r19,hi8(-(7))
2403 132c 2DBF out __SP_L__,r18
2404 .L210:
2405 132e 8091 0000 lds r24,DebugTextAnforderung
2406 1332 8F3F cpi r24,lo8(-1)
2407 1334 01F0 breq .L211
2408 1336 9927 clr r25
2409 1338 04E0 ldi r16,4
2410 133a 880F 1: lsl r24
2411 133c 991F rol r25
2412 133e 0A95 dec r16
2413 1340 01F4 brne 1b
2414 1342 8050 subi r24,lo8(-(ANALOG_TEXT))
2415 1344 9040 sbci r25,hi8(-(ANALOG_TEXT))
2416 1346 40E1 ldi r20,lo8(16)
2417 1348 50E0 ldi r21,hi8(16)
2418 134a BC01 movw r22,r24
2419 134c CE01 movw r24,r28
2420 134e 0196 adiw r24,1
2421 1350 0E94 0000 call memcpy_P
2422 1354 80E1 ldi r24,lo8(16)
2423 1356 90E0 ldi r25,hi8(16)
2424 1358 9F93 push r25
2425 135a 8F93 push r24
2426 135c CE01 movw r24,r28
2427 135e 0196 adiw r24,1
2428 1360 9F93 push r25
2429 1362 8F93 push r24
2430 1364 81E0 ldi r24,lo8(1)
2431 1366 90E0 ldi r25,hi8(1)
2432 1368 9F93 push r25
2433 136a 8F93 push r24
2434 136c 80E0 ldi r24,lo8(DebugTextAnforderung)
2435 136e 90E0 ldi r25,hi8(DebugTextAnforderung)
2436 1370 9F93 push r25
2437 1372 8F93 push r24
2438 1374 82E0 ldi r24,lo8(2)
2439 1376 8F93 push r24
2440 1378 81E0 ldi r24,lo8(1)
2441 137a 8F93 push r24
2442 137c 81E4 ldi r24,lo8(65)
2443 137e 8F93 push r24
2444 1380 0E94 0000 call SendOutData
2445 1384 8FEF ldi r24,lo8(-1)
2446 1386 8093 0000 sts DebugTextAnforderung,r24
2447 138a 8DB7 in r24,__SP_L__
2448 138c 9EB7 in r25,__SP_H__
2449 138e 0B96 adiw r24,11
2450 1390 8DBF out __SP_L__,r24
2451 .L211:
2452 1392 8091 0000 lds r24,ConfirmFrame
2453 1396 8823 tst r24
2454 1398 01F0 breq .L212
2455 139a 8091 0000 lds r24,UebertragungAbgeschlossen
2456 139e 8823 tst r24
2457 13a0 01F0 breq .L212
2458 13a2 81E0 ldi r24,lo8(1)
2459 13a4 90E0 ldi r25,hi8(1)
2460 13a6 9F93 push r25
2461 13a8 8F93 push r24
2462 13aa 80E0 ldi r24,lo8(ConfirmFrame)
2463 13ac 90E0 ldi r25,hi8(ConfirmFrame)
2464 13ae 9F93 push r25
2465 13b0 8F93 push r24
2466 13b2 81E0 ldi r24,lo8(1)
2467 13b4 8F93 push r24
2468 13b6 8F93 push r24
2469 13b8 82E4 ldi r24,lo8(66)
2470 13ba 8F93 push r24
2471 13bc 0E94 0000 call SendOutData
2472 13c0 1092 0000 sts ConfirmFrame,__zero_reg__
2473 13c4 2DB7 in r18,__SP_L__
2474 13c6 3EB7 in r19,__SP_H__
2475 13c8 295F subi r18,lo8(-(7))
2476 13ca 3F4F sbci r19,hi8(-(7))
2477 13cc 2DBF out __SP_L__,r18
2478 .L212:
2479 13ce 8091 0000 lds r24,GetPPMChannelAnforderung
2480 13d2 8823 tst r24
2481 13d4 01F0 breq .L192
2482 13d6 8091 0000 lds r24,UebertragungAbgeschlossen
2483 13da 8823 tst r24
2484 13dc 01F0 breq .L192
2485 13de 84E3 ldi r24,lo8(52)
2486 13e0 90E0 ldi r25,hi8(52)
2487 13e2 9F93 push r25
2488 13e4 8F93 push r24
2489 13e6 80E0 ldi r24,lo8(PPM_in)
2490 13e8 90E0 ldi r25,hi8(PPM_in)
2491 13ea 9F93 push r25
2492 13ec 8F93 push r24
2493 13ee 81E0 ldi r24,lo8(1)
2494 13f0 8F93 push r24
2495 13f2 8F93 push r24
2496 13f4 80E5 ldi r24,lo8(80)
2497 13f6 8F93 push r24
2498 13f8 0E94 0000 call SendOutData
2499 13fc 1092 0000 sts GetPPMChannelAnforderung,__zero_reg__
2500 1400 8DB7 in r24,__SP_L__
2501 1402 9EB7 in r25,__SP_H__
2502 1404 0796 adiw r24,7
2503 1406 8DBF out __SP_L__,r24
2504 .L192:
2505 /* epilogue: frame size=16 */
2506 1408 E6E0 ldi r30,6
2507 140a C05F subi r28,-16
2508 140c 0C94 0000 jmp __epilogue_restores__+24
2509 /* epilogue end (size=4) */
2510 /* function DatenUebertragung size 720 (710) */
2512 .comm RxdBuffer,175,1
2513 .comm Debug_Timer,2,1
2514 .comm Kompass_Timer,2,1
2515 .comm MotorTest,16,1
2516 .comm DebugOut,66,1
2517 .comm WinkelOut,8,1
2518 .comm Data3D,14,1
2519 .comm ExternControl,11,1
2520 .comm VersionInfo,10,1
2521 .comm TxdBuffer,175,1
2522 .comm ConfirmFrame,1,1
2523 .comm Display_Timer,2,1
2524 .comm Timer3D,2,1
2525 /* File "uart.c": code 2582 = 0x0a16 (2491), prologues 47, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 uart.c
C:\Temp/cc8OdrLo.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc8OdrLo.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc8OdrLo.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc8OdrLo.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc8OdrLo.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc8OdrLo.s:14 .progmem.data:00000000 ANALOG_TEXT
C:\Temp/cc8OdrLo.s:52 .bss:00000000 ReceiverUpdateModeActive
C:\Temp/cc8OdrLo.s:58 .bss:00000001 AboTimeOut
C:\Temp/cc8OdrLo.s:64 .bss:00000003 Display_Interval
C:\Temp/cc8OdrLo.s:70 .bss:00000005 Intervall3D
C:\Temp/cc8OdrLo.s:76 .bss:00000007 DebugDataIntervall
C:\Temp/cc8OdrLo.s:82 .data:00000000 MeineSlaveAdresse
C:\Temp/cc8OdrLo.s:87 .data:00000001 PcZugriff
C:\Temp/cc8OdrLo.s:92 .data:00000002 DebugTextAnforderung
C:\Temp/cc8OdrLo.s:99 .bss:00000009 PC_MotortestActive
C:\Temp/cc8OdrLo.s:105 .bss:0000000a PC_DebugTimeout
C:\Temp/cc8OdrLo.s:111 .bss:0000000b RxDataLen
C:\Temp/cc8OdrLo.s:117 .bss:0000000c pRxData
C:\Temp/cc8OdrLo.s:123 .bss:0000000e AnzahlEmpfangsBytes
C:\Temp/cc8OdrLo.s:129 .bss:0000000f CntCrcError
C:\Temp/cc8OdrLo.s:135 .data:00000003 UebertragungAbgeschlossen
C:\Temp/cc8OdrLo.s:142 .bss:00000010 NeueKoordinateEmpfangen
C:\Temp/cc8OdrLo.s:148 .bss:00000011 NeuerDatensatzEmpfangen
C:\Temp/cc8OdrLo.s:154 .bss:00000012 SioTmp
C:\Temp/cc8OdrLo.s:160 .bss:00000013 DisplayLine
C:\Temp/cc8OdrLo.s:166 .bss:00000014 GetPPMChannelAnforderung
C:\Temp/cc8OdrLo.s:172 .bss:00000015 GetVersionAnforderung
C:\Temp/cc8OdrLo.s:178 .bss:00000016 DebugDataAnforderung
C:\Temp/cc8OdrLo.s:184 .bss:00000017 DebugDisplayAnforderung
C:\Temp/cc8OdrLo.s:190 .bss:00000018 DebugDisplayAnforderung1
C:\Temp/cc8OdrLo.s:196 .bss:00000019 GetExternalControl
.bss:0000001a ptr.6
C:\Temp/cc8OdrLo.s:202 .text:00000000 __vector_22
*COM*:000000af TxdBuffer
C:\Temp/cc8OdrLo.s:198 .bss:0000001c crc.1
C:\Temp/cc8OdrLo.s:256 .bss:0000001e crc1.2
C:\Temp/cc8OdrLo.s:257 .bss:0000001f crc2.3
C:\Temp/cc8OdrLo.s:258 .bss:00000020 buf_ptr.4
C:\Temp/cc8OdrLo.s:259 .bss:00000021 UartState.5
C:\Temp/cc8OdrLo.s:263 .text:0000006c __vector_20
*COM*:000000af RxdBuffer
C:\Temp/cc8OdrLo.s:494 .text:00000260 AddCRC
C:\Temp/cc8OdrLo.s:550 .text:000002c0 SendOutData
C:\Temp/cc8OdrLo.s:750 .text:00000438 Decode64
C:\Temp/cc8OdrLo.s:863 .text:0000050c BearbeiteRxDaten
*COM*:00000010 MotorTest
*COM*:0000000a VersionInfo
*COM*:0000000b ExternControl
*COM*:00000001 ConfirmFrame
*COM*:00000002 Timer3D
C:\Temp/cc8OdrLo.s:1850 .text:00000dd8 uart_putchar
C:\Temp/cc8OdrLo.s:1866 .text:00000de8 UART_Init
*COM*:00000002 Debug_Timer
*COM*:00000002 Kompass_Timer
C:\Temp/cc8OdrLo.s:1919 .progmem.data:00000200 __c.0
C:\Temp/cc8OdrLo.s:1924 .text:00000e70 DatenUebertragung
*COM*:00000002 Display_Timer
*COM*:00000008 WinkelOut
*COM*:00000042 DebugOut
*COM*:0000000e Data3D
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
LcdClear
ServoActive
__prologue_saves__
__epilogue_restores__
KompassValue
Mixer
MixerTable_WriteToEEProm
SetDefaultParameter
GetActiveParamSet
ParamSet_ReadFromEEProm
EE_Parameter
MotorenEin
ParamSet_WriteToEEProm
__mulsi3
Umschlag180Nick
Umschlag180Roll
Piep
LipoDetection
LIBFC_ReceiverInit
PPM_in
I2C_ReadBLConfig
BLConfig
I2C_WriteBLConfig
LIBFC_GetCPUType
SetDelay
RemoteKeys
MenuePunkt
CheckDelay
DisplayBuff
Menu
DispPtr
Menu_Putchar
_printf_P
MaxMenue
IntegralNick
__divmodsi4
IntegralRoll
Parameter_UserParam1
Parameter_UserParam2
CopyDebugValues
ErsatzKompass
GIER_GRAD_FAKTOR
SummeNick
SummeRoll
Mess_Integral_Gier
memcpy_P
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/user_receiver.c
0,0 → 1,23
//############################################################################
// Implement your own RC-decoding routines here
//############################################################################
 
 
//############################################################################
// Initialize the UART here
//############################################################################
void User_Receiver_Init(void)
{
// SpektrumUartInit(); // or use an existing routine like this
};
 
 
//############################################################################
// Is called by the uart RX interrupt
// UDR contains the received byte
//############################################################################
void User_RX_Parser(unsigned char udr)
{
};
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/user_receiver.h
0,0 → 1,4
// for own implementations
void User_Receiver_Init(void);
void User_RX_Parser(unsigned char);
 
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/user_receiver.lst
0,0 → 1,40
1 .file "user_receiver.c"
2 .arch atmega1284p
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 User_Receiver_Init
13 User_Receiver_Init:
14 /* prologue: frame size=0 */
15 /* prologue end (size=0) */
16 /* epilogue: frame size=0 */
17 0000 0895 ret
18 /* epilogue end (size=1) */
19 /* function User_Receiver_Init size 1 (0) */
21 .global User_RX_Parser
23 User_RX_Parser:
24 /* prologue: frame size=0 */
25 /* prologue end (size=0) */
26 /* epilogue: frame size=0 */
27 0002 0895 ret
28 /* epilogue end (size=1) */
29 /* function User_RX_Parser size 1 (0) */
31 /* File "user_receiver.c": code 2 = 0x0002 ( 0), prologues 0, epilogues 2 */
DEFINED SYMBOLS
*ABS*:00000000 user_receiver.c
C:\Temp/cchgw7Wo.s:3 *ABS*:0000003f __SREG__
C:\Temp/cchgw7Wo.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cchgw7Wo.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cchgw7Wo.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cchgw7Wo.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cchgw7Wo.s:13 .text:00000000 User_Receiver_Init
C:\Temp/cchgw7Wo.s:23 .text:00000002 User_RX_Parser
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/vector.h
0,0 → 1,19
#ifndef _VECTOR_H
#define _VECTOR_H
 
typedef struct
{
int32_t x;
int32_t y;
int32_t z;
} __attribute__((packed)) vector32_t;
 
typedef struct
{
int16_t x;
int16_t y;
int16_t z;
} __attribute__((packed)) vector16_t;
 
 
#endif //_VECTOR_H
/branches/v0.90d_Ernstl_6-Motoren+Sexpander/version.txt
0,0 → 1,567
 
-------
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
V0.61 - V0.63 H.Buss 27.09.2007
- Poti 4 und Kanal 8 werden im Menü angezeigt
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt
- Analog.c: Aktuell_ax korrigiert
- auf 32 Debug-Kanäle erweitert
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar
- leichte Anpassungen im Gier - Geschwindigkeit und Drift
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird
- die PPM-Ausgänge liegen wieder an den Pins an
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an
- Sticksignale werden präziser ausgewertet
- Stick-Kanäle werden ans Kopter-Tool übertragen
- Es muss die Version V1.47 des Kopter-Tool verwendet werden
- Die Settings werden auf Default zurückgesetzt
- am Piepen kann man die Fehlerart unterscheiden
1. einzelnes Piepen beim Einschalten und Kalibrieren
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall
3. schnelleres Intervall mindestens 1 Sek -> Akku
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört
V0.64 H.Buss 30.09.2007
- beim Gieren wurden die Achsen nicht hart genug geregelt
V0.65a H.Buss 15.10.2007
- Integral im Mischer wieder integriert
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100
- ACC/Gyro Abgleich auch bei HH
 
V0.66a H.Buss 3.11.2007
- Messwertverarbeitung aus dem Analog-Interrupt entfernt
- Analogmessung hängt jetzt am FC-Timing
- Looping-Stick-Hysterese eingebaut
- Looping-180°-Umschlag einstellbar
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll
- Lageregelung nach ACC-Sensor verbessert
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage
- Gyrodriftkompensation überarbeitet
- Bug in der Gier-Stick-Berechnung behoben
- Gyro-Messung auf 1kHz beschleunigt
V0.67a H.Buss 16.11.2007
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode)
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus
- Feinabstimmung
- Beim HH-Modus gab es noch Bugs
 
V0.67e H.Buss 29.11.2007
- Parameter: Dynamic Stability und Driftfaktor eingeführt
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen
- Kompatibilität zum Koptertool erhöht
 
V0.67f H.Buss 04.12.2007
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts)
V0.68a I.Busker 28.12.2007
- SPI.c & SPI.h ins Projekt aufgenommen
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden
 
V0.68c H.Buss 05.01.2008
- Stickauswertung verbessert -> träger und präziser
- Alle Settings angepasst
 
V0.69e H.Buss 05.05.2008
- kleinere Bugs beseitigt
- Schneller Sinkflug jetzt möglich
- Min- und Maxgas in den Settings geändert
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert
V0.69h H.Buss 21.05.2008
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden
- SenderOkay auch an das Naviboard übertragen
- Bessere Parameter bei Senderausfall
V0.69j H.Buss 30.05.2008
- Höhere Präzision der Achsenkopplung
 
V0.69k H.Buss 31.05.2008
- Bug in SPI.C behoben
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte
 
V0.69L H.Buss 14.06.2008
- feinere Cam-Servo-Auflösung
V0.70a H.Buss 01.07.2008
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich
 
V0.70b H.Buss 14.07.2008
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge)
- eigene Parameter für GPS-Naviboard
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8)
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi...
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt
- KopterTool-Kompatibilität auf 8 erhöht
V0.70c H.Buss 30.07.2008
- Parameter der Datenfusion leicht modifiziert
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85)
- MaxStick wird auf 100 begrenzt
 
V0.70d H.Buss 02.08.2008
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an
0.71b: H.Buss 19.10.2008
Kommunikation zum Navi erweitert:
- Beeptime jetzt 32Bit
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt
0.71c: H.Buss 20.10.2008
- LoopConfig heisst jetzt BitConfig
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab.
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt
 
0.71f: H.Buss 15.11.2008
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1
- VersionInfo.NaviKompatibel eingeführt
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt
- Luftdruckwert wird an das Navi übertragen
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter
- Debugdaten können jetzt mit 'f' gepollt werden
0.71g: Gregor 09.12.2008
- Kommunikation überarbeitet
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands
0.71h: H.Buss 15.12.2008
- Freigegebene Version
- NaviAngleLimitation als Parameter zum Navi implementiert
- Antwort auf CMD: 't' entfernt
0.72d: H.Buss 22.01.2009
- OCTO als Compilerschalter
- Unterstützung der FC 2.0 (ME)
- GYRO_D eingeführt
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung
0.72e: H.Buss 27.01.2009
- die 0.72d hatte kein Integral im Gier
- Parameter eingeführt:
EE_Parameter.NaviGpsPLimit
EE_Parameter.NaviGpsILimit
EE_Parameter.NaviGpsDLimit
EE_Parameter.NaviPH_LoginTime
EE_Parameter.AchsKopplung2
EE_Parameter.CouplingYawCorrection
 
0.72f: H.Buss 28.01.2009
- Bug im Ersatzkompass entfernt
 
0.72h: H.Buss 05.02.2009
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt
- Achsentkopplung weiter verbessert
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt
 
0.72i: H.Buss 07.02.2009
- Abtastrate von 1kHz auf 2kHz erhöht
 
0.72j: H.Buss 09.02.2009
- neue Implementierung der Servoausgänge
 
0.72k: H.Buss 10.02.2009
- Abtastrate auf 5kHz erhöht
 
0.72L: H.Buss 13.02.2009
- Signalfilterung überarbeitet
- OCTO2 implementiert
 
0.72M: H.Buss 13.02.2009
- Code Cleanup
 
0.72o: H.Buss 24.02.2009
- Abtastrate auf 2kHz
- HW-Version an Navi
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik
- Auswerteroutine für Spectrum-Satteliten implementiert
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd)
0.72p: H.Buss 01.03.2009
- Octo3 erstellt
- Analogwerte umbenannt
 
0.73a-d: H.Buss 05.04.2009
- MixerTabelle implementiert
- I2C-Bus auf bis zu 12 Motoren erweitert
- die Busfehler der BL-Regler werden im Menü angezeigt
- Revision der MixerTabelle eingeführt
- MixerTabelle wird bei Parameterreset neu initialisiert
- Motortest auf [12] erweitert
- Motorschalter nicht mehr 3-Stufig
 
0.74a
- Datenfusion im Flug auch, wenn ACC-Z < 512
- Wert für die Luftdruck-Messbereichserweiterung abgefangen
 
0.74d
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts
0.75a G.Stobrawa 22.5.2009
- Extern Control also received from NC via SPI
 
0.75b H.Buss 27.05.2009
- Spektrum-Singale schalten den PPM-Eingang aus
- max. 2 Sekunden nach dem Start auf die BL-Regler warten
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl
- EE_DATENREVISION auf 76 erhöht
- Servo:
- Roll-Servo für FC ME implementiert
- Update-Cmd stoppt Servos
- Servos werden erst nach dem ersten Kalibrieren aktiviert
 
0.75c G.Stobrawa 25.7.2009
- Übertragung der Servo-Settings zur NC
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S)
0.75d H.Buss 13.8.2009
- RC-Routine: Empfangsausfall soll sicherer erkannt werden
- Zellenerkennung nun auch beim Speichern der Settings
- Warnungs-Blinkmaske auch bei Empfangsausfall
 
0.75e H.Buss 18.8.2009
- LED-Blinken kann an die Motoren gekoppelt werden
- Feinabstimmung des Höhenreglers
0.75f H.Buss 27.8.2009
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler
- leichte Modifikation der RC-Empfangroutine
 
0.75g H.Buss 31.08.2009
- die Akkuspannung geht jetzt antiproportional ins Gas ein
 
0.75h H.Buss 3.09.2009
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas
 
0.75i H.Buss 7.09.2009
- GpsZ vom Navi zur FC für den Höhenregler
- "hoovergas-Variation" als Parameter
- Kompatibilität zu NC und PC erhöht
 
0.75j H.Buss 17.09.2009
- Laufzeitzähler eingebaut
 
0.75k H.Buss 22.09.2009
- zweite Variante (Gregor) der Höhenregelung implementiert
- umschaltbare RC-Routine
 
0.75L H.Buss 23.09.2009
- SollHoehe und Gas geht nun auch an die NC
 
0.75M H.Buss 29.09.2009
- Spektrum-Timing wird nun überwacht
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt
0.75N H.Buss 29.09.2009
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler
- Gyro_Gier_P und Gyro_Gier_I eingeführt
- I2C_fehler-Zähler jetzt in den Analogdaten
 
0.75o H.Buss 01.10.2009
- der Höhenregler wird jetzt nur alle 10ms bearbeitet
- Baro-Messbereichserweiterung auch bei Poti als Sollwert
 
0.76d H.Buss 10.10.2009
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen
 
0.76e H.Buss 27.10.2009
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht
- S3D-ACT-Summensignal als Compilerschalter
 
0.76f H.Buss 05.11.2009
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt
0.76g H.Buss 10.11.2009
- Casting-Fehler in der Gas-Berechnung
 
0.77a H.Buss 11.11.2009
- Erweiterung auf 12 Kanäle
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert
- Servos3-5 einstellbar
- neues Kommando "f" -> schaltet auf anderen Parametersatz um
 
0.77b H.Buss 09.12.2009
- JetiBox: Menü wird übertragen
- neu: FCFlags |= FCFLAG_I2CERR;
- LED-Warn-Blinken nun mit festem Timing und abschaltbar
0.77c H.Buss 07.01.2010
- zwei weitere Spektrum-Varianten implementiert
 
0.77d H.Buss 25.01.2010
- Strom-Messung eingebaut
0.78a H.Buss 03.02.2010
- Bugfix: Settingsumschaltung im Flug
 
0.78b H.Buss
- veröffentlichte Version
 
0.78c H.Buss + G.Stobrawa 22.2.2010
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0
- Theoretischer Variablenüberlauf bei Vario-Höhenregler
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv
- LED-Schwellwerte fürs Blinken waren unterschiedlich
 
0.78c H.Buss + G.Stobrawa 04.3.2010
- Code cosmetics
 
0.78f H.Buss + I.Busker 23.3.2010
- Unterstützung für Jeti-Expander
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox
- BL-Timeout beim Start erhöht
 
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010
- Motoren Starten nicht ohne Kalibrierung
- Unterstützung der BL2.0-Regler
- statt 8 nun 10 Bit Auflösung der Lageregekung
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool
- Parametersätze werden per I2C an die BL-Regler durchgereicht
- "Care-Free" implementiert
- Freie Belegung der "Vorne"-Richtung
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt
- #define RECEIVER_SPEKTRUM_EXP eingeführt
- #define SWITCH_LEARNS_CAREFREE eingeführt
- Schwerpunktanzeige in den 3D-Daten
- Checksummen gesicherte Datenablage im EEProm
- Fehlerdiagnose implementiert (Wiki: ErrorCodes)
- ErrorCode aufs Jeti-Display
 
- JetiMenü: bis acht Temperaturen der BL-Regler
- GPSInfo.Speed im Jeti-Display
- Compass-Richtung nun im Jeti-menü
 
- diverse Änderungen im Höhenregler
- P wirkt schwächer
- D wirkt stärker
- Anpassung der Höhenregelung auf Level des Hoovergases
- AccZ schneller nachführen
 
Parameter modifiziert:
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30
- EE_Parameter.Hoehe_HoverBand = 8; // war 5
- Notgas = 45
- NotgasZeit = 90
- Beginnersetting: EE_Parameter.DynamicStability = 70;
- Neu: GyroStability = 6
- GPS-Login-Time auf 2 reduziert
 
0.80e H.Buss 02.08.2010
- MK3Mag ohne NC ging nicht
 
0.80f H.Buss 04.08.2010
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert
 
0.80g H.Buss 11.08.2010
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert
 
0.80h H.Buss 30.08.2010
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist
 
0.82a H.Buss 08.11.2010
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten
- ServoManualControlSpeed - Verlangsamt das Cam-Servo
- CamOrientation - für verdrehte Kamera-Servos
- Position der Status-Bits verändert
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben
- jeti update command 'j' added
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller
- Waypont-Events z.B. zum Triggern der Kamera
- Gyro-Sytbility: Werte bis 16 möglich
 
0.82b H.Buss 08.12.2010
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128)
 
0.84a H.Buss 21.03.2011 (Release: 30.03.2011)
- nur starten, wenn NC_ErrorCode = 0
- Beeptime von NC auch beim Kalibrieren durchlassen
- Varible "JetiBeep" eingeführt
- Kompass-Winkelvorgabe von NaviControl -> POI
- Piepen beim Umschalten von CareFree
- Compass-Routinen überarbeitet
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst
- Defaultreceiver ist RECEIVER_JETI
- GPS-Operation-Radius per default auf 245m bzw. 100%
- Höhenvorgabe im Vario-Mode durch Waypoints
- bei laufenden Motoren keine neuen Settings annehmen
- immer einmal Carefree Beepen nach dem Kalibrieren
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel
 
0.86a H.Buss 13.09.2011
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen
- GPS-Sollwertverschiebung
- Empfangs-Piepen unterdrücken -> einstellbar
- MotorSmooth einstellbar
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position
- Coming Home mit Höhenvorgabe
- Coming Home als Failsafe
- Einführung des GPS-Characters (- / W H D P)
- Klartext bei den Jeti-Fehlermeldungen
- Jeti-Beep "3*kurz" bei NC-Errors
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert
- GPS-Angle limit von 100 auf 140
- GPS-I-Limit von 75 auf 85
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen;
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.)
- Error-Text auch im virtuellen Display des Koptertools
- virtuelles LCD-Menü:
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt.
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart
- ACC Correction eingeführt
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden
- neue Fehlermeldungen:
"No NC communicat", // 9
"GPS Fix lost ", // 21
"Magnet Error ", // 22
"Motor restart ", // 23
"BL Limitation " // 24
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt
- Ausbau der HoTT-Telemetrie
- Variable "KompassRichtung" entfernt
- ErsatzKompassInGrad sinvoll genutzt
- HoTT-Update per Uart-Durchschleifen
- AltitudeSetpointTrimming eingeführt
- Vario-Anzeige für HoTT
- Verhindern eines Überlaufs im Vario
- echter Varioton auch ohne Vario-Höhenregler
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war
- KompassFusion wird jetzt getrennt von der NC berechnet
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal"
- MagnetError kann man in der Startphase ignorieren
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC
- Einzelströme nun auch bei HoTT angezeigt
0.86b H.Buss 20.09.2011
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann
- grüne LED ging aus - gefixt
- K1-K8 wurden im LCD mit 0-7 bezeichnet
 
0.86c H.Buss 22.09.2011
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti
- Neuer SPI-Block 'SPI_MISC'
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert
- '.' im Vario-Höhenregler
 
0.86d H.Buss 26.09.2011
- Analog.c: Vario Überlauf anders verhinden
- Poti1-6 auch im HoTT-Display
 
0.88 H.Buss 12.12.2011 - 26.03.2012
- Failsafe-Kanal
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC)
- Option: Failsafe-Sinkflug xx% Schwebegas
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an)
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging"
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen
- das sbus-protokoll implementiert (nur FC2.1)
- Schaltkanal auf Servo-Ausgang
- Filter auf den Ausgängen der Servos
- Option: Failsafe-Sinkflug xx% Schwebegas
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude"
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann
- Kompassrichtung neu merken, wenn CF geschaltet wird
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert
 
0.88M H.Buss 15.05.2012
- HoTT V4
- Kamera-Servo beim Kalibrieren weiter laufen lassen.
- Error 30: no GPS fix bei Start
- echter MotorSchalter
 
0.88n H.Buss 06.07.2012
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz
 
0.90 H.Buss 04.03.2013
- Anzeige WP x/Y in der HoTT-Telemetrie
- Schalter und WP-Event gleichzeitig
- Photo-Auslösung als Entfernungsintervalle
- Jeti +
- Kamera-Neitung als Integral
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war
- Auswahl:Speak-All nun in der KopterTool-Config
 
0.90 Ernstl 6-Motoren und Sexpander für DX7
- Aktivierung der Sexpanderunterstützung
- Anzeige von sechs Motoren im Koptertool