Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2306 → Rev 2307

/branches/v0.90e_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.90e_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.90e_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/ccmGYt8O.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccmGYt8O.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccmGYt8O.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccmGYt8O.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccmGYt8O.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccmGYt8O.s:15 .bss:00000000 GPS_Aid_StickMultiplikator
C:\Temp/ccmGYt8O.s:21 .bss:00000001 GPS_Roll
C:\Temp/ccmGYt8O.s:27 .bss:00000003 GPS_Nick
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_Ernstl_8-Motoren+Sexpander/Hex-Files/Flight-Ctrl_MEGA1284P_V0_90e_SVN.hex
0,0 → 1,4720
:100000000C94F9080C9448090C9448090C9448097C
:100010000C9448090C9448090C9448090C9448091C
:100020000C9448090C94591C0C9448090C944809E8
:100030000C946A360C9448090C9448090C944809AD
:100040000C9448090C9448090C947C180C944809A9
:100050000C94AA0E0C9448090C94740E0C94480944
:100060000C94491F0C9448090C94F0310C944809E5
:100070000C94948F0C9448090C94C3860C944809F2
:100080000C9448090C9448090C944809701F751F7A
:100090007A1F831F9A1FB11FC11FD11F0C20F5218A
:1000A000B11FB720C820F720152132218C21E7216C
:1000B0000224CF245E25DE251626B926C0282A294B
:1000C000A429ED29372A652A922AF52A3F2B892B64
:1000D000822C0F3243328632F6320E334F330634DF
:1000E000CD34CD34CD34CD34CD34CD34CD34CD3408
:1000F000CD34CD34CD34823484348934A134A33426
:10010000226AE16A666B956ABC6BEC6B566AC46ADC
:10011000C6776478E9784B799F79087A6881897A1B
:10012000BB7ABB7ABB7ABB7ABB7ABB7ABB7ABB7A27
:10013000BB7AE97A647BF97B1E7C617CB97C447D67
:100140002D7E947E947E947E947E947E947E947E86
:10015000947E947ECC7EEA7E0F7F6B7FA77F168095
:100160004380E380688143814381438143814381AC
:10017000438143814381E78DEA8DEA8DEA8DF38DDA
:10018000F68DF98D0B8E088E0A0D3D3D3D3D3D3DB2
: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
:10120000A0E0B1E0E8EFF4E201E00BBF02C007901C
:101210000D92A63DB107D9F71BE0A6EDB2E001C0E3
:101220001D92AE3DB107E1F77AEAE2E0F0E081E23B
:1012300080935700D4907E010894E11CF11C20EFAC
:1012400037EF41E050E087016FE0DA01C9012F5F1D
:101250003F4F4F4F5F4FABBFFC018791F801819328
:101260008F01615067FFF1CFF7016EE08191782720
:101270007095615067FFFACF8889781729F0F7E9F0
:10128000DF1611F40000FECF0E941B0A0C947B9223
:101290000C94000088E891E09F938F9380E695E19D
:1012A0009F938F93E0913D05F0913E0509950F9036
:1012B0000F900F900F90089580918607E82FFF27D9
:1012C000EE0FFF1FE754F74F808191818D5E9F4F96
:1012D00014F010920201808191818A5B9F4FCCF4BF
:1012E000809102018823A9F481E08093020180911A
:1012F00071058F5F80937105853038F088EE93E03B
:1013000090930B0380930A0304C066E970E00E9487
:10131000183A8091710599279093090780930807DF
:1013200008951F93CF93DF93182F882389F08EEAB7
:1013300091E09F938F9380E695E19F938F93E09147
:101340003D05F0913E0509950F900F900F900F907D
:101350008091A907823308F044C084EF91E00E9495
:101360006F19EC01112329F0CE010E94781988230E
:10137000D9F3C2E0D0E026E530E080911F019091E2
:1013800020018217930730F02196255D3F4FC7302B
:10139000D10598F38091A9079927C89F9001C99F0B
:1013A000300DD89F300D1124209300011123D9F066
:1013B00068EC70E08C2F0E94183ADF93CF9386EB95
:1013C00091E09F938F9380E695E19F938F93E091B7
:1013D0003D05F0913E0509958DB79EB706968DBFE8
:1013E00002C080930001112311F1809100016AE095
:1013F0000E94CE91892F99279F938F93809100010E
:101400000E94CE9199279F938F9381EC91E09F93B7
:101410008F9380E695E19F938F93E0913D05F09146
:101420003E0509952DB73EB7285F3F4F2DBFDF9191
:10143000CF911F910895CFEFD0E4DEBFCDBF8824B8
:10144000992414B815B8B7EEEB2EB3E0FB2E2EECB2
:101450003FEFE20EF31EF7FEFACF199B02C085E1C3
:1014600001C086E18093010181E887B93E9A8FEF40
:1014700088B98BE184B981E085B98EE38AB987E4C4
:101480008BB9469A84B7877F84BF8091600088615A
:10149000809360001092600084EC99E090930B03BD
:1014A00080930A0310921604109215041092BE083D
:1014B0001092BD08109218041092170410921A048A
:1014C0001092190420910101243128F084EC94E059
:1014D000A0E0B0E004C08BE095E0A0E0B0E0809335
:1014E0003C0190933D01A0933E01B0933F012A300F
:1014F00011F0243110F0289801C0289A2C3010F0F7
:10150000263111F4299A01C029980E94D8190E9405
:10151000A9190E9468150E9441360E94DA1D81E0D7
:101520000E94A4310E94B4680E946B720E945F8E78
:10153000809101018C3010F0863111F4299A01C09C
:10154000299878940E94C33080914F0382608093E1
:101550004F03109252030E94644584EF91E00E9471
:101560006F197C0180914F0380FD05C0C7010E9467
:1015700078198823B9F385ED91E09F938F93A0E6C6
:10158000AA2EA5E1BA2EBF92AF92E0913D05F0914F
:101590003E05099580EA9FE00E946F197C01C0E03A
:1015A000D0E00F900F900F900F900BE518E0FFE048
:1015B000CF2EF8E0DF2E0E94644580914F0380FD1E
:1015C00005C0C7010E9478198823B9F3F60180810C
:1015D0001816ACF40BC00E94644580914F0380FD47
:1015E00005C0C7010E9478198823B9F3C7010E947A
:1015F0007819882321F4F8018081882364F7F801A1
:10160000808187FF19C02196DF93CF93219787EEC2
:1016100091E09F938F93BF92AF92E0913D05F0913F
:101620003E0509958091D7028F5F8093D7022DB731
:101630003EB72A5F3F4F2DBF219684E090E0C80E51
:10164000D91E085F1F4FCC30D10508F4B4CFC0E0DD
:10165000D0E008E518E0EFE0EE2EE8E0FE2EF8011D
:10166000838187FD1DC0F70180811816CCF4219677
:10167000DF93CF9321978AEE91E09F938F9380E63B
:1016800095E19F938F93E0913D05F0913E0509957B
:1016900082E0809308032DB73EB72A5F3F4F2DBFEE
:1016A000F801838180788383219624E030E0E20E84
:1016B000F31E085F1F4FCC30D10588F20E944A0903
:1016C000909184078091D702981728F4809157054C
:1016D00080618093570588E092E09F938F93C0E6E6
:1016E000D5E1DF93CF93E0913D05F0913E0509955B
:1016F00088EE93E00E946F197C010E94E01D0F901C
:101700000F900F900F90C7010E9478198823D9F38A
:1017100088E292E09F938F93DF93CF93E0913D0512
:10172000F0913E05099580E00E94FC3A809101010C
:101730000F900F900F900F908A3011F0843110F0BD
:10174000289801C0289A80ED97E090930B0380932E
:101750000A0385E5809373058EE090E00E94E72EF2
:101760009927182F00278FE090E00E94E72E080F9E
:10177000111D1093DD020093DC028AE090E00E94CC
:10178000E72E9927182F00278BE090E00E94E72E84
:10179000080F111D1093DB020093DA020F5F1F4F39
:1017A00039F08091DC029091DD028F5F9F4F41F410
:1017B0001092DD021092DC021092DB021092DA022B
:1017C0008091DA029091DB029F938F938091DC02EB
:1017D0009091DD029F938F938DE292E09F938F9380
:1017E000DF93CF93E0913D05F0913E0509950E946E
:1017F000742388E893E19093370180933601C1E028
:10180000C09372058C2F0E9491098091AC070E94B1
:10181000AB8D0E944A0980ED97E00E946F197C0110
:101820008AEF90E00E946F1983E08093E0061092A7
:10183000D6028091F3072DB73EB7285F3F4F2DBFEB
:1018400084FF02C0C093DE028091E002882311F081
:101850004798FECF80910E03882309F43DC2809102
:101860001101882309F438C210920E03809171058A
:10187000882319F00E945C0902C00E94BD480E94A2
:101880006445209101012A3011F0243110F028988C
:1018900001C0289A80910904882331F080910904BD
:1018A0008150809309040EC080916F008062809304
:1018B0006F001092BA081092B9088091570588609D
:1018C000809357058091360190913701019790934D
:1018D0003701809336018091360190913701892B31
:1018E00021F0809150038823C9F1809136019091B5
:1018F0003701892BD9F40E94CE3185E090E0909396
:1019000037018093360180911A0790911B07019649
:1019100090931B0780931A078091570581608093ED
:1019200057058091E10682608093E106809109016C
:1019300090910A018F5F9F4FC1F480910804882322
:10194000A1F088EA91E690930B0380930A0380E864
:1019500090E090930A018093090107C02A3011F0AA
:10196000243110F0289801C0289A0E94178F809186
:101970000E03882309F0B0C180911E05882319F059
:101980000E94EC81A9C180910F01882311F00E946F
:10199000311A0E94AC150E94FA10C7010E947819F2
:1019A000882309F495C184E190E0E80EF91E0E94B5
:1019B000EF198091AC07863019F40E948A7704C031
:1019C000843011F40E94BC8280915003882349F036
:1019D000809157058260809357058091E10682606F
:1019E0000FC080910A0390910B03892B59F48091C9
:1019F000360190913701079728F08091E1068D7F9D
:101A00008093E1068091DE02882361F080910904D1
:101A1000873940F01092DE0288E893E190930B033F
:101A200080930A0380910401882321F081508093E0
:101A300004012EC080937D051092DD031092DC031B
:101A40001092DB031092DA031092D9031092D8039C
:101A5000809109048823E1F48091090190910A01A1
:101A60008F5F9F4FA9F42091DE02223089F088E930
:101A70009AE390930B0380930A0380E09CE0909399
:101A80000A0180930901222319F082E08093DE028B
:101A900080919901893C48F081508093990180910F
:101AA00057058B7F809357053FC080919A09882303
:101AB000F9F08091570584608093570589E0809301
:101AC000E4048091090190910A018F5F9F4F81F496
:101AD00080910804882361F088E99AE390930B03CE
:101AE00080930A0380E098EA90930A0180930901A9
:101AF0001092D6041092D5041092D4041092D304FC
:101B00001092D20410928D091092CC091092CB0938
:101B10001092CE091092CD098FEF9FEF9093CA09D2
:101B20008093C9091092990180910001282F3327D1
:101B300080911F019091200182179307CCF480912E
:101B4000D10380628093D1038091090190910A01B1
:101B50008F5F9F4FC1F480E797E190930B038093D1
:101B60000A0380E093E090930A01809309010BC07F
:101B700080910A0390910B03892B29F48091D10362
:101B80008F7D8093D1030E94AB6D84E08093090325
:101B90008091DF028F5F8093DF02813309F04FC0B5
:101BA0001092DF028091D10381FF0AC08091D80298
:101BB0009091D90201969093D9028093D8023FC0A8
:101BC0005AEA852E55E0952E8091290790912A0793
:101BD0009C01442737FD4095542F80911701909127
:101BE0001801A0911901B0911A01281739074A0765
:101BF0005B0734F48091290790912A0701961BC056
:101C00008091290790912A079C01442737FD409530
:101C1000542F8091170190911801A0911901B09152
:101C20001A0182179307A407B5074CF4809129077E
:101C300090912A07019790932A0780932907089487
:101C4000811C911C32E783163BE0930609F040C0EB
:101C5000882499242091DC023091DD022F5F3F4FD0
:101C60003093DD022093DC028091DA029091DB0256
:101C700001969093DB028093DA02832F9927682FD5
:101C80008EE090E00E94EF2E8091DC029091DD02C8
:101C90009070682F8FE090E00E94EF2E8091DA0222
:101CA0009091DB02892F9927682F8AE090E00E94AB
:101CB000EF2E8091DA029091DB029070682F8BE01A
:101CC00090E00E94EF2E84E190E00E946F197C0169
:101CD0000E94FB6D0E94827280910903882309F0A3
:101CE000B3CD0E94D568B0CD1F920F920FB60F9260
:101CF00011248F939F93EF93FF9380910601882384
:101D0000E1F48091FA029091FB0201969093FB021C
:101D10008093FA02FC01EF5CF94FE081ED3019F09D
:101D20008F3A910539F41092FB021092FA0281E089
:101D300080930601E093C60004C01092FB0210924B
:101D4000FA02FF91EF919F918F910F900FBE0F902C
:101D50001F9018951F920F920FB60F9211242F9378
:101D60003F934F935F936F937F938F939F93AF9323
:101D7000BF93CF93EF93FF9390E08091E002813087
:101D800029F48091C6008093CE00CCC08091E002FF
:101D9000823029F48091C60080938005C3C0809171
:101DA000C6008093F202509100035F3A10F09093C6
:101DB00001038091F2028D3009F065C0809101032A
:101DC000823009F060C090930103852F99278058D5
:101DD0009A4FFC01329740812091FC023091FD0224
:101DE000241B3109DC0111978C91281B3109C90191
:101DF0009F709093FD028093FC0246E09695879534
:101E00004A95E1F7982F935C9093FE022F73307000
:101E1000235C2093FF028081981729F48C91281766
:101E200011F491E006C090E08091EF028F5F809303
:101E3000EF02C091F102CC2309F074C0992309F498
:101E400071C081E08093F102580F5093EE0251501F
:101E5000E52FFF27E058FA4F8DE0808380918205BF
:101E6000823509F05FC00E94742388E190E02CE085
:101E70000FB6F894A895809360000FBE2093600081
:101E8000C09308034FC020910103822F992781300E
:101E90009105F9F0823091051CF4892B21F040C0A6
:101EA000029711F13DC08091F202833239F48091A2
:101EB000F102882319F481E0809301038091F202FA
:101EC0008093800581E0809300038091F20299273E
:101ED00022C02F5F20930103E52FFF27E058FA4F20
:101EE0008091F202808309C0E52FFF27E058FA4F66
:101EF0008091F20280835F3A20F45F5F5093000389
:101F000002C0109201032091F2028091FC02909194
:101F1000FD02820F911D9093FD028093FC0202C08E
:101F200010920103FF91EF91CF91BF91AF919F91DB
:101F30008F917F916F915F914F913F912F910F9072
:101F40000FBE0F901F901895AC01A0E0B0E09D016E
:101F5000A817B90748F4E1E3F6E08191280F311D95
:101F60001196A417B507C8F33F70FD01EF5CF94F58
:101F7000C90156E0969587955A95E1F7835C808371
:101F80001196FD01EF5CF94F2F733070822F835C47
:101F90008083AE5CB94F8DE08C93109206018091E6
:101FA00031068093C6000895A0E0B0E0EAEDFFE0BE
:101FB0000C9447922C859D850E85BB2483E28093EB
:101FC00031069F59909332062093330633E0E32E77
:101FD000F12C002309F49EC0CF84D888BE016D5E29
:101FE0007F4FA989BA890150109709F493C01097BF
:101FF000B9F0F601EB0DF11DB3949081119791F4B6
:10200000002349F1FB016E5F7F4FDB01C080D1806F
:102010006E5F7F4F0D90BC91A02DBB24015002C07C
:1020200090E019C01097B9F0F601EB0DF11DB394D3
:102030004081119791F4002341F1FB016E5F7F4FC6
:10204000DB01C080D1806E5F7F4F0D90BC91A02DD1
:10205000BB24015002C040E018C01097B1F0F60157
:10206000EB0DF11DB3941081119781F4002371F0F1
:10207000FB013296DB01CD90DC90BF016E5F7F4F9C
:10208000A081B181BB24015001C010E0F701EF5CD9
:10209000F94F892F86958695835C80830894E11C8F
:1020A000F11CF701EF5CF94F892F9927837090702D
:1020B00024E0880F991F2A95E1F755279A0194E0AB
:1020C000369527959A95E1F7822B835C8083089457
:1020D000E11CF11CF701EF5CF94F4F705070440F99
:1020E000551F440F551F812F992726E096958795F8
:1020F0002A95E1F7842B835C80830894E11CF11C12
:10210000F701EF5CF94F1F73135C10830894E11C17
:10211000F11C6ACFC7010E94A40FE9E00C946392FE
:10212000A3E07A2F4091EE024650442309F458C0B0
:10213000E72FFF27E058FA4F80818D537F5FE72F0D
:10214000FF27E058FA4F20812D537F5FE72FFF27AD
:10215000E058FA4F30813D537F5FE72FFF27E0586B
:10216000FA4F60816D537F5F9927880F991F880F01
:10217000991F522F52955F70582B822F99278F707D
:102180009070F4E0880F991FFA95E1F7232F2695B8
:102190002695282B832F992783709070E6E0880F6F
:1021A000991FEA95E1F7682B41504F3FC9F0EA2F9C
:1021B000FF27E058FA4F5083AF5F41504F3F81F007
:1021C000EA2FFF27E058FA4F2083AF5F41504F3F7F
:1021D00039F0EA2FFF27E058FA4F6083AF5FA5CFB1
:1021E00083E895E09093ED028093EC02A350A093D6
:1021F000EB020895A2E0B0E0E0E0F1E10C944D9232
:102200008091F102882309F457C40E9490108091B4
:102210008105823609F023C3809182059927803792
:10222000910509F4AFC081379105C4F48A36910550
:1022300009F480C28B36910544F48B34910571F119
:102240008636910509F45FC10AC38D36910509F4FC
:1022500069C08E36910509F44DC001C384379105DC
:1022600041F1853791054CF48137910509F491C00E
:102270008337910509F4DFC0F2C28737910509F46D
:102280001BC2883791052CF48537910509F4D7C115
:10229000E6C28937910509F46DC1E1C2E091EC0213
:1022A000F091ED028081918190938B0180938A015E
:1022B000D6C28091EE02A091EC02B091ED02853180
:1022C00040F080E1EBE5F5E00D9001928A95E1F7B1
:1022D0000DC08D919D910D90BC91A02D80935B05BB
:1022E00090935C05A0935D05B0935E0580EF8093AD
:1022F000E9024BC0809106018823E1F38DE490E070
:102300009F938F9382E098E09F938F9381E08F93C8
:102310008F938EE48F930E94D40F8DB79EB707964C
:102320008DBF9DC2A091EC02B091ED021C911130C5
:1023300081F48DE4E2E0F8E00D9001928A95E1F7F6
:102340000E9400301983809157058F7E8093570536
:1023500001C01982809106018823E1F381E090E0B9
:102360009F938F93CE0101969F938F9381E08F93DC
:102370008F938DE48F930E94D40FADB7BEB717969D
:10238000ADBF6DC281E08093F4028FEF80930401B2
:1023900066C2E091EC02F091ED02E0818E2F8A504E
:1023A0008A3058F48983882311F481E003C0863091
:1023B00010F085E0898361E00EC08E2F84518A3051
:1023C00070F48983882311F481E003C0863010F013
:1023D00085E0898360E089810E94803012C0E983B2
:1023E000EF3F19F40E94633089838981882311F4B7
:1023F00081E003C0863010F085E0898389810E94E6
:10240000052F809106018823E1F38CE790E09F93EC
:102410008F9385E897E09F938F9381E090E09F935F
:102420008F93CE0101969F938F9382E08F9381E0EB
:102430008F9381E577C12091EC023091ED02D901B3
:102440008C918150853008F045C0F90181818D352E
:1024500009F040C0809108048823E1F52F5F3F4FC9
:102460008CE7E5E8F7E0D9010D9001928A95E1F754
:10247000F90182910E94702F8091C6079927AA279F
:10248000BB27BC01CD0124EC39E040E050E00E94C4
:10249000AF91DC01CB018093820190938301A093E3
:1024A0008401B09385018091C7079927AA27BB278C
:1024B000BC01CD010E94AF91DC01CB0180937E0174
:1024C00090937F01A0938001B09381010E946330BB
:1024D000898301C01982809106018823E1F381E09C
:1024E00090E09F938F93CE0101969F938F9381E00D
:1024F0008F938F9383E58F930E94D40F8DB79EB7F0
:1025000007968DBF26C0E091EC02F091ED02E081CC
:102510008E2F8150853018F48E2F0E94052F0E9437
:1025200063308983809106018823E1F381E090E0A4
:102530009F938F93CE0101969F938F9381E08F930A
:102540008F9386E48F930E94D40FADB7BEB71796D2
:10255000ADBF80910804882329F46EE670E089817C
:102560000E94183A80E00E9491098091AC070E9475
:10257000AB8D75C1E091EC02F091ED02808199275D
:1025800087FD90959093D4088093D30881819927F3
:1025900087FD90959093D6088093D50882819927DE
:1025A00087FD90959093D8088093D70883819927C9
:1025B00087FD90959093DA088093D90884819927B4
:1025C00087FD90959093DC088093DB08858199279F
:1025D00087FD90959093DE088093DD08868199278A
:1025E00087FD90959093E0088093DF088781992775
:1025F00087FD90959093E2088093E1088085992764
:1026000087FD90959093E4088093E308818599274E
:1026100087FD90959093E6088093E5088285992739
:1026200087FD90959093E8088093E7088385992724
:1026300087FD90959093EA088093E90810C1E09196
:10264000EC02F091ED0280810E949A358A83882302
:1026500019F481E0898301C01982809106018823E1
:10266000E1F388E090E09F938F9380E598E09F935B
:102670008F9321E030E03F932F938091EC02909173
:10268000ED029F938F933F932F93CE0102969F93DA
:102690008F933F932F93CE01820F931F9F938F931E
:1026A00084E08F9381E08F9385E58F930E94D40F10
:1026B000EDB7FEB773963CC08091EB02893008F409
:1026C000CEC02091EC023091ED022F5F3F4F88E0A9
:1026D000A0E5B8E0F90101900D928A95E1F7D901E2
:1026E0008E910E94F0348A83882319F481E08983D3
:1026F00001C01982809106018823E1F321E030E0D6
:102700003F932F93CE0102969F938F933F932F93E6
:10271000CE01820F931F9F938F9382E08F9381E06E
:102720008F9387E58F930E94D40FEDB7FEB73B964A
:10273000EDBF95C080910804882309F090C00E94E5
:102740005E8D8983823019F0843009F088C020E4DE
:1027500030E0F8948091C1008F738093C100809124
:10276000C9008F738093C9008091C100877E8093D8
:10277000C1008091C900877E8093C9008091C80004
:1027800087FF03C08091CE00F9CF8091C00087FF02
:1027900003C08091C600F9CFE091EC02F091ED0208
:1027A000E081E13021F482E08093E0022EC0E43643
:1027B00011F421E830E081E08093E002832F992733
:1027C0008093CD002093CC008091CD008093C500F4
:1027D0008091CC008093C4008091CA008F7D80934B
:1027E000CA008091CA008F7E8093CA008091C90080
:1027F0008B7F8093C9008091CA0084608093CA0057
:102800008091CA0082608093CA008091CA00877F4D
:102810008093CA008091C200877F8093C20080911C
:10282000C9008E7F8093C9008091C1008861809328
:10283000C1008091C90088618093C9008091C10066
:1028400080688093C1008091C90080688093C9002E
:1028500010926E0010926F00109270007894809128
:10286000820599278436910509F4BBC08536910508
:10287000ACF48136910509F46FC0823691052CF4D1
:102880008B34910509F45DC00FC18236910509F4BE
:1028900070C08336910509F47FC006C18C3691055E
:1028A00009F4EDC08D3691054CF48736910509F495
:1028B000F8C08836910509F4B2C0F6C08437910596
:1028C00029F08637910509F4E8C0EEC08091EE0248
:1028D000A091EC02B091ED02803140F080E1EBE597
:1028E000F5E00D9001928A95E1F70DC08D919D91D3
:1028F0000D90BC91A02D80935B0590935C05A093F7
:102900005D05B0935E05809106018823E1F31F9277
:10291000809103018F9384E58F930E94D40F8AEFF7
:102920008093E9028FEF8093040180EA9FE00E9488
:102930006F199093E2028093E1020F900F900F9035
:10294000B3C0E091EC02F091ED028081918190930F
:102950008B0180938A01A8C0E091EC02F091ED0216
:10296000808180930501803298F08FE1809305018A
:102970000FC0A091EC02B091ED028BE0E3E7F5E02F
:102980000D9001928A95E1F780917C058093220752
:102990008FEF8093040188C08091E5029091E60258
:1029A000892B89F4E091EC02F091ED02E081EE23B5
:1029B00051F08AE0E89FC00111240E946F199093A2
:1029C0004E0580934D05E091EC02F091ED0290816F
:1029D0008AE0989FC00111249093E6028093E5025B
:1029E00015C08FEF80930401E091EC02F091ED02AD
:1029F00090818AE0989FC00111249093E80280930F
:102A0000E702892B19F081E08093F60280EA9FE0CB
:102A10000E946F199093E2028093E10245C08FEF0C
:102A200080930401E091EC02F091ED02908197FD1A
:102A300008C082E08093F3021092E4021092E30255
:102A40001AC0909580914803892B80934803918107
:102A50008AE0989FC00111249093E4028093E302DE
:102A600084E08093F30280EA9FE00E946F199093C4
:102A7000E2028093E10281E08093F70215C08FEFBC
:102A800080930401E091EC02F091ED02808180934B
:102A9000490381E08093F80207C081E08093F5024A
:102AA00003C081E08093F9021092F1021092ED02CE
:102AB0001092EC021092EB02E3E0CE5F0C9469926C
:102AC000982F8091C00085FFFCCF9093C600089599
:102AD0000F931F9388E18093C1008091C0008260B2
:102AE0008093C0008091C10080688093C100809174
:102AF000C10080648093C10000E010E00093C50035
:102B00008AE290E08093C4008091E7029091E8020D
:102B10000E946F199093500580934F058CED90E0C3
:102B20000E946F1990937F0580937E051092510546
:102B30008AE58093520584E0809355058BE080936D
:102B40005305109254051093ED020093EC0210927D
:102B5000EB021F910F910895A0E1B0E0E2EBF5E1E7
:102B60000C944A9280910601882309F4C1C2809195
:102B7000E1029091E2020E947819882361F010929C
:102B8000E4021092E3021092E8021092E70210921F
:102B9000E6021092E5028091E3029091E402892B13
:102BA00041F080912F06909130060E947819882379
:102BB00029F48091F702882309F460C0809106010E
:102BC000882309F45BC08091F30204E317E08430AA
:102BD000A8F00E948A2380E590E09F938F931F9333
:102BE0000F9381E08F938F9388E48F930E94D40F8B
:102BF0002DB73EB7295F3F4F2DBF34C010924A0317
:102C00008FE494E09F938F938DE793E29F938F934C
:102C1000E0913D05F0913E05099584E190E09F9398
:102C20008F931F930F9381E090E09F938F9383EF97
:102C300092E09F938F9382E08F9381E08F9388E45B
:102C40008F930E94D40F8091F302982F8F5F80930F
:102C5000F3022DB73EB7215F3F4F2DBF943010F0E8
:102C60001092F3028091E3029091E4020E946F19A6
:102C70009093300680932F061092F7028091F8020D
:102C8000882351F180910601882331F10E948A2323
:102C900080E590E09F938F9384E397E09F938F93D9
:102CA00021E030E03F932F9381E291E09F938F9357
:102CB0003F932F9389E493E09F938F9383E08F93C7
:102CC00081E08F938CE48F930E94D40F1092F802CE
:102CD0008DB79EB70F968DBF8091F5028823D1F0F6
:102CE000809106018823B1F08AE090E09F938F9352
:102CF00081E595E09F938F9381E08F938F9386E595
:102D00008F930E94D40F1092F5022DB73EB7295F22
:102D10003F4F2DBF8091F9028823D9F080910601A1
:102D20008823B9F08BE090E09F938F9383E795E041
:102D30009F938F9381E08F93809103018F9387E41A
:102D40008F930E94D40F1092F9028DB79EB7079609
:102D50008DBF80917E0590917F050E947819882310
:102D600009F461C080910601882309F45CC0809158
:102D7000A1079927880F991F880F991F7C010027A9
:102D8000F7FC0095102F8091630490916404A0914A
:102D90006504B0916604BC01CD01A80197010E94B1
:102DA000239230936C0520936B0580915B04909186
:102DB0005C04A0915D04B0915E04BC01CD01A8014A
:102DC00097010E94239230936E0520936D058091A8
:102DD000E60380936F058091E5038093700588E09A
:102DE00090E09F938F938BE695E09F938F9381E084
:102DF0008F9383E08F938BE68F930E94D40F809103
:102E000071052DB73EB7295F3F4F2DBF853018F0B4
:102E100086E08093710583E690E00E946F1990939D
:102E20007F0580937E058091E7029091E802892BCF
:102E300041F080914F05909150050E9478198823A8
:102E400021F48091F602882339F1809106018823CC
:102E500019F10E94EE3882E490E09F938F9380EE08
:102E600096E09F938F9381E08F938F9384E48F9369
:102E70000E94D40F1092F6028DB79EB707968DBFB1
:102E80008091E7029091E802009731F00E946F195B
:102E90009093500580934F058091E5029091E60252
:102EA000892B09F4B8C080914D0590914E050E9480
:102EB0007819882309F4AFC080910601882309F4AA
:102EC000AAC08091A1079927880F991F880F991F81
:102ED0007C010027F7FC0095102F809163049091EE
:102EE0006404A0916504B0916604BC01CD01A80101
:102EF00097010E9423923093400520933F058091D3
:102F00005B0490915C04A0915D04B0915E04BC01EF
:102F1000CD01A80197010E9423923093420520938E
:102F20004105209182093091830940918409509193
:102F30008509DA01C90163E0880F991FAA1FBB1F29
:102F40006A95D1F7820F931FA41FB51F820F931F9D
:102F5000A41FB51F20913C0130913D0140913E01DD
:102F600050913F01BC01CD010E9423923093440552
:102F70002093430580912B0490912C04A0912D0463
:102F8000B0912E0449E0B595A795979587954A95F8
:102F9000D1F7809345058091270490912804A09152
:102FA0002904B0912A0439E0B595A795979587959E
:102FB0003A95D1F78093460580913304909134047B
:102FC000A0913504B091360429E0B595A795979561
:102FD00087952A95D1F7809347058EE090E09F93DF
:102FE0008F938FE395E09F938F9381E08F938F93DF
:102FF00083E48F930E94D40F8091E5029091E602C2
:103000000E946F1990934E0580934D052DB73EB7E2
:10301000295F3F4F2DBF809105018F3F71F19927A7
:1030200004E0880F991F0A95E1F7815B9D4F40E10D
:1030300050E0BC01CE0101960E94F98F80E190E042
:103040009F938F93CE0101969F938F9381E090E0A1
:103050009F938F9385E091E09F938F9382E08F936E
:1030600081E08F9381E48F930E94D40F8FEF809340
:1030700005018DB79EB70B968DBF809122078823DF
:10308000D1F0809106018823B1F081E090E09F9318
:103090008F9382E297E09F938F9381E08F938F933A
:1030A00082E48F930E94D40F109222072DB73EB76F
:1030B000295F3F4F2DBF8091F4028823C9F0809192
:1030C00006018823A9F084E390E09F938F9389EB16
:1030D00098E09F938F9381E08F938F9380E58F93F8
:1030E0000E94D40F1092F4028DB79EB707968DBF41
:1030F000E6E0C05F0C9466921F920F920FB60F929B
:1031000011242F933F935F936F937F938F939F939C
:10311000AF93BF93EF93FF9320E08091090388233F
:1031200029F0809109038150809309038091F8046C
:10313000882319F081508093F80480911103815005
:10314000809311038F3F09F05BC089E080931103E6
:1031500080910F0390911003019690931003809338
:103160000F03809110018F5F81708093100188237D
:1031700019F481E080930E03349903C081E08093B9
:10318000120380910A0390910B03892B21F1809106
:103190000A0390910B030B9750F080910A039091D2
:1031A0000B030A9790930B0380930A0304C01092B9
:1031B0000B0310920A0380910A0390910B03209154
:1031C000090130910A0182239323892B11F021E018
:1031D00008C020E006C08FEF9FEF90930A01809314
:1031E000090180910101222331F08A3011F45A9AA9
:1031F00007C0479A05C08A3011F45A9801C0479811
:1032000080911203882309F45AC020919901222346
:1032100009F055C08091720983FF51C086B199278A
:10322000FC01E071F07084FF13C080910C03909159
:103230000D03019690930D0380930C0380910C0372
:1032400090910D03895E9340D0F12093120337C013
:1032500080910C0390910D03892B69F180910C03EF
:1032600090910D038A56914030F580910C03909116
:103270000D0369E270E00E94DA9180910C03909155
:103280000D03860F971F90930D0380930C0380917D
:103290000C0390910D030B9750F080910C039091CB
:1032A0000D030A9790938B0180938A0104C0F093D9
:1032B0008B01E0938A0110920D0310920C03FF9191
:1032C000EF91BF91AF919F918F917F916F915F919E
:1032D0003F912F910F900FBE0F901F901895209146
:1032E0000F0330911003280F391FC901019608956B
:1032F00020910F0330911003821B930B892F992784
:103300008695807490700895CF93DF930E946F1913
:10331000EC01CE010E9478198823D9F3DF91CF9177
:103320000895CF93DF930E946F19EC0109C080913B
:103330001101882329F0909311018FEC80937A007A
:10334000CE010E947819982F882389F3DF91CF91BD
:1033500008959FB7F8945F983E9A469A8091B0007E
:103360008F708093B0008091B00083608093B00034
:103370008091B1008B738093B1008091B1008B601C
:103380008093B1001092B2008FEF8093B3008091D0
:10339000B00080688093B000809170008A7F809335
:1033A0007000809170008260809370009FBF0895CC
:1033B0008AE090E00E946F1990932407809323077E
:1033C00082E085BD83EA84BD17BC84EB88BD86E0BE
:1033D00086BD80916E00816080936E00089580911B
:1033E000F2072091690182FF30C09091B5078CE30C
:1033F000989FB00111249091B40780E5989FA00197
:103400001124922F905897FD9D5F9595959586E094
:103410009802C00111242091070130910801281B56
:10342000390B3093080120930701421753072CF002
:10343000509308014093070108952617370784F039
:1034400070930801609307010895822F992736E051
:10345000880F991F3A95E1F790930801809307012F
:103460000895A0E0B0E0E7E3FAE10C94499280917E
:10347000BC07E82FFF27EE5BFE4F9681D08080913E
:103480000F01A92FBB27A7FDB095CB2FDB2F8130D4
:1034900009F017C1209163043091640440916504E0
:1034A00050916604BD01CE010E94AF9197FF04C008
:1034B00061587F4F8F4F9F4F7B018C01C7E015955F
:1034C0000795F794E794CA95D1F78D2D992787FD35
:1034D0009095A92FB92F20915B0430915C04409105
:1034E0005D0450915E04BC01CD010E94AF9197FF35
:1034F00004C061587F4F8F4F9F4FB7E095958795D8
:1035000077956795BA95D1F7F801E701C61BD70BF8
:10351000E80BF90B2091DD043091DE04C901A3E032
:10352000880F991FAA95E1F7821B930BAA2797FD95
:10353000A095BA2FC81BD90BEA0BFB0B8091670132
:103540009927AA27BB27BC01CD019E01AF010E948C
:10355000AF9197FF04C061507E4F8F4F9F4FFC018A
:10356000EB0179E0F595E795D795C7957A95D1F771
:103570001091F207609107017091080112FF05C0D8
:1035800070930E0160930D0118C040910D01509190
:103590000E018091BB07282F3327CB01841B950B8D
:1035A000B9010E94EE9180910D0190910E01860F5C
:1035B000971F90930E0180930D0110FF14C080910E
:1035C0000D0190910E0197FD0F9664E095958795FA
:1035D0006A95E1F7AA2797FDA095BA2FC80FD91FC2
:1035E000EA1FFB1F15C080910D0190910E0197FD00
:1035F0000F9654E0959587955A95E1F7AA2797FD80
:10360000A095BA2F8C1B9D0BAE0BBF0BFD01EC01DF
:103610002091EF07222321F1332780910403909119
:103620000503829FA001839F500D929F500D11248E
:10363000CA01AA2797FDA095BA2F8C0F9D1FAE1F18
:10364000BF1F2F5F3F4F442737FD4095542FBC01CC
:10365000CD010E942392309305032093040304C0FC
:10366000D0930503C09304038091B407282F332718
:10367000220F331F220F331F809104039091050303
:10368000821793077CF08091B507282F3327220FEC
:10369000331F220F331F80910403909105032817D5
:1036A000390724F43093050320930403809101012A
:1036B000843108F4F7C080910F018F5F80930F0170
:1036C000F3C020915B0430915C0440915D04509103
:1036D0005E04BD01CE010E94AF9197FF04C0615806
:1036E0007F4F8F4F9F4F7B018C0187E0159507958A
:1036F000F794E7948A95D1F78D2D992787FD9095BA
:10370000A92FB92F2091630430916404409165047E
:1037100050916604BC01CD010E94AF919B01AC01A8
:1037200097FF04C021583F4F4F4F5F4FC7E055955B
:10373000479537952795CA95D1F72E0D3F1D401F08
:10374000511F809166019927AA27BB27BC01CD0193
:103750000E94AF9197FF04C061507E4F8F4F9F4FE3
:10376000FC01EB01B9E0F595E795D795C795BA95BA
:10377000D1F7809168019927A6E0880F991FAA9533
:10378000E1F740910B0150910C012091BB073327C9
:10379000841B950BB9010E94EE9180910B019091D1
:1037A0000C01860F971F90930C0180930B01809161
:1037B000F20781FF14C080910B0190910C0197FDDD
:1037C0000F9674E0959587957A95E1F7AA2797FD6E
:1037D000A095BA2FC80FD91FEA1FFB1F15C08091F3
:1037E0000B0190910C0197FD0F9664E095958795DC
:1037F0006A95E1F7AA2797FDA095BA2F8C1B9D0B20
:10380000AE0BBF0BFD01EC012091F007222321F14B
:1038100033278091020390910303829FA001839F2D
:10382000500D929F500D1124CA01AA2797FDA09513
:10383000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442716
:1038400037FD4095542FBC01CD010E942392309347
:1038500003032093020304C0D0930303C093020325
:103860008091B807282F3327220F331F220F331FD1
:103870008091020390910303821793077CF080915B
:10388000B907282F3327220F331F220F331F8091B0
:103890000203909103032817390724F4309303039C
:1038A0002093020310920F01E7E0CDB7DEB70C942E
:1038B00065921F920F920FB60F9211242F933F9390
:1038C0004F935F938F939F93EF93FF9380910101A9
:1038D00090911303843108F04CC0992309F029C159
:1038E0008091B00086FF24C08091B0008F7B8093D0
:1038F000B000809104039091050387559E4F9093EB
:1039000007038093060325E08D3D920718F08CEDA8
:1039100095E005C08757914030F487E791E0909398
:103920000703809306038091060390910703C2C0AA
:103930008091B00080648093B0008091BA07282FF6
:1039400033278DED96E0289FA001299F500D389FC9
:10395000500D1124CA012091140330911503821BCC
:10396000930B909307038093060381E080930F01EC
:10397000DDC0992309F0DDC08091B00086FF9FC0B3
:103980008091B0008F7B8093B000E091160320916E
:10399000BA07EE23D9F433278DED96E0289FA001D6
:1039A000299F500D389F500D1124CA0120911403F6
:1039B00030911503821B930B9093070380930603AA
:1039C0001092150310921403469AB0C02E1738F4C3
:1039D0008AE090E09093070380930603A7C089EAEA
:1039E00093E090930703809306038E2F99278330EB
:1039F0009105D9F08430910534F48130910549F076
:103A0000029761F020C08430910591F0059799F0FC
:103A10001AC0809104039091050304C080910203B1
:103A20009091030387559E4F1DC080914E0905C09C
:103A30008091270902C0809157099927880F991F03
:103A4000880F991FEFCFFF27EE0FFF1FE754F74FA7
:103A500020813181220F331F80910603909107034B
:103A6000820F931F909307038093060380910603B0
:103A70009091070355E08D3D950718F08CED95E08A
:103A800005C08757914030F487E791E09093070392
:103A90008093060320910603309107032C5B30408E
:103AA000309307032093060380911403909115032C
:103AB000820F931F909315038093140337C0809156
:103AC000B00080648093B0008CEB90E0909307038B
:103AD00080930603809114039091150384549F4FA3
:103AE000909315038093140380910803882321F099
:103AF00080910904882321F480910803823011F415
:103B0000469801C0469A809116038F5F80931603F2
:103B1000282F33278091BA07992701968217930798
:103B20002CF481E080930F011092160381E08093C2
:103B30001303209106033091070341E02F37340728
:103B400030F08FEF8093B3002F5F30400FC02F3FD6
:103B50003105C9F0C0F0A9014F5F50404F37510502
:103B600050F480E88093B30020583040309307032E
:103B70002093060312C08FEF8093B3005093070386
:103B8000409306030AC0809106038093B30010920D
:103B900007031092060310921303FF91EF919F9178
:103BA0008F915F914F913F912F910F900FBE0F908A
:103BB0001F90189510927C008FEC80937A000895E6
:103BC000CF93DF9310921B0386E987BD83E090E0DB
:103BD0000E94E72EC82F863E08F4C65FC8BD84E663
:103BE00090E00E94911980911501909116018152E7
:103BF000934010F0C0EF02C0C530F8F0C8BD82E3BA
:103C000090E00E94911984E694E09F938F9380E660
:103C100095E19F938F93E0913D05F0913E050995C5
:103C200080911501909116010F900F900F900F90B9
:103C30008152934010F4C550DFCF6C2F83E090E0A9
:103C40000E94EF2ECF3018F0CCE8D0E002C0C0E0E8
:103C5000D0E0CA3FD105F8F4C7BD82E390E00E94EE
:103C6000911986E694E09F938F9380E695E19F9368
:103C70008F93E0913D05F0913E05099580911501E6
:103C8000909116010F900F900F900F9080529340DB
:103C900010F02196DECFC09331078091920780FF0C
:103CA00009C08C2F8A508B3E28F080915605806485
:103CB00080935605C7BD8CE291E00E949119DF9177
:103CC000CF910895EF92FF921F93CF9310E080ED74
:103CD00097E00E946F197C01CCE8133019F4CB30C7
:103CE00008F0C9E010E080912A0390912B038C5FCB
:103CF000934024F48091140181500AC080912A03DA
:103D000090912B038750944034F0809114018F5F81
:103D10008093140101C011E0809128039091290340
:103D20008C5F934024F48091130181500AC08091EC
:103D30002803909129038750944034F08091130117
:103D40008F5F8093130101C01F5F809126039091C4
:103D500027038C5F934024F48091120181500AC0A4
:103D6000809126039091270387509440C4F080915E
:103D700012018F5F8093120113C088E694E09F9335
:103D80008F9380E695E19F938F93E0913D05F091AD
:103D90003E0509950F900F900F900F905FC01F5F29
:103DA00082E18093550380914F038E7F80934F0370
:103DB00085EA8093BC00809114018A3040F48091A0
:103DC00056058160809356058AE0809314018091A6
:103DD0001401863F40F0809156058160809356051E
:103DE00085EF80931401809113018A3040F4809113
:103DF00056058260809356058AE080931301809176
:103E00001301863F40F080915605826080935605ED
:103E100085EF80931301809112018A3040F48091E4
:103E200056058460809356058AE080931201809144
:103E30001201863F40F080915605846080935605BC
:103E400085EF8093120180915503882339F0C701D3
:103E50000E947819882309F090CFF5CF10921101B4
:103E60008FEC80937A00809111018823E1F3CA30AE
:103E700020F48AE090E00E949119C15009F02DCF02
:103E800086E490E00E949119CF911F91FF90EF90EE
:103E900008951F920F920FB60F921124EF92FF9286
:103EA0000F931F932F933F934F935F936F937F9342
:103EB0008F939F93AF93BF93EF93FF9380913303BF
:103EC000282F3327442755278F5F80933303F90129
:103ED0002231310508F0E3C3EA5BFF4F0C94759281
:103EE000809178009091790046C0809178009091FF
:103EF000790047C1809178009091790090933603C2
:103F00008093350372C180916C0490916D0420916F
:103F1000780030917900821B930B90932607809351
:103F20002507809125079091260790934003809361
:103F30003F0379C1809178009091790020916E04BF
:103F400030916F04821B930B9093300780932F075F
:103F500080912F0790913007909342038093410303
:103F6000A0C38091390390913A0320917800309159
:103F70007900820F931F90933A038093390381E075
:103F800091C380913703909138032091780030914C
:103F90007900820F931F909338038093370384E056
:103FA00081C38091F30783FF1AC080911F01909114
:103FB00020019C01220F331F280F391F40917800E8
:103FC000509179008BE090E0489FB001499F700DBF
:103FD000589F700D1124CB016EE170E00FC08091ED
:103FE0001F01909120019C01220F331F280F391FC0
:103FF000809178009091790063E070E00E94DA91FE
:10400000260F371F36952795369527953093200133
:1040100020931F0185E046C380917800909179003C
:104020004091680450916904841B950B909321037F
:10403000809320038091200390912103029704F143
:1040400072E04E3E570784F4209134032B5F209397
:10405000340325508091D2039091D303845F914023
:1040600018F4215F2093340380913403853684F162
:104070004F5F5F4F5093690440936804845626C095
:1040800080912003909121038F5F9F4F0CF572E088
:1040900047325707ECF02091340325502093340326
:1040A0002B5F8091D2039091D303845F914018F4E9
:1040B0002F5020933403809134038C394CF44150B9
:1040C000504050936904409368048C5980933403A2
:1040D000809178009091790090932807809327072A
:1040E00080912003909121039C01442737FD409546
:1040F000542F8091230490912404A0912504B09121
:104100002604820F931FA41FB51F8093230490934E
:104110002404A0932504B093260420912304309115
:104120002404409125045091260457FF04C02150D7
:104130003C4F4F4F5F4F6AE0559547953795279510
:104140006A95D1F78091230490912404A0912504CD
:10415000B0912604821B930BA40BB50B8093230410
:1041600090932404A0932504B09326042EC180913B
:104170003703909138032091780030917900820FB5
:10418000931F9093380380933703109232038CC2AD
:10419000809101018A3071F48091780090917900CA
:1041A0002091350330913603820F931F0196969527
:1041B000879517C04091350350913603843158F0EC
:1041C0002091780030917900240F351F8FEF97E010
:1041D000821B930B06C08091780090917900840F28
:1041E000951F909327038093260386E05BC28091FE
:1041F0006C0490916D042091780030917900821BBD
:10420000930B909326078093250780912507909123
:10421000260720913F0330914003820F931F909314
:1042200025038093240387E03DC28091780090911C
:10423000790020916E0430916F04821B930B909350
:10424000300780932F0780912F079091300720919E
:10425000410330914203820F931F90932303809375
:1042600022031FC22091390330913A0380917800D4
:1042700090917900280F391F30933A032093390326
:10428000809101018A3019F4220F331F04C0220FDC
:10429000331F220F331F30933A03209339032091A9
:1042A000390330913A03C90137FD079603E095952C
:1042B00087950A95E1F790932B0380932A038091C9
:1042C0003B0390913C03820F931F97FD01969595B8
:1042D000879590933C0380933B0320917804309121
:1042E0007904821B930B90931E0180931D012091F2
:1042F00030033091310380911D0190911E01280FF0
:10430000391F37FF02C02F5F3F4F359527953093F8
:1043100031032093300333CE20913703309138039B
:104320008091780090917900280F391F30933803DD
:1043300020933703809101018A3019F4220F331F33
:1043400004C0220F331F220F331F309338032093F2
:1043500037032091370330913803C90137FD0796A1
:10436000F3E095958795FA95E1F79093290380936B
:10437000280380913D0390913E03820F931F97FD88
:1043800001969595879590933E0380933D032091E8
:10439000760430917704821B930B90931C018093D9
:1043A0001B0120912E0330912F0380911B019091CE
:1043B0001C01280F391F37FF02C02F5F3F4F359573
:1043C000279530932F0320932E0383E06BC1109227
:1043D000330381E0809311018091170390911803BA
:1043E0000196909318038093170380917800909121
:1043F0007900909316018093150180911501909199
:104400001601AA27BB272091430330914403409112
:10441000450350914603280F391F4A1F5B1F209305
:1044200043033093440340934503509346038091E4
:1044300047038F5F80934703803108F432C1809136
:10444000170190911801A0911901B0911A017C01F6
:104450008D0163E0EE0CFF1C001F111F6A95D1F760
:10446000E81AF90A0A0B1B0BE20EF31E041F151FB4
:1044700080911B03992787FD9095A92FB92FBC0127
:10448000CD0120EB30E240E050E00E94AF91DC0132
:10449000CB01E81AF90A0A0B1B0BD801C7010496D5
:1044A000A11DB11DB7FF05C0D801C7010B96A11D05
:1044B000B11D23E0B595A795979587952A95D1F7D6
:1044C0008093170190931801A0931901B0931A01DA
:1044D0008091290790912A077C010027F7FC00951D
:1044E000102F8091170190911801A0911901B0919E
:1044F0001A01E81AF90A0A0B1B0BE0920304F09266
:104500000404009305041093060420911C033091C9
:104510001D0340911E0350911F0357FF04C0215FEC
:104520003F4F4F4F5F4F84E05595479537952795FF
:104530008A95D1F780911C0390911D03A0911E03D1
:10454000B0911F03821B930BA40BB50B80931C032C
:1045500090931D03A0931E03B0931F0380911C032F
:1045600090911D03A0911E03B0911F038E0D9F1DFE
:10457000A01FB11F80931C0390931D03A0931E03E3
:10458000B0931F0380911C0390911D03A0911E0303
:10459000B0911F03B7FF03C00F96A11DB11D14E01A
:1045A000B595A795979587951A95D1F7209103040E
:1045B00030910404281B390B64E0213036071CF0CD
:1045C00020E034E006C07CEF2030370714F420E010
:1045D0003CEF8091190390911A03809119039091F7
:1045E0001A0397FF03C0909581959F4FA901F3E0AF
:1045F000440F551FFA95E1F78D5B9240C4F080910E
:10460000190390911A039C01E4E0220F331FEA95ED
:10461000E1F7281B390B240F351F37FF02C0215F3C
:104620003F4F74E0359527957A95E1F717C0809153
:10463000190390911A039C0165E0220F331F6A95BC
:10464000E1F7281B390B240F351F37FF02C0215E0D
:104650003F4F45E0359527954A95E1F730931A038A
:10466000209319038091430390914403A091450343
:10467000B0914603B7FF03C00196A11DB11DB595CA
:10468000A795979587958093430390934403A093B0
:104690004503B093460388E08093470302C010921D
:1046A000330382E0809332038091320380937C0055
:1046B00080913303882319F08FEC80937A00FF9167
:1046C000EF91BF91AF919F918F917F916F915F918A
:1046D0004F913F912F911F910F91FF90EF900F906D
:1046E0000FBE0F901F90189590E2E4E3F7E08FE47F
:1046F0009193815087FFFCCF089590914A039035A4
:1047000040F4E92FFF27EC5CF84F80839F5F909384
:104710004A030895AF92BF92CF92DF92FF920F9318
:104720001F93CF93DF932091480320FF0AC080910D
:104730004903882311F0815002C0809121018093A8
:10474000490321FF0CC090914903809121019817E2
:1047500019F41092490303C09F5F90934903822F7D
:10476000992780FF04C081FF02C0109249030E9474
:10477000742380914903282F33279DE7C92E93E2A4
:10478000D92EC0913D05D0913E058A3098F481E143
:1047900080934A033F932F938FE994E09F938F93E5
:1047A000DF92CF92FE0109952DB73EB72A5F3F4FAA
:1047B0002DBF11C080E180934A033F932F9384EA79
:1047C00094E09F938F93DF92CF92FE0109958DB76E
:1047D0009EB706968DBF20914903822F9927AA275D
:1047E000BB27FC01419710F00C94E22CE85AFF4FD4
:1047F0000DE7C02E03E2D02EC0913D05D0913E05BD
:104800000C94759210924A0389EA94E09F938F93D7
:104810000DE713E2DF92CF92FE01099584E18093C8
:104820004A030F900F900F900F9085E690E09F93B2
:104830008F938AE590E09F938F931F921F928091B0
:1048400001016AE00E94CE91892F99279F938F934F
:10485000809101010E94CE9199279F938F9389EBBC
:1048600094E09F938F93DF92CF92E0913D05F0917A
:104870003E05099588E280934A03EDB7FEB73E9660
:10488000EDBF83E098E09F938F930E946330992758
:104890009F938F9381ED94E09F938F93DF92CF92BC
:1048A000E0913D05F0913E050995809157059927C6
:1048B0002DB73EB7285F3F4F2DBFEC01C071D070C0
:1048C00084FF06C08CE380934A038FED94E0F1C02F
:1048D0009091E404992349F18CE380934A03892F52
:1048E00099279F938F938CEE94E09F938F931F93C0
:1048F0000F93E0913D05F0913E050995DF93CF932D
:104900009091E40481E1989FC0011124825C954F4D
:104910009F938F931F930F93E0913D05F0913E0578
:1049200009958DB79EB70C9647C19091560599236E
:10493000B1F08CE380934A03892F99279F938F933B
:1049400084EF94E09F938F931F930F93E0913D0525
:10495000F0913E050995EDB7FEB7369679C4909172
:104960005003992371F08CE380934A03892F992790
:104970009F938F938BE095E09F938F931F930F935B
:10498000D9C48091360190913701069710F00C94AC
:10499000EB2C8CE380934A0380E295E0A5C78091DD
:1049A00072091DE7C12E13E2D12EC0913D05D091B1
:1049B0003E0580FF6BC010924A03809103049091E2
:1049C0000404A0910504B0910604BC01CD0125E0CA
:1049D00030E040E050E00E9423923F932F938DE21D
:1049E00095E09F938F93DF92CF92FE01099584E12A
:1049F00080934A038DB79EB706968DBF8091FF03C3
:104A000090910004A0910104B0910204BC01CD0179
:104A100025E030E040E050E00E9423923F932F9346
:104A20008AE395E09F938F93DF92CF92E0913D05CB
:104A3000F0913E05099588E280934A03EDB7FEB7F1
:104A40003696EDBF80911501909116019F938F933B
:104A500087E495E09F938F93DF92CF92E0913D059D
:104A6000F0913E0509958CE380934A032DB73EB73C
:104A70002A5F3F4F2DBF87B599279F938F9384E57A
:104A800095E09F938F93DF92CF928EC010924A034E
:104A900081E695E09F938F93DF92CF92FE01099577
:104AA00084E180934A030F900F900F900F9080E75E
:104AB00095E09F938F93DF92CF921AC710924A038B
:104AC00089E795E09F938F930DE713E2DF92CF92F2
:104AD000FE01099584E180934A030F900F900F9097
:104AE0000F908091630490916404A0916504B0914B
:104AF0006604B7FF04C081509C4FAF4FBF4FCAE060
:104B0000B595A79597958795CA95D1F7BF93AF931C
:104B10009F938F9386E895E09F938F931F930F93B6
:104B2000E0913D05F0913E05099588E280934A03A6
:104B3000EDB7FEB73896EDBF80915B0490915C04B1
:104B4000A0915D04B0915E04B7FF04C081509C4FFA
:104B5000AF4FBF4FFAE0B595A79597958795FA9512
:104B6000D1F7BF93AF939F938F9385E995E09F9380
:104B70008F931F930F93E0913D05F0913E050995AA
:104B80008CE380934A032DB73EB7285F3F4F2DBF7C
:104B900080912F09909130099F938F9384EA95E03B
:104BA0009F938F931F930F93E0913D05F0913E05E6
:104BB00009958DB79EB706968DBF0DC7E1E0FE2E15
:104BC000C1E0D0E00BEB18E09F2D969584E1989F13
:104BD000C001112480934A03F801828193819F933D
:104BE0008F932196DF93CF932197808191819F931B
:104BF0008F93DF93CF9383EB95E09F938F938DE714
:104C000093E29F938F93E0913D05F0913E050995C6
:104C10002DB73EB7245F3F4F2DBF32E0F30E2296F3
:104C20000C5F1F4F88E08F1578F6D5C610924A03A7
:104C300080918707E82FFF27EE0FFF1FE754F74FFC
:104C4000808191819F938F9380918607E82FFF2722
:104C5000EE0FFF1FE754F74F808191819F938F9351
:104C600085EC95E09F938F93DF92CF92FE0109959B
:104C700084E180934A03EDB7FEB73896EDBF80918B
:104C80008907E82FFF27EE0FFF1FE754F74F8081BA
:104C900091819F938F9380918807E82FFF27EE0FD4
:104CA000FF1FE754F74F8081918181589F4F9F9359
:104CB0008F9385ED95E09F938F93DF92CF92E09154
:104CC0003D05F0913E05099588E280934A032DB792
:104CD0003EB7285F3F4F2DBF80918B07E82FFF27FE
:104CE000EE0FFF1FE754F74F8081918181589F4F4E
:104CF0009F938F9380918A07E82FFF27EE0FFF1F66
:104D0000E754F74F8081918181589F4F9F938F93F4
:104D100085EE95E09F938F93DF92CF92E0913D05D2
:104D2000F0913E0509958CE380934A038DB79EB7B9
:104D300008968DBF80918D07E82FFF27EE0FFF1F8C
:104D4000E754F74F8081918181589F4F9F938F93B4
:104D500080918C07E82FFF27EE0FFF1FE754F74FD6
:104D60008081918181589F4F9F938F9385EF95E02C
:104D700063C210924A0385E096E09F938F930DE7FC
:104D800013E2DF92CF92FE010995809101010F900D
:104D90000F900F900F908A3009F09DC084E18093AE
:104DA0004A0380917804909179049C0197FF02C096
:104DB000295F3F4F287F821B930B9F938F93809196
:104DC00078049091790497FD079673E095958795FF
:104DD0007A95E1F79F938F9320917804309179042D
:104DE00037FF02C0295F3F4F63E0359527956A95ED
:104DF000E1F780912A0390912B03821B930B9F93E1
:104E00008F9383E196E09F938F931F930F93E0918D
:104E10003D05F0913E05099588E280934A032DB740
:104E20003EB7265F3F4F2DBF809176049091770467
:104E30009C0197FF02C0295F3F4F287F821B930B85
:104E40009F938F93809176049091770497FD0796B6
:104E500053E0959587955A95E1F79F938F9320910D
:104E600076043091770437FF02C0295F3F4F43E05B
:104E7000359527954A95E1F780912803909129036C
:104E8000821B930B9F938F9384E296E09F938F9363
:104E90001F930F93E0913D05F0913E0509958CE33A
:104EA00080934A038DB79EB70A968DBF8091740494
:104EB000909175049F938F938091740490917504E1
:104EC0002091260330912703821B930B9F938F938E
:104ED00085E396E0ADC08B3019F0843108F4ADC0A5
:104EE00084E180934A0380917804909179049C0135
:104EF00097FF02C0215F3F4F207F821B930B97FDDE
:104F00000196959587959F938F93809178049091C2
:104F1000790497FD0F9624E0959587952A95E1F7FA
:104F20009F938F93209178043091790437FF02C0CA
:104F3000295F3F4FC3E035952795CA95E1F78091EA
:104F40002A0390912B03821B930B9F938F9383E4EF
:104F500096E09F938F931F930F93E0913D05F091FF
:104F60003E05099588E280934A032DB73EB7265F38
:104F70003F4F2DBF80917604909177049C0197FF5D
:104F800002C0215F3F4F207F821B930B97FD01964C
:104F9000959587959F938F93809176049091770450
:104FA00097FD0F96A4E095958795AA95E1F79F93B5
:104FB0008F93209176043091770437FF02C0295FE8
:104FC0003F4FF3E035952795FA95E1F78091280357
:104FD00090912903821B930B9F938F9385E596E015
:104FE0009F938F931F930F93E0913D05F0913E05A2
:104FF00009958CE380934A038DB79EB70A968DBFBF
:10500000809174049091750497FD0196959587950C
:105010009F938F938091740490917504209126033F
:1050200030912703821B930B9F938F9387E696E023
:105030009F938F931F930F9303C18D3009F0CBC4BF
:1050400084E180934A038091140199279F938F9361
:10505000809178049091790497FD0F9674E095956E
:1050600087957A95E1F79F938F93209178043091FB
:10507000790437FF02C0295F3F4F63E035952795DC
:105080006A95E1F780912A0390912B03821B930B81
:105090009F938F9386E796E09F938F931F930F9331
:1050A000E0913D05F0913E05099588E280934A0321
:1050B0002DB73EB7265F3F4F2DBF80911301992733
:1050C0009F938F93809176049091770497FD0F962C
:1050D00054E0959587955A95E1F79F938F9320918A
:1050E00076043091770437FF02C0295F3F4F43E0D9
:1050F000359527954A95E1F78091280390912903EA
:10510000821B930B9F938F938AE896E09F938F93D4
:105110001F930F93E0913D05F0913E0509958CE3B7
:1051200080934A038DB79EB70A968DBF8091120176
:1051300099279F938F93809174049091750497FDA4
:105140000196959587959F938F9380917404909184
:1051500075042091260330912703821B930B9F93A4
:105160008F938EE996E09F938F931F930F93E09117
:105170003D05F0913E050995EDB7FEB73A9668C03A
:1051800010924A0382EB96E09F938F93DF92CF9227
:10519000FE01099584E180934A030F900F900F90D0
:1051A0000F9080916E0490916F049F938F938091E4
:1051B0002203909123039F938F938FEB96E09F930D
:1051C0008F93DF92CF92E0913D05F0913E050995D6
:1051D00088E280934A032DB73EB7285F3F4F2DBF2B
:1051E00080916C0490916D049F938F938091240320
:1051F000909125039F938F938EEC96E09F938F93CE
:10520000DF92CF92E0913D05F0913E0509958CE348
:1052100080934A038DB79EB708968DBF809168042E
:10522000909169049F938F93809120039091210323
:105230009F938F938DED96E09F938F93DF92CF9204
:10524000E0913D05F0913E050995EDB7FEB7389622
:10525000EDBFC1C310924A0380911F0190912001BC
:105260006AE070E00E94EE919F938F9380911F01FE
:10527000909120016AE070E00E94EE917F936F931D
:105280008CEE96E09F938F93DF92CF92FE0109956B
:1052900084E180934A032DB73EB7285F3F4F2DBF6F
:1052A0008091120A9091130A6AE070E00E94DA91EC
:1052B0009F938F938091120A9091130A6AE070E095
:1052C0000E94DA917F936F9380E097E09F938F9392
:1052D000DF92CF92E0913D05F0913E05099588E27D
:1052E00080934A038DB79EB708968DBF8091140AAC
:1052F0009091150A9F938F9384E197E09F938F93EA
:10530000DF92CF92E0913D05F0913E0509958CE347
:1053100080934A03EDB7FEB73696EDBF8091160A2B
:105320009091170A9F938F9384E297E09F938F93B6
:10533000DF92CF92E0913D05F0913E0509952DB7A2
:105340003EB72A5F3F4F4FC110924A0386E397E072
:105350009F938F93DF92CF92FE01099584E1809312
:105360004A030F900F900F900F908091B908909181
:10537000BA089F938F938FE397E09F938F93DF9269
:10538000CF92E0913D05F0913E05099588E280932A
:105390004A038DB79EB706968DBF80910904992761
:1053A0009F938F938FE497E09F938F93DF92CF9299
:1053B000E0913D05F0913E0509958CE380934A0309
:1053C000EDB7FEB73696EDBF8091B80899270197E3
:1053D0009F938F938FE597E0A9CF10924A038FE6B2
:1053E00097E09F938F93DF92CF92FE01099584E11E
:1053F00080934A030F900F900F900F9080918A0135
:1054000090918B019F938F9387E797E09F938F9362
:10541000DF92CF92E0913D05F0913E05099588E23B
:1054200080934A038DB79EB706968DBF80912F0952
:10543000909130099F938F9385E897E09F938F9386
:10544000DF92CF92E0913D05F0913E0509958CE306
:1054500080934A03EDB7FEB73696EDBF80912104E5
:10546000909122049F938F9383E997E05FCFCAE0E6
:10547000CC2EC4E0DC2E20E030E0E901B3E0FB2ECE
:10548000C0934A03F60181916F0199279F938F93EF
:1054900089010F5F1F4F1F930F9381EA97E09F933E
:1054A0008F938DE793E29F938F93E0913D05F09169
:1054B0003E0509952DB73EB7285F3F4F2DBFFA94A3
:1054C00064969801F7FEDCCF86C2AEE0CA2EA4E057
:1054D000DA2EC0E0D0E08E01F3E0FF2E00934A0305
:1054E000F60181916F0199279F938F932596DF9302
:1054F000CF938EEA97E09F938F938DE793E29F93EC
:105500008F93E0913D05F0913E0509952DB73EB78B
:10551000285F3F4F2DBFFA940C5E1F4F2497F7FE74
:10552000DDCF59C210924A038BEB97E09F938F9384
:105530000DE713E2DF92CF92FE01099584E180939B
:105540004A030F900F900F900F9080916901992757
:105550009F938F9383EC97E09F938F93DF92CF92EB
:10556000E0913D05F0913E05099588E280934A035C
:105570008DB79EB706968DBF809104039091050369
:1055800097FD039695958795959587959F938F930E
:1055900081ED97E09F938F931F930F93E0913D05CB
:1055A000F0913E0509958CE380934A03EDB7FEB771
:1055B0003696EDBF8091B50799279F938F93809181
:1055C000B40799279F938F938FED97E09F938F93C5
:1055D0001F930F93E0913D05F0913E0509952DB77E
:1055E0003EB7285F3F4F2DBFF6C110924A038DEEA4
:1055F00097E09F938F937DE7A72E73E2B72EDF92FC
:10560000CF92FE0109950F900F900F900F90C8E573
:10561000D8E000E010E062E0F62E802F8C5E8093F0
:105620004A038B8D99278F7790709F938F938B89E7
:1056300099278F7790709F938F938B8599278F777A
:1056400090709F938F938B8199278F7790709F9302
:105650008F938DEF97E09F938F93BF92AF92E091DE
:105660003D05F0913E0509958DB79EB70C968DBF0F
:10567000FA940C5E1F4FA096F7FECFCFACC11092EC
:105680004A038EE098E09F938F935DE7A52E53E247
:10569000B52EDF92CF92FE0109950F900F900F90DB
:1056A0000F90C8E5D8E000E010E042E0F42E802F33
:1056B0008C5E80934A038F8D992787FD90959F93E9
:1056C0008F938F89992787FD90959F938F938F85CF
:1056D000992787FD90959F938F938F81992787FDB9
:1056E00090959F938F938DE198E09F938F93BF92B6
:1056F000AF92E0913D05F0913E050995EDB7FEB7FB
:105700003C96EDBFFA940C5E1F4FA096F7FECFCFEC
:1057100062C110924A038EE298E09F938F930DE747
:1057200013E2DF92CF92FE01099584E180934A0350
:105730000F900F900F900F9080917308881F88270B
:10574000881F97E0899FC00111248D969F938F93A6
:1057500080916B08881F8827881F96E0899FC00169
:1057600011248D969F938F9380916308881F8827BB
:10577000881F95E0899FC00111248D969F938F9378
:1057800080915B08881F8827881F9927880F991F99
:10579000880F991F8D969F938F938DE398E09F9329
:1057A0008F93DF92CF92E0913D05F0913E050995F0
:1057B00088E280934A032DB73EB7245F3F4F2DBF49
:1057C00080919308881F8827881F9BE0899FC001CC
:1057D00011248D969F938F9380918B08881F882723
:1057E000881F9AE0899FC00111248D969F938F9303
:1057F00080918308881F8827881F99E0899FC001AE
:1058000011248D969F938F9380917B08881F882702
:10581000881F992723E0880F991F2A95E1F78D9615
:105820009F938F9381E598E09F938F93DF92CF9220
:10583000E0913D05F0913E0509958CE380934A0384
:105840008DB79EB70C968DBF80919B08881F8827C7
:10585000881F9CE0899FC00111248D969F938F9390
:1058600085E698E09F938F93DF92CF92E0913D057C
:10587000F0913E0509958091A308EDB7FEB73696E5
:10588000EDBF87FF12C080E480934A0386E798E06B
:105890009F938F93DF92CF92E0913D05F0913E056B
:1058A00009950F900F900F900F908091AB0887FF94
:1058B00012C084E480934A0389E798E09F938F9312
:1058C0001F930F93E0913D05F0913E0509950F90D0
:1058D0000F900F900F908091B30887FF7CC088E4F1
:1058E00080934A038CE798E09F938F931F930F93C5
:1058F000E0913D05F0913E0509950F900F900F90B6
:105900000F9069C010924A038FE798E09F938F939E
:10591000DF92CF92FE01099584E180934A030F90B4
:105920000F900F900F908091DA029091DB029F937D
:105930008F938DE898E09F938F93DF92CF92E091C1
:105940003D05F0913E05099588E280934A032DB705
:105950003EB72A5F3F4F2DBF8091DC029091DD0260
:105960009F938F938AE998E09F938F93DF92CF92D2
:10597000E0913D05F0913E05099589E480934A0345
:105980008DB79EB706968DBF87EA98E09F938F9359
:10599000DF92CF92E0913D05F0913E05099580910F
:1059A00048030F900F900F900F9083FF14C0109238
:1059B000DD021092DC0260E070E08EE090E00E9478
:1059C000002F09C080912101281719F4215020933C
:1059D00021011092490310924803DF91CF911F914A
:1059E0000F91FF90DF90CF90BF90AF900895F999FD
:1059F000FECF92BD81BDF89A80B599270895F99997
:105A0000FECF1FBA92BD81BD60BD0FB6F894FA9A61
:105A1000F99A0FBE08954AEA20E030E026173707CA
:105A200040F4FC018191480F2F5F3F4F2617370745
:105A3000C8F3842F99270895EAEA40E050E046171A
:105A4000570778F49C01F999FECF32BD21BDF89A31
:105A500080B5E80F4F5F5F4F2F5F3F4F46175707E7
:105A600090F38E2F9927089581E08093880782E034
:105A70008093870783E08093860784E0809389077B
:105A800085E080938A0786E080938B0787E0809388
:105A90008C0788E080938D0789E080938E078AE0E9
:105AA00080938F078BE0809390078CE08093910721
:105AB00008958DE5809385078CE0E5EFF7E011927E
:105AC0008A95E9F780910101843150F08AE0809352
:105AD000A5071092C9078BE18093A1078EE40AC045
:105AE00083E08093A50780E28093C9078EE18093CD
:105AF000A10785E58093C6078093C70780E280935E
:105B0000C8071092F1078AE68093920782E2809399
:105B1000F30780E48093F40766E06093AC0710928B
:105B2000E9071092E60748E040939F0756EE50932E
:105B3000A0078093A2079EE1909393078FEF809335
:105B400095072FE02093960790939407109298075B
:105B50004093990784E180939A0710929B072093C2
:105B600097071092AE071092AF071092B0071092ED
:105B7000B1071092CB071092CC071092CD0710926C
:105B8000CE0790E89093B20732E33093B30782E0F8
:105B90008093F2072093B4075093B50784E0809375
:105BA000BA072DE72093BD072093BE072093BF07B8
:105BB0009093B60755E55093B70786E48093B807EE
:105BC0008CED8093B9078CE38093BB071092BC07E0
:105BD0008FE58093CF0783EF8093D1078AEA809384
:105BE000D3078093D40788E28093D0078093D207AD
:105BF0001092D5073093C0079AE59093C107309370
:105C0000C2078EEF8093D60784E68093D7079093E0
:105C1000D8079093D9079093DA078BE48093DB073A
:105C20005093DC078093DD071092DE076093DF0757
:105C30004093E0079093E1078AE28093E20785EFC3
:105C40008093E3078CE88093E40785E08093E50781
:105C50001092E7071092E80781E28093A90781E498
:105C60008093AA079093AB071092EA071092EB0774
:105C70001092EC0786E98093ED072093C30784E335
:105C80008093C4071092EE071092EF071092F0076E
:105C900008950E94592D8AE080939C0780E18093AB
:105CA0009D0726E020939E079AE59093A30788E737
:105CB0008093A4079093A6078093A7072093A80733
:105CC00080E28093AD078CE38093C5078BE48093DB
:105CD000CA0786E491E6A3E7B4E78093F5079093BB
:105CE000F607A093F707B093F8076CE770E085E834
:105CF00097E00E940B2D809301080895CF93DF93C6
:105D00000E94592D88E080939C0730E130939D07D5
:105D100026E020939E0794E69093A30788E780935C
:105D2000A4079093A6078093A7072093A807309312
:105D3000AD0786E48093C5078093CA07A5EFB7E057
:105D4000E2E2F1E0ED01019009922A95E1F76CE7BA
:105D500070E0CD01805790400E940B2D8093010888
:105D6000DF91CF9108950E94592D26E020939C0742
:105D70008AE080939D0784E080939E0794E6909349
:105D8000A30788E78093A4079093A6078093A707AB
:105D90002093A80780E18093AD0786E48093C50730
:105DA0008093CA0785E491E6A3E7B9E78093F507F6
:105DB0009093F607A093F707B093F8076CE770E0AD
:105DC00085E897E00E940B2D809301080895F999CA
:105DD000FECF92BD81BDF89A80B599270895F999B3
:105DE000FECF1FBA92BD81BD60BD0FB6F894FA9A7E
:105DF000F99A0FBE089567EF7CE20E943D900895E6
:105E00004FEF5CE20E9477900895EF92FF920F931C
:105E10001F93CF93C82F8150853008F0C3E08DE7E2
:105E2000C89F8001112487EEE82E8FEFF82EE00E38
:105E3000F11E6CE770E0C7010E941C2D682F9801CD
:105E40002D593F4F8FB39927AC014270507081FD9F
:105E5000F9CF32BD21BDF89A80B5861711F0CA017D
:105E600023C08FB399279C012270307081FDF9CF38
:105E7000F2BCE1BCF89A80B58D3511F0C90114C0AF
:105E80008DE7C89FC0011124499727EF3CE24DE7F9
:105E900050E0BC0185E897E00E9418900E94EC6DEC
:105EA0000E94F58B81E090E0CF911F910F91FF90C0
:105EB000EF900895282F863010F025E003C0882346
:105EC00009F421E0F999FECF1FBA82E090E092BD7B
:105ED00081BD20BD0FB6F894FA9AF99A0FBE0895C5
:105EE000CF93C82F809185078D3509F051C0C630FA
:105EF00010F0C5E003C0CC2309F44AC00E94018F12
:105F00008091F40782FF07C08091AA07843618F0B9
:105F100080E58093AA076CE770E085E897E00E942F
:105F20000B2D809301088DE7C89FC00111242FEF2E
:105F30003CE24DE750E065E877E049970E945590D4
:105F40002FEF3CE24CE050E066E877E080E590E03F
:105F50000E9455906CE070E086E897E00E940B2D5F
:105F6000282FF999FECF1FBA8CE590E092BD81BD34
:105F700020BD0FB6F894FA9AF99A0FBE8C2F0E94A2
:105F80005A2F0E94EC6D0E94F58B81E090E002C0D8
:105F900080E090E0CF9108956DE470E088EE93E0AA
:105FA0000E941C2D482F8FB399279C0122703070BE
:105FB00081FDF9CF85E394E092BD81BDF89A80B56B
:105FC000841779F48FB399279C012270307081FD7A
:105FD000F9CF88EE93E092BD81BDF89A80B581300B
:105FE00011F0C901089527EF3CE24EE450E068EE5D
:105FF00073E082E098E00E94189081E090E00895BC
:10600000809102088130A9F46DE470E082E098E0AC
:106010000E940B2D80934F082FEF3CE24EE450E09E
:1060200062E078E088EE93E00E94559081E090E095
:10603000089580E090E00895CF93DF9381E080930E
:106040000208E2E0F8E08FE0158616861786108ACF
:106050008150349687FFF8CF80E480930F088093B7
:10606000100810921108809312088093130890EC86
:1060700090931408109215088093160880931708BF
:10608000109218089093190890931A0880931B088F
:1060900010921C0880931D0890931E08A3E0B8E09E
:1060A0008CE0E9E2F1E0ED01019009928A95E1F7D7
:1060B0006DE470E0CD0101970E940B2D80934F0895
:1060C000DF91CF910895F999FECF82E090E092BDE3
:1060D00081BDF89A80B5282F863078F023E0322FE2
:1060E000F999FECF1FBA82E090E092BD81BD30BD2C
:1060F0000FB6F894FA9AF99A0FBE822F992708954D
:106100001F93CF93C82F162F863010F0C5E003C021
:10611000882309F4C1E08C2F99278230910541F042
:106120008330910544F4019731F40E94492E05C053
:106130000E947E2E02C00E94B32E1123E1F06CE07B
:1061400070E080E590E00E941C2D282FF999FECF89
:106150008CE590E092BD81BDF89A80B5821759F424
:1061600027EF3CE24CE050E060E570E086E897E025
:106170000E94189002C00E94342D8C2F0E94702F14
:10618000CF911F910895DF92EF92FF920F931F938B
:10619000CF93FF24DF2CEF2C81E090E00E94E72ECC
:1061A0008D3511F031E0E32E6CE070E080E590E099
:1061B0000E941C2DC82FF999FECF8CE590E092BD6E
:1061C00081BDF89A80B58C1711F421E0D22EC1E080
:1061D00001E010E0EE2029F48C2F0E94052F882387
:1061E000C9F591E0F92E1F930F938FEA98E09F93E2
:1061F0008F9380E695E19F938F93E0913D05F09119
:106200003E0509952DB73EB72A5F3F4F2DBF02309F
:10621000110549F0033011054CF40130110531F43A
:106220000E94492E05C00E947E2E02C00E94B32EFD
:10623000DD2059F027EF3CE24CE050E060E570E0F3
:1062400086E897E00E94189002C00E94342D8C2F9F
:106250000E94702FCF5F0F5F1F4FC63008F4BACF78
:10626000FF2019F083E00E945A2F0E946330C82F4C
:106270000E94052F8C2F99279F938F9385ED98E08F
:106280009F938F9300E615E11F930F93E0913D05D7
:10629000F0913E05099581E090E00E94E72E2DB730
:1062A0003EB72A5F3F4F2DBF8F3F21F00E94CC2F7A
:1062B000882399F48EEE98E09F938F931F930F930A
:1062C000E0913D05F0913E0509950E941C300E9429
:1062D00000300F900F900F900F90EE2029F06DE599
:1062E00081E090E00E94EF2E1092840790E0EFE0B2
:1062F000F8E0CFE08081349618160CF49F5FC1500F
:10630000C7FFF8CF90938407892F99279F938F9386
:1063100083E098E09F938F938FE099E09F938F9312
:106320001F930F93E0913D05F0913E0509950E9462
:106330004A098DB79EB708968DBFCF911F910F91D7
:10634000FF90EF90DF900895982F2FB7F894399829
:10635000389A88B1836088B98091B9008C7F809326
:10636000B9008AE28093B80010925503109253034B
:1063700010925203992379F0E8E5F8E08BE010825F
:106380001182128213821482158216821782815022
:10639000389687FFF4CF78942FBF08951092550355
:1063A00084E98093BC0080E88093BC001092BD001B
:1063B0001092BA001092BB001092B9001092B8006F
:1063C0001092510380E00E94A4311092BB0085E836
:1063D0008093BC0080914F03826080934F030895A7
:1063E0001F920F920FB60F9211242F933F934F934A
:1063F0005F938F939F93EF93FF9380915503282F83
:106400003327442755278F5F80935503F9012731A0
:10641000310508F0C2C2E759FF4F0C94759281E034
:106420008093510309C0809153038C3090F4809184
:1064300053038F5F8093530380915303E82FFF270B
:10644000EE0FFF1FEE0FFF1FEE5FF74F858518164B
:1064500054F7809153038C3070F010924E031092D9
:106460004D031092530385E08093550380915203AE
:10647000880F8D5A04C080915303880F8E5A8093E1
:10648000BB0085E87FC280915303E82FFF2783E09C
:10649000EE0FFF1F8A95E1F7E85AF74F818180934D
:1064A000BB0085E88093BC0080915303E82FFF2751
:1064B000EE0FFF1FEE0FFF1FEE0FFF1FE85AF74F03
:1064C000808180FF91C080915303E82FFF27EE0F5A
:1064D000FF1FEE0FFF1FEE0FFF1FE85AF74F8281DD
:1064E000882329F080918407873008F46CC280915A
:1064F0004D0390914E03892B09F065C280914B03A7
:1065000090914C03892B09F05EC26EC080915303B9
:1065100021E030E002C0220F331F8A95E2F780911C
:106520004B0390914C0328233923232B79F080913E
:106530005303E82FFF27EE0FFF1FEE0FFF1FEE0F95
:10654000FF1FE85AF74F80E184830DC08091530309
:10655000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1FAD
:10656000E85AF74F148280915303E82FFF2753E036
:10657000EE0FFF1F5A95E1F7E85AF74F8481282F55
:10658000332743E0220F331F4A95E1F780915303ED
:10659000E82FFF2793E0EE0FFF1F9A95E1F7E85AE7
:1065A000F74F82818770822B8093BB0085E88093B0
:1065B000BC002091530381E090E002C0880F991F36
:1065C0002A95E2F720914D0330914E0382239323C5
:1065D000892B51F080E598E09093590380935803FC
:1065E00088E080935A03EFC184E089C1E0915803A9
:1065F000F091590381918093BB0085E88093BC00A2
:10660000F0935903E093580380915A03815080938B
:106610005A03882309F4D7C183E071C18091B9007E
:10662000803351F580915603882329F480915303D8
:106630008F5F8093560380915303E82FFF2783E0F9
:10664000EE0FFF1F8A95E1F7E85AF74F83819927EC
:106650008F7790708F3791057CF480915303E82FEA
:10666000FF27EE0FFF1FEE0FFF1FEE0FFF1FE85A71
:10667000F74F83818F5F83831092550384E9809362
:10668000BC008AE090E090933701809336018091BE
:1066900053038F5F80935303109255036DC1809114
:1066A000B9008034C9F180915203E82FFF27EE0F23
:1066B000FF1FEE0FFF1FEE0FFF1FE85AF74F8381FA
:1066C0008F778383809152038F5F809352038091F1
:1066D00052038C30A0F01092520310924C0310928F
:1066E0004B03809157038F5F809357038C3038F0B2
:1066F0001092570380914F038D7F80934F038091B9
:106700004F03816080934F031092550384E9809377
:10671000BC001092510373C080915203E82FFF27F1
:10672000EE0FFF1FEE0FFF1FEE0FFF1FE85AF74F90
:1067300083818068838380915203E82FFF27EE0FC7
:10674000FF1FEE0FFF1FEE0FFF1FE85AF74F80816C
:1067500080FF2FC080915203E82FFF2753E0EE0FF8
:10676000FF1F5A95E1F7E85AF74F84819927009760
:1067700051F04097D9F580E598E0909359038093C4
:10678000580388E031C080915203992743E0880F75
:10679000991F4A95E1F7835A974F90935903809335
:1067A000580390915203809157039817E1F483E0C6
:1067B0001BC080915203992733E0880F991F3A95A7
:1067C000E1F7835A974F9093590380935803809130
:1067D0004F0381FD06C09091520380915703981793
:1067E00011F482E001C081E080935A0380915A0342
:1067F000813011F485E801C085EC8093BC00809164
:1068000056038093500310925603DDC0E091580365
:10681000F09159038091BB0080838091580390913F
:1068200059030196909359038093580380915A031A
:10683000815080935A03823010F085EC5DC0813026
:1068400011F485E859C080914F0381FF2DC08091DC
:10685000D10380FD1DC080915203E82FFF2723E064
:10686000EE0FFF1F2A95E1F7E85AF74F86818A3F1E
:1068700079F480915203E82FFF2793E0EE0FFF1F7A
:106880009A95E1F7E85AF74F8081816080830CC0C8
:1068900080915203E82FFF2783E0EE0FFF1F8A95B8
:1068A000E1F7E85AF74F1082809152038F5F80938F
:1068B0005203809152038C30A0F010925203109238
:1068C0004C0310924B03809157038F5F80935703C3
:1068D0008C3038F01092570380914F038D7F809356
:1068E0004F031092550384E98093BC0080914F03BD
:1068F000816080934F0365C08093BC0086E08093E5
:10690000550361C088E9BBCD80915403880F805F37
:10691000B6CD8091540399278130910561F0823082
:1069200091051CF4892B21F04EC0029739F04BC021
:1069300080911401A4CD80911301A1CD8091120109
:106940009ECD80E89CCD1092550384E98093BC00D5
:10695000109251038AE090E09093370180933601C2
:1069600080915403823088F4809154038F5F809328
:10697000540382E18093550380914F038E7F80936F
:106980004F0385EA8093BC001EC01092540380918F
:106990004F03816080934F0316C01092550384E922
:1069A0008093BC0080914F03816080934F038AE005
:1069B00090E0909337018093360110925303109228
:1069C000520310925103FF91EF919F918F915F912C
:1069D0004F913F912F910F900FBE0F901F901895E0
:1069E0001F93CF93DF93182F80910804882321F4FD
:1069F0008091E902882319F081E090E097C01D3072
:106A000008F092C01123B1F0E12FFF2723E0EE0F31
:106A1000FF1F2A95E1F7E85AF74F359780813596A1
:106A200088230CF081C03897808180FD03C083E00B
:106A300090E07CC080915008823019F084E090E0B2
:106A400075C067E070E080E598E00E940B2D9091A2
:106A50005708891719F085E090E068C080ED97E04D
:106A60000E946F19EC0180914F0380FD05C0CE019B
:106A70000E9478198823B9F3112319F48FEF90E05D
:106A80000BC0212F33272150304081E090E002C01D
:106A9000880F991F2A95E2F790934E0380934D0338
:106AA000A1E0B0E0E8E5F8E040E050E06BE0CD01C7
:106AB000042E02C0880F991F0A94E2F720914D031B
:106AC00030914E0382239323892B11F0118212827D
:106AD00061504F5F5F4F389667FFE9CF10925303C5
:106AE0001092550380914F038E7F80934F0385EA68
:106AF0008093BC0080914F0380FD05C0CE010E94B1
:106B000078198823B9F380914D0390914E03892B16
:106B100029F0CE010E947819882311F380914D034A
:106B200090914E03009711F082E090E0DF91CF91B9
:106B30001F9108950F931F93CF93DF93982F809108
:106B40000804882321F48091E902882319F081E068
:106B500090E092C09D30A0F4992319F486E090E073
:106B60008BC0C92FDD27FE0133E0EE0FFF1F3A95E2
:106B7000E1F7E85AF74F35978081359687FD03C0D6
:106B800082E090E079C03897808180FD03C083E087
:106B900090E072C080ED97E00E946F198C018091A7
:106BA0004F0380FD05C0C8010E9478198823B9F3FE
:106BB000219721E030E0C90102C0880F991FCA95D2
:106BC000E2F790934C0380934B03D901E8E5F8E09A
:106BD00040E050E06BE0CD01042E02C0880F991F09
:106BE0000A94E2F720914B0330914C0382239323C4
:106BF000892B11F01182128261504F5F5F4F3896DE
:106C000067FFE9CF10925203109250081092570874
:106C10001092550380914F038E7F80934F0385EA36
:106C20008093BC0080914F0380FD05C0C8010E9485
:106C300078198823B9F380914B0390914C03892BE9
:106C400029F0C8010E947819882311F38091500817
:106C5000823019F084E090E00FC067E070E080E5DA
:106C600098E00E940B2D90915708891719F085E044
:106C700090E002C080E090E0DF91CF911F910F91F2
:106C80000895CF93DF9380E021E83FEFCDEED8E089
:106C9000E9EBF8E0DF01853020F411961C921E929A
:106CA00002C0318320831982188222968F5F129648
:106CB00032968A3180F31092750410927404109207
:106CC0007704109276041092790410927804DF9180
:106CD000CF9108951F920F920FB60F9211240F9328
:106CE0001F932F933F934F935F936F937F938F9354
:106CF0009F93AF93BF93CF93DF93EF93FF938091D5
:106D0000F30782FDE1C04091860050918700809199
:106D10005C0390915D03481B590B80918600909114
:106D2000870090935D0380935C03CA018D54944067
:106D3000A0915E03B0915F03835F9A4178F48091E4
:106D40005E038093B808149714F010923A0181E022
:106D500090E090935F0380935E032BC2AD30B1054A
:106D60000CF027C2CA018B5F9040845B914008F011
:106D700086C08091380190913901481B590BE091F0
:106D8000EE07EE2351F0FF27EE0FFF1FE754F74FFA
:106D90008081918184369105ECF4FD01EA0FFB1F9F
:106DA000E754F74F80819181FA01E81BF90BCF017D
:106DB000F7FF03C0909581959F4F06975CF48091F3
:106DC0000904883C20F480910904865F01C088ECA6
:106DD00080930904FD01EA0FFB1FE754F74F808100
:106DE00091819C01220F331F280F391F240F351F5B
:106DF00037FF02C02D5F3F4FE901D595C795D59567
:106E0000C795CA0101968C179D0714F4219706C0F7
:106E100041505040C417D5070CF4219680910904C5
:106E2000833CE0F08D010A0F1B1FF801E754F74F78
:106E3000808191819E01281B390BC90163E070E0BC
:106E40000E94EE91CB01880F991F860F971F035167
:106E5000174FD80111969C938E9307C0AA0FBB1FA2
:106E6000A351B74F11961C921E92E0915E03F091D0
:106E70005F03EE0FFF1FE754F74FD183C0832091CC
:106E80005E0330915F032F5F3F4F30935F0320938A
:106E90005E0380910101843108F08BC125303105FA
:106EA00011F45D9A01C05D9880915E0390915F033B
:106EB0008630910511F45C9A01C05C98079711F433
:106EC0005B9A77C15B9875C14091860050918700AD
:106ED0008091600390916103481B590B809186005B
:106EE000909187009093610380936003CA018D5451
:106EF00094406091CA03835F9A4108F07AC060931E
:106F00005B0380915B03843008F453C09091B80810
:106F100080915B03981709F04CC05091CB035B3014
:106F200008F43FC010923A011092CA0340E05F316A
:106F3000C0F0E42FFF27EE0FFF1F9F012A563C4FA2
:106F4000DF01A754B74F8D919C91D9018D939C93EC
:106F5000DF01A351B74F8D919C91E055FC4F918378
:106F60008083E42FFF27EE0FFF1F9F012754374F29
:106F7000DF01AE59BC4F8D919C91D90111969C9324
:106F80008E93DF01A458BC4F8D919C91E351F74F34
:106F900091838083842F8F5F482F8D3040F28093C0
:106FA000CA038091CB038F3FB9F08F5F8093CB03EF
:106FB00013C08091CB03853620F08AE08093CB0309
:106FC00002C01092CB03809101018A3011F084310C
:106FD00010F0289A01C0289881E08093CA0380911C
:106FE0000804882309F0E5C080915B038093B8080A
:106FF000E0C06D3008F0B5C0CA018B5F9040845B83
:10700000914008F090C08091380190913901481B5F
:10701000590BE62FFF27EE0FFF1FEE59FC4F808123
:107020009181FA01E81BF90BCF0105960B9720F52A
:10703000E091EE07EE2351F0FF27EE0FFF1FE7541C
:10704000F74F8081918184369105B4F48091CB0310
:107050008A3120F080910904865F05C08B3028F0CA
:10706000809109048E5F8093090480910904893C12
:1070700018F088EC80930904E62FFF27EE0FFF1F1E
:10708000EE59FC4F808191819C01220F331F280F04
:10709000391F240F351F37FF02C02D5F3F4FE90115
:1070A000D595C795D595C795CA0101968C179D07AB
:1070B00014F4219706C041505040C417D5070CF472
:1070C0002196809109048E3BD8F0E62FFF27EE0F22
:1070D000FF1FDF01AE59BC4F8D919C919E01281B73
:1070E000390BC90163E070E00E94EE91CB01880F7B
:1070F000991F860F971FE458FC4F9183808308C027
:10710000E62FFF27EE0FFF1FE458FC4F118210827D
:107110008091CA03E82FFF27EE0FFF1FEE59FC4FA7
:10712000D183C08309C0809101018A3011F084317C
:1071300010F0289A01C0289880910101843188F4C8
:107140008091CA03853011F45D9A05C05D98863040
:1071500011F45C9A05C05C98873011F45B9A01C009
:107160005B988091CA03843120F48F5F8093CA03B7
:1071700020C08431F1F4809101018A3011F0843112
:1071800010F0289A01C028988EE18093CA032CE061
:10719000CDEED8E0A6E9B3E0E9EBF8E08D919D9162
:1071A000918380833296198218822296215027FF7C
:1071B000F5CFFF91EF91DF91CF91BF91AF919F916B
:1071C0008F917F916F915F914F913F912F911F917F
:1071D0000F910F900FBE0F901F901895EF92FF9296
:1071E0000F931F938091A1079927880F991F880FEC
:1071F000991F7C010027F7FC0095102F80916304F4
:1072000090916404A0916504B0916604BC01CD0125
:10721000A80197010E9423923093E3062093E2068F
:1072200080915B0490915C04A0915D04B0915E0438
:10723000BC01CD01A80197010E9423923093E5067D
:107240002093E406809176099091770997FD039643
:1072500095958795959587959093E7068093E60693
:10726000809186099091870997FD0396959587955A
:10727000959587959093E9068093E806809174042C
:10728000909175042091260330912703821B930B64
:107290009093EB068093EA06809103049091040496
:1072A000A0910504B0910604BC01CD0125E030E0B9
:1072B00040E050E00E9423923093ED062093EC06CC
:1072C00080912003909121039093EF068093EE0626
:1072D00080911F01909120019093F1068093F00618
:1072E0008091590899279093F3068093F206809134
:1072F000610899279093F5068093F40680916908B8
:1073000099279093F7068093F60680917108992744
:107310009093F9068093F8068091790899279093C5
:10732000FB068093FA068091810899279093FD06C9
:107330008093FC068091890899279093FF0680939B
:10734000FE0680919108992790930107809300078A
:1073500080910904992790930307809302078091F5
:10736000820990918309A0918409B09185092091A7
:107370003C0130913D0140913E0150913F01BC01E3
:10738000CD010E942392309305072093040780913A
:10739000120A9091130A9093070780930607809131
:1073A000160A9091170A9093090780930807809115
:1073B00004039091050390930B0780930A07809133
:1073C0008A0190918B0190930D0780930C07109286
:1073D0000F0710920E078091180A992790931107B2
:1073E000809310078091D5049091D6049093130751
:1073F000809312078091D3049091D4049093150741
:107400008093140780915605882321F480915705B5
:10741000882321F08091E106816003C08091E1061C
:107420008E7F8093E1061F910F91FF90EF9008955A
:10743000EF92FF921F93CF93DF93182F7B018091E0
:107440000804882391F5809101018C3010F0863179
:1074500011F4299801C0299A11501F3FE9F0F092C8
:107460000B03E0920A03E70180910A0390910B035A
:10747000892B11F4209781F380910E038823A1F3C7
:1074800010920E0380910A0390910B03892B09F44B
:1074900021970E94178FE8CF809101018C3010F066
:1074A000863111F4299A01C02998DF91CF911F915B
:1074B000FF90EF900895CF93DF93809101018D307D
:1074C00011F40E94621E10927A0080912A0390911A
:1074D0002B0390933B0980933A0980912803909164
:1074E000290390932B0980932A0980912603909178
:1074F000270390937C0980937B092091220330918C
:107500002303C901880F991F880F991F820F931FAA
:10751000820F931F9093770980937609209124031B
:1075200030912503C901880F991F880F991F820F79
:10753000931F820F931F90938709809386098FEC86
:1075400080937A00AAE0B4E0CAE8D7E097E0899196
:10755000E82FFF27EE0FFF1FE754F74F0190F08150
:10756000E02DE158FF4F1E161F061CF0E0E0F0E092
:1075700005C0EF3FF10514F0EFEFF0E08C91282FFC
:107580003327E217F30714F4815004C02E173F0786
:1075900014F48F5F8C939150119697FFD8CF809100
:1075A000C6079927AA27BB27BC01CD0124EC39E0E7
:1075B00040E050E00E94AF91DC01CB01809382015A
:1075C00090938301A0938401B09385018091C707B4
:1075D0009927AA27BB27BC01CD010E94AF91DC01EE
:1075E000CB0180937E0190937F01A0938001B093A3
:1075F0008101DF91CF910895A0E0B0E0E2E0FBE3EC
:107600000C944492882EC0E0D0E07E016E0110926E
:107610005605D0936F04C0936E04D0936D04C0934D
:107620006C04D0936904C0936804D0937904C09328
:107630007804D0937704C0937604D0937504C093F4
:107640007404109264011092630110921B030E9453
:107650005B3A84E690E00E9491190E945B3A809127
:10766000920780FF10C08091150190911601875BF1
:10767000934038F480911501909116018E5E9240EE
:1076800010F40E94E01D0FE18AE090E00E94911941
:107690008091260390912703C80FD91F80912A0358
:1076A00090912B03E80EF91E8091280390912903F5
:1076B000C80ED91E015007FFE7CF9701205F3F4F4B
:1076C000369527953695279530937904209378043D
:1076D000C6014096969587959695879590937704E1
:1076E000809376046096F5E0D695C795FA95E1F714
:1076F000D0937504C09374049093730480937204C0
:107700003093710420937004882009F441C0809163
:1077100076099091770997FF03C0909581959F4FC7
:107720006CE070E00E94EE919B0170936F04609397
:107730006E04809186099091870997FF03C0909508
:1077400081959F4F6CE070E00E94EE9170936D0404
:1077500060936C04809127079091280790936904A7
:1077600080936804B90184E090E00E94002F60914A
:107770006C0470916D0486E090E00E94002F60918F
:1077800068047091690488E090E00E94002F65C051
:1077900084E090E00E94FB2E90936F0480936E042F
:1077A00086E090E00E94FB2E90936D0480936C0421
:1077B00088E090E00E94FB2E9C01909369048093E6
:1077C000680480916E0490916F048150984050F449
:1077D00080916C0490916D048150984018F4215070
:1077E0003440D8F180E399E09F938F9380E695E150
:1077F0009F938F93E0913D05F0913E05099580910F
:1078000076099091770997FF03C0909581959F4FD6
:107810006CE070E00E94EE9170936F0460936E04D0
:10782000809186099091870997FF03C09095819573
:107830009F4F6CE070E00E94EE9170936D04609336
:107840006C04809127079091280790936904809396
:1078500068040F900F900F900F9010923B091092B8
:107860003A0910922B0910922A0910927C09109261
:107870007B0984E690E00E94911980912203909107
:1078800023039C01220F331F220F331F280F391FA0
:10789000280F391F309377092093760980912403AC
:1078A000909125038C01000F111F000F111F080F6D
:1078B000191F080F191F10938709009386098091DB
:1078C000A107C82EDD24EE24FF24442737FD409570
:1078D000542FC701B6010E94AF914B015C01609328
:1078E0006304709364048093650490936604980124
:1078F000442737FD4095542FC701B6010E94AF9130
:10790000DC01CB0180935B0490935C04A0935D0445
:10791000B0935E048092430490924404A092450484
:10792000B092460480933B0490933C04A0933D04A2
:10793000B0933E0410923304109234041092350434
:10794000109236048091170190911801A0911901AD
:10795000B0911A0190932A078093290710921A0375
:1079600010921903109223041092240410922504FB
:107970001092260400918A0110918B011093220429
:107980000093210484E690E0909387018093860120
:1079900082E390E090930B0380930A038091C607E3
:1079A0009927AA27BB27BC01CD0124EC39E040E090
:1079B00050E00E94AF91DC01CB018856954CAF4F4F
:1079C000BF4F8093820190938301A0938401B09371
:1079D00085018091C7079927AA27BB27BC01CD0144
:1079E0000E94AF91DC01CB018856954CAF4FBF4F41
:1079F00080937E0190937F01A0938001B0938101D9
:107A00001092410110924001C801AA2797FDA0954C
:107A1000BA2F20913C0130913D0140913E0150919F
:107A20003F01BC01CD010E94AF91DC01CB018093ED
:107A3000820990938309A0938409B09385091092D9
:107A40001E0410921D040E94EC6D8091D10384608D
:107A50008093D1038FEF8093020A1092030A80E291
:107A60008093040ACAE0D4E0AAE8B7E007E08D9169
:107A7000E82FFF27EE0FFF1FE754F74F808191811A
:107A800081588993015007FFF2CF84E6809309045F
:107A900080910803882311F0579A06C080E091E195
:107AA0009093080180930701809178049091790464
:107AB00080569940815C9B4228F0809156058160F8
:107AC0008093560580917604909177048056994072
:107AD000815C9B4228F08091560582608093560518
:107AE00080917404909175048C529140895795400F
:107AF00028F08091560584608093560580916E042D
:107B000090916F048C529140835C914028F0809159
:107B1000560588608093560580916C0490916D04A1
:107B20008C529140835C914028F080915605806191
:107B3000809356058091680490916904805092402A
:107B40008355914028F080915605806280935605B8
:107B500086E4809379010E94F58BECE0CDB7DEB727
:107B60000C946092A3E1B0E0E8EBFDE30C943E924C
:107B7000809174049091750420912603309127031D
:107B8000821B930B90937C0980937B098091300337
:107B90009091310397FD07969C0113E03595279549
:107BA0001A95E1F730933B0920933A0980912E030F
:107BB00090912F0397FD0796B3E095958795BA9519
:107BC000E1F790932B0980932A093093460920937B
:107BD000450990933E0980933D09809176099091E3
:107BE0007709AC01440F551F480F591F20912203FC
:107BF00030912303C901880F991F880F991F820FA5
:107C0000931F820F931F480F591F57FF02C04D5FEC
:107C10005F4F5595479555954795509377094093F4
:107C200076098091860990918709AC01440F551F10
:107C3000480F591F2091240330912503C901880F53
:107C4000991F880F991F820F931F820F931F480F50
:107C5000591F57FF02C04D5F5F4F5595479555958A
:107C600047955093870940938609209122033091CC
:107C70002303C901880F991F880F991F820F931F33
:107C8000820F931F9C01442737FD4095542F80910C
:107C9000530490915404A0915504B0915604820F5E
:107CA000931FA41FB51F8093530490935404A09373
:107CB0005504B09356042091240330912503C90143
:107CC000880F991F880F991F820F931F820F931F90
:107CD0009C01442737FD4095542F80914F0490918B
:107CE0005004A0915104B0915204820F931FA41F1D
:107CF000B51F80934F0490935004A0935104B09308
:107D0000520480914F0990915009209122033091A3
:107D10002303820F931F9093500980934F09809102
:107D20007E0990917F092091240330912503820FD1
:107D3000931F90937F0980937E0980916A049091AC
:107D40006B04019690936B0480936A0480912707DB
:107D5000909128072091680430916904821B930B4D
:107D60009C01442737FD4095542F80914B049091FE
:107D70004C04A0914D04B0914E04820F931FA41F98
:107D8000B51F80934B0490934C04A0934D04B09383
:107D90004E048FEC80937A001092110120913B04E5
:107DA00030913C0440913D0450913E0429873A872C
:107DB0004B875C8729543B46414050402CF028E4D7
:107DC0003BE641E050E00DC089859A85AB85BC85D6
:107DD000885B9449AE4FBF4F4CF428EB34E94EEF2B
:107DE0005FEF2D833E834F83588708C089859A852E
:107DF000AB85BC858D839E83AF83B8872091430478
:107E00003091440440914504509146042D873E87AB
:107E10004F87588B29543B46414050402CF028E472
:107E20003BE641E050E00DC08D859E85AF85B88969
:107E3000885B9449AE4FBF4F4CF428EB34E94EEFCA
:107E40005FEF29833A834B835C8308C08D859E85D1
:107E5000AF85B88989839A83AB83BC83A0917B0962
:107E6000B0917C09BB8BAA8BFD01CF01AA2797FD9E
:107E7000A095BA2FA0903304B0903404C09035047C
:107E8000D0903604A80EB91ECA1EDB1EA092330481
:107E9000B0923404C0923504D0923604E090820946
:107EA000F09083090091840910918509E80EF91E6C
:107EB0000A1F1B1FE0928209F09283090093840934
:107EC00010938509F091EC03F98BFF2309F098C119
:107ED0008091EB03882309F093C18091720986FF9A
:107EE0008FC180912A0990912B09AA2797FDA0950F
:107EF000BA2FBC01CD0129813A814B815C810E945E
:107F0000AF919B01AC0197FF04C02150384F4F4FF8
:107F10005F4FBBE05595479537952795BA95D1F7B3
:107F200080916301682E772488249924CA01B901BD
:107F3000A40193010E94AF91DC01CB0180938404E2
:107F400090938504A0938604B0938704B7FF04C080
:107F50008150904FAF4FBF4F1C012D01ACE05594A5
:107F6000479437942794AA95D1F7209284043092AD
:107F70008504409286045092870480913A0990913A
:107F80003B09AA2797FDA095BA2FBC01CD012D81F1
:107F90003E814F8158850E94AF9197FF04C0615088
:107FA000784F8F4F9F4FFBE0959587957795679515
:107FB000FA95D1F7A40193010E94AF91DC01CB01A6
:107FC0008093880490938904A0938A04B0938B04CF
:107FD000B7FF04C08150904FAF4FBF4F9C01AD0120
:107FE000ECE05595479537952795EA95D1F720937D
:107FF00088043093890440938A0450938B048091C1
:1080000084049091850490932209809321098091A2
:108010008804909189049093260980932509221958
:108020003309440955092093880430938904409307
:108030008A0450938B04E20EF31E041F151FE09276
:108040008209F09283090093840910938509809135
:1080500062018823B1F457FF04C02F5F3F4F4F4F99
:108060005F4F5595479537952795A21AB30AC40ACD
:10807000D50AA0923304B0923404C0923504D09251
:1080800036042A893B8979010027F7FC0095102FD7
:108090008091880490918904A0918A04B0918B0406
:1080A000E80EF91E0A1F1B1FC801B70129813A817A
:1080B0004B815C810E94AF919B01AC0197FF04C092
:1080C0002150384F4F4F5F4F6BE05595479537958F
:1080D00027956A95D1F780916401A82EBB24CC2402
:1080E000DD24CA01B901A60195010E94AF91DC010E
:1080F000CB0180937C0490937D04A0937E04B09385
:108100007F04B7FF04C08150904FAF4FBF4F3C0179
:108110004D013CE095948794779467943A95D1F714
:1081200060927C0470927D0480927E0490927F0421
:10813000C801B7012D813E814F8158850E94AF91C2
:1081400097FF04C06150784F8F4F9F4F2BE095955C
:108150008795779567952A95D1F7A60195010E9495
:10816000AF91DC01CB018093800490938104A093B4
:108170008204B0938304B7FF04C08150904FAF4F87
:10818000BF4FAC01BD018CE075956795579547953C
:108190008A95D1F7409380045093810460938204C0
:1081A000709383042A893B8937FF03C0309521955A
:1081B0003F4F21343105E4F1D401C30197FE07C0DC
:1081C000B095A095909581959F4FAF4FBF4F813847
:1081D0009105A105B10584F4DB01CA0177FF07C051
:1081E000B095A095909581959F4FAF4FBF4F813827
:1081F0009105A105B105E4F081E080931F0418C04A
:108200001092260910922509109222091092210934
:1082100010928004109281041092820410928304C0
:1082200010927C0410927D0410927E0410927F04C0
:108230008091800490918104A0918204B091830484
:10824000BC01CD0124E630E040E050E00E942392E2
:10825000E0907C04F0907D04E21AF30AF092390970
:10826000E092380980917C0490917D04A0917E0475
:10827000B0917F04BC01CD0124E630E040E050E045
:108280000E942392DA01C901209180043091810477
:108290008C01021B130B10932D0900932C09809164
:1082A0003C0190913D01A0913E01B0913F01BC0184
:1082B000CD0128E631E040E050E00E94AF912091EE
:1082C00082093091830940918409509185092617CC
:1082D00037074807590764F0261B370B480B590B23
:1082E0002093820930938309409384095093850930
:1082F0002091820930918309409184095091850928
:1083000057FF0CC0260F371F481F591F20938209A3
:1083100030938309409384095093850960912A0919
:1083200070912B096E0D7F1D9B01442737FD4095F1
:10833000542F8091370490913804A0913904B09162
:108340003A04820F931FA41FB51F809337049093A4
:108350003804A0933904B0933A048091F1039091CA
:10836000F203681B790BCB01AA2797FDA095BA2FC2
:1083700029853A854B855C85820F931FA41FB51F05
:1083800080933B0490933C04A0933D04B0933E043F
:10839000C0907E01D0907F01E0908001F09081013B
:1083A000C816D906EA06FB06C4F488EA91E6A0E0FE
:1083B000B0E08C199D09AE09BF0980933B049093EE
:1083C0003C04A0933D04B0933E0480933704909303
:1083D0003804A0933904B0933A0422273327A90123
:1083E0002C193D094E095F0980913B0490913C0492
:1083F000A0913D04B0913E0482179307A407B507EE
:10840000B4F4D701C601885A9146A040B040809389
:108410003B0490933C04A0933D04B0933E048093AE
:10842000370490933804A0933904B0933A046091D0
:108430003A0970913B09600F711F9B01442737FD7A
:108440004095542F80913F0490914004A0914104A5
:10845000B0914204820F931FA41FB51F80933F0465
:1084600090934004A0934104B09342048091EF03A1
:108470009091F003681B790BCB01AA2797FDA0957B
:10848000BA2F2D853E854F855889820F931FA41FD3
:10849000B51F8093430490934404A0934504B09384
:1084A0004604E0908201F0908301009184011091D4
:1084B0008501E816F9060A071B07C4F488EA91E665
:1084C000A0E0B0E08E199F09A00BB10B809343048C
:1084D00090934404A0934504B093460480933F04D2
:1084E00090934004A0934104B09342042227332781
:1084F000A9012E193F09400B510B80914304909123
:108500004404A0914504B091460482179307A40740
:10851000B507B4F4D801C701885A9146A040B040CD
:108520008093430490934404A0934504B09346047D
:1085300080933F0490934004A0934104B09342047D
:108540008091330490913404A0913504B0913604A5
:108550008093470490934804A0934904B0934A043D
:108560008091430490914404A0914504B091460445
:108570008093630490936404A0936504B0936604AD
:1085800080913B0490913C04A0913D04B0913E0445
:1085900080935B0490935C04A0935D04B0935E04AD
:1085A00080913F0490914004A0914104B091420415
:1085B00080935F0490936004A0936104B09362047D
:1085C0008091370490913804A0913904B0913A0415
:1085D0008093570490935804A0935904B0935A047D
:1085E00080911D0190911E0197FD079603E09595DE
:1085F00087950A95E1F790933B0980933A0980911A
:108600001B0190911C0197FD079613E095958795A6
:108610001A95E1F790932B0980932A0980912A03F8
:1086200090912B030F9734F488E19CEF90933B09D2
:1086300080933A0980912A0390912B03079734F491
:1086400080E398EF90933B0980933A0920910101D0
:108650002A30A9F480912A0390912B03835F9340E1
:1086600034F088EE93E090933B0980933A0980912F
:108670002A0390912B038A5F9340DCF014C0809111
:108680002A0390912B03815D974034F088EE93E0AC
:1086900090933B0980933A0980912A0390912B0390
:1086A000805E974034F080ED97E090933B09809393
:1086B0003A0980912803909129030F9734F488E1B7
:1086C0009CEF90932B0980932A0980912803909125
:1086D0002903079734F480E398EF90932B09809354
:1086E0002A092A30A9F48091280390912903835FF5
:1086F000934034F088EE93E090932B0980932A09FD
:1087000080912803909129038A5F9340DCF014C084
:108710008091280390912903815D974034F088EE81
:1087200093E090932B0980932A09809128039091DC
:108730002903805E974034F080ED97E090932B09F9
:1087400080932A0960917001662309F4AFC04091BB
:108750001D0150911E0180918C0490918D04481B45
:10876000590B509393044093920420911D01309132
:108770001E01280F391F37FF02C02F5F3F4F35956D
:10878000279530938D0420938C04413851051CF0BB
:1087900080E890E005C040585F4F34F480E89FEFD8
:1087A000909393048093920440911B0150911C017B
:1087B00080918E0490918F04481B590B5093910423
:1087C0004093900420911B0130911C01280F391F08
:1087D00037FF02C02F5F3F4F3595279530938F04A9
:1087E00020938E04413851051CF080E890E005C0CC
:1087F00040585F4F34F480E89FEF9093910480934A
:108800009004462F55278091920490919304849F61
:10881000B001859F700D949F700D11249B0177FF0F
:1088200002C0215F3F4FF4E035952795FA95E1F7B7
:1088300080913A0990913B09820F931F90933B09D5
:1088400080933A098091900490919104849FD00183
:10885000859FB00D949FB00D1124AD019D01B7FF10
:1088600002C0215F3F4FE4E035952795EA95E1F797
:1088700080912A0990912B09820F931F90932B09C5
:1088800080932A0980911D0190911E01860F971FE8
:1088900090931E0180931D0180911B0190911C01FA
:1088A000840F951F90931C0180931B0100913D093B
:1088B00010913E098091210990912209101611060C
:1088C0005CF59C0197FF04C022273327281B390B36
:1088D000C901AA2797FDA095BA2F209162013327DD
:1088E00044275527BC01CD010E94AF919B01AC01EB
:1088F00097FF04C0215C3F4F4F4F5F4F76E0559587
:108900004795379527957A95D1F7809138099091B9
:108910003909820F931F27C097FF03C09095819557
:108920009F4FAA2797FDA095BA2F20916201332768
:1089300044275527BC01CD010E94AF919B01AC019A
:1089400097FF04C0215C3F4F4F4F5F4F66E0559546
:108950004795379527956A95D1F780913809909179
:108960003909821B930B9093390980933809E09061
:108970004509F090460980912509909126091E1419
:108980001F045CF59C0197FF04C022273327281B96
:10899000390BC901AA2797FDA095BA2F2091620132
:1089A000332744275527BC01CD010E94AF919B017D
:1089B000AC0197FF04C0215C3F4F4F4F5F4F96E0E3
:1089C00055954795379527959A95D1F780912C091C
:1089D00090912D09820F931F27C097FF03C0909598
:1089E00081959F4FAA2797FDA095BA2F20916201EC
:1089F000332744275527BC01CD010E94AF919B012D
:108A0000AC0197FF04C0215C3F4F4F4F5F4F86E0A2
:108A100055954795379527958A95D1F780912C09DB
:108A200090912D09821B930B90932D0980932C0913
:108A30008091720987FF44C0B989BB2309F040C007
:108A40008091EB038823E1F5E1E0EE16E1E0FE061C
:108A50004CF080913A0990913B098E0D9F1D8050FA
:108A600091400DC0F0E0EF16FFEFFF0664F4809137
:108A70003A0990913B098E0D9F1D80509F4F909316
:108A80003B0980933A0921E0013012074CF08091B4
:108A90002A0990912B09800F911F805091400CC0A2
:108AA0003FEF0030130764F480912A0990912B095D
:108AB000800F911F80509F4F90932B0980932A091C
:108AC000E2E1CD5E0C945A9280910804882301F56E
:108AD0008091D1038C7F8093D103ABE5B5E0E8E5CD
:108AE000F8E09BE08091E902882309F48C938D9152
:108AF000818312829150389697FFF4CF8091E902DA
:108B0000882359F08091E90281508093E90205C0E1
:108B10008091D10381608093D10380915103882398
:108B200019F01092510308958093530380935503D5
:108B300080914F038E7F80934F0385EA8093BC0022
:108B40000895CF93DF93AAE0B4E0CAE8D7E057E0F6
:108B50009991E92FFF27EE0FFF1FE754F74F019080
:108B6000F081E02DE158FF4FEF3FF10521F01CF0BF
:108B7000EFEFF0E004C0F7FF02C0E0E0F0E0993171
:108B800011F4EC931BC04C91242F3327E217F30709
:108B9000A9F0CF01821B930B97FD039695958795BE
:108BA00095958795242F280F2C93822F9927E817C6
:108BB000F90714F4215001C02F5F2C9351501196E6
:108BC00057FFC6CF80919407883F38F0EFEFF0E071
:108BD000E81BF109E65FFB4F80818093760180916D
:108BE0007601882329F0843618F084E68093760194
:108BF00080919607883F38F0EFEFF0E0E81BF1092D
:108C0000E65FFB4F8081809374018091740188231B
:108C100029F0843618F084E6809374018091A307CC
:108C2000883F38F0EFEFF0E0E81BF109E65FFB4F1B
:108C3000808180936F0180916F018B3010F48AE006
:108C400002C08F3F11F480936F018091D007883F5D
:108C500038F0EFEFF0E0E81BF109E65FFB4F8081B1
:108C60008093510980915109863010F485E002C04B
:108C70008F3F11F4809351098091D207883F38F0DB
:108C8000EFEFF0E0E81BF109E65FFB4F8081809396
:108C9000790980917909863010F485E002C08F3F10
:108CA00011F4809379098091BD07873F19F44299A7
:108CB00005C006C0863F31F4439B02C08CE80BC060
:108CC00086E409C0883F38F0EFEFF0E0E81BF109D7
:108CD000E65FFB4F808180934E098091BE07873FFE
:108CE00019F4429905C006C0863F31F4439B02C087
:108CF0008CE80BC086E409C0883F38F0EFEFF0E065
:108D0000E81BF109E65FFB4F808180932709809182
:108D1000BF07883F38F0EFEFF0E0E81BF109E65FAE
:108D2000FB4F80818093570980919507883F38F0E9
:108D3000EFEFF0E0E81BF109E65FFB4F80818093E5
:108D4000750180919807883F38F0EFEFF0E0E81B5D
:108D5000F109E65FFB4F80818093730180919A0750
:108D6000883F38F0EFEFF0E0E81BF109E65FFB4FDA
:108D70008081809371018091A207883F38F0EFEFE6
:108D8000F0E0E81BF109E65FFB4F80818093720100
:108D90008091A407883F38F0EFEFF0E0E81BF1097D
:108DA000E65FFB4F808180936E018091A507883F2D
:108DB00038F0EFEFF0E0E81BF109E65FFB4F808150
:108DC000809370018091A607883F38F0EFEFF0E0C4
:108DD000E81BF109E65FFB4F808180936D01809174
:108DE000A707883F38F0EFEFF0E0E81BF109E65FF6
:108DF000FB4F808180936C018091AD07883F38F0F4
:108E0000EFEFF0E0E81BF109E65FFB4F8081809314
:108E10006A018091AE07883F38F0EFEFF0E0E81B81
:108E2000F109E65FFB4F80818093E6038091AF07F5
:108E3000883F38F0EFEFF0E0E81BF109E65FFB4F09
:108E400080818093E5038091B007883F38F0EFEF91
:108E5000F0E0E81BF109E65FFB4F80818093E403BB
:108E60008091B107883F38F0EFEFF0E0E81BF1099F
:108E7000E65FFB4F80818093E3038091CB07883FBF
:108E800038F0EFEFF0E0E81BF109E65FFB4F80817F
:108E90008093E2038091CC07883F38F0EFEFF0E059
:108EA000E81BF109E65FFB4F80818093E10380912D
:108EB000CD07883F38F0EFEFF0E0E81BF109E65FFF
:108EC000FB4F80818093E0038091CE07883F38F08C
:108ED000EFEFF0E0E81BF109E65FFB4F8081809344
:108EE000DF038091B207883F38F0EFEFF0E0E81B36
:108EF000F109E65FFB4F8081809369018091B6079D
:108F0000883F38F0EFEFF0E0E81BF109E65FFB4F38
:108F10008081809368018091B307883F38F0EFEF3C
:108F2000F0E0E81BF109E65FFB4F80818093670169
:108F30008091B707883F38F0EFEFF0E0E81BF109C8
:108F4000E65FFB4F8081809366018091C007883F78
:108F500038F0EFEFF0E0E81BF109E65FFB4F8081AE
:108F6000809365018091C307883F38F0EFEFF0E010
:108F7000E81BF109E65FFB4F8081809364018091DB
:108F8000C407883F38F0EFEFF0E0E81BF109E65F37
:108F9000FB4F8081809363018091C507883F38F043
:108FA000EFEFF0E0E81BF109E65FFB4F8081809373
:108FB00062018091ED07883F38F0EFEFF0E0E81BA9
:108FC000F109E65FFB4F8081809336099091DF04C1
:108FD000992321F080913609981720F08091360965
:108FE000882311F490933609809192078093720937
:108FF0008091F307809356098091CA07883F38F023
:10900000EFEFF0E0E81BF109E65FFB4F8081809312
:1090100061018091E607883F38F0EFEFF0E0E81B50
:10902000F109E65FFB4F80818093890980916A0195
:10903000282F33272F5F3F4F8CE398E2B9010E941E
:10904000EE9170937801609377018091A0078093EF
:109050007A0980919F0780933F099091E8079333A5
:1090600008F44AC081E08093DE03983F58F0EFEFA8
:10907000F0E0E91BF109E65FFB4F8081823310F4D9
:109080001092DE03809179012091DE03821721F195
:109090008330F8F430919F01222351F08CED95E05C
:1090A00090930B0380930A03332369F48EE209C083
:1090B00088EC90E090930B0380930A03332319F418
:1090C00087E180939F0185E08093F30320937901EA
:1090D00003C08150809379018091C9099091CA0998
:1090E00097FF0FC08091DE03882359F080915605C9
:1090F00080688093560505C01092DE038AE0809355
:1091000079018091C9099091CA0997FF1DC080918A
:1091100008048823C9F08091DE038823A9F0809198
:10912000090190910A018F5F9F4F71F488E99AE3DA
:1091300090930B0380930A0380E094EA90930A01D2
:10914000809309011092DE038091DE03882369F089
:109150008091D00381608093D00380916401823D2F
:1091600048F4825E8093640105C08091D0038E7FB5
:109170008093D003DF91CF910895A7E1B0E0E3ECB5
:10918000F8E40C943E920E94B23D8091D10399275D
:1091900084719070892B91F58091F40782FF27C02C
:1091A0008091ED039091EE030097F1F002E0883595
:1091B0009007D4F49C0197FF02C02D5F3F4F359577
:1091C0002795359527958091AA079927289FA00173
:1091D000299F500D389F500D1124CA0164E670E09C
:1091E0000E94EE91CB0106C08DE290E003C0809119
:1091F000AA0799279093CF038093CE032091CC03A5
:109200003091CD0355E72033350759F410921404FB
:109210001092130480913F0999279093CF03809374
:10922000CE0360911304709114047A836983809152
:109230003F0999270A966817790714F49A83898356
:1092400080910904843608F06AC08091D00382FDC1
:1092500066C08091A8049091A904009731F001970D
:109260009093A9048093A8040BC0109208049093D3
:10927000D3038093D2038091D1038D7E8093D10359
:10928000809101018A3011F0843110F0289A01C0D8
:1092900028988091D2039091D303895E9340E0F1A6
:1092A0008091180A8536C0F18091CE039091CF034A
:1092B0009A8389838091D10380618093D1038091C7
:1092C0008607A82FBB27AA0FBB1FFD01E351F74F4D
:1092D0001182108280918707282F3327220F331F96
:1092E000C9018351974FFC0111821082A754B74FD7
:1092F00011961C921E922754374FD90111961C9239
:109300001E9280918907E82FFF27EE0FFF1FE75479
:10931000F74F118210823FC3109208043CC3809122
:1093200009048D3808F40DC38091D1038F7E80939A
:10933000D1039091AB0782E3989FC00111249093D1
:10934000A9048093A804E981FA81B9978CF08091EF
:109350000804882369F08091D2039091D303FFEF32
:109360008F3F9F0729F001969093D3038093D203F8
:109370008091D2039091D3038F3F910509F008F5B6
:1093800010922B0410922C0410922D0410922E0493
:1093900010922704109228041092290410922A0493
:1093A00010929404109295041092960410929704CF
:1093B0001092330410923404109235041092360443
:1093C00005C08091D10382608093D103809188078A
:1093D000E82FFF27EE0FFF1FE754F74F80819181A1
:1093E000813591050CF438C120910804222309F03D
:1093F00033C180918907E82FFF27EE0FFF1FE75445
:10940000F74F808191818C3491050CF4FFC08091DD
:10941000AA048F5F8093AA04893C08F41DC120939D
:10942000AA041092D3031092D20330918607E32F3F
:10943000FF27EE0FFF1FE754F74F8081918187349C
:109440009105B4F480918707E82FFF27EE0FFF1FE7
:10945000E754F74F808191810190F081E02DF7FF73
:1094600003C0F095E195FF4FE734F1050CF478C0A7
:1094700041E020918707A22FBB27AA0FBB1FA7544B
:10948000B74F8D919C9111978734910544F0E32F4C
:10949000FF27EE0FFF1FE754F74F808191818D91D9
:1094A0009C918734910574F080918607E82FFF27FF
:1094B000EE0FFF1FE754F74F8081918187349105AC
:1094C0000CF042E0E22FFF27EE0FFF1FE754F74FAB
:1094D000808191818634910574F480918607E82F0C
:1094E000FF27EE0FFF1FE754F74F808191818734EC
:1094F00091050CF043E0E22FFF27EE0FFF1FE7542A
:10950000F74F808191818A5B9F4F74F48091860729
:10951000E82FFF27EE0FFF1FE754F74F808191815F
:10952000873491050CF044E0E22FFF27EE0FFF1F78
:10953000E754F74F808191818A5B9F4F74F480914B
:109540008607E82FFF27EE0FFF1FE754F74F8081B4
:109550009181863491050CF445E0842F0E945A2FA6
:1095600080918707E82FFF27EE0FFF1FE754F74F83
:10957000808191810190F081E02DF7FF03C0F0958B
:10958000E195FF4F7E97CCF480918607E82FFF2767
:10959000EE0FFF1FE754F74F808191818A5B9F4F49
:1095A00064F481E0809371051092F40388EE93E0F7
:1095B00090930B0380930A034FC00E9463300E9474
:1095C000052F80E00E9491098091AC070E94AB8D2D
:1095D0008091720980FF10C0809115019091160151
:1095E000875B934038F480911501909116018E5E4F
:1095F000924010F40E94E01D80E00E94FC3A81E05D
:109600008093F40380930803579A1AC08081918154
:10961000855B9F4FFCF48091AA048F5F8093AA041E
:10962000893CD0F0209308042093AA041092D3031D
:109630001092D20381E00E94FC3A81E08093F4030F
:1096400088E180939F010E94633068E770E00E9488
:10965000183A02C02093AA0480918807E82FFF27B8
:10966000EE0FFF1FE754F74F808191818B5A9F4F78
:109670000CF060C12091E907E22FFF27EF77F0702F
:10968000EE0FFF1FE351F74F80819181069714F091
:1096900084E606C0808191818B5F9F4F1CF48CE92A
:1096A0008093AD0480910804E0918907882309F034
:1096B000ECC0FF27EE0FFF1FE754F74F8081918129
:1096C000855B9F4F9CF48091F40783FD0BC0E22FD4
:1096D000FF27EE0FFF1FE754F74F80819181855BD5
:1096E0009F4FDCF08091E9078823B9F08091F4075F
:1096F00083FFC8C08091E907E82FFF27EE0FFF1F07
:10970000E754F74F80819181875F9F4F0CF4BAC077
:109710008091AD04843609F0B5C02091F403222372
:1097200029F08091D10388608093D1038091AB04AC
:109730008F5F8093AB048E3F08F4EEC01092AB04B1
:1097400080915605882309F092C0222309F48FC026
:109750008091E404882309F08AC081E090E090932E
:10976000D3038093D20381E0809308041092940481
:10977000109295041092960410929704109233045C
:1097800010923404109235041092360410922F0473
:109790001092300410923104109232048091A1078B
:1097A000E82EFF24002711278091760990917709F0
:1097B0009C01442737FD4095542FC801B7010E94F2
:1097C000AF91DC01CB018093430490934404A093B8
:1097D0004504B093460480918609909187099C01C5
:1097E000442737FD4095542FC801B7010E94AF911F
:1097F000DC01CB0180933B0490933C04A0933D0497
:10980000B0933E048091630490916404A091650438
:10981000B091660480933F0490934004A093410468
:10982000B093420480915B0490915C04A0915D042C
:10983000B0915E048093370490933804A093390468
:10984000B0933A0410922B0410922C0410922D0421
:1098500010922E04109227041092280410922904CA
:1098600010922A0484E68093F30384E350C08CEDC5
:1098700095E090930B0380930A03222309F04CC0D8
:1098800081E045C01092AB0447C0FF27EE0FFF1FD9
:10989000E754F74F808191818C3491059CF0809141
:1098A000F40783FD0BC0E22FFF27EE0FFF1FE754E5
:1098B000F74F80819181855B9F4FCCF08091E907C4
:1098C0008823A9F08091F40783FF24C08091E907E1
:1098D000E82FFF27EE0FFF1FE754F74F808191819C
:1098E0008E5C9F4FBCF48091AD048C3999F48091CB
:1098F000AC048F5F8093AC048B3F70F0109208042F
:109900001092AC041092D3031092D20386E280939B
:109910009F0102C01092AC048091CC039091CD03C2
:1099200013E0883E9107B8F501969093CD0380939C
:10993000CC0331C01092AD041092CD031092CC0331
:109940002AC02E5E324038F180919109909192099F
:109950008059914000F58091030490910404A091F6
:109960000504B09106048C5D9540A040B0409CF485
:1099700080E395E79093CD038093CC038091D2034D
:109980009091D3038A5E934030F089EE93E09093F8
:10999000D3038093D20380913A01815080933A019E
:1099A00080913A018F3F21F08091D10384FFA9C3B8
:1099B0000E94A145B0909C078091B6049091B70495
:1099C0009C01220F331F280F391FC0908607AC2D32
:1099D000BB27AA0FBB1FFD01E754F74F4B2D55279F
:1099E00080819181849FF001859FF00D949FF00DFF
:1099F00011242E0F3F1F37FF02C02D5F3F4FB901CB
:109A00007595679575956795A351B74F80919D079B
:109A1000082F11278D919C91809F7001819FF00CE0
:109A2000909FF00C11246E0D7F1D7093B70460930E
:109A3000B6048091B8049091B9049C01220F331FA1
:109A4000280F391FD0908707AD2DBB27AA0FBB1F4A
:109A5000FD01E754F74F80819181849FF001859F3C
:109A6000F00D949FF00D11242E0F3F1F37FF02C001
:109A70002D5F3F4FA9015595479555954795A351A2
:109A8000B74F8D919C91809F7001819FF00C909FAA
:109A9000F00C11244E0D5F1D5093B9044093B8048F
:109AA0008091DE03882309F448C0CB0177FD03963B
:109AB000DC01B595A795B595A795CA0157FD039605
:109AC000FC01F595E795F595E79580919A01682F4A
:109AD000772767FD70956A9F90016B9F300D7A9F85
:109AE000300D11248091E604482F552747FD5095ED
:109AF0004E9FC0014F9F900D5E9F900D1124280F27
:109B0000391F37FF02C0295F3F4F93E035952795F6
:109B10009A95E1F730931A04209319046E9F9001EF
:109B20006F9F300D7E9F300D11244A9FC0014B9FC7
:109B3000900D5A9F900D11243FC08091E707E82FA8
:109B4000FF27EE5BFE4F868180939A019081909370
:109B5000E604A82FBB27A7FDB095A69F9001A79F5D
:109B6000300DB69F300D1124E92FFF27E7FDF0954A
:109B7000E49FC001E59F900DF49F900D1124280FE4
:109B8000391F37FF02C0295F3F4F83E03595279586
:109B90008A95E1F730931A0420931904A49F900149
:109BA000A59F300DB49F300D1124E69FC001E79FA3
:109BB000900DF69F900D1124281B390B37FF02C022
:109BC000295F3F4F03E0359527950A95E1F73093DC
:109BD00018042093170480918907E82FFF27EE0FC0
:109BE000FF1FE754F74F80819181909581959F4F9A
:109BF00090931604809315048530910514F0049712
:109C000005C00FEF8C3F900734F404969093160430
:109C10008093150404C010921604109215048091CC
:109C2000D204882309F43EC0282F332780911904D9
:109C300090911A0497FD079613E0959587951A95CC
:109C4000E1F7289FA001299F500D389F500D112446
:109C5000CA0157FD0F96B4E095958795BA95E1F73F
:109C600090931A048093190480911704909118041A
:109C700097FD0796A3E095958795AA95E1F7289F0C
:109C8000B001299F700D389F700D1124CB0177FD15
:109C90000F96F4E095958795FA95E1F7909318045F
:109CA000809317048090190490901A048091D50431
:109CB0009091D604881A990A90921A0480921904F5
:109CC00000911704109118048091D3049091D4044A
:109CD000081B190B10931804009317048091880730
:109CE000E82FFF27EE0FFF1FE754F74FE080F180CA
:109CF0008FE790E0E80EF91EF0921404E09213044E
:109D000080916F019927AA2797FDA095BA2FBC01D2
:109D1000CD010E942391DC01CB0120E030E040E244
:109D200051E4BC01CD010E949190DC01CB01BC014A
:109D3000CD010E94F590DC01CB01809380098091D8
:109D40006E018093580980916D019927AA2797FD8C
:109D5000A095BA2FBC01CD010E942391DC01CB015B
:109D600020E030E040E251E4BC01CD010E9491903E
:109D7000DC01CB01BC01CD010E94F590DC01CB01DF
:109D80008093310980916C018093470980917D0512
:109D900080FF59C080918909813808F454C08091AE
:109DA0007605992787FD90952B2D3327829FD0012B
:109DB000839FB00D929FB00D11248A0E9B1E90922E
:109DC0001A048092190480917705992787FD909550
:109DD000829FF001839FF00D929FF00D11240E0FD2
:109DE0001F1F109318040093170480917805282FE3
:109DF000332727FD30958091150490911604820F2A
:109E0000931F909316048093150480917A05282F50
:109E1000332727FD3095809197079927289F800148
:109E2000299F100D389F100D1124109341010093AC
:109E300040018091790599278E159F0524F4909310
:109E4000140480931304809113049091140497FFD9
:109E500004C010921404109213048091720982FFBE
:109E600002C0109258094091190450911A04CA0175
:109E700057FD03969C01359527953595279537FF16
:109E800003C0309521953F4F8091D6039091D70321
:109E900082179307B4F4CA0157FF03C090958195C8
:109EA0009F4F97FD039695958795959587959093E8
:109EB000D7038093D6038536910544F084E690E07D
:109EC00001C001979093D7038093D6034091170464
:109ED00050911804CA0157FD03969C0135952795AA
:109EE0003595279537FF03C0309521953F4F8091D9
:109EF000D4039091D50382179307B4F4CA0157FF96
:109F000003C0909581959F4F97FD039695958795F2
:109F1000959587959093D5038093D40385369105C5
:109F200044F084E690E001C001979093D5038093BC
:109F3000D4038091D10384FF08C01092D7031092FC
:109F4000D6031092D5031092D403ED2DFF27EE0F08
:109F5000FF1FE754F74F4091C107242F332780811B
:109F600091812817390744F48091F10782FF04C0DA
:109F700081E08093EA0313C0ED2DFF27EE0FFF1F52
:109F8000E754F74F842F99272091C207821B91092C
:109F9000208131812817390714F41092EA03409187
:109FA0008707E42FFF27EE0FFF1FE754F74F50916D
:109FB000C107852F992722273327281B390B80813A
:109FC00091818217930744F48091F10783FF04C0C5
:109FD00081E08093E90316C08091E903882391F022
:109FE000E42FFF27EE0FFF1FE754F74F8091C207C2
:109FF0009927851B9109208131818217930714F4D9
:10A000001092E903EC2DFF27EE0FFF1FE754F74FE7
:10A010004091C107242F3327808191812817390768
:10A0200044F48091F10780FF04C081E08093E7034E
:10A0300017C08091E703882399F0EC2DFF27EE0FDE
:10A04000FF1FE754F74F842F99272091C207821BE7
:10A050009109208131812817390714F41092E70300
:10A0600040918607E42FFF27EE0FFF1FE754F74FBD
:10A070005091C107852F992722273327281B390B99
:10A08000808191818217930744F48091F10781FFC9
:10A0900004C081E08093E80316C08091E803882320
:10A0A00091F0E42FFF27EE0FFF1FE754F74F809149
:10A0B000C2079927851B9109208131818217930757
:10A0C00014F41092E8038091EA03882319F4809134
:10A0D000E903811181E08093EB038091E7038823FA
:10A0E00021F48091E803882351F081E08093EC0310
:10A0F0001092EB031092EA031092E90302C08093DE
:10A10000EC038091EB03882321F48091EC038823F6
:10A1100069F08091C007992729813A8182179307B6
:10A1200014F49A83898381E080931F048091D00383
:10A1300099279C012470307082FF2DC08091D50436
:10A140009091D604909581959F4F90931A04809397
:10A1500019048091D3049091D404909581959F4FD8
:10A16000909318048093170480917C0190917D0155
:10A170009093140480931304809172098B778B66FB
:10A1800080937209809156098C7B8093560988ECE4
:10A19000809375011EC08091D10384FF1AC0309353
:10A1A00016042093150430931A0420931904309355
:10A1B0001804209317049AE59093800988E7809308
:10A1C000580990933109809347091092EB0310923C
:10A1D000EC0380914A0990914B09A0914C09B091F0
:10A1E0004D092091630430916404409165045091BD
:10A1F0006604820F931FA41FB51F80934A09909392
:10A200004B09A0934C09B0934D098091520990914C
:10A210005309A0915409B0915509E0905B04F09066
:10A220005C0400915D0410915E04EB82FC820D835E
:10A230001E838E0D9F1DA01FB11F80935209909306
:10A240005309A0935409B093550980914109909105
:10A250004209A0914309B0914409E0905F04F09055
:10A2600060040091610410916204EF82F88609870E
:10A270001A878E0D9F1DA01FB11F809341099093D7
:10A280004209A0934309B093440980913209909107
:10A290003309A0913409B0913509E0905704F0904A
:10A2A00058040091590410915A04EB86FC860D87DE
:10A2B0001E878E0D9F1DA01FB11F809332099093A2
:10A2C0003309A0933409B0933509F090EC03FF866D
:10A2D000FF2029F48091EB03882309F460C01092D9
:10A2E0005304109254041092550410925604109284
:10A2F0004F04109250041092510410925204109284
:10A300004A0910924B0910924C0910924D09109273
:10A310005209109253091092540910925509109243
:10A320004109109242091092430910924409109277
:10A330003209109233091092340910923509809134
:10A34000430490914404A0914504B0914604809345
:10A350003F0490934004A0934104B0934204809141
:10A360003B0490913C04A0913D04B0913E04809345
:10A37000370490933804A0933904B0933A041092B0
:10A380001803109217031092F0031092EF0310922B
:10A39000F2031092F1030F85002309F0D0C18091E0
:10A3A000EB03882309F0CBC1809127079091280700
:10A3B000815092402CF480910804882309F4BFC195
:10A3C0009090020AA090A10720907609309077091A
:10A3D000409086095090870919140CF0BBC0BB242B
:10A3E000CC24DD24CA01B901A60195010E94239263
:10A3F00079018A018091CB099091CC09281A390AF8
:10A40000C101AA2797FDA095BA2FE81AF90A0A0BED
:10A410001B0B6B817C818D819E81A60195010E9421
:10A42000239259016A018091CD099091CE09481A71
:10A43000590AC201AA2797FDA095BA2FA81AB90AEE
:10A44000CA0ADB0A292C332427FC3094432C532CD2
:10A45000C801B701A20191010E94AF9197FF04C00A
:10A4600061507E4F8F4F9F4F3B014C0109E0959407
:10A470008794779467940A95D1F7C601B501A20134
:10A4800091010E94AF9197FF04C061507E4F8F4FA2
:10A490009F4F5B016C0119E0D594C794B794A794C2
:10A4A0001A95D1F78091D6039091D7038134910505
:10A4B0003CF48091D4039091D50381349105D4F07C
:10A4C000D401C30197FE03C00196A11DB11D3C013B
:10A4D0004D019594879477946794D601C501D7FE72
:10A4E00003C00196A11DB11D5C016D01D594C794F7
:10A4F000B794A7948091040A282F332727FD30951D
:10A50000432F532F261537054805590514F43901F3
:10A510004A01992787FD9095909581959F4FAA278D
:10A5200097FDA095BA2F681679068A069B0614F443
:10A530003C014D012A153B054C055D0514F45901FC
:10A540006A01A816B906CA06DB060CF0D0C05C0189
:10A550006D01CDC0EA2CFF2400271127CA01B901E3
:10A56000A80197010E94239239014A01C101AA273B
:10A5700097FDA095BA2F681A790A8A0A9B0A6B81FF
:10A580007C818D819E81A80197010E9423925901AF
:10A590006A01C201AA2797FDA095BA2FA81AB90A85
:10A5A000CA0ADB0AD401C30197FE03C00F96A11D9E
:10A5B000B11D3C014D01F4E0959487947794679424
:10A5C000FA95D1F7D601C501D7FE03C00F96A11D9C
:10A5D000B11D5C016D01E4E0D594C794B794A794D4
:10A5E000EA95D1F78091D6039091D70381349105F4
:10A5F0003CF48091D4039091D50381349105A4F06B
:10A60000C401B30123E030E040E050E00E94239217
:10A6100039014A01C601B50123E030E040E050E0D5
:10A620000E94239259016A0180918907E82FFF2730
:10A63000EE0FFF1FE754F74F808191810190F08169
:10A64000E02DF7FF03C0F095E195FF4F7A97A4F056
:10A65000C401B30123E030E040E050E00E942392C7
:10A6600039014A01C601B50123E030E040E050E085
:10A670000E94239259016A0189E18093880121E2B5
:10A6800062167104810491042CF070E2672E712C23
:10A69000812C912C30EE63163FEF73063FEF83065B
:10A6A0003FEF930644F460EE662E6FEF762E6FEF69
:10A6B000862E6FEF962E41E2A416B104C104D10498
:10A6C0002CF050E2A52EB12CC12CD12C50EEA516A9
:10A6D0005FEFB5065FEFC5065FEFD50644F440EEC9
:10A6E000A42E4FEFB42E4FEFC42E4FEFD42E8091F7
:10A6F000430490914404A0914504B0914604861906
:10A700009709A809B9098093430490934404A0933E
:10A710004504B093460480913B0490913C04A09181
:10A720003D04B0913E048A199B09AC09BD09809390
:10A730003B0490933C04A0933D04B0933E0480916D
:10A740001703909118038F3F910509F008F4C4C5D1
:10A750006F85662309F04EC58091EB03882309F0CD
:10A7600049C580911F04882309F044C57091C90729
:10A77000788B772309F43EC580914A0990914B0963
:10A78000A0914C09B0914D09B7FF04C081509F4F73
:10A79000AF4FBF4FE92EFA2E0B2F112707FD1A9549
:10A7A000E0924A09F0924B0900934C0910934D092D
:10A7B0008091520990915309A0915409B091550983
:10A7C000B7FF04C081509F4FAF4FBF4F892F9A2FC3
:10A7D000AB2FBB27A7FDBA95898B9A8BAB8BBC8B14
:10A7E0008093520990935309A0935409B09355094B
:10A7F0008091A107A82EBB24CC24DD2420915304F2
:10A80000309154044091550450915604C601B5014D
:10A810000E94AF9197FF04C061507F4F8F4F9F4FB1
:10A82000672E782E892E992487FC9A94609253047F
:10A8300070925404809255049092560420914F04D3
:10A84000309150044091510450915204C601B50119
:10A850000E94AF9197FF04C061507F4F8F4F9F4F71
:10A86000272E382E492E552447FC5A9420924F0407
:10A8700030925004409251045092520480914B0403
:10A8800090914C04A0914D04B0914E04B7FF04C0C8
:10A8900081509F4FAF4FBF4F892F9A2FAB2FBB27B0
:10A8A000A7FDBA9580934B0490934C04A0934D045C
:10A8B000B0934E04D801C70186199709A809B909B0
:10A8C0008093A0049093A104A093A204B093A30446
:10A8D0002091C807E22EFF2400271127BC01CD01DB
:10A8E000A80197010E94239259016A012093AE04A6
:10A8F0003093AF044093B0045093B10489899A898E
:10A90000AB89BC8982199309A409B5098093A40471
:10A910009093A504A093A604B093A704BC01CD0115
:10A92000A80197010E9423922093B2043093B304AC
:10A930004093B4045093B504D601C501D7FE04C0BA
:10A9400081509F4FAF4FBF4F892F9A2FAB2FBB27FF
:10A95000A7FDBA959093F0038093EF0357FF04C0CF
:10A9600021503F4F4F4F5F4FBB2757FDBA95A52F43
:10A97000942F832F9093F2038093F1038091D60359
:10A980009091D70381349105DCF48091D4039091A8
:10A99000D50381349105A4F480918907E82FFF271E
:10A9A000EE0FFF1FE754F74F808191810190F081F6
:10A9B000E02DF7FF03C0F095E195FF4F7A97E4F0A3
:10A9C0008091020A8F3FC1F48091EF039091F003D0
:10A9D00097FD0196959587959093F0038093EF03EB
:10A9E0008091F1039091F20397FD019695958795DB
:10A9F0009093F2038093F103809141099091420971
:10AA0000A0914309B0914409B7FF04C081509F4F02
:10AA1000AF4FBF4F892F9A2FAB2FBB27A7FDBA95FA
:10AA20008093410990934209A0934309B09344094C
:10AA30008091320990913309A0913409B091350980
:10AA4000B7FF04C081509F4FAF4FBF4F892F9A2F40
:10AA5000AB2FBB27A7FDBA9580933209909333099A
:10AA6000A0933409B09335098091630490916404F4
:10AA7000A0916504B09166042F81388549855A8577
:10AA8000281B390B4A0B5B0B2093980430939904D5
:10AA900040939A0450939B0480915B0490915C04D2
:10AAA000A0915D04B0915E04EB84FC840D851E854D
:10AAB000E81AF90A0A0B1B0BE0929C04F0929D0421
:10AAC00000939E0410939F042093A0043093A1044C
:10AAD0004093A2045093A304E092A404F092A5042E
:10AAE0000093A6041093A70480913F049091400422
:10AAF000A0914104B0914204821B930BA40BB50BAF
:10AB000080933F0490934004A0934104B093420487
:10AB10008091370490913804A0913904B0913A049F
:10AB20008E199F09A00BB10B8093370490933804C2
:10AB3000A0933904B0933A0488898823E1F02091E6
:10AB40001D0430911E04213831054CF080917404AD
:10AB50009091750401969093750480937404205825
:10AB60003F4F4CF480917404909175040197909339
:10AB700075048093740410921E0410921D0481E0E9
:10AB800090E09093BB048093BA04E090A004F0900E
:10AB9000A1040091A2041091A304D801C70117FFDA
:10ABA00007C088279927DC018E199F09A00BB10BDC
:10ABB00081509240A040B04034F084E090E0909307
:10ABC000BB048093BA048091C0049091C104A09109
:10ABD000C204B091C30420914A0930914B094091BD
:10ABE0004C0950914D09821B930BA40BB50B815E50
:10ABF000914BAF4FBF4F8F539C49A040B04028F0BE
:10AC00008091030A89310CF4FFC021E0E21620E1B3
:10AC1000F20620E0020720E012070CF473C08091D6
:10AC2000BC04882309F46AC0D801C70117FF07C014
:10AC300088279927DC018E199F09A00BB10B9C0175
:10AC4000AD01B7FF04C021503E4F4F4F5F4FF9E0B9
:10AC50005595479537952795FA95D1F78091BA0480
:10AC60009091BB04820F931F9093BB048093BA040E
:10AC7000D801C70117FF03C00796A11DB11DE3E06E
:10AC8000B595A79597958795EA95D1F78093AE04EA
:10AC90009093AF04A093B004B093B104895893414A
:10ACA000A040B04064F088E893E1A0E0B0E0809379
:10ACB000AE049093AF04A093B004B093B10420917C
:10ACC000AE043091AF044091B0045091B10457FFED
:10ACD00004C021503F4F4F4F5F4F232F342F452F3C
:10ACE000552747FD5A958091EF039091F003820F0D
:10ACF000931F9093F0038093EF0306C081E080934D
:10AD0000BC0402C01092BC0440E0E41640EFF4061C
:10AD10004FEF04074FEF14070CF073C08091BD0490
:10AD2000882309F46AC0D801C70117FF07C0882724
:10AD30009927DC018E199F09A00BB10B9C01AD0175
:10AD4000B7FF04C021503E4F4F4F5F4F69E055950C
:10AD50004795379527956A95D1F78091BA049091D8
:10AD6000BB04820F931F9093BB048093BA04D80155
:10AD7000C70117FF03C00796A11DB11D23E0B595BC
:10AD8000A795979587952A95D1F78093AE049093D0
:10AD9000AF04A093B004B093B10488579C4EAF4F5A
:10ADA000BF4F64F488E79CEEAFEFBFEF8093AE0433
:10ADB0009093AF04A093B004B093B1042091AE047B
:10ADC0003091AF044091B0045091B10457FF04C0DA
:10ADD00021503F4F4F4F5F4F232F342F452F552783
:10ADE00047FD5A958091EF039091F003820F931FD6
:10ADF0009093F0038093EF0311C081E08093BD0432
:10AE00000DC01092BD040AC01092BB041092BA0487
:10AE100084E690E090938701809386016889262FCD
:10AE200033278091BA049091BB042817390724F482
:10AE30003093BB042093BA041091030A112379F0D4
:10AE4000212F332727FD30958091BA049091BB04C0
:10AE50002817390724F43093BB042093BA04409197
:10AE6000A0045091A1046091A2047091A304413800
:10AE700051056105710574F0809178049091790411
:10AE80002091BA043091BB04820F931F90937904F0
:10AE90008093780440585F4F6F4F7F4F74F48091D8
:10AEA0007804909179042091BA043091BB04821BFC
:10AEB000930B909379048093780481E090E09093D1
:10AEC000BB048093BA04C090A404D090A504E09081
:10AED000A604F090A704D701C601F7FE07C0882793
:10AEE0009927DC018C199D09AE09BF098150924058
:10AEF000A040B04034F084E090E09093BB04809395
:10AF0000BA048091C4049091C504A091C604B09184
:10AF1000C70420915209309153094091540950912E
:10AF20005509821B930BA40BB50B815E914BAF4F60
:10AF3000BF4F8F539C49A040B04018F019310CF41A
:10AF4000FFC001E0C01600E1D00600E0E00600E02E
:10AF5000F0060CF473C08091BE04882309F46AC023
:10AF6000D701C601F7FE07C088279927DC018C1995
:10AF70009D09AE09BF099C01AD01B7FF04C0215076
:10AF80003E4F4F4F5F4F09E05595479537952795B1
:10AF90000A95D1F78091BA049091BB04820F931F58
:10AFA0009093BB048093BA04D701C601F7FE03C097
:10AFB0000796A11DB11D13E0B595A79597958795A7
:10AFC0001A95D1F78093B2049093B304A093B4047C
:10AFD000B093B50489589341A040B04064F088E82C
:10AFE00093E1A0E0B0E08093B2049093B304A09307
:10AFF000B404B093B5042091B2043091B3044091ED
:10B00000B4045091B50457FF04C021503F4F4F4F37
:10B010005F4F232F342F452F552747FD5A95809199
:10B02000F1039091F203820F931F9093F2038093A8
:10B03000F10306C081E08093BE0402C01092BE04FA
:10B0400020E0C21620EFD2062FEFE2062FEFF20625
:10B050000CF073C08091BF04882309F46AC0D70143
:10B06000C601F7FE07C088279927DC018C199D09C6
:10B07000AE09BF099C01AD01B7FF04C021503E4F8E
:10B080004F4F5F4FE9E05595479537952795EA95DE
:10B09000D1F78091BA049091BB04820F931F9093D3
:10B0A000BB048093BA04D701C601F7FE03C007961C
:10B0B000A11DB11D73E0B595A795979587957A95D4
:10B0C000D1F78093B2049093B304A093B404B093E7
:10B0D000B50488579C4EAF4FBF4F64F488E79CEE91
:10B0E000AFEFBFEF8093B2049093B304A093B40486
:10B0F000B093B5042091B2043091B3044091B404EC
:10B100005091B50457FF04C021503F4F4F4F5F4F40
:10B11000232F342F452F552747FD5A958091F10352
:10B120009091F203820F931F9093F2038093F103A7
:10B1300011C081E08093BF040DC01092BF040AC00B
:10B140001092BB041092BA0484E690E090938701B9
:10B15000809386014889242F33278091BA049091E7
:10B16000BB042817390724F43093BB042093BA0496
:10B170008091030A882379F0282F332727FD309503
:10B180008091BA049091BB042817390724F43093B6
:10B19000BB042093BA044091A4045091A50460918B
:10B1A000A6047091A704413851056105710574F03A
:10B1B00080917604909177042091BA043091BB0479
:10B1C000820F931F909377048093760440585F4FCB
:10B1D0006F4F7F4FCCF4809176049091770420914B
:10B1E000BA043091BB04821B930B90937704809335
:10B1F00076040AC01092F2031092F1031092F00349
:10B200001092EF0310921F0480915809882341F493
:10B210001092F2031092F1031092F0031092EF03D8
:10B2200080914A0990914B09A0914C09B0914D0928
:10B230008093C0049093C104A093C204B093C3044C
:10B240008091520990915309A0915409B0915509E8
:10B250008093C4049093C504A093C604B093C7041C
:10B2600010925304109254041092550410925604F4
:10B2700010924F04109250041092510410925204F4
:10B2800010924B0410924C0410924D0410924E04F4
:10B2900010924A0910924B0910924C0910924D09D4
:10B2A00010925209109253091092540910925509A4
:10B2B00010924109109242091092430910924409D8
:10B2C0001092320910923309109234091092350904
:10B2D0001092180310921703E0901504F0901604D2
:10B2E000C701F7FE04C0882799278E199F09049784
:10B2F0003CF08091720984FD03C082E38093F303E4
:10B3000010919E07A12EBB24CC24DD24B7018827F1
:10B3100077FD8095982F9701F7FE04C022273327E9
:10B320002E193F09442737FD4095542F0E94AF91B5
:10B330009B01AC01C601B5010E94AF9197FF04C00B
:10B3400061507E4F8F4F9F4F59E095958795779528
:10B3500067955A95D1F79B01812F99278E9DD00132
:10B360008F9DB00D9E9DB00D1124CD01B7FD0396AC
:10B370009595879595958795280F391F8091F503A9
:10B380009091F603280F391F442737FD4095542F1D
:10B39000209394043093950440939604509397041B
:10B3A0008091330490913404A0913504B091360417
:10B3B000821B930BA40BB50B80933304909334043E
:10B3C000A0933504B09336048155934CA040B0400F
:10B3D00064F080E593ECA0E0B0E0809333049093B8
:10B3E0003404A0933504B0933604809133049091D3
:10B3F0003404A0913504B0913604805B9C43AF4F78
:10B40000BF4F64F480EB9CE3AFEFBFEF8093330456
:10B4100090933404A0933504B093360400918A01CC
:10B4200010918B0117FDFCC08091720983FFF8C059
:10B4300080918901815080938901882309F0F4C0AB
:10B440008DE0809389018091630490916404A091C0
:10B450006504B0916604B7FF04C081509E4FAF4FA2
:10B46000BF4F39E0B595A795979587953A95D1F750
:10B470007C0197FF04C0F094E194F108F39480916B
:10B480005B0490915C04A0915D04B0915E04B7FFF1
:10B4900004C081509E4FAF4FBF4F29E0B595A7958F
:10B4A000979587952A95D1F79C0197FF03C0309512
:10B4B00021953F4FE216F3060CF47901B701F7FE30
:10B4C00002C0695F7F4F2B01A3E055944794AA9572
:10B4D000E1F722E030E0420E531E60908209709046
:10B4E0008309809084099090850920913C013091D6
:10B4F0003D0140913E0150913F01C401B3010E94C2
:10B50000239259016A013093300920932F09021BBD
:10B51000130BC801845E9D4F68E671E00E94EE91B6
:10B520009C01245B304080918601909187010097B7
:10B5300031F0019790938701809386011BC049E108
:10B54000E416F104BCF480911D0490911E04820F56
:10B55000931F90931E0480931D048091F30388230E
:10B5600049F081508093F303882321F4B0922204A0
:10B57000A09221048091860190918701892BF9F492
:10B58000809188019927289FB001299F700D389FCD
:10B59000700D1124CB01B2010E94EE91CB01AA27BC
:10B5A00097FDA095BA2F680E791E8A1E9B1E609289
:10B5B0008209709283098092840990928509809112
:10B5C000F303882369F5809121049091220420914E
:10B5D0002F0930913009821B930B845E9D4F68E6E2
:10B5E00071E00E94EE919C01245B304080917201D9
:10B5F00086959927289FD001299FB00D389FB00DBF
:10B6000011249D01B7FF02C0215F3F4FF4E0359543
:10B610002795FA95E1F73093F6032093F50304C0DC
:10B620001092F6031092F50380911F04882381F095
:10B6300010922704109228041092290410922A04D0
:10B6400010922B0410922C0410922D0410922E04B0
:10B65000F090EC03FF20F1F480915809282F332754
:10B66000442755278091630490916404A091650458
:10B67000B0916604BC01CD010E94AF91DC01CB0109
:10B68000BC01CD0128EF3AE240E050E00E94239255
:10B69000390102C066247724E090EB03EE20F1F438
:10B6A00080915809282F33274427552780915B0420
:10B6B00090915C04A0915D04B0915E04BC01CD0149
:10B6C0000E94AF91DC01CB01BC01CD0128EF3AE231
:10B6D00040E050E00E942392290102C044245524F6
:10B6E00080912C0990912D09893C91051CF088ECE2
:10B6F00090E005C088539F4F34F488E39FEF909308
:10B700002D0980932C098091380990913909893C41
:10B7100091051CF088EC90E005C088539F4F34F4ED
:10B7200088E39FEF909339098093380980913A0913
:10B7300090913B09AA2797FDA095BA2F20918009E7
:10B74000A22EBB24CC24DD24BC01CD01A601950191
:10B750000E94AF919B01AC0180912C0990912D0921
:10B76000AA2797FDA095BA2FE7E0880F991FAA1F77
:10B77000BB1FEA95D1F7280F391F4A1F5B1F57FFE0
:10B7800004C0215C3F4F4F4F5F4F76E05595479582
:10B79000379527957A95D1F78301020F131F1093E0
:10B7A0003B0900933A0980912A0990912B09AA2715
:10B7B00097FDA095BA2FBC01CD01A60195010E946D
:10B7C000AF919B01AC018091380990913909AA276A
:10B7D00097FDA095BA2F67E0880F991FAA1FBB1F7E
:10B7E0006A95D1F7280F391F4A1F5B1F57FF04C006
:10B7F000215C3F4F4F4F5F4FF6E05595479537958A
:10B800002795FA95D1F74201820E931E90922B094B
:10B8100080922A0980917B0990917C09880F991F59
:10B82000AA2797FDA095BA2F2091310933274427E5
:10B830005527BC01CD010E94AF915B016C0197FFC0
:10B8400008C02FE330E040E050E0A20EB31EC41E5B
:10B85000D51EE6E0D594C794B794A794EA95D1F79E
:10B8600080914709282F3327442755278091470483
:10B8700090914804A0914904B0914A04BC01CD01C3
:10B880000E94AF91DC01CB01BC01CD0120EF35E579
:10B8900040E050E00E942392B501620F731F709345
:10B8A0007C0960937B090150104134F080E090E105
:10B8B00090933B0980933A0980913A0990913B0912
:10B8C0008050904F34F480E090EF90933B09809348
:10B8D0003A0951E0851650E1950634F080E090E198
:10B8E00090932B0980932A0980912A0990912B0922
:10B8F0008050904F34F480E090EF90932B09809328
:10B900002A096150704134F080E090E190937C0905
:10B9100080937B0980917B0990917C098050904FA6
:10B9200034F480E090EF90937C0980937B098091C0
:10B930000001482F552780911F0190912001481741
:10B94000590794F420911F013091200109811A8137
:10B95000049FC001059F900D149F900D1124B90103
:10B960000E94DA917A83698329813A81220F331FF9
:10B97000220F331F3A8329834091720940FD02C090
:10B980000C94CA64EE2011F00C94CA64FF2011F0EC
:10B990000C94CA6400E010E048018091ED0390919E
:10B9A000EE0390930D0780930C0720917A04309159
:10B9B0007B042115310509F03FC08091150190915C
:10B9C00016018959934058F087B5803F20F4809143
:10B9D0001B03815011C081E08093D1044EC080913F
:10B9E0001501909116018436910508F587B58031CF
:10B9F000D0F080911B038F5F80931B039FE089022F
:10BA00009001112480913107821B87BD8CE291E067
:10BA100090930B0380930A038EE591E090937B044F
:10BA200080937A042AC081E08093D00426C0F092EB
:10BA3000D004F092D10421C08091030490910404B9
:10BA4000A0910504B091060464E0880F991FAA1F15
:10BA5000BB1F6A95D1F780931C0390931D03A0939D
:10BA60001E03B0931F0310931A0300931903215070
:10BA7000304030937B0420937A042091750141FF7C
:10BA80003CC0223348F580918C01815080938C0119
:10BA90008F3F09F052C080919F01882339F4809133
:10BAA0002004882319F088E280939F0110922004DB
:10BAB0008091030490910404A0910504B0910604C0
:10BAC0008093FF0390930004A0930104B0930204B9
:10BAD00081E080938C0131C0273478F180919F01FF
:10BAE000882339F480912004882319F487E2809315
:10BAF0009F0188EC80938C011DC080914001909142
:10BB00004101820F911D209197073327829FA00149
:10BB1000839F500D929F500D1124CA01AA2797FDB3
:10BB2000A095BA2F8093FF0390930004A093010483
:10BB3000B093020481E0809320048091630490918B
:10BB40006404A0916504B0916604E0903C01F0901B
:10BB50003D0100913E0110913F01BC01CD01A801C2
:10BB600097010E94239259016A0180915B04909190
:10BB70005C04A0915D04B0915E04BC01CD01A801FC
:10BB800097010E942392B901C5010E945D845C0166
:10BB9000CC971CF05CE3A52EB12CC5010E945B7212
:10BBA0005C0180E280933B011092FE031092FD0342
:10BBB00080912004882309F45FC58091D1039927DF
:10BBC0009C012071307084FD57C58091D003826044
:10BBD0008093D00370915609872F992741E0C42E96
:10BBE000D12CC822D92280FD04C08091720981FD28
:10BBF00010C0C980DA803093C9042093C804309300
:10BC0000FE032093FD038091D103806C8093D103C8
:10BC1000ABC28091D10381FF7AC200917C01109167
:10BC20007D01C8010F9620901304309014048215F2
:10BC300093050CF058C08091D004882309F053C0BC
:10BC40008091D10387FF15C08091D1038F778093B6
:10BC5000D1038091030490910404A0910504B09154
:10BC600006048093FF0390930004A0930104B09313
:10BC700002048091D10380648093D103E09036095F
:10BC8000EE20F1F08091FF0390910004A091010457
:10BC9000B0910204BC01CD0124E630E040E050E068
:10BCA0000E9423928E2D9927AA27BB2782179307DC
:10BCB000A407B5072CF4D092FE03C092FD0310C078
:10BCC000C101801B910B0F9797FF03C09095819541
:10BCD0009F4F9093FE038093FD038BE280933B0183
:10BCE0001092F70316C1C8010F9728163906C4F53C
:10BCF0002091D1042223A1F58091D10386FF15C0A4
:10BD00008091D1038F7B8093D10380910304909124
:10BD10000404A0910504B09106048093FF0390935E
:10BD20000004A0930104B09302048091D1038068C1
:10BD30008093D103C101801B910B0F9697FF03C025
:10BD4000909581959F4F909581959F4F9093FE037D
:10BD50008093FD038DE280933B012093F703D9C0CC
:10BD60008DE380933B016091F803662371F120918C
:10BD7000F9033091FA034091FB035091FC03809149
:10BD8000FF0390910004A0910104B0910204821776
:10BD90009307A407B507CCF48091D1038064809306
:10BDA000D103862F99279093FE038093FD038AE0A9
:10BDB0008093F7038EE580933B018091D10387FF49
:10BDC000A8C08091D1038F7733C0662309F443C0A4
:10BDD0002091F9033091FA034091FB035091FC0349
:10BDE0008091FF0390910004A0910104B09102049E
:10BDF000281739074A075B0774F58091D1038068DB
:10BE00008093D103862F9927909581959F4F90938A
:10BE1000FE038093FD0386EF8093F70386E780930C
:10BE20003B018091D10386FF74C08091D1038F7B49
:10BE30008093D1038091030490910404A0910504A0
:10BE4000B09106048093FF0390930004A093010433
:10BE5000B09302045EC08091D103807C09F459C084
:10BE60008091F703882379F5E0900304F0900404AF
:10BE70000091050410910604D801C7018058904034
:10BE8000A040B0402091FF03309100044091010494
:10BE90005091020482179307A407B5075CF4D801F8
:10BEA000C70180589F4FAF4FBF4F281739074A0728
:10BEB0005B075CF08093FF0390930004A093010460
:10BEC000B093020402C01092F7038091D1038F73E4
:10BED0008093D1031092C9041092C80471FF06C068
:10BEE00084EF91E090930B0380930A038091070401
:10BEF000882379F48091030490910404A0910504AF
:10BF0000B0910604C397A105B1051CF081E08093B0
:10BF100007046091C8047091C9048091FD03909159
:10BF2000FE03680F791F7093C9046093C804CB01A6
:10BF300077FF04C088279927861B970B855F914060
:10BF40000CF4CEC04091F703442389F18091F903AA
:10BF50009091FA032091FF0330910004821B930B10
:10BF60000996439748F48091F9039091FA03A091C0
:10BF7000FB03B091FC0312C0242F332727FD30951B
:10BF8000432F532F8091FF0390910004A09101044F
:10BF9000B0910204820F931FA41FB51F8093FF036B
:10BFA00090930004A0930104B093020424C08091F4
:10BFB00097072091FF0330910004409101045091B4
:10BFC00002041616170644F463E00E94CE91280F6F
:10BFD000311D411D511D07C063E00E94CE91281BF9
:10BFE0003109410951092093FF0330930004409324
:10BFF0000104509302041092C9041092C804E09006
:10C000000304F09004040091050410910604D80183
:10C01000C70180509440A040B0402091FF03309170
:10C020000004409101045091020482179307A40771
:10C03000B5075CF4D801C70180509C4FAF4FBF4F8C
:10C04000281739074A075B0744F08093FF03909352
:10C050000004A0930104B09302048091560981FF6B
:10C0600006C084E690E090930B0380930A038091CE
:10C070009B078823A9F58091F803882389F54091CF
:10C08000ED035091EE0357FF02C04D5F5F4F559592
:10C0900047955595479580911F01909120012091DA
:10C0A00000013327489FF001499FF00D589FF00D84
:10C0B0001124CF01B9010E94EE9170937D0160932C
:10C0C0007C01663471051CF486E490E005C0673994
:10C0D000710534F086E990E090937D0180937C01B6
:10C0E00080917A0490917B04892BD1F18091030493
:10C0F00090910404A0910504B09106048093FF037D
:10C1000090930004A0930104B093020429C080918D
:10C11000030490910404A0910504B0910604805991
:10C120009140A040B0408093FF0390930004A093FF
:10C130000104B093020480919B07882311F0992792
:10C1400002C088E790E090937D0180937C01E980B4
:10C15000FA80F092EE03E092ED038EE280933B01D1
:10C16000C090ED03D090EE03E0900304F09004043F
:10C1700000910504109106042091FF033091000402
:10C1800040910104509102042E153F0540075107CC
:10C1900024F08091560980FDBBC280917A04909171
:10C1A0007B04892B39F0C090ED03D090EE0300E0C2
:10C1B00010E0D7C0D801C701821B930BA40BB50BAD
:10C1C0008093980490939904A0939A04B0939B044D
:10C1D000823000E890070FEFA0070FEFB0072CF4B4
:10C1E00081E090E8AFEFBFEF09C08F5F9F47A040AD
:10C1F000B04064F08FEF9FE7A0E0B0E08093980438
:10C2000090939904A0939A04B0939B04009198048E
:10C210001091990480917401282F332744275527C2
:10C220008091980490919904A0919A04B0919B04F4
:10C23000BC01CD010E94AF9197FF04C0615E7F4FAA
:10C240008F4F9F4F25E095958795779567952A9510
:10C25000D1F7609398047093990480939A04909313
:10C260009B0465302EEF72072FEF82072FEF9207A6
:10C270002CF484E09EEFAFEFBFEF09C06050744034
:10C280008040904064F080E094E0A0E0B0E08093D3
:10C29000980490939904A0939A04B0939B0480907F
:10C2A0009804909099042091190330911A0337FF54
:10C2B00002C0295F3F4F83E0359527958A95E1F7C6
:10C2C0004FEF223834071CF421E83FEF05C0203837
:10C2D000310514F020E830E0C901AA2797FDA095A8
:10C2E000BA2F20917601332744275527BC01CD0171
:10C2F0000E94AF9197FF04C06D5F7F4F8F4F9F4F9C
:10C30000B2E09595879577956795BA95D1F79B019A
:10C310005FEF613075071CF420E03FEF06C06F3F10
:10C32000710519F014F020E031E08091D103807C98
:10C3300049F0C90137FD03969C0135952795359540
:10C3400027950DC08091560980FF09C0C90137FDAE
:10C3500007969C01F3E035952795FA95E1F7820E53
:10C36000931E20917301222309F454C06091230489
:10C3700070912404809125049091260497FF04C0B5
:10C3800061587F4F8F4F9F4FE7E095958795779541
:10C390006795EA95D1F73327442755270E94AF9137
:10C3A00097FF04C0615E7F4F8F4F9F4F55E095957B
:10C3B0008795779567955A95D1F760939804709310
:10C3C000990480939A0490939B046138AFEF7A07A5
:10C3D000AFEF8A07AFEF9A072CF480E89FEFAFEF3B
:10C3E000BFEF0AC06F3F71058105910569F064F0E8
:10C3F00080E091E0A0E0B0E08093980490939904ED
:10C40000A0939A04B0939B0480919804909199040E
:10C41000880E991E80917101282F33278091060A7A
:10C42000992787FD9095289FF001299FF00D389F4F
:10C43000F00D11249F01F7FF02C021583F4F220F3A
:10C44000232F221F330BFFEF21383F071CF420E876
:10C450003FEF06C02F3F310519F014F020E031E026
:10C46000820E931EC401AA2797FDA095BA2FE090D3
:10C47000ED03F090EE039701442737FD4095542FCC
:10C48000BC01CD010E94AF9197FF04C061507E4F67
:10C490008F4F9F4F29E095958795779567952A95BA
:10C4A000D1F7C61AD70A8091FD039091FE03892B1C
:10C4B00009F060C01E141F040CF05CC0980117FF47
:10C4C00003C0309521953F4F2D33310540F48091C5
:10C4D0001B0490911C048C159D0574F526C02C53EB
:10C4E000304085E0369527958A95E1F72031310572
:10C4F00010F02FE030E040911B0450911C04101606
:10C500001106E4F480E190E0821B930B489F9001B8
:10C51000499F300D589F300D1124B4E03695279572
:10C52000BA95E1F72C153D0520F580917A0190919F
:10C530007B01C816D906F4F06C011CC0205F3F4F88
:10C5400080917A0190917B01829F8001839F100DE1
:10C55000929F100D11249801A4E036952795AA9575
:10C56000E1F74C155D0514F06A0104C0C216D3064C
:10C5700008F06901C601AA2797FDA095BA2FFDE032
:10C58000880F991FAA1FBB1FFA95D1F79501442761
:10C5900037FD4095542FBC01CD010E94239220937A
:10C5A0009C0430939D0440939E0450939F04C0903C
:10C5B0009C04D0909D048091CA049091CB049C016E
:10C5C000220F331F280F391F2C0D3D1D37FF02C0CE
:10C5D0002D5F3F4FA9015595479555954795509328
:10C5E000CB044093CA0480919307282F3327220F4E
:10C5F000331F220F331F241735076CF480917A09FB
:10C60000282F3327220F331F220F331F205530408E
:10C610004217530724F03093CB042093CA0480912F
:10C62000560980FF14C08091CA049091CB042981DF
:10C630003A818217930724F03093CB042093CA04E5
:10C640004091CA045091CB045A83498361C0298127
:10C650003A812E193F0937FF02C02D5F3F4F3595B4
:10C660002795359527956091CA047091CB04620F88
:10C67000731F7A8369834CC080919B07882301F5DF
:10C680006091ED037091EE0377FF02C06D5F7F4F05
:10C69000759567957595679540911F01509120019B
:10C6A00080910001282F3327649FC001659F900D62
:10C6B000749F900D1124B9010E94EE91CB0101C02D
:10C6C000992790937D0180937C0180917C019091CA
:10C6D0007D01873491051CF486E490E005C086391D
:10C6E000910534F086E990E090937D0180937C0180
:10C6F00089819A819093CB048093CA048091D1035D
:10C70000806C8093D1038091D0038D7F8093D00380
:10C710008091D10399279C012270307081FF2BC139
:10C720008091CC049091CD04A091CE04B091CF041F
:10C730000097A105B10521F0809107048130B1F483
:10C74000E981FA81CF01AA2797FDA095BA2F1EE0B3
:10C75000880F991FAA1FBB1F1A95D1F78093CC048D
:10C760009093CD04A093CE04B093CF04809107049E
:10C77000813019F482E080930704E980FA80C701D0
:10C78000AA2797FDA095BA2F9501442737FD40951C
:10C79000542FBC01CD010E94AF91DC01CB018093ED
:10C7A0009C0490939D04A0939E04B0939F04B7FFB4
:10C7B00004C08150904EAF4FBF4F7C018D01ADE062
:10C7C00015950795F794E794AA95D1F7E0929C0404
:10C7D000F0929D0400939E0410939F046091D203F5
:10C7E0007091D3032FE0603A720750F58091CC042A
:10C7F0009091CD04A091CE04B091CF049C01AD01E5
:10C80000FAE05695479537952795FA95D1F7821B0B
:10C81000930BA40BB50BA8019701E4E0220F331F83
:10C82000441F551FEA95D1F7820F931FA41FB51F10
:10C830008093CC049093CD04A093CE04B093CF0406
:10C8400060547F4118F58091CC049091CD04A09163
:10C85000CE04B091CF049C01AD016CE05695479594
:10C86000379527956A95D1F7821B930BA40BB50BCF
:10C87000A8019701F2E0220F331F441F551FFA95BC
:10C88000D1F7820F931FA41FB51F38C080911903E1
:10C8900090911A038091190390911A0397FF03C096
:10C8A000909581959F4F8436910584F5809103047E
:10C8B000909104042091FF0330910004821B930B9C
:10C8C00081509F4F8F5F914008F58091CC049091EB
:10C8D000CD04A091CE04B091CF049C01AD01EEE057
:10C8E0005695479537952795EA95D1F7821B930B77
:10C8F000A40BB50B8E0D9F1DA01FB11F8093CC0400
:10C900009093CD04A093CE04B093CF048091CC0437
:10C910009091CD04A091CE04B091CF047EE0B69565
:10C92000A795979587957A95D1F79093EE03809385
:10C93000ED0340919907442399F055279C01BA01D2
:10C940000E94EE91C901861B970B90931C04809363
:10C950001B04260F371F30937B0120937A011FC0E1
:10C9600010921C0410921B048FEF93E090937B01B4
:10C9700080937A0114C0109207041092CC04109294
:10C98000CD041092CE041092CF043093EE03209386
:10C99000ED0305C08091D103806C8093D103809119
:10C9A000E00481FF37C089819A8197FD03969595B0
:10C9B0008795959587952091CE033091CF032817C1
:10C9C000390760F48091ED039091EE03892B31F0EB
:10C9D000220F331F220F331F3A83298380910304D0
:10C9E00090910404A0910504B09106048093FF0384
:10C9F00090930004A0930104B093020488E99AE3A1
:10CA000090930B0380930A0380E09EE090930A01C9
:10CA10008093090120913F09822F9927880F991F40
:10CA2000880F991F889669817A818617970714F075
:10CA30009A83898370917A097D8B872F9927880F34
:10CA4000991F880F991F80559040A981BA818A1734
:10CA50009B0714F49A83898380915003882341F4BF
:10CA60008091180A8F3F21F48091E4048823E9F033
:10CA70008091D2039091D3030297C097B0F4E981DB
:10CA8000FA811E161F068CF481E090E09093D30388
:10CA90008093D203E22EFF24EE0CFF1CEE0CFF1C51
:10CAA0008701085D1F4F1A83098329813A813093DA
:10CAB000F1062093F0068091940490919504A09142
:10CAC0009604B091970412E0880F991FAA1FBB1F0C
:10CAD0001A95D1F700917B0910917C09081B190B5D
:10CAE000213A31058CF0C90137FD0196959587955E
:10CAF000801791070CF48C01909581959F4F081732
:10CB000019076CF48C010BC00135110514F000E518
:10CB100010E03FEF003B130714F400EB1FEF4D89CB
:10CB2000242F3327220F331F220F331FC90169819E
:10CB30007A81861B970B801791070CF48C018981F1
:10CB40009A81821B930B081719070CF48C018091B2
:10CB50003A0990913B096091190470911A04861B5F
:10CB6000970B9093490980934809D09058092091D8
:10CB70002B0430912C0440912D0450912E04DD2083
:10CB800041F0661A770AC301AA2797FDA095BA2F2C
:10CB900004C0AA2797FDA095BA2F280F391F4A1F56
:10CBA0005B1F20932B0430932C0440932D0450934F
:10CBB0002E0480912B0490912C04A0912D04B0910F
:10CBC0002E0481509A4FA040B04064F080E09AEF6C
:10CBD000A0E0B0E080932B0490932C04A0932D044C
:10CBE000B0932E0480912B0490912C04A0912D04DD
:10CBF000B0912E0480509640AF4FBF4F64F480E058
:10CC000096E0AFEFBFEF80932B0490932C04A0939A
:10CC10002D04B0932E04C090A807209148093091AC
:10CC2000490978E0E72EEC1498F08C2D9927829F23
:10CC3000A001839F500D929F500D1124CA0157FDF2
:10CC400007967C0163E0F594E7946A95E1F712C0DA
:10CC50008C2D86959927829FB001839F700D929F9E
:10CC6000700D1124CB0177FD03967C01F594E794B8
:10CC7000F594E794A0907701B0907801950144274E
:10CC800037FD4095542F80912B0490912C04A09156
:10CC90002D04B0912E04BC01CD010E942392E20E1E
:10CCA000F31E90906101692D7727882799279801B5
:10CCB00017FF04C022273327201B310B37FF02C088
:10CCC0002F5F3F4F35952795A981BA812A0F3B1FCA
:10CCD000442737FD4095542F0E94AF9197FF04C021
:10CCE000615C7F4F8F4F9F4F26E095958795779595
:10CCF00067952A95D1F79B016E157F050CF47B0192
:10CD0000309521953F4FE216F3060CF4790180919E
:10CD10002A0990912B096091170470911804861BC1
:10CD2000970B90932909809328092091270430912B
:10CD300028044091290450912A04DD2041F0461A2C
:10CD4000570AC201AA2797FDA095BA2F04C0AA27A7
:10CD500097FDA095BA2F280F391F4A1F5B1F2093FC
:10CD60002704309328044093290450932A04809187
:10CD7000270490912804A0912904B0912A0481509D
:10CD80009A4FA040B04064F080E09AEFA0E0B0E09D
:10CD90008093270490932804A0932904B0932A0435
:10CDA0008091270490912804A0912904B0912A042D
:10CDB00080509640AF4FBF4F64F480E096E0AFEFF5
:10CDC000BFEF8093270490932804A0932904B09385
:10CDD0002A04209128093091290948E04C1598F03F
:10CDE0008C2D9927829FB001839F700D929F700DAB
:10CDF0001124CB0177FD07966C01B3E0D594C7945D
:10CE0000BA95E1F712C0C6948C2D9927829FD00164
:10CE1000839FB00D929FB00D1124CD01B7FD0396F5
:10CE20006C01D594C794D594C7949501442737FDD8
:10CE30004095542F8091270490912804A0912904B3
:10CE4000B0912A04BC01CD010E942392C20ED31ED0
:10CE5000692D772788279927980117FF04C0222773
:10CE60003327201B310B37FF02C02F5F3F4F359513
:10CE70002795E981FA812E0F3F1F442737FD409502
:10CE8000542F0E94AF9197FF04C0615C7F4F8F4F7A
:10CE90009F4FE6E09595879577956795EA95D1F749
:10CEA0009B016C157D050CF46B01309521953F4F6E
:10CEB000C216D3060CF4690180913F09282E332451
:10CEC0005090EA0768E5862E68E0962E5FE0A52E72
:10CED00058E0B52E4BE0442E39E5632E39E0732E31
:10CEE000D5012C9112160CF029C1203429F4E981C6
:10CEF000FA81FF8BEE8B1FC049815A81CA01AA2794
:10CF000097FDA095BA2F332727FD3095432F532F38
:10CF1000BC01CD010E94AF9197FF04C0615C7F4FBF
:10CF20008F4F9F4F26E095958795779567952A9522
:10CF3000D1F77F8B6E8BF5012181203439F42E8956
:10CF40003F892E0D3F1D3F8B2E8B2AC0203C39F48C
:10CF50004E895F894E195F095F8B4E8B21C0C701D7
:10CF6000AA2797FDA095BA2F332727FD3095432F89
:10CF7000532FBC01CD010E94AF9197FF04C0615CAB
:10CF80007F4F8F4F9F4FB6E0959587957795679523
:10CF9000BA95D1F7AE89BF89A60FB71FBF8BAE8BED
:10CFA000F5012281203439F42E893F892C0D3D1D55
:10CFB0003F8B2E8B2AC0203C39F44E895F894C1957
:10CFC0005D095F8B4E8B21C0C601AA2797FDA095F6
:10CFD000BA2F332727FD3095432F532FBC01CD01A6
:10CFE0000E94AF9197FF04C0615C7F4F8F4F9F4FAE
:10CFF000A6E09595879577956795AA95D1F7AE891F
:10D00000BF89A60FB71FBF8BAE8BF50123812034DC
:10D0100039F42E893F89200F311F3F8B2E8B2AC078
:10D02000203C39F44E895F89401B510B5F8B4E8B3E
:10D0300021C0C801AA2797FDA095BA2F332727FD45
:10D040003095432F532FBC01CD010E94AF9197FF24
:10D0500004C0615C7F4F8F4F9F4FF6E09595879599
:10D0600077956795FA95D1F7AE89BF89A60FB71F57
:10D07000BF8BAE8BF301808191812E893F8982170E
:10D08000930764F4B901680F791F77FF02C06F5FDF
:10D090007F4F759567957F8B6E8B1DC0552049F42A
:10D0A0004E895F89440F551F481B590B5F8B4E8B70
:10D0B00012C051E0551578F4252D33276E897F89EC
:10D0C000861B970BB9010E94EE91AE89BF89A60F0E
:10D0D000B71FBF8BAE8BC101880F991F880F991F97
:10D0E000EE89FF898E179F0764F4FD898F2F99279A
:10D0F000880F991F880F991F2E893F892817390794
:10D1000014F09F8B8E8B8E899F8997FD0396959542
:10D11000879595958795F4018183880F991F880FCE
:10D12000991F2E893F89281B390BC901880F8283DB
:10D13000EE89FF89D301ED93FC9303C0F4011182C2
:10D1400012824A9422E030E0620E731E44E050E006
:10D15000A40EB51E68E070E0860E971E47FEC0CE96
:10D16000E2E1C95E0C945A9284B1806A84B93D9A16
:10D1700082E58CBD1DBC459A81E080938C098AEACA
:10D1800080939D0983E880939E098AE080939F099C
:10D190001092A1091092A0091092A3091092A2095D
:10D1A0001092050A1092C109089530918C09332319
:10D1B00009F085C00DB407FE82C084E080930903A6
:10D1C000459A2EB58091E70499278130910589F021
:10D1D000823091051CF4892B21F03EC00297B9F0F2
:10D1E0003BC03093C0092093E8042138A9F581E0C1
:10D1F00008C0253549F48091E804820F8093E80443
:10D2000082E08093E70428C03093E70425C0809132
:10D21000C009E82FFF27EE51F64F20838F5F8093E0
:10D22000C0099091E8048032A0F0291769F480E2E7
:10D23000A2EEB9E0E2ECF9E00D9001928A95E1F7F7
:10D2400081E08093C10902C03093C1091092E704C4
:10D2500003C0920F9093E80420919C09223208F0B9
:10D2600028C04598000000000000000000000000F9
:10D2700000000000000000000000000000000000AE
:10D28000000000000000000000000000000000009E
:10D2900000000000E0919509F0919609E20FF11D60
:10D2A00080818EBD8091BE099081890F8093BE09D7
:10D2B00003C081E080938C092F5F20939C0908951F
:10D2C000EF92FF920F931F938091A1079927880FE8
:10D2D000991F880F991F7C010027F7FC0095102FDC
:10D2E0008091630490916404A0916504B0916604F8
:10D2F000BC01CD01A80197010E9423923093A1099E
:10D300002093A00980915B0490915C04A0915D043E
:10D31000B0915E04BC01CD01A80197010E94239247
:10D320003093A3092093A2092091820930918309A7
:10D330004091840950918509DA01C90163E0880FA1
:10D34000991FAA1FBB1F6A95D1F7820F931FA41FB5
:10D35000B51F820F931FA41FB51F20913C01309170
:10D360003D0140913E0150913F01BC01CD010E9421
:10D3700023923093A9092093A80980917404909175
:10D3800075042091260330912703821B930B909301
:10D39000AF098093AE09E0916A04F0916B0480912B
:10D3A0004F0990915009BF010E94EE919B01220FFD
:10D3B000331F220F331F260F371F260F371F37FF4C
:10D3C00002C02D5F3F4F35952795359527953093B2
:10D3D000A5092093A40980917E0990917F09BF013E
:10D3E0000E94EE919B01220F331F220F331F260F45
:10D3F000371F260F371F37FF02C02D5F3F4F359570
:10D400002795359527953093A7092093A609109263
:10D410006B0410926A041092500910924F091092F6
:10D420007F0910927E0980919F099927AA27BB271F
:10D43000FC013A97E830F10508F0FEC1E058FF4FD3
:10D440000C9475928091E6038093B2098091E50374
:10D450008093B3098091E4038093B4098091E3033E
:10D460008093B5098091E2038093B6098091E1032E
:10D470008093B7098091E0038093B8098091DF031E
:10D480008093B9098091D1038093BA098091D10327
:10D49000837F8093D1030E9463308093BB09809186
:10D4A000EB078093BC098091D003C4C18091120A1C
:10D4B0009091130A9093B3098093B2098091160A50
:10D4C0009091170A9093B5098093B40980911F0138
:10D4D000909120018093B609809100018093B70953
:10D4E00080913B018093B8099091E9049093B90928
:10D4F000E92FFF27A3E0EE0FFF1FAA95E1F7E85AF7
:10D50000F74F86818093BA0983818093BB09878115
:10D510008093BC0985818093BD09892F8F5F6CE062
:10D520000E94CE919093E90487C18091D6078093A1
:10D53000B2098091D7078093B3098091D80780936F
:10D54000B4098091D9078093B5098091DA07809357
:10D55000B6098091DE078093B7098091DF07809339
:10D56000B8098091E0078093B9098091E30780931F
:10D57000BA098091E1078093BB098091E20780930B
:10D58000BC098091E40756C18091D5078093B20908
:10D590008091AC07863081F08091D602823451F0C0
:10D5A0000E949D73E82FFF27EB55FF4E84918093D7
:10D5B000D60202C00E949D7380910C058093B3092E
:10D5C0003BC1F89480918807E82FFF27EE0FFF1FDB
:10D5D000E754F74F0190F081E02DE038F1051CF0A1
:10D5E000EFE7F0E006C02FEFE138F20714F4E1E8CE
:10D5F000FFEFE093B20980918907E82FFF27EE0F34
:10D60000FF1FE754F74F0190F081E02DE038F1055E
:10D610001CF0EFE7F0E006C07FEFE138F70714F405
:10D62000E1E8FFEFE093B30980918707E82FFF2738
:10D63000EE0FFF1FE754F74F0190F081E02DE03827
:10D64000F1051CF0EFE7F0E006C08FEFE138F807D6
:10D6500014F4E1E8FFEFE093B40980918607E82F26
:10D66000FF27EE0FFF1FE754F74F0190F081E02DE9
:10D67000E038F1051CF0EFE7F0E006C02FEFE138ED
:10D68000F20714F4E1E8FFEF7894E093B509809194
:10D690000A048093B60980910B048093B7098091A6
:10D6A0000C048093B80980910D048093B90980918E
:10D6B0000E048093BA0980910F048093BB09809176
:10D6C00010048093BC0980911104B4C0809171054D
:10D6D000863018F01092710585E08093B209809130
:10D6E000E5078093B3098091030490910404A0910D
:10D6F0000504B0910604BC01CD0125E030E040E016
:10D7000050E00E9423923093B5092093B409809190
:10D71000FF0390910004A0910104B0910204BC01A8
:10D72000CD0125E030E040E050E00E9423923093AC
:10D73000B7092093B6098091DB078093B8098091DF
:10D74000DC078093B9098091DD078093BA09809145
:10D7500009048093BB098091B9089091BA0880931D
:10D76000BC098091F0069091F10697FD039695957E
:10D770008795959587955EC01092B2098AE580934A
:10D78000B30984E08093B40984E38093B509809160
:10D7900001018093B609809156058093B709909155
:10D7A00057059093B8098F778093560590719093A1
:10D7B0005705809158058093B9098091720980932B
:10D7C000BA09809156098093BB098091E70780933D
:10D7D000BC098091F4072EC08091BA078093B209EA
:10D7E0008091F2078093B309809169018093B40915
:10D7F0008091B3078093B5098091B4078093B609EF
:10D800008091B5078093B709809168018093B8092A
:10D810008091B7078093B9098091B8078093BA09BE
:10D820008091B9078093BB098091180A8093BC0945
:10D8300080911A078093BD098091C109882309F45A
:10D840007DC16091C20980919B01681719F08AEF30
:10D850008093990160939B0181E0809389014091BD
:10D86000C3095091C409CA0181509E4F8F5F9340F4
:10D87000B0F42091C5093091C609C90181509E4F6D
:10D880008F5F934060F48091920785FF08C05093AA
:10D89000D6044093D5043093D4042093D3048091CC
:10D8A000C9099091CA0921E08936920724F490931E
:10D8B0008B0180938A012091D3093091D409809102
:10D8C0000A0390910B038217930740F48091DE02C4
:10D8D000882321F430930B0320930A03862F992782
:10D8E0008936910509F4A5C08A36910544F4873636
:10D8F000910571F08836910509F462C027C18A3616
:10D90000910509F414C18B36910509F4E2C01EC1DA
:10D910008091D5098093020A8091D6098093040AE8
:10D920008091D7098093030A8091D8098093880158
:10D930008091D9098093060A8091DA0980939A012F
:10D940008091DB098093E6048091DC098093D20406
:10D950008091DE038823F9F02091DD093091DE0902
:10D9600037FD19C030932204209321049091BC0705
:10D97000992389F08FE0989FC0011124281B390B4F
:10D98000C90188599E4F68E671E00E94EE9190931C
:10D990002204809321042091DD043091DE048091E3
:10D9A000DF099091E009280F391F37FF02C02F5F70
:10D9B0003F4F359527953093DE042093DD04C6C094
:10D9C0008091D509809397098091D6098093980911
:10D9D0008091D709809399098091D80980939A09F9
:10D9E0008091D90980939B098091E0069091DA0992
:10D9F000892B8093E0069091E10693708091DB097A
:10DA00008C70982B9093E1068091DC098093E4045C
:10DA10008091DD0980938D018091DE098093050A54
:10DA20008091DF098093E0048091E0098093DF0416
:10DA30008DC08091D50980938D098091D6098093FE
:10DA40008E098091D70980938F098091D80980939E
:10DA500090098091D9099091DA0990939209809365
:10DA600091098091DB099091DC099093940980934E
:10DA700093098091DD09992787FD90959093EC0893
:10DA80008093EB088091DE098093F8038091DF0991
:10DA90009091E0099C01442737FD4095542FDA010D
:10DAA000C90163E0880F991FAA1FBB1F6A95D1F7B0
:10DAB000820F931FA41FB51F820F931FA41FB51FB2
:10DAC0008093F9039093FA03A093FB03B093FC03B4
:10DAD0003DC08091D5098093E3048091D60980935D
:10DAE000E2048091D7098093E1049091D8099923A9
:10DAF00049F080919F01882319F08151833010F4FF
:10DB000090939F018091D909809311058091DA0942
:10DB1000809310058091DB099091DC0990930E05AC
:10DB200080930D058091DD0980930F050FC08091D2
:10DB3000AC07863059F40E94F67308C01092D604E0
:10DB40001092D5041092D4041092D3041F910F9117
:10DB5000FF90EF90089580918C09882309F43BC0D1
:10DB600045988DE999E09093960980939509909155
:10DB7000E504E92FFF27E257FE4F9F5F9093E504EE
:10DB8000808180939F099B3010F01092E5041092E1
:10DB90008C090E94606981E080939C09000000006C
:10DBA0000000000000000000000000000000000075
:10DBB0000000000000000000000000000000000065
:10DBC00000000000000000000000000080919D099E
:10DBD0008093BE098EBD089587B18C6087B9429845
:10DBE00043981092EB0480E880939D011092EA0420
:10DBF00080939C0108958091F00481508093F004FB
:10DC00008F3F09F055C189E08093F0048091EB08C3
:10DC10009091EC0881589F4F39F08091EB089091DA
:10DC2000EC0881588093F5048091D1039927807383
:10DC30009070892B21F48091570580FF1DC0809141
:10DC4000D307882351F08091F304882319F484E0EA
:10DC50008093EB0481E08093F3048091D4078823C0
:10DC6000B9F08091F404882319F484E08093EA04E5
:10DC700081E08093F4040CC01092F3041092F40439
:10DC80008091CF078093F1048091D1078093F204B3
:10DC90008091F304882309F073C08091F107282F45
:10DCA000332724FF07C080910804882319F425FD39
:10DCB00080C081C09091D007983F48F08091510971
:10DCC0008D3D28F08091F10488236CF00AC0983FC4
:10DCD00068F080915109853049F48091F10487FF03
:10DCE00002C0429801C0429A81E032C08091EB04A8
:10DCF00081508093EB048F3F09F05EC08091F40760
:10DD000085FF29C09091F504892F86958093EB04B7
:10DD1000992351F48091F10487FF02C0429801C019
:10DD2000429A10929D0148C080919D019091F1040A
:10DD3000882341F48093F50480E880939D01992322
:10DD4000D4F137C0982311F0429A01C042988695C9
:10DD500080939D0131C08091510986958093EB0499
:10DD600080919D01813021F41092F50480E801C07A
:10DD7000869580939D0180919D019091F10417C03B
:10DD80008091EB0481508093EB048F3FA9F489E0EC
:10DD90008093EB0480919D01813011F480E801C0F3
:10DDA000869580939D0180919D019091D307892351
:10DDB00011F0429A01C042988091F404882309F03E
:10DDC00043C09091F10797FF07C080910804882312
:10DDD00019F496FD52C053C09091D207983F48F075
:10DDE000809179098D3D28F08091F20488236CF0B0
:10DDF0000AC0983F78F080917909853059F4809174
:10DE0000F20487FF02C0439801C0439A81E08093E7
:10DE10009C0136C08091EA0481508093EA048F3FD0
:10DE200079F58091790986958093EA0480919C0127
:10DE3000813011F480E801C0869580939C01809127
:10DE40009C019091F20417C08091EA048150809364
:10DE5000EA048F3FA9F489E08093EA0480919C0151
:10DE6000813011F480E801C0869580939C018091F7
:10DE70009C019091D407892311F0439A01C04398E3
:10DE8000429B04C08091D003886003C08091D0037E
:10DE9000877F8093D003439B06C08091D00380612D
:10DEA0008093D00308958091D0038F7E8093D00318
:10DEB00008950F931F93CF93DF93482FEB01809129
:10DEC0000904E42FFF27843BD8F08F010E0F1F1F9A
:10DED000F801E754F74F808191819B01281B390B92
:10DEE000C90163E070E00E94EE91CB01880F991F99
:10DEF000860F971F0351174FF8019183808306C047
:10DF0000EE0FFF1FE351F74F11821082E42FFF271E
:10DF1000EE0FFF1FE754F74FD183C083DF91CF91FE
:10DF20001F910F9108954FB724E130E0F89480914C
:10DF3000C9008F778093C9008091C9008F7B80933F
:10DF4000C9008091C9008F7D8093C9005A9A529868
:10DF50005B9A539A832F99278093CD002093CC000E
:10DF60008091C80082608093C80080E18093C900DE
:10DF70008091CA008F778093CA008091CA008F7BFE
:10DF80008093CA008091CA008F7D8093CA008091DF
:10DF9000CA008F7E8093CA008091CA00877F8093D9
:10DFA000CA008091C9008B7F8093C9008091CA000C
:10DFB00084608093CA008091CA0082608093CA0006
:10DFC0008091C80087FF03C08091CE00F9CF809177
:10DFD000C90080688093C9004FBF0895EF92FF92F7
:10DFE0000F931F93CF93DF93482F00E010E08091B1
:10DFF0009E01813061F410929E0184E48093F804C4
:10E000001092FA041092F9041092FB0403C280915A
:10E01000F804882319F421E030E001C098019091C0
:10E02000F904992371F4232B11F081E010C084E4EA
:10E030008093F8049093FA049093F9049093FB046E
:10E04000D2C1913069F4232B09F0C3C182E08093DF
:10E05000F9048091FA048F5F8093FA0483E0C1C1D0
:10E060009230D1F4232B09F0B4C183E08093F804FB
:10E070004093FB049091FA04923039F41092FC041E
:10E0800047FF03C081E08093FC0483E08093F904A0
:10E090009F5F9093FA04A7C1933009F09AC1232B94
:10E0A00009F097C19093F80482E08093F90480917D
:10E0B000FA048F5F8093FA042091FB04822F992742
:10E0C000782F6627842F9927682B792B8091AC07AE
:10E0D000813051F47370CB018050924063E070E066
:10E0E0000E94EE91EB0119C0823069F47770CB0188
:10E0F0008050944066E070E00E94EE91EB0126951E
:10E10000269526950CC0EB01D370C856D140CE01A0
:10E11000D7FD0196EC01D595C79526952695022F3A
:10E1200011270F7010700F5F1F4F0D30110508F091
:10E1300049C10230110519F404E010E005C00430B3
:10E14000110511F402E010E0D801A00FB11FFD018C
:10E15000E754F74F808191819E01281B390BC9013B
:10E1600037FF03C0909581959F4F069704F5E09186
:10E17000EE07EE2351F0FF27EE0FFF1FE754F74F96
:10E18000808191818436910594F480910904883CC2
:10E1900030F480910904865F8093090408C088ECFC
:10E1A0008093090480916F008F7D80936F00A75446
:10E1B000B74F8D919C91BC01660F771F680F791F37
:10E1C0006C0F7D1F77FF02C06D5F7F4F7B01F59461
:10E1D000E794F594E794CE0101968E159F0524F4FB
:10E1E0000894E108F10808C0CE010197E816F90685
:10E1F0001CF40894E11CF11C0630110509F0CEC096
:10E20000C536D1050CF4A5C09091F704E92FFF277E
:10E21000E95FF54FE081ED3729F48091F6048095B0
:10E220008093F604963061F48091F604882311F00F
:10E23000E338B9F0882309F088C0ED3791F085C044
:10E24000993009F082C08091F604882329F48091E6
:10E25000100A833831F079C08091100A8D3709F0A7
:10E2600074C08091080A8D3739F48091090A833887
:10E2700099F463E87FEF0DC0833871F48091090A47
:10E28000833819F460E070E004C08D3729F46DE73D
:10E2900070E085E00E94596F80910A0A992787FDF6
:10E2A0009095BC0186E00E94596F80910B0A9927D6
:10E2B00087FD9095BC018BE00E94596F80910C0AFC
:10E2C000992787FD9095BC018CE00E94596F809141
:10E2D000F7048930D1F580910E0A8D3749F4809189
:10E2E000C9089091CA080596BC0188E00E94596F40
:10E2F00080910F0A8D3749F48091C9089091CA081E
:10E300000597BC0188E00E94596F8091C9089091DF
:10E31000CA0883589F4F1CF483E89FEF09C080917F
:10E32000C9089091CA088E37910534F08DE790E0C6
:10E330009093CA088093C90880910D0A992787FD98
:10E340009095BC018AE00E94596F1092F7041092D8
:10E35000F604CA30D1055CF48091F7048F5F809396
:10E36000F704E82FFF27E95FF54F83E8808380916A
:10E37000F7048A3011F41092F7048FEFCC39D807E4
:10E380006CF48091F704E82FFF27E95FF54F8DE7E4
:10E3900080838091F60480958093F6040530110502
:10E3A00018F4B701802F0BC00530110519F4BE0118
:10E3B00087E005C007301105B1F4BE0189E00E9475
:10E3C000596F11C00231110570F081E080939E01F8
:10E3D0000AC081E080939E011092FA041092FC041E
:10E3E00084E48093F8048091FA04803198F080915D
:10E3F000FC04882331F480919E01882311F48093DA
:10E400003A011092FA041092FC041092F90484E488
:10E410008093F804E6E0CDB7DEB70C946692CF9314
:10E42000FC0197FF05C0CFEFF095E195FF4F01C0CC
:10E43000C1E028E631E0CF01B9010E94EE91FC0174
:10E440008B35910554F08B5590408A35910538F401
:10E4500084EB90E08E1B9F0BFC0141E00DC0CF01CF
:10E46000855B90408A35910518F4E45BF04003C069
:10E470002E1B3F0BF9014FEFEE0FFF1FE85BF64F2E
:10E48000259134918C2F992787FD9095289FB00175
:10E49000299F700D389F700D1124842F992787FDB7
:10E4A0009095689FA001699F500D789F500D112491
:10E4B000CA01CF9108952AE530E0281B390BC90124
:10E4C0000E940F720895089508950895089508957B
:10E4D00080E090E008951092130A1092120A1092B0
:10E4E000170A1092160A1092150A1092140A109226
:10E4F000180A8AE090E00E946F199093FE048093BE
:10E50000FD040895CF93DF938091FD049091FE0464
:10E510000E947819882309F4AFC08091FD0490917E
:10E52000FE040A969093FE048093FD04E0E0F0E080
:10E530009F0190E05FEFA8E5B8E04BE0ED018B8133
:10E5400087FF0BC09F5F8D81E80FF11D8981280F28
:10E55000311D8E81851708F4582F4150189647FFBA
:10E56000EDCF5093180A232B41F5209103053091EC
:10E5700004054091050550910605BB27A52F942F52
:10E58000832F9093020580930105AA27BB27281BA0
:10E59000390B4A0B5B0BCF01AA27BB27280F391F6A
:10E5A0004A1F5B1F20930305309304054093050524
:10E5B00050930605E5E0F0E013C02091010530918D
:10E5C00002052E173F0718F4E21BF30B02C0E0E030
:10E5D000F0E0892F9927880F991FE80FF91F3596CA
:10E5E000F093130AE093120AEF3FF10578F480915B
:10E5F0001F01909120018E9F90018F9F300D9E9F53
:10E60000300D1124C90164E670E013C0CF01969566
:10E6100087959695879520911F0130912001289F1D
:10E62000A001299F500D389F500D1124CA0169E1A6
:10E6300070E00E94DA917093150A6093140A209199
:10E64000FF04309100052E0F3F1F309300052093EB
:10E65000FF045EE02131350778F08091160A909131
:10E66000170A01969093170A8093160A20513E408C
:10E67000309300052093FF04DF91CF9108953091EE
:10E680001205E32FFF2783E0EE0FFF1F8A95E1F7C6
:10E69000E85AF74F2781422F552747FD5095809123
:10E6A00013059927841795072CF4209313053093AD
:10E6B00015050AC0222341F08091140599274817B7
:10E6C000590714F420931405832F8F5F809312054C
:10E6D0008D30D0F010921205809114058F3F19F003
:10E6E0008093080502C0109208058091130580935D
:10E6F000090580911505809307058FEF8093140518
:10E700001092130510921505089595E1899F802DAB
:10E7100011240E94F08B8AE89CE09F938F9382ECF7
:10E720009BE89F938F93E0913D05F0913E050995FD
:10E730000F900F900F900F900895CF93C0E020910D
:10E740009F0120930C058091D10385FF02C0C0E199
:10E7500023C09091E4049923B1F0809108048823A8
:10E7600049F4E92FFF27EE0FFF1FE150F64F849188
:10E77000882349F4E92FFF27EE0FFF1FE250F64FE1
:10E78000C491CC2349F48091F40786FD03C0109214
:10E790009F0104C0C22F02C0C0930C0580911605D2
:10E7A0008C1771F480911705909118050E947819C3
:10E7B000882319F480E090E017C088E893E102C054
:10E7C00080ED97E00E946F199093180580931705CC
:10E7D000CC2331F080919F01C81711F410929F0152
:10E7E000C09316058C2F9927CF91089540E050E0F3
:10E7F00030E08091E00999278A38910589F08B38BB
:10E80000910524F48938910541F013C08D389105A4
:10E8100069F08E38910539F00CC041E75AE008C024
:10E8200049E45BE005C049E15AE002C045E45AE032
:10E830003CE29091D50920E08091D609281770F428
:10E84000931760F4DA01A90FB11DE22FFF27EE53F1
:10E85000F64F85898C939F5F2F5FEECF089520E35D
:10E8600035E780913B018B3211F08D32F9F48091C4
:10E870009707282F33278091FD039091FE03829FF5
:10E88000A001839F500D929F500D1124CA0163E097
:10E8900070E00E94EE91CB019B01205D3A48C19649
:10E8A000C19708F03FC02EEF34E73CC0803229F515
:10E8B0008091D10381FF36C020910A0530910B056C
:10E8C000205D3A4855E72133350748F085E724397C
:10E8D000380718F420E335E702C02456304045E7F6
:10E8E00020333407F8F454E72D3C350718F020E3C3
:10E8F00035E718C02C593F4F15C08E3549F490911B
:10E90000F8038AE0989F90011124205D3A480AC0DC
:10E91000863741F49091F8038AE0989FC001112452
:10E92000281B390BC9010895EF92FF920F931F9393
:10E9300099278A38910509F444C18B38910524F44C
:10E940008938910551F0DEC28D38910509F424C251
:10E950008E38910509F486C1D5C280910304909147
:10E960000404A0910504B0910604BC01CD0124E685
:10E9700030E040E050E00E942392DA01C9018C505F
:10E980009E4F9093770A8093760A0E942F749093FB
:10E990007D0A80937C0A90937F0A80937E0A9093ED
:10E9A000810A8093800A2091760A3091770A8091BB
:10E9B0007A0A90917B0A2817390724F430937B0A4E
:10E9C00020937A0A8091780A9091790A82179307A6
:10E9D00024F43093790A2093780A1092730A81E71D
:10E9E0009AE0909329058093280580913B018093BC
:10E9F000970A8091D00380FF02C083E401C080E2C7
:10EA00008093980A2091E404222309F1822F6AE07E
:10EA10000E94CE91805D8093820A822F0E94CE91C7
:10EA2000892F805D8093830A8AE38093840A81E141
:10EA3000289FF0011124A5E8BAE0E25CF54F9FE0C1
:10EA400084918D939150319697FFFACF58C280915F
:10EA5000D10385FF0CC0A2E8BAE0EEE5FCE094E14A
:10EA600084918D939150319697FFFACF48C230919F
:10EA70001005332309F499C087E58093820A80E565
:10EA80008093830A40E24093840A20911105822FEB
:10EA90006AE00E94CE91805D8093850A822F0E9459
:10EAA000CE91892F805D8093860A8FE28093870ABA
:10EAB000832F0E94CE91805D8093880A832F0E94CD
:10EAC000CE91892F805D8093890A40938A0A209194
:10EAD0000D0530910E0583E0293E380780F0C9010D
:10EAE00068EE73E00E94DA91CB01805D80938B0A1F
:10EAF000C90168EE73E00E94DA919C0102C0409364
:10EB00008B0A2536310580F0C90164E670E00E9469
:10EB1000DA91CB01805D80938C0AC90164E670E0D4
:10EB20000E94DA919C0103C080E280938C0AC901A3
:10EB30006AE070E00E94DA91CB01805D80938D0ADB
:10EB4000C9016AE070E00E94DA91805D80938E0ACC
:10EB50008DE680938F0A80E28093900A20910F05C2
:10EB6000253660F0822F64E60E94CE91805D80930E
:10EB7000910A822F0E94CE91292F02C08093910A80
:10EB8000822F6AE00E94CE91805D8093920A822F4C
:10EB90000E94CE91892F805D8093930A83E78093B2
:10EBA000940A80E28093950AAAC1A2E8BAE0E4E759
:10EBB000FCE094E184918D939150319697FFFACFC8
:10EBC0009EC18091030490910404A0910504B0912A
:10EBD0000604BC01CD0124E630E040E050E00E9494
:10EBE0002392DA01C9018C509E4F90935F0B809362
:10EBF0005E0B0E942F749093610B8093600B88E7EB
:10EC00008093620B80918E098093630B0E949D73A9
:10EC100080934B0B80918D0981FF02C084E407C073
:10EC200080918F09833011F480E201C081E28093EA
:10EC3000640B89E49BE090932905809328058091DB
:10EC40008D018093700B8091640B8093720B809187
:10EC500093099091940997FD0196959587958093D6
:10EC6000650B4DC10E943F73809103049091040491
:10EC7000A0910504B0910604BC01CD0124E630E06A
:10EC800040E050E00E942392DA01C9018C509E4F6F
:10EC90009093340A8093330A80911F019091200150
:10ECA00090932E0A80932D0A80911F01909120014C
:10ECB0009093300A80932F0A80912F099091300908
:10ECC00097FD01969595879580931F0A8093260A54
:10ECD000209193093091940937FF02C02F5F3F4F75
:10ECE000359527952093240A809191099091920956
:10ECF00064E170E00E94DA916093250A20932B0A68
:10ED000060932C0A0E942F7490933C0A80933B0AD4
:10ED100088E780933D0A80911F0190912001909394
:10ED2000380A8093370A809108058C5E8093310AF7
:10ED3000809109058C5E8093320A8091160A909129
:10ED4000170A6AE070E00E94DA9170933A0A6093C1
:10ED5000390A10921B0A8091120A9091130A90931B
:10ED6000360A8093350A89E19AE0909329058093C9
:10ED700028052091D8023091D902C9016CE370E0D6
:10ED80000E94DA916093400AC9016CE370E00E942E
:10ED9000DA918093410AB3C00E943F738091910938
:10EDA0009091920964E670E00E94DA9170935B0A98
:10EDB00060935A0A80912F099091300997FD01962E
:10EDC0009595879580934B0A80919309909194092A
:10EDD00097FD0196959587958093500A8091000143
:10EDE000482F55279A012B5F3F4F80911F0190912B
:10EDF00020012817390784F480911F019091200188
:10EE0000841B950B9C01220F331F280F391F822F63
:10EE100082518093570A02C01092570AE09003046F
:10EE2000F09004040091050410910604C801B70194
:10EE300024E630E040E050E00E9423923093590AEB
:10EE40002093580A37FF04C01092590A1092580AAA
:10EE5000C801B70124E630E040E050E00E94239270
:10EE6000DA01C9018C509E4F90935D0A80935C0A31
:10EE700080911F01909120019093520A8093510A32
:10EE800080911F01909120019093540A8093530A1E
:10EE90000E942F7490935F0A80935E0A88E78093A4
:10EEA000600A80911F01909120019093640A8093E1
:10EEB000630A809108058C5E8093550A809109054C
:10EEC0008C5E8093560A8091160A9091170A6AE028
:10EED00070E00E94DA917093660A6093650A10925E
:10EEE000470A8091120A9091130A9093620A8093C4
:10EEF000610A85E49AE090932905809328052CE225
:10EF000030E002C020E030E0C9011F910F91FF9076
:10EF1000EF900895EF92FF920F931F93CF93DF939B
:10EF200080910A0590910B059C0153E0220F331F3D
:10EF30005A95E1F7281B390B8091190390911A0318
:10EF4000280F391F37FF02C0295F3F4F43E0359537
:10EF500027954A95E1F730930B0520930A05909188
:10EF60001A05992309F020C380911905282F33270A
:10EF7000442755278F5F80931905F9012131310509
:10EF800008F00FC3E857FF4F0C9475928091D1039E
:10EF900085FF2AC080E00E94F08B80911F01909134
:10EFA00020016AE070E00E94EE919F938F93809120
:10EFB0001F01909120016AE070E00E94EE917F9322
:10EFC0006F9380EA9CE09F938F9383EE9BE89F93DF
:10EFD0008F93E0913D05F0913E0509952DB73EB721
:10EFE000285F3F4F2DBF28C080E00E94F08B8091AA
:10EFF0001F01909120016AE070E00E94EE919F93C2
:10F000008F9380911F01909120016AE070E00E942F
:10F01000EE917F936F938DEA9CE09F938F9382ECA8
:10F020009BE89F938F93E0913D05F0913E050995F4
:10F030008DB79EB708968DBF8091720980FF39C049
:10F04000809120048823E9F08AE00E94F08B80916F
:10F050003B0199279F938F9380910304909104041F
:10F06000A0910504B0910604BC01CD0124E630E076
:10F0700040E050E00E9423923F932F938AEB9CE064
:10F0800099C68AE00E94F08B809103049091040459
:10F09000A0910504B0910604BC01CD0124E630E046
:10F0A00040E050E00E9423923F932F9386EC9CE037
:10F0B000ADC78AE00E94F08B81ED9CE09F938F9317
:10F0C00082EC9BE80C9437818091D10385FF2AC0A4
:10F0D00085E10E94F08B8091D8029091D9026CE377
:10F0E00070E00E94DA919F938F938091D802909163
:10F0F000D9026CE370E00E94DA917F936F938BEDFD
:10F100009CE09F938F9383EE9BE89F938F93E09176
:10F110003D05F0913E0509952DB73EB7285F3F4F5D
:10F120002DBF28C085E10E94F08B8091D80290917C
:10F13000D9026CE370E00E94DA919F938F938091E3
:10F14000D8029091D9026CE370E00E94DA917F932B
:10F150006F9388EE9CE09F938F9382EC9BE89F9344
:10F160008F93E0913D05F0913E0509958DB79EB7CF
:10F1700008968DBF8FE10E94F08B80E690E09F9310
:10F180008F9380912F09909130099F938F9385EFF2
:10F190009CE09F938F93C2ECDBE8DF93CF93E091E9
:10F1A0003D05F0913E0509958091D0032DB73EB7FE
:10F1B000285F3F4F2DBF80FF06C089E20E94F08B81
:10F1C00080E09DE073C389E20E94F08B82E09DE0C5
:10F1D000B9C68091D10385FF1BC08AE20E94F08BE3
:10F1E0008091160A9091170A9F938F9384E09DE077
:10F1F0009F938F9383EE9BE89F938F93E0913D05C0
:10F20000F0913E0509958DB79EB706968DBF1BC040
:10F210008AE20E94F08B8091160A9091170A9F93C0
:10F220008F938CE09DE09F938F9382EC9BE89F935C
:10F230008F93E0913D05F0913E0509952DB73EB7BE
:10F240002A5F3F4F2DBF86E30E94F08B8091120A08
:10F250009091130A6AE070E00E94DA919F938F9375
:10F260008091120A9091130A6AE070E00E94DA918C
:10F270007F936F9384E19DE09F938F9382EC9BE853
:10F280009F938F93E0913D05F0913E0509958DB7D1
:10F290009EB70896C9C689E00E94F08B80E29DE087
:10F2A0009F938F9302EC1BE81F930F93E0913D0512
:10F2B000F0913E0509958EE10E94F08B0F900F9022
:10F2C0000F900F9082E29DE09F938F931F930F9377
:10F2D000E0913D05F0913E05099583E30E94F08B96
:10F2E0000F900F900F900F9084E29DE09F938F936B
:10F2F0001F930F93E0913D05F0913E0509958FE333
:10F300000E94F08B0F900F900F900F9086E29DE07F
:10F310009F938F931F930F93E0913D05F0913E05CE
:10F3200009958EE70E94F08B0F900F900F900F9031
:10F330008CE39DE09F938F931F930F939AC78091C7
:10F340009901882309F462C08DE50E94F08B82E563
:10F350009DE09F938F93C2ECDBE8DF93CF93E09126
:10F360003D05F0913E05099584E50E94F08B0F90D4
:10F370000F900F900F9080918E0999279F938F93F4
:10F3800084E59DE09F938F93DF93CF93E0913D05BC
:10F39000F0913E0509958EE50E94F08B2DB73EB7A2
:10F3A0002A5F3F4F2DBF80919109909192096AE0A9
:10F3B00070E00E94DA917F936F938DE59DE09F93BB
:10F3C0008F93DF93CF93E0913D05F0913E05099532
:10F3D0008DB79EB706968DBF80918F09833081F4DB
:10F3E00080918D0981FF06C08BE50E94F08B87E636
:10F3F0009DE0A8C58BE50E94F08B8AE69DE0A2C542
:10F400008BE50E94F08B8DE69DE02DC784E0D3C391
:10F4100080919901882309F47AC080911C0592ECAF
:10F42000E92E9BE8F92E882309F44BC089E60E9457
:10F43000F08B8091E30499279F938F9380E79DE061
:10F440009F938F93FF92EF92E0913D05F0913E05DF
:10F45000099585E70E94F08B2DB73EB72A5F3F4F95
:10F460002DBF80918D0199279F938F9300E610E027
:10F470001F930F9380919309909194099F938F9379
:10F480008BE79DE09F938F93FF92EF92E0913D0574
:10F49000F0913E05099582E70E94F08B8DB79EB7EB
:10F4A0000A968DBF8091E10499279F938F931F93B4
:10F4B0000F938091E20499279F938F9387E89DE0B3
:10F4C00073C689E60E94F08B80918D0199279F93E6
:10F4D0008F9380E690E09F938F9380919309909112
:10F4E00094099F938F938091900999279F938F936D
:10F4F00087E99DE09F938F93FF92EF92E0913D0506
:10F50000F0913E0509958DB79EB70C968DC585E0A7
:10F5100052C39091E4049923D1F08091250588236A
:10F5200081F0903270F487E00E94857383E90E9435
:10F53000F08B8091E40499279F938F9380EB9DE05B
:10F54000A4C383E90E94F08B8BEB9DE0B3C3809151
:10F55000D10302ECE02E0BE8F02E85FF06C084E913
:10F560000E94F08B81EC9DE0DAC383E90E94F08B6E
:10F5700084ED9DE0D4C38091AE0B863059F4809128
:10F580001C05882319F010921C059AC681E080930F
:10F590001C0596C6883009F093C60E94F58B81E061
:10F5A000DBC39093190594C6913009F0E0C38091B4
:10F5B0001905282F3327442755278F5F8093190576
:10F5C000F9012131310508F07EC6E756FF4F0C9452
:10F5D00075928091D10385FF43C080E00E94F08B3B
:10F5E0008091160A9091170A9F938F9380911F0123
:10F5F000909120016AE070E00E94EE919F938F93BA
:10F6000080911F01909120016AE070E00E94EE91CC
:10F610007F936F938091D8029091D9026CE370E050
:10F620000E94DA919F938F938091D8029091D90292
:10F630006CE370E00E94DA917F936F938AEE9DE015
:10F640009F938F9383EE9BE89F938F93E0913D056B
:10F65000F0913E0509952DB73EB7225F3F4FB1C5EA
:10F6600080E00E94F08B8091160A9091170A9F9378
:10F670008F9380911F01909120016AE070E00E94B9
:10F68000EE919F938F9380911F01909120016AE0EA
:10F6900070E00E94EE917F936F938091D8029091D9
:10F6A000D9026CE370E00E94DA919F938F9380916E
:10F6B000D8029091D9026CE370E00E94DA917F93B6
:10F6C0006F9385E09EE0C2C285E10E94F08B80E6E8
:10F6D00090E09F938F9380918A0190918B019F93EB
:10F6E0008F9380E29EE09F938F93C2ECDBE8DF93E1
:10F6F000CF93E0913D05F0913E0509958091720907
:10F700002DB73EB7285F3F4F2DBF80FF51C080917E
:10F710002004882339F18FE10E94F08B809103044B
:10F7200090910404A0910504B0910604BC01CD01A0
:10F7300024E630E040E050E00E9423923F932F9374
:10F740008AE29EE09F938F9382ED9BE89F938F9335
:10F75000E0913D05F0913E0509958DB79EB706965F
:10F760008DBF38C08FE10E94F08B8091030490918F
:10F770000404A0910504B0910604BC01CD0124E667
:10F7800030E040E050E00E9423923F932F9383E3C8
:10F790009EE09F938F93DF93CF93E0913D05F0918F
:10F7A0003E0509952DB73EB72A5F3F4F2DBF12C0CA
:10F7B0008FE10E94F08B8CE39EE09F938F93DF9309
:10F7C000CF93E0913D05F0913E0509950F900F9084
:10F7D0000F900F9089E20E94F08B80913B01992756
:10F7E0009F938F9386E49EE09F938F93DF93CF93B5
:10F7F00013C4809199018823F9F08BE20E94F08B69
:10F8000080918D0199279F938F9380919109909179
:10F8100092096AE070E00E94DA917F936F9380E62C
:10F8200090E09F938F9380919309909194099F9377
:10F830008F9389E49EE058C182E0BDC18FE30E94AE
:10F84000F08B8091140A9091150A9F938F93809169
:10F85000120A9091130A6AE070E00E94DA919F9375
:10F860008F938091120A9091130A6AE070E00E94CF
:10F87000DA917F936F9380E69EE09F938F93C2EC23
:10F88000DBE8DF93CF93E0913D05F0913E050995CC
:10F890008091D0032DB73EB7265F3F4F2DBF80FF2D
:10F8A0000AC082E50E94F08B84E79EE09F938F93CD
:10F8B00082ED9BE8DCC482E50E94F08B87E79EE046
:10F8C00041C38091990112ECE12E1BE8F12E8823AF
:10F8D00009F449C084E50E94F08B80918E09992734
:10F8E0009F938F938091900999279F938F938AE795
:10F8F0009EE09F938F93E701FF92EF92E0913D0589
:10F90000F0913E0509958DB79EB708968DBF809101
:10F910008F09833051F484E60E94F08B8DE89EE0DD
:10F920009F938F93FF92EF920BC084E60E94F08B1F
:10F9300083E99EE09F938F9383EE9BE89F938F9341
:10F94000E0913D05F0913E0509950F900F900F90C5
:10F950000F9080918D0981FFBBC484E60E94F08BDB
:10F9600089E99EE0EFC284E50E94F08B8FE99EE07A
:10F97000D6C180911B05C2ECEC2ECBE8FC2E88236F
:10F9800009F450C089E60E94F08B809175086AE006
:10F990000E94CE91892F99279F938F93809175080C
:10F9A0000E94CE9199279F938F9380916D080E941A
:10F9B000CE91892F99279F938F9380916D080E94F4
:10F9C000CE9199279F938F93809165080E94CE9145
:10F9D000892F99279F938F93809165080E94CE91DC
:10F9E00099279F938F9380915D080E94CE91892FD4
:10F9F00099279F938F9380915D080E94CE919927BC
:10FA00009F938F9385EB9EE09F938F93FF92EF924E
:10FA1000E0913D05F0913E0509952DB73EB72C5E6E
:10FA20003F4FCFC389E60E94F08B80E690E09F9322
:10FA30008F9380917708992787FD90959F938F9357
:10FA400080916F08992787FD90959F938F93809160
:10FA50006708992787FD90959F938F9380915F0802
:10FA6000992787FD90959F938F9382ED9EE09F93BA
:10FA70008F93FF92EF92E0913D05F0913E0509953D
:10FA80008DB79EB70E96D0C280911B0590918407CA
:10FA9000882309F48DC0943009F48CC09630A1F508
:10FAA0008EE70E94F08B809185086AE00E94CE91DB
:10FAB000892F99279F938F93809185080E94CE91DB
:10FAC00099279F938F9380917D080E94CE91892FD3
:10FAD00099279F938F9380917D080E94CE919927BB
:10FAE0009F938F9385EE9EE09F938F9382EC9BE88C
:10FAF0009F938F93E0913D05F0913E0509952DB7B9
:10FB00003EB7245F3F4F5DC3973008F4E1C38EE7F3
:10FB10000E94F08B809195086AE00E94CE91892F17
:10FB200099279F938F93809195080E94CE91992752
:10FB30009F938F9380918D080E94CE91892F992752
:10FB40009F938F9380918D080E94CE9199279F93C8
:10FB50008F93809185080E94CE91892F99279F933A
:10FB60008F93809185080E94CE9199279F938F93C0
:10FB700080917D080E94CE91892F99279F938F9322
:10FB800080917D080E94CE9199279F938F9384EF57
:10FB90009EE09F938F9382EC9BE89F938F93E091DD
:10FBA0003D05F0913E0509958DB79EB744963CC240
:10FBB000943021F486E00E9485738AC39630F1F474
:10FBC0008EE70E94F08B80E690E09F938F93809168
:10FBD0008708992787FD90959F938F9380917F0841
:10FBE000992787FD90959F938F9381E19FE09F9345
:10FBF0008F9382EC9BE89F938F93DAC2973008F43F
:10FC000067C38EE70E94F08B80E690E09F938F930E
:10FC100080919708992787FD90959F938F93809166
:10FC20008F08992787FD90959F938F9380918708E0
:10FC3000992787FD90959F938F9380917F089927AF
:10FC400087FD90959F938F9384E29FE09F938F937E
:10FC500082EC9BE89F938F930ECF9091E4049923BD
:10FC600009F44AC0809125058823F9F09032E8F420
:10FC700087E00E94857383E90E94F08B8091E40401
:10FC800099279F938F9387E39FE09F938F9382EDB4
:10FC90009BE89F938F93E0913D05F0913E05099578
:10FCA0002DB73EB72A5F3F4F8CC283E90E94F08B8D
:10FCB00082E49FE09F938F9302EC1BE81F930F93C6
:10FCC000E0913D05F0913E0509951F921F9290919C
:10FCD000E40481E1989FC0011124825C954F9F93B9
:10FCE0008F931F930F93E0913D05F0913E05099589
:10FCF0008DB79EB70A9698C18091D103B2ECEB2ED6
:10FD0000BBE8FB2E85FF06C084E90E94F08B88E4E7
:10FD10009FE005C083E90E94F08B8BE59FE09F93F5
:10FD20008F93FF92EF92A5C28091AE0B863079F44B
:10FD300080911B05882319F010921B0503C081E0F8
:10FD400080931B0585E00E94857386E0AEC28830F3
:10FD500031F40E94F58B82E080931A05AFC28130A6
:10FD600009F0AEC20E94F58B10921A05A7C292301C
:10FD700009F0ACC280911905282F33274427552755
:10FD80008F5F80931905F9012131310508F09BC27D
:10FD9000E655FF4F0C94759280E00E94F08B85EF42
:10FDA00097E09F938F930E94633099279F938F933F
:10FDB00081E79FE09F938F9382ED9BE89F938F93C2
:10FDC000E0913D05F0913E0509952DB73EB7285FBE
:10FDD0003F4FF7C185E10E94F08B83E098E09F934D
:10FDE0008F93809100016AE00E94CE91892F99271C
:10FDF0009F938F93809100010E94CE9199279F93AA
:10FE00008F9380E89FE09F938F9382EC9BE89F9372
:10FE10008F93E0913D05F0913E05099569CF8AE207
:10FE20000E94F08B81E99FE09F938F93C2ECDBE807
:10FE3000DF93CF93E0913D05F0913E0509958091C8
:10FE400072090F900F900F900F9080FF41C080912A
:10FE500092079091750181FD0BC0892F99279F937F
:10FE60008F9386E99FE09F938F93DF93CF9313CF78
:10FE7000E0913D05F0913E05933318F080EA9FE054
:10FE800002C087EA9FE09F938F93DF93CF930995FA
:10FE90000F900F900F900F9080915609E0913D05C3
:10FEA000F0913E059091750180FF0BC0892F992735
:10FEB0009F938F938EEA9FE09F938F93DF93CF93CF
:10FEC000AFC0892F99279F938F9384EB9FE0CFC07A
:10FED0008AEB9FE037C08FE30E94F08B83EC9FE0BA
:10FEE0009F938F93C2ECDBE8DF93CF93E0913D05C6
:10FEF000F0913E0509950F900F900F900F90809113
:10FF0000E807882319F487EC9FE01CC08091DE038A
:10FF1000E0913D05F0913E05882319F080ED9FE0CA
:10FF200002C087ED9FE09F938F93DF93CF93099556
:10FF30000F900F900F900F908091F30786FFC8C12C
:10FF40008EED9FE09F938F93DF93CF9392C184E5D3
:10FF50000E94F08B85EE9FE09F938F93C2ECDBE8CD
:10FF6000DF93CF93E0913D05F0913E050995809197
:10FF700072090F900F900F900F9085FD03C08AEECD
:10FF80009FE011C08091D607883F10F4E82F07C08A
:10FF9000EFEFF0E0E81BF109E65FFB4FE081E233B1
:10FFA00058F483EF9FE09F938F93DF93CF93E0917B
:10FFB0003D05F0913E0516C0E43B18F08AEF9FE046
:10FFC000F2CF8091F307E0913D05F0913E0585FF6A
:10FFD00003C081E090E102C088E090E19F938F939D
:10FFE000DF93CF9309950F900F900F900F90809112
:10FFF000EC07882309F46CC18EE50E94F08B809198
:020000021000EC
:10000000EC0799279F938F938FE090E19F938F93B5
:1000100082EC9BE89F938F93E0913D05F0913E0524
:1000200009958DB79EB706968DBF52C189E60E948D
:10003000F08B8AE190E19F938F93C2ECDBE8DF9332
:10004000CF93E0913D05F0913E0509950F900F90FB
:100050000F900F908091EB07E0913D05F0913E05E8
:10006000882351F099279F938F9384E290E19F9387
:100070008F93DF93CF9313CE88E290E19F938F937A
:10008000DF93CF93FAC080911D05A2ECEA2EABE876
:10009000FA2E882309F053C08EE70E94F08B8091DE
:1000A000690199279F938F9380918707E82FFF27F6
:1000B000EE0FFF1FE754F74F808191819F938F933D
:1000C00080918607E82FFF27EE0FFF1FE754F74FB9
:1000D000808191819F938F938EE290E19F938F9384
:1000E000FF92EF92E0913D05F0913E05099583E97D
:1000F0000E94F08B8DB79EB70A968DBF80918907BD
:10010000E82FFF27EE0FFF1FE754F74F8081918103
:100110009F938F9380918807E82FFF27EE0FFF1F93
:10012000E754F74F8081918181589F4F9F938F9320
:1001300082E490E19F938F93FF92EF9241CE8EE7FE
:100140000E94F08B80910C0499279F938F9380914C
:100150000B0499279F938F9380910A0499279F936B
:100160008F9381E590E19F938F93FF92EF92E091BF
:100170003D05F0913E05099583E90E94F08B8DB70E
:100180009EB70A968DBF80910F0499279F938F93F6
:1001900080910E0499279F938F9380910D04992746
:1001A0009F938F9385E690E19F938F93FF92EF92B9
:1001B000E0913D05F0913E0509952DB73EB7265FCC
:1001C0003F4F2DBF85C080912505882309F480C04D
:1001D0008EE70E94F08B8091720986FD11C089E73D
:1001E00090E19F938F9383EE9BE89F938F93E09191
:1001F0003D05F0913E0509950F900F900F900F90DF
:100200008091F10799278F709070892B89F088E889
:1002100090E19F938F9383EE9BE89F938F93E09160
:100220003D05F0913E0509950F900F900F900F90AE
:100230008091720982FF11C082E990E19F938F93B0
:1002400083EE9BE89F938F93E0913D05F0913E05EF
:1002500009950F900F900F900F908091720983FD78
:1002600037C087E990E19F938F9383EE9BE89F933C
:100270008F93E0913D05F0913E0509950F900F9009
:100280000F900F9025C00091AE0B063089F480913D
:100290001D05882319F010921D0503C081E080938D
:1002A0001D0586E00E94857387E00E94857308C063
:1002B000013031F40E94F58B00931A051092190554
:1002C0001092AE0B05C01092190502C010921A05CB
:1002D000E6E0CDB7DEB70C9466924FB728E130E088
:1002E000F8948091C9008F778093C9008091C900EC
:1002F0008F7B8093C9008091C9008F7D8093C90056
:100300005A9A52985B9A539A832F99278093CD00DB
:100310002093CC008091C80082608093C80080E167
:100320008093C9008091CA008F778093CA00809122
:10033000CA008F7B8093CA008091CA008091CA0056
:100340008F7E8093CA008091CA0088608093CA0023
:100350008091C9008B7F8093C9008091CA0084601E
:100360008093CA008091CA0082608093CA00809105
:10037000C80087FF03C08091CE00F9CF8091C900EB
:1003800080688093C90080918C0B846080938C0B73
:100390004FBF08959091F804992341F48F3031F4C0
:1003A00090931F0580E58093F8040895E0911F0560
:1003B000EF5FE0931F05E83121F481E080931E0593
:1003C0000895E93120F089E180931F050895FF2702
:1003D000EB58F44F80830895A0E0B0E0E2EFF1E83D
:1003E0000C94469291E0D92E82E0A82EBD2CE12CEF
:1003F00001E0F02E80918C0B82FDB5C080916F00E2
:100400008F7D80936F00E091EE07EE2351F0FF2780
:10041000EE0FFF1FE754F74F8081918184369105DD
:100420005CF480910904883C20F4809109048C5E7E
:1004300001C088EC809309048091760B682F7727A0
:10044000809120058150809320058F3F31F41CE777
:10045000C12E82E08093200502C0C4E2CC2E40E091
:100460004C1508F07EC0EA2DFF27EB58F44F808131
:100470008D2111F06E297F298D2D9927880F991FC5
:10048000D82E882319F4B1E0DB2EAD0CEE0CFF1C46
:1004900020E0E21628E0F20609F061C0A1E0EA2EB1
:1004A000F12CCB018050944065E070E00E94EE9109
:1004B000AB2DBB27FD01EA0FFB1FE754F74F8081EF
:1004C00091819C01220F331F280F391F260F371FE0
:1004D00037FF02C02D5F3F4FE901D595C795D595F0
:1004E000C795CB0101968C179D0714F4219706C080
:1004F00061507040C617D7070CF42196809109040B
:10050000833CD8F08D010A0F1B1FF801E754F74F09
:1005100080819181FE01E81BF90BCF0163E070E05F
:100520000E94EE91CB01880F991F860F971F0351F0
:10053000174FF8019183808307C0AA0FBB1FA351F7
:10054000B74F11961C921E92EB2DFF27EE0FFF1F47
:10055000E754F74FD183C08360E070E0B3944F5FFE
:100560007FCF10923A0110921E05EAE0CDB7DEB7B8
:100570000C9462920895089540E050E08091210526
:10058000909122059C01220F331F280F391F809163
:10059000190390911A03280F391F37FF02C02D5FEE
:1005A0003F4F359527953595279530932205209314
:1005B000210580913B018B32D9F480919707282F38
:1005C00033278091FD039091FE03829FA001839FBA
:1005D000500D929F500D1124CA0157FD4F96AC014A
:1005E00025E0559547952A95E1F74B5F5F4F3DC054
:1005F0008D32D9F480919707282F33278091FD03FE
:100600009091FE03829FA001839F500D929F500DF9
:100610001124CA0157FD4F96AC0195E055954795B9
:100620009A95E1F74550504020C0803271F4809196
:10063000D10381FF1AC0C90137FD4F96AC0185E097
:10064000559547958A95E1F710C08E3529F480912C
:10065000F803482F552709C0863739F48091F803ED
:10066000992744275527481B590BCA01AA2797FDEC
:10067000A095BA2F8093920290939302A093940234
:10068000B093950208950F931F930E943F7380913A
:100690001F0190912001AA2797FDA095BA2F809362
:1006A000C1019093C201A093C301B093C401809192
:1006B000120A9091130AAA27BB278093D401909322
:1006C000D501A093D601B093D7010AE010E0809144
:1006D000160A9091170AB8010E94DA91CB01AA2755
:1006E000BB278093E7019093E801A093E901B093C1
:1006F000EA018091030490910404A0910504B09153
:100700000604BC01CD0124E630E040E050E00E9448
:1007100023922093FA013093FB014093FC01509304
:10072000FD0180918A0190918B01AA2797FDA095E8
:10073000BA2F80930D0290930E02A0930F02B093F4
:10074000100280918E099927AA27BB278093200247
:1007500090932102A0932202B093230280919009EA
:100760009927AA27BB278093330290933402A09342
:100770003502B09336028091910990919209B801A7
:100780000E94DA91CB01AA27BB278093460290935F
:100790004702A0934802B093490280919309909137
:1007A0009409AA2797FDA095BA2F80935902909398
:1007B0005A02A0935B02B0935C02809109059927CD
:1007C000AA27BB2780936C0290936D02A0936E02C0
:1007D000B0936F028091E3049927AA27BB278093E7
:1007E0007F0290938002A0938102B0938202809155
:1007F000E4049927AA27BB278093A5029093A60219
:10080000A093A702B093A8021F910F91089500240E
:1008100022273327442751E0BB27EE27FF27A0E1FB
:10082000660F771F881F991F001C221F331F441F4C
:10083000660F771F881F991F001C221F331F441F3C
:100840002AF4050E2B1F3E1F4F1F04C0051A2B0B49
:100850003E0B4F0B550FBB1FEE1F587F556047FDDA
:100860005250AA95E9F6E695B7955795E695B7954E
:100870005795852F9B2F08952227332741E0552731
:1008800068E0880F991F221F331F880F991F221FAE
:10089000331F1AF4240F351F02C0241B350B440FDD
:1008A000551F487F456037FD42506A9551F7569570
:1008B000479556954795842F0895AA2797FF04C01A
:1008C000809590958A1F9A1F77FF04C06095709558
:1008D0006A1F7A1F669F9001779FA001679F300D66
:1008E000411D5A1F300D411D5A1F889FF001999FCD
:1008F0002E0F3F1F401D511D899F300D411D5A1F56
:10090000300D411D5A1FCA01B901112480CF4FB7C4
:1009100020E430E0F8948091C9008F778093C9007B
:100920008091C9008F7B8093C9008091C9008F7D21
:100930008093C9005A9A52985B9A539A832F9927A9
:100940008093CD002093CC008091C800826080937A
:10095000C80088E18093C9008091CA008F77809396
:10096000CA008091CA008F7B8093CA008091CA0020
:100970008F7D8093CA008091CA008F7E8093CA00C9
:100980008091CA00877F8093CA008091C9008B7FC5
:100990008093C9008091CA0084608093CA008091CE
:1009A000CA0082608093CA008091C80087FF03C09C
:1009B0008091CE00F9CF8091C90080688093C900F2
:1009C0004FBF08950F931F93CF93DF93482F4F5F2F
:1009D000893108F08BC08091B808841720F44F5FEC
:1009E0004093B8084150CB0183539B4268E170E0CB
:1009F0000E94EE91A42FBB27FD01EA0FFB1FE754D5
:100A0000F74F808191819B01281B390BC90137FF6A
:100A100003C0909581959F4F069794F480910904A7
:100A2000883C30F480910904865F8093090408C0F3
:100A300088EC8093090480916F008F7D80936F0014
:100A4000FD01EA0FFB1FE754F74F808191819C0164
:100A5000220F331F280F391F260F371F37FF02C001
:100A60002D5F3F4FE901D595C795D595C795CB012A
:100A700001968C179D0714F4219706C061507040B1
:100A8000C617D7070CF4219680910904843BD8F04F
:100A90008D010A0F1B1FF801E754F74F80819181E8
:100AA000FE01E81BF90BCF0163E070E00E94EE91BC
:100AB000CB01880F991F860F971F0351174FF8011D
:100AC0009183808307C0AA0FBB1FA351B74F119614
:100AD0001C921E92E42FFF27EE0FFF1FE754F74FE3
:100AE000D183C083443011F410923A01DF91CF9149
:100AF0001F910F910895CF93DF932091AF0B822F19
:100B00009927807F9070409709F06CC02F3109F0D1
:100B100046C08091B00B80932C052091B20B20939E
:100B20002E058091B30B80932D05822F99279093EA
:100B3000BA088093B908222309F054C0809186072F
:100B4000282F3327220F331FF901E351F74F11826A
:100B5000108280918707A82FBB27AA0FBB1FFD011A
:100B6000E351F74F1182108280918907E82FFF2708
:100B7000EE0FFF1FCF018351974FEC0119821882AE
:100B80002754374FE90119821882A754B74F11969D
:100B90001C921E92E754F74F1182108223C0C22F7D
:100BA000CF70CA30F8F48091B00B8093DB0B80914A
:100BB000B10B8093DA0B8091B20B8093DD0B8091A7
:100BC000B30B8093DC0B6091DA0B7091DB0B8C2FF5
:100BD0000E94E2846091DC0B7091DD0B8C2F8F5FA3
:100BE0000E94E284DF91CF910895CF93C82F8F3F69
:100BF00049F480912F058F3F29F41092310510920E
:100C0000300532C020913105222339F4CF3111F45F
:100C100085E001C084E08093320580913205909197
:100C200030058217A0F4892F8095809330058F3F7F
:100C300019F48EEF8093300580913005C81711F4B8
:100C40000E947B8510923105109230050BC0E22F77
:100C5000FF27E155F44FC0832F5F209331059C0F90
:100C600090933005C0932F05CF91089590912B0557
:100C7000933240F4E92FFF27E954F44F80839F5FBC
:100C800090932B050895833218F48D5F80932B0584
:100C9000089590E2EAEBFBE08FE19193815087FFAA
:100CA000FCCF0895CF93CFB723E031E0F894809143
:100CB000C9008F778093C9008091C9008F7B809392
:100CC000C9008091C9008F7D8093C9005A9A5298BB
:100CD0005B9A539A832F99278093CD002093CC0061
:100CE0008091C80082608093C80088E18093C90029
:100CF0008091CA008F778093CA008091CA008F7B51
:100D00008093CA008091CA0080628093CA0080915B
:100D1000CA0080618093CA008091CA008860809375
:100D2000CA008091C90084608093C9008091CA0084
:100D300084608093CA008091CA0082608093CA0058
:100D40008091C80087FF03C08091CE00F9CF8091C9
:100D5000C90080688093C9008091C9008064809335
:100D6000C9000E944986CFBFCF910895282F9927A7
:100D70008F709070892B31F4209580912A05822BF9
:100D800080932A0508951F920F920FB60F92112497
:100D90008F93EF93FF938091D202882309F068C06C
:100DA000E0913405EE2389F480913305882369F4BA
:100DB0008091B70B882321F081E08093350505C031
:100DC0008091C90081608093C90080913505882396
:100DD00079F4EF5FE093340580918E0B8E1720F449
:100DE00081E0809335051CC0FF27E257F44F3CC0DB
:100DF00080913305882361F48091B70B882311F427
:100E000083E003C0813999F481E0809333050FC0FA
:100E1000833099F48091B70B882349F01092B70B77
:100E20008091C9008E7F8093C9008EEF1EC0809193
:100E3000C90081608093C9000EC0833261F4809143
:100E4000C9008E7F8093C9008FEF8093CE0081E030
:100E50008093D20218C080913305E82FFF27E95410
:100E6000F44F8F5F8093330580818093CE000BC059
:100E70001092330510923405109235058091C90007
:100E800080618093C900FF91EF918F910F900FBE09
:100E90000F901F901895682727E0322F67FF06C034
:100EA000862F9927880F991F832702C0862F880FC6
:100EB000682F215027FFF2CF992708950F931F9392
:100EC000CF93DF93062F60E0162F601740F4EC01FC
:100ED00089910E944B87682F1F5F1017C8F3862FD8
:100EE0009927DF91CF911F910F910895DC0190E038
:100EF000961758F48C91803241F09F5F961728F432
:100F0000FD01E90FF11D8081F6CF892F9927089502
:100F1000A0E0B0E0EEE8F7E80C9447928FE9809308
:100F20008F0B80E18093910B84EA8093920B85E58F
:100F30008093930B8DE58093940B1092950B809189
:100F40003705882309F06AC08091360513E1819F37
:100F5000C001112463E086559E4F0E947687082FBA
:100F600080913605819FC00111246AE080569E4F12
:100F70000E947687982F800F865F80938E0B4EEFAE
:100F8000B42EB80EB092900B209136052093960B9C
:100F9000E92EFF24C70133E0880F991F3A95E1F746
:100FA000802B8093970B822F992723E1C22ED12C7F
:100FB0008C9D90018D9D300D9C9D300D1124C9019B
:100FC00080569E4FA701BC0188E99BE00E940F90CC
:100FD00011278091360599278C9DE0018D9DD00DBC
:100FE0009C9DD00D1124CE0186559E4FA801BC01B9
:100FF000C7018856944F0E940F900257144F0E0D50
:101000001F1D6B2D80E99BE00E945E87F80182879F
:10101000809137058F5F8093370570C01091950BD5
:101020000E9443834091D3024031C8F563E170E0F0
:10103000812F9927DC01AA0FBB1FA80FB91FA25748
:10104000B44F842F9927869FF001879FF00D969FBC
:10105000F00D1124E056FE4F2585C4E0880F991F3E
:10106000CA95E1F7282BED012887268537853F793A
:1010700082899927982F88279295990F907E282BFF
:10108000392B2987832F99278A87842F8F5F1F5FAA
:10109000163018F4482F803158F28093D30283E041
:1010A000189F90011124822F885F80938E0B825CA1
:1010B0008093900B812F99278C01000F111F080F2F
:1010C000191F0257144F822F8A5F682F80E99BE017
:1010D0000E945E87F80180878091D302803170F092
:1010E00081E08093D30210923705809136058F5F9F
:1010F00080933605803110F010923605E9E0CDB7C7
:10110000DEB70C9463928091D202882309F447C021
:101110008091D10385FD04C08091D602882381F09F
:1011200082E98093B70B83E28093B80B8091D6025B
:10113000882309F485E58093B90B1092D60202C08A
:101140008093B70B8091D4028F3071F480912A057F
:101150000E946872882341F081E98093B70B8093E5
:10116000B80B81E38093B90B1092D2028091C80032
:1011700085FFFCCF8091C9008F7E8093C90080914C
:10118000C9008E7F8093C9000E9488878EE7809374
:10119000CE0080912A058093D40210922A050895EA
:1011A000EF92FF920F931F93CF93DF937C018B01FC
:1011B000EA01452B39F0F80181918F01F70109957A
:1011C0002197C9F7E6E0CDB7DEB70C946692EF92AF
:1011D000FF920F931F93CF93DF937C018B01EA0162
:1011E000452B41F0F8010F5F1F4F8491F7010995DE
:1011F0002197C1F7E6E0CDB7DEB70C9466920F9366
:101200001F93CF938C01C62F161634F480E2F80199
:101210000995C1501C16D4F3CF911F910F910895D9
:101220000F931F93CF938C01C62F161634F480E3CF
:10123000F8010995C1501C16D4F3CF911F910F915D
:101240000895A5E3B0E0E7E2F9E80C943E922E960B
:10125000EEADFFAD2E97882499245401809124058A
:10126000882321F42C961FAE1EAE2C97AEE44A2E96
:10127000512C4C0E5D1E6F01B60105C0153239F0C0
:101280000894C11CD11CF60114911123B9F7A601D1
:10129000461B570B31F02C968EAD9FAD2C970E94BC
:1012A000E788112309F46AC20894C11CD11CFF24E9
:1012B000FDA6FCA6FFEFEF2EF9A6F6010894C11CCF
:1012C000D11C1491153721F0812F80628837B1F439
:1012D000F0FE0AC0F20124E030E0420E531E80808E
:1012E0009180A280B3800AC0F20142E050E0440E37
:1012F000551E808191814C01AA24BB24103221F417
:1013000089A58823D1F61DC0133219F458E0F52AB7
:10131000D4CF1A3211F01D3291F41A3259F4F2017D
:1013200082E090E0480E591EE081ECA7EE232CF6F7
:10133000E195ECA790E1F92AAFEDFA22BECF1B327E
:1013400011F419A7BACF1E32C1F5F6010894C11CD9
:10135000D11C14911A3279F4F20122E030E0420EED
:10136000531E408151813FEF4F3F530714F44FEF1D
:101370005FEFE42EA2CF40E050E0812F80538A300F
:10138000A0F4CA01E3E0880F991FEA95E1F7840F02
:10139000951F480F591F410F511D40535040F601F2
:1013A0000894C11CD11C1491E8CF8FEF4F3F580710
:1013B00014F44FEF5FEFE42E85CF103329F4F4FCE3
:1013C0007CCF90E2F92A79CF812F81538930D8F4EC
:1013D00040E050E0CA0173E0880F991F7A95E1F769
:1013E000840F951F480F591F410F511D4053504006
:1013F000F6010894C11CD11C1491812F80538A30AE
:1014000048F34CA75FCF183619F4A4E0FA2A55CF59
:101410001C3619F4B1E0FB2A50CF133661F43E01BB
:101420000894611C711CF20122E030E0420E531E50
:10143000808189833CC1143421F0143611F01936AF
:1014400051F5143411F431E0F32AF0FE0AC0F20130
:1014500044E050E0440E551E80809180A280B3800D
:101460000CC0F20182E090E0480E591E808191810B
:101470004C01AA2497FCA094BA2CB7FE0AC0B094E1
:10148000A09490948094811C911CA11CB11C8DE2AD
:1014900089A70AE06FC01F3411F01F3631F41F34E2
:1014A00011F491E0F92A08E064C0103779F4F201F0
:1014B000A2E0B0E04A0E5B1E808191814C01AA241B
:1014C000BB2400E1B0E4FB2A18E753C01337C1F591
:1014D000F20122E030E0420E531E60807180611400
:1014E000710489F43E010894611C711C88E28983AF
:1014F0008EE6F301818385E78B838CE68C838D8375
:1015000089E28E831F82E7FC13C08E2D992787FD09
:101510009095AC0160E070E0C3010E9402900097DA
:1015200029F0382E3618E3140CF0C3C03E2CC1C08D
:10153000F30101900020E9F731973E2E3618B9C02B
:10154000153511F0153731F4153511F4F1E0FF2A96
:101550000AE00FC0183519F0183709F0A0C000E1F3
:10156000F3FE07C081149104A104B10411F020E43A
:10157000F22A19A6EDA6E7FC02C03FEDF32269E2CC
:10158000662E712C6C0E7D1E81149104A104B10491
:1015900021F44DA5442309F47BC0802F9927AA2765
:1015A000BB278EA79FA7A8ABB9AB202E332490E012
:1015B000891690E0990691E0A90690E0B90648F0F6
:1015C000C501B4012EA53FA548A959A90E940192C1
:1015D00017C0AFEF8A169104A104B10449F040F09E
:1015E000C401B1010E94DA919B014427552708C02C
:1015F000882D602F0E94CE91282F3327442755270E
:101600002AAB3BAB4CAB5DAB0A3059F48AA9880FCF
:10161000880F880F9AA9990F890F382D381B832FAF
:1016200010C0003139F48AA98295807F482D481B6B
:10163000842F07C08AA9880F880F880F582D581B40
:10164000852F90E02EA53FA548A959A9821693069B
:10165000A406B50608F091E08AA89BA8ACA8BDA88E
:101660008A3010F4805D04C0895A183509F48F7DE2
:10167000D3018E933D01992309F099CF083041F4AD
:10168000F3FE06C0803321F080E3FD0182933F0129
:10169000CE010196382E3618F8E23F0E0BC011230A
:1016A00009F46CC03E010894611C711C198351E05F
:1016B000352E19A6032D2DA4231827FC222489A535
:1016C000882311F00F5F02C0F6FC0E5F020DEF2CB5
:1016D000FF24C70180739070892B49F48CA5801B6F
:1016E000682F2C968EAD9FAD2C970E94FF8889A500
:1016F000882331F041E050E0BE01675D7F4F0AC0B2
:10170000E6FE0EC080E38AA71BA742E050E0BE01C0
:10171000665D7F4F2C968EAD9FAD2C970E94D08832
:10172000C70180739070809749F48CA5801B682F47
:101730002C968EAD9FAD2C970E941089622D2C9611
:101740008EAD9FAD2C970E941089832D992787FD20
:101750009095AC01B3012C968EAD9FAD2C970E9455
:10176000D088E4FE89CD2CA5201B2CA7622F2C96B7
:101770008EAD9FAD2C970E94FF887ECDE2E1CB5CC1
:101780000C945A92982F8091B60B883A50F480911D
:10179000B60BE82FFF27E356F54F93838F5F8093B7
:1017A000B60B0895982F8091B60B883A58F4809123
:1017B000B60BE82FFF27E356F54F906893838F5FB2
:1017C0008093B60B0895982F80912505882321F0EA
:1017D000892F0E94D28B0895892F0E94C28B089571
:1017E000883A10F48093B60B089580E090E2E0EA26
:1017F000FAE091938F5F883AE0F308954FB721E8BC
:1018000030E0F8948091C9008F778093C90080916F
:10181000C9008F7B8093C9008091C9008F7D809320
:10182000C9005A9A52985B9A539A832F99278093AA
:10183000CD002093CC008091C80082608093C800C6
:1018400088E18093C9008091CA008F778093CA0095
:101850008091CA008F7B8093CA008091CA008F7DDF
:101860008093CA008091CA008F7E8093CA008091C5
:10187000CA00877F8093CA008091C90084608093EA
:10188000C9008091CA0084608093CA008091CA0018
:1018900082608093CA008091C90081608093C900F2
:1018A0008091C80087FF03C08091CE00F9CF80915E
:1018B000C90080688093C9004FBF3CE73093190A84
:1018C0002DE72093440A8EE880931A0A1092360A74
:1018D0001092350A10921F0A80EE80931C0A3093F2
:1018E000710A20939C0A10927D0A10927C0A109231
:1018F0007F0A10927E0A1092810A1092800A84EF69
:1019000091E090937B0A80937A0A9093790A80936E
:10191000780A9093770A8093760A1092730A89E87E
:101920008093720A10929A0A10929B0A80E980931F
:10193000740A3093490B2093740B10924B0B8AE876
:1019400080934A0B1092510B1092500B10924F0B38
:101950001092530B1092540B1092550B1092560B81
:101960001092580B1092590B10925A0B10925B0B5D
:1019700010925F0B10925E0B10925D0B10925C0B3D
:1019800080EA80934C0B3093450A2093700A1092A2
:10199000470A8DE88093460A10926F0A80ED809383
:1019A000480A8BE780939D0A80E880939E0A1092F4
:1019B0009F0A80911F0A90E2E0EAFAE091938F5F1C
:1019C000883AE0F38DE78093480B0895CF93C82FB2
:1019D00080913805803879F48C2F0E94947480931C
:1019E000270580912705882331F1C093B50B80919D
:1019F00027058F5F16C08F37F1F48091AE0B8823D7
:101A000029F48C2F80958F708093AE0B0E949D736C
:101A100080939F0A8DE99AE0909329058093280589
:101A20008DEA809327058091C9008F7E8093C9003D
:101A300082E080932605C0933805CF9108953091B8
:101A40002605332331F080912605815080932605A9
:101A5000089580912705882381F140912705909171
:101A60003905413091F4292F309339058091C9000F
:101A700080618093C90080912505882319F03093F7
:101A8000250510C0409325050DC0E0912805F09173
:101A900029058191F0932905E0932805282F980FB7
:101AA000909339058091C80085FFFCCF2093CE002C
:101AB0008091270581508093270508952FB740E036
:101AC000F894E0E0F0E081E2809357009491E2E046
:101AD000F0E0809357003491E4E0F0E08093570009
:101AE00084912FBF9E3199F4363941F4893011F435
:101AF00041E00DC08A3059F442E009C0373939F469
:101B0000863011F443E003C0853009F444E0842FAB
:101B1000992708959FB7F8948091C900877F809393
:101B2000C9008091C9008F7E8093C9008091C9004F
:101B30008F778093C9008091C9008F7B8093C90003
:101B40008091C9008F7D8093C90052985A9A53980A
:101B50005B9A9FBF08951F93CF93DF93182F8091B7
:101B60002405882309F4A7C08091D102181709F42D
:101B7000A2C080912305882321F40E945E8D80936A
:101B8000230582ED91E0909339018093380189E734
:101B900091E19F938F93C0E6D5E1DF93CF93E091DE
:101BA0003D05F0913E0509950F900F900F900F9015
:101BB000812F9927AA27BB27FC01099778F5E554BF
:101BC000FF4F20913D0530913E050C94759285E7BD
:101BD00091E102C08CE691E19F938F93DF93CF93C5
:101BE000F901099527C087E691E1F6CF8FE591E1EC
:101BF000F3CF87E591E19F938F93DF93CF93F90123
:101C0000099588ED91E0909339018093380112C0D5
:101C100082E591E1E1CF86E891E1DECF8CE891E1C8
:101C20009F938F93DF93CF93E0913D05F0913E0515
:101C3000099510E00F900F900F900F908091230561
:101C4000843011F0823011F50E948A8D812F8150ED
:101C5000833018F40E94936F2CC0143019F40E9442
:101C6000528627C0183019F40E94BA8222C015305B
:101C700019F40E9487841DC0163019F40E94FE8B4F
:101C800018C01730B1F40E946D8113C0112389F080
:101C900082EA91E19F938F9380E695E19F938F93E2
:101CA000E0913D05F0913E0509950F900F900F9042
:101CB0000F901093D102DF91CF911F9108950F9350
:101CC0001F9381E0809324054091D002E2E0F1E18E
:101CD00020E030E05FE4849199272F5F3F4F829F9F
:101CE000B001839F700D929F700D112446275150B3
:101CF000319657FFF0CF4093D002EAEDF0E120E0BB
:101D000030E057E2849199272F5F3F4F829FB001C7
:101D1000839F700D929F700D11244627515031966C
:101D200057FFF0CF4093D00280912305882321F400
:101D30000E945E8D809323058091D002833459F0F8
:101D400088E190E029E20FB6F894A89580936000AE
:101D50000FBE2093600081E299E890933E05809346
:101D60003D050E944A0985E690E09F938F938AE59E
:101D700090E09F938F931F921F92809101016AE0E0
:101D80000E94CE91892F99279F938F938091010173
:101D90000E94CE9199279F938F938DEB91E19F9312
:101DA0008F9300E615E11F930F93E0913D05F091AD
:101DB0003E05099582E091E19F938F931F930F93C6
:101DC000E0913D05F0913E0509958AED90E19F93E4
:101DD0008F931F930F93E0913D05F0913E05099578
:101DE0000E944A0983EC8093810080916F00806299
:101DF00080936F008DB79EB746968DBF1F910F9150
:101E000008958091EC078D3338F080918D0987FD1E
:101E100003C08CE38093EC0780919B07882331F00B
:101E20008055853618F08FE780939B070895809141
:101E30002405882309F477C080913A058150809366
:101E40003A05882309F053C089E180933A058091CF
:101E5000EC078E3338F080918D0987FD03C08DE348
:101E60008093EC0780910904823820F58091D20399
:101E70009091D303805D974020F08091180A8436BA
:101E800020F410923C0510923B0580913B05909107
:101E90003C05009739F1019790933C0580933B05F1
:101EA000419728F180918D0984FF21C08091D00352
:101EB00084601BC080910904853BC8F09091EC07B9
:101EC00084E1989FC0011124409620913B053091F8
:101ED0003C052817390730F42F5F3F4F30933C05FE
:101EE00020933B058091D0038B7F8093D00390910A
:101EF000D102963019F40E941F8D0FC08091D50237
:101F0000882321F081508093D50208958BE480933B
:101F1000D502943011F40E9483888091D0028334DA
:101F200011F01092240508951F920F920FB60F9290
:101F300011242F933F934F935F936F937F938F93CE
:101F40009F93AF93BF93EF93FF932091CE00809127
:101F5000E0028823B1F02093C6008091E002823035
:101F6000B9F52F3FA9F58FEF94E3ACE0B0E0C2974D
:101F7000A109B109B7FFFBCF809180058093CE0006
:101F800027C09091D102892F8150833020F4822F75
:101F90000E94EE6F1DC0943021F4822F0E94B686FD
:101FA00017C0983021F4822F0E94BB8211C0953057
:101FB00021F4822F0E94F5850BC0963021F4822FE8
:101FC0000E94E68C05C0973019F4822F0E94CA81C6
:101FD000FF91EF91BF91AF919F918F917F916F9101
:101FE0005F914F913F912F910F900FBE0F901F90D7
:101FF0001895FB01DC0102C005900D924150504044
:10200000D8F70895FC014150504030F00190061679
:10201000D1F73197CF010895882799270895FB01BB
:10202000DC0102C001900D9241505040D8F7089554
:10203000A0E0B0E0EEE1F0E90C9446926C017B0187
:10204000EA01590121978FEFCF3FD80789F0860128
:102050000894C11CD11CC7010894E11CF11CF501B6
:102060000995F80180832197FFEFCF3FDF0779F7CC
:10207000EAE0CDB7DEB70C946292CF92DF92EF9296
:10208000FF920F931F937C016B01FB010995082FB1
:10209000C7010196F6010995182FC8011F910F91EC
:1020A000FF90EF90DF90CF900895A0E0B0E0EBE5D7
:1020B000F0E90C9448928C017B01EA0169012197B7
:1020C0008FEFCF3FD80771F0F70121917F01C80151
:1020D0000F5F1F4F622FF60109952197FFEFCF3F4A
:1020E000DF0791F7E8E0CDB7DEB70C946492CF92AA
:1020F000DF92EF92FF920F931F936C018B017A0195
:10210000FA010995812F9927682FC6010196F701D9
:1021100009951F910F91FF90EF90DF90CF90089558
:102120005058BB27AA270ED0E0C0D1D030F0D6D06F
:1021300020F031F49F3F11F41EF4C6C00EF4E09578
:10214000E7FBBCC0E92FE2D080F3BA176207730740
:102150008407950718F071F49EF5FAC00EF4E09527
:102160000B2EBA2FA02D0B01B90190010C01CA0151
:10217000A0011124FF27591B99F0593F50F4503EFC
:1021800068F11A16F040A22F232F342F4427585FEE
:10219000F3CF469537952795A795F0405395C9F706
:1021A0007EF41F16BA0B620B730B840BBAF09150BE
:1021B000A1F0FF0FBB1F661F771F881FC2F70EC05D
:1021C000BA0F621F731F841F48F487957795679530
:1021D000B795F7959E3F08F0B3CF9395880F08F019
:1021E0009927EE0F97958795089598D088F09F5777
:1021F00090F0B92F9927B751A0F0D1F0660F771F53
:10220000881F991F1AF0BA95C9F712C0B13081F032
:102210009FD0B1E008959CC0672F782F8827B85FC2
:1022200039F0B93FCCF3869577956795B395D9F793
:102230003EF490958095709561957F4F8F4F9F4F9D
:102240000895E89409C097FB3EF4909580957095A9
:1022500061957F4F8F4F9F4F9923A9F0F92F96E9F2
:10226000BB279395F695879577956795B795F11167
:10227000F8CFFAF4BB0F11F460FF1BC06F5F7F4F04
:102280008F4F9F4F16C0882311F096E911C0772316
:1022900021F09EE8872F762F05C0662371F096E81F
:1022A000862F70E060E02AF09A95660F771F881FEE
:1022B000DAF7880F9695879597F9089597F99F67AC
:1022C00080E870E060E008959FEF80EC08950024BE
:1022D0000A941616170618060906089500240A948B
:1022E00012161306140605060895092E0394000C11
:1022F00011F4882352F0BB0F40F4BF2B11F460FFA0
:1023000004C06F5F7F4F8F4F9F4F089557FD9058C8
:10231000440F551F59F05F3F71F04795880F97FBA9
:10232000991F61F09F3F79F0879508951216130663
:102330001406551FF2CF4695F1DF08C01616170692
:102340001806991FF1CF86957105610508940895C7
:10235000E894BB2766277727CB0197F90895629FFA
:10236000D001739FF001829FE00DF11D649FE00D8D
:10237000F11D929FF00D839FF00D749FF00D659FEE
:10238000F00D9927729FB00DE11DF91F639FB00DED
:10239000E11DF91FBD01CF0111240895991B79E0BA
:1023A00004C0991F961708F0961B881F7A95C9F7E5
:1023B00080950895AA1BBB1B51E107C0AA1FBB1F34
:1023C000A617B70710F0A61BB70B881F991F5A95C1
:1023D000A9F780959095BC01CD01089597FB092E32
:1023E00007260AD077FD04D0E5DF06D000201AF4D6
:1023F000709561957F4F0895F6F7909581959F4F61
:102400000895A1E21A2EAA1BBB1BFD010DC0AA1F35
:10241000BB1FEE1FFF1FA217B307E407F50720F04D
:10242000A21BB30BE40BF50B661F771F881F991FC8
:102430001A9469F760957095809590959B01AC0111
:10244000BD01CF01089597FB092E05260ED057FD3B
:1024500004D0D7DF0AD0001C38F450954095309551
:1024600021953F4F4F4F5F4F0895F6F79095809518
:10247000709561957F4F8F4F9F4F08952F923F9298
:102480004F925F926F927F928F929F92AF92BF9284
:10249000CF92DF92EF92FF920F931F93CF93DF9330
:1024A000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE8D
:1024B000CDBF09942A88398848885F846E847D84DA
:1024C0008C849B84AA84B984C884DF80EE80FD80DC
:1024D0000C811B81AA81B981CE0FD11D0FB6F89452
:1024E000DEBF0FBECDBFED010895EE0FFF1F0590BB
:0824F000F491E02D0994FFCFE7
:1024F8005E0A010164FF010020FFFFC01FC01F0129
:102508000101737373FF03007D0000C409C40964EB
:1025180000104E6F726D616C0051756164726F00CE
:102528000000000000006400D20101200B0500003B
:10253800ECFF00020406070808080706040200FE6C
:10254800FCFAF9F8F8F8F9FAFCFE000204060708A4
:10255800086440415A46553264640A029696969633
:102568000840403A10FB30380132FF03780090D021
:10257800030090D0030032002064FFFF64200B0AA0
:102588000D0B0C0E0B0F100B11FA20680101011531
:102598002D3D2E4D5F4B2E3D2D00202020010000AB
:1025A800000000566F6C746167652020205620205B
:1025B80001000000000143757272656E74202020CE
:1025C80041202001000000000143617061636974CB
:1025D800792020416820010000000002416C7469E4
:1025E8007475646520206D20200100000000004300
:1025F8006F6D70617373202020B0202001000000EF
:102608000000536174732020202020202020200106
:102618000000000000537065656420202020206DB4
:102628002F7301000000000044697374616E6365D4
:1026380020206D2020010000000000486F6D652DEE
:102648004469722020B020200100000000006D6164
:10265800782E54656D702E20B043200100000000D4
:10266800004D61676E2E6669656C64252020010047
:1026780000000000566172696F2020202020202071
:10268800200100000000004572726F72436F64659C
:1026980020202020010000000000667265692020CB
:1026A8002020202020202001000000000366726501
:1026B8006920202020202020202001000000000385
:0626C80070FF01010F6428
:00000001FF
/branches/v0.90e_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.90e_Ernstl_8-Motoren+Sexpander/Settings.h
--- v0.90e_Ernstl_8-Motoren+Sexpander/Spektrum.c (nonexistent)
+++ v0.90e_Ernstl_8-Motoren+Sexpander/Spektrum.c (revision 2307)
@@ -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.90e_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.90e_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/ccsFp1K9.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccsFp1K9.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccsFp1K9.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccsFp1K9.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccsFp1K9.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccsFp1K9.s:15 .bss:00000000 s_exparity
C:\Temp/ccsFp1K9.s:21 .bss:00000001 s_excnt
C:\Temp/ccsFp1K9.s:27 .bss:00000002 SpektrumTimer
C:\Temp/ccsFp1K9.s:32 .text:00000000 s_update
C:\Temp/ccsFp1K9.s:99 .text:00000074 SpektrumUartInit
.bss:00000003 Sync.0
C:\Temp/ccsFp1K9.s:170 .bss:00000004 FrameCnt.1
C:\Temp/ccsFp1K9.s:171 .bss:00000005 ByteHigh.2
C:\Temp/ccsFp1K9.s:176 .data:00000000 ReSync.3
C:\Temp/ccsFp1K9.s:172 .bss:00000006 Frame2.4
C:\Temp/ccsFp1K9.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.90e_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.90e_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.90e_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/ccebgcZ9.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccebgcZ9.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccebgcZ9.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccebgcZ9.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccebgcZ9.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccebgcZ9.s:14 .data:00000000 AdReady
C:\Temp/ccebgcZ9.s:19 .data:00000001 AnalogOffsetGier
C:\Temp/ccebgcZ9.s:24 .data:00000002 AnalogOffsetRoll
C:\Temp/ccebgcZ9.s:29 .data:00000003 AnalogOffsetNick
C:\Temp/ccebgcZ9.s:36 .bss:00000000 ZaehlMessungen
C:\Temp/ccebgcZ9.s:42 .bss:00000002 VarioMeter
C:\Temp/ccebgcZ9.s:48 .bss:00000004 ExpandBaro
C:\Temp/ccebgcZ9.s:54 .data:00000004 MessLuftdruck
C:\Temp/ccebgcZ9.s:61 .bss:00000005 SummenHoehe
C:\Temp/ccebgcZ9.s:67 .data:00000006 Luftdruck
C:\Temp/ccebgcZ9.s:74 .bss:00000009 AdWertAccHoch
C:\Temp/ccebgcZ9.s:80 .bss:0000000b AdWertAccNick
C:\Temp/ccebgcZ9.s:86 .bss:0000000d AdWertAccRoll
C:\Temp/ccebgcZ9.s:92 .bss:0000000f AdWertGier
C:\Temp/ccebgcZ9.s:98 .bss:00000011 AdWertRoll
C:\Temp/ccebgcZ9.s:104 .bss:00000013 AdWertNick
C:\Temp/ccebgcZ9.s:110 .data:0000000a HiResRoll
C:\Temp/ccebgcZ9.s:115 .data:0000000c HiResNick
C:\Temp/ccebgcZ9.s:122 .bss:00000015 AdWertGierFilter
C:\Temp/ccebgcZ9.s:128 .bss:00000017 AdWertRollFilter
C:\Temp/ccebgcZ9.s:134 .bss:00000019 AdWertNickFilter
C:\Temp/ccebgcZ9.s:140 .data:0000000e UBat
C:\Temp/ccebgcZ9.s:145 .text:00000000 ADC_Init
C:\Temp/ccebgcZ9.s:159 .progmem.data:00000000 __c.13
C:\Temp/ccebgcZ9.s:163 .progmem.data:00000002 __c.14
C:\Temp/ccebgcZ9.s:168 .text:0000000c SucheLuftruckOffset
*COM*:00000001 DruckOffsetSetting
C:\Temp/ccebgcZ9.s:295 .progmem.data:00000004 __c.12
C:\Temp/ccebgcZ9.s:300 .text:00000110 SucheGyroOffset
.bss:0000001b kanal.0
C:\Temp/ccebgcZ9.s:503 .bss:0000001c state.1
C:\Temp/ccebgcZ9.s:504 .bss:0000001d subcount.2
C:\Temp/ccebgcZ9.s:505 .bss:0000001e gier1.3
C:\Temp/ccebgcZ9.s:506 .bss:00000020 roll1.4
C:\Temp/ccebgcZ9.s:507 .bss:00000022 nick1.5
C:\Temp/ccebgcZ9.s:508 .bss:00000024 nick_filter.6
C:\Temp/ccebgcZ9.s:509 .bss:00000026 roll_filter.7
C:\Temp/ccebgcZ9.s:510 .bss:00000028 accy.8
C:\Temp/ccebgcZ9.s:511 .bss:0000002a accx.9
C:\Temp/ccebgcZ9.s:512 .bss:0000002c tmpLuftdruck.10
C:\Temp/ccebgcZ9.s:513 .bss:00000030 messanzahl_Druck.11
C:\Temp/ccebgcZ9.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.90e_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.90e_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.90e_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/cc3Hz9uh.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc3Hz9uh.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc3Hz9uh.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc3Hz9uh.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc3Hz9uh.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc3Hz9uh.s:15 .bss:00000000 update_timer
C:\Temp/cc3Hz9uh.s:20 .text:00000000 Capacity_Init
*COM*:00000007 Capacity
.bss:00000002 SubCounter.0
C:\Temp/cc3Hz9uh.s:40 .bss:00000004 CurrentOffset.1
C:\Temp/cc3Hz9uh.s:41 .bss:00000006 SumCurrentOffset.2
C:\Temp/cc3Hz9uh.s:45 .text:0000002e Capacity_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SetDelay
CheckDelay
Motor
UBat
__udivmodhi4
/branches/v0.90e_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.90e_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.90e_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/ccDYxBxm.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccDYxBxm.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccDYxBxm.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccDYxBxm.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccDYxBxm.s:7 *ABS*:00000001 __zero_reg__
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_Ernstl_8-Motoren+Sexpander/eeprom.c
0,0 → 1,629
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 = 125;
EE_Parameter.AchsKopplung2 = 52;
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.90e_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 93 // 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.90e_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 8DE5 ldi r24,lo8(93)
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 2DE7 ldi r18,lo8(125)
244 01b6 2093 0000 sts EE_Parameter+56,r18
245 01ba 2093 0000 sts EE_Parameter+57,r18
246 01be 2093 0000 sts EE_Parameter+58,r18
247 01c2 9093 0000 sts EE_Parameter+49,r25
248 01c6 55E5 ldi r21,lo8(85)
249 01c8 5093 0000 sts EE_Parameter+50,r21
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 5093 0000 sts EE_Parameter+87,r21
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 2093 0000 sts EE_Parameter+62,r18
308 0290 84E3 ldi r24,lo8(52)
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 8D35 cpi r24,lo8(93)
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 8D35 cpi r24,lo8(93)
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 8D35 cpi r24,lo8(93)
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 6DE5 ldi r22,lo8(93)
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/ccnR0Qps.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccnR0Qps.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccnR0Qps.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccnR0Qps.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccnR0Qps.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccnR0Qps.s:12 .text:00000000 eeprom_read_byte
C:\Temp/ccnR0Qps.s:34 .text:00000010 eeprom_write_byte
C:\Temp/ccnR0Qps.s:60 .text:00000028 RAM_Checksum
C:\Temp/ccnR0Qps.s:88 .text:0000004a EEProm_Checksum
C:\Temp/ccnR0Qps.s:128 .text:0000007a ParamSet_DefaultStickMapping
*COM*:0000007d EE_Parameter
C:\Temp/ccnR0Qps.s:162 .text:000000c4 CommonDefaults
C:\Temp/ccnR0Qps.s:320 .text:000002a4 ParamSet_DefaultSet1
C:\Temp/ccnR0Qps.s:368 .text:0000030e ParamSet_DefaultSet2
C:\Temp/ccnR0Qps.s:416 .text:00000378 ParamSet_DefaultSet3
C:\Temp/ccnR0Qps.s:459 .text:000003e0 GetParamByte
C:\Temp/ccnR0Qps.s:482 .text:000003f0 SetParamByte
C:\Temp/ccnR0Qps.s:508 .text:00000408 GetParamWord
C:\Temp/ccnR0Qps.s:521 .text:00000412 SetParamWord
C:\Temp/ccnR0Qps.s:534 .text:0000041c ParamSet_ReadFromEEProm
C:\Temp/ccnR0Qps.s:639 .text:000004c6 SetActiveParamSet
C:\Temp/ccnR0Qps.s:676 .text:000004f2 ParamSet_WriteToEEProm
C:\Temp/ccnR0Qps.s:774 .text:000005aa MixerTable_ReadFromEEProm
*COM*:0000004e Mixer
C:\Temp/ccnR0Qps.s:848 .text:00000612 MixerTable_WriteToEEProm
C:\Temp/ccnR0Qps.s:893 .text:0000064a MixerTable_Default
C:\Temp/ccnR0Qps.s:955 .text:000006d8 GetActiveParamSet
C:\Temp/ccnR0Qps.s:1005 .text:00000712 SetDefaultParameter
C:\Temp/ccnR0Qps.s:1088 .progmem.data:00000000 __c.0
C:\Temp/ccnR0Qps.s:1092 .progmem.data:00000026 __c.1
C:\Temp/ccnR0Qps.s:1096 .progmem.data:0000003f __c.2
C:\Temp/ccnR0Qps.s:1100 .progmem.data:00000060 __c.3
C:\Temp/ccnR0Qps.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.90e_Ernstl_8-Motoren+Sexpander/fc.c
0,0 → 1,1944
/*#######################################################################################
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_ServoNickComp = 50;
unsigned char Parameter_ServoRollComp = 85;
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_ServoNickComp,EE_Parameter.ServoNickComp);
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp);
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.90e_Ernstl_8-Motoren+Sexpander/fc.h
0,0 → 1,141
/*#######################################################################################
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_ServoNickComp;
extern unsigned char Parameter_ServoRollComp;
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.90e_Ernstl_8-Motoren+Sexpander/fc.lst
0,0 → 1,11022
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_ServoRollComp
162 Parameter_ServoRollComp:
163 002b 55 .byte 85
164 .global Parameter_ServoNickComp
167 Parameter_ServoNickComp:
168 002c 32 .byte 50
169 .global Parameter_ServoRollControl
172 Parameter_ServoRollControl:
173 002d 64 .byte 100
174 .global Parameter_ServoNickControl
177 Parameter_ServoNickControl:
178 002e 64 .byte 100
179 .global Parameter_UserParam8
180 .global Parameter_UserParam8
181 .section .bss
184 Parameter_UserParam8:
185 0013 00 .skip 1,0
186 .global Parameter_UserParam7
187 .global Parameter_UserParam7
190 Parameter_UserParam7:
191 0014 00 .skip 1,0
192 .global Parameter_UserParam6
193 .global Parameter_UserParam6
196 Parameter_UserParam6:
197 0015 00 .skip 1,0
198 .global Parameter_UserParam5
199 .global Parameter_UserParam5
202 Parameter_UserParam5:
203 0016 00 .skip 1,0
204 .global Parameter_UserParam4
205 .global Parameter_UserParam4
208 Parameter_UserParam4:
209 0017 00 .skip 1,0
210 .global Parameter_UserParam3
211 .global Parameter_UserParam3
214 Parameter_UserParam3:
215 0018 00 .skip 1,0
216 .global Parameter_UserParam2
217 .global Parameter_UserParam2
220 Parameter_UserParam2:
221 0019 00 .skip 1,0
222 .global Parameter_UserParam1
223 .global Parameter_UserParam1
226 Parameter_UserParam1:
227 001a 00 .skip 1,0
228 .global Parameter_I_Faktor
229 .data
232 Parameter_I_Faktor:
233 002f 0A .byte 10
234 .global Parameter_Gier_P
237 Parameter_Gier_P:
238 0030 02 .byte 2
239 .global Parameter_Gyro_Gier_I
242 Parameter_Gyro_Gier_I:
243 0031 96 .byte -106
244 .global Parameter_Gyro_Gier_P
247 Parameter_Gyro_Gier_P:
248 0032 96 .byte -106
249 .global Parameter_Gyro_I
252 Parameter_Gyro_I:
253 0033 96 .byte -106
254 .global Parameter_Gyro_P
257 Parameter_Gyro_P:
258 0034 96 .byte -106
259 .global Parameter_Gyro_D
262 Parameter_Gyro_D:
263 0035 08 .byte 8
264 .global Parameter_Hoehe_GPS_Z
267 Parameter_Hoehe_GPS_Z:
268 0036 40 .byte 64
269 .global Parameter_KompassWirkung
272 Parameter_KompassWirkung:
273 0037 40 .byte 64
274 .global Parameter_Hoehe_ACC_Wirkung
277 Parameter_Hoehe_ACC_Wirkung:
278 0038 3A .byte 58
279 .global Parameter_Hoehe_P
282 Parameter_Hoehe_P:
283 0039 10 .byte 16
284 .global Parameter_HoehenSchalter
287 Parameter_HoehenSchalter:
288 003a FB .byte -5
289 .global Parameter_Luftdruck_D
292 Parameter_Luftdruck_D:
293 003b 30 .byte 48
294 .global Looping_Oben
295 .global Looping_Oben
296 .section .bss
299 Looping_Oben:
300 001b 00 .skip 1,0
301 .global Looping_Unten
302 .global Looping_Unten
305 Looping_Unten:
306 001c 00 .skip 1,0
307 .global Looping_Rechts
308 .global Looping_Rechts
311 Looping_Rechts:
312 001d 00 .skip 1,0
313 .global Looping_Links
314 .global Looping_Links
317 Looping_Links:
318 001e 00 .skip 1,0
319 .global Looping_Roll
320 .global Looping_Roll
323 Looping_Roll:
324 001f 00 .skip 1,0
325 .global Looping_Nick
326 .global Looping_Nick
329 Looping_Nick:
330 0020 00 .skip 1,0
331 .global Ki
332 .data
335 Ki:
336 003c 3801 .word 312
337 .global HoverGas
338 .global HoverGas
339 .section .bss
342 HoverGas:
343 0021 0000 .skip 2,0
344 .global LageKorrekturNick
345 .global LageKorrekturNick
348 LageKorrekturNick:
349 0023 0000 .skip 2,0
350 .global LageKorrekturRoll
351 .global LageKorrekturRoll
354 LageKorrekturRoll:
355 0025 0000 .skip 2,0
356 .global NeueKompassRichtungMerken
357 .global NeueKompassRichtungMerken
360 NeueKompassRichtungMerken:
361 0027 00 .skip 1,0
362 .global CalibrationDone
363 .global CalibrationDone
366 CalibrationDone:
367 0028 00 .skip 1,0
368 .global CompassGierSetpoint
369 .global CompassGierSetpoint
372 CompassGierSetpoint:
373 0029 0000 .skip 2,0
374 .global WaypointTrimming
375 .global WaypointTrimming
378 WaypointTrimming:
379 002b 00 .skip 1,0
380 .global carefree_old
381 .data
384 carefree_old:
385 003e 32 .byte 50
386 .global FromNC_AltitudeSpeed
387 .global FromNC_AltitudeSpeed
388 .section .bss
391 FromNC_AltitudeSpeed:
392 002c 00 .skip 1,0
393 .global FromNC_AltitudeSetpoint
394 .global FromNC_AltitudeSetpoint
397 FromNC_AltitudeSetpoint:
398 002d 0000 0000 .skip 4,0
399 .global AltitudeSetpointTrimming
400 .global AltitudeSetpointTrimming
403 AltitudeSetpointTrimming:
404 0031 0000 .skip 2,0
405 .global SollHoehe
406 .global SollHoehe
409 SollHoehe:
410 0033 0000 0000 .skip 4,0
411 .global HoehenWert
412 .global HoehenWert
415 HoehenWert:
416 0037 0000 0000 .skip 4,0
417 .global StartTrigger
418 .global StartTrigger
421 StartTrigger:
422 003b 00 .skip 1,0
423 .global MotorenEin
424 .global MotorenEin
427 MotorenEin:
428 003c 00 .skip 1,0
429 .global SenderOkay
430 .global SenderOkay
433 SenderOkay:
434 003d 00 .skip 1,0
435 .global Poti
436 .global Poti
439 Poti:
440 003e 0000 0000 .skip 9,0
440 0000 0000
440 00
441 .global StickGas
442 .global StickGas
445 StickGas:
446 0047 0000 .skip 2,0
447 .global StickGier
448 .global StickGier
451 StickGier:
452 0049 0000 .skip 2,0
453 .global StickRoll
454 .global StickRoll
457 StickRoll:
458 004b 0000 .skip 2,0
459 .global StickNick
460 .global StickNick
463 StickNick:
464 004d 0000 .skip 2,0
465 .global HoverGasMax
466 .data
469 HoverGasMax:
470 003f FF03 .word 1023
471 .global HoverGasMin
472 .global HoverGasMin
473 .section .bss
476 HoverGasMin:
477 004f 0000 .skip 2,0
478 .global StickGasHover
479 .data
482 StickGasHover:
483 0041 7800 .word 120
484 .global GierGyroFehler
485 .global GierGyroFehler
486 .section .bss
489 GierGyroFehler:
490 0051 0000 .skip 2,0
491 .global Umschlag180Roll
492 .data
495 Umschlag180Roll:
496 0043 90D0 0300 .long 250000
497 .global Umschlag180Nick
500 Umschlag180Nick:
501 0047 90D0 0300 .long 250000
502 .global TrichterFlug
503 .global TrichterFlug
504 .section .bss
507 TrichterFlug:
508 0053 00 .skip 1,0
509 .global HoehenReglerAktiv
510 .global HoehenReglerAktiv
513 HoehenReglerAktiv:
514 0054 00 .skip 1,0
515 .global KompassSignalSchlecht
516 .data
519 KompassSignalSchlecht:
520 004b 3200 .word 50
521 .global KompassFusion
524 KompassFusion:
525 004d 20 .byte 32
526 .global CalculateCompassTimer
529 CalculateCompassTimer:
530 004e 64 .byte 100
531 .global KompassSollWert
532 .global KompassSollWert
533 .section .bss
536 KompassSollWert:
537 0055 0000 .skip 2,0
538 .global KompassValue
539 .data
542 KompassValue:
543 004f FFFF .word -1
544 .global Mess_Integral_Hoch
545 .global Mess_Integral_Hoch
546 .section .bss
549 Mess_Integral_Hoch:
550 0057 0000 0000 .skip 4,0
551 .global SummeRoll
552 .global SummeRoll
555 SummeRoll:
556 005b 0000 0000 .skip 4,0
557 .global SummeNick
558 .global SummeNick
561 SummeNick:
562 005f 0000 0000 .skip 4,0
563 .global Mess_Integral_Gier2
564 .global Mess_Integral_Gier2
567 Mess_Integral_Gier2:
568 0063 0000 0000 .skip 4,0
569 .global Mess_Integral_Gier
570 .global Mess_Integral_Gier
573 Mess_Integral_Gier:
574 0067 0000 0000 .skip 4,0
575 .global Mess_IntegralRoll2
576 .global Mess_IntegralRoll2
579 Mess_IntegralRoll2:
580 006b 0000 0000 .skip 4,0
581 .global Mess_IntegralRoll
582 .global Mess_IntegralRoll
585 Mess_IntegralRoll:
586 006f 0000 0000 .skip 4,0
587 .global Mess_IntegralNick2
588 .global Mess_IntegralNick2
591 Mess_IntegralNick2:
592 0073 0000 0000 .skip 4,0
593 .global Mess_IntegralNick
594 .global Mess_IntegralNick
597 Mess_IntegralNick:
598 0077 0000 0000 .skip 4,0
599 .global Integral_Gier
600 .global Integral_Gier
603 Integral_Gier:
604 007b 0000 0000 .skip 4,0
605 .global IntegralAccZ
606 .global IntegralAccZ
609 IntegralAccZ:
610 007f 0000 0000 .skip 4,0
611 .global IntegralAccRoll
612 .global IntegralAccRoll
615 IntegralAccRoll:
616 0083 0000 0000 .skip 4,0
617 .global IntegralAccNick
618 .global IntegralAccNick
621 IntegralAccNick:
622 0087 0000 0000 .skip 4,0
623 .global IntegralRoll2
624 .global IntegralRoll2
627 IntegralRoll2:
628 008b 0000 0000 .skip 4,0
629 .global IntegralRoll
630 .global IntegralRoll
633 IntegralRoll:
634 008f 0000 0000 .skip 4,0
635 .global IntegralNick2
636 .global IntegralNick2
639 IntegralNick2:
640 0093 0000 0000 .skip 4,0
641 .global IntegralNick
642 .global IntegralNick
645 IntegralNick:
646 0097 0000 0000 .skip 4,0
647 .global ControlHeading
648 .global ControlHeading
651 ControlHeading:
652 009b 00 .skip 1,0
653 .global NeutralAccZ
654 .global NeutralAccZ
657 NeutralAccZ:
658 009c 0000 .skip 2,0
659 .global NaviCntAcc
660 .global NaviCntAcc
663 NaviCntAcc:
664 009e 0000 .skip 2,0
665 .global NeutralAccY
666 .global NeutralAccY
669 NeutralAccY:
670 00a0 0000 .skip 2,0
671 .global NeutralAccX
672 .global NeutralAccX
675 NeutralAccX:
676 00a2 0000 .skip 2,0
677 .global StartNeutralNick
678 .global StartNeutralNick
681 StartNeutralNick:
682 00a4 0000 .skip 2,0
683 .global StartNeutralRoll
684 .global StartNeutralRoll
687 StartNeutralRoll:
688 00a6 0000 .skip 2,0
689 .global AdNeutralGier
690 .global AdNeutralGier
693 AdNeutralGier:
694 00a8 0000 .skip 2,0
695 .global AdNeutralRoll
696 .global AdNeutralRoll
699 AdNeutralRoll:
700 00aa 0000 .skip 2,0
701 .global AdNeutralNick
702 .global AdNeutralNick
705 AdNeutralNick:
706 00ac 0000 .skip 2,0
707 .global BaroExpandActive
708 .global BaroExpandActive
711 BaroExpandActive:
712 00ae 0000 .skip 2,0
713 .text
714 .global CopyDebugValues
716 CopyDebugValues:
717 /* prologue: frame size=0 */
718 0000 EF92 push r14
719 0002 FF92 push r15
720 0004 0F93 push r16
721 0006 1F93 push r17
722 /* prologue end (size=4) */
723 0008 8091 0000 lds r24,EE_Parameter+28
724 000c 9927 clr r25
725 000e 880F lsl r24
726 0010 991F rol r25
727 0012 880F lsl r24
728 0014 991F rol r25
729 0016 7C01 movw r14,r24
730 0018 0027 clr r16
731 001a F7FC sbrc r15,7
732 001c 0095 com r16
733 001e 102F mov r17,r16
734 0020 8091 0000 lds r24,IntegralNick
735 0024 9091 0000 lds r25,(IntegralNick)+1
736 0028 A091 0000 lds r26,(IntegralNick)+2
737 002c B091 0000 lds r27,(IntegralNick)+3
738 0030 BC01 movw r22,r24
739 0032 CD01 movw r24,r26
740 0034 A801 movw r20,r16
741 0036 9701 movw r18,r14
742 0038 0E94 0000 call __divmodsi4
743 003c 3093 0000 sts (DebugOut+2)+1,r19
744 0040 2093 0000 sts DebugOut+2,r18
745 0044 8091 0000 lds r24,IntegralRoll
746 0048 9091 0000 lds r25,(IntegralRoll)+1
747 004c A091 0000 lds r26,(IntegralRoll)+2
748 0050 B091 0000 lds r27,(IntegralRoll)+3
749 0054 BC01 movw r22,r24
750 0056 CD01 movw r24,r26
751 0058 A801 movw r20,r16
752 005a 9701 movw r18,r14
753 005c 0E94 0000 call __divmodsi4
754 0060 3093 0000 sts (DebugOut+4)+1,r19
755 0064 2093 0000 sts DebugOut+4,r18
756 0068 8091 0000 lds r24,Mittelwert_AccNick
757 006c 9091 0000 lds r25,(Mittelwert_AccNick)+1
758 0070 97FD sbrc r25,7
759 0072 0396 adiw r24,3
760 .L2:
761 0074 9595 asr r25
762 0076 8795 ror r24
763 0078 9595 asr r25
764 007a 8795 ror r24
765 007c 9093 0000 sts (DebugOut+6)+1,r25
766 0080 8093 0000 sts DebugOut+6,r24
767 0084 8091 0000 lds r24,Mittelwert_AccRoll
768 0088 9091 0000 lds r25,(Mittelwert_AccRoll)+1
769 008c 97FD sbrc r25,7
770 008e 0396 adiw r24,3
771 .L3:
772 0090 9595 asr r25
773 0092 8795 ror r24
774 0094 9595 asr r25
775 0096 8795 ror r24
776 0098 9093 0000 sts (DebugOut+8)+1,r25
777 009c 8093 0000 sts DebugOut+8,r24
778 00a0 8091 0000 lds r24,AdNeutralGier
779 00a4 9091 0000 lds r25,(AdNeutralGier)+1
780 00a8 2091 0000 lds r18,AdWertGier
781 00ac 3091 0000 lds r19,(AdWertGier)+1
782 00b0 821B sub r24,r18
783 00b2 930B sbc r25,r19
784 00b4 9093 0000 sts (DebugOut+10)+1,r25
785 00b8 8093 0000 sts DebugOut+10,r24
786 00bc 8091 0000 lds r24,HoehenWert
787 00c0 9091 0000 lds r25,(HoehenWert)+1
788 00c4 A091 0000 lds r26,(HoehenWert)+2
789 00c8 B091 0000 lds r27,(HoehenWert)+3
790 00cc BC01 movw r22,r24
791 00ce CD01 movw r24,r26
792 00d0 25E0 ldi r18,lo8(5)
793 00d2 30E0 ldi r19,hi8(5)
794 00d4 40E0 ldi r20,hlo8(5)
795 00d6 50E0 ldi r21,hhi8(5)
796 00d8 0E94 0000 call __divmodsi4
797 00dc 3093 0000 sts (DebugOut+12)+1,r19
798 00e0 2093 0000 sts DebugOut+12,r18
799 00e4 8091 0000 lds r24,AdWertAccHoch
800 00e8 9091 0000 lds r25,(AdWertAccHoch)+1
801 00ec 9093 0000 sts (DebugOut+14)+1,r25
802 00f0 8093 0000 sts DebugOut+14,r24
803 00f4 8091 0000 lds r24,UBat
804 00f8 9091 0000 lds r25,(UBat)+1
805 00fc 9093 0000 sts (DebugOut+16)+1,r25
806 0100 8093 0000 sts DebugOut+16,r24
807 0104 8091 0000 lds r24,Motor+1
808 0108 9927 clr r25
809 010a 9093 0000 sts (DebugOut+18)+1,r25
810 010e 8093 0000 sts DebugOut+18,r24
811 0112 8091 0000 lds r24,Motor+9
812 0116 9927 clr r25
813 0118 9093 0000 sts (DebugOut+20)+1,r25
814 011c 8093 0000 sts DebugOut+20,r24
815 0120 8091 0000 lds r24,Motor+17
816 0124 9927 clr r25
817 0126 9093 0000 sts (DebugOut+22)+1,r25
818 012a 8093 0000 sts DebugOut+22,r24
819 012e 8091 0000 lds r24,Motor+25
820 0132 9927 clr r25
821 0134 9093 0000 sts (DebugOut+24)+1,r25
822 0138 8093 0000 sts DebugOut+24,r24
823 013c 8091 0000 lds r24,Motor+33
824 0140 9927 clr r25
825 0142 9093 0000 sts (DebugOut+26)+1,r25
826 0146 8093 0000 sts DebugOut+26,r24
827 014a 8091 0000 lds r24,Motor+41
828 014e 9927 clr r25
829 0150 9093 0000 sts (DebugOut+28)+1,r25
830 0154 8093 0000 sts DebugOut+28,r24
831 0158 8091 0000 lds r24,Motor+49
832 015c 9927 clr r25
833 015e 9093 0000 sts (DebugOut+30)+1,r25
834 0162 8093 0000 sts DebugOut+30,r24
835 0166 8091 0000 lds r24,Motor+57
836 016a 9927 clr r25
837 016c 9093 0000 sts (DebugOut+32)+1,r25
838 0170 8093 0000 sts DebugOut+32,r24
839 0174 8091 0000 lds r24,SenderOkay
840 0178 9927 clr r25
841 017a 9093 0000 sts (DebugOut+34)+1,r25
842 017e 8093 0000 sts DebugOut+34,r24
843 0182 8091 0000 lds r24,ErsatzKompass
844 0186 9091 0000 lds r25,(ErsatzKompass)+1
845 018a A091 0000 lds r26,(ErsatzKompass)+2
846 018e B091 0000 lds r27,(ErsatzKompass)+3
847 0192 2091 0000 lds r18,GIER_GRAD_FAKTOR
848 0196 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
849 019a 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
850 019e 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
851 01a2 BC01 movw r22,r24
852 01a4 CD01 movw r24,r26
853 01a6 0E94 0000 call __divmodsi4
854 01aa 3093 0000 sts (DebugOut+36)+1,r19
855 01ae 2093 0000 sts DebugOut+36,r18
856 01b2 8091 0000 lds r24,Capacity
857 01b6 9091 0000 lds r25,(Capacity)+1
858 01ba 9093 0000 sts (DebugOut+38)+1,r25
859 01be 8093 0000 sts DebugOut+38,r24
860 01c2 8091 0000 lds r24,Capacity+4
861 01c6 9091 0000 lds r25,(Capacity+4)+1
862 01ca 9093 0000 sts (DebugOut+40)+1,r25
863 01ce 8093 0000 sts DebugOut+40,r24
864 01d2 8091 0000 lds r24,ServoNickValue
865 01d6 9091 0000 lds r25,(ServoNickValue)+1
866 01da 9093 0000 sts (DebugOut+42)+1,r25
867 01de 8093 0000 sts DebugOut+42,r24
868 01e2 8091 0000 lds r24,KompassValue
869 01e6 9091 0000 lds r25,(KompassValue)+1
870 01ea 9093 0000 sts (DebugOut+44)+1,r25
871 01ee 8093 0000 sts DebugOut+44,r24
872 01f2 1092 0000 sts (DebugOut+46)+1,__zero_reg__
873 01f6 1092 0000 sts DebugOut+46,__zero_reg__
874 01fa 8091 0000 lds r24,Capacity+6
875 01fe 9927 clr r25
876 0200 9093 0000 sts (DebugOut+48)+1,r25
877 0204 8093 0000 sts DebugOut+48,r24
878 0208 8091 0000 lds r24,GPS_Nick
879 020c 9091 0000 lds r25,(GPS_Nick)+1
880 0210 9093 0000 sts (DebugOut+50)+1,r25
881 0214 8093 0000 sts DebugOut+50,r24
882 0218 8091 0000 lds r24,GPS_Roll
883 021c 9091 0000 lds r25,(GPS_Roll)+1
884 0220 9093 0000 sts (DebugOut+52)+1,r25
885 0224 8093 0000 sts DebugOut+52,r24
886 0228 8091 0000 lds r24,VersionInfo+5
887 022c 8823 tst r24
888 022e 01F4 brne .L5
889 0230 8091 0000 lds r24,VersionInfo+6
890 0234 8823 tst r24
891 0236 01F0 breq .L4
892 .L5:
893 0238 8091 0000 lds r24,DebugOut+1
894 023c 8160 ori r24,lo8(1)
895 023e 00C0 rjmp .L7
896 .L4:
897 0240 8091 0000 lds r24,DebugOut+1
898 0244 8E7F andi r24,lo8(-2)
899 .L7:
900 0246 8093 0000 sts DebugOut+1,r24
901 /* epilogue: frame size=0 */
902 024a 1F91 pop r17
903 024c 0F91 pop r16
904 024e FF90 pop r15
905 0250 EF90 pop r14
906 0252 0895 ret
907 /* epilogue end (size=5) */
908 /* function CopyDebugValues size 300 (291) */
910 .global Piep
912 Piep:
913 /* prologue: frame size=0 */
914 0254 EF92 push r14
915 0256 FF92 push r15
916 0258 1F93 push r17
917 025a CF93 push r28
918 025c DF93 push r29
919 /* prologue end (size=5) */
920 025e 182F mov r17,r24
921 0260 7B01 movw r14,r22
922 0262 8091 0000 lds r24,MotorenEin
923 0266 8823 tst r24
924 0268 01F4 brne .L8
925 026a 8091 0000 lds r24,PlatinenVersion
926 026e 8C30 cpi r24,lo8(12)
927 0270 00F0 brlo .L11
928 0272 8631 cpi r24,lo8(22)
929 0274 01F4 brne .L10
930 .L11:
931 0276 2998 cbi 37-0x20,1
932 0278 00C0 rjmp .L12
933 .L10:
934 027a 299A sbi 37-0x20,1
935 .L12:
936 027c 1150 subi r17,lo8(-(-1))
937 027e 1F3F cpi r17,lo8(-1)
938 0280 01F0 breq .L26
939 0282 F092 0000 sts (beeptime)+1,r15
940 0286 E092 0000 sts beeptime,r14
941 028a E701 movw r28,r14
942 .L34:
943 028c 8091 0000 lds r24,beeptime
944 0290 9091 0000 lds r25,(beeptime)+1
945 0294 892B or r24,r25
946 0296 01F4 brne .L31
947 0298 2097 sbiw r28,0
948 029a 01F0 breq .L12
949 .L31:
950 029c 8091 0000 lds r24,UpdateMotor
951 02a0 8823 tst r24
952 02a2 01F0 breq .L34
953 02a4 1092 0000 sts UpdateMotor,__zero_reg__
954 02a8 8091 0000 lds r24,beeptime
955 02ac 9091 0000 lds r25,(beeptime)+1
956 02b0 892B or r24,r25
957 02b2 01F4 brne .L19
958 02b4 2197 sbiw r28,1
959 .L19:
960 02b6 0E94 0000 call LIBFC_Polling
961 02ba 00C0 rjmp .L34
962 .L26:
963 02bc 8091 0000 lds r24,PlatinenVersion
964 02c0 8C30 cpi r24,lo8(12)
965 02c2 00F0 brlo .L23
966 02c4 8631 cpi r24,lo8(22)
967 02c6 01F4 brne .L22
968 .L23:
969 02c8 299A sbi 37-0x20,1
970 02ca 00C0 rjmp .L8
971 .L22:
972 02cc 2998 cbi 37-0x20,1
973 .L8:
974 /* epilogue: frame size=0 */
975 02ce DF91 pop r29
976 02d0 CF91 pop r28
977 02d2 1F91 pop r17
978 02d4 FF90 pop r15
979 02d6 EF90 pop r14
980 02d8 0895 ret
981 /* epilogue end (size=6) */
982 /* function Piep size 67 (56) */
984 .global CalibrierMittelwert
986 CalibrierMittelwert:
987 /* prologue: frame size=0 */
988 02da CF93 push r28
989 02dc DF93 push r29
990 /* prologue end (size=2) */
991 02de 8091 0000 lds r24,PlatinenVersion
992 02e2 8D30 cpi r24,lo8(13)
993 02e4 01F4 brne .L36
994 02e6 0E94 0000 call SucheGyroOffset
995 .L36:
996 02ea 1092 7A00 sts 122,__zero_reg__
997 02ee 8091 0000 lds r24,AdWertNick
998 02f2 9091 0000 lds r25,(AdWertNick)+1
999 02f6 9093 0000 sts (MesswertNick)+1,r25
1000 02fa 8093 0000 sts MesswertNick,r24
1001 02fe 8091 0000 lds r24,AdWertRoll
1002 0302 9091 0000 lds r25,(AdWertRoll)+1
1003 0306 9093 0000 sts (MesswertRoll)+1,r25
1004 030a 8093 0000 sts MesswertRoll,r24
1005 030e 8091 0000 lds r24,AdWertGier
1006 0312 9091 0000 lds r25,(AdWertGier)+1
1007 0316 9093 0000 sts (MesswertGier)+1,r25
1008 031a 8093 0000 sts MesswertGier,r24
1009 031e 2091 0000 lds r18,AdWertAccNick
1010 0322 3091 0000 lds r19,(AdWertAccNick)+1
1011 0326 C901 movw r24,r18
1012 0328 880F lsl r24
1013 032a 991F rol r25
1014 032c 880F lsl r24
1015 032e 991F rol r25
1016 0330 820F add r24,r18
1017 0332 931F adc r25,r19
1018 0334 820F add r24,r18
1019 0336 931F adc r25,r19
1020 0338 9093 0000 sts (Mittelwert_AccNick)+1,r25
1021 033c 8093 0000 sts Mittelwert_AccNick,r24
1022 0340 2091 0000 lds r18,AdWertAccRoll
1023 0344 3091 0000 lds r19,(AdWertAccRoll)+1
1024 0348 C901 movw r24,r18
1025 034a 880F lsl r24
1026 034c 991F rol r25
1027 034e 880F lsl r24
1028 0350 991F rol r25
1029 0352 820F add r24,r18
1030 0354 931F adc r25,r19
1031 0356 820F add r24,r18
1032 0358 931F adc r25,r19
1033 035a 9093 0000 sts (Mittelwert_AccRoll)+1,r25
1034 035e 8093 0000 sts Mittelwert_AccRoll,r24
1035 0362 8FEC ldi r24,lo8(-49)
1036 0364 8093 7A00 sts 122,r24
1037 0368 A0E0 ldi r26,lo8(Poti)
1038 036a B0E0 ldi r27,hi8(Poti)
1039 036c C0E0 ldi r28,lo8(EE_Parameter+5)
1040 036e D0E0 ldi r29,hi8(EE_Parameter+5)
1041 0370 97E0 ldi r25,lo8(7)
1042 .L46:
1043 0372 8991 ld r24,Y+
1044 0374 E82F mov r30,r24
1045 0376 FF27 clr r31
1046 0378 EE0F add r30,r30
1047 037a FF1F adc r31,r31
1048 037c E050 subi r30,lo8(-(PPM_in))
1049 037e F040 sbci r31,hi8(-(PPM_in))
1050 0380 0190 ld __tmp_reg__,Z+
1051 0382 F081 ld r31,Z
1052 0384 E02D mov r30,__tmp_reg__
1053 0386 E158 subi r30,lo8(-(127))
1054 0388 FF4F sbci r31,hi8(-(127))
1055 038a 1E16 cp __zero_reg__,r30
1056 038c 1F06 cpc __zero_reg__,r31
1057 038e 04F0 brlt .L40
1058 0390 E0E0 ldi r30,lo8(0)
1059 0392 F0E0 ldi r31,hi8(0)
1060 0394 00C0 rjmp .L41
1061 .L40:
1062 0396 EF3F cpi r30,255
1063 0398 F105 cpc r31,__zero_reg__
1064 039a 04F0 brlt .L41
1065 039c EFEF ldi r30,lo8(255)
1066 039e F0E0 ldi r31,hi8(255)
1067 .L41:
1068 03a0 8C91 ld r24,X
1069 03a2 282F mov r18,r24
1070 03a4 3327 clr r19
1071 03a6 E217 cp r30,r18
1072 03a8 F307 cpc r31,r19
1073 03aa 04F4 brge .L43
1074 03ac 8150 subi r24,lo8(-(-1))
1075 03ae 00C0 rjmp .L49
1076 .L43:
1077 03b0 2E17 cp r18,r30
1078 03b2 3F07 cpc r19,r31
1079 03b4 04F4 brge .L39
1080 03b6 8F5F subi r24,lo8(-(1))
1081 .L49:
1082 03b8 8C93 st X,r24
1083 .L39:
1084 03ba 9150 subi r25,lo8(-(-1))
1085 03bc 1196 adiw r26,1
1086 03be 97FF sbrs r25,7
1087 03c0 00C0 rjmp .L46
1088 03c2 8091 0000 lds r24,EE_Parameter+65
1089 03c6 9927 clr r25
1090 03c8 AA27 clr r26
1091 03ca BB27 clr r27
1092 03cc BC01 movw r22,r24
1093 03ce CD01 movw r24,r26
1094 03d0 24EC ldi r18,lo8(2500)
1095 03d2 39E0 ldi r19,hi8(2500)
1096 03d4 40E0 ldi r20,hlo8(2500)
1097 03d6 50E0 ldi r21,hhi8(2500)
1098 03d8 0E94 0000 call __mulsi3
1099 03dc DC01 movw r26,r24
1100 03de CB01 movw r24,r22
1101 03e0 8093 0000 sts Umschlag180Nick,r24
1102 03e4 9093 0000 sts (Umschlag180Nick)+1,r25
1103 03e8 A093 0000 sts (Umschlag180Nick)+2,r26
1104 03ec B093 0000 sts (Umschlag180Nick)+3,r27
1105 03f0 8091 0000 lds r24,EE_Parameter+66
1106 03f4 9927 clr r25
1107 03f6 AA27 clr r26
1108 03f8 BB27 clr r27
1109 03fa BC01 movw r22,r24
1110 03fc CD01 movw r24,r26
1111 03fe 0E94 0000 call __mulsi3
1112 0402 DC01 movw r26,r24
1113 0404 CB01 movw r24,r22
1114 0406 8093 0000 sts Umschlag180Roll,r24
1115 040a 9093 0000 sts (Umschlag180Roll)+1,r25
1116 040e A093 0000 sts (Umschlag180Roll)+2,r26
1117 0412 B093 0000 sts (Umschlag180Roll)+3,r27
1118 /* epilogue: frame size=0 */
1119 0416 DF91 pop r29
1120 0418 CF91 pop r28
1121 041a 0895 ret
1122 /* epilogue end (size=3) */
1123 /* function CalibrierMittelwert size 161 (156) */
1125 .section .progmem.data,"a",@progbits
1128 __c.35:
1129 0000 0A0D 4143 .string "\n\rACC not calibrated!\r\n"
1129 4320 6E6F
1129 7420 6361
1129 6C69 6272
1129 6174 6564
1130 .text
1131 .global SetNeutral
1133 SetNeutral:
1134 /* prologue: frame size=0 */
1135 041c A0E0 ldi r26,lo8(0)
1136 041e B0E0 ldi r27,hi8(0)
1137 0420 E0E0 ldi r30,pm_lo8(1f)
1138 0422 F0E0 ldi r31,pm_hi8(1f)
1139 0424 0C94 0000 jmp __prologue_saves__+12
1140 1:
1141 /* prologue end (size=6) */
1142 0428 882E mov r8,r24
1143 042a C0E0 ldi r28,lo8(0)
1144 042c D0E0 ldi r29,hi8(0)
1145 042e 7E01 movw r14,r28
1146 0430 6E01 movw r12,r28
1147 0432 1092 0000 sts VersionInfo+5,__zero_reg__
1148 0436 D093 0000 sts (NeutralAccX)+1,r29
1149 043a C093 0000 sts NeutralAccX,r28
1150 043e D093 0000 sts (NeutralAccY)+1,r29
1151 0442 C093 0000 sts NeutralAccY,r28
1152 0446 D093 0000 sts (NeutralAccZ)+1,r29
1153 044a C093 0000 sts NeutralAccZ,r28
1154 044e D093 0000 sts (AdNeutralNick)+1,r29
1155 0452 C093 0000 sts AdNeutralNick,r28
1156 0456 D093 0000 sts (AdNeutralRoll)+1,r29
1157 045a C093 0000 sts AdNeutralRoll,r28
1158 045e D093 0000 sts (AdNeutralGier)+1,r29
1159 0462 C093 0000 sts AdNeutralGier,r28
1160 0466 1092 0000 sts Parameter_AchsKopplung1,__zero_reg__
1161 046a 1092 0000 sts Parameter_AchsKopplung2,__zero_reg__
1162 046e 1092 0000 sts ExpandBaro,__zero_reg__
1163 0472 0E94 0000 call CalibrierMittelwert
1164 0476 84E6 ldi r24,lo8(100)
1165 0478 90E0 ldi r25,hi8(100)
1166 047a 0E94 0000 call Delay_ms_Mess
1167 047e 0E94 0000 call CalibrierMittelwert
1168 0482 8091 0000 lds r24,EE_Parameter+13
1169 0486 80FF sbrs r24,0
1170 0488 00C0 rjmp .L51
1171 048a 8091 0000 lds r24,MessLuftdruck
1172 048e 9091 0000 lds r25,(MessLuftdruck)+1
1173 0492 875B subi r24,lo8(951)
1174 0494 9340 sbci r25,hi8(951)
1175 0496 00F4 brsh .L53
1176 0498 8091 0000 lds r24,MessLuftdruck
1177 049c 9091 0000 lds r25,(MessLuftdruck)+1
1178 04a0 8E5E subi r24,lo8(750)
1179 04a2 9240 sbci r25,hi8(750)
1180 04a4 00F4 brsh .L51
1181 .L53:
1182 04a6 0E94 0000 call SucheLuftruckOffset
1183 .L51:
1184 04aa 0FE1 ldi r16,lo8(31)
1185 .L57:
1186 04ac 8AE0 ldi r24,lo8(10)
1187 04ae 90E0 ldi r25,hi8(10)
1188 04b0 0E94 0000 call Delay_ms_Mess
1189 04b4 8091 0000 lds r24,AdWertGier
1190 04b8 9091 0000 lds r25,(AdWertGier)+1
1191 04bc C80F add r28,r24
1192 04be D91F adc r29,r25
1193 04c0 8091 0000 lds r24,AdWertNick
1194 04c4 9091 0000 lds r25,(AdWertNick)+1
1195 04c8 E80E add r14,r24
1196 04ca F91E adc r15,r25
1197 04cc 8091 0000 lds r24,AdWertRoll
1198 04d0 9091 0000 lds r25,(AdWertRoll)+1
1199 04d4 C80E add r12,r24
1200 04d6 D91E adc r13,r25
1201 04d8 0150 subi r16,lo8(-(-1))
1202 04da 07FF sbrs r16,7
1203 04dc 00C0 rjmp .L57
1204 04de 9701 movw r18,r14
1205 04e0 205F subi r18,lo8(-(16))
1206 04e2 3F4F sbci r19,hi8(-(16))
1207 04e4 3695 lsr r19
1208 04e6 2795 ror r18
1209 04e8 3695 lsr r19
1210 04ea 2795 ror r18
1211 04ec 3093 0000 sts (AdNeutralNick)+1,r19
1212 04f0 2093 0000 sts AdNeutralNick,r18
1213 04f4 C601 movw r24,r12
1214 04f6 4096 adiw r24,16
1215 04f8 9695 lsr r25
1216 04fa 8795 ror r24
1217 04fc 9695 lsr r25
1218 04fe 8795 ror r24
1219 0500 9093 0000 sts (AdNeutralRoll)+1,r25
1220 0504 8093 0000 sts AdNeutralRoll,r24
1221 0508 6096 adiw r28,16
1222 050a F5E0 ldi r31,5
1223 050c D695 1: lsr r29
1224 050e C795 ror r28
1225 0510 FA95 dec r31
1226 0512 01F4 brne 1b
1227 0514 D093 0000 sts (AdNeutralGier)+1,r29
1228 0518 C093 0000 sts AdNeutralGier,r28
1229 051c 9093 0000 sts (StartNeutralRoll)+1,r25
1230 0520 8093 0000 sts StartNeutralRoll,r24
1231 0524 3093 0000 sts (StartNeutralNick)+1,r19
1232 0528 2093 0000 sts StartNeutralNick,r18
1233 052c 8820 tst r8
1234 052e 01F4 brne .+2
1235 0530 00C0 rjmp .L58
1236 0532 8091 0000 lds r24,Mittelwert_AccNick
1237 0536 9091 0000 lds r25,(Mittelwert_AccNick)+1
1238 053a 97FF sbrs r25,7
1239 053c 00C0 rjmp .L59
1240 053e 9095 com r25
1241 0540 8195 neg r24
1242 0542 9F4F sbci r25,lo8(-1)
1243 .L59:
1244 0544 6CE0 ldi r22,lo8(12)
1245 0546 70E0 ldi r23,hi8(12)
1246 0548 0E94 0000 call __divmodhi4
1247 054c 9B01 movw r18,r22
1248 054e 7093 0000 sts (NeutralAccX)+1,r23
1249 0552 6093 0000 sts NeutralAccX,r22
1250 0556 8091 0000 lds r24,Mittelwert_AccRoll
1251 055a 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1252 055e 97FF sbrs r25,7
1253 0560 00C0 rjmp .L60
1254 0562 9095 com r25
1255 0564 8195 neg r24
1256 0566 9F4F sbci r25,lo8(-1)
1257 .L60:
1258 0568 6CE0 ldi r22,lo8(12)
1259 056a 70E0 ldi r23,hi8(12)
1260 056c 0E94 0000 call __divmodhi4
1261 0570 7093 0000 sts (NeutralAccY)+1,r23
1262 0574 6093 0000 sts NeutralAccY,r22
1263 0578 8091 0000 lds r24,Aktuell_az
1264 057c 9091 0000 lds r25,(Aktuell_az)+1
1265 0580 9093 0000 sts (NeutralAccZ)+1,r25
1266 0584 8093 0000 sts NeutralAccZ,r24
1267 0588 B901 movw r22,r18
1268 058a 84E0 ldi r24,lo8(4)
1269 058c 90E0 ldi r25,hi8(4)
1270 058e 0E94 0000 call SetParamWord
1271 0592 6091 0000 lds r22,NeutralAccY
1272 0596 7091 0000 lds r23,(NeutralAccY)+1
1273 059a 86E0 ldi r24,lo8(6)
1274 059c 90E0 ldi r25,hi8(6)
1275 059e 0E94 0000 call SetParamWord
1276 05a2 6091 0000 lds r22,NeutralAccZ
1277 05a6 7091 0000 lds r23,(NeutralAccZ)+1
1278 05aa 88E0 ldi r24,lo8(8)
1279 05ac 90E0 ldi r25,hi8(8)
1280 05ae 0E94 0000 call SetParamWord
1281 05b2 00C0 rjmp .L61
1282 .L58:
1283 05b4 84E0 ldi r24,lo8(4)
1284 05b6 90E0 ldi r25,hi8(4)
1285 05b8 0E94 0000 call GetParamWord
1286 05bc 9093 0000 sts (NeutralAccX)+1,r25
1287 05c0 8093 0000 sts NeutralAccX,r24
1288 05c4 86E0 ldi r24,lo8(6)
1289 05c6 90E0 ldi r25,hi8(6)
1290 05c8 0E94 0000 call GetParamWord
1291 05cc 9093 0000 sts (NeutralAccY)+1,r25
1292 05d0 8093 0000 sts NeutralAccY,r24
1293 05d4 88E0 ldi r24,lo8(8)
1294 05d6 90E0 ldi r25,hi8(8)
1295 05d8 0E94 0000 call GetParamWord
1296 05dc 9C01 movw r18,r24
1297 05de 9093 0000 sts (NeutralAccZ)+1,r25
1298 05e2 8093 0000 sts NeutralAccZ,r24
1299 05e6 8091 0000 lds r24,NeutralAccX
1300 05ea 9091 0000 lds r25,(NeutralAccX)+1
1301 05ee 8150 subi r24,lo8(2049)
1302 05f0 9840 sbci r25,hi8(2049)
1303 05f2 00F4 brsh .L63
1304 05f4 8091 0000 lds r24,NeutralAccY
1305 05f8 9091 0000 lds r25,(NeutralAccY)+1
1306 05fc 8150 subi r24,lo8(2049)
1307 05fe 9840 sbci r25,hi8(2049)
1308 0600 00F4 brsh .L63
1309 0602 2150 subi r18,lo8(1025)
1310 0604 3440 sbci r19,hi8(1025)
1311 0606 00F0 brlo .L61
1312 .L63:
1313 0608 80E0 ldi r24,lo8(__c.35)
1314 060a 90E0 ldi r25,hi8(__c.35)
1315 060c 9F93 push r25
1316 060e 8F93 push r24
1317 0610 80E0 ldi r24,lo8(pm(uart_putchar))
1318 0612 90E0 ldi r25,hi8(pm(uart_putchar))
1319 0614 9F93 push r25
1320 0616 8F93 push r24
1321 0618 E091 0000 lds r30,_printf_P
1322 061c F091 0000 lds r31,(_printf_P)+1
1323 0620 0995 icall
1324 0622 8091 0000 lds r24,Mittelwert_AccNick
1325 0626 9091 0000 lds r25,(Mittelwert_AccNick)+1
1326 062a 97FF sbrs r25,7
1327 062c 00C0 rjmp .L64
1328 062e 9095 com r25
1329 0630 8195 neg r24
1330 0632 9F4F sbci r25,lo8(-1)
1331 .L64:
1332 0634 6CE0 ldi r22,lo8(12)
1333 0636 70E0 ldi r23,hi8(12)
1334 0638 0E94 0000 call __divmodhi4
1335 063c 7093 0000 sts (NeutralAccX)+1,r23
1336 0640 6093 0000 sts NeutralAccX,r22
1337 0644 8091 0000 lds r24,Mittelwert_AccRoll
1338 0648 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1339 064c 97FF sbrs r25,7
1340 064e 00C0 rjmp .L65
1341 0650 9095 com r25
1342 0652 8195 neg r24
1343 0654 9F4F sbci r25,lo8(-1)
1344 .L65:
1345 0656 6CE0 ldi r22,lo8(12)
1346 0658 70E0 ldi r23,hi8(12)
1347 065a 0E94 0000 call __divmodhi4
1348 065e 7093 0000 sts (NeutralAccY)+1,r23
1349 0662 6093 0000 sts NeutralAccY,r22
1350 0666 8091 0000 lds r24,Aktuell_az
1351 066a 9091 0000 lds r25,(Aktuell_az)+1
1352 066e 9093 0000 sts (NeutralAccZ)+1,r25
1353 0672 8093 0000 sts NeutralAccZ,r24
1354 0676 0F90 pop __tmp_reg__
1355 0678 0F90 pop __tmp_reg__
1356 067a 0F90 pop __tmp_reg__
1357 067c 0F90 pop __tmp_reg__
1358 .L61:
1359 067e 1092 0000 sts (MesswertNick)+1,__zero_reg__
1360 0682 1092 0000 sts MesswertNick,__zero_reg__
1361 0686 1092 0000 sts (MesswertRoll)+1,__zero_reg__
1362 068a 1092 0000 sts MesswertRoll,__zero_reg__
1363 068e 1092 0000 sts (MesswertGier)+1,__zero_reg__
1364 0692 1092 0000 sts MesswertGier,__zero_reg__
1365 0696 84E6 ldi r24,lo8(100)
1366 0698 90E0 ldi r25,hi8(100)
1367 069a 0E94 0000 call Delay_ms_Mess
1368 069e 8091 0000 lds r24,AdWertAccNick
1369 06a2 9091 0000 lds r25,(AdWertAccNick)+1
1370 06a6 9C01 movw r18,r24
1371 06a8 220F lsl r18
1372 06aa 331F rol r19
1373 06ac 220F lsl r18
1374 06ae 331F rol r19
1375 06b0 280F add r18,r24
1376 06b2 391F adc r19,r25
1377 06b4 280F add r18,r24
1378 06b6 391F adc r19,r25
1379 06b8 3093 0000 sts (Mittelwert_AccNick)+1,r19
1380 06bc 2093 0000 sts Mittelwert_AccNick,r18
1381 06c0 8091 0000 lds r24,AdWertAccRoll
1382 06c4 9091 0000 lds r25,(AdWertAccRoll)+1
1383 06c8 8C01 movw r16,r24
1384 06ca 000F lsl r16
1385 06cc 111F rol r17
1386 06ce 000F lsl r16
1387 06d0 111F rol r17
1388 06d2 080F add r16,r24
1389 06d4 191F adc r17,r25
1390 06d6 080F add r16,r24
1391 06d8 191F adc r17,r25
1392 06da 1093 0000 sts (Mittelwert_AccRoll)+1,r17
1393 06de 0093 0000 sts Mittelwert_AccRoll,r16
1394 06e2 8091 0000 lds r24,EE_Parameter+28
1395 06e6 C82E mov r12,r24
1396 06e8 DD24 clr r13
1397 06ea EE24 clr r14
1398 06ec FF24 clr r15
1399 06ee 4427 clr r20
1400 06f0 37FD sbrc r19,7
1401 06f2 4095 com r20
1402 06f4 542F mov r21,r20
1403 06f6 C701 movw r24,r14
1404 06f8 B601 movw r22,r12
1405 06fa 0E94 0000 call __mulsi3
1406 06fe 4B01 movw r8,r22
1407 0700 5C01 movw r10,r24
1408 0702 6093 0000 sts IntegralNick,r22
1409 0706 7093 0000 sts (IntegralNick)+1,r23
1410 070a 8093 0000 sts (IntegralNick)+2,r24
1411 070e 9093 0000 sts (IntegralNick)+3,r25
1412 0712 9801 movw r18,r16
1413 0714 4427 clr r20
1414 0716 37FD sbrc r19,7
1415 0718 4095 com r20
1416 071a 542F mov r21,r20
1417 071c C701 movw r24,r14
1418 071e B601 movw r22,r12
1419 0720 0E94 0000 call __mulsi3
1420 0724 DC01 movw r26,r24
1421 0726 CB01 movw r24,r22
1422 0728 8093 0000 sts IntegralRoll,r24
1423 072c 9093 0000 sts (IntegralRoll)+1,r25
1424 0730 A093 0000 sts (IntegralRoll)+2,r26
1425 0734 B093 0000 sts (IntegralRoll)+3,r27
1426 0738 8092 0000 sts Mess_IntegralNick,r8
1427 073c 9092 0000 sts (Mess_IntegralNick)+1,r9
1428 0740 A092 0000 sts (Mess_IntegralNick)+2,r10
1429 0744 B092 0000 sts (Mess_IntegralNick)+3,r11
1430 0748 8093 0000 sts Mess_IntegralRoll,r24
1431 074c 9093 0000 sts (Mess_IntegralRoll)+1,r25
1432 0750 A093 0000 sts (Mess_IntegralRoll)+2,r26
1433 0754 B093 0000 sts (Mess_IntegralRoll)+3,r27
1434 0758 1092 0000 sts Mess_Integral_Gier,__zero_reg__
1435 075c 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
1436 0760 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
1437 0764 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
1438 0768 8091 0000 lds r24,Luftdruck
1439 076c 9091 0000 lds r25,(Luftdruck)+1
1440 0770 A091 0000 lds r26,(Luftdruck)+2
1441 0774 B091 0000 lds r27,(Luftdruck)+3
1442 0778 9093 0000 sts (StartLuftdruck)+1,r25
1443 077c 8093 0000 sts StartLuftdruck,r24
1444 0780 1092 0000 sts (VarioMeter)+1,__zero_reg__
1445 0784 1092 0000 sts VarioMeter,__zero_reg__
1446 0788 1092 0000 sts Mess_Integral_Hoch,__zero_reg__
1447 078c 1092 0000 sts (Mess_Integral_Hoch)+1,__zero_reg__
1448 0790 1092 0000 sts (Mess_Integral_Hoch)+2,__zero_reg__
1449 0794 1092 0000 sts (Mess_Integral_Hoch)+3,__zero_reg__
1450 0798 0091 0000 lds r16,KompassValue
1451 079c 1091 0000 lds r17,(KompassValue)+1
1452 07a0 1093 0000 sts (KompassSollWert)+1,r17
1453 07a4 0093 0000 sts KompassSollWert,r16
1454 07a8 84E6 ldi r24,lo8(100)
1455 07aa 90E0 ldi r25,hi8(100)
1456 07ac 9093 0000 sts (KompassSignalSchlecht)+1,r25
1457 07b0 8093 0000 sts KompassSignalSchlecht,r24
1458 07b4 82E3 ldi r24,lo8(50)
1459 07b6 90E0 ldi r25,hi8(50)
1460 07b8 9093 0000 sts (beeptime)+1,r25
1461 07bc 8093 0000 sts beeptime,r24
1462 07c0 8091 0000 lds r24,EE_Parameter+65
1463 07c4 9927 clr r25
1464 07c6 AA27 clr r26
1465 07c8 BB27 clr r27
1466 07ca BC01 movw r22,r24
1467 07cc CD01 movw r24,r26
1468 07ce 24EC ldi r18,lo8(2500)
1469 07d0 39E0 ldi r19,hi8(2500)
1470 07d2 40E0 ldi r20,hlo8(2500)
1471 07d4 50E0 ldi r21,hhi8(2500)
1472 07d6 0E94 0000 call __mulsi3
1473 07da DC01 movw r26,r24
1474 07dc CB01 movw r24,r22
1475 07de 8856 subi r24,lo8(-(15000))
1476 07e0 954C sbci r25,hi8(-(15000))
1477 07e2 AF4F sbci r26,hlo8(-(15000))
1478 07e4 BF4F sbci r27,hhi8(-(15000))
1479 07e6 8093 0000 sts Umschlag180Nick,r24
1480 07ea 9093 0000 sts (Umschlag180Nick)+1,r25
1481 07ee A093 0000 sts (Umschlag180Nick)+2,r26
1482 07f2 B093 0000 sts (Umschlag180Nick)+3,r27
1483 07f6 8091 0000 lds r24,EE_Parameter+66
1484 07fa 9927 clr r25
1485 07fc AA27 clr r26
1486 07fe BB27 clr r27
1487 0800 BC01 movw r22,r24
1488 0802 CD01 movw r24,r26
1489 0804 0E94 0000 call __mulsi3
1490 0808 DC01 movw r26,r24
1491 080a CB01 movw r24,r22
1492 080c 8856 subi r24,lo8(-(15000))
1493 080e 954C sbci r25,hi8(-(15000))
1494 0810 AF4F sbci r26,hlo8(-(15000))
1495 0812 BF4F sbci r27,hhi8(-(15000))
1496 0814 8093 0000 sts Umschlag180Roll,r24
1497 0818 9093 0000 sts (Umschlag180Roll)+1,r25
1498 081c A093 0000 sts (Umschlag180Roll)+2,r26
1499 0820 B093 0000 sts (Umschlag180Roll)+3,r27
1500 0824 1092 0000 sts (ExternHoehenValue)+1,__zero_reg__
1501 0828 1092 0000 sts ExternHoehenValue,__zero_reg__
1502 082c C801 movw r24,r16
1503 082e AA27 clr r26
1504 0830 97FD sbrc r25,7
1505 0832 A095 com r26
1506 0834 BA2F mov r27,r26
1507 0836 2091 0000 lds r18,GIER_GRAD_FAKTOR
1508 083a 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
1509 083e 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
1510 0842 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
1511 0846 BC01 movw r22,r24
1512 0848 CD01 movw r24,r26
1513 084a 0E94 0000 call __mulsi3
1514 084e DC01 movw r26,r24
1515 0850 CB01 movw r24,r22
1516 0852 8093 0000 sts ErsatzKompass,r24
1517 0856 9093 0000 sts (ErsatzKompass)+1,r25
1518 085a A093 0000 sts (ErsatzKompass)+2,r26
1519 085e B093 0000 sts (ErsatzKompass)+3,r27
1520 0862 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
1521 0866 1092 0000 sts GierGyroFehler,__zero_reg__
1522 086a 0E94 0000 call LED_Init
1523 086e 8091 0000 lds r24,FC_StatusFlags
1524 0872 8460 ori r24,lo8(4)
1525 0874 8093 0000 sts FC_StatusFlags,r24
1526 0878 8FEF ldi r24,lo8(-1)
1527 087a 8093 0000 sts FromNaviCtrl_Value,r24
1528 087e 1092 0000 sts FromNaviCtrl_Value+1,__zero_reg__
1529 0882 80E2 ldi r24,lo8(32)
1530 0884 8093 0000 sts FromNaviCtrl_Value+2,r24
1531 0888 C0E0 ldi r28,lo8(Poti)
1532 088a D0E0 ldi r29,hi8(Poti)
1533 088c A0E0 ldi r26,lo8(EE_Parameter+5)
1534 088e B0E0 ldi r27,hi8(EE_Parameter+5)
1535 0890 07E0 ldi r16,lo8(7)
1536 .L69:
1537 0892 8D91 ld r24,X+
1538 0894 E82F mov r30,r24
1539 0896 FF27 clr r31
1540 0898 EE0F add r30,r30
1541 089a FF1F adc r31,r31
1542 089c E050 subi r30,lo8(-(PPM_in))
1543 089e F040 sbci r31,hi8(-(PPM_in))
1544 08a0 8081 ld r24,Z
1545 08a2 9181 ldd r25,Z+1
1546 08a4 8158 subi r24,lo8(-(127))
1547 08a6 8993 st Y+,r24
1548 08a8 0150 subi r16,lo8(-(-1))
1549 08aa 07FF sbrs r16,7
1550 08ac 00C0 rjmp .L69
1551 08ae 84E6 ldi r24,lo8(100)
1552 08b0 8093 0000 sts SenderOkay,r24
1553 08b4 8091 0000 lds r24,ServoActive
1554 08b8 8823 tst r24
1555 08ba 01F0 breq .L70
1556 08bc 579A sbi 42-0x20,7
1557 08be 00C0 rjmp .L71
1558 .L70:
1559 08c0 80E0 ldi r24,lo8(4352)
1560 08c2 91E1 ldi r25,hi8(4352)
1561 08c4 9093 0000 sts (NickServoValue)+1,r25
1562 08c8 8093 0000 sts NickServoValue,r24
1563 .L71:
1564 08cc 8091 0000 lds r24,AdNeutralNick
1565 08d0 9091 0000 lds r25,(AdNeutralNick)+1
1566 08d4 8056 subi r24,lo8(-(-2400))
1567 08d6 9940 sbci r25,hi8(-(-2400))
1568 08d8 815C subi r24,lo8(11201)
1569 08da 9B42 sbci r25,hi8(11201)
1570 08dc 00F0 brlo .L72
1571 08de 8091 0000 lds r24,VersionInfo+5
1572 08e2 8160 ori r24,lo8(1)
1573 08e4 8093 0000 sts VersionInfo+5,r24
1574 .L72:
1575 08e8 8091 0000 lds r24,AdNeutralRoll
1576 08ec 9091 0000 lds r25,(AdNeutralRoll)+1
1577 08f0 8056 subi r24,lo8(-(-2400))
1578 08f2 9940 sbci r25,hi8(-(-2400))
1579 08f4 815C subi r24,lo8(11201)
1580 08f6 9B42 sbci r25,hi8(11201)
1581 08f8 00F0 brlo .L73
1582 08fa 8091 0000 lds r24,VersionInfo+5
1583 08fe 8260 ori r24,lo8(2)
1584 0900 8093 0000 sts VersionInfo+5,r24
1585 .L73:
1586 0904 8091 0000 lds r24,AdNeutralGier
1587 0908 9091 0000 lds r25,(AdNeutralGier)+1
1588 090c 8C52 subi r24,lo8(-(-300))
1589 090e 9140 sbci r25,hi8(-(-300))
1590 0910 8957 subi r24,lo8(1401)
1591 0912 9540 sbci r25,hi8(1401)
1592 0914 00F0 brlo .L74
1593 0916 8091 0000 lds r24,VersionInfo+5
1594 091a 8460 ori r24,lo8(4)
1595 091c 8093 0000 sts VersionInfo+5,r24
1596 .L74:
1597 0920 8091 0000 lds r24,NeutralAccX
1598 0924 9091 0000 lds r25,(NeutralAccX)+1
1599 0928 8C52 subi r24,lo8(-(-300))
1600 092a 9140 sbci r25,hi8(-(-300))
1601 092c 835C subi r24,lo8(451)
1602 092e 9140 sbci r25,hi8(451)
1603 0930 00F0 brlo .L75
1604 0932 8091 0000 lds r24,VersionInfo+5
1605 0936 8860 ori r24,lo8(8)
1606 0938 8093 0000 sts VersionInfo+5,r24
1607 .L75:
1608 093c 8091 0000 lds r24,NeutralAccY
1609 0940 9091 0000 lds r25,(NeutralAccY)+1
1610 0944 8C52 subi r24,lo8(-(-300))
1611 0946 9140 sbci r25,hi8(-(-300))
1612 0948 835C subi r24,lo8(451)
1613 094a 9140 sbci r25,hi8(451)
1614 094c 00F0 brlo .L76
1615 094e 8091 0000 lds r24,VersionInfo+5
1616 0952 8061 ori r24,lo8(16)
1617 0954 8093 0000 sts VersionInfo+5,r24
1618 .L76:
1619 0958 8091 0000 lds r24,NeutralAccZ
1620 095c 9091 0000 lds r25,(NeutralAccZ)+1
1621 0960 8050 subi r24,lo8(-(-512))
1622 0962 9240 sbci r25,hi8(-(-512))
1623 0964 8355 subi r24,lo8(339)
1624 0966 9140 sbci r25,hi8(339)
1625 0968 00F0 brlo .L77
1626 096a 8091 0000 lds r24,VersionInfo+5
1627 096e 8062 ori r24,lo8(32)
1628 0970 8093 0000 sts VersionInfo+5,r24
1629 .L77:
1630 0974 86E4 ldi r24,lo8(70)
1631 0976 8093 0000 sts carefree_old,r24
1632 097a 0E94 0000 call LIBFC_HoTT_Clear
1633 /* epilogue: frame size=0 */
1634 097e ECE0 ldi r30,12
1635 0980 CDB7 in r28,__SP_L__
1636 0982 DEB7 in r29,__SP_H__
1637 0984 0C94 0000 jmp __epilogue_restores__+12
1638 /* epilogue end (size=5) */
1639 /* function SetNeutral size 705 (694) */
1641 .lcomm tmpl.27,4
1642 .lcomm tmpl2.28,4
1643 .lcomm tmpl3.29,4
1644 .lcomm tmpl4.30,4
1645 .lcomm oldNick.31,2
1646 .lcomm oldRoll.32,2
1647 .lcomm d2Roll.33,2
1648 .lcomm d2Nick.34,2
1649 .global Mittelwert
1651 Mittelwert:
1652 /* prologue: frame size=19 */
1653 0988 A3E1 ldi r26,lo8(19)
1654 098a B0E0 ldi r27,hi8(19)
1655 098c E0E0 ldi r30,pm_lo8(1f)
1656 098e F0E0 ldi r31,pm_hi8(1f)
1657 0990 0C94 0000 jmp __prologue_saves__+0
1658 1:
1659 /* prologue end (size=6) */
1660 0994 8091 0000 lds r24,AdNeutralGier
1661 0998 9091 0000 lds r25,(AdNeutralGier)+1
1662 099c 2091 0000 lds r18,AdWertGier
1663 09a0 3091 0000 lds r19,(AdWertGier)+1
1664 09a4 821B sub r24,r18
1665 09a6 930B sbc r25,r19
1666 09a8 9093 0000 sts (MesswertGier)+1,r25
1667 09ac 8093 0000 sts MesswertGier,r24
1668 09b0 8091 0000 lds r24,AdWertNickFilter
1669 09b4 9091 0000 lds r25,(AdWertNickFilter)+1
1670 09b8 97FD sbrc r25,7
1671 09ba 0796 adiw r24,7
1672 .L83:
1673 09bc 9C01 movw r18,r24
1674 09be 13E0 ldi r17,3
1675 09c0 3595 1: asr r19
1676 09c2 2795 ror r18
1677 09c4 1A95 dec r17
1678 09c6 01F4 brne 1b
1679 09c8 3093 0000 sts (MesswertNick)+1,r19
1680 09cc 2093 0000 sts MesswertNick,r18
1681 09d0 8091 0000 lds r24,AdWertRollFilter
1682 09d4 9091 0000 lds r25,(AdWertRollFilter)+1
1683 09d8 97FD sbrc r25,7
1684 09da 0796 adiw r24,7
1685 .L84:
1686 09dc B3E0 ldi r27,3
1687 09de 9595 1: asr r25
1688 09e0 8795 ror r24
1689 09e2 BA95 dec r27
1690 09e4 01F4 brne 1b
1691 09e6 9093 0000 sts (MesswertRoll)+1,r25
1692 09ea 8093 0000 sts MesswertRoll,r24
1693 09ee 3093 0000 sts (RohMesswertNick)+1,r19
1694 09f2 2093 0000 sts RohMesswertNick,r18
1695 09f6 9093 0000 sts (RohMesswertRoll)+1,r25
1696 09fa 8093 0000 sts RohMesswertRoll,r24
1697 09fe 8091 0000 lds r24,Mittelwert_AccNick
1698 0a02 9091 0000 lds r25,(Mittelwert_AccNick)+1
1699 0a06 AC01 movw r20,r24
1700 0a08 440F lsl r20
1701 0a0a 551F rol r21
1702 0a0c 480F add r20,r24
1703 0a0e 591F adc r21,r25
1704 0a10 2091 0000 lds r18,AdWertAccNick
1705 0a14 3091 0000 lds r19,(AdWertAccNick)+1
1706 0a18 C901 movw r24,r18
1707 0a1a 880F lsl r24
1708 0a1c 991F rol r25
1709 0a1e 880F lsl r24
1710 0a20 991F rol r25
1711 0a22 820F add r24,r18
1712 0a24 931F adc r25,r19
1713 0a26 820F add r24,r18
1714 0a28 931F adc r25,r19
1715 0a2a 480F add r20,r24
1716 0a2c 591F adc r21,r25
1717 0a2e 57FF sbrs r21,7
1718 0a30 00C0 rjmp .L85
1719 0a32 4D5F subi r20,lo8(-(3))
1720 0a34 5F4F sbci r21,hi8(-(3))
1721 .L85:
1722 0a36 5595 asr r21
1723 0a38 4795 ror r20
1724 0a3a 5595 asr r21
1725 0a3c 4795 ror r20
1726 0a3e 5093 0000 sts (Mittelwert_AccNick)+1,r21
1727 0a42 4093 0000 sts Mittelwert_AccNick,r20
1728 0a46 8091 0000 lds r24,Mittelwert_AccRoll
1729 0a4a 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1730 0a4e AC01 movw r20,r24
1731 0a50 440F lsl r20
1732 0a52 551F rol r21
1733 0a54 480F add r20,r24
1734 0a56 591F adc r21,r25
1735 0a58 2091 0000 lds r18,AdWertAccRoll
1736 0a5c 3091 0000 lds r19,(AdWertAccRoll)+1
1737 0a60 C901 movw r24,r18
1738 0a62 880F lsl r24
1739 0a64 991F rol r25
1740 0a66 880F lsl r24
1741 0a68 991F rol r25
1742 0a6a 820F add r24,r18
1743 0a6c 931F adc r25,r19
1744 0a6e 820F add r24,r18
1745 0a70 931F adc r25,r19
1746 0a72 480F add r20,r24
1747 0a74 591F adc r21,r25
1748 0a76 57FF sbrs r21,7
1749 0a78 00C0 rjmp .L86
1750 0a7a 4D5F subi r20,lo8(-(3))
1751 0a7c 5F4F sbci r21,hi8(-(3))
1752 .L86:
1753 0a7e 5595 asr r21
1754 0a80 4795 ror r20
1755 0a82 5595 asr r21
1756 0a84 4795 ror r20
1757 0a86 5093 0000 sts (Mittelwert_AccRoll)+1,r21
1758 0a8a 4093 0000 sts Mittelwert_AccRoll,r20
1759 0a8e 2091 0000 lds r18,AdWertAccNick
1760 0a92 3091 0000 lds r19,(AdWertAccNick)+1
1761 0a96 C901 movw r24,r18
1762 0a98 880F lsl r24
1763 0a9a 991F rol r25
1764 0a9c 880F lsl r24
1765 0a9e 991F rol r25
1766 0aa0 820F add r24,r18
1767 0aa2 931F adc r25,r19
1768 0aa4 820F add r24,r18
1769 0aa6 931F adc r25,r19
1770 0aa8 9C01 movw r18,r24
1771 0aaa 4427 clr r20
1772 0aac 37FD sbrc r19,7
1773 0aae 4095 com r20
1774 0ab0 542F mov r21,r20
1775 0ab2 8091 0000 lds r24,IntegralAccNick
1776 0ab6 9091 0000 lds r25,(IntegralAccNick)+1
1777 0aba A091 0000 lds r26,(IntegralAccNick)+2
1778 0abe B091 0000 lds r27,(IntegralAccNick)+3
1779 0ac2 820F add r24,r18
1780 0ac4 931F adc r25,r19
1781 0ac6 A41F adc r26,r20
1782 0ac8 B51F adc r27,r21
1783 0aca 8093 0000 sts IntegralAccNick,r24
1784 0ace 9093 0000 sts (IntegralAccNick)+1,r25
1785 0ad2 A093 0000 sts (IntegralAccNick)+2,r26
1786 0ad6 B093 0000 sts (IntegralAccNick)+3,r27
1787 0ada 2091 0000 lds r18,AdWertAccRoll
1788 0ade 3091 0000 lds r19,(AdWertAccRoll)+1
1789 0ae2 C901 movw r24,r18
1790 0ae4 880F lsl r24
1791 0ae6 991F rol r25
1792 0ae8 880F lsl r24
1793 0aea 991F rol r25
1794 0aec 820F add r24,r18
1795 0aee 931F adc r25,r19
1796 0af0 820F add r24,r18
1797 0af2 931F adc r25,r19
1798 0af4 9C01 movw r18,r24
1799 0af6 4427 clr r20
1800 0af8 37FD sbrc r19,7
1801 0afa 4095 com r20
1802 0afc 542F mov r21,r20
1803 0afe 8091 0000 lds r24,IntegralAccRoll
1804 0b02 9091 0000 lds r25,(IntegralAccRoll)+1
1805 0b06 A091 0000 lds r26,(IntegralAccRoll)+2
1806 0b0a B091 0000 lds r27,(IntegralAccRoll)+3
1807 0b0e 820F add r24,r18
1808 0b10 931F adc r25,r19
1809 0b12 A41F adc r26,r20
1810 0b14 B51F adc r27,r21
1811 0b16 8093 0000 sts IntegralAccRoll,r24
1812 0b1a 9093 0000 sts (IntegralAccRoll)+1,r25
1813 0b1e A093 0000 sts (IntegralAccRoll)+2,r26
1814 0b22 B093 0000 sts (IntegralAccRoll)+3,r27
1815 0b26 8091 0000 lds r24,NaviAccNick
1816 0b2a 9091 0000 lds r25,(NaviAccNick)+1
1817 0b2e 2091 0000 lds r18,AdWertAccNick
1818 0b32 3091 0000 lds r19,(AdWertAccNick)+1
1819 0b36 820F add r24,r18
1820 0b38 931F adc r25,r19
1821 0b3a 9093 0000 sts (NaviAccNick)+1,r25
1822 0b3e 8093 0000 sts NaviAccNick,r24
1823 0b42 8091 0000 lds r24,NaviAccRoll
1824 0b46 9091 0000 lds r25,(NaviAccRoll)+1
1825 0b4a 2091 0000 lds r18,AdWertAccRoll
1826 0b4e 3091 0000 lds r19,(AdWertAccRoll)+1
1827 0b52 820F add r24,r18
1828 0b54 931F adc r25,r19
1829 0b56 9093 0000 sts (NaviAccRoll)+1,r25
1830 0b5a 8093 0000 sts NaviAccRoll,r24
1831 0b5e 8091 0000 lds r24,NaviCntAcc
1832 0b62 9091 0000 lds r25,(NaviCntAcc)+1
1833 0b66 0196 adiw r24,1
1834 0b68 9093 0000 sts (NaviCntAcc)+1,r25
1835 0b6c 8093 0000 sts NaviCntAcc,r24
1836 0b70 8091 0000 lds r24,Aktuell_az
1837 0b74 9091 0000 lds r25,(Aktuell_az)+1
1838 0b78 2091 0000 lds r18,NeutralAccZ
1839 0b7c 3091 0000 lds r19,(NeutralAccZ)+1
1840 0b80 821B sub r24,r18
1841 0b82 930B sbc r25,r19
1842 0b84 9C01 movw r18,r24
1843 0b86 4427 clr r20
1844 0b88 37FD sbrc r19,7
1845 0b8a 4095 com r20
1846 0b8c 542F mov r21,r20
1847 0b8e 8091 0000 lds r24,IntegralAccZ
1848 0b92 9091 0000 lds r25,(IntegralAccZ)+1
1849 0b96 A091 0000 lds r26,(IntegralAccZ)+2
1850 0b9a B091 0000 lds r27,(IntegralAccZ)+3
1851 0b9e 820F add r24,r18
1852 0ba0 931F adc r25,r19
1853 0ba2 A41F adc r26,r20
1854 0ba4 B51F adc r27,r21
1855 0ba6 8093 0000 sts IntegralAccZ,r24
1856 0baa 9093 0000 sts (IntegralAccZ)+1,r25
1857 0bae A093 0000 sts (IntegralAccZ)+2,r26
1858 0bb2 B093 0000 sts (IntegralAccZ)+3,r27
1859 0bb6 8FEC ldi r24,lo8(-49)
1860 0bb8 8093 7A00 sts 122,r24
1861 0bbc 1092 0000 sts AdReady,__zero_reg__
1862 0bc0 2091 0000 lds r18,Mess_IntegralRoll
1863 0bc4 3091 0000 lds r19,(Mess_IntegralRoll)+1
1864 0bc8 4091 0000 lds r20,(Mess_IntegralRoll)+2
1865 0bcc 5091 0000 lds r21,(Mess_IntegralRoll)+3
1866 0bd0 2987 std Y+9,r18
1867 0bd2 3A87 std Y+10,r19
1868 0bd4 4B87 std Y+11,r20
1869 0bd6 5C87 std Y+12,r21
1870 0bd8 2954 subi r18,lo8(93001)
1871 0bda 3B46 sbci r19,hi8(93001)
1872 0bdc 4140 sbci r20,hlo8(93001)
1873 0bde 5040 sbci r21,hhi8(93001)
1874 0be0 04F0 brlt .L87
1875 0be2 28E4 ldi r18,lo8(93000)
1876 0be4 3BE6 ldi r19,hi8(93000)
1877 0be6 41E0 ldi r20,hlo8(93000)
1878 0be8 50E0 ldi r21,hhi8(93000)
1879 0bea 00C0 rjmp .L167
1880 .L87:
1881 0bec 8985 ldd r24,Y+9
1882 0bee 9A85 ldd r25,Y+10
1883 0bf0 AB85 ldd r26,Y+11
1884 0bf2 BC85 ldd r27,Y+12
1885 0bf4 885B subi r24,lo8(-93000)
1886 0bf6 9449 sbci r25,hi8(-93000)
1887 0bf8 AE4F sbci r26,hlo8(-93000)
1888 0bfa BF4F sbci r27,hhi8(-93000)
1889 0bfc 04F4 brge .L89
1890 0bfe 28EB ldi r18,lo8(-93000)
1891 0c00 34E9 ldi r19,hi8(-93000)
1892 0c02 4EEF ldi r20,hlo8(-93000)
1893 0c04 5FEF ldi r21,hhi8(-93000)
1894 .L167:
1895 0c06 2D83 std Y+5,r18
1896 0c08 3E83 std Y+6,r19
1897 0c0a 4F83 std Y+7,r20
1898 0c0c 5887 std Y+8,r21
1899 0c0e 00C0 rjmp .L88
1900 .L89:
1901 0c10 8985 ldd r24,Y+9
1902 0c12 9A85 ldd r25,Y+10
1903 0c14 AB85 ldd r26,Y+11
1904 0c16 BC85 ldd r27,Y+12
1905 0c18 8D83 std Y+5,r24
1906 0c1a 9E83 std Y+6,r25
1907 0c1c AF83 std Y+7,r26
1908 0c1e B887 std Y+8,r27
1909 .L88:
1910 0c20 2091 0000 lds r18,Mess_IntegralNick
1911 0c24 3091 0000 lds r19,(Mess_IntegralNick)+1
1912 0c28 4091 0000 lds r20,(Mess_IntegralNick)+2
1913 0c2c 5091 0000 lds r21,(Mess_IntegralNick)+3
1914 0c30 2D87 std Y+13,r18
1915 0c32 3E87 std Y+14,r19
1916 0c34 4F87 std Y+15,r20
1917 0c36 588B std Y+16,r21
1918 0c38 2954 subi r18,lo8(93001)
1919 0c3a 3B46 sbci r19,hi8(93001)
1920 0c3c 4140 sbci r20,hlo8(93001)
1921 0c3e 5040 sbci r21,hhi8(93001)
1922 0c40 04F0 brlt .L91
1923 0c42 28E4 ldi r18,lo8(93000)
1924 0c44 3BE6 ldi r19,hi8(93000)
1925 0c46 41E0 ldi r20,hlo8(93000)
1926 0c48 50E0 ldi r21,hhi8(93000)
1927 0c4a 00C0 rjmp .L168
1928 .L91:
1929 0c4c 8D85 ldd r24,Y+13
1930 0c4e 9E85 ldd r25,Y+14
1931 0c50 AF85 ldd r26,Y+15
1932 0c52 B889 ldd r27,Y+16
1933 0c54 885B subi r24,lo8(-93000)
1934 0c56 9449 sbci r25,hi8(-93000)
1935 0c58 AE4F sbci r26,hlo8(-93000)
1936 0c5a BF4F sbci r27,hhi8(-93000)
1937 0c5c 04F4 brge .L93
1938 0c5e 28EB ldi r18,lo8(-93000)
1939 0c60 34E9 ldi r19,hi8(-93000)
1940 0c62 4EEF ldi r20,hlo8(-93000)
1941 0c64 5FEF ldi r21,hhi8(-93000)
1942 .L168:
1943 0c66 2983 std Y+1,r18
1944 0c68 3A83 std Y+2,r19
1945 0c6a 4B83 std Y+3,r20
1946 0c6c 5C83 std Y+4,r21
1947 0c6e 00C0 rjmp .L92
1948 .L93:
1949 0c70 8D85 ldd r24,Y+13
1950 0c72 9E85 ldd r25,Y+14
1951 0c74 AF85 ldd r26,Y+15
1952 0c76 B889 ldd r27,Y+16
1953 0c78 8983 std Y+1,r24
1954 0c7a 9A83 std Y+2,r25
1955 0c7c AB83 std Y+3,r26
1956 0c7e BC83 std Y+4,r27
1957 .L92:
1958 0c80 A091 0000 lds r26,MesswertGier
1959 0c84 B091 0000 lds r27,(MesswertGier)+1
1960 0c88 BB8B std Y+19,r27
1961 0c8a AA8B std Y+18,r26
1962 0c8c FD01 movw r30,r26
1963 0c8e CF01 movw r24,r30
1964 0c90 AA27 clr r26
1965 0c92 97FD sbrc r25,7
1966 0c94 A095 com r26
1967 0c96 BA2F mov r27,r26
1968 0c98 A090 0000 lds r10,Mess_Integral_Gier
1969 0c9c B090 0000 lds r11,(Mess_Integral_Gier)+1
1970 0ca0 C090 0000 lds r12,(Mess_Integral_Gier)+2
1971 0ca4 D090 0000 lds r13,(Mess_Integral_Gier)+3
1972 0ca8 A80E add r10,r24
1973 0caa B91E adc r11,r25
1974 0cac CA1E adc r12,r26
1975 0cae DB1E adc r13,r27
1976 0cb0 A092 0000 sts Mess_Integral_Gier,r10
1977 0cb4 B092 0000 sts (Mess_Integral_Gier)+1,r11
1978 0cb8 C092 0000 sts (Mess_Integral_Gier)+2,r12
1979 0cbc D092 0000 sts (Mess_Integral_Gier)+3,r13
1980 0cc0 E090 0000 lds r14,ErsatzKompass
1981 0cc4 F090 0000 lds r15,(ErsatzKompass)+1
1982 0cc8 0091 0000 lds r16,(ErsatzKompass)+2
1983 0ccc 1091 0000 lds r17,(ErsatzKompass)+3
1984 0cd0 E80E add r14,r24
1985 0cd2 F91E adc r15,r25
1986 0cd4 0A1F adc r16,r26
1987 0cd6 1B1F adc r17,r27
1988 0cd8 E092 0000 sts ErsatzKompass,r14
1989 0cdc F092 0000 sts (ErsatzKompass)+1,r15
1990 0ce0 0093 0000 sts (ErsatzKompass)+2,r16
1991 0ce4 1093 0000 sts (ErsatzKompass)+3,r17
1992 0ce8 F091 0000 lds r31,Looping_Nick
1993 0cec F98B std Y+17,r31
1994 0cee FF23 tst r31
1995 0cf0 01F0 breq .+2
1996 0cf2 00C0 rjmp .L95
1997 0cf4 8091 0000 lds r24,Looping_Roll
1998 0cf8 8823 tst r24
1999 0cfa 01F0 breq .+2
2000 0cfc 00C0 rjmp .L95
2001 0cfe 8091 0000 lds r24,Parameter_GlobalConfig
2002 0d02 86FF sbrs r24,6
2003 0d04 00C0 rjmp .L95
2004 0d06 8091 0000 lds r24,MesswertRoll
2005 0d0a 9091 0000 lds r25,(MesswertRoll)+1
2006 0d0e AA27 clr r26
2007 0d10 97FD sbrc r25,7
2008 0d12 A095 com r26
2009 0d14 BA2F mov r27,r26
2010 0d16 BC01 movw r22,r24
2011 0d18 CD01 movw r24,r26
2012 0d1a 2981 ldd r18,Y+1
2013 0d1c 3A81 ldd r19,Y+2
2014 0d1e 4B81 ldd r20,Y+3
2015 0d20 5C81 ldd r21,Y+4
2016 0d22 0E94 0000 call __mulsi3
2017 0d26 9B01 movw r18,r22
2018 0d28 AC01 movw r20,r24
2019 0d2a 97FF sbrs r25,7
2020 0d2c 00C0 rjmp .L96
2021 0d2e 2150 subi r18,lo8(-(2047))
2022 0d30 384F sbci r19,hi8(-(2047))
2023 0d32 4F4F sbci r20,hlo8(-(2047))
2024 0d34 5F4F sbci r21,hhi8(-(2047))
2025 .L96:
2026 0d36 BBE0 ldi r27,11
2027 0d38 5595 1: asr r21
2028 0d3a 4795 ror r20
2029 0d3c 3795 ror r19
2030 0d3e 2795 ror r18
2031 0d40 BA95 dec r27
2032 0d42 01F4 brne 1b
2033 0d44 8091 0000 lds r24,Parameter_AchsKopplung2
2034 0d48 682E mov r6,r24
2035 0d4a 7724 clr r7
2036 0d4c 8824 clr r8
2037 0d4e 9924 clr r9
2038 0d50 CA01 movw r24,r20
2039 0d52 B901 movw r22,r18
2040 0d54 A401 movw r20,r8
2041 0d56 9301 movw r18,r6
2042 0d58 0E94 0000 call __mulsi3
2043 0d5c DC01 movw r26,r24
2044 0d5e CB01 movw r24,r22
2045 0d60 8093 0000 sts tmpl3.29,r24
2046 0d64 9093 0000 sts (tmpl3.29)+1,r25
2047 0d68 A093 0000 sts (tmpl3.29)+2,r26
2048 0d6c B093 0000 sts (tmpl3.29)+3,r27
2049 0d70 B7FF sbrs r27,7
2050 0d72 00C0 rjmp .L97
2051 0d74 8150 subi r24,lo8(-(4095))
2052 0d76 904F sbci r25,hi8(-(4095))
2053 0d78 AF4F sbci r26,hlo8(-(4095))
2054 0d7a BF4F sbci r27,hhi8(-(4095))
2055 .L97:
2056 0d7c 1C01 movw r2,r24
2057 0d7e 2D01 movw r4,r26
2058 0d80 ACE0 ldi r26,12
2059 0d82 5594 1: asr r5
2060 0d84 4794 ror r4
2061 0d86 3794 ror r3
2062 0d88 2794 ror r2
2063 0d8a AA95 dec r26
2064 0d8c 01F4 brne 1b
2065 0d8e 2092 0000 sts tmpl3.29,r2
2066 0d92 3092 0000 sts (tmpl3.29)+1,r3
2067 0d96 4092 0000 sts (tmpl3.29)+2,r4
2068 0d9a 5092 0000 sts (tmpl3.29)+3,r5
2069 0d9e 8091 0000 lds r24,MesswertNick
2070 0da2 9091 0000 lds r25,(MesswertNick)+1
2071 0da6 AA27 clr r26
2072 0da8 97FD sbrc r25,7
2073 0daa A095 com r26
2074 0dac BA2F mov r27,r26
2075 0dae BC01 movw r22,r24
2076 0db0 CD01 movw r24,r26
2077 0db2 2D81 ldd r18,Y+5
2078 0db4 3E81 ldd r19,Y+6
2079 0db6 4F81 ldd r20,Y+7
2080 0db8 5885 ldd r21,Y+8
2081 0dba 0E94 0000 call __mulsi3
2082 0dbe 97FF sbrs r25,7
2083 0dc0 00C0 rjmp .L98
2084 0dc2 6150 subi r22,lo8(-(2047))
2085 0dc4 784F sbci r23,hi8(-(2047))
2086 0dc6 8F4F sbci r24,hlo8(-(2047))
2087 0dc8 9F4F sbci r25,hhi8(-(2047))
2088 .L98:
2089 0dca FBE0 ldi r31,11
2090 0dcc 9595 1: asr r25
2091 0dce 8795 ror r24
2092 0dd0 7795 ror r23
2093 0dd2 6795 ror r22
2094 0dd4 FA95 dec r31
2095 0dd6 01F4 brne 1b
2096 0dd8 A401 movw r20,r8
2097 0dda 9301 movw r18,r6
2098 0ddc 0E94 0000 call __mulsi3
2099 0de0 DC01 movw r26,r24
2100 0de2 CB01 movw r24,r22
2101 0de4 8093 0000 sts tmpl4.30,r24
2102 0de8 9093 0000 sts (tmpl4.30)+1,r25
2103 0dec A093 0000 sts (tmpl4.30)+2,r26
2104 0df0 B093 0000 sts (tmpl4.30)+3,r27
2105 0df4 B7FF sbrs r27,7
2106 0df6 00C0 rjmp .L99
2107 0df8 8150 subi r24,lo8(-(4095))
2108 0dfa 904F sbci r25,hi8(-(4095))
2109 0dfc AF4F sbci r26,hlo8(-(4095))
2110 0dfe BF4F sbci r27,hhi8(-(4095))
2111 .L99:
2112 0e00 9C01 movw r18,r24
2113 0e02 AD01 movw r20,r26
2114 0e04 ECE0 ldi r30,12
2115 0e06 5595 1: asr r21
2116 0e08 4795 ror r20
2117 0e0a 3795 ror r19
2118 0e0c 2795 ror r18
2119 0e0e EA95 dec r30
2120 0e10 01F4 brne 1b
2121 0e12 2093 0000 sts tmpl4.30,r18
2122 0e16 3093 0000 sts (tmpl4.30)+1,r19
2123 0e1a 4093 0000 sts (tmpl4.30)+2,r20
2124 0e1e 5093 0000 sts (tmpl4.30)+3,r21
2125 0e22 8091 0000 lds r24,tmpl3.29
2126 0e26 9091 0000 lds r25,(tmpl3.29)+1
2127 0e2a 9093 0000 sts (KopplungsteilNickRoll)+1,r25
2128 0e2e 8093 0000 sts KopplungsteilNickRoll,r24
2129 0e32 8091 0000 lds r24,tmpl4.30
2130 0e36 9091 0000 lds r25,(tmpl4.30)+1
2131 0e3a 9093 0000 sts (KopplungsteilRollNick)+1,r25
2132 0e3e 8093 0000 sts KopplungsteilRollNick,r24
2133 0e42 2219 sub r18,r2
2134 0e44 3309 sbc r19,r3
2135 0e46 4409 sbc r20,r4
2136 0e48 5509 sbc r21,r5
2137 0e4a 2093 0000 sts tmpl4.30,r18
2138 0e4e 3093 0000 sts (tmpl4.30)+1,r19
2139 0e52 4093 0000 sts (tmpl4.30)+2,r20
2140 0e56 5093 0000 sts (tmpl4.30)+3,r21
2141 0e5a E20E add r14,r18
2142 0e5c F31E adc r15,r19
2143 0e5e 041F adc r16,r20
2144 0e60 151F adc r17,r21
2145 0e62 E092 0000 sts ErsatzKompass,r14
2146 0e66 F092 0000 sts (ErsatzKompass)+1,r15
2147 0e6a 0093 0000 sts (ErsatzKompass)+2,r16
2148 0e6e 1093 0000 sts (ErsatzKompass)+3,r17
2149 0e72 8091 0000 lds r24,Parameter_CouplingYawCorrection
2150 0e76 8823 tst r24
2151 0e78 01F4 brne .L100
2152 0e7a 57FF sbrs r21,7
2153 0e7c 00C0 rjmp .L101
2154 0e7e 2F5F subi r18,lo8(-(1))
2155 0e80 3F4F sbci r19,hi8(-(1))
2156 0e82 4F4F sbci r20,hlo8(-(1))
2157 0e84 5F4F sbci r21,hhi8(-(1))
2158 .L101:
2159 0e86 5595 asr r21
2160 0e88 4795 ror r20
2161 0e8a 3795 ror r19
2162 0e8c 2795 ror r18
2163 0e8e A21A sub r10,r18
2164 0e90 B30A sbc r11,r19
2165 0e92 C40A sbc r12,r20
2166 0e94 D50A sbc r13,r21
2167 0e96 A092 0000 sts Mess_Integral_Gier,r10
2168 0e9a B092 0000 sts (Mess_Integral_Gier)+1,r11
2169 0e9e C092 0000 sts (Mess_Integral_Gier)+2,r12
2170 0ea2 D092 0000 sts (Mess_Integral_Gier)+3,r13
2171 .L100:
2172 0ea6 2A89 ldd r18,Y+18
2173 0ea8 3B89 ldd r19,Y+19
2174 0eaa 7901 movw r14,r18
2175 0eac 0027 clr r16
2176 0eae F7FC sbrc r15,7
2177 0eb0 0095 com r16
2178 0eb2 102F mov r17,r16
2179 0eb4 8091 0000 lds r24,tmpl4.30
2180 0eb8 9091 0000 lds r25,(tmpl4.30)+1
2181 0ebc A091 0000 lds r26,(tmpl4.30)+2
2182 0ec0 B091 0000 lds r27,(tmpl4.30)+3
2183 0ec4 E80E add r14,r24
2184 0ec6 F91E adc r15,r25
2185 0ec8 0A1F adc r16,r26
2186 0eca 1B1F adc r17,r27
2187 0ecc C801 movw r24,r16
2188 0ece B701 movw r22,r14
2189 0ed0 2981 ldd r18,Y+1
2190 0ed2 3A81 ldd r19,Y+2
2191 0ed4 4B81 ldd r20,Y+3
2192 0ed6 5C81 ldd r21,Y+4
2193 0ed8 0E94 0000 call __mulsi3
2194 0edc 9B01 movw r18,r22
2195 0ede AC01 movw r20,r24
2196 0ee0 97FF sbrs r25,7
2197 0ee2 00C0 rjmp .L102
2198 0ee4 2150 subi r18,lo8(-(2047))
2199 0ee6 384F sbci r19,hi8(-(2047))
2200 0ee8 4F4F sbci r20,hlo8(-(2047))
2201 0eea 5F4F sbci r21,hhi8(-(2047))
2202 .L102:
2203 0eec 6BE0 ldi r22,11
2204 0eee 5595 1: asr r21
2205 0ef0 4795 ror r20
2206 0ef2 3795 ror r19
2207 0ef4 2795 ror r18
2208 0ef6 6A95 dec r22
2209 0ef8 01F4 brne 1b
2210 0efa 8091 0000 lds r24,Parameter_AchsKopplung1
2211 0efe A82E mov r10,r24
2212 0f00 BB24 clr r11
2213 0f02 CC24 clr r12
2214 0f04 DD24 clr r13
2215 0f06 CA01 movw r24,r20
2216 0f08 B901 movw r22,r18
2217 0f0a A601 movw r20,r12
2218 0f0c 9501 movw r18,r10
2219 0f0e 0E94 0000 call __mulsi3
2220 0f12 DC01 movw r26,r24
2221 0f14 CB01 movw r24,r22
2222 0f16 8093 0000 sts tmpl.27,r24
2223 0f1a 9093 0000 sts (tmpl.27)+1,r25
2224 0f1e A093 0000 sts (tmpl.27)+2,r26
2225 0f22 B093 0000 sts (tmpl.27)+3,r27
2226 0f26 B7FF sbrs r27,7
2227 0f28 00C0 rjmp .L103
2228 0f2a 8150 subi r24,lo8(-(4095))
2229 0f2c 904F sbci r25,hi8(-(4095))
2230 0f2e AF4F sbci r26,hlo8(-(4095))
2231 0f30 BF4F sbci r27,hhi8(-(4095))
2232 .L103:
2233 0f32 3C01 movw r6,r24
2234 0f34 4D01 movw r8,r26
2235 0f36 3CE0 ldi r19,12
2236 0f38 9594 1: asr r9
2237 0f3a 8794 ror r8
2238 0f3c 7794 ror r7
2239 0f3e 6794 ror r6
2240 0f40 3A95 dec r19
2241 0f42 01F4 brne 1b
2242 0f44 6092 0000 sts tmpl.27,r6
2243 0f48 7092 0000 sts (tmpl.27)+1,r7
2244 0f4c 8092 0000 sts (tmpl.27)+2,r8
2245 0f50 9092 0000 sts (tmpl.27)+3,r9
2246 0f54 C801 movw r24,r16
2247 0f56 B701 movw r22,r14
2248 0f58 2D81 ldd r18,Y+5
2249 0f5a 3E81 ldd r19,Y+6
2250 0f5c 4F81 ldd r20,Y+7
2251 0f5e 5885 ldd r21,Y+8
2252 0f60 0E94 0000 call __mulsi3
2253 0f64 97FF sbrs r25,7
2254 0f66 00C0 rjmp .L104
2255 0f68 6150 subi r22,lo8(-(2047))
2256 0f6a 784F sbci r23,hi8(-(2047))
2257 0f6c 8F4F sbci r24,hlo8(-(2047))
2258 0f6e 9F4F sbci r25,hhi8(-(2047))
2259 .L104:
2260 0f70 2BE0 ldi r18,11
2261 0f72 9595 1: asr r25
2262 0f74 8795 ror r24
2263 0f76 7795 ror r23
2264 0f78 6795 ror r22
2265 0f7a 2A95 dec r18
2266 0f7c 01F4 brne 1b
2267 0f7e A601 movw r20,r12
2268 0f80 9501 movw r18,r10
2269 0f82 0E94 0000 call __mulsi3
2270 0f86 DC01 movw r26,r24
2271 0f88 CB01 movw r24,r22
2272 0f8a 8093 0000 sts tmpl2.28,r24
2273 0f8e 9093 0000 sts (tmpl2.28)+1,r25
2274 0f92 A093 0000 sts (tmpl2.28)+2,r26
2275 0f96 B093 0000 sts (tmpl2.28)+3,r27
2276 0f9a B7FF sbrs r27,7
2277 0f9c 00C0 rjmp .L105
2278 0f9e 8150 subi r24,lo8(-(4095))
2279 0fa0 904F sbci r25,hi8(-(4095))
2280 0fa2 AF4F sbci r26,hlo8(-(4095))
2281 0fa4 BF4F sbci r27,hhi8(-(4095))
2282 .L105:
2283 0fa6 AC01 movw r20,r24
2284 0fa8 BD01 movw r22,r26
2285 0faa 8CE0 ldi r24,12
2286 0fac 7595 1: asr r23
2287 0fae 6795 ror r22
2288 0fb0 5795 ror r21
2289 0fb2 4795 ror r20
2290 0fb4 8A95 dec r24
2291 0fb6 01F4 brne 1b
2292 0fb8 4093 0000 sts tmpl2.28,r20
2293 0fbc 5093 0000 sts (tmpl2.28)+1,r21
2294 0fc0 6093 0000 sts (tmpl2.28)+2,r22
2295 0fc4 7093 0000 sts (tmpl2.28)+3,r23
2296 0fc8 2A89 ldd r18,Y+18
2297 0fca 3B89 ldd r19,Y+19
2298 0fcc 37FF sbrs r19,7
2299 0fce 00C0 rjmp .L107
2300 0fd0 3095 com r19
2301 0fd2 2195 neg r18
2302 0fd4 3F4F sbci r19,lo8(-1)
2303 .L107:
2304 0fd6 2134 cpi r18,65
2305 0fd8 3105 cpc r19,__zero_reg__
2306 0fda 04F0 brlt .L112
2307 0fdc D401 movw r26,r8
2308 0fde C301 movw r24,r6
2309 0fe0 97FE sbrs r9,7
2310 0fe2 00C0 rjmp .L110
2311 0fe4 B095 com r27
2312 0fe6 A095 com r26
2313 0fe8 9095 com r25
2314 0fea 8195 neg r24
2315 0fec 9F4F sbci r25,lo8(-1)
2316 0fee AF4F sbci r26,lo8(-1)
2317 0ff0 BF4F sbci r27,lo8(-1)
2318 .L110:
2319 0ff2 8138 cpi r24,lo8(129)
2320 0ff4 9105 cpc r25,__zero_reg__
2321 0ff6 A105 cpc r26,__zero_reg__
2322 0ff8 B105 cpc r27,__zero_reg__
2323 0ffa 04F4 brge .L109
2324 0ffc DB01 movw r26,r22
2325 0ffe CA01 movw r24,r20
2326 1000 77FF sbrs r23,7
2327 1002 00C0 rjmp .L111
2328 1004 B095 com r27
2329 1006 A095 com r26
2330 1008 9095 com r25
2331 100a 8195 neg r24
2332 100c 9F4F sbci r25,lo8(-1)
2333 100e AF4F sbci r26,lo8(-1)
2334 1010 BF4F sbci r27,lo8(-1)
2335 .L111:
2336 1012 8138 cpi r24,lo8(129)
2337 1014 9105 cpc r25,__zero_reg__
2338 1016 A105 cpc r26,__zero_reg__
2339 1018 B105 cpc r27,__zero_reg__
2340 101a 04F0 brlt .L112
2341 .L109:
2342 101c 81E0 ldi r24,lo8(1)
2343 101e 8093 0000 sts TrichterFlug,r24
2344 1022 00C0 rjmp .L112
2345 .L95:
2346 1024 1092 0000 sts (KopplungsteilRollNick)+1,__zero_reg__
2347 1028 1092 0000 sts KopplungsteilRollNick,__zero_reg__
2348 102c 1092 0000 sts (KopplungsteilNickRoll)+1,__zero_reg__
2349 1030 1092 0000 sts KopplungsteilNickRoll,__zero_reg__
2350 1034 1092 0000 sts tmpl2.28,__zero_reg__
2351 1038 1092 0000 sts (tmpl2.28)+1,__zero_reg__
2352 103c 1092 0000 sts (tmpl2.28)+2,__zero_reg__
2353 1040 1092 0000 sts (tmpl2.28)+3,__zero_reg__
2354 1044 1092 0000 sts tmpl.27,__zero_reg__
2355 1048 1092 0000 sts (tmpl.27)+1,__zero_reg__
2356 104c 1092 0000 sts (tmpl.27)+2,__zero_reg__
2357 1050 1092 0000 sts (tmpl.27)+3,__zero_reg__
2358 .L112:
2359 1054 8091 0000 lds r24,tmpl2.28
2360 1058 9091 0000 lds r25,(tmpl2.28)+1
2361 105c A091 0000 lds r26,(tmpl2.28)+2
2362 1060 B091 0000 lds r27,(tmpl2.28)+3
2363 1064 BC01 movw r22,r24
2364 1066 CD01 movw r24,r26
2365 1068 24E6 ldi r18,lo8(100)
2366 106a 30E0 ldi r19,hi8(100)
2367 106c 40E0 ldi r20,hlo8(100)
2368 106e 50E0 ldi r21,hhi8(100)
2369 1070 0E94 0000 call __divmodsi4
2370 1074 E090 0000 lds r14,tmpl.27
2371 1078 F090 0000 lds r15,(tmpl.27)+1
2372 107c E21A sub r14,r18
2373 107e F30A sbc r15,r19
2374 1080 F092 0000 sts (TrimRoll)+1,r15
2375 1084 E092 0000 sts TrimRoll,r14
2376 1088 8091 0000 lds r24,tmpl.27
2377 108c 9091 0000 lds r25,(tmpl.27)+1
2378 1090 A091 0000 lds r26,(tmpl.27)+2
2379 1094 B091 0000 lds r27,(tmpl.27)+3
2380 1098 BC01 movw r22,r24
2381 109a CD01 movw r24,r26
2382 109c 24E6 ldi r18,lo8(100)
2383 109e 30E0 ldi r19,hi8(100)
2384 10a0 40E0 ldi r20,hlo8(100)
2385 10a2 50E0 ldi r21,hhi8(100)
2386 10a4 0E94 0000 call __divmodsi4
2387 10a8 DA01 movw r26,r20
2388 10aa C901 movw r24,r18
2389 10ac 2091 0000 lds r18,tmpl2.28
2390 10b0 3091 0000 lds r19,(tmpl2.28)+1
2391 10b4 8C01 movw r16,r24
2392 10b6 021B sub r16,r18
2393 10b8 130B sbc r17,r19
2394 10ba 1093 0000 sts (TrimNick)+1,r17
2395 10be 0093 0000 sts TrimNick,r16
2396 10c2 8091 0000 lds r24,GIER_GRAD_FAKTOR
2397 10c6 9091 0000 lds r25,(GIER_GRAD_FAKTOR)+1
2398 10ca A091 0000 lds r26,(GIER_GRAD_FAKTOR)+2
2399 10ce B091 0000 lds r27,(GIER_GRAD_FAKTOR)+3
2400 10d2 BC01 movw r22,r24
2401 10d4 CD01 movw r24,r26
2402 10d6 28E6 ldi r18,lo8(360)
2403 10d8 31E0 ldi r19,hi8(360)
2404 10da 40E0 ldi r20,hlo8(360)
2405 10dc 50E0 ldi r21,hhi8(360)
2406 10de 0E94 0000 call __mulsi3
2407 10e2 2091 0000 lds r18,ErsatzKompass
2408 10e6 3091 0000 lds r19,(ErsatzKompass)+1
2409 10ea 4091 0000 lds r20,(ErsatzKompass)+2
2410 10ee 5091 0000 lds r21,(ErsatzKompass)+3
2411 10f2 2617 cp r18,r22
2412 10f4 3707 cpc r19,r23
2413 10f6 4807 cpc r20,r24
2414 10f8 5907 cpc r21,r25
2415 10fa 04F0 brlt .L113
2416 10fc 261B sub r18,r22
2417 10fe 370B sbc r19,r23
2418 1100 480B sbc r20,r24
2419 1102 590B sbc r21,r25
2420 1104 2093 0000 sts ErsatzKompass,r18
2421 1108 3093 0000 sts (ErsatzKompass)+1,r19
2422 110c 4093 0000 sts (ErsatzKompass)+2,r20
2423 1110 5093 0000 sts (ErsatzKompass)+3,r21
2424 .L113:
2425 1114 2091 0000 lds r18,ErsatzKompass
2426 1118 3091 0000 lds r19,(ErsatzKompass)+1
2427 111c 4091 0000 lds r20,(ErsatzKompass)+2
2428 1120 5091 0000 lds r21,(ErsatzKompass)+3
2429 1124 57FF sbrs r21,7
2430 1126 00C0 rjmp .L114
2431 1128 260F add r18,r22
2432 112a 371F adc r19,r23
2433 112c 481F adc r20,r24
2434 112e 591F adc r21,r25
2435 1130 2093 0000 sts ErsatzKompass,r18
2436 1134 3093 0000 sts (ErsatzKompass)+1,r19
2437 1138 4093 0000 sts (ErsatzKompass)+2,r20
2438 113c 5093 0000 sts (ErsatzKompass)+3,r21
2439 .L114:
2440 1140 6091 0000 lds r22,MesswertRoll
2441 1144 7091 0000 lds r23,(MesswertRoll)+1
2442 1148 6E0D add r22,r14
2443 114a 7F1D adc r23,r15
2444 114c 9B01 movw r18,r22
2445 114e 4427 clr r20
2446 1150 37FD sbrc r19,7
2447 1152 4095 com r20
2448 1154 542F mov r21,r20
2449 1156 8091 0000 lds r24,Mess_IntegralRoll2
2450 115a 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2451 115e A091 0000 lds r26,(Mess_IntegralRoll2)+2
2452 1162 B091 0000 lds r27,(Mess_IntegralRoll2)+3
2453 1166 820F add r24,r18
2454 1168 931F adc r25,r19
2455 116a A41F adc r26,r20
2456 116c B51F adc r27,r21
2457 116e 8093 0000 sts Mess_IntegralRoll2,r24
2458 1172 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2459 1176 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2460 117a B093 0000 sts (Mess_IntegralRoll2)+3,r27
2461 117e 8091 0000 lds r24,LageKorrekturRoll
2462 1182 9091 0000 lds r25,(LageKorrekturRoll)+1
2463 1186 681B sub r22,r24
2464 1188 790B sbc r23,r25
2465 118a CB01 movw r24,r22
2466 118c AA27 clr r26
2467 118e 97FD sbrc r25,7
2468 1190 A095 com r26
2469 1192 BA2F mov r27,r26
2470 1194 2985 ldd r18,Y+9
2471 1196 3A85 ldd r19,Y+10
2472 1198 4B85 ldd r20,Y+11
2473 119a 5C85 ldd r21,Y+12
2474 119c 820F add r24,r18
2475 119e 931F adc r25,r19
2476 11a0 A41F adc r26,r20
2477 11a2 B51F adc r27,r21
2478 11a4 8093 0000 sts Mess_IntegralRoll,r24
2479 11a8 9093 0000 sts (Mess_IntegralRoll)+1,r25
2480 11ac A093 0000 sts (Mess_IntegralRoll)+2,r26
2481 11b0 B093 0000 sts (Mess_IntegralRoll)+3,r27
2482 11b4 C090 0000 lds r12,Umschlag180Roll
2483 11b8 D090 0000 lds r13,(Umschlag180Roll)+1
2484 11bc E090 0000 lds r14,(Umschlag180Roll)+2
2485 11c0 F090 0000 lds r15,(Umschlag180Roll)+3
2486 11c4 C816 cp r12,r24
2487 11c6 D906 cpc r13,r25
2488 11c8 EA06 cpc r14,r26
2489 11ca FB06 cpc r15,r27
2490 11cc 04F4 brge .L115
2491 11ce 88EA ldi r24,lo8(25000)
2492 11d0 91E6 ldi r25,hi8(25000)
2493 11d2 A0E0 ldi r26,hlo8(25000)
2494 11d4 B0E0 ldi r27,hhi8(25000)
2495 11d6 8C19 sub r24,r12
2496 11d8 9D09 sbc r25,r13
2497 11da AE09 sbc r26,r14
2498 11dc BF09 sbc r27,r15
2499 11de 8093 0000 sts Mess_IntegralRoll,r24
2500 11e2 9093 0000 sts (Mess_IntegralRoll)+1,r25
2501 11e6 A093 0000 sts (Mess_IntegralRoll)+2,r26
2502 11ea B093 0000 sts (Mess_IntegralRoll)+3,r27
2503 11ee 8093 0000 sts Mess_IntegralRoll2,r24
2504 11f2 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2505 11f6 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2506 11fa B093 0000 sts (Mess_IntegralRoll2)+3,r27
2507 .L115:
2508 11fe 2227 clr r18
2509 1200 3327 clr r19
2510 1202 A901 movw r20,r18
2511 1204 2C19 sub r18,r12
2512 1206 3D09 sbc r19,r13
2513 1208 4E09 sbc r20,r14
2514 120a 5F09 sbc r21,r15
2515 120c 8091 0000 lds r24,Mess_IntegralRoll
2516 1210 9091 0000 lds r25,(Mess_IntegralRoll)+1
2517 1214 A091 0000 lds r26,(Mess_IntegralRoll)+2
2518 1218 B091 0000 lds r27,(Mess_IntegralRoll)+3
2519 121c 8217 cp r24,r18
2520 121e 9307 cpc r25,r19
2521 1220 A407 cpc r26,r20
2522 1222 B507 cpc r27,r21
2523 1224 04F4 brge .L116
2524 1226 D701 movw r26,r14
2525 1228 C601 movw r24,r12
2526 122a 885A subi r24,lo8(-(-25000))
2527 122c 9146 sbci r25,hi8(-(-25000))
2528 122e A040 sbci r26,hlo8(-(-25000))
2529 1230 B040 sbci r27,hhi8(-(-25000))
2530 1232 8093 0000 sts Mess_IntegralRoll,r24
2531 1236 9093 0000 sts (Mess_IntegralRoll)+1,r25
2532 123a A093 0000 sts (Mess_IntegralRoll)+2,r26
2533 123e B093 0000 sts (Mess_IntegralRoll)+3,r27
2534 1242 8093 0000 sts Mess_IntegralRoll2,r24
2535 1246 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2536 124a A093 0000 sts (Mess_IntegralRoll2)+2,r26
2537 124e B093 0000 sts (Mess_IntegralRoll2)+3,r27
2538 .L116:
2539 1252 6091 0000 lds r22,MesswertNick
2540 1256 7091 0000 lds r23,(MesswertNick)+1
2541 125a 600F add r22,r16
2542 125c 711F adc r23,r17
2543 125e 9B01 movw r18,r22
2544 1260 4427 clr r20
2545 1262 37FD sbrc r19,7
2546 1264 4095 com r20
2547 1266 542F mov r21,r20
2548 1268 8091 0000 lds r24,Mess_IntegralNick2
2549 126c 9091 0000 lds r25,(Mess_IntegralNick2)+1
2550 1270 A091 0000 lds r26,(Mess_IntegralNick2)+2
2551 1274 B091 0000 lds r27,(Mess_IntegralNick2)+3
2552 1278 820F add r24,r18
2553 127a 931F adc r25,r19
2554 127c A41F adc r26,r20
2555 127e B51F adc r27,r21
2556 1280 8093 0000 sts Mess_IntegralNick2,r24
2557 1284 9093 0000 sts (Mess_IntegralNick2)+1,r25
2558 1288 A093 0000 sts (Mess_IntegralNick2)+2,r26
2559 128c B093 0000 sts (Mess_IntegralNick2)+3,r27
2560 1290 8091 0000 lds r24,LageKorrekturNick
2561 1294 9091 0000 lds r25,(LageKorrekturNick)+1
2562 1298 681B sub r22,r24
2563 129a 790B sbc r23,r25
2564 129c CB01 movw r24,r22
2565 129e AA27 clr r26
2566 12a0 97FD sbrc r25,7
2567 12a2 A095 com r26
2568 12a4 BA2F mov r27,r26
2569 12a6 2D85 ldd r18,Y+13
2570 12a8 3E85 ldd r19,Y+14
2571 12aa 4F85 ldd r20,Y+15
2572 12ac 5889 ldd r21,Y+16
2573 12ae 820F add r24,r18
2574 12b0 931F adc r25,r19
2575 12b2 A41F adc r26,r20
2576 12b4 B51F adc r27,r21
2577 12b6 8093 0000 sts Mess_IntegralNick,r24
2578 12ba 9093 0000 sts (Mess_IntegralNick)+1,r25
2579 12be A093 0000 sts (Mess_IntegralNick)+2,r26
2580 12c2 B093 0000 sts (Mess_IntegralNick)+3,r27
2581 12c6 E090 0000 lds r14,Umschlag180Nick
2582 12ca F090 0000 lds r15,(Umschlag180Nick)+1
2583 12ce 0091 0000 lds r16,(Umschlag180Nick)+2
2584 12d2 1091 0000 lds r17,(Umschlag180Nick)+3
2585 12d6 E816 cp r14,r24
2586 12d8 F906 cpc r15,r25
2587 12da 0A07 cpc r16,r26
2588 12dc 1B07 cpc r17,r27
2589 12de 04F4 brge .L117
2590 12e0 88EA ldi r24,lo8(25000)
2591 12e2 91E6 ldi r25,hi8(25000)
2592 12e4 A0E0 ldi r26,hlo8(25000)
2593 12e6 B0E0 ldi r27,hhi8(25000)
2594 12e8 8E19 sub r24,r14
2595 12ea 9F09 sbc r25,r15
2596 12ec A00B sbc r26,r16
2597 12ee B10B sbc r27,r17
2598 12f0 8093 0000 sts Mess_IntegralNick,r24
2599 12f4 9093 0000 sts (Mess_IntegralNick)+1,r25
2600 12f8 A093 0000 sts (Mess_IntegralNick)+2,r26
2601 12fc B093 0000 sts (Mess_IntegralNick)+3,r27
2602 1300 8093 0000 sts Mess_IntegralNick2,r24
2603 1304 9093 0000 sts (Mess_IntegralNick2)+1,r25
2604 1308 A093 0000 sts (Mess_IntegralNick2)+2,r26
2605 130c B093 0000 sts (Mess_IntegralNick2)+3,r27
2606 .L117:
2607 1310 2227 clr r18
2608 1312 3327 clr r19
2609 1314 A901 movw r20,r18
2610 1316 2E19 sub r18,r14
2611 1318 3F09 sbc r19,r15
2612 131a 400B sbc r20,r16
2613 131c 510B sbc r21,r17
2614 131e 8091 0000 lds r24,Mess_IntegralNick
2615 1322 9091 0000 lds r25,(Mess_IntegralNick)+1
2616 1326 A091 0000 lds r26,(Mess_IntegralNick)+2
2617 132a B091 0000 lds r27,(Mess_IntegralNick)+3
2618 132e 8217 cp r24,r18
2619 1330 9307 cpc r25,r19
2620 1332 A407 cpc r26,r20
2621 1334 B507 cpc r27,r21
2622 1336 04F4 brge .L118
2623 1338 D801 movw r26,r16
2624 133a C701 movw r24,r14
2625 133c 885A subi r24,lo8(-(-25000))
2626 133e 9146 sbci r25,hi8(-(-25000))
2627 1340 A040 sbci r26,hlo8(-(-25000))
2628 1342 B040 sbci r27,hhi8(-(-25000))
2629 1344 8093 0000 sts Mess_IntegralNick,r24
2630 1348 9093 0000 sts (Mess_IntegralNick)+1,r25
2631 134c A093 0000 sts (Mess_IntegralNick)+2,r26
2632 1350 B093 0000 sts (Mess_IntegralNick)+3,r27
2633 1354 8093 0000 sts Mess_IntegralNick2,r24
2634 1358 9093 0000 sts (Mess_IntegralNick2)+1,r25
2635 135c A093 0000 sts (Mess_IntegralNick2)+2,r26
2636 1360 B093 0000 sts (Mess_IntegralNick2)+3,r27
2637 .L118:
2638 1364 8091 0000 lds r24,Mess_Integral_Gier
2639 1368 9091 0000 lds r25,(Mess_Integral_Gier)+1
2640 136c A091 0000 lds r26,(Mess_Integral_Gier)+2
2641 1370 B091 0000 lds r27,(Mess_Integral_Gier)+3
2642 1374 8093 0000 sts Integral_Gier,r24
2643 1378 9093 0000 sts (Integral_Gier)+1,r25
2644 137c A093 0000 sts (Integral_Gier)+2,r26
2645 1380 B093 0000 sts (Integral_Gier)+3,r27
2646 1384 8091 0000 lds r24,Mess_IntegralNick
2647 1388 9091 0000 lds r25,(Mess_IntegralNick)+1
2648 138c A091 0000 lds r26,(Mess_IntegralNick)+2
2649 1390 B091 0000 lds r27,(Mess_IntegralNick)+3
2650 1394 8093 0000 sts IntegralNick,r24
2651 1398 9093 0000 sts (IntegralNick)+1,r25
2652 139c A093 0000 sts (IntegralNick)+2,r26
2653 13a0 B093 0000 sts (IntegralNick)+3,r27
2654 13a4 8091 0000 lds r24,Mess_IntegralRoll
2655 13a8 9091 0000 lds r25,(Mess_IntegralRoll)+1
2656 13ac A091 0000 lds r26,(Mess_IntegralRoll)+2
2657 13b0 B091 0000 lds r27,(Mess_IntegralRoll)+3
2658 13b4 8093 0000 sts IntegralRoll,r24
2659 13b8 9093 0000 sts (IntegralRoll)+1,r25
2660 13bc A093 0000 sts (IntegralRoll)+2,r26
2661 13c0 B093 0000 sts (IntegralRoll)+3,r27
2662 13c4 8091 0000 lds r24,Mess_IntegralNick2
2663 13c8 9091 0000 lds r25,(Mess_IntegralNick2)+1
2664 13cc A091 0000 lds r26,(Mess_IntegralNick2)+2
2665 13d0 B091 0000 lds r27,(Mess_IntegralNick2)+3
2666 13d4 8093 0000 sts IntegralNick2,r24
2667 13d8 9093 0000 sts (IntegralNick2)+1,r25
2668 13dc A093 0000 sts (IntegralNick2)+2,r26
2669 13e0 B093 0000 sts (IntegralNick2)+3,r27
2670 13e4 8091 0000 lds r24,Mess_IntegralRoll2
2671 13e8 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2672 13ec A091 0000 lds r26,(Mess_IntegralRoll2)+2
2673 13f0 B091 0000 lds r27,(Mess_IntegralRoll2)+3
2674 13f4 8093 0000 sts IntegralRoll2,r24
2675 13f8 9093 0000 sts (IntegralRoll2)+1,r25
2676 13fc A093 0000 sts (IntegralRoll2)+2,r26
2677 1400 B093 0000 sts (IntegralRoll2)+3,r27
2678 1404 8091 0000 lds r24,HiResNick
2679 1408 9091 0000 lds r25,(HiResNick)+1
2680 140c 97FD sbrc r25,7
2681 140e 0796 adiw r24,7
2682 .L119:
2683 1410 03E0 ldi r16,3
2684 1412 9595 1: asr r25
2685 1414 8795 ror r24
2686 1416 0A95 dec r16
2687 1418 01F4 brne 1b
2688 141a 9093 0000 sts (MesswertNick)+1,r25
2689 141e 8093 0000 sts MesswertNick,r24
2690 1422 8091 0000 lds r24,HiResRoll
2691 1426 9091 0000 lds r25,(HiResRoll)+1
2692 142a 97FD sbrc r25,7
2693 142c 0796 adiw r24,7
2694 .L120:
2695 142e 13E0 ldi r17,3
2696 1430 9595 1: asr r25
2697 1432 8795 ror r24
2698 1434 1A95 dec r17
2699 1436 01F4 brne 1b
2700 1438 9093 0000 sts (MesswertRoll)+1,r25
2701 143c 8093 0000 sts MesswertRoll,r24
2702 1440 8091 0000 lds r24,AdWertNick
2703 1444 9091 0000 lds r25,(AdWertNick)+1
2704 1448 0F97 sbiw r24,15
2705 144a 04F4 brge .L121
2706 144c 88E1 ldi r24,lo8(-1000)
2707 144e 9CEF ldi r25,hi8(-1000)
2708 1450 9093 0000 sts (MesswertNick)+1,r25
2709 1454 8093 0000 sts MesswertNick,r24
2710 .L121:
2711 1458 8091 0000 lds r24,AdWertNick
2712 145c 9091 0000 lds r25,(AdWertNick)+1
2713 1460 0797 sbiw r24,7
2714 1462 04F4 brge .L122
2715 1464 80E3 ldi r24,lo8(-2000)
2716 1466 98EF ldi r25,hi8(-2000)
2717 1468 9093 0000 sts (MesswertNick)+1,r25
2718 146c 8093 0000 sts MesswertNick,r24
2719 .L122:
2720 1470 2091 0000 lds r18,PlatinenVersion
2721 1474 2A30 cpi r18,lo8(10)
2722 1476 01F4 brne .L123
2723 1478 8091 0000 lds r24,AdWertNick
2724 147c 9091 0000 lds r25,(AdWertNick)+1
2725 1480 835F subi r24,lo8(1011)
2726 1482 9340 sbci r25,hi8(1011)
2727 1484 04F0 brlt .L124
2728 1486 88EE ldi r24,lo8(1000)
2729 1488 93E0 ldi r25,hi8(1000)
2730 148a 9093 0000 sts (MesswertNick)+1,r25
2731 148e 8093 0000 sts MesswertNick,r24
2732 .L124:
2733 1492 8091 0000 lds r24,AdWertNick
2734 1496 9091 0000 lds r25,(AdWertNick)+1
2735 149a 8A5F subi r24,lo8(1018)
2736 149c 9340 sbci r25,hi8(1018)
2737 149e 04F0 brlt .L126
2738 14a0 00C0 rjmp .L169
2739 .L123:
2740 14a2 8091 0000 lds r24,AdWertNick
2741 14a6 9091 0000 lds r25,(AdWertNick)+1
2742 14aa 815D subi r24,lo8(2001)
2743 14ac 9740 sbci r25,hi8(2001)
2744 14ae 04F0 brlt .L127
2745 14b0 88EE ldi r24,lo8(1000)
2746 14b2 93E0 ldi r25,hi8(1000)
2747 14b4 9093 0000 sts (MesswertNick)+1,r25
2748 14b8 8093 0000 sts MesswertNick,r24
2749 .L127:
2750 14bc 8091 0000 lds r24,AdWertNick
2751 14c0 9091 0000 lds r25,(AdWertNick)+1
2752 14c4 805E subi r24,lo8(2016)
2753 14c6 9740 sbci r25,hi8(2016)
2754 14c8 04F0 brlt .L126
2755 .L169:
2756 14ca 80ED ldi r24,lo8(2000)
2757 14cc 97E0 ldi r25,hi8(2000)
2758 14ce 9093 0000 sts (MesswertNick)+1,r25
2759 14d2 8093 0000 sts MesswertNick,r24
2760 .L126:
2761 14d6 8091 0000 lds r24,AdWertRoll
2762 14da 9091 0000 lds r25,(AdWertRoll)+1
2763 14de 0F97 sbiw r24,15
2764 14e0 04F4 brge .L129
2765 14e2 88E1 ldi r24,lo8(-1000)
2766 14e4 9CEF ldi r25,hi8(-1000)
2767 14e6 9093 0000 sts (MesswertRoll)+1,r25
2768 14ea 8093 0000 sts MesswertRoll,r24
2769 .L129:
2770 14ee 8091 0000 lds r24,AdWertRoll
2771 14f2 9091 0000 lds r25,(AdWertRoll)+1
2772 14f6 0797 sbiw r24,7
2773 14f8 04F4 brge .L130
2774 14fa 80E3 ldi r24,lo8(-2000)
2775 14fc 98EF ldi r25,hi8(-2000)
2776 14fe 9093 0000 sts (MesswertRoll)+1,r25
2777 1502 8093 0000 sts MesswertRoll,r24
2778 .L130:
2779 1506 2A30 cpi r18,lo8(10)
2780 1508 01F4 brne .L131
2781 150a 8091 0000 lds r24,AdWertRoll
2782 150e 9091 0000 lds r25,(AdWertRoll)+1
2783 1512 835F subi r24,lo8(1011)
2784 1514 9340 sbci r25,hi8(1011)
2785 1516 04F0 brlt .L132
2786 1518 88EE ldi r24,lo8(1000)
2787 151a 93E0 ldi r25,hi8(1000)
2788 151c 9093 0000 sts (MesswertRoll)+1,r25
2789 1520 8093 0000 sts MesswertRoll,r24
2790 .L132:
2791 1524 8091 0000 lds r24,AdWertRoll
2792 1528 9091 0000 lds r25,(AdWertRoll)+1
2793 152c 8A5F subi r24,lo8(1018)
2794 152e 9340 sbci r25,hi8(1018)
2795 1530 04F0 brlt .L134
2796 1532 00C0 rjmp .L170
2797 .L131:
2798 1534 8091 0000 lds r24,AdWertRoll
2799 1538 9091 0000 lds r25,(AdWertRoll)+1
2800 153c 815D subi r24,lo8(2001)
2801 153e 9740 sbci r25,hi8(2001)
2802 1540 04F0 brlt .L135
2803 1542 88EE ldi r24,lo8(1000)
2804 1544 93E0 ldi r25,hi8(1000)
2805 1546 9093 0000 sts (MesswertRoll)+1,r25
2806 154a 8093 0000 sts MesswertRoll,r24
2807 .L135:
2808 154e 8091 0000 lds r24,AdWertRoll
2809 1552 9091 0000 lds r25,(AdWertRoll)+1
2810 1556 805E subi r24,lo8(2016)
2811 1558 9740 sbci r25,hi8(2016)
2812 155a 04F0 brlt .L134
2813 .L170:
2814 155c 80ED ldi r24,lo8(2000)
2815 155e 97E0 ldi r25,hi8(2000)
2816 1560 9093 0000 sts (MesswertRoll)+1,r25
2817 1564 8093 0000 sts MesswertRoll,r24
2818 .L134:
2819 1568 6091 0000 lds r22,Parameter_Gyro_D
2820 156c 6623 tst r22
2821 156e 01F4 brne .+2
2822 1570 00C0 rjmp .L137
2823 1572 4091 0000 lds r20,HiResNick
2824 1576 5091 0000 lds r21,(HiResNick)+1
2825 157a 8091 0000 lds r24,oldNick.31
2826 157e 9091 0000 lds r25,(oldNick.31)+1
2827 1582 481B sub r20,r24
2828 1584 590B sbc r21,r25
2829 1586 5093 0000 sts (d2Nick.34)+1,r21
2830 158a 4093 0000 sts d2Nick.34,r20
2831 158e 2091 0000 lds r18,HiResNick
2832 1592 3091 0000 lds r19,(HiResNick)+1
2833 1596 280F add r18,r24
2834 1598 391F adc r19,r25
2835 159a 37FF sbrs r19,7
2836 159c 00C0 rjmp .L138
2837 159e 2F5F subi r18,lo8(-(1))
2838 15a0 3F4F sbci r19,hi8(-(1))
2839 .L138:
2840 15a2 3595 asr r19
2841 15a4 2795 ror r18
2842 15a6 3093 0000 sts (oldNick.31)+1,r19
2843 15aa 2093 0000 sts oldNick.31,r18
2844 15ae 4138 cpi r20,129
2845 15b0 5105 cpc r21,__zero_reg__
2846 15b2 04F0 brlt .L139
2847 15b4 80E8 ldi r24,lo8(128)
2848 15b6 90E0 ldi r25,hi8(128)
2849 15b8 00C0 rjmp .L171
2850 .L139:
2851 15ba 4058 subi r20,lo8(-128)
2852 15bc 5F4F sbci r21,hi8(-128)
2853 15be 04F4 brge .L140
2854 15c0 80E8 ldi r24,lo8(-128)
2855 15c2 9FEF ldi r25,hi8(-128)
2856 .L171:
2857 15c4 9093 0000 sts (d2Nick.34)+1,r25
2858 15c8 8093 0000 sts d2Nick.34,r24
2859 .L140:
2860 15cc 4091 0000 lds r20,HiResRoll
2861 15d0 5091 0000 lds r21,(HiResRoll)+1
2862 15d4 8091 0000 lds r24,oldRoll.32
2863 15d8 9091 0000 lds r25,(oldRoll.32)+1
2864 15dc 481B sub r20,r24
2865 15de 590B sbc r21,r25
2866 15e0 5093 0000 sts (d2Roll.33)+1,r21
2867 15e4 4093 0000 sts d2Roll.33,r20
2868 15e8 2091 0000 lds r18,HiResRoll
2869 15ec 3091 0000 lds r19,(HiResRoll)+1
2870 15f0 280F add r18,r24
2871 15f2 391F adc r19,r25
2872 15f4 37FF sbrs r19,7
2873 15f6 00C0 rjmp .L142
2874 15f8 2F5F subi r18,lo8(-(1))
2875 15fa 3F4F sbci r19,hi8(-(1))
2876 .L142:
2877 15fc 3595 asr r19
2878 15fe 2795 ror r18
2879 1600 3093 0000 sts (oldRoll.32)+1,r19
2880 1604 2093 0000 sts oldRoll.32,r18
2881 1608 4138 cpi r20,129
2882 160a 5105 cpc r21,__zero_reg__
2883 160c 04F0 brlt .L143
2884 160e 80E8 ldi r24,lo8(128)
2885 1610 90E0 ldi r25,hi8(128)
2886 1612 00C0 rjmp .L172
2887 .L143:
2888 1614 4058 subi r20,lo8(-128)
2889 1616 5F4F sbci r21,hi8(-128)
2890 1618 04F4 brge .L144
2891 161a 80E8 ldi r24,lo8(-128)
2892 161c 9FEF ldi r25,hi8(-128)
2893 .L172:
2894 161e 9093 0000 sts (d2Roll.33)+1,r25
2895 1622 8093 0000 sts d2Roll.33,r24
2896 .L144:
2897 1626 462F mov r20,r22
2898 1628 5527 clr r21
2899 162a 8091 0000 lds r24,d2Nick.34
2900 162e 9091 0000 lds r25,(d2Nick.34)+1
2901 1632 849F mul r24,r20
2902 1634 B001 movw r22,r0
2903 1636 859F mul r24,r21
2904 1638 700D add r23,r0
2905 163a 949F mul r25,r20
2906 163c 700D add r23,r0
2907 163e 1124 clr r1
2908 1640 9B01 movw r18,r22
2909 1642 77FF sbrs r23,7
2910 1644 00C0 rjmp .L146
2911 1646 215F subi r18,lo8(-(15))
2912 1648 3F4F sbci r19,hi8(-(15))
2913 .L146:
2914 164a F4E0 ldi r31,4
2915 164c 3595 1: asr r19
2916 164e 2795 ror r18
2917 1650 FA95 dec r31
2918 1652 01F4 brne 1b
2919 1654 8091 0000 lds r24,MesswertNick
2920 1658 9091 0000 lds r25,(MesswertNick)+1
2921 165c 820F add r24,r18
2922 165e 931F adc r25,r19
2923 1660 9093 0000 sts (MesswertNick)+1,r25
2924 1664 8093 0000 sts MesswertNick,r24
2925 1668 8091 0000 lds r24,d2Roll.33
2926 166c 9091 0000 lds r25,(d2Roll.33)+1
2927 1670 849F mul r24,r20
2928 1672 D001 movw r26,r0
2929 1674 859F mul r24,r21
2930 1676 B00D add r27,r0
2931 1678 949F mul r25,r20
2932 167a B00D add r27,r0
2933 167c 1124 clr r1
2934 167e AD01 movw r20,r26
2935 1680 9D01 movw r18,r26
2936 1682 B7FF sbrs r27,7
2937 1684 00C0 rjmp .L147
2938 1686 215F subi r18,lo8(-(15))
2939 1688 3F4F sbci r19,hi8(-(15))
2940 .L147:
2941 168a E4E0 ldi r30,4
2942 168c 3595 1: asr r19
2943 168e 2795 ror r18
2944 1690 EA95 dec r30
2945 1692 01F4 brne 1b
2946 1694 8091 0000 lds r24,MesswertRoll
2947 1698 9091 0000 lds r25,(MesswertRoll)+1
2948 169c 820F add r24,r18
2949 169e 931F adc r25,r19
2950 16a0 9093 0000 sts (MesswertRoll)+1,r25
2951 16a4 8093 0000 sts MesswertRoll,r24
2952 16a8 8091 0000 lds r24,HiResNick
2953 16ac 9091 0000 lds r25,(HiResNick)+1
2954 16b0 860F add r24,r22
2955 16b2 971F adc r25,r23
2956 16b4 9093 0000 sts (HiResNick)+1,r25
2957 16b8 8093 0000 sts HiResNick,r24
2958 16bc 8091 0000 lds r24,HiResRoll
2959 16c0 9091 0000 lds r25,(HiResRoll)+1
2960 16c4 840F add r24,r20
2961 16c6 951F adc r25,r21
2962 16c8 9093 0000 sts (HiResRoll)+1,r25
2963 16cc 8093 0000 sts HiResRoll,r24
2964 .L137:
2965 16d0 0091 0000 lds r16,RohMesswertRoll
2966 16d4 1091 0000 lds r17,(RohMesswertRoll)+1
2967 16d8 8091 0000 lds r24,KopplungsteilNickRoll
2968 16dc 9091 0000 lds r25,(KopplungsteilNickRoll)+1
2969 16e0 1016 cp __zero_reg__,r16
2970 16e2 1106 cpc __zero_reg__,r17
2971 16e4 04F4 brge .L148
2972 16e6 9C01 movw r18,r24
2973 16e8 97FF sbrs r25,7
2974 16ea 00C0 rjmp .L149
2975 16ec 2227 clr r18
2976 16ee 3327 clr r19
2977 16f0 281B sub r18,r24
2978 16f2 390B sbc r19,r25
2979 .L149:
2980 16f4 C901 movw r24,r18
2981 16f6 AA27 clr r26
2982 16f8 97FD sbrc r25,7
2983 16fa A095 com r26
2984 16fc BA2F mov r27,r26
2985 16fe 2091 0000 lds r18,Parameter_CouplingYawCorrection
2986 1702 3327 clr r19
2987 1704 4427 clr r20
2988 1706 5527 clr r21
2989 1708 BC01 movw r22,r24
2990 170a CD01 movw r24,r26
2991 170c 0E94 0000 call __mulsi3
2992 1710 9B01 movw r18,r22
2993 1712 AC01 movw r20,r24
2994 1714 97FF sbrs r25,7
2995 1716 00C0 rjmp .L150
2996 1718 215C subi r18,lo8(-(63))
2997 171a 3F4F sbci r19,hi8(-(63))
2998 171c 4F4F sbci r20,hlo8(-(63))
2999 171e 5F4F sbci r21,hhi8(-(63))
3000 .L150:
3001 1720 76E0 ldi r23,6
3002 1722 5595 1: asr r21
3003 1724 4795 ror r20
3004 1726 3795 ror r19
3005 1728 2795 ror r18
3006 172a 7A95 dec r23
3007 172c 01F4 brne 1b
3008 172e 8091 0000 lds r24,TrimRoll
3009 1732 9091 0000 lds r25,(TrimRoll)+1
3010 1736 820F add r24,r18
3011 1738 931F adc r25,r19
3012 173a 00C0 rjmp .L173
3013 .L148:
3014 173c 97FF sbrs r25,7
3015 173e 00C0 rjmp .L152
3016 1740 9095 com r25
3017 1742 8195 neg r24
3018 1744 9F4F sbci r25,lo8(-1)
3019 .L152:
3020 1746 AA27 clr r26
3021 1748 97FD sbrc r25,7
3022 174a A095 com r26
3023 174c BA2F mov r27,r26
3024 174e 2091 0000 lds r18,Parameter_CouplingYawCorrection
3025 1752 3327 clr r19
3026 1754 4427 clr r20
3027 1756 5527 clr r21
3028 1758 BC01 movw r22,r24
3029 175a CD01 movw r24,r26
3030 175c 0E94 0000 call __mulsi3
3031 1760 9B01 movw r18,r22
3032 1762 AC01 movw r20,r24
3033 1764 97FF sbrs r25,7
3034 1766 00C0 rjmp .L153
3035 1768 215C subi r18,lo8(-(63))
3036 176a 3F4F sbci r19,hi8(-(63))
3037 176c 4F4F sbci r20,hlo8(-(63))
3038 176e 5F4F sbci r21,hhi8(-(63))
3039 .L153:
3040 1770 66E0 ldi r22,6
3041 1772 5595 1: asr r21
3042 1774 4795 ror r20
3043 1776 3795 ror r19
3044 1778 2795 ror r18
3045 177a 6A95 dec r22
3046 177c 01F4 brne 1b
3047 177e 8091 0000 lds r24,TrimRoll
3048 1782 9091 0000 lds r25,(TrimRoll)+1
3049 1786 821B sub r24,r18
3050 1788 930B sbc r25,r19
3051 .L173:
3052 178a 9093 0000 sts (TrimRoll)+1,r25
3053 178e 8093 0000 sts TrimRoll,r24
3054 1792 E090 0000 lds r14,RohMesswertNick
3055 1796 F090 0000 lds r15,(RohMesswertNick)+1
3056 179a 8091 0000 lds r24,KopplungsteilRollNick
3057 179e 9091 0000 lds r25,(KopplungsteilRollNick)+1
3058 17a2 1E14 cp __zero_reg__,r14
3059 17a4 1F04 cpc __zero_reg__,r15
3060 17a6 04F4 brge .L154
3061 17a8 9C01 movw r18,r24
3062 17aa 97FF sbrs r25,7
3063 17ac 00C0 rjmp .L155
3064 17ae 2227 clr r18
3065 17b0 3327 clr r19
3066 17b2 281B sub r18,r24
3067 17b4 390B sbc r19,r25
3068 .L155:
3069 17b6 C901 movw r24,r18
3070 17b8 AA27 clr r26
3071 17ba 97FD sbrc r25,7
3072 17bc A095 com r26
3073 17be BA2F mov r27,r26
3074 17c0 2091 0000 lds r18,Parameter_CouplingYawCorrection
3075 17c4 3327 clr r19
3076 17c6 4427 clr r20
3077 17c8 5527 clr r21
3078 17ca BC01 movw r22,r24
3079 17cc CD01 movw r24,r26
3080 17ce 0E94 0000 call __mulsi3
3081 17d2 9B01 movw r18,r22
3082 17d4 AC01 movw r20,r24
3083 17d6 97FF sbrs r25,7
3084 17d8 00C0 rjmp .L156
3085 17da 215C subi r18,lo8(-(63))
3086 17dc 3F4F sbci r19,hi8(-(63))
3087 17de 4F4F sbci r20,hlo8(-(63))
3088 17e0 5F4F sbci r21,hhi8(-(63))
3089 .L156:
3090 17e2 96E0 ldi r25,6
3091 17e4 5595 1: asr r21
3092 17e6 4795 ror r20
3093 17e8 3795 ror r19
3094 17ea 2795 ror r18
3095 17ec 9A95 dec r25
3096 17ee 01F4 brne 1b
3097 17f0 8091 0000 lds r24,TrimNick
3098 17f4 9091 0000 lds r25,(TrimNick)+1
3099 17f8 820F add r24,r18
3100 17fa 931F adc r25,r19
3101 17fc 00C0 rjmp .L174
3102 .L154:
3103 17fe 97FF sbrs r25,7
3104 1800 00C0 rjmp .L158
3105 1802 9095 com r25
3106 1804 8195 neg r24
3107 1806 9F4F sbci r25,lo8(-1)
3108 .L158:
3109 1808 AA27 clr r26
3110 180a 97FD sbrc r25,7
3111 180c A095 com r26
3112 180e BA2F mov r27,r26
3113 1810 2091 0000 lds r18,Parameter_CouplingYawCorrection
3114 1814 3327 clr r19
3115 1816 4427 clr r20
3116 1818 5527 clr r21
3117 181a BC01 movw r22,r24
3118 181c CD01 movw r24,r26
3119 181e 0E94 0000 call __mulsi3
3120 1822 9B01 movw r18,r22
3121 1824 AC01 movw r20,r24
3122 1826 97FF sbrs r25,7
3123 1828 00C0 rjmp .L159
3124 182a 215C subi r18,lo8(-(63))
3125 182c 3F4F sbci r19,hi8(-(63))
3126 182e 4F4F sbci r20,hlo8(-(63))
3127 1830 5F4F sbci r21,hhi8(-(63))
3128 .L159:
3129 1832 86E0 ldi r24,6
3130 1834 5595 1: asr r21
3131 1836 4795 ror r20
3132 1838 3795 ror r19
3133 183a 2795 ror r18
3134 183c 8A95 dec r24
3135 183e 01F4 brne 1b
3136 1840 8091 0000 lds r24,TrimNick
3137 1844 9091 0000 lds r25,(TrimNick)+1
3138 1848 821B sub r24,r18
3139 184a 930B sbc r25,r19
3140 .L174:
3141 184c 9093 0000 sts (TrimNick)+1,r25
3142 1850 8093 0000 sts TrimNick,r24
3143 1854 8091 0000 lds r24,Parameter_GlobalConfig
3144 1858 87FF sbrs r24,7
3145 185a 00C0 rjmp .L82
3146 185c B989 ldd r27,Y+17
3147 185e BB23 tst r27
3148 1860 01F0 breq .+2
3149 1862 00C0 rjmp .L82
3150 1864 8091 0000 lds r24,Looping_Roll
3151 1868 8823 tst r24
3152 186a 01F4 brne .L82
3153 186c E1E0 ldi r30,lo8(257)
3154 186e EE16 cp r14,r30
3155 1870 E1E0 ldi r30,hi8(257)
3156 1872 FE06 cpc r15,r30
3157 1874 04F0 brlt .L161
3158 1876 8091 0000 lds r24,MesswertNick
3159 187a 9091 0000 lds r25,(MesswertNick)+1
3160 187e 8E0D add r24,r14
3161 1880 9F1D adc r25,r15
3162 1882 8050 subi r24,lo8(-(-256))
3163 1884 9140 sbci r25,hi8(-(-256))
3164 1886 00C0 rjmp .L175
3165 .L161:
3166 1888 F0E0 ldi r31,lo8(-256)
3167 188a EF16 cp r14,r31
3168 188c FFEF ldi r31,hi8(-256)
3169 188e FF06 cpc r15,r31
3170 1890 04F4 brge .L162
3171 1892 8091 0000 lds r24,MesswertNick
3172 1896 9091 0000 lds r25,(MesswertNick)+1
3173 189a 8E0D add r24,r14
3174 189c 9F1D adc r25,r15
3175 189e 8050 subi r24,lo8(-(256))
3176 18a0 9F4F sbci r25,hi8(-(256))
3177 .L175:
3178 18a2 9093 0000 sts (MesswertNick)+1,r25
3179 18a6 8093 0000 sts MesswertNick,r24
3180 .L162:
3181 18aa 21E0 ldi r18,hi8(257)
3182 18ac 0130 cpi r16,lo8(257)
3183 18ae 1207 cpc r17,r18
3184 18b0 04F0 brlt .L164
3185 18b2 8091 0000 lds r24,MesswertRoll
3186 18b6 9091 0000 lds r25,(MesswertRoll)+1
3187 18ba 800F add r24,r16
3188 18bc 911F adc r25,r17
3189 18be 8050 subi r24,lo8(-(-256))
3190 18c0 9140 sbci r25,hi8(-(-256))
3191 18c2 00C0 rjmp .L176
3192 .L164:
3193 18c4 3FEF ldi r19,hi8(-256)
3194 18c6 0030 cpi r16,lo8(-256)
3195 18c8 1307 cpc r17,r19
3196 18ca 04F4 brge .L82
3197 18cc 8091 0000 lds r24,MesswertRoll
3198 18d0 9091 0000 lds r25,(MesswertRoll)+1
3199 18d4 800F add r24,r16
3200 18d6 911F adc r25,r17
3201 18d8 8050 subi r24,lo8(-(256))
3202 18da 9F4F sbci r25,hi8(-(256))
3203 .L176:
3204 18dc 9093 0000 sts (MesswertRoll)+1,r25
3205 18e0 8093 0000 sts MesswertRoll,r24
3206 .L82:
3207 /* epilogue: frame size=19 */
3208 18e4 E2E1 ldi r30,18
3209 18e6 CD5E subi r28,-19
3210 18e8 0C94 0000 jmp __epilogue_restores__+0
3211 /* epilogue end (size=4) */
3212 /* function Mittelwert size 2000 (1990) */
3214 .global SendMotorData
3216 SendMotorData:
3217 /* prologue: frame size=0 */
3218 /* prologue end (size=0) */
3219 18ec 8091 0000 lds r24,MotorenEin
3220 18f0 8823 tst r24
3221 18f2 01F4 brne .L178
3222 18f4 8091 0000 lds r24,FC_StatusFlags
3223 18f8 8C7F andi r24,lo8(-4)
3224 18fa 8093 0000 sts FC_StatusFlags,r24
3225 18fe A0E0 ldi r26,lo8(MotorTest)
3226 1900 B0E0 ldi r27,hi8(MotorTest)
3227 1902 E0E0 ldi r30,lo8(Motor)
3228 1904 F0E0 ldi r31,hi8(Motor)
3229 1906 9BE0 ldi r25,lo8(11)
3230 .L183:
3231 1908 8091 0000 lds r24,PC_MotortestActive
3232 190c 8823 tst r24
3233 190e 01F4 brne .L182
3234 1910 8C93 st X,r24
3235 .L182:
3236 1912 8D91 ld r24,X+
3237 1914 8183 std Z+1,r24
3238 1916 1282 std Z+2,__zero_reg__
3239 1918 9150 subi r25,lo8(-(-1))
3240 191a 3896 adiw r30,8
3241 191c 97FF sbrs r25,7
3242 191e 00C0 rjmp .L183
3243 1920 8091 0000 lds r24,PC_MotortestActive
3244 1924 8823 tst r24
3245 1926 01F0 breq .L185
3246 1928 8091 0000 lds r24,PC_MotortestActive
3247 192c 8150 subi r24,lo8(-(-1))
3248 192e 8093 0000 sts PC_MotortestActive,r24
3249 1932 00C0 rjmp .L185
3250 .L178:
3251 1934 8091 0000 lds r24,FC_StatusFlags
3252 1938 8160 ori r24,lo8(1)
3253 193a 8093 0000 sts FC_StatusFlags,r24
3254 .L185:
3255 193e 8091 0000 lds r24,I2C_TransferActive
3256 1942 8823 tst r24
3257 1944 01F0 breq .L186
3258 1946 1092 0000 sts I2C_TransferActive,__zero_reg__
3259 194a 0895 ret
3260 .L186:
3261 194c 8093 0000 sts motor_write,r24
3262 1950 8093 0000 sts twi_state,r24
3263 1954 8091 0000 lds r24,BLFlags
3264 1958 8E7F andi r24,lo8(-2)
3265 195a 8093 0000 sts BLFlags,r24
3266 195e 85EA ldi r24,lo8(-91)
3267 1960 8093 BC00 sts 188,r24
3268 1964 0895 ret
3269 /* epilogue: frame size=0 */
3270 /* epilogue: noreturn */
3271 /* epilogue end (size=0) */
3272 /* function SendMotorData size 61 (61) */
3274 .global ParameterZuordnung
3276 ParameterZuordnung:
3277 /* prologue: frame size=0 */
3278 1966 CF93 push r28
3279 1968 DF93 push r29
3280 /* prologue end (size=2) */
3281 196a A0E0 ldi r26,lo8(Poti)
3282 196c B0E0 ldi r27,hi8(Poti)
3283 196e C0E0 ldi r28,lo8(EE_Parameter+5)
3284 1970 D0E0 ldi r29,hi8(EE_Parameter+5)
3285 1972 57E0 ldi r21,lo8(7)
3286 .L203:
3287 1974 9991 ld r25,Y+
3288 1976 E92F mov r30,r25
3289 1978 FF27 clr r31
3290 197a EE0F add r30,r30
3291 197c FF1F adc r31,r31
3292 197e E050 subi r30,lo8(-(PPM_in))
3293 1980 F040 sbci r31,hi8(-(PPM_in))
3294 1982 0190 ld __tmp_reg__,Z+
3295 1984 F081 ld r31,Z
3296 1986 E02D mov r30,__tmp_reg__
3297 1988 E158 subi r30,lo8(-(127))
3298 198a FF4F sbci r31,hi8(-(127))
3299 198c EF3F cpi r30,255
3300 198e F105 cpc r31,__zero_reg__
3301 1990 01F0 breq .L194
3302 1992 04F0 brlt .L194
3303 1994 EFEF ldi r30,lo8(255)
3304 1996 F0E0 ldi r31,hi8(255)
3305 1998 00C0 rjmp .L195
3306 .L194:
3307 199a F7FF sbrs r31,7
3308 199c 00C0 rjmp .L195
3309 199e E0E0 ldi r30,lo8(0)
3310 19a0 F0E0 ldi r31,hi8(0)
3311 .L195:
3312 19a2 9931 cpi r25,lo8(25)
3313 19a4 01F4 brne .L197
3314 19a6 EC93 st X,r30
3315 19a8 00C0 rjmp .L193
3316 .L197:
3317 19aa 4C91 ld r20,X
3318 19ac 242F mov r18,r20
3319 19ae 3327 clr r19
3320 19b0 E217 cp r30,r18
3321 19b2 F307 cpc r31,r19
3322 19b4 01F0 breq .L193
3323 19b6 CF01 movw r24,r30
3324 19b8 821B sub r24,r18
3325 19ba 930B sbc r25,r19
3326 19bc 97FD sbrc r25,7
3327 19be 0396 adiw r24,3
3328 .L200:
3329 19c0 9595 asr r25
3330 19c2 8795 ror r24
3331 19c4 9595 asr r25
3332 19c6 8795 ror r24
3333 19c8 242F mov r18,r20
3334 19ca 280F add r18,r24
3335 19cc 2C93 st X,r18
3336 19ce 822F mov r24,r18
3337 19d0 9927 clr r25
3338 19d2 E817 cp r30,r24
3339 19d4 F907 cpc r31,r25
3340 19d6 04F4 brge .L201
3341 19d8 2150 subi r18,lo8(-(-1))
3342 19da 00C0 rjmp .L327
3343 .L201:
3344 19dc 2F5F subi r18,lo8(-(1))
3345 .L327:
3346 19de 2C93 st X,r18
3347 .L193:
3348 19e0 5150 subi r21,lo8(-(-1))
3349 19e2 1196 adiw r26,1
3350 19e4 57FF sbrs r21,7
3351 19e6 00C0 rjmp .L203
3352 19e8 8091 0000 lds r24,EE_Parameter+15
3353 19ec 883F cpi r24,lo8(-8)
3354 19ee 00F0 brlo .L328
3355 19f0 EFEF ldi r30,lo8(255)
3356 19f2 F0E0 ldi r31,hi8(255)
3357 19f4 E81B sub r30,r24
3358 19f6 F109 sbc r31,__zero_reg__
3359 19f8 E050 subi r30,lo8(-(Poti))
3360 19fa F040 sbci r31,hi8(-(Poti))
3361 19fc 8081 ld r24,Z
3362 .L328:
3363 19fe 8093 0000 sts Parameter_Luftdruck_D,r24
3364 1a02 8091 0000 lds r24,Parameter_Luftdruck_D
3365 1a06 8823 tst r24
3366 1a08 01F0 breq .L207
3367 1a0a 8436 cpi r24,lo8(100)
3368 1a0c 00F0 brlo .L207
3369 1a0e 84E6 ldi r24,lo8(100)
3370 1a10 8093 0000 sts Parameter_Luftdruck_D,r24
3371 .L207:
3372 1a14 8091 0000 lds r24,EE_Parameter+17
3373 1a18 883F cpi r24,lo8(-8)
3374 1a1a 00F0 brlo .L329
3375 1a1c EFEF ldi r30,lo8(255)
3376 1a1e F0E0 ldi r31,hi8(255)
3377 1a20 E81B sub r30,r24
3378 1a22 F109 sbc r31,__zero_reg__
3379 1a24 E050 subi r30,lo8(-(Poti))
3380 1a26 F040 sbci r31,hi8(-(Poti))
3381 1a28 8081 ld r24,Z
3382 .L329:
3383 1a2a 8093 0000 sts Parameter_Hoehe_P,r24
3384 1a2e 8091 0000 lds r24,Parameter_Hoehe_P
3385 1a32 8823 tst r24
3386 1a34 01F0 breq .L212
3387 1a36 8436 cpi r24,lo8(100)
3388 1a38 00F0 brlo .L212
3389 1a3a 84E6 ldi r24,lo8(100)
3390 1a3c 8093 0000 sts Parameter_Hoehe_P,r24
3391 .L212:
3392 1a40 8091 0000 lds r24,EE_Parameter+30
3393 1a44 883F cpi r24,lo8(-8)
3394 1a46 00F0 brlo .L330
3395 1a48 EFEF ldi r30,lo8(255)
3396 1a4a F0E0 ldi r31,hi8(255)
3397 1a4c E81B sub r30,r24
3398 1a4e F109 sbc r31,__zero_reg__
3399 1a50 E050 subi r30,lo8(-(Poti))
3400 1a52 F040 sbci r31,hi8(-(Poti))
3401 1a54 8081 ld r24,Z
3402 .L330:
3403 1a56 8093 0000 sts Parameter_Gyro_P,r24
3404 1a5a 8091 0000 lds r24,Parameter_Gyro_P
3405 1a5e 8B30 cpi r24,lo8(11)
3406 1a60 00F4 brsh .L216
3407 1a62 8AE0 ldi r24,lo8(10)
3408 1a64 00C0 rjmp .L331
3409 .L216:
3410 1a66 8F3F cpi r24,lo8(-1)
3411 1a68 01F4 brne .L217
3412 .L331:
3413 1a6a 8093 0000 sts Parameter_Gyro_P,r24
3414 .L217:
3415 1a6e 8091 0000 lds r24,EE_Parameter+75
3416 1a72 883F cpi r24,lo8(-8)
3417 1a74 00F0 brlo .L332
3418 1a76 EFEF ldi r30,lo8(255)
3419 1a78 F0E0 ldi r31,hi8(255)
3420 1a7a E81B sub r30,r24
3421 1a7c F109 sbc r31,__zero_reg__
3422 1a7e E050 subi r30,lo8(-(Poti))
3423 1a80 F040 sbci r31,hi8(-(Poti))
3424 1a82 8081 ld r24,Z
3425 .L332:
3426 1a84 8093 0000 sts Parameter_J16Timing,r24
3427 1a88 8091 0000 lds r24,Parameter_J16Timing
3428 1a8c 8630 cpi r24,lo8(6)
3429 1a8e 00F4 brsh .L221
3430 1a90 85E0 ldi r24,lo8(5)
3431 1a92 00C0 rjmp .L333
3432 .L221:
3433 1a94 8F3F cpi r24,lo8(-1)
3434 1a96 01F4 brne .L222
3435 .L333:
3436 1a98 8093 0000 sts Parameter_J16Timing,r24
3437 .L222:
3438 1a9c 8091 0000 lds r24,EE_Parameter+77
3439 1aa0 883F cpi r24,lo8(-8)
3440 1aa2 00F0 brlo .L334
3441 1aa4 EFEF ldi r30,lo8(255)
3442 1aa6 F0E0 ldi r31,hi8(255)
3443 1aa8 E81B sub r30,r24
3444 1aaa F109 sbc r31,__zero_reg__
3445 1aac E050 subi r30,lo8(-(Poti))
3446 1aae F040 sbci r31,hi8(-(Poti))
3447 1ab0 8081 ld r24,Z
3448 .L334:
3449 1ab2 8093 0000 sts Parameter_J17Timing,r24
3450 1ab6 8091 0000 lds r24,Parameter_J17Timing
3451 1aba 8630 cpi r24,lo8(6)
3452 1abc 00F4 brsh .L226
3453 1abe 85E0 ldi r24,lo8(5)
3454 1ac0 00C0 rjmp .L335
3455 .L226:
3456 1ac2 8F3F cpi r24,lo8(-1)
3457 1ac4 01F4 brne .L227
3458 .L335:
3459 1ac6 8093 0000 sts Parameter_J17Timing,r24
3460 .L227:
3461 1aca 8091 0000 lds r24,EE_Parameter+56
3462 1ace 873F cpi r24,lo8(-9)
3463 1ad0 01F4 brne .L229
3464 1ad2 4299 sbic 40-0x20,2
3465 1ad4 00C0 rjmp .L368
3466 1ad6 00C0 rjmp .L234
3467 .L229:
3468 1ad8 863F cpi r24,lo8(-10)
3469 1ada 01F4 brne .L233
3470 1adc 439B sbis 40-0x20,3
3471 1ade 00C0 rjmp .L234
3472 .L368:
3473 1ae0 8CE8 ldi r24,lo8(-116)
3474 1ae2 00C0 rjmp .L336
3475 .L234:
3476 1ae4 86E4 ldi r24,lo8(70)
3477 1ae6 00C0 rjmp .L336
3478 .L233:
3479 1ae8 883F cpi r24,lo8(-8)
3480 1aea 00F0 brlo .L336
3481 1aec EFEF ldi r30,lo8(255)
3482 1aee F0E0 ldi r31,hi8(255)
3483 1af0 E81B sub r30,r24
3484 1af2 F109 sbc r31,__zero_reg__
3485 1af4 E050 subi r30,lo8(-(Poti))
3486 1af6 F040 sbci r31,hi8(-(Poti))
3487 1af8 8081 ld r24,Z
3488 .L336:
3489 1afa 8093 0000 sts Parameter_Servo3,r24
3490 1afe 8091 0000 lds r24,EE_Parameter+57
3491 1b02 873F cpi r24,lo8(-9)
3492 1b04 01F4 brne .L239
3493 1b06 4299 sbic 40-0x20,2
3494 1b08 00C0 rjmp .L369
3495 1b0a 00C0 rjmp .L244
3496 .L239:
3497 1b0c 863F cpi r24,lo8(-10)
3498 1b0e 01F4 brne .L243
3499 1b10 439B sbis 40-0x20,3
3500 1b12 00C0 rjmp .L244
3501 .L369:
3502 1b14 8CE8 ldi r24,lo8(-116)
3503 1b16 00C0 rjmp .L337
3504 .L244:
3505 1b18 86E4 ldi r24,lo8(70)
3506 1b1a 00C0 rjmp .L337
3507 .L243:
3508 1b1c 883F cpi r24,lo8(-8)
3509 1b1e 00F0 brlo .L337
3510 1b20 EFEF ldi r30,lo8(255)
3511 1b22 F0E0 ldi r31,hi8(255)
3512 1b24 E81B sub r30,r24
3513 1b26 F109 sbc r31,__zero_reg__
3514 1b28 E050 subi r30,lo8(-(Poti))
3515 1b2a F040 sbci r31,hi8(-(Poti))
3516 1b2c 8081 ld r24,Z
3517 .L337:
3518 1b2e 8093 0000 sts Parameter_Servo4,r24
3519 1b32 8091 0000 lds r24,EE_Parameter+58
3520 1b36 883F cpi r24,lo8(-8)
3521 1b38 00F0 brlo .L338
3522 1b3a EFEF ldi r30,lo8(255)
3523 1b3c F0E0 ldi r31,hi8(255)
3524 1b3e E81B sub r30,r24
3525 1b40 F109 sbc r31,__zero_reg__
3526 1b42 E050 subi r30,lo8(-(Poti))
3527 1b44 F040 sbci r31,hi8(-(Poti))
3528 1b46 8081 ld r24,Z
3529 .L338:
3530 1b48 8093 0000 sts Parameter_Servo5,r24
3531 1b4c 8091 0000 lds r24,EE_Parameter+16
3532 1b50 883F cpi r24,lo8(-8)
3533 1b52 00F0 brlo .L339
3534 1b54 EFEF ldi r30,lo8(255)
3535 1b56 F0E0 ldi r31,hi8(255)
3536 1b58 E81B sub r30,r24
3537 1b5a F109 sbc r31,__zero_reg__
3538 1b5c E050 subi r30,lo8(-(Poti))
3539 1b5e F040 sbci r31,hi8(-(Poti))
3540 1b60 8081 ld r24,Z
3541 .L339:
3542 1b62 8093 0000 sts Parameter_HoehenSchalter,r24
3543 1b66 8091 0000 lds r24,EE_Parameter+19
3544 1b6a 883F cpi r24,lo8(-8)
3545 1b6c 00F0 brlo .L340
3546 1b6e EFEF ldi r30,lo8(255)
3547 1b70 F0E0 ldi r31,hi8(255)
3548 1b72 E81B sub r30,r24
3549 1b74 F109 sbc r31,__zero_reg__
3550 1b76 E050 subi r30,lo8(-(Poti))
3551 1b78 F040 sbci r31,hi8(-(Poti))
3552 1b7a 8081 ld r24,Z
3553 .L340:
3554 1b7c 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
3555 1b80 8091 0000 lds r24,EE_Parameter+21
3556 1b84 883F cpi r24,lo8(-8)
3557 1b86 00F0 brlo .L341
3558 1b88 EFEF ldi r30,lo8(255)
3559 1b8a F0E0 ldi r31,hi8(255)
3560 1b8c E81B sub r30,r24
3561 1b8e F109 sbc r31,__zero_reg__
3562 1b90 E050 subi r30,lo8(-(Poti))
3563 1b92 F040 sbci r31,hi8(-(Poti))
3564 1b94 8081 ld r24,Z
3565 .L341:
3566 1b96 8093 0000 sts Parameter_Hoehe_GPS_Z,r24
3567 1b9a 8091 0000 lds r24,EE_Parameter+29
3568 1b9e 883F cpi r24,lo8(-8)
3569 1ba0 00F0 brlo .L342
3570 1ba2 EFEF ldi r30,lo8(255)
3571 1ba4 F0E0 ldi r31,hi8(255)
3572 1ba6 E81B sub r30,r24
3573 1ba8 F109 sbc r31,__zero_reg__
3574 1baa E050 subi r30,lo8(-(Poti))
3575 1bac F040 sbci r31,hi8(-(Poti))
3576 1bae 8081 ld r24,Z
3577 .L342:
3578 1bb0 8093 0000 sts Parameter_KompassWirkung,r24
3579 1bb4 8091 0000 lds r24,EE_Parameter+31
3580 1bb8 883F cpi r24,lo8(-8)
3581 1bba 00F0 brlo .L343
3582 1bbc EFEF ldi r30,lo8(255)
3583 1bbe F0E0 ldi r31,hi8(255)
3584 1bc0 E81B sub r30,r24
3585 1bc2 F109 sbc r31,__zero_reg__
3586 1bc4 E050 subi r30,lo8(-(Poti))
3587 1bc6 F040 sbci r31,hi8(-(Poti))
3588 1bc8 8081 ld r24,Z
3589 .L343:
3590 1bca 8093 0000 sts Parameter_Gyro_I,r24
3591 1bce 8091 0000 lds r24,EE_Parameter+32
3592 1bd2 883F cpi r24,lo8(-8)
3593 1bd4 00F0 brlo .L344
3594 1bd6 EFEF ldi r30,lo8(255)
3595 1bd8 F0E0 ldi r31,hi8(255)
3596 1bda E81B sub r30,r24
3597 1bdc F109 sbc r31,__zero_reg__
3598 1bde E050 subi r30,lo8(-(Poti))
3599 1be0 F040 sbci r31,hi8(-(Poti))
3600 1be2 8081 ld r24,Z
3601 .L344:
3602 1be4 8093 0000 sts Parameter_Gyro_D,r24
3603 1be8 8091 0000 lds r24,EE_Parameter+33
3604 1bec 883F cpi r24,lo8(-8)
3605 1bee 00F0 brlo .L345
3606 1bf0 EFEF ldi r30,lo8(255)
3607 1bf2 F0E0 ldi r31,hi8(255)
3608 1bf4 E81B sub r30,r24
3609 1bf6 F109 sbc r31,__zero_reg__
3610 1bf8 E050 subi r30,lo8(-(Poti))
3611 1bfa F040 sbci r31,hi8(-(Poti))
3612 1bfc 8081 ld r24,Z
3613 .L345:
3614 1bfe 8093 0000 sts Parameter_Gyro_Gier_P,r24
3615 1c02 8091 0000 lds r24,EE_Parameter+34
3616 1c06 883F cpi r24,lo8(-8)
3617 1c08 00F0 brlo .L346
3618 1c0a EFEF ldi r30,lo8(255)
3619 1c0c F0E0 ldi r31,hi8(255)
3620 1c0e E81B sub r30,r24
3621 1c10 F109 sbc r31,__zero_reg__
3622 1c12 E050 subi r30,lo8(-(Poti))
3623 1c14 F040 sbci r31,hi8(-(Poti))
3624 1c16 8081 ld r24,Z
3625 .L346:
3626 1c18 8093 0000 sts Parameter_Gyro_Gier_I,r24
3627 1c1c 8091 0000 lds r24,EE_Parameter+40
3628 1c20 883F cpi r24,lo8(-8)
3629 1c22 00F0 brlo .L347
3630 1c24 EFEF ldi r30,lo8(255)
3631 1c26 F0E0 ldi r31,hi8(255)
3632 1c28 E81B sub r30,r24
3633 1c2a F109 sbc r31,__zero_reg__
3634 1c2c E050 subi r30,lo8(-(Poti))
3635 1c2e F040 sbci r31,hi8(-(Poti))
3636 1c30 8081 ld r24,Z
3637 .L347:
3638 1c32 8093 0000 sts Parameter_I_Faktor,r24
3639 1c36 8091 0000 lds r24,EE_Parameter+41
3640 1c3a 883F cpi r24,lo8(-8)
3641 1c3c 00F0 brlo .L348
3642 1c3e EFEF ldi r30,lo8(255)
3643 1c40 F0E0 ldi r31,hi8(255)
3644 1c42 E81B sub r30,r24
3645 1c44 F109 sbc r31,__zero_reg__
3646 1c46 E050 subi r30,lo8(-(Poti))
3647 1c48 F040 sbci r31,hi8(-(Poti))
3648 1c4a 8081 ld r24,Z
3649 .L348:
3650 1c4c 8093 0000 sts Parameter_UserParam1,r24
3651 1c50 8091 0000 lds r24,EE_Parameter+42
3652 1c54 883F cpi r24,lo8(-8)
3653 1c56 00F0 brlo .L349
3654 1c58 EFEF ldi r30,lo8(255)
3655 1c5a F0E0 ldi r31,hi8(255)
3656 1c5c E81B sub r30,r24
3657 1c5e F109 sbc r31,__zero_reg__
3658 1c60 E050 subi r30,lo8(-(Poti))
3659 1c62 F040 sbci r31,hi8(-(Poti))
3660 1c64 8081 ld r24,Z
3661 .L349:
3662 1c66 8093 0000 sts Parameter_UserParam2,r24
3663 1c6a 8091 0000 lds r24,EE_Parameter+43
3664 1c6e 883F cpi r24,lo8(-8)
3665 1c70 00F0 brlo .L350
3666 1c72 EFEF ldi r30,lo8(255)
3667 1c74 F0E0 ldi r31,hi8(255)
3668 1c76 E81B sub r30,r24
3669 1c78 F109 sbc r31,__zero_reg__
3670 1c7a E050 subi r30,lo8(-(Poti))
3671 1c7c F040 sbci r31,hi8(-(Poti))
3672 1c7e 8081 ld r24,Z
3673 .L350:
3674 1c80 8093 0000 sts Parameter_UserParam3,r24
3675 1c84 8091 0000 lds r24,EE_Parameter+44
3676 1c88 883F cpi r24,lo8(-8)
3677 1c8a 00F0 brlo .L351
3678 1c8c EFEF ldi r30,lo8(255)
3679 1c8e F0E0 ldi r31,hi8(255)
3680 1c90 E81B sub r30,r24
3681 1c92 F109 sbc r31,__zero_reg__
3682 1c94 E050 subi r30,lo8(-(Poti))
3683 1c96 F040 sbci r31,hi8(-(Poti))
3684 1c98 8081 ld r24,Z
3685 .L351:
3686 1c9a 8093 0000 sts Parameter_UserParam4,r24
3687 1c9e 8091 0000 lds r24,EE_Parameter+70
3688 1ca2 883F cpi r24,lo8(-8)
3689 1ca4 00F0 brlo .L352
3690 1ca6 EFEF ldi r30,lo8(255)
3691 1ca8 F0E0 ldi r31,hi8(255)
3692 1caa E81B sub r30,r24
3693 1cac F109 sbc r31,__zero_reg__
3694 1cae E050 subi r30,lo8(-(Poti))
3695 1cb0 F040 sbci r31,hi8(-(Poti))
3696 1cb2 8081 ld r24,Z
3697 .L352:
3698 1cb4 8093 0000 sts Parameter_UserParam5,r24
3699 1cb8 8091 0000 lds r24,EE_Parameter+71
3700 1cbc 883F cpi r24,lo8(-8)
3701 1cbe 00F0 brlo .L353
3702 1cc0 EFEF ldi r30,lo8(255)
3703 1cc2 F0E0 ldi r31,hi8(255)
3704 1cc4 E81B sub r30,r24
3705 1cc6 F109 sbc r31,__zero_reg__
3706 1cc8 E050 subi r30,lo8(-(Poti))
3707 1cca F040 sbci r31,hi8(-(Poti))
3708 1ccc 8081 ld r24,Z
3709 .L353:
3710 1cce 8093 0000 sts Parameter_UserParam6,r24
3711 1cd2 8091 0000 lds r24,EE_Parameter+72
3712 1cd6 883F cpi r24,lo8(-8)
3713 1cd8 00F0 brlo .L354
3714 1cda EFEF ldi r30,lo8(255)
3715 1cdc F0E0 ldi r31,hi8(255)
3716 1cde E81B sub r30,r24
3717 1ce0 F109 sbc r31,__zero_reg__
3718 1ce2 E050 subi r30,lo8(-(Poti))
3719 1ce4 F040 sbci r31,hi8(-(Poti))
3720 1ce6 8081 ld r24,Z
3721 .L354:
3722 1ce8 8093 0000 sts Parameter_UserParam7,r24
3723 1cec 8091 0000 lds r24,EE_Parameter+73
3724 1cf0 883F cpi r24,lo8(-8)
3725 1cf2 00F0 brlo .L355
3726 1cf4 EFEF ldi r30,lo8(255)
3727 1cf6 F0E0 ldi r31,hi8(255)
3728 1cf8 E81B sub r30,r24
3729 1cfa F109 sbc r31,__zero_reg__
3730 1cfc E050 subi r30,lo8(-(Poti))
3731 1cfe F040 sbci r31,hi8(-(Poti))
3732 1d00 8081 ld r24,Z
3733 .L355:
3734 1d02 8093 0000 sts Parameter_UserParam8,r24
3735 1d06 8091 0000 lds r24,EE_Parameter+45
3736 1d0a 883F cpi r24,lo8(-8)
3737 1d0c 00F0 brlo .L356
3738 1d0e EFEF ldi r30,lo8(255)
3739 1d10 F0E0 ldi r31,hi8(255)
3740 1d12 E81B sub r30,r24
3741 1d14 F109 sbc r31,__zero_reg__
3742 1d16 E050 subi r30,lo8(-(Poti))
3743 1d18 F040 sbci r31,hi8(-(Poti))
3744 1d1a 8081 ld r24,Z
3745 .L356:
3746 1d1c 8093 0000 sts Parameter_ServoNickControl,r24
3747 1d20 8091 0000 lds r24,EE_Parameter+49
3748 1d24 883F cpi r24,lo8(-8)
3749 1d26 00F0 brlo .L357
3750 1d28 EFEF ldi r30,lo8(255)
3751 1d2a F0E0 ldi r31,hi8(255)
3752 1d2c E81B sub r30,r24
3753 1d2e F109 sbc r31,__zero_reg__
3754 1d30 E050 subi r30,lo8(-(Poti))
3755 1d32 F040 sbci r31,hi8(-(Poti))
3756 1d34 8081 ld r24,Z
3757 .L357:
3758 1d36 8093 0000 sts Parameter_ServoRollControl,r24
3759 1d3a 8091 0000 lds r24,EE_Parameter+46
3760 1d3e 883F cpi r24,lo8(-8)
3761 1d40 00F0 brlo .L358
3762 1d42 EFEF ldi r30,lo8(255)
3763 1d44 F0E0 ldi r31,hi8(255)
3764 1d46 E81B sub r30,r24
3765 1d48 F109 sbc r31,__zero_reg__
3766 1d4a E050 subi r30,lo8(-(Poti))
3767 1d4c F040 sbci r31,hi8(-(Poti))
3768 1d4e 8081 ld r24,Z
3769 .L358:
3770 1d50 8093 0000 sts Parameter_ServoNickComp,r24
3771 1d54 8091 0000 lds r24,EE_Parameter+50
3772 1d58 883F cpi r24,lo8(-8)
3773 1d5a 00F0 brlo .L359
3774 1d5c EFEF ldi r30,lo8(255)
3775 1d5e F0E0 ldi r31,hi8(255)
3776 1d60 E81B sub r30,r24
3777 1d62 F109 sbc r31,__zero_reg__
3778 1d64 E050 subi r30,lo8(-(Poti))
3779 1d66 F040 sbci r31,hi8(-(Poti))
3780 1d68 8081 ld r24,Z
3781 .L359:
3782 1d6a 8093 0000 sts Parameter_ServoRollComp,r24
3783 1d6e 8091 0000 lds r24,EE_Parameter+59
3784 1d72 883F cpi r24,lo8(-8)
3785 1d74 00F0 brlo .L360
3786 1d76 EFEF ldi r30,lo8(255)
3787 1d78 F0E0 ldi r31,hi8(255)
3788 1d7a E81B sub r30,r24
3789 1d7c F109 sbc r31,__zero_reg__
3790 1d7e E050 subi r30,lo8(-(Poti))
3791 1d80 F040 sbci r31,hi8(-(Poti))
3792 1d82 8081 ld r24,Z
3793 .L360:
3794 1d84 8093 0000 sts Parameter_LoopGasLimit,r24
3795 1d88 8091 0000 lds r24,EE_Parameter+62
3796 1d8c 883F cpi r24,lo8(-8)
3797 1d8e 00F0 brlo .L361
3798 1d90 EFEF ldi r30,lo8(255)
3799 1d92 F0E0 ldi r31,hi8(255)
3800 1d94 E81B sub r30,r24
3801 1d96 F109 sbc r31,__zero_reg__
3802 1d98 E050 subi r30,lo8(-(Poti))
3803 1d9a F040 sbci r31,hi8(-(Poti))
3804 1d9c 8081 ld r24,Z
3805 .L361:
3806 1d9e 8093 0000 sts Parameter_AchsKopplung1,r24
3807 1da2 8091 0000 lds r24,EE_Parameter+63
3808 1da6 883F cpi r24,lo8(-8)
3809 1da8 00F0 brlo .L362
3810 1daa EFEF ldi r30,lo8(255)
3811 1dac F0E0 ldi r31,hi8(255)
3812 1dae E81B sub r30,r24
3813 1db0 F109 sbc r31,__zero_reg__
3814 1db2 E050 subi r30,lo8(-(Poti))
3815 1db4 F040 sbci r31,hi8(-(Poti))
3816 1db6 8081 ld r24,Z
3817 .L362:
3818 1db8 8093 0000 sts Parameter_AchsKopplung2,r24
3819 1dbc 8091 0000 lds r24,EE_Parameter+64
3820 1dc0 883F cpi r24,lo8(-8)
3821 1dc2 00F0 brlo .L363
3822 1dc4 EFEF ldi r30,lo8(255)
3823 1dc6 F0E0 ldi r31,hi8(255)
3824 1dc8 E81B sub r30,r24
3825 1dca F109 sbc r31,__zero_reg__
3826 1dcc E050 subi r30,lo8(-(Poti))
3827 1dce F040 sbci r31,hi8(-(Poti))
3828 1dd0 8081 ld r24,Z
3829 .L363:
3830 1dd2 8093 0000 sts Parameter_CouplingYawCorrection,r24
3831 1dd6 8091 0000 lds r24,EE_Parameter+104
3832 1dda 883F cpi r24,lo8(-8)
3833 1ddc 00F0 brlo .L364
3834 1dde EFEF ldi r30,lo8(255)
3835 1de0 F0E0 ldi r31,hi8(255)
3836 1de2 E81B sub r30,r24
3837 1de4 F109 sbc r31,__zero_reg__
3838 1de6 E050 subi r30,lo8(-(Poti))
3839 1de8 F040 sbci r31,hi8(-(Poti))
3840 1dea 8081 ld r24,Z
3841 .L364:
3842 1dec 8093 0000 sts Parameter_MaximumAltitude,r24
3843 1df0 9091 0000 lds r25,NC_To_FC_MaxAltitude
3844 1df4 9923 tst r25
3845 1df6 01F0 breq .L305
3846 1df8 8091 0000 lds r24,Parameter_MaximumAltitude
3847 1dfc 9817 cp r25,r24
3848 1dfe 00F0 brlo .L304
3849 .L305:
3850 1e00 8091 0000 lds r24,Parameter_MaximumAltitude
3851 1e04 8823 tst r24
3852 1e06 01F4 brne .L303
3853 .L304:
3854 1e08 9093 0000 sts Parameter_MaximumAltitude,r25
3855 .L303:
3856 1e0c 8091 0000 lds r24,EE_Parameter+13
3857 1e10 8093 0000 sts Parameter_GlobalConfig,r24
3858 1e14 8091 0000 lds r24,EE_Parameter+110
3859 1e18 8093 0000 sts Parameter_ExtraConfig,r24
3860 1e1c 8091 0000 lds r24,EE_Parameter+69
3861 1e20 883F cpi r24,lo8(-8)
3862 1e22 00F0 brlo .L365
3863 1e24 EFEF ldi r30,lo8(255)
3864 1e26 F0E0 ldi r31,hi8(255)
3865 1e28 E81B sub r30,r24
3866 1e2a F109 sbc r31,__zero_reg__
3867 1e2c E050 subi r30,lo8(-(Poti))
3868 1e2e F040 sbci r31,hi8(-(Poti))
3869 1e30 8081 ld r24,Z
3870 .L365:
3871 1e32 8093 0000 sts Parameter_DynamicStability,r24
3872 1e36 8091 0000 lds r24,EE_Parameter+97
3873 1e3a 883F cpi r24,lo8(-8)
3874 1e3c 00F0 brlo .L366
3875 1e3e EFEF ldi r30,lo8(255)
3876 1e40 F0E0 ldi r31,hi8(255)
3877 1e42 E81B sub r30,r24
3878 1e44 F109 sbc r31,__zero_reg__
3879 1e46 E050 subi r30,lo8(-(Poti))
3880 1e48 F040 sbci r31,hi8(-(Poti))
3881 1e4a 8081 ld r24,Z
3882 .L366:
3883 1e4c 8093 0000 sts Parameter_ExternalControl,r24
3884 1e50 8091 0000 lds r24,Parameter_I_Faktor
3885 1e54 282F mov r18,r24
3886 1e56 3327 clr r19
3887 1e58 2F5F subi r18,lo8(-(1))
3888 1e5a 3F4F sbci r19,hi8(-(1))
3889 1e5c 8CE3 ldi r24,lo8(10300)
3890 1e5e 98E2 ldi r25,hi8(10300)
3891 1e60 B901 movw r22,r18
3892 1e62 0E94 0000 call __divmodhi4
3893 1e66 7093 0000 sts (Ki)+1,r23
3894 1e6a 6093 0000 sts Ki,r22
3895 1e6e 8091 0000 lds r24,EE_Parameter+27
3896 1e72 8093 0000 sts MAX_GAS,r24
3897 1e76 8091 0000 lds r24,EE_Parameter+26
3898 1e7a 8093 0000 sts MIN_GAS,r24
3899 1e7e 9091 0000 lds r25,EE_Parameter+99
3900 1e82 9333 cpi r25,lo8(51)
3901 1e84 00F4 brsh .+2
3902 1e86 00C0 rjmp .L310
3903 1e88 81E0 ldi r24,lo8(1)
3904 1e8a 8093 0000 sts CareFree,r24
3905 1e8e 983F cpi r25,lo8(-8)
3906 1e90 00F0 brlo .L311
3907 1e92 EFEF ldi r30,lo8(255)
3908 1e94 F0E0 ldi r31,hi8(255)
3909 1e96 E91B sub r30,r25
3910 1e98 F109 sbc r31,__zero_reg__
3911 1e9a E050 subi r30,lo8(-(Poti))
3912 1e9c F040 sbci r31,hi8(-(Poti))
3913 1e9e 8081 ld r24,Z
3914 1ea0 8233 cpi r24,lo8(50)
3915 1ea2 00F4 brsh .L311
3916 1ea4 1092 0000 sts CareFree,__zero_reg__
3917 .L311:
3918 1ea8 8091 0000 lds r24,carefree_old
3919 1eac 2091 0000 lds r18,CareFree
3920 1eb0 8217 cp r24,r18
3921 1eb2 01F0 breq .L312
3922 1eb4 8330 cpi r24,lo8(3)
3923 1eb6 00F4 brsh .L313
3924 1eb8 3091 0000 lds r19,SpeakHoTT
3925 1ebc 2223 tst r18
3926 1ebe 01F0 breq .L314
3927 1ec0 8CED ldi r24,lo8(1500)
3928 1ec2 95E0 ldi r25,hi8(1500)
3929 1ec4 9093 0000 sts (beeptime)+1,r25
3930 1ec8 8093 0000 sts beeptime,r24
3931 1ecc 3323 tst r19
3932 1ece 01F4 brne .L316
3933 1ed0 8EE2 ldi r24,lo8(46)
3934 1ed2 00C0 rjmp .L367
3935 .L314:
3936 1ed4 88EC ldi r24,lo8(200)
3937 1ed6 90E0 ldi r25,hi8(200)
3938 1ed8 9093 0000 sts (beeptime)+1,r25
3939 1edc 8093 0000 sts beeptime,r24
3940 1ee0 3323 tst r19
3941 1ee2 01F4 brne .L316
3942 1ee4 87E1 ldi r24,lo8(23)
3943 .L367:
3944 1ee6 8093 0000 sts SpeakHoTT,r24
3945 .L316:
3946 1eea 85E0 ldi r24,lo8(5)
3947 1eec 8093 0000 sts NeueKompassRichtungMerken,r24
3948 1ef0 2093 0000 sts carefree_old,r18
3949 1ef4 00C0 rjmp .L312
3950 .L313:
3951 1ef6 8150 subi r24,lo8(-(-1))
3952 1ef8 8093 0000 sts carefree_old,r24
3953 .L312:
3954 1efc 8091 0000 lds r24,FromNaviCtrl+7
3955 1f00 9091 0000 lds r25,(FromNaviCtrl+7)+1
3956 1f04 97FF sbrs r25,7
3957 1f06 00C0 rjmp .L320
3958 1f08 8091 0000 lds r24,CareFree
3959 1f0c 8823 tst r24
3960 1f0e 01F0 breq .L320
3961 1f10 8091 0000 lds r24,VersionInfo+5
3962 1f14 8068 ori r24,lo8(-128)
3963 1f16 8093 0000 sts VersionInfo+5,r24
3964 1f1a 00C0 rjmp .L320
3965 .L310:
3966 1f1c 1092 0000 sts CareFree,__zero_reg__
3967 1f20 8AE0 ldi r24,lo8(10)
3968 1f22 8093 0000 sts carefree_old,r24
3969 .L320:
3970 1f26 8091 0000 lds r24,FromNaviCtrl+7
3971 1f2a 9091 0000 lds r25,(FromNaviCtrl+7)+1
3972 1f2e 97FF sbrs r25,7
3973 1f30 00C0 rjmp .L321
3974 1f32 8091 0000 lds r24,MotorenEin
3975 1f36 8823 tst r24
3976 1f38 01F0 breq .L321
3977 1f3a 8091 0000 lds r24,CareFree
3978 1f3e 8823 tst r24
3979 1f40 01F0 breq .L321
3980 1f42 8091 0000 lds r24,BeepMuster
3981 1f46 9091 0000 lds r25,(BeepMuster)+1
3982 1f4a 8F5F subi r24,lo8(-1)
3983 1f4c 9F4F sbci r25,hi8(-1)
3984 1f4e 01F4 brne .L321
3985 1f50 88E9 ldi r24,lo8(15000)
3986 1f52 9AE3 ldi r25,hi8(15000)
3987 1f54 9093 0000 sts (beeptime)+1,r25
3988 1f58 8093 0000 sts beeptime,r24
3989 1f5c 80E0 ldi r24,lo8(-23552)
3990 1f5e 94EA ldi r25,hi8(-23552)
3991 1f60 9093 0000 sts (BeepMuster)+1,r25
3992 1f64 8093 0000 sts BeepMuster,r24
3993 1f68 1092 0000 sts CareFree,__zero_reg__
3994 .L321:
3995 1f6c 8091 0000 lds r24,CareFree
3996 1f70 8823 tst r24
3997 1f72 01F0 breq .L322
3998 1f74 8091 0000 lds r24,FC_StatusFlags2
3999 1f78 8160 ori r24,lo8(1)
4000 1f7a 8093 0000 sts FC_StatusFlags2,r24
4001 1f7e 8091 0000 lds r24,Parameter_AchsKopplung1
4002 1f82 823D cpi r24,lo8(-46)
4003 1f84 00F4 brsh .L190
4004 1f86 825E subi r24,lo8(-(30))
4005 1f88 8093 0000 sts Parameter_AchsKopplung1,r24
4006 1f8c 00C0 rjmp .L190
4007 .L322:
4008 1f8e 8091 0000 lds r24,FC_StatusFlags2
4009 1f92 8E7F andi r24,lo8(-2)
4010 1f94 8093 0000 sts FC_StatusFlags2,r24
4011 .L190:
4012 /* epilogue: frame size=0 */
4013 1f98 DF91 pop r29
4014 1f9a CF91 pop r28
4015 1f9c 0895 ret
4016 /* epilogue end (size=3) */
4017 /* function ParameterZuordnung size 798 (793) */
4019 .lcomm sollGier.0,4
4020 .lcomm tmp_long.1,4
4021 .lcomm tmp_long2.2,4
4022 .lcomm IntegralFehlerNick.3,4
4023 .lcomm IntegralFehlerRoll.4,4
4024 .lcomm RcLostTimer.5,2
4025 .lcomm delay_neutral.6,1
4026 .lcomm delay_einschalten.7,1
4027 .lcomm delay_ausschalten.8,1
4028 .lcomm move_safety_switch.9,1
4029 .lcomm ausgleichNick.10,4
4030 .lcomm ausgleichRoll.11,4
4031 .lcomm stick_nick.12,2
4032 .lcomm stick_roll.13,2
4033 .lcomm cnt.14,2
4034 .lcomm last_n_p.15,1
4035 .lcomm last_n_n.16,1
4036 .lcomm last_r_p.17,1
4037 .lcomm last_r_n.18,1
4038 .lcomm MittelIntegralNick_Alt.19,4
4039 .lcomm MittelIntegralRoll_Alt.20,4
4040 .lcomm HeightTrimming.21,2
4041 .lcomm FilterHCGas.22,2
4042 .lcomm HoverGasFilter.23,4
4043 .data
4046 delay.24:
4047 0051 64 .byte 100
4048 .lcomm BaroAtUpperLimit.25,1
4049 .lcomm BaroAtLowerLimit.26,1
4050 .text
4051 .global MotorRegler
4053 MotorRegler:
4054 /* prologue: frame size=23 */
4055 1f9e A7E1 ldi r26,lo8(23)
4056 1fa0 B0E0 ldi r27,hi8(23)
4057 1fa2 E0E0 ldi r30,pm_lo8(1f)
4058 1fa4 F0E0 ldi r31,pm_hi8(1f)
4059 1fa6 0C94 0000 jmp __prologue_saves__+0
4060 1:
4061 /* prologue end (size=6) */
4062 1faa 0E94 0000 call Mittelwert
4063 1fae 8091 0000 lds r24,FC_StatusFlags
4064 1fb2 9927 clr r25
4065 1fb4 8471 andi r24,lo8(20)
4066 1fb6 9070 andi r25,hi8(20)
4067 1fb8 892B or r24,r25
4068 1fba 01F4 brne .L371
4069 1fbc 8091 0000 lds r24,EE_Parameter+111
4070 1fc0 82FF sbrs r24,2
4071 1fc2 00C0 rjmp .L372
4072 1fc4 8091 0000 lds r24,HoverGas
4073 1fc8 9091 0000 lds r25,(HoverGas)+1
4074 1fcc 0097 sbiw r24,0
4075 1fce 01F0 breq .L373
4076 1fd0 02E0 ldi r16,hi8(600)
4077 1fd2 8835 cpi r24,lo8(600)
4078 1fd4 9007 cpc r25,r16
4079 1fd6 04F4 brge .L373
4080 1fd8 9C01 movw r18,r24
4081 1fda 97FF sbrs r25,7
4082 1fdc 00C0 rjmp .L374
4083 1fde 2D5F subi r18,lo8(-(3))
4084 1fe0 3F4F sbci r19,hi8(-(3))
4085 .L374:
4086 1fe2 3595 asr r19
4087 1fe4 2795 ror r18
4088 1fe6 3595 asr r19
4089 1fe8 2795 ror r18
4090 1fea 8091 0000 lds r24,EE_Parameter+37
4091 1fee 9927 clr r25
4092 1ff0 289F mul r18,r24
4093 1ff2 A001 movw r20,r0
4094 1ff4 299F mul r18,r25
4095 1ff6 500D add r21,r0
4096 1ff8 389F mul r19,r24
4097 1ffa 500D add r21,r0
4098 1ffc 1124 clr r1
4099 1ffe CA01 movw r24,r20
4100 2000 64E6 ldi r22,lo8(100)
4101 2002 70E0 ldi r23,hi8(100)
4102 2004 0E94 0000 call __divmodhi4
4103 2008 CB01 movw r24,r22
4104 200a 00C0 rjmp .L893
4105 .L373:
4106 200c 8DE2 ldi r24,lo8(45)
4107 200e 90E0 ldi r25,hi8(45)
4108 2010 00C0 rjmp .L893
4109 .L372:
4110 2012 8091 0000 lds r24,EE_Parameter+37
4111 2016 9927 clr r25
4112 .L893:
4113 2018 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4114 201c 8093 0000 sts HooverGasEmergencyPercent,r24
4115 .L371:
4116 2020 2091 0000 lds r18,GasIsZeroCnt
4117 2024 3091 0000 lds r19,(GasIsZeroCnt)+1
4118 2028 55E7 ldi r21,hi8(30000)
4119 202a 2033 cpi r18,lo8(30000)
4120 202c 3507 cpc r19,r21
4121 202e 01F4 brne .L377
4122 2030 1092 0000 sts (StickGas)+1,__zero_reg__
4123 2034 1092 0000 sts StickGas,__zero_reg__
4124 2038 8091 0000 lds r24,MIN_GAS
4125 203c 9927 clr r25
4126 203e 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4127 2042 8093 0000 sts HooverGasEmergencyPercent,r24
4128 .L377:
4129 2046 6091 0000 lds r22,StickGas
4130 204a 7091 0000 lds r23,(StickGas)+1
4131 204e 7A83 std Y+2,r23
4132 2050 6983 std Y+1,r22
4133 2052 8091 0000 lds r24,MIN_GAS
4134 2056 9927 clr r25
4135 2058 0A96 adiw r24,10
4136 205a 6817 cp r22,r24
4137 205c 7907 cpc r23,r25
4138 205e 04F4 brge .L378
4139 2060 9A83 std Y+2,r25
4140 2062 8983 std Y+1,r24
4141 .L378:
4142 2064 8091 0000 lds r24,SenderOkay
4143 2068 8436 cpi r24,lo8(100)
4144 206a 00F0 brlo .+2
4145 206c 00C0 rjmp .L379
4146 206e 8091 0000 lds r24,FC_StatusFlags2
4147 2072 82FD sbrc r24,2
4148 2074 00C0 rjmp .L379
4149 2076 8091 0000 lds r24,RcLostTimer.5
4150 207a 9091 0000 lds r25,(RcLostTimer.5)+1
4151 207e 0097 sbiw r24,0
4152 2080 01F0 breq .L380
4153 2082 0197 sbiw r24,1
4154 2084 9093 0000 sts (RcLostTimer.5)+1,r25
4155 2088 8093 0000 sts RcLostTimer.5,r24
4156 208c 00C0 rjmp .L381
4157 .L380:
4158 208e 1092 0000 sts MotorenEin,__zero_reg__
4159 2092 9093 0000 sts (modell_fliegt)+1,r25
4160 2096 8093 0000 sts modell_fliegt,r24
4161 209a 8091 0000 lds r24,FC_StatusFlags
4162 209e 8D7E andi r24,lo8(-19)
4163 20a0 8093 0000 sts FC_StatusFlags,r24
4164 .L381:
4165 20a4 8091 0000 lds r24,PlatinenVersion
4166 20a8 8A30 cpi r24,lo8(10)
4167 20aa 01F0 breq .L383
4168 20ac 8431 cpi r24,lo8(20)
4169 20ae 00F0 brlo .L382
4170 .L383:
4171 20b0 289A sbi 37-0x20,0
4172 20b2 00C0 rjmp .L384
4173 .L382:
4174 20b4 2898 cbi 37-0x20,0
4175 .L384:
4176 20b6 8091 0000 lds r24,modell_fliegt
4177 20ba 9091 0000 lds r25,(modell_fliegt)+1
4178 20be 895E subi r24,lo8(1001)
4179 20c0 9340 sbci r25,hi8(1001)
4180 20c2 00F0 brlo .L385
4181 20c4 8091 0000 lds r24,Capacity+6
4182 20c8 8536 cpi r24,lo8(101)
4183 20ca 00F0 brlo .L385
4184 20cc 8091 0000 lds r24,HooverGasEmergencyPercent
4185 20d0 9091 0000 lds r25,(HooverGasEmergencyPercent)+1
4186 20d4 9A83 std Y+2,r25
4187 20d6 8983 std Y+1,r24
4188 20d8 8091 0000 lds r24,FC_StatusFlags
4189 20dc 8061 ori r24,lo8(16)
4190 20de 8093 0000 sts FC_StatusFlags,r24
4191 20e2 8091 0000 lds r24,EE_Parameter+1
4192 20e6 A82F mov r26,r24
4193 20e8 BB27 clr r27
4194 20ea AA0F add r26,r26
4195 20ec BB1F adc r27,r27
4196 20ee FD01 movw r30,r26
4197 20f0 E050 subi r30,lo8(-(PPM_diff))
4198 20f2 F040 sbci r31,hi8(-(PPM_diff))
4199 20f4 1182 std Z+1,__zero_reg__
4200 20f6 1082 st Z,__zero_reg__
4201 20f8 8091 0000 lds r24,EE_Parameter+2
4202 20fc 282F mov r18,r24
4203 20fe 3327 clr r19
4204 2100 220F add r18,r18
4205 2102 331F adc r19,r19
4206 2104 C901 movw r24,r18
4207 2106 8050 subi r24,lo8(-(PPM_diff))
4208 2108 9040 sbci r25,hi8(-(PPM_diff))
4209 210a FC01 movw r30,r24
4210 210c 1182 std Z+1,__zero_reg__
4211 210e 1082 st Z,__zero_reg__
4212 2110 A050 subi r26,lo8(-(PPM_in))
4213 2112 B040 sbci r27,hi8(-(PPM_in))
4214 2114 1196 adiw r26,1
4215 2116 1C92 st X,__zero_reg__
4216 2118 1E92 st -X,__zero_reg__
4217 211a 2050 subi r18,lo8(-(PPM_in))
4218 211c 3040 sbci r19,hi8(-(PPM_in))
4219 211e D901 movw r26,r18
4220 2120 1196 adiw r26,1
4221 2122 1C92 st X,__zero_reg__
4222 2124 1E92 st -X,__zero_reg__
4223 2126 8091 0000 lds r24,EE_Parameter+4
4224 212a E82F mov r30,r24
4225 212c FF27 clr r31
4226 212e EE0F add r30,r30
4227 2130 FF1F adc r31,r31
4228 2132 E050 subi r30,lo8(-(PPM_in))
4229 2134 F040 sbci r31,hi8(-(PPM_in))
4230 2136 1182 std Z+1,__zero_reg__
4231 2138 1082 st Z,__zero_reg__
4232 213a 00C0 rjmp .L387
4233 .L385:
4234 213c 1092 0000 sts MotorenEin,__zero_reg__
4235 2140 00C0 rjmp .L387
4236 .L379:
4237 2142 8091 0000 lds r24,SenderOkay
4238 2146 8D38 cpi r24,lo8(-115)
4239 2148 00F4 brsh .+2
4240 214a 00C0 rjmp .L388
4241 214c 8091 0000 lds r24,FC_StatusFlags
4242 2150 8F7E andi r24,lo8(-17)
4243 2152 8093 0000 sts FC_StatusFlags,r24
4244 2156 9091 0000 lds r25,EE_Parameter+38
4245 215a 82E3 ldi r24,lo8(50)
4246 215c 989F mul r25,r24
4247 215e C001 movw r24,r0
4248 2160 1124 clr r1
4249 2162 9093 0000 sts (RcLostTimer.5)+1,r25
4250 2166 8093 0000 sts RcLostTimer.5,r24
4251 216a E981 ldd r30,Y+1
4252 216c FA81 ldd r31,Y+2
4253 216e B997 sbiw r30,41
4254 2170 04F0 brlt .L389
4255 2172 8091 0000 lds r24,MotorenEin
4256 2176 8823 tst r24
4257 2178 01F0 breq .L389
4258 217a 8091 0000 lds r24,modell_fliegt
4259 217e 9091 0000 lds r25,(modell_fliegt)+1
4260 2182 FFEF ldi r31,hi8(-1)
4261 2184 8F3F cpi r24,lo8(-1)
4262 2186 9F07 cpc r25,r31
4263 2188 01F0 breq .L389
4264 218a 0196 adiw r24,1
4265 218c 9093 0000 sts (modell_fliegt)+1,r25
4266 2190 8093 0000 sts modell_fliegt,r24
4267 .L389:
4268 2194 8091 0000 lds r24,modell_fliegt
4269 2198 9091 0000 lds r25,(modell_fliegt)+1
4270 219c 8F3F cpi r24,255
4271 219e 9105 cpc r25,__zero_reg__
4272 21a0 01F0 breq .+2
4273 21a2 00F4 brsh .L391
4274 21a4 1092 0000 sts SummeNick,__zero_reg__
4275 21a8 1092 0000 sts (SummeNick)+1,__zero_reg__
4276 21ac 1092 0000 sts (SummeNick)+2,__zero_reg__
4277 21b0 1092 0000 sts (SummeNick)+3,__zero_reg__
4278 21b4 1092 0000 sts SummeRoll,__zero_reg__
4279 21b8 1092 0000 sts (SummeRoll)+1,__zero_reg__
4280 21bc 1092 0000 sts (SummeRoll)+2,__zero_reg__
4281 21c0 1092 0000 sts (SummeRoll)+3,__zero_reg__
4282 21c4 1092 0000 sts sollGier.0,__zero_reg__
4283 21c8 1092 0000 sts (sollGier.0)+1,__zero_reg__
4284 21cc 1092 0000 sts (sollGier.0)+2,__zero_reg__
4285 21d0 1092 0000 sts (sollGier.0)+3,__zero_reg__
4286 21d4 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4287 21d8 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4288 21dc 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4289 21e0 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4290 21e4 00C0 rjmp .L392
4291 .L391:
4292 21e6 8091 0000 lds r24,FC_StatusFlags
4293 21ea 8260 ori r24,lo8(2)
4294 21ec 8093 0000 sts FC_StatusFlags,r24
4295 .L392:
4296 21f0 8091 0000 lds r24,EE_Parameter+3
4297 21f4 E82F mov r30,r24
4298 21f6 FF27 clr r31
4299 21f8 EE0F add r30,r30
4300 21fa FF1F adc r31,r31
4301 21fc E050 subi r30,lo8(-(PPM_in))
4302 21fe F040 sbci r31,hi8(-(PPM_in))
4303 2200 8081 ld r24,Z
4304 2202 9181 ldd r25,Z+1
4305 2204 8135 cpi r24,81
4306 2206 9105 cpc r25,__zero_reg__
4307 2208 04F4 brge .+2
4308 220a 00C0 rjmp .L393
4309 220c 2091 0000 lds r18,MotorenEin
4310 2210 2223 tst r18
4311 2212 01F0 breq .+2
4312 2214 00C0 rjmp .L393
4313 2216 8091 0000 lds r24,EE_Parameter+4
4314 221a E82F mov r30,r24
4315 221c FF27 clr r31
4316 221e EE0F add r30,r30
4317 2220 FF1F adc r31,r31
4318 2222 E050 subi r30,lo8(-(PPM_in))
4319 2224 F040 sbci r31,hi8(-(PPM_in))
4320 2226 8081 ld r24,Z
4321 2228 9181 ldd r25,Z+1
4322 222a 8C34 cpi r24,76
4323 222c 9105 cpc r25,__zero_reg__
4324 222e 04F4 brge .+2
4325 2230 00C0 rjmp .L394
4326 2232 8091 0000 lds r24,delay_neutral.6
4327 2236 8F5F subi r24,lo8(-(1))
4328 2238 8093 0000 sts delay_neutral.6,r24
4329 223c 893C cpi r24,lo8(-55)
4330 223e 00F4 brsh .+2
4331 2240 00C0 rjmp .L393
4332 2242 2093 0000 sts delay_neutral.6,r18
4333 2246 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4334 224a 1092 0000 sts modell_fliegt,__zero_reg__
4335 224e 3091 0000 lds r19,EE_Parameter+1
4336 2252 E32F mov r30,r19
4337 2254 FF27 clr r31
4338 2256 EE0F add r30,r30
4339 2258 FF1F adc r31,r31
4340 225a E050 subi r30,lo8(-(PPM_in))
4341 225c F040 sbci r31,hi8(-(PPM_in))
4342 225e 8081 ld r24,Z
4343 2260 9181 ldd r25,Z+1
4344 2262 8734 cpi r24,71
4345 2264 9105 cpc r25,__zero_reg__
4346 2266 04F4 brge .L397
4347 2268 8091 0000 lds r24,EE_Parameter+2
4348 226c E82F mov r30,r24
4349 226e FF27 clr r31
4350 2270 EE0F add r30,r30
4351 2272 FF1F adc r31,r31
4352 2274 E050 subi r30,lo8(-(PPM_in))
4353 2276 F040 sbci r31,hi8(-(PPM_in))
4354 2278 8081 ld r24,Z
4355 227a 9181 ldd r25,Z+1
4356 227c 0190 ld __tmp_reg__,Z+
4357 227e F081 ld r31,Z
4358 2280 E02D mov r30,__tmp_reg__
4359 2282 F7FF sbrs r31,7
4360 2284 00C0 rjmp .L398
4361 2286 F095 com r31
4362 2288 E195 neg r30
4363 228a FF4F sbci r31,lo8(-1)
4364 .L398:
4365 228c E734 cpi r30,71
4366 228e F105 cpc r31,__zero_reg__
4367 2290 04F4 brge .+2
4368 2292 00C0 rjmp .L396
4369 .L397:
4370 2294 41E0 ldi r20,lo8(1)
4371 2296 2091 0000 lds r18,EE_Parameter+2
4372 229a A22F mov r26,r18
4373 229c BB27 clr r27
4374 229e AA0F add r26,r26
4375 22a0 BB1F adc r27,r27
4376 22a2 A050 subi r26,lo8(-(PPM_in))
4377 22a4 B040 sbci r27,hi8(-(PPM_in))
4378 22a6 8D91 ld r24,X+
4379 22a8 9C91 ld r25,X
4380 22aa 1197 sbiw r26,1
4381 22ac 8734 cpi r24,71
4382 22ae 9105 cpc r25,__zero_reg__
4383 22b0 04F0 brlt .L399
4384 22b2 E32F mov r30,r19
4385 22b4 FF27 clr r31
4386 22b6 EE0F add r30,r30
4387 22b8 FF1F adc r31,r31
4388 22ba E050 subi r30,lo8(-(PPM_in))
4389 22bc F040 sbci r31,hi8(-(PPM_in))
4390 22be 8081 ld r24,Z
4391 22c0 9181 ldd r25,Z+1
4392 .L399:
4393 22c2 8D91 ld r24,X+
4394 22c4 9C91 ld r25,X
4395 22c6 8734 cpi r24,71
4396 22c8 9105 cpc r25,__zero_reg__
4397 22ca 04F0 brlt .L400
4398 22cc 8091 0000 lds r24,EE_Parameter+1
4399 22d0 E82F mov r30,r24
4400 22d2 FF27 clr r31
4401 22d4 EE0F add r30,r30
4402 22d6 FF1F adc r31,r31
4403 22d8 E050 subi r30,lo8(-(PPM_in))
4404 22da F040 sbci r31,hi8(-(PPM_in))
4405 22dc 8081 ld r24,Z
4406 22de 9181 ldd r25,Z+1
4407 22e0 8734 cpi r24,71
4408 22e2 9105 cpc r25,__zero_reg__
4409 22e4 04F0 brlt .L400
4410 22e6 42E0 ldi r20,lo8(2)
4411 .L400:
4412 22e8 E22F mov r30,r18
4413 22ea FF27 clr r31
4414 22ec EE0F add r30,r30
4415 22ee FF1F adc r31,r31
4416 22f0 E050 subi r30,lo8(-(PPM_in))
4417 22f2 F040 sbci r31,hi8(-(PPM_in))
4418 22f4 8081 ld r24,Z
4419 22f6 9181 ldd r25,Z+1
4420 22f8 8634 cpi r24,70
4421 22fa 9105 cpc r25,__zero_reg__
4422 22fc 04F4 brge .L401
4423 22fe 8091 0000 lds r24,EE_Parameter+1
4424 2302 E82F mov r30,r24
4425 2304 FF27 clr r31
4426 2306 EE0F add r30,r30
4427 2308 FF1F adc r31,r31
4428 230a E050 subi r30,lo8(-(PPM_in))
4429 230c F040 sbci r31,hi8(-(PPM_in))
4430 230e 8081 ld r24,Z
4431 2310 9181 ldd r25,Z+1
4432 2312 8734 cpi r24,71
4433 2314 9105 cpc r25,__zero_reg__
4434 2316 04F0 brlt .L401
4435 2318 43E0 ldi r20,lo8(3)
4436 .L401:
4437 231a E22F mov r30,r18
4438 231c FF27 clr r31
4439 231e EE0F add r30,r30
4440 2320 FF1F adc r31,r31
4441 2322 E050 subi r30,lo8(-(PPM_in))
4442 2324 F040 sbci r31,hi8(-(PPM_in))
4443 2326 8081 ld r24,Z
4444 2328 9181 ldd r25,Z+1
4445 232a 8A5B subi r24,lo8(-70)
4446 232c 9F4F sbci r25,hi8(-70)
4447 232e 04F4 brge .L402
4448 2330 8091 0000 lds r24,EE_Parameter+1
4449 2334 E82F mov r30,r24
4450 2336 FF27 clr r31
4451 2338 EE0F add r30,r30
4452 233a FF1F adc r31,r31
4453 233c E050 subi r30,lo8(-(PPM_in))
4454 233e F040 sbci r31,hi8(-(PPM_in))
4455 2340 8081 ld r24,Z
4456 2342 9181 ldd r25,Z+1
4457 2344 8734 cpi r24,71
4458 2346 9105 cpc r25,__zero_reg__
4459 2348 04F0 brlt .L402
4460 234a 44E0 ldi r20,lo8(4)
4461 .L402:
4462 234c E22F mov r30,r18
4463 234e FF27 clr r31
4464 2350 EE0F add r30,r30
4465 2352 FF1F adc r31,r31
4466 2354 E050 subi r30,lo8(-(PPM_in))
4467 2356 F040 sbci r31,hi8(-(PPM_in))
4468 2358 8081 ld r24,Z
4469 235a 9181 ldd r25,Z+1
4470 235c 8A5B subi r24,lo8(-70)
4471 235e 9F4F sbci r25,hi8(-70)
4472 2360 04F4 brge .L403
4473 2362 8091 0000 lds r24,EE_Parameter+1
4474 2366 E82F mov r30,r24
4475 2368 FF27 clr r31
4476 236a EE0F add r30,r30
4477 236c FF1F adc r31,r31
4478 236e E050 subi r30,lo8(-(PPM_in))
4479 2370 F040 sbci r31,hi8(-(PPM_in))
4480 2372 8081 ld r24,Z
4481 2374 9181 ldd r25,Z+1
4482 2376 8634 cpi r24,70
4483 2378 9105 cpc r25,__zero_reg__
4484 237a 04F4 brge .L403
4485 237c 45E0 ldi r20,lo8(5)
4486 .L403:
4487 237e 842F mov r24,r20
4488 2380 0E94 0000 call SetActiveParamSet
4489 .L396:
4490 2384 8091 0000 lds r24,EE_Parameter+2
4491 2388 E82F mov r30,r24
4492 238a FF27 clr r31
4493 238c EE0F add r30,r30
4494 238e FF1F adc r31,r31
4495 2390 E050 subi r30,lo8(-(PPM_in))
4496 2392 F040 sbci r31,hi8(-(PPM_in))
4497 2394 8081 ld r24,Z
4498 2396 9181 ldd r25,Z+1
4499 2398 0190 ld __tmp_reg__,Z+
4500 239a F081 ld r31,Z
4501 239c E02D mov r30,__tmp_reg__
4502 239e F7FF sbrs r31,7
4503 23a0 00C0 rjmp .L405
4504 23a2 F095 com r31
4505 23a4 E195 neg r30
4506 23a6 FF4F sbci r31,lo8(-1)
4507 .L405:
4508 23a8 7E97 sbiw r30,30
4509 23aa 04F4 brge .L404
4510 23ac 8091 0000 lds r24,EE_Parameter+1
4511 23b0 E82F mov r30,r24
4512 23b2 FF27 clr r31
4513 23b4 EE0F add r30,r30
4514 23b6 FF1F adc r31,r31
4515 23b8 E050 subi r30,lo8(-(PPM_in))
4516 23ba F040 sbci r31,hi8(-(PPM_in))
4517 23bc 8081 ld r24,Z
4518 23be 9181 ldd r25,Z+1
4519 23c0 8A5B subi r24,lo8(-70)
4520 23c2 9F4F sbci r25,hi8(-70)
4521 23c4 04F4 brge .L404
4522 23c6 81E0 ldi r24,lo8(1)
4523 23c8 8093 0000 sts WinkelOut+6,r24
4524 23cc 1092 0000 sts CalibrationDone,__zero_reg__
4525 23d0 88EE ldi r24,lo8(1000)
4526 23d2 93E0 ldi r25,hi8(1000)
4527 23d4 9093 0000 sts (beeptime)+1,r25
4528 23d8 8093 0000 sts beeptime,r24
4529 23dc 00C0 rjmp .L393
4530 .L404:
4531 23de 0E94 0000 call GetActiveParamSet
4532 23e2 0E94 0000 call ParamSet_ReadFromEEProm
4533 23e6 80E0 ldi r24,lo8(0)
4534 23e8 0E94 0000 call LipoDetection
4535 23ec 8091 0000 lds r24,EE_Parameter+39
4536 23f0 0E94 0000 call LIBFC_ReceiverInit
4537 23f4 8091 0000 lds r24,Parameter_GlobalConfig
4538 23f8 80FF sbrs r24,0
4539 23fa 00C0 rjmp .L407
4540 23fc 8091 0000 lds r24,MessLuftdruck
4541 2400 9091 0000 lds r25,(MessLuftdruck)+1
4542 2404 875B subi r24,lo8(951)
4543 2406 9340 sbci r25,hi8(951)
4544 2408 00F4 brsh .L409
4545 240a 8091 0000 lds r24,MessLuftdruck
4546 240e 9091 0000 lds r25,(MessLuftdruck)+1
4547 2412 8E5E subi r24,lo8(750)
4548 2414 9240 sbci r25,hi8(750)
4549 2416 00F4 brsh .L407
4550 .L409:
4551 2418 0E94 0000 call SucheLuftruckOffset
4552 .L407:
4553 241c 80E0 ldi r24,lo8(0)
4554 241e 0E94 0000 call SetNeutral
4555 2422 81E0 ldi r24,lo8(1)
4556 2424 8093 0000 sts CalibrationDone,r24
4557 2428 8093 0000 sts ServoActive,r24
4558 242c 579A sbi 42-0x20,7
4559 242e 00C0 rjmp .L894
4560 .L394:
4561 2430 8081 ld r24,Z
4562 2432 9181 ldd r25,Z+1
4563 2434 855B subi r24,lo8(-75)
4564 2436 9F4F sbci r25,hi8(-75)
4565 2438 04F4 brge .L411
4566 243a 8091 0000 lds r24,delay_neutral.6
4567 243e 8F5F subi r24,lo8(-(1))
4568 2440 8093 0000 sts delay_neutral.6,r24
4569 2444 893C cpi r24,lo8(-55)
4570 2446 00F0 brlo .L393
4571 2448 2093 0000 sts MotorenEin,r18
4572 244c 2093 0000 sts delay_neutral.6,r18
4573 2450 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4574 2454 1092 0000 sts modell_fliegt,__zero_reg__
4575 2458 81E0 ldi r24,lo8(1)
4576 245a 0E94 0000 call SetNeutral
4577 245e 81E0 ldi r24,lo8(1)
4578 2460 8093 0000 sts CalibrationDone,r24
4579 .L894:
4580 2464 88E1 ldi r24,lo8(24)
4581 2466 8093 0000 sts SpeakHoTT,r24
4582 246a 0E94 0000 call GetActiveParamSet
4583 246e 68E7 ldi r22,lo8(120)
4584 2470 70E0 ldi r23,hi8(120)
4585 2472 0E94 0000 call Piep
4586 2476 00C0 rjmp .L393
4587 .L411:
4588 2478 2093 0000 sts delay_neutral.6,r18
4589 .L393:
4590 247c 8091 0000 lds r24,EE_Parameter+3
4591 2480 E82F mov r30,r24
4592 2482 FF27 clr r31
4593 2484 EE0F add r30,r30
4594 2486 FF1F adc r31,r31
4595 2488 E050 subi r30,lo8(-(PPM_in))
4596 248a F040 sbci r31,hi8(-(PPM_in))
4597 248c 8081 ld r24,Z
4598 248e 9181 ldd r25,Z+1
4599 2490 8B5A subi r24,lo8(-85)
4600 2492 9F4F sbci r25,hi8(-85)
4601 2494 04F0 brlt .+2
4602 2496 00C0 rjmp .L414
4603 2498 2091 0000 lds r18,EE_Parameter+100
4604 249c E22F mov r30,r18
4605 249e FF27 clr r31
4606 24a0 EF77 andi r30,lo8(127)
4607 24a2 F070 andi r31,hi8(127)
4608 24a4 EE0F add r30,r30
4609 24a6 FF1F adc r31,r31
4610 24a8 E050 subi r30,lo8(-(PPM_diff))
4611 24aa F040 sbci r31,hi8(-(PPM_diff))
4612 24ac 8081 ld r24,Z
4613 24ae 9181 ldd r25,Z+1
4614 24b0 0697 sbiw r24,6
4615 24b2 04F0 brlt .L415
4616 24b4 84E6 ldi r24,lo8(100)
4617 24b6 00C0 rjmp .L895
4618 .L415:
4619 24b8 8081 ld r24,Z
4620 24ba 9181 ldd r25,Z+1
4621 24bc 8B5F subi r24,lo8(-5)
4622 24be 9F4F sbci r25,hi8(-5)
4623 24c0 04F4 brge .L416
4624 24c2 8CE9 ldi r24,lo8(-100)
4625 .L895:
4626 24c4 8093 0000 sts move_safety_switch.9,r24
4627 .L416:
4628 24c8 8091 0000 lds r24,MotorenEin
4629 24cc E091 0000 lds r30,EE_Parameter+4
4630 24d0 8823 tst r24
4631 24d2 01F0 breq .+2
4632 24d4 00C0 rjmp .L418
4633 24d6 FF27 clr r31
4634 24d8 EE0F add r30,r30
4635 24da FF1F adc r31,r31
4636 24dc E050 subi r30,lo8(-(PPM_in))
4637 24de F040 sbci r31,hi8(-(PPM_in))
4638 24e0 8081 ld r24,Z
4639 24e2 9181 ldd r25,Z+1
4640 24e4 855B subi r24,lo8(-75)
4641 24e6 9F4F sbci r25,hi8(-75)
4642 24e8 04F4 brge .L421
4643 24ea 8091 0000 lds r24,EE_Parameter+111
4644 24ee 83FD sbrc r24,3
4645 24f0 00C0 rjmp .L422
4646 24f2 E22F mov r30,r18
4647 24f4 FF27 clr r31
4648 24f6 EE0F add r30,r30
4649 24f8 FF1F adc r31,r31
4650 24fa E050 subi r30,lo8(-(PPM_in))
4651 24fc F040 sbci r31,hi8(-(PPM_in))
4652 24fe 8081 ld r24,Z
4653 2500 9181 ldd r25,Z+1
4654 2502 855B subi r24,lo8(-75)
4655 2504 9F4F sbci r25,hi8(-75)
4656 2506 04F0 brlt .L420
4657 .L422:
4658 2508 8091 0000 lds r24,EE_Parameter+100
4659 250c 8823 tst r24
4660 250e 01F0 breq .L420
4661 .L421:
4662 2510 8091 0000 lds r24,EE_Parameter+111
4663 2514 83FF sbrs r24,3
4664 2516 00C0 rjmp .L419
4665 2518 8091 0000 lds r24,EE_Parameter+100
4666 251c E82F mov r30,r24
4667 251e FF27 clr r31
4668 2520 EE0F add r30,r30
4669 2522 FF1F adc r31,r31
4670 2524 E050 subi r30,lo8(-(PPM_in))
4671 2526 F040 sbci r31,hi8(-(PPM_in))
4672 2528 8081 ld r24,Z
4673 252a 9181 ldd r25,Z+1
4674 252c 875F subi r24,lo8(-9)
4675 252e 9F4F sbci r25,hi8(-9)
4676 2530 04F4 brge .+2
4677 2532 00C0 rjmp .L419
4678 2534 8091 0000 lds r24,move_safety_switch.9
4679 2538 8436 cpi r24,lo8(100)
4680 253a 01F0 breq .+2
4681 253c 00C0 rjmp .L419
4682 .L420:
4683 253e 2091 0000 lds r18,CalibrationDone
4684 2542 2223 tst r18
4685 2544 01F0 breq .L423
4686 2546 8091 0000 lds r24,FC_StatusFlags
4687 254a 8860 ori r24,lo8(8)
4688 254c 8093 0000 sts FC_StatusFlags,r24
4689 .L423:
4690 2550 8091 0000 lds r24,delay_einschalten.7
4691 2554 8F5F subi r24,lo8(-(1))
4692 2556 8093 0000 sts delay_einschalten.7,r24
4693 255a 8E3F cpi r24,lo8(-2)
4694 255c 00F4 brsh .+2
4695 255e 00C0 rjmp .L429
4696 2560 1092 0000 sts delay_einschalten.7,__zero_reg__
4697 2564 8091 0000 lds r24,VersionInfo+5
4698 2568 8823 tst r24
4699 256a 01F0 breq .+2
4700 256c 00C0 rjmp .L425
4701 256e 2223 tst r18
4702 2570 01F4 brne .+2
4703 2572 00C0 rjmp .L425
4704 2574 8091 0000 lds r24,NC_ErrorCode
4705 2578 8823 tst r24
4706 257a 01F0 breq .+2
4707 257c 00C0 rjmp .L425
4708 257e 81E0 ldi r24,lo8(1)
4709 2580 90E0 ldi r25,hi8(1)
4710 2582 9093 0000 sts (modell_fliegt)+1,r25
4711 2586 8093 0000 sts modell_fliegt,r24
4712 258a 81E0 ldi r24,lo8(1)
4713 258c 8093 0000 sts MotorenEin,r24
4714 2590 1092 0000 sts sollGier.0,__zero_reg__
4715 2594 1092 0000 sts (sollGier.0)+1,__zero_reg__
4716 2598 1092 0000 sts (sollGier.0)+2,__zero_reg__
4717 259c 1092 0000 sts (sollGier.0)+3,__zero_reg__
4718 25a0 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4719 25a4 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4720 25a8 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4721 25ac 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4722 25b0 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
4723 25b4 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
4724 25b8 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
4725 25bc 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
4726 25c0 8091 0000 lds r24,EE_Parameter+28
4727 25c4 E82E mov r14,r24
4728 25c6 FF24 clr r15
4729 25c8 0027 clr r16
4730 25ca 1127 clr r17
4731 25cc 8091 0000 lds r24,Mittelwert_AccNick
4732 25d0 9091 0000 lds r25,(Mittelwert_AccNick)+1
4733 25d4 9C01 movw r18,r24
4734 25d6 4427 clr r20
4735 25d8 37FD sbrc r19,7
4736 25da 4095 com r20
4737 25dc 542F mov r21,r20
4738 25de C801 movw r24,r16
4739 25e0 B701 movw r22,r14
4740 25e2 0E94 0000 call __mulsi3
4741 25e6 DC01 movw r26,r24
4742 25e8 CB01 movw r24,r22
4743 25ea 8093 0000 sts Mess_IntegralNick,r24
4744 25ee 9093 0000 sts (Mess_IntegralNick)+1,r25
4745 25f2 A093 0000 sts (Mess_IntegralNick)+2,r26
4746 25f6 B093 0000 sts (Mess_IntegralNick)+3,r27
4747 25fa 8091 0000 lds r24,Mittelwert_AccRoll
4748 25fe 9091 0000 lds r25,(Mittelwert_AccRoll)+1
4749 2602 9C01 movw r18,r24
4750 2604 4427 clr r20
4751 2606 37FD sbrc r19,7
4752 2608 4095 com r20
4753 260a 542F mov r21,r20
4754 260c C801 movw r24,r16
4755 260e B701 movw r22,r14
4756 2610 0E94 0000 call __mulsi3
4757 2614 DC01 movw r26,r24
4758 2616 CB01 movw r24,r22
4759 2618 8093 0000 sts Mess_IntegralRoll,r24
4760 261c 9093 0000 sts (Mess_IntegralRoll)+1,r25
4761 2620 A093 0000 sts (Mess_IntegralRoll)+2,r26
4762 2624 B093 0000 sts (Mess_IntegralRoll)+3,r27
4763 2628 8091 0000 lds r24,IntegralNick
4764 262c 9091 0000 lds r25,(IntegralNick)+1
4765 2630 A091 0000 lds r26,(IntegralNick)+2
4766 2634 B091 0000 lds r27,(IntegralNick)+3
4767 2638 8093 0000 sts Mess_IntegralNick2,r24
4768 263c 9093 0000 sts (Mess_IntegralNick2)+1,r25
4769 2640 A093 0000 sts (Mess_IntegralNick2)+2,r26
4770 2644 B093 0000 sts (Mess_IntegralNick2)+3,r27
4771 2648 8091 0000 lds r24,IntegralRoll
4772 264c 9091 0000 lds r25,(IntegralRoll)+1
4773 2650 A091 0000 lds r26,(IntegralRoll)+2
4774 2654 B091 0000 lds r27,(IntegralRoll)+3
4775 2658 8093 0000 sts Mess_IntegralRoll2,r24
4776 265c 9093 0000 sts (Mess_IntegralRoll2)+1,r25
4777 2660 A093 0000 sts (Mess_IntegralRoll2)+2,r26
4778 2664 B093 0000 sts (Mess_IntegralRoll2)+3,r27
4779 2668 1092 0000 sts SummeNick,__zero_reg__
4780 266c 1092 0000 sts (SummeNick)+1,__zero_reg__
4781 2670 1092 0000 sts (SummeNick)+2,__zero_reg__
4782 2674 1092 0000 sts (SummeNick)+3,__zero_reg__
4783 2678 1092 0000 sts SummeRoll,__zero_reg__
4784 267c 1092 0000 sts (SummeRoll)+1,__zero_reg__
4785 2680 1092 0000 sts (SummeRoll)+2,__zero_reg__
4786 2684 1092 0000 sts (SummeRoll)+3,__zero_reg__
4787 2688 84E6 ldi r24,lo8(100)
4788 268a 8093 0000 sts NeueKompassRichtungMerken,r24
4789 268e 84E3 ldi r24,lo8(52)
4790 2690 00C0 rjmp .L896
4791 .L425:
4792 2692 8CED ldi r24,lo8(1500)
4793 2694 95E0 ldi r25,hi8(1500)
4794 2696 9093 0000 sts (beeptime)+1,r25
4795 269a 8093 0000 sts beeptime,r24
4796 269e 2223 tst r18
4797 26a0 01F0 breq .+2
4798 26a2 00C0 rjmp .L429
4799 26a4 81E0 ldi r24,lo8(1)
4800 26a6 00C0 rjmp .L896
4801 .L419:
4802 26a8 1092 0000 sts delay_einschalten.7,__zero_reg__
4803 26ac 00C0 rjmp .L429
4804 .L418:
4805 26ae FF27 clr r31
4806 26b0 EE0F add r30,r30
4807 26b2 FF1F adc r31,r31
4808 26b4 E050 subi r30,lo8(-(PPM_in))
4809 26b6 F040 sbci r31,hi8(-(PPM_in))
4810 26b8 8081 ld r24,Z
4811 26ba 9181 ldd r25,Z+1
4812 26bc 8C34 cpi r24,76
4813 26be 9105 cpc r25,__zero_reg__
4814 26c0 04F0 brlt .L432
4815 26c2 8091 0000 lds r24,EE_Parameter+111
4816 26c6 83FD sbrc r24,3
4817 26c8 00C0 rjmp .L433
4818 26ca E22F mov r30,r18
4819 26cc FF27 clr r31
4820 26ce EE0F add r30,r30
4821 26d0 FF1F adc r31,r31
4822 26d2 E050 subi r30,lo8(-(PPM_in))
4823 26d4 F040 sbci r31,hi8(-(PPM_in))
4824 26d6 8081 ld r24,Z
4825 26d8 9181 ldd r25,Z+1
4826 26da 855B subi r24,lo8(-75)
4827 26dc 9F4F sbci r25,hi8(-75)
4828 26de 04F0 brlt .L431
4829 .L433:
4830 26e0 8091 0000 lds r24,EE_Parameter+100
4831 26e4 8823 tst r24
4832 26e6 01F0 breq .L431
4833 .L432:
4834 26e8 8091 0000 lds r24,EE_Parameter+111
4835 26ec 83FF sbrs r24,3
4836 26ee 00C0 rjmp .L430
4837 26f0 8091 0000 lds r24,EE_Parameter+100
4838 26f4 E82F mov r30,r24
4839 26f6 FF27 clr r31
4840 26f8 EE0F add r30,r30
4841 26fa FF1F adc r31,r31
4842 26fc E050 subi r30,lo8(-(PPM_in))
4843 26fe F040 sbci r31,hi8(-(PPM_in))
4844 2700 8081 ld r24,Z
4845 2702 9181 ldd r25,Z+1
4846 2704 8E5C subi r24,lo8(-50)
4847 2706 9F4F sbci r25,hi8(-50)
4848 2708 04F4 brge .L430
4849 270a 8091 0000 lds r24,move_safety_switch.9
4850 270e 8C39 cpi r24,lo8(-100)
4851 2710 01F4 brne .L430
4852 .L431:
4853 2712 8091 0000 lds r24,delay_ausschalten.8
4854 2716 8F5F subi r24,lo8(-(1))
4855 2718 8093 0000 sts delay_ausschalten.8,r24
4856 271c 8B3F cpi r24,lo8(-5)
4857 271e 00F0 brlo .L429
4858 2720 1092 0000 sts MotorenEin,__zero_reg__
4859 2724 1092 0000 sts delay_ausschalten.8,__zero_reg__
4860 2728 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4861 272c 1092 0000 sts modell_fliegt,__zero_reg__
4862 2730 86E2 ldi r24,lo8(38)
4863 .L896:
4864 2732 8093 0000 sts SpeakHoTT,r24
4865 2736 00C0 rjmp .L429
4866 .L430:
4867 2738 1092 0000 sts delay_ausschalten.8,__zero_reg__
4868 .L429:
4869 273c 8091 0000 lds r24,GasIsZeroCnt
4870 2740 9091 0000 lds r25,(GasIsZeroCnt)+1
4871 2744 13E0 ldi r17,hi8(1000)
4872 2746 883E cpi r24,lo8(1000)
4873 2748 9107 cpc r25,r17
4874 274a 00F4 brsh .L387
4875 274c 0196 adiw r24,1
4876 274e 9093 0000 sts (GasIsZeroCnt)+1,r25
4877 2752 8093 0000 sts GasIsZeroCnt,r24
4878 2756 00C0 rjmp .L387
4879 .L414:
4880 2758 1092 0000 sts move_safety_switch.9,__zero_reg__
4881 275c 1092 0000 sts (GasIsZeroCnt)+1,__zero_reg__
4882 2760 1092 0000 sts GasIsZeroCnt,__zero_reg__
4883 2764 00C0 rjmp .L387
4884 .L388:
4885 2766 2E5E subi r18,lo8(750)
4886 2768 3240 sbci r19,hi8(750)
4887 276a 00F0 brlo .L387
4888 276c 8091 0000 lds r24,GPSInfo+4
4889 2770 9091 0000 lds r25,(GPSInfo+4)+1
4890 2774 8059 subi r24,lo8(400)
4891 2776 9140 sbci r25,hi8(400)
4892 2778 00F4 brsh .L387
4893 277a 8091 0000 lds r24,HoehenWert
4894 277e 9091 0000 lds r25,(HoehenWert)+1
4895 2782 A091 0000 lds r26,(HoehenWert)+2
4896 2786 B091 0000 lds r27,(HoehenWert)+3
4897 278a 8C5D subi r24,lo8(1500)
4898 278c 9540 sbci r25,hi8(1500)
4899 278e A040 sbci r26,hlo8(1500)
4900 2790 B040 sbci r27,hhi8(1500)
4901 2792 04F4 brge .L387
4902 2794 80E3 ldi r24,lo8(30000)
4903 2796 95E7 ldi r25,hi8(30000)
4904 2798 9093 0000 sts (GasIsZeroCnt)+1,r25
4905 279c 8093 0000 sts GasIsZeroCnt,r24
4906 27a0 8091 0000 lds r24,modell_fliegt
4907 27a4 9091 0000 lds r25,(modell_fliegt)+1
4908 27a8 8A5E subi r24,lo8(1002)
4909 27aa 9340 sbci r25,hi8(1002)
4910 27ac 00F0 brlo .L387
4911 27ae 89EE ldi r24,lo8(1001)
4912 27b0 93E0 ldi r25,hi8(1001)
4913 27b2 9093 0000 sts (modell_fliegt)+1,r25
4914 27b6 8093 0000 sts modell_fliegt,r24
4915 .L387:
4916 27ba 8091 0000 lds r24,NewPpmData
4917 27be 8150 subi r24,lo8(-(-1))
4918 27c0 8093 0000 sts NewPpmData,r24
4919 27c4 8091 0000 lds r24,NewPpmData
4920 27c8 8F3F cpi r24,lo8(-1)
4921 27ca 01F0 breq .L443
4922 27cc 8091 0000 lds r24,FC_StatusFlags
4923 27d0 84FF sbrs r24,4
4924 27d2 00C0 rjmp .L442
4925 .L443:
4926 27d4 0E94 0000 call ParameterZuordnung
4927 27d8 B090 0000 lds r11,EE_Parameter+23
4928 27dc 8091 0000 lds r24,stick_nick.12
4929 27e0 9091 0000 lds r25,(stick_nick.12)+1
4930 27e4 9C01 movw r18,r24
4931 27e6 220F lsl r18
4932 27e8 331F rol r19
4933 27ea 280F add r18,r24
4934 27ec 391F adc r19,r25
4935 27ee C090 0000 lds r12,EE_Parameter+1
4936 27f2 AC2D mov r26,r12
4937 27f4 BB27 clr r27
4938 27f6 AA0F add r26,r26
4939 27f8 BB1F adc r27,r27
4940 27fa FD01 movw r30,r26
4941 27fc E050 subi r30,lo8(-(PPM_in))
4942 27fe F040 sbci r31,hi8(-(PPM_in))
4943 2800 4B2D mov r20,r11
4944 2802 5527 clr r21
4945 2804 8081 ld r24,Z
4946 2806 9181 ldd r25,Z+1
4947 2808 849F mul r24,r20
4948 280a F001 movw r30,r0
4949 280c 859F mul r24,r21
4950 280e F00D add r31,r0
4951 2810 949F mul r25,r20
4952 2812 F00D add r31,r0
4953 2814 1124 clr r1
4954 2816 2E0F add r18,r30
4955 2818 3F1F adc r19,r31
4956 281a 37FF sbrs r19,7
4957 281c 00C0 rjmp .L444
4958 281e 2D5F subi r18,lo8(-(3))
4959 2820 3F4F sbci r19,hi8(-(3))
4960 .L444:
4961 2822 B901 movw r22,r18
4962 2824 7595 asr r23
4963 2826 6795 ror r22
4964 2828 7595 asr r23
4965 282a 6795 ror r22
4966 282c A050 subi r26,lo8(-(PPM_diff))
4967 282e B040 sbci r27,hi8(-(PPM_diff))
4968 2830 8091 0000 lds r24,EE_Parameter+24
4969 2834 082F mov r16,r24
4970 2836 1127 clr r17
4971 2838 8D91 ld r24,X+
4972 283a 9C91 ld r25,X
4973 283c 809F mul r24,r16
4974 283e 7001 movw r14,r0
4975 2840 819F mul r24,r17
4976 2842 F00C add r15,r0
4977 2844 909F mul r25,r16
4978 2846 F00C add r15,r0
4979 2848 1124 clr r1
4980 284a 6E0D add r22,r14
4981 284c 7F1D adc r23,r15
4982 284e 7093 0000 sts (stick_nick.12)+1,r23
4983 2852 6093 0000 sts stick_nick.12,r22
4984 2856 8091 0000 lds r24,stick_roll.13
4985 285a 9091 0000 lds r25,(stick_roll.13)+1
4986 285e 9C01 movw r18,r24
4987 2860 220F lsl r18
4988 2862 331F rol r19
4989 2864 280F add r18,r24
4990 2866 391F adc r19,r25
4991 2868 D090 0000 lds r13,EE_Parameter+2
4992 286c AD2D mov r26,r13
4993 286e BB27 clr r27
4994 2870 AA0F add r26,r26
4995 2872 BB1F adc r27,r27
4996 2874 FD01 movw r30,r26
4997 2876 E050 subi r30,lo8(-(PPM_in))
4998 2878 F040 sbci r31,hi8(-(PPM_in))
4999 287a 8081 ld r24,Z
5000 287c 9181 ldd r25,Z+1
5001 287e 849F mul r24,r20
5002 2880 F001 movw r30,r0
5003 2882 859F mul r24,r21
5004 2884 F00D add r31,r0
5005 2886 949F mul r25,r20
5006 2888 F00D add r31,r0
5007 288a 1124 clr r1
5008 288c 2E0F add r18,r30
5009 288e 3F1F adc r19,r31
5010 2890 37FF sbrs r19,7
5011 2892 00C0 rjmp .L445
5012 2894 2D5F subi r18,lo8(-(3))
5013 2896 3F4F sbci r19,hi8(-(3))
5014 .L445:
5015 2898 A901 movw r20,r18
5016 289a 5595 asr r21
5017 289c 4795 ror r20
5018 289e 5595 asr r21
5019 28a0 4795 ror r20
5020 28a2 A050 subi r26,lo8(-(PPM_diff))
5021 28a4 B040 sbci r27,hi8(-(PPM_diff))
5022 28a6 8D91 ld r24,X+
5023 28a8 9C91 ld r25,X
5024 28aa 809F mul r24,r16
5025 28ac 7001 movw r14,r0
5026 28ae 819F mul r24,r17
5027 28b0 F00C add r15,r0
5028 28b2 909F mul r25,r16
5029 28b4 F00C add r15,r0
5030 28b6 1124 clr r1
5031 28b8 4E0D add r20,r14
5032 28ba 5F1D adc r21,r15
5033 28bc 5093 0000 sts (stick_roll.13)+1,r21
5034 28c0 4093 0000 sts stick_roll.13,r20
5035 28c4 8091 0000 lds r24,CareFree
5036 28c8 8823 tst r24
5037 28ca 01F4 brne .+2
5038 28cc 00C0 rjmp .L446
5039 28ce CB01 movw r24,r22
5040 28d0 77FD sbrc r23,7
5041 28d2 0396 adiw r24,3
5042 .L447:
5043 28d4 DC01 movw r26,r24
5044 28d6 B595 asr r27
5045 28d8 A795 ror r26
5046 28da B595 asr r27
5047 28dc A795 ror r26
5048 28de CA01 movw r24,r20
5049 28e0 57FD sbrc r21,7
5050 28e2 0396 adiw r24,3
5051 .L448:
5052 28e4 FC01 movw r30,r24
5053 28e6 F595 asr r31
5054 28e8 E795 ror r30
5055 28ea F595 asr r31
5056 28ec E795 ror r30
5057 28ee 8091 0000 lds r24,FromNC_Rotate_C
5058 28f2 682F mov r22,r24
5059 28f4 7727 clr r23
5060 28f6 67FD sbrc r22,7
5061 28f8 7095 com r23
5062 28fa 6A9F mul r22,r26
5063 28fc 9001 movw r18,r0
5064 28fe 6B9F mul r22,r27
5065 2900 300D add r19,r0
5066 2902 7A9F mul r23,r26
5067 2904 300D add r19,r0
5068 2906 1124 clr r1
5069 2908 8091 0000 lds r24,FromNC_Rotate_S
5070 290c 482F mov r20,r24
5071 290e 5527 clr r21
5072 2910 47FD sbrc r20,7
5073 2912 5095 com r21
5074 2914 4E9F mul r20,r30
5075 2916 C001 movw r24,r0
5076 2918 4F9F mul r20,r31
5077 291a 900D add r25,r0
5078 291c 5E9F mul r21,r30
5079 291e 900D add r25,r0
5080 2920 1124 clr r1
5081 2922 280F add r18,r24
5082 2924 391F adc r19,r25
5083 2926 37FF sbrs r19,7
5084 2928 00C0 rjmp .L449
5085 292a 295F subi r18,lo8(-(7))
5086 292c 3F4F sbci r19,hi8(-(7))
5087 .L449:
5088 292e 93E0 ldi r25,3
5089 2930 3595 1: asr r19
5090 2932 2795 ror r18
5091 2934 9A95 dec r25
5092 2936 01F4 brne 1b
5093 2938 3093 0000 sts (StickNick)+1,r19
5094 293c 2093 0000 sts StickNick,r18
5095 2940 6E9F mul r22,r30
5096 2942 9001 movw r18,r0
5097 2944 6F9F mul r22,r31
5098 2946 300D add r19,r0
5099 2948 7E9F mul r23,r30
5100 294a 300D add r19,r0
5101 294c 1124 clr r1
5102 294e 4A9F mul r20,r26
5103 2950 C001 movw r24,r0
5104 2952 4B9F mul r20,r27
5105 2954 900D add r25,r0
5106 2956 5A9F mul r21,r26
5107 2958 900D add r25,r0
5108 295a 1124 clr r1
5109 295c 00C0 rjmp .L925
5110 .L446:
5111 295e 8091 0000 lds r24,EE_Parameter+98
5112 2962 E82F mov r30,r24
5113 2964 FF27 clr r31
5114 2966 E050 subi r30,lo8(-(sintab))
5115 2968 F040 sbci r31,hi8(-(sintab))
5116 296a 8681 ldd r24,Z+6
5117 296c 8093 0000 sts FromNC_Rotate_C,r24
5118 2970 9081 ld r25,Z
5119 2972 9093 0000 sts FromNC_Rotate_S,r25
5120 2976 A82F mov r26,r24
5121 2978 BB27 clr r27
5122 297a A7FD sbrc r26,7
5123 297c B095 com r27
5124 297e A69F mul r26,r22
5125 2980 9001 movw r18,r0
5126 2982 A79F mul r26,r23
5127 2984 300D add r19,r0
5128 2986 B69F mul r27,r22
5129 2988 300D add r19,r0
5130 298a 1124 clr r1
5131 298c E92F mov r30,r25
5132 298e FF27 clr r31
5133 2990 E7FD sbrc r30,7
5134 2992 F095 com r31
5135 2994 E49F mul r30,r20
5136 2996 C001 movw r24,r0
5137 2998 E59F mul r30,r21
5138 299a 900D add r25,r0
5139 299c F49F mul r31,r20
5140 299e 900D add r25,r0
5141 29a0 1124 clr r1
5142 29a2 280F add r18,r24
5143 29a4 391F adc r19,r25
5144 29a6 37FF sbrs r19,7
5145 29a8 00C0 rjmp .L452
5146 29aa 295F subi r18,lo8(-(7))
5147 29ac 3F4F sbci r19,hi8(-(7))
5148 .L452:
5149 29ae 83E0 ldi r24,3
5150 29b0 3595 1: asr r19
5151 29b2 2795 ror r18
5152 29b4 8A95 dec r24
5153 29b6 01F4 brne 1b
5154 29b8 3093 0000 sts (StickNick)+1,r19
5155 29bc 2093 0000 sts StickNick,r18
5156 29c0 A49F mul r26,r20
5157 29c2 9001 movw r18,r0
5158 29c4 A59F mul r26,r21
5159 29c6 300D add r19,r0
5160 29c8 B49F mul r27,r20
5161 29ca 300D add r19,r0
5162 29cc 1124 clr r1
5163 29ce E69F mul r30,r22
5164 29d0 C001 movw r24,r0
5165 29d2 E79F mul r30,r23
5166 29d4 900D add r25,r0
5167 29d6 F69F mul r31,r22
5168 29d8 900D add r25,r0
5169 29da 1124 clr r1
5170 .L925:
5171 29dc 281B sub r18,r24
5172 29de 390B sbc r19,r25
5173 29e0 37FF sbrs r19,7
5174 29e2 00C0 rjmp .L453
5175 29e4 295F subi r18,lo8(-(7))
5176 29e6 3F4F sbci r19,hi8(-(7))
5177 .L453:
5178 29e8 03E0 ldi r16,3
5179 29ea 3595 1: asr r19
5180 29ec 2795 ror r18
5181 29ee 0A95 dec r16
5182 29f0 01F4 brne 1b
5183 29f2 3093 0000 sts (StickRoll)+1,r19
5184 29f6 2093 0000 sts StickRoll,r18
5185 29fa 8091 0000 lds r24,EE_Parameter+4
5186 29fe E82F mov r30,r24
5187 2a00 FF27 clr r31
5188 2a02 EE0F add r30,r30
5189 2a04 FF1F adc r31,r31
5190 2a06 E050 subi r30,lo8(-(PPM_in))
5191 2a08 F040 sbci r31,hi8(-(PPM_in))
5192 2a0a 8081 ld r24,Z
5193 2a0c 9181 ldd r25,Z+1
5194 2a0e 9095 com r25
5195 2a10 8195 neg r24
5196 2a12 9F4F sbci r25,lo8(-1)
5197 2a14 9093 0000 sts (StickGier)+1,r25
5198 2a18 8093 0000 sts StickGier,r24
5199 2a1c 8530 cpi r24,5
5200 2a1e 9105 cpc r25,__zero_reg__
5201 2a20 04F0 brlt .L454
5202 2a22 0497 sbiw r24,4
5203 2a24 00C0 rjmp .L897
5204 .L454:
5205 2a26 0FEF ldi r16,hi8(-4)
5206 2a28 8C3F cpi r24,lo8(-4)
5207 2a2a 9007 cpc r25,r16
5208 2a2c 04F4 brge .L456
5209 2a2e 0496 adiw r24,4
5210 .L897:
5211 2a30 9093 0000 sts (StickGier)+1,r25
5212 2a34 8093 0000 sts StickGier,r24
5213 2a38 00C0 rjmp .L455
5214 .L456:
5215 2a3a 1092 0000 sts (StickGier)+1,__zero_reg__
5216 2a3e 1092 0000 sts StickGier,__zero_reg__
5217 .L455:
5218 2a42 8091 0000 lds r24,GPS_Aid_StickMultiplikator
5219 2a46 8823 tst r24
5220 2a48 01F4 brne .+2
5221 2a4a 00C0 rjmp .L458
5222 2a4c 282F mov r18,r24
5223 2a4e 3327 clr r19
5224 2a50 8091 0000 lds r24,StickNick
5225 2a54 9091 0000 lds r25,(StickNick)+1
5226 2a58 97FD sbrc r25,7
5227 2a5a 0796 adiw r24,7
5228 .L459:
5229 2a5c 13E0 ldi r17,3
5230 2a5e 9595 1: asr r25
5231 2a60 8795 ror r24
5232 2a62 1A95 dec r17
5233 2a64 01F4 brne 1b
5234 2a66 289F mul r18,r24
5235 2a68 A001 movw r20,r0
5236 2a6a 299F mul r18,r25
5237 2a6c 500D add r21,r0
5238 2a6e 389F mul r19,r24
5239 2a70 500D add r21,r0
5240 2a72 1124 clr r1
5241 2a74 CA01 movw r24,r20
5242 2a76 57FD sbrc r21,7
5243 2a78 0F96 adiw r24,15
5244 .L460:
5245 2a7a B4E0 ldi r27,4
5246 2a7c 9595 1: asr r25
5247 2a7e 8795 ror r24
5248 2a80 BA95 dec r27
5249 2a82 01F4 brne 1b
5250 2a84 9093 0000 sts (StickNick)+1,r25
5251 2a88 8093 0000 sts StickNick,r24
5252 2a8c 8091 0000 lds r24,StickRoll
5253 2a90 9091 0000 lds r25,(StickRoll)+1
5254 2a94 97FD sbrc r25,7
5255 2a96 0796 adiw r24,7
5256 .L461:
5257 2a98 A3E0 ldi r26,3
5258 2a9a 9595 1: asr r25
5259 2a9c 8795 ror r24
5260 2a9e AA95 dec r26
5261 2aa0 01F4 brne 1b
5262 2aa2 289F mul r18,r24
5263 2aa4 B001 movw r22,r0
5264 2aa6 299F mul r18,r25
5265 2aa8 700D add r23,r0
5266 2aaa 389F mul r19,r24
5267 2aac 700D add r23,r0
5268 2aae 1124 clr r1
5269 2ab0 CB01 movw r24,r22
5270 2ab2 77FD sbrc r23,7
5271 2ab4 0F96 adiw r24,15
5272 .L462:
5273 2ab6 F4E0 ldi r31,4
5274 2ab8 9595 1: asr r25
5275 2aba 8795 ror r24
5276 2abc FA95 dec r31
5277 2abe 01F4 brne 1b
5278 2ac0 9093 0000 sts (StickRoll)+1,r25
5279 2ac4 8093 0000 sts StickRoll,r24
5280 .L458:
5281 2ac8 8090 0000 lds r8,StickNick
5282 2acc 9090 0000 lds r9,(StickNick)+1
5283 2ad0 8091 0000 lds r24,GPS_Nick
5284 2ad4 9091 0000 lds r25,(GPS_Nick)+1
5285 2ad8 881A sub r8,r24
5286 2ada 990A sbc r9,r25
5287 2adc 9092 0000 sts (StickNick)+1,r9
5288 2ae0 8092 0000 sts StickNick,r8
5289 2ae4 0091 0000 lds r16,StickRoll
5290 2ae8 1091 0000 lds r17,(StickRoll)+1
5291 2aec 8091 0000 lds r24,GPS_Roll
5292 2af0 9091 0000 lds r25,(GPS_Roll)+1
5293 2af4 081B sub r16,r24
5294 2af6 190B sbc r17,r25
5295 2af8 1093 0000 sts (StickRoll)+1,r17
5296 2afc 0093 0000 sts StickRoll,r16
5297 2b00 8091 0000 lds r24,EE_Parameter+3
5298 2b04 E82F mov r30,r24
5299 2b06 FF27 clr r31
5300 2b08 EE0F add r30,r30
5301 2b0a FF1F adc r31,r31
5302 2b0c E050 subi r30,lo8(-(PPM_in))
5303 2b0e F040 sbci r31,hi8(-(PPM_in))
5304 2b10 E080 ld r14,Z
5305 2b12 F180 ldd r15,Z+1
5306 2b14 8FE7 ldi r24,lo8(127)
5307 2b16 90E0 ldi r25,hi8(127)
5308 2b18 E80E add r14,r24
5309 2b1a F91E adc r15,r25
5310 2b1c F092 0000 sts (StickGas)+1,r15
5311 2b20 E092 0000 sts StickGas,r14
5312 2b24 8091 0000 lds r24,Parameter_Gyro_P
5313 2b28 9927 clr r25
5314 2b2a AA27 clr r26
5315 2b2c 97FD sbrc r25,7
5316 2b2e A095 com r26
5317 2b30 BA2F mov r27,r26
5318 2b32 BC01 movw r22,r24
5319 2b34 CD01 movw r24,r26
5320 2b36 0E94 0000 call __floatsisf
5321 2b3a DC01 movw r26,r24
5322 2b3c CB01 movw r24,r22
5323 2b3e 20E0 ldi r18,lo8(0x41200000)
5324 2b40 30E0 ldi r19,hi8(0x41200000)
5325 2b42 40E2 ldi r20,hlo8(0x41200000)
5326 2b44 51E4 ldi r21,hhi8(0x41200000)
5327 2b46 BC01 movw r22,r24
5328 2b48 CD01 movw r24,r26
5329 2b4a 0E94 0000 call __addsf3
5330 2b4e DC01 movw r26,r24
5331 2b50 CB01 movw r24,r22
5332 2b52 BC01 movw r22,r24
5333 2b54 CD01 movw r24,r26
5334 2b56 0E94 0000 call __fixunssfsi
5335 2b5a DC01 movw r26,r24
5336 2b5c CB01 movw r24,r22
5337 2b5e 8093 0000 sts GyroFaktor,r24
5338 2b62 8091 0000 lds r24,Parameter_Gyro_I
5339 2b66 8093 0000 sts IntegralFaktor,r24
5340 2b6a 8091 0000 lds r24,Parameter_Gyro_Gier_P
5341 2b6e 9927 clr r25
5342 2b70 AA27 clr r26
5343 2b72 97FD sbrc r25,7
5344 2b74 A095 com r26
5345 2b76 BA2F mov r27,r26
5346 2b78 BC01 movw r22,r24
5347 2b7a CD01 movw r24,r26
5348 2b7c 0E94 0000 call __floatsisf
5349 2b80 DC01 movw r26,r24
5350 2b82 CB01 movw r24,r22
5351 2b84 20E0 ldi r18,lo8(0x41200000)
5352 2b86 30E0 ldi r19,hi8(0x41200000)
5353 2b88 40E2 ldi r20,hlo8(0x41200000)
5354 2b8a 51E4 ldi r21,hhi8(0x41200000)
5355 2b8c BC01 movw r22,r24
5356 2b8e CD01 movw r24,r26
5357 2b90 0E94 0000 call __addsf3
5358 2b94 DC01 movw r26,r24
5359 2b96 CB01 movw r24,r22
5360 2b98 BC01 movw r22,r24
5361 2b9a CD01 movw r24,r26
5362 2b9c 0E94 0000 call __fixunssfsi
5363 2ba0 DC01 movw r26,r24
5364 2ba2 CB01 movw r24,r22
5365 2ba4 8093 0000 sts GyroFaktorGier,r24
5366 2ba8 8091 0000 lds r24,Parameter_Gyro_Gier_I
5367 2bac 8093 0000 sts IntegralFaktorGier,r24
5368 2bb0 8091 0000 lds r24,ExternControl+10
5369 2bb4 80FF sbrs r24,0
5370 2bb6 00C0 rjmp .L463
5371 2bb8 8091 0000 lds r24,Parameter_ExternalControl
5372 2bbc 8138 cpi r24,lo8(-127)
5373 2bbe 00F4 brsh .+2
5374 2bc0 00C0 rjmp .L463
5375 2bc2 8091 0000 lds r24,ExternControl+3
5376 2bc6 9927 clr r25
5377 2bc8 87FD sbrc r24,7
5378 2bca 9095 com r25
5379 2bcc 2B2D mov r18,r11
5380 2bce 3327 clr r19
5381 2bd0 829F mul r24,r18
5382 2bd2 D001 movw r26,r0
5383 2bd4 839F mul r24,r19
5384 2bd6 B00D add r27,r0
5385 2bd8 929F mul r25,r18
5386 2bda B00D add r27,r0
5387 2bdc 1124 clr r1
5388 2bde 8A0E add r8,r26
5389 2be0 9B1E adc r9,r27
5390 2be2 9092 0000 sts (StickNick)+1,r9
5391 2be6 8092 0000 sts StickNick,r8
5392 2bea 8091 0000 lds r24,ExternControl+4
5393 2bee 9927 clr r25
5394 2bf0 87FD sbrc r24,7
5395 2bf2 9095 com r25
5396 2bf4 829F mul r24,r18
5397 2bf6 F001 movw r30,r0
5398 2bf8 839F mul r24,r19
5399 2bfa F00D add r31,r0
5400 2bfc 929F mul r25,r18
5401 2bfe F00D add r31,r0
5402 2c00 1124 clr r1
5403 2c02 0E0F add r16,r30
5404 2c04 1F1F adc r17,r31
5405 2c06 1093 0000 sts (StickRoll)+1,r17
5406 2c0a 0093 0000 sts StickRoll,r16
5407 2c0e 8091 0000 lds r24,ExternControl+5
5408 2c12 282F mov r18,r24
5409 2c14 3327 clr r19
5410 2c16 27FD sbrc r18,7
5411 2c18 3095 com r19
5412 2c1a 8091 0000 lds r24,StickGier
5413 2c1e 9091 0000 lds r25,(StickGier)+1
5414 2c22 820F add r24,r18
5415 2c24 931F adc r25,r19
5416 2c26 9093 0000 sts (StickGier)+1,r25
5417 2c2a 8093 0000 sts StickGier,r24
5418 2c2e 8091 0000 lds r24,ExternControl+7
5419 2c32 282F mov r18,r24
5420 2c34 3327 clr r19
5421 2c36 27FD sbrc r18,7
5422 2c38 3095 com r19
5423 2c3a 8091 0000 lds r24,EE_Parameter+18
5424 2c3e 9927 clr r25
5425 2c40 289F mul r18,r24
5426 2c42 8001 movw r16,r0
5427 2c44 299F mul r18,r25
5428 2c46 100D add r17,r0
5429 2c48 389F mul r19,r24
5430 2c4a 100D add r17,r0
5431 2c4c 1124 clr r1
5432 2c4e 1093 0000 sts (ExternHoehenValue)+1,r17
5433 2c52 0093 0000 sts ExternHoehenValue,r16
5434 2c56 8091 0000 lds r24,ExternControl+6
5435 2c5a 9927 clr r25
5436 2c5c 8E15 cp r24,r14
5437 2c5e 9F05 cpc r25,r15
5438 2c60 04F4 brge .L463
5439 2c62 9093 0000 sts (StickGas)+1,r25
5440 2c66 8093 0000 sts StickGas,r24
5441 .L463:
5442 2c6a 8091 0000 lds r24,StickGas
5443 2c6e 9091 0000 lds r25,(StickGas)+1
5444 2c72 97FF sbrs r25,7
5445 2c74 00C0 rjmp .L465
5446 2c76 1092 0000 sts (StickGas)+1,__zero_reg__
5447 2c7a 1092 0000 sts StickGas,__zero_reg__
5448 .L465:
5449 2c7e 8091 0000 lds r24,Parameter_GlobalConfig
5450 2c82 82FF sbrs r24,2
5451 2c84 00C0 rjmp .L466
5452 2c86 1092 0000 sts IntegralFaktor,__zero_reg__
5453 .L466:
5454 2c8a 4091 0000 lds r20,StickNick
5455 2c8e 5091 0000 lds r21,(StickNick)+1
5456 2c92 CA01 movw r24,r20
5457 2c94 57FD sbrc r21,7
5458 2c96 0396 adiw r24,3
5459 .L468:
5460 2c98 9C01 movw r18,r24
5461 2c9a 3595 asr r19
5462 2c9c 2795 ror r18
5463 2c9e 3595 asr r19
5464 2ca0 2795 ror r18
5465 2ca2 37FF sbrs r19,7
5466 2ca4 00C0 rjmp .L469
5467 2ca6 3095 com r19
5468 2ca8 2195 neg r18
5469 2caa 3F4F sbci r19,lo8(-1)
5470 .L469:
5471 2cac 8091 0000 lds r24,MaxStickNick
5472 2cb0 9091 0000 lds r25,(MaxStickNick)+1
5473 2cb4 8217 cp r24,r18
5474 2cb6 9307 cpc r25,r19
5475 2cb8 04F4 brge .L467
5476 2cba CA01 movw r24,r20
5477 2cbc 57FF sbrs r21,7
5478 2cbe 00C0 rjmp .L470
5479 2cc0 9095 com r25
5480 2cc2 8195 neg r24
5481 2cc4 9F4F sbci r25,lo8(-1)
5482 .L470:
5483 2cc6 97FD sbrc r25,7
5484 2cc8 0396 adiw r24,3
5485 .L471:
5486 2cca 9595 asr r25
5487 2ccc 8795 ror r24
5488 2cce 9595 asr r25
5489 2cd0 8795 ror r24
5490 2cd2 9093 0000 sts (MaxStickNick)+1,r25
5491 2cd6 8093 0000 sts MaxStickNick,r24
5492 2cda 8536 cpi r24,101
5493 2cdc 9105 cpc r25,__zero_reg__
5494 2cde 04F0 brlt .L473
5495 2ce0 84E6 ldi r24,lo8(100)
5496 2ce2 90E0 ldi r25,hi8(100)
5497 2ce4 00C0 rjmp .L898
5498 .L467:
5499 2ce6 0197 sbiw r24,1
5500 .L898:
5501 2ce8 9093 0000 sts (MaxStickNick)+1,r25
5502 2cec 8093 0000 sts MaxStickNick,r24
5503 .L473:
5504 2cf0 4091 0000 lds r20,StickRoll
5505 2cf4 5091 0000 lds r21,(StickRoll)+1
5506 2cf8 CA01 movw r24,r20
5507 2cfa 57FD sbrc r21,7
5508 2cfc 0396 adiw r24,3
5509 .L475:
5510 2cfe 9C01 movw r18,r24
5511 2d00 3595 asr r19
5512 2d02 2795 ror r18
5513 2d04 3595 asr r19
5514 2d06 2795 ror r18
5515 2d08 37FF sbrs r19,7
5516 2d0a 00C0 rjmp .L476
5517 2d0c 3095 com r19
5518 2d0e 2195 neg r18
5519 2d10 3F4F sbci r19,lo8(-1)
5520 .L476:
5521 2d12 8091 0000 lds r24,MaxStickRoll
5522 2d16 9091 0000 lds r25,(MaxStickRoll)+1
5523 2d1a 8217 cp r24,r18
5524 2d1c 9307 cpc r25,r19
5525 2d1e 04F4 brge .L474
5526 2d20 CA01 movw r24,r20
5527 2d22 57FF sbrs r21,7
5528 2d24 00C0 rjmp .L477
5529 2d26 9095 com r25
5530 2d28 8195 neg r24
5531 2d2a 9F4F sbci r25,lo8(-1)
5532 .L477:
5533 2d2c 97FD sbrc r25,7
5534 2d2e 0396 adiw r24,3
5535 .L478:
5536 2d30 9595 asr r25
5537 2d32 8795 ror r24
5538 2d34 9595 asr r25
5539 2d36 8795 ror r24
5540 2d38 9093 0000 sts (MaxStickRoll)+1,r25
5541 2d3c 8093 0000 sts MaxStickRoll,r24
5542 2d40 8536 cpi r24,101
5543 2d42 9105 cpc r25,__zero_reg__
5544 2d44 04F0 brlt .L480
5545 2d46 84E6 ldi r24,lo8(100)
5546 2d48 90E0 ldi r25,hi8(100)
5547 2d4a 00C0 rjmp .L899
5548 .L474:
5549 2d4c 0197 sbiw r24,1
5550 .L899:
5551 2d4e 9093 0000 sts (MaxStickRoll)+1,r25
5552 2d52 8093 0000 sts MaxStickRoll,r24
5553 .L480:
5554 2d56 8091 0000 lds r24,FC_StatusFlags
5555 2d5a 84FF sbrs r24,4
5556 2d5c 00C0 rjmp .L481
5557 2d5e 1092 0000 sts (MaxStickNick)+1,__zero_reg__
5558 2d62 1092 0000 sts MaxStickNick,__zero_reg__
5559 2d66 1092 0000 sts (MaxStickRoll)+1,__zero_reg__
5560 2d6a 1092 0000 sts MaxStickRoll,__zero_reg__
5561 .L481:
5562 2d6e ED2D mov r30,r13
5563 2d70 FF27 clr r31
5564 2d72 EE0F add r30,r30
5565 2d74 FF1F adc r31,r31
5566 2d76 E050 subi r30,lo8(-(PPM_in))
5567 2d78 F040 sbci r31,hi8(-(PPM_in))
5568 2d7a 4091 0000 lds r20,EE_Parameter+60
5569 2d7e 242F mov r18,r20
5570 2d80 3327 clr r19
5571 2d82 8081 ld r24,Z
5572 2d84 9181 ldd r25,Z+1
5573 2d86 2817 cp r18,r24
5574 2d88 3907 cpc r19,r25
5575 2d8a 04F4 brge .L482
5576 2d8c 8091 0000 lds r24,EE_Parameter+108
5577 2d90 82FF sbrs r24,2
5578 2d92 00C0 rjmp .L482
5579 2d94 81E0 ldi r24,lo8(1)
5580 2d96 8093 0000 sts Looping_Links,r24
5581 2d9a 00C0 rjmp .L483
5582 .L482:
5583 2d9c ED2D mov r30,r13
5584 2d9e FF27 clr r31
5585 2da0 EE0F add r30,r30
5586 2da2 FF1F adc r31,r31
5587 2da4 E050 subi r30,lo8(-(PPM_in))
5588 2da6 F040 sbci r31,hi8(-(PPM_in))
5589 2da8 842F mov r24,r20
5590 2daa 9927 clr r25
5591 2dac 2091 0000 lds r18,EE_Parameter+61
5592 2db0 821B sub r24,r18
5593 2db2 9109 sbc r25,__zero_reg__
5594 2db4 2081 ld r18,Z
5595 2db6 3181 ldd r19,Z+1
5596 2db8 2817 cp r18,r24
5597 2dba 3907 cpc r19,r25
5598 2dbc 04F4 brge .L483
5599 2dbe 1092 0000 sts Looping_Links,__zero_reg__
5600 .L483:
5601 2dc2 4091 0000 lds r20,EE_Parameter+2
5602 2dc6 E42F mov r30,r20
5603 2dc8 FF27 clr r31
5604 2dca EE0F add r30,r30
5605 2dcc FF1F adc r31,r31
5606 2dce E050 subi r30,lo8(-(PPM_in))
5607 2dd0 F040 sbci r31,hi8(-(PPM_in))
5608 2dd2 5091 0000 lds r21,EE_Parameter+60
5609 2dd6 852F mov r24,r21
5610 2dd8 9927 clr r25
5611 2dda 2227 clr r18
5612 2ddc 3327 clr r19
5613 2dde 281B sub r18,r24
5614 2de0 390B sbc r19,r25
5615 2de2 8081 ld r24,Z
5616 2de4 9181 ldd r25,Z+1
5617 2de6 8217 cp r24,r18
5618 2de8 9307 cpc r25,r19
5619 2dea 04F4 brge .L485
5620 2dec 8091 0000 lds r24,EE_Parameter+108
5621 2df0 83FF sbrs r24,3
5622 2df2 00C0 rjmp .L485
5623 2df4 81E0 ldi r24,lo8(1)
5624 2df6 8093 0000 sts Looping_Rechts,r24
5625 2dfa 00C0 rjmp .L486
5626 .L485:
5627 2dfc 8091 0000 lds r24,Looping_Rechts
5628 2e00 8823 tst r24
5629 2e02 01F0 breq .L486
5630 2e04 E42F mov r30,r20
5631 2e06 FF27 clr r31
5632 2e08 EE0F add r30,r30
5633 2e0a FF1F adc r31,r31
5634 2e0c E050 subi r30,lo8(-(PPM_in))
5635 2e0e F040 sbci r31,hi8(-(PPM_in))
5636 2e10 8091 0000 lds r24,EE_Parameter+61
5637 2e14 9927 clr r25
5638 2e16 851B sub r24,r21
5639 2e18 9109 sbc r25,__zero_reg__
5640 2e1a 2081 ld r18,Z
5641 2e1c 3181 ldd r19,Z+1
5642 2e1e 8217 cp r24,r18
5643 2e20 9307 cpc r25,r19
5644 2e22 04F4 brge .L486
5645 2e24 1092 0000 sts Looping_Rechts,__zero_reg__
5646 .L486:
5647 2e28 EC2D mov r30,r12
5648 2e2a FF27 clr r31
5649 2e2c EE0F add r30,r30
5650 2e2e FF1F adc r31,r31
5651 2e30 E050 subi r30,lo8(-(PPM_in))
5652 2e32 F040 sbci r31,hi8(-(PPM_in))
5653 2e34 4091 0000 lds r20,EE_Parameter+60
5654 2e38 242F mov r18,r20
5655 2e3a 3327 clr r19
5656 2e3c 8081 ld r24,Z
5657 2e3e 9181 ldd r25,Z+1
5658 2e40 2817 cp r18,r24
5659 2e42 3907 cpc r19,r25
5660 2e44 04F4 brge .L489
5661 2e46 8091 0000 lds r24,EE_Parameter+108
5662 2e4a 80FF sbrs r24,0
5663 2e4c 00C0 rjmp .L489
5664 2e4e 81E0 ldi r24,lo8(1)
5665 2e50 8093 0000 sts Looping_Oben,r24
5666 2e54 00C0 rjmp .L490
5667 .L489:
5668 2e56 8091 0000 lds r24,Looping_Oben
5669 2e5a 8823 tst r24
5670 2e5c 01F0 breq .L490
5671 2e5e EC2D mov r30,r12
5672 2e60 FF27 clr r31
5673 2e62 EE0F add r30,r30
5674 2e64 FF1F adc r31,r31
5675 2e66 E050 subi r30,lo8(-(PPM_in))
5676 2e68 F040 sbci r31,hi8(-(PPM_in))
5677 2e6a 842F mov r24,r20
5678 2e6c 9927 clr r25
5679 2e6e 2091 0000 lds r18,EE_Parameter+61
5680 2e72 821B sub r24,r18
5681 2e74 9109 sbc r25,__zero_reg__
5682 2e76 2081 ld r18,Z
5683 2e78 3181 ldd r19,Z+1
5684 2e7a 2817 cp r18,r24
5685 2e7c 3907 cpc r19,r25
5686 2e7e 04F4 brge .L490
5687 2e80 1092 0000 sts Looping_Oben,__zero_reg__
5688 .L490:
5689 2e84 4091 0000 lds r20,EE_Parameter+1
5690 2e88 E42F mov r30,r20
5691 2e8a FF27 clr r31
5692 2e8c EE0F add r30,r30
5693 2e8e FF1F adc r31,r31
5694 2e90 E050 subi r30,lo8(-(PPM_in))
5695 2e92 F040 sbci r31,hi8(-(PPM_in))
5696 2e94 5091 0000 lds r21,EE_Parameter+60
5697 2e98 852F mov r24,r21
5698 2e9a 9927 clr r25
5699 2e9c 2227 clr r18
5700 2e9e 3327 clr r19
5701 2ea0 281B sub r18,r24
5702 2ea2 390B sbc r19,r25
5703 2ea4 8081 ld r24,Z
5704 2ea6 9181 ldd r25,Z+1
5705 2ea8 8217 cp r24,r18
5706 2eaa 9307 cpc r25,r19
5707 2eac 04F4 brge .L493
5708 2eae 8091 0000 lds r24,EE_Parameter+108
5709 2eb2 81FF sbrs r24,1
5710 2eb4 00C0 rjmp .L493
5711 2eb6 81E0 ldi r24,lo8(1)
5712 2eb8 8093 0000 sts Looping_Unten,r24
5713 2ebc 00C0 rjmp .L494
5714 .L493:
5715 2ebe 8091 0000 lds r24,Looping_Unten
5716 2ec2 8823 tst r24
5717 2ec4 01F0 breq .L494
5718 2ec6 E42F mov r30,r20
5719 2ec8 FF27 clr r31
5720 2eca EE0F add r30,r30
5721 2ecc FF1F adc r31,r31
5722 2ece E050 subi r30,lo8(-(PPM_in))
5723 2ed0 F040 sbci r31,hi8(-(PPM_in))
5724 2ed2 8091 0000 lds r24,EE_Parameter+61
5725 2ed6 9927 clr r25
5726 2ed8 851B sub r24,r21
5727 2eda 9109 sbc r25,__zero_reg__
5728 2edc 2081 ld r18,Z
5729 2ede 3181 ldd r19,Z+1
5730 2ee0 8217 cp r24,r18
5731 2ee2 9307 cpc r25,r19
5732 2ee4 04F4 brge .L494
5733 2ee6 1092 0000 sts Looping_Unten,__zero_reg__
5734 .L494:
5735 2eea 8091 0000 lds r24,Looping_Links
5736 2eee 8823 tst r24
5737 2ef0 01F4 brne .L498
5738 2ef2 8091 0000 lds r24,Looping_Rechts
5739 2ef6 8111 cpse r24,__zero_reg__
5740 .L498:
5741 2ef8 81E0 ldi r24,lo8(1)
5742 .L497:
5743 2efa 8093 0000 sts Looping_Roll,r24
5744 2efe 8091 0000 lds r24,Looping_Oben
5745 2f02 8823 tst r24
5746 2f04 01F4 brne .L501
5747 2f06 8091 0000 lds r24,Looping_Unten
5748 2f0a 8823 tst r24
5749 2f0c 01F0 breq .L500
5750 .L501:
5751 2f0e 81E0 ldi r24,lo8(1)
5752 2f10 8093 0000 sts Looping_Nick,r24
5753 2f14 1092 0000 sts Looping_Roll,__zero_reg__
5754 2f18 1092 0000 sts Looping_Links,__zero_reg__
5755 2f1c 1092 0000 sts Looping_Rechts,__zero_reg__
5756 2f20 00C0 rjmp .L442
5757 .L500:
5758 2f22 8093 0000 sts Looping_Nick,r24
5759 .L442:
5760 2f26 8091 0000 lds r24,Looping_Roll
5761 2f2a 8823 tst r24
5762 2f2c 01F4 brne .L504
5763 2f2e 8091 0000 lds r24,Looping_Nick
5764 2f32 8823 tst r24
5765 2f34 01F0 breq .L503
5766 .L504:
5767 2f36 8091 0000 lds r24,EE_Parameter+59
5768 2f3a 9927 clr r25
5769 2f3c 2981 ldd r18,Y+1
5770 2f3e 3A81 ldd r19,Y+2
5771 2f40 8217 cp r24,r18
5772 2f42 9307 cpc r25,r19
5773 2f44 04F4 brge .L505
5774 2f46 9A83 std Y+2,r25
5775 2f48 8983 std Y+1,r24
5776 .L505:
5777 2f4a 81E0 ldi r24,lo8(1)
5778 2f4c 8093 0000 sts TrichterFlug,r24
5779 .L503:
5780 2f50 8091 0000 lds r24,FC_StatusFlags2
5781 2f54 9927 clr r25
5782 2f56 9C01 movw r18,r24
5783 2f58 2470 andi r18,lo8(4)
5784 2f5a 3070 andi r19,hi8(4)
5785 2f5c 82FF sbrs r24,2
5786 2f5e 00C0 rjmp .L506
5787 2f60 8091 0000 lds r24,GPS_Nick
5788 2f64 9091 0000 lds r25,(GPS_Nick)+1
5789 2f68 9095 com r25
5790 2f6a 8195 neg r24
5791 2f6c 9F4F sbci r25,lo8(-1)
5792 2f6e 9093 0000 sts (StickNick)+1,r25
5793 2f72 8093 0000 sts StickNick,r24
5794 2f76 8091 0000 lds r24,GPS_Roll
5795 2f7a 9091 0000 lds r25,(GPS_Roll)+1
5796 2f7e 9095 com r25
5797 2f80 8195 neg r24
5798 2f82 9F4F sbci r25,lo8(-1)
5799 2f84 9093 0000 sts (StickRoll)+1,r25
5800 2f88 8093 0000 sts StickRoll,r24
5801 2f8c 8091 0000 lds r24,StickGasHover
5802 2f90 9091 0000 lds r25,(StickGasHover)+1
5803 2f94 9093 0000 sts (StickGas)+1,r25
5804 2f98 8093 0000 sts StickGas,r24
5805 2f9c 8091 0000 lds r24,Parameter_GlobalConfig
5806 2fa0 8B77 andi r24,lo8(123)
5807 2fa2 8B66 ori r24,lo8(107)
5808 2fa4 8093 0000 sts Parameter_GlobalConfig,r24
5809 2fa8 8091 0000 lds r24,Parameter_ExtraConfig
5810 2fac 8C7B andi r24,lo8(-68)
5811 2fae 8093 0000 sts Parameter_ExtraConfig,r24
5812 2fb2 88EC ldi r24,lo8(-56)
5813 2fb4 8093 0000 sts Parameter_HoehenSchalter,r24
5814 2fb8 00C0 rjmp .L507
5815 .L506:
5816 2fba 8091 0000 lds r24,FC_StatusFlags
5817 2fbe 84FF sbrs r24,4
5818 2fc0 00C0 rjmp .L507
5819 2fc2 3093 0000 sts (StickGier)+1,r19
5820 2fc6 2093 0000 sts StickGier,r18
5821 2fca 3093 0000 sts (StickNick)+1,r19
5822 2fce 2093 0000 sts StickNick,r18
5823 2fd2 3093 0000 sts (StickRoll)+1,r19
5824 2fd6 2093 0000 sts StickRoll,r18
5825 2fda 9AE5 ldi r25,lo8(90)
5826 2fdc 9093 0000 sts GyroFaktor,r25
5827 2fe0 88E7 ldi r24,lo8(120)
5828 2fe2 8093 0000 sts IntegralFaktor,r24
5829 2fe6 9093 0000 sts GyroFaktorGier,r25
5830 2fea 8093 0000 sts IntegralFaktorGier,r24
5831 2fee 1092 0000 sts Looping_Roll,__zero_reg__
5832 2ff2 1092 0000 sts Looping_Nick,__zero_reg__
5833 .L507:
5834 2ff6 8091 0000 lds r24,MittelIntegralNick
5835 2ffa 9091 0000 lds r25,(MittelIntegralNick)+1
5836 2ffe A091 0000 lds r26,(MittelIntegralNick)+2
5837 3002 B091 0000 lds r27,(MittelIntegralNick)+3
5838 3006 2091 0000 lds r18,IntegralNick
5839 300a 3091 0000 lds r19,(IntegralNick)+1
5840 300e 4091 0000 lds r20,(IntegralNick)+2
5841 3012 5091 0000 lds r21,(IntegralNick)+3
5842 3016 820F add r24,r18
5843 3018 931F adc r25,r19
5844 301a A41F adc r26,r20
5845 301c B51F adc r27,r21
5846 301e 8093 0000 sts MittelIntegralNick,r24
5847 3022 9093 0000 sts (MittelIntegralNick)+1,r25
5848 3026 A093 0000 sts (MittelIntegralNick)+2,r26
5849 302a B093 0000 sts (MittelIntegralNick)+3,r27
5850 302e 8091 0000 lds r24,MittelIntegralRoll
5851 3032 9091 0000 lds r25,(MittelIntegralRoll)+1
5852 3036 A091 0000 lds r26,(MittelIntegralRoll)+2
5853 303a B091 0000 lds r27,(MittelIntegralRoll)+3
5854 303e E090 0000 lds r14,IntegralRoll
5855 3042 F090 0000 lds r15,(IntegralRoll)+1
5856 3046 0091 0000 lds r16,(IntegralRoll)+2
5857 304a 1091 0000 lds r17,(IntegralRoll)+3
5858 304e EB82 std Y+3,r14
5859 3050 FC82 std Y+4,r15
5860 3052 0D83 std Y+5,r16
5861 3054 1E83 std Y+6,r17
5862 3056 8E0D add r24,r14
5863 3058 9F1D adc r25,r15
5864 305a A01F adc r26,r16
5865 305c B11F adc r27,r17
5866 305e 8093 0000 sts MittelIntegralRoll,r24
5867 3062 9093 0000 sts (MittelIntegralRoll)+1,r25
5868 3066 A093 0000 sts (MittelIntegralRoll)+2,r26
5869 306a B093 0000 sts (MittelIntegralRoll)+3,r27
5870 306e 8091 0000 lds r24,MittelIntegralNick2
5871 3072 9091 0000 lds r25,(MittelIntegralNick2)+1
5872 3076 A091 0000 lds r26,(MittelIntegralNick2)+2
5873 307a B091 0000 lds r27,(MittelIntegralNick2)+3
5874 307e E090 0000 lds r14,IntegralNick2
5875 3082 F090 0000 lds r15,(IntegralNick2)+1
5876 3086 0091 0000 lds r16,(IntegralNick2)+2
5877 308a 1091 0000 lds r17,(IntegralNick2)+3
5878 308e EF82 std Y+7,r14
5879 3090 F886 std Y+8,r15
5880 3092 0987 std Y+9,r16
5881 3094 1A87 std Y+10,r17
5882 3096 8E0D add r24,r14
5883 3098 9F1D adc r25,r15
5884 309a A01F adc r26,r16
5885 309c B11F adc r27,r17
5886 309e 8093 0000 sts MittelIntegralNick2,r24
5887 30a2 9093 0000 sts (MittelIntegralNick2)+1,r25
5888 30a6 A093 0000 sts (MittelIntegralNick2)+2,r26
5889 30aa B093 0000 sts (MittelIntegralNick2)+3,r27
5890 30ae 8091 0000 lds r24,MittelIntegralRoll2
5891 30b2 9091 0000 lds r25,(MittelIntegralRoll2)+1
5892 30b6 A091 0000 lds r26,(MittelIntegralRoll2)+2
5893 30ba B091 0000 lds r27,(MittelIntegralRoll2)+3
5894 30be E090 0000 lds r14,IntegralRoll2
5895 30c2 F090 0000 lds r15,(IntegralRoll2)+1
5896 30c6 0091 0000 lds r16,(IntegralRoll2)+2
5897 30ca 1091 0000 lds r17,(IntegralRoll2)+3
5898 30ce EB86 std Y+11,r14
5899 30d0 FC86 std Y+12,r15
5900 30d2 0D87 std Y+13,r16
5901 30d4 1E87 std Y+14,r17
5902 30d6 8E0D add r24,r14
5903 30d8 9F1D adc r25,r15
5904 30da A01F adc r26,r16
5905 30dc B11F adc r27,r17
5906 30de 8093 0000 sts MittelIntegralRoll2,r24
5907 30e2 9093 0000 sts (MittelIntegralRoll2)+1,r25
5908 30e6 A093 0000 sts (MittelIntegralRoll2)+2,r26
5909 30ea B093 0000 sts (MittelIntegralRoll2)+3,r27
5910 30ee F090 0000 lds r15,Looping_Nick
5911 30f2 FF86 std Y+15,r15
5912 30f4 FF20 tst r15
5913 30f6 01F4 brne .L510
5914 30f8 8091 0000 lds r24,Looping_Roll
5915 30fc 8823 tst r24
5916 30fe 01F4 brne .+2
5917 3100 00C0 rjmp .L892
5918 .L510:
5919 3102 1092 0000 sts IntegralAccNick,__zero_reg__
5920 3106 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
5921 310a 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
5922 310e 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
5923 3112 1092 0000 sts IntegralAccRoll,__zero_reg__
5924 3116 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
5925 311a 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
5926 311e 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
5927 3122 1092 0000 sts MittelIntegralNick,__zero_reg__
5928 3126 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
5929 312a 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
5930 312e 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
5931 3132 1092 0000 sts MittelIntegralRoll,__zero_reg__
5932 3136 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
5933 313a 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
5934 313e 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
5935 3142 1092 0000 sts MittelIntegralNick2,__zero_reg__
5936 3146 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
5937 314a 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
5938 314e 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
5939 3152 1092 0000 sts MittelIntegralRoll2,__zero_reg__
5940 3156 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
5941 315a 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
5942 315e 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
5943 3162 8091 0000 lds r24,Mess_IntegralNick
5944 3166 9091 0000 lds r25,(Mess_IntegralNick)+1
5945 316a A091 0000 lds r26,(Mess_IntegralNick)+2
5946 316e B091 0000 lds r27,(Mess_IntegralNick)+3
5947 3172 8093 0000 sts Mess_IntegralNick2,r24
5948 3176 9093 0000 sts (Mess_IntegralNick2)+1,r25
5949 317a A093 0000 sts (Mess_IntegralNick2)+2,r26
5950 317e B093 0000 sts (Mess_IntegralNick2)+3,r27
5951 3182 8091 0000 lds r24,Mess_IntegralRoll
5952 3186 9091 0000 lds r25,(Mess_IntegralRoll)+1
5953 318a A091 0000 lds r26,(Mess_IntegralRoll)+2
5954 318e B091 0000 lds r27,(Mess_IntegralRoll)+3
5955 3192 8093 0000 sts Mess_IntegralRoll2,r24
5956 3196 9093 0000 sts (Mess_IntegralRoll2)+1,r25
5957 319a A093 0000 sts (Mess_IntegralRoll2)+2,r26
5958 319e B093 0000 sts (Mess_IntegralRoll2)+3,r27
5959 31a2 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
5960 31a6 1092 0000 sts ZaehlMessungen,__zero_reg__
5961 31aa 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
5962 31ae 1092 0000 sts LageKorrekturNick,__zero_reg__
5963 31b2 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
5964 31b6 1092 0000 sts LageKorrekturRoll,__zero_reg__
5965 31ba 0F85 ldd r16,Y+15
5966 31bc 0023 tst r16
5967 31be 01F0 breq .+2
5968 31c0 00C0 rjmp .L511
5969 .L892:
5970 31c2 8091 0000 lds r24,Looping_Roll
5971 31c6 8823 tst r24
5972 31c8 01F0 breq .+2
5973 31ca 00C0 rjmp .L511
5974 31cc 8091 0000 lds r24,Aktuell_az
5975 31d0 9091 0000 lds r25,(Aktuell_az)+1
5976 31d4 8150 subi r24,lo8(513)
5977 31d6 9240 sbci r25,hi8(513)
5978 31d8 04F4 brge .L512
5979 31da 8091 0000 lds r24,MotorenEin
5980 31de 8823 tst r24
5981 31e0 01F4 brne .+2
5982 31e2 00C0 rjmp .L511
5983 .L512:
5984 31e4 9090 0000 lds r9,FromNaviCtrl_Value
5985 31e8 A090 0000 lds r10,EE_Parameter+28
5986 31ec 2090 0000 lds r2,Mittelwert_AccNick
5987 31f0 3090 0000 lds r3,(Mittelwert_AccNick)+1
5988 31f4 4090 0000 lds r4,Mittelwert_AccRoll
5989 31f8 5090 0000 lds r5,(Mittelwert_AccRoll)+1
5990 31fc 1914 cp __zero_reg__,r9
5991 31fe 04F0 brlt .+2
5992 3200 00C0 rjmp .L513
5993 3202 BB24 clr r11
5994 3204 CC24 clr r12
5995 3206 DD24 clr r13
5996 3208 CA01 movw r24,r20
5997 320a B901 movw r22,r18
5998 320c A601 movw r20,r12
5999 320e 9501 movw r18,r10
6000 3210 0E94 0000 call __divmodsi4
6001 3214 7901 movw r14,r18
6002 3216 8A01 movw r16,r20
6003 3218 8091 0000 lds r24,FromNaviCtrl+9
6004 321c 9091 0000 lds r25,(FromNaviCtrl+9)+1
6005 3220 281A sub r2,r24
6006 3222 390A sbc r3,r25
6007 3224 C101 movw r24,r2
6008 3226 AA27 clr r26
6009 3228 97FD sbrc r25,7
6010 322a A095 com r26
6011 322c BA2F mov r27,r26
6012 322e E81A sub r14,r24
6013 3230 F90A sbc r15,r25
6014 3232 0A0B sbc r16,r26
6015 3234 1B0B sbc r17,r27
6016 3236 6B81 ldd r22,Y+3
6017 3238 7C81 ldd r23,Y+4
6018 323a 8D81 ldd r24,Y+5
6019 323c 9E81 ldd r25,Y+6
6020 323e A601 movw r20,r12
6021 3240 9501 movw r18,r10
6022 3242 0E94 0000 call __divmodsi4
6023 3246 5901 movw r10,r18
6024 3248 6A01 movw r12,r20
6025 324a 8091 0000 lds r24,FromNaviCtrl+11
6026 324e 9091 0000 lds r25,(FromNaviCtrl+11)+1
6027 3252 481A sub r4,r24
6028 3254 590A sbc r5,r25
6029 3256 C201 movw r24,r4
6030 3258 AA27 clr r26
6031 325a 97FD sbrc r25,7
6032 325c A095 com r26
6033 325e BA2F mov r27,r26
6034 3260 A81A sub r10,r24
6035 3262 B90A sbc r11,r25
6036 3264 CA0A sbc r12,r26
6037 3266 DB0A sbc r13,r27
6038 3268 292C mov r2,r9
6039 326a 3324 clr r3
6040 326c 27FC sbrc r2,7
6041 326e 3094 com r3
6042 3270 432C mov r4,r3
6043 3272 532C mov r5,r3
6044 3274 C801 movw r24,r16
6045 3276 B701 movw r22,r14
6046 3278 A201 movw r20,r4
6047 327a 9101 movw r18,r2
6048 327c 0E94 0000 call __mulsi3
6049 3280 97FF sbrs r25,7
6050 3282 00C0 rjmp .L514
6051 3284 6150 subi r22,lo8(-(511))
6052 3286 7E4F sbci r23,hi8(-(511))
6053 3288 8F4F sbci r24,hlo8(-(511))
6054 328a 9F4F sbci r25,hhi8(-(511))
6055 .L514:
6056 328c 3B01 movw r6,r22
6057 328e 4C01 movw r8,r24
6058 3290 09E0 ldi r16,9
6059 3292 9594 1: asr r9
6060 3294 8794 ror r8
6061 3296 7794 ror r7
6062 3298 6794 ror r6
6063 329a 0A95 dec r16
6064 329c 01F4 brne 1b
6065 329e C601 movw r24,r12
6066 32a0 B501 movw r22,r10
6067 32a2 A201 movw r20,r4
6068 32a4 9101 movw r18,r2
6069 32a6 0E94 0000 call __mulsi3
6070 32aa 97FF sbrs r25,7
6071 32ac 00C0 rjmp .L515
6072 32ae 6150 subi r22,lo8(-(511))
6073 32b0 7E4F sbci r23,hi8(-(511))
6074 32b2 8F4F sbci r24,hlo8(-(511))
6075 32b4 9F4F sbci r25,hhi8(-(511))
6076 .L515:
6077 32b6 5B01 movw r10,r22
6078 32b8 6C01 movw r12,r24
6079 32ba 19E0 ldi r17,9
6080 32bc D594 1: asr r13
6081 32be C794 ror r12
6082 32c0 B794 ror r11
6083 32c2 A794 ror r10
6084 32c4 1A95 dec r17
6085 32c6 01F4 brne 1b
6086 32c8 8091 0000 lds r24,MaxStickNick
6087 32cc 9091 0000 lds r25,(MaxStickNick)+1
6088 32d0 8134 cpi r24,65
6089 32d2 9105 cpc r25,__zero_reg__
6090 32d4 04F4 brge .L517
6091 32d6 8091 0000 lds r24,MaxStickRoll
6092 32da 9091 0000 lds r25,(MaxStickRoll)+1
6093 32de 8134 cpi r24,65
6094 32e0 9105 cpc r25,__zero_reg__
6095 32e2 04F0 brlt .L516
6096 .L517:
6097 32e4 D401 movw r26,r8
6098 32e6 C301 movw r24,r6
6099 32e8 97FE sbrs r9,7
6100 32ea 00C0 rjmp .L518
6101 32ec 0196 adiw r24,1
6102 32ee A11D adc r26,__zero_reg__
6103 32f0 B11D adc r27,__zero_reg__
6104 .L518:
6105 32f2 3C01 movw r6,r24
6106 32f4 4D01 movw r8,r26
6107 32f6 9594 asr r9
6108 32f8 8794 ror r8
6109 32fa 7794 ror r7
6110 32fc 6794 ror r6
6111 32fe D601 movw r26,r12
6112 3300 C501 movw r24,r10
6113 3302 D7FE sbrs r13,7
6114 3304 00C0 rjmp .L519
6115 3306 0196 adiw r24,1
6116 3308 A11D adc r26,__zero_reg__
6117 330a B11D adc r27,__zero_reg__
6118 .L519:
6119 330c 5C01 movw r10,r24
6120 330e 6D01 movw r12,r26
6121 3310 D594 asr r13
6122 3312 C794 ror r12
6123 3314 B794 ror r11
6124 3316 A794 ror r10
6125 .L516:
6126 3318 8091 0000 lds r24,FromNaviCtrl_Value+2
6127 331c 282F mov r18,r24
6128 331e 3327 clr r19
6129 3320 27FD sbrc r18,7
6130 3322 3095 com r19
6131 3324 432F mov r20,r19
6132 3326 532F mov r21,r19
6133 3328 2615 cp r18,r6
6134 332a 3705 cpc r19,r7
6135 332c 4805 cpc r20,r8
6136 332e 5905 cpc r21,r9
6137 3330 04F4 brge .L520
6138 3332 3901 movw r6,r18
6139 3334 4A01 movw r8,r20
6140 .L520:
6141 3336 9927 clr r25
6142 3338 87FD sbrc r24,7
6143 333a 9095 com r25
6144 333c 9095 com r25
6145 333e 8195 neg r24
6146 3340 9F4F sbci r25,lo8(-1)
6147 3342 AA27 clr r26
6148 3344 97FD sbrc r25,7
6149 3346 A095 com r26
6150 3348 BA2F mov r27,r26
6151 334a 6816 cp r6,r24
6152 334c 7906 cpc r7,r25
6153 334e 8A06 cpc r8,r26
6154 3350 9B06 cpc r9,r27
6155 3352 04F4 brge .L521
6156 3354 3C01 movw r6,r24
6157 3356 4D01 movw r8,r26
6158 .L521:
6159 3358 2A15 cp r18,r10
6160 335a 3B05 cpc r19,r11
6161 335c 4C05 cpc r20,r12
6162 335e 5D05 cpc r21,r13
6163 3360 04F4 brge .L522
6164 3362 5901 movw r10,r18
6165 3364 6A01 movw r12,r20
6166 .L522:
6167 3366 A816 cp r10,r24
6168 3368 B906 cpc r11,r25
6169 336a CA06 cpc r12,r26
6170 336c DB06 cpc r13,r27
6171 336e 04F0 brlt .+2
6172 3370 00C0 rjmp .L524
6173 3372 5C01 movw r10,r24
6174 3374 6D01 movw r12,r26
6175 3376 00C0 rjmp .L524
6176 .L513:
6177 3378 EA2C mov r14,r10
6178 337a FF24 clr r15
6179 337c 0027 clr r16
6180 337e 1127 clr r17
6181 3380 CA01 movw r24,r20
6182 3382 B901 movw r22,r18
6183 3384 A801 movw r20,r16
6184 3386 9701 movw r18,r14
6185 3388 0E94 0000 call __divmodsi4
6186 338c 3901 movw r6,r18
6187 338e 4A01 movw r8,r20
6188 3390 C101 movw r24,r2
6189 3392 AA27 clr r26
6190 3394 97FD sbrc r25,7
6191 3396 A095 com r26
6192 3398 BA2F mov r27,r26
6193 339a 681A sub r6,r24
6194 339c 790A sbc r7,r25
6195 339e 8A0A sbc r8,r26
6196 33a0 9B0A sbc r9,r27
6197 33a2 6B81 ldd r22,Y+3
6198 33a4 7C81 ldd r23,Y+4
6199 33a6 8D81 ldd r24,Y+5
6200 33a8 9E81 ldd r25,Y+6
6201 33aa A801 movw r20,r16
6202 33ac 9701 movw r18,r14
6203 33ae 0E94 0000 call __divmodsi4
6204 33b2 5901 movw r10,r18
6205 33b4 6A01 movw r12,r20
6206 33b6 C201 movw r24,r4
6207 33b8 AA27 clr r26
6208 33ba 97FD sbrc r25,7
6209 33bc A095 com r26
6210 33be BA2F mov r27,r26
6211 33c0 A81A sub r10,r24
6212 33c2 B90A sbc r11,r25
6213 33c4 CA0A sbc r12,r26
6214 33c6 DB0A sbc r13,r27
6215 33c8 D401 movw r26,r8
6216 33ca C301 movw r24,r6
6217 33cc 97FE sbrs r9,7
6218 33ce 00C0 rjmp .L525
6219 33d0 0F96 adiw r24,15
6220 33d2 A11D adc r26,__zero_reg__
6221 33d4 B11D adc r27,__zero_reg__
6222 .L525:
6223 33d6 3C01 movw r6,r24
6224 33d8 4D01 movw r8,r26
6225 33da F4E0 ldi r31,4
6226 33dc 9594 1: asr r9
6227 33de 8794 ror r8
6228 33e0 7794 ror r7
6229 33e2 6794 ror r6
6230 33e4 FA95 dec r31
6231 33e6 01F4 brne 1b
6232 33e8 D601 movw r26,r12
6233 33ea C501 movw r24,r10
6234 33ec D7FE sbrs r13,7
6235 33ee 00C0 rjmp .L526
6236 33f0 0F96 adiw r24,15
6237 33f2 A11D adc r26,__zero_reg__
6238 33f4 B11D adc r27,__zero_reg__
6239 .L526:
6240 33f6 5C01 movw r10,r24
6241 33f8 6D01 movw r12,r26
6242 33fa E4E0 ldi r30,4
6243 33fc D594 1: asr r13
6244 33fe C794 ror r12
6245 3400 B794 ror r11
6246 3402 A794 ror r10
6247 3404 EA95 dec r30
6248 3406 01F4 brne 1b
6249 3408 8091 0000 lds r24,MaxStickNick
6250 340c 9091 0000 lds r25,(MaxStickNick)+1
6251 3410 8134 cpi r24,65
6252 3412 9105 cpc r25,__zero_reg__
6253 3414 04F4 brge .L528
6254 3416 8091 0000 lds r24,MaxStickRoll
6255 341a 9091 0000 lds r25,(MaxStickRoll)+1
6256 341e 8134 cpi r24,65
6257 3420 9105 cpc r25,__zero_reg__
6258 3422 04F0 brlt .L527
6259 .L528:
6260 3424 C401 movw r24,r8
6261 3426 B301 movw r22,r6
6262 3428 23E0 ldi r18,lo8(3)
6263 342a 30E0 ldi r19,hi8(3)
6264 342c 40E0 ldi r20,hlo8(3)
6265 342e 50E0 ldi r21,hhi8(3)
6266 3430 0E94 0000 call __divmodsi4
6267 3434 3901 movw r6,r18
6268 3436 4A01 movw r8,r20
6269 3438 C601 movw r24,r12
6270 343a B501 movw r22,r10
6271 343c 23E0 ldi r18,lo8(3)
6272 343e 30E0 ldi r19,hi8(3)
6273 3440 40E0 ldi r20,hlo8(3)
6274 3442 50E0 ldi r21,hhi8(3)
6275 3444 0E94 0000 call __divmodsi4
6276 3448 5901 movw r10,r18
6277 344a 6A01 movw r12,r20
6278 .L527:
6279 344c 8091 0000 lds r24,EE_Parameter+4
6280 3450 E82F mov r30,r24
6281 3452 FF27 clr r31
6282 3454 EE0F add r30,r30
6283 3456 FF1F adc r31,r31
6284 3458 E050 subi r30,lo8(-(PPM_in))
6285 345a F040 sbci r31,hi8(-(PPM_in))
6286 345c 8081 ld r24,Z
6287 345e 9181 ldd r25,Z+1
6288 3460 0190 ld __tmp_reg__,Z+
6289 3462 F081 ld r31,Z
6290 3464 E02D mov r30,__tmp_reg__
6291 3466 F7FF sbrs r31,7
6292 3468 00C0 rjmp .L530
6293 346a F095 com r31
6294 346c E195 neg r30
6295 346e FF4F sbci r31,lo8(-1)
6296 .L530:
6297 3470 7A97 sbiw r30,26
6298 3472 04F0 brlt .L529
6299 3474 C401 movw r24,r8
6300 3476 B301 movw r22,r6
6301 3478 23E0 ldi r18,lo8(3)
6302 347a 30E0 ldi r19,hi8(3)
6303 347c 40E0 ldi r20,hlo8(3)
6304 347e 50E0 ldi r21,hhi8(3)
6305 3480 0E94 0000 call __divmodsi4
6306 3484 3901 movw r6,r18
6307 3486 4A01 movw r8,r20
6308 3488 C601 movw r24,r12
6309 348a B501 movw r22,r10
6310 348c 23E0 ldi r18,lo8(3)
6311 348e 30E0 ldi r19,hi8(3)
6312 3490 40E0 ldi r20,hlo8(3)
6313 3492 50E0 ldi r21,hhi8(3)
6314 3494 0E94 0000 call __divmodsi4
6315 3498 5901 movw r10,r18
6316 349a 6A01 movw r12,r20
6317 .L529:
6318 349c 89E1 ldi r24,lo8(25)
6319 349e 8093 0000 sts KompassFusion,r24
6320 34a2 21E2 ldi r18,lo8(33)
6321 34a4 6216 cp r6,r18
6322 34a6 7104 cpc r7,__zero_reg__
6323 34a8 8104 cpc r8,__zero_reg__
6324 34aa 9104 cpc r9,__zero_reg__
6325 34ac 04F0 brlt .L531
6326 34ae 70E2 ldi r23,lo8(32)
6327 34b0 672E mov r6,r23
6328 34b2 712C mov r7,__zero_reg__
6329 34b4 812C mov r8,__zero_reg__
6330 34b6 912C mov r9,__zero_reg__
6331 .L531:
6332 34b8 30EE ldi r19,lo8(-32)
6333 34ba 6316 cp r6,r19
6334 34bc 3FEF ldi r19,hi8(-32)
6335 34be 7306 cpc r7,r19
6336 34c0 3FEF ldi r19,hlo8(-32)
6337 34c2 8306 cpc r8,r19
6338 34c4 3FEF ldi r19,hhi8(-32)
6339 34c6 9306 cpc r9,r19
6340 34c8 04F4 brge .L532
6341 34ca 60EE ldi r22,lo8(-32)
6342 34cc 662E mov r6,r22
6343 34ce 6FEF ldi r22,hi8(-32)
6344 34d0 762E mov r7,r22
6345 34d2 6FEF ldi r22,hlo8(-32)
6346 34d4 862E mov r8,r22
6347 34d6 6FEF ldi r22,hhi8(-32)
6348 34d8 962E mov r9,r22
6349 .L532:
6350 34da 41E2 ldi r20,lo8(33)
6351 34dc A416 cp r10,r20
6352 34de B104 cpc r11,__zero_reg__
6353 34e0 C104 cpc r12,__zero_reg__
6354 34e2 D104 cpc r13,__zero_reg__
6355 34e4 04F0 brlt .L533
6356 34e6 50E2 ldi r21,lo8(32)
6357 34e8 A52E mov r10,r21
6358 34ea B12C mov r11,__zero_reg__
6359 34ec C12C mov r12,__zero_reg__
6360 34ee D12C mov r13,__zero_reg__
6361 .L533:
6362 34f0 50EE ldi r21,lo8(-32)
6363 34f2 A516 cp r10,r21
6364 34f4 5FEF ldi r21,hi8(-32)
6365 34f6 B506 cpc r11,r21
6366 34f8 5FEF ldi r21,hlo8(-32)
6367 34fa C506 cpc r12,r21
6368 34fc 5FEF ldi r21,hhi8(-32)
6369 34fe D506 cpc r13,r21
6370 3500 04F4 brge .L524
6371 3502 40EE ldi r20,lo8(-32)
6372 3504 A42E mov r10,r20
6373 3506 4FEF ldi r20,hi8(-32)
6374 3508 B42E mov r11,r20
6375 350a 4FEF ldi r20,hlo8(-32)
6376 350c C42E mov r12,r20
6377 350e 4FEF ldi r20,hhi8(-32)
6378 3510 D42E mov r13,r20
6379 .L524:
6380 3512 8091 0000 lds r24,Mess_IntegralNick
6381 3516 9091 0000 lds r25,(Mess_IntegralNick)+1
6382 351a A091 0000 lds r26,(Mess_IntegralNick)+2
6383 351e B091 0000 lds r27,(Mess_IntegralNick)+3
6384 3522 8619 sub r24,r6
6385 3524 9709 sbc r25,r7
6386 3526 A809 sbc r26,r8
6387 3528 B909 sbc r27,r9
6388 352a 8093 0000 sts Mess_IntegralNick,r24
6389 352e 9093 0000 sts (Mess_IntegralNick)+1,r25
6390 3532 A093 0000 sts (Mess_IntegralNick)+2,r26
6391 3536 B093 0000 sts (Mess_IntegralNick)+3,r27
6392 353a 8091 0000 lds r24,Mess_IntegralRoll
6393 353e 9091 0000 lds r25,(Mess_IntegralRoll)+1
6394 3542 A091 0000 lds r26,(Mess_IntegralRoll)+2
6395 3546 B091 0000 lds r27,(Mess_IntegralRoll)+3
6396 354a 8A19 sub r24,r10
6397 354c 9B09 sbc r25,r11
6398 354e AC09 sbc r26,r12
6399 3550 BD09 sbc r27,r13
6400 3552 8093 0000 sts Mess_IntegralRoll,r24
6401 3556 9093 0000 sts (Mess_IntegralRoll)+1,r25
6402 355a A093 0000 sts (Mess_IntegralRoll)+2,r26
6403 355e B093 0000 sts (Mess_IntegralRoll)+3,r27
6404 .L511:
6405 3562 8091 0000 lds r24,ZaehlMessungen
6406 3566 9091 0000 lds r25,(ZaehlMessungen)+1
6407 356a 8F3F cpi r24,255
6408 356c 9105 cpc r25,__zero_reg__
6409 356e 01F0 breq .+2
6410 3570 00F4 brsh .+2
6411 3572 00C0 rjmp .L535
6412 3574 6F85 ldd r22,Y+15
6413 3576 6623 tst r22
6414 3578 01F0 breq .+2
6415 357a 00C0 rjmp .L536
6416 357c 8091 0000 lds r24,Looping_Roll
6417 3580 8823 tst r24
6418 3582 01F0 breq .+2
6419 3584 00C0 rjmp .L536
6420 3586 8091 0000 lds r24,TrichterFlug
6421 358a 8823 tst r24
6422 358c 01F0 breq .+2
6423 358e 00C0 rjmp .L536
6424 3590 7091 0000 lds r23,EE_Parameter+68
6425 3594 788B std Y+16,r23
6426 3596 7723 tst r23
6427 3598 01F4 brne .+2
6428 359a 00C0 rjmp .L536
6429 359c 8091 0000 lds r24,MittelIntegralNick
6430 35a0 9091 0000 lds r25,(MittelIntegralNick)+1
6431 35a4 A091 0000 lds r26,(MittelIntegralNick)+2
6432 35a8 B091 0000 lds r27,(MittelIntegralNick)+3
6433 35ac B7FF sbrs r27,7
6434 35ae 00C0 rjmp .L537
6435 35b0 8150 subi r24,lo8(-(255))
6436 35b2 9F4F sbci r25,hi8(-(255))
6437 35b4 AF4F sbci r26,hlo8(-(255))
6438 35b6 BF4F sbci r27,hhi8(-(255))
6439 .L537:
6440 35b8 E92E mov r14,r25
6441 35ba FA2E mov r15,r26
6442 35bc 0B2F mov r16,r27
6443 35be 1127 clr r17
6444 35c0 07FD sbrc r16,7
6445 35c2 1A95 dec r17
6446 35c4 E092 0000 sts MittelIntegralNick,r14
6447 35c8 F092 0000 sts (MittelIntegralNick)+1,r15
6448 35cc 0093 0000 sts (MittelIntegralNick)+2,r16
6449 35d0 1093 0000 sts (MittelIntegralNick)+3,r17
6450 35d4 8091 0000 lds r24,MittelIntegralRoll
6451 35d8 9091 0000 lds r25,(MittelIntegralRoll)+1
6452 35dc A091 0000 lds r26,(MittelIntegralRoll)+2
6453 35e0 B091 0000 lds r27,(MittelIntegralRoll)+3
6454 35e4 B7FF sbrs r27,7
6455 35e6 00C0 rjmp .L538
6456 35e8 8150 subi r24,lo8(-(255))
6457 35ea 9F4F sbci r25,hi8(-(255))
6458 35ec AF4F sbci r26,hlo8(-(255))
6459 35ee BF4F sbci r27,hhi8(-(255))
6460 .L538:
6461 35f0 892F mov r24,r25
6462 35f2 9A2F mov r25,r26
6463 35f4 AB2F mov r26,r27
6464 35f6 BB27 clr r27
6465 35f8 A7FD sbrc r26,7
6466 35fa BA95 dec r27
6467 35fc 898B std Y+17,r24
6468 35fe 9A8B std Y+18,r25
6469 3600 AB8B std Y+19,r26
6470 3602 BC8B std Y+20,r27
6471 3604 8093 0000 sts MittelIntegralRoll,r24
6472 3608 9093 0000 sts (MittelIntegralRoll)+1,r25
6473 360c A093 0000 sts (MittelIntegralRoll)+2,r26
6474 3610 B093 0000 sts (MittelIntegralRoll)+3,r27
6475 3614 8091 0000 lds r24,EE_Parameter+28
6476 3618 A82E mov r10,r24
6477 361a BB24 clr r11
6478 361c CC24 clr r12
6479 361e DD24 clr r13
6480 3620 2091 0000 lds r18,IntegralAccNick
6481 3624 3091 0000 lds r19,(IntegralAccNick)+1
6482 3628 4091 0000 lds r20,(IntegralAccNick)+2
6483 362c 5091 0000 lds r21,(IntegralAccNick)+3
6484 3630 C601 movw r24,r12
6485 3632 B501 movw r22,r10
6486 3634 0E94 0000 call __mulsi3
6487 3638 97FF sbrs r25,7
6488 363a 00C0 rjmp .L539
6489 363c 6150 subi r22,lo8(-(255))
6490 363e 7F4F sbci r23,hi8(-(255))
6491 3640 8F4F sbci r24,hlo8(-(255))
6492 3642 9F4F sbci r25,hhi8(-(255))
6493 .L539:
6494 3644 672E mov r6,r23
6495 3646 782E mov r7,r24
6496 3648 892E mov r8,r25
6497 364a 9924 clr r9
6498 364c 87FC sbrc r8,7
6499 364e 9A94 dec r9
6500 3650 6092 0000 sts IntegralAccNick,r6
6501 3654 7092 0000 sts (IntegralAccNick)+1,r7
6502 3658 8092 0000 sts (IntegralAccNick)+2,r8
6503 365c 9092 0000 sts (IntegralAccNick)+3,r9
6504 3660 2091 0000 lds r18,IntegralAccRoll
6505 3664 3091 0000 lds r19,(IntegralAccRoll)+1
6506 3668 4091 0000 lds r20,(IntegralAccRoll)+2
6507 366c 5091 0000 lds r21,(IntegralAccRoll)+3
6508 3670 C601 movw r24,r12
6509 3672 B501 movw r22,r10
6510 3674 0E94 0000 call __mulsi3
6511 3678 97FF sbrs r25,7
6512 367a 00C0 rjmp .L540
6513 367c 6150 subi r22,lo8(-(255))
6514 367e 7F4F sbci r23,hi8(-(255))
6515 3680 8F4F sbci r24,hlo8(-(255))
6516 3682 9F4F sbci r25,hhi8(-(255))
6517 .L540:
6518 3684 272E mov r2,r23
6519 3686 382E mov r3,r24
6520 3688 492E mov r4,r25
6521 368a 5524 clr r5
6522 368c 47FC sbrc r4,7
6523 368e 5A94 dec r5
6524 3690 2092 0000 sts IntegralAccRoll,r2
6525 3694 3092 0000 sts (IntegralAccRoll)+1,r3
6526 3698 4092 0000 sts (IntegralAccRoll)+2,r4
6527 369c 5092 0000 sts (IntegralAccRoll)+3,r5
6528 36a0 8091 0000 lds r24,IntegralAccZ
6529 36a4 9091 0000 lds r25,(IntegralAccZ)+1
6530 36a8 A091 0000 lds r26,(IntegralAccZ)+2
6531 36ac B091 0000 lds r27,(IntegralAccZ)+3
6532 36b0 B7FF sbrs r27,7
6533 36b2 00C0 rjmp .L541
6534 36b4 8150 subi r24,lo8(-(255))
6535 36b6 9F4F sbci r25,hi8(-(255))
6536 36b8 AF4F sbci r26,hlo8(-(255))
6537 36ba BF4F sbci r27,hhi8(-(255))
6538 .L541:
6539 36bc 892F mov r24,r25
6540 36be 9A2F mov r25,r26
6541 36c0 AB2F mov r26,r27
6542 36c2 BB27 clr r27
6543 36c4 A7FD sbrc r26,7
6544 36c6 BA95 dec r27
6545 36c8 8093 0000 sts IntegralAccZ,r24
6546 36cc 9093 0000 sts (IntegralAccZ)+1,r25
6547 36d0 A093 0000 sts (IntegralAccZ)+2,r26
6548 36d4 B093 0000 sts (IntegralAccZ)+3,r27
6549 36d8 D801 movw r26,r16
6550 36da C701 movw r24,r14
6551 36dc 8619 sub r24,r6
6552 36de 9709 sbc r25,r7
6553 36e0 A809 sbc r26,r8
6554 36e2 B909 sbc r27,r9
6555 36e4 8093 0000 sts IntegralFehlerNick.3,r24
6556 36e8 9093 0000 sts (IntegralFehlerNick.3)+1,r25
6557 36ec A093 0000 sts (IntegralFehlerNick.3)+2,r26
6558 36f0 B093 0000 sts (IntegralFehlerNick.3)+3,r27
6559 36f4 2091 0000 lds r18,EE_Parameter+67
6560 36f8 E22E mov r14,r18
6561 36fa FF24 clr r15
6562 36fc 0027 clr r16
6563 36fe 1127 clr r17
6564 3700 BC01 movw r22,r24
6565 3702 CD01 movw r24,r26
6566 3704 A801 movw r20,r16
6567 3706 9701 movw r18,r14
6568 3708 0E94 0000 call __divmodsi4
6569 370c 5901 movw r10,r18
6570 370e 6A01 movw r12,r20
6571 3710 2093 0000 sts ausgleichNick.10,r18
6572 3714 3093 0000 sts (ausgleichNick.10)+1,r19
6573 3718 4093 0000 sts (ausgleichNick.10)+2,r20
6574 371c 5093 0000 sts (ausgleichNick.10)+3,r21
6575 3720 8989 ldd r24,Y+17
6576 3722 9A89 ldd r25,Y+18
6577 3724 AB89 ldd r26,Y+19
6578 3726 BC89 ldd r27,Y+20
6579 3728 8219 sub r24,r2
6580 372a 9309 sbc r25,r3
6581 372c A409 sbc r26,r4
6582 372e B509 sbc r27,r5
6583 3730 8093 0000 sts IntegralFehlerRoll.4,r24
6584 3734 9093 0000 sts (IntegralFehlerRoll.4)+1,r25
6585 3738 A093 0000 sts (IntegralFehlerRoll.4)+2,r26
6586 373c B093 0000 sts (IntegralFehlerRoll.4)+3,r27
6587 3740 BC01 movw r22,r24
6588 3742 CD01 movw r24,r26
6589 3744 A801 movw r20,r16
6590 3746 9701 movw r18,r14
6591 3748 0E94 0000 call __divmodsi4
6592 374c 2093 0000 sts ausgleichRoll.11,r18
6593 3750 3093 0000 sts (ausgleichRoll.11)+1,r19
6594 3754 4093 0000 sts (ausgleichRoll.11)+2,r20
6595 3758 5093 0000 sts (ausgleichRoll.11)+3,r21
6596 375c D601 movw r26,r12
6597 375e C501 movw r24,r10
6598 3760 D7FE sbrs r13,7
6599 3762 00C0 rjmp .L542
6600 3764 8150 subi r24,lo8(-(255))
6601 3766 9F4F sbci r25,hi8(-(255))
6602 3768 AF4F sbci r26,hlo8(-(255))
6603 376a BF4F sbci r27,hhi8(-(255))
6604 .L542:
6605 376c 892F mov r24,r25
6606 376e 9A2F mov r25,r26
6607 3770 AB2F mov r26,r27
6608 3772 BB27 clr r27
6609 3774 A7FD sbrc r26,7
6610 3776 BA95 dec r27
6611 3778 9093 0000 sts (LageKorrekturNick)+1,r25
6612 377c 8093 0000 sts LageKorrekturNick,r24
6613 3780 57FF sbrs r21,7
6614 3782 00C0 rjmp .L543
6615 3784 2150 subi r18,lo8(-(255))
6616 3786 3F4F sbci r19,hi8(-(255))
6617 3788 4F4F sbci r20,hlo8(-(255))
6618 378a 5F4F sbci r21,hhi8(-(255))
6619 .L543:
6620 378c BB27 clr r27
6621 378e 57FD sbrc r21,7
6622 3790 BA95 dec r27
6623 3792 A52F mov r26,r21
6624 3794 942F mov r25,r20
6625 3796 832F mov r24,r19
6626 3798 9093 0000 sts (LageKorrekturRoll)+1,r25
6627 379c 8093 0000 sts LageKorrekturRoll,r24
6628 37a0 8091 0000 lds r24,MaxStickNick
6629 37a4 9091 0000 lds r25,(MaxStickNick)+1
6630 37a8 8134 cpi r24,65
6631 37aa 9105 cpc r25,__zero_reg__
6632 37ac 04F4 brge .L545
6633 37ae 8091 0000 lds r24,MaxStickRoll
6634 37b2 9091 0000 lds r25,(MaxStickRoll)+1
6635 37b6 8134 cpi r24,65
6636 37b8 9105 cpc r25,__zero_reg__
6637 37ba 04F4 brge .L545
6638 37bc 8091 0000 lds r24,EE_Parameter+4
6639 37c0 E82F mov r30,r24
6640 37c2 FF27 clr r31
6641 37c4 EE0F add r30,r30
6642 37c6 FF1F adc r31,r31
6643 37c8 E050 subi r30,lo8(-(PPM_in))
6644 37ca F040 sbci r31,hi8(-(PPM_in))
6645 37cc 8081 ld r24,Z
6646 37ce 9181 ldd r25,Z+1
6647 37d0 0190 ld __tmp_reg__,Z+
6648 37d2 F081 ld r31,Z
6649 37d4 E02D mov r30,__tmp_reg__
6650 37d6 F7FF sbrs r31,7
6651 37d8 00C0 rjmp .L546
6652 37da F095 com r31
6653 37dc E195 neg r30
6654 37de FF4F sbci r31,lo8(-1)
6655 .L546:
6656 37e0 7A97 sbiw r30,26
6657 37e2 04F0 brlt .L544
6658 .L545:
6659 37e4 8091 0000 lds r24,FromNaviCtrl_Value
6660 37e8 8F3F cpi r24,lo8(-1)
6661 37ea 01F4 brne .L544
6662 37ec 8091 0000 lds r24,LageKorrekturNick
6663 37f0 9091 0000 lds r25,(LageKorrekturNick)+1
6664 37f4 97FD sbrc r25,7
6665 37f6 0196 adiw r24,1
6666 .L547:
6667 37f8 9595 asr r25
6668 37fa 8795 ror r24
6669 37fc 9093 0000 sts (LageKorrekturNick)+1,r25
6670 3800 8093 0000 sts LageKorrekturNick,r24
6671 3804 8091 0000 lds r24,LageKorrekturRoll
6672 3808 9091 0000 lds r25,(LageKorrekturRoll)+1
6673 380c 97FD sbrc r25,7
6674 380e 0196 adiw r24,1
6675 .L548:
6676 3810 9595 asr r25
6677 3812 8795 ror r24
6678 3814 9093 0000 sts (LageKorrekturRoll)+1,r25
6679 3818 8093 0000 sts LageKorrekturRoll,r24
6680 .L544:
6681 381c 8091 0000 lds r24,MittelIntegralNick2
6682 3820 9091 0000 lds r25,(MittelIntegralNick2)+1
6683 3824 A091 0000 lds r26,(MittelIntegralNick2)+2
6684 3828 B091 0000 lds r27,(MittelIntegralNick2)+3
6685 382c B7FF sbrs r27,7
6686 382e 00C0 rjmp .L549
6687 3830 8150 subi r24,lo8(-(255))
6688 3832 9F4F sbci r25,hi8(-(255))
6689 3834 AF4F sbci r26,hlo8(-(255))
6690 3836 BF4F sbci r27,hhi8(-(255))
6691 .L549:
6692 3838 892F mov r24,r25
6693 383a 9A2F mov r25,r26
6694 383c AB2F mov r26,r27
6695 383e BB27 clr r27
6696 3840 A7FD sbrc r26,7
6697 3842 BA95 dec r27
6698 3844 8093 0000 sts MittelIntegralNick2,r24
6699 3848 9093 0000 sts (MittelIntegralNick2)+1,r25
6700 384c A093 0000 sts (MittelIntegralNick2)+2,r26
6701 3850 B093 0000 sts (MittelIntegralNick2)+3,r27
6702 3854 8091 0000 lds r24,MittelIntegralRoll2
6703 3858 9091 0000 lds r25,(MittelIntegralRoll2)+1
6704 385c A091 0000 lds r26,(MittelIntegralRoll2)+2
6705 3860 B091 0000 lds r27,(MittelIntegralRoll2)+3
6706 3864 B7FF sbrs r27,7
6707 3866 00C0 rjmp .L550
6708 3868 8150 subi r24,lo8(-(255))
6709 386a 9F4F sbci r25,hi8(-(255))
6710 386c AF4F sbci r26,hlo8(-(255))
6711 386e BF4F sbci r27,hhi8(-(255))
6712 .L550:
6713 3870 892F mov r24,r25
6714 3872 9A2F mov r25,r26
6715 3874 AB2F mov r26,r27
6716 3876 BB27 clr r27
6717 3878 A7FD sbrc r26,7
6718 387a BA95 dec r27
6719 387c 8093 0000 sts MittelIntegralRoll2,r24
6720 3880 9093 0000 sts (MittelIntegralRoll2)+1,r25
6721 3884 A093 0000 sts (MittelIntegralRoll2)+2,r26
6722 3888 B093 0000 sts (MittelIntegralRoll2)+3,r27
6723 388c 8091 0000 lds r24,IntegralNick
6724 3890 9091 0000 lds r25,(IntegralNick)+1
6725 3894 A091 0000 lds r26,(IntegralNick)+2
6726 3898 B091 0000 lds r27,(IntegralNick)+3
6727 389c 2F81 ldd r18,Y+7
6728 389e 3885 ldd r19,Y+8
6729 38a0 4985 ldd r20,Y+9
6730 38a2 5A85 ldd r21,Y+10
6731 38a4 281B sub r18,r24
6732 38a6 390B sbc r19,r25
6733 38a8 4A0B sbc r20,r26
6734 38aa 5B0B sbc r21,r27
6735 38ac 2093 0000 sts tmp_long.1,r18
6736 38b0 3093 0000 sts (tmp_long.1)+1,r19
6737 38b4 4093 0000 sts (tmp_long.1)+2,r20
6738 38b8 5093 0000 sts (tmp_long.1)+3,r21
6739 38bc 8091 0000 lds r24,IntegralRoll
6740 38c0 9091 0000 lds r25,(IntegralRoll)+1
6741 38c4 A091 0000 lds r26,(IntegralRoll)+2
6742 38c8 B091 0000 lds r27,(IntegralRoll)+3
6743 38cc EB84 ldd r14,Y+11
6744 38ce FC84 ldd r15,Y+12
6745 38d0 0D85 ldd r16,Y+13
6746 38d2 1E85 ldd r17,Y+14
6747 38d4 E81A sub r14,r24
6748 38d6 F90A sbc r15,r25
6749 38d8 0A0B sbc r16,r26
6750 38da 1B0B sbc r17,r27
6751 38dc E092 0000 sts tmp_long2.2,r14
6752 38e0 F092 0000 sts (tmp_long2.2)+1,r15
6753 38e4 0093 0000 sts (tmp_long2.2)+2,r16
6754 38e8 1093 0000 sts (tmp_long2.2)+3,r17
6755 38ec 2093 0000 sts IntegralFehlerNick.3,r18
6756 38f0 3093 0000 sts (IntegralFehlerNick.3)+1,r19
6757 38f4 4093 0000 sts (IntegralFehlerNick.3)+2,r20
6758 38f8 5093 0000 sts (IntegralFehlerNick.3)+3,r21
6759 38fc E092 0000 sts IntegralFehlerRoll.4,r14
6760 3900 F092 0000 sts (IntegralFehlerRoll.4)+1,r15
6761 3904 0093 0000 sts (IntegralFehlerRoll.4)+2,r16
6762 3908 1093 0000 sts (IntegralFehlerRoll.4)+3,r17
6763 390c 8091 0000 lds r24,Mess_IntegralNick2
6764 3910 9091 0000 lds r25,(Mess_IntegralNick2)+1
6765 3914 A091 0000 lds r26,(Mess_IntegralNick2)+2
6766 3918 B091 0000 lds r27,(Mess_IntegralNick2)+3
6767 391c 821B sub r24,r18
6768 391e 930B sbc r25,r19
6769 3920 A40B sbc r26,r20
6770 3922 B50B sbc r27,r21
6771 3924 8093 0000 sts Mess_IntegralNick2,r24
6772 3928 9093 0000 sts (Mess_IntegralNick2)+1,r25
6773 392c A093 0000 sts (Mess_IntegralNick2)+2,r26
6774 3930 B093 0000 sts (Mess_IntegralNick2)+3,r27
6775 3934 8091 0000 lds r24,Mess_IntegralRoll2
6776 3938 9091 0000 lds r25,(Mess_IntegralRoll2)+1
6777 393c A091 0000 lds r26,(Mess_IntegralRoll2)+2
6778 3940 B091 0000 lds r27,(Mess_IntegralRoll2)+3
6779 3944 8E19 sub r24,r14
6780 3946 9F09 sbc r25,r15
6781 3948 A00B sbc r26,r16
6782 394a B10B sbc r27,r17
6783 394c 8093 0000 sts Mess_IntegralRoll2,r24
6784 3950 9093 0000 sts (Mess_IntegralRoll2)+1,r25
6785 3954 A093 0000 sts (Mess_IntegralRoll2)+2,r26
6786 3958 B093 0000 sts (Mess_IntegralRoll2)+3,r27
6787 395c 8889 ldd r24,Y+16
6788 395e 8823 tst r24
6789 3960 01F0 breq .L551
6790 3962 2091 0000 lds r18,GierGyroFehler
6791 3966 3091 0000 lds r19,(GierGyroFehler)+1
6792 396a 2138 cpi r18,129
6793 396c 3105 cpc r19,__zero_reg__
6794 396e 04F0 brlt .L552
6795 3970 8091 0000 lds r24,AdNeutralGier
6796 3974 9091 0000 lds r25,(AdNeutralGier)+1
6797 3978 0196 adiw r24,1
6798 397a 9093 0000 sts (AdNeutralGier)+1,r25
6799 397e 8093 0000 sts AdNeutralGier,r24
6800 .L552:
6801 3982 2058 subi r18,lo8(-128)
6802 3984 3F4F sbci r19,hi8(-128)
6803 3986 04F4 brge .L551
6804 3988 8091 0000 lds r24,AdNeutralGier
6805 398c 9091 0000 lds r25,(AdNeutralGier)+1
6806 3990 0197 sbiw r24,1
6807 3992 9093 0000 sts (AdNeutralGier)+1,r25
6808 3996 8093 0000 sts AdNeutralGier,r24
6809 .L551:
6810 399a 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
6811 399e 1092 0000 sts GierGyroFehler,__zero_reg__
6812 39a2 81E0 ldi r24,lo8(1)
6813 39a4 90E0 ldi r25,hi8(1)
6814 39a6 9093 0000 sts (cnt.14)+1,r25
6815 39aa 8093 0000 sts cnt.14,r24
6816 39ae E090 0000 lds r14,IntegralFehlerNick.3
6817 39b2 F090 0000 lds r15,(IntegralFehlerNick.3)+1
6818 39b6 0091 0000 lds r16,(IntegralFehlerNick.3)+2
6819 39ba 1091 0000 lds r17,(IntegralFehlerNick.3)+3
6820 39be D801 movw r26,r16
6821 39c0 C701 movw r24,r14
6822 39c2 17FF sbrs r17,7
6823 39c4 00C0 rjmp .L555
6824 39c6 8827 clr r24
6825 39c8 9927 clr r25
6826 39ca DC01 movw r26,r24
6827 39cc 8E19 sub r24,r14
6828 39ce 9F09 sbc r25,r15
6829 39d0 A00B sbc r26,r16
6830 39d2 B10B sbc r27,r17
6831 .L555:
6832 39d4 8150 subi r24,lo8(513)
6833 39d6 9240 sbci r25,hi8(513)
6834 39d8 A040 sbci r26,hlo8(513)
6835 39da B040 sbci r27,hhi8(513)
6836 39dc 04F0 brlt .L554
6837 39de 84E0 ldi r24,lo8(4)
6838 39e0 90E0 ldi r25,hi8(4)
6839 39e2 9093 0000 sts (cnt.14)+1,r25
6840 39e6 8093 0000 sts cnt.14,r24
6841 .L554:
6842 39ea 8091 0000 lds r24,MittelIntegralNick_Alt.19
6843 39ee 9091 0000 lds r25,(MittelIntegralNick_Alt.19)+1
6844 39f2 A091 0000 lds r26,(MittelIntegralNick_Alt.19)+2
6845 39f6 B091 0000 lds r27,(MittelIntegralNick_Alt.19)+3
6846 39fa 2091 0000 lds r18,MittelIntegralNick
6847 39fe 3091 0000 lds r19,(MittelIntegralNick)+1
6848 3a02 4091 0000 lds r20,(MittelIntegralNick)+2
6849 3a06 5091 0000 lds r21,(MittelIntegralNick)+3
6850 3a0a 821B sub r24,r18
6851 3a0c 930B sbc r25,r19
6852 3a0e A40B sbc r26,r20
6853 3a10 B50B sbc r27,r21
6854 3a12 815E subi r24,lo8(-(19999))
6855 3a14 914B sbci r25,hi8(-(19999))
6856 3a16 AF4F sbci r26,hlo8(-(19999))
6857 3a18 BF4F sbci r27,hhi8(-(19999))
6858 3a1a 8F53 subi r24,lo8(39999)
6859 3a1c 9C49 sbci r25,hi8(39999)
6860 3a1e A040 sbci r26,hlo8(39999)
6861 3a20 B040 sbci r27,hhi8(39999)
6862 3a22 00F0 brlo .L557
6863 3a24 8091 0000 lds r24,FromNaviCtrl_Value+1
6864 3a28 8931 cpi r24,lo8(25)
6865 3a2a 04F4 brge .+2
6866 3a2c 00C0 rjmp .L556
6867 .L557:
6868 3a2e 21E0 ldi r18,lo8(4097)
6869 3a30 E216 cp r14,r18
6870 3a32 20E1 ldi r18,hi8(4097)
6871 3a34 F206 cpc r15,r18
6872 3a36 20E0 ldi r18,hlo8(4097)
6873 3a38 0207 cpc r16,r18
6874 3a3a 20E0 ldi r18,hhi8(4097)
6875 3a3c 1207 cpc r17,r18
6876 3a3e 04F4 brge .+2
6877 3a40 00C0 rjmp .L558
6878 3a42 8091 0000 lds r24,last_n_p.15
6879 3a46 8823 tst r24
6880 3a48 01F4 brne .+2
6881 3a4a 00C0 rjmp .L559
6882 3a4c D801 movw r26,r16
6883 3a4e C701 movw r24,r14
6884 3a50 17FF sbrs r17,7
6885 3a52 00C0 rjmp .L560
6886 3a54 8827 clr r24
6887 3a56 9927 clr r25
6888 3a58 DC01 movw r26,r24
6889 3a5a 8E19 sub r24,r14
6890 3a5c 9F09 sbc r25,r15
6891 3a5e A00B sbc r26,r16
6892 3a60 B10B sbc r27,r17
6893 .L560:
6894 3a62 9C01 movw r18,r24
6895 3a64 AD01 movw r20,r26
6896 3a66 B7FF sbrs r27,7
6897 3a68 00C0 rjmp .L561
6898 3a6a 2150 subi r18,lo8(-(511))
6899 3a6c 3E4F sbci r19,hi8(-(511))
6900 3a6e 4F4F sbci r20,hlo8(-(511))
6901 3a70 5F4F sbci r21,hhi8(-(511))
6902 .L561:
6903 3a72 F9E0 ldi r31,9
6904 3a74 5595 1: asr r21
6905 3a76 4795 ror r20
6906 3a78 3795 ror r19
6907 3a7a 2795 ror r18
6908 3a7c FA95 dec r31
6909 3a7e 01F4 brne 1b
6910 3a80 8091 0000 lds r24,cnt.14
6911 3a84 9091 0000 lds r25,(cnt.14)+1
6912 3a88 820F add r24,r18
6913 3a8a 931F adc r25,r19
6914 3a8c 9093 0000 sts (cnt.14)+1,r25
6915 3a90 8093 0000 sts cnt.14,r24
6916 3a94 D801 movw r26,r16
6917 3a96 C701 movw r24,r14
6918 3a98 17FF sbrs r17,7
6919 3a9a 00C0 rjmp .L562
6920 3a9c 0796 adiw r24,7
6921 3a9e A11D adc r26,__zero_reg__
6922 3aa0 B11D adc r27,__zero_reg__
6923 .L562:
6924 3aa2 E3E0 ldi r30,3
6925 3aa4 B595 1: asr r27
6926 3aa6 A795 ror r26
6927 3aa8 9795 ror r25
6928 3aaa 8795 ror r24
6929 3aac EA95 dec r30
6930 3aae 01F4 brne 1b
6931 3ab0 8093 0000 sts ausgleichNick.10,r24
6932 3ab4 9093 0000 sts (ausgleichNick.10)+1,r25
6933 3ab8 A093 0000 sts (ausgleichNick.10)+2,r26
6934 3abc B093 0000 sts (ausgleichNick.10)+3,r27
6935 3ac0 8958 subi r24,lo8(5001)
6936 3ac2 9341 sbci r25,hi8(5001)
6937 3ac4 A040 sbci r26,hlo8(5001)
6938 3ac6 B040 sbci r27,hhi8(5001)
6939 3ac8 04F0 brlt .L563
6940 3aca 88E8 ldi r24,lo8(5000)
6941 3acc 93E1 ldi r25,hi8(5000)
6942 3ace A0E0 ldi r26,hlo8(5000)
6943 3ad0 B0E0 ldi r27,hhi8(5000)
6944 3ad2 8093 0000 sts ausgleichNick.10,r24
6945 3ad6 9093 0000 sts (ausgleichNick.10)+1,r25
6946 3ada A093 0000 sts (ausgleichNick.10)+2,r26
6947 3ade B093 0000 sts (ausgleichNick.10)+3,r27
6948 .L563:
6949 3ae2 2091 0000 lds r18,ausgleichNick.10
6950 3ae6 3091 0000 lds r19,(ausgleichNick.10)+1
6951 3aea 4091 0000 lds r20,(ausgleichNick.10)+2
6952 3aee 5091 0000 lds r21,(ausgleichNick.10)+3
6953 3af2 57FF sbrs r21,7
6954 3af4 00C0 rjmp .L564
6955 3af6 2150 subi r18,lo8(-(255))
6956 3af8 3F4F sbci r19,hi8(-(255))
6957 3afa 4F4F sbci r20,hlo8(-(255))
6958 3afc 5F4F sbci r21,hhi8(-(255))
6959 .L564:
6960 3afe 232F mov r18,r19
6961 3b00 342F mov r19,r20
6962 3b02 452F mov r20,r21
6963 3b04 5527 clr r21
6964 3b06 47FD sbrc r20,7
6965 3b08 5A95 dec r21
6966 3b0a 8091 0000 lds r24,LageKorrekturNick
6967 3b0e 9091 0000 lds r25,(LageKorrekturNick)+1
6968 3b12 820F add r24,r18
6969 3b14 931F adc r25,r19
6970 3b16 9093 0000 sts (LageKorrekturNick)+1,r25
6971 3b1a 8093 0000 sts LageKorrekturNick,r24
6972 3b1e 00C0 rjmp .L566
6973 .L559:
6974 3b20 81E0 ldi r24,lo8(1)
6975 3b22 8093 0000 sts last_n_p.15,r24
6976 3b26 00C0 rjmp .L566
6977 .L558:
6978 3b28 1092 0000 sts last_n_p.15,__zero_reg__
6979 .L566:
6980 3b2c 40E0 ldi r20,lo8(-4096)
6981 3b2e E416 cp r14,r20
6982 3b30 40EF ldi r20,hi8(-4096)
6983 3b32 F406 cpc r15,r20
6984 3b34 4FEF ldi r20,hlo8(-4096)
6985 3b36 0407 cpc r16,r20
6986 3b38 4FEF ldi r20,hhi8(-4096)
6987 3b3a 1407 cpc r17,r20
6988 3b3c 04F0 brlt .+2
6989 3b3e 00C0 rjmp .L567
6990 3b40 8091 0000 lds r24,last_n_n.16
6991 3b44 8823 tst r24
6992 3b46 01F4 brne .+2
6993 3b48 00C0 rjmp .L568
6994 3b4a D801 movw r26,r16
6995 3b4c C701 movw r24,r14
6996 3b4e 17FF sbrs r17,7
6997 3b50 00C0 rjmp .L569
6998 3b52 8827 clr r24
6999 3b54 9927 clr r25
7000 3b56 DC01 movw r26,r24
7001 3b58 8E19 sub r24,r14
7002 3b5a 9F09 sbc r25,r15
7003 3b5c A00B sbc r26,r16
7004 3b5e B10B sbc r27,r17
7005 .L569:
7006 3b60 9C01 movw r18,r24
7007 3b62 AD01 movw r20,r26
7008 3b64 B7FF sbrs r27,7
7009 3b66 00C0 rjmp .L570
7010 3b68 2150 subi r18,lo8(-(511))
7011 3b6a 3E4F sbci r19,hi8(-(511))
7012 3b6c 4F4F sbci r20,hlo8(-(511))
7013 3b6e 5F4F sbci r21,hhi8(-(511))
7014 .L570:
7015 3b70 69E0 ldi r22,9
7016 3b72 5595 1: asr r21
7017 3b74 4795 ror r20
7018 3b76 3795 ror r19
7019 3b78 2795 ror r18
7020 3b7a 6A95 dec r22
7021 3b7c 01F4 brne 1b
7022 3b7e 8091 0000 lds r24,cnt.14
7023 3b82 9091 0000 lds r25,(cnt.14)+1
7024 3b86 820F add r24,r18
7025 3b88 931F adc r25,r19
7026 3b8a 9093 0000 sts (cnt.14)+1,r25
7027 3b8e 8093 0000 sts cnt.14,r24
7028 3b92 D801 movw r26,r16
7029 3b94 C701 movw r24,r14
7030 3b96 17FF sbrs r17,7
7031 3b98 00C0 rjmp .L571
7032 3b9a 0796 adiw r24,7
7033 3b9c A11D adc r26,__zero_reg__
7034 3b9e B11D adc r27,__zero_reg__
7035 .L571:
7036 3ba0 23E0 ldi r18,3
7037 3ba2 B595 1: asr r27
7038 3ba4 A795 ror r26
7039 3ba6 9795 ror r25
7040 3ba8 8795 ror r24
7041 3baa 2A95 dec r18
7042 3bac 01F4 brne 1b
7043 3bae 8093 0000 sts ausgleichNick.10,r24
7044 3bb2 9093 0000 sts (ausgleichNick.10)+1,r25
7045 3bb6 A093 0000 sts (ausgleichNick.10)+2,r26
7046 3bba B093 0000 sts (ausgleichNick.10)+3,r27
7047 3bbe 8857 subi r24,lo8(-5000)
7048 3bc0 9C4E sbci r25,hi8(-5000)
7049 3bc2 AF4F sbci r26,hlo8(-5000)
7050 3bc4 BF4F sbci r27,hhi8(-5000)
7051 3bc6 04F4 brge .L572
7052 3bc8 88E7 ldi r24,lo8(-5000)
7053 3bca 9CEE ldi r25,hi8(-5000)
7054 3bcc AFEF ldi r26,hlo8(-5000)
7055 3bce BFEF ldi r27,hhi8(-5000)
7056 3bd0 8093 0000 sts ausgleichNick.10,r24
7057 3bd4 9093 0000 sts (ausgleichNick.10)+1,r25
7058 3bd8 A093 0000 sts (ausgleichNick.10)+2,r26
7059 3bdc B093 0000 sts (ausgleichNick.10)+3,r27
7060 .L572:
7061 3be0 2091 0000 lds r18,ausgleichNick.10
7062 3be4 3091 0000 lds r19,(ausgleichNick.10)+1
7063 3be8 4091 0000 lds r20,(ausgleichNick.10)+2
7064 3bec 5091 0000 lds r21,(ausgleichNick.10)+3
7065 3bf0 57FF sbrs r21,7
7066 3bf2 00C0 rjmp .L573
7067 3bf4 2150 subi r18,lo8(-(255))
7068 3bf6 3F4F sbci r19,hi8(-(255))
7069 3bf8 4F4F sbci r20,hlo8(-(255))
7070 3bfa 5F4F sbci r21,hhi8(-(255))
7071 .L573:
7072 3bfc 232F mov r18,r19
7073 3bfe 342F mov r19,r20
7074 3c00 452F mov r20,r21
7075 3c02 5527 clr r21
7076 3c04 47FD sbrc r20,7
7077 3c06 5A95 dec r21
7078 3c08 8091 0000 lds r24,LageKorrekturNick
7079 3c0c 9091 0000 lds r25,(LageKorrekturNick)+1
7080 3c10 820F add r24,r18
7081 3c12 931F adc r25,r19
7082 3c14 9093 0000 sts (LageKorrekturNick)+1,r25
7083 3c18 8093 0000 sts LageKorrekturNick,r24
7084 3c1c 00C0 rjmp .L576
7085 .L568:
7086 3c1e 81E0 ldi r24,lo8(1)
7087 3c20 8093 0000 sts last_n_n.16,r24
7088 3c24 00C0 rjmp .L576
7089 .L567:
7090 3c26 1092 0000 sts last_n_n.16,__zero_reg__
7091 3c2a 00C0 rjmp .L576
7092 .L556:
7093 3c2c 1092 0000 sts (cnt.14)+1,__zero_reg__
7094 3c30 1092 0000 sts cnt.14,__zero_reg__
7095 3c34 84E6 ldi r24,lo8(100)
7096 3c36 90E0 ldi r25,hi8(100)
7097 3c38 9093 0000 sts (KompassSignalSchlecht)+1,r25
7098 3c3c 8093 0000 sts KompassSignalSchlecht,r24
7099 .L576:
7100 3c40 6889 ldd r22,Y+16
7101 3c42 262F mov r18,r22
7102 3c44 3327 clr r19
7103 3c46 8091 0000 lds r24,cnt.14
7104 3c4a 9091 0000 lds r25,(cnt.14)+1
7105 3c4e 2817 cp r18,r24
7106 3c50 3907 cpc r19,r25
7107 3c52 04F4 brge .L577
7108 3c54 3093 0000 sts (cnt.14)+1,r19
7109 3c58 2093 0000 sts cnt.14,r18
7110 .L577:
7111 3c5c 1091 0000 lds r17,FromNaviCtrl_Value+1
7112 3c60 1123 tst r17
7113 3c62 01F0 breq .L578
7114 3c64 212F mov r18,r17
7115 3c66 3327 clr r19
7116 3c68 27FD sbrc r18,7
7117 3c6a 3095 com r19
7118 3c6c 8091 0000 lds r24,cnt.14
7119 3c70 9091 0000 lds r25,(cnt.14)+1
7120 3c74 2817 cp r18,r24
7121 3c76 3907 cpc r19,r25
7122 3c78 04F4 brge .L578
7123 3c7a 3093 0000 sts (cnt.14)+1,r19
7124 3c7e 2093 0000 sts cnt.14,r18
7125 .L578:
7126 3c82 4091 0000 lds r20,IntegralFehlerNick.3
7127 3c86 5091 0000 lds r21,(IntegralFehlerNick.3)+1
7128 3c8a 6091 0000 lds r22,(IntegralFehlerNick.3)+2
7129 3c8e 7091 0000 lds r23,(IntegralFehlerNick.3)+3
7130 3c92 4138 cpi r20,lo8(129)
7131 3c94 5105 cpc r21,__zero_reg__
7132 3c96 6105 cpc r22,__zero_reg__
7133 3c98 7105 cpc r23,__zero_reg__
7134 3c9a 04F0 brlt .L580
7135 3c9c 8091 0000 lds r24,AdNeutralNick
7136 3ca0 9091 0000 lds r25,(AdNeutralNick)+1
7137 3ca4 2091 0000 lds r18,cnt.14
7138 3ca8 3091 0000 lds r19,(cnt.14)+1
7139 3cac 820F add r24,r18
7140 3cae 931F adc r25,r19
7141 3cb0 9093 0000 sts (AdNeutralNick)+1,r25
7142 3cb4 8093 0000 sts AdNeutralNick,r24
7143 .L580:
7144 3cb8 4058 subi r20,lo8(-128)
7145 3cba 5F4F sbci r21,hi8(-128)
7146 3cbc 6F4F sbci r22,hlo8(-128)
7147 3cbe 7F4F sbci r23,hhi8(-128)
7148 3cc0 04F4 brge .L581
7149 3cc2 8091 0000 lds r24,AdNeutralNick
7150 3cc6 9091 0000 lds r25,(AdNeutralNick)+1
7151 3cca 2091 0000 lds r18,cnt.14
7152 3cce 3091 0000 lds r19,(cnt.14)+1
7153 3cd2 821B sub r24,r18
7154 3cd4 930B sbc r25,r19
7155 3cd6 9093 0000 sts (AdNeutralNick)+1,r25
7156 3cda 8093 0000 sts AdNeutralNick,r24
7157 .L581:
7158 3cde 81E0 ldi r24,lo8(1)
7159 3ce0 90E0 ldi r25,hi8(1)
7160 3ce2 9093 0000 sts (cnt.14)+1,r25
7161 3ce6 8093 0000 sts cnt.14,r24
7162 3cea C090 0000 lds r12,IntegralFehlerRoll.4
7163 3cee D090 0000 lds r13,(IntegralFehlerRoll.4)+1
7164 3cf2 E090 0000 lds r14,(IntegralFehlerRoll.4)+2
7165 3cf6 F090 0000 lds r15,(IntegralFehlerRoll.4)+3
7166 3cfa D701 movw r26,r14
7167 3cfc C601 movw r24,r12
7168 3cfe F7FE sbrs r15,7
7169 3d00 00C0 rjmp .L583
7170 3d02 8827 clr r24
7171 3d04 9927 clr r25
7172 3d06 DC01 movw r26,r24
7173 3d08 8C19 sub r24,r12
7174 3d0a 9D09 sbc r25,r13
7175 3d0c AE09 sbc r26,r14
7176 3d0e BF09 sbc r27,r15
7177 .L583:
7178 3d10 8150 subi r24,lo8(513)
7179 3d12 9240 sbci r25,hi8(513)
7180 3d14 A040 sbci r26,hlo8(513)
7181 3d16 B040 sbci r27,hhi8(513)
7182 3d18 04F0 brlt .L582
7183 3d1a 84E0 ldi r24,lo8(4)
7184 3d1c 90E0 ldi r25,hi8(4)
7185 3d1e 9093 0000 sts (cnt.14)+1,r25
7186 3d22 8093 0000 sts cnt.14,r24
7187 .L582:
7188 3d26 8091 0000 lds r24,MittelIntegralRoll_Alt.20
7189 3d2a 9091 0000 lds r25,(MittelIntegralRoll_Alt.20)+1
7190 3d2e A091 0000 lds r26,(MittelIntegralRoll_Alt.20)+2
7191 3d32 B091 0000 lds r27,(MittelIntegralRoll_Alt.20)+3
7192 3d36 2091 0000 lds r18,MittelIntegralRoll
7193 3d3a 3091 0000 lds r19,(MittelIntegralRoll)+1
7194 3d3e 4091 0000 lds r20,(MittelIntegralRoll)+2
7195 3d42 5091 0000 lds r21,(MittelIntegralRoll)+3
7196 3d46 821B sub r24,r18
7197 3d48 930B sbc r25,r19
7198 3d4a A40B sbc r26,r20
7199 3d4c B50B sbc r27,r21
7200 3d4e 815E subi r24,lo8(-(19999))
7201 3d50 914B sbci r25,hi8(-(19999))
7202 3d52 AF4F sbci r26,hlo8(-(19999))
7203 3d54 BF4F sbci r27,hhi8(-(19999))
7204 3d56 8F53 subi r24,lo8(39999)
7205 3d58 9C49 sbci r25,hi8(39999)
7206 3d5a A040 sbci r26,hlo8(39999)
7207 3d5c B040 sbci r27,hhi8(39999)
7208 3d5e 00F0 brlo .L585
7209 3d60 1931 cpi r17,lo8(25)
7210 3d62 04F4 brge .+2
7211 3d64 00C0 rjmp .L584
7212 .L585:
7213 3d66 01E0 ldi r16,lo8(4097)
7214 3d68 C016 cp r12,r16
7215 3d6a 00E1 ldi r16,hi8(4097)
7216 3d6c D006 cpc r13,r16
7217 3d6e 00E0 ldi r16,hlo8(4097)
7218 3d70 E006 cpc r14,r16
7219 3d72 00E0 ldi r16,hhi8(4097)
7220 3d74 F006 cpc r15,r16
7221 3d76 04F4 brge .+2
7222 3d78 00C0 rjmp .L586
7223 3d7a 8091 0000 lds r24,last_r_p.17
7224 3d7e 8823 tst r24
7225 3d80 01F4 brne .+2
7226 3d82 00C0 rjmp .L587
7227 3d84 D701 movw r26,r14
7228 3d86 C601 movw r24,r12
7229 3d88 F7FE sbrs r15,7
7230 3d8a 00C0 rjmp .L588
7231 3d8c 8827 clr r24
7232 3d8e 9927 clr r25
7233 3d90 DC01 movw r26,r24
7234 3d92 8C19 sub r24,r12
7235 3d94 9D09 sbc r25,r13
7236 3d96 AE09 sbc r26,r14
7237 3d98 BF09 sbc r27,r15
7238 .L588:
7239 3d9a 9C01 movw r18,r24
7240 3d9c AD01 movw r20,r26
7241 3d9e B7FF sbrs r27,7
7242 3da0 00C0 rjmp .L589
7243 3da2 2150 subi r18,lo8(-(511))
7244 3da4 3E4F sbci r19,hi8(-(511))
7245 3da6 4F4F sbci r20,hlo8(-(511))
7246 3da8 5F4F sbci r21,hhi8(-(511))
7247 .L589:
7248 3daa 09E0 ldi r16,9
7249 3dac 5595 1: asr r21
7250 3dae 4795 ror r20
7251 3db0 3795 ror r19
7252 3db2 2795 ror r18
7253 3db4 0A95 dec r16
7254 3db6 01F4 brne 1b
7255 3db8 8091 0000 lds r24,cnt.14
7256 3dbc 9091 0000 lds r25,(cnt.14)+1
7257 3dc0 820F add r24,r18
7258 3dc2 931F adc r25,r19
7259 3dc4 9093 0000 sts (cnt.14)+1,r25
7260 3dc8 8093 0000 sts cnt.14,r24
7261 3dcc D701 movw r26,r14
7262 3dce C601 movw r24,r12
7263 3dd0 F7FE sbrs r15,7
7264 3dd2 00C0 rjmp .L590
7265 3dd4 0796 adiw r24,7
7266 3dd6 A11D adc r26,__zero_reg__
7267 3dd8 B11D adc r27,__zero_reg__
7268 .L590:
7269 3dda 13E0 ldi r17,3
7270 3ddc B595 1: asr r27
7271 3dde A795 ror r26
7272 3de0 9795 ror r25
7273 3de2 8795 ror r24
7274 3de4 1A95 dec r17
7275 3de6 01F4 brne 1b
7276 3de8 8093 0000 sts ausgleichRoll.11,r24
7277 3dec 9093 0000 sts (ausgleichRoll.11)+1,r25
7278 3df0 A093 0000 sts (ausgleichRoll.11)+2,r26
7279 3df4 B093 0000 sts (ausgleichRoll.11)+3,r27
7280 3df8 8958 subi r24,lo8(5001)
7281 3dfa 9341 sbci r25,hi8(5001)
7282 3dfc A040 sbci r26,hlo8(5001)
7283 3dfe B040 sbci r27,hhi8(5001)
7284 3e00 04F0 brlt .L591
7285 3e02 88E8 ldi r24,lo8(5000)
7286 3e04 93E1 ldi r25,hi8(5000)
7287 3e06 A0E0 ldi r26,hlo8(5000)
7288 3e08 B0E0 ldi r27,hhi8(5000)
7289 3e0a 8093 0000 sts ausgleichRoll.11,r24
7290 3e0e 9093 0000 sts (ausgleichRoll.11)+1,r25
7291 3e12 A093 0000 sts (ausgleichRoll.11)+2,r26
7292 3e16 B093 0000 sts (ausgleichRoll.11)+3,r27
7293 .L591:
7294 3e1a 2091 0000 lds r18,ausgleichRoll.11
7295 3e1e 3091 0000 lds r19,(ausgleichRoll.11)+1
7296 3e22 4091 0000 lds r20,(ausgleichRoll.11)+2
7297 3e26 5091 0000 lds r21,(ausgleichRoll.11)+3
7298 3e2a 57FF sbrs r21,7
7299 3e2c 00C0 rjmp .L592
7300 3e2e 2150 subi r18,lo8(-(255))
7301 3e30 3F4F sbci r19,hi8(-(255))
7302 3e32 4F4F sbci r20,hlo8(-(255))
7303 3e34 5F4F sbci r21,hhi8(-(255))
7304 .L592:
7305 3e36 232F mov r18,r19
7306 3e38 342F mov r19,r20
7307 3e3a 452F mov r20,r21
7308 3e3c 5527 clr r21
7309 3e3e 47FD sbrc r20,7
7310 3e40 5A95 dec r21
7311 3e42 8091 0000 lds r24,LageKorrekturRoll
7312 3e46 9091 0000 lds r25,(LageKorrekturRoll)+1
7313 3e4a 820F add r24,r18
7314 3e4c 931F adc r25,r19
7315 3e4e 9093 0000 sts (LageKorrekturRoll)+1,r25
7316 3e52 8093 0000 sts LageKorrekturRoll,r24
7317 3e56 00C0 rjmp .L594
7318 .L587:
7319 3e58 81E0 ldi r24,lo8(1)
7320 3e5a 8093 0000 sts last_r_p.17,r24
7321 3e5e 00C0 rjmp .L594
7322 .L586:
7323 3e60 1092 0000 sts last_r_p.17,__zero_reg__
7324 .L594:
7325 3e64 20E0 ldi r18,lo8(-4096)
7326 3e66 C216 cp r12,r18
7327 3e68 20EF ldi r18,hi8(-4096)
7328 3e6a D206 cpc r13,r18
7329 3e6c 2FEF ldi r18,hlo8(-4096)
7330 3e6e E206 cpc r14,r18
7331 3e70 2FEF ldi r18,hhi8(-4096)
7332 3e72 F206 cpc r15,r18
7333 3e74 04F0 brlt .+2
7334 3e76 00C0 rjmp .L595
7335 3e78 8091 0000 lds r24,last_r_n.18
7336 3e7c 8823 tst r24
7337 3e7e 01F4 brne .+2
7338 3e80 00C0 rjmp .L596
7339 3e82 D701 movw r26,r14
7340 3e84 C601 movw r24,r12
7341 3e86 F7FE sbrs r15,7
7342 3e88 00C0 rjmp .L597
7343 3e8a 8827 clr r24
7344 3e8c 9927 clr r25
7345 3e8e DC01 movw r26,r24
7346 3e90 8C19 sub r24,r12
7347 3e92 9D09 sbc r25,r13
7348 3e94 AE09 sbc r26,r14
7349 3e96 BF09 sbc r27,r15
7350 .L597:
7351 3e98 9C01 movw r18,r24
7352 3e9a AD01 movw r20,r26
7353 3e9c B7FF sbrs r27,7
7354 3e9e 00C0 rjmp .L598
7355 3ea0 2150 subi r18,lo8(-(511))
7356 3ea2 3E4F sbci r19,hi8(-(511))
7357 3ea4 4F4F sbci r20,hlo8(-(511))
7358 3ea6 5F4F sbci r21,hhi8(-(511))
7359 .L598:
7360 3ea8 E9E0 ldi r30,9
7361 3eaa 5595 1: asr r21
7362 3eac 4795 ror r20
7363 3eae 3795 ror r19
7364 3eb0 2795 ror r18
7365 3eb2 EA95 dec r30
7366 3eb4 01F4 brne 1b
7367 3eb6 8091 0000 lds r24,cnt.14
7368 3eba 9091 0000 lds r25,(cnt.14)+1
7369 3ebe 820F add r24,r18
7370 3ec0 931F adc r25,r19
7371 3ec2 9093 0000 sts (cnt.14)+1,r25
7372 3ec6 8093 0000 sts cnt.14,r24
7373 3eca D701 movw r26,r14
7374 3ecc C601 movw r24,r12
7375 3ece F7FE sbrs r15,7
7376 3ed0 00C0 rjmp .L599
7377 3ed2 0796 adiw r24,7
7378 3ed4 A11D adc r26,__zero_reg__
7379 3ed6 B11D adc r27,__zero_reg__
7380 .L599:
7381 3ed8 73E0 ldi r23,3
7382 3eda B595 1: asr r27
7383 3edc A795 ror r26
7384 3ede 9795 ror r25
7385 3ee0 8795 ror r24
7386 3ee2 7A95 dec r23
7387 3ee4 01F4 brne 1b
7388 3ee6 8093 0000 sts ausgleichRoll.11,r24
7389 3eea 9093 0000 sts (ausgleichRoll.11)+1,r25
7390 3eee A093 0000 sts (ausgleichRoll.11)+2,r26
7391 3ef2 B093 0000 sts (ausgleichRoll.11)+3,r27
7392 3ef6 8857 subi r24,lo8(-5000)
7393 3ef8 9C4E sbci r25,hi8(-5000)
7394 3efa AF4F sbci r26,hlo8(-5000)
7395 3efc BF4F sbci r27,hhi8(-5000)
7396 3efe 04F4 brge .L600
7397 3f00 88E7 ldi r24,lo8(-5000)
7398 3f02 9CEE ldi r25,hi8(-5000)
7399 3f04 AFEF ldi r26,hlo8(-5000)
7400 3f06 BFEF ldi r27,hhi8(-5000)
7401 3f08 8093 0000 sts ausgleichRoll.11,r24
7402 3f0c 9093 0000 sts (ausgleichRoll.11)+1,r25
7403 3f10 A093 0000 sts (ausgleichRoll.11)+2,r26
7404 3f14 B093 0000 sts (ausgleichRoll.11)+3,r27
7405 .L600:
7406 3f18 2091 0000 lds r18,ausgleichRoll.11
7407 3f1c 3091 0000 lds r19,(ausgleichRoll.11)+1
7408 3f20 4091 0000 lds r20,(ausgleichRoll.11)+2
7409 3f24 5091 0000 lds r21,(ausgleichRoll.11)+3
7410 3f28 57FF sbrs r21,7
7411 3f2a 00C0 rjmp .L601
7412 3f2c 2150 subi r18,lo8(-(255))
7413 3f2e 3F4F sbci r19,hi8(-(255))
7414 3f30 4F4F sbci r20,hlo8(-(255))
7415 3f32 5F4F sbci r21,hhi8(-(255))
7416 .L601:
7417 3f34 232F mov r18,r19
7418 3f36 342F mov r19,r20
7419 3f38 452F mov r20,r21
7420 3f3a 5527 clr r21
7421 3f3c 47FD sbrc r20,7
7422 3f3e 5A95 dec r21
7423 3f40 8091 0000 lds r24,LageKorrekturRoll
7424 3f44 9091 0000 lds r25,(LageKorrekturRoll)+1
7425 3f48 820F add r24,r18
7426 3f4a 931F adc r25,r19
7427 3f4c 9093 0000 sts (LageKorrekturRoll)+1,r25
7428 3f50 8093 0000 sts LageKorrekturRoll,r24
7429 3f54 00C0 rjmp .L604
7430 .L596:
7431 3f56 81E0 ldi r24,lo8(1)
7432 3f58 8093 0000 sts last_r_n.18,r24
7433 3f5c 00C0 rjmp .L604
7434 .L595:
7435 3f5e 1092 0000 sts last_r_n.18,__zero_reg__
7436 3f62 00C0 rjmp .L604
7437 .L584:
7438 3f64 1092 0000 sts (cnt.14)+1,__zero_reg__
7439 3f68 1092 0000 sts cnt.14,__zero_reg__
7440 3f6c 84E6 ldi r24,lo8(100)
7441 3f6e 90E0 ldi r25,hi8(100)
7442 3f70 9093 0000 sts (KompassSignalSchlecht)+1,r25
7443 3f74 8093 0000 sts KompassSignalSchlecht,r24
7444 .L604:
7445 3f78 4889 ldd r20,Y+16
7446 3f7a 242F mov r18,r20
7447 3f7c 3327 clr r19
7448 3f7e 8091 0000 lds r24,cnt.14
7449 3f82 9091 0000 lds r25,(cnt.14)+1
7450 3f86 2817 cp r18,r24
7451 3f88 3907 cpc r19,r25
7452 3f8a 04F4 brge .L605
7453 3f8c 3093 0000 sts (cnt.14)+1,r19
7454 3f90 2093 0000 sts cnt.14,r18
7455 .L605:
7456 3f94 8091 0000 lds r24,FromNaviCtrl_Value+1
7457 3f98 8823 tst r24
7458 3f9a 01F0 breq .L606
7459 3f9c 282F mov r18,r24
7460 3f9e 3327 clr r19
7461 3fa0 27FD sbrc r18,7
7462 3fa2 3095 com r19
7463 3fa4 8091 0000 lds r24,cnt.14
7464 3fa8 9091 0000 lds r25,(cnt.14)+1
7465 3fac 2817 cp r18,r24
7466 3fae 3907 cpc r19,r25
7467 3fb0 04F4 brge .L606
7468 3fb2 3093 0000 sts (cnt.14)+1,r19
7469 3fb6 2093 0000 sts cnt.14,r18
7470 .L606:
7471 3fba 4091 0000 lds r20,IntegralFehlerRoll.4
7472 3fbe 5091 0000 lds r21,(IntegralFehlerRoll.4)+1
7473 3fc2 6091 0000 lds r22,(IntegralFehlerRoll.4)+2
7474 3fc6 7091 0000 lds r23,(IntegralFehlerRoll.4)+3
7475 3fca 4138 cpi r20,lo8(129)
7476 3fcc 5105 cpc r21,__zero_reg__
7477 3fce 6105 cpc r22,__zero_reg__
7478 3fd0 7105 cpc r23,__zero_reg__
7479 3fd2 04F0 brlt .L608
7480 3fd4 8091 0000 lds r24,AdNeutralRoll
7481 3fd8 9091 0000 lds r25,(AdNeutralRoll)+1
7482 3fdc 2091 0000 lds r18,cnt.14
7483 3fe0 3091 0000 lds r19,(cnt.14)+1
7484 3fe4 820F add r24,r18
7485 3fe6 931F adc r25,r19
7486 3fe8 9093 0000 sts (AdNeutralRoll)+1,r25
7487 3fec 8093 0000 sts AdNeutralRoll,r24
7488 .L608:
7489 3ff0 4058 subi r20,lo8(-128)
7490 3ff2 5F4F sbci r21,hi8(-128)
7491 3ff4 6F4F sbci r22,hlo8(-128)
7492 3ff6 7F4F sbci r23,hhi8(-128)
7493 3ff8 04F4 brge .L610
7494 3ffa 8091 0000 lds r24,AdNeutralRoll
7495 3ffe 9091 0000 lds r25,(AdNeutralRoll)+1
7496 4002 2091 0000 lds r18,cnt.14
7497 4006 3091 0000 lds r19,(cnt.14)+1
7498 400a 821B sub r24,r18
7499 400c 930B sbc r25,r19
7500 400e 9093 0000 sts (AdNeutralRoll)+1,r25
7501 4012 8093 0000 sts AdNeutralRoll,r24
7502 4016 00C0 rjmp .L610
7503 .L536:
7504 4018 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7505 401c 1092 0000 sts LageKorrekturRoll,__zero_reg__
7506 4020 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7507 4024 1092 0000 sts LageKorrekturNick,__zero_reg__
7508 4028 1092 0000 sts TrichterFlug,__zero_reg__
7509 .L610:
7510 402c 8091 0000 lds r24,IntegralFaktor
7511 4030 8823 tst r24
7512 4032 01F4 brne .L611
7513 4034 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7514 4038 1092 0000 sts LageKorrekturRoll,__zero_reg__
7515 403c 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7516 4040 1092 0000 sts LageKorrekturNick,__zero_reg__
7517 .L611:
7518 4044 8091 0000 lds r24,MittelIntegralNick
7519 4048 9091 0000 lds r25,(MittelIntegralNick)+1
7520 404c A091 0000 lds r26,(MittelIntegralNick)+2
7521 4050 B091 0000 lds r27,(MittelIntegralNick)+3
7522 4054 8093 0000 sts MittelIntegralNick_Alt.19,r24
7523 4058 9093 0000 sts (MittelIntegralNick_Alt.19)+1,r25
7524 405c A093 0000 sts (MittelIntegralNick_Alt.19)+2,r26
7525 4060 B093 0000 sts (MittelIntegralNick_Alt.19)+3,r27
7526 4064 8091 0000 lds r24,MittelIntegralRoll
7527 4068 9091 0000 lds r25,(MittelIntegralRoll)+1
7528 406c A091 0000 lds r26,(MittelIntegralRoll)+2
7529 4070 B091 0000 lds r27,(MittelIntegralRoll)+3
7530 4074 8093 0000 sts MittelIntegralRoll_Alt.20,r24
7531 4078 9093 0000 sts (MittelIntegralRoll_Alt.20)+1,r25
7532 407c A093 0000 sts (MittelIntegralRoll_Alt.20)+2,r26
7533 4080 B093 0000 sts (MittelIntegralRoll_Alt.20)+3,r27
7534 4084 1092 0000 sts IntegralAccNick,__zero_reg__
7535 4088 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
7536 408c 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
7537 4090 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
7538 4094 1092 0000 sts IntegralAccRoll,__zero_reg__
7539 4098 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
7540 409c 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
7541 40a0 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
7542 40a4 1092 0000 sts IntegralAccZ,__zero_reg__
7543 40a8 1092 0000 sts (IntegralAccZ)+1,__zero_reg__
7544 40ac 1092 0000 sts (IntegralAccZ)+2,__zero_reg__
7545 40b0 1092 0000 sts (IntegralAccZ)+3,__zero_reg__
7546 40b4 1092 0000 sts MittelIntegralNick,__zero_reg__
7547 40b8 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
7548 40bc 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
7549 40c0 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
7550 40c4 1092 0000 sts MittelIntegralRoll,__zero_reg__
7551 40c8 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
7552 40cc 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
7553 40d0 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
7554 40d4 1092 0000 sts MittelIntegralNick2,__zero_reg__
7555 40d8 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
7556 40dc 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
7557 40e0 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
7558 40e4 1092 0000 sts MittelIntegralRoll2,__zero_reg__
7559 40e8 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
7560 40ec 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
7561 40f0 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
7562 40f4 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
7563 40f8 1092 0000 sts ZaehlMessungen,__zero_reg__
7564 .L535:
7565 40fc E090 0000 lds r14,StickGier
7566 4100 F090 0000 lds r15,(StickGier)+1
7567 4104 C701 movw r24,r14
7568 4106 F7FE sbrs r15,7
7569 4108 00C0 rjmp .L613
7570 410a 8827 clr r24
7571 410c 9927 clr r25
7572 410e 8E19 sub r24,r14
7573 4110 9F09 sbc r25,r15
7574 .L613:
7575 4112 0497 sbiw r24,4
7576 4114 04F0 brlt .L612
7577 4116 8091 0000 lds r24,Parameter_GlobalConfig
7578 411a 84FD sbrc r24,4
7579 411c 00C0 rjmp .L612
7580 411e 82E3 ldi r24,lo8(50)
7581 4120 8093 0000 sts NeueKompassRichtungMerken,r24
7582 .L612:
7583 4124 1091 0000 lds r17,EE_Parameter+25
7584 4128 A12E mov r10,r17
7585 412a BB24 clr r11
7586 412c CC24 clr r12
7587 412e DD24 clr r13
7588 4130 B701 movw r22,r14
7589 4132 8827 clr r24
7590 4134 77FD sbrc r23,7
7591 4136 8095 com r24
7592 4138 982F mov r25,r24
7593 413a 9701 movw r18,r14
7594 413c F7FE sbrs r15,7
7595 413e 00C0 rjmp .L615
7596 4140 2227 clr r18
7597 4142 3327 clr r19
7598 4144 2E19 sub r18,r14
7599 4146 3F09 sbc r19,r15
7600 .L615:
7601 4148 4427 clr r20
7602 414a 37FD sbrc r19,7
7603 414c 4095 com r20
7604 414e 542F mov r21,r20
7605 4150 0E94 0000 call __mulsi3
7606 4154 9B01 movw r18,r22
7607 4156 AC01 movw r20,r24
7608 4158 C601 movw r24,r12
7609 415a B501 movw r22,r10
7610 415c 0E94 0000 call __mulsi3
7611 4160 97FF sbrs r25,7
7612 4162 00C0 rjmp .L616
7613 4164 6150 subi r22,lo8(-(511))
7614 4166 7E4F sbci r23,hi8(-(511))
7615 4168 8F4F sbci r24,hlo8(-(511))
7616 416a 9F4F sbci r25,hhi8(-(511))
7617 .L616:
7618 416c 59E0 ldi r21,9
7619 416e 9595 1: asr r25
7620 4170 8795 ror r24
7621 4172 7795 ror r23
7622 4174 6795 ror r22
7623 4176 5A95 dec r21
7624 4178 01F4 brne 1b
7625 417a 9B01 movw r18,r22
7626 417c 812F mov r24,r17
7627 417e 9927 clr r25
7628 4180 8E9D mul r24,r14
7629 4182 D001 movw r26,r0
7630 4184 8F9D mul r24,r15
7631 4186 B00D add r27,r0
7632 4188 9E9D mul r25,r14
7633 418a B00D add r27,r0
7634 418c 1124 clr r1
7635 418e CD01 movw r24,r26
7636 4190 B7FD sbrc r27,7
7637 4192 0396 adiw r24,3
7638 .L617:
7639 4194 9595 asr r25
7640 4196 8795 ror r24
7641 4198 9595 asr r25
7642 419a 8795 ror r24
7643 419c 280F add r18,r24
7644 419e 391F adc r19,r25
7645 41a0 8091 0000 lds r24,CompassGierSetpoint
7646 41a4 9091 0000 lds r25,(CompassGierSetpoint)+1
7647 41a8 280F add r18,r24
7648 41aa 391F adc r19,r25
7649 41ac 4427 clr r20
7650 41ae 37FD sbrc r19,7
7651 41b0 4095 com r20
7652 41b2 542F mov r21,r20
7653 41b4 2093 0000 sts sollGier.0,r18
7654 41b8 3093 0000 sts (sollGier.0)+1,r19
7655 41bc 4093 0000 sts (sollGier.0)+2,r20
7656 41c0 5093 0000 sts (sollGier.0)+3,r21
7657 41c4 8091 0000 lds r24,Mess_Integral_Gier
7658 41c8 9091 0000 lds r25,(Mess_Integral_Gier)+1
7659 41cc A091 0000 lds r26,(Mess_Integral_Gier)+2
7660 41d0 B091 0000 lds r27,(Mess_Integral_Gier)+3
7661 41d4 821B sub r24,r18
7662 41d6 930B sbc r25,r19
7663 41d8 A40B sbc r26,r20
7664 41da B50B sbc r27,r21
7665 41dc 8093 0000 sts Mess_Integral_Gier,r24
7666 41e0 9093 0000 sts (Mess_Integral_Gier)+1,r25
7667 41e4 A093 0000 sts (Mess_Integral_Gier)+2,r26
7668 41e8 B093 0000 sts (Mess_Integral_Gier)+3,r27
7669 41ec 8155 subi r24,lo8(50001)
7670 41ee 934C sbci r25,hi8(50001)
7671 41f0 A040 sbci r26,hlo8(50001)
7672 41f2 B040 sbci r27,hhi8(50001)
7673 41f4 04F0 brlt .L618
7674 41f6 80E5 ldi r24,lo8(50000)
7675 41f8 93EC ldi r25,hi8(50000)
7676 41fa A0E0 ldi r26,hlo8(50000)
7677 41fc B0E0 ldi r27,hhi8(50000)
7678 41fe 8093 0000 sts Mess_Integral_Gier,r24
7679 4202 9093 0000 sts (Mess_Integral_Gier)+1,r25
7680 4206 A093 0000 sts (Mess_Integral_Gier)+2,r26
7681 420a B093 0000 sts (Mess_Integral_Gier)+3,r27
7682 .L618:
7683 420e 8091 0000 lds r24,Mess_Integral_Gier
7684 4212 9091 0000 lds r25,(Mess_Integral_Gier)+1
7685 4216 A091 0000 lds r26,(Mess_Integral_Gier)+2
7686 421a B091 0000 lds r27,(Mess_Integral_Gier)+3
7687 421e 805B subi r24,lo8(-50000)
7688 4220 9C43 sbci r25,hi8(-50000)
7689 4222 AF4F sbci r26,hlo8(-50000)
7690 4224 BF4F sbci r27,hhi8(-50000)
7691 4226 04F4 brge .L619
7692 4228 80EB ldi r24,lo8(-50000)
7693 422a 9CE3 ldi r25,hi8(-50000)
7694 422c AFEF ldi r26,hlo8(-50000)
7695 422e BFEF ldi r27,hhi8(-50000)
7696 4230 8093 0000 sts Mess_Integral_Gier,r24
7697 4234 9093 0000 sts (Mess_Integral_Gier)+1,r25
7698 4238 A093 0000 sts (Mess_Integral_Gier)+2,r26
7699 423c B093 0000 sts (Mess_Integral_Gier)+3,r27
7700 .L619:
7701 4240 0091 0000 lds r16,KompassValue
7702 4244 1091 0000 lds r17,(KompassValue)+1
7703 4248 17FD sbrc r17,7
7704 424a 00C0 rjmp .L620
7705 424c 8091 0000 lds r24,Parameter_GlobalConfig
7706 4250 83FF sbrs r24,3
7707 4252 00C0 rjmp .L620
7708 4254 8091 0000 lds r24,CalculateCompassTimer
7709 4258 8150 subi r24,lo8(-(-1))
7710 425a 8093 0000 sts CalculateCompassTimer,r24
7711 425e 8823 tst r24
7712 4260 01F0 breq .+2
7713 4262 00C0 rjmp .L637
7714 4264 8DE0 ldi r24,lo8(13)
7715 4266 8093 0000 sts CalculateCompassTimer,r24
7716 426a 8091 0000 lds r24,IntegralNick
7717 426e 9091 0000 lds r25,(IntegralNick)+1
7718 4272 A091 0000 lds r26,(IntegralNick)+2
7719 4276 B091 0000 lds r27,(IntegralNick)+3
7720 427a B7FF sbrs r27,7
7721 427c 00C0 rjmp .L622
7722 427e 8150 subi r24,lo8(-(511))
7723 4280 9E4F sbci r25,hi8(-(511))
7724 4282 AF4F sbci r26,hlo8(-(511))
7725 4284 BF4F sbci r27,hhi8(-(511))
7726 .L622:
7727 4286 39E0 ldi r19,9
7728 4288 B595 1: asr r27
7729 428a A795 ror r26
7730 428c 9795 ror r25
7731 428e 8795 ror r24
7732 4290 3A95 dec r19
7733 4292 01F4 brne 1b
7734 4294 7C01 movw r14,r24
7735 4296 97FF sbrs r25,7
7736 4298 00C0 rjmp .L623
7737 429a F094 com r15
7738 429c E194 neg r14
7739 429e F108 sbc r15,__zero_reg__
7740 42a0 F394 inc r15
7741 .L623:
7742 42a2 8091 0000 lds r24,IntegralRoll
7743 42a6 9091 0000 lds r25,(IntegralRoll)+1
7744 42aa A091 0000 lds r26,(IntegralRoll)+2
7745 42ae B091 0000 lds r27,(IntegralRoll)+3
7746 42b2 B7FF sbrs r27,7
7747 42b4 00C0 rjmp .L624
7748 42b6 8150 subi r24,lo8(-(511))
7749 42b8 9E4F sbci r25,hi8(-(511))
7750 42ba AF4F sbci r26,hlo8(-(511))
7751 42bc BF4F sbci r27,hhi8(-(511))
7752 .L624:
7753 42be 29E0 ldi r18,9
7754 42c0 B595 1: asr r27
7755 42c2 A795 ror r26
7756 42c4 9795 ror r25
7757 42c6 8795 ror r24
7758 42c8 2A95 dec r18
7759 42ca 01F4 brne 1b
7760 42cc 9C01 movw r18,r24
7761 42ce 97FF sbrs r25,7
7762 42d0 00C0 rjmp .L625
7763 42d2 3095 com r19
7764 42d4 2195 neg r18
7765 42d6 3F4F sbci r19,lo8(-1)
7766 .L625:
7767 42d8 E216 cp r14,r18
7768 42da F306 cpc r15,r19
7769 42dc 04F4 brge .L626
7770 42de 7901 movw r14,r18
7771 .L626:
7772 42e0 B701 movw r22,r14
7773 42e2 F7FE sbrs r15,7
7774 42e4 00C0 rjmp .L627
7775 42e6 695F subi r22,lo8(-(7))
7776 42e8 7F4F sbci r23,hi8(-(7))
7777 .L627:
7778 42ea 2B01 movw r4,r22
7779 42ec A3E0 ldi r26,3
7780 42ee 5594 1: asr r5
7781 42f0 4794 ror r4
7782 42f2 AA95 dec r26
7783 42f4 01F4 brne 1b
7784 42f6 22E0 ldi r18,lo8(2)
7785 42f8 30E0 ldi r19,hi8(2)
7786 42fa 420E add r4,r18
7787 42fc 531E adc r5,r19
7788 42fe 6090 0000 lds r6,ErsatzKompass
7789 4302 7090 0000 lds r7,(ErsatzKompass)+1
7790 4306 8090 0000 lds r8,(ErsatzKompass)+2
7791 430a 9090 0000 lds r9,(ErsatzKompass)+3
7792 430e 2091 0000 lds r18,GIER_GRAD_FAKTOR
7793 4312 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
7794 4316 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
7795 431a 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
7796 431e C401 movw r24,r8
7797 4320 B301 movw r22,r6
7798 4322 0E94 0000 call __divmodsi4
7799 4326 5901 movw r10,r18
7800 4328 6A01 movw r12,r20
7801 432a 3093 0000 sts (ErsatzKompassInGrad)+1,r19
7802 432e 2093 0000 sts ErsatzKompassInGrad,r18
7803 4332 021B sub r16,r18
7804 4334 130B sbc r17,r19
7805 4336 C801 movw r24,r16
7806 4338 845E subi r24,lo8(-(540))
7807 433a 9D4F sbci r25,hi8(-(540))
7808 433c 68E6 ldi r22,lo8(360)
7809 433e 71E0 ldi r23,hi8(360)
7810 4340 0E94 0000 call __divmodhi4
7811 4344 9C01 movw r18,r24
7812 4346 245B subi r18,lo8(-(-180))
7813 4348 3040 sbci r19,hi8(-(-180))
7814 434a 8091 0000 lds r24,KompassSignalSchlecht
7815 434e 9091 0000 lds r25,(KompassSignalSchlecht)+1
7816 4352 0097 sbiw r24,0
7817 4354 01F0 breq .L628
7818 4356 0197 sbiw r24,1
7819 4358 9093 0000 sts (KompassSignalSchlecht)+1,r25
7820 435c 8093 0000 sts KompassSignalSchlecht,r24
7821 4360 00C0 rjmp .L629
7822 .L628:
7823 4362 49E1 ldi r20,lo8(25)
7824 4364 E416 cp r14,r20
7825 4366 F104 cpc r15,__zero_reg__
7826 4368 04F4 brge .L629
7827 436a 8091 0000 lds r24,GierGyroFehler
7828 436e 9091 0000 lds r25,(GierGyroFehler)+1
7829 4372 820F add r24,r18
7830 4374 931F adc r25,r19
7831 4376 9093 0000 sts (GierGyroFehler)+1,r25
7832 437a 8093 0000 sts GierGyroFehler,r24
7833 437e 8091 0000 lds r24,NeueKompassRichtungMerken
7834 4382 8823 tst r24
7835 4384 01F0 breq .L629
7836 4386 8150 subi r24,lo8(-(-1))
7837 4388 8093 0000 sts NeueKompassRichtungMerken,r24
7838 438c 8823 tst r24
7839 438e 01F4 brne .L629
7840 4390 B092 0000 sts (KompassSollWert)+1,r11
7841 4394 A092 0000 sts KompassSollWert,r10
7842 .L629:
7843 4398 8091 0000 lds r24,KompassSignalSchlecht
7844 439c 9091 0000 lds r25,(KompassSignalSchlecht)+1
7845 43a0 892B or r24,r25
7846 43a2 01F4 brne .L633
7847 43a4 8091 0000 lds r24,KompassFusion
7848 43a8 9927 clr r25
7849 43aa 289F mul r18,r24
7850 43ac B001 movw r22,r0
7851 43ae 299F mul r18,r25
7852 43b0 700D add r23,r0
7853 43b2 389F mul r19,r24
7854 43b4 700D add r23,r0
7855 43b6 1124 clr r1
7856 43b8 CB01 movw r24,r22
7857 43ba B201 movw r22,r4
7858 43bc 0E94 0000 call __divmodhi4
7859 43c0 CB01 movw r24,r22
7860 43c2 AA27 clr r26
7861 43c4 97FD sbrc r25,7
7862 43c6 A095 com r26
7863 43c8 BA2F mov r27,r26
7864 43ca 680E add r6,r24
7865 43cc 791E adc r7,r25
7866 43ce 8A1E adc r8,r26
7867 43d0 9B1E adc r9,r27
7868 43d2 6092 0000 sts ErsatzKompass,r6
7869 43d6 7092 0000 sts (ErsatzKompass)+1,r7
7870 43da 8092 0000 sts (ErsatzKompass)+2,r8
7871 43de 9092 0000 sts (ErsatzKompass)+3,r9
7872 .L633:
7873 43e2 8091 0000 lds r24,NeueKompassRichtungMerken
7874 43e6 8823 tst r24
7875 43e8 01F4 brne .L620
7876 43ea 8091 0000 lds r24,KompassSollWert
7877 43ee 9091 0000 lds r25,(KompassSollWert)+1
7878 43f2 2091 0000 lds r18,ErsatzKompassInGrad
7879 43f6 3091 0000 lds r19,(ErsatzKompassInGrad)+1
7880 43fa 821B sub r24,r18
7881 43fc 930B sbc r25,r19
7882 43fe 845E subi r24,lo8(-(540))
7883 4400 9D4F sbci r25,hi8(-(540))
7884 4402 68E6 ldi r22,lo8(360)
7885 4404 71E0 ldi r23,hi8(360)
7886 4406 0E94 0000 call __divmodhi4
7887 440a 9C01 movw r18,r24
7888 440c 245B subi r18,lo8(-(-180))
7889 440e 3040 sbci r19,hi8(-(-180))
7890 4410 8091 0000 lds r24,Parameter_KompassWirkung
7891 4414 8695 lsr r24
7892 4416 9927 clr r25
7893 4418 289F mul r18,r24
7894 441a D001 movw r26,r0
7895 441c 299F mul r18,r25
7896 441e B00D add r27,r0
7897 4420 389F mul r19,r24
7898 4422 B00D add r27,r0
7899 4424 1124 clr r1
7900 4426 9D01 movw r18,r26
7901 4428 B7FF sbrs r27,7
7902 442a 00C0 rjmp .L635
7903 442c 215F subi r18,lo8(-(15))
7904 442e 3F4F sbci r19,hi8(-(15))
7905 .L635:
7906 4430 F4E0 ldi r31,4
7907 4432 3595 1: asr r19
7908 4434 2795 ror r18
7909 4436 FA95 dec r31
7910 4438 01F4 brne 1b
7911 443a 3093 0000 sts (CompassGierSetpoint)+1,r19
7912 443e 2093 0000 sts CompassGierSetpoint,r18
7913 4442 00C0 rjmp .L637
7914 .L620:
7915 4444 1092 0000 sts (CompassGierSetpoint)+1,__zero_reg__
7916 4448 1092 0000 sts CompassGierSetpoint,__zero_reg__
7917 .L637:
7918 444c 8091 0000 lds r24,TrichterFlug
7919 4450 8823 tst r24
7920 4452 01F0 breq .L638
7921 4454 1092 0000 sts SummeRoll,__zero_reg__
7922 4458 1092 0000 sts (SummeRoll)+1,__zero_reg__
7923 445c 1092 0000 sts (SummeRoll)+2,__zero_reg__
7924 4460 1092 0000 sts (SummeRoll)+3,__zero_reg__
7925 4464 1092 0000 sts SummeNick,__zero_reg__
7926 4468 1092 0000 sts (SummeNick)+1,__zero_reg__
7927 446c 1092 0000 sts (SummeNick)+2,__zero_reg__
7928 4470 1092 0000 sts (SummeNick)+3,__zero_reg__
7929 .L638:
7930 4474 F090 0000 lds r15,Looping_Nick
7931 4478 FF20 tst r15
7932 447a 01F4 brne .L639
7933 447c 8091 0000 lds r24,IntegralFaktor
7934 4480 282F mov r18,r24
7935 4482 3327 clr r19
7936 4484 4427 clr r20
7937 4486 5527 clr r21
7938 4488 8091 0000 lds r24,IntegralNick
7939 448c 9091 0000 lds r25,(IntegralNick)+1
7940 4490 A091 0000 lds r26,(IntegralNick)+2
7941 4494 B091 0000 lds r27,(IntegralNick)+3
7942 4498 BC01 movw r22,r24
7943 449a CD01 movw r24,r26
7944 449c 0E94 0000 call __mulsi3
7945 44a0 DC01 movw r26,r24
7946 44a2 CB01 movw r24,r22
7947 44a4 BC01 movw r22,r24
7948 44a6 CD01 movw r24,r26
7949 44a8 28EF ldi r18,lo8(11000)
7950 44aa 3AE2 ldi r19,hi8(11000)
7951 44ac 40E0 ldi r20,hlo8(11000)
7952 44ae 50E0 ldi r21,hhi8(11000)
7953 44b0 0E94 0000 call __divmodsi4
7954 44b4 3901 movw r6,r18
7955 44b6 00C0 rjmp .L640
7956 .L639:
7957 44b8 6624 clr r6
7958 44ba 7724 clr r7
7959 .L640:
7960 44bc E090 0000 lds r14,Looping_Roll
7961 44c0 EE20 tst r14
7962 44c2 01F4 brne .L641
7963 44c4 8091 0000 lds r24,IntegralFaktor
7964 44c8 282F mov r18,r24
7965 44ca 3327 clr r19
7966 44cc 4427 clr r20
7967 44ce 5527 clr r21
7968 44d0 8091 0000 lds r24,IntegralRoll
7969 44d4 9091 0000 lds r25,(IntegralRoll)+1
7970 44d8 A091 0000 lds r26,(IntegralRoll)+2
7971 44dc B091 0000 lds r27,(IntegralRoll)+3
7972 44e0 BC01 movw r22,r24
7973 44e2 CD01 movw r24,r26
7974 44e4 0E94 0000 call __mulsi3
7975 44e8 DC01 movw r26,r24
7976 44ea CB01 movw r24,r22
7977 44ec BC01 movw r22,r24
7978 44ee CD01 movw r24,r26
7979 44f0 28EF ldi r18,lo8(11000)
7980 44f2 3AE2 ldi r19,hi8(11000)
7981 44f4 40E0 ldi r20,hlo8(11000)
7982 44f6 50E0 ldi r21,hhi8(11000)
7983 44f8 0E94 0000 call __divmodsi4
7984 44fc 2901 movw r4,r18
7985 44fe 00C0 rjmp .L642
7986 .L641:
7987 4500 4424 clr r4
7988 4502 5524 clr r5
7989 .L642:
7990 4504 8091 0000 lds r24,TrimNick
7991 4508 9091 0000 lds r25,(TrimNick)+1
7992 450c 893C cpi r24,201
7993 450e 9105 cpc r25,__zero_reg__
7994 4510 04F0 brlt .L643
7995 4512 88EC ldi r24,lo8(200)
7996 4514 90E0 ldi r25,hi8(200)
7997 4516 00C0 rjmp .L900
7998 .L643:
7999 4518 8853 subi r24,lo8(-200)
8000 451a 9F4F sbci r25,hi8(-200)
8001 451c 04F4 brge .L644
8002 451e 88E3 ldi r24,lo8(-200)
8003 4520 9FEF ldi r25,hi8(-200)
8004 .L900:
8005 4522 9093 0000 sts (TrimNick)+1,r25
8006 4526 8093 0000 sts TrimNick,r24
8007 .L644:
8008 452a 8091 0000 lds r24,TrimRoll
8009 452e 9091 0000 lds r25,(TrimRoll)+1
8010 4532 893C cpi r24,201
8011 4534 9105 cpc r25,__zero_reg__
8012 4536 04F0 brlt .L646
8013 4538 88EC ldi r24,lo8(200)
8014 453a 90E0 ldi r25,hi8(200)
8015 453c 00C0 rjmp .L901
8016 .L646:
8017 453e 8853 subi r24,lo8(-200)
8018 4540 9F4F sbci r25,hi8(-200)
8019 4542 04F4 brge .L647
8020 4544 88E3 ldi r24,lo8(-200)
8021 4546 9FEF ldi r25,hi8(-200)
8022 .L901:
8023 4548 9093 0000 sts (TrimRoll)+1,r25
8024 454c 8093 0000 sts TrimRoll,r24
8025 .L647:
8026 4550 8091 0000 lds r24,MesswertNick
8027 4554 9091 0000 lds r25,(MesswertNick)+1
8028 4558 AA27 clr r26
8029 455a 97FD sbrc r25,7
8030 455c A095 com r26
8031 455e BA2F mov r27,r26
8032 4560 2091 0000 lds r18,GyroFaktor
8033 4564 A22E mov r10,r18
8034 4566 BB24 clr r11
8035 4568 CC24 clr r12
8036 456a DD24 clr r13
8037 456c BC01 movw r22,r24
8038 456e CD01 movw r24,r26
8039 4570 A601 movw r20,r12
8040 4572 9501 movw r18,r10
8041 4574 0E94 0000 call __mulsi3
8042 4578 9B01 movw r18,r22
8043 457a AC01 movw r20,r24
8044 457c 8091 0000 lds r24,TrimNick
8045 4580 9091 0000 lds r25,(TrimNick)+1
8046 4584 AA27 clr r26
8047 4586 97FD sbrc r25,7
8048 4588 A095 com r26
8049 458a BA2F mov r27,r26
8050 458c E7E0 ldi r30,7
8051 458e 880F 1: lsl r24
8052 4590 991F rol r25
8053 4592 AA1F rol r26
8054 4594 BB1F rol r27
8055 4596 EA95 dec r30
8056 4598 01F4 brne 1b
8057 459a 280F add r18,r24
8058 459c 391F adc r19,r25
8059 459e 4A1F adc r20,r26
8060 45a0 5B1F adc r21,r27
8061 45a2 57FF sbrs r21,7
8062 45a4 00C0 rjmp .L649
8063 45a6 215C subi r18,lo8(-(63))
8064 45a8 3F4F sbci r19,hi8(-(63))
8065 45aa 4F4F sbci r20,hlo8(-(63))
8066 45ac 5F4F sbci r21,hhi8(-(63))
8067 .L649:
8068 45ae 76E0 ldi r23,6
8069 45b0 5595 1: asr r21
8070 45b2 4795 ror r20
8071 45b4 3795 ror r19
8072 45b6 2795 ror r18
8073 45b8 7A95 dec r23
8074 45ba 01F4 brne 1b
8075 45bc 8301 movw r16,r6
8076 45be 020F add r16,r18
8077 45c0 131F adc r17,r19
8078 45c2 1093 0000 sts (MesswertNick)+1,r17
8079 45c6 0093 0000 sts MesswertNick,r16
8080 45ca 8091 0000 lds r24,MesswertRoll
8081 45ce 9091 0000 lds r25,(MesswertRoll)+1
8082 45d2 AA27 clr r26
8083 45d4 97FD sbrc r25,7
8084 45d6 A095 com r26
8085 45d8 BA2F mov r27,r26
8086 45da BC01 movw r22,r24
8087 45dc CD01 movw r24,r26
8088 45de A601 movw r20,r12
8089 45e0 9501 movw r18,r10
8090 45e2 0E94 0000 call __mulsi3
8091 45e6 9B01 movw r18,r22
8092 45e8 AC01 movw r20,r24
8093 45ea 8091 0000 lds r24,TrimRoll
8094 45ee 9091 0000 lds r25,(TrimRoll)+1
8095 45f2 AA27 clr r26
8096 45f4 97FD sbrc r25,7
8097 45f6 A095 com r26
8098 45f8 BA2F mov r27,r26
8099 45fa 67E0 ldi r22,7
8100 45fc 880F 1: lsl r24
8101 45fe 991F rol r25
8102 4600 AA1F rol r26
8103 4602 BB1F rol r27
8104 4604 6A95 dec r22
8105 4606 01F4 brne 1b
8106 4608 280F add r18,r24
8107 460a 391F adc r19,r25
8108 460c 4A1F adc r20,r26
8109 460e 5B1F adc r21,r27
8110 4610 57FF sbrs r21,7
8111 4612 00C0 rjmp .L650
8112 4614 215C subi r18,lo8(-(63))
8113 4616 3F4F sbci r19,hi8(-(63))
8114 4618 4F4F sbci r20,hlo8(-(63))
8115 461a 5F4F sbci r21,hhi8(-(63))
8116 .L650:
8117 461c F6E0 ldi r31,6
8118 461e 5595 1: asr r21
8119 4620 4795 ror r20
8120 4622 3795 ror r19
8121 4624 2795 ror r18
8122 4626 FA95 dec r31
8123 4628 01F4 brne 1b
8124 462a 4201 movw r8,r4
8125 462c 820E add r8,r18
8126 462e 931E adc r9,r19
8127 4630 9092 0000 sts (MesswertRoll)+1,r9
8128 4634 8092 0000 sts MesswertRoll,r8
8129 4638 8091 0000 lds r24,MesswertGier
8130 463c 9091 0000 lds r25,(MesswertGier)+1
8131 4640 880F add r24,r24
8132 4642 991F adc r25,r25
8133 4644 AA27 clr r26
8134 4646 97FD sbrc r25,7
8135 4648 A095 com r26
8136 464a BA2F mov r27,r26
8137 464c 2091 0000 lds r18,GyroFaktorGier
8138 4650 3327 clr r19
8139 4652 4427 clr r20
8140 4654 5527 clr r21
8141 4656 BC01 movw r22,r24
8142 4658 CD01 movw r24,r26
8143 465a 0E94 0000 call __mulsi3
8144 465e 5B01 movw r10,r22
8145 4660 6C01 movw r12,r24
8146 4662 97FF sbrs r25,7
8147 4664 00C0 rjmp .L651
8148 4666 2FE3 ldi r18,lo8(63)
8149 4668 30E0 ldi r19,hi8(63)
8150 466a 40E0 ldi r20,hlo8(63)
8151 466c 50E0 ldi r21,hhi8(63)
8152 466e A20E add r10,r18
8153 4670 B31E adc r11,r19
8154 4672 C41E adc r12,r20
8155 4674 D51E adc r13,r21
8156 .L651:
8157 4676 E6E0 ldi r30,6
8158 4678 D594 1: asr r13
8159 467a C794 ror r12
8160 467c B794 ror r11
8161 467e A794 ror r10
8162 4680 EA95 dec r30
8163 4682 01F4 brne 1b
8164 4684 8091 0000 lds r24,IntegralFaktorGier
8165 4688 282F mov r18,r24
8166 468a 3327 clr r19
8167 468c 4427 clr r20
8168 468e 5527 clr r21
8169 4690 8091 0000 lds r24,Integral_Gier
8170 4694 9091 0000 lds r25,(Integral_Gier)+1
8171 4698 A091 0000 lds r26,(Integral_Gier)+2
8172 469c B091 0000 lds r27,(Integral_Gier)+3
8173 46a0 BC01 movw r22,r24
8174 46a2 CD01 movw r24,r26
8175 46a4 0E94 0000 call __mulsi3
8176 46a8 DC01 movw r26,r24
8177 46aa CB01 movw r24,r22
8178 46ac BC01 movw r22,r24
8179 46ae CD01 movw r24,r26
8180 46b0 20EF ldi r18,lo8(22000)
8181 46b2 35E5 ldi r19,hi8(22000)
8182 46b4 40E0 ldi r20,hlo8(22000)
8183 46b6 50E0 ldi r21,hhi8(22000)
8184 46b8 0E94 0000 call __divmodsi4
8185 46bc B501 movw r22,r10
8186 46be 620F add r22,r18
8187 46c0 731F adc r23,r19
8188 46c2 7093 0000 sts (MesswertGier)+1,r23
8189 46c6 6093 0000 sts MesswertGier,r22
8190 46ca 0150 subi r16,lo8(4097)
8191 46cc 1041 sbci r17,hi8(4097)
8192 46ce 04F0 brlt .L652
8193 46d0 80E0 ldi r24,lo8(4096)
8194 46d2 90E1 ldi r25,hi8(4096)
8195 46d4 9093 0000 sts (MesswertNick)+1,r25
8196 46d8 8093 0000 sts MesswertNick,r24
8197 .L652:
8198 46dc 8091 0000 lds r24,MesswertNick
8199 46e0 9091 0000 lds r25,(MesswertNick)+1
8200 46e4 8050 subi r24,lo8(-4096)
8201 46e6 904F sbci r25,hi8(-4096)
8202 46e8 04F4 brge .L653
8203 46ea 80E0 ldi r24,lo8(-4096)
8204 46ec 90EF ldi r25,hi8(-4096)
8205 46ee 9093 0000 sts (MesswertNick)+1,r25
8206 46f2 8093 0000 sts MesswertNick,r24
8207 .L653:
8208 46f6 51E0 ldi r21,lo8(4097)
8209 46f8 8516 cp r8,r21
8210 46fa 50E1 ldi r21,hi8(4097)
8211 46fc 9506 cpc r9,r21
8212 46fe 04F0 brlt .L654
8213 4700 80E0 ldi r24,lo8(4096)
8214 4702 90E1 ldi r25,hi8(4096)
8215 4704 9093 0000 sts (MesswertRoll)+1,r25
8216 4708 8093 0000 sts MesswertRoll,r24
8217 .L654:
8218 470c 8091 0000 lds r24,MesswertRoll
8219 4710 9091 0000 lds r25,(MesswertRoll)+1
8220 4714 8050 subi r24,lo8(-4096)
8221 4716 904F sbci r25,hi8(-4096)
8222 4718 04F4 brge .L655
8223 471a 80E0 ldi r24,lo8(-4096)
8224 471c 90EF ldi r25,hi8(-4096)
8225 471e 9093 0000 sts (MesswertRoll)+1,r25
8226 4722 8093 0000 sts MesswertRoll,r24
8227 .L655:
8228 4726 6150 subi r22,lo8(4097)
8229 4728 7041 sbci r23,hi8(4097)
8230 472a 04F0 brlt .L656
8231 472c 80E0 ldi r24,lo8(4096)
8232 472e 90E1 ldi r25,hi8(4096)
8233 4730 9093 0000 sts (MesswertGier)+1,r25
8234 4734 8093 0000 sts MesswertGier,r24
8235 .L656:
8236 4738 8091 0000 lds r24,MesswertGier
8237 473c 9091 0000 lds r25,(MesswertGier)+1
8238 4740 8050 subi r24,lo8(-4096)
8239 4742 904F sbci r25,hi8(-4096)
8240 4744 04F4 brge .L657
8241 4746 80E0 ldi r24,lo8(-4096)
8242 4748 90EF ldi r25,hi8(-4096)
8243 474a 9093 0000 sts (MesswertGier)+1,r25
8244 474e 8093 0000 sts MesswertGier,r24
8245 .L657:
8246 4752 8091 0000 lds r24,BattLowVoltageWarning
8247 4756 482F mov r20,r24
8248 4758 5527 clr r21
8249 475a 8091 0000 lds r24,UBat
8250 475e 9091 0000 lds r25,(UBat)+1
8251 4762 4817 cp r20,r24
8252 4764 5907 cpc r21,r25
8253 4766 04F4 brge .L658
8254 4768 2091 0000 lds r18,UBat
8255 476c 3091 0000 lds r19,(UBat)+1
8256 4770 0981 ldd r16,Y+1
8257 4772 1A81 ldd r17,Y+2
8258 4774 049F mul r16,r20
8259 4776 C001 movw r24,r0
8260 4778 059F mul r16,r21
8261 477a 900D add r25,r0
8262 477c 149F mul r17,r20
8263 477e 900D add r25,r0
8264 4780 1124 clr r1
8265 4782 B901 movw r22,r18
8266 4784 0E94 0000 call __udivmodhi4
8267 4788 7A83 std Y+2,r23
8268 478a 6983 std Y+1,r22
8269 .L658:
8270 478c 2981 ldd r18,Y+1
8271 478e 3A81 ldd r19,Y+2
8272 4790 220F lsl r18
8273 4792 331F rol r19
8274 4794 220F lsl r18
8275 4796 331F rol r19
8276 4798 3A83 std Y+2,r19
8277 479a 2983 std Y+1,r18
8278 479c 4091 0000 lds r20,Parameter_GlobalConfig
8279 47a0 40FD sbrc r20,0
8280 47a2 00C0 rjmp .+4
8281 47a4 0C94 0000 jmp .L659
8282 47a8 EE20 tst r14
8283 47aa 01F0 breq .+4
8284 47ac 0C94 0000 jmp .L659
8285 47b0 FF20 tst r15
8286 47b2 01F0 breq .+4
8287 47b4 0C94 0000 jmp .L659
8288 47b8 00E0 ldi r16,lo8(0)
8289 47ba 10E0 ldi r17,hi8(0)
8290 47bc 4801 movw r8,r16
8291 47be 8091 0000 lds r24,HoverGas
8292 47c2 9091 0000 lds r25,(HoverGas)+1
8293 47c6 9093 0000 sts (DebugOut+44)+1,r25
8294 47ca 8093 0000 sts DebugOut+44,r24
8295 47ce 2091 0000 lds r18,BaroExpandActive
8296 47d2 3091 0000 lds r19,(BaroExpandActive)+1
8297 47d6 2115 cp r18,__zero_reg__
8298 47d8 3105 cpc r19,__zero_reg__
8299 47da 01F0 breq .+2
8300 47dc 00C0 rjmp .L660
8301 47de 8091 0000 lds r24,MessLuftdruck
8302 47e2 9091 0000 lds r25,(MessLuftdruck)+1
8303 47e6 8959 subi r24,lo8(921)
8304 47e8 9340 sbci r25,hi8(921)
8305 47ea 00F0 brlo .L661
8306 47ec 87B5 in r24,71-0x20
8307 47ee 803F cpi r24,lo8(-16)
8308 47f0 00F4 brsh .L662
8309 47f2 8091 0000 lds r24,ExpandBaro
8310 47f6 8150 subi r24,lo8(-(-1))
8311 47f8 00C0 rjmp .L902
8312 .L662:
8313 47fa 81E0 ldi r24,lo8(1)
8314 47fc 8093 0000 sts BaroAtLowerLimit.26,r24
8315 4800 00C0 rjmp .L669
8316 .L661:
8317 4802 8091 0000 lds r24,MessLuftdruck
8318 4806 9091 0000 lds r25,(MessLuftdruck)+1
8319 480a 8436 cpi r24,100
8320 480c 9105 cpc r25,__zero_reg__
8321 480e 00F4 brsh .L665
8322 4810 87B5 in r24,71-0x20
8323 4812 8031 cpi r24,lo8(16)
8324 4814 00F0 brlo .L666
8325 4816 8091 0000 lds r24,ExpandBaro
8326 481a 8F5F subi r24,lo8(-(1))
8327 .L902:
8328 481c 8093 0000 sts ExpandBaro,r24
8329 4820 9FE0 ldi r25,lo8(15)
8330 4822 8902 muls r24,r25
8331 4824 9001 movw r18,r0
8332 4826 1124 clr r1
8333 4828 8091 0000 lds r24,DruckOffsetSetting
8334 482c 821B sub r24,r18
8335 482e 87BD out 71-0x20,r24
8336 4830 8CE2 ldi r24,lo8(300)
8337 4832 91E0 ldi r25,hi8(300)
8338 4834 9093 0000 sts (beeptime)+1,r25
8339 4838 8093 0000 sts beeptime,r24
8340 483c 8EE5 ldi r24,lo8(350)
8341 483e 91E0 ldi r25,hi8(350)
8342 4840 9093 0000 sts (BaroExpandActive)+1,r25
8343 4844 8093 0000 sts BaroExpandActive,r24
8344 4848 00C0 rjmp .L669
8345 .L666:
8346 484a 81E0 ldi r24,lo8(1)
8347 484c 8093 0000 sts BaroAtUpperLimit.25,r24
8348 4850 00C0 rjmp .L669
8349 .L665:
8350 4852 F092 0000 sts BaroAtUpperLimit.25,r15
8351 4856 F092 0000 sts BaroAtLowerLimit.26,r15
8352 485a 00C0 rjmp .L669
8353 .L660:
8354 485c 8091 0000 lds r24,HoehenWert
8355 4860 9091 0000 lds r25,(HoehenWert)+1
8356 4864 A091 0000 lds r26,(HoehenWert)+2
8357 4868 B091 0000 lds r27,(HoehenWert)+3
8358 486c 64E0 ldi r22,4
8359 486e 880F 1: lsl r24
8360 4870 991F rol r25
8361 4872 AA1F rol r26
8362 4874 BB1F rol r27
8363 4876 6A95 dec r22
8364 4878 01F4 brne 1b
8365 487a 8093 0000 sts SummenHoehe,r24
8366 487e 9093 0000 sts (SummenHoehe)+1,r25
8367 4882 A093 0000 sts (SummenHoehe)+2,r26
8368 4886 B093 0000 sts (SummenHoehe)+3,r27
8369 488a 1093 0000 sts (VarioMeter)+1,r17
8370 488e 0093 0000 sts VarioMeter,r16
8371 4892 2150 subi r18,lo8(-(-1))
8372 4894 3040 sbci r19,hi8(-(-1))
8373 4896 3093 0000 sts (BaroExpandActive)+1,r19
8374 489a 2093 0000 sts BaroExpandActive,r18
8375 .L669:
8376 489e 2091 0000 lds r18,Parameter_HoehenSchalter
8377 48a2 41FF sbrs r20,1
8378 48a4 00C0 rjmp .L670
8379 48a6 2233 cpi r18,lo8(50)
8380 48a8 00F4 brsh .L671
8381 48aa 8091 0000 lds r24,delay.24
8382 48ae 8150 subi r24,lo8(-(-1))
8383 48b0 8093 0000 sts delay.24,r24
8384 48b4 8F3F cpi r24,lo8(-1)
8385 48b6 01F0 breq .+2
8386 48b8 00C0 rjmp .L677
8387 48ba 8091 0000 lds r24,SpeakHoTT
8388 48be 8823 tst r24
8389 48c0 01F4 brne .L673
8390 48c2 8091 0000 lds r24,HoehenReglerAktiv
8391 48c6 8823 tst r24
8392 48c8 01F0 breq .L673
8393 48ca 88E2 ldi r24,lo8(40)
8394 48cc 8093 0000 sts SpeakHoTT,r24
8395 .L673:
8396 48d0 1092 0000 sts HoehenReglerAktiv,__zero_reg__
8397 48d4 8091 0000 lds r24,HoehenWert
8398 48d8 9091 0000 lds r25,(HoehenWert)+1
8399 48dc A091 0000 lds r26,(HoehenWert)+2
8400 48e0 B091 0000 lds r27,(HoehenWert)+3
8401 48e4 8093 0000 sts SollHoehe,r24
8402 48e8 9093 0000 sts (SollHoehe)+1,r25
8403 48ec A093 0000 sts (SollHoehe)+2,r26
8404 48f0 B093 0000 sts (SollHoehe)+3,r27
8405 48f4 81E0 ldi r24,lo8(1)
8406 48f6 8093 0000 sts delay.24,r24
8407 48fa 00C0 rjmp .L677
8408 .L671:
8409 48fc 2734 cpi r18,lo8(71)
8410 48fe 00F0 brlo .L677
8411 4900 8091 0000 lds r24,SpeakHoTT
8412 4904 8823 tst r24
8413 4906 01F4 brne .L676
8414 4908 8091 0000 lds r24,HoehenReglerAktiv
8415 490c 8823 tst r24
8416 490e 01F4 brne .L676
8417 4910 87E2 ldi r24,lo8(39)
8418 4912 8093 0000 sts SpeakHoTT,r24
8419 .L676:
8420 4916 88EC ldi r24,lo8(-56)
8421 4918 8093 0000 sts delay.24,r24
8422 491c 00C0 rjmp .L903
8423 .L670:
8424 491e 8091 0000 lds r24,ExternHoehenValue
8425 4922 9091 0000 lds r25,(ExternHoehenValue)+1
8426 4926 820F add r24,r18
8427 4928 911D adc r25,__zero_reg__
8428 492a 2091 0000 lds r18,EE_Parameter+18
8429 492e 3327 clr r19
8430 4930 829F mul r24,r18
8431 4932 A001 movw r20,r0
8432 4934 839F mul r24,r19
8433 4936 500D add r21,r0
8434 4938 929F mul r25,r18
8435 493a 500D add r21,r0
8436 493c 1124 clr r1
8437 493e CA01 movw r24,r20
8438 4940 AA27 clr r26
8439 4942 97FD sbrc r25,7
8440 4944 A095 com r26
8441 4946 BA2F mov r27,r26
8442 4948 8093 0000 sts SollHoehe,r24
8443 494c 9093 0000 sts (SollHoehe)+1,r25
8444 4950 A093 0000 sts (SollHoehe)+2,r26
8445 4954 B093 0000 sts (SollHoehe)+3,r27
8446 .L903:
8447 4958 81E0 ldi r24,lo8(1)
8448 495a 8093 0000 sts HoehenReglerAktiv,r24
8449 .L677:
8450 495e 8091 0000 lds r24,IntegralNick
8451 4962 9091 0000 lds r25,(IntegralNick)+1
8452 4966 A091 0000 lds r26,(IntegralNick)+2
8453 496a B091 0000 lds r27,(IntegralNick)+3
8454 496e E090 0000 lds r14,GIER_GRAD_FAKTOR
8455 4972 F090 0000 lds r15,(GIER_GRAD_FAKTOR)+1
8456 4976 0091 0000 lds r16,(GIER_GRAD_FAKTOR)+2
8457 497a 1091 0000 lds r17,(GIER_GRAD_FAKTOR)+3
8458 497e BC01 movw r22,r24
8459 4980 CD01 movw r24,r26
8460 4982 A801 movw r20,r16
8461 4984 9701 movw r18,r14
8462 4986 0E94 0000 call __divmodsi4
8463 498a 5901 movw r10,r18
8464 498c 6A01 movw r12,r20
8465 498e 8091 0000 lds r24,IntegralRoll
8466 4992 9091 0000 lds r25,(IntegralRoll)+1
8467 4996 A091 0000 lds r26,(IntegralRoll)+2
8468 499a B091 0000 lds r27,(IntegralRoll)+3
8469 499e BC01 movw r22,r24
8470 49a0 CD01 movw r24,r26
8471 49a2 A801 movw r20,r16
8472 49a4 9701 movw r18,r14
8473 49a6 0E94 0000 call __divmodsi4
8474 49aa B901 movw r22,r18
8475 49ac C501 movw r24,r10
8476 49ae 0E94 0000 call ihypot
8477 49b2 5C01 movw r10,r24
8478 49b4 CC97 sbiw r24,60
8479 49b6 04F0 brlt .L678
8480 49b8 5CE3 ldi r21,lo8(60)
8481 49ba A52E mov r10,r21
8482 49bc B12C mov r11,__zero_reg__
8483 .L678:
8484 49be C501 movw r24,r10
8485 49c0 0E94 0000 call c_cos_8192
8486 49c4 5C01 movw r10,r24
8487 49c6 80E2 ldi r24,lo8(32)
8488 49c8 8093 0000 sts VarioCharacter,r24
8489 49cc 1092 0000 sts (AltitudeSetpointTrimming)+1,__zero_reg__
8490 49d0 1092 0000 sts AltitudeSetpointTrimming,__zero_reg__
8491 49d4 8091 0000 lds r24,HoehenReglerAktiv
8492 49d8 8823 tst r24
8493 49da 01F4 brne .+2
8494 49dc 00C0 rjmp .L679
8495 49de 8091 0000 lds r24,FC_StatusFlags
8496 49e2 9927 clr r25
8497 49e4 9C01 movw r18,r24
8498 49e6 2071 andi r18,lo8(16)
8499 49e8 3070 andi r19,hi8(16)
8500 49ea 84FD sbrc r24,4
8501 49ec 00C0 rjmp .L679
8502 49ee 8091 0000 lds r24,FC_StatusFlags2
8503 49f2 8260 ori r24,lo8(2)
8504 49f4 8093 0000 sts FC_StatusFlags2,r24
8505 49f8 7091 0000 lds r23,Parameter_ExtraConfig
8506 49fc 872F mov r24,r23
8507 49fe 9927 clr r25
8508 4a00 41E0 ldi r20,lo8(1)
8509 4a02 C42E mov r12,r20
8510 4a04 D12C mov r13,__zero_reg__
8511 4a06 C822 and r12,r24
8512 4a08 D922 and r13,r25
8513 4a0a 80FD sbrc r24,0
8514 4a0c 00C0 rjmp .L681
8515 4a0e 8091 0000 lds r24,Parameter_GlobalConfig
8516 4a12 81FD sbrc r24,1
8517 4a14 00C0 rjmp .L680
8518 .L681:
8519 4a16 C980 ldd r12,Y+1
8520 4a18 DA80 ldd r13,Y+2
8521 4a1a 3093 0000 sts (HeightTrimming.21)+1,r19
8522 4a1e 2093 0000 sts HeightTrimming.21,r18
8523 4a22 3093 0000 sts (AltitudeSetpointTrimming)+1,r19
8524 4a26 2093 0000 sts AltitudeSetpointTrimming,r18
8525 4a2a 8091 0000 lds r24,FC_StatusFlags
8526 4a2e 806C ori r24,lo8(-64)
8527 4a30 8093 0000 sts FC_StatusFlags,r24
8528 4a34 00C0 rjmp .L682
8529 .L680:
8530 4a36 8091 0000 lds r24,FC_StatusFlags
8531 4a3a 81FF sbrs r24,1
8532 4a3c 00C0 rjmp .L683
8533 4a3e 0091 0000 lds r16,StickGasHover
8534 4a42 1091 0000 lds r17,(StickGasHover)+1
8535 4a46 C801 movw r24,r16
8536 4a48 0F96 adiw r24,15
8537 4a4a 2090 0000 lds r2,StickGas
8538 4a4e 3090 0000 lds r3,(StickGas)+1
8539 4a52 8215 cp r24,r2
8540 4a54 9305 cpc r25,r3
8541 4a56 04F0 brlt .+2
8542 4a58 00C0 rjmp .L684
8543 4a5a 8091 0000 lds r24,BaroAtUpperLimit.25
8544 4a5e 8823 tst r24
8545 4a60 01F0 breq .+2
8546 4a62 00C0 rjmp .L684
8547 4a64 8091 0000 lds r24,FC_StatusFlags
8548 4a68 87FF sbrs r24,7
8549 4a6a 00C0 rjmp .L685
8550 4a6c 8091 0000 lds r24,FC_StatusFlags
8551 4a70 8F77 andi r24,lo8(127)
8552 4a72 8093 0000 sts FC_StatusFlags,r24
8553 4a76 8091 0000 lds r24,HoehenWert
8554 4a7a 9091 0000 lds r25,(HoehenWert)+1
8555 4a7e A091 0000 lds r26,(HoehenWert)+2
8556 4a82 B091 0000 lds r27,(HoehenWert)+3
8557 4a86 8093 0000 sts SollHoehe,r24
8558 4a8a 9093 0000 sts (SollHoehe)+1,r25
8559 4a8e A093 0000 sts (SollHoehe)+2,r26
8560 4a92 B093 0000 sts (SollHoehe)+3,r27
8561 .L685:
8562 4a96 8091 0000 lds r24,FC_StatusFlags
8563 4a9a 8064 ori r24,lo8(64)
8564 4a9c 8093 0000 sts FC_StatusFlags,r24
8565 4aa0 E090 0000 lds r14,Parameter_MaximumAltitude
8566 4aa4 EE20 tst r14
8567 4aa6 01F0 breq .L686
8568 4aa8 8091 0000 lds r24,SollHoehe
8569 4aac 9091 0000 lds r25,(SollHoehe)+1
8570 4ab0 A091 0000 lds r26,(SollHoehe)+2
8571 4ab4 B091 0000 lds r27,(SollHoehe)+3
8572 4ab8 BC01 movw r22,r24
8573 4aba CD01 movw r24,r26
8574 4abc 24E6 ldi r18,lo8(100)
8575 4abe 30E0 ldi r19,hi8(100)
8576 4ac0 40E0 ldi r20,hlo8(100)
8577 4ac2 50E0 ldi r21,hhi8(100)
8578 4ac4 0E94 0000 call __divmodsi4
8579 4ac8 8E2D mov r24,r14
8580 4aca 9927 clr r25
8581 4acc AA27 clr r26
8582 4ace BB27 clr r27
8583 4ad0 8217 cp r24,r18
8584 4ad2 9307 cpc r25,r19
8585 4ad4 A407 cpc r26,r20
8586 4ad6 B507 cpc r27,r21
8587 4ad8 04F4 brge .L686
8588 4ada D092 0000 sts (AltitudeSetpointTrimming)+1,r13
8589 4ade C092 0000 sts AltitudeSetpointTrimming,r12
8590 4ae2 00C0 rjmp .L687
8591 .L686:
8592 4ae4 C101 movw r24,r2
8593 4ae6 801B sub r24,r16
8594 4ae8 910B sbc r25,r17
8595 4aea 0F97 sbiw r24,15
8596 4aec 97FF sbrs r25,7
8597 4aee 00C0 rjmp .L688
8598 4af0 9095 com r25
8599 4af2 8195 neg r24
8600 4af4 9F4F sbci r25,lo8(-1)
8601 .L688:
8602 4af6 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8603 4afa 8093 0000 sts AltitudeSetpointTrimming,r24
8604 4afe 8BE2 ldi r24,lo8(43)
8605 4b00 8093 0000 sts VarioCharacter,r24
8606 .L687:
8607 4b04 1092 0000 sts WaypointTrimming,__zero_reg__
8608 4b08 00C0 rjmp .L689
8609 .L684:
8610 4b0a C801 movw r24,r16
8611 4b0c 0F97 sbiw r24,15
8612 4b0e 2816 cp r2,r24
8613 4b10 3906 cpc r3,r25
8614 4b12 04F4 brge .L690
8615 4b14 2091 0000 lds r18,BaroAtLowerLimit.26
8616 4b18 2223 tst r18
8617 4b1a 01F4 brne .L690
8618 4b1c 8091 0000 lds r24,FC_StatusFlags
8619 4b20 86FF sbrs r24,6
8620 4b22 00C0 rjmp .L691
8621 4b24 8091 0000 lds r24,FC_StatusFlags
8622 4b28 8F7B andi r24,lo8(-65)
8623 4b2a 8093 0000 sts FC_StatusFlags,r24
8624 4b2e 8091 0000 lds r24,HoehenWert
8625 4b32 9091 0000 lds r25,(HoehenWert)+1
8626 4b36 A091 0000 lds r26,(HoehenWert)+2
8627 4b3a B091 0000 lds r27,(HoehenWert)+3
8628 4b3e 8093 0000 sts SollHoehe,r24
8629 4b42 9093 0000 sts (SollHoehe)+1,r25
8630 4b46 A093 0000 sts (SollHoehe)+2,r26
8631 4b4a B093 0000 sts (SollHoehe)+3,r27
8632 .L691:
8633 4b4e 8091 0000 lds r24,FC_StatusFlags
8634 4b52 8068 ori r24,lo8(-128)
8635 4b54 8093 0000 sts FC_StatusFlags,r24
8636 4b58 C101 movw r24,r2
8637 4b5a 801B sub r24,r16
8638 4b5c 910B sbc r25,r17
8639 4b5e 0F96 adiw r24,15
8640 4b60 97FF sbrs r25,7
8641 4b62 00C0 rjmp .L692
8642 4b64 9095 com r25
8643 4b66 8195 neg r24
8644 4b68 9F4F sbci r25,lo8(-1)
8645 .L692:
8646 4b6a 9095 com r25
8647 4b6c 8195 neg r24
8648 4b6e 9F4F sbci r25,lo8(-1)
8649 4b70 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8650 4b74 8093 0000 sts AltitudeSetpointTrimming,r24
8651 4b78 8DE2 ldi r24,lo8(45)
8652 4b7a 8093 0000 sts VarioCharacter,r24
8653 4b7e 2093 0000 sts WaypointTrimming,r18
8654 4b82 00C0 rjmp .L689
8655 .L690:
8656 4b84 8DE3 ldi r24,lo8(61)
8657 4b86 8093 0000 sts VarioCharacter,r24
8658 4b8a 6091 0000 lds r22,FromNC_AltitudeSpeed
8659 4b8e 6623 tst r22
8660 4b90 01F0 breq .L694
8661 4b92 2091 0000 lds r18,FromNC_AltitudeSetpoint
8662 4b96 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8663 4b9a 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8664 4b9e 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8665 4ba2 8091 0000 lds r24,SollHoehe
8666 4ba6 9091 0000 lds r25,(SollHoehe)+1
8667 4baa A091 0000 lds r26,(SollHoehe)+2
8668 4bae B091 0000 lds r27,(SollHoehe)+3
8669 4bb2 8217 cp r24,r18
8670 4bb4 9307 cpc r25,r19
8671 4bb6 A407 cpc r26,r20
8672 4bb8 B507 cpc r27,r21
8673 4bba 04F4 brge .L694
8674 4bbc 8091 0000 lds r24,FC_StatusFlags
8675 4bc0 8064 ori r24,lo8(64)
8676 4bc2 8093 0000 sts FC_StatusFlags,r24
8677 4bc6 862F mov r24,r22
8678 4bc8 9927 clr r25
8679 4bca 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8680 4bce 8093 0000 sts AltitudeSetpointTrimming,r24
8681 4bd2 8AE0 ldi r24,lo8(10)
8682 4bd4 8093 0000 sts WaypointTrimming,r24
8683 4bd8 8EE5 ldi r24,lo8(94)
8684 4bda 8093 0000 sts VarioCharacter,r24
8685 4bde 8091 0000 lds r24,FC_StatusFlags
8686 4be2 87FF sbrs r24,7
8687 4be4 00C0 rjmp .L689
8688 4be6 8091 0000 lds r24,FC_StatusFlags
8689 4bea 8F77 andi r24,lo8(127)
8690 4bec 00C0 rjmp .L905
8691 .L694:
8692 4bee 6623 tst r22
8693 4bf0 01F4 brne .+2
8694 4bf2 00C0 rjmp .L697
8695 4bf4 2091 0000 lds r18,FromNC_AltitudeSetpoint
8696 4bf8 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8697 4bfc 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8698 4c00 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8699 4c04 8091 0000 lds r24,SollHoehe
8700 4c08 9091 0000 lds r25,(SollHoehe)+1
8701 4c0c A091 0000 lds r26,(SollHoehe)+2
8702 4c10 B091 0000 lds r27,(SollHoehe)+3
8703 4c14 2817 cp r18,r24
8704 4c16 3907 cpc r19,r25
8705 4c18 4A07 cpc r20,r26
8706 4c1a 5B07 cpc r21,r27
8707 4c1c 04F4 brge .L697
8708 4c1e 8091 0000 lds r24,FC_StatusFlags
8709 4c22 8068 ori r24,lo8(-128)
8710 4c24 8093 0000 sts FC_StatusFlags,r24
8711 4c28 862F mov r24,r22
8712 4c2a 9927 clr r25
8713 4c2c 9095 com r25
8714 4c2e 8195 neg r24
8715 4c30 9F4F sbci r25,lo8(-1)
8716 4c32 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8717 4c36 8093 0000 sts AltitudeSetpointTrimming,r24
8718 4c3a 86EF ldi r24,lo8(-10)
8719 4c3c 8093 0000 sts WaypointTrimming,r24
8720 4c40 86E7 ldi r24,lo8(118)
8721 4c42 8093 0000 sts VarioCharacter,r24
8722 4c46 8091 0000 lds r24,FC_StatusFlags
8723 4c4a 86FF sbrs r24,6
8724 4c4c 00C0 rjmp .L689
8725 4c4e 8091 0000 lds r24,FC_StatusFlags
8726 4c52 8F7B andi r24,lo8(-65)
8727 .L905:
8728 4c54 8093 0000 sts FC_StatusFlags,r24
8729 4c58 8091 0000 lds r24,HoehenWert
8730 4c5c 9091 0000 lds r25,(HoehenWert)+1
8731 4c60 A091 0000 lds r26,(HoehenWert)+2
8732 4c64 B091 0000 lds r27,(HoehenWert)+3
8733 4c68 8093 0000 sts SollHoehe,r24
8734 4c6c 9093 0000 sts (SollHoehe)+1,r25
8735 4c70 A093 0000 sts (SollHoehe)+2,r26
8736 4c74 B093 0000 sts (SollHoehe)+3,r27
8737 4c78 00C0 rjmp .L689
8738 .L697:
8739 4c7a 8091 0000 lds r24,FC_StatusFlags
8740 4c7e 807C andi r24,lo8(-64)
8741 4c80 01F4 brne .+2
8742 4c82 00C0 rjmp .L689
8743 4c84 8091 0000 lds r24,WaypointTrimming
8744 4c88 8823 tst r24
8745 4c8a 01F4 brne .L701
8746 4c8c E090 0000 lds r14,HoehenWert
8747 4c90 F090 0000 lds r15,(HoehenWert)+1
8748 4c94 0091 0000 lds r16,(HoehenWert)+2
8749 4c98 1091 0000 lds r17,(HoehenWert)+3
8750 4c9c D801 movw r26,r16
8751 4c9e C701 movw r24,r14
8752 4ca0 8058 subi r24,lo8(-(-128))
8753 4ca2 9040 sbci r25,hi8(-(-128))
8754 4ca4 A040 sbci r26,hlo8(-(-128))
8755 4ca6 B040 sbci r27,hhi8(-(-128))
8756 4ca8 2091 0000 lds r18,SollHoehe
8757 4cac 3091 0000 lds r19,(SollHoehe)+1
8758 4cb0 4091 0000 lds r20,(SollHoehe)+2
8759 4cb4 5091 0000 lds r21,(SollHoehe)+3
8760 4cb8 8217 cp r24,r18
8761 4cba 9307 cpc r25,r19
8762 4cbc A407 cpc r26,r20
8763 4cbe B507 cpc r27,r21
8764 4cc0 04F4 brge .L904
8765 4cc2 D801 movw r26,r16
8766 4cc4 C701 movw r24,r14
8767 4cc6 8058 subi r24,lo8(-(128))
8768 4cc8 9F4F sbci r25,hi8(-(128))
8769 4cca AF4F sbci r26,hlo8(-(128))
8770 4ccc BF4F sbci r27,hhi8(-(128))
8771 4cce 2817 cp r18,r24
8772 4cd0 3907 cpc r19,r25
8773 4cd2 4A07 cpc r20,r26
8774 4cd4 5B07 cpc r21,r27
8775 4cd6 04F0 brlt .L705
8776 .L904:
8777 4cd8 8093 0000 sts SollHoehe,r24
8778 4cdc 9093 0000 sts (SollHoehe)+1,r25
8779 4ce0 A093 0000 sts (SollHoehe)+2,r26
8780 4ce4 B093 0000 sts (SollHoehe)+3,r27
8781 4ce8 00C0 rjmp .L705
8782 .L701:
8783 4cea 1092 0000 sts WaypointTrimming,__zero_reg__
8784 .L705:
8785 4cee 8091 0000 lds r24,FC_StatusFlags
8786 4cf2 8F73 andi r24,lo8(63)
8787 4cf4 8093 0000 sts FC_StatusFlags,r24
8788 4cf8 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8789 4cfc 1092 0000 sts HeightTrimming.21,__zero_reg__
8790 4d00 71FF sbrs r23,1
8791 4d02 00C0 rjmp .L706
8792 4d04 84EF ldi r24,lo8(500)
8793 4d06 91E0 ldi r25,hi8(500)
8794 4d08 9093 0000 sts (beeptime)+1,r25
8795 4d0c 8093 0000 sts beeptime,r24
8796 .L706:
8797 4d10 8091 0000 lds r24,StartTrigger
8798 4d14 8823 tst r24
8799 4d16 01F4 brne .L689
8800 4d18 8091 0000 lds r24,HoehenWert
8801 4d1c 9091 0000 lds r25,(HoehenWert)+1
8802 4d20 A091 0000 lds r26,(HoehenWert)+2
8803 4d24 B091 0000 lds r27,(HoehenWert)+3
8804 4d28 C397 sbiw r24,51
8805 4d2a A105 cpc r26,__zero_reg__
8806 4d2c B105 cpc r27,__zero_reg__
8807 4d2e 04F0 brlt .L689
8808 4d30 81E0 ldi r24,lo8(1)
8809 4d32 8093 0000 sts StartTrigger,r24
8810 .L689:
8811 4d36 6091 0000 lds r22,HeightTrimming.21
8812 4d3a 7091 0000 lds r23,(HeightTrimming.21)+1
8813 4d3e 8091 0000 lds r24,AltitudeSetpointTrimming
8814 4d42 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
8815 4d46 680F add r22,r24
8816 4d48 791F adc r23,r25
8817 4d4a 7093 0000 sts (HeightTrimming.21)+1,r23
8818 4d4e 6093 0000 sts HeightTrimming.21,r22
8819 4d52 CB01 movw r24,r22
8820 4d54 77FF sbrs r23,7
8821 4d56 00C0 rjmp .L709
8822 4d58 8827 clr r24
8823 4d5a 9927 clr r25
8824 4d5c 861B sub r24,r22
8825 4d5e 970B sbc r25,r23
8826 .L709:
8827 4d60 855F subi r24,lo8(501)
8828 4d62 9140 sbci r25,hi8(501)
8829 4d64 04F4 brge .+2
8830 4d66 00C0 rjmp .L708
8831 4d68 4091 0000 lds r20,WaypointTrimming
8832 4d6c 4423 tst r20
8833 4d6e 01F0 breq .L710
8834 4d70 8091 0000 lds r24,FromNC_AltitudeSetpoint
8835 4d74 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8836 4d78 2091 0000 lds r18,SollHoehe
8837 4d7c 3091 0000 lds r19,(SollHoehe)+1
8838 4d80 821B sub r24,r18
8839 4d82 930B sbc r25,r19
8840 4d84 0996 adiw r24,9
8841 4d86 4397 sbiw r24,19
8842 4d88 00F4 brsh .L711
8843 4d8a 8091 0000 lds r24,FromNC_AltitudeSetpoint
8844 4d8e 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8845 4d92 A091 0000 lds r26,(FromNC_AltitudeSetpoint)+2
8846 4d96 B091 0000 lds r27,(FromNC_AltitudeSetpoint)+3
8847 4d9a 00C0 rjmp .L907
8848 .L711:
8849 4d9c 242F mov r18,r20
8850 4d9e 3327 clr r19
8851 4da0 27FD sbrc r18,7
8852 4da2 3095 com r19
8853 4da4 432F mov r20,r19
8854 4da6 532F mov r21,r19
8855 4da8 8091 0000 lds r24,SollHoehe
8856 4dac 9091 0000 lds r25,(SollHoehe)+1
8857 4db0 A091 0000 lds r26,(SollHoehe)+2
8858 4db4 B091 0000 lds r27,(SollHoehe)+3
8859 4db8 820F add r24,r18
8860 4dba 931F adc r25,r19
8861 4dbc A41F adc r26,r20
8862 4dbe B51F adc r27,r21
8863 .L907:
8864 4dc0 8093 0000 sts SollHoehe,r24
8865 4dc4 9093 0000 sts (SollHoehe)+1,r25
8866 4dc8 A093 0000 sts (SollHoehe)+2,r26
8867 4dcc B093 0000 sts (SollHoehe)+3,r27
8868 4dd0 00C0 rjmp .L713
8869 .L710:
8870 4dd2 8091 0000 lds r24,EE_Parameter+18
8871 4dd6 2091 0000 lds r18,SollHoehe
8872 4dda 3091 0000 lds r19,(SollHoehe)+1
8873 4dde 4091 0000 lds r20,(SollHoehe)+2
8874 4de2 5091 0000 lds r21,(SollHoehe)+3
8875 4de6 1616 cp __zero_reg__,r22
8876 4de8 1706 cpc __zero_reg__,r23
8877 4dea 04F4 brge .L714
8878 4dec 63E0 ldi r22,lo8(3)
8879 4dee 0E94 0000 call __udivmodqi4
8880 4df2 280F add r18,r24
8881 4df4 311D adc r19,__zero_reg__
8882 4df6 411D adc r20,__zero_reg__
8883 4df8 511D adc r21,__zero_reg__
8884 4dfa 00C0 rjmp .L906
8885 .L714:
8886 4dfc 63E0 ldi r22,lo8(3)
8887 4dfe 0E94 0000 call __udivmodqi4
8888 4e02 281B sub r18,r24
8889 4e04 3109 sbc r19,__zero_reg__
8890 4e06 4109 sbc r20,__zero_reg__
8891 4e08 5109 sbc r21,__zero_reg__
8892 .L906:
8893 4e0a 2093 0000 sts SollHoehe,r18
8894 4e0e 3093 0000 sts (SollHoehe)+1,r19
8895 4e12 4093 0000 sts (SollHoehe)+2,r20
8896 4e16 5093 0000 sts (SollHoehe)+3,r21
8897 .L713:
8898 4e1a 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8899 4e1e 1092 0000 sts HeightTrimming.21,__zero_reg__
8900 4e22 E090 0000 lds r14,HoehenWert
8901 4e26 F090 0000 lds r15,(HoehenWert)+1
8902 4e2a 0091 0000 lds r16,(HoehenWert)+2
8903 4e2e 1091 0000 lds r17,(HoehenWert)+3
8904 4e32 D801 movw r26,r16
8905 4e34 C701 movw r24,r14
8906 4e36 8050 subi r24,lo8(-(-1024))
8907 4e38 9440 sbci r25,hi8(-(-1024))
8908 4e3a A040 sbci r26,hlo8(-(-1024))
8909 4e3c B040 sbci r27,hhi8(-(-1024))
8910 4e3e 2091 0000 lds r18,SollHoehe
8911 4e42 3091 0000 lds r19,(SollHoehe)+1
8912 4e46 4091 0000 lds r20,(SollHoehe)+2
8913 4e4a 5091 0000 lds r21,(SollHoehe)+3
8914 4e4e 8217 cp r24,r18
8915 4e50 9307 cpc r25,r19
8916 4e52 A407 cpc r26,r20
8917 4e54 B507 cpc r27,r21
8918 4e56 04F4 brge .L908
8919 4e58 D801 movw r26,r16
8920 4e5a C701 movw r24,r14
8921 4e5c 8050 subi r24,lo8(-(1024))
8922 4e5e 9C4F sbci r25,hi8(-(1024))
8923 4e60 AF4F sbci r26,hlo8(-(1024))
8924 4e62 BF4F sbci r27,hhi8(-(1024))
8925 4e64 2817 cp r18,r24
8926 4e66 3907 cpc r19,r25
8927 4e68 4A07 cpc r20,r26
8928 4e6a 5B07 cpc r21,r27
8929 4e6c 04F0 brlt .L717
8930 .L908:
8931 4e6e 8093 0000 sts SollHoehe,r24
8932 4e72 9093 0000 sts (SollHoehe)+1,r25
8933 4e76 A093 0000 sts (SollHoehe)+2,r26
8934 4e7a B093 0000 sts (SollHoehe)+3,r27
8935 .L717:
8936 4e7e 8091 0000 lds r24,Parameter_ExtraConfig
8937 4e82 81FF sbrs r24,1
8938 4e84 00C0 rjmp .L719
8939 4e86 84E6 ldi r24,lo8(100)
8940 4e88 90E0 ldi r25,hi8(100)
8941 4e8a 9093 0000 sts (beeptime)+1,r25
8942 4e8e 8093 0000 sts beeptime,r24
8943 .L719:
8944 4e92 8091 0000 lds r24,EE_Parameter+22
8945 4e96 8823 tst r24
8946 4e98 01F4 brne .L708
8947 4e9a 8091 0000 lds r24,FromNC_AltitudeSpeed
8948 4e9e 8823 tst r24
8949 4ea0 01F4 brne .L708
8950 4ea2 4091 0000 lds r20,HoverGas
8951 4ea6 5091 0000 lds r21,(HoverGas)+1
8952 4eaa 57FF sbrs r21,7
8953 4eac 00C0 rjmp .L721
8954 4eae 4D5F subi r20,lo8(-(3))
8955 4eb0 5F4F sbci r21,hi8(-(3))
8956 .L721:
8957 4eb2 5595 asr r21
8958 4eb4 4795 ror r20
8959 4eb6 5595 asr r21
8960 4eb8 4795 ror r20
8961 4eba 8091 0000 lds r24,UBat
8962 4ebe 9091 0000 lds r25,(UBat)+1
8963 4ec2 2091 0000 lds r18,BattLowVoltageWarning
8964 4ec6 3327 clr r19
8965 4ec8 489F mul r20,r24
8966 4eca F001 movw r30,r0
8967 4ecc 499F mul r20,r25
8968 4ece F00D add r31,r0
8969 4ed0 589F mul r21,r24
8970 4ed2 F00D add r31,r0
8971 4ed4 1124 clr r1
8972 4ed6 CF01 movw r24,r30
8973 4ed8 B901 movw r22,r18
8974 4eda 0E94 0000 call __divmodhi4
8975 4ede 7093 0000 sts (StickGasHover)+1,r23
8976 4ee2 6093 0000 sts StickGasHover,r22
8977 4ee6 6634 cpi r22,70
8978 4ee8 7105 cpc r23,__zero_reg__
8979 4eea 04F4 brge .L722
8980 4eec 86E4 ldi r24,lo8(70)
8981 4eee 90E0 ldi r25,hi8(70)
8982 4ef0 00C0 rjmp .L909
8983 .L722:
8984 4ef2 6739 cpi r22,151
8985 4ef4 7105 cpc r23,__zero_reg__
8986 4ef6 04F0 brlt .L708
8987 4ef8 86E9 ldi r24,lo8(150)
8988 4efa 90E0 ldi r25,hi8(150)
8989 .L909:
8990 4efc 9093 0000 sts (StickGasHover)+1,r25
8991 4f00 8093 0000 sts StickGasHover,r24
8992 .L708:
8993 4f04 8091 0000 lds r24,BaroExpandActive
8994 4f08 9091 0000 lds r25,(BaroExpandActive)+1
8995 4f0c 892B or r24,r25
8996 4f0e 01F0 breq .L726
8997 4f10 8091 0000 lds r24,HoehenWert
8998 4f14 9091 0000 lds r25,(HoehenWert)+1
8999 4f18 A091 0000 lds r26,(HoehenWert)+2
9000 4f1c B091 0000 lds r27,(HoehenWert)+3
9001 4f20 8093 0000 sts SollHoehe,r24
9002 4f24 9093 0000 sts (SollHoehe)+1,r25
9003 4f28 A093 0000 sts (SollHoehe)+2,r26
9004 4f2c B093 0000 sts (SollHoehe)+3,r27
9005 4f30 00C0 rjmp .L726
9006 .L683:
9007 4f32 8091 0000 lds r24,HoehenWert
9008 4f36 9091 0000 lds r25,(HoehenWert)+1
9009 4f3a A091 0000 lds r26,(HoehenWert)+2
9010 4f3e B091 0000 lds r27,(HoehenWert)+3
9011 4f42 8059 subi r24,lo8(-(-400))
9012 4f44 9140 sbci r25,hi8(-(-400))
9013 4f46 A040 sbci r26,hlo8(-(-400))
9014 4f48 B040 sbci r27,hhi8(-(-400))
9015 4f4a 8093 0000 sts SollHoehe,r24
9016 4f4e 9093 0000 sts (SollHoehe)+1,r25
9017 4f52 A093 0000 sts (SollHoehe)+2,r26
9018 4f56 B093 0000 sts (SollHoehe)+3,r27
9019 4f5a 8091 0000 lds r24,EE_Parameter+22
9020 4f5e 8823 tst r24
9021 4f60 01F0 breq .L727
9022 4f62 9927 clr r25
9023 4f64 00C0 rjmp .L910
9024 .L727:
9025 4f66 88E7 ldi r24,lo8(120)
9026 4f68 90E0 ldi r25,hi8(120)
9027 .L910:
9028 4f6a 9093 0000 sts (StickGasHover)+1,r25
9029 4f6e 8093 0000 sts StickGasHover,r24
9030 4f72 E980 ldd r14,Y+1
9031 4f74 FA80 ldd r15,Y+2
9032 4f76 F092 0000 sts (HoverGas)+1,r15
9033 4f7a E092 0000 sts HoverGas,r14
9034 4f7e 8EE2 ldi r24,lo8(46)
9035 4f80 8093 0000 sts VarioCharacter,r24
9036 .L726:
9037 4f84 C090 0000 lds r12,HoverGas
9038 4f88 D090 0000 lds r13,(HoverGas)+1
9039 .L682:
9040 4f8c E090 0000 lds r14,HoehenWert
9041 4f90 F090 0000 lds r15,(HoehenWert)+1
9042 4f94 0091 0000 lds r16,(HoehenWert)+2
9043 4f98 1091 0000 lds r17,(HoehenWert)+3
9044 4f9c 2091 0000 lds r18,SollHoehe
9045 4fa0 3091 0000 lds r19,(SollHoehe)+1
9046 4fa4 4091 0000 lds r20,(SollHoehe)+2
9047 4fa8 5091 0000 lds r21,(SollHoehe)+3
9048 4fac 2E15 cp r18,r14
9049 4fae 3F05 cpc r19,r15
9050 4fb0 4007 cpc r20,r16
9051 4fb2 5107 cpc r21,r17
9052 4fb4 04F0 brlt .L730
9053 4fb6 8091 0000 lds r24,Parameter_ExtraConfig
9054 4fba 80FD sbrc r24,0
9055 4fbc 00C0 rjmp .L788
9056 .L730:
9057 4fbe 8091 0000 lds r24,BaroExpandActive
9058 4fc2 9091 0000 lds r25,(BaroExpandActive)+1
9059 4fc6 892B or r24,r25
9060 4fc8 01F0 breq .L731
9061 4fca C090 0000 lds r12,HoverGas
9062 4fce D090 0000 lds r13,(HoverGas)+1
9063 4fd2 00E0 ldi r16,lo8(0)
9064 4fd4 10E0 ldi r17,hi8(0)
9065 4fd6 00C0 rjmp .L732
9066 .L731:
9067 4fd8 D801 movw r26,r16
9068 4fda C701 movw r24,r14
9069 4fdc 821B sub r24,r18
9070 4fde 930B sbc r25,r19
9071 4fe0 A40B sbc r26,r20
9072 4fe2 B50B sbc r27,r21
9073 4fe4 8093 0000 sts tmp_long.1,r24
9074 4fe8 9093 0000 sts (tmp_long.1)+1,r25
9075 4fec A093 0000 sts (tmp_long.1)+2,r26
9076 4ff0 B093 0000 sts (tmp_long.1)+3,r27
9077 4ff4 8230 cpi r24,lo8(-32766)
9078 4ff6 00E8 ldi r16,hi8(-32766)
9079 4ff8 9007 cpc r25,r16
9080 4ffa 0FEF ldi r16,hlo8(-32766)
9081 4ffc A007 cpc r26,r16
9082 4ffe 0FEF ldi r16,hhi8(-32766)
9083 5000 B007 cpc r27,r16
9084 5002 04F4 brge .L733
9085 5004 81E0 ldi r24,lo8(-32767)
9086 5006 90E8 ldi r25,hi8(-32767)
9087 5008 AFEF ldi r26,hlo8(-32767)
9088 500a BFEF ldi r27,hhi8(-32767)
9089 500c 00C0 rjmp .L911
9090 .L733:
9091 500e 8F5F subi r24,lo8(32767)
9092 5010 9F47 sbci r25,hi8(32767)
9093 5012 A040 sbci r26,hlo8(32767)
9094 5014 B040 sbci r27,hhi8(32767)
9095 5016 04F0 brlt .L734
9096 5018 8FEF ldi r24,lo8(32767)
9097 501a 9FE7 ldi r25,hi8(32767)
9098 501c A0E0 ldi r26,hlo8(32767)
9099 501e B0E0 ldi r27,hhi8(32767)
9100 .L911:
9101 5020 8093 0000 sts tmp_long.1,r24
9102 5024 9093 0000 sts (tmp_long.1)+1,r25
9103 5028 A093 0000 sts (tmp_long.1)+2,r26
9104 502c B093 0000 sts (tmp_long.1)+3,r27
9105 .L734:
9106 5030 0091 0000 lds r16,tmp_long.1
9107 5034 1091 0000 lds r17,(tmp_long.1)+1
9108 5038 8091 0000 lds r24,Parameter_Hoehe_P
9109 503c 282F mov r18,r24
9110 503e 3327 clr r19
9111 5040 4427 clr r20
9112 5042 5527 clr r21
9113 5044 8091 0000 lds r24,tmp_long.1
9114 5048 9091 0000 lds r25,(tmp_long.1)+1
9115 504c A091 0000 lds r26,(tmp_long.1)+2
9116 5050 B091 0000 lds r27,(tmp_long.1)+3
9117 5054 BC01 movw r22,r24
9118 5056 CD01 movw r24,r26
9119 5058 0E94 0000 call __mulsi3
9120 505c 97FF sbrs r25,7
9121 505e 00C0 rjmp .L736
9122 5060 615E subi r22,lo8(-(31))
9123 5062 7F4F sbci r23,hi8(-(31))
9124 5064 8F4F sbci r24,hlo8(-(31))
9125 5066 9F4F sbci r25,hhi8(-(31))
9126 .L736:
9127 5068 25E0 ldi r18,5
9128 506a 9595 1: asr r25
9129 506c 8795 ror r24
9130 506e 7795 ror r23
9131 5070 6795 ror r22
9132 5072 2A95 dec r18
9133 5074 01F4 brne 1b
9134 5076 6093 0000 sts tmp_long.1,r22
9135 507a 7093 0000 sts (tmp_long.1)+1,r23
9136 507e 8093 0000 sts (tmp_long.1)+2,r24
9137 5082 9093 0000 sts (tmp_long.1)+3,r25
9138 5086 6530 cpi r22,lo8(-507)
9139 5088 2EEF ldi r18,hi8(-507)
9140 508a 7207 cpc r23,r18
9141 508c 2FEF ldi r18,hlo8(-507)
9142 508e 8207 cpc r24,r18
9143 5090 2FEF ldi r18,hhi8(-507)
9144 5092 9207 cpc r25,r18
9145 5094 04F4 brge .L737
9146 5096 84E0 ldi r24,lo8(-508)
9147 5098 9EEF ldi r25,hi8(-508)
9148 509a AFEF ldi r26,hlo8(-508)
9149 509c BFEF ldi r27,hhi8(-508)
9150 509e 00C0 rjmp .L912
9151 .L737:
9152 50a0 6050 subi r22,lo8(1024)
9153 50a2 7440 sbci r23,hi8(1024)
9154 50a4 8040 sbci r24,hlo8(1024)
9155 50a6 9040 sbci r25,hhi8(1024)
9156 50a8 04F0 brlt .L738
9157 50aa 80E0 ldi r24,lo8(1024)
9158 50ac 94E0 ldi r25,hi8(1024)
9159 50ae A0E0 ldi r26,hlo8(1024)
9160 50b0 B0E0 ldi r27,hhi8(1024)
9161 .L912:
9162 50b2 8093 0000 sts tmp_long.1,r24
9163 50b6 9093 0000 sts (tmp_long.1)+1,r25
9164 50ba A093 0000 sts (tmp_long.1)+2,r26
9165 50be B093 0000 sts (tmp_long.1)+3,r27
9166 .L738:
9167 50c2 8090 0000 lds r8,tmp_long.1
9168 50c6 9090 0000 lds r9,(tmp_long.1)+1
9169 50ca 2091 0000 lds r18,VarioMeter
9170 50ce 3091 0000 lds r19,(VarioMeter)+1
9171 50d2 37FF sbrs r19,7
9172 50d4 00C0 rjmp .L740
9173 50d6 295F subi r18,lo8(-(7))
9174 50d8 3F4F sbci r19,hi8(-(7))
9175 .L740:
9176 50da 83E0 ldi r24,3
9177 50dc 3595 1: asr r19
9178 50de 2795 ror r18
9179 50e0 8A95 dec r24
9180 50e2 01F4 brne 1b
9181 50e4 4FEF ldi r20,hi8(-126)
9182 50e6 2238 cpi r18,lo8(-126)
9183 50e8 3407 cpc r19,r20
9184 50ea 04F4 brge .L741
9185 50ec 21E8 ldi r18,lo8(-127)
9186 50ee 3FEF ldi r19,hi8(-127)
9187 50f0 00C0 rjmp .L742
9188 .L741:
9189 50f2 2038 cpi r18,128
9190 50f4 3105 cpc r19,__zero_reg__
9191 50f6 04F0 brlt .L742
9192 50f8 20E8 ldi r18,lo8(128)
9193 50fa 30E0 ldi r19,hi8(128)
9194 .L742:
9195 50fc C901 movw r24,r18
9196 50fe AA27 clr r26
9197 5100 97FD sbrc r25,7
9198 5102 A095 com r26
9199 5104 BA2F mov r27,r26
9200 5106 2091 0000 lds r18,Parameter_Luftdruck_D
9201 510a 3327 clr r19
9202 510c 4427 clr r20
9203 510e 5527 clr r21
9204 5110 BC01 movw r22,r24
9205 5112 CD01 movw r24,r26
9206 5114 0E94 0000 call __mulsi3
9207 5118 97FF sbrs r25,7
9208 511a 00C0 rjmp .L744
9209 511c 6D5F subi r22,lo8(-(3))
9210 511e 7F4F sbci r23,hi8(-(3))
9211 5120 8F4F sbci r24,hlo8(-(3))
9212 5122 9F4F sbci r25,hhi8(-(3))
9213 .L744:
9214 5124 B2E0 ldi r27,2
9215 5126 9595 1: asr r25
9216 5128 8795 ror r24
9217 512a 7795 ror r23
9218 512c 6795 ror r22
9219 512e BA95 dec r27
9220 5130 01F4 brne 1b
9221 5132 9B01 movw r18,r22
9222 5134 5FEF ldi r21,hi8(-255)
9223 5136 6130 cpi r22,lo8(-255)
9224 5138 7507 cpc r23,r21
9225 513a 04F4 brge .L745
9226 513c 20E0 ldi r18,lo8(-256)
9227 513e 3FEF ldi r19,hi8(-256)
9228 5140 00C0 rjmp .L746
9229 .L745:
9230 5142 6F3F cpi r22,255
9231 5144 7105 cpc r23,__zero_reg__
9232 5146 01F0 breq .L746
9233 5148 04F0 brlt .L746
9234 514a 20E0 ldi r18,lo8(256)
9235 514c 31E0 ldi r19,hi8(256)
9236 .L746:
9237 514e 8091 0000 lds r24,FC_StatusFlags
9238 5152 807C andi r24,lo8(-64)
9239 5154 01F0 breq .L748
9240 5156 C901 movw r24,r18
9241 5158 37FD sbrc r19,7
9242 515a 0396 adiw r24,3
9243 .L749:
9244 515c 9C01 movw r18,r24
9245 515e 3595 asr r19
9246 5160 2795 ror r18
9247 5162 3595 asr r19
9248 5164 2795 ror r18
9249 5166 00C0 rjmp .L750
9250 .L748:
9251 5168 8091 0000 lds r24,Parameter_ExtraConfig
9252 516c 80FF sbrs r24,0
9253 516e 00C0 rjmp .L750
9254 5170 C901 movw r24,r18
9255 5172 37FD sbrc r19,7
9256 5174 0796 adiw r24,7
9257 .L752:
9258 5176 9C01 movw r18,r24
9259 5178 F3E0 ldi r31,3
9260 517a 3595 1: asr r19
9261 517c 2795 ror r18
9262 517e FA95 dec r31
9263 5180 01F4 brne 1b
9264 .L750:
9265 5182 820E add r8,r18
9266 5184 931E adc r9,r19
9267 .L732:
9268 5186 2091 0000 lds r18,Parameter_Hoehe_ACC_Wirkung
9269 518a 2223 tst r18
9270 518c 01F4 brne .+2
9271 518e 00C0 rjmp .L753
9272 5190 6091 0000 lds r22,Mess_Integral_Hoch
9273 5194 7091 0000 lds r23,(Mess_Integral_Hoch)+1
9274 5198 8091 0000 lds r24,(Mess_Integral_Hoch)+2
9275 519c 9091 0000 lds r25,(Mess_Integral_Hoch)+3
9276 51a0 97FF sbrs r25,7
9277 51a2 00C0 rjmp .L754
9278 51a4 6158 subi r22,lo8(-(127))
9279 51a6 7F4F sbci r23,hi8(-(127))
9280 51a8 8F4F sbci r24,hlo8(-(127))
9281 51aa 9F4F sbci r25,hhi8(-(127))
9282 .L754:
9283 51ac E7E0 ldi r30,7
9284 51ae 9595 1: asr r25
9285 51b0 8795 ror r24
9286 51b2 7795 ror r23
9287 51b4 6795 ror r22
9288 51b6 EA95 dec r30
9289 51b8 01F4 brne 1b
9290 51ba 3327 clr r19
9291 51bc 4427 clr r20
9292 51be 5527 clr r21
9293 51c0 0E94 0000 call __mulsi3
9294 51c4 97FF sbrs r25,7
9295 51c6 00C0 rjmp .L755
9296 51c8 615E subi r22,lo8(-(31))
9297 51ca 7F4F sbci r23,hi8(-(31))
9298 51cc 8F4F sbci r24,hlo8(-(31))
9299 51ce 9F4F sbci r25,hhi8(-(31))
9300 .L755:
9301 51d0 55E0 ldi r21,5
9302 51d2 9595 1: asr r25
9303 51d4 8795 ror r24
9304 51d6 7795 ror r23
9305 51d8 6795 ror r22
9306 51da 5A95 dec r21
9307 51dc 01F4 brne 1b
9308 51de 6093 0000 sts tmp_long.1,r22
9309 51e2 7093 0000 sts (tmp_long.1)+1,r23
9310 51e6 8093 0000 sts (tmp_long.1)+2,r24
9311 51ea 9093 0000 sts (tmp_long.1)+3,r25
9312 51ee 6138 cpi r22,lo8(-127)
9313 51f0 AFEF ldi r26,hi8(-127)
9314 51f2 7A07 cpc r23,r26
9315 51f4 AFEF ldi r26,hlo8(-127)
9316 51f6 8A07 cpc r24,r26
9317 51f8 AFEF ldi r26,hhi8(-127)
9318 51fa 9A07 cpc r25,r26
9319 51fc 04F4 brge .L756
9320 51fe 80E8 ldi r24,lo8(-128)
9321 5200 9FEF ldi r25,hi8(-128)
9322 5202 AFEF ldi r26,hlo8(-128)
9323 5204 BFEF ldi r27,hhi8(-128)
9324 5206 00C0 rjmp .L913
9325 .L756:
9326 5208 6F3F cpi r22,lo8(255)
9327 520a 7105 cpc r23,__zero_reg__
9328 520c 8105 cpc r24,__zero_reg__
9329 520e 9105 cpc r25,__zero_reg__
9330 5210 01F0 breq .L757
9331 5212 04F0 brlt .L757
9332 5214 80E0 ldi r24,lo8(256)
9333 5216 91E0 ldi r25,hi8(256)
9334 5218 A0E0 ldi r26,hlo8(256)
9335 521a B0E0 ldi r27,hhi8(256)
9336 .L913:
9337 521c 8093 0000 sts tmp_long.1,r24
9338 5220 9093 0000 sts (tmp_long.1)+1,r25
9339 5224 A093 0000 sts (tmp_long.1)+2,r26
9340 5228 B093 0000 sts (tmp_long.1)+3,r27
9341 .L757:
9342 522c 8091 0000 lds r24,tmp_long.1
9343 5230 9091 0000 lds r25,(tmp_long.1)+1
9344 5234 880E add r8,r24
9345 5236 991E adc r9,r25
9346 .L753:
9347 5238 8091 0000 lds r24,Parameter_Hoehe_GPS_Z
9348 523c 282F mov r18,r24
9349 523e 3327 clr r19
9350 5240 8091 0000 lds r24,FromNaviCtrl_Value+4
9351 5244 9927 clr r25
9352 5246 87FD sbrc r24,7
9353 5248 9095 com r25
9354 524a 289F mul r18,r24
9355 524c F001 movw r30,r0
9356 524e 299F mul r18,r25
9357 5250 F00D add r31,r0
9358 5252 389F mul r19,r24
9359 5254 F00D add r31,r0
9360 5256 1124 clr r1
9361 5258 9F01 movw r18,r30
9362 525a F7FF sbrs r31,7
9363 525c 00C0 rjmp .L759
9364 525e 2158 subi r18,lo8(-(127))
9365 5260 3F4F sbci r19,hi8(-(127))
9366 .L759:
9367 5262 220F lsl r18
9368 5264 232F mov r18,r19
9369 5266 221F rol r18
9370 5268 330B sbc r19,r19
9371 526a FFEF ldi r31,hi8(-127)
9372 526c 2138 cpi r18,lo8(-127)
9373 526e 3F07 cpc r19,r31
9374 5270 04F4 brge .L760
9375 5272 20E8 ldi r18,lo8(-128)
9376 5274 3FEF ldi r19,hi8(-128)
9377 5276 00C0 rjmp .L761
9378 .L760:
9379 5278 2F3F cpi r18,255
9380 527a 3105 cpc r19,__zero_reg__
9381 527c 01F0 breq .L761
9382 527e 04F0 brlt .L761
9383 5280 20E0 ldi r18,lo8(256)
9384 5282 31E0 ldi r19,hi8(256)
9385 .L761:
9386 5284 820E add r8,r18
9387 5286 931E adc r9,r19
9388 5288 C401 movw r24,r8
9389 528a AA27 clr r26
9390 528c 97FD sbrc r25,7
9391 528e A095 com r26
9392 5290 BA2F mov r27,r26
9393 5292 E090 0000 lds r14,HoverGas
9394 5296 F090 0000 lds r15,(HoverGas)+1
9395 529a 9701 movw r18,r14
9396 529c 4427 clr r20
9397 529e 37FD sbrc r19,7
9398 52a0 4095 com r20
9399 52a2 542F mov r21,r20
9400 52a4 BC01 movw r22,r24
9401 52a6 CD01 movw r24,r26
9402 52a8 0E94 0000 call __mulsi3
9403 52ac 97FF sbrs r25,7
9404 52ae 00C0 rjmp .L763
9405 52b0 6150 subi r22,lo8(-(511))
9406 52b2 7E4F sbci r23,hi8(-(511))
9407 52b4 8F4F sbci r24,hlo8(-(511))
9408 52b6 9F4F sbci r25,hhi8(-(511))
9409 .L763:
9410 52b8 29E0 ldi r18,9
9411 52ba 9595 1: asr r25
9412 52bc 8795 ror r24
9413 52be 7795 ror r23
9414 52c0 6795 ror r22
9415 52c2 2A95 dec r18
9416 52c4 01F4 brne 1b
9417 52c6 C61A sub r12,r22
9418 52c8 D70A sbc r13,r23
9419 52ca 8091 0000 lds r24,AltitudeSetpointTrimming
9420 52ce 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
9421 52d2 892B or r24,r25
9422 52d4 01F0 breq .+2
9423 52d6 00C0 rjmp .L764
9424 52d8 1E14 cp __zero_reg__,r14
9425 52da 1F04 cpc __zero_reg__,r15
9426 52dc 04F0 brlt .+2
9427 52de 00C0 rjmp .L764
9428 52e0 9801 movw r18,r16
9429 52e2 17FF sbrs r17,7
9430 52e4 00C0 rjmp .L765
9431 52e6 3095 com r19
9432 52e8 2195 neg r18
9433 52ea 3F4F sbci r19,lo8(-1)
9434 .L765:
9435 52ec 2D33 cpi r18,61
9436 52ee 3105 cpc r19,__zero_reg__
9437 52f0 00F4 brsh .L766
9438 52f2 8091 0000 lds r24,HoverGasMin
9439 52f6 9091 0000 lds r25,(HoverGasMin)+1
9440 52fa 8C15 cp r24,r12
9441 52fc 9D05 cpc r25,r13
9442 52fe 04F4 brge .L915
9443 5300 00C0 rjmp .L924
9444 .L766:
9445 5302 2C53 subi r18,lo8(-(-60))
9446 5304 3040 sbci r19,hi8(-(-60))
9447 5306 85E0 ldi r24,5
9448 5308 3695 1: lsr r19
9449 530a 2795 ror r18
9450 530c 8A95 dec r24
9451 530e 01F4 brne 1b
9452 5310 2031 cpi r18,16
9453 5312 3105 cpc r19,__zero_reg__
9454 5314 00F0 brlo .L771
9455 5316 2FE0 ldi r18,lo8(15)
9456 5318 30E0 ldi r19,hi8(15)
9457 .L771:
9458 531a 4091 0000 lds r20,HoverGasMin
9459 531e 5091 0000 lds r21,(HoverGasMin)+1
9460 5322 1016 cp __zero_reg__,r16
9461 5324 1106 cpc __zero_reg__,r17
9462 5326 04F4 brge .L772
9463 5328 80E1 ldi r24,lo8(16)
9464 532a 90E0 ldi r25,hi8(16)
9465 532c 821B sub r24,r18
9466 532e 930B sbc r25,r19
9467 5330 489F mul r20,r24
9468 5332 9001 movw r18,r0
9469 5334 499F mul r20,r25
9470 5336 300D add r19,r0
9471 5338 589F mul r21,r24
9472 533a 300D add r19,r0
9473 533c 1124 clr r1
9474 533e B4E0 ldi r27,4
9475 5340 3695 1: lsr r19
9476 5342 2795 ror r18
9477 5344 BA95 dec r27
9478 5346 01F4 brne 1b
9479 5348 2C15 cp r18,r12
9480 534a 3D05 cpc r19,r13
9481 534c 00F4 brsh .L914
9482 .L924:
9483 534e 8091 0000 lds r24,HoverGasMax
9484 5352 9091 0000 lds r25,(HoverGasMax)+1
9485 5356 C816 cp r12,r24
9486 5358 D906 cpc r13,r25
9487 535a 04F0 brlt .L764
9488 .L915:
9489 535c 6C01 movw r12,r24
9490 535e 00C0 rjmp .L764
9491 .L772:
9492 5360 205F subi r18,lo8(-(16))
9493 5362 3F4F sbci r19,hi8(-(16))
9494 5364 8091 0000 lds r24,HoverGasMax
9495 5368 9091 0000 lds r25,(HoverGasMax)+1
9496 536c 829F mul r24,r18
9497 536e 8001 movw r16,r0
9498 5370 839F mul r24,r19
9499 5372 100D add r17,r0
9500 5374 929F mul r25,r18
9501 5376 100D add r17,r0
9502 5378 1124 clr r1
9503 537a 9801 movw r18,r16
9504 537c A4E0 ldi r26,4
9505 537e 3695 1: lsr r19
9506 5380 2795 ror r18
9507 5382 AA95 dec r26
9508 5384 01F4 brne 1b
9509 5386 4C15 cp r20,r12
9510 5388 5D05 cpc r21,r13
9511 538a 04F0 brlt .L777
9512 538c 6A01 movw r12,r20
9513 538e 00C0 rjmp .L764
9514 .L777:
9515 5390 C216 cp r12,r18
9516 5392 D306 cpc r13,r19
9517 5394 00F0 brlo .L764
9518 .L914:
9519 5396 6901 movw r12,r18
9520 .L764:
9521 5398 C601 movw r24,r12
9522 539a AA27 clr r26
9523 539c 97FD sbrc r25,7
9524 539e A095 com r26
9525 53a0 BA2F mov r27,r26
9526 53a2 FDE0 ldi r31,13
9527 53a4 880F 1: lsl r24
9528 53a6 991F rol r25
9529 53a8 AA1F rol r26
9530 53aa BB1F rol r27
9531 53ac FA95 dec r31
9532 53ae 01F4 brne 1b
9533 53b0 9501 movw r18,r10
9534 53b2 4427 clr r20
9535 53b4 37FD sbrc r19,7
9536 53b6 4095 com r20
9537 53b8 542F mov r21,r20
9538 53ba BC01 movw r22,r24
9539 53bc CD01 movw r24,r26
9540 53be 0E94 0000 call __divmodsi4
9541 53c2 2093 0000 sts tmp_long2.2,r18
9542 53c6 3093 0000 sts (tmp_long2.2)+1,r19
9543 53ca 4093 0000 sts (tmp_long2.2)+2,r20
9544 53ce 5093 0000 sts (tmp_long2.2)+3,r21
9545 53d2 C090 0000 lds r12,tmp_long2.2
9546 53d6 D090 0000 lds r13,(tmp_long2.2)+1
9547 53da 8091 0000 lds r24,FilterHCGas.22
9548 53de 9091 0000 lds r25,(FilterHCGas.22)+1
9549 53e2 9C01 movw r18,r24
9550 53e4 220F lsl r18
9551 53e6 331F rol r19
9552 53e8 280F add r18,r24
9553 53ea 391F adc r19,r25
9554 53ec 2C0D add r18,r12
9555 53ee 3D1D adc r19,r13
9556 53f0 37FF sbrs r19,7
9557 53f2 00C0 rjmp .L780
9558 53f4 2D5F subi r18,lo8(-(3))
9559 53f6 3F4F sbci r19,hi8(-(3))
9560 .L780:
9561 53f8 A901 movw r20,r18
9562 53fa 5595 asr r21
9563 53fc 4795 ror r20
9564 53fe 5595 asr r21
9565 5400 4795 ror r20
9566 5402 5093 0000 sts (FilterHCGas.22)+1,r21
9567 5406 4093 0000 sts FilterHCGas.22,r20
9568 540a 8091 0000 lds r24,EE_Parameter+14
9569 540e 282F mov r18,r24
9570 5410 3327 clr r19
9571 5412 220F lsl r18
9572 5414 331F rol r19
9573 5416 220F lsl r18
9574 5418 331F rol r19
9575 541a 2417 cp r18,r20
9576 541c 3507 cpc r19,r21
9577 541e 04F4 brge .L916
9578 5420 8091 0000 lds r24,MAX_GAS
9579 5424 282F mov r18,r24
9580 5426 3327 clr r19
9581 5428 220F lsl r18
9582 542a 331F rol r19
9583 542c 220F lsl r18
9584 542e 331F rol r19
9585 5430 2055 subi r18,lo8(-(-80))
9586 5432 3040 sbci r19,hi8(-(-80))
9587 5434 4217 cp r20,r18
9588 5436 5307 cpc r21,r19
9589 5438 04F0 brlt .L782
9590 .L916:
9591 543a 3093 0000 sts (FilterHCGas.22)+1,r19
9592 543e 2093 0000 sts FilterHCGas.22,r18
9593 .L782:
9594 5442 8091 0000 lds r24,Parameter_ExtraConfig
9595 5446 80FF sbrs r24,0
9596 5448 00C0 rjmp .L784
9597 544a 8091 0000 lds r24,FilterHCGas.22
9598 544e 9091 0000 lds r25,(FilterHCGas.22)+1
9599 5452 2981 ldd r18,Y+1
9600 5454 3A81 ldd r19,Y+2
9601 5456 8217 cp r24,r18
9602 5458 9307 cpc r25,r19
9603 545a 04F0 brlt .L785
9604 545c 3093 0000 sts (FilterHCGas.22)+1,r19
9605 5460 2093 0000 sts FilterHCGas.22,r18
9606 .L785:
9607 5464 4091 0000 lds r20,FilterHCGas.22
9608 5468 5091 0000 lds r21,(FilterHCGas.22)+1
9609 546c 5A83 std Y+2,r21
9610 546e 4983 std Y+1,r20
9611 5470 00C0 rjmp .L788
9612 .L784:
9613 5472 2981 ldd r18,Y+1
9614 5474 3A81 ldd r19,Y+2
9615 5476 2E19 sub r18,r14
9616 5478 3F09 sbc r19,r15
9617 547a 37FF sbrs r19,7
9618 547c 00C0 rjmp .L787
9619 547e 2D5F subi r18,lo8(-(3))
9620 5480 3F4F sbci r19,hi8(-(3))
9621 .L787:
9622 5482 3595 asr r19
9623 5484 2795 ror r18
9624 5486 3595 asr r19
9625 5488 2795 ror r18
9626 548a 6091 0000 lds r22,FilterHCGas.22
9627 548e 7091 0000 lds r23,(FilterHCGas.22)+1
9628 5492 620F add r22,r18
9629 5494 731F adc r23,r19
9630 5496 7A83 std Y+2,r23
9631 5498 6983 std Y+1,r22
9632 549a 00C0 rjmp .L788
9633 .L679:
9634 549c 8091 0000 lds r24,EE_Parameter+22
9635 54a0 8823 tst r24
9636 54a2 01F4 brne .L789
9637 54a4 6091 0000 lds r22,HoverGas
9638 54a8 7091 0000 lds r23,(HoverGas)+1
9639 54ac 77FF sbrs r23,7
9640 54ae 00C0 rjmp .L790
9641 54b0 6D5F subi r22,lo8(-(3))
9642 54b2 7F4F sbci r23,hi8(-(3))
9643 .L790:
9644 54b4 7595 asr r23
9645 54b6 6795 ror r22
9646 54b8 7595 asr r23
9647 54ba 6795 ror r22
9648 54bc 4091 0000 lds r20,UBat
9649 54c0 5091 0000 lds r21,(UBat)+1
9650 54c4 8091 0000 lds r24,BattLowVoltageWarning
9651 54c8 282F mov r18,r24
9652 54ca 3327 clr r19
9653 54cc 649F mul r22,r20
9654 54ce C001 movw r24,r0
9655 54d0 659F mul r22,r21
9656 54d2 900D add r25,r0
9657 54d4 749F mul r23,r20
9658 54d6 900D add r25,r0
9659 54d8 1124 clr r1
9660 54da B901 movw r22,r18
9661 54dc 0E94 0000 call __divmodhi4
9662 54e0 CB01 movw r24,r22
9663 54e2 00C0 rjmp .L917
9664 .L789:
9665 54e4 9927 clr r25
9666 .L917:
9667 54e6 9093 0000 sts (StickGasHover)+1,r25
9668 54ea 8093 0000 sts StickGasHover,r24
9669 54ee 8091 0000 lds r24,StickGasHover
9670 54f2 9091 0000 lds r25,(StickGasHover)+1
9671 54f6 8734 cpi r24,71
9672 54f8 9105 cpc r25,__zero_reg__
9673 54fa 04F4 brge .L792
9674 54fc 86E4 ldi r24,lo8(70)
9675 54fe 90E0 ldi r25,hi8(70)
9676 5500 00C0 rjmp .L918
9677 .L792:
9678 5502 8639 cpi r24,150
9679 5504 9105 cpc r25,__zero_reg__
9680 5506 04F0 brlt .L793
9681 5508 86E9 ldi r24,lo8(150)
9682 550a 90E0 ldi r25,hi8(150)
9683 .L918:
9684 550c 9093 0000 sts (StickGasHover)+1,r25
9685 5510 8093 0000 sts StickGasHover,r24
9686 .L793:
9687 5514 8981 ldd r24,Y+1
9688 5516 9A81 ldd r25,Y+2
9689 5518 9093 0000 sts (FilterHCGas.22)+1,r25
9690 551c 8093 0000 sts FilterHCGas.22,r24
9691 5520 8091 0000 lds r24,FC_StatusFlags
9692 5524 806C ori r24,lo8(-64)
9693 5526 8093 0000 sts FC_StatusFlags,r24
9694 552a 8091 0000 lds r24,FC_StatusFlags2
9695 552e 8D7F andi r24,lo8(-3)
9696 5530 8093 0000 sts FC_StatusFlags2,r24
9697 .L788:
9698 5534 8091 0000 lds r24,FC_StatusFlags
9699 5538 9927 clr r25
9700 553a 9C01 movw r18,r24
9701 553c 2270 andi r18,lo8(2)
9702 553e 3070 andi r19,hi8(2)
9703 5540 81FF sbrs r24,1
9704 5542 00C0 rjmp .L795
9705 5544 8091 0000 lds r24,HoverGasFilter.23
9706 5548 9091 0000 lds r25,(HoverGasFilter.23)+1
9707 554c A091 0000 lds r26,(HoverGasFilter.23)+2
9708 5550 B091 0000 lds r27,(HoverGasFilter.23)+3
9709 5554 0097 sbiw r24,0
9710 5556 A105 cpc r26,__zero_reg__
9711 5558 B105 cpc r27,__zero_reg__
9712 555a 01F0 breq .L797
9713 555c 8091 0000 lds r24,StartTrigger
9714 5560 8130 cpi r24,lo8(1)
9715 5562 01F4 brne .L796
9716 .L797:
9717 5564 E981 ldd r30,Y+1
9718 5566 FA81 ldd r31,Y+2
9719 5568 CF01 movw r24,r30
9720 556a AA27 clr r26
9721 556c 97FD sbrc r25,7
9722 556e A095 com r26
9723 5570 BA2F mov r27,r26
9724 5572 1EE0 ldi r17,14
9725 5574 880F 1: lsl r24
9726 5576 991F rol r25
9727 5578 AA1F rol r26
9728 557a BB1F rol r27
9729 557c 1A95 dec r17
9730 557e 01F4 brne 1b
9731 5580 8093 0000 sts HoverGasFilter.23,r24
9732 5584 9093 0000 sts (HoverGasFilter.23)+1,r25
9733 5588 A093 0000 sts (HoverGasFilter.23)+2,r26
9734 558c B093 0000 sts (HoverGasFilter.23)+3,r27
9735 .L796:
9736 5590 8091 0000 lds r24,StartTrigger
9737 5594 8130 cpi r24,lo8(1)
9738 5596 01F4 brne .L798
9739 5598 82E0 ldi r24,lo8(2)
9740 559a 8093 0000 sts StartTrigger,r24
9741 .L798:
9742 559e E980 ldd r14,Y+1
9743 55a0 FA80 ldd r15,Y+2
9744 55a2 C701 movw r24,r14
9745 55a4 AA27 clr r26
9746 55a6 97FD sbrc r25,7
9747 55a8 A095 com r26
9748 55aa BA2F mov r27,r26
9749 55ac 9501 movw r18,r10
9750 55ae 4427 clr r20
9751 55b0 37FD sbrc r19,7
9752 55b2 4095 com r20
9753 55b4 542F mov r21,r20
9754 55b6 BC01 movw r22,r24
9755 55b8 CD01 movw r24,r26
9756 55ba 0E94 0000 call __mulsi3
9757 55be DC01 movw r26,r24
9758 55c0 CB01 movw r24,r22
9759 55c2 8093 0000 sts tmp_long2.2,r24
9760 55c6 9093 0000 sts (tmp_long2.2)+1,r25
9761 55ca A093 0000 sts (tmp_long2.2)+2,r26
9762 55ce B093 0000 sts (tmp_long2.2)+3,r27
9763 55d2 B7FF sbrs r27,7
9764 55d4 00C0 rjmp .L799
9765 55d6 8150 subi r24,lo8(-(8191))
9766 55d8 904E sbci r25,hi8(-(8191))
9767 55da AF4F sbci r26,hlo8(-(8191))
9768 55dc BF4F sbci r27,hhi8(-(8191))
9769 .L799:
9770 55de 7C01 movw r14,r24
9771 55e0 8D01 movw r16,r26
9772 55e2 ADE0 ldi r26,13
9773 55e4 1595 1: asr r17
9774 55e6 0795 ror r16
9775 55e8 F794 ror r15
9776 55ea E794 ror r14
9777 55ec AA95 dec r26
9778 55ee 01F4 brne 1b
9779 55f0 E092 0000 sts tmp_long2.2,r14
9780 55f4 F092 0000 sts (tmp_long2.2)+1,r15
9781 55f8 0093 0000 sts (tmp_long2.2)+2,r16
9782 55fc 1093 0000 sts (tmp_long2.2)+3,r17
9783 5600 6091 0000 lds r22,modell_fliegt
9784 5604 7091 0000 lds r23,(modell_fliegt)+1
9785 5608 2FE0 ldi r18,hi8(4000)
9786 560a 603A cpi r22,lo8(4000)
9787 560c 7207 cpc r23,r18
9788 560e 00F4 brsh .L800
9789 5610 8091 0000 lds r24,HoverGasFilter.23
9790 5614 9091 0000 lds r25,(HoverGasFilter.23)+1
9791 5618 A091 0000 lds r26,(HoverGasFilter.23)+2
9792 561c B091 0000 lds r27,(HoverGasFilter.23)+3
9793 5620 9C01 movw r18,r24
9794 5622 AD01 movw r20,r26
9795 5624 FAE0 ldi r31,10
9796 5626 5695 1: lsr r21
9797 5628 4795 ror r20
9798 562a 3795 ror r19
9799 562c 2795 ror r18
9800 562e FA95 dec r31
9801 5630 01F4 brne 1b
9802 5632 821B sub r24,r18
9803 5634 930B sbc r25,r19
9804 5636 A40B sbc r26,r20
9805 5638 B50B sbc r27,r21
9806 563a A801 movw r20,r16
9807 563c 9701 movw r18,r14
9808 563e E4E0 ldi r30,4
9809 5640 220F 1: lsl r18
9810 5642 331F rol r19
9811 5644 441F rol r20
9812 5646 551F rol r21
9813 5648 EA95 dec r30
9814 564a 01F4 brne 1b
9815 564c 820F add r24,r18
9816 564e 931F adc r25,r19
9817 5650 A41F adc r26,r20
9818 5652 B51F adc r27,r21
9819 5654 8093 0000 sts HoverGasFilter.23,r24
9820 5658 9093 0000 sts (HoverGasFilter.23)+1,r25
9821 565c A093 0000 sts (HoverGasFilter.23)+2,r26
9822 5660 B093 0000 sts (HoverGasFilter.23)+3,r27
9823 .L800:
9824 5664 6054 subi r22,lo8(8000)
9825 5666 7F41 sbci r23,hi8(8000)
9826 5668 00F4 brsh .L801
9827 566a 8091 0000 lds r24,HoverGasFilter.23
9828 566e 9091 0000 lds r25,(HoverGasFilter.23)+1
9829 5672 A091 0000 lds r26,(HoverGasFilter.23)+2
9830 5676 B091 0000 lds r27,(HoverGasFilter.23)+3
9831 567a 9C01 movw r18,r24
9832 567c AD01 movw r20,r26
9833 567e 6CE0 ldi r22,12
9834 5680 5695 1: lsr r21
9835 5682 4795 ror r20
9836 5684 3795 ror r19
9837 5686 2795 ror r18
9838 5688 6A95 dec r22
9839 568a 01F4 brne 1b
9840 568c 821B sub r24,r18
9841 568e 930B sbc r25,r19
9842 5690 A40B sbc r26,r20
9843 5692 B50B sbc r27,r21
9844 5694 A801 movw r20,r16
9845 5696 9701 movw r18,r14
9846 5698 F2E0 ldi r31,2
9847 569a 220F 1: lsl r18
9848 569c 331F rol r19
9849 569e 441F rol r20
9850 56a0 551F rol r21
9851 56a2 FA95 dec r31
9852 56a4 01F4 brne 1b
9853 56a6 820F add r24,r18
9854 56a8 931F adc r25,r19
9855 56aa A41F adc r26,r20
9856 56ac B51F adc r27,r21
9857 56ae 00C0 rjmp .L919
9858 .L801:
9859 56b0 8091 0000 lds r24,VarioMeter
9860 56b4 9091 0000 lds r25,(VarioMeter)+1
9861 56b8 8091 0000 lds r24,VarioMeter
9862 56bc 9091 0000 lds r25,(VarioMeter)+1
9863 56c0 97FF sbrs r25,7
9864 56c2 00C0 rjmp .L804
9865 56c4 9095 com r25
9866 56c6 8195 neg r24
9867 56c8 9F4F sbci r25,lo8(-1)
9868 .L804:
9869 56ca 8436 cpi r24,100
9870 56cc 9105 cpc r25,__zero_reg__
9871 56ce 04F4 brge .L802
9872 56d0 8091 0000 lds r24,HoehenWert
9873 56d4 9091 0000 lds r25,(HoehenWert)+1
9874 56d8 2091 0000 lds r18,SollHoehe
9875 56dc 3091 0000 lds r19,(SollHoehe)+1
9876 56e0 821B sub r24,r18
9877 56e2 930B sbc r25,r19
9878 56e4 8150 subi r24,lo8(-(255))
9879 56e6 9F4F sbci r25,hi8(-(255))
9880 56e8 8F5F subi r24,lo8(511)
9881 56ea 9140 sbci r25,hi8(511)
9882 56ec 00F4 brsh .L802
9883 56ee 8091 0000 lds r24,HoverGasFilter.23
9884 56f2 9091 0000 lds r25,(HoverGasFilter.23)+1
9885 56f6 A091 0000 lds r26,(HoverGasFilter.23)+2
9886 56fa B091 0000 lds r27,(HoverGasFilter.23)+3
9887 56fe 9C01 movw r18,r24
9888 5700 AD01 movw r20,r26
9889 5702 EEE0 ldi r30,14
9890 5704 5695 1: lsr r21
9891 5706 4795 ror r20
9892 5708 3795 ror r19
9893 570a 2795 ror r18
9894 570c EA95 dec r30
9895 570e 01F4 brne 1b
9896 5710 821B sub r24,r18
9897 5712 930B sbc r25,r19
9898 5714 A40B sbc r26,r20
9899 5716 B50B sbc r27,r21
9900 5718 8E0D add r24,r14
9901 571a 9F1D adc r25,r15
9902 571c A01F adc r26,r16
9903 571e B11F adc r27,r17
9904 .L919:
9905 5720 8093 0000 sts HoverGasFilter.23,r24
9906 5724 9093 0000 sts (HoverGasFilter.23)+1,r25
9907 5728 A093 0000 sts (HoverGasFilter.23)+2,r26
9908 572c B093 0000 sts (HoverGasFilter.23)+3,r27
9909 .L802:
9910 5730 8091 0000 lds r24,HoverGasFilter.23
9911 5734 9091 0000 lds r25,(HoverGasFilter.23)+1
9912 5738 A091 0000 lds r26,(HoverGasFilter.23)+2
9913 573c B091 0000 lds r27,(HoverGasFilter.23)+3
9914 5740 7EE0 ldi r23,14
9915 5742 B695 1: lsr r27
9916 5744 A795 ror r26
9917 5746 9795 ror r25
9918 5748 8795 ror r24
9919 574a 7A95 dec r23
9920 574c 01F4 brne 1b
9921 574e 9093 0000 sts (HoverGas)+1,r25
9922 5752 8093 0000 sts HoverGas,r24
9923 5756 4091 0000 lds r20,EE_Parameter+20
9924 575a 4423 tst r20
9925 575c 01F0 breq .L805
9926 575e 5527 clr r21
9927 5760 9C01 movw r18,r24
9928 5762 BA01 movw r22,r20
9929 5764 0E94 0000 call __divmodhi4
9930 5768 C901 movw r24,r18
9931 576a 861B sub r24,r22
9932 576c 970B sbc r25,r23
9933 576e 9093 0000 sts (HoverGasMin)+1,r25
9934 5772 8093 0000 sts HoverGasMin,r24
9935 5776 260F add r18,r22
9936 5778 371F adc r19,r23
9937 577a 3093 0000 sts (HoverGasMax)+1,r19
9938 577e 2093 0000 sts HoverGasMax,r18
9939 5782 00C0 rjmp .L808
9940 .L805:
9941 5784 1092 0000 sts (HoverGasMin)+1,__zero_reg__
9942 5788 1092 0000 sts HoverGasMin,__zero_reg__
9943 578c 8FEF ldi r24,lo8(1023)
9944 578e 93E0 ldi r25,hi8(1023)
9945 5790 9093 0000 sts (HoverGasMax)+1,r25
9946 5794 8093 0000 sts HoverGasMax,r24
9947 5798 00C0 rjmp .L808
9948 .L795:
9949 579a 1092 0000 sts StartTrigger,__zero_reg__
9950 579e 1092 0000 sts HoverGasFilter.23,__zero_reg__
9951 57a2 1092 0000 sts (HoverGasFilter.23)+1,__zero_reg__
9952 57a6 1092 0000 sts (HoverGasFilter.23)+2,__zero_reg__
9953 57aa 1092 0000 sts (HoverGasFilter.23)+3,__zero_reg__
9954 57ae 3093 0000 sts (HoverGas)+1,r19
9955 57b2 2093 0000 sts HoverGas,r18
9956 57b6 00C0 rjmp .L808
9957 .L659:
9958 57b8 8091 0000 lds r24,FC_StatusFlags
9959 57bc 806C ori r24,lo8(-64)
9960 57be 8093 0000 sts FC_StatusFlags,r24
9961 .L808:
9962 57c2 8091 0000 lds r24,NC_To_FC_Flags
9963 57c6 81FF sbrs r24,1
9964 57c8 00C0 rjmp .L809
9965 57ca 8981 ldd r24,Y+1
9966 57cc 9A81 ldd r25,Y+2
9967 57ce 97FD sbrc r25,7
9968 57d0 0396 adiw r24,3
9969 .L811:
9970 57d2 9595 asr r25
9971 57d4 8795 ror r24
9972 57d6 9595 asr r25
9973 57d8 8795 ror r24
9974 57da 2091 0000 lds r18,HooverGasEmergencyPercent
9975 57de 3091 0000 lds r19,(HooverGasEmergencyPercent)+1
9976 57e2 2817 cp r18,r24
9977 57e4 3907 cpc r19,r25
9978 57e6 00F4 brsh .L810
9979 57e8 8091 0000 lds r24,HoverGas
9980 57ec 9091 0000 lds r25,(HoverGas)+1
9981 57f0 892B or r24,r25
9982 57f2 01F0 breq .L810
9983 57f4 220F lsl r18
9984 57f6 331F rol r19
9985 57f8 220F lsl r18
9986 57fa 331F rol r19
9987 57fc 3A83 std Y+2,r19
9988 57fe 2983 std Y+1,r18
9989 .L810:
9990 5800 8091 0000 lds r24,HoehenWert
9991 5804 9091 0000 lds r25,(HoehenWert)+1
9992 5808 A091 0000 lds r26,(HoehenWert)+2
9993 580c B091 0000 lds r27,(HoehenWert)+3
9994 5810 8093 0000 sts SollHoehe,r24
9995 5814 9093 0000 sts (SollHoehe)+1,r25
9996 5818 A093 0000 sts (SollHoehe)+2,r26
9997 581c B093 0000 sts (SollHoehe)+3,r27
9998 5820 88E9 ldi r24,lo8(15000)
9999 5822 9AE3 ldi r25,hi8(15000)
10000 5824 9093 0000 sts (beeptime)+1,r25
10001 5828 8093 0000 sts beeptime,r24
10002 582c 80E0 ldi r24,lo8(3584)
10003 582e 9EE0 ldi r25,hi8(3584)
10004 5830 9093 0000 sts (BeepMuster)+1,r25
10005 5834 8093 0000 sts BeepMuster,r24
10006 .L809:
10007 5838 2091 0000 lds r18,MIN_GAS
10008 583c 822F mov r24,r18
10009 583e 9927 clr r25
10010 5840 880F lsl r24
10011 5842 991F rol r25
10012 5844 880F lsl r24
10013 5846 991F rol r25
10014 5848 8896 adiw r24,40
10015 584a 6981 ldd r22,Y+1
10016 584c 7A81 ldd r23,Y+2
10017 584e 8617 cp r24,r22
10018 5850 9707 cpc r25,r23
10019 5852 04F0 brlt .L812
10020 5854 9A83 std Y+2,r25
10021 5856 8983 std Y+1,r24
10022 .L812:
10023 5858 7091 0000 lds r23,MAX_GAS
10024 585c 7D8B std Y+21,r23
10025 585e 872F mov r24,r23
10026 5860 9927 clr r25
10027 5862 880F lsl r24
10028 5864 991F rol r25
10029 5866 880F lsl r24
10030 5868 991F rol r25
10031 586a 8055 subi r24,lo8(-(-80))
10032 586c 9040 sbci r25,hi8(-(-80))
10033 586e A981 ldd r26,Y+1
10034 5870 BA81 ldd r27,Y+2
10035 5872 8A17 cp r24,r26
10036 5874 9B07 cpc r25,r27
10037 5876 04F4 brge .L813
10038 5878 9A83 std Y+2,r25
10039 587a 8983 std Y+1,r24
10040 .L813:
10041 587c 8091 0000 lds r24,MissingMotor
10042 5880 8823 tst r24
10043 5882 01F4 brne .L815
10044 5884 8091 0000 lds r24,Capacity+6
10045 5888 8F3F cpi r24,lo8(-1)
10046 588a 01F4 brne .L815
10047 588c 8091 0000 lds r24,NC_ErrorCode
10048 5890 8823 tst r24
10049 5892 01F0 breq .L814
10050 .L815:
10051 5894 8091 0000 lds r24,modell_fliegt
10052 5898 9091 0000 lds r25,(modell_fliegt)+1
10053 589c 0297 sbiw r24,2
10054 589e C097 sbiw r24,48
10055 58a0 00F4 brsh .L814
10056 58a2 E981 ldd r30,Y+1
10057 58a4 FA81 ldd r31,Y+2
10058 58a6 1E16 cp __zero_reg__,r30
10059 58a8 1F06 cpc __zero_reg__,r31
10060 58aa 04F4 brge .L814
10061 58ac 81E0 ldi r24,lo8(1)
10062 58ae 90E0 ldi r25,hi8(1)
10063 58b0 9093 0000 sts (modell_fliegt)+1,r25
10064 58b4 8093 0000 sts modell_fliegt,r24
10065 58b8 E22E mov r14,r18
10066 58ba FF24 clr r15
10067 58bc EE0C lsl r14
10068 58be FF1C rol r15
10069 58c0 EE0C lsl r14
10070 58c2 FF1C rol r15
10071 58c4 8701 movw r16,r14
10072 58c6 085D subi r16,lo8(-(40))
10073 58c8 1F4F sbci r17,hi8(-(40))
10074 58ca 1A83 std Y+2,r17
10075 58cc 0983 std Y+1,r16
10076 .L814:
10077 58ce 2981 ldd r18,Y+1
10078 58d0 3A81 ldd r19,Y+2
10079 58d2 3093 0000 sts (DebugOut+16)+1,r19
10080 58d6 2093 0000 sts DebugOut+16,r18
10081 58da 8091 0000 lds r24,sollGier.0
10082 58de 9091 0000 lds r25,(sollGier.0)+1
10083 58e2 A091 0000 lds r26,(sollGier.0)+2
10084 58e6 B091 0000 lds r27,(sollGier.0)+3
10085 58ea 12E0 ldi r17,2
10086 58ec 880F 1: lsl r24
10087 58ee 991F rol r25
10088 58f0 AA1F rol r26
10089 58f2 BB1F rol r27
10090 58f4 1A95 dec r17
10091 58f6 01F4 brne 1b
10092 58f8 0091 0000 lds r16,MesswertGier
10093 58fc 1091 0000 lds r17,(MesswertGier)+1
10094 5900 081B sub r16,r24
10095 5902 190B sbc r17,r25
10096 5904 213A cpi r18,161
10097 5906 3105 cpc r19,__zero_reg__
10098 5908 04F0 brlt .L817
10099 590a C901 movw r24,r18
10100 590c 37FD sbrc r19,7
10101 590e 0196 adiw r24,1
10102 .L819:
10103 5910 9595 asr r25
10104 5912 8795 ror r24
10105 5914 8017 cp r24,r16
10106 5916 9107 cpc r25,r17
10107 5918 04F4 brge .L818
10108 591a 8C01 movw r16,r24
10109 .L818:
10110 591c 9095 com r25
10111 591e 8195 neg r24
10112 5920 9F4F sbci r25,lo8(-1)
10113 5922 0817 cp r16,r24
10114 5924 1907 cpc r17,r25
10115 5926 04F4 brge .L824
10116 5928 8C01 movw r16,r24
10117 592a 00C0 rjmp .L824
10118 .L817:
10119 592c 0135 cpi r16,81
10120 592e 1105 cpc r17,__zero_reg__
10121 5930 04F0 brlt .L825
10122 5932 00E5 ldi r16,lo8(80)
10123 5934 10E0 ldi r17,hi8(80)
10124 .L825:
10125 5936 3FEF ldi r19,hi8(-80)
10126 5938 003B cpi r16,lo8(-80)
10127 593a 1307 cpc r17,r19
10128 593c 04F4 brge .L824
10129 593e 00EB ldi r16,lo8(-80)
10130 5940 1FEF ldi r17,hi8(-80)
10131 .L824:
10132 5942 4D89 ldd r20,Y+21
10133 5944 242F mov r18,r20
10134 5946 3327 clr r19
10135 5948 220F lsl r18
10136 594a 331F rol r19
10137 594c 220F lsl r18
10138 594e 331F rol r19
10139 5950 C901 movw r24,r18
10140 5952 6981 ldd r22,Y+1
10141 5954 7A81 ldd r23,Y+2
10142 5956 861B sub r24,r22
10143 5958 970B sbc r25,r23
10144 595a 8017 cp r24,r16
10145 595c 9107 cpc r25,r17
10146 595e 04F4 brge .L827
10147 5960 8C01 movw r16,r24
10148 .L827:
10149 5962 8981 ldd r24,Y+1
10150 5964 9A81 ldd r25,Y+2
10151 5966 821B sub r24,r18
10152 5968 930B sbc r25,r19
10153 596a 0817 cp r16,r24
10154 596c 1907 cpc r17,r25
10155 596e 04F4 brge .L828
10156 5970 8C01 movw r16,r24
10157 .L828:
10158 5972 8091 0000 lds r24,MesswertNick
10159 5976 9091 0000 lds r25,(MesswertNick)+1
10160 597a 6091 0000 lds r22,StickNick
10161 597e 7091 0000 lds r23,(StickNick)+1
10162 5982 861B sub r24,r22
10163 5984 970B sbc r25,r23
10164 5986 9093 0000 sts (DiffNick)+1,r25
10165 598a 8093 0000 sts DiffNick,r24
10166 598e D090 0000 lds r13,IntegralFaktor
10167 5992 2091 0000 lds r18,SummeNick
10168 5996 3091 0000 lds r19,(SummeNick)+1
10169 599a 4091 0000 lds r20,(SummeNick)+2
10170 599e 5091 0000 lds r21,(SummeNick)+3
10171 59a2 DD20 tst r13
10172 59a4 01F0 breq .L829
10173 59a6 661A sub r6,r22
10174 59a8 770A sbc r7,r23
10175 59aa C301 movw r24,r6
10176 59ac AA27 clr r26
10177 59ae 97FD sbrc r25,7
10178 59b0 A095 com r26
10179 59b2 BA2F mov r27,r26
10180 59b4 00C0 rjmp .L920
10181 .L829:
10182 59b6 AA27 clr r26
10183 59b8 97FD sbrc r25,7
10184 59ba A095 com r26
10185 59bc BA2F mov r27,r26
10186 .L920:
10187 59be 280F add r18,r24
10188 59c0 391F adc r19,r25
10189 59c2 4A1F adc r20,r26
10190 59c4 5B1F adc r21,r27
10191 59c6 2093 0000 sts SummeNick,r18
10192 59ca 3093 0000 sts (SummeNick)+1,r19
10193 59ce 4093 0000 sts (SummeNick)+2,r20
10194 59d2 5093 0000 sts (SummeNick)+3,r21
10195 59d6 8091 0000 lds r24,SummeNick
10196 59da 9091 0000 lds r25,(SummeNick)+1
10197 59de A091 0000 lds r26,(SummeNick)+2
10198 59e2 B091 0000 lds r27,(SummeNick)+3
10199 59e6 8150 subi r24,lo8(64001)
10200 59e8 9A4F sbci r25,hi8(64001)
10201 59ea A040 sbci r26,hlo8(64001)
10202 59ec B040 sbci r27,hhi8(64001)
10203 59ee 04F0 brlt .L831
10204 59f0 80E0 ldi r24,lo8(64000)
10205 59f2 9AEF ldi r25,hi8(64000)
10206 59f4 A0E0 ldi r26,hlo8(64000)
10207 59f6 B0E0 ldi r27,hhi8(64000)
10208 59f8 8093 0000 sts SummeNick,r24
10209 59fc 9093 0000 sts (SummeNick)+1,r25
10210 5a00 A093 0000 sts (SummeNick)+2,r26
10211 5a04 B093 0000 sts (SummeNick)+3,r27
10212 .L831:
10213 5a08 8091 0000 lds r24,SummeNick
10214 5a0c 9091 0000 lds r25,(SummeNick)+1
10215 5a10 A091 0000 lds r26,(SummeNick)+2
10216 5a14 B091 0000 lds r27,(SummeNick)+3
10217 5a18 8050 subi r24,lo8(-64000)
10218 5a1a 9640 sbci r25,hi8(-64000)
10219 5a1c AF4F sbci r26,hlo8(-64000)
10220 5a1e BF4F sbci r27,hhi8(-64000)
10221 5a20 04F4 brge .L832
10222 5a22 80E0 ldi r24,lo8(-64000)
10223 5a24 96E0 ldi r25,hi8(-64000)
10224 5a26 AFEF ldi r26,hlo8(-64000)
10225 5a28 BFEF ldi r27,hhi8(-64000)
10226 5a2a 8093 0000 sts SummeNick,r24
10227 5a2e 9093 0000 sts (SummeNick)+1,r25
10228 5a32 A093 0000 sts (SummeNick)+2,r26
10229 5a36 B093 0000 sts (SummeNick)+3,r27
10230 .L832:
10231 5a3a C090 0000 lds r12,EE_Parameter+35
10232 5a3e 2091 0000 lds r18,DiffNick
10233 5a42 3091 0000 lds r19,(DiffNick)+1
10234 5a46 78E0 ldi r23,lo8(8)
10235 5a48 E72E mov r14,r23
10236 5a4a EC14 cp r14,r12
10237 5a4c 00F0 brlo .L833
10238 5a4e 8C2D mov r24,r12
10239 5a50 9927 clr r25
10240 5a52 829F mul r24,r18
10241 5a54 A001 movw r20,r0
10242 5a56 839F mul r24,r19
10243 5a58 500D add r21,r0
10244 5a5a 929F mul r25,r18
10245 5a5c 500D add r21,r0
10246 5a5e 1124 clr r1
10247 5a60 CA01 movw r24,r20
10248 5a62 57FD sbrc r21,7
10249 5a64 0796 adiw r24,7
10250 .L834:
10251 5a66 7C01 movw r14,r24
10252 5a68 63E0 ldi r22,3
10253 5a6a F594 1: asr r15
10254 5a6c E794 ror r14
10255 5a6e 6A95 dec r22
10256 5a70 01F4 brne 1b
10257 5a72 00C0 rjmp .L835
10258 .L833:
10259 5a74 8C2D mov r24,r12
10260 5a76 8695 lsr r24
10261 5a78 9927 clr r25
10262 5a7a 829F mul r24,r18
10263 5a7c B001 movw r22,r0
10264 5a7e 839F mul r24,r19
10265 5a80 700D add r23,r0
10266 5a82 929F mul r25,r18
10267 5a84 700D add r23,r0
10268 5a86 1124 clr r1
10269 5a88 CB01 movw r24,r22
10270 5a8a 77FD sbrc r23,7
10271 5a8c 0396 adiw r24,3
10272 .L836:
10273 5a8e 7C01 movw r14,r24
10274 5a90 F594 asr r15
10275 5a92 E794 ror r14
10276 5a94 F594 asr r15
10277 5a96 E794 ror r14
10278 .L835:
10279 5a98 A090 0000 lds r10,Ki
10280 5a9c B090 0000 lds r11,(Ki)+1
10281 5aa0 9501 movw r18,r10
10282 5aa2 4427 clr r20
10283 5aa4 37FD sbrc r19,7
10284 5aa6 4095 com r20
10285 5aa8 542F mov r21,r20
10286 5aaa 8091 0000 lds r24,SummeNick
10287 5aae 9091 0000 lds r25,(SummeNick)+1
10288 5ab2 A091 0000 lds r26,(SummeNick)+2
10289 5ab6 B091 0000 lds r27,(SummeNick)+3
10290 5aba BC01 movw r22,r24
10291 5abc CD01 movw r24,r26
10292 5abe 0E94 0000 call __divmodsi4
10293 5ac2 E20E add r14,r18
10294 5ac4 F31E adc r15,r19
10295 5ac6 9090 0000 lds r9,Parameter_DynamicStability
10296 5aca 692D mov r22,r9
10297 5acc 7727 clr r23
10298 5ace 8827 clr r24
10299 5ad0 9927 clr r25
10300 5ad2 9801 movw r18,r16
10301 5ad4 17FF sbrs r17,7
10302 5ad6 00C0 rjmp .L837
10303 5ad8 2227 clr r18
10304 5ada 3327 clr r19
10305 5adc 201B sub r18,r16
10306 5ade 310B sbc r19,r17
10307 .L837:
10308 5ae0 37FF sbrs r19,7
10309 5ae2 00C0 rjmp .L838
10310 5ae4 2F5F subi r18,lo8(-(1))
10311 5ae6 3F4F sbci r19,hi8(-(1))
10312 .L838:
10313 5ae8 3595 asr r19
10314 5aea 2795 ror r18
10315 5aec A981 ldd r26,Y+1
10316 5aee BA81 ldd r27,Y+2
10317 5af0 2A0F add r18,r26
10318 5af2 3B1F adc r19,r27
10319 5af4 4427 clr r20
10320 5af6 37FD sbrc r19,7
10321 5af8 4095 com r20
10322 5afa 542F mov r21,r20
10323 5afc 0E94 0000 call __mulsi3
10324 5b00 97FF sbrs r25,7
10325 5b02 00C0 rjmp .L839
10326 5b04 615C subi r22,lo8(-(63))
10327 5b06 7F4F sbci r23,hi8(-(63))
10328 5b08 8F4F sbci r24,hlo8(-(63))
10329 5b0a 9F4F sbci r25,hhi8(-(63))
10330 .L839:
10331 5b0c 26E0 ldi r18,6
10332 5b0e 9595 1: asr r25
10333 5b10 8795 ror r24
10334 5b12 7795 ror r23
10335 5b14 6795 ror r22
10336 5b16 2A95 dec r18
10337 5b18 01F4 brne 1b
10338 5b1a 9B01 movw r18,r22
10339 5b1c 6E15 cp r22,r14
10340 5b1e 7F05 cpc r23,r15
10341 5b20 04F4 brge .L840
10342 5b22 7B01 movw r14,r22
10343 .L840:
10344 5b24 3095 com r19
10345 5b26 2195 neg r18
10346 5b28 3F4F sbci r19,lo8(-1)
10347 5b2a E216 cp r14,r18
10348 5b2c F306 cpc r15,r19
10349 5b2e 04F4 brge .L841
10350 5b30 7901 movw r14,r18
10351 .L841:
10352 5b32 8091 0000 lds r24,MesswertRoll
10353 5b36 9091 0000 lds r25,(MesswertRoll)+1
10354 5b3a 6091 0000 lds r22,StickRoll
10355 5b3e 7091 0000 lds r23,(StickRoll)+1
10356 5b42 861B sub r24,r22
10357 5b44 970B sbc r25,r23
10358 5b46 9093 0000 sts (DiffRoll)+1,r25
10359 5b4a 8093 0000 sts DiffRoll,r24
10360 5b4e 2091 0000 lds r18,SummeRoll
10361 5b52 3091 0000 lds r19,(SummeRoll)+1
10362 5b56 4091 0000 lds r20,(SummeRoll)+2
10363 5b5a 5091 0000 lds r21,(SummeRoll)+3
10364 5b5e DD20 tst r13
10365 5b60 01F0 breq .L842
10366 5b62 461A sub r4,r22
10367 5b64 570A sbc r5,r23
10368 5b66 C201 movw r24,r4
10369 5b68 AA27 clr r26
10370 5b6a 97FD sbrc r25,7
10371 5b6c A095 com r26
10372 5b6e BA2F mov r27,r26
10373 5b70 00C0 rjmp .L921
10374 .L842:
10375 5b72 AA27 clr r26
10376 5b74 97FD sbrc r25,7
10377 5b76 A095 com r26
10378 5b78 BA2F mov r27,r26
10379 .L921:
10380 5b7a 280F add r18,r24
10381 5b7c 391F adc r19,r25
10382 5b7e 4A1F adc r20,r26
10383 5b80 5B1F adc r21,r27
10384 5b82 2093 0000 sts SummeRoll,r18
10385 5b86 3093 0000 sts (SummeRoll)+1,r19
10386 5b8a 4093 0000 sts (SummeRoll)+2,r20
10387 5b8e 5093 0000 sts (SummeRoll)+3,r21
10388 5b92 8091 0000 lds r24,SummeRoll
10389 5b96 9091 0000 lds r25,(SummeRoll)+1
10390 5b9a A091 0000 lds r26,(SummeRoll)+2
10391 5b9e B091 0000 lds r27,(SummeRoll)+3
10392 5ba2 8150 subi r24,lo8(64001)
10393 5ba4 9A4F sbci r25,hi8(64001)
10394 5ba6 A040 sbci r26,hlo8(64001)
10395 5ba8 B040 sbci r27,hhi8(64001)
10396 5baa 04F0 brlt .L844
10397 5bac 80E0 ldi r24,lo8(64000)
10398 5bae 9AEF ldi r25,hi8(64000)
10399 5bb0 A0E0 ldi r26,hlo8(64000)
10400 5bb2 B0E0 ldi r27,hhi8(64000)
10401 5bb4 8093 0000 sts SummeRoll,r24
10402 5bb8 9093 0000 sts (SummeRoll)+1,r25
10403 5bbc A093 0000 sts (SummeRoll)+2,r26
10404 5bc0 B093 0000 sts (SummeRoll)+3,r27
10405 .L844:
10406 5bc4 8091 0000 lds r24,SummeRoll
10407 5bc8 9091 0000 lds r25,(SummeRoll)+1
10408 5bcc A091 0000 lds r26,(SummeRoll)+2
10409 5bd0 B091 0000 lds r27,(SummeRoll)+3
10410 5bd4 8050 subi r24,lo8(-64000)
10411 5bd6 9640 sbci r25,hi8(-64000)
10412 5bd8 AF4F sbci r26,hlo8(-64000)
10413 5bda BF4F sbci r27,hhi8(-64000)
10414 5bdc 04F4 brge .L845
10415 5bde 80E0 ldi r24,lo8(-64000)
10416 5be0 96E0 ldi r25,hi8(-64000)
10417 5be2 AFEF ldi r26,hlo8(-64000)
10418 5be4 BFEF ldi r27,hhi8(-64000)
10419 5be6 8093 0000 sts SummeRoll,r24
10420 5bea 9093 0000 sts (SummeRoll)+1,r25
10421 5bee A093 0000 sts (SummeRoll)+2,r26
10422 5bf2 B093 0000 sts (SummeRoll)+3,r27
10423 .L845:
10424 5bf6 2091 0000 lds r18,DiffRoll
10425 5bfa 3091 0000 lds r19,(DiffRoll)+1
10426 5bfe 48E0 ldi r20,lo8(8)
10427 5c00 4C15 cp r20,r12
10428 5c02 00F0 brlo .L846
10429 5c04 8C2D mov r24,r12
10430 5c06 9927 clr r25
10431 5c08 829F mul r24,r18
10432 5c0a B001 movw r22,r0
10433 5c0c 839F mul r24,r19
10434 5c0e 700D add r23,r0
10435 5c10 929F mul r25,r18
10436 5c12 700D add r23,r0
10437 5c14 1124 clr r1
10438 5c16 CB01 movw r24,r22
10439 5c18 77FD sbrc r23,7
10440 5c1a 0796 adiw r24,7
10441 .L847:
10442 5c1c 6C01 movw r12,r24
10443 5c1e B3E0 ldi r27,3
10444 5c20 D594 1: asr r13
10445 5c22 C794 ror r12
10446 5c24 BA95 dec r27
10447 5c26 01F4 brne 1b
10448 5c28 00C0 rjmp .L848
10449 .L846:
10450 5c2a C694 lsr r12
10451 5c2c 8C2D mov r24,r12
10452 5c2e 9927 clr r25
10453 5c30 829F mul r24,r18
10454 5c32 D001 movw r26,r0
10455 5c34 839F mul r24,r19
10456 5c36 B00D add r27,r0
10457 5c38 929F mul r25,r18
10458 5c3a B00D add r27,r0
10459 5c3c 1124 clr r1
10460 5c3e CD01 movw r24,r26
10461 5c40 B7FD sbrc r27,7
10462 5c42 0396 adiw r24,3
10463 .L849:
10464 5c44 6C01 movw r12,r24
10465 5c46 D594 asr r13
10466 5c48 C794 ror r12
10467 5c4a D594 asr r13
10468 5c4c C794 ror r12
10469 .L848:
10470 5c4e 9501 movw r18,r10
10471 5c50 4427 clr r20
10472 5c52 37FD sbrc r19,7
10473 5c54 4095 com r20
10474 5c56 542F mov r21,r20
10475 5c58 8091 0000 lds r24,SummeRoll
10476 5c5c 9091 0000 lds r25,(SummeRoll)+1
10477 5c60 A091 0000 lds r26,(SummeRoll)+2
10478 5c64 B091 0000 lds r27,(SummeRoll)+3
10479 5c68 BC01 movw r22,r24
10480 5c6a CD01 movw r24,r26
10481 5c6c 0E94 0000 call __divmodsi4
10482 5c70 C20E add r12,r18
10483 5c72 D31E adc r13,r19
10484 5c74 692D mov r22,r9
10485 5c76 7727 clr r23
10486 5c78 8827 clr r24
10487 5c7a 9927 clr r25
10488 5c7c 9801 movw r18,r16
10489 5c7e 17FF sbrs r17,7
10490 5c80 00C0 rjmp .L850
10491 5c82 2227 clr r18
10492 5c84 3327 clr r19
10493 5c86 201B sub r18,r16
10494 5c88 310B sbc r19,r17
10495 .L850:
10496 5c8a 37FF sbrs r19,7
10497 5c8c 00C0 rjmp .L851
10498 5c8e 2F5F subi r18,lo8(-(1))
10499 5c90 3F4F sbci r19,hi8(-(1))
10500 .L851:
10501 5c92 3595 asr r19
10502 5c94 2795 ror r18
10503 5c96 E981 ldd r30,Y+1
10504 5c98 FA81 ldd r31,Y+2
10505 5c9a 2E0F add r18,r30
10506 5c9c 3F1F adc r19,r31
10507 5c9e 4427 clr r20
10508 5ca0 37FD sbrc r19,7
10509 5ca2 4095 com r20
10510 5ca4 542F mov r21,r20
10511 5ca6 0E94 0000 call __mulsi3
10512 5caa 97FF sbrs r25,7
10513 5cac 00C0 rjmp .L852
10514 5cae 615C subi r22,lo8(-(63))
10515 5cb0 7F4F sbci r23,hi8(-(63))
10516 5cb2 8F4F sbci r24,hlo8(-(63))
10517 5cb4 9F4F sbci r25,hhi8(-(63))
10518 .L852:
10519 5cb6 E6E0 ldi r30,6
10520 5cb8 9595 1: asr r25
10521 5cba 8795 ror r24
10522 5cbc 7795 ror r23
10523 5cbe 6795 ror r22
10524 5cc0 EA95 dec r30
10525 5cc2 01F4 brne 1b
10526 5cc4 9B01 movw r18,r22
10527 5cc6 6C15 cp r22,r12
10528 5cc8 7D05 cpc r23,r13
10529 5cca 04F4 brge .L853
10530 5ccc 6B01 movw r12,r22
10531 .L853:
10532 5cce 3095 com r19
10533 5cd0 2195 neg r18
10534 5cd2 3F4F sbci r19,lo8(-1)
10535 5cd4 C216 cp r12,r18
10536 5cd6 D306 cpc r13,r19
10537 5cd8 04F4 brge .L854
10538 5cda 6901 movw r12,r18
10539 .L854:
10540 5cdc 8091 0000 lds r24,MIN_GAS
10541 5ce0 282E mov r2,r24
10542 5ce2 3324 clr r3
10543 5ce4 5090 0000 lds r5,EE_Parameter+101
10544 5ce8 60E0 ldi r22,lo8(Motor)
10545 5cea 862E mov r8,r22
10546 5cec 60E0 ldi r22,hi8(Motor)
10547 5cee 962E mov r9,r22
10548 5cf0 50E0 ldi r21,lo8(Mixer+13)
10549 5cf2 A52E mov r10,r21
10550 5cf4 50E0 ldi r21,hi8(Mixer+13)
10551 5cf6 B52E mov r11,r21
10552 5cf8 4BE0 ldi r20,lo8(11)
10553 5cfa 442E mov r4,r20
10554 5cfc 30E0 ldi r19,lo8(tmp_motorwert)
10555 5cfe 632E mov r6,r19
10556 5d00 30E0 ldi r19,hi8(tmp_motorwert)
10557 5d02 732E mov r7,r19
10558 .L889:
10559 5d04 D501 movw r26,r10
10560 5d06 2C91 ld r18,X
10561 5d08 1216 cp __zero_reg__,r18
10562 5d0a 04F0 brlt .+2
10563 5d0c 00C0 rjmp .L858
10564 5d0e 2034 cpi r18,lo8(64)
10565 5d10 01F4 brne .L859
10566 5d12 E981 ldd r30,Y+1
10567 5d14 FA81 ldd r31,Y+2
10568 5d16 FF8B std Y+23,r31
10569 5d18 EE8B std Y+22,r30
10570 5d1a 00C0 rjmp .L860
10571 .L859:
10572 5d1c 4981 ldd r20,Y+1
10573 5d1e 5A81 ldd r21,Y+2
10574 5d20 CA01 movw r24,r20
10575 5d22 AA27 clr r26
10576 5d24 97FD sbrc r25,7
10577 5d26 A095 com r26
10578 5d28 BA2F mov r27,r26
10579 5d2a 3327 clr r19
10580 5d2c 27FD sbrc r18,7
10581 5d2e 3095 com r19
10582 5d30 432F mov r20,r19
10583 5d32 532F mov r21,r19
10584 5d34 BC01 movw r22,r24
10585 5d36 CD01 movw r24,r26
10586 5d38 0E94 0000 call __mulsi3
10587 5d3c 97FF sbrs r25,7
10588 5d3e 00C0 rjmp .L861
10589 5d40 615C subi r22,lo8(-(63))
10590 5d42 7F4F sbci r23,hi8(-(63))
10591 5d44 8F4F sbci r24,hlo8(-(63))
10592 5d46 9F4F sbci r25,hhi8(-(63))
10593 .L861:
10594 5d48 26E0 ldi r18,6
10595 5d4a 9595 1: asr r25
10596 5d4c 8795 ror r24
10597 5d4e 7795 ror r23
10598 5d50 6795 ror r22
10599 5d52 2A95 dec r18
10600 5d54 01F4 brne 1b
10601 5d56 7F8B std Y+23,r23
10602 5d58 6E8B std Y+22,r22
10603 .L860:
10604 5d5a F501 movw r30,r10
10605 5d5c 2181 ldd r18,Z+1
10606 5d5e 2034 cpi r18,lo8(64)
10607 5d60 01F4 brne .L862
10608 5d62 2E89 ldd r18,Y+22
10609 5d64 3F89 ldd r19,Y+23
10610 5d66 2E0D add r18,r14
10611 5d68 3F1D adc r19,r15
10612 5d6a 3F8B std Y+23,r19
10613 5d6c 2E8B std Y+22,r18
10614 5d6e 00C0 rjmp .L863
10615 .L862:
10616 5d70 203C cpi r18,lo8(-64)
10617 5d72 01F4 brne .L864
10618 5d74 4E89 ldd r20,Y+22
10619 5d76 5F89 ldd r21,Y+23
10620 5d78 4E19 sub r20,r14
10621 5d7a 5F09 sbc r21,r15
10622 5d7c 5F8B std Y+23,r21
10623 5d7e 4E8B std Y+22,r20
10624 5d80 00C0 rjmp .L863
10625 .L864:
10626 5d82 C701 movw r24,r14
10627 5d84 AA27 clr r26
10628 5d86 97FD sbrc r25,7
10629 5d88 A095 com r26
10630 5d8a BA2F mov r27,r26
10631 5d8c 3327 clr r19
10632 5d8e 27FD sbrc r18,7
10633 5d90 3095 com r19
10634 5d92 432F mov r20,r19
10635 5d94 532F mov r21,r19
10636 5d96 BC01 movw r22,r24
10637 5d98 CD01 movw r24,r26
10638 5d9a 0E94 0000 call __mulsi3
10639 5d9e 97FF sbrs r25,7
10640 5da0 00C0 rjmp .L866
10641 5da2 615C subi r22,lo8(-(63))
10642 5da4 7F4F sbci r23,hi8(-(63))
10643 5da6 8F4F sbci r24,hlo8(-(63))
10644 5da8 9F4F sbci r25,hhi8(-(63))
10645 .L866:
10646 5daa B6E0 ldi r27,6
10647 5dac 9595 1: asr r25
10648 5dae 8795 ror r24
10649 5db0 7795 ror r23
10650 5db2 6795 ror r22
10651 5db4 BA95 dec r27
10652 5db6 01F4 brne 1b
10653 5db8 AE89 ldd r26,Y+22
10654 5dba BF89 ldd r27,Y+23
10655 5dbc A60F add r26,r22
10656 5dbe B71F adc r27,r23
10657 5dc0 BF8B std Y+23,r27
10658 5dc2 AE8B std Y+22,r26
10659 .L863:
10660 5dc4 F501 movw r30,r10
10661 5dc6 2281 ldd r18,Z+2
10662 5dc8 2034 cpi r18,lo8(64)
10663 5dca 01F4 brne .L867
10664 5dcc 2E89 ldd r18,Y+22
10665 5dce 3F89 ldd r19,Y+23
10666 5dd0 2C0D add r18,r12
10667 5dd2 3D1D adc r19,r13
10668 5dd4 3F8B std Y+23,r19
10669 5dd6 2E8B std Y+22,r18
10670 5dd8 00C0 rjmp .L868
10671 .L867:
10672 5dda 203C cpi r18,lo8(-64)
10673 5ddc 01F4 brne .L869
10674 5dde 4E89 ldd r20,Y+22
10675 5de0 5F89 ldd r21,Y+23
10676 5de2 4C19 sub r20,r12
10677 5de4 5D09 sbc r21,r13
10678 5de6 5F8B std Y+23,r21
10679 5de8 4E8B std Y+22,r20
10680 5dea 00C0 rjmp .L868
10681 .L869:
10682 5dec C601 movw r24,r12
10683 5dee AA27 clr r26
10684 5df0 97FD sbrc r25,7
10685 5df2 A095 com r26
10686 5df4 BA2F mov r27,r26
10687 5df6 3327 clr r19
10688 5df8 27FD sbrc r18,7
10689 5dfa 3095 com r19
10690 5dfc 432F mov r20,r19
10691 5dfe 532F mov r21,r19
10692 5e00 BC01 movw r22,r24
10693 5e02 CD01 movw r24,r26
10694 5e04 0E94 0000 call __mulsi3
10695 5e08 97FF sbrs r25,7
10696 5e0a 00C0 rjmp .L871
10697 5e0c 615C subi r22,lo8(-(63))
10698 5e0e 7F4F sbci r23,hi8(-(63))
10699 5e10 8F4F sbci r24,hlo8(-(63))
10700 5e12 9F4F sbci r25,hhi8(-(63))
10701 .L871:
10702 5e14 A6E0 ldi r26,6
10703 5e16 9595 1: asr r25
10704 5e18 8795 ror r24
10705 5e1a 7795 ror r23
10706 5e1c 6795 ror r22
10707 5e1e AA95 dec r26
10708 5e20 01F4 brne 1b
10709 5e22 AE89 ldd r26,Y+22
10710 5e24 BF89 ldd r27,Y+23
10711 5e26 A60F add r26,r22
10712 5e28 B71F adc r27,r23
10713 5e2a BF8B std Y+23,r27
10714 5e2c AE8B std Y+22,r26
10715 .L868:
10716 5e2e F501 movw r30,r10
10717 5e30 2381 ldd r18,Z+3
10718 5e32 2034 cpi r18,lo8(64)
10719 5e34 01F4 brne .L872
10720 5e36 2E89 ldd r18,Y+22
10721 5e38 3F89 ldd r19,Y+23
10722 5e3a 200F add r18,r16
10723 5e3c 311F adc r19,r17
10724 5e3e 3F8B std Y+23,r19
10725 5e40 2E8B std Y+22,r18
10726 5e42 00C0 rjmp .L873
10727 .L872:
10728 5e44 203C cpi r18,lo8(-64)
10729 5e46 01F4 brne .L874
10730 5e48 4E89 ldd r20,Y+22
10731 5e4a 5F89 ldd r21,Y+23
10732 5e4c 401B sub r20,r16
10733 5e4e 510B sbc r21,r17
10734 5e50 5F8B std Y+23,r21
10735 5e52 4E8B std Y+22,r20
10736 5e54 00C0 rjmp .L873
10737 .L874:
10738 5e56 C801 movw r24,r16
10739 5e58 AA27 clr r26
10740 5e5a 97FD sbrc r25,7
10741 5e5c A095 com r26
10742 5e5e BA2F mov r27,r26
10743 5e60 3327 clr r19
10744 5e62 27FD sbrc r18,7
10745 5e64 3095 com r19
10746 5e66 432F mov r20,r19
10747 5e68 532F mov r21,r19
10748 5e6a BC01 movw r22,r24
10749 5e6c CD01 movw r24,r26
10750 5e6e 0E94 0000 call __mulsi3
10751 5e72 97FF sbrs r25,7
10752 5e74 00C0 rjmp .L876
10753 5e76 615C subi r22,lo8(-(63))
10754 5e78 7F4F sbci r23,hi8(-(63))
10755 5e7a 8F4F sbci r24,hlo8(-(63))
10756 5e7c 9F4F sbci r25,hhi8(-(63))
10757 .L876:
10758 5e7e F6E0 ldi r31,6
10759 5e80 9595 1: asr r25
10760 5e82 8795 ror r24
10761 5e84 7795 ror r23
10762 5e86 6795 ror r22
10763 5e88 FA95 dec r31
10764 5e8a 01F4 brne 1b
10765 5e8c AE89 ldd r26,Y+22
10766 5e8e BF89 ldd r27,Y+23
10767 5e90 A60F add r26,r22
10768 5e92 B71F adc r27,r23
10769 5e94 BF8B std Y+23,r27
10770 5e96 AE8B std Y+22,r26
10771 .L873:
10772 5e98 F301 movw r30,r6
10773 5e9a 8081 ld r24,Z
10774 5e9c 9181 ldd r25,Z+1
10775 5e9e 2E89 ldd r18,Y+22
10776 5ea0 3F89 ldd r19,Y+23
10777 5ea2 8217 cp r24,r18
10778 5ea4 9307 cpc r25,r19
10779 5ea6 04F4 brge .L877
10780 5ea8 B901 movw r22,r18
10781 5eaa 680F add r22,r24
10782 5eac 791F adc r23,r25
10783 5eae 77FF sbrs r23,7
10784 5eb0 00C0 rjmp .L878
10785 5eb2 6F5F subi r22,lo8(-(1))
10786 5eb4 7F4F sbci r23,hi8(-(1))
10787 .L878:
10788 5eb6 7595 asr r23
10789 5eb8 6795 ror r22
10790 5eba 7F8B std Y+23,r23
10791 5ebc 6E8B std Y+22,r22
10792 5ebe 00C0 rjmp .L879
10793 .L877:
10794 5ec0 5520 tst r5
10795 5ec2 01F4 brne .L880
10796 5ec4 4E89 ldd r20,Y+22
10797 5ec6 5F89 ldd r21,Y+23
10798 5ec8 440F add r20,r20
10799 5eca 551F adc r21,r21
10800 5ecc 481B sub r20,r24
10801 5ece 590B sbc r21,r25
10802 5ed0 5F8B std Y+23,r21
10803 5ed2 4E8B std Y+22,r20
10804 5ed4 00C0 rjmp .L879
10805 .L880:
10806 5ed6 51E0 ldi r21,lo8(1)
10807 5ed8 5515 cp r21,r5
10808 5eda 00F4 brsh .L879
10809 5edc 252D mov r18,r5
10810 5ede 3327 clr r19
10811 5ee0 6E89 ldd r22,Y+22
10812 5ee2 7F89 ldd r23,Y+23
10813 5ee4 861B sub r24,r22
10814 5ee6 970B sbc r25,r23
10815 5ee8 B901 movw r22,r18
10816 5eea 0E94 0000 call __divmodhi4
10817 5eee AE89 ldd r26,Y+22
10818 5ef0 BF89 ldd r27,Y+23
10819 5ef2 A60F add r26,r22
10820 5ef4 B71F adc r27,r23
10821 5ef6 BF8B std Y+23,r27
10822 5ef8 AE8B std Y+22,r26
10823 .L879:
10824 5efa C101 movw r24,r2
10825 5efc 880F lsl r24
10826 5efe 991F rol r25
10827 5f00 880F lsl r24
10828 5f02 991F rol r25
10829 5f04 EE89 ldd r30,Y+22
10830 5f06 FF89 ldd r31,Y+23
10831 5f08 8E17 cp r24,r30
10832 5f0a 9F07 cpc r25,r31
10833 5f0c 04F4 brge .L922
10834 5f0e FD89 ldd r31,Y+21
10835 5f10 8F2F mov r24,r31
10836 5f12 9927 clr r25
10837 5f14 880F lsl r24
10838 5f16 991F rol r25
10839 5f18 880F lsl r24
10840 5f1a 991F rol r25
10841 5f1c 2E89 ldd r18,Y+22
10842 5f1e 3F89 ldd r19,Y+23
10843 5f20 2817 cp r18,r24
10844 5f22 3907 cpc r19,r25
10845 5f24 04F0 brlt .L884
10846 .L922:
10847 5f26 9F8B std Y+23,r25
10848 5f28 8E8B std Y+22,r24
10849 .L884:
10850 5f2a 8E89 ldd r24,Y+22
10851 5f2c 9F89 ldd r25,Y+23
10852 5f2e 97FD sbrc r25,7
10853 5f30 0396 adiw r24,3
10854 .L886:
10855 5f32 9595 asr r25
10856 5f34 8795 ror r24
10857 5f36 9595 asr r25
10858 5f38 8795 ror r24
10859 5f3a F401 movw r30,r8
10860 5f3c 8183 std Z+1,r24
10861 5f3e 880F lsl r24
10862 5f40 991F rol r25
10863 5f42 880F lsl r24
10864 5f44 991F rol r25
10865 5f46 2E89 ldd r18,Y+22
10866 5f48 3F89 ldd r19,Y+23
10867 5f4a 281B sub r18,r24
10868 5f4c 390B sbc r19,r25
10869 5f4e C901 movw r24,r18
10870 5f50 880F lsl r24
10871 5f52 8283 std Z+2,r24
10872 5f54 EE89 ldd r30,Y+22
10873 5f56 FF89 ldd r31,Y+23
10874 5f58 D301 movw r26,r6
10875 5f5a ED93 st X+,r30
10876 5f5c FC93 st X,r31
10877 5f5e 00C0 rjmp .L857
10878 .L858:
10879 5f60 F401 movw r30,r8
10880 5f62 1182 std Z+1,__zero_reg__
10881 5f64 1282 std Z+2,__zero_reg__
10882 .L857:
10883 5f66 4A94 dec r4
10884 5f68 22E0 ldi r18,lo8(2)
10885 5f6a 30E0 ldi r19,hi8(2)
10886 5f6c 620E add r6,r18
10887 5f6e 731E adc r7,r19
10888 5f70 44E0 ldi r20,lo8(4)
10889 5f72 50E0 ldi r21,hi8(4)
10890 5f74 A40E add r10,r20
10891 5f76 B51E adc r11,r21
10892 5f78 68E0 ldi r22,lo8(8)
10893 5f7a 70E0 ldi r23,hi8(8)
10894 5f7c 860E add r8,r22
10895 5f7e 971E adc r9,r23
10896 5f80 47FE sbrs r4,7
10897 5f82 00C0 rjmp .L889
10898 /* epilogue: frame size=23 */
10899 5f84 E2E1 ldi r30,18
10900 5f86 C95E subi r28,-23
10901 5f88 0C94 0000 jmp __epilogue_restores__+0
10902 /* epilogue end (size=4) */
10903 /* function MotorRegler size 8305 (8295) */
10905 .comm TrimNick,2,1
10906 .comm TrimRoll,2,1
10907 .comm ErsatzKompass,4,1
10908 .comm ErsatzKompassInGrad,2,1
10909 .comm MesswertNick,2,1
10910 .comm MesswertRoll,2,1
10911 .comm MesswertGier,2,1
10912 .comm Mittelwert_AccNick,2,1
10913 .comm Mittelwert_AccRoll,2,1
10914 .comm NaviAccNick,2,1
10915 .comm NaviAccRoll,2,1
10916 .comm h,1,1
10917 .comm m,1,1
10918 .comm s,1,1
10919 .comm DiffNick,2,1
10920 .comm DiffRoll,2,1
10921 .comm Parameter_Servo3,1,1
10922 .comm Parameter_Servo4,1,1
10923 .comm Parameter_Servo5,1,1
10924 .comm Parameter_J16Bitmask,1,1
10925 .comm Parameter_J16Timing,1,1
10926 .comm Parameter_J17Bitmask,1,1
10927 .comm Parameter_J17Timing,1,1
10928 .comm Parameter_GlobalConfig,1,1
10929 .comm Parameter_ExtraConfig,1,1
10930 .comm MesswertGierBias,2,1
10931 .comm RohMesswertNick,2,1
10932 .comm RohMesswertRoll,2,1
10933 .comm MittelIntegralNick,4,1
10934 .comm MittelIntegralRoll,4,1
10935 .comm MittelIntegralNick2,4,1
10936 .comm MittelIntegralRoll2,4,1
10937 .comm MAX_GAS,1,1
10938 .comm MIN_GAS,1,1
10939 .comm GyroFaktor,1,1
10940 .comm GyroFaktorGier,1,1
10941 .comm IntegralFaktor,1,1
10942 .comm IntegralFaktorGier,1,1
10943 .comm Parameter_NaviGpsModeControl,1,1
10944 .comm Parameter_NaviGpsGain,1,1
10945 .comm Parameter_NaviGpsP,1,1
10946 .comm Parameter_NaviGpsI,1,1
10947 .comm Parameter_NaviGpsD,1,1
10948 .comm Parameter_NaviGpsACC,1,1
10949 .comm Parameter_NaviOperatingRadius,1,1
10950 .comm Parameter_NaviWindCorrection,1,1
10951 .comm Parameter_NaviSpeedCompensation,1,1
10952 .comm Parameter_ExternalControl,1,1
10953 .comm Parameter_MaximumAltitude,1,1
10954 .comm KopplungsteilNickRoll,2,1
10955 .comm KopplungsteilRollNick,2,1
10956 .comm tmp_motorwert,24,1
10957 /* File "fc.c": code 12397 = 0x306d (12336), prologues 31, epilogues 30 */
DEFINED SYMBOLS
*ABS*:00000000 fc.c
C:\Temp/ccfR0jIT.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccfR0jIT.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccfR0jIT.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccfR0jIT.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccfR0jIT.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccfR0jIT.s:15 .bss:00000000 GasIsZeroCnt
C:\Temp/ccfR0jIT.s:21 .bss:00000002 HooverGasEmergencyPercent
C:\Temp/ccfR0jIT.s:27 .data:00000000 VarioCharacter
C:\Temp/ccfR0jIT.s:32 .data:00000001 GIER_GRAD_FAKTOR
C:\Temp/ccfR0jIT.s:39 .bss:00000004 FC_StatusFlags2
C:\Temp/ccfR0jIT.s:45 .bss:00000005 FC_StatusFlags
C:\Temp/ccfR0jIT.s:51 .bss:00000006 modell_fliegt
C:\Temp/ccfR0jIT.s:57 .bss:00000008 MaxStickRoll
C:\Temp/ccfR0jIT.s:63 .bss:0000000a MaxStickNick
C:\Temp/ccfR0jIT.s:69 .data:00000005 ExternHoehenValue
C:\Temp/ccfR0jIT.s:76 .bss:0000000c ExternStickGier
C:\Temp/ccfR0jIT.s:82 .bss:0000000e ExternStickRoll
C:\Temp/ccfR0jIT.s:88 .bss:00000010 ExternStickNick
C:\Temp/ccfR0jIT.s:94 .data:00000007 sintab
C:\Temp/ccfR0jIT.s:131 .bss:00000012 CareFree
C:\Temp/ccfR0jIT.s:137 .data:00000026 Parameter_DynamicStability
C:\Temp/ccfR0jIT.s:142 .data:00000027 Parameter_CouplingYawCorrection
C:\Temp/ccfR0jIT.s:147 .data:00000028 Parameter_AchsKopplung2
C:\Temp/ccfR0jIT.s:152 .data:00000029 Parameter_AchsKopplung1
C:\Temp/ccfR0jIT.s:157 .data:0000002a Parameter_LoopGasLimit
C:\Temp/ccfR0jIT.s:162 .data:0000002b Parameter_ServoRollComp
C:\Temp/ccfR0jIT.s:167 .data:0000002c Parameter_ServoNickComp
C:\Temp/ccfR0jIT.s:172 .data:0000002d Parameter_ServoRollControl
C:\Temp/ccfR0jIT.s:177 .data:0000002e Parameter_ServoNickControl
C:\Temp/ccfR0jIT.s:184 .bss:00000013 Parameter_UserParam8
C:\Temp/ccfR0jIT.s:190 .bss:00000014 Parameter_UserParam7
C:\Temp/ccfR0jIT.s:196 .bss:00000015 Parameter_UserParam6
C:\Temp/ccfR0jIT.s:202 .bss:00000016 Parameter_UserParam5
C:\Temp/ccfR0jIT.s:208 .bss:00000017 Parameter_UserParam4
C:\Temp/ccfR0jIT.s:214 .bss:00000018 Parameter_UserParam3
C:\Temp/ccfR0jIT.s:220 .bss:00000019 Parameter_UserParam2
C:\Temp/ccfR0jIT.s:226 .bss:0000001a Parameter_UserParam1
C:\Temp/ccfR0jIT.s:232 .data:0000002f Parameter_I_Faktor
C:\Temp/ccfR0jIT.s:237 .data:00000030 Parameter_Gier_P
C:\Temp/ccfR0jIT.s:242 .data:00000031 Parameter_Gyro_Gier_I
C:\Temp/ccfR0jIT.s:247 .data:00000032 Parameter_Gyro_Gier_P
C:\Temp/ccfR0jIT.s:252 .data:00000033 Parameter_Gyro_I
C:\Temp/ccfR0jIT.s:257 .data:00000034 Parameter_Gyro_P
C:\Temp/ccfR0jIT.s:262 .data:00000035 Parameter_Gyro_D
C:\Temp/ccfR0jIT.s:267 .data:00000036 Parameter_Hoehe_GPS_Z
C:\Temp/ccfR0jIT.s:272 .data:00000037 Parameter_KompassWirkung
C:\Temp/ccfR0jIT.s:277 .data:00000038 Parameter_Hoehe_ACC_Wirkung
C:\Temp/ccfR0jIT.s:282 .data:00000039 Parameter_Hoehe_P
C:\Temp/ccfR0jIT.s:287 .data:0000003a Parameter_HoehenSchalter
C:\Temp/ccfR0jIT.s:292 .data:0000003b Parameter_Luftdruck_D
C:\Temp/ccfR0jIT.s:299 .bss:0000001b Looping_Oben
C:\Temp/ccfR0jIT.s:305 .bss:0000001c Looping_Unten
C:\Temp/ccfR0jIT.s:311 .bss:0000001d Looping_Rechts
C:\Temp/ccfR0jIT.s:317 .bss:0000001e Looping_Links
C:\Temp/ccfR0jIT.s:323 .bss:0000001f Looping_Roll
C:\Temp/ccfR0jIT.s:329 .bss:00000020 Looping_Nick
C:\Temp/ccfR0jIT.s:335 .data:0000003c Ki
C:\Temp/ccfR0jIT.s:342 .bss:00000021 HoverGas
C:\Temp/ccfR0jIT.s:348 .bss:00000023 LageKorrekturNick
C:\Temp/ccfR0jIT.s:354 .bss:00000025 LageKorrekturRoll
C:\Temp/ccfR0jIT.s:360 .bss:00000027 NeueKompassRichtungMerken
C:\Temp/ccfR0jIT.s:366 .bss:00000028 CalibrationDone
C:\Temp/ccfR0jIT.s:372 .bss:00000029 CompassGierSetpoint
C:\Temp/ccfR0jIT.s:378 .bss:0000002b WaypointTrimming
C:\Temp/ccfR0jIT.s:384 .data:0000003e carefree_old
C:\Temp/ccfR0jIT.s:391 .bss:0000002c FromNC_AltitudeSpeed
C:\Temp/ccfR0jIT.s:397 .bss:0000002d FromNC_AltitudeSetpoint
C:\Temp/ccfR0jIT.s:403 .bss:00000031 AltitudeSetpointTrimming
C:\Temp/ccfR0jIT.s:409 .bss:00000033 SollHoehe
C:\Temp/ccfR0jIT.s:415 .bss:00000037 HoehenWert
C:\Temp/ccfR0jIT.s:421 .bss:0000003b StartTrigger
C:\Temp/ccfR0jIT.s:427 .bss:0000003c MotorenEin
C:\Temp/ccfR0jIT.s:433 .bss:0000003d SenderOkay
C:\Temp/ccfR0jIT.s:439 .bss:0000003e Poti
C:\Temp/ccfR0jIT.s:445 .bss:00000047 StickGas
C:\Temp/ccfR0jIT.s:451 .bss:00000049 StickGier
C:\Temp/ccfR0jIT.s:457 .bss:0000004b StickRoll
C:\Temp/ccfR0jIT.s:463 .bss:0000004d StickNick
C:\Temp/ccfR0jIT.s:469 .data:0000003f HoverGasMax
C:\Temp/ccfR0jIT.s:476 .bss:0000004f HoverGasMin
C:\Temp/ccfR0jIT.s:482 .data:00000041 StickGasHover
C:\Temp/ccfR0jIT.s:489 .bss:00000051 GierGyroFehler
C:\Temp/ccfR0jIT.s:495 .data:00000043 Umschlag180Roll
C:\Temp/ccfR0jIT.s:500 .data:00000047 Umschlag180Nick
C:\Temp/ccfR0jIT.s:507 .bss:00000053 TrichterFlug
C:\Temp/ccfR0jIT.s:513 .bss:00000054 HoehenReglerAktiv
C:\Temp/ccfR0jIT.s:519 .data:0000004b KompassSignalSchlecht
C:\Temp/ccfR0jIT.s:524 .data:0000004d KompassFusion
C:\Temp/ccfR0jIT.s:529 .data:0000004e CalculateCompassTimer
C:\Temp/ccfR0jIT.s:536 .bss:00000055 KompassSollWert
C:\Temp/ccfR0jIT.s:542 .data:0000004f KompassValue
C:\Temp/ccfR0jIT.s:549 .bss:00000057 Mess_Integral_Hoch
C:\Temp/ccfR0jIT.s:555 .bss:0000005b SummeRoll
C:\Temp/ccfR0jIT.s:561 .bss:0000005f SummeNick
C:\Temp/ccfR0jIT.s:567 .bss:00000063 Mess_Integral_Gier2
C:\Temp/ccfR0jIT.s:573 .bss:00000067 Mess_Integral_Gier
C:\Temp/ccfR0jIT.s:579 .bss:0000006b Mess_IntegralRoll2
C:\Temp/ccfR0jIT.s:585 .bss:0000006f Mess_IntegralRoll
C:\Temp/ccfR0jIT.s:591 .bss:00000073 Mess_IntegralNick2
C:\Temp/ccfR0jIT.s:597 .bss:00000077 Mess_IntegralNick
C:\Temp/ccfR0jIT.s:603 .bss:0000007b Integral_Gier
C:\Temp/ccfR0jIT.s:609 .bss:0000007f IntegralAccZ
C:\Temp/ccfR0jIT.s:615 .bss:00000083 IntegralAccRoll
C:\Temp/ccfR0jIT.s:621 .bss:00000087 IntegralAccNick
C:\Temp/ccfR0jIT.s:627 .bss:0000008b IntegralRoll2
C:\Temp/ccfR0jIT.s:633 .bss:0000008f IntegralRoll
C:\Temp/ccfR0jIT.s:639 .bss:00000093 IntegralNick2
C:\Temp/ccfR0jIT.s:645 .bss:00000097 IntegralNick
C:\Temp/ccfR0jIT.s:651 .bss:0000009b ControlHeading
C:\Temp/ccfR0jIT.s:657 .bss:0000009c NeutralAccZ
C:\Temp/ccfR0jIT.s:663 .bss:0000009e NaviCntAcc
C:\Temp/ccfR0jIT.s:669 .bss:000000a0 NeutralAccY
C:\Temp/ccfR0jIT.s:675 .bss:000000a2 NeutralAccX
C:\Temp/ccfR0jIT.s:681 .bss:000000a4 StartNeutralNick
C:\Temp/ccfR0jIT.s:687 .bss:000000a6 StartNeutralRoll
C:\Temp/ccfR0jIT.s:693 .bss:000000a8 AdNeutralGier
C:\Temp/ccfR0jIT.s:699 .bss:000000aa AdNeutralRoll
C:\Temp/ccfR0jIT.s:705 .bss:000000ac AdNeutralNick
C:\Temp/ccfR0jIT.s:711 .bss:000000ae BaroExpandActive
C:\Temp/ccfR0jIT.s:716 .text:00000000 CopyDebugValues
*COM*:00000002 Mittelwert_AccNick
*COM*:00000002 Mittelwert_AccRoll
*COM*:00000004 ErsatzKompass
C:\Temp/ccfR0jIT.s:912 .text:00000254 Piep
C:\Temp/ccfR0jIT.s:986 .text:000002da CalibrierMittelwert
*COM*:00000002 MesswertNick
*COM*:00000002 MesswertRoll
*COM*:00000002 MesswertGier
C:\Temp/ccfR0jIT.s:1128 .progmem.data:00000000 __c.35
C:\Temp/ccfR0jIT.s:1133 .text:0000041c SetNeutral
.bss:000000b0 tmpl.27
C:\Temp/ccfR0jIT.s:1641 .bss:000000b4 tmpl2.28
C:\Temp/ccfR0jIT.s:1642 .bss:000000b8 tmpl3.29
C:\Temp/ccfR0jIT.s:1643 .bss:000000bc tmpl4.30
C:\Temp/ccfR0jIT.s:1644 .bss:000000c0 oldNick.31
C:\Temp/ccfR0jIT.s:1645 .bss:000000c2 oldRoll.32
C:\Temp/ccfR0jIT.s:1646 .bss:000000c4 d2Roll.33
C:\Temp/ccfR0jIT.s:1647 .bss:000000c6 d2Nick.34
C:\Temp/ccfR0jIT.s:1651 .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/ccfR0jIT.s:3216 .text:000018ec SendMotorData
C:\Temp/ccfR0jIT.s:3276 .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/ccfR0jIT.s:1648 .bss:000000c8 sollGier.0
C:\Temp/ccfR0jIT.s:4019 .bss:000000cc tmp_long.1
C:\Temp/ccfR0jIT.s:4020 .bss:000000d0 tmp_long2.2
C:\Temp/ccfR0jIT.s:4021 .bss:000000d4 IntegralFehlerNick.3
C:\Temp/ccfR0jIT.s:4022 .bss:000000d8 IntegralFehlerRoll.4
C:\Temp/ccfR0jIT.s:4023 .bss:000000dc RcLostTimer.5
C:\Temp/ccfR0jIT.s:4024 .bss:000000de delay_neutral.6
C:\Temp/ccfR0jIT.s:4025 .bss:000000df delay_einschalten.7
C:\Temp/ccfR0jIT.s:4026 .bss:000000e0 delay_ausschalten.8
C:\Temp/ccfR0jIT.s:4027 .bss:000000e1 move_safety_switch.9
C:\Temp/ccfR0jIT.s:4028 .bss:000000e2 ausgleichNick.10
C:\Temp/ccfR0jIT.s:4029 .bss:000000e6 ausgleichRoll.11
C:\Temp/ccfR0jIT.s:4030 .bss:000000ea stick_nick.12
C:\Temp/ccfR0jIT.s:4031 .bss:000000ec stick_roll.13
C:\Temp/ccfR0jIT.s:4032 .bss:000000ee cnt.14
C:\Temp/ccfR0jIT.s:4033 .bss:000000f0 last_n_p.15
C:\Temp/ccfR0jIT.s:4034 .bss:000000f1 last_n_n.16
C:\Temp/ccfR0jIT.s:4035 .bss:000000f2 last_r_p.17
C:\Temp/ccfR0jIT.s:4036 .bss:000000f3 last_r_n.18
C:\Temp/ccfR0jIT.s:4037 .bss:000000f4 MittelIntegralNick_Alt.19
C:\Temp/ccfR0jIT.s:4038 .bss:000000f8 MittelIntegralRoll_Alt.20
C:\Temp/ccfR0jIT.s:4039 .bss:000000fc HeightTrimming.21
C:\Temp/ccfR0jIT.s:4040 .bss:000000fe FilterHCGas.22
C:\Temp/ccfR0jIT.s:4041 .bss:00000100 HoverGasFilter.23
C:\Temp/ccfR0jIT.s:4046 .data:00000051 delay.24
C:\Temp/ccfR0jIT.s:4042 .bss:00000104 BaroAtUpperLimit.25
C:\Temp/ccfR0jIT.s:4048 .bss:00000105 BaroAtLowerLimit.26
C:\Temp/ccfR0jIT.s:4053 .text:00001f9e 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.90e_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.90e_Ernstl_8-Motoren+Sexpander/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.90e_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.90e_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.90e_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.90e_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/cc1oP0Ls.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc1oP0Ls.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc1oP0Ls.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc1oP0Ls.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc1oP0Ls.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc1oP0Ls.s:15 .bss:00000000 HottestBl
C:\Temp/cc1oP0Ls.s:21 .bss:00000001 MinBlTempertaure
C:\Temp/cc1oP0Ls.s:27 .bss:00000002 MaxBlTempertaure
C:\Temp/cc1oP0Ls.s:33 .progmem.data:00000000 HOTT_ERROR
C:\Temp/cc1oP0Ls.s:100 .progmem.data:00000040 NC_ERROR_TEXT
C:\Temp/cc1oP0Ls.s:136 .progmem.data:00000260 UNDERVOLTAGE
C:\Temp/cc1oP0Ls.s:141 .progmem.data:00000276 MIKROKOPTER
C:\Temp/cc1oP0Ls.s:148 .bss:00000003 HoTTVarioMeter
C:\Temp/cc1oP0Ls.s:154 .bss:00000005 ToNC_SpeakHoTT
C:\Temp/cc1oP0Ls.s:160 .data:00000000 SpeakHoTT
C:\Temp/cc1oP0Ls.s:167 .bss:00000006 NaviData_TargetDistance
C:\Temp/cc1oP0Ls.s:173 .bss:00000008 NaviData_TargetHoldTime
C:\Temp/cc1oP0Ls.s:179 .bss:00000009 NaviData_WaypointNumber
C:\Temp/cc1oP0Ls.s:185 .bss:0000000a NaviData_WaypointIndex
.bss:0000000b search.98
C:\Temp/cc1oP0Ls.s:187 .bss:0000000c tmp_max.99
C:\Temp/cc1oP0Ls.s:188 .bss:0000000d tmp_min.100
C:\Temp/cc1oP0Ls.s:189 .bss:0000000e who.101
C:\Temp/cc1oP0Ls.s:194 .text:00000000 GetHottestBl
C:\Temp/cc1oP0Ls.s:262 .progmem.data:0000028c __c.97
C:\Temp/cc1oP0Ls.s:267 .text:0000008c Hott_ClearLine
C:\Temp/cc1oP0Ls.s:190 .bss:0000000f old_status.95
C:\Temp/cc1oP0Ls.s:295 .bss:00000010 repeat.96
C:\Temp/cc1oP0Ls.s:299 .text:000000bc HoTT_Waring
C:\Temp/cc1oP0Ls.s:396 .text:0000016e NC_Fills_HoTT_Telemety
*COM*:0000002c VarioPacket
*COM*:0000002c GPSPacket
*COM*:0000002c ElectricAirPacket
*COM*:0000002c HoTTGeneral
C:\Temp/cc1oP0Ls.s:469 .text:000001e0 BuildHoTT_Vario
C:\Temp/cc1oP0Ls.s:577 .text:000002aa HoTT_Telemety
C:\Temp/cc1oP0Ls.s:296 .bss:00000012 line.0
C:\Temp/cc1oP0Ls.s:1157 .bss:00000013 page.1
C:\Temp/cc1oP0Ls.s:1158 .bss:00000014 show_current.2
C:\Temp/cc1oP0Ls.s:1159 .bss:00000015 show_mag.3
C:\Temp/cc1oP0Ls.s:1160 .bss:00000016 show_poti.4
C:\Temp/cc1oP0Ls.s:1165 .progmem.data:000002a2 __c.5
C:\Temp/cc1oP0Ls.s:1169 .progmem.data:000002af __c.6
C:\Temp/cc1oP0Ls.s:1173 .progmem.data:000002bc __c.7
C:\Temp/cc1oP0Ls.s:1177 .progmem.data:000002c8 __c.8
C:\Temp/cc1oP0Ls.s:1181 .progmem.data:000002d3 __c.9
C:\Temp/cc1oP0Ls.s:1185 .progmem.data:000002dd __c.10
C:\Temp/cc1oP0Ls.s:1189 .progmem.data:000002ea __c.11
C:\Temp/cc1oP0Ls.s:1193 .progmem.data:000002f7 __c.12
C:\Temp/cc1oP0Ls.s:1197 .progmem.data:00000302 __c.13
C:\Temp/cc1oP0Ls.s:1201 .progmem.data:00000304 __c.14
C:\Temp/cc1oP0Ls.s:1205 .progmem.data:00000306 __c.15
C:\Temp/cc1oP0Ls.s:1209 .progmem.data:0000030e __c.16
C:\Temp/cc1oP0Ls.s:1213 .progmem.data:00000316 __c.17
C:\Temp/cc1oP0Ls.s:1217 .progmem.data:00000322 __c.18
C:\Temp/cc1oP0Ls.s:1221 .progmem.data:00000324 __c.19
C:\Temp/cc1oP0Ls.s:1225 .progmem.data:00000326 __c.20
C:\Temp/cc1oP0Ls.s:1229 .progmem.data:00000328 __c.21
C:\Temp/cc1oP0Ls.s:1233 .progmem.data:0000033e __c.22
C:\Temp/cc1oP0Ls.s:1237 .progmem.data:00000354 __c.23
C:\Temp/cc1oP0Ls.s:1241 .progmem.data:00000356 __c.24
C:\Temp/cc1oP0Ls.s:1245 .progmem.data:0000035f __c.25
C:\Temp/cc1oP0Ls.s:1249 .progmem.data:00000369 __c.26
C:\Temp/cc1oP0Ls.s:1253 .progmem.data:0000036c __c.27
C:\Temp/cc1oP0Ls.s:1257 .progmem.data:0000036f __c.28
C:\Temp/cc1oP0Ls.s:1261 .progmem.data:00000372 __c.29
C:\Temp/cc1oP0Ls.s:1265 .progmem.data:0000037d __c.30
C:\Temp/cc1oP0Ls.s:1269 .progmem.data:00000389 __c.31
C:\Temp/cc1oP0Ls.s:1273 .progmem.data:00000399 __c.32
C:\Temp/cc1oP0Ls.s:1277 .progmem.data:000003b2 __c.33
C:\Temp/cc1oP0Ls.s:1281 .progmem.data:000003bd __c.34
C:\Temp/cc1oP0Ls.s:1285 .progmem.data:000003c3 __c.35
C:\Temp/cc1oP0Ls.s:1289 .progmem.data:000003d6 __c.36
C:\Temp/cc1oP0Ls.s:1293 .progmem.data:000003ec __c.37
C:\Temp/cc1oP0Ls.s:1297 .progmem.data:00000407 __c.38
C:\Temp/cc1oP0Ls.s:1301 .progmem.data:00000422 __c.39
C:\Temp/cc1oP0Ls.s:1305 .progmem.data:0000042c __c.40
C:\Temp/cc1oP0Ls.s:1309 .progmem.data:00000435 __c.41
C:\Temp/cc1oP0Ls.s:1313 .progmem.data:0000043e __c.42
C:\Temp/cc1oP0Ls.s:1317 .progmem.data:00000448 __c.43
C:\Temp/cc1oP0Ls.s:1321 .progmem.data:0000044b __c.44
C:\Temp/cc1oP0Ls.s:1325 .progmem.data:00000462 __c.45
C:\Temp/cc1oP0Ls.s:1329 .progmem.data:00000476 __c.46
C:\Temp/cc1oP0Ls.s:1333 .progmem.data:00000479 __c.47
C:\Temp/cc1oP0Ls.s:1337 .progmem.data:0000047c __c.48
C:\Temp/cc1oP0Ls.s:1341 .progmem.data:0000048f __c.49
C:\Temp/cc1oP0Ls.s:1345 .progmem.data:00000495 __c.50
C:\Temp/cc1oP0Ls.s:1349 .progmem.data:0000049b __c.51
C:\Temp/cc1oP0Ls.s:1353 .progmem.data:000004a1 __c.52
C:\Temp/cc1oP0Ls.s:1357 .progmem.data:000004b7 __c.53
C:\Temp/cc1oP0Ls.s:1361 .progmem.data:000004d4 __c.54
C:\Temp/cc1oP0Ls.s:1365 .progmem.data:000004e7 __c.55
C:\Temp/cc1oP0Ls.s:1369 .progmem.data:000004f6 __c.56
C:\Temp/cc1oP0Ls.s:1373 .progmem.data:00000513 __c.57
C:\Temp/cc1oP0Ls.s:1377 .progmem.data:00000526 __c.58
C:\Temp/cc1oP0Ls.s:1381 .progmem.data:00000539 __c.59
C:\Temp/cc1oP0Ls.s:1385 .progmem.data:00000544 __c.60
C:\Temp/cc1oP0Ls.s:1389 .progmem.data:0000054a __c.61
C:\Temp/cc1oP0Ls.s:1393 .progmem.data:0000055d __c.62
C:\Temp/cc1oP0Ls.s:1397 .progmem.data:00000573 __c.63
C:\Temp/cc1oP0Ls.s:1401 .progmem.data:00000582 __c.64
C:\Temp/cc1oP0Ls.s:1405 .progmem.data:00000593 __c.65
C:\Temp/cc1oP0Ls.s:1409 .progmem.data:00000598 __c.66
C:\Temp/cc1oP0Ls.s:1413 .progmem.data:000005a2 __c.67
C:\Temp/cc1oP0Ls.s:1417 .progmem.data:000005a9 __c.68
C:\Temp/cc1oP0Ls.s:1421 .progmem.data:000005b0 __c.69
C:\Temp/cc1oP0Ls.s:1425 .progmem.data:000005b6 __c.70
C:\Temp/cc1oP0Ls.s:1429 .progmem.data:000005bc __c.71
C:\Temp/cc1oP0Ls.s:1433 .progmem.data:000005c5 __c.72
C:\Temp/cc1oP0Ls.s:1437 .progmem.data:000005c9 __c.73
C:\Temp/cc1oP0Ls.s:1441 .progmem.data:000005d2 __c.74
C:\Temp/cc1oP0Ls.s:1445 .progmem.data:000005d9 __c.75
C:\Temp/cc1oP0Ls.s:1449 .progmem.data:000005e0 __c.76
C:\Temp/cc1oP0Ls.s:1453 .progmem.data:000005e7 __c.77
C:\Temp/cc1oP0Ls.s:1457 .progmem.data:000005ec __c.78
C:\Temp/cc1oP0Ls.s:1461 .progmem.data:000005f5 __c.79
C:\Temp/cc1oP0Ls.s:1465 .progmem.data:000005fc __c.80
C:\Temp/cc1oP0Ls.s:1469 .progmem.data:00000603 __c.81
C:\Temp/cc1oP0Ls.s:1473 .progmem.data:0000060a __c.82
C:\Temp/cc1oP0Ls.s:1477 .progmem.data:00000611 __c.83
C:\Temp/cc1oP0Ls.s:1481 .progmem.data:0000061c __c.84
C:\Temp/cc1oP0Ls.s:1485 .progmem.data:00000626 __c.85
C:\Temp/cc1oP0Ls.s:1489 .progmem.data:0000062a __c.86
C:\Temp/cc1oP0Ls.s:1493 .progmem.data:00000630 __c.87
C:\Temp/cc1oP0Ls.s:1497 .progmem.data:00000644 __c.88
C:\Temp/cc1oP0Ls.s:1501 .progmem.data:00000653 __c.89
C:\Temp/cc1oP0Ls.s:1505 .progmem.data:00000667 __c.90
C:\Temp/cc1oP0Ls.s:1509 .progmem.data:0000067b __c.91
C:\Temp/cc1oP0Ls.s:1513 .progmem.data:0000068a __c.92
C:\Temp/cc1oP0Ls.s:1517 .progmem.data:00000694 __c.93
C:\Temp/cc1oP0Ls.s:1521 .progmem.data:00000699 __c.94
C:\Temp/cc1oP0Ls.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.90e_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.90e_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.90e_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.90e_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.90e_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.90e_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/ccP42c6U.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccP42c6U.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccP42c6U.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccP42c6U.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccP42c6U.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccP42c6U.s:14 .data:00000000 JetiExData
C:\Temp/ccP42c6U.s:99 .progmem.data:00000000 JETI_CODE
.bss:00000000 JetiVarioMeter.0
C:\Temp/ccP42c6U.s:157 .text:00000000 BuildJeti_Vario
C:\Temp/ccP42c6U.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.90e_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.90e_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.90e_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/ccP6Fe5c.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccP6Fe5c.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccP6Fe5c.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccP6Fe5c.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccP6Fe5c.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccP6Fe5c.s:14 .progmem.data:00000000 JetiBox_Menu
C:\Temp/ccP6Fe5c.s:18 .text:00000000 Menu_Status
C:\Temp/ccP6Fe5c.s:28 .text:00000002 Menu_Temperature
C:\Temp/ccP6Fe5c.s:38 .text:00000004 Menu_Battery
C:\Temp/ccP6Fe5c.s:48 .text:00000006 Magnet_Values
C:\Temp/ccP6Fe5c.s:58 .text:00000008 Menu_PosInfo
C:\Temp/ccP6Fe5c.s:68 .text:0000000a JetiBox_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_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.90e_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.90e_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/cc6xxHY5.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc6xxHY5.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc6xxHY5.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc6xxHY5.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc6xxHY5.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc6xxHY5.s:14 .data:00000000 J17Mask
C:\Temp/cc6xxHY5.s:21 .bss:00000000 J17Blinkcount
C:\Temp/cc6xxHY5.s:27 .data:00000001 J16Mask
C:\Temp/cc6xxHY5.s:34 .bss:00000001 J16Blinkcount
C:\Temp/cc6xxHY5.s:40 .bss:00000002 LED2_Timing
C:\Temp/cc6xxHY5.s:46 .bss:00000004 LED1_Timing
C:\Temp/cc6xxHY5.s:51 .text:00000000 LED_Init
.bss:00000006 delay.0
C:\Temp/cc6xxHY5.s:69 .bss:00000007 J16Bitmask.1
C:\Temp/cc6xxHY5.s:70 .bss:00000008 J17Bitmask.2
C:\Temp/cc6xxHY5.s:71 .bss:00000009 J16Warn.3
C:\Temp/cc6xxHY5.s:72 .bss:0000000a J17Warn.4
C:\Temp/cc6xxHY5.s:73 .bss:0000000b from_nc.5
C:\Temp/cc6xxHY5.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.90e_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.90e_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.90e_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.90e_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/ccGRXg4e.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccGRXg4e.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccGRXg4e.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccGRXg4e.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccGRXg4e.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccGRXg4e.s:15 .bss:00000000 JetiBeep
C:\Temp/ccGRXg4e.s:21 .bss:00000001 FoundMotors
C:\Temp/ccGRXg4e.s:27 .bss:00000002 FlugSekunden
C:\Temp/ccGRXg4e.s:33 .bss:00000004 FlugMinutenGesamt
C:\Temp/ccGRXg4e.s:39 .bss:00000006 FlugMinuten
C:\Temp/ccGRXg4e.s:45 .data:00000000 BattLowVoltageWarning
C:\Temp/ccGRXg4e.s:50 .data:00000001 PlatinenVersion
C:\Temp/ccGRXg4e.s:57 .bss:00000008 DisableRcOffBeeping
C:\Temp/ccGRXg4e.s:62 .progmem.data:00000000 __c.11
C:\Temp/ccGRXg4e.s:67 .text:00000000 PrintLine
*COM*:00000002 _printf_P
C:\Temp/ccGRXg4e.s:93 .data:00000002 stick.10
C:\Temp/ccGRXg4e.s:98 .text:00000024 CalMk3Mag
C:\Temp/ccGRXg4e.s:152 .progmem.data:00000026 __c.7
C:\Temp/ccGRXg4e.s:156 .progmem.data:0000002e __c.8
C:\Temp/ccGRXg4e.s:160 .progmem.data:00000039 __c.9
C:\Temp/ccGRXg4e.s:165 .text:0000008e LipoDetection
C:\Temp/ccGRXg4e.s:302 .progmem.data:0000004d __c.0
C:\Temp/ccGRXg4e.s:306 .progmem.data:0000005f __c.1
C:\Temp/ccGRXg4e.s:310 .progmem.data:00000062 __c.2
C:\Temp/ccGRXg4e.s:314 .progmem.data:00000080 __c.3
C:\Temp/ccGRXg4e.s:318 .progmem.data:000000a0 __c.4
C:\Temp/ccGRXg4e.s:322 .progmem.data:000000a5 __c.5
.bss:00000009 second.6
C:\Temp/ccGRXg4e.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.90e_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 = 4
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.90e_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.90e_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.90e_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 85E6 ldi r24,lo8(101)
522 0144 90E0 ldi r25,hi8(101)
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/ccJ2hL4a.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccJ2hL4a.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccJ2hL4a.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccJ2hL4a.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccJ2hL4a.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccJ2hL4a.s:15 .bss:00000000 RemoteKeys
C:\Temp/ccJ2hL4a.s:21 .bss:00000001 MenuePunkt
C:\Temp/ccJ2hL4a.s:27 .data:00000000 MaxMenue
C:\Temp/ccJ2hL4a.s:34 .bss:00000002 DispPtr
C:\Temp/ccJ2hL4a.s:39 .text:00000000 LcdClear
*COM*:00000050 DisplayBuff
C:\Temp/ccJ2hL4a.s:58 .text:00000012 Menu_Putchar
C:\Temp/ccJ2hL4a.s:81 .progmem.data:00000000 __c.0
C:\Temp/ccJ2hL4a.s:85 .progmem.data:00000005 __c.1
C:\Temp/ccJ2hL4a.s:89 .progmem.data:0000000a __c.2
C:\Temp/ccJ2hL4a.s:93 .progmem.data:0000001a __c.3
C:\Temp/ccJ2hL4a.s:97 .progmem.data:00000032 __c.4
C:\Temp/ccJ2hL4a.s:101 .progmem.data:00000040 __c.5
C:\Temp/ccJ2hL4a.s:105 .progmem.data:0000004d __c.6
C:\Temp/ccJ2hL4a.s:109 .progmem.data:00000055 __c.7
C:\Temp/ccJ2hL4a.s:113 .progmem.data:0000006c __c.8
C:\Temp/ccJ2hL4a.s:117 .progmem.data:00000081 __c.9
C:\Temp/ccJ2hL4a.s:121 .progmem.data:0000008e __c.10
C:\Temp/ccJ2hL4a.s:125 .progmem.data:0000009b __c.11
C:\Temp/ccJ2hL4a.s:129 .progmem.data:000000a8 __c.12
C:\Temp/ccJ2hL4a.s:133 .progmem.data:000000b5 __c.13
C:\Temp/ccJ2hL4a.s:137 .progmem.data:000000c2 __c.14
C:\Temp/ccJ2hL4a.s:141 .progmem.data:000000d1 __c.15
C:\Temp/ccJ2hL4a.s:145 .progmem.data:000000da __c.16
C:\Temp/ccJ2hL4a.s:149 .progmem.data:000000e7 __c.17
C:\Temp/ccJ2hL4a.s:153 .progmem.data:000000f6 __c.18
C:\Temp/ccJ2hL4a.s:157 .progmem.data:00000105 __c.19
C:\Temp/ccJ2hL4a.s:161 .progmem.data:00000114 __c.20
C:\Temp/ccJ2hL4a.s:165 .progmem.data:00000126 __c.21
C:\Temp/ccJ2hL4a.s:169 .progmem.data:00000136 __c.22
C:\Temp/ccJ2hL4a.s:173 .progmem.data:00000146 __c.23
C:\Temp/ccJ2hL4a.s:177 .progmem.data:00000156 __c.24
C:\Temp/ccJ2hL4a.s:181 .progmem.data:00000166 __c.25
C:\Temp/ccJ2hL4a.s:185 .progmem.data:00000174 __c.26
C:\Temp/ccJ2hL4a.s:189 .progmem.data:00000185 __c.27
C:\Temp/ccJ2hL4a.s:193 .progmem.data:00000196 __c.28
C:\Temp/ccJ2hL4a.s:197 .progmem.data:000001a4 __c.29
C:\Temp/ccJ2hL4a.s:201 .progmem.data:000001b6 __c.30
C:\Temp/ccJ2hL4a.s:205 .progmem.data:000001c8 __c.31
C:\Temp/ccJ2hL4a.s:209 .progmem.data:000001d7 __c.32
C:\Temp/ccJ2hL4a.s:213 .progmem.data:000001eb __c.33
C:\Temp/ccJ2hL4a.s:217 .progmem.data:000001ff __c.34
C:\Temp/ccJ2hL4a.s:221 .progmem.data:00000213 __c.35
C:\Temp/ccJ2hL4a.s:225 .progmem.data:00000220 __c.36
C:\Temp/ccJ2hL4a.s:229 .progmem.data:0000022f __c.37
C:\Temp/ccJ2hL4a.s:233 .progmem.data:0000023e __c.38
C:\Temp/ccJ2hL4a.s:237 .progmem.data:0000024d __c.39
C:\Temp/ccJ2hL4a.s:241 .progmem.data:00000261 __c.40
C:\Temp/ccJ2hL4a.s:245 .progmem.data:00000275 __c.41
C:\Temp/ccJ2hL4a.s:249 .progmem.data:00000285 __c.42
C:\Temp/ccJ2hL4a.s:253 .progmem.data:00000297 __c.43
C:\Temp/ccJ2hL4a.s:257 .progmem.data:000002a0 __c.44
C:\Temp/ccJ2hL4a.s:261 .progmem.data:000002b0 __c.45
C:\Temp/ccJ2hL4a.s:265 .progmem.data:000002c0 __c.46
C:\Temp/ccJ2hL4a.s:269 .progmem.data:000002d0 __c.47
C:\Temp/ccJ2hL4a.s:273 .progmem.data:000002d8 __c.48
C:\Temp/ccJ2hL4a.s:277 .progmem.data:000002e6 __c.49
C:\Temp/ccJ2hL4a.s:281 .progmem.data:000002f4 __c.50
C:\Temp/ccJ2hL4a.s:285 .progmem.data:00000302 __c.51
C:\Temp/ccJ2hL4a.s:289 .progmem.data:0000030f __c.52
C:\Temp/ccJ2hL4a.s:293 .progmem.data:0000031c __c.53
C:\Temp/ccJ2hL4a.s:297 .progmem.data:00000324 __c.54
C:\Temp/ccJ2hL4a.s:301 .progmem.data:00000332 __c.55
C:\Temp/ccJ2hL4a.s:305 .progmem.data:00000340 __c.56
C:\Temp/ccJ2hL4a.s:309 .progmem.data:0000034e __c.57
C:\Temp/ccJ2hL4a.s:313 .progmem.data:0000035e __c.58
C:\Temp/ccJ2hL4a.s:317 .progmem.data:0000036f __c.59
C:\Temp/ccJ2hL4a.s:321 .progmem.data:0000037e __c.60
C:\Temp/ccJ2hL4a.s:325 .progmem.data:0000038f __c.61
C:\Temp/ccJ2hL4a.s:329 .progmem.data:0000039e __c.62
C:\Temp/ccJ2hL4a.s:333 .progmem.data:000003b2 __c.63
C:\Temp/ccJ2hL4a.s:337 .progmem.data:000003c6 __c.64
C:\Temp/ccJ2hL4a.s:341 .progmem.data:000003d7 __c.65
C:\Temp/ccJ2hL4a.s:345 .progmem.data:000003da __c.66
C:\Temp/ccJ2hL4a.s:349 .progmem.data:000003dd __c.67
C:\Temp/ccJ2hL4a.s:353 .progmem.data:000003e0 __c.68
C:\Temp/ccJ2hL4a.s:357 .progmem.data:000003ee __c.69
C:\Temp/ccJ2hL4a.s:361 .progmem.data:000003fb __c.70
C:\Temp/ccJ2hL4a.s:365 .progmem.data:00000408 __c.71
C:\Temp/ccJ2hL4a.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.90e_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.90e_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.90e_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/ccuE6FUj.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccuE6FUj.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccuE6FUj.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccuE6FUj.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccuE6FUj.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccuE6FUj.s:14 .progmem.data:00000000 pgm_sinlookup
C:\Temp/ccuE6FUj.s:109 .text:00000000 c_sin_8192
C:\Temp/ccuE6FUj.s:203 .text:00000098 c_cos_8192
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
/branches/v0.90e_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.90e_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.90e_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.90e_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.90e_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/cc7W6ICN.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc7W6ICN.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc7W6ICN.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc7W6ICN.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc7W6ICN.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc7W6ICN.s:14 .data:00000000 PPM_Neutral
C:\Temp/cc7W6ICN.s:19 .data:00000002 NewPpmData
C:\Temp/cc7W6ICN.s:26 .bss:00000000 tmpChannels
C:\Temp/cc7W6ICN.s:31 .text:00000000 rc_sum_init
*COM*:00000034 PPM_diff
*COM*:00000034 PPM_in
.bss:00000001 AltICR.0
C:\Temp/cc7W6ICN.s:76 .bss:00000003 index.1
C:\Temp/cc7W6ICN.s:77 .bss:00000005 AltICR.2
C:\Temp/cc7W6ICN.s:78 .bss:00000007 ppm_in.3
C:\Temp/cc7W6ICN.s:79 .bss:00000021 ppm_diff.4
C:\Temp/cc7W6ICN.s:80 .bss:0000003b old_ppm_in.5
C:\Temp/cc7W6ICN.s:81 .bss:00000055 old_ppm_diff.6
C:\Temp/cc7W6ICN.s:82 .bss:0000006f index.7
C:\Temp/cc7W6ICN.s:83 .bss:00000070 okay_cnt.8
C:\Temp/cc7W6ICN.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.90e_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.90e_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.90e_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/ccPYGiNM.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccPYGiNM.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccPYGiNM.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccPYGiNM.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccPYGiNM.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccPYGiNM.s:15 .bss:00000000 NewSBusData
C:\Temp/ccPYGiNM.s:20 .text:00000000 SbusUartInit
*COM*:00000019 sBusBuffer
.bss:00000001 ptr.1
C:\Temp/ccPYGiNM.s:95 .text:000000ba SbusParser
C:\Temp/ccPYGiNM.s:92 .bss:00000002 load.0
C:\Temp/ccPYGiNM.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.90e_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.90e_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.90e_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 84E0 ldi r24,lo8(4)
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/cc0oe4XS.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc0oe4XS.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc0oe4XS.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc0oe4XS.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc0oe4XS.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc0oe4XS.s:15 .bss:00000000 MagVec
C:\Temp/cc0oe4XS.s:21 .bss:00000006 POI_KameraNick
C:\Temp/cc0oe4XS.s:27 .bss:00000008 NC_To_FC_MaxAltitude
C:\Temp/cc0oe4XS.s:33 .bss:00000009 NC_To_FC_Flags
C:\Temp/cc0oe4XS.s:39 .bss:0000000a EarthMagneticInclinationTheoretic
C:\Temp/cc0oe4XS.s:45 .bss:0000000b EarthMagneticInclination
C:\Temp/cc0oe4XS.s:51 .bss:0000000c EarthMagneticField
C:\Temp/cc0oe4XS.s:57 .data:00000000 NC_GPS_ModeCharacter
C:\Temp/cc0oe4XS.s:64 .bss:0000000d NC_ErrorCode
C:\Temp/cc0oe4XS.s:70 .bss:0000000e SPI_CommandCounter
C:\Temp/cc0oe4XS.s:76 .data:00000001 SPI_CommandSequence
C:\Temp/cc0oe4XS.s:91 .data:0000000c NaviDataOkay
C:\Temp/cc0oe4XS.s:98 .bss:0000000f FromNC_Rotate_S
C:\Temp/cc0oe4XS.s:104 .data:0000000d FromNC_Rotate_C
C:\Temp/cc0oe4XS.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/cc0oe4XS.s:139 .bss:00000011 rxchksum.3
C:\Temp/cc0oe4XS.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/cc0oe4XS.s:140 .bss:00000012 motorindex.0
C:\Temp/cc0oe4XS.s:286 .data:0000000e oldcommand.1
C:\Temp/cc0oe4XS.s:291 .text:00000158 UpdateSPI_Buffer
*COM*:00000005 NC_Version
*COM*:00000008 GPSInfo
C:\Temp/cc0oe4XS.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.90e_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)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)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.90e_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.90e_Ernstl_8-Motoren+Sexpander/timer0.lst
0,0 → 1,1378
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,Parameter_ServoNickComp
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,Parameter_ServoRollComp
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/ccwsJuWZ.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccwsJuWZ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccwsJuWZ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccwsJuWZ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccwsJuWZ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccwsJuWZ.s:15 .bss:00000000 ServoRollValue
C:\Temp/ccwsJuWZ.s:21 .bss:00000002 ServoNickValue
C:\Temp/ccwsJuWZ.s:27 .data:00000000 NickServoValue
C:\Temp/ccwsJuWZ.s:32 .data:00000002 BeepMuster
C:\Temp/ccwsJuWZ.s:37 .data:00000004 ServoRollOffset
C:\Temp/ccwsJuWZ.s:42 .data:00000006 ServoNickOffset
C:\Temp/ccwsJuWZ.s:49 .bss:00000004 RemainingPulse
C:\Temp/ccwsJuWZ.s:55 .data:00000008 CalculateServoSignals
C:\Temp/ccwsJuWZ.s:62 .bss:00000006 ServoActive
C:\Temp/ccwsJuWZ.s:68 .bss:00000007 SendSPI
C:\Temp/ccwsJuWZ.s:74 .bss:00000008 beeptime
C:\Temp/ccwsJuWZ.s:80 .bss:0000000a cntKompass
C:\Temp/ccwsJuWZ.s:86 .bss:0000000c UpdateMotor
C:\Temp/ccwsJuWZ.s:92 .bss:0000000d CountMilliseconds
C:\Temp/ccwsJuWZ.s:97 .data:00000009 cnt_1ms.3
.bss:0000000f cnt.4
C:\Temp/ccwsJuWZ.s:99 .bss:00000010 compass_active.5
C:\Temp/ccwsJuWZ.s:104 .text:00000000 __vector_18
C:\Temp/ccwsJuWZ.s:309 .text:000001e6 SetDelay
C:\Temp/ccwsJuWZ.s:325 .text:000001f8 CheckDelay
C:\Temp/ccwsJuWZ.s:344 .text:00000210 Delay_ms
C:\Temp/ccwsJuWZ.s:365 .text:0000022a Delay_ms_Mess
C:\Temp/ccwsJuWZ.s:395 .text:0000025a TIMER2_Init
C:\Temp/ccwsJuWZ.s:437 .text:000002b8 Timer_Init
*COM*:00000002 tim_main
C:\Temp/ccwsJuWZ.s:464 .text:000002e6 CalcNickServoValue
C:\Temp/ccwsJuWZ.s:530 .text:0000036a CalculateServo
C:\Temp/ccwsJuWZ.s:100 .bss:00000011 PulseOutput.0
C:\Temp/ccwsJuWZ.s:1019 .bss:00000012 ServoFrameTime.1
C:\Temp/ccwsJuWZ.s:1020 .bss:00000014 ServoIndex.2
C:\Temp/ccwsJuWZ.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
Parameter_ServoNickComp
__divmodhi4
__divmodsi4
Parameter_ServoRollComp
Parameter_ServoRollControl
__epilogue_restores__
Parameter_Servo3
Parameter_Servo4
Parameter_Servo5
PPM_in
SenderOkay
/branches/v0.90e_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.90e_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.90e_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/ccNGR1zD.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccNGR1zD.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccNGR1zD.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccNGR1zD.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccNGR1zD.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccNGR1zD.s:15 .bss:00000000 BLConfig_ReadMask
C:\Temp/ccNGR1zD.s:21 .bss:00000002 BLConfig_WriteMask
C:\Temp/ccNGR1zD.s:27 .bss:00000004 BLFlags
C:\Temp/ccNGR1zD.s:33 .bss:00000005 MissingMotor
C:\Temp/ccNGR1zD.s:39 .data:00000000 I2CTimeout
C:\Temp/ccNGR1zD.s:46 .bss:00000006 I2C_TransferActive
C:\Temp/ccNGR1zD.s:52 .bss:00000007 motor_read
C:\Temp/ccNGR1zD.s:58 .bss:00000008 motor_write
C:\Temp/ccNGR1zD.s:64 .bss:00000009 dac_channel
C:\Temp/ccNGR1zD.s:70 .bss:0000000a twi_state
C:\Temp/ccNGR1zD.s:75 .text:00000000 I2C_Init
*COM*:00000060 Motor
C:\Temp/ccNGR1zD.s:126 .text:00000054 I2C_Reset
.bss:0000000b missing_motor.0
C:\Temp/ccNGR1zD.s:153 .bss:0000000c motor_read_temperature.1
C:\Temp/ccNGR1zD.s:154 .bss:0000000d pBuff.2
C:\Temp/ccNGR1zD.s:155 .bss:0000000f BuffLen.3
C:\Temp/ccNGR1zD.s:159 .text:00000098 __vector_26
*COM*:00000008 BLConfig
C:\Temp/ccNGR1zD.s:853 .text:00000698 I2C_WriteBLConfig
C:\Temp/ccNGR1zD.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.90e_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.90e_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.90e_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 8D35 cpi r24,lo8(93)
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 84E0 ldi r24,lo8(4)
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/ccGj4EeN.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccGj4EeN.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccGj4EeN.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccGj4EeN.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccGj4EeN.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccGj4EeN.s:14 .progmem.data:00000000 ANALOG_TEXT
C:\Temp/ccGj4EeN.s:52 .bss:00000000 ReceiverUpdateModeActive
C:\Temp/ccGj4EeN.s:58 .bss:00000001 AboTimeOut
C:\Temp/ccGj4EeN.s:64 .bss:00000003 Display_Interval
C:\Temp/ccGj4EeN.s:70 .bss:00000005 Intervall3D
C:\Temp/ccGj4EeN.s:76 .bss:00000007 DebugDataIntervall
C:\Temp/ccGj4EeN.s:82 .data:00000000 MeineSlaveAdresse
C:\Temp/ccGj4EeN.s:87 .data:00000001 PcZugriff
C:\Temp/ccGj4EeN.s:92 .data:00000002 DebugTextAnforderung
C:\Temp/ccGj4EeN.s:99 .bss:00000009 PC_MotortestActive
C:\Temp/ccGj4EeN.s:105 .bss:0000000a PC_DebugTimeout
C:\Temp/ccGj4EeN.s:111 .bss:0000000b RxDataLen
C:\Temp/ccGj4EeN.s:117 .bss:0000000c pRxData
C:\Temp/ccGj4EeN.s:123 .bss:0000000e AnzahlEmpfangsBytes
C:\Temp/ccGj4EeN.s:129 .bss:0000000f CntCrcError
C:\Temp/ccGj4EeN.s:135 .data:00000003 UebertragungAbgeschlossen
C:\Temp/ccGj4EeN.s:142 .bss:00000010 NeueKoordinateEmpfangen
C:\Temp/ccGj4EeN.s:148 .bss:00000011 NeuerDatensatzEmpfangen
C:\Temp/ccGj4EeN.s:154 .bss:00000012 SioTmp
C:\Temp/ccGj4EeN.s:160 .bss:00000013 DisplayLine
C:\Temp/ccGj4EeN.s:166 .bss:00000014 GetPPMChannelAnforderung
C:\Temp/ccGj4EeN.s:172 .bss:00000015 GetVersionAnforderung
C:\Temp/ccGj4EeN.s:178 .bss:00000016 DebugDataAnforderung
C:\Temp/ccGj4EeN.s:184 .bss:00000017 DebugDisplayAnforderung
C:\Temp/ccGj4EeN.s:190 .bss:00000018 DebugDisplayAnforderung1
C:\Temp/ccGj4EeN.s:196 .bss:00000019 GetExternalControl
.bss:0000001a ptr.6
C:\Temp/ccGj4EeN.s:202 .text:00000000 __vector_22
*COM*:000000af TxdBuffer
C:\Temp/ccGj4EeN.s:198 .bss:0000001c crc.1
C:\Temp/ccGj4EeN.s:256 .bss:0000001e crc1.2
C:\Temp/ccGj4EeN.s:257 .bss:0000001f crc2.3
C:\Temp/ccGj4EeN.s:258 .bss:00000020 buf_ptr.4
C:\Temp/ccGj4EeN.s:259 .bss:00000021 UartState.5
C:\Temp/ccGj4EeN.s:263 .text:0000006c __vector_20
*COM*:000000af RxdBuffer
C:\Temp/ccGj4EeN.s:494 .text:00000260 AddCRC
C:\Temp/ccGj4EeN.s:550 .text:000002c0 SendOutData
C:\Temp/ccGj4EeN.s:750 .text:00000438 Decode64
C:\Temp/ccGj4EeN.s:863 .text:0000050c BearbeiteRxDaten
*COM*:00000010 MotorTest
*COM*:0000000a VersionInfo
*COM*:0000000b ExternControl
*COM*:00000001 ConfirmFrame
*COM*:00000002 Timer3D
C:\Temp/ccGj4EeN.s:1850 .text:00000dd8 uart_putchar
C:\Temp/ccGj4EeN.s:1866 .text:00000de8 UART_Init
*COM*:00000002 Debug_Timer
*COM*:00000002 Kompass_Timer
C:\Temp/ccGj4EeN.s:1919 .progmem.data:00000200 __c.0
C:\Temp/ccGj4EeN.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.90e_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.90e_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.90e_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/ccnKZxRS.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccnKZxRS.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccnKZxRS.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccnKZxRS.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccnKZxRS.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccnKZxRS.s:13 .text:00000000 User_Receiver_Init
C:\Temp/ccnKZxRS.s:23 .text:00000002 User_RX_Parser
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_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.90e_Ernstl_8-Motoren+Sexpander/version.txt
0,0 → 1,570
 
-------
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.90e H.Buss 04.03.2013
- Parameter_ServoRollComp jetzt auf Poti /Kompatibilität auf 93 erhöht)
 
0.90e Ernstl 8-Motoren und Sexpander für DX7 07.04.2013
- Aktivierung der Sexpanderunterstützung
- Anzeige von acht Motoren im Koptertool