Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2302 → Rev 2306

/branches/v0.90d_Ernstl_8-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_8-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_8-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/ccPUXh3r.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccPUXh3r.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccPUXh3r.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccPUXh3r.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccPUXh3r.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccPUXh3r.s:15 .bss:00000000 GPS_Aid_StickMultiplikator
C:\Temp/ccPUXh3r.s:21 .bss:00000001 GPS_Roll
C:\Temp/ccPUXh3r.s:27 .bss:00000003 GPS_Nick
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_8-Motoren+Sexpander/Hex-Files/Flight-Ctrl_MEGA1284P_V0_90d_SVN.hex
0,0 → 1,4717
:100000000C94F9080C9448090C9448090C9448097C
:100010000C9448090C9448090C9448090C9448091C
:100020000C9448090C94591C0C9448090C944809E8
:100030000C946A360C9448090C9448090C944809AD
:100040000C9448090C9448090C947C180C944809A9
:100050000C94AA0E0C9448090C94740E0C94480944
:100060000C94491F0C9448090C94F0310C944809E5
:100070000C947A8F0C9448090C94A9860C94480926
:100080000C9448090C9448090C944809701F751F7A
:100090007A1F831F9A1FB11FC11FD11F0C20F5218A
:1000A000B11FB720C820F720152132218C21E7216C
:1000B0000224CF245E25DE251626B926C0282A294B
:1000C000A429ED29372A652A922AF52A3F2B892B64
:1000D000822C0F3243328632F6320E334F330634DF
:1000E000CD34CD34CD34CD34CD34CD34CD34CD3408
:1000F000CD34CD34CD34823484348934A134A33426
:10010000086AC76A4C6B7B6AA26BD26B3C6AAA6AAC
:10011000AC774A78CF7831798579EE794E816F7AEC
:10012000A17AA17AA17AA17AA17AA17AA17AA17AF7
:10013000A17ACF7A4A7BDF7B047C477C9F7C2A7D37
:10014000137E7A7E7A7E7A7E7A7E7A7E7A7E7A7E56
:100150007A7E7A7EB27ED07EF57E517F8D7FFC7F67
:100160002980C9804E81298129812981298129817C
:10017000298129812981CD8DD08DD08DD08DD98DAA
:10018000DC8DDF8DF18DEE8D0A0D3D3D3D3D3D3D1C
:100190003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D8F
:1001A0003D3D3D3D3D3D3D3D3D3D3D3D3D000A0D1F
:1001B000426174743A002025642043656C6C73209E
:1001C00000204C6F77207761726E696E673A202548
:1001D000642E2564000A0D466F756E6420424C2D16
:1001E0004374726C3A20002564000A0D0A0D212127
:1001F000204D495353494E4720424C2D4354524CB5
:100200003A202564202121000A0D43616C69627245
:100210006174696E6720707265737375726520739F
:10022000656E736F722E2E004F4B0A0D000A0D463D
:100230006C696768742D74696D65202575206D691A
:100240006E20546F74616C3A2575206D696E0041A3
:100250006E676C654E69636B202020202020204152
:100260006E676C65526F6C6C20202020202020412E
:1002700063634E69636B20202020202020202041D2
:100280006363526F6C6C2020202020202020205996
:1002900061774779726F202020202020202020487D
:1002A00065696768742056616C756520202020415F
:1002B00063635A2020202020202020202020205648
:1002C0006F6C74616765205B302E31565D20204D68
:1002D0006F746F7220312020202020202020204D9C
:1002E0006F746F7220322020202020202020204D8B
:1002F0006F746F7220332020202020202020204D7A
:100300006F746F7220342020202020202020204D68
:100310006F746F7220352020202020202020204D57
:100320006F746F7220362020202020202020204D46
:100330006F746F7220372020202020202020204D35
:100340006F746F722038202020202020202020521F
:1003500065636569766572204C6576656C2020471B
:1003600079726F20436F6D7061737320202020437A
:10037000757272656E74205B302E31415D202043B2
:1003800061706163697479205B6D41685D20205301
:100390006572766F202020202020202020202043FE
:1003A0006F6D706173732056616C756520202049F4
:1003B00032432D4572726F7220202020202020327F
:1003C00033202020202020202020202020202047F3
:1003D00050535F4E69636B2020202020202020474F
:1003E00050535F526F6C6C20202020202020203240
:1003F00036202020202020202020202020202032D5
:1004000037202020202020202020202020202032C3
:1004100038202020202020202020202020202032B2
:1004200039202020202020202020202020202033A0
:100430003020202020202020202020202020203399
:10044000312020202020202020202020202020219A
: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
:10120000A0E0B1E0E4ECF4E201E00BBF02C0079023
:101210000D92A43DB107D9F71BE0A4EDB2E001C0E7
:101220001D92AC3DB107E1F77AEAE2E0F0E081E23D
:1012300080935700D4907E010894E11CF11C20EFAC
:1012400037EF41E050E087016FE0DA01C9012F5F1D
:101250003F4F4F4F5F4FABBFFC018791F801819328
:101260008F01615067FFF1CFF7016EE08191782720
:101270007095615067FFFACF8889781729F0F7E9F0
:10128000DF1611F40000FECF0E941B0A0C9461923D
:101290000C94000088E891E09F938F9380E695E19D
:1012A0009F938F93E0913B05F0913C0509950F903A
:1012B0000F900F900F90089580918407E82FFF27DB
:1012C000EE0FFF1FE954F74F808191818D5E9F4F94
:1012D00014F010920201808191818A5B9F4FCCF4BF
:1012E000809102018823A9F481E08093020180911A
:1012F0006F058F5F80936F05853038F088EE93E03F
:10130000909309038093080304C066E970E00E948B
:10131000183A80916F0599279093070780930607E5
:1013200008951F93CF93DF93182F882389F08EEAB7
:1013300091E09F938F9380E695E19F938F93E09147
:101340003B05F0913C0509950F900F900F900F9081
:101350008091A707823308F044C084EF91E00E9497
:101360006F19EC01112329F0CE010E94781988230E
:10137000D9F3C2E0D0E026E530E080911F019091E2
:1013800020018217930730F02196255D3F4FC7302B
:10139000D10598F38091A7079927C89F9001C99F0D
:1013A000300DD89F300D1124209300011123D9F066
:1013B00068EC70E08C2F0E94183ADF93CF9386EB95
:1013C00091E09F938F9380E695E19F938F93E091B7
:1013D0003B05F0913C0509958DB79EB706968DBFEC
:1013E00002C080930001112311F1809100016AE095
:1013F0000E94B491892F99279F938F938091000128
:101400000E94B49199279F938F9381EC91E09F93D1
:101410008F9380E695E19F938F93E0913B05F09148
:101420003C0509952DB73EB7285F3F4F2DBFDF9193
:10143000CF911F910895CFEFD0E4DEBFCDBF8824B8
:10144000992414B815B8B7EEEB2EB3E0FB2E2EECB2
:101450003FEFE20EF31EF7FEFACF199B02C085E1C3
:1014600001C086E18093010181E887B93E9A8FEF40
:1014700088B98BE184B981E085B98EE38AB987E4C4
:101480008BB9469A84B7877F84BF8091600088615A
:10149000809360001092600084EC99E090930903BF
:1014A0008093080310921404109213041092BC0845
:1014B0001092BB0810921604109215041092180492
:1014C0001092170420910101243128F084EC94E05B
:1014D000A0E0B0E004C08BE095E0A0E0B0E0809335
:1014E0003C0190933D01A0933E01B0933F012A300F
:1014F00011F0243110F0289801C0289A2C3010F0F7
:10150000263111F4299A01C029980E94D8190E9405
:10151000A9190E9468150E9441360E94DA1D81E0D7
:101520000E94A4310E949A680E9451720E94458EC6
:10153000809101018C3010F0863111F4299A01C09C
:10154000299878940E94C33080914D0382608093E3
:101550004D03109250030E94644584EF91E00E9475
:101560006F197C0180914D0380FD05C0C7010E9469
:1015700078198823B9F385ED91E09F938F93A0E6C6
:10158000AA2EA5E1BA2EBF92AF92E0913B05F09151
:101590003C05099580EA9FE00E946F197C01C0E03C
:1015A000D0E00F900F900F900F9009E518E0FDE04C
:1015B000CF2EF8E0DF2E0E94644580914D0380FD20
:1015C00005C0C7010E9478198823B9F3F60180810C
:1015D0001816ACF40BC00E94644580914D0380FD49
:1015E00005C0C7010E9478198823B9F3C7010E947A
:1015F0007819882321F4F8018081882364F7F801A1
:10160000808187FF19C02196DF93CF93219787EEC2
:1016100091E09F938F93BF92AF92E0913B05F09141
:101620003C0509958091D5028F5F8093D5022DB737
:101630003EB72A5F3F4F2DBF219684E090E0C80E51
:10164000D91E085F1F4FCC30D10508F4B4CFC0E0DD
:10165000D0E006E518E0EDE0EE2EE8E0FE2EF80121
:10166000838187FD1DC0F70180811816CCF4219677
:10167000DF93CF9321978AEE91E09F938F9380E63B
:1016800095E19F938F93E0913B05F0913C0509957F
:1016900082E0809306032DB73EB72A5F3F4F2DBFF0
:1016A000F801838180788383219624E030E0E20E84
:1016B000F31E085F1F4FCC30D10588F20E944A0903
:1016C000909182078091D502981728F48091550552
:1016D00080618093550588E092E09F938F93C0E6E8
:1016E000D5E1DF93CF93E0913B05F0913C0509955F
:1016F00088EE93E00E946F197C010E94E01D0F901C
:101700000F900F900F90C7010E9478198823D9F38A
:1017100088E292E09F938F93DF93CF93E0913B0514
:10172000F0913C05099580E00E94FC3A809101010E
:101730000F900F900F900F908A3011F0843110F0BD
:10174000289801C0289A80ED97E090930903809330
:10175000080385E5809371058EE090E00E94E72EF6
:101760009927182F00278FE090E00E94E72E080F9E
:10177000111D1093DB020093DA028AE090E00E94D0
:10178000E72E9927182F00278BE090E00E94E72E84
:10179000080F111D1093D9020093D8020F5F1F4F3D
:1017A00039F08091DA029091DB028F5F9F4F41F414
:1017B0001092DB021092DA021092D9021092D80233
:1017C0008091D8029091D9029F938F938091DA02F1
:1017D0009091DB029F938F938DE292E09F938F9382
:1017E000DF93CF93E0913B05F0913C0509950E9472
:1017F000742388E893E19093370180933601C1E028
:10180000C09370058C2F0E9491098091AA070E94B5
:10181000918D0E944A0980ED97E00E946F197C012A
:101820008AEF90E00E946F1983E08093DE061092A9
:10183000D4028091F1072DB73EB7285F3F4F2DBFEF
:1018400084FF02C0C093DC028091DE02882311F085
:101850004798FECF80910C03882309F43DC2809104
:101860001101882309F438C210920C0380916F058E
:10187000882319F00E945C0902C00E94A3480E94BC
:101880006445209101012A3011F0243110F028988C
:1018900001C0289A80910704882331F080910704C1
:1018A0008150809307040EC080916F008062809306
:1018B0006F001092B8081092B708809155058860A3
:1018C000809355058091360190913701019790934F
:1018D0003701809336018091360190913701892B31
:1018E00021F080914E038823C9F1809136019091B7
:1018F0003701892BD9F40E94CE3185E090E0909396
:10190000370180933601809118079091190701964D
:1019100090931907809318078091550581608093F3
:1019200055058091DF0682608093DF068091090172
:1019300090910A018F5F9F4FC1F480910604882324
:10194000A1F088EA91E6909309038093080380E868
:1019500090E090930A018093090107C02A3011F0AA
:10196000243110F0289801C0289A0E94FD8E8091A1
:101970000C03882309F0B0C180911C05882319F05D
:101980000E94D281A9C180910F01882311F00E9489
:10199000311A0E94AC150E94FA10C7010E947819F2
:1019A000882309F495C184E190E0E80EF91E0E94B5
:1019B000EF198091AA07863019F40E94707704C04D
:1019C000843011F40E94A28280914E03882349F052
: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
:101B80008F7D8093CF030E94916D84E08093070343
:101B90008091DD028F5F8093DD02813309F04FC0B9
:101BA0001092DD028091CF0381FF0AC08091D6029E
:101BB0009091D70201969093D7028093D6023FC0AE
:101BC0005AEA852E55E0952E809127079091280797
:101BD0009C01442737FD4095542F80911701909127
:101BE0001801A0911901B0911A01281739074A0765
:101BF0005B0734F4809127079091280701961BC05A
:101C000080912707909128079C01442737FD409534
:101C1000542F8091170190911801A0911901B09152
:101C20001A0182179307A407B5074CF48091270780
:101C3000909128070197909328078093270708948D
:101C4000811C911C32E783163BE0930609F040C0EB
:101C5000882499242091DA023091DB022F5F3F4FD4
:101C60003093DB022093DA028091D8029091D9025E
:101C700001969093D9028093D802832F9927682FD9
:101C80008EE090E00E94EF2E8091DA029091DB02CC
:101C90009070682F8FE090E00E94EF2E8091D80224
:101CA0009091D902892F9927682F8AE090E00E94AD
:101CB000EF2E8091D8029091D9029070682F8BE01E
:101CC00090E00E94EF2E84E190E00E946F197C0169
:101CD0000E94E16D0E94687280910703882309F0D9
:101CE000B3CD0E94BB68B0CD1F920F920FB60F927A
: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
:101FB0000C942D922C859D850E85BB2483E2809305
:101FC0002F069F59909330062093310633E0E32E7D
:101FD000F12C002309F49EC0CF84D888BE016D5E29
:101FE0007F4FA989BA890150109709F493C01097BF
:101FF000B9F0F601EB0DF11DB3949081119791F4B6
:10200000002349F1FB016E5F7F4FDB01C080D1806F
:102010006E5F7F4F0D90BC91A02DBB24015002C07C
:1020200090E019C01097B9F0F601EB0DF11DB394D3
:102030004081119791F4002341F1FB016E5F7F4FC6
:10204000DB01C080D1806E5F7F4F0D90BC91A02DD1
:10205000BB24015002C040E018C01097B1F0F60157
:10206000EB0DF11DB3941081119781F4002371F0F1
:10207000FB013296DB01CD90DC90BF016E5F7F4F9C
:10208000A081B181BB24015001C010E0F701E15DE6
:10209000F94F892F86958695835C80830894E11C8F
:1020A000F11CF701E15DF94F892F9927837090703A
:1020B00024E0880F991F2A95E1F755279A0194E0AB
:1020C000369527959A95E1F7822B835C8083089457
:1020D000E11CF11CF701E15DF94F4F705070440FA6
:1020E000551F440F551F812F992726E096958795F8
:1020F0002A95E1F7842B835C80830894E11CF11C12
:10210000F701E15DF94F1F73135C10830894E11C24
:10211000F11C6ACFC7010E94A40FE9E00C94499218
:10212000A3E07A2F4091EC024650442309F458C0B2
:10213000E72FFF27E258FA4F80818D537F5FE72F0B
:10214000FF27E258FA4F20812D537F5FE72FFF27AB
:10215000E258FA4F30813D537F5FE72FFF27E25867
:10216000FA4F60816D537F5F9927880F991F880F01
:10217000991F522F52955F70582B822F99278F707D
:102180009070F4E0880F991FFA95E1F7232F2695B8
:102190002695282B832F992783709070E6E0880F6F
:1021A000991FEA95E1F7682B41504F3FC9F0EA2F9C
:1021B000FF27E258FA4F5083AF5F41504F3F81F005
:1021C000EA2FFF27E258FA4F2083AF5F41504F3F7D
:1021D00039F0EA2FFF27E258FA4F6083AF5FA5CFAF
:1021E00081E895E09093EB028093EA02A350A093DC
:1021F000E9020895A2E0B0E0E0E0F1E10C9433924E
: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
:102490009591DC01CB018093800190938101A09301
:1024A0008201B09383018091C5079927AA27BB2792
:1024B000BC01CD010E949591DC01CB0180937C0190
:1024C00090937D01A0937E01B0937F010E946330C1
:1024D000898301C01982809106018823E1F381E09C
:1024E00090E09F938F93CE0101969F938F9381E00D
:1024F0008F938F9383E58F930E94D40F8DB79EB7F0
:1025000007968DBF26C0E091EA02F091EB02E081D0
:102510008E2F8150853018F48E2F0E94052F0E9437
:1025200063308983809106018823E1F381E090E0A4
:102530009F938F93CE0101969F938F9381E08F930A
:102540008F9386E48F930E94D40FADB7BEB71796D2
:10255000ADBF80910604882329F46EE670E089817E
:102560000E94183A80E00E9491098091AA070E9477
:10257000918D75C1E091EA02F091EB02808199277B
: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
:10274000448D8983823019F0843009F088C020E4F8
: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
:102AB0001092EA021092E902E3E0CE5F0C944F928A
:102AC000982F8091C00085FFFCCF9093C600089599
:102AD0000F931F9388E18093C1008091C0008260B2
:102AE0008093C0008091C10080688093C100809174
:102AF000C10080648093C10000E010E00093C50035
:102B00008AE290E08093C4008091E5029091E60211
:102B10000E946F1990934E0580934D058CED90E0C7
:102B20000E946F1990937D0580937C0510924F054C
:102B30008AE58093500583E0809353058BE0809372
:102B40005105109252051093EB020093EA02109285
:102B5000E9021F910F910895A0E1B0E0E2EBF5E1E9
:102B60000C94309280910601882309F4C1C28091AF
: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
:102DA000099230936A0520936905809159049091A6
:102DB0005A04A0915B04B0915C04BC01CD01A80150
:102DC00097010E94099230936C0520936B058091C6
:102DD000E40380936D058091E30380936E0588E0A2
:102DE00090E09F938F9389E695E09F938F9381E086
:102DF0008F9383E08F938BE68F930E94D40F809103
:102E00006F052DB73EB7295F3F4F2DBF853018F0B6
:102E100086E080936F0583E690E00E946F1990939F
:102E20007D0580937C058091E5029091E602892BD7
:102E300041F080914D0590914E050E9478198823AC
:102E400021F48091F402882339F1809106018823CE
:102E500019F10E94EE3882E490E09F938F938EEDFB
:102E600096E09F938F9381E08F938F9384E48F9369
:102E70000E94D40F1092F4028DB79EB707968DBFB3
:102E80008091E5029091E602009731F00E946F195F
:102E900090934E0580934D058091E3029091E4025A
:102EA000892B09F4B8C080914B0590914C050E9484
:102EB0007819882309F4AFC080910601882309F4AA
:102EC000AAC080919F079927880F991F880F991F83
:102ED0007C010027F7FC0095102F809161049091F0
:102EE0006204A0916304B0916404BC01CD01A80107
:102EF00097010E94099230933E0520933D058091F1
:102F0000590490915A04A0915B04B0915C04BC01F7
:102F1000CD01A80197010E940992309340052093AA
:102F20003F0520918009309181094091820950919B
:102F30008309DA01C90163E0880F991FAA1FBB1F2B
:102F40006A95D1F7820F931FA41FB51F820F931F9D
:102F5000A41FB51F20913C0130913D0140913E01DD
:102F600050913F01BC01CD010E940992309342056E
:102F7000209341058091290490912A04A0912B046B
:102F8000B0912C0449E0B595A795979587954A95FA
:102F9000D1F7809343058091250490912604A09158
:102FA0002704B091280439E0B595A79597958795A2
:102FB0003A95D1F780934405809131049091320481
:102FC000A0913304B091340429E0B595A795979565
:102FD00087952A95D1F7809345058EE090E09F93E1
:102FE0008F938DE395E09F938F9381E08F938F93E1
:102FF00083E48F930E94D40F8091E3029091E402C6
:103000000E946F1990934C0580934B052DB73EB7E6
:10301000295F3F4F2DBF809105018F3F71F19927A7
:1030200004E0880F991F0A95E1F7815B9D4F40E10D
:1030300050E0BC01CE0101960E94DF8F80E190E05C
:103040009F938F93CE0101969F938F9381E090E0A1
:103050009F938F9385E091E09F938F9382E08F936E
:1030600081E08F9381E48F930E94D40F8FEF809340
:1030700005018DB79EB70B968DBF809120078823E1
:10308000D1F0809106018823B1F081E090E09F9318
:103090008F9380E297E09F938F9381E08F938F933C
:1030A00082E48F930E94D40F109220072DB73EB771
:1030B000295F3F4F2DBF8091F2028823C9F0809194
:1030C00006018823A9F084E390E09F938F9387EB18
:1030D00098E09F938F9381E08F938F9380E58F93F8
:1030E0000E94D40F1092F2028DB79EB707968DBF43
:1030F000E6E0C05F0C944C921F920F920FB60F92B5
:1031000011242F933F935F936F937F938F939F939C
:10311000AF93BF93EF93FF9320E080910703882341
:1031200029F0809107038150809307038091F60472
:10313000882319F081508093F60480910F03815009
:1031400080930F038F3F09F05BC089E080930F03EA
:1031500080910D0390910E03019690930E0380933E
:103160000D03809110018F5F81708093100188237F
:1031700019F481E080930C03349903C081E08093BB
:1031800010038091080390910903892B21F180910C
:103190000803909109030B9750F0809108039091D8
:1031A00009030A97909309038093080304C01092BF
:1031B000090310920803809108039091090320915C
:1031C000090130910A0182239323892B11F021E018
:1031D00008C020E006C08FEF9FEF90930A01809314
:1031E000090180910101222331F08A3011F45A9AA9
:1031F00007C0479A05C08A3011F45A9801C0479811
:1032000080911003882309F45AC02091970122234A
:1032100009F055C08091700983FF51C086B199278C
:10322000FC01E071F07084FF13C080910A0390915B
:103230000B03019690930B0380930A0380910A037A
:1032400090910B03895E9340D0F12093100337C017
:1032500080910A0390910B03892B69F180910A03F5
:1032600090910B038A56914030F580910A0390911A
:103270000B0369E270E00E94C09180910A03909173
: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
:103460000895A0E0B0E0E7E3FAE10C942F92809198
:10347000BA07E82FFF27EE5BFE4F9681D080809140
:103480000F01A92FBB27A7FDB095CB2FDB2F8130D4
:1034900009F017C1209161043091620440916304E6
:1034A00050916404BD01CE010E94959197FF04C024
:1034B00061587F4F8F4F9F4F7B018C01C7E015955F
:1034C0000795F794E794CA95D1F78D2D992787FD35
:1034D0009095A92FB92F2091590430915A04409109
:1034E0005B0450915C04BC01CD010E94959197FF53
:1034F00004C061587F4F8F4F9F4FB7E095958795D8
:1035000077956795BA95D1F7F801E701C61BD70BF8
:10351000E80BF90B2091DB043091DC04C901A3E036
:10352000880F991FAA95E1F7821B930BAA2797FD95
:10353000A095BA2FC81BD90BEA0BFB0B8091B107E2
:103540009927AA27BB27BC01CD019E01AF010E948C
:10355000959197FF04C061507E4F8F4F9F4FFC01A4
:10356000EB0179E0F595E795D795C7957A95D1F771
:103570001091F007609107017091080112FF05C0DA
:1035800070930E0160930D0118C040910D01509190
:103590000E018091B907282F3327CB01841B950B8F
:1035A000B9010E94D49180910D0190910E01860F76
:1035B000971F90930E0180930D0110FF14C080910E
:1035C0000D0190910E0197FD0F9664E095958795FA
:1035D0006A95E1F7AA2797FDA095BA2FC80FD91FC2
:1035E000EA1FFB1F15C080910D0190910E0197FD00
:1035F0000F9654E0959587955A95E1F7AA2797FD80
:10360000A095BA2F8C1B9D0BAE0BBF0BFD01EC01DF
:103610002091ED07222321F133278091020390911D
:103620000303829FA001839F500D929F500D112490
:10363000CA01AA2797FDA095BA2F8C0F9D1FAE1F18
:10364000BF1F2F5F3F4F442737FD4095542FBC01CC
:10365000CD010E940992309303032093020304C01A
:10366000D0930303C09302038091B207282F33271E
:10367000220F331F220F331F809102039091030307
:10368000821793077CF08091B307282F3327220FEE
:10369000331F220F331F80910203909103032817D9
:1036A000390724F43093030320930203809101012E
:1036B000843108F4F7C080910F018F5F80930F0170
:1036C000F3C02091590430915A0440915B04509109
:1036D0005C04BD01CE010E94959197FF04C0615822
:1036E0007F4F8F4F9F4F7B018C0187E0159507958A
:1036F000F794E7948A95D1F78D2D992787FD9095BA
:10370000A92FB92F20916104309162044091630484
:1037100050916404BC01CD010E9495919B01AC01C4
:1037200097FF04C021583F4F4F4F5F4FC7E055955B
:10373000479537952795CA95D1F72E0D3F1D401F08
:10374000511F8091B5079927AA27BB27BC01CD013E
:103750000E94959197FF04C061507E4F8F4F9F4FFD
:10376000FC01EB01B9E0F595E795D795C795BA95BA
:10377000D1F7809166019927A6E0880F991FAA9535
:10378000E1F740910B0150910C012091B9073327CB
:10379000841B950BB9010E94D49180910B019091EB
:1037A0000C01860F971F90930C0180930B01809161
:1037B000F00781FF14C080910B0190910C0197FDDF
:1037C0000F9674E0959587957A95E1F7AA2797FD6E
:1037D000A095BA2FC80FD91FEA1FFB1F15C08091F3
:1037E0000B0190910C0197FD0F9664E095958795DC
:1037F0006A95E1F7AA2797FDA095BA2F8C1B9D0B20
:10380000AE0BBF0BFD01EC012091EE07222321F14D
:1038100033278091000390910103829FA001839F31
:10382000500D929F500D1124CA01AA2797FDA09513
:10383000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442716
:1038400037FD4095542FBC01CD010E940992309361
:1038500001032093000304C0D0930103C09300032D
:103860008091B607282F3327220F331F220F331FD3
:103870008091000390910103821793077CF080915F
:10388000B707282F3327220F331F220F331F8091B2
:103890000003909101032817390724F430930103A2
:1038A0002093000310920F01E7E0CDB7DEB70C9430
:1038B0004B921F920F920FB60F9211242F933F93AA
: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
:103ED0002231310508F0E3C3EA5BFF4F0C945B929B
:103EE000809178009091790046C0809178009091FF
:103EF000790047C1809178009091790090933403C4
:103F00008093330372C180916A0490916B04209175
:103F1000780030917900821B930B90932407809353
:103F20002307809123079091240790933E03809369
:103F30003D0379C1809178009091790020916C04C3
:103F400030916D04821B930B90932E0780932D0765
:103F500080912D0790912E079093400380933F030B
:103F6000A0C380913703909138032091780030915D
:103F70007900820F931F909338038093370381E079
:103F800091C3809135039091360320917800309150
:103F90007900820F931F909336038093350384E05A
:103FA00081C38091F10783FF1AC080911F01909116
:103FB00020019C01220F331F280F391F40917800E8
:103FC000509179008BE090E0489FB001499F700DBF
:103FD000589F700D1124CB016EE170E00FC08091ED
:103FE0001F01909120019C01220F331F280F391FC0
:103FF000809178009091790063E070E00E94C09118
: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
:10448000CD0120EB30E240E050E00E949591DC014C
: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
:104800000C945B921092480389EA94E09F938F93F3
:104810000DE713E2DF92CF92FE01099584E18093C8
:1048200048030F900F900F900F9084E690E09F93B5
:104830008F938AE590E09F938F931F921F928091B0
:1048400001016AE00E94B491892F99279F938F9369
:10485000809101010E94B49199279F938F9389EBD6
:1048600094E09F938F93DF92CF92E0913B05F0917C
:104870003C05099588E280934803EDB7FEB73E9664
:10488000EDBF81E098E09F938F930E94633099275A
:104890009F938F9381ED94E09F938F93DF92CF92BC
:1048A000E0913B05F0913C050995809155059927CC
:1048B0002DB73EB7285F3F4F2DBFEC01C071D070C0
:1048C00084FF06C08CE3809348038FED94E0F1C031
:1048D0009091E204992349F18CE380934803892F56
:1048E00099279F938F938CEE94E09F938F931F93C0
:1048F0000F93E0913B05F0913C050995DF93CF9331
:104900009091E20481E1989FC0011124825C954F4F
:104910009F938F931F930F93E0913B05F0913C057C
:1049200009958DB79EB70C9647C190915405992370
:10493000B1F08CE380934803892F99279F938F933D
:1049400084EF94E09F938F931F930F93E0913B0527
:10495000F0913C050995EDB7FEB7369679C4909174
:104960004E03992371F08CE380934803892F992794
:104970009F938F938BE095E09F938F931F930F935B
:10498000D9C48091360190913701069710F00C94AC
:10499000EB2C8CE38093480380E295E0A5C78091DF
:1049A00070091DE7C12E13E2D12EC0913B05D091B5
:1049B0003C0580FF6BC010924803809101049091E8
:1049C0000204A0910304B0910404BC01CD0125E0D0
:1049D00030E040E050E00E9409923F932F938DE237
:1049E00095E09F938F93DF92CF92FE01099584E12A
:1049F000809348038DB79EB706968DBF8091FD03C7
:104A00009091FE03A091FF03B0910004BC01CD0181
:104A100025E030E040E050E00E9409923F932F9360
: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
:105260006AE070E00E94D4919F938F9380911F0118
:10527000909120016AE070E00E94D4917F936F9337
:105280008CEE96E09F938F93DF92CF92FE0109956B
:1052900084E1809348032DB73EB7285F3F4F2DBF71
:1052A0008091100A9091110A6AE070E00E94C0910A
:1052B0009F938F938091100A9091110A6AE070E099
:1052C0000E94C0917F936F9380E097E09F938F93AC
: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
:105DF000F99A0FBE089567EF7CE20E942390089500
:105E00004FEF5CE20E945D900895EF92FF920F9336
:105E10001F93CF93C82F8150853008F0C3E08DE7E2
:105E2000C89F8001112487EEE82E8FEFF82EE00E38
:105E3000F11E6CE770E0C7010E941C2D682F9801CD
:105E40002D593F4F8FB39927AC014270507081FD9F
:105E5000F9CF32BD21BDF89A80B5861711F0CA017D
:105E600023C08FB399279C012270307081FDF9CF38
:105E7000F2BCE1BCF89A80B58C3511F0C90114C0B0
:105E80008DE7C89FC0011124499727EF3CE24DE7F9
:105E900050E0BC0183E897E00E94FE8F0E94D26D23
:105EA0000E94DB8B81E090E0CF911F910F91FF90DA
:105EB000EF900895282F863010F025E003C0882346
:105EC00009F421E0F999FECF1FBA82E090E092BD7B
:105ED00081BD20BD0FB6F894FA9AF99A0FBE0895C5
:105EE000CF93C82F809183078C3509F051C0C630FD
:105EF00010F0C5E003C0CC2309F44AC00E94E78E2D
:105F00008091F20782FF07C08091A807843618F0BD
:105F100080E58093A8076CE770E083E897E00E9433
:105F20000B2D8093FF078DE7C89FC00111242FEF31
:105F30003CE24DE750E063E877E049970E943B90F0
:105F40002FEF3CE24CE050E064E877E080E590E041
:105F50000E943B906CE070E084E897E00E940B2D7B
:105F6000282FF999FECF1FBA8CE590E092BD81BD34
:105F700020BD0FB6F894FA9AF99A0FBE8C2F0E94A2
:105F80005A2F0E94D26D0E94DB8B81E090E002C00C
:105F900080E090E0CF9108956DE470E088EE93E0AA
:105FA0000E941C2D482F8FB399279C0122703070BE
:105FB00081FDF9CF85E394E092BD81BDF89A80B56B
:105FC000841779F48FB399279C012270307081FD7A
:105FD000F9CF88EE93E092BD81BDF89A80B581300B
:105FE00011F0C901089527EF3CE24EE450E068EE5D
:105FF00073E080E098E00E94FE8F81E090E00895D9
:10600000809100088130A9F46DE470E080E098E0B0
:106010000E940B2D80934D082FEF3CE24EE450E0A0
:1060200060E078E088EE93E00E943B9081E090E0B1
:10603000089580E090E00895CF93DF9381E080930E
:106040000008E0E0F8E08FE0158616861786108AD3
:106050008150349687FFF8CF80E480930D088093B9
:106060000E0810920F08809310088093110890EC8E
:1060700090931208109213088093140880931508C7
:106080001092160890931708909318088093190897
:1060900010921A0880931B0890931C08A1E0B8E0A6
:1060A0008CE0E9E2F1E0ED01019009928A95E1F7D7
:1060B0006DE470E0CD0101970E940B2D80934D0897
:1060C000DF91CF910895F999FECF82E090E092BDE3
:1060D00081BDF89A80B5282F863078F023E0322FE2
:1060E000F999FECF1FBA82E090E092BD81BD30BD2C
:1060F0000FB6F894FA9AF99A0FBE822F992708954D
:106100001F93CF93C82F162F863010F0C5E003C021
:10611000882309F4C1E08C2F99278230910541F042
:106120008330910544F4019731F40E94492E05C053
:106130000E947E2E02C00E94B32E1123E1F06CE07B
:1061400070E080E590E00E941C2D282FF999FECF89
:106150008CE590E092BD81BDF89A80B5821759F424
:1061600027EF3CE24CE050E060E570E084E897E027
:106170000E94FE8F02C00E94342D8C2F0E94702F2F
:10618000CF911F910895DF92EF92FF920F931F938B
:10619000CF93FF24DF2CEF2C81E090E00E94E72ECC
:1061A0008C3511F031E0E32E6CE070E080E590E09A
:1061B0000E941C2DC82FF999FECF8CE590E092BD6E
:1061C00081BDF89A80B58C1711F421E0D22EC1E080
:1061D00001E010E0EE2029F48C2F0E94052F882387
:1061E000C9F591E0F92E1F930F938FEA98E09F93E2
:1061F0008F9380E695E19F938F93E0913B05F0911B
:106200003C0509952DB73EB72A5F3F4F2DBF0230A1
:10621000110549F0033011054CF40130110531F43A
:106220000E94492E05C00E947E2E02C00E94B32EFD
:10623000DD2059F027EF3CE24CE050E060E570E0F3
:1062400084E897E00E94FE8F02C00E94342D8C2FBC
: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
:10641000310508F0C2C2E759FF4F0C945B9281E04E
: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
:106E40000E94D491CB01880F991F860F971F05517F
: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
:1070E000390BC90163E070E00E94D491CB01880F95
:1070F000991F860F971FE658FC4F9183808308C025
:10710000E62FFF27EE0FFF1FE658FC4F118210827B
:107110008091C803E82FFF27EE0FFF1FE05AFC4FB6
:10712000D183C08309C0809101018A3011F084317C
:1071300010F0289A01C0289880910101843188F4C8
:107140008091C803853011F45D9A05C05D98863042
:1071500011F45C9A05C05C98873011F45B9A01C009
:107160005B988091C803843120F48F5F8093C803BB
:1071700020C08431F1F4809101018A3011F0843112
:1071800010F0289A01C028988EE18093C8032CE063
:10719000CBEED8E0A4E9B3E0E7EBF8E08D919D9168
:1071A000918380833296198218822296215027FF7C
:1071B000F5CFFF91EF91DF91CF91BF91AF919F916B
:1071C0008F917F916F915F914F913F912F911F917F
:1071D0000F910F900FBE0F901F901895EF92FF9296
:1071E0000F931F9380919F079927880F991F880FEE
:1071F000991F7C010027F7FC0095102F80916104F6
:1072000090916204A0916304B0916404BC01CD012B
:10721000A80197010E9409923093E1062093E006AD
:107220008091590490915A04A0915B04B0915C0440
:10723000BC01CD01A80197010E9409923093E30699
:107240002093E206809174099091750997FD039649
:1072500095958795959587959093E5068093E40697
:10726000809184099091850997FD0396959587955E
:10727000959587959093E7068093E6068091720432
:10728000909173042091240330912503821B930B6A
:107290009093E9068093E80680910104909102049E
:1072A000A0910304B0910404BC01CD0125E030E0BD
:1072B00040E050E00E9409923093EB062093EA06EA
:1072C00080911E0390911F039093ED068093EC062E
:1072D00080911F01909120019093EF068093EE061C
:1072E0008091570899279093F1068093F00680913A
:1072F0005F0899279093F3068093F20680916708C0
:1073000099279093F5068093F40680916F0899274A
:107310009093F7068093F6068091770899279093CB
:10732000F9068093F80680917F0899279093FB06D1
:107330008093FA068091870899279093FD068093A1
:10734000FC0680918F0899279093FF068093FE0694
:1073500080910704992790930107809300078091FB
:10736000800990918109A0918209B09183092091AF
:107370003C0130913D0140913E0150913F01BC01E3
:10738000CD010E9409923093030720930207809158
:10739000100A9091110A9093050780930407809139
:1073A000140A9091150A909307078093060780911D
:1073B000020390910303909309078093080780913B
:1073C00088019091890190930B0780930A0710928E
:1073D0000D0710920C078091160A992790930F07BA
:1073E00080930E078091D3049091D4049093110759
:1073F000809310078091D1049091D2049093130749
:107400008093120780915405882321F480915505BB
:10741000882321F08091DF06816003C08091DF0620
:107420008E7F8093DF061F910F91FF90EF9008955C
:10743000EF92FF921F93CF93DF93182F7B018091E0
:107440000604882391F5809101018C3010F086317B
:1074500011F4299801C0299A11501F3FE9F0F092C8
:107460000903E0920803E701809108039091090362
:10747000892B11F4209781F380910C038823A1F3C9
:1074800010920C038091080390910903892B09F451
:1074900021970E94FD8EE8CF809101018C3010F081
:1074A000863111F4299A01C02998DF91CF911F915B
:1074B000FF90EF900895CF93DF93809101018D307D
:1074C00011F40E94621E10927A008091280390911C
:1074D000290390933909809338098091260390916C
:1074E0002703909329098093280980912403909180
:1074F000250390937A098093790920912003309194
:107500002103C901880F991F880F991F820F931FAC
:10751000820F931F90937509809374092091220321
:1075200030912303C901880F991F880F991F820F7B
:10753000931F820F931F90938509809384098FEC8A
:1075400080937A00A8E0B4E0C8E8D7E097E089919A
:10755000E82FFF27EE0FFF1FE954F74F0190F0814E
:10756000E02DE158FF4F1E161F061CF0E0E0F0E092
:1075700005C0EF3FF10514F0EFEFF0E08C91282FFC
:107580003327E217F30714F4815004C02E173F0786
:1075900014F48F5F8C939150119697FFD8CF809100
:1075A000C4079927AA27BB27BC01CD0124EC39E0E9
:1075B00040E050E00E949591DC01CB018093800176
:1075C00090938101A0938201B09383018091C507BC
:1075D0009927AA27BB27BC01CD010E949591DC0108
:1075E000CB0180937C0190937D01A0937E01B093A9
:1075F0007F01DF91CF910895A0E0B0E0E2E0FBE3EE
:107600000C942A92882EC0E0D0E07E016E01109288
:107610005405D0936D04C0936C04D0936B04C09355
:107620006A04D0936704C0936604D0937704C09330
:107630007604D0937504C0937404D0937304C093FC
:1076400072041092640110926301109219030E9457
:107650005B3A84E690E00E9491190E945B3A809127
:10766000900780FF10C08091150190911601875BF3
:10767000934038F480911501909116018E5E9240EE
:1076800010F40E94E01D0FE18AE090E00E94911941
:107690008091240390912503C80FD91F809128035E
:1076A00090912903E80EF91E8091260390912703FB
:1076B000C80ED91E015007FFE7CF9701205F3F4F4B
:1076C0003695279536952795309377042093760441
:1076D000C6014096969587959695879590937504E3
:1076E000809374046096F5E0D695C795FA95E1F716
:1076F000D0937304C09372049093710480937004C8
:1077000030936F0420936E04882009F441C0809167
:1077100074099091750997FF03C0909581959F4FCB
:107720006CE070E00E94D4919B0170936D046093B3
:107730006C04809184099091850997FF03C090950E
:1077400081959F4F6CE070E00E94D49170936B0420
:1077500060936A04809125079091260790936704AF
:1077600080936604B90184E090E00E94002F60914C
:107770006A0470916B0486E090E00E94002F609193
:1077800066047091670488E090E00E94002F65C055
:1077900084E090E00E94FB2E90936D0480936C0433
:1077A00086E090E00E94FB2E90936B0480936A0425
:1077B00088E090E00E94FB2E9C01909367048093E8
:1077C000660480916C0490916D048150984050F44F
:1077D00080916A0490916B048150984018F4215074
:1077E0003440D8F180E399E09F938F9380E695E150
:1077F0009F938F93E0913B05F0913C050995809113
:1078000074099091750997FF03C0909581959F4FDA
:107810006CE070E00E94D49170936D0460936C04EE
:10782000809184099091850997FF03C09095819577
:107830009F4F6CE070E00E94D49170936B04609352
:107840006A0480912507909126079093670480939E
:1078500066040F900F900F900F90109239091092BC
:107860003809109229091092280910927A09109269
:10787000790984E690E00E9491198091200390910B
:1078800021039C01220F331F220F331F280F391FA2
:10789000280F391F309375092093740980912203B2
:1078A000909123038C01000F111F000F111F080F6F
:1078B000191F080F191F10938509009384098091DF
:1078C0009F07C82EDD24EE24FF24442737FD409572
:1078D000542FC701B6010E9495914B015C01609342
:1078E000610470936204809363049093640498012C
:1078F000442737FD4095542FC701B6010E9495914A
:10790000DC01CB018093590490935A04A0935B044B
:10791000B0935C048092410490924204A09243048C
:10792000B09244048093390490933A04A0933B04AA
:10793000B0933C041092310410923204109233043C
:10794000109234048091170190911801A0911901AF
:10795000B0911A019093280780932707109218037B
:107960001092170310922104109222041092230403
:107970001092240400918801109189011093200431
:1079800000931F0484E690E0909385018093840126
:1079900082E390E090930903809308038091C407E9
:1079A0009927AA27BB27BC01CD0124EC39E040E090
:1079B00050E00E949591DC01CB018856954CAF4F69
:1079C000BF4F8093800190938101A0938201B09377
:1079D00083018091C5079927AA27BB27BC01CD0148
:1079E0000E949591DC01CB018856954CAF4FBF4F5B
:1079F00080937C0190937D01A0937E01B0937F01E1
:107A00001092410110924001C801AA2797FDA0954C
:107A1000BA2F20913C0130913D0140913E0150919F
:107A20003F01BC01CD010E949591DC01CB01809307
:107A3000800990938109A0938209B09383091092E1
:107A40001C0410921B040E94D26D8091CF038460AD
:107A50008093CF038FEF8093000A1092010A80E297
:107A60008093020AC8E0D4E0A8E8B7E007E08D916F
:107A7000E82FFF27EE0FFF1FE954F74F8081918118
:107A800081588993015007FFF2CF84E68093070461
:107A900080910603882311F0579A06C080E091E197
:107AA0009093080180930701809176049091770468
:107AB00080569940815C9B4228F0809154058160FA
:107AC0008093540580917404909175048056994078
:107AD000815C9B4228F0809154058260809354051C
:107AE00080917204909173048C5291408957954013
:107AF00028F08091540584608093540580916C0433
:107B000090916D048C529140835C914028F080915B
:107B1000540588608093540580916A0490916B04A9
:107B20008C529140835C914028F080915405806193
:107B30008093540580916604909167048050924030
:107B40008355914028F080915405806280935405BC
:107B500086E4809377010E94DB8BECE0CDB7DEB743
:107B60000C944692A3E1B0E0E8EBFDE30C94249280
:107B70008091720490917304209124033091250325
:107B8000821B930B90937A098093790980912E033D
:107B900090912F0397FD07969C0113E0359527954B
:107BA0001A95E1F7309339092093380980912C0315
:107BB00090912D0397FD0796B3E095958795BA951B
:107BC000E1F7909329098093280930934409209381
:107BD000430990933C0980933B09809174099091EB
:107BE0007509AC01440F551F480F591F2091200300
:107BF00030912103C901880F991F880F991F820FA7
:107C0000931F820F931F480F591F57FF02C04D5FEC
:107C10005F4F5595479555954795509375094093F6
:107C200074098091840990918509AC01440F551F16
:107C3000480F591F2091220330912303C901880F57
:107C4000991F880F991F820F931F820F931F480F50
:107C5000591F57FF02C04D5F5F4F5595479555958A
:107C600047955093850940938409209120033091D2
:107C70002103C901880F991F880F991F820F931F35
:107C8000820F931F9C01442737FD4095542F80910C
:107C9000510490915204A0915304B0915404820F66
:107CA000931FA41FB51F8093510490935204A09377
:107CB0005304B09354042091220330912303C9014B
:107CC000880F991F880F991F820F931F820F931F90
:107CD0009C01442737FD4095542F80914D0490918D
:107CE0004E04A0914F04B0915004820F931FA41F23
:107CF000B51F80934D0490934E04A0934F04B0930E
:107D0000500480914D0990914E09209120033091AB
:107D10002103820F931F90934E0980934D09809108
:107D20007C0990917D092091220330912303820FD9
:107D3000931F90937D0980937C09809168049091B2
:107D400069040196909369048093680480912507E3
:107D5000909126072091660430916704821B930B53
:107D60009C01442737FD4095542F80914904909100
:107D70004A04A0914B04B0914C04820F931FA41F9E
:107D8000B51F8093490490934A04A0934B04B09389
:107D90004C048FEC80937A001092110120913904E9
:107DA00030913A0440913B0450913C0429873A8732
:107DB0004B875C8729543B46414050402CF028E4D7
:107DC0003BE641E050E00DC089859A85AB85BC85D6
:107DD000885B9449AE4FBF4F4CF428EB34E94EEF2B
:107DE0005FEF2D833E834F83588708C089859A852E
:107DF000AB85BC858D839E83AF83B887209141047A
:107E00003091420440914304509144042D873E87B1
:107E10004F87588B29543B46414050402CF028E472
:107E20003BE641E050E00DC08D859E85AF85B88969
:107E3000885B9449AE4FBF4F4CF428EB34E94EEFCA
:107E40005FEF29833A834B835C8308C08D859E85D1
:107E5000AF85B88989839A83AB83BC83A091790964
:107E6000B0917A09BB8BAA8BFD01CF01AA2797FDA0
:107E7000A095BA2FA0903104B0903204C090330482
:107E8000D0903404A80EB91ECA1EDB1EA092310485
:107E9000B0923204C0923304D0923404E09080094E
:107EA000F09081090091820910918309E80EF91E72
:107EB0000A1F1B1FE0928009F0928109009382093A
:107EC00010938309F091EA03F98BFF2309F098C11D
:107ED0008091E903882309F093C18091700986FF9E
:107EE0008FC18091280990912909AA2797FDA09513
:107EF000BA2FBC01CD0129813A814B815C810E945E
:107F000095919B01AC0197FF04C02150384F4F4F12
:107F10005F4FBBE05595479537952795BA95D1F7B3
:107F200080916301682E772488249924CA01B901BD
:107F3000A40193010E949591DC01CB0180938204FE
:107F400090938304A0938404B0938504B7FF04C086
:107F50008150904FAF4FBF4F1C012D01ACE05594A5
:107F6000479437942794AA95D1F7209282043092AF
:107F70008304409284045092850480913809909142
:107F80003909AA2797FDA095BA2FBC01CD012D81F3
:107F90003E814F8158850E94959197FF04C06150A2
:107FA000784F8F4F9F4FFBE0959587957795679515
:107FB000FA95D1F7A40193010E949591DC01CB01C0
:107FC0008093860490938704A0938804B0938904D7
:107FD000B7FF04C08150904FAF4FBF4F9C01AD0120
:107FE000ECE05595479537952795EA95D1F720937D
:107FF00086043093870440938804509389048091C9
:108000008204909183049093200980931F098091AA
:108010008604909187049093240980932309221960
:10802000330944095509209386043093870440930B
:10803000880450938904E20EF31E041F151FE0927A
:108040008009F0928109009382091093830980913D
:1080500062018823B1F457FF04C02F5F3F4F4F4F99
:108060005F4F5595479537952795A21AB30AC40ACD
:10807000D50AA0923104B0923204C0923304D09257
:1080800034042A893B8979010027F7FC0095102FD9
:108090008091860490918704A0918804B09189040E
:1080A000E80EF91E0A1F1B1FC801B70129813A817A
:1080B0004B815C810E9495919B01AC0197FF04C0AC
:1080C0002150384F4F4F5F4F6BE05595479537958F
:1080D00027956A95D1F780916401A82EBB24CC2402
:1080E000DD24CA01B901A60195010E949591DC0128
:1080F000CB0180937A0490937B04A0937C04B0938B
:108100007D04B7FF04C08150904FAF4FBF4F3C017B
:108110004D013CE095948794779467943A95D1F714
:1081200060927A0470927B0480927C0490927D0429
:10813000C801B7012D813E814F8158850E949591DC
:1081400097FF04C06150784F8F4F9F4F2BE095955C
:108150008795779567952A95D1F7A60195010E9495
:108160009591DC01CB0180937E0490937F04A093D2
:108170008004B0938104B7FF04C08150904FAF4F8B
:10818000BF4FAC01BD018CE075956795579547953C
:108190008A95D1F740937E0450937F0460938004C6
:1081A000709381042A893B8937FF03C0309521955C
:1081B0003F4F21343105E4F1D401C30197FE07C0DC
:1081C000B095A095909581959F4FAF4FBF4F813847
:1081D0009105A105B10584F4DB01CA0177FF07C051
:1081E000B095A095909581959F4FAF4FBF4F813827
:1081F0009105A105B105E4F081E080931D0418C04C
:1082000010922409109223091092200910921F093C
:1082100010927E0410927F041092800410928104C8
:1082200010927A0410927B0410927C0410927D04C8
:1082300080917E0490917F04A0918004B09181048C
:10824000BC01CD0124E630E040E050E00E940992FC
:10825000E0907A04F0907B04E21AF30AF092370976
:10826000E092360980917A0490917B04A0917C047D
:10827000B0917D04BC01CD0124E630E040E050E047
:108280000E940992DA01C90120917E0430917F0495
:108290008C01021B130B10932B0900932A09809168
:1082A0003C0190913D01A0913E01B0913F01BC0184
:1082B000CD0128E631E040E050E00E949591209108
:1082C00080093091810940918209509183092617D4
:1082D00037074807590764F0261B370B480B590B23
:1082E0002093800930938109409382095093830938
:1082F0002091800930918109409182095091830930
:1083000057FF0CC0260F371F481F591F20938009A5
:108310003093810940938209509383096091280921
:10832000709129096E0D7F1D9B01442737FD4095F3
:10833000542F8091350490913604A0913704B09168
:108340003804820F931FA41FB51F809335049093A8
:108350003604A0933704B09338048091EF039091D2
:10836000F003681B790BCB01AA2797FDA095BA2FC4
:1083700029853A854B855C85820F931FA41FB51F05
:108380008093390490933A04A0933B04B0933C0447
:10839000C0907C01D0907D01E0907E01F0907F0143
:1083A000C816D906EA06FB06C4F488EA91E6A0E0FE
:1083B000B0E08C199D09AE09BF09809339049093F0
:1083C0003A04A0933B04B0933C048093350490930B
:1083D0003604A0933704B093380422273327A90129
:1083E0002C193D094E095F098091390490913A0496
:1083F000A0913B04B0913C0482179307A407B507F2
:10840000B4F4D701C601885A9146A040B040809389
:10841000390490933A04A0933B04B0933C048093B6
:10842000350490933604A0933704B09338046091D8
:10843000380970913909600F711F9B01442737FD7E
:108440004095542F80913D0490913E04A0913F04AB
:10845000B0914004820F931FA41FB51F80933D0469
:1084600090933E04A0933F04B09340048091ED03A9
:108470009091EE03681B790BCB01AA2797FDA0957D
:10848000BA2F2D853E854F855889820F931FA41FD3
:10849000B51F8093410490934204A0934304B0938A
:1084A0004404E0908001F0908101009182011091DC
:1084B0008301E816F9060A071B07C4F488EA91E667
:1084C000A0E0B0E08E199F09A00BB10B809341048E
:1084D00090934204A0934304B093440480933D04DA
:1084E00090933E04A0933F04B09340042227332787
:1084F000A9012E193F09400B510B80914104909125
:108500004204A0914304B091440482179307A40746
:10851000B507B4F4D801C701885A9146A040B040CD
:108520008093410490934204A0934304B093440485
:1085300080933D0490933E04A0933F04B093400485
:108540008091310490913204A0913304B0913404AD
:108550008093450490934604A0934704B093480445
:108560008091410490914204A0914304B09144044D
:108570008093610490936204A0936304B0936404B5
:108580008091390490913A04A0913B04B0913C044D
:108590008093590490935A04A0935B04B0935C04B5
:1085A00080913D0490913E04A0913F04B09140041D
:1085B00080935D0490935E04A0935F04B093600485
:1085C0008091350490913604A0913704B09138041D
:1085D0008093550490935604A0935704B093580485
:1085E00080911D0190911E0197FD079603E09595DE
:1085F00087950A95E1F7909339098093380980911E
:108600001B0190911C0197FD079613E095958795A6
:108610001A95E1F7909329098093280980912803FE
:10862000909129030F9734F488E19CEF90933909D6
:10863000809338098091280390912903079734F497
:1086400080E398EF909339098093380920910101D4
:108650002A30A9F48091280390912903835F9340E5
:1086600034F088EE93E09093390980933809809133
:108670002803909129038A5F9340DCF014C0809115
:10868000280390912903815D974034F088EE93E0B0
:108690009093390980933809809128039091290398
:1086A000805E974034F080ED97E090933909809395
:1086B000380980912603909127030F9734F488E1BD
:1086C0009CEF90932909809328098091260390912B
:1086D0002703079734F480E398EF90932909809358
:1086E00028092A30A9F48091260390912703835FFB
:1086F000934034F088EE93E0909329098093280901
:1087000080912603909127038A5F9340DCF014C088
:108710008091260390912703815D974034F088EE85
:1087200093E09093290980932809809126039091E2
:108730002703805E974034F080ED97E090932909FD
:108740008093280960916E01662309F4AFC04091BF
:108750001D0150911E0180918A0490918B04481B49
:10876000590B509391044093900420911D01309136
:108770001E01280F391F37FF02C02F5F3F4F35956D
:10878000279530938B0420938A04413851051CF0BF
:1087900080E890E005C040585F4F34F480E89FEFD8
:1087A000909391048093900440911B0150911C017F
:1087B00080918C0490918D04481B590B50938F0429
:1087C00040938E0420911B0130911C01280F391F0A
:1087D00037FF02C02F5F3F4F3595279530938D04AB
:1087E00020938C04413851051CF080E890E005C0CE
:1087F00040585F4F34F480E89FEF90938F0480934C
:108800008E04462F55278091900490919104849F67
:10881000B001859F700D949F700D11249B0177FF0F
:1088200002C0215F3F4FF4E035952795FA95E1F7B7
:108830008091380990913909820F931F90933909DB
:108840008093380980918E0490918F04849FD00189
:10885000859FB00D949FB00D1124AD019D01B7FF10
:1088600002C0215F3F4FE4E035952795EA95E1F797
:108870008091280990912909820F931F90932909CB
:108880008093280980911D0190911E01860F971FEA
:1088900090931E0180931D0180911B0190911C01FA
:1088A000840F951F90931C0180931B0100913B093D
:1088B00010913C0980911F09909120091016110612
:1088C0005CF59C0197FF04C022273327281B390B36
:1088D000C901AA2797FDA095BA2F209162013327DD
:1088E00044275527BC01CD010E9495919B01AC0105
:1088F00097FF04C0215C3F4F4F4F5F4F76E0559587
:108900004795379527957A95D1F7809136099091BB
:108910003709820F931F27C097FF03C09095819559
:108920009F4FAA2797FDA095BA2F20916201332768
:1089300044275527BC01CD010E9495919B01AC01B4
:1089400097FF04C0215C3F4F4F4F5F4F66E0559546
:108950004795379527956A95D1F78091360990917B
:108960003709821B930B9093370980933609E09067
:108970004309F090440980912309909124091E1421
:108980001F045CF59C0197FF04C022273327281B96
:10899000390BC901AA2797FDA095BA2F2091620132
:1089A000332744275527BC01CD010E9495919B0197
:1089B000AC0197FF04C0215C3F4F4F4F5F4F96E0E3
:1089C00055954795379527959A95D1F780912A091E
:1089D00090912B09820F931F27C097FF03C090959A
:1089E00081959F4FAA2797FDA095BA2F20916201EC
:1089F000332744275527BC01CD010E9495919B0147
:108A0000AC0197FF04C0215C3F4F4F4F5F4F86E0A2
:108A100055954795379527958A95D1F780912A09DD
:108A200090912B09821B930B90932B0980932A0919
:108A30008091700987FF44C0B989BB2309F040C009
:108A40008091E9038823E1F5E1E0EE16E1E0FE061E
:108A50004CF080913809909139098E0D9F1D8050FE
:108A600091400DC0F0E0EF16FFEFFF0664F4809137
:108A70003809909139098E0D9F1D80509F4F90931A
:108A800039098093380921E0013012074CF08091B8
:108A9000280990912909800F911F805091400CC0A6
:108AA0003FEF0030130764F4809128099091290961
:108AB000800F911F80509F4F909329098093280920
:108AC000E2E1CD5E0C94409280910604882301F58A
:108AD0008091CF038C7F8093CF03A9E5B5E0E6E5D5
:108AE000F8E09BE08091E702882309F48C938D9154
:108AF000818312829150389697FFF4CF8091E702DC
:108B0000882359F08091E70281508093E70205C0E5
:108B10008091CF0381608093CF0380914F0388239E
:108B200019F010924F0308958093510380935303DB
:108B300080914D038E7F80934D0385EA8093BC0026
:108B40000895CF93DF93A8E0B4E0C8E8D7E057E0FA
:108B50009991E92FFF27EE0FFF1FE954F74F01907E
:108B6000F081E02DE158FF4FEF3FF10521F01CF0BF
:108B7000EFEFF0E004C0F7FF02C0E0E0F0E0993171
:108B800011F4EC931BC04C91242F3327E217F30709
:108B9000A9F0CF01821B930B97FD039695958795BE
:108BA00095958795242F280F2C93822F9927E817C6
:108BB000F90714F4215001C02F5F2C9351501196E6
:108BC00057FFC6CF80919207883F38F0EFEFF0E073
:108BD000E81BF109E85FFB4F80818093740180916D
:108BE0007401882329F0843618F084E68093740198
:108BF00080919407883F38F0EFEFF0E0E81BF1092F
:108C0000E85FFB4F8081809372018091720188231D
:108C100029F0843618F084E6809372018091A107D0
:108C2000883F38F0EFEFF0E0E81BF109E85FFB4F19
:108C3000808180936D0180916D018B3010F48AE00A
:108C400002C08F3F11F480936D018091CE07883F61
:108C500038F0EFEFF0E0E81BF109E85FFB4F8081AF
:108C600080934F0980914F09863010F485E002C04F
:108C70008F3F11F480934F098091D007883F38F0DF
:108C8000EFEFF0E0E81BF109E85FFB4F8081809394
:108C9000770980917709863010F485E002C08F3F14
:108CA00011F4809377098091BB07873F19F44299AB
:108CB00005C006C0863F31F4439B02C08CE80BC060
:108CC00086E409C0883F38F0EFEFF0E0E81BF109D7
:108CD000E85FFB4F808180934C098091BC07873F00
:108CE00019F4429905C006C0863F31F4439B02C087
:108CF0008CE80BC086E409C0883F38F0EFEFF0E065
:108D0000E81BF109E85FFB4F808180932509809182
:108D1000BD07883F38F0EFEFF0E0E81BF109E85FAE
:108D2000FB4F80818093550980919307883F38F0ED
:108D3000EFEFF0E0E81BF109E85FFB4F80818093E3
:108D4000730180919607883F38F0EFEFF0E0E81B61
:108D5000F109E85FFB4F8081809371018091980752
:108D6000883F38F0EFEFF0E0E81BF109E85FFB4FD8
:108D7000808180936F018091A007883F38F0EFEFEA
:108D8000F0E0E81BF109E85FFB4F80818093700100
:108D90008091A207883F38F0EFEFF0E0E81BF1097F
:108DA000E85FFB4F808180936C018091A307883F2F
:108DB00038F0EFEFF0E0E81BF109E85FFB4F80814E
:108DC00080936E018091A407883F38F0EFEFF0E0C8
:108DD000E81BF109E85FFB4F808180936B01809174
:108DE000A507883F38F0EFEFF0E0E81BF109E85FF6
:108DF000FB4F808180936A018091AB07883F38F0F8
:108E0000EFEFF0E0E81BF109E85FFB4F8081809312
:108E100068018091AC07883F38F0EFEFF0E0E81B85
:108E2000F109E85FFB4F80818093E4038091AD07F7
:108E3000883F38F0EFEFF0E0E81BF109E85FFB4F07
:108E400080818093E3038091AE07883F38F0EFEF95
:108E5000F0E0E81BF109E85FFB4F80818093E203BB
:108E60008091AF07883F38F0EFEFF0E0E81BF109A1
:108E7000E85FFB4F80818093E1038091C907883FC1
:108E800038F0EFEFF0E0E81BF109E85FFB4F80817D
:108E90008093E0038091CA07883F38F0EFEFF0E05D
:108EA000E81BF109E85FFB4F80818093DF0380912D
:108EB000CB07883F38F0EFEFF0E0E81BF109E85FFF
:108EC000FB4F80818093DE038091CC07883F38F090
:108ED000EFEFF0E0E81BF109E85FFB4F8081809342
:108EE000DD038091B007883F38F0EFEFF0E0E81B3A
:108EF000F109E85FFB4F8081809367018091B4079F
:108F0000883F38F0EFEFF0E0E81BF109E85FFB4F36
:108F10008081809366018091BE07883F38F0EFEF33
:108F2000F0E0E81BF109E85FFB4F80818093650169
:108F30008091C107883F38F0EFEFF0E0E81BF109BE
:108F4000E85FFB4F8081809364018091C207883F76
:108F500038F0EFEFF0E0E81BF109E85FFB4F8081AC
:108F6000809363018091C307883F38F0EFEFF0E012
:108F7000E81BF109E85FFB4F8081809362018091DB
:108F8000EB07883F38F0EFEFF0E0E81BF109E85F0E
:108F9000FB4F8081809334099091DD04992321F067
:108FA00080913409981720F080913409882311F4B6
:108FB0009093340980919007809370098091F10714
:108FC000809354098091C807883F38F0EFEFF0E0B4
:108FD000E81BF109E85FFB4F80818093610180917C
:108FE000E407883F38F0EFEFF0E0E81BF109E85FB5
:108FF000FB4F80818093870980916801282F332758
:109000002F5F3F4F8CE398E2B9010E94D491709397
:1090100076016093750180919E0780937809809115
:109020009D0780933D099091E607933308F44AC069
:1090300081E08093DC03983F58F0EFEFF0E0E91B0C
:10904000F109E85FFB4F8081823310F41092DC035A
:10905000809177012091DC03821721F18330F8F4AD
:1090600030919D01222351F08CED95E090930903FE
:1090700080930803332369F48EE209C088EC90E002
:109080009093090380930803332319F487E18093B5
:109090009D0185E08093F1032093770103C0815007
:1090A000809377018091C7099091C80997FF0FC0FD
:1090B0008091DC03882359F0809154058068809367
:1090C000540505C01092DC038AE0809377018091FB
:1090D000C7099091C80997FF1DC080910604882395
:1090E000C9F08091DC038823A9F080910901909157
:1090F0000A018F5F9F4F71F488E99AE39093090307
:109100008093080380E094EA90930A018093090118
:109110001092DC038091DC03882369F08091CE03F8
:1091200081608093CE0380916401823D48F4825E29
:109130008093640105C08091CE038E7F8093CE031F
:10914000DF91CF910895A7E1B0E0E9EAF8E40C944B
:1091500024920E94B23D8091CF0399278471907030
:10916000892B91F58091F20782FF27C08091EB0354
:109170009091EC030097F1F002E088359007D4F469
:109180009C0197FF02C02D5F3F4F35952795359580
:1091900027958091A8079927289FA001299F500D06
:1091A000389F500D1124CA0164E670E00E94D491EA
:1091B000CB0106C08DE290E003C08091A8079927FB
:1091C0009093CD038093CC032091CA033091CB03BD
:1091D00055E72033350759F4109212041092110408
:1091E00080913D0999279093CD038093CC036091A2
:1091F0001104709112047A83698380913D09992743
:109200000A966817790714F49A8389838091070472
:10921000843608F06AC08091CE0382FD66C08091DA
:10922000A6049091A704009731F001979093A704AA
:109230008093A6040BC0109206049093D1038093F0
:10924000D0038091CF038D7E8093CF038091010165
:109250008A3011F0843110F0289A01C0289880914A
:10926000D0039091D103895E9340E0F18091160A7A
:109270008536C0F18091CC039091CD039A83898388
:109280008091CF0380618093CF0380918407A82FC2
:10929000BB27AA0FBB1FFD01E551F74F11821082BA
:1092A00080918507282F3327220F331FC90185514D
:1092B000974FFC0111821082A954B74F11961C924E
:1092C0001E922954374FD90111961C921E928091FB
:1092D0008707E82FFF27EE0FFF1FE954F74F118292
:1092E00010823FC3109206043CC3809107048D385E
:1092F00008F40DC38091CF038F7E8093CF039091AC
:10930000A90782E3989FC00111249093A70480933A
:10931000A604E981FA81B9978CF08091060488232C
:1093200069F08091D0039091D103FFEF8F3F9F07A9
:1093300029F001969093D1038093D0038091D003BC
:109340009091D1038F3F910509F008F510922904FF
:1093500010922A0410922B0410922C0410922504CF
:10936000109226041092270410922804109292045E
:109370001092930410929404109295041092310468
:1093800010923204109233041092340405C080917C
:10939000CF0382608093CF0380918607E82FFF2759
:1093A000EE0FFF1FE954F74F8081918181359105C0
:1093B0000CF438C120910604222309F033C18091B6
:1093C0008707E82FFF27EE0FFF1FE954F74F808133
:1093D00091818C3491050CF4FFC08091A8048F5FBB
:1093E0008093A804893C08F41DC12093A80410921E
:1093F000D1031092D00330918407E32FFF27EE0FA3
:10940000FF1FE954F74F8081918187349105B4F4AF
:1094100080918507E82FFF27EE0FFF1FE954F74FD4
:10942000808191810190F081E02DF7FF03C0F095DC
:10943000E195FF4FE734F1050CF478C041E020914D
:109440008507A22FBB27AA0FBB1FA954B74F8D9129
:109450009C9111978734910544F0E32FFF27EE0F7D
:10946000FF1FE954F74F808191818D919C91873442
:10947000910574F080918407E82FFF27EE0FFF1FFE
:10948000E954F74F80819181873491050CF042E0D7
:10949000E22FFF27EE0FFF1FE954F74F80819181E4
:1094A0008634910574F480918407E82FFF27EE0F2E
:1094B000FF1FE954F74F80819181873491050CF0AB
:1094C00043E0E22FFF27EE0FFF1FE954F74F8081A3
:1094D00091818A5B9F4F74F480918407E82FFF2766
:1094E000EE0FFF1FE954F74F80819181873491057A
:1094F0000CF044E0E22FFF27EE0FFF1FE954F74F77
:10950000808191818A5B9F4F74F480918407E82F5A
:10951000FF27EE0FFF1FE954F74F808191818634BA
:1095200091050CF445E0842F0E945A2F8091850705
:10953000E82FFF27EE0FFF1FE954F74F808191813D
:109540000190F081E02DF7FF03C0F095E195FF4F0A
:109550007E97CCF480918407E82FFF27EE0FFF1F42
:10956000E954F74F808191818A5B9F4F64F481E0D9
:1095700080936F051092F20388EE93E090930903B5
:10958000809308034FC00E9463300E94052F80E043
:109590000E9491098091AA070E94918D8091700983
:1095A00080FF10C08091150190911601875B934058
:1095B00038F480911501909116018E5E924010F45E
:1095C0000E94E01D80E00E94FC3A81E08093F2035B
:1095D00080930603579A1AC080819181855B9F4FC3
:1095E000FCF48091A8048F5F8093A804893CD0F09C
:1095F000209306042093A8041092D1031092D00364
:1096000081E00E94FC3A81E08093F20388E180933C
:109610009D010E94633068E770E00E94183A02C022
:109620002093A80480918607E82FFF27EE0FFF1FE5
:10963000E954F74F808191818B5A9F4F0CF060C1A4
:109640002091E707E22FFF27EF77F070EE0FFF1F63
:10965000E551F74F80819181069714F084E606C0AA
:10966000808191818B5F9F4F1CF48CE98093AB04C8
:1096700080910604E0918707882309F0ECC0FF275A
:10968000EE0FFF1FE954F74F80819181855B9F4F5B
:109690009CF48091F20783FD0BC0E22FFF27EE0FB1
:1096A000FF1FE954F74F80819181855B9F4FDCF06C
:1096B0008091E7078823B9F08091F20783FFC8C043
:1096C0008091E707E82FFF27EE0FFF1FE954F74FC0
:1096D00080819181875F9F4F0CF4BAC08091AB0469
:1096E000843609F0B5C02091F203222329F080913D
:1096F000CF0388608093CF038091A9048F5F80930C
:10970000A9048E3F08F4EEC01092A904809154057C
:10971000882309F092C0222309F48FC08091E204CB
:10972000882309F08AC081E090E09093D103809370
:10973000D00381E080930604109292041092930467
:1097400010929404109295041092310410923204F5
:10975000109233041092340410922D0410922E04AF
:1097600010922F041092300480919F07E82EFF245E
:109770000027112780917409909175099C01442755
:1097800037FD4095542FC801B7010E949591DC0127
:10979000CB018093410490934204A0934304B0937F
:1097A000440480918409909185099C01442737FDE8
:1097B0004095542FC801B7010E949591DC01CB015F
:1097C0008093390490933A04A0933B04B0933C04F3
:1097D0008091610490916204A0916304B09164044B
:1097E00080933D0490933E04A0933F04B0934004C3
:1097F0008091590490915A04A0915B04B0915C044B
:109800008093350490933604A0933704B0933804C2
:109810001092290410922A0410922B0410922C0406
:109820001092250410922604109227041092280406
:1098300084E68093F10384E350C08CED95E090932F
:10984000090380930803222309F04CC081E045C03E
:109850001092A90447C0FF27EE0FFF1FE954F74FEE
:10986000808191818C3491059CF08091F20783FD79
:109870000BC0E22FFF27EE0FFF1FE954F74F808147
:109880009181855B9F4FCCF08091E7078823A9F0F9
:109890008091F20783FF24C08091E707E82FFF271C
:1098A000EE0FFF1FE954F74F808191818E5C9F4F2F
:1098B000BCF48091AB048C3999F48091AA048F5F39
:1098C0008093AA048B3F70F0109206041092AA04B1
:1098D0001092D1031092D00386E280939D0102C0C2
:1098E0001092AA048091CA039091CB0313E0883EA2
:1098F0009107B8F501969093CB038093CA0331C0CA
:109900001092AB041092CB031092CA032AC02E5EB1
:10991000324038F180918F0990919009805991409F
:1099200000F58091010490910204A0910304B0918C
:1099300004048C5D9540A040B0409CF480E395E722
:109940009093CB038093CA038091D0039091D1036D
:109950008A5E934030F089EE93E09093D103809338
:10996000D00380913A01815080933A0180913A016D
:109970008F3F21F08091CF0384FFA9C30E94A145AE
:10998000B0909A078091B4049091B5049C01220F85
:10999000331F280F391FC0908407AC2DBB27AA0F97
:1099A000BB1FFD01E954F74F4B2D55278081918155
:1099B000849FF001859FF00D949FF00D11242E0FD0
:1099C0003F1F37FF02C02D5F3F4FB9017595679567
:1099D00075956795A551B74F80919B07082F112763
:1099E0008D919C91809F7001819FF00C909FF00C55
:1099F00011246E0D7F1D7093B5046093B4048091A3
:109A0000B6049091B7049C01220F331F280F391F11
:109A1000D0908507AD2DBB27AA0FBB1FFD01E954D0
:109A2000F74F80819181849FF001859FF00D949F75
:109A3000F00D11242E0F3F1F37FF02C02D5F3F4F47
:109A4000A9015595479555954795A551B74F8D91C6
:109A50009C91809F7001819FF00C909FF00C1124CD
:109A60004E0D5F1D5093B7044093B6048091DC0304
:109A7000882309F448C0CB0177FD0396DC01B59536
:109A8000A795B595A795CA0157FD0396FC01F595D5
:109A9000E795F595E79580919801682F772767FD01
:109AA00070956A9F90016B9F300D7A9F300D112445
:109AB0008091E404482F552747FD50954E9FC001E3
:109AC0004F9F900D5E9F900D1124280F391F37FF77
:109AD00002C0295F3F4F93E0359527959A95E1F7AE
:109AE00030931804209317046E9F90016F9F300DE0
:109AF0007E9F300D11244A9FC0014B9F900D5A9FAD
:109B0000900D11243FC08091E507E82FFF27EE5B01
:109B1000FE4F86818093980190819093E404A82F52
:109B2000BB27A7FDB095A69F9001A79F300DB69FBC
:109B3000300D1124E92FFF27E7FDF095E49FC001C8
:109B4000E59F900DF49F900D1124280F391F37FFCA
:109B500002C0295F3F4F83E0359527958A95E1F74D
:109B60003093180420931704A49F9001A59F300DF3
:109B7000B49F300D1124E69FC001E79F900DF69F22
:109B8000900D1124281B390B37FF02C0295F3F4F6E
:109B900003E0359527950A95E1F730931604209355
:109BA000150480918707E82FFF27EE0FFF1FE95468
:109BB000F74F80819181909581959F4F90931404E8
:109BC000809313048530910514F0049705C00FEFBE
:109BD0008C3F900734F404969093140480931304FC
:109BE00004C010921404109213048091D0048823AE
:109BF00009F43EC0282F3327809117049091180450
:109C000097FD079613E0959587951A95E1F7289F9C
:109C1000A001299F500D389F500D1124CA0157FDF6
:109C20000F96B4E095958795BA95E1F7909318044F
:109C300080931704809115049091160497FD079660
:109C4000A3E095958795AA95E1F7289FB001299FF4
:109C5000700D389F700D1124CB0177FD0F96F4E045
:109C600095958795FA95E1F79093160480931504DE
:109C700080901704909018048091D3049091D4049C
:109C8000881A990A9092180480921704009115047A
:109C9000109116048091D1049091D204081B190BE5
:109CA000109316040093150480918607E82FFF2770
:109CB000EE0FFF1FE954F74FE080F1808FE790E04F
:109CC000E80EF91EF0921204E092110480916D01E9
:109CD0009927AA2797FDA095BA2FBC01CD010E9414
:109CE0000991DC01CB0120E030E040E251E4BC010D
:109CF000CD010E947790DC01CB01BC01CD010E9417
:109D0000DB90DC01CB0180937E0980916C01809314
:109D1000560980916B019927AA2797FDA095BA2F24
:109D2000BC01CD010E940991DC01CB0120E030E0B3
:109D300040E251E4BC01CD010E947790DC01CB01EF
:109D4000BC01CD010E94DB90DC01CB0180932F0987
:109D500080916A018093450980917B0580FF59C0FD
:109D600080918709813808F454C08091740599273F
:109D700087FD90952B2D3327829FD001839FB00DB7
:109D8000929FB00D11248A0E9B1E9092180480920F
:109D9000170480917505992787FD9095829FF001A2
:109DA000839FF00D929FF00D11240E0F1F1F109333
:109DB00016040093150480917605282F332727FD7C
:109DC00030958091130490911404820F931F909307
:109DD00014048093130480917805282F332727FDDE
:109DE0003095809195079927289F8001299F100D14
:109DF000389F100D11241093410100934001809170
:109E0000770599278E159F0524F49093120480936B
:109E10001104809111049091120497FF04C01092D4
:109E20001204109211048091700982FF02C01092F6
:109E300056094091170450911804CA0157FD039622
:109E40009C01359527953595279537FF03C03095AB
:109E500021953F4F8091D4039091D50382179307AA
:109E6000B4F4CA0157FF03C0909581959F4F97FDA9
:109E7000039695958795959587959093D5038093AF
:109E8000D4038536910544F084E690E001C0019743
:109E90009093D5038093D4034091150450911604F8
:109EA000CA0157FD03969C01359527953595279551
:109EB00037FF03C0309521953F4F8091D203909199
:109EC000D30382179307B4F4CA0157FF03C09095D8
:109ED00081959F4F97FD03969595879595958795C5
:109EE0009093D3038093D2038536910544F084E6A2
:109EF00090E001C001979093D3038093D2038091A7
:109F0000CF0384FF08C01092D5031092D40310929F
:109F1000D3031092D203ED2DFF27EE0FFF1FE9545C
:109F2000F74F4091BF07242F332780819181281755
:109F3000390744F48091EF0782FF04C081E08093E9
:109F4000E80313C0ED2DFF27EE0FFF1FE954F74F75
:109F5000842F99272091C007821B9109208131818C
:109F60002817390714F41092E80340918507E42F6D
:109F7000FF27EE0FFF1FE954F74F5091BF07852FC2
:109F8000992722273327281B390B8081918182173B
:109F9000930744F48091EF0783FF04C081E080932E
:109FA000E70316C08091E703882391F0E42FFF2791
:109FB000EE0FFF1FE954F74F8091C0079927851BCB
:109FC0009109208131818217930714F41092E703DD
:109FD000EC2DFF27EE0FFF1FE954F74F4091BF070D
:109FE000242F3327808191812817390744F48091E9
:109FF000EF0780FF04C081E08093E50317C08091E4
:10A00000E503882399F0EC2DFF27EE0FFF1FE9549D
:10A01000F74F842F99272091C007821B9109208137
:10A0200031812817390714F41092E5034091840711
:10A03000E42FFF27EE0FFF1FE954F74F5091BF07A2
:10A04000852F992722273327281B390B808191815F
:10A050008217930744F48091EF0781FF04C081E0E9
:10A060008093E60316C08091E603882391F0E42FE5
:10A07000FF27EE0FFF1FE954F74F8091C007992784
:10A08000851B9109208131818217930714F4109266
:10A09000E6038091E803882319F48091E703811196
:10A0A00081E08093E9038091E503882321F4809186
:10A0B000E603882351F081E08093EA031092E903DC
:10A0C0001092E8031092E70302C08093EA038091A4
:10A0D000E903882321F48091EA03882369F08091C1
:10A0E000BE07992729813A818217930714F49A832E
:10A0F000898381E080931D048091CE0399279C0180
:10A100002470307082FF2DC08091D3049091D404CC
:10A11000909581959F4F9093180480931704809198
:10A12000D1049091D204909581959F4F90931604FD
:10A130008093150480917A0190917B019093120491
:10A1400080931104809170098B778B6680937009DE
:10A15000809154098C7B8093540988EC809373011F
:10A160001EC08091CF0384FF1AC030931404209343
:10A17000130430931804209317043093160420938B
:10A1800015049AE590937E0988E780935609909389
:10A190002F09809345091092E9031092EA038091F8
:10A1A000480990914909A0914A09B0914B09209121
:10A1B0006104309162044091630450916404820F01
:10A1C000931FA41FB51F8093480990934909A0933A
:10A1D0004A09B0934B098091500990915109A0917F
:10A1E0005209B0915309E0905904F0905A0400913B
:10A1F0005B0410915C04EB82FC820D831E838E0D48
:10A200009F1DA01FB11F8093500990935109A093E7
:10A210005209B093530980913F0990914009A09150
:10A220004109B0914209E0905D04F0905E04009114
:10A230005F0410916004EF82F88609871A878E0DFB
:10A240009F1DA01FB11F80933F0990934009A093C9
:10A250004109B09342098091300990913109A09150
:10A260003209B0913309E0905504F0905604009102
:10A27000570410915804EB86FC860D871E878E0DBF
:10A280009F1DA01FB11F8093300990933109A093A7
:10A290003209B0933309F090EA03FF86FF2029F4D6
:10A2A0008091E903882309F460C010925104109250
:10A2B0005204109253041092540410924D041092C0
:10A2C0004E0410924F0410925004109248091092BC
:10A2D000490910924A0910924B09109250091092A4
:10A2E0005109109252091092530910923F0910928D
:10A2F00040091092410910924209109230091092BF
:10A3000031091092320910923309809141049091E1
:10A310004204A0914304B091440480933D0490937F
:10A320003E04A0933F04B09340048091390490917F
:10A330003A04A0913B04B0913C048093350490937F
:10A340003604A0933704B093380410921603109289
:10A3500015031092EE031092ED031092F003109289
:10A36000EF030F85002309F0D0C18091E903882312
:10A3700009F0CBC18091250790912607815092402A
:10A380002CF480910604882309F4BFC19090000A40
:10A39000A0909F072090740930907509409084091F
:10A3A0005090850919140CF0BBC0BB24CC24DD24CB
:10A3B000CA01B901A60195010E94099279018A0199
:10A3C0008091C9099091CA09281A390AC101AA279E
:10A3D00097FDA095BA2FE81AF90A0A0B1B0B6B819F
:10A3E0007C818D819E81A60195010E94099259016F
:10A3F0006A018091CB099091CC09481A590AC2018F
:10A40000AA2797FDA095BA2FA81AB90ACA0ADB0A8B
:10A41000292C332427FC3094432C532CC801B7013A
:10A42000A20191010E94959197FF04C061507E4F57
:10A430008F4F9F4F3B014C0109E09594879477948F
:10A4400067940A95D1F7C601B501A20191010E9456
:10A45000959197FF04C061507E4F8F4F9F4F5B01D6
:10A460006C0119E0D594C794B794A7941A95D1F7C5
:10A470008091D4039091D503813491053CF480916F
:10A48000D2039091D30381349105D4F0D401C30158
:10A4900097FE03C00196A11DB11D3C014D0195948D
:10A4A000879477946794D601C501D7FE03C00196BF
:10A4B000A11DB11D5C016D01D594C794B794A794FB
:10A4C0008091020A282F332727FD3095432F532FE1
:10A4D000261537054805590514F439014A0199270D
:10A4E00087FD9095909581959F4FAA2797FDA09500
:10A4F000BA2F681679068A069B0614F43C014D01B2
:10A500002A153B054C055D0514F459016A01A8168E
:10A51000B906CA06DB060CF0D0C05C016D01CDC0E7
:10A52000EA2CFF2400271127CA01B901A8019701CD
:10A530000E94099239014A01C101AA2797FDA095FD
:10A54000BA2F681A790A8A0A9B0A6B817C818D81ED
:10A550009E81A80197010E94099259016A01C201D6
:10A56000AA2797FDA095BA2FA81AB90ACA0ADB0A2A
:10A57000D401C30197FE03C00F96A11DB11D3C017C
:10A580004D01F4E09594879477946794FA95D1F708
:10A59000D601C501D7FE03C00F96A11DB11D5C01F8
:10A5A0006D01E4E0D594C794B794A794EA95D1F7E8
:10A5B0008091D4039091D503813491053CF480912E
:10A5C000D2039091D30381349105A4F0C401B30167
:10A5D00023E030E040E050E00E94099239014A0156
:10A5E000C601B50123E030E040E050E00E9409924E
:10A5F00059016A0180918707E82FFF27EE0FFF1F9F
:10A60000E954F74F808191810190F081E02DF7FFAF
:10A6100003C0F095E195FF4F7A97A4F0C401B30110
:10A6200023E030E040E050E00E94099239014A0105
:10A63000C601B50123E030E040E050E00E940992FD
:10A6400059016A0189E18093860121E26216710451
:10A65000810491042CF070E2672E712C812C912CD6
:10A6600030EE63163FEF73063FEF83063FEF93062E
:10A6700044F460EE662E6FEF762E6FEF862E6FEF4E
:10A68000962E41E2A416B104C104D1042CF050E28C
:10A69000A52EB12CC12CD12C50EEA5165FEFB5061E
:10A6A0005FEFC5065FEFD50644F440EEA42E4FEFF2
:10A6B000B42E4FEFC42E4FEFD42E809141049091D1
:10A6C0004204A0914304B091440486199709A80953
:10A6D000B9098093410490934204A0934304B0933A
:10A6E00044048091390490913A04A0913B04B091C4
:10A6F0003C048A199B09AC09BD09809339049093E5
:10A700003A04A0933B04B0933C04809115039091CC
:10A7100016038F3F910509F008F4C4C56F856623C1
:10A7200009F04EC58091E903882309F049C580915D
:10A730001D04882309F044C57091C707788B7723DF
:10A7400009F43EC58091480990914909A0914A09B0
:10A75000B0914B09B7FF04C081509F4FAF4FBF4F1F
:10A76000E92EFA2E0B2F112707FD1A95E0924809C2
:10A77000F092490900934A0910934B0980915009BE
:10A7800090915109A0915209B0915309B7FF04C0AB
:10A7900081509F4FAF4FBF4F892F9A2FAB2FBB27B1
:10A7A000A7FDBA95898B9A8BAB8BBC8B8093500994
:10A7B00090935109A0935209B093530980919F0738
:10A7C000A82EBB24CC24DD242091510430915204C6
:10A7D0004091530450915404C601B5010E949591D3
:10A7E00097FF04C061507F4F8F4F9F4F672E782E89
:10A7F000892E992487FC9A94609251047092520495
:10A80000809253049092540420914D0430914E0450
:10A8100040914F0450915004C601B5010E9495919A
:10A8200097FF04C061507F4F8F4F9F4F272E382EC8
:10A83000492E552447FC5A9420924D0430924E04E0
:10A8400040924F04509250048091490490914A04E0
:10A85000A0914B04B0914C04B7FF04C081509F4FAE
:10A86000AF4FBF4F892F9A2FAB2FBB27A7FDBA95AC
:10A870008093490490934A04A0934B04B0934C04F2
:10A88000D801C70186199709A809B90980939E04C0
:10A8900090939F04A093A004B093A1042091C607B5
:10A8A000E22EFF2400271127BC01CD01A80197014A
:10A8B0000E94099259016A012093AC043093AD04BF
:10A8C0004093AE045093AF0489899A89AB89BC89BF
:10A8D00082199309A409B5098093A2049093A30453
:10A8E000A093A404B093A504BC01CD01A8019701D5
:10A8F0000E9409922093B0043093B1044093B204B3
:10A900005093B304D601C501D7FE04C081509F4FB8
:10A91000AF4FBF4F892F9A2FAB2FBB27A7FDBA95FB
:10A920009093EE038093ED0357FF04C021503F4FF7
:10A930004F4F5F4FBB2757FDBA95A52F942F832FFD
:10A940009093F0038093EF038091D4039091D5030B
:10A9500081349105DCF48091D2039091D30381344A
:10A960009105A4F480918707E82FFF27EE0FFF1FC2
:10A97000E954F74F808191810190F081E02DF7FF3C
:10A9800003C0F095E195FF4F7A97E4F08091000ABB
:10A990008F3FC1F48091ED039091EE0397FD0196F6
:10A9A000959587959093EE038093ED038091EF0347
:10A9B0009091F00397FD0196959587959093F003FC
:10A9C0008093EF0380913F0990914009A091410944
:10A9D000B0914209B7FF04C081509F4FAF4FBF4FA6
:10A9E000892F9A2FAB2FBB27A7FDBA9580933F09DC
:10A9F00090934009A0934109B09342098091300996
:10AA000090913109A0913209B0913309B7FF04C088
:10AA100081509F4FAF4FBF4F892F9A2FAB2FBB272E
:10AA2000A7FDBA958093300990933109A09332091C
:10AA3000B09333098091610490916204A091630402
:10AA4000B09164042F81388549855A85281B390BBC
:10AA50004A0B5B0B20939604309397044093980421
:10AA6000509399048091590490915A04A0915B04E9
:10AA7000B0915C04EB84FC840D851E85E81AF90A0C
:10AA80000A0B1B0BE0929A04F0929B0400939C0427
:10AA900010939D0420939E0430939F044093A00440
:10AAA0005093A104E092A204F092A3040093A404A2
:10AAB0001093A50480913D0490913E04A0913F0421
:10AAC000B0914004821B930BA40BB50B80933D0403
:10AAD00090933E04A0933F04B093400480913504CA
:10AAE00090913604A0913704B09138048E199F09D3
:10AAF000A00BB10B8093350490933604A0933704D8
:10AB0000B093380488898823E1F020911B043091A8
:10AB10001C04213831054CF080917204909173042B
:10AB20000196909373048093720420583F4F4CF425
:10AB300080917204909173040197909373048093B1
:10AB4000720410921C0410921B0481E090E0909318
:10AB5000B9048093B804E0909E04F0909F040091A3
:10AB6000A0041091A104D801C70117FF07C08827CE
:10AB70009927DC018E199F09A00BB10B81509240DF
:10AB8000A040B04034F084E090E09093B90480930A
:10AB9000B8048091BE049091BF04A091C004B0910C
:10ABA000C104209148093091490940914A095091C6
:10ABB0004B09821B930BA40BB50B815E914BAF4FDE
:10ABC000BF4F8F539C49A040B04028F08091010AAC
:10ABD00089310CF4FFC021E0E21620E1F20620E00A
:10ABE000020720E012070CF473C08091BA04882396
:10ABF00009F46AC0D801C70117FF07C08827992741
:10AC0000DC018E199F09A00BB10B9C01AD01B7FFB0
:10AC100004C021503E4F4F4F5F4FF9E05595479587
:10AC200037952795FA95D1F78091B8049091B9049A
:10AC3000820F931F9093B9048093B804D801C70181
:10AC400017FF03C00796A11DB11DE3E0B595A795B9
:10AC500097958795EA95D1F78093AC049093AD04CE
:10AC6000A093AE04B093AF0489589341A040B04084
:10AC700064F088E893E1A0E0B0E08093AC049093A6
:10AC8000AD04A093AE04B093AF042091AC04309116
:10AC9000AD044091AE045091AF0457FF04C0215061
:10ACA0003F4F4F4F5F4F232F342F452F552747FDE1
:10ACB0005A958091ED039091EE03820F931F90932C
:10ACC000EE038093ED0306C081E08093BA0402C0D6
:10ACD0001092BA0440E0E41640EFF4064FEF040788
:10ACE0004FEF14070CF073C08091BB04882309F464
:10ACF0006AC0D801C70117FF07C088279927DC0160
:10AD00008E199F09A00BB10B9C01AD01B7FF04C0C8
:10AD100021503E4F4F4F5F4F69E05595479537950E
:10AD200027956A95D1F78091B8049091B904820F64
:10AD3000931F9093B9048093B804D801C70117FFFB
:10AD400003C00796A11DB11D23E0B595A795979562
:10AD500087952A95D1F78093AC049093AD04A09386
:10AD6000AE04B093AF0488579C4EAF4FBF4F64F40E
:10AD700088E79CEEAFEFBFEF8093AC049093AD04F7
:10AD8000A093AE04B093AF042091AC043091AD0415
:10AD90004091AE045091AF0457FF04C021503F4F83
:10ADA0004F4F5F4F232F342F452F552747FD5A957F
:10ADB0008091ED039091EE03820F931F9093EE0329
:10ADC0008093ED0311C081E08093BB040DC010920D
:10ADD000BB040AC01092B9041092B80484E690E053
:10ADE00090938501809384016889262F3327809171
:10ADF000B8049091B9042817390724F43093B904A2
:10AE00002093B8041091010A112379F0212F3327E0
:10AE100027FD30958091B8049091B904281739071F
:10AE200024F43093B9042093B80440919E045091C7
:10AE30009F046091A0047091A104413851056105FF
:10AE4000710574F080917604909177042091B80494
:10AE50003091B904820F931F909377048093760406
:10AE600040585F4F6F4F7F4F74F4809176049091FC
:10AE700077042091B8043091B904821B930B90930E
:10AE800077048093760481E090E09093B9048093F6
:10AE9000B804C090A204D090A304E090A404F09061
:10AEA000A504D701C601F7FE07C088279927DC0152
:10AEB0008C199D09AE09BF0981509240A040B04055
:10AEC00034F084E090E09093B9048093B8048091CA
:10AED000C2049091C304A091C404B091C504209110
:10AEE0005009309151094091520950915309821BE8
:10AEF000930BA40BB50B815E914BAF4FBF4F8F539C
:10AF00009C49A040B04018F019310CF4FFC001E09A
:10AF1000C01600E1D00600E0E00600E0F0060CF408
:10AF200073C08091BC04882309F46AC0D701C601AC
:10AF3000F7FE07C088279927DC018C199D09AE0907
:10AF4000BF099C01AD01B7FF04C021503E4F4F4FD8
:10AF50005F4F09E055954795379527950A95D1F7A5
:10AF60008091B8049091B904820F931F9093B90413
:10AF70008093B804D701C601F7FE03C00796A11D50
:10AF8000B11D13E0B595A795979587951A95D1F7BB
:10AF90008093B0049093B104A093B204B093B3042F
:10AFA00089589341A040B04064F088E893E1A0E064
:10AFB000B0E08093B0049093B104A093B204B09336
:10AFC000B3042091B0043091B1044091B204509187
:10AFD000B30457FF04C021503F4F4F4F5F4F232F03
:10AFE000342F452F552747FD5A958091EF039091B7
:10AFF000F003820F931F9093F0038093EF0306C03A
:10B0000081E08093BC0402C01092BC0420E0C21610
:10B0100020EFD2062FEFE2062FEFF2060CF073C0FE
:10B020008091BD04882309F46AC0D701C601F7FEE8
:10B0300007C088279927DC018C199D09AE09BF0933
:10B040009C01AD01B7FF04C021503E4F4F4F5F4FF1
:10B05000E9E05595479537952795EA95D1F7809181
:10B06000B8049091B904820F931F9093B904809310
:10B07000B804D701C601F7FE03C00796A11DB11D94
:10B0800073E0B595A795979587957A95D1F78093B5
:10B09000B0049093B104A093B204B093B304885762
:10B0A0009C4EAF4FBF4F64F488E79CEEAFEFBFEF0D
:10B0B0008093B0049093B104A093B204B093B3040E
:10B0C0002091B0043091B1044091B2045091B30486
:10B0D00057FF04C021503F4F4F4F5F4F232F342F56
:10B0E000452F552747FD5A958091EF039091F00326
:10B0F000820F931F9093F0038093EF0311C081E0C0
:10B100008093BD040DC01092BD040AC01092B90412
:10B110001092B80484E690E09093850180938401B6
:10B120004889242F33278091B8049091B9042817B7
:10B13000390724F43093B9042093B8048091010AAC
:10B14000882379F0282F332727FD30958091B80484
:10B150009091B9042817390724F43093B904209347
:10B16000B8044091A2045091A3046091A40470918A
:10B17000A504413851056105710574F0809174048E
:10B18000909175042091B8043091B904820F931FF7
:10B19000909375048093740440585F4F6F4F7F4FB6
:10B1A000CCF480917404909175042091B80430918E
:10B1B000B904821B930B90937504809374040AC0A6
:10B1C0001092F0031092EF031092EE031092ED0331
:10B1D00010921D0480915609882341F41092F003C7
:10B1E0001092EF031092EE031092ED038091480944
:10B1F00090914909A0914A09B0914B098093BE04EE
:10B200009093BF04A093C004B093C10480915009EF
:10B2100090915109A0915209B09153098093C204B1
:10B220009093C304A093C404B093C5041092510436
:10B2300010925204109253041092540410924D0430
:10B2400010924E0410924F04109250041092490430
:10B2500010924A0410924B0410924C041092480928
:10B260001092490910924A0910924B091092500904
:10B2700010925109109252091092530910923F09ED
:10B28000109240091092410910924209109230091F
:10B29000109231091092320910923309109216035C
:10B2A00010921503E0901304F0901404C701F7FE08
:10B2B00004C0882799278E199F0904973CF0809134
:10B2C000700984FD03C082E38093F10310919C0711
:10B2D000A12EBB24CC24DD24B701882777FD8095DF
:10B2E000982F9701F7FE04C0222733272E193F0914
:10B2F000442737FD4095542F0E9495919B01AC0146
:10B30000C601B5010E94959197FF04C061507E4F20
:10B310008F4F9F4F59E095958795779567955A95EB
:10B32000D1F79B01812F99278E9DD0018F9DB00D64
:10B330009E9DB00D1124CD01B7FD0396959587957F
:10B3400095958795280F391F8091F3039091F40309
:10B35000280F391F442737FD4095542F209392041E
:10B360003093930440939404509395048091310456
:10B3700090913204A0913304B0913404821B930B5A
:10B38000A40BB50B8093310490933204A093330443
:10B39000B09334048155934CA040B04064F080E5F4
:10B3A00093ECA0E0B0E08093310490933204A0933A
:10B3B0003304B09334048091310490913204A0910D
:10B3C0003304B0913404805B9C43AF4FBF4F64F4AF
:10B3D00080EB9CE3AFEFBFEF809331049093320496
:10B3E000A0933304B0933404009188011091890133
:10B3F00017FDFCC08091700983FFF8C08091870120
:10B40000815080938701882309F0F4C08DE08093F8
:10B4100087018091610490916204A0916304B091CE
:10B420006404B7FF04C081509E4FAF4FBF4F39E057
:10B43000B595A795979587953A95D1F77C0197FF94
:10B4400004C0F094E194F108F39480915904909130
:10B450005A04A0915B04B0915C04B7FF04C0815012
:10B460009E4FAF4FBF4F29E0B595A795979587950C
:10B470002A95D1F79C0197FF03C0309521953F4F46
:10B48000E216F3060CF47901B701F7FE02C0695F1A
:10B490007F4F2B01A3E055944794AA95E1F722E052
:10B4A00030E0420E531E60908009709081098090B8
:10B4B00082099090830920913C0130913D01409197
:10B4C0003E0150913F01C401B3010E94099259010C
:10B4D0006A0130932E0920932D09021B130BC8011A
:10B4E000845E9D4F68E671E00E94D4919C01245BCC
:10B4F00030408091840190918501009731F001974F
:10B5000090938501809384011BC049E1E416F10406
:10B51000BCF480911B0490911C04820F931F9093A4
:10B520001C0480931B048091F103882349F081500F
:10B530008093F103882321F4B0922004A0921F0489
:10B540008091840190918501892BF9F48091860185
:10B550009927289FB001299F700D389F700D1124E5
:10B56000CB01B2010E94D491CB01AA2797FDA095EF
:10B57000BA2F680E791E8A1E9B1E609280097092F7
:10B58000810980928209909283098091F103882336
:10B5900069F580911F049091200420912D0930912C
:10B5A0002E09821B930B845E9D4F68E671E00E941A
:10B5B000D4919C01245B304080917001869599273D
:10B5C000289FD001299FB00D389FB00D11249D01F7
:10B5D000B7FF02C0215F3F4FF4E035952795FA95FC
:10B5E000E1F73093F4032093F30304C01092F403C3
:10B5F0001092F30380911D04882381F0109225049A
:10B600001092260410922704109228041092290404
:10B6100010922A0410922B0410922C04F090EA034A
:10B62000FF20F1F480915609282F3327442755270E
:10B630008091610490916204A0916304B0916404CC
:10B64000BC01CD010E949591DC01CB01BC01CD0173
:10B6500028EF3AE240E050E00E940992390102C02E
:10B6600066247724E090E903EE20F1F480915609F6
:10B67000282F3327442755278091590490915A0445
:10B68000A0915B04B0915C04BC01CD010E94959136
:10B69000DC01CB01BC01CD0128EF3AE240E050E0F3
:10B6A0000E940992290102C04424552480912A094C
:10B6B00090912B09893C91051CF088EC90E005C025
:10B6C00088539F4F34F488E39FEF90932B09809326
:10B6D0002A098091360990913709893C91051CF01F
:10B6E00088EC90E005C088539F4F34F488E39FEFC7
:10B6F00090933709809336098091380990913909E0
:10B70000AA2797FDA095BA2F20917E09A22EBB24CF
:10B71000CC24DD24BC01CD01A60195010E949591A8
:10B720009B01AC0180912A0990912B09AA2797FDD2
:10B73000A095BA2FE7E0880F991FAA1FBB1FEA95B3
:10B74000D1F7280F391F4A1F5B1F57FF04C0215C28
:10B750003F4F4F4F5F4F76E055954795379527956B
:10B760007A95D1F78301020F131F109339090093C3
:10B7700038098091280990912909AA2797FDA09559
:10B78000BA2FBC01CD01A60195010E9495919B01A4
:10B79000AC018091360990913709AA2797FDA095B1
:10B7A000BA2F67E0880F991FAA1FBB1F6A95D1F7B0
:10B7B000280F391F4A1F5B1F57FF04C0215C3F4FF2
:10B7C0004F4F5F4FF6E05595479537952795FA957A
:10B7D000D1F74201820E931E909229098092280986
:10B7E0008091790990917A09880F991FAA2797FD6E
:10B7F000A095BA2F20912F09332744275527BC0144
:10B80000CD010E9495915B016C0197FF08C02FE369
:10B8100030E040E050E0A20EB31EC41ED51EE6E0AC
:10B82000D594C794B794A794EA95D1F78091450928
:10B83000282F3327442755278091450490914604AB
:10B84000A0914704B0914804BC01CD010E9495919C
:10B85000DC01CB01BC01CD0120EF35E540E050E03B
:10B860000E940992B501620F731F70937A09609369
:10B8700079090150104134F080E090E1909339094A
:10B880008093380980913809909139098050904F00
:10B8900034F480E090EF909339098093380951E0B7
:10B8A000851650E1950634F080E090E190932909E7
:10B8B0008093280980912809909129098050904F00
:10B8C00034F480E090EF9093290980932809615027
:10B8D000704134F080E090E190937A098093790987
:10B8E0008091790990917A098050904F34F480E0EA
:10B8F00090EF90937A098093790980910001482F05
:10B90000552780911F01909120014817590794F401
:10B9100020911F013091200109811A81049FC001EB
:10B92000059F900D149F900D1124B9010E94C091A4
:10B930007A83698329813A81220F331F220F331FB3
:10B940003A8329834091700940FD02C00C94B06491
:10B95000EE2011F00C94B064FF2011F00C94B06450
:10B9600000E010E048018091EB039091EC0390938C
:10B970000B0780930A0720917804309179042115F0
:10B98000310509F03FC08091150190911601895948
:10B99000934058F087B5803F20F48091190381507F
:10B9A00011C081E08093CF044EC080911501909129
:10B9B00016018436910508F587B58031D0F0809165
:10B9C00019038F5F809319039FE08902900111246E
:10B9D00080912F07821B87BD8CE291E09093090331
:10B9E000809308038EE591E0909379048093780426
:10B9F0002AC081E08093CE0426C0F092CE04F0925B
:10BA0000CF0421C08091010490910204A09103040D
:10BA1000B091040464E0880F991FAA1FBB1F6A95A8
:10BA2000D1F780931A0390931B03A0931C03B09348
:10BA30001D031093180300931703215030403093D7
:10BA40007904209378042091730141FF3CC0223394
:10BA500048F580918A01815080938A018F3F09F0D7
:10BA600052C080919D01882339F480911E0488235F
:10BA700019F088E280939D0110921E0480910104C8
:10BA800090910204A0910304B09104048093FD03FB
:10BA90009093FE03A093FF03B093000481E0809392
:10BAA0008A0131C0273478F180919D01882339F4CF
:10BAB00080911E04882319F487E280939D0188EC0D
:10BAC00080938A011DC08091400190914101820FB5
:10BAD000911D209195073327829FA001839F500DD0
:10BAE000929F500D1124CA01AA2797FDA095BA2F45
:10BAF0008093FD039093FE03A093FF03B093000493
:10BB000081E080931E048091610490916204A09171
:10BB10006304B0916404E0903C01F0903D01009119
:10BB20003E0110913F01BC01CD01A80197010E9487
:10BB3000099259016A018091590490915A04A09187
:10BB40005B04B0915C04BC01CD01A80197010E9487
:10BB50000992B901C5010E9443845C01CC971CF095
:10BB60005CE3A52EB12CC5010E9441725C0180E20C
:10BB700080933B011092FC031092FB0380911E0402
:10BB8000882309F45FC58091CF0399279C01207118
:10BB9000307084FD57C58091CE0382608093CE03C0
:10BBA00070915409872F992741E0C42ED12CC822C7
:10BBB000D92280FD04C08091700981FD10C0C98028
:10BBC000DA803093C7042093C6043093FC0320939B
:10BBD000FB038091CF03806C8093CF03ABC2809135
:10BBE000CF0381FF7AC200917A0110917B01C801D5
:10BBF0000F962090110430901204821593050CF0DA
:10BC000058C08091CE04882309F053C08091CF039F
:10BC100087FF15C08091CF038F778093CF038091EA
:10BC2000010490910204A0910304B0910404809354
:10BC3000FD039093FE03A093FF03B0930004809153
:10BC4000CF0380648093CF03E0903409EE20F1F0BD
:10BC50008091FD039091FE03A091FF03B091000439
:10BC6000BC01CD0124E630E040E050E00E940992A2
:10BC70008E2D9927AA27BB2782179307A407B507FC
:10BC80002CF4D092FC03C092FB0310C0C101801BB6
:10BC9000910B0F9797FF03C0909581959F4F9093BD
:10BCA000FC038093FB038BE280933B011092F5032E
:10BCB00016C1C8010F9728163906C4F52091CF0484
:10BCC0002223A1F58091CF0386FF15C08091CF0379
:10BCD0008F7B8093CF038091010490910204A09107
:10BCE0000304B09104048093FD039093FE03A0939A
:10BCF000FF03B09300048091CF0380688093CF034B
:10BD0000C101801B910B0F9697FF03C09095819501
:10BD10009F4F909581959F4F9093FC038093FB03D9
:10BD20008DE280933B012093F503D9C08DE380938E
:10BD30003B016091F603662371F12091F703309186
:10BD4000F8034091F9035091FA038091FD0390911B
:10BD5000FE03A091FF03B091000482179307A4078C
:10BD6000B507CCF48091CF0380648093CF03862FF6
:10BD700099279093FC038093FB038AE08093F5035B
:10BD80008EE580933B018091CF0387FFA8C080910F
:10BD9000CF038F7733C0662309F443C02091F703A4
:10BDA0003091F8034091F9035091FA038091FD031B
:10BDB0009091FE03A091FF03B0910004281739076A
:10BDC0004A075B0774F58091CF0380688093CF03A7
:10BDD000862F9927909581959F4F9093FC03809390
:10BDE000FB0386EF8093F50386E780933B01809108
:10BDF000CF0386FF74C08091CF038F7B8093CF03E6
:10BE00008091010490910204A0910304B091040474
:10BE10008093FD039093FE03A093FF03B09300046F
:10BE20005EC08091CF03807C09F459C08091F503F6
:10BE3000882379F5E0900104F09002040091030456
:10BE400010910404D801C70180589040A040B04030
:10BE50002091FD033091FE034091FF0350910004B7
:10BE600082179307A407B5075CF4D801C70180586F
:10BE70009F4FAF4FBF4F281739074A075B075CF04A
:10BE80008093FD039093FE03A093FF03B0930004FF
:10BE900002C01092F5038091CF038F738093CF037C
:10BEA0001092C7041092C60471FF06C084EF91E09F
:10BEB000909309038093080380910504882379F403
:10BEC0008091010490910204A0910304B0910404B4
:10BED000C397A105B1051CF081E080930504609132
:10BEE000C6047091C7048091FB039091FC03680F16
:10BEF000791F7093C7046093C604CB0177FF04C019
:10BF000088279927861B970B855F91400CF4CEC03C
:10BF10004091F503442389F18091F7039091F80350
:10BF20002091FD033091FE03821B930B09964397EA
:10BF300048F48091F7039091F803A091F903B09130
:10BF4000FA0312C0242F332727FD3095432F532F98
:10BF50008091FD039091FE03A091FF03B091000436
:10BF6000820F931FA41FB51F8093FD039093FE03C0
:10BF7000A093FF03B093000424C080919507209103
:10BF8000FD033091FE034091FF035091000416160B
:10BF9000170644F463E00E94B491280F311D411D3F
:10BFA000511D07C063E00E94B491281B310941096B
:10BFB00051092093FD033093FE034093FF035093F8
:10BFC00000041092C7041092C604E0900104F0909F
:10BFD00002040091030410910404D801C7018050A9
:10BFE0009440A040B0402091FD033091FE03409169
:10BFF000FF035091000482179307A407B5075CF470
:10C00000D801C70180509C4FAF4FBF4F2817390749
:10C010004A075B0744F08093FD039093FE03A093CF
:10C02000FF03B09300048091540981FF06C084E6A9
:10C0300090E09093090380930803809199078823E7
:10C04000A9F58091F603882389F54091EB0350917F
:10C05000EC0357FF02C04D5F5F4F559547955595CF
:10C06000479580911F019091200120910001332775
:10C07000489FF001499FF00D589FF00D1124CF010A
:10C08000B9010E94D49170937B0160937A01663468
:10C0900071051CF486E490E005C06739710534F041
:10C0A00086E990E090937B0180937A0180917804F7
:10C0B00090917904892BD1F180910104909102042F
:10C0C000A0910304B09104048093FD039093FE03B8
:10C0D000A093FF03B093000429C0809101049091C4
:10C0E0000204A0910304B091040480599140A0403F
:10C0F000B0408093FD039093FE03A093FF03B093A1
:10C10000000480919907882311F0992702C088E7DD
:10C1100090E090937B0180937A01E980FA80F0921D
:10C12000EC03E092EB038EE280933B01C090EB03C3
:10C13000D090EC03E0900104F0900204009103041D
:10C14000109104042091FD033091FE034091FF0300
:10C15000509100042E153F054007510724F08091AF
:10C16000540980FDBBC28091780490917904892B99
:10C1700039F0C090EB03D090EC0300E010E0D7C0A2
:10C18000D801C701821B930BA40BB50B80939604B7
:10C1900090939704A0939804B0939904823000E898
:10C1A00090070FEFA0070FEFB0072CF481E090E8A5
:10C1B000AFEFBFEF09C08F5F9F47A040B04064F072
:10C1C0008FEF9FE7A0E0B0E08093960490939704F0
:10C1D000A0939804B0939904009196041091970449
:10C1E00080917201282F3327442755278091960488
:10C1F00090919704A0919804B0919904BC01CD014D
:10C200000E94959197FF04C0615E7F4F8F4F9F4FB3
:10C2100025E095958795779567952A95D1F7609351
:10C2200096047093970480939804909399046530D2
:10C230002EEF72072FEF82072FEF92072CF484E086
:10C240009EEFAFEFBFEF09C0605074408040904058
:10C2500064F080E094E0A0E0B0E0809396049093D6
:10C260009704A0939804B0939904809096049090BA
:10C270009704209117033091180337FF02C0295FFC
:10C280003F4F83E0359527958A95E1F74FEF2238A8
:10C2900034071CF421E83FEF05C02038310514F0C5
:10C2A00020E830E0C901AA2797FDA095BA2F209178
:10C2B0007401332744275527BC01CD010E94959175
:10C2C00097FF04C06D5F7F4F8F4F9F4FB2E09595F2
:10C2D000879577956795BA95D1F79B015FEF6130A8
:10C2E00075071CF420E03FEF06C06F3F710519F0A1
:10C2F00014F020E031E08091CF03807C49F0C90147
:10C3000037FD03969C0135952795359527950DC0EA
:10C310008091540980FF09C0C90137FD07969C012F
:10C32000F3E035952795FA95E1F7820E931E20915B
:10C330007101222309F454C06091210470912204F8
:10C34000809123049091240497FF04C061587F4F8B
:10C350008F4F9F4FE7E09595879577956795EA957D
:10C36000D1F73327442755270E94959197FF04C0A2
:10C37000615E7F4F8F4F9F4F55E0959587957795DD
:10C3800067955A95D1F760939604709397048093BC
:10C390009804909399046138AFEF7A07AFEF8A075A
:10C3A000AFEF9A072CF480E89FEFAFEFBFEF0AC022
:10C3B0006F3F71058105910569F064F080E091E0BF
:10C3C000A0E0B0E08093960490939704A093980423
:10C3D000B09399048091960490919704880E991EC9
:10C3E00080916F01282F33278091040A992787FDB8
:10C3F0009095289FF001299FF00D389FF00D112492
:10C400009F01F7FF02C021583F4F220F232F221F09
:10C41000330BFFEF21383F071CF420E83FEF06C045
:10C420002F3F310519F014F020E031E0820E931E09
:10C43000C401AA2797FDA095BA2FE090EB03F090D6
:10C44000EC039701442737FD4095542FBC01CD01E3
:10C450000E94959197FF04C061507E4F8F4F9F4F70
:10C4600029E095958795779567952A95D1F7C61A0E
:10C47000D70A8091FB039091FC03892B09F060C0DF
:10C480001E141F040CF05CC0980117FF03C0309508
:10C4900021953F4F2D33310540F48091190490913F
:10C4A0001A048C159D0574F526C02C53304085E088
:10C4B000369527958A95E1F72031310510F02FE068
:10C4C00030E04091190450911A0410161106E4F45A
:10C4D00080E190E0821B930B489F9001499F300DB3
:10C4E000589F300D1124B4E036952795BA95E1F7A1
:10C4F0002C153D0520F58091780190917901C816A1
:10C50000D906F4F06C011CC0205F3F4F8091780188
:10C5100090917901829F8001839F100D929F100D51
:10C5200011249801A4E036952795AA95E1F74C15BA
:10C530005D0514F06A0104C0C216D30608F0690153
:10C54000C601AA2797FDA095BA2FFDE0880F991F75
:10C55000AA1FBB1FFA95D1F79501442737FD4095D7
:10C56000542FBC01CD010E94099220939A0430936C
:10C570009B0440939C0450939D04C0909A04D090D7
:10C580009B048091C8049091C9049C01220F331F21
:10C59000280F391F2C0D3D1D37FF02C02D5F3F4F67
:10C5A000A90155954795559547955093C9044093D2
:10C5B000C80480919107282F3327220F331F220FA1
:10C5C000331F241735076CF480917809282F3327FF
:10C5D000220F331F220F331F2055304042175307BD
:10C5E00024F03093C9042093C8048091540980FF3B
:10C5F00014C08091C8049091C90429813A8182179E
:10C60000930724F03093C9042093C8044091C804D0
:10C610005091C9045A83498361C029813A812E19F6
:10C620003F0937FF02C02D5F3F4F35952795359560
:10C6300027956091C8047091C904620F731F7A83B3
:10C6400069834CC080919907882301F56091EB03C1
:10C650007091EC0377FF02C06D5F7F4F7595679512
:10C660007595679540911F015091200180910001BF
:10C67000282F3327649FC001659F900D749F900DF4
:10C680001124B9010E94D491CB0101C09927909344
:10C690007B0180937A0180917A0190917B018734AC
:10C6A00091051CF486E490E005C08639910534F0CC
:10C6B00086E990E090937B0180937A0189819A8149
:10C6C0009093C9048093C8048091CF03806C8093B9
:10C6D000CF038091CE038D7F8093CE038091CF03D3
:10C6E00099279C012270307081FF2BC18091CA0470
:10C6F0009091CB04A091CC04B091CD040097A105FA
:10C70000B10521F0809105048130B1F4E981FA810D
:10C71000CF01AA2797FDA095BA2F1EE0880F991F79
:10C72000AA1FBB1F1A95D1F78093CA049093CB041C
:10C73000A093CC04B093CD0480910504813019F40A
:10C7400082E080930504E980FA80C701AA2797FD5B
:10C75000A095BA2F9501442737FD4095542FBC0171
:10C76000CD010E949591DC01CB0180939A049093B6
:10C770009B04A0939C04B0939D04B7FF04C0815018
:10C78000904EAF4FBF4F7C018D01ADE015950795E1
:10C79000F794E794AA95D1F7E0929A04F0929B045B
:10C7A00000939C0410939D046091D0037091D10379
:10C7B0002FE0603A720750F58091CA049091CB0443
:10C7C000A091CC04B091CD049C01AD01FAE0569546
:10C7D000479537952795FA95D1F7821B930BA40BB4
:10C7E000B50BA8019701E4E0220F331F441F551F2A
:10C7F000EA95D1F7820F931FA41FB51F8093CA0437
:10C800009093CB04A093CC04B093CD0460547F41AB
:10C8100018F58091CA049091CB04A091CC04B091FA
:10C82000CD049C01AD016CE0569547953795279551
:10C830006A95D1F7821B930BA40BB50BA801970146
:10C84000F2E0220F331F441F551FFA95D1F7820FD4
:10C85000931FA41FB51F38C0809117039091180330
:10C86000809117039091180397FF03C090958195CD
:10C870009F4F8436910584F58091010490910204C4
:10C880002091FD033091FE03821B930B81509F4F3B
:10C890008F5F914008F58091CA049091CB04A091DC
:10C8A000CC04B091CD049C01AD01EEE056954795C6
:10C8B00037952795EA95D1F7821B930BA40BB50BFF
:10C8C0008E0D9F1DA01FB11F8093CA049093CB04AF
:10C8D000A093CC04B093CD048091CA049091CB0472
:10C8E000A091CC04B091CD047EE0B695A795979524
:10C8F00087957A95D1F79093EC038093EB03409161
:10C900009707442399F055279C01BA010E94D491BE
:10C91000C901861B970B90931A0480931904260F64
:10C92000371F30937901209378011FC010921A04A9
:10C93000109219048FEF93E090937901809378011E
:10C9400014C0109205041092CA041092CB041092E5
:10C95000CC041092CD043093EC032093EB0305C07C
:10C960008091CF03806C8093CF038091DE0481FFA0
:10C9700037C089819A8197FD0396959587959595FE
:10C9800087952091CC033091CD032817390760F4A7
:10C990008091EB039091EC03892B31F0220F331F30
:10C9A000220F331F3A83298380910104909102045E
:10C9B000A0910304B09104048093FD039093FE03BF
:10C9C000A093FF03B093000488E99AE390930903CE
:10C9D0008093080380E09EE090930A018093090110
:10C9E00020913D09822F9927880F991F880F991F41
:10C9F000889669817A818617970714F09A838983CC
:10CA0000709178097D8B872F9927880F991F880F40
:10CA1000991F80559040A981BA818A179B0714F409
:10CA20009A83898380914E03882341F48091160A6A
:10CA30008F3F21F48091E2048823E9F08091D003B4
:10CA40009091D1030297C097B0F4E981FA811E1644
:10CA50001F068CF481E090E09093D1038093D00383
:10CA6000E22EFF24EE0CFF1CEE0CFF1C8701085D7C
:10CA70001F4F1A83098329813A813093EF0620934F
:10CA8000EE068091920490919304A0919404B09149
:10CA9000950412E0880F991FAA1FBB1F1A95D1F7A2
:10CAA0000091790910917A09081B190B213A310577
:10CAB0008CF0C90137FD01969595879580179107F0
:10CAC0000CF48C01909581959F4F081719076CF411
:10CAD0008C010BC00135110514F000E510E03FEFAB
:10CAE000003B130714F400EB1FEF4D89242F33276D
:10CAF000220F331F220F331FC90169817A81861BE0
:10CB0000970B801791070CF48C0189819A81821B05
:10CB1000930B081719070CF48C0180913809909138
:10CB200039096091170470911804861B970B909334
:10CB3000470980934609D0905609209129043091E5
:10CB40002A0440912B0450912C04DD2041F0661AF8
:10CB5000770AC301AA2797FDA095BA2F04C0AA2778
:10CB600097FDA095BA2F280F391F4A1F5B1F2093EE
:10CB7000290430932A0440932B0450932C04809171
:10CB8000290490912A04A0912B04B0912C04815087
:10CB90009A4FA040B04064F080E09AEFA0E0B0E08F
:10CBA0008093290490932A04A0932B04B0932C041F
:10CBB0008091290490912A04A0912B04B0912C0417
:10CBC00080509640AF4FBF4F64F480E096E0AFEFE7
:10CBD000BFEF8093290490932A04A0932B04B09371
:10CBE0002C04C090A607209146093091470978E0AF
:10CBF000E72EEC1498F08C2D9927829FA001839F3B
:10CC0000500D929F500D1124CA0157FD07967C01CB
:10CC100063E0F594E7946A95E1F712C08C2D869550
:10CC20009927829FB001839F700D929F700D1124F0
:10CC3000CB0177FD03967C01F594E794F594E79496
:10CC4000A0907501B09076019501442737FD40957D
:10CC5000542F8091290490912A04A0912B04B09123
:10CC60002C04BC01CD010E940992E20EF31E9090AB
:10CC70006101692D772788279927980117FF04C03C
:10CC800022273327201B310B37FF02C02F5F3F4F76
:10CC900035952795A981BA812A0F3B1F442737FD77
:10CCA0004095542F0E94959197FF04C0615C7F4F7F
:10CCB0008F4F9F4F26E095958795779567952A9595
:10CCC000D1F79B016E157F050CF47B013095219502
:10CCD0003F4FE216F3060CF47901809128099091F8
:10CCE00029096091150470911604861B970B909387
:10CCF000270980932609209125043091260440912C
:10CD0000270450912804DD2041F0461A570AC20139
:10CD1000AA2797FDA095BA2F04C0AA2797FDA09532
:10CD2000BA2F280F391F4A1F5B1F20932504309309
:10CD30002604409327045093280480912504909161
:10CD40002604A0912704B091280481509A4FA04056
:10CD5000B04064F080E09AEFA0E0B0E0809325045A
:10CD600090932604A0932704B0932804809125046F
:10CD700090912604A0912704B091280480509640F9
:10CD8000AF4FBF4F64F480E096E0AFEFBFEF80930A
:10CD9000250490932604A0932704B093280420919F
:10CDA00026093091270948E04C1598F08C2D9927D9
:10CDB000829FB001839F700D929F700D1124CB0153
:10CDC00077FD07966C01B3E0D594C794BA95E1F767
:10CDD00012C0C6948C2D9927829FD001839FB00DDD
:10CDE000929FB00D1124CD01B7FD03966C01D5942F
:10CDF000C794D594C7949501442737FD4095542F87
:10CE00008091250490912604A0912704B0912804D4
:10CE1000BC01CD010E940992C20ED31E692D772755
:10CE200088279927980117FF04C022273327201B42
:10CE3000310B37FF02C02F5F3F4F35952795E981B2
:10CE4000FA812E0F3F1F442737FD4095542F0E9433
:10CE5000959197FF04C0615C7F4F8F4F9F4FE6E035
:10CE60009595879577956795EA95D1F79B016C1510
:10CE70007D050CF46B01309521953F4FC216D3060A
:10CE80000CF4690180913D09282E33245090E80765
:10CE900066E5862E68E0962E5DE0A52E58E0B52E5C
:10CEA0004BE0442E37E5632E39E0732ED5012C91EB
:10CEB00012160CF029C1203429F4E981FA81FF8B84
:10CEC000EE8B1FC049815A81CA01AA2797FDA09500
:10CED000BA2F332727FD3095432F532FBC01CD01A7
:10CEE0000E94959197FF04C0615C7F4F8F4F9F4FC9
:10CEF00026E095958795779567952A95D1F77F8B4D
:10CF00006E8BF5012181203439F42E893F892E0D55
:10CF10003F1D3F8B2E8B2AC0203C39F44E895F8900
:10CF20004E195F095F8B4E8B21C0C701AA2797FD61
:10CF3000A095BA2F332727FD3095432F532FBC01DF
:10CF4000CD010E94959197FF04C0615C7F4F8F4F88
:10CF50009F4FB6E09595879577956795BA95D1F7E8
:10CF6000AE89BF89A60FB71FBF8BAE8BF50122819B
:10CF7000203439F42E893F892C0D3D1D3F8B2E8B9B
:10CF80002AC0203C39F44E895F894C195D095F8BBA
:10CF90004E8B21C0C601AA2797FDA095BA2F332733
:10CFA00027FD3095432F532FBC01CD010E94959151
:10CFB00097FF04C0615C7F4F8F4F9F4FA6E0959510
:10CFC000879577956795AA95D1F7AE89BF89A60F02
:10CFD000B71FBF8BAE8BF5012381203439F42E8926
:10CFE0003F89200F311F3F8B2E8B2AC0203C39F404
:10CFF0004E895F89401B510B5F8B4E8B21C0C8014E
:10D00000AA2797FDA095BA2F332727FD3095432FE8
:10D01000532FBC01CD010E94959197FF04C0615C24
:10D020007F4F8F4F9F4FF6E0959587957795679542
:10D03000FA95D1F7AE89BF89A60FB71FBF8BAE8B0C
:10D04000F301808191812E893F898217930764F4CF
:10D05000B901680F791F77FF02C06F5F7F4F759529
:10D0600067957F8B6E8B1DC0552049F44E895F8973
:10D07000440F551F481B590B5F8B4E8B12C051E05C
:10D08000551578F4252D33276E897F89861B970BDC
:10D09000B9010E94D491AE89BF89A60FB71FBF8B7B
:10D0A000AE8BC101880F991F880F991FEE89FF89E8
:10D0B0008E179F0764F4FD898F2F9927880F991F7A
:10D0C000880F991F2E893F892817390714F09F8BE5
:10D0D0008E8B8E899F8997FD03969595879595955B
:10D0E0008795F4018183880F991F880F991F2E89D6
:10D0F0003F89281B390BC901880F8283EE89FF897C
:10D10000D301ED93FC9303C0F401118212824A947F
:10D1100022E030E0620E731E44E050E0A40EB51E23
:10D1200068E070E0860E971E47FEC0CEE2E1C95E61
:10D130000C94409284B1806A84B93D9A82E58CBD9A
:10D140001DBC459A81E080938A098AEA80939B09F5
:10D1500083E880939C098AE080939D0910929F093F
:10D1600010929E091092A1091092A0091092030A30
:10D170001092BF09089530918A09332309F085C0C0
:10D180000DB407FE82C084E080930703459A2EB554
:10D190008091E50499278130910589F082309105CD
:10D1A0001CF4892B21F03EC00297B9F03BC03093AC
:10D1B000BE092093E6042138A9F581E008C0253591
:10D1C00049F48091E604820F8093E60482E0809324
:10D1D000E50428C03093E50425C08091BE09E82FFE
:10D1E000FF27E052F64F20838F5F8093BE09909116
:10D1F000E6048032A0F0291769F480E2A0EEB9E0DD
:10D20000E0ECF9E00D9001928A95E1F781E08093DE
:10D21000BF0902C03093BF091092E50403C0920F0A
:10D220009093E60420919A09223208F028C045988C
:10D2300000000000000000000000000000000000EE
:10D2400000000000000000000000000000000000DE
:10D2500000000000000000000000000000000000CE
:10D26000E0919309F0919409E20FF11D80818EBD48
:10D270008091BC099081890F8093BC0903C081E033
:10D2800080938A092F5F20939A090895EF92FF9265
:10D290000F931F9380919F079927880F991F880FDD
:10D2A000991F7C010027F7FC0095102F80916104E5
:10D2B00090916204A0916304B0916404BC01CD011B
:10D2C000A80197010E94099230939F0920939E091B
:10D2D0008091590490915A04A0915B04B0915C0430
:10D2E000BC01CD01A80197010E9409923093A109C8
:10D2F0002093A009209180093091810940918209F1
:10D3000050918309DA01C90163E0880F991FAA1FB0
:10D31000BB1F6A95D1F7820F931FA41FB51F820F01
:10D32000931FA41FB51F20913C0130913D014091F6
:10D330003E0150913F01BC01CD010E940992309302
:10D34000A7092093A60980917204909173042091FB
:10D35000240330912503821B930B9093AD09809396
:10D36000AC09E0916804F091690480914D099091B5
:10D370004E09BF010E94D4919B01220F331F220F3F
:10D38000331F260F371F260F371F37FF02C02D5FB1
:10D390003F4F35952795359527953093A3092093D1
:10D3A000A20980917C0990917D09BF010E94D491CE
:10D3B0009B01220F331F220F331F260F371F260F0B
:10D3C000371F37FF02C02D5F3F4F359527953595A5
:10D3D00027953093A5092093A4091092690410920F
:10D3E000680410924E0910924D0910927D09109216
:10D3F0007C0980919D099927AA27BB27FC013A97B0
:10D40000E830F10508F0FEC1E058FF4F0C945B9244
:10D410008091E4038093B0098091E3038093B10984
:10D420008091E2038093B2098091E1038093B30974
:10D430008091E0038093B4098091DF038093B50964
:10D440008091DE038093B6098091DD038093B70954
:10D450008091CF038093B8098091CF03837F80931D
:10D46000CF030E9463308093B9098091E9078093CC
:10D47000BA098091CE03C4C18091100A9091110A1B
:10D480009093B1098093B0098091140A9091150A84
:10D490009093B3098093B20980911F01909120016C
:10D4A0008093B409809100018093B50980913B017C
:10D4B0008093B6099091E7049093B709E92FFF276D
:10D4C000A3E0EE0FFF1FAA95E1F7EA5AF74F868116
:10D4D0008093B80983818093B90987818093BA09C1
:10D4E00085818093BB09892F8F5F6CE00E94B49186
:10D4F0009093E70487C18091D4078093B00980910D
:10D50000D5078093B1098091D6078093B2098091A5
:10D51000D7078093B3098091D8078093B40980918D
:10D52000DC078093B5098091DD078093B60980916F
:10D53000DE078093B7098091E1078093B809809155
:10D54000DF078093B9098091E0078093BA09809141
:10D55000E20756C18091D3078093B0098091AA0752
:10D56000863081F08091D402823451F00E9483731E
:10D57000E82FFF27EB55FF4E84918093D40202C021
:10D580000E94837380910A058093B1093BC1F8948E
:10D5900080918607E82FFF27EE0FFF1FE954F74F12
:10D5A0000190F081E02DE038F1051CF0EFE7F0E0AC
:10D5B00006C02FEFE138F20714F4E1E8FFEFE09343
:10D5C000B00980918707E82FFF27EE0FFF1FE9546E
:10D5D000F74F0190F081E02DE038F1051CF0EFE706
:10D5E000F0E006C07FEFE138F70714F4E1E8FFEF61
:10D5F000E093B10980918507E82FFF27EE0FFF1F09
:10D60000E954F74F0190F081E02DE038F1051CF06E
:10D61000EFE7F0E006C08FEFE138F80714F4E1E837
:10D62000FFEFE093B20980918407E82FFF27EE0F08
:10D63000FF1FE954F74F0190F081E02DE038F1052C
:10D640001CF0EFE7F0E006C02FEFE138F20714F42A
:10D65000E1E8FFEF7894E093B309809108048093A8
:10D66000B409809109048093B50980910A048093DC
:10D67000B60980910B048093B70980910C048093C4
:10D68000B80980910D048093B90980910E048093AC
:10D69000BA0980910F04B4C080916F05863018F0EC
:10D6A00010926F0585E08093B0098091E307809325
:10D6B000B1098091010490910204A0910304B091FA
:10D6C0000404BC01CD0125E030E040E050E00E94C0
:10D6D00009923093B3092093B2098091FD03909190
:10D6E000FE03A091FF03B0910004BC01CD0125E031
:10D6F00030E040E050E00E9409923093B509209359
:10D70000B4098091D9078093B6098091DA07809394
:10D71000B7098091DB078093B80980910704809353
:10D72000B9098091B7089091B8088093BA0980919F
:10D73000EE069091EF0697FD039695958795959542
:10D7400087955EC01092B0098AE58093B10983E0A5
:10D750008093B20984E38093B3098091010180939F
:10D76000B409809154058093B50990915505909323
:10D77000B6098F77809354059071909355058091E9
:10D7800056058093B709809170098093B8098091FC
:10D7900054098093B9098091E5078093BA09809173
:10D7A000F2072EC08091B8078093B0098091F007EE
:10D7B0008093B109809167018093B2098091B1078C
:10D7C0008093B3098091B2078093B4098091B30725
:10D7D0008093B509809166018093B6098091B50761
:10D7E0008093B7098091B6078093B8098091B707F5
:10D7F0008093B9098091160A8093BA09809118071D
:10D800008093BB098091BF09882309F47DC1609191
:10D81000C00980919901681719F08AEF80939701E8
:10D820006093990181E0809387014091C1095091F3
:10D83000C209CA0181509E4F8F5F9340B0F420917E
:10D84000C3093091C409C90181509E4F8F5F934035
:10D8500060F48091900785FF08C05093D4044093F2
:10D86000D3043093D2042093D1048091C7099091BE
:10D87000C80921E08936920724F4909389018093A6
:10D8800088012091D1093091D209809108039091AB
:10D8900009038217930740F48091DC02882321F466
:10D8A0003093090320930803862F99278936910521
:10D8B00009F4A5C08A36910544F48736910571F0C4
:10D8C0008836910509F462C027C18A36910509F4AA
:10D8D00014C18B36910509F4E2C01EC18091D309B1
:10D8E0008093000A8091D4098093020A8091D5091F
:10D8F0008093010A8091D609809386018091D7098F
:10D900008093040A8091D809809398018091D90965
:10D910008093E4048091DA098093D0048091DC0341
:10D920008823F9F02091DB093091DC0937FD19C01B
:10D930003093200420931F049091BA07992389F013
:10D940008FE0989FC0011124281B390BC901885909
:10D950009E4F68E671E00E94D491909320048093DA
:10D960001F042091DB043091DC048091DD0990914B
:10D97000DE09280F391F37FF02C02F5F3F4F359553
:10D9800027953093DC042093DB04C6C08091D30933
:10D99000809395098091D409809396098091D50947
:10D9A000809397098091D609809398098091D7092F
:10D9B000809399098091DE069091D809892B8093F4
:10D9C000DE069091DF0693708091D9098C70982BB8
:10D9D0009093DF068091DA098093E2048091DB095D
:10D9E00080938B018091DC098093030A8091DD098B
:10D9F0008093DE048091DE098093DD048DC08091E8
:10DA0000D30980938B098091D40980938C098091EC
:10DA1000D50980938D098091D60980938E098091D4
:10DA2000D7099091D8099093900980938F0980919C
:10DA3000D9099091DA099093920980939109809184
:10DA4000DB09992787FD90959093EA088093E90870
:10DA50008091DC098093F6038091DD099091DE09C5
:10DA60009C01442737FD4095542FDA01C90163E03A
:10DA7000880F991FAA1FBB1F6A95D1F7820F931FAA
:10DA8000A41FB51F820F931FA41FB51F8093F70318
:10DA90009093F803A093F903B093FA033DC08091EB
:10DAA000D3098093E1048091D4098093E0048091AC
:10DAB000D5098093DF049091D609992349F080918C
:10DAC0009D01882319F08151833010F490939D01BA
:10DAD0008091D70980930F058091D80980930E0516
:10DAE0008091D9099091DA0990930C0580930B05E8
:10DAF0008091DB0980930D050FC08091AA078630C5
:10DB000059F40E94DC7308C01092D4041092D3041C
:10DB10001092D2041092D1041F910F91FF90EF90B8
:10DB2000089580918A09882309F43BC045988BE9C0
:10DB300099E090939409809393099091E304E92FDD
:10DB4000FF27E457FE4F9F5F9093E304808180930B
:10DB50009D099B3010F01092E30410928A090E94F4
:10DB6000466981E080939A090000000000000000EF
:10DB700000000000000000000000000000000000A5
:10DB80000000000000000000000000000000000095
:10DB9000000000000000000080919B098093BC09F8
:10DBA0008EBD089587B18C6087B9429843981092D2
:10DBB000E90480E880939B011092E80480939A0125
:10DBC00008958091EE0481508093EE048F3F09F018
:10DBD00055C189E08093EE048091E9089091EA08AC
:10DBE00081589F4F39F08091E9089091EA08815857
:10DBF0008093F3048091CF03992780739070892BD1
:10DC000021F48091550580FF1DC08091D1078823A4
:10DC100051F08091F104882319F484E08093E904A1
:10DC200081E08093F1048091D2078823B9F080913C
:10DC3000F204882319F484E08093E80481E080935F
:10DC4000F2040CC01092F1041092F2048091CD07FE
:10DC50008093EF048091CF078093F0048091F104CA
:10DC6000882309F073C08091EF07282F332724FF02
:10DC700007C080910604882319F425FD80C081C067
:10DC80009091CE07983F48F080914F098D3D28F044
:10DC90008091EF0488236CF00AC0983F68F080916F
:10DCA0004F09853049F48091EF0487FF02C0429804
:10DCB00001C0429A81E032C08091E9048150809392
:10DCC000E9048F3F09F05EC08091F20785FF29C00B
:10DCD0009091F304892F86958093E904992351F458
:10DCE0008091EF0487FF02C0429801C0429A1092CF
:10DCF0009B0148C080919B019091EF04882341F4DF
:10DD00008093F30480E880939B019923D4F137C07A
:10DD1000982311F0429A01C04298869580939B0106
:10DD200031C080914F0986958093E90480919B01D1
:10DD3000813021F41092F30480E801C0869580932D
:10DD40009B0180919B019091EF0417C08091E904A1
:10DD500081508093E9048F3FA9F489E08093E9041E
:10DD600080919B01813011F480E801C086958093F9
:10DD70009B0180919B019091D107892311F0429AD8
:10DD800001C042988091F204882309F043C0909129
:10DD9000EF0797FF07C080910604882319F496FDCA
:10DDA00052C053C09091D007983F48F080917709B6
:10DDB0008D3D28F08091F00488236CF00AC0983FD4
:10DDC00078F080917709853059F48091F00487FFCD
:10DDD00002C0439801C0439A81E080939A0136C003
:10DDE0008091E80481508093E8048F3F79F5809119
:10DDF000770986958093E80480919A01813011F427
:10DE000080E801C0869580939A0180919A01909153
:10DE1000F00417C08091E80481508093E8048F3F9C
:10DE2000A9F489E08093E80480919A01813011F48B
:10DE300080E801C0869580939A0180919A01909123
:10DE4000D207892311F0439A01C04398429B04C032
:10DE50008091CE03886003C08091CE03877F80933A
:10DE6000CE03439B06C08091CE0380618093CE0396
:10DE700008958091CE038F7E8093CE0308950F93F3
:10DE80001F93CF93DF93482FEB0180910704E42F7A
:10DE9000FF27843BD8F08F010E0F1F1FF801E954B4
:10DEA000F74F808191819B01281B390BC90163E0E9
:10DEB00070E00E94D491CB01880F991F860F971FA5
:10DEC0000551174FF8019183808306C0EE0FFF1FA5
:10DED000E551F74F11821082E42FFF27EE0FFF1F4D
:10DEE000E954F74FD183C083DF91CF911F910F91F8
:10DEF00008954FB724E130E0F8948091C9008F77FE
:10DF00008093C9008091C9008F7B8093C900809164
:10DF1000C9008F7D8093C9005A9A52985B9A539A90
:10DF2000832F99278093CD002093CC008091C80047
:10DF300082608093C80080E18093C9008091CA000C
:10DF40008F778093CA008091CA008F7B8093CA002C
:10DF50008091CA008F7D8093CA008091CA008F7E15
:10DF60008093CA008091CA00877F8093CA00809105
:10DF7000C9008B7F8093C9008091CA008460809320
:10DF8000CA008091CA0082608093CA008091C80054
:10DF900087FF03C08091CE00F9CF8091C9008068CF
:10DFA0008093C9004FBF0895EF92FF920F931F9384
:10DFB000CF93DF93482F00E010E080919C018130E7
:10DFC00061F410929C0184E48093F6041092F804AA
:10DFD0001092F7041092F90403C28091F60488238A
:10DFE00019F421E030E001C098019091F7049923E1
:10DFF00071F4232B11F081E010C084E48093F604C7
:10E000009093F8049093F7049093F904D2C191305F
:10E0100069F4232B09F0C3C182E08093F704809157
:10E02000F8048F5F8093F80483E0C1C19230D1F48B
:10E03000232B09F0B4C183E08093F6044093F904E4
:10E040009091F804923039F41092FA0447FF03C01B
:10E0500081E08093FA0483E08093F7049F5F9093BC
:10E06000F804A7C1933009F09AC1232B09F097C196
:10E070009093F60482E08093F7048091F8048F5F18
:10E080008093F8042091F904822F9927782F66272E
:10E09000842F9927682B792B8091AA07813051F41E
:10E0A0007370CB018050924063E070E00E94D49185
:10E0B000EB0119C0823069F47770CB018050944035
:10E0C00066E070E00E94D491EB0126952695269596
:10E0D0000CC0EB01D370C856D140CE01D7FD0196DC
:10E0E000EC01D595C79526952695022F11270F701F
:10E0F00010700F5F1F4F0D30110508F049C102303D
:10E10000110519F404E010E005C00430110511F404
:10E1100002E010E0D801A00FB11FFD01E954F74F54
:10E12000808191819E01281B390BC90137FF03C0F3
:10E13000909581959F4F069704F5E091EC07EE23AB
:10E1400051F0FF27EE0FFF1FE954F74F80819181B7
:10E150008436910594F480910704883C30F48091D2
:10E160000704865F8093070408C088EC8093070447
:10E1700080916F008F7D80936F00A954B74F8D9170
:10E180009C91BC01660F771F680F791F6C0F7D1F74
:10E1900077FF02C06D5F7F4F7B01F594E794F594A4
:10E1A000E794CE0101968E159F0524F40894E108AA
:10E1B000F10808C0CE010197E816F9061CF408948E
:10E1C000E11CF11C0630110509F0CEC0C536D105A1
:10E1D0000CF4A5C09091F504E92FFF27EB5FF54FF4
:10E1E000E081ED3729F48091F40480958093F40464
:10E1F000963061F48091F404882311F0E338B9F08B
:10E20000882309F088C0ED3791F085C0993009F076
:10E2100082C08091F404882329F480910E0A833807
:10E2200031F079C080910E0A8D3709F074C0809169
:10E23000060A8D3739F48091070A833899F463E828
:10E240007FEF0DC0833871F48091070A833819F489
:10E2500060E070E004C08D3729F46DE770E085E080
:10E260000E943F6F8091080A992787FD9095BC0115
:10E2700086E00E943F6F8091090A992787FD90955B
:10E28000BC018BE00E943F6F80910A0A992787FDAD
:10E290009095BC018CE00E943F6F8091F50489301D
:10E2A000D1F580910C0A8D3749F48091C70890917F
:10E2B000C8080596BC0188E00E943F6F80910D0A56
:10E2C0008D3749F48091C7089091C8080597BC0123
:10E2D00088E00E943F6F8091C7089091C8088358DA
:10E2E0009F4F1CF483E89FEF09C08091C70890916D
:10E2F000C8088E37910534F08DE790E09093C808F8
:10E300008093C70880910B0A992787FD9095BC01DF
:10E310008AE00E943F6F1092F5041092F404CA3014
:10E32000D1055CF48091F5048F5F8093F504E82FAC
:10E33000FF27EB5FF54F83E880838091F5048A30F7
:10E3400011F41092F5048FEFCC39D8076CF480915A
:10E35000F504E82FFF27EB5FF54F8DE78083809171
:10E36000F40480958093F4040530110518F4B70186
:10E37000802F0BC00530110519F4BE0187E005C0E0
:10E3800007301105B1F4BE0189E00E943F6F11C052
:10E390000231110570F081E080939C010AC081E098
:10E3A00080939C011092F8041092FA0484E4809304
:10E3B000F6048091F804803198F08091FA04882363
:10E3C00031F480919C01882311F480933A011092DA
:10E3D000F8041092FA041092F70484E48093F6048F
:10E3E000E6E0CDB7DEB70C944C92CF93FC0197FFDB
:10E3F00005C0CFEFF095E195FF4F01C0C1E028E6E1
:10E4000031E0CF01B9010E94D491FC018B35910517
:10E4100054F08B5590408A35910538F484EB90E0A8
:10E420008E1B9F0BFC0141E00DC0CF01855B90402E
:10E430008A35910518F4E45BF04003C02E1B3F0BB6
:10E44000F9014FEFEE0FFF1FE85BF64F2591349176
:10E450008C2F992787FD9095289FB001299F700DDB
:10E46000389F700D1124842F992787FD9095689F00
:10E47000A001699F500D789F500D1124CA01CF91C2
:10E4800008952AE530E0281B390BC9010E94F57177
:10E4900008950895089508950895089580E090E0FE
:10E4A00008951092110A1092100A1092150A1092F3
:10E4B000140A1092130A1092120A1092160A8AE095
:10E4C00090E00E946F199093FC048093FB040895E0
:10E4D000CF93DF938091FB049091FC040E94781904
:10E4E000882309F4AFC08091FB049091FC040A9644
:10E4F0009093FC048093FB04E0E0F0E09F0190E047
:10E500005FEFA6E5B8E04BE0ED018B8187FF0BC024
:10E510009F5F8D81E80FF11D8981280F311D8E814C
:10E52000851708F4582F4150189647FFEDCF5093A8
:10E53000160A232B41F520910105309102054091E7
:10E54000030550910405BB27A52F942F832F90938B
:10E5500000058093FF04AA27BB27281B390B4A0B11
:10E560005B0BCF01AA27BB27280F391F4A1F5B1F50
:10E570002093010530930205409303055093040551
:10E58000E5E0F0E013C02091FF04309100052E1764
:10E590003F0718F4E21BF30B02C0E0E0F0E0892F24
:10E5A0009927880F991FE80FF91F3596F093110AE4
:10E5B000E093100AEF3FF10578F480911F019091EC
:10E5C00020018E9F90018F9F300D9E9F300D112452
:10E5D000C90164E670E013C0CF01969587959695C2
:10E5E000879520911F0130912001289FA001299F2C
:10E5F000500D389F500D1124CA0169E170E00E944E
:10E60000C0917093130A6093120A2091FD04309117
:10E61000FE042E0F3F1F3093FE042093FD045EE0A6
:10E620002131350778F08091140A9091150A0196EE
:10E630009093150A8093140A20513E403093FE04B3
:10E640002093FD04DF91CF91089530911005E32FC1
:10E65000FF2783E0EE0FFF1F8A95E1F7EA5AF74F95
:10E660002781422F552747FD509580911105992705
:10E67000841795072CF420931105309313050AC0D5
:10E68000222341F08091120599274817590714F465
:10E6900020931205832F8F5F809310058D30D0F06B
:10E6A00010921005809112058F3F19F08093060596
:10E6B00002C0109206058091110580930705809194
:10E6C0001305809305058FEF8093120510921105B5
:10E6D00010921305089595E1899F802D11240E94C1
:10E6E000D68B8AE89CE09F938F9388EA9BE89F9360
:10E6F0008F93E0913B05F0913C0509950F900F90A9
:10E700000F900F900895CF93C0E020919D0120932A
:10E710000A058091CF0385FF02C0C0E123C090911C
:10E72000E2049923B1F080910604882349F4E92F8B
:10E73000FF27EE0FFF1FE150F64F8491882349F425
:10E74000E92FFF27EE0FFF1FE250F64FC491CC23B5
:10E7500049F48091F20786FD03C010929D0104C028
:10E76000C22F02C0C0930A05809114058C1771F462
:10E7700080911505909116050E947819882319F447
:10E7800080E090E017C088E893E102C080ED97E058
:10E790000E946F199093160580931505CC2331F0D4
:10E7A00080919D01C81711F410929D01C09314052A
:10E7B0008C2F9927CF91089540E050E030E0809170
:10E7C000DE0999278A38910589F08B38910524F460
:10E7D0008938910541F013C08D38910569F08E3864
:10E7E000910539F00CC04FE65AE008C047E45BE001
:10E7F00005C047E15AE002C043E45AE03CE2909190
:10E80000D30920E08091D409281770F4931760F49D
:10E81000DA01A90FB11DE22FFF27E054F64F8589D9
:10E820008C939F5F2F5FEECF089520E335E78091B3
:10E830003B018B3211F08D32F9F480919507282F2E
:10E8400033278091FB039091FC03829FA001839F5B
:10E85000500D929F500D1124CA0163E070E00E9498
:10E86000D491CB019B01205D3A48C196C19708F035
:10E870003FC02EEF34E73CC0803229F58091CF03B2
:10E8800081FF36C02091080530910905205D3A4886
:10E8900055E72133350748F085E72439380718F460
:10E8A00020E335E702C02456304045E720333407E3
:10E8B000F8F454E72D3C350718F020E335E718C08D
:10E8C0002C593F4F15C08E3549F49091F6038AE0DC
:10E8D000989F90011124205D3A480AC0863741F480
:10E8E0009091F6038AE0989FC0011124281B390BF0
:10E8F000C9010895EF92FF920F931F9399278A38C9
:10E90000910509F444C18B38910524F489389105A7
:10E9100051F0DEC28D38910509F424C28E3891057C
:10E9200009F486C1D5C28091010490910204A0919E
:10E930000304B0910404BC01CD0124E630E040E0C2
:10E9400050E00E940992DA01C9018C509E4F9093C9
:10E95000750A8093740A0E94157490937B0A8093C1
:10E960007A0A90937D0A80937C0A90937F0A809321
:10E970007E0A2091740A3091750A8091780A9091EC
:10E98000790A2817390724F43093790A2093780AF2
:10E990008091760A9091770A8217930724F4309336
:10E9A000770A2093760A1092710A8FE69AE0909384
:10E9B00027058093260580913B018093950A8091DD
:10E9C000CE0380FF02C083E401C080E28093960AF8
:10E9D0002091E204222309F1822F6AE00E94B4917F
:10E9E000805D8093800A822F0E94B491892F805D80
:10E9F0008093810A8AE38093820A81E1289FF00153
:10EA00001124A3E8BAE0E25CF54F9FE084918D9376
:10EA10009150319697FFFACF58C28091CF0385FF6E
:10EA20000CC0A0E8BAE0EEE5FCE094E184918D939F
:10EA30009150319697FFFACF48C230910E0533239B
:10EA400009F499C087E58093800A80E58093810A64
:10EA500040E24093820A20910F05822F6AE00E94D3
:10EA6000B491805D8093830A822F0E94B491892F94
:10EA7000805D8093840A8FE28093850A832F0E94B1
:10EA8000B491805D8093860A832F0E94B491892F70
:10EA9000805D8093870A4093880A20910B0530910E
:10EAA0000C0583E0293E380780F0C90168EE73E069
:10EAB0000E94C091CB01805D8093890AC90168EEF4
:10EAC00073E00E94C0919C0102C04093890A2536E0
:10EAD000310580F0C90164E670E00E94C091CB016D
:10EAE000805D80938A0AC90164E670E00E94C0914B
:10EAF0009C0103C080E280938A0AC9016AE070E049
:10EB00000E94C091CB01805D80938B0AC9016AE0AD
:10EB100070E00E94C091805D80938C0A8DE68093A6
:10EB20008D0A80E280938E0A20910D05253660F0D3
:10EB3000822F64E60E94B491805D80938F0A822FB9
:10EB40000E94B491292F02C080938F0A822F6AE01D
:10EB50000E94B491805D8093900A822F0E94B491AC
:10EB6000892F805D8093910A83E78093920A80E2E7
:10EB70008093930AAAC1A0E8BAE0E4E7FCE094E13C
:10EB800084918D939150319697FFFACF9EC18091D9
:10EB9000010490910204A0910304B0910404BC010B
:10EBA000CD0124E630E040E050E00E940992DA0115
:10EBB000C9018C509E4F90935D0B80935C0B0E941B
:10EBC000157490935F0B80935E0B88E78093600BC6
:10EBD00080918C098093610B0E9483738093490B11
:10EBE00080918B0981FF02C084E407C080918D0968
:10EBF000833011F480E201C081E28093620B87E4EC
:10EC00009BE0909327058093260580918B0180934C
:10EC10006E0B8091620B8093700B809191099091A3
:10EC2000920997FD0196959587958093630B4DC149
:10EC30000E9425738091010490910204A091030425
:10EC4000B0910404BC01CD0124E630E040E050E086
:10EC50000E940992DA01C9018C509E4F9093320AAA
:10EC60008093310A80911F019091200190932C0A8A
:10EC700080932B0A80911F019091200190932E0A7E
:10EC800080932D0A80912D0990912E0997FD019670
:10EC90009595879580931D0A8093240A2091910968
:10ECA0003091920937FF02C02F5F3F4F359527956E
:10ECB0002093220A80918F099091900964E170E07D
:10ECC0000E94C0916093230A2093290A60932A0A24
:10ECD0000E94157490933A0A8093390A88E78093CA
:10ECE0003B0A80911F01909120019093360A8093F6
:10ECF000350A809106058C5E80932F0A8091070566
:10ED00008C5E8093300A8091140A9091150A6AE013
:10ED100070E00E94C0917093380A6093370A109295
:10ED2000190A8091100A9091110A9093340A8093E5
:10ED3000330A87E19AE09093270580932605209176
:10ED4000D6023091D702C9016CE370E00E94C091F5
:10ED500060933E0AC9016CE370E00E94C091809309
:10ED60003F0AB3C00E94257380918F09909190094A
:10ED700064E670E00E94C0917093590A6093580A4B
:10ED800080912D0990912E0997FD01969595879573
:10ED90008093490A809191099091920997FD01967B
:10EDA0009595879580934E0A80910001482F5527AD
:10EDB0009A012B5F3F4F80911F01909120012817EE
:10EDC000390784F480911F0190912001841B950BD9
:10EDD0009C01220F331F280F391F822F82518093ED
:10EDE000550A02C01092550AE0900104F090020406
:10EDF0000091030410910404C801B70124E630E037
:10EE000040E050E00E9409923093570A2093560A3E
:10EE100037FF04C01092570A1092560AC801B70172
:10EE200024E630E040E050E00E940992DA01C90196
:10EE30008C509E4F90935B0A80935A0A80911F01D9
:10EE4000909120019093500A80934F0A80911F0166
:10EE5000909120019093520A8093510A0E94157458
:10EE600090935D0A80935C0A88E780935E0A8091A4
:10EE70001F01909120019093620A8093610A809112
:10EE800006058C5E8093530A809107058C5E809303
:10EE9000540A8091140A9091150A6AE070E00E9469
:10EEA000C0917093640A6093630A1092450A80913E
:10EEB000100A9091110A9093600A80935F0A83E48C
:10EEC0009AE090932705809326052CE230E002C05B
:10EED00020E030E0C9011F910F91FF90EF9008955D
:10EEE000EF92FF920F931F93CF93DF9380910805CA
:10EEF000909109059C0153E0220F331F5A95E1F7C9
:10EF0000281B390B8091170390911803280F391F84
:10EF100037FF02C0295F3F4F43E0359527954A955B
:10EF2000E1F730930905209308059091180599237E
:10EF300009F020C380911705282F33274427552730
:10EF40008F5F80931705F9012131310508F00FC358
:10EF5000E857FF4F0C945B928091CF0385FF2AC046
:10EF600080E00E94D68B80911F01909120016AE081
:10EF700070E00E94D4919F938F9380911F01909194
:10EF800020016AE070E00E94D4917F936F9380EA41
:10EF90009CE09F938F9389EC9BE89F938F93E091E4
:10EFA0003B05F0913C0509952DB73EB7285F3F4FD3
:10EFB0002DBF28C080E00E94D68B80911F019091C8
:10EFC00020016AE070E00E94D4919F938F9380911A
:10EFD0001F01909120016AE070E00E94D4917F931C
:10EFE0006F938DEA9CE09F938F9388EA9BE89F93B1
:10EFF0008F93E0913B05F0913C0509958DB79EB745
:10F0000008968DBF8091700980FF39C080911E04E1
:10F010008823E9F08AE00E94D68B80913B019927F2
:10F020009F938F938091010490910204A091030417
:10F03000B0910404BC01CD0124E630E040E050E092
:10F040000E9409923F932F938AEB9CE099C68AE035
:10F050000E94D68B8091010490910204A091030438
:10F06000B0910404BC01CD0124E630E040E050E062
:10F070000E9409923F932F9386EC9CE0ADC78AE0F3
:10F080000E94D68B81ED9CE09F938F9388EA9BE84A
:10F090000C941D818091CF0385FF2AC085E10E94D9
:10F0A000D68B8091D6029091D7026CE370E00E94DB
:10F0B000C0919F938F938091D6029091D7026CE379
:10F0C00070E00E94C0917F936F938BED9CE09F93C3
:10F0D0008F9389EC9BE89F938F93E0913B05F09190
:10F0E0003C0509952DB73EB7285F3F4F2DBF28C07F
:10F0F00085E10E94D68B8091D6029091D7026CE375
:10F1000070E00E94C0919F938F938091D60290915E
:10F11000D7026CE370E00E94C0917F936F9388EEFA
:10F120009CE09F938F9388EA9BE89F938F93E09155
:10F130003B05F0913C0509958DB79EB708968DBFAC
:10F140008FE10E94D68B80E690E09F938F93809111
:10F150002D0990912E099F938F9385EF9CE09F93AB
:10F160008F93C8EADBE8DF93CF93E0913B05F09102
:10F170003C0509958091CE032DB73EB7285F3F4FE0
:10F180002DBF80FF06C089E20E94D68B80E09DE003
:10F1900073C389E20E94D68B82E09DE0B9C680915C
:10F1A000CF0385FF1BC08AE20E94D68B8091140A90
:10F1B0009091150A9F938F9384E09DE09F938F9386
:10F1C00089EC9BE89F938F93E0913B05F0913C0580
:10F1D00009958DB79EB706968DBF1BC08AE20E9427
:10F1E000D68B8091140A9091150A9F938F938CE08F
:10F1F0009DE09F938F9388EA9BE89F938F93E09184
:10F200003B05F0913C0509952DB73EB72A5F3F4F6E
:10F210002DBF86E30E94D68B8091100A9091110A2F
:10F220006AE070E00E94C0919F938F938091100AD2
:10F230009091110A6AE070E00E94C0917F936F93F1
:10F2400084E19DE09F938F9388EA9BE89F938F933F
:10F25000E0913B05F0913C0509958DB79EB7089666
:10F26000C9C689E00E94D68B80E29DE09F938F9370
:10F2700008EA1BE81F930F93E0913B05F0913C05D2
:10F2800009958EE10E94D68B0F900F900F900F90F2
:10F2900082E29DE09F938F931F930F93E0913B0534
:10F2A000F0913C05099583E30E94D68B0F900F9057
:10F2B0000F900F9084E29DE09F938F931F930F9385
:10F2C000E0913B05F0913C0509958FE30E94D68BB8
:10F2D0000F900F900F900F9086E29DE09F938F9379
:10F2E0001F930F93E0913B05F0913C0509958EE744
:10F2F0000E94D68B0F900F900F900F908CE39DE0A3
:10F300009F938F931F930F939AC7809197018823A0
:10F3100009F462C08DE50E94D68B82E59DE09F9343
:10F320008F93C8EADBE8DF93CF93E0913B05F09140
:10F330003C05099584E50E94D68B0F900F900F90A5
:10F340000F9080918C0999279F938F9384E59DE07E
:10F350009F938F93DF93CF93E0913B05F0913C0512
:10F3600009958EE50E94D68B2DB73EB72A5F3F4F99
:10F370002DBF80918F09909190096AE070E00E9402
:10F38000C0917F936F938DE59DE09F938F93DF9363
:10F39000CF93E0913B05F0913C0509958DB79EB761
:10F3A00006968DBF80918D09833081F480918B0901
:10F3B00081FF06C08BE50E94D68B87E69DE0A8C53D
:10F3C0008BE50E94D68B8AE69DE0A2C58BE50E9464
:10F3D000D68B8DE69DE02DC784E0D3C38091970145
:10F3E000882309F47AC080911A0598EAE92E9BE8EF
:10F3F000F92E882309F44BC089E60E94D68B8091B0
:10F40000E10499279F938F9380E79DE09F938F93CB
:10F41000FF92EF92E0913B05F0913C05099585E75D
:10F420000E94D68B2DB73EB72A5F3F4F2DBF8091EC
:10F430008B0199279F938F9300E610E01F930F9302
:10F4400080919109909192099F938F938BE79DE012
:10F450009F938F93FF92EF92E0913B05F0913C05D3
:10F46000099582E70E94D68B8DB79EB70A968DBF0D
:10F470008091DF0499279F938F931F930F9380911F
:10F48000E00499279F938F9387E89DE073C689E6F0
:10F490000E94D68B80918B0199279F938F9380E652
:10F4A00090E09F938F9380919109909192099F93FF
:10F4B0008F9380918E0999279F938F9387E99DE081
:10F4C0009F938F93FF92EF92E0913B05F0913C0563
:10F4D00009958DB79EB70C968DC585E052C3909166
:10F4E000E2049923D1F080912305882381F09032A2
:10F4F00070F487E00E946B7383E90E94D68B809141
:10F50000E20499279F938F9380EB9DE0A4C383E946
:10F510000E94D68B8BEB9DE0B3C38091CF0308EAAA
:10F52000E02E0BE8F02E85FF06C084E90E94D68B02
:10F5300081EC9DE0DAC383E90E94D68B84ED9DE0E7
:10F54000D4C38091AC0B863059F480911A0588237E
:10F5500019F010921A059AC681E080931A0596C692
:10F56000883009F093C60E94DB8B81E0DBC3909367
:10F57000170594C6913009F0E0C380911705282F34
:10F580003327442755278F5F80931705F9012131D1
:10F59000310508F07EC6E756FF4F0C945B928091D0
:10F5A000CF0385FF43C080E00E94D68B8091140A70
:10F5B0009091150A9F938F9380911F019091200144
:10F5C0006AE070E00E94D4919F938F9380911F0115
:10F5D000909120016AE070E00E94D4917F936F9334
:10F5E0008091D6029091D7026CE370E00E94C091A6
:10F5F0009F938F938091D6029091D7026CE370E035
:10F600000E94C0917F936F938AEE9DE09F938F93AA
:10F6100089EC9BE89F938F93E0913B05F0913C052B
:10F6200009952DB73EB7225F3F4FB1C580E00E94DC
:10F63000D68B8091140A9091150A9F938F93809195
:10F640001F01909120016AE070E00E94D4919F9385
:10F650008F9380911F01909120016AE070E00E94D9
:10F66000D4917F936F938091D6029091D7026CE3EF
:10F6700070E00E94C0919F938F938091D6029091E9
:10F68000D7026CE370E00E94C0917F936F9385E096
:10F690009EE0C2C285E10E94D68B80E690E09F93F7
:10F6A0008F9380918801909189019F938F9380E23D
:10F6B0009EE09F938F93C8EADBE8DF93CF93E091BE
:10F6C0003B05F0913C050995809170092DB73EB737
:10F6D000285F3F4F2DBF80FF51C080911E048823BB
:10F6E00039F18FE10E94D68B809101049091020440
:10F6F000A0910304B0910404BC01CD0124E630E0E4
:10F7000040E050E00E9409923F932F938AE29EE0EE
:10F710009F938F9388EB9BE89F938F93E0913B059A
:10F72000F0913C0509958DB79EB706968DBF38C000
:10F730008FE10E94D68B8091010490910204A091E8
:10F740000304B0910404BC01CD0124E630E040E0A4
:10F7500050E00E9409923F932F9383E39EE09F9392
:10F760008F93DF93CF93E0913B05F0913C05099592
:10F770002DB73EB72A5F3F4F2DBF12C08FE10E94C9
:10F78000D68B8CE39EE09F938F93DF93CF93E09192
:10F790003B05F0913C0509950F900F900F900F904D
:10F7A00089E20E94D68B80913B0199279F938F938A
:10F7B00086E49EE09F938F93DF93CF9313C4809151
:10F7C00097018823F9F08BE20E94D68B80918B0100
:10F7D00099279F938F9380918F09909190096AE068
:10F7E00070E00E94C0917F936F9380E690E09F93BA
:10F7F0008F9380919109909192099F938F9389E4BF
:10F800009EE058C182E0BDC18FE30E94D68B8091FB
:10F81000120A9091130A9F938F938091100A9091EE
:10F82000110A6AE070E00E94C0919F938F938091CB
:10F83000100A9091110A6AE070E00E94C0917F93D3
:10F840006F9380E69EE09F938F93C8EADBE8DF9397
:10F85000CF93E0913B05F0913C0509958091CE0353
:10F860002DB73EB7265F3F4F2DBF80FF0AC082E510
:10F870000E94D68B84E79EE09F938F9388EB9BE852
:10F88000DCC482E50E94D68B87E79EE041C380916D
:10F89000970118EAE12E1BE8F12E882309F449C0EC
:10F8A00084E50E94D68B80918C0999279F938F9332
:10F8B00080918E0999279F938F938AE79EE09F936B
:10F8C0008F93E701FF92EF92E0913B05F0913C05A9
:10F8D00009958DB79EB708968DBF80918D098330AD
:10F8E00051F484E60E94D68B8DE89EE09F938F931F
:10F8F000FF92EF920BC084E60E94D68B83E99EE0D4
:10F900009F938F9389EC9BE89F938F93E0913B05A6
:10F91000F0913C0509950F900F900F900F908091FA
:10F920008B0981FFBBC484E60E94D68B89E99EE0E7
:10F93000EFC284E50E94D68B8FE99EE0D6C180910C
:10F940001905C8EAEC2ECBE8FC2E882309F450C038
:10F9500089E60E94D68B809173086AE00E94B49178
:10F96000892F99279F938F93809173080E94B49158
:10F9700099279F938F9380916B080E94B491892F50
:10F9800099279F938F9380916B080E94B491992738
:10F990009F938F93809163080E94B491892F992738
:10F9A0009F938F93809163080E94B49199279F93AE
:10F9B0008F9380915B080E94B491892F99279F9320
:10F9C0008F9380915B080E94B49199279F938F93A6
:10F9D00085EB9EE09F938F93FF92EF92E0913B0522
:10F9E000F0913C0509952DB73EB72C5E3F4FCFC334
:10F9F00089E60E94D68B80E690E09F938F9380915A
:10FA00007508992787FD90959F938F9380916D0836
:10FA1000992787FD90959F938F93809165089927EB
:10FA200087FD90959F938F9380915D08992787FD1F
:10FA300090959F938F9382ED9EE09F938F93FF927B
:10FA4000EF92E0913B05F0913C0509958DB79EB78B
:10FA50000E96D0C28091190590918207882309F4EF
:10FA60008DC0943009F48CC09630A1F58EE70E94C9
:10FA7000D68B809183086AE00E94B491892F9927E0
:10FA80009F938F93809183080E94B49199279F93AD
:10FA90008F9380917B080E94B491892F99279F931F
:10FAA0008F9380917B080E94B49199279F938F93A5
:10FAB00085EE9EE09F938F9388EA9BE89F938F93B8
:10FAC000E0913B05F0913C0509952DB73EB7245FC9
:10FAD0003F4F5DC3973008F4E1C38EE70E94D68B99
:10FAE000809193086AE00E94B491892F99279F938F
:10FAF0008F93809193080E94B49199279F938F933D
:10FB000080918B080E94B491892F99279F938F939E
:10FB100080918B080E94B49199279F938F93809135
:10FB200083080E94B491892F99279F938F93809186
:10FB300083080E94B49199279F938F9380917B08AB
:10FB40000E94B491892F99279F938F9380917B086E
:10FB50000E94B49199279F938F9384EF9EE09F9387
:10FB60008F9388EA9BE89F938F93E0913B05F091F8
:10FB70003C0509958DB79EB744963CC2943021F45C
:10FB800086E00E946B738AC39630F1F48EE70E9480
:10FB9000D68B80E690E09F938F938091850899277C
:10FBA00087FD90959F938F9380917D08992787FD7E
:10FBB00090959F938F9381E19FE09F938F9388EA25
:10FBC0009BE89F938F93DAC2973008F467C38EE760
:10FBD0000E94D68B80E690E09F938F93809195084A
:10FBE000992787FD90959F938F9380918D089927F2
:10FBF00087FD90959F938F9380918508992787FD26
:10FC000090959F938F9380917D08992787FD90957C
:10FC10009F938F9384E29FE09F938F9388EA9BE862
:10FC20009F938F930ECF9091E204992309F44AC0D9
:10FC3000809123058823F9F09032E8F487E00E9450
:10FC40006B7383E90E94D68B8091E20499279F937E
:10FC50008F9387E39FE09F938F9388EB9BE89F931D
:10FC60008F93E0913B05F0913C0509952DB73EB788
:10FC70002A5F3F4F8CC283E90E94D68B82E49FE0CB
:10FC80009F938F9308EA1BE81F930F93E0913B0526
:10FC9000F0913C0509951F921F929091E20481E139
:10FCA000989FC0011124825C954F9F938F931F935F
:10FCB0000F93E0913B05F0913C0509958DB79EB7F8
:10FCC0000A9698C18091CF03B8EAEB2EBBE8FB2ED1
:10FCD00085FF06C084E90E94D68B88E49FE005C0BA
:10FCE00083E90E94D68B8BE59FE09F938F93FF92D1
:10FCF000EF92A5C28091AC0B863079F48091190502
:10FD0000882319F01092190503C081E0809319052A
:10FD100085E00E946B7386E0AEC2883031F40E94A9
:10FD2000DB8B82E080931805AFC2813009F0AEC250
:10FD30000E94DB8B10921805A7C2923009F0ACC26A
:10FD400080911705282F3327442755278F5F8093ED
:10FD50001705F9012131310508F09BC2E655FF4F27
:10FD60000C945B9280E00E94D68B83EF97E09F9388
:10FD70008F930E94633099279F938F9381E79FE031
:10FD80009F938F9388EB9BE89F938F93E0913B0524
:10FD9000F0913C0509952DB73EB7285F3F4FF7C15D
:10FDA00085E10E94D68B81E098E09F938F938091AC
:10FDB00000016AE00E94B491892F99279F938F9345
:10FDC000809100010E94B49199279F938F9380E8BE
:10FDD0009FE09F938F9388EA9BE89F938F93E09196
:10FDE0003B05F0913C05099569CF8AE20E94D68BCC
:10FDF00081E99FE09F938F93C8EADBE8DF93CF937D
:10FE0000E0913B05F0913C050995809170090F90B8
:10FE10000F900F900F9080FF41C0809190079091BC
:10FE2000730181FD0BC0892F99279F938F9386E9DA
:10FE30009FE09F938F93DF93CF9313CFE0913B0588
:10FE4000F0913C05933318F080EA9FE002C087EA06
:10FE50009FE09F938F93DF93CF9309950F900F901F
:10FE60000F900F9080915409E0913B05F0913C0573
:10FE70009091730180FF0BC0892F99279F938F93D7
:10FE80008EEA9FE09F938F93DF93CF93AFC0892F2C
:10FE900099279F938F9384EB9FE0CFC08AEB9FE0DD
:10FEA00037C08FE30E94D68B83EC9FE09F938F93A4
:10FEB000C8EADBE8DF93CF93E0913B05F0913C0586
:10FEC00009950F900F900F900F908091E60788236F
:10FED00019F487EC9FE01CC08091DC03E0913B05A6
:10FEE000F0913C05882319F080ED9FE002C087ED7A
:10FEF0009FE09F938F93DF93CF9309950F900F907F
:10FF00000F900F908091F10786FFC8C18EED9FE0A2
:10FF10009F938F93DF93CF9392C184E50E94D68BFA
:10FF200085EE9FE09F938F93C8EADBE8DF93CF9342
:10FF3000E0913B05F0913C050995809170090F9087
:10FF40000F900F900F9085FD03C08AEE9FE011C0C7
:10FF50008091D407883F10F4E82F07C0EFEFF0E05E
:10FF6000E81BF109E85FFB4FE081E23358F483EFCF
:10FF70009FE09F938F93DF93CF93E0913B05F091A8
:10FF80003C0516C0E43B18F08AEF9FE0F2CF809169
:10FF9000F107E0913B05F0913C0585FF03C081E04E
:10FFA00090E102C088E090E19F938F93DF93CF931D
:10FFB00009950F900F900F900F908091EA0788237A
:10FFC00009F46CC18EE50E94D68B8091EA079927CF
:10FFD0009F938F938FE090E19F938F9388EA9BE8A4
:10FFE0009F938F93E0913B05F0913C0509958DB768
:10FFF0009EB706968DBF52C189E60E94D68B8AE1D4
:020000021000EC
:1000000090E19F938F93C8EADBE8DF93CF93E09171
:100010003B05F0913C0509950F900F900F900F90C4
:100020008091E907E0913B05F0913C05882351F070
:1000300099279F938F9384E290E19F938F93DF930F
:10004000CF9313CE88E290E19F938F93DF93CF936A
:10005000FAC080911B05A8EAEA2EABE8FA2E8823A5
:1000600009F053C08EE70E94D68B809167019927D3
:100070009F938F9380918507E82FFF27EE0FFF1F37
:10008000E954F74F808191819F938F9380918407EA
:10009000E82FFF27EE0FFF1FE954F74F8081918172
:1000A0009F938F938EE290E19F938F93FF92EF92B5
:1000B000E0913B05F0913C05099583E90E94D68BC0
:1000C0008DB79EB70A968DBF80918707E82FFF27CF
:1000D000EE0FFF1FE954F74F808191819F938F931B
:1000E00080918607E82FFF27EE0FFF1FE954F74F97
:1000F0008081918181589F4F9F938F9382E490E1FB
:100100009F938F93FF92EF9241CE8EE70E94D68B02
:1001100080910A0499279F938F93809109049927CE
:100120009F938F938091080499279F938F9381E5E4
:1001300090E19F938F93FF92EF92E0913B05F091B6
:100140003C05099583E90E94D68B8DB79EB70A9628
:100150008DBF80910D0499279F938F9380910C04FC
:1001600099279F938F9380910B0499279F938F9347
:1001700085E690E19F938F93FF92EF92E0913B058C
:10018000F0913C0509952DB73EB7265F3F4F2DBF37
:1001900085C080912305882309F480C08EE70E94E2
:1001A000D68B8091700986FD11C089E790E19F93FD
:1001B0008F9389EC9BE89F938F93E0913B05F0919F
:1001C0003C0509950F900F900F900F908091EF07CD
:1001D00099278F709070892B89F088E890E19F9320
:1001E0008F9389EC9BE89F938F93E0913B05F0916F
:1001F0003C0509950F900F900F900F90809170091A
:1002000082FF11C082E990E19F938F9389EC9BE874
:100210009F938F93E0913B05F0913C0509950F90DA
:100220000F900F900F908091700983FD37C087E980
:1002300090E19F938F9389EC9BE89F938F93E0913C
:100240003B05F0913C0509950F900F900F900F9092
:1002500025C00091AC0B063089F480911B058823E2
:1002600019F010921B0503C081E080931B0586E006
:100270000E946B7387E00E946B7308C0013031F4F9
:100280000E94DB8B00931805109217051092AC0B9F
:1002900005C01092170502C010921805E6E0CDB710
:1002A000DEB70C944C924FB728E130E0F89480917F
:1002B000C9008F778093C9008091C9008F7B80939C
:1002C000C9008091C9008F7D8093C9005A9A5298C5
:1002D0005B9A539A832F99278093CD002093CC006B
:1002E0008091C80082608093C80080E18093C9003B
:1002F0008091CA008F778093CA008091CA008F7B5B
:100300008093CA008091CA008091CA008F7E80933A
:10031000CA008091CA0088608093CA008091C90099
:100320008B7F8093C9008091CA0084608093CA004B
:100330008091CA0082608093CA008091C80087FFC4
:1003400003C08091CE00F9CF8091C900806880936E
:10035000C90080918A0B846080938A0B4FBF0895F7
:100360009091F604992341F48F3031F490931D0558
:1003700080E58093F6040895E0911D05EF5FE0931A
:100380001D05E83121F481E080931C050895E931D1
:1003900020F089E180931D050895FF27ED58F44F63
:1003A00080830895A0E0B0E0E8EDF1E80C942C9291
:1003B00091E0D92E82E0A82EBD2CE12C01E0F02E98
:1003C00080918A0B82FDB5C080916F008F7D8093F4
:1003D0006F00E091EC07EE2351F0FF27EE0FFF1FB7
:1003E000E954F74F80819181843691055CF48091C6
:1003F0000704883C20F4809107048C5E01C088ECDF
:10040000809307048091740B682F772780911E05D5
:10041000815080931E058F3F31F41CE7C12E82E08E
:1004200080931E0502C0C4E2CC2E40E04C1508F0BB
:100430007EC0EA2DFF27ED58F44F80818D2111F009
:100440006E297F298D2D9927880F991FD82E8823F3
:1004500019F4B1E0DB2EAD0CEE0CFF1C20E0E2162F
:1004600028E0F20609F061C0A1E0EA2EF12CCB01F0
:100470008050944065E070E00E94D491AB2DBB2782
:10048000FD01EA0FFB1FE954F74F808191819C0128
:10049000220F331F280F391F260F371F37FF02C0C7
:1004A0002D5F3F4FE901D595C795D595C795CB01F0
:1004B00001968C179D0714F4219706C06150704077
:1004C000C617D7070CF4219680910704833CD8F017
:1004D0008D010A0F1B1FF801E954F74F80819181AC
:1004E000FE01E81BF90BCF0163E070E00E94D4919C
:1004F000CB01880F991F860F971F0551174FF801E1
:100500009183808307C0AA0FBB1FA551B74F1196D7
:100510001C921E92EB2DFF27EE0FFF1FE954F74FA1
:10052000D183C08360E070E0B3944F5F7FCF1092BF
:100530003A0110921C05EAE0CDB7DEB70C94489260
:100540000895089540E050E080911F0590912005A6
:100550009C01220F331F280F391F809117039091A0
:100560001803280F391F37FF02C02D5F3F4F359505
:100570002795359527953093200520931F05809169
:100580003B018B32D9F480919507282F3327809136
:10059000FB039091FC03829FA001839F500D929FCB
:1005A000500D1124CA0157FD4F96AC0125E0559519
:1005B00047952A95E1F74B5F5F4F3DC08D32D9F4E7
:1005C00080919507282F33278091FB039091FC039E
:1005D000829FA001839F500D929F500D1124CA014C
:1005E00057FD4F96AC0195E0559547959A95E1F7E3
:1005F0004550504020C0803271F48091CF0381FF7C
:100600001AC0C90137FD4F96AC0185E05595479555
:100610008A95E1F710C08E3529F48091F603482FB2
:10062000552709C0863739F48091F6039927442766
:100630005527481B590BCA01AA2797FDA095BA2F29
:100640008093900290939102A0939202B0939302B0
:1006500008950F931F930E94257380911F0190911D
:100660002001AA2797FDA095BA2F8093BF019093F0
:10067000C001A093C101B093C2018091100A909172
:10068000110AAA27BB278093D2019093D301A0938C
:10069000D401B093D5010AE010E08091140A909142
:1006A000150AB8010E94C091CB01AA27BB278093ED
:1006B000E5019093E601A093E701B093E8018091F2
:1006C000010490910204A0910304B0910404BC01C0
:1006D000CD0124E630E040E050E00E9409922093F2
:1006E000F8013093F9014093FA015093FB01809196
:1006F000880190918901AA2797FDA095BA2F809330
:100700000B0290930C02A0930D02B0930E02809105
:100710008C099927AA27BB2780931E0290931F025A
:10072000A0932002B093210280918E099927AA27D5
:10073000BB278093310290933202A0933302B0938F
:10074000340280918F0990919009B8010E94C09164
:10075000CB01AA27BB278093440290934502A09324
:100760004602B09347028091910990919209AA277D
:1007700097FDA095BA2F8093570290935802A093AB
:100780005902B0935A02809107059927AA27BB27DF
:1007900080936A0290936B02A0936C02B0936D02F7
:1007A0008091E1049927AA27BB2780937D0290932B
:1007B0007E02A0937F02B09380028091E204992789
:1007C000AA27BB278093A3029093A402A093A5021B
:1007D000B093A6021F910F9108950024222733277A
:1007E000442751E0BB27EE27FF27A0E1660F771FC4
:1007F000881F991F001C221F331F441F660F771F7D
:10080000881F991F001C221F331F441F2AF4050E46
:100810002B1F3E1F4F1F04C0051A2B0B3E0B4F0B07
:10082000550FBB1FEE1F587F556047FD5250AA95CC
:10083000E9F6E695B7955795E695B7955795852FBF
:100840009B2F08952227332741E0552768E0880F22
:10085000991F221F331F880F991F221F331F1AF45D
:10086000240F351F02C0241B350B440F551F487F32
:10087000456037FD42506A9551F756954795569514
:100880004795842F0895AA2797FF04C080959095D7
:100890008A1F9A1F77FF04C0609570956A1F7A1FA0
:1008A000669F9001779FA001679F300D411D5A1FE1
:1008B000300D411D5A1F889FF001999F2E0F3F1F39
:1008C000401D511D899F300D411D5A1F300D411D86
:1008D0005A1FCA01B901112480CF4FB720E430E07C
:1008E000F8948091C9008F778093C9008091C900E6
:1008F0008F7B8093C9008091C9008F7D8093C90050
:100900005A9A52985B9A539A832F99278093CD00D5
:100910002093CC008091C80082608093C80088E159
:100920008093C9008091CA008F778093CA0080911C
:10093000CA008F7B8093CA008091CA008F7D80930C
:10094000CA008091CA008F7E8093CA008091CA003D
:10095000877F8093CA008091C9008B7F8093C900F4
:100960008091CA0084608093CA008091CA0082602E
:100970008093CA008091C80087FF03C08091CE0099
:10098000F9CF8091C90080688093C9004FBF089556
:100990000F931F93CF93DF93482F4F5F893108F058
:1009A0008BC08091B608841720F44F5F4093B6083F
:1009B0004150CB0183539B4268E170E00E94D49187
:1009C000A42FBB27FD01EA0FFB1FE954F74F8081DD
:1009D00091819B01281B390BC90137FF03C09095FA
:1009E00081959F4F069794F480910704883C30F4DA
:1009F00080910704865F8093070408C088EC809389
:100A0000070480916F008F7D80936F00FD01EA0FD6
:100A1000FB1FE954F74F808191819C01220F331F06
:100A2000280F391F260F371F37FF02C02D5F3F4F9A
:100A3000E901D595C795D595C795CB0101968C173A
:100A40009D0714F4219706C061507040C617D70760
:100A50000CF4219680910704843BD8F08D010A0F95
:100A60001B1FF801E954F74F80819181FE01E81BBB
:100A7000F90BCF0163E070E00E94D491CB01880FA5
:100A8000991F860F971F0551174FF8019183808397
:100A900007C0AA0FBB1FA551B74F11961C921E92FB
:100AA000E42FFF27EE0FFF1FE954F74FD183C083D8
:100AB000443011F410923A01DF91CF911F910F91C0
:100AC0000895CF93DF932091AD0B822F9927807FDC
:100AD0009070409709F06CC02F3109F046C08091AA
:100AE000AE0B80932A052091B00B20932C058091AA
:100AF000B10B80932B05822F99279093B808809390
:100B0000B708222309F054C080918407282F332787
:100B1000220F331FF901E551F74F118210828091A6
:100B20008507A82FBB27AA0FBB1FFD01E551F74F73
:100B30001182108280918707E82FFF27EE0FFF1F99
:100B4000CF018551974FEC01198218822954374FF4
:100B5000E90119821882A954B74F11961C921E926E
:100B6000E954F74F1182108223C0C22FCF70CA30D0
:100B7000F8F48091AE0B8093D90B8091AF0B8093EA
:100B8000D80B8091B00B8093DB0B8091B10B8093DD
:100B9000DA0B6091D80B7091D90B8C2F0E94C8840E
:100BA0006091DA0B7091DB0B8C2F8F5F0E94C884F1
:100BB000DF91CF910895CF93C82F8F3F49F4809153
:100BC0002D058F3F29F410922F0510922E0532C06B
:100BD00020912F05222339F4CF3111F485E001C093
:100BE00084E0809330058091300590912E05821726
:100BF000A0F4892F809580932E058F3F19F48EEFF6
:100C000080932E0580912E05C81711F40E946185EE
:100C100010922F0510922E050BC0E22FFF27E355EF
:100C2000F44FC0832F5F20932F059C0F90932E05C8
:100C3000C0932D05CF91089590912905933240F4EA
:100C4000E92FFF27EB54F44F80839F5F9093290592
:100C50000895833218F48D5F80932905089590E2FA
:100C6000E8EBFBE08FE19193815087FFFCCF089583
:100C7000CF93CFB723E031E0F8948091C9008F770C
:100C80008093C9008091C9008F7B8093C9008091B7
:100C9000C9008F7D8093C9005A9A52985B9A539AE3
:100CA000832F99278093CD002093CC008091C8009A
:100CB00082608093C80088E18093C9008091CA0057
:100CC0008F778093CA008091CA008F7B8093CA007F
:100CD0008091CA0080628093CA008091CA008061BE
:100CE0008093CA008091CA0088608093CA00809176
:100CF000C90084608093C9008091CA008460809399
:100D0000CA008091CA0082608093CA008091C800A6
:100D100087FF03C08091CE00F9CF8091C900806821
:100D20008093C9008091C90080648093C9000E94AB
:100D30002F86CFBFCF910895282F99278F7090705D
:100D4000892B31F4209580912805822B80932805EA
:100D500008951F920F920FB60F9211248F93EF9365
:100D6000FF938091D002882309F068C0E09132059A
:100D7000EE2389F480913105882369F48091B50BC5
:100D8000882321F081E08093330505C08091C9005C
:100D900081608093C90080913305882379F4EF5FE7
:100DA000E093320580918C0B8E1720F481E08093C4
:100DB00033051CC0FF27E457F44F3CC08091310538
:100DC000882361F48091B50B882311F483E003C07C
:100DD000813999F481E0809331050FC0833099F413
:100DE0008091B50B882349F01092B50B8091C90012
:100DF0008E7F8093C9008EEF1EC08091C9008160F4
:100E00008093C9000EC0833261F48091C9008E7F47
:100E10008093C9008FEF8093CE0081E08093D00251
:100E200018C080913105E82FFF27EB54F44F8F5FF6
:100E30008093310580818093CE000BC010923105E4
:100E400010923205109233058091C9008061809321
:100E5000C900FF91EF918F910F900FBE0F901F90DF
:100E60001895682727E0322F67FF06C0862F99273D
:100E7000880F991F832702C0862F880F682F215063
:100E800027FFF2CF992708950F931F93CF93DF93F6
:100E9000062F60E0162F601740F4EC0189910E9444
:100EA0003187682F1F5F1017C8F3862F9927DF91AE
:100EB000CF911F910F910895DC0190E0961758F49F
:100EC0008C91803241F09F5F961728F4FD01E90F65
:100ED000F11D8081F6CF892F99270895A0E0B0E019
:100EE000E4E7F7E80C942D928FE980938D0B80E175
:100EF00080938F0B84EA8093900B85E58093910B10
:100F00008DE58093920B1092930B80913505882389
:100F100009F06AC08091340513E1819FC00111245A
:100F200063E088559E4F0E945C87082F80913405AE
:100F3000819FC00111246AE082569E4F0E945C8707
:100F4000982F800F865F80938C0B4EEFB42EB80ED7
:100F5000B0928E0B209134052093940BE92EFF2440
:100F6000C70133E0880F991F3A95E1F7802B8093F2
:100F7000950B822F992723E1C22ED12C8C9D9001B5
:100F80008D9D300D9C9D300D1124C90182569E4FC0
:100F9000A701BC0186E99BE00E94F58F1127809193
:100FA000340599278C9DE0018D9DD00D9C9DD00D21
:100FB0001124CE0188559E4FA801BC01C7018A5655
:100FC000944F0E94F58F0457144F0E0D1F1D6B2D6B
:100FD0008EE89BE00E944487F80182878091350566
:100FE0008F5F8093350570C01091930B0E94298309
:100FF0004091D1024031C8F563E170E0812F99271B
:10100000DC01AA0FBB1FA80FB91FA457B44F842F30
:101010009927869FF001879FF00D969FF00D112470
:10102000E256FE4F2585C4E0880F991FCA95E1F767
:10103000282BED012887268537853F7982899927D6
:10104000982F88279295990F907E282B392B2987E6
:10105000832F99278A87842F8F5F1F5F163018F49C
:10106000482F803158F28093D10283E0189F90017D
:101070001124822F885F80938C0B825C80938E0B6F
:10108000812F99278C01000F111F080F191F04577A
:10109000144F822F8A5F682F8EE89BE00E9444875E
:1010A000F80180878091D102803170F081E08093D7
:1010B000D10210923505809134058F5F80933405FD
:1010C000803110F010923405E9E0CDB7DEB70C9412
:1010D00049928091D002882309F447C08091CF03C0
:1010E00085FD04C08091D402882381F082E9809339
:1010F000B50B83E28093B60B8091D402882309F468
:1011000085E58093B70B1092D40202C08093B50B93
:101110008091D2028F3071F4809128050E944E7226
:10112000882341F081E98093B50B8093B60B81E36E
:101130008093B70B1092D0028091C80085FFFCCF3E
:101140008091C9008F7E8093C9008091C9008E7FF5
:101150008093C9000E946E878EE78093CE008091B5
:1011600028058093D202109228050895EF92FF92ED
:101170000F931F93CF93DF937C018B01EA01452BE3
:1011800039F0F80181918F01F70109952197C9F78D
:10119000E6E0CDB7DEB70C944C92EF92FF920F933E
:1011A0001F93CF93DF937C018B01EA01452B41F024
:1011B000F8010F5F1F4F8491F70109952197C1F73F
:1011C000E6E0CDB7DEB70C944C920F931F93CF930C
:1011D0008C01C62F161634F480E2F8010995C1502F
:1011E0001C16D4F3CF911F910F9108950F931F9365
:1011F000CF938C01C62F161634F480E3F8010995BD
:10120000C1501C16D4F3CF911F910F910895A5E3FF
:10121000B0E0EDE0F9E80C9424922E96EEADFFAD2F
:101220002E9788249924540180912205882321F443
:101230002C961FAE1EAE2C97AEE44A2E512C4C0EAF
:101240005D1E6F01B60105C0153239F00894C11C4E
:10125000D11CF60114911123B9F7A601461B570BB7
:1012600031F02C968EAD9FAD2C970E94CD88112326
:1012700009F46AC20894C11CD11CFF24FDA6FCA677
:10128000FFEFEF2EF9A6F6010894C11CD11C1491B2
:10129000153721F0812F80628837B1F4F0FE0AC043
:1012A000F20124E030E0420E531E80809180A28043
:1012B000B3800AC0F20142E050E0440E551E808126
:1012C00091814C01AA24BB24103221F489A58823E2
:1012D000D1F61DC0133219F458E0F52AD4CF1A32D2
:1012E00011F01D3291F41A3259F4F20182E090E0CB
:1012F000480E591EE081ECA7EE232CF6E195ECA7F1
:1013000090E1F92AAFEDFA22BECF1B3211F419A7F2
:10131000BACF1E32C1F5F6010894C11CD11C14913C
:101320001A3279F4F20122E030E0420E531E40817D
:1013300051813FEF4F3F530714F44FEF5FEFE42E1F
:10134000A2CF40E050E0812F80538A30A0F4CA0140
:10135000E3E0880F991FEA95E1F7840F951F480F86
:10136000591F410F511D40535040F6010894C11CB4
:10137000D11C1491E8CF8FEF4F3F580714F44FEF73
:101380005FEFE42E85CF103329F4F4FC7CCF90E29C
:10139000F92A79CF812F81538930D8F440E050E089
:1013A000CA0173E0880F991F7A95E1F7840F951FA2
:1013B000480F591F410F511D40535040F6010894EA
:1013C000C11CD11C1491812F80538A3048F34CA743
:1013D0005FCF183619F4A4E0FA2A55CF1C3619F459
:1013E000B1E0FB2A50CF133661F43E010894611C32
:1013F000711CF20122E030E0420E531E808189838D
:101400003CC1143421F0143611F0193651F514345E
:1014100011F431E0F32AF0FE0AC0F20144E050E09A
:10142000440E551E80809180A280B3800CC0F201D2
:1014300082E090E0480E591E808191814C01AA24DF
:1014400097FCA094BA2CB7FE0AC0B094A0949094D4
:101450008094811C911CA11CB11C8DE289A70AE01B
:101460006FC01F3411F01F3631F41F3411F491E0B6
:10147000F92A08E064C0103779F4F201A2E0B0E084
:101480004A0E5B1E808191814C01AA24BB2400E19D
:10149000B0E4FB2A18E753C01337C1F5F20122E08C
:1014A00030E0420E531E608071806114710489F433
:1014B0003E010894611C711C88E289838EE6F30169
:1014C000818385E78B838CE68C838D8389E28E8391
:1014D0001F82E7FC13C08E2D992787FD9095AC01E4
:1014E00060E070E0C3010E94E88F009729F0382E79
:1014F0003618E3140CF0C3C03E2CC1C0F3010190B8
:101500000020E9F731973E2E3618B9C0153511F095
:10151000153731F4153511F4F1E0FF2A0AE00FC058
:10152000183519F0183709F0A0C000E1F3FE07C024
:1015300081149104A104B10411F020E4F22A19A647
:10154000EDA6E7FC02C03FEDF32269E2662E712CA6
:101550006C0E7D1E81149104A104B10421F44DA5EB
:10156000442309F47BC0802F9927AA27BB278EA785
:101570009FA7A8ABB9AB202E332490E0891690E04A
:10158000990691E0A90690E0B90648F0C501B401BA
:101590002EA53FA548A959A90E94E79117C0AFEF12
:1015A0008A169104A104B10449F040F0C401B101CC
:1015B0000E94C0919B014427552708C0882D602FA9
:1015C0000E94B491282F3327442755272AAB3BABE1
:1015D0004CAB5DAB0A3059F48AA9880F880F880F8D
:1015E0009AA9990F890F382D381B832F10C000310D
:1015F00039F48AA98295807F482D481B842F07C023
:101600008AA9880F880F880F582D581B852F90E0C6
:101610002EA53FA548A959A982169306A406B5068A
:1016200008F091E08AA89BA8ACA8BDA88A3010F465
:10163000805D04C0895A183509F48F7DD3018E93DB
:101640003D01992309F099CF083041F4F3FE06C01B
:10165000803321F080E3FD0182933F01CE010196AA
:10166000382E3618F8E23F0E0BC0112309F46CC077
:101670003E010894611C711C198351E0352E19A696
:10168000032D2DA4231827FC222489A5882311F0DB
:101690000F5F02C0F6FC0E5F020DEF2CFF24C701A6
:1016A00080739070892B49F48CA5801B682F2C9631
:1016B0008EAD9FAD2C970E94E58889A5882331F0D7
:1016C00041E050E0BE01675D7F4F0AC0E6FE0EC0FC
:1016D00080E38AA71BA742E050E0BE01665D7F4F12
:1016E0002C968EAD9FAD2C970E94B688C701807353
:1016F0009070809749F48CA5801B682F2C968EAD36
:101700009FAD2C970E94F688622D2C968EAD9FADD2
:101710002C970E94F688832D992787FD9095AC0120
:10172000B3012C968EAD9FAD2C970E94B688E4FE37
:1017300089CD2CA5201B2CA7622F2C968EAD9FAD9A
:101740002C970E94E5887ECDE2E1CB5C0C94409220
:10175000982F8091B40B883A50F48091B40BE82F05
:10176000FF27E556F54F93838F5F8093B40B089561
:10177000982F8091B40B883A58F48091B40BE82FDD
:10178000FF27E556F54F906893838F5F8093B40BE6
:101790000895982F80912305882321F0892F0E9496
:1017A000B88B0895892F0E94A88B0895883A10F469
:1017B0008093B40B089580E090E2EEE9FAE0919313
:1017C0008F5F883AE0F308954FB721E830E0F8944E
:1017D0008091C9008F778093C9008091C9008F7B69
:1017E0008093C9008091C9008F7D8093C9005A9A67
:1017F00052985B9A539A832F99278093CD00209318
:10180000CC008091C80082608093C80088E18093FA
:10181000C9008091CA008F778093CA008091CA0066
:101820008F7B8093CA008091CA008F7D8093CA000D
:101830008091CA008F7E8093CA008091CA00877F02
:101840008093CA008091C90084608093C900809110
:10185000CA0084608093CA008091CA00826080932D
:10186000CA008091C90081608093C9008091C8003E
:1018700087FF03C08091CE00F9CF8091C9008068B6
:101880008093C9004FBF3CE73093170A2DE72093A0
:10189000420A8EE88093180A1092340A1092330A92
:1018A00010921D0A80EE80931A0A30936F0A2093DB
:1018B0009A0A10927B0A10927A0A10927D0A10926C
:1018C0007C0A10927F0A10927E0A84EF91E0909336
:1018D000790A8093780A9093770A8093760A909396
:1018E000750A8093740A1092710A89E88093700ACD
:1018F0001092980A1092990A80E98093720A3093A4
:10190000470B2093720B1092490B8AE88093480B87
:1019100010924F0B10924E0B10924D0B1092510BD8
:101920001092520B1092530B1092540B1092560BB4
:101930001092570B1092580B1092590B10925D0B8E
:1019400010925C0B10925B0B10925A0B80EA809302
:101950004A0B3093430A20936E0A1092450A8DE891
:101960008093440A10926D0A80ED8093460A8BE7BB
:1019700080939B0A80E880939C0A10929D0A809134
:101980001D0A90E2EEE9FAE091938F5F883AE0F366
:101990008DE78093460B0895CF93C82F809136052D
:1019A000803879F48C2F0E947A7480932505809179
:1019B0002505882331F1C093B30B809125058F5FF6
:1019C00016C08F37F1F48091AC0B882329F48C2F4B
:1019D00080958F708093AC0B0E94837380939D0AD7
:1019E0008BE99AE090932705809326058DEA8093F2
:1019F00025058091C9008F7E8093C90082E0809385
:101A00002405C0933605CF910895309124053323E2
:101A100031F08091240581508093240508958091B0
:101A20002505882381F140912505909137054130A6
:101A300091F4292F309337058091C90080618093FC
:101A4000C90080912305882319F03093230510C025
:101A5000409323050DC0E0912605F0912705819163
:101A6000F0932705E0932605282F980F90933705CC
:101A70008091C80085FFFCCF2093CE008091250582
:101A800081508093250508952FB740E0F894E0E059
:101A9000F0E081E2809357009491E2E0F0E08093DF
:101AA00057003491E4E0F0E08093570084912FBF19
:101AB0009E3199F4363941F4893011F441E00DC07A
:101AC0008A3059F442E009C0373939F4863011F4CC
:101AD00043E003C0853009F444E0842F992708953A
:101AE0009FB7F8948091C900877F8093C900809147
:101AF000C9008F7E8093C9008091C9008F77809341
:101B0000C9008091C9008F7B8093C9008091C90072
:101B10008F7D8093C90052985A9A53985B9A9FBFC1
:101B200008951F93CF93DF93182F80912205882368
:101B300009F4A7C08091CF02181709F4A2C08091C0
:101B40002105882321F40E94448D8093210582ED94
:101B500091E0909339018093380189E791E19F9357
:101B60008F93C0E6D5E1DF93CF93E0913B05F091F1
:101B70003C0509950F900F900F900F90812F99279A
:101B8000AA27BB27FC01099778F5E554FF4F209160
:101B90003B0530913C050C945B9285E791E102C0D6
:101BA0008CE691E19F938F93DF93CF93F901099591
:101BB00027C087E691E1F6CF8FE591E1F3CF87E586
:101BC00091E19F938F93DF93CF93F901099588ED6E
:101BD00091E0909339018093380112C082E591E140
:101BE000E1CF86E891E1DECF8CE891E19F938F937E
:101BF000DF93CF93E0913B05F0913C05099510E010
:101C00000F900F900F900F9080912105843011F06C
:101C1000823011F50E94708D812F8150833018F42D
:101C20000E94796F2CC0143019F40E94388627C0A6
:101C3000183019F40E94A08222C0153019F40E94B5
:101C40006D841DC0163019F40E94E48B18C0173043
:101C5000B1F40E94538113C0112389F082EA91E10B
:101C60009F938F9380E695E19F938F93E0913B053F
:101C7000F0913C0509950F900F900F900F901093E5
:101C8000CF02DF91CF911F9108950F931F9381E0B1
:101C9000809322054091CE02E2E0F1E120E030E0C5
:101CA0005FE4849199272F5F3F4F829FB001839F0C
:101CB000700D929F700D112446275150319657FF99
:101CC000F0CF4093CE02EAEDF0E120E030E057E2C1
:101CD000849199272F5F3F4F829FB001839F700DA2
:101CE000929F700D112446275150319657FFF0CF27
:101CF0004093CE0280912105882321F40E94448DD7
:101D0000809321058091CE02833459F088E190E0E0
:101D100029E20FB6F894A895809360000FBE209337
:101D2000600087E099E890933C0580933B050E9412
:101D30004A0984E690E09F938F938AE590E09F9311
:101D40008F931F921F92809101016AE00E94B491CB
:101D5000892F99279F938F93809101010E94B491BD
:101D600099279F938F938DEB91E19F938F9300E63B
:101D700015E11F930F93E0913B05F0913C05099508
:101D800082E091E19F938F931F930F93E0913B0526
:101D9000F0913C0509958AED90E19F938F931F93F5
:101DA0000F93E0913B05F0913C0509950E944A098B
:101DB00083EC8093810080916F00806280936F003C
:101DC0008DB79EB746968DBF1F910F910895809154
:101DD000EA078D3338F080918B0987FD03C08CE3CF
:101DE0008093EA0780919907882331F080558536E2
:101DF00018F08FE780939907089580912205882332
:101E000009F477C080913805815080933805882384
:101E100009F053C089E1809338058091EA078E3339
:101E200038F080918B0987FD03C08DE38093EA072A
:101E300080910704823820F58091D0039091D103DE
:101E4000805D974020F08091160A843620F410922D
:101E50003A05109239058091390590913A0500971D
:101E600039F1019790933A0580933905419728F10C
:101E700080918B0984FF21C08091CE0384601BC0B8
:101E800080910704853BC8F09091EA0784E1989F10
:101E9000C001112440962091390530913A05281748
:101EA000390730F42F5F3F4F30933A0520933905BF
:101EB0008091CE038B7F8093CE039091CF0296309A
:101EC00019F40E94058D0FC08091D302882321F060
:101ED00081508093D30208958BE48093D302943091
:101EE00011F40E9469888091CE02833411F010921F
:101EF000220508951F920F920FB60F9211242F936F
:101F00003F934F935F936F937F938F939F93AF9381
:101F1000BF93EF93FF932091CE008091DE02882340
:101F2000B1F02093C6008091DE028230B9F52F3FD8
:101F3000A9F58FEF94E3ACE0B0E0C297A109B10935
:101F4000B7FFFBCF80917E058093CE0027C0909194
:101F5000CF02892F8150833020F4822F0E94D46FCA
:101F60001DC0943021F4822F0E949C8617C09830A7
:101F700021F4822F0E94A18211C0953021F4822F7A
:101F80000E94DB850BC0963021F4822F0E94CC8CFE
:101F900005C0973019F4822F0E94B081FF91EF9114
:101FA000BF91AF919F918F917F916F915F914F9171
:101FB0003F912F910F900FBE0F901F901895FB012E
:101FC000DC0102C005900D9241505040D8F70895B1
:101FD000FC014150504030F001900616D1F7319786
:101FE000CF010895882799270895FB01DC0102C0DD
:101FF00001900D9241505040D8F70895A0E0B0E014
:10200000E4E0F0E90C942C926C017B01EA015901A7
:1020100021978FEFCF3FD80789F086010894C11C24
:10202000D11CC7010894E11CF11CF5010995F801C8
:1020300080832197FFEFCF3FDF0779F7EAE0CDB745
:10204000DEB70C944892CF92DF92EF92FF920F93FB
:102050001F937C016B01FB010995082FC7010196B5
:10206000F6010995182FC8011F910F91FF90EF906D
:10207000DF90CF900895A0E0B0E0E1E4F0E90C94A7
:102080002E928C017B01EA01690121978FEFCF3FEE
:10209000D80771F0F70121917F01C8010F5F1F4F31
:1020A000622FF60109952197FFEFCF3FDF0791F7E8
:1020B000E8E0CDB7DEB70C944A92CF92DF92EF9270
:1020C000FF920F931F936C018B017A01FA0109951E
:1020D000812F9927682FC6010196F70109951F9155
:1020E0000F91FF90EF90DF90CF9008955058BB274D
:1020F000AA270ED0E0C0D1D030F0D6D020F031F4F5
:102100009F3F11F41EF4C6C00EF4E095E7FBBCC07F
:10211000E92FE2D080F3BA176207730784079507A7
:1021200018F071F49EF5FAC00EF4E0950B2EBA2F5C
:10213000A02D0B01B90190010C01CA01A0011124CD
:10214000FF27591B99F0593F50F4503E68F11A1679
:10215000F040A22F232F342F4427585FF3CF46950A
:1021600037952795A795F0405395C9F77EF41F162C
:10217000BA0B620B730B840BBAF09150A1F0FF0FF6
:10218000BB1F661F771F881FC2F70EC0BA0F621FE2
:10219000731F841F48F4879577956795B795F795D2
:1021A0009E3F08F0B3CF9395880F08F09927EE0F64
:1021B00097958795089598D088F09F5790F0B92FFC
:1021C0009927B751A0F0D1F0660F771F881F991F8C
:1021D0001AF0BA95C9F712C0B13081F09FD0B1E0C2
:1021E00008959CC0672F782F8827B85F39F0B93FD2
:1021F000CCF3869577956795B395D9F73EF490958E
:102200008095709561957F4F8F4F9F4F0895E8940B
:1022100009C097FB3EF490958095709561957F4F2E
:102220008F4F9F4F9923A9F0F92F96E9BB279395DC
:10223000F695879577956795B795F111F8CFFAF4EC
:10224000BB0F11F460FF1BC06F5F7F4F8F4F9F4F1D
:1022500016C0882311F096E911C0772321F09EE87B
:10226000872F762F05C0662371F096E8862F70E0E1
:1022700060E02AF09A95660F771F881FDAF7880FBB
:102280009695879597F9089597F99F6780E870E08C
:1022900060E008959FEF80EC089500240A941616DC
:1022A000170618060906089500240A941216130644
:1022B000140605060895092E0394000C11F48823D2
:1022C00052F0BB0F40F4BF2B11F460FF04C06F5FEE
:1022D0007F4F8F4F9F4F089557FD9058440F551FC4
:1022E00059F05F3F71F04795880F97FB991F61F098
:1022F0009F3F79F087950895121613061406551F0F
:10230000F2CF4695F1DF08C0161617061806991F7A
:10231000F1CF86957105610508940895E894BB276F
:1023200066277727CB0197F90895629FD001739FA5
:10233000F001829FE00DF11D649FE00DF11D929F61
:10234000F00D839FF00D749FF00D659FF00D9927A0
:10235000729FB00DE11DF91F639FB00DE11DF91FC4
:10236000BD01CF0111240895991B79E004C0991F84
:10237000961708F0961B881F7A95C9F780950895DF
:10238000AA1BBB1B51E107C0AA1FBB1FA617B7079B
:1023900010F0A61BB70B881F991F5A95A9F78095B7
:1023A0009095BC01CD01089597FB092E07260AD010
:1023B00077FD04D0E5DF06D000201AF47095619512
:1023C0007F4F0895F6F7909581959F4F0895A1E26C
:1023D0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F9F
:1023E000FF1FA217B307E407F50720F0A21BB30BEA
:1023F000E40BF50B661F771F881F991F1A9469F766
:1024000060957095809590959B01AC01BD01CF01C1
:10241000089597FB092E05260ED057FD04D0D7DF6F
:102420000AD0001C38F450954095309521953F4FC7
:102430004F4F5F4F0895F6F7909580957095619591
:102440007F4F8F4F9F4F08952F923F924F925F92F1
:102450006F927F928F929F92AF92BF92CF92DF92B4
:10246000EF92FF920F931F93CF93DF93CDB7DEB719
:10247000CA1BDB0B0FB6F894DEBF0FBECDBF0994AD
:102480002A88398848885F846E847D848C849B8404
:10249000AA84B984C884DF80EE80FD800C811B8112
:1024A000AA81B981CE0FD11D0FB6F894DEBF0FBE41
:1024B000CDBFED010895EE0FFF1F0590F491E02DC3
:0424C0000994FFCFAD
:1024C4005E0A010164FF010020FFFFC01FC01F015D
:1024D4000101737373FF03007D0000C409C4096420
:1024E40000104E6F726D616C0051756164726F0003
:1024F4000000000000006400D20101200B05000070
:10250400ECFF00020406070808080706040200FEA0
:10251400FCFAF9F8F8F8F9FAFCFE000204060708D8
:10252400086440415A4664640A02969696960840A6
:10253400403A10FB30380132FF03780090D003009A
:1025440090D0030032002064FFFF64200B0A0D0BBF
:102554000C0E0B0F100B11FA2068010101152D3D13
:102564002E4D5F4B2E3D2D00202020010000000049
:1025740000566F6C7461676520202056202001008E
:102584000000000143757272656E742020204120A2
:1025940020010000000001436170616369747920C7
:1025A40020416820010000000002416C74697475C8
:1025B400646520206D2020010000000000436F6D41
:1025C40070617373202020B02020010000000000FF
:1025D400536174732020202020202020200100003B
:1025E400000000537065656420202020206D2F7347
:1025F40001000000000044697374616E636520206B
:102604006D2020010000000000486F6D652D4469B5
:10261400722020B020200100000000006D61782E9F
:1026240054656D702E20B043200100000000004D61
:1026340061676E2E6669656C6425202001000000C8
:102644000000566172696F20202020202020200184
:1026540000000000004572726F72436F64652020B1
:1026640020200100000000006672656920202020FF
:1026740020202020200100000000036672656920EC
:10268400202020202020202001000000000370FFD3
:0426940001010F64CD
:00000001FF
/branches/v0.90d_Ernstl_8-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_8-Motoren+Sexpander/Settings.h
--- Spektrum.c (nonexistent)
+++ Spektrum.c (revision 2306)
@@ -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_8-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_8-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/ccj2dLhS.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccj2dLhS.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccj2dLhS.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccj2dLhS.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccj2dLhS.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccj2dLhS.s:15 .bss:00000000 s_exparity
C:\Temp/ccj2dLhS.s:21 .bss:00000001 s_excnt
C:\Temp/ccj2dLhS.s:27 .bss:00000002 SpektrumTimer
C:\Temp/ccj2dLhS.s:32 .text:00000000 s_update
C:\Temp/ccj2dLhS.s:99 .text:00000074 SpektrumUartInit
.bss:00000003 Sync.0
C:\Temp/ccj2dLhS.s:170 .bss:00000004 FrameCnt.1
C:\Temp/ccj2dLhS.s:171 .bss:00000005 ByteHigh.2
C:\Temp/ccj2dLhS.s:176 .data:00000000 ReSync.3
C:\Temp/ccj2dLhS.s:172 .bss:00000006 Frame2.4
C:\Temp/ccj2dLhS.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_8-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_8-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_8-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/ccfnqwMw.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccfnqwMw.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccfnqwMw.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccfnqwMw.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccfnqwMw.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccfnqwMw.s:14 .data:00000000 AdReady
C:\Temp/ccfnqwMw.s:19 .data:00000001 AnalogOffsetGier
C:\Temp/ccfnqwMw.s:24 .data:00000002 AnalogOffsetRoll
C:\Temp/ccfnqwMw.s:29 .data:00000003 AnalogOffsetNick
C:\Temp/ccfnqwMw.s:36 .bss:00000000 ZaehlMessungen
C:\Temp/ccfnqwMw.s:42 .bss:00000002 VarioMeter
C:\Temp/ccfnqwMw.s:48 .bss:00000004 ExpandBaro
C:\Temp/ccfnqwMw.s:54 .data:00000004 MessLuftdruck
C:\Temp/ccfnqwMw.s:61 .bss:00000005 SummenHoehe
C:\Temp/ccfnqwMw.s:67 .data:00000006 Luftdruck
C:\Temp/ccfnqwMw.s:74 .bss:00000009 AdWertAccHoch
C:\Temp/ccfnqwMw.s:80 .bss:0000000b AdWertAccNick
C:\Temp/ccfnqwMw.s:86 .bss:0000000d AdWertAccRoll
C:\Temp/ccfnqwMw.s:92 .bss:0000000f AdWertGier
C:\Temp/ccfnqwMw.s:98 .bss:00000011 AdWertRoll
C:\Temp/ccfnqwMw.s:104 .bss:00000013 AdWertNick
C:\Temp/ccfnqwMw.s:110 .data:0000000a HiResRoll
C:\Temp/ccfnqwMw.s:115 .data:0000000c HiResNick
C:\Temp/ccfnqwMw.s:122 .bss:00000015 AdWertGierFilter
C:\Temp/ccfnqwMw.s:128 .bss:00000017 AdWertRollFilter
C:\Temp/ccfnqwMw.s:134 .bss:00000019 AdWertNickFilter
C:\Temp/ccfnqwMw.s:140 .data:0000000e UBat
C:\Temp/ccfnqwMw.s:145 .text:00000000 ADC_Init
C:\Temp/ccfnqwMw.s:159 .progmem.data:00000000 __c.13
C:\Temp/ccfnqwMw.s:163 .progmem.data:00000002 __c.14
C:\Temp/ccfnqwMw.s:168 .text:0000000c SucheLuftruckOffset
*COM*:00000001 DruckOffsetSetting
C:\Temp/ccfnqwMw.s:295 .progmem.data:00000004 __c.12
C:\Temp/ccfnqwMw.s:300 .text:00000110 SucheGyroOffset
.bss:0000001b kanal.0
C:\Temp/ccfnqwMw.s:503 .bss:0000001c state.1
C:\Temp/ccfnqwMw.s:504 .bss:0000001d subcount.2
C:\Temp/ccfnqwMw.s:505 .bss:0000001e gier1.3
C:\Temp/ccfnqwMw.s:506 .bss:00000020 roll1.4
C:\Temp/ccfnqwMw.s:507 .bss:00000022 nick1.5
C:\Temp/ccfnqwMw.s:508 .bss:00000024 nick_filter.6
C:\Temp/ccfnqwMw.s:509 .bss:00000026 roll_filter.7
C:\Temp/ccfnqwMw.s:510 .bss:00000028 accy.8
C:\Temp/ccfnqwMw.s:511 .bss:0000002a accx.9
C:\Temp/ccfnqwMw.s:512 .bss:0000002c tmpLuftdruck.10
C:\Temp/ccfnqwMw.s:513 .bss:00000030 messanzahl_Druck.11
C:\Temp/ccfnqwMw.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_8-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_8-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_8-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/ccPQ1Vdc.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccPQ1Vdc.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccPQ1Vdc.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccPQ1Vdc.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccPQ1Vdc.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccPQ1Vdc.s:15 .bss:00000000 update_timer
C:\Temp/ccPQ1Vdc.s:20 .text:00000000 Capacity_Init
*COM*:00000007 Capacity
.bss:00000002 SubCounter.0
C:\Temp/ccPQ1Vdc.s:40 .bss:00000004 CurrentOffset.1
C:\Temp/ccPQ1Vdc.s:41 .bss:00000006 SumCurrentOffset.2
C:\Temp/ccPQ1Vdc.s:45 .text:0000002e Capacity_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SetDelay
CheckDelay
Motor
UBat
__udivmodhi4
/branches/v0.90d_Ernstl_8-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_8-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_8-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/cc8PF5lc.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc8PF5lc.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc8PF5lc.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc8PF5lc.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc8PF5lc.s:7 *ABS*:00000001 __zero_reg__
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_8-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_8-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_8-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/ccjTvSwY.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccjTvSwY.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccjTvSwY.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccjTvSwY.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccjTvSwY.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccjTvSwY.s:12 .text:00000000 eeprom_read_byte
C:\Temp/ccjTvSwY.s:34 .text:00000010 eeprom_write_byte
C:\Temp/ccjTvSwY.s:60 .text:00000028 RAM_Checksum
C:\Temp/ccjTvSwY.s:88 .text:0000004a EEProm_Checksum
C:\Temp/ccjTvSwY.s:128 .text:0000007a ParamSet_DefaultStickMapping
*COM*:0000007d EE_Parameter
C:\Temp/ccjTvSwY.s:162 .text:000000c4 CommonDefaults
C:\Temp/ccjTvSwY.s:320 .text:000002a4 ParamSet_DefaultSet1
C:\Temp/ccjTvSwY.s:368 .text:0000030e ParamSet_DefaultSet2
C:\Temp/ccjTvSwY.s:416 .text:00000378 ParamSet_DefaultSet3
C:\Temp/ccjTvSwY.s:459 .text:000003e0 GetParamByte
C:\Temp/ccjTvSwY.s:482 .text:000003f0 SetParamByte
C:\Temp/ccjTvSwY.s:508 .text:00000408 GetParamWord
C:\Temp/ccjTvSwY.s:521 .text:00000412 SetParamWord
C:\Temp/ccjTvSwY.s:534 .text:0000041c ParamSet_ReadFromEEProm
C:\Temp/ccjTvSwY.s:639 .text:000004c6 SetActiveParamSet
C:\Temp/ccjTvSwY.s:676 .text:000004f2 ParamSet_WriteToEEProm
C:\Temp/ccjTvSwY.s:774 .text:000005aa MixerTable_ReadFromEEProm
*COM*:0000004e Mixer
C:\Temp/ccjTvSwY.s:848 .text:00000612 MixerTable_WriteToEEProm
C:\Temp/ccjTvSwY.s:893 .text:0000064a MixerTable_Default
C:\Temp/ccjTvSwY.s:955 .text:000006d8 GetActiveParamSet
C:\Temp/ccjTvSwY.s:1005 .text:00000712 SetDefaultParameter
C:\Temp/ccjTvSwY.s:1088 .progmem.data:00000000 __c.0
C:\Temp/ccjTvSwY.s:1092 .progmem.data:00000026 __c.1
C:\Temp/ccjTvSwY.s:1096 .progmem.data:0000003f __c.2
C:\Temp/ccjTvSwY.s:1100 .progmem.data:00000060 __c.3
C:\Temp/ccjTvSwY.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_8-Motoren+Sexpander/fc.c
0,0 → 1,1940
/*#######################################################################################
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] = (signed int) AdNeutralGier - AdWertGier;
DebugOut.Analog[5] = HoehenWert/5;
DebugOut.Analog[6] = AdWertAccHoch;//(Mess_Integral_Hoch / 512);// Aktuell_az;
DebugOut.Analog[7] = UBat;
DebugOut.Analog[8] = Motor[0].SetPoint;
DebugOut.Analog[9] = Motor[1].SetPoint;
DebugOut.Analog[10] = Motor[2].SetPoint;
DebugOut.Analog[11] = Motor[3].SetPoint;
DebugOut.Analog[12] = Motor[4].SetPoint;
DebugOut.Analog[13] = Motor[5].SetPoint;
DebugOut.Analog[14] = Motor[6].SetPoint;
DebugOut.Analog[15] = Motor[7].SetPoint;
DebugOut.Analog[16] = SenderOkay;
DebugOut.Analog[17] = ErsatzKompass / GIER_GRAD_FAKTOR;
DebugOut.Analog[18] = Capacity.ActualCurrent;
DebugOut.Analog[19] = Capacity.UsedCapacity;
DebugOut.Analog[20] = ServoNickValue;
DebugOut.Analog[21] = KompassValue;
DebugOut.Analog[22] = 0;
DebugOut.Analog[23] = Capacity.MinOfMaxPWM;
DebugOut.Analog[24] = GPS_Nick;
DebugOut.Analog[25] = 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_8-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_8-Motoren+Sexpander/fc.lst
0,0 → 1,10990
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,AdNeutralGier
769 00a4 9091 0000 lds r25,(AdNeutralGier)+1
770 00a8 2091 0000 lds r18,AdWertGier
771 00ac 3091 0000 lds r19,(AdWertGier)+1
772 00b0 821B sub r24,r18
773 00b2 930B sbc r25,r19
774 00b4 9093 0000 sts (DebugOut+10)+1,r25
775 00b8 8093 0000 sts DebugOut+10,r24
776 00bc 8091 0000 lds r24,HoehenWert
777 00c0 9091 0000 lds r25,(HoehenWert)+1
778 00c4 A091 0000 lds r26,(HoehenWert)+2
779 00c8 B091 0000 lds r27,(HoehenWert)+3
780 00cc BC01 movw r22,r24
781 00ce CD01 movw r24,r26
782 00d0 25E0 ldi r18,lo8(5)
783 00d2 30E0 ldi r19,hi8(5)
784 00d4 40E0 ldi r20,hlo8(5)
785 00d6 50E0 ldi r21,hhi8(5)
786 00d8 0E94 0000 call __divmodsi4
787 00dc 3093 0000 sts (DebugOut+12)+1,r19
788 00e0 2093 0000 sts DebugOut+12,r18
789 00e4 8091 0000 lds r24,AdWertAccHoch
790 00e8 9091 0000 lds r25,(AdWertAccHoch)+1
791 00ec 9093 0000 sts (DebugOut+14)+1,r25
792 00f0 8093 0000 sts DebugOut+14,r24
793 00f4 8091 0000 lds r24,UBat
794 00f8 9091 0000 lds r25,(UBat)+1
795 00fc 9093 0000 sts (DebugOut+16)+1,r25
796 0100 8093 0000 sts DebugOut+16,r24
797 0104 8091 0000 lds r24,Motor+1
798 0108 9927 clr r25
799 010a 9093 0000 sts (DebugOut+18)+1,r25
800 010e 8093 0000 sts DebugOut+18,r24
801 0112 8091 0000 lds r24,Motor+9
802 0116 9927 clr r25
803 0118 9093 0000 sts (DebugOut+20)+1,r25
804 011c 8093 0000 sts DebugOut+20,r24
805 0120 8091 0000 lds r24,Motor+17
806 0124 9927 clr r25
807 0126 9093 0000 sts (DebugOut+22)+1,r25
808 012a 8093 0000 sts DebugOut+22,r24
809 012e 8091 0000 lds r24,Motor+25
810 0132 9927 clr r25
811 0134 9093 0000 sts (DebugOut+24)+1,r25
812 0138 8093 0000 sts DebugOut+24,r24
813 013c 8091 0000 lds r24,Motor+33
814 0140 9927 clr r25
815 0142 9093 0000 sts (DebugOut+26)+1,r25
816 0146 8093 0000 sts DebugOut+26,r24
817 014a 8091 0000 lds r24,Motor+41
818 014e 9927 clr r25
819 0150 9093 0000 sts (DebugOut+28)+1,r25
820 0154 8093 0000 sts DebugOut+28,r24
821 0158 8091 0000 lds r24,Motor+49
822 015c 9927 clr r25
823 015e 9093 0000 sts (DebugOut+30)+1,r25
824 0162 8093 0000 sts DebugOut+30,r24
825 0166 8091 0000 lds r24,Motor+57
826 016a 9927 clr r25
827 016c 9093 0000 sts (DebugOut+32)+1,r25
828 0170 8093 0000 sts DebugOut+32,r24
829 0174 8091 0000 lds r24,SenderOkay
830 0178 9927 clr r25
831 017a 9093 0000 sts (DebugOut+34)+1,r25
832 017e 8093 0000 sts DebugOut+34,r24
833 0182 8091 0000 lds r24,ErsatzKompass
834 0186 9091 0000 lds r25,(ErsatzKompass)+1
835 018a A091 0000 lds r26,(ErsatzKompass)+2
836 018e B091 0000 lds r27,(ErsatzKompass)+3
837 0192 2091 0000 lds r18,GIER_GRAD_FAKTOR
838 0196 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
839 019a 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
840 019e 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
841 01a2 BC01 movw r22,r24
842 01a4 CD01 movw r24,r26
843 01a6 0E94 0000 call __divmodsi4
844 01aa 3093 0000 sts (DebugOut+36)+1,r19
845 01ae 2093 0000 sts DebugOut+36,r18
846 01b2 8091 0000 lds r24,Capacity
847 01b6 9091 0000 lds r25,(Capacity)+1
848 01ba 9093 0000 sts (DebugOut+38)+1,r25
849 01be 8093 0000 sts DebugOut+38,r24
850 01c2 8091 0000 lds r24,Capacity+4
851 01c6 9091 0000 lds r25,(Capacity+4)+1
852 01ca 9093 0000 sts (DebugOut+40)+1,r25
853 01ce 8093 0000 sts DebugOut+40,r24
854 01d2 8091 0000 lds r24,ServoNickValue
855 01d6 9091 0000 lds r25,(ServoNickValue)+1
856 01da 9093 0000 sts (DebugOut+42)+1,r25
857 01de 8093 0000 sts DebugOut+42,r24
858 01e2 8091 0000 lds r24,KompassValue
859 01e6 9091 0000 lds r25,(KompassValue)+1
860 01ea 9093 0000 sts (DebugOut+44)+1,r25
861 01ee 8093 0000 sts DebugOut+44,r24
862 01f2 1092 0000 sts (DebugOut+46)+1,__zero_reg__
863 01f6 1092 0000 sts DebugOut+46,__zero_reg__
864 01fa 8091 0000 lds r24,Capacity+6
865 01fe 9927 clr r25
866 0200 9093 0000 sts (DebugOut+48)+1,r25
867 0204 8093 0000 sts DebugOut+48,r24
868 0208 8091 0000 lds r24,GPS_Nick
869 020c 9091 0000 lds r25,(GPS_Nick)+1
870 0210 9093 0000 sts (DebugOut+50)+1,r25
871 0214 8093 0000 sts DebugOut+50,r24
872 0218 8091 0000 lds r24,GPS_Roll
873 021c 9091 0000 lds r25,(GPS_Roll)+1
874 0220 9093 0000 sts (DebugOut+52)+1,r25
875 0224 8093 0000 sts DebugOut+52,r24
876 0228 8091 0000 lds r24,VersionInfo+5
877 022c 8823 tst r24
878 022e 01F4 brne .L5
879 0230 8091 0000 lds r24,VersionInfo+6
880 0234 8823 tst r24
881 0236 01F0 breq .L4
882 .L5:
883 0238 8091 0000 lds r24,DebugOut+1
884 023c 8160 ori r24,lo8(1)
885 023e 00C0 rjmp .L7
886 .L4:
887 0240 8091 0000 lds r24,DebugOut+1
888 0244 8E7F andi r24,lo8(-2)
889 .L7:
890 0246 8093 0000 sts DebugOut+1,r24
891 /* epilogue: frame size=0 */
892 024a 1F91 pop r17
893 024c 0F91 pop r16
894 024e FF90 pop r15
895 0250 EF90 pop r14
896 0252 0895 ret
897 /* epilogue end (size=5) */
898 /* function CopyDebugValues size 300 (291) */
900 .global Piep
902 Piep:
903 /* prologue: frame size=0 */
904 0254 EF92 push r14
905 0256 FF92 push r15
906 0258 1F93 push r17
907 025a CF93 push r28
908 025c DF93 push r29
909 /* prologue end (size=5) */
910 025e 182F mov r17,r24
911 0260 7B01 movw r14,r22
912 0262 8091 0000 lds r24,MotorenEin
913 0266 8823 tst r24
914 0268 01F4 brne .L8
915 026a 8091 0000 lds r24,PlatinenVersion
916 026e 8C30 cpi r24,lo8(12)
917 0270 00F0 brlo .L11
918 0272 8631 cpi r24,lo8(22)
919 0274 01F4 brne .L10
920 .L11:
921 0276 2998 cbi 37-0x20,1
922 0278 00C0 rjmp .L12
923 .L10:
924 027a 299A sbi 37-0x20,1
925 .L12:
926 027c 1150 subi r17,lo8(-(-1))
927 027e 1F3F cpi r17,lo8(-1)
928 0280 01F0 breq .L26
929 0282 F092 0000 sts (beeptime)+1,r15
930 0286 E092 0000 sts beeptime,r14
931 028a E701 movw r28,r14
932 .L34:
933 028c 8091 0000 lds r24,beeptime
934 0290 9091 0000 lds r25,(beeptime)+1
935 0294 892B or r24,r25
936 0296 01F4 brne .L31
937 0298 2097 sbiw r28,0
938 029a 01F0 breq .L12
939 .L31:
940 029c 8091 0000 lds r24,UpdateMotor
941 02a0 8823 tst r24
942 02a2 01F0 breq .L34
943 02a4 1092 0000 sts UpdateMotor,__zero_reg__
944 02a8 8091 0000 lds r24,beeptime
945 02ac 9091 0000 lds r25,(beeptime)+1
946 02b0 892B or r24,r25
947 02b2 01F4 brne .L19
948 02b4 2197 sbiw r28,1
949 .L19:
950 02b6 0E94 0000 call LIBFC_Polling
951 02ba 00C0 rjmp .L34
952 .L26:
953 02bc 8091 0000 lds r24,PlatinenVersion
954 02c0 8C30 cpi r24,lo8(12)
955 02c2 00F0 brlo .L23
956 02c4 8631 cpi r24,lo8(22)
957 02c6 01F4 brne .L22
958 .L23:
959 02c8 299A sbi 37-0x20,1
960 02ca 00C0 rjmp .L8
961 .L22:
962 02cc 2998 cbi 37-0x20,1
963 .L8:
964 /* epilogue: frame size=0 */
965 02ce DF91 pop r29
966 02d0 CF91 pop r28
967 02d2 1F91 pop r17
968 02d4 FF90 pop r15
969 02d6 EF90 pop r14
970 02d8 0895 ret
971 /* epilogue end (size=6) */
972 /* function Piep size 67 (56) */
974 .global CalibrierMittelwert
976 CalibrierMittelwert:
977 /* prologue: frame size=0 */
978 02da CF93 push r28
979 02dc DF93 push r29
980 /* prologue end (size=2) */
981 02de 8091 0000 lds r24,PlatinenVersion
982 02e2 8D30 cpi r24,lo8(13)
983 02e4 01F4 brne .L36
984 02e6 0E94 0000 call SucheGyroOffset
985 .L36:
986 02ea 1092 7A00 sts 122,__zero_reg__
987 02ee 8091 0000 lds r24,AdWertNick
988 02f2 9091 0000 lds r25,(AdWertNick)+1
989 02f6 9093 0000 sts (MesswertNick)+1,r25
990 02fa 8093 0000 sts MesswertNick,r24
991 02fe 8091 0000 lds r24,AdWertRoll
992 0302 9091 0000 lds r25,(AdWertRoll)+1
993 0306 9093 0000 sts (MesswertRoll)+1,r25
994 030a 8093 0000 sts MesswertRoll,r24
995 030e 8091 0000 lds r24,AdWertGier
996 0312 9091 0000 lds r25,(AdWertGier)+1
997 0316 9093 0000 sts (MesswertGier)+1,r25
998 031a 8093 0000 sts MesswertGier,r24
999 031e 2091 0000 lds r18,AdWertAccNick
1000 0322 3091 0000 lds r19,(AdWertAccNick)+1
1001 0326 C901 movw r24,r18
1002 0328 880F lsl r24
1003 032a 991F rol r25
1004 032c 880F lsl r24
1005 032e 991F rol r25
1006 0330 820F add r24,r18
1007 0332 931F adc r25,r19
1008 0334 820F add r24,r18
1009 0336 931F adc r25,r19
1010 0338 9093 0000 sts (Mittelwert_AccNick)+1,r25
1011 033c 8093 0000 sts Mittelwert_AccNick,r24
1012 0340 2091 0000 lds r18,AdWertAccRoll
1013 0344 3091 0000 lds r19,(AdWertAccRoll)+1
1014 0348 C901 movw r24,r18
1015 034a 880F lsl r24
1016 034c 991F rol r25
1017 034e 880F lsl r24
1018 0350 991F rol r25
1019 0352 820F add r24,r18
1020 0354 931F adc r25,r19
1021 0356 820F add r24,r18
1022 0358 931F adc r25,r19
1023 035a 9093 0000 sts (Mittelwert_AccRoll)+1,r25
1024 035e 8093 0000 sts Mittelwert_AccRoll,r24
1025 0362 8FEC ldi r24,lo8(-49)
1026 0364 8093 7A00 sts 122,r24
1027 0368 A0E0 ldi r26,lo8(Poti)
1028 036a B0E0 ldi r27,hi8(Poti)
1029 036c C0E0 ldi r28,lo8(EE_Parameter+5)
1030 036e D0E0 ldi r29,hi8(EE_Parameter+5)
1031 0370 97E0 ldi r25,lo8(7)
1032 .L46:
1033 0372 8991 ld r24,Y+
1034 0374 E82F mov r30,r24
1035 0376 FF27 clr r31
1036 0378 EE0F add r30,r30
1037 037a FF1F adc r31,r31
1038 037c E050 subi r30,lo8(-(PPM_in))
1039 037e F040 sbci r31,hi8(-(PPM_in))
1040 0380 0190 ld __tmp_reg__,Z+
1041 0382 F081 ld r31,Z
1042 0384 E02D mov r30,__tmp_reg__
1043 0386 E158 subi r30,lo8(-(127))
1044 0388 FF4F sbci r31,hi8(-(127))
1045 038a 1E16 cp __zero_reg__,r30
1046 038c 1F06 cpc __zero_reg__,r31
1047 038e 04F0 brlt .L40
1048 0390 E0E0 ldi r30,lo8(0)
1049 0392 F0E0 ldi r31,hi8(0)
1050 0394 00C0 rjmp .L41
1051 .L40:
1052 0396 EF3F cpi r30,255
1053 0398 F105 cpc r31,__zero_reg__
1054 039a 04F0 brlt .L41
1055 039c EFEF ldi r30,lo8(255)
1056 039e F0E0 ldi r31,hi8(255)
1057 .L41:
1058 03a0 8C91 ld r24,X
1059 03a2 282F mov r18,r24
1060 03a4 3327 clr r19
1061 03a6 E217 cp r30,r18
1062 03a8 F307 cpc r31,r19
1063 03aa 04F4 brge .L43
1064 03ac 8150 subi r24,lo8(-(-1))
1065 03ae 00C0 rjmp .L49
1066 .L43:
1067 03b0 2E17 cp r18,r30
1068 03b2 3F07 cpc r19,r31
1069 03b4 04F4 brge .L39
1070 03b6 8F5F subi r24,lo8(-(1))
1071 .L49:
1072 03b8 8C93 st X,r24
1073 .L39:
1074 03ba 9150 subi r25,lo8(-(-1))
1075 03bc 1196 adiw r26,1
1076 03be 97FF sbrs r25,7
1077 03c0 00C0 rjmp .L46
1078 03c2 8091 0000 lds r24,EE_Parameter+65
1079 03c6 9927 clr r25
1080 03c8 AA27 clr r26
1081 03ca BB27 clr r27
1082 03cc BC01 movw r22,r24
1083 03ce CD01 movw r24,r26
1084 03d0 24EC ldi r18,lo8(2500)
1085 03d2 39E0 ldi r19,hi8(2500)
1086 03d4 40E0 ldi r20,hlo8(2500)
1087 03d6 50E0 ldi r21,hhi8(2500)
1088 03d8 0E94 0000 call __mulsi3
1089 03dc DC01 movw r26,r24
1090 03de CB01 movw r24,r22
1091 03e0 8093 0000 sts Umschlag180Nick,r24
1092 03e4 9093 0000 sts (Umschlag180Nick)+1,r25
1093 03e8 A093 0000 sts (Umschlag180Nick)+2,r26
1094 03ec B093 0000 sts (Umschlag180Nick)+3,r27
1095 03f0 8091 0000 lds r24,EE_Parameter+66
1096 03f4 9927 clr r25
1097 03f6 AA27 clr r26
1098 03f8 BB27 clr r27
1099 03fa BC01 movw r22,r24
1100 03fc CD01 movw r24,r26
1101 03fe 0E94 0000 call __mulsi3
1102 0402 DC01 movw r26,r24
1103 0404 CB01 movw r24,r22
1104 0406 8093 0000 sts Umschlag180Roll,r24
1105 040a 9093 0000 sts (Umschlag180Roll)+1,r25
1106 040e A093 0000 sts (Umschlag180Roll)+2,r26
1107 0412 B093 0000 sts (Umschlag180Roll)+3,r27
1108 /* epilogue: frame size=0 */
1109 0416 DF91 pop r29
1110 0418 CF91 pop r28
1111 041a 0895 ret
1112 /* epilogue end (size=3) */
1113 /* function CalibrierMittelwert size 161 (156) */
1115 .section .progmem.data,"a",@progbits
1118 __c.35:
1119 0000 0A0D 4143 .string "\n\rACC not calibrated!\r\n"
1119 4320 6E6F
1119 7420 6361
1119 6C69 6272
1119 6174 6564
1120 .text
1121 .global SetNeutral
1123 SetNeutral:
1124 /* prologue: frame size=0 */
1125 041c A0E0 ldi r26,lo8(0)
1126 041e B0E0 ldi r27,hi8(0)
1127 0420 E0E0 ldi r30,pm_lo8(1f)
1128 0422 F0E0 ldi r31,pm_hi8(1f)
1129 0424 0C94 0000 jmp __prologue_saves__+12
1130 1:
1131 /* prologue end (size=6) */
1132 0428 882E mov r8,r24
1133 042a C0E0 ldi r28,lo8(0)
1134 042c D0E0 ldi r29,hi8(0)
1135 042e 7E01 movw r14,r28
1136 0430 6E01 movw r12,r28
1137 0432 1092 0000 sts VersionInfo+5,__zero_reg__
1138 0436 D093 0000 sts (NeutralAccX)+1,r29
1139 043a C093 0000 sts NeutralAccX,r28
1140 043e D093 0000 sts (NeutralAccY)+1,r29
1141 0442 C093 0000 sts NeutralAccY,r28
1142 0446 D093 0000 sts (NeutralAccZ)+1,r29
1143 044a C093 0000 sts NeutralAccZ,r28
1144 044e D093 0000 sts (AdNeutralNick)+1,r29
1145 0452 C093 0000 sts AdNeutralNick,r28
1146 0456 D093 0000 sts (AdNeutralRoll)+1,r29
1147 045a C093 0000 sts AdNeutralRoll,r28
1148 045e D093 0000 sts (AdNeutralGier)+1,r29
1149 0462 C093 0000 sts AdNeutralGier,r28
1150 0466 1092 0000 sts Parameter_AchsKopplung1,__zero_reg__
1151 046a 1092 0000 sts Parameter_AchsKopplung2,__zero_reg__
1152 046e 1092 0000 sts ExpandBaro,__zero_reg__
1153 0472 0E94 0000 call CalibrierMittelwert
1154 0476 84E6 ldi r24,lo8(100)
1155 0478 90E0 ldi r25,hi8(100)
1156 047a 0E94 0000 call Delay_ms_Mess
1157 047e 0E94 0000 call CalibrierMittelwert
1158 0482 8091 0000 lds r24,EE_Parameter+13
1159 0486 80FF sbrs r24,0
1160 0488 00C0 rjmp .L51
1161 048a 8091 0000 lds r24,MessLuftdruck
1162 048e 9091 0000 lds r25,(MessLuftdruck)+1
1163 0492 875B subi r24,lo8(951)
1164 0494 9340 sbci r25,hi8(951)
1165 0496 00F4 brsh .L53
1166 0498 8091 0000 lds r24,MessLuftdruck
1167 049c 9091 0000 lds r25,(MessLuftdruck)+1
1168 04a0 8E5E subi r24,lo8(750)
1169 04a2 9240 sbci r25,hi8(750)
1170 04a4 00F4 brsh .L51
1171 .L53:
1172 04a6 0E94 0000 call SucheLuftruckOffset
1173 .L51:
1174 04aa 0FE1 ldi r16,lo8(31)
1175 .L57:
1176 04ac 8AE0 ldi r24,lo8(10)
1177 04ae 90E0 ldi r25,hi8(10)
1178 04b0 0E94 0000 call Delay_ms_Mess
1179 04b4 8091 0000 lds r24,AdWertGier
1180 04b8 9091 0000 lds r25,(AdWertGier)+1
1181 04bc C80F add r28,r24
1182 04be D91F adc r29,r25
1183 04c0 8091 0000 lds r24,AdWertNick
1184 04c4 9091 0000 lds r25,(AdWertNick)+1
1185 04c8 E80E add r14,r24
1186 04ca F91E adc r15,r25
1187 04cc 8091 0000 lds r24,AdWertRoll
1188 04d0 9091 0000 lds r25,(AdWertRoll)+1
1189 04d4 C80E add r12,r24
1190 04d6 D91E adc r13,r25
1191 04d8 0150 subi r16,lo8(-(-1))
1192 04da 07FF sbrs r16,7
1193 04dc 00C0 rjmp .L57
1194 04de 9701 movw r18,r14
1195 04e0 205F subi r18,lo8(-(16))
1196 04e2 3F4F sbci r19,hi8(-(16))
1197 04e4 3695 lsr r19
1198 04e6 2795 ror r18
1199 04e8 3695 lsr r19
1200 04ea 2795 ror r18
1201 04ec 3093 0000 sts (AdNeutralNick)+1,r19
1202 04f0 2093 0000 sts AdNeutralNick,r18
1203 04f4 C601 movw r24,r12
1204 04f6 4096 adiw r24,16
1205 04f8 9695 lsr r25
1206 04fa 8795 ror r24
1207 04fc 9695 lsr r25
1208 04fe 8795 ror r24
1209 0500 9093 0000 sts (AdNeutralRoll)+1,r25
1210 0504 8093 0000 sts AdNeutralRoll,r24
1211 0508 6096 adiw r28,16
1212 050a F5E0 ldi r31,5
1213 050c D695 1: lsr r29
1214 050e C795 ror r28
1215 0510 FA95 dec r31
1216 0512 01F4 brne 1b
1217 0514 D093 0000 sts (AdNeutralGier)+1,r29
1218 0518 C093 0000 sts AdNeutralGier,r28
1219 051c 9093 0000 sts (StartNeutralRoll)+1,r25
1220 0520 8093 0000 sts StartNeutralRoll,r24
1221 0524 3093 0000 sts (StartNeutralNick)+1,r19
1222 0528 2093 0000 sts StartNeutralNick,r18
1223 052c 8820 tst r8
1224 052e 01F4 brne .+2
1225 0530 00C0 rjmp .L58
1226 0532 8091 0000 lds r24,Mittelwert_AccNick
1227 0536 9091 0000 lds r25,(Mittelwert_AccNick)+1
1228 053a 97FF sbrs r25,7
1229 053c 00C0 rjmp .L59
1230 053e 9095 com r25
1231 0540 8195 neg r24
1232 0542 9F4F sbci r25,lo8(-1)
1233 .L59:
1234 0544 6CE0 ldi r22,lo8(12)
1235 0546 70E0 ldi r23,hi8(12)
1236 0548 0E94 0000 call __divmodhi4
1237 054c 9B01 movw r18,r22
1238 054e 7093 0000 sts (NeutralAccX)+1,r23
1239 0552 6093 0000 sts NeutralAccX,r22
1240 0556 8091 0000 lds r24,Mittelwert_AccRoll
1241 055a 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1242 055e 97FF sbrs r25,7
1243 0560 00C0 rjmp .L60
1244 0562 9095 com r25
1245 0564 8195 neg r24
1246 0566 9F4F sbci r25,lo8(-1)
1247 .L60:
1248 0568 6CE0 ldi r22,lo8(12)
1249 056a 70E0 ldi r23,hi8(12)
1250 056c 0E94 0000 call __divmodhi4
1251 0570 7093 0000 sts (NeutralAccY)+1,r23
1252 0574 6093 0000 sts NeutralAccY,r22
1253 0578 8091 0000 lds r24,Aktuell_az
1254 057c 9091 0000 lds r25,(Aktuell_az)+1
1255 0580 9093 0000 sts (NeutralAccZ)+1,r25
1256 0584 8093 0000 sts NeutralAccZ,r24
1257 0588 B901 movw r22,r18
1258 058a 84E0 ldi r24,lo8(4)
1259 058c 90E0 ldi r25,hi8(4)
1260 058e 0E94 0000 call SetParamWord
1261 0592 6091 0000 lds r22,NeutralAccY
1262 0596 7091 0000 lds r23,(NeutralAccY)+1
1263 059a 86E0 ldi r24,lo8(6)
1264 059c 90E0 ldi r25,hi8(6)
1265 059e 0E94 0000 call SetParamWord
1266 05a2 6091 0000 lds r22,NeutralAccZ
1267 05a6 7091 0000 lds r23,(NeutralAccZ)+1
1268 05aa 88E0 ldi r24,lo8(8)
1269 05ac 90E0 ldi r25,hi8(8)
1270 05ae 0E94 0000 call SetParamWord
1271 05b2 00C0 rjmp .L61
1272 .L58:
1273 05b4 84E0 ldi r24,lo8(4)
1274 05b6 90E0 ldi r25,hi8(4)
1275 05b8 0E94 0000 call GetParamWord
1276 05bc 9093 0000 sts (NeutralAccX)+1,r25
1277 05c0 8093 0000 sts NeutralAccX,r24
1278 05c4 86E0 ldi r24,lo8(6)
1279 05c6 90E0 ldi r25,hi8(6)
1280 05c8 0E94 0000 call GetParamWord
1281 05cc 9093 0000 sts (NeutralAccY)+1,r25
1282 05d0 8093 0000 sts NeutralAccY,r24
1283 05d4 88E0 ldi r24,lo8(8)
1284 05d6 90E0 ldi r25,hi8(8)
1285 05d8 0E94 0000 call GetParamWord
1286 05dc 9C01 movw r18,r24
1287 05de 9093 0000 sts (NeutralAccZ)+1,r25
1288 05e2 8093 0000 sts NeutralAccZ,r24
1289 05e6 8091 0000 lds r24,NeutralAccX
1290 05ea 9091 0000 lds r25,(NeutralAccX)+1
1291 05ee 8150 subi r24,lo8(2049)
1292 05f0 9840 sbci r25,hi8(2049)
1293 05f2 00F4 brsh .L63
1294 05f4 8091 0000 lds r24,NeutralAccY
1295 05f8 9091 0000 lds r25,(NeutralAccY)+1
1296 05fc 8150 subi r24,lo8(2049)
1297 05fe 9840 sbci r25,hi8(2049)
1298 0600 00F4 brsh .L63
1299 0602 2150 subi r18,lo8(1025)
1300 0604 3440 sbci r19,hi8(1025)
1301 0606 00F0 brlo .L61
1302 .L63:
1303 0608 80E0 ldi r24,lo8(__c.35)
1304 060a 90E0 ldi r25,hi8(__c.35)
1305 060c 9F93 push r25
1306 060e 8F93 push r24
1307 0610 80E0 ldi r24,lo8(pm(uart_putchar))
1308 0612 90E0 ldi r25,hi8(pm(uart_putchar))
1309 0614 9F93 push r25
1310 0616 8F93 push r24
1311 0618 E091 0000 lds r30,_printf_P
1312 061c F091 0000 lds r31,(_printf_P)+1
1313 0620 0995 icall
1314 0622 8091 0000 lds r24,Mittelwert_AccNick
1315 0626 9091 0000 lds r25,(Mittelwert_AccNick)+1
1316 062a 97FF sbrs r25,7
1317 062c 00C0 rjmp .L64
1318 062e 9095 com r25
1319 0630 8195 neg r24
1320 0632 9F4F sbci r25,lo8(-1)
1321 .L64:
1322 0634 6CE0 ldi r22,lo8(12)
1323 0636 70E0 ldi r23,hi8(12)
1324 0638 0E94 0000 call __divmodhi4
1325 063c 7093 0000 sts (NeutralAccX)+1,r23
1326 0640 6093 0000 sts NeutralAccX,r22
1327 0644 8091 0000 lds r24,Mittelwert_AccRoll
1328 0648 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1329 064c 97FF sbrs r25,7
1330 064e 00C0 rjmp .L65
1331 0650 9095 com r25
1332 0652 8195 neg r24
1333 0654 9F4F sbci r25,lo8(-1)
1334 .L65:
1335 0656 6CE0 ldi r22,lo8(12)
1336 0658 70E0 ldi r23,hi8(12)
1337 065a 0E94 0000 call __divmodhi4
1338 065e 7093 0000 sts (NeutralAccY)+1,r23
1339 0662 6093 0000 sts NeutralAccY,r22
1340 0666 8091 0000 lds r24,Aktuell_az
1341 066a 9091 0000 lds r25,(Aktuell_az)+1
1342 066e 9093 0000 sts (NeutralAccZ)+1,r25
1343 0672 8093 0000 sts NeutralAccZ,r24
1344 0676 0F90 pop __tmp_reg__
1345 0678 0F90 pop __tmp_reg__
1346 067a 0F90 pop __tmp_reg__
1347 067c 0F90 pop __tmp_reg__
1348 .L61:
1349 067e 1092 0000 sts (MesswertNick)+1,__zero_reg__
1350 0682 1092 0000 sts MesswertNick,__zero_reg__
1351 0686 1092 0000 sts (MesswertRoll)+1,__zero_reg__
1352 068a 1092 0000 sts MesswertRoll,__zero_reg__
1353 068e 1092 0000 sts (MesswertGier)+1,__zero_reg__
1354 0692 1092 0000 sts MesswertGier,__zero_reg__
1355 0696 84E6 ldi r24,lo8(100)
1356 0698 90E0 ldi r25,hi8(100)
1357 069a 0E94 0000 call Delay_ms_Mess
1358 069e 8091 0000 lds r24,AdWertAccNick
1359 06a2 9091 0000 lds r25,(AdWertAccNick)+1
1360 06a6 9C01 movw r18,r24
1361 06a8 220F lsl r18
1362 06aa 331F rol r19
1363 06ac 220F lsl r18
1364 06ae 331F rol r19
1365 06b0 280F add r18,r24
1366 06b2 391F adc r19,r25
1367 06b4 280F add r18,r24
1368 06b6 391F adc r19,r25
1369 06b8 3093 0000 sts (Mittelwert_AccNick)+1,r19
1370 06bc 2093 0000 sts Mittelwert_AccNick,r18
1371 06c0 8091 0000 lds r24,AdWertAccRoll
1372 06c4 9091 0000 lds r25,(AdWertAccRoll)+1
1373 06c8 8C01 movw r16,r24
1374 06ca 000F lsl r16
1375 06cc 111F rol r17
1376 06ce 000F lsl r16
1377 06d0 111F rol r17
1378 06d2 080F add r16,r24
1379 06d4 191F adc r17,r25
1380 06d6 080F add r16,r24
1381 06d8 191F adc r17,r25
1382 06da 1093 0000 sts (Mittelwert_AccRoll)+1,r17
1383 06de 0093 0000 sts Mittelwert_AccRoll,r16
1384 06e2 8091 0000 lds r24,EE_Parameter+28
1385 06e6 C82E mov r12,r24
1386 06e8 DD24 clr r13
1387 06ea EE24 clr r14
1388 06ec FF24 clr r15
1389 06ee 4427 clr r20
1390 06f0 37FD sbrc r19,7
1391 06f2 4095 com r20
1392 06f4 542F mov r21,r20
1393 06f6 C701 movw r24,r14
1394 06f8 B601 movw r22,r12
1395 06fa 0E94 0000 call __mulsi3
1396 06fe 4B01 movw r8,r22
1397 0700 5C01 movw r10,r24
1398 0702 6093 0000 sts IntegralNick,r22
1399 0706 7093 0000 sts (IntegralNick)+1,r23
1400 070a 8093 0000 sts (IntegralNick)+2,r24
1401 070e 9093 0000 sts (IntegralNick)+3,r25
1402 0712 9801 movw r18,r16
1403 0714 4427 clr r20
1404 0716 37FD sbrc r19,7
1405 0718 4095 com r20
1406 071a 542F mov r21,r20
1407 071c C701 movw r24,r14
1408 071e B601 movw r22,r12
1409 0720 0E94 0000 call __mulsi3
1410 0724 DC01 movw r26,r24
1411 0726 CB01 movw r24,r22
1412 0728 8093 0000 sts IntegralRoll,r24
1413 072c 9093 0000 sts (IntegralRoll)+1,r25
1414 0730 A093 0000 sts (IntegralRoll)+2,r26
1415 0734 B093 0000 sts (IntegralRoll)+3,r27
1416 0738 8092 0000 sts Mess_IntegralNick,r8
1417 073c 9092 0000 sts (Mess_IntegralNick)+1,r9
1418 0740 A092 0000 sts (Mess_IntegralNick)+2,r10
1419 0744 B092 0000 sts (Mess_IntegralNick)+3,r11
1420 0748 8093 0000 sts Mess_IntegralRoll,r24
1421 074c 9093 0000 sts (Mess_IntegralRoll)+1,r25
1422 0750 A093 0000 sts (Mess_IntegralRoll)+2,r26
1423 0754 B093 0000 sts (Mess_IntegralRoll)+3,r27
1424 0758 1092 0000 sts Mess_Integral_Gier,__zero_reg__
1425 075c 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
1426 0760 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
1427 0764 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
1428 0768 8091 0000 lds r24,Luftdruck
1429 076c 9091 0000 lds r25,(Luftdruck)+1
1430 0770 A091 0000 lds r26,(Luftdruck)+2
1431 0774 B091 0000 lds r27,(Luftdruck)+3
1432 0778 9093 0000 sts (StartLuftdruck)+1,r25
1433 077c 8093 0000 sts StartLuftdruck,r24
1434 0780 1092 0000 sts (VarioMeter)+1,__zero_reg__
1435 0784 1092 0000 sts VarioMeter,__zero_reg__
1436 0788 1092 0000 sts Mess_Integral_Hoch,__zero_reg__
1437 078c 1092 0000 sts (Mess_Integral_Hoch)+1,__zero_reg__
1438 0790 1092 0000 sts (Mess_Integral_Hoch)+2,__zero_reg__
1439 0794 1092 0000 sts (Mess_Integral_Hoch)+3,__zero_reg__
1440 0798 0091 0000 lds r16,KompassValue
1441 079c 1091 0000 lds r17,(KompassValue)+1
1442 07a0 1093 0000 sts (KompassSollWert)+1,r17
1443 07a4 0093 0000 sts KompassSollWert,r16
1444 07a8 84E6 ldi r24,lo8(100)
1445 07aa 90E0 ldi r25,hi8(100)
1446 07ac 9093 0000 sts (KompassSignalSchlecht)+1,r25
1447 07b0 8093 0000 sts KompassSignalSchlecht,r24
1448 07b4 82E3 ldi r24,lo8(50)
1449 07b6 90E0 ldi r25,hi8(50)
1450 07b8 9093 0000 sts (beeptime)+1,r25
1451 07bc 8093 0000 sts beeptime,r24
1452 07c0 8091 0000 lds r24,EE_Parameter+65
1453 07c4 9927 clr r25
1454 07c6 AA27 clr r26
1455 07c8 BB27 clr r27
1456 07ca BC01 movw r22,r24
1457 07cc CD01 movw r24,r26
1458 07ce 24EC ldi r18,lo8(2500)
1459 07d0 39E0 ldi r19,hi8(2500)
1460 07d2 40E0 ldi r20,hlo8(2500)
1461 07d4 50E0 ldi r21,hhi8(2500)
1462 07d6 0E94 0000 call __mulsi3
1463 07da DC01 movw r26,r24
1464 07dc CB01 movw r24,r22
1465 07de 8856 subi r24,lo8(-(15000))
1466 07e0 954C sbci r25,hi8(-(15000))
1467 07e2 AF4F sbci r26,hlo8(-(15000))
1468 07e4 BF4F sbci r27,hhi8(-(15000))
1469 07e6 8093 0000 sts Umschlag180Nick,r24
1470 07ea 9093 0000 sts (Umschlag180Nick)+1,r25
1471 07ee A093 0000 sts (Umschlag180Nick)+2,r26
1472 07f2 B093 0000 sts (Umschlag180Nick)+3,r27
1473 07f6 8091 0000 lds r24,EE_Parameter+66
1474 07fa 9927 clr r25
1475 07fc AA27 clr r26
1476 07fe BB27 clr r27
1477 0800 BC01 movw r22,r24
1478 0802 CD01 movw r24,r26
1479 0804 0E94 0000 call __mulsi3
1480 0808 DC01 movw r26,r24
1481 080a CB01 movw r24,r22
1482 080c 8856 subi r24,lo8(-(15000))
1483 080e 954C sbci r25,hi8(-(15000))
1484 0810 AF4F sbci r26,hlo8(-(15000))
1485 0812 BF4F sbci r27,hhi8(-(15000))
1486 0814 8093 0000 sts Umschlag180Roll,r24
1487 0818 9093 0000 sts (Umschlag180Roll)+1,r25
1488 081c A093 0000 sts (Umschlag180Roll)+2,r26
1489 0820 B093 0000 sts (Umschlag180Roll)+3,r27
1490 0824 1092 0000 sts (ExternHoehenValue)+1,__zero_reg__
1491 0828 1092 0000 sts ExternHoehenValue,__zero_reg__
1492 082c C801 movw r24,r16
1493 082e AA27 clr r26
1494 0830 97FD sbrc r25,7
1495 0832 A095 com r26
1496 0834 BA2F mov r27,r26
1497 0836 2091 0000 lds r18,GIER_GRAD_FAKTOR
1498 083a 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
1499 083e 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
1500 0842 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
1501 0846 BC01 movw r22,r24
1502 0848 CD01 movw r24,r26
1503 084a 0E94 0000 call __mulsi3
1504 084e DC01 movw r26,r24
1505 0850 CB01 movw r24,r22
1506 0852 8093 0000 sts ErsatzKompass,r24
1507 0856 9093 0000 sts (ErsatzKompass)+1,r25
1508 085a A093 0000 sts (ErsatzKompass)+2,r26
1509 085e B093 0000 sts (ErsatzKompass)+3,r27
1510 0862 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
1511 0866 1092 0000 sts GierGyroFehler,__zero_reg__
1512 086a 0E94 0000 call LED_Init
1513 086e 8091 0000 lds r24,FC_StatusFlags
1514 0872 8460 ori r24,lo8(4)
1515 0874 8093 0000 sts FC_StatusFlags,r24
1516 0878 8FEF ldi r24,lo8(-1)
1517 087a 8093 0000 sts FromNaviCtrl_Value,r24
1518 087e 1092 0000 sts FromNaviCtrl_Value+1,__zero_reg__
1519 0882 80E2 ldi r24,lo8(32)
1520 0884 8093 0000 sts FromNaviCtrl_Value+2,r24
1521 0888 C0E0 ldi r28,lo8(Poti)
1522 088a D0E0 ldi r29,hi8(Poti)
1523 088c A0E0 ldi r26,lo8(EE_Parameter+5)
1524 088e B0E0 ldi r27,hi8(EE_Parameter+5)
1525 0890 07E0 ldi r16,lo8(7)
1526 .L69:
1527 0892 8D91 ld r24,X+
1528 0894 E82F mov r30,r24
1529 0896 FF27 clr r31
1530 0898 EE0F add r30,r30
1531 089a FF1F adc r31,r31
1532 089c E050 subi r30,lo8(-(PPM_in))
1533 089e F040 sbci r31,hi8(-(PPM_in))
1534 08a0 8081 ld r24,Z
1535 08a2 9181 ldd r25,Z+1
1536 08a4 8158 subi r24,lo8(-(127))
1537 08a6 8993 st Y+,r24
1538 08a8 0150 subi r16,lo8(-(-1))
1539 08aa 07FF sbrs r16,7
1540 08ac 00C0 rjmp .L69
1541 08ae 84E6 ldi r24,lo8(100)
1542 08b0 8093 0000 sts SenderOkay,r24
1543 08b4 8091 0000 lds r24,ServoActive
1544 08b8 8823 tst r24
1545 08ba 01F0 breq .L70
1546 08bc 579A sbi 42-0x20,7
1547 08be 00C0 rjmp .L71
1548 .L70:
1549 08c0 80E0 ldi r24,lo8(4352)
1550 08c2 91E1 ldi r25,hi8(4352)
1551 08c4 9093 0000 sts (NickServoValue)+1,r25
1552 08c8 8093 0000 sts NickServoValue,r24
1553 .L71:
1554 08cc 8091 0000 lds r24,AdNeutralNick
1555 08d0 9091 0000 lds r25,(AdNeutralNick)+1
1556 08d4 8056 subi r24,lo8(-(-2400))
1557 08d6 9940 sbci r25,hi8(-(-2400))
1558 08d8 815C subi r24,lo8(11201)
1559 08da 9B42 sbci r25,hi8(11201)
1560 08dc 00F0 brlo .L72
1561 08de 8091 0000 lds r24,VersionInfo+5
1562 08e2 8160 ori r24,lo8(1)
1563 08e4 8093 0000 sts VersionInfo+5,r24
1564 .L72:
1565 08e8 8091 0000 lds r24,AdNeutralRoll
1566 08ec 9091 0000 lds r25,(AdNeutralRoll)+1
1567 08f0 8056 subi r24,lo8(-(-2400))
1568 08f2 9940 sbci r25,hi8(-(-2400))
1569 08f4 815C subi r24,lo8(11201)
1570 08f6 9B42 sbci r25,hi8(11201)
1571 08f8 00F0 brlo .L73
1572 08fa 8091 0000 lds r24,VersionInfo+5
1573 08fe 8260 ori r24,lo8(2)
1574 0900 8093 0000 sts VersionInfo+5,r24
1575 .L73:
1576 0904 8091 0000 lds r24,AdNeutralGier
1577 0908 9091 0000 lds r25,(AdNeutralGier)+1
1578 090c 8C52 subi r24,lo8(-(-300))
1579 090e 9140 sbci r25,hi8(-(-300))
1580 0910 8957 subi r24,lo8(1401)
1581 0912 9540 sbci r25,hi8(1401)
1582 0914 00F0 brlo .L74
1583 0916 8091 0000 lds r24,VersionInfo+5
1584 091a 8460 ori r24,lo8(4)
1585 091c 8093 0000 sts VersionInfo+5,r24
1586 .L74:
1587 0920 8091 0000 lds r24,NeutralAccX
1588 0924 9091 0000 lds r25,(NeutralAccX)+1
1589 0928 8C52 subi r24,lo8(-(-300))
1590 092a 9140 sbci r25,hi8(-(-300))
1591 092c 835C subi r24,lo8(451)
1592 092e 9140 sbci r25,hi8(451)
1593 0930 00F0 brlo .L75
1594 0932 8091 0000 lds r24,VersionInfo+5
1595 0936 8860 ori r24,lo8(8)
1596 0938 8093 0000 sts VersionInfo+5,r24
1597 .L75:
1598 093c 8091 0000 lds r24,NeutralAccY
1599 0940 9091 0000 lds r25,(NeutralAccY)+1
1600 0944 8C52 subi r24,lo8(-(-300))
1601 0946 9140 sbci r25,hi8(-(-300))
1602 0948 835C subi r24,lo8(451)
1603 094a 9140 sbci r25,hi8(451)
1604 094c 00F0 brlo .L76
1605 094e 8091 0000 lds r24,VersionInfo+5
1606 0952 8061 ori r24,lo8(16)
1607 0954 8093 0000 sts VersionInfo+5,r24
1608 .L76:
1609 0958 8091 0000 lds r24,NeutralAccZ
1610 095c 9091 0000 lds r25,(NeutralAccZ)+1
1611 0960 8050 subi r24,lo8(-(-512))
1612 0962 9240 sbci r25,hi8(-(-512))
1613 0964 8355 subi r24,lo8(339)
1614 0966 9140 sbci r25,hi8(339)
1615 0968 00F0 brlo .L77
1616 096a 8091 0000 lds r24,VersionInfo+5
1617 096e 8062 ori r24,lo8(32)
1618 0970 8093 0000 sts VersionInfo+5,r24
1619 .L77:
1620 0974 86E4 ldi r24,lo8(70)
1621 0976 8093 0000 sts carefree_old,r24
1622 097a 0E94 0000 call LIBFC_HoTT_Clear
1623 /* epilogue: frame size=0 */
1624 097e ECE0 ldi r30,12
1625 0980 CDB7 in r28,__SP_L__
1626 0982 DEB7 in r29,__SP_H__
1627 0984 0C94 0000 jmp __epilogue_restores__+12
1628 /* epilogue end (size=5) */
1629 /* function SetNeutral size 705 (694) */
1631 .lcomm tmpl.27,4
1632 .lcomm tmpl2.28,4
1633 .lcomm tmpl3.29,4
1634 .lcomm tmpl4.30,4
1635 .lcomm oldNick.31,2
1636 .lcomm oldRoll.32,2
1637 .lcomm d2Roll.33,2
1638 .lcomm d2Nick.34,2
1639 .global Mittelwert
1641 Mittelwert:
1642 /* prologue: frame size=19 */
1643 0988 A3E1 ldi r26,lo8(19)
1644 098a B0E0 ldi r27,hi8(19)
1645 098c E0E0 ldi r30,pm_lo8(1f)
1646 098e F0E0 ldi r31,pm_hi8(1f)
1647 0990 0C94 0000 jmp __prologue_saves__+0
1648 1:
1649 /* prologue end (size=6) */
1650 0994 8091 0000 lds r24,AdNeutralGier
1651 0998 9091 0000 lds r25,(AdNeutralGier)+1
1652 099c 2091 0000 lds r18,AdWertGier
1653 09a0 3091 0000 lds r19,(AdWertGier)+1
1654 09a4 821B sub r24,r18
1655 09a6 930B sbc r25,r19
1656 09a8 9093 0000 sts (MesswertGier)+1,r25
1657 09ac 8093 0000 sts MesswertGier,r24
1658 09b0 8091 0000 lds r24,AdWertNickFilter
1659 09b4 9091 0000 lds r25,(AdWertNickFilter)+1
1660 09b8 97FD sbrc r25,7
1661 09ba 0796 adiw r24,7
1662 .L83:
1663 09bc 9C01 movw r18,r24
1664 09be 13E0 ldi r17,3
1665 09c0 3595 1: asr r19
1666 09c2 2795 ror r18
1667 09c4 1A95 dec r17
1668 09c6 01F4 brne 1b
1669 09c8 3093 0000 sts (MesswertNick)+1,r19
1670 09cc 2093 0000 sts MesswertNick,r18
1671 09d0 8091 0000 lds r24,AdWertRollFilter
1672 09d4 9091 0000 lds r25,(AdWertRollFilter)+1
1673 09d8 97FD sbrc r25,7
1674 09da 0796 adiw r24,7
1675 .L84:
1676 09dc B3E0 ldi r27,3
1677 09de 9595 1: asr r25
1678 09e0 8795 ror r24
1679 09e2 BA95 dec r27
1680 09e4 01F4 brne 1b
1681 09e6 9093 0000 sts (MesswertRoll)+1,r25
1682 09ea 8093 0000 sts MesswertRoll,r24
1683 09ee 3093 0000 sts (RohMesswertNick)+1,r19
1684 09f2 2093 0000 sts RohMesswertNick,r18
1685 09f6 9093 0000 sts (RohMesswertRoll)+1,r25
1686 09fa 8093 0000 sts RohMesswertRoll,r24
1687 09fe 8091 0000 lds r24,Mittelwert_AccNick
1688 0a02 9091 0000 lds r25,(Mittelwert_AccNick)+1
1689 0a06 AC01 movw r20,r24
1690 0a08 440F lsl r20
1691 0a0a 551F rol r21
1692 0a0c 480F add r20,r24
1693 0a0e 591F adc r21,r25
1694 0a10 2091 0000 lds r18,AdWertAccNick
1695 0a14 3091 0000 lds r19,(AdWertAccNick)+1
1696 0a18 C901 movw r24,r18
1697 0a1a 880F lsl r24
1698 0a1c 991F rol r25
1699 0a1e 880F lsl r24
1700 0a20 991F rol r25
1701 0a22 820F add r24,r18
1702 0a24 931F adc r25,r19
1703 0a26 820F add r24,r18
1704 0a28 931F adc r25,r19
1705 0a2a 480F add r20,r24
1706 0a2c 591F adc r21,r25
1707 0a2e 57FF sbrs r21,7
1708 0a30 00C0 rjmp .L85
1709 0a32 4D5F subi r20,lo8(-(3))
1710 0a34 5F4F sbci r21,hi8(-(3))
1711 .L85:
1712 0a36 5595 asr r21
1713 0a38 4795 ror r20
1714 0a3a 5595 asr r21
1715 0a3c 4795 ror r20
1716 0a3e 5093 0000 sts (Mittelwert_AccNick)+1,r21
1717 0a42 4093 0000 sts Mittelwert_AccNick,r20
1718 0a46 8091 0000 lds r24,Mittelwert_AccRoll
1719 0a4a 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1720 0a4e AC01 movw r20,r24
1721 0a50 440F lsl r20
1722 0a52 551F rol r21
1723 0a54 480F add r20,r24
1724 0a56 591F adc r21,r25
1725 0a58 2091 0000 lds r18,AdWertAccRoll
1726 0a5c 3091 0000 lds r19,(AdWertAccRoll)+1
1727 0a60 C901 movw r24,r18
1728 0a62 880F lsl r24
1729 0a64 991F rol r25
1730 0a66 880F lsl r24
1731 0a68 991F rol r25
1732 0a6a 820F add r24,r18
1733 0a6c 931F adc r25,r19
1734 0a6e 820F add r24,r18
1735 0a70 931F adc r25,r19
1736 0a72 480F add r20,r24
1737 0a74 591F adc r21,r25
1738 0a76 57FF sbrs r21,7
1739 0a78 00C0 rjmp .L86
1740 0a7a 4D5F subi r20,lo8(-(3))
1741 0a7c 5F4F sbci r21,hi8(-(3))
1742 .L86:
1743 0a7e 5595 asr r21
1744 0a80 4795 ror r20
1745 0a82 5595 asr r21
1746 0a84 4795 ror r20
1747 0a86 5093 0000 sts (Mittelwert_AccRoll)+1,r21
1748 0a8a 4093 0000 sts Mittelwert_AccRoll,r20
1749 0a8e 2091 0000 lds r18,AdWertAccNick
1750 0a92 3091 0000 lds r19,(AdWertAccNick)+1
1751 0a96 C901 movw r24,r18
1752 0a98 880F lsl r24
1753 0a9a 991F rol r25
1754 0a9c 880F lsl r24
1755 0a9e 991F rol r25
1756 0aa0 820F add r24,r18
1757 0aa2 931F adc r25,r19
1758 0aa4 820F add r24,r18
1759 0aa6 931F adc r25,r19
1760 0aa8 9C01 movw r18,r24
1761 0aaa 4427 clr r20
1762 0aac 37FD sbrc r19,7
1763 0aae 4095 com r20
1764 0ab0 542F mov r21,r20
1765 0ab2 8091 0000 lds r24,IntegralAccNick
1766 0ab6 9091 0000 lds r25,(IntegralAccNick)+1
1767 0aba A091 0000 lds r26,(IntegralAccNick)+2
1768 0abe B091 0000 lds r27,(IntegralAccNick)+3
1769 0ac2 820F add r24,r18
1770 0ac4 931F adc r25,r19
1771 0ac6 A41F adc r26,r20
1772 0ac8 B51F adc r27,r21
1773 0aca 8093 0000 sts IntegralAccNick,r24
1774 0ace 9093 0000 sts (IntegralAccNick)+1,r25
1775 0ad2 A093 0000 sts (IntegralAccNick)+2,r26
1776 0ad6 B093 0000 sts (IntegralAccNick)+3,r27
1777 0ada 2091 0000 lds r18,AdWertAccRoll
1778 0ade 3091 0000 lds r19,(AdWertAccRoll)+1
1779 0ae2 C901 movw r24,r18
1780 0ae4 880F lsl r24
1781 0ae6 991F rol r25
1782 0ae8 880F lsl r24
1783 0aea 991F rol r25
1784 0aec 820F add r24,r18
1785 0aee 931F adc r25,r19
1786 0af0 820F add r24,r18
1787 0af2 931F adc r25,r19
1788 0af4 9C01 movw r18,r24
1789 0af6 4427 clr r20
1790 0af8 37FD sbrc r19,7
1791 0afa 4095 com r20
1792 0afc 542F mov r21,r20
1793 0afe 8091 0000 lds r24,IntegralAccRoll
1794 0b02 9091 0000 lds r25,(IntegralAccRoll)+1
1795 0b06 A091 0000 lds r26,(IntegralAccRoll)+2
1796 0b0a B091 0000 lds r27,(IntegralAccRoll)+3
1797 0b0e 820F add r24,r18
1798 0b10 931F adc r25,r19
1799 0b12 A41F adc r26,r20
1800 0b14 B51F adc r27,r21
1801 0b16 8093 0000 sts IntegralAccRoll,r24
1802 0b1a 9093 0000 sts (IntegralAccRoll)+1,r25
1803 0b1e A093 0000 sts (IntegralAccRoll)+2,r26
1804 0b22 B093 0000 sts (IntegralAccRoll)+3,r27
1805 0b26 8091 0000 lds r24,NaviAccNick
1806 0b2a 9091 0000 lds r25,(NaviAccNick)+1
1807 0b2e 2091 0000 lds r18,AdWertAccNick
1808 0b32 3091 0000 lds r19,(AdWertAccNick)+1
1809 0b36 820F add r24,r18
1810 0b38 931F adc r25,r19
1811 0b3a 9093 0000 sts (NaviAccNick)+1,r25
1812 0b3e 8093 0000 sts NaviAccNick,r24
1813 0b42 8091 0000 lds r24,NaviAccRoll
1814 0b46 9091 0000 lds r25,(NaviAccRoll)+1
1815 0b4a 2091 0000 lds r18,AdWertAccRoll
1816 0b4e 3091 0000 lds r19,(AdWertAccRoll)+1
1817 0b52 820F add r24,r18
1818 0b54 931F adc r25,r19
1819 0b56 9093 0000 sts (NaviAccRoll)+1,r25
1820 0b5a 8093 0000 sts NaviAccRoll,r24
1821 0b5e 8091 0000 lds r24,NaviCntAcc
1822 0b62 9091 0000 lds r25,(NaviCntAcc)+1
1823 0b66 0196 adiw r24,1
1824 0b68 9093 0000 sts (NaviCntAcc)+1,r25
1825 0b6c 8093 0000 sts NaviCntAcc,r24
1826 0b70 8091 0000 lds r24,Aktuell_az
1827 0b74 9091 0000 lds r25,(Aktuell_az)+1
1828 0b78 2091 0000 lds r18,NeutralAccZ
1829 0b7c 3091 0000 lds r19,(NeutralAccZ)+1
1830 0b80 821B sub r24,r18
1831 0b82 930B sbc r25,r19
1832 0b84 9C01 movw r18,r24
1833 0b86 4427 clr r20
1834 0b88 37FD sbrc r19,7
1835 0b8a 4095 com r20
1836 0b8c 542F mov r21,r20
1837 0b8e 8091 0000 lds r24,IntegralAccZ
1838 0b92 9091 0000 lds r25,(IntegralAccZ)+1
1839 0b96 A091 0000 lds r26,(IntegralAccZ)+2
1840 0b9a B091 0000 lds r27,(IntegralAccZ)+3
1841 0b9e 820F add r24,r18
1842 0ba0 931F adc r25,r19
1843 0ba2 A41F adc r26,r20
1844 0ba4 B51F adc r27,r21
1845 0ba6 8093 0000 sts IntegralAccZ,r24
1846 0baa 9093 0000 sts (IntegralAccZ)+1,r25
1847 0bae A093 0000 sts (IntegralAccZ)+2,r26
1848 0bb2 B093 0000 sts (IntegralAccZ)+3,r27
1849 0bb6 8FEC ldi r24,lo8(-49)
1850 0bb8 8093 7A00 sts 122,r24
1851 0bbc 1092 0000 sts AdReady,__zero_reg__
1852 0bc0 2091 0000 lds r18,Mess_IntegralRoll
1853 0bc4 3091 0000 lds r19,(Mess_IntegralRoll)+1
1854 0bc8 4091 0000 lds r20,(Mess_IntegralRoll)+2
1855 0bcc 5091 0000 lds r21,(Mess_IntegralRoll)+3
1856 0bd0 2987 std Y+9,r18
1857 0bd2 3A87 std Y+10,r19
1858 0bd4 4B87 std Y+11,r20
1859 0bd6 5C87 std Y+12,r21
1860 0bd8 2954 subi r18,lo8(93001)
1861 0bda 3B46 sbci r19,hi8(93001)
1862 0bdc 4140 sbci r20,hlo8(93001)
1863 0bde 5040 sbci r21,hhi8(93001)
1864 0be0 04F0 brlt .L87
1865 0be2 28E4 ldi r18,lo8(93000)
1866 0be4 3BE6 ldi r19,hi8(93000)
1867 0be6 41E0 ldi r20,hlo8(93000)
1868 0be8 50E0 ldi r21,hhi8(93000)
1869 0bea 00C0 rjmp .L167
1870 .L87:
1871 0bec 8985 ldd r24,Y+9
1872 0bee 9A85 ldd r25,Y+10
1873 0bf0 AB85 ldd r26,Y+11
1874 0bf2 BC85 ldd r27,Y+12
1875 0bf4 885B subi r24,lo8(-93000)
1876 0bf6 9449 sbci r25,hi8(-93000)
1877 0bf8 AE4F sbci r26,hlo8(-93000)
1878 0bfa BF4F sbci r27,hhi8(-93000)
1879 0bfc 04F4 brge .L89
1880 0bfe 28EB ldi r18,lo8(-93000)
1881 0c00 34E9 ldi r19,hi8(-93000)
1882 0c02 4EEF ldi r20,hlo8(-93000)
1883 0c04 5FEF ldi r21,hhi8(-93000)
1884 .L167:
1885 0c06 2D83 std Y+5,r18
1886 0c08 3E83 std Y+6,r19
1887 0c0a 4F83 std Y+7,r20
1888 0c0c 5887 std Y+8,r21
1889 0c0e 00C0 rjmp .L88
1890 .L89:
1891 0c10 8985 ldd r24,Y+9
1892 0c12 9A85 ldd r25,Y+10
1893 0c14 AB85 ldd r26,Y+11
1894 0c16 BC85 ldd r27,Y+12
1895 0c18 8D83 std Y+5,r24
1896 0c1a 9E83 std Y+6,r25
1897 0c1c AF83 std Y+7,r26
1898 0c1e B887 std Y+8,r27
1899 .L88:
1900 0c20 2091 0000 lds r18,Mess_IntegralNick
1901 0c24 3091 0000 lds r19,(Mess_IntegralNick)+1
1902 0c28 4091 0000 lds r20,(Mess_IntegralNick)+2
1903 0c2c 5091 0000 lds r21,(Mess_IntegralNick)+3
1904 0c30 2D87 std Y+13,r18
1905 0c32 3E87 std Y+14,r19
1906 0c34 4F87 std Y+15,r20
1907 0c36 588B std Y+16,r21
1908 0c38 2954 subi r18,lo8(93001)
1909 0c3a 3B46 sbci r19,hi8(93001)
1910 0c3c 4140 sbci r20,hlo8(93001)
1911 0c3e 5040 sbci r21,hhi8(93001)
1912 0c40 04F0 brlt .L91
1913 0c42 28E4 ldi r18,lo8(93000)
1914 0c44 3BE6 ldi r19,hi8(93000)
1915 0c46 41E0 ldi r20,hlo8(93000)
1916 0c48 50E0 ldi r21,hhi8(93000)
1917 0c4a 00C0 rjmp .L168
1918 .L91:
1919 0c4c 8D85 ldd r24,Y+13
1920 0c4e 9E85 ldd r25,Y+14
1921 0c50 AF85 ldd r26,Y+15
1922 0c52 B889 ldd r27,Y+16
1923 0c54 885B subi r24,lo8(-93000)
1924 0c56 9449 sbci r25,hi8(-93000)
1925 0c58 AE4F sbci r26,hlo8(-93000)
1926 0c5a BF4F sbci r27,hhi8(-93000)
1927 0c5c 04F4 brge .L93
1928 0c5e 28EB ldi r18,lo8(-93000)
1929 0c60 34E9 ldi r19,hi8(-93000)
1930 0c62 4EEF ldi r20,hlo8(-93000)
1931 0c64 5FEF ldi r21,hhi8(-93000)
1932 .L168:
1933 0c66 2983 std Y+1,r18
1934 0c68 3A83 std Y+2,r19
1935 0c6a 4B83 std Y+3,r20
1936 0c6c 5C83 std Y+4,r21
1937 0c6e 00C0 rjmp .L92
1938 .L93:
1939 0c70 8D85 ldd r24,Y+13
1940 0c72 9E85 ldd r25,Y+14
1941 0c74 AF85 ldd r26,Y+15
1942 0c76 B889 ldd r27,Y+16
1943 0c78 8983 std Y+1,r24
1944 0c7a 9A83 std Y+2,r25
1945 0c7c AB83 std Y+3,r26
1946 0c7e BC83 std Y+4,r27
1947 .L92:
1948 0c80 A091 0000 lds r26,MesswertGier
1949 0c84 B091 0000 lds r27,(MesswertGier)+1
1950 0c88 BB8B std Y+19,r27
1951 0c8a AA8B std Y+18,r26
1952 0c8c FD01 movw r30,r26
1953 0c8e CF01 movw r24,r30
1954 0c90 AA27 clr r26
1955 0c92 97FD sbrc r25,7
1956 0c94 A095 com r26
1957 0c96 BA2F mov r27,r26
1958 0c98 A090 0000 lds r10,Mess_Integral_Gier
1959 0c9c B090 0000 lds r11,(Mess_Integral_Gier)+1
1960 0ca0 C090 0000 lds r12,(Mess_Integral_Gier)+2
1961 0ca4 D090 0000 lds r13,(Mess_Integral_Gier)+3
1962 0ca8 A80E add r10,r24
1963 0caa B91E adc r11,r25
1964 0cac CA1E adc r12,r26
1965 0cae DB1E adc r13,r27
1966 0cb0 A092 0000 sts Mess_Integral_Gier,r10
1967 0cb4 B092 0000 sts (Mess_Integral_Gier)+1,r11
1968 0cb8 C092 0000 sts (Mess_Integral_Gier)+2,r12
1969 0cbc D092 0000 sts (Mess_Integral_Gier)+3,r13
1970 0cc0 E090 0000 lds r14,ErsatzKompass
1971 0cc4 F090 0000 lds r15,(ErsatzKompass)+1
1972 0cc8 0091 0000 lds r16,(ErsatzKompass)+2
1973 0ccc 1091 0000 lds r17,(ErsatzKompass)+3
1974 0cd0 E80E add r14,r24
1975 0cd2 F91E adc r15,r25
1976 0cd4 0A1F adc r16,r26
1977 0cd6 1B1F adc r17,r27
1978 0cd8 E092 0000 sts ErsatzKompass,r14
1979 0cdc F092 0000 sts (ErsatzKompass)+1,r15
1980 0ce0 0093 0000 sts (ErsatzKompass)+2,r16
1981 0ce4 1093 0000 sts (ErsatzKompass)+3,r17
1982 0ce8 F091 0000 lds r31,Looping_Nick
1983 0cec F98B std Y+17,r31
1984 0cee FF23 tst r31
1985 0cf0 01F0 breq .+2
1986 0cf2 00C0 rjmp .L95
1987 0cf4 8091 0000 lds r24,Looping_Roll
1988 0cf8 8823 tst r24
1989 0cfa 01F0 breq .+2
1990 0cfc 00C0 rjmp .L95
1991 0cfe 8091 0000 lds r24,Parameter_GlobalConfig
1992 0d02 86FF sbrs r24,6
1993 0d04 00C0 rjmp .L95
1994 0d06 8091 0000 lds r24,MesswertRoll
1995 0d0a 9091 0000 lds r25,(MesswertRoll)+1
1996 0d0e AA27 clr r26
1997 0d10 97FD sbrc r25,7
1998 0d12 A095 com r26
1999 0d14 BA2F mov r27,r26
2000 0d16 BC01 movw r22,r24
2001 0d18 CD01 movw r24,r26
2002 0d1a 2981 ldd r18,Y+1
2003 0d1c 3A81 ldd r19,Y+2
2004 0d1e 4B81 ldd r20,Y+3
2005 0d20 5C81 ldd r21,Y+4
2006 0d22 0E94 0000 call __mulsi3
2007 0d26 9B01 movw r18,r22
2008 0d28 AC01 movw r20,r24
2009 0d2a 97FF sbrs r25,7
2010 0d2c 00C0 rjmp .L96
2011 0d2e 2150 subi r18,lo8(-(2047))
2012 0d30 384F sbci r19,hi8(-(2047))
2013 0d32 4F4F sbci r20,hlo8(-(2047))
2014 0d34 5F4F sbci r21,hhi8(-(2047))
2015 .L96:
2016 0d36 BBE0 ldi r27,11
2017 0d38 5595 1: asr r21
2018 0d3a 4795 ror r20
2019 0d3c 3795 ror r19
2020 0d3e 2795 ror r18
2021 0d40 BA95 dec r27
2022 0d42 01F4 brne 1b
2023 0d44 8091 0000 lds r24,Parameter_AchsKopplung2
2024 0d48 682E mov r6,r24
2025 0d4a 7724 clr r7
2026 0d4c 8824 clr r8
2027 0d4e 9924 clr r9
2028 0d50 CA01 movw r24,r20
2029 0d52 B901 movw r22,r18
2030 0d54 A401 movw r20,r8
2031 0d56 9301 movw r18,r6
2032 0d58 0E94 0000 call __mulsi3
2033 0d5c DC01 movw r26,r24
2034 0d5e CB01 movw r24,r22
2035 0d60 8093 0000 sts tmpl3.29,r24
2036 0d64 9093 0000 sts (tmpl3.29)+1,r25
2037 0d68 A093 0000 sts (tmpl3.29)+2,r26
2038 0d6c B093 0000 sts (tmpl3.29)+3,r27
2039 0d70 B7FF sbrs r27,7
2040 0d72 00C0 rjmp .L97
2041 0d74 8150 subi r24,lo8(-(4095))
2042 0d76 904F sbci r25,hi8(-(4095))
2043 0d78 AF4F sbci r26,hlo8(-(4095))
2044 0d7a BF4F sbci r27,hhi8(-(4095))
2045 .L97:
2046 0d7c 1C01 movw r2,r24
2047 0d7e 2D01 movw r4,r26
2048 0d80 ACE0 ldi r26,12
2049 0d82 5594 1: asr r5
2050 0d84 4794 ror r4
2051 0d86 3794 ror r3
2052 0d88 2794 ror r2
2053 0d8a AA95 dec r26
2054 0d8c 01F4 brne 1b
2055 0d8e 2092 0000 sts tmpl3.29,r2
2056 0d92 3092 0000 sts (tmpl3.29)+1,r3
2057 0d96 4092 0000 sts (tmpl3.29)+2,r4
2058 0d9a 5092 0000 sts (tmpl3.29)+3,r5
2059 0d9e 8091 0000 lds r24,MesswertNick
2060 0da2 9091 0000 lds r25,(MesswertNick)+1
2061 0da6 AA27 clr r26
2062 0da8 97FD sbrc r25,7
2063 0daa A095 com r26
2064 0dac BA2F mov r27,r26
2065 0dae BC01 movw r22,r24
2066 0db0 CD01 movw r24,r26
2067 0db2 2D81 ldd r18,Y+5
2068 0db4 3E81 ldd r19,Y+6
2069 0db6 4F81 ldd r20,Y+7
2070 0db8 5885 ldd r21,Y+8
2071 0dba 0E94 0000 call __mulsi3
2072 0dbe 97FF sbrs r25,7
2073 0dc0 00C0 rjmp .L98
2074 0dc2 6150 subi r22,lo8(-(2047))
2075 0dc4 784F sbci r23,hi8(-(2047))
2076 0dc6 8F4F sbci r24,hlo8(-(2047))
2077 0dc8 9F4F sbci r25,hhi8(-(2047))
2078 .L98:
2079 0dca FBE0 ldi r31,11
2080 0dcc 9595 1: asr r25
2081 0dce 8795 ror r24
2082 0dd0 7795 ror r23
2083 0dd2 6795 ror r22
2084 0dd4 FA95 dec r31
2085 0dd6 01F4 brne 1b
2086 0dd8 A401 movw r20,r8
2087 0dda 9301 movw r18,r6
2088 0ddc 0E94 0000 call __mulsi3
2089 0de0 DC01 movw r26,r24
2090 0de2 CB01 movw r24,r22
2091 0de4 8093 0000 sts tmpl4.30,r24
2092 0de8 9093 0000 sts (tmpl4.30)+1,r25
2093 0dec A093 0000 sts (tmpl4.30)+2,r26
2094 0df0 B093 0000 sts (tmpl4.30)+3,r27
2095 0df4 B7FF sbrs r27,7
2096 0df6 00C0 rjmp .L99
2097 0df8 8150 subi r24,lo8(-(4095))
2098 0dfa 904F sbci r25,hi8(-(4095))
2099 0dfc AF4F sbci r26,hlo8(-(4095))
2100 0dfe BF4F sbci r27,hhi8(-(4095))
2101 .L99:
2102 0e00 9C01 movw r18,r24
2103 0e02 AD01 movw r20,r26
2104 0e04 ECE0 ldi r30,12
2105 0e06 5595 1: asr r21
2106 0e08 4795 ror r20
2107 0e0a 3795 ror r19
2108 0e0c 2795 ror r18
2109 0e0e EA95 dec r30
2110 0e10 01F4 brne 1b
2111 0e12 2093 0000 sts tmpl4.30,r18
2112 0e16 3093 0000 sts (tmpl4.30)+1,r19
2113 0e1a 4093 0000 sts (tmpl4.30)+2,r20
2114 0e1e 5093 0000 sts (tmpl4.30)+3,r21
2115 0e22 8091 0000 lds r24,tmpl3.29
2116 0e26 9091 0000 lds r25,(tmpl3.29)+1
2117 0e2a 9093 0000 sts (KopplungsteilNickRoll)+1,r25
2118 0e2e 8093 0000 sts KopplungsteilNickRoll,r24
2119 0e32 8091 0000 lds r24,tmpl4.30
2120 0e36 9091 0000 lds r25,(tmpl4.30)+1
2121 0e3a 9093 0000 sts (KopplungsteilRollNick)+1,r25
2122 0e3e 8093 0000 sts KopplungsteilRollNick,r24
2123 0e42 2219 sub r18,r2
2124 0e44 3309 sbc r19,r3
2125 0e46 4409 sbc r20,r4
2126 0e48 5509 sbc r21,r5
2127 0e4a 2093 0000 sts tmpl4.30,r18
2128 0e4e 3093 0000 sts (tmpl4.30)+1,r19
2129 0e52 4093 0000 sts (tmpl4.30)+2,r20
2130 0e56 5093 0000 sts (tmpl4.30)+3,r21
2131 0e5a E20E add r14,r18
2132 0e5c F31E adc r15,r19
2133 0e5e 041F adc r16,r20
2134 0e60 151F adc r17,r21
2135 0e62 E092 0000 sts ErsatzKompass,r14
2136 0e66 F092 0000 sts (ErsatzKompass)+1,r15
2137 0e6a 0093 0000 sts (ErsatzKompass)+2,r16
2138 0e6e 1093 0000 sts (ErsatzKompass)+3,r17
2139 0e72 8091 0000 lds r24,Parameter_CouplingYawCorrection
2140 0e76 8823 tst r24
2141 0e78 01F4 brne .L100
2142 0e7a 57FF sbrs r21,7
2143 0e7c 00C0 rjmp .L101
2144 0e7e 2F5F subi r18,lo8(-(1))
2145 0e80 3F4F sbci r19,hi8(-(1))
2146 0e82 4F4F sbci r20,hlo8(-(1))
2147 0e84 5F4F sbci r21,hhi8(-(1))
2148 .L101:
2149 0e86 5595 asr r21
2150 0e88 4795 ror r20
2151 0e8a 3795 ror r19
2152 0e8c 2795 ror r18
2153 0e8e A21A sub r10,r18
2154 0e90 B30A sbc r11,r19
2155 0e92 C40A sbc r12,r20
2156 0e94 D50A sbc r13,r21
2157 0e96 A092 0000 sts Mess_Integral_Gier,r10
2158 0e9a B092 0000 sts (Mess_Integral_Gier)+1,r11
2159 0e9e C092 0000 sts (Mess_Integral_Gier)+2,r12
2160 0ea2 D092 0000 sts (Mess_Integral_Gier)+3,r13
2161 .L100:
2162 0ea6 2A89 ldd r18,Y+18
2163 0ea8 3B89 ldd r19,Y+19
2164 0eaa 7901 movw r14,r18
2165 0eac 0027 clr r16
2166 0eae F7FC sbrc r15,7
2167 0eb0 0095 com r16
2168 0eb2 102F mov r17,r16
2169 0eb4 8091 0000 lds r24,tmpl4.30
2170 0eb8 9091 0000 lds r25,(tmpl4.30)+1
2171 0ebc A091 0000 lds r26,(tmpl4.30)+2
2172 0ec0 B091 0000 lds r27,(tmpl4.30)+3
2173 0ec4 E80E add r14,r24
2174 0ec6 F91E adc r15,r25
2175 0ec8 0A1F adc r16,r26
2176 0eca 1B1F adc r17,r27
2177 0ecc C801 movw r24,r16
2178 0ece B701 movw r22,r14
2179 0ed0 2981 ldd r18,Y+1
2180 0ed2 3A81 ldd r19,Y+2
2181 0ed4 4B81 ldd r20,Y+3
2182 0ed6 5C81 ldd r21,Y+4
2183 0ed8 0E94 0000 call __mulsi3
2184 0edc 9B01 movw r18,r22
2185 0ede AC01 movw r20,r24
2186 0ee0 97FF sbrs r25,7
2187 0ee2 00C0 rjmp .L102
2188 0ee4 2150 subi r18,lo8(-(2047))
2189 0ee6 384F sbci r19,hi8(-(2047))
2190 0ee8 4F4F sbci r20,hlo8(-(2047))
2191 0eea 5F4F sbci r21,hhi8(-(2047))
2192 .L102:
2193 0eec 6BE0 ldi r22,11
2194 0eee 5595 1: asr r21
2195 0ef0 4795 ror r20
2196 0ef2 3795 ror r19
2197 0ef4 2795 ror r18
2198 0ef6 6A95 dec r22
2199 0ef8 01F4 brne 1b
2200 0efa 8091 0000 lds r24,Parameter_AchsKopplung1
2201 0efe A82E mov r10,r24
2202 0f00 BB24 clr r11
2203 0f02 CC24 clr r12
2204 0f04 DD24 clr r13
2205 0f06 CA01 movw r24,r20
2206 0f08 B901 movw r22,r18
2207 0f0a A601 movw r20,r12
2208 0f0c 9501 movw r18,r10
2209 0f0e 0E94 0000 call __mulsi3
2210 0f12 DC01 movw r26,r24
2211 0f14 CB01 movw r24,r22
2212 0f16 8093 0000 sts tmpl.27,r24
2213 0f1a 9093 0000 sts (tmpl.27)+1,r25
2214 0f1e A093 0000 sts (tmpl.27)+2,r26
2215 0f22 B093 0000 sts (tmpl.27)+3,r27
2216 0f26 B7FF sbrs r27,7
2217 0f28 00C0 rjmp .L103
2218 0f2a 8150 subi r24,lo8(-(4095))
2219 0f2c 904F sbci r25,hi8(-(4095))
2220 0f2e AF4F sbci r26,hlo8(-(4095))
2221 0f30 BF4F sbci r27,hhi8(-(4095))
2222 .L103:
2223 0f32 3C01 movw r6,r24
2224 0f34 4D01 movw r8,r26
2225 0f36 3CE0 ldi r19,12
2226 0f38 9594 1: asr r9
2227 0f3a 8794 ror r8
2228 0f3c 7794 ror r7
2229 0f3e 6794 ror r6
2230 0f40 3A95 dec r19
2231 0f42 01F4 brne 1b
2232 0f44 6092 0000 sts tmpl.27,r6
2233 0f48 7092 0000 sts (tmpl.27)+1,r7
2234 0f4c 8092 0000 sts (tmpl.27)+2,r8
2235 0f50 9092 0000 sts (tmpl.27)+3,r9
2236 0f54 C801 movw r24,r16
2237 0f56 B701 movw r22,r14
2238 0f58 2D81 ldd r18,Y+5
2239 0f5a 3E81 ldd r19,Y+6
2240 0f5c 4F81 ldd r20,Y+7
2241 0f5e 5885 ldd r21,Y+8
2242 0f60 0E94 0000 call __mulsi3
2243 0f64 97FF sbrs r25,7
2244 0f66 00C0 rjmp .L104
2245 0f68 6150 subi r22,lo8(-(2047))
2246 0f6a 784F sbci r23,hi8(-(2047))
2247 0f6c 8F4F sbci r24,hlo8(-(2047))
2248 0f6e 9F4F sbci r25,hhi8(-(2047))
2249 .L104:
2250 0f70 2BE0 ldi r18,11
2251 0f72 9595 1: asr r25
2252 0f74 8795 ror r24
2253 0f76 7795 ror r23
2254 0f78 6795 ror r22
2255 0f7a 2A95 dec r18
2256 0f7c 01F4 brne 1b
2257 0f7e A601 movw r20,r12
2258 0f80 9501 movw r18,r10
2259 0f82 0E94 0000 call __mulsi3
2260 0f86 DC01 movw r26,r24
2261 0f88 CB01 movw r24,r22
2262 0f8a 8093 0000 sts tmpl2.28,r24
2263 0f8e 9093 0000 sts (tmpl2.28)+1,r25
2264 0f92 A093 0000 sts (tmpl2.28)+2,r26
2265 0f96 B093 0000 sts (tmpl2.28)+3,r27
2266 0f9a B7FF sbrs r27,7
2267 0f9c 00C0 rjmp .L105
2268 0f9e 8150 subi r24,lo8(-(4095))
2269 0fa0 904F sbci r25,hi8(-(4095))
2270 0fa2 AF4F sbci r26,hlo8(-(4095))
2271 0fa4 BF4F sbci r27,hhi8(-(4095))
2272 .L105:
2273 0fa6 AC01 movw r20,r24
2274 0fa8 BD01 movw r22,r26
2275 0faa 8CE0 ldi r24,12
2276 0fac 7595 1: asr r23
2277 0fae 6795 ror r22
2278 0fb0 5795 ror r21
2279 0fb2 4795 ror r20
2280 0fb4 8A95 dec r24
2281 0fb6 01F4 brne 1b
2282 0fb8 4093 0000 sts tmpl2.28,r20
2283 0fbc 5093 0000 sts (tmpl2.28)+1,r21
2284 0fc0 6093 0000 sts (tmpl2.28)+2,r22
2285 0fc4 7093 0000 sts (tmpl2.28)+3,r23
2286 0fc8 2A89 ldd r18,Y+18
2287 0fca 3B89 ldd r19,Y+19
2288 0fcc 37FF sbrs r19,7
2289 0fce 00C0 rjmp .L107
2290 0fd0 3095 com r19
2291 0fd2 2195 neg r18
2292 0fd4 3F4F sbci r19,lo8(-1)
2293 .L107:
2294 0fd6 2134 cpi r18,65
2295 0fd8 3105 cpc r19,__zero_reg__
2296 0fda 04F0 brlt .L112
2297 0fdc D401 movw r26,r8
2298 0fde C301 movw r24,r6
2299 0fe0 97FE sbrs r9,7
2300 0fe2 00C0 rjmp .L110
2301 0fe4 B095 com r27
2302 0fe6 A095 com r26
2303 0fe8 9095 com r25
2304 0fea 8195 neg r24
2305 0fec 9F4F sbci r25,lo8(-1)
2306 0fee AF4F sbci r26,lo8(-1)
2307 0ff0 BF4F sbci r27,lo8(-1)
2308 .L110:
2309 0ff2 8138 cpi r24,lo8(129)
2310 0ff4 9105 cpc r25,__zero_reg__
2311 0ff6 A105 cpc r26,__zero_reg__
2312 0ff8 B105 cpc r27,__zero_reg__
2313 0ffa 04F4 brge .L109
2314 0ffc DB01 movw r26,r22
2315 0ffe CA01 movw r24,r20
2316 1000 77FF sbrs r23,7
2317 1002 00C0 rjmp .L111
2318 1004 B095 com r27
2319 1006 A095 com r26
2320 1008 9095 com r25
2321 100a 8195 neg r24
2322 100c 9F4F sbci r25,lo8(-1)
2323 100e AF4F sbci r26,lo8(-1)
2324 1010 BF4F sbci r27,lo8(-1)
2325 .L111:
2326 1012 8138 cpi r24,lo8(129)
2327 1014 9105 cpc r25,__zero_reg__
2328 1016 A105 cpc r26,__zero_reg__
2329 1018 B105 cpc r27,__zero_reg__
2330 101a 04F0 brlt .L112
2331 .L109:
2332 101c 81E0 ldi r24,lo8(1)
2333 101e 8093 0000 sts TrichterFlug,r24
2334 1022 00C0 rjmp .L112
2335 .L95:
2336 1024 1092 0000 sts (KopplungsteilRollNick)+1,__zero_reg__
2337 1028 1092 0000 sts KopplungsteilRollNick,__zero_reg__
2338 102c 1092 0000 sts (KopplungsteilNickRoll)+1,__zero_reg__
2339 1030 1092 0000 sts KopplungsteilNickRoll,__zero_reg__
2340 1034 1092 0000 sts tmpl2.28,__zero_reg__
2341 1038 1092 0000 sts (tmpl2.28)+1,__zero_reg__
2342 103c 1092 0000 sts (tmpl2.28)+2,__zero_reg__
2343 1040 1092 0000 sts (tmpl2.28)+3,__zero_reg__
2344 1044 1092 0000 sts tmpl.27,__zero_reg__
2345 1048 1092 0000 sts (tmpl.27)+1,__zero_reg__
2346 104c 1092 0000 sts (tmpl.27)+2,__zero_reg__
2347 1050 1092 0000 sts (tmpl.27)+3,__zero_reg__
2348 .L112:
2349 1054 8091 0000 lds r24,tmpl2.28
2350 1058 9091 0000 lds r25,(tmpl2.28)+1
2351 105c A091 0000 lds r26,(tmpl2.28)+2
2352 1060 B091 0000 lds r27,(tmpl2.28)+3
2353 1064 BC01 movw r22,r24
2354 1066 CD01 movw r24,r26
2355 1068 24E6 ldi r18,lo8(100)
2356 106a 30E0 ldi r19,hi8(100)
2357 106c 40E0 ldi r20,hlo8(100)
2358 106e 50E0 ldi r21,hhi8(100)
2359 1070 0E94 0000 call __divmodsi4
2360 1074 E090 0000 lds r14,tmpl.27
2361 1078 F090 0000 lds r15,(tmpl.27)+1
2362 107c E21A sub r14,r18
2363 107e F30A sbc r15,r19
2364 1080 F092 0000 sts (TrimRoll)+1,r15
2365 1084 E092 0000 sts TrimRoll,r14
2366 1088 8091 0000 lds r24,tmpl.27
2367 108c 9091 0000 lds r25,(tmpl.27)+1
2368 1090 A091 0000 lds r26,(tmpl.27)+2
2369 1094 B091 0000 lds r27,(tmpl.27)+3
2370 1098 BC01 movw r22,r24
2371 109a CD01 movw r24,r26
2372 109c 24E6 ldi r18,lo8(100)
2373 109e 30E0 ldi r19,hi8(100)
2374 10a0 40E0 ldi r20,hlo8(100)
2375 10a2 50E0 ldi r21,hhi8(100)
2376 10a4 0E94 0000 call __divmodsi4
2377 10a8 DA01 movw r26,r20
2378 10aa C901 movw r24,r18
2379 10ac 2091 0000 lds r18,tmpl2.28
2380 10b0 3091 0000 lds r19,(tmpl2.28)+1
2381 10b4 8C01 movw r16,r24
2382 10b6 021B sub r16,r18
2383 10b8 130B sbc r17,r19
2384 10ba 1093 0000 sts (TrimNick)+1,r17
2385 10be 0093 0000 sts TrimNick,r16
2386 10c2 8091 0000 lds r24,GIER_GRAD_FAKTOR
2387 10c6 9091 0000 lds r25,(GIER_GRAD_FAKTOR)+1
2388 10ca A091 0000 lds r26,(GIER_GRAD_FAKTOR)+2
2389 10ce B091 0000 lds r27,(GIER_GRAD_FAKTOR)+3
2390 10d2 BC01 movw r22,r24
2391 10d4 CD01 movw r24,r26
2392 10d6 28E6 ldi r18,lo8(360)
2393 10d8 31E0 ldi r19,hi8(360)
2394 10da 40E0 ldi r20,hlo8(360)
2395 10dc 50E0 ldi r21,hhi8(360)
2396 10de 0E94 0000 call __mulsi3
2397 10e2 2091 0000 lds r18,ErsatzKompass
2398 10e6 3091 0000 lds r19,(ErsatzKompass)+1
2399 10ea 4091 0000 lds r20,(ErsatzKompass)+2
2400 10ee 5091 0000 lds r21,(ErsatzKompass)+3
2401 10f2 2617 cp r18,r22
2402 10f4 3707 cpc r19,r23
2403 10f6 4807 cpc r20,r24
2404 10f8 5907 cpc r21,r25
2405 10fa 04F0 brlt .L113
2406 10fc 261B sub r18,r22
2407 10fe 370B sbc r19,r23
2408 1100 480B sbc r20,r24
2409 1102 590B sbc r21,r25
2410 1104 2093 0000 sts ErsatzKompass,r18
2411 1108 3093 0000 sts (ErsatzKompass)+1,r19
2412 110c 4093 0000 sts (ErsatzKompass)+2,r20
2413 1110 5093 0000 sts (ErsatzKompass)+3,r21
2414 .L113:
2415 1114 2091 0000 lds r18,ErsatzKompass
2416 1118 3091 0000 lds r19,(ErsatzKompass)+1
2417 111c 4091 0000 lds r20,(ErsatzKompass)+2
2418 1120 5091 0000 lds r21,(ErsatzKompass)+3
2419 1124 57FF sbrs r21,7
2420 1126 00C0 rjmp .L114
2421 1128 260F add r18,r22
2422 112a 371F adc r19,r23
2423 112c 481F adc r20,r24
2424 112e 591F adc r21,r25
2425 1130 2093 0000 sts ErsatzKompass,r18
2426 1134 3093 0000 sts (ErsatzKompass)+1,r19
2427 1138 4093 0000 sts (ErsatzKompass)+2,r20
2428 113c 5093 0000 sts (ErsatzKompass)+3,r21
2429 .L114:
2430 1140 6091 0000 lds r22,MesswertRoll
2431 1144 7091 0000 lds r23,(MesswertRoll)+1
2432 1148 6E0D add r22,r14
2433 114a 7F1D adc r23,r15
2434 114c 9B01 movw r18,r22
2435 114e 4427 clr r20
2436 1150 37FD sbrc r19,7
2437 1152 4095 com r20
2438 1154 542F mov r21,r20
2439 1156 8091 0000 lds r24,Mess_IntegralRoll2
2440 115a 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2441 115e A091 0000 lds r26,(Mess_IntegralRoll2)+2
2442 1162 B091 0000 lds r27,(Mess_IntegralRoll2)+3
2443 1166 820F add r24,r18
2444 1168 931F adc r25,r19
2445 116a A41F adc r26,r20
2446 116c B51F adc r27,r21
2447 116e 8093 0000 sts Mess_IntegralRoll2,r24
2448 1172 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2449 1176 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2450 117a B093 0000 sts (Mess_IntegralRoll2)+3,r27
2451 117e 8091 0000 lds r24,LageKorrekturRoll
2452 1182 9091 0000 lds r25,(LageKorrekturRoll)+1
2453 1186 681B sub r22,r24
2454 1188 790B sbc r23,r25
2455 118a CB01 movw r24,r22
2456 118c AA27 clr r26
2457 118e 97FD sbrc r25,7
2458 1190 A095 com r26
2459 1192 BA2F mov r27,r26
2460 1194 2985 ldd r18,Y+9
2461 1196 3A85 ldd r19,Y+10
2462 1198 4B85 ldd r20,Y+11
2463 119a 5C85 ldd r21,Y+12
2464 119c 820F add r24,r18
2465 119e 931F adc r25,r19
2466 11a0 A41F adc r26,r20
2467 11a2 B51F adc r27,r21
2468 11a4 8093 0000 sts Mess_IntegralRoll,r24
2469 11a8 9093 0000 sts (Mess_IntegralRoll)+1,r25
2470 11ac A093 0000 sts (Mess_IntegralRoll)+2,r26
2471 11b0 B093 0000 sts (Mess_IntegralRoll)+3,r27
2472 11b4 C090 0000 lds r12,Umschlag180Roll
2473 11b8 D090 0000 lds r13,(Umschlag180Roll)+1
2474 11bc E090 0000 lds r14,(Umschlag180Roll)+2
2475 11c0 F090 0000 lds r15,(Umschlag180Roll)+3
2476 11c4 C816 cp r12,r24
2477 11c6 D906 cpc r13,r25
2478 11c8 EA06 cpc r14,r26
2479 11ca FB06 cpc r15,r27
2480 11cc 04F4 brge .L115
2481 11ce 88EA ldi r24,lo8(25000)
2482 11d0 91E6 ldi r25,hi8(25000)
2483 11d2 A0E0 ldi r26,hlo8(25000)
2484 11d4 B0E0 ldi r27,hhi8(25000)
2485 11d6 8C19 sub r24,r12
2486 11d8 9D09 sbc r25,r13
2487 11da AE09 sbc r26,r14
2488 11dc BF09 sbc r27,r15
2489 11de 8093 0000 sts Mess_IntegralRoll,r24
2490 11e2 9093 0000 sts (Mess_IntegralRoll)+1,r25
2491 11e6 A093 0000 sts (Mess_IntegralRoll)+2,r26
2492 11ea B093 0000 sts (Mess_IntegralRoll)+3,r27
2493 11ee 8093 0000 sts Mess_IntegralRoll2,r24
2494 11f2 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2495 11f6 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2496 11fa B093 0000 sts (Mess_IntegralRoll2)+3,r27
2497 .L115:
2498 11fe 2227 clr r18
2499 1200 3327 clr r19
2500 1202 A901 movw r20,r18
2501 1204 2C19 sub r18,r12
2502 1206 3D09 sbc r19,r13
2503 1208 4E09 sbc r20,r14
2504 120a 5F09 sbc r21,r15
2505 120c 8091 0000 lds r24,Mess_IntegralRoll
2506 1210 9091 0000 lds r25,(Mess_IntegralRoll)+1
2507 1214 A091 0000 lds r26,(Mess_IntegralRoll)+2
2508 1218 B091 0000 lds r27,(Mess_IntegralRoll)+3
2509 121c 8217 cp r24,r18
2510 121e 9307 cpc r25,r19
2511 1220 A407 cpc r26,r20
2512 1222 B507 cpc r27,r21
2513 1224 04F4 brge .L116
2514 1226 D701 movw r26,r14
2515 1228 C601 movw r24,r12
2516 122a 885A subi r24,lo8(-(-25000))
2517 122c 9146 sbci r25,hi8(-(-25000))
2518 122e A040 sbci r26,hlo8(-(-25000))
2519 1230 B040 sbci r27,hhi8(-(-25000))
2520 1232 8093 0000 sts Mess_IntegralRoll,r24
2521 1236 9093 0000 sts (Mess_IntegralRoll)+1,r25
2522 123a A093 0000 sts (Mess_IntegralRoll)+2,r26
2523 123e B093 0000 sts (Mess_IntegralRoll)+3,r27
2524 1242 8093 0000 sts Mess_IntegralRoll2,r24
2525 1246 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2526 124a A093 0000 sts (Mess_IntegralRoll2)+2,r26
2527 124e B093 0000 sts (Mess_IntegralRoll2)+3,r27
2528 .L116:
2529 1252 6091 0000 lds r22,MesswertNick
2530 1256 7091 0000 lds r23,(MesswertNick)+1
2531 125a 600F add r22,r16
2532 125c 711F adc r23,r17
2533 125e 9B01 movw r18,r22
2534 1260 4427 clr r20
2535 1262 37FD sbrc r19,7
2536 1264 4095 com r20
2537 1266 542F mov r21,r20
2538 1268 8091 0000 lds r24,Mess_IntegralNick2
2539 126c 9091 0000 lds r25,(Mess_IntegralNick2)+1
2540 1270 A091 0000 lds r26,(Mess_IntegralNick2)+2
2541 1274 B091 0000 lds r27,(Mess_IntegralNick2)+3
2542 1278 820F add r24,r18
2543 127a 931F adc r25,r19
2544 127c A41F adc r26,r20
2545 127e B51F adc r27,r21
2546 1280 8093 0000 sts Mess_IntegralNick2,r24
2547 1284 9093 0000 sts (Mess_IntegralNick2)+1,r25
2548 1288 A093 0000 sts (Mess_IntegralNick2)+2,r26
2549 128c B093 0000 sts (Mess_IntegralNick2)+3,r27
2550 1290 8091 0000 lds r24,LageKorrekturNick
2551 1294 9091 0000 lds r25,(LageKorrekturNick)+1
2552 1298 681B sub r22,r24
2553 129a 790B sbc r23,r25
2554 129c CB01 movw r24,r22
2555 129e AA27 clr r26
2556 12a0 97FD sbrc r25,7
2557 12a2 A095 com r26
2558 12a4 BA2F mov r27,r26
2559 12a6 2D85 ldd r18,Y+13
2560 12a8 3E85 ldd r19,Y+14
2561 12aa 4F85 ldd r20,Y+15
2562 12ac 5889 ldd r21,Y+16
2563 12ae 820F add r24,r18
2564 12b0 931F adc r25,r19
2565 12b2 A41F adc r26,r20
2566 12b4 B51F adc r27,r21
2567 12b6 8093 0000 sts Mess_IntegralNick,r24
2568 12ba 9093 0000 sts (Mess_IntegralNick)+1,r25
2569 12be A093 0000 sts (Mess_IntegralNick)+2,r26
2570 12c2 B093 0000 sts (Mess_IntegralNick)+3,r27
2571 12c6 E090 0000 lds r14,Umschlag180Nick
2572 12ca F090 0000 lds r15,(Umschlag180Nick)+1
2573 12ce 0091 0000 lds r16,(Umschlag180Nick)+2
2574 12d2 1091 0000 lds r17,(Umschlag180Nick)+3
2575 12d6 E816 cp r14,r24
2576 12d8 F906 cpc r15,r25
2577 12da 0A07 cpc r16,r26
2578 12dc 1B07 cpc r17,r27
2579 12de 04F4 brge .L117
2580 12e0 88EA ldi r24,lo8(25000)
2581 12e2 91E6 ldi r25,hi8(25000)
2582 12e4 A0E0 ldi r26,hlo8(25000)
2583 12e6 B0E0 ldi r27,hhi8(25000)
2584 12e8 8E19 sub r24,r14
2585 12ea 9F09 sbc r25,r15
2586 12ec A00B sbc r26,r16
2587 12ee B10B sbc r27,r17
2588 12f0 8093 0000 sts Mess_IntegralNick,r24
2589 12f4 9093 0000 sts (Mess_IntegralNick)+1,r25
2590 12f8 A093 0000 sts (Mess_IntegralNick)+2,r26
2591 12fc B093 0000 sts (Mess_IntegralNick)+3,r27
2592 1300 8093 0000 sts Mess_IntegralNick2,r24
2593 1304 9093 0000 sts (Mess_IntegralNick2)+1,r25
2594 1308 A093 0000 sts (Mess_IntegralNick2)+2,r26
2595 130c B093 0000 sts (Mess_IntegralNick2)+3,r27
2596 .L117:
2597 1310 2227 clr r18
2598 1312 3327 clr r19
2599 1314 A901 movw r20,r18
2600 1316 2E19 sub r18,r14
2601 1318 3F09 sbc r19,r15
2602 131a 400B sbc r20,r16
2603 131c 510B sbc r21,r17
2604 131e 8091 0000 lds r24,Mess_IntegralNick
2605 1322 9091 0000 lds r25,(Mess_IntegralNick)+1
2606 1326 A091 0000 lds r26,(Mess_IntegralNick)+2
2607 132a B091 0000 lds r27,(Mess_IntegralNick)+3
2608 132e 8217 cp r24,r18
2609 1330 9307 cpc r25,r19
2610 1332 A407 cpc r26,r20
2611 1334 B507 cpc r27,r21
2612 1336 04F4 brge .L118
2613 1338 D801 movw r26,r16
2614 133a C701 movw r24,r14
2615 133c 885A subi r24,lo8(-(-25000))
2616 133e 9146 sbci r25,hi8(-(-25000))
2617 1340 A040 sbci r26,hlo8(-(-25000))
2618 1342 B040 sbci r27,hhi8(-(-25000))
2619 1344 8093 0000 sts Mess_IntegralNick,r24
2620 1348 9093 0000 sts (Mess_IntegralNick)+1,r25
2621 134c A093 0000 sts (Mess_IntegralNick)+2,r26
2622 1350 B093 0000 sts (Mess_IntegralNick)+3,r27
2623 1354 8093 0000 sts Mess_IntegralNick2,r24
2624 1358 9093 0000 sts (Mess_IntegralNick2)+1,r25
2625 135c A093 0000 sts (Mess_IntegralNick2)+2,r26
2626 1360 B093 0000 sts (Mess_IntegralNick2)+3,r27
2627 .L118:
2628 1364 8091 0000 lds r24,Mess_Integral_Gier
2629 1368 9091 0000 lds r25,(Mess_Integral_Gier)+1
2630 136c A091 0000 lds r26,(Mess_Integral_Gier)+2
2631 1370 B091 0000 lds r27,(Mess_Integral_Gier)+3
2632 1374 8093 0000 sts Integral_Gier,r24
2633 1378 9093 0000 sts (Integral_Gier)+1,r25
2634 137c A093 0000 sts (Integral_Gier)+2,r26
2635 1380 B093 0000 sts (Integral_Gier)+3,r27
2636 1384 8091 0000 lds r24,Mess_IntegralNick
2637 1388 9091 0000 lds r25,(Mess_IntegralNick)+1
2638 138c A091 0000 lds r26,(Mess_IntegralNick)+2
2639 1390 B091 0000 lds r27,(Mess_IntegralNick)+3
2640 1394 8093 0000 sts IntegralNick,r24
2641 1398 9093 0000 sts (IntegralNick)+1,r25
2642 139c A093 0000 sts (IntegralNick)+2,r26
2643 13a0 B093 0000 sts (IntegralNick)+3,r27
2644 13a4 8091 0000 lds r24,Mess_IntegralRoll
2645 13a8 9091 0000 lds r25,(Mess_IntegralRoll)+1
2646 13ac A091 0000 lds r26,(Mess_IntegralRoll)+2
2647 13b0 B091 0000 lds r27,(Mess_IntegralRoll)+3
2648 13b4 8093 0000 sts IntegralRoll,r24
2649 13b8 9093 0000 sts (IntegralRoll)+1,r25
2650 13bc A093 0000 sts (IntegralRoll)+2,r26
2651 13c0 B093 0000 sts (IntegralRoll)+3,r27
2652 13c4 8091 0000 lds r24,Mess_IntegralNick2
2653 13c8 9091 0000 lds r25,(Mess_IntegralNick2)+1
2654 13cc A091 0000 lds r26,(Mess_IntegralNick2)+2
2655 13d0 B091 0000 lds r27,(Mess_IntegralNick2)+3
2656 13d4 8093 0000 sts IntegralNick2,r24
2657 13d8 9093 0000 sts (IntegralNick2)+1,r25
2658 13dc A093 0000 sts (IntegralNick2)+2,r26
2659 13e0 B093 0000 sts (IntegralNick2)+3,r27
2660 13e4 8091 0000 lds r24,Mess_IntegralRoll2
2661 13e8 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2662 13ec A091 0000 lds r26,(Mess_IntegralRoll2)+2
2663 13f0 B091 0000 lds r27,(Mess_IntegralRoll2)+3
2664 13f4 8093 0000 sts IntegralRoll2,r24
2665 13f8 9093 0000 sts (IntegralRoll2)+1,r25
2666 13fc A093 0000 sts (IntegralRoll2)+2,r26
2667 1400 B093 0000 sts (IntegralRoll2)+3,r27
2668 1404 8091 0000 lds r24,HiResNick
2669 1408 9091 0000 lds r25,(HiResNick)+1
2670 140c 97FD sbrc r25,7
2671 140e 0796 adiw r24,7
2672 .L119:
2673 1410 03E0 ldi r16,3
2674 1412 9595 1: asr r25
2675 1414 8795 ror r24
2676 1416 0A95 dec r16
2677 1418 01F4 brne 1b
2678 141a 9093 0000 sts (MesswertNick)+1,r25
2679 141e 8093 0000 sts MesswertNick,r24
2680 1422 8091 0000 lds r24,HiResRoll
2681 1426 9091 0000 lds r25,(HiResRoll)+1
2682 142a 97FD sbrc r25,7
2683 142c 0796 adiw r24,7
2684 .L120:
2685 142e 13E0 ldi r17,3
2686 1430 9595 1: asr r25
2687 1432 8795 ror r24
2688 1434 1A95 dec r17
2689 1436 01F4 brne 1b
2690 1438 9093 0000 sts (MesswertRoll)+1,r25
2691 143c 8093 0000 sts MesswertRoll,r24
2692 1440 8091 0000 lds r24,AdWertNick
2693 1444 9091 0000 lds r25,(AdWertNick)+1
2694 1448 0F97 sbiw r24,15
2695 144a 04F4 brge .L121
2696 144c 88E1 ldi r24,lo8(-1000)
2697 144e 9CEF ldi r25,hi8(-1000)
2698 1450 9093 0000 sts (MesswertNick)+1,r25
2699 1454 8093 0000 sts MesswertNick,r24
2700 .L121:
2701 1458 8091 0000 lds r24,AdWertNick
2702 145c 9091 0000 lds r25,(AdWertNick)+1
2703 1460 0797 sbiw r24,7
2704 1462 04F4 brge .L122
2705 1464 80E3 ldi r24,lo8(-2000)
2706 1466 98EF ldi r25,hi8(-2000)
2707 1468 9093 0000 sts (MesswertNick)+1,r25
2708 146c 8093 0000 sts MesswertNick,r24
2709 .L122:
2710 1470 2091 0000 lds r18,PlatinenVersion
2711 1474 2A30 cpi r18,lo8(10)
2712 1476 01F4 brne .L123
2713 1478 8091 0000 lds r24,AdWertNick
2714 147c 9091 0000 lds r25,(AdWertNick)+1
2715 1480 835F subi r24,lo8(1011)
2716 1482 9340 sbci r25,hi8(1011)
2717 1484 04F0 brlt .L124
2718 1486 88EE ldi r24,lo8(1000)
2719 1488 93E0 ldi r25,hi8(1000)
2720 148a 9093 0000 sts (MesswertNick)+1,r25
2721 148e 8093 0000 sts MesswertNick,r24
2722 .L124:
2723 1492 8091 0000 lds r24,AdWertNick
2724 1496 9091 0000 lds r25,(AdWertNick)+1
2725 149a 8A5F subi r24,lo8(1018)
2726 149c 9340 sbci r25,hi8(1018)
2727 149e 04F0 brlt .L126
2728 14a0 00C0 rjmp .L169
2729 .L123:
2730 14a2 8091 0000 lds r24,AdWertNick
2731 14a6 9091 0000 lds r25,(AdWertNick)+1
2732 14aa 815D subi r24,lo8(2001)
2733 14ac 9740 sbci r25,hi8(2001)
2734 14ae 04F0 brlt .L127
2735 14b0 88EE ldi r24,lo8(1000)
2736 14b2 93E0 ldi r25,hi8(1000)
2737 14b4 9093 0000 sts (MesswertNick)+1,r25
2738 14b8 8093 0000 sts MesswertNick,r24
2739 .L127:
2740 14bc 8091 0000 lds r24,AdWertNick
2741 14c0 9091 0000 lds r25,(AdWertNick)+1
2742 14c4 805E subi r24,lo8(2016)
2743 14c6 9740 sbci r25,hi8(2016)
2744 14c8 04F0 brlt .L126
2745 .L169:
2746 14ca 80ED ldi r24,lo8(2000)
2747 14cc 97E0 ldi r25,hi8(2000)
2748 14ce 9093 0000 sts (MesswertNick)+1,r25
2749 14d2 8093 0000 sts MesswertNick,r24
2750 .L126:
2751 14d6 8091 0000 lds r24,AdWertRoll
2752 14da 9091 0000 lds r25,(AdWertRoll)+1
2753 14de 0F97 sbiw r24,15
2754 14e0 04F4 brge .L129
2755 14e2 88E1 ldi r24,lo8(-1000)
2756 14e4 9CEF ldi r25,hi8(-1000)
2757 14e6 9093 0000 sts (MesswertRoll)+1,r25
2758 14ea 8093 0000 sts MesswertRoll,r24
2759 .L129:
2760 14ee 8091 0000 lds r24,AdWertRoll
2761 14f2 9091 0000 lds r25,(AdWertRoll)+1
2762 14f6 0797 sbiw r24,7
2763 14f8 04F4 brge .L130
2764 14fa 80E3 ldi r24,lo8(-2000)
2765 14fc 98EF ldi r25,hi8(-2000)
2766 14fe 9093 0000 sts (MesswertRoll)+1,r25
2767 1502 8093 0000 sts MesswertRoll,r24
2768 .L130:
2769 1506 2A30 cpi r18,lo8(10)
2770 1508 01F4 brne .L131
2771 150a 8091 0000 lds r24,AdWertRoll
2772 150e 9091 0000 lds r25,(AdWertRoll)+1
2773 1512 835F subi r24,lo8(1011)
2774 1514 9340 sbci r25,hi8(1011)
2775 1516 04F0 brlt .L132
2776 1518 88EE ldi r24,lo8(1000)
2777 151a 93E0 ldi r25,hi8(1000)
2778 151c 9093 0000 sts (MesswertRoll)+1,r25
2779 1520 8093 0000 sts MesswertRoll,r24
2780 .L132:
2781 1524 8091 0000 lds r24,AdWertRoll
2782 1528 9091 0000 lds r25,(AdWertRoll)+1
2783 152c 8A5F subi r24,lo8(1018)
2784 152e 9340 sbci r25,hi8(1018)
2785 1530 04F0 brlt .L134
2786 1532 00C0 rjmp .L170
2787 .L131:
2788 1534 8091 0000 lds r24,AdWertRoll
2789 1538 9091 0000 lds r25,(AdWertRoll)+1
2790 153c 815D subi r24,lo8(2001)
2791 153e 9740 sbci r25,hi8(2001)
2792 1540 04F0 brlt .L135
2793 1542 88EE ldi r24,lo8(1000)
2794 1544 93E0 ldi r25,hi8(1000)
2795 1546 9093 0000 sts (MesswertRoll)+1,r25
2796 154a 8093 0000 sts MesswertRoll,r24
2797 .L135:
2798 154e 8091 0000 lds r24,AdWertRoll
2799 1552 9091 0000 lds r25,(AdWertRoll)+1
2800 1556 805E subi r24,lo8(2016)
2801 1558 9740 sbci r25,hi8(2016)
2802 155a 04F0 brlt .L134
2803 .L170:
2804 155c 80ED ldi r24,lo8(2000)
2805 155e 97E0 ldi r25,hi8(2000)
2806 1560 9093 0000 sts (MesswertRoll)+1,r25
2807 1564 8093 0000 sts MesswertRoll,r24
2808 .L134:
2809 1568 6091 0000 lds r22,Parameter_Gyro_D
2810 156c 6623 tst r22
2811 156e 01F4 brne .+2
2812 1570 00C0 rjmp .L137
2813 1572 4091 0000 lds r20,HiResNick
2814 1576 5091 0000 lds r21,(HiResNick)+1
2815 157a 8091 0000 lds r24,oldNick.31
2816 157e 9091 0000 lds r25,(oldNick.31)+1
2817 1582 481B sub r20,r24
2818 1584 590B sbc r21,r25
2819 1586 5093 0000 sts (d2Nick.34)+1,r21
2820 158a 4093 0000 sts d2Nick.34,r20
2821 158e 2091 0000 lds r18,HiResNick
2822 1592 3091 0000 lds r19,(HiResNick)+1
2823 1596 280F add r18,r24
2824 1598 391F adc r19,r25
2825 159a 37FF sbrs r19,7
2826 159c 00C0 rjmp .L138
2827 159e 2F5F subi r18,lo8(-(1))
2828 15a0 3F4F sbci r19,hi8(-(1))
2829 .L138:
2830 15a2 3595 asr r19
2831 15a4 2795 ror r18
2832 15a6 3093 0000 sts (oldNick.31)+1,r19
2833 15aa 2093 0000 sts oldNick.31,r18
2834 15ae 4138 cpi r20,129
2835 15b0 5105 cpc r21,__zero_reg__
2836 15b2 04F0 brlt .L139
2837 15b4 80E8 ldi r24,lo8(128)
2838 15b6 90E0 ldi r25,hi8(128)
2839 15b8 00C0 rjmp .L171
2840 .L139:
2841 15ba 4058 subi r20,lo8(-128)
2842 15bc 5F4F sbci r21,hi8(-128)
2843 15be 04F4 brge .L140
2844 15c0 80E8 ldi r24,lo8(-128)
2845 15c2 9FEF ldi r25,hi8(-128)
2846 .L171:
2847 15c4 9093 0000 sts (d2Nick.34)+1,r25
2848 15c8 8093 0000 sts d2Nick.34,r24
2849 .L140:
2850 15cc 4091 0000 lds r20,HiResRoll
2851 15d0 5091 0000 lds r21,(HiResRoll)+1
2852 15d4 8091 0000 lds r24,oldRoll.32
2853 15d8 9091 0000 lds r25,(oldRoll.32)+1
2854 15dc 481B sub r20,r24
2855 15de 590B sbc r21,r25
2856 15e0 5093 0000 sts (d2Roll.33)+1,r21
2857 15e4 4093 0000 sts d2Roll.33,r20
2858 15e8 2091 0000 lds r18,HiResRoll
2859 15ec 3091 0000 lds r19,(HiResRoll)+1
2860 15f0 280F add r18,r24
2861 15f2 391F adc r19,r25
2862 15f4 37FF sbrs r19,7
2863 15f6 00C0 rjmp .L142
2864 15f8 2F5F subi r18,lo8(-(1))
2865 15fa 3F4F sbci r19,hi8(-(1))
2866 .L142:
2867 15fc 3595 asr r19
2868 15fe 2795 ror r18
2869 1600 3093 0000 sts (oldRoll.32)+1,r19
2870 1604 2093 0000 sts oldRoll.32,r18
2871 1608 4138 cpi r20,129
2872 160a 5105 cpc r21,__zero_reg__
2873 160c 04F0 brlt .L143
2874 160e 80E8 ldi r24,lo8(128)
2875 1610 90E0 ldi r25,hi8(128)
2876 1612 00C0 rjmp .L172
2877 .L143:
2878 1614 4058 subi r20,lo8(-128)
2879 1616 5F4F sbci r21,hi8(-128)
2880 1618 04F4 brge .L144
2881 161a 80E8 ldi r24,lo8(-128)
2882 161c 9FEF ldi r25,hi8(-128)
2883 .L172:
2884 161e 9093 0000 sts (d2Roll.33)+1,r25
2885 1622 8093 0000 sts d2Roll.33,r24
2886 .L144:
2887 1626 462F mov r20,r22
2888 1628 5527 clr r21
2889 162a 8091 0000 lds r24,d2Nick.34
2890 162e 9091 0000 lds r25,(d2Nick.34)+1
2891 1632 849F mul r24,r20
2892 1634 B001 movw r22,r0
2893 1636 859F mul r24,r21
2894 1638 700D add r23,r0
2895 163a 949F mul r25,r20
2896 163c 700D add r23,r0
2897 163e 1124 clr r1
2898 1640 9B01 movw r18,r22
2899 1642 77FF sbrs r23,7
2900 1644 00C0 rjmp .L146
2901 1646 215F subi r18,lo8(-(15))
2902 1648 3F4F sbci r19,hi8(-(15))
2903 .L146:
2904 164a F4E0 ldi r31,4
2905 164c 3595 1: asr r19
2906 164e 2795 ror r18
2907 1650 FA95 dec r31
2908 1652 01F4 brne 1b
2909 1654 8091 0000 lds r24,MesswertNick
2910 1658 9091 0000 lds r25,(MesswertNick)+1
2911 165c 820F add r24,r18
2912 165e 931F adc r25,r19
2913 1660 9093 0000 sts (MesswertNick)+1,r25
2914 1664 8093 0000 sts MesswertNick,r24
2915 1668 8091 0000 lds r24,d2Roll.33
2916 166c 9091 0000 lds r25,(d2Roll.33)+1
2917 1670 849F mul r24,r20
2918 1672 D001 movw r26,r0
2919 1674 859F mul r24,r21
2920 1676 B00D add r27,r0
2921 1678 949F mul r25,r20
2922 167a B00D add r27,r0
2923 167c 1124 clr r1
2924 167e AD01 movw r20,r26
2925 1680 9D01 movw r18,r26
2926 1682 B7FF sbrs r27,7
2927 1684 00C0 rjmp .L147
2928 1686 215F subi r18,lo8(-(15))
2929 1688 3F4F sbci r19,hi8(-(15))
2930 .L147:
2931 168a E4E0 ldi r30,4
2932 168c 3595 1: asr r19
2933 168e 2795 ror r18
2934 1690 EA95 dec r30
2935 1692 01F4 brne 1b
2936 1694 8091 0000 lds r24,MesswertRoll
2937 1698 9091 0000 lds r25,(MesswertRoll)+1
2938 169c 820F add r24,r18
2939 169e 931F adc r25,r19
2940 16a0 9093 0000 sts (MesswertRoll)+1,r25
2941 16a4 8093 0000 sts MesswertRoll,r24
2942 16a8 8091 0000 lds r24,HiResNick
2943 16ac 9091 0000 lds r25,(HiResNick)+1
2944 16b0 860F add r24,r22
2945 16b2 971F adc r25,r23
2946 16b4 9093 0000 sts (HiResNick)+1,r25
2947 16b8 8093 0000 sts HiResNick,r24
2948 16bc 8091 0000 lds r24,HiResRoll
2949 16c0 9091 0000 lds r25,(HiResRoll)+1
2950 16c4 840F add r24,r20
2951 16c6 951F adc r25,r21
2952 16c8 9093 0000 sts (HiResRoll)+1,r25
2953 16cc 8093 0000 sts HiResRoll,r24
2954 .L137:
2955 16d0 0091 0000 lds r16,RohMesswertRoll
2956 16d4 1091 0000 lds r17,(RohMesswertRoll)+1
2957 16d8 8091 0000 lds r24,KopplungsteilNickRoll
2958 16dc 9091 0000 lds r25,(KopplungsteilNickRoll)+1
2959 16e0 1016 cp __zero_reg__,r16
2960 16e2 1106 cpc __zero_reg__,r17
2961 16e4 04F4 brge .L148
2962 16e6 9C01 movw r18,r24
2963 16e8 97FF sbrs r25,7
2964 16ea 00C0 rjmp .L149
2965 16ec 2227 clr r18
2966 16ee 3327 clr r19
2967 16f0 281B sub r18,r24
2968 16f2 390B sbc r19,r25
2969 .L149:
2970 16f4 C901 movw r24,r18
2971 16f6 AA27 clr r26
2972 16f8 97FD sbrc r25,7
2973 16fa A095 com r26
2974 16fc BA2F mov r27,r26
2975 16fe 2091 0000 lds r18,Parameter_CouplingYawCorrection
2976 1702 3327 clr r19
2977 1704 4427 clr r20
2978 1706 5527 clr r21
2979 1708 BC01 movw r22,r24
2980 170a CD01 movw r24,r26
2981 170c 0E94 0000 call __mulsi3
2982 1710 9B01 movw r18,r22
2983 1712 AC01 movw r20,r24
2984 1714 97FF sbrs r25,7
2985 1716 00C0 rjmp .L150
2986 1718 215C subi r18,lo8(-(63))
2987 171a 3F4F sbci r19,hi8(-(63))
2988 171c 4F4F sbci r20,hlo8(-(63))
2989 171e 5F4F sbci r21,hhi8(-(63))
2990 .L150:
2991 1720 76E0 ldi r23,6
2992 1722 5595 1: asr r21
2993 1724 4795 ror r20
2994 1726 3795 ror r19
2995 1728 2795 ror r18
2996 172a 7A95 dec r23
2997 172c 01F4 brne 1b
2998 172e 8091 0000 lds r24,TrimRoll
2999 1732 9091 0000 lds r25,(TrimRoll)+1
3000 1736 820F add r24,r18
3001 1738 931F adc r25,r19
3002 173a 00C0 rjmp .L173
3003 .L148:
3004 173c 97FF sbrs r25,7
3005 173e 00C0 rjmp .L152
3006 1740 9095 com r25
3007 1742 8195 neg r24
3008 1744 9F4F sbci r25,lo8(-1)
3009 .L152:
3010 1746 AA27 clr r26
3011 1748 97FD sbrc r25,7
3012 174a A095 com r26
3013 174c BA2F mov r27,r26
3014 174e 2091 0000 lds r18,Parameter_CouplingYawCorrection
3015 1752 3327 clr r19
3016 1754 4427 clr r20
3017 1756 5527 clr r21
3018 1758 BC01 movw r22,r24
3019 175a CD01 movw r24,r26
3020 175c 0E94 0000 call __mulsi3
3021 1760 9B01 movw r18,r22
3022 1762 AC01 movw r20,r24
3023 1764 97FF sbrs r25,7
3024 1766 00C0 rjmp .L153
3025 1768 215C subi r18,lo8(-(63))
3026 176a 3F4F sbci r19,hi8(-(63))
3027 176c 4F4F sbci r20,hlo8(-(63))
3028 176e 5F4F sbci r21,hhi8(-(63))
3029 .L153:
3030 1770 66E0 ldi r22,6
3031 1772 5595 1: asr r21
3032 1774 4795 ror r20
3033 1776 3795 ror r19
3034 1778 2795 ror r18
3035 177a 6A95 dec r22
3036 177c 01F4 brne 1b
3037 177e 8091 0000 lds r24,TrimRoll
3038 1782 9091 0000 lds r25,(TrimRoll)+1
3039 1786 821B sub r24,r18
3040 1788 930B sbc r25,r19
3041 .L173:
3042 178a 9093 0000 sts (TrimRoll)+1,r25
3043 178e 8093 0000 sts TrimRoll,r24
3044 1792 E090 0000 lds r14,RohMesswertNick
3045 1796 F090 0000 lds r15,(RohMesswertNick)+1
3046 179a 8091 0000 lds r24,KopplungsteilRollNick
3047 179e 9091 0000 lds r25,(KopplungsteilRollNick)+1
3048 17a2 1E14 cp __zero_reg__,r14
3049 17a4 1F04 cpc __zero_reg__,r15
3050 17a6 04F4 brge .L154
3051 17a8 9C01 movw r18,r24
3052 17aa 97FF sbrs r25,7
3053 17ac 00C0 rjmp .L155
3054 17ae 2227 clr r18
3055 17b0 3327 clr r19
3056 17b2 281B sub r18,r24
3057 17b4 390B sbc r19,r25
3058 .L155:
3059 17b6 C901 movw r24,r18
3060 17b8 AA27 clr r26
3061 17ba 97FD sbrc r25,7
3062 17bc A095 com r26
3063 17be BA2F mov r27,r26
3064 17c0 2091 0000 lds r18,Parameter_CouplingYawCorrection
3065 17c4 3327 clr r19
3066 17c6 4427 clr r20
3067 17c8 5527 clr r21
3068 17ca BC01 movw r22,r24
3069 17cc CD01 movw r24,r26
3070 17ce 0E94 0000 call __mulsi3
3071 17d2 9B01 movw r18,r22
3072 17d4 AC01 movw r20,r24
3073 17d6 97FF sbrs r25,7
3074 17d8 00C0 rjmp .L156
3075 17da 215C subi r18,lo8(-(63))
3076 17dc 3F4F sbci r19,hi8(-(63))
3077 17de 4F4F sbci r20,hlo8(-(63))
3078 17e0 5F4F sbci r21,hhi8(-(63))
3079 .L156:
3080 17e2 96E0 ldi r25,6
3081 17e4 5595 1: asr r21
3082 17e6 4795 ror r20
3083 17e8 3795 ror r19
3084 17ea 2795 ror r18
3085 17ec 9A95 dec r25
3086 17ee 01F4 brne 1b
3087 17f0 8091 0000 lds r24,TrimNick
3088 17f4 9091 0000 lds r25,(TrimNick)+1
3089 17f8 820F add r24,r18
3090 17fa 931F adc r25,r19
3091 17fc 00C0 rjmp .L174
3092 .L154:
3093 17fe 97FF sbrs r25,7
3094 1800 00C0 rjmp .L158
3095 1802 9095 com r25
3096 1804 8195 neg r24
3097 1806 9F4F sbci r25,lo8(-1)
3098 .L158:
3099 1808 AA27 clr r26
3100 180a 97FD sbrc r25,7
3101 180c A095 com r26
3102 180e BA2F mov r27,r26
3103 1810 2091 0000 lds r18,Parameter_CouplingYawCorrection
3104 1814 3327 clr r19
3105 1816 4427 clr r20
3106 1818 5527 clr r21
3107 181a BC01 movw r22,r24
3108 181c CD01 movw r24,r26
3109 181e 0E94 0000 call __mulsi3
3110 1822 9B01 movw r18,r22
3111 1824 AC01 movw r20,r24
3112 1826 97FF sbrs r25,7
3113 1828 00C0 rjmp .L159
3114 182a 215C subi r18,lo8(-(63))
3115 182c 3F4F sbci r19,hi8(-(63))
3116 182e 4F4F sbci r20,hlo8(-(63))
3117 1830 5F4F sbci r21,hhi8(-(63))
3118 .L159:
3119 1832 86E0 ldi r24,6
3120 1834 5595 1: asr r21
3121 1836 4795 ror r20
3122 1838 3795 ror r19
3123 183a 2795 ror r18
3124 183c 8A95 dec r24
3125 183e 01F4 brne 1b
3126 1840 8091 0000 lds r24,TrimNick
3127 1844 9091 0000 lds r25,(TrimNick)+1
3128 1848 821B sub r24,r18
3129 184a 930B sbc r25,r19
3130 .L174:
3131 184c 9093 0000 sts (TrimNick)+1,r25
3132 1850 8093 0000 sts TrimNick,r24
3133 1854 8091 0000 lds r24,Parameter_GlobalConfig
3134 1858 87FF sbrs r24,7
3135 185a 00C0 rjmp .L82
3136 185c B989 ldd r27,Y+17
3137 185e BB23 tst r27
3138 1860 01F0 breq .+2
3139 1862 00C0 rjmp .L82
3140 1864 8091 0000 lds r24,Looping_Roll
3141 1868 8823 tst r24
3142 186a 01F4 brne .L82
3143 186c E1E0 ldi r30,lo8(257)
3144 186e EE16 cp r14,r30
3145 1870 E1E0 ldi r30,hi8(257)
3146 1872 FE06 cpc r15,r30
3147 1874 04F0 brlt .L161
3148 1876 8091 0000 lds r24,MesswertNick
3149 187a 9091 0000 lds r25,(MesswertNick)+1
3150 187e 8E0D add r24,r14
3151 1880 9F1D adc r25,r15
3152 1882 8050 subi r24,lo8(-(-256))
3153 1884 9140 sbci r25,hi8(-(-256))
3154 1886 00C0 rjmp .L175
3155 .L161:
3156 1888 F0E0 ldi r31,lo8(-256)
3157 188a EF16 cp r14,r31
3158 188c FFEF ldi r31,hi8(-256)
3159 188e FF06 cpc r15,r31
3160 1890 04F4 brge .L162
3161 1892 8091 0000 lds r24,MesswertNick
3162 1896 9091 0000 lds r25,(MesswertNick)+1
3163 189a 8E0D add r24,r14
3164 189c 9F1D adc r25,r15
3165 189e 8050 subi r24,lo8(-(256))
3166 18a0 9F4F sbci r25,hi8(-(256))
3167 .L175:
3168 18a2 9093 0000 sts (MesswertNick)+1,r25
3169 18a6 8093 0000 sts MesswertNick,r24
3170 .L162:
3171 18aa 21E0 ldi r18,hi8(257)
3172 18ac 0130 cpi r16,lo8(257)
3173 18ae 1207 cpc r17,r18
3174 18b0 04F0 brlt .L164
3175 18b2 8091 0000 lds r24,MesswertRoll
3176 18b6 9091 0000 lds r25,(MesswertRoll)+1
3177 18ba 800F add r24,r16
3178 18bc 911F adc r25,r17
3179 18be 8050 subi r24,lo8(-(-256))
3180 18c0 9140 sbci r25,hi8(-(-256))
3181 18c2 00C0 rjmp .L176
3182 .L164:
3183 18c4 3FEF ldi r19,hi8(-256)
3184 18c6 0030 cpi r16,lo8(-256)
3185 18c8 1307 cpc r17,r19
3186 18ca 04F4 brge .L82
3187 18cc 8091 0000 lds r24,MesswertRoll
3188 18d0 9091 0000 lds r25,(MesswertRoll)+1
3189 18d4 800F add r24,r16
3190 18d6 911F adc r25,r17
3191 18d8 8050 subi r24,lo8(-(256))
3192 18da 9F4F sbci r25,hi8(-(256))
3193 .L176:
3194 18dc 9093 0000 sts (MesswertRoll)+1,r25
3195 18e0 8093 0000 sts MesswertRoll,r24
3196 .L82:
3197 /* epilogue: frame size=19 */
3198 18e4 E2E1 ldi r30,18
3199 18e6 CD5E subi r28,-19
3200 18e8 0C94 0000 jmp __epilogue_restores__+0
3201 /* epilogue end (size=4) */
3202 /* function Mittelwert size 2000 (1990) */
3204 .global SendMotorData
3206 SendMotorData:
3207 /* prologue: frame size=0 */
3208 /* prologue end (size=0) */
3209 18ec 8091 0000 lds r24,MotorenEin
3210 18f0 8823 tst r24
3211 18f2 01F4 brne .L178
3212 18f4 8091 0000 lds r24,FC_StatusFlags
3213 18f8 8C7F andi r24,lo8(-4)
3214 18fa 8093 0000 sts FC_StatusFlags,r24
3215 18fe A0E0 ldi r26,lo8(MotorTest)
3216 1900 B0E0 ldi r27,hi8(MotorTest)
3217 1902 E0E0 ldi r30,lo8(Motor)
3218 1904 F0E0 ldi r31,hi8(Motor)
3219 1906 9BE0 ldi r25,lo8(11)
3220 .L183:
3221 1908 8091 0000 lds r24,PC_MotortestActive
3222 190c 8823 tst r24
3223 190e 01F4 brne .L182
3224 1910 8C93 st X,r24
3225 .L182:
3226 1912 8D91 ld r24,X+
3227 1914 8183 std Z+1,r24
3228 1916 1282 std Z+2,__zero_reg__
3229 1918 9150 subi r25,lo8(-(-1))
3230 191a 3896 adiw r30,8
3231 191c 97FF sbrs r25,7
3232 191e 00C0 rjmp .L183
3233 1920 8091 0000 lds r24,PC_MotortestActive
3234 1924 8823 tst r24
3235 1926 01F0 breq .L185
3236 1928 8091 0000 lds r24,PC_MotortestActive
3237 192c 8150 subi r24,lo8(-(-1))
3238 192e 8093 0000 sts PC_MotortestActive,r24
3239 1932 00C0 rjmp .L185
3240 .L178:
3241 1934 8091 0000 lds r24,FC_StatusFlags
3242 1938 8160 ori r24,lo8(1)
3243 193a 8093 0000 sts FC_StatusFlags,r24
3244 .L185:
3245 193e 8091 0000 lds r24,I2C_TransferActive
3246 1942 8823 tst r24
3247 1944 01F0 breq .L186
3248 1946 1092 0000 sts I2C_TransferActive,__zero_reg__
3249 194a 0895 ret
3250 .L186:
3251 194c 8093 0000 sts motor_write,r24
3252 1950 8093 0000 sts twi_state,r24
3253 1954 8091 0000 lds r24,BLFlags
3254 1958 8E7F andi r24,lo8(-2)
3255 195a 8093 0000 sts BLFlags,r24
3256 195e 85EA ldi r24,lo8(-91)
3257 1960 8093 BC00 sts 188,r24
3258 1964 0895 ret
3259 /* epilogue: frame size=0 */
3260 /* epilogue: noreturn */
3261 /* epilogue end (size=0) */
3262 /* function SendMotorData size 61 (61) */
3264 .global ParameterZuordnung
3266 ParameterZuordnung:
3267 /* prologue: frame size=0 */
3268 1966 CF93 push r28
3269 1968 DF93 push r29
3270 /* prologue end (size=2) */
3271 196a A0E0 ldi r26,lo8(Poti)
3272 196c B0E0 ldi r27,hi8(Poti)
3273 196e C0E0 ldi r28,lo8(EE_Parameter+5)
3274 1970 D0E0 ldi r29,hi8(EE_Parameter+5)
3275 1972 57E0 ldi r21,lo8(7)
3276 .L203:
3277 1974 9991 ld r25,Y+
3278 1976 E92F mov r30,r25
3279 1978 FF27 clr r31
3280 197a EE0F add r30,r30
3281 197c FF1F adc r31,r31
3282 197e E050 subi r30,lo8(-(PPM_in))
3283 1980 F040 sbci r31,hi8(-(PPM_in))
3284 1982 0190 ld __tmp_reg__,Z+
3285 1984 F081 ld r31,Z
3286 1986 E02D mov r30,__tmp_reg__
3287 1988 E158 subi r30,lo8(-(127))
3288 198a FF4F sbci r31,hi8(-(127))
3289 198c EF3F cpi r30,255
3290 198e F105 cpc r31,__zero_reg__
3291 1990 01F0 breq .L194
3292 1992 04F0 brlt .L194
3293 1994 EFEF ldi r30,lo8(255)
3294 1996 F0E0 ldi r31,hi8(255)
3295 1998 00C0 rjmp .L195
3296 .L194:
3297 199a F7FF sbrs r31,7
3298 199c 00C0 rjmp .L195
3299 199e E0E0 ldi r30,lo8(0)
3300 19a0 F0E0 ldi r31,hi8(0)
3301 .L195:
3302 19a2 9931 cpi r25,lo8(25)
3303 19a4 01F4 brne .L197
3304 19a6 EC93 st X,r30
3305 19a8 00C0 rjmp .L193
3306 .L197:
3307 19aa 4C91 ld r20,X
3308 19ac 242F mov r18,r20
3309 19ae 3327 clr r19
3310 19b0 E217 cp r30,r18
3311 19b2 F307 cpc r31,r19
3312 19b4 01F0 breq .L193
3313 19b6 CF01 movw r24,r30
3314 19b8 821B sub r24,r18
3315 19ba 930B sbc r25,r19
3316 19bc 97FD sbrc r25,7
3317 19be 0396 adiw r24,3
3318 .L200:
3319 19c0 9595 asr r25
3320 19c2 8795 ror r24
3321 19c4 9595 asr r25
3322 19c6 8795 ror r24
3323 19c8 242F mov r18,r20
3324 19ca 280F add r18,r24
3325 19cc 2C93 st X,r18
3326 19ce 822F mov r24,r18
3327 19d0 9927 clr r25
3328 19d2 E817 cp r30,r24
3329 19d4 F907 cpc r31,r25
3330 19d6 04F4 brge .L201
3331 19d8 2150 subi r18,lo8(-(-1))
3332 19da 00C0 rjmp .L323
3333 .L201:
3334 19dc 2F5F subi r18,lo8(-(1))
3335 .L323:
3336 19de 2C93 st X,r18
3337 .L193:
3338 19e0 5150 subi r21,lo8(-(-1))
3339 19e2 1196 adiw r26,1
3340 19e4 57FF sbrs r21,7
3341 19e6 00C0 rjmp .L203
3342 19e8 8091 0000 lds r24,EE_Parameter+15
3343 19ec 883F cpi r24,lo8(-8)
3344 19ee 00F0 brlo .L324
3345 19f0 EFEF ldi r30,lo8(255)
3346 19f2 F0E0 ldi r31,hi8(255)
3347 19f4 E81B sub r30,r24
3348 19f6 F109 sbc r31,__zero_reg__
3349 19f8 E050 subi r30,lo8(-(Poti))
3350 19fa F040 sbci r31,hi8(-(Poti))
3351 19fc 8081 ld r24,Z
3352 .L324:
3353 19fe 8093 0000 sts Parameter_Luftdruck_D,r24
3354 1a02 8091 0000 lds r24,Parameter_Luftdruck_D
3355 1a06 8823 tst r24
3356 1a08 01F0 breq .L207
3357 1a0a 8436 cpi r24,lo8(100)
3358 1a0c 00F0 brlo .L207
3359 1a0e 84E6 ldi r24,lo8(100)
3360 1a10 8093 0000 sts Parameter_Luftdruck_D,r24
3361 .L207:
3362 1a14 8091 0000 lds r24,EE_Parameter+17
3363 1a18 883F cpi r24,lo8(-8)
3364 1a1a 00F0 brlo .L325
3365 1a1c EFEF ldi r30,lo8(255)
3366 1a1e F0E0 ldi r31,hi8(255)
3367 1a20 E81B sub r30,r24
3368 1a22 F109 sbc r31,__zero_reg__
3369 1a24 E050 subi r30,lo8(-(Poti))
3370 1a26 F040 sbci r31,hi8(-(Poti))
3371 1a28 8081 ld r24,Z
3372 .L325:
3373 1a2a 8093 0000 sts Parameter_Hoehe_P,r24
3374 1a2e 8091 0000 lds r24,Parameter_Hoehe_P
3375 1a32 8823 tst r24
3376 1a34 01F0 breq .L212
3377 1a36 8436 cpi r24,lo8(100)
3378 1a38 00F0 brlo .L212
3379 1a3a 84E6 ldi r24,lo8(100)
3380 1a3c 8093 0000 sts Parameter_Hoehe_P,r24
3381 .L212:
3382 1a40 8091 0000 lds r24,EE_Parameter+30
3383 1a44 883F cpi r24,lo8(-8)
3384 1a46 00F0 brlo .L326
3385 1a48 EFEF ldi r30,lo8(255)
3386 1a4a F0E0 ldi r31,hi8(255)
3387 1a4c E81B sub r30,r24
3388 1a4e F109 sbc r31,__zero_reg__
3389 1a50 E050 subi r30,lo8(-(Poti))
3390 1a52 F040 sbci r31,hi8(-(Poti))
3391 1a54 8081 ld r24,Z
3392 .L326:
3393 1a56 8093 0000 sts Parameter_Gyro_P,r24
3394 1a5a 8091 0000 lds r24,Parameter_Gyro_P
3395 1a5e 8B30 cpi r24,lo8(11)
3396 1a60 00F4 brsh .L216
3397 1a62 8AE0 ldi r24,lo8(10)
3398 1a64 00C0 rjmp .L327
3399 .L216:
3400 1a66 8F3F cpi r24,lo8(-1)
3401 1a68 01F4 brne .L217
3402 .L327:
3403 1a6a 8093 0000 sts Parameter_Gyro_P,r24
3404 .L217:
3405 1a6e 8091 0000 lds r24,EE_Parameter+75
3406 1a72 883F cpi r24,lo8(-8)
3407 1a74 00F0 brlo .L328
3408 1a76 EFEF ldi r30,lo8(255)
3409 1a78 F0E0 ldi r31,hi8(255)
3410 1a7a E81B sub r30,r24
3411 1a7c F109 sbc r31,__zero_reg__
3412 1a7e E050 subi r30,lo8(-(Poti))
3413 1a80 F040 sbci r31,hi8(-(Poti))
3414 1a82 8081 ld r24,Z
3415 .L328:
3416 1a84 8093 0000 sts Parameter_J16Timing,r24
3417 1a88 8091 0000 lds r24,Parameter_J16Timing
3418 1a8c 8630 cpi r24,lo8(6)
3419 1a8e 00F4 brsh .L221
3420 1a90 85E0 ldi r24,lo8(5)
3421 1a92 00C0 rjmp .L329
3422 .L221:
3423 1a94 8F3F cpi r24,lo8(-1)
3424 1a96 01F4 brne .L222
3425 .L329:
3426 1a98 8093 0000 sts Parameter_J16Timing,r24
3427 .L222:
3428 1a9c 8091 0000 lds r24,EE_Parameter+77
3429 1aa0 883F cpi r24,lo8(-8)
3430 1aa2 00F0 brlo .L330
3431 1aa4 EFEF ldi r30,lo8(255)
3432 1aa6 F0E0 ldi r31,hi8(255)
3433 1aa8 E81B sub r30,r24
3434 1aaa F109 sbc r31,__zero_reg__
3435 1aac E050 subi r30,lo8(-(Poti))
3436 1aae F040 sbci r31,hi8(-(Poti))
3437 1ab0 8081 ld r24,Z
3438 .L330:
3439 1ab2 8093 0000 sts Parameter_J17Timing,r24
3440 1ab6 8091 0000 lds r24,Parameter_J17Timing
3441 1aba 8630 cpi r24,lo8(6)
3442 1abc 00F4 brsh .L226
3443 1abe 85E0 ldi r24,lo8(5)
3444 1ac0 00C0 rjmp .L331
3445 .L226:
3446 1ac2 8F3F cpi r24,lo8(-1)
3447 1ac4 01F4 brne .L227
3448 .L331:
3449 1ac6 8093 0000 sts Parameter_J17Timing,r24
3450 .L227:
3451 1aca 8091 0000 lds r24,EE_Parameter+56
3452 1ace 873F cpi r24,lo8(-9)
3453 1ad0 01F4 brne .L229
3454 1ad2 4299 sbic 40-0x20,2
3455 1ad4 00C0 rjmp .L362
3456 1ad6 00C0 rjmp .L234
3457 .L229:
3458 1ad8 863F cpi r24,lo8(-10)
3459 1ada 01F4 brne .L233
3460 1adc 439B sbis 40-0x20,3
3461 1ade 00C0 rjmp .L234
3462 .L362:
3463 1ae0 8CE8 ldi r24,lo8(-116)
3464 1ae2 00C0 rjmp .L332
3465 .L234:
3466 1ae4 86E4 ldi r24,lo8(70)
3467 1ae6 00C0 rjmp .L332
3468 .L233:
3469 1ae8 883F cpi r24,lo8(-8)
3470 1aea 00F0 brlo .L332
3471 1aec EFEF ldi r30,lo8(255)
3472 1aee F0E0 ldi r31,hi8(255)
3473 1af0 E81B sub r30,r24
3474 1af2 F109 sbc r31,__zero_reg__
3475 1af4 E050 subi r30,lo8(-(Poti))
3476 1af6 F040 sbci r31,hi8(-(Poti))
3477 1af8 8081 ld r24,Z
3478 .L332:
3479 1afa 8093 0000 sts Parameter_Servo3,r24
3480 1afe 8091 0000 lds r24,EE_Parameter+57
3481 1b02 873F cpi r24,lo8(-9)
3482 1b04 01F4 brne .L239
3483 1b06 4299 sbic 40-0x20,2
3484 1b08 00C0 rjmp .L363
3485 1b0a 00C0 rjmp .L244
3486 .L239:
3487 1b0c 863F cpi r24,lo8(-10)
3488 1b0e 01F4 brne .L243
3489 1b10 439B sbis 40-0x20,3
3490 1b12 00C0 rjmp .L244
3491 .L363:
3492 1b14 8CE8 ldi r24,lo8(-116)
3493 1b16 00C0 rjmp .L333
3494 .L244:
3495 1b18 86E4 ldi r24,lo8(70)
3496 1b1a 00C0 rjmp .L333
3497 .L243:
3498 1b1c 883F cpi r24,lo8(-8)
3499 1b1e 00F0 brlo .L333
3500 1b20 EFEF ldi r30,lo8(255)
3501 1b22 F0E0 ldi r31,hi8(255)
3502 1b24 E81B sub r30,r24
3503 1b26 F109 sbc r31,__zero_reg__
3504 1b28 E050 subi r30,lo8(-(Poti))
3505 1b2a F040 sbci r31,hi8(-(Poti))
3506 1b2c 8081 ld r24,Z
3507 .L333:
3508 1b2e 8093 0000 sts Parameter_Servo4,r24
3509 1b32 8091 0000 lds r24,EE_Parameter+58
3510 1b36 883F cpi r24,lo8(-8)
3511 1b38 00F0 brlo .L334
3512 1b3a EFEF ldi r30,lo8(255)
3513 1b3c F0E0 ldi r31,hi8(255)
3514 1b3e E81B sub r30,r24
3515 1b40 F109 sbc r31,__zero_reg__
3516 1b42 E050 subi r30,lo8(-(Poti))
3517 1b44 F040 sbci r31,hi8(-(Poti))
3518 1b46 8081 ld r24,Z
3519 .L334:
3520 1b48 8093 0000 sts Parameter_Servo5,r24
3521 1b4c 8091 0000 lds r24,EE_Parameter+16
3522 1b50 883F cpi r24,lo8(-8)
3523 1b52 00F0 brlo .L335
3524 1b54 EFEF ldi r30,lo8(255)
3525 1b56 F0E0 ldi r31,hi8(255)
3526 1b58 E81B sub r30,r24
3527 1b5a F109 sbc r31,__zero_reg__
3528 1b5c E050 subi r30,lo8(-(Poti))
3529 1b5e F040 sbci r31,hi8(-(Poti))
3530 1b60 8081 ld r24,Z
3531 .L335:
3532 1b62 8093 0000 sts Parameter_HoehenSchalter,r24
3533 1b66 8091 0000 lds r24,EE_Parameter+19
3534 1b6a 883F cpi r24,lo8(-8)
3535 1b6c 00F0 brlo .L336
3536 1b6e EFEF ldi r30,lo8(255)
3537 1b70 F0E0 ldi r31,hi8(255)
3538 1b72 E81B sub r30,r24
3539 1b74 F109 sbc r31,__zero_reg__
3540 1b76 E050 subi r30,lo8(-(Poti))
3541 1b78 F040 sbci r31,hi8(-(Poti))
3542 1b7a 8081 ld r24,Z
3543 .L336:
3544 1b7c 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
3545 1b80 8091 0000 lds r24,EE_Parameter+21
3546 1b84 883F cpi r24,lo8(-8)
3547 1b86 00F0 brlo .L337
3548 1b88 EFEF ldi r30,lo8(255)
3549 1b8a F0E0 ldi r31,hi8(255)
3550 1b8c E81B sub r30,r24
3551 1b8e F109 sbc r31,__zero_reg__
3552 1b90 E050 subi r30,lo8(-(Poti))
3553 1b92 F040 sbci r31,hi8(-(Poti))
3554 1b94 8081 ld r24,Z
3555 .L337:
3556 1b96 8093 0000 sts Parameter_Hoehe_GPS_Z,r24
3557 1b9a 8091 0000 lds r24,EE_Parameter+29
3558 1b9e 883F cpi r24,lo8(-8)
3559 1ba0 00F0 brlo .L338
3560 1ba2 EFEF ldi r30,lo8(255)
3561 1ba4 F0E0 ldi r31,hi8(255)
3562 1ba6 E81B sub r30,r24
3563 1ba8 F109 sbc r31,__zero_reg__
3564 1baa E050 subi r30,lo8(-(Poti))
3565 1bac F040 sbci r31,hi8(-(Poti))
3566 1bae 8081 ld r24,Z
3567 .L338:
3568 1bb0 8093 0000 sts Parameter_KompassWirkung,r24
3569 1bb4 8091 0000 lds r24,EE_Parameter+31
3570 1bb8 883F cpi r24,lo8(-8)
3571 1bba 00F0 brlo .L339
3572 1bbc EFEF ldi r30,lo8(255)
3573 1bbe F0E0 ldi r31,hi8(255)
3574 1bc0 E81B sub r30,r24
3575 1bc2 F109 sbc r31,__zero_reg__
3576 1bc4 E050 subi r30,lo8(-(Poti))
3577 1bc6 F040 sbci r31,hi8(-(Poti))
3578 1bc8 8081 ld r24,Z
3579 .L339:
3580 1bca 8093 0000 sts Parameter_Gyro_I,r24
3581 1bce 8091 0000 lds r24,EE_Parameter+32
3582 1bd2 883F cpi r24,lo8(-8)
3583 1bd4 00F0 brlo .L340
3584 1bd6 EFEF ldi r30,lo8(255)
3585 1bd8 F0E0 ldi r31,hi8(255)
3586 1bda E81B sub r30,r24
3587 1bdc F109 sbc r31,__zero_reg__
3588 1bde E050 subi r30,lo8(-(Poti))
3589 1be0 F040 sbci r31,hi8(-(Poti))
3590 1be2 8081 ld r24,Z
3591 .L340:
3592 1be4 8093 0000 sts Parameter_Gyro_D,r24
3593 1be8 8091 0000 lds r24,EE_Parameter+33
3594 1bec 883F cpi r24,lo8(-8)
3595 1bee 00F0 brlo .L341
3596 1bf0 EFEF ldi r30,lo8(255)
3597 1bf2 F0E0 ldi r31,hi8(255)
3598 1bf4 E81B sub r30,r24
3599 1bf6 F109 sbc r31,__zero_reg__
3600 1bf8 E050 subi r30,lo8(-(Poti))
3601 1bfa F040 sbci r31,hi8(-(Poti))
3602 1bfc 8081 ld r24,Z
3603 .L341:
3604 1bfe 8093 0000 sts Parameter_Gyro_Gier_P,r24
3605 1c02 8091 0000 lds r24,EE_Parameter+34
3606 1c06 883F cpi r24,lo8(-8)
3607 1c08 00F0 brlo .L342
3608 1c0a EFEF ldi r30,lo8(255)
3609 1c0c F0E0 ldi r31,hi8(255)
3610 1c0e E81B sub r30,r24
3611 1c10 F109 sbc r31,__zero_reg__
3612 1c12 E050 subi r30,lo8(-(Poti))
3613 1c14 F040 sbci r31,hi8(-(Poti))
3614 1c16 8081 ld r24,Z
3615 .L342:
3616 1c18 8093 0000 sts Parameter_Gyro_Gier_I,r24
3617 1c1c 8091 0000 lds r24,EE_Parameter+40
3618 1c20 883F cpi r24,lo8(-8)
3619 1c22 00F0 brlo .L343
3620 1c24 EFEF ldi r30,lo8(255)
3621 1c26 F0E0 ldi r31,hi8(255)
3622 1c28 E81B sub r30,r24
3623 1c2a F109 sbc r31,__zero_reg__
3624 1c2c E050 subi r30,lo8(-(Poti))
3625 1c2e F040 sbci r31,hi8(-(Poti))
3626 1c30 8081 ld r24,Z
3627 .L343:
3628 1c32 8093 0000 sts Parameter_I_Faktor,r24
3629 1c36 8091 0000 lds r24,EE_Parameter+41
3630 1c3a 883F cpi r24,lo8(-8)
3631 1c3c 00F0 brlo .L344
3632 1c3e EFEF ldi r30,lo8(255)
3633 1c40 F0E0 ldi r31,hi8(255)
3634 1c42 E81B sub r30,r24
3635 1c44 F109 sbc r31,__zero_reg__
3636 1c46 E050 subi r30,lo8(-(Poti))
3637 1c48 F040 sbci r31,hi8(-(Poti))
3638 1c4a 8081 ld r24,Z
3639 .L344:
3640 1c4c 8093 0000 sts Parameter_UserParam1,r24
3641 1c50 8091 0000 lds r24,EE_Parameter+42
3642 1c54 883F cpi r24,lo8(-8)
3643 1c56 00F0 brlo .L345
3644 1c58 EFEF ldi r30,lo8(255)
3645 1c5a F0E0 ldi r31,hi8(255)
3646 1c5c E81B sub r30,r24
3647 1c5e F109 sbc r31,__zero_reg__
3648 1c60 E050 subi r30,lo8(-(Poti))
3649 1c62 F040 sbci r31,hi8(-(Poti))
3650 1c64 8081 ld r24,Z
3651 .L345:
3652 1c66 8093 0000 sts Parameter_UserParam2,r24
3653 1c6a 8091 0000 lds r24,EE_Parameter+43
3654 1c6e 883F cpi r24,lo8(-8)
3655 1c70 00F0 brlo .L346
3656 1c72 EFEF ldi r30,lo8(255)
3657 1c74 F0E0 ldi r31,hi8(255)
3658 1c76 E81B sub r30,r24
3659 1c78 F109 sbc r31,__zero_reg__
3660 1c7a E050 subi r30,lo8(-(Poti))
3661 1c7c F040 sbci r31,hi8(-(Poti))
3662 1c7e 8081 ld r24,Z
3663 .L346:
3664 1c80 8093 0000 sts Parameter_UserParam3,r24
3665 1c84 8091 0000 lds r24,EE_Parameter+44
3666 1c88 883F cpi r24,lo8(-8)
3667 1c8a 00F0 brlo .L347
3668 1c8c EFEF ldi r30,lo8(255)
3669 1c8e F0E0 ldi r31,hi8(255)
3670 1c90 E81B sub r30,r24
3671 1c92 F109 sbc r31,__zero_reg__
3672 1c94 E050 subi r30,lo8(-(Poti))
3673 1c96 F040 sbci r31,hi8(-(Poti))
3674 1c98 8081 ld r24,Z
3675 .L347:
3676 1c9a 8093 0000 sts Parameter_UserParam4,r24
3677 1c9e 8091 0000 lds r24,EE_Parameter+70
3678 1ca2 883F cpi r24,lo8(-8)
3679 1ca4 00F0 brlo .L348
3680 1ca6 EFEF ldi r30,lo8(255)
3681 1ca8 F0E0 ldi r31,hi8(255)
3682 1caa E81B sub r30,r24
3683 1cac F109 sbc r31,__zero_reg__
3684 1cae E050 subi r30,lo8(-(Poti))
3685 1cb0 F040 sbci r31,hi8(-(Poti))
3686 1cb2 8081 ld r24,Z
3687 .L348:
3688 1cb4 8093 0000 sts Parameter_UserParam5,r24
3689 1cb8 8091 0000 lds r24,EE_Parameter+71
3690 1cbc 883F cpi r24,lo8(-8)
3691 1cbe 00F0 brlo .L349
3692 1cc0 EFEF ldi r30,lo8(255)
3693 1cc2 F0E0 ldi r31,hi8(255)
3694 1cc4 E81B sub r30,r24
3695 1cc6 F109 sbc r31,__zero_reg__
3696 1cc8 E050 subi r30,lo8(-(Poti))
3697 1cca F040 sbci r31,hi8(-(Poti))
3698 1ccc 8081 ld r24,Z
3699 .L349:
3700 1cce 8093 0000 sts Parameter_UserParam6,r24
3701 1cd2 8091 0000 lds r24,EE_Parameter+72
3702 1cd6 883F cpi r24,lo8(-8)
3703 1cd8 00F0 brlo .L350
3704 1cda EFEF ldi r30,lo8(255)
3705 1cdc F0E0 ldi r31,hi8(255)
3706 1cde E81B sub r30,r24
3707 1ce0 F109 sbc r31,__zero_reg__
3708 1ce2 E050 subi r30,lo8(-(Poti))
3709 1ce4 F040 sbci r31,hi8(-(Poti))
3710 1ce6 8081 ld r24,Z
3711 .L350:
3712 1ce8 8093 0000 sts Parameter_UserParam7,r24
3713 1cec 8091 0000 lds r24,EE_Parameter+73
3714 1cf0 883F cpi r24,lo8(-8)
3715 1cf2 00F0 brlo .L351
3716 1cf4 EFEF ldi r30,lo8(255)
3717 1cf6 F0E0 ldi r31,hi8(255)
3718 1cf8 E81B sub r30,r24
3719 1cfa F109 sbc r31,__zero_reg__
3720 1cfc E050 subi r30,lo8(-(Poti))
3721 1cfe F040 sbci r31,hi8(-(Poti))
3722 1d00 8081 ld r24,Z
3723 .L351:
3724 1d02 8093 0000 sts Parameter_UserParam8,r24
3725 1d06 8091 0000 lds r24,EE_Parameter+45
3726 1d0a 883F cpi r24,lo8(-8)
3727 1d0c 00F0 brlo .L352
3728 1d0e EFEF ldi r30,lo8(255)
3729 1d10 F0E0 ldi r31,hi8(255)
3730 1d12 E81B sub r30,r24
3731 1d14 F109 sbc r31,__zero_reg__
3732 1d16 E050 subi r30,lo8(-(Poti))
3733 1d18 F040 sbci r31,hi8(-(Poti))
3734 1d1a 8081 ld r24,Z
3735 .L352:
3736 1d1c 8093 0000 sts Parameter_ServoNickControl,r24
3737 1d20 8091 0000 lds r24,EE_Parameter+49
3738 1d24 883F cpi r24,lo8(-8)
3739 1d26 00F0 brlo .L353
3740 1d28 EFEF ldi r30,lo8(255)
3741 1d2a F0E0 ldi r31,hi8(255)
3742 1d2c E81B sub r30,r24
3743 1d2e F109 sbc r31,__zero_reg__
3744 1d30 E050 subi r30,lo8(-(Poti))
3745 1d32 F040 sbci r31,hi8(-(Poti))
3746 1d34 8081 ld r24,Z
3747 .L353:
3748 1d36 8093 0000 sts Parameter_ServoRollControl,r24
3749 1d3a 8091 0000 lds r24,EE_Parameter+59
3750 1d3e 883F cpi r24,lo8(-8)
3751 1d40 00F0 brlo .L354
3752 1d42 EFEF ldi r30,lo8(255)
3753 1d44 F0E0 ldi r31,hi8(255)
3754 1d46 E81B sub r30,r24
3755 1d48 F109 sbc r31,__zero_reg__
3756 1d4a E050 subi r30,lo8(-(Poti))
3757 1d4c F040 sbci r31,hi8(-(Poti))
3758 1d4e 8081 ld r24,Z
3759 .L354:
3760 1d50 8093 0000 sts Parameter_LoopGasLimit,r24
3761 1d54 8091 0000 lds r24,EE_Parameter+62
3762 1d58 883F cpi r24,lo8(-8)
3763 1d5a 00F0 brlo .L355
3764 1d5c EFEF ldi r30,lo8(255)
3765 1d5e F0E0 ldi r31,hi8(255)
3766 1d60 E81B sub r30,r24
3767 1d62 F109 sbc r31,__zero_reg__
3768 1d64 E050 subi r30,lo8(-(Poti))
3769 1d66 F040 sbci r31,hi8(-(Poti))
3770 1d68 8081 ld r24,Z
3771 .L355:
3772 1d6a 8093 0000 sts Parameter_AchsKopplung1,r24
3773 1d6e 8091 0000 lds r24,EE_Parameter+63
3774 1d72 883F cpi r24,lo8(-8)
3775 1d74 00F0 brlo .L356
3776 1d76 EFEF ldi r30,lo8(255)
3777 1d78 F0E0 ldi r31,hi8(255)
3778 1d7a E81B sub r30,r24
3779 1d7c F109 sbc r31,__zero_reg__
3780 1d7e E050 subi r30,lo8(-(Poti))
3781 1d80 F040 sbci r31,hi8(-(Poti))
3782 1d82 8081 ld r24,Z
3783 .L356:
3784 1d84 8093 0000 sts Parameter_AchsKopplung2,r24
3785 1d88 8091 0000 lds r24,EE_Parameter+64
3786 1d8c 883F cpi r24,lo8(-8)
3787 1d8e 00F0 brlo .L357
3788 1d90 EFEF ldi r30,lo8(255)
3789 1d92 F0E0 ldi r31,hi8(255)
3790 1d94 E81B sub r30,r24
3791 1d96 F109 sbc r31,__zero_reg__
3792 1d98 E050 subi r30,lo8(-(Poti))
3793 1d9a F040 sbci r31,hi8(-(Poti))
3794 1d9c 8081 ld r24,Z
3795 .L357:
3796 1d9e 8093 0000 sts Parameter_CouplingYawCorrection,r24
3797 1da2 8091 0000 lds r24,EE_Parameter+104
3798 1da6 883F cpi r24,lo8(-8)
3799 1da8 00F0 brlo .L358
3800 1daa EFEF ldi r30,lo8(255)
3801 1dac F0E0 ldi r31,hi8(255)
3802 1dae E81B sub r30,r24
3803 1db0 F109 sbc r31,__zero_reg__
3804 1db2 E050 subi r30,lo8(-(Poti))
3805 1db4 F040 sbci r31,hi8(-(Poti))
3806 1db6 8081 ld r24,Z
3807 .L358:
3808 1db8 8093 0000 sts Parameter_MaximumAltitude,r24
3809 1dbc 9091 0000 lds r25,NC_To_FC_MaxAltitude
3810 1dc0 9923 tst r25
3811 1dc2 01F0 breq .L301
3812 1dc4 8091 0000 lds r24,Parameter_MaximumAltitude
3813 1dc8 9817 cp r25,r24
3814 1dca 00F0 brlo .L300
3815 .L301:
3816 1dcc 8091 0000 lds r24,Parameter_MaximumAltitude
3817 1dd0 8823 tst r24
3818 1dd2 01F4 brne .L299
3819 .L300:
3820 1dd4 9093 0000 sts Parameter_MaximumAltitude,r25
3821 .L299:
3822 1dd8 8091 0000 lds r24,EE_Parameter+13
3823 1ddc 8093 0000 sts Parameter_GlobalConfig,r24
3824 1de0 8091 0000 lds r24,EE_Parameter+110
3825 1de4 8093 0000 sts Parameter_ExtraConfig,r24
3826 1de8 8091 0000 lds r24,EE_Parameter+69
3827 1dec 883F cpi r24,lo8(-8)
3828 1dee 00F0 brlo .L359
3829 1df0 EFEF ldi r30,lo8(255)
3830 1df2 F0E0 ldi r31,hi8(255)
3831 1df4 E81B sub r30,r24
3832 1df6 F109 sbc r31,__zero_reg__
3833 1df8 E050 subi r30,lo8(-(Poti))
3834 1dfa F040 sbci r31,hi8(-(Poti))
3835 1dfc 8081 ld r24,Z
3836 .L359:
3837 1dfe 8093 0000 sts Parameter_DynamicStability,r24
3838 1e02 8091 0000 lds r24,EE_Parameter+97
3839 1e06 883F cpi r24,lo8(-8)
3840 1e08 00F0 brlo .L360
3841 1e0a EFEF ldi r30,lo8(255)
3842 1e0c F0E0 ldi r31,hi8(255)
3843 1e0e E81B sub r30,r24
3844 1e10 F109 sbc r31,__zero_reg__
3845 1e12 E050 subi r30,lo8(-(Poti))
3846 1e14 F040 sbci r31,hi8(-(Poti))
3847 1e16 8081 ld r24,Z
3848 .L360:
3849 1e18 8093 0000 sts Parameter_ExternalControl,r24
3850 1e1c 8091 0000 lds r24,Parameter_I_Faktor
3851 1e20 282F mov r18,r24
3852 1e22 3327 clr r19
3853 1e24 2F5F subi r18,lo8(-(1))
3854 1e26 3F4F sbci r19,hi8(-(1))
3855 1e28 8CE3 ldi r24,lo8(10300)
3856 1e2a 98E2 ldi r25,hi8(10300)
3857 1e2c B901 movw r22,r18
3858 1e2e 0E94 0000 call __divmodhi4
3859 1e32 7093 0000 sts (Ki)+1,r23
3860 1e36 6093 0000 sts Ki,r22
3861 1e3a 8091 0000 lds r24,EE_Parameter+27
3862 1e3e 8093 0000 sts MAX_GAS,r24
3863 1e42 8091 0000 lds r24,EE_Parameter+26
3864 1e46 8093 0000 sts MIN_GAS,r24
3865 1e4a 9091 0000 lds r25,EE_Parameter+99
3866 1e4e 9333 cpi r25,lo8(51)
3867 1e50 00F4 brsh .+2
3868 1e52 00C0 rjmp .L306
3869 1e54 81E0 ldi r24,lo8(1)
3870 1e56 8093 0000 sts CareFree,r24
3871 1e5a 983F cpi r25,lo8(-8)
3872 1e5c 00F0 brlo .L307
3873 1e5e EFEF ldi r30,lo8(255)
3874 1e60 F0E0 ldi r31,hi8(255)
3875 1e62 E91B sub r30,r25
3876 1e64 F109 sbc r31,__zero_reg__
3877 1e66 E050 subi r30,lo8(-(Poti))
3878 1e68 F040 sbci r31,hi8(-(Poti))
3879 1e6a 8081 ld r24,Z
3880 1e6c 8233 cpi r24,lo8(50)
3881 1e6e 00F4 brsh .L307
3882 1e70 1092 0000 sts CareFree,__zero_reg__
3883 .L307:
3884 1e74 8091 0000 lds r24,carefree_old
3885 1e78 2091 0000 lds r18,CareFree
3886 1e7c 8217 cp r24,r18
3887 1e7e 01F0 breq .L308
3888 1e80 8330 cpi r24,lo8(3)
3889 1e82 00F4 brsh .L309
3890 1e84 3091 0000 lds r19,SpeakHoTT
3891 1e88 2223 tst r18
3892 1e8a 01F0 breq .L310
3893 1e8c 8CED ldi r24,lo8(1500)
3894 1e8e 95E0 ldi r25,hi8(1500)
3895 1e90 9093 0000 sts (beeptime)+1,r25
3896 1e94 8093 0000 sts beeptime,r24
3897 1e98 3323 tst r19
3898 1e9a 01F4 brne .L312
3899 1e9c 8EE2 ldi r24,lo8(46)
3900 1e9e 00C0 rjmp .L361
3901 .L310:
3902 1ea0 88EC ldi r24,lo8(200)
3903 1ea2 90E0 ldi r25,hi8(200)
3904 1ea4 9093 0000 sts (beeptime)+1,r25
3905 1ea8 8093 0000 sts beeptime,r24
3906 1eac 3323 tst r19
3907 1eae 01F4 brne .L312
3908 1eb0 87E1 ldi r24,lo8(23)
3909 .L361:
3910 1eb2 8093 0000 sts SpeakHoTT,r24
3911 .L312:
3912 1eb6 85E0 ldi r24,lo8(5)
3913 1eb8 8093 0000 sts NeueKompassRichtungMerken,r24
3914 1ebc 2093 0000 sts carefree_old,r18
3915 1ec0 00C0 rjmp .L308
3916 .L309:
3917 1ec2 8150 subi r24,lo8(-(-1))
3918 1ec4 8093 0000 sts carefree_old,r24
3919 .L308:
3920 1ec8 8091 0000 lds r24,FromNaviCtrl+7
3921 1ecc 9091 0000 lds r25,(FromNaviCtrl+7)+1
3922 1ed0 97FF sbrs r25,7
3923 1ed2 00C0 rjmp .L316
3924 1ed4 8091 0000 lds r24,CareFree
3925 1ed8 8823 tst r24
3926 1eda 01F0 breq .L316
3927 1edc 8091 0000 lds r24,VersionInfo+5
3928 1ee0 8068 ori r24,lo8(-128)
3929 1ee2 8093 0000 sts VersionInfo+5,r24
3930 1ee6 00C0 rjmp .L316
3931 .L306:
3932 1ee8 1092 0000 sts CareFree,__zero_reg__
3933 1eec 8AE0 ldi r24,lo8(10)
3934 1eee 8093 0000 sts carefree_old,r24
3935 .L316:
3936 1ef2 8091 0000 lds r24,FromNaviCtrl+7
3937 1ef6 9091 0000 lds r25,(FromNaviCtrl+7)+1
3938 1efa 97FF sbrs r25,7
3939 1efc 00C0 rjmp .L317
3940 1efe 8091 0000 lds r24,MotorenEin
3941 1f02 8823 tst r24
3942 1f04 01F0 breq .L317
3943 1f06 8091 0000 lds r24,CareFree
3944 1f0a 8823 tst r24
3945 1f0c 01F0 breq .L317
3946 1f0e 8091 0000 lds r24,BeepMuster
3947 1f12 9091 0000 lds r25,(BeepMuster)+1
3948 1f16 8F5F subi r24,lo8(-1)
3949 1f18 9F4F sbci r25,hi8(-1)
3950 1f1a 01F4 brne .L317
3951 1f1c 88E9 ldi r24,lo8(15000)
3952 1f1e 9AE3 ldi r25,hi8(15000)
3953 1f20 9093 0000 sts (beeptime)+1,r25
3954 1f24 8093 0000 sts beeptime,r24
3955 1f28 80E0 ldi r24,lo8(-23552)
3956 1f2a 94EA ldi r25,hi8(-23552)
3957 1f2c 9093 0000 sts (BeepMuster)+1,r25
3958 1f30 8093 0000 sts BeepMuster,r24
3959 1f34 1092 0000 sts CareFree,__zero_reg__
3960 .L317:
3961 1f38 8091 0000 lds r24,CareFree
3962 1f3c 8823 tst r24
3963 1f3e 01F0 breq .L318
3964 1f40 8091 0000 lds r24,FC_StatusFlags2
3965 1f44 8160 ori r24,lo8(1)
3966 1f46 8093 0000 sts FC_StatusFlags2,r24
3967 1f4a 8091 0000 lds r24,Parameter_AchsKopplung1
3968 1f4e 823D cpi r24,lo8(-46)
3969 1f50 00F4 brsh .L190
3970 1f52 825E subi r24,lo8(-(30))
3971 1f54 8093 0000 sts Parameter_AchsKopplung1,r24
3972 1f58 00C0 rjmp .L190
3973 .L318:
3974 1f5a 8091 0000 lds r24,FC_StatusFlags2
3975 1f5e 8E7F andi r24,lo8(-2)
3976 1f60 8093 0000 sts FC_StatusFlags2,r24
3977 .L190:
3978 /* epilogue: frame size=0 */
3979 1f64 DF91 pop r29
3980 1f66 CF91 pop r28
3981 1f68 0895 ret
3982 /* epilogue end (size=3) */
3983 /* function ParameterZuordnung size 772 (767) */
3985 .lcomm sollGier.0,4
3986 .lcomm tmp_long.1,4
3987 .lcomm tmp_long2.2,4
3988 .lcomm IntegralFehlerNick.3,4
3989 .lcomm IntegralFehlerRoll.4,4
3990 .lcomm RcLostTimer.5,2
3991 .lcomm delay_neutral.6,1
3992 .lcomm delay_einschalten.7,1
3993 .lcomm delay_ausschalten.8,1
3994 .lcomm move_safety_switch.9,1
3995 .lcomm ausgleichNick.10,4
3996 .lcomm ausgleichRoll.11,4
3997 .lcomm stick_nick.12,2
3998 .lcomm stick_roll.13,2
3999 .lcomm cnt.14,2
4000 .lcomm last_n_p.15,1
4001 .lcomm last_n_n.16,1
4002 .lcomm last_r_p.17,1
4003 .lcomm last_r_n.18,1
4004 .lcomm MittelIntegralNick_Alt.19,4
4005 .lcomm MittelIntegralRoll_Alt.20,4
4006 .lcomm HeightTrimming.21,2
4007 .lcomm FilterHCGas.22,2
4008 .lcomm HoverGasFilter.23,4
4009 .data
4012 delay.24:
4013 004f 64 .byte 100
4014 .lcomm BaroAtUpperLimit.25,1
4015 .lcomm BaroAtLowerLimit.26,1
4016 .text
4017 .global MotorRegler
4019 MotorRegler:
4020 /* prologue: frame size=23 */
4021 1f6a A7E1 ldi r26,lo8(23)
4022 1f6c B0E0 ldi r27,hi8(23)
4023 1f6e E0E0 ldi r30,pm_lo8(1f)
4024 1f70 F0E0 ldi r31,pm_hi8(1f)
4025 1f72 0C94 0000 jmp __prologue_saves__+0
4026 1:
4027 /* prologue end (size=6) */
4028 1f76 0E94 0000 call Mittelwert
4029 1f7a 8091 0000 lds r24,FC_StatusFlags
4030 1f7e 9927 clr r25
4031 1f80 8471 andi r24,lo8(20)
4032 1f82 9070 andi r25,hi8(20)
4033 1f84 892B or r24,r25
4034 1f86 01F4 brne .L365
4035 1f88 8091 0000 lds r24,EE_Parameter+111
4036 1f8c 82FF sbrs r24,2
4037 1f8e 00C0 rjmp .L366
4038 1f90 8091 0000 lds r24,HoverGas
4039 1f94 9091 0000 lds r25,(HoverGas)+1
4040 1f98 0097 sbiw r24,0
4041 1f9a 01F0 breq .L367
4042 1f9c 02E0 ldi r16,hi8(600)
4043 1f9e 8835 cpi r24,lo8(600)
4044 1fa0 9007 cpc r25,r16
4045 1fa2 04F4 brge .L367
4046 1fa4 9C01 movw r18,r24
4047 1fa6 97FF sbrs r25,7
4048 1fa8 00C0 rjmp .L368
4049 1faa 2D5F subi r18,lo8(-(3))
4050 1fac 3F4F sbci r19,hi8(-(3))
4051 .L368:
4052 1fae 3595 asr r19
4053 1fb0 2795 ror r18
4054 1fb2 3595 asr r19
4055 1fb4 2795 ror r18
4056 1fb6 8091 0000 lds r24,EE_Parameter+37
4057 1fba 9927 clr r25
4058 1fbc 289F mul r18,r24
4059 1fbe A001 movw r20,r0
4060 1fc0 299F mul r18,r25
4061 1fc2 500D add r21,r0
4062 1fc4 389F mul r19,r24
4063 1fc6 500D add r21,r0
4064 1fc8 1124 clr r1
4065 1fca CA01 movw r24,r20
4066 1fcc 64E6 ldi r22,lo8(100)
4067 1fce 70E0 ldi r23,hi8(100)
4068 1fd0 0E94 0000 call __divmodhi4
4069 1fd4 CB01 movw r24,r22
4070 1fd6 00C0 rjmp .L887
4071 .L367:
4072 1fd8 8DE2 ldi r24,lo8(45)
4073 1fda 90E0 ldi r25,hi8(45)
4074 1fdc 00C0 rjmp .L887
4075 .L366:
4076 1fde 8091 0000 lds r24,EE_Parameter+37
4077 1fe2 9927 clr r25
4078 .L887:
4079 1fe4 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4080 1fe8 8093 0000 sts HooverGasEmergencyPercent,r24
4081 .L365:
4082 1fec 2091 0000 lds r18,GasIsZeroCnt
4083 1ff0 3091 0000 lds r19,(GasIsZeroCnt)+1
4084 1ff4 55E7 ldi r21,hi8(30000)
4085 1ff6 2033 cpi r18,lo8(30000)
4086 1ff8 3507 cpc r19,r21
4087 1ffa 01F4 brne .L371
4088 1ffc 1092 0000 sts (StickGas)+1,__zero_reg__
4089 2000 1092 0000 sts StickGas,__zero_reg__
4090 2004 8091 0000 lds r24,MIN_GAS
4091 2008 9927 clr r25
4092 200a 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4093 200e 8093 0000 sts HooverGasEmergencyPercent,r24
4094 .L371:
4095 2012 6091 0000 lds r22,StickGas
4096 2016 7091 0000 lds r23,(StickGas)+1
4097 201a 7A83 std Y+2,r23
4098 201c 6983 std Y+1,r22
4099 201e 8091 0000 lds r24,MIN_GAS
4100 2022 9927 clr r25
4101 2024 0A96 adiw r24,10
4102 2026 6817 cp r22,r24
4103 2028 7907 cpc r23,r25
4104 202a 04F4 brge .L372
4105 202c 9A83 std Y+2,r25
4106 202e 8983 std Y+1,r24
4107 .L372:
4108 2030 8091 0000 lds r24,SenderOkay
4109 2034 8436 cpi r24,lo8(100)
4110 2036 00F0 brlo .+2
4111 2038 00C0 rjmp .L373
4112 203a 8091 0000 lds r24,FC_StatusFlags2
4113 203e 82FD sbrc r24,2
4114 2040 00C0 rjmp .L373
4115 2042 8091 0000 lds r24,RcLostTimer.5
4116 2046 9091 0000 lds r25,(RcLostTimer.5)+1
4117 204a 0097 sbiw r24,0
4118 204c 01F0 breq .L374
4119 204e 0197 sbiw r24,1
4120 2050 9093 0000 sts (RcLostTimer.5)+1,r25
4121 2054 8093 0000 sts RcLostTimer.5,r24
4122 2058 00C0 rjmp .L375
4123 .L374:
4124 205a 1092 0000 sts MotorenEin,__zero_reg__
4125 205e 9093 0000 sts (modell_fliegt)+1,r25
4126 2062 8093 0000 sts modell_fliegt,r24
4127 2066 8091 0000 lds r24,FC_StatusFlags
4128 206a 8D7E andi r24,lo8(-19)
4129 206c 8093 0000 sts FC_StatusFlags,r24
4130 .L375:
4131 2070 8091 0000 lds r24,PlatinenVersion
4132 2074 8A30 cpi r24,lo8(10)
4133 2076 01F0 breq .L377
4134 2078 8431 cpi r24,lo8(20)
4135 207a 00F0 brlo .L376
4136 .L377:
4137 207c 289A sbi 37-0x20,0
4138 207e 00C0 rjmp .L378
4139 .L376:
4140 2080 2898 cbi 37-0x20,0
4141 .L378:
4142 2082 8091 0000 lds r24,modell_fliegt
4143 2086 9091 0000 lds r25,(modell_fliegt)+1
4144 208a 895E subi r24,lo8(1001)
4145 208c 9340 sbci r25,hi8(1001)
4146 208e 00F0 brlo .L379
4147 2090 8091 0000 lds r24,Capacity+6
4148 2094 8536 cpi r24,lo8(101)
4149 2096 00F0 brlo .L379
4150 2098 8091 0000 lds r24,HooverGasEmergencyPercent
4151 209c 9091 0000 lds r25,(HooverGasEmergencyPercent)+1
4152 20a0 9A83 std Y+2,r25
4153 20a2 8983 std Y+1,r24
4154 20a4 8091 0000 lds r24,FC_StatusFlags
4155 20a8 8061 ori r24,lo8(16)
4156 20aa 8093 0000 sts FC_StatusFlags,r24
4157 20ae 8091 0000 lds r24,EE_Parameter+1
4158 20b2 A82F mov r26,r24
4159 20b4 BB27 clr r27
4160 20b6 AA0F add r26,r26
4161 20b8 BB1F adc r27,r27
4162 20ba FD01 movw r30,r26
4163 20bc E050 subi r30,lo8(-(PPM_diff))
4164 20be F040 sbci r31,hi8(-(PPM_diff))
4165 20c0 1182 std Z+1,__zero_reg__
4166 20c2 1082 st Z,__zero_reg__
4167 20c4 8091 0000 lds r24,EE_Parameter+2
4168 20c8 282F mov r18,r24
4169 20ca 3327 clr r19
4170 20cc 220F add r18,r18
4171 20ce 331F adc r19,r19
4172 20d0 C901 movw r24,r18
4173 20d2 8050 subi r24,lo8(-(PPM_diff))
4174 20d4 9040 sbci r25,hi8(-(PPM_diff))
4175 20d6 FC01 movw r30,r24
4176 20d8 1182 std Z+1,__zero_reg__
4177 20da 1082 st Z,__zero_reg__
4178 20dc A050 subi r26,lo8(-(PPM_in))
4179 20de B040 sbci r27,hi8(-(PPM_in))
4180 20e0 1196 adiw r26,1
4181 20e2 1C92 st X,__zero_reg__
4182 20e4 1E92 st -X,__zero_reg__
4183 20e6 2050 subi r18,lo8(-(PPM_in))
4184 20e8 3040 sbci r19,hi8(-(PPM_in))
4185 20ea D901 movw r26,r18
4186 20ec 1196 adiw r26,1
4187 20ee 1C92 st X,__zero_reg__
4188 20f0 1E92 st -X,__zero_reg__
4189 20f2 8091 0000 lds r24,EE_Parameter+4
4190 20f6 E82F mov r30,r24
4191 20f8 FF27 clr r31
4192 20fa EE0F add r30,r30
4193 20fc FF1F adc r31,r31
4194 20fe E050 subi r30,lo8(-(PPM_in))
4195 2100 F040 sbci r31,hi8(-(PPM_in))
4196 2102 1182 std Z+1,__zero_reg__
4197 2104 1082 st Z,__zero_reg__
4198 2106 00C0 rjmp .L381
4199 .L379:
4200 2108 1092 0000 sts MotorenEin,__zero_reg__
4201 210c 00C0 rjmp .L381
4202 .L373:
4203 210e 8091 0000 lds r24,SenderOkay
4204 2112 8D38 cpi r24,lo8(-115)
4205 2114 00F4 brsh .+2
4206 2116 00C0 rjmp .L382
4207 2118 8091 0000 lds r24,FC_StatusFlags
4208 211c 8F7E andi r24,lo8(-17)
4209 211e 8093 0000 sts FC_StatusFlags,r24
4210 2122 9091 0000 lds r25,EE_Parameter+38
4211 2126 82E3 ldi r24,lo8(50)
4212 2128 989F mul r25,r24
4213 212a C001 movw r24,r0
4214 212c 1124 clr r1
4215 212e 9093 0000 sts (RcLostTimer.5)+1,r25
4216 2132 8093 0000 sts RcLostTimer.5,r24
4217 2136 E981 ldd r30,Y+1
4218 2138 FA81 ldd r31,Y+2
4219 213a B997 sbiw r30,41
4220 213c 04F0 brlt .L383
4221 213e 8091 0000 lds r24,MotorenEin
4222 2142 8823 tst r24
4223 2144 01F0 breq .L383
4224 2146 8091 0000 lds r24,modell_fliegt
4225 214a 9091 0000 lds r25,(modell_fliegt)+1
4226 214e FFEF ldi r31,hi8(-1)
4227 2150 8F3F cpi r24,lo8(-1)
4228 2152 9F07 cpc r25,r31
4229 2154 01F0 breq .L383
4230 2156 0196 adiw r24,1
4231 2158 9093 0000 sts (modell_fliegt)+1,r25
4232 215c 8093 0000 sts modell_fliegt,r24
4233 .L383:
4234 2160 8091 0000 lds r24,modell_fliegt
4235 2164 9091 0000 lds r25,(modell_fliegt)+1
4236 2168 8F3F cpi r24,255
4237 216a 9105 cpc r25,__zero_reg__
4238 216c 01F0 breq .+2
4239 216e 00F4 brsh .L385
4240 2170 1092 0000 sts SummeNick,__zero_reg__
4241 2174 1092 0000 sts (SummeNick)+1,__zero_reg__
4242 2178 1092 0000 sts (SummeNick)+2,__zero_reg__
4243 217c 1092 0000 sts (SummeNick)+3,__zero_reg__
4244 2180 1092 0000 sts SummeRoll,__zero_reg__
4245 2184 1092 0000 sts (SummeRoll)+1,__zero_reg__
4246 2188 1092 0000 sts (SummeRoll)+2,__zero_reg__
4247 218c 1092 0000 sts (SummeRoll)+3,__zero_reg__
4248 2190 1092 0000 sts sollGier.0,__zero_reg__
4249 2194 1092 0000 sts (sollGier.0)+1,__zero_reg__
4250 2198 1092 0000 sts (sollGier.0)+2,__zero_reg__
4251 219c 1092 0000 sts (sollGier.0)+3,__zero_reg__
4252 21a0 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4253 21a4 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4254 21a8 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4255 21ac 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4256 21b0 00C0 rjmp .L386
4257 .L385:
4258 21b2 8091 0000 lds r24,FC_StatusFlags
4259 21b6 8260 ori r24,lo8(2)
4260 21b8 8093 0000 sts FC_StatusFlags,r24
4261 .L386:
4262 21bc 8091 0000 lds r24,EE_Parameter+3
4263 21c0 E82F mov r30,r24
4264 21c2 FF27 clr r31
4265 21c4 EE0F add r30,r30
4266 21c6 FF1F adc r31,r31
4267 21c8 E050 subi r30,lo8(-(PPM_in))
4268 21ca F040 sbci r31,hi8(-(PPM_in))
4269 21cc 8081 ld r24,Z
4270 21ce 9181 ldd r25,Z+1
4271 21d0 8135 cpi r24,81
4272 21d2 9105 cpc r25,__zero_reg__
4273 21d4 04F4 brge .+2
4274 21d6 00C0 rjmp .L387
4275 21d8 2091 0000 lds r18,MotorenEin
4276 21dc 2223 tst r18
4277 21de 01F0 breq .+2
4278 21e0 00C0 rjmp .L387
4279 21e2 8091 0000 lds r24,EE_Parameter+4
4280 21e6 E82F mov r30,r24
4281 21e8 FF27 clr r31
4282 21ea EE0F add r30,r30
4283 21ec FF1F adc r31,r31
4284 21ee E050 subi r30,lo8(-(PPM_in))
4285 21f0 F040 sbci r31,hi8(-(PPM_in))
4286 21f2 8081 ld r24,Z
4287 21f4 9181 ldd r25,Z+1
4288 21f6 8C34 cpi r24,76
4289 21f8 9105 cpc r25,__zero_reg__
4290 21fa 04F4 brge .+2
4291 21fc 00C0 rjmp .L388
4292 21fe 8091 0000 lds r24,delay_neutral.6
4293 2202 8F5F subi r24,lo8(-(1))
4294 2204 8093 0000 sts delay_neutral.6,r24
4295 2208 893C cpi r24,lo8(-55)
4296 220a 00F4 brsh .+2
4297 220c 00C0 rjmp .L387
4298 220e 2093 0000 sts delay_neutral.6,r18
4299 2212 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4300 2216 1092 0000 sts modell_fliegt,__zero_reg__
4301 221a 3091 0000 lds r19,EE_Parameter+1
4302 221e E32F mov r30,r19
4303 2220 FF27 clr r31
4304 2222 EE0F add r30,r30
4305 2224 FF1F adc r31,r31
4306 2226 E050 subi r30,lo8(-(PPM_in))
4307 2228 F040 sbci r31,hi8(-(PPM_in))
4308 222a 8081 ld r24,Z
4309 222c 9181 ldd r25,Z+1
4310 222e 8734 cpi r24,71
4311 2230 9105 cpc r25,__zero_reg__
4312 2232 04F4 brge .L391
4313 2234 8091 0000 lds r24,EE_Parameter+2
4314 2238 E82F mov r30,r24
4315 223a FF27 clr r31
4316 223c EE0F add r30,r30
4317 223e FF1F adc r31,r31
4318 2240 E050 subi r30,lo8(-(PPM_in))
4319 2242 F040 sbci r31,hi8(-(PPM_in))
4320 2244 8081 ld r24,Z
4321 2246 9181 ldd r25,Z+1
4322 2248 0190 ld __tmp_reg__,Z+
4323 224a F081 ld r31,Z
4324 224c E02D mov r30,__tmp_reg__
4325 224e F7FF sbrs r31,7
4326 2250 00C0 rjmp .L392
4327 2252 F095 com r31
4328 2254 E195 neg r30
4329 2256 FF4F sbci r31,lo8(-1)
4330 .L392:
4331 2258 E734 cpi r30,71
4332 225a F105 cpc r31,__zero_reg__
4333 225c 04F4 brge .+2
4334 225e 00C0 rjmp .L390
4335 .L391:
4336 2260 41E0 ldi r20,lo8(1)
4337 2262 2091 0000 lds r18,EE_Parameter+2
4338 2266 A22F mov r26,r18
4339 2268 BB27 clr r27
4340 226a AA0F add r26,r26
4341 226c BB1F adc r27,r27
4342 226e A050 subi r26,lo8(-(PPM_in))
4343 2270 B040 sbci r27,hi8(-(PPM_in))
4344 2272 8D91 ld r24,X+
4345 2274 9C91 ld r25,X
4346 2276 1197 sbiw r26,1
4347 2278 8734 cpi r24,71
4348 227a 9105 cpc r25,__zero_reg__
4349 227c 04F0 brlt .L393
4350 227e E32F mov r30,r19
4351 2280 FF27 clr r31
4352 2282 EE0F add r30,r30
4353 2284 FF1F adc r31,r31
4354 2286 E050 subi r30,lo8(-(PPM_in))
4355 2288 F040 sbci r31,hi8(-(PPM_in))
4356 228a 8081 ld r24,Z
4357 228c 9181 ldd r25,Z+1
4358 .L393:
4359 228e 8D91 ld r24,X+
4360 2290 9C91 ld r25,X
4361 2292 8734 cpi r24,71
4362 2294 9105 cpc r25,__zero_reg__
4363 2296 04F0 brlt .L394
4364 2298 8091 0000 lds r24,EE_Parameter+1
4365 229c E82F mov r30,r24
4366 229e FF27 clr r31
4367 22a0 EE0F add r30,r30
4368 22a2 FF1F adc r31,r31
4369 22a4 E050 subi r30,lo8(-(PPM_in))
4370 22a6 F040 sbci r31,hi8(-(PPM_in))
4371 22a8 8081 ld r24,Z
4372 22aa 9181 ldd r25,Z+1
4373 22ac 8734 cpi r24,71
4374 22ae 9105 cpc r25,__zero_reg__
4375 22b0 04F0 brlt .L394
4376 22b2 42E0 ldi r20,lo8(2)
4377 .L394:
4378 22b4 E22F mov r30,r18
4379 22b6 FF27 clr r31
4380 22b8 EE0F add r30,r30
4381 22ba FF1F adc r31,r31
4382 22bc E050 subi r30,lo8(-(PPM_in))
4383 22be F040 sbci r31,hi8(-(PPM_in))
4384 22c0 8081 ld r24,Z
4385 22c2 9181 ldd r25,Z+1
4386 22c4 8634 cpi r24,70
4387 22c6 9105 cpc r25,__zero_reg__
4388 22c8 04F4 brge .L395
4389 22ca 8091 0000 lds r24,EE_Parameter+1
4390 22ce E82F mov r30,r24
4391 22d0 FF27 clr r31
4392 22d2 EE0F add r30,r30
4393 22d4 FF1F adc r31,r31
4394 22d6 E050 subi r30,lo8(-(PPM_in))
4395 22d8 F040 sbci r31,hi8(-(PPM_in))
4396 22da 8081 ld r24,Z
4397 22dc 9181 ldd r25,Z+1
4398 22de 8734 cpi r24,71
4399 22e0 9105 cpc r25,__zero_reg__
4400 22e2 04F0 brlt .L395
4401 22e4 43E0 ldi r20,lo8(3)
4402 .L395:
4403 22e6 E22F mov r30,r18
4404 22e8 FF27 clr r31
4405 22ea EE0F add r30,r30
4406 22ec FF1F adc r31,r31
4407 22ee E050 subi r30,lo8(-(PPM_in))
4408 22f0 F040 sbci r31,hi8(-(PPM_in))
4409 22f2 8081 ld r24,Z
4410 22f4 9181 ldd r25,Z+1
4411 22f6 8A5B subi r24,lo8(-70)
4412 22f8 9F4F sbci r25,hi8(-70)
4413 22fa 04F4 brge .L396
4414 22fc 8091 0000 lds r24,EE_Parameter+1
4415 2300 E82F mov r30,r24
4416 2302 FF27 clr r31
4417 2304 EE0F add r30,r30
4418 2306 FF1F adc r31,r31
4419 2308 E050 subi r30,lo8(-(PPM_in))
4420 230a F040 sbci r31,hi8(-(PPM_in))
4421 230c 8081 ld r24,Z
4422 230e 9181 ldd r25,Z+1
4423 2310 8734 cpi r24,71
4424 2312 9105 cpc r25,__zero_reg__
4425 2314 04F0 brlt .L396
4426 2316 44E0 ldi r20,lo8(4)
4427 .L396:
4428 2318 E22F mov r30,r18
4429 231a FF27 clr r31
4430 231c EE0F add r30,r30
4431 231e FF1F adc r31,r31
4432 2320 E050 subi r30,lo8(-(PPM_in))
4433 2322 F040 sbci r31,hi8(-(PPM_in))
4434 2324 8081 ld r24,Z
4435 2326 9181 ldd r25,Z+1
4436 2328 8A5B subi r24,lo8(-70)
4437 232a 9F4F sbci r25,hi8(-70)
4438 232c 04F4 brge .L397
4439 232e 8091 0000 lds r24,EE_Parameter+1
4440 2332 E82F mov r30,r24
4441 2334 FF27 clr r31
4442 2336 EE0F add r30,r30
4443 2338 FF1F adc r31,r31
4444 233a E050 subi r30,lo8(-(PPM_in))
4445 233c F040 sbci r31,hi8(-(PPM_in))
4446 233e 8081 ld r24,Z
4447 2340 9181 ldd r25,Z+1
4448 2342 8634 cpi r24,70
4449 2344 9105 cpc r25,__zero_reg__
4450 2346 04F4 brge .L397
4451 2348 45E0 ldi r20,lo8(5)
4452 .L397:
4453 234a 842F mov r24,r20
4454 234c 0E94 0000 call SetActiveParamSet
4455 .L390:
4456 2350 8091 0000 lds r24,EE_Parameter+2
4457 2354 E82F mov r30,r24
4458 2356 FF27 clr r31
4459 2358 EE0F add r30,r30
4460 235a FF1F adc r31,r31
4461 235c E050 subi r30,lo8(-(PPM_in))
4462 235e F040 sbci r31,hi8(-(PPM_in))
4463 2360 8081 ld r24,Z
4464 2362 9181 ldd r25,Z+1
4465 2364 0190 ld __tmp_reg__,Z+
4466 2366 F081 ld r31,Z
4467 2368 E02D mov r30,__tmp_reg__
4468 236a F7FF sbrs r31,7
4469 236c 00C0 rjmp .L399
4470 236e F095 com r31
4471 2370 E195 neg r30
4472 2372 FF4F sbci r31,lo8(-1)
4473 .L399:
4474 2374 7E97 sbiw r30,30
4475 2376 04F4 brge .L398
4476 2378 8091 0000 lds r24,EE_Parameter+1
4477 237c E82F mov r30,r24
4478 237e FF27 clr r31
4479 2380 EE0F add r30,r30
4480 2382 FF1F adc r31,r31
4481 2384 E050 subi r30,lo8(-(PPM_in))
4482 2386 F040 sbci r31,hi8(-(PPM_in))
4483 2388 8081 ld r24,Z
4484 238a 9181 ldd r25,Z+1
4485 238c 8A5B subi r24,lo8(-70)
4486 238e 9F4F sbci r25,hi8(-70)
4487 2390 04F4 brge .L398
4488 2392 81E0 ldi r24,lo8(1)
4489 2394 8093 0000 sts WinkelOut+6,r24
4490 2398 1092 0000 sts CalibrationDone,__zero_reg__
4491 239c 88EE ldi r24,lo8(1000)
4492 239e 93E0 ldi r25,hi8(1000)
4493 23a0 9093 0000 sts (beeptime)+1,r25
4494 23a4 8093 0000 sts beeptime,r24
4495 23a8 00C0 rjmp .L387
4496 .L398:
4497 23aa 0E94 0000 call GetActiveParamSet
4498 23ae 0E94 0000 call ParamSet_ReadFromEEProm
4499 23b2 80E0 ldi r24,lo8(0)
4500 23b4 0E94 0000 call LipoDetection
4501 23b8 8091 0000 lds r24,EE_Parameter+39
4502 23bc 0E94 0000 call LIBFC_ReceiverInit
4503 23c0 8091 0000 lds r24,Parameter_GlobalConfig
4504 23c4 80FF sbrs r24,0
4505 23c6 00C0 rjmp .L401
4506 23c8 8091 0000 lds r24,MessLuftdruck
4507 23cc 9091 0000 lds r25,(MessLuftdruck)+1
4508 23d0 875B subi r24,lo8(951)
4509 23d2 9340 sbci r25,hi8(951)
4510 23d4 00F4 brsh .L403
4511 23d6 8091 0000 lds r24,MessLuftdruck
4512 23da 9091 0000 lds r25,(MessLuftdruck)+1
4513 23de 8E5E subi r24,lo8(750)
4514 23e0 9240 sbci r25,hi8(750)
4515 23e2 00F4 brsh .L401
4516 .L403:
4517 23e4 0E94 0000 call SucheLuftruckOffset
4518 .L401:
4519 23e8 80E0 ldi r24,lo8(0)
4520 23ea 0E94 0000 call SetNeutral
4521 23ee 81E0 ldi r24,lo8(1)
4522 23f0 8093 0000 sts CalibrationDone,r24
4523 23f4 8093 0000 sts ServoActive,r24
4524 23f8 579A sbi 42-0x20,7
4525 23fa 00C0 rjmp .L888
4526 .L388:
4527 23fc 8081 ld r24,Z
4528 23fe 9181 ldd r25,Z+1
4529 2400 855B subi r24,lo8(-75)
4530 2402 9F4F sbci r25,hi8(-75)
4531 2404 04F4 brge .L405
4532 2406 8091 0000 lds r24,delay_neutral.6
4533 240a 8F5F subi r24,lo8(-(1))
4534 240c 8093 0000 sts delay_neutral.6,r24
4535 2410 893C cpi r24,lo8(-55)
4536 2412 00F0 brlo .L387
4537 2414 2093 0000 sts MotorenEin,r18
4538 2418 2093 0000 sts delay_neutral.6,r18
4539 241c 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4540 2420 1092 0000 sts modell_fliegt,__zero_reg__
4541 2424 81E0 ldi r24,lo8(1)
4542 2426 0E94 0000 call SetNeutral
4543 242a 81E0 ldi r24,lo8(1)
4544 242c 8093 0000 sts CalibrationDone,r24
4545 .L888:
4546 2430 88E1 ldi r24,lo8(24)
4547 2432 8093 0000 sts SpeakHoTT,r24
4548 2436 0E94 0000 call GetActiveParamSet
4549 243a 68E7 ldi r22,lo8(120)
4550 243c 70E0 ldi r23,hi8(120)
4551 243e 0E94 0000 call Piep
4552 2442 00C0 rjmp .L387
4553 .L405:
4554 2444 2093 0000 sts delay_neutral.6,r18
4555 .L387:
4556 2448 8091 0000 lds r24,EE_Parameter+3
4557 244c E82F mov r30,r24
4558 244e FF27 clr r31
4559 2450 EE0F add r30,r30
4560 2452 FF1F adc r31,r31
4561 2454 E050 subi r30,lo8(-(PPM_in))
4562 2456 F040 sbci r31,hi8(-(PPM_in))
4563 2458 8081 ld r24,Z
4564 245a 9181 ldd r25,Z+1
4565 245c 8B5A subi r24,lo8(-85)
4566 245e 9F4F sbci r25,hi8(-85)
4567 2460 04F0 brlt .+2
4568 2462 00C0 rjmp .L408
4569 2464 2091 0000 lds r18,EE_Parameter+100
4570 2468 E22F mov r30,r18
4571 246a FF27 clr r31
4572 246c EF77 andi r30,lo8(127)
4573 246e F070 andi r31,hi8(127)
4574 2470 EE0F add r30,r30
4575 2472 FF1F adc r31,r31
4576 2474 E050 subi r30,lo8(-(PPM_diff))
4577 2476 F040 sbci r31,hi8(-(PPM_diff))
4578 2478 8081 ld r24,Z
4579 247a 9181 ldd r25,Z+1
4580 247c 0697 sbiw r24,6
4581 247e 04F0 brlt .L409
4582 2480 84E6 ldi r24,lo8(100)
4583 2482 00C0 rjmp .L889
4584 .L409:
4585 2484 8081 ld r24,Z
4586 2486 9181 ldd r25,Z+1
4587 2488 8B5F subi r24,lo8(-5)
4588 248a 9F4F sbci r25,hi8(-5)
4589 248c 04F4 brge .L410
4590 248e 8CE9 ldi r24,lo8(-100)
4591 .L889:
4592 2490 8093 0000 sts move_safety_switch.9,r24
4593 .L410:
4594 2494 8091 0000 lds r24,MotorenEin
4595 2498 E091 0000 lds r30,EE_Parameter+4
4596 249c 8823 tst r24
4597 249e 01F0 breq .+2
4598 24a0 00C0 rjmp .L412
4599 24a2 FF27 clr r31
4600 24a4 EE0F add r30,r30
4601 24a6 FF1F adc r31,r31
4602 24a8 E050 subi r30,lo8(-(PPM_in))
4603 24aa F040 sbci r31,hi8(-(PPM_in))
4604 24ac 8081 ld r24,Z
4605 24ae 9181 ldd r25,Z+1
4606 24b0 855B subi r24,lo8(-75)
4607 24b2 9F4F sbci r25,hi8(-75)
4608 24b4 04F4 brge .L415
4609 24b6 8091 0000 lds r24,EE_Parameter+111
4610 24ba 83FD sbrc r24,3
4611 24bc 00C0 rjmp .L416
4612 24be E22F mov r30,r18
4613 24c0 FF27 clr r31
4614 24c2 EE0F add r30,r30
4615 24c4 FF1F adc r31,r31
4616 24c6 E050 subi r30,lo8(-(PPM_in))
4617 24c8 F040 sbci r31,hi8(-(PPM_in))
4618 24ca 8081 ld r24,Z
4619 24cc 9181 ldd r25,Z+1
4620 24ce 855B subi r24,lo8(-75)
4621 24d0 9F4F sbci r25,hi8(-75)
4622 24d2 04F0 brlt .L414
4623 .L416:
4624 24d4 8091 0000 lds r24,EE_Parameter+100
4625 24d8 8823 tst r24
4626 24da 01F0 breq .L414
4627 .L415:
4628 24dc 8091 0000 lds r24,EE_Parameter+111
4629 24e0 83FF sbrs r24,3
4630 24e2 00C0 rjmp .L413
4631 24e4 8091 0000 lds r24,EE_Parameter+100
4632 24e8 E82F mov r30,r24
4633 24ea FF27 clr r31
4634 24ec EE0F add r30,r30
4635 24ee FF1F adc r31,r31
4636 24f0 E050 subi r30,lo8(-(PPM_in))
4637 24f2 F040 sbci r31,hi8(-(PPM_in))
4638 24f4 8081 ld r24,Z
4639 24f6 9181 ldd r25,Z+1
4640 24f8 875F subi r24,lo8(-9)
4641 24fa 9F4F sbci r25,hi8(-9)
4642 24fc 04F4 brge .+2
4643 24fe 00C0 rjmp .L413
4644 2500 8091 0000 lds r24,move_safety_switch.9
4645 2504 8436 cpi r24,lo8(100)
4646 2506 01F0 breq .+2
4647 2508 00C0 rjmp .L413
4648 .L414:
4649 250a 2091 0000 lds r18,CalibrationDone
4650 250e 2223 tst r18
4651 2510 01F0 breq .L417
4652 2512 8091 0000 lds r24,FC_StatusFlags
4653 2516 8860 ori r24,lo8(8)
4654 2518 8093 0000 sts FC_StatusFlags,r24
4655 .L417:
4656 251c 8091 0000 lds r24,delay_einschalten.7
4657 2520 8F5F subi r24,lo8(-(1))
4658 2522 8093 0000 sts delay_einschalten.7,r24
4659 2526 8E3F cpi r24,lo8(-2)
4660 2528 00F4 brsh .+2
4661 252a 00C0 rjmp .L423
4662 252c 1092 0000 sts delay_einschalten.7,__zero_reg__
4663 2530 8091 0000 lds r24,VersionInfo+5
4664 2534 8823 tst r24
4665 2536 01F0 breq .+2
4666 2538 00C0 rjmp .L419
4667 253a 2223 tst r18
4668 253c 01F4 brne .+2
4669 253e 00C0 rjmp .L419
4670 2540 8091 0000 lds r24,NC_ErrorCode
4671 2544 8823 tst r24
4672 2546 01F0 breq .+2
4673 2548 00C0 rjmp .L419
4674 254a 81E0 ldi r24,lo8(1)
4675 254c 90E0 ldi r25,hi8(1)
4676 254e 9093 0000 sts (modell_fliegt)+1,r25
4677 2552 8093 0000 sts modell_fliegt,r24
4678 2556 81E0 ldi r24,lo8(1)
4679 2558 8093 0000 sts MotorenEin,r24
4680 255c 1092 0000 sts sollGier.0,__zero_reg__
4681 2560 1092 0000 sts (sollGier.0)+1,__zero_reg__
4682 2564 1092 0000 sts (sollGier.0)+2,__zero_reg__
4683 2568 1092 0000 sts (sollGier.0)+3,__zero_reg__
4684 256c 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4685 2570 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4686 2574 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4687 2578 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4688 257c 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
4689 2580 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
4690 2584 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
4691 2588 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
4692 258c 8091 0000 lds r24,EE_Parameter+28
4693 2590 E82E mov r14,r24
4694 2592 FF24 clr r15
4695 2594 0027 clr r16
4696 2596 1127 clr r17
4697 2598 8091 0000 lds r24,Mittelwert_AccNick
4698 259c 9091 0000 lds r25,(Mittelwert_AccNick)+1
4699 25a0 9C01 movw r18,r24
4700 25a2 4427 clr r20
4701 25a4 37FD sbrc r19,7
4702 25a6 4095 com r20
4703 25a8 542F mov r21,r20
4704 25aa C801 movw r24,r16
4705 25ac B701 movw r22,r14
4706 25ae 0E94 0000 call __mulsi3
4707 25b2 DC01 movw r26,r24
4708 25b4 CB01 movw r24,r22
4709 25b6 8093 0000 sts Mess_IntegralNick,r24
4710 25ba 9093 0000 sts (Mess_IntegralNick)+1,r25
4711 25be A093 0000 sts (Mess_IntegralNick)+2,r26
4712 25c2 B093 0000 sts (Mess_IntegralNick)+3,r27
4713 25c6 8091 0000 lds r24,Mittelwert_AccRoll
4714 25ca 9091 0000 lds r25,(Mittelwert_AccRoll)+1
4715 25ce 9C01 movw r18,r24
4716 25d0 4427 clr r20
4717 25d2 37FD sbrc r19,7
4718 25d4 4095 com r20
4719 25d6 542F mov r21,r20
4720 25d8 C801 movw r24,r16
4721 25da B701 movw r22,r14
4722 25dc 0E94 0000 call __mulsi3
4723 25e0 DC01 movw r26,r24
4724 25e2 CB01 movw r24,r22
4725 25e4 8093 0000 sts Mess_IntegralRoll,r24
4726 25e8 9093 0000 sts (Mess_IntegralRoll)+1,r25
4727 25ec A093 0000 sts (Mess_IntegralRoll)+2,r26
4728 25f0 B093 0000 sts (Mess_IntegralRoll)+3,r27
4729 25f4 8091 0000 lds r24,IntegralNick
4730 25f8 9091 0000 lds r25,(IntegralNick)+1
4731 25fc A091 0000 lds r26,(IntegralNick)+2
4732 2600 B091 0000 lds r27,(IntegralNick)+3
4733 2604 8093 0000 sts Mess_IntegralNick2,r24
4734 2608 9093 0000 sts (Mess_IntegralNick2)+1,r25
4735 260c A093 0000 sts (Mess_IntegralNick2)+2,r26
4736 2610 B093 0000 sts (Mess_IntegralNick2)+3,r27
4737 2614 8091 0000 lds r24,IntegralRoll
4738 2618 9091 0000 lds r25,(IntegralRoll)+1
4739 261c A091 0000 lds r26,(IntegralRoll)+2
4740 2620 B091 0000 lds r27,(IntegralRoll)+3
4741 2624 8093 0000 sts Mess_IntegralRoll2,r24
4742 2628 9093 0000 sts (Mess_IntegralRoll2)+1,r25
4743 262c A093 0000 sts (Mess_IntegralRoll2)+2,r26
4744 2630 B093 0000 sts (Mess_IntegralRoll2)+3,r27
4745 2634 1092 0000 sts SummeNick,__zero_reg__
4746 2638 1092 0000 sts (SummeNick)+1,__zero_reg__
4747 263c 1092 0000 sts (SummeNick)+2,__zero_reg__
4748 2640 1092 0000 sts (SummeNick)+3,__zero_reg__
4749 2644 1092 0000 sts SummeRoll,__zero_reg__
4750 2648 1092 0000 sts (SummeRoll)+1,__zero_reg__
4751 264c 1092 0000 sts (SummeRoll)+2,__zero_reg__
4752 2650 1092 0000 sts (SummeRoll)+3,__zero_reg__
4753 2654 84E6 ldi r24,lo8(100)
4754 2656 8093 0000 sts NeueKompassRichtungMerken,r24
4755 265a 84E3 ldi r24,lo8(52)
4756 265c 00C0 rjmp .L890
4757 .L419:
4758 265e 8CED ldi r24,lo8(1500)
4759 2660 95E0 ldi r25,hi8(1500)
4760 2662 9093 0000 sts (beeptime)+1,r25
4761 2666 8093 0000 sts beeptime,r24
4762 266a 2223 tst r18
4763 266c 01F0 breq .+2
4764 266e 00C0 rjmp .L423
4765 2670 81E0 ldi r24,lo8(1)
4766 2672 00C0 rjmp .L890
4767 .L413:
4768 2674 1092 0000 sts delay_einschalten.7,__zero_reg__
4769 2678 00C0 rjmp .L423
4770 .L412:
4771 267a FF27 clr r31
4772 267c EE0F add r30,r30
4773 267e FF1F adc r31,r31
4774 2680 E050 subi r30,lo8(-(PPM_in))
4775 2682 F040 sbci r31,hi8(-(PPM_in))
4776 2684 8081 ld r24,Z
4777 2686 9181 ldd r25,Z+1
4778 2688 8C34 cpi r24,76
4779 268a 9105 cpc r25,__zero_reg__
4780 268c 04F0 brlt .L426
4781 268e 8091 0000 lds r24,EE_Parameter+111
4782 2692 83FD sbrc r24,3
4783 2694 00C0 rjmp .L427
4784 2696 E22F mov r30,r18
4785 2698 FF27 clr r31
4786 269a EE0F add r30,r30
4787 269c FF1F adc r31,r31
4788 269e E050 subi r30,lo8(-(PPM_in))
4789 26a0 F040 sbci r31,hi8(-(PPM_in))
4790 26a2 8081 ld r24,Z
4791 26a4 9181 ldd r25,Z+1
4792 26a6 855B subi r24,lo8(-75)
4793 26a8 9F4F sbci r25,hi8(-75)
4794 26aa 04F0 brlt .L425
4795 .L427:
4796 26ac 8091 0000 lds r24,EE_Parameter+100
4797 26b0 8823 tst r24
4798 26b2 01F0 breq .L425
4799 .L426:
4800 26b4 8091 0000 lds r24,EE_Parameter+111
4801 26b8 83FF sbrs r24,3
4802 26ba 00C0 rjmp .L424
4803 26bc 8091 0000 lds r24,EE_Parameter+100
4804 26c0 E82F mov r30,r24
4805 26c2 FF27 clr r31
4806 26c4 EE0F add r30,r30
4807 26c6 FF1F adc r31,r31
4808 26c8 E050 subi r30,lo8(-(PPM_in))
4809 26ca F040 sbci r31,hi8(-(PPM_in))
4810 26cc 8081 ld r24,Z
4811 26ce 9181 ldd r25,Z+1
4812 26d0 8E5C subi r24,lo8(-50)
4813 26d2 9F4F sbci r25,hi8(-50)
4814 26d4 04F4 brge .L424
4815 26d6 8091 0000 lds r24,move_safety_switch.9
4816 26da 8C39 cpi r24,lo8(-100)
4817 26dc 01F4 brne .L424
4818 .L425:
4819 26de 8091 0000 lds r24,delay_ausschalten.8
4820 26e2 8F5F subi r24,lo8(-(1))
4821 26e4 8093 0000 sts delay_ausschalten.8,r24
4822 26e8 8B3F cpi r24,lo8(-5)
4823 26ea 00F0 brlo .L423
4824 26ec 1092 0000 sts MotorenEin,__zero_reg__
4825 26f0 1092 0000 sts delay_ausschalten.8,__zero_reg__
4826 26f4 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4827 26f8 1092 0000 sts modell_fliegt,__zero_reg__
4828 26fc 86E2 ldi r24,lo8(38)
4829 .L890:
4830 26fe 8093 0000 sts SpeakHoTT,r24
4831 2702 00C0 rjmp .L423
4832 .L424:
4833 2704 1092 0000 sts delay_ausschalten.8,__zero_reg__
4834 .L423:
4835 2708 8091 0000 lds r24,GasIsZeroCnt
4836 270c 9091 0000 lds r25,(GasIsZeroCnt)+1
4837 2710 13E0 ldi r17,hi8(1000)
4838 2712 883E cpi r24,lo8(1000)
4839 2714 9107 cpc r25,r17
4840 2716 00F4 brsh .L381
4841 2718 0196 adiw r24,1
4842 271a 9093 0000 sts (GasIsZeroCnt)+1,r25
4843 271e 8093 0000 sts GasIsZeroCnt,r24
4844 2722 00C0 rjmp .L381
4845 .L408:
4846 2724 1092 0000 sts move_safety_switch.9,__zero_reg__
4847 2728 1092 0000 sts (GasIsZeroCnt)+1,__zero_reg__
4848 272c 1092 0000 sts GasIsZeroCnt,__zero_reg__
4849 2730 00C0 rjmp .L381
4850 .L382:
4851 2732 2E5E subi r18,lo8(750)
4852 2734 3240 sbci r19,hi8(750)
4853 2736 00F0 brlo .L381
4854 2738 8091 0000 lds r24,GPSInfo+4
4855 273c 9091 0000 lds r25,(GPSInfo+4)+1
4856 2740 8059 subi r24,lo8(400)
4857 2742 9140 sbci r25,hi8(400)
4858 2744 00F4 brsh .L381
4859 2746 8091 0000 lds r24,HoehenWert
4860 274a 9091 0000 lds r25,(HoehenWert)+1
4861 274e A091 0000 lds r26,(HoehenWert)+2
4862 2752 B091 0000 lds r27,(HoehenWert)+3
4863 2756 8C5D subi r24,lo8(1500)
4864 2758 9540 sbci r25,hi8(1500)
4865 275a A040 sbci r26,hlo8(1500)
4866 275c B040 sbci r27,hhi8(1500)
4867 275e 04F4 brge .L381
4868 2760 80E3 ldi r24,lo8(30000)
4869 2762 95E7 ldi r25,hi8(30000)
4870 2764 9093 0000 sts (GasIsZeroCnt)+1,r25
4871 2768 8093 0000 sts GasIsZeroCnt,r24
4872 276c 8091 0000 lds r24,modell_fliegt
4873 2770 9091 0000 lds r25,(modell_fliegt)+1
4874 2774 8A5E subi r24,lo8(1002)
4875 2776 9340 sbci r25,hi8(1002)
4876 2778 00F0 brlo .L381
4877 277a 89EE ldi r24,lo8(1001)
4878 277c 93E0 ldi r25,hi8(1001)
4879 277e 9093 0000 sts (modell_fliegt)+1,r25
4880 2782 8093 0000 sts modell_fliegt,r24
4881 .L381:
4882 2786 8091 0000 lds r24,NewPpmData
4883 278a 8150 subi r24,lo8(-(-1))
4884 278c 8093 0000 sts NewPpmData,r24
4885 2790 8091 0000 lds r24,NewPpmData
4886 2794 8F3F cpi r24,lo8(-1)
4887 2796 01F0 breq .L437
4888 2798 8091 0000 lds r24,FC_StatusFlags
4889 279c 84FF sbrs r24,4
4890 279e 00C0 rjmp .L436
4891 .L437:
4892 27a0 0E94 0000 call ParameterZuordnung
4893 27a4 B090 0000 lds r11,EE_Parameter+23
4894 27a8 8091 0000 lds r24,stick_nick.12
4895 27ac 9091 0000 lds r25,(stick_nick.12)+1
4896 27b0 9C01 movw r18,r24
4897 27b2 220F lsl r18
4898 27b4 331F rol r19
4899 27b6 280F add r18,r24
4900 27b8 391F adc r19,r25
4901 27ba C090 0000 lds r12,EE_Parameter+1
4902 27be AC2D mov r26,r12
4903 27c0 BB27 clr r27
4904 27c2 AA0F add r26,r26
4905 27c4 BB1F adc r27,r27
4906 27c6 FD01 movw r30,r26
4907 27c8 E050 subi r30,lo8(-(PPM_in))
4908 27ca F040 sbci r31,hi8(-(PPM_in))
4909 27cc 4B2D mov r20,r11
4910 27ce 5527 clr r21
4911 27d0 8081 ld r24,Z
4912 27d2 9181 ldd r25,Z+1
4913 27d4 849F mul r24,r20
4914 27d6 F001 movw r30,r0
4915 27d8 859F mul r24,r21
4916 27da F00D add r31,r0
4917 27dc 949F mul r25,r20
4918 27de F00D add r31,r0
4919 27e0 1124 clr r1
4920 27e2 2E0F add r18,r30
4921 27e4 3F1F adc r19,r31
4922 27e6 37FF sbrs r19,7
4923 27e8 00C0 rjmp .L438
4924 27ea 2D5F subi r18,lo8(-(3))
4925 27ec 3F4F sbci r19,hi8(-(3))
4926 .L438:
4927 27ee B901 movw r22,r18
4928 27f0 7595 asr r23
4929 27f2 6795 ror r22
4930 27f4 7595 asr r23
4931 27f6 6795 ror r22
4932 27f8 A050 subi r26,lo8(-(PPM_diff))
4933 27fa B040 sbci r27,hi8(-(PPM_diff))
4934 27fc 8091 0000 lds r24,EE_Parameter+24
4935 2800 082F mov r16,r24
4936 2802 1127 clr r17
4937 2804 8D91 ld r24,X+
4938 2806 9C91 ld r25,X
4939 2808 809F mul r24,r16
4940 280a 7001 movw r14,r0
4941 280c 819F mul r24,r17
4942 280e F00C add r15,r0
4943 2810 909F mul r25,r16
4944 2812 F00C add r15,r0
4945 2814 1124 clr r1
4946 2816 6E0D add r22,r14
4947 2818 7F1D adc r23,r15
4948 281a 7093 0000 sts (stick_nick.12)+1,r23
4949 281e 6093 0000 sts stick_nick.12,r22
4950 2822 8091 0000 lds r24,stick_roll.13
4951 2826 9091 0000 lds r25,(stick_roll.13)+1
4952 282a 9C01 movw r18,r24
4953 282c 220F lsl r18
4954 282e 331F rol r19
4955 2830 280F add r18,r24
4956 2832 391F adc r19,r25
4957 2834 D090 0000 lds r13,EE_Parameter+2
4958 2838 AD2D mov r26,r13
4959 283a BB27 clr r27
4960 283c AA0F add r26,r26
4961 283e BB1F adc r27,r27
4962 2840 FD01 movw r30,r26
4963 2842 E050 subi r30,lo8(-(PPM_in))
4964 2844 F040 sbci r31,hi8(-(PPM_in))
4965 2846 8081 ld r24,Z
4966 2848 9181 ldd r25,Z+1
4967 284a 849F mul r24,r20
4968 284c F001 movw r30,r0
4969 284e 859F mul r24,r21
4970 2850 F00D add r31,r0
4971 2852 949F mul r25,r20
4972 2854 F00D add r31,r0
4973 2856 1124 clr r1
4974 2858 2E0F add r18,r30
4975 285a 3F1F adc r19,r31
4976 285c 37FF sbrs r19,7
4977 285e 00C0 rjmp .L439
4978 2860 2D5F subi r18,lo8(-(3))
4979 2862 3F4F sbci r19,hi8(-(3))
4980 .L439:
4981 2864 A901 movw r20,r18
4982 2866 5595 asr r21
4983 2868 4795 ror r20
4984 286a 5595 asr r21
4985 286c 4795 ror r20
4986 286e A050 subi r26,lo8(-(PPM_diff))
4987 2870 B040 sbci r27,hi8(-(PPM_diff))
4988 2872 8D91 ld r24,X+
4989 2874 9C91 ld r25,X
4990 2876 809F mul r24,r16
4991 2878 7001 movw r14,r0
4992 287a 819F mul r24,r17
4993 287c F00C add r15,r0
4994 287e 909F mul r25,r16
4995 2880 F00C add r15,r0
4996 2882 1124 clr r1
4997 2884 4E0D add r20,r14
4998 2886 5F1D adc r21,r15
4999 2888 5093 0000 sts (stick_roll.13)+1,r21
5000 288c 4093 0000 sts stick_roll.13,r20
5001 2890 8091 0000 lds r24,CareFree
5002 2894 8823 tst r24
5003 2896 01F4 brne .+2
5004 2898 00C0 rjmp .L440
5005 289a CB01 movw r24,r22
5006 289c 77FD sbrc r23,7
5007 289e 0396 adiw r24,3
5008 .L441:
5009 28a0 DC01 movw r26,r24
5010 28a2 B595 asr r27
5011 28a4 A795 ror r26
5012 28a6 B595 asr r27
5013 28a8 A795 ror r26
5014 28aa CA01 movw r24,r20
5015 28ac 57FD sbrc r21,7
5016 28ae 0396 adiw r24,3
5017 .L442:
5018 28b0 FC01 movw r30,r24
5019 28b2 F595 asr r31
5020 28b4 E795 ror r30
5021 28b6 F595 asr r31
5022 28b8 E795 ror r30
5023 28ba 8091 0000 lds r24,FromNC_Rotate_C
5024 28be 682F mov r22,r24
5025 28c0 7727 clr r23
5026 28c2 67FD sbrc r22,7
5027 28c4 7095 com r23
5028 28c6 6A9F mul r22,r26
5029 28c8 9001 movw r18,r0
5030 28ca 6B9F mul r22,r27
5031 28cc 300D add r19,r0
5032 28ce 7A9F mul r23,r26
5033 28d0 300D add r19,r0
5034 28d2 1124 clr r1
5035 28d4 8091 0000 lds r24,FromNC_Rotate_S
5036 28d8 482F mov r20,r24
5037 28da 5527 clr r21
5038 28dc 47FD sbrc r20,7
5039 28de 5095 com r21
5040 28e0 4E9F mul r20,r30
5041 28e2 C001 movw r24,r0
5042 28e4 4F9F mul r20,r31
5043 28e6 900D add r25,r0
5044 28e8 5E9F mul r21,r30
5045 28ea 900D add r25,r0
5046 28ec 1124 clr r1
5047 28ee 280F add r18,r24
5048 28f0 391F adc r19,r25
5049 28f2 37FF sbrs r19,7
5050 28f4 00C0 rjmp .L443
5051 28f6 295F subi r18,lo8(-(7))
5052 28f8 3F4F sbci r19,hi8(-(7))
5053 .L443:
5054 28fa 93E0 ldi r25,3
5055 28fc 3595 1: asr r19
5056 28fe 2795 ror r18
5057 2900 9A95 dec r25
5058 2902 01F4 brne 1b
5059 2904 3093 0000 sts (StickNick)+1,r19
5060 2908 2093 0000 sts StickNick,r18
5061 290c 6E9F mul r22,r30
5062 290e 9001 movw r18,r0
5063 2910 6F9F mul r22,r31
5064 2912 300D add r19,r0
5065 2914 7E9F mul r23,r30
5066 2916 300D add r19,r0
5067 2918 1124 clr r1
5068 291a 4A9F mul r20,r26
5069 291c C001 movw r24,r0
5070 291e 4B9F mul r20,r27
5071 2920 900D add r25,r0
5072 2922 5A9F mul r21,r26
5073 2924 900D add r25,r0
5074 2926 1124 clr r1
5075 2928 00C0 rjmp .L919
5076 .L440:
5077 292a 8091 0000 lds r24,EE_Parameter+98
5078 292e E82F mov r30,r24
5079 2930 FF27 clr r31
5080 2932 E050 subi r30,lo8(-(sintab))
5081 2934 F040 sbci r31,hi8(-(sintab))
5082 2936 8681 ldd r24,Z+6
5083 2938 8093 0000 sts FromNC_Rotate_C,r24
5084 293c 9081 ld r25,Z
5085 293e 9093 0000 sts FromNC_Rotate_S,r25
5086 2942 A82F mov r26,r24
5087 2944 BB27 clr r27
5088 2946 A7FD sbrc r26,7
5089 2948 B095 com r27
5090 294a A69F mul r26,r22
5091 294c 9001 movw r18,r0
5092 294e A79F mul r26,r23
5093 2950 300D add r19,r0
5094 2952 B69F mul r27,r22
5095 2954 300D add r19,r0
5096 2956 1124 clr r1
5097 2958 E92F mov r30,r25
5098 295a FF27 clr r31
5099 295c E7FD sbrc r30,7
5100 295e F095 com r31
5101 2960 E49F mul r30,r20
5102 2962 C001 movw r24,r0
5103 2964 E59F mul r30,r21
5104 2966 900D add r25,r0
5105 2968 F49F mul r31,r20
5106 296a 900D add r25,r0
5107 296c 1124 clr r1
5108 296e 280F add r18,r24
5109 2970 391F adc r19,r25
5110 2972 37FF sbrs r19,7
5111 2974 00C0 rjmp .L446
5112 2976 295F subi r18,lo8(-(7))
5113 2978 3F4F sbci r19,hi8(-(7))
5114 .L446:
5115 297a 83E0 ldi r24,3
5116 297c 3595 1: asr r19
5117 297e 2795 ror r18
5118 2980 8A95 dec r24
5119 2982 01F4 brne 1b
5120 2984 3093 0000 sts (StickNick)+1,r19
5121 2988 2093 0000 sts StickNick,r18
5122 298c A49F mul r26,r20
5123 298e 9001 movw r18,r0
5124 2990 A59F mul r26,r21
5125 2992 300D add r19,r0
5126 2994 B49F mul r27,r20
5127 2996 300D add r19,r0
5128 2998 1124 clr r1
5129 299a E69F mul r30,r22
5130 299c C001 movw r24,r0
5131 299e E79F mul r30,r23
5132 29a0 900D add r25,r0
5133 29a2 F69F mul r31,r22
5134 29a4 900D add r25,r0
5135 29a6 1124 clr r1
5136 .L919:
5137 29a8 281B sub r18,r24
5138 29aa 390B sbc r19,r25
5139 29ac 37FF sbrs r19,7
5140 29ae 00C0 rjmp .L447
5141 29b0 295F subi r18,lo8(-(7))
5142 29b2 3F4F sbci r19,hi8(-(7))
5143 .L447:
5144 29b4 03E0 ldi r16,3
5145 29b6 3595 1: asr r19
5146 29b8 2795 ror r18
5147 29ba 0A95 dec r16
5148 29bc 01F4 brne 1b
5149 29be 3093 0000 sts (StickRoll)+1,r19
5150 29c2 2093 0000 sts StickRoll,r18
5151 29c6 8091 0000 lds r24,EE_Parameter+4
5152 29ca E82F mov r30,r24
5153 29cc FF27 clr r31
5154 29ce EE0F add r30,r30
5155 29d0 FF1F adc r31,r31
5156 29d2 E050 subi r30,lo8(-(PPM_in))
5157 29d4 F040 sbci r31,hi8(-(PPM_in))
5158 29d6 8081 ld r24,Z
5159 29d8 9181 ldd r25,Z+1
5160 29da 9095 com r25
5161 29dc 8195 neg r24
5162 29de 9F4F sbci r25,lo8(-1)
5163 29e0 9093 0000 sts (StickGier)+1,r25
5164 29e4 8093 0000 sts StickGier,r24
5165 29e8 8530 cpi r24,5
5166 29ea 9105 cpc r25,__zero_reg__
5167 29ec 04F0 brlt .L448
5168 29ee 0497 sbiw r24,4
5169 29f0 00C0 rjmp .L891
5170 .L448:
5171 29f2 0FEF ldi r16,hi8(-4)
5172 29f4 8C3F cpi r24,lo8(-4)
5173 29f6 9007 cpc r25,r16
5174 29f8 04F4 brge .L450
5175 29fa 0496 adiw r24,4
5176 .L891:
5177 29fc 9093 0000 sts (StickGier)+1,r25
5178 2a00 8093 0000 sts StickGier,r24
5179 2a04 00C0 rjmp .L449
5180 .L450:
5181 2a06 1092 0000 sts (StickGier)+1,__zero_reg__
5182 2a0a 1092 0000 sts StickGier,__zero_reg__
5183 .L449:
5184 2a0e 8091 0000 lds r24,GPS_Aid_StickMultiplikator
5185 2a12 8823 tst r24
5186 2a14 01F4 brne .+2
5187 2a16 00C0 rjmp .L452
5188 2a18 282F mov r18,r24
5189 2a1a 3327 clr r19
5190 2a1c 8091 0000 lds r24,StickNick
5191 2a20 9091 0000 lds r25,(StickNick)+1
5192 2a24 97FD sbrc r25,7
5193 2a26 0796 adiw r24,7
5194 .L453:
5195 2a28 13E0 ldi r17,3
5196 2a2a 9595 1: asr r25
5197 2a2c 8795 ror r24
5198 2a2e 1A95 dec r17
5199 2a30 01F4 brne 1b
5200 2a32 289F mul r18,r24
5201 2a34 A001 movw r20,r0
5202 2a36 299F mul r18,r25
5203 2a38 500D add r21,r0
5204 2a3a 389F mul r19,r24
5205 2a3c 500D add r21,r0
5206 2a3e 1124 clr r1
5207 2a40 CA01 movw r24,r20
5208 2a42 57FD sbrc r21,7
5209 2a44 0F96 adiw r24,15
5210 .L454:
5211 2a46 B4E0 ldi r27,4
5212 2a48 9595 1: asr r25
5213 2a4a 8795 ror r24
5214 2a4c BA95 dec r27
5215 2a4e 01F4 brne 1b
5216 2a50 9093 0000 sts (StickNick)+1,r25
5217 2a54 8093 0000 sts StickNick,r24
5218 2a58 8091 0000 lds r24,StickRoll
5219 2a5c 9091 0000 lds r25,(StickRoll)+1
5220 2a60 97FD sbrc r25,7
5221 2a62 0796 adiw r24,7
5222 .L455:
5223 2a64 A3E0 ldi r26,3
5224 2a66 9595 1: asr r25
5225 2a68 8795 ror r24
5226 2a6a AA95 dec r26
5227 2a6c 01F4 brne 1b
5228 2a6e 289F mul r18,r24
5229 2a70 B001 movw r22,r0
5230 2a72 299F mul r18,r25
5231 2a74 700D add r23,r0
5232 2a76 389F mul r19,r24
5233 2a78 700D add r23,r0
5234 2a7a 1124 clr r1
5235 2a7c CB01 movw r24,r22
5236 2a7e 77FD sbrc r23,7
5237 2a80 0F96 adiw r24,15
5238 .L456:
5239 2a82 F4E0 ldi r31,4
5240 2a84 9595 1: asr r25
5241 2a86 8795 ror r24
5242 2a88 FA95 dec r31
5243 2a8a 01F4 brne 1b
5244 2a8c 9093 0000 sts (StickRoll)+1,r25
5245 2a90 8093 0000 sts StickRoll,r24
5246 .L452:
5247 2a94 8090 0000 lds r8,StickNick
5248 2a98 9090 0000 lds r9,(StickNick)+1
5249 2a9c 8091 0000 lds r24,GPS_Nick
5250 2aa0 9091 0000 lds r25,(GPS_Nick)+1
5251 2aa4 881A sub r8,r24
5252 2aa6 990A sbc r9,r25
5253 2aa8 9092 0000 sts (StickNick)+1,r9
5254 2aac 8092 0000 sts StickNick,r8
5255 2ab0 0091 0000 lds r16,StickRoll
5256 2ab4 1091 0000 lds r17,(StickRoll)+1
5257 2ab8 8091 0000 lds r24,GPS_Roll
5258 2abc 9091 0000 lds r25,(GPS_Roll)+1
5259 2ac0 081B sub r16,r24
5260 2ac2 190B sbc r17,r25
5261 2ac4 1093 0000 sts (StickRoll)+1,r17
5262 2ac8 0093 0000 sts StickRoll,r16
5263 2acc 8091 0000 lds r24,EE_Parameter+3
5264 2ad0 E82F mov r30,r24
5265 2ad2 FF27 clr r31
5266 2ad4 EE0F add r30,r30
5267 2ad6 FF1F adc r31,r31
5268 2ad8 E050 subi r30,lo8(-(PPM_in))
5269 2ada F040 sbci r31,hi8(-(PPM_in))
5270 2adc E080 ld r14,Z
5271 2ade F180 ldd r15,Z+1
5272 2ae0 8FE7 ldi r24,lo8(127)
5273 2ae2 90E0 ldi r25,hi8(127)
5274 2ae4 E80E add r14,r24
5275 2ae6 F91E adc r15,r25
5276 2ae8 F092 0000 sts (StickGas)+1,r15
5277 2aec E092 0000 sts StickGas,r14
5278 2af0 8091 0000 lds r24,Parameter_Gyro_P
5279 2af4 9927 clr r25
5280 2af6 AA27 clr r26
5281 2af8 97FD sbrc r25,7
5282 2afa A095 com r26
5283 2afc BA2F mov r27,r26
5284 2afe BC01 movw r22,r24
5285 2b00 CD01 movw r24,r26
5286 2b02 0E94 0000 call __floatsisf
5287 2b06 DC01 movw r26,r24
5288 2b08 CB01 movw r24,r22
5289 2b0a 20E0 ldi r18,lo8(0x41200000)
5290 2b0c 30E0 ldi r19,hi8(0x41200000)
5291 2b0e 40E2 ldi r20,hlo8(0x41200000)
5292 2b10 51E4 ldi r21,hhi8(0x41200000)
5293 2b12 BC01 movw r22,r24
5294 2b14 CD01 movw r24,r26
5295 2b16 0E94 0000 call __addsf3
5296 2b1a DC01 movw r26,r24
5297 2b1c CB01 movw r24,r22
5298 2b1e BC01 movw r22,r24
5299 2b20 CD01 movw r24,r26
5300 2b22 0E94 0000 call __fixunssfsi
5301 2b26 DC01 movw r26,r24
5302 2b28 CB01 movw r24,r22
5303 2b2a 8093 0000 sts GyroFaktor,r24
5304 2b2e 8091 0000 lds r24,Parameter_Gyro_I
5305 2b32 8093 0000 sts IntegralFaktor,r24
5306 2b36 8091 0000 lds r24,Parameter_Gyro_Gier_P
5307 2b3a 9927 clr r25
5308 2b3c AA27 clr r26
5309 2b3e 97FD sbrc r25,7
5310 2b40 A095 com r26
5311 2b42 BA2F mov r27,r26
5312 2b44 BC01 movw r22,r24
5313 2b46 CD01 movw r24,r26
5314 2b48 0E94 0000 call __floatsisf
5315 2b4c DC01 movw r26,r24
5316 2b4e CB01 movw r24,r22
5317 2b50 20E0 ldi r18,lo8(0x41200000)
5318 2b52 30E0 ldi r19,hi8(0x41200000)
5319 2b54 40E2 ldi r20,hlo8(0x41200000)
5320 2b56 51E4 ldi r21,hhi8(0x41200000)
5321 2b58 BC01 movw r22,r24
5322 2b5a CD01 movw r24,r26
5323 2b5c 0E94 0000 call __addsf3
5324 2b60 DC01 movw r26,r24
5325 2b62 CB01 movw r24,r22
5326 2b64 BC01 movw r22,r24
5327 2b66 CD01 movw r24,r26
5328 2b68 0E94 0000 call __fixunssfsi
5329 2b6c DC01 movw r26,r24
5330 2b6e CB01 movw r24,r22
5331 2b70 8093 0000 sts GyroFaktorGier,r24
5332 2b74 8091 0000 lds r24,Parameter_Gyro_Gier_I
5333 2b78 8093 0000 sts IntegralFaktorGier,r24
5334 2b7c 8091 0000 lds r24,ExternControl+10
5335 2b80 80FF sbrs r24,0
5336 2b82 00C0 rjmp .L457
5337 2b84 8091 0000 lds r24,Parameter_ExternalControl
5338 2b88 8138 cpi r24,lo8(-127)
5339 2b8a 00F4 brsh .+2
5340 2b8c 00C0 rjmp .L457
5341 2b8e 8091 0000 lds r24,ExternControl+3
5342 2b92 9927 clr r25
5343 2b94 87FD sbrc r24,7
5344 2b96 9095 com r25
5345 2b98 2B2D mov r18,r11
5346 2b9a 3327 clr r19
5347 2b9c 829F mul r24,r18
5348 2b9e D001 movw r26,r0
5349 2ba0 839F mul r24,r19
5350 2ba2 B00D add r27,r0
5351 2ba4 929F mul r25,r18
5352 2ba6 B00D add r27,r0
5353 2ba8 1124 clr r1
5354 2baa 8A0E add r8,r26
5355 2bac 9B1E adc r9,r27
5356 2bae 9092 0000 sts (StickNick)+1,r9
5357 2bb2 8092 0000 sts StickNick,r8
5358 2bb6 8091 0000 lds r24,ExternControl+4
5359 2bba 9927 clr r25
5360 2bbc 87FD sbrc r24,7
5361 2bbe 9095 com r25
5362 2bc0 829F mul r24,r18
5363 2bc2 F001 movw r30,r0
5364 2bc4 839F mul r24,r19
5365 2bc6 F00D add r31,r0
5366 2bc8 929F mul r25,r18
5367 2bca F00D add r31,r0
5368 2bcc 1124 clr r1
5369 2bce 0E0F add r16,r30
5370 2bd0 1F1F adc r17,r31
5371 2bd2 1093 0000 sts (StickRoll)+1,r17
5372 2bd6 0093 0000 sts StickRoll,r16
5373 2bda 8091 0000 lds r24,ExternControl+5
5374 2bde 282F mov r18,r24
5375 2be0 3327 clr r19
5376 2be2 27FD sbrc r18,7
5377 2be4 3095 com r19
5378 2be6 8091 0000 lds r24,StickGier
5379 2bea 9091 0000 lds r25,(StickGier)+1
5380 2bee 820F add r24,r18
5381 2bf0 931F adc r25,r19
5382 2bf2 9093 0000 sts (StickGier)+1,r25
5383 2bf6 8093 0000 sts StickGier,r24
5384 2bfa 8091 0000 lds r24,ExternControl+7
5385 2bfe 282F mov r18,r24
5386 2c00 3327 clr r19
5387 2c02 27FD sbrc r18,7
5388 2c04 3095 com r19
5389 2c06 8091 0000 lds r24,EE_Parameter+18
5390 2c0a 9927 clr r25
5391 2c0c 289F mul r18,r24
5392 2c0e 8001 movw r16,r0
5393 2c10 299F mul r18,r25
5394 2c12 100D add r17,r0
5395 2c14 389F mul r19,r24
5396 2c16 100D add r17,r0
5397 2c18 1124 clr r1
5398 2c1a 1093 0000 sts (ExternHoehenValue)+1,r17
5399 2c1e 0093 0000 sts ExternHoehenValue,r16
5400 2c22 8091 0000 lds r24,ExternControl+6
5401 2c26 9927 clr r25
5402 2c28 8E15 cp r24,r14
5403 2c2a 9F05 cpc r25,r15
5404 2c2c 04F4 brge .L457
5405 2c2e 9093 0000 sts (StickGas)+1,r25
5406 2c32 8093 0000 sts StickGas,r24
5407 .L457:
5408 2c36 8091 0000 lds r24,StickGas
5409 2c3a 9091 0000 lds r25,(StickGas)+1
5410 2c3e 97FF sbrs r25,7
5411 2c40 00C0 rjmp .L459
5412 2c42 1092 0000 sts (StickGas)+1,__zero_reg__
5413 2c46 1092 0000 sts StickGas,__zero_reg__
5414 .L459:
5415 2c4a 8091 0000 lds r24,Parameter_GlobalConfig
5416 2c4e 82FF sbrs r24,2
5417 2c50 00C0 rjmp .L460
5418 2c52 1092 0000 sts IntegralFaktor,__zero_reg__
5419 .L460:
5420 2c56 4091 0000 lds r20,StickNick
5421 2c5a 5091 0000 lds r21,(StickNick)+1
5422 2c5e CA01 movw r24,r20
5423 2c60 57FD sbrc r21,7
5424 2c62 0396 adiw r24,3
5425 .L462:
5426 2c64 9C01 movw r18,r24
5427 2c66 3595 asr r19
5428 2c68 2795 ror r18
5429 2c6a 3595 asr r19
5430 2c6c 2795 ror r18
5431 2c6e 37FF sbrs r19,7
5432 2c70 00C0 rjmp .L463
5433 2c72 3095 com r19
5434 2c74 2195 neg r18
5435 2c76 3F4F sbci r19,lo8(-1)
5436 .L463:
5437 2c78 8091 0000 lds r24,MaxStickNick
5438 2c7c 9091 0000 lds r25,(MaxStickNick)+1
5439 2c80 8217 cp r24,r18
5440 2c82 9307 cpc r25,r19
5441 2c84 04F4 brge .L461
5442 2c86 CA01 movw r24,r20
5443 2c88 57FF sbrs r21,7
5444 2c8a 00C0 rjmp .L464
5445 2c8c 9095 com r25
5446 2c8e 8195 neg r24
5447 2c90 9F4F sbci r25,lo8(-1)
5448 .L464:
5449 2c92 97FD sbrc r25,7
5450 2c94 0396 adiw r24,3
5451 .L465:
5452 2c96 9595 asr r25
5453 2c98 8795 ror r24
5454 2c9a 9595 asr r25
5455 2c9c 8795 ror r24
5456 2c9e 9093 0000 sts (MaxStickNick)+1,r25
5457 2ca2 8093 0000 sts MaxStickNick,r24
5458 2ca6 8536 cpi r24,101
5459 2ca8 9105 cpc r25,__zero_reg__
5460 2caa 04F0 brlt .L467
5461 2cac 84E6 ldi r24,lo8(100)
5462 2cae 90E0 ldi r25,hi8(100)
5463 2cb0 00C0 rjmp .L892
5464 .L461:
5465 2cb2 0197 sbiw r24,1
5466 .L892:
5467 2cb4 9093 0000 sts (MaxStickNick)+1,r25
5468 2cb8 8093 0000 sts MaxStickNick,r24
5469 .L467:
5470 2cbc 4091 0000 lds r20,StickRoll
5471 2cc0 5091 0000 lds r21,(StickRoll)+1
5472 2cc4 CA01 movw r24,r20
5473 2cc6 57FD sbrc r21,7
5474 2cc8 0396 adiw r24,3
5475 .L469:
5476 2cca 9C01 movw r18,r24
5477 2ccc 3595 asr r19
5478 2cce 2795 ror r18
5479 2cd0 3595 asr r19
5480 2cd2 2795 ror r18
5481 2cd4 37FF sbrs r19,7
5482 2cd6 00C0 rjmp .L470
5483 2cd8 3095 com r19
5484 2cda 2195 neg r18
5485 2cdc 3F4F sbci r19,lo8(-1)
5486 .L470:
5487 2cde 8091 0000 lds r24,MaxStickRoll
5488 2ce2 9091 0000 lds r25,(MaxStickRoll)+1
5489 2ce6 8217 cp r24,r18
5490 2ce8 9307 cpc r25,r19
5491 2cea 04F4 brge .L468
5492 2cec CA01 movw r24,r20
5493 2cee 57FF sbrs r21,7
5494 2cf0 00C0 rjmp .L471
5495 2cf2 9095 com r25
5496 2cf4 8195 neg r24
5497 2cf6 9F4F sbci r25,lo8(-1)
5498 .L471:
5499 2cf8 97FD sbrc r25,7
5500 2cfa 0396 adiw r24,3
5501 .L472:
5502 2cfc 9595 asr r25
5503 2cfe 8795 ror r24
5504 2d00 9595 asr r25
5505 2d02 8795 ror r24
5506 2d04 9093 0000 sts (MaxStickRoll)+1,r25
5507 2d08 8093 0000 sts MaxStickRoll,r24
5508 2d0c 8536 cpi r24,101
5509 2d0e 9105 cpc r25,__zero_reg__
5510 2d10 04F0 brlt .L474
5511 2d12 84E6 ldi r24,lo8(100)
5512 2d14 90E0 ldi r25,hi8(100)
5513 2d16 00C0 rjmp .L893
5514 .L468:
5515 2d18 0197 sbiw r24,1
5516 .L893:
5517 2d1a 9093 0000 sts (MaxStickRoll)+1,r25
5518 2d1e 8093 0000 sts MaxStickRoll,r24
5519 .L474:
5520 2d22 8091 0000 lds r24,FC_StatusFlags
5521 2d26 84FF sbrs r24,4
5522 2d28 00C0 rjmp .L475
5523 2d2a 1092 0000 sts (MaxStickNick)+1,__zero_reg__
5524 2d2e 1092 0000 sts MaxStickNick,__zero_reg__
5525 2d32 1092 0000 sts (MaxStickRoll)+1,__zero_reg__
5526 2d36 1092 0000 sts MaxStickRoll,__zero_reg__
5527 .L475:
5528 2d3a ED2D mov r30,r13
5529 2d3c FF27 clr r31
5530 2d3e EE0F add r30,r30
5531 2d40 FF1F adc r31,r31
5532 2d42 E050 subi r30,lo8(-(PPM_in))
5533 2d44 F040 sbci r31,hi8(-(PPM_in))
5534 2d46 4091 0000 lds r20,EE_Parameter+60
5535 2d4a 242F mov r18,r20
5536 2d4c 3327 clr r19
5537 2d4e 8081 ld r24,Z
5538 2d50 9181 ldd r25,Z+1
5539 2d52 2817 cp r18,r24
5540 2d54 3907 cpc r19,r25
5541 2d56 04F4 brge .L476
5542 2d58 8091 0000 lds r24,EE_Parameter+108
5543 2d5c 82FF sbrs r24,2
5544 2d5e 00C0 rjmp .L476
5545 2d60 81E0 ldi r24,lo8(1)
5546 2d62 8093 0000 sts Looping_Links,r24
5547 2d66 00C0 rjmp .L477
5548 .L476:
5549 2d68 ED2D mov r30,r13
5550 2d6a FF27 clr r31
5551 2d6c EE0F add r30,r30
5552 2d6e FF1F adc r31,r31
5553 2d70 E050 subi r30,lo8(-(PPM_in))
5554 2d72 F040 sbci r31,hi8(-(PPM_in))
5555 2d74 842F mov r24,r20
5556 2d76 9927 clr r25
5557 2d78 2091 0000 lds r18,EE_Parameter+61
5558 2d7c 821B sub r24,r18
5559 2d7e 9109 sbc r25,__zero_reg__
5560 2d80 2081 ld r18,Z
5561 2d82 3181 ldd r19,Z+1
5562 2d84 2817 cp r18,r24
5563 2d86 3907 cpc r19,r25
5564 2d88 04F4 brge .L477
5565 2d8a 1092 0000 sts Looping_Links,__zero_reg__
5566 .L477:
5567 2d8e 4091 0000 lds r20,EE_Parameter+2
5568 2d92 E42F mov r30,r20
5569 2d94 FF27 clr r31
5570 2d96 EE0F add r30,r30
5571 2d98 FF1F adc r31,r31
5572 2d9a E050 subi r30,lo8(-(PPM_in))
5573 2d9c F040 sbci r31,hi8(-(PPM_in))
5574 2d9e 5091 0000 lds r21,EE_Parameter+60
5575 2da2 852F mov r24,r21
5576 2da4 9927 clr r25
5577 2da6 2227 clr r18
5578 2da8 3327 clr r19
5579 2daa 281B sub r18,r24
5580 2dac 390B sbc r19,r25
5581 2dae 8081 ld r24,Z
5582 2db0 9181 ldd r25,Z+1
5583 2db2 8217 cp r24,r18
5584 2db4 9307 cpc r25,r19
5585 2db6 04F4 brge .L479
5586 2db8 8091 0000 lds r24,EE_Parameter+108
5587 2dbc 83FF sbrs r24,3
5588 2dbe 00C0 rjmp .L479
5589 2dc0 81E0 ldi r24,lo8(1)
5590 2dc2 8093 0000 sts Looping_Rechts,r24
5591 2dc6 00C0 rjmp .L480
5592 .L479:
5593 2dc8 8091 0000 lds r24,Looping_Rechts
5594 2dcc 8823 tst r24
5595 2dce 01F0 breq .L480
5596 2dd0 E42F mov r30,r20
5597 2dd2 FF27 clr r31
5598 2dd4 EE0F add r30,r30
5599 2dd6 FF1F adc r31,r31
5600 2dd8 E050 subi r30,lo8(-(PPM_in))
5601 2dda F040 sbci r31,hi8(-(PPM_in))
5602 2ddc 8091 0000 lds r24,EE_Parameter+61
5603 2de0 9927 clr r25
5604 2de2 851B sub r24,r21
5605 2de4 9109 sbc r25,__zero_reg__
5606 2de6 2081 ld r18,Z
5607 2de8 3181 ldd r19,Z+1
5608 2dea 8217 cp r24,r18
5609 2dec 9307 cpc r25,r19
5610 2dee 04F4 brge .L480
5611 2df0 1092 0000 sts Looping_Rechts,__zero_reg__
5612 .L480:
5613 2df4 EC2D mov r30,r12
5614 2df6 FF27 clr r31
5615 2df8 EE0F add r30,r30
5616 2dfa FF1F adc r31,r31
5617 2dfc E050 subi r30,lo8(-(PPM_in))
5618 2dfe F040 sbci r31,hi8(-(PPM_in))
5619 2e00 4091 0000 lds r20,EE_Parameter+60
5620 2e04 242F mov r18,r20
5621 2e06 3327 clr r19
5622 2e08 8081 ld r24,Z
5623 2e0a 9181 ldd r25,Z+1
5624 2e0c 2817 cp r18,r24
5625 2e0e 3907 cpc r19,r25
5626 2e10 04F4 brge .L483
5627 2e12 8091 0000 lds r24,EE_Parameter+108
5628 2e16 80FF sbrs r24,0
5629 2e18 00C0 rjmp .L483
5630 2e1a 81E0 ldi r24,lo8(1)
5631 2e1c 8093 0000 sts Looping_Oben,r24
5632 2e20 00C0 rjmp .L484
5633 .L483:
5634 2e22 8091 0000 lds r24,Looping_Oben
5635 2e26 8823 tst r24
5636 2e28 01F0 breq .L484
5637 2e2a EC2D mov r30,r12
5638 2e2c FF27 clr r31
5639 2e2e EE0F add r30,r30
5640 2e30 FF1F adc r31,r31
5641 2e32 E050 subi r30,lo8(-(PPM_in))
5642 2e34 F040 sbci r31,hi8(-(PPM_in))
5643 2e36 842F mov r24,r20
5644 2e38 9927 clr r25
5645 2e3a 2091 0000 lds r18,EE_Parameter+61
5646 2e3e 821B sub r24,r18
5647 2e40 9109 sbc r25,__zero_reg__
5648 2e42 2081 ld r18,Z
5649 2e44 3181 ldd r19,Z+1
5650 2e46 2817 cp r18,r24
5651 2e48 3907 cpc r19,r25
5652 2e4a 04F4 brge .L484
5653 2e4c 1092 0000 sts Looping_Oben,__zero_reg__
5654 .L484:
5655 2e50 4091 0000 lds r20,EE_Parameter+1
5656 2e54 E42F mov r30,r20
5657 2e56 FF27 clr r31
5658 2e58 EE0F add r30,r30
5659 2e5a FF1F adc r31,r31
5660 2e5c E050 subi r30,lo8(-(PPM_in))
5661 2e5e F040 sbci r31,hi8(-(PPM_in))
5662 2e60 5091 0000 lds r21,EE_Parameter+60
5663 2e64 852F mov r24,r21
5664 2e66 9927 clr r25
5665 2e68 2227 clr r18
5666 2e6a 3327 clr r19
5667 2e6c 281B sub r18,r24
5668 2e6e 390B sbc r19,r25
5669 2e70 8081 ld r24,Z
5670 2e72 9181 ldd r25,Z+1
5671 2e74 8217 cp r24,r18
5672 2e76 9307 cpc r25,r19
5673 2e78 04F4 brge .L487
5674 2e7a 8091 0000 lds r24,EE_Parameter+108
5675 2e7e 81FF sbrs r24,1
5676 2e80 00C0 rjmp .L487
5677 2e82 81E0 ldi r24,lo8(1)
5678 2e84 8093 0000 sts Looping_Unten,r24
5679 2e88 00C0 rjmp .L488
5680 .L487:
5681 2e8a 8091 0000 lds r24,Looping_Unten
5682 2e8e 8823 tst r24
5683 2e90 01F0 breq .L488
5684 2e92 E42F mov r30,r20
5685 2e94 FF27 clr r31
5686 2e96 EE0F add r30,r30
5687 2e98 FF1F adc r31,r31
5688 2e9a E050 subi r30,lo8(-(PPM_in))
5689 2e9c F040 sbci r31,hi8(-(PPM_in))
5690 2e9e 8091 0000 lds r24,EE_Parameter+61
5691 2ea2 9927 clr r25
5692 2ea4 851B sub r24,r21
5693 2ea6 9109 sbc r25,__zero_reg__
5694 2ea8 2081 ld r18,Z
5695 2eaa 3181 ldd r19,Z+1
5696 2eac 8217 cp r24,r18
5697 2eae 9307 cpc r25,r19
5698 2eb0 04F4 brge .L488
5699 2eb2 1092 0000 sts Looping_Unten,__zero_reg__
5700 .L488:
5701 2eb6 8091 0000 lds r24,Looping_Links
5702 2eba 8823 tst r24
5703 2ebc 01F4 brne .L492
5704 2ebe 8091 0000 lds r24,Looping_Rechts
5705 2ec2 8111 cpse r24,__zero_reg__
5706 .L492:
5707 2ec4 81E0 ldi r24,lo8(1)
5708 .L491:
5709 2ec6 8093 0000 sts Looping_Roll,r24
5710 2eca 8091 0000 lds r24,Looping_Oben
5711 2ece 8823 tst r24
5712 2ed0 01F4 brne .L495
5713 2ed2 8091 0000 lds r24,Looping_Unten
5714 2ed6 8823 tst r24
5715 2ed8 01F0 breq .L494
5716 .L495:
5717 2eda 81E0 ldi r24,lo8(1)
5718 2edc 8093 0000 sts Looping_Nick,r24
5719 2ee0 1092 0000 sts Looping_Roll,__zero_reg__
5720 2ee4 1092 0000 sts Looping_Links,__zero_reg__
5721 2ee8 1092 0000 sts Looping_Rechts,__zero_reg__
5722 2eec 00C0 rjmp .L436
5723 .L494:
5724 2eee 8093 0000 sts Looping_Nick,r24
5725 .L436:
5726 2ef2 8091 0000 lds r24,Looping_Roll
5727 2ef6 8823 tst r24
5728 2ef8 01F4 brne .L498
5729 2efa 8091 0000 lds r24,Looping_Nick
5730 2efe 8823 tst r24
5731 2f00 01F0 breq .L497
5732 .L498:
5733 2f02 8091 0000 lds r24,EE_Parameter+59
5734 2f06 9927 clr r25
5735 2f08 2981 ldd r18,Y+1
5736 2f0a 3A81 ldd r19,Y+2
5737 2f0c 8217 cp r24,r18
5738 2f0e 9307 cpc r25,r19
5739 2f10 04F4 brge .L499
5740 2f12 9A83 std Y+2,r25
5741 2f14 8983 std Y+1,r24
5742 .L499:
5743 2f16 81E0 ldi r24,lo8(1)
5744 2f18 8093 0000 sts TrichterFlug,r24
5745 .L497:
5746 2f1c 8091 0000 lds r24,FC_StatusFlags2
5747 2f20 9927 clr r25
5748 2f22 9C01 movw r18,r24
5749 2f24 2470 andi r18,lo8(4)
5750 2f26 3070 andi r19,hi8(4)
5751 2f28 82FF sbrs r24,2
5752 2f2a 00C0 rjmp .L500
5753 2f2c 8091 0000 lds r24,GPS_Nick
5754 2f30 9091 0000 lds r25,(GPS_Nick)+1
5755 2f34 9095 com r25
5756 2f36 8195 neg r24
5757 2f38 9F4F sbci r25,lo8(-1)
5758 2f3a 9093 0000 sts (StickNick)+1,r25
5759 2f3e 8093 0000 sts StickNick,r24
5760 2f42 8091 0000 lds r24,GPS_Roll
5761 2f46 9091 0000 lds r25,(GPS_Roll)+1
5762 2f4a 9095 com r25
5763 2f4c 8195 neg r24
5764 2f4e 9F4F sbci r25,lo8(-1)
5765 2f50 9093 0000 sts (StickRoll)+1,r25
5766 2f54 8093 0000 sts StickRoll,r24
5767 2f58 8091 0000 lds r24,StickGasHover
5768 2f5c 9091 0000 lds r25,(StickGasHover)+1
5769 2f60 9093 0000 sts (StickGas)+1,r25
5770 2f64 8093 0000 sts StickGas,r24
5771 2f68 8091 0000 lds r24,Parameter_GlobalConfig
5772 2f6c 8B77 andi r24,lo8(123)
5773 2f6e 8B66 ori r24,lo8(107)
5774 2f70 8093 0000 sts Parameter_GlobalConfig,r24
5775 2f74 8091 0000 lds r24,Parameter_ExtraConfig
5776 2f78 8C7B andi r24,lo8(-68)
5777 2f7a 8093 0000 sts Parameter_ExtraConfig,r24
5778 2f7e 88EC ldi r24,lo8(-56)
5779 2f80 8093 0000 sts Parameter_HoehenSchalter,r24
5780 2f84 00C0 rjmp .L501
5781 .L500:
5782 2f86 8091 0000 lds r24,FC_StatusFlags
5783 2f8a 84FF sbrs r24,4
5784 2f8c 00C0 rjmp .L501
5785 2f8e 3093 0000 sts (StickGier)+1,r19
5786 2f92 2093 0000 sts StickGier,r18
5787 2f96 3093 0000 sts (StickNick)+1,r19
5788 2f9a 2093 0000 sts StickNick,r18
5789 2f9e 3093 0000 sts (StickRoll)+1,r19
5790 2fa2 2093 0000 sts StickRoll,r18
5791 2fa6 9AE5 ldi r25,lo8(90)
5792 2fa8 9093 0000 sts GyroFaktor,r25
5793 2fac 88E7 ldi r24,lo8(120)
5794 2fae 8093 0000 sts IntegralFaktor,r24
5795 2fb2 9093 0000 sts GyroFaktorGier,r25
5796 2fb6 8093 0000 sts IntegralFaktorGier,r24
5797 2fba 1092 0000 sts Looping_Roll,__zero_reg__
5798 2fbe 1092 0000 sts Looping_Nick,__zero_reg__
5799 .L501:
5800 2fc2 8091 0000 lds r24,MittelIntegralNick
5801 2fc6 9091 0000 lds r25,(MittelIntegralNick)+1
5802 2fca A091 0000 lds r26,(MittelIntegralNick)+2
5803 2fce B091 0000 lds r27,(MittelIntegralNick)+3
5804 2fd2 2091 0000 lds r18,IntegralNick
5805 2fd6 3091 0000 lds r19,(IntegralNick)+1
5806 2fda 4091 0000 lds r20,(IntegralNick)+2
5807 2fde 5091 0000 lds r21,(IntegralNick)+3
5808 2fe2 820F add r24,r18
5809 2fe4 931F adc r25,r19
5810 2fe6 A41F adc r26,r20
5811 2fe8 B51F adc r27,r21
5812 2fea 8093 0000 sts MittelIntegralNick,r24
5813 2fee 9093 0000 sts (MittelIntegralNick)+1,r25
5814 2ff2 A093 0000 sts (MittelIntegralNick)+2,r26
5815 2ff6 B093 0000 sts (MittelIntegralNick)+3,r27
5816 2ffa 8091 0000 lds r24,MittelIntegralRoll
5817 2ffe 9091 0000 lds r25,(MittelIntegralRoll)+1
5818 3002 A091 0000 lds r26,(MittelIntegralRoll)+2
5819 3006 B091 0000 lds r27,(MittelIntegralRoll)+3
5820 300a E090 0000 lds r14,IntegralRoll
5821 300e F090 0000 lds r15,(IntegralRoll)+1
5822 3012 0091 0000 lds r16,(IntegralRoll)+2
5823 3016 1091 0000 lds r17,(IntegralRoll)+3
5824 301a EB82 std Y+3,r14
5825 301c FC82 std Y+4,r15
5826 301e 0D83 std Y+5,r16
5827 3020 1E83 std Y+6,r17
5828 3022 8E0D add r24,r14
5829 3024 9F1D adc r25,r15
5830 3026 A01F adc r26,r16
5831 3028 B11F adc r27,r17
5832 302a 8093 0000 sts MittelIntegralRoll,r24
5833 302e 9093 0000 sts (MittelIntegralRoll)+1,r25
5834 3032 A093 0000 sts (MittelIntegralRoll)+2,r26
5835 3036 B093 0000 sts (MittelIntegralRoll)+3,r27
5836 303a 8091 0000 lds r24,MittelIntegralNick2
5837 303e 9091 0000 lds r25,(MittelIntegralNick2)+1
5838 3042 A091 0000 lds r26,(MittelIntegralNick2)+2
5839 3046 B091 0000 lds r27,(MittelIntegralNick2)+3
5840 304a E090 0000 lds r14,IntegralNick2
5841 304e F090 0000 lds r15,(IntegralNick2)+1
5842 3052 0091 0000 lds r16,(IntegralNick2)+2
5843 3056 1091 0000 lds r17,(IntegralNick2)+3
5844 305a EF82 std Y+7,r14
5845 305c F886 std Y+8,r15
5846 305e 0987 std Y+9,r16
5847 3060 1A87 std Y+10,r17
5848 3062 8E0D add r24,r14
5849 3064 9F1D adc r25,r15
5850 3066 A01F adc r26,r16
5851 3068 B11F adc r27,r17
5852 306a 8093 0000 sts MittelIntegralNick2,r24
5853 306e 9093 0000 sts (MittelIntegralNick2)+1,r25
5854 3072 A093 0000 sts (MittelIntegralNick2)+2,r26
5855 3076 B093 0000 sts (MittelIntegralNick2)+3,r27
5856 307a 8091 0000 lds r24,MittelIntegralRoll2
5857 307e 9091 0000 lds r25,(MittelIntegralRoll2)+1
5858 3082 A091 0000 lds r26,(MittelIntegralRoll2)+2
5859 3086 B091 0000 lds r27,(MittelIntegralRoll2)+3
5860 308a E090 0000 lds r14,IntegralRoll2
5861 308e F090 0000 lds r15,(IntegralRoll2)+1
5862 3092 0091 0000 lds r16,(IntegralRoll2)+2
5863 3096 1091 0000 lds r17,(IntegralRoll2)+3
5864 309a EB86 std Y+11,r14
5865 309c FC86 std Y+12,r15
5866 309e 0D87 std Y+13,r16
5867 30a0 1E87 std Y+14,r17
5868 30a2 8E0D add r24,r14
5869 30a4 9F1D adc r25,r15
5870 30a6 A01F adc r26,r16
5871 30a8 B11F adc r27,r17
5872 30aa 8093 0000 sts MittelIntegralRoll2,r24
5873 30ae 9093 0000 sts (MittelIntegralRoll2)+1,r25
5874 30b2 A093 0000 sts (MittelIntegralRoll2)+2,r26
5875 30b6 B093 0000 sts (MittelIntegralRoll2)+3,r27
5876 30ba F090 0000 lds r15,Looping_Nick
5877 30be FF86 std Y+15,r15
5878 30c0 FF20 tst r15
5879 30c2 01F4 brne .L504
5880 30c4 8091 0000 lds r24,Looping_Roll
5881 30c8 8823 tst r24
5882 30ca 01F4 brne .+2
5883 30cc 00C0 rjmp .L886
5884 .L504:
5885 30ce 1092 0000 sts IntegralAccNick,__zero_reg__
5886 30d2 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
5887 30d6 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
5888 30da 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
5889 30de 1092 0000 sts IntegralAccRoll,__zero_reg__
5890 30e2 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
5891 30e6 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
5892 30ea 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
5893 30ee 1092 0000 sts MittelIntegralNick,__zero_reg__
5894 30f2 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
5895 30f6 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
5896 30fa 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
5897 30fe 1092 0000 sts MittelIntegralRoll,__zero_reg__
5898 3102 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
5899 3106 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
5900 310a 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
5901 310e 1092 0000 sts MittelIntegralNick2,__zero_reg__
5902 3112 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
5903 3116 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
5904 311a 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
5905 311e 1092 0000 sts MittelIntegralRoll2,__zero_reg__
5906 3122 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
5907 3126 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
5908 312a 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
5909 312e 8091 0000 lds r24,Mess_IntegralNick
5910 3132 9091 0000 lds r25,(Mess_IntegralNick)+1
5911 3136 A091 0000 lds r26,(Mess_IntegralNick)+2
5912 313a B091 0000 lds r27,(Mess_IntegralNick)+3
5913 313e 8093 0000 sts Mess_IntegralNick2,r24
5914 3142 9093 0000 sts (Mess_IntegralNick2)+1,r25
5915 3146 A093 0000 sts (Mess_IntegralNick2)+2,r26
5916 314a B093 0000 sts (Mess_IntegralNick2)+3,r27
5917 314e 8091 0000 lds r24,Mess_IntegralRoll
5918 3152 9091 0000 lds r25,(Mess_IntegralRoll)+1
5919 3156 A091 0000 lds r26,(Mess_IntegralRoll)+2
5920 315a B091 0000 lds r27,(Mess_IntegralRoll)+3
5921 315e 8093 0000 sts Mess_IntegralRoll2,r24
5922 3162 9093 0000 sts (Mess_IntegralRoll2)+1,r25
5923 3166 A093 0000 sts (Mess_IntegralRoll2)+2,r26
5924 316a B093 0000 sts (Mess_IntegralRoll2)+3,r27
5925 316e 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
5926 3172 1092 0000 sts ZaehlMessungen,__zero_reg__
5927 3176 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
5928 317a 1092 0000 sts LageKorrekturNick,__zero_reg__
5929 317e 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
5930 3182 1092 0000 sts LageKorrekturRoll,__zero_reg__
5931 3186 0F85 ldd r16,Y+15
5932 3188 0023 tst r16
5933 318a 01F0 breq .+2
5934 318c 00C0 rjmp .L505
5935 .L886:
5936 318e 8091 0000 lds r24,Looping_Roll
5937 3192 8823 tst r24
5938 3194 01F0 breq .+2
5939 3196 00C0 rjmp .L505
5940 3198 8091 0000 lds r24,Aktuell_az
5941 319c 9091 0000 lds r25,(Aktuell_az)+1
5942 31a0 8150 subi r24,lo8(513)
5943 31a2 9240 sbci r25,hi8(513)
5944 31a4 04F4 brge .L506
5945 31a6 8091 0000 lds r24,MotorenEin
5946 31aa 8823 tst r24
5947 31ac 01F4 brne .+2
5948 31ae 00C0 rjmp .L505
5949 .L506:
5950 31b0 9090 0000 lds r9,FromNaviCtrl_Value
5951 31b4 A090 0000 lds r10,EE_Parameter+28
5952 31b8 2090 0000 lds r2,Mittelwert_AccNick
5953 31bc 3090 0000 lds r3,(Mittelwert_AccNick)+1
5954 31c0 4090 0000 lds r4,Mittelwert_AccRoll
5955 31c4 5090 0000 lds r5,(Mittelwert_AccRoll)+1
5956 31c8 1914 cp __zero_reg__,r9
5957 31ca 04F0 brlt .+2
5958 31cc 00C0 rjmp .L507
5959 31ce BB24 clr r11
5960 31d0 CC24 clr r12
5961 31d2 DD24 clr r13
5962 31d4 CA01 movw r24,r20
5963 31d6 B901 movw r22,r18
5964 31d8 A601 movw r20,r12
5965 31da 9501 movw r18,r10
5966 31dc 0E94 0000 call __divmodsi4
5967 31e0 7901 movw r14,r18
5968 31e2 8A01 movw r16,r20
5969 31e4 8091 0000 lds r24,FromNaviCtrl+9
5970 31e8 9091 0000 lds r25,(FromNaviCtrl+9)+1
5971 31ec 281A sub r2,r24
5972 31ee 390A sbc r3,r25
5973 31f0 C101 movw r24,r2
5974 31f2 AA27 clr r26
5975 31f4 97FD sbrc r25,7
5976 31f6 A095 com r26
5977 31f8 BA2F mov r27,r26
5978 31fa E81A sub r14,r24
5979 31fc F90A sbc r15,r25
5980 31fe 0A0B sbc r16,r26
5981 3200 1B0B sbc r17,r27
5982 3202 6B81 ldd r22,Y+3
5983 3204 7C81 ldd r23,Y+4
5984 3206 8D81 ldd r24,Y+5
5985 3208 9E81 ldd r25,Y+6
5986 320a A601 movw r20,r12
5987 320c 9501 movw r18,r10
5988 320e 0E94 0000 call __divmodsi4
5989 3212 5901 movw r10,r18
5990 3214 6A01 movw r12,r20
5991 3216 8091 0000 lds r24,FromNaviCtrl+11
5992 321a 9091 0000 lds r25,(FromNaviCtrl+11)+1
5993 321e 481A sub r4,r24
5994 3220 590A sbc r5,r25
5995 3222 C201 movw r24,r4
5996 3224 AA27 clr r26
5997 3226 97FD sbrc r25,7
5998 3228 A095 com r26
5999 322a BA2F mov r27,r26
6000 322c A81A sub r10,r24
6001 322e B90A sbc r11,r25
6002 3230 CA0A sbc r12,r26
6003 3232 DB0A sbc r13,r27
6004 3234 292C mov r2,r9
6005 3236 3324 clr r3
6006 3238 27FC sbrc r2,7
6007 323a 3094 com r3
6008 323c 432C mov r4,r3
6009 323e 532C mov r5,r3
6010 3240 C801 movw r24,r16
6011 3242 B701 movw r22,r14
6012 3244 A201 movw r20,r4
6013 3246 9101 movw r18,r2
6014 3248 0E94 0000 call __mulsi3
6015 324c 97FF sbrs r25,7
6016 324e 00C0 rjmp .L508
6017 3250 6150 subi r22,lo8(-(511))
6018 3252 7E4F sbci r23,hi8(-(511))
6019 3254 8F4F sbci r24,hlo8(-(511))
6020 3256 9F4F sbci r25,hhi8(-(511))
6021 .L508:
6022 3258 3B01 movw r6,r22
6023 325a 4C01 movw r8,r24
6024 325c 09E0 ldi r16,9
6025 325e 9594 1: asr r9
6026 3260 8794 ror r8
6027 3262 7794 ror r7
6028 3264 6794 ror r6
6029 3266 0A95 dec r16
6030 3268 01F4 brne 1b
6031 326a C601 movw r24,r12
6032 326c B501 movw r22,r10
6033 326e A201 movw r20,r4
6034 3270 9101 movw r18,r2
6035 3272 0E94 0000 call __mulsi3
6036 3276 97FF sbrs r25,7
6037 3278 00C0 rjmp .L509
6038 327a 6150 subi r22,lo8(-(511))
6039 327c 7E4F sbci r23,hi8(-(511))
6040 327e 8F4F sbci r24,hlo8(-(511))
6041 3280 9F4F sbci r25,hhi8(-(511))
6042 .L509:
6043 3282 5B01 movw r10,r22
6044 3284 6C01 movw r12,r24
6045 3286 19E0 ldi r17,9
6046 3288 D594 1: asr r13
6047 328a C794 ror r12
6048 328c B794 ror r11
6049 328e A794 ror r10
6050 3290 1A95 dec r17
6051 3292 01F4 brne 1b
6052 3294 8091 0000 lds r24,MaxStickNick
6053 3298 9091 0000 lds r25,(MaxStickNick)+1
6054 329c 8134 cpi r24,65
6055 329e 9105 cpc r25,__zero_reg__
6056 32a0 04F4 brge .L511
6057 32a2 8091 0000 lds r24,MaxStickRoll
6058 32a6 9091 0000 lds r25,(MaxStickRoll)+1
6059 32aa 8134 cpi r24,65
6060 32ac 9105 cpc r25,__zero_reg__
6061 32ae 04F0 brlt .L510
6062 .L511:
6063 32b0 D401 movw r26,r8
6064 32b2 C301 movw r24,r6
6065 32b4 97FE sbrs r9,7
6066 32b6 00C0 rjmp .L512
6067 32b8 0196 adiw r24,1
6068 32ba A11D adc r26,__zero_reg__
6069 32bc B11D adc r27,__zero_reg__
6070 .L512:
6071 32be 3C01 movw r6,r24
6072 32c0 4D01 movw r8,r26
6073 32c2 9594 asr r9
6074 32c4 8794 ror r8
6075 32c6 7794 ror r7
6076 32c8 6794 ror r6
6077 32ca D601 movw r26,r12
6078 32cc C501 movw r24,r10
6079 32ce D7FE sbrs r13,7
6080 32d0 00C0 rjmp .L513
6081 32d2 0196 adiw r24,1
6082 32d4 A11D adc r26,__zero_reg__
6083 32d6 B11D adc r27,__zero_reg__
6084 .L513:
6085 32d8 5C01 movw r10,r24
6086 32da 6D01 movw r12,r26
6087 32dc D594 asr r13
6088 32de C794 ror r12
6089 32e0 B794 ror r11
6090 32e2 A794 ror r10
6091 .L510:
6092 32e4 8091 0000 lds r24,FromNaviCtrl_Value+2
6093 32e8 282F mov r18,r24
6094 32ea 3327 clr r19
6095 32ec 27FD sbrc r18,7
6096 32ee 3095 com r19
6097 32f0 432F mov r20,r19
6098 32f2 532F mov r21,r19
6099 32f4 2615 cp r18,r6
6100 32f6 3705 cpc r19,r7
6101 32f8 4805 cpc r20,r8
6102 32fa 5905 cpc r21,r9
6103 32fc 04F4 brge .L514
6104 32fe 3901 movw r6,r18
6105 3300 4A01 movw r8,r20
6106 .L514:
6107 3302 9927 clr r25
6108 3304 87FD sbrc r24,7
6109 3306 9095 com r25
6110 3308 9095 com r25
6111 330a 8195 neg r24
6112 330c 9F4F sbci r25,lo8(-1)
6113 330e AA27 clr r26
6114 3310 97FD sbrc r25,7
6115 3312 A095 com r26
6116 3314 BA2F mov r27,r26
6117 3316 6816 cp r6,r24
6118 3318 7906 cpc r7,r25
6119 331a 8A06 cpc r8,r26
6120 331c 9B06 cpc r9,r27
6121 331e 04F4 brge .L515
6122 3320 3C01 movw r6,r24
6123 3322 4D01 movw r8,r26
6124 .L515:
6125 3324 2A15 cp r18,r10
6126 3326 3B05 cpc r19,r11
6127 3328 4C05 cpc r20,r12
6128 332a 5D05 cpc r21,r13
6129 332c 04F4 brge .L516
6130 332e 5901 movw r10,r18
6131 3330 6A01 movw r12,r20
6132 .L516:
6133 3332 A816 cp r10,r24
6134 3334 B906 cpc r11,r25
6135 3336 CA06 cpc r12,r26
6136 3338 DB06 cpc r13,r27
6137 333a 04F0 brlt .+2
6138 333c 00C0 rjmp .L518
6139 333e 5C01 movw r10,r24
6140 3340 6D01 movw r12,r26
6141 3342 00C0 rjmp .L518
6142 .L507:
6143 3344 EA2C mov r14,r10
6144 3346 FF24 clr r15
6145 3348 0027 clr r16
6146 334a 1127 clr r17
6147 334c CA01 movw r24,r20
6148 334e B901 movw r22,r18
6149 3350 A801 movw r20,r16
6150 3352 9701 movw r18,r14
6151 3354 0E94 0000 call __divmodsi4
6152 3358 3901 movw r6,r18
6153 335a 4A01 movw r8,r20
6154 335c C101 movw r24,r2
6155 335e AA27 clr r26
6156 3360 97FD sbrc r25,7
6157 3362 A095 com r26
6158 3364 BA2F mov r27,r26
6159 3366 681A sub r6,r24
6160 3368 790A sbc r7,r25
6161 336a 8A0A sbc r8,r26
6162 336c 9B0A sbc r9,r27
6163 336e 6B81 ldd r22,Y+3
6164 3370 7C81 ldd r23,Y+4
6165 3372 8D81 ldd r24,Y+5
6166 3374 9E81 ldd r25,Y+6
6167 3376 A801 movw r20,r16
6168 3378 9701 movw r18,r14
6169 337a 0E94 0000 call __divmodsi4
6170 337e 5901 movw r10,r18
6171 3380 6A01 movw r12,r20
6172 3382 C201 movw r24,r4
6173 3384 AA27 clr r26
6174 3386 97FD sbrc r25,7
6175 3388 A095 com r26
6176 338a BA2F mov r27,r26
6177 338c A81A sub r10,r24
6178 338e B90A sbc r11,r25
6179 3390 CA0A sbc r12,r26
6180 3392 DB0A sbc r13,r27
6181 3394 D401 movw r26,r8
6182 3396 C301 movw r24,r6
6183 3398 97FE sbrs r9,7
6184 339a 00C0 rjmp .L519
6185 339c 0F96 adiw r24,15
6186 339e A11D adc r26,__zero_reg__
6187 33a0 B11D adc r27,__zero_reg__
6188 .L519:
6189 33a2 3C01 movw r6,r24
6190 33a4 4D01 movw r8,r26
6191 33a6 F4E0 ldi r31,4
6192 33a8 9594 1: asr r9
6193 33aa 8794 ror r8
6194 33ac 7794 ror r7
6195 33ae 6794 ror r6
6196 33b0 FA95 dec r31
6197 33b2 01F4 brne 1b
6198 33b4 D601 movw r26,r12
6199 33b6 C501 movw r24,r10
6200 33b8 D7FE sbrs r13,7
6201 33ba 00C0 rjmp .L520
6202 33bc 0F96 adiw r24,15
6203 33be A11D adc r26,__zero_reg__
6204 33c0 B11D adc r27,__zero_reg__
6205 .L520:
6206 33c2 5C01 movw r10,r24
6207 33c4 6D01 movw r12,r26
6208 33c6 E4E0 ldi r30,4
6209 33c8 D594 1: asr r13
6210 33ca C794 ror r12
6211 33cc B794 ror r11
6212 33ce A794 ror r10
6213 33d0 EA95 dec r30
6214 33d2 01F4 brne 1b
6215 33d4 8091 0000 lds r24,MaxStickNick
6216 33d8 9091 0000 lds r25,(MaxStickNick)+1
6217 33dc 8134 cpi r24,65
6218 33de 9105 cpc r25,__zero_reg__
6219 33e0 04F4 brge .L522
6220 33e2 8091 0000 lds r24,MaxStickRoll
6221 33e6 9091 0000 lds r25,(MaxStickRoll)+1
6222 33ea 8134 cpi r24,65
6223 33ec 9105 cpc r25,__zero_reg__
6224 33ee 04F0 brlt .L521
6225 .L522:
6226 33f0 C401 movw r24,r8
6227 33f2 B301 movw r22,r6
6228 33f4 23E0 ldi r18,lo8(3)
6229 33f6 30E0 ldi r19,hi8(3)
6230 33f8 40E0 ldi r20,hlo8(3)
6231 33fa 50E0 ldi r21,hhi8(3)
6232 33fc 0E94 0000 call __divmodsi4
6233 3400 3901 movw r6,r18
6234 3402 4A01 movw r8,r20
6235 3404 C601 movw r24,r12
6236 3406 B501 movw r22,r10
6237 3408 23E0 ldi r18,lo8(3)
6238 340a 30E0 ldi r19,hi8(3)
6239 340c 40E0 ldi r20,hlo8(3)
6240 340e 50E0 ldi r21,hhi8(3)
6241 3410 0E94 0000 call __divmodsi4
6242 3414 5901 movw r10,r18
6243 3416 6A01 movw r12,r20
6244 .L521:
6245 3418 8091 0000 lds r24,EE_Parameter+4
6246 341c E82F mov r30,r24
6247 341e FF27 clr r31
6248 3420 EE0F add r30,r30
6249 3422 FF1F adc r31,r31
6250 3424 E050 subi r30,lo8(-(PPM_in))
6251 3426 F040 sbci r31,hi8(-(PPM_in))
6252 3428 8081 ld r24,Z
6253 342a 9181 ldd r25,Z+1
6254 342c 0190 ld __tmp_reg__,Z+
6255 342e F081 ld r31,Z
6256 3430 E02D mov r30,__tmp_reg__
6257 3432 F7FF sbrs r31,7
6258 3434 00C0 rjmp .L524
6259 3436 F095 com r31
6260 3438 E195 neg r30
6261 343a FF4F sbci r31,lo8(-1)
6262 .L524:
6263 343c 7A97 sbiw r30,26
6264 343e 04F0 brlt .L523
6265 3440 C401 movw r24,r8
6266 3442 B301 movw r22,r6
6267 3444 23E0 ldi r18,lo8(3)
6268 3446 30E0 ldi r19,hi8(3)
6269 3448 40E0 ldi r20,hlo8(3)
6270 344a 50E0 ldi r21,hhi8(3)
6271 344c 0E94 0000 call __divmodsi4
6272 3450 3901 movw r6,r18
6273 3452 4A01 movw r8,r20
6274 3454 C601 movw r24,r12
6275 3456 B501 movw r22,r10
6276 3458 23E0 ldi r18,lo8(3)
6277 345a 30E0 ldi r19,hi8(3)
6278 345c 40E0 ldi r20,hlo8(3)
6279 345e 50E0 ldi r21,hhi8(3)
6280 3460 0E94 0000 call __divmodsi4
6281 3464 5901 movw r10,r18
6282 3466 6A01 movw r12,r20
6283 .L523:
6284 3468 89E1 ldi r24,lo8(25)
6285 346a 8093 0000 sts KompassFusion,r24
6286 346e 21E2 ldi r18,lo8(33)
6287 3470 6216 cp r6,r18
6288 3472 7104 cpc r7,__zero_reg__
6289 3474 8104 cpc r8,__zero_reg__
6290 3476 9104 cpc r9,__zero_reg__
6291 3478 04F0 brlt .L525
6292 347a 70E2 ldi r23,lo8(32)
6293 347c 672E mov r6,r23
6294 347e 712C mov r7,__zero_reg__
6295 3480 812C mov r8,__zero_reg__
6296 3482 912C mov r9,__zero_reg__
6297 .L525:
6298 3484 30EE ldi r19,lo8(-32)
6299 3486 6316 cp r6,r19
6300 3488 3FEF ldi r19,hi8(-32)
6301 348a 7306 cpc r7,r19
6302 348c 3FEF ldi r19,hlo8(-32)
6303 348e 8306 cpc r8,r19
6304 3490 3FEF ldi r19,hhi8(-32)
6305 3492 9306 cpc r9,r19
6306 3494 04F4 brge .L526
6307 3496 60EE ldi r22,lo8(-32)
6308 3498 662E mov r6,r22
6309 349a 6FEF ldi r22,hi8(-32)
6310 349c 762E mov r7,r22
6311 349e 6FEF ldi r22,hlo8(-32)
6312 34a0 862E mov r8,r22
6313 34a2 6FEF ldi r22,hhi8(-32)
6314 34a4 962E mov r9,r22
6315 .L526:
6316 34a6 41E2 ldi r20,lo8(33)
6317 34a8 A416 cp r10,r20
6318 34aa B104 cpc r11,__zero_reg__
6319 34ac C104 cpc r12,__zero_reg__
6320 34ae D104 cpc r13,__zero_reg__
6321 34b0 04F0 brlt .L527
6322 34b2 50E2 ldi r21,lo8(32)
6323 34b4 A52E mov r10,r21
6324 34b6 B12C mov r11,__zero_reg__
6325 34b8 C12C mov r12,__zero_reg__
6326 34ba D12C mov r13,__zero_reg__
6327 .L527:
6328 34bc 50EE ldi r21,lo8(-32)
6329 34be A516 cp r10,r21
6330 34c0 5FEF ldi r21,hi8(-32)
6331 34c2 B506 cpc r11,r21
6332 34c4 5FEF ldi r21,hlo8(-32)
6333 34c6 C506 cpc r12,r21
6334 34c8 5FEF ldi r21,hhi8(-32)
6335 34ca D506 cpc r13,r21
6336 34cc 04F4 brge .L518
6337 34ce 40EE ldi r20,lo8(-32)
6338 34d0 A42E mov r10,r20
6339 34d2 4FEF ldi r20,hi8(-32)
6340 34d4 B42E mov r11,r20
6341 34d6 4FEF ldi r20,hlo8(-32)
6342 34d8 C42E mov r12,r20
6343 34da 4FEF ldi r20,hhi8(-32)
6344 34dc D42E mov r13,r20
6345 .L518:
6346 34de 8091 0000 lds r24,Mess_IntegralNick
6347 34e2 9091 0000 lds r25,(Mess_IntegralNick)+1
6348 34e6 A091 0000 lds r26,(Mess_IntegralNick)+2
6349 34ea B091 0000 lds r27,(Mess_IntegralNick)+3
6350 34ee 8619 sub r24,r6
6351 34f0 9709 sbc r25,r7
6352 34f2 A809 sbc r26,r8
6353 34f4 B909 sbc r27,r9
6354 34f6 8093 0000 sts Mess_IntegralNick,r24
6355 34fa 9093 0000 sts (Mess_IntegralNick)+1,r25
6356 34fe A093 0000 sts (Mess_IntegralNick)+2,r26
6357 3502 B093 0000 sts (Mess_IntegralNick)+3,r27
6358 3506 8091 0000 lds r24,Mess_IntegralRoll
6359 350a 9091 0000 lds r25,(Mess_IntegralRoll)+1
6360 350e A091 0000 lds r26,(Mess_IntegralRoll)+2
6361 3512 B091 0000 lds r27,(Mess_IntegralRoll)+3
6362 3516 8A19 sub r24,r10
6363 3518 9B09 sbc r25,r11
6364 351a AC09 sbc r26,r12
6365 351c BD09 sbc r27,r13
6366 351e 8093 0000 sts Mess_IntegralRoll,r24
6367 3522 9093 0000 sts (Mess_IntegralRoll)+1,r25
6368 3526 A093 0000 sts (Mess_IntegralRoll)+2,r26
6369 352a B093 0000 sts (Mess_IntegralRoll)+3,r27
6370 .L505:
6371 352e 8091 0000 lds r24,ZaehlMessungen
6372 3532 9091 0000 lds r25,(ZaehlMessungen)+1
6373 3536 8F3F cpi r24,255
6374 3538 9105 cpc r25,__zero_reg__
6375 353a 01F0 breq .+2
6376 353c 00F4 brsh .+2
6377 353e 00C0 rjmp .L529
6378 3540 6F85 ldd r22,Y+15
6379 3542 6623 tst r22
6380 3544 01F0 breq .+2
6381 3546 00C0 rjmp .L530
6382 3548 8091 0000 lds r24,Looping_Roll
6383 354c 8823 tst r24
6384 354e 01F0 breq .+2
6385 3550 00C0 rjmp .L530
6386 3552 8091 0000 lds r24,TrichterFlug
6387 3556 8823 tst r24
6388 3558 01F0 breq .+2
6389 355a 00C0 rjmp .L530
6390 355c 7091 0000 lds r23,EE_Parameter+68
6391 3560 788B std Y+16,r23
6392 3562 7723 tst r23
6393 3564 01F4 brne .+2
6394 3566 00C0 rjmp .L530
6395 3568 8091 0000 lds r24,MittelIntegralNick
6396 356c 9091 0000 lds r25,(MittelIntegralNick)+1
6397 3570 A091 0000 lds r26,(MittelIntegralNick)+2
6398 3574 B091 0000 lds r27,(MittelIntegralNick)+3
6399 3578 B7FF sbrs r27,7
6400 357a 00C0 rjmp .L531
6401 357c 8150 subi r24,lo8(-(255))
6402 357e 9F4F sbci r25,hi8(-(255))
6403 3580 AF4F sbci r26,hlo8(-(255))
6404 3582 BF4F sbci r27,hhi8(-(255))
6405 .L531:
6406 3584 E92E mov r14,r25
6407 3586 FA2E mov r15,r26
6408 3588 0B2F mov r16,r27
6409 358a 1127 clr r17
6410 358c 07FD sbrc r16,7
6411 358e 1A95 dec r17
6412 3590 E092 0000 sts MittelIntegralNick,r14
6413 3594 F092 0000 sts (MittelIntegralNick)+1,r15
6414 3598 0093 0000 sts (MittelIntegralNick)+2,r16
6415 359c 1093 0000 sts (MittelIntegralNick)+3,r17
6416 35a0 8091 0000 lds r24,MittelIntegralRoll
6417 35a4 9091 0000 lds r25,(MittelIntegralRoll)+1
6418 35a8 A091 0000 lds r26,(MittelIntegralRoll)+2
6419 35ac B091 0000 lds r27,(MittelIntegralRoll)+3
6420 35b0 B7FF sbrs r27,7
6421 35b2 00C0 rjmp .L532
6422 35b4 8150 subi r24,lo8(-(255))
6423 35b6 9F4F sbci r25,hi8(-(255))
6424 35b8 AF4F sbci r26,hlo8(-(255))
6425 35ba BF4F sbci r27,hhi8(-(255))
6426 .L532:
6427 35bc 892F mov r24,r25
6428 35be 9A2F mov r25,r26
6429 35c0 AB2F mov r26,r27
6430 35c2 BB27 clr r27
6431 35c4 A7FD sbrc r26,7
6432 35c6 BA95 dec r27
6433 35c8 898B std Y+17,r24
6434 35ca 9A8B std Y+18,r25
6435 35cc AB8B std Y+19,r26
6436 35ce BC8B std Y+20,r27
6437 35d0 8093 0000 sts MittelIntegralRoll,r24
6438 35d4 9093 0000 sts (MittelIntegralRoll)+1,r25
6439 35d8 A093 0000 sts (MittelIntegralRoll)+2,r26
6440 35dc B093 0000 sts (MittelIntegralRoll)+3,r27
6441 35e0 8091 0000 lds r24,EE_Parameter+28
6442 35e4 A82E mov r10,r24
6443 35e6 BB24 clr r11
6444 35e8 CC24 clr r12
6445 35ea DD24 clr r13
6446 35ec 2091 0000 lds r18,IntegralAccNick
6447 35f0 3091 0000 lds r19,(IntegralAccNick)+1
6448 35f4 4091 0000 lds r20,(IntegralAccNick)+2
6449 35f8 5091 0000 lds r21,(IntegralAccNick)+3
6450 35fc C601 movw r24,r12
6451 35fe B501 movw r22,r10
6452 3600 0E94 0000 call __mulsi3
6453 3604 97FF sbrs r25,7
6454 3606 00C0 rjmp .L533
6455 3608 6150 subi r22,lo8(-(255))
6456 360a 7F4F sbci r23,hi8(-(255))
6457 360c 8F4F sbci r24,hlo8(-(255))
6458 360e 9F4F sbci r25,hhi8(-(255))
6459 .L533:
6460 3610 672E mov r6,r23
6461 3612 782E mov r7,r24
6462 3614 892E mov r8,r25
6463 3616 9924 clr r9
6464 3618 87FC sbrc r8,7
6465 361a 9A94 dec r9
6466 361c 6092 0000 sts IntegralAccNick,r6
6467 3620 7092 0000 sts (IntegralAccNick)+1,r7
6468 3624 8092 0000 sts (IntegralAccNick)+2,r8
6469 3628 9092 0000 sts (IntegralAccNick)+3,r9
6470 362c 2091 0000 lds r18,IntegralAccRoll
6471 3630 3091 0000 lds r19,(IntegralAccRoll)+1
6472 3634 4091 0000 lds r20,(IntegralAccRoll)+2
6473 3638 5091 0000 lds r21,(IntegralAccRoll)+3
6474 363c C601 movw r24,r12
6475 363e B501 movw r22,r10
6476 3640 0E94 0000 call __mulsi3
6477 3644 97FF sbrs r25,7
6478 3646 00C0 rjmp .L534
6479 3648 6150 subi r22,lo8(-(255))
6480 364a 7F4F sbci r23,hi8(-(255))
6481 364c 8F4F sbci r24,hlo8(-(255))
6482 364e 9F4F sbci r25,hhi8(-(255))
6483 .L534:
6484 3650 272E mov r2,r23
6485 3652 382E mov r3,r24
6486 3654 492E mov r4,r25
6487 3656 5524 clr r5
6488 3658 47FC sbrc r4,7
6489 365a 5A94 dec r5
6490 365c 2092 0000 sts IntegralAccRoll,r2
6491 3660 3092 0000 sts (IntegralAccRoll)+1,r3
6492 3664 4092 0000 sts (IntegralAccRoll)+2,r4
6493 3668 5092 0000 sts (IntegralAccRoll)+3,r5
6494 366c 8091 0000 lds r24,IntegralAccZ
6495 3670 9091 0000 lds r25,(IntegralAccZ)+1
6496 3674 A091 0000 lds r26,(IntegralAccZ)+2
6497 3678 B091 0000 lds r27,(IntegralAccZ)+3
6498 367c B7FF sbrs r27,7
6499 367e 00C0 rjmp .L535
6500 3680 8150 subi r24,lo8(-(255))
6501 3682 9F4F sbci r25,hi8(-(255))
6502 3684 AF4F sbci r26,hlo8(-(255))
6503 3686 BF4F sbci r27,hhi8(-(255))
6504 .L535:
6505 3688 892F mov r24,r25
6506 368a 9A2F mov r25,r26
6507 368c AB2F mov r26,r27
6508 368e BB27 clr r27
6509 3690 A7FD sbrc r26,7
6510 3692 BA95 dec r27
6511 3694 8093 0000 sts IntegralAccZ,r24
6512 3698 9093 0000 sts (IntegralAccZ)+1,r25
6513 369c A093 0000 sts (IntegralAccZ)+2,r26
6514 36a0 B093 0000 sts (IntegralAccZ)+3,r27
6515 36a4 D801 movw r26,r16
6516 36a6 C701 movw r24,r14
6517 36a8 8619 sub r24,r6
6518 36aa 9709 sbc r25,r7
6519 36ac A809 sbc r26,r8
6520 36ae B909 sbc r27,r9
6521 36b0 8093 0000 sts IntegralFehlerNick.3,r24
6522 36b4 9093 0000 sts (IntegralFehlerNick.3)+1,r25
6523 36b8 A093 0000 sts (IntegralFehlerNick.3)+2,r26
6524 36bc B093 0000 sts (IntegralFehlerNick.3)+3,r27
6525 36c0 2091 0000 lds r18,EE_Parameter+67
6526 36c4 E22E mov r14,r18
6527 36c6 FF24 clr r15
6528 36c8 0027 clr r16
6529 36ca 1127 clr r17
6530 36cc BC01 movw r22,r24
6531 36ce CD01 movw r24,r26
6532 36d0 A801 movw r20,r16
6533 36d2 9701 movw r18,r14
6534 36d4 0E94 0000 call __divmodsi4
6535 36d8 5901 movw r10,r18
6536 36da 6A01 movw r12,r20
6537 36dc 2093 0000 sts ausgleichNick.10,r18
6538 36e0 3093 0000 sts (ausgleichNick.10)+1,r19
6539 36e4 4093 0000 sts (ausgleichNick.10)+2,r20
6540 36e8 5093 0000 sts (ausgleichNick.10)+3,r21
6541 36ec 8989 ldd r24,Y+17
6542 36ee 9A89 ldd r25,Y+18
6543 36f0 AB89 ldd r26,Y+19
6544 36f2 BC89 ldd r27,Y+20
6545 36f4 8219 sub r24,r2
6546 36f6 9309 sbc r25,r3
6547 36f8 A409 sbc r26,r4
6548 36fa B509 sbc r27,r5
6549 36fc 8093 0000 sts IntegralFehlerRoll.4,r24
6550 3700 9093 0000 sts (IntegralFehlerRoll.4)+1,r25
6551 3704 A093 0000 sts (IntegralFehlerRoll.4)+2,r26
6552 3708 B093 0000 sts (IntegralFehlerRoll.4)+3,r27
6553 370c BC01 movw r22,r24
6554 370e CD01 movw r24,r26
6555 3710 A801 movw r20,r16
6556 3712 9701 movw r18,r14
6557 3714 0E94 0000 call __divmodsi4
6558 3718 2093 0000 sts ausgleichRoll.11,r18
6559 371c 3093 0000 sts (ausgleichRoll.11)+1,r19
6560 3720 4093 0000 sts (ausgleichRoll.11)+2,r20
6561 3724 5093 0000 sts (ausgleichRoll.11)+3,r21
6562 3728 D601 movw r26,r12
6563 372a C501 movw r24,r10
6564 372c D7FE sbrs r13,7
6565 372e 00C0 rjmp .L536
6566 3730 8150 subi r24,lo8(-(255))
6567 3732 9F4F sbci r25,hi8(-(255))
6568 3734 AF4F sbci r26,hlo8(-(255))
6569 3736 BF4F sbci r27,hhi8(-(255))
6570 .L536:
6571 3738 892F mov r24,r25
6572 373a 9A2F mov r25,r26
6573 373c AB2F mov r26,r27
6574 373e BB27 clr r27
6575 3740 A7FD sbrc r26,7
6576 3742 BA95 dec r27
6577 3744 9093 0000 sts (LageKorrekturNick)+1,r25
6578 3748 8093 0000 sts LageKorrekturNick,r24
6579 374c 57FF sbrs r21,7
6580 374e 00C0 rjmp .L537
6581 3750 2150 subi r18,lo8(-(255))
6582 3752 3F4F sbci r19,hi8(-(255))
6583 3754 4F4F sbci r20,hlo8(-(255))
6584 3756 5F4F sbci r21,hhi8(-(255))
6585 .L537:
6586 3758 BB27 clr r27
6587 375a 57FD sbrc r21,7
6588 375c BA95 dec r27
6589 375e A52F mov r26,r21
6590 3760 942F mov r25,r20
6591 3762 832F mov r24,r19
6592 3764 9093 0000 sts (LageKorrekturRoll)+1,r25
6593 3768 8093 0000 sts LageKorrekturRoll,r24
6594 376c 8091 0000 lds r24,MaxStickNick
6595 3770 9091 0000 lds r25,(MaxStickNick)+1
6596 3774 8134 cpi r24,65
6597 3776 9105 cpc r25,__zero_reg__
6598 3778 04F4 brge .L539
6599 377a 8091 0000 lds r24,MaxStickRoll
6600 377e 9091 0000 lds r25,(MaxStickRoll)+1
6601 3782 8134 cpi r24,65
6602 3784 9105 cpc r25,__zero_reg__
6603 3786 04F4 brge .L539
6604 3788 8091 0000 lds r24,EE_Parameter+4
6605 378c E82F mov r30,r24
6606 378e FF27 clr r31
6607 3790 EE0F add r30,r30
6608 3792 FF1F adc r31,r31
6609 3794 E050 subi r30,lo8(-(PPM_in))
6610 3796 F040 sbci r31,hi8(-(PPM_in))
6611 3798 8081 ld r24,Z
6612 379a 9181 ldd r25,Z+1
6613 379c 0190 ld __tmp_reg__,Z+
6614 379e F081 ld r31,Z
6615 37a0 E02D mov r30,__tmp_reg__
6616 37a2 F7FF sbrs r31,7
6617 37a4 00C0 rjmp .L540
6618 37a6 F095 com r31
6619 37a8 E195 neg r30
6620 37aa FF4F sbci r31,lo8(-1)
6621 .L540:
6622 37ac 7A97 sbiw r30,26
6623 37ae 04F0 brlt .L538
6624 .L539:
6625 37b0 8091 0000 lds r24,FromNaviCtrl_Value
6626 37b4 8F3F cpi r24,lo8(-1)
6627 37b6 01F4 brne .L538
6628 37b8 8091 0000 lds r24,LageKorrekturNick
6629 37bc 9091 0000 lds r25,(LageKorrekturNick)+1
6630 37c0 97FD sbrc r25,7
6631 37c2 0196 adiw r24,1
6632 .L541:
6633 37c4 9595 asr r25
6634 37c6 8795 ror r24
6635 37c8 9093 0000 sts (LageKorrekturNick)+1,r25
6636 37cc 8093 0000 sts LageKorrekturNick,r24
6637 37d0 8091 0000 lds r24,LageKorrekturRoll
6638 37d4 9091 0000 lds r25,(LageKorrekturRoll)+1
6639 37d8 97FD sbrc r25,7
6640 37da 0196 adiw r24,1
6641 .L542:
6642 37dc 9595 asr r25
6643 37de 8795 ror r24
6644 37e0 9093 0000 sts (LageKorrekturRoll)+1,r25
6645 37e4 8093 0000 sts LageKorrekturRoll,r24
6646 .L538:
6647 37e8 8091 0000 lds r24,MittelIntegralNick2
6648 37ec 9091 0000 lds r25,(MittelIntegralNick2)+1
6649 37f0 A091 0000 lds r26,(MittelIntegralNick2)+2
6650 37f4 B091 0000 lds r27,(MittelIntegralNick2)+3
6651 37f8 B7FF sbrs r27,7
6652 37fa 00C0 rjmp .L543
6653 37fc 8150 subi r24,lo8(-(255))
6654 37fe 9F4F sbci r25,hi8(-(255))
6655 3800 AF4F sbci r26,hlo8(-(255))
6656 3802 BF4F sbci r27,hhi8(-(255))
6657 .L543:
6658 3804 892F mov r24,r25
6659 3806 9A2F mov r25,r26
6660 3808 AB2F mov r26,r27
6661 380a BB27 clr r27
6662 380c A7FD sbrc r26,7
6663 380e BA95 dec r27
6664 3810 8093 0000 sts MittelIntegralNick2,r24
6665 3814 9093 0000 sts (MittelIntegralNick2)+1,r25
6666 3818 A093 0000 sts (MittelIntegralNick2)+2,r26
6667 381c B093 0000 sts (MittelIntegralNick2)+3,r27
6668 3820 8091 0000 lds r24,MittelIntegralRoll2
6669 3824 9091 0000 lds r25,(MittelIntegralRoll2)+1
6670 3828 A091 0000 lds r26,(MittelIntegralRoll2)+2
6671 382c B091 0000 lds r27,(MittelIntegralRoll2)+3
6672 3830 B7FF sbrs r27,7
6673 3832 00C0 rjmp .L544
6674 3834 8150 subi r24,lo8(-(255))
6675 3836 9F4F sbci r25,hi8(-(255))
6676 3838 AF4F sbci r26,hlo8(-(255))
6677 383a BF4F sbci r27,hhi8(-(255))
6678 .L544:
6679 383c 892F mov r24,r25
6680 383e 9A2F mov r25,r26
6681 3840 AB2F mov r26,r27
6682 3842 BB27 clr r27
6683 3844 A7FD sbrc r26,7
6684 3846 BA95 dec r27
6685 3848 8093 0000 sts MittelIntegralRoll2,r24
6686 384c 9093 0000 sts (MittelIntegralRoll2)+1,r25
6687 3850 A093 0000 sts (MittelIntegralRoll2)+2,r26
6688 3854 B093 0000 sts (MittelIntegralRoll2)+3,r27
6689 3858 8091 0000 lds r24,IntegralNick
6690 385c 9091 0000 lds r25,(IntegralNick)+1
6691 3860 A091 0000 lds r26,(IntegralNick)+2
6692 3864 B091 0000 lds r27,(IntegralNick)+3
6693 3868 2F81 ldd r18,Y+7
6694 386a 3885 ldd r19,Y+8
6695 386c 4985 ldd r20,Y+9
6696 386e 5A85 ldd r21,Y+10
6697 3870 281B sub r18,r24
6698 3872 390B sbc r19,r25
6699 3874 4A0B sbc r20,r26
6700 3876 5B0B sbc r21,r27
6701 3878 2093 0000 sts tmp_long.1,r18
6702 387c 3093 0000 sts (tmp_long.1)+1,r19
6703 3880 4093 0000 sts (tmp_long.1)+2,r20
6704 3884 5093 0000 sts (tmp_long.1)+3,r21
6705 3888 8091 0000 lds r24,IntegralRoll
6706 388c 9091 0000 lds r25,(IntegralRoll)+1
6707 3890 A091 0000 lds r26,(IntegralRoll)+2
6708 3894 B091 0000 lds r27,(IntegralRoll)+3
6709 3898 EB84 ldd r14,Y+11
6710 389a FC84 ldd r15,Y+12
6711 389c 0D85 ldd r16,Y+13
6712 389e 1E85 ldd r17,Y+14
6713 38a0 E81A sub r14,r24
6714 38a2 F90A sbc r15,r25
6715 38a4 0A0B sbc r16,r26
6716 38a6 1B0B sbc r17,r27
6717 38a8 E092 0000 sts tmp_long2.2,r14
6718 38ac F092 0000 sts (tmp_long2.2)+1,r15
6719 38b0 0093 0000 sts (tmp_long2.2)+2,r16
6720 38b4 1093 0000 sts (tmp_long2.2)+3,r17
6721 38b8 2093 0000 sts IntegralFehlerNick.3,r18
6722 38bc 3093 0000 sts (IntegralFehlerNick.3)+1,r19
6723 38c0 4093 0000 sts (IntegralFehlerNick.3)+2,r20
6724 38c4 5093 0000 sts (IntegralFehlerNick.3)+3,r21
6725 38c8 E092 0000 sts IntegralFehlerRoll.4,r14
6726 38cc F092 0000 sts (IntegralFehlerRoll.4)+1,r15
6727 38d0 0093 0000 sts (IntegralFehlerRoll.4)+2,r16
6728 38d4 1093 0000 sts (IntegralFehlerRoll.4)+3,r17
6729 38d8 8091 0000 lds r24,Mess_IntegralNick2
6730 38dc 9091 0000 lds r25,(Mess_IntegralNick2)+1
6731 38e0 A091 0000 lds r26,(Mess_IntegralNick2)+2
6732 38e4 B091 0000 lds r27,(Mess_IntegralNick2)+3
6733 38e8 821B sub r24,r18
6734 38ea 930B sbc r25,r19
6735 38ec A40B sbc r26,r20
6736 38ee B50B sbc r27,r21
6737 38f0 8093 0000 sts Mess_IntegralNick2,r24
6738 38f4 9093 0000 sts (Mess_IntegralNick2)+1,r25
6739 38f8 A093 0000 sts (Mess_IntegralNick2)+2,r26
6740 38fc B093 0000 sts (Mess_IntegralNick2)+3,r27
6741 3900 8091 0000 lds r24,Mess_IntegralRoll2
6742 3904 9091 0000 lds r25,(Mess_IntegralRoll2)+1
6743 3908 A091 0000 lds r26,(Mess_IntegralRoll2)+2
6744 390c B091 0000 lds r27,(Mess_IntegralRoll2)+3
6745 3910 8E19 sub r24,r14
6746 3912 9F09 sbc r25,r15
6747 3914 A00B sbc r26,r16
6748 3916 B10B sbc r27,r17
6749 3918 8093 0000 sts Mess_IntegralRoll2,r24
6750 391c 9093 0000 sts (Mess_IntegralRoll2)+1,r25
6751 3920 A093 0000 sts (Mess_IntegralRoll2)+2,r26
6752 3924 B093 0000 sts (Mess_IntegralRoll2)+3,r27
6753 3928 8889 ldd r24,Y+16
6754 392a 8823 tst r24
6755 392c 01F0 breq .L545
6756 392e 2091 0000 lds r18,GierGyroFehler
6757 3932 3091 0000 lds r19,(GierGyroFehler)+1
6758 3936 2138 cpi r18,129
6759 3938 3105 cpc r19,__zero_reg__
6760 393a 04F0 brlt .L546
6761 393c 8091 0000 lds r24,AdNeutralGier
6762 3940 9091 0000 lds r25,(AdNeutralGier)+1
6763 3944 0196 adiw r24,1
6764 3946 9093 0000 sts (AdNeutralGier)+1,r25
6765 394a 8093 0000 sts AdNeutralGier,r24
6766 .L546:
6767 394e 2058 subi r18,lo8(-128)
6768 3950 3F4F sbci r19,hi8(-128)
6769 3952 04F4 brge .L545
6770 3954 8091 0000 lds r24,AdNeutralGier
6771 3958 9091 0000 lds r25,(AdNeutralGier)+1
6772 395c 0197 sbiw r24,1
6773 395e 9093 0000 sts (AdNeutralGier)+1,r25
6774 3962 8093 0000 sts AdNeutralGier,r24
6775 .L545:
6776 3966 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
6777 396a 1092 0000 sts GierGyroFehler,__zero_reg__
6778 396e 81E0 ldi r24,lo8(1)
6779 3970 90E0 ldi r25,hi8(1)
6780 3972 9093 0000 sts (cnt.14)+1,r25
6781 3976 8093 0000 sts cnt.14,r24
6782 397a E090 0000 lds r14,IntegralFehlerNick.3
6783 397e F090 0000 lds r15,(IntegralFehlerNick.3)+1
6784 3982 0091 0000 lds r16,(IntegralFehlerNick.3)+2
6785 3986 1091 0000 lds r17,(IntegralFehlerNick.3)+3
6786 398a D801 movw r26,r16
6787 398c C701 movw r24,r14
6788 398e 17FF sbrs r17,7
6789 3990 00C0 rjmp .L549
6790 3992 8827 clr r24
6791 3994 9927 clr r25
6792 3996 DC01 movw r26,r24
6793 3998 8E19 sub r24,r14
6794 399a 9F09 sbc r25,r15
6795 399c A00B sbc r26,r16
6796 399e B10B sbc r27,r17
6797 .L549:
6798 39a0 8150 subi r24,lo8(513)
6799 39a2 9240 sbci r25,hi8(513)
6800 39a4 A040 sbci r26,hlo8(513)
6801 39a6 B040 sbci r27,hhi8(513)
6802 39a8 04F0 brlt .L548
6803 39aa 84E0 ldi r24,lo8(4)
6804 39ac 90E0 ldi r25,hi8(4)
6805 39ae 9093 0000 sts (cnt.14)+1,r25
6806 39b2 8093 0000 sts cnt.14,r24
6807 .L548:
6808 39b6 8091 0000 lds r24,MittelIntegralNick_Alt.19
6809 39ba 9091 0000 lds r25,(MittelIntegralNick_Alt.19)+1
6810 39be A091 0000 lds r26,(MittelIntegralNick_Alt.19)+2
6811 39c2 B091 0000 lds r27,(MittelIntegralNick_Alt.19)+3
6812 39c6 2091 0000 lds r18,MittelIntegralNick
6813 39ca 3091 0000 lds r19,(MittelIntegralNick)+1
6814 39ce 4091 0000 lds r20,(MittelIntegralNick)+2
6815 39d2 5091 0000 lds r21,(MittelIntegralNick)+3
6816 39d6 821B sub r24,r18
6817 39d8 930B sbc r25,r19
6818 39da A40B sbc r26,r20
6819 39dc B50B sbc r27,r21
6820 39de 815E subi r24,lo8(-(19999))
6821 39e0 914B sbci r25,hi8(-(19999))
6822 39e2 AF4F sbci r26,hlo8(-(19999))
6823 39e4 BF4F sbci r27,hhi8(-(19999))
6824 39e6 8F53 subi r24,lo8(39999)
6825 39e8 9C49 sbci r25,hi8(39999)
6826 39ea A040 sbci r26,hlo8(39999)
6827 39ec B040 sbci r27,hhi8(39999)
6828 39ee 00F0 brlo .L551
6829 39f0 8091 0000 lds r24,FromNaviCtrl_Value+1
6830 39f4 8931 cpi r24,lo8(25)
6831 39f6 04F4 brge .+2
6832 39f8 00C0 rjmp .L550
6833 .L551:
6834 39fa 21E0 ldi r18,lo8(4097)
6835 39fc E216 cp r14,r18
6836 39fe 20E1 ldi r18,hi8(4097)
6837 3a00 F206 cpc r15,r18
6838 3a02 20E0 ldi r18,hlo8(4097)
6839 3a04 0207 cpc r16,r18
6840 3a06 20E0 ldi r18,hhi8(4097)
6841 3a08 1207 cpc r17,r18
6842 3a0a 04F4 brge .+2
6843 3a0c 00C0 rjmp .L552
6844 3a0e 8091 0000 lds r24,last_n_p.15
6845 3a12 8823 tst r24
6846 3a14 01F4 brne .+2
6847 3a16 00C0 rjmp .L553
6848 3a18 D801 movw r26,r16
6849 3a1a C701 movw r24,r14
6850 3a1c 17FF sbrs r17,7
6851 3a1e 00C0 rjmp .L554
6852 3a20 8827 clr r24
6853 3a22 9927 clr r25
6854 3a24 DC01 movw r26,r24
6855 3a26 8E19 sub r24,r14
6856 3a28 9F09 sbc r25,r15
6857 3a2a A00B sbc r26,r16
6858 3a2c B10B sbc r27,r17
6859 .L554:
6860 3a2e 9C01 movw r18,r24
6861 3a30 AD01 movw r20,r26
6862 3a32 B7FF sbrs r27,7
6863 3a34 00C0 rjmp .L555
6864 3a36 2150 subi r18,lo8(-(511))
6865 3a38 3E4F sbci r19,hi8(-(511))
6866 3a3a 4F4F sbci r20,hlo8(-(511))
6867 3a3c 5F4F sbci r21,hhi8(-(511))
6868 .L555:
6869 3a3e F9E0 ldi r31,9
6870 3a40 5595 1: asr r21
6871 3a42 4795 ror r20
6872 3a44 3795 ror r19
6873 3a46 2795 ror r18
6874 3a48 FA95 dec r31
6875 3a4a 01F4 brne 1b
6876 3a4c 8091 0000 lds r24,cnt.14
6877 3a50 9091 0000 lds r25,(cnt.14)+1
6878 3a54 820F add r24,r18
6879 3a56 931F adc r25,r19
6880 3a58 9093 0000 sts (cnt.14)+1,r25
6881 3a5c 8093 0000 sts cnt.14,r24
6882 3a60 D801 movw r26,r16
6883 3a62 C701 movw r24,r14
6884 3a64 17FF sbrs r17,7
6885 3a66 00C0 rjmp .L556
6886 3a68 0796 adiw r24,7
6887 3a6a A11D adc r26,__zero_reg__
6888 3a6c B11D adc r27,__zero_reg__
6889 .L556:
6890 3a6e E3E0 ldi r30,3
6891 3a70 B595 1: asr r27
6892 3a72 A795 ror r26
6893 3a74 9795 ror r25
6894 3a76 8795 ror r24
6895 3a78 EA95 dec r30
6896 3a7a 01F4 brne 1b
6897 3a7c 8093 0000 sts ausgleichNick.10,r24
6898 3a80 9093 0000 sts (ausgleichNick.10)+1,r25
6899 3a84 A093 0000 sts (ausgleichNick.10)+2,r26
6900 3a88 B093 0000 sts (ausgleichNick.10)+3,r27
6901 3a8c 8958 subi r24,lo8(5001)
6902 3a8e 9341 sbci r25,hi8(5001)
6903 3a90 A040 sbci r26,hlo8(5001)
6904 3a92 B040 sbci r27,hhi8(5001)
6905 3a94 04F0 brlt .L557
6906 3a96 88E8 ldi r24,lo8(5000)
6907 3a98 93E1 ldi r25,hi8(5000)
6908 3a9a A0E0 ldi r26,hlo8(5000)
6909 3a9c B0E0 ldi r27,hhi8(5000)
6910 3a9e 8093 0000 sts ausgleichNick.10,r24
6911 3aa2 9093 0000 sts (ausgleichNick.10)+1,r25
6912 3aa6 A093 0000 sts (ausgleichNick.10)+2,r26
6913 3aaa B093 0000 sts (ausgleichNick.10)+3,r27
6914 .L557:
6915 3aae 2091 0000 lds r18,ausgleichNick.10
6916 3ab2 3091 0000 lds r19,(ausgleichNick.10)+1
6917 3ab6 4091 0000 lds r20,(ausgleichNick.10)+2
6918 3aba 5091 0000 lds r21,(ausgleichNick.10)+3
6919 3abe 57FF sbrs r21,7
6920 3ac0 00C0 rjmp .L558
6921 3ac2 2150 subi r18,lo8(-(255))
6922 3ac4 3F4F sbci r19,hi8(-(255))
6923 3ac6 4F4F sbci r20,hlo8(-(255))
6924 3ac8 5F4F sbci r21,hhi8(-(255))
6925 .L558:
6926 3aca 232F mov r18,r19
6927 3acc 342F mov r19,r20
6928 3ace 452F mov r20,r21
6929 3ad0 5527 clr r21
6930 3ad2 47FD sbrc r20,7
6931 3ad4 5A95 dec r21
6932 3ad6 8091 0000 lds r24,LageKorrekturNick
6933 3ada 9091 0000 lds r25,(LageKorrekturNick)+1
6934 3ade 820F add r24,r18
6935 3ae0 931F adc r25,r19
6936 3ae2 9093 0000 sts (LageKorrekturNick)+1,r25
6937 3ae6 8093 0000 sts LageKorrekturNick,r24
6938 3aea 00C0 rjmp .L560
6939 .L553:
6940 3aec 81E0 ldi r24,lo8(1)
6941 3aee 8093 0000 sts last_n_p.15,r24
6942 3af2 00C0 rjmp .L560
6943 .L552:
6944 3af4 1092 0000 sts last_n_p.15,__zero_reg__
6945 .L560:
6946 3af8 40E0 ldi r20,lo8(-4096)
6947 3afa E416 cp r14,r20
6948 3afc 40EF ldi r20,hi8(-4096)
6949 3afe F406 cpc r15,r20
6950 3b00 4FEF ldi r20,hlo8(-4096)
6951 3b02 0407 cpc r16,r20
6952 3b04 4FEF ldi r20,hhi8(-4096)
6953 3b06 1407 cpc r17,r20
6954 3b08 04F0 brlt .+2
6955 3b0a 00C0 rjmp .L561
6956 3b0c 8091 0000 lds r24,last_n_n.16
6957 3b10 8823 tst r24
6958 3b12 01F4 brne .+2
6959 3b14 00C0 rjmp .L562
6960 3b16 D801 movw r26,r16
6961 3b18 C701 movw r24,r14
6962 3b1a 17FF sbrs r17,7
6963 3b1c 00C0 rjmp .L563
6964 3b1e 8827 clr r24
6965 3b20 9927 clr r25
6966 3b22 DC01 movw r26,r24
6967 3b24 8E19 sub r24,r14
6968 3b26 9F09 sbc r25,r15
6969 3b28 A00B sbc r26,r16
6970 3b2a B10B sbc r27,r17
6971 .L563:
6972 3b2c 9C01 movw r18,r24
6973 3b2e AD01 movw r20,r26
6974 3b30 B7FF sbrs r27,7
6975 3b32 00C0 rjmp .L564
6976 3b34 2150 subi r18,lo8(-(511))
6977 3b36 3E4F sbci r19,hi8(-(511))
6978 3b38 4F4F sbci r20,hlo8(-(511))
6979 3b3a 5F4F sbci r21,hhi8(-(511))
6980 .L564:
6981 3b3c 69E0 ldi r22,9
6982 3b3e 5595 1: asr r21
6983 3b40 4795 ror r20
6984 3b42 3795 ror r19
6985 3b44 2795 ror r18
6986 3b46 6A95 dec r22
6987 3b48 01F4 brne 1b
6988 3b4a 8091 0000 lds r24,cnt.14
6989 3b4e 9091 0000 lds r25,(cnt.14)+1
6990 3b52 820F add r24,r18
6991 3b54 931F adc r25,r19
6992 3b56 9093 0000 sts (cnt.14)+1,r25
6993 3b5a 8093 0000 sts cnt.14,r24
6994 3b5e D801 movw r26,r16
6995 3b60 C701 movw r24,r14
6996 3b62 17FF sbrs r17,7
6997 3b64 00C0 rjmp .L565
6998 3b66 0796 adiw r24,7
6999 3b68 A11D adc r26,__zero_reg__
7000 3b6a B11D adc r27,__zero_reg__
7001 .L565:
7002 3b6c 23E0 ldi r18,3
7003 3b6e B595 1: asr r27
7004 3b70 A795 ror r26
7005 3b72 9795 ror r25
7006 3b74 8795 ror r24
7007 3b76 2A95 dec r18
7008 3b78 01F4 brne 1b
7009 3b7a 8093 0000 sts ausgleichNick.10,r24
7010 3b7e 9093 0000 sts (ausgleichNick.10)+1,r25
7011 3b82 A093 0000 sts (ausgleichNick.10)+2,r26
7012 3b86 B093 0000 sts (ausgleichNick.10)+3,r27
7013 3b8a 8857 subi r24,lo8(-5000)
7014 3b8c 9C4E sbci r25,hi8(-5000)
7015 3b8e AF4F sbci r26,hlo8(-5000)
7016 3b90 BF4F sbci r27,hhi8(-5000)
7017 3b92 04F4 brge .L566
7018 3b94 88E7 ldi r24,lo8(-5000)
7019 3b96 9CEE ldi r25,hi8(-5000)
7020 3b98 AFEF ldi r26,hlo8(-5000)
7021 3b9a BFEF ldi r27,hhi8(-5000)
7022 3b9c 8093 0000 sts ausgleichNick.10,r24
7023 3ba0 9093 0000 sts (ausgleichNick.10)+1,r25
7024 3ba4 A093 0000 sts (ausgleichNick.10)+2,r26
7025 3ba8 B093 0000 sts (ausgleichNick.10)+3,r27
7026 .L566:
7027 3bac 2091 0000 lds r18,ausgleichNick.10
7028 3bb0 3091 0000 lds r19,(ausgleichNick.10)+1
7029 3bb4 4091 0000 lds r20,(ausgleichNick.10)+2
7030 3bb8 5091 0000 lds r21,(ausgleichNick.10)+3
7031 3bbc 57FF sbrs r21,7
7032 3bbe 00C0 rjmp .L567
7033 3bc0 2150 subi r18,lo8(-(255))
7034 3bc2 3F4F sbci r19,hi8(-(255))
7035 3bc4 4F4F sbci r20,hlo8(-(255))
7036 3bc6 5F4F sbci r21,hhi8(-(255))
7037 .L567:
7038 3bc8 232F mov r18,r19
7039 3bca 342F mov r19,r20
7040 3bcc 452F mov r20,r21
7041 3bce 5527 clr r21
7042 3bd0 47FD sbrc r20,7
7043 3bd2 5A95 dec r21
7044 3bd4 8091 0000 lds r24,LageKorrekturNick
7045 3bd8 9091 0000 lds r25,(LageKorrekturNick)+1
7046 3bdc 820F add r24,r18
7047 3bde 931F adc r25,r19
7048 3be0 9093 0000 sts (LageKorrekturNick)+1,r25
7049 3be4 8093 0000 sts LageKorrekturNick,r24
7050 3be8 00C0 rjmp .L570
7051 .L562:
7052 3bea 81E0 ldi r24,lo8(1)
7053 3bec 8093 0000 sts last_n_n.16,r24
7054 3bf0 00C0 rjmp .L570
7055 .L561:
7056 3bf2 1092 0000 sts last_n_n.16,__zero_reg__
7057 3bf6 00C0 rjmp .L570
7058 .L550:
7059 3bf8 1092 0000 sts (cnt.14)+1,__zero_reg__
7060 3bfc 1092 0000 sts cnt.14,__zero_reg__
7061 3c00 84E6 ldi r24,lo8(100)
7062 3c02 90E0 ldi r25,hi8(100)
7063 3c04 9093 0000 sts (KompassSignalSchlecht)+1,r25
7064 3c08 8093 0000 sts KompassSignalSchlecht,r24
7065 .L570:
7066 3c0c 6889 ldd r22,Y+16
7067 3c0e 262F mov r18,r22
7068 3c10 3327 clr r19
7069 3c12 8091 0000 lds r24,cnt.14
7070 3c16 9091 0000 lds r25,(cnt.14)+1
7071 3c1a 2817 cp r18,r24
7072 3c1c 3907 cpc r19,r25
7073 3c1e 04F4 brge .L571
7074 3c20 3093 0000 sts (cnt.14)+1,r19
7075 3c24 2093 0000 sts cnt.14,r18
7076 .L571:
7077 3c28 1091 0000 lds r17,FromNaviCtrl_Value+1
7078 3c2c 1123 tst r17
7079 3c2e 01F0 breq .L572
7080 3c30 212F mov r18,r17
7081 3c32 3327 clr r19
7082 3c34 27FD sbrc r18,7
7083 3c36 3095 com r19
7084 3c38 8091 0000 lds r24,cnt.14
7085 3c3c 9091 0000 lds r25,(cnt.14)+1
7086 3c40 2817 cp r18,r24
7087 3c42 3907 cpc r19,r25
7088 3c44 04F4 brge .L572
7089 3c46 3093 0000 sts (cnt.14)+1,r19
7090 3c4a 2093 0000 sts cnt.14,r18
7091 .L572:
7092 3c4e 4091 0000 lds r20,IntegralFehlerNick.3
7093 3c52 5091 0000 lds r21,(IntegralFehlerNick.3)+1
7094 3c56 6091 0000 lds r22,(IntegralFehlerNick.3)+2
7095 3c5a 7091 0000 lds r23,(IntegralFehlerNick.3)+3
7096 3c5e 4138 cpi r20,lo8(129)
7097 3c60 5105 cpc r21,__zero_reg__
7098 3c62 6105 cpc r22,__zero_reg__
7099 3c64 7105 cpc r23,__zero_reg__
7100 3c66 04F0 brlt .L574
7101 3c68 8091 0000 lds r24,AdNeutralNick
7102 3c6c 9091 0000 lds r25,(AdNeutralNick)+1
7103 3c70 2091 0000 lds r18,cnt.14
7104 3c74 3091 0000 lds r19,(cnt.14)+1
7105 3c78 820F add r24,r18
7106 3c7a 931F adc r25,r19
7107 3c7c 9093 0000 sts (AdNeutralNick)+1,r25
7108 3c80 8093 0000 sts AdNeutralNick,r24
7109 .L574:
7110 3c84 4058 subi r20,lo8(-128)
7111 3c86 5F4F sbci r21,hi8(-128)
7112 3c88 6F4F sbci r22,hlo8(-128)
7113 3c8a 7F4F sbci r23,hhi8(-128)
7114 3c8c 04F4 brge .L575
7115 3c8e 8091 0000 lds r24,AdNeutralNick
7116 3c92 9091 0000 lds r25,(AdNeutralNick)+1
7117 3c96 2091 0000 lds r18,cnt.14
7118 3c9a 3091 0000 lds r19,(cnt.14)+1
7119 3c9e 821B sub r24,r18
7120 3ca0 930B sbc r25,r19
7121 3ca2 9093 0000 sts (AdNeutralNick)+1,r25
7122 3ca6 8093 0000 sts AdNeutralNick,r24
7123 .L575:
7124 3caa 81E0 ldi r24,lo8(1)
7125 3cac 90E0 ldi r25,hi8(1)
7126 3cae 9093 0000 sts (cnt.14)+1,r25
7127 3cb2 8093 0000 sts cnt.14,r24
7128 3cb6 C090 0000 lds r12,IntegralFehlerRoll.4
7129 3cba D090 0000 lds r13,(IntegralFehlerRoll.4)+1
7130 3cbe E090 0000 lds r14,(IntegralFehlerRoll.4)+2
7131 3cc2 F090 0000 lds r15,(IntegralFehlerRoll.4)+3
7132 3cc6 D701 movw r26,r14
7133 3cc8 C601 movw r24,r12
7134 3cca F7FE sbrs r15,7
7135 3ccc 00C0 rjmp .L577
7136 3cce 8827 clr r24
7137 3cd0 9927 clr r25
7138 3cd2 DC01 movw r26,r24
7139 3cd4 8C19 sub r24,r12
7140 3cd6 9D09 sbc r25,r13
7141 3cd8 AE09 sbc r26,r14
7142 3cda BF09 sbc r27,r15
7143 .L577:
7144 3cdc 8150 subi r24,lo8(513)
7145 3cde 9240 sbci r25,hi8(513)
7146 3ce0 A040 sbci r26,hlo8(513)
7147 3ce2 B040 sbci r27,hhi8(513)
7148 3ce4 04F0 brlt .L576
7149 3ce6 84E0 ldi r24,lo8(4)
7150 3ce8 90E0 ldi r25,hi8(4)
7151 3cea 9093 0000 sts (cnt.14)+1,r25
7152 3cee 8093 0000 sts cnt.14,r24
7153 .L576:
7154 3cf2 8091 0000 lds r24,MittelIntegralRoll_Alt.20
7155 3cf6 9091 0000 lds r25,(MittelIntegralRoll_Alt.20)+1
7156 3cfa A091 0000 lds r26,(MittelIntegralRoll_Alt.20)+2
7157 3cfe B091 0000 lds r27,(MittelIntegralRoll_Alt.20)+3
7158 3d02 2091 0000 lds r18,MittelIntegralRoll
7159 3d06 3091 0000 lds r19,(MittelIntegralRoll)+1
7160 3d0a 4091 0000 lds r20,(MittelIntegralRoll)+2
7161 3d0e 5091 0000 lds r21,(MittelIntegralRoll)+3
7162 3d12 821B sub r24,r18
7163 3d14 930B sbc r25,r19
7164 3d16 A40B sbc r26,r20
7165 3d18 B50B sbc r27,r21
7166 3d1a 815E subi r24,lo8(-(19999))
7167 3d1c 914B sbci r25,hi8(-(19999))
7168 3d1e AF4F sbci r26,hlo8(-(19999))
7169 3d20 BF4F sbci r27,hhi8(-(19999))
7170 3d22 8F53 subi r24,lo8(39999)
7171 3d24 9C49 sbci r25,hi8(39999)
7172 3d26 A040 sbci r26,hlo8(39999)
7173 3d28 B040 sbci r27,hhi8(39999)
7174 3d2a 00F0 brlo .L579
7175 3d2c 1931 cpi r17,lo8(25)
7176 3d2e 04F4 brge .+2
7177 3d30 00C0 rjmp .L578
7178 .L579:
7179 3d32 01E0 ldi r16,lo8(4097)
7180 3d34 C016 cp r12,r16
7181 3d36 00E1 ldi r16,hi8(4097)
7182 3d38 D006 cpc r13,r16
7183 3d3a 00E0 ldi r16,hlo8(4097)
7184 3d3c E006 cpc r14,r16
7185 3d3e 00E0 ldi r16,hhi8(4097)
7186 3d40 F006 cpc r15,r16
7187 3d42 04F4 brge .+2
7188 3d44 00C0 rjmp .L580
7189 3d46 8091 0000 lds r24,last_r_p.17
7190 3d4a 8823 tst r24
7191 3d4c 01F4 brne .+2
7192 3d4e 00C0 rjmp .L581
7193 3d50 D701 movw r26,r14
7194 3d52 C601 movw r24,r12
7195 3d54 F7FE sbrs r15,7
7196 3d56 00C0 rjmp .L582
7197 3d58 8827 clr r24
7198 3d5a 9927 clr r25
7199 3d5c DC01 movw r26,r24
7200 3d5e 8C19 sub r24,r12
7201 3d60 9D09 sbc r25,r13
7202 3d62 AE09 sbc r26,r14
7203 3d64 BF09 sbc r27,r15
7204 .L582:
7205 3d66 9C01 movw r18,r24
7206 3d68 AD01 movw r20,r26
7207 3d6a B7FF sbrs r27,7
7208 3d6c 00C0 rjmp .L583
7209 3d6e 2150 subi r18,lo8(-(511))
7210 3d70 3E4F sbci r19,hi8(-(511))
7211 3d72 4F4F sbci r20,hlo8(-(511))
7212 3d74 5F4F sbci r21,hhi8(-(511))
7213 .L583:
7214 3d76 09E0 ldi r16,9
7215 3d78 5595 1: asr r21
7216 3d7a 4795 ror r20
7217 3d7c 3795 ror r19
7218 3d7e 2795 ror r18
7219 3d80 0A95 dec r16
7220 3d82 01F4 brne 1b
7221 3d84 8091 0000 lds r24,cnt.14
7222 3d88 9091 0000 lds r25,(cnt.14)+1
7223 3d8c 820F add r24,r18
7224 3d8e 931F adc r25,r19
7225 3d90 9093 0000 sts (cnt.14)+1,r25
7226 3d94 8093 0000 sts cnt.14,r24
7227 3d98 D701 movw r26,r14
7228 3d9a C601 movw r24,r12
7229 3d9c F7FE sbrs r15,7
7230 3d9e 00C0 rjmp .L584
7231 3da0 0796 adiw r24,7
7232 3da2 A11D adc r26,__zero_reg__
7233 3da4 B11D adc r27,__zero_reg__
7234 .L584:
7235 3da6 13E0 ldi r17,3
7236 3da8 B595 1: asr r27
7237 3daa A795 ror r26
7238 3dac 9795 ror r25
7239 3dae 8795 ror r24
7240 3db0 1A95 dec r17
7241 3db2 01F4 brne 1b
7242 3db4 8093 0000 sts ausgleichRoll.11,r24
7243 3db8 9093 0000 sts (ausgleichRoll.11)+1,r25
7244 3dbc A093 0000 sts (ausgleichRoll.11)+2,r26
7245 3dc0 B093 0000 sts (ausgleichRoll.11)+3,r27
7246 3dc4 8958 subi r24,lo8(5001)
7247 3dc6 9341 sbci r25,hi8(5001)
7248 3dc8 A040 sbci r26,hlo8(5001)
7249 3dca B040 sbci r27,hhi8(5001)
7250 3dcc 04F0 brlt .L585
7251 3dce 88E8 ldi r24,lo8(5000)
7252 3dd0 93E1 ldi r25,hi8(5000)
7253 3dd2 A0E0 ldi r26,hlo8(5000)
7254 3dd4 B0E0 ldi r27,hhi8(5000)
7255 3dd6 8093 0000 sts ausgleichRoll.11,r24
7256 3dda 9093 0000 sts (ausgleichRoll.11)+1,r25
7257 3dde A093 0000 sts (ausgleichRoll.11)+2,r26
7258 3de2 B093 0000 sts (ausgleichRoll.11)+3,r27
7259 .L585:
7260 3de6 2091 0000 lds r18,ausgleichRoll.11
7261 3dea 3091 0000 lds r19,(ausgleichRoll.11)+1
7262 3dee 4091 0000 lds r20,(ausgleichRoll.11)+2
7263 3df2 5091 0000 lds r21,(ausgleichRoll.11)+3
7264 3df6 57FF sbrs r21,7
7265 3df8 00C0 rjmp .L586
7266 3dfa 2150 subi r18,lo8(-(255))
7267 3dfc 3F4F sbci r19,hi8(-(255))
7268 3dfe 4F4F sbci r20,hlo8(-(255))
7269 3e00 5F4F sbci r21,hhi8(-(255))
7270 .L586:
7271 3e02 232F mov r18,r19
7272 3e04 342F mov r19,r20
7273 3e06 452F mov r20,r21
7274 3e08 5527 clr r21
7275 3e0a 47FD sbrc r20,7
7276 3e0c 5A95 dec r21
7277 3e0e 8091 0000 lds r24,LageKorrekturRoll
7278 3e12 9091 0000 lds r25,(LageKorrekturRoll)+1
7279 3e16 820F add r24,r18
7280 3e18 931F adc r25,r19
7281 3e1a 9093 0000 sts (LageKorrekturRoll)+1,r25
7282 3e1e 8093 0000 sts LageKorrekturRoll,r24
7283 3e22 00C0 rjmp .L588
7284 .L581:
7285 3e24 81E0 ldi r24,lo8(1)
7286 3e26 8093 0000 sts last_r_p.17,r24
7287 3e2a 00C0 rjmp .L588
7288 .L580:
7289 3e2c 1092 0000 sts last_r_p.17,__zero_reg__
7290 .L588:
7291 3e30 20E0 ldi r18,lo8(-4096)
7292 3e32 C216 cp r12,r18
7293 3e34 20EF ldi r18,hi8(-4096)
7294 3e36 D206 cpc r13,r18
7295 3e38 2FEF ldi r18,hlo8(-4096)
7296 3e3a E206 cpc r14,r18
7297 3e3c 2FEF ldi r18,hhi8(-4096)
7298 3e3e F206 cpc r15,r18
7299 3e40 04F0 brlt .+2
7300 3e42 00C0 rjmp .L589
7301 3e44 8091 0000 lds r24,last_r_n.18
7302 3e48 8823 tst r24
7303 3e4a 01F4 brne .+2
7304 3e4c 00C0 rjmp .L590
7305 3e4e D701 movw r26,r14
7306 3e50 C601 movw r24,r12
7307 3e52 F7FE sbrs r15,7
7308 3e54 00C0 rjmp .L591
7309 3e56 8827 clr r24
7310 3e58 9927 clr r25
7311 3e5a DC01 movw r26,r24
7312 3e5c 8C19 sub r24,r12
7313 3e5e 9D09 sbc r25,r13
7314 3e60 AE09 sbc r26,r14
7315 3e62 BF09 sbc r27,r15
7316 .L591:
7317 3e64 9C01 movw r18,r24
7318 3e66 AD01 movw r20,r26
7319 3e68 B7FF sbrs r27,7
7320 3e6a 00C0 rjmp .L592
7321 3e6c 2150 subi r18,lo8(-(511))
7322 3e6e 3E4F sbci r19,hi8(-(511))
7323 3e70 4F4F sbci r20,hlo8(-(511))
7324 3e72 5F4F sbci r21,hhi8(-(511))
7325 .L592:
7326 3e74 E9E0 ldi r30,9
7327 3e76 5595 1: asr r21
7328 3e78 4795 ror r20
7329 3e7a 3795 ror r19
7330 3e7c 2795 ror r18
7331 3e7e EA95 dec r30
7332 3e80 01F4 brne 1b
7333 3e82 8091 0000 lds r24,cnt.14
7334 3e86 9091 0000 lds r25,(cnt.14)+1
7335 3e8a 820F add r24,r18
7336 3e8c 931F adc r25,r19
7337 3e8e 9093 0000 sts (cnt.14)+1,r25
7338 3e92 8093 0000 sts cnt.14,r24
7339 3e96 D701 movw r26,r14
7340 3e98 C601 movw r24,r12
7341 3e9a F7FE sbrs r15,7
7342 3e9c 00C0 rjmp .L593
7343 3e9e 0796 adiw r24,7
7344 3ea0 A11D adc r26,__zero_reg__
7345 3ea2 B11D adc r27,__zero_reg__
7346 .L593:
7347 3ea4 73E0 ldi r23,3
7348 3ea6 B595 1: asr r27
7349 3ea8 A795 ror r26
7350 3eaa 9795 ror r25
7351 3eac 8795 ror r24
7352 3eae 7A95 dec r23
7353 3eb0 01F4 brne 1b
7354 3eb2 8093 0000 sts ausgleichRoll.11,r24
7355 3eb6 9093 0000 sts (ausgleichRoll.11)+1,r25
7356 3eba A093 0000 sts (ausgleichRoll.11)+2,r26
7357 3ebe B093 0000 sts (ausgleichRoll.11)+3,r27
7358 3ec2 8857 subi r24,lo8(-5000)
7359 3ec4 9C4E sbci r25,hi8(-5000)
7360 3ec6 AF4F sbci r26,hlo8(-5000)
7361 3ec8 BF4F sbci r27,hhi8(-5000)
7362 3eca 04F4 brge .L594
7363 3ecc 88E7 ldi r24,lo8(-5000)
7364 3ece 9CEE ldi r25,hi8(-5000)
7365 3ed0 AFEF ldi r26,hlo8(-5000)
7366 3ed2 BFEF ldi r27,hhi8(-5000)
7367 3ed4 8093 0000 sts ausgleichRoll.11,r24
7368 3ed8 9093 0000 sts (ausgleichRoll.11)+1,r25
7369 3edc A093 0000 sts (ausgleichRoll.11)+2,r26
7370 3ee0 B093 0000 sts (ausgleichRoll.11)+3,r27
7371 .L594:
7372 3ee4 2091 0000 lds r18,ausgleichRoll.11
7373 3ee8 3091 0000 lds r19,(ausgleichRoll.11)+1
7374 3eec 4091 0000 lds r20,(ausgleichRoll.11)+2
7375 3ef0 5091 0000 lds r21,(ausgleichRoll.11)+3
7376 3ef4 57FF sbrs r21,7
7377 3ef6 00C0 rjmp .L595
7378 3ef8 2150 subi r18,lo8(-(255))
7379 3efa 3F4F sbci r19,hi8(-(255))
7380 3efc 4F4F sbci r20,hlo8(-(255))
7381 3efe 5F4F sbci r21,hhi8(-(255))
7382 .L595:
7383 3f00 232F mov r18,r19
7384 3f02 342F mov r19,r20
7385 3f04 452F mov r20,r21
7386 3f06 5527 clr r21
7387 3f08 47FD sbrc r20,7
7388 3f0a 5A95 dec r21
7389 3f0c 8091 0000 lds r24,LageKorrekturRoll
7390 3f10 9091 0000 lds r25,(LageKorrekturRoll)+1
7391 3f14 820F add r24,r18
7392 3f16 931F adc r25,r19
7393 3f18 9093 0000 sts (LageKorrekturRoll)+1,r25
7394 3f1c 8093 0000 sts LageKorrekturRoll,r24
7395 3f20 00C0 rjmp .L598
7396 .L590:
7397 3f22 81E0 ldi r24,lo8(1)
7398 3f24 8093 0000 sts last_r_n.18,r24
7399 3f28 00C0 rjmp .L598
7400 .L589:
7401 3f2a 1092 0000 sts last_r_n.18,__zero_reg__
7402 3f2e 00C0 rjmp .L598
7403 .L578:
7404 3f30 1092 0000 sts (cnt.14)+1,__zero_reg__
7405 3f34 1092 0000 sts cnt.14,__zero_reg__
7406 3f38 84E6 ldi r24,lo8(100)
7407 3f3a 90E0 ldi r25,hi8(100)
7408 3f3c 9093 0000 sts (KompassSignalSchlecht)+1,r25
7409 3f40 8093 0000 sts KompassSignalSchlecht,r24
7410 .L598:
7411 3f44 4889 ldd r20,Y+16
7412 3f46 242F mov r18,r20
7413 3f48 3327 clr r19
7414 3f4a 8091 0000 lds r24,cnt.14
7415 3f4e 9091 0000 lds r25,(cnt.14)+1
7416 3f52 2817 cp r18,r24
7417 3f54 3907 cpc r19,r25
7418 3f56 04F4 brge .L599
7419 3f58 3093 0000 sts (cnt.14)+1,r19
7420 3f5c 2093 0000 sts cnt.14,r18
7421 .L599:
7422 3f60 8091 0000 lds r24,FromNaviCtrl_Value+1
7423 3f64 8823 tst r24
7424 3f66 01F0 breq .L600
7425 3f68 282F mov r18,r24
7426 3f6a 3327 clr r19
7427 3f6c 27FD sbrc r18,7
7428 3f6e 3095 com r19
7429 3f70 8091 0000 lds r24,cnt.14
7430 3f74 9091 0000 lds r25,(cnt.14)+1
7431 3f78 2817 cp r18,r24
7432 3f7a 3907 cpc r19,r25
7433 3f7c 04F4 brge .L600
7434 3f7e 3093 0000 sts (cnt.14)+1,r19
7435 3f82 2093 0000 sts cnt.14,r18
7436 .L600:
7437 3f86 4091 0000 lds r20,IntegralFehlerRoll.4
7438 3f8a 5091 0000 lds r21,(IntegralFehlerRoll.4)+1
7439 3f8e 6091 0000 lds r22,(IntegralFehlerRoll.4)+2
7440 3f92 7091 0000 lds r23,(IntegralFehlerRoll.4)+3
7441 3f96 4138 cpi r20,lo8(129)
7442 3f98 5105 cpc r21,__zero_reg__
7443 3f9a 6105 cpc r22,__zero_reg__
7444 3f9c 7105 cpc r23,__zero_reg__
7445 3f9e 04F0 brlt .L602
7446 3fa0 8091 0000 lds r24,AdNeutralRoll
7447 3fa4 9091 0000 lds r25,(AdNeutralRoll)+1
7448 3fa8 2091 0000 lds r18,cnt.14
7449 3fac 3091 0000 lds r19,(cnt.14)+1
7450 3fb0 820F add r24,r18
7451 3fb2 931F adc r25,r19
7452 3fb4 9093 0000 sts (AdNeutralRoll)+1,r25
7453 3fb8 8093 0000 sts AdNeutralRoll,r24
7454 .L602:
7455 3fbc 4058 subi r20,lo8(-128)
7456 3fbe 5F4F sbci r21,hi8(-128)
7457 3fc0 6F4F sbci r22,hlo8(-128)
7458 3fc2 7F4F sbci r23,hhi8(-128)
7459 3fc4 04F4 brge .L604
7460 3fc6 8091 0000 lds r24,AdNeutralRoll
7461 3fca 9091 0000 lds r25,(AdNeutralRoll)+1
7462 3fce 2091 0000 lds r18,cnt.14
7463 3fd2 3091 0000 lds r19,(cnt.14)+1
7464 3fd6 821B sub r24,r18
7465 3fd8 930B sbc r25,r19
7466 3fda 9093 0000 sts (AdNeutralRoll)+1,r25
7467 3fde 8093 0000 sts AdNeutralRoll,r24
7468 3fe2 00C0 rjmp .L604
7469 .L530:
7470 3fe4 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7471 3fe8 1092 0000 sts LageKorrekturRoll,__zero_reg__
7472 3fec 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7473 3ff0 1092 0000 sts LageKorrekturNick,__zero_reg__
7474 3ff4 1092 0000 sts TrichterFlug,__zero_reg__
7475 .L604:
7476 3ff8 8091 0000 lds r24,IntegralFaktor
7477 3ffc 8823 tst r24
7478 3ffe 01F4 brne .L605
7479 4000 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7480 4004 1092 0000 sts LageKorrekturRoll,__zero_reg__
7481 4008 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7482 400c 1092 0000 sts LageKorrekturNick,__zero_reg__
7483 .L605:
7484 4010 8091 0000 lds r24,MittelIntegralNick
7485 4014 9091 0000 lds r25,(MittelIntegralNick)+1
7486 4018 A091 0000 lds r26,(MittelIntegralNick)+2
7487 401c B091 0000 lds r27,(MittelIntegralNick)+3
7488 4020 8093 0000 sts MittelIntegralNick_Alt.19,r24
7489 4024 9093 0000 sts (MittelIntegralNick_Alt.19)+1,r25
7490 4028 A093 0000 sts (MittelIntegralNick_Alt.19)+2,r26
7491 402c B093 0000 sts (MittelIntegralNick_Alt.19)+3,r27
7492 4030 8091 0000 lds r24,MittelIntegralRoll
7493 4034 9091 0000 lds r25,(MittelIntegralRoll)+1
7494 4038 A091 0000 lds r26,(MittelIntegralRoll)+2
7495 403c B091 0000 lds r27,(MittelIntegralRoll)+3
7496 4040 8093 0000 sts MittelIntegralRoll_Alt.20,r24
7497 4044 9093 0000 sts (MittelIntegralRoll_Alt.20)+1,r25
7498 4048 A093 0000 sts (MittelIntegralRoll_Alt.20)+2,r26
7499 404c B093 0000 sts (MittelIntegralRoll_Alt.20)+3,r27
7500 4050 1092 0000 sts IntegralAccNick,__zero_reg__
7501 4054 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
7502 4058 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
7503 405c 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
7504 4060 1092 0000 sts IntegralAccRoll,__zero_reg__
7505 4064 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
7506 4068 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
7507 406c 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
7508 4070 1092 0000 sts IntegralAccZ,__zero_reg__
7509 4074 1092 0000 sts (IntegralAccZ)+1,__zero_reg__
7510 4078 1092 0000 sts (IntegralAccZ)+2,__zero_reg__
7511 407c 1092 0000 sts (IntegralAccZ)+3,__zero_reg__
7512 4080 1092 0000 sts MittelIntegralNick,__zero_reg__
7513 4084 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
7514 4088 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
7515 408c 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
7516 4090 1092 0000 sts MittelIntegralRoll,__zero_reg__
7517 4094 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
7518 4098 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
7519 409c 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
7520 40a0 1092 0000 sts MittelIntegralNick2,__zero_reg__
7521 40a4 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
7522 40a8 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
7523 40ac 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
7524 40b0 1092 0000 sts MittelIntegralRoll2,__zero_reg__
7525 40b4 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
7526 40b8 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
7527 40bc 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
7528 40c0 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
7529 40c4 1092 0000 sts ZaehlMessungen,__zero_reg__
7530 .L529:
7531 40c8 E090 0000 lds r14,StickGier
7532 40cc F090 0000 lds r15,(StickGier)+1
7533 40d0 C701 movw r24,r14
7534 40d2 F7FE sbrs r15,7
7535 40d4 00C0 rjmp .L607
7536 40d6 8827 clr r24
7537 40d8 9927 clr r25
7538 40da 8E19 sub r24,r14
7539 40dc 9F09 sbc r25,r15
7540 .L607:
7541 40de 0497 sbiw r24,4
7542 40e0 04F0 brlt .L606
7543 40e2 8091 0000 lds r24,Parameter_GlobalConfig
7544 40e6 84FD sbrc r24,4
7545 40e8 00C0 rjmp .L606
7546 40ea 82E3 ldi r24,lo8(50)
7547 40ec 8093 0000 sts NeueKompassRichtungMerken,r24
7548 .L606:
7549 40f0 1091 0000 lds r17,EE_Parameter+25
7550 40f4 A12E mov r10,r17
7551 40f6 BB24 clr r11
7552 40f8 CC24 clr r12
7553 40fa DD24 clr r13
7554 40fc B701 movw r22,r14
7555 40fe 8827 clr r24
7556 4100 77FD sbrc r23,7
7557 4102 8095 com r24
7558 4104 982F mov r25,r24
7559 4106 9701 movw r18,r14
7560 4108 F7FE sbrs r15,7
7561 410a 00C0 rjmp .L609
7562 410c 2227 clr r18
7563 410e 3327 clr r19
7564 4110 2E19 sub r18,r14
7565 4112 3F09 sbc r19,r15
7566 .L609:
7567 4114 4427 clr r20
7568 4116 37FD sbrc r19,7
7569 4118 4095 com r20
7570 411a 542F mov r21,r20
7571 411c 0E94 0000 call __mulsi3
7572 4120 9B01 movw r18,r22
7573 4122 AC01 movw r20,r24
7574 4124 C601 movw r24,r12
7575 4126 B501 movw r22,r10
7576 4128 0E94 0000 call __mulsi3
7577 412c 97FF sbrs r25,7
7578 412e 00C0 rjmp .L610
7579 4130 6150 subi r22,lo8(-(511))
7580 4132 7E4F sbci r23,hi8(-(511))
7581 4134 8F4F sbci r24,hlo8(-(511))
7582 4136 9F4F sbci r25,hhi8(-(511))
7583 .L610:
7584 4138 59E0 ldi r21,9
7585 413a 9595 1: asr r25
7586 413c 8795 ror r24
7587 413e 7795 ror r23
7588 4140 6795 ror r22
7589 4142 5A95 dec r21
7590 4144 01F4 brne 1b
7591 4146 9B01 movw r18,r22
7592 4148 812F mov r24,r17
7593 414a 9927 clr r25
7594 414c 8E9D mul r24,r14
7595 414e D001 movw r26,r0
7596 4150 8F9D mul r24,r15
7597 4152 B00D add r27,r0
7598 4154 9E9D mul r25,r14
7599 4156 B00D add r27,r0
7600 4158 1124 clr r1
7601 415a CD01 movw r24,r26
7602 415c B7FD sbrc r27,7
7603 415e 0396 adiw r24,3
7604 .L611:
7605 4160 9595 asr r25
7606 4162 8795 ror r24
7607 4164 9595 asr r25
7608 4166 8795 ror r24
7609 4168 280F add r18,r24
7610 416a 391F adc r19,r25
7611 416c 8091 0000 lds r24,CompassGierSetpoint
7612 4170 9091 0000 lds r25,(CompassGierSetpoint)+1
7613 4174 280F add r18,r24
7614 4176 391F adc r19,r25
7615 4178 4427 clr r20
7616 417a 37FD sbrc r19,7
7617 417c 4095 com r20
7618 417e 542F mov r21,r20
7619 4180 2093 0000 sts sollGier.0,r18
7620 4184 3093 0000 sts (sollGier.0)+1,r19
7621 4188 4093 0000 sts (sollGier.0)+2,r20
7622 418c 5093 0000 sts (sollGier.0)+3,r21
7623 4190 8091 0000 lds r24,Mess_Integral_Gier
7624 4194 9091 0000 lds r25,(Mess_Integral_Gier)+1
7625 4198 A091 0000 lds r26,(Mess_Integral_Gier)+2
7626 419c B091 0000 lds r27,(Mess_Integral_Gier)+3
7627 41a0 821B sub r24,r18
7628 41a2 930B sbc r25,r19
7629 41a4 A40B sbc r26,r20
7630 41a6 B50B sbc r27,r21
7631 41a8 8093 0000 sts Mess_Integral_Gier,r24
7632 41ac 9093 0000 sts (Mess_Integral_Gier)+1,r25
7633 41b0 A093 0000 sts (Mess_Integral_Gier)+2,r26
7634 41b4 B093 0000 sts (Mess_Integral_Gier)+3,r27
7635 41b8 8155 subi r24,lo8(50001)
7636 41ba 934C sbci r25,hi8(50001)
7637 41bc A040 sbci r26,hlo8(50001)
7638 41be B040 sbci r27,hhi8(50001)
7639 41c0 04F0 brlt .L612
7640 41c2 80E5 ldi r24,lo8(50000)
7641 41c4 93EC ldi r25,hi8(50000)
7642 41c6 A0E0 ldi r26,hlo8(50000)
7643 41c8 B0E0 ldi r27,hhi8(50000)
7644 41ca 8093 0000 sts Mess_Integral_Gier,r24
7645 41ce 9093 0000 sts (Mess_Integral_Gier)+1,r25
7646 41d2 A093 0000 sts (Mess_Integral_Gier)+2,r26
7647 41d6 B093 0000 sts (Mess_Integral_Gier)+3,r27
7648 .L612:
7649 41da 8091 0000 lds r24,Mess_Integral_Gier
7650 41de 9091 0000 lds r25,(Mess_Integral_Gier)+1
7651 41e2 A091 0000 lds r26,(Mess_Integral_Gier)+2
7652 41e6 B091 0000 lds r27,(Mess_Integral_Gier)+3
7653 41ea 805B subi r24,lo8(-50000)
7654 41ec 9C43 sbci r25,hi8(-50000)
7655 41ee AF4F sbci r26,hlo8(-50000)
7656 41f0 BF4F sbci r27,hhi8(-50000)
7657 41f2 04F4 brge .L613
7658 41f4 80EB ldi r24,lo8(-50000)
7659 41f6 9CE3 ldi r25,hi8(-50000)
7660 41f8 AFEF ldi r26,hlo8(-50000)
7661 41fa BFEF ldi r27,hhi8(-50000)
7662 41fc 8093 0000 sts Mess_Integral_Gier,r24
7663 4200 9093 0000 sts (Mess_Integral_Gier)+1,r25
7664 4204 A093 0000 sts (Mess_Integral_Gier)+2,r26
7665 4208 B093 0000 sts (Mess_Integral_Gier)+3,r27
7666 .L613:
7667 420c 0091 0000 lds r16,KompassValue
7668 4210 1091 0000 lds r17,(KompassValue)+1
7669 4214 17FD sbrc r17,7
7670 4216 00C0 rjmp .L614
7671 4218 8091 0000 lds r24,Parameter_GlobalConfig
7672 421c 83FF sbrs r24,3
7673 421e 00C0 rjmp .L614
7674 4220 8091 0000 lds r24,CalculateCompassTimer
7675 4224 8150 subi r24,lo8(-(-1))
7676 4226 8093 0000 sts CalculateCompassTimer,r24
7677 422a 8823 tst r24
7678 422c 01F0 breq .+2
7679 422e 00C0 rjmp .L631
7680 4230 8DE0 ldi r24,lo8(13)
7681 4232 8093 0000 sts CalculateCompassTimer,r24
7682 4236 8091 0000 lds r24,IntegralNick
7683 423a 9091 0000 lds r25,(IntegralNick)+1
7684 423e A091 0000 lds r26,(IntegralNick)+2
7685 4242 B091 0000 lds r27,(IntegralNick)+3
7686 4246 B7FF sbrs r27,7
7687 4248 00C0 rjmp .L616
7688 424a 8150 subi r24,lo8(-(511))
7689 424c 9E4F sbci r25,hi8(-(511))
7690 424e AF4F sbci r26,hlo8(-(511))
7691 4250 BF4F sbci r27,hhi8(-(511))
7692 .L616:
7693 4252 39E0 ldi r19,9
7694 4254 B595 1: asr r27
7695 4256 A795 ror r26
7696 4258 9795 ror r25
7697 425a 8795 ror r24
7698 425c 3A95 dec r19
7699 425e 01F4 brne 1b
7700 4260 7C01 movw r14,r24
7701 4262 97FF sbrs r25,7
7702 4264 00C0 rjmp .L617
7703 4266 F094 com r15
7704 4268 E194 neg r14
7705 426a F108 sbc r15,__zero_reg__
7706 426c F394 inc r15
7707 .L617:
7708 426e 8091 0000 lds r24,IntegralRoll
7709 4272 9091 0000 lds r25,(IntegralRoll)+1
7710 4276 A091 0000 lds r26,(IntegralRoll)+2
7711 427a B091 0000 lds r27,(IntegralRoll)+3
7712 427e B7FF sbrs r27,7
7713 4280 00C0 rjmp .L618
7714 4282 8150 subi r24,lo8(-(511))
7715 4284 9E4F sbci r25,hi8(-(511))
7716 4286 AF4F sbci r26,hlo8(-(511))
7717 4288 BF4F sbci r27,hhi8(-(511))
7718 .L618:
7719 428a 29E0 ldi r18,9
7720 428c B595 1: asr r27
7721 428e A795 ror r26
7722 4290 9795 ror r25
7723 4292 8795 ror r24
7724 4294 2A95 dec r18
7725 4296 01F4 brne 1b
7726 4298 9C01 movw r18,r24
7727 429a 97FF sbrs r25,7
7728 429c 00C0 rjmp .L619
7729 429e 3095 com r19
7730 42a0 2195 neg r18
7731 42a2 3F4F sbci r19,lo8(-1)
7732 .L619:
7733 42a4 E216 cp r14,r18
7734 42a6 F306 cpc r15,r19
7735 42a8 04F4 brge .L620
7736 42aa 7901 movw r14,r18
7737 .L620:
7738 42ac B701 movw r22,r14
7739 42ae F7FE sbrs r15,7
7740 42b0 00C0 rjmp .L621
7741 42b2 695F subi r22,lo8(-(7))
7742 42b4 7F4F sbci r23,hi8(-(7))
7743 .L621:
7744 42b6 2B01 movw r4,r22
7745 42b8 A3E0 ldi r26,3
7746 42ba 5594 1: asr r5
7747 42bc 4794 ror r4
7748 42be AA95 dec r26
7749 42c0 01F4 brne 1b
7750 42c2 22E0 ldi r18,lo8(2)
7751 42c4 30E0 ldi r19,hi8(2)
7752 42c6 420E add r4,r18
7753 42c8 531E adc r5,r19
7754 42ca 6090 0000 lds r6,ErsatzKompass
7755 42ce 7090 0000 lds r7,(ErsatzKompass)+1
7756 42d2 8090 0000 lds r8,(ErsatzKompass)+2
7757 42d6 9090 0000 lds r9,(ErsatzKompass)+3
7758 42da 2091 0000 lds r18,GIER_GRAD_FAKTOR
7759 42de 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
7760 42e2 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
7761 42e6 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
7762 42ea C401 movw r24,r8
7763 42ec B301 movw r22,r6
7764 42ee 0E94 0000 call __divmodsi4
7765 42f2 5901 movw r10,r18
7766 42f4 6A01 movw r12,r20
7767 42f6 3093 0000 sts (ErsatzKompassInGrad)+1,r19
7768 42fa 2093 0000 sts ErsatzKompassInGrad,r18
7769 42fe 021B sub r16,r18
7770 4300 130B sbc r17,r19
7771 4302 C801 movw r24,r16
7772 4304 845E subi r24,lo8(-(540))
7773 4306 9D4F sbci r25,hi8(-(540))
7774 4308 68E6 ldi r22,lo8(360)
7775 430a 71E0 ldi r23,hi8(360)
7776 430c 0E94 0000 call __divmodhi4
7777 4310 9C01 movw r18,r24
7778 4312 245B subi r18,lo8(-(-180))
7779 4314 3040 sbci r19,hi8(-(-180))
7780 4316 8091 0000 lds r24,KompassSignalSchlecht
7781 431a 9091 0000 lds r25,(KompassSignalSchlecht)+1
7782 431e 0097 sbiw r24,0
7783 4320 01F0 breq .L622
7784 4322 0197 sbiw r24,1
7785 4324 9093 0000 sts (KompassSignalSchlecht)+1,r25
7786 4328 8093 0000 sts KompassSignalSchlecht,r24
7787 432c 00C0 rjmp .L623
7788 .L622:
7789 432e 49E1 ldi r20,lo8(25)
7790 4330 E416 cp r14,r20
7791 4332 F104 cpc r15,__zero_reg__
7792 4334 04F4 brge .L623
7793 4336 8091 0000 lds r24,GierGyroFehler
7794 433a 9091 0000 lds r25,(GierGyroFehler)+1
7795 433e 820F add r24,r18
7796 4340 931F adc r25,r19
7797 4342 9093 0000 sts (GierGyroFehler)+1,r25
7798 4346 8093 0000 sts GierGyroFehler,r24
7799 434a 8091 0000 lds r24,NeueKompassRichtungMerken
7800 434e 8823 tst r24
7801 4350 01F0 breq .L623
7802 4352 8150 subi r24,lo8(-(-1))
7803 4354 8093 0000 sts NeueKompassRichtungMerken,r24
7804 4358 8823 tst r24
7805 435a 01F4 brne .L623
7806 435c B092 0000 sts (KompassSollWert)+1,r11
7807 4360 A092 0000 sts KompassSollWert,r10
7808 .L623:
7809 4364 8091 0000 lds r24,KompassSignalSchlecht
7810 4368 9091 0000 lds r25,(KompassSignalSchlecht)+1
7811 436c 892B or r24,r25
7812 436e 01F4 brne .L627
7813 4370 8091 0000 lds r24,KompassFusion
7814 4374 9927 clr r25
7815 4376 289F mul r18,r24
7816 4378 B001 movw r22,r0
7817 437a 299F mul r18,r25
7818 437c 700D add r23,r0
7819 437e 389F mul r19,r24
7820 4380 700D add r23,r0
7821 4382 1124 clr r1
7822 4384 CB01 movw r24,r22
7823 4386 B201 movw r22,r4
7824 4388 0E94 0000 call __divmodhi4
7825 438c CB01 movw r24,r22
7826 438e AA27 clr r26
7827 4390 97FD sbrc r25,7
7828 4392 A095 com r26
7829 4394 BA2F mov r27,r26
7830 4396 680E add r6,r24
7831 4398 791E adc r7,r25
7832 439a 8A1E adc r8,r26
7833 439c 9B1E adc r9,r27
7834 439e 6092 0000 sts ErsatzKompass,r6
7835 43a2 7092 0000 sts (ErsatzKompass)+1,r7
7836 43a6 8092 0000 sts (ErsatzKompass)+2,r8
7837 43aa 9092 0000 sts (ErsatzKompass)+3,r9
7838 .L627:
7839 43ae 8091 0000 lds r24,NeueKompassRichtungMerken
7840 43b2 8823 tst r24
7841 43b4 01F4 brne .L614
7842 43b6 8091 0000 lds r24,KompassSollWert
7843 43ba 9091 0000 lds r25,(KompassSollWert)+1
7844 43be 2091 0000 lds r18,ErsatzKompassInGrad
7845 43c2 3091 0000 lds r19,(ErsatzKompassInGrad)+1
7846 43c6 821B sub r24,r18
7847 43c8 930B sbc r25,r19
7848 43ca 845E subi r24,lo8(-(540))
7849 43cc 9D4F sbci r25,hi8(-(540))
7850 43ce 68E6 ldi r22,lo8(360)
7851 43d0 71E0 ldi r23,hi8(360)
7852 43d2 0E94 0000 call __divmodhi4
7853 43d6 9C01 movw r18,r24
7854 43d8 245B subi r18,lo8(-(-180))
7855 43da 3040 sbci r19,hi8(-(-180))
7856 43dc 8091 0000 lds r24,Parameter_KompassWirkung
7857 43e0 8695 lsr r24
7858 43e2 9927 clr r25
7859 43e4 289F mul r18,r24
7860 43e6 D001 movw r26,r0
7861 43e8 299F mul r18,r25
7862 43ea B00D add r27,r0
7863 43ec 389F mul r19,r24
7864 43ee B00D add r27,r0
7865 43f0 1124 clr r1
7866 43f2 9D01 movw r18,r26
7867 43f4 B7FF sbrs r27,7
7868 43f6 00C0 rjmp .L629
7869 43f8 215F subi r18,lo8(-(15))
7870 43fa 3F4F sbci r19,hi8(-(15))
7871 .L629:
7872 43fc F4E0 ldi r31,4
7873 43fe 3595 1: asr r19
7874 4400 2795 ror r18
7875 4402 FA95 dec r31
7876 4404 01F4 brne 1b
7877 4406 3093 0000 sts (CompassGierSetpoint)+1,r19
7878 440a 2093 0000 sts CompassGierSetpoint,r18
7879 440e 00C0 rjmp .L631
7880 .L614:
7881 4410 1092 0000 sts (CompassGierSetpoint)+1,__zero_reg__
7882 4414 1092 0000 sts CompassGierSetpoint,__zero_reg__
7883 .L631:
7884 4418 8091 0000 lds r24,TrichterFlug
7885 441c 8823 tst r24
7886 441e 01F0 breq .L632
7887 4420 1092 0000 sts SummeRoll,__zero_reg__
7888 4424 1092 0000 sts (SummeRoll)+1,__zero_reg__
7889 4428 1092 0000 sts (SummeRoll)+2,__zero_reg__
7890 442c 1092 0000 sts (SummeRoll)+3,__zero_reg__
7891 4430 1092 0000 sts SummeNick,__zero_reg__
7892 4434 1092 0000 sts (SummeNick)+1,__zero_reg__
7893 4438 1092 0000 sts (SummeNick)+2,__zero_reg__
7894 443c 1092 0000 sts (SummeNick)+3,__zero_reg__
7895 .L632:
7896 4440 F090 0000 lds r15,Looping_Nick
7897 4444 FF20 tst r15
7898 4446 01F4 brne .L633
7899 4448 8091 0000 lds r24,IntegralFaktor
7900 444c 282F mov r18,r24
7901 444e 3327 clr r19
7902 4450 4427 clr r20
7903 4452 5527 clr r21
7904 4454 8091 0000 lds r24,IntegralNick
7905 4458 9091 0000 lds r25,(IntegralNick)+1
7906 445c A091 0000 lds r26,(IntegralNick)+2
7907 4460 B091 0000 lds r27,(IntegralNick)+3
7908 4464 BC01 movw r22,r24
7909 4466 CD01 movw r24,r26
7910 4468 0E94 0000 call __mulsi3
7911 446c DC01 movw r26,r24
7912 446e CB01 movw r24,r22
7913 4470 BC01 movw r22,r24
7914 4472 CD01 movw r24,r26
7915 4474 28EF ldi r18,lo8(11000)
7916 4476 3AE2 ldi r19,hi8(11000)
7917 4478 40E0 ldi r20,hlo8(11000)
7918 447a 50E0 ldi r21,hhi8(11000)
7919 447c 0E94 0000 call __divmodsi4
7920 4480 3901 movw r6,r18
7921 4482 00C0 rjmp .L634
7922 .L633:
7923 4484 6624 clr r6
7924 4486 7724 clr r7
7925 .L634:
7926 4488 E090 0000 lds r14,Looping_Roll
7927 448c EE20 tst r14
7928 448e 01F4 brne .L635
7929 4490 8091 0000 lds r24,IntegralFaktor
7930 4494 282F mov r18,r24
7931 4496 3327 clr r19
7932 4498 4427 clr r20
7933 449a 5527 clr r21
7934 449c 8091 0000 lds r24,IntegralRoll
7935 44a0 9091 0000 lds r25,(IntegralRoll)+1
7936 44a4 A091 0000 lds r26,(IntegralRoll)+2
7937 44a8 B091 0000 lds r27,(IntegralRoll)+3
7938 44ac BC01 movw r22,r24
7939 44ae CD01 movw r24,r26
7940 44b0 0E94 0000 call __mulsi3
7941 44b4 DC01 movw r26,r24
7942 44b6 CB01 movw r24,r22
7943 44b8 BC01 movw r22,r24
7944 44ba CD01 movw r24,r26
7945 44bc 28EF ldi r18,lo8(11000)
7946 44be 3AE2 ldi r19,hi8(11000)
7947 44c0 40E0 ldi r20,hlo8(11000)
7948 44c2 50E0 ldi r21,hhi8(11000)
7949 44c4 0E94 0000 call __divmodsi4
7950 44c8 2901 movw r4,r18
7951 44ca 00C0 rjmp .L636
7952 .L635:
7953 44cc 4424 clr r4
7954 44ce 5524 clr r5
7955 .L636:
7956 44d0 8091 0000 lds r24,TrimNick
7957 44d4 9091 0000 lds r25,(TrimNick)+1
7958 44d8 893C cpi r24,201
7959 44da 9105 cpc r25,__zero_reg__
7960 44dc 04F0 brlt .L637
7961 44de 88EC ldi r24,lo8(200)
7962 44e0 90E0 ldi r25,hi8(200)
7963 44e2 00C0 rjmp .L894
7964 .L637:
7965 44e4 8853 subi r24,lo8(-200)
7966 44e6 9F4F sbci r25,hi8(-200)
7967 44e8 04F4 brge .L638
7968 44ea 88E3 ldi r24,lo8(-200)
7969 44ec 9FEF ldi r25,hi8(-200)
7970 .L894:
7971 44ee 9093 0000 sts (TrimNick)+1,r25
7972 44f2 8093 0000 sts TrimNick,r24
7973 .L638:
7974 44f6 8091 0000 lds r24,TrimRoll
7975 44fa 9091 0000 lds r25,(TrimRoll)+1
7976 44fe 893C cpi r24,201
7977 4500 9105 cpc r25,__zero_reg__
7978 4502 04F0 brlt .L640
7979 4504 88EC ldi r24,lo8(200)
7980 4506 90E0 ldi r25,hi8(200)
7981 4508 00C0 rjmp .L895
7982 .L640:
7983 450a 8853 subi r24,lo8(-200)
7984 450c 9F4F sbci r25,hi8(-200)
7985 450e 04F4 brge .L641
7986 4510 88E3 ldi r24,lo8(-200)
7987 4512 9FEF ldi r25,hi8(-200)
7988 .L895:
7989 4514 9093 0000 sts (TrimRoll)+1,r25
7990 4518 8093 0000 sts TrimRoll,r24
7991 .L641:
7992 451c 8091 0000 lds r24,MesswertNick
7993 4520 9091 0000 lds r25,(MesswertNick)+1
7994 4524 AA27 clr r26
7995 4526 97FD sbrc r25,7
7996 4528 A095 com r26
7997 452a BA2F mov r27,r26
7998 452c 2091 0000 lds r18,GyroFaktor
7999 4530 A22E mov r10,r18
8000 4532 BB24 clr r11
8001 4534 CC24 clr r12
8002 4536 DD24 clr r13
8003 4538 BC01 movw r22,r24
8004 453a CD01 movw r24,r26
8005 453c A601 movw r20,r12
8006 453e 9501 movw r18,r10
8007 4540 0E94 0000 call __mulsi3
8008 4544 9B01 movw r18,r22
8009 4546 AC01 movw r20,r24
8010 4548 8091 0000 lds r24,TrimNick
8011 454c 9091 0000 lds r25,(TrimNick)+1
8012 4550 AA27 clr r26
8013 4552 97FD sbrc r25,7
8014 4554 A095 com r26
8015 4556 BA2F mov r27,r26
8016 4558 E7E0 ldi r30,7
8017 455a 880F 1: lsl r24
8018 455c 991F rol r25
8019 455e AA1F rol r26
8020 4560 BB1F rol r27
8021 4562 EA95 dec r30
8022 4564 01F4 brne 1b
8023 4566 280F add r18,r24
8024 4568 391F adc r19,r25
8025 456a 4A1F adc r20,r26
8026 456c 5B1F adc r21,r27
8027 456e 57FF sbrs r21,7
8028 4570 00C0 rjmp .L643
8029 4572 215C subi r18,lo8(-(63))
8030 4574 3F4F sbci r19,hi8(-(63))
8031 4576 4F4F sbci r20,hlo8(-(63))
8032 4578 5F4F sbci r21,hhi8(-(63))
8033 .L643:
8034 457a 76E0 ldi r23,6
8035 457c 5595 1: asr r21
8036 457e 4795 ror r20
8037 4580 3795 ror r19
8038 4582 2795 ror r18
8039 4584 7A95 dec r23
8040 4586 01F4 brne 1b
8041 4588 8301 movw r16,r6
8042 458a 020F add r16,r18
8043 458c 131F adc r17,r19
8044 458e 1093 0000 sts (MesswertNick)+1,r17
8045 4592 0093 0000 sts MesswertNick,r16
8046 4596 8091 0000 lds r24,MesswertRoll
8047 459a 9091 0000 lds r25,(MesswertRoll)+1
8048 459e AA27 clr r26
8049 45a0 97FD sbrc r25,7
8050 45a2 A095 com r26
8051 45a4 BA2F mov r27,r26
8052 45a6 BC01 movw r22,r24
8053 45a8 CD01 movw r24,r26
8054 45aa A601 movw r20,r12
8055 45ac 9501 movw r18,r10
8056 45ae 0E94 0000 call __mulsi3
8057 45b2 9B01 movw r18,r22
8058 45b4 AC01 movw r20,r24
8059 45b6 8091 0000 lds r24,TrimRoll
8060 45ba 9091 0000 lds r25,(TrimRoll)+1
8061 45be AA27 clr r26
8062 45c0 97FD sbrc r25,7
8063 45c2 A095 com r26
8064 45c4 BA2F mov r27,r26
8065 45c6 67E0 ldi r22,7
8066 45c8 880F 1: lsl r24
8067 45ca 991F rol r25
8068 45cc AA1F rol r26
8069 45ce BB1F rol r27
8070 45d0 6A95 dec r22
8071 45d2 01F4 brne 1b
8072 45d4 280F add r18,r24
8073 45d6 391F adc r19,r25
8074 45d8 4A1F adc r20,r26
8075 45da 5B1F adc r21,r27
8076 45dc 57FF sbrs r21,7
8077 45de 00C0 rjmp .L644
8078 45e0 215C subi r18,lo8(-(63))
8079 45e2 3F4F sbci r19,hi8(-(63))
8080 45e4 4F4F sbci r20,hlo8(-(63))
8081 45e6 5F4F sbci r21,hhi8(-(63))
8082 .L644:
8083 45e8 F6E0 ldi r31,6
8084 45ea 5595 1: asr r21
8085 45ec 4795 ror r20
8086 45ee 3795 ror r19
8087 45f0 2795 ror r18
8088 45f2 FA95 dec r31
8089 45f4 01F4 brne 1b
8090 45f6 4201 movw r8,r4
8091 45f8 820E add r8,r18
8092 45fa 931E adc r9,r19
8093 45fc 9092 0000 sts (MesswertRoll)+1,r9
8094 4600 8092 0000 sts MesswertRoll,r8
8095 4604 8091 0000 lds r24,MesswertGier
8096 4608 9091 0000 lds r25,(MesswertGier)+1
8097 460c 880F add r24,r24
8098 460e 991F adc r25,r25
8099 4610 AA27 clr r26
8100 4612 97FD sbrc r25,7
8101 4614 A095 com r26
8102 4616 BA2F mov r27,r26
8103 4618 2091 0000 lds r18,GyroFaktorGier
8104 461c 3327 clr r19
8105 461e 4427 clr r20
8106 4620 5527 clr r21
8107 4622 BC01 movw r22,r24
8108 4624 CD01 movw r24,r26
8109 4626 0E94 0000 call __mulsi3
8110 462a 5B01 movw r10,r22
8111 462c 6C01 movw r12,r24
8112 462e 97FF sbrs r25,7
8113 4630 00C0 rjmp .L645
8114 4632 2FE3 ldi r18,lo8(63)
8115 4634 30E0 ldi r19,hi8(63)
8116 4636 40E0 ldi r20,hlo8(63)
8117 4638 50E0 ldi r21,hhi8(63)
8118 463a A20E add r10,r18
8119 463c B31E adc r11,r19
8120 463e C41E adc r12,r20
8121 4640 D51E adc r13,r21
8122 .L645:
8123 4642 E6E0 ldi r30,6
8124 4644 D594 1: asr r13
8125 4646 C794 ror r12
8126 4648 B794 ror r11
8127 464a A794 ror r10
8128 464c EA95 dec r30
8129 464e 01F4 brne 1b
8130 4650 8091 0000 lds r24,IntegralFaktorGier
8131 4654 282F mov r18,r24
8132 4656 3327 clr r19
8133 4658 4427 clr r20
8134 465a 5527 clr r21
8135 465c 8091 0000 lds r24,Integral_Gier
8136 4660 9091 0000 lds r25,(Integral_Gier)+1
8137 4664 A091 0000 lds r26,(Integral_Gier)+2
8138 4668 B091 0000 lds r27,(Integral_Gier)+3
8139 466c BC01 movw r22,r24
8140 466e CD01 movw r24,r26
8141 4670 0E94 0000 call __mulsi3
8142 4674 DC01 movw r26,r24
8143 4676 CB01 movw r24,r22
8144 4678 BC01 movw r22,r24
8145 467a CD01 movw r24,r26
8146 467c 20EF ldi r18,lo8(22000)
8147 467e 35E5 ldi r19,hi8(22000)
8148 4680 40E0 ldi r20,hlo8(22000)
8149 4682 50E0 ldi r21,hhi8(22000)
8150 4684 0E94 0000 call __divmodsi4
8151 4688 B501 movw r22,r10
8152 468a 620F add r22,r18
8153 468c 731F adc r23,r19
8154 468e 7093 0000 sts (MesswertGier)+1,r23
8155 4692 6093 0000 sts MesswertGier,r22
8156 4696 0150 subi r16,lo8(4097)
8157 4698 1041 sbci r17,hi8(4097)
8158 469a 04F0 brlt .L646
8159 469c 80E0 ldi r24,lo8(4096)
8160 469e 90E1 ldi r25,hi8(4096)
8161 46a0 9093 0000 sts (MesswertNick)+1,r25
8162 46a4 8093 0000 sts MesswertNick,r24
8163 .L646:
8164 46a8 8091 0000 lds r24,MesswertNick
8165 46ac 9091 0000 lds r25,(MesswertNick)+1
8166 46b0 8050 subi r24,lo8(-4096)
8167 46b2 904F sbci r25,hi8(-4096)
8168 46b4 04F4 brge .L647
8169 46b6 80E0 ldi r24,lo8(-4096)
8170 46b8 90EF ldi r25,hi8(-4096)
8171 46ba 9093 0000 sts (MesswertNick)+1,r25
8172 46be 8093 0000 sts MesswertNick,r24
8173 .L647:
8174 46c2 51E0 ldi r21,lo8(4097)
8175 46c4 8516 cp r8,r21
8176 46c6 50E1 ldi r21,hi8(4097)
8177 46c8 9506 cpc r9,r21
8178 46ca 04F0 brlt .L648
8179 46cc 80E0 ldi r24,lo8(4096)
8180 46ce 90E1 ldi r25,hi8(4096)
8181 46d0 9093 0000 sts (MesswertRoll)+1,r25
8182 46d4 8093 0000 sts MesswertRoll,r24
8183 .L648:
8184 46d8 8091 0000 lds r24,MesswertRoll
8185 46dc 9091 0000 lds r25,(MesswertRoll)+1
8186 46e0 8050 subi r24,lo8(-4096)
8187 46e2 904F sbci r25,hi8(-4096)
8188 46e4 04F4 brge .L649
8189 46e6 80E0 ldi r24,lo8(-4096)
8190 46e8 90EF ldi r25,hi8(-4096)
8191 46ea 9093 0000 sts (MesswertRoll)+1,r25
8192 46ee 8093 0000 sts MesswertRoll,r24
8193 .L649:
8194 46f2 6150 subi r22,lo8(4097)
8195 46f4 7041 sbci r23,hi8(4097)
8196 46f6 04F0 brlt .L650
8197 46f8 80E0 ldi r24,lo8(4096)
8198 46fa 90E1 ldi r25,hi8(4096)
8199 46fc 9093 0000 sts (MesswertGier)+1,r25
8200 4700 8093 0000 sts MesswertGier,r24
8201 .L650:
8202 4704 8091 0000 lds r24,MesswertGier
8203 4708 9091 0000 lds r25,(MesswertGier)+1
8204 470c 8050 subi r24,lo8(-4096)
8205 470e 904F sbci r25,hi8(-4096)
8206 4710 04F4 brge .L651
8207 4712 80E0 ldi r24,lo8(-4096)
8208 4714 90EF ldi r25,hi8(-4096)
8209 4716 9093 0000 sts (MesswertGier)+1,r25
8210 471a 8093 0000 sts MesswertGier,r24
8211 .L651:
8212 471e 8091 0000 lds r24,BattLowVoltageWarning
8213 4722 482F mov r20,r24
8214 4724 5527 clr r21
8215 4726 8091 0000 lds r24,UBat
8216 472a 9091 0000 lds r25,(UBat)+1
8217 472e 4817 cp r20,r24
8218 4730 5907 cpc r21,r25
8219 4732 04F4 brge .L652
8220 4734 2091 0000 lds r18,UBat
8221 4738 3091 0000 lds r19,(UBat)+1
8222 473c 0981 ldd r16,Y+1
8223 473e 1A81 ldd r17,Y+2
8224 4740 049F mul r16,r20
8225 4742 C001 movw r24,r0
8226 4744 059F mul r16,r21
8227 4746 900D add r25,r0
8228 4748 149F mul r17,r20
8229 474a 900D add r25,r0
8230 474c 1124 clr r1
8231 474e B901 movw r22,r18
8232 4750 0E94 0000 call __udivmodhi4
8233 4754 7A83 std Y+2,r23
8234 4756 6983 std Y+1,r22
8235 .L652:
8236 4758 2981 ldd r18,Y+1
8237 475a 3A81 ldd r19,Y+2
8238 475c 220F lsl r18
8239 475e 331F rol r19
8240 4760 220F lsl r18
8241 4762 331F rol r19
8242 4764 3A83 std Y+2,r19
8243 4766 2983 std Y+1,r18
8244 4768 4091 0000 lds r20,Parameter_GlobalConfig
8245 476c 40FD sbrc r20,0
8246 476e 00C0 rjmp .+4
8247 4770 0C94 0000 jmp .L653
8248 4774 EE20 tst r14
8249 4776 01F0 breq .+4
8250 4778 0C94 0000 jmp .L653
8251 477c FF20 tst r15
8252 477e 01F0 breq .+4
8253 4780 0C94 0000 jmp .L653
8254 4784 00E0 ldi r16,lo8(0)
8255 4786 10E0 ldi r17,hi8(0)
8256 4788 4801 movw r8,r16
8257 478a 8091 0000 lds r24,HoverGas
8258 478e 9091 0000 lds r25,(HoverGas)+1
8259 4792 9093 0000 sts (DebugOut+44)+1,r25
8260 4796 8093 0000 sts DebugOut+44,r24
8261 479a 2091 0000 lds r18,BaroExpandActive
8262 479e 3091 0000 lds r19,(BaroExpandActive)+1
8263 47a2 2115 cp r18,__zero_reg__
8264 47a4 3105 cpc r19,__zero_reg__
8265 47a6 01F0 breq .+2
8266 47a8 00C0 rjmp .L654
8267 47aa 8091 0000 lds r24,MessLuftdruck
8268 47ae 9091 0000 lds r25,(MessLuftdruck)+1
8269 47b2 8959 subi r24,lo8(921)
8270 47b4 9340 sbci r25,hi8(921)
8271 47b6 00F0 brlo .L655
8272 47b8 87B5 in r24,71-0x20
8273 47ba 803F cpi r24,lo8(-16)
8274 47bc 00F4 brsh .L656
8275 47be 8091 0000 lds r24,ExpandBaro
8276 47c2 8150 subi r24,lo8(-(-1))
8277 47c4 00C0 rjmp .L896
8278 .L656:
8279 47c6 81E0 ldi r24,lo8(1)
8280 47c8 8093 0000 sts BaroAtLowerLimit.26,r24
8281 47cc 00C0 rjmp .L663
8282 .L655:
8283 47ce 8091 0000 lds r24,MessLuftdruck
8284 47d2 9091 0000 lds r25,(MessLuftdruck)+1
8285 47d6 8436 cpi r24,100
8286 47d8 9105 cpc r25,__zero_reg__
8287 47da 00F4 brsh .L659
8288 47dc 87B5 in r24,71-0x20
8289 47de 8031 cpi r24,lo8(16)
8290 47e0 00F0 brlo .L660
8291 47e2 8091 0000 lds r24,ExpandBaro
8292 47e6 8F5F subi r24,lo8(-(1))
8293 .L896:
8294 47e8 8093 0000 sts ExpandBaro,r24
8295 47ec 9FE0 ldi r25,lo8(15)
8296 47ee 8902 muls r24,r25
8297 47f0 9001 movw r18,r0
8298 47f2 1124 clr r1
8299 47f4 8091 0000 lds r24,DruckOffsetSetting
8300 47f8 821B sub r24,r18
8301 47fa 87BD out 71-0x20,r24
8302 47fc 8CE2 ldi r24,lo8(300)
8303 47fe 91E0 ldi r25,hi8(300)
8304 4800 9093 0000 sts (beeptime)+1,r25
8305 4804 8093 0000 sts beeptime,r24
8306 4808 8EE5 ldi r24,lo8(350)
8307 480a 91E0 ldi r25,hi8(350)
8308 480c 9093 0000 sts (BaroExpandActive)+1,r25
8309 4810 8093 0000 sts BaroExpandActive,r24
8310 4814 00C0 rjmp .L663
8311 .L660:
8312 4816 81E0 ldi r24,lo8(1)
8313 4818 8093 0000 sts BaroAtUpperLimit.25,r24
8314 481c 00C0 rjmp .L663
8315 .L659:
8316 481e F092 0000 sts BaroAtUpperLimit.25,r15
8317 4822 F092 0000 sts BaroAtLowerLimit.26,r15
8318 4826 00C0 rjmp .L663
8319 .L654:
8320 4828 8091 0000 lds r24,HoehenWert
8321 482c 9091 0000 lds r25,(HoehenWert)+1
8322 4830 A091 0000 lds r26,(HoehenWert)+2
8323 4834 B091 0000 lds r27,(HoehenWert)+3
8324 4838 64E0 ldi r22,4
8325 483a 880F 1: lsl r24
8326 483c 991F rol r25
8327 483e AA1F rol r26
8328 4840 BB1F rol r27
8329 4842 6A95 dec r22
8330 4844 01F4 brne 1b
8331 4846 8093 0000 sts SummenHoehe,r24
8332 484a 9093 0000 sts (SummenHoehe)+1,r25
8333 484e A093 0000 sts (SummenHoehe)+2,r26
8334 4852 B093 0000 sts (SummenHoehe)+3,r27
8335 4856 1093 0000 sts (VarioMeter)+1,r17
8336 485a 0093 0000 sts VarioMeter,r16
8337 485e 2150 subi r18,lo8(-(-1))
8338 4860 3040 sbci r19,hi8(-(-1))
8339 4862 3093 0000 sts (BaroExpandActive)+1,r19
8340 4866 2093 0000 sts BaroExpandActive,r18
8341 .L663:
8342 486a 2091 0000 lds r18,Parameter_HoehenSchalter
8343 486e 41FF sbrs r20,1
8344 4870 00C0 rjmp .L664
8345 4872 2233 cpi r18,lo8(50)
8346 4874 00F4 brsh .L665
8347 4876 8091 0000 lds r24,delay.24
8348 487a 8150 subi r24,lo8(-(-1))
8349 487c 8093 0000 sts delay.24,r24
8350 4880 8F3F cpi r24,lo8(-1)
8351 4882 01F0 breq .+2
8352 4884 00C0 rjmp .L671
8353 4886 8091 0000 lds r24,SpeakHoTT
8354 488a 8823 tst r24
8355 488c 01F4 brne .L667
8356 488e 8091 0000 lds r24,HoehenReglerAktiv
8357 4892 8823 tst r24
8358 4894 01F0 breq .L667
8359 4896 88E2 ldi r24,lo8(40)
8360 4898 8093 0000 sts SpeakHoTT,r24
8361 .L667:
8362 489c 1092 0000 sts HoehenReglerAktiv,__zero_reg__
8363 48a0 8091 0000 lds r24,HoehenWert
8364 48a4 9091 0000 lds r25,(HoehenWert)+1
8365 48a8 A091 0000 lds r26,(HoehenWert)+2
8366 48ac B091 0000 lds r27,(HoehenWert)+3
8367 48b0 8093 0000 sts SollHoehe,r24
8368 48b4 9093 0000 sts (SollHoehe)+1,r25
8369 48b8 A093 0000 sts (SollHoehe)+2,r26
8370 48bc B093 0000 sts (SollHoehe)+3,r27
8371 48c0 81E0 ldi r24,lo8(1)
8372 48c2 8093 0000 sts delay.24,r24
8373 48c6 00C0 rjmp .L671
8374 .L665:
8375 48c8 2734 cpi r18,lo8(71)
8376 48ca 00F0 brlo .L671
8377 48cc 8091 0000 lds r24,SpeakHoTT
8378 48d0 8823 tst r24
8379 48d2 01F4 brne .L670
8380 48d4 8091 0000 lds r24,HoehenReglerAktiv
8381 48d8 8823 tst r24
8382 48da 01F4 brne .L670
8383 48dc 87E2 ldi r24,lo8(39)
8384 48de 8093 0000 sts SpeakHoTT,r24
8385 .L670:
8386 48e2 88EC ldi r24,lo8(-56)
8387 48e4 8093 0000 sts delay.24,r24
8388 48e8 00C0 rjmp .L897
8389 .L664:
8390 48ea 8091 0000 lds r24,ExternHoehenValue
8391 48ee 9091 0000 lds r25,(ExternHoehenValue)+1
8392 48f2 820F add r24,r18
8393 48f4 911D adc r25,__zero_reg__
8394 48f6 2091 0000 lds r18,EE_Parameter+18
8395 48fa 3327 clr r19
8396 48fc 829F mul r24,r18
8397 48fe A001 movw r20,r0
8398 4900 839F mul r24,r19
8399 4902 500D add r21,r0
8400 4904 929F mul r25,r18
8401 4906 500D add r21,r0
8402 4908 1124 clr r1
8403 490a CA01 movw r24,r20
8404 490c AA27 clr r26
8405 490e 97FD sbrc r25,7
8406 4910 A095 com r26
8407 4912 BA2F mov r27,r26
8408 4914 8093 0000 sts SollHoehe,r24
8409 4918 9093 0000 sts (SollHoehe)+1,r25
8410 491c A093 0000 sts (SollHoehe)+2,r26
8411 4920 B093 0000 sts (SollHoehe)+3,r27
8412 .L897:
8413 4924 81E0 ldi r24,lo8(1)
8414 4926 8093 0000 sts HoehenReglerAktiv,r24
8415 .L671:
8416 492a 8091 0000 lds r24,IntegralNick
8417 492e 9091 0000 lds r25,(IntegralNick)+1
8418 4932 A091 0000 lds r26,(IntegralNick)+2
8419 4936 B091 0000 lds r27,(IntegralNick)+3
8420 493a E090 0000 lds r14,GIER_GRAD_FAKTOR
8421 493e F090 0000 lds r15,(GIER_GRAD_FAKTOR)+1
8422 4942 0091 0000 lds r16,(GIER_GRAD_FAKTOR)+2
8423 4946 1091 0000 lds r17,(GIER_GRAD_FAKTOR)+3
8424 494a BC01 movw r22,r24
8425 494c CD01 movw r24,r26
8426 494e A801 movw r20,r16
8427 4950 9701 movw r18,r14
8428 4952 0E94 0000 call __divmodsi4
8429 4956 5901 movw r10,r18
8430 4958 6A01 movw r12,r20
8431 495a 8091 0000 lds r24,IntegralRoll
8432 495e 9091 0000 lds r25,(IntegralRoll)+1
8433 4962 A091 0000 lds r26,(IntegralRoll)+2
8434 4966 B091 0000 lds r27,(IntegralRoll)+3
8435 496a BC01 movw r22,r24
8436 496c CD01 movw r24,r26
8437 496e A801 movw r20,r16
8438 4970 9701 movw r18,r14
8439 4972 0E94 0000 call __divmodsi4
8440 4976 B901 movw r22,r18
8441 4978 C501 movw r24,r10
8442 497a 0E94 0000 call ihypot
8443 497e 5C01 movw r10,r24
8444 4980 CC97 sbiw r24,60
8445 4982 04F0 brlt .L672
8446 4984 5CE3 ldi r21,lo8(60)
8447 4986 A52E mov r10,r21
8448 4988 B12C mov r11,__zero_reg__
8449 .L672:
8450 498a C501 movw r24,r10
8451 498c 0E94 0000 call c_cos_8192
8452 4990 5C01 movw r10,r24
8453 4992 80E2 ldi r24,lo8(32)
8454 4994 8093 0000 sts VarioCharacter,r24
8455 4998 1092 0000 sts (AltitudeSetpointTrimming)+1,__zero_reg__
8456 499c 1092 0000 sts AltitudeSetpointTrimming,__zero_reg__
8457 49a0 8091 0000 lds r24,HoehenReglerAktiv
8458 49a4 8823 tst r24
8459 49a6 01F4 brne .+2
8460 49a8 00C0 rjmp .L673
8461 49aa 8091 0000 lds r24,FC_StatusFlags
8462 49ae 9927 clr r25
8463 49b0 9C01 movw r18,r24
8464 49b2 2071 andi r18,lo8(16)
8465 49b4 3070 andi r19,hi8(16)
8466 49b6 84FD sbrc r24,4
8467 49b8 00C0 rjmp .L673
8468 49ba 8091 0000 lds r24,FC_StatusFlags2
8469 49be 8260 ori r24,lo8(2)
8470 49c0 8093 0000 sts FC_StatusFlags2,r24
8471 49c4 7091 0000 lds r23,Parameter_ExtraConfig
8472 49c8 872F mov r24,r23
8473 49ca 9927 clr r25
8474 49cc 41E0 ldi r20,lo8(1)
8475 49ce C42E mov r12,r20
8476 49d0 D12C mov r13,__zero_reg__
8477 49d2 C822 and r12,r24
8478 49d4 D922 and r13,r25
8479 49d6 80FD sbrc r24,0
8480 49d8 00C0 rjmp .L675
8481 49da 8091 0000 lds r24,Parameter_GlobalConfig
8482 49de 81FD sbrc r24,1
8483 49e0 00C0 rjmp .L674
8484 .L675:
8485 49e2 C980 ldd r12,Y+1
8486 49e4 DA80 ldd r13,Y+2
8487 49e6 3093 0000 sts (HeightTrimming.21)+1,r19
8488 49ea 2093 0000 sts HeightTrimming.21,r18
8489 49ee 3093 0000 sts (AltitudeSetpointTrimming)+1,r19
8490 49f2 2093 0000 sts AltitudeSetpointTrimming,r18
8491 49f6 8091 0000 lds r24,FC_StatusFlags
8492 49fa 806C ori r24,lo8(-64)
8493 49fc 8093 0000 sts FC_StatusFlags,r24
8494 4a00 00C0 rjmp .L676
8495 .L674:
8496 4a02 8091 0000 lds r24,FC_StatusFlags
8497 4a06 81FF sbrs r24,1
8498 4a08 00C0 rjmp .L677
8499 4a0a 0091 0000 lds r16,StickGasHover
8500 4a0e 1091 0000 lds r17,(StickGasHover)+1
8501 4a12 C801 movw r24,r16
8502 4a14 0F96 adiw r24,15
8503 4a16 2090 0000 lds r2,StickGas
8504 4a1a 3090 0000 lds r3,(StickGas)+1
8505 4a1e 8215 cp r24,r2
8506 4a20 9305 cpc r25,r3
8507 4a22 04F0 brlt .+2
8508 4a24 00C0 rjmp .L678
8509 4a26 8091 0000 lds r24,BaroAtUpperLimit.25
8510 4a2a 8823 tst r24
8511 4a2c 01F0 breq .+2
8512 4a2e 00C0 rjmp .L678
8513 4a30 8091 0000 lds r24,FC_StatusFlags
8514 4a34 87FF sbrs r24,7
8515 4a36 00C0 rjmp .L679
8516 4a38 8091 0000 lds r24,FC_StatusFlags
8517 4a3c 8F77 andi r24,lo8(127)
8518 4a3e 8093 0000 sts FC_StatusFlags,r24
8519 4a42 8091 0000 lds r24,HoehenWert
8520 4a46 9091 0000 lds r25,(HoehenWert)+1
8521 4a4a A091 0000 lds r26,(HoehenWert)+2
8522 4a4e B091 0000 lds r27,(HoehenWert)+3
8523 4a52 8093 0000 sts SollHoehe,r24
8524 4a56 9093 0000 sts (SollHoehe)+1,r25
8525 4a5a A093 0000 sts (SollHoehe)+2,r26
8526 4a5e B093 0000 sts (SollHoehe)+3,r27
8527 .L679:
8528 4a62 8091 0000 lds r24,FC_StatusFlags
8529 4a66 8064 ori r24,lo8(64)
8530 4a68 8093 0000 sts FC_StatusFlags,r24
8531 4a6c E090 0000 lds r14,Parameter_MaximumAltitude
8532 4a70 EE20 tst r14
8533 4a72 01F0 breq .L680
8534 4a74 8091 0000 lds r24,SollHoehe
8535 4a78 9091 0000 lds r25,(SollHoehe)+1
8536 4a7c A091 0000 lds r26,(SollHoehe)+2
8537 4a80 B091 0000 lds r27,(SollHoehe)+3
8538 4a84 BC01 movw r22,r24
8539 4a86 CD01 movw r24,r26
8540 4a88 24E6 ldi r18,lo8(100)
8541 4a8a 30E0 ldi r19,hi8(100)
8542 4a8c 40E0 ldi r20,hlo8(100)
8543 4a8e 50E0 ldi r21,hhi8(100)
8544 4a90 0E94 0000 call __divmodsi4
8545 4a94 8E2D mov r24,r14
8546 4a96 9927 clr r25
8547 4a98 AA27 clr r26
8548 4a9a BB27 clr r27
8549 4a9c 8217 cp r24,r18
8550 4a9e 9307 cpc r25,r19
8551 4aa0 A407 cpc r26,r20
8552 4aa2 B507 cpc r27,r21
8553 4aa4 04F4 brge .L680
8554 4aa6 D092 0000 sts (AltitudeSetpointTrimming)+1,r13
8555 4aaa C092 0000 sts AltitudeSetpointTrimming,r12
8556 4aae 00C0 rjmp .L681
8557 .L680:
8558 4ab0 C101 movw r24,r2
8559 4ab2 801B sub r24,r16
8560 4ab4 910B sbc r25,r17
8561 4ab6 0F97 sbiw r24,15
8562 4ab8 97FF sbrs r25,7
8563 4aba 00C0 rjmp .L682
8564 4abc 9095 com r25
8565 4abe 8195 neg r24
8566 4ac0 9F4F sbci r25,lo8(-1)
8567 .L682:
8568 4ac2 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8569 4ac6 8093 0000 sts AltitudeSetpointTrimming,r24
8570 4aca 8BE2 ldi r24,lo8(43)
8571 4acc 8093 0000 sts VarioCharacter,r24
8572 .L681:
8573 4ad0 1092 0000 sts WaypointTrimming,__zero_reg__
8574 4ad4 00C0 rjmp .L683
8575 .L678:
8576 4ad6 C801 movw r24,r16
8577 4ad8 0F97 sbiw r24,15
8578 4ada 2816 cp r2,r24
8579 4adc 3906 cpc r3,r25
8580 4ade 04F4 brge .L684
8581 4ae0 2091 0000 lds r18,BaroAtLowerLimit.26
8582 4ae4 2223 tst r18
8583 4ae6 01F4 brne .L684
8584 4ae8 8091 0000 lds r24,FC_StatusFlags
8585 4aec 86FF sbrs r24,6
8586 4aee 00C0 rjmp .L685
8587 4af0 8091 0000 lds r24,FC_StatusFlags
8588 4af4 8F7B andi r24,lo8(-65)
8589 4af6 8093 0000 sts FC_StatusFlags,r24
8590 4afa 8091 0000 lds r24,HoehenWert
8591 4afe 9091 0000 lds r25,(HoehenWert)+1
8592 4b02 A091 0000 lds r26,(HoehenWert)+2
8593 4b06 B091 0000 lds r27,(HoehenWert)+3
8594 4b0a 8093 0000 sts SollHoehe,r24
8595 4b0e 9093 0000 sts (SollHoehe)+1,r25
8596 4b12 A093 0000 sts (SollHoehe)+2,r26
8597 4b16 B093 0000 sts (SollHoehe)+3,r27
8598 .L685:
8599 4b1a 8091 0000 lds r24,FC_StatusFlags
8600 4b1e 8068 ori r24,lo8(-128)
8601 4b20 8093 0000 sts FC_StatusFlags,r24
8602 4b24 C101 movw r24,r2
8603 4b26 801B sub r24,r16
8604 4b28 910B sbc r25,r17
8605 4b2a 0F96 adiw r24,15
8606 4b2c 97FF sbrs r25,7
8607 4b2e 00C0 rjmp .L686
8608 4b30 9095 com r25
8609 4b32 8195 neg r24
8610 4b34 9F4F sbci r25,lo8(-1)
8611 .L686:
8612 4b36 9095 com r25
8613 4b38 8195 neg r24
8614 4b3a 9F4F sbci r25,lo8(-1)
8615 4b3c 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8616 4b40 8093 0000 sts AltitudeSetpointTrimming,r24
8617 4b44 8DE2 ldi r24,lo8(45)
8618 4b46 8093 0000 sts VarioCharacter,r24
8619 4b4a 2093 0000 sts WaypointTrimming,r18
8620 4b4e 00C0 rjmp .L683
8621 .L684:
8622 4b50 8DE3 ldi r24,lo8(61)
8623 4b52 8093 0000 sts VarioCharacter,r24
8624 4b56 6091 0000 lds r22,FromNC_AltitudeSpeed
8625 4b5a 6623 tst r22
8626 4b5c 01F0 breq .L688
8627 4b5e 2091 0000 lds r18,FromNC_AltitudeSetpoint
8628 4b62 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8629 4b66 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8630 4b6a 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8631 4b6e 8091 0000 lds r24,SollHoehe
8632 4b72 9091 0000 lds r25,(SollHoehe)+1
8633 4b76 A091 0000 lds r26,(SollHoehe)+2
8634 4b7a B091 0000 lds r27,(SollHoehe)+3
8635 4b7e 8217 cp r24,r18
8636 4b80 9307 cpc r25,r19
8637 4b82 A407 cpc r26,r20
8638 4b84 B507 cpc r27,r21
8639 4b86 04F4 brge .L688
8640 4b88 8091 0000 lds r24,FC_StatusFlags
8641 4b8c 8064 ori r24,lo8(64)
8642 4b8e 8093 0000 sts FC_StatusFlags,r24
8643 4b92 862F mov r24,r22
8644 4b94 9927 clr r25
8645 4b96 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8646 4b9a 8093 0000 sts AltitudeSetpointTrimming,r24
8647 4b9e 8AE0 ldi r24,lo8(10)
8648 4ba0 8093 0000 sts WaypointTrimming,r24
8649 4ba4 8EE5 ldi r24,lo8(94)
8650 4ba6 8093 0000 sts VarioCharacter,r24
8651 4baa 8091 0000 lds r24,FC_StatusFlags
8652 4bae 87FF sbrs r24,7
8653 4bb0 00C0 rjmp .L683
8654 4bb2 8091 0000 lds r24,FC_StatusFlags
8655 4bb6 8F77 andi r24,lo8(127)
8656 4bb8 00C0 rjmp .L899
8657 .L688:
8658 4bba 6623 tst r22
8659 4bbc 01F4 brne .+2
8660 4bbe 00C0 rjmp .L691
8661 4bc0 2091 0000 lds r18,FromNC_AltitudeSetpoint
8662 4bc4 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8663 4bc8 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8664 4bcc 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8665 4bd0 8091 0000 lds r24,SollHoehe
8666 4bd4 9091 0000 lds r25,(SollHoehe)+1
8667 4bd8 A091 0000 lds r26,(SollHoehe)+2
8668 4bdc B091 0000 lds r27,(SollHoehe)+3
8669 4be0 2817 cp r18,r24
8670 4be2 3907 cpc r19,r25
8671 4be4 4A07 cpc r20,r26
8672 4be6 5B07 cpc r21,r27
8673 4be8 04F4 brge .L691
8674 4bea 8091 0000 lds r24,FC_StatusFlags
8675 4bee 8068 ori r24,lo8(-128)
8676 4bf0 8093 0000 sts FC_StatusFlags,r24
8677 4bf4 862F mov r24,r22
8678 4bf6 9927 clr r25
8679 4bf8 9095 com r25
8680 4bfa 8195 neg r24
8681 4bfc 9F4F sbci r25,lo8(-1)
8682 4bfe 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8683 4c02 8093 0000 sts AltitudeSetpointTrimming,r24
8684 4c06 86EF ldi r24,lo8(-10)
8685 4c08 8093 0000 sts WaypointTrimming,r24
8686 4c0c 86E7 ldi r24,lo8(118)
8687 4c0e 8093 0000 sts VarioCharacter,r24
8688 4c12 8091 0000 lds r24,FC_StatusFlags
8689 4c16 86FF sbrs r24,6
8690 4c18 00C0 rjmp .L683
8691 4c1a 8091 0000 lds r24,FC_StatusFlags
8692 4c1e 8F7B andi r24,lo8(-65)
8693 .L899:
8694 4c20 8093 0000 sts FC_StatusFlags,r24
8695 4c24 8091 0000 lds r24,HoehenWert
8696 4c28 9091 0000 lds r25,(HoehenWert)+1
8697 4c2c A091 0000 lds r26,(HoehenWert)+2
8698 4c30 B091 0000 lds r27,(HoehenWert)+3
8699 4c34 8093 0000 sts SollHoehe,r24
8700 4c38 9093 0000 sts (SollHoehe)+1,r25
8701 4c3c A093 0000 sts (SollHoehe)+2,r26
8702 4c40 B093 0000 sts (SollHoehe)+3,r27
8703 4c44 00C0 rjmp .L683
8704 .L691:
8705 4c46 8091 0000 lds r24,FC_StatusFlags
8706 4c4a 807C andi r24,lo8(-64)
8707 4c4c 01F4 brne .+2
8708 4c4e 00C0 rjmp .L683
8709 4c50 8091 0000 lds r24,WaypointTrimming
8710 4c54 8823 tst r24
8711 4c56 01F4 brne .L695
8712 4c58 E090 0000 lds r14,HoehenWert
8713 4c5c F090 0000 lds r15,(HoehenWert)+1
8714 4c60 0091 0000 lds r16,(HoehenWert)+2
8715 4c64 1091 0000 lds r17,(HoehenWert)+3
8716 4c68 D801 movw r26,r16
8717 4c6a C701 movw r24,r14
8718 4c6c 8058 subi r24,lo8(-(-128))
8719 4c6e 9040 sbci r25,hi8(-(-128))
8720 4c70 A040 sbci r26,hlo8(-(-128))
8721 4c72 B040 sbci r27,hhi8(-(-128))
8722 4c74 2091 0000 lds r18,SollHoehe
8723 4c78 3091 0000 lds r19,(SollHoehe)+1
8724 4c7c 4091 0000 lds r20,(SollHoehe)+2
8725 4c80 5091 0000 lds r21,(SollHoehe)+3
8726 4c84 8217 cp r24,r18
8727 4c86 9307 cpc r25,r19
8728 4c88 A407 cpc r26,r20
8729 4c8a B507 cpc r27,r21
8730 4c8c 04F4 brge .L898
8731 4c8e D801 movw r26,r16
8732 4c90 C701 movw r24,r14
8733 4c92 8058 subi r24,lo8(-(128))
8734 4c94 9F4F sbci r25,hi8(-(128))
8735 4c96 AF4F sbci r26,hlo8(-(128))
8736 4c98 BF4F sbci r27,hhi8(-(128))
8737 4c9a 2817 cp r18,r24
8738 4c9c 3907 cpc r19,r25
8739 4c9e 4A07 cpc r20,r26
8740 4ca0 5B07 cpc r21,r27
8741 4ca2 04F0 brlt .L699
8742 .L898:
8743 4ca4 8093 0000 sts SollHoehe,r24
8744 4ca8 9093 0000 sts (SollHoehe)+1,r25
8745 4cac A093 0000 sts (SollHoehe)+2,r26
8746 4cb0 B093 0000 sts (SollHoehe)+3,r27
8747 4cb4 00C0 rjmp .L699
8748 .L695:
8749 4cb6 1092 0000 sts WaypointTrimming,__zero_reg__
8750 .L699:
8751 4cba 8091 0000 lds r24,FC_StatusFlags
8752 4cbe 8F73 andi r24,lo8(63)
8753 4cc0 8093 0000 sts FC_StatusFlags,r24
8754 4cc4 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8755 4cc8 1092 0000 sts HeightTrimming.21,__zero_reg__
8756 4ccc 71FF sbrs r23,1
8757 4cce 00C0 rjmp .L700
8758 4cd0 84EF ldi r24,lo8(500)
8759 4cd2 91E0 ldi r25,hi8(500)
8760 4cd4 9093 0000 sts (beeptime)+1,r25
8761 4cd8 8093 0000 sts beeptime,r24
8762 .L700:
8763 4cdc 8091 0000 lds r24,StartTrigger
8764 4ce0 8823 tst r24
8765 4ce2 01F4 brne .L683
8766 4ce4 8091 0000 lds r24,HoehenWert
8767 4ce8 9091 0000 lds r25,(HoehenWert)+1
8768 4cec A091 0000 lds r26,(HoehenWert)+2
8769 4cf0 B091 0000 lds r27,(HoehenWert)+3
8770 4cf4 C397 sbiw r24,51
8771 4cf6 A105 cpc r26,__zero_reg__
8772 4cf8 B105 cpc r27,__zero_reg__
8773 4cfa 04F0 brlt .L683
8774 4cfc 81E0 ldi r24,lo8(1)
8775 4cfe 8093 0000 sts StartTrigger,r24
8776 .L683:
8777 4d02 6091 0000 lds r22,HeightTrimming.21
8778 4d06 7091 0000 lds r23,(HeightTrimming.21)+1
8779 4d0a 8091 0000 lds r24,AltitudeSetpointTrimming
8780 4d0e 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
8781 4d12 680F add r22,r24
8782 4d14 791F adc r23,r25
8783 4d16 7093 0000 sts (HeightTrimming.21)+1,r23
8784 4d1a 6093 0000 sts HeightTrimming.21,r22
8785 4d1e CB01 movw r24,r22
8786 4d20 77FF sbrs r23,7
8787 4d22 00C0 rjmp .L703
8788 4d24 8827 clr r24
8789 4d26 9927 clr r25
8790 4d28 861B sub r24,r22
8791 4d2a 970B sbc r25,r23
8792 .L703:
8793 4d2c 855F subi r24,lo8(501)
8794 4d2e 9140 sbci r25,hi8(501)
8795 4d30 04F4 brge .+2
8796 4d32 00C0 rjmp .L702
8797 4d34 4091 0000 lds r20,WaypointTrimming
8798 4d38 4423 tst r20
8799 4d3a 01F0 breq .L704
8800 4d3c 8091 0000 lds r24,FromNC_AltitudeSetpoint
8801 4d40 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8802 4d44 2091 0000 lds r18,SollHoehe
8803 4d48 3091 0000 lds r19,(SollHoehe)+1
8804 4d4c 821B sub r24,r18
8805 4d4e 930B sbc r25,r19
8806 4d50 0996 adiw r24,9
8807 4d52 4397 sbiw r24,19
8808 4d54 00F4 brsh .L705
8809 4d56 8091 0000 lds r24,FromNC_AltitudeSetpoint
8810 4d5a 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8811 4d5e A091 0000 lds r26,(FromNC_AltitudeSetpoint)+2
8812 4d62 B091 0000 lds r27,(FromNC_AltitudeSetpoint)+3
8813 4d66 00C0 rjmp .L901
8814 .L705:
8815 4d68 242F mov r18,r20
8816 4d6a 3327 clr r19
8817 4d6c 27FD sbrc r18,7
8818 4d6e 3095 com r19
8819 4d70 432F mov r20,r19
8820 4d72 532F mov r21,r19
8821 4d74 8091 0000 lds r24,SollHoehe
8822 4d78 9091 0000 lds r25,(SollHoehe)+1
8823 4d7c A091 0000 lds r26,(SollHoehe)+2
8824 4d80 B091 0000 lds r27,(SollHoehe)+3
8825 4d84 820F add r24,r18
8826 4d86 931F adc r25,r19
8827 4d88 A41F adc r26,r20
8828 4d8a B51F adc r27,r21
8829 .L901:
8830 4d8c 8093 0000 sts SollHoehe,r24
8831 4d90 9093 0000 sts (SollHoehe)+1,r25
8832 4d94 A093 0000 sts (SollHoehe)+2,r26
8833 4d98 B093 0000 sts (SollHoehe)+3,r27
8834 4d9c 00C0 rjmp .L707
8835 .L704:
8836 4d9e 8091 0000 lds r24,EE_Parameter+18
8837 4da2 2091 0000 lds r18,SollHoehe
8838 4da6 3091 0000 lds r19,(SollHoehe)+1
8839 4daa 4091 0000 lds r20,(SollHoehe)+2
8840 4dae 5091 0000 lds r21,(SollHoehe)+3
8841 4db2 1616 cp __zero_reg__,r22
8842 4db4 1706 cpc __zero_reg__,r23
8843 4db6 04F4 brge .L708
8844 4db8 63E0 ldi r22,lo8(3)
8845 4dba 0E94 0000 call __udivmodqi4
8846 4dbe 280F add r18,r24
8847 4dc0 311D adc r19,__zero_reg__
8848 4dc2 411D adc r20,__zero_reg__
8849 4dc4 511D adc r21,__zero_reg__
8850 4dc6 00C0 rjmp .L900
8851 .L708:
8852 4dc8 63E0 ldi r22,lo8(3)
8853 4dca 0E94 0000 call __udivmodqi4
8854 4dce 281B sub r18,r24
8855 4dd0 3109 sbc r19,__zero_reg__
8856 4dd2 4109 sbc r20,__zero_reg__
8857 4dd4 5109 sbc r21,__zero_reg__
8858 .L900:
8859 4dd6 2093 0000 sts SollHoehe,r18
8860 4dda 3093 0000 sts (SollHoehe)+1,r19
8861 4dde 4093 0000 sts (SollHoehe)+2,r20
8862 4de2 5093 0000 sts (SollHoehe)+3,r21
8863 .L707:
8864 4de6 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8865 4dea 1092 0000 sts HeightTrimming.21,__zero_reg__
8866 4dee E090 0000 lds r14,HoehenWert
8867 4df2 F090 0000 lds r15,(HoehenWert)+1
8868 4df6 0091 0000 lds r16,(HoehenWert)+2
8869 4dfa 1091 0000 lds r17,(HoehenWert)+3
8870 4dfe D801 movw r26,r16
8871 4e00 C701 movw r24,r14
8872 4e02 8050 subi r24,lo8(-(-1024))
8873 4e04 9440 sbci r25,hi8(-(-1024))
8874 4e06 A040 sbci r26,hlo8(-(-1024))
8875 4e08 B040 sbci r27,hhi8(-(-1024))
8876 4e0a 2091 0000 lds r18,SollHoehe
8877 4e0e 3091 0000 lds r19,(SollHoehe)+1
8878 4e12 4091 0000 lds r20,(SollHoehe)+2
8879 4e16 5091 0000 lds r21,(SollHoehe)+3
8880 4e1a 8217 cp r24,r18
8881 4e1c 9307 cpc r25,r19
8882 4e1e A407 cpc r26,r20
8883 4e20 B507 cpc r27,r21
8884 4e22 04F4 brge .L902
8885 4e24 D801 movw r26,r16
8886 4e26 C701 movw r24,r14
8887 4e28 8050 subi r24,lo8(-(1024))
8888 4e2a 9C4F sbci r25,hi8(-(1024))
8889 4e2c AF4F sbci r26,hlo8(-(1024))
8890 4e2e BF4F sbci r27,hhi8(-(1024))
8891 4e30 2817 cp r18,r24
8892 4e32 3907 cpc r19,r25
8893 4e34 4A07 cpc r20,r26
8894 4e36 5B07 cpc r21,r27
8895 4e38 04F0 brlt .L711
8896 .L902:
8897 4e3a 8093 0000 sts SollHoehe,r24
8898 4e3e 9093 0000 sts (SollHoehe)+1,r25
8899 4e42 A093 0000 sts (SollHoehe)+2,r26
8900 4e46 B093 0000 sts (SollHoehe)+3,r27
8901 .L711:
8902 4e4a 8091 0000 lds r24,Parameter_ExtraConfig
8903 4e4e 81FF sbrs r24,1
8904 4e50 00C0 rjmp .L713
8905 4e52 84E6 ldi r24,lo8(100)
8906 4e54 90E0 ldi r25,hi8(100)
8907 4e56 9093 0000 sts (beeptime)+1,r25
8908 4e5a 8093 0000 sts beeptime,r24
8909 .L713:
8910 4e5e 8091 0000 lds r24,EE_Parameter+22
8911 4e62 8823 tst r24
8912 4e64 01F4 brne .L702
8913 4e66 8091 0000 lds r24,FromNC_AltitudeSpeed
8914 4e6a 8823 tst r24
8915 4e6c 01F4 brne .L702
8916 4e6e 4091 0000 lds r20,HoverGas
8917 4e72 5091 0000 lds r21,(HoverGas)+1
8918 4e76 57FF sbrs r21,7
8919 4e78 00C0 rjmp .L715
8920 4e7a 4D5F subi r20,lo8(-(3))
8921 4e7c 5F4F sbci r21,hi8(-(3))
8922 .L715:
8923 4e7e 5595 asr r21
8924 4e80 4795 ror r20
8925 4e82 5595 asr r21
8926 4e84 4795 ror r20
8927 4e86 8091 0000 lds r24,UBat
8928 4e8a 9091 0000 lds r25,(UBat)+1
8929 4e8e 2091 0000 lds r18,BattLowVoltageWarning
8930 4e92 3327 clr r19
8931 4e94 489F mul r20,r24
8932 4e96 F001 movw r30,r0
8933 4e98 499F mul r20,r25
8934 4e9a F00D add r31,r0
8935 4e9c 589F mul r21,r24
8936 4e9e F00D add r31,r0
8937 4ea0 1124 clr r1
8938 4ea2 CF01 movw r24,r30
8939 4ea4 B901 movw r22,r18
8940 4ea6 0E94 0000 call __divmodhi4
8941 4eaa 7093 0000 sts (StickGasHover)+1,r23
8942 4eae 6093 0000 sts StickGasHover,r22
8943 4eb2 6634 cpi r22,70
8944 4eb4 7105 cpc r23,__zero_reg__
8945 4eb6 04F4 brge .L716
8946 4eb8 86E4 ldi r24,lo8(70)
8947 4eba 90E0 ldi r25,hi8(70)
8948 4ebc 00C0 rjmp .L903
8949 .L716:
8950 4ebe 6739 cpi r22,151
8951 4ec0 7105 cpc r23,__zero_reg__
8952 4ec2 04F0 brlt .L702
8953 4ec4 86E9 ldi r24,lo8(150)
8954 4ec6 90E0 ldi r25,hi8(150)
8955 .L903:
8956 4ec8 9093 0000 sts (StickGasHover)+1,r25
8957 4ecc 8093 0000 sts StickGasHover,r24
8958 .L702:
8959 4ed0 8091 0000 lds r24,BaroExpandActive
8960 4ed4 9091 0000 lds r25,(BaroExpandActive)+1
8961 4ed8 892B or r24,r25
8962 4eda 01F0 breq .L720
8963 4edc 8091 0000 lds r24,HoehenWert
8964 4ee0 9091 0000 lds r25,(HoehenWert)+1
8965 4ee4 A091 0000 lds r26,(HoehenWert)+2
8966 4ee8 B091 0000 lds r27,(HoehenWert)+3
8967 4eec 8093 0000 sts SollHoehe,r24
8968 4ef0 9093 0000 sts (SollHoehe)+1,r25
8969 4ef4 A093 0000 sts (SollHoehe)+2,r26
8970 4ef8 B093 0000 sts (SollHoehe)+3,r27
8971 4efc 00C0 rjmp .L720
8972 .L677:
8973 4efe 8091 0000 lds r24,HoehenWert
8974 4f02 9091 0000 lds r25,(HoehenWert)+1
8975 4f06 A091 0000 lds r26,(HoehenWert)+2
8976 4f0a B091 0000 lds r27,(HoehenWert)+3
8977 4f0e 8059 subi r24,lo8(-(-400))
8978 4f10 9140 sbci r25,hi8(-(-400))
8979 4f12 A040 sbci r26,hlo8(-(-400))
8980 4f14 B040 sbci r27,hhi8(-(-400))
8981 4f16 8093 0000 sts SollHoehe,r24
8982 4f1a 9093 0000 sts (SollHoehe)+1,r25
8983 4f1e A093 0000 sts (SollHoehe)+2,r26
8984 4f22 B093 0000 sts (SollHoehe)+3,r27
8985 4f26 8091 0000 lds r24,EE_Parameter+22
8986 4f2a 8823 tst r24
8987 4f2c 01F0 breq .L721
8988 4f2e 9927 clr r25
8989 4f30 00C0 rjmp .L904
8990 .L721:
8991 4f32 88E7 ldi r24,lo8(120)
8992 4f34 90E0 ldi r25,hi8(120)
8993 .L904:
8994 4f36 9093 0000 sts (StickGasHover)+1,r25
8995 4f3a 8093 0000 sts StickGasHover,r24
8996 4f3e E980 ldd r14,Y+1
8997 4f40 FA80 ldd r15,Y+2
8998 4f42 F092 0000 sts (HoverGas)+1,r15
8999 4f46 E092 0000 sts HoverGas,r14
9000 4f4a 8EE2 ldi r24,lo8(46)
9001 4f4c 8093 0000 sts VarioCharacter,r24
9002 .L720:
9003 4f50 C090 0000 lds r12,HoverGas
9004 4f54 D090 0000 lds r13,(HoverGas)+1
9005 .L676:
9006 4f58 E090 0000 lds r14,HoehenWert
9007 4f5c F090 0000 lds r15,(HoehenWert)+1
9008 4f60 0091 0000 lds r16,(HoehenWert)+2
9009 4f64 1091 0000 lds r17,(HoehenWert)+3
9010 4f68 2091 0000 lds r18,SollHoehe
9011 4f6c 3091 0000 lds r19,(SollHoehe)+1
9012 4f70 4091 0000 lds r20,(SollHoehe)+2
9013 4f74 5091 0000 lds r21,(SollHoehe)+3
9014 4f78 2E15 cp r18,r14
9015 4f7a 3F05 cpc r19,r15
9016 4f7c 4007 cpc r20,r16
9017 4f7e 5107 cpc r21,r17
9018 4f80 04F0 brlt .L724
9019 4f82 8091 0000 lds r24,Parameter_ExtraConfig
9020 4f86 80FD sbrc r24,0
9021 4f88 00C0 rjmp .L782
9022 .L724:
9023 4f8a 8091 0000 lds r24,BaroExpandActive
9024 4f8e 9091 0000 lds r25,(BaroExpandActive)+1
9025 4f92 892B or r24,r25
9026 4f94 01F0 breq .L725
9027 4f96 C090 0000 lds r12,HoverGas
9028 4f9a D090 0000 lds r13,(HoverGas)+1
9029 4f9e 00E0 ldi r16,lo8(0)
9030 4fa0 10E0 ldi r17,hi8(0)
9031 4fa2 00C0 rjmp .L726
9032 .L725:
9033 4fa4 D801 movw r26,r16
9034 4fa6 C701 movw r24,r14
9035 4fa8 821B sub r24,r18
9036 4faa 930B sbc r25,r19
9037 4fac A40B sbc r26,r20
9038 4fae B50B sbc r27,r21
9039 4fb0 8093 0000 sts tmp_long.1,r24
9040 4fb4 9093 0000 sts (tmp_long.1)+1,r25
9041 4fb8 A093 0000 sts (tmp_long.1)+2,r26
9042 4fbc B093 0000 sts (tmp_long.1)+3,r27
9043 4fc0 8230 cpi r24,lo8(-32766)
9044 4fc2 00E8 ldi r16,hi8(-32766)
9045 4fc4 9007 cpc r25,r16
9046 4fc6 0FEF ldi r16,hlo8(-32766)
9047 4fc8 A007 cpc r26,r16
9048 4fca 0FEF ldi r16,hhi8(-32766)
9049 4fcc B007 cpc r27,r16
9050 4fce 04F4 brge .L727
9051 4fd0 81E0 ldi r24,lo8(-32767)
9052 4fd2 90E8 ldi r25,hi8(-32767)
9053 4fd4 AFEF ldi r26,hlo8(-32767)
9054 4fd6 BFEF ldi r27,hhi8(-32767)
9055 4fd8 00C0 rjmp .L905
9056 .L727:
9057 4fda 8F5F subi r24,lo8(32767)
9058 4fdc 9F47 sbci r25,hi8(32767)
9059 4fde A040 sbci r26,hlo8(32767)
9060 4fe0 B040 sbci r27,hhi8(32767)
9061 4fe2 04F0 brlt .L728
9062 4fe4 8FEF ldi r24,lo8(32767)
9063 4fe6 9FE7 ldi r25,hi8(32767)
9064 4fe8 A0E0 ldi r26,hlo8(32767)
9065 4fea B0E0 ldi r27,hhi8(32767)
9066 .L905:
9067 4fec 8093 0000 sts tmp_long.1,r24
9068 4ff0 9093 0000 sts (tmp_long.1)+1,r25
9069 4ff4 A093 0000 sts (tmp_long.1)+2,r26
9070 4ff8 B093 0000 sts (tmp_long.1)+3,r27
9071 .L728:
9072 4ffc 0091 0000 lds r16,tmp_long.1
9073 5000 1091 0000 lds r17,(tmp_long.1)+1
9074 5004 8091 0000 lds r24,Parameter_Hoehe_P
9075 5008 282F mov r18,r24
9076 500a 3327 clr r19
9077 500c 4427 clr r20
9078 500e 5527 clr r21
9079 5010 8091 0000 lds r24,tmp_long.1
9080 5014 9091 0000 lds r25,(tmp_long.1)+1
9081 5018 A091 0000 lds r26,(tmp_long.1)+2
9082 501c B091 0000 lds r27,(tmp_long.1)+3
9083 5020 BC01 movw r22,r24
9084 5022 CD01 movw r24,r26
9085 5024 0E94 0000 call __mulsi3
9086 5028 97FF sbrs r25,7
9087 502a 00C0 rjmp .L730
9088 502c 615E subi r22,lo8(-(31))
9089 502e 7F4F sbci r23,hi8(-(31))
9090 5030 8F4F sbci r24,hlo8(-(31))
9091 5032 9F4F sbci r25,hhi8(-(31))
9092 .L730:
9093 5034 25E0 ldi r18,5
9094 5036 9595 1: asr r25
9095 5038 8795 ror r24
9096 503a 7795 ror r23
9097 503c 6795 ror r22
9098 503e 2A95 dec r18
9099 5040 01F4 brne 1b
9100 5042 6093 0000 sts tmp_long.1,r22
9101 5046 7093 0000 sts (tmp_long.1)+1,r23
9102 504a 8093 0000 sts (tmp_long.1)+2,r24
9103 504e 9093 0000 sts (tmp_long.1)+3,r25
9104 5052 6530 cpi r22,lo8(-507)
9105 5054 2EEF ldi r18,hi8(-507)
9106 5056 7207 cpc r23,r18
9107 5058 2FEF ldi r18,hlo8(-507)
9108 505a 8207 cpc r24,r18
9109 505c 2FEF ldi r18,hhi8(-507)
9110 505e 9207 cpc r25,r18
9111 5060 04F4 brge .L731
9112 5062 84E0 ldi r24,lo8(-508)
9113 5064 9EEF ldi r25,hi8(-508)
9114 5066 AFEF ldi r26,hlo8(-508)
9115 5068 BFEF ldi r27,hhi8(-508)
9116 506a 00C0 rjmp .L906
9117 .L731:
9118 506c 6050 subi r22,lo8(1024)
9119 506e 7440 sbci r23,hi8(1024)
9120 5070 8040 sbci r24,hlo8(1024)
9121 5072 9040 sbci r25,hhi8(1024)
9122 5074 04F0 brlt .L732
9123 5076 80E0 ldi r24,lo8(1024)
9124 5078 94E0 ldi r25,hi8(1024)
9125 507a A0E0 ldi r26,hlo8(1024)
9126 507c B0E0 ldi r27,hhi8(1024)
9127 .L906:
9128 507e 8093 0000 sts tmp_long.1,r24
9129 5082 9093 0000 sts (tmp_long.1)+1,r25
9130 5086 A093 0000 sts (tmp_long.1)+2,r26
9131 508a B093 0000 sts (tmp_long.1)+3,r27
9132 .L732:
9133 508e 8090 0000 lds r8,tmp_long.1
9134 5092 9090 0000 lds r9,(tmp_long.1)+1
9135 5096 2091 0000 lds r18,VarioMeter
9136 509a 3091 0000 lds r19,(VarioMeter)+1
9137 509e 37FF sbrs r19,7
9138 50a0 00C0 rjmp .L734
9139 50a2 295F subi r18,lo8(-(7))
9140 50a4 3F4F sbci r19,hi8(-(7))
9141 .L734:
9142 50a6 83E0 ldi r24,3
9143 50a8 3595 1: asr r19
9144 50aa 2795 ror r18
9145 50ac 8A95 dec r24
9146 50ae 01F4 brne 1b
9147 50b0 4FEF ldi r20,hi8(-126)
9148 50b2 2238 cpi r18,lo8(-126)
9149 50b4 3407 cpc r19,r20
9150 50b6 04F4 brge .L735
9151 50b8 21E8 ldi r18,lo8(-127)
9152 50ba 3FEF ldi r19,hi8(-127)
9153 50bc 00C0 rjmp .L736
9154 .L735:
9155 50be 2038 cpi r18,128
9156 50c0 3105 cpc r19,__zero_reg__
9157 50c2 04F0 brlt .L736
9158 50c4 20E8 ldi r18,lo8(128)
9159 50c6 30E0 ldi r19,hi8(128)
9160 .L736:
9161 50c8 C901 movw r24,r18
9162 50ca AA27 clr r26
9163 50cc 97FD sbrc r25,7
9164 50ce A095 com r26
9165 50d0 BA2F mov r27,r26
9166 50d2 2091 0000 lds r18,Parameter_Luftdruck_D
9167 50d6 3327 clr r19
9168 50d8 4427 clr r20
9169 50da 5527 clr r21
9170 50dc BC01 movw r22,r24
9171 50de CD01 movw r24,r26
9172 50e0 0E94 0000 call __mulsi3
9173 50e4 97FF sbrs r25,7
9174 50e6 00C0 rjmp .L738
9175 50e8 6D5F subi r22,lo8(-(3))
9176 50ea 7F4F sbci r23,hi8(-(3))
9177 50ec 8F4F sbci r24,hlo8(-(3))
9178 50ee 9F4F sbci r25,hhi8(-(3))
9179 .L738:
9180 50f0 B2E0 ldi r27,2
9181 50f2 9595 1: asr r25
9182 50f4 8795 ror r24
9183 50f6 7795 ror r23
9184 50f8 6795 ror r22
9185 50fa BA95 dec r27
9186 50fc 01F4 brne 1b
9187 50fe 9B01 movw r18,r22
9188 5100 5FEF ldi r21,hi8(-255)
9189 5102 6130 cpi r22,lo8(-255)
9190 5104 7507 cpc r23,r21
9191 5106 04F4 brge .L739
9192 5108 20E0 ldi r18,lo8(-256)
9193 510a 3FEF ldi r19,hi8(-256)
9194 510c 00C0 rjmp .L740
9195 .L739:
9196 510e 6F3F cpi r22,255
9197 5110 7105 cpc r23,__zero_reg__
9198 5112 01F0 breq .L740
9199 5114 04F0 brlt .L740
9200 5116 20E0 ldi r18,lo8(256)
9201 5118 31E0 ldi r19,hi8(256)
9202 .L740:
9203 511a 8091 0000 lds r24,FC_StatusFlags
9204 511e 807C andi r24,lo8(-64)
9205 5120 01F0 breq .L742
9206 5122 C901 movw r24,r18
9207 5124 37FD sbrc r19,7
9208 5126 0396 adiw r24,3
9209 .L743:
9210 5128 9C01 movw r18,r24
9211 512a 3595 asr r19
9212 512c 2795 ror r18
9213 512e 3595 asr r19
9214 5130 2795 ror r18
9215 5132 00C0 rjmp .L744
9216 .L742:
9217 5134 8091 0000 lds r24,Parameter_ExtraConfig
9218 5138 80FF sbrs r24,0
9219 513a 00C0 rjmp .L744
9220 513c C901 movw r24,r18
9221 513e 37FD sbrc r19,7
9222 5140 0796 adiw r24,7
9223 .L746:
9224 5142 9C01 movw r18,r24
9225 5144 F3E0 ldi r31,3
9226 5146 3595 1: asr r19
9227 5148 2795 ror r18
9228 514a FA95 dec r31
9229 514c 01F4 brne 1b
9230 .L744:
9231 514e 820E add r8,r18
9232 5150 931E adc r9,r19
9233 .L726:
9234 5152 2091 0000 lds r18,Parameter_Hoehe_ACC_Wirkung
9235 5156 2223 tst r18
9236 5158 01F4 brne .+2
9237 515a 00C0 rjmp .L747
9238 515c 6091 0000 lds r22,Mess_Integral_Hoch
9239 5160 7091 0000 lds r23,(Mess_Integral_Hoch)+1
9240 5164 8091 0000 lds r24,(Mess_Integral_Hoch)+2
9241 5168 9091 0000 lds r25,(Mess_Integral_Hoch)+3
9242 516c 97FF sbrs r25,7
9243 516e 00C0 rjmp .L748
9244 5170 6158 subi r22,lo8(-(127))
9245 5172 7F4F sbci r23,hi8(-(127))
9246 5174 8F4F sbci r24,hlo8(-(127))
9247 5176 9F4F sbci r25,hhi8(-(127))
9248 .L748:
9249 5178 E7E0 ldi r30,7
9250 517a 9595 1: asr r25
9251 517c 8795 ror r24
9252 517e 7795 ror r23
9253 5180 6795 ror r22
9254 5182 EA95 dec r30
9255 5184 01F4 brne 1b
9256 5186 3327 clr r19
9257 5188 4427 clr r20
9258 518a 5527 clr r21
9259 518c 0E94 0000 call __mulsi3
9260 5190 97FF sbrs r25,7
9261 5192 00C0 rjmp .L749
9262 5194 615E subi r22,lo8(-(31))
9263 5196 7F4F sbci r23,hi8(-(31))
9264 5198 8F4F sbci r24,hlo8(-(31))
9265 519a 9F4F sbci r25,hhi8(-(31))
9266 .L749:
9267 519c 55E0 ldi r21,5
9268 519e 9595 1: asr r25
9269 51a0 8795 ror r24
9270 51a2 7795 ror r23
9271 51a4 6795 ror r22
9272 51a6 5A95 dec r21
9273 51a8 01F4 brne 1b
9274 51aa 6093 0000 sts tmp_long.1,r22
9275 51ae 7093 0000 sts (tmp_long.1)+1,r23
9276 51b2 8093 0000 sts (tmp_long.1)+2,r24
9277 51b6 9093 0000 sts (tmp_long.1)+3,r25
9278 51ba 6138 cpi r22,lo8(-127)
9279 51bc AFEF ldi r26,hi8(-127)
9280 51be 7A07 cpc r23,r26
9281 51c0 AFEF ldi r26,hlo8(-127)
9282 51c2 8A07 cpc r24,r26
9283 51c4 AFEF ldi r26,hhi8(-127)
9284 51c6 9A07 cpc r25,r26
9285 51c8 04F4 brge .L750
9286 51ca 80E8 ldi r24,lo8(-128)
9287 51cc 9FEF ldi r25,hi8(-128)
9288 51ce AFEF ldi r26,hlo8(-128)
9289 51d0 BFEF ldi r27,hhi8(-128)
9290 51d2 00C0 rjmp .L907
9291 .L750:
9292 51d4 6F3F cpi r22,lo8(255)
9293 51d6 7105 cpc r23,__zero_reg__
9294 51d8 8105 cpc r24,__zero_reg__
9295 51da 9105 cpc r25,__zero_reg__
9296 51dc 01F0 breq .L751
9297 51de 04F0 brlt .L751
9298 51e0 80E0 ldi r24,lo8(256)
9299 51e2 91E0 ldi r25,hi8(256)
9300 51e4 A0E0 ldi r26,hlo8(256)
9301 51e6 B0E0 ldi r27,hhi8(256)
9302 .L907:
9303 51e8 8093 0000 sts tmp_long.1,r24
9304 51ec 9093 0000 sts (tmp_long.1)+1,r25
9305 51f0 A093 0000 sts (tmp_long.1)+2,r26
9306 51f4 B093 0000 sts (tmp_long.1)+3,r27
9307 .L751:
9308 51f8 8091 0000 lds r24,tmp_long.1
9309 51fc 9091 0000 lds r25,(tmp_long.1)+1
9310 5200 880E add r8,r24
9311 5202 991E adc r9,r25
9312 .L747:
9313 5204 8091 0000 lds r24,Parameter_Hoehe_GPS_Z
9314 5208 282F mov r18,r24
9315 520a 3327 clr r19
9316 520c 8091 0000 lds r24,FromNaviCtrl_Value+4
9317 5210 9927 clr r25
9318 5212 87FD sbrc r24,7
9319 5214 9095 com r25
9320 5216 289F mul r18,r24
9321 5218 F001 movw r30,r0
9322 521a 299F mul r18,r25
9323 521c F00D add r31,r0
9324 521e 389F mul r19,r24
9325 5220 F00D add r31,r0
9326 5222 1124 clr r1
9327 5224 9F01 movw r18,r30
9328 5226 F7FF sbrs r31,7
9329 5228 00C0 rjmp .L753
9330 522a 2158 subi r18,lo8(-(127))
9331 522c 3F4F sbci r19,hi8(-(127))
9332 .L753:
9333 522e 220F lsl r18
9334 5230 232F mov r18,r19
9335 5232 221F rol r18
9336 5234 330B sbc r19,r19
9337 5236 FFEF ldi r31,hi8(-127)
9338 5238 2138 cpi r18,lo8(-127)
9339 523a 3F07 cpc r19,r31
9340 523c 04F4 brge .L754
9341 523e 20E8 ldi r18,lo8(-128)
9342 5240 3FEF ldi r19,hi8(-128)
9343 5242 00C0 rjmp .L755
9344 .L754:
9345 5244 2F3F cpi r18,255
9346 5246 3105 cpc r19,__zero_reg__
9347 5248 01F0 breq .L755
9348 524a 04F0 brlt .L755
9349 524c 20E0 ldi r18,lo8(256)
9350 524e 31E0 ldi r19,hi8(256)
9351 .L755:
9352 5250 820E add r8,r18
9353 5252 931E adc r9,r19
9354 5254 C401 movw r24,r8
9355 5256 AA27 clr r26
9356 5258 97FD sbrc r25,7
9357 525a A095 com r26
9358 525c BA2F mov r27,r26
9359 525e E090 0000 lds r14,HoverGas
9360 5262 F090 0000 lds r15,(HoverGas)+1
9361 5266 9701 movw r18,r14
9362 5268 4427 clr r20
9363 526a 37FD sbrc r19,7
9364 526c 4095 com r20
9365 526e 542F mov r21,r20
9366 5270 BC01 movw r22,r24
9367 5272 CD01 movw r24,r26
9368 5274 0E94 0000 call __mulsi3
9369 5278 97FF sbrs r25,7
9370 527a 00C0 rjmp .L757
9371 527c 6150 subi r22,lo8(-(511))
9372 527e 7E4F sbci r23,hi8(-(511))
9373 5280 8F4F sbci r24,hlo8(-(511))
9374 5282 9F4F sbci r25,hhi8(-(511))
9375 .L757:
9376 5284 29E0 ldi r18,9
9377 5286 9595 1: asr r25
9378 5288 8795 ror r24
9379 528a 7795 ror r23
9380 528c 6795 ror r22
9381 528e 2A95 dec r18
9382 5290 01F4 brne 1b
9383 5292 C61A sub r12,r22
9384 5294 D70A sbc r13,r23
9385 5296 8091 0000 lds r24,AltitudeSetpointTrimming
9386 529a 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
9387 529e 892B or r24,r25
9388 52a0 01F0 breq .+2
9389 52a2 00C0 rjmp .L758
9390 52a4 1E14 cp __zero_reg__,r14
9391 52a6 1F04 cpc __zero_reg__,r15
9392 52a8 04F0 brlt .+2
9393 52aa 00C0 rjmp .L758
9394 52ac 9801 movw r18,r16
9395 52ae 17FF sbrs r17,7
9396 52b0 00C0 rjmp .L759
9397 52b2 3095 com r19
9398 52b4 2195 neg r18
9399 52b6 3F4F sbci r19,lo8(-1)
9400 .L759:
9401 52b8 2D33 cpi r18,61
9402 52ba 3105 cpc r19,__zero_reg__
9403 52bc 00F4 brsh .L760
9404 52be 8091 0000 lds r24,HoverGasMin
9405 52c2 9091 0000 lds r25,(HoverGasMin)+1
9406 52c6 8C15 cp r24,r12
9407 52c8 9D05 cpc r25,r13
9408 52ca 04F4 brge .L909
9409 52cc 00C0 rjmp .L918
9410 .L760:
9411 52ce 2C53 subi r18,lo8(-(-60))
9412 52d0 3040 sbci r19,hi8(-(-60))
9413 52d2 85E0 ldi r24,5
9414 52d4 3695 1: lsr r19
9415 52d6 2795 ror r18
9416 52d8 8A95 dec r24
9417 52da 01F4 brne 1b
9418 52dc 2031 cpi r18,16
9419 52de 3105 cpc r19,__zero_reg__
9420 52e0 00F0 brlo .L765
9421 52e2 2FE0 ldi r18,lo8(15)
9422 52e4 30E0 ldi r19,hi8(15)
9423 .L765:
9424 52e6 4091 0000 lds r20,HoverGasMin
9425 52ea 5091 0000 lds r21,(HoverGasMin)+1
9426 52ee 1016 cp __zero_reg__,r16
9427 52f0 1106 cpc __zero_reg__,r17
9428 52f2 04F4 brge .L766
9429 52f4 80E1 ldi r24,lo8(16)
9430 52f6 90E0 ldi r25,hi8(16)
9431 52f8 821B sub r24,r18
9432 52fa 930B sbc r25,r19
9433 52fc 489F mul r20,r24
9434 52fe 9001 movw r18,r0
9435 5300 499F mul r20,r25
9436 5302 300D add r19,r0
9437 5304 589F mul r21,r24
9438 5306 300D add r19,r0
9439 5308 1124 clr r1
9440 530a B4E0 ldi r27,4
9441 530c 3695 1: lsr r19
9442 530e 2795 ror r18
9443 5310 BA95 dec r27
9444 5312 01F4 brne 1b
9445 5314 2C15 cp r18,r12
9446 5316 3D05 cpc r19,r13
9447 5318 00F4 brsh .L908
9448 .L918:
9449 531a 8091 0000 lds r24,HoverGasMax
9450 531e 9091 0000 lds r25,(HoverGasMax)+1
9451 5322 C816 cp r12,r24
9452 5324 D906 cpc r13,r25
9453 5326 04F0 brlt .L758
9454 .L909:
9455 5328 6C01 movw r12,r24
9456 532a 00C0 rjmp .L758
9457 .L766:
9458 532c 205F subi r18,lo8(-(16))
9459 532e 3F4F sbci r19,hi8(-(16))
9460 5330 8091 0000 lds r24,HoverGasMax
9461 5334 9091 0000 lds r25,(HoverGasMax)+1
9462 5338 829F mul r24,r18
9463 533a 8001 movw r16,r0
9464 533c 839F mul r24,r19
9465 533e 100D add r17,r0
9466 5340 929F mul r25,r18
9467 5342 100D add r17,r0
9468 5344 1124 clr r1
9469 5346 9801 movw r18,r16
9470 5348 A4E0 ldi r26,4
9471 534a 3695 1: lsr r19
9472 534c 2795 ror r18
9473 534e AA95 dec r26
9474 5350 01F4 brne 1b
9475 5352 4C15 cp r20,r12
9476 5354 5D05 cpc r21,r13
9477 5356 04F0 brlt .L771
9478 5358 6A01 movw r12,r20
9479 535a 00C0 rjmp .L758
9480 .L771:
9481 535c C216 cp r12,r18
9482 535e D306 cpc r13,r19
9483 5360 00F0 brlo .L758
9484 .L908:
9485 5362 6901 movw r12,r18
9486 .L758:
9487 5364 C601 movw r24,r12
9488 5366 AA27 clr r26
9489 5368 97FD sbrc r25,7
9490 536a A095 com r26
9491 536c BA2F mov r27,r26
9492 536e FDE0 ldi r31,13
9493 5370 880F 1: lsl r24
9494 5372 991F rol r25
9495 5374 AA1F rol r26
9496 5376 BB1F rol r27
9497 5378 FA95 dec r31
9498 537a 01F4 brne 1b
9499 537c 9501 movw r18,r10
9500 537e 4427 clr r20
9501 5380 37FD sbrc r19,7
9502 5382 4095 com r20
9503 5384 542F mov r21,r20
9504 5386 BC01 movw r22,r24
9505 5388 CD01 movw r24,r26
9506 538a 0E94 0000 call __divmodsi4
9507 538e 2093 0000 sts tmp_long2.2,r18
9508 5392 3093 0000 sts (tmp_long2.2)+1,r19
9509 5396 4093 0000 sts (tmp_long2.2)+2,r20
9510 539a 5093 0000 sts (tmp_long2.2)+3,r21
9511 539e C090 0000 lds r12,tmp_long2.2
9512 53a2 D090 0000 lds r13,(tmp_long2.2)+1
9513 53a6 8091 0000 lds r24,FilterHCGas.22
9514 53aa 9091 0000 lds r25,(FilterHCGas.22)+1
9515 53ae 9C01 movw r18,r24
9516 53b0 220F lsl r18
9517 53b2 331F rol r19
9518 53b4 280F add r18,r24
9519 53b6 391F adc r19,r25
9520 53b8 2C0D add r18,r12
9521 53ba 3D1D adc r19,r13
9522 53bc 37FF sbrs r19,7
9523 53be 00C0 rjmp .L774
9524 53c0 2D5F subi r18,lo8(-(3))
9525 53c2 3F4F sbci r19,hi8(-(3))
9526 .L774:
9527 53c4 A901 movw r20,r18
9528 53c6 5595 asr r21
9529 53c8 4795 ror r20
9530 53ca 5595 asr r21
9531 53cc 4795 ror r20
9532 53ce 5093 0000 sts (FilterHCGas.22)+1,r21
9533 53d2 4093 0000 sts FilterHCGas.22,r20
9534 53d6 8091 0000 lds r24,EE_Parameter+14
9535 53da 282F mov r18,r24
9536 53dc 3327 clr r19
9537 53de 220F lsl r18
9538 53e0 331F rol r19
9539 53e2 220F lsl r18
9540 53e4 331F rol r19
9541 53e6 2417 cp r18,r20
9542 53e8 3507 cpc r19,r21
9543 53ea 04F4 brge .L910
9544 53ec 8091 0000 lds r24,MAX_GAS
9545 53f0 282F mov r18,r24
9546 53f2 3327 clr r19
9547 53f4 220F lsl r18
9548 53f6 331F rol r19
9549 53f8 220F lsl r18
9550 53fa 331F rol r19
9551 53fc 2055 subi r18,lo8(-(-80))
9552 53fe 3040 sbci r19,hi8(-(-80))
9553 5400 4217 cp r20,r18
9554 5402 5307 cpc r21,r19
9555 5404 04F0 brlt .L776
9556 .L910:
9557 5406 3093 0000 sts (FilterHCGas.22)+1,r19
9558 540a 2093 0000 sts FilterHCGas.22,r18
9559 .L776:
9560 540e 8091 0000 lds r24,Parameter_ExtraConfig
9561 5412 80FF sbrs r24,0
9562 5414 00C0 rjmp .L778
9563 5416 8091 0000 lds r24,FilterHCGas.22
9564 541a 9091 0000 lds r25,(FilterHCGas.22)+1
9565 541e 2981 ldd r18,Y+1
9566 5420 3A81 ldd r19,Y+2
9567 5422 8217 cp r24,r18
9568 5424 9307 cpc r25,r19
9569 5426 04F0 brlt .L779
9570 5428 3093 0000 sts (FilterHCGas.22)+1,r19
9571 542c 2093 0000 sts FilterHCGas.22,r18
9572 .L779:
9573 5430 4091 0000 lds r20,FilterHCGas.22
9574 5434 5091 0000 lds r21,(FilterHCGas.22)+1
9575 5438 5A83 std Y+2,r21
9576 543a 4983 std Y+1,r20
9577 543c 00C0 rjmp .L782
9578 .L778:
9579 543e 2981 ldd r18,Y+1
9580 5440 3A81 ldd r19,Y+2
9581 5442 2E19 sub r18,r14
9582 5444 3F09 sbc r19,r15
9583 5446 37FF sbrs r19,7
9584 5448 00C0 rjmp .L781
9585 544a 2D5F subi r18,lo8(-(3))
9586 544c 3F4F sbci r19,hi8(-(3))
9587 .L781:
9588 544e 3595 asr r19
9589 5450 2795 ror r18
9590 5452 3595 asr r19
9591 5454 2795 ror r18
9592 5456 6091 0000 lds r22,FilterHCGas.22
9593 545a 7091 0000 lds r23,(FilterHCGas.22)+1
9594 545e 620F add r22,r18
9595 5460 731F adc r23,r19
9596 5462 7A83 std Y+2,r23
9597 5464 6983 std Y+1,r22
9598 5466 00C0 rjmp .L782
9599 .L673:
9600 5468 8091 0000 lds r24,EE_Parameter+22
9601 546c 8823 tst r24
9602 546e 01F4 brne .L783
9603 5470 6091 0000 lds r22,HoverGas
9604 5474 7091 0000 lds r23,(HoverGas)+1
9605 5478 77FF sbrs r23,7
9606 547a 00C0 rjmp .L784
9607 547c 6D5F subi r22,lo8(-(3))
9608 547e 7F4F sbci r23,hi8(-(3))
9609 .L784:
9610 5480 7595 asr r23
9611 5482 6795 ror r22
9612 5484 7595 asr r23
9613 5486 6795 ror r22
9614 5488 4091 0000 lds r20,UBat
9615 548c 5091 0000 lds r21,(UBat)+1
9616 5490 8091 0000 lds r24,BattLowVoltageWarning
9617 5494 282F mov r18,r24
9618 5496 3327 clr r19
9619 5498 649F mul r22,r20
9620 549a C001 movw r24,r0
9621 549c 659F mul r22,r21
9622 549e 900D add r25,r0
9623 54a0 749F mul r23,r20
9624 54a2 900D add r25,r0
9625 54a4 1124 clr r1
9626 54a6 B901 movw r22,r18
9627 54a8 0E94 0000 call __divmodhi4
9628 54ac CB01 movw r24,r22
9629 54ae 00C0 rjmp .L911
9630 .L783:
9631 54b0 9927 clr r25
9632 .L911:
9633 54b2 9093 0000 sts (StickGasHover)+1,r25
9634 54b6 8093 0000 sts StickGasHover,r24
9635 54ba 8091 0000 lds r24,StickGasHover
9636 54be 9091 0000 lds r25,(StickGasHover)+1
9637 54c2 8734 cpi r24,71
9638 54c4 9105 cpc r25,__zero_reg__
9639 54c6 04F4 brge .L786
9640 54c8 86E4 ldi r24,lo8(70)
9641 54ca 90E0 ldi r25,hi8(70)
9642 54cc 00C0 rjmp .L912
9643 .L786:
9644 54ce 8639 cpi r24,150
9645 54d0 9105 cpc r25,__zero_reg__
9646 54d2 04F0 brlt .L787
9647 54d4 86E9 ldi r24,lo8(150)
9648 54d6 90E0 ldi r25,hi8(150)
9649 .L912:
9650 54d8 9093 0000 sts (StickGasHover)+1,r25
9651 54dc 8093 0000 sts StickGasHover,r24
9652 .L787:
9653 54e0 8981 ldd r24,Y+1
9654 54e2 9A81 ldd r25,Y+2
9655 54e4 9093 0000 sts (FilterHCGas.22)+1,r25
9656 54e8 8093 0000 sts FilterHCGas.22,r24
9657 54ec 8091 0000 lds r24,FC_StatusFlags
9658 54f0 806C ori r24,lo8(-64)
9659 54f2 8093 0000 sts FC_StatusFlags,r24
9660 54f6 8091 0000 lds r24,FC_StatusFlags2
9661 54fa 8D7F andi r24,lo8(-3)
9662 54fc 8093 0000 sts FC_StatusFlags2,r24
9663 .L782:
9664 5500 8091 0000 lds r24,FC_StatusFlags
9665 5504 9927 clr r25
9666 5506 9C01 movw r18,r24
9667 5508 2270 andi r18,lo8(2)
9668 550a 3070 andi r19,hi8(2)
9669 550c 81FF sbrs r24,1
9670 550e 00C0 rjmp .L789
9671 5510 8091 0000 lds r24,HoverGasFilter.23
9672 5514 9091 0000 lds r25,(HoverGasFilter.23)+1
9673 5518 A091 0000 lds r26,(HoverGasFilter.23)+2
9674 551c B091 0000 lds r27,(HoverGasFilter.23)+3
9675 5520 0097 sbiw r24,0
9676 5522 A105 cpc r26,__zero_reg__
9677 5524 B105 cpc r27,__zero_reg__
9678 5526 01F0 breq .L791
9679 5528 8091 0000 lds r24,StartTrigger
9680 552c 8130 cpi r24,lo8(1)
9681 552e 01F4 brne .L790
9682 .L791:
9683 5530 E981 ldd r30,Y+1
9684 5532 FA81 ldd r31,Y+2
9685 5534 CF01 movw r24,r30
9686 5536 AA27 clr r26
9687 5538 97FD sbrc r25,7
9688 553a A095 com r26
9689 553c BA2F mov r27,r26
9690 553e 1EE0 ldi r17,14
9691 5540 880F 1: lsl r24
9692 5542 991F rol r25
9693 5544 AA1F rol r26
9694 5546 BB1F rol r27
9695 5548 1A95 dec r17
9696 554a 01F4 brne 1b
9697 554c 8093 0000 sts HoverGasFilter.23,r24
9698 5550 9093 0000 sts (HoverGasFilter.23)+1,r25
9699 5554 A093 0000 sts (HoverGasFilter.23)+2,r26
9700 5558 B093 0000 sts (HoverGasFilter.23)+3,r27
9701 .L790:
9702 555c 8091 0000 lds r24,StartTrigger
9703 5560 8130 cpi r24,lo8(1)
9704 5562 01F4 brne .L792
9705 5564 82E0 ldi r24,lo8(2)
9706 5566 8093 0000 sts StartTrigger,r24
9707 .L792:
9708 556a E980 ldd r14,Y+1
9709 556c FA80 ldd r15,Y+2
9710 556e C701 movw r24,r14
9711 5570 AA27 clr r26
9712 5572 97FD sbrc r25,7
9713 5574 A095 com r26
9714 5576 BA2F mov r27,r26
9715 5578 9501 movw r18,r10
9716 557a 4427 clr r20
9717 557c 37FD sbrc r19,7
9718 557e 4095 com r20
9719 5580 542F mov r21,r20
9720 5582 BC01 movw r22,r24
9721 5584 CD01 movw r24,r26
9722 5586 0E94 0000 call __mulsi3
9723 558a DC01 movw r26,r24
9724 558c CB01 movw r24,r22
9725 558e 8093 0000 sts tmp_long2.2,r24
9726 5592 9093 0000 sts (tmp_long2.2)+1,r25
9727 5596 A093 0000 sts (tmp_long2.2)+2,r26
9728 559a B093 0000 sts (tmp_long2.2)+3,r27
9729 559e B7FF sbrs r27,7
9730 55a0 00C0 rjmp .L793
9731 55a2 8150 subi r24,lo8(-(8191))
9732 55a4 904E sbci r25,hi8(-(8191))
9733 55a6 AF4F sbci r26,hlo8(-(8191))
9734 55a8 BF4F sbci r27,hhi8(-(8191))
9735 .L793:
9736 55aa 7C01 movw r14,r24
9737 55ac 8D01 movw r16,r26
9738 55ae ADE0 ldi r26,13
9739 55b0 1595 1: asr r17
9740 55b2 0795 ror r16
9741 55b4 F794 ror r15
9742 55b6 E794 ror r14
9743 55b8 AA95 dec r26
9744 55ba 01F4 brne 1b
9745 55bc E092 0000 sts tmp_long2.2,r14
9746 55c0 F092 0000 sts (tmp_long2.2)+1,r15
9747 55c4 0093 0000 sts (tmp_long2.2)+2,r16
9748 55c8 1093 0000 sts (tmp_long2.2)+3,r17
9749 55cc 6091 0000 lds r22,modell_fliegt
9750 55d0 7091 0000 lds r23,(modell_fliegt)+1
9751 55d4 2FE0 ldi r18,hi8(4000)
9752 55d6 603A cpi r22,lo8(4000)
9753 55d8 7207 cpc r23,r18
9754 55da 00F4 brsh .L794
9755 55dc 8091 0000 lds r24,HoverGasFilter.23
9756 55e0 9091 0000 lds r25,(HoverGasFilter.23)+1
9757 55e4 A091 0000 lds r26,(HoverGasFilter.23)+2
9758 55e8 B091 0000 lds r27,(HoverGasFilter.23)+3
9759 55ec 9C01 movw r18,r24
9760 55ee AD01 movw r20,r26
9761 55f0 FAE0 ldi r31,10
9762 55f2 5695 1: lsr r21
9763 55f4 4795 ror r20
9764 55f6 3795 ror r19
9765 55f8 2795 ror r18
9766 55fa FA95 dec r31
9767 55fc 01F4 brne 1b
9768 55fe 821B sub r24,r18
9769 5600 930B sbc r25,r19
9770 5602 A40B sbc r26,r20
9771 5604 B50B sbc r27,r21
9772 5606 A801 movw r20,r16
9773 5608 9701 movw r18,r14
9774 560a E4E0 ldi r30,4
9775 560c 220F 1: lsl r18
9776 560e 331F rol r19
9777 5610 441F rol r20
9778 5612 551F rol r21
9779 5614 EA95 dec r30
9780 5616 01F4 brne 1b
9781 5618 820F add r24,r18
9782 561a 931F adc r25,r19
9783 561c A41F adc r26,r20
9784 561e B51F adc r27,r21
9785 5620 8093 0000 sts HoverGasFilter.23,r24
9786 5624 9093 0000 sts (HoverGasFilter.23)+1,r25
9787 5628 A093 0000 sts (HoverGasFilter.23)+2,r26
9788 562c B093 0000 sts (HoverGasFilter.23)+3,r27
9789 .L794:
9790 5630 6054 subi r22,lo8(8000)
9791 5632 7F41 sbci r23,hi8(8000)
9792 5634 00F4 brsh .L795
9793 5636 8091 0000 lds r24,HoverGasFilter.23
9794 563a 9091 0000 lds r25,(HoverGasFilter.23)+1
9795 563e A091 0000 lds r26,(HoverGasFilter.23)+2
9796 5642 B091 0000 lds r27,(HoverGasFilter.23)+3
9797 5646 9C01 movw r18,r24
9798 5648 AD01 movw r20,r26
9799 564a 6CE0 ldi r22,12
9800 564c 5695 1: lsr r21
9801 564e 4795 ror r20
9802 5650 3795 ror r19
9803 5652 2795 ror r18
9804 5654 6A95 dec r22
9805 5656 01F4 brne 1b
9806 5658 821B sub r24,r18
9807 565a 930B sbc r25,r19
9808 565c A40B sbc r26,r20
9809 565e B50B sbc r27,r21
9810 5660 A801 movw r20,r16
9811 5662 9701 movw r18,r14
9812 5664 F2E0 ldi r31,2
9813 5666 220F 1: lsl r18
9814 5668 331F rol r19
9815 566a 441F rol r20
9816 566c 551F rol r21
9817 566e FA95 dec r31
9818 5670 01F4 brne 1b
9819 5672 820F add r24,r18
9820 5674 931F adc r25,r19
9821 5676 A41F adc r26,r20
9822 5678 B51F adc r27,r21
9823 567a 00C0 rjmp .L913
9824 .L795:
9825 567c 8091 0000 lds r24,VarioMeter
9826 5680 9091 0000 lds r25,(VarioMeter)+1
9827 5684 8091 0000 lds r24,VarioMeter
9828 5688 9091 0000 lds r25,(VarioMeter)+1
9829 568c 97FF sbrs r25,7
9830 568e 00C0 rjmp .L798
9831 5690 9095 com r25
9832 5692 8195 neg r24
9833 5694 9F4F sbci r25,lo8(-1)
9834 .L798:
9835 5696 8436 cpi r24,100
9836 5698 9105 cpc r25,__zero_reg__
9837 569a 04F4 brge .L796
9838 569c 8091 0000 lds r24,HoehenWert
9839 56a0 9091 0000 lds r25,(HoehenWert)+1
9840 56a4 2091 0000 lds r18,SollHoehe
9841 56a8 3091 0000 lds r19,(SollHoehe)+1
9842 56ac 821B sub r24,r18
9843 56ae 930B sbc r25,r19
9844 56b0 8150 subi r24,lo8(-(255))
9845 56b2 9F4F sbci r25,hi8(-(255))
9846 56b4 8F5F subi r24,lo8(511)
9847 56b6 9140 sbci r25,hi8(511)
9848 56b8 00F4 brsh .L796
9849 56ba 8091 0000 lds r24,HoverGasFilter.23
9850 56be 9091 0000 lds r25,(HoverGasFilter.23)+1
9851 56c2 A091 0000 lds r26,(HoverGasFilter.23)+2
9852 56c6 B091 0000 lds r27,(HoverGasFilter.23)+3
9853 56ca 9C01 movw r18,r24
9854 56cc AD01 movw r20,r26
9855 56ce EEE0 ldi r30,14
9856 56d0 5695 1: lsr r21
9857 56d2 4795 ror r20
9858 56d4 3795 ror r19
9859 56d6 2795 ror r18
9860 56d8 EA95 dec r30
9861 56da 01F4 brne 1b
9862 56dc 821B sub r24,r18
9863 56de 930B sbc r25,r19
9864 56e0 A40B sbc r26,r20
9865 56e2 B50B sbc r27,r21
9866 56e4 8E0D add r24,r14
9867 56e6 9F1D adc r25,r15
9868 56e8 A01F adc r26,r16
9869 56ea B11F adc r27,r17
9870 .L913:
9871 56ec 8093 0000 sts HoverGasFilter.23,r24
9872 56f0 9093 0000 sts (HoverGasFilter.23)+1,r25
9873 56f4 A093 0000 sts (HoverGasFilter.23)+2,r26
9874 56f8 B093 0000 sts (HoverGasFilter.23)+3,r27
9875 .L796:
9876 56fc 8091 0000 lds r24,HoverGasFilter.23
9877 5700 9091 0000 lds r25,(HoverGasFilter.23)+1
9878 5704 A091 0000 lds r26,(HoverGasFilter.23)+2
9879 5708 B091 0000 lds r27,(HoverGasFilter.23)+3
9880 570c 7EE0 ldi r23,14
9881 570e B695 1: lsr r27
9882 5710 A795 ror r26
9883 5712 9795 ror r25
9884 5714 8795 ror r24
9885 5716 7A95 dec r23
9886 5718 01F4 brne 1b
9887 571a 9093 0000 sts (HoverGas)+1,r25
9888 571e 8093 0000 sts HoverGas,r24
9889 5722 4091 0000 lds r20,EE_Parameter+20
9890 5726 4423 tst r20
9891 5728 01F0 breq .L799
9892 572a 5527 clr r21
9893 572c 9C01 movw r18,r24
9894 572e BA01 movw r22,r20
9895 5730 0E94 0000 call __divmodhi4
9896 5734 C901 movw r24,r18
9897 5736 861B sub r24,r22
9898 5738 970B sbc r25,r23
9899 573a 9093 0000 sts (HoverGasMin)+1,r25
9900 573e 8093 0000 sts HoverGasMin,r24
9901 5742 260F add r18,r22
9902 5744 371F adc r19,r23
9903 5746 3093 0000 sts (HoverGasMax)+1,r19
9904 574a 2093 0000 sts HoverGasMax,r18
9905 574e 00C0 rjmp .L802
9906 .L799:
9907 5750 1092 0000 sts (HoverGasMin)+1,__zero_reg__
9908 5754 1092 0000 sts HoverGasMin,__zero_reg__
9909 5758 8FEF ldi r24,lo8(1023)
9910 575a 93E0 ldi r25,hi8(1023)
9911 575c 9093 0000 sts (HoverGasMax)+1,r25
9912 5760 8093 0000 sts HoverGasMax,r24
9913 5764 00C0 rjmp .L802
9914 .L789:
9915 5766 1092 0000 sts StartTrigger,__zero_reg__
9916 576a 1092 0000 sts HoverGasFilter.23,__zero_reg__
9917 576e 1092 0000 sts (HoverGasFilter.23)+1,__zero_reg__
9918 5772 1092 0000 sts (HoverGasFilter.23)+2,__zero_reg__
9919 5776 1092 0000 sts (HoverGasFilter.23)+3,__zero_reg__
9920 577a 3093 0000 sts (HoverGas)+1,r19
9921 577e 2093 0000 sts HoverGas,r18
9922 5782 00C0 rjmp .L802
9923 .L653:
9924 5784 8091 0000 lds r24,FC_StatusFlags
9925 5788 806C ori r24,lo8(-64)
9926 578a 8093 0000 sts FC_StatusFlags,r24
9927 .L802:
9928 578e 8091 0000 lds r24,NC_To_FC_Flags
9929 5792 81FF sbrs r24,1
9930 5794 00C0 rjmp .L803
9931 5796 8981 ldd r24,Y+1
9932 5798 9A81 ldd r25,Y+2
9933 579a 97FD sbrc r25,7
9934 579c 0396 adiw r24,3
9935 .L805:
9936 579e 9595 asr r25
9937 57a0 8795 ror r24
9938 57a2 9595 asr r25
9939 57a4 8795 ror r24
9940 57a6 2091 0000 lds r18,HooverGasEmergencyPercent
9941 57aa 3091 0000 lds r19,(HooverGasEmergencyPercent)+1
9942 57ae 2817 cp r18,r24
9943 57b0 3907 cpc r19,r25
9944 57b2 00F4 brsh .L804
9945 57b4 8091 0000 lds r24,HoverGas
9946 57b8 9091 0000 lds r25,(HoverGas)+1
9947 57bc 892B or r24,r25
9948 57be 01F0 breq .L804
9949 57c0 220F lsl r18
9950 57c2 331F rol r19
9951 57c4 220F lsl r18
9952 57c6 331F rol r19
9953 57c8 3A83 std Y+2,r19
9954 57ca 2983 std Y+1,r18
9955 .L804:
9956 57cc 8091 0000 lds r24,HoehenWert
9957 57d0 9091 0000 lds r25,(HoehenWert)+1
9958 57d4 A091 0000 lds r26,(HoehenWert)+2
9959 57d8 B091 0000 lds r27,(HoehenWert)+3
9960 57dc 8093 0000 sts SollHoehe,r24
9961 57e0 9093 0000 sts (SollHoehe)+1,r25
9962 57e4 A093 0000 sts (SollHoehe)+2,r26
9963 57e8 B093 0000 sts (SollHoehe)+3,r27
9964 57ec 88E9 ldi r24,lo8(15000)
9965 57ee 9AE3 ldi r25,hi8(15000)
9966 57f0 9093 0000 sts (beeptime)+1,r25
9967 57f4 8093 0000 sts beeptime,r24
9968 57f8 80E0 ldi r24,lo8(3584)
9969 57fa 9EE0 ldi r25,hi8(3584)
9970 57fc 9093 0000 sts (BeepMuster)+1,r25
9971 5800 8093 0000 sts BeepMuster,r24
9972 .L803:
9973 5804 2091 0000 lds r18,MIN_GAS
9974 5808 822F mov r24,r18
9975 580a 9927 clr r25
9976 580c 880F lsl r24
9977 580e 991F rol r25
9978 5810 880F lsl r24
9979 5812 991F rol r25
9980 5814 8896 adiw r24,40
9981 5816 6981 ldd r22,Y+1
9982 5818 7A81 ldd r23,Y+2
9983 581a 8617 cp r24,r22
9984 581c 9707 cpc r25,r23
9985 581e 04F0 brlt .L806
9986 5820 9A83 std Y+2,r25
9987 5822 8983 std Y+1,r24
9988 .L806:
9989 5824 7091 0000 lds r23,MAX_GAS
9990 5828 7D8B std Y+21,r23
9991 582a 872F mov r24,r23
9992 582c 9927 clr r25
9993 582e 880F lsl r24
9994 5830 991F rol r25
9995 5832 880F lsl r24
9996 5834 991F rol r25
9997 5836 8055 subi r24,lo8(-(-80))
9998 5838 9040 sbci r25,hi8(-(-80))
9999 583a A981 ldd r26,Y+1
10000 583c BA81 ldd r27,Y+2
10001 583e 8A17 cp r24,r26
10002 5840 9B07 cpc r25,r27
10003 5842 04F4 brge .L807
10004 5844 9A83 std Y+2,r25
10005 5846 8983 std Y+1,r24
10006 .L807:
10007 5848 8091 0000 lds r24,MissingMotor
10008 584c 8823 tst r24
10009 584e 01F4 brne .L809
10010 5850 8091 0000 lds r24,Capacity+6
10011 5854 8F3F cpi r24,lo8(-1)
10012 5856 01F4 brne .L809
10013 5858 8091 0000 lds r24,NC_ErrorCode
10014 585c 8823 tst r24
10015 585e 01F0 breq .L808
10016 .L809:
10017 5860 8091 0000 lds r24,modell_fliegt
10018 5864 9091 0000 lds r25,(modell_fliegt)+1
10019 5868 0297 sbiw r24,2
10020 586a C097 sbiw r24,48
10021 586c 00F4 brsh .L808
10022 586e E981 ldd r30,Y+1
10023 5870 FA81 ldd r31,Y+2
10024 5872 1E16 cp __zero_reg__,r30
10025 5874 1F06 cpc __zero_reg__,r31
10026 5876 04F4 brge .L808
10027 5878 81E0 ldi r24,lo8(1)
10028 587a 90E0 ldi r25,hi8(1)
10029 587c 9093 0000 sts (modell_fliegt)+1,r25
10030 5880 8093 0000 sts modell_fliegt,r24
10031 5884 E22E mov r14,r18
10032 5886 FF24 clr r15
10033 5888 EE0C lsl r14
10034 588a FF1C rol r15
10035 588c EE0C lsl r14
10036 588e FF1C rol r15
10037 5890 8701 movw r16,r14
10038 5892 085D subi r16,lo8(-(40))
10039 5894 1F4F sbci r17,hi8(-(40))
10040 5896 1A83 std Y+2,r17
10041 5898 0983 std Y+1,r16
10042 .L808:
10043 589a 2981 ldd r18,Y+1
10044 589c 3A81 ldd r19,Y+2
10045 589e 3093 0000 sts (DebugOut+16)+1,r19
10046 58a2 2093 0000 sts DebugOut+16,r18
10047 58a6 8091 0000 lds r24,sollGier.0
10048 58aa 9091 0000 lds r25,(sollGier.0)+1
10049 58ae A091 0000 lds r26,(sollGier.0)+2
10050 58b2 B091 0000 lds r27,(sollGier.0)+3
10051 58b6 12E0 ldi r17,2
10052 58b8 880F 1: lsl r24
10053 58ba 991F rol r25
10054 58bc AA1F rol r26
10055 58be BB1F rol r27
10056 58c0 1A95 dec r17
10057 58c2 01F4 brne 1b
10058 58c4 0091 0000 lds r16,MesswertGier
10059 58c8 1091 0000 lds r17,(MesswertGier)+1
10060 58cc 081B sub r16,r24
10061 58ce 190B sbc r17,r25
10062 58d0 213A cpi r18,161
10063 58d2 3105 cpc r19,__zero_reg__
10064 58d4 04F0 brlt .L811
10065 58d6 C901 movw r24,r18
10066 58d8 37FD sbrc r19,7
10067 58da 0196 adiw r24,1
10068 .L813:
10069 58dc 9595 asr r25
10070 58de 8795 ror r24
10071 58e0 8017 cp r24,r16
10072 58e2 9107 cpc r25,r17
10073 58e4 04F4 brge .L812
10074 58e6 8C01 movw r16,r24
10075 .L812:
10076 58e8 9095 com r25
10077 58ea 8195 neg r24
10078 58ec 9F4F sbci r25,lo8(-1)
10079 58ee 0817 cp r16,r24
10080 58f0 1907 cpc r17,r25
10081 58f2 04F4 brge .L818
10082 58f4 8C01 movw r16,r24
10083 58f6 00C0 rjmp .L818
10084 .L811:
10085 58f8 0135 cpi r16,81
10086 58fa 1105 cpc r17,__zero_reg__
10087 58fc 04F0 brlt .L819
10088 58fe 00E5 ldi r16,lo8(80)
10089 5900 10E0 ldi r17,hi8(80)
10090 .L819:
10091 5902 3FEF ldi r19,hi8(-80)
10092 5904 003B cpi r16,lo8(-80)
10093 5906 1307 cpc r17,r19
10094 5908 04F4 brge .L818
10095 590a 00EB ldi r16,lo8(-80)
10096 590c 1FEF ldi r17,hi8(-80)
10097 .L818:
10098 590e 4D89 ldd r20,Y+21
10099 5910 242F mov r18,r20
10100 5912 3327 clr r19
10101 5914 220F lsl r18
10102 5916 331F rol r19
10103 5918 220F lsl r18
10104 591a 331F rol r19
10105 591c C901 movw r24,r18
10106 591e 6981 ldd r22,Y+1
10107 5920 7A81 ldd r23,Y+2
10108 5922 861B sub r24,r22
10109 5924 970B sbc r25,r23
10110 5926 8017 cp r24,r16
10111 5928 9107 cpc r25,r17
10112 592a 04F4 brge .L821
10113 592c 8C01 movw r16,r24
10114 .L821:
10115 592e 8981 ldd r24,Y+1
10116 5930 9A81 ldd r25,Y+2
10117 5932 821B sub r24,r18
10118 5934 930B sbc r25,r19
10119 5936 0817 cp r16,r24
10120 5938 1907 cpc r17,r25
10121 593a 04F4 brge .L822
10122 593c 8C01 movw r16,r24
10123 .L822:
10124 593e 8091 0000 lds r24,MesswertNick
10125 5942 9091 0000 lds r25,(MesswertNick)+1
10126 5946 6091 0000 lds r22,StickNick
10127 594a 7091 0000 lds r23,(StickNick)+1
10128 594e 861B sub r24,r22
10129 5950 970B sbc r25,r23
10130 5952 9093 0000 sts (DiffNick)+1,r25
10131 5956 8093 0000 sts DiffNick,r24
10132 595a D090 0000 lds r13,IntegralFaktor
10133 595e 2091 0000 lds r18,SummeNick
10134 5962 3091 0000 lds r19,(SummeNick)+1
10135 5966 4091 0000 lds r20,(SummeNick)+2
10136 596a 5091 0000 lds r21,(SummeNick)+3
10137 596e DD20 tst r13
10138 5970 01F0 breq .L823
10139 5972 661A sub r6,r22
10140 5974 770A sbc r7,r23
10141 5976 C301 movw r24,r6
10142 5978 AA27 clr r26
10143 597a 97FD sbrc r25,7
10144 597c A095 com r26
10145 597e BA2F mov r27,r26
10146 5980 00C0 rjmp .L914
10147 .L823:
10148 5982 AA27 clr r26
10149 5984 97FD sbrc r25,7
10150 5986 A095 com r26
10151 5988 BA2F mov r27,r26
10152 .L914:
10153 598a 280F add r18,r24
10154 598c 391F adc r19,r25
10155 598e 4A1F adc r20,r26
10156 5990 5B1F adc r21,r27
10157 5992 2093 0000 sts SummeNick,r18
10158 5996 3093 0000 sts (SummeNick)+1,r19
10159 599a 4093 0000 sts (SummeNick)+2,r20
10160 599e 5093 0000 sts (SummeNick)+3,r21
10161 59a2 8091 0000 lds r24,SummeNick
10162 59a6 9091 0000 lds r25,(SummeNick)+1
10163 59aa A091 0000 lds r26,(SummeNick)+2
10164 59ae B091 0000 lds r27,(SummeNick)+3
10165 59b2 8150 subi r24,lo8(64001)
10166 59b4 9A4F sbci r25,hi8(64001)
10167 59b6 A040 sbci r26,hlo8(64001)
10168 59b8 B040 sbci r27,hhi8(64001)
10169 59ba 04F0 brlt .L825
10170 59bc 80E0 ldi r24,lo8(64000)
10171 59be 9AEF ldi r25,hi8(64000)
10172 59c0 A0E0 ldi r26,hlo8(64000)
10173 59c2 B0E0 ldi r27,hhi8(64000)
10174 59c4 8093 0000 sts SummeNick,r24
10175 59c8 9093 0000 sts (SummeNick)+1,r25
10176 59cc A093 0000 sts (SummeNick)+2,r26
10177 59d0 B093 0000 sts (SummeNick)+3,r27
10178 .L825:
10179 59d4 8091 0000 lds r24,SummeNick
10180 59d8 9091 0000 lds r25,(SummeNick)+1
10181 59dc A091 0000 lds r26,(SummeNick)+2
10182 59e0 B091 0000 lds r27,(SummeNick)+3
10183 59e4 8050 subi r24,lo8(-64000)
10184 59e6 9640 sbci r25,hi8(-64000)
10185 59e8 AF4F sbci r26,hlo8(-64000)
10186 59ea BF4F sbci r27,hhi8(-64000)
10187 59ec 04F4 brge .L826
10188 59ee 80E0 ldi r24,lo8(-64000)
10189 59f0 96E0 ldi r25,hi8(-64000)
10190 59f2 AFEF ldi r26,hlo8(-64000)
10191 59f4 BFEF ldi r27,hhi8(-64000)
10192 59f6 8093 0000 sts SummeNick,r24
10193 59fa 9093 0000 sts (SummeNick)+1,r25
10194 59fe A093 0000 sts (SummeNick)+2,r26
10195 5a02 B093 0000 sts (SummeNick)+3,r27
10196 .L826:
10197 5a06 C090 0000 lds r12,EE_Parameter+35
10198 5a0a 2091 0000 lds r18,DiffNick
10199 5a0e 3091 0000 lds r19,(DiffNick)+1
10200 5a12 78E0 ldi r23,lo8(8)
10201 5a14 E72E mov r14,r23
10202 5a16 EC14 cp r14,r12
10203 5a18 00F0 brlo .L827
10204 5a1a 8C2D mov r24,r12
10205 5a1c 9927 clr r25
10206 5a1e 829F mul r24,r18
10207 5a20 A001 movw r20,r0
10208 5a22 839F mul r24,r19
10209 5a24 500D add r21,r0
10210 5a26 929F mul r25,r18
10211 5a28 500D add r21,r0
10212 5a2a 1124 clr r1
10213 5a2c CA01 movw r24,r20
10214 5a2e 57FD sbrc r21,7
10215 5a30 0796 adiw r24,7
10216 .L828:
10217 5a32 7C01 movw r14,r24
10218 5a34 63E0 ldi r22,3
10219 5a36 F594 1: asr r15
10220 5a38 E794 ror r14
10221 5a3a 6A95 dec r22
10222 5a3c 01F4 brne 1b
10223 5a3e 00C0 rjmp .L829
10224 .L827:
10225 5a40 8C2D mov r24,r12
10226 5a42 8695 lsr r24
10227 5a44 9927 clr r25
10228 5a46 829F mul r24,r18
10229 5a48 B001 movw r22,r0
10230 5a4a 839F mul r24,r19
10231 5a4c 700D add r23,r0
10232 5a4e 929F mul r25,r18
10233 5a50 700D add r23,r0
10234 5a52 1124 clr r1
10235 5a54 CB01 movw r24,r22
10236 5a56 77FD sbrc r23,7
10237 5a58 0396 adiw r24,3
10238 .L830:
10239 5a5a 7C01 movw r14,r24
10240 5a5c F594 asr r15
10241 5a5e E794 ror r14
10242 5a60 F594 asr r15
10243 5a62 E794 ror r14
10244 .L829:
10245 5a64 A090 0000 lds r10,Ki
10246 5a68 B090 0000 lds r11,(Ki)+1
10247 5a6c 9501 movw r18,r10
10248 5a6e 4427 clr r20
10249 5a70 37FD sbrc r19,7
10250 5a72 4095 com r20
10251 5a74 542F mov r21,r20
10252 5a76 8091 0000 lds r24,SummeNick
10253 5a7a 9091 0000 lds r25,(SummeNick)+1
10254 5a7e A091 0000 lds r26,(SummeNick)+2
10255 5a82 B091 0000 lds r27,(SummeNick)+3
10256 5a86 BC01 movw r22,r24
10257 5a88 CD01 movw r24,r26
10258 5a8a 0E94 0000 call __divmodsi4
10259 5a8e E20E add r14,r18
10260 5a90 F31E adc r15,r19
10261 5a92 9090 0000 lds r9,Parameter_DynamicStability
10262 5a96 692D mov r22,r9
10263 5a98 7727 clr r23
10264 5a9a 8827 clr r24
10265 5a9c 9927 clr r25
10266 5a9e 9801 movw r18,r16
10267 5aa0 17FF sbrs r17,7
10268 5aa2 00C0 rjmp .L831
10269 5aa4 2227 clr r18
10270 5aa6 3327 clr r19
10271 5aa8 201B sub r18,r16
10272 5aaa 310B sbc r19,r17
10273 .L831:
10274 5aac 37FF sbrs r19,7
10275 5aae 00C0 rjmp .L832
10276 5ab0 2F5F subi r18,lo8(-(1))
10277 5ab2 3F4F sbci r19,hi8(-(1))
10278 .L832:
10279 5ab4 3595 asr r19
10280 5ab6 2795 ror r18
10281 5ab8 A981 ldd r26,Y+1
10282 5aba BA81 ldd r27,Y+2
10283 5abc 2A0F add r18,r26
10284 5abe 3B1F adc r19,r27
10285 5ac0 4427 clr r20
10286 5ac2 37FD sbrc r19,7
10287 5ac4 4095 com r20
10288 5ac6 542F mov r21,r20
10289 5ac8 0E94 0000 call __mulsi3
10290 5acc 97FF sbrs r25,7
10291 5ace 00C0 rjmp .L833
10292 5ad0 615C subi r22,lo8(-(63))
10293 5ad2 7F4F sbci r23,hi8(-(63))
10294 5ad4 8F4F sbci r24,hlo8(-(63))
10295 5ad6 9F4F sbci r25,hhi8(-(63))
10296 .L833:
10297 5ad8 26E0 ldi r18,6
10298 5ada 9595 1: asr r25
10299 5adc 8795 ror r24
10300 5ade 7795 ror r23
10301 5ae0 6795 ror r22
10302 5ae2 2A95 dec r18
10303 5ae4 01F4 brne 1b
10304 5ae6 9B01 movw r18,r22
10305 5ae8 6E15 cp r22,r14
10306 5aea 7F05 cpc r23,r15
10307 5aec 04F4 brge .L834
10308 5aee 7B01 movw r14,r22
10309 .L834:
10310 5af0 3095 com r19
10311 5af2 2195 neg r18
10312 5af4 3F4F sbci r19,lo8(-1)
10313 5af6 E216 cp r14,r18
10314 5af8 F306 cpc r15,r19
10315 5afa 04F4 brge .L835
10316 5afc 7901 movw r14,r18
10317 .L835:
10318 5afe 8091 0000 lds r24,MesswertRoll
10319 5b02 9091 0000 lds r25,(MesswertRoll)+1
10320 5b06 6091 0000 lds r22,StickRoll
10321 5b0a 7091 0000 lds r23,(StickRoll)+1
10322 5b0e 861B sub r24,r22
10323 5b10 970B sbc r25,r23
10324 5b12 9093 0000 sts (DiffRoll)+1,r25
10325 5b16 8093 0000 sts DiffRoll,r24
10326 5b1a 2091 0000 lds r18,SummeRoll
10327 5b1e 3091 0000 lds r19,(SummeRoll)+1
10328 5b22 4091 0000 lds r20,(SummeRoll)+2
10329 5b26 5091 0000 lds r21,(SummeRoll)+3
10330 5b2a DD20 tst r13
10331 5b2c 01F0 breq .L836
10332 5b2e 461A sub r4,r22
10333 5b30 570A sbc r5,r23
10334 5b32 C201 movw r24,r4
10335 5b34 AA27 clr r26
10336 5b36 97FD sbrc r25,7
10337 5b38 A095 com r26
10338 5b3a BA2F mov r27,r26
10339 5b3c 00C0 rjmp .L915
10340 .L836:
10341 5b3e AA27 clr r26
10342 5b40 97FD sbrc r25,7
10343 5b42 A095 com r26
10344 5b44 BA2F mov r27,r26
10345 .L915:
10346 5b46 280F add r18,r24
10347 5b48 391F adc r19,r25
10348 5b4a 4A1F adc r20,r26
10349 5b4c 5B1F adc r21,r27
10350 5b4e 2093 0000 sts SummeRoll,r18
10351 5b52 3093 0000 sts (SummeRoll)+1,r19
10352 5b56 4093 0000 sts (SummeRoll)+2,r20
10353 5b5a 5093 0000 sts (SummeRoll)+3,r21
10354 5b5e 8091 0000 lds r24,SummeRoll
10355 5b62 9091 0000 lds r25,(SummeRoll)+1
10356 5b66 A091 0000 lds r26,(SummeRoll)+2
10357 5b6a B091 0000 lds r27,(SummeRoll)+3
10358 5b6e 8150 subi r24,lo8(64001)
10359 5b70 9A4F sbci r25,hi8(64001)
10360 5b72 A040 sbci r26,hlo8(64001)
10361 5b74 B040 sbci r27,hhi8(64001)
10362 5b76 04F0 brlt .L838
10363 5b78 80E0 ldi r24,lo8(64000)
10364 5b7a 9AEF ldi r25,hi8(64000)
10365 5b7c A0E0 ldi r26,hlo8(64000)
10366 5b7e B0E0 ldi r27,hhi8(64000)
10367 5b80 8093 0000 sts SummeRoll,r24
10368 5b84 9093 0000 sts (SummeRoll)+1,r25
10369 5b88 A093 0000 sts (SummeRoll)+2,r26
10370 5b8c B093 0000 sts (SummeRoll)+3,r27
10371 .L838:
10372 5b90 8091 0000 lds r24,SummeRoll
10373 5b94 9091 0000 lds r25,(SummeRoll)+1
10374 5b98 A091 0000 lds r26,(SummeRoll)+2
10375 5b9c B091 0000 lds r27,(SummeRoll)+3
10376 5ba0 8050 subi r24,lo8(-64000)
10377 5ba2 9640 sbci r25,hi8(-64000)
10378 5ba4 AF4F sbci r26,hlo8(-64000)
10379 5ba6 BF4F sbci r27,hhi8(-64000)
10380 5ba8 04F4 brge .L839
10381 5baa 80E0 ldi r24,lo8(-64000)
10382 5bac 96E0 ldi r25,hi8(-64000)
10383 5bae AFEF ldi r26,hlo8(-64000)
10384 5bb0 BFEF ldi r27,hhi8(-64000)
10385 5bb2 8093 0000 sts SummeRoll,r24
10386 5bb6 9093 0000 sts (SummeRoll)+1,r25
10387 5bba A093 0000 sts (SummeRoll)+2,r26
10388 5bbe B093 0000 sts (SummeRoll)+3,r27
10389 .L839:
10390 5bc2 2091 0000 lds r18,DiffRoll
10391 5bc6 3091 0000 lds r19,(DiffRoll)+1
10392 5bca 48E0 ldi r20,lo8(8)
10393 5bcc 4C15 cp r20,r12
10394 5bce 00F0 brlo .L840
10395 5bd0 8C2D mov r24,r12
10396 5bd2 9927 clr r25
10397 5bd4 829F mul r24,r18
10398 5bd6 B001 movw r22,r0
10399 5bd8 839F mul r24,r19
10400 5bda 700D add r23,r0
10401 5bdc 929F mul r25,r18
10402 5bde 700D add r23,r0
10403 5be0 1124 clr r1
10404 5be2 CB01 movw r24,r22
10405 5be4 77FD sbrc r23,7
10406 5be6 0796 adiw r24,7
10407 .L841:
10408 5be8 6C01 movw r12,r24
10409 5bea B3E0 ldi r27,3
10410 5bec D594 1: asr r13
10411 5bee C794 ror r12
10412 5bf0 BA95 dec r27
10413 5bf2 01F4 brne 1b
10414 5bf4 00C0 rjmp .L842
10415 .L840:
10416 5bf6 C694 lsr r12
10417 5bf8 8C2D mov r24,r12
10418 5bfa 9927 clr r25
10419 5bfc 829F mul r24,r18
10420 5bfe D001 movw r26,r0
10421 5c00 839F mul r24,r19
10422 5c02 B00D add r27,r0
10423 5c04 929F mul r25,r18
10424 5c06 B00D add r27,r0
10425 5c08 1124 clr r1
10426 5c0a CD01 movw r24,r26
10427 5c0c B7FD sbrc r27,7
10428 5c0e 0396 adiw r24,3
10429 .L843:
10430 5c10 6C01 movw r12,r24
10431 5c12 D594 asr r13
10432 5c14 C794 ror r12
10433 5c16 D594 asr r13
10434 5c18 C794 ror r12
10435 .L842:
10436 5c1a 9501 movw r18,r10
10437 5c1c 4427 clr r20
10438 5c1e 37FD sbrc r19,7
10439 5c20 4095 com r20
10440 5c22 542F mov r21,r20
10441 5c24 8091 0000 lds r24,SummeRoll
10442 5c28 9091 0000 lds r25,(SummeRoll)+1
10443 5c2c A091 0000 lds r26,(SummeRoll)+2
10444 5c30 B091 0000 lds r27,(SummeRoll)+3
10445 5c34 BC01 movw r22,r24
10446 5c36 CD01 movw r24,r26
10447 5c38 0E94 0000 call __divmodsi4
10448 5c3c C20E add r12,r18
10449 5c3e D31E adc r13,r19
10450 5c40 692D mov r22,r9
10451 5c42 7727 clr r23
10452 5c44 8827 clr r24
10453 5c46 9927 clr r25
10454 5c48 9801 movw r18,r16
10455 5c4a 17FF sbrs r17,7
10456 5c4c 00C0 rjmp .L844
10457 5c4e 2227 clr r18
10458 5c50 3327 clr r19
10459 5c52 201B sub r18,r16
10460 5c54 310B sbc r19,r17
10461 .L844:
10462 5c56 37FF sbrs r19,7
10463 5c58 00C0 rjmp .L845
10464 5c5a 2F5F subi r18,lo8(-(1))
10465 5c5c 3F4F sbci r19,hi8(-(1))
10466 .L845:
10467 5c5e 3595 asr r19
10468 5c60 2795 ror r18
10469 5c62 E981 ldd r30,Y+1
10470 5c64 FA81 ldd r31,Y+2
10471 5c66 2E0F add r18,r30
10472 5c68 3F1F adc r19,r31
10473 5c6a 4427 clr r20
10474 5c6c 37FD sbrc r19,7
10475 5c6e 4095 com r20
10476 5c70 542F mov r21,r20
10477 5c72 0E94 0000 call __mulsi3
10478 5c76 97FF sbrs r25,7
10479 5c78 00C0 rjmp .L846
10480 5c7a 615C subi r22,lo8(-(63))
10481 5c7c 7F4F sbci r23,hi8(-(63))
10482 5c7e 8F4F sbci r24,hlo8(-(63))
10483 5c80 9F4F sbci r25,hhi8(-(63))
10484 .L846:
10485 5c82 E6E0 ldi r30,6
10486 5c84 9595 1: asr r25
10487 5c86 8795 ror r24
10488 5c88 7795 ror r23
10489 5c8a 6795 ror r22
10490 5c8c EA95 dec r30
10491 5c8e 01F4 brne 1b
10492 5c90 9B01 movw r18,r22
10493 5c92 6C15 cp r22,r12
10494 5c94 7D05 cpc r23,r13
10495 5c96 04F4 brge .L847
10496 5c98 6B01 movw r12,r22
10497 .L847:
10498 5c9a 3095 com r19
10499 5c9c 2195 neg r18
10500 5c9e 3F4F sbci r19,lo8(-1)
10501 5ca0 C216 cp r12,r18
10502 5ca2 D306 cpc r13,r19
10503 5ca4 04F4 brge .L848
10504 5ca6 6901 movw r12,r18
10505 .L848:
10506 5ca8 8091 0000 lds r24,MIN_GAS
10507 5cac 282E mov r2,r24
10508 5cae 3324 clr r3
10509 5cb0 5090 0000 lds r5,EE_Parameter+101
10510 5cb4 60E0 ldi r22,lo8(Motor)
10511 5cb6 862E mov r8,r22
10512 5cb8 60E0 ldi r22,hi8(Motor)
10513 5cba 962E mov r9,r22
10514 5cbc 50E0 ldi r21,lo8(Mixer+13)
10515 5cbe A52E mov r10,r21
10516 5cc0 50E0 ldi r21,hi8(Mixer+13)
10517 5cc2 B52E mov r11,r21
10518 5cc4 4BE0 ldi r20,lo8(11)
10519 5cc6 442E mov r4,r20
10520 5cc8 30E0 ldi r19,lo8(tmp_motorwert)
10521 5cca 632E mov r6,r19
10522 5ccc 30E0 ldi r19,hi8(tmp_motorwert)
10523 5cce 732E mov r7,r19
10524 .L883:
10525 5cd0 D501 movw r26,r10
10526 5cd2 2C91 ld r18,X
10527 5cd4 1216 cp __zero_reg__,r18
10528 5cd6 04F0 brlt .+2
10529 5cd8 00C0 rjmp .L852
10530 5cda 2034 cpi r18,lo8(64)
10531 5cdc 01F4 brne .L853
10532 5cde E981 ldd r30,Y+1
10533 5ce0 FA81 ldd r31,Y+2
10534 5ce2 FF8B std Y+23,r31
10535 5ce4 EE8B std Y+22,r30
10536 5ce6 00C0 rjmp .L854
10537 .L853:
10538 5ce8 4981 ldd r20,Y+1
10539 5cea 5A81 ldd r21,Y+2
10540 5cec CA01 movw r24,r20
10541 5cee AA27 clr r26
10542 5cf0 97FD sbrc r25,7
10543 5cf2 A095 com r26
10544 5cf4 BA2F mov r27,r26
10545 5cf6 3327 clr r19
10546 5cf8 27FD sbrc r18,7
10547 5cfa 3095 com r19
10548 5cfc 432F mov r20,r19
10549 5cfe 532F mov r21,r19
10550 5d00 BC01 movw r22,r24
10551 5d02 CD01 movw r24,r26
10552 5d04 0E94 0000 call __mulsi3
10553 5d08 97FF sbrs r25,7
10554 5d0a 00C0 rjmp .L855
10555 5d0c 615C subi r22,lo8(-(63))
10556 5d0e 7F4F sbci r23,hi8(-(63))
10557 5d10 8F4F sbci r24,hlo8(-(63))
10558 5d12 9F4F sbci r25,hhi8(-(63))
10559 .L855:
10560 5d14 26E0 ldi r18,6
10561 5d16 9595 1: asr r25
10562 5d18 8795 ror r24
10563 5d1a 7795 ror r23
10564 5d1c 6795 ror r22
10565 5d1e 2A95 dec r18
10566 5d20 01F4 brne 1b
10567 5d22 7F8B std Y+23,r23
10568 5d24 6E8B std Y+22,r22
10569 .L854:
10570 5d26 F501 movw r30,r10
10571 5d28 2181 ldd r18,Z+1
10572 5d2a 2034 cpi r18,lo8(64)
10573 5d2c 01F4 brne .L856
10574 5d2e 2E89 ldd r18,Y+22
10575 5d30 3F89 ldd r19,Y+23
10576 5d32 2E0D add r18,r14
10577 5d34 3F1D adc r19,r15
10578 5d36 3F8B std Y+23,r19
10579 5d38 2E8B std Y+22,r18
10580 5d3a 00C0 rjmp .L857
10581 .L856:
10582 5d3c 203C cpi r18,lo8(-64)
10583 5d3e 01F4 brne .L858
10584 5d40 4E89 ldd r20,Y+22
10585 5d42 5F89 ldd r21,Y+23
10586 5d44 4E19 sub r20,r14
10587 5d46 5F09 sbc r21,r15
10588 5d48 5F8B std Y+23,r21
10589 5d4a 4E8B std Y+22,r20
10590 5d4c 00C0 rjmp .L857
10591 .L858:
10592 5d4e C701 movw r24,r14
10593 5d50 AA27 clr r26
10594 5d52 97FD sbrc r25,7
10595 5d54 A095 com r26
10596 5d56 BA2F mov r27,r26
10597 5d58 3327 clr r19
10598 5d5a 27FD sbrc r18,7
10599 5d5c 3095 com r19
10600 5d5e 432F mov r20,r19
10601 5d60 532F mov r21,r19
10602 5d62 BC01 movw r22,r24
10603 5d64 CD01 movw r24,r26
10604 5d66 0E94 0000 call __mulsi3
10605 5d6a 97FF sbrs r25,7
10606 5d6c 00C0 rjmp .L860
10607 5d6e 615C subi r22,lo8(-(63))
10608 5d70 7F4F sbci r23,hi8(-(63))
10609 5d72 8F4F sbci r24,hlo8(-(63))
10610 5d74 9F4F sbci r25,hhi8(-(63))
10611 .L860:
10612 5d76 B6E0 ldi r27,6
10613 5d78 9595 1: asr r25
10614 5d7a 8795 ror r24
10615 5d7c 7795 ror r23
10616 5d7e 6795 ror r22
10617 5d80 BA95 dec r27
10618 5d82 01F4 brne 1b
10619 5d84 AE89 ldd r26,Y+22
10620 5d86 BF89 ldd r27,Y+23
10621 5d88 A60F add r26,r22
10622 5d8a B71F adc r27,r23
10623 5d8c BF8B std Y+23,r27
10624 5d8e AE8B std Y+22,r26
10625 .L857:
10626 5d90 F501 movw r30,r10
10627 5d92 2281 ldd r18,Z+2
10628 5d94 2034 cpi r18,lo8(64)
10629 5d96 01F4 brne .L861
10630 5d98 2E89 ldd r18,Y+22
10631 5d9a 3F89 ldd r19,Y+23
10632 5d9c 2C0D add r18,r12
10633 5d9e 3D1D adc r19,r13
10634 5da0 3F8B std Y+23,r19
10635 5da2 2E8B std Y+22,r18
10636 5da4 00C0 rjmp .L862
10637 .L861:
10638 5da6 203C cpi r18,lo8(-64)
10639 5da8 01F4 brne .L863
10640 5daa 4E89 ldd r20,Y+22
10641 5dac 5F89 ldd r21,Y+23
10642 5dae 4C19 sub r20,r12
10643 5db0 5D09 sbc r21,r13
10644 5db2 5F8B std Y+23,r21
10645 5db4 4E8B std Y+22,r20
10646 5db6 00C0 rjmp .L862
10647 .L863:
10648 5db8 C601 movw r24,r12
10649 5dba AA27 clr r26
10650 5dbc 97FD sbrc r25,7
10651 5dbe A095 com r26
10652 5dc0 BA2F mov r27,r26
10653 5dc2 3327 clr r19
10654 5dc4 27FD sbrc r18,7
10655 5dc6 3095 com r19
10656 5dc8 432F mov r20,r19
10657 5dca 532F mov r21,r19
10658 5dcc BC01 movw r22,r24
10659 5dce CD01 movw r24,r26
10660 5dd0 0E94 0000 call __mulsi3
10661 5dd4 97FF sbrs r25,7
10662 5dd6 00C0 rjmp .L865
10663 5dd8 615C subi r22,lo8(-(63))
10664 5dda 7F4F sbci r23,hi8(-(63))
10665 5ddc 8F4F sbci r24,hlo8(-(63))
10666 5dde 9F4F sbci r25,hhi8(-(63))
10667 .L865:
10668 5de0 A6E0 ldi r26,6
10669 5de2 9595 1: asr r25
10670 5de4 8795 ror r24
10671 5de6 7795 ror r23
10672 5de8 6795 ror r22
10673 5dea AA95 dec r26
10674 5dec 01F4 brne 1b
10675 5dee AE89 ldd r26,Y+22
10676 5df0 BF89 ldd r27,Y+23
10677 5df2 A60F add r26,r22
10678 5df4 B71F adc r27,r23
10679 5df6 BF8B std Y+23,r27
10680 5df8 AE8B std Y+22,r26
10681 .L862:
10682 5dfa F501 movw r30,r10
10683 5dfc 2381 ldd r18,Z+3
10684 5dfe 2034 cpi r18,lo8(64)
10685 5e00 01F4 brne .L866
10686 5e02 2E89 ldd r18,Y+22
10687 5e04 3F89 ldd r19,Y+23
10688 5e06 200F add r18,r16
10689 5e08 311F adc r19,r17
10690 5e0a 3F8B std Y+23,r19
10691 5e0c 2E8B std Y+22,r18
10692 5e0e 00C0 rjmp .L867
10693 .L866:
10694 5e10 203C cpi r18,lo8(-64)
10695 5e12 01F4 brne .L868
10696 5e14 4E89 ldd r20,Y+22
10697 5e16 5F89 ldd r21,Y+23
10698 5e18 401B sub r20,r16
10699 5e1a 510B sbc r21,r17
10700 5e1c 5F8B std Y+23,r21
10701 5e1e 4E8B std Y+22,r20
10702 5e20 00C0 rjmp .L867
10703 .L868:
10704 5e22 C801 movw r24,r16
10705 5e24 AA27 clr r26
10706 5e26 97FD sbrc r25,7
10707 5e28 A095 com r26
10708 5e2a BA2F mov r27,r26
10709 5e2c 3327 clr r19
10710 5e2e 27FD sbrc r18,7
10711 5e30 3095 com r19
10712 5e32 432F mov r20,r19
10713 5e34 532F mov r21,r19
10714 5e36 BC01 movw r22,r24
10715 5e38 CD01 movw r24,r26
10716 5e3a 0E94 0000 call __mulsi3
10717 5e3e 97FF sbrs r25,7
10718 5e40 00C0 rjmp .L870
10719 5e42 615C subi r22,lo8(-(63))
10720 5e44 7F4F sbci r23,hi8(-(63))
10721 5e46 8F4F sbci r24,hlo8(-(63))
10722 5e48 9F4F sbci r25,hhi8(-(63))
10723 .L870:
10724 5e4a F6E0 ldi r31,6
10725 5e4c 9595 1: asr r25
10726 5e4e 8795 ror r24
10727 5e50 7795 ror r23
10728 5e52 6795 ror r22
10729 5e54 FA95 dec r31
10730 5e56 01F4 brne 1b
10731 5e58 AE89 ldd r26,Y+22
10732 5e5a BF89 ldd r27,Y+23
10733 5e5c A60F add r26,r22
10734 5e5e B71F adc r27,r23
10735 5e60 BF8B std Y+23,r27
10736 5e62 AE8B std Y+22,r26
10737 .L867:
10738 5e64 F301 movw r30,r6
10739 5e66 8081 ld r24,Z
10740 5e68 9181 ldd r25,Z+1
10741 5e6a 2E89 ldd r18,Y+22
10742 5e6c 3F89 ldd r19,Y+23
10743 5e6e 8217 cp r24,r18
10744 5e70 9307 cpc r25,r19
10745 5e72 04F4 brge .L871
10746 5e74 B901 movw r22,r18
10747 5e76 680F add r22,r24
10748 5e78 791F adc r23,r25
10749 5e7a 77FF sbrs r23,7
10750 5e7c 00C0 rjmp .L872
10751 5e7e 6F5F subi r22,lo8(-(1))
10752 5e80 7F4F sbci r23,hi8(-(1))
10753 .L872:
10754 5e82 7595 asr r23
10755 5e84 6795 ror r22
10756 5e86 7F8B std Y+23,r23
10757 5e88 6E8B std Y+22,r22
10758 5e8a 00C0 rjmp .L873
10759 .L871:
10760 5e8c 5520 tst r5
10761 5e8e 01F4 brne .L874
10762 5e90 4E89 ldd r20,Y+22
10763 5e92 5F89 ldd r21,Y+23
10764 5e94 440F add r20,r20
10765 5e96 551F adc r21,r21
10766 5e98 481B sub r20,r24
10767 5e9a 590B sbc r21,r25
10768 5e9c 5F8B std Y+23,r21
10769 5e9e 4E8B std Y+22,r20
10770 5ea0 00C0 rjmp .L873
10771 .L874:
10772 5ea2 51E0 ldi r21,lo8(1)
10773 5ea4 5515 cp r21,r5
10774 5ea6 00F4 brsh .L873
10775 5ea8 252D mov r18,r5
10776 5eaa 3327 clr r19
10777 5eac 6E89 ldd r22,Y+22
10778 5eae 7F89 ldd r23,Y+23
10779 5eb0 861B sub r24,r22
10780 5eb2 970B sbc r25,r23
10781 5eb4 B901 movw r22,r18
10782 5eb6 0E94 0000 call __divmodhi4
10783 5eba AE89 ldd r26,Y+22
10784 5ebc BF89 ldd r27,Y+23
10785 5ebe A60F add r26,r22
10786 5ec0 B71F adc r27,r23
10787 5ec2 BF8B std Y+23,r27
10788 5ec4 AE8B std Y+22,r26
10789 .L873:
10790 5ec6 C101 movw r24,r2
10791 5ec8 880F lsl r24
10792 5eca 991F rol r25
10793 5ecc 880F lsl r24
10794 5ece 991F rol r25
10795 5ed0 EE89 ldd r30,Y+22
10796 5ed2 FF89 ldd r31,Y+23
10797 5ed4 8E17 cp r24,r30
10798 5ed6 9F07 cpc r25,r31
10799 5ed8 04F4 brge .L916
10800 5eda FD89 ldd r31,Y+21
10801 5edc 8F2F mov r24,r31
10802 5ede 9927 clr r25
10803 5ee0 880F lsl r24
10804 5ee2 991F rol r25
10805 5ee4 880F lsl r24
10806 5ee6 991F rol r25
10807 5ee8 2E89 ldd r18,Y+22
10808 5eea 3F89 ldd r19,Y+23
10809 5eec 2817 cp r18,r24
10810 5eee 3907 cpc r19,r25
10811 5ef0 04F0 brlt .L878
10812 .L916:
10813 5ef2 9F8B std Y+23,r25
10814 5ef4 8E8B std Y+22,r24
10815 .L878:
10816 5ef6 8E89 ldd r24,Y+22
10817 5ef8 9F89 ldd r25,Y+23
10818 5efa 97FD sbrc r25,7
10819 5efc 0396 adiw r24,3
10820 .L880:
10821 5efe 9595 asr r25
10822 5f00 8795 ror r24
10823 5f02 9595 asr r25
10824 5f04 8795 ror r24
10825 5f06 F401 movw r30,r8
10826 5f08 8183 std Z+1,r24
10827 5f0a 880F lsl r24
10828 5f0c 991F rol r25
10829 5f0e 880F lsl r24
10830 5f10 991F rol r25
10831 5f12 2E89 ldd r18,Y+22
10832 5f14 3F89 ldd r19,Y+23
10833 5f16 281B sub r18,r24
10834 5f18 390B sbc r19,r25
10835 5f1a C901 movw r24,r18
10836 5f1c 880F lsl r24
10837 5f1e 8283 std Z+2,r24
10838 5f20 EE89 ldd r30,Y+22
10839 5f22 FF89 ldd r31,Y+23
10840 5f24 D301 movw r26,r6
10841 5f26 ED93 st X+,r30
10842 5f28 FC93 st X,r31
10843 5f2a 00C0 rjmp .L851
10844 .L852:
10845 5f2c F401 movw r30,r8
10846 5f2e 1182 std Z+1,__zero_reg__
10847 5f30 1282 std Z+2,__zero_reg__
10848 .L851:
10849 5f32 4A94 dec r4
10850 5f34 22E0 ldi r18,lo8(2)
10851 5f36 30E0 ldi r19,hi8(2)
10852 5f38 620E add r6,r18
10853 5f3a 731E adc r7,r19
10854 5f3c 44E0 ldi r20,lo8(4)
10855 5f3e 50E0 ldi r21,hi8(4)
10856 5f40 A40E add r10,r20
10857 5f42 B51E adc r11,r21
10858 5f44 68E0 ldi r22,lo8(8)
10859 5f46 70E0 ldi r23,hi8(8)
10860 5f48 860E add r8,r22
10861 5f4a 971E adc r9,r23
10862 5f4c 47FE sbrs r4,7
10863 5f4e 00C0 rjmp .L883
10864 /* epilogue: frame size=23 */
10865 5f50 E2E1 ldi r30,18
10866 5f52 C95E subi r28,-23
10867 5f54 0C94 0000 jmp __epilogue_restores__+0
10868 /* epilogue end (size=4) */
10869 /* function MotorRegler size 8305 (8295) */
10871 .comm TrimNick,2,1
10872 .comm TrimRoll,2,1
10873 .comm ErsatzKompass,4,1
10874 .comm ErsatzKompassInGrad,2,1
10875 .comm MesswertNick,2,1
10876 .comm MesswertRoll,2,1
10877 .comm MesswertGier,2,1
10878 .comm Mittelwert_AccNick,2,1
10879 .comm Mittelwert_AccRoll,2,1
10880 .comm NaviAccNick,2,1
10881 .comm NaviAccRoll,2,1
10882 .comm h,1,1
10883 .comm m,1,1
10884 .comm s,1,1
10885 .comm DiffNick,2,1
10886 .comm DiffRoll,2,1
10887 .comm Parameter_Servo3,1,1
10888 .comm Parameter_Servo4,1,1
10889 .comm Parameter_Servo5,1,1
10890 .comm Parameter_J16Bitmask,1,1
10891 .comm Parameter_J16Timing,1,1
10892 .comm Parameter_J17Bitmask,1,1
10893 .comm Parameter_J17Timing,1,1
10894 .comm Parameter_GlobalConfig,1,1
10895 .comm Parameter_ExtraConfig,1,1
10896 .comm MesswertGierBias,2,1
10897 .comm RohMesswertNick,2,1
10898 .comm RohMesswertRoll,2,1
10899 .comm MittelIntegralNick,4,1
10900 .comm MittelIntegralRoll,4,1
10901 .comm MittelIntegralNick2,4,1
10902 .comm MittelIntegralRoll2,4,1
10903 .comm MAX_GAS,1,1
10904 .comm MIN_GAS,1,1
10905 .comm GyroFaktor,1,1
10906 .comm GyroFaktorGier,1,1
10907 .comm IntegralFaktor,1,1
10908 .comm IntegralFaktorGier,1,1
10909 .comm Parameter_NaviGpsModeControl,1,1
10910 .comm Parameter_NaviGpsGain,1,1
10911 .comm Parameter_NaviGpsP,1,1
10912 .comm Parameter_NaviGpsI,1,1
10913 .comm Parameter_NaviGpsD,1,1
10914 .comm Parameter_NaviGpsACC,1,1
10915 .comm Parameter_NaviOperatingRadius,1,1
10916 .comm Parameter_NaviWindCorrection,1,1
10917 .comm Parameter_NaviSpeedCompensation,1,1
10918 .comm Parameter_ExternalControl,1,1
10919 .comm Parameter_MaximumAltitude,1,1
10920 .comm KopplungsteilNickRoll,2,1
10921 .comm KopplungsteilRollNick,2,1
10922 .comm tmp_motorwert,24,1
10923 /* File "fc.c": code 12371 = 0x3053 (12310), prologues 31, epilogues 30 */
DEFINED SYMBOLS
*ABS*:00000000 fc.c
C:\Temp/ccsD8yYp.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccsD8yYp.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccsD8yYp.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccsD8yYp.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccsD8yYp.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccsD8yYp.s:15 .bss:00000000 GasIsZeroCnt
C:\Temp/ccsD8yYp.s:21 .bss:00000002 HooverGasEmergencyPercent
C:\Temp/ccsD8yYp.s:27 .data:00000000 VarioCharacter
C:\Temp/ccsD8yYp.s:32 .data:00000001 GIER_GRAD_FAKTOR
C:\Temp/ccsD8yYp.s:39 .bss:00000004 FC_StatusFlags2
C:\Temp/ccsD8yYp.s:45 .bss:00000005 FC_StatusFlags
C:\Temp/ccsD8yYp.s:51 .bss:00000006 modell_fliegt
C:\Temp/ccsD8yYp.s:57 .bss:00000008 MaxStickRoll
C:\Temp/ccsD8yYp.s:63 .bss:0000000a MaxStickNick
C:\Temp/ccsD8yYp.s:69 .data:00000005 ExternHoehenValue
C:\Temp/ccsD8yYp.s:76 .bss:0000000c ExternStickGier
C:\Temp/ccsD8yYp.s:82 .bss:0000000e ExternStickRoll
C:\Temp/ccsD8yYp.s:88 .bss:00000010 ExternStickNick
C:\Temp/ccsD8yYp.s:94 .data:00000007 sintab
C:\Temp/ccsD8yYp.s:131 .bss:00000012 CareFree
C:\Temp/ccsD8yYp.s:137 .data:00000026 Parameter_DynamicStability
C:\Temp/ccsD8yYp.s:142 .data:00000027 Parameter_CouplingYawCorrection
C:\Temp/ccsD8yYp.s:147 .data:00000028 Parameter_AchsKopplung2
C:\Temp/ccsD8yYp.s:152 .data:00000029 Parameter_AchsKopplung1
C:\Temp/ccsD8yYp.s:157 .data:0000002a Parameter_LoopGasLimit
C:\Temp/ccsD8yYp.s:162 .data:0000002b Parameter_ServoRollControl
C:\Temp/ccsD8yYp.s:167 .data:0000002c Parameter_ServoNickControl
C:\Temp/ccsD8yYp.s:174 .bss:00000013 Parameter_UserParam8
C:\Temp/ccsD8yYp.s:180 .bss:00000014 Parameter_UserParam7
C:\Temp/ccsD8yYp.s:186 .bss:00000015 Parameter_UserParam6
C:\Temp/ccsD8yYp.s:192 .bss:00000016 Parameter_UserParam5
C:\Temp/ccsD8yYp.s:198 .bss:00000017 Parameter_UserParam4
C:\Temp/ccsD8yYp.s:204 .bss:00000018 Parameter_UserParam3
C:\Temp/ccsD8yYp.s:210 .bss:00000019 Parameter_UserParam2
C:\Temp/ccsD8yYp.s:216 .bss:0000001a Parameter_UserParam1
C:\Temp/ccsD8yYp.s:222 .data:0000002d Parameter_I_Faktor
C:\Temp/ccsD8yYp.s:227 .data:0000002e Parameter_Gier_P
C:\Temp/ccsD8yYp.s:232 .data:0000002f Parameter_Gyro_Gier_I
C:\Temp/ccsD8yYp.s:237 .data:00000030 Parameter_Gyro_Gier_P
C:\Temp/ccsD8yYp.s:242 .data:00000031 Parameter_Gyro_I
C:\Temp/ccsD8yYp.s:247 .data:00000032 Parameter_Gyro_P
C:\Temp/ccsD8yYp.s:252 .data:00000033 Parameter_Gyro_D
C:\Temp/ccsD8yYp.s:257 .data:00000034 Parameter_Hoehe_GPS_Z
C:\Temp/ccsD8yYp.s:262 .data:00000035 Parameter_KompassWirkung
C:\Temp/ccsD8yYp.s:267 .data:00000036 Parameter_Hoehe_ACC_Wirkung
C:\Temp/ccsD8yYp.s:272 .data:00000037 Parameter_Hoehe_P
C:\Temp/ccsD8yYp.s:277 .data:00000038 Parameter_HoehenSchalter
C:\Temp/ccsD8yYp.s:282 .data:00000039 Parameter_Luftdruck_D
C:\Temp/ccsD8yYp.s:289 .bss:0000001b Looping_Oben
C:\Temp/ccsD8yYp.s:295 .bss:0000001c Looping_Unten
C:\Temp/ccsD8yYp.s:301 .bss:0000001d Looping_Rechts
C:\Temp/ccsD8yYp.s:307 .bss:0000001e Looping_Links
C:\Temp/ccsD8yYp.s:313 .bss:0000001f Looping_Roll
C:\Temp/ccsD8yYp.s:319 .bss:00000020 Looping_Nick
C:\Temp/ccsD8yYp.s:325 .data:0000003a Ki
C:\Temp/ccsD8yYp.s:332 .bss:00000021 HoverGas
C:\Temp/ccsD8yYp.s:338 .bss:00000023 LageKorrekturNick
C:\Temp/ccsD8yYp.s:344 .bss:00000025 LageKorrekturRoll
C:\Temp/ccsD8yYp.s:350 .bss:00000027 NeueKompassRichtungMerken
C:\Temp/ccsD8yYp.s:356 .bss:00000028 CalibrationDone
C:\Temp/ccsD8yYp.s:362 .bss:00000029 CompassGierSetpoint
C:\Temp/ccsD8yYp.s:368 .bss:0000002b WaypointTrimming
C:\Temp/ccsD8yYp.s:374 .data:0000003c carefree_old
C:\Temp/ccsD8yYp.s:381 .bss:0000002c FromNC_AltitudeSpeed
C:\Temp/ccsD8yYp.s:387 .bss:0000002d FromNC_AltitudeSetpoint
C:\Temp/ccsD8yYp.s:393 .bss:00000031 AltitudeSetpointTrimming
C:\Temp/ccsD8yYp.s:399 .bss:00000033 SollHoehe
C:\Temp/ccsD8yYp.s:405 .bss:00000037 HoehenWert
C:\Temp/ccsD8yYp.s:411 .bss:0000003b StartTrigger
C:\Temp/ccsD8yYp.s:417 .bss:0000003c MotorenEin
C:\Temp/ccsD8yYp.s:423 .bss:0000003d SenderOkay
C:\Temp/ccsD8yYp.s:429 .bss:0000003e Poti
C:\Temp/ccsD8yYp.s:435 .bss:00000047 StickGas
C:\Temp/ccsD8yYp.s:441 .bss:00000049 StickGier
C:\Temp/ccsD8yYp.s:447 .bss:0000004b StickRoll
C:\Temp/ccsD8yYp.s:453 .bss:0000004d StickNick
C:\Temp/ccsD8yYp.s:459 .data:0000003d HoverGasMax
C:\Temp/ccsD8yYp.s:466 .bss:0000004f HoverGasMin
C:\Temp/ccsD8yYp.s:472 .data:0000003f StickGasHover
C:\Temp/ccsD8yYp.s:479 .bss:00000051 GierGyroFehler
C:\Temp/ccsD8yYp.s:485 .data:00000041 Umschlag180Roll
C:\Temp/ccsD8yYp.s:490 .data:00000045 Umschlag180Nick
C:\Temp/ccsD8yYp.s:497 .bss:00000053 TrichterFlug
C:\Temp/ccsD8yYp.s:503 .bss:00000054 HoehenReglerAktiv
C:\Temp/ccsD8yYp.s:509 .data:00000049 KompassSignalSchlecht
C:\Temp/ccsD8yYp.s:514 .data:0000004b KompassFusion
C:\Temp/ccsD8yYp.s:519 .data:0000004c CalculateCompassTimer
C:\Temp/ccsD8yYp.s:526 .bss:00000055 KompassSollWert
C:\Temp/ccsD8yYp.s:532 .data:0000004d KompassValue
C:\Temp/ccsD8yYp.s:539 .bss:00000057 Mess_Integral_Hoch
C:\Temp/ccsD8yYp.s:545 .bss:0000005b SummeRoll
C:\Temp/ccsD8yYp.s:551 .bss:0000005f SummeNick
C:\Temp/ccsD8yYp.s:557 .bss:00000063 Mess_Integral_Gier2
C:\Temp/ccsD8yYp.s:563 .bss:00000067 Mess_Integral_Gier
C:\Temp/ccsD8yYp.s:569 .bss:0000006b Mess_IntegralRoll2
C:\Temp/ccsD8yYp.s:575 .bss:0000006f Mess_IntegralRoll
C:\Temp/ccsD8yYp.s:581 .bss:00000073 Mess_IntegralNick2
C:\Temp/ccsD8yYp.s:587 .bss:00000077 Mess_IntegralNick
C:\Temp/ccsD8yYp.s:593 .bss:0000007b Integral_Gier
C:\Temp/ccsD8yYp.s:599 .bss:0000007f IntegralAccZ
C:\Temp/ccsD8yYp.s:605 .bss:00000083 IntegralAccRoll
C:\Temp/ccsD8yYp.s:611 .bss:00000087 IntegralAccNick
C:\Temp/ccsD8yYp.s:617 .bss:0000008b IntegralRoll2
C:\Temp/ccsD8yYp.s:623 .bss:0000008f IntegralRoll
C:\Temp/ccsD8yYp.s:629 .bss:00000093 IntegralNick2
C:\Temp/ccsD8yYp.s:635 .bss:00000097 IntegralNick
C:\Temp/ccsD8yYp.s:641 .bss:0000009b ControlHeading
C:\Temp/ccsD8yYp.s:647 .bss:0000009c NeutralAccZ
C:\Temp/ccsD8yYp.s:653 .bss:0000009e NaviCntAcc
C:\Temp/ccsD8yYp.s:659 .bss:000000a0 NeutralAccY
C:\Temp/ccsD8yYp.s:665 .bss:000000a2 NeutralAccX
C:\Temp/ccsD8yYp.s:671 .bss:000000a4 StartNeutralNick
C:\Temp/ccsD8yYp.s:677 .bss:000000a6 StartNeutralRoll
C:\Temp/ccsD8yYp.s:683 .bss:000000a8 AdNeutralGier
C:\Temp/ccsD8yYp.s:689 .bss:000000aa AdNeutralRoll
C:\Temp/ccsD8yYp.s:695 .bss:000000ac AdNeutralNick
C:\Temp/ccsD8yYp.s:701 .bss:000000ae BaroExpandActive
C:\Temp/ccsD8yYp.s:706 .text:00000000 CopyDebugValues
*COM*:00000002 Mittelwert_AccNick
*COM*:00000002 Mittelwert_AccRoll
*COM*:00000004 ErsatzKompass
C:\Temp/ccsD8yYp.s:902 .text:00000254 Piep
C:\Temp/ccsD8yYp.s:976 .text:000002da CalibrierMittelwert
*COM*:00000002 MesswertNick
*COM*:00000002 MesswertRoll
*COM*:00000002 MesswertGier
C:\Temp/ccsD8yYp.s:1118 .progmem.data:00000000 __c.35
C:\Temp/ccsD8yYp.s:1123 .text:0000041c SetNeutral
.bss:000000b0 tmpl.27
C:\Temp/ccsD8yYp.s:1631 .bss:000000b4 tmpl2.28
C:\Temp/ccsD8yYp.s:1632 .bss:000000b8 tmpl3.29
C:\Temp/ccsD8yYp.s:1633 .bss:000000bc tmpl4.30
C:\Temp/ccsD8yYp.s:1634 .bss:000000c0 oldNick.31
C:\Temp/ccsD8yYp.s:1635 .bss:000000c2 oldRoll.32
C:\Temp/ccsD8yYp.s:1636 .bss:000000c4 d2Roll.33
C:\Temp/ccsD8yYp.s:1637 .bss:000000c6 d2Nick.34
C:\Temp/ccsD8yYp.s:1641 .text:00000988 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/ccsD8yYp.s:3206 .text:000018ec SendMotorData
C:\Temp/ccsD8yYp.s:3266 .text:00001966 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/ccsD8yYp.s:1638 .bss:000000c8 sollGier.0
C:\Temp/ccsD8yYp.s:3985 .bss:000000cc tmp_long.1
C:\Temp/ccsD8yYp.s:3986 .bss:000000d0 tmp_long2.2
C:\Temp/ccsD8yYp.s:3987 .bss:000000d4 IntegralFehlerNick.3
C:\Temp/ccsD8yYp.s:3988 .bss:000000d8 IntegralFehlerRoll.4
C:\Temp/ccsD8yYp.s:3989 .bss:000000dc RcLostTimer.5
C:\Temp/ccsD8yYp.s:3990 .bss:000000de delay_neutral.6
C:\Temp/ccsD8yYp.s:3991 .bss:000000df delay_einschalten.7
C:\Temp/ccsD8yYp.s:3992 .bss:000000e0 delay_ausschalten.8
C:\Temp/ccsD8yYp.s:3993 .bss:000000e1 move_safety_switch.9
C:\Temp/ccsD8yYp.s:3994 .bss:000000e2 ausgleichNick.10
C:\Temp/ccsD8yYp.s:3995 .bss:000000e6 ausgleichRoll.11
C:\Temp/ccsD8yYp.s:3996 .bss:000000ea stick_nick.12
C:\Temp/ccsD8yYp.s:3997 .bss:000000ec stick_roll.13
C:\Temp/ccsD8yYp.s:3998 .bss:000000ee cnt.14
C:\Temp/ccsD8yYp.s:3999 .bss:000000f0 last_n_p.15
C:\Temp/ccsD8yYp.s:4000 .bss:000000f1 last_n_n.16
C:\Temp/ccsD8yYp.s:4001 .bss:000000f2 last_r_p.17
C:\Temp/ccsD8yYp.s:4002 .bss:000000f3 last_r_n.18
C:\Temp/ccsD8yYp.s:4003 .bss:000000f4 MittelIntegralNick_Alt.19
C:\Temp/ccsD8yYp.s:4004 .bss:000000f8 MittelIntegralRoll_Alt.20
C:\Temp/ccsD8yYp.s:4005 .bss:000000fc HeightTrimming.21
C:\Temp/ccsD8yYp.s:4006 .bss:000000fe FilterHCGas.22
C:\Temp/ccsD8yYp.s:4007 .bss:00000100 HoverGasFilter.23
C:\Temp/ccsD8yYp.s:4012 .data:0000004f delay.24
C:\Temp/ccsD8yYp.s:4008 .bss:00000104 BaroAtUpperLimit.25
C:\Temp/ccsD8yYp.s:4014 .bss:00000105 BaroAtLowerLimit.26
C:\Temp/ccsD8yYp.s:4019 .text:00001f6a 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
AdWertGier
AdWertAccHoch
UBat
Motor
Capacity
ServoNickValue
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_8-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_8-Motoren+Sexpander/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.90d_Ernstl_8-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_8-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_8-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_8-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/ccQGPFXe.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccQGPFXe.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccQGPFXe.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccQGPFXe.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccQGPFXe.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccQGPFXe.s:15 .bss:00000000 HottestBl
C:\Temp/ccQGPFXe.s:21 .bss:00000001 MinBlTempertaure
C:\Temp/ccQGPFXe.s:27 .bss:00000002 MaxBlTempertaure
C:\Temp/ccQGPFXe.s:33 .progmem.data:00000000 HOTT_ERROR
C:\Temp/ccQGPFXe.s:100 .progmem.data:00000040 NC_ERROR_TEXT
C:\Temp/ccQGPFXe.s:136 .progmem.data:00000260 UNDERVOLTAGE
C:\Temp/ccQGPFXe.s:141 .progmem.data:00000276 MIKROKOPTER
C:\Temp/ccQGPFXe.s:148 .bss:00000003 HoTTVarioMeter
C:\Temp/ccQGPFXe.s:154 .bss:00000005 ToNC_SpeakHoTT
C:\Temp/ccQGPFXe.s:160 .data:00000000 SpeakHoTT
C:\Temp/ccQGPFXe.s:167 .bss:00000006 NaviData_TargetDistance
C:\Temp/ccQGPFXe.s:173 .bss:00000008 NaviData_TargetHoldTime
C:\Temp/ccQGPFXe.s:179 .bss:00000009 NaviData_WaypointNumber
C:\Temp/ccQGPFXe.s:185 .bss:0000000a NaviData_WaypointIndex
.bss:0000000b search.98
C:\Temp/ccQGPFXe.s:187 .bss:0000000c tmp_max.99
C:\Temp/ccQGPFXe.s:188 .bss:0000000d tmp_min.100
C:\Temp/ccQGPFXe.s:189 .bss:0000000e who.101
C:\Temp/ccQGPFXe.s:194 .text:00000000 GetHottestBl
C:\Temp/ccQGPFXe.s:262 .progmem.data:0000028c __c.97
C:\Temp/ccQGPFXe.s:267 .text:0000008c Hott_ClearLine
C:\Temp/ccQGPFXe.s:190 .bss:0000000f old_status.95
C:\Temp/ccQGPFXe.s:295 .bss:00000010 repeat.96
C:\Temp/ccQGPFXe.s:299 .text:000000bc HoTT_Waring
C:\Temp/ccQGPFXe.s:396 .text:0000016e NC_Fills_HoTT_Telemety
*COM*:0000002c VarioPacket
*COM*:0000002c GPSPacket
*COM*:0000002c ElectricAirPacket
*COM*:0000002c HoTTGeneral
C:\Temp/ccQGPFXe.s:469 .text:000001e0 BuildHoTT_Vario
C:\Temp/ccQGPFXe.s:577 .text:000002aa HoTT_Telemety
C:\Temp/ccQGPFXe.s:296 .bss:00000012 line.0
C:\Temp/ccQGPFXe.s:1157 .bss:00000013 page.1
C:\Temp/ccQGPFXe.s:1158 .bss:00000014 show_current.2
C:\Temp/ccQGPFXe.s:1159 .bss:00000015 show_mag.3
C:\Temp/ccQGPFXe.s:1160 .bss:00000016 show_poti.4
C:\Temp/ccQGPFXe.s:1165 .progmem.data:000002a2 __c.5
C:\Temp/ccQGPFXe.s:1169 .progmem.data:000002af __c.6
C:\Temp/ccQGPFXe.s:1173 .progmem.data:000002bc __c.7
C:\Temp/ccQGPFXe.s:1177 .progmem.data:000002c8 __c.8
C:\Temp/ccQGPFXe.s:1181 .progmem.data:000002d3 __c.9
C:\Temp/ccQGPFXe.s:1185 .progmem.data:000002dd __c.10
C:\Temp/ccQGPFXe.s:1189 .progmem.data:000002ea __c.11
C:\Temp/ccQGPFXe.s:1193 .progmem.data:000002f7 __c.12
C:\Temp/ccQGPFXe.s:1197 .progmem.data:00000302 __c.13
C:\Temp/ccQGPFXe.s:1201 .progmem.data:00000304 __c.14
C:\Temp/ccQGPFXe.s:1205 .progmem.data:00000306 __c.15
C:\Temp/ccQGPFXe.s:1209 .progmem.data:0000030e __c.16
C:\Temp/ccQGPFXe.s:1213 .progmem.data:00000316 __c.17
C:\Temp/ccQGPFXe.s:1217 .progmem.data:00000322 __c.18
C:\Temp/ccQGPFXe.s:1221 .progmem.data:00000324 __c.19
C:\Temp/ccQGPFXe.s:1225 .progmem.data:00000326 __c.20
C:\Temp/ccQGPFXe.s:1229 .progmem.data:00000328 __c.21
C:\Temp/ccQGPFXe.s:1233 .progmem.data:0000033e __c.22
C:\Temp/ccQGPFXe.s:1237 .progmem.data:00000354 __c.23
C:\Temp/ccQGPFXe.s:1241 .progmem.data:00000356 __c.24
C:\Temp/ccQGPFXe.s:1245 .progmem.data:0000035f __c.25
C:\Temp/ccQGPFXe.s:1249 .progmem.data:00000369 __c.26
C:\Temp/ccQGPFXe.s:1253 .progmem.data:0000036c __c.27
C:\Temp/ccQGPFXe.s:1257 .progmem.data:0000036f __c.28
C:\Temp/ccQGPFXe.s:1261 .progmem.data:00000372 __c.29
C:\Temp/ccQGPFXe.s:1265 .progmem.data:0000037d __c.30
C:\Temp/ccQGPFXe.s:1269 .progmem.data:00000389 __c.31
C:\Temp/ccQGPFXe.s:1273 .progmem.data:00000399 __c.32
C:\Temp/ccQGPFXe.s:1277 .progmem.data:000003b2 __c.33
C:\Temp/ccQGPFXe.s:1281 .progmem.data:000003bd __c.34
C:\Temp/ccQGPFXe.s:1285 .progmem.data:000003c3 __c.35
C:\Temp/ccQGPFXe.s:1289 .progmem.data:000003d6 __c.36
C:\Temp/ccQGPFXe.s:1293 .progmem.data:000003ec __c.37
C:\Temp/ccQGPFXe.s:1297 .progmem.data:00000407 __c.38
C:\Temp/ccQGPFXe.s:1301 .progmem.data:00000422 __c.39
C:\Temp/ccQGPFXe.s:1305 .progmem.data:0000042c __c.40
C:\Temp/ccQGPFXe.s:1309 .progmem.data:00000435 __c.41
C:\Temp/ccQGPFXe.s:1313 .progmem.data:0000043e __c.42
C:\Temp/ccQGPFXe.s:1317 .progmem.data:00000448 __c.43
C:\Temp/ccQGPFXe.s:1321 .progmem.data:0000044b __c.44
C:\Temp/ccQGPFXe.s:1325 .progmem.data:00000462 __c.45
C:\Temp/ccQGPFXe.s:1329 .progmem.data:00000476 __c.46
C:\Temp/ccQGPFXe.s:1333 .progmem.data:00000479 __c.47
C:\Temp/ccQGPFXe.s:1337 .progmem.data:0000047c __c.48
C:\Temp/ccQGPFXe.s:1341 .progmem.data:0000048f __c.49
C:\Temp/ccQGPFXe.s:1345 .progmem.data:00000495 __c.50
C:\Temp/ccQGPFXe.s:1349 .progmem.data:0000049b __c.51
C:\Temp/ccQGPFXe.s:1353 .progmem.data:000004a1 __c.52
C:\Temp/ccQGPFXe.s:1357 .progmem.data:000004b7 __c.53
C:\Temp/ccQGPFXe.s:1361 .progmem.data:000004d4 __c.54
C:\Temp/ccQGPFXe.s:1365 .progmem.data:000004e7 __c.55
C:\Temp/ccQGPFXe.s:1369 .progmem.data:000004f6 __c.56
C:\Temp/ccQGPFXe.s:1373 .progmem.data:00000513 __c.57
C:\Temp/ccQGPFXe.s:1377 .progmem.data:00000526 __c.58
C:\Temp/ccQGPFXe.s:1381 .progmem.data:00000539 __c.59
C:\Temp/ccQGPFXe.s:1385 .progmem.data:00000544 __c.60
C:\Temp/ccQGPFXe.s:1389 .progmem.data:0000054a __c.61
C:\Temp/ccQGPFXe.s:1393 .progmem.data:0000055d __c.62
C:\Temp/ccQGPFXe.s:1397 .progmem.data:00000573 __c.63
C:\Temp/ccQGPFXe.s:1401 .progmem.data:00000582 __c.64
C:\Temp/ccQGPFXe.s:1405 .progmem.data:00000593 __c.65
C:\Temp/ccQGPFXe.s:1409 .progmem.data:00000598 __c.66
C:\Temp/ccQGPFXe.s:1413 .progmem.data:000005a2 __c.67
C:\Temp/ccQGPFXe.s:1417 .progmem.data:000005a9 __c.68
C:\Temp/ccQGPFXe.s:1421 .progmem.data:000005b0 __c.69
C:\Temp/ccQGPFXe.s:1425 .progmem.data:000005b6 __c.70
C:\Temp/ccQGPFXe.s:1429 .progmem.data:000005bc __c.71
C:\Temp/ccQGPFXe.s:1433 .progmem.data:000005c5 __c.72
C:\Temp/ccQGPFXe.s:1437 .progmem.data:000005c9 __c.73
C:\Temp/ccQGPFXe.s:1441 .progmem.data:000005d2 __c.74
C:\Temp/ccQGPFXe.s:1445 .progmem.data:000005d9 __c.75
C:\Temp/ccQGPFXe.s:1449 .progmem.data:000005e0 __c.76
C:\Temp/ccQGPFXe.s:1453 .progmem.data:000005e7 __c.77
C:\Temp/ccQGPFXe.s:1457 .progmem.data:000005ec __c.78
C:\Temp/ccQGPFXe.s:1461 .progmem.data:000005f5 __c.79
C:\Temp/ccQGPFXe.s:1465 .progmem.data:000005fc __c.80
C:\Temp/ccQGPFXe.s:1469 .progmem.data:00000603 __c.81
C:\Temp/ccQGPFXe.s:1473 .progmem.data:0000060a __c.82
C:\Temp/ccQGPFXe.s:1477 .progmem.data:00000611 __c.83
C:\Temp/ccQGPFXe.s:1481 .progmem.data:0000061c __c.84
C:\Temp/ccQGPFXe.s:1485 .progmem.data:00000626 __c.85
C:\Temp/ccQGPFXe.s:1489 .progmem.data:0000062a __c.86
C:\Temp/ccQGPFXe.s:1493 .progmem.data:00000630 __c.87
C:\Temp/ccQGPFXe.s:1497 .progmem.data:00000644 __c.88
C:\Temp/ccQGPFXe.s:1501 .progmem.data:00000653 __c.89
C:\Temp/ccQGPFXe.s:1505 .progmem.data:00000667 __c.90
C:\Temp/ccQGPFXe.s:1509 .progmem.data:0000067b __c.91
C:\Temp/ccQGPFXe.s:1513 .progmem.data:0000068a __c.92
C:\Temp/ccQGPFXe.s:1517 .progmem.data:00000694 __c.93
C:\Temp/ccQGPFXe.s:1521 .progmem.data:00000699 __c.94
C:\Temp/ccQGPFXe.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_8-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_8-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_8-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_8-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_8-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_8-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/cc2MoEZU.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc2MoEZU.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc2MoEZU.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc2MoEZU.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc2MoEZU.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc2MoEZU.s:14 .data:00000000 JetiExData
C:\Temp/cc2MoEZU.s:99 .progmem.data:00000000 JETI_CODE
.bss:00000000 JetiVarioMeter.0
C:\Temp/cc2MoEZU.s:157 .text:00000000 BuildJeti_Vario
C:\Temp/cc2MoEZU.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_8-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_8-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_8-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/ccRnyKs8.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccRnyKs8.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccRnyKs8.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccRnyKs8.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccRnyKs8.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccRnyKs8.s:14 .progmem.data:00000000 JetiBox_Menu
C:\Temp/ccRnyKs8.s:18 .text:00000000 Menu_Status
C:\Temp/ccRnyKs8.s:28 .text:00000002 Menu_Temperature
C:\Temp/ccRnyKs8.s:38 .text:00000004 Menu_Battery
C:\Temp/ccRnyKs8.s:48 .text:00000006 Magnet_Values
C:\Temp/ccRnyKs8.s:58 .text:00000008 Menu_PosInfo
C:\Temp/ccRnyKs8.s:68 .text:0000000a JetiBox_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_8-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_8-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_8-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/ccdVNU0G.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccdVNU0G.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccdVNU0G.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccdVNU0G.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccdVNU0G.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccdVNU0G.s:14 .data:00000000 J17Mask
C:\Temp/ccdVNU0G.s:21 .bss:00000000 J17Blinkcount
C:\Temp/ccdVNU0G.s:27 .data:00000001 J16Mask
C:\Temp/ccdVNU0G.s:34 .bss:00000001 J16Blinkcount
C:\Temp/ccdVNU0G.s:40 .bss:00000002 LED2_Timing
C:\Temp/ccdVNU0G.s:46 .bss:00000004 LED1_Timing
C:\Temp/ccdVNU0G.s:51 .text:00000000 LED_Init
.bss:00000006 delay.0
C:\Temp/ccdVNU0G.s:69 .bss:00000007 J16Bitmask.1
C:\Temp/ccdVNU0G.s:70 .bss:00000008 J17Bitmask.2
C:\Temp/ccdVNU0G.s:71 .bss:00000009 J16Warn.3
C:\Temp/ccdVNU0G.s:72 .bss:0000000a J17Warn.4
C:\Temp/ccdVNU0G.s:73 .bss:0000000b from_nc.5
C:\Temp/ccdVNU0G.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_8-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_8-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_8-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_8-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/ccwmKNPQ.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccwmKNPQ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccwmKNPQ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccwmKNPQ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccwmKNPQ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccwmKNPQ.s:15 .bss:00000000 JetiBeep
C:\Temp/ccwmKNPQ.s:21 .bss:00000001 FoundMotors
C:\Temp/ccwmKNPQ.s:27 .bss:00000002 FlugSekunden
C:\Temp/ccwmKNPQ.s:33 .bss:00000004 FlugMinutenGesamt
C:\Temp/ccwmKNPQ.s:39 .bss:00000006 FlugMinuten
C:\Temp/ccwmKNPQ.s:45 .data:00000000 BattLowVoltageWarning
C:\Temp/ccwmKNPQ.s:50 .data:00000001 PlatinenVersion
C:\Temp/ccwmKNPQ.s:57 .bss:00000008 DisableRcOffBeeping
C:\Temp/ccwmKNPQ.s:62 .progmem.data:00000000 __c.11
C:\Temp/ccwmKNPQ.s:67 .text:00000000 PrintLine
*COM*:00000002 _printf_P
C:\Temp/ccwmKNPQ.s:93 .data:00000002 stick.10
C:\Temp/ccwmKNPQ.s:98 .text:00000024 CalMk3Mag
C:\Temp/ccwmKNPQ.s:152 .progmem.data:00000026 __c.7
C:\Temp/ccwmKNPQ.s:156 .progmem.data:0000002e __c.8
C:\Temp/ccwmKNPQ.s:160 .progmem.data:00000039 __c.9
C:\Temp/ccwmKNPQ.s:165 .text:0000008e LipoDetection
C:\Temp/ccwmKNPQ.s:302 .progmem.data:0000004d __c.0
C:\Temp/ccwmKNPQ.s:306 .progmem.data:0000005f __c.1
C:\Temp/ccwmKNPQ.s:310 .progmem.data:00000062 __c.2
C:\Temp/ccwmKNPQ.s:314 .progmem.data:00000080 __c.3
C:\Temp/ccwmKNPQ.s:318 .progmem.data:000000a0 __c.4
C:\Temp/ccwmKNPQ.s:322 .progmem.data:000000a5 __c.5
.bss:00000009 second.6
C:\Temp/ccwmKNPQ.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_8-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_8-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_8-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_8-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/cchO2QcH.s:3 *ABS*:0000003f __SREG__
C:\Temp/cchO2QcH.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cchO2QcH.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cchO2QcH.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cchO2QcH.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cchO2QcH.s:15 .bss:00000000 RemoteKeys
C:\Temp/cchO2QcH.s:21 .bss:00000001 MenuePunkt
C:\Temp/cchO2QcH.s:27 .data:00000000 MaxMenue
C:\Temp/cchO2QcH.s:34 .bss:00000002 DispPtr
C:\Temp/cchO2QcH.s:39 .text:00000000 LcdClear
*COM*:00000050 DisplayBuff
C:\Temp/cchO2QcH.s:58 .text:00000012 Menu_Putchar
C:\Temp/cchO2QcH.s:81 .progmem.data:00000000 __c.0
C:\Temp/cchO2QcH.s:85 .progmem.data:00000005 __c.1
C:\Temp/cchO2QcH.s:89 .progmem.data:0000000a __c.2
C:\Temp/cchO2QcH.s:93 .progmem.data:0000001a __c.3
C:\Temp/cchO2QcH.s:97 .progmem.data:00000032 __c.4
C:\Temp/cchO2QcH.s:101 .progmem.data:00000040 __c.5
C:\Temp/cchO2QcH.s:105 .progmem.data:0000004d __c.6
C:\Temp/cchO2QcH.s:109 .progmem.data:00000055 __c.7
C:\Temp/cchO2QcH.s:113 .progmem.data:0000006c __c.8
C:\Temp/cchO2QcH.s:117 .progmem.data:00000081 __c.9
C:\Temp/cchO2QcH.s:121 .progmem.data:0000008e __c.10
C:\Temp/cchO2QcH.s:125 .progmem.data:0000009b __c.11
C:\Temp/cchO2QcH.s:129 .progmem.data:000000a8 __c.12
C:\Temp/cchO2QcH.s:133 .progmem.data:000000b5 __c.13
C:\Temp/cchO2QcH.s:137 .progmem.data:000000c2 __c.14
C:\Temp/cchO2QcH.s:141 .progmem.data:000000d1 __c.15
C:\Temp/cchO2QcH.s:145 .progmem.data:000000da __c.16
C:\Temp/cchO2QcH.s:149 .progmem.data:000000e7 __c.17
C:\Temp/cchO2QcH.s:153 .progmem.data:000000f6 __c.18
C:\Temp/cchO2QcH.s:157 .progmem.data:00000105 __c.19
C:\Temp/cchO2QcH.s:161 .progmem.data:00000114 __c.20
C:\Temp/cchO2QcH.s:165 .progmem.data:00000126 __c.21
C:\Temp/cchO2QcH.s:169 .progmem.data:00000136 __c.22
C:\Temp/cchO2QcH.s:173 .progmem.data:00000146 __c.23
C:\Temp/cchO2QcH.s:177 .progmem.data:00000156 __c.24
C:\Temp/cchO2QcH.s:181 .progmem.data:00000166 __c.25
C:\Temp/cchO2QcH.s:185 .progmem.data:00000174 __c.26
C:\Temp/cchO2QcH.s:189 .progmem.data:00000185 __c.27
C:\Temp/cchO2QcH.s:193 .progmem.data:00000196 __c.28
C:\Temp/cchO2QcH.s:197 .progmem.data:000001a4 __c.29
C:\Temp/cchO2QcH.s:201 .progmem.data:000001b6 __c.30
C:\Temp/cchO2QcH.s:205 .progmem.data:000001c8 __c.31
C:\Temp/cchO2QcH.s:209 .progmem.data:000001d7 __c.32
C:\Temp/cchO2QcH.s:213 .progmem.data:000001eb __c.33
C:\Temp/cchO2QcH.s:217 .progmem.data:000001ff __c.34
C:\Temp/cchO2QcH.s:221 .progmem.data:00000213 __c.35
C:\Temp/cchO2QcH.s:225 .progmem.data:00000220 __c.36
C:\Temp/cchO2QcH.s:229 .progmem.data:0000022f __c.37
C:\Temp/cchO2QcH.s:233 .progmem.data:0000023e __c.38
C:\Temp/cchO2QcH.s:237 .progmem.data:0000024d __c.39
C:\Temp/cchO2QcH.s:241 .progmem.data:00000261 __c.40
C:\Temp/cchO2QcH.s:245 .progmem.data:00000275 __c.41
C:\Temp/cchO2QcH.s:249 .progmem.data:00000285 __c.42
C:\Temp/cchO2QcH.s:253 .progmem.data:00000297 __c.43
C:\Temp/cchO2QcH.s:257 .progmem.data:000002a0 __c.44
C:\Temp/cchO2QcH.s:261 .progmem.data:000002b0 __c.45
C:\Temp/cchO2QcH.s:265 .progmem.data:000002c0 __c.46
C:\Temp/cchO2QcH.s:269 .progmem.data:000002d0 __c.47
C:\Temp/cchO2QcH.s:273 .progmem.data:000002d8 __c.48
C:\Temp/cchO2QcH.s:277 .progmem.data:000002e6 __c.49
C:\Temp/cchO2QcH.s:281 .progmem.data:000002f4 __c.50
C:\Temp/cchO2QcH.s:285 .progmem.data:00000302 __c.51
C:\Temp/cchO2QcH.s:289 .progmem.data:0000030f __c.52
C:\Temp/cchO2QcH.s:293 .progmem.data:0000031c __c.53
C:\Temp/cchO2QcH.s:297 .progmem.data:00000324 __c.54
C:\Temp/cchO2QcH.s:301 .progmem.data:00000332 __c.55
C:\Temp/cchO2QcH.s:305 .progmem.data:00000340 __c.56
C:\Temp/cchO2QcH.s:309 .progmem.data:0000034e __c.57
C:\Temp/cchO2QcH.s:313 .progmem.data:0000035e __c.58
C:\Temp/cchO2QcH.s:317 .progmem.data:0000036f __c.59
C:\Temp/cchO2QcH.s:321 .progmem.data:0000037e __c.60
C:\Temp/cchO2QcH.s:325 .progmem.data:0000038f __c.61
C:\Temp/cchO2QcH.s:329 .progmem.data:0000039e __c.62
C:\Temp/cchO2QcH.s:333 .progmem.data:000003b2 __c.63
C:\Temp/cchO2QcH.s:337 .progmem.data:000003c6 __c.64
C:\Temp/cchO2QcH.s:341 .progmem.data:000003d7 __c.65
C:\Temp/cchO2QcH.s:345 .progmem.data:000003da __c.66
C:\Temp/cchO2QcH.s:349 .progmem.data:000003dd __c.67
C:\Temp/cchO2QcH.s:353 .progmem.data:000003e0 __c.68
C:\Temp/cchO2QcH.s:357 .progmem.data:000003ee __c.69
C:\Temp/cchO2QcH.s:361 .progmem.data:000003fb __c.70
C:\Temp/cchO2QcH.s:365 .progmem.data:00000408 __c.71
C:\Temp/cchO2QcH.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_8-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_8-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_8-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/ccllVgZZ.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccllVgZZ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccllVgZZ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccllVgZZ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccllVgZZ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccllVgZZ.s:14 .progmem.data:00000000 pgm_sinlookup
C:\Temp/ccllVgZZ.s:109 .text:00000000 c_sin_8192
C:\Temp/ccllVgZZ.s:203 .text:00000098 c_cos_8192
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
/branches/v0.90d_Ernstl_8-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_8-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_8-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_8-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_8-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/ccszG7xd.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccszG7xd.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccszG7xd.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccszG7xd.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccszG7xd.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccszG7xd.s:14 .data:00000000 PPM_Neutral
C:\Temp/ccszG7xd.s:19 .data:00000002 NewPpmData
C:\Temp/ccszG7xd.s:26 .bss:00000000 tmpChannels
C:\Temp/ccszG7xd.s:31 .text:00000000 rc_sum_init
*COM*:00000034 PPM_diff
*COM*:00000034 PPM_in
.bss:00000001 AltICR.0
C:\Temp/ccszG7xd.s:76 .bss:00000003 index.1
C:\Temp/ccszG7xd.s:77 .bss:00000005 AltICR.2
C:\Temp/ccszG7xd.s:78 .bss:00000007 ppm_in.3
C:\Temp/ccszG7xd.s:79 .bss:00000021 ppm_diff.4
C:\Temp/ccszG7xd.s:80 .bss:0000003b old_ppm_in.5
C:\Temp/ccszG7xd.s:81 .bss:00000055 old_ppm_diff.6
C:\Temp/ccszG7xd.s:82 .bss:0000006f index.7
C:\Temp/ccszG7xd.s:83 .bss:00000070 okay_cnt.8
C:\Temp/ccszG7xd.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_8-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_8-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_8-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/cc09pIFE.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc09pIFE.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc09pIFE.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc09pIFE.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc09pIFE.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc09pIFE.s:15 .bss:00000000 NewSBusData
C:\Temp/cc09pIFE.s:20 .text:00000000 SbusUartInit
*COM*:00000019 sBusBuffer
.bss:00000001 ptr.1
C:\Temp/cc09pIFE.s:95 .text:000000ba SbusParser
C:\Temp/cc09pIFE.s:92 .bss:00000002 load.0
C:\Temp/cc09pIFE.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_8-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_8-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_8-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/cctVinAt.s:3 *ABS*:0000003f __SREG__
C:\Temp/cctVinAt.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cctVinAt.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cctVinAt.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cctVinAt.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cctVinAt.s:15 .bss:00000000 MagVec
C:\Temp/cctVinAt.s:21 .bss:00000006 POI_KameraNick
C:\Temp/cctVinAt.s:27 .bss:00000008 NC_To_FC_MaxAltitude
C:\Temp/cctVinAt.s:33 .bss:00000009 NC_To_FC_Flags
C:\Temp/cctVinAt.s:39 .bss:0000000a EarthMagneticInclinationTheoretic
C:\Temp/cctVinAt.s:45 .bss:0000000b EarthMagneticInclination
C:\Temp/cctVinAt.s:51 .bss:0000000c EarthMagneticField
C:\Temp/cctVinAt.s:57 .data:00000000 NC_GPS_ModeCharacter
C:\Temp/cctVinAt.s:64 .bss:0000000d NC_ErrorCode
C:\Temp/cctVinAt.s:70 .bss:0000000e SPI_CommandCounter
C:\Temp/cctVinAt.s:76 .data:00000001 SPI_CommandSequence
C:\Temp/cctVinAt.s:91 .data:0000000c NaviDataOkay
C:\Temp/cctVinAt.s:98 .bss:0000000f FromNC_Rotate_S
C:\Temp/cctVinAt.s:104 .data:0000000d FromNC_Rotate_C
C:\Temp/cctVinAt.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/cctVinAt.s:139 .bss:00000011 rxchksum.3
C:\Temp/cctVinAt.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/cctVinAt.s:140 .bss:00000012 motorindex.0
C:\Temp/cctVinAt.s:286 .data:0000000e oldcommand.1
C:\Temp/cctVinAt.s:291 .text:00000158 UpdateSPI_Buffer
*COM*:00000005 NC_Version
*COM*:00000008 GPSInfo
C:\Temp/cctVinAt.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_8-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_8-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_8-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/cchGLUCl.s:3 *ABS*:0000003f __SREG__
C:\Temp/cchGLUCl.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cchGLUCl.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cchGLUCl.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cchGLUCl.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cchGLUCl.s:15 .bss:00000000 ServoRollValue
C:\Temp/cchGLUCl.s:21 .bss:00000002 ServoNickValue
C:\Temp/cchGLUCl.s:27 .data:00000000 NickServoValue
C:\Temp/cchGLUCl.s:32 .data:00000002 BeepMuster
C:\Temp/cchGLUCl.s:37 .data:00000004 ServoRollOffset
C:\Temp/cchGLUCl.s:42 .data:00000006 ServoNickOffset
C:\Temp/cchGLUCl.s:49 .bss:00000004 RemainingPulse
C:\Temp/cchGLUCl.s:55 .data:00000008 CalculateServoSignals
C:\Temp/cchGLUCl.s:62 .bss:00000006 ServoActive
C:\Temp/cchGLUCl.s:68 .bss:00000007 SendSPI
C:\Temp/cchGLUCl.s:74 .bss:00000008 beeptime
C:\Temp/cchGLUCl.s:80 .bss:0000000a cntKompass
C:\Temp/cchGLUCl.s:86 .bss:0000000c UpdateMotor
C:\Temp/cchGLUCl.s:92 .bss:0000000d CountMilliseconds
C:\Temp/cchGLUCl.s:97 .data:00000009 cnt_1ms.3
.bss:0000000f cnt.4
C:\Temp/cchGLUCl.s:99 .bss:00000010 compass_active.5
C:\Temp/cchGLUCl.s:104 .text:00000000 __vector_18
C:\Temp/cchGLUCl.s:309 .text:000001e6 SetDelay
C:\Temp/cchGLUCl.s:325 .text:000001f8 CheckDelay
C:\Temp/cchGLUCl.s:344 .text:00000210 Delay_ms
C:\Temp/cchGLUCl.s:365 .text:0000022a Delay_ms_Mess
C:\Temp/cchGLUCl.s:395 .text:0000025a TIMER2_Init
C:\Temp/cchGLUCl.s:437 .text:000002b8 Timer_Init
*COM*:00000002 tim_main
C:\Temp/cchGLUCl.s:464 .text:000002e6 CalcNickServoValue
C:\Temp/cchGLUCl.s:530 .text:0000036a CalculateServo
C:\Temp/cchGLUCl.s:100 .bss:00000011 PulseOutput.0
C:\Temp/cchGLUCl.s:1019 .bss:00000012 ServoFrameTime.1
C:\Temp/cchGLUCl.s:1020 .bss:00000014 ServoIndex.2
C:\Temp/cchGLUCl.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_8-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_8-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_8-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/cczXZpXb.s:3 *ABS*:0000003f __SREG__
C:\Temp/cczXZpXb.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cczXZpXb.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cczXZpXb.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cczXZpXb.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cczXZpXb.s:15 .bss:00000000 BLConfig_ReadMask
C:\Temp/cczXZpXb.s:21 .bss:00000002 BLConfig_WriteMask
C:\Temp/cczXZpXb.s:27 .bss:00000004 BLFlags
C:\Temp/cczXZpXb.s:33 .bss:00000005 MissingMotor
C:\Temp/cczXZpXb.s:39 .data:00000000 I2CTimeout
C:\Temp/cczXZpXb.s:46 .bss:00000006 I2C_TransferActive
C:\Temp/cczXZpXb.s:52 .bss:00000007 motor_read
C:\Temp/cczXZpXb.s:58 .bss:00000008 motor_write
C:\Temp/cczXZpXb.s:64 .bss:00000009 dac_channel
C:\Temp/cczXZpXb.s:70 .bss:0000000a twi_state
C:\Temp/cczXZpXb.s:75 .text:00000000 I2C_Init
*COM*:00000060 Motor
C:\Temp/cczXZpXb.s:126 .text:00000054 I2C_Reset
.bss:0000000b missing_motor.0
C:\Temp/cczXZpXb.s:153 .bss:0000000c motor_read_temperature.1
C:\Temp/cczXZpXb.s:154 .bss:0000000d pBuff.2
C:\Temp/cczXZpXb.s:155 .bss:0000000f BuffLen.3
C:\Temp/cczXZpXb.s:159 .text:00000098 __vector_26
*COM*:00000008 BLConfig
C:\Temp/cczXZpXb.s:853 .text:00000698 I2C_WriteBLConfig
C:\Temp/cczXZpXb.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_8-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
"YawGyro ", //4
"Height Value ", //5
"AccZ ", //6
"Voltage [0.1V] ", //7
"Motor 1 ", //8
"Motor 2 ", //9
"Motor 3 ", //10
"Motor 4 ", //11
"Motor 5 ", //12
"Motor 6 ", //13
"Motor 7 ", //14
"Motor 8 ", //15
"Receiver Level ", //16
"Gyro Compass ", //17
"Current [0.1A] ", //18
"Capacity [mAh] ", //19
"Servo ", //20
"Compass Value ", //21
"I2C-Error ", //22
"23 ", //23
"GPS_Nick ", //24
"GPS_Roll ", //25
"26 ", //26
"27 ", //27
"28 ", //28
"29 ", //29
"30 ", //30
"31 " //31
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ 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_8-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_8-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 5961 7747 .ascii "YawGyro "
19 7972 6F20
19 2020 2020
19 2020 2020
20 0050 4865 6967 .ascii "Height Value "
20 6874 2056
20 616C 7565
20 2020 2020
21 0060 4163 635A .ascii "AccZ "
21 2020 2020
21 2020 2020
21 2020 2020
22 0070 566F 6C74 .ascii "Voltage [0.1V] "
22 6167 6520
22 5B30 2E31
22 565D 2020
23 0080 4D6F 746F .ascii "Motor 1 "
23 7220 3120
23 2020 2020
23 2020 2020
24 0090 4D6F 746F .ascii "Motor 2 "
24 7220 3220
24 2020 2020
24 2020 2020
25 00a0 4D6F 746F .ascii "Motor 3 "
25 7220 3320
25 2020 2020
25 2020 2020
26 00b0 4D6F 746F .ascii "Motor 4 "
26 7220 3420
26 2020 2020
26 2020 2020
27 00c0 4D6F 746F .ascii "Motor 5 "
27 7220 3520
27 2020 2020
27 2020 2020
28 00d0 4D6F 746F .ascii "Motor 6 "
28 7220 3620
28 2020 2020
28 2020 2020
29 00e0 4D6F 746F .ascii "Motor 7 "
29 7220 3720
29 2020 2020
29 2020 2020
30 00f0 4D6F 746F .ascii "Motor 8 "
30 7220 3820
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 4375 7272 .ascii "Current [0.1A] "
33 656E 7420
33 5B30 2E31
33 415D 2020
34 0130 4361 7061 .ascii "Capacity [mAh] "
34 6369 7479
34 205B 6D41
34 685D 2020
35 0140 5365 7276 .ascii "Servo "
35 6F20 2020
35 2020 2020
35 2020 2020
36 0150 436F 6D70 .ascii "Compass Value "
36 6173 7320
36 5661 6C75
36 6520 2020
37 0160 4932 432D .ascii "I2C-Error "
37 4572 726F
37 7220 2020
37 2020 2020
38 0170 3233 2020 .ascii "23 "
38 2020 2020
38 2020 2020
38 2020 2020
39 0180 4750 535F .ascii "GPS_Nick "
39 4E69 636B
39 2020 2020
39 2020 2020
40 0190 4750 535F .ascii "GPS_Roll "
40 526F 6C6C
40 2020 2020
40 2020 2020
41 01a0 3236 2020 .ascii "26 "
41 2020 2020
41 2020 2020
41 2020 2020
42 01b0 3237 2020 .ascii "27 "
42 2020 2020
42 2020 2020
42 2020 2020
43 01c0 3238 2020 .ascii "28 "
43 2020 2020
43 2020 2020
43 2020 2020
44 01d0 3239 2020 .ascii "29 "
44 2020 2020
44 2020 2020
44 2020 2020
45 01e0 3330 2020 .ascii "30 "
45 2020 2020
45 2020 2020
45 2020 2020
46 01f0 3331 2020 .ascii "31 "
46 2020 2020
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/cci5RUuf.s:3 *ABS*:0000003f __SREG__
C:\Temp/cci5RUuf.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cci5RUuf.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cci5RUuf.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cci5RUuf.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cci5RUuf.s:14 .progmem.data:00000000 ANALOG_TEXT
C:\Temp/cci5RUuf.s:52 .bss:00000000 ReceiverUpdateModeActive
C:\Temp/cci5RUuf.s:58 .bss:00000001 AboTimeOut
C:\Temp/cci5RUuf.s:64 .bss:00000003 Display_Interval
C:\Temp/cci5RUuf.s:70 .bss:00000005 Intervall3D
C:\Temp/cci5RUuf.s:76 .bss:00000007 DebugDataIntervall
C:\Temp/cci5RUuf.s:82 .data:00000000 MeineSlaveAdresse
C:\Temp/cci5RUuf.s:87 .data:00000001 PcZugriff
C:\Temp/cci5RUuf.s:92 .data:00000002 DebugTextAnforderung
C:\Temp/cci5RUuf.s:99 .bss:00000009 PC_MotortestActive
C:\Temp/cci5RUuf.s:105 .bss:0000000a PC_DebugTimeout
C:\Temp/cci5RUuf.s:111 .bss:0000000b RxDataLen
C:\Temp/cci5RUuf.s:117 .bss:0000000c pRxData
C:\Temp/cci5RUuf.s:123 .bss:0000000e AnzahlEmpfangsBytes
C:\Temp/cci5RUuf.s:129 .bss:0000000f CntCrcError
C:\Temp/cci5RUuf.s:135 .data:00000003 UebertragungAbgeschlossen
C:\Temp/cci5RUuf.s:142 .bss:00000010 NeueKoordinateEmpfangen
C:\Temp/cci5RUuf.s:148 .bss:00000011 NeuerDatensatzEmpfangen
C:\Temp/cci5RUuf.s:154 .bss:00000012 SioTmp
C:\Temp/cci5RUuf.s:160 .bss:00000013 DisplayLine
C:\Temp/cci5RUuf.s:166 .bss:00000014 GetPPMChannelAnforderung
C:\Temp/cci5RUuf.s:172 .bss:00000015 GetVersionAnforderung
C:\Temp/cci5RUuf.s:178 .bss:00000016 DebugDataAnforderung
C:\Temp/cci5RUuf.s:184 .bss:00000017 DebugDisplayAnforderung
C:\Temp/cci5RUuf.s:190 .bss:00000018 DebugDisplayAnforderung1
C:\Temp/cci5RUuf.s:196 .bss:00000019 GetExternalControl
.bss:0000001a ptr.6
C:\Temp/cci5RUuf.s:202 .text:00000000 __vector_22
*COM*:000000af TxdBuffer
C:\Temp/cci5RUuf.s:198 .bss:0000001c crc.1
C:\Temp/cci5RUuf.s:256 .bss:0000001e crc1.2
C:\Temp/cci5RUuf.s:257 .bss:0000001f crc2.3
C:\Temp/cci5RUuf.s:258 .bss:00000020 buf_ptr.4
C:\Temp/cci5RUuf.s:259 .bss:00000021 UartState.5
C:\Temp/cci5RUuf.s:263 .text:0000006c __vector_20
*COM*:000000af RxdBuffer
C:\Temp/cci5RUuf.s:494 .text:00000260 AddCRC
C:\Temp/cci5RUuf.s:550 .text:000002c0 SendOutData
C:\Temp/cci5RUuf.s:750 .text:00000438 Decode64
C:\Temp/cci5RUuf.s:863 .text:0000050c BearbeiteRxDaten
*COM*:00000010 MotorTest
*COM*:0000000a VersionInfo
*COM*:0000000b ExternControl
*COM*:00000001 ConfirmFrame
*COM*:00000002 Timer3D
C:\Temp/cci5RUuf.s:1850 .text:00000dd8 uart_putchar
C:\Temp/cci5RUuf.s:1866 .text:00000de8 UART_Init
*COM*:00000002 Debug_Timer
*COM*:00000002 Kompass_Timer
C:\Temp/cci5RUuf.s:1919 .progmem.data:00000200 __c.0
C:\Temp/cci5RUuf.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_8-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_8-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_8-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/ccEcUCrM.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccEcUCrM.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccEcUCrM.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccEcUCrM.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccEcUCrM.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccEcUCrM.s:13 .text:00000000 User_Receiver_Init
C:\Temp/ccEcUCrM.s:23 .text:00000002 User_RX_Parser
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_8-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_8-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 8-Motoren und Sexpander für DX7
- Aktivierung der Sexpanderunterstützung
- Anzeige von acht Motoren im Koptertool