Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2300 → Rev 2304

/branches/v0.90d_Ernstl_4-Motoren+Sexpander/FlightCtrl.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/GPS.c
0,0 → 1,16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) Holger Buss, Ingo Busker
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
unsigned char GPS_Aid_StickMultiplikator = 0; // 64 = 100%
 
 
 
 
/branches/v0.90d_Ernstl_4-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/ccF4dSPb.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccF4dSPb.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccF4dSPb.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccF4dSPb.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccF4dSPb.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccF4dSPb.s:15 .bss:00000000 GPS_Aid_StickMultiplikator
C:\Temp/ccF4dSPb.s:21 .bss:00000001 GPS_Roll
C:\Temp/ccF4dSPb.s:27 .bss:00000003 GPS_Nick
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/Hex-Files/Flight-Ctrl_MEGA1284P_V0_90d_SVN.hex
0,0 → 1,4714
:100000000C94F9080C9448090C9448090C9448097C
:100010000C9448090C9448090C9448090C9448091C
:100020000C9448090C94591C0C9448090C944809E8
:100030000C946A360C9448090C9448090C944809AD
:100040000C9448090C9448090C947C180C944809A9
:100050000C94AA0E0C9448090C94740E0C94480944
:100060000C94491F0C9448090C94F0310C944809E5
:100070000C94668F0C9448090C9495860C9448094E
:100080000C9448090C9448090C944809701F751F7A
:100090007A1F831F9A1FB11FC11FD11F0C20F5218A
:1000A000B11FB720C820F720152132218C21E7216C
:1000B0000224CF245E25DE251626B926C0282A294B
:1000C000A429ED29372A652A922AF52A3F2B892B64
:1000D000822C0F3243328632F6320E334F330634DF
:1000E000CD34CD34CD34CD34CD34CD34CD34CD3408
:1000F000CD34CD34CD34823484348934A134A33426
:10010000F469B36A386B676A8E6BBE6B286A966A4D
:1001100098773678BB781D797179DA793A815B7A8C
:100120008D7A8D7A8D7A8D7A8D7A8D7A8D7A8D7A97
:100130008D7ABB7A367BCB7BF07B337C8B7C167DD8
:10014000FF7D667E667E667E667E667E667E667EF7
:10015000667E667E9E7EBC7EE17E3D7F797FE87F07
:100160001580B5803A81158115811581158115811C
:10017000158115811581B98DBC8DBC8DBC8DC58D4A
:10018000C88DCB8DDD8DDA8D0A0D3D3D3D3D3D3D6C
:100190003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D8F
:1001A0003D3D3D3D3D3D3D3D3D3D3D3D3D000A0D1F
:1001B000426174743A002025642043656C6C73209E
:1001C00000204C6F77207761726E696E673A202548
:1001D000642E2564000A0D466F756E6420424C2D16
:1001E0004374726C3A20002564000A0D0A0D212127
:1001F000204D495353494E4720424C2D4354524CB5
:100200003A202564202121000A0D43616C69627245
:100210006174696E6720707265737375726520739F
:10022000656E736F722E2E004F4B0A0D000A0D463D
:100230006C696768742D74696D65202575206D691A
:100240006E20546F74616C3A2575206D696E0041A3
:100250006E676C654E69636B202020202020204152
:100260006E676C65526F6C6C20202020202020412E
:1002700063634E69636B20202020202020202041D2
:100280006363526F6C6C2020202020202020205996
:1002900061774779726F202020202020202020487D
:1002A00065696768742056616C756520202020415F
:1002B00063635A2020202020202020202020204757
:1002C0006173202020202020202020202020204377
:1002D0006F6D706173732056616C756520202056B8
:1002E0006F6C74616765205B302E31565D20205243
:1002F00065636569766572204C6576656C2020477C
:1003000079726F20436F6D70617373202020204DD0
:100310006F746F7220312020202020202020204D5B
:100320006F746F7220322020202020202020204D4A
:100330006F746F7220332020202020202020204D39
:100340006F746F7220342020202020202020203144
:100350003620202020202020202020202020203176
:100360003720202020202020202020202020203165
:100370003820202020202020202020202020203154
:100380003920202020202020202020202020205321
:100390006572766F202020202020202020202048F9
:1003A0006F76657267617320202020202020204313
:1003B000757272656E74205B302E31415D20204372
:1003C00061706163697479205B6D41685D202048CC
:1003D000656967687420536574706F696E74203244
:1003E00035202020202020202020202020202032E6
:1003F00036202020202020202020202020202043C4
:100400006F6D7061737320536574706F696E74499A
:1004100032432D4572726F7220202020202020420E
:100420004C204C696D69742020202020202020471A
:1004300050535F4E69636B202020202020202047EE
:1004400050535F526F6C6C202020202020202021F0
:10045000212120494E434F4D50415449424C4520A3
:10046000212121002A002E000A0D20444143206F43
:100470007220493243204552524F52212043686531
:10048000636B204932432C2033567265662C20441E
:10049000414320616E6420424C2D4374726C005BBA
:1004A00025695D005B25695D002B204D696B726FCE
:1004B0004B6F70746572202B0048573A5625642E96
:1004C00025642053573A25642E256425632056342D
:1004D0000053657474696E673A2564202573004D76
:1004E00069786572204572726F72210045525225FB
:1004F00032643A00486172647761726520457272B5
:100500006F7220313A2564202121004D697373698F
:100510006E6720424C2D4374726C3A256421210091
:10052000493243204552524F5221212100486569EA
:100530006768743A202025356900536574706F69C7
:100540006E743A2535690050726573737572653A39
:10055000253569004F66667365743A202025356934
:100560000048656967687420636F6E74726F6C0011
:1005700044495341424C4544006163742E206265F6
:100580006172696E67004E69636B3A2020202020FB
:100590002025356900526F6C6C3A202020202020E5
:1005A00025356900436F6D706173733A20202025F3
:1005B0003569004B25693A25346920204B25693A75
:1005C00025346920004E693A2534692020526F3A5B
:1005D000253469200047733A253469202047693A59
:1005E000253469200050313A253469202050323AB0
:1005F000253469200050333A253469202050343A9C
:1006000025346920004779726F202D2053656E7361
:100610006F72004E69636B25346920282533692E7B
:1006200025692900526F6C6C2534692028253369AF
:100630002E256929004769657225346920282533EC
:100640006929004E69636B202534692028253369A8
:100650002E25782900526F6C6C20253469202825BE
:1006600033692E25782900596177202025346920A7
:100670002825336929004E69636B202534692028B9
:1006800025336929282533692900526F6C6C202590
:1006900034692028253369292825336929005961BF
:1006A00077202025346920282533692928253369B6
:1006B0002900414343202D2053656E736F72004E15
:1006C00069636B2025346920282533692900526F1E
:1006D0006C6C20253469202825336929005A202094
:1006E000202025346920282533692900566F6C7431
:1006F0006167653A2020202533692E25316956002F
:1007000043757272656E743A2020202533692E2558
:1007100031694100506F7765723A202020202025F2
:10072000346957004469736368617267653A2025CC
:1007300035696D416800526563656976657200527E
:10074000432D525353493A2020202025346900522A
:10075000432D5175616C6974793A202534690052D2
:10076000432D4368616E6E656C733A2534690043AE
:100770006F6D70617373004D61676E65743A202010
:1007800020253569004779726F3A202020202025E6
:10079000356900536574706F696E743A2025356948
:1007A00000506F746925693A202025336900506F25
:1007B000746925693A202025336900536572766F84
:1007C000202000536574706F696E74202025336992
:1007D00000506F736974696F6E3A20253369005257
:1007E000616E67653A2533692D25336900424C2DCA
:1007F0004374726C204572726F72732000253364EB
:100800002025336420253364202533642000424CA6
:100810002054656D7065726174757265002533646E
:100820002025336420253364202533642000424C86
:100830002D4374726C20666F756E642000202563F2
:1008400020202025632020202563202020256320D0
:1008500000202563202020256320202025632020E0
:1008600020256320002025632020202D2020202DFE
:100870002020202D2000313000313100313200465F
:100880006C696768742D54696D65202000546F741D
:10089000616C3A2535756D696E004163743A2020AC
:1008A0002535756D696E0028726573657429000AB7
:1008B0000D47656E65726174696E67206465666177
:1008C000756C7420506172616D657465722053653A
:1008D00074202564000A0D5573696E67205061729B
:1008E000616D6574657220536574202564000A0D7E
:1008F00047656E65726174696E67206465666175CF
:100900006C74204D69786572205461626C65000AD0
:100910000D4D697865722D436F6E6669673A2027C1
:1009200025732720282575204D6F746F7273290059
:100930000A0D414343206E6F742063616C696272DB
:1009400061746564210D0A0000008F001E01AD0175
:100950003B02CA025803E603740402058F051B0616
:10096000A7063307BE074808D2085B09E3096B0AEC
:10097000F20A780BFD0B810C040D860D070E870E15
:10098000060F840F00107B10F5106E11E5115B123D
:10099000CF124213B31323149214FE146A15D31505
:1009A0003B16A11605176717C81727188318DE18F6
:1009B00037198E19E319361A871AD61A231B6E1B9C
:1009C000B61BFD1B411C831CC31C001D3C1D751D5B
:1009D000AB1DE01D121E421E6F1E9A1EC31EE91E95
:1009E0000D1F2E1F4D1F691F841F9B1FB01FC31F8C
:1009F000D31FE11FEC1FF51FFB1FFF1F002000008E
:100A000005000500040106010800060102000400BB
:100A100004000700070007000700070007000700A1
:100A200003010301050017010F01060009010A0176
:100A300019010501050119011A010F0100004E6F8E
:100A4000204572726F722020202020202020004E2E
:100A50006F7420636F6D70617469626C6520200033
:100A60004D4B334D6167206E6F7420636F6D706105
:100A7000004E6F20464320636F6D6D756E69636134
:100A80007400436F6D7061737320636F6D6D756E6D
:100A900069630047505320636F6D6D756E696361C4
:100AA00074696F00636F6D706173732076616C752C
:100AB00065202020005243205369676E616C206CD2
:100AC0006F73742020004643207370692072782071
:100AD0006572726F7220004E6F204E4320636F6DFF
:100AE0006D756E69636174004643204E69636B20C7
:100AF0004779726F2020202000464320526F6C6C93
:100B0000204779726F2020202000464320596177CA
:100B1000204779726F2020202020004643204E6914
:100B2000636B204143432020202020004643205275
:100B30006F6C6C204143432020202020004643203E
:100B40005A2D414343202020202020202000507295
:100B50006573737572652073656E736F72200049DB
:100B600032432046432D3E424C2D4374726C20008C
:100B7000426C204D697373696E672020202020200D
:100B8000004D69786572204572726F7220202020B6
:100B900020004361726566726565204572726F72EE
:100BA00020200047505320466978206C6F737420D2
:100BB000202020004D61676E6574204572726F724F
:100BC00020202020004D6F746F7220726573746155
:100BD000727420202000424C204C696D697461744D
:100BE000696F6E202020004750532052616E676568
:100BF00020202020202020004E6F2053442D4361D0
:100C000072642020202020200053442D4C6F676701
:100C1000696E67206572726F7200466C79696E67E3
:100C20002072616E676521202020004D617820418F
:100C30006C74697475646521202020004E6F204714
:100C400050532066697820202020202000636F6D9B
:100C500070617373206E6F742063616C2E002021AD
:100C600021204C69506F20766F6C7461676520217C
:100C70002120200020202020204D696B726F4B6FB7
:100C80007074657220202020200020202020202049
:100C90002020202020202020202020202020200074
:100CA00020202532692E253169562020002020255C
:100CB00032692E25316956202000414C543A2534A2
:100CC000696D20256300414C543A2534696D20201C
:100CD00000414C543A2D2D2D2D2000202025326925
:100CE0003A2530326920200020202532693A25300B
:100CF00032692020004449523A202533642563009C
:100D000043002000202025356920200020202535A3
:100D100069202000493A2532692E25316941200099
:100D20003A003A003A002D2D2D2D2D2D2D2D2D2B55
:100D30002D2D2D2D2D2D2D2D2D2D2D002D2D2D2D10
:100D40002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DD3
:100D50002D003A005341543A25326420004449534F
:100D6000543A2533646D00442000334400212100AF
:100D70004D41473A25337525252000484D3A253306
:100D800064256320256300696E636C3A253264250F
:100D900063282532692900202020202532756D2FF7
:100DA000733A2020484D3A2533642563202563009B
:100DB0004552523A202532642021004552523A20B1
:100DC000002121204C69506F20766F6C746167653B
:100DD00020212100207777772E4D696B726F4B6F42
:100DE000707465722E6465202000202532693A25D2
:100DF00030326920202532692E253169562025346C
:100E0000696D416800202532693A25303269202019
:100E10002532692E25316956202534696D416800D7
:100E20004449523A253364256300414C543A2534F1
:100E3000696D00414C543A2534696D00414C543A77
:100E40002D2D2D2D2000256300484D3A2533642596
:100E5000632020444953543A2533646D20256300B0
:100E60005057523A2532692E25316941202825698B
:100E7000572920004346002020004750533A25328E
:100E8000756D2F73205341543A2564200020203380
:100E90004420004E4F4649580044475053200020FC
:100EA00020204E6F204E6176694374726C202020A2
:100EB00020202020002532692E2569202532692E28
:100EC0002569202532692E2569202532692E25695C
:100ED00041002533692025336920253369202533D6
:100EE00069256343002532692E2569202532692E44
:100EF000256941002532692E2569202532692E2574
:100F000069202532692E2569202532692E256941FF
:100F100000253369202533692563432020202020C4
:100F200020202000253369202533692025336920BE
:100F3000253369256343004552523A202532642007
:100F400021004552523A20002121204C69506F2047
:100F5000766F6C7461676520212100207777772E8A
:100F60004D696B726F4B6F707465722E64652020D3
:100F70000053657474696E673A25752025732000E7
:100F80004D696E3A2532692E253169562025732028
:100F900000414C543A00504F54493A2533752000D3
:100FA000284F4E29202000284F46462920004C4932
:100FB0004D495400564152494F0044495341424C17
:100FC00045440043463A0044495341424C4544009D
:100FD00020284F4E29200020284F46462900205423
:100FE00045414348004750533A0044495341424C1D
:100FF0004544002846524545290028484F4D45297B
:10100000002841494429200028484F4C4429002009
:1010100046533A257573656B2000484F4D45204176
:101020004C543A0025756D00484F4C4420004E69E1
:101030003A25346920526F3A25346920433A2533E2
:10104000690047733A2534692059613A253469208B
:101050000050313A2534692050323A253469203322
:101060003A2533690050343A2534692050353A2501
:10107000346920363A25336900434F55504C494E68
:1010800047204F46462120004C4F4F50494E4721A4
:1010900020004848212000434F4D50415353204FDA
:1010A0004646212000004F50515253545356574842
:1010B000005859005A5545464748410049424A4A56
:1010C0000000000000000000000000444C4D000043
:1010D0000000004E0000004B00430A0D7777772E8A
:1010E0004D696B726F4B6F707465722E646520284A
:1010F000632920486953797374656D7320476D6265
:1011000048000A0D74686520757365206F66207449
:1011100068697320736F66747761726520697320E4
:101120006F6E6C79207065726D6974746564200AE5
:101130000D6F6E206F726967696E616C204D696B0F
:10114000726F4B6F707465722D4861726477617253
:1011500065005573657200486F5454205634004141
:1011600043542044534C004A657469005370656BC6
:101170007472756D0050504D000A0D5265636569BB
:101180007665723A2000532E42757300756E6B6E51
:101190006F776E2E205573696E672050504D2E2E3E
:1011A0002E006E6F7420737570706F72746564209A
:1011B000627920686172647761726521000A0D4668
:1011C0006C69676874436F6E74726F6C0A0D486166
:1011D0007264776172653A25642E25640A0D536F37
:1011E0006674776172653A5625642E2564256320FE
:1011F000000011241FBECFEFD0E4DEBFCDBF12E050
:10120000A0E0B1E0ECE9F4E201E00BBF02C007901E
:101210000D92A43DB107D9F71BE0A4EDB2E001C0E7
:101220001D92AC3DB107E1F77AEAE2E0F0E081E23D
:1012300080935700D4907E010894E11CF11C20EFAC
:1012400037EF41E050E087016FE0DA01C9012F5F1D
:101250003F4F4F4F5F4FABBFFC018791F801819328
:101260008F01615067FFF1CFF7016EE08191782720
:101270007095615067FFFACF8889781729F0F7E9F0
:10128000DF1611F40000FECF0E941B0A0C944D9251
:101290000C94000088E891E09F938F9380E695E19D
:1012A0009F938F93E0913B05F0913C0509950F903A
:1012B0000F900F900F90089580918407E82FFF27DB
:1012C000EE0FFF1FE954F74F808191818D5E9F4F94
:1012D00014F010920201808191818A5B9F4FCCF4BF
:1012E000809102018823A9F481E08093020180911A
:1012F0006F058F5F80936F05853038F088EE93E03F
:10130000909309038093080304C066E970E00E948B
:10131000043A80916F0599279093070780930607F9
:1013200008951F93CF93DF93182F882389F08EEAB7
:1013300091E09F938F9380E695E19F938F93E09147
:101340003B05F0913C0509950F900F900F900F9081
:101350008091A707823308F044C084EF91E00E9497
:101360006F19EC01112329F0CE010E94781988230E
:10137000D9F3C2E0D0E026E530E080911F019091E2
:1013800020018217930730F02196255D3F4FC7302B
:10139000D10598F38091A7079927C89F9001C99F0D
:1013A000300DD89F300D1124209300011123D9F066
:1013B00068EC70E08C2F0E94043ADF93CF9386EBA9
:1013C00091E09F938F9380E695E19F938F93E091B7
:1013D0003B05F0913C0509958DB79EB706968DBFEC
:1013E00002C080930001112311F1809100016AE095
:1013F0000E94A091892F99279F938F93809100013C
:101400000E94A09199279F938F9381EC91E09F93E5
:101410008F9380E695E19F938F93E0913B05F09148
:101420003C0509952DB73EB7285F3F4F2DBFDF9193
:10143000CF911F910895CFEFD0E4DEBFCDBF8824B8
:10144000992414B815B8B7EEEB2EB3E0FB2E2EECB2
:101450003FEFE20EF31EF7FEFACF199B02C085E1C3
:1014600001C086E18093010181E887B93E9A8FEF40
:1014700088B98BE184B981E085B98EE38AB987E4C4
:101480008BB9469A84B7877F84BF8091600088615A
:10149000809360001092600084EC99E090930903BF
:1014A0008093080310921404109213041092BC0845
:1014B0001092BB0810921604109215041092180492
:1014C0001092170420910101243128F084EC94E05B
:1014D000A0E0B0E004C08BE095E0A0E0B0E0809335
:1014E0003C0190933D01A0933E01B0933F012A300F
:1014F00011F0243110F0289801C0289A2C3010F0F7
:10150000263111F4299A01C029980E94D8190E9405
:10151000A9190E9468150E9441360E94DA1D81E0D7
:101520000E94A4310E9486680E943D720E94318E02
:10153000809101018C3010F0863111F4299A01C09C
:10154000299878940E94C33080914D0382608093E3
:101550004D03109250030E94504584EF91E00E9489
:101560006F197C0180914D0380FD05C0C7010E9469
:1015700078198823B9F385ED91E09F938F93A0E6C6
:10158000AA2EA5E1BA2EBF92AF92E0913B05F09151
:101590003C05099580EA9FE00E946F197C01C0E03C
:1015A000D0E00F900F900F900F9009E518E0FDE04C
:1015B000CF2EF8E0DF2E0E94504580914D0380FD34
:1015C00005C0C7010E9478198823B9F3F60180810C
:1015D0001816ACF40BC00E94504580914D0380FD5D
:1015E00005C0C7010E9478198823B9F3C7010E947A
:1015F0007819882321F4F8018081882364F7F801A1
:10160000808187FF19C02196DF93CF93219787EEC2
:1016100091E09F938F93BF92AF92E0913B05F09141
:101620003C0509958091D5028F5F8093D5022DB737
:101630003EB72A5F3F4F2DBF219684E090E0C80E51
:10164000D91E085F1F4FCC30D10508F4B4CFC0E0DD
:10165000D0E006E518E0EDE0EE2EE8E0FE2EF80121
:10166000838187FD1DC0F70180811816CCF4219677
:10167000DF93CF9321978AEE91E09F938F9380E63B
:1016800095E19F938F93E0913B05F0913C0509957F
:1016900082E0809306032DB73EB72A5F3F4F2DBFF0
:1016A000F801838180788383219624E030E0E20E84
:1016B000F31E085F1F4FCC30D10588F20E944A0903
:1016C000909182078091D502981728F48091550552
:1016D00080618093550588E092E09F938F93C0E6E8
:1016E000D5E1DF93CF93E0913B05F0913C0509955F
:1016F00088EE93E00E946F197C010E94E01D0F901C
:101700000F900F900F90C7010E9478198823D9F38A
:1017100088E292E09F938F93DF93CF93E0913B0514
:10172000F0913C05099580E00E94E83A8091010122
:101730000F900F900F900F908A3011F0843110F0BD
:10174000289801C0289A80ED97E090930903809330
:10175000080385E5809371058EE090E00E94E72EF6
:101760009927182F00278FE090E00E94E72E080F9E
:10177000111D1093DB020093DA028AE090E00E94D0
:10178000E72E9927182F00278BE090E00E94E72E84
:10179000080F111D1093D9020093D8020F5F1F4F3D
:1017A00039F08091DA029091DB028F5F9F4F41F414
:1017B0001092DB021092DA021092D9021092D80233
:1017C0008091D8029091D9029F938F938091DA02F1
:1017D0009091DB029F938F938DE292E09F938F9382
:1017E000DF93CF93E0913B05F0913C0509950E9472
:1017F000742388E893E19093370180933601C1E028
:10180000C09370058C2F0E9491098091AA070E94B5
:101810007D8D0E944A0980ED97E00E946F197C013E
:101820008AEF90E00E946F1983E08093DE061092A9
:10183000D4028091F1072DB73EB7285F3F4F2DBFEF
:1018400084FF02C0C093DC028091DE02882311F085
:101850004798FECF80910C03882309F43DC2809104
:101860001101882309F438C210920C0380916F058E
:10187000882319F00E945C0902C00E948F480E94D0
:101880005045209101012A3011F0243110F02898A0
:1018900001C0289A80910704882331F080910704C1
:1018A0008150809307040EC080916F008062809306
:1018B0006F001092B8081092B708809155058860A3
:1018C000809355058091360190913701019790934F
:1018D0003701809336018091360190913701892B31
:1018E00021F080914E038823C9F1809136019091B7
:1018F0003701892BD9F40E94CE3185E090E0909396
:10190000370180933601809118079091190701964D
:1019100090931907809318078091550581608093F3
:1019200055058091DF0682608093DF068091090172
:1019300090910A018F5F9F4FC1F480910604882324
:10194000A1F088EA91E6909309038093080380E868
:1019500090E090930A018093090107C02A3011F0AA
:10196000243110F0289801C0289A0E94E98E8091B5
:101970000C03882309F0B0C180911C05882319F05D
:101980000E94BE81A9C180910F01882311F00E949D
:10199000311A0E94AC150E94FA10C7010E947819F2
:1019A000882309F495C184E190E0E80EF91E0E94B5
:1019B000EF198091AA07863019F40E945C7704C061
:1019C000843011F40E948E8280914E03882349F066
:1019D000809155058260809355058091DF06826075
:1019E0000FC08091080390910903892B59F48091CD
:1019F000360190913701079728F08091DF068D7F9F
:101A00008093DF068091DC02882361F080910704D7
:101A1000873940F01092DC0288E893E19093090343
:101A20008093080380910401882321F081508093E2
:101A300004012EC080937B051092DB031092DA0321
:101A40001092D9031092D8031092D7031092D603A4
:101A5000809107048823E1F48091090190910A01A3
:101A60008F5F9F4FA9F42091DC02223089F088E932
:101A70009AE3909309038093080380E09CE090939D
:101A80000A0180930901222319F082E08093DC028D
:101A900080919701893C48F0815080939701809113
:101AA00055058B7F809355053FC080919809882309
:101AB000F9F08091550584608093550589E0809305
:101AC000E2048091090190910A018F5F9F4F81F498
:101AD00080910604882361F088E99AE390930903D2
:101AE0008093080380E098EA90930A0180930901AB
:101AF0001092D4041092D3041092D2041092D10404
:101B00001092D00410928B091092CA091092C90940
:101B10001092CC091092CB098FEF9FEF9093C809D8
:101B20008093C7091092970180910001282F3327D5
:101B300080911F019091200182179307CCF480912E
:101B4000CF0380628093CF038091090190910A01B5
:101B50008F5F9F4FC1F480E797E1909309038093D3
:101B6000080380E093E090930A01809309010BC081
:101B70008091080390910903892B29F48091CF0368
:101B80008F7D8093CF030E947D6D84E08093070357
:101B90008091DD028F5F8093DD02813309F04FC0B9
:101BA0001092DD028091CF0381FF0AC08091D6029E
:101BB0009091D70201969093D7028093D6023FC0AE
:101BC0005AEA852E55E0952E809127079091280797
:101BD0009C01442737FD4095542F80911701909127
:101BE0001801A0911901B0911A01281739074A0765
:101BF0005B0734F4809127079091280701961BC05A
:101C000080912707909128079C01442737FD409534
:101C1000542F8091170190911801A0911901B09152
:101C20001A0182179307A407B5074CF48091270780
:101C3000909128070197909328078093270708948D
:101C4000811C911C32E783163BE0930609F040C0EB
:101C5000882499242091DA023091DB022F5F3F4FD4
:101C60003093DB022093DA028091D8029091D9025E
:101C700001969093D9028093D802832F9927682FD9
:101C80008EE090E00E94EF2E8091DA029091DB02CC
:101C90009070682F8FE090E00E94EF2E8091D80224
:101CA0009091D902892F9927682F8AE090E00E94AD
:101CB000EF2E8091D8029091D9029070682F8BE01E
:101CC00090E00E94EF2E84E190E00E946F197C0169
:101CD0000E94CD6D0E94547280910703882309F001
:101CE000B3CD0E94A768B0CD1F920F920FB60F928E
:101CF00011248F939F93EF93FF9380910601882384
:101D0000E1F48091F8029091F90201969093F90222
:101D10008093F802FC01E15DF94FE081ED3019F0AC
:101D20008F3A910539F41092F9021092F80281E08D
:101D300080930601E093C60004C01092F90210924D
:101D4000F802FF91EF919F918F910F900FBE0F902E
:101D50001F9018951F920F920FB60F9211242F9378
:101D60003F934F935F936F937F938F939F93AF9323
:101D7000BF93CF93EF93FF9390E08091DE02813089
:101D800029F48091C6008093CE00CCC08091DE0201
:101D9000823029F48091C60080937E05C3C0809173
:101DA000C6008093F0025091FE025F3A10F09093CB
:101DB000FF028091F0028D3009F065C08091FF0232
:101DC000823009F060C09093FF02852F99278258D6
:101DD0009A4FFC01329740812091FA023091FB0228
:101DE000241B3109DC0111978C91281B3109C90191
:101DF0009F709093FB028093FA0246E09695879538
:101E00004A95E1F7982F935C9093FC022F73307002
:101E1000235C2093FD028081981729F48C91281768
:101E200011F491E006C090E08091ED028F5F809305
:101E3000ED02C091EF02CC2309F074C0992309F49C
:101E400071C081E08093EF02580F5093EC02515023
:101E5000E52FFF27E258FA4F8DE0808380918005BF
:101E6000823509F05FC00E94742388E190E02CE085
:101E70000FB6F894A895809360000FBE2093600081
:101E8000C09306034FC02091FF02822F9927813013
:101E90009105F9F0823091051CF4892B21F040C0A6
:101EA000029711F13DC08091F002833239F48091A4
:101EB000EF02882319F481E08093FF028091F00201
:101EC00080937E0581E08093FE028091F002992745
:101ED00022C02F5F2093FF02E52FFF27E258FA4F21
:101EE0008091F002808309C0E52FFF27E258FA4F66
:101EF0008091F00280835F3A20F45F5F5093FE028E
:101F000002C01092FF022091F0028091FA0290919B
:101F1000FB02820F911D9093FB028093FA0202C094
:101F20001092FF02FF91EF91CF91BF91AF919F91DE
:101F30008F917F916F915F914F913F912F910F9072
:101F40000FBE0F901F901895AC01A0E0B0E09D016E
:101F5000A817B90748F4EFE2F6E08191280F311D88
:101F60001196A417B507C8F33F70FD01E15DF94F65
:101F7000C90156E0969587955A95E1F7835C808371
:101F80001196FD01E15DF94F2F733070822F835C54
:101F90008083A05DB94F8DE08C93109206018091F3
:101FA0002F068093C6000895A0E0B0E0EAEDFFE0C0
:101FB0000C9419922C859D850E85BB2483E2809319
:101FC0002F069F59909330062093310633E0E32E7D
:101FD000F12C002309F49EC0CF84D888BE016D5E29
:101FE0007F4FA989BA890150109709F493C01097BF
:101FF000B9F0F601EB0DF11DB3949081119791F4B6
:10200000002349F1FB016E5F7F4FDB01C080D1806F
:102010006E5F7F4F0D90BC91A02DBB24015002C07C
:1020200090E019C01097B9F0F601EB0DF11DB394D3
:102030004081119791F4002341F1FB016E5F7F4FC6
:10204000DB01C080D1806E5F7F4F0D90BC91A02DD1
:10205000BB24015002C040E018C01097B1F0F60157
:10206000EB0DF11DB3941081119781F4002371F0F1
:10207000FB013296DB01CD90DC90BF016E5F7F4F9C
:10208000A081B181BB24015001C010E0F701E15DE6
:10209000F94F892F86958695835C80830894E11C8F
:1020A000F11CF701E15DF94F892F9927837090703A
:1020B00024E0880F991F2A95E1F755279A0194E0AB
:1020C000369527959A95E1F7822B835C8083089457
:1020D000E11CF11CF701E15DF94F4F705070440FA6
:1020E000551F440F551F812F992726E096958795F8
:1020F0002A95E1F7842B835C80830894E11CF11C12
:10210000F701E15DF94F1F73135C10830894E11C24
:10211000F11C6ACFC7010E94A40FE9E00C9435922C
:10212000A3E07A2F4091EC024650442309F458C0B2
:10213000E72FFF27E258FA4F80818D537F5FE72F0B
:10214000FF27E258FA4F20812D537F5FE72FFF27AB
:10215000E258FA4F30813D537F5FE72FFF27E25867
:10216000FA4F60816D537F5F9927880F991F880F01
:10217000991F522F52955F70582B822F99278F707D
:102180009070F4E0880F991FFA95E1F7232F2695B8
:102190002695282B832F992783709070E6E0880F6F
:1021A000991FEA95E1F7682B41504F3FC9F0EA2F9C
:1021B000FF27E258FA4F5083AF5F41504F3F81F005
:1021C000EA2FFF27E258FA4F2083AF5F41504F3F7D
:1021D00039F0EA2FFF27E258FA4F6083AF5FA5CFAF
:1021E00081E895E09093EB028093EA02A350A093DC
:1021F000E9020895A2E0B0E0E0E0F1E10C941F9262
:102200008091EF02882309F457C40E9490108091B6
:102210007F05823609F023C3809180059927803796
:10222000910509F4AFC081379105C4F48A36910550
:1022300009F480C28B36910544F48B34910571F119
:102240008636910509F45FC10AC38D36910509F4FC
:1022500069C08E36910509F44DC001C384379105DC
:1022600041F1853791054CF48137910509F491C00E
:102270008337910509F4DFC0F2C28737910509F46D
:102280001BC2883791052CF48537910509F4D7C115
:10229000E6C28937910509F46DC1E1C2E091EA0215
:1022A000F091EB0280819181909389018093880164
:1022B000D6C28091EC02A091EA02B091EB02853186
:1022C00040F080E1E9E5F5E00D9001928A95E1F7B3
:1022D0000DC08D919D910D90BC91A02D80935905BD
:1022E00090935A05A0935B05B0935C0580EF8093B3
:1022F000E7024BC0809106018823E1F38DE490E072
:102300009F938F9380E098E09F938F9381E08F93CA
:102310008F938EE48F930E94D40F8DB79EB707964C
:102320008DBF9DC2A091EA02B091EB021C911130C9
:1023300081F48DE4E0E0F8E00D9001928A95E1F7F8
:102340000E9400301983809155058F7E809355053A
:1023500001C01982809106018823E1F381E090E0B9
:102360009F938F93CE0101969F938F9381E08F93DC
:102370008F938DE48F930E94D40FADB7BEB717969D
:10238000ADBF6DC281E08093F2028FEF80930401B4
:1023900066C2E091EA02F091EB02E0818E2F8A5052
:1023A0008A3058F48983882311F481E003C0863091
:1023B00010F085E0898361E00EC08E2F84518A3051
:1023C00070F48983882311F481E003C0863010F013
:1023D00085E0898360E089810E94803012C0E983B2
:1023E000EF3F19F40E94633089838981882311F4B7
:1023F00081E003C0863010F085E0898389810E94E6
:10240000052F809106018823E1F38CE790E09F93EC
:102410008F9383E897E09F938F9381E090E09F9361
:102420008F93CE0101969F938F9382E08F9381E0EB
:102430008F9381E577C12091EA023091EB02D901B7
:102440008C918150853008F045C0F90181818C352F
:1024500009F040C0809106048823E1F52F5F3F4FCB
:102460008CE7E3E8F7E0D9010D9001928A95E1F756
:10247000F90182910E94702F8091C4079927AA27A1
:10248000BB27BC01CD0124EC39E040E050E00E94C4
:102490008191DC01CB018093800190938101A09315
:1024A0008201B09383018091C5079927AA27BB2792
:1024B000BC01CD010E948191DC01CB0180937C01A4
:1024C00090937D01A0937E01B0937F010E946330C1
:1024D000898301C01982809106018823E1F381E09C
:1024E00090E09F938F93CE0101969F938F9381E00D
:1024F0008F938F9383E58F930E94D40F8DB79EB7F0
:1025000007968DBF26C0E091EA02F091EB02E081D0
:102510008E2F8150853018F48E2F0E94052F0E9437
:1025200063308983809106018823E1F381E090E0A4
:102530009F938F93CE0101969F938F9381E08F930A
:102540008F9386E48F930E94D40FADB7BEB71796D2
:10255000ADBF80910604882329F46EE670E089817E
:102560000E94043A80E00E9491098091AA070E948B
:102570007D8D75C1E091EA02F091EB02808199278F
:1025800087FD90959093D2088093D10881819927F7
:1025900087FD90959093D4088093D30882819927E2
:1025A00087FD90959093D6088093D50883819927CD
:1025B00087FD90959093D8088093D70884819927B8
:1025C00087FD90959093DA088093D90885819927A3
:1025D00087FD90959093DC088093DB08868199278E
:1025E00087FD90959093DE088093DD088781992779
:1025F00087FD90959093E0088093DF088085992768
:1026000087FD90959093E2088093E1088185992752
:1026100087FD90959093E4088093E308828599273D
:1026200087FD90959093E6088093E5088385992728
:1026300087FD90959093E8088093E70810C1E0919A
:10264000EA02F091EB0280810E949A358A83882306
:1026500019F481E0898301C01982809106018823E1
:10266000E1F388E090E09F938F938EE498E09F934E
:102670008F9321E030E03F932F938091EA02909175
:10268000EB029F938F933F932F93CE0102969F93DC
:102690008F933F932F93CE01820F931F9F938F931E
:1026A00084E08F9381E08F9385E58F930E94D40F10
:1026B000EDB7FEB773963CC08091E902893008F40B
:1026C000CEC02091EA023091EB022F5F3F4F88E0AD
:1026D000AEE4B8E0F90101900D928A95E1F7D901D5
:1026E0008E910E94F0348A83882319F481E08983D3
:1026F00001C01982809106018823E1F321E030E0D6
:102700003F932F93CE0102969F938F933F932F93E6
:10271000CE01820F931F9F938F9382E08F9381E06E
:102720008F9387E58F930E94D40FEDB7FEB73B964A
:10273000EDBF95C080910604882309F090C00E94E7
:10274000308D8983823019F0843009F088C020E40C
:1027500030E0F8948091C1008F738093C100809124
:10276000C9008F738093C9008091C100877E8093D8
:10277000C1008091C900877E8093C9008091C80004
:1027800087FF03C08091CE00F9CF8091C00087FF02
:1027900003C08091C600F9CFE091EA02F091EB020C
:1027A000E081E13021F482E08093DE022EC0E43645
:1027B00011F421E830E081E08093DE02832F992735
:1027C0008093CD002093CC008091CD008093C500F4
:1027D0008091CC008093C4008091CA008F7D80934B
:1027E000CA008091CA008F7E8093CA008091C90080
:1027F0008B7F8093C9008091CA0084608093CA0057
:102800008091CA0082608093CA008091CA00877F4D
:102810008093CA008091C200877F8093C20080911C
:10282000C9008E7F8093C9008091C1008861809328
:10283000C1008091C90088618093C9008091C10066
:1028400080688093C1008091C90080688093C9002E
:1028500010926E0010926F00109270007894809128
:10286000800599278436910509F4BBC0853691050A
:10287000ACF48136910509F46FC0823691052CF4D1
:102880008B34910509F45DC00FC18236910509F4BE
:1028900070C08336910509F47FC006C18C3691055E
:1028A00009F4EDC08D3691054CF48736910509F495
:1028B000F8C08836910509F4B2C0F6C08437910596
:1028C00029F08637910509F4E8C0EEC08091EC024A
:1028D000A091EA02B091EB02803140F080E1E9E59D
:1028E000F5E00D9001928A95E1F70DC08D919D91D3
:1028F0000D90BC91A02D8093590590935A05A093FB
:102900005B05B0935C05809106018823E1F31F927B
:10291000809103018F9384E58F930E94D40F8AEFF7
:102920008093E7028FEF8093040180EA9FE00E948A
:102930006F199093E0028093DF020F900F900F9039
:10294000B3C0E091EA02F091EB0280819181909313
:10295000890180938801A8C0E091EA02F091EB021E
:10296000808180930501803298F08FE1809305018A
:102970000FC0A091EA02B091EB028BE0E1E7F5E035
:102980000D9001928A95E1F780917A058093200756
:102990008FEF8093040188C08091E3029091E4025C
:1029A000892B89F4E091EA02F091EB02E081EE23B9
:1029B00051F08AE0E89FC00111240E946F199093A2
:1029C0004C0580934B05E091EA02F091EB02908177
:1029D0008AE0989FC00111249093E4028093E3025F
:1029E00015C08FEF80930401E091EA02F091EB02B1
:1029F00090818AE0989FC00111249093E602809311
:102A0000E502892B19F081E08093F40280EA9FE0CF
:102A10000E946F199093E0028093DF0245C08FEF10
:102A200080930401E091EA02F091EB02908197FD1E
:102A300008C082E08093F1021092E2021092E1025B
:102A40001AC0909580914603892B8093460391810B
:102A50008AE0989FC00111249093E2028093E102E2
:102A600084E08093F10280EA9FE00E946F199093C6
:102A7000E0028093DF0281E08093F50215C08FEFC2
:102A800080930401E091EA02F091EB02808180934F
:102A9000470381E08093F60207C081E08093F30250
:102AA00003C081E08093F7021092EF021092EB02D4
:102AB0001092EA021092E902E3E0CE5F0C943B929E
:102AC000982F8091C00085FFFCCF9093C600089599
:102AD0000F931F9388E18093C1008091C0008260B2
:102AE0008093C0008091C10080688093C100809174
:102AF000C10080648093C10000E010E00093C50035
:102B00008AE290E08093C4008091E5029091E60211
:102B10000E946F1990934E0580934D058CED90E0C7
:102B20000E946F1990937D0580937C0510924F054C
:102B30008AE58093500583E0809353058BE0809372
:102B40005105109252051093EB020093EA02109285
:102B5000E9021F910F910895A0E1B0E0E2EBF5E1E9
:102B60000C941C9280910601882309F4C1C28091C3
:102B7000DF029091E0020E947819882361F01092A0
:102B8000E2021092E1021092E6021092E502109227
:102B9000E4021092E3028091E1029091E202892B1B
:102BA00041F080912D0690912E060E94781988237D
:102BB00029F48091F502882309F460C08091060110
:102BC000882309F45BC08091F10202E317E08430AE
:102BD000A8F00E948A2380E590E09F938F931F9333
:102BE0000F9381E08F938F9388E48F930E94D40F8B
:102BF0002DB73EB7295F3F4F2DBF34C01092480319
:102C00008FE494E09F938F938DE793E29F938F934C
:102C1000E0913B05F0913C05099584E190E09F939C
:102C20008F931F930F9381E090E09F938F9381EF99
:102C300092E09F938F9382E08F9381E08F9388E45B
:102C40008F930E94D40F8091F102982F8F5F809311
:102C5000F1022DB73EB7215F3F4F2DBF943010F0EA
:102C60001092F1028091E1029091E2020E946F19AC
:102C700090932E0680932D061092F5028091F60215
:102C8000882351F180910601882331F10E948A2323
:102C900080E590E09F938F9382E397E09F938F93DB
:102CA00021E030E03F932F9381E291E09F938F9357
:102CB0003F932F9387E493E09F938F9383E08F93C9
:102CC00081E08F938CE48F930E94D40F1092F602D0
:102CD0008DB79EB70F968DBF8091F3028823D1F0F8
:102CE000809106018823B1F08AE090E09F938F9352
:102CF0008FE495E09F938F9381E08F938F9386E588
:102D00008F930E94D40F1092F3022DB73EB7295F24
:102D10003F4F2DBF8091F7028823D9F080910601A3
:102D20008823B9F08BE090E09F938F9381E795E043
:102D30009F938F9381E08F93809103018F9387E41A
:102D40008F930E94D40F1092F7028DB79EB707960B
:102D50008DBF80917C0590917D050E947819882314
:102D600009F461C080910601882309F45CC0809158
:102D70009F079927880F991F880F991F7C010027AB
:102D8000F7FC0095102F8091610490916204A0914E
:102D90006304B0916404BC01CD01A80197010E94B5
:102DA000F59130936A0520936905809159049091BB
:102DB0005A04A0915B04B0915C04BC01CD01A80150
:102DC00097010E94F59130936C0520936B058091DB
:102DD000E40380936D058091E30380936E0588E0A2
:102DE00090E09F938F9389E695E09F938F9381E086
:102DF0008F9383E08F938BE68F930E94D40F809103
:102E00006F052DB73EB7295F3F4F2DBF853018F0B6
:102E100086E080936F0583E690E00E946F1990939F
:102E20007D0580937C058091E5029091E602892BD7
:102E300041F080914D0590914E050E9478198823AC
:102E400021F48091F402882339F1809106018823CE
:102E500019F10E94EE3882E490E09F938F938EEDFB
:102E600096E09F938F9381E08F938F9384E48F9369
:102E70000E94D40F1092F4028DB79EB707968DBFB3
:102E80008091E5029091E602009731F00E946F195F
:102E900090934E0580934D058091E3029091E4025A
:102EA000892B09F4B8C080914B0590914C050E9484
:102EB0007819882309F4AFC080910601882309F4AA
:102EC000AAC080919F079927880F991F880F991F83
:102ED0007C010027F7FC0095102F809161049091F0
:102EE0006204A0916304B0916404BC01CD01A80107
:102EF00097010E94F59130933E0520933D05809106
:102F0000590490915A04A0915B04B0915C04BC01F7
:102F1000CD01A80197010E94F591309340052093BF
:102F20003F0520918009309181094091820950919B
:102F30008309DA01C90163E0880F991FAA1FBB1F2B
:102F40006A95D1F7820F931FA41FB51F820F931F9D
:102F5000A41FB51F20913C0130913D0140913E01DD
:102F600050913F01BC01CD010E94F5913093420583
:102F7000209341058091290490912A04A0912B046B
:102F8000B0912C0449E0B595A795979587954A95FA
:102F9000D1F7809343058091250490912604A09158
:102FA0002704B091280439E0B595A79597958795A2
:102FB0003A95D1F780934405809131049091320481
:102FC000A0913304B091340429E0B595A795979565
:102FD00087952A95D1F7809345058EE090E09F93E1
:102FE0008F938DE395E09F938F9381E08F938F93E1
:102FF00083E48F930E94D40F8091E3029091E402C6
:103000000E946F1990934C0580934B052DB73EB7E6
:10301000295F3F4F2DBF809105018F3F71F19927A7
:1030200004E0880F991F0A95E1F7815B9D4F40E10D
:1030300050E0BC01CE0101960E94CB8F80E190E070
:103040009F938F93CE0101969F938F9381E090E0A1
:103050009F938F9385E091E09F938F9382E08F936E
:1030600081E08F9381E48F930E94D40F8FEF809340
:1030700005018DB79EB70B968DBF809120078823E1
:10308000D1F0809106018823B1F081E090E09F9318
:103090008F9380E297E09F938F9381E08F938F933C
:1030A00082E48F930E94D40F109220072DB73EB771
:1030B000295F3F4F2DBF8091F2028823C9F0809194
:1030C00006018823A9F084E390E09F938F9387EB18
:1030D00098E09F938F9381E08F938F9380E58F93F8
:1030E0000E94D40F1092F2028DB79EB707968DBF43
:1030F000E6E0C05F0C9438921F920F920FB60F92C9
:1031000011242F933F935F936F937F938F939F939C
:10311000AF93BF93EF93FF9320E080910703882341
:1031200029F0809107038150809307038091F60472
:10313000882319F081508093F60480910F03815009
:1031400080930F038F3F09F05BC089E080930F03EA
:1031500080910D0390910E03019690930E0380933E
:103160000D03809110018F5F81708093100188237F
:1031700019F481E080930C03349903C081E08093BB
:1031800010038091080390910903892B21F180910C
:103190000803909109030B9750F0809108039091D8
:1031A00009030A97909309038093080304C01092BF
:1031B000090310920803809108039091090320915C
:1031C000090130910A0182239323892B11F021E018
:1031D00008C020E006C08FEF9FEF90930A01809314
:1031E000090180910101222331F08A3011F45A9AA9
:1031F00007C0479A05C08A3011F45A9801C0479811
:1032000080911003882309F45AC02091970122234A
:1032100009F055C08091700983FF51C086B199278C
:10322000FC01E071F07084FF13C080910A0390915B
:103230000B03019690930B0380930A0380910A037A
:1032400090910B03895E9340D0F12093100337C017
:1032500080910A0390910B03892B69F180910A03F5
:1032600090910B038A56914030F580910A0390911A
:103270000B0369E270E00E94AC9180910A03909187
:103280000B03860F971F90930B0380930A03809183
:103290000A0390910B030B9750F080910A039091D1
:1032A0000B030A97909389018093880104C0F093DF
:1032B0008901E093880110920B0310920A03FF9199
:1032C000EF91BF91AF919F918F917F916F915F919E
:1032D0003F912F910F900FBE0F901F901895209146
:1032E0000D0330910E03280F391FC901019608956F
:1032F00020910D0330910E03821B930B892F992788
:103300008695807490700895CF93DF930E946F1913
:10331000EC01CE010E9478198823D9F3DF91CF9177
:103320000895CF93DF930E946F19EC0109C080913B
:103330001101882329F0909311018FEC80937A007A
:10334000CE010E947819982F882389F3DF91CF91BD
:1033500008959FB7F8945F983E9A469A8091B0007E
:103360008F708093B0008091B00083608093B00034
:103370008091B1008B738093B1008091B1008B601C
:103380008093B1001092B2008FEF8093B3008091D0
:10339000B00080688093B000809170008A7F809335
:1033A0007000809170008260809370009FBF0895CC
:1033B0008AE090E00E946F19909322078093210782
:1033C00082E085BD83EA84BD17BC84EB88BD86E0BE
:1033D00086BD80916E00816080936E00089580911B
:1033E000F0072091670182FF30C09091B3078CE312
:1033F000989FB00111249091B20780E5989FA00199
:103400001124922F905897FD9D5F9595959586E094
:103410009802C00111242091070130910801281B56
:10342000390B3093080120930701421753072CF002
:10343000509308014093070108952617370784F039
:1034400070930801609307010895822F992736E051
:10345000880F991F3A95E1F790930801809307012F
:103460000895A0E0B0E0E7E3FAE10C941B928091AC
:10347000BA07E82FFF27EE5BFE4F9681D080809140
:103480000F01A92FBB27A7FDB095CB2FDB2F8130D4
:1034900009F017C1209161043091620440916304E6
:1034A00050916404BD01CE010E94819197FF04C038
:1034B00061587F4F8F4F9F4F7B018C01C7E015955F
:1034C0000795F794E794CA95D1F78D2D992787FD35
:1034D0009095A92FB92F2091590430915A04409109
:1034E0005B0450915C04BC01CD010E94819197FF67
:1034F00004C061587F4F8F4F9F4FB7E095958795D8
:1035000077956795BA95D1F7F801E701C61BD70BF8
:10351000E80BF90B2091DB043091DC04C901A3E036
:10352000880F991FAA95E1F7821B930BAA2797FD95
:10353000A095BA2FC81BD90BEA0BFB0B8091B107E2
:103540009927AA27BB27BC01CD019E01AF010E948C
:10355000819197FF04C061507E4F8F4F9F4FFC01B8
:10356000EB0179E0F595E795D795C7957A95D1F771
:103570001091F007609107017091080112FF05C0DA
:1035800070930E0160930D0118C040910D01509190
:103590000E018091B907282F3327CB01841B950B8F
:1035A000B9010E94C09180910D0190910E01860F8A
:1035B000971F90930E0180930D0110FF14C080910E
:1035C0000D0190910E0197FD0F9664E095958795FA
:1035D0006A95E1F7AA2797FDA095BA2FC80FD91FC2
:1035E000EA1FFB1F15C080910D0190910E0197FD00
:1035F0000F9654E0959587955A95E1F7AA2797FD80
:10360000A095BA2F8C1B9D0BAE0BBF0BFD01EC01DF
:103610002091ED07222321F133278091020390911D
:103620000303829FA001839F500D929F500D112490
:10363000CA01AA2797FDA095BA2F8C0F9D1FAE1F18
:10364000BF1F2F5F3F4F442737FD4095542FBC01CC
:10365000CD010E94F591309303032093020304C02F
:10366000D0930303C09302038091B207282F33271E
:10367000220F331F220F331F809102039091030307
:10368000821793077CF08091B307282F3327220FEE
:10369000331F220F331F80910203909103032817D9
:1036A000390724F43093030320930203809101012E
:1036B000843108F4F7C080910F018F5F80930F0170
:1036C000F3C02091590430915A0440915B04509109
:1036D0005C04BD01CE010E94819197FF04C0615836
:1036E0007F4F8F4F9F4F7B018C0187E0159507958A
:1036F000F794E7948A95D1F78D2D992787FD9095BA
:10370000A92FB92F20916104309162044091630484
:1037100050916404BC01CD010E9481919B01AC01D8
:1037200097FF04C021583F4F4F4F5F4FC7E055955B
:10373000479537952795CA95D1F72E0D3F1D401F08
:10374000511F8091B5079927AA27BB27BC01CD013E
:103750000E94819197FF04C061507E4F8F4F9F4F11
:10376000FC01EB01B9E0F595E795D795C795BA95BA
:10377000D1F7809166019927A6E0880F991FAA9535
:10378000E1F740910B0150910C012091B9073327CB
:10379000841B950BB9010E94C09180910B019091FF
:1037A0000C01860F971F90930C0180930B01809161
:1037B000F00781FF14C080910B0190910C0197FDDF
:1037C0000F9674E0959587957A95E1F7AA2797FD6E
:1037D000A095BA2FC80FD91FEA1FFB1F15C08091F3
:1037E0000B0190910C0197FD0F9664E095958795DC
:1037F0006A95E1F7AA2797FDA095BA2F8C1B9D0B20
:10380000AE0BBF0BFD01EC012091EE07222321F14D
:1038100033278091000390910103829FA001839F31
:10382000500D929F500D1124CA01AA2797FDA09513
:10383000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442716
:1038400037FD4095542FBC01CD010E94F591309376
:1038500001032093000304C0D0930103C09300032D
:103860008091B607282F3327220F331F220F331FD3
:103870008091000390910103821793077CF080915F
:10388000B707282F3327220F331F220F331F8091B2
:103890000003909101032817390724F430930103A2
:1038A0002093000310920F01E7E0CDB7DEB70C9430
:1038B00037921F920F920FB60F9211242F933F93BE
:1038C0004F935F938F939F93EF93FF9380910101A9
:1038D00090911103843108F04CC0992309F029C15B
:1038E0008091B00086FF24C08091B0008F7B8093D0
:1038F000B000809102039091030387559E4F9093EF
:1039000005038093040325E08D3D920718F08CEDAC
:1039100095E005C08757914030F487E791E0909398
:103920000503809304038091040390910503C2C0B2
:103930008091B00080648093B0008091B807282FF8
:1039400033278DED96E0289FA001299F500D389FC9
:10395000500D1124CA012091120330911303821BD0
:10396000930B909305038093040381E080930F01F0
:10397000DDC0992309F0DDC08091B00086FF9FC0B3
:103980008091B0008F7B8093B000E0911403209170
:10399000B807EE23D9F433278DED96E0289FA001D8
:1039A000299F500D389F500D1124CA0120911203F8
:1039B00030911303821B930B9093050380930403B0
:1039C0001092130310921203469AB0C02E1738F4C7
:1039D0008AE090E09093050380930403A7C089EAEE
:1039E00093E090930503809304038E2F99278330EF
:1039F0009105D9F08430910534F48130910549F076
:103A0000029761F020C08430910591F0059799F0FC
:103A10001AC0809102039091030304C080910003B7
:103A20009091010387559E4F1DC080914C0905C0A0
:103A30008091250902C0809155099927880F991F07
:103A4000880F991FEFCFFF27EE0FFF1FE954F74FA5
:103A500020813181220F331F80910403909105034F
:103A6000820F931F909305038093040380910403B6
:103A70009091050355E08D3D950718F08CED95E08C
:103A800005C08757914030F487E791E09093050394
:103A90008093040320910403309105032C5B304094
:103AA0003093050320930403809112039091130334
:103AB000820F931F909313038093120337C080915A
:103AC000B00080648093B0008CEB90E0909305038D
:103AD00080930403809112039091130384549F4FA9
:103AE000909313038093120380910603882321F09F
:103AF00080910704882321F480910603823011F419
:103B0000469801C0469A809114038F5F80931403F6
:103B1000282F33278091B80799270196821793079A
:103B20002CF481E080930F011092140381E08093C4
:103B30001103209104033091050341E02F3734072E
:103B400030F08FEF8093B3002F5F30400FC02F3FD6
:103B50003105C9F0C0F0A9014F5F50404F37510502
:103B600050F480E88093B300205830403093050330
:103B70002093040312C08FEF8093B300509305038A
:103B8000409304030AC0809104038093B300109211
:103B900005031092040310921103FF91EF919F917E
:103BA0008F915F914F913F912F910F900FBE0F908A
:103BB0001F90189510927C008FEC80937A000895E6
:103BC000CF93DF931092190386E987BD83E090E0DD
:103BD0000E94E72EC82F863E08F4C65FC8BD84E663
:103BE00090E00E94911980911501909116018152E7
:103BF000934010F0C0EF02C0C530F8F0C8BD82E3BA
:103C000090E00E94911984E694E09F938F9380E660
:103C100095E19F938F93E0913B05F0913C050995C9
:103C200080911501909116010F900F900F900F90B9
:103C30008152934010F4C550DFCF6C2F83E090E0A9
:103C40000E94EF2ECF3018F0CCE8D0E002C0C0E0E8
:103C5000D0E0CA3FD105F8F4C7BD82E390E00E94EE
:103C6000911986E694E09F938F9380E695E19F9368
:103C70008F93E0913B05F0913C05099580911501EA
:103C8000909116010F900F900F900F9080529340DB
:103C900010F02196DECFC0932F078091900780FF10
:103CA00009C08C2F8A508B3E28F080915405806487
:103CB00080935405C7BD8CE291E00E949119DF9179
:103CC000CF910895EF92FF921F93CF9310E080ED74
:103CD00097E00E946F197C01CCE8133019F4CB30C7
:103CE00008F0C9E010E080912803909129038C5FCF
:103CF000934024F48091140181500AC080912803DC
:103D0000909129038750944034F0809114018F5F83
:103D10008093140101C011E0809126039091270344
:103D20008C5F934024F48091130181500AC08091EC
:103D30002603909127038750944034F0809113011B
:103D40008F5F8093130101C01F5F809124039091C6
:103D500025038C5F934024F48091120181500AC0A6
:103D6000809124039091250387509440C4F0809162
:103D700012018F5F8093120113C088E694E09F9335
:103D80008F9380E695E19F938F93E0913B05F091AF
:103D90003C0509950F900F900F900F905FC01F5F2B
:103DA00082E18093530380914D038E7F80934D0376
:103DB00085EA8093BC00809114018A3040F48091A0
:103DC00054058160809354058AE0809314018091AA
:103DD0001401863F40F08091540581608093540522
:103DE00085EF80931401809113018A3040F4809113
:103DF00054058260809354058AE08093130180917A
:103E00001301863F40F080915405826080935405F1
:103E100085EF80931301809112018A3040F48091E4
:103E200054058460809354058AE080931201809148
:103E30001201863F40F080915405846080935405C0
:103E400085EF8093120180915303882339F0C701D5
:103E50000E947819882309F090CFF5CF10921101B4
:103E60008FEC80937A00809111018823E1F3CA30AE
:103E700020F48AE090E00E949119C15009F02DCF02
:103E800086E490E00E949119CF911F91FF90EF90EE
:103E900008951F920F920FB60F921124EF92FF9286
:103EA0000F931F932F933F934F935F936F937F9342
:103EB0008F939F93AF93BF93EF93FF9380913103C1
:103EC000282F3327442755278F5F80933103F9012B
:103ED0002231310508F0E3C3EA5BFF4F0C944792AF
:103EE000809178009091790046C0809178009091FF
:103EF000790047C1809178009091790090933403C4
:103F00008093330372C180916A0490916B04209175
:103F1000780030917900821B930B90932407809353
:103F20002307809123079091240790933E03809369
:103F30003D0379C1809178009091790020916C04C3
:103F400030916D04821B930B90932E0780932D0765
:103F500080912D0790912E079093400380933F030B
:103F6000A0C380913703909138032091780030915D
:103F70007900820F931F909338038093370381E079
:103F800091C3809135039091360320917800309150
:103F90007900820F931F909336038093350384E05A
:103FA00081C38091F10783FF1AC080911F01909116
:103FB00020019C01220F331F280F391F40917800E8
:103FC000509179008BE090E0489FB001499F700DBF
:103FD000589F700D1124CB016EE170E00FC08091ED
:103FE0001F01909120019C01220F331F280F391FC0
:103FF000809178009091790063E070E00E94AC912C
:10400000260F371F36952795369527953093200133
:1040100020931F0185E046C380917800909179003C
:104020004091660450916704841B950B90931F0385
:1040300080931E0380911E0390911F03029704F149
:1040400072E04E3E570784F4209132032B5F209399
:10405000320325508091D0039091D103845F914029
:1040600018F4215F2093320380913203853684F166
:104070004F5F5F4F5093670440936604845626C099
:1040800080911E0390911F038F5F9F4F0CF572E08C
:1040900047325707ECF0209132032550209332032A
:1040A0002B5F8091D0039091D103845F914018F4ED
:1040B0002F5020933203809132038C394CF44150BD
:1040C000504050936704409366048C5980933203A8
:1040D000809178009091790090932607809325072E
:1040E00080911E0390911F039C01442737FD40954A
:1040F000542F8091210490912204A0912304B09127
:104100002404820F931FA41FB51F80932104909352
:104110002204A0932304B09324042091210430911D
:104120002204409123045091240457FF04C02150DD
:104130003C4F4F4F5F4F6AE0559547953795279510
:104140006A95D1F78091210490912204A0912304D3
:10415000B0912404821B930BA40BB50B8093210414
:1041600090932204A0932304B09324042EC1809141
:104170003503909136032091780030917900820FB9
:10418000931F9093360380933503109230038CC2B3
:10419000809101018A3071F48091780090917900CA
:1041A0002091330330913403820F931F019696952B
:1041B000879517C04091330350913403843158F0F0
:1041C0002091780030917900240F351F8FEF97E010
:1041D000821B930B06C08091780090917900840F28
:1041E000951F909325038093240386E05BC2809102
:1041F0006A0490916B042091780030917900821BC1
:10420000930B909324078093230780912307909129
:10421000240720913D0330913E03820F931F90931A
:1042200023038093220387E03DC280917800909120
:10423000790020916C0430916D04821B930B909354
:104240002E0780932D0780912D0790912E072091A6
:104250003F0330914003820F931F9093210380937B
:1042600020031FC2209137033091380380917800DA
:1042700090917900280F391F30933803209337032A
:10428000809101018A3019F4220F331F04C0220FDC
:10429000331F220F331F30933803209337032091AD
:1042A000370330913803C90137FD079603E0959530
:1042B00087950A95E1F790932903809328038091CD
:1042C000390390913A03820F931F97FD01969595BC
:1042D000879590933A038093390320917604309127
:1042E0007704821B930B90931E0180931D012091F4
:1042F0002E0330912F0380911D0190911E01280FF4
:10430000391F37FF02C02F5F3F4F359527953093F8
:104310002F0320932E0333CE2091350330913603A3
:104320008091780090917900280F391F30933603DF
:1043300020933503809101018A3019F4220F331F35
:1043400004C0220F331F220F331F309336032093F4
:1043500035032091350330913603C90137FD0796A7
:10436000F3E095958795FA95E1F79093270380936D
:10437000260380913B0390913C03820F931F97FD8E
:1043800001969595879590933C0380933B032091EC
:10439000740430917504821B930B90931C018093DD
:1043A0001B0120912C0330912D0380911B019091D2
:1043B0001C01280F391F37FF02C02F5F3F4F359573
:1043C000279530932D0320932C0383E06BC110922B
:1043D000310381E0809311018091150390911603C0
:1043E0000196909316038093150380917800909125
:1043F0007900909316018093150180911501909199
:104400001601AA27BB272091410330914203409116
:10441000430350914403280F391F4A1F5B1F209309
:1044200041033093420340934303509344038091EC
:1044300045038F5F80934503803108F432C180913A
:10444000170190911801A0911901B0911A017C01F6
:104450008D0163E0EE0CFF1C001F111F6A95D1F760
:10446000E81AF90A0A0B1B0BE20EF31E041F151FB4
:1044700080911903992787FD9095A92FB92FBC0129
:10448000CD0120EB30E240E050E00E948191DC0160
:10449000CB01E81AF90A0A0B1B0BD801C7010496D5
:1044A000A11DB11DB7FF05C0D801C7010B96A11D05
:1044B000B11D23E0B595A795979587952A95D1F7D6
:1044C0008093170190931801A0931901B0931A01DA
:1044D00080912707909128077C010027F7FC009521
:1044E000102F8091170190911801A0911901B0919E
:1044F0001A01E81AF90A0A0B1B0BE0920104F09268
:104500000204009303041093040420911A033091D1
:104510001B0340911C0350911D0357FF04C0215FF2
:104520003F4F4F4F5F4F84E05595479537952795FF
:104530008A95D1F780911A0390911B03A0911C03D7
:10454000B0911D03821B930BA40BB50B80931A0330
:1045500090931B03A0931C03B0931D0380911A0337
:1045600090911B03A0911C03B0911D038E0D9F1D04
:10457000A01FB11F80931A0390931B03A0931C03E9
:10458000B0931D0380911A0390911B03A0911C030B
:10459000B0911D03B7FF03C00F96A11DB11D14E01C
:1045A000B595A795979587951A95D1F72091010410
:1045B00030910204281B390B64E0213036071CF0CF
:1045C00020E034E006C07CEF2030370714F420E010
:1045D0003CEF8091170390911803809117039091FD
:1045E000180397FF03C0909581959F4FA901F3E0B1
:1045F000440F551FFA95E1F78D5B9240C4F080910E
:104600001703909118039C01E4E0220F331FEA95F1
:10461000E1F7281B390B240F351F37FF02C0215F3C
:104620003F4F74E0359527957A95E1F717C0809153
:104630001703909118039C0165E0220F331F6A95C0
:10464000E1F7281B390B240F351F37FF02C0215E0D
:104650003F4F45E0359527954A95E1F7309318038C
:10466000209317038091410390914203A09143034B
:10467000B0914403B7FF03C00196A11DB11DB595CC
:10468000A795979587958093410390934203A093B4
:104690004303B093440388E08093450302C0109223
:1046A000310382E0809330038091300380937C005B
:1046B00080913103882319F08FEC80937A00FF9169
:1046C000EF91BF91AF919F918F917F916F915F918A
:1046D0004F913F912F911F910F91FF90EF900F906D
:1046E0000FBE0F901F90189590E2E2E3F7E08FE481
:1046F0009193815087FFFCCF0895909148039035A6
:1047000040F4E92FFF27EE5CF84F80839F5F909382
:1047100048030895AF92BF92CF92DF92FF920F931A
:104720001F93CF93DF932091460320FF0AC080910F
:104730004703882311F0815002C0809121018093AA
:10474000470321FF0CC090914703809121019817E6
:1047500019F41092470303C09F5F90934703822F81
:10476000992780FF04C081FF02C0109247030E9476
:10477000742380914703282F33279DE7C92E93E2A6
:10478000D92EC0913B05D0913C058A3098F481E147
:10479000809348033F932F938FE994E09F938F93E7
:1047A000DF92CF92FE0109952DB73EB72A5F3F4FAA
:1047B0002DBF11C080E1809348033F932F9384EA7B
:1047C00094E09F938F93DF92CF92FE0109958DB76E
:1047D0009EB706968DBF20914703822F9927AA275F
:1047E000BB27FC01419710F00C94E22CE85AFF4FD4
:1047F0000DE7C02E03E2D02EC0913B05D0913C05C1
:104800000C9447921092480389EA94E09F938F9307
:104810000DE713E2DF92CF92FE01099584E18093C8
:1048200048030F900F900F900F9084E690E09F93B5
:104830008F938AE590E09F938F931F921F928091B0
:1048400001016AE00E94A091892F99279F938F937D
:10485000809101010E94A09199279F938F9389EBEA
:1048600094E09F938F93DF92CF92E0913B05F0917C
:104870003C05099588E280934803EDB7FEB73E9664
:10488000EDBF81E098E09F938F930E94633099275A
:104890009F938F9381ED94E09F938F93DF92CF92BC
:1048A000E0913B05F0913C050995809155059927CC
:1048B0002DB73EB7285F3F4F2DBFEC01C071D070C0
:1048C00084FF06C08CE3809348038FED94E0F1C031
:1048D0009091E204992349F18CE380934803892F56
:1048E00099279F938F938CEE94E09F938F931F93C0
:1048F0000F93E0913B05F0913C050995DF93CF9331
:104900009091E20481E1989FC0011124825C954F4F
:104910009F938F931F930F93E0913B05F0913C057C
:1049200009958DB79EB70C9647C190915405992370
:10493000B1F08CE380934803892F99279F938F933D
:1049400084EF94E09F938F931F930F93E0913B0527
:10495000F0913C050995EDB7FEB7369679C4909174
:104960004E03992371F08CE380934803892F992794
:104970009F938F938BE095E09F938F931F930F935B
:10498000D9C48091360190913701069710F00C94AC
:10499000EB2C8CE38093480380E295E0A5C78091DF
:1049A00070091DE7C12E13E2D12EC0913B05D091B5
:1049B0003C0580FF6BC010924803809101049091E8
:1049C0000204A0910304B0910404BC01CD0125E0D0
:1049D00030E040E050E00E94F5913F932F938DE24C
:1049E00095E09F938F93DF92CF92FE01099584E12A
:1049F000809348038DB79EB706968DBF8091FD03C7
:104A00009091FE03A091FF03B0910004BC01CD0181
:104A100025E030E040E050E00E94F5913F932F9375
:104A20008AE395E09F938F93DF92CF92E0913B05CD
:104A3000F0913C05099588E280934803EDB7FEB7F5
:104A40003696EDBF80911501909116019F938F933B
:104A500087E495E09F938F93DF92CF92E0913B059F
:104A6000F0913C0509958CE3809348032DB73EB740
:104A70002A5F3F4F2DBF87B599279F938F9384E57A
:104A800095E09F938F93DF92CF928EC01092480350
:104A900081E695E09F938F93DF92CF92FE01099577
:104AA00084E1809348030F900F900F900F9080E760
:104AB00095E09F938F93DF92CF921AC7109248038D
:104AC00089E795E09F938F930DE713E2DF92CF92F2
:104AD000FE01099584E1809348030F900F900F9099
:104AE0000F908091610490916204A0916304B09151
:104AF0006404B7FF04C081509C4FAF4FBF4FCAE062
:104B0000B595A79597958795CA95D1F7BF93AF931C
:104B10009F938F9386E895E09F938F931F930F93B6
:104B2000E0913B05F0913C05099588E280934803AC
:104B3000EDB7FEB73896EDBF8091590490915A04B5
:104B4000A0915B04B0915C04B7FF04C081509C4FFE
:104B5000AF4FBF4FFAE0B595A79597958795FA9512
:104B6000D1F7BF93AF939F938F9385E995E09F9380
:104B70008F931F930F93E0913B05F0913C050995AE
:104B80008CE3809348032DB73EB7285F3F4F2DBF7E
:104B900080912D0990912E099F938F9384EA95E03F
:104BA0009F938F931F930F93E0913B05F0913C05EA
:104BB00009958DB79EB706968DBF0DC7E1E0FE2E15
:104BC000C1E0D0E009EB18E09F2D969584E1989F15
:104BD000C001112480934803F801828193819F933F
:104BE0008F932196DF93CF932197808191819F931B
:104BF0008F93DF93CF9383EB95E09F938F938DE714
:104C000093E29F938F93E0913B05F0913C050995CA
:104C10002DB73EB7245F3F4F2DBF32E0F30E2296F3
:104C20000C5F1F4F88E08F1578F6D5C610924803A9
:104C300080918507E82FFF27EE0FFF1FE954F74FFC
:104C4000808191819F938F9380918407E82FFF2724
:104C5000EE0FFF1FE954F74F808191819F938F934F
:104C600085EC95E09F938F93DF92CF92FE0109959B
:104C700084E180934803EDB7FEB73896EDBF80918D
:104C80008707E82FFF27EE0FFF1FE954F74F8081BA
:104C900091819F938F9380918607E82FFF27EE0FD6
:104CA000FF1FE954F74F8081918181589F4F9F9357
:104CB0008F9385ED95E09F938F93DF92CF92E09154
:104CC0003B05F0913C05099588E2809348032DB798
:104CD0003EB7285F3F4F2DBF80918907E82FFF2700
:104CE000EE0FFF1FE954F74F8081918181589F4F4C
:104CF0009F938F9380918807E82FFF27EE0FFF1F68
:104D0000E954F74F8081918181589F4F9F938F93F2
:104D100085EE95E09F938F93DF92CF92E0913B05D4
:104D2000F0913C0509958CE3809348038DB79EB7BD
:104D300008968DBF80918B07E82FFF27EE0FFF1F8E
:104D4000E954F74F8081918181589F4F9F938F93B2
:104D500080918A07E82FFF27EE0FFF1FE954F74FD6
:104D60008081918181589F4F9F938F9385EF95E02C
:104D700063C21092480385E096E09F938F930DE7FE
:104D800013E2DF92CF92FE010995809101010F900D
:104D90000F900F900F908A3009F09DC084E18093AE
:104DA000480380917604909177049C0197FF02C09C
:104DB000295F3F4F287F821B930B9F938F93809196
:104DC00076049091770497FD079673E09595879503
:104DD0007A95E1F79F938F93209176043091770431
:104DE00037FF02C0295F3F4F63E0359527956A95ED
:104DF000E1F78091280390912903821B930B9F93E5
:104E00008F9383E196E09F938F931F930F93E0918D
:104E10003B05F0913C05099588E2809348032DB746
:104E20003EB7265F3F4F2DBF80917404909175046B
:104E30009C0197FF02C0295F3F4F287F821B930B85
:104E40009F938F93809174049091750497FD0796BA
:104E500053E0959587955A95E1F79F938F9320910D
:104E600074043091750437FF02C0295F3F4F43E05F
:104E7000359527954A95E1F7809126039091270370
:104E8000821B930B9F938F9384E296E09F938F9363
:104E90001F930F93E0913B05F0913C0509958CE33E
:104EA000809348038DB79EB70A968DBF8091720498
:104EB000909173049F938F938091720490917304E7
:104EC0002091240330912503821B930B9F938F9392
:104ED00085E396E0ADC08B3019F0843108F4ADC0A5
:104EE00084E18093480380917604909177049C013B
:104EF00097FF02C0215F3F4F207F821B930B97FDDE
:104F00000196959587959F938F93809176049091C4
:104F1000770497FD0F9624E0959587952A95E1F7FC
:104F20009F938F93209176043091770437FF02C0CE
:104F3000295F3F4FC3E035952795CA95E1F78091EA
:104F4000280390912903821B930B9F938F9383E4F3
:104F500096E09F938F931F930F93E0913B05F09101
:104F60003C05099588E2809348032DB73EB7265F3C
:104F70003F4F2DBF80917404909175049C0197FF61
:104F800002C0215F3F4F207F821B930B97FD01964C
:104F9000959587959F938F93809174049091750454
:104FA00097FD0F96A4E095958795AA95E1F79F93B5
:104FB0008F93209174043091750437FF02C0295FEC
:104FC0003F4FF3E035952795FA95E1F78091260359
:104FD00090912703821B930B9F938F9385E596E017
:104FE0009F938F931F930F93E0913B05F0913C05A6
:104FF00009958CE3809348038DB79EB70A968DBFC1
:10500000809172049091730497FD01969595879510
:105010009F938F9380917204909173042091240345
:1050200030912503821B930B9F938F9387E696E025
:105030009F938F931F930F9303C18D3009F0CBC4BF
:1050400084E1809348038091140199279F938F9363
:10505000809176049091770497FD0F9674E0959572
:1050600087957A95E1F79F938F93209176043091FD
:10507000770437FF02C0295F3F4F63E035952795DE
:105080006A95E1F78091280390912903821B930B85
:105090009F938F9386E796E09F938F931F930F9331
:1050A000E0913B05F0913C05099588E28093480327
:1050B0002DB73EB7265F3F4F2DBF80911301992733
:1050C0009F938F93809174049091750497FD0F9630
:1050D00054E0959587955A95E1F79F938F9320918A
:1050E00074043091750437FF02C0295F3F4F43E0DD
:1050F000359527954A95E1F78091260390912703EE
:10510000821B930B9F938F938AE896E09F938F93D4
:105110001F930F93E0913B05F0913C0509958CE3BB
:10512000809348038DB79EB70A968DBF8091120178
:1051300099279F938F93809172049091730497FDA8
:105140000196959587959F938F9380917204909186
:1051500073042091240330912503821B930B9F93AA
:105160008F938EE996E09F938F931F930F93E09117
:105170003B05F0913C050995EDB7FEB73A9668C03E
:105180001092480382EB96E09F938F93DF92CF9229
:10519000FE01099584E1809348030F900F900F90D2
:1051A0000F9080916C0490916D049F938F938091E8
:1051B0002003909121039F938F938FEB96E09F9311
:1051C0008F93DF92CF92E0913B05F0913C050995DA
:1051D00088E2809348032DB73EB7285F3F4F2DBF2D
:1051E00080916A0490916B049F938F938091220326
:1051F000909123039F938F938EEC96E09F938F93D0
:10520000DF92CF92E0913B05F0913C0509958CE34C
:10521000809348038DB79EB708968DBF8091660432
:10522000909167049F938F9380911E0390911F0329
:105230009F938F938DED96E09F938F93DF92CF9204
:10524000E0913B05F0913C050995EDB7FEB7389626
:10525000EDBFC1C31092480380911F0190912001BE
:105260006AE070E00E94C0919F938F9380911F012C
:10527000909120016AE070E00E94C0917F936F934B
:105280008CEE96E09F938F93DF92CF92FE0109956B
:1052900084E1809348032DB73EB7285F3F4F2DBF71
:1052A0008091100A9091110A6AE070E00E94AC911E
:1052B0009F938F938091100A9091110A6AE070E099
:1052C0000E94AC917F936F9380E097E09F938F93C0
:1052D000DF92CF92E0913B05F0913C05099588E281
:1052E000809348038DB79EB708968DBF8091120AB0
:1052F0009091130A9F938F9384E197E09F938F93EC
:10530000DF92CF92E0913B05F0913C0509958CE34B
:1053100080934803EDB7FEB73696EDBF8091140A2F
:105320009091150A9F938F9384E297E09F938F93B8
:10533000DF92CF92E0913B05F0913C0509952DB7A6
:105340003EB72A5F3F4F4FC11092480386E397E074
:105350009F938F93DF92CF92FE01099584E1809312
:1053600048030F900F900F900F908091B708909185
:10537000B8089F938F938FE397E09F938F93DF926B
:10538000CF92E0913B05F0913C05099588E280932E
:1053900048038DB79EB706968DBF80910704992765
:1053A0009F938F938FE497E09F938F93DF92CF9299
:1053B000E0913B05F0913C0509958CE3809348030F
:1053C000EDB7FEB73696EDBF8091B60899270197E5
:1053D0009F938F938FE597E0A9CF109248038FE6B4
:1053E00097E09F938F93DF92CF92FE01099584E11E
:1053F000809348030F900F900F900F908091880139
:10540000909189019F938F9387E797E09F938F9364
:10541000DF92CF92E0913B05F0913C05099588E23F
:10542000809348038DB79EB706968DBF80912D0956
:1054300090912E099F938F9385E897E09F938F9388
:10544000DF92CF92E0913B05F0913C0509958CE30A
:1054500080934803EDB7FEB73696EDBF80911F04E9
:10546000909120049F938F9383E997E05FCFC8E0EA
:10547000CC2EC4E0DC2E20E030E0E901B3E0FB2ECE
:10548000C0934803F60181916F0199279F938F93F1
:1054900089010F5F1F4F1F930F9381EA97E09F933E
:1054A0008F938DE793E29F938F93E0913B05F0916B
:1054B0003C0509952DB73EB7285F3F4F2DBFFA94A5
:1054C00064969801F7FEDCCF86C2ACE0CA2EA4E059
:1054D000DA2EC0E0D0E08E01F3E0FF2E0093480307
:1054E000F60181916F0199279F938F932596DF9302
:1054F000CF938EEA97E09F938F938DE793E29F93EC
:105500008F93E0913B05F0913C0509952DB73EB78F
:10551000285F3F4F2DBFFA940C5E1F4F2497F7FE74
:10552000DDCF59C2109248038BEB97E09F938F9386
:105530000DE713E2DF92CF92FE01099584E180939B
:1055400048030F900F900F900F908091670199275B
:105550009F938F9383EC97E09F938F93DF92CF92EB
:10556000E0913B05F0913C05099588E28093480362
:105570008DB79EB706968DBF80910203909103036D
:1055800097FD039695958795959587959F938F930E
:1055900081ED97E09F938F931F930F93E0913B05CD
:1055A000F0913C0509958CE380934803EDB7FEB775
:1055B0003696EDBF8091B30799279F938F93809183
:1055C000B20799279F938F938FED97E09F938F93C7
:1055D0001F930F93E0913B05F0913C0509952DB782
:1055E0003EB7285F3F4F2DBFF6C1109248038DEEA6
:1055F00097E09F938F937DE7A72E73E2B72EDF92FC
:10560000CF92FE0109950F900F900F900F90C6E575
:10561000D8E000E010E062E0F62E802F8C5E8093F0
:1056200048038B8D99278F7790709F938F938B89E9
:1056300099278F7790709F938F938B8599278F777A
:1056400090709F938F938B8199278F7790709F9302
:105650008F938DEF97E09F938F93BF92AF92E091DE
:105660003B05F0913C0509958DB79EB70C968DBF13
:10567000FA940C5E1F4FA096F7FECFCFACC11092EC
:1056800048038EE098E09F938F935DE7A52E53E249
:10569000B52EDF92CF92FE0109950F900F900F90DB
:1056A0000F90C6E5D8E000E010E042E0F42E802F35
:1056B0008C5E809348038F8D992787FD90959F93EB
:1056C0008F938F89992787FD90959F938F938F85CF
:1056D000992787FD90959F938F938F81992787FDB9
:1056E00090959F938F938DE198E09F938F93BF92B6
:1056F000AF92E0913B05F0913C050995EDB7FEB7FF
:105700003C96EDBFFA940C5E1F4FA096F7FECFCFEC
:1057100062C1109248038EE298E09F938F930DE749
:1057200013E2DF92CF92FE01099584E18093480352
:105730000F900F900F900F9080917108881F88270D
:10574000881F97E0899FC00111248D969F938F93A6
:1057500080916908881F8827881F96E0899FC0016B
:1057600011248D969F938F9380916108881F8827BD
:10577000881F95E0899FC00111248D969F938F9378
:1057800080915908881F8827881F9927880F991F9B
:10579000880F991F8D969F938F938DE398E09F9329
:1057A0008F93DF92CF92E0913B05F0913C050995F4
:1057B00088E2809348032DB73EB7245F3F4F2DBF4B
:1057C00080919108881F8827881F9BE0899FC001CE
:1057D00011248D969F938F9380918908881F882725
:1057E000881F9AE0899FC00111248D969F938F9303
:1057F00080918108881F8827881F99E0899FC001B0
:1058000011248D969F938F9380917908881F882704
:10581000881F992723E0880F991F2A95E1F78D9615
:105820009F938F9381E598E09F938F93DF92CF9220
:10583000E0913B05F0913C0509958CE3809348038A
:105840008DB79EB70C968DBF80919908881F8827C9
:10585000881F9CE0899FC00111248D969F938F9390
:1058600085E698E09F938F93DF92CF92E0913B057E
:10587000F0913C0509958091A108EDB7FEB73696E9
:10588000EDBF87FF12C080E48093480386E798E06D
:105890009F938F93DF92CF92E0913B05F0913C056F
:1058A00009950F900F900F900F908091A90887FF96
:1058B00012C084E48093480389E798E09F938F9314
:1058C0001F930F93E0913B05F0913C0509950F90D4
:1058D0000F900F900F908091B10887FF7CC088E4F3
:1058E000809348038CE798E09F938F931F930F93C7
:1058F000E0913B05F0913C0509950F900F900F90BA
:105900000F9069C0109248038FE798E09F938F93A0
:10591000DF92CF92FE01099584E1809348030F90B6
:105920000F900F900F908091D8029091D9029F9381
:105930008F938DE898E09F938F93DF92CF92E091C1
:105940003B05F0913C05099588E2809348032DB70B
:105950003EB72A5F3F4F2DBF8091DA029091DB0264
:105960009F938F938AE998E09F938F93DF92CF92D2
:10597000E0913B05F0913C05099589E4809348034B
:105980008DB79EB706968DBF87EA98E09F938F9359
:10599000DF92CF92E0913B05F0913C050995809113
:1059A00046030F900F900F900F9083FF14C010923A
:1059B000DB021092DA0260E070E08EE090E00E947C
:1059C000002F09C080912101281719F4215020933C
:1059D00021011092470310924603DF91CF911F914E
:1059E0000F91FF90DF90CF90BF90AF900895F999FD
:1059F000FECF92BD81BDF89A80B599270895F99997
:105A0000FECF1FBA92BD81BD60BD0FB6F894FA9A61
:105A1000F99A0FBE08954AEA20E030E026173707CA
:105A200040F4FC018191480F2F5F3F4F2617370745
:105A3000C8F3842F99270895EAEA40E050E046171A
:105A4000570778F49C01F999FECF32BD21BDF89A31
:105A500080B5E80F4F5F5F4F2F5F3F4F46175707E7
:105A600090F38E2F9927089581E08093860782E036
:105A70008093850783E08093840784E08093870781
:105A800085E08093880786E08093890787E080938C
:105A90008A0788E080938B0789E080938C078AE0EF
:105AA00080938D078BE080938E078CE080938F0727
:105AB00008958CE5809383078CE0E3EFF7E0119283
:105AC0008A95E9F780910101843150F08AE0809352
:105AD000A3071092C7078BE180939F078EE40AC04B
:105AE00083E08093A30780E28093C7078EE18093D1
:105AF0009F0785E58093C4078093C50780E2809364
:105B0000C6071092EF078AE68093900782E280939F
:105B1000F10780E48093F20766E06093AA07109291
:105B2000E7071092E40748E040939D0756EE509334
:105B30009E078093A0079EE1909391078FEF80933B
:105B400093072FE020939407909392071092960763
:105B50004093970784E180939807109299072093C8
:105B600095071092AC071092AD071092AE071092F5
:105B7000AF071092C9071092CA071092CB07109274
:105B8000CC0790E89093B00732E33093B10782E0FE
:105B90008093F0072093B2075093B30784E080937B
:105BA000B8078DE78093BB078093BC078093BD0740
:105BB0009093B40725E52093B50786E48093B60754
:105BC0008CED8093B7078CE38093B9071092BA07E6
:105BD0008FE58093CD0783EF8093CF078AEA809388
:105BE000D1078093D20788E28093CE078093D007B5
:105BF0001092D3073093BE079AE59093BF07309376
:105C0000C0078EEF8093D40784E68093D5079093E6
:105C1000D6079093D7079093D8078BE48093D90742
:105C20002093DA078093DB071092DC076093DD078F
:105C30004093DE079093DF078AE28093E00785EFC9
:105C40008093E1078CE88093E20785E08093E30787
:105C50001092E5071092E60781E28093A70781E49E
:105C60008093A8079093A9071092E8071092E9077C
:105C70001092EA0786E98093EB079093C10787E3C8
:105C80008093C2071092EC071092ED071092EE0776
:105C900008950E94592D8AE080939A0780E18093AD
:105CA0009B0726E020939C079AE59093A10788E73D
:105CB0008093A2079093A4078093A5072093A6073B
:105CC00080E28093AB078CE38093C3078BE48093DF
:105CD000C80786E491E6A3E7B4E78093F3079093BF
:105CE000F407A093F507B093F6076CE770E083E83C
:105CF00097E00E940B2D8093FF070895CF93DF93C9
:105D00000E94592D88E080939A0730E130939B07D9
:105D100026E020939C0794E69093A10788E7809360
:105D2000A2079093A4078093A5072093A60730931A
:105D3000AB0786E48093C3078093C807A3EFB7E05F
:105D4000E2E2F1E0ED01019009922A95E1F76CE7BA
:105D500070E0CD01805790400E940B2D8093FF078B
:105D6000DF91CF9108950E94592D26E020939A0744
:105D70008AE080939B0784E080939C0794E690934D
:105D8000A10788E78093A2079093A4078093A507B3
:105D90002093A60780E18093AB0786E48093C30736
:105DA0008093C80785E491E6A3E7B9E78093F307FA
:105DB0009093F407A093F507B093F6076CE770E0B3
:105DC00083E897E00E940B2D8093FF070895F999CF
:105DD000FECF92BD81BDF89A80B599270895F999B3
:105DE000FECF1FBA92BD81BD60BD0FB6F894FA9A7E
:105DF000F99A0FBE089567EF7CE20E940F90089514
:105E00004FEF5CE20E9449900895EF92FF920F934A
:105E10001F93CF93C82F8150853008F0C3E08DE7E2
:105E2000C89F8001112487EEE82E8FEFF82EE00E38
:105E3000F11E6CE770E0C7010E941C2D682F9801CD
:105E40002D593F4F8FB39927AC014270507081FD9F
:105E5000F9CF32BD21BDF89A80B5861711F0CA017D
:105E600023C08FB399279C012270307081FDF9CF38
:105E7000F2BCE1BCF89A80B58C3511F0C90114C0B0
:105E80008DE7C89FC0011124499727EF3CE24DE7F9
:105E900050E0BC0183E897E00E94EA8F0E94BE6D4B
:105EA0000E94C78B81E090E0CF911F910F91FF90EE
:105EB000EF900895282F863010F025E003C0882346
:105EC00009F421E0F999FECF1FBA82E090E092BD7B
:105ED00081BD20BD0FB6F894FA9AF99A0FBE0895C5
:105EE000CF93C82F809183078C3509F051C0C630FD
:105EF00010F0C5E003C0CC2309F44AC00E94D38E41
:105F00008091F20782FF07C08091A807843618F0BD
:105F100080E58093A8076CE770E083E897E00E9433
:105F20000B2D8093FF078DE7C89FC00111242FEF31
:105F30003CE24DE750E063E877E049970E94279004
:105F40002FEF3CE24CE050E064E877E080E590E041
:105F50000E9427906CE070E084E897E00E940B2D8F
:105F6000282FF999FECF1FBA8CE590E092BD81BD34
:105F700020BD0FB6F894FA9AF99A0FBE8C2F0E94A2
:105F80005A2F0E94BE6D0E94C78B81E090E002C034
:105F900080E090E0CF9108956DE470E088EE93E0AA
:105FA0000E941C2D482F8FB399279C0122703070BE
:105FB00081FDF9CF85E394E092BD81BDF89A80B56B
:105FC000841779F48FB399279C012270307081FD7A
:105FD000F9CF88EE93E092BD81BDF89A80B581300B
:105FE00011F0C901089527EF3CE24EE450E068EE5D
:105FF00073E080E098E00E94EA8F81E090E00895ED
:10600000809100088130A9F46DE470E080E098E0B0
:106010000E940B2D80934D082FEF3CE24EE450E0A0
:1060200060E078E088EE93E00E94279081E090E0C5
:10603000089580E090E00895CF93DF9381E080930E
:106040000008E0E0F8E08FE0158616861786108AD3
:106050008150349687FFF8CF80E480930D088093B9
:106060000E0810920F08809310088093110890EC8E
:1060700090931208109213088093140880931508C7
:106080001092160890931708909318088093190897
:1060900010921A0880931B0890931C08A1E0B8E0A6
:1060A0008CE0E9E2F1E0ED01019009928A95E1F7D7
:1060B0006DE470E0CD0101970E940B2D80934D0897
:1060C000DF91CF910895F999FECF82E090E092BDE3
:1060D00081BDF89A80B5282F863078F023E0322FE2
:1060E000F999FECF1FBA82E090E092BD81BD30BD2C
:1060F0000FB6F894FA9AF99A0FBE822F992708954D
:106100001F93CF93C82F162F863010F0C5E003C021
:10611000882309F4C1E08C2F99278230910541F042
:106120008330910544F4019731F40E94492E05C053
:106130000E947E2E02C00E94B32E1123E1F06CE07B
:1061400070E080E590E00E941C2D282FF999FECF89
:106150008CE590E092BD81BDF89A80B5821759F424
:1061600027EF3CE24CE050E060E570E084E897E027
:106170000E94EA8F02C00E94342D8C2F0E94702F43
:10618000CF911F910895DF92EF92FF920F931F938B
:10619000CF93FF24DF2CEF2C81E090E00E94E72ECC
:1061A0008C3511F031E0E32E6CE070E080E590E09A
:1061B0000E941C2DC82FF999FECF8CE590E092BD6E
:1061C00081BDF89A80B58C1711F421E0D22EC1E080
:1061D00001E010E0EE2029F48C2F0E94052F882387
:1061E000C9F591E0F92E1F930F938FEA98E09F93E2
:1061F0008F9380E695E19F938F93E0913B05F0911B
:106200003C0509952DB73EB72A5F3F4F2DBF0230A1
:10621000110549F0033011054CF40130110531F43A
:106220000E94492E05C00E947E2E02C00E94B32EFD
:10623000DD2059F027EF3CE24CE050E060E570E0F3
:1062400084E897E00E94EA8F02C00E94342D8C2FD0
:106250000E94702FCF5F0F5F1F4FC63008F4BACF78
:10626000FF2019F083E00E945A2F0E946330C82F4C
:106270000E94052F8C2F99279F938F9385ED98E08F
:106280009F938F9300E615E11F930F93E0913B05D9
:10629000F0913C05099581E090E00E94E72E2DB732
:1062A0003EB72A5F3F4F2DBF8F3F21F00E94CC2F7A
:1062B000882399F48EEE98E09F938F931F930F930A
:1062C000E0913B05F0913C0509950E941C300E942D
:1062D00000300F900F900F900F90EE2029F06CE59A
:1062E00081E090E00E94EF2E1092820790E0EDE0B6
:1062F000F8E0CFE08081349618160CF49F5FC1500F
:10630000C7FFF8CF90938207892F99279F938F9388
:1063100081E098E09F938F938FE099E09F938F9314
:106320001F930F93E0913B05F0913C0509950E9466
:106330004A098DB79EB708968DBFCF911F910F91D7
:10634000FF90EF90DF900895982F2FB7F894399829
:10635000389A88B1836088B98091B9008C7F809326
:10636000B9008AE28093B80010925303109251034F
:1063700010925003992379F0E6E5F8E08BE0108263
:106380001182128213821482158216821782815022
:10639000389687FFF4CF78942FBF08951092530357
:1063A00084E98093BC0080E88093BC001092BD001B
:1063B0001092BA001092BB001092B9001092B8006F
:1063C00010924F0380E00E94A4311092BB0085E838
:1063D0008093BC0080914D03826080934D030895AB
:1063E0001F920F920FB60F9211242F933F934F934A
:1063F0005F938F939F93EF93FF9380915303282F85
:106400003327442755278F5F80935303F9012731A2
:10641000310508F0C2C2E759FF4F0C94479281E062
:1064200080934F0309C0809151038C3090F4809188
:1064300051038F5F8093510380915103E82FFF2711
:10644000EE0FFF1FEE0FFF1FE050F84F8585181667
:1064500054F7809151038C3070F010924C031092DD
:106460004B031092510385E08093530380915003B6
:10647000880F8D5A04C080915103880F8E5A8093E3
:10648000BB0085E87FC280915103E82FFF2783E09E
:10649000EE0FFF1F8A95E1F7EA5AF74F818180934B
:1064A000BB0085E88093BC0080915103E82FFF2753
:1064B000EE0FFF1FEE0FFF1FEE0FFF1FEA5AF74F01
:1064C000808180FF91C080915103E82FFF27EE0F5C
:1064D000FF1FEE0FFF1FEE0FFF1FEA5AF74F8281DB
:1064E000882329F080918207873008F46CC280915C
:1064F0004B0390914C03892B09F065C280914903AD
:1065000090914A03892B09F05EC26EC080915103BD
:1065100021E030E002C0220F331F8A95E2F780911C
:10652000490390914A0328233923232B79F0809142
:106530005103E82FFF27EE0FFF1FEE0FFF1FEE0F97
:10654000FF1FEA5AF74F80E184830DC08091510309
:10655000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1FAD
:10656000EA5AF74F148280915103E82FFF2753E036
:10657000EE0FFF1F5A95E1F7EA5AF74F8481282F53
:10658000332743E0220F331F4A95E1F780915103EF
:10659000E82FFF2793E0EE0FFF1F9A95E1F7EA5AE5
:1065A000F74F82818770822B8093BB0085E88093B0
:1065B000BC002091510381E090E002C0880F991F38
:1065C0002A95E2F720914B0330914C0382239323C9
:1065D000892B51F08EE498E09093570380935603F3
:1065E00088E080935803EFC184E089C1E0915603AD
:1065F000F091570381918093BB0085E88093BC00A4
:10660000F0935703E0935603809158038150809391
:106610005803882309F4D7C183E071C18091B90080
:10662000803351F580915403882329F480915103DC
:106630008F5F8093540380915103E82FFF2783E0FD
:10664000EE0FFF1F8A95E1F7EA5AF74F83819927EA
:106650008F7790708F3791057CF480915103E82FEC
:10666000FF27EE0FFF1FEE0FFF1FEE0FFF1FEA5A6F
:10667000F74F83818F5F83831092530384E9809364
:10668000BC008AE090E090933701809336018091BE
:1066900051038F5F80935103109253036DC180911A
:1066A000B9008034C9F180915003E82FFF27EE0F25
:1066B000FF1FEE0FFF1FEE0FFF1FEA5AF74F8381F8
:1066C0008F778383809150038F5F809350038091F5
:1066D00050038C30A0F01092500310924A03109295
:1066E0004903809155038F5F809355038C3038F0B8
:1066F0001092550380914D038D7F80934D038091BF
:106700004D03816080934D031092530384E980937D
:10671000BC0010924F0373C080915003E82FFF27F5
:10672000EE0FFF1FEE0FFF1FEE0FFF1FEA5AF74F8E
:1067300083818068838380915003E82FFF27EE0FC9
:10674000FF1FEE0FFF1FEE0FFF1FEA5AF74F80816A
:1067500080FF2FC080915003E82FFF2753E0EE0FFA
:10676000FF1F5A95E1F7EA5AF74F8481992700975E
:1067700051F04097D9F58EE498E0909357038093B9
:10678000560388E031C080915003992743E0880F79
:10679000991F4A95E1F7855A974F90935703809335
:1067A000560390915003809155039817E1F483E0CC
:1067B0001BC080915003992733E0880F991F3A95A9
:1067C000E1F7855A974F9093570380935603809132
:1067D0004D0381FD06C09091500380915503981799
:1067E00011F482E001C081E0809358038091580346
:1067F000813011F485E801C085EC8093BC00809164
:10680000540380934E0310925403DDC0E09156036D
:10681000F09157038091BB00808380915603909143
:106820005703019690935703809356038091580322
:10683000815080935803823010F085EC5DC0813028
:1068400011F485E859C080914D0381FF2DC08091DE
:10685000CF0380FD1DC080915003E82FFF2723E068
:10686000EE0FFF1F2A95E1F7EA5AF74F86818A3F1C
:1068700079F480915003E82FFF2793E0EE0FFF1F7C
:106880009A95E1F7EA5AF74F8081816080830CC0C6
:1068900080915003E82FFF2783E0EE0FFF1F8A95BA
:1068A000E1F7EA5AF74F1082809150038F5F80938F
:1068B0005003809150038C30A0F01092500310923E
:1068C0004A0310924903809155038F5F80935503CB
:1068D0008C3038F01092550380914D038D7F80935A
:1068E0004D031092530384E98093BC0080914D03C3
:1068F000816080934D0365C08093BC0086E08093E7
:10690000530361C088E9BBCD80915203880F805F3B
:10691000B6CD8091520399278130910561F0823084
:1069200091051CF4892B21F04EC0029739F04BC021
:1069300080911401A4CD80911301A1CD8091120109
:106940009ECD80E89CCD1092530384E98093BC00D7
:1069500010924F038AE090E09093370180933601C4
:1069600080915203823088F4809152038F5F80932C
:10697000520382E18093530380914D038E7F809375
:106980004D0385EA8093BC001EC010925203809193
:106990004D03816080934D0316C01092530384E928
:1069A0008093BC0080914D03816080934D038AE009
:1069B00090E090933701809336011092510310922A
:1069C000500310924F03FF91EF919F918F915F9130
:1069D0004F913F912F910F900FBE0F901F901895E0
:1069E0001F93CF93DF93182F80910604882321F4FF
:1069F0008091E702882319F081E090E097C01D3074
:106A000008F092C01123B1F0E12FFF2723E0EE0F31
:106A1000FF1F2A95E1F7EA5AF74F3597808135969F
:106A200088230CF081C03897808180FD03C083E00B
:106A300090E07CC080914E08823019F084E090E0B4
:106A400075C067E070E08EE498E00E940B2D909195
:106A50005508891719F085E090E068C080ED97E04F
:106A60000E946F19EC0180914D0380FD05C0CE019D
:106A70000E9478198823B9F3112319F48FEF90E05D
:106A80000BC0212F33272150304081E090E002C01D
:106A9000880F991F2A95E2F790934C0380934B033C
:106AA000A1E0B0E0E6E5F8E040E050E06BE0CD01C9
:106AB000042E02C0880F991F0A94E2F720914B031D
:106AC00030914C0382239323892B11F0118212827F
:106AD00061504F5F5F4F389667FFE9CF10925103C7
:106AE0001092530380914D038E7F80934D0385EA6E
:106AF0008093BC0080914D0380FD05C0CE010E94B3
:106B000078198823B9F380914B0390914C03892B1A
:106B100029F0CE010E947819882311F380914B034C
:106B200090914C03009711F082E090E0DF91CF91BB
:106B30001F9108950F931F93CF93DF93982F809108
:106B40000604882321F48091E702882319F081E06C
:106B500090E092C09D30A0F4992319F486E090E073
:106B60008BC0C92FDD27FE0133E0EE0FFF1F3A95E2
:106B7000E1F7EA5AF74F35978081359687FD03C0D4
:106B800082E090E079C03897808180FD03C083E087
:106B900090E072C080ED97E00E946F198C018091A7
:106BA0004D0380FD05C0C8010E9478198823B9F300
:106BB000219721E030E0C90102C0880F991FCA95D2
:106BC000E2F790934A0380934903D901E6E5F8E0A0
:106BD00040E050E06BE0CD01042E02C0880F991F09
:106BE0000A94E2F72091490330914A0382239323C8
:106BF000892B11F01182128261504F5F5F4F3896DE
:106C000067FFE9CF1092500310924E08109255087A
:106C10001092530380914D038E7F80934D0385EA3C
:106C20008093BC0080914D0380FD05C0C8010E9487
:106C300078198823B9F38091490390914A03892BED
:106C400029F0C8010E947819882311F380914E0819
:106C5000823019F084E090E00FC067E070E08EE4CD
:106C600098E00E940B2D90915508891719F085E046
:106C700090E002C080E090E0DF91CF911F910F91F2
:106C80000895CF93DF9380E021E83FEFCBEED8E08B
:106C9000E7EBF8E0DF01853020F411961C921E929C
:106CA00002C0318320831982188222968F5F129648
:106CB00032968A3180F3109273041092720410920B
:106CC0007504109274041092770410927604DF9188
:106CD000CF9108951F920F920FB60F9211240F9328
:106CE0001F932F933F934F935F936F937F938F9354
:106CF0009F93AF93BF93CF93DF93EF93FF938091D5
:106D0000F10782FDE1C0409186005091870080919B
:106D10005A0390915B03481B590B80918600909118
:106D2000870090935B0380935A03CA018D5494406B
:106D3000A0915C03B0915D03835F9A4178F48091E8
:106D40005C038093B608149714F010923A0181E026
:106D500090E090935D0380935C032BC2AD30B1054E
:106D60000CF027C2CA018B5F9040845B914008F011
:106D700086C08091380190913901481B590BE091F0
:106D8000EC07EE2351F0FF27EE0FFF1FE954F74FFA
:106D90008081918184369105ECF4FD01EA0FFB1F9F
:106DA000E954F74F80819181FA01E81BF90BCF017B
:106DB000F7FF03C0909581959F4F06975CF48091F3
:106DC0000704883C20F480910704865F01C088ECAA
:106DD00080930704FD01EA0FFB1FE954F74F808100
:106DE00091819C01220F331F280F391F240F351F5B
:106DF00037FF02C02D5F3F4FE901D595C795D59567
:106E0000C795CA0101968C179D0714F4219706C0F7
:106E100041505040C417D5070CF4219680910704C7
:106E2000833CE0F08D010A0F1B1FF801E954F74F76
:106E3000808191819E01281B390BC90163E070E0BC
:106E40000E94C091CB01880F991F860F971F055193
:106E5000174FD80111969C938E9307C0AA0FBB1FA2
:106E6000A551B74F11961C921E92E0915C03F091D0
:106E70005D03EE0FFF1FE954F74FD183C0832091CC
:106E80005C0330915D032F5F3F4F30935D03209390
:106E90005C0380910101843108F08BC125303105FC
:106EA00011F45D9A01C05D9880915C0390915D033F
:106EB0008630910511F45C9A01C05C98079711F433
:106EC0005B9A77C15B9875C14091860050918700AD
:106ED00080915E0390915F03481B590B809186005F
:106EE0009091870090935F0380935E03CA018D5455
:106EF00094406091C803835F9A4108F07AC0609320
:106F0000590380915903843008F453C09091B60816
:106F100080915903981709F04CC05091C9035B3018
:106F200008F43FC010923A011092C80340E05F316C
:106F3000C0F0E42FFF27EE0FFF1F9F012C563C4FA0
:106F4000DF01A954B74F8D919C91D9018D939C93EA
:106F5000DF01A551B74F8D919C91E255FC4F918374
:106F60008083E42FFF27EE0FFF1F9F012954374F27
:106F7000DF01A05ABC4F8D919C91D90111969C9331
:106F80008E93DF01A658BC4F8D919C91E551F74F30
:106F900091838083842F8F5F482F8D3040F28093C0
:106FA000C8038091C9038F3FB9F08F5F8093C903F5
:106FB00013C08091C903853620F08AE08093C9030D
:106FC00002C01092C903809101018A3011F084310E
:106FD00010F0289A01C0289881E08093C80380911E
:106FE0000604882309F0E5C0809159038093B60810
:106FF000E0C06D3008F0B5C0CA018B5F9040845B83
:10700000914008F090C08091380190913901481B5F
:10701000590BE62FFF27EE0FFF1FE05AFC4F808130
:107020009181FA01E81BF90BCF0105960B9720F52A
:10703000E091EC07EE2351F0FF27EE0FFF1FE9541C
:10704000F74F8081918184369105B4F48091C90312
:107050008A3120F080910704865F05C08B3028F0CC
:10706000809107048E5F8093070480910704893C18
:1070700018F088EC80930704E62FFF27EE0FFF1F20
:10708000E05AFC4F808191819C01220F331F280F11
:10709000391F240F351F37FF02C02D5F3F4FE90115
:1070A000D595C795D595C795CA0101968C179D07AB
:1070B00014F4219706C041505040C417D5070CF472
:1070C0002196809107048E3BD8F0E62FFF27EE0F24
:1070D000FF1FDF01A05ABC4F8D919C919E01281B80
:1070E000390BC90163E070E00E94C091CB01880FA9
:1070F000991F860F971FE658FC4F9183808308C025
:10710000E62FFF27EE0FFF1FE658FC4F118210827B
:107110008091C803E82FFF27EE0FFF1FE05AFC4FB6
:10712000D183C08309C0809101018A3011F084317C
:1071300010F0289A01C0289880910101843188F4C8
:107140008091C803853011F45D9A05C05D98863042
:1071500011F45C9A05C05C98873011F45B9A01C009
:107160005B988091C803843120F48F5F8093C803BB
:1071700020C08431F1F4809101018A3011F0843112
:1071800010F0289A01C028988EE18093C8032CE063
:10719000CBEED8E0A4E9B3E0E7EBF8E08D919D9168
:1071A000918380833296198218822296215027FF7C
:1071B000F5CFFF91EF91DF91CF91BF91AF919F916B
:1071C0008F917F916F915F914F913F912F911F917F
:1071D0000F910F900FBE0F901F901895EF92FF9296
:1071E0000F931F9380919F079927880F991F880FEE
:1071F000991F7C010027F7FC0095102F80916104F6
:1072000090916204A0916304B0916404BC01CD012B
:10721000A80197010E94F5913093E1062093E006C2
:107220008091590490915A04A0915B04B0915C0440
:10723000BC01CD01A80197010E94F5913093E306AE
:107240002093E206809174099091750997FD039649
:1072500095958795959587959093E5068093E40697
:10726000809184099091850997FD0396959587955E
:10727000959587959093E7068093E6068091720432
:10728000909173042091240330912503821B930B6A
:107290009093E9068093E80680910104909102049E
:1072A000A0910304B0910404BC01CD0125E030E0BD
:1072B00040E050E00E94F5913093EB062093EA06FF
:1072C00080911E0390911F039093ED068093EC062E
:1072D00080918801909189019093F1068093F00646
:1072E00080911F01909120019093F3068093F20604
:1072F0008091070499279093F5068093F406809176
:107300002D0990912E099093F7068093F6068091AF
:10731000570899279093F9068093F80680915F08A3
:1073200099279093FB068093FA0680916708992726
:107330009093FD068093FC0680916F0899279093A7
:10734000FF068093FE0680910203909103039093C1
:107350000907809308078091100A9091110A909371
:107360000D0780930C078091140A9091150A909351
:107370000F0780930E078091FD039091FE03A0916B
:10738000FF03B0910004BC01CD0125E030E040E0F6
:1073900050E00E94F59130931107209310078091DF
:1073A0001F049091200490931707809316078091F3
:1073B000160A992790931B0780931A078091D3048C
:1073C0009091D40490931D0780931C078091D10461
:1073D0009091D20490931F0780931E0780915405CB
:1073E000882321F480915505882321F08091DF06C0
:1073F000816003C08091DF068E7F8093DF061F913E
:107400000F91FF90EF900895EF92FF921F93CF930B
:10741000DF93182F7B0180910604882391F58091DA
:1074200001018C3010F0863111F4299801C0299A9D
:1074300011501F3FE9F0F0920903E0920803E701C1
:107440008091080390910903892B11F4209781F30F
:1074500080910C038823A1F310920C038091080300
:1074600090910903892B09F421970E94E98EE8CFB6
:10747000809101018C3010F0863111F4299A01C0FD
:107480002998DF91CF911F91FF90EF900895CF93AE
:10749000DF93809101018D3011F40E94621E1092E1
:1074A0007A00809128039091290390933909809361
:1074B000380980912603909127039093290980939E
:1074C0002809809124039091250390937A09809351
:1074D00079092091200330912103C901880F991F58
:1074E000880F991F820F931F820F931F9093750926
:1074F000809374092091220330912303C901880FDE
:10750000991F880F991F820F931F820F931F9093CB
:107510008509809384098FEC80937A00A8E0B4E019
:10752000C8E8D7E097E08991E82FFF27EE0FFF1F0B
:10753000E954F74F0190F081E02DE158FF4F1E16FE
:107540001F061CF0E0E0F0E005C0EF3FF10514F08D
:10755000EFEFF0E08C91282F3327E217F30714F4B4
:10756000815004C02E173F0714F48F5F8C93915005
:10757000119697FFD8CF8091C4079927AA27BB27D8
:10758000BC01CD0124EC39E040E050E00E94819143
:10759000DC01CB018093800190938101A093820153
:1075A000B09383018091C5079927AA27BB27BC0107
:1075B000CD010E948191DC01CB0180937C019093ED
:1075C0007D01A0937E01B0937F01DF91CF9108955B
:1075D000A0E0B0E0EEEEFAE30C941692882EC0E044
:1075E000D0E07E016E0110925405D0936D04C093DB
:1075F0006C04D0936B04C0936A04D0936704C09367
:107600006604D0937704C0937604D0937504C09336
:107610007404D0937304C0937204109264011092A6
:107620006301109219030E94473A84E690E00E9499
:1076300091190E94473A8091900780FF10C0809175
:10764000150190911601875B934038F480911501E4
:10765000909116018E5E924010F40E94E01D0FE1A1
:107660008AE090E00E949119809124039091250373
:10767000C80FD91F8091280390912903E80EF91EA5
:107680008091260390912703C80ED91E015007FF51
:10769000E7CF9701205F3F4F369527953695279581
:1076A0003093770420937604C6014096969587958B
:1076B0009695879590937504809374046096F5E091
:1076C000D695C795FA95E1F7D0937304C0937204E9
:1076D000909371048093700430936F0420936E0430
:1076E000882009F441C0809174099091750997FF31
:1076F00003C0909581959F4F6CE070E00E94C0910F
:107700009B0170936D0460936C0480918409909147
:10771000850997FF03C0909581959F4F6CE070E0BD
:107720000E94C09170936B0460936A048091250756
:10773000909126079093670480936604B90184E0D2
:1077400090E00E94002F60916A0470916B0486E0C3
:1077500090E00E94002F609166047091670488E0B9
:1077600090E00E94002F65C084E090E00E94FB2E14
:1077700090936D0480936C0486E090E00E94FB2E51
:1077800090936B0480936A0488E090E00E94FB2E43
:107790009C01909367048093660480916C0490919F
:1077A0006D048150984050F480916A0490916B046C
:1077B0008150984018F421503440D8F180E399E08A
:1077C0009F938F9380E695E19F938F93E0913B0584
:1077D000F0913C050995809174099091750997FF86
:1077E00003C0909581959F4F6CE070E00E94C0911E
:1077F00070936D0460936C04809184099091850965
:1078000097FF03C0909581959F4F6CE070E00E94B8
:10781000C09170936B0460936A04809125079091E6
:10782000260790936704809366040F900F900F9043
:107830000F9010923909109238091092290910926C
:10784000280910927A091092790984E690E00E9442
:10785000911980912003909121039C01220F331FE5
:10786000220F331F280F391F280F391F3093750936
:107870002093740980912203909123038C01000FBF
:10788000111F000F111F080F191F080F191F109348
:1078900085090093840980919F07C82EDD24EE247A
:1078A000FF24442737FD4095542FC701B6010E949D
:1078B00081914B015C016093610470936204809339
:1078C0006304909364049801442737FD4095542F36
:1078D000C701B6010E948191DC01CB01809359045C
:1078E00090935A04A0935B04B0935C04809241048B
:1078F00090924204A0924304B092440480933904CD
:1079000090933A04A0933B04B0933C04109231044A
:1079100010923204109233041092340480911701B3
:1079200090911801A0911901B0911A019093280724
:1079300080932707109218031092170310922104C6
:1079400010922204109223041092240400918801C2
:10795000109189011093200400931F0484E690E0A5
:10796000909385018093840182E390E090930903D2
:10797000809308038091C4079927AA27BB27BC01DD
:10798000CD0124EC39E040E050E00E948191DC011F
:10799000CB018856954CAF4FBF4F80938001909399
:1079A0008101A0938201B09383018091C50799273B
:1079B000AA27BB27BC01CD010E948191DC01CB012C
:1079C0008856954CAF4FBF4F80937C0190937D01BB
:1079D000A0937E01B0937F0110924101109240016B
:1079E000C801AA2797FDA095BA2F20913C0130919C
:1079F0003D0140913E0150913F01BC01CD010E94EB
:107A00008191DC01CB018093800990938109A0933F
:107A10008209B093830910921C0410921B040E94E7
:107A2000BE6D8091CF0384608093CF038FEF8093EE
:107A3000000A1092010A80E28093020AC8E0D4E0B2
:107A4000A8E8B7E007E08D91E82FFF27EE0FFF1FB2
:107A5000E954F74F8081918181588993015007FF44
:107A6000F2CF84E68093070480910603882311F007
:107A7000579A06C080E091E1909308018093070136
:107A8000809176049091770480569940815C9B4266
:107A900028F080915405816080935405809174048E
:107AA0009091750480569940815C9B4228F08091AA
:107AB0005405826080935405809172049091730400
:107AC0008C5291408957954028F0809154058460EC
:107AD0008093540580916C0490916D048C52914078
:107AE000835C914028F08091540588608093540510
:107AF00080916A0490916B048C529140835C914018
:107B000028F080915405806180935405809166042B
:107B100090916704805092408355914028F0809165
:107B2000540580628093540586E4809377010E9417
:107B3000C78BECE0CDB7DEB70C943292A3E1B0E096
:107B4000E4EAFDE30C941092809172049091730426
:107B50002091240330912503821B930B90937A0983
:107B60008093790980912E0390912F0397FD0796BA
:107B70009C0113E0359527951A95E1F73093390963
:107B80002093380980912C0390912D0397FD07963F
:107B9000B3E095958795BA95E1F79093290980937D
:107BA0002809309344092093430990933C0980931A
:107BB0003B098091740990917509AC01440F551FE0
:107BC000480F591F2091200330912103C901880FCC
:107BD000991F880F991F820F931F820F931F480FC1
:107BE000591F57FF02C04D5F5F4F559547955595FB
:107BF0004795509375094093740980918409909139
:107C00008509AC01440F551F480F591F20912203CD
:107C100030912303C901880F991F880F991F820F84
:107C2000931F820F931F480F591F57FF02C04D5FCC
:107C30005F4F5595479555954795509385094093C6
:107C400084092091200330912103C901880F991FD5
:107C5000880F991F820F931F820F931F9C01442747
:107C600037FD4095542F8091510490915204A0917A
:107C70005304B0915404820F931FA41FB51F809327
:107C8000510490935204A0935304B0935404209150
:107C9000220330912303C901880F991F880F991F70
:107CA000820F931F820F931F9C01442737FD40953D
:107CB000542F80914D0490914E04A0914F04B091A7
:107CC0005004820F931FA41FB51F80934D049093FF
:107CD0004E04A0934F04B093500480914D099091AD
:107CE0004E092091200330912103820F931F90931E
:107CF0004E0980934D0980917C0990917D092091D6
:107D0000220330912303820F931F90937D09809368
:107D10007C098091680490916904019690936904AC
:107D2000809368048091250790912607209166042E
:107D300030916704821B930B9C01442737FD4095CB
:107D4000542F8091490490914A04A0914B04B09122
:107D50004C04820F931FA41FB51F80934904909376
:107D60004A04A0934B04B0934C048FEC80937A00A8
:107D7000109211012091390430913A0440913B0452
:107D800050913C0429873A874B875C8729543B46AE
:107D9000414050402CF028E43BE641E050E00DC06B
:107DA00089859A85AB85BC85885B9449AE4FBF4F6A
:107DB0004CF428EB34E94EEF5FEF2D833E834F8385
:107DC000588708C089859A85AB85BC858D839E833D
:107DD000AF83B8872091410430914204409143041D
:107DE000509144042D873E874F87588B29543B463A
:107DF000414050402CF028E43BE641E050E00DC00B
:107E00008D859E85AF85B889885B9449AE4FBF4FFD
:107E10004CF428EB34E94EEF5FEF29833A834B8330
:107E20005C8308C08D859E85AF85B88989839A83D8
:107E3000AB83BC83A0917909B0917A09BB8BAA8BE3
:107E4000FD01CF01AA2797FDA095BA2FA09031047C
:107E5000B0903204C0903304D0903404A80EB91E00
:107E6000CA1EDB1EA0923104B0923204C0923304C9
:107E7000D0923404E0908009F09081090091820949
:107E800010918309E80EF91E0A1F1B1FE09280095A
:107E9000F09281090093820910938309F091EA031B
:107EA000F98BFF2309F098C18091E903882309F039
:107EB00093C18091700986FF8FC1809128099091AC
:107EC0002909AA2797FDA095BA2FBC01CD012981C8
:107ED0003A814B815C810E9481919B01AC0197FFAB
:107EE00004C02150384F4F4F5F4FBBE05595479529
:107EF00037952795BA95D1F780916301682E77243D
:107F000088249924CA01B901A40193010E94819196
:107F1000DC01CB018093820490938304A0938404BA
:107F2000B0938504B7FF04C08150904FAF4FBF4F4F
:107F30001C012D01ACE05594479437942794AA95E1
:107F4000D1F72092820430928304409284045092AC
:107F500085048091380990913909AA2797FDA09549
:107F6000BA2FBC01CD012D813E814F8158850E94E1
:107F7000819197FF04C06150784F8F4F9F4FFBE076
:107F80009595879577956795FA95D1F7A401930113
:107F90000E948191DC01CB01809386049093870439
:107FA000A0938804B0938904B7FF04C08150904F18
:107FB000AF4FBF4F9C01AD01ECE05595479537950C
:107FC0002795EA95D1F72093860430938704409350
:107FD0008804509389048091820490918304909343
:107FE000200980931F0980918604909187049093C3
:107FF0002409809323092219330944095509209340
:108000008604309387044093880450938904E20ED9
:10801000F31E041F151FE0928009F092810900935E
:10802000820910938309809162018823B1F457FF7C
:1080300004C02F5F3F4F4F4F5F4F55954795379582
:108040002795A21AB30AC40AD50AA0923104B092A5
:108050003204C0923304D09234042A893B897901D6
:108060000027F7FC0095102F8091860490918704DB
:10807000A0918804B0918904E80EF91E0A1F1B1F05
:10808000C801B70129813A814B815C810E948191AD
:108090009B01AC0197FF04C02150384F4F4F5F4FF9
:1080A0006BE055954795379527956A95D1F780915F
:1080B0006401A82EBB24CC24DD24CA01B901A60189
:1080C00095010E948191DC01CB0180937A04909309
:1080D0007B04A0937C04B0937D04B7FF04C081505F
:1080E000904FAF4FBF4F3C014D013CE095948794BA
:1080F000779467943A95D1F760927A0470927B04F2
:1081000080927C0490927D04C801B7012D813E814C
:108110004F8158850E94819197FF04C06150784F2C
:108120008F4F9F4F2BE095958795779567952A956B
:10813000D1F7A60195010E948191DC01CB018093CA
:108140007E0490937F04A0938004B0938104B7FFD2
:1081500004C08150904FAF4FBF4FAC01BD018CE0C8
:1081600075956795579547958A95D1F740937E0405
:1081700050937F0460938004709381042A893B8923
:1081800037FF03C0309521953F4F21343105E4F18D
:10819000D401C30197FE07C0B095A0959095819535
:1081A0009F4FAF4FBF4F81389105A105B10584F4B2
:1081B000DB01CA0177FF07C0B095A0959095819526
:1081C0009F4FAF4FBF4F81389105A105B105E4F036
:1081D00081E080931D0418C0109224091092230995
:1081E0001092200910921F0910927E0410927F04B1
:1081F000109280041092810410927A0410927B04F1
:1082000010927C0410927D0480917E0490917F04F2
:10821000A0918004B0918104BC01CD0124E630E03E
:1082200040E050E00E94F591E0907A04F0907B04E9
:10823000E21AF30AF0923709E092360980917A0443
:1082400090917B04A0917C04B0917D04BC01CD0190
:1082500024E630E040E050E00E94F591DA01C901E7
:1082600020917E0430917F048C01021B130B10932C
:108270002B0900932A0980913C0190913D01A09126
:108280003E01B0913F01BC01CD0128E631E040E064
:1082900050E00E94819120918009309181094091A4
:1082A000820950918309261737074807590764F058
:1082B000261B370B480B590B2093800930938109FB
:1082C000409382095093830920918009309181095C
:1082D000409182095091830957FF0CC0260F371F28
:1082E000481F591F209380093093810940938209C8
:1082F0005093830960912809709129096E0D7F1DA3
:108300009B01442737FD4095542F8091350490916F
:108310003604A0913704B0913804820F931FA41F34
:10832000B51F8093350490933604A0933704B0931F
:1083300038048091EF039091F003681B790BCB0117
:10834000AA2797FDA095BA2F29853A854B855C858C
:10835000820F931FA41FB51F8093390490933A0492
:10836000A0933B04B0933C04C0907C01D0907D016D
:10837000E0907E01F0907F01C816D906EA06FB0660
:10838000C4F488EA91E6A0E0B0E08C199D09AE093A
:10839000BF098093390490933A04A0933B04B093AF
:1083A0003C048093350490933604A0933704B09333
:1083B000380422273327A9012C193D094E095F09EA
:1083C0008091390490913A04A0913B04B0913C040F
:1083D00082179307A407B507B4F4D701C601885ADA
:1083E0009146A040B0408093390490933A04A09302
:1083F0003B04B0933C048093350490933604A093DF
:108400003704B09338046091380970913909600FCE
:10841000711F9B01442737FD4095542F80913D04E7
:1084200090913E04A0913F04B0914004820F931FAD
:10843000A41FB51F80933D0490933E04A0933F0476
:10844000B09340048091ED039091EE03681B790B8B
:10845000CB01AA2797FDA095BA2F2D853E854F8584
:108460005889820F931FA41FB51F809341049093D6
:108470004204A0934304B0934404E0908001F09040
:1084800081010091820110918301E816F9060A0723
:108490001B07C4F488EA91E6A0E0B0E08E199F09BA
:1084A000A00BB10B8093410490934204A09343042A
:1084B000B093440480933D0490933E04A0933F0402
:1084C000B093400422273327A9012E193F09400BFE
:1084D000510B8091410490914204A0914304B091CA
:1084E000440482179307A407B507B4F4D801C70161
:1084F000885A9146A040B040809341049093420432
:10850000A0934304B093440480933D0490933E04AD
:10851000A0933F04B09340048091310490913204C1
:10852000A0913304B09134048093450490934604A1
:10853000A0934704B0934804809141049091420471
:10854000A0914304B0914404809361049093620429
:10855000A0936304B09364048091390490913A0429
:10856000A0913B04B0913C048093590490935A0429
:10857000A0935B04B0935C0480913D0490913E0411
:10858000A0913F04B091400480935D0490935E04F9
:10859000A0935F04B09360048091350490913604F9
:1085A000A0913704B09138048093550490935604F9
:1085B000A0935704B093580480911D0190911E011F
:1085C00097FD079603E0959587950A95E1F79093B7
:1085D00039098093380980911B0190911C0197FD06
:1085E000079613E0959587951A95E1F790932909D9
:1085F0008093280980912803909129030F9734F4E0
:1086000088E19CEF90933909809338098091280381
:1086100090912903079734F480E398EF90933909F8
:1086200080933809209101012A30A9F48091280310
:1086300090912903835F934034F088EE93E0909308
:1086400039098093380980912803909129038A5F22
:108650009340DCF014C08091280390912903815D40
:10866000974034F088EE93E090933909809338096D
:108670008091280390912903805E974034F080ED2B
:1086800097E090933909809338098091260390915F
:1086900027030F9734F488E19CEF90932909809386
:1086A00028098091260390912703079734F480E3EB
:1086B00098EF90932909809328092A30A9F4809192
:1086C000260390912703835F934034F088EE93E074
:1086D000909329098093280980912603909127037C
:1086E0008A5F9340DCF014C08091260390912703A9
:1086F000815D974034F088EE93E090932909809350
:1087000028098091260390912703805E974034F0DA
:1087100080ED97E0909329098093280960916E017C
:10872000662309F4AFC040911D0150911E01809154
:108730008A0490918B04481B590B509391044093E9
:10874000900420911D0130911E01280F391F37FF21
:1087500002C02F5F3F4F3595279530938B042093B0
:108760008A04413851051CF080E890E005C040586B
:108770005F4F34F480E89FEF9093910480939004CE
:1087800040911B0150911C0180918C0490918D04AB
:10879000481B590B50938F0440938E0420911B016A
:1087A00030911C01280F391F37FF02C02F5F3F4F48
:1087B0003595279530938D0420938C0441385105CD
:1087C0001CF080E890E005C040585F4F34F480E82A
:1087D0009FEF90938F0480938E04462F55278091AE
:1087E000900490919104849FB001859F700D949F97
:1087F000700D11249B0177FF02C0215F3F4FF4E011
:1088000035952795FA95E1F78091380990913909C6
:10881000820F931F909339098093380980918E04B9
:1088200090918F04849FD001859FB00D949FB00DCF
:108830001124AD019D01B7FF02C0215F3F4FE4E06D
:1088400035952795EA95E1F78091280990912909B6
:10885000820F931F909329098093280980911D010D
:1088600090911E01860F971F90931E0180931D010A
:1088700080911B0190911C01840F951F90931C0106
:1088800080931B0100913B0910913C0980911F09C5
:1088900090912009101611065CF59C0197FF04C009
:1088A00022273327281B390BC901AA2797FDA0953A
:1088B000BA2F20916201332744275527BC01CD01EF
:1088C0000E9481919B01AC0197FF04C0215C3F4F46
:1088D0004F4F5F4F76E055954795379527957A9599
:1088E000D1F78091360990913709820F931F27C0E5
:1088F00097FF03C0909581959F4FAA2797FDA0955C
:10890000BA2F20916201332744275527BC01CD019E
:108910000E9481919B01AC0197FF04C0215C3F4FF5
:108920004F4F5F4F66E055954795379527956A9568
:10893000D1F78091360990913709821B930B909360
:10894000370980933609E0904309F09044098091FB
:108950002309909124091E141F045CF59C0197FFC4
:1089600004C022273327281B390BC901AA2797FDEA
:10897000A095BA2F20916201332744275527BC01C7
:10898000CD010E9481919B01AC0197FF04C0215C45
:108990003F4F4F4F5F4F96E0559547953795279539
:1089A0009A95D1F780912A0990912B09820F931FF4
:1089B00027C097FF03C0909581959F4FAA2797FDE9
:1089C000A095BA2F20916201332744275527BC0177
:1089D000CD010E9481919B01AC0197FF04C0215CF5
:1089E0003F4F4F4F5F4F86E05595479537952795F9
:1089F0008A95D1F780912A0990912B09821B930BBC
:108A000090932B0980932A098091700987FF44C0B5
:108A1000B989BB2309F040C08091E9038823E1F5BF
:108A2000E1E0EE16E1E0FE064CF08091380990910D
:108A300039098E0D9F1D805091400DC0F0E0EF165A
:108A4000FFEFFF0664F480913809909139098E0D8B
:108A50009F1D80509F4F909339098093380921E0E2
:108A6000013012074CF08091280990912909800F5C
:108A7000911F805091400CC03FEF0030130764F409
:108A80008091280990912909800F911F80509F4F54
:108A90009093290980932809E2E1CD5E0C942C92F1
:108AA00080910604882301F58091CF038C7F809309
:108AB000CF03A9E5B5E0E6E5F8E09BE08091E702A9
:108AC000882309F48C938D9181831282915038967A
:108AD00097FFF4CF8091E702882359F08091E70255
:108AE00081508093E70205C08091CF03816080931D
:108AF000CF0380914F03882319F010924F030895FC
:108B0000809351038093530380914D038E7F809314
:108B10004D0385EA8093BC000895CF93DF93A8E0CE
:108B2000B4E0C8E8D7E057E09991E92FFF27EE0FAE
:108B3000FF1FE954F74F0190F081E02DE158FF4FFE
:108B4000EF3FF10521F01CF0EFEFF0E004C0F7FF7C
:108B500002C0E0E0F0E0993111F4EC931BC04C91BD
:108B6000242F3327E217F307A9F0CF01821B930BC1
:108B700097FD03969595879595958795242F280FB2
:108B80002C93822F9927E817F90714F4215001C07C
:108B90002F5F2C935150119657FFC6CF80919207AB
:108BA000883F38F0EFEFF0E0E81BF109E85FFB4F9A
:108BB00080818093740180917401882329F0843628
:108BC00018F084E68093740180919407883F38F010
:108BD000EFEFF0E0E81BF109E85FFB4F8081809345
:108BE000720180917201882329F0843618F084E69E
:108BF000809372018091A107883F38F0EFEFF0E099
:108C0000E81BF109E85FFB4F808180936D01809143
:108C10006D018B3010F48AE002C08F3F11F4809315
:108C20006D018091CE07883F38F0EFEFF0E0E81B50
:108C3000F109E85FFB4F808180934F0980914F09D4
:108C4000863010F485E002C08F3F11F480934F0905
:108C50008091D007883F38F0EFEFF0E0E81BF10992
:108C6000E85FFB4F80818093770980917709863098
:108C700010F485E002C08F3F11F480937709809152
:108C8000BB07873F19F4429905C006C0863F31F4FF
:108C9000439B02C08CE80BC086E409C0883F38F0D3
:108CA000EFEFF0E0E81BF109E85FFB4F8081809374
:108CB0004C098091BC07873F19F4429905C006C052
:108CC000863F31F4439B02C08CE80BC086E409C0A8
:108CD000883F38F0EFEFF0E0E81BF109E85FFB4F69
:108CE0008081809325098091BD07883F38F0EFEFA0
:108CF000F0E0E81BF109E85FFB4F808180935509A4
:108D000080919307883F38F0EFEFF0E0E81BF1091E
:108D1000E85FFB4F80818093730180919607883FC5
:108D200038F0EFEFF0E0E81BF109E85FFB4F8081DE
:108D30008093710180919807883F38F0EFEFF0E061
:108D4000E81BF109E85FFB4F808180936F01809100
:108D5000A007883F38F0EFEFF0E0E81BF109E85F8B
:108D6000FB4F8081809370018091A207883F38F08B
:108D7000EFEFF0E0E81BF109E85FFB4F80818093A3
:108D80006C018091A307883F38F0EFEFF0E0E81B1B
:108D9000F109E85FFB4F808180936E018091A40709
:108DA000883F38F0EFEFF0E0E81BF109E85FFB4F98
:108DB000808180936B018091A507883F38F0EFEFA9
:108DC000F0E0E81BF109E85FFB4F808180936A01C6
:108DD0008091AB07883F38F0EFEFF0E0E81BF10936
:108DE000E85FFB4F8081809368018091AC07883FEA
:108DF00038F0EFEFF0E0E81BF109E85FFB4F80810E
:108E00008093E4038091AD07883F38F0EFEFF0E006
:108E1000E81BF109E85FFB4F80818093E3038091B9
:108E2000AE07883F38F0EFEFF0E0E81BF109E85FAC
:108E3000FB4F80818093E2038091AF07883F38F039
:108E4000EFEFF0E0E81BF109E85FFB4F80818093D2
:108E5000E1038091C907883F38F0EFEFF0E0E81BAD
:108E6000F109E85FFB4F80818093E0038091CA079E
:108E7000883F38F0EFEFF0E0E81BF109E85FFB4FC7
:108E800080818093DF038091CB07883F38F0EFEF3C
:108E9000F0E0E81BF109E85FFB4F80818093DE037F
:108EA0008091CC07883F38F0EFEFF0E0E81BF10944
:108EB000E85FFB4F80818093DD038091B007883F9E
:108EC00038F0EFEFF0E0E81BF109E85FFB4F80813D
:108ED000809367018091B407883F38F0EFEFF0E0AE
:108EE000E81BF109E85FFB4F808180936601809168
:108EF000BE07883F38F0EFEFF0E0E81BF109E85FCC
:108F0000FB4F8081809365018091C107883F38F0D5
:108F1000EFEFF0E0E81BF109E85FFB4F8081809301
:108F200064018091C207883F38F0EFEFF0E0E81B62
:108F3000F109E85FFB4F8081809363018091C30753
:108F4000883F38F0EFEFF0E0E81BF109E85FFB4FF6
:108F50008081809362018091EB07883F38F0EFEFCA
:108F6000F0E0E81BF109E85FFB4F80818093340952
:108F70009091DD04992321F080913409981720F015
:108F800080913409882311F49093340980919007DB
:108F9000809370098091F107809354098091C807EC
:108FA000883F38F0EFEFF0E0E81BF109E85FFB4F96
:108FB0008081809361018091E407883F38F0EFEF72
:108FC000F0E0E81BF109E85FFB4F8081809387099F
:108FD00080916801282F33272F5F3F4F8CE398E261
:108FE000B9010E94C09170937601609375018091E0
:108FF0009E078093780980919D0780933D09909109
:10900000E607933308F44AC081E08093DC03983F7D
:1090100058F0EFEFF0E0E91BF109E85FFB4F8081CA
:10902000823310F41092DC03809177012091DC03ED
:10903000821721F18330F8F430919D01222351F001
:109040008CED95E09093090380930803332369F432
:109050008EE209C088EC90E09093090380930803A6
:10906000332319F487E180939D0185E08093F10318
:109070002093770103C08150809377018091C709C5
:109080009091C80997FF0FC08091DC03882359F0A5
:109090008091540580688093540505C01092DC03CC
:1090A0008AE0809377018091C7099091C80997FF62
:1090B0001DC0809106048823C9F08091DC038823B9
:1090C000A9F08091090190910A018F5F9F4F71F47F
:1090D00088E99AE3909309038093080380E094EA77
:1090E00090930A01809309011092DC038091DC03C4
:1090F000882369F08091CE0381608093CE038091B4
:109100006401823D48F4825E8093640105C08091D1
:10911000CE038E7F8093CE03DF91CF910895A7E198
:10912000B0E0E5E9F8E40C9410920E949E3D809135
:10913000CF03992784719070892B91F58091F20764
:1091400082FF27C08091EB039091EC030097F1F030
:1091500002E088359007D4F49C0197FF02C02D5F90
:109160003F4F35952795359527958091A8079927E5
:10917000289FA001299F500D389F500D1124CA012E
:1091800064E670E00E94C091CB0106C08DE290E0E1
:1091900003C08091A80799279093CD038093CC03B7
:1091A0002091CA033091CB0355E72033350759F49A
:1091B000109212041092110480913D099927909306
:1091C000CD038093CC0360911104709112047A83D3
:1091D000698380913D0999270A966817790714F4E5
:1091E0009A83898380910704843608F06AC080914D
:1091F000CE0382FD66C08091A6049091A7040097DB
:1092000031F001979093A7048093A6040BC01092AD
:1092100006049093D1038093D0038091CF038D7E79
:109220008093CF03809101018A3011F0843110F0D6
:10923000289A01C028988091D0039091D103895E2B
:109240009340E0F18091160A8536C0F18091CC03FD
:109250009091CD039A8389838091CF03806180931D
:10926000CF0380918407A82FBB27AA0FBB1FFD0146
:10927000E551F74F1182108280918507282F3327FF
:10928000220F331FC9018551974FFC0111821082B3
:10929000A954B74F11961C921E922954374FD901E9
:1092A00011961C921E9280918707E82FFF27EE0FE0
:1092B000FF1FE954F74F118210823FC3109206043A
:1092C0003CC3809107048D3808F40DC38091CF030F
:1092D0008F7E8093CF039091A90782E3989FC0016E
:1092E00011249093A7048093A604E981FA81B99789
:1092F0008CF080910604882369F08091D0039091CE
:10930000D103FFEF8F3F9F0729F001969093D10380
:109310008093D0038091D0039091D1038F3F91052A
:1093200009F008F51092290410922A0410922B04D7
:1093300010922C04109225041092260410922704F7
:1093400010922804109292041092930410929404A4
:10935000109295041092310410923204109233044A
:109360001092340405C08091CF0382608093CF03B4
:1093700080918607E82FFF27EE0FFF1FE954F74F74
:1093800080819181813591050CF438C120910604CA
:10939000222309F033C180918707E82FFF27EE0FC2
:1093A000FF1FE954F74F808191818C3491050CF4B3
:1093B000FFC08091A8048F5F8093A804893C08F4C3
:1093C0001DC12093A8041092D1031092D0033091B4
:1093D0008407E32FFF27EE0FFF1FE954F74F80812B
:1093E000918187349105B4F480918507E82FFF2798
:1093F000EE0FFF1FE954F74F808191810190F081BA
:10940000E02DF7FF03C0F095E195FF4FE734F1053C
:109410000CF478C041E020918507A22FBB27AA0F4A
:10942000BB1FA954B74F8D919C911197873491051B
:1094300044F0E32FFF27EE0FFF1FE954F74F808121
:1094400091818D919C918734910574F0809184076E
:10945000E82FFF27EE0FFF1FE954F74F808191811E
:10946000873491050CF042E0E22FFF27EE0FFF1F3B
:10947000E954F74F808191818634910574F480918D
:109480008407E82FFF27EE0FFF1FE954F74F808175
:109490009181873491050CF043E0E22FFF27EE0F16
:1094A000FF1FE954F74F808191818A5B9F4F74F4CD
:1094B00080918407E82FFF27EE0FFF1FE954F74F35
:1094C00080819181873491050CF044E0E22FFF27E1
:1094D000EE0FFF1FE954F74F808191818A5B9F4F08
:1094E00074F480918407E82FFF27EE0FFF1FE954E3
:1094F000F74F80819181863491050CF445E0842FEB
:109500000E945A2F80918507E82FFF27EE0FFF1F3B
:10951000E954F74F808191810190F081E02DF7FFB0
:1095200003C0F095E195FF4F7E97CCF480918407BE
:10953000E82FFF27EE0FFF1FE954F74F808191813D
:109540008A5B9F4F64F481E080936F051092F20371
:1095500088EE93E090930903809308034FC00E9424
:1095600063300E94052F80E00E9491098091AA0734
:109570000E947D8D8091700980FF10C0809115013F
:1095800090911601875B934038F48091150190917A
:1095900016018E5E924010F40E94E01D80E00E9451
:1095A000E83A81E08093F20380930603579A1AC049
:1095B00080819181855B9F4FFCF48091A8048F5F2F
:1095C0008093A804893CD0F0209306042093A8043B
:1095D0001092D1031092D00381E00E94E83A81E01A
:1095E0008093F20388E180939D010E94633068E7D5
:1095F00070E00E94043A02C02093A804809186077C
:10960000E82FFF27EE0FFF1FE954F74F808191816C
:109610008B5A9F4F0CF060C12091E707E22FFF2784
:10962000EF77F070EE0FFF1FE551F74F80819181CA
:10963000069714F084E606C0808191818B5F9F4F6E
:109640001CF48CE98093AB0480910604E0918707B9
:10965000882309F0ECC0FF27EE0FFF1FE954F74FF6
:1096600080819181855B9F4F9CF48091F20783FDFF
:109670000BC0E22FFF27EE0FFF1FE954F74F808149
:109680009181855B9F4FDCF08091E7078823B9F0DB
:109690008091F20783FFC8C08091E707E82FFF277A
:1096A000EE0FFF1FE954F74F80819181875F9F4F35
:1096B0000CF4BAC08091AB04843609F0B5C0209197
:1096C000F203222329F08091CF0388608093CF0397
:1096D0008091A9048F5F8093A9048E3F08F4EEC0A7
:1096E0001092A90480915405882309F092C0222386
:1096F00009F48FC08091E204882309F08AC081E0D8
:1097000090E09093D1038093D00381E0809306048E
:109710001092920410929304109294041092950463
:1097200010923104109232041092330410923404D7
:1097300010922D0410922E0410922F0410923004D7
:1097400080919F07E82EFF2400271127809174093C
:10975000909175099C01442737FD4095542FC8010D
:10976000B7010E948191DC01CB0180934104909369
:109770004204A0934304B0934404809184099091DF
:1097800085099C01442737FD4095542FC801B70136
:109790000E948191DC01CB018093390490933A04BB
:1097A000A0933B04B0933C048091610490916204C7
:1097B000A0916304B091640480933D0490933E04AF
:1097C000A0933F04B09340048091590490915A04AF
:1097D000A0915B04B0915C048093350490933604AF
:1097E000A0933704B09338041092290410922A04ED
:1097F00010922B0410922C0410922504109226042F
:10980000109227041092280484E68093F10384E3E5
:1098100050C08CED95E090930903809308032223B8
:1098200009F04CC081E045C01092A90447C0FF2751
:10983000EE0FFF1FE954F74F808191818C34910521
:109840009CF08091F20783FD0BC0E22FFF27EE0F03
:10985000FF1FE954F74F80819181855B9F4FCCF0CA
:109860008091E7078823A9F08091F20783FF24C045
:109870008091E707E82FFF27EE0FFF1FE954F74F0E
:10988000808191818E5C9F4FBCF48091AB048C39B8
:1098900099F48091AA048F5F8093AA048B3F70F0A3
:1098A000109206041092AA041092D1031092D003D1
:1098B00086E280939D0102C01092AA048091CA039F
:1098C0009091CB0313E0883E9107B8F501969093F1
:1098D000CB038093CA0331C01092AB041092CB0328
:1098E0001092CA032AC02E5E324038F180918F094F
:1098F000909190098059914000F5809101049091D8
:109900000204A0910304B09104048C5D9540A04032
:10991000B0409CF480E395E79093CB038093CA0317
:109920008091D0039091D1038A5E934030F089EE0C
:1099300093E09093D1038093D00380913A018150BA
:1099400080933A0180913A018F3F21F08091CF03BB
:1099500084FFA9C30E948D45B0909A078091B404FA
:109960009091B5049C01220F331F280F391FC0901E
:109970008407AC2DBB27AA0FBB1FFD01E954F74F8D
:109980004B2D552780819181849FF001859FF00D9B
:10999000949FF00D11242E0F3F1F37FF02C02D5F43
:1099A0003F4FB9017595679575956795A551B74F67
:1099B00080919B07082F11278D919C91809F7001AA
:1099C000819FF00C909FF00C11246E0D7F1D709301
:1099D000B5046093B4048091B6049091B7049C01DF
:1099E000220F331F280F391FD0908507AD2DBB27BD
:1099F000AA0FBB1FFD01E954F74F80819181849F1D
:109A0000F001859FF00D949FF00D11242E0F3F1F44
:109A100037FF02C02D5F3F4FA901559547955595DA
:109A20004795A551B74F8D919C91809F7001819F63
:109A3000F00C909FF00C11244E0D5F1D5093B70455
:109A40004093B6048091DC03882309F448C0CB011D
:109A500077FD0396DC01B595A795B595A795CA0145
:109A600057FD0396FC01F595E795F595E7958091EF
:109A70009801682F772767FD70956A9F90016B9F0B
:109A8000300D7A9F300D11248091E404482F552722
:109A900047FD50954E9FC0014F9F900D5E9F900DCA
:109AA0001124280F391F37FF02C0295F3F4F93E071
:109AB000359527959A95E1F730931804209317046C
:109AC0006E9F90016F9F300D7E9F300D11244A9F35
:109AD000C0014B9F900D5A9F900D11243FC0809163
:109AE000E507E82FFF27EE5BFE4F86818093980104
:109AF00090819093E404A82FBB27A7FDB095A69F63
:109B00009001A79F300DB69F300D1124E92FFF273C
:109B1000E7FDF095E49FC001E59F900DF49F900D47
:109B20001124280F391F37FF02C0295F3F4F83E000
:109B3000359527958A95E1F73093180420931704FB
:109B4000A49F9001A59F300DB49F300D1124E69F76
:109B5000C001E79F900DF69F900D1124281B390B33
:109B600037FF02C0295F3F4F03E0359527950A95DF
:109B7000E1F7309316042093150480918707E82FAE
:109B8000FF27EE0FFF1FE954F74F808191819095D9
:109B900081959F4F90931404809313048530910511
:109BA00014F0049705C00FEF8C3F900734F404962F
:109BB000909314048093130404C010921404109220
:109BC00013048091D004882309F43EC0282F332742
:109BD000809117049091180497FD079613E09595CE
:109BE00087951A95E1F7289FA001299F500D389F6E
:109BF000500D1124CA0157FD0F96B4E09595879535
:109C0000BA95E1F790931804809317048091150496
:109C10009091160497FD0796A3E095958795AA95D0
:109C2000E1F7289FB001299F700D389F700D112416
:109C3000CB0177FD0F96F4E095958795FA95E1F7BE
:109C40009093160480931504809017049090180444
:109C50008091D3049091D404881A990A90921804A0
:109C60008092170400911504109116048091D1047C
:109C70009091D204081B190B10931604009315043D
:109C800080918607E82FFF27EE0FFF1FE954F74F5B
:109C9000E080F1808FE790E0E80EF91EF092120468
:109CA000E092110480916D019927AA2797FDA09554
:109CB000BA2FBC01CD010E94F590DC01CB0120E060
:109CC00030E040E251E4BC01CD010E946390DC0130
:109CD000CB01BC01CD010E94C790DC01CB01809378
:109CE0007E0980916C018093560980916B019927C0
:109CF000AA2797FDA095BA2FBC01CD010E94F5902F
:109D0000DC01CB0120E030E040E251E4BC01CD01B8
:109D10000E946390DC01CB01BC01CD010E94C79081
:109D2000DC01CB0180932F0980916A018093450962
:109D300080917B0580FF59C080918709813808F4A4
:109D400054C080917405992787FD90952B2D33275A
:109D5000829FD001839FB00D929FB00D11248A0E77
:109D60009B1E909218048092170480917505992784
:109D700087FD9095829FF001839FF00D929FF00DDB
:109D800011240E0F1F1F10931604009315048091C9
:109D90007605282F332727FD309580911304909165
:109DA0001404820F931F90931404809313048091E2
:109DB0007805282F332727FD30958091950799271F
:109DC000289F8001299F100D389F100D112410939A
:109DD0004101009340018091770599278E159F05D9
:109DE00024F49093120480931104809111049091B3
:109DF000120497FF04C01092120410921104809173
:109E0000700982FF02C010925609409117045091C8
:109E10001804CA0157FD03969C0135952795359581
:109E2000279537FF03C0309521953F4F8091D4038C
:109E30009091D50382179307B4F4CA0157FF03C06A
:109E4000909581959F4F97FD03969595879595954C
:109E500087959093D5038093D4038536910544F07C
:109E600084E690E001C001979093D5038093D403DA
:109E70004091150450911604CA0157FD03969C01A8
:109E8000359527953595279537FF03C03095219552
:109E90003F4F8091D2039091D30382179307B4F47C
:109EA000CA0157FF03C0909581959F4F97FD039678
:109EB00095958795959587959093D3038093D20335
:109EC0008536910544F084E690E001C001979093B7
:109ED000D3038093D2038091CF0384FF08C01092F4
:109EE000D5031092D4031092D3031092D203ED2D18
:109EF000FF27EE0FFF1FE954F74F4091BF07242FB4
:109F00003327808191812817390744F48091EF0726
:109F100082FF04C081E08093E80313C0ED2DFF278A
:109F2000EE0FFF1FE954F74F842F99272091C007A8
:109F3000821B9109208131812817390714F410926E
:109F4000E80340918507E42FFF27EE0FFF1FE95438
:109F5000F74F5091BF07852F992722273327281BBA
:109F6000390B808191818217930744F48091EF0728
:109F700083FF04C081E08093E70316C08091E7036C
:109F8000882391F0E42FFF27EE0FFF1FE954F74FCE
:109F90008091C0079927851B910920813181821703
:109FA000930714F41092E703EC2DFF27EE0FFF1F29
:109FB000E954F74F4091BF07242F332780819181C7
:109FC0002817390744F48091EF0780FF04C081E02F
:109FD0008093E50317C08091E503882399F0EC2D69
:109FE000FF27EE0FFF1FE954F74F842F9927209189
:109FF000C007821B9109208131812817390714F489
:10A000001092E50340918407E42FFF27EE0FFF1F16
:10A01000E954F74F5091BF07852F992722273327FF
:10A02000281B390B808191818217930744F480911A
:10A03000EF0781FF04C081E08093E60316C08091A2
:10A04000E603882391F0E42FFF27EE0FFF1FE9546A
:10A05000F74F8091C0079927851B91092081318195
:10A060008217930714F41092E6038091E803882383
:10A0700019F48091E703811181E08093E9038091D5
:10A08000E503882321F48091E603882351F081E0E1
:10A090008093EA031092E9031092E8031092E70319
:10A0A00002C08093EA038091E903882321F4809120
:10A0B000EA03882369F08091BE07992729813A81B4
:10A0C0008217930714F49A83898381E080931D0497
:10A0D0008091CE0399279C012470307082FF2DC09F
:10A0E0008091D3049091D404909581959F4F909343
:10A0F0001804809317048091D1049091D204909514
:10A1000081959F4F909316048093150480917A0156
:10A1100090917B01909312048093110480917009B7
:10A120008B778B6680937009809154098C7B809328
:10A13000540988EC809373011EC08091CF0384FF83
:10A140001AC03093140420931304309318042093FE
:10A15000170430931604209315049AE590937E0912
:10A1600088E78093560990932F09809345091092B0
:10A17000E9031092EA038091480990914909A0915E
:10A180004A09B0914B0920916104309162044091D9
:10A19000630450916404820F931FA41FB51F809322
:10A1A000480990934909A0934A09B0934B098091BB
:10A1B000500990915109A0915209B0915309E09032
:10A1C0005904F0905A0400915B0410915C04EB82F6
:10A1D000FC820D831E838E0D9F1DA01FB11F8093D7
:10A1E000500990935109A0935209B093530980915B
:10A1F0003F0990914009A0914109B0914209E09036
:10A200005D04F0905E0400915F0410916004EF82A1
:10A21000F88609871A878E0D9F1DA01FB11F809396
:10A220003F0990934009A0934109B093420980915E
:10A23000300990913109A0913209B0913309E09031
:10A240005504F09056040091570410915804EB8681
:10A25000FC860D871E878E0D9F1DA01FB11F80934A
:10A26000300990933109A0933209B0933309F090EB
:10A27000EA03FF86FF2029F48091E903882309F48B
:10A2800060C0109251041092520410925304109224
:10A29000540410924D0410924E0410924F041092E8
:10A2A0005004109248091092490910924A091092DC
:10A2B0004B091092500910925109109252091092B4
:10A2C000530910923F0910924009109241091092CF
:10A2D00042091092300910923109109232091092FD
:10A2E00033098091410490914204A0914304B091BC
:10A2F000440480933D0490933E04A0933F04B093A4
:10A3000040048091390490913A04A0913B04B091AB
:10A310003C048093350490933604A0933704B093A3
:10A32000380410921603109215031092EE03109247
:10A33000ED031092F0031092EF030F85002309F054
:10A34000D0C18091E903882309F0CBC18091250712
:10A3500090912607815092402CF480910604882326
:10A3600009F4BFC19090000AA0909F072090740943
:10A3700030907509409084095090850919140CF0AB
:10A38000BBC0BB24CC24DD24CA01B901A6019501C0
:10A390000E94F59179018A018091C9099091CA09B9
:10A3A000281A390AC101AA2797FDA095BA2FE81AE1
:10A3B000F90A0A0B1B0B6B817C818D819E81A601A2
:10A3C00095010E94F59159016A018091CB09909104
:10A3D000CC09481A590AC201AA2797FDA095BA2F9D
:10A3E000A81AB90ACA0ADB0A292C332427FC30949C
:10A3F000432C532CC801B701A20191010E94819105
:10A4000097FF04C061507E4F8F4F9F4F3B014C011F
:10A4100009E095948794779467940A95D1F7C601DB
:10A42000B501A20191010E94819197FF04C0615082
:10A430007E4F8F4F9F4F5B016C0119E0D594C794FD
:10A44000B794A7941A95D1F78091D4039091D5032E
:10A45000813491053CF48091D2039091D3038134EF
:10A460009105D4F0D401C30197FE03C00196A11D4C
:10A47000B11D3C014D019594879477946794D60162
:10A48000C501D7FE03C00196A11DB11D5C016D0180
:10A49000D594C794B794A7948091020A282F3327A4
:10A4A00027FD3095432F532F2615370548055905AD
:10A4B00014F439014A01992787FD9095909581956B
:10A4C0009F4FAA2797FDA095BA2F681679068A068E
:10A4D0009B0614F43C014D012A153B054C055D0516
:10A4E00014F459016A01A816B906CA06DB060CF075
:10A4F000D0C05C016D01CDC0EA2CFF2400271127DC
:10A50000CA01B901A80197010E94F59139014A01D8
:10A51000C101AA2797FDA095BA2F681A790A8A0A5D
:10A520009B0A6B817C818D819E81A80197010E948D
:10A53000F59159016A01C201AA2797FDA095BA2F8A
:10A54000A81AB90ACA0ADB0AD401C30197FE03C0DC
:10A550000F96A11DB11D3C014D01F4E09594879427
:10A5600077946794FA95D1F7D601C501D7FE03C059
:10A570000F96A11DB11D5C016D01E4E0D594C79457
:10A58000B794A794EA95D1F78091D4039091D5031D
:10A59000813491053CF48091D2039091D3038134AE
:10A5A0009105A4F0C401B30123E030E040E050E0A5
:10A5B0000E94F59139014A01C601B50123E030E05E
:10A5C00040E050E00E94F59159016A0180918707AF
:10A5D000E82FFF27EE0FFF1FE954F74F808191818D
:10A5E0000190F081E02DF7FF03C0F095E195FF4F5A
:10A5F0007A97A4F0C401B30123E030E040E050E0DA
:10A600000E94F59139014A01C601B50123E030E00D
:10A6100040E050E00E94F59159016A0189E1809380
:10A62000860121E262167104810491042CF070E22B
:10A63000672E712C812C912C30EE63163FEF730640
:10A640003FEF83063FEF930644F460EE662E6FEF14
:10A65000762E6FEF862E6FEF962E41E2A416B10490
:10A66000C104D1042CF050E2A52EB12CC12CD12C68
:10A6700050EEA5165FEFB5065FEFC5065FEFD50696
:10A6800044F440EEA42E4FEFB42E4FEFC42E4FEF04
:10A69000D42E8091410490914204A0914304B09142
:10A6A000440486199709A809B90980934104909335
:10A6B0004204A0934304B0934404809139049091E0
:10A6C0003A04A0913B04B0913C048A199B09AC095F
:10A6D000BD098093390490933A04A0933B04B0934E
:10A6E0003C0480911503909116038F3F910509F06A
:10A6F00008F4C4C56F85662309F04EC58091E9034F
:10A70000882309F049C580911D04882309F044C5B8
:10A710007091C707788B772309F43EC5809148096B
:10A7200090914909A0914A09B0914B09B7FF04C023
:10A7300081509F4FAF4FBF4FE92EFA2E0B2F11279D
:10A7400007FD1A95E0924809F092490900934A09D9
:10A7500010934B098091500990915109A091520991
:10A76000B0915309B7FF04C081509F4FAF4FBF4F07
:10A77000892F9A2FAB2FBB27A7FDBA95898B9A8B70
:10A78000AB8BBC8B8093500990935109A0935209D5
:10A79000B093530980919F07A82EBB24CC24DD24BD
:10A7A000209151043091520440915304509154042B
:10A7B000C601B5010E94819197FF04C061507F4F8F
:10A7C0008F4F9F4F672E782E892E992487FC9A945D
:10A7D00060925104709252048092530490925404F7
:10A7E00020914D0430914E0440914F0450915004FB
:10A7F000C601B5010E94819197FF04C061507F4F4F
:10A800008F4F9F4F272E382E492E552447FC5A94A0
:10A8100020924D0430924E0440924F0450925004C6
:10A820008091490490914A04A0914B04B0914C044A
:10A83000B7FF04C081509F4FAF4FBF4F892F9A2F52
:10A84000AB2FBB27A7FDBA958093490490934A0488
:10A85000A0934B04B0934C04D801C7018619970903
:10A86000A809B90980939E0490939F04A093A00423
:10A87000B093A1042091C607E22EFF2400271127E0
:10A88000BC01CD01A80197010E94F59159016A010F
:10A890002093AC043093AD044093AE045093AF04C6
:10A8A00089899A89AB89BC8982199309A409B50958
:10A8B0008093A2049093A304A093A404B093A5044E
:10A8C000BC01CD01A80197010E94F5912093B0042D
:10A8D0003093B1044093B2045093B304D601C50140
:10A8E000D7FE04C081509F4FAF4FBF4F892F9A2F83
:10A8F000AB2FBB27A7FDBA959093EE038093ED0392
:10A9000057FF04C021503F4F4F4F5F4FBB2757FDAC
:10A91000BA95A52F942F832F9093F0038093EF0384
:10A920008091D4039091D50381349105DCF480911A
:10A93000D2039091D30381349105A4F480918707C9
:10A94000E82FFF27EE0FFF1FE954F74F8081918119
:10A950000190F081E02DF7FF03C0F095E195FF4FE6
:10A960007A97E4F08091000A8F3FC1F48091ED0363
:10A970009091EE0397FD0196959587959093EE0340
:10A980008093ED038091EF039091F00397FD019682
:10A99000959587959093F0038093EF0380913F09FD
:10A9A00090914009A0914109B0914209B7FF04C0BC
:10A9B00081509F4FAF4FBF4F892F9A2FAB2FBB278F
:10A9C000A7FDBA9580933F0990934009A093410950
:10A9D000B09342098091300990913109A0913209D8
:10A9E000B0913309B7FF04C081509F4FAF4FBF4FA5
:10A9F000892F9A2FAB2FBB27A7FDBA9580933009DB
:10AA000090933109A0933209B09333098091610486
:10AA100090916204A0916304B09164042F81388501
:10AA200049855A85281B390B4A0B5B0B20939604EA
:10AA3000309397044093980450939904809159045B
:10AA400090915A04A0915B04B0915C04EB84FC8467
:10AA50000D851E85E81AF90A0A0B1B0BE0929A0471
:10AA6000F0929B0400939C0410939D0420939E04F9
:10AA700030939F044093A0045093A104E092A20459
:10AA8000F092A3040093A4041093A50480913D04C4
:10AA900090913E04A0913F04B0914004821B930B1F
:10AAA000A40BB50B80933D0490933E04A0933F0408
:10AAB000B09340048091350490913604A0913704FE
:10AAC000B09138048E199F09A00BB10B8093350407
:10AAD00090933604A0933704B09338048889882370
:10AAE000E1F020911B0430911C04213831054CF019
:10AAF00080917204909173040196909373048093F3
:10AB0000720420583F4F4CF480917204909173046A
:10AB10000197909373048093720410921C04109216
:10AB20001B0481E090E09093B9048093B804E09016
:10AB30009E04F0909F040091A0041091A104D801FC
:10AB4000C70117FF07C088279927DC018E199F09C5
:10AB5000A00BB10B81509240A040B04034F084E093
:10AB600090E09093B9048093B8048091BE049091D2
:10AB7000BF04A091C004B091C10420914809309154
:10AB8000490940914A0950914B09821B930BA40B30
:10AB9000B50B815E914BAF4FBF4F8F539C49A04087
:10ABA000B04028F08091010A89310CF4FFC021E007
:10ABB000E21620E1F20620E0020720E012070CF482
:10ABC00073C08091BA04882309F46AC0D801C70110
:10ABD00017FF07C088279927DC018E199F09A00B52
:10ABE000B10B9C01AD01B7FF04C021503E4F4F4F48
:10ABF0005F4FF9E05595479537952795FA95D1F729
:10AC00008091B8049091B904820F931F9093B90476
:10AC10008093B804D801C70117FF03C00796A11D90
:10AC2000B11DE3E0B595A79597958795EA95D1F77E
:10AC30008093AC049093AD04A093AE04B093AF04A2
:10AC400089589341A040B04064F088E893E1A0E0C7
:10AC5000B0E08093AC049093AD04A093AE04B093A5
:10AC6000AF042091AC043091AD044091AE045091FA
:10AC7000AF0457FF04C021503F4F4F4F5F4F232F6A
:10AC8000342F452F552747FD5A958091ED0390911C
:10AC9000EE03820F931F9093EE038093ED0306C0A3
:10ACA00081E08093BA0402C01092BA0440E0E41636
:10ACB00040EFF4064FEF04074FEF14070CF073C09A
:10ACC0008091BB04882309F46AC0D801C70117FF2B
:10ACD00007C088279927DC018E199F09A00BB10BAB
:10ACE0009C01AD01B7FF04C021503E4F4F4F5F4F55
:10ACF00069E055954795379527956A95D1F78091E5
:10AD0000B8049091B904820F931F9093B904809373
:10AD1000B804D801C70117FF03C00796A11DB11DD4
:10AD200023E0B595A795979587952A95D1F78093B8
:10AD3000AC049093AD04A093AE04B093AF048857D5
:10AD40009C4EAF4FBF4F64F488E79CEEAFEFBFEF70
:10AD50008093AC049093AD04A093AE04B093AF0481
:10AD60002091AC043091AD044091AE045091AF04F9
:10AD700057FF04C021503F4F4F4F5F4F232F342FB9
:10AD8000452F552747FD5A958091ED039091EE038D
:10AD9000820F931F9093EE038093ED0311C081E027
:10ADA0008093BB040DC01092BB040AC01092B9047A
:10ADB0001092B80484E690E090938501809384011A
:10ADC0006889262F33278091B8049091B9042817F9
:10ADD000390724F43093B9042093B8041091010A80
:10ADE000112379F0212F332727FD30958091B80466
:10ADF0009091B9042817390724F43093B9042093AB
:10AE0000B80440919E0450919F046091A0047091F9
:10AE1000A104413851056105710574F080917604F3
:10AE2000909177042091B8043091B904820F931F58
:10AE3000909377048093760440585F4F6F4F7F4F15
:10AE400074F480917604909177042091B804309145
:10AE5000B904821B930B909377048093760481E06E
:10AE600090E09093B9048093B804C090A204D0906D
:10AE7000A304E090A404F090A504D701C601F7FE56
:10AE800007C088279927DC018C199D09AE09BF09E5
:10AE900081509240A040B04034F084E090E0909324
:10AEA000B9048093B8048091C2049091C304A09126
:10AEB000C404B091C50420915009309151094091CA
:10AEC000520950915309821B930BA40BB50B815E61
:10AED000914BAF4FBF4F8F539C49A040B04018F0EB
:10AEE00019310CF4FFC001E0C01600E1D00600E00B
:10AEF000E00600E0F0060CF473C08091BC048823E7
:10AF000009F46AC0D701C601F7FE07C08827992750
:10AF1000DC018C199D09AE09BF099C01AD01B7FF89
:10AF200004C021503E4F4F4F5F4F09E05595479564
:10AF3000379527950A95D1F78091B8049091B90477
:10AF4000820F931F9093B9048093B804D701C60170
:10AF5000F7FE03C00796A11DB11D13E0B595A79597
:10AF6000979587951A95D1F78093B0049093B10483
:10AF7000A093B204B093B30489589341A040B04069
:10AF800064F088E893E1A0E0B0E08093B00490938F
:10AF9000B104A093B204B093B3042091B0043091F3
:10AFA000B1044091B2045091B30457FF04C0215042
:10AFB0003F4F4F4F5F4F232F342F452F552747FDCE
:10AFC0005A958091EF039091F003820F931F909315
:10AFD000F0038093EF0306C081E08093BC0402C0BD
:10AFE0001092BC0420E0C21620EFD2062FEFE2063A
:10AFF0002FEFF2060CF073C08091BD04882309F492
:10B000006AC0D701C601F7FE07C088279927DC016F
:10B010008C199D09AE09BF099C01AD01B7FF04C0A1
:10B0200021503E4F4F4F5F4FE9E05595479537957B
:10B030002795EA95D1F78091B8049091B904820FD1
:10B04000931F9093B9048093B804D701C601F7FE0B
:10B0500003C00796A11DB11D73E0B595A7959795FF
:10B0600087957A95D1F78093B0049093B104A0931B
:10B07000B204B093B30488579C4EAF4FBF4F64F4F3
:10B0800088E79CEEAFEFBFEF8093B0049093B104DC
:10B09000A093B204B093B3042091B0043091B104F2
:10B0A0004091B2045091B30457FF04C021503F4F68
:10B0B0004F4F5F4F232F342F452F552747FD5A956C
:10B0C0008091EF039091F003820F931F9093F00310
:10B0D0008093EF0311C081E08093BD040DC01092F6
:10B0E000BD040AC01092B9041092B80484E690E03E
:10B0F00090938501809384014889242F3327809180
:10B10000B8049091B9042817390724F43093B9048E
:10B110002093B8048091010A882379F0282F3327DF
:10B1200027FD30958091B8049091B904281739070C
:10B1300024F43093B9042093B8044091A2045091B0
:10B14000A3046091A4047091A504413851056105E0
:10B15000710574F080917404909175042091B80485
:10B160003091B904820F931F9093750480937404F7
:10B1700040585F4F6F4F7F4FCCF480917404909193
:10B1800075042091B8043091B904821B930B9093FD
:10B190007504809374040AC01092F0031092EF03B8
:10B1A0001092EE031092ED0310921D048091560947
:10B1B000882341F41092F0031092EF031092EE03F3
:10B1C0001092ED038091480990914909A0914A0994
:10B1D000B0914B098093BE049093BF04A093C00428
:10B1E000B093C1048091500990915109A0915209E6
:10B1F000B09153098093C2049093C304A093C404F4
:10B20000B093C5041092510410925204109253044A
:10B210001092540410924D0410924E0410924F0458
:10B22000109250041092490410924A0410924B0458
:10B2300010924C04109248091092490910924A0940
:10B2400010924B0910925009109251091092520914
:10B250001092530910923F0910924009109241092F
:10B26000109242091092300910923109109232095D
:10B27000109233091092160310921503E0901304F4
:10B28000F0901404C701F7FE04C0882799278E198F
:10B290009F0904973CF08091700984FD03C082E30C
:10B2A0008093F10310919C07A12EBB24CC24DD24B4
:10B2B000B701882777FD8095982F9701F7FE04C086
:10B2C000222733272E193F09442737FD4095542F55
:10B2D0000E9481919B01AC01C601B5010E94819140
:10B2E00097FF04C061507E4F8F4F9F4F59E0959557
:10B2F0008795779567955A95D1F79B01812F992767
:10B300008E9DD0018F9DB00D9E9DB00D1124CD015D
:10B31000B7FD03969595879595958795280F391FC5
:10B320008091F3039091F403280F391F442737FDD0
:10B330004095542F209392043093930440939404A7
:10B34000509395048091310490913204A09133047C
:10B35000B0913404821B930BA40BB50B8093310482
:10B3600090933204A0933304B09334048155934CEA
:10B37000A040B04064F080E593ECA0E0B0E08093A2
:10B38000310490933204A0933304B0933404809139
:10B39000310490913204A0913304B0913404805B65
:10B3A0009C43AF4FBF4F64F480EB9CE3AFEFBFEF24
:10B3B0008093310490933204A0933304B093340407
:10B3C000009188011091890117FDFCC080917009DE
:10B3D00083FFF8C080918701815080938701882383
:10B3E00009F0F4C08DE08093870180916104909111
:10B3F0006204A0916304B0916404B7FF04C081505B
:10B400009E4FAF4FBF4F39E0B595A795979587955C
:10B410003A95D1F77C0197FF04C0F094E194F108CC
:10B42000F3948091590490915A04A0915B04B091D7
:10B430005C04B7FF04C081509E4FAF4FBF4F29E05F
:10B44000B595A795979587952A95D1F79C0197FF74
:10B4500003C0309521953F4FE216F3060CF47901B5
:10B46000B701F7FE02C0695F7F4F2B01A3E055943F
:10B470004794AA95E1F722E030E0420E531E609017
:10B4800080097090810980908209909083092091B1
:10B490003C0130913D0140913E0150913F01C4017A
:10B4A000B3010E94F59159016A0130932E0920934E
:10B4B0002D09021B130BC801845E9D4F68E671E0E5
:10B4C0000E94C0919C01245B304080918401909146
:10B4D0008501009731F00197909385018093840155
:10B4E0001BC049E1E416F104BCF480911B04909167
:10B4F0001C04820F931F90931C0480931B04809163
:10B50000F103882349F081508093F103882321F4CB
:10B51000B0922004A0921F04809184019091850133
:10B52000892BF9F4809186019927289FB001299FE2
:10B53000700D389F700D1124CB01B2010E94C09193
:10B54000CB01AA2797FDA095BA2F680E791E8A1EF7
:10B550009B1E60928009709281098092820990926C
:10B5600083098091F103882369F580911F049091EC
:10B57000200420912D0930912E09821B930B845EAB
:10B580009D4F68E671E00E94C0919C01245B3040B1
:10B590008091700186959927289FD001299FB00D31
:10B5A000389FB00D11249D01B7FF02C0215F3F4FAE
:10B5B000F4E035952795FA95E1F73093F40320935D
:10B5C000F30304C01092F4031092F30380911D045E
:10B5D000882381F0109225041092260410922704EB
:10B5E000109228041092290410922A0410922B041D
:10B5F00010922C04F090EA03FF20F1F48091560998
:10B60000282F3327442755278091610490916204A5
:10B61000A0916304B0916404BC01CD010E948191AA
:10B62000DC01CB01BC01CD0128EF3AE240E050E063
:10B630000E94F591390102C066247724E090E90365
:10B64000EE20F1F480915609282F332744275527FF
:10B650008091590490915A04A0915B04B0915C04CC
:10B66000BC01CD010E948191DC01CB01BC01CD0167
:10B6700028EF3AE240E050E00E94F591290102C033
:10B680004424552480912A0990912B09893C9105E5
:10B690001CF088EC90E005C088539F4F34F488E399
:10B6A0009FEF90932B0980932A09809136099091FE
:10B6B0003709893C91051CF088EC90E005C088535F
:10B6C0009F4F34F488E39FEF9093370980933609B6
:10B6D0008091380990913909AA2797FDA095BA2F32
:10B6E00020917E09A22EBB24CC24DD24BC01CD01F7
:10B6F000A60195010E9481919B01AC0180912A09CC
:10B7000090912B09AA2797FDA095BA2FE7E0880F03
:10B71000991FAA1FBB1FEA95D1F7280F391F4A1F8F
:10B720005B1F57FF04C0215C3F4F4F4F5F4F76E0D8
:10B7300055954795379527957A95D1F78301020F4F
:10B74000131F1093390900933809809128099091AB
:10B750002909AA2797FDA095BA2FBC01CD01A60102
:10B7600095010E9481919B01AC01809136099091D5
:10B770003709AA2797FDA095BA2F67E0880F991F70
:10B78000AA1FBB1F6A95D1F7280F391F4A1F5B1FDD
:10B7900057FF04C0215C3F4F4F4F5F4FF6E0559578
:10B7A000479537952795FA95D1F74201820E931E5A
:10B7B00090922909809228098091790990917A09BB
:10B7C000880F991FAA2797FDA095BA2F20912F09BE
:10B7D000332744275527BC01CD010E9481915B018D
:10B7E0006C0197FF08C02FE330E040E050E0A20E6C
:10B7F000B31EC41ED51EE6E0D594C794B794A79493
:10B80000EA95D1F780914509282F332744275527FA
:10B810008091450490914604A0914704B09148045A
:10B82000BC01CD010E948191DC01CB01BC01CD01A5
:10B8300020EF35E540E050E00E94F591B501620F40
:10B84000731F70937A09609379090150104134F0A5
:10B8500080E090E19093390980933809809138090C
:10B86000909139098050904F34F480E090EF90939C
:10B8700039098093380951E0851650E1950634F076
:10B8800080E090E19093290980932809809128090C
:10B89000909129098050904F34F480E090EF90937C
:10B8A0002909809328096150704134F080E090E1CB
:10B8B00090937A09809379098091790990917A0916
:10B8C0008050904F34F480E090EF90937A09809309
:10B8D000790980910001482F552780911F0190918F
:10B8E00020014817590794F420911F01309120013D
:10B8F00009811A81049FC001059F900D149F900D2E
:10B900001124B9010E94AC917A83698329813A811B
:10B91000220F331F220F331F3A832983409170096E
:10B9200040FD02C00C949C64EE2011F00C949C64C9
:10B93000FF2011F00C949C6400E010E0480180911D
:10B94000EB039091EC0390930B0780930A072091EF
:10B950007804309179042115310509F03FC08091B8
:10B960001501909116018959934058F087B5803F91
:10B9700020F480911903815011C081E08093CF049D
:10B980004EC080911501909116018436910508F5FD
:10B9900087B58031D0F0809119038F5F80931903B0
:10B9A0009FE089029001112480912F07821B87BD9F
:10B9B0008CE291E090930903809308038EE591E077
:10B9C00090937904809378042AC081E08093CE0418
:10B9D00026C0F092CE04F092CF0421C080910104E1
:10B9E00090910204A0910304B091040464E0880FD4
:10B9F000991FAA1FBB1F6A95D1F780931A039093D2
:10BA00001B03A0931C03B0931D0310931803009312
:10BA1000170321503040309379042093780420910B
:10BA2000730141FF3CC0223348F580918A01815067
:10BA300080938A018F3F09F052C080919D01882335
:10BA400039F480911E04882319F088E280939D01C7
:10BA500010921E048091010490910204A0910304AD
:10BA6000B09104048093FD039093FE03A093FF0321
:10BA7000B093000481E080938A0131C0273478F1CB
:10BA800080919D01882339F480911E04882319F444
:10BA900087E280939D0188EC80938A011DC080918C
:10BAA000400190914101820F911D2091950733270C
:10BAB000829FA001839F500D929F500D1124CA01B7
:10BAC000AA2797FDA095BA2F8093FD039093FE03BC
:10BAD000A093FF03B093000481E080931E04809143
:10BAE000610490916204A0916304B0916404E090B9
:10BAF0003C01F0903D0100913E0110913F01BC01DD
:10BB0000CD01A80197010E94F59159016A01809128
:10BB1000590490915A04A0915B04B0915C04BC015B
:10BB2000CD01A80197010E94F591B901C5010E94BC
:10BB30002F845C01CC971CF05CE3A52EB12CC501D1
:10BB40000E942D725C0180E280933B011092FC0305
:10BB50001092FB0380911E04882309F45FC5809135
:10BB6000CF0399279C012071307084FD57C58091C7
:10BB7000CE0382608093CE0370915409872F99275A
:10BB800041E0C42ED12CC822D92280FD04C080916E
:10BB9000700981FD10C0C980DA803093C7042093FA
:10BBA000C6043093FC032093FB038091CF03806C89
:10BBB0008093CF03ABC28091CF0381FF7AC2009103
:10BBC0007A0110917B01C8010F96209011043090EA
:10BBD0001204821593050CF058C08091CE0488237E
:10BBE00009F053C08091CF0387FF15C08091CF0328
:10BBF0008F778093CF038091010490910204A091EC
:10BC00000304B09104048093FD039093FE03A0937A
:10BC1000FF03B09300048091CF0380648093CF032F
:10BC2000E0903409EE20F1F08091FD039091FE0345
:10BC3000A091FF03B0910004BC01CD0124E630E0E7
:10BC400040E050E00E94F5918E2D9927AA27BB274E
:10BC500082179307A407B5072CF4D092FC03C09277
:10BC6000FB0310C0C101801B910B0F9797FF03C00E
:10BC7000909581959F4F9093FC038093FB038BE2FB
:10BC800080933B011092F50316C1C8010F97281647
:10BC90003906C4F52091CF042223A1F58091CF036A
:10BCA00086FF15C08091CF038F7B8093CF03809157
:10BCB000010490910204A0910304B09104048093C4
:10BCC000FD039093FE03A093FF03B09300048091C3
:10BCD000CF0380688093CF03C101801B910B0F9627
:10BCE00097FF03C0909581959F4F909581959F4FA9
:10BCF0009093FC038093FB038DE280933B012093A0
:10BD0000F503D9C08DE380933B016091F603662370
:10BD100071F12091F7033091F8034091F9035091AC
:10BD2000FA038091FD039091FE03A091FF03B0916F
:10BD3000000482179307A407B507CCF48091CF03C2
:10BD400080648093CF03862F99279093FC03809380
:10BD5000FB038AE08093F5038EE580933B0180919D
:10BD6000CF0387FFA8C08091CF038F7733C06623AE
:10BD700009F443C02091F7033091F8034091F9038F
:10BD80005091FA038091FD039091FE03A091FF036F
:10BD9000B0910004281739074A075B0774F58091B2
:10BDA000CF0380688093CF03862F99279095819544
:10BDB0009F4F9093FC038093FB0386EF8093F503E2
:10BDC00086E780933B018091CF0386FF74C080910A
:10BDD000CF038F7B8093CF03809101049091020465
:10BDE000A0910304B09104048093FD039093FE039B
:10BDF000A093FF03B09300045EC08091CF03807CCA
:10BE000009F459C08091F503882379F5E090010485
:10BE1000F09002040091030410910404D801C701BA
:10BE200080589040A040B0402091FD033091FE0327
:10BE30004091FF035091000482179307A407B507B0
:10BE40005CF4D801C70180589F4FAF4FBF4F2817F0
:10BE500039074A075B075CF08093FD039093FE036C
:10BE6000A093FF03B093000402C01092F5038091E9
:10BE7000CF038F738093CF031092C7041092C60430
:10BE800071FF06C084EF91E090930903809308034B
:10BE900080910504882379F4809101049091020433
:10BEA000A0910304B0910404C397A105B1051CF04F
:10BEB00081E0809305046091C6047091C70480916D
:10BEC000FB039091FC03680F791F7093C704609384
:10BED000C604CB0177FF04C088279927861B970BE0
:10BEE000855F91400CF4CEC04091F503442389F165
:10BEF0008091F7039091F8032091FD033091FE03A8
:10BF0000821B930B0996439748F48091F703909115
:10BF1000F803A091F903B091FA0312C0242F33273C
:10BF200027FD3095432F532F8091FD039091FE0301
:10BF3000A091FF03B0910004820F931FA41FB51FAF
:10BF40008093FD039093FE03A093FF03B09300043E
:10BF500024C0809195072091FD033091FE0340910C
:10BF6000FF03509100041616170644F463E00E9484
:10BF7000A091280F311D411D511D07C063E00E9493
:10BF8000A091281B3109410951092093FD033093E9
:10BF9000FE034093FF03509300041092C7041092D5
:10BFA000C604E0900104F090020400910304109193
:10BFB0000404D801C70180509440A040B0402091B3
:10BFC000FD033091FE034091FF035091000482175E
:10BFD0009307A407B5075CF4D801C70180509C4FB4
:10BFE000AF4FBF4F281739074A075B0744F08093CC
:10BFF000FD039093FE03A093FF03B0930004809190
:10C00000540981FF06C084E690E090930903809371
:10C010000803809199078823A9F58091F603882366
:10C0200089F54091EB035091EC0357FF02C04D5F3F
:10C030005F4F559547955595479580911F01909174
:10C040002001209100013327489FF001499FF00D06
:10C05000589FF00D1124CF01B9010E94C091709337
:10C060007B0160937A01663471051CF486E490E0EC
:10C0700005C06739710534F086E990E090937B0143
:10C0800080937A018091780490917904892BD1F181
:10C090008091010490910204A0910304B0910404E2
:10C0A0008093FD039093FE03A093FF03B0930004DD
:10C0B00029C08091010490910204A0910304B091E1
:10C0C000040480599140A040B0408093FD039093B8
:10C0D000FE03A093FF03B093000480919907882387
:10C0E00011F0992702C088E790E090937B0180933C
:10C0F0007A01E980FA80F092EC03E092EB038EE2A1
:10C1000080933B01C090EB03D090EC03E0900104DE
:10C11000F090020400910304109104042091FD03A7
:10C120003091FE034091FF03509100042E153F050E
:10C130004007510724F08091540980FDBBC28091D3
:10C14000780490917904892B39F0C090EB03D0905A
:10C15000EC0300E010E0D7C0D801C701821B930BAD
:10C16000A40BB50B8093960490939704A093980426
:10C17000B0939904823000E890070FEFA0070FEF0B
:10C18000B0072CF481E090E8AFEFBFEF09C08F5FFC
:10C190009F47A040B04064F08FEF9FE7A0E0B0E081
:10C1A0008093960490939704A0939804B093990475
:10C1B000009196041091970480917201282F3327E3
:10C1C000442755278091960490919704A091980454
:10C1D000B0919904BC01CD010E94819197FF04C0E8
:10C1E000615E7F4F8F4F9F4F25E09595879577959F
:10C1F00067952A95D1F7609396047093970480937E
:10C2000098049093990465302EEF72072FEF820700
:10C210002FEF92072CF484E09EEFAFEFBFEF09C041
:10C22000605074408040904064F080E094E0A0E072
:10C23000B0E08093960490939704A0939804B093F1
:10C240009904809096049090970420911703309160
:10C25000180337FF02C0295F3F4F83E035952795CC
:10C260008A95E1F74FEF223834071CF421E83FEFBD
:10C2700005C02038310514F020E830E0C901AA27B4
:10C2800097FDA095BA2F2091740133274427552795
:10C29000BC01CD010E94819197FF04C06D5F7F4F6B
:10C2A0008F4F9F4FB2E09595879577956795BA9593
:10C2B000D1F79B015FEF613075071CF420E03FEF81
:10C2C00006C06F3F710519F014F020E031E0809155
:10C2D000CF03807C49F0C90137FD03969C01359559
:10C2E0002795359527950DC08091540980FF09C089
:10C2F000C90137FD07969C01F3E035952795FA951E
:10C30000E1F7820E931E20917101222309F454C09B
:10C31000609121047091220480912304909124045F
:10C3200097FF04C061587F4F8F4F9F4FE7E095956F
:10C33000879577956795EA95D1F733274427552751
:10C340000E94819197FF04C0615E7F4F8F4F9F4F86
:10C3500055E095958795779567955A95D1F76093B0
:10C36000960470939704809398049093990461388D
:10C37000AFEF7A07AFEF8A07AFEF9A072CF480E8A8
:10C380009FEFAFEFBFEF0AC06F3F710581059105C9
:10C3900069F064F080E091E0A0E0B0E08093960462
:10C3A00090939704A0939804B09399048091960475
:10C3B00090919704880E991E80916F01282F332742
:10C3C0008091040A992787FD9095289FF001299F65
:10C3D000F00D389FF00D11249F01F7FF02C0215886
:10C3E0003F4F220F232F221F330BFFEF21383F0730
:10C3F0001CF420E83FEF06C02F3F310519F014F080
:10C4000020E031E0820E931EC401AA2797FDA0957B
:10C41000BA2FE090EB03F090EC039701442737FD2F
:10C420004095542FBC01CD010E94819197FF04C01B
:10C4300061507E4F8F4F9F4F29E095958795779557
:10C4400067952A95D1F7C61AD70A8091FB03909178
:10C45000FC03892B09F060C01E141F040CF05CC0A3
:10C46000980117FF03C0309521953F4F2D333105BB
:10C4700040F48091190490911A048C159D0574F56F
:10C4800026C02C53304085E0369527958A95E1F7F4
:10C490002031310510F02FE030E040911904509127
:10C4A0001A0410161106E4F480E190E0821B930B4D
:10C4B000489F9001499F300D589F300D1124B4E0E2
:10C4C00036952795BA95E1F72C153D0520F5809115
:10C4D000780190917901C816D906F4F06C011CC05E
:10C4E000205F3F4F8091780190917901829F800178
:10C4F000839F100D929F100D11249801A4E0369592
:10C500002795AA95E1F74C155D0514F06A0104C062
:10C51000C216D30608F06901C601AA2797FDA095A7
:10C52000BA2FFDE0880F991FAA1FBB1FFA95D1F7FC
:10C530009501442737FD4095542FBC01CD010E9441
:10C54000F59120939A0430939B0440939C0450935C
:10C550009D04C0909A04D0909B048091C80490914F
:10C56000C9049C01220F331F280F391F2C0D3D1DBC
:10C5700037FF02C02D5F3F4FA9015595479555954F
:10C5800047955093C9044093C80480919107282F80
:10C590003327220F331F220F331F241735076CF464
:10C5A00080917809282F3327220F331F220F331F42
:10C5B000205530404217530724F03093C90420938C
:10C5C000C8048091540980FF14C08091C8049091E0
:10C5D000C90429813A818217930724F03093C90452
:10C5E0002093C8044091C8045091C9045A834983D8
:10C5F00061C029813A812E193F0937FF02C02D5FA2
:10C600003F4F35952795359527956091C8047091D2
:10C61000C904620F731F7A8369834CC080919907A4
:10C62000882301F56091EB037091EC0377FF02C062
:10C630006D5F7F4F759567957595679540911F0163
:10C640005091200180910001282F3327649FC00161
:10C65000659F900D749F900D1124B9010E94C091A7
:10C66000CB0101C0992790937B0180937A0180913F
:10C670007A0190917B01873491051CF486E490E067
:10C6800005C08639910534F086E990E090937B01EE
:10C6900080937A0189819A819093C9048093C80418
:10C6A0008091CF03806C8093CF038091CE038D7FE8
:10C6B0008093CE038091CF0399279C012270307024
:10C6C00081FF2BC18091CA049091CB04A091CC042E
:10C6D000B091CD040097A105B10521F0809105042A
:10C6E0008130B1F4E981FA81CF01AA2797FDA095A5
:10C6F000BA2F1EE0880F991FAA1FBB1F1A95D1F7EA
:10C700008093CA049093CB04A093CC04B093CD043F
:10C7100080910504813019F482E080930504E9805A
:10C72000FA80C701AA2797FDA095BA2F9501442743
:10C7300037FD4095542FBC01CD010E948191DC0151
:10C74000CB0180939A0490939B04A0939C04B09394
:10C750009D04B7FF04C08150904EAF4FBF4F7C0186
:10C760008D01ADE015950795F794E794AA95D1F75B
:10C77000E0929A04F0929B0400939C0410939D0411
:10C780006091D0037091D1032FE0603A720750F5A9
:10C790008091CA049091CB04A091CC04B091CD04B7
:10C7A0009C01AD01FAE05695479537952795FA9586
:10C7B000D1F7821B930BA40BB50BA8019701E4E002
:10C7C000220F331F441F551FEA95D1F7820F931F85
:10C7D000A41FB51F8093CA049093CB04A093CC04EC
:10C7E000B093CD0460547F4118F58091CA049091B4
:10C7F000CB04A091CC04B091CD049C01AD016CE0C0
:10C8000056954795379527956A95D1F7821B930BD7
:10C81000A40BB50BA8019701F2E0220F331F441FB0
:10C82000551FFA95D1F7820F931FA41FB51F38C06B
:10C83000809117039091180380911703909118032A
:10C8400097FF03C0909581959F4F8436910584F59D
:10C8500080910104909102042091FD033091FE0328
:10C86000821B930B81509F4F8F5F914008F5809101
:10C87000CA049091CB04A091CC04B091CD049C014A
:10C88000AD01EEE05695479537952795EA95D1F796
:10C89000821B930BA40BB50B8E0D9F1DA01FB11F08
:10C8A0008093CA049093CB04A093CC04B093CD049E
:10C8B0008091CA049091CB04A091CC04B091CD0496
:10C8C0007EE0B695A795979587957A95D1F7909341
:10C8D000EC038093EB0340919707442399F055278D
:10C8E0009C01BA010E94C091C901861B970B9093CD
:10C8F0001A0480931904260F371F3093790120936F
:10C9000078011FC010921A04109219048FEF93E05F
:10C91000909379018093780114C0109205041092CD
:10C92000CA041092CB041092CC041092CD04309320
:10C93000EC032093EB0305C08091CF03806C8093C0
:10C94000CF038091DE0481FF37C089819A8197FDF2
:10C95000039695958795959587952091CC03309171
:10C96000CD032817390760F48091EB039091EC0315
:10C97000892B31F0220F331F220F331F3A83298373
:10C980008091010490910204A0910304B0910404E9
:10C990008093FD039093FE03A093FF03B0930004E4
:10C9A00088E99AE3909309038093080380E09EE06E
:10C9B00090930A018093090120913D09822F9927C4
:10C9C000880F991F880F991F889669817A81861729
:10C9D000970714F09A838983709178097D8B872F4C
:10C9E0009927880F991F880F991F80559040A9811A
:10C9F000BA818A179B0714F49A83898380914E0326
:10CA0000882341F48091160A8F3F21F48091E2043B
:10CA10008823E9F08091D0039091D1030297C097C9
:10CA2000B0F4E981FA811E161F068CF481E090E0D3
:10CA30009093D1038093D003E22EFF24EE0CFF1CD1
:10CA4000EE0CFF1C8701085D1F4F1A8309832981A3
:10CA50003A813093EF062093EE06809192049091F4
:10CA60009304A0919404B091950412E0880F991F4B
:10CA7000AA1FBB1F1A95D1F70091790910917A0965
:10CA8000081B190B213A31058CF0C90137FD0196BD
:10CA900095958795801791070CF48C019095819559
:10CAA0009F4F081719076CF48C010BC00135110555
:10CAB00014F000E510E03FEF003B130714F400EB27
:10CAC0001FEF4D89242F3327220F331F220F331FCF
:10CAD000C90169817A81861B970B801791070CF435
:10CAE0008C0189819A81821B930B081719070CF41A
:10CAF0008C018091380990913909609117047091E7
:10CB00001804861B970B9093470980934609D09091
:10CB100056092091290430912A0440912B04509108
:10CB20002C04DD2041F0661A770AC301AA2797FD7D
:10CB3000A095BA2F04C0AA2797FDA095BA2F280F59
:10CB4000391F4A1F5B1F2093290430932A04409306
:10CB50002B0450932C048091290490912A04A091D5
:10CB60002B04B0912C0481509A4FA040B04064F047
:10CB700080E09AEFA0E0B0E08093290490932A042B
:10CB8000A0932B04B0932C048091290490912A0443
:10CB9000A0912B04B0912C0480509640AF4FBF4F12
:10CBA00064F480E096E0AFEFBFEF809329049093A8
:10CBB0002A04A0932B04B0932C04C090A6072091C4
:10CBC00046093091470978E0E72EEC1498F08C2D57
:10CBD0009927829FA001839F500D929F500D112491
:10CBE000CA0157FD07967C0163E0F594E7946A95C6
:10CBF000E1F712C08C2D86959927829FB001839F03
:10CC0000700D929F700D1124CB0177FD03967C016E
:10CC1000F594E794F594E794A0907501B0907601AF
:10CC20009501442737FD4095542F80912904909118
:10CC30002A04A0912B04B0912C04BC01CD010E94C8
:10CC4000F591E20EF31E90906101692D77278827F8
:10CC50009927980117FF04C022273327201B310B87
:10CC600037FF02C02F5F3F4F35952795A981BA81C5
:10CC70002A0F3B1F442737FD4095542F0E94819176
:10CC800097FF04C0615C7F4F8F4F9F4F26E09595C3
:10CC90008795779567952A95D1F79B016E157F0546
:10CCA0000CF47B01309521953F4FE216F3060CF40E
:10CCB000790180912809909129096091150470915A
:10CCC0001604861B970B90932709809326092091C1
:10CCD0002504309126044091270450912804DD203A
:10CCE00041F0461A570AC201AA2797FDA095BA2F0C
:10CCF00004C0AA2797FDA095BA2F280F391F4A1FF5
:10CD00005B1F2093250430932604409327045093FF
:10CD100028048091250490912604A0912704B091C5
:10CD2000280481509A4FA040B04064F080E09AEF10
:10CD3000A0E0B0E08093250490932604A0932704FC
:10CD4000B09328048091250490912604A091270493
:10CD5000B091280480509640AF4FBF4F64F480E0FC
:10CD600096E0AFEFBFEF8093250490932604A09345
:10CD70002704B0932804209126093091270948E020
:10CD80004C1598F08C2D9927829FB001839F700DD0
:10CD9000929F700D1124CB0177FD07966C01B3E0D3
:10CDA000D594C794BA95E1F712C0C6948C2D9927F3
:10CDB000829FD001839FB00D929FB00D1124CD01B1
:10CDC000B7FD03966C01D594C794D594C79495018B
:10CDD000442737FD4095542F8091250490912604D7
:10CDE000A0912704B0912804BC01CD010E94F591C7
:10CDF000C20ED31E692D772788279927980117FF20
:10CE000004C022273327201B310B37FF02C02F5FBE
:10CE10003F4F35952795E981FA812E0F3F1F442713
:10CE200037FD4095542F0E94819197FF04C0615CAB
:10CE30007F4F8F4F9F4FE6E0959587957795679544
:10CE4000EA95D1F79B016C157D050CF46B013095CB
:10CE500021953F4FC216D3060CF4690180913D091C
:10CE6000282E33245090E80766E5862E68E0962E3B
:10CE70005DE0A52E58E0B52E4BE0442E37E5632E3D
:10CE800039E0732ED5012C9112160CF029C12034F3
:10CE900029F4E981FA81FF8BEE8B1FC049815A8109
:10CEA000CA01AA2797FDA095BA2F332727FD3095F1
:10CEB000432F532FBC01CD010E94819197FF04C0E5
:10CEC000615C7F4F8F4F9F4F26E0959587957795B3
:10CED00067952A95D1F77F8B6E8BF50121812034E0
:10CEE00039F42E893F892E0D3F1D3F8B2E8B2AC092
:10CEF000203C39F44E895F894E195F095F8B4E8B58
:10CF000021C0C701AA2797FDA095BA2F332727FD77
:10CF10003095432F532FBC01CD010E94819197FF83
:10CF200004C0615C7F4F8F4F9F4FB6E0959587950A
:10CF300077956795BA95D1F7AE89BF89A60FB71FC8
:10CF4000BF8BAE8BF5012281203439F42E893F89C5
:10CF50002C0D3D1D3F8B2E8B2AC0203C39F44E8971
:10CF60005F894C195D095F8B4E8B21C0C601AA27D2
:10CF700097FDA095BA2F332727FD3095432F532FC8
:10CF8000BC01CD010E94819197FF04C0615C7F4F7D
:10CF90008F4F9F4FA6E09595879577956795AA95B2
:10CFA000D1F7AE89BF89A60FB71FBF8BAE8BF50136
:10CFB0002381203439F42E893F89200F311F3F8B84
:10CFC0002E8B2AC0203C39F44E895F89401B510BBF
:10CFD0005F8B4E8B21C0C801AA2797FDA095BA2F61
:10CFE000332727FD3095432F532FBC01CD010E94DD
:10CFF000819197FF04C0615C7F4F8F4F9F4FF6E098
:10D000009595879577956795FA95D1F7AE89BF89FC
:10D01000A60FB71FBF8BAE8BF301808191812E8944
:10D020003F898217930764F4B901680F791F77FF6E
:10D0300002C06F5F7F4F759567957F8B6E8B1DC0AC
:10D04000552049F44E895F89440F551F481B590BE1
:10D050005F8B4E8B12C051E0551578F4252D332788
:10D060006E897F89861B970BB9010E94C091AE899A
:10D07000BF89A60FB71FBF8BAE8BC101880F991F49
:10D08000880F991FEE89FF898E179F0764F4FD8929
:10D090008F2F9927880F991F880F991F2E893F89F5
:10D0A0002817390714F09F8B8E8B8E899F8997FDE7
:10D0B00003969595879595958795F4018183880FBB
:10D0C000991F880F991F2E893F89281B390BC90189
:10D0D000880F8283EE89FF89D301ED93FC9303C00F
:10D0E000F401118212824A9422E030E0620E731E33
:10D0F00044E050E0A40EB51E68E070E0860E971E76
:10D1000047FEC0CEE2E1C95E0C942C9284B1806AE5
:10D1100084B93D9A82E58CBD1DBC459A81E080931F
:10D120008A098AEA80939B0983E880939C098AE0B4
:10D1300080939D0910929F0910929E091092A10957
:10D140001092A0091092030A1092BF09089530911D
:10D150008A09332309F085C00DB407FE82C084E03C
:10D1600080930703459A2EB58091E5049927813075
:10D17000910589F0823091051CF4892B21F03EC085
:10D180000297B9F03BC03093BE092093E6042138E2
:10D19000A9F581E008C0253549F48091E604820FA5
:10D1A0008093E60482E08093E50428C03093E50490
:10D1B00025C08091BE09E82FFF27E052F64F20835B
:10D1C0008F5F8093BE099091E6048032A0F029170A
:10D1D00069F480E2A0EEB9E0E0ECF9E00D90019294
:10D1E0008A95E1F781E08093BF0902C03093BF09BF
:10D1F0001092E50403C0920F9093E60420919A09DF
:10D20000223208F028C0459800000000000000000D
:10D21000000000000000000000000000000000000E
:10D2200000000000000000000000000000000000FE
:10D230000000000000000000E0919309F0919409C3
:10D24000E20FF11D80818EBD8091BC099081890F14
:10D250008093BC0903C081E080938A092F5F2093EB
:10D260009A090895EF92FF920F931F9380919F0761
:10D270009927880F991F880F991F7C010027F7FCB9
:10D280000095102F8091610490916204A091630435
:10D29000B0916404BC01CD01A80197010E94F591F1
:10D2A00030939F0920939E098091590490915A04CC
:10D2B000A0915B04B0915C04BC01CD01A801970171
:10D2C0000E94F5913093A1092093A0092091800933
:10D2D000309181094091820950918309DA01C90195
:10D2E00063E0880F991FAA1FBB1F6A95D1F7820FB1
:10D2F000931FA41FB51F820F931FA41FB51F20915A
:10D300003C0130913D0140913E0150913F01BC01F3
:10D31000CD010E94F5913093A7092093A609809131
:10D320007204909173042091240330912503821B91
:10D33000930B9093AD098093AC09E0916804F09150
:10D34000690480914D0990914E09BF010E94C091DE
:10D350009B01220F331F220F331F260F371F260F6B
:10D36000371F37FF02C02D5F3F4F35952795359505
:10D3700027953093A3092093A20980917C0990916D
:10D380007D09BF010E94C0919B01220F331F220F14
:10D39000331F260F371F260F371F37FF02C02D5FA1
:10D3A0003F4F35952795359527953093A5092093BF
:10D3B000A409109269041092680410924E09109208
:10D3C0004D0910927D0910927C0980919D09992741
:10D3D000AA27BB27FC013A97E830F10508F0FEC107
:10D3E000E058FF4F0C9447928091E4038093B0097A
:10D3F0008091E3038093B1098091E2038093B209A5
:10D400008091E1038093B3098091E0038093B40994
:10D410008091DF038093B5098091DE038093B60984
:10D420008091DD038093B7098091CF038093B80981
:10D430008091CF03837F8093CF030E9463308093DA
:10D44000B9098091E9078093BA098091CE03C4C1DC
:10D450008091100A9091110A9093B1098093B009BC
:10D460008091140A9091150A9093B3098093B209A0
:10D4700080911F01909120018093B4098091000157
:10D480008093B50980913B018093B6099091E704A0
:10D490009093B709E92FFF27A3E0EE0FFF1FAA958E
:10D4A000E1F7EA5AF74F86818093B8098381809328
:10D4B000B90987818093BA0985818093BB09892F37
:10D4C0008F5F6CE00E94A0919093E70487C18091E8
:10D4D000D4078093B0098091D5078093B1098091DA
:10D4E000D6078093B2098091D7078093B3098091C2
:10D4F000D8078093B4098091DC078093B5098091A7
:10D50000DD078093B6098091DE078093B70980918B
:10D51000E1078093B8098091DF078093B909809172
:10D52000E0078093BA098091E20756C18091D30742
:10D530008093B0098091AA07863081F08091D4024F
:10D54000823451F00E946F73E82FFF27EB55FF4E96
:10D5500084918093D40202C00E946F7380910A0567
:10D560008093B1093BC1F89480918607E82FFF278B
:10D57000EE0FFF1FE954F74F0190F081E02DE038E6
:10D58000F1051CF0EFE7F0E006C02FEFE138F207FD
:10D5900014F4E1E8FFEFE093B00980918707E82FEA
:10D5A000FF27EE0FFF1FE954F74F0190F081E02DA8
:10D5B000E038F1051CF0EFE7F0E006C07FEFE1385E
:10D5C000F70714F4E1E8FFEFE093B10980918507D4
:10D5D000E82FFF27EE0FFF1FE954F74F0190F0816E
:10D5E000E02DE038F1051CF0EFE7F0E006C08FEF2A
:10D5F000E138F80714F4E1E8FFEFE093B209809115
:10D600008407E82FFF27EE0FFF1FE954F74F019023
:10D61000F081E02DE038F1051CF0EFE7F0E006C006
:10D620002FEFE138F20714F4E1E8FFEF7894E0938C
:10D63000B309809108048093B40980910904809310
:10D64000B50980910A048093B60980910B048093F8
:10D65000B70980910C048093B80980910D048093E0
:10D66000B90980910E048093BA0980910F04B4C067
:10D6700080916F05863018F010926F0585E08093D9
:10D68000B0098091E3078093B109809101049091E2
:10D690000204A0910304B0910404BC01CD0125E073
:10D6A00030E040E050E00E94F5913093B3092093C0
:10D6B000B2098091FD039091FE03A091FF03B09108
:10D6C0000004BC01CD0125E030E040E050E00E94C4
:10D6D000F5913093B5092093B4098091D9078093CF
:10D6E000B6098091DA078093B7098091DB078093B0
:10D6F000B809809107048093B9098091B708909187
:10D70000B8088093BA098091EE069091EF0697FDD4
:10D71000039695958795959587955EC01092B0096B
:10D720008AE58093B10983E08093B20984E3809312
:10D73000B309809101018093B409809154058093CD
:10D74000B509909155059093B6098F77809354054C
:10D75000907190935505809156058093B7098091FB
:10D7600070098093B809809154098093B909809118
:10D77000E5078093BA098091F2072EC08091B8071F
:10D780008093B0098091F0078093B109809167017F
:10D790008093B2098091B1078093B3098091B20759
:10D7A0008093B4098091B3078093B5098091660195
:10D7B0008093B6098091B5078093B7098091B60729
:10D7C0008093B8098091B7078093B9098091160AB0
:10D7D0008093BA09809118078093BB098091BF0993
:10D7E000882309F47DC16091C0098091990168176F
:10D7F00019F08AEF809397016093990181E08093FB
:10D8000087014091C1095091C209CA0181509E4FC0
:10D810008F5F9340B0F42091C3093091C409C901CE
:10D8200081509E4F8F5F934060F48091900785FFF9
:10D8300008C05093D4044093D3043093D20420936F
:10D84000D1048091C7099091C80921E089369207D7
:10D8500024F490938901809388012091D10930911B
:10D86000D20980910803909109038217930740F42D
:10D870008091DC02882321F430930903209308036C
:10D88000862F99278936910509F4A5C08A36910516
:10D8900044F48736910571F08836910509F462C029
:10D8A00027C18A36910509F414C18B36910509F414
:10D8B000E2C01EC18091D3098093000A8091D409EF
:10D8C0008093020A8091D5098093010A8091D6093C
:10D8D000809386018091D7098093040A8091D809AA
:10D8E000809398018091D9098093E4048091DA09AA
:10D8F0008093D0048091DC038823F9F02091DB0928
:10D900003091DC0937FD19C03093200420931F04A7
:10D910009091BA07992389F08FE0989FC001112454
:10D92000281B390BC90188599E4F68E671E00E9497
:10D93000C0919093200480931F042091DB043091C8
:10D94000DC048091DD099091DE09280F391F37FF33
:10D9500002C02F5F3F4F359527953093DC0420930D
:10D96000DB04C6C08091D309809395098091D409C6
:10D97000809396098091D509809397098091D60963
:10D98000809398098091D709809399098091DE0648
:10D990009091D809892B8093DE069091DF069370D1
:10D9A0008091D9098C70982B9093DF068091DA09C9
:10D9B0008093E2048091DB0980938B018091DC09E4
:10D9C0008093030A8091DD098093DE048091DE0953
:10D9D0008093DD048DC08091D30980938B09809161
:10D9E000D40980938C098091D50980938D09809109
:10D9F000D60980938E098091D7099091D809909388
:10DA0000900980938F098091D9099091DA099093B8
:10DA10009209809391098091DB09992787FD909560
:10DA20009093EA088093E9088091DC098093F603DB
:10DA30008091DD099091DE099C01442737FD4095D6
:10DA4000542FDA01C90163E0880F991FAA1FBB1F79
:10DA50006A95D1F7820F931FA41FB51F820F931FE2
:10DA6000A41FB51F8093F7039093F803A093F903C5
:10DA7000B093FA033DC08091D3098093E104809173
:10DA8000D4098093E0048091D5098093DF049091BC
:10DA9000D609992349F080919D01882319F081517D
:10DAA000833010F490939D018091D70980930F05E6
:10DAB0008091D80980930E058091D9099091DA0957
:10DAC00090930C0580930B058091DB0980930D05E5
:10DAD0000FC08091AA07863059F40E94C87308C00D
:10DAE0001092D4041092D3041092D2041092D10454
:10DAF0001F910F91FF90EF90089580918A098823DC
:10DB000009F43BC045988BE999E090939409809380
:10DB100093099091E304E92FFF27E457FE4F9F5F9D
:10DB20009093E304808180939D099B3010F01092C4
:10DB3000E30410928A090E94326981E080939A0975
:10DB400000000000000000000000000000000000D5
:10DB500000000000000000000000000000000000C5
:10DB600000000000000000000000000000000000B5
:10DB700080919B098093BC098EBD089587B18C600C
:10DB800087B9429843981092E90480E880939B01FA
:10DB90001092E80480939A0108958091EE048150D8
:10DBA0008093EE048F3F09F055C189E08093EE0425
:10DBB0008091E9089091EA0881589F4F39F080914F
:10DBC000E9089091EA0881588093F3048091CF038B
:10DBD000992780739070892B21F48091550580FFDF
:10DBE0001DC08091D107882351F08091F1048823D2
:10DBF00019F484E08093E90481E08093F10480913A
:10DC0000D2078823B9F08091F204882319F484E0C4
:10DC10008093E80481E08093F2040CC01092F10438
:10DC20001092F2048091CD078093EF048091CF078A
:10DC30008093F0048091F104882309F073C08091EF
:10DC4000EF07282F332724FF07C08091060488237D
:10DC500019F425FD80C081C09091CE07983F48F00F
:10DC600080914F098D3D28F08091EF0488236CF05E
:10DC70000AC0983F68F080914F09853049F480913F
:10DC8000EF0487FF02C0429801C0429A81E032C08F
:10DC90008091E90481508093E9048F3F09F05EC0D0
:10DCA0008091F20785FF29C09091F304892F869512
:10DCB0008093E904992351F48091EF0487FF02C017
:10DCC000429801C0429A10929B0148C080919B01EA
:10DCD0009091EF04882341F48093F30480E88093CB
:10DCE0009B019923D4F137C0982311F0429A01C0C7
:10DCF0004298869580939B0131C080914F0986950B
:10DD00008093E90480919B01813021F41092F30407
:10DD100080E801C0869580939B0180919B01909142
:10DD2000EF0417C08091E90481508093E9048F3F8C
:10DD3000A9F489E08093E90480919B01813011F47A
:10DD400080E801C0869580939B0180919B01909112
:10DD5000D107892311F0429A01C042988091F204C0
:10DD6000882309F043C09091EF0797FF07C0809187
:10DD70000604882319F496FD52C053C09091D00731
:10DD8000983F48F0809177098D3D28F08091F0040C
:10DD900088236CF00AC0983F78F08091770985302D
:10DDA00059F48091F00487FF02C0439801C0439A60
:10DDB00081E080939A0136C08091E804815080937D
:10DDC000E8048F3F79F58091770986958093E80480
:10DDD00080919A01813011F480E801C0869580938A
:10DDE0009A0180919A019091F00417C08091E80403
:10DDF00081508093E8048F3FA9F489E08093E80480
:10DE000080919A01813011F480E801C08695809359
:10DE10009A0180919A019091D207892311F0439A37
:10DE200001C04398429B04C08091CE03886003C028
:10DE30008091CE03877F8093CE03439B06C0809161
:10DE4000CE0380618093CE0308958091CE038F7EB0
:10DE50008093CE0308950F931F93CF93DF93482FA2
:10DE6000EB0180910704E42FFF27843BD8F08F015A
:10DE70000E0F1F1FF801E954F74F808191819B011C
:10DE8000281B390BC90163E070E00E94C091CB01EF
:10DE9000880F991F860F971F0551174FF80191831F
:10DEA000808306C0EE0FFF1FE551F74F11821082ED
:10DEB000E42FFF27EE0FFF1FE954F74FD183C083F4
:10DEC000DF91CF911F910F9108954FB724E130E07A
:10DED000F8948091C9008F778093C9008091C90020
:10DEE0008F7B8093C9008091C9008F7D8093C9008A
:10DEF0005A9A52985B9A539A832F99278093CD0010
:10DF00002093CC008091C80082608093C80080E19B
:10DF10008093C9008091CA008F778093CA00809156
:10DF2000CA008F7B8093CA008091CA008F7D809346
:10DF3000CA008091CA008F7E8093CA008091CA0077
:10DF4000877F8093CA008091C9008B7F8093C9002E
:10DF50008091CA0084608093CA008091CA00826068
:10DF60008093CA008091C80087FF03C08091CE00D3
:10DF7000F9CF8091C90080688093C9004FBF089590
:10DF8000EF92FF920F931F93CF93DF93482F00E000
:10DF900010E080919C01813061F410929C0184E436
:10DFA0008093F6041092F8041092F7041092F9048A
:10DFB00003C28091F604882319F421E030E001C007
:10DFC00098019091F704992371F4232B11F081E0CB
:10DFD00010C084E48093F6049093F8049093F704BF
:10DFE0009093F904D2C1913069F4232B09F0C3C195
:10DFF00082E08093F7048091F8048F5F8093F804A7
:10E0000083E0C1C19230D1F4232B09F0B4C183E085
:10E010008093F6044093F9049091F804923039F417
:10E020001092FA0447FF03C081E08093FA0483E072
:10E030008093F7049F5F9093F804A7C1933009F091
:10E040009AC1232B09F097C19093F60482E0809344
:10E05000F7048091F8048F5F8093F8042091F9040D
:10E06000822F9927782F6627842F9927682B792B61
:10E070008091AA07813051F47370CB018050924097
:10E0800063E070E00E94C091EB0119C0823069F436
:10E090007770CB018050944066E070E00E94C091A0
:10E0A000EB012695269526950CC0EB01D370C8563A
:10E0B000D140CE01D7FD0196EC01D595C7952695A7
:10E0C0002695022F11270F7010700F5F1F4F0D3014
:10E0D000110508F049C10230110519F404E010E0FF
:10E0E00005C00430110511F402E010E0D801A00FC2
:10E0F000B11FFD01E954F74F808191819E01281BDA
:10E10000390BC90137FF03C0909581959F4F069742
:10E1100004F5E091EC07EE2351F0FF27EE0FFF1F0F
:10E12000E954F74F808191818436910594F4809170
:10E130000704883C30F480910704865F80930704CD
:10E1400008C088EC8093070480916F008F7D8093D6
:10E150006F00A954B74F8D919C91BC01660F771F3A
:10E16000680F791F6C0F7D1F77FF02C06D5F7F4FB7
:10E170007B01F594E794F594E794CE0101968E1512
:10E180009F0524F40894E108F10808C0CE01019726
:10E19000E816F9061CF40894E11CF11C0630110580
:10E1A00009F0CEC0C536D1050CF4A5C09091F50498
:10E1B000E92FFF27EB5FF54FE081ED3729F48091E0
:10E1C000F40480958093F404963061F48091F40413
:10E1D000882311F0E338B9F0882309F088C0ED37BF
:10E1E00091F085C0993009F082C08091F4048823B1
:10E1F00029F480910E0A833831F079C080910E0A9B
:10E200008D3709F074C08091060A8D3739F48091FA
:10E21000070A833899F463E87FEF0DC0833871F4FF
:10E220008091070A833819F460E070E004C08D37EC
:10E2300029F46DE770E085E00E942B6F8091080A59
:10E24000992787FD9095BC0186E00E942B6F8091F5
:10E25000090A992787FD9095BC018BE00E942B6FDE
:10E2600080910A0A992787FD9095BC018CE00E9455
:10E270002B6F8091F5048930D1F580910C0A8D3790
:10E2800049F48091C7089091C8080596BC0188E0C0
:10E290000E942B6F80910D0A8D3749F48091C70839
:10E2A0009091C8080597BC0188E00E942B6F80916F
:10E2B000C7089091C80883589F4F1CF483E89FEFCC
:10E2C00009C08091C7089091C8088E37910534F035
:10E2D0008DE790E09093C8088093C70880910B0A5F
:10E2E000992787FD9095BC018AE00E942B6F1092C0
:10E2F000F5041092F404CA30D1055CF48091F50461
:10E300008F5F8093F504E82FFF27EB5FF54F83E8DD
:10E3100080838091F5048A3011F41092F5048FEF18
:10E32000CC39D8076CF48091F504E82FFF27EB5F18
:10E33000F54F8DE780838091F40480958093F404F9
:10E340000530110518F4B701802F0BC005301105F9
:10E3500019F4BE0187E005C007301105B1F4BE0114
:10E3600089E00E942B6F11C00231110570F081E02D
:10E3700080939C010AC081E080939C011092F80474
:10E380001092FA0484E48093F6048091F8048031BA
:10E3900098F08091FA04882331F480919C018823BD
:10E3A00011F480933A011092F8041092FA0410923A
:10E3B000F70484E48093F604E6E0CDB7DEB70C946E
:10E3C0003892CF93FC0197FF05C0CFEFF095E19510
:10E3D000FF4F01C0C1E028E631E0CF01B9010E9442
:10E3E000C091FC018B35910554F08B5590408A35D6
:10E3F000910538F484EB90E08E1B9F0BFC0141E00B
:10E400000DC0CF01855B90408A35910518F4E45B1F
:10E41000F04003C02E1B3F0BF9014FEFEE0FFF1F23
:10E42000E85BF64F259134918C2F992787FD9095C5
:10E43000289FB001299F700D389F700D1124842FE3
:10E44000992787FD9095689FA001699F500D789F3F
:10E45000500D1124CA01CF9108952AE530E0281B00
:10E46000390BC9010E94E171089508950895089536
:10E470000895089580E090E008951092110A109296
:10E48000100A1092150A1092140A1092130A109290
:10E49000120A1092160A8AE090E00E946F19909377
:10E4A000FC048093FB040895CF93DF938091FB04D9
:10E4B0009091FC040E947819882309F4AFC08091E0
:10E4C000FB049091FC040A969093FC048093FB0457
:10E4D000E0E0F0E09F0190E05FEFA6E5B8E04BE000
:10E4E000ED018B8187FF0BC09F5F8D81E80FF11DD0
:10E4F0008981280F311D8E81851708F4582F4150CE
:10E50000189647FFEDCF5093160A232B41F5209123
:10E510000105309102054091030550910405BB2788
:10E52000A52F942F832F909300058093FF04AA2793
:10E53000BB27281B390B4A0B5B0BCF01AA27BB2734
:10E54000280F391F4A1F5B1F2093010530930205D6
:10E550004093030550930405E5E0F0E013C02091DB
:10E56000FF04309100052E173F0718F4E21BF30B50
:10E5700002C0E0E0F0E0892F9927880F991FE80F8B
:10E58000F91F3596F093110AE093100AEF3FF10559
:10E5900078F480911F01909120018E9F90018F9FB0
:10E5A000300D9E9F300D1124C90164E670E013C048
:10E5B000CF01969587959695879520911F0130916B
:10E5C0002001289FA001299F500D389F500D112434
:10E5D000CA0169E170E00E94AC917093130A6093E4
:10E5E000120A2091FD043091FE042E0F3F1F30933C
:10E5F000FE042093FD045EE02131350778F0809120
:10E60000140A9091150A01969093150A8093140AA2
:10E6100020513E403093FE042093FD04DF91CF91C2
:10E62000089530911005E32FFF2783E0EE0FFF1FC1
:10E630008A95E1F7EA5AF74F2781422F552747FD80
:10E640005095809111059927841795072CF42093F4
:10E650001105309313050AC0222341F08091120561
:10E6600099274817590714F420931205832F8F5FB9
:10E67000809310058D30D0F0109210058091120516
:10E680008F3F19F08093060502C010920605809115
:10E6900011058093070580911305809305058FEF81
:10E6A000809312051092110510921305089595E1BB
:10E6B000899F802D11240E94C28B8AE89CE09F9341
:10E6C0008F9384E99BE89F938F93E0913B05F091B2
:10E6D0003C0509950F900F900F900F900895CF93E0
:10E6E000C0E020919D0120930A058091CF0385FF12
:10E6F00002C0C0E123C09091E2049923B1F080915F
:10E700000604882349F4E92FFF27EE0FFF1FE1508D
:10E71000F64F8491882349F4E92FFF27EE0FFF1F5E
:10E72000E250F64FC491CC2349F48091F20786FD64
:10E7300003C010929D0104C0C22F02C0C0930A05FD
:10E74000809114058C1771F4809115059091160530
:10E750000E947819882319F480E090E017C088E8B7
:10E7600093E102C080ED97E00E946F199093160527
:10E7700080931505CC2331F080919D01C81711F4C9
:10E7800010929D01C09314058C2F9927CF91089565
:10E7900040E050E030E08091DE0999278A38910509
:10E7A00089F08B38910524F48938910541F013C024
:10E7B0008D38910569F08E38910539F00CC04FE61F
:10E7C0005AE008C047E45BE005C047E15AE002C0F8
:10E7D00043E45AE03CE29091D30920E08091D409CF
:10E7E000281770F4931760F4DA01A90FB11DE22F16
:10E7F000FF27E054F64F85898C939F5F2F5FEECF04
:10E80000089520E335E780913B018B3211F08D3282
:10E81000F9F480919507282F33278091FB0390917D
:10E82000FC03829FA001839F500D929F500D1124E5
:10E83000CA0163E070E00E94C091CB019B01205DA2
:10E840003A48C196C19708F03FC02EEF34E73CC06C
:10E85000803229F58091CF0381FF36C020910805D1
:10E8600030910905205D3A4855E72133350748F0D6
:10E8700085E72439380718F420E335E702C0245629
:10E88000304045E720333407F8F454E72D3C350792
:10E8900018F020E335E718C02C593F4F15C08E35CE
:10E8A00049F49091F6038AE0989F90011124205D2D
:10E8B0003A480AC0863741F49091F6038AE0989F5F
:10E8C000C0011124281B390BC9010895EF92FF9252
:10E8D0000F931F9399278A38910509F444C18B3807
:10E8E000910524F48938910551F0DEC28D389105E7
:10E8F00009F424C28E38910509F486C1D5C28091ED
:10E90000010490910204A0910304B0910404BC019D
:10E91000CD0124E630E040E050E00E94F591DA01BC
:10E92000C9018C509E4F9093750A8093740A0E947F
:10E93000017490937B0A80937A0A90937D0A809366
:10E940007C0A90937F0A80937E0A2091740A30910A
:10E95000750A8091780A9091790A2817390724F46A
:10E960003093790A2093780A8091760A9091770AF9
:10E970008217930724F43093770A2093760A109233
:10E98000710A8FE69AE0909327058093260580917F
:10E990003B018093950A8091CE0380FF02C083E4FF
:10E9A00001C080E28093960A2091E204222309F1BB
:10E9B000822F6AE00E94A091805D8093800A822F5E
:10E9C0000E94A091892F805D8093810A8AE38093C1
:10E9D000820A81E1289FF0011124A3E8BAE0E25CF9
:10E9E000F54F9FE084918D939150319697FFFACF28
:10E9F00058C28091CF0385FF0CC0A0E8BAE0EEE5D5
:10EA0000FCE094E184918D939150319697FFFACF79
:10EA100048C230910E05332309F499C087E58093ED
:10EA2000800A80E58093810A40E24093820A209127
:10EA30000F05822F6AE00E94A091805D8093830A77
:10EA4000822F0E94A091892F805D8093840A8FE29B
:10EA50008093850A832F0E94A091805D8093860A0F
:10EA6000832F0E94A091892F805D8093870A409315
:10EA7000880A20910B0530910C0583E0293E380768
:10EA800080F0C90168EE73E00E94AC91CB01805D1B
:10EA90008093890AC90168EE73E00E94AC919C01E1
:10EAA00002C04093890A2536310580F0C90164E629
:10EAB00070E00E94AC91CB01805D80938A0AC9010D
:10EAC00064E670E00E94AC919C0103C080E28093F8
:10EAD0008A0AC9016AE070E00E94AC91CB01805DB6
:10EAE00080938B0AC9016AE070E00E94AC91805D5E
:10EAF00080938C0A8DE680938D0A80E280938E0A43
:10EB000020910D05253660F0822F64E60E94A091C9
:10EB1000805D80938F0A822F0E94A091292F02C0CE
:10EB200080938F0A822F6AE00E94A091805D80937B
:10EB3000900A822F0E94A091892F805D8093910A74
:10EB400083E78093920A80E28093930AAAC1A0E8A7
:10EB5000BAE0E4E7FCE094E184918D939150319622
:10EB600097FFFACF9EC18091010490910204A09179
:10EB70000304B0910404BC01CD0124E630E040E080
:10EB800050E00E94F591DA01C9018C509E4F90939C
:10EB90005D0B80935C0B0E94017490935F0B8093DC
:10EBA0005E0B88E78093600B80918C098093610BEA
:10EBB0000E946F738093490B80918B0981FF02C083
:10EBC00084E407C080918D09833011F480E201C094
:10EBD00081E28093620B87E49BE09093270580930A
:10EBE000260580918B0180936E0B8091620B809340
:10EBF000700B809191099091920997FD01969595DE
:10EC000087958093630B4DC10E941173809101041D
:10EC100090910204A0910304B0910404BC01CD01C1
:10EC200024E630E040E050E00E94F591DA01C901AD
:10EC30008C509E4F9093320A8093310A80911F012D
:10EC40009091200190932C0A80932B0A80911F01B0
:10EC50009091200190932E0A80932D0A80912D0986
:10EC600090912E0997FD01969595879580931D0AA1
:10EC70008093240A209191093091920937FF02C0B4
:10EC80002F5F3F4F359527952093220A80918F095A
:10EC90009091900964E170E00E94AC916093230A26
:10ECA0002093290A60932A0A0E94017490933A0AD9
:10ECB0008093390A88E780933B0A80911F019091E5
:10ECC00020019093360A8093350A809106058C5E68
:10ECD00080932F0A809107058C5E8093300A809183
:10ECE000140A9091150A6AE070E00E94AC9170934A
:10ECF000380A6093370A1092190A8091100A90918D
:10ED0000110A9093340A8093330A87E19AE0909332
:10ED10002705809326052091D6023091D702C9019C
:10ED20006CE370E00E94AC9160933E0AC9016CE311
:10ED300070E00E94AC9180933F0AB3C00E941173AF
:10ED400080918F099091900964E670E00E94AC91E7
:10ED50007093590A6093580A80912D0990912E0959
:10ED600097FD0196959587958093490A8091910921
:10ED70009091920997FD01969595879580934E0AFB
:10ED800080910001482F55279A012B5F3F4F8091BA
:10ED90001F01909120012817390784F480911F01E9
:10EDA00090912001841B950B9C01220F331F280F8B
:10EDB000391F822F82518093550A02C01092550A42
:10EDC000E0900104F0900204009103041091040407
:10EDD000C801B70124E630E040E050E00E94F59120
:10EDE0003093570A2093560A37FF04C01092570AEF
:10EDF0001092560AC801B70124E630E040E050E026
:10EE00000E94F591DA01C9018C509E4F90935B0AE4
:10EE100080935A0A80911F01909120019093500A8B
:10EE200080934F0A80911F01909120019093520A84
:10EE30008093510A0E94017490935D0A80935C0A4A
:10EE400088E780935E0A80911F0190912001909342
:10EE5000620A8093610A809106058C5E8093530A52
:10EE6000809107058C5E8093540A8091140A9091DA
:10EE7000150A6AE070E00E94AC917093640A609396
:10EE8000630A1092450A8091100A9091110A90939A
:10EE9000600A80935F0A83E49AE090932705809349
:10EEA00026052CE230E002C020E030E0C9011F91CD
:10EEB0000F91FF90EF900895EF92FF920F931F93A1
:10EEC000CF93DF9380910805909109059C0153E051
:10EED000220F331F5A95E1F7281B390B8091170336
:10EEE00090911803280F391F37FF02C0295F3F4F49
:10EEF00043E0359527954A95E1F73093090520932E
:10EF0000080590911805992309F020C380911705F1
:10EF1000282F3327442755278F5F80931705F90142
:10EF20002131310508F00FC3E857FF4F0C94479289
:10EF30008091CF0385FF2AC080E00E94C28B809120
:10EF40001F01909120016AE070E00E94C0919F93A0
:10EF50008F9380911F01909120016AE070E00E94E0
:10EF6000C0917F936F9380EA9CE09F938F9385EB92
:10EF70009BE89F938F93E0913B05F0913C050995A9
:10EF80002DB73EB7285F3F4F2DBF28C080E00E94BD
:10EF9000C28B80911F01909120016AE070E00E9475
:10EFA000C0919F938F9380911F01909120016AE0FF
:10EFB00070E00E94C0917F936F938DEA9CE09F93D5
:10EFC0008F9384E99BE89F938F93E0913B05F091A9
:10EFD0003C0509958DB79EB708968DBF8091700945
:10EFE00080FF39C080911E048823E9F08AE00E94E6
:10EFF000C28B80913B0199279F938F93809101044D
:10F0000090910204A0910304B0910404BC01CD01CD
:10F0100024E630E040E050E00E94F5913F932F93CA
:10F020008AEB9CE099C68AE00E94C28B8091010421
:10F0300090910204A0910304B0910404BC01CD019D
:10F0400024E630E040E050E00E94F5913F932F939A
:10F0500086EC9CE0ADC78AE00E94C28B81ED9CE00B
:10F060009F938F9384E99BE80C9409818091CF034F
:10F0700085FF2AC085E10E94C28B8091D6029091C3
:10F08000D7026CE370E00E94AC919F938F938091C4
:10F09000D6029091D7026CE370E00E94AC917F930E
:10F0A0006F938BED9CE09F938F9385EB9BE89F93F1
:10F0B0008F93E0913B05F0913C0509952DB73EB744
:10F0C000285F3F4F2DBF28C085E10E94C28B8091F1
:10F0D000D6029091D7026CE370E00E94AC919F93AE
:10F0E0008F938091D6029091D7026CE370E00E94DA
:10F0F000AC917F936F9388EE9CE09F938F9384E90C
:10F100009BE89F938F93E0913B05F0913C05099517
:10F110008DB79EB708968DBF8FE10E94C28B80E6A7
:10F1200090E09F938F9380912D0990912E099F934A
:10F130008F9385EF9CE09F938F93C4E9DBE8DF9387
:10F14000CF93E0913B05F0913C0509958091CE036A
:10F150002DB73EB7285F3F4F2DBF80FF06C089E225
:10F160000E94C28B80E09DE073C389E20E94C28B43
:10F1700082E09DE0B9C68091CF0385FF1BC08AE283
:10F180000E94C28B8091140A9091150A9F938F93CD
:10F1900084E09DE09F938F9385EB9BE89F938F93F3
:10F1A000E0913B05F0913C0509958DB79EB7069619
:10F1B0008DBF1BC08AE20E94C28B8091140A90917D
:10F1C000150A9F938F938CE09DE09F938F9384E922
:10F1D0009BE89F938F93E0913B05F0913C05099547
:10F1E0002DB73EB72A5F3F4F2DBF86E30E94C28BEB
:10F1F0008091100A9091110A6AE070E00E94AC912F
:10F200009F938F938091100A9091110A6AE070E0A9
:10F210000E94AC917F936F9384E19DE09F938F93C5
:10F2200084E99BE89F938F93E0913B05F0913C0527
:10F2300009958DB79EB70896C9C689E00E94C28B12
:10F2400080E29DE09F938F9304E91BE81F930F9347
:10F25000E0913B05F0913C0509958EE10E94C28B3F
:10F260000F900F900F900F9082E29DE09F938F93ED
:10F270001F930F93E0913B05F0913C05099583E3C3
:10F280000E94C28B0F900F900F900F9084E29DE030
:10F290009F938F931F930F93E0913B05F0913C0553
:10F2A00009958FE30E94C28B0F900F900F900F90E3
:10F2B00086E29DE09F938F931F930F93E0913B0510
:10F2C000F0913C0509958EE70E94C28B0F900F903C
:10F2D0000F900F908CE39DE09F938F931F930F935C
:10F2E0009AC780919701882309F462C08DE50E9436
:10F2F000C28B82E59DE09F938F93C4E9DBE8DF93A7
:10F30000CF93E0913B05F0913C05099584E50E947F
:10F31000C28B0F900F900F900F9080918C099927BE
:10F320009F938F9384E59DE09F938F93DF93CF937B
:10F33000E0913B05F0913C0509958EE50E94C28B5A
:10F340002DB73EB72A5F3F4F2DBF80918F09909117
:10F3500090096AE070E00E94AC917F936F938DE515
:10F360009DE09F938F93DF93CF93E0913B05F091C6
:10F370003C0509958DB79EB706968DBF80918D0986
:10F38000833081F480918B0981FF06C08BE50E9458
:10F39000C28B87E69DE0A8C58BE50E94C28B8AE6FA
:10F3A0009DE0A2C58BE50E94C28B8DE69DE02DC736
:10F3B00084E0D3C380919701882309F47AC08091B7
:10F3C0001A0594E9E92E9BE8F92E882309F44BC02D
:10F3D00089E60E94C28B8091E10499279F938F93C5
:10F3E00080E79DE09F938F93FF92EF92E0913B0522
:10F3F000F0913C05099585E70E94C28B2DB73EB779
:10F400002A5F3F4F2DBF80918B0199279F938F9348
:10F4100000E610E01F930F9380919109909192095B
:10F420009F938F938BE79DE09F938F93FF92EF9233
:10F43000E0913B05F0913C05099582E70E94C28B63
:10F440008DB79EB70A968DBF8091DF0499279F9351
:10F450008F931F930F938091E00499279F938F932D
:10F4600087E89DE073C689E60E94C28B80918B017C
:10F4700099279F938F9380E690E09F938F9380913D
:10F480009109909192099F938F9380918E0999276A
:10F490009F938F9387E99DE09F938F93FF92EF92C5
:10F4A000E0913B05F0913C0509958DB79EB70C9610
:10F4B0008DC585E052C39091E2049923D1F08091EB
:10F4C0002305882381F0903270F487E00E945773FF
:10F4D00083E90E94C28B8091E20499279F938F93C6
:10F4E00080EB9DE0A4C383E90E94C28B8BEB9DE07F
:10F4F000B3C38091CF0304E9E02E0BE8F02E85FF23
:10F5000006C084E90E94C28B81EC9DE0DAC383E9E6
:10F510000E94C28B84ED9DE0D4C38091AC0B8630F9
:10F5200059F480911A05882319F010921A059AC689
:10F5300081E080931A0596C6883009F093C60E9430
:10F54000C78B81E0DBC39093170594C6913009F017
:10F55000E0C380911705282F3327442755278F5F55
:10F5600080931705F9012131310508F07EC6E75671
:10F57000FF4F0C9447928091CF0385FF43C080E0FA
:10F580000E94C28B8091140A9091150A9F938F93C9
:10F5900080911F01909120016AE070E00E94C0916B
:10F5A0009F938F9380911F01909120016AE070E0FA
:10F5B0000E94C0917F936F938091D6029091D70261
:10F5C0006CE370E00E94AC919F938F938091D60280
:10F5D0009091D7026CE370E00E94AC917F936F939F
:10F5E0008AEE9DE09F938F9385EB9BE89F938F938B
:10F5F000E0913B05F0913C0509952DB73EB7225FA0
:10F600003F4FB1C580E00E94C28B8091140A909157
:10F61000150A9F938F9380911F01909120016AE0BA
:10F6200070E00E94C0919F938F9380911F019091F1
:10F6300020016AE070E00E94C0917F936F938091F7
:10F64000D6029091D7026CE370E00E94AC919F9338
:10F650008F938091D6029091D7026CE370E00E9464
:10F66000AC917F936F9385E09EE0C2C285E10E94DA
:10F67000C28B80E690E09F938F9380918801909158
:10F6800089019F938F9380E29EE09F938F93C4E9BB
:10F69000DBE8DF93CF93E0913B05F0913C050995C2
:10F6A000809170092DB73EB7285F3F4F2DBF80FF77
:10F6B00051C080911E04882339F18FE10E94C28BD2
:10F6C0008091010490910204A0910304B09104047C
:10F6D000BC01CD0124E630E040E050E00E94F5910D
:10F6E0003F932F938AE29EE09F938F9384EA9BE857
:10F6F0009F938F93E0913B05F0913C0509958DB761
:10F700009EB706968DBF38C08FE10E94C28B809154
:10F71000010490910204A0910304B0910404BC017F
:10F72000CD0124E630E040E050E00E94F5913F93A7
:10F730002F9383E39EE09F938F93DF93CF93E0918A
:10F740003B05F0913C0509952DB73EB72A5F3F4F29
:10F750002DBF12C08FE10E94C28B8CE39EE09F936D
:10F760008F93DF93CF93E0913B05F0913C05099592
:10F770000F900F900F900F9089E20E94C28B8091A2
:10F780003B0199279F938F9386E49EE09F938F93ED
:10F79000DF93CF9313C4809197018823F9F08BE214
:10F7A0000E94C28B80918B0199279F938F938091A8
:10F7B0008F09909190096AE070E00E94AC917F936C
:10F7C0006F9380E690E09F938F9380919109909141
:10F7D00092099F938F9389E49EE058C182E0BDC156
:10F7E0008FE30E94C28B8091120A9091130A9F931B
:10F7F0008F938091100A9091110A6AE070E00E9444
:10F80000AC919F938F938091100A9091110A6AE0B6
:10F8100070E00E94AC917F936F9380E69EE09F938F
:10F820008F93C4E9DBE8DF93CF93E0913B05F09140
:10F830003C0509958091CE032DB73EB7265F3F4F1B
:10F840002DBF80FF0AC082E50E94C28B84E79EE044
:10F850009F938F9384EA9BE8DCC482E50E94C28B6D
:10F8600087E79EE041C38091970114E9E12E1BE8F0
:10F87000F12E882309F449C084E50E94C28B80914F
:10F880008C0999279F938F9380918E0999279F9335
:10F890008F938AE79EE09F938F93E701FF92EF9209
:10F8A000E0913B05F0913C0509958DB79EB7089610
:10F8B0008DBF80918D09833051F484E60E94C28B04
:10F8C0008DE89EE09F938F93FF92EF920BC084E6AA
:10F8D0000E94C28B83E99EE09F938F9385EB9BE808
:10F8E0009F938F93E0913B05F0913C0509950F9014
:10F8F0000F900F900F9080918B0981FFBBC484E61D
:10F900000E94C28B89E99EE0EFC284E50E94C28B0F
:10F910008FE99EE0D6C180911905C4E9EC2ECBE8B1
:10F92000FC2E882309F450C089E60E94C28B809186
:10F9300073086AE00E94A091892F99279F938F9363
:10F94000809173080E94A09199279F938F93809133
:10F950006B080E94A091892F99279F938F93809184
:10F960006B080E94A09199279F938F9380916308C1
:10F970000E94A091892F99279F938F93809163086C
:10F980000E94A09199279F938F9380915B080E947A
:10F99000A091892F99279F938F9380915B080E9454
:10F9A000A09199279F938F9385EB9EE09F938F93D0
:10F9B000FF92EF92E0913B05F0913C0509952DB740
:10F9C0003EB72C5E3F4FCFC389E60E94C28B80E6D4
:10F9D00090E09F938F9380917508992787FD90956C
:10F9E0009F938F9380916D08992787FD90959F93A2
:10F9F0008F9380916508992787FD90959F938F93AA
:10FA000080915D08992787FD90959F938F9382ED54
:10FA10009EE09F938F93FF92EF92E0913B05F091D0
:10FA20003C0509958DB79EB70E96D0C280911905F9
:10FA300090918207882309F48DC0943009F48CC01A
:10FA40009630A1F58EE70E94C28B809183086AE010
:10FA50000E94A091892F99279F938F93809183086B
:10FA60000E94A09199279F938F9380917B080E9479
:10FA7000A091892F99279F938F9380917B080E9453
:10FA8000A09199279F938F9385EE9EE09F938F93EC
:10FA900084E99BE89F938F93E0913B05F0913C05AF
:10FAA00009952DB73EB7245F3F4F5DC3973008F4EB
:10FAB000E1C38EE70E94C28B809193086AE00E94A6
:10FAC000A091892F99279F938F93809193080E94EB
:10FAD000A09199279F938F9380918B080E94A0916A
:10FAE000892F99279F938F9380918B080E94A091D3
:10FAF00099279F938F93809183080E94A091892FCB
:10FB000099279F938F93809183080E94A0919927B2
:10FB10009F938F9380917B080E94A091892F9927B2
:10FB20009F938F9380917B080E94A09199279F9328
:10FB30008F9384EF9EE09F938F9384E99BE89F933C
:10FB40008F93E0913B05F0913C0509958DB79EB7E9
:10FB500044963CC2943021F486E00E9457738AC3D5
:10FB60009630F1F48EE70E94C28B80E690E09F937E
:10FB70008F9380918508992787FD90959F938F9308
:10FB800080917D08992787FD90959F938F9381E1C0
:10FB90009FE09F938F9384E99BE89F938F93DAC2B2
:10FBA000973008F467C38EE70E94C28B80E690E02E
:10FBB0009F938F9380919508992787FD90959F93A8
:10FBC0008F9380918D08992787FD90959F938F93B0
:10FBD00080918508992787FD90959F938F938091B9
:10FBE0007D08992787FD90959F938F9384E29FE0EE
:10FBF0009F938F9384E99BE89F938F930ECF90916F
:10FC0000E204992309F44AC0809123058823F9F07E
:10FC10009032E8F487E00E94577383E90E94C28B18
:10FC20008091E20499279F938F9387E39FE09F93AE
:10FC30008F9384EA9BE89F938F93E0913B05F0912B
:10FC40003C0509952DB73EB72A5F3F4F8CC283E92B
:10FC50000E94C28B82E49FE09F938F9304E91BE88C
:10FC60001F930F93E0913B05F0913C0509951F927E
:10FC70001F929091E20481E1989FC0011124825C5F
:10FC8000954F9F938F931F930F93E0913B05F091B6
:10FC90003C0509958DB79EB70A9698C18091CF0310
:10FCA000B4E9EB2EBBE8FB2E85FF06C084E90E9479
:10FCB000C28B88E49FE005C083E90E94C28B8BE57C
:10FCC0009FE09F938F93FF92EF92A5C28091AC0B20
:10FCD000863079F480911905882319F0109219055E
:10FCE00003C081E08093190585E00E94577386E088
:10FCF000AEC2883031F40E94C78B82E08093180531
:10FD0000AFC2813009F0AEC20E94C78B10921805B5
:10FD1000A7C2923009F0ACC280911705282F332773
:10FD2000442755278F5F80931705F901213131054D
:10FD300008F09BC2E655FF4F0C94479280E00E946A
:10FD4000C28B83EF97E09F938F930E946330992734
:10FD50009F938F9381E79FE09F938F9384EA9BE823
:10FD60009F938F93E0913B05F0913C0509952DB74A
:10FD70003EB7285F3F4FF7C185E10E94C28B81E00B
:10FD800098E09F938F93809100016AE00E94A09178
:10FD9000892F99279F938F93809100010E94A091B2
:10FDA00099279F938F9380E89FE09F938F9384E997
:10FDB0009BE89F938F93E0913B05F0913C0509955B
:10FDC00069CF8AE20E94C28B81E99FE09F938F9363
:10FDD000C4E9DBE8DF93CF93E0913B05F0913C056C
:10FDE0000995809170090F900F900F900F9080FFF0
:10FDF00041C0809190079091730181FD0BC0892FC4
:10FE000099279F938F9386E99FE09F938F93DF932A
:10FE1000CF9313CFE0913B05F0913C05933318F05D
:10FE200080EA9FE002C087EA9FE09F938F93DF9371
:10FE3000CF9309950F900F900F900F9080915409D8
:10FE4000E0913B05F0913C059091730180FF0BC060
:10FE5000892F99279F938F938EEA9FE09F938F938B
:10FE6000DF93CF93AFC0892F99279F938F9384EB14
:10FE70009FE0CFC08AEB9FE037C08FE30E94C28B28
:10FE800083EC9FE09F938F93C4E9DBE8DF93CF93EC
:10FE9000E0913B05F0913C0509950F900F900F9074
:10FEA0000F908091E607882319F487EC9FE01CC02F
:10FEB0008091DC03E0913B05F0913C05882319F02B
:10FEC00080ED9FE002C087ED9FE09F938F93DF93CB
:10FED000CF9309950F900F900F900F908091F1079D
:10FEE00086FFC8C18EED9FE09F938F93DF93CF93E2
:10FEF00092C184E50E94C28B85EE9FE09F938F9311
:10FF0000C4E9DBE8DF93CF93E0913B05F0913C053A
:10FF10000995809170090F900F900F900F9085FDBB
:10FF200003C08AEE9FE011C08091D407883F10F48F
:10FF3000E82F07C0EFEFF0E0E81BF109E85FFB4FA7
:10FF4000E081E23358F483EF9FE09F938F93DF9338
:10FF5000CF93E0913B05F0913C0516C0E43B18F0CF
:10FF60008AEF9FE0F2CF8091F107E0913B05F0919D
:10FF70003C0585FF03C081E090E102C088E090E18C
:10FF80009F938F93DF93CF9309950F900F900F90CE
:10FF90000F908091EA07882309F46CC18EE50E94D6
:10FFA000C28B8091EA0799279F938F938FE090E10E
:10FFB0009F938F9384E99BE89F938F93E0913B05F8
:10FFC000F0913C0509958DB79EB706968DBF52C13D
:10FFD00089E60E94C28B8AE190E19F938F93C4E9E6
:10FFE000DBE8DF93CF93E0913B05F0913C05099569
:10FFF0000F900F900F900F908091E907E0913B05D3
:020000021000EC
:10000000F0913C05882351F099279F938F9384E2C8
:1000100090E19F938F93DF93CF9313CE88E290E18B
:100020009F938F93DF93CF93FAC080911B05A4E930
:10003000EA2EABE8FA2E882309F053C08EE70E941F
:10004000C28B8091670199279F938F938091850739
:10005000E82FFF27EE0FFF1FE954F74F80819181B2
:100060009F938F9380918407E82FFF27EE0FFF1F48
:10007000E954F74F808191819F938F938EE290E1B5
:100080009F938F93FF92EF92E0913B05F0913C0597
:10009000099583E90E94C28B8DB79EB70A968DBFE2
:1000A00080918707E82FFF27EE0FFF1FE954F74FD6
:1000B000808191819F938F9380918607E82FFF27FE
:1000C000EE0FFF1FE954F74F8081918181589F4FB8
:1000D0009F938F9382E490E19F938F93FF92EF928F
:1000E00041CE8EE70E94C28B80910A0499279F938C
:1000F0008F938091090499279F938F93809108048F
:1001000099279F938F9381E590E19F938F93FF921F
:10011000EF92E0913B05F0913C05099583E90E943F
:10012000C28B8DB79EB70A968DBF80910D0499271B
:100130009F938F9380910C0499279F938F93809125
:100140000B0499279F938F9385E690E19F938F935C
:10015000FF92EF92E0913B05F0913C0509952DB798
:100160003EB7265F3F4F2DBF85C080912305882372
:1001700009F480C08EE70E94C28B8091700986FDD1
:1001800011C089E790E19F938F9385EB9BE89F9344
:100190008F93E0913B05F0913C0509950F900F90EE
:1001A0000F900F908091EF0799278F709070892B97
:1001B00089F088E890E19F938F9385EB9BE89F936C
:1001C0008F93E0913B05F0913C0509950F900F90BE
:1001D0000F900F908091700982FF11C082E990E129
:1001E0009F938F9385EB9BE89F938F93E0913B05C3
:1001F000F0913C0509950F900F900F900F90809112
:10020000700983FD37C087E990E19F938F9385EB59
:100210009BE89F938F93E0913B05F0913C050995F6
:100220000F900F900F900F9025C00091AC0B0630EF
:1002300089F480911B05882319F010921B0503C0D7
:1002400081E080931B0586E00E94577387E00E943F
:10025000577308C0013031F40E94C78B0093180512
:10026000109217051092AC0B05C01092170502C032
:1002700010921805E6E0CDB7DEB70C9438924FB770
:1002800028E130E0F8948091C9008F778093C9000D
:100290008091C9008F7B8093C9008091C9008F7DB8
:1002A0008093C9005A9A52985B9A539A832F992740
:1002B0008093CD002093CC008091C8008260809311
:1002C000C80080E18093C9008091CA008F77809335
:1002D000CA008091CA008F7B8093CA008091CA00B7
:1002E0008091CA008F7E8093CA008091CA00886086
:1002F0008093CA008091C9008B7F8093C900809150
:10030000CA0084608093CA008091CA008260809392
:10031000CA008091C80087FF03C08091CE00F9CF4A
:100320008091C90080688093C90080918A0B8460A5
:1003300080938A0B4FBF08959091F604992341F45E
:100340008F3031F490931D0580E58093F604089575
:10035000E0911D05EF5FE0931D05E83121F481E098
:1003600080931C050895E93120F089E180931D05F3
:100370000895FF27ED58F44F80830895A0E0B0E082
:10038000E4ECF1E80C94189291E0D92E82E0A82ECA
:10039000BD2CE12C01E0F02E80918A0B82FDB5C0CE
:1003A00080916F008F7D80936F00E091EC07EE23CA
:1003B00051F0FF27EE0FFF1FE954F74F8081918125
:1003C000843691055CF480910704883C20F4809188
:1003D00007048C5E01C088EC809307048091740B45
:1003E000682F772780911E05815080931E058F3FCF
:1003F00031F41CE7C12E82E080931E0502C0C4E2E6
:10040000CC2E40E04C1508F07EC0EA2DFF27ED58B9
:10041000F44F80818D2111F06E297F298D2D992730
:10042000880F991FD82E882319F4B1E0DB2EAD0C6C
:10043000EE0CFF1C20E0E21628E0F20609F061C095
:10044000A1E0EA2EF12CCB018050944065E070E0F1
:100450000E94C091AB2DBB27FD01EA0FFB1FE954A1
:10046000F74F808191819C01220F331F280F391F84
:10047000260F371F37FF02C02D5F3F4FE901D5958B
:10048000C795D595C795CB0101968C179D0714F498
:10049000219706C061507040C617D7070CF421960B
:1004A00080910704833CD8F08D010A0F1B1FF801CF
:1004B000E954F74F80819181FE01E81BF90BCF01D0
:1004C00063E070E00E94C091CB01880F991F860FF6
:1004D000971F0551174FF8019183808307C0AA0F1A
:1004E000BB1FA551B74F11961C921E92EB2DFF27F3
:1004F000EE0FFF1FE954F74FD183C08360E070E037
:10050000B3944F5F7FCF10923A0110921C05EAE03E
:10051000CDB7DEB70C9434920895089540E050E0D2
:1005200080911F05909120059C01220F331F280FF9
:10053000391F8091170390911803280F391F37FF37
:1005400002C02D5F3F4F3595279535952795309300
:10055000200520931F0580913B018B32D9F48091B7
:100560009507282F33278091FB039091FC03829FEE
:10057000A001839F500D929F500D1124CA0157FD79
:100580004F96AC0125E0559547952A95E1F74B5FCD
:100590005F4F3DC08D32D9F480919507282F3327C6
:1005A0008091FB039091FC03829FA001839F500DDB
:1005B000929F500D1124CA0157FD4F96AC0195E052
:1005C000559547959A95E1F74550504020C08032A7
:1005D00071F48091CF0381FF1AC0C90137FD4F9696
:1005E000AC0185E0559547958A95E1F710C08E35A9
:1005F00029F48091F603482F552709C0863739F42E
:100600008091F603992744275527481B590BCA01A7
:10061000AA2797FDA095BA2F8093900290939102FC
:10062000A0939202B093930208950F931F930E9498
:10063000117380911F0190912001AA2797FDA09529
:10064000BA2F8093BF019093C001A093C101B093D2
:10065000C2018091100A9091110AAA27BB278093AA
:10066000D2019093D301A093D401B093D5010AE0B5
:1006700010E08091140A9091150AB8010E94AC9183
:10068000CB01AA27BB278093E5019093E601A093B5
:10069000E701B093E8018091010490910204A091D8
:1006A0000304B0910404BC01CD0124E630E040E035
:1006B00050E00E94F5912093F8013093F9014093A6
:1006C000FA015093FB018091880190918901AA273A
:1006D00097FDA095BA2F80930B0290930C02A093E4
:1006E0000D02B0930E0280918C099927AA27BB278F
:1006F00080931E0290931F02A0932002B0932102C8
:1007000080918E099927AA27BB2780933102909365
:100710003202A0933302B093340280918F099091FA
:100720009009B8010E94AC91CB01AA27BB27809306
:10073000440290934502A0934602B09347028091F1
:10074000910990919209AA2797FDA095BA2F8093BD
:10075000570290935802A0935902B0935A02809185
:1007600007059927AA27BB2780936A0290936B02FB
:10077000A0936C02B0936D028091E1049927AA279F
:10078000BB2780937D0290937E02A0937F02B0935B
:1007900080028091E2049927AA27BB278093A302B5
:1007A0009093A402A093A502B093A6021F910F916B
:1007B0000895002422273327442751E0BB27EE2742
:1007C000FF27A0E1660F771F881F991F001C221FBB
:1007D000331F441F660F771F881F991F001C221F9D
:1007E000331F441F2AF4050E2B1F3E1F4F1F04C04A
:1007F000051A2B0B3E0B4F0B550FBB1FEE1F587FDF
:10080000556047FD5250AA95E9F6E695B79557957C
:10081000E695B7955795852F9B2F08952227332767
:1008200041E0552768E0880F991F221F331F880F6A
:10083000991F221F331F1AF4240F351F02C0241BD7
:10084000350B440F551F487F456037FD42506A9570
:1008500051F75695479556954795842F0895AA27A1
:1008600097FF04C0809590958A1F9A1F77FF04C058
:10087000609570956A1F7A1F669F9001779FA0010F
:10088000679F300D411D5A1F300D411D5A1F889F13
:10089000F001999F2E0F3F1F401D511D899F300D64
:1008A000411D5A1F300D411D5A1FCA01B9011124A3
:1008B00080CF4FB720E430E0F8948091C9008F7763
:1008C0008093C9008091C9008F7B8093C90080917B
:1008D000C9008F7D8093C9005A9A52985B9A539AA7
:1008E000832F99278093CD002093CC008091C8005E
:1008F00082608093C80088E18093C9008091CA001B
:100900008F778093CA008091CA008F7B8093CA0042
:100910008091CA008F7D8093CA008091CA008F7E2B
:100920008093CA008091CA00877F8093CA0080911B
:10093000C9008B7F8093C9008091CA008460809336
:10094000CA008091CA0082608093CA008091C8006A
:1009500087FF03C08091CE00F9CF8091C9008068E5
:100960008093C9004FBF08950F931F93CF93DF93D8
:10097000482F4F5F893108F08BC08091B6088417EB
:1009800020F44F5F4093B6084150CB0183539B4204
:1009900068E170E00E94C091A42FBB27FD01EA0F1F
:1009A000FB1FE954F74F808191819B01281B390B74
:1009B000C90137FF03C0909581959F4F069794F426
:1009C00080910704883C30F480910704865F80930F
:1009D000070408C088EC8093070480916F008F7D26
:1009E00080936F00FD01EA0FFB1FE954F74F8081F0
:1009F00091819C01220F331F280F391F260F371FAB
:100A000037FF02C02D5F3F4FE901D595C795D595BA
:100A1000C795CB0101968C179D0714F4219706C04A
:100A200061507040C617D7070CF4219680910704D7
:100A3000843BD8F08D010A0F1B1FF801E954F74FD2
:100A400080819181FE01E81BF90BCF0163E070E02A
:100A50000E94C091CB01880F991F860F971F0551E7
:100A6000174FF8019183808307C0AA0FBB1FA551C0
:100A7000B74F11961C921E92E42FFF27EE0FFF1F17
:100A8000E954F74FD183C083443011F410923A01F6
:100A9000DF91CF911F910F910895CF93DF93209114
:100AA000AD0B822F9927807F9070409709F06CC022
:100AB0002F3109F046C08091AE0B80932A0520911A
:100AC000B00B20932C058091B10B80932B05822FC6
:100AD00099279093B8088093B708222309F054C04F
:100AE00080918407282F3327220F331FF901E55106
:100AF000F74F1182108280918507A82FBB27AA0F7C
:100B0000BB1FFD01E551F74F1182108280918707CD
:100B1000E82FFF27EE0FFF1FCF018551974FEC0104
:100B2000198218822954374FE90119821882A95471
:100B3000B74F11961C921E92E954F74F1182108202
:100B400023C0C22FCF70CA30F8F48091AE0B8093CF
:100B5000D90B8091AF0B8093D80B8091B00B809311
:100B6000DB0B8091B10B8093DA0B6091D80B709105
:100B7000D90B8C2F0E94B4846091DA0B7091DB0B3F
:100B80008C2F8F5F0E94B484DF91CF910895CF9313
:100B9000C82F8F3F49F480912D058F3F29F4109283
:100BA0002F0510922E0532C020912F05222339F4F3
:100BB000CF3111F485E001C084E08093300580914D
:100BC000300590912E058217A0F4892F809580938F
:100BD0002E058F3F19F48EEF80932E0580912E0500
:100BE000C81711F40E944D8510922F0510922E0502
:100BF0000BC0E22FFF27E355F44FC0832F5F2093F4
:100C00002F059C0F90932E05C0932D05CF9108952D
:100C100090912905933240F4E92FFF27EB54F44FCC
:100C200080839F5F909329050895833218F48D5F28
:100C300080932905089590E2E8EBFBE08FE1919322
:100C4000815087FFFCCF0895CF93CFB723E031E0E9
:100C5000F8948091C9008F778093C9008091C90072
:100C60008F7B8093C9008091C9008F7D8093C900DC
:100C70005A9A52985B9A539A832F99278093CD0062
:100C80002093CC008091C80082608093C80088E1E6
:100C90008093C9008091CA008F778093CA008091A9
:100CA000CA008F7B8093CA008091CA0080628093C3
:100CB000CA008091CA0080618093CA008091CA00F6
:100CC00088608093CA008091C90084608093C900C5
:100CD0008091CA0084608093CA008091CA008260BB
:100CE0008093CA008091C80087FF03C08091CE0026
:100CF000F9CF8091C90080688093C9008091C900B4
:100D000080648093C9000E941B86CFBFCF91089555
:100D1000282F99278F709070892B31F4209580911E
:100D20002805822B8093280508951F920F920FB6F5
:100D30000F9211248F93EF93FF938091D002882319
:100D400009F068C0E0913205EE2389F48091310505
:100D5000882369F48091B50B882321F081E080938A
:100D6000330505C08091C90081608093C9008091DE
:100D70003305882379F4EF5FE093320580918C0B83
:100D80008E1720F481E0809333051CC0FF27E457C1
:100D9000F44F3CC080913105882361F48091B50BFC
:100DA000882311F483E003C0813999F481E08093B2
:100DB00031050FC0833099F48091B50B882349F039
:100DC0001092B50B8091C9008E7F8093C9008EEF81
:100DD0001EC08091C90081608093C9000EC083321B
:100DE00061F48091C9008E7F8093C9008FEF80935A
:100DF000CE0081E08093D00218C080913105E82FA9
:100E0000FF27EB54F44F8F5F8093310580818093EF
:100E1000CE000BC0109231051092320510923305AE
:100E20008091C90080618093C900FF91EF918F91FB
:100E30000F900FBE0F901F901895682727E0322F54
:100E400067FF06C0862F9927880F991F832702C046
:100E5000862F880F682F215027FFF2CF99270895FA
:100E60000F931F93CF93DF93062F60E0162F601729
:100E700040F4EC0189910E941D87682F1F5F1017B5
:100E8000C8F3862F9927DF91CF911F910F91089575
:100E9000DC0190E0961758F48C91803241F09F5F0E
:100EA000961728F4FD01E90FF11D8081F6CF892FF7
:100EB00099270895A0E0B0E0E0E6F7E80C941992D5
:100EC0008FE980938D0B80E180938F0B84EA809370
:100ED000900B85E58093910B8DE58093920B10929A
:100EE000930B80913505882309F06AC08091340501
:100EF00013E1819FC001112463E088559E4F0E9439
:100F00004887082F80913405819FC00111246AE031
:100F100082569E4F0E944887982F800F865F80934D
:100F20008C0B4EEFB42EB80EB0928E0B2091340580
:100F30002093940BE92EFF24C70133E0880F991FFB
:100F40003A95E1F7802B8093950B822F992723E127
:100F5000C22ED12C8C9D90018D9D300D9C9D300D0D
:100F60001124C90182569E4FA701BC0186E99BE06E
:100F70000E94E18F11278091340599278C9DE00113
:100F80008D9DD00D9C9DD00D1124CE0188559E4F76
:100F9000A801BC01C7018A56944F0E94E18F0457F3
:100FA000144F0E0D1F1D6B2D8EE89BE00E943087A5
:100FB000F8018287809135058F5F8093350570C079
:100FC0001091930B0E9415834091D1024031C8F5D6
:100FD00063E170E0812F9927DC01AA0FBB1FA80FE6
:100FE000B91FA457B44F842F9927869FF001879F7C
:100FF000F00D969FF00D1124E256FE4F2585C4E0BA
:10100000880F991FCA95E1F7282BED0128872685BF
:1010100037853F7982899927982F88279295990F4C
:10102000907E282B392B2987832F99278A87842F15
:101030008F5F1F5F163018F4482F803158F280936D
:10104000D10283E0189F90011124822F885F809342
:101050008C0B825C80938E0B812F99278C01000F63
:10106000111F080F191F0457144F822F8A5F682F12
:101070008EE89BE00E943087F80180878091D10242
:10108000803170F081E08093D1021092350580911B
:1010900034058F5F80933405803110F01092340551
:1010A000E9E0CDB7DEB70C9435928091D002882369
:1010B00009F447C08091CF0385FD04C08091D4021C
:1010C000882381F082E98093B50B83E28093B60B8D
:1010D0008091D402882309F485E58093B70B1092A0
:1010E000D40202C08093B50B8091D2028F3071F48C
:1010F000809128050E943A72882341F081E980930B
:10110000B50B8093B60B81E38093B70B1092D0029E
:101110008091C80085FFFCCF8091C9008F7E8093AD
:10112000C9008091C9008E7F8093C9000E945A87B0
:101130008EE78093CE00809128058093D202109292
:1011400028050895EF92FF920F931F93CF93DF939B
:101150007C018B01EA01452B39F0F80181918F0167
:10116000F70109952197C9F7E6E0CDB7DEB70C94F2
:101170003892EF92FF920F931F93CF93DF937C01EE
:101180008B01EA01452B41F0F8010F5F1F4F84915D
:10119000F70109952197C1F7E6E0CDB7DEB70C94CA
:1011A00038920F931F93CF938C01C62F161634F4E9
:1011B00080E2F8010995C1501C16D4F3CF911F911C
:1011C0000F9108950F931F93CF938C01C62F16167E
:1011D00034F480E3F8010995C1501C16D4F3CF9183
:1011E0001F910F910895A5E3B0E0E9EFF8E80C94A2
:1011F00010922E96EEADFFAD2E97882499245401BF
:1012000080912205882321F42C961FAE1EAE2C97C8
:10121000AEE44A2E512C4C0E5D1E6F01B60105C086
:10122000153239F00894C11CD11CF6011491112318
:10123000B9F7A601461B570B31F02C968EAD9FAD2A
:101240002C970E94B988112309F46AC20894C11C22
:10125000D11CFF24FDA6FCA6FFEFEF2EF9A6F60198
:101260000894C11CD11C1491153721F0812F806284
:101270008837B1F4F0FE0AC0F20124E030E0420EFB
:10128000531E80809180A280B3800AC0F20142E0A8
:1012900050E0440E551E808191814C01AA24BB244C
:1012A000103221F489A58823D1F61DC0133219F418
:1012B00058E0F52AD4CF1A3211F01D3291F41A32C7
:1012C00059F4F20182E090E0480E591EE081ECA74B
:1012D000EE232CF6E195ECA790E1F92AAFEDFA2286
:1012E000BECF1B3211F419A7BACF1E32C1F5F601D9
:1012F0000894C11CD11C14911A3279F4F20122E035
:1013000030E0420E531E408151813FEF4F3F530763
:1013100014F44FEF5FEFE42EA2CF40E050E0812FB6
:1013200080538A30A0F4CA01E3E0880F991FEA9540
:10133000E1F7840F951F480F591F410F511D40536E
:101340005040F6010894C11CD11C1491E8CF8FEFD6
:101350004F3F580714F44FEF5FEFE42E85CF103363
:1013600029F4F4FC7CCF90E2F92A79CF812F8153C4
:101370008930D8F440E050E0CA0173E0880F991F2B
:101380007A95E1F7840F951F480F591F410F511DA2
:1013900040535040F6010894C11CD11C1491812F78
:1013A00080538A3048F34CA75FCF183619F4A4E075
:1013B000FA2A55CF1C3619F4B1E0FB2A50CF133668
:1013C00061F43E010894611C711CF20122E030E0DE
:1013D000420E531E808189833CC1143421F014369F
:1013E00011F0193651F5143411F431E0F32AF0FEFE
:1013F0000AC0F20144E050E0440E551E8080918006
:10140000A280B3800CC0F20182E090E0480E591E29
:10141000808191814C01AA2497FCA094BA2CB7FE3C
:101420000AC0B094A09490948094811C911CA11C3B
:10143000B11C8DE289A70AE06FC01F3411F01F367E
:1014400031F41F3411F491E0F92A08E064C0103738
:1014500079F4F201A2E0B0E04A0E5B1E8081918136
:101460004C01AA24BB2400E1B0E4FB2A18E753C0D6
:101470001337C1F5F20122E030E0420E531E6080C6
:1014800071806114710489F43E010894611C711C1F
:1014900088E289838EE6F301818385E78B838CE67E
:1014A0008C838D8389E28E831F82E7FC13C08E2D8F
:1014B000992787FD9095AC0160E070E0C3010E9420
:1014C000D48F009729F0382E3618E3140CF0C3C0DF
:1014D0003E2CC1C0F30101900020E9F731973E2E68
:1014E0003618B9C0153511F0153731F4153511F42A
:1014F000F1E0FF2A0AE00FC0183519F0183709F09B
:10150000A0C000E1F3FE07C081149104A104B1045E
:1015100011F020E4F22A19A6EDA6E7FC02C03FED87
:10152000F32269E2662E712C6C0E7D1E81149104EB
:10153000A104B10421F44DA5442309F47BC0802FFC
:101540009927AA27BB278EA79FA7A8ABB9AB202EA8
:10155000332490E0891690E0990691E0A90690E086
:10156000B90648F0C501B4012EA53FA548A959A95F
:101570000E94D39117C0AFEF8A169104A104B10461
:1015800049F040F0C401B1010E94AC919B01442795
:10159000552708C0882D602F0E94A091282F33273F
:1015A000442755272AAB3BAB4CAB5DAB0A3059F413
:1015B0008AA9880F880F880F9AA9990F890F382D4B
:1015C000381B832F10C0003139F48AA98295807F9F
:1015D000482D481B842F07C08AA9880F880F880FC1
:1015E000582D581B852F90E02EA53FA548A959A935
:1015F00082169306A406B50608F091E08AA89BA877
:10160000ACA8BDA88A3010F4805D04C0895A183592
:1016100009F48F7DD3018E933D01992309F099CF71
:10162000083041F4F3FE06C0803321F080E3FD0171
:1016300082933F01CE010196382E3618F8E23F0E14
:101640000BC0112309F46CC03E010894611C711C8D
:10165000198351E0352E19A6032D2DA4231827FC3C
:10166000222489A5882311F00F5F02C0F6FC0E5FCB
:10167000020DEF2CFF24C70180739070892B49F471
:101680008CA5801B682F2C968EAD9FAD2C970E9449
:10169000D18889A5882331F041E050E0BE01675D23
:1016A0007F4F0AC0E6FE0EC080E38AA71BA742E078
:1016B00050E0BE01665D7F4F2C968EAD9FAD2C979E
:1016C0000E94A288C70180739070809749F48CA50E
:1016D000801B682F2C968EAD9FAD2C970E94E288C0
:1016E000622D2C968EAD9FAD2C970E94E288832DA3
:1016F000992787FD9095AC01B3012C968EAD9FADD7
:101700002C970E94A288E4FE89CD2CA5201B2CA733
:10171000622F2C968EAD9FAD2C970E94D1887ECDE6
:10172000E2E1CB5C0C942C92982F8091B40B883A18
:1017300050F48091B40BE82FFF27E556F54F9383C3
:101740008F5F8093B40B0895982F8091B40B883AE3
:1017500058F48091B40BE82FFF27E556F54F9068B9
:1017600093838F5F8093B40B0895982F8091230506
:10177000882321F0892F0E94A48B0895892F0E942D
:10178000948B0895883A10F48093B40B089580E008
:1017900090E2EEE9FAE091938F5F883AE0F30895E2
:1017A0004FB721E830E0F8948091C9008F7780939B
:1017B000C9008091C9008F7B8093C9008091C900C6
:1017C0008F7D8093C9005A9A52985B9A539A832FBF
:1017D00099278093CD002093CC008091C80082602F
:1017E0008093C80088E18093C9008091CA008F77F8
:1017F0008093CA008091CA008F7B8093CA00809139
:10180000CA008F7D8093CA008091CA008F7E80932A
:10181000CA008091CA00877F8093CA008091C90066
:1018200084608093C9008091CA0084608093CA005C
:101830008091CA0082608093CA008091C900816053
:101840008093C9008091C80087FF03C08091CE00BB
:10185000F9CF8091C90080688093C9004FBF3CE7F1
:101860003093170A2DE72093420A8EE88093180AD6
:101870001092340A1092330A10921D0A80EE80935F
:101880001A0A30936F0A20939A0A10927B0A1092D8
:101890007A0A10927D0A10927C0A10927F0A1092A6
:1018A0007E0A84EF91E09093790A8093780A90936E
:1018B000770A8093760A9093750A8093740A10923F
:1018C000710A89E88093700A1092980A1092990A16
:1018D00080E98093720A3093470B2093720B109229
:1018E000490B8AE88093480B10924F0B10924E0BD5
:1018F00010924D0B1092510B1092520B1092530BF1
:101900001092540B1092560B1092570B1092580BCA
:101910001092590B10925D0B10925C0B10925B0BA6
:1019200010925A0B80EA80934A0B3093430A20931B
:101930006E0A1092450A8DE88093440A10926D0A4F
:1019400080ED8093460A8BE780939B0A80E8809322
:101950009C0A10929D0A80911D0A90E2EEE9FAE03D
:1019600091938F5F883AE0F38DE78093460B08955B
:10197000CF93C82F80913605803879F48C2F0E9440
:1019800066748093250580912505882331F1C093E5
:10199000B30B809125058F5F16C08F37F1F48091CE
:1019A000AC0B882329F48C2F80958F708093AC0B1F
:1019B0000E946F7380939D0A8BE99AE090932705AC
:1019C000809326058DEA809325058091C9008F7E3E
:1019D0008093C90082E080932405C0933605CF919F
:1019E000089530912405332331F0809124058150EE
:1019F00080932405089580912505882381F14091E5
:101A0000250590913705413091F4292F3093370502
:101A10008091C90080618093C9008091230588234B
:101A200019F03093230510C0409323050DC0E091B9
:101A30002605F09127058191F0932705E09326056F
:101A4000282F980F909337058091C80085FFFCCF11
:101A50002093CE008091250581508093250508951F
:101A60002FB740E0F894E0E0F0E081E28093570087
:101A70009491E2E0F0E0809357003491E4E0F0E0EC
:101A80008093570084912FBF9E3199F4363941F4E9
:101A9000893011F441E00DC08A3059F442E009C0A8
:101AA000373939F4863011F443E003C0853009F446
:101AB00044E0842F992708959FB7F8948091C90036
:101AC000877F8093C9008091C9008F7E8093C90071
:101AD0008091C9008F778093C9008091C9008F7B66
:101AE0008093C9008091C9008F7D8093C90052986E
:101AF0005A9A53985B9A9FBF08951F93CF93DF9391
:101B0000182F80912205882309F4A7C08091CF0265
:101B1000181709F4A2C080912105882321F40E949E
:101B2000308D8093210582ED91E09093390180936F
:101B3000380189E791E19F938F93C0E6D5E1DF9368
:101B4000CF93E0913B05F0913C0509950F900F90E4
:101B50000F900F90812F9927AA27BB27FC01099787
:101B600078F5E554FF4F20913B0530913C050C94EE
:101B7000479285E791E102C08CE691E19F938F93B4
:101B8000DF93CF93F901099527C087E691E1F6CF5E
:101B90008FE591E1F3CF87E591E19F938F93DF93F9
:101BA000CF93F901099588ED91E0909339018093E5
:101BB000380112C082E591E1E1CF86E891E1DECF04
:101BC0008CE891E19F938F93DF93CF93E0913B0556
:101BD000F0913C05099510E00F900F900F900F9039
:101BE00080912105843011F0823011F50E945C8DC6
:101BF000812F8150833018F40E94656F2CC01430FF
:101C000019F40E94248627C0183019F40E948C828F
:101C100022C0153019F40E9459841DC0163019F4E1
:101C20000E94D08B18C01730B1F40E943F8113C0BE
:101C3000112389F082EA91E19F938F9380E695E1E9
:101C40009F938F93E0913B05F0913C0509950F9090
:101C50000F900F900F901093CF02DF91CF911F91B3
:101C600008950F931F9381E0809322054091CE0247
:101C7000E2E0F1E120E030E05FE4849199272F5F1A
:101C80003F4F829FB001839F700D929F700D112472
:101C900046275150319657FFF0CF4093CE02EAEDE0
:101CA000F0E120E030E057E2849199272F5F3F4F29
:101CB000829FB001839F700D929F700D1124462763
:101CC0005150319657FFF0CF4093CE0280912105BD
:101CD000882321F40E94308D809321058091CE02CB
:101CE000833459F088E190E029E20FB6F894A89582
:101CF000809360000FBE2093600083EF98E890937C
:101D00003C0580933B050E944A0984E690E09F933E
:101D10008F938AE590E09F938F931F921F928091FB
:101D200001016AE00E94A091892F99279F938F93C8
:101D3000809101010E94A09199279F938F938DEB31
:101D400091E19F938F9300E615E11F930F93E0912C
:101D50003B05F0913C05099582E091E19F938F93BB
:101D60001F930F93E0913B05F0913C0509958AED97
:101D700090E19F938F931F930F93E0913B05F09118
:101D80003C0509950E944A0983EC8093810080916B
:101D90006F00806280936F008DB79EB746968DBFAF
:101DA0001F910F9108958091EA078D3338F080914B
:101DB0008B0987FD03C08CE38093EA078091990724
:101DC000882331F08055853618F08FE78093990786
:101DD000089580912205882309F477C08091380501
:101DE000815080933805882309F053C089E180939E
:101DF00038058091EA078E3338F080918B0987FD92
:101E000003C08DE38093EA0780910704823820F5B0
:101E10008091D0039091D103805D974020F0809114
:101E2000160A843620F410923A05109239058091F2
:101E3000390590913A05009739F1019790933A0549
:101E400080933905419728F180918B0984FF21C047
:101E50008091CE0384601BC080910704853BC8F04D
:101E60009091EA0784E1989FC00111244096209147
:101E7000390530913A052817390730F42F5F3F4F65
:101E800030933A05209339058091CE038B7F809360
:101E9000CE039091CF02963019F40E94F18C0FC0BE
:101EA0008091D302882321F081508093D30208953A
:101EB0008BE48093D302943011F40E945588809172
:101EC000CE02833411F01092220508951F920F92D2
:101ED0000FB60F9211242F933F934F935F936F93FD
:101EE0007F938F939F93AF93BF93EF93FF93209133
:101EF000CE008091DE028823B1F02093C60080914D
:101F0000DE028230B9F52F3FA9F58FEF94E3ACE004
:101F1000B0E0C297A109B109B7FFFBCF80917E0560
:101F20008093CE0027C09091CF02892F81508330BB
:101F300020F4822F0E94C06F1DC0943021F4822FA4
:101F40000E94888617C0983021F4822F0E948D82CB
:101F500011C0953021F4822F0E94C7850BC09630A6
:101F600021F4822F0E94B88C05C0973019F4822F7B
:101F70000E949C81FF91EF91BF91AF919F918F91B2
:101F80007F916F915F914F913F912F910F900FBE75
:101F90000F901F901895FB01DC0102C005900D9277
:101FA00041505040D8F70895FC014150504030F066
:101FB00001900616D1F73197CF0108958827992708
:101FC0000895FB01DC0102C001900D924150504088
:101FD000D8F70895A0E0B0E0E0EFFFE80C94189285
:101FE0006C017B01EA01590121978FEFCF3FD807A0
:101FF00089F086010894C11CD11CC7010894E11C1A
:10200000F11CF5010995F80180832197FFEFCF3F7F
:10201000DF0779F7EAE0CDB7DEB70C943492CF92C0
:10202000DF92EF92FF920F931F937C016B01FB01F4
:102030000995082FC7010196F6010995182FC801C7
:102040001F910F91FF90EF90DF90CF900895A0E047
:10205000B0E0EDE2F0E90C941A928C017B01EA0108
:10206000690121978FEFCF3FD80771F0F7012191D8
:102070007F01C8010F5F1F4F622FF601099521975D
:10208000FFEFCF3FDF0791F7E8E0CDB7DEB70C9465
:102090003692CF92DF92EF92FF920F931F936C01D3
:1020A0008B017A01FA010995812F9927682FC601C2
:1020B0000196F70109951F910F91FF90EF90DF9026
:1020C000CF9008955058BB27AA270ED0E0C0D1D09A
:1020D00030F0D6D020F031F49F3F11F41EF4C6C08A
:1020E0000EF4E095E7FBBCC0E92FE2D080F3BA170D
:1020F000620773078407950718F071F49EF5FAC01C
:102100000EF4E0950B2EBA2FA02D0B01B901900112
:102110000C01CA01A0011124FF27591B99F0593F56
:1021200050F4503E68F11A16F040A22F232F342F9E
:102130004427585FF3CF469537952795A795F040EC
:102140005395C9F77EF41F16BA0B620B730B840B01
:10215000BAF09150A1F0FF0FBB1F661F771F881FB9
:10216000C2F70EC0BA0F621F731F841F48F4879511
:1021700077956795B795F7959E3F08F0B3CF939500
:10218000880F08F09927EE0F97958795089598D0B6
:1021900088F09F5790F0B92F9927B751A0F0D1F050
:1021A000660F771F881F991F1AF0BA95C9F712C0DA
:1021B000B13081F09FD0B1E008959CC0672F782F97
:1021C0008827B85F39F0B93FCCF386957795679546
:1021D000B395D9F73EF490958095709561957F4FB2
:1021E0008F4F9F4F0895E89409C097FB3EF4909558
:1021F0008095709561957F4F8F4F9F4F9923A9F0E0
:10220000F92F96E9BB279395F6958795779567956E
:10221000B795F111F8CFFAF4BB0F11F460FF1BC0B2
:102220006F5F7F4F8F4F9F4F16C0882311F096E945
:1022300011C0772321F09EE8872F762F05C06623F3
:1022400071F096E8862F70E060E02AF09A95660FAC
:10225000771F881FDAF7880F9695879597F9089565
:1022600097F99F6780E870E060E008959FEF80EC49
:10227000089500240A9416161706180609060895EC
:1022800000240A9412161306140605060895092E52
:102290000394000C11F4882352F0BB0F40F4BF2BC1
:1022A00011F460FF04C06F5F7F4F8F4F9F4F089501
:1022B00057FD9058440F551F59F05F3F71F04795F7
:1022C000880F97FB991F61F09F3F79F087950895DC
:1022D000121613061406551FF2CF4695F1DF08C0FB
:1022E000161617061806991FF1CF86957105610518
:1022F00008940895E894BB2766277727CB0197F9C0
:102300000895629FD001739FF001829FE00DF11D3F
:10231000649FE00DF11D929FF00D839FF00D749F5F
:10232000F00D659FF00D9927729FB00DE11DF91F0B
:10233000639FB00DE11DF91FBD01CF011124089568
:10234000991B79E004C0991F961708F0961B881F07
:102350007A95C9F780950895AA1BBB1B51E107C068
:10236000AA1FBB1FA617B70710F0A61BB70B881F25
:10237000991F5A95A9F780959095BC01CD010895B4
:1023800097FB092E07260AD077FD04D0E5DF06D09B
:1023900000201AF4709561957F4F0895F6F7909597
:1023A00081959F4F0895A1E21A2EAA1BBB1BFD0128
:1023B0000DC0AA1FBB1FEE1FFF1FA217B307E40724
:1023C000F50720F0A21BB30BE40BF50B661F771F7C
:1023D000881F991F1A9469F760957095809590955C
:1023E0009B01AC01BD01CF01089597FB092E052685
:1023F0000ED057FD04D0D7DF0AD0001C38F450951A
:102400004095309521953F4F4F4F5F4F0895F6F718
:1024100090958095709561957F4F8F4F9F4F089550
:102420002F923F924F925F926F927F928F929F92E4
:10243000AF92BF92CF92DF92EF92FF920F931F93D2
:10244000CF93DF93CDB7DEB7CA1BDB0B0FB6F89483
:10245000DEBF0FBECDBF09942A88398848885F84C3
:102460006E847D848C849B84AA84B984C884DF8034
:10247000EE80FD800C811B81AA81B981CE0FD11D18
:102480000FB6F894DEBF0FBECDBFED010895EE0F7D
:0C249000FF1F0590F491E02D0994FFCF90
:10249C005E0A010164FF010020FFFFC01FC01F0185
:1024AC000101737373FF03007D0000C409C4096448
:1024BC0000104E6F726D616C0051756164726F002B
:1024CC000000000000006400D20101200B05000098
:1024DC00ECFF00020406070808080706040200FEC9
:1024EC00FCFAF9F8F8F8F9FAFCFE00020406070801
:1024FC00086440415A4664640A02969696960840CF
:10250C00403A10FB30380132FF03780090D00300C2
:10251C0090D0030032002064FFFF64200B0A0D0BE7
:10252C000C0E0B0F100B11FA2068010101152D3D3B
:10253C002E4D5F4B2E3D2D00202020010000000071
:10254C0000566F6C746167652020205620200100B6
:10255C000000000143757272656E742020204120CA
:10256C0020010000000001436170616369747920EF
:10257C0020416820010000000002416C74697475F0
:10258C00646520206D2020010000000000436F6D69
:10259C0070617373202020B0202001000000000027
:1025AC005361747320202020202020202001000063
:1025BC00000000537065656420202020206D2F736F
:1025CC0001000000000044697374616E6365202093
:1025DC006D2020010000000000486F6D652D4469DE
:1025EC00722020B020200100000000006D61782EC8
:1025FC0054656D702E20B043200100000000004D8A
:10260C0061676E2E6669656C6425202001000000F0
:10261C000000566172696F202020202020202001AC
:10262C0000000000004572726F72436F64652020D9
:10263C002020010000000000667265692020202027
:10264C002020202020010000000003667265692014
:10265C00202020202020202001000000000370FFFB
:04266C0001010F64F5
:00000001FF
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/Settings.h
--- Spektrum.c (nonexistent)
+++ Spektrum.c (revision 2304)
@@ -0,0 +1,463 @@
+/*#######################################################################################
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit
+#######################################################################################*/
+
+#include "Spektrum.h"
+#include "main.h"
+
+unsigned char SpektrumTimer = 0;
+
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander
+signed char s_exdata[11]; // Data for Spektrum-Expander
+
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in
+{
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3;
+ else PPM_diff[channel] = 0;
+ PPM_in[channel] = value;
+}
+#endif
+
+//--------------------------------------------------------------//
+//--------------------------------------------------------------//
+/*
+void SpektrumBinding(void)
+{
+ unsigned int timerTimeout = SetDelay(10000); // Timeout 10 sec.
+ unsigned char connected = 0;
+ unsigned int delaycounter;
+
+ UCSR1B &= ~(1 << RXCIE1); // disable rx-interrupt
+ UCSR1B &= ~(1<<RXEN1); // disable Uart-Rx
+ PORTD &= ~(1 << PORTD2); // disable pull-up
+
+ printf("\n\rPlease connect Spektrum receiver for binding NOW...");
+
+ while(!CheckDelay(timerTimeout))
+ {
+ if (PIND & (1 << PORTD2)) { timerTimeout = SetDelay(90); connected = 1; break; }
+ }
+
+ if (connected)
+ {
+
+ printf("ok.\n\r");
+ DDRD |= (1 << DDD2); // Rx as output
+
+ while(!CheckDelay(timerTimeout)); // delay after startup of RX
+ for (delaycounter = 0; delaycounter < 100; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+
+ }
+ else
+ { printf("Timeout.\n\r");
+
+
+ }
+
+ DDRD &= ~(1 << DDD2); // RX as input
+ PORTD &= ~(1 << PORTD2);
+
+ SpektrumUartInit(); // init Uart again
+}
+*/
+//############################################################################
+// USART1 initialisation from killagreg
+void SpektrumUartInit(void)
+//############################################################################
+ {
+ // -- Start of USART1 initialisation for Spekturm seriell-mode
+ // USART1 Control and Status Register A, B, C and baud rate register
+ uint8_t sreg = SREG;
+
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
+
+ // disable all interrupts before reconfiguration
+ cli();
+ // disable RX-Interrupt
+ UCSR1B &= ~(1 << RXCIE1);
+ // disable TX-Interrupt
+ UCSR1B &= ~(1 << TXCIE1);
+ // disable DRE-Interrupt
+ UCSR1B &= ~(1 << UDRIE1);
+ // set direction of RXD1 and TXD1 pins
+ // set RXD1 (PD2) as an input pin
+ PORTD |= (1 << PORTD2);
+ DDRD &= ~(1 << DDD2);
+
+ // set TXD1 (PD3) as an output pin
+ PORTD |= (1 << PORTD3);
+ DDRD |= (1 << DDD3);
+
+ // USART0 Baud Rate Register
+ // set clock divider
+ UBRR1H = (uint8_t)(ubrr>>8);
+ UBRR1L = (uint8_t)ubrr;
+ // enable double speed operation
+ UCSR1A |= (1 << U2X1);
+ // enable receiver and transmitter
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1);
+
+ UCSR1B = (1<<RXEN1);
+ // set asynchronous mode
+ UCSR1C &= ~(1 << UMSEL11);
+ UCSR1C &= ~(1 << UMSEL10);
+ // no parity
+ UCSR1C &= ~(1 << UPM11);
+ UCSR1C &= ~(1 << UPM10);
+ // 1 stop bit
+ UCSR1C &= ~(1 << USBS1);
+ // 8-bit
+ UCSR1B &= ~(1 << UCSZ12);
+ UCSR1C |= (1 << UCSZ11);
+ UCSR1C |= (1 << UCSZ10);
+ // flush receive buffer explicit
+ while(UCSR1A & (1<<RXC1)) UDR1;
+ // enable RX-interrupts at the end
+ UCSR1B |= (1 << RXCIE1);
+ // -- End of USART1 initialisation
+ // restore global interrupt flags
+
+ SREG = sreg;
+ return;
+ }
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) Rainer Walther
+// + RC-routines from original MK rc.c (c) H&I
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2
+// + only for non-profit use
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//
+// 20080808 rw Modified for Spektrum AR6100 (PPM)
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only)
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels)
+// Replace AR6100-coding with original composit-signal routines
+//
+// ---
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben!
+// Binding is not implemented. Bind with external Receiver.
+// Servo output J3, J4, J5 not serviced
+//
+// Anschuß Spektrum Receiver
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!)
+// Schwarz: GND
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker
+//
+// ---
+// Satellite-Reciever connected on USART1:
+//
+// DX7/DX6i: One data-frame at 115200 baud every 22ms.
+// DX7se: One data-frame at 115200 baud every 11ms.
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data (FLT-Mode)
+// byte5: and byte6: channel data (Roll)
+// byte7: and byte8: channel data (Nick)
+// byte9: and byte10: channel data (Gier)
+// byte11: and byte12: channel data (Gear Switch)
+// byte13: and byte14: channel data (Gas)
+// byte15: and byte16: channel data (AUX2)
+//
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9
+// 1st Frame:
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data
+// byte5: and byte6: channel data
+// byte7: and byte8: channel data
+// byte9: and byte10: channel data
+// byte11: and byte12: channel data
+// byte13: and byte14: channel data
+// byte15: and byte16: channel data
+// 2nd Frame:
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data
+// byte5: and byte6: channel data
+// byte7: and byte8: 0xffff
+// byte9: and byte10: 0xffff
+// byte11: and byte12: 0xffff
+// byte13: and byte14: 0xffff
+// byte15: and byte16: 0xffff
+//
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as:
+//
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
+//
+// 0 means a '0' bit
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only)
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter)
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel
+//
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#define MIN_FRAMEGAP 68 // 7ms
+#define MAX_BYTEGAP 3 // 310us
+
+
+//############################################################################
+// Wird im UART-Interrupt aufgerufen
+//############################################################################
+void SpektrumParser(unsigned char c)
+{
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0;
+ unsigned int Channel, index = 0;
+ signed int signal = 0, tmp;
+ int bCheckDelay;
+// c = UDR1; // get data byte
+ if(ReSync == 1)
+ {
+ // wait for beginning of new frame
+ ReSync = 0;
+ SpektrumTimer = MIN_FRAMEGAP;
+ FrameCnt = 0;
+ Sync = 0;
+ ByteHigh = 0;
+ }
+ else
+ {
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer);
+ if ( Sync == 0 )
+ {
+ if(bCheckDelay)
+ {
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden
+ // Zeichen ignorieren, da Bedeutung unbekannt
+ Sync = 1;
+ FrameCnt ++;
+ SpektrumTimer = MAX_BYTEGAP;
+ }
+ else
+ {
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause
+ // warten auf erstes Sync-Zeichen
+ SpektrumTimer = MIN_FRAMEGAP;
+ FrameCnt = 0;
+ Sync = 0;
+ ByteHigh = 0;
+ }
+ }
+ else if((Sync == 1) && !bCheckDelay)
+ {
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt
+ Sync = 2;
+ FrameCnt ++;
+ SpektrumTimer = MAX_BYTEGAP;
+ }
+ else if((Sync == 2) && !bCheckDelay)
+ {
+ SpektrumTimer = MAX_BYTEGAP;
+ // Datenbyte high
+ ByteHigh = c;
+ if (FrameCnt == 2)
+ {
+ // is 1st Byte of Channel-data
+ // Frame 1 with Channel 1-7 comming next
+ Frame2 = 0;
+ if(ByteHigh & 0x80)
+ {
+ // DS9: Frame 2 with Channel 8-9 comming next
+ Frame2 = 1;
+ }
+ }
+ Sync = 3;
+ FrameCnt ++;
+ }
+ else if((Sync == 3) && !bCheckDelay)
+ {
+ // Datenbyte low
+ // High-Byte for next channel comes next
+ SpektrumTimer = MAX_BYTEGAP;
+ Sync = 2;
+ FrameCnt ++;
+ Channel = ((unsigned int)ByteHigh << 8) | c;
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM)
+ {
+ signal = Channel & 0x3ff;
+ signal -= 0x200; // Offset, range 0x000..0x3ff?
+ signal = signal/3; // scaling to fit PPM resolution
+ index = (ByteHigh >> 2) & 0x0f;
+ }
+ else
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES)
+ {
+ signal = Channel & 0x7ff;
+ signal -= 0x400; // Offset, range 0x000..0x7ff?
+ signal = signal/6; // scaling to fit PPM resolution
+ index = (ByteHigh >> 3) & 0x0f;
+ }
+ else
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES)
+ {
+ signal = Channel & 0x3ff;
+ signal -= 360; // Offset, range 0x000..0x3ff?
+ signal = signal/2; // scaling to fit PPM resolution
+ index = (ByteHigh >> 2) & 0x0f;
+ }
+
+ index++;
+ if(index < 13)
+ {
+ // Stabiles Signal
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4)
+ else if (index == 4) index = 2;
+#endif
+ if(abs(signal - PPM_in[index]) < 6)
+ {
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
+ {
+ if(SenderOkay < 200) SenderOkay += 10;
+ else
+ {
+ SenderOkay = 200;
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
+ }
+ }
+ }
+ tmp = (3 * (PPM_in[index]) + signal) / 4;
+ if(tmp > signal+1) tmp--; else
+ if(tmp < signal-1) tmp++;
+
+#ifdef RECEIVER_SPEKTRUM_DX7EXP
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
+ {
+ if (signal > 100) // SYNC received
+ {
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check
+ {
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5)
+ s_update(6,s_exdata[3]); // Elevator (CH6)
+ s_update(11,s_exdata[4]); // Aileron (CH11)
+ s_update(12,s_exdata[5]); // Rudder (CH12)
+
+ if (s_excnt == 9) // New Mode (12 Channels)
+ {
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8)
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8)
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit
+ s_update(10,s_exdata[6]); // AUX2 (CH10)
+ }
+ }
+
+ s_excnt = 0; // Reset bitcounter
+ s_exparity = 0; // Reset parity bit
+ }
+
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection
+ if (signal < -100)
+ {
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
+ }
+
+ }
+
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4)
+ else if (index == 5) s_update(7,signal); // Gear (CH7)
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9)
+
+#elif defined RECEIVER_SPEKTRUM_DX8EXP
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
+ {
+ if (signal > 100) // SYNC received
+ {
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check
+ {
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5)
+
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6)
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6)
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6)
+
+
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9)
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9)
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9)
+
+ s_update(10,s_exdata[5]); // Gear (CH10)
+ s_update(12,s_exdata[4]); // Mix (CH12)
+ }
+
+ s_excnt = 0; // Reset bitcounter
+ s_exparity = 0; // Reset parity bit
+ }
+
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection
+ if (signal < -100)
+ {
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
+ }
+
+ }
+
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4)
+ else if (index == 7) s_update(7,signal); // R Trim (CH7)
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8)
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11)
+
+#else
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
+ else PPM_diff[index] = 0;
+ PPM_in[index] = tmp;
+#endif
+ }
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren
+ }
+ else
+ {
+ // hier stimmt was nicht: neu synchronisieren
+ ReSync = 1;
+ FrameCnt = 0;
+ Frame2 = 0;
+ // new frame next, nach fruehestens 7ms erwartet
+ SpektrumTimer = MIN_FRAMEGAP;
+ }
+
+ // 16 Bytes eingetroffen -> Komplett
+ if(FrameCnt >= 16)
+ {
+ // Frame complete
+ if(Frame2 == 0)
+ {
+ // Null bedeutet: Neue Daten
+ // nur beim ersten Frame (CH 0-7) setzen
+ if(!ReSync) NewPpmData = 0;
+ }
+ FrameCnt = 0;
+ Frame2 = 0;
+ Sync = 0;
+ SpektrumTimer = MIN_FRAMEGAP;
+ }
+ }
+}
+
+
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/Spektrum.h
0,0 → 1,12
/*#######################################################################################
Dekodieren eines Spektrum Signals
#######################################################################################*/
 
#ifndef _SPEKTRUM_H
#define _SPEKTRUM_H
void SpektrumUartInit(void);
void SpektrumBinding(void);
extern unsigned char SpektrumTimer;
extern void SpektrumParser(unsigned char c);
 
#endif //_RC_H
/branches/v0.90d_Ernstl_4-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/cc1n5H0x.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc1n5H0x.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc1n5H0x.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc1n5H0x.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc1n5H0x.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc1n5H0x.s:15 .bss:00000000 s_exparity
C:\Temp/cc1n5H0x.s:21 .bss:00000001 s_excnt
C:\Temp/cc1n5H0x.s:27 .bss:00000002 SpektrumTimer
C:\Temp/cc1n5H0x.s:32 .text:00000000 s_update
C:\Temp/cc1n5H0x.s:99 .text:00000074 SpektrumUartInit
.bss:00000003 Sync.0
C:\Temp/cc1n5H0x.s:170 .bss:00000004 FrameCnt.1
C:\Temp/cc1n5H0x.s:171 .bss:00000005 ByteHigh.2
C:\Temp/cc1n5H0x.s:176 .data:00000000 ReSync.3
C:\Temp/cc1n5H0x.s:172 .bss:00000006 Frame2.4
C:\Temp/cc1n5H0x.s:182 .text:0000012a SpektrumParser
*COM*:0000000b s_exdata
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SenderOkay
PPM_in
__divmodhi4
PPM_diff
EE_Parameter
NewPpmData
__epilogue_restores__
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/analog.c
0,0 → 1,334
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "eeprom.h"
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0;
volatile int HiResNick = 2500, HiResRoll = 2500;
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0;
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0;
volatile long Luftdruck = 32000;
volatile long SummenHoehe = 0;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
signed char ExpandBaro = 0;
volatile int VarioMeter = 0;
volatile unsigned int ZaehlMessungen = 0;
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115;
volatile unsigned char AdReady = 1;
 
//#######################################################################################
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ANALOG_ON;
}
 
#define DESIRED_H_ADC 800
 
void SucheLuftruckOffset(void)
{
unsigned int off;
ExpandBaro = 0;
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
{
unsigned char off2;
OCR0A = 150;
off2 = GetParamByte(PID_PRESSURE_OFFSET);
if(off2 < 230) off2 += 10;
OCR0B = off2;
Delay_ms_Mess(100);
if(MessLuftdruck > DESIRED_H_ADC) off2 = 240;
for(; off2 >= 5; off2 -= 5)
{
OCR0B = off2;
Delay_ms_Mess(50);
printf("*");
if(MessLuftdruck > DESIRED_H_ADC) break;
}
SetParamByte(PID_PRESSURE_OFFSET, off2);
if(off2 >= 15) off = 140; else off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms_Mess(50);
printf(".");
if(MessLuftdruck < DESIRED_H_ADC) break;
}
DruckOffsetSetting = off;
}
#else
off = GetParamByte(PID_PRESSURE_OFFSET);
if(off > 20) off -= 10;
OCR0A = off;
Delay_ms_Mess(100);
if(MessLuftdruck < DESIRED_H_ADC) off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms_Mess(50);
printf(".");
if(MessLuftdruck < DESIRED_H_ADC) break;
}
DruckOffsetSetting = off;
SetParamByte(PID_PRESSURE_OFFSET, off);
#endif
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 245)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE;
OCR0A = off;
Delay_ms_Mess(300);
}
 
 
void SucheGyroOffset(void)
{
unsigned char i, ready = 0;
int timeout;
timeout = SetDelay(2000);
for(i=140; i != 0; i--)
{
if(ready == 3 && i > 10) i = 9;
ready = 0;
if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++;
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++;
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++;
I2C_Start(TWI_STATE_GYRO_OFFSET_TX);
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 245;};
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 245;};
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 245;};
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;}
AdReady = 0;
ANALOG_ON;
while(!AdReady);
if(i<10) Delay_ms_Mess(10);
}
Delay_ms_Mess(70);
}
 
/*
0 n
1 r
2 g
3 y
4 x
5 n
6 r
7 u
8 z
9 L
10 n
11 r
12 g
13 y
14 x
15 n
16 r
17 L
*/
 
//#######################################################################################
//
ISR(ADC_vect)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
static signed char subcount = 0;
static signed int gier1, roll1, nick1, nick_filter, roll_filter;
static signed int accy, accx;
static long tmpLuftdruck = 0;
static char messanzahl_Druck = 0;
switch(state++)
{
case 0:
nick1 = ADC;
kanal = AD_ROLL;
break;
case 1:
roll1 = ADC;
kanal = AD_GIER;
break;
case 2:
gier1 = ADC;
kanal = AD_ACC_Y;
break;
case 3:
Aktuell_ay = NeutralAccY - ADC;
accy = Aktuell_ay;
kanal = AD_ACC_X;
break;
case 4:
Aktuell_ax = ADC - NeutralAccX;
accx = Aktuell_ax;
kanal = AD_NICK;
break;
case 5:
nick1 += ADC;
kanal = AD_ROLL;
break;
case 6:
roll1 += ADC;
kanal = AD_UBAT;
break;
case 7:
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference
else
#endif
UBat = (3 * UBat + ADC / 3) / 4;
kanal = AD_ACC_Z;
break;
case 8:
AdWertAccHoch = (signed int) ADC - NeutralAccZ;
if(AdWertAccHoch > 1)
{
if(NeutralAccZ < 750)
{
subcount += 5;
if(modell_fliegt < 500) subcount += 10;
}
if(subcount > 100) { NeutralAccZ++; subcount -= 100;}
}
else if(AdWertAccHoch < -1)
{
if(NeutralAccZ > 550)
{
subcount -= 5;
if(modell_fliegt < 500) subcount -= 10;
if(subcount < -100) { NeutralAccZ--; subcount += 100;}
}
}
// messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
kanal = AD_DRUCK;
break;
// "case 9:" fehlt hier absichtlich
case 10:
nick1 += ADC;
kanal = AD_ROLL;
break;
case 11:
roll1 += ADC;
kanal = AD_GIER;
break;
case 12:
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2;
else
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1);
else AdWertGier = (ADC + gier1);
kanal = AD_ACC_Y;
break;
case 13:
Aktuell_ay = NeutralAccY - ADC;
AdWertAccRoll = (Aktuell_ay + accy);
kanal = AD_ACC_X;
break;
case 14:
Aktuell_ax = ADC - NeutralAccX;
AdWertAccNick = (Aktuell_ax + accx);
kanal = AD_NICK;
break;
case 15:
nick1 += ADC;
if(PlatinenVersion == 10) nick1 *= 2; else nick1 *= 4;
AdWertNick = nick1 / 8;
nick_filter = (nick_filter + nick1) / 2;
HiResNick = nick_filter - AdNeutralNick;
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2;
kanal = AD_ROLL;
break;
case 16:
roll1 += ADC;
if(PlatinenVersion == 10) roll1 *= 2; else roll1 *= 4;
AdWertRoll = roll1 / 8;
roll_filter = (roll_filter + roll1) / 2;
HiResRoll = roll_filter - AdNeutralRoll;
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2;
kanal = AD_DRUCK;
break;
case 17:
state = 0;
AdReady = 1;
ZaehlMessungen++;
// "break" fehlt hier absichtlich
case 9:
MessLuftdruck = ADC;
tmpLuftdruck += MessLuftdruck;
if(++messanzahl_Druck >= 16) // war bis 0.86 "18"
{
signed int tmp;
Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * 523) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step
HoehenWert = StartLuftdruck - Luftdruck;
SummenHoehe -= SummenHoehe/SM_FILTER;
SummenHoehe += HoehenWert;
tmp = (HoehenWert - SummenHoehe/SM_FILTER);
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024;
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16;
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32;
tmpLuftdruck /= 2;
messanzahl_Druck = 16/2;
}
kanal = AD_NICK;
break;
default:
kanal = 0; state = 0; kanal = AD_NICK;
break;
}
ADMUX = kanal;
if(state != 0) ANALOG_ON;
}
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/analog.h
0,0 → 1,47
#ifndef _ANALOG_H
#define _ANALOG_H
/*#######################################################################################
 
#######################################################################################*/
 
#define SM_FILTER 16
 
extern volatile int UBat;
extern volatile int AdWertNick, AdWertRoll, AdWertGier;
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch;
extern volatile int HiResNick, HiResRoll;
extern volatile int AdWertNickFilter, AdWertRollFilter, AdWertGierFilter;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile long SummenHoehe;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern signed char ExpandBaro;
extern volatile int VarioMeter;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
extern volatile char MessanzahlNick;
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier;
extern volatile unsigned char AdReady;
 
unsigned int ReadADC(unsigned char adc_input);
void ADC_Init(void);
void SucheLuftruckOffset(void);
void SucheGyroOffset(void);
 
#define AD_GIER 0
#define AD_ROLL 1
#define AD_NICK 2
#define AD_DRUCK 3
#define AD_UBAT 4
#define AD_ACC_Z 5
#define AD_ACC_Y 6
#define AD_ACC_X 7
 
 
#define ANALOG_OFF ADCSRA=0
 
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
//Signle trigger Mode, Interrupt on
#endif //_ANALOG_H
/branches/v0.90d_Ernstl_4-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/cc9gIpIn.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc9gIpIn.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc9gIpIn.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc9gIpIn.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc9gIpIn.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc9gIpIn.s:14 .data:00000000 AdReady
C:\Temp/cc9gIpIn.s:19 .data:00000001 AnalogOffsetGier
C:\Temp/cc9gIpIn.s:24 .data:00000002 AnalogOffsetRoll
C:\Temp/cc9gIpIn.s:29 .data:00000003 AnalogOffsetNick
C:\Temp/cc9gIpIn.s:36 .bss:00000000 ZaehlMessungen
C:\Temp/cc9gIpIn.s:42 .bss:00000002 VarioMeter
C:\Temp/cc9gIpIn.s:48 .bss:00000004 ExpandBaro
C:\Temp/cc9gIpIn.s:54 .data:00000004 MessLuftdruck
C:\Temp/cc9gIpIn.s:61 .bss:00000005 SummenHoehe
C:\Temp/cc9gIpIn.s:67 .data:00000006 Luftdruck
C:\Temp/cc9gIpIn.s:74 .bss:00000009 AdWertAccHoch
C:\Temp/cc9gIpIn.s:80 .bss:0000000b AdWertAccNick
C:\Temp/cc9gIpIn.s:86 .bss:0000000d AdWertAccRoll
C:\Temp/cc9gIpIn.s:92 .bss:0000000f AdWertGier
C:\Temp/cc9gIpIn.s:98 .bss:00000011 AdWertRoll
C:\Temp/cc9gIpIn.s:104 .bss:00000013 AdWertNick
C:\Temp/cc9gIpIn.s:110 .data:0000000a HiResRoll
C:\Temp/cc9gIpIn.s:115 .data:0000000c HiResNick
C:\Temp/cc9gIpIn.s:122 .bss:00000015 AdWertGierFilter
C:\Temp/cc9gIpIn.s:128 .bss:00000017 AdWertRollFilter
C:\Temp/cc9gIpIn.s:134 .bss:00000019 AdWertNickFilter
C:\Temp/cc9gIpIn.s:140 .data:0000000e UBat
C:\Temp/cc9gIpIn.s:145 .text:00000000 ADC_Init
C:\Temp/cc9gIpIn.s:159 .progmem.data:00000000 __c.13
C:\Temp/cc9gIpIn.s:163 .progmem.data:00000002 __c.14
C:\Temp/cc9gIpIn.s:168 .text:0000000c SucheLuftruckOffset
*COM*:00000001 DruckOffsetSetting
C:\Temp/cc9gIpIn.s:295 .progmem.data:00000004 __c.12
C:\Temp/cc9gIpIn.s:300 .text:00000110 SucheGyroOffset
.bss:0000001b kanal.0
C:\Temp/cc9gIpIn.s:503 .bss:0000001c state.1
C:\Temp/cc9gIpIn.s:504 .bss:0000001d subcount.2
C:\Temp/cc9gIpIn.s:505 .bss:0000001e gier1.3
C:\Temp/cc9gIpIn.s:506 .bss:00000020 roll1.4
C:\Temp/cc9gIpIn.s:507 .bss:00000022 nick1.5
C:\Temp/cc9gIpIn.s:508 .bss:00000024 nick_filter.6
C:\Temp/cc9gIpIn.s:509 .bss:00000026 roll_filter.7
C:\Temp/cc9gIpIn.s:510 .bss:00000028 accy.8
C:\Temp/cc9gIpIn.s:511 .bss:0000002a accx.9
C:\Temp/cc9gIpIn.s:512 .bss:0000002c tmpLuftdruck.10
C:\Temp/cc9gIpIn.s:513 .bss:00000030 messanzahl_Druck.11
C:\Temp/cc9gIpIn.s:517 .text:000002de __vector_24
*COM*:00000002 Aktuell_ay
*COM*:00000002 Aktuell_ax
*COM*:00000002 Aktuell_az
*COM*:00000002 StartLuftdruck
*COM*:00000002 Aktuell_Nick
*COM*:00000002 Aktuell_Roll
*COM*:00000002 Aktuell_Gier
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
GetParamByte
Delay_ms_Mess
uart_putchar
_printf_P
SetParamByte
EE_Parameter
VersionInfo
SetDelay
twi_state
BLFlags
CheckDelay
__tablejump2__
NeutralAccY
NeutralAccX
__udivmodhi4
NeutralAccZ
modell_fliegt
Mess_Integral_Hoch
PlatinenVersion
AdNeutralNick
AdNeutralRoll
__mulsi3
HoehenWert
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/capacity.c
0,0 → 1,144
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "capacity.h"
#include "twimaster.h"
#include "main.h"
#include "timer0.h"
#include "analog.h"
 
#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms
#define FC_OFFSET_CURRENT 5 // calculate with a current of 0.5A
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A
 
// global varialbles
unsigned short update_timer = 0;
Capacity_t Capacity;
 
// initialize capacity calculation
void Capacity_Init(void)
{
Capacity.ActualCurrent = 0;
Capacity.UsedCapacity = 0;
Capacity.ActualPower = 0;
Capacity.MinOfMaxPWM = 0;
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL);
}
 
 
// called in main loop at a regular interval
void Capacity_Update(void)
{
unsigned short Current, SetSum; // max value will be 255 * 12 = 3060
static unsigned short SubCounter = 0;
static unsigned short CurrentOffset = 0;
static unsigned long SumCurrentOffset = 0;
unsigned char i, NumOfMotors, MinOfMaxPWM;
 
if(CheckDelay(update_timer))
{
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks
// determine sum of all present BL currents and setpoints
Current = 0;
SetSum = 0;
NumOfMotors = 0;
MinOfMaxPWM = 255;
for(i = 0; i < MAX_MOTORS; i++)
{
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK)
{
NumOfMotors++;
Current += (unsigned int)(Motor[i].Current);
SetSum += (unsigned int)(Motor[i].SetPoint);
if(Motor[i].MaxPWM < MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM;
}
}
Capacity.MinOfMaxPWM = MinOfMaxPWM;
 
if(SetSum == 0) // if all setpoints are 0
{ // determine offsets of motor currents
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE);
SumCurrentOffset -= CurrentOffset;
SumCurrentOffset += Current;
// after averaging set current to static offset
Current = FC_OFFSET_CURRENT;
}
else // some motors are running, includes also motor test condition, where "MotorRunning" is false
{ // subtract offset
if(Current > CurrentOffset) Current -= CurrentOffset;
else Current = 0;
// add the FC and BL Offsets
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT;
}
 
// update actual Current
Capacity.ActualCurrent = Current;
// update actual Power
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W
 
// update used capacity
SubCounter += Current;
 
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL)
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL)
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL)
if(SubCounter > SUB_COUNTER_LIMIT)
{
Capacity.UsedCapacity++; // we have one mAh more
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part
}
} // EOF check delay update timer
}
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/capacity.h
0,0 → 1,18
#ifndef _CAPACITY_H
#define _CAPACITY_H
 
typedef struct
{
unsigned short ActualCurrent; // in 0.1A Steps
unsigned short ActualPower; // in 0.1W
unsigned short UsedCapacity; // in mAh
unsigned char MinOfMaxPWM; // BL Power Limit
} __attribute__((packed)) Capacity_t;
 
extern Capacity_t Capacity;
 
void Capacity_Init(void);
void Capacity_Update(void);
 
#endif //_CAPACITY_H
 
/branches/v0.90d_Ernstl_4-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/ccTVr0ER.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccTVr0ER.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccTVr0ER.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccTVr0ER.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccTVr0ER.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccTVr0ER.s:15 .bss:00000000 update_timer
C:\Temp/ccTVr0ER.s:20 .text:00000000 Capacity_Init
*COM*:00000007 Capacity
.bss:00000002 SubCounter.0
C:\Temp/ccTVr0ER.s:40 .bss:00000004 CurrentOffset.1
C:\Temp/ccTVr0ER.s:41 .bss:00000006 SumCurrentOffset.2
C:\Temp/ccTVr0ER.s:45 .text:0000002e Capacity_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SetDelay
CheckDelay
Motor
UBat
__udivmodhi4
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/debug.c
0,0 → 1,48
#include "main.h"
#include "debug.h"
 
#ifdef DEBUG // only include functions if DEBUG is defined in main.h
 
#warning : "### DEBUG-Funktion aktiv ###"
 
 
 
unsigned char Debug_BufPtr = 0;
struct str_Debug tDebug;
unsigned char SendDebugOutput = 0;
 
// function called from _printf_P to output character
void Debug_Putchar(char c)
{
if (!SendDebugOutput)
{
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow
}
}
 
void DebugSend(unsigned char cmd)
{
if (!SendDebugOutput)
{
tDebug.Cmd = cmd;
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker
Debug_BufPtr = 0; // set bufferindex to 0
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function
}
}
#endif
 
/*
add the following code block to the serial transmit function
 
#ifdef DEBUG // only include functions if DEBUG is defined
if(SendDebugOutput && UebertragungAbgeschlossen)
{
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
SendDebugOutput = 0;
}
#endif
 
*/
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/debug.h
0,0 → 1,60
#ifndef _DEBUG_H
#define _DEBUG_H
// ----------------------------------------------
#define CMD_NONE 0x00
#define CMD_RAW_OUTPUT 0x01
#define CMD_ERROR_MSG 0x02
#define CMD_WARNING_MSG 0x04
#define CMD_GREEN_MSG 0x08
 
// debug console in MK-Tool can also handle ANSI ESC seq.
#define ANSI_ATTRIBUTE_OFF "\033[0m"
#define ANSI_BOLD "\033[1m"
#define ANSI_UNDERSCORE "\033[4m"
#define ANSI_BLINK "\033[5m"
#define ANSI_INVERSE "\033[7m"
#define ANSI_INVISIBLE "\033[8m"
 
#define ANSI_COLOR_BLACK "\033[30m"
#define ANSI_COLOR_RED "\033[31m"
#define ANSI_COLOR_GREEN "\033[32m"
#define ANSI_COLOR_YELLOW "\033[33m"
#define ANSI_COLOR_BLUE "\033[34m"
#define ANSI_COLOR_VIOLETT "\033[35m"
#define ANSI_COLOR_KOBALTBLUE "\033[36m"
#define ANSI_COLOR_WHITE "\033[37m"
 
#define ANSI_CLEAR "\033[2J"
#define ANSI_HOME "\033[H"
 
// macros for easier use
#ifdef DEBUG // only include functions if DEBUG is defined in main.h
 
#define Debug(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_NONE); }
#define Debug_Raw(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_RAW_OUTPUT); }
#define Debug_Warning(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_WARNING_MSG); }
#define Debug_Error(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_ERROR_MSG); }
#define Debug_OK(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_GREEN_MSG); }
 
struct str_Debug
{
unsigned char Cmd; // bitcoded command
char Text[32];
};
 
extern struct str_Debug tDebug;
unsigned char SendDebugOutput;
 
void Debug_Putchar(char c);
void DebugSend(unsigned char cmd);
 
#else // dummy macros (won't waste flash, if #DEBUG is disabled)
#define Debug(format, args...) ;
#define Debug_Raw(format, args...) ;
#define Debug_Warning(format, args...) ;
#define Debug_Error(format, args...) ;
#define Debug_OK(format, args...) ;
#endif
 
// ----------------------------------------------
#endif
/branches/v0.90d_Ernstl_4-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/cczt3UTY.s:3 *ABS*:0000003f __SREG__
C:\Temp/cczt3UTY.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cczt3UTY.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cczt3UTY.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cczt3UTY.s:7 *ABS*:00000001 __zero_reg__
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/eeprom.c
0,0 → 1,632
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
 
#include <avr/eeprom.h>
#include <string.h>
#include "eeprom.h"
#include "uart.h"
#include "led.h"
#include "main.h"
#include "fc.h"
#include "twimaster.h"
 
paramset_t EE_Parameter;
MixerTable_t Mixer;
uint8_t RequiredMotors;
 
 
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t i;
 
for(i=0; i<len; i++)
{
crc += pBuffer[i];
}
return crc;
}
 
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t off;
 
for(off=0; off<len; off++)
{
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));;
}
return crc;
}
 
void ParamSet_DefaultStickMapping(void)
{
EE_Parameter.Kanalbelegung[K_GAS] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_NICK] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
EE_Parameter.Kanalbelegung[K_POTI5] = 9;
EE_Parameter.Kanalbelegung[K_POTI6] = 10;
EE_Parameter.Kanalbelegung[K_POTI7] = 11;
EE_Parameter.Kanalbelegung[K_POTI8] = 12;
}
 
 
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void CommonDefaults(void)
{
EE_Parameter.Revision = EEPARAM_REVISION;
memset(EE_Parameter.Name,0,12); // delete name
if(PlatinenVersion >= 20)
{
EE_Parameter.Gyro_D = 10;
EE_Parameter.Driftkomp = 0;
EE_Parameter.GyroAccFaktor = 27;
EE_Parameter.WinkelUmschlagNick = 78;
EE_Parameter.WinkelUmschlagRoll = 78;
}
else
{
EE_Parameter.Gyro_D = 3;
EE_Parameter.Driftkomp = 32;
EE_Parameter.GyroAccFaktor = 30;
EE_Parameter.WinkelUmschlagNick = 85;
EE_Parameter.WinkelUmschlagRoll = 85;
}
EE_Parameter.GyroAccAbgleich = 32; // 1/k
EE_Parameter.BitConfig = 0; // Looping usw.
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER;
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP;
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL;//CFG3_VARIO_FAILSAFE;
EE_Parameter.Receiver = RECEIVER_HOTT;
EE_Parameter.MotorSafetySwitch = 0;
EE_Parameter.ExternalControl = 0;
 
EE_Parameter.Gas_Min = 8; // Wert : 0-32
EE_Parameter.Gas_Max = 230; // Wert : 33-247
EE_Parameter.KompassWirkung = 64; // Wert : 0-247
 
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1
EE_Parameter.Hoehe_P = 15; // Wert : 0-32
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation)
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag)
 
EE_Parameter.UserParam1 = 0; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
 
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 15; // Wert : 0-247 // Anschlag
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag
EE_Parameter.ServoNickRefresh = 4;
EE_Parameter.Servo3 = 125;
EE_Parameter.Servo4 = 125;
EE_Parameter.Servo5 = 125;
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag
EE_Parameter.ServoManualControlSpeed = 60;
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps
 
EE_Parameter.J16Bitmask = 95;
EE_Parameter.J17Bitmask = 243;
EE_Parameter.WARN_J16_Bitmask = 0xAA;
EE_Parameter.WARN_J17_Bitmask = 0xAA;
EE_Parameter.J16Timing = 40;
EE_Parameter.J17Timing = 40;
EE_Parameter.NaviOut1Parameter = 0; // Photo release in meter
EE_Parameter.LoopGasLimit = 50;
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag
EE_Parameter.LoopHysterese = 50;
 
EE_Parameter.NaviGpsModeControl = 254; // 254 -> Poti 2
EE_Parameter.NaviGpsGain = 100;
EE_Parameter.NaviGpsP = 90;
EE_Parameter.NaviGpsI = 90;
EE_Parameter.NaviGpsD = 90;
EE_Parameter.NaviGpsPLimit = 75;
EE_Parameter.NaviGpsILimit = 85;
EE_Parameter.NaviGpsDLimit = 75;
EE_Parameter.NaviGpsACC = 0;
EE_Parameter.NaviGpsMinSat = 6;
EE_Parameter.NaviStickThreshold = 8;
EE_Parameter.NaviWindCorrection = 90;
EE_Parameter.NaviAccCompensation = 42;
EE_Parameter.NaviOperatingRadius = 245;
EE_Parameter.NaviAngleLimitation = 140;
EE_Parameter.NaviPH_LoginTime = 5;
EE_Parameter.OrientationAngle = 0;
EE_Parameter.CareFreeModeControl = 0;
EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50)
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent)
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.MotorSmooth = 0;
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change
EE_Parameter.FailSafeTime = 0; // 0 = off
EE_Parameter.MaxAltitude = 150; // 0 = off
EE_Parameter.AchsKopplung1 = 90;
EE_Parameter.AchsKopplung2 = 55;
EE_Parameter.FailsafeChannel = 0;
EE_Parameter.ServoFilterNick = 0;
EE_Parameter.ServoFilterRoll = 0;
}
/*
void ParamSet_DefaultSet1(void) // sport
{
CommonDefaults();
EE_Parameter.Stick_P = 14; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 12; // Wert : 1-20
EE_Parameter.Gyro_P = 80; // Wert : 0-247
EE_Parameter.Gyro_I = 150; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 32;
EE_Parameter.CouplingYawCorrection = 1;
EE_Parameter.GyroAccAbgleich = 16; // 1/k;
EE_Parameter.DynamicStability = 100;
memcpy(EE_Parameter.Name, "Sport\0", 12);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
*/
 
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void ParamSet_DefaultSet1(void) // normal
{
CommonDefaults();
EE_Parameter.Stick_P = 10; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 6; // Wert : 1-20
EE_Parameter.Gyro_P = 90; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 32;
EE_Parameter.CouplingYawCorrection = 60;
EE_Parameter.DynamicStability = 75;
memcpy(EE_Parameter.Name, "Fast",4);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
 
/***************************************************/
/* Default Values for parameter set 2 */
/***************************************************/
void ParamSet_DefaultSet2(void) // beginner
{
CommonDefaults();
EE_Parameter.Stick_P = 8; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 6; // Wert : 1-20
EE_Parameter.Gyro_P = 100; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 16;
EE_Parameter.CouplingYawCorrection = 70;
EE_Parameter.DynamicStability = 70;
memcpy(EE_Parameter.Name, "Normal",6);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
/***************************************************/
/* Default Values for parameter set 3 */
/***************************************************/
void ParamSet_DefaultSet3(void) // beginner
{
CommonDefaults();
EE_Parameter.Stick_P = 6; // Wert : 1-20
EE_Parameter.Stick_D = 10; // Wert : 0-20
EE_Parameter.StickGier_P = 4; // Wert : 1-20
EE_Parameter.Gyro_P = 100; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 16;
EE_Parameter.CouplingYawCorrection = 70;
EE_Parameter.DynamicStability = 70;
memcpy(EE_Parameter.Name, "Easy", 4);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
 
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
}
 
/***************************************************/
/* Write Parameter to EEPROM as byte */
/***************************************************/
void SetParamByte(uint16_t param_id, uint8_t value)
{
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
}
 
/***************************************************/
/* Read Parameter from EEPROM as word */
/***************************************************/
uint16_t GetParamWord(uint16_t param_id)
{
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id));
}
 
/***************************************************/
/* Write Parameter to EEPROM as word */
/***************************************************/
void SetParamWord(uint16_t param_id, uint16_t value)
{
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
}
 
/***************************************************/
/* Read Parameter Set from EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber)
{
uint8_t crc;
uint16_t eeaddr;
 
// range the setnumber
if((1 > setnumber) || (setnumber > 5)) setnumber = 3;
 
// calculate eeprom addr
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1);
 
// calculate checksum from eeprom
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1);
 
// check crc
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0;
 
// check revision
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0;
 
// read paramset from eeprom
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
 
/***************************************************/
/* Write Parameter Set to EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber)
{
uint8_t crc;
 
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) return 0;
LIBFC_CheckSettings();
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas
{
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas
}
// update checksum
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
 
// write paramset to eeprom
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
 
// backup channel settings to separate block in eeprom
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
 
// write crc of channel block to eeprom
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung));
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc);
 
// update active settings number
SetActiveParamSet(setnumber);
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
// wrong revision
return 0;
}
 
/***************************************************/
/* Read MixerTable from EEPROM */
/***************************************************/
uint8_t MixerTable_ReadFromEEProm(void)
{
uint8_t crc;
 
// calculate checksum in eeprom
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1);
 
// check crc
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0;
 
// check revision
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0;
 
// read mixer table
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
 
/***************************************************/
/* Write Mixer Table to EEPROM */
/***************************************************/
uint8_t MixerTable_WriteToEEProm(void)
{
if(Mixer.Revision == EEMIXER_REVISION)
{
// update crc
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
 
// write to eeprom
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
else return 0;
}
 
/***************************************************/
/* Default Values for Mixer Table */
/***************************************************/
void MixerTable_Default(void) // Quadro
{
uint8_t i;
 
Mixer.Revision = EEMIXER_REVISION;
// clear mixer table
for(i = 0; i < 16; i++)
{
Mixer.Motor[i][MIX_GAS] = 0;
Mixer.Motor[i][MIX_NICK] = 0;
Mixer.Motor[i][MIX_ROLL] = 0;
Mixer.Motor[i][MIX_YAW] = 0;
}
// default = Quadro
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64;
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64;
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64;
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64;
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12);
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
}
 
/***************************************************/
/* Get active parameter set */
/***************************************************/
uint8_t GetActiveParamSet(void)
{
uint8_t setnumber;
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET));
if(setnumber > 5)
{
setnumber = 3;
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber);
}
return(setnumber);
}
 
/***************************************************/
/* Set active parameter set */
/***************************************************/
void SetActiveParamSet(uint8_t setnumber)
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) setnumber = 1;
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber);
}
 
/***************************************************/
/* Set default parameter set */
/***************************************************/
void SetDefaultParameter(uint8_t set, uint8_t restore_channels)
{
 
if(set > 5) set = 5;
else if(set < 1) set = 1;
 
switch(set)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
break;
case 2:
ParamSet_DefaultSet2(); // Kamera
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Beginner
break;
}
if(restore_channels)
{
uint8_t crc;
// 1st check for a valid channel backup in eeprom
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) )
{
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
}
else ParamSet_DefaultStickMapping();
}
else ParamSet_DefaultStickMapping();
ParamSet_WriteToEEProm(set);
}
 
/***************************************************/
/* Initialize EEPROM Parameter Sets */
/***************************************************/
void ParamSet_Init(void)
{
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i;
 
 
if(EEPARAM_REVISION != GetParamByte(PID_EE_REVISION) )
{
ee_default = 1; // software update or forced by mktool
}
 
 
// 1st check for a valid channel backup in eeprom
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) channel_backup = 1;
 
 
// parameter check
 
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
printf("\n\rGenerating default Parameter Set %d",i);
switch(i)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
break;
case 2:
ParamSet_DefaultSet2(); // Kamera
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Kamera
break;
}
if(channel_backup) // if we have an channel mapping backup in eeprom
{ // restore it from eeprom
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
}
else
{ // use default mapping
ParamSet_DefaultStickMapping();
}
ParamSet_WriteToEEProm(i);
}
}
if(bad_params) // at least one of the parameter settings were invalid
{
// default-Setting is parameter set 3
SetActiveParamSet(3);
}
 
 
// read active parameter set to ParamSet stucture
i = GetActiveParamSet();
ParamSet_ReadFromEEProm(i);
printf("\n\rUsing Parameter Set %d", i);
 
// load mixer table
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() )
{
printf("\n\rGenerating default Mixer Table");
MixerTable_Default(); // Quadro
MixerTable_WriteToEEProm();
}
if(ee_default) SetParamByte(PID_EE_REVISION, EEPARAM_REVISION);
// determine motornumber
RequiredMotors = 0;
for(i = 0; i < 16; i++)
{
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++;
}
 
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors);
PrintLine();// ("\n\r===================================");
 
}
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/eeprom.h
0,0 → 1,277
#ifndef _EEPROM_H
#define _EEPROM_H
 
#include <inttypes.h>
#include "twimaster.h"
 
#define EEPARAM_REVISION 92 // is count up, if paramater stucture has changed (compatibility)
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility)
 
#define EEPROM_ADR_PARAM_BEGIN 0
#define PID_EE_REVISION 1 // byte
#define PID_ACTIVE_SET 2 // byte
#define PID_PRESSURE_OFFSET 3 // byte
 
#define PID_ACC_NICK 4 // word
#define PID_ACC_ROLL 6 // word
#define PID_ACC_TOP 8 // word
 
#define PID_FLIGHT_MINUTES_TOTAL 10 // word
#define PID_FLIGHT_MINUTES 14 // word
 
#define PID_SPEAK_HOTT_CFG 16 // Byte
 
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc
#define EEPROM_ADR_PARAMSET 100 // 100 - 650, 5 * 110 bytes
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes
 
#define MIX_GAS 0
#define MIX_NICK 1
#define MIX_ROLL 2
#define MIX_YAW 3
 
typedef struct
{
uint8_t Revision;
int8_t Name[12];
int8_t Motor[16][4];
uint8_t crc;
} __attribute__((packed)) MixerTable_t;
 
extern MixerTable_t Mixer;
extern uint8_t RequiredMotors;
 
//GlobalConfig3
#define CFG3_NO_SDCARD_NO_START 0x01
#define CFG3_DPH_MAX_RADIUS 0x02
#define CFG3_VARIO_FAILSAFE 0x04
#define CFG3_MOTOR_SWITCH_MODE 0x08
#define CFG3_NO_GPSFIX_NO_START 0x10
#define CFG3_USE_NC_FOR_OUT1 0x20
#define CFG3_SPEAK_ALL 0x40
 
//GlobalConfig
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40
#define CFG_DREHRATEN_BEGRENZER 0x80
 
//BitConfig
#define CFG_LOOP_OBEN 0x01
#define CFG_LOOP_UNTEN 0x02
#define CFG_LOOP_LINKS 0x04
#define CFG_LOOP_RECHTS 0x08
#define CFG_MOTOR_BLINK1 0x10
#define CFG_MOTOR_OFF_LED1 0x20
#define CFG_MOTOR_OFF_LED2 0x40
#define CFG_MOTOR_BLINK2 0x80
 
// ExtraConfig
#define CFG2_HEIGHT_LIMIT 0x01
#define CFG2_VARIO_BEEP 0x02
#define CFG_SENSITIVE_RC 0x04
#define CFG_3_3V_REFERENCE 0x08
#define CFG_NO_RCOFF_BEEPING 0x10
#define CFG_GPS_AID 0x20
#define CFG_LEARNABLE_CAREFREE 0x40
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80
 
// bit mask for ParamSet.Config0
#define CFG0_AIRPRESS_SENSOR 0x01
#define CFG0_HEIGHT_SWITCH 0x02
#define CFG0_HEADING_HOLD 0x04
#define CFG0_COMPASS_ACTIVE 0x08
#define CFG0_COMPASS_FIX 0x10
#define CFG0_GPS_ACTIVE 0x20
#define CFG0_AXIS_COUPLING_ACTIVE 0x40
#define CFG0_ROTARY_RATE_LIMITER 0x80
 
// bitcoding for EE_Parameter.ServoCompInvert
#define SERVO_NICK_INV 0x01
#define SERVO_ROLL_INV 0x02
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value
 
// defines for the receiver selection
#define RECEIVER_PPM 0
#define RECEIVER_SPEKTRUM 1
#define RECEIVER_SPEKTRUM_HI_RES 2
#define RECEIVER_SPEKTRUM_LOW_RES 3
#define RECEIVER_JETI 4
#define RECEIVER_ACT_DSL 5
#define RECEIVER_HOTT 6
#define RECEIVER_SBUS 7
#define RECEIVER_USER 8
 
#define RECEIVER_UNKNOWN 0xFF
 
// defines for lookup ParamSet.ChannelAssignment
#define K_NICK 0
#define K_ROLL 1
#define K_GAS 2
#define K_GIER 3
#define K_POTI1 4
#define K_POTI2 5
#define K_POTI3 6
#define K_POTI4 7
#define K_POTI5 8
#define K_POTI6 9
#define K_POTI7 10
#define K_POTI8 11
 
 
// values above 247 representing poti1 to poti8
// poti1 = 255
// poti2 = 254
// poti3 = 253
// poti4 = 252
// poti5 = 251
// poti6 = 250
// poti7 = 249
// poti8 = 248
 
 
typedef struct
{
unsigned char Revision;
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Hoehe_HoverBand; // Wert : 0-250
unsigned char Hoehe_GPS_Z; // Wert : 0-250
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char StickGier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char Gyro_D; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char Gyro_Stability; // Wert : 0-16
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
//--- Seit V0.75
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoRollComp; // Wert : 0-250
unsigned char ServoRollMin; // Wert : 0-250
unsigned char ServoRollMax; // Wert : 0-250
//---
unsigned char ServoNickRefresh; // Speed of the Servo
unsigned char ServoManualControlSpeed;//
unsigned char CamOrientation; //
unsigned char Servo3; // Value or mapping of the Servo Output
unsigned char Servo4; // Value or mapping of the Servo Output
unsigned char Servo5; // Value or mapping of the Servo Output
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
//---Output ---------------------------------------------
unsigned char J16Bitmask; // for the J16 Output
unsigned char J16Timing; // for the J16 Output
unsigned char J17Bitmask; // for the J17 Output
unsigned char J17Timing; // for the J17 Output
// seit version V0.75c
unsigned char WARN_J16_Bitmask; // for the J16 Output
unsigned char WARN_J17_Bitmask; // for the J17 Output
//---NaviCtrl---------------------------------------------
unsigned char NaviOut1Parameter; // for the J16 Output
unsigned char NaviGpsModeControl; // Parameters for the Naviboard
unsigned char NaviGpsGain;
unsigned char NaviGpsP;
unsigned char NaviGpsI;
unsigned char NaviGpsD;
unsigned char NaviGpsPLimit;
unsigned char NaviGpsILimit;
unsigned char NaviGpsDLimit;
unsigned char NaviGpsACC;
unsigned char NaviGpsMinSat;
unsigned char NaviStickThreshold;
unsigned char NaviWindCorrection;
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
unsigned char NaviOperatingRadius;
unsigned char NaviAngleLimitation;
unsigned char NaviPH_LoginTime;
//---Ext.Ctrl---------------------------------------------
unsigned char ExternalControl; // for serial Control
//---CareFree---------------------------------------------
unsigned char OrientationAngle; // Where is the front-direction?
unsigned char CareFreeModeControl; // switch for CareFree
unsigned char MotorSafetySwitch;
unsigned char MotorSmooth;
unsigned char ComingHomeAltitude;
unsigned char FailSafeTime;
unsigned char MaxAltitude;
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
unsigned char ServoFilterNick;
unsigned char ServoFilterRoll;
//------------------------------------------------
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
unsigned char ExtraConfig; // bitcodiert
unsigned char GlobalConfig3; // bitcodiert
char Name[12];
unsigned char crc; // must be the last byte!
} paramset_t;
 
#define PARAMSET_STRUCT_LEN sizeof(paramset_t)
 
extern paramset_t EE_Parameter;
 
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len);
 
extern void ParamSet_Init(void);
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels);
 
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber);
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber);
 
extern uint8_t GetActiveParamSet(void);
extern void SetActiveParamSet(uint8_t setnumber);
 
extern uint8_t MixerTable_ReadFromEEProm(void);
extern uint8_t MixerTable_WriteToEEProm(void);
 
extern uint8_t GetParamByte(uint16_t param_id);
extern void SetParamByte(uint16_t param_id, uint8_t value);
extern uint16_t GetParamWord(uint16_t param_id);
extern void SetParamWord(uint16_t param_id, uint16_t value);
 
 
#endif //_EEPROM_H
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/eeprom.lst
0,0 → 1,1351
1 .file "eeprom.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .text
12 eeprom_read_byte:
13 /* prologue: frame size=0 */
14 /* prologue end (size=0) */
15 .L2:
16 0000 F999 sbic 63-0x20,1
17 0002 00C0 rjmp .L2
18 0004 92BD out (65)+1-0x20,r25
19 0006 81BD out 65-0x20,r24
20 /* #APP */
21 /* START EEPROM READ CRITICAL SECTION */
22 0008 F89A sbi 31, 0
23 000a 80B5 in r24, 32
24 /* END EEPROM READ CRITICAL SECTION */
25
26 /* #NOAPP */
27 000c 9927 clr r25
28 /* epilogue: frame size=0 */
29 000e 0895 ret
30 /* epilogue end (size=1) */
31 /* function eeprom_read_byte size 16 (15) */
34 eeprom_write_byte:
35 /* prologue: frame size=0 */
36 /* prologue end (size=0) */
37 .L6:
38 0010 F999 sbic 63-0x20,1
39 0012 00C0 rjmp .L6
40 0014 1FBA out 63-0x20,__zero_reg__
41 0016 92BD out (65)+1-0x20,r25
42 0018 81BD out 65-0x20,r24
43 001a 60BD out 64-0x20,r22
44 /* #APP */
45 /* START EEPROM WRITE CRITICAL SECTION */
46 001c 0FB6 in r0, 63
47 001e F894 cli
48 0020 FA9A sbi 31, 2
49 0022 F99A sbi 31, 1
50 0024 0FBE out 63, r0
51 /* END EEPROM WRITE CRITICAL SECTION */
52 /* #NOAPP */
53 /* epilogue: frame size=0 */
54 0026 0895 ret
55 /* epilogue end (size=1) */
56 /* function eeprom_write_byte size 21 (20) */
58 .global RAM_Checksum
60 RAM_Checksum:
61 /* prologue: frame size=0 */
62 /* prologue end (size=0) */
63 0028 4AEA ldi r20,lo8(-86)
64 002a 20E0 ldi r18,lo8(0)
65 002c 30E0 ldi r19,hi8(0)
66 002e 2617 cp r18,r22
67 0030 3707 cpc r19,r23
68 0032 00F4 brsh .L15
69 0034 FC01 movw r30,r24
70 .L13:
71 0036 8191 ld r24,Z+
72 0038 480F add r20,r24
73 003a 2F5F subi r18,lo8(-(1))
74 003c 3F4F sbci r19,hi8(-(1))
75 003e 2617 cp r18,r22
76 0040 3707 cpc r19,r23
77 0042 00F0 brlo .L13
78 .L15:
79 0044 842F mov r24,r20
80 0046 9927 clr r25
81 /* epilogue: frame size=0 */
82 0048 0895 ret
83 /* epilogue end (size=1) */
84 /* function RAM_Checksum size 17 (16) */
86 .global EEProm_Checksum
88 EEProm_Checksum:
89 /* prologue: frame size=0 */
90 /* prologue end (size=0) */
91 004a EAEA ldi r30,lo8(-86)
92 004c 40E0 ldi r20,lo8(0)
93 004e 50E0 ldi r21,hi8(0)
94 0050 4617 cp r20,r22
95 0052 5707 cpc r21,r23
96 0054 00F4 brsh .L26
97 0056 9C01 movw r18,r24
98 .L30:
99 0058 F999 sbic 63-0x20,1
100 005a 00C0 rjmp .L30
101 005c 32BD out (65)+1-0x20,r19
102 005e 21BD out 65-0x20,r18
103 /* #APP */
104 /* START EEPROM READ CRITICAL SECTION */
105 0060 F89A sbi 31, 0
106 0062 80B5 in r24, 32
107 /* END EEPROM READ CRITICAL SECTION */
108
109 /* #NOAPP */
110 0064 E80F add r30,r24
111 0066 4F5F subi r20,lo8(-(1))
112 0068 5F4F sbci r21,hi8(-(1))
113 006a 2F5F subi r18,lo8(-(1))
114 006c 3F4F sbci r19,hi8(-(1))
115 006e 4617 cp r20,r22
116 0070 5707 cpc r21,r23
117 0072 00F0 brlo .L30
118 .L26:
119 0074 8E2F mov r24,r30
120 0076 9927 clr r25
121 /* epilogue: frame size=0 */
122 0078 0895 ret
123 /* epilogue end (size=1) */
124 /* function EEProm_Checksum size 32 (31) */
126 .global ParamSet_DefaultStickMapping
128 ParamSet_DefaultStickMapping:
129 /* prologue: frame size=0 */
130 /* prologue end (size=0) */
131 007a 81E0 ldi r24,lo8(1)
132 007c 8093 0000 sts EE_Parameter+3,r24
133 0080 82E0 ldi r24,lo8(2)
134 0082 8093 0000 sts EE_Parameter+2,r24
135 0086 83E0 ldi r24,lo8(3)
136 0088 8093 0000 sts EE_Parameter+1,r24
137 008c 84E0 ldi r24,lo8(4)
138 008e 8093 0000 sts EE_Parameter+4,r24
139 0092 85E0 ldi r24,lo8(5)
140 0094 8093 0000 sts EE_Parameter+5,r24
141 0098 86E0 ldi r24,lo8(6)
142 009a 8093 0000 sts EE_Parameter+6,r24
143 009e 87E0 ldi r24,lo8(7)
144 00a0 8093 0000 sts EE_Parameter+7,r24
145 00a4 88E0 ldi r24,lo8(8)
146 00a6 8093 0000 sts EE_Parameter+8,r24
147 00aa 89E0 ldi r24,lo8(9)
148 00ac 8093 0000 sts EE_Parameter+9,r24
149 00b0 8AE0 ldi r24,lo8(10)
150 00b2 8093 0000 sts EE_Parameter+10,r24
151 00b6 8BE0 ldi r24,lo8(11)
152 00b8 8093 0000 sts EE_Parameter+11,r24
153 00bc 8CE0 ldi r24,lo8(12)
154 00be 8093 0000 sts EE_Parameter+12,r24
155 /* epilogue: frame size=0 */
156 00c2 0895 ret
157 /* epilogue end (size=1) */
158 /* function ParamSet_DefaultStickMapping size 37 (36) */
160 .global CommonDefaults
162 CommonDefaults:
163 /* prologue: frame size=0 */
164 /* prologue end (size=0) */
165 00c4 8CE5 ldi r24,lo8(92)
166 00c6 8093 0000 sts EE_Parameter,r24
167 00ca 8CE0 ldi r24,lo8(12)
168 00cc E0E0 ldi r30,lo8(EE_Parameter+112)
169 00ce F0E0 ldi r31,hi8(EE_Parameter+112)
170 00d0 1192 st Z+,__zero_reg__
171 00d2 8A95 dec r24
172 00d4 01F4 brne .-6
173 00d6 8091 0000 lds r24,PlatinenVersion
174 00da 8431 cpi r24,lo8(20)
175 00dc 00F0 brlo .L33
176 00de 8AE0 ldi r24,lo8(10)
177 00e0 8093 0000 sts EE_Parameter+32,r24
178 00e4 1092 0000 sts EE_Parameter+68,__zero_reg__
179 00e8 8BE1 ldi r24,lo8(27)
180 00ea 8093 0000 sts EE_Parameter+28,r24
181 00ee 8EE4 ldi r24,lo8(78)
182 00f0 00C0 rjmp .L35
183 .L33:
184 00f2 83E0 ldi r24,lo8(3)
185 00f4 8093 0000 sts EE_Parameter+32,r24
186 00f8 80E2 ldi r24,lo8(32)
187 00fa 8093 0000 sts EE_Parameter+68,r24
188 00fe 8EE1 ldi r24,lo8(30)
189 0100 8093 0000 sts EE_Parameter+28,r24
190 0104 85E5 ldi r24,lo8(85)
191 .L35:
192 0106 8093 0000 sts EE_Parameter+65,r24
193 010a 8093 0000 sts EE_Parameter+66,r24
194 010e 80E2 ldi r24,lo8(32)
195 0110 8093 0000 sts EE_Parameter+67,r24
196 0114 1092 0000 sts EE_Parameter+108,__zero_reg__
197 0118 8AE6 ldi r24,lo8(106)
198 011a 8093 0000 sts EE_Parameter+13,r24
199 011e 82E2 ldi r24,lo8(34)
200 0120 8093 0000 sts EE_Parameter+110,r24
201 0124 80E4 ldi r24,lo8(64)
202 0126 8093 0000 sts EE_Parameter+111,r24
203 012a 66E0 ldi r22,lo8(6)
204 012c 6093 0000 sts EE_Parameter+39,r22
205 0130 1092 0000 sts EE_Parameter+100,__zero_reg__
206 0134 1092 0000 sts EE_Parameter+97,__zero_reg__
207 0138 48E0 ldi r20,lo8(8)
208 013a 4093 0000 sts EE_Parameter+26,r20
209 013e 56EE ldi r21,lo8(-26)
210 0140 5093 0000 sts EE_Parameter+27,r21
211 0144 8093 0000 sts EE_Parameter+29,r24
212 0148 9EE1 ldi r25,lo8(30)
213 014a 9093 0000 sts EE_Parameter+14,r25
214 014e 8FEF ldi r24,lo8(-1)
215 0150 8093 0000 sts EE_Parameter+16,r24
216 0154 2FE0 ldi r18,lo8(15)
217 0156 2093 0000 sts EE_Parameter+17,r18
218 015a 9093 0000 sts EE_Parameter+15,r25
219 015e 1092 0000 sts EE_Parameter+19,__zero_reg__
220 0162 4093 0000 sts EE_Parameter+20,r20
221 0166 84E1 ldi r24,lo8(20)
222 0168 8093 0000 sts EE_Parameter+21,r24
223 016c 1092 0000 sts EE_Parameter+22,__zero_reg__
224 0170 2093 0000 sts EE_Parameter+18,r18
225 0174 1092 0000 sts EE_Parameter+41,__zero_reg__
226 0178 1092 0000 sts EE_Parameter+42,__zero_reg__
227 017c 1092 0000 sts EE_Parameter+43,__zero_reg__
228 0180 1092 0000 sts EE_Parameter+44,__zero_reg__
229 0184 1092 0000 sts EE_Parameter+70,__zero_reg__
230 0188 1092 0000 sts EE_Parameter+71,__zero_reg__
231 018c 1092 0000 sts EE_Parameter+72,__zero_reg__
232 0190 1092 0000 sts EE_Parameter+73,__zero_reg__
233 0194 90E8 ldi r25,lo8(-128)
234 0196 9093 0000 sts EE_Parameter+45,r25
235 019a 32E3 ldi r19,lo8(50)
236 019c 3093 0000 sts EE_Parameter+46,r19
237 01a0 82E0 ldi r24,lo8(2)
238 01a2 8093 0000 sts EE_Parameter+109,r24
239 01a6 2093 0000 sts EE_Parameter+47,r18
240 01aa 5093 0000 sts EE_Parameter+48,r21
241 01ae 84E0 ldi r24,lo8(4)
242 01b0 8093 0000 sts EE_Parameter+53,r24
243 01b4 8DE7 ldi r24,lo8(125)
244 01b6 8093 0000 sts EE_Parameter+56,r24
245 01ba 8093 0000 sts EE_Parameter+57,r24
246 01be 8093 0000 sts EE_Parameter+58,r24
247 01c2 9093 0000 sts EE_Parameter+49,r25
248 01c6 25E5 ldi r18,lo8(85)
249 01c8 2093 0000 sts EE_Parameter+50,r18
250 01cc 86E4 ldi r24,lo8(70)
251 01ce 8093 0000 sts EE_Parameter+51,r24
252 01d2 8CED ldi r24,lo8(-36)
253 01d4 8093 0000 sts EE_Parameter+52,r24
254 01d8 8CE3 ldi r24,lo8(60)
255 01da 8093 0000 sts EE_Parameter+54,r24
256 01de 1092 0000 sts EE_Parameter+55,__zero_reg__
257 01e2 8FE5 ldi r24,lo8(95)
258 01e4 8093 0000 sts EE_Parameter+74,r24
259 01e8 83EF ldi r24,lo8(-13)
260 01ea 8093 0000 sts EE_Parameter+76,r24
261 01ee 8AEA ldi r24,lo8(-86)
262 01f0 8093 0000 sts EE_Parameter+78,r24
263 01f4 8093 0000 sts EE_Parameter+79,r24
264 01f8 88E2 ldi r24,lo8(40)
265 01fa 8093 0000 sts EE_Parameter+75,r24
266 01fe 8093 0000 sts EE_Parameter+77,r24
267 0202 1092 0000 sts EE_Parameter+80,__zero_reg__
268 0206 3093 0000 sts EE_Parameter+59,r19
269 020a 9AE5 ldi r25,lo8(90)
270 020c 9093 0000 sts EE_Parameter+60,r25
271 0210 3093 0000 sts EE_Parameter+61,r19
272 0214 8EEF ldi r24,lo8(-2)
273 0216 8093 0000 sts EE_Parameter+81,r24
274 021a 84E6 ldi r24,lo8(100)
275 021c 8093 0000 sts EE_Parameter+82,r24
276 0220 9093 0000 sts EE_Parameter+83,r25
277 0224 9093 0000 sts EE_Parameter+84,r25
278 0228 9093 0000 sts EE_Parameter+85,r25
279 022c 8BE4 ldi r24,lo8(75)
280 022e 8093 0000 sts EE_Parameter+86,r24
281 0232 2093 0000 sts EE_Parameter+87,r18
282 0236 8093 0000 sts EE_Parameter+88,r24
283 023a 1092 0000 sts EE_Parameter+89,__zero_reg__
284 023e 6093 0000 sts EE_Parameter+90,r22
285 0242 4093 0000 sts EE_Parameter+91,r20
286 0246 9093 0000 sts EE_Parameter+92,r25
287 024a 8AE2 ldi r24,lo8(42)
288 024c 8093 0000 sts EE_Parameter+93,r24
289 0250 85EF ldi r24,lo8(-11)
290 0252 8093 0000 sts EE_Parameter+94,r24
291 0256 8CE8 ldi r24,lo8(-116)
292 0258 8093 0000 sts EE_Parameter+95,r24
293 025c 85E0 ldi r24,lo8(5)
294 025e 8093 0000 sts EE_Parameter+96,r24
295 0262 1092 0000 sts EE_Parameter+98,__zero_reg__
296 0266 1092 0000 sts EE_Parameter+99,__zero_reg__
297 026a 81E2 ldi r24,lo8(33)
298 026c 8093 0000 sts EE_Parameter+36,r24
299 0270 81E4 ldi r24,lo8(65)
300 0272 8093 0000 sts EE_Parameter+37,r24
301 0276 9093 0000 sts EE_Parameter+38,r25
302 027a 1092 0000 sts EE_Parameter+101,__zero_reg__
303 027e 1092 0000 sts EE_Parameter+102,__zero_reg__
304 0282 1092 0000 sts EE_Parameter+103,__zero_reg__
305 0286 86E9 ldi r24,lo8(-106)
306 0288 8093 0000 sts EE_Parameter+104,r24
307 028c 9093 0000 sts EE_Parameter+62,r25
308 0290 87E3 ldi r24,lo8(55)
309 0292 8093 0000 sts EE_Parameter+63,r24
310 0296 1092 0000 sts EE_Parameter+105,__zero_reg__
311 029a 1092 0000 sts EE_Parameter+106,__zero_reg__
312 029e 1092 0000 sts EE_Parameter+107,__zero_reg__
313 /* epilogue: frame size=0 */
314 02a2 0895 ret
315 /* epilogue end (size=1) */
316 /* function CommonDefaults size 240 (239) */
318 .global ParamSet_DefaultSet1
320 ParamSet_DefaultSet1:
321 /* prologue: frame size=0 */
322 /* prologue end (size=0) */
323 02a4 0E94 0000 call CommonDefaults
324 02a8 8AE0 ldi r24,lo8(10)
325 02aa 8093 0000 sts EE_Parameter+23,r24
326 02ae 80E1 ldi r24,lo8(16)
327 02b0 8093 0000 sts EE_Parameter+24,r24
328 02b4 26E0 ldi r18,lo8(6)
329 02b6 2093 0000 sts EE_Parameter+25,r18
330 02ba 9AE5 ldi r25,lo8(90)
331 02bc 9093 0000 sts EE_Parameter+30,r25
332 02c0 88E7 ldi r24,lo8(120)
333 02c2 8093 0000 sts EE_Parameter+31,r24
334 02c6 9093 0000 sts EE_Parameter+33,r25
335 02ca 8093 0000 sts EE_Parameter+34,r24
336 02ce 2093 0000 sts EE_Parameter+35,r18
337 02d2 80E2 ldi r24,lo8(32)
338 02d4 8093 0000 sts EE_Parameter+40,r24
339 02d8 8CE3 ldi r24,lo8(60)
340 02da 8093 0000 sts EE_Parameter+64,r24
341 02de 8BE4 ldi r24,lo8(75)
342 02e0 8093 0000 sts EE_Parameter+69,r24
343 02e4 86E4 ldi r24,lo8(1953718598)
344 02e6 91E6 ldi r25,hi8(1953718598)
345 02e8 A3E7 ldi r26,hlo8(1953718598)
346 02ea B4E7 ldi r27,hhi8(1953718598)
347 02ec 8093 0000 sts EE_Parameter+112,r24
348 02f0 9093 0000 sts (EE_Parameter+112)+1,r25
349 02f4 A093 0000 sts (EE_Parameter+112)+2,r26
350 02f8 B093 0000 sts (EE_Parameter+112)+3,r27
351 02fc 6CE7 ldi r22,lo8(124)
352 02fe 70E0 ldi r23,hi8(124)
353 0300 80E0 ldi r24,lo8(EE_Parameter)
354 0302 90E0 ldi r25,hi8(EE_Parameter)
355 0304 0E94 0000 call RAM_Checksum
356 0308 8093 0000 sts EE_Parameter+124,r24
357 /* epilogue: frame size=0 */
358 030c 0895 ret
359 /* epilogue end (size=1) */
360 /* function ParamSet_DefaultSet1 size 53 (52) */
362 .data
363 .LC0:
364 0000 4E6F 726D .string "Normal"
364 616C 00
365 .text
366 .global ParamSet_DefaultSet2
368 ParamSet_DefaultSet2:
369 /* prologue: frame size=0 */
370 030e CF93 push r28
371 0310 DF93 push r29
372 /* prologue end (size=2) */
373 0312 0E94 0000 call CommonDefaults
374 0316 88E0 ldi r24,lo8(8)
375 0318 8093 0000 sts EE_Parameter+23,r24
376 031c 30E1 ldi r19,lo8(16)
377 031e 3093 0000 sts EE_Parameter+24,r19
378 0322 26E0 ldi r18,lo8(6)
379 0324 2093 0000 sts EE_Parameter+25,r18
380 0328 94E6 ldi r25,lo8(100)
381 032a 9093 0000 sts EE_Parameter+30,r25
382 032e 88E7 ldi r24,lo8(120)
383 0330 8093 0000 sts EE_Parameter+31,r24
384 0334 9093 0000 sts EE_Parameter+33,r25
385 0338 8093 0000 sts EE_Parameter+34,r24
386 033c 2093 0000 sts EE_Parameter+35,r18
387 0340 3093 0000 sts EE_Parameter+40,r19
388 0344 86E4 ldi r24,lo8(70)
389 0346 8093 0000 sts EE_Parameter+64,r24
390 034a 8093 0000 sts EE_Parameter+69,r24
391 034e A0E0 ldi r26,lo8(EE_Parameter+112)
392 0350 B0E0 ldi r27,hi8(EE_Parameter+112)
393 0352 E0E0 ldi r30,lo8(.LC0)
394 0354 F0E0 ldi r31,hi8(.LC0)
395 0356 ED01 movw r28,r26
396 0358 0190 ld __tmp_reg__,Z+
397 035a 0992 st Y+,__tmp_reg__
398 035c 2A95 dec r18
399 035e 01F4 brne .-8
400 0360 6CE7 ldi r22,lo8(124)
401 0362 70E0 ldi r23,hi8(124)
402 0364 CD01 movw r24,r26
403 0366 8057 subi r24,lo8(-(-112))
404 0368 9040 sbci r25,hi8(-(-112))
405 036a 0E94 0000 call RAM_Checksum
406 036e 8093 0000 sts EE_Parameter+124,r24
407 /* epilogue: frame size=0 */
408 0372 DF91 pop r29
409 0374 CF91 pop r28
410 0376 0895 ret
411 /* epilogue end (size=3) */
412 /* function ParamSet_DefaultSet2 size 53 (48) */
414 .global ParamSet_DefaultSet3
416 ParamSet_DefaultSet3:
417 /* prologue: frame size=0 */
418 /* prologue end (size=0) */
419 0378 0E94 0000 call CommonDefaults
420 037c 26E0 ldi r18,lo8(6)
421 037e 2093 0000 sts EE_Parameter+23,r18
422 0382 8AE0 ldi r24,lo8(10)
423 0384 8093 0000 sts EE_Parameter+24,r24
424 0388 84E0 ldi r24,lo8(4)
425 038a 8093 0000 sts EE_Parameter+25,r24
426 038e 94E6 ldi r25,lo8(100)
427 0390 9093 0000 sts EE_Parameter+30,r25
428 0394 88E7 ldi r24,lo8(120)
429 0396 8093 0000 sts EE_Parameter+31,r24
430 039a 9093 0000 sts EE_Parameter+33,r25
431 039e 8093 0000 sts EE_Parameter+34,r24
432 03a2 2093 0000 sts EE_Parameter+35,r18
433 03a6 80E1 ldi r24,lo8(16)
434 03a8 8093 0000 sts EE_Parameter+40,r24
435 03ac 86E4 ldi r24,lo8(70)
436 03ae 8093 0000 sts EE_Parameter+64,r24
437 03b2 8093 0000 sts EE_Parameter+69,r24
438 03b6 85E4 ldi r24,lo8(2037604677)
439 03b8 91E6 ldi r25,hi8(2037604677)
440 03ba A3E7 ldi r26,hlo8(2037604677)
441 03bc B9E7 ldi r27,hhi8(2037604677)
442 03be 8093 0000 sts EE_Parameter+112,r24
443 03c2 9093 0000 sts (EE_Parameter+112)+1,r25
444 03c6 A093 0000 sts (EE_Parameter+112)+2,r26
445 03ca B093 0000 sts (EE_Parameter+112)+3,r27
446 03ce 6CE7 ldi r22,lo8(124)
447 03d0 70E0 ldi r23,hi8(124)
448 03d2 80E0 ldi r24,lo8(EE_Parameter)
449 03d4 90E0 ldi r25,hi8(EE_Parameter)
450 03d6 0E94 0000 call RAM_Checksum
451 03da 8093 0000 sts EE_Parameter+124,r24
452 /* epilogue: frame size=0 */
453 03de 0895 ret
454 /* epilogue end (size=1) */
455 /* function ParamSet_DefaultSet3 size 52 (51) */
457 .global GetParamByte
459 GetParamByte:
460 /* prologue: frame size=0 */
461 /* prologue end (size=0) */
462 .L40:
463 03e0 F999 sbic 63-0x20,1
464 03e2 00C0 rjmp .L40
465 03e4 92BD out (65)+1-0x20,r25
466 03e6 81BD out 65-0x20,r24
467 /* #APP */
468 /* START EEPROM READ CRITICAL SECTION */
469 03e8 F89A sbi 31, 0
470 03ea 80B5 in r24, 32
471 /* END EEPROM READ CRITICAL SECTION */
472
473 /* #NOAPP */
474 03ec 9927 clr r25
475 /* epilogue: frame size=0 */
476 03ee 0895 ret
477 /* epilogue end (size=1) */
478 /* function GetParamByte size 16 (15) */
480 .global SetParamByte
482 SetParamByte:
483 /* prologue: frame size=0 */
484 /* prologue end (size=0) */
485 .L45:
486 03f0 F999 sbic 63-0x20,1
487 03f2 00C0 rjmp .L45
488 03f4 1FBA out 63-0x20,__zero_reg__
489 03f6 92BD out (65)+1-0x20,r25
490 03f8 81BD out 65-0x20,r24
491 03fa 60BD out 64-0x20,r22
492 /* #APP */
493 /* START EEPROM WRITE CRITICAL SECTION */
494 03fc 0FB6 in r0, 63
495 03fe F894 cli
496 0400 FA9A sbi 31, 2
497 0402 F99A sbi 31, 1
498 0404 0FBE out 63, r0
499 /* END EEPROM WRITE CRITICAL SECTION */
500 /* #NOAPP */
501 /* epilogue: frame size=0 */
502 0406 0895 ret
503 /* epilogue end (size=1) */
504 /* function SetParamByte size 21 (20) */
506 .global GetParamWord
508 GetParamWord:
509 /* prologue: frame size=0 */
510 /* prologue end (size=0) */
511 0408 60E0 ldi r22,lo8(pm(eeprom_read_byte))
512 040a 70E0 ldi r23,hi8(pm(eeprom_read_byte))
513 040c 0E94 0000 call __eerd_word
514 /* epilogue: frame size=0 */
515 0410 0895 ret
516 /* epilogue end (size=1) */
517 /* function GetParamWord size 5 (4) */
519 .global SetParamWord
521 SetParamWord:
522 /* prologue: frame size=0 */
523 /* prologue end (size=0) */
524 0412 40E0 ldi r20,lo8(pm(eeprom_write_byte))
525 0414 50E0 ldi r21,hi8(pm(eeprom_write_byte))
526 0416 0E94 0000 call __eewr_word
527 /* epilogue: frame size=0 */
528 041a 0895 ret
529 /* epilogue end (size=1) */
530 /* function SetParamWord size 5 (4) */
532 .global ParamSet_ReadFromEEProm
534 ParamSet_ReadFromEEProm:
535 /* prologue: frame size=0 */
536 041c EF92 push r14
537 041e FF92 push r15
538 0420 0F93 push r16
539 0422 1F93 push r17
540 0424 CF93 push r28
541 /* prologue end (size=5) */
542 0426 C82F mov r28,r24
543 0428 8150 subi r24,lo8(-(-1))
544 042a 8530 cpi r24,lo8(5)
545 042c 00F0 brlo .L54
546 042e C3E0 ldi r28,lo8(3)
547 .L54:
548 0430 8DE7 ldi r24,lo8(125)
549 0432 C89F mul r28,r24
550 0434 8001 movw r16,r0
551 0436 1124 clr r1
552 0438 87EE ldi r24,lo8(-25)
553 043a E82E mov r14,r24
554 043c 8FEF ldi r24,hi8(-25)
555 043e F82E mov r15,r24
556 0440 E00E add r14,r16
557 0442 F11E adc r15,r17
558 0444 6CE7 ldi r22,lo8(124)
559 0446 70E0 ldi r23,hi8(124)
560 0448 C701 movw r24,r14
561 044a 0E94 0000 call EEProm_Checksum
562 044e 682F mov r22,r24
563 0450 9801 movw r18,r16
564 0452 2D59 subi r18,lo8(-(99))
565 0454 3F4F sbci r19,hi8(-(99))
566 .L56:
567 0456 8FB3 in r24,63-0x20
568 0458 9927 clr r25
569 045a AC01 movw r20,r24
570 045c 4270 andi r20,lo8(2)
571 045e 5070 andi r21,hi8(2)
572 0460 81FD sbrc r24,1
573 0462 00C0 rjmp .L56
574 0464 32BD out (65)+1-0x20,r19
575 0466 21BD out 65-0x20,r18
576 /* #APP */
577 /* START EEPROM READ CRITICAL SECTION */
578 0468 F89A sbi 31, 0
579 046a 80B5 in r24, 32
580 /* END EEPROM READ CRITICAL SECTION */
581
582 /* #NOAPP */
583 046c 8617 cp r24,r22
584 046e 01F0 breq .L61
585 0470 CA01 movw r24,r20
586 0472 00C0 rjmp .L53
587 .L61:
588 0474 8FB3 in r24,63-0x20
589 0476 9927 clr r25
590 0478 9C01 movw r18,r24
591 047a 2270 andi r18,lo8(2)
592 047c 3070 andi r19,hi8(2)
593 047e 81FD sbrc r24,1
594 0480 00C0 rjmp .L61
595 0482 F2BC out (65)+1-0x20,r15
596 0484 E1BC out 65-0x20,r14
597 /* #APP */
598 /* START EEPROM READ CRITICAL SECTION */
599 0486 F89A sbi 31, 0
600 0488 80B5 in r24, 32
601 /* END EEPROM READ CRITICAL SECTION */
602
603 /* #NOAPP */
604 048a 8C35 cpi r24,lo8(92)
605 048c 01F0 breq .L60
606 048e C901 movw r24,r18
607 0490 00C0 rjmp .L53
608 .L60:
609 0492 8DE7 ldi r24,lo8(125)
610 0494 C89F mul r28,r24
611 0496 C001 movw r24,r0
612 0498 1124 clr r1
613 049a 4997 sbiw r24,25
614 049c 20E0 ldi r18,lo8(pm(eeprom_read_byte))
615 049e 30E0 ldi r19,hi8(pm(eeprom_read_byte))
616 04a0 4DE7 ldi r20,lo8(125)
617 04a2 50E0 ldi r21,hi8(125)
618 04a4 BC01 movw r22,r24
619 04a6 80E0 ldi r24,lo8(EE_Parameter)
620 04a8 90E0 ldi r25,hi8(EE_Parameter)
621 04aa 0E94 0000 call __eerd_block
622 04ae 0E94 0000 call LED_Init
623 04b2 0E94 0000 call LIBFC_HoTT_Clear
624 04b6 81E0 ldi r24,lo8(1)
625 04b8 90E0 ldi r25,hi8(1)
626 .L53:
627 /* epilogue: frame size=0 */
628 04ba CF91 pop r28
629 04bc 1F91 pop r17
630 04be 0F91 pop r16
631 04c0 FF90 pop r15
632 04c2 EF90 pop r14
633 04c4 0895 ret
634 /* epilogue end (size=6) */
635 /* function ParamSet_ReadFromEEProm size 101 (90) */
637 .global SetActiveParamSet
639 SetActiveParamSet:
640 /* prologue: frame size=0 */
641 /* prologue end (size=0) */
642 04c6 282F mov r18,r24
643 04c8 8630 cpi r24,lo8(6)
644 04ca 00F0 brlo .L67
645 04cc 25E0 ldi r18,lo8(5)
646 04ce 00C0 rjmp .L69
647 .L67:
648 04d0 8823 tst r24
649 04d2 01F4 brne .L69
650 04d4 21E0 ldi r18,lo8(1)
651 .L69:
652 04d6 F999 sbic 63-0x20,1
653 04d8 00C0 rjmp .L69
654 04da 1FBA out 63-0x20,__zero_reg__
655 04dc 82E0 ldi r24,lo8(2)
656 04de 90E0 ldi r25,hi8(2)
657 04e0 92BD out (65)+1-0x20,r25
658 04e2 81BD out 65-0x20,r24
659 04e4 20BD out 64-0x20,r18
660 /* #APP */
661 /* START EEPROM WRITE CRITICAL SECTION */
662 04e6 0FB6 in r0, 63
663 04e8 F894 cli
664 04ea FA9A sbi 31, 2
665 04ec F99A sbi 31, 1
666 04ee 0FBE out 63, r0
667 /* END EEPROM WRITE CRITICAL SECTION */
668 /* #NOAPP */
669 /* epilogue: frame size=0 */
670 04f0 0895 ret
671 /* epilogue end (size=1) */
672 /* function SetActiveParamSet size 31 (30) */
674 .global ParamSet_WriteToEEProm
676 ParamSet_WriteToEEProm:
677 /* prologue: frame size=0 */
678 04f2 CF93 push r28
679 /* prologue end (size=1) */
680 04f4 C82F mov r28,r24
681 04f6 8091 0000 lds r24,EE_Parameter
682 04fa 8C35 cpi r24,lo8(92)
683 04fc 01F0 breq .+2
684 04fe 00C0 rjmp .L74
685 0500 C630 cpi r28,lo8(6)
686 0502 00F0 brlo .L75
687 0504 C5E0 ldi r28,lo8(5)
688 0506 00C0 rjmp .L76
689 .L75:
690 0508 CC23 tst r28
691 050a 01F4 brne .+2
692 050c 00C0 rjmp .L74
693 .L76:
694 050e 0E94 0000 call LIBFC_CheckSettings
695 0512 8091 0000 lds r24,EE_Parameter+111
696 0516 82FF sbrs r24,2
697 0518 00C0 rjmp .L77
698 051a 8091 0000 lds r24,EE_Parameter+37
699 051e 8436 cpi r24,lo8(100)
700 0520 00F0 brlo .L77
701 0522 80E5 ldi r24,lo8(80)
702 0524 8093 0000 sts EE_Parameter+37,r24
703 .L77:
704 0528 6CE7 ldi r22,lo8(124)
705 052a 70E0 ldi r23,hi8(124)
706 052c 80E0 ldi r24,lo8(EE_Parameter)
707 052e 90E0 ldi r25,hi8(EE_Parameter)
708 0530 0E94 0000 call RAM_Checksum
709 0534 8093 0000 sts EE_Parameter+124,r24
710 0538 8DE7 ldi r24,lo8(125)
711 053a C89F mul r28,r24
712 053c C001 movw r24,r0
713 053e 1124 clr r1
714 0540 20E0 ldi r18,lo8(pm(eeprom_write_byte))
715 0542 30E0 ldi r19,hi8(pm(eeprom_write_byte))
716 0544 4DE7 ldi r20,lo8(125)
717 0546 50E0 ldi r21,hi8(125)
718 0548 60E0 ldi r22,lo8(EE_Parameter)
719 054a 70E0 ldi r23,hi8(EE_Parameter)
720 054c 4997 sbiw r24,25
721 054e 0E94 0000 call __eewr_block
722 0552 20E0 ldi r18,lo8(pm(eeprom_write_byte))
723 0554 30E0 ldi r19,hi8(pm(eeprom_write_byte))
724 0556 4CE0 ldi r20,lo8(12)
725 0558 50E0 ldi r21,hi8(12)
726 055a 60E0 ldi r22,lo8(EE_Parameter+1)
727 055c 70E0 ldi r23,hi8(EE_Parameter+1)
728 055e 80E5 ldi r24,lo8(80)
729 0560 90E0 ldi r25,hi8(80)
730 0562 0E94 0000 call __eewr_block
731 0566 6CE0 ldi r22,lo8(12)
732 0568 70E0 ldi r23,hi8(12)
733 056a 80E0 ldi r24,lo8(EE_Parameter+1)
734 056c 90E0 ldi r25,hi8(EE_Parameter+1)
735 056e 0E94 0000 call RAM_Checksum
736 0572 282F mov r18,r24
737 .L81:
738 0574 F999 sbic 63-0x20,1
739 0576 00C0 rjmp .L81
740 0578 1FBA out 63-0x20,__zero_reg__
741 057a 8CE5 ldi r24,lo8(92)
742 057c 90E0 ldi r25,hi8(92)
743 057e 92BD out (65)+1-0x20,r25
744 0580 81BD out 65-0x20,r24
745 0582 20BD out 64-0x20,r18
746 /* #APP */
747 /* START EEPROM WRITE CRITICAL SECTION */
748 0584 0FB6 in r0, 63
749 0586 F894 cli
750 0588 FA9A sbi 31, 2
751 058a F99A sbi 31, 1
752 058c 0FBE out 63, r0
753 /* END EEPROM WRITE CRITICAL SECTION */
754 /* #NOAPP */
755 058e 8C2F mov r24,r28
756 0590 0E94 0000 call SetActiveParamSet
757 0594 0E94 0000 call LED_Init
758 0598 0E94 0000 call LIBFC_HoTT_Clear
759 059c 81E0 ldi r24,lo8(1)
760 059e 90E0 ldi r25,hi8(1)
761 05a0 00C0 rjmp .L73
762 .L74:
763 05a2 80E0 ldi r24,lo8(0)
764 05a4 90E0 ldi r25,hi8(0)
765 .L73:
766 /* epilogue: frame size=0 */
767 05a6 CF91 pop r28
768 05a8 0895 ret
769 /* epilogue end (size=2) */
770 /* function ParamSet_WriteToEEProm size 101 (98) */
772 .global MixerTable_ReadFromEEProm
774 MixerTable_ReadFromEEProm:
775 /* prologue: frame size=0 */
776 /* prologue end (size=0) */
777 05aa 6DE4 ldi r22,lo8(77)
778 05ac 70E0 ldi r23,hi8(77)
779 05ae 88EE ldi r24,lo8(1000)
780 05b0 93E0 ldi r25,hi8(1000)
781 05b2 0E94 0000 call EEProm_Checksum
782 05b6 482F mov r20,r24
783 .L87:
784 05b8 8FB3 in r24,63-0x20
785 05ba 9927 clr r25
786 05bc 9C01 movw r18,r24
787 05be 2270 andi r18,lo8(2)
788 05c0 3070 andi r19,hi8(2)
789 05c2 81FD sbrc r24,1
790 05c4 00C0 rjmp .L87
791 05c6 85E3 ldi r24,lo8(1077)
792 05c8 94E0 ldi r25,hi8(1077)
793 05ca 92BD out (65)+1-0x20,r25
794 05cc 81BD out 65-0x20,r24
795 /* #APP */
796 /* START EEPROM READ CRITICAL SECTION */
797 05ce F89A sbi 31, 0
798 05d0 80B5 in r24, 32
799 /* END EEPROM READ CRITICAL SECTION */
800
801 /* #NOAPP */
802 05d2 8417 cp r24,r20
803 05d4 01F4 brne .L97
804 .L92:
805 05d6 8FB3 in r24,63-0x20
806 05d8 9927 clr r25
807 05da 9C01 movw r18,r24
808 05dc 2270 andi r18,lo8(2)
809 05de 3070 andi r19,hi8(2)
810 05e0 81FD sbrc r24,1
811 05e2 00C0 rjmp .L92
812 05e4 88EE ldi r24,lo8(1000)
813 05e6 93E0 ldi r25,hi8(1000)
814 05e8 92BD out (65)+1-0x20,r25
815 05ea 81BD out 65-0x20,r24
816 /* #APP */
817 /* START EEPROM READ CRITICAL SECTION */
818 05ec F89A sbi 31, 0
819 05ee 80B5 in r24, 32
820 /* END EEPROM READ CRITICAL SECTION */
821
822 /* #NOAPP */
823 05f0 8130 cpi r24,lo8(1)
824 05f2 01F0 breq .L91
825 .L97:
826 05f4 C901 movw r24,r18
827 05f6 0895 ret
828 .L91:
829 05f8 20E0 ldi r18,lo8(pm(eeprom_read_byte))
830 05fa 30E0 ldi r19,hi8(pm(eeprom_read_byte))
831 05fc 4EE4 ldi r20,lo8(78)
832 05fe 50E0 ldi r21,hi8(78)
833 0600 68EE ldi r22,lo8(1000)
834 0602 73E0 ldi r23,hi8(1000)
835 0604 80E0 ldi r24,lo8(Mixer)
836 0606 90E0 ldi r25,hi8(Mixer)
837 0608 0E94 0000 call __eerd_block
838 060c 81E0 ldi r24,lo8(1)
839 060e 90E0 ldi r25,hi8(1)
840 0610 0895 ret
841 /* epilogue: frame size=0 */
842 /* epilogue: noreturn */
843 /* epilogue end (size=0) */
844 /* function MixerTable_ReadFromEEProm size 68 (68) */
846 .global MixerTable_WriteToEEProm
848 MixerTable_WriteToEEProm:
849 /* prologue: frame size=0 */
850 /* prologue end (size=0) */
851 0612 8091 0000 lds r24,Mixer
852 0616 8130 cpi r24,lo8(1)
853 0618 01F4 brne .L99
854 061a 6DE4 ldi r22,lo8(77)
855 061c 70E0 ldi r23,hi8(77)
856 061e 80E0 ldi r24,lo8(Mixer)
857 0620 90E0 ldi r25,hi8(Mixer)
858 0622 0E94 0000 call RAM_Checksum
859 0626 8093 0000 sts Mixer+77,r24
860 062a 20E0 ldi r18,lo8(pm(eeprom_write_byte))
861 062c 30E0 ldi r19,hi8(pm(eeprom_write_byte))
862 062e 4EE4 ldi r20,lo8(78)
863 0630 50E0 ldi r21,hi8(78)
864 0632 60E0 ldi r22,lo8(Mixer)
865 0634 70E0 ldi r23,hi8(Mixer)
866 0636 88EE ldi r24,lo8(1000)
867 0638 93E0 ldi r25,hi8(1000)
868 063a 0E94 0000 call __eewr_block
869 063e 81E0 ldi r24,lo8(1)
870 0640 90E0 ldi r25,hi8(1)
871 0642 0895 ret
872 .L99:
873 0644 80E0 ldi r24,lo8(0)
874 0646 90E0 ldi r25,hi8(0)
875 0648 0895 ret
876 /* epilogue: frame size=0 */
877 /* epilogue: noreturn */
878 /* epilogue end (size=0) */
879 /* function MixerTable_WriteToEEProm size 28 (28) */
881 .data
882 .LC1:
883 0007 5175 6164 .string "Quadro"
883 726F 00
884 000e 00 .string ""
885 000f 00 .string ""
886 0010 00 .string ""
887 0011 00 .string ""
888 0012 00 .string ""
889 0013 00 .string ""
890 .text
891 .global MixerTable_Default
893 MixerTable_Default:
894 /* prologue: frame size=0 */
895 064a CF93 push r28
896 064c DF93 push r29
897 /* prologue end (size=2) */
898 064e 81E0 ldi r24,lo8(1)
899 0650 8093 0000 sts Mixer,r24
900 0654 E0E0 ldi r30,lo8(Mixer)
901 0656 F0E0 ldi r31,hi8(Mixer)
902 0658 8FE0 ldi r24,lo8(15)
903 .L106:
904 065a 1586 std Z+13,__zero_reg__
905 065c 1686 std Z+14,__zero_reg__
906 065e 1786 std Z+15,__zero_reg__
907 0660 108A std Z+16,__zero_reg__
908 0662 8150 subi r24,lo8(-(-1))
909 0664 3496 adiw r30,4
910 0666 87FF sbrs r24,7
911 0668 00C0 rjmp .L106
912 066a 80E4 ldi r24,lo8(64)
913 066c 8093 0000 sts Mixer+13,r24
914 0670 8093 0000 sts Mixer+14,r24
915 0674 1092 0000 sts Mixer+15,__zero_reg__
916 0678 8093 0000 sts Mixer+16,r24
917 067c 8093 0000 sts Mixer+17,r24
918 0680 90EC ldi r25,lo8(-64)
919 0682 9093 0000 sts Mixer+18,r25
920 0686 1092 0000 sts Mixer+19,__zero_reg__
921 068a 8093 0000 sts Mixer+20,r24
922 068e 8093 0000 sts Mixer+21,r24
923 0692 1092 0000 sts Mixer+22,__zero_reg__
924 0696 9093 0000 sts Mixer+23,r25
925 069a 9093 0000 sts Mixer+24,r25
926 069e 8093 0000 sts Mixer+25,r24
927 06a2 1092 0000 sts Mixer+26,__zero_reg__
928 06a6 8093 0000 sts Mixer+27,r24
929 06aa 9093 0000 sts Mixer+28,r25
930 06ae A0E0 ldi r26,lo8(Mixer+1)
931 06b0 B0E0 ldi r27,hi8(Mixer+1)
932 06b2 8CE0 ldi r24,lo8(12)
933 06b4 E0E0 ldi r30,lo8(.LC1)
934 06b6 F0E0 ldi r31,hi8(.LC1)
935 06b8 ED01 movw r28,r26
936 06ba 0190 ld __tmp_reg__,Z+
937 06bc 0992 st Y+,__tmp_reg__
938 06be 8A95 dec r24
939 06c0 01F4 brne .-8
940 06c2 6DE4 ldi r22,lo8(77)
941 06c4 70E0 ldi r23,hi8(77)
942 06c6 CD01 movw r24,r26
943 06c8 0197 sbiw r24,1
944 06ca 0E94 0000 call RAM_Checksum
945 06ce 8093 0000 sts Mixer+77,r24
946 /* epilogue: frame size=0 */
947 06d2 DF91 pop r29
948 06d4 CF91 pop r28
949 06d6 0895 ret
950 /* epilogue end (size=3) */
951 /* function MixerTable_Default size 71 (66) */
953 .global GetActiveParamSet
955 GetActiveParamSet:
956 /* prologue: frame size=0 */
957 /* prologue end (size=0) */
958 .L110:
959 06d8 F999 sbic 63-0x20,1
960 06da 00C0 rjmp .L110
961 06dc 82E0 ldi r24,lo8(2)
962 06de 90E0 ldi r25,hi8(2)
963 06e0 92BD out (65)+1-0x20,r25
964 06e2 81BD out 65-0x20,r24
965 /* #APP */
966 /* START EEPROM READ CRITICAL SECTION */
967 06e4 F89A sbi 31, 0
968 06e6 80B5 in r24, 32
969 /* END EEPROM READ CRITICAL SECTION */
970
971 /* #NOAPP */
972 06e8 282F mov r18,r24
973 06ea 8630 cpi r24,lo8(6)
974 06ec 00F0 brlo .L114
975 06ee 23E0 ldi r18,lo8(3)
976 06f0 322F mov r19,r18
977 .L115:
978 06f2 F999 sbic 63-0x20,1
979 06f4 00C0 rjmp .L115
980 06f6 1FBA out 63-0x20,__zero_reg__
981 06f8 82E0 ldi r24,lo8(2)
982 06fa 90E0 ldi r25,hi8(2)
983 06fc 92BD out (65)+1-0x20,r25
984 06fe 81BD out 65-0x20,r24
985 0700 30BD out 64-0x20,r19
986 /* #APP */
987 /* START EEPROM WRITE CRITICAL SECTION */
988 0702 0FB6 in r0, 63
989 0704 F894 cli
990 0706 FA9A sbi 31, 2
991 0708 F99A sbi 31, 1
992 070a 0FBE out 63, r0
993 /* END EEPROM WRITE CRITICAL SECTION */
994 /* #NOAPP */
995 .L114:
996 070c 822F mov r24,r18
997 070e 9927 clr r25
998 /* epilogue: frame size=0 */
999 0710 0895 ret
1000 /* epilogue end (size=1) */
1001 /* function GetActiveParamSet size 46 (45) */
1003 .global SetDefaultParameter
1005 SetDefaultParameter:
1006 /* prologue: frame size=0 */
1007 0712 1F93 push r17
1008 0714 CF93 push r28
1009 /* prologue end (size=2) */
1010 0716 C82F mov r28,r24
1011 0718 162F mov r17,r22
1012 071a 8630 cpi r24,lo8(6)
1013 071c 00F0 brlo .L120
1014 071e C5E0 ldi r28,lo8(5)
1015 0720 00C0 rjmp .L121
1016 .L120:
1017 0722 8823 tst r24
1018 0724 01F4 brne .L121
1019 0726 C1E0 ldi r28,lo8(1)
1020 .L121:
1021 0728 8C2F mov r24,r28
1022 072a 9927 clr r25
1023 072c 8230 cpi r24,2
1024 072e 9105 cpc r25,__zero_reg__
1025 0730 01F0 breq .L125
1026 0732 8330 cpi r24,3
1027 0734 9105 cpc r25,__zero_reg__
1028 0736 04F4 brge .L127
1029 0738 0197 sbiw r24,1
1030 073a 01F4 brne .L127
1031 073c 0E94 0000 call ParamSet_DefaultSet1
1032 0740 00C0 rjmp .L123
1033 .L125:
1034 0742 0E94 0000 call ParamSet_DefaultSet2
1035 0746 00C0 rjmp .L123
1036 .L127:
1037 0748 0E94 0000 call ParamSet_DefaultSet3
1038 .L123:
1039 074c 1123 tst r17
1040 074e 01F0 breq .L129
1041 0750 6CE0 ldi r22,lo8(12)
1042 0752 70E0 ldi r23,hi8(12)
1043 0754 80E5 ldi r24,lo8(80)
1044 0756 90E0 ldi r25,hi8(80)
1045 0758 0E94 0000 call EEProm_Checksum
1046 075c 282F mov r18,r24
1047 .L131:
1048 075e F999 sbic 63-0x20,1
1049 0760 00C0 rjmp .L131
1050 0762 8CE5 ldi r24,lo8(92)
1051 0764 90E0 ldi r25,hi8(92)
1052 0766 92BD out (65)+1-0x20,r25
1053 0768 81BD out 65-0x20,r24
1054 /* #APP */
1055 /* START EEPROM READ CRITICAL SECTION */
1056 076a F89A sbi 31, 0
1057 076c 80B5 in r24, 32
1058 /* END EEPROM READ CRITICAL SECTION */
1059
1060 /* #NOAPP */
1061 076e 8217 cp r24,r18
1062 0770 01F4 brne .L129
1063 0772 20E0 ldi r18,lo8(pm(eeprom_read_byte))
1064 0774 30E0 ldi r19,hi8(pm(eeprom_read_byte))
1065 0776 4CE0 ldi r20,lo8(12)
1066 0778 50E0 ldi r21,hi8(12)
1067 077a 60E5 ldi r22,lo8(80)
1068 077c 70E0 ldi r23,hi8(80)
1069 077e 80E0 ldi r24,lo8(EE_Parameter+1)
1070 0780 90E0 ldi r25,hi8(EE_Parameter+1)
1071 0782 0E94 0000 call __eerd_block
1072 0786 00C0 rjmp .L137
1073 .L129:
1074 0788 0E94 0000 call ParamSet_DefaultStickMapping
1075 .L137:
1076 078c 8C2F mov r24,r28
1077 078e 0E94 0000 call ParamSet_WriteToEEProm
1078 /* epilogue: frame size=0 */
1079 0792 CF91 pop r28
1080 0794 1F91 pop r17
1081 0796 0895 ret
1082 /* epilogue end (size=3) */
1083 /* function SetDefaultParameter size 76 (71) */
1085 .section .progmem.data,"a",@progbits
1088 __c.0:
1089 0000 0A0D 4765 .string "\n\rGenerating default Parameter Set %d"
1089 6E65 7261
1089 7469 6E67
1089 2064 6566
1089 6175 6C74
1092 __c.1:
1093 0026 0A0D 5573 .string "\n\rUsing Parameter Set %d"
1093 696E 6720
1093 5061 7261
1093 6D65 7465
1093 7220 5365
1096 __c.2:
1097 003f 0A0D 4765 .string "\n\rGenerating default Mixer Table"
1097 6E65 7261
1097 7469 6E67
1097 2064 6566
1097 6175 6C74
1100 __c.3:
1101 0060 0A0D 4D69 .string "\n\rMixer-Config: '%s' (%u Motors)"
1101 7865 722D
1101 436F 6E66
1101 6967 3A20
1101 2725 7327
1102 .text
1103 .global ParamSet_Init
1105 ParamSet_Init:
1106 /* prologue: frame size=0 */
1107 0798 DF92 push r13
1108 079a EF92 push r14
1109 079c FF92 push r15
1110 079e 0F93 push r16
1111 07a0 1F93 push r17
1112 07a2 CF93 push r28
1113 /* prologue end (size=6) */
1114 07a4 FF24 clr r15
1115 07a6 DF2C mov r13,r15
1116 07a8 EF2C mov r14,r15
1117 07aa 81E0 ldi r24,lo8(1)
1118 07ac 90E0 ldi r25,hi8(1)
1119 07ae 0E94 0000 call GetParamByte
1120 07b2 8C35 cpi r24,lo8(92)
1121 07b4 01F0 breq .L139
1122 07b6 31E0 ldi r19,lo8(1)
1123 07b8 E32E mov r14,r19
1124 .L139:
1125 07ba 6CE0 ldi r22,lo8(12)
1126 07bc 70E0 ldi r23,hi8(12)
1127 07be 80E5 ldi r24,lo8(80)
1128 07c0 90E0 ldi r25,hi8(80)
1129 07c2 0E94 0000 call EEProm_Checksum
1130 07c6 C82F mov r28,r24
1131 .L141:
1132 07c8 F999 sbic 63-0x20,1
1133 07ca 00C0 rjmp .L141
1134 07cc 8CE5 ldi r24,lo8(92)
1135 07ce 90E0 ldi r25,hi8(92)
1136 07d0 92BD out (65)+1-0x20,r25
1137 07d2 81BD out 65-0x20,r24
1138 /* #APP */
1139 /* START EEPROM READ CRITICAL SECTION */
1140 07d4 F89A sbi 31, 0
1141 07d6 80B5 in r24, 32
1142 /* END EEPROM READ CRITICAL SECTION */
1143
1144 /* #NOAPP */
1145 07d8 8C17 cp r24,r28
1146 07da 01F4 brne .L140
1147 07dc 21E0 ldi r18,lo8(1)
1148 07de D22E mov r13,r18
1149 .L140:
1150 07e0 C1E0 ldi r28,lo8(1)
1151 07e2 01E0 ldi r16,lo8(1)
1152 07e4 10E0 ldi r17,hi8(1)
1153 .L159:
1154 07e6 EE20 tst r14
1155 07e8 01F4 brne .L149
1156 07ea 8C2F mov r24,r28
1157 07ec 0E94 0000 call ParamSet_ReadFromEEProm
1158 07f0 8823 tst r24
1159 07f2 01F4 brne .L147
1160 .L149:
1161 07f4 91E0 ldi r25,lo8(1)
1162 07f6 F92E mov r15,r25
1163 07f8 1F93 push r17
1164 07fa 0F93 push r16
1165 07fc 80E0 ldi r24,lo8(__c.0)
1166 07fe 90E0 ldi r25,hi8(__c.0)
1167 0800 9F93 push r25
1168 0802 8F93 push r24
1169 0804 80E0 ldi r24,lo8(pm(uart_putchar))
1170 0806 90E0 ldi r25,hi8(pm(uart_putchar))
1171 0808 9F93 push r25
1172 080a 8F93 push r24
1173 080c E091 0000 lds r30,_printf_P
1174 0810 F091 0000 lds r31,(_printf_P)+1
1175 0814 0995 icall
1176 0816 2DB7 in r18,__SP_L__
1177 0818 3EB7 in r19,__SP_H__
1178 081a 2A5F subi r18,lo8(-(6))
1179 081c 3F4F sbci r19,hi8(-(6))
1180 081e 2DBF out __SP_L__,r18
1181 0820 0230 cpi r16,2
1182 0822 1105 cpc r17,__zero_reg__
1183 0824 01F0 breq .L152
1184 0826 0330 cpi r16,3
1185 0828 1105 cpc r17,__zero_reg__
1186 082a 04F4 brge .L154
1187 082c 0130 cpi r16,1
1188 082e 1105 cpc r17,__zero_reg__
1189 0830 01F4 brne .L154
1190 0832 0E94 0000 call ParamSet_DefaultSet1
1191 0836 00C0 rjmp .L150
1192 .L152:
1193 0838 0E94 0000 call ParamSet_DefaultSet2
1194 083c 00C0 rjmp .L150
1195 .L154:
1196 083e 0E94 0000 call ParamSet_DefaultSet3
1197 .L150:
1198 0842 DD20 tst r13
1199 0844 01F0 breq .L156
1200 0846 20E0 ldi r18,lo8(pm(eeprom_read_byte))
1201 0848 30E0 ldi r19,hi8(pm(eeprom_read_byte))
1202 084a 4CE0 ldi r20,lo8(12)
1203 084c 50E0 ldi r21,hi8(12)
1204 084e 60E5 ldi r22,lo8(80)
1205 0850 70E0 ldi r23,hi8(80)
1206 0852 80E0 ldi r24,lo8(EE_Parameter+1)
1207 0854 90E0 ldi r25,hi8(EE_Parameter+1)
1208 0856 0E94 0000 call __eerd_block
1209 085a 00C0 rjmp .L158
1210 .L156:
1211 085c 0E94 0000 call ParamSet_DefaultStickMapping
1212 .L158:
1213 0860 8C2F mov r24,r28
1214 0862 0E94 0000 call ParamSet_WriteToEEProm
1215 .L147:
1216 0866 CF5F subi r28,lo8(-(1))
1217 0868 0F5F subi r16,lo8(-(1))
1218 086a 1F4F sbci r17,hi8(-(1))
1219 086c C630 cpi r28,lo8(6)
1220 086e 00F4 brsh .+2
1221 0870 00C0 rjmp .L159
1222 0872 FF20 tst r15
1223 0874 01F0 breq .L160
1224 0876 83E0 ldi r24,lo8(3)
1225 0878 0E94 0000 call SetActiveParamSet
1226 .L160:
1227 087c 0E94 0000 call GetActiveParamSet
1228 0880 C82F mov r28,r24
1229 0882 0E94 0000 call ParamSet_ReadFromEEProm
1230 0886 8C2F mov r24,r28
1231 0888 9927 clr r25
1232 088a 9F93 push r25
1233 088c 8F93 push r24
1234 088e 80E0 ldi r24,lo8(__c.1)
1235 0890 90E0 ldi r25,hi8(__c.1)
1236 0892 9F93 push r25
1237 0894 8F93 push r24
1238 0896 00E0 ldi r16,lo8(pm(uart_putchar))
1239 0898 10E0 ldi r17,hi8(pm(uart_putchar))
1240 089a 1F93 push r17
1241 089c 0F93 push r16
1242 089e E091 0000 lds r30,_printf_P
1243 08a2 F091 0000 lds r31,(_printf_P)+1
1244 08a6 0995 icall
1245 08a8 81E0 ldi r24,lo8(1)
1246 08aa 90E0 ldi r25,hi8(1)
1247 08ac 0E94 0000 call GetParamByte
1248 08b0 2DB7 in r18,__SP_L__
1249 08b2 3EB7 in r19,__SP_H__
1250 08b4 2A5F subi r18,lo8(-(6))
1251 08b6 3F4F sbci r19,hi8(-(6))
1252 08b8 2DBF out __SP_L__,r18
1253 08ba 8F3F cpi r24,lo8(-1)
1254 08bc 01F0 breq .L162
1255 08be 0E94 0000 call MixerTable_ReadFromEEProm
1256 08c2 8823 tst r24
1257 08c4 01F4 brne .L161
1258 .L162:
1259 08c6 80E0 ldi r24,lo8(__c.2)
1260 08c8 90E0 ldi r25,hi8(__c.2)
1261 08ca 9F93 push r25
1262 08cc 8F93 push r24
1263 08ce 1F93 push r17
1264 08d0 0F93 push r16
1265 08d2 E091 0000 lds r30,_printf_P
1266 08d6 F091 0000 lds r31,(_printf_P)+1
1267 08da 0995 icall
1268 08dc 0E94 0000 call MixerTable_Default
1269 08e0 0E94 0000 call MixerTable_WriteToEEProm
1270 08e4 0F90 pop __tmp_reg__
1271 08e6 0F90 pop __tmp_reg__
1272 08e8 0F90 pop __tmp_reg__
1273 08ea 0F90 pop __tmp_reg__
1274 .L161:
1275 08ec EE20 tst r14
1276 08ee 01F0 breq .L163
1277 08f0 6CE5 ldi r22,lo8(92)
1278 08f2 81E0 ldi r24,lo8(1)
1279 08f4 90E0 ldi r25,hi8(1)
1280 08f6 0E94 0000 call SetParamByte
1281 .L163:
1282 08fa 1092 0000 sts RequiredMotors,__zero_reg__
1283 08fe 90E0 ldi r25,lo8(0)
1284 0900 E0E0 ldi r30,lo8(Mixer+13)
1285 0902 F0E0 ldi r31,hi8(Mixer+13)
1286 0904 CFE0 ldi r28,lo8(15)
1287 .L168:
1288 0906 8081 ld r24,Z
1289 0908 3496 adiw r30,4
1290 090a 1816 cp __zero_reg__,r24
1291 090c 04F4 brge .L166
1292 090e 9F5F subi r25,lo8(-(1))
1293 .L166:
1294 0910 C150 subi r28,lo8(-(-1))
1295 0912 C7FF sbrs r28,7
1296 0914 00C0 rjmp .L168
1297 0916 9093 0000 sts RequiredMotors,r25
1298 091a 892F mov r24,r25
1299 091c 9927 clr r25
1300 091e 9F93 push r25
1301 0920 8F93 push r24
1302 0922 80E0 ldi r24,lo8(Mixer+1)
1303 0924 90E0 ldi r25,hi8(Mixer+1)
1304 0926 9F93 push r25
1305 0928 8F93 push r24
1306 092a 80E0 ldi r24,lo8(__c.3)
1307 092c 90E0 ldi r25,hi8(__c.3)
1308 092e 9F93 push r25
1309 0930 8F93 push r24
1310 0932 1F93 push r17
1311 0934 0F93 push r16
1312 0936 E091 0000 lds r30,_printf_P
1313 093a F091 0000 lds r31,(_printf_P)+1
1314 093e 0995 icall
1315 0940 0E94 0000 call PrintLine
1316 0944 8DB7 in r24,__SP_L__
1317 0946 9EB7 in r25,__SP_H__
1318 0948 0896 adiw r24,8
1319 094a 8DBF out __SP_L__,r24
1320 /* epilogue: frame size=0 */
1321 094c CF91 pop r28
1322 094e 1F91 pop r17
1323 0950 0F91 pop r16
1324 0952 FF90 pop r15
1325 0954 EF90 pop r14
1326 0956 DF90 pop r13
1327 0958 0895 ret
1328 /* epilogue end (size=7) */
1329 /* function ParamSet_Init size 233 (220) */
1331 .comm Mixer,78,1
1332 .comm RequiredMotors,1,1
1333 .comm EE_Parameter,125,1
1334 /* File "eeprom.c": code 1323 = 0x052b (1267), prologues 18, epilogues 38 */
DEFINED SYMBOLS
*ABS*:00000000 eeprom.c
C:\Temp/ccFnOSeQ.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccFnOSeQ.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccFnOSeQ.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccFnOSeQ.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccFnOSeQ.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccFnOSeQ.s:12 .text:00000000 eeprom_read_byte
C:\Temp/ccFnOSeQ.s:34 .text:00000010 eeprom_write_byte
C:\Temp/ccFnOSeQ.s:60 .text:00000028 RAM_Checksum
C:\Temp/ccFnOSeQ.s:88 .text:0000004a EEProm_Checksum
C:\Temp/ccFnOSeQ.s:128 .text:0000007a ParamSet_DefaultStickMapping
*COM*:0000007d EE_Parameter
C:\Temp/ccFnOSeQ.s:162 .text:000000c4 CommonDefaults
C:\Temp/ccFnOSeQ.s:320 .text:000002a4 ParamSet_DefaultSet1
C:\Temp/ccFnOSeQ.s:368 .text:0000030e ParamSet_DefaultSet2
C:\Temp/ccFnOSeQ.s:416 .text:00000378 ParamSet_DefaultSet3
C:\Temp/ccFnOSeQ.s:459 .text:000003e0 GetParamByte
C:\Temp/ccFnOSeQ.s:482 .text:000003f0 SetParamByte
C:\Temp/ccFnOSeQ.s:508 .text:00000408 GetParamWord
C:\Temp/ccFnOSeQ.s:521 .text:00000412 SetParamWord
C:\Temp/ccFnOSeQ.s:534 .text:0000041c ParamSet_ReadFromEEProm
C:\Temp/ccFnOSeQ.s:639 .text:000004c6 SetActiveParamSet
C:\Temp/ccFnOSeQ.s:676 .text:000004f2 ParamSet_WriteToEEProm
C:\Temp/ccFnOSeQ.s:774 .text:000005aa MixerTable_ReadFromEEProm
*COM*:0000004e Mixer
C:\Temp/ccFnOSeQ.s:848 .text:00000612 MixerTable_WriteToEEProm
C:\Temp/ccFnOSeQ.s:893 .text:0000064a MixerTable_Default
C:\Temp/ccFnOSeQ.s:955 .text:000006d8 GetActiveParamSet
C:\Temp/ccFnOSeQ.s:1005 .text:00000712 SetDefaultParameter
C:\Temp/ccFnOSeQ.s:1088 .progmem.data:00000000 __c.0
C:\Temp/ccFnOSeQ.s:1092 .progmem.data:00000026 __c.1
C:\Temp/ccFnOSeQ.s:1096 .progmem.data:0000003f __c.2
C:\Temp/ccFnOSeQ.s:1100 .progmem.data:00000060 __c.3
C:\Temp/ccFnOSeQ.s:1105 .text:00000798 ParamSet_Init
*COM*:00000001 RequiredMotors
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
PlatinenVersion
__eerd_word
__eewr_word
__eerd_block
LED_Init
LIBFC_HoTT_Clear
LIBFC_CheckSettings
__eewr_block
uart_putchar
_printf_P
PrintLine
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/fc.c
0,0 → 1,1939
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "mymath.h"
#include "isqrt.h"
 
unsigned char h,m,s;
unsigned int BaroExpandActive = 0;
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll;
int TrimNick, TrimRoll;
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
int Mittelwert_AccNick, Mittelwert_AccRoll;
unsigned int NeutralAccX=0, NeutralAccY=0;
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0;
int NeutralAccZ = 0;
unsigned char ControlHeading = 0;// in 2°
long IntegralNick = 0,IntegralNick2 = 0;
long IntegralRoll = 0,IntegralRoll2 = 0;
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
long Integral_Gier = 0;
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
long SummeNick=0,SummeRoll=0;
volatile long Mess_Integral_Hoch = 0;
int KompassValue = -1;
int KompassSollWert = 0;
//int KompassRichtung = 0;
char CalculateCompassTimer = 100;
unsigned char KompassFusion = 32;
unsigned int KompassSignalSchlecht = 50;
unsigned char MAX_GAS,MIN_GAS;
unsigned char HoehenReglerAktiv = 0;
unsigned char TrichterFlug = 0;
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
long ErsatzKompass;
int ErsatzKompassInGrad; // Kompasswert in Grad
int GierGyroFehler = 0;
char GyroFaktor,GyroFaktorGier;
char IntegralFaktor,IntegralFaktorGier;
int DiffNick,DiffRoll;
int StickGasHover = 120, HoverGasMin = 0, HoverGasMax = 1023;
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0;
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0;
unsigned char Poti[9] = {0,0,0,0,0,0,0,0};
volatile unsigned char SenderOkay = 0;
char MotorenEin = 0,StartTrigger = 0;
long HoehenWert = 0;
long SollHoehe = 0;
signed int AltitudeSetpointTrimming = 0;
long FromNC_AltitudeSetpoint = 0;
unsigned char FromNC_AltitudeSpeed = 0;
unsigned char carefree_old = 50; // to make the Beep when switching
signed char WaypointTrimming = 0;
int CompassGierSetpoint = 0;
unsigned char CalibrationDone = 0;
char NeueKompassRichtungMerken = 0;
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0;
//float Ki = FAKTOR_I;
int Ki = 10300 / 33;
unsigned char Looping_Nick = 0,Looping_Roll = 0;
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_HoehenSchalter = 251; // Wert : 0-250
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
unsigned char Parameter_Hoehe_GPS_Z = 64; // Wert : 0-250
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-250
unsigned char Parameter_Gier_P = 2; // Wert : 1-20
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
unsigned char Parameter_UserParam1 = 0;
unsigned char Parameter_UserParam2 = 0;
unsigned char Parameter_UserParam3 = 0;
unsigned char Parameter_UserParam4 = 0;
unsigned char Parameter_UserParam5 = 0;
unsigned char Parameter_UserParam6 = 0;
unsigned char Parameter_UserParam7 = 0;
unsigned char Parameter_UserParam8 = 0;
unsigned char Parameter_ServoNickControl = 100;
unsigned char Parameter_ServoRollControl = 100;
unsigned char Parameter_LoopGasLimit = 70;
unsigned char Parameter_AchsKopplung1 = 90;
unsigned char Parameter_AchsKopplung2 = 65;
unsigned char Parameter_CouplingYawCorrection = 64;
//unsigned char Parameter_AchsGegenKopplung1 = 0;
unsigned char Parameter_DynamicStability = 100;
unsigned char Parameter_J16Bitmask; // for the J16 Output
unsigned char Parameter_J16Timing; // for the J16 Output
unsigned char Parameter_J17Bitmask; // for the J17 Output
unsigned char Parameter_J17Timing; // for the J17 Output
unsigned char Parameter_NaviGpsModeControl; // Parameters for the Naviboard
unsigned char Parameter_NaviGpsGain;
unsigned char Parameter_NaviGpsP;
unsigned char Parameter_NaviGpsI;
unsigned char Parameter_NaviGpsD;
unsigned char Parameter_NaviGpsACC;
unsigned char Parameter_NaviOperatingRadius;
unsigned char Parameter_NaviWindCorrection;
unsigned char Parameter_NaviSpeedCompensation;
unsigned char Parameter_ExternalControl;
unsigned char Parameter_GlobalConfig;
unsigned char Parameter_ExtraConfig;
unsigned char Parameter_MaximumAltitude;
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5;
unsigned char CareFree = 0;
const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps
 
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
int MaxStickNick = 0,MaxStickRoll = 0;
unsigned int modell_fliegt = 0;
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0;
long GIER_GRAD_FAKTOR = 1291;
signed int KopplungsteilNickRoll,KopplungsteilRollNick;
signed int tmp_motorwert[MAX_MOTORS];
char VarioCharacter = ' ';
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void CopyDebugValues(void)
{
DebugOut.Analog[0] = IntegralNick / (EE_Parameter.GyroAccFaktor * 4);
DebugOut.Analog[1] = IntegralRoll / (EE_Parameter.GyroAccFaktor * 4);
DebugOut.Analog[2] = Mittelwert_AccNick / 4;
DebugOut.Analog[3] = Mittelwert_AccRoll / 4;
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier;
DebugOut.Analog[5] = HoehenWert/5;
DebugOut.Analog[6] = AdWertAccHoch;//(Mess_Integral_Hoch / 512);// Aktuell_az;
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[9] = UBat;
DebugOut.Analog[10] = SenderOkay;
DebugOut.Analog[11] = ErsatzKompassInGrad;
DebugOut.Analog[12] = Motor[0].SetPoint;
DebugOut.Analog[13] = Motor[1].SetPoint;
DebugOut.Analog[14] = Motor[2].SetPoint;
DebugOut.Analog[15] = Motor[3].SetPoint;
DebugOut.Analog[20] = ServoNickValue;
DebugOut.Analog[22] = Capacity.ActualCurrent;
DebugOut.Analog[23] = Capacity.UsedCapacity;
DebugOut.Analog[24] = SollHoehe/5;
// DebugOut.Analog[22] = FromNaviCtrl_Value.GpsZ;
// DebugOut.Analog[29] = FromNaviCtrl_Value.SerialDataOkay;
DebugOut.Analog[27] = KompassSollWert;
DebugOut.Analog[29] = Capacity.MinOfMaxPWM;
DebugOut.Analog[30] = GPS_Nick;
DebugOut.Analog[31] = GPS_Roll;
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe;
}
 
 
 
void Piep(unsigned char Anzahl, unsigned int dauer)
{
unsigned int wait = 0;
if(MotorenEin) return; //auf keinen Fall im Flug!
GRN_OFF;
while(Anzahl--)
{
beeptime = dauer;
wait = dauer;
while(beeptime || wait)
{
if(UpdateMotor)
{
UpdateMotor = 0;
if(!beeptime) wait--;
LIBFC_Polling();
};
}
}
GRN_ON;
}
 
//############################################################################
// Messwerte beim Ermitteln der Nullage
void CalibrierMittelwert(void)
//############################################################################
{
unsigned char i;
if(PlatinenVersion == 13) SucheGyroOffset();
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
ANALOG_OFF;
MesswertNick = AdWertNick;
MesswertRoll = AdWertRoll;
MesswertGier = AdWertGier;
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick;
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll;
// ADC einschalten
ANALOG_ON;
for(i=0;i<8;i++)
{
int tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127;
LIMIT_MIN_MAX(tmp, 0, 255);
if(Poti[i] > tmp) Poti[i]--; else if(Poti[i] < tmp) Poti[i]++;
}
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
}
 
//############################################################################
// Nullwerte ermitteln
void SetNeutral(unsigned char AccAdjustment)
//############################################################################
{
unsigned char i;
unsigned int gier_neutral=0, nick_neutral=0, roll_neutral=0;
VersionInfo.HardwareError[0] = 0;
// HEF4017Reset_ON;
NeutralAccX = 0;
NeutralAccY = 0;
NeutralAccZ = 0;
 
AdNeutralNick = 0;
AdNeutralRoll = 0;
AdNeutralGier = 0;
 
Parameter_AchsKopplung1 = 0;
Parameter_AchsKopplung2 = 0;
 
ExpandBaro = 0;
 
CalibrierMittelwert();
Delay_ms_Mess(100);
 
CalibrierMittelwert();
 
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
#define NEUTRAL_FILTER 32
for(i=0; i<NEUTRAL_FILTER; i++)
{
Delay_ms_Mess(10);
gier_neutral += AdWertGier;
nick_neutral += AdWertNick;
roll_neutral += AdWertRoll;
}
AdNeutralNick= (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8);
AdNeutralRoll= (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8);
AdNeutralGier= (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER);
 
StartNeutralRoll = AdNeutralRoll;
StartNeutralNick = AdNeutralNick;
 
if(AccAdjustment)
{
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
NeutralAccZ = Aktuell_az;
 
// Save ACC neutral settings to eeprom
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX);
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY);
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ);
}
else
{
// restore from eeprom
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK);
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL);
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP);
// strange settings?
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048) || ((unsigned int) NeutralAccZ > 1024))
{
printf("\n\rACC not calibrated!\r\n");
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY);
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY);
NeutralAccZ = Aktuell_az;
}
}
 
MesswertNick = 0;
MesswertRoll = 0;
MesswertGier = 0;
Delay_ms_Mess(100);
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick;
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll;
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
Mess_IntegralNick = IntegralNick;
Mess_IntegralRoll = IntegralRoll;
Mess_Integral_Gier = 0;
StartLuftdruck = Luftdruck;
VarioMeter = 0;
Mess_Integral_Hoch = 0;
KompassSollWert = KompassValue;
KompassSignalSchlecht = 100;
beeptime = 50;
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L;
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L;
ExternHoehenValue = 0;
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
GierGyroFehler = 0;
LED_Init();
FC_StatusFlags |= FC_STATUS_CALIBRATE;
FromNaviCtrl_Value.Kalman_K = -1;
FromNaviCtrl_Value.Kalman_MaxDrift = 0;
FromNaviCtrl_Value.Kalman_MaxFusion = 32;
for(i=0;i<8;i++)
{
Poti[i] = PPM_in[EE_Parameter.Kanalbelegung[K_POTI1 + i]] + 127;
}
SenderOkay = 100;
if(ServoActive)
{
DDRD |=0x80; // enable J7 -> Servo signal
}
else
{
// if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) NickServoValue = ((128 + 60) * 4 * 16); // neutral position = upper 1/4
// else
NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4
}
 
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; };
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; };
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; };
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; };
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; };
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; };
carefree_old = 70;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
}
 
 
//############################################################################
// Bearbeitet die Messwerte
void Mittelwert(void)
//############################################################################
{
static signed long tmpl,tmpl2,tmpl3,tmpl4;
static signed int oldNick, oldRoll, d2Roll, d2Nick;
signed long winkel_nick, winkel_roll;
MesswertGier = (signed int) AdNeutralGier - AdWertGier;
MesswertNick = (signed int) AdWertNickFilter / 8;
MesswertRoll = (signed int) AdWertRollFilter / 8;
RohMesswertNick = MesswertNick;
RohMesswertRoll = MesswertRoll;
 
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L;
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L;
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick;
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll;
NaviAccNick += AdWertAccNick;
NaviAccRoll += AdWertAccRoll;
NaviCntAcc++;
IntegralAccZ += Aktuell_az - NeutralAccZ;
 
//++++++++++++++++++++++++++++++++++++++++++++++++
// ADC einschalten
ANALOG_ON;
AdReady = 0;
//++++++++++++++++++++++++++++++++++++++++++++++++
 
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L;
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L;
else winkel_roll = Mess_IntegralRoll;
 
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L;
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L;
else winkel_nick = Mess_IntegralNick;
 
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_Integral_Gier += MesswertGier;
ErsatzKompass += MesswertGier;
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV))
{
tmpl3 = (MesswertRoll * winkel_nick) / 2048L;
tmpl3 *= Parameter_AchsKopplung2; //65
tmpl3 /= 4096L;
tmpl4 = (MesswertNick * winkel_roll) / 2048L;
tmpl4 *= Parameter_AchsKopplung2; //65
tmpl4 /= 4096L;
KopplungsteilNickRoll = tmpl3;
KopplungsteilRollNick = tmpl4;
tmpl4 -= tmpl3;
ErsatzKompass += tmpl4;
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen
 
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L;
tmpl *= Parameter_AchsKopplung1; // 90
tmpl /= 4096L;
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L;
tmpl2 *= Parameter_AchsKopplung1;
tmpl2 /= 4096L;
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1;
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256;
}
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0;
TrimRoll = tmpl - tmpl2 / 100L;
TrimNick = -tmpl2 + tmpl / 100L;
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_IntegralRoll2 += MesswertRoll + TrimRoll;
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll;
if(Mess_IntegralRoll > Umschlag180Roll)
{
Mess_IntegralRoll = -(Umschlag180Roll - 25000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
if(Mess_IntegralRoll <-Umschlag180Roll)
{
Mess_IntegralRoll = (Umschlag180Roll - 25000L);
Mess_IntegralRoll2 = Mess_IntegralRoll;
}
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
Mess_IntegralNick2 += MesswertNick + TrimNick;
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick;
if(Mess_IntegralNick > Umschlag180Nick)
{
Mess_IntegralNick = -(Umschlag180Nick - 25000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
if(Mess_IntegralNick <-Umschlag180Nick)
{
Mess_IntegralNick = (Umschlag180Nick - 25000L);
Mess_IntegralNick2 = Mess_IntegralNick;
}
 
Integral_Gier = Mess_Integral_Gier;
IntegralNick = Mess_IntegralNick;
IntegralRoll = Mess_IntegralRoll;
IntegralNick2 = Mess_IntegralNick2;
IntegralRoll2 = Mess_IntegralRoll2;
 
#define D_LIMIT 128
 
MesswertNick = HiResNick / 8;
MesswertRoll = HiResRoll / 8;
 
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000;
if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; }
else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; }
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000;
if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; }
else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; }
 
if(Parameter_Gyro_D)
{
d2Nick = HiResNick - oldNick;
oldNick = (oldNick + HiResNick)/2;
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT;
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT;
 
d2Roll = HiResRoll - oldRoll;
oldRoll = (oldRoll + HiResRoll)/2;
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT;
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT;
 
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16;
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16;
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D);
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D);
}
 
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L;
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L;
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L;
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L;
 
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll)
{
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256);
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256);
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256);
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256);
}
}
 
//############################################################################
// Senden der Motorwerte per I2C-Bus
void SendMotorData(void)
//############################################################################
{
unsigned char i;
if(!MotorenEin)
{
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY);
for(i=0;i<MAX_MOTORS;i++)
{
if(!PC_MotortestActive) MotorTest[i] = 0;
Motor[i].SetPoint = MotorTest[i];
Motor[i].SetPointLowerBits = 0;
/*
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution
Motor[i].SetPointLowerBits = MotorTest[i] % 4;
*/
}
if(PC_MotortestActive) PC_MotortestActive--;
}
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN;
 
if(I2C_TransferActive)
{
I2C_TransferActive = 0; // enable for the next time
}
else
{
motor_write = 0;
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode
}
}
 
 
 
//############################################################################
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
unsigned char tmp,i;
for(i=0;i<8;i++)
{
int tmp2;
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i];
tmp2 = PPM_in[tmp] + 127;
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0;
 
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter
else
if(tmp2 != Poti[i])
{
Poti[i] += (tmp2 - Poti[i]) / 4;
if(Poti[i] > tmp2) Poti[i]--;
else Poti[i]++;
}
}
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255);
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255);
 
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;} // Out1 (J16)
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = 140; else Parameter_Servo3 = 70;}
else CHK_POTI(Parameter_Servo3,EE_Parameter.Servo3);
 
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;}
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = 140; else Parameter_Servo4 = 70;} // Out2 (J17)
else CHK_POTI(Parameter_Servo4,EE_Parameter.Servo4);
 
CHK_POTI(Parameter_Servo5,EE_Parameter.Servo5);
CHK_POTI(Parameter_HoehenSchalter,EE_Parameter.MaxHoehe);
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung);
CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z);
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung);
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I);
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D);
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P);
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I);
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor);
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1);
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2);
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3);
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4);
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5);
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6);
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7);
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl);
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl);
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit);
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1);
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2);
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection);
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude);
if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude;
Parameter_GlobalConfig = EE_Parameter.GlobalConfig;
Parameter_ExtraConfig = EE_Parameter.ExtraConfig;
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability);
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl);
Ki = 10300 / (Parameter_I_Faktor + 1);
MAX_GAS = EE_Parameter.Gas_Max;
MIN_GAS = EE_Parameter.Gas_Min;
 
tmp = EE_Parameter.CareFreeModeControl;
if(tmp > 50)
{
CareFree = 1;
if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0;
if(carefree_old != CareFree)
{
if(carefree_old < 3)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; }
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; }
#else
if(CareFree) beeptime = 1500;
else beeptime = 200;
#endif
NeueKompassRichtungMerken = 5;
carefree_old = CareFree;
} else carefree_old--;
}
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE;
}
else
{
CareFree = 0;
carefree_old = 10;
}
 
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert
{
beeptime = 15000;
BeepMuster = 0xA400;
CareFree = 0;
}
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE;
}
 
//############################################################################
//
void MotorRegler(void)
//############################################################################
{
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2;
int GierMischanteil,GasMischanteil;
static long sollGier = 0,tmp_long,tmp_long2;
static long IntegralFehlerNick = 0;
static long IntegralFehlerRoll = 0;
static unsigned int RcLostTimer;
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static signed char move_safety_switch = 0;
static long ausgleichNick, ausgleichRoll;
int IntegralNickMalFaktor,IntegralRollMalFaktor;
unsigned char i;
Mittelwert();
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE)))
{
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE)
{
if(HoverGas && HoverGas < 150 * STICK_GAIN)
{
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas
}
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet
} else HooverGasEmergencyPercent = EE_Parameter.NotGas;
}
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed
{
StickGas = 0; // Hold Gas down in that case
HooverGasEmergencyPercent = MIN_GAS;
}
GasMischanteil = StickGas;
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Empfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE))
{
if(RcLostTimer) RcLostTimer--;
else
{
MotorenEin = 0;
modell_fliegt = 0;
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY);
}
ROT_ON;
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken
{
GasMischanteil = HooverGasEmergencyPercent;
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING;
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
}
else
{
MotorenEin = 0;
}
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
{
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING;
RcLostTimer = EE_Parameter.NotGasZeit * 50;
if(GasMischanteil > 40 && MotorenEin)
{
if(modell_fliegt < 0xffff) modell_fliegt++;
}
if((modell_fliegt < 256))
{
SummeNick = 0;
SummeRoll = 0;
sollGier = 0;
Mess_Integral_Gier = 0;
} else FC_StatusFlags |= FC_STATUS_FLY;
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
unsigned char setting=1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
SetActiveParamSet(setting); // aktiven Datensatz merken
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70)
{
WinkelOut.CalcState = 1;
CalibrationDone = 0;
beeptime = 1000;
}
else
{
ParamSet_ReadFromEEProm(GetActiveParamSet());
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
// ServoActive = 0;
SetNeutral(0);
CalibrationDone = 1;
ServoActive = 1;
DDRD |=0x80; // enable J7 -> Servo signal
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_CALIBRATE;
#endif
Piep(GetActiveParamSet(),120);
}
}
}
else
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern
{
if(++delay_neutral > 200) // nicht sofort
{
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
SetNeutral(1);
CalibrationDone = 1;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_CALIBRATE;
#endif
Piep(GetActiveParamSet(),120);
}
}
else delay_neutral = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gas ist unten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 35-120)
{
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100;
else
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100;
// Motoren Starten
if(!MotorenEin)
{
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100)))
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START;
if(++delay_einschalten > 253)
{
delay_einschalten = 0;
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode)
{
modell_fliegt = 1;
MotorenEin = 1;
sollGier = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
SummeNick = 0;
SummeRoll = 0;
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2;
NeueKompassRichtungMerken = 100; // 2 sekunden
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_STARTING;
#endif
}
else
{
beeptime = 1500; // indicate missing calibration
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION;
#endif
}
}
}
else delay_einschalten = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
else // only if motors are running
{
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0))
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100)))
{
if(++delay_ausschalten > 250) // nicht sofort
{
MotorenEin = 0;
delay_ausschalten = 0;
modell_fliegt = 0;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_MK_OFF;
#endif
}
}
else delay_ausschalten = 0;
}
if(GasIsZeroCnt < 1000) GasIsZeroCnt++;
}
else // gas not at minimum
{
move_safety_switch = 0;
GasIsZeroCnt = 0;
}
}
else // Empfang zwischen 100 und 140 -> schlecht
{
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost
{
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed?
{
GasIsZeroCnt = 30000;
if(modell_fliegt > 1001) modell_fliegt = 1001;
}
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
static int stick_nick,stick_roll;
unsigned char stick_p;
ParameterZuordnung();
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4;
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4;
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// CareFree und freie Wahl der vorderen Richtung
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CareFree)
{
signed int nick, roll;
nick = stick_nick / 4;
roll = stick_roll / 4;
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4);
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4);
}
else
{
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6];
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle];
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8;
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8;
}
 
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
if(StickGier > 4) StickGier -= 4; else
if(StickGier < -4) StickGier += 4; else StickGier = 0;
 
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger
{
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16;
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16;
}
 
StickNick -= GPS_Nick;
StickRoll -= GPS_Roll;
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127;
 
GyroFaktor = (Parameter_Gyro_P + 10.0);
IntegralFaktor = Parameter_Gyro_I;
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0);
IntegralFaktorGier = Parameter_Gyro_Gier_I;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ Analoge Steuerung per Seriell
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128)
{
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P;
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P;
StickGier += ExternControl.Gier;
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung;
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas;
}
if(StickGas < 0) StickGas = 0;
 
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
 
if(abs(StickNick/STICK_GAIN) > MaxStickNick)
{
MaxStickNick = abs(StickNick)/STICK_GAIN;
if(MaxStickNick > 100) MaxStickNick = 100;
}
else MaxStickNick--;
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll)
{
MaxStickRoll = abs(StickRoll)/STICK_GAIN;
if(MaxStickRoll > 100) MaxStickRoll = 100;
}
else MaxStickRoll--;
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Looping?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1;
else
{
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1;
else
{
if(Looping_Rechts) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0;
}
}
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1;
else
{
if(Looping_Oben) // Hysterese
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1;
else
{
if(Looping_Unten) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0;
}
}
 
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0;
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0;
} // Ende neue Funken-Werte
 
if(Looping_Roll || Looping_Nick)
{
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit;
TrichterFlug = 1;
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)
{
StickNick = -GPS_Nick;
StickRoll = -GPS_Roll;
StickGas = StickGasHover;
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER);
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV;
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP);
Parameter_HoehenSchalter = 200; // switch on
}
else
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)
{
StickGier = 0;
StickNick = 0;
StickRoll = 0;
GyroFaktor = 90;
IntegralFaktor = 120;
GyroFaktorGier = 90;
IntegralFaktorGier = 120;
Looping_Roll = 0;
Looping_Nick = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ABGLEICH_ANZAHL 256L
 
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
MittelIntegralNick2 += IntegralNick2;
MittelIntegralRoll2 += IntegralRoll2;
 
if(Looping_Nick || Looping_Roll)
{
IntegralAccNick = 0;
IntegralAccRoll = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
Mess_IntegralNick2 = Mess_IntegralNick;
Mess_IntegralRoll2 = Mess_IntegralRoll;
ZaehlMessungen = 0;
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin))
{
long tmp_long, tmp_long2;
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/)
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN));
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR));
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
if((MaxStickNick > 64) || (MaxStickRoll > 64))
{
tmp_long /= 2;
tmp_long2 /= 2;
}
/* if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
{
tmp_long /= 3;
tmp_long2 /= 3;
}
*/ if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
}
else
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long /= 16;
tmp_long2 /= 16;
if((MaxStickNick > 64) || (MaxStickRoll > 64))
{
tmp_long /= 3;
tmp_long2 /= 3;
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
{
tmp_long /= 3;
tmp_long2 /= 3;
}
KompassFusion = 25;
#define AUSGLEICH 32
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
}
 
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
{
static int cnt = 0;
static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp)
{
MittelIntegralNick /= ABGLEICH_ANZAHL;
MittelIntegralRoll /= ABGLEICH_ANZAHL;
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL;
#define MAX_I 0
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
 
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL;
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL;
 
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1))
{
LageKorrekturNick /= 2;
LageKorrekturRoll /= 2;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick2 /= ABGLEICH_ANZAHL;
MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
tmp_long = IntegralNick2 - IntegralNick;
tmp_long2 = IntegralRoll2 - IntegralRoll;
 
IntegralFehlerNick = tmp_long;
IntegralFehlerRoll = tmp_long2;
Mess_IntegralNick2 -= IntegralFehlerNick;
Mess_IntegralRoll2 -= IntegralFehlerRoll;
 
if(EE_Parameter.Driftkomp)
{
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; }
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; }
}
GierGyroFehler = 0;
 
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2)
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16
#define BEWEGUNGS_LIMIT 20000
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4;
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8))
{
if(IntegralFehlerNick > FEHLER_LIMIT2)
{
if(last_n_p)
{
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8);
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick > 5000) ausgleichNick = 5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_p = 1;
} else last_n_p = 0;
if(IntegralFehlerNick < -FEHLER_LIMIT2)
{
if(last_n_n)
{
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8);
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick < -5000) ausgleichNick = -5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_n = 1;
} else last_n_n = 0;
}
else
{
cnt = 0;
KompassSignalSchlecht = 100;
}
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift;
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt;
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt;
 
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerRoll) / 4096;
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4;
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8))
{
if(IntegralFehlerRoll > FEHLER_LIMIT2)
{
if(last_r_p)
{
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8);
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll > 5000) ausgleichRoll = 5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_p = 1;
} else last_r_p = 0;
if(IntegralFehlerRoll < -FEHLER_LIMIT2)
{
if(last_r_n)
{
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8);
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll < -5000) ausgleichRoll = -5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_n = 1;
} else last_r_n = 0;
} else
{
cnt = 0;
KompassSignalSchlecht = 100;
}
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift;
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt;
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt;
}
else
{
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
TrichterFlug = 0;
}
 
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
MittelIntegralRoll_Alt = MittelIntegralRoll;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
IntegralAccNick = 0;
IntegralAccRoll = 0;
IntegralAccZ = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
ZaehlMessungen = 0;
} // ZaehlMessungen >= ABGLEICH_ANZAHL
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 3) // war 15
{
// KompassSignalSchlecht = 1000;
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX))
{
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen
};
}
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4;
tmp_int += CompassGierSetpoint;
sollGier = tmp_int;
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV))
{
if(CalculateCompassTimer-- == 1)
{
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt
CalculateCompassTimer = 13; // falls keine Navi-Daten
// max. Korrekturwert schätzen
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /512);
if(v > w) w = v; // grösste Neigung ermitteln
// korrektur = w / 4 + 1;
korrektur = w / 8 + 2;
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR;
// Kompassfehlerwert bestimmen
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180;
// GIER_GRAD_FAKTOR ist ca. 1200
// Kompasswert einloggen
if(KompassSignalSchlecht) KompassSignalSchlecht--;
else
if(w < 25)
{
GierGyroFehler += fehler;
if(NeueKompassRichtungMerken)
{
if(--NeueKompassRichtungMerken == 0)
{
KompassSollWert = ErsatzKompassInGrad;
}
}
}
// Kompass fusionieren
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur;
// MK Gieren
if(!NeueKompassRichtungMerken)
{
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180;
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten
CompassGierSetpoint = v / 16;
}
else CompassGierSetpoint = 0;
} // CalculateCompassTimer
}
else CompassGierSetpoint = 0;
 
//DebugOut.Analog[16] = KompassFusion;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;};
 
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0;
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0;
 
#define TRIM_MAX 200
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX;
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX;
 
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN));
 
// Maximalwerte abfangen
#define MAX_SENSOR (4096)
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Höhenregelung
// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen
GasMischanteil *= STICK_GAIN;
// if height control is activated
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick)) // Höhenregelung
{
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
#define OPA_OFFSET_STEP 15
#else
#define OPA_OFFSET_STEP 10
#endif
int HCGas, HeightDeviation = 0,GasReduction = 0;
static int HeightTrimming = 0; // rate for change of height setpoint
static int FilterHCGas = 0;
static unsigned long HoverGasFilter = 0;
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0;
int CosAttitude; // for projection of hoover gas
 
// get the current hooverpoint
DebugOut.Analog[21] = HoverGas;
 
// Expand the measurement
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs
if(!BaroExpandActive)
{
if(MessLuftdruck > 920)
{ // increase offset
if(OCR0A < (255 - OPA_OFFSET_STEP))
{
ExpandBaro -= 1;
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down
beeptime = 300;
BaroExpandActive = 350;
}
else
{
BaroAtLowerLimit = 1;
}
}
// measurement of air pressure close to lower limit and
else
if(MessLuftdruck < 100)
{ // decrease offset
if(OCR0A > OPA_OFFSET_STEP)
{
ExpandBaro += 1;
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up
beeptime = 300;
BaroExpandActive = 350;
}
else
{
BaroAtUpperLimit = 1;
}
}
else
{
BaroAtUpperLimit = 0;
BaroAtLowerLimit = 0;
}
}
else // delay, because of expanding the Baro-Range
{
// now clear the D-values
SummenHoehe = HoehenWert * SM_FILTER;
VarioMeter = 0;
BaroExpandActive--;
}
 
// if height control is activated by an rc channel
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
{ // check if parameter is less than activation threshold
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position
{ //height control not active
if(!delay--)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF;
#endif
HoehenReglerAktiv = 0; // disable height control
SollHoehe = HoehenWert; // update SetPoint with current reading
delay = 1;
}
}
else
if(Parameter_HoehenSchalter > 70)
{ //height control is activated
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON;
#endif
delay = 200;
HoehenReglerAktiv = 1; // enable height control
}
}
else // no switchable height control
{
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung;
HoehenReglerAktiv = 1;
}
// calculate cos of nick and roll angle used for projection of the vertical hoover gas
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude
VarioCharacter = ' ';
AltitudeSetpointTrimming = 0;
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
#define HEIGHT_CONTROL_STICKTHRESHOLD 15
// Holger original version
// start of height control algorithm
// the height control is only an attenuation of the actual gas stick.
// I.e. it will work only if the gas stick is higher than the hover gas
// and the hover height will be allways larger than height setpoint.
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL;
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert)
{ // old version
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control
HeightTrimming = 0;
AltitudeSetpointTrimming = 0;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
}
else
{
// alternative height control
// PD-Control with respect to hoover point
// the thrust loss out of horizontal attitude is compensated
// the setpoint will be fine adjusted with the gas stick position
if(FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying
{ // gas stick is above hoover point
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit)
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN)
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
// Limit the maximum Altitude
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) AltitudeSetpointTrimming = 0;
else
{
// SollHoehe = (long) Parameter_MaximumAltitude * 100L;
// HeightTrimming += abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD));
VarioCharacter = '+';
}
WaypointTrimming = 0;
} // gas stick is below hoover point
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit )
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP)
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
// HeightTrimming -= abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
VarioCharacter = '-';
WaypointTrimming = 0;
}
else // Gas Stick in Hover Range
{
VarioCharacter = '=';
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
AltitudeSetpointTrimming = FromNC_AltitudeSpeed;
//HeightTrimming += FromNC_AltitudeSpeed;
WaypointTrimming = 10;
VarioCharacter = '^';
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
}
else
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed;
//HeightTrimming -= FromNC_AltitudeSpeed;
WaypointTrimming = -10;
VarioCharacter = 'v';
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
}
else
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN))
{
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWert-128), (HoehenWert+128)) // max. 1m Unterschied
else WaypointTrimming = 0;
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
HeightTrimming = 0;
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500;
if(!StartTrigger && HoehenWert > 50)
{
StartTrigger = 1;
}
}
}
// Trim height set point
HeightTrimming += AltitudeSetpointTrimming;
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz
{
if(WaypointTrimming)
{
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint;
else SollHoehe += WaypointTrimming;
}
else
{
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3;
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3;
}
HeightTrimming = 0;
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100;
//update hoover gas stick value when setpoint is shifted
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0)
{
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning;
if(StickGasHover < 70) StickGasHover = 70;
else if(StickGasHover > 150) StickGasHover = 150;
}
}
if(BaroExpandActive) SollHoehe = HoehenWert; // update setpoint to current altitude if Expanding is active
} //if FCFlags & MKFCFLAG_FLY
else
{
SollHoehe = HoehenWert - 400;
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
else StickGasHover = 120;
HoverGas = GasMischanteil;
VarioCharacter = '.';
}
HCGas = HoverGas; // take hover gas (neutral point)
}
if(HoehenWert > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT))
{
// from this point the Heigth Control Algorithm is identical for both versions
if(BaroExpandActive) // baro range expanding active
{
HCGas = HoverGas; // hover while expanding baro adc range
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWert - SollHoehe); // positive when too high
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
HeightDeviation = (int)(tmp_long); // positive when too high
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense
GasReduction = tmp_long;
// ------------------------- D-Part 1: Vario Meter ----------------------------
tmp_int = VarioMeter / 8;
LIMIT_MIN_MAX(tmp_int, -127, 128);
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN);
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint
else
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode
GasReduction += tmp_int;
} // EOF no baro range expanding
// ------------------------ D-Part 2: ACC-Z Integral ------------------------
if(Parameter_Hoehe_ACC_Wirkung)
{
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN);
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_long;
}
// ------------------------ D-Part 3: GpsZ ----------------------------------
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L;
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_int;
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value
// ------------------------ ----------------------------------
HCGas -= GasReduction;
// limit deviation from hoover point within the target region
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero
{
unsigned int tmp;
tmp = abs(HeightDeviation);
if(tmp <= 60)
{
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (tmp - 60) / 32;
if(tmp > 15) tmp = 15;
if(HeightDeviation > 0)
{
tmp = (HoverGasMin * (16 - tmp)) / 16;
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (HoverGasMax * (tmp + 16)) / 16;
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point
}
}
}
// strech control output by inverse attitude projection 1/cos
// + 1/cos(angle) ++++++++++++++++++++++++++
tmp_long2 = (int32_t)HCGas;
tmp_long2 *= 8192L;
tmp_long2 /= CosAttitude;
HCGas = (int16_t)tmp_long2;
// update height control gas averaging
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE;
// limit height control gas pd-control output
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN);
// set GasMischanteil to HeightControlGasFilter
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)
{ // old version
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas
GasMischanteil = FilterHCGas;
}
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode
}
}// EOF height control active
else // HC not active
{
//update hoover gas stick value when HC is not active
if(!EE_Parameter.Hoehe_StickNeutralPoint)
{
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning;
}
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
LIMIT_MIN_MAX(StickGasHover, 70, 150); // reserve some range for trim up and down
FilterHCGas = GasMischanteil;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL;
}
// Hover gas estimation by averaging gas control output on small z-velocities
// this is done only if height contol option is selected in global config and aircraft is flying
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation
if(StartTrigger == 1) StartTrigger = 2;
tmp_long2 = (int32_t)GasMischanteil; // take current thrust
tmp_long2 *= CosAttitude; // apply attitude projection
tmp_long2 /= 8192;
// average vertical projected thrust
if(modell_fliegt < 4000) // the first 8 seconds
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L);
HoverGasFilter += 16L * tmp_long2;
}
if(modell_fliegt < 8000) // the first 16 seconds
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L);
HoverGasFilter += 4L * tmp_long2;
}
else //later
if(abs(VarioMeter) < 100 && abs(HoehenWert - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending)
{
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE;
HoverGasFilter += tmp_long2;
}
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE);
if(EE_Parameter.Hoehe_HoverBand)
{
int16_t band;
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range
HoverGasMin = HoverGas - band;
HoverGasMax = HoverGas + band;
}
else
{ // no limit
HoverGasMin = 0;
HoverGasMax = 1023;
}
}
else
{
StartTrigger = 0;
HoverGasFilter = 0;
HoverGas = 0;
}
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL
else
{
// set undefined state to indicate vario off
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
} // EOF no height control
 
// Linits the maximum gas in case of "Out of Range emergency landing"
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING)
{
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN;
SollHoehe = HoehenWert; // update setpoint to current heigth
beeptime = 15000;
BeepMuster = 0x0E00;
}
// limit gas to parameter setting
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN);
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// all BL-Ctrl connected?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(MissingMotor || Capacity.MinOfMaxPWM != 255 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase
{
modell_fliegt = 1;
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Mischer und PI-Regler
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Analog[7] = GasMischanteil;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gier-Anteil
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren
if(GasMischanteil > MIN_GIERGAS)
{
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2);
}
else
{
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2;
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2);
}
tmp_int = MAX_GAS*STICK_GAIN;
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil));
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil));
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - StickNick; // Differenz bestimmen
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung
else SummeNick += DiffNick; // I-Anteil bei HH
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L);
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN);
 
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern
pd_ergebnis_nick += SummeNick / Ki;
 
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int;
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Roll-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung
else SummeRoll += DiffRoll; // I-Anteil bei HH
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L);
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN);
 
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern
pd_ergebnis_roll += SummeRoll / Ki;
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int;
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Universal Mixer
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for(i=0; i<MAX_MOTORS; i++)
{
signed int tmp_int;
if(Mixer.Motor[i][0] > 0)
{
// Gas
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L;
// Nick
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick;
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick;
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L;
// Roll
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll;
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll;
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L;
// Gier
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil;
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil;
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L;
 
if(tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // MotorSmoothing
// else tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
else
{
if(EE_Parameter.MotorSmooth == 0)
{
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
}
else // 1 means tmp_int = tmp_int;
if(EE_Parameter.MotorSmooth > 1)
{
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value.
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int)/EE_Parameter.MotorSmooth);
}
}
 
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4);
Motor[i].SetPoint = tmp_int / 4;
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total)
tmp_motorwert[i] = tmp_int;
}
else
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
}
//DebugOut.Analog[16]
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/fc.h
0,0 → 1,139
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel
//#define GIER_GRAD_FAKTOR 1160L
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel
#define STICK_GAIN 4
#define ACC_AMPLIFY 6
 
// FC_StatusFlags
#define FC_STATUS_MOTOR_RUN 0x01
#define FC_STATUS_FLY 0x02
#define FC_STATUS_CALIBRATE 0x04
#define FC_STATUS_START 0x08
#define FC_STATUS_EMERGENCY_LANDING 0x10
#define FC_STATUS_LOWBAT 0x20
#define FC_STATUS_VARIO_TRIM_UP 0x40
#define FC_STATUS_VARIO_TRIM_DOWN 0x80
 
// FC_StatusFlags2
#define FC_STATUS2_CAREFREE 0x01
#define FC_STATUS2_ALTITUDE_CONTROL 0x02
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04
#define FC_STATUS2_OUT1_ACTIVE 0x08
#define FC_STATUS2_OUT2_ACTIVE 0x10
 
//NC_To_FC_Flags
#define NC_TO_FC_FLYING_RANGE 0x01
#define NC_TO_FC_EMERGENCY_LANDING 0x02
 
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2;
extern void ParameterZuordnung(void);
 
#define Poti1 Poti[0]
#define Poti2 Poti[1]
#define Poti3 Poti[2]
#define Poti4 Poti[3]
#define Poti5 Poti[4]
#define Poti6 Poti[5]
#define Poti7 Poti[6]
#define Poti8 Poti[7]
 
#define LIMIT_MIN(value, min) {if(value <= min) value = min;}
#define LIMIT_MAX(value, max) {if(value >= max) value = max;}
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;}
 
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];}
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;}
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);}
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);}
 
extern unsigned char Sekunde,Minute;
extern unsigned int BaroExpandActive;
extern long IntegralNick,IntegralNick2;
extern long IntegralRoll,IntegralRoll2;
//extern int IntegralNick,IntegralNick2;
//extern int IntegralRoll,IntegralRoll2;
extern unsigned char Poti[9];
 
extern long Mess_IntegralNick,Mess_IntegralNick2;
extern long Mess_IntegralRoll,Mess_IntegralRoll2;
extern long IntegralAccNick,IntegralAccRoll;
extern long SummeNick,SummeRoll;
extern volatile long Mess_Integral_Hoch;
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern int KompassValue;
extern int KompassSollWert;
extern int KompassRichtung;
extern char CalculateCompassTimer;
extern unsigned char KompassFusion;
extern unsigned char ControlHeading;
extern int TrimNick, TrimRoll;
extern long ErsatzKompass;
extern int ErsatzKompassInGrad; // Kompasswert in Grad
extern long HoehenWert;
extern long SollHoehe;
extern long FromNC_AltitudeSetpoint;
extern unsigned char FromNC_AltitudeSpeed;
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250
extern unsigned char CareFree;
extern int MesswertNick,MesswertRoll,MesswertGier;
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern unsigned int NeutralAccX, NeutralAccY;
extern unsigned char HoehenReglerAktiv;
extern int NeutralAccZ;
extern long Umschlag180Nick, Umschlag180Roll;
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier;
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8;
extern int NaviAccNick,NaviAccRoll,NaviCntAcc;
extern unsigned int modell_fliegt;
extern void MotorRegler(void);
extern void SendMotorData(void);
//void CalibrierMittelwert(void);
//void Mittelwert(void);
extern void SetNeutral(unsigned char AccAdjustment);
extern void Piep(unsigned char Anzahl, unsigned int dauer);
extern void CopyDebugValues(void);
 
extern unsigned char h,m,s;
extern int StickNick,StickRoll,StickGier,StickGas;
extern volatile unsigned char Timeout ;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern int DiffNick,DiffRoll;
//extern int Poti1, Poti2, Poti3, Poti4;
extern volatile unsigned char SenderOkay;
extern int StickNick,StickRoll,StickGier;
extern char MotorenEin;
extern unsigned char CalibrationDone;
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5;
extern char VarioCharacter;
extern signed int AltitudeSetpointTrimming;
extern signed char WaypointTrimming;
extern int HoverGas;
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
extern unsigned char Parameter_ServoRollControl;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsKopplung2;
//extern unsigned char Parameter_AchsGegenKopplung1;
extern unsigned char Parameter_J16Bitmask; // for the J16 Output
extern unsigned char Parameter_J16Timing; // for the J16 Output
extern unsigned char Parameter_J17Bitmask; // for the J17 Output
extern unsigned char Parameter_J17Timing; // for the J17 Output
extern unsigned char Parameter_GlobalConfig;
extern unsigned char Parameter_ExtraConfig;
extern signed char MixerTable[MAX_MOTORS][4];
extern const signed char sintab[31];
#endif //_FC_H
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/fc.lst
0,0 → 1,10980
1 .file "fc.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global GasIsZeroCnt
11 .global GasIsZeroCnt
12 .section .bss
15 GasIsZeroCnt:
16 0000 0000 .skip 2,0
17 .global HooverGasEmergencyPercent
18 .global HooverGasEmergencyPercent
21 HooverGasEmergencyPercent:
22 0002 0000 .skip 2,0
23 .global VarioCharacter
24 .data
27 VarioCharacter:
28 0000 20 .byte 32
29 .global GIER_GRAD_FAKTOR
32 GIER_GRAD_FAKTOR:
33 0001 0B05 0000 .long 1291
34 .global FC_StatusFlags2
35 .global FC_StatusFlags2
36 .section .bss
39 FC_StatusFlags2:
40 0004 00 .skip 1,0
41 .global FC_StatusFlags
42 .global FC_StatusFlags
45 FC_StatusFlags:
46 0005 00 .skip 1,0
47 .global modell_fliegt
48 .global modell_fliegt
51 modell_fliegt:
52 0006 0000 .skip 2,0
53 .global MaxStickRoll
54 .global MaxStickRoll
57 MaxStickRoll:
58 0008 0000 .skip 2,0
59 .global MaxStickNick
60 .global MaxStickNick
63 MaxStickNick:
64 000a 0000 .skip 2,0
65 .global ExternHoehenValue
66 .data
69 ExternHoehenValue:
70 0005 ECFF .word -20
71 .global ExternStickGier
72 .global ExternStickGier
73 .section .bss
76 ExternStickGier:
77 000c 0000 .skip 2,0
78 .global ExternStickRoll
79 .global ExternStickRoll
82 ExternStickRoll:
83 000e 0000 .skip 2,0
84 .global ExternStickNick
85 .global ExternStickNick
88 ExternStickNick:
89 0010 0000 .skip 2,0
90 .global sintab
91 .data
94 sintab:
95 0007 00 .byte 0
96 0008 02 .byte 2
97 0009 04 .byte 4
98 000a 06 .byte 6
99 000b 07 .byte 7
100 000c 08 .byte 8
101 000d 08 .byte 8
102 000e 08 .byte 8
103 000f 07 .byte 7
104 0010 06 .byte 6
105 0011 04 .byte 4
106 0012 02 .byte 2
107 0013 00 .byte 0
108 0014 FE .byte -2
109 0015 FC .byte -4
110 0016 FA .byte -6
111 0017 F9 .byte -7
112 0018 F8 .byte -8
113 0019 F8 .byte -8
114 001a F8 .byte -8
115 001b F9 .byte -7
116 001c FA .byte -6
117 001d FC .byte -4
118 001e FE .byte -2
119 001f 00 .byte 0
120 0020 02 .byte 2
121 0021 04 .byte 4
122 0022 06 .byte 6
123 0023 07 .byte 7
124 0024 08 .byte 8
125 0025 08 .byte 8
126 .global CareFree
127 .global CareFree
128 .section .bss
131 CareFree:
132 0012 00 .skip 1,0
133 .global Parameter_DynamicStability
134 .data
137 Parameter_DynamicStability:
138 0026 64 .byte 100
139 .global Parameter_CouplingYawCorrection
142 Parameter_CouplingYawCorrection:
143 0027 40 .byte 64
144 .global Parameter_AchsKopplung2
147 Parameter_AchsKopplung2:
148 0028 41 .byte 65
149 .global Parameter_AchsKopplung1
152 Parameter_AchsKopplung1:
153 0029 5A .byte 90
154 .global Parameter_LoopGasLimit
157 Parameter_LoopGasLimit:
158 002a 46 .byte 70
159 .global Parameter_ServoRollControl
162 Parameter_ServoRollControl:
163 002b 64 .byte 100
164 .global Parameter_ServoNickControl
167 Parameter_ServoNickControl:
168 002c 64 .byte 100
169 .global Parameter_UserParam8
170 .global Parameter_UserParam8
171 .section .bss
174 Parameter_UserParam8:
175 0013 00 .skip 1,0
176 .global Parameter_UserParam7
177 .global Parameter_UserParam7
180 Parameter_UserParam7:
181 0014 00 .skip 1,0
182 .global Parameter_UserParam6
183 .global Parameter_UserParam6
186 Parameter_UserParam6:
187 0015 00 .skip 1,0
188 .global Parameter_UserParam5
189 .global Parameter_UserParam5
192 Parameter_UserParam5:
193 0016 00 .skip 1,0
194 .global Parameter_UserParam4
195 .global Parameter_UserParam4
198 Parameter_UserParam4:
199 0017 00 .skip 1,0
200 .global Parameter_UserParam3
201 .global Parameter_UserParam3
204 Parameter_UserParam3:
205 0018 00 .skip 1,0
206 .global Parameter_UserParam2
207 .global Parameter_UserParam2
210 Parameter_UserParam2:
211 0019 00 .skip 1,0
212 .global Parameter_UserParam1
213 .global Parameter_UserParam1
216 Parameter_UserParam1:
217 001a 00 .skip 1,0
218 .global Parameter_I_Faktor
219 .data
222 Parameter_I_Faktor:
223 002d 0A .byte 10
224 .global Parameter_Gier_P
227 Parameter_Gier_P:
228 002e 02 .byte 2
229 .global Parameter_Gyro_Gier_I
232 Parameter_Gyro_Gier_I:
233 002f 96 .byte -106
234 .global Parameter_Gyro_Gier_P
237 Parameter_Gyro_Gier_P:
238 0030 96 .byte -106
239 .global Parameter_Gyro_I
242 Parameter_Gyro_I:
243 0031 96 .byte -106
244 .global Parameter_Gyro_P
247 Parameter_Gyro_P:
248 0032 96 .byte -106
249 .global Parameter_Gyro_D
252 Parameter_Gyro_D:
253 0033 08 .byte 8
254 .global Parameter_Hoehe_GPS_Z
257 Parameter_Hoehe_GPS_Z:
258 0034 40 .byte 64
259 .global Parameter_KompassWirkung
262 Parameter_KompassWirkung:
263 0035 40 .byte 64
264 .global Parameter_Hoehe_ACC_Wirkung
267 Parameter_Hoehe_ACC_Wirkung:
268 0036 3A .byte 58
269 .global Parameter_Hoehe_P
272 Parameter_Hoehe_P:
273 0037 10 .byte 16
274 .global Parameter_HoehenSchalter
277 Parameter_HoehenSchalter:
278 0038 FB .byte -5
279 .global Parameter_Luftdruck_D
282 Parameter_Luftdruck_D:
283 0039 30 .byte 48
284 .global Looping_Oben
285 .global Looping_Oben
286 .section .bss
289 Looping_Oben:
290 001b 00 .skip 1,0
291 .global Looping_Unten
292 .global Looping_Unten
295 Looping_Unten:
296 001c 00 .skip 1,0
297 .global Looping_Rechts
298 .global Looping_Rechts
301 Looping_Rechts:
302 001d 00 .skip 1,0
303 .global Looping_Links
304 .global Looping_Links
307 Looping_Links:
308 001e 00 .skip 1,0
309 .global Looping_Roll
310 .global Looping_Roll
313 Looping_Roll:
314 001f 00 .skip 1,0
315 .global Looping_Nick
316 .global Looping_Nick
319 Looping_Nick:
320 0020 00 .skip 1,0
321 .global Ki
322 .data
325 Ki:
326 003a 3801 .word 312
327 .global HoverGas
328 .global HoverGas
329 .section .bss
332 HoverGas:
333 0021 0000 .skip 2,0
334 .global LageKorrekturNick
335 .global LageKorrekturNick
338 LageKorrekturNick:
339 0023 0000 .skip 2,0
340 .global LageKorrekturRoll
341 .global LageKorrekturRoll
344 LageKorrekturRoll:
345 0025 0000 .skip 2,0
346 .global NeueKompassRichtungMerken
347 .global NeueKompassRichtungMerken
350 NeueKompassRichtungMerken:
351 0027 00 .skip 1,0
352 .global CalibrationDone
353 .global CalibrationDone
356 CalibrationDone:
357 0028 00 .skip 1,0
358 .global CompassGierSetpoint
359 .global CompassGierSetpoint
362 CompassGierSetpoint:
363 0029 0000 .skip 2,0
364 .global WaypointTrimming
365 .global WaypointTrimming
368 WaypointTrimming:
369 002b 00 .skip 1,0
370 .global carefree_old
371 .data
374 carefree_old:
375 003c 32 .byte 50
376 .global FromNC_AltitudeSpeed
377 .global FromNC_AltitudeSpeed
378 .section .bss
381 FromNC_AltitudeSpeed:
382 002c 00 .skip 1,0
383 .global FromNC_AltitudeSetpoint
384 .global FromNC_AltitudeSetpoint
387 FromNC_AltitudeSetpoint:
388 002d 0000 0000 .skip 4,0
389 .global AltitudeSetpointTrimming
390 .global AltitudeSetpointTrimming
393 AltitudeSetpointTrimming:
394 0031 0000 .skip 2,0
395 .global SollHoehe
396 .global SollHoehe
399 SollHoehe:
400 0033 0000 0000 .skip 4,0
401 .global HoehenWert
402 .global HoehenWert
405 HoehenWert:
406 0037 0000 0000 .skip 4,0
407 .global StartTrigger
408 .global StartTrigger
411 StartTrigger:
412 003b 00 .skip 1,0
413 .global MotorenEin
414 .global MotorenEin
417 MotorenEin:
418 003c 00 .skip 1,0
419 .global SenderOkay
420 .global SenderOkay
423 SenderOkay:
424 003d 00 .skip 1,0
425 .global Poti
426 .global Poti
429 Poti:
430 003e 0000 0000 .skip 9,0
430 0000 0000
430 00
431 .global StickGas
432 .global StickGas
435 StickGas:
436 0047 0000 .skip 2,0
437 .global StickGier
438 .global StickGier
441 StickGier:
442 0049 0000 .skip 2,0
443 .global StickRoll
444 .global StickRoll
447 StickRoll:
448 004b 0000 .skip 2,0
449 .global StickNick
450 .global StickNick
453 StickNick:
454 004d 0000 .skip 2,0
455 .global HoverGasMax
456 .data
459 HoverGasMax:
460 003d FF03 .word 1023
461 .global HoverGasMin
462 .global HoverGasMin
463 .section .bss
466 HoverGasMin:
467 004f 0000 .skip 2,0
468 .global StickGasHover
469 .data
472 StickGasHover:
473 003f 7800 .word 120
474 .global GierGyroFehler
475 .global GierGyroFehler
476 .section .bss
479 GierGyroFehler:
480 0051 0000 .skip 2,0
481 .global Umschlag180Roll
482 .data
485 Umschlag180Roll:
486 0041 90D0 0300 .long 250000
487 .global Umschlag180Nick
490 Umschlag180Nick:
491 0045 90D0 0300 .long 250000
492 .global TrichterFlug
493 .global TrichterFlug
494 .section .bss
497 TrichterFlug:
498 0053 00 .skip 1,0
499 .global HoehenReglerAktiv
500 .global HoehenReglerAktiv
503 HoehenReglerAktiv:
504 0054 00 .skip 1,0
505 .global KompassSignalSchlecht
506 .data
509 KompassSignalSchlecht:
510 0049 3200 .word 50
511 .global KompassFusion
514 KompassFusion:
515 004b 20 .byte 32
516 .global CalculateCompassTimer
519 CalculateCompassTimer:
520 004c 64 .byte 100
521 .global KompassSollWert
522 .global KompassSollWert
523 .section .bss
526 KompassSollWert:
527 0055 0000 .skip 2,0
528 .global KompassValue
529 .data
532 KompassValue:
533 004d FFFF .word -1
534 .global Mess_Integral_Hoch
535 .global Mess_Integral_Hoch
536 .section .bss
539 Mess_Integral_Hoch:
540 0057 0000 0000 .skip 4,0
541 .global SummeRoll
542 .global SummeRoll
545 SummeRoll:
546 005b 0000 0000 .skip 4,0
547 .global SummeNick
548 .global SummeNick
551 SummeNick:
552 005f 0000 0000 .skip 4,0
553 .global Mess_Integral_Gier2
554 .global Mess_Integral_Gier2
557 Mess_Integral_Gier2:
558 0063 0000 0000 .skip 4,0
559 .global Mess_Integral_Gier
560 .global Mess_Integral_Gier
563 Mess_Integral_Gier:
564 0067 0000 0000 .skip 4,0
565 .global Mess_IntegralRoll2
566 .global Mess_IntegralRoll2
569 Mess_IntegralRoll2:
570 006b 0000 0000 .skip 4,0
571 .global Mess_IntegralRoll
572 .global Mess_IntegralRoll
575 Mess_IntegralRoll:
576 006f 0000 0000 .skip 4,0
577 .global Mess_IntegralNick2
578 .global Mess_IntegralNick2
581 Mess_IntegralNick2:
582 0073 0000 0000 .skip 4,0
583 .global Mess_IntegralNick
584 .global Mess_IntegralNick
587 Mess_IntegralNick:
588 0077 0000 0000 .skip 4,0
589 .global Integral_Gier
590 .global Integral_Gier
593 Integral_Gier:
594 007b 0000 0000 .skip 4,0
595 .global IntegralAccZ
596 .global IntegralAccZ
599 IntegralAccZ:
600 007f 0000 0000 .skip 4,0
601 .global IntegralAccRoll
602 .global IntegralAccRoll
605 IntegralAccRoll:
606 0083 0000 0000 .skip 4,0
607 .global IntegralAccNick
608 .global IntegralAccNick
611 IntegralAccNick:
612 0087 0000 0000 .skip 4,0
613 .global IntegralRoll2
614 .global IntegralRoll2
617 IntegralRoll2:
618 008b 0000 0000 .skip 4,0
619 .global IntegralRoll
620 .global IntegralRoll
623 IntegralRoll:
624 008f 0000 0000 .skip 4,0
625 .global IntegralNick2
626 .global IntegralNick2
629 IntegralNick2:
630 0093 0000 0000 .skip 4,0
631 .global IntegralNick
632 .global IntegralNick
635 IntegralNick:
636 0097 0000 0000 .skip 4,0
637 .global ControlHeading
638 .global ControlHeading
641 ControlHeading:
642 009b 00 .skip 1,0
643 .global NeutralAccZ
644 .global NeutralAccZ
647 NeutralAccZ:
648 009c 0000 .skip 2,0
649 .global NaviCntAcc
650 .global NaviCntAcc
653 NaviCntAcc:
654 009e 0000 .skip 2,0
655 .global NeutralAccY
656 .global NeutralAccY
659 NeutralAccY:
660 00a0 0000 .skip 2,0
661 .global NeutralAccX
662 .global NeutralAccX
665 NeutralAccX:
666 00a2 0000 .skip 2,0
667 .global StartNeutralNick
668 .global StartNeutralNick
671 StartNeutralNick:
672 00a4 0000 .skip 2,0
673 .global StartNeutralRoll
674 .global StartNeutralRoll
677 StartNeutralRoll:
678 00a6 0000 .skip 2,0
679 .global AdNeutralGier
680 .global AdNeutralGier
683 AdNeutralGier:
684 00a8 0000 .skip 2,0
685 .global AdNeutralRoll
686 .global AdNeutralRoll
689 AdNeutralRoll:
690 00aa 0000 .skip 2,0
691 .global AdNeutralNick
692 .global AdNeutralNick
695 AdNeutralNick:
696 00ac 0000 .skip 2,0
697 .global BaroExpandActive
698 .global BaroExpandActive
701 BaroExpandActive:
702 00ae 0000 .skip 2,0
703 .text
704 .global CopyDebugValues
706 CopyDebugValues:
707 /* prologue: frame size=0 */
708 0000 EF92 push r14
709 0002 FF92 push r15
710 0004 0F93 push r16
711 0006 1F93 push r17
712 /* prologue end (size=4) */
713 0008 8091 0000 lds r24,EE_Parameter+28
714 000c 9927 clr r25
715 000e 880F lsl r24
716 0010 991F rol r25
717 0012 880F lsl r24
718 0014 991F rol r25
719 0016 7C01 movw r14,r24
720 0018 0027 clr r16
721 001a F7FC sbrc r15,7
722 001c 0095 com r16
723 001e 102F mov r17,r16
724 0020 8091 0000 lds r24,IntegralNick
725 0024 9091 0000 lds r25,(IntegralNick)+1
726 0028 A091 0000 lds r26,(IntegralNick)+2
727 002c B091 0000 lds r27,(IntegralNick)+3
728 0030 BC01 movw r22,r24
729 0032 CD01 movw r24,r26
730 0034 A801 movw r20,r16
731 0036 9701 movw r18,r14
732 0038 0E94 0000 call __divmodsi4
733 003c 3093 0000 sts (DebugOut+2)+1,r19
734 0040 2093 0000 sts DebugOut+2,r18
735 0044 8091 0000 lds r24,IntegralRoll
736 0048 9091 0000 lds r25,(IntegralRoll)+1
737 004c A091 0000 lds r26,(IntegralRoll)+2
738 0050 B091 0000 lds r27,(IntegralRoll)+3
739 0054 BC01 movw r22,r24
740 0056 CD01 movw r24,r26
741 0058 A801 movw r20,r16
742 005a 9701 movw r18,r14
743 005c 0E94 0000 call __divmodsi4
744 0060 3093 0000 sts (DebugOut+4)+1,r19
745 0064 2093 0000 sts DebugOut+4,r18
746 0068 8091 0000 lds r24,Mittelwert_AccNick
747 006c 9091 0000 lds r25,(Mittelwert_AccNick)+1
748 0070 97FD sbrc r25,7
749 0072 0396 adiw r24,3
750 .L2:
751 0074 9595 asr r25
752 0076 8795 ror r24
753 0078 9595 asr r25
754 007a 8795 ror r24
755 007c 9093 0000 sts (DebugOut+6)+1,r25
756 0080 8093 0000 sts DebugOut+6,r24
757 0084 8091 0000 lds r24,Mittelwert_AccRoll
758 0088 9091 0000 lds r25,(Mittelwert_AccRoll)+1
759 008c 97FD sbrc r25,7
760 008e 0396 adiw r24,3
761 .L3:
762 0090 9595 asr r25
763 0092 8795 ror r24
764 0094 9595 asr r25
765 0096 8795 ror r24
766 0098 9093 0000 sts (DebugOut+8)+1,r25
767 009c 8093 0000 sts DebugOut+8,r24
768 00a0 8091 0000 lds r24,AdNeutralGier
769 00a4 9091 0000 lds r25,(AdNeutralGier)+1
770 00a8 2091 0000 lds r18,AdWertGier
771 00ac 3091 0000 lds r19,(AdWertGier)+1
772 00b0 821B sub r24,r18
773 00b2 930B sbc r25,r19
774 00b4 9093 0000 sts (DebugOut+10)+1,r25
775 00b8 8093 0000 sts DebugOut+10,r24
776 00bc 8091 0000 lds r24,HoehenWert
777 00c0 9091 0000 lds r25,(HoehenWert)+1
778 00c4 A091 0000 lds r26,(HoehenWert)+2
779 00c8 B091 0000 lds r27,(HoehenWert)+3
780 00cc BC01 movw r22,r24
781 00ce CD01 movw r24,r26
782 00d0 25E0 ldi r18,lo8(5)
783 00d2 30E0 ldi r19,hi8(5)
784 00d4 40E0 ldi r20,hlo8(5)
785 00d6 50E0 ldi r21,hhi8(5)
786 00d8 0E94 0000 call __divmodsi4
787 00dc 3093 0000 sts (DebugOut+12)+1,r19
788 00e0 2093 0000 sts DebugOut+12,r18
789 00e4 8091 0000 lds r24,AdWertAccHoch
790 00e8 9091 0000 lds r25,(AdWertAccHoch)+1
791 00ec 9093 0000 sts (DebugOut+14)+1,r25
792 00f0 8093 0000 sts DebugOut+14,r24
793 00f4 8091 0000 lds r24,KompassValue
794 00f8 9091 0000 lds r25,(KompassValue)+1
795 00fc 9093 0000 sts (DebugOut+18)+1,r25
796 0100 8093 0000 sts DebugOut+18,r24
797 0104 8091 0000 lds r24,UBat
798 0108 9091 0000 lds r25,(UBat)+1
799 010c 9093 0000 sts (DebugOut+20)+1,r25
800 0110 8093 0000 sts DebugOut+20,r24
801 0114 8091 0000 lds r24,SenderOkay
802 0118 9927 clr r25
803 011a 9093 0000 sts (DebugOut+22)+1,r25
804 011e 8093 0000 sts DebugOut+22,r24
805 0122 8091 0000 lds r24,ErsatzKompassInGrad
806 0126 9091 0000 lds r25,(ErsatzKompassInGrad)+1
807 012a 9093 0000 sts (DebugOut+24)+1,r25
808 012e 8093 0000 sts DebugOut+24,r24
809 0132 8091 0000 lds r24,Motor+1
810 0136 9927 clr r25
811 0138 9093 0000 sts (DebugOut+26)+1,r25
812 013c 8093 0000 sts DebugOut+26,r24
813 0140 8091 0000 lds r24,Motor+9
814 0144 9927 clr r25
815 0146 9093 0000 sts (DebugOut+28)+1,r25
816 014a 8093 0000 sts DebugOut+28,r24
817 014e 8091 0000 lds r24,Motor+17
818 0152 9927 clr r25
819 0154 9093 0000 sts (DebugOut+30)+1,r25
820 0158 8093 0000 sts DebugOut+30,r24
821 015c 8091 0000 lds r24,Motor+25
822 0160 9927 clr r25
823 0162 9093 0000 sts (DebugOut+32)+1,r25
824 0166 8093 0000 sts DebugOut+32,r24
825 016a 8091 0000 lds r24,ServoNickValue
826 016e 9091 0000 lds r25,(ServoNickValue)+1
827 0172 9093 0000 sts (DebugOut+42)+1,r25
828 0176 8093 0000 sts DebugOut+42,r24
829 017a 8091 0000 lds r24,Capacity
830 017e 9091 0000 lds r25,(Capacity)+1
831 0182 9093 0000 sts (DebugOut+46)+1,r25
832 0186 8093 0000 sts DebugOut+46,r24
833 018a 8091 0000 lds r24,Capacity+4
834 018e 9091 0000 lds r25,(Capacity+4)+1
835 0192 9093 0000 sts (DebugOut+48)+1,r25
836 0196 8093 0000 sts DebugOut+48,r24
837 019a 8091 0000 lds r24,SollHoehe
838 019e 9091 0000 lds r25,(SollHoehe)+1
839 01a2 A091 0000 lds r26,(SollHoehe)+2
840 01a6 B091 0000 lds r27,(SollHoehe)+3
841 01aa BC01 movw r22,r24
842 01ac CD01 movw r24,r26
843 01ae 25E0 ldi r18,lo8(5)
844 01b0 30E0 ldi r19,hi8(5)
845 01b2 40E0 ldi r20,hlo8(5)
846 01b4 50E0 ldi r21,hhi8(5)
847 01b6 0E94 0000 call __divmodsi4
848 01ba 3093 0000 sts (DebugOut+50)+1,r19
849 01be 2093 0000 sts DebugOut+50,r18
850 01c2 8091 0000 lds r24,KompassSollWert
851 01c6 9091 0000 lds r25,(KompassSollWert)+1
852 01ca 9093 0000 sts (DebugOut+56)+1,r25
853 01ce 8093 0000 sts DebugOut+56,r24
854 01d2 8091 0000 lds r24,Capacity+6
855 01d6 9927 clr r25
856 01d8 9093 0000 sts (DebugOut+60)+1,r25
857 01dc 8093 0000 sts DebugOut+60,r24
858 01e0 8091 0000 lds r24,GPS_Nick
859 01e4 9091 0000 lds r25,(GPS_Nick)+1
860 01e8 9093 0000 sts (DebugOut+62)+1,r25
861 01ec 8093 0000 sts DebugOut+62,r24
862 01f0 8091 0000 lds r24,GPS_Roll
863 01f4 9091 0000 lds r25,(GPS_Roll)+1
864 01f8 9093 0000 sts (DebugOut+64)+1,r25
865 01fc 8093 0000 sts DebugOut+64,r24
866 0200 8091 0000 lds r24,VersionInfo+5
867 0204 8823 tst r24
868 0206 01F4 brne .L5
869 0208 8091 0000 lds r24,VersionInfo+6
870 020c 8823 tst r24
871 020e 01F0 breq .L4
872 .L5:
873 0210 8091 0000 lds r24,DebugOut+1
874 0214 8160 ori r24,lo8(1)
875 0216 00C0 rjmp .L7
876 .L4:
877 0218 8091 0000 lds r24,DebugOut+1
878 021c 8E7F andi r24,lo8(-2)
879 .L7:
880 021e 8093 0000 sts DebugOut+1,r24
881 /* epilogue: frame size=0 */
882 0222 1F91 pop r17
883 0224 0F91 pop r16
884 0226 FF90 pop r15
885 0228 EF90 pop r14
886 022a 0895 ret
887 /* epilogue end (size=5) */
888 /* function CopyDebugValues size 280 (271) */
890 .global Piep
892 Piep:
893 /* prologue: frame size=0 */
894 022c EF92 push r14
895 022e FF92 push r15
896 0230 1F93 push r17
897 0232 CF93 push r28
898 0234 DF93 push r29
899 /* prologue end (size=5) */
900 0236 182F mov r17,r24
901 0238 7B01 movw r14,r22
902 023a 8091 0000 lds r24,MotorenEin
903 023e 8823 tst r24
904 0240 01F4 brne .L8
905 0242 8091 0000 lds r24,PlatinenVersion
906 0246 8C30 cpi r24,lo8(12)
907 0248 00F0 brlo .L11
908 024a 8631 cpi r24,lo8(22)
909 024c 01F4 brne .L10
910 .L11:
911 024e 2998 cbi 37-0x20,1
912 0250 00C0 rjmp .L12
913 .L10:
914 0252 299A sbi 37-0x20,1
915 .L12:
916 0254 1150 subi r17,lo8(-(-1))
917 0256 1F3F cpi r17,lo8(-1)
918 0258 01F0 breq .L26
919 025a F092 0000 sts (beeptime)+1,r15
920 025e E092 0000 sts beeptime,r14
921 0262 E701 movw r28,r14
922 .L34:
923 0264 8091 0000 lds r24,beeptime
924 0268 9091 0000 lds r25,(beeptime)+1
925 026c 892B or r24,r25
926 026e 01F4 brne .L31
927 0270 2097 sbiw r28,0
928 0272 01F0 breq .L12
929 .L31:
930 0274 8091 0000 lds r24,UpdateMotor
931 0278 8823 tst r24
932 027a 01F0 breq .L34
933 027c 1092 0000 sts UpdateMotor,__zero_reg__
934 0280 8091 0000 lds r24,beeptime
935 0284 9091 0000 lds r25,(beeptime)+1
936 0288 892B or r24,r25
937 028a 01F4 brne .L19
938 028c 2197 sbiw r28,1
939 .L19:
940 028e 0E94 0000 call LIBFC_Polling
941 0292 00C0 rjmp .L34
942 .L26:
943 0294 8091 0000 lds r24,PlatinenVersion
944 0298 8C30 cpi r24,lo8(12)
945 029a 00F0 brlo .L23
946 029c 8631 cpi r24,lo8(22)
947 029e 01F4 brne .L22
948 .L23:
949 02a0 299A sbi 37-0x20,1
950 02a2 00C0 rjmp .L8
951 .L22:
952 02a4 2998 cbi 37-0x20,1
953 .L8:
954 /* epilogue: frame size=0 */
955 02a6 DF91 pop r29
956 02a8 CF91 pop r28
957 02aa 1F91 pop r17
958 02ac FF90 pop r15
959 02ae EF90 pop r14
960 02b0 0895 ret
961 /* epilogue end (size=6) */
962 /* function Piep size 67 (56) */
964 .global CalibrierMittelwert
966 CalibrierMittelwert:
967 /* prologue: frame size=0 */
968 02b2 CF93 push r28
969 02b4 DF93 push r29
970 /* prologue end (size=2) */
971 02b6 8091 0000 lds r24,PlatinenVersion
972 02ba 8D30 cpi r24,lo8(13)
973 02bc 01F4 brne .L36
974 02be 0E94 0000 call SucheGyroOffset
975 .L36:
976 02c2 1092 7A00 sts 122,__zero_reg__
977 02c6 8091 0000 lds r24,AdWertNick
978 02ca 9091 0000 lds r25,(AdWertNick)+1
979 02ce 9093 0000 sts (MesswertNick)+1,r25
980 02d2 8093 0000 sts MesswertNick,r24
981 02d6 8091 0000 lds r24,AdWertRoll
982 02da 9091 0000 lds r25,(AdWertRoll)+1
983 02de 9093 0000 sts (MesswertRoll)+1,r25
984 02e2 8093 0000 sts MesswertRoll,r24
985 02e6 8091 0000 lds r24,AdWertGier
986 02ea 9091 0000 lds r25,(AdWertGier)+1
987 02ee 9093 0000 sts (MesswertGier)+1,r25
988 02f2 8093 0000 sts MesswertGier,r24
989 02f6 2091 0000 lds r18,AdWertAccNick
990 02fa 3091 0000 lds r19,(AdWertAccNick)+1
991 02fe C901 movw r24,r18
992 0300 880F lsl r24
993 0302 991F rol r25
994 0304 880F lsl r24
995 0306 991F rol r25
996 0308 820F add r24,r18
997 030a 931F adc r25,r19
998 030c 820F add r24,r18
999 030e 931F adc r25,r19
1000 0310 9093 0000 sts (Mittelwert_AccNick)+1,r25
1001 0314 8093 0000 sts Mittelwert_AccNick,r24
1002 0318 2091 0000 lds r18,AdWertAccRoll
1003 031c 3091 0000 lds r19,(AdWertAccRoll)+1
1004 0320 C901 movw r24,r18
1005 0322 880F lsl r24
1006 0324 991F rol r25
1007 0326 880F lsl r24
1008 0328 991F rol r25
1009 032a 820F add r24,r18
1010 032c 931F adc r25,r19
1011 032e 820F add r24,r18
1012 0330 931F adc r25,r19
1013 0332 9093 0000 sts (Mittelwert_AccRoll)+1,r25
1014 0336 8093 0000 sts Mittelwert_AccRoll,r24
1015 033a 8FEC ldi r24,lo8(-49)
1016 033c 8093 7A00 sts 122,r24
1017 0340 A0E0 ldi r26,lo8(Poti)
1018 0342 B0E0 ldi r27,hi8(Poti)
1019 0344 C0E0 ldi r28,lo8(EE_Parameter+5)
1020 0346 D0E0 ldi r29,hi8(EE_Parameter+5)
1021 0348 97E0 ldi r25,lo8(7)
1022 .L46:
1023 034a 8991 ld r24,Y+
1024 034c E82F mov r30,r24
1025 034e FF27 clr r31
1026 0350 EE0F add r30,r30
1027 0352 FF1F adc r31,r31
1028 0354 E050 subi r30,lo8(-(PPM_in))
1029 0356 F040 sbci r31,hi8(-(PPM_in))
1030 0358 0190 ld __tmp_reg__,Z+
1031 035a F081 ld r31,Z
1032 035c E02D mov r30,__tmp_reg__
1033 035e E158 subi r30,lo8(-(127))
1034 0360 FF4F sbci r31,hi8(-(127))
1035 0362 1E16 cp __zero_reg__,r30
1036 0364 1F06 cpc __zero_reg__,r31
1037 0366 04F0 brlt .L40
1038 0368 E0E0 ldi r30,lo8(0)
1039 036a F0E0 ldi r31,hi8(0)
1040 036c 00C0 rjmp .L41
1041 .L40:
1042 036e EF3F cpi r30,255
1043 0370 F105 cpc r31,__zero_reg__
1044 0372 04F0 brlt .L41
1045 0374 EFEF ldi r30,lo8(255)
1046 0376 F0E0 ldi r31,hi8(255)
1047 .L41:
1048 0378 8C91 ld r24,X
1049 037a 282F mov r18,r24
1050 037c 3327 clr r19
1051 037e E217 cp r30,r18
1052 0380 F307 cpc r31,r19
1053 0382 04F4 brge .L43
1054 0384 8150 subi r24,lo8(-(-1))
1055 0386 00C0 rjmp .L49
1056 .L43:
1057 0388 2E17 cp r18,r30
1058 038a 3F07 cpc r19,r31
1059 038c 04F4 brge .L39
1060 038e 8F5F subi r24,lo8(-(1))
1061 .L49:
1062 0390 8C93 st X,r24
1063 .L39:
1064 0392 9150 subi r25,lo8(-(-1))
1065 0394 1196 adiw r26,1
1066 0396 97FF sbrs r25,7
1067 0398 00C0 rjmp .L46
1068 039a 8091 0000 lds r24,EE_Parameter+65
1069 039e 9927 clr r25
1070 03a0 AA27 clr r26
1071 03a2 BB27 clr r27
1072 03a4 BC01 movw r22,r24
1073 03a6 CD01 movw r24,r26
1074 03a8 24EC ldi r18,lo8(2500)
1075 03aa 39E0 ldi r19,hi8(2500)
1076 03ac 40E0 ldi r20,hlo8(2500)
1077 03ae 50E0 ldi r21,hhi8(2500)
1078 03b0 0E94 0000 call __mulsi3
1079 03b4 DC01 movw r26,r24
1080 03b6 CB01 movw r24,r22
1081 03b8 8093 0000 sts Umschlag180Nick,r24
1082 03bc 9093 0000 sts (Umschlag180Nick)+1,r25
1083 03c0 A093 0000 sts (Umschlag180Nick)+2,r26
1084 03c4 B093 0000 sts (Umschlag180Nick)+3,r27
1085 03c8 8091 0000 lds r24,EE_Parameter+66
1086 03cc 9927 clr r25
1087 03ce AA27 clr r26
1088 03d0 BB27 clr r27
1089 03d2 BC01 movw r22,r24
1090 03d4 CD01 movw r24,r26
1091 03d6 0E94 0000 call __mulsi3
1092 03da DC01 movw r26,r24
1093 03dc CB01 movw r24,r22
1094 03de 8093 0000 sts Umschlag180Roll,r24
1095 03e2 9093 0000 sts (Umschlag180Roll)+1,r25
1096 03e6 A093 0000 sts (Umschlag180Roll)+2,r26
1097 03ea B093 0000 sts (Umschlag180Roll)+3,r27
1098 /* epilogue: frame size=0 */
1099 03ee DF91 pop r29
1100 03f0 CF91 pop r28
1101 03f2 0895 ret
1102 /* epilogue end (size=3) */
1103 /* function CalibrierMittelwert size 161 (156) */
1105 .section .progmem.data,"a",@progbits
1108 __c.35:
1109 0000 0A0D 4143 .string "\n\rACC not calibrated!\r\n"
1109 4320 6E6F
1109 7420 6361
1109 6C69 6272
1109 6174 6564
1110 .text
1111 .global SetNeutral
1113 SetNeutral:
1114 /* prologue: frame size=0 */
1115 03f4 A0E0 ldi r26,lo8(0)
1116 03f6 B0E0 ldi r27,hi8(0)
1117 03f8 E0E0 ldi r30,pm_lo8(1f)
1118 03fa F0E0 ldi r31,pm_hi8(1f)
1119 03fc 0C94 0000 jmp __prologue_saves__+12
1120 1:
1121 /* prologue end (size=6) */
1122 0400 882E mov r8,r24
1123 0402 C0E0 ldi r28,lo8(0)
1124 0404 D0E0 ldi r29,hi8(0)
1125 0406 7E01 movw r14,r28
1126 0408 6E01 movw r12,r28
1127 040a 1092 0000 sts VersionInfo+5,__zero_reg__
1128 040e D093 0000 sts (NeutralAccX)+1,r29
1129 0412 C093 0000 sts NeutralAccX,r28
1130 0416 D093 0000 sts (NeutralAccY)+1,r29
1131 041a C093 0000 sts NeutralAccY,r28
1132 041e D093 0000 sts (NeutralAccZ)+1,r29
1133 0422 C093 0000 sts NeutralAccZ,r28
1134 0426 D093 0000 sts (AdNeutralNick)+1,r29
1135 042a C093 0000 sts AdNeutralNick,r28
1136 042e D093 0000 sts (AdNeutralRoll)+1,r29
1137 0432 C093 0000 sts AdNeutralRoll,r28
1138 0436 D093 0000 sts (AdNeutralGier)+1,r29
1139 043a C093 0000 sts AdNeutralGier,r28
1140 043e 1092 0000 sts Parameter_AchsKopplung1,__zero_reg__
1141 0442 1092 0000 sts Parameter_AchsKopplung2,__zero_reg__
1142 0446 1092 0000 sts ExpandBaro,__zero_reg__
1143 044a 0E94 0000 call CalibrierMittelwert
1144 044e 84E6 ldi r24,lo8(100)
1145 0450 90E0 ldi r25,hi8(100)
1146 0452 0E94 0000 call Delay_ms_Mess
1147 0456 0E94 0000 call CalibrierMittelwert
1148 045a 8091 0000 lds r24,EE_Parameter+13
1149 045e 80FF sbrs r24,0
1150 0460 00C0 rjmp .L51
1151 0462 8091 0000 lds r24,MessLuftdruck
1152 0466 9091 0000 lds r25,(MessLuftdruck)+1
1153 046a 875B subi r24,lo8(951)
1154 046c 9340 sbci r25,hi8(951)
1155 046e 00F4 brsh .L53
1156 0470 8091 0000 lds r24,MessLuftdruck
1157 0474 9091 0000 lds r25,(MessLuftdruck)+1
1158 0478 8E5E subi r24,lo8(750)
1159 047a 9240 sbci r25,hi8(750)
1160 047c 00F4 brsh .L51
1161 .L53:
1162 047e 0E94 0000 call SucheLuftruckOffset
1163 .L51:
1164 0482 0FE1 ldi r16,lo8(31)
1165 .L57:
1166 0484 8AE0 ldi r24,lo8(10)
1167 0486 90E0 ldi r25,hi8(10)
1168 0488 0E94 0000 call Delay_ms_Mess
1169 048c 8091 0000 lds r24,AdWertGier
1170 0490 9091 0000 lds r25,(AdWertGier)+1
1171 0494 C80F add r28,r24
1172 0496 D91F adc r29,r25
1173 0498 8091 0000 lds r24,AdWertNick
1174 049c 9091 0000 lds r25,(AdWertNick)+1
1175 04a0 E80E add r14,r24
1176 04a2 F91E adc r15,r25
1177 04a4 8091 0000 lds r24,AdWertRoll
1178 04a8 9091 0000 lds r25,(AdWertRoll)+1
1179 04ac C80E add r12,r24
1180 04ae D91E adc r13,r25
1181 04b0 0150 subi r16,lo8(-(-1))
1182 04b2 07FF sbrs r16,7
1183 04b4 00C0 rjmp .L57
1184 04b6 9701 movw r18,r14
1185 04b8 205F subi r18,lo8(-(16))
1186 04ba 3F4F sbci r19,hi8(-(16))
1187 04bc 3695 lsr r19
1188 04be 2795 ror r18
1189 04c0 3695 lsr r19
1190 04c2 2795 ror r18
1191 04c4 3093 0000 sts (AdNeutralNick)+1,r19
1192 04c8 2093 0000 sts AdNeutralNick,r18
1193 04cc C601 movw r24,r12
1194 04ce 4096 adiw r24,16
1195 04d0 9695 lsr r25
1196 04d2 8795 ror r24
1197 04d4 9695 lsr r25
1198 04d6 8795 ror r24
1199 04d8 9093 0000 sts (AdNeutralRoll)+1,r25
1200 04dc 8093 0000 sts AdNeutralRoll,r24
1201 04e0 6096 adiw r28,16
1202 04e2 F5E0 ldi r31,5
1203 04e4 D695 1: lsr r29
1204 04e6 C795 ror r28
1205 04e8 FA95 dec r31
1206 04ea 01F4 brne 1b
1207 04ec D093 0000 sts (AdNeutralGier)+1,r29
1208 04f0 C093 0000 sts AdNeutralGier,r28
1209 04f4 9093 0000 sts (StartNeutralRoll)+1,r25
1210 04f8 8093 0000 sts StartNeutralRoll,r24
1211 04fc 3093 0000 sts (StartNeutralNick)+1,r19
1212 0500 2093 0000 sts StartNeutralNick,r18
1213 0504 8820 tst r8
1214 0506 01F4 brne .+2
1215 0508 00C0 rjmp .L58
1216 050a 8091 0000 lds r24,Mittelwert_AccNick
1217 050e 9091 0000 lds r25,(Mittelwert_AccNick)+1
1218 0512 97FF sbrs r25,7
1219 0514 00C0 rjmp .L59
1220 0516 9095 com r25
1221 0518 8195 neg r24
1222 051a 9F4F sbci r25,lo8(-1)
1223 .L59:
1224 051c 6CE0 ldi r22,lo8(12)
1225 051e 70E0 ldi r23,hi8(12)
1226 0520 0E94 0000 call __divmodhi4
1227 0524 9B01 movw r18,r22
1228 0526 7093 0000 sts (NeutralAccX)+1,r23
1229 052a 6093 0000 sts NeutralAccX,r22
1230 052e 8091 0000 lds r24,Mittelwert_AccRoll
1231 0532 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1232 0536 97FF sbrs r25,7
1233 0538 00C0 rjmp .L60
1234 053a 9095 com r25
1235 053c 8195 neg r24
1236 053e 9F4F sbci r25,lo8(-1)
1237 .L60:
1238 0540 6CE0 ldi r22,lo8(12)
1239 0542 70E0 ldi r23,hi8(12)
1240 0544 0E94 0000 call __divmodhi4
1241 0548 7093 0000 sts (NeutralAccY)+1,r23
1242 054c 6093 0000 sts NeutralAccY,r22
1243 0550 8091 0000 lds r24,Aktuell_az
1244 0554 9091 0000 lds r25,(Aktuell_az)+1
1245 0558 9093 0000 sts (NeutralAccZ)+1,r25
1246 055c 8093 0000 sts NeutralAccZ,r24
1247 0560 B901 movw r22,r18
1248 0562 84E0 ldi r24,lo8(4)
1249 0564 90E0 ldi r25,hi8(4)
1250 0566 0E94 0000 call SetParamWord
1251 056a 6091 0000 lds r22,NeutralAccY
1252 056e 7091 0000 lds r23,(NeutralAccY)+1
1253 0572 86E0 ldi r24,lo8(6)
1254 0574 90E0 ldi r25,hi8(6)
1255 0576 0E94 0000 call SetParamWord
1256 057a 6091 0000 lds r22,NeutralAccZ
1257 057e 7091 0000 lds r23,(NeutralAccZ)+1
1258 0582 88E0 ldi r24,lo8(8)
1259 0584 90E0 ldi r25,hi8(8)
1260 0586 0E94 0000 call SetParamWord
1261 058a 00C0 rjmp .L61
1262 .L58:
1263 058c 84E0 ldi r24,lo8(4)
1264 058e 90E0 ldi r25,hi8(4)
1265 0590 0E94 0000 call GetParamWord
1266 0594 9093 0000 sts (NeutralAccX)+1,r25
1267 0598 8093 0000 sts NeutralAccX,r24
1268 059c 86E0 ldi r24,lo8(6)
1269 059e 90E0 ldi r25,hi8(6)
1270 05a0 0E94 0000 call GetParamWord
1271 05a4 9093 0000 sts (NeutralAccY)+1,r25
1272 05a8 8093 0000 sts NeutralAccY,r24
1273 05ac 88E0 ldi r24,lo8(8)
1274 05ae 90E0 ldi r25,hi8(8)
1275 05b0 0E94 0000 call GetParamWord
1276 05b4 9C01 movw r18,r24
1277 05b6 9093 0000 sts (NeutralAccZ)+1,r25
1278 05ba 8093 0000 sts NeutralAccZ,r24
1279 05be 8091 0000 lds r24,NeutralAccX
1280 05c2 9091 0000 lds r25,(NeutralAccX)+1
1281 05c6 8150 subi r24,lo8(2049)
1282 05c8 9840 sbci r25,hi8(2049)
1283 05ca 00F4 brsh .L63
1284 05cc 8091 0000 lds r24,NeutralAccY
1285 05d0 9091 0000 lds r25,(NeutralAccY)+1
1286 05d4 8150 subi r24,lo8(2049)
1287 05d6 9840 sbci r25,hi8(2049)
1288 05d8 00F4 brsh .L63
1289 05da 2150 subi r18,lo8(1025)
1290 05dc 3440 sbci r19,hi8(1025)
1291 05de 00F0 brlo .L61
1292 .L63:
1293 05e0 80E0 ldi r24,lo8(__c.35)
1294 05e2 90E0 ldi r25,hi8(__c.35)
1295 05e4 9F93 push r25
1296 05e6 8F93 push r24
1297 05e8 80E0 ldi r24,lo8(pm(uart_putchar))
1298 05ea 90E0 ldi r25,hi8(pm(uart_putchar))
1299 05ec 9F93 push r25
1300 05ee 8F93 push r24
1301 05f0 E091 0000 lds r30,_printf_P
1302 05f4 F091 0000 lds r31,(_printf_P)+1
1303 05f8 0995 icall
1304 05fa 8091 0000 lds r24,Mittelwert_AccNick
1305 05fe 9091 0000 lds r25,(Mittelwert_AccNick)+1
1306 0602 97FF sbrs r25,7
1307 0604 00C0 rjmp .L64
1308 0606 9095 com r25
1309 0608 8195 neg r24
1310 060a 9F4F sbci r25,lo8(-1)
1311 .L64:
1312 060c 6CE0 ldi r22,lo8(12)
1313 060e 70E0 ldi r23,hi8(12)
1314 0610 0E94 0000 call __divmodhi4
1315 0614 7093 0000 sts (NeutralAccX)+1,r23
1316 0618 6093 0000 sts NeutralAccX,r22
1317 061c 8091 0000 lds r24,Mittelwert_AccRoll
1318 0620 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1319 0624 97FF sbrs r25,7
1320 0626 00C0 rjmp .L65
1321 0628 9095 com r25
1322 062a 8195 neg r24
1323 062c 9F4F sbci r25,lo8(-1)
1324 .L65:
1325 062e 6CE0 ldi r22,lo8(12)
1326 0630 70E0 ldi r23,hi8(12)
1327 0632 0E94 0000 call __divmodhi4
1328 0636 7093 0000 sts (NeutralAccY)+1,r23
1329 063a 6093 0000 sts NeutralAccY,r22
1330 063e 8091 0000 lds r24,Aktuell_az
1331 0642 9091 0000 lds r25,(Aktuell_az)+1
1332 0646 9093 0000 sts (NeutralAccZ)+1,r25
1333 064a 8093 0000 sts NeutralAccZ,r24
1334 064e 0F90 pop __tmp_reg__
1335 0650 0F90 pop __tmp_reg__
1336 0652 0F90 pop __tmp_reg__
1337 0654 0F90 pop __tmp_reg__
1338 .L61:
1339 0656 1092 0000 sts (MesswertNick)+1,__zero_reg__
1340 065a 1092 0000 sts MesswertNick,__zero_reg__
1341 065e 1092 0000 sts (MesswertRoll)+1,__zero_reg__
1342 0662 1092 0000 sts MesswertRoll,__zero_reg__
1343 0666 1092 0000 sts (MesswertGier)+1,__zero_reg__
1344 066a 1092 0000 sts MesswertGier,__zero_reg__
1345 066e 84E6 ldi r24,lo8(100)
1346 0670 90E0 ldi r25,hi8(100)
1347 0672 0E94 0000 call Delay_ms_Mess
1348 0676 8091 0000 lds r24,AdWertAccNick
1349 067a 9091 0000 lds r25,(AdWertAccNick)+1
1350 067e 9C01 movw r18,r24
1351 0680 220F lsl r18
1352 0682 331F rol r19
1353 0684 220F lsl r18
1354 0686 331F rol r19
1355 0688 280F add r18,r24
1356 068a 391F adc r19,r25
1357 068c 280F add r18,r24
1358 068e 391F adc r19,r25
1359 0690 3093 0000 sts (Mittelwert_AccNick)+1,r19
1360 0694 2093 0000 sts Mittelwert_AccNick,r18
1361 0698 8091 0000 lds r24,AdWertAccRoll
1362 069c 9091 0000 lds r25,(AdWertAccRoll)+1
1363 06a0 8C01 movw r16,r24
1364 06a2 000F lsl r16
1365 06a4 111F rol r17
1366 06a6 000F lsl r16
1367 06a8 111F rol r17
1368 06aa 080F add r16,r24
1369 06ac 191F adc r17,r25
1370 06ae 080F add r16,r24
1371 06b0 191F adc r17,r25
1372 06b2 1093 0000 sts (Mittelwert_AccRoll)+1,r17
1373 06b6 0093 0000 sts Mittelwert_AccRoll,r16
1374 06ba 8091 0000 lds r24,EE_Parameter+28
1375 06be C82E mov r12,r24
1376 06c0 DD24 clr r13
1377 06c2 EE24 clr r14
1378 06c4 FF24 clr r15
1379 06c6 4427 clr r20
1380 06c8 37FD sbrc r19,7
1381 06ca 4095 com r20
1382 06cc 542F mov r21,r20
1383 06ce C701 movw r24,r14
1384 06d0 B601 movw r22,r12
1385 06d2 0E94 0000 call __mulsi3
1386 06d6 4B01 movw r8,r22
1387 06d8 5C01 movw r10,r24
1388 06da 6093 0000 sts IntegralNick,r22
1389 06de 7093 0000 sts (IntegralNick)+1,r23
1390 06e2 8093 0000 sts (IntegralNick)+2,r24
1391 06e6 9093 0000 sts (IntegralNick)+3,r25
1392 06ea 9801 movw r18,r16
1393 06ec 4427 clr r20
1394 06ee 37FD sbrc r19,7
1395 06f0 4095 com r20
1396 06f2 542F mov r21,r20
1397 06f4 C701 movw r24,r14
1398 06f6 B601 movw r22,r12
1399 06f8 0E94 0000 call __mulsi3
1400 06fc DC01 movw r26,r24
1401 06fe CB01 movw r24,r22
1402 0700 8093 0000 sts IntegralRoll,r24
1403 0704 9093 0000 sts (IntegralRoll)+1,r25
1404 0708 A093 0000 sts (IntegralRoll)+2,r26
1405 070c B093 0000 sts (IntegralRoll)+3,r27
1406 0710 8092 0000 sts Mess_IntegralNick,r8
1407 0714 9092 0000 sts (Mess_IntegralNick)+1,r9
1408 0718 A092 0000 sts (Mess_IntegralNick)+2,r10
1409 071c B092 0000 sts (Mess_IntegralNick)+3,r11
1410 0720 8093 0000 sts Mess_IntegralRoll,r24
1411 0724 9093 0000 sts (Mess_IntegralRoll)+1,r25
1412 0728 A093 0000 sts (Mess_IntegralRoll)+2,r26
1413 072c B093 0000 sts (Mess_IntegralRoll)+3,r27
1414 0730 1092 0000 sts Mess_Integral_Gier,__zero_reg__
1415 0734 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
1416 0738 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
1417 073c 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
1418 0740 8091 0000 lds r24,Luftdruck
1419 0744 9091 0000 lds r25,(Luftdruck)+1
1420 0748 A091 0000 lds r26,(Luftdruck)+2
1421 074c B091 0000 lds r27,(Luftdruck)+3
1422 0750 9093 0000 sts (StartLuftdruck)+1,r25
1423 0754 8093 0000 sts StartLuftdruck,r24
1424 0758 1092 0000 sts (VarioMeter)+1,__zero_reg__
1425 075c 1092 0000 sts VarioMeter,__zero_reg__
1426 0760 1092 0000 sts Mess_Integral_Hoch,__zero_reg__
1427 0764 1092 0000 sts (Mess_Integral_Hoch)+1,__zero_reg__
1428 0768 1092 0000 sts (Mess_Integral_Hoch)+2,__zero_reg__
1429 076c 1092 0000 sts (Mess_Integral_Hoch)+3,__zero_reg__
1430 0770 0091 0000 lds r16,KompassValue
1431 0774 1091 0000 lds r17,(KompassValue)+1
1432 0778 1093 0000 sts (KompassSollWert)+1,r17
1433 077c 0093 0000 sts KompassSollWert,r16
1434 0780 84E6 ldi r24,lo8(100)
1435 0782 90E0 ldi r25,hi8(100)
1436 0784 9093 0000 sts (KompassSignalSchlecht)+1,r25
1437 0788 8093 0000 sts KompassSignalSchlecht,r24
1438 078c 82E3 ldi r24,lo8(50)
1439 078e 90E0 ldi r25,hi8(50)
1440 0790 9093 0000 sts (beeptime)+1,r25
1441 0794 8093 0000 sts beeptime,r24
1442 0798 8091 0000 lds r24,EE_Parameter+65
1443 079c 9927 clr r25
1444 079e AA27 clr r26
1445 07a0 BB27 clr r27
1446 07a2 BC01 movw r22,r24
1447 07a4 CD01 movw r24,r26
1448 07a6 24EC ldi r18,lo8(2500)
1449 07a8 39E0 ldi r19,hi8(2500)
1450 07aa 40E0 ldi r20,hlo8(2500)
1451 07ac 50E0 ldi r21,hhi8(2500)
1452 07ae 0E94 0000 call __mulsi3
1453 07b2 DC01 movw r26,r24
1454 07b4 CB01 movw r24,r22
1455 07b6 8856 subi r24,lo8(-(15000))
1456 07b8 954C sbci r25,hi8(-(15000))
1457 07ba AF4F sbci r26,hlo8(-(15000))
1458 07bc BF4F sbci r27,hhi8(-(15000))
1459 07be 8093 0000 sts Umschlag180Nick,r24
1460 07c2 9093 0000 sts (Umschlag180Nick)+1,r25
1461 07c6 A093 0000 sts (Umschlag180Nick)+2,r26
1462 07ca B093 0000 sts (Umschlag180Nick)+3,r27
1463 07ce 8091 0000 lds r24,EE_Parameter+66
1464 07d2 9927 clr r25
1465 07d4 AA27 clr r26
1466 07d6 BB27 clr r27
1467 07d8 BC01 movw r22,r24
1468 07da CD01 movw r24,r26
1469 07dc 0E94 0000 call __mulsi3
1470 07e0 DC01 movw r26,r24
1471 07e2 CB01 movw r24,r22
1472 07e4 8856 subi r24,lo8(-(15000))
1473 07e6 954C sbci r25,hi8(-(15000))
1474 07e8 AF4F sbci r26,hlo8(-(15000))
1475 07ea BF4F sbci r27,hhi8(-(15000))
1476 07ec 8093 0000 sts Umschlag180Roll,r24
1477 07f0 9093 0000 sts (Umschlag180Roll)+1,r25
1478 07f4 A093 0000 sts (Umschlag180Roll)+2,r26
1479 07f8 B093 0000 sts (Umschlag180Roll)+3,r27
1480 07fc 1092 0000 sts (ExternHoehenValue)+1,__zero_reg__
1481 0800 1092 0000 sts ExternHoehenValue,__zero_reg__
1482 0804 C801 movw r24,r16
1483 0806 AA27 clr r26
1484 0808 97FD sbrc r25,7
1485 080a A095 com r26
1486 080c BA2F mov r27,r26
1487 080e 2091 0000 lds r18,GIER_GRAD_FAKTOR
1488 0812 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
1489 0816 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
1490 081a 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
1491 081e BC01 movw r22,r24
1492 0820 CD01 movw r24,r26
1493 0822 0E94 0000 call __mulsi3
1494 0826 DC01 movw r26,r24
1495 0828 CB01 movw r24,r22
1496 082a 8093 0000 sts ErsatzKompass,r24
1497 082e 9093 0000 sts (ErsatzKompass)+1,r25
1498 0832 A093 0000 sts (ErsatzKompass)+2,r26
1499 0836 B093 0000 sts (ErsatzKompass)+3,r27
1500 083a 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
1501 083e 1092 0000 sts GierGyroFehler,__zero_reg__
1502 0842 0E94 0000 call LED_Init
1503 0846 8091 0000 lds r24,FC_StatusFlags
1504 084a 8460 ori r24,lo8(4)
1505 084c 8093 0000 sts FC_StatusFlags,r24
1506 0850 8FEF ldi r24,lo8(-1)
1507 0852 8093 0000 sts FromNaviCtrl_Value,r24
1508 0856 1092 0000 sts FromNaviCtrl_Value+1,__zero_reg__
1509 085a 80E2 ldi r24,lo8(32)
1510 085c 8093 0000 sts FromNaviCtrl_Value+2,r24
1511 0860 C0E0 ldi r28,lo8(Poti)
1512 0862 D0E0 ldi r29,hi8(Poti)
1513 0864 A0E0 ldi r26,lo8(EE_Parameter+5)
1514 0866 B0E0 ldi r27,hi8(EE_Parameter+5)
1515 0868 07E0 ldi r16,lo8(7)
1516 .L69:
1517 086a 8D91 ld r24,X+
1518 086c E82F mov r30,r24
1519 086e FF27 clr r31
1520 0870 EE0F add r30,r30
1521 0872 FF1F adc r31,r31
1522 0874 E050 subi r30,lo8(-(PPM_in))
1523 0876 F040 sbci r31,hi8(-(PPM_in))
1524 0878 8081 ld r24,Z
1525 087a 9181 ldd r25,Z+1
1526 087c 8158 subi r24,lo8(-(127))
1527 087e 8993 st Y+,r24
1528 0880 0150 subi r16,lo8(-(-1))
1529 0882 07FF sbrs r16,7
1530 0884 00C0 rjmp .L69
1531 0886 84E6 ldi r24,lo8(100)
1532 0888 8093 0000 sts SenderOkay,r24
1533 088c 8091 0000 lds r24,ServoActive
1534 0890 8823 tst r24
1535 0892 01F0 breq .L70
1536 0894 579A sbi 42-0x20,7
1537 0896 00C0 rjmp .L71
1538 .L70:
1539 0898 80E0 ldi r24,lo8(4352)
1540 089a 91E1 ldi r25,hi8(4352)
1541 089c 9093 0000 sts (NickServoValue)+1,r25
1542 08a0 8093 0000 sts NickServoValue,r24
1543 .L71:
1544 08a4 8091 0000 lds r24,AdNeutralNick
1545 08a8 9091 0000 lds r25,(AdNeutralNick)+1
1546 08ac 8056 subi r24,lo8(-(-2400))
1547 08ae 9940 sbci r25,hi8(-(-2400))
1548 08b0 815C subi r24,lo8(11201)
1549 08b2 9B42 sbci r25,hi8(11201)
1550 08b4 00F0 brlo .L72
1551 08b6 8091 0000 lds r24,VersionInfo+5
1552 08ba 8160 ori r24,lo8(1)
1553 08bc 8093 0000 sts VersionInfo+5,r24
1554 .L72:
1555 08c0 8091 0000 lds r24,AdNeutralRoll
1556 08c4 9091 0000 lds r25,(AdNeutralRoll)+1
1557 08c8 8056 subi r24,lo8(-(-2400))
1558 08ca 9940 sbci r25,hi8(-(-2400))
1559 08cc 815C subi r24,lo8(11201)
1560 08ce 9B42 sbci r25,hi8(11201)
1561 08d0 00F0 brlo .L73
1562 08d2 8091 0000 lds r24,VersionInfo+5
1563 08d6 8260 ori r24,lo8(2)
1564 08d8 8093 0000 sts VersionInfo+5,r24
1565 .L73:
1566 08dc 8091 0000 lds r24,AdNeutralGier
1567 08e0 9091 0000 lds r25,(AdNeutralGier)+1
1568 08e4 8C52 subi r24,lo8(-(-300))
1569 08e6 9140 sbci r25,hi8(-(-300))
1570 08e8 8957 subi r24,lo8(1401)
1571 08ea 9540 sbci r25,hi8(1401)
1572 08ec 00F0 brlo .L74
1573 08ee 8091 0000 lds r24,VersionInfo+5
1574 08f2 8460 ori r24,lo8(4)
1575 08f4 8093 0000 sts VersionInfo+5,r24
1576 .L74:
1577 08f8 8091 0000 lds r24,NeutralAccX
1578 08fc 9091 0000 lds r25,(NeutralAccX)+1
1579 0900 8C52 subi r24,lo8(-(-300))
1580 0902 9140 sbci r25,hi8(-(-300))
1581 0904 835C subi r24,lo8(451)
1582 0906 9140 sbci r25,hi8(451)
1583 0908 00F0 brlo .L75
1584 090a 8091 0000 lds r24,VersionInfo+5
1585 090e 8860 ori r24,lo8(8)
1586 0910 8093 0000 sts VersionInfo+5,r24
1587 .L75:
1588 0914 8091 0000 lds r24,NeutralAccY
1589 0918 9091 0000 lds r25,(NeutralAccY)+1
1590 091c 8C52 subi r24,lo8(-(-300))
1591 091e 9140 sbci r25,hi8(-(-300))
1592 0920 835C subi r24,lo8(451)
1593 0922 9140 sbci r25,hi8(451)
1594 0924 00F0 brlo .L76
1595 0926 8091 0000 lds r24,VersionInfo+5
1596 092a 8061 ori r24,lo8(16)
1597 092c 8093 0000 sts VersionInfo+5,r24
1598 .L76:
1599 0930 8091 0000 lds r24,NeutralAccZ
1600 0934 9091 0000 lds r25,(NeutralAccZ)+1
1601 0938 8050 subi r24,lo8(-(-512))
1602 093a 9240 sbci r25,hi8(-(-512))
1603 093c 8355 subi r24,lo8(339)
1604 093e 9140 sbci r25,hi8(339)
1605 0940 00F0 brlo .L77
1606 0942 8091 0000 lds r24,VersionInfo+5
1607 0946 8062 ori r24,lo8(32)
1608 0948 8093 0000 sts VersionInfo+5,r24
1609 .L77:
1610 094c 86E4 ldi r24,lo8(70)
1611 094e 8093 0000 sts carefree_old,r24
1612 0952 0E94 0000 call LIBFC_HoTT_Clear
1613 /* epilogue: frame size=0 */
1614 0956 ECE0 ldi r30,12
1615 0958 CDB7 in r28,__SP_L__
1616 095a DEB7 in r29,__SP_H__
1617 095c 0C94 0000 jmp __epilogue_restores__+12
1618 /* epilogue end (size=5) */
1619 /* function SetNeutral size 705 (694) */
1621 .lcomm tmpl.27,4
1622 .lcomm tmpl2.28,4
1623 .lcomm tmpl3.29,4
1624 .lcomm tmpl4.30,4
1625 .lcomm oldNick.31,2
1626 .lcomm oldRoll.32,2
1627 .lcomm d2Roll.33,2
1628 .lcomm d2Nick.34,2
1629 .global Mittelwert
1631 Mittelwert:
1632 /* prologue: frame size=19 */
1633 0960 A3E1 ldi r26,lo8(19)
1634 0962 B0E0 ldi r27,hi8(19)
1635 0964 E0E0 ldi r30,pm_lo8(1f)
1636 0966 F0E0 ldi r31,pm_hi8(1f)
1637 0968 0C94 0000 jmp __prologue_saves__+0
1638 1:
1639 /* prologue end (size=6) */
1640 096c 8091 0000 lds r24,AdNeutralGier
1641 0970 9091 0000 lds r25,(AdNeutralGier)+1
1642 0974 2091 0000 lds r18,AdWertGier
1643 0978 3091 0000 lds r19,(AdWertGier)+1
1644 097c 821B sub r24,r18
1645 097e 930B sbc r25,r19
1646 0980 9093 0000 sts (MesswertGier)+1,r25
1647 0984 8093 0000 sts MesswertGier,r24
1648 0988 8091 0000 lds r24,AdWertNickFilter
1649 098c 9091 0000 lds r25,(AdWertNickFilter)+1
1650 0990 97FD sbrc r25,7
1651 0992 0796 adiw r24,7
1652 .L83:
1653 0994 9C01 movw r18,r24
1654 0996 13E0 ldi r17,3
1655 0998 3595 1: asr r19
1656 099a 2795 ror r18
1657 099c 1A95 dec r17
1658 099e 01F4 brne 1b
1659 09a0 3093 0000 sts (MesswertNick)+1,r19
1660 09a4 2093 0000 sts MesswertNick,r18
1661 09a8 8091 0000 lds r24,AdWertRollFilter
1662 09ac 9091 0000 lds r25,(AdWertRollFilter)+1
1663 09b0 97FD sbrc r25,7
1664 09b2 0796 adiw r24,7
1665 .L84:
1666 09b4 B3E0 ldi r27,3
1667 09b6 9595 1: asr r25
1668 09b8 8795 ror r24
1669 09ba BA95 dec r27
1670 09bc 01F4 brne 1b
1671 09be 9093 0000 sts (MesswertRoll)+1,r25
1672 09c2 8093 0000 sts MesswertRoll,r24
1673 09c6 3093 0000 sts (RohMesswertNick)+1,r19
1674 09ca 2093 0000 sts RohMesswertNick,r18
1675 09ce 9093 0000 sts (RohMesswertRoll)+1,r25
1676 09d2 8093 0000 sts RohMesswertRoll,r24
1677 09d6 8091 0000 lds r24,Mittelwert_AccNick
1678 09da 9091 0000 lds r25,(Mittelwert_AccNick)+1
1679 09de AC01 movw r20,r24
1680 09e0 440F lsl r20
1681 09e2 551F rol r21
1682 09e4 480F add r20,r24
1683 09e6 591F adc r21,r25
1684 09e8 2091 0000 lds r18,AdWertAccNick
1685 09ec 3091 0000 lds r19,(AdWertAccNick)+1
1686 09f0 C901 movw r24,r18
1687 09f2 880F lsl r24
1688 09f4 991F rol r25
1689 09f6 880F lsl r24
1690 09f8 991F rol r25
1691 09fa 820F add r24,r18
1692 09fc 931F adc r25,r19
1693 09fe 820F add r24,r18
1694 0a00 931F adc r25,r19
1695 0a02 480F add r20,r24
1696 0a04 591F adc r21,r25
1697 0a06 57FF sbrs r21,7
1698 0a08 00C0 rjmp .L85
1699 0a0a 4D5F subi r20,lo8(-(3))
1700 0a0c 5F4F sbci r21,hi8(-(3))
1701 .L85:
1702 0a0e 5595 asr r21
1703 0a10 4795 ror r20
1704 0a12 5595 asr r21
1705 0a14 4795 ror r20
1706 0a16 5093 0000 sts (Mittelwert_AccNick)+1,r21
1707 0a1a 4093 0000 sts Mittelwert_AccNick,r20
1708 0a1e 8091 0000 lds r24,Mittelwert_AccRoll
1709 0a22 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1710 0a26 AC01 movw r20,r24
1711 0a28 440F lsl r20
1712 0a2a 551F rol r21
1713 0a2c 480F add r20,r24
1714 0a2e 591F adc r21,r25
1715 0a30 2091 0000 lds r18,AdWertAccRoll
1716 0a34 3091 0000 lds r19,(AdWertAccRoll)+1
1717 0a38 C901 movw r24,r18
1718 0a3a 880F lsl r24
1719 0a3c 991F rol r25
1720 0a3e 880F lsl r24
1721 0a40 991F rol r25
1722 0a42 820F add r24,r18
1723 0a44 931F adc r25,r19
1724 0a46 820F add r24,r18
1725 0a48 931F adc r25,r19
1726 0a4a 480F add r20,r24
1727 0a4c 591F adc r21,r25
1728 0a4e 57FF sbrs r21,7
1729 0a50 00C0 rjmp .L86
1730 0a52 4D5F subi r20,lo8(-(3))
1731 0a54 5F4F sbci r21,hi8(-(3))
1732 .L86:
1733 0a56 5595 asr r21
1734 0a58 4795 ror r20
1735 0a5a 5595 asr r21
1736 0a5c 4795 ror r20
1737 0a5e 5093 0000 sts (Mittelwert_AccRoll)+1,r21
1738 0a62 4093 0000 sts Mittelwert_AccRoll,r20
1739 0a66 2091 0000 lds r18,AdWertAccNick
1740 0a6a 3091 0000 lds r19,(AdWertAccNick)+1
1741 0a6e C901 movw r24,r18
1742 0a70 880F lsl r24
1743 0a72 991F rol r25
1744 0a74 880F lsl r24
1745 0a76 991F rol r25
1746 0a78 820F add r24,r18
1747 0a7a 931F adc r25,r19
1748 0a7c 820F add r24,r18
1749 0a7e 931F adc r25,r19
1750 0a80 9C01 movw r18,r24
1751 0a82 4427 clr r20
1752 0a84 37FD sbrc r19,7
1753 0a86 4095 com r20
1754 0a88 542F mov r21,r20
1755 0a8a 8091 0000 lds r24,IntegralAccNick
1756 0a8e 9091 0000 lds r25,(IntegralAccNick)+1
1757 0a92 A091 0000 lds r26,(IntegralAccNick)+2
1758 0a96 B091 0000 lds r27,(IntegralAccNick)+3
1759 0a9a 820F add r24,r18
1760 0a9c 931F adc r25,r19
1761 0a9e A41F adc r26,r20
1762 0aa0 B51F adc r27,r21
1763 0aa2 8093 0000 sts IntegralAccNick,r24
1764 0aa6 9093 0000 sts (IntegralAccNick)+1,r25
1765 0aaa A093 0000 sts (IntegralAccNick)+2,r26
1766 0aae B093 0000 sts (IntegralAccNick)+3,r27
1767 0ab2 2091 0000 lds r18,AdWertAccRoll
1768 0ab6 3091 0000 lds r19,(AdWertAccRoll)+1
1769 0aba C901 movw r24,r18
1770 0abc 880F lsl r24
1771 0abe 991F rol r25
1772 0ac0 880F lsl r24
1773 0ac2 991F rol r25
1774 0ac4 820F add r24,r18
1775 0ac6 931F adc r25,r19
1776 0ac8 820F add r24,r18
1777 0aca 931F adc r25,r19
1778 0acc 9C01 movw r18,r24
1779 0ace 4427 clr r20
1780 0ad0 37FD sbrc r19,7
1781 0ad2 4095 com r20
1782 0ad4 542F mov r21,r20
1783 0ad6 8091 0000 lds r24,IntegralAccRoll
1784 0ada 9091 0000 lds r25,(IntegralAccRoll)+1
1785 0ade A091 0000 lds r26,(IntegralAccRoll)+2
1786 0ae2 B091 0000 lds r27,(IntegralAccRoll)+3
1787 0ae6 820F add r24,r18
1788 0ae8 931F adc r25,r19
1789 0aea A41F adc r26,r20
1790 0aec B51F adc r27,r21
1791 0aee 8093 0000 sts IntegralAccRoll,r24
1792 0af2 9093 0000 sts (IntegralAccRoll)+1,r25
1793 0af6 A093 0000 sts (IntegralAccRoll)+2,r26
1794 0afa B093 0000 sts (IntegralAccRoll)+3,r27
1795 0afe 8091 0000 lds r24,NaviAccNick
1796 0b02 9091 0000 lds r25,(NaviAccNick)+1
1797 0b06 2091 0000 lds r18,AdWertAccNick
1798 0b0a 3091 0000 lds r19,(AdWertAccNick)+1
1799 0b0e 820F add r24,r18
1800 0b10 931F adc r25,r19
1801 0b12 9093 0000 sts (NaviAccNick)+1,r25
1802 0b16 8093 0000 sts NaviAccNick,r24
1803 0b1a 8091 0000 lds r24,NaviAccRoll
1804 0b1e 9091 0000 lds r25,(NaviAccRoll)+1
1805 0b22 2091 0000 lds r18,AdWertAccRoll
1806 0b26 3091 0000 lds r19,(AdWertAccRoll)+1
1807 0b2a 820F add r24,r18
1808 0b2c 931F adc r25,r19
1809 0b2e 9093 0000 sts (NaviAccRoll)+1,r25
1810 0b32 8093 0000 sts NaviAccRoll,r24
1811 0b36 8091 0000 lds r24,NaviCntAcc
1812 0b3a 9091 0000 lds r25,(NaviCntAcc)+1
1813 0b3e 0196 adiw r24,1
1814 0b40 9093 0000 sts (NaviCntAcc)+1,r25
1815 0b44 8093 0000 sts NaviCntAcc,r24
1816 0b48 8091 0000 lds r24,Aktuell_az
1817 0b4c 9091 0000 lds r25,(Aktuell_az)+1
1818 0b50 2091 0000 lds r18,NeutralAccZ
1819 0b54 3091 0000 lds r19,(NeutralAccZ)+1
1820 0b58 821B sub r24,r18
1821 0b5a 930B sbc r25,r19
1822 0b5c 9C01 movw r18,r24
1823 0b5e 4427 clr r20
1824 0b60 37FD sbrc r19,7
1825 0b62 4095 com r20
1826 0b64 542F mov r21,r20
1827 0b66 8091 0000 lds r24,IntegralAccZ
1828 0b6a 9091 0000 lds r25,(IntegralAccZ)+1
1829 0b6e A091 0000 lds r26,(IntegralAccZ)+2
1830 0b72 B091 0000 lds r27,(IntegralAccZ)+3
1831 0b76 820F add r24,r18
1832 0b78 931F adc r25,r19
1833 0b7a A41F adc r26,r20
1834 0b7c B51F adc r27,r21
1835 0b7e 8093 0000 sts IntegralAccZ,r24
1836 0b82 9093 0000 sts (IntegralAccZ)+1,r25
1837 0b86 A093 0000 sts (IntegralAccZ)+2,r26
1838 0b8a B093 0000 sts (IntegralAccZ)+3,r27
1839 0b8e 8FEC ldi r24,lo8(-49)
1840 0b90 8093 7A00 sts 122,r24
1841 0b94 1092 0000 sts AdReady,__zero_reg__
1842 0b98 2091 0000 lds r18,Mess_IntegralRoll
1843 0b9c 3091 0000 lds r19,(Mess_IntegralRoll)+1
1844 0ba0 4091 0000 lds r20,(Mess_IntegralRoll)+2
1845 0ba4 5091 0000 lds r21,(Mess_IntegralRoll)+3
1846 0ba8 2987 std Y+9,r18
1847 0baa 3A87 std Y+10,r19
1848 0bac 4B87 std Y+11,r20
1849 0bae 5C87 std Y+12,r21
1850 0bb0 2954 subi r18,lo8(93001)
1851 0bb2 3B46 sbci r19,hi8(93001)
1852 0bb4 4140 sbci r20,hlo8(93001)
1853 0bb6 5040 sbci r21,hhi8(93001)
1854 0bb8 04F0 brlt .L87
1855 0bba 28E4 ldi r18,lo8(93000)
1856 0bbc 3BE6 ldi r19,hi8(93000)
1857 0bbe 41E0 ldi r20,hlo8(93000)
1858 0bc0 50E0 ldi r21,hhi8(93000)
1859 0bc2 00C0 rjmp .L167
1860 .L87:
1861 0bc4 8985 ldd r24,Y+9
1862 0bc6 9A85 ldd r25,Y+10
1863 0bc8 AB85 ldd r26,Y+11
1864 0bca BC85 ldd r27,Y+12
1865 0bcc 885B subi r24,lo8(-93000)
1866 0bce 9449 sbci r25,hi8(-93000)
1867 0bd0 AE4F sbci r26,hlo8(-93000)
1868 0bd2 BF4F sbci r27,hhi8(-93000)
1869 0bd4 04F4 brge .L89
1870 0bd6 28EB ldi r18,lo8(-93000)
1871 0bd8 34E9 ldi r19,hi8(-93000)
1872 0bda 4EEF ldi r20,hlo8(-93000)
1873 0bdc 5FEF ldi r21,hhi8(-93000)
1874 .L167:
1875 0bde 2D83 std Y+5,r18
1876 0be0 3E83 std Y+6,r19
1877 0be2 4F83 std Y+7,r20
1878 0be4 5887 std Y+8,r21
1879 0be6 00C0 rjmp .L88
1880 .L89:
1881 0be8 8985 ldd r24,Y+9
1882 0bea 9A85 ldd r25,Y+10
1883 0bec AB85 ldd r26,Y+11
1884 0bee BC85 ldd r27,Y+12
1885 0bf0 8D83 std Y+5,r24
1886 0bf2 9E83 std Y+6,r25
1887 0bf4 AF83 std Y+7,r26
1888 0bf6 B887 std Y+8,r27
1889 .L88:
1890 0bf8 2091 0000 lds r18,Mess_IntegralNick
1891 0bfc 3091 0000 lds r19,(Mess_IntegralNick)+1
1892 0c00 4091 0000 lds r20,(Mess_IntegralNick)+2
1893 0c04 5091 0000 lds r21,(Mess_IntegralNick)+3
1894 0c08 2D87 std Y+13,r18
1895 0c0a 3E87 std Y+14,r19
1896 0c0c 4F87 std Y+15,r20
1897 0c0e 588B std Y+16,r21
1898 0c10 2954 subi r18,lo8(93001)
1899 0c12 3B46 sbci r19,hi8(93001)
1900 0c14 4140 sbci r20,hlo8(93001)
1901 0c16 5040 sbci r21,hhi8(93001)
1902 0c18 04F0 brlt .L91
1903 0c1a 28E4 ldi r18,lo8(93000)
1904 0c1c 3BE6 ldi r19,hi8(93000)
1905 0c1e 41E0 ldi r20,hlo8(93000)
1906 0c20 50E0 ldi r21,hhi8(93000)
1907 0c22 00C0 rjmp .L168
1908 .L91:
1909 0c24 8D85 ldd r24,Y+13
1910 0c26 9E85 ldd r25,Y+14
1911 0c28 AF85 ldd r26,Y+15
1912 0c2a B889 ldd r27,Y+16
1913 0c2c 885B subi r24,lo8(-93000)
1914 0c2e 9449 sbci r25,hi8(-93000)
1915 0c30 AE4F sbci r26,hlo8(-93000)
1916 0c32 BF4F sbci r27,hhi8(-93000)
1917 0c34 04F4 brge .L93
1918 0c36 28EB ldi r18,lo8(-93000)
1919 0c38 34E9 ldi r19,hi8(-93000)
1920 0c3a 4EEF ldi r20,hlo8(-93000)
1921 0c3c 5FEF ldi r21,hhi8(-93000)
1922 .L168:
1923 0c3e 2983 std Y+1,r18
1924 0c40 3A83 std Y+2,r19
1925 0c42 4B83 std Y+3,r20
1926 0c44 5C83 std Y+4,r21
1927 0c46 00C0 rjmp .L92
1928 .L93:
1929 0c48 8D85 ldd r24,Y+13
1930 0c4a 9E85 ldd r25,Y+14
1931 0c4c AF85 ldd r26,Y+15
1932 0c4e B889 ldd r27,Y+16
1933 0c50 8983 std Y+1,r24
1934 0c52 9A83 std Y+2,r25
1935 0c54 AB83 std Y+3,r26
1936 0c56 BC83 std Y+4,r27
1937 .L92:
1938 0c58 A091 0000 lds r26,MesswertGier
1939 0c5c B091 0000 lds r27,(MesswertGier)+1
1940 0c60 BB8B std Y+19,r27
1941 0c62 AA8B std Y+18,r26
1942 0c64 FD01 movw r30,r26
1943 0c66 CF01 movw r24,r30
1944 0c68 AA27 clr r26
1945 0c6a 97FD sbrc r25,7
1946 0c6c A095 com r26
1947 0c6e BA2F mov r27,r26
1948 0c70 A090 0000 lds r10,Mess_Integral_Gier
1949 0c74 B090 0000 lds r11,(Mess_Integral_Gier)+1
1950 0c78 C090 0000 lds r12,(Mess_Integral_Gier)+2
1951 0c7c D090 0000 lds r13,(Mess_Integral_Gier)+3
1952 0c80 A80E add r10,r24
1953 0c82 B91E adc r11,r25
1954 0c84 CA1E adc r12,r26
1955 0c86 DB1E adc r13,r27
1956 0c88 A092 0000 sts Mess_Integral_Gier,r10
1957 0c8c B092 0000 sts (Mess_Integral_Gier)+1,r11
1958 0c90 C092 0000 sts (Mess_Integral_Gier)+2,r12
1959 0c94 D092 0000 sts (Mess_Integral_Gier)+3,r13
1960 0c98 E090 0000 lds r14,ErsatzKompass
1961 0c9c F090 0000 lds r15,(ErsatzKompass)+1
1962 0ca0 0091 0000 lds r16,(ErsatzKompass)+2
1963 0ca4 1091 0000 lds r17,(ErsatzKompass)+3
1964 0ca8 E80E add r14,r24
1965 0caa F91E adc r15,r25
1966 0cac 0A1F adc r16,r26
1967 0cae 1B1F adc r17,r27
1968 0cb0 E092 0000 sts ErsatzKompass,r14
1969 0cb4 F092 0000 sts (ErsatzKompass)+1,r15
1970 0cb8 0093 0000 sts (ErsatzKompass)+2,r16
1971 0cbc 1093 0000 sts (ErsatzKompass)+3,r17
1972 0cc0 F091 0000 lds r31,Looping_Nick
1973 0cc4 F98B std Y+17,r31
1974 0cc6 FF23 tst r31
1975 0cc8 01F0 breq .+2
1976 0cca 00C0 rjmp .L95
1977 0ccc 8091 0000 lds r24,Looping_Roll
1978 0cd0 8823 tst r24
1979 0cd2 01F0 breq .+2
1980 0cd4 00C0 rjmp .L95
1981 0cd6 8091 0000 lds r24,Parameter_GlobalConfig
1982 0cda 86FF sbrs r24,6
1983 0cdc 00C0 rjmp .L95
1984 0cde 8091 0000 lds r24,MesswertRoll
1985 0ce2 9091 0000 lds r25,(MesswertRoll)+1
1986 0ce6 AA27 clr r26
1987 0ce8 97FD sbrc r25,7
1988 0cea A095 com r26
1989 0cec BA2F mov r27,r26
1990 0cee BC01 movw r22,r24
1991 0cf0 CD01 movw r24,r26
1992 0cf2 2981 ldd r18,Y+1
1993 0cf4 3A81 ldd r19,Y+2
1994 0cf6 4B81 ldd r20,Y+3
1995 0cf8 5C81 ldd r21,Y+4
1996 0cfa 0E94 0000 call __mulsi3
1997 0cfe 9B01 movw r18,r22
1998 0d00 AC01 movw r20,r24
1999 0d02 97FF sbrs r25,7
2000 0d04 00C0 rjmp .L96
2001 0d06 2150 subi r18,lo8(-(2047))
2002 0d08 384F sbci r19,hi8(-(2047))
2003 0d0a 4F4F sbci r20,hlo8(-(2047))
2004 0d0c 5F4F sbci r21,hhi8(-(2047))
2005 .L96:
2006 0d0e BBE0 ldi r27,11
2007 0d10 5595 1: asr r21
2008 0d12 4795 ror r20
2009 0d14 3795 ror r19
2010 0d16 2795 ror r18
2011 0d18 BA95 dec r27
2012 0d1a 01F4 brne 1b
2013 0d1c 8091 0000 lds r24,Parameter_AchsKopplung2
2014 0d20 682E mov r6,r24
2015 0d22 7724 clr r7
2016 0d24 8824 clr r8
2017 0d26 9924 clr r9
2018 0d28 CA01 movw r24,r20
2019 0d2a B901 movw r22,r18
2020 0d2c A401 movw r20,r8
2021 0d2e 9301 movw r18,r6
2022 0d30 0E94 0000 call __mulsi3
2023 0d34 DC01 movw r26,r24
2024 0d36 CB01 movw r24,r22
2025 0d38 8093 0000 sts tmpl3.29,r24
2026 0d3c 9093 0000 sts (tmpl3.29)+1,r25
2027 0d40 A093 0000 sts (tmpl3.29)+2,r26
2028 0d44 B093 0000 sts (tmpl3.29)+3,r27
2029 0d48 B7FF sbrs r27,7
2030 0d4a 00C0 rjmp .L97
2031 0d4c 8150 subi r24,lo8(-(4095))
2032 0d4e 904F sbci r25,hi8(-(4095))
2033 0d50 AF4F sbci r26,hlo8(-(4095))
2034 0d52 BF4F sbci r27,hhi8(-(4095))
2035 .L97:
2036 0d54 1C01 movw r2,r24
2037 0d56 2D01 movw r4,r26
2038 0d58 ACE0 ldi r26,12
2039 0d5a 5594 1: asr r5
2040 0d5c 4794 ror r4
2041 0d5e 3794 ror r3
2042 0d60 2794 ror r2
2043 0d62 AA95 dec r26
2044 0d64 01F4 brne 1b
2045 0d66 2092 0000 sts tmpl3.29,r2
2046 0d6a 3092 0000 sts (tmpl3.29)+1,r3
2047 0d6e 4092 0000 sts (tmpl3.29)+2,r4
2048 0d72 5092 0000 sts (tmpl3.29)+3,r5
2049 0d76 8091 0000 lds r24,MesswertNick
2050 0d7a 9091 0000 lds r25,(MesswertNick)+1
2051 0d7e AA27 clr r26
2052 0d80 97FD sbrc r25,7
2053 0d82 A095 com r26
2054 0d84 BA2F mov r27,r26
2055 0d86 BC01 movw r22,r24
2056 0d88 CD01 movw r24,r26
2057 0d8a 2D81 ldd r18,Y+5
2058 0d8c 3E81 ldd r19,Y+6
2059 0d8e 4F81 ldd r20,Y+7
2060 0d90 5885 ldd r21,Y+8
2061 0d92 0E94 0000 call __mulsi3
2062 0d96 97FF sbrs r25,7
2063 0d98 00C0 rjmp .L98
2064 0d9a 6150 subi r22,lo8(-(2047))
2065 0d9c 784F sbci r23,hi8(-(2047))
2066 0d9e 8F4F sbci r24,hlo8(-(2047))
2067 0da0 9F4F sbci r25,hhi8(-(2047))
2068 .L98:
2069 0da2 FBE0 ldi r31,11
2070 0da4 9595 1: asr r25
2071 0da6 8795 ror r24
2072 0da8 7795 ror r23
2073 0daa 6795 ror r22
2074 0dac FA95 dec r31
2075 0dae 01F4 brne 1b
2076 0db0 A401 movw r20,r8
2077 0db2 9301 movw r18,r6
2078 0db4 0E94 0000 call __mulsi3
2079 0db8 DC01 movw r26,r24
2080 0dba CB01 movw r24,r22
2081 0dbc 8093 0000 sts tmpl4.30,r24
2082 0dc0 9093 0000 sts (tmpl4.30)+1,r25
2083 0dc4 A093 0000 sts (tmpl4.30)+2,r26
2084 0dc8 B093 0000 sts (tmpl4.30)+3,r27
2085 0dcc B7FF sbrs r27,7
2086 0dce 00C0 rjmp .L99
2087 0dd0 8150 subi r24,lo8(-(4095))
2088 0dd2 904F sbci r25,hi8(-(4095))
2089 0dd4 AF4F sbci r26,hlo8(-(4095))
2090 0dd6 BF4F sbci r27,hhi8(-(4095))
2091 .L99:
2092 0dd8 9C01 movw r18,r24
2093 0dda AD01 movw r20,r26
2094 0ddc ECE0 ldi r30,12
2095 0dde 5595 1: asr r21
2096 0de0 4795 ror r20
2097 0de2 3795 ror r19
2098 0de4 2795 ror r18
2099 0de6 EA95 dec r30
2100 0de8 01F4 brne 1b
2101 0dea 2093 0000 sts tmpl4.30,r18
2102 0dee 3093 0000 sts (tmpl4.30)+1,r19
2103 0df2 4093 0000 sts (tmpl4.30)+2,r20
2104 0df6 5093 0000 sts (tmpl4.30)+3,r21
2105 0dfa 8091 0000 lds r24,tmpl3.29
2106 0dfe 9091 0000 lds r25,(tmpl3.29)+1
2107 0e02 9093 0000 sts (KopplungsteilNickRoll)+1,r25
2108 0e06 8093 0000 sts KopplungsteilNickRoll,r24
2109 0e0a 8091 0000 lds r24,tmpl4.30
2110 0e0e 9091 0000 lds r25,(tmpl4.30)+1
2111 0e12 9093 0000 sts (KopplungsteilRollNick)+1,r25
2112 0e16 8093 0000 sts KopplungsteilRollNick,r24
2113 0e1a 2219 sub r18,r2
2114 0e1c 3309 sbc r19,r3
2115 0e1e 4409 sbc r20,r4
2116 0e20 5509 sbc r21,r5
2117 0e22 2093 0000 sts tmpl4.30,r18
2118 0e26 3093 0000 sts (tmpl4.30)+1,r19
2119 0e2a 4093 0000 sts (tmpl4.30)+2,r20
2120 0e2e 5093 0000 sts (tmpl4.30)+3,r21
2121 0e32 E20E add r14,r18
2122 0e34 F31E adc r15,r19
2123 0e36 041F adc r16,r20
2124 0e38 151F adc r17,r21
2125 0e3a E092 0000 sts ErsatzKompass,r14
2126 0e3e F092 0000 sts (ErsatzKompass)+1,r15
2127 0e42 0093 0000 sts (ErsatzKompass)+2,r16
2128 0e46 1093 0000 sts (ErsatzKompass)+3,r17
2129 0e4a 8091 0000 lds r24,Parameter_CouplingYawCorrection
2130 0e4e 8823 tst r24
2131 0e50 01F4 brne .L100
2132 0e52 57FF sbrs r21,7
2133 0e54 00C0 rjmp .L101
2134 0e56 2F5F subi r18,lo8(-(1))
2135 0e58 3F4F sbci r19,hi8(-(1))
2136 0e5a 4F4F sbci r20,hlo8(-(1))
2137 0e5c 5F4F sbci r21,hhi8(-(1))
2138 .L101:
2139 0e5e 5595 asr r21
2140 0e60 4795 ror r20
2141 0e62 3795 ror r19
2142 0e64 2795 ror r18
2143 0e66 A21A sub r10,r18
2144 0e68 B30A sbc r11,r19
2145 0e6a C40A sbc r12,r20
2146 0e6c D50A sbc r13,r21
2147 0e6e A092 0000 sts Mess_Integral_Gier,r10
2148 0e72 B092 0000 sts (Mess_Integral_Gier)+1,r11
2149 0e76 C092 0000 sts (Mess_Integral_Gier)+2,r12
2150 0e7a D092 0000 sts (Mess_Integral_Gier)+3,r13
2151 .L100:
2152 0e7e 2A89 ldd r18,Y+18
2153 0e80 3B89 ldd r19,Y+19
2154 0e82 7901 movw r14,r18
2155 0e84 0027 clr r16
2156 0e86 F7FC sbrc r15,7
2157 0e88 0095 com r16
2158 0e8a 102F mov r17,r16
2159 0e8c 8091 0000 lds r24,tmpl4.30
2160 0e90 9091 0000 lds r25,(tmpl4.30)+1
2161 0e94 A091 0000 lds r26,(tmpl4.30)+2
2162 0e98 B091 0000 lds r27,(tmpl4.30)+3
2163 0e9c E80E add r14,r24
2164 0e9e F91E adc r15,r25
2165 0ea0 0A1F adc r16,r26
2166 0ea2 1B1F adc r17,r27
2167 0ea4 C801 movw r24,r16
2168 0ea6 B701 movw r22,r14
2169 0ea8 2981 ldd r18,Y+1
2170 0eaa 3A81 ldd r19,Y+2
2171 0eac 4B81 ldd r20,Y+3
2172 0eae 5C81 ldd r21,Y+4
2173 0eb0 0E94 0000 call __mulsi3
2174 0eb4 9B01 movw r18,r22
2175 0eb6 AC01 movw r20,r24
2176 0eb8 97FF sbrs r25,7
2177 0eba 00C0 rjmp .L102
2178 0ebc 2150 subi r18,lo8(-(2047))
2179 0ebe 384F sbci r19,hi8(-(2047))
2180 0ec0 4F4F sbci r20,hlo8(-(2047))
2181 0ec2 5F4F sbci r21,hhi8(-(2047))
2182 .L102:
2183 0ec4 6BE0 ldi r22,11
2184 0ec6 5595 1: asr r21
2185 0ec8 4795 ror r20
2186 0eca 3795 ror r19
2187 0ecc 2795 ror r18
2188 0ece 6A95 dec r22
2189 0ed0 01F4 brne 1b
2190 0ed2 8091 0000 lds r24,Parameter_AchsKopplung1
2191 0ed6 A82E mov r10,r24
2192 0ed8 BB24 clr r11
2193 0eda CC24 clr r12
2194 0edc DD24 clr r13
2195 0ede CA01 movw r24,r20
2196 0ee0 B901 movw r22,r18
2197 0ee2 A601 movw r20,r12
2198 0ee4 9501 movw r18,r10
2199 0ee6 0E94 0000 call __mulsi3
2200 0eea DC01 movw r26,r24
2201 0eec CB01 movw r24,r22
2202 0eee 8093 0000 sts tmpl.27,r24
2203 0ef2 9093 0000 sts (tmpl.27)+1,r25
2204 0ef6 A093 0000 sts (tmpl.27)+2,r26
2205 0efa B093 0000 sts (tmpl.27)+3,r27
2206 0efe B7FF sbrs r27,7
2207 0f00 00C0 rjmp .L103
2208 0f02 8150 subi r24,lo8(-(4095))
2209 0f04 904F sbci r25,hi8(-(4095))
2210 0f06 AF4F sbci r26,hlo8(-(4095))
2211 0f08 BF4F sbci r27,hhi8(-(4095))
2212 .L103:
2213 0f0a 3C01 movw r6,r24
2214 0f0c 4D01 movw r8,r26
2215 0f0e 3CE0 ldi r19,12
2216 0f10 9594 1: asr r9
2217 0f12 8794 ror r8
2218 0f14 7794 ror r7
2219 0f16 6794 ror r6
2220 0f18 3A95 dec r19
2221 0f1a 01F4 brne 1b
2222 0f1c 6092 0000 sts tmpl.27,r6
2223 0f20 7092 0000 sts (tmpl.27)+1,r7
2224 0f24 8092 0000 sts (tmpl.27)+2,r8
2225 0f28 9092 0000 sts (tmpl.27)+3,r9
2226 0f2c C801 movw r24,r16
2227 0f2e B701 movw r22,r14
2228 0f30 2D81 ldd r18,Y+5
2229 0f32 3E81 ldd r19,Y+6
2230 0f34 4F81 ldd r20,Y+7
2231 0f36 5885 ldd r21,Y+8
2232 0f38 0E94 0000 call __mulsi3
2233 0f3c 97FF sbrs r25,7
2234 0f3e 00C0 rjmp .L104
2235 0f40 6150 subi r22,lo8(-(2047))
2236 0f42 784F sbci r23,hi8(-(2047))
2237 0f44 8F4F sbci r24,hlo8(-(2047))
2238 0f46 9F4F sbci r25,hhi8(-(2047))
2239 .L104:
2240 0f48 2BE0 ldi r18,11
2241 0f4a 9595 1: asr r25
2242 0f4c 8795 ror r24
2243 0f4e 7795 ror r23
2244 0f50 6795 ror r22
2245 0f52 2A95 dec r18
2246 0f54 01F4 brne 1b
2247 0f56 A601 movw r20,r12
2248 0f58 9501 movw r18,r10
2249 0f5a 0E94 0000 call __mulsi3
2250 0f5e DC01 movw r26,r24
2251 0f60 CB01 movw r24,r22
2252 0f62 8093 0000 sts tmpl2.28,r24
2253 0f66 9093 0000 sts (tmpl2.28)+1,r25
2254 0f6a A093 0000 sts (tmpl2.28)+2,r26
2255 0f6e B093 0000 sts (tmpl2.28)+3,r27
2256 0f72 B7FF sbrs r27,7
2257 0f74 00C0 rjmp .L105
2258 0f76 8150 subi r24,lo8(-(4095))
2259 0f78 904F sbci r25,hi8(-(4095))
2260 0f7a AF4F sbci r26,hlo8(-(4095))
2261 0f7c BF4F sbci r27,hhi8(-(4095))
2262 .L105:
2263 0f7e AC01 movw r20,r24
2264 0f80 BD01 movw r22,r26
2265 0f82 8CE0 ldi r24,12
2266 0f84 7595 1: asr r23
2267 0f86 6795 ror r22
2268 0f88 5795 ror r21
2269 0f8a 4795 ror r20
2270 0f8c 8A95 dec r24
2271 0f8e 01F4 brne 1b
2272 0f90 4093 0000 sts tmpl2.28,r20
2273 0f94 5093 0000 sts (tmpl2.28)+1,r21
2274 0f98 6093 0000 sts (tmpl2.28)+2,r22
2275 0f9c 7093 0000 sts (tmpl2.28)+3,r23
2276 0fa0 2A89 ldd r18,Y+18
2277 0fa2 3B89 ldd r19,Y+19
2278 0fa4 37FF sbrs r19,7
2279 0fa6 00C0 rjmp .L107
2280 0fa8 3095 com r19
2281 0faa 2195 neg r18
2282 0fac 3F4F sbci r19,lo8(-1)
2283 .L107:
2284 0fae 2134 cpi r18,65
2285 0fb0 3105 cpc r19,__zero_reg__
2286 0fb2 04F0 brlt .L112
2287 0fb4 D401 movw r26,r8
2288 0fb6 C301 movw r24,r6
2289 0fb8 97FE sbrs r9,7
2290 0fba 00C0 rjmp .L110
2291 0fbc B095 com r27
2292 0fbe A095 com r26
2293 0fc0 9095 com r25
2294 0fc2 8195 neg r24
2295 0fc4 9F4F sbci r25,lo8(-1)
2296 0fc6 AF4F sbci r26,lo8(-1)
2297 0fc8 BF4F sbci r27,lo8(-1)
2298 .L110:
2299 0fca 8138 cpi r24,lo8(129)
2300 0fcc 9105 cpc r25,__zero_reg__
2301 0fce A105 cpc r26,__zero_reg__
2302 0fd0 B105 cpc r27,__zero_reg__
2303 0fd2 04F4 brge .L109
2304 0fd4 DB01 movw r26,r22
2305 0fd6 CA01 movw r24,r20
2306 0fd8 77FF sbrs r23,7
2307 0fda 00C0 rjmp .L111
2308 0fdc B095 com r27
2309 0fde A095 com r26
2310 0fe0 9095 com r25
2311 0fe2 8195 neg r24
2312 0fe4 9F4F sbci r25,lo8(-1)
2313 0fe6 AF4F sbci r26,lo8(-1)
2314 0fe8 BF4F sbci r27,lo8(-1)
2315 .L111:
2316 0fea 8138 cpi r24,lo8(129)
2317 0fec 9105 cpc r25,__zero_reg__
2318 0fee A105 cpc r26,__zero_reg__
2319 0ff0 B105 cpc r27,__zero_reg__
2320 0ff2 04F0 brlt .L112
2321 .L109:
2322 0ff4 81E0 ldi r24,lo8(1)
2323 0ff6 8093 0000 sts TrichterFlug,r24
2324 0ffa 00C0 rjmp .L112
2325 .L95:
2326 0ffc 1092 0000 sts (KopplungsteilRollNick)+1,__zero_reg__
2327 1000 1092 0000 sts KopplungsteilRollNick,__zero_reg__
2328 1004 1092 0000 sts (KopplungsteilNickRoll)+1,__zero_reg__
2329 1008 1092 0000 sts KopplungsteilNickRoll,__zero_reg__
2330 100c 1092 0000 sts tmpl2.28,__zero_reg__
2331 1010 1092 0000 sts (tmpl2.28)+1,__zero_reg__
2332 1014 1092 0000 sts (tmpl2.28)+2,__zero_reg__
2333 1018 1092 0000 sts (tmpl2.28)+3,__zero_reg__
2334 101c 1092 0000 sts tmpl.27,__zero_reg__
2335 1020 1092 0000 sts (tmpl.27)+1,__zero_reg__
2336 1024 1092 0000 sts (tmpl.27)+2,__zero_reg__
2337 1028 1092 0000 sts (tmpl.27)+3,__zero_reg__
2338 .L112:
2339 102c 8091 0000 lds r24,tmpl2.28
2340 1030 9091 0000 lds r25,(tmpl2.28)+1
2341 1034 A091 0000 lds r26,(tmpl2.28)+2
2342 1038 B091 0000 lds r27,(tmpl2.28)+3
2343 103c BC01 movw r22,r24
2344 103e CD01 movw r24,r26
2345 1040 24E6 ldi r18,lo8(100)
2346 1042 30E0 ldi r19,hi8(100)
2347 1044 40E0 ldi r20,hlo8(100)
2348 1046 50E0 ldi r21,hhi8(100)
2349 1048 0E94 0000 call __divmodsi4
2350 104c E090 0000 lds r14,tmpl.27
2351 1050 F090 0000 lds r15,(tmpl.27)+1
2352 1054 E21A sub r14,r18
2353 1056 F30A sbc r15,r19
2354 1058 F092 0000 sts (TrimRoll)+1,r15
2355 105c E092 0000 sts TrimRoll,r14
2356 1060 8091 0000 lds r24,tmpl.27
2357 1064 9091 0000 lds r25,(tmpl.27)+1
2358 1068 A091 0000 lds r26,(tmpl.27)+2
2359 106c B091 0000 lds r27,(tmpl.27)+3
2360 1070 BC01 movw r22,r24
2361 1072 CD01 movw r24,r26
2362 1074 24E6 ldi r18,lo8(100)
2363 1076 30E0 ldi r19,hi8(100)
2364 1078 40E0 ldi r20,hlo8(100)
2365 107a 50E0 ldi r21,hhi8(100)
2366 107c 0E94 0000 call __divmodsi4
2367 1080 DA01 movw r26,r20
2368 1082 C901 movw r24,r18
2369 1084 2091 0000 lds r18,tmpl2.28
2370 1088 3091 0000 lds r19,(tmpl2.28)+1
2371 108c 8C01 movw r16,r24
2372 108e 021B sub r16,r18
2373 1090 130B sbc r17,r19
2374 1092 1093 0000 sts (TrimNick)+1,r17
2375 1096 0093 0000 sts TrimNick,r16
2376 109a 8091 0000 lds r24,GIER_GRAD_FAKTOR
2377 109e 9091 0000 lds r25,(GIER_GRAD_FAKTOR)+1
2378 10a2 A091 0000 lds r26,(GIER_GRAD_FAKTOR)+2
2379 10a6 B091 0000 lds r27,(GIER_GRAD_FAKTOR)+3
2380 10aa BC01 movw r22,r24
2381 10ac CD01 movw r24,r26
2382 10ae 28E6 ldi r18,lo8(360)
2383 10b0 31E0 ldi r19,hi8(360)
2384 10b2 40E0 ldi r20,hlo8(360)
2385 10b4 50E0 ldi r21,hhi8(360)
2386 10b6 0E94 0000 call __mulsi3
2387 10ba 2091 0000 lds r18,ErsatzKompass
2388 10be 3091 0000 lds r19,(ErsatzKompass)+1
2389 10c2 4091 0000 lds r20,(ErsatzKompass)+2
2390 10c6 5091 0000 lds r21,(ErsatzKompass)+3
2391 10ca 2617 cp r18,r22
2392 10cc 3707 cpc r19,r23
2393 10ce 4807 cpc r20,r24
2394 10d0 5907 cpc r21,r25
2395 10d2 04F0 brlt .L113
2396 10d4 261B sub r18,r22
2397 10d6 370B sbc r19,r23
2398 10d8 480B sbc r20,r24
2399 10da 590B sbc r21,r25
2400 10dc 2093 0000 sts ErsatzKompass,r18
2401 10e0 3093 0000 sts (ErsatzKompass)+1,r19
2402 10e4 4093 0000 sts (ErsatzKompass)+2,r20
2403 10e8 5093 0000 sts (ErsatzKompass)+3,r21
2404 .L113:
2405 10ec 2091 0000 lds r18,ErsatzKompass
2406 10f0 3091 0000 lds r19,(ErsatzKompass)+1
2407 10f4 4091 0000 lds r20,(ErsatzKompass)+2
2408 10f8 5091 0000 lds r21,(ErsatzKompass)+3
2409 10fc 57FF sbrs r21,7
2410 10fe 00C0 rjmp .L114
2411 1100 260F add r18,r22
2412 1102 371F adc r19,r23
2413 1104 481F adc r20,r24
2414 1106 591F adc r21,r25
2415 1108 2093 0000 sts ErsatzKompass,r18
2416 110c 3093 0000 sts (ErsatzKompass)+1,r19
2417 1110 4093 0000 sts (ErsatzKompass)+2,r20
2418 1114 5093 0000 sts (ErsatzKompass)+3,r21
2419 .L114:
2420 1118 6091 0000 lds r22,MesswertRoll
2421 111c 7091 0000 lds r23,(MesswertRoll)+1
2422 1120 6E0D add r22,r14
2423 1122 7F1D adc r23,r15
2424 1124 9B01 movw r18,r22
2425 1126 4427 clr r20
2426 1128 37FD sbrc r19,7
2427 112a 4095 com r20
2428 112c 542F mov r21,r20
2429 112e 8091 0000 lds r24,Mess_IntegralRoll2
2430 1132 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2431 1136 A091 0000 lds r26,(Mess_IntegralRoll2)+2
2432 113a B091 0000 lds r27,(Mess_IntegralRoll2)+3
2433 113e 820F add r24,r18
2434 1140 931F adc r25,r19
2435 1142 A41F adc r26,r20
2436 1144 B51F adc r27,r21
2437 1146 8093 0000 sts Mess_IntegralRoll2,r24
2438 114a 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2439 114e A093 0000 sts (Mess_IntegralRoll2)+2,r26
2440 1152 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2441 1156 8091 0000 lds r24,LageKorrekturRoll
2442 115a 9091 0000 lds r25,(LageKorrekturRoll)+1
2443 115e 681B sub r22,r24
2444 1160 790B sbc r23,r25
2445 1162 CB01 movw r24,r22
2446 1164 AA27 clr r26
2447 1166 97FD sbrc r25,7
2448 1168 A095 com r26
2449 116a BA2F mov r27,r26
2450 116c 2985 ldd r18,Y+9
2451 116e 3A85 ldd r19,Y+10
2452 1170 4B85 ldd r20,Y+11
2453 1172 5C85 ldd r21,Y+12
2454 1174 820F add r24,r18
2455 1176 931F adc r25,r19
2456 1178 A41F adc r26,r20
2457 117a B51F adc r27,r21
2458 117c 8093 0000 sts Mess_IntegralRoll,r24
2459 1180 9093 0000 sts (Mess_IntegralRoll)+1,r25
2460 1184 A093 0000 sts (Mess_IntegralRoll)+2,r26
2461 1188 B093 0000 sts (Mess_IntegralRoll)+3,r27
2462 118c C090 0000 lds r12,Umschlag180Roll
2463 1190 D090 0000 lds r13,(Umschlag180Roll)+1
2464 1194 E090 0000 lds r14,(Umschlag180Roll)+2
2465 1198 F090 0000 lds r15,(Umschlag180Roll)+3
2466 119c C816 cp r12,r24
2467 119e D906 cpc r13,r25
2468 11a0 EA06 cpc r14,r26
2469 11a2 FB06 cpc r15,r27
2470 11a4 04F4 brge .L115
2471 11a6 88EA ldi r24,lo8(25000)
2472 11a8 91E6 ldi r25,hi8(25000)
2473 11aa A0E0 ldi r26,hlo8(25000)
2474 11ac B0E0 ldi r27,hhi8(25000)
2475 11ae 8C19 sub r24,r12
2476 11b0 9D09 sbc r25,r13
2477 11b2 AE09 sbc r26,r14
2478 11b4 BF09 sbc r27,r15
2479 11b6 8093 0000 sts Mess_IntegralRoll,r24
2480 11ba 9093 0000 sts (Mess_IntegralRoll)+1,r25
2481 11be A093 0000 sts (Mess_IntegralRoll)+2,r26
2482 11c2 B093 0000 sts (Mess_IntegralRoll)+3,r27
2483 11c6 8093 0000 sts Mess_IntegralRoll2,r24
2484 11ca 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2485 11ce A093 0000 sts (Mess_IntegralRoll2)+2,r26
2486 11d2 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2487 .L115:
2488 11d6 2227 clr r18
2489 11d8 3327 clr r19
2490 11da A901 movw r20,r18
2491 11dc 2C19 sub r18,r12
2492 11de 3D09 sbc r19,r13
2493 11e0 4E09 sbc r20,r14
2494 11e2 5F09 sbc r21,r15
2495 11e4 8091 0000 lds r24,Mess_IntegralRoll
2496 11e8 9091 0000 lds r25,(Mess_IntegralRoll)+1
2497 11ec A091 0000 lds r26,(Mess_IntegralRoll)+2
2498 11f0 B091 0000 lds r27,(Mess_IntegralRoll)+3
2499 11f4 8217 cp r24,r18
2500 11f6 9307 cpc r25,r19
2501 11f8 A407 cpc r26,r20
2502 11fa B507 cpc r27,r21
2503 11fc 04F4 brge .L116
2504 11fe D701 movw r26,r14
2505 1200 C601 movw r24,r12
2506 1202 885A subi r24,lo8(-(-25000))
2507 1204 9146 sbci r25,hi8(-(-25000))
2508 1206 A040 sbci r26,hlo8(-(-25000))
2509 1208 B040 sbci r27,hhi8(-(-25000))
2510 120a 8093 0000 sts Mess_IntegralRoll,r24
2511 120e 9093 0000 sts (Mess_IntegralRoll)+1,r25
2512 1212 A093 0000 sts (Mess_IntegralRoll)+2,r26
2513 1216 B093 0000 sts (Mess_IntegralRoll)+3,r27
2514 121a 8093 0000 sts Mess_IntegralRoll2,r24
2515 121e 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2516 1222 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2517 1226 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2518 .L116:
2519 122a 6091 0000 lds r22,MesswertNick
2520 122e 7091 0000 lds r23,(MesswertNick)+1
2521 1232 600F add r22,r16
2522 1234 711F adc r23,r17
2523 1236 9B01 movw r18,r22
2524 1238 4427 clr r20
2525 123a 37FD sbrc r19,7
2526 123c 4095 com r20
2527 123e 542F mov r21,r20
2528 1240 8091 0000 lds r24,Mess_IntegralNick2
2529 1244 9091 0000 lds r25,(Mess_IntegralNick2)+1
2530 1248 A091 0000 lds r26,(Mess_IntegralNick2)+2
2531 124c B091 0000 lds r27,(Mess_IntegralNick2)+3
2532 1250 820F add r24,r18
2533 1252 931F adc r25,r19
2534 1254 A41F adc r26,r20
2535 1256 B51F adc r27,r21
2536 1258 8093 0000 sts Mess_IntegralNick2,r24
2537 125c 9093 0000 sts (Mess_IntegralNick2)+1,r25
2538 1260 A093 0000 sts (Mess_IntegralNick2)+2,r26
2539 1264 B093 0000 sts (Mess_IntegralNick2)+3,r27
2540 1268 8091 0000 lds r24,LageKorrekturNick
2541 126c 9091 0000 lds r25,(LageKorrekturNick)+1
2542 1270 681B sub r22,r24
2543 1272 790B sbc r23,r25
2544 1274 CB01 movw r24,r22
2545 1276 AA27 clr r26
2546 1278 97FD sbrc r25,7
2547 127a A095 com r26
2548 127c BA2F mov r27,r26
2549 127e 2D85 ldd r18,Y+13
2550 1280 3E85 ldd r19,Y+14
2551 1282 4F85 ldd r20,Y+15
2552 1284 5889 ldd r21,Y+16
2553 1286 820F add r24,r18
2554 1288 931F adc r25,r19
2555 128a A41F adc r26,r20
2556 128c B51F adc r27,r21
2557 128e 8093 0000 sts Mess_IntegralNick,r24
2558 1292 9093 0000 sts (Mess_IntegralNick)+1,r25
2559 1296 A093 0000 sts (Mess_IntegralNick)+2,r26
2560 129a B093 0000 sts (Mess_IntegralNick)+3,r27
2561 129e E090 0000 lds r14,Umschlag180Nick
2562 12a2 F090 0000 lds r15,(Umschlag180Nick)+1
2563 12a6 0091 0000 lds r16,(Umschlag180Nick)+2
2564 12aa 1091 0000 lds r17,(Umschlag180Nick)+3
2565 12ae E816 cp r14,r24
2566 12b0 F906 cpc r15,r25
2567 12b2 0A07 cpc r16,r26
2568 12b4 1B07 cpc r17,r27
2569 12b6 04F4 brge .L117
2570 12b8 88EA ldi r24,lo8(25000)
2571 12ba 91E6 ldi r25,hi8(25000)
2572 12bc A0E0 ldi r26,hlo8(25000)
2573 12be B0E0 ldi r27,hhi8(25000)
2574 12c0 8E19 sub r24,r14
2575 12c2 9F09 sbc r25,r15
2576 12c4 A00B sbc r26,r16
2577 12c6 B10B sbc r27,r17
2578 12c8 8093 0000 sts Mess_IntegralNick,r24
2579 12cc 9093 0000 sts (Mess_IntegralNick)+1,r25
2580 12d0 A093 0000 sts (Mess_IntegralNick)+2,r26
2581 12d4 B093 0000 sts (Mess_IntegralNick)+3,r27
2582 12d8 8093 0000 sts Mess_IntegralNick2,r24
2583 12dc 9093 0000 sts (Mess_IntegralNick2)+1,r25
2584 12e0 A093 0000 sts (Mess_IntegralNick2)+2,r26
2585 12e4 B093 0000 sts (Mess_IntegralNick2)+3,r27
2586 .L117:
2587 12e8 2227 clr r18
2588 12ea 3327 clr r19
2589 12ec A901 movw r20,r18
2590 12ee 2E19 sub r18,r14
2591 12f0 3F09 sbc r19,r15
2592 12f2 400B sbc r20,r16
2593 12f4 510B sbc r21,r17
2594 12f6 8091 0000 lds r24,Mess_IntegralNick
2595 12fa 9091 0000 lds r25,(Mess_IntegralNick)+1
2596 12fe A091 0000 lds r26,(Mess_IntegralNick)+2
2597 1302 B091 0000 lds r27,(Mess_IntegralNick)+3
2598 1306 8217 cp r24,r18
2599 1308 9307 cpc r25,r19
2600 130a A407 cpc r26,r20
2601 130c B507 cpc r27,r21
2602 130e 04F4 brge .L118
2603 1310 D801 movw r26,r16
2604 1312 C701 movw r24,r14
2605 1314 885A subi r24,lo8(-(-25000))
2606 1316 9146 sbci r25,hi8(-(-25000))
2607 1318 A040 sbci r26,hlo8(-(-25000))
2608 131a B040 sbci r27,hhi8(-(-25000))
2609 131c 8093 0000 sts Mess_IntegralNick,r24
2610 1320 9093 0000 sts (Mess_IntegralNick)+1,r25
2611 1324 A093 0000 sts (Mess_IntegralNick)+2,r26
2612 1328 B093 0000 sts (Mess_IntegralNick)+3,r27
2613 132c 8093 0000 sts Mess_IntegralNick2,r24
2614 1330 9093 0000 sts (Mess_IntegralNick2)+1,r25
2615 1334 A093 0000 sts (Mess_IntegralNick2)+2,r26
2616 1338 B093 0000 sts (Mess_IntegralNick2)+3,r27
2617 .L118:
2618 133c 8091 0000 lds r24,Mess_Integral_Gier
2619 1340 9091 0000 lds r25,(Mess_Integral_Gier)+1
2620 1344 A091 0000 lds r26,(Mess_Integral_Gier)+2
2621 1348 B091 0000 lds r27,(Mess_Integral_Gier)+3
2622 134c 8093 0000 sts Integral_Gier,r24
2623 1350 9093 0000 sts (Integral_Gier)+1,r25
2624 1354 A093 0000 sts (Integral_Gier)+2,r26
2625 1358 B093 0000 sts (Integral_Gier)+3,r27
2626 135c 8091 0000 lds r24,Mess_IntegralNick
2627 1360 9091 0000 lds r25,(Mess_IntegralNick)+1
2628 1364 A091 0000 lds r26,(Mess_IntegralNick)+2
2629 1368 B091 0000 lds r27,(Mess_IntegralNick)+3
2630 136c 8093 0000 sts IntegralNick,r24
2631 1370 9093 0000 sts (IntegralNick)+1,r25
2632 1374 A093 0000 sts (IntegralNick)+2,r26
2633 1378 B093 0000 sts (IntegralNick)+3,r27
2634 137c 8091 0000 lds r24,Mess_IntegralRoll
2635 1380 9091 0000 lds r25,(Mess_IntegralRoll)+1
2636 1384 A091 0000 lds r26,(Mess_IntegralRoll)+2
2637 1388 B091 0000 lds r27,(Mess_IntegralRoll)+3
2638 138c 8093 0000 sts IntegralRoll,r24
2639 1390 9093 0000 sts (IntegralRoll)+1,r25
2640 1394 A093 0000 sts (IntegralRoll)+2,r26
2641 1398 B093 0000 sts (IntegralRoll)+3,r27
2642 139c 8091 0000 lds r24,Mess_IntegralNick2
2643 13a0 9091 0000 lds r25,(Mess_IntegralNick2)+1
2644 13a4 A091 0000 lds r26,(Mess_IntegralNick2)+2
2645 13a8 B091 0000 lds r27,(Mess_IntegralNick2)+3
2646 13ac 8093 0000 sts IntegralNick2,r24
2647 13b0 9093 0000 sts (IntegralNick2)+1,r25
2648 13b4 A093 0000 sts (IntegralNick2)+2,r26
2649 13b8 B093 0000 sts (IntegralNick2)+3,r27
2650 13bc 8091 0000 lds r24,Mess_IntegralRoll2
2651 13c0 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2652 13c4 A091 0000 lds r26,(Mess_IntegralRoll2)+2
2653 13c8 B091 0000 lds r27,(Mess_IntegralRoll2)+3
2654 13cc 8093 0000 sts IntegralRoll2,r24
2655 13d0 9093 0000 sts (IntegralRoll2)+1,r25
2656 13d4 A093 0000 sts (IntegralRoll2)+2,r26
2657 13d8 B093 0000 sts (IntegralRoll2)+3,r27
2658 13dc 8091 0000 lds r24,HiResNick
2659 13e0 9091 0000 lds r25,(HiResNick)+1
2660 13e4 97FD sbrc r25,7
2661 13e6 0796 adiw r24,7
2662 .L119:
2663 13e8 03E0 ldi r16,3
2664 13ea 9595 1: asr r25
2665 13ec 8795 ror r24
2666 13ee 0A95 dec r16
2667 13f0 01F4 brne 1b
2668 13f2 9093 0000 sts (MesswertNick)+1,r25
2669 13f6 8093 0000 sts MesswertNick,r24
2670 13fa 8091 0000 lds r24,HiResRoll
2671 13fe 9091 0000 lds r25,(HiResRoll)+1
2672 1402 97FD sbrc r25,7
2673 1404 0796 adiw r24,7
2674 .L120:
2675 1406 13E0 ldi r17,3
2676 1408 9595 1: asr r25
2677 140a 8795 ror r24
2678 140c 1A95 dec r17
2679 140e 01F4 brne 1b
2680 1410 9093 0000 sts (MesswertRoll)+1,r25
2681 1414 8093 0000 sts MesswertRoll,r24
2682 1418 8091 0000 lds r24,AdWertNick
2683 141c 9091 0000 lds r25,(AdWertNick)+1
2684 1420 0F97 sbiw r24,15
2685 1422 04F4 brge .L121
2686 1424 88E1 ldi r24,lo8(-1000)
2687 1426 9CEF ldi r25,hi8(-1000)
2688 1428 9093 0000 sts (MesswertNick)+1,r25
2689 142c 8093 0000 sts MesswertNick,r24
2690 .L121:
2691 1430 8091 0000 lds r24,AdWertNick
2692 1434 9091 0000 lds r25,(AdWertNick)+1
2693 1438 0797 sbiw r24,7
2694 143a 04F4 brge .L122
2695 143c 80E3 ldi r24,lo8(-2000)
2696 143e 98EF ldi r25,hi8(-2000)
2697 1440 9093 0000 sts (MesswertNick)+1,r25
2698 1444 8093 0000 sts MesswertNick,r24
2699 .L122:
2700 1448 2091 0000 lds r18,PlatinenVersion
2701 144c 2A30 cpi r18,lo8(10)
2702 144e 01F4 brne .L123
2703 1450 8091 0000 lds r24,AdWertNick
2704 1454 9091 0000 lds r25,(AdWertNick)+1
2705 1458 835F subi r24,lo8(1011)
2706 145a 9340 sbci r25,hi8(1011)
2707 145c 04F0 brlt .L124
2708 145e 88EE ldi r24,lo8(1000)
2709 1460 93E0 ldi r25,hi8(1000)
2710 1462 9093 0000 sts (MesswertNick)+1,r25
2711 1466 8093 0000 sts MesswertNick,r24
2712 .L124:
2713 146a 8091 0000 lds r24,AdWertNick
2714 146e 9091 0000 lds r25,(AdWertNick)+1
2715 1472 8A5F subi r24,lo8(1018)
2716 1474 9340 sbci r25,hi8(1018)
2717 1476 04F0 brlt .L126
2718 1478 00C0 rjmp .L169
2719 .L123:
2720 147a 8091 0000 lds r24,AdWertNick
2721 147e 9091 0000 lds r25,(AdWertNick)+1
2722 1482 815D subi r24,lo8(2001)
2723 1484 9740 sbci r25,hi8(2001)
2724 1486 04F0 brlt .L127
2725 1488 88EE ldi r24,lo8(1000)
2726 148a 93E0 ldi r25,hi8(1000)
2727 148c 9093 0000 sts (MesswertNick)+1,r25
2728 1490 8093 0000 sts MesswertNick,r24
2729 .L127:
2730 1494 8091 0000 lds r24,AdWertNick
2731 1498 9091 0000 lds r25,(AdWertNick)+1
2732 149c 805E subi r24,lo8(2016)
2733 149e 9740 sbci r25,hi8(2016)
2734 14a0 04F0 brlt .L126
2735 .L169:
2736 14a2 80ED ldi r24,lo8(2000)
2737 14a4 97E0 ldi r25,hi8(2000)
2738 14a6 9093 0000 sts (MesswertNick)+1,r25
2739 14aa 8093 0000 sts MesswertNick,r24
2740 .L126:
2741 14ae 8091 0000 lds r24,AdWertRoll
2742 14b2 9091 0000 lds r25,(AdWertRoll)+1
2743 14b6 0F97 sbiw r24,15
2744 14b8 04F4 brge .L129
2745 14ba 88E1 ldi r24,lo8(-1000)
2746 14bc 9CEF ldi r25,hi8(-1000)
2747 14be 9093 0000 sts (MesswertRoll)+1,r25
2748 14c2 8093 0000 sts MesswertRoll,r24
2749 .L129:
2750 14c6 8091 0000 lds r24,AdWertRoll
2751 14ca 9091 0000 lds r25,(AdWertRoll)+1
2752 14ce 0797 sbiw r24,7
2753 14d0 04F4 brge .L130
2754 14d2 80E3 ldi r24,lo8(-2000)
2755 14d4 98EF ldi r25,hi8(-2000)
2756 14d6 9093 0000 sts (MesswertRoll)+1,r25
2757 14da 8093 0000 sts MesswertRoll,r24
2758 .L130:
2759 14de 2A30 cpi r18,lo8(10)
2760 14e0 01F4 brne .L131
2761 14e2 8091 0000 lds r24,AdWertRoll
2762 14e6 9091 0000 lds r25,(AdWertRoll)+1
2763 14ea 835F subi r24,lo8(1011)
2764 14ec 9340 sbci r25,hi8(1011)
2765 14ee 04F0 brlt .L132
2766 14f0 88EE ldi r24,lo8(1000)
2767 14f2 93E0 ldi r25,hi8(1000)
2768 14f4 9093 0000 sts (MesswertRoll)+1,r25
2769 14f8 8093 0000 sts MesswertRoll,r24
2770 .L132:
2771 14fc 8091 0000 lds r24,AdWertRoll
2772 1500 9091 0000 lds r25,(AdWertRoll)+1
2773 1504 8A5F subi r24,lo8(1018)
2774 1506 9340 sbci r25,hi8(1018)
2775 1508 04F0 brlt .L134
2776 150a 00C0 rjmp .L170
2777 .L131:
2778 150c 8091 0000 lds r24,AdWertRoll
2779 1510 9091 0000 lds r25,(AdWertRoll)+1
2780 1514 815D subi r24,lo8(2001)
2781 1516 9740 sbci r25,hi8(2001)
2782 1518 04F0 brlt .L135
2783 151a 88EE ldi r24,lo8(1000)
2784 151c 93E0 ldi r25,hi8(1000)
2785 151e 9093 0000 sts (MesswertRoll)+1,r25
2786 1522 8093 0000 sts MesswertRoll,r24
2787 .L135:
2788 1526 8091 0000 lds r24,AdWertRoll
2789 152a 9091 0000 lds r25,(AdWertRoll)+1
2790 152e 805E subi r24,lo8(2016)
2791 1530 9740 sbci r25,hi8(2016)
2792 1532 04F0 brlt .L134
2793 .L170:
2794 1534 80ED ldi r24,lo8(2000)
2795 1536 97E0 ldi r25,hi8(2000)
2796 1538 9093 0000 sts (MesswertRoll)+1,r25
2797 153c 8093 0000 sts MesswertRoll,r24
2798 .L134:
2799 1540 6091 0000 lds r22,Parameter_Gyro_D
2800 1544 6623 tst r22
2801 1546 01F4 brne .+2
2802 1548 00C0 rjmp .L137
2803 154a 4091 0000 lds r20,HiResNick
2804 154e 5091 0000 lds r21,(HiResNick)+1
2805 1552 8091 0000 lds r24,oldNick.31
2806 1556 9091 0000 lds r25,(oldNick.31)+1
2807 155a 481B sub r20,r24
2808 155c 590B sbc r21,r25
2809 155e 5093 0000 sts (d2Nick.34)+1,r21
2810 1562 4093 0000 sts d2Nick.34,r20
2811 1566 2091 0000 lds r18,HiResNick
2812 156a 3091 0000 lds r19,(HiResNick)+1
2813 156e 280F add r18,r24
2814 1570 391F adc r19,r25
2815 1572 37FF sbrs r19,7
2816 1574 00C0 rjmp .L138
2817 1576 2F5F subi r18,lo8(-(1))
2818 1578 3F4F sbci r19,hi8(-(1))
2819 .L138:
2820 157a 3595 asr r19
2821 157c 2795 ror r18
2822 157e 3093 0000 sts (oldNick.31)+1,r19
2823 1582 2093 0000 sts oldNick.31,r18
2824 1586 4138 cpi r20,129
2825 1588 5105 cpc r21,__zero_reg__
2826 158a 04F0 brlt .L139
2827 158c 80E8 ldi r24,lo8(128)
2828 158e 90E0 ldi r25,hi8(128)
2829 1590 00C0 rjmp .L171
2830 .L139:
2831 1592 4058 subi r20,lo8(-128)
2832 1594 5F4F sbci r21,hi8(-128)
2833 1596 04F4 brge .L140
2834 1598 80E8 ldi r24,lo8(-128)
2835 159a 9FEF ldi r25,hi8(-128)
2836 .L171:
2837 159c 9093 0000 sts (d2Nick.34)+1,r25
2838 15a0 8093 0000 sts d2Nick.34,r24
2839 .L140:
2840 15a4 4091 0000 lds r20,HiResRoll
2841 15a8 5091 0000 lds r21,(HiResRoll)+1
2842 15ac 8091 0000 lds r24,oldRoll.32
2843 15b0 9091 0000 lds r25,(oldRoll.32)+1
2844 15b4 481B sub r20,r24
2845 15b6 590B sbc r21,r25
2846 15b8 5093 0000 sts (d2Roll.33)+1,r21
2847 15bc 4093 0000 sts d2Roll.33,r20
2848 15c0 2091 0000 lds r18,HiResRoll
2849 15c4 3091 0000 lds r19,(HiResRoll)+1
2850 15c8 280F add r18,r24
2851 15ca 391F adc r19,r25
2852 15cc 37FF sbrs r19,7
2853 15ce 00C0 rjmp .L142
2854 15d0 2F5F subi r18,lo8(-(1))
2855 15d2 3F4F sbci r19,hi8(-(1))
2856 .L142:
2857 15d4 3595 asr r19
2858 15d6 2795 ror r18
2859 15d8 3093 0000 sts (oldRoll.32)+1,r19
2860 15dc 2093 0000 sts oldRoll.32,r18
2861 15e0 4138 cpi r20,129
2862 15e2 5105 cpc r21,__zero_reg__
2863 15e4 04F0 brlt .L143
2864 15e6 80E8 ldi r24,lo8(128)
2865 15e8 90E0 ldi r25,hi8(128)
2866 15ea 00C0 rjmp .L172
2867 .L143:
2868 15ec 4058 subi r20,lo8(-128)
2869 15ee 5F4F sbci r21,hi8(-128)
2870 15f0 04F4 brge .L144
2871 15f2 80E8 ldi r24,lo8(-128)
2872 15f4 9FEF ldi r25,hi8(-128)
2873 .L172:
2874 15f6 9093 0000 sts (d2Roll.33)+1,r25
2875 15fa 8093 0000 sts d2Roll.33,r24
2876 .L144:
2877 15fe 462F mov r20,r22
2878 1600 5527 clr r21
2879 1602 8091 0000 lds r24,d2Nick.34
2880 1606 9091 0000 lds r25,(d2Nick.34)+1
2881 160a 849F mul r24,r20
2882 160c B001 movw r22,r0
2883 160e 859F mul r24,r21
2884 1610 700D add r23,r0
2885 1612 949F mul r25,r20
2886 1614 700D add r23,r0
2887 1616 1124 clr r1
2888 1618 9B01 movw r18,r22
2889 161a 77FF sbrs r23,7
2890 161c 00C0 rjmp .L146
2891 161e 215F subi r18,lo8(-(15))
2892 1620 3F4F sbci r19,hi8(-(15))
2893 .L146:
2894 1622 F4E0 ldi r31,4
2895 1624 3595 1: asr r19
2896 1626 2795 ror r18
2897 1628 FA95 dec r31
2898 162a 01F4 brne 1b
2899 162c 8091 0000 lds r24,MesswertNick
2900 1630 9091 0000 lds r25,(MesswertNick)+1
2901 1634 820F add r24,r18
2902 1636 931F adc r25,r19
2903 1638 9093 0000 sts (MesswertNick)+1,r25
2904 163c 8093 0000 sts MesswertNick,r24
2905 1640 8091 0000 lds r24,d2Roll.33
2906 1644 9091 0000 lds r25,(d2Roll.33)+1
2907 1648 849F mul r24,r20
2908 164a D001 movw r26,r0
2909 164c 859F mul r24,r21
2910 164e B00D add r27,r0
2911 1650 949F mul r25,r20
2912 1652 B00D add r27,r0
2913 1654 1124 clr r1
2914 1656 AD01 movw r20,r26
2915 1658 9D01 movw r18,r26
2916 165a B7FF sbrs r27,7
2917 165c 00C0 rjmp .L147
2918 165e 215F subi r18,lo8(-(15))
2919 1660 3F4F sbci r19,hi8(-(15))
2920 .L147:
2921 1662 E4E0 ldi r30,4
2922 1664 3595 1: asr r19
2923 1666 2795 ror r18
2924 1668 EA95 dec r30
2925 166a 01F4 brne 1b
2926 166c 8091 0000 lds r24,MesswertRoll
2927 1670 9091 0000 lds r25,(MesswertRoll)+1
2928 1674 820F add r24,r18
2929 1676 931F adc r25,r19
2930 1678 9093 0000 sts (MesswertRoll)+1,r25
2931 167c 8093 0000 sts MesswertRoll,r24
2932 1680 8091 0000 lds r24,HiResNick
2933 1684 9091 0000 lds r25,(HiResNick)+1
2934 1688 860F add r24,r22
2935 168a 971F adc r25,r23
2936 168c 9093 0000 sts (HiResNick)+1,r25
2937 1690 8093 0000 sts HiResNick,r24
2938 1694 8091 0000 lds r24,HiResRoll
2939 1698 9091 0000 lds r25,(HiResRoll)+1
2940 169c 840F add r24,r20
2941 169e 951F adc r25,r21
2942 16a0 9093 0000 sts (HiResRoll)+1,r25
2943 16a4 8093 0000 sts HiResRoll,r24
2944 .L137:
2945 16a8 0091 0000 lds r16,RohMesswertRoll
2946 16ac 1091 0000 lds r17,(RohMesswertRoll)+1
2947 16b0 8091 0000 lds r24,KopplungsteilNickRoll
2948 16b4 9091 0000 lds r25,(KopplungsteilNickRoll)+1
2949 16b8 1016 cp __zero_reg__,r16
2950 16ba 1106 cpc __zero_reg__,r17
2951 16bc 04F4 brge .L148
2952 16be 9C01 movw r18,r24
2953 16c0 97FF sbrs r25,7
2954 16c2 00C0 rjmp .L149
2955 16c4 2227 clr r18
2956 16c6 3327 clr r19
2957 16c8 281B sub r18,r24
2958 16ca 390B sbc r19,r25
2959 .L149:
2960 16cc C901 movw r24,r18
2961 16ce AA27 clr r26
2962 16d0 97FD sbrc r25,7
2963 16d2 A095 com r26
2964 16d4 BA2F mov r27,r26
2965 16d6 2091 0000 lds r18,Parameter_CouplingYawCorrection
2966 16da 3327 clr r19
2967 16dc 4427 clr r20
2968 16de 5527 clr r21
2969 16e0 BC01 movw r22,r24
2970 16e2 CD01 movw r24,r26
2971 16e4 0E94 0000 call __mulsi3
2972 16e8 9B01 movw r18,r22
2973 16ea AC01 movw r20,r24
2974 16ec 97FF sbrs r25,7
2975 16ee 00C0 rjmp .L150
2976 16f0 215C subi r18,lo8(-(63))
2977 16f2 3F4F sbci r19,hi8(-(63))
2978 16f4 4F4F sbci r20,hlo8(-(63))
2979 16f6 5F4F sbci r21,hhi8(-(63))
2980 .L150:
2981 16f8 76E0 ldi r23,6
2982 16fa 5595 1: asr r21
2983 16fc 4795 ror r20
2984 16fe 3795 ror r19
2985 1700 2795 ror r18
2986 1702 7A95 dec r23
2987 1704 01F4 brne 1b
2988 1706 8091 0000 lds r24,TrimRoll
2989 170a 9091 0000 lds r25,(TrimRoll)+1
2990 170e 820F add r24,r18
2991 1710 931F adc r25,r19
2992 1712 00C0 rjmp .L173
2993 .L148:
2994 1714 97FF sbrs r25,7
2995 1716 00C0 rjmp .L152
2996 1718 9095 com r25
2997 171a 8195 neg r24
2998 171c 9F4F sbci r25,lo8(-1)
2999 .L152:
3000 171e AA27 clr r26
3001 1720 97FD sbrc r25,7
3002 1722 A095 com r26
3003 1724 BA2F mov r27,r26
3004 1726 2091 0000 lds r18,Parameter_CouplingYawCorrection
3005 172a 3327 clr r19
3006 172c 4427 clr r20
3007 172e 5527 clr r21
3008 1730 BC01 movw r22,r24
3009 1732 CD01 movw r24,r26
3010 1734 0E94 0000 call __mulsi3
3011 1738 9B01 movw r18,r22
3012 173a AC01 movw r20,r24
3013 173c 97FF sbrs r25,7
3014 173e 00C0 rjmp .L153
3015 1740 215C subi r18,lo8(-(63))
3016 1742 3F4F sbci r19,hi8(-(63))
3017 1744 4F4F sbci r20,hlo8(-(63))
3018 1746 5F4F sbci r21,hhi8(-(63))
3019 .L153:
3020 1748 66E0 ldi r22,6
3021 174a 5595 1: asr r21
3022 174c 4795 ror r20
3023 174e 3795 ror r19
3024 1750 2795 ror r18
3025 1752 6A95 dec r22
3026 1754 01F4 brne 1b
3027 1756 8091 0000 lds r24,TrimRoll
3028 175a 9091 0000 lds r25,(TrimRoll)+1
3029 175e 821B sub r24,r18
3030 1760 930B sbc r25,r19
3031 .L173:
3032 1762 9093 0000 sts (TrimRoll)+1,r25
3033 1766 8093 0000 sts TrimRoll,r24
3034 176a E090 0000 lds r14,RohMesswertNick
3035 176e F090 0000 lds r15,(RohMesswertNick)+1
3036 1772 8091 0000 lds r24,KopplungsteilRollNick
3037 1776 9091 0000 lds r25,(KopplungsteilRollNick)+1
3038 177a 1E14 cp __zero_reg__,r14
3039 177c 1F04 cpc __zero_reg__,r15
3040 177e 04F4 brge .L154
3041 1780 9C01 movw r18,r24
3042 1782 97FF sbrs r25,7
3043 1784 00C0 rjmp .L155
3044 1786 2227 clr r18
3045 1788 3327 clr r19
3046 178a 281B sub r18,r24
3047 178c 390B sbc r19,r25
3048 .L155:
3049 178e C901 movw r24,r18
3050 1790 AA27 clr r26
3051 1792 97FD sbrc r25,7
3052 1794 A095 com r26
3053 1796 BA2F mov r27,r26
3054 1798 2091 0000 lds r18,Parameter_CouplingYawCorrection
3055 179c 3327 clr r19
3056 179e 4427 clr r20
3057 17a0 5527 clr r21
3058 17a2 BC01 movw r22,r24
3059 17a4 CD01 movw r24,r26
3060 17a6 0E94 0000 call __mulsi3
3061 17aa 9B01 movw r18,r22
3062 17ac AC01 movw r20,r24
3063 17ae 97FF sbrs r25,7
3064 17b0 00C0 rjmp .L156
3065 17b2 215C subi r18,lo8(-(63))
3066 17b4 3F4F sbci r19,hi8(-(63))
3067 17b6 4F4F sbci r20,hlo8(-(63))
3068 17b8 5F4F sbci r21,hhi8(-(63))
3069 .L156:
3070 17ba 96E0 ldi r25,6
3071 17bc 5595 1: asr r21
3072 17be 4795 ror r20
3073 17c0 3795 ror r19
3074 17c2 2795 ror r18
3075 17c4 9A95 dec r25
3076 17c6 01F4 brne 1b
3077 17c8 8091 0000 lds r24,TrimNick
3078 17cc 9091 0000 lds r25,(TrimNick)+1
3079 17d0 820F add r24,r18
3080 17d2 931F adc r25,r19
3081 17d4 00C0 rjmp .L174
3082 .L154:
3083 17d6 97FF sbrs r25,7
3084 17d8 00C0 rjmp .L158
3085 17da 9095 com r25
3086 17dc 8195 neg r24
3087 17de 9F4F sbci r25,lo8(-1)
3088 .L158:
3089 17e0 AA27 clr r26
3090 17e2 97FD sbrc r25,7
3091 17e4 A095 com r26
3092 17e6 BA2F mov r27,r26
3093 17e8 2091 0000 lds r18,Parameter_CouplingYawCorrection
3094 17ec 3327 clr r19
3095 17ee 4427 clr r20
3096 17f0 5527 clr r21
3097 17f2 BC01 movw r22,r24
3098 17f4 CD01 movw r24,r26
3099 17f6 0E94 0000 call __mulsi3
3100 17fa 9B01 movw r18,r22
3101 17fc AC01 movw r20,r24
3102 17fe 97FF sbrs r25,7
3103 1800 00C0 rjmp .L159
3104 1802 215C subi r18,lo8(-(63))
3105 1804 3F4F sbci r19,hi8(-(63))
3106 1806 4F4F sbci r20,hlo8(-(63))
3107 1808 5F4F sbci r21,hhi8(-(63))
3108 .L159:
3109 180a 86E0 ldi r24,6
3110 180c 5595 1: asr r21
3111 180e 4795 ror r20
3112 1810 3795 ror r19
3113 1812 2795 ror r18
3114 1814 8A95 dec r24
3115 1816 01F4 brne 1b
3116 1818 8091 0000 lds r24,TrimNick
3117 181c 9091 0000 lds r25,(TrimNick)+1
3118 1820 821B sub r24,r18
3119 1822 930B sbc r25,r19
3120 .L174:
3121 1824 9093 0000 sts (TrimNick)+1,r25
3122 1828 8093 0000 sts TrimNick,r24
3123 182c 8091 0000 lds r24,Parameter_GlobalConfig
3124 1830 87FF sbrs r24,7
3125 1832 00C0 rjmp .L82
3126 1834 B989 ldd r27,Y+17
3127 1836 BB23 tst r27
3128 1838 01F0 breq .+2
3129 183a 00C0 rjmp .L82
3130 183c 8091 0000 lds r24,Looping_Roll
3131 1840 8823 tst r24
3132 1842 01F4 brne .L82
3133 1844 E1E0 ldi r30,lo8(257)
3134 1846 EE16 cp r14,r30
3135 1848 E1E0 ldi r30,hi8(257)
3136 184a FE06 cpc r15,r30
3137 184c 04F0 brlt .L161
3138 184e 8091 0000 lds r24,MesswertNick
3139 1852 9091 0000 lds r25,(MesswertNick)+1
3140 1856 8E0D add r24,r14
3141 1858 9F1D adc r25,r15
3142 185a 8050 subi r24,lo8(-(-256))
3143 185c 9140 sbci r25,hi8(-(-256))
3144 185e 00C0 rjmp .L175
3145 .L161:
3146 1860 F0E0 ldi r31,lo8(-256)
3147 1862 EF16 cp r14,r31
3148 1864 FFEF ldi r31,hi8(-256)
3149 1866 FF06 cpc r15,r31
3150 1868 04F4 brge .L162
3151 186a 8091 0000 lds r24,MesswertNick
3152 186e 9091 0000 lds r25,(MesswertNick)+1
3153 1872 8E0D add r24,r14
3154 1874 9F1D adc r25,r15
3155 1876 8050 subi r24,lo8(-(256))
3156 1878 9F4F sbci r25,hi8(-(256))
3157 .L175:
3158 187a 9093 0000 sts (MesswertNick)+1,r25
3159 187e 8093 0000 sts MesswertNick,r24
3160 .L162:
3161 1882 21E0 ldi r18,hi8(257)
3162 1884 0130 cpi r16,lo8(257)
3163 1886 1207 cpc r17,r18
3164 1888 04F0 brlt .L164
3165 188a 8091 0000 lds r24,MesswertRoll
3166 188e 9091 0000 lds r25,(MesswertRoll)+1
3167 1892 800F add r24,r16
3168 1894 911F adc r25,r17
3169 1896 8050 subi r24,lo8(-(-256))
3170 1898 9140 sbci r25,hi8(-(-256))
3171 189a 00C0 rjmp .L176
3172 .L164:
3173 189c 3FEF ldi r19,hi8(-256)
3174 189e 0030 cpi r16,lo8(-256)
3175 18a0 1307 cpc r17,r19
3176 18a2 04F4 brge .L82
3177 18a4 8091 0000 lds r24,MesswertRoll
3178 18a8 9091 0000 lds r25,(MesswertRoll)+1
3179 18ac 800F add r24,r16
3180 18ae 911F adc r25,r17
3181 18b0 8050 subi r24,lo8(-(256))
3182 18b2 9F4F sbci r25,hi8(-(256))
3183 .L176:
3184 18b4 9093 0000 sts (MesswertRoll)+1,r25
3185 18b8 8093 0000 sts MesswertRoll,r24
3186 .L82:
3187 /* epilogue: frame size=19 */
3188 18bc E2E1 ldi r30,18
3189 18be CD5E subi r28,-19
3190 18c0 0C94 0000 jmp __epilogue_restores__+0
3191 /* epilogue end (size=4) */
3192 /* function Mittelwert size 2000 (1990) */
3194 .global SendMotorData
3196 SendMotorData:
3197 /* prologue: frame size=0 */
3198 /* prologue end (size=0) */
3199 18c4 8091 0000 lds r24,MotorenEin
3200 18c8 8823 tst r24
3201 18ca 01F4 brne .L178
3202 18cc 8091 0000 lds r24,FC_StatusFlags
3203 18d0 8C7F andi r24,lo8(-4)
3204 18d2 8093 0000 sts FC_StatusFlags,r24
3205 18d6 A0E0 ldi r26,lo8(MotorTest)
3206 18d8 B0E0 ldi r27,hi8(MotorTest)
3207 18da E0E0 ldi r30,lo8(Motor)
3208 18dc F0E0 ldi r31,hi8(Motor)
3209 18de 9BE0 ldi r25,lo8(11)
3210 .L183:
3211 18e0 8091 0000 lds r24,PC_MotortestActive
3212 18e4 8823 tst r24
3213 18e6 01F4 brne .L182
3214 18e8 8C93 st X,r24
3215 .L182:
3216 18ea 8D91 ld r24,X+
3217 18ec 8183 std Z+1,r24
3218 18ee 1282 std Z+2,__zero_reg__
3219 18f0 9150 subi r25,lo8(-(-1))
3220 18f2 3896 adiw r30,8
3221 18f4 97FF sbrs r25,7
3222 18f6 00C0 rjmp .L183
3223 18f8 8091 0000 lds r24,PC_MotortestActive
3224 18fc 8823 tst r24
3225 18fe 01F0 breq .L185
3226 1900 8091 0000 lds r24,PC_MotortestActive
3227 1904 8150 subi r24,lo8(-(-1))
3228 1906 8093 0000 sts PC_MotortestActive,r24
3229 190a 00C0 rjmp .L185
3230 .L178:
3231 190c 8091 0000 lds r24,FC_StatusFlags
3232 1910 8160 ori r24,lo8(1)
3233 1912 8093 0000 sts FC_StatusFlags,r24
3234 .L185:
3235 1916 8091 0000 lds r24,I2C_TransferActive
3236 191a 8823 tst r24
3237 191c 01F0 breq .L186
3238 191e 1092 0000 sts I2C_TransferActive,__zero_reg__
3239 1922 0895 ret
3240 .L186:
3241 1924 8093 0000 sts motor_write,r24
3242 1928 8093 0000 sts twi_state,r24
3243 192c 8091 0000 lds r24,BLFlags
3244 1930 8E7F andi r24,lo8(-2)
3245 1932 8093 0000 sts BLFlags,r24
3246 1936 85EA ldi r24,lo8(-91)
3247 1938 8093 BC00 sts 188,r24
3248 193c 0895 ret
3249 /* epilogue: frame size=0 */
3250 /* epilogue: noreturn */
3251 /* epilogue end (size=0) */
3252 /* function SendMotorData size 61 (61) */
3254 .global ParameterZuordnung
3256 ParameterZuordnung:
3257 /* prologue: frame size=0 */
3258 193e CF93 push r28
3259 1940 DF93 push r29
3260 /* prologue end (size=2) */
3261 1942 A0E0 ldi r26,lo8(Poti)
3262 1944 B0E0 ldi r27,hi8(Poti)
3263 1946 C0E0 ldi r28,lo8(EE_Parameter+5)
3264 1948 D0E0 ldi r29,hi8(EE_Parameter+5)
3265 194a 57E0 ldi r21,lo8(7)
3266 .L203:
3267 194c 9991 ld r25,Y+
3268 194e E92F mov r30,r25
3269 1950 FF27 clr r31
3270 1952 EE0F add r30,r30
3271 1954 FF1F adc r31,r31
3272 1956 E050 subi r30,lo8(-(PPM_in))
3273 1958 F040 sbci r31,hi8(-(PPM_in))
3274 195a 0190 ld __tmp_reg__,Z+
3275 195c F081 ld r31,Z
3276 195e E02D mov r30,__tmp_reg__
3277 1960 E158 subi r30,lo8(-(127))
3278 1962 FF4F sbci r31,hi8(-(127))
3279 1964 EF3F cpi r30,255
3280 1966 F105 cpc r31,__zero_reg__
3281 1968 01F0 breq .L194
3282 196a 04F0 brlt .L194
3283 196c EFEF ldi r30,lo8(255)
3284 196e F0E0 ldi r31,hi8(255)
3285 1970 00C0 rjmp .L195
3286 .L194:
3287 1972 F7FF sbrs r31,7
3288 1974 00C0 rjmp .L195
3289 1976 E0E0 ldi r30,lo8(0)
3290 1978 F0E0 ldi r31,hi8(0)
3291 .L195:
3292 197a 9931 cpi r25,lo8(25)
3293 197c 01F4 brne .L197
3294 197e EC93 st X,r30
3295 1980 00C0 rjmp .L193
3296 .L197:
3297 1982 4C91 ld r20,X
3298 1984 242F mov r18,r20
3299 1986 3327 clr r19
3300 1988 E217 cp r30,r18
3301 198a F307 cpc r31,r19
3302 198c 01F0 breq .L193
3303 198e CF01 movw r24,r30
3304 1990 821B sub r24,r18
3305 1992 930B sbc r25,r19
3306 1994 97FD sbrc r25,7
3307 1996 0396 adiw r24,3
3308 .L200:
3309 1998 9595 asr r25
3310 199a 8795 ror r24
3311 199c 9595 asr r25
3312 199e 8795 ror r24
3313 19a0 242F mov r18,r20
3314 19a2 280F add r18,r24
3315 19a4 2C93 st X,r18
3316 19a6 822F mov r24,r18
3317 19a8 9927 clr r25
3318 19aa E817 cp r30,r24
3319 19ac F907 cpc r31,r25
3320 19ae 04F4 brge .L201
3321 19b0 2150 subi r18,lo8(-(-1))
3322 19b2 00C0 rjmp .L323
3323 .L201:
3324 19b4 2F5F subi r18,lo8(-(1))
3325 .L323:
3326 19b6 2C93 st X,r18
3327 .L193:
3328 19b8 5150 subi r21,lo8(-(-1))
3329 19ba 1196 adiw r26,1
3330 19bc 57FF sbrs r21,7
3331 19be 00C0 rjmp .L203
3332 19c0 8091 0000 lds r24,EE_Parameter+15
3333 19c4 883F cpi r24,lo8(-8)
3334 19c6 00F0 brlo .L324
3335 19c8 EFEF ldi r30,lo8(255)
3336 19ca F0E0 ldi r31,hi8(255)
3337 19cc E81B sub r30,r24
3338 19ce F109 sbc r31,__zero_reg__
3339 19d0 E050 subi r30,lo8(-(Poti))
3340 19d2 F040 sbci r31,hi8(-(Poti))
3341 19d4 8081 ld r24,Z
3342 .L324:
3343 19d6 8093 0000 sts Parameter_Luftdruck_D,r24
3344 19da 8091 0000 lds r24,Parameter_Luftdruck_D
3345 19de 8823 tst r24
3346 19e0 01F0 breq .L207
3347 19e2 8436 cpi r24,lo8(100)
3348 19e4 00F0 brlo .L207
3349 19e6 84E6 ldi r24,lo8(100)
3350 19e8 8093 0000 sts Parameter_Luftdruck_D,r24
3351 .L207:
3352 19ec 8091 0000 lds r24,EE_Parameter+17
3353 19f0 883F cpi r24,lo8(-8)
3354 19f2 00F0 brlo .L325
3355 19f4 EFEF ldi r30,lo8(255)
3356 19f6 F0E0 ldi r31,hi8(255)
3357 19f8 E81B sub r30,r24
3358 19fa F109 sbc r31,__zero_reg__
3359 19fc E050 subi r30,lo8(-(Poti))
3360 19fe F040 sbci r31,hi8(-(Poti))
3361 1a00 8081 ld r24,Z
3362 .L325:
3363 1a02 8093 0000 sts Parameter_Hoehe_P,r24
3364 1a06 8091 0000 lds r24,Parameter_Hoehe_P
3365 1a0a 8823 tst r24
3366 1a0c 01F0 breq .L212
3367 1a0e 8436 cpi r24,lo8(100)
3368 1a10 00F0 brlo .L212
3369 1a12 84E6 ldi r24,lo8(100)
3370 1a14 8093 0000 sts Parameter_Hoehe_P,r24
3371 .L212:
3372 1a18 8091 0000 lds r24,EE_Parameter+30
3373 1a1c 883F cpi r24,lo8(-8)
3374 1a1e 00F0 brlo .L326
3375 1a20 EFEF ldi r30,lo8(255)
3376 1a22 F0E0 ldi r31,hi8(255)
3377 1a24 E81B sub r30,r24
3378 1a26 F109 sbc r31,__zero_reg__
3379 1a28 E050 subi r30,lo8(-(Poti))
3380 1a2a F040 sbci r31,hi8(-(Poti))
3381 1a2c 8081 ld r24,Z
3382 .L326:
3383 1a2e 8093 0000 sts Parameter_Gyro_P,r24
3384 1a32 8091 0000 lds r24,Parameter_Gyro_P
3385 1a36 8B30 cpi r24,lo8(11)
3386 1a38 00F4 brsh .L216
3387 1a3a 8AE0 ldi r24,lo8(10)
3388 1a3c 00C0 rjmp .L327
3389 .L216:
3390 1a3e 8F3F cpi r24,lo8(-1)
3391 1a40 01F4 brne .L217
3392 .L327:
3393 1a42 8093 0000 sts Parameter_Gyro_P,r24
3394 .L217:
3395 1a46 8091 0000 lds r24,EE_Parameter+75
3396 1a4a 883F cpi r24,lo8(-8)
3397 1a4c 00F0 brlo .L328
3398 1a4e EFEF ldi r30,lo8(255)
3399 1a50 F0E0 ldi r31,hi8(255)
3400 1a52 E81B sub r30,r24
3401 1a54 F109 sbc r31,__zero_reg__
3402 1a56 E050 subi r30,lo8(-(Poti))
3403 1a58 F040 sbci r31,hi8(-(Poti))
3404 1a5a 8081 ld r24,Z
3405 .L328:
3406 1a5c 8093 0000 sts Parameter_J16Timing,r24
3407 1a60 8091 0000 lds r24,Parameter_J16Timing
3408 1a64 8630 cpi r24,lo8(6)
3409 1a66 00F4 brsh .L221
3410 1a68 85E0 ldi r24,lo8(5)
3411 1a6a 00C0 rjmp .L329
3412 .L221:
3413 1a6c 8F3F cpi r24,lo8(-1)
3414 1a6e 01F4 brne .L222
3415 .L329:
3416 1a70 8093 0000 sts Parameter_J16Timing,r24
3417 .L222:
3418 1a74 8091 0000 lds r24,EE_Parameter+77
3419 1a78 883F cpi r24,lo8(-8)
3420 1a7a 00F0 brlo .L330
3421 1a7c EFEF ldi r30,lo8(255)
3422 1a7e F0E0 ldi r31,hi8(255)
3423 1a80 E81B sub r30,r24
3424 1a82 F109 sbc r31,__zero_reg__
3425 1a84 E050 subi r30,lo8(-(Poti))
3426 1a86 F040 sbci r31,hi8(-(Poti))
3427 1a88 8081 ld r24,Z
3428 .L330:
3429 1a8a 8093 0000 sts Parameter_J17Timing,r24
3430 1a8e 8091 0000 lds r24,Parameter_J17Timing
3431 1a92 8630 cpi r24,lo8(6)
3432 1a94 00F4 brsh .L226
3433 1a96 85E0 ldi r24,lo8(5)
3434 1a98 00C0 rjmp .L331
3435 .L226:
3436 1a9a 8F3F cpi r24,lo8(-1)
3437 1a9c 01F4 brne .L227
3438 .L331:
3439 1a9e 8093 0000 sts Parameter_J17Timing,r24
3440 .L227:
3441 1aa2 8091 0000 lds r24,EE_Parameter+56
3442 1aa6 873F cpi r24,lo8(-9)
3443 1aa8 01F4 brne .L229
3444 1aaa 4299 sbic 40-0x20,2
3445 1aac 00C0 rjmp .L362
3446 1aae 00C0 rjmp .L234
3447 .L229:
3448 1ab0 863F cpi r24,lo8(-10)
3449 1ab2 01F4 brne .L233
3450 1ab4 439B sbis 40-0x20,3
3451 1ab6 00C0 rjmp .L234
3452 .L362:
3453 1ab8 8CE8 ldi r24,lo8(-116)
3454 1aba 00C0 rjmp .L332
3455 .L234:
3456 1abc 86E4 ldi r24,lo8(70)
3457 1abe 00C0 rjmp .L332
3458 .L233:
3459 1ac0 883F cpi r24,lo8(-8)
3460 1ac2 00F0 brlo .L332
3461 1ac4 EFEF ldi r30,lo8(255)
3462 1ac6 F0E0 ldi r31,hi8(255)
3463 1ac8 E81B sub r30,r24
3464 1aca F109 sbc r31,__zero_reg__
3465 1acc E050 subi r30,lo8(-(Poti))
3466 1ace F040 sbci r31,hi8(-(Poti))
3467 1ad0 8081 ld r24,Z
3468 .L332:
3469 1ad2 8093 0000 sts Parameter_Servo3,r24
3470 1ad6 8091 0000 lds r24,EE_Parameter+57
3471 1ada 873F cpi r24,lo8(-9)
3472 1adc 01F4 brne .L239
3473 1ade 4299 sbic 40-0x20,2
3474 1ae0 00C0 rjmp .L363
3475 1ae2 00C0 rjmp .L244
3476 .L239:
3477 1ae4 863F cpi r24,lo8(-10)
3478 1ae6 01F4 brne .L243
3479 1ae8 439B sbis 40-0x20,3
3480 1aea 00C0 rjmp .L244
3481 .L363:
3482 1aec 8CE8 ldi r24,lo8(-116)
3483 1aee 00C0 rjmp .L333
3484 .L244:
3485 1af0 86E4 ldi r24,lo8(70)
3486 1af2 00C0 rjmp .L333
3487 .L243:
3488 1af4 883F cpi r24,lo8(-8)
3489 1af6 00F0 brlo .L333
3490 1af8 EFEF ldi r30,lo8(255)
3491 1afa F0E0 ldi r31,hi8(255)
3492 1afc E81B sub r30,r24
3493 1afe F109 sbc r31,__zero_reg__
3494 1b00 E050 subi r30,lo8(-(Poti))
3495 1b02 F040 sbci r31,hi8(-(Poti))
3496 1b04 8081 ld r24,Z
3497 .L333:
3498 1b06 8093 0000 sts Parameter_Servo4,r24
3499 1b0a 8091 0000 lds r24,EE_Parameter+58
3500 1b0e 883F cpi r24,lo8(-8)
3501 1b10 00F0 brlo .L334
3502 1b12 EFEF ldi r30,lo8(255)
3503 1b14 F0E0 ldi r31,hi8(255)
3504 1b16 E81B sub r30,r24
3505 1b18 F109 sbc r31,__zero_reg__
3506 1b1a E050 subi r30,lo8(-(Poti))
3507 1b1c F040 sbci r31,hi8(-(Poti))
3508 1b1e 8081 ld r24,Z
3509 .L334:
3510 1b20 8093 0000 sts Parameter_Servo5,r24
3511 1b24 8091 0000 lds r24,EE_Parameter+16
3512 1b28 883F cpi r24,lo8(-8)
3513 1b2a 00F0 brlo .L335
3514 1b2c EFEF ldi r30,lo8(255)
3515 1b2e F0E0 ldi r31,hi8(255)
3516 1b30 E81B sub r30,r24
3517 1b32 F109 sbc r31,__zero_reg__
3518 1b34 E050 subi r30,lo8(-(Poti))
3519 1b36 F040 sbci r31,hi8(-(Poti))
3520 1b38 8081 ld r24,Z
3521 .L335:
3522 1b3a 8093 0000 sts Parameter_HoehenSchalter,r24
3523 1b3e 8091 0000 lds r24,EE_Parameter+19
3524 1b42 883F cpi r24,lo8(-8)
3525 1b44 00F0 brlo .L336
3526 1b46 EFEF ldi r30,lo8(255)
3527 1b48 F0E0 ldi r31,hi8(255)
3528 1b4a E81B sub r30,r24
3529 1b4c F109 sbc r31,__zero_reg__
3530 1b4e E050 subi r30,lo8(-(Poti))
3531 1b50 F040 sbci r31,hi8(-(Poti))
3532 1b52 8081 ld r24,Z
3533 .L336:
3534 1b54 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
3535 1b58 8091 0000 lds r24,EE_Parameter+21
3536 1b5c 883F cpi r24,lo8(-8)
3537 1b5e 00F0 brlo .L337
3538 1b60 EFEF ldi r30,lo8(255)
3539 1b62 F0E0 ldi r31,hi8(255)
3540 1b64 E81B sub r30,r24
3541 1b66 F109 sbc r31,__zero_reg__
3542 1b68 E050 subi r30,lo8(-(Poti))
3543 1b6a F040 sbci r31,hi8(-(Poti))
3544 1b6c 8081 ld r24,Z
3545 .L337:
3546 1b6e 8093 0000 sts Parameter_Hoehe_GPS_Z,r24
3547 1b72 8091 0000 lds r24,EE_Parameter+29
3548 1b76 883F cpi r24,lo8(-8)
3549 1b78 00F0 brlo .L338
3550 1b7a EFEF ldi r30,lo8(255)
3551 1b7c F0E0 ldi r31,hi8(255)
3552 1b7e E81B sub r30,r24
3553 1b80 F109 sbc r31,__zero_reg__
3554 1b82 E050 subi r30,lo8(-(Poti))
3555 1b84 F040 sbci r31,hi8(-(Poti))
3556 1b86 8081 ld r24,Z
3557 .L338:
3558 1b88 8093 0000 sts Parameter_KompassWirkung,r24
3559 1b8c 8091 0000 lds r24,EE_Parameter+31
3560 1b90 883F cpi r24,lo8(-8)
3561 1b92 00F0 brlo .L339
3562 1b94 EFEF ldi r30,lo8(255)
3563 1b96 F0E0 ldi r31,hi8(255)
3564 1b98 E81B sub r30,r24
3565 1b9a F109 sbc r31,__zero_reg__
3566 1b9c E050 subi r30,lo8(-(Poti))
3567 1b9e F040 sbci r31,hi8(-(Poti))
3568 1ba0 8081 ld r24,Z
3569 .L339:
3570 1ba2 8093 0000 sts Parameter_Gyro_I,r24
3571 1ba6 8091 0000 lds r24,EE_Parameter+32
3572 1baa 883F cpi r24,lo8(-8)
3573 1bac 00F0 brlo .L340
3574 1bae EFEF ldi r30,lo8(255)
3575 1bb0 F0E0 ldi r31,hi8(255)
3576 1bb2 E81B sub r30,r24
3577 1bb4 F109 sbc r31,__zero_reg__
3578 1bb6 E050 subi r30,lo8(-(Poti))
3579 1bb8 F040 sbci r31,hi8(-(Poti))
3580 1bba 8081 ld r24,Z
3581 .L340:
3582 1bbc 8093 0000 sts Parameter_Gyro_D,r24
3583 1bc0 8091 0000 lds r24,EE_Parameter+33
3584 1bc4 883F cpi r24,lo8(-8)
3585 1bc6 00F0 brlo .L341
3586 1bc8 EFEF ldi r30,lo8(255)
3587 1bca F0E0 ldi r31,hi8(255)
3588 1bcc E81B sub r30,r24
3589 1bce F109 sbc r31,__zero_reg__
3590 1bd0 E050 subi r30,lo8(-(Poti))
3591 1bd2 F040 sbci r31,hi8(-(Poti))
3592 1bd4 8081 ld r24,Z
3593 .L341:
3594 1bd6 8093 0000 sts Parameter_Gyro_Gier_P,r24
3595 1bda 8091 0000 lds r24,EE_Parameter+34
3596 1bde 883F cpi r24,lo8(-8)
3597 1be0 00F0 brlo .L342
3598 1be2 EFEF ldi r30,lo8(255)
3599 1be4 F0E0 ldi r31,hi8(255)
3600 1be6 E81B sub r30,r24
3601 1be8 F109 sbc r31,__zero_reg__
3602 1bea E050 subi r30,lo8(-(Poti))
3603 1bec F040 sbci r31,hi8(-(Poti))
3604 1bee 8081 ld r24,Z
3605 .L342:
3606 1bf0 8093 0000 sts Parameter_Gyro_Gier_I,r24
3607 1bf4 8091 0000 lds r24,EE_Parameter+40
3608 1bf8 883F cpi r24,lo8(-8)
3609 1bfa 00F0 brlo .L343
3610 1bfc EFEF ldi r30,lo8(255)
3611 1bfe F0E0 ldi r31,hi8(255)
3612 1c00 E81B sub r30,r24
3613 1c02 F109 sbc r31,__zero_reg__
3614 1c04 E050 subi r30,lo8(-(Poti))
3615 1c06 F040 sbci r31,hi8(-(Poti))
3616 1c08 8081 ld r24,Z
3617 .L343:
3618 1c0a 8093 0000 sts Parameter_I_Faktor,r24
3619 1c0e 8091 0000 lds r24,EE_Parameter+41
3620 1c12 883F cpi r24,lo8(-8)
3621 1c14 00F0 brlo .L344
3622 1c16 EFEF ldi r30,lo8(255)
3623 1c18 F0E0 ldi r31,hi8(255)
3624 1c1a E81B sub r30,r24
3625 1c1c F109 sbc r31,__zero_reg__
3626 1c1e E050 subi r30,lo8(-(Poti))
3627 1c20 F040 sbci r31,hi8(-(Poti))
3628 1c22 8081 ld r24,Z
3629 .L344:
3630 1c24 8093 0000 sts Parameter_UserParam1,r24
3631 1c28 8091 0000 lds r24,EE_Parameter+42
3632 1c2c 883F cpi r24,lo8(-8)
3633 1c2e 00F0 brlo .L345
3634 1c30 EFEF ldi r30,lo8(255)
3635 1c32 F0E0 ldi r31,hi8(255)
3636 1c34 E81B sub r30,r24
3637 1c36 F109 sbc r31,__zero_reg__
3638 1c38 E050 subi r30,lo8(-(Poti))
3639 1c3a F040 sbci r31,hi8(-(Poti))
3640 1c3c 8081 ld r24,Z
3641 .L345:
3642 1c3e 8093 0000 sts Parameter_UserParam2,r24
3643 1c42 8091 0000 lds r24,EE_Parameter+43
3644 1c46 883F cpi r24,lo8(-8)
3645 1c48 00F0 brlo .L346
3646 1c4a EFEF ldi r30,lo8(255)
3647 1c4c F0E0 ldi r31,hi8(255)
3648 1c4e E81B sub r30,r24
3649 1c50 F109 sbc r31,__zero_reg__
3650 1c52 E050 subi r30,lo8(-(Poti))
3651 1c54 F040 sbci r31,hi8(-(Poti))
3652 1c56 8081 ld r24,Z
3653 .L346:
3654 1c58 8093 0000 sts Parameter_UserParam3,r24
3655 1c5c 8091 0000 lds r24,EE_Parameter+44
3656 1c60 883F cpi r24,lo8(-8)
3657 1c62 00F0 brlo .L347
3658 1c64 EFEF ldi r30,lo8(255)
3659 1c66 F0E0 ldi r31,hi8(255)
3660 1c68 E81B sub r30,r24
3661 1c6a F109 sbc r31,__zero_reg__
3662 1c6c E050 subi r30,lo8(-(Poti))
3663 1c6e F040 sbci r31,hi8(-(Poti))
3664 1c70 8081 ld r24,Z
3665 .L347:
3666 1c72 8093 0000 sts Parameter_UserParam4,r24
3667 1c76 8091 0000 lds r24,EE_Parameter+70
3668 1c7a 883F cpi r24,lo8(-8)
3669 1c7c 00F0 brlo .L348
3670 1c7e EFEF ldi r30,lo8(255)
3671 1c80 F0E0 ldi r31,hi8(255)
3672 1c82 E81B sub r30,r24
3673 1c84 F109 sbc r31,__zero_reg__
3674 1c86 E050 subi r30,lo8(-(Poti))
3675 1c88 F040 sbci r31,hi8(-(Poti))
3676 1c8a 8081 ld r24,Z
3677 .L348:
3678 1c8c 8093 0000 sts Parameter_UserParam5,r24
3679 1c90 8091 0000 lds r24,EE_Parameter+71
3680 1c94 883F cpi r24,lo8(-8)
3681 1c96 00F0 brlo .L349
3682 1c98 EFEF ldi r30,lo8(255)
3683 1c9a F0E0 ldi r31,hi8(255)
3684 1c9c E81B sub r30,r24
3685 1c9e F109 sbc r31,__zero_reg__
3686 1ca0 E050 subi r30,lo8(-(Poti))
3687 1ca2 F040 sbci r31,hi8(-(Poti))
3688 1ca4 8081 ld r24,Z
3689 .L349:
3690 1ca6 8093 0000 sts Parameter_UserParam6,r24
3691 1caa 8091 0000 lds r24,EE_Parameter+72
3692 1cae 883F cpi r24,lo8(-8)
3693 1cb0 00F0 brlo .L350
3694 1cb2 EFEF ldi r30,lo8(255)
3695 1cb4 F0E0 ldi r31,hi8(255)
3696 1cb6 E81B sub r30,r24
3697 1cb8 F109 sbc r31,__zero_reg__
3698 1cba E050 subi r30,lo8(-(Poti))
3699 1cbc F040 sbci r31,hi8(-(Poti))
3700 1cbe 8081 ld r24,Z
3701 .L350:
3702 1cc0 8093 0000 sts Parameter_UserParam7,r24
3703 1cc4 8091 0000 lds r24,EE_Parameter+73
3704 1cc8 883F cpi r24,lo8(-8)
3705 1cca 00F0 brlo .L351
3706 1ccc EFEF ldi r30,lo8(255)
3707 1cce F0E0 ldi r31,hi8(255)
3708 1cd0 E81B sub r30,r24
3709 1cd2 F109 sbc r31,__zero_reg__
3710 1cd4 E050 subi r30,lo8(-(Poti))
3711 1cd6 F040 sbci r31,hi8(-(Poti))
3712 1cd8 8081 ld r24,Z
3713 .L351:
3714 1cda 8093 0000 sts Parameter_UserParam8,r24
3715 1cde 8091 0000 lds r24,EE_Parameter+45
3716 1ce2 883F cpi r24,lo8(-8)
3717 1ce4 00F0 brlo .L352
3718 1ce6 EFEF ldi r30,lo8(255)
3719 1ce8 F0E0 ldi r31,hi8(255)
3720 1cea E81B sub r30,r24
3721 1cec F109 sbc r31,__zero_reg__
3722 1cee E050 subi r30,lo8(-(Poti))
3723 1cf0 F040 sbci r31,hi8(-(Poti))
3724 1cf2 8081 ld r24,Z
3725 .L352:
3726 1cf4 8093 0000 sts Parameter_ServoNickControl,r24
3727 1cf8 8091 0000 lds r24,EE_Parameter+49
3728 1cfc 883F cpi r24,lo8(-8)
3729 1cfe 00F0 brlo .L353
3730 1d00 EFEF ldi r30,lo8(255)
3731 1d02 F0E0 ldi r31,hi8(255)
3732 1d04 E81B sub r30,r24
3733 1d06 F109 sbc r31,__zero_reg__
3734 1d08 E050 subi r30,lo8(-(Poti))
3735 1d0a F040 sbci r31,hi8(-(Poti))
3736 1d0c 8081 ld r24,Z
3737 .L353:
3738 1d0e 8093 0000 sts Parameter_ServoRollControl,r24
3739 1d12 8091 0000 lds r24,EE_Parameter+59
3740 1d16 883F cpi r24,lo8(-8)
3741 1d18 00F0 brlo .L354
3742 1d1a EFEF ldi r30,lo8(255)
3743 1d1c F0E0 ldi r31,hi8(255)
3744 1d1e E81B sub r30,r24
3745 1d20 F109 sbc r31,__zero_reg__
3746 1d22 E050 subi r30,lo8(-(Poti))
3747 1d24 F040 sbci r31,hi8(-(Poti))
3748 1d26 8081 ld r24,Z
3749 .L354:
3750 1d28 8093 0000 sts Parameter_LoopGasLimit,r24
3751 1d2c 8091 0000 lds r24,EE_Parameter+62
3752 1d30 883F cpi r24,lo8(-8)
3753 1d32 00F0 brlo .L355
3754 1d34 EFEF ldi r30,lo8(255)
3755 1d36 F0E0 ldi r31,hi8(255)
3756 1d38 E81B sub r30,r24
3757 1d3a F109 sbc r31,__zero_reg__
3758 1d3c E050 subi r30,lo8(-(Poti))
3759 1d3e F040 sbci r31,hi8(-(Poti))
3760 1d40 8081 ld r24,Z
3761 .L355:
3762 1d42 8093 0000 sts Parameter_AchsKopplung1,r24
3763 1d46 8091 0000 lds r24,EE_Parameter+63
3764 1d4a 883F cpi r24,lo8(-8)
3765 1d4c 00F0 brlo .L356
3766 1d4e EFEF ldi r30,lo8(255)
3767 1d50 F0E0 ldi r31,hi8(255)
3768 1d52 E81B sub r30,r24
3769 1d54 F109 sbc r31,__zero_reg__
3770 1d56 E050 subi r30,lo8(-(Poti))
3771 1d58 F040 sbci r31,hi8(-(Poti))
3772 1d5a 8081 ld r24,Z
3773 .L356:
3774 1d5c 8093 0000 sts Parameter_AchsKopplung2,r24
3775 1d60 8091 0000 lds r24,EE_Parameter+64
3776 1d64 883F cpi r24,lo8(-8)
3777 1d66 00F0 brlo .L357
3778 1d68 EFEF ldi r30,lo8(255)
3779 1d6a F0E0 ldi r31,hi8(255)
3780 1d6c E81B sub r30,r24
3781 1d6e F109 sbc r31,__zero_reg__
3782 1d70 E050 subi r30,lo8(-(Poti))
3783 1d72 F040 sbci r31,hi8(-(Poti))
3784 1d74 8081 ld r24,Z
3785 .L357:
3786 1d76 8093 0000 sts Parameter_CouplingYawCorrection,r24
3787 1d7a 8091 0000 lds r24,EE_Parameter+104
3788 1d7e 883F cpi r24,lo8(-8)
3789 1d80 00F0 brlo .L358
3790 1d82 EFEF ldi r30,lo8(255)
3791 1d84 F0E0 ldi r31,hi8(255)
3792 1d86 E81B sub r30,r24
3793 1d88 F109 sbc r31,__zero_reg__
3794 1d8a E050 subi r30,lo8(-(Poti))
3795 1d8c F040 sbci r31,hi8(-(Poti))
3796 1d8e 8081 ld r24,Z
3797 .L358:
3798 1d90 8093 0000 sts Parameter_MaximumAltitude,r24
3799 1d94 9091 0000 lds r25,NC_To_FC_MaxAltitude
3800 1d98 9923 tst r25
3801 1d9a 01F0 breq .L301
3802 1d9c 8091 0000 lds r24,Parameter_MaximumAltitude
3803 1da0 9817 cp r25,r24
3804 1da2 00F0 brlo .L300
3805 .L301:
3806 1da4 8091 0000 lds r24,Parameter_MaximumAltitude
3807 1da8 8823 tst r24
3808 1daa 01F4 brne .L299
3809 .L300:
3810 1dac 9093 0000 sts Parameter_MaximumAltitude,r25
3811 .L299:
3812 1db0 8091 0000 lds r24,EE_Parameter+13
3813 1db4 8093 0000 sts Parameter_GlobalConfig,r24
3814 1db8 8091 0000 lds r24,EE_Parameter+110
3815 1dbc 8093 0000 sts Parameter_ExtraConfig,r24
3816 1dc0 8091 0000 lds r24,EE_Parameter+69
3817 1dc4 883F cpi r24,lo8(-8)
3818 1dc6 00F0 brlo .L359
3819 1dc8 EFEF ldi r30,lo8(255)
3820 1dca F0E0 ldi r31,hi8(255)
3821 1dcc E81B sub r30,r24
3822 1dce F109 sbc r31,__zero_reg__
3823 1dd0 E050 subi r30,lo8(-(Poti))
3824 1dd2 F040 sbci r31,hi8(-(Poti))
3825 1dd4 8081 ld r24,Z
3826 .L359:
3827 1dd6 8093 0000 sts Parameter_DynamicStability,r24
3828 1dda 8091 0000 lds r24,EE_Parameter+97
3829 1dde 883F cpi r24,lo8(-8)
3830 1de0 00F0 brlo .L360
3831 1de2 EFEF ldi r30,lo8(255)
3832 1de4 F0E0 ldi r31,hi8(255)
3833 1de6 E81B sub r30,r24
3834 1de8 F109 sbc r31,__zero_reg__
3835 1dea E050 subi r30,lo8(-(Poti))
3836 1dec F040 sbci r31,hi8(-(Poti))
3837 1dee 8081 ld r24,Z
3838 .L360:
3839 1df0 8093 0000 sts Parameter_ExternalControl,r24
3840 1df4 8091 0000 lds r24,Parameter_I_Faktor
3841 1df8 282F mov r18,r24
3842 1dfa 3327 clr r19
3843 1dfc 2F5F subi r18,lo8(-(1))
3844 1dfe 3F4F sbci r19,hi8(-(1))
3845 1e00 8CE3 ldi r24,lo8(10300)
3846 1e02 98E2 ldi r25,hi8(10300)
3847 1e04 B901 movw r22,r18
3848 1e06 0E94 0000 call __divmodhi4
3849 1e0a 7093 0000 sts (Ki)+1,r23
3850 1e0e 6093 0000 sts Ki,r22
3851 1e12 8091 0000 lds r24,EE_Parameter+27
3852 1e16 8093 0000 sts MAX_GAS,r24
3853 1e1a 8091 0000 lds r24,EE_Parameter+26
3854 1e1e 8093 0000 sts MIN_GAS,r24
3855 1e22 9091 0000 lds r25,EE_Parameter+99
3856 1e26 9333 cpi r25,lo8(51)
3857 1e28 00F4 brsh .+2
3858 1e2a 00C0 rjmp .L306
3859 1e2c 81E0 ldi r24,lo8(1)
3860 1e2e 8093 0000 sts CareFree,r24
3861 1e32 983F cpi r25,lo8(-8)
3862 1e34 00F0 brlo .L307
3863 1e36 EFEF ldi r30,lo8(255)
3864 1e38 F0E0 ldi r31,hi8(255)
3865 1e3a E91B sub r30,r25
3866 1e3c F109 sbc r31,__zero_reg__
3867 1e3e E050 subi r30,lo8(-(Poti))
3868 1e40 F040 sbci r31,hi8(-(Poti))
3869 1e42 8081 ld r24,Z
3870 1e44 8233 cpi r24,lo8(50)
3871 1e46 00F4 brsh .L307
3872 1e48 1092 0000 sts CareFree,__zero_reg__
3873 .L307:
3874 1e4c 8091 0000 lds r24,carefree_old
3875 1e50 2091 0000 lds r18,CareFree
3876 1e54 8217 cp r24,r18
3877 1e56 01F0 breq .L308
3878 1e58 8330 cpi r24,lo8(3)
3879 1e5a 00F4 brsh .L309
3880 1e5c 3091 0000 lds r19,SpeakHoTT
3881 1e60 2223 tst r18
3882 1e62 01F0 breq .L310
3883 1e64 8CED ldi r24,lo8(1500)
3884 1e66 95E0 ldi r25,hi8(1500)
3885 1e68 9093 0000 sts (beeptime)+1,r25
3886 1e6c 8093 0000 sts beeptime,r24
3887 1e70 3323 tst r19
3888 1e72 01F4 brne .L312
3889 1e74 8EE2 ldi r24,lo8(46)
3890 1e76 00C0 rjmp .L361
3891 .L310:
3892 1e78 88EC ldi r24,lo8(200)
3893 1e7a 90E0 ldi r25,hi8(200)
3894 1e7c 9093 0000 sts (beeptime)+1,r25
3895 1e80 8093 0000 sts beeptime,r24
3896 1e84 3323 tst r19
3897 1e86 01F4 brne .L312
3898 1e88 87E1 ldi r24,lo8(23)
3899 .L361:
3900 1e8a 8093 0000 sts SpeakHoTT,r24
3901 .L312:
3902 1e8e 85E0 ldi r24,lo8(5)
3903 1e90 8093 0000 sts NeueKompassRichtungMerken,r24
3904 1e94 2093 0000 sts carefree_old,r18
3905 1e98 00C0 rjmp .L308
3906 .L309:
3907 1e9a 8150 subi r24,lo8(-(-1))
3908 1e9c 8093 0000 sts carefree_old,r24
3909 .L308:
3910 1ea0 8091 0000 lds r24,FromNaviCtrl+7
3911 1ea4 9091 0000 lds r25,(FromNaviCtrl+7)+1
3912 1ea8 97FF sbrs r25,7
3913 1eaa 00C0 rjmp .L316
3914 1eac 8091 0000 lds r24,CareFree
3915 1eb0 8823 tst r24
3916 1eb2 01F0 breq .L316
3917 1eb4 8091 0000 lds r24,VersionInfo+5
3918 1eb8 8068 ori r24,lo8(-128)
3919 1eba 8093 0000 sts VersionInfo+5,r24
3920 1ebe 00C0 rjmp .L316
3921 .L306:
3922 1ec0 1092 0000 sts CareFree,__zero_reg__
3923 1ec4 8AE0 ldi r24,lo8(10)
3924 1ec6 8093 0000 sts carefree_old,r24
3925 .L316:
3926 1eca 8091 0000 lds r24,FromNaviCtrl+7
3927 1ece 9091 0000 lds r25,(FromNaviCtrl+7)+1
3928 1ed2 97FF sbrs r25,7
3929 1ed4 00C0 rjmp .L317
3930 1ed6 8091 0000 lds r24,MotorenEin
3931 1eda 8823 tst r24
3932 1edc 01F0 breq .L317
3933 1ede 8091 0000 lds r24,CareFree
3934 1ee2 8823 tst r24
3935 1ee4 01F0 breq .L317
3936 1ee6 8091 0000 lds r24,BeepMuster
3937 1eea 9091 0000 lds r25,(BeepMuster)+1
3938 1eee 8F5F subi r24,lo8(-1)
3939 1ef0 9F4F sbci r25,hi8(-1)
3940 1ef2 01F4 brne .L317
3941 1ef4 88E9 ldi r24,lo8(15000)
3942 1ef6 9AE3 ldi r25,hi8(15000)
3943 1ef8 9093 0000 sts (beeptime)+1,r25
3944 1efc 8093 0000 sts beeptime,r24
3945 1f00 80E0 ldi r24,lo8(-23552)
3946 1f02 94EA ldi r25,hi8(-23552)
3947 1f04 9093 0000 sts (BeepMuster)+1,r25
3948 1f08 8093 0000 sts BeepMuster,r24
3949 1f0c 1092 0000 sts CareFree,__zero_reg__
3950 .L317:
3951 1f10 8091 0000 lds r24,CareFree
3952 1f14 8823 tst r24
3953 1f16 01F0 breq .L318
3954 1f18 8091 0000 lds r24,FC_StatusFlags2
3955 1f1c 8160 ori r24,lo8(1)
3956 1f1e 8093 0000 sts FC_StatusFlags2,r24
3957 1f22 8091 0000 lds r24,Parameter_AchsKopplung1
3958 1f26 823D cpi r24,lo8(-46)
3959 1f28 00F4 brsh .L190
3960 1f2a 825E subi r24,lo8(-(30))
3961 1f2c 8093 0000 sts Parameter_AchsKopplung1,r24
3962 1f30 00C0 rjmp .L190
3963 .L318:
3964 1f32 8091 0000 lds r24,FC_StatusFlags2
3965 1f36 8E7F andi r24,lo8(-2)
3966 1f38 8093 0000 sts FC_StatusFlags2,r24
3967 .L190:
3968 /* epilogue: frame size=0 */
3969 1f3c DF91 pop r29
3970 1f3e CF91 pop r28
3971 1f40 0895 ret
3972 /* epilogue end (size=3) */
3973 /* function ParameterZuordnung size 772 (767) */
3975 .lcomm sollGier.0,4
3976 .lcomm tmp_long.1,4
3977 .lcomm tmp_long2.2,4
3978 .lcomm IntegralFehlerNick.3,4
3979 .lcomm IntegralFehlerRoll.4,4
3980 .lcomm RcLostTimer.5,2
3981 .lcomm delay_neutral.6,1
3982 .lcomm delay_einschalten.7,1
3983 .lcomm delay_ausschalten.8,1
3984 .lcomm move_safety_switch.9,1
3985 .lcomm ausgleichNick.10,4
3986 .lcomm ausgleichRoll.11,4
3987 .lcomm stick_nick.12,2
3988 .lcomm stick_roll.13,2
3989 .lcomm cnt.14,2
3990 .lcomm last_n_p.15,1
3991 .lcomm last_n_n.16,1
3992 .lcomm last_r_p.17,1
3993 .lcomm last_r_n.18,1
3994 .lcomm MittelIntegralNick_Alt.19,4
3995 .lcomm MittelIntegralRoll_Alt.20,4
3996 .lcomm HeightTrimming.21,2
3997 .lcomm FilterHCGas.22,2
3998 .lcomm HoverGasFilter.23,4
3999 .data
4002 delay.24:
4003 004f 64 .byte 100
4004 .lcomm BaroAtUpperLimit.25,1
4005 .lcomm BaroAtLowerLimit.26,1
4006 .text
4007 .global MotorRegler
4009 MotorRegler:
4010 /* prologue: frame size=23 */
4011 1f42 A7E1 ldi r26,lo8(23)
4012 1f44 B0E0 ldi r27,hi8(23)
4013 1f46 E0E0 ldi r30,pm_lo8(1f)
4014 1f48 F0E0 ldi r31,pm_hi8(1f)
4015 1f4a 0C94 0000 jmp __prologue_saves__+0
4016 1:
4017 /* prologue end (size=6) */
4018 1f4e 0E94 0000 call Mittelwert
4019 1f52 8091 0000 lds r24,FC_StatusFlags
4020 1f56 9927 clr r25
4021 1f58 8471 andi r24,lo8(20)
4022 1f5a 9070 andi r25,hi8(20)
4023 1f5c 892B or r24,r25
4024 1f5e 01F4 brne .L365
4025 1f60 8091 0000 lds r24,EE_Parameter+111
4026 1f64 82FF sbrs r24,2
4027 1f66 00C0 rjmp .L366
4028 1f68 8091 0000 lds r24,HoverGas
4029 1f6c 9091 0000 lds r25,(HoverGas)+1
4030 1f70 0097 sbiw r24,0
4031 1f72 01F0 breq .L367
4032 1f74 02E0 ldi r16,hi8(600)
4033 1f76 8835 cpi r24,lo8(600)
4034 1f78 9007 cpc r25,r16
4035 1f7a 04F4 brge .L367
4036 1f7c 9C01 movw r18,r24
4037 1f7e 97FF sbrs r25,7
4038 1f80 00C0 rjmp .L368
4039 1f82 2D5F subi r18,lo8(-(3))
4040 1f84 3F4F sbci r19,hi8(-(3))
4041 .L368:
4042 1f86 3595 asr r19
4043 1f88 2795 ror r18
4044 1f8a 3595 asr r19
4045 1f8c 2795 ror r18
4046 1f8e 8091 0000 lds r24,EE_Parameter+37
4047 1f92 9927 clr r25
4048 1f94 289F mul r18,r24
4049 1f96 A001 movw r20,r0
4050 1f98 299F mul r18,r25
4051 1f9a 500D add r21,r0
4052 1f9c 389F mul r19,r24
4053 1f9e 500D add r21,r0
4054 1fa0 1124 clr r1
4055 1fa2 CA01 movw r24,r20
4056 1fa4 64E6 ldi r22,lo8(100)
4057 1fa6 70E0 ldi r23,hi8(100)
4058 1fa8 0E94 0000 call __divmodhi4
4059 1fac CB01 movw r24,r22
4060 1fae 00C0 rjmp .L887
4061 .L367:
4062 1fb0 8DE2 ldi r24,lo8(45)
4063 1fb2 90E0 ldi r25,hi8(45)
4064 1fb4 00C0 rjmp .L887
4065 .L366:
4066 1fb6 8091 0000 lds r24,EE_Parameter+37
4067 1fba 9927 clr r25
4068 .L887:
4069 1fbc 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4070 1fc0 8093 0000 sts HooverGasEmergencyPercent,r24
4071 .L365:
4072 1fc4 2091 0000 lds r18,GasIsZeroCnt
4073 1fc8 3091 0000 lds r19,(GasIsZeroCnt)+1
4074 1fcc 55E7 ldi r21,hi8(30000)
4075 1fce 2033 cpi r18,lo8(30000)
4076 1fd0 3507 cpc r19,r21
4077 1fd2 01F4 brne .L371
4078 1fd4 1092 0000 sts (StickGas)+1,__zero_reg__
4079 1fd8 1092 0000 sts StickGas,__zero_reg__
4080 1fdc 8091 0000 lds r24,MIN_GAS
4081 1fe0 9927 clr r25
4082 1fe2 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4083 1fe6 8093 0000 sts HooverGasEmergencyPercent,r24
4084 .L371:
4085 1fea 6091 0000 lds r22,StickGas
4086 1fee 7091 0000 lds r23,(StickGas)+1
4087 1ff2 7A83 std Y+2,r23
4088 1ff4 6983 std Y+1,r22
4089 1ff6 8091 0000 lds r24,MIN_GAS
4090 1ffa 9927 clr r25
4091 1ffc 0A96 adiw r24,10
4092 1ffe 6817 cp r22,r24
4093 2000 7907 cpc r23,r25
4094 2002 04F4 brge .L372
4095 2004 9A83 std Y+2,r25
4096 2006 8983 std Y+1,r24
4097 .L372:
4098 2008 8091 0000 lds r24,SenderOkay
4099 200c 8436 cpi r24,lo8(100)
4100 200e 00F0 brlo .+2
4101 2010 00C0 rjmp .L373
4102 2012 8091 0000 lds r24,FC_StatusFlags2
4103 2016 82FD sbrc r24,2
4104 2018 00C0 rjmp .L373
4105 201a 8091 0000 lds r24,RcLostTimer.5
4106 201e 9091 0000 lds r25,(RcLostTimer.5)+1
4107 2022 0097 sbiw r24,0
4108 2024 01F0 breq .L374
4109 2026 0197 sbiw r24,1
4110 2028 9093 0000 sts (RcLostTimer.5)+1,r25
4111 202c 8093 0000 sts RcLostTimer.5,r24
4112 2030 00C0 rjmp .L375
4113 .L374:
4114 2032 1092 0000 sts MotorenEin,__zero_reg__
4115 2036 9093 0000 sts (modell_fliegt)+1,r25
4116 203a 8093 0000 sts modell_fliegt,r24
4117 203e 8091 0000 lds r24,FC_StatusFlags
4118 2042 8D7E andi r24,lo8(-19)
4119 2044 8093 0000 sts FC_StatusFlags,r24
4120 .L375:
4121 2048 8091 0000 lds r24,PlatinenVersion
4122 204c 8A30 cpi r24,lo8(10)
4123 204e 01F0 breq .L377
4124 2050 8431 cpi r24,lo8(20)
4125 2052 00F0 brlo .L376
4126 .L377:
4127 2054 289A sbi 37-0x20,0
4128 2056 00C0 rjmp .L378
4129 .L376:
4130 2058 2898 cbi 37-0x20,0
4131 .L378:
4132 205a 8091 0000 lds r24,modell_fliegt
4133 205e 9091 0000 lds r25,(modell_fliegt)+1
4134 2062 895E subi r24,lo8(1001)
4135 2064 9340 sbci r25,hi8(1001)
4136 2066 00F0 brlo .L379
4137 2068 8091 0000 lds r24,Capacity+6
4138 206c 8536 cpi r24,lo8(101)
4139 206e 00F0 brlo .L379
4140 2070 8091 0000 lds r24,HooverGasEmergencyPercent
4141 2074 9091 0000 lds r25,(HooverGasEmergencyPercent)+1
4142 2078 9A83 std Y+2,r25
4143 207a 8983 std Y+1,r24
4144 207c 8091 0000 lds r24,FC_StatusFlags
4145 2080 8061 ori r24,lo8(16)
4146 2082 8093 0000 sts FC_StatusFlags,r24
4147 2086 8091 0000 lds r24,EE_Parameter+1
4148 208a A82F mov r26,r24
4149 208c BB27 clr r27
4150 208e AA0F add r26,r26
4151 2090 BB1F adc r27,r27
4152 2092 FD01 movw r30,r26
4153 2094 E050 subi r30,lo8(-(PPM_diff))
4154 2096 F040 sbci r31,hi8(-(PPM_diff))
4155 2098 1182 std Z+1,__zero_reg__
4156 209a 1082 st Z,__zero_reg__
4157 209c 8091 0000 lds r24,EE_Parameter+2
4158 20a0 282F mov r18,r24
4159 20a2 3327 clr r19
4160 20a4 220F add r18,r18
4161 20a6 331F adc r19,r19
4162 20a8 C901 movw r24,r18
4163 20aa 8050 subi r24,lo8(-(PPM_diff))
4164 20ac 9040 sbci r25,hi8(-(PPM_diff))
4165 20ae FC01 movw r30,r24
4166 20b0 1182 std Z+1,__zero_reg__
4167 20b2 1082 st Z,__zero_reg__
4168 20b4 A050 subi r26,lo8(-(PPM_in))
4169 20b6 B040 sbci r27,hi8(-(PPM_in))
4170 20b8 1196 adiw r26,1
4171 20ba 1C92 st X,__zero_reg__
4172 20bc 1E92 st -X,__zero_reg__
4173 20be 2050 subi r18,lo8(-(PPM_in))
4174 20c0 3040 sbci r19,hi8(-(PPM_in))
4175 20c2 D901 movw r26,r18
4176 20c4 1196 adiw r26,1
4177 20c6 1C92 st X,__zero_reg__
4178 20c8 1E92 st -X,__zero_reg__
4179 20ca 8091 0000 lds r24,EE_Parameter+4
4180 20ce E82F mov r30,r24
4181 20d0 FF27 clr r31
4182 20d2 EE0F add r30,r30
4183 20d4 FF1F adc r31,r31
4184 20d6 E050 subi r30,lo8(-(PPM_in))
4185 20d8 F040 sbci r31,hi8(-(PPM_in))
4186 20da 1182 std Z+1,__zero_reg__
4187 20dc 1082 st Z,__zero_reg__
4188 20de 00C0 rjmp .L381
4189 .L379:
4190 20e0 1092 0000 sts MotorenEin,__zero_reg__
4191 20e4 00C0 rjmp .L381
4192 .L373:
4193 20e6 8091 0000 lds r24,SenderOkay
4194 20ea 8D38 cpi r24,lo8(-115)
4195 20ec 00F4 brsh .+2
4196 20ee 00C0 rjmp .L382
4197 20f0 8091 0000 lds r24,FC_StatusFlags
4198 20f4 8F7E andi r24,lo8(-17)
4199 20f6 8093 0000 sts FC_StatusFlags,r24
4200 20fa 9091 0000 lds r25,EE_Parameter+38
4201 20fe 82E3 ldi r24,lo8(50)
4202 2100 989F mul r25,r24
4203 2102 C001 movw r24,r0
4204 2104 1124 clr r1
4205 2106 9093 0000 sts (RcLostTimer.5)+1,r25
4206 210a 8093 0000 sts RcLostTimer.5,r24
4207 210e E981 ldd r30,Y+1
4208 2110 FA81 ldd r31,Y+2
4209 2112 B997 sbiw r30,41
4210 2114 04F0 brlt .L383
4211 2116 8091 0000 lds r24,MotorenEin
4212 211a 8823 tst r24
4213 211c 01F0 breq .L383
4214 211e 8091 0000 lds r24,modell_fliegt
4215 2122 9091 0000 lds r25,(modell_fliegt)+1
4216 2126 FFEF ldi r31,hi8(-1)
4217 2128 8F3F cpi r24,lo8(-1)
4218 212a 9F07 cpc r25,r31
4219 212c 01F0 breq .L383
4220 212e 0196 adiw r24,1
4221 2130 9093 0000 sts (modell_fliegt)+1,r25
4222 2134 8093 0000 sts modell_fliegt,r24
4223 .L383:
4224 2138 8091 0000 lds r24,modell_fliegt
4225 213c 9091 0000 lds r25,(modell_fliegt)+1
4226 2140 8F3F cpi r24,255
4227 2142 9105 cpc r25,__zero_reg__
4228 2144 01F0 breq .+2
4229 2146 00F4 brsh .L385
4230 2148 1092 0000 sts SummeNick,__zero_reg__
4231 214c 1092 0000 sts (SummeNick)+1,__zero_reg__
4232 2150 1092 0000 sts (SummeNick)+2,__zero_reg__
4233 2154 1092 0000 sts (SummeNick)+3,__zero_reg__
4234 2158 1092 0000 sts SummeRoll,__zero_reg__
4235 215c 1092 0000 sts (SummeRoll)+1,__zero_reg__
4236 2160 1092 0000 sts (SummeRoll)+2,__zero_reg__
4237 2164 1092 0000 sts (SummeRoll)+3,__zero_reg__
4238 2168 1092 0000 sts sollGier.0,__zero_reg__
4239 216c 1092 0000 sts (sollGier.0)+1,__zero_reg__
4240 2170 1092 0000 sts (sollGier.0)+2,__zero_reg__
4241 2174 1092 0000 sts (sollGier.0)+3,__zero_reg__
4242 2178 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4243 217c 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4244 2180 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4245 2184 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4246 2188 00C0 rjmp .L386
4247 .L385:
4248 218a 8091 0000 lds r24,FC_StatusFlags
4249 218e 8260 ori r24,lo8(2)
4250 2190 8093 0000 sts FC_StatusFlags,r24
4251 .L386:
4252 2194 8091 0000 lds r24,EE_Parameter+3
4253 2198 E82F mov r30,r24
4254 219a FF27 clr r31
4255 219c EE0F add r30,r30
4256 219e FF1F adc r31,r31
4257 21a0 E050 subi r30,lo8(-(PPM_in))
4258 21a2 F040 sbci r31,hi8(-(PPM_in))
4259 21a4 8081 ld r24,Z
4260 21a6 9181 ldd r25,Z+1
4261 21a8 8135 cpi r24,81
4262 21aa 9105 cpc r25,__zero_reg__
4263 21ac 04F4 brge .+2
4264 21ae 00C0 rjmp .L387
4265 21b0 2091 0000 lds r18,MotorenEin
4266 21b4 2223 tst r18
4267 21b6 01F0 breq .+2
4268 21b8 00C0 rjmp .L387
4269 21ba 8091 0000 lds r24,EE_Parameter+4
4270 21be E82F mov r30,r24
4271 21c0 FF27 clr r31
4272 21c2 EE0F add r30,r30
4273 21c4 FF1F adc r31,r31
4274 21c6 E050 subi r30,lo8(-(PPM_in))
4275 21c8 F040 sbci r31,hi8(-(PPM_in))
4276 21ca 8081 ld r24,Z
4277 21cc 9181 ldd r25,Z+1
4278 21ce 8C34 cpi r24,76
4279 21d0 9105 cpc r25,__zero_reg__
4280 21d2 04F4 brge .+2
4281 21d4 00C0 rjmp .L388
4282 21d6 8091 0000 lds r24,delay_neutral.6
4283 21da 8F5F subi r24,lo8(-(1))
4284 21dc 8093 0000 sts delay_neutral.6,r24
4285 21e0 893C cpi r24,lo8(-55)
4286 21e2 00F4 brsh .+2
4287 21e4 00C0 rjmp .L387
4288 21e6 2093 0000 sts delay_neutral.6,r18
4289 21ea 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4290 21ee 1092 0000 sts modell_fliegt,__zero_reg__
4291 21f2 3091 0000 lds r19,EE_Parameter+1
4292 21f6 E32F mov r30,r19
4293 21f8 FF27 clr r31
4294 21fa EE0F add r30,r30
4295 21fc FF1F adc r31,r31
4296 21fe E050 subi r30,lo8(-(PPM_in))
4297 2200 F040 sbci r31,hi8(-(PPM_in))
4298 2202 8081 ld r24,Z
4299 2204 9181 ldd r25,Z+1
4300 2206 8734 cpi r24,71
4301 2208 9105 cpc r25,__zero_reg__
4302 220a 04F4 brge .L391
4303 220c 8091 0000 lds r24,EE_Parameter+2
4304 2210 E82F mov r30,r24
4305 2212 FF27 clr r31
4306 2214 EE0F add r30,r30
4307 2216 FF1F adc r31,r31
4308 2218 E050 subi r30,lo8(-(PPM_in))
4309 221a F040 sbci r31,hi8(-(PPM_in))
4310 221c 8081 ld r24,Z
4311 221e 9181 ldd r25,Z+1
4312 2220 0190 ld __tmp_reg__,Z+
4313 2222 F081 ld r31,Z
4314 2224 E02D mov r30,__tmp_reg__
4315 2226 F7FF sbrs r31,7
4316 2228 00C0 rjmp .L392
4317 222a F095 com r31
4318 222c E195 neg r30
4319 222e FF4F sbci r31,lo8(-1)
4320 .L392:
4321 2230 E734 cpi r30,71
4322 2232 F105 cpc r31,__zero_reg__
4323 2234 04F4 brge .+2
4324 2236 00C0 rjmp .L390
4325 .L391:
4326 2238 41E0 ldi r20,lo8(1)
4327 223a 2091 0000 lds r18,EE_Parameter+2
4328 223e A22F mov r26,r18
4329 2240 BB27 clr r27
4330 2242 AA0F add r26,r26
4331 2244 BB1F adc r27,r27
4332 2246 A050 subi r26,lo8(-(PPM_in))
4333 2248 B040 sbci r27,hi8(-(PPM_in))
4334 224a 8D91 ld r24,X+
4335 224c 9C91 ld r25,X
4336 224e 1197 sbiw r26,1
4337 2250 8734 cpi r24,71
4338 2252 9105 cpc r25,__zero_reg__
4339 2254 04F0 brlt .L393
4340 2256 E32F mov r30,r19
4341 2258 FF27 clr r31
4342 225a EE0F add r30,r30
4343 225c FF1F adc r31,r31
4344 225e E050 subi r30,lo8(-(PPM_in))
4345 2260 F040 sbci r31,hi8(-(PPM_in))
4346 2262 8081 ld r24,Z
4347 2264 9181 ldd r25,Z+1
4348 .L393:
4349 2266 8D91 ld r24,X+
4350 2268 9C91 ld r25,X
4351 226a 8734 cpi r24,71
4352 226c 9105 cpc r25,__zero_reg__
4353 226e 04F0 brlt .L394
4354 2270 8091 0000 lds r24,EE_Parameter+1
4355 2274 E82F mov r30,r24
4356 2276 FF27 clr r31
4357 2278 EE0F add r30,r30
4358 227a FF1F adc r31,r31
4359 227c E050 subi r30,lo8(-(PPM_in))
4360 227e F040 sbci r31,hi8(-(PPM_in))
4361 2280 8081 ld r24,Z
4362 2282 9181 ldd r25,Z+1
4363 2284 8734 cpi r24,71
4364 2286 9105 cpc r25,__zero_reg__
4365 2288 04F0 brlt .L394
4366 228a 42E0 ldi r20,lo8(2)
4367 .L394:
4368 228c E22F mov r30,r18
4369 228e FF27 clr r31
4370 2290 EE0F add r30,r30
4371 2292 FF1F adc r31,r31
4372 2294 E050 subi r30,lo8(-(PPM_in))
4373 2296 F040 sbci r31,hi8(-(PPM_in))
4374 2298 8081 ld r24,Z
4375 229a 9181 ldd r25,Z+1
4376 229c 8634 cpi r24,70
4377 229e 9105 cpc r25,__zero_reg__
4378 22a0 04F4 brge .L395
4379 22a2 8091 0000 lds r24,EE_Parameter+1
4380 22a6 E82F mov r30,r24
4381 22a8 FF27 clr r31
4382 22aa EE0F add r30,r30
4383 22ac FF1F adc r31,r31
4384 22ae E050 subi r30,lo8(-(PPM_in))
4385 22b0 F040 sbci r31,hi8(-(PPM_in))
4386 22b2 8081 ld r24,Z
4387 22b4 9181 ldd r25,Z+1
4388 22b6 8734 cpi r24,71
4389 22b8 9105 cpc r25,__zero_reg__
4390 22ba 04F0 brlt .L395
4391 22bc 43E0 ldi r20,lo8(3)
4392 .L395:
4393 22be E22F mov r30,r18
4394 22c0 FF27 clr r31
4395 22c2 EE0F add r30,r30
4396 22c4 FF1F adc r31,r31
4397 22c6 E050 subi r30,lo8(-(PPM_in))
4398 22c8 F040 sbci r31,hi8(-(PPM_in))
4399 22ca 8081 ld r24,Z
4400 22cc 9181 ldd r25,Z+1
4401 22ce 8A5B subi r24,lo8(-70)
4402 22d0 9F4F sbci r25,hi8(-70)
4403 22d2 04F4 brge .L396
4404 22d4 8091 0000 lds r24,EE_Parameter+1
4405 22d8 E82F mov r30,r24
4406 22da FF27 clr r31
4407 22dc EE0F add r30,r30
4408 22de FF1F adc r31,r31
4409 22e0 E050 subi r30,lo8(-(PPM_in))
4410 22e2 F040 sbci r31,hi8(-(PPM_in))
4411 22e4 8081 ld r24,Z
4412 22e6 9181 ldd r25,Z+1
4413 22e8 8734 cpi r24,71
4414 22ea 9105 cpc r25,__zero_reg__
4415 22ec 04F0 brlt .L396
4416 22ee 44E0 ldi r20,lo8(4)
4417 .L396:
4418 22f0 E22F mov r30,r18
4419 22f2 FF27 clr r31
4420 22f4 EE0F add r30,r30
4421 22f6 FF1F adc r31,r31
4422 22f8 E050 subi r30,lo8(-(PPM_in))
4423 22fa F040 sbci r31,hi8(-(PPM_in))
4424 22fc 8081 ld r24,Z
4425 22fe 9181 ldd r25,Z+1
4426 2300 8A5B subi r24,lo8(-70)
4427 2302 9F4F sbci r25,hi8(-70)
4428 2304 04F4 brge .L397
4429 2306 8091 0000 lds r24,EE_Parameter+1
4430 230a E82F mov r30,r24
4431 230c FF27 clr r31
4432 230e EE0F add r30,r30
4433 2310 FF1F adc r31,r31
4434 2312 E050 subi r30,lo8(-(PPM_in))
4435 2314 F040 sbci r31,hi8(-(PPM_in))
4436 2316 8081 ld r24,Z
4437 2318 9181 ldd r25,Z+1
4438 231a 8634 cpi r24,70
4439 231c 9105 cpc r25,__zero_reg__
4440 231e 04F4 brge .L397
4441 2320 45E0 ldi r20,lo8(5)
4442 .L397:
4443 2322 842F mov r24,r20
4444 2324 0E94 0000 call SetActiveParamSet
4445 .L390:
4446 2328 8091 0000 lds r24,EE_Parameter+2
4447 232c E82F mov r30,r24
4448 232e FF27 clr r31
4449 2330 EE0F add r30,r30
4450 2332 FF1F adc r31,r31
4451 2334 E050 subi r30,lo8(-(PPM_in))
4452 2336 F040 sbci r31,hi8(-(PPM_in))
4453 2338 8081 ld r24,Z
4454 233a 9181 ldd r25,Z+1
4455 233c 0190 ld __tmp_reg__,Z+
4456 233e F081 ld r31,Z
4457 2340 E02D mov r30,__tmp_reg__
4458 2342 F7FF sbrs r31,7
4459 2344 00C0 rjmp .L399
4460 2346 F095 com r31
4461 2348 E195 neg r30
4462 234a FF4F sbci r31,lo8(-1)
4463 .L399:
4464 234c 7E97 sbiw r30,30
4465 234e 04F4 brge .L398
4466 2350 8091 0000 lds r24,EE_Parameter+1
4467 2354 E82F mov r30,r24
4468 2356 FF27 clr r31
4469 2358 EE0F add r30,r30
4470 235a FF1F adc r31,r31
4471 235c E050 subi r30,lo8(-(PPM_in))
4472 235e F040 sbci r31,hi8(-(PPM_in))
4473 2360 8081 ld r24,Z
4474 2362 9181 ldd r25,Z+1
4475 2364 8A5B subi r24,lo8(-70)
4476 2366 9F4F sbci r25,hi8(-70)
4477 2368 04F4 brge .L398
4478 236a 81E0 ldi r24,lo8(1)
4479 236c 8093 0000 sts WinkelOut+6,r24
4480 2370 1092 0000 sts CalibrationDone,__zero_reg__
4481 2374 88EE ldi r24,lo8(1000)
4482 2376 93E0 ldi r25,hi8(1000)
4483 2378 9093 0000 sts (beeptime)+1,r25
4484 237c 8093 0000 sts beeptime,r24
4485 2380 00C0 rjmp .L387
4486 .L398:
4487 2382 0E94 0000 call GetActiveParamSet
4488 2386 0E94 0000 call ParamSet_ReadFromEEProm
4489 238a 80E0 ldi r24,lo8(0)
4490 238c 0E94 0000 call LipoDetection
4491 2390 8091 0000 lds r24,EE_Parameter+39
4492 2394 0E94 0000 call LIBFC_ReceiverInit
4493 2398 8091 0000 lds r24,Parameter_GlobalConfig
4494 239c 80FF sbrs r24,0
4495 239e 00C0 rjmp .L401
4496 23a0 8091 0000 lds r24,MessLuftdruck
4497 23a4 9091 0000 lds r25,(MessLuftdruck)+1
4498 23a8 875B subi r24,lo8(951)
4499 23aa 9340 sbci r25,hi8(951)
4500 23ac 00F4 brsh .L403
4501 23ae 8091 0000 lds r24,MessLuftdruck
4502 23b2 9091 0000 lds r25,(MessLuftdruck)+1
4503 23b6 8E5E subi r24,lo8(750)
4504 23b8 9240 sbci r25,hi8(750)
4505 23ba 00F4 brsh .L401
4506 .L403:
4507 23bc 0E94 0000 call SucheLuftruckOffset
4508 .L401:
4509 23c0 80E0 ldi r24,lo8(0)
4510 23c2 0E94 0000 call SetNeutral
4511 23c6 81E0 ldi r24,lo8(1)
4512 23c8 8093 0000 sts CalibrationDone,r24
4513 23cc 8093 0000 sts ServoActive,r24
4514 23d0 579A sbi 42-0x20,7
4515 23d2 00C0 rjmp .L888
4516 .L388:
4517 23d4 8081 ld r24,Z
4518 23d6 9181 ldd r25,Z+1
4519 23d8 855B subi r24,lo8(-75)
4520 23da 9F4F sbci r25,hi8(-75)
4521 23dc 04F4 brge .L405
4522 23de 8091 0000 lds r24,delay_neutral.6
4523 23e2 8F5F subi r24,lo8(-(1))
4524 23e4 8093 0000 sts delay_neutral.6,r24
4525 23e8 893C cpi r24,lo8(-55)
4526 23ea 00F0 brlo .L387
4527 23ec 2093 0000 sts MotorenEin,r18
4528 23f0 2093 0000 sts delay_neutral.6,r18
4529 23f4 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4530 23f8 1092 0000 sts modell_fliegt,__zero_reg__
4531 23fc 81E0 ldi r24,lo8(1)
4532 23fe 0E94 0000 call SetNeutral
4533 2402 81E0 ldi r24,lo8(1)
4534 2404 8093 0000 sts CalibrationDone,r24
4535 .L888:
4536 2408 88E1 ldi r24,lo8(24)
4537 240a 8093 0000 sts SpeakHoTT,r24
4538 240e 0E94 0000 call GetActiveParamSet
4539 2412 68E7 ldi r22,lo8(120)
4540 2414 70E0 ldi r23,hi8(120)
4541 2416 0E94 0000 call Piep
4542 241a 00C0 rjmp .L387
4543 .L405:
4544 241c 2093 0000 sts delay_neutral.6,r18
4545 .L387:
4546 2420 8091 0000 lds r24,EE_Parameter+3
4547 2424 E82F mov r30,r24
4548 2426 FF27 clr r31
4549 2428 EE0F add r30,r30
4550 242a FF1F adc r31,r31
4551 242c E050 subi r30,lo8(-(PPM_in))
4552 242e F040 sbci r31,hi8(-(PPM_in))
4553 2430 8081 ld r24,Z
4554 2432 9181 ldd r25,Z+1
4555 2434 8B5A subi r24,lo8(-85)
4556 2436 9F4F sbci r25,hi8(-85)
4557 2438 04F0 brlt .+2
4558 243a 00C0 rjmp .L408
4559 243c 2091 0000 lds r18,EE_Parameter+100
4560 2440 E22F mov r30,r18
4561 2442 FF27 clr r31
4562 2444 EF77 andi r30,lo8(127)
4563 2446 F070 andi r31,hi8(127)
4564 2448 EE0F add r30,r30
4565 244a FF1F adc r31,r31
4566 244c E050 subi r30,lo8(-(PPM_diff))
4567 244e F040 sbci r31,hi8(-(PPM_diff))
4568 2450 8081 ld r24,Z
4569 2452 9181 ldd r25,Z+1
4570 2454 0697 sbiw r24,6
4571 2456 04F0 brlt .L409
4572 2458 84E6 ldi r24,lo8(100)
4573 245a 00C0 rjmp .L889
4574 .L409:
4575 245c 8081 ld r24,Z
4576 245e 9181 ldd r25,Z+1
4577 2460 8B5F subi r24,lo8(-5)
4578 2462 9F4F sbci r25,hi8(-5)
4579 2464 04F4 brge .L410
4580 2466 8CE9 ldi r24,lo8(-100)
4581 .L889:
4582 2468 8093 0000 sts move_safety_switch.9,r24
4583 .L410:
4584 246c 8091 0000 lds r24,MotorenEin
4585 2470 E091 0000 lds r30,EE_Parameter+4
4586 2474 8823 tst r24
4587 2476 01F0 breq .+2
4588 2478 00C0 rjmp .L412
4589 247a FF27 clr r31
4590 247c EE0F add r30,r30
4591 247e FF1F adc r31,r31
4592 2480 E050 subi r30,lo8(-(PPM_in))
4593 2482 F040 sbci r31,hi8(-(PPM_in))
4594 2484 8081 ld r24,Z
4595 2486 9181 ldd r25,Z+1
4596 2488 855B subi r24,lo8(-75)
4597 248a 9F4F sbci r25,hi8(-75)
4598 248c 04F4 brge .L415
4599 248e 8091 0000 lds r24,EE_Parameter+111
4600 2492 83FD sbrc r24,3
4601 2494 00C0 rjmp .L416
4602 2496 E22F mov r30,r18
4603 2498 FF27 clr r31
4604 249a EE0F add r30,r30
4605 249c FF1F adc r31,r31
4606 249e E050 subi r30,lo8(-(PPM_in))
4607 24a0 F040 sbci r31,hi8(-(PPM_in))
4608 24a2 8081 ld r24,Z
4609 24a4 9181 ldd r25,Z+1
4610 24a6 855B subi r24,lo8(-75)
4611 24a8 9F4F sbci r25,hi8(-75)
4612 24aa 04F0 brlt .L414
4613 .L416:
4614 24ac 8091 0000 lds r24,EE_Parameter+100
4615 24b0 8823 tst r24
4616 24b2 01F0 breq .L414
4617 .L415:
4618 24b4 8091 0000 lds r24,EE_Parameter+111
4619 24b8 83FF sbrs r24,3
4620 24ba 00C0 rjmp .L413
4621 24bc 8091 0000 lds r24,EE_Parameter+100
4622 24c0 E82F mov r30,r24
4623 24c2 FF27 clr r31
4624 24c4 EE0F add r30,r30
4625 24c6 FF1F adc r31,r31
4626 24c8 E050 subi r30,lo8(-(PPM_in))
4627 24ca F040 sbci r31,hi8(-(PPM_in))
4628 24cc 8081 ld r24,Z
4629 24ce 9181 ldd r25,Z+1
4630 24d0 875F subi r24,lo8(-9)
4631 24d2 9F4F sbci r25,hi8(-9)
4632 24d4 04F4 brge .+2
4633 24d6 00C0 rjmp .L413
4634 24d8 8091 0000 lds r24,move_safety_switch.9
4635 24dc 8436 cpi r24,lo8(100)
4636 24de 01F0 breq .+2
4637 24e0 00C0 rjmp .L413
4638 .L414:
4639 24e2 2091 0000 lds r18,CalibrationDone
4640 24e6 2223 tst r18
4641 24e8 01F0 breq .L417
4642 24ea 8091 0000 lds r24,FC_StatusFlags
4643 24ee 8860 ori r24,lo8(8)
4644 24f0 8093 0000 sts FC_StatusFlags,r24
4645 .L417:
4646 24f4 8091 0000 lds r24,delay_einschalten.7
4647 24f8 8F5F subi r24,lo8(-(1))
4648 24fa 8093 0000 sts delay_einschalten.7,r24
4649 24fe 8E3F cpi r24,lo8(-2)
4650 2500 00F4 brsh .+2
4651 2502 00C0 rjmp .L423
4652 2504 1092 0000 sts delay_einschalten.7,__zero_reg__
4653 2508 8091 0000 lds r24,VersionInfo+5
4654 250c 8823 tst r24
4655 250e 01F0 breq .+2
4656 2510 00C0 rjmp .L419
4657 2512 2223 tst r18
4658 2514 01F4 brne .+2
4659 2516 00C0 rjmp .L419
4660 2518 8091 0000 lds r24,NC_ErrorCode
4661 251c 8823 tst r24
4662 251e 01F0 breq .+2
4663 2520 00C0 rjmp .L419
4664 2522 81E0 ldi r24,lo8(1)
4665 2524 90E0 ldi r25,hi8(1)
4666 2526 9093 0000 sts (modell_fliegt)+1,r25
4667 252a 8093 0000 sts modell_fliegt,r24
4668 252e 81E0 ldi r24,lo8(1)
4669 2530 8093 0000 sts MotorenEin,r24
4670 2534 1092 0000 sts sollGier.0,__zero_reg__
4671 2538 1092 0000 sts (sollGier.0)+1,__zero_reg__
4672 253c 1092 0000 sts (sollGier.0)+2,__zero_reg__
4673 2540 1092 0000 sts (sollGier.0)+3,__zero_reg__
4674 2544 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4675 2548 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4676 254c 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4677 2550 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4678 2554 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
4679 2558 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
4680 255c 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
4681 2560 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
4682 2564 8091 0000 lds r24,EE_Parameter+28
4683 2568 E82E mov r14,r24
4684 256a FF24 clr r15
4685 256c 0027 clr r16
4686 256e 1127 clr r17
4687 2570 8091 0000 lds r24,Mittelwert_AccNick
4688 2574 9091 0000 lds r25,(Mittelwert_AccNick)+1
4689 2578 9C01 movw r18,r24
4690 257a 4427 clr r20
4691 257c 37FD sbrc r19,7
4692 257e 4095 com r20
4693 2580 542F mov r21,r20
4694 2582 C801 movw r24,r16
4695 2584 B701 movw r22,r14
4696 2586 0E94 0000 call __mulsi3
4697 258a DC01 movw r26,r24
4698 258c CB01 movw r24,r22
4699 258e 8093 0000 sts Mess_IntegralNick,r24
4700 2592 9093 0000 sts (Mess_IntegralNick)+1,r25
4701 2596 A093 0000 sts (Mess_IntegralNick)+2,r26
4702 259a B093 0000 sts (Mess_IntegralNick)+3,r27
4703 259e 8091 0000 lds r24,Mittelwert_AccRoll
4704 25a2 9091 0000 lds r25,(Mittelwert_AccRoll)+1
4705 25a6 9C01 movw r18,r24
4706 25a8 4427 clr r20
4707 25aa 37FD sbrc r19,7
4708 25ac 4095 com r20
4709 25ae 542F mov r21,r20
4710 25b0 C801 movw r24,r16
4711 25b2 B701 movw r22,r14
4712 25b4 0E94 0000 call __mulsi3
4713 25b8 DC01 movw r26,r24
4714 25ba CB01 movw r24,r22
4715 25bc 8093 0000 sts Mess_IntegralRoll,r24
4716 25c0 9093 0000 sts (Mess_IntegralRoll)+1,r25
4717 25c4 A093 0000 sts (Mess_IntegralRoll)+2,r26
4718 25c8 B093 0000 sts (Mess_IntegralRoll)+3,r27
4719 25cc 8091 0000 lds r24,IntegralNick
4720 25d0 9091 0000 lds r25,(IntegralNick)+1
4721 25d4 A091 0000 lds r26,(IntegralNick)+2
4722 25d8 B091 0000 lds r27,(IntegralNick)+3
4723 25dc 8093 0000 sts Mess_IntegralNick2,r24
4724 25e0 9093 0000 sts (Mess_IntegralNick2)+1,r25
4725 25e4 A093 0000 sts (Mess_IntegralNick2)+2,r26
4726 25e8 B093 0000 sts (Mess_IntegralNick2)+3,r27
4727 25ec 8091 0000 lds r24,IntegralRoll
4728 25f0 9091 0000 lds r25,(IntegralRoll)+1
4729 25f4 A091 0000 lds r26,(IntegralRoll)+2
4730 25f8 B091 0000 lds r27,(IntegralRoll)+3
4731 25fc 8093 0000 sts Mess_IntegralRoll2,r24
4732 2600 9093 0000 sts (Mess_IntegralRoll2)+1,r25
4733 2604 A093 0000 sts (Mess_IntegralRoll2)+2,r26
4734 2608 B093 0000 sts (Mess_IntegralRoll2)+3,r27
4735 260c 1092 0000 sts SummeNick,__zero_reg__
4736 2610 1092 0000 sts (SummeNick)+1,__zero_reg__
4737 2614 1092 0000 sts (SummeNick)+2,__zero_reg__
4738 2618 1092 0000 sts (SummeNick)+3,__zero_reg__
4739 261c 1092 0000 sts SummeRoll,__zero_reg__
4740 2620 1092 0000 sts (SummeRoll)+1,__zero_reg__
4741 2624 1092 0000 sts (SummeRoll)+2,__zero_reg__
4742 2628 1092 0000 sts (SummeRoll)+3,__zero_reg__
4743 262c 84E6 ldi r24,lo8(100)
4744 262e 8093 0000 sts NeueKompassRichtungMerken,r24
4745 2632 84E3 ldi r24,lo8(52)
4746 2634 00C0 rjmp .L890
4747 .L419:
4748 2636 8CED ldi r24,lo8(1500)
4749 2638 95E0 ldi r25,hi8(1500)
4750 263a 9093 0000 sts (beeptime)+1,r25
4751 263e 8093 0000 sts beeptime,r24
4752 2642 2223 tst r18
4753 2644 01F0 breq .+2
4754 2646 00C0 rjmp .L423
4755 2648 81E0 ldi r24,lo8(1)
4756 264a 00C0 rjmp .L890
4757 .L413:
4758 264c 1092 0000 sts delay_einschalten.7,__zero_reg__
4759 2650 00C0 rjmp .L423
4760 .L412:
4761 2652 FF27 clr r31
4762 2654 EE0F add r30,r30
4763 2656 FF1F adc r31,r31
4764 2658 E050 subi r30,lo8(-(PPM_in))
4765 265a F040 sbci r31,hi8(-(PPM_in))
4766 265c 8081 ld r24,Z
4767 265e 9181 ldd r25,Z+1
4768 2660 8C34 cpi r24,76
4769 2662 9105 cpc r25,__zero_reg__
4770 2664 04F0 brlt .L426
4771 2666 8091 0000 lds r24,EE_Parameter+111
4772 266a 83FD sbrc r24,3
4773 266c 00C0 rjmp .L427
4774 266e E22F mov r30,r18
4775 2670 FF27 clr r31
4776 2672 EE0F add r30,r30
4777 2674 FF1F adc r31,r31
4778 2676 E050 subi r30,lo8(-(PPM_in))
4779 2678 F040 sbci r31,hi8(-(PPM_in))
4780 267a 8081 ld r24,Z
4781 267c 9181 ldd r25,Z+1
4782 267e 855B subi r24,lo8(-75)
4783 2680 9F4F sbci r25,hi8(-75)
4784 2682 04F0 brlt .L425
4785 .L427:
4786 2684 8091 0000 lds r24,EE_Parameter+100
4787 2688 8823 tst r24
4788 268a 01F0 breq .L425
4789 .L426:
4790 268c 8091 0000 lds r24,EE_Parameter+111
4791 2690 83FF sbrs r24,3
4792 2692 00C0 rjmp .L424
4793 2694 8091 0000 lds r24,EE_Parameter+100
4794 2698 E82F mov r30,r24
4795 269a FF27 clr r31
4796 269c EE0F add r30,r30
4797 269e FF1F adc r31,r31
4798 26a0 E050 subi r30,lo8(-(PPM_in))
4799 26a2 F040 sbci r31,hi8(-(PPM_in))
4800 26a4 8081 ld r24,Z
4801 26a6 9181 ldd r25,Z+1
4802 26a8 8E5C subi r24,lo8(-50)
4803 26aa 9F4F sbci r25,hi8(-50)
4804 26ac 04F4 brge .L424
4805 26ae 8091 0000 lds r24,move_safety_switch.9
4806 26b2 8C39 cpi r24,lo8(-100)
4807 26b4 01F4 brne .L424
4808 .L425:
4809 26b6 8091 0000 lds r24,delay_ausschalten.8
4810 26ba 8F5F subi r24,lo8(-(1))
4811 26bc 8093 0000 sts delay_ausschalten.8,r24
4812 26c0 8B3F cpi r24,lo8(-5)
4813 26c2 00F0 brlo .L423
4814 26c4 1092 0000 sts MotorenEin,__zero_reg__
4815 26c8 1092 0000 sts delay_ausschalten.8,__zero_reg__
4816 26cc 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4817 26d0 1092 0000 sts modell_fliegt,__zero_reg__
4818 26d4 86E2 ldi r24,lo8(38)
4819 .L890:
4820 26d6 8093 0000 sts SpeakHoTT,r24
4821 26da 00C0 rjmp .L423
4822 .L424:
4823 26dc 1092 0000 sts delay_ausschalten.8,__zero_reg__
4824 .L423:
4825 26e0 8091 0000 lds r24,GasIsZeroCnt
4826 26e4 9091 0000 lds r25,(GasIsZeroCnt)+1
4827 26e8 13E0 ldi r17,hi8(1000)
4828 26ea 883E cpi r24,lo8(1000)
4829 26ec 9107 cpc r25,r17
4830 26ee 00F4 brsh .L381
4831 26f0 0196 adiw r24,1
4832 26f2 9093 0000 sts (GasIsZeroCnt)+1,r25
4833 26f6 8093 0000 sts GasIsZeroCnt,r24
4834 26fa 00C0 rjmp .L381
4835 .L408:
4836 26fc 1092 0000 sts move_safety_switch.9,__zero_reg__
4837 2700 1092 0000 sts (GasIsZeroCnt)+1,__zero_reg__
4838 2704 1092 0000 sts GasIsZeroCnt,__zero_reg__
4839 2708 00C0 rjmp .L381
4840 .L382:
4841 270a 2E5E subi r18,lo8(750)
4842 270c 3240 sbci r19,hi8(750)
4843 270e 00F0 brlo .L381
4844 2710 8091 0000 lds r24,GPSInfo+4
4845 2714 9091 0000 lds r25,(GPSInfo+4)+1
4846 2718 8059 subi r24,lo8(400)
4847 271a 9140 sbci r25,hi8(400)
4848 271c 00F4 brsh .L381
4849 271e 8091 0000 lds r24,HoehenWert
4850 2722 9091 0000 lds r25,(HoehenWert)+1
4851 2726 A091 0000 lds r26,(HoehenWert)+2
4852 272a B091 0000 lds r27,(HoehenWert)+3
4853 272e 8C5D subi r24,lo8(1500)
4854 2730 9540 sbci r25,hi8(1500)
4855 2732 A040 sbci r26,hlo8(1500)
4856 2734 B040 sbci r27,hhi8(1500)
4857 2736 04F4 brge .L381
4858 2738 80E3 ldi r24,lo8(30000)
4859 273a 95E7 ldi r25,hi8(30000)
4860 273c 9093 0000 sts (GasIsZeroCnt)+1,r25
4861 2740 8093 0000 sts GasIsZeroCnt,r24
4862 2744 8091 0000 lds r24,modell_fliegt
4863 2748 9091 0000 lds r25,(modell_fliegt)+1
4864 274c 8A5E subi r24,lo8(1002)
4865 274e 9340 sbci r25,hi8(1002)
4866 2750 00F0 brlo .L381
4867 2752 89EE ldi r24,lo8(1001)
4868 2754 93E0 ldi r25,hi8(1001)
4869 2756 9093 0000 sts (modell_fliegt)+1,r25
4870 275a 8093 0000 sts modell_fliegt,r24
4871 .L381:
4872 275e 8091 0000 lds r24,NewPpmData
4873 2762 8150 subi r24,lo8(-(-1))
4874 2764 8093 0000 sts NewPpmData,r24
4875 2768 8091 0000 lds r24,NewPpmData
4876 276c 8F3F cpi r24,lo8(-1)
4877 276e 01F0 breq .L437
4878 2770 8091 0000 lds r24,FC_StatusFlags
4879 2774 84FF sbrs r24,4
4880 2776 00C0 rjmp .L436
4881 .L437:
4882 2778 0E94 0000 call ParameterZuordnung
4883 277c B090 0000 lds r11,EE_Parameter+23
4884 2780 8091 0000 lds r24,stick_nick.12
4885 2784 9091 0000 lds r25,(stick_nick.12)+1
4886 2788 9C01 movw r18,r24
4887 278a 220F lsl r18
4888 278c 331F rol r19
4889 278e 280F add r18,r24
4890 2790 391F adc r19,r25
4891 2792 C090 0000 lds r12,EE_Parameter+1
4892 2796 AC2D mov r26,r12
4893 2798 BB27 clr r27
4894 279a AA0F add r26,r26
4895 279c BB1F adc r27,r27
4896 279e FD01 movw r30,r26
4897 27a0 E050 subi r30,lo8(-(PPM_in))
4898 27a2 F040 sbci r31,hi8(-(PPM_in))
4899 27a4 4B2D mov r20,r11
4900 27a6 5527 clr r21
4901 27a8 8081 ld r24,Z
4902 27aa 9181 ldd r25,Z+1
4903 27ac 849F mul r24,r20
4904 27ae F001 movw r30,r0
4905 27b0 859F mul r24,r21
4906 27b2 F00D add r31,r0
4907 27b4 949F mul r25,r20
4908 27b6 F00D add r31,r0
4909 27b8 1124 clr r1
4910 27ba 2E0F add r18,r30
4911 27bc 3F1F adc r19,r31
4912 27be 37FF sbrs r19,7
4913 27c0 00C0 rjmp .L438
4914 27c2 2D5F subi r18,lo8(-(3))
4915 27c4 3F4F sbci r19,hi8(-(3))
4916 .L438:
4917 27c6 B901 movw r22,r18
4918 27c8 7595 asr r23
4919 27ca 6795 ror r22
4920 27cc 7595 asr r23
4921 27ce 6795 ror r22
4922 27d0 A050 subi r26,lo8(-(PPM_diff))
4923 27d2 B040 sbci r27,hi8(-(PPM_diff))
4924 27d4 8091 0000 lds r24,EE_Parameter+24
4925 27d8 082F mov r16,r24
4926 27da 1127 clr r17
4927 27dc 8D91 ld r24,X+
4928 27de 9C91 ld r25,X
4929 27e0 809F mul r24,r16
4930 27e2 7001 movw r14,r0
4931 27e4 819F mul r24,r17
4932 27e6 F00C add r15,r0
4933 27e8 909F mul r25,r16
4934 27ea F00C add r15,r0
4935 27ec 1124 clr r1
4936 27ee 6E0D add r22,r14
4937 27f0 7F1D adc r23,r15
4938 27f2 7093 0000 sts (stick_nick.12)+1,r23
4939 27f6 6093 0000 sts stick_nick.12,r22
4940 27fa 8091 0000 lds r24,stick_roll.13
4941 27fe 9091 0000 lds r25,(stick_roll.13)+1
4942 2802 9C01 movw r18,r24
4943 2804 220F lsl r18
4944 2806 331F rol r19
4945 2808 280F add r18,r24
4946 280a 391F adc r19,r25
4947 280c D090 0000 lds r13,EE_Parameter+2
4948 2810 AD2D mov r26,r13
4949 2812 BB27 clr r27
4950 2814 AA0F add r26,r26
4951 2816 BB1F adc r27,r27
4952 2818 FD01 movw r30,r26
4953 281a E050 subi r30,lo8(-(PPM_in))
4954 281c F040 sbci r31,hi8(-(PPM_in))
4955 281e 8081 ld r24,Z
4956 2820 9181 ldd r25,Z+1
4957 2822 849F mul r24,r20
4958 2824 F001 movw r30,r0
4959 2826 859F mul r24,r21
4960 2828 F00D add r31,r0
4961 282a 949F mul r25,r20
4962 282c F00D add r31,r0
4963 282e 1124 clr r1
4964 2830 2E0F add r18,r30
4965 2832 3F1F adc r19,r31
4966 2834 37FF sbrs r19,7
4967 2836 00C0 rjmp .L439
4968 2838 2D5F subi r18,lo8(-(3))
4969 283a 3F4F sbci r19,hi8(-(3))
4970 .L439:
4971 283c A901 movw r20,r18
4972 283e 5595 asr r21
4973 2840 4795 ror r20
4974 2842 5595 asr r21
4975 2844 4795 ror r20
4976 2846 A050 subi r26,lo8(-(PPM_diff))
4977 2848 B040 sbci r27,hi8(-(PPM_diff))
4978 284a 8D91 ld r24,X+
4979 284c 9C91 ld r25,X
4980 284e 809F mul r24,r16
4981 2850 7001 movw r14,r0
4982 2852 819F mul r24,r17
4983 2854 F00C add r15,r0
4984 2856 909F mul r25,r16
4985 2858 F00C add r15,r0
4986 285a 1124 clr r1
4987 285c 4E0D add r20,r14
4988 285e 5F1D adc r21,r15
4989 2860 5093 0000 sts (stick_roll.13)+1,r21
4990 2864 4093 0000 sts stick_roll.13,r20
4991 2868 8091 0000 lds r24,CareFree
4992 286c 8823 tst r24
4993 286e 01F4 brne .+2
4994 2870 00C0 rjmp .L440
4995 2872 CB01 movw r24,r22
4996 2874 77FD sbrc r23,7
4997 2876 0396 adiw r24,3
4998 .L441:
4999 2878 DC01 movw r26,r24
5000 287a B595 asr r27
5001 287c A795 ror r26
5002 287e B595 asr r27
5003 2880 A795 ror r26
5004 2882 CA01 movw r24,r20
5005 2884 57FD sbrc r21,7
5006 2886 0396 adiw r24,3
5007 .L442:
5008 2888 FC01 movw r30,r24
5009 288a F595 asr r31
5010 288c E795 ror r30
5011 288e F595 asr r31
5012 2890 E795 ror r30
5013 2892 8091 0000 lds r24,FromNC_Rotate_C
5014 2896 682F mov r22,r24
5015 2898 7727 clr r23
5016 289a 67FD sbrc r22,7
5017 289c 7095 com r23
5018 289e 6A9F mul r22,r26
5019 28a0 9001 movw r18,r0
5020 28a2 6B9F mul r22,r27
5021 28a4 300D add r19,r0
5022 28a6 7A9F mul r23,r26
5023 28a8 300D add r19,r0
5024 28aa 1124 clr r1
5025 28ac 8091 0000 lds r24,FromNC_Rotate_S
5026 28b0 482F mov r20,r24
5027 28b2 5527 clr r21
5028 28b4 47FD sbrc r20,7
5029 28b6 5095 com r21
5030 28b8 4E9F mul r20,r30
5031 28ba C001 movw r24,r0
5032 28bc 4F9F mul r20,r31
5033 28be 900D add r25,r0
5034 28c0 5E9F mul r21,r30
5035 28c2 900D add r25,r0
5036 28c4 1124 clr r1
5037 28c6 280F add r18,r24
5038 28c8 391F adc r19,r25
5039 28ca 37FF sbrs r19,7
5040 28cc 00C0 rjmp .L443
5041 28ce 295F subi r18,lo8(-(7))
5042 28d0 3F4F sbci r19,hi8(-(7))
5043 .L443:
5044 28d2 93E0 ldi r25,3
5045 28d4 3595 1: asr r19
5046 28d6 2795 ror r18
5047 28d8 9A95 dec r25
5048 28da 01F4 brne 1b
5049 28dc 3093 0000 sts (StickNick)+1,r19
5050 28e0 2093 0000 sts StickNick,r18
5051 28e4 6E9F mul r22,r30
5052 28e6 9001 movw r18,r0
5053 28e8 6F9F mul r22,r31
5054 28ea 300D add r19,r0
5055 28ec 7E9F mul r23,r30
5056 28ee 300D add r19,r0
5057 28f0 1124 clr r1
5058 28f2 4A9F mul r20,r26
5059 28f4 C001 movw r24,r0
5060 28f6 4B9F mul r20,r27
5061 28f8 900D add r25,r0
5062 28fa 5A9F mul r21,r26
5063 28fc 900D add r25,r0
5064 28fe 1124 clr r1
5065 2900 00C0 rjmp .L919
5066 .L440:
5067 2902 8091 0000 lds r24,EE_Parameter+98
5068 2906 E82F mov r30,r24
5069 2908 FF27 clr r31
5070 290a E050 subi r30,lo8(-(sintab))
5071 290c F040 sbci r31,hi8(-(sintab))
5072 290e 8681 ldd r24,Z+6
5073 2910 8093 0000 sts FromNC_Rotate_C,r24
5074 2914 9081 ld r25,Z
5075 2916 9093 0000 sts FromNC_Rotate_S,r25
5076 291a A82F mov r26,r24
5077 291c BB27 clr r27
5078 291e A7FD sbrc r26,7
5079 2920 B095 com r27
5080 2922 A69F mul r26,r22
5081 2924 9001 movw r18,r0
5082 2926 A79F mul r26,r23
5083 2928 300D add r19,r0
5084 292a B69F mul r27,r22
5085 292c 300D add r19,r0
5086 292e 1124 clr r1
5087 2930 E92F mov r30,r25
5088 2932 FF27 clr r31
5089 2934 E7FD sbrc r30,7
5090 2936 F095 com r31
5091 2938 E49F mul r30,r20
5092 293a C001 movw r24,r0
5093 293c E59F mul r30,r21
5094 293e 900D add r25,r0
5095 2940 F49F mul r31,r20
5096 2942 900D add r25,r0
5097 2944 1124 clr r1
5098 2946 280F add r18,r24
5099 2948 391F adc r19,r25
5100 294a 37FF sbrs r19,7
5101 294c 00C0 rjmp .L446
5102 294e 295F subi r18,lo8(-(7))
5103 2950 3F4F sbci r19,hi8(-(7))
5104 .L446:
5105 2952 83E0 ldi r24,3
5106 2954 3595 1: asr r19
5107 2956 2795 ror r18
5108 2958 8A95 dec r24
5109 295a 01F4 brne 1b
5110 295c 3093 0000 sts (StickNick)+1,r19
5111 2960 2093 0000 sts StickNick,r18
5112 2964 A49F mul r26,r20
5113 2966 9001 movw r18,r0
5114 2968 A59F mul r26,r21
5115 296a 300D add r19,r0
5116 296c B49F mul r27,r20
5117 296e 300D add r19,r0
5118 2970 1124 clr r1
5119 2972 E69F mul r30,r22
5120 2974 C001 movw r24,r0
5121 2976 E79F mul r30,r23
5122 2978 900D add r25,r0
5123 297a F69F mul r31,r22
5124 297c 900D add r25,r0
5125 297e 1124 clr r1
5126 .L919:
5127 2980 281B sub r18,r24
5128 2982 390B sbc r19,r25
5129 2984 37FF sbrs r19,7
5130 2986 00C0 rjmp .L447
5131 2988 295F subi r18,lo8(-(7))
5132 298a 3F4F sbci r19,hi8(-(7))
5133 .L447:
5134 298c 03E0 ldi r16,3
5135 298e 3595 1: asr r19
5136 2990 2795 ror r18
5137 2992 0A95 dec r16
5138 2994 01F4 brne 1b
5139 2996 3093 0000 sts (StickRoll)+1,r19
5140 299a 2093 0000 sts StickRoll,r18
5141 299e 8091 0000 lds r24,EE_Parameter+4
5142 29a2 E82F mov r30,r24
5143 29a4 FF27 clr r31
5144 29a6 EE0F add r30,r30
5145 29a8 FF1F adc r31,r31
5146 29aa E050 subi r30,lo8(-(PPM_in))
5147 29ac F040 sbci r31,hi8(-(PPM_in))
5148 29ae 8081 ld r24,Z
5149 29b0 9181 ldd r25,Z+1
5150 29b2 9095 com r25
5151 29b4 8195 neg r24
5152 29b6 9F4F sbci r25,lo8(-1)
5153 29b8 9093 0000 sts (StickGier)+1,r25
5154 29bc 8093 0000 sts StickGier,r24
5155 29c0 8530 cpi r24,5
5156 29c2 9105 cpc r25,__zero_reg__
5157 29c4 04F0 brlt .L448
5158 29c6 0497 sbiw r24,4
5159 29c8 00C0 rjmp .L891
5160 .L448:
5161 29ca 0FEF ldi r16,hi8(-4)
5162 29cc 8C3F cpi r24,lo8(-4)
5163 29ce 9007 cpc r25,r16
5164 29d0 04F4 brge .L450
5165 29d2 0496 adiw r24,4
5166 .L891:
5167 29d4 9093 0000 sts (StickGier)+1,r25
5168 29d8 8093 0000 sts StickGier,r24
5169 29dc 00C0 rjmp .L449
5170 .L450:
5171 29de 1092 0000 sts (StickGier)+1,__zero_reg__
5172 29e2 1092 0000 sts StickGier,__zero_reg__
5173 .L449:
5174 29e6 8091 0000 lds r24,GPS_Aid_StickMultiplikator
5175 29ea 8823 tst r24
5176 29ec 01F4 brne .+2
5177 29ee 00C0 rjmp .L452
5178 29f0 282F mov r18,r24
5179 29f2 3327 clr r19
5180 29f4 8091 0000 lds r24,StickNick
5181 29f8 9091 0000 lds r25,(StickNick)+1
5182 29fc 97FD sbrc r25,7
5183 29fe 0796 adiw r24,7
5184 .L453:
5185 2a00 13E0 ldi r17,3
5186 2a02 9595 1: asr r25
5187 2a04 8795 ror r24
5188 2a06 1A95 dec r17
5189 2a08 01F4 brne 1b
5190 2a0a 289F mul r18,r24
5191 2a0c A001 movw r20,r0
5192 2a0e 299F mul r18,r25
5193 2a10 500D add r21,r0
5194 2a12 389F mul r19,r24
5195 2a14 500D add r21,r0
5196 2a16 1124 clr r1
5197 2a18 CA01 movw r24,r20
5198 2a1a 57FD sbrc r21,7
5199 2a1c 0F96 adiw r24,15
5200 .L454:
5201 2a1e B4E0 ldi r27,4
5202 2a20 9595 1: asr r25
5203 2a22 8795 ror r24
5204 2a24 BA95 dec r27
5205 2a26 01F4 brne 1b
5206 2a28 9093 0000 sts (StickNick)+1,r25
5207 2a2c 8093 0000 sts StickNick,r24
5208 2a30 8091 0000 lds r24,StickRoll
5209 2a34 9091 0000 lds r25,(StickRoll)+1
5210 2a38 97FD sbrc r25,7
5211 2a3a 0796 adiw r24,7
5212 .L455:
5213 2a3c A3E0 ldi r26,3
5214 2a3e 9595 1: asr r25
5215 2a40 8795 ror r24
5216 2a42 AA95 dec r26
5217 2a44 01F4 brne 1b
5218 2a46 289F mul r18,r24
5219 2a48 B001 movw r22,r0
5220 2a4a 299F mul r18,r25
5221 2a4c 700D add r23,r0
5222 2a4e 389F mul r19,r24
5223 2a50 700D add r23,r0
5224 2a52 1124 clr r1
5225 2a54 CB01 movw r24,r22
5226 2a56 77FD sbrc r23,7
5227 2a58 0F96 adiw r24,15
5228 .L456:
5229 2a5a F4E0 ldi r31,4
5230 2a5c 9595 1: asr r25
5231 2a5e 8795 ror r24
5232 2a60 FA95 dec r31
5233 2a62 01F4 brne 1b
5234 2a64 9093 0000 sts (StickRoll)+1,r25
5235 2a68 8093 0000 sts StickRoll,r24
5236 .L452:
5237 2a6c 8090 0000 lds r8,StickNick
5238 2a70 9090 0000 lds r9,(StickNick)+1
5239 2a74 8091 0000 lds r24,GPS_Nick
5240 2a78 9091 0000 lds r25,(GPS_Nick)+1
5241 2a7c 881A sub r8,r24
5242 2a7e 990A sbc r9,r25
5243 2a80 9092 0000 sts (StickNick)+1,r9
5244 2a84 8092 0000 sts StickNick,r8
5245 2a88 0091 0000 lds r16,StickRoll
5246 2a8c 1091 0000 lds r17,(StickRoll)+1
5247 2a90 8091 0000 lds r24,GPS_Roll
5248 2a94 9091 0000 lds r25,(GPS_Roll)+1
5249 2a98 081B sub r16,r24
5250 2a9a 190B sbc r17,r25
5251 2a9c 1093 0000 sts (StickRoll)+1,r17
5252 2aa0 0093 0000 sts StickRoll,r16
5253 2aa4 8091 0000 lds r24,EE_Parameter+3
5254 2aa8 E82F mov r30,r24
5255 2aaa FF27 clr r31
5256 2aac EE0F add r30,r30
5257 2aae FF1F adc r31,r31
5258 2ab0 E050 subi r30,lo8(-(PPM_in))
5259 2ab2 F040 sbci r31,hi8(-(PPM_in))
5260 2ab4 E080 ld r14,Z
5261 2ab6 F180 ldd r15,Z+1
5262 2ab8 8FE7 ldi r24,lo8(127)
5263 2aba 90E0 ldi r25,hi8(127)
5264 2abc E80E add r14,r24
5265 2abe F91E adc r15,r25
5266 2ac0 F092 0000 sts (StickGas)+1,r15
5267 2ac4 E092 0000 sts StickGas,r14
5268 2ac8 8091 0000 lds r24,Parameter_Gyro_P
5269 2acc 9927 clr r25
5270 2ace AA27 clr r26
5271 2ad0 97FD sbrc r25,7
5272 2ad2 A095 com r26
5273 2ad4 BA2F mov r27,r26
5274 2ad6 BC01 movw r22,r24
5275 2ad8 CD01 movw r24,r26
5276 2ada 0E94 0000 call __floatsisf
5277 2ade DC01 movw r26,r24
5278 2ae0 CB01 movw r24,r22
5279 2ae2 20E0 ldi r18,lo8(0x41200000)
5280 2ae4 30E0 ldi r19,hi8(0x41200000)
5281 2ae6 40E2 ldi r20,hlo8(0x41200000)
5282 2ae8 51E4 ldi r21,hhi8(0x41200000)
5283 2aea BC01 movw r22,r24
5284 2aec CD01 movw r24,r26
5285 2aee 0E94 0000 call __addsf3
5286 2af2 DC01 movw r26,r24
5287 2af4 CB01 movw r24,r22
5288 2af6 BC01 movw r22,r24
5289 2af8 CD01 movw r24,r26
5290 2afa 0E94 0000 call __fixunssfsi
5291 2afe DC01 movw r26,r24
5292 2b00 CB01 movw r24,r22
5293 2b02 8093 0000 sts GyroFaktor,r24
5294 2b06 8091 0000 lds r24,Parameter_Gyro_I
5295 2b0a 8093 0000 sts IntegralFaktor,r24
5296 2b0e 8091 0000 lds r24,Parameter_Gyro_Gier_P
5297 2b12 9927 clr r25
5298 2b14 AA27 clr r26
5299 2b16 97FD sbrc r25,7
5300 2b18 A095 com r26
5301 2b1a BA2F mov r27,r26
5302 2b1c BC01 movw r22,r24
5303 2b1e CD01 movw r24,r26
5304 2b20 0E94 0000 call __floatsisf
5305 2b24 DC01 movw r26,r24
5306 2b26 CB01 movw r24,r22
5307 2b28 20E0 ldi r18,lo8(0x41200000)
5308 2b2a 30E0 ldi r19,hi8(0x41200000)
5309 2b2c 40E2 ldi r20,hlo8(0x41200000)
5310 2b2e 51E4 ldi r21,hhi8(0x41200000)
5311 2b30 BC01 movw r22,r24
5312 2b32 CD01 movw r24,r26
5313 2b34 0E94 0000 call __addsf3
5314 2b38 DC01 movw r26,r24
5315 2b3a CB01 movw r24,r22
5316 2b3c BC01 movw r22,r24
5317 2b3e CD01 movw r24,r26
5318 2b40 0E94 0000 call __fixunssfsi
5319 2b44 DC01 movw r26,r24
5320 2b46 CB01 movw r24,r22
5321 2b48 8093 0000 sts GyroFaktorGier,r24
5322 2b4c 8091 0000 lds r24,Parameter_Gyro_Gier_I
5323 2b50 8093 0000 sts IntegralFaktorGier,r24
5324 2b54 8091 0000 lds r24,ExternControl+10
5325 2b58 80FF sbrs r24,0
5326 2b5a 00C0 rjmp .L457
5327 2b5c 8091 0000 lds r24,Parameter_ExternalControl
5328 2b60 8138 cpi r24,lo8(-127)
5329 2b62 00F4 brsh .+2
5330 2b64 00C0 rjmp .L457
5331 2b66 8091 0000 lds r24,ExternControl+3
5332 2b6a 9927 clr r25
5333 2b6c 87FD sbrc r24,7
5334 2b6e 9095 com r25
5335 2b70 2B2D mov r18,r11
5336 2b72 3327 clr r19
5337 2b74 829F mul r24,r18
5338 2b76 D001 movw r26,r0
5339 2b78 839F mul r24,r19
5340 2b7a B00D add r27,r0
5341 2b7c 929F mul r25,r18
5342 2b7e B00D add r27,r0
5343 2b80 1124 clr r1
5344 2b82 8A0E add r8,r26
5345 2b84 9B1E adc r9,r27
5346 2b86 9092 0000 sts (StickNick)+1,r9
5347 2b8a 8092 0000 sts StickNick,r8
5348 2b8e 8091 0000 lds r24,ExternControl+4
5349 2b92 9927 clr r25
5350 2b94 87FD sbrc r24,7
5351 2b96 9095 com r25
5352 2b98 829F mul r24,r18
5353 2b9a F001 movw r30,r0
5354 2b9c 839F mul r24,r19
5355 2b9e F00D add r31,r0
5356 2ba0 929F mul r25,r18
5357 2ba2 F00D add r31,r0
5358 2ba4 1124 clr r1
5359 2ba6 0E0F add r16,r30
5360 2ba8 1F1F adc r17,r31
5361 2baa 1093 0000 sts (StickRoll)+1,r17
5362 2bae 0093 0000 sts StickRoll,r16
5363 2bb2 8091 0000 lds r24,ExternControl+5
5364 2bb6 282F mov r18,r24
5365 2bb8 3327 clr r19
5366 2bba 27FD sbrc r18,7
5367 2bbc 3095 com r19
5368 2bbe 8091 0000 lds r24,StickGier
5369 2bc2 9091 0000 lds r25,(StickGier)+1
5370 2bc6 820F add r24,r18
5371 2bc8 931F adc r25,r19
5372 2bca 9093 0000 sts (StickGier)+1,r25
5373 2bce 8093 0000 sts StickGier,r24
5374 2bd2 8091 0000 lds r24,ExternControl+7
5375 2bd6 282F mov r18,r24
5376 2bd8 3327 clr r19
5377 2bda 27FD sbrc r18,7
5378 2bdc 3095 com r19
5379 2bde 8091 0000 lds r24,EE_Parameter+18
5380 2be2 9927 clr r25
5381 2be4 289F mul r18,r24
5382 2be6 8001 movw r16,r0
5383 2be8 299F mul r18,r25
5384 2bea 100D add r17,r0
5385 2bec 389F mul r19,r24
5386 2bee 100D add r17,r0
5387 2bf0 1124 clr r1
5388 2bf2 1093 0000 sts (ExternHoehenValue)+1,r17
5389 2bf6 0093 0000 sts ExternHoehenValue,r16
5390 2bfa 8091 0000 lds r24,ExternControl+6
5391 2bfe 9927 clr r25
5392 2c00 8E15 cp r24,r14
5393 2c02 9F05 cpc r25,r15
5394 2c04 04F4 brge .L457
5395 2c06 9093 0000 sts (StickGas)+1,r25
5396 2c0a 8093 0000 sts StickGas,r24
5397 .L457:
5398 2c0e 8091 0000 lds r24,StickGas
5399 2c12 9091 0000 lds r25,(StickGas)+1
5400 2c16 97FF sbrs r25,7
5401 2c18 00C0 rjmp .L459
5402 2c1a 1092 0000 sts (StickGas)+1,__zero_reg__
5403 2c1e 1092 0000 sts StickGas,__zero_reg__
5404 .L459:
5405 2c22 8091 0000 lds r24,Parameter_GlobalConfig
5406 2c26 82FF sbrs r24,2
5407 2c28 00C0 rjmp .L460
5408 2c2a 1092 0000 sts IntegralFaktor,__zero_reg__
5409 .L460:
5410 2c2e 4091 0000 lds r20,StickNick
5411 2c32 5091 0000 lds r21,(StickNick)+1
5412 2c36 CA01 movw r24,r20
5413 2c38 57FD sbrc r21,7
5414 2c3a 0396 adiw r24,3
5415 .L462:
5416 2c3c 9C01 movw r18,r24
5417 2c3e 3595 asr r19
5418 2c40 2795 ror r18
5419 2c42 3595 asr r19
5420 2c44 2795 ror r18
5421 2c46 37FF sbrs r19,7
5422 2c48 00C0 rjmp .L463
5423 2c4a 3095 com r19
5424 2c4c 2195 neg r18
5425 2c4e 3F4F sbci r19,lo8(-1)
5426 .L463:
5427 2c50 8091 0000 lds r24,MaxStickNick
5428 2c54 9091 0000 lds r25,(MaxStickNick)+1
5429 2c58 8217 cp r24,r18
5430 2c5a 9307 cpc r25,r19
5431 2c5c 04F4 brge .L461
5432 2c5e CA01 movw r24,r20
5433 2c60 57FF sbrs r21,7
5434 2c62 00C0 rjmp .L464
5435 2c64 9095 com r25
5436 2c66 8195 neg r24
5437 2c68 9F4F sbci r25,lo8(-1)
5438 .L464:
5439 2c6a 97FD sbrc r25,7
5440 2c6c 0396 adiw r24,3
5441 .L465:
5442 2c6e 9595 asr r25
5443 2c70 8795 ror r24
5444 2c72 9595 asr r25
5445 2c74 8795 ror r24
5446 2c76 9093 0000 sts (MaxStickNick)+1,r25
5447 2c7a 8093 0000 sts MaxStickNick,r24
5448 2c7e 8536 cpi r24,101
5449 2c80 9105 cpc r25,__zero_reg__
5450 2c82 04F0 brlt .L467
5451 2c84 84E6 ldi r24,lo8(100)
5452 2c86 90E0 ldi r25,hi8(100)
5453 2c88 00C0 rjmp .L892
5454 .L461:
5455 2c8a 0197 sbiw r24,1
5456 .L892:
5457 2c8c 9093 0000 sts (MaxStickNick)+1,r25
5458 2c90 8093 0000 sts MaxStickNick,r24
5459 .L467:
5460 2c94 4091 0000 lds r20,StickRoll
5461 2c98 5091 0000 lds r21,(StickRoll)+1
5462 2c9c CA01 movw r24,r20
5463 2c9e 57FD sbrc r21,7
5464 2ca0 0396 adiw r24,3
5465 .L469:
5466 2ca2 9C01 movw r18,r24
5467 2ca4 3595 asr r19
5468 2ca6 2795 ror r18
5469 2ca8 3595 asr r19
5470 2caa 2795 ror r18
5471 2cac 37FF sbrs r19,7
5472 2cae 00C0 rjmp .L470
5473 2cb0 3095 com r19
5474 2cb2 2195 neg r18
5475 2cb4 3F4F sbci r19,lo8(-1)
5476 .L470:
5477 2cb6 8091 0000 lds r24,MaxStickRoll
5478 2cba 9091 0000 lds r25,(MaxStickRoll)+1
5479 2cbe 8217 cp r24,r18
5480 2cc0 9307 cpc r25,r19
5481 2cc2 04F4 brge .L468
5482 2cc4 CA01 movw r24,r20
5483 2cc6 57FF sbrs r21,7
5484 2cc8 00C0 rjmp .L471
5485 2cca 9095 com r25
5486 2ccc 8195 neg r24
5487 2cce 9F4F sbci r25,lo8(-1)
5488 .L471:
5489 2cd0 97FD sbrc r25,7
5490 2cd2 0396 adiw r24,3
5491 .L472:
5492 2cd4 9595 asr r25
5493 2cd6 8795 ror r24
5494 2cd8 9595 asr r25
5495 2cda 8795 ror r24
5496 2cdc 9093 0000 sts (MaxStickRoll)+1,r25
5497 2ce0 8093 0000 sts MaxStickRoll,r24
5498 2ce4 8536 cpi r24,101
5499 2ce6 9105 cpc r25,__zero_reg__
5500 2ce8 04F0 brlt .L474
5501 2cea 84E6 ldi r24,lo8(100)
5502 2cec 90E0 ldi r25,hi8(100)
5503 2cee 00C0 rjmp .L893
5504 .L468:
5505 2cf0 0197 sbiw r24,1
5506 .L893:
5507 2cf2 9093 0000 sts (MaxStickRoll)+1,r25
5508 2cf6 8093 0000 sts MaxStickRoll,r24
5509 .L474:
5510 2cfa 8091 0000 lds r24,FC_StatusFlags
5511 2cfe 84FF sbrs r24,4
5512 2d00 00C0 rjmp .L475
5513 2d02 1092 0000 sts (MaxStickNick)+1,__zero_reg__
5514 2d06 1092 0000 sts MaxStickNick,__zero_reg__
5515 2d0a 1092 0000 sts (MaxStickRoll)+1,__zero_reg__
5516 2d0e 1092 0000 sts MaxStickRoll,__zero_reg__
5517 .L475:
5518 2d12 ED2D mov r30,r13
5519 2d14 FF27 clr r31
5520 2d16 EE0F add r30,r30
5521 2d18 FF1F adc r31,r31
5522 2d1a E050 subi r30,lo8(-(PPM_in))
5523 2d1c F040 sbci r31,hi8(-(PPM_in))
5524 2d1e 4091 0000 lds r20,EE_Parameter+60
5525 2d22 242F mov r18,r20
5526 2d24 3327 clr r19
5527 2d26 8081 ld r24,Z
5528 2d28 9181 ldd r25,Z+1
5529 2d2a 2817 cp r18,r24
5530 2d2c 3907 cpc r19,r25
5531 2d2e 04F4 brge .L476
5532 2d30 8091 0000 lds r24,EE_Parameter+108
5533 2d34 82FF sbrs r24,2
5534 2d36 00C0 rjmp .L476
5535 2d38 81E0 ldi r24,lo8(1)
5536 2d3a 8093 0000 sts Looping_Links,r24
5537 2d3e 00C0 rjmp .L477
5538 .L476:
5539 2d40 ED2D mov r30,r13
5540 2d42 FF27 clr r31
5541 2d44 EE0F add r30,r30
5542 2d46 FF1F adc r31,r31
5543 2d48 E050 subi r30,lo8(-(PPM_in))
5544 2d4a F040 sbci r31,hi8(-(PPM_in))
5545 2d4c 842F mov r24,r20
5546 2d4e 9927 clr r25
5547 2d50 2091 0000 lds r18,EE_Parameter+61
5548 2d54 821B sub r24,r18
5549 2d56 9109 sbc r25,__zero_reg__
5550 2d58 2081 ld r18,Z
5551 2d5a 3181 ldd r19,Z+1
5552 2d5c 2817 cp r18,r24
5553 2d5e 3907 cpc r19,r25
5554 2d60 04F4 brge .L477
5555 2d62 1092 0000 sts Looping_Links,__zero_reg__
5556 .L477:
5557 2d66 4091 0000 lds r20,EE_Parameter+2
5558 2d6a E42F mov r30,r20
5559 2d6c FF27 clr r31
5560 2d6e EE0F add r30,r30
5561 2d70 FF1F adc r31,r31
5562 2d72 E050 subi r30,lo8(-(PPM_in))
5563 2d74 F040 sbci r31,hi8(-(PPM_in))
5564 2d76 5091 0000 lds r21,EE_Parameter+60
5565 2d7a 852F mov r24,r21
5566 2d7c 9927 clr r25
5567 2d7e 2227 clr r18
5568 2d80 3327 clr r19
5569 2d82 281B sub r18,r24
5570 2d84 390B sbc r19,r25
5571 2d86 8081 ld r24,Z
5572 2d88 9181 ldd r25,Z+1
5573 2d8a 8217 cp r24,r18
5574 2d8c 9307 cpc r25,r19
5575 2d8e 04F4 brge .L479
5576 2d90 8091 0000 lds r24,EE_Parameter+108
5577 2d94 83FF sbrs r24,3
5578 2d96 00C0 rjmp .L479
5579 2d98 81E0 ldi r24,lo8(1)
5580 2d9a 8093 0000 sts Looping_Rechts,r24
5581 2d9e 00C0 rjmp .L480
5582 .L479:
5583 2da0 8091 0000 lds r24,Looping_Rechts
5584 2da4 8823 tst r24
5585 2da6 01F0 breq .L480
5586 2da8 E42F mov r30,r20
5587 2daa FF27 clr r31
5588 2dac EE0F add r30,r30
5589 2dae FF1F adc r31,r31
5590 2db0 E050 subi r30,lo8(-(PPM_in))
5591 2db2 F040 sbci r31,hi8(-(PPM_in))
5592 2db4 8091 0000 lds r24,EE_Parameter+61
5593 2db8 9927 clr r25
5594 2dba 851B sub r24,r21
5595 2dbc 9109 sbc r25,__zero_reg__
5596 2dbe 2081 ld r18,Z
5597 2dc0 3181 ldd r19,Z+1
5598 2dc2 8217 cp r24,r18
5599 2dc4 9307 cpc r25,r19
5600 2dc6 04F4 brge .L480
5601 2dc8 1092 0000 sts Looping_Rechts,__zero_reg__
5602 .L480:
5603 2dcc EC2D mov r30,r12
5604 2dce FF27 clr r31
5605 2dd0 EE0F add r30,r30
5606 2dd2 FF1F adc r31,r31
5607 2dd4 E050 subi r30,lo8(-(PPM_in))
5608 2dd6 F040 sbci r31,hi8(-(PPM_in))
5609 2dd8 4091 0000 lds r20,EE_Parameter+60
5610 2ddc 242F mov r18,r20
5611 2dde 3327 clr r19
5612 2de0 8081 ld r24,Z
5613 2de2 9181 ldd r25,Z+1
5614 2de4 2817 cp r18,r24
5615 2de6 3907 cpc r19,r25
5616 2de8 04F4 brge .L483
5617 2dea 8091 0000 lds r24,EE_Parameter+108
5618 2dee 80FF sbrs r24,0
5619 2df0 00C0 rjmp .L483
5620 2df2 81E0 ldi r24,lo8(1)
5621 2df4 8093 0000 sts Looping_Oben,r24
5622 2df8 00C0 rjmp .L484
5623 .L483:
5624 2dfa 8091 0000 lds r24,Looping_Oben
5625 2dfe 8823 tst r24
5626 2e00 01F0 breq .L484
5627 2e02 EC2D mov r30,r12
5628 2e04 FF27 clr r31
5629 2e06 EE0F add r30,r30
5630 2e08 FF1F adc r31,r31
5631 2e0a E050 subi r30,lo8(-(PPM_in))
5632 2e0c F040 sbci r31,hi8(-(PPM_in))
5633 2e0e 842F mov r24,r20
5634 2e10 9927 clr r25
5635 2e12 2091 0000 lds r18,EE_Parameter+61
5636 2e16 821B sub r24,r18
5637 2e18 9109 sbc r25,__zero_reg__
5638 2e1a 2081 ld r18,Z
5639 2e1c 3181 ldd r19,Z+1
5640 2e1e 2817 cp r18,r24
5641 2e20 3907 cpc r19,r25
5642 2e22 04F4 brge .L484
5643 2e24 1092 0000 sts Looping_Oben,__zero_reg__
5644 .L484:
5645 2e28 4091 0000 lds r20,EE_Parameter+1
5646 2e2c E42F mov r30,r20
5647 2e2e FF27 clr r31
5648 2e30 EE0F add r30,r30
5649 2e32 FF1F adc r31,r31
5650 2e34 E050 subi r30,lo8(-(PPM_in))
5651 2e36 F040 sbci r31,hi8(-(PPM_in))
5652 2e38 5091 0000 lds r21,EE_Parameter+60
5653 2e3c 852F mov r24,r21
5654 2e3e 9927 clr r25
5655 2e40 2227 clr r18
5656 2e42 3327 clr r19
5657 2e44 281B sub r18,r24
5658 2e46 390B sbc r19,r25
5659 2e48 8081 ld r24,Z
5660 2e4a 9181 ldd r25,Z+1
5661 2e4c 8217 cp r24,r18
5662 2e4e 9307 cpc r25,r19
5663 2e50 04F4 brge .L487
5664 2e52 8091 0000 lds r24,EE_Parameter+108
5665 2e56 81FF sbrs r24,1
5666 2e58 00C0 rjmp .L487
5667 2e5a 81E0 ldi r24,lo8(1)
5668 2e5c 8093 0000 sts Looping_Unten,r24
5669 2e60 00C0 rjmp .L488
5670 .L487:
5671 2e62 8091 0000 lds r24,Looping_Unten
5672 2e66 8823 tst r24
5673 2e68 01F0 breq .L488
5674 2e6a E42F mov r30,r20
5675 2e6c FF27 clr r31
5676 2e6e EE0F add r30,r30
5677 2e70 FF1F adc r31,r31
5678 2e72 E050 subi r30,lo8(-(PPM_in))
5679 2e74 F040 sbci r31,hi8(-(PPM_in))
5680 2e76 8091 0000 lds r24,EE_Parameter+61
5681 2e7a 9927 clr r25
5682 2e7c 851B sub r24,r21
5683 2e7e 9109 sbc r25,__zero_reg__
5684 2e80 2081 ld r18,Z
5685 2e82 3181 ldd r19,Z+1
5686 2e84 8217 cp r24,r18
5687 2e86 9307 cpc r25,r19
5688 2e88 04F4 brge .L488
5689 2e8a 1092 0000 sts Looping_Unten,__zero_reg__
5690 .L488:
5691 2e8e 8091 0000 lds r24,Looping_Links
5692 2e92 8823 tst r24
5693 2e94 01F4 brne .L492
5694 2e96 8091 0000 lds r24,Looping_Rechts
5695 2e9a 8111 cpse r24,__zero_reg__
5696 .L492:
5697 2e9c 81E0 ldi r24,lo8(1)
5698 .L491:
5699 2e9e 8093 0000 sts Looping_Roll,r24
5700 2ea2 8091 0000 lds r24,Looping_Oben
5701 2ea6 8823 tst r24
5702 2ea8 01F4 brne .L495
5703 2eaa 8091 0000 lds r24,Looping_Unten
5704 2eae 8823 tst r24
5705 2eb0 01F0 breq .L494
5706 .L495:
5707 2eb2 81E0 ldi r24,lo8(1)
5708 2eb4 8093 0000 sts Looping_Nick,r24
5709 2eb8 1092 0000 sts Looping_Roll,__zero_reg__
5710 2ebc 1092 0000 sts Looping_Links,__zero_reg__
5711 2ec0 1092 0000 sts Looping_Rechts,__zero_reg__
5712 2ec4 00C0 rjmp .L436
5713 .L494:
5714 2ec6 8093 0000 sts Looping_Nick,r24
5715 .L436:
5716 2eca 8091 0000 lds r24,Looping_Roll
5717 2ece 8823 tst r24
5718 2ed0 01F4 brne .L498
5719 2ed2 8091 0000 lds r24,Looping_Nick
5720 2ed6 8823 tst r24
5721 2ed8 01F0 breq .L497
5722 .L498:
5723 2eda 8091 0000 lds r24,EE_Parameter+59
5724 2ede 9927 clr r25
5725 2ee0 2981 ldd r18,Y+1
5726 2ee2 3A81 ldd r19,Y+2
5727 2ee4 8217 cp r24,r18
5728 2ee6 9307 cpc r25,r19
5729 2ee8 04F4 brge .L499
5730 2eea 9A83 std Y+2,r25
5731 2eec 8983 std Y+1,r24
5732 .L499:
5733 2eee 81E0 ldi r24,lo8(1)
5734 2ef0 8093 0000 sts TrichterFlug,r24
5735 .L497:
5736 2ef4 8091 0000 lds r24,FC_StatusFlags2
5737 2ef8 9927 clr r25
5738 2efa 9C01 movw r18,r24
5739 2efc 2470 andi r18,lo8(4)
5740 2efe 3070 andi r19,hi8(4)
5741 2f00 82FF sbrs r24,2
5742 2f02 00C0 rjmp .L500
5743 2f04 8091 0000 lds r24,GPS_Nick
5744 2f08 9091 0000 lds r25,(GPS_Nick)+1
5745 2f0c 9095 com r25
5746 2f0e 8195 neg r24
5747 2f10 9F4F sbci r25,lo8(-1)
5748 2f12 9093 0000 sts (StickNick)+1,r25
5749 2f16 8093 0000 sts StickNick,r24
5750 2f1a 8091 0000 lds r24,GPS_Roll
5751 2f1e 9091 0000 lds r25,(GPS_Roll)+1
5752 2f22 9095 com r25
5753 2f24 8195 neg r24
5754 2f26 9F4F sbci r25,lo8(-1)
5755 2f28 9093 0000 sts (StickRoll)+1,r25
5756 2f2c 8093 0000 sts StickRoll,r24
5757 2f30 8091 0000 lds r24,StickGasHover
5758 2f34 9091 0000 lds r25,(StickGasHover)+1
5759 2f38 9093 0000 sts (StickGas)+1,r25
5760 2f3c 8093 0000 sts StickGas,r24
5761 2f40 8091 0000 lds r24,Parameter_GlobalConfig
5762 2f44 8B77 andi r24,lo8(123)
5763 2f46 8B66 ori r24,lo8(107)
5764 2f48 8093 0000 sts Parameter_GlobalConfig,r24
5765 2f4c 8091 0000 lds r24,Parameter_ExtraConfig
5766 2f50 8C7B andi r24,lo8(-68)
5767 2f52 8093 0000 sts Parameter_ExtraConfig,r24
5768 2f56 88EC ldi r24,lo8(-56)
5769 2f58 8093 0000 sts Parameter_HoehenSchalter,r24
5770 2f5c 00C0 rjmp .L501
5771 .L500:
5772 2f5e 8091 0000 lds r24,FC_StatusFlags
5773 2f62 84FF sbrs r24,4
5774 2f64 00C0 rjmp .L501
5775 2f66 3093 0000 sts (StickGier)+1,r19
5776 2f6a 2093 0000 sts StickGier,r18
5777 2f6e 3093 0000 sts (StickNick)+1,r19
5778 2f72 2093 0000 sts StickNick,r18
5779 2f76 3093 0000 sts (StickRoll)+1,r19
5780 2f7a 2093 0000 sts StickRoll,r18
5781 2f7e 9AE5 ldi r25,lo8(90)
5782 2f80 9093 0000 sts GyroFaktor,r25
5783 2f84 88E7 ldi r24,lo8(120)
5784 2f86 8093 0000 sts IntegralFaktor,r24
5785 2f8a 9093 0000 sts GyroFaktorGier,r25
5786 2f8e 8093 0000 sts IntegralFaktorGier,r24
5787 2f92 1092 0000 sts Looping_Roll,__zero_reg__
5788 2f96 1092 0000 sts Looping_Nick,__zero_reg__
5789 .L501:
5790 2f9a 8091 0000 lds r24,MittelIntegralNick
5791 2f9e 9091 0000 lds r25,(MittelIntegralNick)+1
5792 2fa2 A091 0000 lds r26,(MittelIntegralNick)+2
5793 2fa6 B091 0000 lds r27,(MittelIntegralNick)+3
5794 2faa 2091 0000 lds r18,IntegralNick
5795 2fae 3091 0000 lds r19,(IntegralNick)+1
5796 2fb2 4091 0000 lds r20,(IntegralNick)+2
5797 2fb6 5091 0000 lds r21,(IntegralNick)+3
5798 2fba 820F add r24,r18
5799 2fbc 931F adc r25,r19
5800 2fbe A41F adc r26,r20
5801 2fc0 B51F adc r27,r21
5802 2fc2 8093 0000 sts MittelIntegralNick,r24
5803 2fc6 9093 0000 sts (MittelIntegralNick)+1,r25
5804 2fca A093 0000 sts (MittelIntegralNick)+2,r26
5805 2fce B093 0000 sts (MittelIntegralNick)+3,r27
5806 2fd2 8091 0000 lds r24,MittelIntegralRoll
5807 2fd6 9091 0000 lds r25,(MittelIntegralRoll)+1
5808 2fda A091 0000 lds r26,(MittelIntegralRoll)+2
5809 2fde B091 0000 lds r27,(MittelIntegralRoll)+3
5810 2fe2 E090 0000 lds r14,IntegralRoll
5811 2fe6 F090 0000 lds r15,(IntegralRoll)+1
5812 2fea 0091 0000 lds r16,(IntegralRoll)+2
5813 2fee 1091 0000 lds r17,(IntegralRoll)+3
5814 2ff2 EB82 std Y+3,r14
5815 2ff4 FC82 std Y+4,r15
5816 2ff6 0D83 std Y+5,r16
5817 2ff8 1E83 std Y+6,r17
5818 2ffa 8E0D add r24,r14
5819 2ffc 9F1D adc r25,r15
5820 2ffe A01F adc r26,r16
5821 3000 B11F adc r27,r17
5822 3002 8093 0000 sts MittelIntegralRoll,r24
5823 3006 9093 0000 sts (MittelIntegralRoll)+1,r25
5824 300a A093 0000 sts (MittelIntegralRoll)+2,r26
5825 300e B093 0000 sts (MittelIntegralRoll)+3,r27
5826 3012 8091 0000 lds r24,MittelIntegralNick2
5827 3016 9091 0000 lds r25,(MittelIntegralNick2)+1
5828 301a A091 0000 lds r26,(MittelIntegralNick2)+2
5829 301e B091 0000 lds r27,(MittelIntegralNick2)+3
5830 3022 E090 0000 lds r14,IntegralNick2
5831 3026 F090 0000 lds r15,(IntegralNick2)+1
5832 302a 0091 0000 lds r16,(IntegralNick2)+2
5833 302e 1091 0000 lds r17,(IntegralNick2)+3
5834 3032 EF82 std Y+7,r14
5835 3034 F886 std Y+8,r15
5836 3036 0987 std Y+9,r16
5837 3038 1A87 std Y+10,r17
5838 303a 8E0D add r24,r14
5839 303c 9F1D adc r25,r15
5840 303e A01F adc r26,r16
5841 3040 B11F adc r27,r17
5842 3042 8093 0000 sts MittelIntegralNick2,r24
5843 3046 9093 0000 sts (MittelIntegralNick2)+1,r25
5844 304a A093 0000 sts (MittelIntegralNick2)+2,r26
5845 304e B093 0000 sts (MittelIntegralNick2)+3,r27
5846 3052 8091 0000 lds r24,MittelIntegralRoll2
5847 3056 9091 0000 lds r25,(MittelIntegralRoll2)+1
5848 305a A091 0000 lds r26,(MittelIntegralRoll2)+2
5849 305e B091 0000 lds r27,(MittelIntegralRoll2)+3
5850 3062 E090 0000 lds r14,IntegralRoll2
5851 3066 F090 0000 lds r15,(IntegralRoll2)+1
5852 306a 0091 0000 lds r16,(IntegralRoll2)+2
5853 306e 1091 0000 lds r17,(IntegralRoll2)+3
5854 3072 EB86 std Y+11,r14
5855 3074 FC86 std Y+12,r15
5856 3076 0D87 std Y+13,r16
5857 3078 1E87 std Y+14,r17
5858 307a 8E0D add r24,r14
5859 307c 9F1D adc r25,r15
5860 307e A01F adc r26,r16
5861 3080 B11F adc r27,r17
5862 3082 8093 0000 sts MittelIntegralRoll2,r24
5863 3086 9093 0000 sts (MittelIntegralRoll2)+1,r25
5864 308a A093 0000 sts (MittelIntegralRoll2)+2,r26
5865 308e B093 0000 sts (MittelIntegralRoll2)+3,r27
5866 3092 F090 0000 lds r15,Looping_Nick
5867 3096 FF86 std Y+15,r15
5868 3098 FF20 tst r15
5869 309a 01F4 brne .L504
5870 309c 8091 0000 lds r24,Looping_Roll
5871 30a0 8823 tst r24
5872 30a2 01F4 brne .+2
5873 30a4 00C0 rjmp .L886
5874 .L504:
5875 30a6 1092 0000 sts IntegralAccNick,__zero_reg__
5876 30aa 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
5877 30ae 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
5878 30b2 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
5879 30b6 1092 0000 sts IntegralAccRoll,__zero_reg__
5880 30ba 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
5881 30be 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
5882 30c2 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
5883 30c6 1092 0000 sts MittelIntegralNick,__zero_reg__
5884 30ca 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
5885 30ce 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
5886 30d2 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
5887 30d6 1092 0000 sts MittelIntegralRoll,__zero_reg__
5888 30da 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
5889 30de 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
5890 30e2 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
5891 30e6 1092 0000 sts MittelIntegralNick2,__zero_reg__
5892 30ea 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
5893 30ee 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
5894 30f2 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
5895 30f6 1092 0000 sts MittelIntegralRoll2,__zero_reg__
5896 30fa 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
5897 30fe 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
5898 3102 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
5899 3106 8091 0000 lds r24,Mess_IntegralNick
5900 310a 9091 0000 lds r25,(Mess_IntegralNick)+1
5901 310e A091 0000 lds r26,(Mess_IntegralNick)+2
5902 3112 B091 0000 lds r27,(Mess_IntegralNick)+3
5903 3116 8093 0000 sts Mess_IntegralNick2,r24
5904 311a 9093 0000 sts (Mess_IntegralNick2)+1,r25
5905 311e A093 0000 sts (Mess_IntegralNick2)+2,r26
5906 3122 B093 0000 sts (Mess_IntegralNick2)+3,r27
5907 3126 8091 0000 lds r24,Mess_IntegralRoll
5908 312a 9091 0000 lds r25,(Mess_IntegralRoll)+1
5909 312e A091 0000 lds r26,(Mess_IntegralRoll)+2
5910 3132 B091 0000 lds r27,(Mess_IntegralRoll)+3
5911 3136 8093 0000 sts Mess_IntegralRoll2,r24
5912 313a 9093 0000 sts (Mess_IntegralRoll2)+1,r25
5913 313e A093 0000 sts (Mess_IntegralRoll2)+2,r26
5914 3142 B093 0000 sts (Mess_IntegralRoll2)+3,r27
5915 3146 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
5916 314a 1092 0000 sts ZaehlMessungen,__zero_reg__
5917 314e 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
5918 3152 1092 0000 sts LageKorrekturNick,__zero_reg__
5919 3156 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
5920 315a 1092 0000 sts LageKorrekturRoll,__zero_reg__
5921 315e 0F85 ldd r16,Y+15
5922 3160 0023 tst r16
5923 3162 01F0 breq .+2
5924 3164 00C0 rjmp .L505
5925 .L886:
5926 3166 8091 0000 lds r24,Looping_Roll
5927 316a 8823 tst r24
5928 316c 01F0 breq .+2
5929 316e 00C0 rjmp .L505
5930 3170 8091 0000 lds r24,Aktuell_az
5931 3174 9091 0000 lds r25,(Aktuell_az)+1
5932 3178 8150 subi r24,lo8(513)
5933 317a 9240 sbci r25,hi8(513)
5934 317c 04F4 brge .L506
5935 317e 8091 0000 lds r24,MotorenEin
5936 3182 8823 tst r24
5937 3184 01F4 brne .+2
5938 3186 00C0 rjmp .L505
5939 .L506:
5940 3188 9090 0000 lds r9,FromNaviCtrl_Value
5941 318c A090 0000 lds r10,EE_Parameter+28
5942 3190 2090 0000 lds r2,Mittelwert_AccNick
5943 3194 3090 0000 lds r3,(Mittelwert_AccNick)+1
5944 3198 4090 0000 lds r4,Mittelwert_AccRoll
5945 319c 5090 0000 lds r5,(Mittelwert_AccRoll)+1
5946 31a0 1914 cp __zero_reg__,r9
5947 31a2 04F0 brlt .+2
5948 31a4 00C0 rjmp .L507
5949 31a6 BB24 clr r11
5950 31a8 CC24 clr r12
5951 31aa DD24 clr r13
5952 31ac CA01 movw r24,r20
5953 31ae B901 movw r22,r18
5954 31b0 A601 movw r20,r12
5955 31b2 9501 movw r18,r10
5956 31b4 0E94 0000 call __divmodsi4
5957 31b8 7901 movw r14,r18
5958 31ba 8A01 movw r16,r20
5959 31bc 8091 0000 lds r24,FromNaviCtrl+9
5960 31c0 9091 0000 lds r25,(FromNaviCtrl+9)+1
5961 31c4 281A sub r2,r24
5962 31c6 390A sbc r3,r25
5963 31c8 C101 movw r24,r2
5964 31ca AA27 clr r26
5965 31cc 97FD sbrc r25,7
5966 31ce A095 com r26
5967 31d0 BA2F mov r27,r26
5968 31d2 E81A sub r14,r24
5969 31d4 F90A sbc r15,r25
5970 31d6 0A0B sbc r16,r26
5971 31d8 1B0B sbc r17,r27
5972 31da 6B81 ldd r22,Y+3
5973 31dc 7C81 ldd r23,Y+4
5974 31de 8D81 ldd r24,Y+5
5975 31e0 9E81 ldd r25,Y+6
5976 31e2 A601 movw r20,r12
5977 31e4 9501 movw r18,r10
5978 31e6 0E94 0000 call __divmodsi4
5979 31ea 5901 movw r10,r18
5980 31ec 6A01 movw r12,r20
5981 31ee 8091 0000 lds r24,FromNaviCtrl+11
5982 31f2 9091 0000 lds r25,(FromNaviCtrl+11)+1
5983 31f6 481A sub r4,r24
5984 31f8 590A sbc r5,r25
5985 31fa C201 movw r24,r4
5986 31fc AA27 clr r26
5987 31fe 97FD sbrc r25,7
5988 3200 A095 com r26
5989 3202 BA2F mov r27,r26
5990 3204 A81A sub r10,r24
5991 3206 B90A sbc r11,r25
5992 3208 CA0A sbc r12,r26
5993 320a DB0A sbc r13,r27
5994 320c 292C mov r2,r9
5995 320e 3324 clr r3
5996 3210 27FC sbrc r2,7
5997 3212 3094 com r3
5998 3214 432C mov r4,r3
5999 3216 532C mov r5,r3
6000 3218 C801 movw r24,r16
6001 321a B701 movw r22,r14
6002 321c A201 movw r20,r4
6003 321e 9101 movw r18,r2
6004 3220 0E94 0000 call __mulsi3
6005 3224 97FF sbrs r25,7
6006 3226 00C0 rjmp .L508
6007 3228 6150 subi r22,lo8(-(511))
6008 322a 7E4F sbci r23,hi8(-(511))
6009 322c 8F4F sbci r24,hlo8(-(511))
6010 322e 9F4F sbci r25,hhi8(-(511))
6011 .L508:
6012 3230 3B01 movw r6,r22
6013 3232 4C01 movw r8,r24
6014 3234 09E0 ldi r16,9
6015 3236 9594 1: asr r9
6016 3238 8794 ror r8
6017 323a 7794 ror r7
6018 323c 6794 ror r6
6019 323e 0A95 dec r16
6020 3240 01F4 brne 1b
6021 3242 C601 movw r24,r12
6022 3244 B501 movw r22,r10
6023 3246 A201 movw r20,r4
6024 3248 9101 movw r18,r2
6025 324a 0E94 0000 call __mulsi3
6026 324e 97FF sbrs r25,7
6027 3250 00C0 rjmp .L509
6028 3252 6150 subi r22,lo8(-(511))
6029 3254 7E4F sbci r23,hi8(-(511))
6030 3256 8F4F sbci r24,hlo8(-(511))
6031 3258 9F4F sbci r25,hhi8(-(511))
6032 .L509:
6033 325a 5B01 movw r10,r22
6034 325c 6C01 movw r12,r24
6035 325e 19E0 ldi r17,9
6036 3260 D594 1: asr r13
6037 3262 C794 ror r12
6038 3264 B794 ror r11
6039 3266 A794 ror r10
6040 3268 1A95 dec r17
6041 326a 01F4 brne 1b
6042 326c 8091 0000 lds r24,MaxStickNick
6043 3270 9091 0000 lds r25,(MaxStickNick)+1
6044 3274 8134 cpi r24,65
6045 3276 9105 cpc r25,__zero_reg__
6046 3278 04F4 brge .L511
6047 327a 8091 0000 lds r24,MaxStickRoll
6048 327e 9091 0000 lds r25,(MaxStickRoll)+1
6049 3282 8134 cpi r24,65
6050 3284 9105 cpc r25,__zero_reg__
6051 3286 04F0 brlt .L510
6052 .L511:
6053 3288 D401 movw r26,r8
6054 328a C301 movw r24,r6
6055 328c 97FE sbrs r9,7
6056 328e 00C0 rjmp .L512
6057 3290 0196 adiw r24,1
6058 3292 A11D adc r26,__zero_reg__
6059 3294 B11D adc r27,__zero_reg__
6060 .L512:
6061 3296 3C01 movw r6,r24
6062 3298 4D01 movw r8,r26
6063 329a 9594 asr r9
6064 329c 8794 ror r8
6065 329e 7794 ror r7
6066 32a0 6794 ror r6
6067 32a2 D601 movw r26,r12
6068 32a4 C501 movw r24,r10
6069 32a6 D7FE sbrs r13,7
6070 32a8 00C0 rjmp .L513
6071 32aa 0196 adiw r24,1
6072 32ac A11D adc r26,__zero_reg__
6073 32ae B11D adc r27,__zero_reg__
6074 .L513:
6075 32b0 5C01 movw r10,r24
6076 32b2 6D01 movw r12,r26
6077 32b4 D594 asr r13
6078 32b6 C794 ror r12
6079 32b8 B794 ror r11
6080 32ba A794 ror r10
6081 .L510:
6082 32bc 8091 0000 lds r24,FromNaviCtrl_Value+2
6083 32c0 282F mov r18,r24
6084 32c2 3327 clr r19
6085 32c4 27FD sbrc r18,7
6086 32c6 3095 com r19
6087 32c8 432F mov r20,r19
6088 32ca 532F mov r21,r19
6089 32cc 2615 cp r18,r6
6090 32ce 3705 cpc r19,r7
6091 32d0 4805 cpc r20,r8
6092 32d2 5905 cpc r21,r9
6093 32d4 04F4 brge .L514
6094 32d6 3901 movw r6,r18
6095 32d8 4A01 movw r8,r20
6096 .L514:
6097 32da 9927 clr r25
6098 32dc 87FD sbrc r24,7
6099 32de 9095 com r25
6100 32e0 9095 com r25
6101 32e2 8195 neg r24
6102 32e4 9F4F sbci r25,lo8(-1)
6103 32e6 AA27 clr r26
6104 32e8 97FD sbrc r25,7
6105 32ea A095 com r26
6106 32ec BA2F mov r27,r26
6107 32ee 6816 cp r6,r24
6108 32f0 7906 cpc r7,r25
6109 32f2 8A06 cpc r8,r26
6110 32f4 9B06 cpc r9,r27
6111 32f6 04F4 brge .L515
6112 32f8 3C01 movw r6,r24
6113 32fa 4D01 movw r8,r26
6114 .L515:
6115 32fc 2A15 cp r18,r10
6116 32fe 3B05 cpc r19,r11
6117 3300 4C05 cpc r20,r12
6118 3302 5D05 cpc r21,r13
6119 3304 04F4 brge .L516
6120 3306 5901 movw r10,r18
6121 3308 6A01 movw r12,r20
6122 .L516:
6123 330a A816 cp r10,r24
6124 330c B906 cpc r11,r25
6125 330e CA06 cpc r12,r26
6126 3310 DB06 cpc r13,r27
6127 3312 04F0 brlt .+2
6128 3314 00C0 rjmp .L518
6129 3316 5C01 movw r10,r24
6130 3318 6D01 movw r12,r26
6131 331a 00C0 rjmp .L518
6132 .L507:
6133 331c EA2C mov r14,r10
6134 331e FF24 clr r15
6135 3320 0027 clr r16
6136 3322 1127 clr r17
6137 3324 CA01 movw r24,r20
6138 3326 B901 movw r22,r18
6139 3328 A801 movw r20,r16
6140 332a 9701 movw r18,r14
6141 332c 0E94 0000 call __divmodsi4
6142 3330 3901 movw r6,r18
6143 3332 4A01 movw r8,r20
6144 3334 C101 movw r24,r2
6145 3336 AA27 clr r26
6146 3338 97FD sbrc r25,7
6147 333a A095 com r26
6148 333c BA2F mov r27,r26
6149 333e 681A sub r6,r24
6150 3340 790A sbc r7,r25
6151 3342 8A0A sbc r8,r26
6152 3344 9B0A sbc r9,r27
6153 3346 6B81 ldd r22,Y+3
6154 3348 7C81 ldd r23,Y+4
6155 334a 8D81 ldd r24,Y+5
6156 334c 9E81 ldd r25,Y+6
6157 334e A801 movw r20,r16
6158 3350 9701 movw r18,r14
6159 3352 0E94 0000 call __divmodsi4
6160 3356 5901 movw r10,r18
6161 3358 6A01 movw r12,r20
6162 335a C201 movw r24,r4
6163 335c AA27 clr r26
6164 335e 97FD sbrc r25,7
6165 3360 A095 com r26
6166 3362 BA2F mov r27,r26
6167 3364 A81A sub r10,r24
6168 3366 B90A sbc r11,r25
6169 3368 CA0A sbc r12,r26
6170 336a DB0A sbc r13,r27
6171 336c D401 movw r26,r8
6172 336e C301 movw r24,r6
6173 3370 97FE sbrs r9,7
6174 3372 00C0 rjmp .L519
6175 3374 0F96 adiw r24,15
6176 3376 A11D adc r26,__zero_reg__
6177 3378 B11D adc r27,__zero_reg__
6178 .L519:
6179 337a 3C01 movw r6,r24
6180 337c 4D01 movw r8,r26
6181 337e F4E0 ldi r31,4
6182 3380 9594 1: asr r9
6183 3382 8794 ror r8
6184 3384 7794 ror r7
6185 3386 6794 ror r6
6186 3388 FA95 dec r31
6187 338a 01F4 brne 1b
6188 338c D601 movw r26,r12
6189 338e C501 movw r24,r10
6190 3390 D7FE sbrs r13,7
6191 3392 00C0 rjmp .L520
6192 3394 0F96 adiw r24,15
6193 3396 A11D adc r26,__zero_reg__
6194 3398 B11D adc r27,__zero_reg__
6195 .L520:
6196 339a 5C01 movw r10,r24
6197 339c 6D01 movw r12,r26
6198 339e E4E0 ldi r30,4
6199 33a0 D594 1: asr r13
6200 33a2 C794 ror r12
6201 33a4 B794 ror r11
6202 33a6 A794 ror r10
6203 33a8 EA95 dec r30
6204 33aa 01F4 brne 1b
6205 33ac 8091 0000 lds r24,MaxStickNick
6206 33b0 9091 0000 lds r25,(MaxStickNick)+1
6207 33b4 8134 cpi r24,65
6208 33b6 9105 cpc r25,__zero_reg__
6209 33b8 04F4 brge .L522
6210 33ba 8091 0000 lds r24,MaxStickRoll
6211 33be 9091 0000 lds r25,(MaxStickRoll)+1
6212 33c2 8134 cpi r24,65
6213 33c4 9105 cpc r25,__zero_reg__
6214 33c6 04F0 brlt .L521
6215 .L522:
6216 33c8 C401 movw r24,r8
6217 33ca B301 movw r22,r6
6218 33cc 23E0 ldi r18,lo8(3)
6219 33ce 30E0 ldi r19,hi8(3)
6220 33d0 40E0 ldi r20,hlo8(3)
6221 33d2 50E0 ldi r21,hhi8(3)
6222 33d4 0E94 0000 call __divmodsi4
6223 33d8 3901 movw r6,r18
6224 33da 4A01 movw r8,r20
6225 33dc C601 movw r24,r12
6226 33de B501 movw r22,r10
6227 33e0 23E0 ldi r18,lo8(3)
6228 33e2 30E0 ldi r19,hi8(3)
6229 33e4 40E0 ldi r20,hlo8(3)
6230 33e6 50E0 ldi r21,hhi8(3)
6231 33e8 0E94 0000 call __divmodsi4
6232 33ec 5901 movw r10,r18
6233 33ee 6A01 movw r12,r20
6234 .L521:
6235 33f0 8091 0000 lds r24,EE_Parameter+4
6236 33f4 E82F mov r30,r24
6237 33f6 FF27 clr r31
6238 33f8 EE0F add r30,r30
6239 33fa FF1F adc r31,r31
6240 33fc E050 subi r30,lo8(-(PPM_in))
6241 33fe F040 sbci r31,hi8(-(PPM_in))
6242 3400 8081 ld r24,Z
6243 3402 9181 ldd r25,Z+1
6244 3404 0190 ld __tmp_reg__,Z+
6245 3406 F081 ld r31,Z
6246 3408 E02D mov r30,__tmp_reg__
6247 340a F7FF sbrs r31,7
6248 340c 00C0 rjmp .L524
6249 340e F095 com r31
6250 3410 E195 neg r30
6251 3412 FF4F sbci r31,lo8(-1)
6252 .L524:
6253 3414 7A97 sbiw r30,26
6254 3416 04F0 brlt .L523
6255 3418 C401 movw r24,r8
6256 341a B301 movw r22,r6
6257 341c 23E0 ldi r18,lo8(3)
6258 341e 30E0 ldi r19,hi8(3)
6259 3420 40E0 ldi r20,hlo8(3)
6260 3422 50E0 ldi r21,hhi8(3)
6261 3424 0E94 0000 call __divmodsi4
6262 3428 3901 movw r6,r18
6263 342a 4A01 movw r8,r20
6264 342c C601 movw r24,r12
6265 342e B501 movw r22,r10
6266 3430 23E0 ldi r18,lo8(3)
6267 3432 30E0 ldi r19,hi8(3)
6268 3434 40E0 ldi r20,hlo8(3)
6269 3436 50E0 ldi r21,hhi8(3)
6270 3438 0E94 0000 call __divmodsi4
6271 343c 5901 movw r10,r18
6272 343e 6A01 movw r12,r20
6273 .L523:
6274 3440 89E1 ldi r24,lo8(25)
6275 3442 8093 0000 sts KompassFusion,r24
6276 3446 21E2 ldi r18,lo8(33)
6277 3448 6216 cp r6,r18
6278 344a 7104 cpc r7,__zero_reg__
6279 344c 8104 cpc r8,__zero_reg__
6280 344e 9104 cpc r9,__zero_reg__
6281 3450 04F0 brlt .L525
6282 3452 70E2 ldi r23,lo8(32)
6283 3454 672E mov r6,r23
6284 3456 712C mov r7,__zero_reg__
6285 3458 812C mov r8,__zero_reg__
6286 345a 912C mov r9,__zero_reg__
6287 .L525:
6288 345c 30EE ldi r19,lo8(-32)
6289 345e 6316 cp r6,r19
6290 3460 3FEF ldi r19,hi8(-32)
6291 3462 7306 cpc r7,r19
6292 3464 3FEF ldi r19,hlo8(-32)
6293 3466 8306 cpc r8,r19
6294 3468 3FEF ldi r19,hhi8(-32)
6295 346a 9306 cpc r9,r19
6296 346c 04F4 brge .L526
6297 346e 60EE ldi r22,lo8(-32)
6298 3470 662E mov r6,r22
6299 3472 6FEF ldi r22,hi8(-32)
6300 3474 762E mov r7,r22
6301 3476 6FEF ldi r22,hlo8(-32)
6302 3478 862E mov r8,r22
6303 347a 6FEF ldi r22,hhi8(-32)
6304 347c 962E mov r9,r22
6305 .L526:
6306 347e 41E2 ldi r20,lo8(33)
6307 3480 A416 cp r10,r20
6308 3482 B104 cpc r11,__zero_reg__
6309 3484 C104 cpc r12,__zero_reg__
6310 3486 D104 cpc r13,__zero_reg__
6311 3488 04F0 brlt .L527
6312 348a 50E2 ldi r21,lo8(32)
6313 348c A52E mov r10,r21
6314 348e B12C mov r11,__zero_reg__
6315 3490 C12C mov r12,__zero_reg__
6316 3492 D12C mov r13,__zero_reg__
6317 .L527:
6318 3494 50EE ldi r21,lo8(-32)
6319 3496 A516 cp r10,r21
6320 3498 5FEF ldi r21,hi8(-32)
6321 349a B506 cpc r11,r21
6322 349c 5FEF ldi r21,hlo8(-32)
6323 349e C506 cpc r12,r21
6324 34a0 5FEF ldi r21,hhi8(-32)
6325 34a2 D506 cpc r13,r21
6326 34a4 04F4 brge .L518
6327 34a6 40EE ldi r20,lo8(-32)
6328 34a8 A42E mov r10,r20
6329 34aa 4FEF ldi r20,hi8(-32)
6330 34ac B42E mov r11,r20
6331 34ae 4FEF ldi r20,hlo8(-32)
6332 34b0 C42E mov r12,r20
6333 34b2 4FEF ldi r20,hhi8(-32)
6334 34b4 D42E mov r13,r20
6335 .L518:
6336 34b6 8091 0000 lds r24,Mess_IntegralNick
6337 34ba 9091 0000 lds r25,(Mess_IntegralNick)+1
6338 34be A091 0000 lds r26,(Mess_IntegralNick)+2
6339 34c2 B091 0000 lds r27,(Mess_IntegralNick)+3
6340 34c6 8619 sub r24,r6
6341 34c8 9709 sbc r25,r7
6342 34ca A809 sbc r26,r8
6343 34cc B909 sbc r27,r9
6344 34ce 8093 0000 sts Mess_IntegralNick,r24
6345 34d2 9093 0000 sts (Mess_IntegralNick)+1,r25
6346 34d6 A093 0000 sts (Mess_IntegralNick)+2,r26
6347 34da B093 0000 sts (Mess_IntegralNick)+3,r27
6348 34de 8091 0000 lds r24,Mess_IntegralRoll
6349 34e2 9091 0000 lds r25,(Mess_IntegralRoll)+1
6350 34e6 A091 0000 lds r26,(Mess_IntegralRoll)+2
6351 34ea B091 0000 lds r27,(Mess_IntegralRoll)+3
6352 34ee 8A19 sub r24,r10
6353 34f0 9B09 sbc r25,r11
6354 34f2 AC09 sbc r26,r12
6355 34f4 BD09 sbc r27,r13
6356 34f6 8093 0000 sts Mess_IntegralRoll,r24
6357 34fa 9093 0000 sts (Mess_IntegralRoll)+1,r25
6358 34fe A093 0000 sts (Mess_IntegralRoll)+2,r26
6359 3502 B093 0000 sts (Mess_IntegralRoll)+3,r27
6360 .L505:
6361 3506 8091 0000 lds r24,ZaehlMessungen
6362 350a 9091 0000 lds r25,(ZaehlMessungen)+1
6363 350e 8F3F cpi r24,255
6364 3510 9105 cpc r25,__zero_reg__
6365 3512 01F0 breq .+2
6366 3514 00F4 brsh .+2
6367 3516 00C0 rjmp .L529
6368 3518 6F85 ldd r22,Y+15
6369 351a 6623 tst r22
6370 351c 01F0 breq .+2
6371 351e 00C0 rjmp .L530
6372 3520 8091 0000 lds r24,Looping_Roll
6373 3524 8823 tst r24
6374 3526 01F0 breq .+2
6375 3528 00C0 rjmp .L530
6376 352a 8091 0000 lds r24,TrichterFlug
6377 352e 8823 tst r24
6378 3530 01F0 breq .+2
6379 3532 00C0 rjmp .L530
6380 3534 7091 0000 lds r23,EE_Parameter+68
6381 3538 788B std Y+16,r23
6382 353a 7723 tst r23
6383 353c 01F4 brne .+2
6384 353e 00C0 rjmp .L530
6385 3540 8091 0000 lds r24,MittelIntegralNick
6386 3544 9091 0000 lds r25,(MittelIntegralNick)+1
6387 3548 A091 0000 lds r26,(MittelIntegralNick)+2
6388 354c B091 0000 lds r27,(MittelIntegralNick)+3
6389 3550 B7FF sbrs r27,7
6390 3552 00C0 rjmp .L531
6391 3554 8150 subi r24,lo8(-(255))
6392 3556 9F4F sbci r25,hi8(-(255))
6393 3558 AF4F sbci r26,hlo8(-(255))
6394 355a BF4F sbci r27,hhi8(-(255))
6395 .L531:
6396 355c E92E mov r14,r25
6397 355e FA2E mov r15,r26
6398 3560 0B2F mov r16,r27
6399 3562 1127 clr r17
6400 3564 07FD sbrc r16,7
6401 3566 1A95 dec r17
6402 3568 E092 0000 sts MittelIntegralNick,r14
6403 356c F092 0000 sts (MittelIntegralNick)+1,r15
6404 3570 0093 0000 sts (MittelIntegralNick)+2,r16
6405 3574 1093 0000 sts (MittelIntegralNick)+3,r17
6406 3578 8091 0000 lds r24,MittelIntegralRoll
6407 357c 9091 0000 lds r25,(MittelIntegralRoll)+1
6408 3580 A091 0000 lds r26,(MittelIntegralRoll)+2
6409 3584 B091 0000 lds r27,(MittelIntegralRoll)+3
6410 3588 B7FF sbrs r27,7
6411 358a 00C0 rjmp .L532
6412 358c 8150 subi r24,lo8(-(255))
6413 358e 9F4F sbci r25,hi8(-(255))
6414 3590 AF4F sbci r26,hlo8(-(255))
6415 3592 BF4F sbci r27,hhi8(-(255))
6416 .L532:
6417 3594 892F mov r24,r25
6418 3596 9A2F mov r25,r26
6419 3598 AB2F mov r26,r27
6420 359a BB27 clr r27
6421 359c A7FD sbrc r26,7
6422 359e BA95 dec r27
6423 35a0 898B std Y+17,r24
6424 35a2 9A8B std Y+18,r25
6425 35a4 AB8B std Y+19,r26
6426 35a6 BC8B std Y+20,r27
6427 35a8 8093 0000 sts MittelIntegralRoll,r24
6428 35ac 9093 0000 sts (MittelIntegralRoll)+1,r25
6429 35b0 A093 0000 sts (MittelIntegralRoll)+2,r26
6430 35b4 B093 0000 sts (MittelIntegralRoll)+3,r27
6431 35b8 8091 0000 lds r24,EE_Parameter+28
6432 35bc A82E mov r10,r24
6433 35be BB24 clr r11
6434 35c0 CC24 clr r12
6435 35c2 DD24 clr r13
6436 35c4 2091 0000 lds r18,IntegralAccNick
6437 35c8 3091 0000 lds r19,(IntegralAccNick)+1
6438 35cc 4091 0000 lds r20,(IntegralAccNick)+2
6439 35d0 5091 0000 lds r21,(IntegralAccNick)+3
6440 35d4 C601 movw r24,r12
6441 35d6 B501 movw r22,r10
6442 35d8 0E94 0000 call __mulsi3
6443 35dc 97FF sbrs r25,7
6444 35de 00C0 rjmp .L533
6445 35e0 6150 subi r22,lo8(-(255))
6446 35e2 7F4F sbci r23,hi8(-(255))
6447 35e4 8F4F sbci r24,hlo8(-(255))
6448 35e6 9F4F sbci r25,hhi8(-(255))
6449 .L533:
6450 35e8 672E mov r6,r23
6451 35ea 782E mov r7,r24
6452 35ec 892E mov r8,r25
6453 35ee 9924 clr r9
6454 35f0 87FC sbrc r8,7
6455 35f2 9A94 dec r9
6456 35f4 6092 0000 sts IntegralAccNick,r6
6457 35f8 7092 0000 sts (IntegralAccNick)+1,r7
6458 35fc 8092 0000 sts (IntegralAccNick)+2,r8
6459 3600 9092 0000 sts (IntegralAccNick)+3,r9
6460 3604 2091 0000 lds r18,IntegralAccRoll
6461 3608 3091 0000 lds r19,(IntegralAccRoll)+1
6462 360c 4091 0000 lds r20,(IntegralAccRoll)+2
6463 3610 5091 0000 lds r21,(IntegralAccRoll)+3
6464 3614 C601 movw r24,r12
6465 3616 B501 movw r22,r10
6466 3618 0E94 0000 call __mulsi3
6467 361c 97FF sbrs r25,7
6468 361e 00C0 rjmp .L534
6469 3620 6150 subi r22,lo8(-(255))
6470 3622 7F4F sbci r23,hi8(-(255))
6471 3624 8F4F sbci r24,hlo8(-(255))
6472 3626 9F4F sbci r25,hhi8(-(255))
6473 .L534:
6474 3628 272E mov r2,r23
6475 362a 382E mov r3,r24
6476 362c 492E mov r4,r25
6477 362e 5524 clr r5
6478 3630 47FC sbrc r4,7
6479 3632 5A94 dec r5
6480 3634 2092 0000 sts IntegralAccRoll,r2
6481 3638 3092 0000 sts (IntegralAccRoll)+1,r3
6482 363c 4092 0000 sts (IntegralAccRoll)+2,r4
6483 3640 5092 0000 sts (IntegralAccRoll)+3,r5
6484 3644 8091 0000 lds r24,IntegralAccZ
6485 3648 9091 0000 lds r25,(IntegralAccZ)+1
6486 364c A091 0000 lds r26,(IntegralAccZ)+2
6487 3650 B091 0000 lds r27,(IntegralAccZ)+3
6488 3654 B7FF sbrs r27,7
6489 3656 00C0 rjmp .L535
6490 3658 8150 subi r24,lo8(-(255))
6491 365a 9F4F sbci r25,hi8(-(255))
6492 365c AF4F sbci r26,hlo8(-(255))
6493 365e BF4F sbci r27,hhi8(-(255))
6494 .L535:
6495 3660 892F mov r24,r25
6496 3662 9A2F mov r25,r26
6497 3664 AB2F mov r26,r27
6498 3666 BB27 clr r27
6499 3668 A7FD sbrc r26,7
6500 366a BA95 dec r27
6501 366c 8093 0000 sts IntegralAccZ,r24
6502 3670 9093 0000 sts (IntegralAccZ)+1,r25
6503 3674 A093 0000 sts (IntegralAccZ)+2,r26
6504 3678 B093 0000 sts (IntegralAccZ)+3,r27
6505 367c D801 movw r26,r16
6506 367e C701 movw r24,r14
6507 3680 8619 sub r24,r6
6508 3682 9709 sbc r25,r7
6509 3684 A809 sbc r26,r8
6510 3686 B909 sbc r27,r9
6511 3688 8093 0000 sts IntegralFehlerNick.3,r24
6512 368c 9093 0000 sts (IntegralFehlerNick.3)+1,r25
6513 3690 A093 0000 sts (IntegralFehlerNick.3)+2,r26
6514 3694 B093 0000 sts (IntegralFehlerNick.3)+3,r27
6515 3698 2091 0000 lds r18,EE_Parameter+67
6516 369c E22E mov r14,r18
6517 369e FF24 clr r15
6518 36a0 0027 clr r16
6519 36a2 1127 clr r17
6520 36a4 BC01 movw r22,r24
6521 36a6 CD01 movw r24,r26
6522 36a8 A801 movw r20,r16
6523 36aa 9701 movw r18,r14
6524 36ac 0E94 0000 call __divmodsi4
6525 36b0 5901 movw r10,r18
6526 36b2 6A01 movw r12,r20
6527 36b4 2093 0000 sts ausgleichNick.10,r18
6528 36b8 3093 0000 sts (ausgleichNick.10)+1,r19
6529 36bc 4093 0000 sts (ausgleichNick.10)+2,r20
6530 36c0 5093 0000 sts (ausgleichNick.10)+3,r21
6531 36c4 8989 ldd r24,Y+17
6532 36c6 9A89 ldd r25,Y+18
6533 36c8 AB89 ldd r26,Y+19
6534 36ca BC89 ldd r27,Y+20
6535 36cc 8219 sub r24,r2
6536 36ce 9309 sbc r25,r3
6537 36d0 A409 sbc r26,r4
6538 36d2 B509 sbc r27,r5
6539 36d4 8093 0000 sts IntegralFehlerRoll.4,r24
6540 36d8 9093 0000 sts (IntegralFehlerRoll.4)+1,r25
6541 36dc A093 0000 sts (IntegralFehlerRoll.4)+2,r26
6542 36e0 B093 0000 sts (IntegralFehlerRoll.4)+3,r27
6543 36e4 BC01 movw r22,r24
6544 36e6 CD01 movw r24,r26
6545 36e8 A801 movw r20,r16
6546 36ea 9701 movw r18,r14
6547 36ec 0E94 0000 call __divmodsi4
6548 36f0 2093 0000 sts ausgleichRoll.11,r18
6549 36f4 3093 0000 sts (ausgleichRoll.11)+1,r19
6550 36f8 4093 0000 sts (ausgleichRoll.11)+2,r20
6551 36fc 5093 0000 sts (ausgleichRoll.11)+3,r21
6552 3700 D601 movw r26,r12
6553 3702 C501 movw r24,r10
6554 3704 D7FE sbrs r13,7
6555 3706 00C0 rjmp .L536
6556 3708 8150 subi r24,lo8(-(255))
6557 370a 9F4F sbci r25,hi8(-(255))
6558 370c AF4F sbci r26,hlo8(-(255))
6559 370e BF4F sbci r27,hhi8(-(255))
6560 .L536:
6561 3710 892F mov r24,r25
6562 3712 9A2F mov r25,r26
6563 3714 AB2F mov r26,r27
6564 3716 BB27 clr r27
6565 3718 A7FD sbrc r26,7
6566 371a BA95 dec r27
6567 371c 9093 0000 sts (LageKorrekturNick)+1,r25
6568 3720 8093 0000 sts LageKorrekturNick,r24
6569 3724 57FF sbrs r21,7
6570 3726 00C0 rjmp .L537
6571 3728 2150 subi r18,lo8(-(255))
6572 372a 3F4F sbci r19,hi8(-(255))
6573 372c 4F4F sbci r20,hlo8(-(255))
6574 372e 5F4F sbci r21,hhi8(-(255))
6575 .L537:
6576 3730 BB27 clr r27
6577 3732 57FD sbrc r21,7
6578 3734 BA95 dec r27
6579 3736 A52F mov r26,r21
6580 3738 942F mov r25,r20
6581 373a 832F mov r24,r19
6582 373c 9093 0000 sts (LageKorrekturRoll)+1,r25
6583 3740 8093 0000 sts LageKorrekturRoll,r24
6584 3744 8091 0000 lds r24,MaxStickNick
6585 3748 9091 0000 lds r25,(MaxStickNick)+1
6586 374c 8134 cpi r24,65
6587 374e 9105 cpc r25,__zero_reg__
6588 3750 04F4 brge .L539
6589 3752 8091 0000 lds r24,MaxStickRoll
6590 3756 9091 0000 lds r25,(MaxStickRoll)+1
6591 375a 8134 cpi r24,65
6592 375c 9105 cpc r25,__zero_reg__
6593 375e 04F4 brge .L539
6594 3760 8091 0000 lds r24,EE_Parameter+4
6595 3764 E82F mov r30,r24
6596 3766 FF27 clr r31
6597 3768 EE0F add r30,r30
6598 376a FF1F adc r31,r31
6599 376c E050 subi r30,lo8(-(PPM_in))
6600 376e F040 sbci r31,hi8(-(PPM_in))
6601 3770 8081 ld r24,Z
6602 3772 9181 ldd r25,Z+1
6603 3774 0190 ld __tmp_reg__,Z+
6604 3776 F081 ld r31,Z
6605 3778 E02D mov r30,__tmp_reg__
6606 377a F7FF sbrs r31,7
6607 377c 00C0 rjmp .L540
6608 377e F095 com r31
6609 3780 E195 neg r30
6610 3782 FF4F sbci r31,lo8(-1)
6611 .L540:
6612 3784 7A97 sbiw r30,26
6613 3786 04F0 brlt .L538
6614 .L539:
6615 3788 8091 0000 lds r24,FromNaviCtrl_Value
6616 378c 8F3F cpi r24,lo8(-1)
6617 378e 01F4 brne .L538
6618 3790 8091 0000 lds r24,LageKorrekturNick
6619 3794 9091 0000 lds r25,(LageKorrekturNick)+1
6620 3798 97FD sbrc r25,7
6621 379a 0196 adiw r24,1
6622 .L541:
6623 379c 9595 asr r25
6624 379e 8795 ror r24
6625 37a0 9093 0000 sts (LageKorrekturNick)+1,r25
6626 37a4 8093 0000 sts LageKorrekturNick,r24
6627 37a8 8091 0000 lds r24,LageKorrekturRoll
6628 37ac 9091 0000 lds r25,(LageKorrekturRoll)+1
6629 37b0 97FD sbrc r25,7
6630 37b2 0196 adiw r24,1
6631 .L542:
6632 37b4 9595 asr r25
6633 37b6 8795 ror r24
6634 37b8 9093 0000 sts (LageKorrekturRoll)+1,r25
6635 37bc 8093 0000 sts LageKorrekturRoll,r24
6636 .L538:
6637 37c0 8091 0000 lds r24,MittelIntegralNick2
6638 37c4 9091 0000 lds r25,(MittelIntegralNick2)+1
6639 37c8 A091 0000 lds r26,(MittelIntegralNick2)+2
6640 37cc B091 0000 lds r27,(MittelIntegralNick2)+3
6641 37d0 B7FF sbrs r27,7
6642 37d2 00C0 rjmp .L543
6643 37d4 8150 subi r24,lo8(-(255))
6644 37d6 9F4F sbci r25,hi8(-(255))
6645 37d8 AF4F sbci r26,hlo8(-(255))
6646 37da BF4F sbci r27,hhi8(-(255))
6647 .L543:
6648 37dc 892F mov r24,r25
6649 37de 9A2F mov r25,r26
6650 37e0 AB2F mov r26,r27
6651 37e2 BB27 clr r27
6652 37e4 A7FD sbrc r26,7
6653 37e6 BA95 dec r27
6654 37e8 8093 0000 sts MittelIntegralNick2,r24
6655 37ec 9093 0000 sts (MittelIntegralNick2)+1,r25
6656 37f0 A093 0000 sts (MittelIntegralNick2)+2,r26
6657 37f4 B093 0000 sts (MittelIntegralNick2)+3,r27
6658 37f8 8091 0000 lds r24,MittelIntegralRoll2
6659 37fc 9091 0000 lds r25,(MittelIntegralRoll2)+1
6660 3800 A091 0000 lds r26,(MittelIntegralRoll2)+2
6661 3804 B091 0000 lds r27,(MittelIntegralRoll2)+3
6662 3808 B7FF sbrs r27,7
6663 380a 00C0 rjmp .L544
6664 380c 8150 subi r24,lo8(-(255))
6665 380e 9F4F sbci r25,hi8(-(255))
6666 3810 AF4F sbci r26,hlo8(-(255))
6667 3812 BF4F sbci r27,hhi8(-(255))
6668 .L544:
6669 3814 892F mov r24,r25
6670 3816 9A2F mov r25,r26
6671 3818 AB2F mov r26,r27
6672 381a BB27 clr r27
6673 381c A7FD sbrc r26,7
6674 381e BA95 dec r27
6675 3820 8093 0000 sts MittelIntegralRoll2,r24
6676 3824 9093 0000 sts (MittelIntegralRoll2)+1,r25
6677 3828 A093 0000 sts (MittelIntegralRoll2)+2,r26
6678 382c B093 0000 sts (MittelIntegralRoll2)+3,r27
6679 3830 8091 0000 lds r24,IntegralNick
6680 3834 9091 0000 lds r25,(IntegralNick)+1
6681 3838 A091 0000 lds r26,(IntegralNick)+2
6682 383c B091 0000 lds r27,(IntegralNick)+3
6683 3840 2F81 ldd r18,Y+7
6684 3842 3885 ldd r19,Y+8
6685 3844 4985 ldd r20,Y+9
6686 3846 5A85 ldd r21,Y+10
6687 3848 281B sub r18,r24
6688 384a 390B sbc r19,r25
6689 384c 4A0B sbc r20,r26
6690 384e 5B0B sbc r21,r27
6691 3850 2093 0000 sts tmp_long.1,r18
6692 3854 3093 0000 sts (tmp_long.1)+1,r19
6693 3858 4093 0000 sts (tmp_long.1)+2,r20
6694 385c 5093 0000 sts (tmp_long.1)+3,r21
6695 3860 8091 0000 lds r24,IntegralRoll
6696 3864 9091 0000 lds r25,(IntegralRoll)+1
6697 3868 A091 0000 lds r26,(IntegralRoll)+2
6698 386c B091 0000 lds r27,(IntegralRoll)+3
6699 3870 EB84 ldd r14,Y+11
6700 3872 FC84 ldd r15,Y+12
6701 3874 0D85 ldd r16,Y+13
6702 3876 1E85 ldd r17,Y+14
6703 3878 E81A sub r14,r24
6704 387a F90A sbc r15,r25
6705 387c 0A0B sbc r16,r26
6706 387e 1B0B sbc r17,r27
6707 3880 E092 0000 sts tmp_long2.2,r14
6708 3884 F092 0000 sts (tmp_long2.2)+1,r15
6709 3888 0093 0000 sts (tmp_long2.2)+2,r16
6710 388c 1093 0000 sts (tmp_long2.2)+3,r17
6711 3890 2093 0000 sts IntegralFehlerNick.3,r18
6712 3894 3093 0000 sts (IntegralFehlerNick.3)+1,r19
6713 3898 4093 0000 sts (IntegralFehlerNick.3)+2,r20
6714 389c 5093 0000 sts (IntegralFehlerNick.3)+3,r21
6715 38a0 E092 0000 sts IntegralFehlerRoll.4,r14
6716 38a4 F092 0000 sts (IntegralFehlerRoll.4)+1,r15
6717 38a8 0093 0000 sts (IntegralFehlerRoll.4)+2,r16
6718 38ac 1093 0000 sts (IntegralFehlerRoll.4)+3,r17
6719 38b0 8091 0000 lds r24,Mess_IntegralNick2
6720 38b4 9091 0000 lds r25,(Mess_IntegralNick2)+1
6721 38b8 A091 0000 lds r26,(Mess_IntegralNick2)+2
6722 38bc B091 0000 lds r27,(Mess_IntegralNick2)+3
6723 38c0 821B sub r24,r18
6724 38c2 930B sbc r25,r19
6725 38c4 A40B sbc r26,r20
6726 38c6 B50B sbc r27,r21
6727 38c8 8093 0000 sts Mess_IntegralNick2,r24
6728 38cc 9093 0000 sts (Mess_IntegralNick2)+1,r25
6729 38d0 A093 0000 sts (Mess_IntegralNick2)+2,r26
6730 38d4 B093 0000 sts (Mess_IntegralNick2)+3,r27
6731 38d8 8091 0000 lds r24,Mess_IntegralRoll2
6732 38dc 9091 0000 lds r25,(Mess_IntegralRoll2)+1
6733 38e0 A091 0000 lds r26,(Mess_IntegralRoll2)+2
6734 38e4 B091 0000 lds r27,(Mess_IntegralRoll2)+3
6735 38e8 8E19 sub r24,r14
6736 38ea 9F09 sbc r25,r15
6737 38ec A00B sbc r26,r16
6738 38ee B10B sbc r27,r17
6739 38f0 8093 0000 sts Mess_IntegralRoll2,r24
6740 38f4 9093 0000 sts (Mess_IntegralRoll2)+1,r25
6741 38f8 A093 0000 sts (Mess_IntegralRoll2)+2,r26
6742 38fc B093 0000 sts (Mess_IntegralRoll2)+3,r27
6743 3900 8889 ldd r24,Y+16
6744 3902 8823 tst r24
6745 3904 01F0 breq .L545
6746 3906 2091 0000 lds r18,GierGyroFehler
6747 390a 3091 0000 lds r19,(GierGyroFehler)+1
6748 390e 2138 cpi r18,129
6749 3910 3105 cpc r19,__zero_reg__
6750 3912 04F0 brlt .L546
6751 3914 8091 0000 lds r24,AdNeutralGier
6752 3918 9091 0000 lds r25,(AdNeutralGier)+1
6753 391c 0196 adiw r24,1
6754 391e 9093 0000 sts (AdNeutralGier)+1,r25
6755 3922 8093 0000 sts AdNeutralGier,r24
6756 .L546:
6757 3926 2058 subi r18,lo8(-128)
6758 3928 3F4F sbci r19,hi8(-128)
6759 392a 04F4 brge .L545
6760 392c 8091 0000 lds r24,AdNeutralGier
6761 3930 9091 0000 lds r25,(AdNeutralGier)+1
6762 3934 0197 sbiw r24,1
6763 3936 9093 0000 sts (AdNeutralGier)+1,r25
6764 393a 8093 0000 sts AdNeutralGier,r24
6765 .L545:
6766 393e 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
6767 3942 1092 0000 sts GierGyroFehler,__zero_reg__
6768 3946 81E0 ldi r24,lo8(1)
6769 3948 90E0 ldi r25,hi8(1)
6770 394a 9093 0000 sts (cnt.14)+1,r25
6771 394e 8093 0000 sts cnt.14,r24
6772 3952 E090 0000 lds r14,IntegralFehlerNick.3
6773 3956 F090 0000 lds r15,(IntegralFehlerNick.3)+1
6774 395a 0091 0000 lds r16,(IntegralFehlerNick.3)+2
6775 395e 1091 0000 lds r17,(IntegralFehlerNick.3)+3
6776 3962 D801 movw r26,r16
6777 3964 C701 movw r24,r14
6778 3966 17FF sbrs r17,7
6779 3968 00C0 rjmp .L549
6780 396a 8827 clr r24
6781 396c 9927 clr r25
6782 396e DC01 movw r26,r24
6783 3970 8E19 sub r24,r14
6784 3972 9F09 sbc r25,r15
6785 3974 A00B sbc r26,r16
6786 3976 B10B sbc r27,r17
6787 .L549:
6788 3978 8150 subi r24,lo8(513)
6789 397a 9240 sbci r25,hi8(513)
6790 397c A040 sbci r26,hlo8(513)
6791 397e B040 sbci r27,hhi8(513)
6792 3980 04F0 brlt .L548
6793 3982 84E0 ldi r24,lo8(4)
6794 3984 90E0 ldi r25,hi8(4)
6795 3986 9093 0000 sts (cnt.14)+1,r25
6796 398a 8093 0000 sts cnt.14,r24
6797 .L548:
6798 398e 8091 0000 lds r24,MittelIntegralNick_Alt.19
6799 3992 9091 0000 lds r25,(MittelIntegralNick_Alt.19)+1
6800 3996 A091 0000 lds r26,(MittelIntegralNick_Alt.19)+2
6801 399a B091 0000 lds r27,(MittelIntegralNick_Alt.19)+3
6802 399e 2091 0000 lds r18,MittelIntegralNick
6803 39a2 3091 0000 lds r19,(MittelIntegralNick)+1
6804 39a6 4091 0000 lds r20,(MittelIntegralNick)+2
6805 39aa 5091 0000 lds r21,(MittelIntegralNick)+3
6806 39ae 821B sub r24,r18
6807 39b0 930B sbc r25,r19
6808 39b2 A40B sbc r26,r20
6809 39b4 B50B sbc r27,r21
6810 39b6 815E subi r24,lo8(-(19999))
6811 39b8 914B sbci r25,hi8(-(19999))
6812 39ba AF4F sbci r26,hlo8(-(19999))
6813 39bc BF4F sbci r27,hhi8(-(19999))
6814 39be 8F53 subi r24,lo8(39999)
6815 39c0 9C49 sbci r25,hi8(39999)
6816 39c2 A040 sbci r26,hlo8(39999)
6817 39c4 B040 sbci r27,hhi8(39999)
6818 39c6 00F0 brlo .L551
6819 39c8 8091 0000 lds r24,FromNaviCtrl_Value+1
6820 39cc 8931 cpi r24,lo8(25)
6821 39ce 04F4 brge .+2
6822 39d0 00C0 rjmp .L550
6823 .L551:
6824 39d2 21E0 ldi r18,lo8(4097)
6825 39d4 E216 cp r14,r18
6826 39d6 20E1 ldi r18,hi8(4097)
6827 39d8 F206 cpc r15,r18
6828 39da 20E0 ldi r18,hlo8(4097)
6829 39dc 0207 cpc r16,r18
6830 39de 20E0 ldi r18,hhi8(4097)
6831 39e0 1207 cpc r17,r18
6832 39e2 04F4 brge .+2
6833 39e4 00C0 rjmp .L552
6834 39e6 8091 0000 lds r24,last_n_p.15
6835 39ea 8823 tst r24
6836 39ec 01F4 brne .+2
6837 39ee 00C0 rjmp .L553
6838 39f0 D801 movw r26,r16
6839 39f2 C701 movw r24,r14
6840 39f4 17FF sbrs r17,7
6841 39f6 00C0 rjmp .L554
6842 39f8 8827 clr r24
6843 39fa 9927 clr r25
6844 39fc DC01 movw r26,r24
6845 39fe 8E19 sub r24,r14
6846 3a00 9F09 sbc r25,r15
6847 3a02 A00B sbc r26,r16
6848 3a04 B10B sbc r27,r17
6849 .L554:
6850 3a06 9C01 movw r18,r24
6851 3a08 AD01 movw r20,r26
6852 3a0a B7FF sbrs r27,7
6853 3a0c 00C0 rjmp .L555
6854 3a0e 2150 subi r18,lo8(-(511))
6855 3a10 3E4F sbci r19,hi8(-(511))
6856 3a12 4F4F sbci r20,hlo8(-(511))
6857 3a14 5F4F sbci r21,hhi8(-(511))
6858 .L555:
6859 3a16 F9E0 ldi r31,9
6860 3a18 5595 1: asr r21
6861 3a1a 4795 ror r20
6862 3a1c 3795 ror r19
6863 3a1e 2795 ror r18
6864 3a20 FA95 dec r31
6865 3a22 01F4 brne 1b
6866 3a24 8091 0000 lds r24,cnt.14
6867 3a28 9091 0000 lds r25,(cnt.14)+1
6868 3a2c 820F add r24,r18
6869 3a2e 931F adc r25,r19
6870 3a30 9093 0000 sts (cnt.14)+1,r25
6871 3a34 8093 0000 sts cnt.14,r24
6872 3a38 D801 movw r26,r16
6873 3a3a C701 movw r24,r14
6874 3a3c 17FF sbrs r17,7
6875 3a3e 00C0 rjmp .L556
6876 3a40 0796 adiw r24,7
6877 3a42 A11D adc r26,__zero_reg__
6878 3a44 B11D adc r27,__zero_reg__
6879 .L556:
6880 3a46 E3E0 ldi r30,3
6881 3a48 B595 1: asr r27
6882 3a4a A795 ror r26
6883 3a4c 9795 ror r25
6884 3a4e 8795 ror r24
6885 3a50 EA95 dec r30
6886 3a52 01F4 brne 1b
6887 3a54 8093 0000 sts ausgleichNick.10,r24
6888 3a58 9093 0000 sts (ausgleichNick.10)+1,r25
6889 3a5c A093 0000 sts (ausgleichNick.10)+2,r26
6890 3a60 B093 0000 sts (ausgleichNick.10)+3,r27
6891 3a64 8958 subi r24,lo8(5001)
6892 3a66 9341 sbci r25,hi8(5001)
6893 3a68 A040 sbci r26,hlo8(5001)
6894 3a6a B040 sbci r27,hhi8(5001)
6895 3a6c 04F0 brlt .L557
6896 3a6e 88E8 ldi r24,lo8(5000)
6897 3a70 93E1 ldi r25,hi8(5000)
6898 3a72 A0E0 ldi r26,hlo8(5000)
6899 3a74 B0E0 ldi r27,hhi8(5000)
6900 3a76 8093 0000 sts ausgleichNick.10,r24
6901 3a7a 9093 0000 sts (ausgleichNick.10)+1,r25
6902 3a7e A093 0000 sts (ausgleichNick.10)+2,r26
6903 3a82 B093 0000 sts (ausgleichNick.10)+3,r27
6904 .L557:
6905 3a86 2091 0000 lds r18,ausgleichNick.10
6906 3a8a 3091 0000 lds r19,(ausgleichNick.10)+1
6907 3a8e 4091 0000 lds r20,(ausgleichNick.10)+2
6908 3a92 5091 0000 lds r21,(ausgleichNick.10)+3
6909 3a96 57FF sbrs r21,7
6910 3a98 00C0 rjmp .L558
6911 3a9a 2150 subi r18,lo8(-(255))
6912 3a9c 3F4F sbci r19,hi8(-(255))
6913 3a9e 4F4F sbci r20,hlo8(-(255))
6914 3aa0 5F4F sbci r21,hhi8(-(255))
6915 .L558:
6916 3aa2 232F mov r18,r19
6917 3aa4 342F mov r19,r20
6918 3aa6 452F mov r20,r21
6919 3aa8 5527 clr r21
6920 3aaa 47FD sbrc r20,7
6921 3aac 5A95 dec r21
6922 3aae 8091 0000 lds r24,LageKorrekturNick
6923 3ab2 9091 0000 lds r25,(LageKorrekturNick)+1
6924 3ab6 820F add r24,r18
6925 3ab8 931F adc r25,r19
6926 3aba 9093 0000 sts (LageKorrekturNick)+1,r25
6927 3abe 8093 0000 sts LageKorrekturNick,r24
6928 3ac2 00C0 rjmp .L560
6929 .L553:
6930 3ac4 81E0 ldi r24,lo8(1)
6931 3ac6 8093 0000 sts last_n_p.15,r24
6932 3aca 00C0 rjmp .L560
6933 .L552:
6934 3acc 1092 0000 sts last_n_p.15,__zero_reg__
6935 .L560:
6936 3ad0 40E0 ldi r20,lo8(-4096)
6937 3ad2 E416 cp r14,r20
6938 3ad4 40EF ldi r20,hi8(-4096)
6939 3ad6 F406 cpc r15,r20
6940 3ad8 4FEF ldi r20,hlo8(-4096)
6941 3ada 0407 cpc r16,r20
6942 3adc 4FEF ldi r20,hhi8(-4096)
6943 3ade 1407 cpc r17,r20
6944 3ae0 04F0 brlt .+2
6945 3ae2 00C0 rjmp .L561
6946 3ae4 8091 0000 lds r24,last_n_n.16
6947 3ae8 8823 tst r24
6948 3aea 01F4 brne .+2
6949 3aec 00C0 rjmp .L562
6950 3aee D801 movw r26,r16
6951 3af0 C701 movw r24,r14
6952 3af2 17FF sbrs r17,7
6953 3af4 00C0 rjmp .L563
6954 3af6 8827 clr r24
6955 3af8 9927 clr r25
6956 3afa DC01 movw r26,r24
6957 3afc 8E19 sub r24,r14
6958 3afe 9F09 sbc r25,r15
6959 3b00 A00B sbc r26,r16
6960 3b02 B10B sbc r27,r17
6961 .L563:
6962 3b04 9C01 movw r18,r24
6963 3b06 AD01 movw r20,r26
6964 3b08 B7FF sbrs r27,7
6965 3b0a 00C0 rjmp .L564
6966 3b0c 2150 subi r18,lo8(-(511))
6967 3b0e 3E4F sbci r19,hi8(-(511))
6968 3b10 4F4F sbci r20,hlo8(-(511))
6969 3b12 5F4F sbci r21,hhi8(-(511))
6970 .L564:
6971 3b14 69E0 ldi r22,9
6972 3b16 5595 1: asr r21
6973 3b18 4795 ror r20
6974 3b1a 3795 ror r19
6975 3b1c 2795 ror r18
6976 3b1e 6A95 dec r22
6977 3b20 01F4 brne 1b
6978 3b22 8091 0000 lds r24,cnt.14
6979 3b26 9091 0000 lds r25,(cnt.14)+1
6980 3b2a 820F add r24,r18
6981 3b2c 931F adc r25,r19
6982 3b2e 9093 0000 sts (cnt.14)+1,r25
6983 3b32 8093 0000 sts cnt.14,r24
6984 3b36 D801 movw r26,r16
6985 3b38 C701 movw r24,r14
6986 3b3a 17FF sbrs r17,7
6987 3b3c 00C0 rjmp .L565
6988 3b3e 0796 adiw r24,7
6989 3b40 A11D adc r26,__zero_reg__
6990 3b42 B11D adc r27,__zero_reg__
6991 .L565:
6992 3b44 23E0 ldi r18,3
6993 3b46 B595 1: asr r27
6994 3b48 A795 ror r26
6995 3b4a 9795 ror r25
6996 3b4c 8795 ror r24
6997 3b4e 2A95 dec r18
6998 3b50 01F4 brne 1b
6999 3b52 8093 0000 sts ausgleichNick.10,r24
7000 3b56 9093 0000 sts (ausgleichNick.10)+1,r25
7001 3b5a A093 0000 sts (ausgleichNick.10)+2,r26
7002 3b5e B093 0000 sts (ausgleichNick.10)+3,r27
7003 3b62 8857 subi r24,lo8(-5000)
7004 3b64 9C4E sbci r25,hi8(-5000)
7005 3b66 AF4F sbci r26,hlo8(-5000)
7006 3b68 BF4F sbci r27,hhi8(-5000)
7007 3b6a 04F4 brge .L566
7008 3b6c 88E7 ldi r24,lo8(-5000)
7009 3b6e 9CEE ldi r25,hi8(-5000)
7010 3b70 AFEF ldi r26,hlo8(-5000)
7011 3b72 BFEF ldi r27,hhi8(-5000)
7012 3b74 8093 0000 sts ausgleichNick.10,r24
7013 3b78 9093 0000 sts (ausgleichNick.10)+1,r25
7014 3b7c A093 0000 sts (ausgleichNick.10)+2,r26
7015 3b80 B093 0000 sts (ausgleichNick.10)+3,r27
7016 .L566:
7017 3b84 2091 0000 lds r18,ausgleichNick.10
7018 3b88 3091 0000 lds r19,(ausgleichNick.10)+1
7019 3b8c 4091 0000 lds r20,(ausgleichNick.10)+2
7020 3b90 5091 0000 lds r21,(ausgleichNick.10)+3
7021 3b94 57FF sbrs r21,7
7022 3b96 00C0 rjmp .L567
7023 3b98 2150 subi r18,lo8(-(255))
7024 3b9a 3F4F sbci r19,hi8(-(255))
7025 3b9c 4F4F sbci r20,hlo8(-(255))
7026 3b9e 5F4F sbci r21,hhi8(-(255))
7027 .L567:
7028 3ba0 232F mov r18,r19
7029 3ba2 342F mov r19,r20
7030 3ba4 452F mov r20,r21
7031 3ba6 5527 clr r21
7032 3ba8 47FD sbrc r20,7
7033 3baa 5A95 dec r21
7034 3bac 8091 0000 lds r24,LageKorrekturNick
7035 3bb0 9091 0000 lds r25,(LageKorrekturNick)+1
7036 3bb4 820F add r24,r18
7037 3bb6 931F adc r25,r19
7038 3bb8 9093 0000 sts (LageKorrekturNick)+1,r25
7039 3bbc 8093 0000 sts LageKorrekturNick,r24
7040 3bc0 00C0 rjmp .L570
7041 .L562:
7042 3bc2 81E0 ldi r24,lo8(1)
7043 3bc4 8093 0000 sts last_n_n.16,r24
7044 3bc8 00C0 rjmp .L570
7045 .L561:
7046 3bca 1092 0000 sts last_n_n.16,__zero_reg__
7047 3bce 00C0 rjmp .L570
7048 .L550:
7049 3bd0 1092 0000 sts (cnt.14)+1,__zero_reg__
7050 3bd4 1092 0000 sts cnt.14,__zero_reg__
7051 3bd8 84E6 ldi r24,lo8(100)
7052 3bda 90E0 ldi r25,hi8(100)
7053 3bdc 9093 0000 sts (KompassSignalSchlecht)+1,r25
7054 3be0 8093 0000 sts KompassSignalSchlecht,r24
7055 .L570:
7056 3be4 6889 ldd r22,Y+16
7057 3be6 262F mov r18,r22
7058 3be8 3327 clr r19
7059 3bea 8091 0000 lds r24,cnt.14
7060 3bee 9091 0000 lds r25,(cnt.14)+1
7061 3bf2 2817 cp r18,r24
7062 3bf4 3907 cpc r19,r25
7063 3bf6 04F4 brge .L571
7064 3bf8 3093 0000 sts (cnt.14)+1,r19
7065 3bfc 2093 0000 sts cnt.14,r18
7066 .L571:
7067 3c00 1091 0000 lds r17,FromNaviCtrl_Value+1
7068 3c04 1123 tst r17
7069 3c06 01F0 breq .L572
7070 3c08 212F mov r18,r17
7071 3c0a 3327 clr r19
7072 3c0c 27FD sbrc r18,7
7073 3c0e 3095 com r19
7074 3c10 8091 0000 lds r24,cnt.14
7075 3c14 9091 0000 lds r25,(cnt.14)+1
7076 3c18 2817 cp r18,r24
7077 3c1a 3907 cpc r19,r25
7078 3c1c 04F4 brge .L572
7079 3c1e 3093 0000 sts (cnt.14)+1,r19
7080 3c22 2093 0000 sts cnt.14,r18
7081 .L572:
7082 3c26 4091 0000 lds r20,IntegralFehlerNick.3
7083 3c2a 5091 0000 lds r21,(IntegralFehlerNick.3)+1
7084 3c2e 6091 0000 lds r22,(IntegralFehlerNick.3)+2
7085 3c32 7091 0000 lds r23,(IntegralFehlerNick.3)+3
7086 3c36 4138 cpi r20,lo8(129)
7087 3c38 5105 cpc r21,__zero_reg__
7088 3c3a 6105 cpc r22,__zero_reg__
7089 3c3c 7105 cpc r23,__zero_reg__
7090 3c3e 04F0 brlt .L574
7091 3c40 8091 0000 lds r24,AdNeutralNick
7092 3c44 9091 0000 lds r25,(AdNeutralNick)+1
7093 3c48 2091 0000 lds r18,cnt.14
7094 3c4c 3091 0000 lds r19,(cnt.14)+1
7095 3c50 820F add r24,r18
7096 3c52 931F adc r25,r19
7097 3c54 9093 0000 sts (AdNeutralNick)+1,r25
7098 3c58 8093 0000 sts AdNeutralNick,r24
7099 .L574:
7100 3c5c 4058 subi r20,lo8(-128)
7101 3c5e 5F4F sbci r21,hi8(-128)
7102 3c60 6F4F sbci r22,hlo8(-128)
7103 3c62 7F4F sbci r23,hhi8(-128)
7104 3c64 04F4 brge .L575
7105 3c66 8091 0000 lds r24,AdNeutralNick
7106 3c6a 9091 0000 lds r25,(AdNeutralNick)+1
7107 3c6e 2091 0000 lds r18,cnt.14
7108 3c72 3091 0000 lds r19,(cnt.14)+1
7109 3c76 821B sub r24,r18
7110 3c78 930B sbc r25,r19
7111 3c7a 9093 0000 sts (AdNeutralNick)+1,r25
7112 3c7e 8093 0000 sts AdNeutralNick,r24
7113 .L575:
7114 3c82 81E0 ldi r24,lo8(1)
7115 3c84 90E0 ldi r25,hi8(1)
7116 3c86 9093 0000 sts (cnt.14)+1,r25
7117 3c8a 8093 0000 sts cnt.14,r24
7118 3c8e C090 0000 lds r12,IntegralFehlerRoll.4
7119 3c92 D090 0000 lds r13,(IntegralFehlerRoll.4)+1
7120 3c96 E090 0000 lds r14,(IntegralFehlerRoll.4)+2
7121 3c9a F090 0000 lds r15,(IntegralFehlerRoll.4)+3
7122 3c9e D701 movw r26,r14
7123 3ca0 C601 movw r24,r12
7124 3ca2 F7FE sbrs r15,7
7125 3ca4 00C0 rjmp .L577
7126 3ca6 8827 clr r24
7127 3ca8 9927 clr r25
7128 3caa DC01 movw r26,r24
7129 3cac 8C19 sub r24,r12
7130 3cae 9D09 sbc r25,r13
7131 3cb0 AE09 sbc r26,r14
7132 3cb2 BF09 sbc r27,r15
7133 .L577:
7134 3cb4 8150 subi r24,lo8(513)
7135 3cb6 9240 sbci r25,hi8(513)
7136 3cb8 A040 sbci r26,hlo8(513)
7137 3cba B040 sbci r27,hhi8(513)
7138 3cbc 04F0 brlt .L576
7139 3cbe 84E0 ldi r24,lo8(4)
7140 3cc0 90E0 ldi r25,hi8(4)
7141 3cc2 9093 0000 sts (cnt.14)+1,r25
7142 3cc6 8093 0000 sts cnt.14,r24
7143 .L576:
7144 3cca 8091 0000 lds r24,MittelIntegralRoll_Alt.20
7145 3cce 9091 0000 lds r25,(MittelIntegralRoll_Alt.20)+1
7146 3cd2 A091 0000 lds r26,(MittelIntegralRoll_Alt.20)+2
7147 3cd6 B091 0000 lds r27,(MittelIntegralRoll_Alt.20)+3
7148 3cda 2091 0000 lds r18,MittelIntegralRoll
7149 3cde 3091 0000 lds r19,(MittelIntegralRoll)+1
7150 3ce2 4091 0000 lds r20,(MittelIntegralRoll)+2
7151 3ce6 5091 0000 lds r21,(MittelIntegralRoll)+3
7152 3cea 821B sub r24,r18
7153 3cec 930B sbc r25,r19
7154 3cee A40B sbc r26,r20
7155 3cf0 B50B sbc r27,r21
7156 3cf2 815E subi r24,lo8(-(19999))
7157 3cf4 914B sbci r25,hi8(-(19999))
7158 3cf6 AF4F sbci r26,hlo8(-(19999))
7159 3cf8 BF4F sbci r27,hhi8(-(19999))
7160 3cfa 8F53 subi r24,lo8(39999)
7161 3cfc 9C49 sbci r25,hi8(39999)
7162 3cfe A040 sbci r26,hlo8(39999)
7163 3d00 B040 sbci r27,hhi8(39999)
7164 3d02 00F0 brlo .L579
7165 3d04 1931 cpi r17,lo8(25)
7166 3d06 04F4 brge .+2
7167 3d08 00C0 rjmp .L578
7168 .L579:
7169 3d0a 01E0 ldi r16,lo8(4097)
7170 3d0c C016 cp r12,r16
7171 3d0e 00E1 ldi r16,hi8(4097)
7172 3d10 D006 cpc r13,r16
7173 3d12 00E0 ldi r16,hlo8(4097)
7174 3d14 E006 cpc r14,r16
7175 3d16 00E0 ldi r16,hhi8(4097)
7176 3d18 F006 cpc r15,r16
7177 3d1a 04F4 brge .+2
7178 3d1c 00C0 rjmp .L580
7179 3d1e 8091 0000 lds r24,last_r_p.17
7180 3d22 8823 tst r24
7181 3d24 01F4 brne .+2
7182 3d26 00C0 rjmp .L581
7183 3d28 D701 movw r26,r14
7184 3d2a C601 movw r24,r12
7185 3d2c F7FE sbrs r15,7
7186 3d2e 00C0 rjmp .L582
7187 3d30 8827 clr r24
7188 3d32 9927 clr r25
7189 3d34 DC01 movw r26,r24
7190 3d36 8C19 sub r24,r12
7191 3d38 9D09 sbc r25,r13
7192 3d3a AE09 sbc r26,r14
7193 3d3c BF09 sbc r27,r15
7194 .L582:
7195 3d3e 9C01 movw r18,r24
7196 3d40 AD01 movw r20,r26
7197 3d42 B7FF sbrs r27,7
7198 3d44 00C0 rjmp .L583
7199 3d46 2150 subi r18,lo8(-(511))
7200 3d48 3E4F sbci r19,hi8(-(511))
7201 3d4a 4F4F sbci r20,hlo8(-(511))
7202 3d4c 5F4F sbci r21,hhi8(-(511))
7203 .L583:
7204 3d4e 09E0 ldi r16,9
7205 3d50 5595 1: asr r21
7206 3d52 4795 ror r20
7207 3d54 3795 ror r19
7208 3d56 2795 ror r18
7209 3d58 0A95 dec r16
7210 3d5a 01F4 brne 1b
7211 3d5c 8091 0000 lds r24,cnt.14
7212 3d60 9091 0000 lds r25,(cnt.14)+1
7213 3d64 820F add r24,r18
7214 3d66 931F adc r25,r19
7215 3d68 9093 0000 sts (cnt.14)+1,r25
7216 3d6c 8093 0000 sts cnt.14,r24
7217 3d70 D701 movw r26,r14
7218 3d72 C601 movw r24,r12
7219 3d74 F7FE sbrs r15,7
7220 3d76 00C0 rjmp .L584
7221 3d78 0796 adiw r24,7
7222 3d7a A11D adc r26,__zero_reg__
7223 3d7c B11D adc r27,__zero_reg__
7224 .L584:
7225 3d7e 13E0 ldi r17,3
7226 3d80 B595 1: asr r27
7227 3d82 A795 ror r26
7228 3d84 9795 ror r25
7229 3d86 8795 ror r24
7230 3d88 1A95 dec r17
7231 3d8a 01F4 brne 1b
7232 3d8c 8093 0000 sts ausgleichRoll.11,r24
7233 3d90 9093 0000 sts (ausgleichRoll.11)+1,r25
7234 3d94 A093 0000 sts (ausgleichRoll.11)+2,r26
7235 3d98 B093 0000 sts (ausgleichRoll.11)+3,r27
7236 3d9c 8958 subi r24,lo8(5001)
7237 3d9e 9341 sbci r25,hi8(5001)
7238 3da0 A040 sbci r26,hlo8(5001)
7239 3da2 B040 sbci r27,hhi8(5001)
7240 3da4 04F0 brlt .L585
7241 3da6 88E8 ldi r24,lo8(5000)
7242 3da8 93E1 ldi r25,hi8(5000)
7243 3daa A0E0 ldi r26,hlo8(5000)
7244 3dac B0E0 ldi r27,hhi8(5000)
7245 3dae 8093 0000 sts ausgleichRoll.11,r24
7246 3db2 9093 0000 sts (ausgleichRoll.11)+1,r25
7247 3db6 A093 0000 sts (ausgleichRoll.11)+2,r26
7248 3dba B093 0000 sts (ausgleichRoll.11)+3,r27
7249 .L585:
7250 3dbe 2091 0000 lds r18,ausgleichRoll.11
7251 3dc2 3091 0000 lds r19,(ausgleichRoll.11)+1
7252 3dc6 4091 0000 lds r20,(ausgleichRoll.11)+2
7253 3dca 5091 0000 lds r21,(ausgleichRoll.11)+3
7254 3dce 57FF sbrs r21,7
7255 3dd0 00C0 rjmp .L586
7256 3dd2 2150 subi r18,lo8(-(255))
7257 3dd4 3F4F sbci r19,hi8(-(255))
7258 3dd6 4F4F sbci r20,hlo8(-(255))
7259 3dd8 5F4F sbci r21,hhi8(-(255))
7260 .L586:
7261 3dda 232F mov r18,r19
7262 3ddc 342F mov r19,r20
7263 3dde 452F mov r20,r21
7264 3de0 5527 clr r21
7265 3de2 47FD sbrc r20,7
7266 3de4 5A95 dec r21
7267 3de6 8091 0000 lds r24,LageKorrekturRoll
7268 3dea 9091 0000 lds r25,(LageKorrekturRoll)+1
7269 3dee 820F add r24,r18
7270 3df0 931F adc r25,r19
7271 3df2 9093 0000 sts (LageKorrekturRoll)+1,r25
7272 3df6 8093 0000 sts LageKorrekturRoll,r24
7273 3dfa 00C0 rjmp .L588
7274 .L581:
7275 3dfc 81E0 ldi r24,lo8(1)
7276 3dfe 8093 0000 sts last_r_p.17,r24
7277 3e02 00C0 rjmp .L588
7278 .L580:
7279 3e04 1092 0000 sts last_r_p.17,__zero_reg__
7280 .L588:
7281 3e08 20E0 ldi r18,lo8(-4096)
7282 3e0a C216 cp r12,r18
7283 3e0c 20EF ldi r18,hi8(-4096)
7284 3e0e D206 cpc r13,r18
7285 3e10 2FEF ldi r18,hlo8(-4096)
7286 3e12 E206 cpc r14,r18
7287 3e14 2FEF ldi r18,hhi8(-4096)
7288 3e16 F206 cpc r15,r18
7289 3e18 04F0 brlt .+2
7290 3e1a 00C0 rjmp .L589
7291 3e1c 8091 0000 lds r24,last_r_n.18
7292 3e20 8823 tst r24
7293 3e22 01F4 brne .+2
7294 3e24 00C0 rjmp .L590
7295 3e26 D701 movw r26,r14
7296 3e28 C601 movw r24,r12
7297 3e2a F7FE sbrs r15,7
7298 3e2c 00C0 rjmp .L591
7299 3e2e 8827 clr r24
7300 3e30 9927 clr r25
7301 3e32 DC01 movw r26,r24
7302 3e34 8C19 sub r24,r12
7303 3e36 9D09 sbc r25,r13
7304 3e38 AE09 sbc r26,r14
7305 3e3a BF09 sbc r27,r15
7306 .L591:
7307 3e3c 9C01 movw r18,r24
7308 3e3e AD01 movw r20,r26
7309 3e40 B7FF sbrs r27,7
7310 3e42 00C0 rjmp .L592
7311 3e44 2150 subi r18,lo8(-(511))
7312 3e46 3E4F sbci r19,hi8(-(511))
7313 3e48 4F4F sbci r20,hlo8(-(511))
7314 3e4a 5F4F sbci r21,hhi8(-(511))
7315 .L592:
7316 3e4c E9E0 ldi r30,9
7317 3e4e 5595 1: asr r21
7318 3e50 4795 ror r20
7319 3e52 3795 ror r19
7320 3e54 2795 ror r18
7321 3e56 EA95 dec r30
7322 3e58 01F4 brne 1b
7323 3e5a 8091 0000 lds r24,cnt.14
7324 3e5e 9091 0000 lds r25,(cnt.14)+1
7325 3e62 820F add r24,r18
7326 3e64 931F adc r25,r19
7327 3e66 9093 0000 sts (cnt.14)+1,r25
7328 3e6a 8093 0000 sts cnt.14,r24
7329 3e6e D701 movw r26,r14
7330 3e70 C601 movw r24,r12
7331 3e72 F7FE sbrs r15,7
7332 3e74 00C0 rjmp .L593
7333 3e76 0796 adiw r24,7
7334 3e78 A11D adc r26,__zero_reg__
7335 3e7a B11D adc r27,__zero_reg__
7336 .L593:
7337 3e7c 73E0 ldi r23,3
7338 3e7e B595 1: asr r27
7339 3e80 A795 ror r26
7340 3e82 9795 ror r25
7341 3e84 8795 ror r24
7342 3e86 7A95 dec r23
7343 3e88 01F4 brne 1b
7344 3e8a 8093 0000 sts ausgleichRoll.11,r24
7345 3e8e 9093 0000 sts (ausgleichRoll.11)+1,r25
7346 3e92 A093 0000 sts (ausgleichRoll.11)+2,r26
7347 3e96 B093 0000 sts (ausgleichRoll.11)+3,r27
7348 3e9a 8857 subi r24,lo8(-5000)
7349 3e9c 9C4E sbci r25,hi8(-5000)
7350 3e9e AF4F sbci r26,hlo8(-5000)
7351 3ea0 BF4F sbci r27,hhi8(-5000)
7352 3ea2 04F4 brge .L594
7353 3ea4 88E7 ldi r24,lo8(-5000)
7354 3ea6 9CEE ldi r25,hi8(-5000)
7355 3ea8 AFEF ldi r26,hlo8(-5000)
7356 3eaa BFEF ldi r27,hhi8(-5000)
7357 3eac 8093 0000 sts ausgleichRoll.11,r24
7358 3eb0 9093 0000 sts (ausgleichRoll.11)+1,r25
7359 3eb4 A093 0000 sts (ausgleichRoll.11)+2,r26
7360 3eb8 B093 0000 sts (ausgleichRoll.11)+3,r27
7361 .L594:
7362 3ebc 2091 0000 lds r18,ausgleichRoll.11
7363 3ec0 3091 0000 lds r19,(ausgleichRoll.11)+1
7364 3ec4 4091 0000 lds r20,(ausgleichRoll.11)+2
7365 3ec8 5091 0000 lds r21,(ausgleichRoll.11)+3
7366 3ecc 57FF sbrs r21,7
7367 3ece 00C0 rjmp .L595
7368 3ed0 2150 subi r18,lo8(-(255))
7369 3ed2 3F4F sbci r19,hi8(-(255))
7370 3ed4 4F4F sbci r20,hlo8(-(255))
7371 3ed6 5F4F sbci r21,hhi8(-(255))
7372 .L595:
7373 3ed8 232F mov r18,r19
7374 3eda 342F mov r19,r20
7375 3edc 452F mov r20,r21
7376 3ede 5527 clr r21
7377 3ee0 47FD sbrc r20,7
7378 3ee2 5A95 dec r21
7379 3ee4 8091 0000 lds r24,LageKorrekturRoll
7380 3ee8 9091 0000 lds r25,(LageKorrekturRoll)+1
7381 3eec 820F add r24,r18
7382 3eee 931F adc r25,r19
7383 3ef0 9093 0000 sts (LageKorrekturRoll)+1,r25
7384 3ef4 8093 0000 sts LageKorrekturRoll,r24
7385 3ef8 00C0 rjmp .L598
7386 .L590:
7387 3efa 81E0 ldi r24,lo8(1)
7388 3efc 8093 0000 sts last_r_n.18,r24
7389 3f00 00C0 rjmp .L598
7390 .L589:
7391 3f02 1092 0000 sts last_r_n.18,__zero_reg__
7392 3f06 00C0 rjmp .L598
7393 .L578:
7394 3f08 1092 0000 sts (cnt.14)+1,__zero_reg__
7395 3f0c 1092 0000 sts cnt.14,__zero_reg__
7396 3f10 84E6 ldi r24,lo8(100)
7397 3f12 90E0 ldi r25,hi8(100)
7398 3f14 9093 0000 sts (KompassSignalSchlecht)+1,r25
7399 3f18 8093 0000 sts KompassSignalSchlecht,r24
7400 .L598:
7401 3f1c 4889 ldd r20,Y+16
7402 3f1e 242F mov r18,r20
7403 3f20 3327 clr r19
7404 3f22 8091 0000 lds r24,cnt.14
7405 3f26 9091 0000 lds r25,(cnt.14)+1
7406 3f2a 2817 cp r18,r24
7407 3f2c 3907 cpc r19,r25
7408 3f2e 04F4 brge .L599
7409 3f30 3093 0000 sts (cnt.14)+1,r19
7410 3f34 2093 0000 sts cnt.14,r18
7411 .L599:
7412 3f38 8091 0000 lds r24,FromNaviCtrl_Value+1
7413 3f3c 8823 tst r24
7414 3f3e 01F0 breq .L600
7415 3f40 282F mov r18,r24
7416 3f42 3327 clr r19
7417 3f44 27FD sbrc r18,7
7418 3f46 3095 com r19
7419 3f48 8091 0000 lds r24,cnt.14
7420 3f4c 9091 0000 lds r25,(cnt.14)+1
7421 3f50 2817 cp r18,r24
7422 3f52 3907 cpc r19,r25
7423 3f54 04F4 brge .L600
7424 3f56 3093 0000 sts (cnt.14)+1,r19
7425 3f5a 2093 0000 sts cnt.14,r18
7426 .L600:
7427 3f5e 4091 0000 lds r20,IntegralFehlerRoll.4
7428 3f62 5091 0000 lds r21,(IntegralFehlerRoll.4)+1
7429 3f66 6091 0000 lds r22,(IntegralFehlerRoll.4)+2
7430 3f6a 7091 0000 lds r23,(IntegralFehlerRoll.4)+3
7431 3f6e 4138 cpi r20,lo8(129)
7432 3f70 5105 cpc r21,__zero_reg__
7433 3f72 6105 cpc r22,__zero_reg__
7434 3f74 7105 cpc r23,__zero_reg__
7435 3f76 04F0 brlt .L602
7436 3f78 8091 0000 lds r24,AdNeutralRoll
7437 3f7c 9091 0000 lds r25,(AdNeutralRoll)+1
7438 3f80 2091 0000 lds r18,cnt.14
7439 3f84 3091 0000 lds r19,(cnt.14)+1
7440 3f88 820F add r24,r18
7441 3f8a 931F adc r25,r19
7442 3f8c 9093 0000 sts (AdNeutralRoll)+1,r25
7443 3f90 8093 0000 sts AdNeutralRoll,r24
7444 .L602:
7445 3f94 4058 subi r20,lo8(-128)
7446 3f96 5F4F sbci r21,hi8(-128)
7447 3f98 6F4F sbci r22,hlo8(-128)
7448 3f9a 7F4F sbci r23,hhi8(-128)
7449 3f9c 04F4 brge .L604
7450 3f9e 8091 0000 lds r24,AdNeutralRoll
7451 3fa2 9091 0000 lds r25,(AdNeutralRoll)+1
7452 3fa6 2091 0000 lds r18,cnt.14
7453 3faa 3091 0000 lds r19,(cnt.14)+1
7454 3fae 821B sub r24,r18
7455 3fb0 930B sbc r25,r19
7456 3fb2 9093 0000 sts (AdNeutralRoll)+1,r25
7457 3fb6 8093 0000 sts AdNeutralRoll,r24
7458 3fba 00C0 rjmp .L604
7459 .L530:
7460 3fbc 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7461 3fc0 1092 0000 sts LageKorrekturRoll,__zero_reg__
7462 3fc4 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7463 3fc8 1092 0000 sts LageKorrekturNick,__zero_reg__
7464 3fcc 1092 0000 sts TrichterFlug,__zero_reg__
7465 .L604:
7466 3fd0 8091 0000 lds r24,IntegralFaktor
7467 3fd4 8823 tst r24
7468 3fd6 01F4 brne .L605
7469 3fd8 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7470 3fdc 1092 0000 sts LageKorrekturRoll,__zero_reg__
7471 3fe0 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7472 3fe4 1092 0000 sts LageKorrekturNick,__zero_reg__
7473 .L605:
7474 3fe8 8091 0000 lds r24,MittelIntegralNick
7475 3fec 9091 0000 lds r25,(MittelIntegralNick)+1
7476 3ff0 A091 0000 lds r26,(MittelIntegralNick)+2
7477 3ff4 B091 0000 lds r27,(MittelIntegralNick)+3
7478 3ff8 8093 0000 sts MittelIntegralNick_Alt.19,r24
7479 3ffc 9093 0000 sts (MittelIntegralNick_Alt.19)+1,r25
7480 4000 A093 0000 sts (MittelIntegralNick_Alt.19)+2,r26
7481 4004 B093 0000 sts (MittelIntegralNick_Alt.19)+3,r27
7482 4008 8091 0000 lds r24,MittelIntegralRoll
7483 400c 9091 0000 lds r25,(MittelIntegralRoll)+1
7484 4010 A091 0000 lds r26,(MittelIntegralRoll)+2
7485 4014 B091 0000 lds r27,(MittelIntegralRoll)+3
7486 4018 8093 0000 sts MittelIntegralRoll_Alt.20,r24
7487 401c 9093 0000 sts (MittelIntegralRoll_Alt.20)+1,r25
7488 4020 A093 0000 sts (MittelIntegralRoll_Alt.20)+2,r26
7489 4024 B093 0000 sts (MittelIntegralRoll_Alt.20)+3,r27
7490 4028 1092 0000 sts IntegralAccNick,__zero_reg__
7491 402c 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
7492 4030 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
7493 4034 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
7494 4038 1092 0000 sts IntegralAccRoll,__zero_reg__
7495 403c 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
7496 4040 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
7497 4044 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
7498 4048 1092 0000 sts IntegralAccZ,__zero_reg__
7499 404c 1092 0000 sts (IntegralAccZ)+1,__zero_reg__
7500 4050 1092 0000 sts (IntegralAccZ)+2,__zero_reg__
7501 4054 1092 0000 sts (IntegralAccZ)+3,__zero_reg__
7502 4058 1092 0000 sts MittelIntegralNick,__zero_reg__
7503 405c 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
7504 4060 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
7505 4064 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
7506 4068 1092 0000 sts MittelIntegralRoll,__zero_reg__
7507 406c 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
7508 4070 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
7509 4074 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
7510 4078 1092 0000 sts MittelIntegralNick2,__zero_reg__
7511 407c 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
7512 4080 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
7513 4084 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
7514 4088 1092 0000 sts MittelIntegralRoll2,__zero_reg__
7515 408c 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
7516 4090 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
7517 4094 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
7518 4098 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
7519 409c 1092 0000 sts ZaehlMessungen,__zero_reg__
7520 .L529:
7521 40a0 E090 0000 lds r14,StickGier
7522 40a4 F090 0000 lds r15,(StickGier)+1
7523 40a8 C701 movw r24,r14
7524 40aa F7FE sbrs r15,7
7525 40ac 00C0 rjmp .L607
7526 40ae 8827 clr r24
7527 40b0 9927 clr r25
7528 40b2 8E19 sub r24,r14
7529 40b4 9F09 sbc r25,r15
7530 .L607:
7531 40b6 0497 sbiw r24,4
7532 40b8 04F0 brlt .L606
7533 40ba 8091 0000 lds r24,Parameter_GlobalConfig
7534 40be 84FD sbrc r24,4
7535 40c0 00C0 rjmp .L606
7536 40c2 82E3 ldi r24,lo8(50)
7537 40c4 8093 0000 sts NeueKompassRichtungMerken,r24
7538 .L606:
7539 40c8 1091 0000 lds r17,EE_Parameter+25
7540 40cc A12E mov r10,r17
7541 40ce BB24 clr r11
7542 40d0 CC24 clr r12
7543 40d2 DD24 clr r13
7544 40d4 B701 movw r22,r14
7545 40d6 8827 clr r24
7546 40d8 77FD sbrc r23,7
7547 40da 8095 com r24
7548 40dc 982F mov r25,r24
7549 40de 9701 movw r18,r14
7550 40e0 F7FE sbrs r15,7
7551 40e2 00C0 rjmp .L609
7552 40e4 2227 clr r18
7553 40e6 3327 clr r19
7554 40e8 2E19 sub r18,r14
7555 40ea 3F09 sbc r19,r15
7556 .L609:
7557 40ec 4427 clr r20
7558 40ee 37FD sbrc r19,7
7559 40f0 4095 com r20
7560 40f2 542F mov r21,r20
7561 40f4 0E94 0000 call __mulsi3
7562 40f8 9B01 movw r18,r22
7563 40fa AC01 movw r20,r24
7564 40fc C601 movw r24,r12
7565 40fe B501 movw r22,r10
7566 4100 0E94 0000 call __mulsi3
7567 4104 97FF sbrs r25,7
7568 4106 00C0 rjmp .L610
7569 4108 6150 subi r22,lo8(-(511))
7570 410a 7E4F sbci r23,hi8(-(511))
7571 410c 8F4F sbci r24,hlo8(-(511))
7572 410e 9F4F sbci r25,hhi8(-(511))
7573 .L610:
7574 4110 59E0 ldi r21,9
7575 4112 9595 1: asr r25
7576 4114 8795 ror r24
7577 4116 7795 ror r23
7578 4118 6795 ror r22
7579 411a 5A95 dec r21
7580 411c 01F4 brne 1b
7581 411e 9B01 movw r18,r22
7582 4120 812F mov r24,r17
7583 4122 9927 clr r25
7584 4124 8E9D mul r24,r14
7585 4126 D001 movw r26,r0
7586 4128 8F9D mul r24,r15
7587 412a B00D add r27,r0
7588 412c 9E9D mul r25,r14
7589 412e B00D add r27,r0
7590 4130 1124 clr r1
7591 4132 CD01 movw r24,r26
7592 4134 B7FD sbrc r27,7
7593 4136 0396 adiw r24,3
7594 .L611:
7595 4138 9595 asr r25
7596 413a 8795 ror r24
7597 413c 9595 asr r25
7598 413e 8795 ror r24
7599 4140 280F add r18,r24
7600 4142 391F adc r19,r25
7601 4144 8091 0000 lds r24,CompassGierSetpoint
7602 4148 9091 0000 lds r25,(CompassGierSetpoint)+1
7603 414c 280F add r18,r24
7604 414e 391F adc r19,r25
7605 4150 4427 clr r20
7606 4152 37FD sbrc r19,7
7607 4154 4095 com r20
7608 4156 542F mov r21,r20
7609 4158 2093 0000 sts sollGier.0,r18
7610 415c 3093 0000 sts (sollGier.0)+1,r19
7611 4160 4093 0000 sts (sollGier.0)+2,r20
7612 4164 5093 0000 sts (sollGier.0)+3,r21
7613 4168 8091 0000 lds r24,Mess_Integral_Gier
7614 416c 9091 0000 lds r25,(Mess_Integral_Gier)+1
7615 4170 A091 0000 lds r26,(Mess_Integral_Gier)+2
7616 4174 B091 0000 lds r27,(Mess_Integral_Gier)+3
7617 4178 821B sub r24,r18
7618 417a 930B sbc r25,r19
7619 417c A40B sbc r26,r20
7620 417e B50B sbc r27,r21
7621 4180 8093 0000 sts Mess_Integral_Gier,r24
7622 4184 9093 0000 sts (Mess_Integral_Gier)+1,r25
7623 4188 A093 0000 sts (Mess_Integral_Gier)+2,r26
7624 418c B093 0000 sts (Mess_Integral_Gier)+3,r27
7625 4190 8155 subi r24,lo8(50001)
7626 4192 934C sbci r25,hi8(50001)
7627 4194 A040 sbci r26,hlo8(50001)
7628 4196 B040 sbci r27,hhi8(50001)
7629 4198 04F0 brlt .L612
7630 419a 80E5 ldi r24,lo8(50000)
7631 419c 93EC ldi r25,hi8(50000)
7632 419e A0E0 ldi r26,hlo8(50000)
7633 41a0 B0E0 ldi r27,hhi8(50000)
7634 41a2 8093 0000 sts Mess_Integral_Gier,r24
7635 41a6 9093 0000 sts (Mess_Integral_Gier)+1,r25
7636 41aa A093 0000 sts (Mess_Integral_Gier)+2,r26
7637 41ae B093 0000 sts (Mess_Integral_Gier)+3,r27
7638 .L612:
7639 41b2 8091 0000 lds r24,Mess_Integral_Gier
7640 41b6 9091 0000 lds r25,(Mess_Integral_Gier)+1
7641 41ba A091 0000 lds r26,(Mess_Integral_Gier)+2
7642 41be B091 0000 lds r27,(Mess_Integral_Gier)+3
7643 41c2 805B subi r24,lo8(-50000)
7644 41c4 9C43 sbci r25,hi8(-50000)
7645 41c6 AF4F sbci r26,hlo8(-50000)
7646 41c8 BF4F sbci r27,hhi8(-50000)
7647 41ca 04F4 brge .L613
7648 41cc 80EB ldi r24,lo8(-50000)
7649 41ce 9CE3 ldi r25,hi8(-50000)
7650 41d0 AFEF ldi r26,hlo8(-50000)
7651 41d2 BFEF ldi r27,hhi8(-50000)
7652 41d4 8093 0000 sts Mess_Integral_Gier,r24
7653 41d8 9093 0000 sts (Mess_Integral_Gier)+1,r25
7654 41dc A093 0000 sts (Mess_Integral_Gier)+2,r26
7655 41e0 B093 0000 sts (Mess_Integral_Gier)+3,r27
7656 .L613:
7657 41e4 0091 0000 lds r16,KompassValue
7658 41e8 1091 0000 lds r17,(KompassValue)+1
7659 41ec 17FD sbrc r17,7
7660 41ee 00C0 rjmp .L614
7661 41f0 8091 0000 lds r24,Parameter_GlobalConfig
7662 41f4 83FF sbrs r24,3
7663 41f6 00C0 rjmp .L614
7664 41f8 8091 0000 lds r24,CalculateCompassTimer
7665 41fc 8150 subi r24,lo8(-(-1))
7666 41fe 8093 0000 sts CalculateCompassTimer,r24
7667 4202 8823 tst r24
7668 4204 01F0 breq .+2
7669 4206 00C0 rjmp .L631
7670 4208 8DE0 ldi r24,lo8(13)
7671 420a 8093 0000 sts CalculateCompassTimer,r24
7672 420e 8091 0000 lds r24,IntegralNick
7673 4212 9091 0000 lds r25,(IntegralNick)+1
7674 4216 A091 0000 lds r26,(IntegralNick)+2
7675 421a B091 0000 lds r27,(IntegralNick)+3
7676 421e B7FF sbrs r27,7
7677 4220 00C0 rjmp .L616
7678 4222 8150 subi r24,lo8(-(511))
7679 4224 9E4F sbci r25,hi8(-(511))
7680 4226 AF4F sbci r26,hlo8(-(511))
7681 4228 BF4F sbci r27,hhi8(-(511))
7682 .L616:
7683 422a 39E0 ldi r19,9
7684 422c B595 1: asr r27
7685 422e A795 ror r26
7686 4230 9795 ror r25
7687 4232 8795 ror r24
7688 4234 3A95 dec r19
7689 4236 01F4 brne 1b
7690 4238 7C01 movw r14,r24
7691 423a 97FF sbrs r25,7
7692 423c 00C0 rjmp .L617
7693 423e F094 com r15
7694 4240 E194 neg r14
7695 4242 F108 sbc r15,__zero_reg__
7696 4244 F394 inc r15
7697 .L617:
7698 4246 8091 0000 lds r24,IntegralRoll
7699 424a 9091 0000 lds r25,(IntegralRoll)+1
7700 424e A091 0000 lds r26,(IntegralRoll)+2
7701 4252 B091 0000 lds r27,(IntegralRoll)+3
7702 4256 B7FF sbrs r27,7
7703 4258 00C0 rjmp .L618
7704 425a 8150 subi r24,lo8(-(511))
7705 425c 9E4F sbci r25,hi8(-(511))
7706 425e AF4F sbci r26,hlo8(-(511))
7707 4260 BF4F sbci r27,hhi8(-(511))
7708 .L618:
7709 4262 29E0 ldi r18,9
7710 4264 B595 1: asr r27
7711 4266 A795 ror r26
7712 4268 9795 ror r25
7713 426a 8795 ror r24
7714 426c 2A95 dec r18
7715 426e 01F4 brne 1b
7716 4270 9C01 movw r18,r24
7717 4272 97FF sbrs r25,7
7718 4274 00C0 rjmp .L619
7719 4276 3095 com r19
7720 4278 2195 neg r18
7721 427a 3F4F sbci r19,lo8(-1)
7722 .L619:
7723 427c E216 cp r14,r18
7724 427e F306 cpc r15,r19
7725 4280 04F4 brge .L620
7726 4282 7901 movw r14,r18
7727 .L620:
7728 4284 B701 movw r22,r14
7729 4286 F7FE sbrs r15,7
7730 4288 00C0 rjmp .L621
7731 428a 695F subi r22,lo8(-(7))
7732 428c 7F4F sbci r23,hi8(-(7))
7733 .L621:
7734 428e 2B01 movw r4,r22
7735 4290 A3E0 ldi r26,3
7736 4292 5594 1: asr r5
7737 4294 4794 ror r4
7738 4296 AA95 dec r26
7739 4298 01F4 brne 1b
7740 429a 22E0 ldi r18,lo8(2)
7741 429c 30E0 ldi r19,hi8(2)
7742 429e 420E add r4,r18
7743 42a0 531E adc r5,r19
7744 42a2 6090 0000 lds r6,ErsatzKompass
7745 42a6 7090 0000 lds r7,(ErsatzKompass)+1
7746 42aa 8090 0000 lds r8,(ErsatzKompass)+2
7747 42ae 9090 0000 lds r9,(ErsatzKompass)+3
7748 42b2 2091 0000 lds r18,GIER_GRAD_FAKTOR
7749 42b6 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
7750 42ba 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
7751 42be 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
7752 42c2 C401 movw r24,r8
7753 42c4 B301 movw r22,r6
7754 42c6 0E94 0000 call __divmodsi4
7755 42ca 5901 movw r10,r18
7756 42cc 6A01 movw r12,r20
7757 42ce 3093 0000 sts (ErsatzKompassInGrad)+1,r19
7758 42d2 2093 0000 sts ErsatzKompassInGrad,r18
7759 42d6 021B sub r16,r18
7760 42d8 130B sbc r17,r19
7761 42da C801 movw r24,r16
7762 42dc 845E subi r24,lo8(-(540))
7763 42de 9D4F sbci r25,hi8(-(540))
7764 42e0 68E6 ldi r22,lo8(360)
7765 42e2 71E0 ldi r23,hi8(360)
7766 42e4 0E94 0000 call __divmodhi4
7767 42e8 9C01 movw r18,r24
7768 42ea 245B subi r18,lo8(-(-180))
7769 42ec 3040 sbci r19,hi8(-(-180))
7770 42ee 8091 0000 lds r24,KompassSignalSchlecht
7771 42f2 9091 0000 lds r25,(KompassSignalSchlecht)+1
7772 42f6 0097 sbiw r24,0
7773 42f8 01F0 breq .L622
7774 42fa 0197 sbiw r24,1
7775 42fc 9093 0000 sts (KompassSignalSchlecht)+1,r25
7776 4300 8093 0000 sts KompassSignalSchlecht,r24
7777 4304 00C0 rjmp .L623
7778 .L622:
7779 4306 49E1 ldi r20,lo8(25)
7780 4308 E416 cp r14,r20
7781 430a F104 cpc r15,__zero_reg__
7782 430c 04F4 brge .L623
7783 430e 8091 0000 lds r24,GierGyroFehler
7784 4312 9091 0000 lds r25,(GierGyroFehler)+1
7785 4316 820F add r24,r18
7786 4318 931F adc r25,r19
7787 431a 9093 0000 sts (GierGyroFehler)+1,r25
7788 431e 8093 0000 sts GierGyroFehler,r24
7789 4322 8091 0000 lds r24,NeueKompassRichtungMerken
7790 4326 8823 tst r24
7791 4328 01F0 breq .L623
7792 432a 8150 subi r24,lo8(-(-1))
7793 432c 8093 0000 sts NeueKompassRichtungMerken,r24
7794 4330 8823 tst r24
7795 4332 01F4 brne .L623
7796 4334 B092 0000 sts (KompassSollWert)+1,r11
7797 4338 A092 0000 sts KompassSollWert,r10
7798 .L623:
7799 433c 8091 0000 lds r24,KompassSignalSchlecht
7800 4340 9091 0000 lds r25,(KompassSignalSchlecht)+1
7801 4344 892B or r24,r25
7802 4346 01F4 brne .L627
7803 4348 8091 0000 lds r24,KompassFusion
7804 434c 9927 clr r25
7805 434e 289F mul r18,r24
7806 4350 B001 movw r22,r0
7807 4352 299F mul r18,r25
7808 4354 700D add r23,r0
7809 4356 389F mul r19,r24
7810 4358 700D add r23,r0
7811 435a 1124 clr r1
7812 435c CB01 movw r24,r22
7813 435e B201 movw r22,r4
7814 4360 0E94 0000 call __divmodhi4
7815 4364 CB01 movw r24,r22
7816 4366 AA27 clr r26
7817 4368 97FD sbrc r25,7
7818 436a A095 com r26
7819 436c BA2F mov r27,r26
7820 436e 680E add r6,r24
7821 4370 791E adc r7,r25
7822 4372 8A1E adc r8,r26
7823 4374 9B1E adc r9,r27
7824 4376 6092 0000 sts ErsatzKompass,r6
7825 437a 7092 0000 sts (ErsatzKompass)+1,r7
7826 437e 8092 0000 sts (ErsatzKompass)+2,r8
7827 4382 9092 0000 sts (ErsatzKompass)+3,r9
7828 .L627:
7829 4386 8091 0000 lds r24,NeueKompassRichtungMerken
7830 438a 8823 tst r24
7831 438c 01F4 brne .L614
7832 438e 8091 0000 lds r24,KompassSollWert
7833 4392 9091 0000 lds r25,(KompassSollWert)+1
7834 4396 2091 0000 lds r18,ErsatzKompassInGrad
7835 439a 3091 0000 lds r19,(ErsatzKompassInGrad)+1
7836 439e 821B sub r24,r18
7837 43a0 930B sbc r25,r19
7838 43a2 845E subi r24,lo8(-(540))
7839 43a4 9D4F sbci r25,hi8(-(540))
7840 43a6 68E6 ldi r22,lo8(360)
7841 43a8 71E0 ldi r23,hi8(360)
7842 43aa 0E94 0000 call __divmodhi4
7843 43ae 9C01 movw r18,r24
7844 43b0 245B subi r18,lo8(-(-180))
7845 43b2 3040 sbci r19,hi8(-(-180))
7846 43b4 8091 0000 lds r24,Parameter_KompassWirkung
7847 43b8 8695 lsr r24
7848 43ba 9927 clr r25
7849 43bc 289F mul r18,r24
7850 43be D001 movw r26,r0
7851 43c0 299F mul r18,r25
7852 43c2 B00D add r27,r0
7853 43c4 389F mul r19,r24
7854 43c6 B00D add r27,r0
7855 43c8 1124 clr r1
7856 43ca 9D01 movw r18,r26
7857 43cc B7FF sbrs r27,7
7858 43ce 00C0 rjmp .L629
7859 43d0 215F subi r18,lo8(-(15))
7860 43d2 3F4F sbci r19,hi8(-(15))
7861 .L629:
7862 43d4 F4E0 ldi r31,4
7863 43d6 3595 1: asr r19
7864 43d8 2795 ror r18
7865 43da FA95 dec r31
7866 43dc 01F4 brne 1b
7867 43de 3093 0000 sts (CompassGierSetpoint)+1,r19
7868 43e2 2093 0000 sts CompassGierSetpoint,r18
7869 43e6 00C0 rjmp .L631
7870 .L614:
7871 43e8 1092 0000 sts (CompassGierSetpoint)+1,__zero_reg__
7872 43ec 1092 0000 sts CompassGierSetpoint,__zero_reg__
7873 .L631:
7874 43f0 8091 0000 lds r24,TrichterFlug
7875 43f4 8823 tst r24
7876 43f6 01F0 breq .L632
7877 43f8 1092 0000 sts SummeRoll,__zero_reg__
7878 43fc 1092 0000 sts (SummeRoll)+1,__zero_reg__
7879 4400 1092 0000 sts (SummeRoll)+2,__zero_reg__
7880 4404 1092 0000 sts (SummeRoll)+3,__zero_reg__
7881 4408 1092 0000 sts SummeNick,__zero_reg__
7882 440c 1092 0000 sts (SummeNick)+1,__zero_reg__
7883 4410 1092 0000 sts (SummeNick)+2,__zero_reg__
7884 4414 1092 0000 sts (SummeNick)+3,__zero_reg__
7885 .L632:
7886 4418 F090 0000 lds r15,Looping_Nick
7887 441c FF20 tst r15
7888 441e 01F4 brne .L633
7889 4420 8091 0000 lds r24,IntegralFaktor
7890 4424 282F mov r18,r24
7891 4426 3327 clr r19
7892 4428 4427 clr r20
7893 442a 5527 clr r21
7894 442c 8091 0000 lds r24,IntegralNick
7895 4430 9091 0000 lds r25,(IntegralNick)+1
7896 4434 A091 0000 lds r26,(IntegralNick)+2
7897 4438 B091 0000 lds r27,(IntegralNick)+3
7898 443c BC01 movw r22,r24
7899 443e CD01 movw r24,r26
7900 4440 0E94 0000 call __mulsi3
7901 4444 DC01 movw r26,r24
7902 4446 CB01 movw r24,r22
7903 4448 BC01 movw r22,r24
7904 444a CD01 movw r24,r26
7905 444c 28EF ldi r18,lo8(11000)
7906 444e 3AE2 ldi r19,hi8(11000)
7907 4450 40E0 ldi r20,hlo8(11000)
7908 4452 50E0 ldi r21,hhi8(11000)
7909 4454 0E94 0000 call __divmodsi4
7910 4458 3901 movw r6,r18
7911 445a 00C0 rjmp .L634
7912 .L633:
7913 445c 6624 clr r6
7914 445e 7724 clr r7
7915 .L634:
7916 4460 E090 0000 lds r14,Looping_Roll
7917 4464 EE20 tst r14
7918 4466 01F4 brne .L635
7919 4468 8091 0000 lds r24,IntegralFaktor
7920 446c 282F mov r18,r24
7921 446e 3327 clr r19
7922 4470 4427 clr r20
7923 4472 5527 clr r21
7924 4474 8091 0000 lds r24,IntegralRoll
7925 4478 9091 0000 lds r25,(IntegralRoll)+1
7926 447c A091 0000 lds r26,(IntegralRoll)+2
7927 4480 B091 0000 lds r27,(IntegralRoll)+3
7928 4484 BC01 movw r22,r24
7929 4486 CD01 movw r24,r26
7930 4488 0E94 0000 call __mulsi3
7931 448c DC01 movw r26,r24
7932 448e CB01 movw r24,r22
7933 4490 BC01 movw r22,r24
7934 4492 CD01 movw r24,r26
7935 4494 28EF ldi r18,lo8(11000)
7936 4496 3AE2 ldi r19,hi8(11000)
7937 4498 40E0 ldi r20,hlo8(11000)
7938 449a 50E0 ldi r21,hhi8(11000)
7939 449c 0E94 0000 call __divmodsi4
7940 44a0 2901 movw r4,r18
7941 44a2 00C0 rjmp .L636
7942 .L635:
7943 44a4 4424 clr r4
7944 44a6 5524 clr r5
7945 .L636:
7946 44a8 8091 0000 lds r24,TrimNick
7947 44ac 9091 0000 lds r25,(TrimNick)+1
7948 44b0 893C cpi r24,201
7949 44b2 9105 cpc r25,__zero_reg__
7950 44b4 04F0 brlt .L637
7951 44b6 88EC ldi r24,lo8(200)
7952 44b8 90E0 ldi r25,hi8(200)
7953 44ba 00C0 rjmp .L894
7954 .L637:
7955 44bc 8853 subi r24,lo8(-200)
7956 44be 9F4F sbci r25,hi8(-200)
7957 44c0 04F4 brge .L638
7958 44c2 88E3 ldi r24,lo8(-200)
7959 44c4 9FEF ldi r25,hi8(-200)
7960 .L894:
7961 44c6 9093 0000 sts (TrimNick)+1,r25
7962 44ca 8093 0000 sts TrimNick,r24
7963 .L638:
7964 44ce 8091 0000 lds r24,TrimRoll
7965 44d2 9091 0000 lds r25,(TrimRoll)+1
7966 44d6 893C cpi r24,201
7967 44d8 9105 cpc r25,__zero_reg__
7968 44da 04F0 brlt .L640
7969 44dc 88EC ldi r24,lo8(200)
7970 44de 90E0 ldi r25,hi8(200)
7971 44e0 00C0 rjmp .L895
7972 .L640:
7973 44e2 8853 subi r24,lo8(-200)
7974 44e4 9F4F sbci r25,hi8(-200)
7975 44e6 04F4 brge .L641
7976 44e8 88E3 ldi r24,lo8(-200)
7977 44ea 9FEF ldi r25,hi8(-200)
7978 .L895:
7979 44ec 9093 0000 sts (TrimRoll)+1,r25
7980 44f0 8093 0000 sts TrimRoll,r24
7981 .L641:
7982 44f4 8091 0000 lds r24,MesswertNick
7983 44f8 9091 0000 lds r25,(MesswertNick)+1
7984 44fc AA27 clr r26
7985 44fe 97FD sbrc r25,7
7986 4500 A095 com r26
7987 4502 BA2F mov r27,r26
7988 4504 2091 0000 lds r18,GyroFaktor
7989 4508 A22E mov r10,r18
7990 450a BB24 clr r11
7991 450c CC24 clr r12
7992 450e DD24 clr r13
7993 4510 BC01 movw r22,r24
7994 4512 CD01 movw r24,r26
7995 4514 A601 movw r20,r12
7996 4516 9501 movw r18,r10
7997 4518 0E94 0000 call __mulsi3
7998 451c 9B01 movw r18,r22
7999 451e AC01 movw r20,r24
8000 4520 8091 0000 lds r24,TrimNick
8001 4524 9091 0000 lds r25,(TrimNick)+1
8002 4528 AA27 clr r26
8003 452a 97FD sbrc r25,7
8004 452c A095 com r26
8005 452e BA2F mov r27,r26
8006 4530 E7E0 ldi r30,7
8007 4532 880F 1: lsl r24
8008 4534 991F rol r25
8009 4536 AA1F rol r26
8010 4538 BB1F rol r27
8011 453a EA95 dec r30
8012 453c 01F4 brne 1b
8013 453e 280F add r18,r24
8014 4540 391F adc r19,r25
8015 4542 4A1F adc r20,r26
8016 4544 5B1F adc r21,r27
8017 4546 57FF sbrs r21,7
8018 4548 00C0 rjmp .L643
8019 454a 215C subi r18,lo8(-(63))
8020 454c 3F4F sbci r19,hi8(-(63))
8021 454e 4F4F sbci r20,hlo8(-(63))
8022 4550 5F4F sbci r21,hhi8(-(63))
8023 .L643:
8024 4552 76E0 ldi r23,6
8025 4554 5595 1: asr r21
8026 4556 4795 ror r20
8027 4558 3795 ror r19
8028 455a 2795 ror r18
8029 455c 7A95 dec r23
8030 455e 01F4 brne 1b
8031 4560 8301 movw r16,r6
8032 4562 020F add r16,r18
8033 4564 131F adc r17,r19
8034 4566 1093 0000 sts (MesswertNick)+1,r17
8035 456a 0093 0000 sts MesswertNick,r16
8036 456e 8091 0000 lds r24,MesswertRoll
8037 4572 9091 0000 lds r25,(MesswertRoll)+1
8038 4576 AA27 clr r26
8039 4578 97FD sbrc r25,7
8040 457a A095 com r26
8041 457c BA2F mov r27,r26
8042 457e BC01 movw r22,r24
8043 4580 CD01 movw r24,r26
8044 4582 A601 movw r20,r12
8045 4584 9501 movw r18,r10
8046 4586 0E94 0000 call __mulsi3
8047 458a 9B01 movw r18,r22
8048 458c AC01 movw r20,r24
8049 458e 8091 0000 lds r24,TrimRoll
8050 4592 9091 0000 lds r25,(TrimRoll)+1
8051 4596 AA27 clr r26
8052 4598 97FD sbrc r25,7
8053 459a A095 com r26
8054 459c BA2F mov r27,r26
8055 459e 67E0 ldi r22,7
8056 45a0 880F 1: lsl r24
8057 45a2 991F rol r25
8058 45a4 AA1F rol r26
8059 45a6 BB1F rol r27
8060 45a8 6A95 dec r22
8061 45aa 01F4 brne 1b
8062 45ac 280F add r18,r24
8063 45ae 391F adc r19,r25
8064 45b0 4A1F adc r20,r26
8065 45b2 5B1F adc r21,r27
8066 45b4 57FF sbrs r21,7
8067 45b6 00C0 rjmp .L644
8068 45b8 215C subi r18,lo8(-(63))
8069 45ba 3F4F sbci r19,hi8(-(63))
8070 45bc 4F4F sbci r20,hlo8(-(63))
8071 45be 5F4F sbci r21,hhi8(-(63))
8072 .L644:
8073 45c0 F6E0 ldi r31,6
8074 45c2 5595 1: asr r21
8075 45c4 4795 ror r20
8076 45c6 3795 ror r19
8077 45c8 2795 ror r18
8078 45ca FA95 dec r31
8079 45cc 01F4 brne 1b
8080 45ce 4201 movw r8,r4
8081 45d0 820E add r8,r18
8082 45d2 931E adc r9,r19
8083 45d4 9092 0000 sts (MesswertRoll)+1,r9
8084 45d8 8092 0000 sts MesswertRoll,r8
8085 45dc 8091 0000 lds r24,MesswertGier
8086 45e0 9091 0000 lds r25,(MesswertGier)+1
8087 45e4 880F add r24,r24
8088 45e6 991F adc r25,r25
8089 45e8 AA27 clr r26
8090 45ea 97FD sbrc r25,7
8091 45ec A095 com r26
8092 45ee BA2F mov r27,r26
8093 45f0 2091 0000 lds r18,GyroFaktorGier
8094 45f4 3327 clr r19
8095 45f6 4427 clr r20
8096 45f8 5527 clr r21
8097 45fa BC01 movw r22,r24
8098 45fc CD01 movw r24,r26
8099 45fe 0E94 0000 call __mulsi3
8100 4602 5B01 movw r10,r22
8101 4604 6C01 movw r12,r24
8102 4606 97FF sbrs r25,7
8103 4608 00C0 rjmp .L645
8104 460a 2FE3 ldi r18,lo8(63)
8105 460c 30E0 ldi r19,hi8(63)
8106 460e 40E0 ldi r20,hlo8(63)
8107 4610 50E0 ldi r21,hhi8(63)
8108 4612 A20E add r10,r18
8109 4614 B31E adc r11,r19
8110 4616 C41E adc r12,r20
8111 4618 D51E adc r13,r21
8112 .L645:
8113 461a E6E0 ldi r30,6
8114 461c D594 1: asr r13
8115 461e C794 ror r12
8116 4620 B794 ror r11
8117 4622 A794 ror r10
8118 4624 EA95 dec r30
8119 4626 01F4 brne 1b
8120 4628 8091 0000 lds r24,IntegralFaktorGier
8121 462c 282F mov r18,r24
8122 462e 3327 clr r19
8123 4630 4427 clr r20
8124 4632 5527 clr r21
8125 4634 8091 0000 lds r24,Integral_Gier
8126 4638 9091 0000 lds r25,(Integral_Gier)+1
8127 463c A091 0000 lds r26,(Integral_Gier)+2
8128 4640 B091 0000 lds r27,(Integral_Gier)+3
8129 4644 BC01 movw r22,r24
8130 4646 CD01 movw r24,r26
8131 4648 0E94 0000 call __mulsi3
8132 464c DC01 movw r26,r24
8133 464e CB01 movw r24,r22
8134 4650 BC01 movw r22,r24
8135 4652 CD01 movw r24,r26
8136 4654 20EF ldi r18,lo8(22000)
8137 4656 35E5 ldi r19,hi8(22000)
8138 4658 40E0 ldi r20,hlo8(22000)
8139 465a 50E0 ldi r21,hhi8(22000)
8140 465c 0E94 0000 call __divmodsi4
8141 4660 B501 movw r22,r10
8142 4662 620F add r22,r18
8143 4664 731F adc r23,r19
8144 4666 7093 0000 sts (MesswertGier)+1,r23
8145 466a 6093 0000 sts MesswertGier,r22
8146 466e 0150 subi r16,lo8(4097)
8147 4670 1041 sbci r17,hi8(4097)
8148 4672 04F0 brlt .L646
8149 4674 80E0 ldi r24,lo8(4096)
8150 4676 90E1 ldi r25,hi8(4096)
8151 4678 9093 0000 sts (MesswertNick)+1,r25
8152 467c 8093 0000 sts MesswertNick,r24
8153 .L646:
8154 4680 8091 0000 lds r24,MesswertNick
8155 4684 9091 0000 lds r25,(MesswertNick)+1
8156 4688 8050 subi r24,lo8(-4096)
8157 468a 904F sbci r25,hi8(-4096)
8158 468c 04F4 brge .L647
8159 468e 80E0 ldi r24,lo8(-4096)
8160 4690 90EF ldi r25,hi8(-4096)
8161 4692 9093 0000 sts (MesswertNick)+1,r25
8162 4696 8093 0000 sts MesswertNick,r24
8163 .L647:
8164 469a 51E0 ldi r21,lo8(4097)
8165 469c 8516 cp r8,r21
8166 469e 50E1 ldi r21,hi8(4097)
8167 46a0 9506 cpc r9,r21
8168 46a2 04F0 brlt .L648
8169 46a4 80E0 ldi r24,lo8(4096)
8170 46a6 90E1 ldi r25,hi8(4096)
8171 46a8 9093 0000 sts (MesswertRoll)+1,r25
8172 46ac 8093 0000 sts MesswertRoll,r24
8173 .L648:
8174 46b0 8091 0000 lds r24,MesswertRoll
8175 46b4 9091 0000 lds r25,(MesswertRoll)+1
8176 46b8 8050 subi r24,lo8(-4096)
8177 46ba 904F sbci r25,hi8(-4096)
8178 46bc 04F4 brge .L649
8179 46be 80E0 ldi r24,lo8(-4096)
8180 46c0 90EF ldi r25,hi8(-4096)
8181 46c2 9093 0000 sts (MesswertRoll)+1,r25
8182 46c6 8093 0000 sts MesswertRoll,r24
8183 .L649:
8184 46ca 6150 subi r22,lo8(4097)
8185 46cc 7041 sbci r23,hi8(4097)
8186 46ce 04F0 brlt .L650
8187 46d0 80E0 ldi r24,lo8(4096)
8188 46d2 90E1 ldi r25,hi8(4096)
8189 46d4 9093 0000 sts (MesswertGier)+1,r25
8190 46d8 8093 0000 sts MesswertGier,r24
8191 .L650:
8192 46dc 8091 0000 lds r24,MesswertGier
8193 46e0 9091 0000 lds r25,(MesswertGier)+1
8194 46e4 8050 subi r24,lo8(-4096)
8195 46e6 904F sbci r25,hi8(-4096)
8196 46e8 04F4 brge .L651
8197 46ea 80E0 ldi r24,lo8(-4096)
8198 46ec 90EF ldi r25,hi8(-4096)
8199 46ee 9093 0000 sts (MesswertGier)+1,r25
8200 46f2 8093 0000 sts MesswertGier,r24
8201 .L651:
8202 46f6 8091 0000 lds r24,BattLowVoltageWarning
8203 46fa 482F mov r20,r24
8204 46fc 5527 clr r21
8205 46fe 8091 0000 lds r24,UBat
8206 4702 9091 0000 lds r25,(UBat)+1
8207 4706 4817 cp r20,r24
8208 4708 5907 cpc r21,r25
8209 470a 04F4 brge .L652
8210 470c 2091 0000 lds r18,UBat
8211 4710 3091 0000 lds r19,(UBat)+1
8212 4714 0981 ldd r16,Y+1
8213 4716 1A81 ldd r17,Y+2
8214 4718 049F mul r16,r20
8215 471a C001 movw r24,r0
8216 471c 059F mul r16,r21
8217 471e 900D add r25,r0
8218 4720 149F mul r17,r20
8219 4722 900D add r25,r0
8220 4724 1124 clr r1
8221 4726 B901 movw r22,r18
8222 4728 0E94 0000 call __udivmodhi4
8223 472c 7A83 std Y+2,r23
8224 472e 6983 std Y+1,r22
8225 .L652:
8226 4730 2981 ldd r18,Y+1
8227 4732 3A81 ldd r19,Y+2
8228 4734 220F lsl r18
8229 4736 331F rol r19
8230 4738 220F lsl r18
8231 473a 331F rol r19
8232 473c 3A83 std Y+2,r19
8233 473e 2983 std Y+1,r18
8234 4740 4091 0000 lds r20,Parameter_GlobalConfig
8235 4744 40FD sbrc r20,0
8236 4746 00C0 rjmp .+4
8237 4748 0C94 0000 jmp .L653
8238 474c EE20 tst r14
8239 474e 01F0 breq .+4
8240 4750 0C94 0000 jmp .L653
8241 4754 FF20 tst r15
8242 4756 01F0 breq .+4
8243 4758 0C94 0000 jmp .L653
8244 475c 00E0 ldi r16,lo8(0)
8245 475e 10E0 ldi r17,hi8(0)
8246 4760 4801 movw r8,r16
8247 4762 8091 0000 lds r24,HoverGas
8248 4766 9091 0000 lds r25,(HoverGas)+1
8249 476a 9093 0000 sts (DebugOut+44)+1,r25
8250 476e 8093 0000 sts DebugOut+44,r24
8251 4772 2091 0000 lds r18,BaroExpandActive
8252 4776 3091 0000 lds r19,(BaroExpandActive)+1
8253 477a 2115 cp r18,__zero_reg__
8254 477c 3105 cpc r19,__zero_reg__
8255 477e 01F0 breq .+2
8256 4780 00C0 rjmp .L654
8257 4782 8091 0000 lds r24,MessLuftdruck
8258 4786 9091 0000 lds r25,(MessLuftdruck)+1
8259 478a 8959 subi r24,lo8(921)
8260 478c 9340 sbci r25,hi8(921)
8261 478e 00F0 brlo .L655
8262 4790 87B5 in r24,71-0x20
8263 4792 803F cpi r24,lo8(-16)
8264 4794 00F4 brsh .L656
8265 4796 8091 0000 lds r24,ExpandBaro
8266 479a 8150 subi r24,lo8(-(-1))
8267 479c 00C0 rjmp .L896
8268 .L656:
8269 479e 81E0 ldi r24,lo8(1)
8270 47a0 8093 0000 sts BaroAtLowerLimit.26,r24
8271 47a4 00C0 rjmp .L663
8272 .L655:
8273 47a6 8091 0000 lds r24,MessLuftdruck
8274 47aa 9091 0000 lds r25,(MessLuftdruck)+1
8275 47ae 8436 cpi r24,100
8276 47b0 9105 cpc r25,__zero_reg__
8277 47b2 00F4 brsh .L659
8278 47b4 87B5 in r24,71-0x20
8279 47b6 8031 cpi r24,lo8(16)
8280 47b8 00F0 brlo .L660
8281 47ba 8091 0000 lds r24,ExpandBaro
8282 47be 8F5F subi r24,lo8(-(1))
8283 .L896:
8284 47c0 8093 0000 sts ExpandBaro,r24
8285 47c4 9FE0 ldi r25,lo8(15)
8286 47c6 8902 muls r24,r25
8287 47c8 9001 movw r18,r0
8288 47ca 1124 clr r1
8289 47cc 8091 0000 lds r24,DruckOffsetSetting
8290 47d0 821B sub r24,r18
8291 47d2 87BD out 71-0x20,r24
8292 47d4 8CE2 ldi r24,lo8(300)
8293 47d6 91E0 ldi r25,hi8(300)
8294 47d8 9093 0000 sts (beeptime)+1,r25
8295 47dc 8093 0000 sts beeptime,r24
8296 47e0 8EE5 ldi r24,lo8(350)
8297 47e2 91E0 ldi r25,hi8(350)
8298 47e4 9093 0000 sts (BaroExpandActive)+1,r25
8299 47e8 8093 0000 sts BaroExpandActive,r24
8300 47ec 00C0 rjmp .L663
8301 .L660:
8302 47ee 81E0 ldi r24,lo8(1)
8303 47f0 8093 0000 sts BaroAtUpperLimit.25,r24
8304 47f4 00C0 rjmp .L663
8305 .L659:
8306 47f6 F092 0000 sts BaroAtUpperLimit.25,r15
8307 47fa F092 0000 sts BaroAtLowerLimit.26,r15
8308 47fe 00C0 rjmp .L663
8309 .L654:
8310 4800 8091 0000 lds r24,HoehenWert
8311 4804 9091 0000 lds r25,(HoehenWert)+1
8312 4808 A091 0000 lds r26,(HoehenWert)+2
8313 480c B091 0000 lds r27,(HoehenWert)+3
8314 4810 64E0 ldi r22,4
8315 4812 880F 1: lsl r24
8316 4814 991F rol r25
8317 4816 AA1F rol r26
8318 4818 BB1F rol r27
8319 481a 6A95 dec r22
8320 481c 01F4 brne 1b
8321 481e 8093 0000 sts SummenHoehe,r24
8322 4822 9093 0000 sts (SummenHoehe)+1,r25
8323 4826 A093 0000 sts (SummenHoehe)+2,r26
8324 482a B093 0000 sts (SummenHoehe)+3,r27
8325 482e 1093 0000 sts (VarioMeter)+1,r17
8326 4832 0093 0000 sts VarioMeter,r16
8327 4836 2150 subi r18,lo8(-(-1))
8328 4838 3040 sbci r19,hi8(-(-1))
8329 483a 3093 0000 sts (BaroExpandActive)+1,r19
8330 483e 2093 0000 sts BaroExpandActive,r18
8331 .L663:
8332 4842 2091 0000 lds r18,Parameter_HoehenSchalter
8333 4846 41FF sbrs r20,1
8334 4848 00C0 rjmp .L664
8335 484a 2233 cpi r18,lo8(50)
8336 484c 00F4 brsh .L665
8337 484e 8091 0000 lds r24,delay.24
8338 4852 8150 subi r24,lo8(-(-1))
8339 4854 8093 0000 sts delay.24,r24
8340 4858 8F3F cpi r24,lo8(-1)
8341 485a 01F0 breq .+2
8342 485c 00C0 rjmp .L671
8343 485e 8091 0000 lds r24,SpeakHoTT
8344 4862 8823 tst r24
8345 4864 01F4 brne .L667
8346 4866 8091 0000 lds r24,HoehenReglerAktiv
8347 486a 8823 tst r24
8348 486c 01F0 breq .L667
8349 486e 88E2 ldi r24,lo8(40)
8350 4870 8093 0000 sts SpeakHoTT,r24
8351 .L667:
8352 4874 1092 0000 sts HoehenReglerAktiv,__zero_reg__
8353 4878 8091 0000 lds r24,HoehenWert
8354 487c 9091 0000 lds r25,(HoehenWert)+1
8355 4880 A091 0000 lds r26,(HoehenWert)+2
8356 4884 B091 0000 lds r27,(HoehenWert)+3
8357 4888 8093 0000 sts SollHoehe,r24
8358 488c 9093 0000 sts (SollHoehe)+1,r25
8359 4890 A093 0000 sts (SollHoehe)+2,r26
8360 4894 B093 0000 sts (SollHoehe)+3,r27
8361 4898 81E0 ldi r24,lo8(1)
8362 489a 8093 0000 sts delay.24,r24
8363 489e 00C0 rjmp .L671
8364 .L665:
8365 48a0 2734 cpi r18,lo8(71)
8366 48a2 00F0 brlo .L671
8367 48a4 8091 0000 lds r24,SpeakHoTT
8368 48a8 8823 tst r24
8369 48aa 01F4 brne .L670
8370 48ac 8091 0000 lds r24,HoehenReglerAktiv
8371 48b0 8823 tst r24
8372 48b2 01F4 brne .L670
8373 48b4 87E2 ldi r24,lo8(39)
8374 48b6 8093 0000 sts SpeakHoTT,r24
8375 .L670:
8376 48ba 88EC ldi r24,lo8(-56)
8377 48bc 8093 0000 sts delay.24,r24
8378 48c0 00C0 rjmp .L897
8379 .L664:
8380 48c2 8091 0000 lds r24,ExternHoehenValue
8381 48c6 9091 0000 lds r25,(ExternHoehenValue)+1
8382 48ca 820F add r24,r18
8383 48cc 911D adc r25,__zero_reg__
8384 48ce 2091 0000 lds r18,EE_Parameter+18
8385 48d2 3327 clr r19
8386 48d4 829F mul r24,r18
8387 48d6 A001 movw r20,r0
8388 48d8 839F mul r24,r19
8389 48da 500D add r21,r0
8390 48dc 929F mul r25,r18
8391 48de 500D add r21,r0
8392 48e0 1124 clr r1
8393 48e2 CA01 movw r24,r20
8394 48e4 AA27 clr r26
8395 48e6 97FD sbrc r25,7
8396 48e8 A095 com r26
8397 48ea BA2F mov r27,r26
8398 48ec 8093 0000 sts SollHoehe,r24
8399 48f0 9093 0000 sts (SollHoehe)+1,r25
8400 48f4 A093 0000 sts (SollHoehe)+2,r26
8401 48f8 B093 0000 sts (SollHoehe)+3,r27
8402 .L897:
8403 48fc 81E0 ldi r24,lo8(1)
8404 48fe 8093 0000 sts HoehenReglerAktiv,r24
8405 .L671:
8406 4902 8091 0000 lds r24,IntegralNick
8407 4906 9091 0000 lds r25,(IntegralNick)+1
8408 490a A091 0000 lds r26,(IntegralNick)+2
8409 490e B091 0000 lds r27,(IntegralNick)+3
8410 4912 E090 0000 lds r14,GIER_GRAD_FAKTOR
8411 4916 F090 0000 lds r15,(GIER_GRAD_FAKTOR)+1
8412 491a 0091 0000 lds r16,(GIER_GRAD_FAKTOR)+2
8413 491e 1091 0000 lds r17,(GIER_GRAD_FAKTOR)+3
8414 4922 BC01 movw r22,r24
8415 4924 CD01 movw r24,r26
8416 4926 A801 movw r20,r16
8417 4928 9701 movw r18,r14
8418 492a 0E94 0000 call __divmodsi4
8419 492e 5901 movw r10,r18
8420 4930 6A01 movw r12,r20
8421 4932 8091 0000 lds r24,IntegralRoll
8422 4936 9091 0000 lds r25,(IntegralRoll)+1
8423 493a A091 0000 lds r26,(IntegralRoll)+2
8424 493e B091 0000 lds r27,(IntegralRoll)+3
8425 4942 BC01 movw r22,r24
8426 4944 CD01 movw r24,r26
8427 4946 A801 movw r20,r16
8428 4948 9701 movw r18,r14
8429 494a 0E94 0000 call __divmodsi4
8430 494e B901 movw r22,r18
8431 4950 C501 movw r24,r10
8432 4952 0E94 0000 call ihypot
8433 4956 5C01 movw r10,r24
8434 4958 CC97 sbiw r24,60
8435 495a 04F0 brlt .L672
8436 495c 5CE3 ldi r21,lo8(60)
8437 495e A52E mov r10,r21
8438 4960 B12C mov r11,__zero_reg__
8439 .L672:
8440 4962 C501 movw r24,r10
8441 4964 0E94 0000 call c_cos_8192
8442 4968 5C01 movw r10,r24
8443 496a 80E2 ldi r24,lo8(32)
8444 496c 8093 0000 sts VarioCharacter,r24
8445 4970 1092 0000 sts (AltitudeSetpointTrimming)+1,__zero_reg__
8446 4974 1092 0000 sts AltitudeSetpointTrimming,__zero_reg__
8447 4978 8091 0000 lds r24,HoehenReglerAktiv
8448 497c 8823 tst r24
8449 497e 01F4 brne .+2
8450 4980 00C0 rjmp .L673
8451 4982 8091 0000 lds r24,FC_StatusFlags
8452 4986 9927 clr r25
8453 4988 9C01 movw r18,r24
8454 498a 2071 andi r18,lo8(16)
8455 498c 3070 andi r19,hi8(16)
8456 498e 84FD sbrc r24,4
8457 4990 00C0 rjmp .L673
8458 4992 8091 0000 lds r24,FC_StatusFlags2
8459 4996 8260 ori r24,lo8(2)
8460 4998 8093 0000 sts FC_StatusFlags2,r24
8461 499c 7091 0000 lds r23,Parameter_ExtraConfig
8462 49a0 872F mov r24,r23
8463 49a2 9927 clr r25
8464 49a4 41E0 ldi r20,lo8(1)
8465 49a6 C42E mov r12,r20
8466 49a8 D12C mov r13,__zero_reg__
8467 49aa C822 and r12,r24
8468 49ac D922 and r13,r25
8469 49ae 80FD sbrc r24,0
8470 49b0 00C0 rjmp .L675
8471 49b2 8091 0000 lds r24,Parameter_GlobalConfig
8472 49b6 81FD sbrc r24,1
8473 49b8 00C0 rjmp .L674
8474 .L675:
8475 49ba C980 ldd r12,Y+1
8476 49bc DA80 ldd r13,Y+2
8477 49be 3093 0000 sts (HeightTrimming.21)+1,r19
8478 49c2 2093 0000 sts HeightTrimming.21,r18
8479 49c6 3093 0000 sts (AltitudeSetpointTrimming)+1,r19
8480 49ca 2093 0000 sts AltitudeSetpointTrimming,r18
8481 49ce 8091 0000 lds r24,FC_StatusFlags
8482 49d2 806C ori r24,lo8(-64)
8483 49d4 8093 0000 sts FC_StatusFlags,r24
8484 49d8 00C0 rjmp .L676
8485 .L674:
8486 49da 8091 0000 lds r24,FC_StatusFlags
8487 49de 81FF sbrs r24,1
8488 49e0 00C0 rjmp .L677
8489 49e2 0091 0000 lds r16,StickGasHover
8490 49e6 1091 0000 lds r17,(StickGasHover)+1
8491 49ea C801 movw r24,r16
8492 49ec 0F96 adiw r24,15
8493 49ee 2090 0000 lds r2,StickGas
8494 49f2 3090 0000 lds r3,(StickGas)+1
8495 49f6 8215 cp r24,r2
8496 49f8 9305 cpc r25,r3
8497 49fa 04F0 brlt .+2
8498 49fc 00C0 rjmp .L678
8499 49fe 8091 0000 lds r24,BaroAtUpperLimit.25
8500 4a02 8823 tst r24
8501 4a04 01F0 breq .+2
8502 4a06 00C0 rjmp .L678
8503 4a08 8091 0000 lds r24,FC_StatusFlags
8504 4a0c 87FF sbrs r24,7
8505 4a0e 00C0 rjmp .L679
8506 4a10 8091 0000 lds r24,FC_StatusFlags
8507 4a14 8F77 andi r24,lo8(127)
8508 4a16 8093 0000 sts FC_StatusFlags,r24
8509 4a1a 8091 0000 lds r24,HoehenWert
8510 4a1e 9091 0000 lds r25,(HoehenWert)+1
8511 4a22 A091 0000 lds r26,(HoehenWert)+2
8512 4a26 B091 0000 lds r27,(HoehenWert)+3
8513 4a2a 8093 0000 sts SollHoehe,r24
8514 4a2e 9093 0000 sts (SollHoehe)+1,r25
8515 4a32 A093 0000 sts (SollHoehe)+2,r26
8516 4a36 B093 0000 sts (SollHoehe)+3,r27
8517 .L679:
8518 4a3a 8091 0000 lds r24,FC_StatusFlags
8519 4a3e 8064 ori r24,lo8(64)
8520 4a40 8093 0000 sts FC_StatusFlags,r24
8521 4a44 E090 0000 lds r14,Parameter_MaximumAltitude
8522 4a48 EE20 tst r14
8523 4a4a 01F0 breq .L680
8524 4a4c 8091 0000 lds r24,SollHoehe
8525 4a50 9091 0000 lds r25,(SollHoehe)+1
8526 4a54 A091 0000 lds r26,(SollHoehe)+2
8527 4a58 B091 0000 lds r27,(SollHoehe)+3
8528 4a5c BC01 movw r22,r24
8529 4a5e CD01 movw r24,r26
8530 4a60 24E6 ldi r18,lo8(100)
8531 4a62 30E0 ldi r19,hi8(100)
8532 4a64 40E0 ldi r20,hlo8(100)
8533 4a66 50E0 ldi r21,hhi8(100)
8534 4a68 0E94 0000 call __divmodsi4
8535 4a6c 8E2D mov r24,r14
8536 4a6e 9927 clr r25
8537 4a70 AA27 clr r26
8538 4a72 BB27 clr r27
8539 4a74 8217 cp r24,r18
8540 4a76 9307 cpc r25,r19
8541 4a78 A407 cpc r26,r20
8542 4a7a B507 cpc r27,r21
8543 4a7c 04F4 brge .L680
8544 4a7e D092 0000 sts (AltitudeSetpointTrimming)+1,r13
8545 4a82 C092 0000 sts AltitudeSetpointTrimming,r12
8546 4a86 00C0 rjmp .L681
8547 .L680:
8548 4a88 C101 movw r24,r2
8549 4a8a 801B sub r24,r16
8550 4a8c 910B sbc r25,r17
8551 4a8e 0F97 sbiw r24,15
8552 4a90 97FF sbrs r25,7
8553 4a92 00C0 rjmp .L682
8554 4a94 9095 com r25
8555 4a96 8195 neg r24
8556 4a98 9F4F sbci r25,lo8(-1)
8557 .L682:
8558 4a9a 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8559 4a9e 8093 0000 sts AltitudeSetpointTrimming,r24
8560 4aa2 8BE2 ldi r24,lo8(43)
8561 4aa4 8093 0000 sts VarioCharacter,r24
8562 .L681:
8563 4aa8 1092 0000 sts WaypointTrimming,__zero_reg__
8564 4aac 00C0 rjmp .L683
8565 .L678:
8566 4aae C801 movw r24,r16
8567 4ab0 0F97 sbiw r24,15
8568 4ab2 2816 cp r2,r24
8569 4ab4 3906 cpc r3,r25
8570 4ab6 04F4 brge .L684
8571 4ab8 2091 0000 lds r18,BaroAtLowerLimit.26
8572 4abc 2223 tst r18
8573 4abe 01F4 brne .L684
8574 4ac0 8091 0000 lds r24,FC_StatusFlags
8575 4ac4 86FF sbrs r24,6
8576 4ac6 00C0 rjmp .L685
8577 4ac8 8091 0000 lds r24,FC_StatusFlags
8578 4acc 8F7B andi r24,lo8(-65)
8579 4ace 8093 0000 sts FC_StatusFlags,r24
8580 4ad2 8091 0000 lds r24,HoehenWert
8581 4ad6 9091 0000 lds r25,(HoehenWert)+1
8582 4ada A091 0000 lds r26,(HoehenWert)+2
8583 4ade B091 0000 lds r27,(HoehenWert)+3
8584 4ae2 8093 0000 sts SollHoehe,r24
8585 4ae6 9093 0000 sts (SollHoehe)+1,r25
8586 4aea A093 0000 sts (SollHoehe)+2,r26
8587 4aee B093 0000 sts (SollHoehe)+3,r27
8588 .L685:
8589 4af2 8091 0000 lds r24,FC_StatusFlags
8590 4af6 8068 ori r24,lo8(-128)
8591 4af8 8093 0000 sts FC_StatusFlags,r24
8592 4afc C101 movw r24,r2
8593 4afe 801B sub r24,r16
8594 4b00 910B sbc r25,r17
8595 4b02 0F96 adiw r24,15
8596 4b04 97FF sbrs r25,7
8597 4b06 00C0 rjmp .L686
8598 4b08 9095 com r25
8599 4b0a 8195 neg r24
8600 4b0c 9F4F sbci r25,lo8(-1)
8601 .L686:
8602 4b0e 9095 com r25
8603 4b10 8195 neg r24
8604 4b12 9F4F sbci r25,lo8(-1)
8605 4b14 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8606 4b18 8093 0000 sts AltitudeSetpointTrimming,r24
8607 4b1c 8DE2 ldi r24,lo8(45)
8608 4b1e 8093 0000 sts VarioCharacter,r24
8609 4b22 2093 0000 sts WaypointTrimming,r18
8610 4b26 00C0 rjmp .L683
8611 .L684:
8612 4b28 8DE3 ldi r24,lo8(61)
8613 4b2a 8093 0000 sts VarioCharacter,r24
8614 4b2e 6091 0000 lds r22,FromNC_AltitudeSpeed
8615 4b32 6623 tst r22
8616 4b34 01F0 breq .L688
8617 4b36 2091 0000 lds r18,FromNC_AltitudeSetpoint
8618 4b3a 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8619 4b3e 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8620 4b42 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8621 4b46 8091 0000 lds r24,SollHoehe
8622 4b4a 9091 0000 lds r25,(SollHoehe)+1
8623 4b4e A091 0000 lds r26,(SollHoehe)+2
8624 4b52 B091 0000 lds r27,(SollHoehe)+3
8625 4b56 8217 cp r24,r18
8626 4b58 9307 cpc r25,r19
8627 4b5a A407 cpc r26,r20
8628 4b5c B507 cpc r27,r21
8629 4b5e 04F4 brge .L688
8630 4b60 8091 0000 lds r24,FC_StatusFlags
8631 4b64 8064 ori r24,lo8(64)
8632 4b66 8093 0000 sts FC_StatusFlags,r24
8633 4b6a 862F mov r24,r22
8634 4b6c 9927 clr r25
8635 4b6e 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8636 4b72 8093 0000 sts AltitudeSetpointTrimming,r24
8637 4b76 8AE0 ldi r24,lo8(10)
8638 4b78 8093 0000 sts WaypointTrimming,r24
8639 4b7c 8EE5 ldi r24,lo8(94)
8640 4b7e 8093 0000 sts VarioCharacter,r24
8641 4b82 8091 0000 lds r24,FC_StatusFlags
8642 4b86 87FF sbrs r24,7
8643 4b88 00C0 rjmp .L683
8644 4b8a 8091 0000 lds r24,FC_StatusFlags
8645 4b8e 8F77 andi r24,lo8(127)
8646 4b90 00C0 rjmp .L899
8647 .L688:
8648 4b92 6623 tst r22
8649 4b94 01F4 brne .+2
8650 4b96 00C0 rjmp .L691
8651 4b98 2091 0000 lds r18,FromNC_AltitudeSetpoint
8652 4b9c 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8653 4ba0 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8654 4ba4 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8655 4ba8 8091 0000 lds r24,SollHoehe
8656 4bac 9091 0000 lds r25,(SollHoehe)+1
8657 4bb0 A091 0000 lds r26,(SollHoehe)+2
8658 4bb4 B091 0000 lds r27,(SollHoehe)+3
8659 4bb8 2817 cp r18,r24
8660 4bba 3907 cpc r19,r25
8661 4bbc 4A07 cpc r20,r26
8662 4bbe 5B07 cpc r21,r27
8663 4bc0 04F4 brge .L691
8664 4bc2 8091 0000 lds r24,FC_StatusFlags
8665 4bc6 8068 ori r24,lo8(-128)
8666 4bc8 8093 0000 sts FC_StatusFlags,r24
8667 4bcc 862F mov r24,r22
8668 4bce 9927 clr r25
8669 4bd0 9095 com r25
8670 4bd2 8195 neg r24
8671 4bd4 9F4F sbci r25,lo8(-1)
8672 4bd6 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8673 4bda 8093 0000 sts AltitudeSetpointTrimming,r24
8674 4bde 86EF ldi r24,lo8(-10)
8675 4be0 8093 0000 sts WaypointTrimming,r24
8676 4be4 86E7 ldi r24,lo8(118)
8677 4be6 8093 0000 sts VarioCharacter,r24
8678 4bea 8091 0000 lds r24,FC_StatusFlags
8679 4bee 86FF sbrs r24,6
8680 4bf0 00C0 rjmp .L683
8681 4bf2 8091 0000 lds r24,FC_StatusFlags
8682 4bf6 8F7B andi r24,lo8(-65)
8683 .L899:
8684 4bf8 8093 0000 sts FC_StatusFlags,r24
8685 4bfc 8091 0000 lds r24,HoehenWert
8686 4c00 9091 0000 lds r25,(HoehenWert)+1
8687 4c04 A091 0000 lds r26,(HoehenWert)+2
8688 4c08 B091 0000 lds r27,(HoehenWert)+3
8689 4c0c 8093 0000 sts SollHoehe,r24
8690 4c10 9093 0000 sts (SollHoehe)+1,r25
8691 4c14 A093 0000 sts (SollHoehe)+2,r26
8692 4c18 B093 0000 sts (SollHoehe)+3,r27
8693 4c1c 00C0 rjmp .L683
8694 .L691:
8695 4c1e 8091 0000 lds r24,FC_StatusFlags
8696 4c22 807C andi r24,lo8(-64)
8697 4c24 01F4 brne .+2
8698 4c26 00C0 rjmp .L683
8699 4c28 8091 0000 lds r24,WaypointTrimming
8700 4c2c 8823 tst r24
8701 4c2e 01F4 brne .L695
8702 4c30 E090 0000 lds r14,HoehenWert
8703 4c34 F090 0000 lds r15,(HoehenWert)+1
8704 4c38 0091 0000 lds r16,(HoehenWert)+2
8705 4c3c 1091 0000 lds r17,(HoehenWert)+3
8706 4c40 D801 movw r26,r16
8707 4c42 C701 movw r24,r14
8708 4c44 8058 subi r24,lo8(-(-128))
8709 4c46 9040 sbci r25,hi8(-(-128))
8710 4c48 A040 sbci r26,hlo8(-(-128))
8711 4c4a B040 sbci r27,hhi8(-(-128))
8712 4c4c 2091 0000 lds r18,SollHoehe
8713 4c50 3091 0000 lds r19,(SollHoehe)+1
8714 4c54 4091 0000 lds r20,(SollHoehe)+2
8715 4c58 5091 0000 lds r21,(SollHoehe)+3
8716 4c5c 8217 cp r24,r18
8717 4c5e 9307 cpc r25,r19
8718 4c60 A407 cpc r26,r20
8719 4c62 B507 cpc r27,r21
8720 4c64 04F4 brge .L898
8721 4c66 D801 movw r26,r16
8722 4c68 C701 movw r24,r14
8723 4c6a 8058 subi r24,lo8(-(128))
8724 4c6c 9F4F sbci r25,hi8(-(128))
8725 4c6e AF4F sbci r26,hlo8(-(128))
8726 4c70 BF4F sbci r27,hhi8(-(128))
8727 4c72 2817 cp r18,r24
8728 4c74 3907 cpc r19,r25
8729 4c76 4A07 cpc r20,r26
8730 4c78 5B07 cpc r21,r27
8731 4c7a 04F0 brlt .L699
8732 .L898:
8733 4c7c 8093 0000 sts SollHoehe,r24
8734 4c80 9093 0000 sts (SollHoehe)+1,r25
8735 4c84 A093 0000 sts (SollHoehe)+2,r26
8736 4c88 B093 0000 sts (SollHoehe)+3,r27
8737 4c8c 00C0 rjmp .L699
8738 .L695:
8739 4c8e 1092 0000 sts WaypointTrimming,__zero_reg__
8740 .L699:
8741 4c92 8091 0000 lds r24,FC_StatusFlags
8742 4c96 8F73 andi r24,lo8(63)
8743 4c98 8093 0000 sts FC_StatusFlags,r24
8744 4c9c 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8745 4ca0 1092 0000 sts HeightTrimming.21,__zero_reg__
8746 4ca4 71FF sbrs r23,1
8747 4ca6 00C0 rjmp .L700
8748 4ca8 84EF ldi r24,lo8(500)
8749 4caa 91E0 ldi r25,hi8(500)
8750 4cac 9093 0000 sts (beeptime)+1,r25
8751 4cb0 8093 0000 sts beeptime,r24
8752 .L700:
8753 4cb4 8091 0000 lds r24,StartTrigger
8754 4cb8 8823 tst r24
8755 4cba 01F4 brne .L683
8756 4cbc 8091 0000 lds r24,HoehenWert
8757 4cc0 9091 0000 lds r25,(HoehenWert)+1
8758 4cc4 A091 0000 lds r26,(HoehenWert)+2
8759 4cc8 B091 0000 lds r27,(HoehenWert)+3
8760 4ccc C397 sbiw r24,51
8761 4cce A105 cpc r26,__zero_reg__
8762 4cd0 B105 cpc r27,__zero_reg__
8763 4cd2 04F0 brlt .L683
8764 4cd4 81E0 ldi r24,lo8(1)
8765 4cd6 8093 0000 sts StartTrigger,r24
8766 .L683:
8767 4cda 6091 0000 lds r22,HeightTrimming.21
8768 4cde 7091 0000 lds r23,(HeightTrimming.21)+1
8769 4ce2 8091 0000 lds r24,AltitudeSetpointTrimming
8770 4ce6 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
8771 4cea 680F add r22,r24
8772 4cec 791F adc r23,r25
8773 4cee 7093 0000 sts (HeightTrimming.21)+1,r23
8774 4cf2 6093 0000 sts HeightTrimming.21,r22
8775 4cf6 CB01 movw r24,r22
8776 4cf8 77FF sbrs r23,7
8777 4cfa 00C0 rjmp .L703
8778 4cfc 8827 clr r24
8779 4cfe 9927 clr r25
8780 4d00 861B sub r24,r22
8781 4d02 970B sbc r25,r23
8782 .L703:
8783 4d04 855F subi r24,lo8(501)
8784 4d06 9140 sbci r25,hi8(501)
8785 4d08 04F4 brge .+2
8786 4d0a 00C0 rjmp .L702
8787 4d0c 4091 0000 lds r20,WaypointTrimming
8788 4d10 4423 tst r20
8789 4d12 01F0 breq .L704
8790 4d14 8091 0000 lds r24,FromNC_AltitudeSetpoint
8791 4d18 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8792 4d1c 2091 0000 lds r18,SollHoehe
8793 4d20 3091 0000 lds r19,(SollHoehe)+1
8794 4d24 821B sub r24,r18
8795 4d26 930B sbc r25,r19
8796 4d28 0996 adiw r24,9
8797 4d2a 4397 sbiw r24,19
8798 4d2c 00F4 brsh .L705
8799 4d2e 8091 0000 lds r24,FromNC_AltitudeSetpoint
8800 4d32 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8801 4d36 A091 0000 lds r26,(FromNC_AltitudeSetpoint)+2
8802 4d3a B091 0000 lds r27,(FromNC_AltitudeSetpoint)+3
8803 4d3e 00C0 rjmp .L901
8804 .L705:
8805 4d40 242F mov r18,r20
8806 4d42 3327 clr r19
8807 4d44 27FD sbrc r18,7
8808 4d46 3095 com r19
8809 4d48 432F mov r20,r19
8810 4d4a 532F mov r21,r19
8811 4d4c 8091 0000 lds r24,SollHoehe
8812 4d50 9091 0000 lds r25,(SollHoehe)+1
8813 4d54 A091 0000 lds r26,(SollHoehe)+2
8814 4d58 B091 0000 lds r27,(SollHoehe)+3
8815 4d5c 820F add r24,r18
8816 4d5e 931F adc r25,r19
8817 4d60 A41F adc r26,r20
8818 4d62 B51F adc r27,r21
8819 .L901:
8820 4d64 8093 0000 sts SollHoehe,r24
8821 4d68 9093 0000 sts (SollHoehe)+1,r25
8822 4d6c A093 0000 sts (SollHoehe)+2,r26
8823 4d70 B093 0000 sts (SollHoehe)+3,r27
8824 4d74 00C0 rjmp .L707
8825 .L704:
8826 4d76 8091 0000 lds r24,EE_Parameter+18
8827 4d7a 2091 0000 lds r18,SollHoehe
8828 4d7e 3091 0000 lds r19,(SollHoehe)+1
8829 4d82 4091 0000 lds r20,(SollHoehe)+2
8830 4d86 5091 0000 lds r21,(SollHoehe)+3
8831 4d8a 1616 cp __zero_reg__,r22
8832 4d8c 1706 cpc __zero_reg__,r23
8833 4d8e 04F4 brge .L708
8834 4d90 63E0 ldi r22,lo8(3)
8835 4d92 0E94 0000 call __udivmodqi4
8836 4d96 280F add r18,r24
8837 4d98 311D adc r19,__zero_reg__
8838 4d9a 411D adc r20,__zero_reg__
8839 4d9c 511D adc r21,__zero_reg__
8840 4d9e 00C0 rjmp .L900
8841 .L708:
8842 4da0 63E0 ldi r22,lo8(3)
8843 4da2 0E94 0000 call __udivmodqi4
8844 4da6 281B sub r18,r24
8845 4da8 3109 sbc r19,__zero_reg__
8846 4daa 4109 sbc r20,__zero_reg__
8847 4dac 5109 sbc r21,__zero_reg__
8848 .L900:
8849 4dae 2093 0000 sts SollHoehe,r18
8850 4db2 3093 0000 sts (SollHoehe)+1,r19
8851 4db6 4093 0000 sts (SollHoehe)+2,r20
8852 4dba 5093 0000 sts (SollHoehe)+3,r21
8853 .L707:
8854 4dbe 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8855 4dc2 1092 0000 sts HeightTrimming.21,__zero_reg__
8856 4dc6 E090 0000 lds r14,HoehenWert
8857 4dca F090 0000 lds r15,(HoehenWert)+1
8858 4dce 0091 0000 lds r16,(HoehenWert)+2
8859 4dd2 1091 0000 lds r17,(HoehenWert)+3
8860 4dd6 D801 movw r26,r16
8861 4dd8 C701 movw r24,r14
8862 4dda 8050 subi r24,lo8(-(-1024))
8863 4ddc 9440 sbci r25,hi8(-(-1024))
8864 4dde A040 sbci r26,hlo8(-(-1024))
8865 4de0 B040 sbci r27,hhi8(-(-1024))
8866 4de2 2091 0000 lds r18,SollHoehe
8867 4de6 3091 0000 lds r19,(SollHoehe)+1
8868 4dea 4091 0000 lds r20,(SollHoehe)+2
8869 4dee 5091 0000 lds r21,(SollHoehe)+3
8870 4df2 8217 cp r24,r18
8871 4df4 9307 cpc r25,r19
8872 4df6 A407 cpc r26,r20
8873 4df8 B507 cpc r27,r21
8874 4dfa 04F4 brge .L902
8875 4dfc D801 movw r26,r16
8876 4dfe C701 movw r24,r14
8877 4e00 8050 subi r24,lo8(-(1024))
8878 4e02 9C4F sbci r25,hi8(-(1024))
8879 4e04 AF4F sbci r26,hlo8(-(1024))
8880 4e06 BF4F sbci r27,hhi8(-(1024))
8881 4e08 2817 cp r18,r24
8882 4e0a 3907 cpc r19,r25
8883 4e0c 4A07 cpc r20,r26
8884 4e0e 5B07 cpc r21,r27
8885 4e10 04F0 brlt .L711
8886 .L902:
8887 4e12 8093 0000 sts SollHoehe,r24
8888 4e16 9093 0000 sts (SollHoehe)+1,r25
8889 4e1a A093 0000 sts (SollHoehe)+2,r26
8890 4e1e B093 0000 sts (SollHoehe)+3,r27
8891 .L711:
8892 4e22 8091 0000 lds r24,Parameter_ExtraConfig
8893 4e26 81FF sbrs r24,1
8894 4e28 00C0 rjmp .L713
8895 4e2a 84E6 ldi r24,lo8(100)
8896 4e2c 90E0 ldi r25,hi8(100)
8897 4e2e 9093 0000 sts (beeptime)+1,r25
8898 4e32 8093 0000 sts beeptime,r24
8899 .L713:
8900 4e36 8091 0000 lds r24,EE_Parameter+22
8901 4e3a 8823 tst r24
8902 4e3c 01F4 brne .L702
8903 4e3e 8091 0000 lds r24,FromNC_AltitudeSpeed
8904 4e42 8823 tst r24
8905 4e44 01F4 brne .L702
8906 4e46 4091 0000 lds r20,HoverGas
8907 4e4a 5091 0000 lds r21,(HoverGas)+1
8908 4e4e 57FF sbrs r21,7
8909 4e50 00C0 rjmp .L715
8910 4e52 4D5F subi r20,lo8(-(3))
8911 4e54 5F4F sbci r21,hi8(-(3))
8912 .L715:
8913 4e56 5595 asr r21
8914 4e58 4795 ror r20
8915 4e5a 5595 asr r21
8916 4e5c 4795 ror r20
8917 4e5e 8091 0000 lds r24,UBat
8918 4e62 9091 0000 lds r25,(UBat)+1
8919 4e66 2091 0000 lds r18,BattLowVoltageWarning
8920 4e6a 3327 clr r19
8921 4e6c 489F mul r20,r24
8922 4e6e F001 movw r30,r0
8923 4e70 499F mul r20,r25
8924 4e72 F00D add r31,r0
8925 4e74 589F mul r21,r24
8926 4e76 F00D add r31,r0
8927 4e78 1124 clr r1
8928 4e7a CF01 movw r24,r30
8929 4e7c B901 movw r22,r18
8930 4e7e 0E94 0000 call __divmodhi4
8931 4e82 7093 0000 sts (StickGasHover)+1,r23
8932 4e86 6093 0000 sts StickGasHover,r22
8933 4e8a 6634 cpi r22,70
8934 4e8c 7105 cpc r23,__zero_reg__
8935 4e8e 04F4 brge .L716
8936 4e90 86E4 ldi r24,lo8(70)
8937 4e92 90E0 ldi r25,hi8(70)
8938 4e94 00C0 rjmp .L903
8939 .L716:
8940 4e96 6739 cpi r22,151
8941 4e98 7105 cpc r23,__zero_reg__
8942 4e9a 04F0 brlt .L702
8943 4e9c 86E9 ldi r24,lo8(150)
8944 4e9e 90E0 ldi r25,hi8(150)
8945 .L903:
8946 4ea0 9093 0000 sts (StickGasHover)+1,r25
8947 4ea4 8093 0000 sts StickGasHover,r24
8948 .L702:
8949 4ea8 8091 0000 lds r24,BaroExpandActive
8950 4eac 9091 0000 lds r25,(BaroExpandActive)+1
8951 4eb0 892B or r24,r25
8952 4eb2 01F0 breq .L720
8953 4eb4 8091 0000 lds r24,HoehenWert
8954 4eb8 9091 0000 lds r25,(HoehenWert)+1
8955 4ebc A091 0000 lds r26,(HoehenWert)+2
8956 4ec0 B091 0000 lds r27,(HoehenWert)+3
8957 4ec4 8093 0000 sts SollHoehe,r24
8958 4ec8 9093 0000 sts (SollHoehe)+1,r25
8959 4ecc A093 0000 sts (SollHoehe)+2,r26
8960 4ed0 B093 0000 sts (SollHoehe)+3,r27
8961 4ed4 00C0 rjmp .L720
8962 .L677:
8963 4ed6 8091 0000 lds r24,HoehenWert
8964 4eda 9091 0000 lds r25,(HoehenWert)+1
8965 4ede A091 0000 lds r26,(HoehenWert)+2
8966 4ee2 B091 0000 lds r27,(HoehenWert)+3
8967 4ee6 8059 subi r24,lo8(-(-400))
8968 4ee8 9140 sbci r25,hi8(-(-400))
8969 4eea A040 sbci r26,hlo8(-(-400))
8970 4eec B040 sbci r27,hhi8(-(-400))
8971 4eee 8093 0000 sts SollHoehe,r24
8972 4ef2 9093 0000 sts (SollHoehe)+1,r25
8973 4ef6 A093 0000 sts (SollHoehe)+2,r26
8974 4efa B093 0000 sts (SollHoehe)+3,r27
8975 4efe 8091 0000 lds r24,EE_Parameter+22
8976 4f02 8823 tst r24
8977 4f04 01F0 breq .L721
8978 4f06 9927 clr r25
8979 4f08 00C0 rjmp .L904
8980 .L721:
8981 4f0a 88E7 ldi r24,lo8(120)
8982 4f0c 90E0 ldi r25,hi8(120)
8983 .L904:
8984 4f0e 9093 0000 sts (StickGasHover)+1,r25
8985 4f12 8093 0000 sts StickGasHover,r24
8986 4f16 E980 ldd r14,Y+1
8987 4f18 FA80 ldd r15,Y+2
8988 4f1a F092 0000 sts (HoverGas)+1,r15
8989 4f1e E092 0000 sts HoverGas,r14
8990 4f22 8EE2 ldi r24,lo8(46)
8991 4f24 8093 0000 sts VarioCharacter,r24
8992 .L720:
8993 4f28 C090 0000 lds r12,HoverGas
8994 4f2c D090 0000 lds r13,(HoverGas)+1
8995 .L676:
8996 4f30 E090 0000 lds r14,HoehenWert
8997 4f34 F090 0000 lds r15,(HoehenWert)+1
8998 4f38 0091 0000 lds r16,(HoehenWert)+2
8999 4f3c 1091 0000 lds r17,(HoehenWert)+3
9000 4f40 2091 0000 lds r18,SollHoehe
9001 4f44 3091 0000 lds r19,(SollHoehe)+1
9002 4f48 4091 0000 lds r20,(SollHoehe)+2
9003 4f4c 5091 0000 lds r21,(SollHoehe)+3
9004 4f50 2E15 cp r18,r14
9005 4f52 3F05 cpc r19,r15
9006 4f54 4007 cpc r20,r16
9007 4f56 5107 cpc r21,r17
9008 4f58 04F0 brlt .L724
9009 4f5a 8091 0000 lds r24,Parameter_ExtraConfig
9010 4f5e 80FD sbrc r24,0
9011 4f60 00C0 rjmp .L782
9012 .L724:
9013 4f62 8091 0000 lds r24,BaroExpandActive
9014 4f66 9091 0000 lds r25,(BaroExpandActive)+1
9015 4f6a 892B or r24,r25
9016 4f6c 01F0 breq .L725
9017 4f6e C090 0000 lds r12,HoverGas
9018 4f72 D090 0000 lds r13,(HoverGas)+1
9019 4f76 00E0 ldi r16,lo8(0)
9020 4f78 10E0 ldi r17,hi8(0)
9021 4f7a 00C0 rjmp .L726
9022 .L725:
9023 4f7c D801 movw r26,r16
9024 4f7e C701 movw r24,r14
9025 4f80 821B sub r24,r18
9026 4f82 930B sbc r25,r19
9027 4f84 A40B sbc r26,r20
9028 4f86 B50B sbc r27,r21
9029 4f88 8093 0000 sts tmp_long.1,r24
9030 4f8c 9093 0000 sts (tmp_long.1)+1,r25
9031 4f90 A093 0000 sts (tmp_long.1)+2,r26
9032 4f94 B093 0000 sts (tmp_long.1)+3,r27
9033 4f98 8230 cpi r24,lo8(-32766)
9034 4f9a 00E8 ldi r16,hi8(-32766)
9035 4f9c 9007 cpc r25,r16
9036 4f9e 0FEF ldi r16,hlo8(-32766)
9037 4fa0 A007 cpc r26,r16
9038 4fa2 0FEF ldi r16,hhi8(-32766)
9039 4fa4 B007 cpc r27,r16
9040 4fa6 04F4 brge .L727
9041 4fa8 81E0 ldi r24,lo8(-32767)
9042 4faa 90E8 ldi r25,hi8(-32767)
9043 4fac AFEF ldi r26,hlo8(-32767)
9044 4fae BFEF ldi r27,hhi8(-32767)
9045 4fb0 00C0 rjmp .L905
9046 .L727:
9047 4fb2 8F5F subi r24,lo8(32767)
9048 4fb4 9F47 sbci r25,hi8(32767)
9049 4fb6 A040 sbci r26,hlo8(32767)
9050 4fb8 B040 sbci r27,hhi8(32767)
9051 4fba 04F0 brlt .L728
9052 4fbc 8FEF ldi r24,lo8(32767)
9053 4fbe 9FE7 ldi r25,hi8(32767)
9054 4fc0 A0E0 ldi r26,hlo8(32767)
9055 4fc2 B0E0 ldi r27,hhi8(32767)
9056 .L905:
9057 4fc4 8093 0000 sts tmp_long.1,r24
9058 4fc8 9093 0000 sts (tmp_long.1)+1,r25
9059 4fcc A093 0000 sts (tmp_long.1)+2,r26
9060 4fd0 B093 0000 sts (tmp_long.1)+3,r27
9061 .L728:
9062 4fd4 0091 0000 lds r16,tmp_long.1
9063 4fd8 1091 0000 lds r17,(tmp_long.1)+1
9064 4fdc 8091 0000 lds r24,Parameter_Hoehe_P
9065 4fe0 282F mov r18,r24
9066 4fe2 3327 clr r19
9067 4fe4 4427 clr r20
9068 4fe6 5527 clr r21
9069 4fe8 8091 0000 lds r24,tmp_long.1
9070 4fec 9091 0000 lds r25,(tmp_long.1)+1
9071 4ff0 A091 0000 lds r26,(tmp_long.1)+2
9072 4ff4 B091 0000 lds r27,(tmp_long.1)+3
9073 4ff8 BC01 movw r22,r24
9074 4ffa CD01 movw r24,r26
9075 4ffc 0E94 0000 call __mulsi3
9076 5000 97FF sbrs r25,7
9077 5002 00C0 rjmp .L730
9078 5004 615E subi r22,lo8(-(31))
9079 5006 7F4F sbci r23,hi8(-(31))
9080 5008 8F4F sbci r24,hlo8(-(31))
9081 500a 9F4F sbci r25,hhi8(-(31))
9082 .L730:
9083 500c 25E0 ldi r18,5
9084 500e 9595 1: asr r25
9085 5010 8795 ror r24
9086 5012 7795 ror r23
9087 5014 6795 ror r22
9088 5016 2A95 dec r18
9089 5018 01F4 brne 1b
9090 501a 6093 0000 sts tmp_long.1,r22
9091 501e 7093 0000 sts (tmp_long.1)+1,r23
9092 5022 8093 0000 sts (tmp_long.1)+2,r24
9093 5026 9093 0000 sts (tmp_long.1)+3,r25
9094 502a 6530 cpi r22,lo8(-507)
9095 502c 2EEF ldi r18,hi8(-507)
9096 502e 7207 cpc r23,r18
9097 5030 2FEF ldi r18,hlo8(-507)
9098 5032 8207 cpc r24,r18
9099 5034 2FEF ldi r18,hhi8(-507)
9100 5036 9207 cpc r25,r18
9101 5038 04F4 brge .L731
9102 503a 84E0 ldi r24,lo8(-508)
9103 503c 9EEF ldi r25,hi8(-508)
9104 503e AFEF ldi r26,hlo8(-508)
9105 5040 BFEF ldi r27,hhi8(-508)
9106 5042 00C0 rjmp .L906
9107 .L731:
9108 5044 6050 subi r22,lo8(1024)
9109 5046 7440 sbci r23,hi8(1024)
9110 5048 8040 sbci r24,hlo8(1024)
9111 504a 9040 sbci r25,hhi8(1024)
9112 504c 04F0 brlt .L732
9113 504e 80E0 ldi r24,lo8(1024)
9114 5050 94E0 ldi r25,hi8(1024)
9115 5052 A0E0 ldi r26,hlo8(1024)
9116 5054 B0E0 ldi r27,hhi8(1024)
9117 .L906:
9118 5056 8093 0000 sts tmp_long.1,r24
9119 505a 9093 0000 sts (tmp_long.1)+1,r25
9120 505e A093 0000 sts (tmp_long.1)+2,r26
9121 5062 B093 0000 sts (tmp_long.1)+3,r27
9122 .L732:
9123 5066 8090 0000 lds r8,tmp_long.1
9124 506a 9090 0000 lds r9,(tmp_long.1)+1
9125 506e 2091 0000 lds r18,VarioMeter
9126 5072 3091 0000 lds r19,(VarioMeter)+1
9127 5076 37FF sbrs r19,7
9128 5078 00C0 rjmp .L734
9129 507a 295F subi r18,lo8(-(7))
9130 507c 3F4F sbci r19,hi8(-(7))
9131 .L734:
9132 507e 83E0 ldi r24,3
9133 5080 3595 1: asr r19
9134 5082 2795 ror r18
9135 5084 8A95 dec r24
9136 5086 01F4 brne 1b
9137 5088 4FEF ldi r20,hi8(-126)
9138 508a 2238 cpi r18,lo8(-126)
9139 508c 3407 cpc r19,r20
9140 508e 04F4 brge .L735
9141 5090 21E8 ldi r18,lo8(-127)
9142 5092 3FEF ldi r19,hi8(-127)
9143 5094 00C0 rjmp .L736
9144 .L735:
9145 5096 2038 cpi r18,128
9146 5098 3105 cpc r19,__zero_reg__
9147 509a 04F0 brlt .L736
9148 509c 20E8 ldi r18,lo8(128)
9149 509e 30E0 ldi r19,hi8(128)
9150 .L736:
9151 50a0 C901 movw r24,r18
9152 50a2 AA27 clr r26
9153 50a4 97FD sbrc r25,7
9154 50a6 A095 com r26
9155 50a8 BA2F mov r27,r26
9156 50aa 2091 0000 lds r18,Parameter_Luftdruck_D
9157 50ae 3327 clr r19
9158 50b0 4427 clr r20
9159 50b2 5527 clr r21
9160 50b4 BC01 movw r22,r24
9161 50b6 CD01 movw r24,r26
9162 50b8 0E94 0000 call __mulsi3
9163 50bc 97FF sbrs r25,7
9164 50be 00C0 rjmp .L738
9165 50c0 6D5F subi r22,lo8(-(3))
9166 50c2 7F4F sbci r23,hi8(-(3))
9167 50c4 8F4F sbci r24,hlo8(-(3))
9168 50c6 9F4F sbci r25,hhi8(-(3))
9169 .L738:
9170 50c8 B2E0 ldi r27,2
9171 50ca 9595 1: asr r25
9172 50cc 8795 ror r24
9173 50ce 7795 ror r23
9174 50d0 6795 ror r22
9175 50d2 BA95 dec r27
9176 50d4 01F4 brne 1b
9177 50d6 9B01 movw r18,r22
9178 50d8 5FEF ldi r21,hi8(-255)
9179 50da 6130 cpi r22,lo8(-255)
9180 50dc 7507 cpc r23,r21
9181 50de 04F4 brge .L739
9182 50e0 20E0 ldi r18,lo8(-256)
9183 50e2 3FEF ldi r19,hi8(-256)
9184 50e4 00C0 rjmp .L740
9185 .L739:
9186 50e6 6F3F cpi r22,255
9187 50e8 7105 cpc r23,__zero_reg__
9188 50ea 01F0 breq .L740
9189 50ec 04F0 brlt .L740
9190 50ee 20E0 ldi r18,lo8(256)
9191 50f0 31E0 ldi r19,hi8(256)
9192 .L740:
9193 50f2 8091 0000 lds r24,FC_StatusFlags
9194 50f6 807C andi r24,lo8(-64)
9195 50f8 01F0 breq .L742
9196 50fa C901 movw r24,r18
9197 50fc 37FD sbrc r19,7
9198 50fe 0396 adiw r24,3
9199 .L743:
9200 5100 9C01 movw r18,r24
9201 5102 3595 asr r19
9202 5104 2795 ror r18
9203 5106 3595 asr r19
9204 5108 2795 ror r18
9205 510a 00C0 rjmp .L744
9206 .L742:
9207 510c 8091 0000 lds r24,Parameter_ExtraConfig
9208 5110 80FF sbrs r24,0
9209 5112 00C0 rjmp .L744
9210 5114 C901 movw r24,r18
9211 5116 37FD sbrc r19,7
9212 5118 0796 adiw r24,7
9213 .L746:
9214 511a 9C01 movw r18,r24
9215 511c F3E0 ldi r31,3
9216 511e 3595 1: asr r19
9217 5120 2795 ror r18
9218 5122 FA95 dec r31
9219 5124 01F4 brne 1b
9220 .L744:
9221 5126 820E add r8,r18
9222 5128 931E adc r9,r19
9223 .L726:
9224 512a 2091 0000 lds r18,Parameter_Hoehe_ACC_Wirkung
9225 512e 2223 tst r18
9226 5130 01F4 brne .+2
9227 5132 00C0 rjmp .L747
9228 5134 6091 0000 lds r22,Mess_Integral_Hoch
9229 5138 7091 0000 lds r23,(Mess_Integral_Hoch)+1
9230 513c 8091 0000 lds r24,(Mess_Integral_Hoch)+2
9231 5140 9091 0000 lds r25,(Mess_Integral_Hoch)+3
9232 5144 97FF sbrs r25,7
9233 5146 00C0 rjmp .L748
9234 5148 6158 subi r22,lo8(-(127))
9235 514a 7F4F sbci r23,hi8(-(127))
9236 514c 8F4F sbci r24,hlo8(-(127))
9237 514e 9F4F sbci r25,hhi8(-(127))
9238 .L748:
9239 5150 E7E0 ldi r30,7
9240 5152 9595 1: asr r25
9241 5154 8795 ror r24
9242 5156 7795 ror r23
9243 5158 6795 ror r22
9244 515a EA95 dec r30
9245 515c 01F4 brne 1b
9246 515e 3327 clr r19
9247 5160 4427 clr r20
9248 5162 5527 clr r21
9249 5164 0E94 0000 call __mulsi3
9250 5168 97FF sbrs r25,7
9251 516a 00C0 rjmp .L749
9252 516c 615E subi r22,lo8(-(31))
9253 516e 7F4F sbci r23,hi8(-(31))
9254 5170 8F4F sbci r24,hlo8(-(31))
9255 5172 9F4F sbci r25,hhi8(-(31))
9256 .L749:
9257 5174 55E0 ldi r21,5
9258 5176 9595 1: asr r25
9259 5178 8795 ror r24
9260 517a 7795 ror r23
9261 517c 6795 ror r22
9262 517e 5A95 dec r21
9263 5180 01F4 brne 1b
9264 5182 6093 0000 sts tmp_long.1,r22
9265 5186 7093 0000 sts (tmp_long.1)+1,r23
9266 518a 8093 0000 sts (tmp_long.1)+2,r24
9267 518e 9093 0000 sts (tmp_long.1)+3,r25
9268 5192 6138 cpi r22,lo8(-127)
9269 5194 AFEF ldi r26,hi8(-127)
9270 5196 7A07 cpc r23,r26
9271 5198 AFEF ldi r26,hlo8(-127)
9272 519a 8A07 cpc r24,r26
9273 519c AFEF ldi r26,hhi8(-127)
9274 519e 9A07 cpc r25,r26
9275 51a0 04F4 brge .L750
9276 51a2 80E8 ldi r24,lo8(-128)
9277 51a4 9FEF ldi r25,hi8(-128)
9278 51a6 AFEF ldi r26,hlo8(-128)
9279 51a8 BFEF ldi r27,hhi8(-128)
9280 51aa 00C0 rjmp .L907
9281 .L750:
9282 51ac 6F3F cpi r22,lo8(255)
9283 51ae 7105 cpc r23,__zero_reg__
9284 51b0 8105 cpc r24,__zero_reg__
9285 51b2 9105 cpc r25,__zero_reg__
9286 51b4 01F0 breq .L751
9287 51b6 04F0 brlt .L751
9288 51b8 80E0 ldi r24,lo8(256)
9289 51ba 91E0 ldi r25,hi8(256)
9290 51bc A0E0 ldi r26,hlo8(256)
9291 51be B0E0 ldi r27,hhi8(256)
9292 .L907:
9293 51c0 8093 0000 sts tmp_long.1,r24
9294 51c4 9093 0000 sts (tmp_long.1)+1,r25
9295 51c8 A093 0000 sts (tmp_long.1)+2,r26
9296 51cc B093 0000 sts (tmp_long.1)+3,r27
9297 .L751:
9298 51d0 8091 0000 lds r24,tmp_long.1
9299 51d4 9091 0000 lds r25,(tmp_long.1)+1
9300 51d8 880E add r8,r24
9301 51da 991E adc r9,r25
9302 .L747:
9303 51dc 8091 0000 lds r24,Parameter_Hoehe_GPS_Z
9304 51e0 282F mov r18,r24
9305 51e2 3327 clr r19
9306 51e4 8091 0000 lds r24,FromNaviCtrl_Value+4
9307 51e8 9927 clr r25
9308 51ea 87FD sbrc r24,7
9309 51ec 9095 com r25
9310 51ee 289F mul r18,r24
9311 51f0 F001 movw r30,r0
9312 51f2 299F mul r18,r25
9313 51f4 F00D add r31,r0
9314 51f6 389F mul r19,r24
9315 51f8 F00D add r31,r0
9316 51fa 1124 clr r1
9317 51fc 9F01 movw r18,r30
9318 51fe F7FF sbrs r31,7
9319 5200 00C0 rjmp .L753
9320 5202 2158 subi r18,lo8(-(127))
9321 5204 3F4F sbci r19,hi8(-(127))
9322 .L753:
9323 5206 220F lsl r18
9324 5208 232F mov r18,r19
9325 520a 221F rol r18
9326 520c 330B sbc r19,r19
9327 520e FFEF ldi r31,hi8(-127)
9328 5210 2138 cpi r18,lo8(-127)
9329 5212 3F07 cpc r19,r31
9330 5214 04F4 brge .L754
9331 5216 20E8 ldi r18,lo8(-128)
9332 5218 3FEF ldi r19,hi8(-128)
9333 521a 00C0 rjmp .L755
9334 .L754:
9335 521c 2F3F cpi r18,255
9336 521e 3105 cpc r19,__zero_reg__
9337 5220 01F0 breq .L755
9338 5222 04F0 brlt .L755
9339 5224 20E0 ldi r18,lo8(256)
9340 5226 31E0 ldi r19,hi8(256)
9341 .L755:
9342 5228 820E add r8,r18
9343 522a 931E adc r9,r19
9344 522c C401 movw r24,r8
9345 522e AA27 clr r26
9346 5230 97FD sbrc r25,7
9347 5232 A095 com r26
9348 5234 BA2F mov r27,r26
9349 5236 E090 0000 lds r14,HoverGas
9350 523a F090 0000 lds r15,(HoverGas)+1
9351 523e 9701 movw r18,r14
9352 5240 4427 clr r20
9353 5242 37FD sbrc r19,7
9354 5244 4095 com r20
9355 5246 542F mov r21,r20
9356 5248 BC01 movw r22,r24
9357 524a CD01 movw r24,r26
9358 524c 0E94 0000 call __mulsi3
9359 5250 97FF sbrs r25,7
9360 5252 00C0 rjmp .L757
9361 5254 6150 subi r22,lo8(-(511))
9362 5256 7E4F sbci r23,hi8(-(511))
9363 5258 8F4F sbci r24,hlo8(-(511))
9364 525a 9F4F sbci r25,hhi8(-(511))
9365 .L757:
9366 525c 29E0 ldi r18,9
9367 525e 9595 1: asr r25
9368 5260 8795 ror r24
9369 5262 7795 ror r23
9370 5264 6795 ror r22
9371 5266 2A95 dec r18
9372 5268 01F4 brne 1b
9373 526a C61A sub r12,r22
9374 526c D70A sbc r13,r23
9375 526e 8091 0000 lds r24,AltitudeSetpointTrimming
9376 5272 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
9377 5276 892B or r24,r25
9378 5278 01F0 breq .+2
9379 527a 00C0 rjmp .L758
9380 527c 1E14 cp __zero_reg__,r14
9381 527e 1F04 cpc __zero_reg__,r15
9382 5280 04F0 brlt .+2
9383 5282 00C0 rjmp .L758
9384 5284 9801 movw r18,r16
9385 5286 17FF sbrs r17,7
9386 5288 00C0 rjmp .L759
9387 528a 3095 com r19
9388 528c 2195 neg r18
9389 528e 3F4F sbci r19,lo8(-1)
9390 .L759:
9391 5290 2D33 cpi r18,61
9392 5292 3105 cpc r19,__zero_reg__
9393 5294 00F4 brsh .L760
9394 5296 8091 0000 lds r24,HoverGasMin
9395 529a 9091 0000 lds r25,(HoverGasMin)+1
9396 529e 8C15 cp r24,r12
9397 52a0 9D05 cpc r25,r13
9398 52a2 04F4 brge .L909
9399 52a4 00C0 rjmp .L918
9400 .L760:
9401 52a6 2C53 subi r18,lo8(-(-60))
9402 52a8 3040 sbci r19,hi8(-(-60))
9403 52aa 85E0 ldi r24,5
9404 52ac 3695 1: lsr r19
9405 52ae 2795 ror r18
9406 52b0 8A95 dec r24
9407 52b2 01F4 brne 1b
9408 52b4 2031 cpi r18,16
9409 52b6 3105 cpc r19,__zero_reg__
9410 52b8 00F0 brlo .L765
9411 52ba 2FE0 ldi r18,lo8(15)
9412 52bc 30E0 ldi r19,hi8(15)
9413 .L765:
9414 52be 4091 0000 lds r20,HoverGasMin
9415 52c2 5091 0000 lds r21,(HoverGasMin)+1
9416 52c6 1016 cp __zero_reg__,r16
9417 52c8 1106 cpc __zero_reg__,r17
9418 52ca 04F4 brge .L766
9419 52cc 80E1 ldi r24,lo8(16)
9420 52ce 90E0 ldi r25,hi8(16)
9421 52d0 821B sub r24,r18
9422 52d2 930B sbc r25,r19
9423 52d4 489F mul r20,r24
9424 52d6 9001 movw r18,r0
9425 52d8 499F mul r20,r25
9426 52da 300D add r19,r0
9427 52dc 589F mul r21,r24
9428 52de 300D add r19,r0
9429 52e0 1124 clr r1
9430 52e2 B4E0 ldi r27,4
9431 52e4 3695 1: lsr r19
9432 52e6 2795 ror r18
9433 52e8 BA95 dec r27
9434 52ea 01F4 brne 1b
9435 52ec 2C15 cp r18,r12
9436 52ee 3D05 cpc r19,r13
9437 52f0 00F4 brsh .L908
9438 .L918:
9439 52f2 8091 0000 lds r24,HoverGasMax
9440 52f6 9091 0000 lds r25,(HoverGasMax)+1
9441 52fa C816 cp r12,r24
9442 52fc D906 cpc r13,r25
9443 52fe 04F0 brlt .L758
9444 .L909:
9445 5300 6C01 movw r12,r24
9446 5302 00C0 rjmp .L758
9447 .L766:
9448 5304 205F subi r18,lo8(-(16))
9449 5306 3F4F sbci r19,hi8(-(16))
9450 5308 8091 0000 lds r24,HoverGasMax
9451 530c 9091 0000 lds r25,(HoverGasMax)+1
9452 5310 829F mul r24,r18
9453 5312 8001 movw r16,r0
9454 5314 839F mul r24,r19
9455 5316 100D add r17,r0
9456 5318 929F mul r25,r18
9457 531a 100D add r17,r0
9458 531c 1124 clr r1
9459 531e 9801 movw r18,r16
9460 5320 A4E0 ldi r26,4
9461 5322 3695 1: lsr r19
9462 5324 2795 ror r18
9463 5326 AA95 dec r26
9464 5328 01F4 brne 1b
9465 532a 4C15 cp r20,r12
9466 532c 5D05 cpc r21,r13
9467 532e 04F0 brlt .L771
9468 5330 6A01 movw r12,r20
9469 5332 00C0 rjmp .L758
9470 .L771:
9471 5334 C216 cp r12,r18
9472 5336 D306 cpc r13,r19
9473 5338 00F0 brlo .L758
9474 .L908:
9475 533a 6901 movw r12,r18
9476 .L758:
9477 533c C601 movw r24,r12
9478 533e AA27 clr r26
9479 5340 97FD sbrc r25,7
9480 5342 A095 com r26
9481 5344 BA2F mov r27,r26
9482 5346 FDE0 ldi r31,13
9483 5348 880F 1: lsl r24
9484 534a 991F rol r25
9485 534c AA1F rol r26
9486 534e BB1F rol r27
9487 5350 FA95 dec r31
9488 5352 01F4 brne 1b
9489 5354 9501 movw r18,r10
9490 5356 4427 clr r20
9491 5358 37FD sbrc r19,7
9492 535a 4095 com r20
9493 535c 542F mov r21,r20
9494 535e BC01 movw r22,r24
9495 5360 CD01 movw r24,r26
9496 5362 0E94 0000 call __divmodsi4
9497 5366 2093 0000 sts tmp_long2.2,r18
9498 536a 3093 0000 sts (tmp_long2.2)+1,r19
9499 536e 4093 0000 sts (tmp_long2.2)+2,r20
9500 5372 5093 0000 sts (tmp_long2.2)+3,r21
9501 5376 C090 0000 lds r12,tmp_long2.2
9502 537a D090 0000 lds r13,(tmp_long2.2)+1
9503 537e 8091 0000 lds r24,FilterHCGas.22
9504 5382 9091 0000 lds r25,(FilterHCGas.22)+1
9505 5386 9C01 movw r18,r24
9506 5388 220F lsl r18
9507 538a 331F rol r19
9508 538c 280F add r18,r24
9509 538e 391F adc r19,r25
9510 5390 2C0D add r18,r12
9511 5392 3D1D adc r19,r13
9512 5394 37FF sbrs r19,7
9513 5396 00C0 rjmp .L774
9514 5398 2D5F subi r18,lo8(-(3))
9515 539a 3F4F sbci r19,hi8(-(3))
9516 .L774:
9517 539c A901 movw r20,r18
9518 539e 5595 asr r21
9519 53a0 4795 ror r20
9520 53a2 5595 asr r21
9521 53a4 4795 ror r20
9522 53a6 5093 0000 sts (FilterHCGas.22)+1,r21
9523 53aa 4093 0000 sts FilterHCGas.22,r20
9524 53ae 8091 0000 lds r24,EE_Parameter+14
9525 53b2 282F mov r18,r24
9526 53b4 3327 clr r19
9527 53b6 220F lsl r18
9528 53b8 331F rol r19
9529 53ba 220F lsl r18
9530 53bc 331F rol r19
9531 53be 2417 cp r18,r20
9532 53c0 3507 cpc r19,r21
9533 53c2 04F4 brge .L910
9534 53c4 8091 0000 lds r24,MAX_GAS
9535 53c8 282F mov r18,r24
9536 53ca 3327 clr r19
9537 53cc 220F lsl r18
9538 53ce 331F rol r19
9539 53d0 220F lsl r18
9540 53d2 331F rol r19
9541 53d4 2055 subi r18,lo8(-(-80))
9542 53d6 3040 sbci r19,hi8(-(-80))
9543 53d8 4217 cp r20,r18
9544 53da 5307 cpc r21,r19
9545 53dc 04F0 brlt .L776
9546 .L910:
9547 53de 3093 0000 sts (FilterHCGas.22)+1,r19
9548 53e2 2093 0000 sts FilterHCGas.22,r18
9549 .L776:
9550 53e6 8091 0000 lds r24,Parameter_ExtraConfig
9551 53ea 80FF sbrs r24,0
9552 53ec 00C0 rjmp .L778
9553 53ee 8091 0000 lds r24,FilterHCGas.22
9554 53f2 9091 0000 lds r25,(FilterHCGas.22)+1
9555 53f6 2981 ldd r18,Y+1
9556 53f8 3A81 ldd r19,Y+2
9557 53fa 8217 cp r24,r18
9558 53fc 9307 cpc r25,r19
9559 53fe 04F0 brlt .L779
9560 5400 3093 0000 sts (FilterHCGas.22)+1,r19
9561 5404 2093 0000 sts FilterHCGas.22,r18
9562 .L779:
9563 5408 4091 0000 lds r20,FilterHCGas.22
9564 540c 5091 0000 lds r21,(FilterHCGas.22)+1
9565 5410 5A83 std Y+2,r21
9566 5412 4983 std Y+1,r20
9567 5414 00C0 rjmp .L782
9568 .L778:
9569 5416 2981 ldd r18,Y+1
9570 5418 3A81 ldd r19,Y+2
9571 541a 2E19 sub r18,r14
9572 541c 3F09 sbc r19,r15
9573 541e 37FF sbrs r19,7
9574 5420 00C0 rjmp .L781
9575 5422 2D5F subi r18,lo8(-(3))
9576 5424 3F4F sbci r19,hi8(-(3))
9577 .L781:
9578 5426 3595 asr r19
9579 5428 2795 ror r18
9580 542a 3595 asr r19
9581 542c 2795 ror r18
9582 542e 6091 0000 lds r22,FilterHCGas.22
9583 5432 7091 0000 lds r23,(FilterHCGas.22)+1
9584 5436 620F add r22,r18
9585 5438 731F adc r23,r19
9586 543a 7A83 std Y+2,r23
9587 543c 6983 std Y+1,r22
9588 543e 00C0 rjmp .L782
9589 .L673:
9590 5440 8091 0000 lds r24,EE_Parameter+22
9591 5444 8823 tst r24
9592 5446 01F4 brne .L783
9593 5448 6091 0000 lds r22,HoverGas
9594 544c 7091 0000 lds r23,(HoverGas)+1
9595 5450 77FF sbrs r23,7
9596 5452 00C0 rjmp .L784
9597 5454 6D5F subi r22,lo8(-(3))
9598 5456 7F4F sbci r23,hi8(-(3))
9599 .L784:
9600 5458 7595 asr r23
9601 545a 6795 ror r22
9602 545c 7595 asr r23
9603 545e 6795 ror r22
9604 5460 4091 0000 lds r20,UBat
9605 5464 5091 0000 lds r21,(UBat)+1
9606 5468 8091 0000 lds r24,BattLowVoltageWarning
9607 546c 282F mov r18,r24
9608 546e 3327 clr r19
9609 5470 649F mul r22,r20
9610 5472 C001 movw r24,r0
9611 5474 659F mul r22,r21
9612 5476 900D add r25,r0
9613 5478 749F mul r23,r20
9614 547a 900D add r25,r0
9615 547c 1124 clr r1
9616 547e B901 movw r22,r18
9617 5480 0E94 0000 call __divmodhi4
9618 5484 CB01 movw r24,r22
9619 5486 00C0 rjmp .L911
9620 .L783:
9621 5488 9927 clr r25
9622 .L911:
9623 548a 9093 0000 sts (StickGasHover)+1,r25
9624 548e 8093 0000 sts StickGasHover,r24
9625 5492 8091 0000 lds r24,StickGasHover
9626 5496 9091 0000 lds r25,(StickGasHover)+1
9627 549a 8734 cpi r24,71
9628 549c 9105 cpc r25,__zero_reg__
9629 549e 04F4 brge .L786
9630 54a0 86E4 ldi r24,lo8(70)
9631 54a2 90E0 ldi r25,hi8(70)
9632 54a4 00C0 rjmp .L912
9633 .L786:
9634 54a6 8639 cpi r24,150
9635 54a8 9105 cpc r25,__zero_reg__
9636 54aa 04F0 brlt .L787
9637 54ac 86E9 ldi r24,lo8(150)
9638 54ae 90E0 ldi r25,hi8(150)
9639 .L912:
9640 54b0 9093 0000 sts (StickGasHover)+1,r25
9641 54b4 8093 0000 sts StickGasHover,r24
9642 .L787:
9643 54b8 8981 ldd r24,Y+1
9644 54ba 9A81 ldd r25,Y+2
9645 54bc 9093 0000 sts (FilterHCGas.22)+1,r25
9646 54c0 8093 0000 sts FilterHCGas.22,r24
9647 54c4 8091 0000 lds r24,FC_StatusFlags
9648 54c8 806C ori r24,lo8(-64)
9649 54ca 8093 0000 sts FC_StatusFlags,r24
9650 54ce 8091 0000 lds r24,FC_StatusFlags2
9651 54d2 8D7F andi r24,lo8(-3)
9652 54d4 8093 0000 sts FC_StatusFlags2,r24
9653 .L782:
9654 54d8 8091 0000 lds r24,FC_StatusFlags
9655 54dc 9927 clr r25
9656 54de 9C01 movw r18,r24
9657 54e0 2270 andi r18,lo8(2)
9658 54e2 3070 andi r19,hi8(2)
9659 54e4 81FF sbrs r24,1
9660 54e6 00C0 rjmp .L789
9661 54e8 8091 0000 lds r24,HoverGasFilter.23
9662 54ec 9091 0000 lds r25,(HoverGasFilter.23)+1
9663 54f0 A091 0000 lds r26,(HoverGasFilter.23)+2
9664 54f4 B091 0000 lds r27,(HoverGasFilter.23)+3
9665 54f8 0097 sbiw r24,0
9666 54fa A105 cpc r26,__zero_reg__
9667 54fc B105 cpc r27,__zero_reg__
9668 54fe 01F0 breq .L791
9669 5500 8091 0000 lds r24,StartTrigger
9670 5504 8130 cpi r24,lo8(1)
9671 5506 01F4 brne .L790
9672 .L791:
9673 5508 E981 ldd r30,Y+1
9674 550a FA81 ldd r31,Y+2
9675 550c CF01 movw r24,r30
9676 550e AA27 clr r26
9677 5510 97FD sbrc r25,7
9678 5512 A095 com r26
9679 5514 BA2F mov r27,r26
9680 5516 1EE0 ldi r17,14
9681 5518 880F 1: lsl r24
9682 551a 991F rol r25
9683 551c AA1F rol r26
9684 551e BB1F rol r27
9685 5520 1A95 dec r17
9686 5522 01F4 brne 1b
9687 5524 8093 0000 sts HoverGasFilter.23,r24
9688 5528 9093 0000 sts (HoverGasFilter.23)+1,r25
9689 552c A093 0000 sts (HoverGasFilter.23)+2,r26
9690 5530 B093 0000 sts (HoverGasFilter.23)+3,r27
9691 .L790:
9692 5534 8091 0000 lds r24,StartTrigger
9693 5538 8130 cpi r24,lo8(1)
9694 553a 01F4 brne .L792
9695 553c 82E0 ldi r24,lo8(2)
9696 553e 8093 0000 sts StartTrigger,r24
9697 .L792:
9698 5542 E980 ldd r14,Y+1
9699 5544 FA80 ldd r15,Y+2
9700 5546 C701 movw r24,r14
9701 5548 AA27 clr r26
9702 554a 97FD sbrc r25,7
9703 554c A095 com r26
9704 554e BA2F mov r27,r26
9705 5550 9501 movw r18,r10
9706 5552 4427 clr r20
9707 5554 37FD sbrc r19,7
9708 5556 4095 com r20
9709 5558 542F mov r21,r20
9710 555a BC01 movw r22,r24
9711 555c CD01 movw r24,r26
9712 555e 0E94 0000 call __mulsi3
9713 5562 DC01 movw r26,r24
9714 5564 CB01 movw r24,r22
9715 5566 8093 0000 sts tmp_long2.2,r24
9716 556a 9093 0000 sts (tmp_long2.2)+1,r25
9717 556e A093 0000 sts (tmp_long2.2)+2,r26
9718 5572 B093 0000 sts (tmp_long2.2)+3,r27
9719 5576 B7FF sbrs r27,7
9720 5578 00C0 rjmp .L793
9721 557a 8150 subi r24,lo8(-(8191))
9722 557c 904E sbci r25,hi8(-(8191))
9723 557e AF4F sbci r26,hlo8(-(8191))
9724 5580 BF4F sbci r27,hhi8(-(8191))
9725 .L793:
9726 5582 7C01 movw r14,r24
9727 5584 8D01 movw r16,r26
9728 5586 ADE0 ldi r26,13
9729 5588 1595 1: asr r17
9730 558a 0795 ror r16
9731 558c F794 ror r15
9732 558e E794 ror r14
9733 5590 AA95 dec r26
9734 5592 01F4 brne 1b
9735 5594 E092 0000 sts tmp_long2.2,r14
9736 5598 F092 0000 sts (tmp_long2.2)+1,r15
9737 559c 0093 0000 sts (tmp_long2.2)+2,r16
9738 55a0 1093 0000 sts (tmp_long2.2)+3,r17
9739 55a4 6091 0000 lds r22,modell_fliegt
9740 55a8 7091 0000 lds r23,(modell_fliegt)+1
9741 55ac 2FE0 ldi r18,hi8(4000)
9742 55ae 603A cpi r22,lo8(4000)
9743 55b0 7207 cpc r23,r18
9744 55b2 00F4 brsh .L794
9745 55b4 8091 0000 lds r24,HoverGasFilter.23
9746 55b8 9091 0000 lds r25,(HoverGasFilter.23)+1
9747 55bc A091 0000 lds r26,(HoverGasFilter.23)+2
9748 55c0 B091 0000 lds r27,(HoverGasFilter.23)+3
9749 55c4 9C01 movw r18,r24
9750 55c6 AD01 movw r20,r26
9751 55c8 FAE0 ldi r31,10
9752 55ca 5695 1: lsr r21
9753 55cc 4795 ror r20
9754 55ce 3795 ror r19
9755 55d0 2795 ror r18
9756 55d2 FA95 dec r31
9757 55d4 01F4 brne 1b
9758 55d6 821B sub r24,r18
9759 55d8 930B sbc r25,r19
9760 55da A40B sbc r26,r20
9761 55dc B50B sbc r27,r21
9762 55de A801 movw r20,r16
9763 55e0 9701 movw r18,r14
9764 55e2 E4E0 ldi r30,4
9765 55e4 220F 1: lsl r18
9766 55e6 331F rol r19
9767 55e8 441F rol r20
9768 55ea 551F rol r21
9769 55ec EA95 dec r30
9770 55ee 01F4 brne 1b
9771 55f0 820F add r24,r18
9772 55f2 931F adc r25,r19
9773 55f4 A41F adc r26,r20
9774 55f6 B51F adc r27,r21
9775 55f8 8093 0000 sts HoverGasFilter.23,r24
9776 55fc 9093 0000 sts (HoverGasFilter.23)+1,r25
9777 5600 A093 0000 sts (HoverGasFilter.23)+2,r26
9778 5604 B093 0000 sts (HoverGasFilter.23)+3,r27
9779 .L794:
9780 5608 6054 subi r22,lo8(8000)
9781 560a 7F41 sbci r23,hi8(8000)
9782 560c 00F4 brsh .L795
9783 560e 8091 0000 lds r24,HoverGasFilter.23
9784 5612 9091 0000 lds r25,(HoverGasFilter.23)+1
9785 5616 A091 0000 lds r26,(HoverGasFilter.23)+2
9786 561a B091 0000 lds r27,(HoverGasFilter.23)+3
9787 561e 9C01 movw r18,r24
9788 5620 AD01 movw r20,r26
9789 5622 6CE0 ldi r22,12
9790 5624 5695 1: lsr r21
9791 5626 4795 ror r20
9792 5628 3795 ror r19
9793 562a 2795 ror r18
9794 562c 6A95 dec r22
9795 562e 01F4 brne 1b
9796 5630 821B sub r24,r18
9797 5632 930B sbc r25,r19
9798 5634 A40B sbc r26,r20
9799 5636 B50B sbc r27,r21
9800 5638 A801 movw r20,r16
9801 563a 9701 movw r18,r14
9802 563c F2E0 ldi r31,2
9803 563e 220F 1: lsl r18
9804 5640 331F rol r19
9805 5642 441F rol r20
9806 5644 551F rol r21
9807 5646 FA95 dec r31
9808 5648 01F4 brne 1b
9809 564a 820F add r24,r18
9810 564c 931F adc r25,r19
9811 564e A41F adc r26,r20
9812 5650 B51F adc r27,r21
9813 5652 00C0 rjmp .L913
9814 .L795:
9815 5654 8091 0000 lds r24,VarioMeter
9816 5658 9091 0000 lds r25,(VarioMeter)+1
9817 565c 8091 0000 lds r24,VarioMeter
9818 5660 9091 0000 lds r25,(VarioMeter)+1
9819 5664 97FF sbrs r25,7
9820 5666 00C0 rjmp .L798
9821 5668 9095 com r25
9822 566a 8195 neg r24
9823 566c 9F4F sbci r25,lo8(-1)
9824 .L798:
9825 566e 8436 cpi r24,100
9826 5670 9105 cpc r25,__zero_reg__
9827 5672 04F4 brge .L796
9828 5674 8091 0000 lds r24,HoehenWert
9829 5678 9091 0000 lds r25,(HoehenWert)+1
9830 567c 2091 0000 lds r18,SollHoehe
9831 5680 3091 0000 lds r19,(SollHoehe)+1
9832 5684 821B sub r24,r18
9833 5686 930B sbc r25,r19
9834 5688 8150 subi r24,lo8(-(255))
9835 568a 9F4F sbci r25,hi8(-(255))
9836 568c 8F5F subi r24,lo8(511)
9837 568e 9140 sbci r25,hi8(511)
9838 5690 00F4 brsh .L796
9839 5692 8091 0000 lds r24,HoverGasFilter.23
9840 5696 9091 0000 lds r25,(HoverGasFilter.23)+1
9841 569a A091 0000 lds r26,(HoverGasFilter.23)+2
9842 569e B091 0000 lds r27,(HoverGasFilter.23)+3
9843 56a2 9C01 movw r18,r24
9844 56a4 AD01 movw r20,r26
9845 56a6 EEE0 ldi r30,14
9846 56a8 5695 1: lsr r21
9847 56aa 4795 ror r20
9848 56ac 3795 ror r19
9849 56ae 2795 ror r18
9850 56b0 EA95 dec r30
9851 56b2 01F4 brne 1b
9852 56b4 821B sub r24,r18
9853 56b6 930B sbc r25,r19
9854 56b8 A40B sbc r26,r20
9855 56ba B50B sbc r27,r21
9856 56bc 8E0D add r24,r14
9857 56be 9F1D adc r25,r15
9858 56c0 A01F adc r26,r16
9859 56c2 B11F adc r27,r17
9860 .L913:
9861 56c4 8093 0000 sts HoverGasFilter.23,r24
9862 56c8 9093 0000 sts (HoverGasFilter.23)+1,r25
9863 56cc A093 0000 sts (HoverGasFilter.23)+2,r26
9864 56d0 B093 0000 sts (HoverGasFilter.23)+3,r27
9865 .L796:
9866 56d4 8091 0000 lds r24,HoverGasFilter.23
9867 56d8 9091 0000 lds r25,(HoverGasFilter.23)+1
9868 56dc A091 0000 lds r26,(HoverGasFilter.23)+2
9869 56e0 B091 0000 lds r27,(HoverGasFilter.23)+3
9870 56e4 7EE0 ldi r23,14
9871 56e6 B695 1: lsr r27
9872 56e8 A795 ror r26
9873 56ea 9795 ror r25
9874 56ec 8795 ror r24
9875 56ee 7A95 dec r23
9876 56f0 01F4 brne 1b
9877 56f2 9093 0000 sts (HoverGas)+1,r25
9878 56f6 8093 0000 sts HoverGas,r24
9879 56fa 4091 0000 lds r20,EE_Parameter+20
9880 56fe 4423 tst r20
9881 5700 01F0 breq .L799
9882 5702 5527 clr r21
9883 5704 9C01 movw r18,r24
9884 5706 BA01 movw r22,r20
9885 5708 0E94 0000 call __divmodhi4
9886 570c C901 movw r24,r18
9887 570e 861B sub r24,r22
9888 5710 970B sbc r25,r23
9889 5712 9093 0000 sts (HoverGasMin)+1,r25
9890 5716 8093 0000 sts HoverGasMin,r24
9891 571a 260F add r18,r22
9892 571c 371F adc r19,r23
9893 571e 3093 0000 sts (HoverGasMax)+1,r19
9894 5722 2093 0000 sts HoverGasMax,r18
9895 5726 00C0 rjmp .L802
9896 .L799:
9897 5728 1092 0000 sts (HoverGasMin)+1,__zero_reg__
9898 572c 1092 0000 sts HoverGasMin,__zero_reg__
9899 5730 8FEF ldi r24,lo8(1023)
9900 5732 93E0 ldi r25,hi8(1023)
9901 5734 9093 0000 sts (HoverGasMax)+1,r25
9902 5738 8093 0000 sts HoverGasMax,r24
9903 573c 00C0 rjmp .L802
9904 .L789:
9905 573e 1092 0000 sts StartTrigger,__zero_reg__
9906 5742 1092 0000 sts HoverGasFilter.23,__zero_reg__
9907 5746 1092 0000 sts (HoverGasFilter.23)+1,__zero_reg__
9908 574a 1092 0000 sts (HoverGasFilter.23)+2,__zero_reg__
9909 574e 1092 0000 sts (HoverGasFilter.23)+3,__zero_reg__
9910 5752 3093 0000 sts (HoverGas)+1,r19
9911 5756 2093 0000 sts HoverGas,r18
9912 575a 00C0 rjmp .L802
9913 .L653:
9914 575c 8091 0000 lds r24,FC_StatusFlags
9915 5760 806C ori r24,lo8(-64)
9916 5762 8093 0000 sts FC_StatusFlags,r24
9917 .L802:
9918 5766 8091 0000 lds r24,NC_To_FC_Flags
9919 576a 81FF sbrs r24,1
9920 576c 00C0 rjmp .L803
9921 576e 8981 ldd r24,Y+1
9922 5770 9A81 ldd r25,Y+2
9923 5772 97FD sbrc r25,7
9924 5774 0396 adiw r24,3
9925 .L805:
9926 5776 9595 asr r25
9927 5778 8795 ror r24
9928 577a 9595 asr r25
9929 577c 8795 ror r24
9930 577e 2091 0000 lds r18,HooverGasEmergencyPercent
9931 5782 3091 0000 lds r19,(HooverGasEmergencyPercent)+1
9932 5786 2817 cp r18,r24
9933 5788 3907 cpc r19,r25
9934 578a 00F4 brsh .L804
9935 578c 8091 0000 lds r24,HoverGas
9936 5790 9091 0000 lds r25,(HoverGas)+1
9937 5794 892B or r24,r25
9938 5796 01F0 breq .L804
9939 5798 220F lsl r18
9940 579a 331F rol r19
9941 579c 220F lsl r18
9942 579e 331F rol r19
9943 57a0 3A83 std Y+2,r19
9944 57a2 2983 std Y+1,r18
9945 .L804:
9946 57a4 8091 0000 lds r24,HoehenWert
9947 57a8 9091 0000 lds r25,(HoehenWert)+1
9948 57ac A091 0000 lds r26,(HoehenWert)+2
9949 57b0 B091 0000 lds r27,(HoehenWert)+3
9950 57b4 8093 0000 sts SollHoehe,r24
9951 57b8 9093 0000 sts (SollHoehe)+1,r25
9952 57bc A093 0000 sts (SollHoehe)+2,r26
9953 57c0 B093 0000 sts (SollHoehe)+3,r27
9954 57c4 88E9 ldi r24,lo8(15000)
9955 57c6 9AE3 ldi r25,hi8(15000)
9956 57c8 9093 0000 sts (beeptime)+1,r25
9957 57cc 8093 0000 sts beeptime,r24
9958 57d0 80E0 ldi r24,lo8(3584)
9959 57d2 9EE0 ldi r25,hi8(3584)
9960 57d4 9093 0000 sts (BeepMuster)+1,r25
9961 57d8 8093 0000 sts BeepMuster,r24
9962 .L803:
9963 57dc 2091 0000 lds r18,MIN_GAS
9964 57e0 822F mov r24,r18
9965 57e2 9927 clr r25
9966 57e4 880F lsl r24
9967 57e6 991F rol r25
9968 57e8 880F lsl r24
9969 57ea 991F rol r25
9970 57ec 8896 adiw r24,40
9971 57ee 6981 ldd r22,Y+1
9972 57f0 7A81 ldd r23,Y+2
9973 57f2 8617 cp r24,r22
9974 57f4 9707 cpc r25,r23
9975 57f6 04F0 brlt .L806
9976 57f8 9A83 std Y+2,r25
9977 57fa 8983 std Y+1,r24
9978 .L806:
9979 57fc 7091 0000 lds r23,MAX_GAS
9980 5800 7D8B std Y+21,r23
9981 5802 872F mov r24,r23
9982 5804 9927 clr r25
9983 5806 880F lsl r24
9984 5808 991F rol r25
9985 580a 880F lsl r24
9986 580c 991F rol r25
9987 580e 8055 subi r24,lo8(-(-80))
9988 5810 9040 sbci r25,hi8(-(-80))
9989 5812 A981 ldd r26,Y+1
9990 5814 BA81 ldd r27,Y+2
9991 5816 8A17 cp r24,r26
9992 5818 9B07 cpc r25,r27
9993 581a 04F4 brge .L807
9994 581c 9A83 std Y+2,r25
9995 581e 8983 std Y+1,r24
9996 .L807:
9997 5820 8091 0000 lds r24,MissingMotor
9998 5824 8823 tst r24
9999 5826 01F4 brne .L809
10000 5828 8091 0000 lds r24,Capacity+6
10001 582c 8F3F cpi r24,lo8(-1)
10002 582e 01F4 brne .L809
10003 5830 8091 0000 lds r24,NC_ErrorCode
10004 5834 8823 tst r24
10005 5836 01F0 breq .L808
10006 .L809:
10007 5838 8091 0000 lds r24,modell_fliegt
10008 583c 9091 0000 lds r25,(modell_fliegt)+1
10009 5840 0297 sbiw r24,2
10010 5842 C097 sbiw r24,48
10011 5844 00F4 brsh .L808
10012 5846 E981 ldd r30,Y+1
10013 5848 FA81 ldd r31,Y+2
10014 584a 1E16 cp __zero_reg__,r30
10015 584c 1F06 cpc __zero_reg__,r31
10016 584e 04F4 brge .L808
10017 5850 81E0 ldi r24,lo8(1)
10018 5852 90E0 ldi r25,hi8(1)
10019 5854 9093 0000 sts (modell_fliegt)+1,r25
10020 5858 8093 0000 sts modell_fliegt,r24
10021 585c E22E mov r14,r18
10022 585e FF24 clr r15
10023 5860 EE0C lsl r14
10024 5862 FF1C rol r15
10025 5864 EE0C lsl r14
10026 5866 FF1C rol r15
10027 5868 8701 movw r16,r14
10028 586a 085D subi r16,lo8(-(40))
10029 586c 1F4F sbci r17,hi8(-(40))
10030 586e 1A83 std Y+2,r17
10031 5870 0983 std Y+1,r16
10032 .L808:
10033 5872 2981 ldd r18,Y+1
10034 5874 3A81 ldd r19,Y+2
10035 5876 3093 0000 sts (DebugOut+16)+1,r19
10036 587a 2093 0000 sts DebugOut+16,r18
10037 587e 8091 0000 lds r24,sollGier.0
10038 5882 9091 0000 lds r25,(sollGier.0)+1
10039 5886 A091 0000 lds r26,(sollGier.0)+2
10040 588a B091 0000 lds r27,(sollGier.0)+3
10041 588e 12E0 ldi r17,2
10042 5890 880F 1: lsl r24
10043 5892 991F rol r25
10044 5894 AA1F rol r26
10045 5896 BB1F rol r27
10046 5898 1A95 dec r17
10047 589a 01F4 brne 1b
10048 589c 0091 0000 lds r16,MesswertGier
10049 58a0 1091 0000 lds r17,(MesswertGier)+1
10050 58a4 081B sub r16,r24
10051 58a6 190B sbc r17,r25
10052 58a8 213A cpi r18,161
10053 58aa 3105 cpc r19,__zero_reg__
10054 58ac 04F0 brlt .L811
10055 58ae C901 movw r24,r18
10056 58b0 37FD sbrc r19,7
10057 58b2 0196 adiw r24,1
10058 .L813:
10059 58b4 9595 asr r25
10060 58b6 8795 ror r24
10061 58b8 8017 cp r24,r16
10062 58ba 9107 cpc r25,r17
10063 58bc 04F4 brge .L812
10064 58be 8C01 movw r16,r24
10065 .L812:
10066 58c0 9095 com r25
10067 58c2 8195 neg r24
10068 58c4 9F4F sbci r25,lo8(-1)
10069 58c6 0817 cp r16,r24
10070 58c8 1907 cpc r17,r25
10071 58ca 04F4 brge .L818
10072 58cc 8C01 movw r16,r24
10073 58ce 00C0 rjmp .L818
10074 .L811:
10075 58d0 0135 cpi r16,81
10076 58d2 1105 cpc r17,__zero_reg__
10077 58d4 04F0 brlt .L819
10078 58d6 00E5 ldi r16,lo8(80)
10079 58d8 10E0 ldi r17,hi8(80)
10080 .L819:
10081 58da 3FEF ldi r19,hi8(-80)
10082 58dc 003B cpi r16,lo8(-80)
10083 58de 1307 cpc r17,r19
10084 58e0 04F4 brge .L818
10085 58e2 00EB ldi r16,lo8(-80)
10086 58e4 1FEF ldi r17,hi8(-80)
10087 .L818:
10088 58e6 4D89 ldd r20,Y+21
10089 58e8 242F mov r18,r20
10090 58ea 3327 clr r19
10091 58ec 220F lsl r18
10092 58ee 331F rol r19
10093 58f0 220F lsl r18
10094 58f2 331F rol r19
10095 58f4 C901 movw r24,r18
10096 58f6 6981 ldd r22,Y+1
10097 58f8 7A81 ldd r23,Y+2
10098 58fa 861B sub r24,r22
10099 58fc 970B sbc r25,r23
10100 58fe 8017 cp r24,r16
10101 5900 9107 cpc r25,r17
10102 5902 04F4 brge .L821
10103 5904 8C01 movw r16,r24
10104 .L821:
10105 5906 8981 ldd r24,Y+1
10106 5908 9A81 ldd r25,Y+2
10107 590a 821B sub r24,r18
10108 590c 930B sbc r25,r19
10109 590e 0817 cp r16,r24
10110 5910 1907 cpc r17,r25
10111 5912 04F4 brge .L822
10112 5914 8C01 movw r16,r24
10113 .L822:
10114 5916 8091 0000 lds r24,MesswertNick
10115 591a 9091 0000 lds r25,(MesswertNick)+1
10116 591e 6091 0000 lds r22,StickNick
10117 5922 7091 0000 lds r23,(StickNick)+1
10118 5926 861B sub r24,r22
10119 5928 970B sbc r25,r23
10120 592a 9093 0000 sts (DiffNick)+1,r25
10121 592e 8093 0000 sts DiffNick,r24
10122 5932 D090 0000 lds r13,IntegralFaktor
10123 5936 2091 0000 lds r18,SummeNick
10124 593a 3091 0000 lds r19,(SummeNick)+1
10125 593e 4091 0000 lds r20,(SummeNick)+2
10126 5942 5091 0000 lds r21,(SummeNick)+3
10127 5946 DD20 tst r13
10128 5948 01F0 breq .L823
10129 594a 661A sub r6,r22
10130 594c 770A sbc r7,r23
10131 594e C301 movw r24,r6
10132 5950 AA27 clr r26
10133 5952 97FD sbrc r25,7
10134 5954 A095 com r26
10135 5956 BA2F mov r27,r26
10136 5958 00C0 rjmp .L914
10137 .L823:
10138 595a AA27 clr r26
10139 595c 97FD sbrc r25,7
10140 595e A095 com r26
10141 5960 BA2F mov r27,r26
10142 .L914:
10143 5962 280F add r18,r24
10144 5964 391F adc r19,r25
10145 5966 4A1F adc r20,r26
10146 5968 5B1F adc r21,r27
10147 596a 2093 0000 sts SummeNick,r18
10148 596e 3093 0000 sts (SummeNick)+1,r19
10149 5972 4093 0000 sts (SummeNick)+2,r20
10150 5976 5093 0000 sts (SummeNick)+3,r21
10151 597a 8091 0000 lds r24,SummeNick
10152 597e 9091 0000 lds r25,(SummeNick)+1
10153 5982 A091 0000 lds r26,(SummeNick)+2
10154 5986 B091 0000 lds r27,(SummeNick)+3
10155 598a 8150 subi r24,lo8(64001)
10156 598c 9A4F sbci r25,hi8(64001)
10157 598e A040 sbci r26,hlo8(64001)
10158 5990 B040 sbci r27,hhi8(64001)
10159 5992 04F0 brlt .L825
10160 5994 80E0 ldi r24,lo8(64000)
10161 5996 9AEF ldi r25,hi8(64000)
10162 5998 A0E0 ldi r26,hlo8(64000)
10163 599a B0E0 ldi r27,hhi8(64000)
10164 599c 8093 0000 sts SummeNick,r24
10165 59a0 9093 0000 sts (SummeNick)+1,r25
10166 59a4 A093 0000 sts (SummeNick)+2,r26
10167 59a8 B093 0000 sts (SummeNick)+3,r27
10168 .L825:
10169 59ac 8091 0000 lds r24,SummeNick
10170 59b0 9091 0000 lds r25,(SummeNick)+1
10171 59b4 A091 0000 lds r26,(SummeNick)+2
10172 59b8 B091 0000 lds r27,(SummeNick)+3
10173 59bc 8050 subi r24,lo8(-64000)
10174 59be 9640 sbci r25,hi8(-64000)
10175 59c0 AF4F sbci r26,hlo8(-64000)
10176 59c2 BF4F sbci r27,hhi8(-64000)
10177 59c4 04F4 brge .L826
10178 59c6 80E0 ldi r24,lo8(-64000)
10179 59c8 96E0 ldi r25,hi8(-64000)
10180 59ca AFEF ldi r26,hlo8(-64000)
10181 59cc BFEF ldi r27,hhi8(-64000)
10182 59ce 8093 0000 sts SummeNick,r24
10183 59d2 9093 0000 sts (SummeNick)+1,r25
10184 59d6 A093 0000 sts (SummeNick)+2,r26
10185 59da B093 0000 sts (SummeNick)+3,r27
10186 .L826:
10187 59de C090 0000 lds r12,EE_Parameter+35
10188 59e2 2091 0000 lds r18,DiffNick
10189 59e6 3091 0000 lds r19,(DiffNick)+1
10190 59ea 78E0 ldi r23,lo8(8)
10191 59ec E72E mov r14,r23
10192 59ee EC14 cp r14,r12
10193 59f0 00F0 brlo .L827
10194 59f2 8C2D mov r24,r12
10195 59f4 9927 clr r25
10196 59f6 829F mul r24,r18
10197 59f8 A001 movw r20,r0
10198 59fa 839F mul r24,r19
10199 59fc 500D add r21,r0
10200 59fe 929F mul r25,r18
10201 5a00 500D add r21,r0
10202 5a02 1124 clr r1
10203 5a04 CA01 movw r24,r20
10204 5a06 57FD sbrc r21,7
10205 5a08 0796 adiw r24,7
10206 .L828:
10207 5a0a 7C01 movw r14,r24
10208 5a0c 63E0 ldi r22,3
10209 5a0e F594 1: asr r15
10210 5a10 E794 ror r14
10211 5a12 6A95 dec r22
10212 5a14 01F4 brne 1b
10213 5a16 00C0 rjmp .L829
10214 .L827:
10215 5a18 8C2D mov r24,r12
10216 5a1a 8695 lsr r24
10217 5a1c 9927 clr r25
10218 5a1e 829F mul r24,r18
10219 5a20 B001 movw r22,r0
10220 5a22 839F mul r24,r19
10221 5a24 700D add r23,r0
10222 5a26 929F mul r25,r18
10223 5a28 700D add r23,r0
10224 5a2a 1124 clr r1
10225 5a2c CB01 movw r24,r22
10226 5a2e 77FD sbrc r23,7
10227 5a30 0396 adiw r24,3
10228 .L830:
10229 5a32 7C01 movw r14,r24
10230 5a34 F594 asr r15
10231 5a36 E794 ror r14
10232 5a38 F594 asr r15
10233 5a3a E794 ror r14
10234 .L829:
10235 5a3c A090 0000 lds r10,Ki
10236 5a40 B090 0000 lds r11,(Ki)+1
10237 5a44 9501 movw r18,r10
10238 5a46 4427 clr r20
10239 5a48 37FD sbrc r19,7
10240 5a4a 4095 com r20
10241 5a4c 542F mov r21,r20
10242 5a4e 8091 0000 lds r24,SummeNick
10243 5a52 9091 0000 lds r25,(SummeNick)+1
10244 5a56 A091 0000 lds r26,(SummeNick)+2
10245 5a5a B091 0000 lds r27,(SummeNick)+3
10246 5a5e BC01 movw r22,r24
10247 5a60 CD01 movw r24,r26
10248 5a62 0E94 0000 call __divmodsi4
10249 5a66 E20E add r14,r18
10250 5a68 F31E adc r15,r19
10251 5a6a 9090 0000 lds r9,Parameter_DynamicStability
10252 5a6e 692D mov r22,r9
10253 5a70 7727 clr r23
10254 5a72 8827 clr r24
10255 5a74 9927 clr r25
10256 5a76 9801 movw r18,r16
10257 5a78 17FF sbrs r17,7
10258 5a7a 00C0 rjmp .L831
10259 5a7c 2227 clr r18
10260 5a7e 3327 clr r19
10261 5a80 201B sub r18,r16
10262 5a82 310B sbc r19,r17
10263 .L831:
10264 5a84 37FF sbrs r19,7
10265 5a86 00C0 rjmp .L832
10266 5a88 2F5F subi r18,lo8(-(1))
10267 5a8a 3F4F sbci r19,hi8(-(1))
10268 .L832:
10269 5a8c 3595 asr r19
10270 5a8e 2795 ror r18
10271 5a90 A981 ldd r26,Y+1
10272 5a92 BA81 ldd r27,Y+2
10273 5a94 2A0F add r18,r26
10274 5a96 3B1F adc r19,r27
10275 5a98 4427 clr r20
10276 5a9a 37FD sbrc r19,7
10277 5a9c 4095 com r20
10278 5a9e 542F mov r21,r20
10279 5aa0 0E94 0000 call __mulsi3
10280 5aa4 97FF sbrs r25,7
10281 5aa6 00C0 rjmp .L833
10282 5aa8 615C subi r22,lo8(-(63))
10283 5aaa 7F4F sbci r23,hi8(-(63))
10284 5aac 8F4F sbci r24,hlo8(-(63))
10285 5aae 9F4F sbci r25,hhi8(-(63))
10286 .L833:
10287 5ab0 26E0 ldi r18,6
10288 5ab2 9595 1: asr r25
10289 5ab4 8795 ror r24
10290 5ab6 7795 ror r23
10291 5ab8 6795 ror r22
10292 5aba 2A95 dec r18
10293 5abc 01F4 brne 1b
10294 5abe 9B01 movw r18,r22
10295 5ac0 6E15 cp r22,r14
10296 5ac2 7F05 cpc r23,r15
10297 5ac4 04F4 brge .L834
10298 5ac6 7B01 movw r14,r22
10299 .L834:
10300 5ac8 3095 com r19
10301 5aca 2195 neg r18
10302 5acc 3F4F sbci r19,lo8(-1)
10303 5ace E216 cp r14,r18
10304 5ad0 F306 cpc r15,r19
10305 5ad2 04F4 brge .L835
10306 5ad4 7901 movw r14,r18
10307 .L835:
10308 5ad6 8091 0000 lds r24,MesswertRoll
10309 5ada 9091 0000 lds r25,(MesswertRoll)+1
10310 5ade 6091 0000 lds r22,StickRoll
10311 5ae2 7091 0000 lds r23,(StickRoll)+1
10312 5ae6 861B sub r24,r22
10313 5ae8 970B sbc r25,r23
10314 5aea 9093 0000 sts (DiffRoll)+1,r25
10315 5aee 8093 0000 sts DiffRoll,r24
10316 5af2 2091 0000 lds r18,SummeRoll
10317 5af6 3091 0000 lds r19,(SummeRoll)+1
10318 5afa 4091 0000 lds r20,(SummeRoll)+2
10319 5afe 5091 0000 lds r21,(SummeRoll)+3
10320 5b02 DD20 tst r13
10321 5b04 01F0 breq .L836
10322 5b06 461A sub r4,r22
10323 5b08 570A sbc r5,r23
10324 5b0a C201 movw r24,r4
10325 5b0c AA27 clr r26
10326 5b0e 97FD sbrc r25,7
10327 5b10 A095 com r26
10328 5b12 BA2F mov r27,r26
10329 5b14 00C0 rjmp .L915
10330 .L836:
10331 5b16 AA27 clr r26
10332 5b18 97FD sbrc r25,7
10333 5b1a A095 com r26
10334 5b1c BA2F mov r27,r26
10335 .L915:
10336 5b1e 280F add r18,r24
10337 5b20 391F adc r19,r25
10338 5b22 4A1F adc r20,r26
10339 5b24 5B1F adc r21,r27
10340 5b26 2093 0000 sts SummeRoll,r18
10341 5b2a 3093 0000 sts (SummeRoll)+1,r19
10342 5b2e 4093 0000 sts (SummeRoll)+2,r20
10343 5b32 5093 0000 sts (SummeRoll)+3,r21
10344 5b36 8091 0000 lds r24,SummeRoll
10345 5b3a 9091 0000 lds r25,(SummeRoll)+1
10346 5b3e A091 0000 lds r26,(SummeRoll)+2
10347 5b42 B091 0000 lds r27,(SummeRoll)+3
10348 5b46 8150 subi r24,lo8(64001)
10349 5b48 9A4F sbci r25,hi8(64001)
10350 5b4a A040 sbci r26,hlo8(64001)
10351 5b4c B040 sbci r27,hhi8(64001)
10352 5b4e 04F0 brlt .L838
10353 5b50 80E0 ldi r24,lo8(64000)
10354 5b52 9AEF ldi r25,hi8(64000)
10355 5b54 A0E0 ldi r26,hlo8(64000)
10356 5b56 B0E0 ldi r27,hhi8(64000)
10357 5b58 8093 0000 sts SummeRoll,r24
10358 5b5c 9093 0000 sts (SummeRoll)+1,r25
10359 5b60 A093 0000 sts (SummeRoll)+2,r26
10360 5b64 B093 0000 sts (SummeRoll)+3,r27
10361 .L838:
10362 5b68 8091 0000 lds r24,SummeRoll
10363 5b6c 9091 0000 lds r25,(SummeRoll)+1
10364 5b70 A091 0000 lds r26,(SummeRoll)+2
10365 5b74 B091 0000 lds r27,(SummeRoll)+3
10366 5b78 8050 subi r24,lo8(-64000)
10367 5b7a 9640 sbci r25,hi8(-64000)
10368 5b7c AF4F sbci r26,hlo8(-64000)
10369 5b7e BF4F sbci r27,hhi8(-64000)
10370 5b80 04F4 brge .L839
10371 5b82 80E0 ldi r24,lo8(-64000)
10372 5b84 96E0 ldi r25,hi8(-64000)
10373 5b86 AFEF ldi r26,hlo8(-64000)
10374 5b88 BFEF ldi r27,hhi8(-64000)
10375 5b8a 8093 0000 sts SummeRoll,r24
10376 5b8e 9093 0000 sts (SummeRoll)+1,r25
10377 5b92 A093 0000 sts (SummeRoll)+2,r26
10378 5b96 B093 0000 sts (SummeRoll)+3,r27
10379 .L839:
10380 5b9a 2091 0000 lds r18,DiffRoll
10381 5b9e 3091 0000 lds r19,(DiffRoll)+1
10382 5ba2 48E0 ldi r20,lo8(8)
10383 5ba4 4C15 cp r20,r12
10384 5ba6 00F0 brlo .L840
10385 5ba8 8C2D mov r24,r12
10386 5baa 9927 clr r25
10387 5bac 829F mul r24,r18
10388 5bae B001 movw r22,r0
10389 5bb0 839F mul r24,r19
10390 5bb2 700D add r23,r0
10391 5bb4 929F mul r25,r18
10392 5bb6 700D add r23,r0
10393 5bb8 1124 clr r1
10394 5bba CB01 movw r24,r22
10395 5bbc 77FD sbrc r23,7
10396 5bbe 0796 adiw r24,7
10397 .L841:
10398 5bc0 6C01 movw r12,r24
10399 5bc2 B3E0 ldi r27,3
10400 5bc4 D594 1: asr r13
10401 5bc6 C794 ror r12
10402 5bc8 BA95 dec r27
10403 5bca 01F4 brne 1b
10404 5bcc 00C0 rjmp .L842
10405 .L840:
10406 5bce C694 lsr r12
10407 5bd0 8C2D mov r24,r12
10408 5bd2 9927 clr r25
10409 5bd4 829F mul r24,r18
10410 5bd6 D001 movw r26,r0
10411 5bd8 839F mul r24,r19
10412 5bda B00D add r27,r0
10413 5bdc 929F mul r25,r18
10414 5bde B00D add r27,r0
10415 5be0 1124 clr r1
10416 5be2 CD01 movw r24,r26
10417 5be4 B7FD sbrc r27,7
10418 5be6 0396 adiw r24,3
10419 .L843:
10420 5be8 6C01 movw r12,r24
10421 5bea D594 asr r13
10422 5bec C794 ror r12
10423 5bee D594 asr r13
10424 5bf0 C794 ror r12
10425 .L842:
10426 5bf2 9501 movw r18,r10
10427 5bf4 4427 clr r20
10428 5bf6 37FD sbrc r19,7
10429 5bf8 4095 com r20
10430 5bfa 542F mov r21,r20
10431 5bfc 8091 0000 lds r24,SummeRoll
10432 5c00 9091 0000 lds r25,(SummeRoll)+1
10433 5c04 A091 0000 lds r26,(SummeRoll)+2
10434 5c08 B091 0000 lds r27,(SummeRoll)+3
10435 5c0c BC01 movw r22,r24
10436 5c0e CD01 movw r24,r26
10437 5c10 0E94 0000 call __divmodsi4
10438 5c14 C20E add r12,r18
10439 5c16 D31E adc r13,r19
10440 5c18 692D mov r22,r9
10441 5c1a 7727 clr r23
10442 5c1c 8827 clr r24
10443 5c1e 9927 clr r25
10444 5c20 9801 movw r18,r16
10445 5c22 17FF sbrs r17,7
10446 5c24 00C0 rjmp .L844
10447 5c26 2227 clr r18
10448 5c28 3327 clr r19
10449 5c2a 201B sub r18,r16
10450 5c2c 310B sbc r19,r17
10451 .L844:
10452 5c2e 37FF sbrs r19,7
10453 5c30 00C0 rjmp .L845
10454 5c32 2F5F subi r18,lo8(-(1))
10455 5c34 3F4F sbci r19,hi8(-(1))
10456 .L845:
10457 5c36 3595 asr r19
10458 5c38 2795 ror r18
10459 5c3a E981 ldd r30,Y+1
10460 5c3c FA81 ldd r31,Y+2
10461 5c3e 2E0F add r18,r30
10462 5c40 3F1F adc r19,r31
10463 5c42 4427 clr r20
10464 5c44 37FD sbrc r19,7
10465 5c46 4095 com r20
10466 5c48 542F mov r21,r20
10467 5c4a 0E94 0000 call __mulsi3
10468 5c4e 97FF sbrs r25,7
10469 5c50 00C0 rjmp .L846
10470 5c52 615C subi r22,lo8(-(63))
10471 5c54 7F4F sbci r23,hi8(-(63))
10472 5c56 8F4F sbci r24,hlo8(-(63))
10473 5c58 9F4F sbci r25,hhi8(-(63))
10474 .L846:
10475 5c5a E6E0 ldi r30,6
10476 5c5c 9595 1: asr r25
10477 5c5e 8795 ror r24
10478 5c60 7795 ror r23
10479 5c62 6795 ror r22
10480 5c64 EA95 dec r30
10481 5c66 01F4 brne 1b
10482 5c68 9B01 movw r18,r22
10483 5c6a 6C15 cp r22,r12
10484 5c6c 7D05 cpc r23,r13
10485 5c6e 04F4 brge .L847
10486 5c70 6B01 movw r12,r22
10487 .L847:
10488 5c72 3095 com r19
10489 5c74 2195 neg r18
10490 5c76 3F4F sbci r19,lo8(-1)
10491 5c78 C216 cp r12,r18
10492 5c7a D306 cpc r13,r19
10493 5c7c 04F4 brge .L848
10494 5c7e 6901 movw r12,r18
10495 .L848:
10496 5c80 8091 0000 lds r24,MIN_GAS
10497 5c84 282E mov r2,r24
10498 5c86 3324 clr r3
10499 5c88 5090 0000 lds r5,EE_Parameter+101
10500 5c8c 60E0 ldi r22,lo8(Motor)
10501 5c8e 862E mov r8,r22
10502 5c90 60E0 ldi r22,hi8(Motor)
10503 5c92 962E mov r9,r22
10504 5c94 50E0 ldi r21,lo8(Mixer+13)
10505 5c96 A52E mov r10,r21
10506 5c98 50E0 ldi r21,hi8(Mixer+13)
10507 5c9a B52E mov r11,r21
10508 5c9c 4BE0 ldi r20,lo8(11)
10509 5c9e 442E mov r4,r20
10510 5ca0 30E0 ldi r19,lo8(tmp_motorwert)
10511 5ca2 632E mov r6,r19
10512 5ca4 30E0 ldi r19,hi8(tmp_motorwert)
10513 5ca6 732E mov r7,r19
10514 .L883:
10515 5ca8 D501 movw r26,r10
10516 5caa 2C91 ld r18,X
10517 5cac 1216 cp __zero_reg__,r18
10518 5cae 04F0 brlt .+2
10519 5cb0 00C0 rjmp .L852
10520 5cb2 2034 cpi r18,lo8(64)
10521 5cb4 01F4 brne .L853
10522 5cb6 E981 ldd r30,Y+1
10523 5cb8 FA81 ldd r31,Y+2
10524 5cba FF8B std Y+23,r31
10525 5cbc EE8B std Y+22,r30
10526 5cbe 00C0 rjmp .L854
10527 .L853:
10528 5cc0 4981 ldd r20,Y+1
10529 5cc2 5A81 ldd r21,Y+2
10530 5cc4 CA01 movw r24,r20
10531 5cc6 AA27 clr r26
10532 5cc8 97FD sbrc r25,7
10533 5cca A095 com r26
10534 5ccc BA2F mov r27,r26
10535 5cce 3327 clr r19
10536 5cd0 27FD sbrc r18,7
10537 5cd2 3095 com r19
10538 5cd4 432F mov r20,r19
10539 5cd6 532F mov r21,r19
10540 5cd8 BC01 movw r22,r24
10541 5cda CD01 movw r24,r26
10542 5cdc 0E94 0000 call __mulsi3
10543 5ce0 97FF sbrs r25,7
10544 5ce2 00C0 rjmp .L855
10545 5ce4 615C subi r22,lo8(-(63))
10546 5ce6 7F4F sbci r23,hi8(-(63))
10547 5ce8 8F4F sbci r24,hlo8(-(63))
10548 5cea 9F4F sbci r25,hhi8(-(63))
10549 .L855:
10550 5cec 26E0 ldi r18,6
10551 5cee 9595 1: asr r25
10552 5cf0 8795 ror r24
10553 5cf2 7795 ror r23
10554 5cf4 6795 ror r22
10555 5cf6 2A95 dec r18
10556 5cf8 01F4 brne 1b
10557 5cfa 7F8B std Y+23,r23
10558 5cfc 6E8B std Y+22,r22
10559 .L854:
10560 5cfe F501 movw r30,r10
10561 5d00 2181 ldd r18,Z+1
10562 5d02 2034 cpi r18,lo8(64)
10563 5d04 01F4 brne .L856
10564 5d06 2E89 ldd r18,Y+22
10565 5d08 3F89 ldd r19,Y+23
10566 5d0a 2E0D add r18,r14
10567 5d0c 3F1D adc r19,r15
10568 5d0e 3F8B std Y+23,r19
10569 5d10 2E8B std Y+22,r18
10570 5d12 00C0 rjmp .L857
10571 .L856:
10572 5d14 203C cpi r18,lo8(-64)
10573 5d16 01F4 brne .L858
10574 5d18 4E89 ldd r20,Y+22
10575 5d1a 5F89 ldd r21,Y+23
10576 5d1c 4E19 sub r20,r14
10577 5d1e 5F09 sbc r21,r15
10578 5d20 5F8B std Y+23,r21
10579 5d22 4E8B std Y+22,r20
10580 5d24 00C0 rjmp .L857
10581 .L858:
10582 5d26 C701 movw r24,r14
10583 5d28 AA27 clr r26
10584 5d2a 97FD sbrc r25,7
10585 5d2c A095 com r26
10586 5d2e BA2F mov r27,r26
10587 5d30 3327 clr r19
10588 5d32 27FD sbrc r18,7
10589 5d34 3095 com r19
10590 5d36 432F mov r20,r19
10591 5d38 532F mov r21,r19
10592 5d3a BC01 movw r22,r24
10593 5d3c CD01 movw r24,r26
10594 5d3e 0E94 0000 call __mulsi3
10595 5d42 97FF sbrs r25,7
10596 5d44 00C0 rjmp .L860
10597 5d46 615C subi r22,lo8(-(63))
10598 5d48 7F4F sbci r23,hi8(-(63))
10599 5d4a 8F4F sbci r24,hlo8(-(63))
10600 5d4c 9F4F sbci r25,hhi8(-(63))
10601 .L860:
10602 5d4e B6E0 ldi r27,6
10603 5d50 9595 1: asr r25
10604 5d52 8795 ror r24
10605 5d54 7795 ror r23
10606 5d56 6795 ror r22
10607 5d58 BA95 dec r27
10608 5d5a 01F4 brne 1b
10609 5d5c AE89 ldd r26,Y+22
10610 5d5e BF89 ldd r27,Y+23
10611 5d60 A60F add r26,r22
10612 5d62 B71F adc r27,r23
10613 5d64 BF8B std Y+23,r27
10614 5d66 AE8B std Y+22,r26
10615 .L857:
10616 5d68 F501 movw r30,r10
10617 5d6a 2281 ldd r18,Z+2
10618 5d6c 2034 cpi r18,lo8(64)
10619 5d6e 01F4 brne .L861
10620 5d70 2E89 ldd r18,Y+22
10621 5d72 3F89 ldd r19,Y+23
10622 5d74 2C0D add r18,r12
10623 5d76 3D1D adc r19,r13
10624 5d78 3F8B std Y+23,r19
10625 5d7a 2E8B std Y+22,r18
10626 5d7c 00C0 rjmp .L862
10627 .L861:
10628 5d7e 203C cpi r18,lo8(-64)
10629 5d80 01F4 brne .L863
10630 5d82 4E89 ldd r20,Y+22
10631 5d84 5F89 ldd r21,Y+23
10632 5d86 4C19 sub r20,r12
10633 5d88 5D09 sbc r21,r13
10634 5d8a 5F8B std Y+23,r21
10635 5d8c 4E8B std Y+22,r20
10636 5d8e 00C0 rjmp .L862
10637 .L863:
10638 5d90 C601 movw r24,r12
10639 5d92 AA27 clr r26
10640 5d94 97FD sbrc r25,7
10641 5d96 A095 com r26
10642 5d98 BA2F mov r27,r26
10643 5d9a 3327 clr r19
10644 5d9c 27FD sbrc r18,7
10645 5d9e 3095 com r19
10646 5da0 432F mov r20,r19
10647 5da2 532F mov r21,r19
10648 5da4 BC01 movw r22,r24
10649 5da6 CD01 movw r24,r26
10650 5da8 0E94 0000 call __mulsi3
10651 5dac 97FF sbrs r25,7
10652 5dae 00C0 rjmp .L865
10653 5db0 615C subi r22,lo8(-(63))
10654 5db2 7F4F sbci r23,hi8(-(63))
10655 5db4 8F4F sbci r24,hlo8(-(63))
10656 5db6 9F4F sbci r25,hhi8(-(63))
10657 .L865:
10658 5db8 A6E0 ldi r26,6
10659 5dba 9595 1: asr r25
10660 5dbc 8795 ror r24
10661 5dbe 7795 ror r23
10662 5dc0 6795 ror r22
10663 5dc2 AA95 dec r26
10664 5dc4 01F4 brne 1b
10665 5dc6 AE89 ldd r26,Y+22
10666 5dc8 BF89 ldd r27,Y+23
10667 5dca A60F add r26,r22
10668 5dcc B71F adc r27,r23
10669 5dce BF8B std Y+23,r27
10670 5dd0 AE8B std Y+22,r26
10671 .L862:
10672 5dd2 F501 movw r30,r10
10673 5dd4 2381 ldd r18,Z+3
10674 5dd6 2034 cpi r18,lo8(64)
10675 5dd8 01F4 brne .L866
10676 5dda 2E89 ldd r18,Y+22
10677 5ddc 3F89 ldd r19,Y+23
10678 5dde 200F add r18,r16
10679 5de0 311F adc r19,r17
10680 5de2 3F8B std Y+23,r19
10681 5de4 2E8B std Y+22,r18
10682 5de6 00C0 rjmp .L867
10683 .L866:
10684 5de8 203C cpi r18,lo8(-64)
10685 5dea 01F4 brne .L868
10686 5dec 4E89 ldd r20,Y+22
10687 5dee 5F89 ldd r21,Y+23
10688 5df0 401B sub r20,r16
10689 5df2 510B sbc r21,r17
10690 5df4 5F8B std Y+23,r21
10691 5df6 4E8B std Y+22,r20
10692 5df8 00C0 rjmp .L867
10693 .L868:
10694 5dfa C801 movw r24,r16
10695 5dfc AA27 clr r26
10696 5dfe 97FD sbrc r25,7
10697 5e00 A095 com r26
10698 5e02 BA2F mov r27,r26
10699 5e04 3327 clr r19
10700 5e06 27FD sbrc r18,7
10701 5e08 3095 com r19
10702 5e0a 432F mov r20,r19
10703 5e0c 532F mov r21,r19
10704 5e0e BC01 movw r22,r24
10705 5e10 CD01 movw r24,r26
10706 5e12 0E94 0000 call __mulsi3
10707 5e16 97FF sbrs r25,7
10708 5e18 00C0 rjmp .L870
10709 5e1a 615C subi r22,lo8(-(63))
10710 5e1c 7F4F sbci r23,hi8(-(63))
10711 5e1e 8F4F sbci r24,hlo8(-(63))
10712 5e20 9F4F sbci r25,hhi8(-(63))
10713 .L870:
10714 5e22 F6E0 ldi r31,6
10715 5e24 9595 1: asr r25
10716 5e26 8795 ror r24
10717 5e28 7795 ror r23
10718 5e2a 6795 ror r22
10719 5e2c FA95 dec r31
10720 5e2e 01F4 brne 1b
10721 5e30 AE89 ldd r26,Y+22
10722 5e32 BF89 ldd r27,Y+23
10723 5e34 A60F add r26,r22
10724 5e36 B71F adc r27,r23
10725 5e38 BF8B std Y+23,r27
10726 5e3a AE8B std Y+22,r26
10727 .L867:
10728 5e3c F301 movw r30,r6
10729 5e3e 8081 ld r24,Z
10730 5e40 9181 ldd r25,Z+1
10731 5e42 2E89 ldd r18,Y+22
10732 5e44 3F89 ldd r19,Y+23
10733 5e46 8217 cp r24,r18
10734 5e48 9307 cpc r25,r19
10735 5e4a 04F4 brge .L871
10736 5e4c B901 movw r22,r18
10737 5e4e 680F add r22,r24
10738 5e50 791F adc r23,r25
10739 5e52 77FF sbrs r23,7
10740 5e54 00C0 rjmp .L872
10741 5e56 6F5F subi r22,lo8(-(1))
10742 5e58 7F4F sbci r23,hi8(-(1))
10743 .L872:
10744 5e5a 7595 asr r23
10745 5e5c 6795 ror r22
10746 5e5e 7F8B std Y+23,r23
10747 5e60 6E8B std Y+22,r22
10748 5e62 00C0 rjmp .L873
10749 .L871:
10750 5e64 5520 tst r5
10751 5e66 01F4 brne .L874
10752 5e68 4E89 ldd r20,Y+22
10753 5e6a 5F89 ldd r21,Y+23
10754 5e6c 440F add r20,r20
10755 5e6e 551F adc r21,r21
10756 5e70 481B sub r20,r24
10757 5e72 590B sbc r21,r25
10758 5e74 5F8B std Y+23,r21
10759 5e76 4E8B std Y+22,r20
10760 5e78 00C0 rjmp .L873
10761 .L874:
10762 5e7a 51E0 ldi r21,lo8(1)
10763 5e7c 5515 cp r21,r5
10764 5e7e 00F4 brsh .L873
10765 5e80 252D mov r18,r5
10766 5e82 3327 clr r19
10767 5e84 6E89 ldd r22,Y+22
10768 5e86 7F89 ldd r23,Y+23
10769 5e88 861B sub r24,r22
10770 5e8a 970B sbc r25,r23
10771 5e8c B901 movw r22,r18
10772 5e8e 0E94 0000 call __divmodhi4
10773 5e92 AE89 ldd r26,Y+22
10774 5e94 BF89 ldd r27,Y+23
10775 5e96 A60F add r26,r22
10776 5e98 B71F adc r27,r23
10777 5e9a BF8B std Y+23,r27
10778 5e9c AE8B std Y+22,r26
10779 .L873:
10780 5e9e C101 movw r24,r2
10781 5ea0 880F lsl r24
10782 5ea2 991F rol r25
10783 5ea4 880F lsl r24
10784 5ea6 991F rol r25
10785 5ea8 EE89 ldd r30,Y+22
10786 5eaa FF89 ldd r31,Y+23
10787 5eac 8E17 cp r24,r30
10788 5eae 9F07 cpc r25,r31
10789 5eb0 04F4 brge .L916
10790 5eb2 FD89 ldd r31,Y+21
10791 5eb4 8F2F mov r24,r31
10792 5eb6 9927 clr r25
10793 5eb8 880F lsl r24
10794 5eba 991F rol r25
10795 5ebc 880F lsl r24
10796 5ebe 991F rol r25
10797 5ec0 2E89 ldd r18,Y+22
10798 5ec2 3F89 ldd r19,Y+23
10799 5ec4 2817 cp r18,r24
10800 5ec6 3907 cpc r19,r25
10801 5ec8 04F0 brlt .L878
10802 .L916:
10803 5eca 9F8B std Y+23,r25
10804 5ecc 8E8B std Y+22,r24
10805 .L878:
10806 5ece 8E89 ldd r24,Y+22
10807 5ed0 9F89 ldd r25,Y+23
10808 5ed2 97FD sbrc r25,7
10809 5ed4 0396 adiw r24,3
10810 .L880:
10811 5ed6 9595 asr r25
10812 5ed8 8795 ror r24
10813 5eda 9595 asr r25
10814 5edc 8795 ror r24
10815 5ede F401 movw r30,r8
10816 5ee0 8183 std Z+1,r24
10817 5ee2 880F lsl r24
10818 5ee4 991F rol r25
10819 5ee6 880F lsl r24
10820 5ee8 991F rol r25
10821 5eea 2E89 ldd r18,Y+22
10822 5eec 3F89 ldd r19,Y+23
10823 5eee 281B sub r18,r24
10824 5ef0 390B sbc r19,r25
10825 5ef2 C901 movw r24,r18
10826 5ef4 880F lsl r24
10827 5ef6 8283 std Z+2,r24
10828 5ef8 EE89 ldd r30,Y+22
10829 5efa FF89 ldd r31,Y+23
10830 5efc D301 movw r26,r6
10831 5efe ED93 st X+,r30
10832 5f00 FC93 st X,r31
10833 5f02 00C0 rjmp .L851
10834 .L852:
10835 5f04 F401 movw r30,r8
10836 5f06 1182 std Z+1,__zero_reg__
10837 5f08 1282 std Z+2,__zero_reg__
10838 .L851:
10839 5f0a 4A94 dec r4
10840 5f0c 22E0 ldi r18,lo8(2)
10841 5f0e 30E0 ldi r19,hi8(2)
10842 5f10 620E add r6,r18
10843 5f12 731E adc r7,r19
10844 5f14 44E0 ldi r20,lo8(4)
10845 5f16 50E0 ldi r21,hi8(4)
10846 5f18 A40E add r10,r20
10847 5f1a B51E adc r11,r21
10848 5f1c 68E0 ldi r22,lo8(8)
10849 5f1e 70E0 ldi r23,hi8(8)
10850 5f20 860E add r8,r22
10851 5f22 971E adc r9,r23
10852 5f24 47FE sbrs r4,7
10853 5f26 00C0 rjmp .L883
10854 /* epilogue: frame size=23 */
10855 5f28 E2E1 ldi r30,18
10856 5f2a C95E subi r28,-23
10857 5f2c 0C94 0000 jmp __epilogue_restores__+0
10858 /* epilogue end (size=4) */
10859 /* function MotorRegler size 8305 (8295) */
10861 .comm TrimNick,2,1
10862 .comm TrimRoll,2,1
10863 .comm ErsatzKompass,4,1
10864 .comm ErsatzKompassInGrad,2,1
10865 .comm MesswertNick,2,1
10866 .comm MesswertRoll,2,1
10867 .comm MesswertGier,2,1
10868 .comm Mittelwert_AccNick,2,1
10869 .comm Mittelwert_AccRoll,2,1
10870 .comm NaviAccNick,2,1
10871 .comm NaviAccRoll,2,1
10872 .comm h,1,1
10873 .comm m,1,1
10874 .comm s,1,1
10875 .comm DiffNick,2,1
10876 .comm DiffRoll,2,1
10877 .comm Parameter_Servo3,1,1
10878 .comm Parameter_Servo4,1,1
10879 .comm Parameter_Servo5,1,1
10880 .comm Parameter_J16Bitmask,1,1
10881 .comm Parameter_J16Timing,1,1
10882 .comm Parameter_J17Bitmask,1,1
10883 .comm Parameter_J17Timing,1,1
10884 .comm Parameter_GlobalConfig,1,1
10885 .comm Parameter_ExtraConfig,1,1
10886 .comm MesswertGierBias,2,1
10887 .comm RohMesswertNick,2,1
10888 .comm RohMesswertRoll,2,1
10889 .comm MittelIntegralNick,4,1
10890 .comm MittelIntegralRoll,4,1
10891 .comm MittelIntegralNick2,4,1
10892 .comm MittelIntegralRoll2,4,1
10893 .comm MAX_GAS,1,1
10894 .comm MIN_GAS,1,1
10895 .comm GyroFaktor,1,1
10896 .comm GyroFaktorGier,1,1
10897 .comm IntegralFaktor,1,1
10898 .comm IntegralFaktorGier,1,1
10899 .comm Parameter_NaviGpsModeControl,1,1
10900 .comm Parameter_NaviGpsGain,1,1
10901 .comm Parameter_NaviGpsP,1,1
10902 .comm Parameter_NaviGpsI,1,1
10903 .comm Parameter_NaviGpsD,1,1
10904 .comm Parameter_NaviGpsACC,1,1
10905 .comm Parameter_NaviOperatingRadius,1,1
10906 .comm Parameter_NaviWindCorrection,1,1
10907 .comm Parameter_NaviSpeedCompensation,1,1
10908 .comm Parameter_ExternalControl,1,1
10909 .comm Parameter_MaximumAltitude,1,1
10910 .comm KopplungsteilNickRoll,2,1
10911 .comm KopplungsteilRollNick,2,1
10912 .comm tmp_motorwert,24,1
10913 /* File "fc.c": code 12351 = 0x303f (12290), prologues 31, epilogues 30 */
DEFINED SYMBOLS
*ABS*:00000000 fc.c
C:\Temp/ccqfRHGa.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccqfRHGa.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccqfRHGa.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccqfRHGa.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccqfRHGa.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccqfRHGa.s:15 .bss:00000000 GasIsZeroCnt
C:\Temp/ccqfRHGa.s:21 .bss:00000002 HooverGasEmergencyPercent
C:\Temp/ccqfRHGa.s:27 .data:00000000 VarioCharacter
C:\Temp/ccqfRHGa.s:32 .data:00000001 GIER_GRAD_FAKTOR
C:\Temp/ccqfRHGa.s:39 .bss:00000004 FC_StatusFlags2
C:\Temp/ccqfRHGa.s:45 .bss:00000005 FC_StatusFlags
C:\Temp/ccqfRHGa.s:51 .bss:00000006 modell_fliegt
C:\Temp/ccqfRHGa.s:57 .bss:00000008 MaxStickRoll
C:\Temp/ccqfRHGa.s:63 .bss:0000000a MaxStickNick
C:\Temp/ccqfRHGa.s:69 .data:00000005 ExternHoehenValue
C:\Temp/ccqfRHGa.s:76 .bss:0000000c ExternStickGier
C:\Temp/ccqfRHGa.s:82 .bss:0000000e ExternStickRoll
C:\Temp/ccqfRHGa.s:88 .bss:00000010 ExternStickNick
C:\Temp/ccqfRHGa.s:94 .data:00000007 sintab
C:\Temp/ccqfRHGa.s:131 .bss:00000012 CareFree
C:\Temp/ccqfRHGa.s:137 .data:00000026 Parameter_DynamicStability
C:\Temp/ccqfRHGa.s:142 .data:00000027 Parameter_CouplingYawCorrection
C:\Temp/ccqfRHGa.s:147 .data:00000028 Parameter_AchsKopplung2
C:\Temp/ccqfRHGa.s:152 .data:00000029 Parameter_AchsKopplung1
C:\Temp/ccqfRHGa.s:157 .data:0000002a Parameter_LoopGasLimit
C:\Temp/ccqfRHGa.s:162 .data:0000002b Parameter_ServoRollControl
C:\Temp/ccqfRHGa.s:167 .data:0000002c Parameter_ServoNickControl
C:\Temp/ccqfRHGa.s:174 .bss:00000013 Parameter_UserParam8
C:\Temp/ccqfRHGa.s:180 .bss:00000014 Parameter_UserParam7
C:\Temp/ccqfRHGa.s:186 .bss:00000015 Parameter_UserParam6
C:\Temp/ccqfRHGa.s:192 .bss:00000016 Parameter_UserParam5
C:\Temp/ccqfRHGa.s:198 .bss:00000017 Parameter_UserParam4
C:\Temp/ccqfRHGa.s:204 .bss:00000018 Parameter_UserParam3
C:\Temp/ccqfRHGa.s:210 .bss:00000019 Parameter_UserParam2
C:\Temp/ccqfRHGa.s:216 .bss:0000001a Parameter_UserParam1
C:\Temp/ccqfRHGa.s:222 .data:0000002d Parameter_I_Faktor
C:\Temp/ccqfRHGa.s:227 .data:0000002e Parameter_Gier_P
C:\Temp/ccqfRHGa.s:232 .data:0000002f Parameter_Gyro_Gier_I
C:\Temp/ccqfRHGa.s:237 .data:00000030 Parameter_Gyro_Gier_P
C:\Temp/ccqfRHGa.s:242 .data:00000031 Parameter_Gyro_I
C:\Temp/ccqfRHGa.s:247 .data:00000032 Parameter_Gyro_P
C:\Temp/ccqfRHGa.s:252 .data:00000033 Parameter_Gyro_D
C:\Temp/ccqfRHGa.s:257 .data:00000034 Parameter_Hoehe_GPS_Z
C:\Temp/ccqfRHGa.s:262 .data:00000035 Parameter_KompassWirkung
C:\Temp/ccqfRHGa.s:267 .data:00000036 Parameter_Hoehe_ACC_Wirkung
C:\Temp/ccqfRHGa.s:272 .data:00000037 Parameter_Hoehe_P
C:\Temp/ccqfRHGa.s:277 .data:00000038 Parameter_HoehenSchalter
C:\Temp/ccqfRHGa.s:282 .data:00000039 Parameter_Luftdruck_D
C:\Temp/ccqfRHGa.s:289 .bss:0000001b Looping_Oben
C:\Temp/ccqfRHGa.s:295 .bss:0000001c Looping_Unten
C:\Temp/ccqfRHGa.s:301 .bss:0000001d Looping_Rechts
C:\Temp/ccqfRHGa.s:307 .bss:0000001e Looping_Links
C:\Temp/ccqfRHGa.s:313 .bss:0000001f Looping_Roll
C:\Temp/ccqfRHGa.s:319 .bss:00000020 Looping_Nick
C:\Temp/ccqfRHGa.s:325 .data:0000003a Ki
C:\Temp/ccqfRHGa.s:332 .bss:00000021 HoverGas
C:\Temp/ccqfRHGa.s:338 .bss:00000023 LageKorrekturNick
C:\Temp/ccqfRHGa.s:344 .bss:00000025 LageKorrekturRoll
C:\Temp/ccqfRHGa.s:350 .bss:00000027 NeueKompassRichtungMerken
C:\Temp/ccqfRHGa.s:356 .bss:00000028 CalibrationDone
C:\Temp/ccqfRHGa.s:362 .bss:00000029 CompassGierSetpoint
C:\Temp/ccqfRHGa.s:368 .bss:0000002b WaypointTrimming
C:\Temp/ccqfRHGa.s:374 .data:0000003c carefree_old
C:\Temp/ccqfRHGa.s:381 .bss:0000002c FromNC_AltitudeSpeed
C:\Temp/ccqfRHGa.s:387 .bss:0000002d FromNC_AltitudeSetpoint
C:\Temp/ccqfRHGa.s:393 .bss:00000031 AltitudeSetpointTrimming
C:\Temp/ccqfRHGa.s:399 .bss:00000033 SollHoehe
C:\Temp/ccqfRHGa.s:405 .bss:00000037 HoehenWert
C:\Temp/ccqfRHGa.s:411 .bss:0000003b StartTrigger
C:\Temp/ccqfRHGa.s:417 .bss:0000003c MotorenEin
C:\Temp/ccqfRHGa.s:423 .bss:0000003d SenderOkay
C:\Temp/ccqfRHGa.s:429 .bss:0000003e Poti
C:\Temp/ccqfRHGa.s:435 .bss:00000047 StickGas
C:\Temp/ccqfRHGa.s:441 .bss:00000049 StickGier
C:\Temp/ccqfRHGa.s:447 .bss:0000004b StickRoll
C:\Temp/ccqfRHGa.s:453 .bss:0000004d StickNick
C:\Temp/ccqfRHGa.s:459 .data:0000003d HoverGasMax
C:\Temp/ccqfRHGa.s:466 .bss:0000004f HoverGasMin
C:\Temp/ccqfRHGa.s:472 .data:0000003f StickGasHover
C:\Temp/ccqfRHGa.s:479 .bss:00000051 GierGyroFehler
C:\Temp/ccqfRHGa.s:485 .data:00000041 Umschlag180Roll
C:\Temp/ccqfRHGa.s:490 .data:00000045 Umschlag180Nick
C:\Temp/ccqfRHGa.s:497 .bss:00000053 TrichterFlug
C:\Temp/ccqfRHGa.s:503 .bss:00000054 HoehenReglerAktiv
C:\Temp/ccqfRHGa.s:509 .data:00000049 KompassSignalSchlecht
C:\Temp/ccqfRHGa.s:514 .data:0000004b KompassFusion
C:\Temp/ccqfRHGa.s:519 .data:0000004c CalculateCompassTimer
C:\Temp/ccqfRHGa.s:526 .bss:00000055 KompassSollWert
C:\Temp/ccqfRHGa.s:532 .data:0000004d KompassValue
C:\Temp/ccqfRHGa.s:539 .bss:00000057 Mess_Integral_Hoch
C:\Temp/ccqfRHGa.s:545 .bss:0000005b SummeRoll
C:\Temp/ccqfRHGa.s:551 .bss:0000005f SummeNick
C:\Temp/ccqfRHGa.s:557 .bss:00000063 Mess_Integral_Gier2
C:\Temp/ccqfRHGa.s:563 .bss:00000067 Mess_Integral_Gier
C:\Temp/ccqfRHGa.s:569 .bss:0000006b Mess_IntegralRoll2
C:\Temp/ccqfRHGa.s:575 .bss:0000006f Mess_IntegralRoll
C:\Temp/ccqfRHGa.s:581 .bss:00000073 Mess_IntegralNick2
C:\Temp/ccqfRHGa.s:587 .bss:00000077 Mess_IntegralNick
C:\Temp/ccqfRHGa.s:593 .bss:0000007b Integral_Gier
C:\Temp/ccqfRHGa.s:599 .bss:0000007f IntegralAccZ
C:\Temp/ccqfRHGa.s:605 .bss:00000083 IntegralAccRoll
C:\Temp/ccqfRHGa.s:611 .bss:00000087 IntegralAccNick
C:\Temp/ccqfRHGa.s:617 .bss:0000008b IntegralRoll2
C:\Temp/ccqfRHGa.s:623 .bss:0000008f IntegralRoll
C:\Temp/ccqfRHGa.s:629 .bss:00000093 IntegralNick2
C:\Temp/ccqfRHGa.s:635 .bss:00000097 IntegralNick
C:\Temp/ccqfRHGa.s:641 .bss:0000009b ControlHeading
C:\Temp/ccqfRHGa.s:647 .bss:0000009c NeutralAccZ
C:\Temp/ccqfRHGa.s:653 .bss:0000009e NaviCntAcc
C:\Temp/ccqfRHGa.s:659 .bss:000000a0 NeutralAccY
C:\Temp/ccqfRHGa.s:665 .bss:000000a2 NeutralAccX
C:\Temp/ccqfRHGa.s:671 .bss:000000a4 StartNeutralNick
C:\Temp/ccqfRHGa.s:677 .bss:000000a6 StartNeutralRoll
C:\Temp/ccqfRHGa.s:683 .bss:000000a8 AdNeutralGier
C:\Temp/ccqfRHGa.s:689 .bss:000000aa AdNeutralRoll
C:\Temp/ccqfRHGa.s:695 .bss:000000ac AdNeutralNick
C:\Temp/ccqfRHGa.s:701 .bss:000000ae BaroExpandActive
C:\Temp/ccqfRHGa.s:706 .text:00000000 CopyDebugValues
*COM*:00000002 Mittelwert_AccNick
*COM*:00000002 Mittelwert_AccRoll
*COM*:00000002 ErsatzKompassInGrad
C:\Temp/ccqfRHGa.s:892 .text:0000022c Piep
C:\Temp/ccqfRHGa.s:966 .text:000002b2 CalibrierMittelwert
*COM*:00000002 MesswertNick
*COM*:00000002 MesswertRoll
*COM*:00000002 MesswertGier
C:\Temp/ccqfRHGa.s:1108 .progmem.data:00000000 __c.35
C:\Temp/ccqfRHGa.s:1113 .text:000003f4 SetNeutral
*COM*:00000004 ErsatzKompass
.bss:000000b0 tmpl.27
C:\Temp/ccqfRHGa.s:1621 .bss:000000b4 tmpl2.28
C:\Temp/ccqfRHGa.s:1622 .bss:000000b8 tmpl3.29
C:\Temp/ccqfRHGa.s:1623 .bss:000000bc tmpl4.30
C:\Temp/ccqfRHGa.s:1624 .bss:000000c0 oldNick.31
C:\Temp/ccqfRHGa.s:1625 .bss:000000c2 oldRoll.32
C:\Temp/ccqfRHGa.s:1626 .bss:000000c4 d2Roll.33
C:\Temp/ccqfRHGa.s:1627 .bss:000000c6 d2Nick.34
C:\Temp/ccqfRHGa.s:1631 .text:00000960 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/ccqfRHGa.s:3196 .text:000018c4 SendMotorData
C:\Temp/ccqfRHGa.s:3256 .text:0000193e 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/ccqfRHGa.s:1628 .bss:000000c8 sollGier.0
C:\Temp/ccqfRHGa.s:3975 .bss:000000cc tmp_long.1
C:\Temp/ccqfRHGa.s:3976 .bss:000000d0 tmp_long2.2
C:\Temp/ccqfRHGa.s:3977 .bss:000000d4 IntegralFehlerNick.3
C:\Temp/ccqfRHGa.s:3978 .bss:000000d8 IntegralFehlerRoll.4
C:\Temp/ccqfRHGa.s:3979 .bss:000000dc RcLostTimer.5
C:\Temp/ccqfRHGa.s:3980 .bss:000000de delay_neutral.6
C:\Temp/ccqfRHGa.s:3981 .bss:000000df delay_einschalten.7
C:\Temp/ccqfRHGa.s:3982 .bss:000000e0 delay_ausschalten.8
C:\Temp/ccqfRHGa.s:3983 .bss:000000e1 move_safety_switch.9
C:\Temp/ccqfRHGa.s:3984 .bss:000000e2 ausgleichNick.10
C:\Temp/ccqfRHGa.s:3985 .bss:000000e6 ausgleichRoll.11
C:\Temp/ccqfRHGa.s:3986 .bss:000000ea stick_nick.12
C:\Temp/ccqfRHGa.s:3987 .bss:000000ec stick_roll.13
C:\Temp/ccqfRHGa.s:3988 .bss:000000ee cnt.14
C:\Temp/ccqfRHGa.s:3989 .bss:000000f0 last_n_p.15
C:\Temp/ccqfRHGa.s:3990 .bss:000000f1 last_n_n.16
C:\Temp/ccqfRHGa.s:3991 .bss:000000f2 last_r_p.17
C:\Temp/ccqfRHGa.s:3992 .bss:000000f3 last_r_n.18
C:\Temp/ccqfRHGa.s:3993 .bss:000000f4 MittelIntegralNick_Alt.19
C:\Temp/ccqfRHGa.s:3994 .bss:000000f8 MittelIntegralRoll_Alt.20
C:\Temp/ccqfRHGa.s:3995 .bss:000000fc HeightTrimming.21
C:\Temp/ccqfRHGa.s:3996 .bss:000000fe FilterHCGas.22
C:\Temp/ccqfRHGa.s:3997 .bss:00000100 HoverGasFilter.23
C:\Temp/ccqfRHGa.s:4002 .data:0000004f delay.24
C:\Temp/ccqfRHGa.s:3998 .bss:00000104 BaroAtUpperLimit.25
C:\Temp/ccqfRHGa.s:4004 .bss:00000105 BaroAtLowerLimit.26
C:\Temp/ccqfRHGa.s:4009 .text:00001f42 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 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
ServoNickValue
Capacity
GPS_Nick
GPS_Roll
VersionInfo
PlatinenVersion
beeptime
UpdateMotor
LIBFC_Polling
SucheGyroOffset
AdWertNick
AdWertRoll
AdWertAccNick
AdWertAccRoll
PPM_in
__mulsi3
__prologue_saves__
ExpandBaro
Delay_ms_Mess
MessLuftdruck
SucheLuftruckOffset
__divmodhi4
Aktuell_az
SetParamWord
GetParamWord
uart_putchar
_printf_P
Luftdruck
StartLuftdruck
VarioMeter
LED_Init
FromNaviCtrl_Value
ServoActive
NickServoValue
LIBFC_HoTT_Clear
__epilogue_restores__
AdWertNickFilter
AdWertRollFilter
AdReady
HiResNick
HiResRoll
MotorTest
PC_MotortestActive
I2C_TransferActive
motor_write
twi_state
BLFlags
NC_To_FC_MaxAltitude
SpeakHoTT
FromNaviCtrl
BeepMuster
PPM_diff
SetActiveParamSet
WinkelOut
GetActiveParamSet
ParamSet_ReadFromEEProm
LipoDetection
LIBFC_ReceiverInit
NC_ErrorCode
GPSInfo
NewPpmData
FromNC_Rotate_C
FromNC_Rotate_S
GPS_Aid_StickMultiplikator
__floatsisf
__addsf3
__fixunssfsi
ExternControl
ZaehlMessungen
BattLowVoltageWarning
__udivmodhi4
DruckOffsetSetting
SummenHoehe
ihypot
c_cos_8192
__udivmodqi4
NC_To_FC_Flags
MissingMotor
Mixer
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/flight.pnproj
0,0 → 1,0
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="jeti.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="isqrt.S"></File><File path="Spektrum.c"></File><File path="Spektrum.h"></File><File path="eeprom.h"></File><File path="eeprom.c"></File><File path="libfc.h"></File><File path="debug.c"></File><File path="debug.h"></File></Project>
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/gps.h
0,0 → 1,3
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern unsigned char GPS_Aid_StickMultiplikator;
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/hottmenu.c
0,0 → 1,810
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "libfc.h"
#include "printf_P.h"
#include "main.h"
#include "spi.h"
#include "capacity.h"
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
#define HoTT_printf(format, args...) { _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);}
#define HoTT_printfxy(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);}
#define HoTT_printfxy_INV(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);}
#define HoTT_printfxy_BLINK(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);}
#define HoTT_printf_BLINK(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);}
#define HoTT_printf_INV(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);}
 
#define VOICE_MINIMALE_EINGANSSPANNUNG 16
#define VOICE_BEEP 5
#define HoTT_GRAD 96
#define HoTT_LINKS 123
#define HoTT_RECHTS 124
#define HoTT_OBEN 125
#define HoTT_UNTEN 126
 
#define HOTT_KEY_RIGHT 1
#define HOTT_KEY_DOWN 2
#define HOTT_KEY_UP 4
#define HOTT_KEY_SET 6
#define HOTT_KEY_LEFT 8
 
unsigned char NaviData_WaypointIndex = 0, NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0;
unsigned int NaviData_TargetDistance = 0;
 
GPSPacket_t GPSPacket;
VarioPacket_t VarioPacket;
ASCIIPacket_t ASCIIPacket;
ElectricAirPacket_t ElectricAirPacket;
HoTTGeneral_t HoTTGeneral;
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER;
unsigned char ToNC_SpeakHoTT = 0;
int HoTTVarioMeter = 0;
const char PROGMEM MIKROKOPTER[] = {" MikroKopter "};
const char PROGMEM UNDERVOLTAGE[] = {" !! LiPo voltage !! "};
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] =
{
//0123456789123456
"No Error \0", // 0
"Not compatible \0", // 1
"MK3Mag not compa\0", // 2
"No FC communicat\0", // 3
"Compass communic\0", // 4
"GPS communicatio\0", // 5
"compass value \0", // 6
"RC Signal lost \0", // 7
"FC spi rx error \0", // 8
"No NC communicat\0", // 9
"FC Nick Gyro \0", // 10
"FC Roll Gyro \0", // 11
"FC Yaw Gyro \0", // 12
"FC Nick ACC \0", // 13
"FC Roll ACC \0", // 14
"FC Z-ACC \0", // 15
"Pressure sensor \0", // 16
"I2C FC->BL-Ctrl \0", // 17
"Bl Missing \0", // 18
"Mixer Error \0", // 19
"Carefree Error \0", // 20
"GPS Fix lost \0", // 21
"Magnet Error \0", // 22
"Motor restart \0", // 23
"BL Limitation \0", // 24
"GPS Range \0", // 25
"No SD-Card \0", // 26
"SD-Logging error\0", // 27
"Flying range! \0", // 28
"Max Altitude! \0", // 29
"No GPS fix \0", // 30
"compass not cal.\0" // 31
};
 
 
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] =
{ // 1 -> only in flight 0 -> also on ground
//0123456789123456
{0,0},// "No Error \0", // 0
{SPEAK_ERROR,0},// "Not compatible \0", // 1
{SPEAK_ERROR,0},// "MK3Mag not compa\0", // 2
{SPEAK_ERR_NAVI,1},// "No FC communicat\0", // 3
{SPEAK_ERR_COMPASS,1},// "MK3Mag communica\0", // 4
{SPEAK_ERR_GPS,0},// "GPS communicatio\0", // 5
{SPEAK_ERR_COMPASS,1},// "compass value \0", // 6
{SPEAK_ERR_RECEICER,0},// "RC Signal lost \0", // 7
{SPEAK_ERR_NAVI,0},// "FC spi rx error \0", // 8
{SPEAK_ERR_NAVI,0},// "No NC communicat\0", // 9
{SPEAK_ERR_SENSOR,0},// "FC Nick Gyro \0", // 10
{SPEAK_ERR_SENSOR,0},// "FC Roll Gyro \0", // 11
{SPEAK_ERR_SENSOR,0},// "FC Yaw Gyro \0", // 12
{SPEAK_ERR_SENSOR,0},// "FC Nick ACC \0", // 13
{SPEAK_ERR_SENSOR,0},// "FC Roll ACC \0", // 14
{SPEAK_ERR_SENSOR,0},// "FC Z-ACC \0", // 15
{SPEAK_ERR_SENSOR,0},// "Pressure sensor \0", // 16
{SPEAK_ERR_DATABUS,1},// "I2C FC->BL-Ctrl \0", // 17
{SPEAK_ERR_DATABUS,1},// "Bl Missing \0", // 18
{SPEAK_ERROR,0},// "Mixer Error \0", // 19
{SPEAK_CF_OFF,1},// "Carefree Error \0", // 20
{SPEAK_GPS_FIX,1},// "GPS Fix lost \0", // 21
{SPEAK_ERR_COMPASS,0},// "Magnet Error \0", // 22
{SPEAK_ERR_MOTOR,1},// "Motor restart \0", // 23
{SPEAK_MAX_TEMPERAT,1},// "BL Limitation \0", // 24
{SPEAK_MAX_RANGE,1},// "GPS Range \0", // 25
{SPEAK_ERROR,1},// "No SD-Card \0", // 26
{SPEAK_ERROR,1},// "SD-Logging error\0", // 27
{SPEAK_MAX_RANGE,1},// "Flying range! \0", // 28
{SPEAK_MAX_ALTITUD,1},// "Max Altitude! \0" // 29
{SPEAK_GPS_FIX,1}// "no GPS Fix, // 30
};
 
 
unsigned char MaxBlTempertaure = 0;
unsigned char MinBlTempertaure = 0;
unsigned char HottestBl = 0;
 
void GetHottestBl(void)
{
static unsigned char search = 0,tmp_max,tmp_min,who;
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;}
else
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature;
if(++search > MAX_MOTORS)
{
search = 0;
if(tmp_min != 255) MinBlTempertaure = tmp_min; else MinBlTempertaure = 0;
MaxBlTempertaure = tmp_max;
HottestBl = who;
tmp_min = 255;
tmp_max = 0;
who = 0;
}
}
 
//---------------------------------------------------------------
void Hott_ClearLine(unsigned char line)
{
HoTT_printfxy(0,line," ");
}
//---------------------------------------------------------------
 
 
unsigned char HoTT_Waring(void)
{
unsigned char status = 0;
static char old_status = 0;
static int repeat;
//if(Parameter_UserParam1) return(Parameter_UserParam1);
ToNC_SpeakHoTT = SpeakHoTT;
if(FC_StatusFlags & FC_STATUS_LOWBAT) status = VOICE_MINIMALE_EINGANSSPANNUNG;
else
if(NC_ErrorCode) // Fehlercodes
{
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]);
}
if(!status) // Sprachansagen
{
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted?
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted?
else status = SpeakHoTT;
}
else ToNC_SpeakHoTT = status;
 
if(old_status == status) // Gleichen Fehler nur alle 5 sek bringen
{
if(!CheckDelay(repeat)) return(0);
repeat = SetDelay(5000);
}
else repeat = SetDelay(2000);
 
if(status)
{
if(status == SpeakHoTT) SpeakHoTT = 0;
}
old_status = status;
// DebugOut.Analog[16] = status;
return(status);
}
 
/*
unsigned char HoTTErrorCode(void)
{
return(NC_ErrorCode);
}
*/
//---------------------------------------------------------------
void NC_Fills_HoTT_Telemety(void)
{
unsigned char *ptr = NULL;
unsigned char max = 0,i,z;
switch(FromNaviCtrl.Param.Byte[11])
{
case HOTT_VARIO_PACKET_ID:
ptr = (unsigned char *) &VarioPacket;
max = sizeof(VarioPacket);
break;
case HOTT_GPS_PACKET_ID:
ptr = (unsigned char *) &GPSPacket;
max = sizeof(GPSPacket);
break;
case HOTT_ELECTRIC_AIR_PACKET_ID:
ptr = (unsigned char *) &ElectricAirPacket;
max = sizeof(ElectricAirPacket);
break;
case HOTT_GENERAL_PACKET_ID:
ptr = (unsigned char *) &HoTTGeneral;
max = sizeof(HoTTGeneral);
break;
}
z = FromNaviCtrl.Param.Byte[0]; // Data allocation
 
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++)
{
if(z >= max) break;
ptr[z] = FromNaviCtrl.Param.Byte[2+i];
z++;
}
}
 
unsigned int BuildHoTT_Vario(void)
{
unsigned int tmp = 30000;
if(VarioCharacter == '+' || VarioCharacter == '-')
{
tmp = 30000 + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3;
if(tmp < 30000 && tmp > 30000 - 50) tmp = 30000 - 50; // weil es sonst erst bei < 0,5m/sek piept
}
else
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
{
tmp = 30000 + HoTTVarioMeter;
if(tmp > 30000)
{
if(tmp < 30000 + 100) tmp = 30000;
else tmp -= 100;
}
if(tmp < 30000)
{
if(tmp > 30000 - 100) tmp = 30000;
else tmp += 100;
}
}
else
if(VarioCharacter == '^') tmp = 30000 + FromNC_AltitudeSpeed * 10;
else
if(VarioCharacter == 'v') tmp = 30000 - FromNC_AltitudeSpeed * 10;
 
return(tmp);
}
 
//---------------------------------------------------------------
unsigned char HoTT_Telemety(unsigned char packet_request)
{
unsigned char i;
//Debug("rqst: %02X",packet_request);
 
switch(packet_request)
{
case HOTT_VARIO_PACKET_ID:
VarioPacket.Altitude = HoehenWert/100 + 500;
VarioPacket.m_sec = BuildHoTT_Vario();
VarioPacket.m_3sec = VarioPacket.m_sec;
VarioPacket.m_10sec = VarioPacket.m_sec;
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude;
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude;
VarioPacket.WarnBeep = 0;//HoTT_Waring();
HoTT_DataPointer = (unsigned char *) &VarioPacket;
VarioPacket.FreeCharacters[0] = VarioCharacter;
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' ';
// VarioPacket.FreeCharacters[2] = ' ';
if(NC_ErrorCode)
{
VarioPacket.Text[0] = NC_ErrorCode/10 + '0';
VarioPacket.Text[1] = NC_ErrorCode%10 + '0';
VarioPacket.Text[2] = ':';
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]);
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error
else
if(NaviData_WaypointNumber)
{
unsigned int tmp_int;
unsigned char tmp;
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P';
VarioPacket.Text[2] = ' ';
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10;
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10;
VarioPacket.Text[5] = '/';
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10;
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10;
VarioPacket.Text[8] = ' ';
tmp_int = NaviData_TargetDistance;
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;}
else VarioPacket.Text[9] = ' ';
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;}
else VarioPacket.Text[10] = ' ';
VarioPacket.Text[11] = '0'+(tmp_int) / 10;
VarioPacket.Text[12] = '0'+(tmp_int) % 10;
VarioPacket.Text[13] = 'm';
VarioPacket.Text[14] = ' ';
tmp = NaviData_TargetHoldTime;
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' ';
VarioPacket.Text[16] = '0'+(tmp) / 10;
VarioPacket.Text[17] = '0'+(tmp) % 10;
VarioPacket.Text[18] = 's';
VarioPacket.Text[19] = ' ';
//unsigned char NaviData_WaypointIndex = 0, NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0;
//unsigned int NaviData_TargetDistance = 0;
}
else
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
return(sizeof(VarioPacket));
break;
 
case HOTT_GPS_PACKET_ID:
GPSPacket.Altitude = HoehenWert/100 + 500;
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC
GPSPacket.m_sec = BuildHoTT_Vario();
GPSPacket.m_3sec = 120;
GPSPacket.NumOfSats = GPSInfo.NumOfSats;
GPSPacket.WarnBeep = HoTT_Waring();
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D';
else
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' ';
else GPSPacket.SatFix = '!';
HoTT_DataPointer = (unsigned char *) &GPSPacket;
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter;
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix;
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230;
return(sizeof(GPSPacket));
break;
case HOTT_ELECTRIC_AIR_PACKET_ID:
GetHottestBl();
ElectricAirPacket.Altitude = HoehenWert/100 + 500;
ElectricAirPacket.Battery1 = UBat;
ElectricAirPacket.Battery2 = UBat;
ElectricAirPacket.VoltageCell1 = ErsatzKompassInGrad / 2;
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1;
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2;
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20;
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6;
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7;
ElectricAirPacket.m_sec = BuildHoTT_Vario();
ElectricAirPacket.m_3sec = 120;
ElectricAirPacket.InputVoltage = UBat;
ElectricAirPacket.Temperature1 = MinBlTempertaure + 20;
ElectricAirPacket.Temperature2 = MaxBlTempertaure + 20;
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10;
ElectricAirPacket.WarnBeep = 0;//HoTT_Waring();
ElectricAirPacket.Current = Capacity.ActualCurrent;
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket;
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60;
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60;
return(sizeof(ElectricAirPacket));
break;
case HOTT_GENERAL_PACKET_ID:
GetHottestBl();
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100;
HoTTGeneral.VoltageCell1 = ErsatzKompassInGrad / 2;
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2;
if(UBat > BattLowVoltageWarning + 5) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 6)) * 3;
else HoTTGeneral.FuelPercent = 0;
HoTTGeneral.FuelCapacity = HoehenWert/100;
if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0;
HoTTGeneral.Altitude = HoehenWert/100 + 500;
HoTTGeneral.Battery1 = UBat;
HoTTGeneral.Battery2 = UBat;
HoTTGeneral.m_sec = BuildHoTT_Vario();
HoTTGeneral.m_3sec = 120;
HoTTGeneral.InputVoltage = UBat;
HoTTGeneral.Temperature1 = MinBlTempertaure + 20;
HoTTGeneral.Temperature2 = MaxBlTempertaure + 20;
HoTTGeneral.Capacity = Capacity.UsedCapacity/10;
HoTTGeneral.WarnBeep = 0;//HoTT_Waring();
HoTTGeneral.Current = Capacity.ActualCurrent;
//HoTTGeneral.ErrorNumber = HoTTErrorCode();
HoTT_DataPointer = (unsigned char *) &HoTTGeneral;
return(sizeof(HoTTGeneral));
break;
default: return(0);
}
}
 
//---------------------------------------------------------------
void HoTT_Menu(void)
{
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0;
unsigned char tmp;
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8;
if(page == 0)
switch(line++)
{
case 0:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10)
else
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10)
 
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter)
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100))
}
else HoTT_printfxy(10,0,"ALT:---- ");
break;
case 1:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60)
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60);
HoTT_printfxy(10,1,"DIR: %3d%c",ErsatzKompassInGrad, HoTT_GRAD);
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," ");
break;
case 2:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity)
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity);
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
break;
case 3:
HoTT_printfxy(9,0,":");
HoTT_printfxy(9,1,":");
HoTT_printfxy(9,2,":");
HoTT_printfxy(0,3,"---------+-----------");
 
// HoTT_printfxy(0,3,"---------------------");
HoTT_printfxy(0,6,"---------------------");
break;
case 4:
if(NaviDataOkay)
{
HoTT_printfxy(9,4,":");
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats);
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10);
switch (GPSInfo.SatFix)
{
case SATFIX_3D:
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ")
else HoTT_printfxy(7,4,"3D");
break;
default:
HoTT_printfxy_BLINK(7,4,"!!");
break;
}
}
else
{
Hott_ClearLine(4);
}
break;
case 5:
if(NaviDataOkay)
{
if(show_mag)
{
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField);
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic);
}
else
{
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
}
}
else Hott_ClearLine(5);
break;
case 6:
break;
case 7: if(NC_ErrorCode)
{
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER)
{
Hott_ClearLine(7);
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode);
}
else
{
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!")
else HoTT_printfxy(0,7," www.MikroKopter.de ");
break;
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring();
// ASCIIPacket.WarnBeep = Parameter_UserParam1;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;}
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;};
HottKeyboard = 0;
break;
default: line = 0;
break;
}
else
if(page == 1)
switch(line++)
{
case 0:
if(FC_StatusFlags & FC_STATUS_LOWBAT)
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity)
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity);
break;
case 1:
HoTT_printfxy(0,1,"DIR:%3d%c",KompassValue, HoTT_GRAD);
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100))
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100))
}
else HoTT_printfxy(10,1,"ALT:---- ");
HoTT_printfxy(20,1,"%c",VarioCharacter);
break;
case 2:
if(NaviDataOkay)
{
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter);
}
else
{
Hott_ClearLine(2);
}
break;
case 3:
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower);
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," ");
break;
case 4:
if(NaviDataOkay)
{
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats);
switch (GPSInfo.SatFix)
{
case SATFIX_3D:
HoTT_printfxy(16,4," 3D ");
break;
//case SATFIX_2D:
//case SATFIX_NONE:
default:
HoTT_printfxy_BLINK(16,4,"NOFIX");
break;
}
if(GPSInfo.Flags & FLAG_DIFFSOLN)
{
HoTT_printfxy(16,4,"DGPS ");
}
}
else
{ //012345678901234567890
HoTT_printfxy(0,4," No NaviCtrl ");
}
break;
case 5:
if(show_current)
{
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10);
}
else
{
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD);
}
break;
case 6:
if(show_current)
{
if(RequiredMotors == 4) Hott_ClearLine(6);
else
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10)
else
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10);
}
else
{
if(RequiredMotors == 4) Hott_ClearLine(6);
else
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD)
else
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD);
}
break;
case 7: if(NC_ErrorCode)
{
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER)
{
Hott_ClearLine(7);
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode);
}
else
{
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
}
else
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!")
else HoTT_printfxy(0,7," www.MikroKopter.de ");
break;
case 8: // ASCIIPacket.WarnBeep = HoTT_Waring();
// ASCIIPacket.WarnBeep = Parameter_UserParam1;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);}
else
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;}
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard);
HottKeyboard = 0;
break;
default: line = 0;
break;
}
else
if(page == 2)
switch(line++)
{
case 0:
HoTT_printfxy_INV(0,0,"Setting:%u %s ",GetActiveParamSet(),EE_Parameter.Name);
break;
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name);
break;
case 2: HoTT_printfxy(0,2,"ALT:");
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter)
else
{
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) ");
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter)
else HoTT_printf("VARIO", Parameter_HoehenSchalter);
}
}
else
HoTT_printf("DISABLED");
break;
case 3: HoTT_printfxy(0,3,"CF:");
if(!EE_Parameter.CareFreeModeControl) HoTT_printf("DISABLED")
else
{
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)");
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH");
}
break;
case 4: HoTT_printfxy(0,4,"GPS:");
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED")
else
{
CHK_POTI(tmp,EE_Parameter.NaviGpsModeControl);
if(tmp < 50) HoTT_printf("(FREE)")
else
if(tmp >= 180) HoTT_printf("(HOME)")
else
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ")
else HoTT_printf("(HOLD)")
}
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime)
 
break;
case 5: HoTT_printfxy(0,5,"HOME ALT:");
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD ");
break;
case 6:
if(!show_poti)
{
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl);
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
}
else
{
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3);
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6);
}
break;
case 7: //HoTT_printfxy(0,6,"WARNINGS:");
if(HoTTBlink)
{
LIBFC_HoTT_SetPos(6 * 21);
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! ");
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! ");
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! ");
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! ");
}
break;
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring();
break;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);}
// else
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;}
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;};
HottKeyboard = 0;
break;
default: line = 0;
break;
}
/* else
if(page == 3)
switch(line++)
{
case 0:
HoTT_printfxy(0,2,"Speak:");
break;
case 1:
// if(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)
if(!(GlobalConfig3 & CFG3_SPEAK_ALL) & 0x01)) HoTT_printfxy_INV(7,2,"All Messages ")
else HoTT_printfxy_INV(7,2,"Warnings only");
break;
case 2:
HoTT_printfxy(1,4,"Use (set) to select");
break;
default:
if(HottKeyboard == HOTT_KEY_SET)
{
SetParamByte(PID_SPEAK_HOTT_CFG, GetParamByte(PID_SPEAK_HOTT_CFG) ^ 0x01);
}
else
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;};
HottKeyboard = 0;
line = 0;
break;
}
*/
else page = 0;
}
 
#endif
 
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/hottmenu.h
0,0 → 1,230
#ifndef _HOTTMENU_H
#define _HOTTMENU_H
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
#define SPEAK_ERR_CALIBARTION 1
#define SPEAK_ERR_RECEICER 2
#define SPEAK_ERR_DATABUS 3
#define SPEAK_ERR_NAVI 4
#define SPEAK_ERROR 5
#define SPEAK_ERR_COMPASS 6
#define SPEAK_ERR_SENSOR 7
#define SPEAK_ERR_GPS 8
#define SPEAK_ERR_MOTOR 9
#define SPEAK_MAX_TEMPERAT 10
#define SPEAK_ALTI_REACHED 11
#define SPEAK_WP_REACHED 12
#define SPEAK_NEXT_WP 13
#define SPEAK_LANDING 14
#define SPEAK_GPS_FIX 15
#define SPEAK_UNDERVOLTAGE 16
#define SPEAK_GPS_HOLD 17
#define SPEAK_GPS_HOME 18
#define SPEAK_GPS_OFF 19
#define SPEAK_BEEP 20
#define SPEAK_MIKROKOPTER 21
#define SPEAK_CAPACITY 22
#define SPEAK_CF_OFF 23
#define SPEAK_CALIBRATE 24
#define SPEAK_MAX_RANGE 25
#define SPEAK_MAX_ALTITUD 26
 
#define SPEAK_MK_OFF 38
#define SPEAK_ALTITUDE_ON 39
#define SPEAK_ALTITUDE_OFF 40
#define SPEAK_CF_ON 46
#define SPEAK_SINKING 47
#define SPEAK_RISING 48
#define SPEAK_HOLDING 49
#define SPEAK_GPS_ON 50
#define SPEAK_FOLLWING 51
#define SPEAK_STARTING 52
 
#define MAX_ERR_NUMBER (31+1)
extern const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17];
extern unsigned char NaviData_WaypointIndex, NaviData_WaypointNumber, NaviData_TargetHoldTime;
extern unsigned int NaviData_TargetDistance;
 
extern unsigned char HottKeyboard,HoTT_RequestedSensor;
extern unsigned char HottUpdate(unsigned char key);
extern unsigned char SpeakHoTT;
extern unsigned char ToNC_SpeakHoTT;
extern volatile unsigned char *HoTT_DataPointer;
extern unsigned char MaxBlTempertaure;
 
extern void CreateHoTT_Menu(void);
extern void LIBFC_HoTT_Putchar(char);
extern void LIBFC_HoTT_Putchar_INV(char); // print Invers
extern void LIBFC_HoTT_Putchar_BLINK(char);
extern void LIBFC_HoTT_SetPos(unsigned char);
extern void LIBFC_HoTT_Clear(void);
extern void NC_Fills_HoTT_Telemety(void);
extern void HoTT_Menu(void);
extern unsigned char HoTT_Telemety(unsigned char);
extern unsigned char HoTT_Waring(void);
extern volatile unsigned char HoTTBlink;
extern void GetHottestBl(void);
 
typedef struct
{
unsigned char StartByte; // 0x7C
unsigned char Packet_ID; // HOTT_GENERAL_PACKET_ID
unsigned char WarnBeep; // 3 Anzahl der Töne 0..36
unsigned char SensorID; // 4 0xD0
unsigned char InverseStatus1; // 5
unsigned char InverseStatus2; // 6
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert)
unsigned char VoltageCell2; // 8 209 = 4,18V
unsigned char VoltageCell3; // 9
unsigned char VoltageCell4; // 10
unsigned char VoltageCell5; // 11
unsigned char VoltageCell6; // 12
unsigned int Battery1; // 13+14 51 = 5,1V
unsigned int Battery2; // 15+16 51 = 5,1V
unsigned char Temperature1; // 17 44 = 24°C, 0 = -20°C
unsigned char Temperature2; // 18 44 = 24°C, 0 = -20°C
unsigned char FuelPercent; // 19
signed int FuelCapacity; // 20+21
unsigned int Rpm; // 22+23
signed int Altitude; // 24+25
unsigned int m_sec; // 26+27 3000 = 0
unsigned char m_3sec; // 28 120 = 0
unsigned int Current; // 29+30 1 = 0.1A
unsigned int InputVoltage; // 31+32 66 = 6,6V
unsigned int Capacity; // 33+34 1 = 10mAh
unsigned int Speed; // 35+36
unsigned char LowestCellVoltage; // 37
unsigned char LowestCellNumber; // 38
unsigned int Rpm2; // 39+40
unsigned char ErrorNumber; // 41
unsigned char Pressure; // 42 in 0,1bar 20=2,0bar
unsigned char Version; // 43
unsigned char EndByte; // 0x7D
} HoTTGeneral_t;
 
typedef struct
{
unsigned char StartByte; // 0x7C
unsigned char Packet_ID; // HOTT_ELECTRIC_AIR_PACKET_ID
unsigned char WarnBeep; // Anzahl der Töne 0..36
unsigned char SensorID; // 4 0xE0
unsigned char InverseStatus1; // 5
unsigned char InverseStatus2; // 6
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert)
unsigned char VoltageCell2; // 209 = 4,18V
unsigned char VoltageCell3; //
unsigned char VoltageCell4; //
unsigned char VoltageCell5; //
unsigned char VoltageCell6; //
unsigned char VoltageCell7; //
unsigned char VoltageCell8; //
unsigned char VoltageCell9; //
unsigned char VoltageCell10; //
unsigned char VoltageCell11; //
unsigned char VoltageCell12; //
unsigned char VoltageCell13; //
unsigned char VoltageCell14; // 20
unsigned int Battery1; // 21+22 51 = 5,1V
unsigned int Battery2; // 23+24 51 = 5,1V
unsigned char Temperature1; // 25 44 = 24°C, 0 = -20°C
unsigned char Temperature2; // 26 44 = 24°C, 0 = -20°C
signed int Altitude; // 27+28
unsigned int Current; // 29+30 1 = 0.1A
unsigned int InputVoltage; // 31+32 66 = 6,6V
unsigned int Capacity; // 33+34 1 = 10mAh
unsigned int m_sec; // 35+36 30000 = 0
unsigned char m_3sec; // 37 120 = 0
unsigned int Rpm; // 38+39
unsigned char FlightTimeMinutes; // 40
unsigned char FlightTimeSeconds; // 41
unsigned char Speed; // 42 1=2km
unsigned char Version; // 43 0x00
unsigned char EndByte; // 0x7D
} ElectricAirPacket_t;
 
 
typedef struct
{
unsigned char StartByte; // 0x7C
unsigned char Packet_ID; // 0x89 - Vario ID
unsigned char WarnBeep; //3 // Anzahl der Töne 0..36
unsigned char SensorID; // 0x90
unsigned char InverseStatus;
signed int Altitude; //6+7 // 500 = 0m
signed int MaxAltitude; //8+9 // 500 = 0m
signed int MinAltitude; //10+11 // 500 = 0m
unsigned int m_sec; //12+13 // 3000 = 0
unsigned int m_3sec; //14+15
unsigned int m_10sec; //26+17
char Text[21]; //18-38
char FreeCharacters[3]; // 39-41
unsigned char NullByte; // 42 0x00
unsigned char Version; // 43
unsigned char EndByte; // 0x7D
} VarioPacket_t;
 
typedef struct
{
unsigned char StartByte; //0 // 0x7C
unsigned char Packet_ID; //1 // 0x8A - GPS ID
unsigned char WarnBeep; //2 // Anzahl der Töne 0..36
unsigned char SensorID; // 4 0xA0
unsigned char InverseStatus1; // 5
unsigned char InverseStatus2; // 6
unsigned char Heading; //7 // 1 = 2°
unsigned int Speed; //8+9 // in km/h
unsigned char Lat_North; //10
unsigned char Lat_G; //11
unsigned char Lat_M; //12
unsigned char Lat_Sek1; //13
unsigned char Lat_Sek2; //14
unsigned char Lon_East; //15
unsigned char Lon_G; //16
unsigned char Lon_M; //17
unsigned char Lon_Sek1; //18
unsigned char Lon_Sek2; //19
unsigned int Distance; //20+21 // 9000 = 0m
signed int Altitude; //22+23 // 500 = 0m
unsigned int m_sec; //24+25 // 3000 = 0
unsigned char m_3sec; //26 120 = 0
unsigned char NumOfSats; //27
unsigned char SatFix; //28
unsigned char HomeDirection; // 29
unsigned char AngleX; // 30
unsigned char AngleY; // 31
unsigned char AngleZ; // 32
signed int GyroX; //33+34
signed int GyroY; //35+36
signed int GyroZ; //37+38
unsigned char Vibration; // 39
char FreeCharacters[3]; // 40-42
unsigned char Version; // 43
unsigned char EndByte; // 0x7D
} GPSPacket_t;
 
typedef struct
{
unsigned char StartByte; // 0x7B
unsigned char Packet_ID; //
unsigned char WarnBeep; // Anzahl der Töne 0..36
char Text[8*21];
unsigned char EndByte; // 0x7D
} ASCIIPacket_t;
 
 
 
extern GPSPacket_t GPSPacket;
extern VarioPacket_t VarioPacket;
extern ASCIIPacket_t ASCIIPacket;
extern ElectricAirPacket_t ElectricAirPacket;
extern HoTTGeneral_t HoTTGeneral;
 
#define HOTT_VARIO_PACKET_ID 0x89
#define HOTT_GPS_PACKET_ID 0x8A
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E
#define HOTT_GENERAL_PACKET_ID 0x8D
 
#endif
#endif
 
/branches/v0.90d_Ernstl_4-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/ccbFCWV3.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccbFCWV3.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccbFCWV3.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccbFCWV3.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccbFCWV3.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccbFCWV3.s:15 .bss:00000000 HottestBl
C:\Temp/ccbFCWV3.s:21 .bss:00000001 MinBlTempertaure
C:\Temp/ccbFCWV3.s:27 .bss:00000002 MaxBlTempertaure
C:\Temp/ccbFCWV3.s:33 .progmem.data:00000000 HOTT_ERROR
C:\Temp/ccbFCWV3.s:100 .progmem.data:00000040 NC_ERROR_TEXT
C:\Temp/ccbFCWV3.s:136 .progmem.data:00000260 UNDERVOLTAGE
C:\Temp/ccbFCWV3.s:141 .progmem.data:00000276 MIKROKOPTER
C:\Temp/ccbFCWV3.s:148 .bss:00000003 HoTTVarioMeter
C:\Temp/ccbFCWV3.s:154 .bss:00000005 ToNC_SpeakHoTT
C:\Temp/ccbFCWV3.s:160 .data:00000000 SpeakHoTT
C:\Temp/ccbFCWV3.s:167 .bss:00000006 NaviData_TargetDistance
C:\Temp/ccbFCWV3.s:173 .bss:00000008 NaviData_TargetHoldTime
C:\Temp/ccbFCWV3.s:179 .bss:00000009 NaviData_WaypointNumber
C:\Temp/ccbFCWV3.s:185 .bss:0000000a NaviData_WaypointIndex
.bss:0000000b search.98
C:\Temp/ccbFCWV3.s:187 .bss:0000000c tmp_max.99
C:\Temp/ccbFCWV3.s:188 .bss:0000000d tmp_min.100
C:\Temp/ccbFCWV3.s:189 .bss:0000000e who.101
C:\Temp/ccbFCWV3.s:194 .text:00000000 GetHottestBl
C:\Temp/ccbFCWV3.s:262 .progmem.data:0000028c __c.97
C:\Temp/ccbFCWV3.s:267 .text:0000008c Hott_ClearLine
C:\Temp/ccbFCWV3.s:190 .bss:0000000f old_status.95
C:\Temp/ccbFCWV3.s:295 .bss:00000010 repeat.96
C:\Temp/ccbFCWV3.s:299 .text:000000bc HoTT_Waring
C:\Temp/ccbFCWV3.s:396 .text:0000016e NC_Fills_HoTT_Telemety
*COM*:0000002c VarioPacket
*COM*:0000002c GPSPacket
*COM*:0000002c ElectricAirPacket
*COM*:0000002c HoTTGeneral
C:\Temp/ccbFCWV3.s:469 .text:000001e0 BuildHoTT_Vario
C:\Temp/ccbFCWV3.s:577 .text:000002aa HoTT_Telemety
C:\Temp/ccbFCWV3.s:296 .bss:00000012 line.0
C:\Temp/ccbFCWV3.s:1157 .bss:00000013 page.1
C:\Temp/ccbFCWV3.s:1158 .bss:00000014 show_current.2
C:\Temp/ccbFCWV3.s:1159 .bss:00000015 show_mag.3
C:\Temp/ccbFCWV3.s:1160 .bss:00000016 show_poti.4
C:\Temp/ccbFCWV3.s:1165 .progmem.data:000002a2 __c.5
C:\Temp/ccbFCWV3.s:1169 .progmem.data:000002af __c.6
C:\Temp/ccbFCWV3.s:1173 .progmem.data:000002bc __c.7
C:\Temp/ccbFCWV3.s:1177 .progmem.data:000002c8 __c.8
C:\Temp/ccbFCWV3.s:1181 .progmem.data:000002d3 __c.9
C:\Temp/ccbFCWV3.s:1185 .progmem.data:000002dd __c.10
C:\Temp/ccbFCWV3.s:1189 .progmem.data:000002ea __c.11
C:\Temp/ccbFCWV3.s:1193 .progmem.data:000002f7 __c.12
C:\Temp/ccbFCWV3.s:1197 .progmem.data:00000302 __c.13
C:\Temp/ccbFCWV3.s:1201 .progmem.data:00000304 __c.14
C:\Temp/ccbFCWV3.s:1205 .progmem.data:00000306 __c.15
C:\Temp/ccbFCWV3.s:1209 .progmem.data:0000030e __c.16
C:\Temp/ccbFCWV3.s:1213 .progmem.data:00000316 __c.17
C:\Temp/ccbFCWV3.s:1217 .progmem.data:00000322 __c.18
C:\Temp/ccbFCWV3.s:1221 .progmem.data:00000324 __c.19
C:\Temp/ccbFCWV3.s:1225 .progmem.data:00000326 __c.20
C:\Temp/ccbFCWV3.s:1229 .progmem.data:00000328 __c.21
C:\Temp/ccbFCWV3.s:1233 .progmem.data:0000033e __c.22
C:\Temp/ccbFCWV3.s:1237 .progmem.data:00000354 __c.23
C:\Temp/ccbFCWV3.s:1241 .progmem.data:00000356 __c.24
C:\Temp/ccbFCWV3.s:1245 .progmem.data:0000035f __c.25
C:\Temp/ccbFCWV3.s:1249 .progmem.data:00000369 __c.26
C:\Temp/ccbFCWV3.s:1253 .progmem.data:0000036c __c.27
C:\Temp/ccbFCWV3.s:1257 .progmem.data:0000036f __c.28
C:\Temp/ccbFCWV3.s:1261 .progmem.data:00000372 __c.29
C:\Temp/ccbFCWV3.s:1265 .progmem.data:0000037d __c.30
C:\Temp/ccbFCWV3.s:1269 .progmem.data:00000389 __c.31
C:\Temp/ccbFCWV3.s:1273 .progmem.data:00000399 __c.32
C:\Temp/ccbFCWV3.s:1277 .progmem.data:000003b2 __c.33
C:\Temp/ccbFCWV3.s:1281 .progmem.data:000003bd __c.34
C:\Temp/ccbFCWV3.s:1285 .progmem.data:000003c3 __c.35
C:\Temp/ccbFCWV3.s:1289 .progmem.data:000003d6 __c.36
C:\Temp/ccbFCWV3.s:1293 .progmem.data:000003ec __c.37
C:\Temp/ccbFCWV3.s:1297 .progmem.data:00000407 __c.38
C:\Temp/ccbFCWV3.s:1301 .progmem.data:00000422 __c.39
C:\Temp/ccbFCWV3.s:1305 .progmem.data:0000042c __c.40
C:\Temp/ccbFCWV3.s:1309 .progmem.data:00000435 __c.41
C:\Temp/ccbFCWV3.s:1313 .progmem.data:0000043e __c.42
C:\Temp/ccbFCWV3.s:1317 .progmem.data:00000448 __c.43
C:\Temp/ccbFCWV3.s:1321 .progmem.data:0000044b __c.44
C:\Temp/ccbFCWV3.s:1325 .progmem.data:00000462 __c.45
C:\Temp/ccbFCWV3.s:1329 .progmem.data:00000476 __c.46
C:\Temp/ccbFCWV3.s:1333 .progmem.data:00000479 __c.47
C:\Temp/ccbFCWV3.s:1337 .progmem.data:0000047c __c.48
C:\Temp/ccbFCWV3.s:1341 .progmem.data:0000048f __c.49
C:\Temp/ccbFCWV3.s:1345 .progmem.data:00000495 __c.50
C:\Temp/ccbFCWV3.s:1349 .progmem.data:0000049b __c.51
C:\Temp/ccbFCWV3.s:1353 .progmem.data:000004a1 __c.52
C:\Temp/ccbFCWV3.s:1357 .progmem.data:000004b7 __c.53
C:\Temp/ccbFCWV3.s:1361 .progmem.data:000004d4 __c.54
C:\Temp/ccbFCWV3.s:1365 .progmem.data:000004e7 __c.55
C:\Temp/ccbFCWV3.s:1369 .progmem.data:000004f6 __c.56
C:\Temp/ccbFCWV3.s:1373 .progmem.data:00000513 __c.57
C:\Temp/ccbFCWV3.s:1377 .progmem.data:00000526 __c.58
C:\Temp/ccbFCWV3.s:1381 .progmem.data:00000539 __c.59
C:\Temp/ccbFCWV3.s:1385 .progmem.data:00000544 __c.60
C:\Temp/ccbFCWV3.s:1389 .progmem.data:0000054a __c.61
C:\Temp/ccbFCWV3.s:1393 .progmem.data:0000055d __c.62
C:\Temp/ccbFCWV3.s:1397 .progmem.data:00000573 __c.63
C:\Temp/ccbFCWV3.s:1401 .progmem.data:00000582 __c.64
C:\Temp/ccbFCWV3.s:1405 .progmem.data:00000593 __c.65
C:\Temp/ccbFCWV3.s:1409 .progmem.data:00000598 __c.66
C:\Temp/ccbFCWV3.s:1413 .progmem.data:000005a2 __c.67
C:\Temp/ccbFCWV3.s:1417 .progmem.data:000005a9 __c.68
C:\Temp/ccbFCWV3.s:1421 .progmem.data:000005b0 __c.69
C:\Temp/ccbFCWV3.s:1425 .progmem.data:000005b6 __c.70
C:\Temp/ccbFCWV3.s:1429 .progmem.data:000005bc __c.71
C:\Temp/ccbFCWV3.s:1433 .progmem.data:000005c5 __c.72
C:\Temp/ccbFCWV3.s:1437 .progmem.data:000005c9 __c.73
C:\Temp/ccbFCWV3.s:1441 .progmem.data:000005d2 __c.74
C:\Temp/ccbFCWV3.s:1445 .progmem.data:000005d9 __c.75
C:\Temp/ccbFCWV3.s:1449 .progmem.data:000005e0 __c.76
C:\Temp/ccbFCWV3.s:1453 .progmem.data:000005e7 __c.77
C:\Temp/ccbFCWV3.s:1457 .progmem.data:000005ec __c.78
C:\Temp/ccbFCWV3.s:1461 .progmem.data:000005f5 __c.79
C:\Temp/ccbFCWV3.s:1465 .progmem.data:000005fc __c.80
C:\Temp/ccbFCWV3.s:1469 .progmem.data:00000603 __c.81
C:\Temp/ccbFCWV3.s:1473 .progmem.data:0000060a __c.82
C:\Temp/ccbFCWV3.s:1477 .progmem.data:00000611 __c.83
C:\Temp/ccbFCWV3.s:1481 .progmem.data:0000061c __c.84
C:\Temp/ccbFCWV3.s:1485 .progmem.data:00000626 __c.85
C:\Temp/ccbFCWV3.s:1489 .progmem.data:0000062a __c.86
C:\Temp/ccbFCWV3.s:1493 .progmem.data:00000630 __c.87
C:\Temp/ccbFCWV3.s:1497 .progmem.data:00000644 __c.88
C:\Temp/ccbFCWV3.s:1501 .progmem.data:00000653 __c.89
C:\Temp/ccbFCWV3.s:1505 .progmem.data:00000667 __c.90
C:\Temp/ccbFCWV3.s:1509 .progmem.data:0000067b __c.91
C:\Temp/ccbFCWV3.s:1513 .progmem.data:0000068a __c.92
C:\Temp/ccbFCWV3.s:1517 .progmem.data:00000694 __c.93
C:\Temp/ccbFCWV3.s:1521 .progmem.data:00000699 __c.94
C:\Temp/ccbFCWV3.s:1526 .text:00000896 HoTT_Menu
*COM*:000000ac ASCIIPacket
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
Motor
LIBFC_HoTT_SetPos
LIBFC_HoTT_Putchar
_printf_P
FC_StatusFlags
NC_ErrorCode
MotorenEin
EE_Parameter
CheckDelay
SetDelay
FromNaviCtrl
VarioCharacter
AltitudeSetpointTrimming
__divmodhi4
FromNC_AltitudeSpeed
HoehenWert
__divmodsi4
HoTT_DataPointer
FC_StatusFlags2
__udivmodqi4
__udivmodhi4
GPSInfo
NC_GPS_ModeCharacter
UBat
ErsatzKompassInGrad
Capacity
FlugSekunden
BattLowVoltageWarning
VarioMeter
__tablejump2__
LIBFC_HoTT_Putchar_BLINK
Parameter_GlobalConfig
HoehenReglerAktiv
NaviDataOkay
EarthMagneticField
EarthMagneticInclinationTheoretic
EarthMagneticInclination
HoTTBlink
HottKeyboard
LIBFC_HoTT_Clear
KompassValue
LIBFC_HoTT_Putchar_INV
RequiredMotors
GetActiveParamSet
Mixer
Parameter_HoehenSchalter
Parameter_ExtraConfig
CareFree
Poti
Parameter_ServoNickControl
PPM_in
__epilogue_restores__
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/isqrt.S
0,0 → 1,203
;-----------------------------------------------------------------------------;
; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008
; http://elm-chan.org/docs/avrlib/sqrt32.S
;-----------------------------------------------------------------------------;
; uint16_t isqrt32 (uint32_t n);
; uint8_t isqrt16 (uint16_t n);
; uint16_t ihypot (int16_t x, int16_t y);
 
;-----------------------------------------------------------------------------:
; 32bit integer squareroot
;-----------------------------------------------------------------------------;
; uint16_t isqrt32 (
; uint32_t n
; );
;
; Return Value:
; Squareroot of n.
;
; Size = 53 words
; Clock = 532..548 cycles
; Stack = 0 byte
 
.global isqrt32
.func isqrt32
 
isqrt32:
clr r0
clr r18
clr r19
clr r20
ldi r21, 1
clr r27
clr r30
clr r31
ldi r26, 16
1: lsl r22
rol r23
rol r24
rol r25
rol r0
rol r18
rol r19
rol r20
lsl r22
rol r23
rol r24
rol r25
rol r0
rol r18
rol r19
rol r20
brpl 2f
add r0, r21
adc r18, r27
adc r19, r30
adc r20, r31
rjmp 3f
2: sub r0, r21
sbc r18, r27
sbc r19, r30
sbc r20, r31
3: lsl r21
rol r27
rol r30
andi r21, 0b11111000
ori r21, 0b00000101
sbrc r20, 7
subi r21, 2
dec r26
brne 1b
lsr r30
ror r27
ror r21
lsr r30
ror r27
ror r21
mov r24, r21
mov r25, r27
ret
.endfunc
 
 
 
;-----------------------------------------------------------------------------:
; 16bit integer squareroot
;-----------------------------------------------------------------------------;
; uint8_t isqrt16 (
; uint16_t n
; );
;
; Return Value:
; Squareroot of n.
;
; Size = 33 words
; Clock = 181..189 cycles
; Stack = 0 byte
 
.global isqrt16
.func isqrt16
 
isqrt16:
clr r18
clr r19
ldi r20, 1
clr r21
ldi r22, 8
1: lsl r24
rol r25
rol r18
rol r19
lsl r24
rol r25
rol r18
rol r19
brpl 2f
add r18, r20
adc r19, r21
rjmp 3f
2: sub r18, r20
sbc r19, r21
3: lsl r20
rol r21
andi r20, 0b11111000
ori r20, 0b00000101
sbrc r19, 7
subi r20, 2
dec r22
brne 1b
lsr r21
ror r20
lsr r21
ror r20
mov r24, r20
ret
.endfunc
 
 
 
;-----------------------------------------------------------------------------:
; 16bit integer hypot (megaAVR is required)
;-----------------------------------------------------------------------------;
; uint16_t ihypot (
; int16_t x,
; int16_t y
; );
;
; Return Value:
; Squareroot of (x*x + y*y)
;
; Size = 42 words
; Clock = 581..597 cycles
; Stack = 0 byte
 
.global ihypot
.func ihypot
 
ihypot:
clr r26
sbrs r25, 7
rjmp 1f
com r24
com r25
adc r24, r26
adc r25, r26
1: sbrs r23, 7
rjmp 2f
com r22
com r23
adc r22, r26
adc r23, r26
2: mul r22, r22
movw r18, r0
mul r23, r23
movw r20, r0
mul r22, r23
add r19, r0
adc r20, r1
adc r21, r26
add r19, r0
adc r20, r1
adc r21, r26
mul r24, r24
movw r30, r0
mul r25, r25
add r18, r30
adc r19, r31
adc r20, r0
adc r21, r1
mul r24, r25
add r19, r0
adc r20, r1
adc r21, r26
add r19, r0
adc r20, r1
adc r21, r26
movw r24, r20
movw r22, r18
clr r1
rjmp isqrt32
.endfunc
 
 
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/isqrt.h
0,0 → 1,11
#ifndef _ISQRT_H
#define _ISQRT_H
 
#include <inttypes.h>
 
// coded in assembler file
extern uint16_t isqrt32(uint32_t n);
extern uint8_t isqrt16(uint16_t n);
extern uint16_t ihypot(int16_t x, int16_t y);
 
#endif // _ISQRT_H
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/isqrt.lst
0,0 → 1,209
1 # 1 "isqrt.S"
1 ;-----------------------------------------------------------------------------;
0
0
2 ;-----------------------------------------------------------------------------;
3 ; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008
4 ; http://elm-chan.org/docs/avrlib/sqrt32.S
5 ;-----------------------------------------------------------------------------;
6 ; uint16_t isqrt32 (uint32_t n);
7 ; uint8_t isqrt16 (uint16_t n);
8 ; uint16_t ihypot (int16_t x, int16_t y);
9
10 ;-----------------------------------------------------------------------------:
11 ; 32bit integer squareroot
12 ;-----------------------------------------------------------------------------;
13 ; uint16_t isqrt32 (
14 ; uint32_t n
15 ; );
16 ;
17 ; Return Value:
18 ; Squareroot of n.
19 ;
20 ; Size = 53 words
21 ; Clock = 532..548 cycles
22 ; Stack = 0 byte
23
24 .global isqrt32
25 .func isqrt32
26
27:isqrt.S **** isqrt32:
28:isqrt.S **** clr r0
29:isqrt.S **** clr r18
30:isqrt.S **** clr r19
31:isqrt.S **** clr r20
32:isqrt.S **** ldi r21, 1
33:isqrt.S **** clr r27
34:isqrt.S **** clr r30
35:isqrt.S **** clr r31
36:isqrt.S **** ldi r26, 16
37:isqrt.S **** 1: lsl r22
38:isqrt.S **** rol r23
39:isqrt.S **** rol r24
40:isqrt.S **** rol r25
41:isqrt.S **** rol r0
42:isqrt.S **** rol r18
43:isqrt.S **** rol r19
44:isqrt.S **** rol r20
45:isqrt.S **** lsl r22
46:isqrt.S **** rol r23
47:isqrt.S **** rol r24
48:isqrt.S **** rol r25
49:isqrt.S **** rol r0
50:isqrt.S **** rol r18
51:isqrt.S **** rol r19
52:isqrt.S **** rol r20
53:isqrt.S **** brpl 2f
54:isqrt.S **** add r0, r21
55:isqrt.S **** adc r18, r27
56:isqrt.S **** adc r19, r30
57:isqrt.S **** adc r20, r31
58:isqrt.S **** rjmp 3f
59:isqrt.S **** 2: sub r0, r21
60:isqrt.S **** sbc r18, r27
61:isqrt.S **** sbc r19, r30
62:isqrt.S **** sbc r20, r31
63:isqrt.S **** 3: lsl r21
64:isqrt.S **** rol r27
65:isqrt.S **** rol r30
66:isqrt.S **** andi r21, 0b11111000
67:isqrt.S **** ori r21, 0b00000101
68:isqrt.S **** sbrc r20, 7
69:isqrt.S **** subi r21, 2
70:isqrt.S **** dec r26
71:isqrt.S **** brne 1b
72:isqrt.S **** lsr r30
73:isqrt.S **** ror r27
74:isqrt.S **** ror r21
75:isqrt.S **** lsr r30
76:isqrt.S **** ror r27
77:isqrt.S **** ror r21
78:isqrt.S **** mov r24, r21
79:isqrt.S **** mov r25, r27
80 ret
81 .endfunc
82
83
84
85 ;-----------------------------------------------------------------------------:
86 ; 16bit integer squareroot
87 ;-----------------------------------------------------------------------------;
88 ; uint8_t isqrt16 (
89 ; uint16_t n
90 ; );
91 ;
92 ; Return Value:
93 ; Squareroot of n.
94 ;
95 ; Size = 33 words
96 ; Clock = 181..189 cycles
97 ; Stack = 0 byte
98
99 .global isqrt16
100 .func isqrt16
101
102:isqrt.S **** isqrt16:
103:isqrt.S **** clr r18
104:isqrt.S **** clr r19
105:isqrt.S **** ldi r20, 1
106:isqrt.S **** clr r21
107:isqrt.S **** ldi r22, 8
108:isqrt.S **** 1: lsl r24
109:isqrt.S **** rol r25
110:isqrt.S **** rol r18
111:isqrt.S **** rol r19
112:isqrt.S **** lsl r24
113:isqrt.S **** rol r25
114:isqrt.S **** rol r18
115:isqrt.S **** rol r19
116:isqrt.S **** brpl 2f
117:isqrt.S **** add r18, r20
118:isqrt.S **** adc r19, r21
119:isqrt.S **** rjmp 3f
120:isqrt.S **** 2: sub r18, r20
121:isqrt.S **** sbc r19, r21
122:isqrt.S **** 3: lsl r20
123:isqrt.S **** rol r21
124:isqrt.S **** andi r20, 0b11111000
125:isqrt.S **** ori r20, 0b00000101
126:isqrt.S **** sbrc r19, 7
127:isqrt.S **** subi r20, 2
128:isqrt.S **** dec r22
129:isqrt.S **** brne 1b
130:isqrt.S **** lsr r21
131:isqrt.S **** ror r20
132:isqrt.S **** lsr r21
133:isqrt.S **** ror r20
134:isqrt.S **** mov r24, r20
135 ret
136 .endfunc
137
138
139
140 ;-----------------------------------------------------------------------------:
141 ; 16bit integer hypot (megaAVR is required)
142 ;-----------------------------------------------------------------------------;
143 ; uint16_t ihypot (
144 ; int16_t x,
145 ; int16_t y
146 ; );
147 ;
148 ; Return Value:
149 ; Squareroot of (x*x + y*y)
150 ;
151 ; Size = 42 words
152 ; Clock = 581..597 cycles
153 ; Stack = 0 byte
154
155 .global ihypot
156 .func ihypot
157
158:isqrt.S **** ihypot:
159:isqrt.S **** clr r26
160:isqrt.S **** sbrs r25, 7
161:isqrt.S **** rjmp 1f
162:isqrt.S **** com r24
163:isqrt.S **** com r25
164:isqrt.S **** adc r24, r26
165:isqrt.S **** adc r25, r26
166:isqrt.S **** 1: sbrs r23, 7
167:isqrt.S **** rjmp 2f
168:isqrt.S **** com r22
169:isqrt.S **** com r23
170:isqrt.S **** adc r22, r26
171:isqrt.S **** adc r23, r26
172:isqrt.S **** 2: mul r22, r22
173:isqrt.S **** movw r18, r0
174:isqrt.S **** mul r23, r23
175:isqrt.S **** movw r20, r0
176:isqrt.S **** mul r22, r23
177:isqrt.S **** add r19, r0
178:isqrt.S **** adc r20, r1
179:isqrt.S **** adc r21, r26
180:isqrt.S **** add r19, r0
181:isqrt.S **** adc r20, r1
182:isqrt.S **** adc r21, r26
183:isqrt.S **** mul r24, r24
184:isqrt.S **** movw r30, r0
185:isqrt.S **** mul r25, r25
186:isqrt.S **** add r18, r30
187:isqrt.S **** adc r19, r31
188:isqrt.S **** adc r20, r0
189:isqrt.S **** adc r21, r1
190:isqrt.S **** mul r24, r25
191:isqrt.S **** add r19, r0
192:isqrt.S **** adc r20, r1
193:isqrt.S **** adc r21, r26
194:isqrt.S **** add r19, r0
195:isqrt.S **** adc r20, r1
196:isqrt.S **** adc r21, r26
197:isqrt.S **** movw r24, r20
198:isqrt.S **** movw r22, r18
199:isqrt.S **** clr r1
200 rjmp isqrt32
DEFINED SYMBOLS
isqrt.S:26 .text:00000000 isqrt32
isqrt.S:101 .text:0000006a isqrt16
isqrt.S:157 .text:000000ac ihypot
 
NO UNDEFINED SYMBOLS
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/jeti_ex.c
0,0 → 1,140
#include "libfc.h"
#include "printf_P.h"
#include "main.h"
#include "spi.h"
#include "capacity.h"
#include "jeti_ex.h"
#include "hottmenu.h"
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
const char PROGMEM JETI_CODE[53] =
{
0, // 0
'O', // SPEAK_ERR_CALIBARTION 1
'P', // SPEAK_ERR_RECEICER 2
'Q', // SPEAK_ERR_DATABUS 3
'R', // SPEAK_ERR_NAVI 4
'S', // SPEAK_ERROR 5
'T', // SPEAK_ERR_COMPASS 6
'S', // SPEAK_ERR_SENSOR 7
'V', // SPEAK_ERR_GPS 8
'W', // SPEAK_ERR_MOTOR 9
'H', // SPEAK_MAX_TEMPERAT 10
0, // SPEAK_ALTI_REACHED 11
'X', // SPEAK_WP_REACHED 12
'Y', // SPEAK_NEXT_WP 13
0, // SPEAK_LANDING 14
'Z', // SPEAK_GPS_FIX 15
'U', // SPEAK_UNDERVOLTAGE 16
'E', // SPEAK_GPS_HOLD 17
'F', // SPEAK_GPS_HOME 18
'G', // SPEAK_GPS_OFF 19
'H', // SPEAK_BEEP 20
'A', // SPEAK_MIKROKOPTER 21
0, // SPEAK_CAPACITY 22
'I', // SPEAK_CF_OFF 23
'B', // SPEAK_CALIBRATE 24
'J', // SPEAK_MAX_RANGE 25
'J', // SPEAK_MAX_ALTITUD 26
0, // 27
0, // 28
0, // 29
0, // 30
0, // 31
0, // 32
0, // 33
0, // 34
0, // 35
0, // 36
0, // 37
'D', // SPEAK_MK_OFF 38
'L', // SPEAK_ALTITUDE_ON 39
'M', // SPEAK_ALTITUDE_OFF 40
0, // 41
0, // 42
0, // 43
0, // 44
0, // 45
'N', // SPEAK_CF_ON 46
0, // SPEAK_SINKING 47
0, // SPEAK_RISING 48
0, // SPEAK_HOLDING 49
'K', // SPEAK_GPS_ON 50
0, // SPEAK_FOLLWING 51
'C' // SPEAK_STARTING 52
};
 
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0)
{
// Label[10] unit[3], data type, Data , position of decimal point
// "1234567890", "123",
{ "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1
{ "Current " , "A ", 1, 0 , 1 }, // ID 2
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3
{ "Altitude " , "m ", 1, 0 , 0 }, // ID 4
{ "Compass " , "° ", 1, 0 , 0 }, // ID 5
{ "Sats " , " ", 1, 0 , 0 }, // ID 6
{ "Speed " , "m/s", 1, 0 , 0 }, // ID 7
{ "Distance " , "m ", 1, 0 , 0 }, // ID 8
{ "Home-Dir " , "° ", 1, 0 , 0 }, // ID 9
{ "max.Temp. " , "°C ", 1, 0 , 0 }, // ID 10
{ "Magn.field" , "% ", 1, 0 , 0 }, // ID 11
{ "Vario " , " ", 1, 0 , 0 }, // ID 12
{ "ErrorCode " , " ", 1, 0 , 0 }, // ID 13
{ "frei " , " ", 1, 0 , 3 }, // ID 14
{ "frei " , " ", 1, 0 , 3 }, // ID 15
};
 
 
void BuildJeti_Vario(void)
{
signed int tmp = 0;
static signed int JetiVarioMeter = 0;
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4;
 
if(VarioCharacter == '+')
{
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5;
}
else
if(VarioCharacter == '-')
{
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5;
}
else
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY))
{
tmp = (JetiVarioMeter/32);
}
else
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed;
else
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed;
 
JetiExData[12].Value = tmp;
}
 
 
// --------------------------------------------------------------------------------------------------
void JetiEX_Update(void)
{
 
GetHottestBl();
JetiExData[1].Value = UBat;
JetiExData[2].Value = Capacity.ActualCurrent;
JetiExData[3].Value = Capacity.UsedCapacity / 10;
JetiExData[4].Value = HoehenWert / 100;
JetiExData[5].Value = KompassValue;
JetiExData[6].Value = GPSInfo.NumOfSats;
JetiExData[7].Value = GPSInfo.Speed;
JetiExData[8].Value = GPSInfo.HomeDistance / 10;
JetiExData[9].Value = GPSInfo.HomeBearing;
JetiExData[10].Value = MaxBlTempertaure;
JetiExData[11].Value = EarthMagneticField;
// JetiExData[12].Value = Vario;
JetiExData[13].Value = NC_ErrorCode;
}
#endif
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/jeti_ex.h
0,0 → 1,37
#ifndef _JETI_EX_H
#define _JETI_EX_H
 
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
extern void BuildJeti_Vario(void);
 
// define here how many Jeti EX parameters should be transmitted (max. = 15)
//
#define JETI_EX_PARAMETER_COUNT 15
//
// -------------------------------------------------------------------------
 
extern const char PROGMEM JETI_CODE[53];
typedef struct
{
char Label[10];
char Unit[3];
unsigned char DataType;
long Value;
unsigned char DecimalPointPos;
} JetiExPacket_t;
extern JetiExPacket_t JetiExData[];
extern void JetiEX_Update(void);
 
 
 
#if (JETI_EX_PARAMETER_COUNT > 15)
#error "ERROR: Too many Jeti EX parameters (max. allowed 15)"
#endif
 
#endif
#endif //_JETI_EX_H
/branches/v0.90d_Ernstl_4-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/ccANnLno.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccANnLno.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccANnLno.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccANnLno.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccANnLno.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccANnLno.s:14 .data:00000000 JetiExData
C:\Temp/ccANnLno.s:99 .progmem.data:00000000 JETI_CODE
.bss:00000000 JetiVarioMeter.0
C:\Temp/ccANnLno.s:157 .text:00000000 BuildJeti_Vario
C:\Temp/ccANnLno.s:290 .text:0000010e JetiEX_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
VarioMeter
VarioCharacter
EE_Parameter
AltitudeSetpointTrimming
FC_StatusFlags
FromNC_AltitudeSpeed
GetHottestBl
UBat
Capacity
__udivmodhi4
HoehenWert
__divmodsi4
KompassValue
GPSInfo
MaxBlTempertaure
EarthMagneticField
NC_ErrorCode
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/jetimenu.c
0,0 → 1,259
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "jetimenu.h"
#include "libfc.h"
#include "printf_P.h"
#include "main.h"
#include "spi.h"
#include "capacity.h"
#include "hottmenu.h"
 
#define JETIBOX_KEY_RIGHT 0x1F
#define JETIBOX_KEY_UP 0x2F
#define JETIBOX_KEY_DOWN 0x4F
#define JETIBOX_KEY_LEFT 0x8F
#define JETIBOX_KEY_NONE 0x0F
#define JETIBOX_KEY_UNDEF 0x00
 
#define JetiBox_printfxy(x,y,format, args...) { LIBFC_JetiBox_SetPos(y * 16 + x); _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);}
#define JetiBox_printf(format, args...) { _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);}
 
// -----------------------------------------------------------
// the menu functions
// -----------------------------------------------------------
void Menu_Status(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10);
if(NaviDataOkay)
{
JetiBox_printfxy(6,0,"%3d%c %03dm%c",ErsatzKompassInGrad, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter);
}
else
{
JetiBox_printfxy(6,0,"Status");
}
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NC_ErrorCode)
{
static unsigned int timer;
static char toggle = 1;
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);};
if(toggle)
{
LIBFC_JetiBox_SetPos(0);
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);
}
else
{
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode);
if(MotorenEin) JetiBeep = 'O';
}
}
#else
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'O';};
#endif
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60);
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter);
}
#endif
}
 
 
void Menu_Temperature(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature);
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature);
if(RequiredMotors <= 4)
{
JetiBox_printfxy(0,1,"Temperatures ");
}
else
if(RequiredMotors <= 6)
{
JetiBox_printfxy(8,1,"\%cC ",0xdf);
}
 
#endif
}
 
void Menu_Battery(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity);
#endif
}
 
void Magnet_Values(uint8_t key)
{ //0123456789ABCDEF
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF);
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic);
#endif
}
 
 
void Menu_PosInfo(uint8_t key)
{
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
if(NaviDataOkay)
{
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats);
switch (GPSInfo.SatFix)
{
case SATFIX_3D:
JetiBox_printfxy(12,0," 3D");
break;
// case SATFIX_2D:
// case SATFIX_NONE:
default:
JetiBox_printfxy(12,0,"NoFx");
break;
}
if(GPSInfo.Flags & FLAG_DIFFSOLN)
{
JetiBox_printfxy(12,0,"DGPS");
}
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter);
}
else
{ //0123456789ABCDEF
JetiBox_printfxy(2,0,"No NaviCtrl!");
}
#endif
}
 
 
// -----------------------------------------------------------
// the menu topology
// -----------------------------------------------------------
typedef void (*pFctMenu) (uint8_t); // the menu item handler function pointer
 
typedef struct{
int8_t left;
int8_t right;
int8_t up;
int8_t down;
pFctMenu pHandler;
} MENU_ENTRY;
 
 
// the menu navigation structure
/* |
 
3 - 0 - 1 - 2 - 3 - 0
 
*/
 
const MENU_ENTRY JetiBox_Menu[] PROGMEM=
{ // l r u d pHandler
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
{4, 1, 0, 0, &Menu_Status }, // 0
{0, 2, 1, 1, &Menu_Temperature }, // 1
{1, 3, 2, 2, &Menu_Battery }, // 2
{2, 4, 3, 3, &Menu_PosInfo }, // 3
{3, 0, 4, 4, &Magnet_Values } // 4
#endif
};
 
// -----------------------------------------------------------
// Update display buffer
// -----------------------------------------------------------
unsigned char JetiBox_Update(unsigned char key)
{
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP)
static uint8_t item = 0, last_item = 0; // the menu item
static uint8_t updateDelay = 1;
 
// navigate within the menu by key action
last_item = item;
switch(key)
{
case JETIBOX_KEY_LEFT:
//if (item == 0) return (1); // switch back to jeti expander menu
// else
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item
break;
case JETIBOX_KEY_RIGHT:
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item
break;
case JETIBOX_KEY_UP:
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item
break;
case JETIBOX_KEY_DOWN:
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item
break;
default:
break;
}
// if the menu item has been changed, do not pass the key to the item handler
// to avoid jumping over to items
if(item != last_item) key = JETIBOX_KEY_UNDEF;
 
if (updateDelay++ & 0x01)
{
 
LIBFC_JetiBox_Clear();
//execute menu item handler
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key);
}
#endif
return (0);
}
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/jetimenu.h
0,0 → 1,6
#ifndef _JETIMENU_H
#define _JETIMENU_H
 
extern unsigned char JetiBox_Update(unsigned char key);
 
#endif //_JETIMENU_H
/branches/v0.90d_Ernstl_4-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/ccvRbAMN.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccvRbAMN.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccvRbAMN.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccvRbAMN.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccvRbAMN.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccvRbAMN.s:14 .progmem.data:00000000 JetiBox_Menu
C:\Temp/ccvRbAMN.s:18 .text:00000000 Menu_Status
C:\Temp/ccvRbAMN.s:28 .text:00000002 Menu_Temperature
C:\Temp/ccvRbAMN.s:38 .text:00000004 Menu_Battery
C:\Temp/ccvRbAMN.s:48 .text:00000006 Magnet_Values
C:\Temp/ccvRbAMN.s:58 .text:00000008 Menu_PosInfo
C:\Temp/ccvRbAMN.s:68 .text:0000000a JetiBox_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/led.c
0,0 → 1,127
#include <inttypes.h>
#include "main.h"
 
uint16_t LED1_Timing = 0;
uint16_t LED2_Timing = 0;
unsigned char J16Blinkcount = 0, J16Mask = 1;
unsigned char J17Blinkcount = 0, J17Mask = 1;
 
// initializes the LED control outputs J16, J17
void LED_Init(void)
{
// set PC2 & PC3 as output (control of J16 & J17)
DDRC |= (1<<DDC2)|(1<<DDC3);
J16_OFF;
J17_OFF;
J16Blinkcount = 0; J16Mask = 128;
J17Blinkcount = 0; J17Mask = 128;
}
 
// called in UpdateMotors() every 2ms
void LED_Update(void)
{
static char delay = 0;
static unsigned char J16Bitmask = 0;
static unsigned char J17Bitmask = 0;
static unsigned char J16Warn = 0, J17Warn = 0;
static unsigned char from_nc = 0;
if(!delay--) // 20ms Intervall
{
delay = 9;
if(FromNC_WP_EventChannel != -127) from_nc = (unsigned char) FromNC_WP_EventChannel + 127;
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C))
{
if(EE_Parameter.WARN_J16_Bitmask)
{
if(!J16Warn) J16Blinkcount = 4;
J16Warn = 1;
}
if(EE_Parameter.WARN_J17_Bitmask)
{
if(!J17Warn) J17Blinkcount = 4;
J17Warn = 1;
}
}
else
{
J16Warn = 0;
J17Warn = 0;
J16Bitmask = EE_Parameter.J16Bitmask;
J17Bitmask = EE_Parameter.J17Bitmask;
}
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3;
// Output 1
if(!J16Warn)
{
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;}
else
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1;}
else
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1;}
else
if(!J16Blinkcount--)
{
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1)
{
J16Blinkcount = from_nc / 2;
if(!from_nc) { if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 0; } // Ausschalten
else
{
if(J16Mask == 0)
{
from_nc = 0;
J16Mask = 128;
if(J16Bitmask & 128) J16_OFF; else J16_ON; // Ausschalten
}
else
{
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF;
J16Mask /= 2;
}
}
}
else
{
J16Blinkcount = Parameter_J16Timing / 2;
if(J16Mask == 1) { from_nc = 0; J16Mask = 128; } else J16Mask /= 2;
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF;
}
}
}
else // warning case
if(!J16Blinkcount--)
{
J16Blinkcount = 10-1;
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2;
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF;
}
// Output 2
 
if(!J17Warn)
{
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;}
else
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;}
else
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;}
else
if(!J17Blinkcount--)
{
J17Blinkcount = Parameter_J17Timing / 2;
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2;
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF;
}
}
else // warning case
if(!J17Blinkcount--)
{
J17Blinkcount = 10-1;
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2;
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF;
}
 
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16)
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17)
}
}
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/led.h
0,0 → 1,11
#include <avr/io.h>
 
#define J16_ON PORTC |= (1<<PORTC2)
#define J16_OFF PORTC &= ~(1<<PORTC2)
#define J16_TOGGLE PORTC ^= (1<<PORTC2)
#define J17_ON PORTC |= (1<<PORTC3)
#define J17_OFF PORTC &= ~(1<<PORTC3)
#define J17_TOGGLE PORTC ^= (1<<PORTC3)
 
extern void LED_Init(void);
extern void LED_Update(void);
/branches/v0.90d_Ernstl_4-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/ccffEeZr.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccffEeZr.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccffEeZr.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccffEeZr.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccffEeZr.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccffEeZr.s:14 .data:00000000 J17Mask
C:\Temp/ccffEeZr.s:21 .bss:00000000 J17Blinkcount
C:\Temp/ccffEeZr.s:27 .data:00000001 J16Mask
C:\Temp/ccffEeZr.s:34 .bss:00000001 J16Blinkcount
C:\Temp/ccffEeZr.s:40 .bss:00000002 LED2_Timing
C:\Temp/ccffEeZr.s:46 .bss:00000004 LED1_Timing
C:\Temp/ccffEeZr.s:51 .text:00000000 LED_Init
.bss:00000006 delay.0
C:\Temp/ccffEeZr.s:69 .bss:00000007 J16Bitmask.1
C:\Temp/ccffEeZr.s:70 .bss:00000008 J17Bitmask.2
C:\Temp/ccffEeZr.s:71 .bss:00000009 J16Warn.3
C:\Temp/ccffEeZr.s:72 .bss:0000000a J17Warn.4
C:\Temp/ccffEeZr.s:73 .bss:0000000b from_nc.5
C:\Temp/ccffEeZr.s:77 .text:0000001e LED_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
PPM_in
FC_StatusFlags
VersionInfo
EE_Parameter
MotorenEin
Parameter_J16Timing
Parameter_J17Timing
FC_StatusFlags2
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/libfc.h
0,0 → 1,21
#ifndef _LIBFC_H
#define _LIBFC_H
 
 
#define CPU_UNKNOWN 0
#define CPU_ATMEGA644 1
#define CPU_ATMEGA644P 2
#define CPU_ATMEGA1284 3
#define CPU_ATMEGA1284P 4
 
extern void LIBFC_Init(void);
extern void LIBFC_Polling(void);
extern void LIBFC_ReceiverInit(unsigned char rtype);
 
extern void LIBFC_JetiBox_Putchar(char c);
extern void LIBFC_JetiBox_SetPos(unsigned char index);
extern void LIBFC_JetiBox_Clear(void);
extern void LIBFC_CheckSettings(void);
extern unsigned char LIBFC_GetCPUType(void);
 
#endif //_LIBFC_H
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/main.c
0,0 → 1,435
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
unsigned char DisableRcOffBeeping = 0;
unsigned char PlatinenVersion = 10;
unsigned char BattLowVoltageWarning = 94;
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0;
unsigned int FlugSekunden = 0;
pVoidFnct_pVoidFnctChar_const_fmt _printf_P;
unsigned char FoundMotors = 0;
unsigned char JetiBeep = 0; // to allow any Morse-Beeping of the Jeti-Box
 
void PrintLine(void)
{
printf("\n\r===================================");
}
 
 
void CalMk3Mag(void)
{
static unsigned char stick = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0;
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick)
{
stick = 1;
WinkelOut.CalcState++;
if(WinkelOut.CalcState > 4)
{
// WinkelOut.CalcState = 0; // in Uart.c
beeptime = 1000;
}
else Piep(WinkelOut.CalcState,150);
}
DebugOut.Analog[19] = WinkelOut.CalcState;
}
 
 
void LipoDetection(unsigned char print)
{
#define MAX_CELL_VOLTAGE 43 // max cell volatage for LiPO
unsigned int timer, cells;
if(print) printf("\n\rBatt:");
if(EE_Parameter.UnterspannungsWarnung < 50) // automatische Zellenerkennung
{
timer = SetDelay(500);
if(print) while (!CheckDelay(timer));
// up to 6s LiPo, less than 2s is technical impossible
for(cells = 2; cells < 7; cells++)
{
if(UBat < cells * MAX_CELL_VOLTAGE) break;
}
 
BattLowVoltageWarning = cells * EE_Parameter.UnterspannungsWarnung;
if(print)
{
Piep(cells, 200);
printf(" %d Cells ", cells);
}
}
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung;
if(print) printf(" Low warning: %d.%d",BattLowVoltageWarning/10,BattLowVoltageWarning%10);
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer,i,timer2 = 0, timerPolling;
 
DDRB = 0x00;
PORTB = 0x00;
for(timer = 0; timer < 1000; timer++); // verzögern
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(PINB & 0x02) PlatinenVersion = 21;
else
{
PlatinenVersion = 22;
// ACC_AMPLIFY = 7; // der ACC-Sensor hat etwa 16% weniger Ausschlag
}
 
#else
if(PINB & 0x01)
{
if(PINB & 0x02) PlatinenVersion = 13;
else PlatinenVersion = 11;
}
else
{
if(PINB & 0x02) PlatinenVersion = 20;
else PlatinenVersion = 10;
}
#endif
DDRC = 0x81; // SCL
DDRC |=0x40; // HEF4017 Reset
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB = 0x01; // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
PORTD = 0x47; // LED
HEF4017Reset_ON;
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 2500;
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0;
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC
ROT_OFF;
GRN_ON;
 
Timer_Init();
TIMER2_Init();
UART_Init();
rc_sum_init();
ADC_Init();
I2C_Init(1);
SPI_MasterInit();
Capacity_Init();
LIBFC_Init();
GRN_ON;
sei();
ParamSet_Init();
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Check connected BL-Ctrls
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Check connected BL-Ctrls
BLFlags |= BLFLAG_READ_VERSION;
motor_read = 0; // read the first I2C-Data
SendMotorData();
timer = SetDelay(500);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
 
printf("\n\rFound BL-Ctrl: ");
timer = SetDelay(4000);
for(i=0; i < MAX_MOTORS; i++)
{
SendMotorData();
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up
{
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) )
{
SendMotorData();
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}
}
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK)
{
printf("%d",i+1);
FoundMotors++;
// if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new) ");
}
}
for(i=0; i < MAX_MOTORS; i++)
{
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0)
{
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1);
ServoActive = 2; // just in case the FC would be used as camera-stabilizer
}
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter
}
PrintLine();// ("\n\r===================================");
 
 
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER;
 
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rCalibrating pressure sensor..");
timer = SetDelay(1000);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
 
SetNeutral(0);
 
ROT_OFF;
 
beeptime = 2000;
ExternControl.Digital[0] = 0x55;
 
 
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1);
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1);
 
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF))
{
FlugMinuten = 0;
FlugMinutenGesamt = 0;
}
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt);
 
LcdClear();
I2CTimeout = 5000;
WinkelOut.Orientation = 1;
LipoDetection(1);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
PrintLine();// ("\n\r===================================");
//SpektrumBinding();
timer = SetDelay(2000);
timerPolling = SetDelay(250);
 
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active
DebugOut.Status[0] = 0x01 | 0x02;
JetiBeep = 0;
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1;
while (1)
{
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off
 
//GRN_ON;
if(UpdateMotor && AdReady) // ReglerIntervall
{
//GRN_OFF;
UpdateMotor=0;
if(WinkelOut.CalcState) CalMk3Mag();
else MotorRegler();
SendMotorData();
ROT_OFF;
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ }
else
{
TIMSK1 |= _BV(ICIE1); // enable PPM-Input
PPM_in[0] = 0; // set RSSI to zero on data timeout
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160;
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!--I2CTimeout || MissingMotor)
{
if(!I2CTimeout)
{
I2C_Reset();
I2CTimeout = 5;
DebugOut.Analog[28]++; // I2C-Error
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C;
DebugOut.Status[1] |= 0x02; // BL-Error-Status
}
if((BeepMuster == 0xffff) && MotorenEin)
{
beeptime = 25000;
BeepMuster = 0x0080;
}
}
else
{
ROT_OFF;
}
LIBFC_Polling();
 
if(!UpdateMotor)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NewSBusData) ProcessSBus();
else
#endif
{
if(CalculateServoSignals) CalculateServo();
DatenUebertragung();
BearbeiteRxDaten();
if(CheckDelay(timer))
{
static unsigned char second;
timer += 20; // 20 ms interval
CalcNickServoValue();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu();
else
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario();
#endif
if(MissingMotor)
{
VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING;
DebugOut.Status[1] |= 0x02; // BL-Error-Status
}
else
{
if(!beeptime)
{
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status
}
}
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;};
if(PcZugriff) PcZugriff--;
else
{
ExternControl.Config = 0;
ExternStickNick = 0;
ExternStickRoll = 0;
ExternStickGier = 0;
if(!SenderOkay)
{
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2)
{
beeptime = 15000;
BeepMuster = 0x0c00;
if(DisableRcOffBeeping) DisableRcOffBeeping = 2;
}
}
}
if(NaviDataOkay > 200)
{
NaviDataOkay--;
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX;
}
else
{
if(NC_Version.Compatible)
{
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX;
NC_ErrorCode = 9; // "ERR: no NC communication"
if(BeepMuster == 0xffff && MotorenEin)
{
beeptime = 15000;
BeepMuster = 0xA800;
}
}
GPS_Nick = 0;
GPS_Roll = 0;
GPS_Aid_StickMultiplikator = 0;
GPSInfo.Flags = 0;
FromNaviCtrl.AccErrorN = 0;
FromNaviCtrl.AccErrorR = 0;
FromNaviCtrl.CompassValue = -1;
NaviDataOkay = 0;
}
if(UBat < BattLowVoltageWarning)
{
FC_StatusFlags |= FC_STATUS_LOWBAT;
if(BeepMuster == 0xffff)
{
beeptime = 6000;
BeepMuster = 0x0300;
}
}
else if(!beeptime) FC_StatusFlags &= ~FC_STATUS_LOWBAT;
 
SPI_StartTransmitPacket();
SendSPI = 4;
// +++++++++++++++++++++++++++++++++
// Sekundentakt
if(++second == 49)
{
second = 0;
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++;
else
{
timer2 = 1450; // 0,5 Minuten aufrunden
if(StartLuftdruck < Luftdruck) StartLuftdruck++;
else
if(StartLuftdruck > Luftdruck) StartLuftdruck--;
}
}
// +++++++++++++++++++++++++++++++++
if(++timer2 == 2930) // eine Minute
{
timer2 = 0;
FlugMinuten++;
FlugMinutenGesamt++;
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256);
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256);
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256);
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256);
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
}
}
LED_Update();
Capacity_Update();
} //else DebugOut.Analog[26]++;
}
}
if(!SendSPI) { SPI_TransmitByte(); }
}
return (1);
}
//DebugOut.Analog[16]
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/main.h
0,0 → 1,82
#ifndef _MAIN_H
#define _MAIN_H
 
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text);
//#define ACT_S3D_SUMMENSIGNAL
//#define UserParameter8_FAILSAFE
#define RECEIVER_SPEKTRUM_DX7EXP
//#define RECEIVER_SPEKTRUM_DX8EXP
 
// neue Hardware
#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;}
#define ROT_ON {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB |= 0x01; else PORTB &=~0x01;}
#define ROT_FLASH PORTB ^= 0x01
#define GRN_OFF {if((PlatinenVersion < 12) || PlatinenVersion == 22) PORTB &=~0x02; else PORTB |= 0x02;}
#define GRN_ON {if((PlatinenVersion < 12) || PlatinenVersion == 22) PORTB |= 0x02; else PORTB &=~0x02;}
#define GRN_FLASH PORTB ^= 0x02
 
#define SYSCLK F_CPU
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#define J3High PORTD |= 0x20
#define J3Low PORTD &= ~0x20
#define J4High PORTD |= 0x10
#define J4Low PORTD &= ~0x10
#define J5High PORTD |= 0x08
#define J5Low PORTD &= ~0x08
 
extern volatile unsigned char SenderOkay;
extern unsigned char BattLowVoltageWarning;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern unsigned char PlatinenVersion;
extern unsigned char FoundMotors,DisableRcOffBeeping;
extern unsigned char JetiBeep;
void LipoDetection(unsigned char print);
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden;
extern void PrintLine(void); // "================================="
 
#include <avr/pgmspace.h>
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
 
#endif
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
#include "spi.h"
#include "led.h"
#include "spektrum.h"
#include "capacity.h"
#include "eeprom.h"
#include "libfc.h"
#include "hottmenu.h"
#include "debug.h"
#include "sbus.h"
#include "jeti_ex.h"
 
#endif //_MAIN_H
 
 
 
 
 
 
/branches/v0.90d_Ernstl_4-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/ccNa7tFS.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccNa7tFS.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccNa7tFS.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccNa7tFS.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccNa7tFS.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccNa7tFS.s:15 .bss:00000000 JetiBeep
C:\Temp/ccNa7tFS.s:21 .bss:00000001 FoundMotors
C:\Temp/ccNa7tFS.s:27 .bss:00000002 FlugSekunden
C:\Temp/ccNa7tFS.s:33 .bss:00000004 FlugMinutenGesamt
C:\Temp/ccNa7tFS.s:39 .bss:00000006 FlugMinuten
C:\Temp/ccNa7tFS.s:45 .data:00000000 BattLowVoltageWarning
C:\Temp/ccNa7tFS.s:50 .data:00000001 PlatinenVersion
C:\Temp/ccNa7tFS.s:57 .bss:00000008 DisableRcOffBeeping
C:\Temp/ccNa7tFS.s:62 .progmem.data:00000000 __c.11
C:\Temp/ccNa7tFS.s:67 .text:00000000 PrintLine
*COM*:00000002 _printf_P
C:\Temp/ccNa7tFS.s:93 .data:00000002 stick.10
C:\Temp/ccNa7tFS.s:98 .text:00000024 CalMk3Mag
C:\Temp/ccNa7tFS.s:152 .progmem.data:00000026 __c.7
C:\Temp/ccNa7tFS.s:156 .progmem.data:0000002e __c.8
C:\Temp/ccNa7tFS.s:160 .progmem.data:00000039 __c.9
C:\Temp/ccNa7tFS.s:165 .text:0000008e LipoDetection
C:\Temp/ccNa7tFS.s:302 .progmem.data:0000004d __c.0
C:\Temp/ccNa7tFS.s:306 .progmem.data:0000005f __c.1
C:\Temp/ccNa7tFS.s:310 .progmem.data:00000062 __c.2
C:\Temp/ccNa7tFS.s:314 .progmem.data:00000080 __c.3
C:\Temp/ccNa7tFS.s:318 .progmem.data:000000a0 __c.4
C:\Temp/ccNa7tFS.s:322 .progmem.data:000000a5 __c.5
.bss:00000009 second.6
C:\Temp/ccNa7tFS.s:328 .text:000001a2 main
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
uart_putchar
EE_Parameter
PPM_in
WinkelOut
beeptime
Piep
DebugOut
SetDelay
CheckDelay
UBat
__udivmodqi4
__stack
StickGier
StickRoll
StickNick
GIER_GRAD_FAKTOR
Timer_Init
TIMER2_Init
UART_Init
rc_sum_init
ADC_Init
I2C_Init
SPI_MasterInit
Capacity_Init
LIBFC_Init
ParamSet_Init
BLFlags
motor_read
SendMotorData
Motor
Mixer
ServoActive
RequiredMotors
VersionInfo
SucheLuftruckOffset
SetNeutral
ExternControl
GetParamByte
LcdClear
I2CTimeout
LIBFC_ReceiverInit
ReceiverUpdateModeActive
UpdateMotor
AdReady
MotorRegler
SenderOkay
MissingMotor
I2C_Reset
BeepMuster
MotorenEin
LIBFC_Polling
NewSBusData
ProcessSBus
CalculateServoSignals
CalculateServo
DatenUebertragung
BearbeiteRxDaten
CalcNickServoValue
HoTT_Menu
BuildJeti_Vario
PcZugriff
ExternStickNick
ExternStickRoll
ExternStickGier
NaviDataOkay
NC_Version
NC_ErrorCode
GPS_Nick
GPS_Roll
GPS_Aid_StickMultiplikator
GPSInfo
FromNaviCtrl
FC_StatusFlags
SPI_StartTransmitPacket
SendSPI
StartLuftdruck
Luftdruck
SetParamByte
LED_Update
Capacity_Update
SPI_TransmitByte
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/makefile
0,0 → 1,495
#--------------------------------------------------------------------
# MCU name
MCU = atmega1284p
#MCU = atmega644p
F_CPU = 20000000
#-------------------------------------------------------------------
VERSION_MAJOR = 0
VERSION_MINOR = 90
VERSION_PATCH = 3
VERSION_SERIAL_MAJOR = 11 # Serial Protocol
VERSION_SERIAL_MINOR = 0 # Serial Protocol
NC_SPI_COMPATIBLE = 52 # Navi-Kompatibilität
#-------------------------------------------------------------------
# ATMEGA644: 63487 is maximum
#-------------------------------------------------------------------
# 0 a
# 1 b
# 2 c
# 3 d
# 4 e
# 5 f
# 6 g
# 7 h
# 8 i
# 9 j
# 10 k
# 11 L
#-------------------------------------------------------------------
 
# get SVN revision
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'")
 
ifeq ($(MCU), atmega1284p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA1284P
LIBFC_EXT = 1284
endif
 
ifeq ($(MCU), atmega644p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA644
LIBFC_EXT = 644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
ifeq ($(VERSION_PATCH), 0)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 1)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 2)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 3)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 4)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 5)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 6)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 7)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 8)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 9)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 10)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 11)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 12)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 13)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 14)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 15)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 16)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 17)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 18)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 19)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 20)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 21)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 22)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 23)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 24)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 25)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV)
endif
 
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
#OPT = 2
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c
SRC += mymath.c jetimenu.c capacity.c debug.c
SRC += hottmenu.c sbus.c user_receiver.c
SRC += jeti_ex.c
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC = isqrt.S
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=$(<:%.c=%.lst) $(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
# shrink code size
CFLAGS += -mtiny-stack
#CFLAGS += -fno-inline-functions
CFLAGS += -mcall-prologues
 
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
LDFLAGS += libfc$(LIBFC_EXT).a
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = stk200
#AVRDUDE_PROGRAMMER = ponyser
AVRDUDE_PROGRAMMER = avrispv2
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
AVRDUDE_PORT = usb # programmer connected to USB
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -x -A $(TARGET).elf
LIMITS = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf
 
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) Flight-Ctrl_*.hex
$(REMOVE) Flight-Ctrl_*.eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) Flight-Ctrl_*.elf
$(REMOVE) Flight-Ctrl_*.map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) Flight-Ctrl_*.sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) $(SRC:.c=.o)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:%.c=%.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/menu.c
0,0 → 1,262
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
#include "eeprom.h"
 
char DisplayBuff[80];
unsigned char DispPtr = 0;
 
unsigned char MaxMenue = 16;
unsigned char MenuePunkt = 0;
unsigned char RemoteKeys = 0;
 
#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define KEY5 0x10
 
void LcdClear(void)
{
unsigned char i;
for(i=0;i<80;i++) DisplayBuff[i] = ' ';
}
 
void Menu_Putchar(char c)
{
if(DispPtr < 80) DisplayBuff[DispPtr++] = c;
}
 
void Menu(void)
{
unsigned char i;
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;}
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;}
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0;
LcdClear();
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);}
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);};
 
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"+ MikroKopter +");
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c V4",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a');
LCD_printfxy(0,2,"Setting:%d %s", GetActiveParamSet(),Mixer.Name);
 
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!")
else
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(NC_ErrorCode)
{
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode);
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);
}
else
#endif
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0])
else
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d!!",MissingMotor)
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
#else
else
if(NC_ErrorCode)
{
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode);
}
#endif
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1])
else
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!")
break;
case 1:
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)
{
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5));
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5));
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck);
LCD_printfxy(0,3,"Offset: %5i",OCR0A);
}
else
{
LCD_printfxy(0,0,"Height control");
LCD_printfxy(0,1,"DISABLED");
//LCD_printfxy(0,2,"Height control");
//LCD_printfxy(0,3,"DISABLED");
}
 
break;
case 2:
LCD_printfxy(0,0,"act. bearing");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Compass: %5i",ErsatzKompassInGrad);
break;
case 3:
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127);
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
if(PlatinenVersion == 10)
{
LCD_printfxy(0,1,"Nick%4i (%3i.%i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/8, AdNeutralNick%8);
LCD_printfxy(0,2,"Roll%4i (%3i.%i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/8, AdNeutralRoll%8);
LCD_printfxy(0,3,"Gier%4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier);
}
else
if((PlatinenVersion == 11) || (PlatinenVersion >= 20))
{
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2);
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2);
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2);
}
else
if(PlatinenVersion == 13)
{
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick);
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll);
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier);
}
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX);
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY);
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ);
break;
case 7:
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10);
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10);
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower);
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity);
break;
case 8:
LCD_printfxy(0,0,"Receiver");
LCD_printfxy(0,1,"RC-RSSI: %4i", PPM_in[0]);
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay);
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1);
break;
case 9:
LCD_printfxy(0,0,"Compass");
LCD_printfxy(0,1,"Magnet: %5i",KompassValue);
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad);
LCD_printfxy(0,3,"Setpoint: %5i",KompassSollWert);
break;
case 10:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]);
break;
case 11:
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]);
break;
case 12:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
/* case 13:
LCD_printfxy(0,0,"ExternControl " );
LCD_printfxy(0,1,"Ni:%4i Ro:%4i ",ExternControl.Nick,ExternControl.Roll);
LCD_printfxy(0,2,"Gs:%4i Gi:%4i ",ExternControl.Gas,ExternControl.Gier);
LCD_printfxy(0,3,"Hi:%4i Cf:%4i ",ExternControl.Hight,ExternControl.Config);
break;
*/
case 13:
LCD_printfxy(0,0,"BL-Ctrl Errors " );
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK);
// if(i*4 >= RequiredMotors) break;
}
break;
case 14:
LCD_printfxy(0,0,"BL Temperature" );
for(i=0;i<3;i++)
{
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature);
// if(4 + i * 4 >= RequiredMotors) break;
}
break;
case 15:
LCD_printfxy(0,0,"BL-Ctrl found " );
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7));
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7));
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7));
if(Motor[9].State>>7) LCD_printfxy(4,3,"10");
if(Motor[10].State>>7) LCD_printfxy(8,3,"11");
if(Motor[11].State>>7) LCD_printfxy(12,3,"12");
break;
case 16:
LCD_printfxy(0,0,"Flight-Time " );
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt);
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten);
LCD_printfxy(13,3,"(reset)");
if(RemoteKeys & KEY4)
{
FlugMinuten = 0;
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten);
}
break;
default:
if(MenuePunkt == MaxMenue) MaxMenue--;
MenuePunkt = 0;
break;
}
RemoteKeys = 0;
}
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/menu.h
0,0 → 1,17
#ifndef _MENU_H
#define _MENU_H
 
extern void Menu(void);
extern void LcdClear(void);
extern void Menu_Putchar(char c);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
 
extern unsigned char MaxMenue;
extern unsigned char MenuePunkt;
extern unsigned char RemoteKeys;
 
#define LCD_printfxy(x,y,format, args...) { DispPtr = (y) * 20 + (x); _printf_P(&Menu_Putchar,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(&Menu_Putchar, PSTR(format) , ## args);}
 
#endif //_MENU_H
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/menu.lst
0,0 → 1,2726
1 .file "menu.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global RemoteKeys
11 .global RemoteKeys
12 .section .bss
15 RemoteKeys:
16 0000 00 .skip 1,0
17 .global MenuePunkt
18 .global MenuePunkt
21 MenuePunkt:
22 0001 00 .skip 1,0
23 .global MaxMenue
24 .data
27 MaxMenue:
28 0000 10 .byte 16
29 .global DispPtr
30 .global DispPtr
31 .section .bss
34 DispPtr:
35 0002 00 .skip 1,0
36 .text
37 .global LcdClear
39 LcdClear:
40 /* prologue: frame size=0 */
41 /* prologue end (size=0) */
42 0000 90E2 ldi r25,lo8(32)
43 0002 E0E0 ldi r30,lo8(DisplayBuff)
44 0004 F0E0 ldi r31,hi8(DisplayBuff)
45 0006 8FE4 ldi r24,lo8(79)
46 .L5:
47 0008 9193 st Z+,r25
48 000a 8150 subi r24,lo8(-(-1))
49 000c 87FF sbrs r24,7
50 000e 00C0 rjmp .L5
51 /* epilogue: frame size=0 */
52 0010 0895 ret
53 /* epilogue end (size=1) */
54 /* function LcdClear size 9 (8) */
56 .global Menu_Putchar
58 Menu_Putchar:
59 /* prologue: frame size=0 */
60 /* prologue end (size=0) */
61 0012 9091 0000 lds r25,DispPtr
62 0016 9035 cpi r25,lo8(80)
63 0018 00F4 brsh .L8
64 001a E92F mov r30,r25
65 001c FF27 clr r31
66 001e E050 subi r30,lo8(-(DisplayBuff))
67 0020 F040 sbci r31,hi8(-(DisplayBuff))
68 0022 8083 st Z,r24
69 0024 9F5F subi r25,lo8(-(1))
70 0026 9093 0000 sts DispPtr,r25
71 .L8:
72 002a 0895 ret
73 /* epilogue: frame size=0 */
74 /* epilogue: noreturn */
75 /* epilogue end (size=0) */
76 /* function Menu_Putchar size 13 (13) */
78 .section .progmem.data,"a",@progbits
81 __c.0:
82 0000 5B25 695D .string "[%i]"
82 00
85 __c.1:
86 0005 5B25 695D .string "[%i]"
86 00
89 __c.2:
90 000a 2B20 4D69 .string "+ MikroKopter +"
90 6B72 6F4B
90 6F70 7465
90 7220 2B00
93 __c.3:
94 001a 4857 3A56 .string "HW:V%d.%d SW:%d.%d%c V4"
94 2564 2E25
94 6420 5357
94 3A25 642E
94 2564 2563
97 __c.4:
98 0032 5365 7474 .string "Setting:%d %s"
98 696E 673A
98 2564 2025
98 7300
101 __c.5:
102 0040 4D69 7865 .string "Mixer Error!"
102 7220 4572
102 726F 7221
102 00
105 __c.6:
106 004d 4552 5225 .string "ERR%2d:"
106 3264 3A00
109 __c.7:
110 0055 4861 7264 .string "Hardware Error 1:%d !!"
110 7761 7265
110 2045 7272
110 6F72 2031
110 3A25 6420
113 __c.8:
114 006c 4D69 7373 .string "Missing BL-Ctrl:%d!!"
114 696E 6720
114 424C 2D43
114 7472 6C3A
114 2564 2121
117 __c.9:
118 0081 4932 4320 .string "I2C ERROR!!!"
118 4552 524F
118 5221 2121
118 00
121 __c.10:
122 008e 4865 6967 .string "Height: %5i"
122 6874 3A20
122 2025 3569
122 00
125 __c.11:
126 009b 5365 7470 .string "Setpoint:%5i"
126 6F69 6E74
126 3A25 3569
126 00
129 __c.12:
130 00a8 5072 6573 .string "Pressure:%5i"
130 7375 7265
130 3A25 3569
130 00
133 __c.13:
134 00b5 4F66 6673 .string "Offset: %5i"
134 6574 3A20
134 2025 3569
134 00
137 __c.14:
138 00c2 4865 6967 .string "Height control"
138 6874 2063
138 6F6E 7472
138 6F6C 00
141 __c.15:
142 00d1 4449 5341 .string "DISABLED"
142 424C 4544
142 00
145 __c.16:
146 00da 6163 742E .string "act. bearing"
146 2062 6561
146 7269 6E67
146 00
149 __c.17:
150 00e7 4E69 636B .string "Nick: %5i"
150 3A20 2020
150 2020 2025
150 3569 00
153 __c.18:
154 00f6 526F 6C6C .string "Roll: %5i"
154 3A20 2020
154 2020 2025
154 3569 00
157 __c.19:
158 0105 436F 6D70 .string "Compass: %5i"
158 6173 733A
158 2020 2025
158 3569 00
161 __c.20:
162 0114 4B25 693A .string "K%i:%4i K%i:%4i "
162 2534 6920
162 204B 2569
162 3A25 3469
162 2000
165 __c.21:
166 0126 4E69 3A25 .string "Ni:%4i Ro:%4i "
166 3469 2020
166 526F 3A25
166 3469 2000
169 __c.22:
170 0136 4773 3A25 .string "Gs:%4i Gi:%4i "
170 3469 2020
170 4769 3A25
170 3469 2000
173 __c.23:
174 0146 5031 3A25 .string "P1:%4i P2:%4i "
174 3469 2020
174 5032 3A25
174 3469 2000
177 __c.24:
178 0156 5033 3A25 .string "P3:%4i P4:%4i "
178 3469 2020
178 5034 3A25
178 3469 2000
181 __c.25:
182 0166 4779 726F .string "Gyro - Sensor"
182 202D 2053
182 656E 736F
182 7200
185 __c.26:
186 0174 4E69 636B .string "Nick%4i (%3i.%i)"
186 2534 6920
186 2825 3369
186 2E25 6929
186 00
189 __c.27:
190 0185 526F 6C6C .string "Roll%4i (%3i.%i)"
190 2534 6920
190 2825 3369
190 2E25 6929
190 00
193 __c.28:
194 0196 4769 6572 .string "Gier%4i (%3i)"
194 2534 6920
194 2825 3369
194 2900
197 __c.29:
198 01a4 4E69 636B .string "Nick %4i (%3i.%x)"
198 2025 3469
198 2028 2533
198 692E 2578
198 2900
201 __c.30:
202 01b6 526F 6C6C .string "Roll %4i (%3i.%x)"
202 2025 3469
202 2028 2533
202 692E 2578
202 2900
205 __c.31:
206 01c8 5961 7720 .string "Yaw %4i (%3i)"
206 2025 3469
206 2028 2533
206 6929 00
209 __c.32:
210 01d7 4E69 636B .string "Nick %4i (%3i)(%3i)"
210 2025 3469
210 2028 2533
210 6929 2825
210 3369 2900
213 __c.33:
214 01eb 526F 6C6C .string "Roll %4i (%3i)(%3i)"
214 2025 3469
214 2028 2533
214 6929 2825
214 3369 2900
217 __c.34:
218 01ff 5961 7720 .string "Yaw %4i (%3i)(%3i)"
218 2025 3469
218 2028 2533
218 6929 2825
218 3369 2900
221 __c.35:
222 0213 4143 4320 .string "ACC - Sensor"
222 2D20 5365
222 6E73 6F72
222 00
225 __c.36:
226 0220 4E69 636B .string "Nick %4i (%3i)"
226 2025 3469
226 2028 2533
226 6929 00
229 __c.37:
230 022f 526F 6C6C .string "Roll %4i (%3i)"
230 2025 3469
230 2028 2533
230 6929 00
233 __c.38:
234 023e 5A20 2020 .string "Z %4i (%3i)"
234 2025 3469
234 2028 2533
234 6929 00
237 __c.39:
238 024d 566F 6C74 .string "Voltage: %3i.%1iV"
238 6167 653A
238 2020 2025
238 3369 2E25
238 3169 5600
241 __c.40:
242 0261 4375 7272 .string "Current: %3i.%1iA"
242 656E 743A
242 2020 2025
242 3369 2E25
242 3169 4100
245 __c.41:
246 0275 506F 7765 .string "Power: %4iW"
246 723A 2020
246 2020 2025
246 3469 5700
249 __c.42:
250 0285 4469 7363 .string "Discharge: %5imAh"
250 6861 7267
250 653A 2025
250 3569 6D41
250 6800
253 __c.43:
254 0297 5265 6365 .string "Receiver"
254 6976 6572
254 00
257 __c.44:
258 02a0 5243 2D52 .string "RC-RSSI: %4i"
258 5353 493A
258 2020 2020
258 2534 6900
261 __c.45:
262 02b0 5243 2D51 .string "RC-Quality: %4i"
262 7561 6C69
262 7479 3A20
262 2534 6900
265 __c.46:
266 02c0 5243 2D43 .string "RC-Channels:%4i"
266 6861 6E6E
266 656C 733A
266 2534 6900
269 __c.47:
270 02d0 436F 6D70 .string "Compass"
270 6173 7300
273 __c.48:
274 02d8 4D61 676E .string "Magnet: %5i"
274 6574 3A20
274 2020 2535
274 6900
277 __c.49:
278 02e6 4779 726F .string "Gyro: %5i"
278 3A20 2020
278 2020 2535
278 6900
281 __c.50:
282 02f4 5365 7470 .string "Setpoint: %5i"
282 6F69 6E74
282 3A20 2535
282 6900
285 __c.51:
286 0302 506F 7469 .string "Poti%i: %3i"
286 2569 3A20
286 2025 3369
286 00
289 __c.52:
290 030f 506F 7469 .string "Poti%i: %3i"
290 2569 3A20
290 2025 3369
290 00
293 __c.53:
294 031c 5365 7276 .string "Servo "
294 6F20 2000
297 __c.54:
298 0324 5365 7470 .string "Setpoint %3i"
298 6F69 6E74
298 2020 2533
298 6900
301 __c.55:
302 0332 506F 7369 .string "Position: %3i"
302 7469 6F6E
302 3A20 2533
302 6900
305 __c.56:
306 0340 5261 6E67 .string "Range:%3i-%3i"
306 653A 2533
306 692D 2533
306 6900
309 __c.57:
310 034e 424C 2D43 .string "BL-Ctrl Errors "
310 7472 6C20
310 4572 726F
310 7273 2000
313 __c.58:
314 035e 2533 6420 .string "%3d %3d %3d %3d "
314 2533 6420
314 2533 6420
314 2533 6420
314 00
317 __c.59:
318 036f 424C 2054 .string "BL Temperature"
318 656D 7065
318 7261 7475
318 7265 00
321 __c.60:
322 037e 2533 6420 .string "%3d %3d %3d %3d "
322 2533 6420
322 2533 6420
322 2533 6420
322 00
325 __c.61:
326 038f 424C 2D43 .string "BL-Ctrl found "
326 7472 6C20
326 666F 756E
326 6420 00
329 __c.62:
330 039e 2025 6320 .string " %c %c %c %c "
330 2020 2563
330 2020 2025
330 6320 2020
330 2563 2000
333 __c.63:
334 03b2 2025 6320 .string " %c %c %c %c "
334 2020 2563
334 2020 2025
334 6320 2020
334 2563 2000
337 __c.64:
338 03c6 2025 6320 .string " %c - - - "
338 2020 2D20
338 2020 2D20
338 2020 2D20
338 00
341 __c.65:
342 03d7 3130 00 .string "10"
345 __c.66:
346 03da 3131 00 .string "11"
349 __c.67:
350 03dd 3132 00 .string "12"
353 __c.68:
354 03e0 466C 6967 .string "Flight-Time "
354 6874 2D54
354 696D 6520
354 2000
357 __c.69:
358 03ee 546F 7461 .string "Total:%5umin"
358 6C3A 2535
358 756D 696E
358 00
361 __c.70:
362 03fb 4163 743A .string "Act: %5umin"
362 2020 2535
362 756D 696E
362 00
365 __c.71:
366 0408 2872 6573 .string "(reset)"
366 6574 2900
367 .text
368 .global Menu
370 Menu:
371 /* prologue: frame size=0 */
372 002c AF92 push r10
373 002e BF92 push r11
374 0030 CF92 push r12
375 0032 DF92 push r13
376 0034 FF92 push r15
377 0036 0F93 push r16
378 0038 1F93 push r17
379 003a CF93 push r28
380 003c DF93 push r29
381 /* prologue end (size=9) */
382 003e 2091 0000 lds r18,RemoteKeys
383 0042 20FF sbrs r18,0
384 0044 00C0 rjmp .L11
385 0046 8091 0000 lds r24,MenuePunkt
386 004a 8823 tst r24
387 004c 01F0 breq .L12
388 004e 8150 subi r24,lo8(-(-1))
389 0050 00C0 rjmp .L115
390 .L12:
391 0052 8091 0000 lds r24,MaxMenue
392 .L115:
393 0056 8093 0000 sts MenuePunkt,r24
394 .L11:
395 005a 21FF sbrs r18,1
396 005c 00C0 rjmp .L14
397 005e 9091 0000 lds r25,MenuePunkt
398 0062 8091 0000 lds r24,MaxMenue
399 0066 9817 cp r25,r24
400 0068 01F4 brne .L15
401 006a 1092 0000 sts MenuePunkt,__zero_reg__
402 006e 00C0 rjmp .L14
403 .L15:
404 0070 9F5F subi r25,lo8(-(1))
405 0072 9093 0000 sts MenuePunkt,r25
406 .L14:
407 0076 822F mov r24,r18
408 0078 9927 clr r25
409 007a 80FF sbrs r24,0
410 007c 00C0 rjmp .L17
411 007e 81FF sbrs r24,1
412 0080 00C0 rjmp .L17
413 0082 1092 0000 sts MenuePunkt,__zero_reg__
414 .L17:
415 0086 0E94 0000 call LcdClear
416 008a 8091 0000 lds r24,MenuePunkt
417 008e 282F mov r18,r24
418 0090 3327 clr r19
419 0092 90E0 ldi r25,lo8(pm(Menu_Putchar))
420 0094 C92E mov r12,r25
421 0096 90E0 ldi r25,hi8(pm(Menu_Putchar))
422 0098 D92E mov r13,r25
423 009a C091 0000 lds r28,_printf_P
424 009e D091 0000 lds r29,(_printf_P)+1
425 00a2 8A30 cpi r24,lo8(10)
426 00a4 00F4 brsh .L18
427 00a6 81E1 ldi r24,lo8(17)
428 00a8 8093 0000 sts DispPtr,r24
429 00ac 3F93 push r19
430 00ae 2F93 push r18
431 00b0 80E0 ldi r24,lo8(__c.0)
432 00b2 90E0 ldi r25,hi8(__c.0)
433 00b4 9F93 push r25
434 00b6 8F93 push r24
435 00b8 DF92 push r13
436 00ba CF92 push r12
437 00bc FE01 movw r30,r28
438 00be 0995 icall
439 00c0 2DB7 in r18,__SP_L__
440 00c2 3EB7 in r19,__SP_H__
441 00c4 2A5F subi r18,lo8(-(6))
442 00c6 3F4F sbci r19,hi8(-(6))
443 00c8 2DBF out __SP_L__,r18
444 00ca 00C0 rjmp .L19
445 .L18:
446 00cc 80E1 ldi r24,lo8(16)
447 00ce 8093 0000 sts DispPtr,r24
448 00d2 3F93 push r19
449 00d4 2F93 push r18
450 00d6 80E0 ldi r24,lo8(__c.1)
451 00d8 90E0 ldi r25,hi8(__c.1)
452 00da 9F93 push r25
453 00dc 8F93 push r24
454 00de DF92 push r13
455 00e0 CF92 push r12
456 00e2 FE01 movw r30,r28
457 00e4 0995 icall
458 00e6 8DB7 in r24,__SP_L__
459 00e8 9EB7 in r25,__SP_H__
460 00ea 0696 adiw r24,6
461 00ec 8DBF out __SP_L__,r24
462 .L19:
463 00ee 2091 0000 lds r18,MenuePunkt
464 00f2 822F mov r24,r18
465 00f4 9927 clr r25
466 00f6 AA27 clr r26
467 00f8 BB27 clr r27
468 00fa FC01 movw r30,r24
469 00fc 4197 sbiw r24,17
470 00fe 00F0 brlo .+4
471 0100 0C94 0000 jmp .L102
472 0104 E050 subi r30,lo8(-(pm(.L104)))
473 0106 F040 sbci r31,hi8(-(pm(.L104)))
474 0108 00E0 ldi r16,lo8(pm(Menu_Putchar))
475 010a C02E mov r12,r16
476 010c 00E0 ldi r16,hi8(pm(Menu_Putchar))
477 010e D02E mov r13,r16
478 0110 C091 0000 lds r28,_printf_P
479 0114 D091 0000 lds r29,(_printf_P)+1
480 0118 0C94 0000 jmp __tablejump2__
481 .data
482 .section .progmem.gcc_sw_table, "a", @progbits
483 .p2align 1
484 .L104:
485 0000 0000 .word pm(.L21)
486 0002 0000 .word pm(.L31)
487 0004 0000 .word pm(.L34)
488 0006 0000 .word pm(.L37)
489 0008 0000 .word pm(.L42)
490 000a 0000 .word pm(.L43)
491 000c 0000 .word pm(.L70)
492 000e 0000 .word pm(.L71)
493 0010 0000 .word pm(.L72)
494 0012 0000 .word pm(.L73)
495 0014 0000 .word pm(.L74)
496 0016 0000 .word pm(.L79)
497 0018 0000 .word pm(.L84)
498 001a 0000 .word pm(.L86)
499 001c 0000 .word pm(.L91)
500 001e 0000 .word pm(.L96)
501 0020 0000 .word pm(.L100)
502 .text
503 .L21:
504 011c 1092 0000 sts DispPtr,__zero_reg__
505 0120 80E0 ldi r24,lo8(__c.2)
506 0122 90E0 ldi r25,hi8(__c.2)
507 0124 9F93 push r25
508 0126 8F93 push r24
509 0128 00E0 ldi r16,lo8(pm(Menu_Putchar))
510 012a 10E0 ldi r17,hi8(pm(Menu_Putchar))
511 012c DF92 push r13
512 012e CF92 push r12
513 0130 FE01 movw r30,r28
514 0132 0995 icall
515 0134 84E1 ldi r24,lo8(20)
516 0136 8093 0000 sts DispPtr,r24
517 013a 0F90 pop __tmp_reg__
518 013c 0F90 pop __tmp_reg__
519 013e 0F90 pop __tmp_reg__
520 0140 0F90 pop __tmp_reg__
521 0142 84E6 ldi r24,lo8(100)
522 0144 90E0 ldi r25,hi8(100)
523 0146 9F93 push r25
524 0148 8F93 push r24
525 014a 8AE5 ldi r24,lo8(90)
526 014c 90E0 ldi r25,hi8(90)
527 014e 9F93 push r25
528 0150 8F93 push r24
529 0152 1F92 push __zero_reg__
530 0154 1F92 push __zero_reg__
531 0156 8091 0000 lds r24,PlatinenVersion
532 015a 6AE0 ldi r22,lo8(10)
533 015c 0E94 0000 call __udivmodqi4
534 0160 892F mov r24,r25
535 0162 9927 clr r25
536 0164 9F93 push r25
537 0166 8F93 push r24
538 0168 8091 0000 lds r24,PlatinenVersion
539 016c 0E94 0000 call __udivmodqi4
540 0170 9927 clr r25
541 0172 9F93 push r25
542 0174 8F93 push r24
543 0176 80E0 ldi r24,lo8(__c.3)
544 0178 90E0 ldi r25,hi8(__c.3)
545 017a 9F93 push r25
546 017c 8F93 push r24
547 017e DF92 push r13
548 0180 CF92 push r12
549 0182 E091 0000 lds r30,_printf_P
550 0186 F091 0000 lds r31,(_printf_P)+1
551 018a 0995 icall
552 018c 88E2 ldi r24,lo8(40)
553 018e 8093 0000 sts DispPtr,r24
554 0192 EDB7 in r30,__SP_L__
555 0194 FEB7 in r31,__SP_H__
556 0196 3E96 adiw r30,14
557 0198 EDBF out __SP_L__,r30
558 019a 80E0 ldi r24,lo8(Mixer+1)
559 019c 90E0 ldi r25,hi8(Mixer+1)
560 019e 9F93 push r25
561 01a0 8F93 push r24
562 01a2 0E94 0000 call GetActiveParamSet
563 01a6 9927 clr r25
564 01a8 9F93 push r25
565 01aa 8F93 push r24
566 01ac 80E0 ldi r24,lo8(__c.4)
567 01ae 90E0 ldi r25,hi8(__c.4)
568 01b0 9F93 push r25
569 01b2 8F93 push r24
570 01b4 DF92 push r13
571 01b6 CF92 push r12
572 01b8 E091 0000 lds r30,_printf_P
573 01bc F091 0000 lds r31,(_printf_P)+1
574 01c0 0995 icall
575 01c2 8091 0000 lds r24,VersionInfo+6
576 01c6 9927 clr r25
577 01c8 2DB7 in r18,__SP_L__
578 01ca 3EB7 in r19,__SP_H__
579 01cc 285F subi r18,lo8(-(8))
580 01ce 3F4F sbci r19,hi8(-(8))
581 01d0 2DBF out __SP_L__,r18
582 01d2 EC01 movw r28,r24
583 01d4 C071 andi r28,lo8(16)
584 01d6 D070 andi r29,hi8(16)
585 01d8 84FF sbrs r24,4
586 01da 00C0 rjmp .L22
587 01dc 8CE3 ldi r24,lo8(60)
588 01de 8093 0000 sts DispPtr,r24
589 01e2 80E0 ldi r24,lo8(__c.5)
590 01e4 90E0 ldi r25,hi8(__c.5)
591 01e6 00C0 rjmp .L124
592 .L22:
593 01e8 9091 0000 lds r25,NC_ErrorCode
594 01ec 9923 tst r25
595 01ee 01F0 breq .L24
596 01f0 8CE3 ldi r24,lo8(60)
597 01f2 8093 0000 sts DispPtr,r24
598 01f6 892F mov r24,r25
599 01f8 9927 clr r25
600 01fa 9F93 push r25
601 01fc 8F93 push r24
602 01fe 80E0 ldi r24,lo8(__c.6)
603 0200 90E0 ldi r25,hi8(__c.6)
604 0202 9F93 push r25
605 0204 8F93 push r24
606 0206 1F93 push r17
607 0208 0F93 push r16
608 020a E091 0000 lds r30,_printf_P
609 020e F091 0000 lds r31,(_printf_P)+1
610 0212 0995 icall
611 0214 DF93 push r29
612 0216 CF93 push r28
613 0218 9091 0000 lds r25,NC_ErrorCode
614 021c 81E1 ldi r24,lo8(17)
615 021e 989F mul r25,r24
616 0220 C001 movw r24,r0
617 0222 1124 clr r1
618 0224 8050 subi r24,lo8(-(NC_ERROR_TEXT))
619 0226 9040 sbci r25,hi8(-(NC_ERROR_TEXT))
620 0228 9F93 push r25
621 022a 8F93 push r24
622 022c 1F93 push r17
623 022e 0F93 push r16
624 0230 E091 0000 lds r30,_printf_P
625 0234 F091 0000 lds r31,(_printf_P)+1
626 0238 0995 icall
627 023a 8DB7 in r24,__SP_L__
628 023c 9EB7 in r25,__SP_H__
629 023e 0C96 adiw r24,12
630 0240 00C0 rjmp .L120
631 .L24:
632 0242 9091 0000 lds r25,VersionInfo+5
633 0246 9923 tst r25
634 0248 01F0 breq .L26
635 024a 8CE3 ldi r24,lo8(60)
636 024c 8093 0000 sts DispPtr,r24
637 0250 892F mov r24,r25
638 0252 9927 clr r25
639 0254 9F93 push r25
640 0256 8F93 push r24
641 0258 80E0 ldi r24,lo8(__c.7)
642 025a 90E0 ldi r25,hi8(__c.7)
643 025c 9F93 push r25
644 025e 8F93 push r24
645 0260 1F93 push r17
646 0262 0F93 push r16
647 0264 E091 0000 lds r30,_printf_P
648 0268 F091 0000 lds r31,(_printf_P)+1
649 026c 0995 icall
650 026e EDB7 in r30,__SP_L__
651 0270 FEB7 in r31,__SP_H__
652 0272 3696 adiw r30,6
653 0274 00C0 rjmp .L117
654 .L26:
655 0276 9091 0000 lds r25,MissingMotor
656 027a 9923 tst r25
657 027c 01F0 breq .L28
658 027e 8CE3 ldi r24,lo8(60)
659 0280 8093 0000 sts DispPtr,r24
660 0284 892F mov r24,r25
661 0286 9927 clr r25
662 0288 9F93 push r25
663 028a 8F93 push r24
664 028c 80E0 ldi r24,lo8(__c.8)
665 028e 90E0 ldi r25,hi8(__c.8)
666 0290 9F93 push r25
667 0292 8F93 push r24
668 0294 1F93 push r17
669 0296 0F93 push r16
670 0298 00C0 rjmp .L123
671 .L28:
672 029a 8091 0000 lds r24,I2CTimeout
673 029e 9091 0000 lds r25,(I2CTimeout)+1
674 02a2 0697 sbiw r24,6
675 02a4 00F0 brlo .+4
676 02a6 0C94 0000 jmp .L20
677 02aa 8CE3 ldi r24,lo8(60)
678 02ac 8093 0000 sts DispPtr,r24
679 02b0 80E0 ldi r24,lo8(__c.9)
680 02b2 90E0 ldi r25,hi8(__c.9)
681 02b4 00C0 rjmp .L125
682 .L31:
683 02b6 8091 0000 lds r24,Parameter_GlobalConfig
684 02ba 10E0 ldi r17,lo8(pm(Menu_Putchar))
685 02bc C12E mov r12,r17
686 02be 10E0 ldi r17,hi8(pm(Menu_Putchar))
687 02c0 D12E mov r13,r17
688 02c2 C091 0000 lds r28,_printf_P
689 02c6 D091 0000 lds r29,(_printf_P)+1
690 02ca 80FF sbrs r24,0
691 02cc 00C0 rjmp .L32
692 02ce 1092 0000 sts DispPtr,__zero_reg__
693 02d2 8091 0000 lds r24,HoehenWert
694 02d6 9091 0000 lds r25,(HoehenWert)+1
695 02da A091 0000 lds r26,(HoehenWert)+2
696 02de B091 0000 lds r27,(HoehenWert)+3
697 02e2 BC01 movw r22,r24
698 02e4 CD01 movw r24,r26
699 02e6 25E0 ldi r18,lo8(5)
700 02e8 30E0 ldi r19,hi8(5)
701 02ea 40E0 ldi r20,hlo8(5)
702 02ec 50E0 ldi r21,hhi8(5)
703 02ee 0E94 0000 call __divmodsi4
704 02f2 3F93 push r19
705 02f4 2F93 push r18
706 02f6 80E0 ldi r24,lo8(__c.10)
707 02f8 90E0 ldi r25,hi8(__c.10)
708 02fa 9F93 push r25
709 02fc 8F93 push r24
710 02fe DF92 push r13
711 0300 CF92 push r12
712 0302 FE01 movw r30,r28
713 0304 0995 icall
714 0306 84E1 ldi r24,lo8(20)
715 0308 8093 0000 sts DispPtr,r24
716 030c 8DB7 in r24,__SP_L__
717 030e 9EB7 in r25,__SP_H__
718 0310 0696 adiw r24,6
719 0312 8DBF out __SP_L__,r24
720 0314 8091 0000 lds r24,SollHoehe
721 0318 9091 0000 lds r25,(SollHoehe)+1
722 031c A091 0000 lds r26,(SollHoehe)+2
723 0320 B091 0000 lds r27,(SollHoehe)+3
724 0324 BC01 movw r22,r24
725 0326 CD01 movw r24,r26
726 0328 25E0 ldi r18,lo8(5)
727 032a 30E0 ldi r19,hi8(5)
728 032c 40E0 ldi r20,hlo8(5)
729 032e 50E0 ldi r21,hhi8(5)
730 0330 0E94 0000 call __divmodsi4
731 0334 3F93 push r19
732 0336 2F93 push r18
733 0338 80E0 ldi r24,lo8(__c.11)
734 033a 90E0 ldi r25,hi8(__c.11)
735 033c 9F93 push r25
736 033e 8F93 push r24
737 0340 DF92 push r13
738 0342 CF92 push r12
739 0344 E091 0000 lds r30,_printf_P
740 0348 F091 0000 lds r31,(_printf_P)+1
741 034c 0995 icall
742 034e 88E2 ldi r24,lo8(40)
743 0350 8093 0000 sts DispPtr,r24
744 0354 EDB7 in r30,__SP_L__
745 0356 FEB7 in r31,__SP_H__
746 0358 3696 adiw r30,6
747 035a EDBF out __SP_L__,r30
748 035c 8091 0000 lds r24,MessLuftdruck
749 0360 9091 0000 lds r25,(MessLuftdruck)+1
750 0364 9F93 push r25
751 0366 8F93 push r24
752 0368 80E0 ldi r24,lo8(__c.12)
753 036a 90E0 ldi r25,hi8(__c.12)
754 036c 9F93 push r25
755 036e 8F93 push r24
756 0370 DF92 push r13
757 0372 CF92 push r12
758 0374 E091 0000 lds r30,_printf_P
759 0378 F091 0000 lds r31,(_printf_P)+1
760 037c 0995 icall
761 037e 8CE3 ldi r24,lo8(60)
762 0380 8093 0000 sts DispPtr,r24
763 0384 2DB7 in r18,__SP_L__
764 0386 3EB7 in r19,__SP_H__
765 0388 2A5F subi r18,lo8(-(6))
766 038a 3F4F sbci r19,hi8(-(6))
767 038c 2DBF out __SP_L__,r18
768 038e 87B5 in r24,71-0x20
769 0390 9927 clr r25
770 0392 9F93 push r25
771 0394 8F93 push r24
772 0396 80E0 ldi r24,lo8(__c.13)
773 0398 90E0 ldi r25,hi8(__c.13)
774 039a 9F93 push r25
775 039c 8F93 push r24
776 039e DF92 push r13
777 03a0 CF92 push r12
778 03a2 00C0 rjmp .L119
779 .L32:
780 03a4 1092 0000 sts DispPtr,__zero_reg__
781 03a8 80E0 ldi r24,lo8(__c.14)
782 03aa 90E0 ldi r25,hi8(__c.14)
783 03ac 9F93 push r25
784 03ae 8F93 push r24
785 03b0 DF92 push r13
786 03b2 CF92 push r12
787 03b4 FE01 movw r30,r28
788 03b6 0995 icall
789 03b8 84E1 ldi r24,lo8(20)
790 03ba 8093 0000 sts DispPtr,r24
791 03be 0F90 pop __tmp_reg__
792 03c0 0F90 pop __tmp_reg__
793 03c2 0F90 pop __tmp_reg__
794 03c4 0F90 pop __tmp_reg__
795 03c6 80E0 ldi r24,lo8(__c.15)
796 03c8 90E0 ldi r25,hi8(__c.15)
797 .L124:
798 03ca 9F93 push r25
799 03cc 8F93 push r24
800 03ce DF92 push r13
801 03d0 CF92 push r12
802 03d2 00C0 rjmp .L118
803 .L34:
804 03d4 1092 0000 sts DispPtr,__zero_reg__
805 03d8 80E0 ldi r24,lo8(__c.16)
806 03da 90E0 ldi r25,hi8(__c.16)
807 03dc 9F93 push r25
808 03de 8F93 push r24
809 03e0 00E0 ldi r16,lo8(pm(Menu_Putchar))
810 03e2 10E0 ldi r17,hi8(pm(Menu_Putchar))
811 03e4 DF92 push r13
812 03e6 CF92 push r12
813 03e8 FE01 movw r30,r28
814 03ea 0995 icall
815 03ec 84E1 ldi r24,lo8(20)
816 03ee 8093 0000 sts DispPtr,r24
817 03f2 0F90 pop __tmp_reg__
818 03f4 0F90 pop __tmp_reg__
819 03f6 0F90 pop __tmp_reg__
820 03f8 0F90 pop __tmp_reg__
821 03fa 8091 0000 lds r24,IntegralNick
822 03fe 9091 0000 lds r25,(IntegralNick)+1
823 0402 A091 0000 lds r26,(IntegralNick)+2
824 0406 B091 0000 lds r27,(IntegralNick)+3
825 040a B7FF sbrs r27,7
826 040c 00C0 rjmp .L35
827 040e 8150 subi r24,lo8(-(1023))
828 0410 9C4F sbci r25,hi8(-(1023))
829 0412 AF4F sbci r26,hlo8(-(1023))
830 0414 BF4F sbci r27,hhi8(-(1023))
831 .L35:
832 0416 CAE0 ldi r28,10
833 0418 B595 1: asr r27
834 041a A795 ror r26
835 041c 9795 ror r25
836 041e 8795 ror r24
837 0420 CA95 dec r28
838 0422 01F4 brne 1b
839 0424 BF93 push r27
840 0426 AF93 push r26
841 0428 9F93 push r25
842 042a 8F93 push r24
843 042c 80E0 ldi r24,lo8(__c.17)
844 042e 90E0 ldi r25,hi8(__c.17)
845 0430 9F93 push r25
846 0432 8F93 push r24
847 0434 1F93 push r17
848 0436 0F93 push r16
849 0438 E091 0000 lds r30,_printf_P
850 043c F091 0000 lds r31,(_printf_P)+1
851 0440 0995 icall
852 0442 88E2 ldi r24,lo8(40)
853 0444 8093 0000 sts DispPtr,r24
854 0448 EDB7 in r30,__SP_L__
855 044a FEB7 in r31,__SP_H__
856 044c 3896 adiw r30,8
857 044e EDBF out __SP_L__,r30
858 0450 8091 0000 lds r24,IntegralRoll
859 0454 9091 0000 lds r25,(IntegralRoll)+1
860 0458 A091 0000 lds r26,(IntegralRoll)+2
861 045c B091 0000 lds r27,(IntegralRoll)+3
862 0460 B7FF sbrs r27,7
863 0462 00C0 rjmp .L36
864 0464 8150 subi r24,lo8(-(1023))
865 0466 9C4F sbci r25,hi8(-(1023))
866 0468 AF4F sbci r26,hlo8(-(1023))
867 046a BF4F sbci r27,hhi8(-(1023))
868 .L36:
869 046c FAE0 ldi r31,10
870 046e B595 1: asr r27
871 0470 A795 ror r26
872 0472 9795 ror r25
873 0474 8795 ror r24
874 0476 FA95 dec r31
875 0478 01F4 brne 1b
876 047a BF93 push r27
877 047c AF93 push r26
878 047e 9F93 push r25
879 0480 8F93 push r24
880 0482 80E0 ldi r24,lo8(__c.18)
881 0484 90E0 ldi r25,hi8(__c.18)
882 0486 9F93 push r25
883 0488 8F93 push r24
884 048a 1F93 push r17
885 048c 0F93 push r16
886 048e E091 0000 lds r30,_printf_P
887 0492 F091 0000 lds r31,(_printf_P)+1
888 0496 0995 icall
889 0498 8CE3 ldi r24,lo8(60)
890 049a 8093 0000 sts DispPtr,r24
891 049e 2DB7 in r18,__SP_L__
892 04a0 3EB7 in r19,__SP_H__
893 04a2 285F subi r18,lo8(-(8))
894 04a4 3F4F sbci r19,hi8(-(8))
895 04a6 2DBF out __SP_L__,r18
896 04a8 8091 0000 lds r24,ErsatzKompassInGrad
897 04ac 9091 0000 lds r25,(ErsatzKompassInGrad)+1
898 04b0 9F93 push r25
899 04b2 8F93 push r24
900 04b4 80E0 ldi r24,lo8(__c.19)
901 04b6 90E0 ldi r25,hi8(__c.19)
902 04b8 9F93 push r25
903 04ba 8F93 push r24
904 04bc 1F93 push r17
905 04be 0F93 push r16
906 .L119:
907 04c0 E091 0000 lds r30,_printf_P
908 04c4 F091 0000 lds r31,(_printf_P)+1
909 04c8 0995 icall
910 04ca 8DB7 in r24,__SP_L__
911 04cc 9EB7 in r25,__SP_H__
912 04ce 0696 adiw r24,6
913 .L120:
914 04d0 8DBF out __SP_L__,r24
915 04d2 00C0 rjmp .L20
916 .L37:
917 04d4 E1E0 ldi r30,lo8(1)
918 04d6 FE2E mov r15,r30
919 04d8 C1E0 ldi r28,lo8(1)
920 04da D0E0 ldi r29,hi8(1)
921 04dc 00E0 ldi r16,lo8(PPM_in+2)
922 04de 10E0 ldi r17,hi8(PPM_in+2)
923 .L41:
924 04e0 9F2D mov r25,r15
925 04e2 9695 lsr r25
926 04e4 84E1 ldi r24,lo8(20)
927 04e6 989F mul r25,r24
928 04e8 C001 movw r24,r0
929 04ea 1124 clr r1
930 04ec 8093 0000 sts DispPtr,r24
931 04f0 F801 movw r30,r16
932 04f2 8281 ldd r24,Z+2
933 04f4 9381 ldd r25,Z+3
934 04f6 9F93 push r25
935 04f8 8F93 push r24
936 04fa 2196 adiw r28,1
937 04fc DF93 push r29
938 04fe CF93 push r28
939 0500 2197 sbiw r28,1
940 0502 8081 ld r24,Z
941 0504 9181 ldd r25,Z+1
942 0506 9F93 push r25
943 0508 8F93 push r24
944 050a DF93 push r29
945 050c CF93 push r28
946 050e 80E0 ldi r24,lo8(__c.20)
947 0510 90E0 ldi r25,hi8(__c.20)
948 0512 9F93 push r25
949 0514 8F93 push r24
950 0516 80E0 ldi r24,lo8(pm(Menu_Putchar))
951 0518 90E0 ldi r25,hi8(pm(Menu_Putchar))
952 051a 9F93 push r25
953 051c 8F93 push r24
954 051e E091 0000 lds r30,_printf_P
955 0522 F091 0000 lds r31,(_printf_P)+1
956 0526 0995 icall
957 0528 2DB7 in r18,__SP_L__
958 052a 3EB7 in r19,__SP_H__
959 052c 245F subi r18,lo8(-(12))
960 052e 3F4F sbci r19,hi8(-(12))
961 0530 2DBF out __SP_L__,r18
962 0532 32E0 ldi r19,lo8(2)
963 0534 F30E add r15,r19
964 0536 2296 adiw r28,2
965 0538 0C5F subi r16,lo8(-(4))
966 053a 1F4F sbci r17,hi8(-(4))
967 053c 88E0 ldi r24,lo8(8)
968 053e 8F15 cp r24,r15
969 0540 00F4 brsh .L41
970 0542 00C0 rjmp .L20
971 .L42:
972 0544 1092 0000 sts DispPtr,__zero_reg__
973 0548 8091 0000 lds r24,EE_Parameter+2
974 054c E82F mov r30,r24
975 054e FF27 clr r31
976 0550 EE0F add r30,r30
977 0552 FF1F adc r31,r31
978 0554 E050 subi r30,lo8(-(PPM_in))
979 0556 F040 sbci r31,hi8(-(PPM_in))
980 0558 8081 ld r24,Z
981 055a 9181 ldd r25,Z+1
982 055c 9F93 push r25
983 055e 8F93 push r24
984 0560 8091 0000 lds r24,EE_Parameter+1
985 0564 E82F mov r30,r24
986 0566 FF27 clr r31
987 0568 EE0F add r30,r30
988 056a FF1F adc r31,r31
989 056c E050 subi r30,lo8(-(PPM_in))
990 056e F040 sbci r31,hi8(-(PPM_in))
991 0570 8081 ld r24,Z
992 0572 9181 ldd r25,Z+1
993 0574 9F93 push r25
994 0576 8F93 push r24
995 0578 80E0 ldi r24,lo8(__c.21)
996 057a 90E0 ldi r25,hi8(__c.21)
997 057c 9F93 push r25
998 057e 8F93 push r24
999 0580 DF92 push r13
1000 0582 CF92 push r12
1001 0584 FE01 movw r30,r28
1002 0586 0995 icall
1003 0588 84E1 ldi r24,lo8(20)
1004 058a 8093 0000 sts DispPtr,r24
1005 058e EDB7 in r30,__SP_L__
1006 0590 FEB7 in r31,__SP_H__
1007 0592 3896 adiw r30,8
1008 0594 EDBF out __SP_L__,r30
1009 0596 8091 0000 lds r24,EE_Parameter+4
1010 059a E82F mov r30,r24
1011 059c FF27 clr r31
1012 059e EE0F add r30,r30
1013 05a0 FF1F adc r31,r31
1014 05a2 E050 subi r30,lo8(-(PPM_in))
1015 05a4 F040 sbci r31,hi8(-(PPM_in))
1016 05a6 8081 ld r24,Z
1017 05a8 9181 ldd r25,Z+1
1018 05aa 9F93 push r25
1019 05ac 8F93 push r24
1020 05ae 8091 0000 lds r24,EE_Parameter+3
1021 05b2 E82F mov r30,r24
1022 05b4 FF27 clr r31
1023 05b6 EE0F add r30,r30
1024 05b8 FF1F adc r31,r31
1025 05ba E050 subi r30,lo8(-(PPM_in))
1026 05bc F040 sbci r31,hi8(-(PPM_in))
1027 05be 8081 ld r24,Z
1028 05c0 9181 ldd r25,Z+1
1029 05c2 8158 subi r24,lo8(-(127))
1030 05c4 9F4F sbci r25,hi8(-(127))
1031 05c6 9F93 push r25
1032 05c8 8F93 push r24
1033 05ca 80E0 ldi r24,lo8(__c.22)
1034 05cc 90E0 ldi r25,hi8(__c.22)
1035 05ce 9F93 push r25
1036 05d0 8F93 push r24
1037 05d2 DF92 push r13
1038 05d4 CF92 push r12
1039 05d6 E091 0000 lds r30,_printf_P
1040 05da F091 0000 lds r31,(_printf_P)+1
1041 05de 0995 icall
1042 05e0 88E2 ldi r24,lo8(40)
1043 05e2 8093 0000 sts DispPtr,r24
1044 05e6 2DB7 in r18,__SP_L__
1045 05e8 3EB7 in r19,__SP_H__
1046 05ea 285F subi r18,lo8(-(8))
1047 05ec 3F4F sbci r19,hi8(-(8))
1048 05ee 2DBF out __SP_L__,r18
1049 05f0 8091 0000 lds r24,EE_Parameter+6
1050 05f4 E82F mov r30,r24
1051 05f6 FF27 clr r31
1052 05f8 EE0F add r30,r30
1053 05fa FF1F adc r31,r31
1054 05fc E050 subi r30,lo8(-(PPM_in))
1055 05fe F040 sbci r31,hi8(-(PPM_in))
1056 0600 8081 ld r24,Z
1057 0602 9181 ldd r25,Z+1
1058 0604 8158 subi r24,lo8(-(127))
1059 0606 9F4F sbci r25,hi8(-(127))
1060 0608 9F93 push r25
1061 060a 8F93 push r24
1062 060c 8091 0000 lds r24,EE_Parameter+5
1063 0610 E82F mov r30,r24
1064 0612 FF27 clr r31
1065 0614 EE0F add r30,r30
1066 0616 FF1F adc r31,r31
1067 0618 E050 subi r30,lo8(-(PPM_in))
1068 061a F040 sbci r31,hi8(-(PPM_in))
1069 061c 8081 ld r24,Z
1070 061e 9181 ldd r25,Z+1
1071 0620 8158 subi r24,lo8(-(127))
1072 0622 9F4F sbci r25,hi8(-(127))
1073 0624 9F93 push r25
1074 0626 8F93 push r24
1075 0628 80E0 ldi r24,lo8(__c.23)
1076 062a 90E0 ldi r25,hi8(__c.23)
1077 062c 9F93 push r25
1078 062e 8F93 push r24
1079 0630 DF92 push r13
1080 0632 CF92 push r12
1081 0634 E091 0000 lds r30,_printf_P
1082 0638 F091 0000 lds r31,(_printf_P)+1
1083 063c 0995 icall
1084 063e 8CE3 ldi r24,lo8(60)
1085 0640 8093 0000 sts DispPtr,r24
1086 0644 8DB7 in r24,__SP_L__
1087 0646 9EB7 in r25,__SP_H__
1088 0648 0896 adiw r24,8
1089 064a 8DBF out __SP_L__,r24
1090 064c 8091 0000 lds r24,EE_Parameter+8
1091 0650 E82F mov r30,r24
1092 0652 FF27 clr r31
1093 0654 EE0F add r30,r30
1094 0656 FF1F adc r31,r31
1095 0658 E050 subi r30,lo8(-(PPM_in))
1096 065a F040 sbci r31,hi8(-(PPM_in))
1097 065c 8081 ld r24,Z
1098 065e 9181 ldd r25,Z+1
1099 0660 8158 subi r24,lo8(-(127))
1100 0662 9F4F sbci r25,hi8(-(127))
1101 0664 9F93 push r25
1102 0666 8F93 push r24
1103 0668 8091 0000 lds r24,EE_Parameter+7
1104 066c E82F mov r30,r24
1105 066e FF27 clr r31
1106 0670 EE0F add r30,r30
1107 0672 FF1F adc r31,r31
1108 0674 E050 subi r30,lo8(-(PPM_in))
1109 0676 F040 sbci r31,hi8(-(PPM_in))
1110 0678 8081 ld r24,Z
1111 067a 9181 ldd r25,Z+1
1112 067c 8158 subi r24,lo8(-(127))
1113 067e 9F4F sbci r25,hi8(-(127))
1114 0680 9F93 push r25
1115 0682 8F93 push r24
1116 0684 80E0 ldi r24,lo8(__c.24)
1117 0686 90E0 ldi r25,hi8(__c.24)
1118 0688 00C0 rjmp .L121
1119 .L43:
1120 068a 1092 0000 sts DispPtr,__zero_reg__
1121 068e 80E0 ldi r24,lo8(__c.25)
1122 0690 90E0 ldi r25,hi8(__c.25)
1123 0692 9F93 push r25
1124 0694 8F93 push r24
1125 0696 00E0 ldi r16,lo8(pm(Menu_Putchar))
1126 0698 10E0 ldi r17,hi8(pm(Menu_Putchar))
1127 069a DF92 push r13
1128 069c CF92 push r12
1129 069e FE01 movw r30,r28
1130 06a0 0995 icall
1131 06a2 8091 0000 lds r24,PlatinenVersion
1132 06a6 0F90 pop __tmp_reg__
1133 06a8 0F90 pop __tmp_reg__
1134 06aa 0F90 pop __tmp_reg__
1135 06ac 0F90 pop __tmp_reg__
1136 06ae 8A30 cpi r24,lo8(10)
1137 06b0 01F0 breq .+2
1138 06b2 00C0 rjmp .L44
1139 06b4 84E1 ldi r24,lo8(20)
1140 06b6 8093 0000 sts DispPtr,r24
1141 06ba 8091 0000 lds r24,AdNeutralNick
1142 06be 9091 0000 lds r25,(AdNeutralNick)+1
1143 06c2 9C01 movw r18,r24
1144 06c4 97FF sbrs r25,7
1145 06c6 00C0 rjmp .L45
1146 06c8 295F subi r18,lo8(-(7))
1147 06ca 3F4F sbci r19,hi8(-(7))
1148 .L45:
1149 06cc 287F andi r18,lo8(-8)
1150 06ce 821B sub r24,r18
1151 06d0 930B sbc r25,r19
1152 06d2 9F93 push r25
1153 06d4 8F93 push r24
1154 06d6 8091 0000 lds r24,AdNeutralNick
1155 06da 9091 0000 lds r25,(AdNeutralNick)+1
1156 06de 97FD sbrc r25,7
1157 06e0 0796 adiw r24,7
1158 .L46:
1159 06e2 73E0 ldi r23,3
1160 06e4 9595 1: asr r25
1161 06e6 8795 ror r24
1162 06e8 7A95 dec r23
1163 06ea 01F4 brne 1b
1164 06ec 9F93 push r25
1165 06ee 8F93 push r24
1166 06f0 2091 0000 lds r18,AdNeutralNick
1167 06f4 3091 0000 lds r19,(AdNeutralNick)+1
1168 06f8 37FF sbrs r19,7
1169 06fa 00C0 rjmp .L47
1170 06fc 295F subi r18,lo8(-(7))
1171 06fe 3F4F sbci r19,hi8(-(7))
1172 .L47:
1173 0700 63E0 ldi r22,3
1174 0702 3595 1: asr r19
1175 0704 2795 ror r18
1176 0706 6A95 dec r22
1177 0708 01F4 brne 1b
1178 070a 8091 0000 lds r24,AdWertNick
1179 070e 9091 0000 lds r25,(AdWertNick)+1
1180 0712 821B sub r24,r18
1181 0714 930B sbc r25,r19
1182 0716 9F93 push r25
1183 0718 8F93 push r24
1184 071a 80E0 ldi r24,lo8(__c.26)
1185 071c 90E0 ldi r25,hi8(__c.26)
1186 071e 9F93 push r25
1187 0720 8F93 push r24
1188 0722 1F93 push r17
1189 0724 0F93 push r16
1190 0726 E091 0000 lds r30,_printf_P
1191 072a F091 0000 lds r31,(_printf_P)+1
1192 072e 0995 icall
1193 0730 88E2 ldi r24,lo8(40)
1194 0732 8093 0000 sts DispPtr,r24
1195 0736 2DB7 in r18,__SP_L__
1196 0738 3EB7 in r19,__SP_H__
1197 073a 265F subi r18,lo8(-(10))
1198 073c 3F4F sbci r19,hi8(-(10))
1199 073e 2DBF out __SP_L__,r18
1200 0740 8091 0000 lds r24,AdNeutralRoll
1201 0744 9091 0000 lds r25,(AdNeutralRoll)+1
1202 0748 9C01 movw r18,r24
1203 074a 97FF sbrs r25,7
1204 074c 00C0 rjmp .L48
1205 074e 295F subi r18,lo8(-(7))
1206 0750 3F4F sbci r19,hi8(-(7))
1207 .L48:
1208 0752 287F andi r18,lo8(-8)
1209 0754 821B sub r24,r18
1210 0756 930B sbc r25,r19
1211 0758 9F93 push r25
1212 075a 8F93 push r24
1213 075c 8091 0000 lds r24,AdNeutralRoll
1214 0760 9091 0000 lds r25,(AdNeutralRoll)+1
1215 0764 97FD sbrc r25,7
1216 0766 0796 adiw r24,7
1217 .L49:
1218 0768 53E0 ldi r21,3
1219 076a 9595 1: asr r25
1220 076c 8795 ror r24
1221 076e 5A95 dec r21
1222 0770 01F4 brne 1b
1223 0772 9F93 push r25
1224 0774 8F93 push r24
1225 0776 2091 0000 lds r18,AdNeutralRoll
1226 077a 3091 0000 lds r19,(AdNeutralRoll)+1
1227 077e 37FF sbrs r19,7
1228 0780 00C0 rjmp .L50
1229 0782 295F subi r18,lo8(-(7))
1230 0784 3F4F sbci r19,hi8(-(7))
1231 .L50:
1232 0786 43E0 ldi r20,3
1233 0788 3595 1: asr r19
1234 078a 2795 ror r18
1235 078c 4A95 dec r20
1236 078e 01F4 brne 1b
1237 0790 8091 0000 lds r24,AdWertRoll
1238 0794 9091 0000 lds r25,(AdWertRoll)+1
1239 0798 821B sub r24,r18
1240 079a 930B sbc r25,r19
1241 079c 9F93 push r25
1242 079e 8F93 push r24
1243 07a0 80E0 ldi r24,lo8(__c.27)
1244 07a2 90E0 ldi r25,hi8(__c.27)
1245 07a4 9F93 push r25
1246 07a6 8F93 push r24
1247 07a8 1F93 push r17
1248 07aa 0F93 push r16
1249 07ac E091 0000 lds r30,_printf_P
1250 07b0 F091 0000 lds r31,(_printf_P)+1
1251 07b4 0995 icall
1252 07b6 8CE3 ldi r24,lo8(60)
1253 07b8 8093 0000 sts DispPtr,r24
1254 07bc 8DB7 in r24,__SP_L__
1255 07be 9EB7 in r25,__SP_H__
1256 07c0 0A96 adiw r24,10
1257 07c2 8DBF out __SP_L__,r24
1258 07c4 8091 0000 lds r24,AdNeutralGier
1259 07c8 9091 0000 lds r25,(AdNeutralGier)+1
1260 07cc 9F93 push r25
1261 07ce 8F93 push r24
1262 07d0 8091 0000 lds r24,AdNeutralGier
1263 07d4 9091 0000 lds r25,(AdNeutralGier)+1
1264 07d8 2091 0000 lds r18,AdWertGier
1265 07dc 3091 0000 lds r19,(AdWertGier)+1
1266 07e0 821B sub r24,r18
1267 07e2 930B sbc r25,r19
1268 07e4 9F93 push r25
1269 07e6 8F93 push r24
1270 07e8 80E0 ldi r24,lo8(__c.28)
1271 07ea 90E0 ldi r25,hi8(__c.28)
1272 07ec 00C0 rjmp .L126
1273 .L44:
1274 07ee 8B30 cpi r24,lo8(11)
1275 07f0 01F0 breq .L53
1276 07f2 8431 cpi r24,lo8(20)
1277 07f4 00F4 brsh .+2
1278 07f6 00C0 rjmp .L52
1279 .L53:
1280 07f8 84E1 ldi r24,lo8(20)
1281 07fa 8093 0000 sts DispPtr,r24
1282 07fe 8091 0000 lds r24,AdNeutralNick
1283 0802 9091 0000 lds r25,(AdNeutralNick)+1
1284 0806 9C01 movw r18,r24
1285 0808 97FF sbrs r25,7
1286 080a 00C0 rjmp .L54
1287 080c 215F subi r18,lo8(-(15))
1288 080e 3F4F sbci r19,hi8(-(15))
1289 .L54:
1290 0810 207F andi r18,lo8(-16)
1291 0812 821B sub r24,r18
1292 0814 930B sbc r25,r19
1293 0816 97FD sbrc r25,7
1294 0818 0196 adiw r24,1
1295 .L55:
1296 081a 9595 asr r25
1297 081c 8795 ror r24
1298 081e 9F93 push r25
1299 0820 8F93 push r24
1300 0822 8091 0000 lds r24,AdNeutralNick
1301 0826 9091 0000 lds r25,(AdNeutralNick)+1
1302 082a 97FD sbrc r25,7
1303 082c 0F96 adiw r24,15
1304 .L56:
1305 082e 24E0 ldi r18,4
1306 0830 9595 1: asr r25
1307 0832 8795 ror r24
1308 0834 2A95 dec r18
1309 0836 01F4 brne 1b
1310 0838 9F93 push r25
1311 083a 8F93 push r24
1312 083c 2091 0000 lds r18,AdNeutralNick
1313 0840 3091 0000 lds r19,(AdNeutralNick)+1
1314 0844 37FF sbrs r19,7
1315 0846 00C0 rjmp .L57
1316 0848 295F subi r18,lo8(-(7))
1317 084a 3F4F sbci r19,hi8(-(7))
1318 .L57:
1319 084c C3E0 ldi r28,3
1320 084e 3595 1: asr r19
1321 0850 2795 ror r18
1322 0852 CA95 dec r28
1323 0854 01F4 brne 1b
1324 0856 8091 0000 lds r24,AdWertNick
1325 085a 9091 0000 lds r25,(AdWertNick)+1
1326 085e 821B sub r24,r18
1327 0860 930B sbc r25,r19
1328 0862 9F93 push r25
1329 0864 8F93 push r24
1330 0866 80E0 ldi r24,lo8(__c.29)
1331 0868 90E0 ldi r25,hi8(__c.29)
1332 086a 9F93 push r25
1333 086c 8F93 push r24
1334 086e 1F93 push r17
1335 0870 0F93 push r16
1336 0872 E091 0000 lds r30,_printf_P
1337 0876 F091 0000 lds r31,(_printf_P)+1
1338 087a 0995 icall
1339 087c 88E2 ldi r24,lo8(40)
1340 087e 8093 0000 sts DispPtr,r24
1341 0882 2DB7 in r18,__SP_L__
1342 0884 3EB7 in r19,__SP_H__
1343 0886 265F subi r18,lo8(-(10))
1344 0888 3F4F sbci r19,hi8(-(10))
1345 088a 2DBF out __SP_L__,r18
1346 088c 8091 0000 lds r24,AdNeutralRoll
1347 0890 9091 0000 lds r25,(AdNeutralRoll)+1
1348 0894 9C01 movw r18,r24
1349 0896 97FF sbrs r25,7
1350 0898 00C0 rjmp .L58
1351 089a 215F subi r18,lo8(-(15))
1352 089c 3F4F sbci r19,hi8(-(15))
1353 .L58:
1354 089e 207F andi r18,lo8(-16)
1355 08a0 821B sub r24,r18
1356 08a2 930B sbc r25,r19
1357 08a4 97FD sbrc r25,7
1358 08a6 0196 adiw r24,1
1359 .L59:
1360 08a8 9595 asr r25
1361 08aa 8795 ror r24
1362 08ac 9F93 push r25
1363 08ae 8F93 push r24
1364 08b0 8091 0000 lds r24,AdNeutralRoll
1365 08b4 9091 0000 lds r25,(AdNeutralRoll)+1
1366 08b8 97FD sbrc r25,7
1367 08ba 0F96 adiw r24,15
1368 .L60:
1369 08bc A4E0 ldi r26,4
1370 08be 9595 1: asr r25
1371 08c0 8795 ror r24
1372 08c2 AA95 dec r26
1373 08c4 01F4 brne 1b
1374 08c6 9F93 push r25
1375 08c8 8F93 push r24
1376 08ca 2091 0000 lds r18,AdNeutralRoll
1377 08ce 3091 0000 lds r19,(AdNeutralRoll)+1
1378 08d2 37FF sbrs r19,7
1379 08d4 00C0 rjmp .L61
1380 08d6 295F subi r18,lo8(-(7))
1381 08d8 3F4F sbci r19,hi8(-(7))
1382 .L61:
1383 08da F3E0 ldi r31,3
1384 08dc 3595 1: asr r19
1385 08de 2795 ror r18
1386 08e0 FA95 dec r31
1387 08e2 01F4 brne 1b
1388 08e4 8091 0000 lds r24,AdWertRoll
1389 08e8 9091 0000 lds r25,(AdWertRoll)+1
1390 08ec 821B sub r24,r18
1391 08ee 930B sbc r25,r19
1392 08f0 9F93 push r25
1393 08f2 8F93 push r24
1394 08f4 80E0 ldi r24,lo8(__c.30)
1395 08f6 90E0 ldi r25,hi8(__c.30)
1396 08f8 9F93 push r25
1397 08fa 8F93 push r24
1398 08fc 1F93 push r17
1399 08fe 0F93 push r16
1400 0900 E091 0000 lds r30,_printf_P
1401 0904 F091 0000 lds r31,(_printf_P)+1
1402 0908 0995 icall
1403 090a 8CE3 ldi r24,lo8(60)
1404 090c 8093 0000 sts DispPtr,r24
1405 0910 8DB7 in r24,__SP_L__
1406 0912 9EB7 in r25,__SP_H__
1407 0914 0A96 adiw r24,10
1408 0916 8DBF out __SP_L__,r24
1409 0918 8091 0000 lds r24,AdNeutralGier
1410 091c 9091 0000 lds r25,(AdNeutralGier)+1
1411 0920 97FD sbrc r25,7
1412 0922 0196 adiw r24,1
1413 .L62:
1414 0924 9595 asr r25
1415 0926 8795 ror r24
1416 0928 9F93 push r25
1417 092a 8F93 push r24
1418 092c 8091 0000 lds r24,AdNeutralGier
1419 0930 9091 0000 lds r25,(AdNeutralGier)+1
1420 0934 2091 0000 lds r18,AdWertGier
1421 0938 3091 0000 lds r19,(AdWertGier)+1
1422 093c 821B sub r24,r18
1423 093e 930B sbc r25,r19
1424 0940 9F93 push r25
1425 0942 8F93 push r24
1426 0944 80E0 ldi r24,lo8(__c.31)
1427 0946 90E0 ldi r25,hi8(__c.31)
1428 .L126:
1429 0948 9F93 push r25
1430 094a 8F93 push r24
1431 094c 1F93 push r17
1432 094e 0F93 push r16
1433 0950 00C0 rjmp .L122
1434 .L52:
1435 0952 8D30 cpi r24,lo8(13)
1436 0954 01F0 breq .+2
1437 0956 00C0 rjmp .L20
1438 0958 84E1 ldi r24,lo8(20)
1439 095a 8093 0000 sts DispPtr,r24
1440 095e 8091 0000 lds r24,AnalogOffsetNick
1441 0962 9927 clr r25
1442 0964 9F93 push r25
1443 0966 8F93 push r24
1444 0968 8091 0000 lds r24,AdNeutralNick
1445 096c 9091 0000 lds r25,(AdNeutralNick)+1
1446 0970 97FD sbrc r25,7
1447 0972 0F96 adiw r24,15
1448 .L65:
1449 0974 74E0 ldi r23,4
1450 0976 9595 1: asr r25
1451 0978 8795 ror r24
1452 097a 7A95 dec r23
1453 097c 01F4 brne 1b
1454 097e 9F93 push r25
1455 0980 8F93 push r24
1456 0982 2091 0000 lds r18,AdNeutralNick
1457 0986 3091 0000 lds r19,(AdNeutralNick)+1
1458 098a 37FF sbrs r19,7
1459 098c 00C0 rjmp .L66
1460 098e 295F subi r18,lo8(-(7))
1461 0990 3F4F sbci r19,hi8(-(7))
1462 .L66:
1463 0992 63E0 ldi r22,3
1464 0994 3595 1: asr r19
1465 0996 2795 ror r18
1466 0998 6A95 dec r22
1467 099a 01F4 brne 1b
1468 099c 8091 0000 lds r24,AdWertNick
1469 09a0 9091 0000 lds r25,(AdWertNick)+1
1470 09a4 821B sub r24,r18
1471 09a6 930B sbc r25,r19
1472 09a8 9F93 push r25
1473 09aa 8F93 push r24
1474 09ac 80E0 ldi r24,lo8(__c.32)
1475 09ae 90E0 ldi r25,hi8(__c.32)
1476 09b0 9F93 push r25
1477 09b2 8F93 push r24
1478 09b4 1F93 push r17
1479 09b6 0F93 push r16
1480 09b8 E091 0000 lds r30,_printf_P
1481 09bc F091 0000 lds r31,(_printf_P)+1
1482 09c0 0995 icall
1483 09c2 88E2 ldi r24,lo8(40)
1484 09c4 8093 0000 sts DispPtr,r24
1485 09c8 2DB7 in r18,__SP_L__
1486 09ca 3EB7 in r19,__SP_H__
1487 09cc 265F subi r18,lo8(-(10))
1488 09ce 3F4F sbci r19,hi8(-(10))
1489 09d0 2DBF out __SP_L__,r18
1490 09d2 8091 0000 lds r24,AnalogOffsetRoll
1491 09d6 9927 clr r25
1492 09d8 9F93 push r25
1493 09da 8F93 push r24
1494 09dc 8091 0000 lds r24,AdNeutralRoll
1495 09e0 9091 0000 lds r25,(AdNeutralRoll)+1
1496 09e4 97FD sbrc r25,7
1497 09e6 0F96 adiw r24,15
1498 .L67:
1499 09e8 54E0 ldi r21,4
1500 09ea 9595 1: asr r25
1501 09ec 8795 ror r24
1502 09ee 5A95 dec r21
1503 09f0 01F4 brne 1b
1504 09f2 9F93 push r25
1505 09f4 8F93 push r24
1506 09f6 2091 0000 lds r18,AdNeutralRoll
1507 09fa 3091 0000 lds r19,(AdNeutralRoll)+1
1508 09fe 37FF sbrs r19,7
1509 0a00 00C0 rjmp .L68
1510 0a02 295F subi r18,lo8(-(7))
1511 0a04 3F4F sbci r19,hi8(-(7))
1512 .L68:
1513 0a06 43E0 ldi r20,3
1514 0a08 3595 1: asr r19
1515 0a0a 2795 ror r18
1516 0a0c 4A95 dec r20
1517 0a0e 01F4 brne 1b
1518 0a10 8091 0000 lds r24,AdWertRoll
1519 0a14 9091 0000 lds r25,(AdWertRoll)+1
1520 0a18 821B sub r24,r18
1521 0a1a 930B sbc r25,r19
1522 0a1c 9F93 push r25
1523 0a1e 8F93 push r24
1524 0a20 80E0 ldi r24,lo8(__c.33)
1525 0a22 90E0 ldi r25,hi8(__c.33)
1526 0a24 9F93 push r25
1527 0a26 8F93 push r24
1528 0a28 1F93 push r17
1529 0a2a 0F93 push r16
1530 0a2c E091 0000 lds r30,_printf_P
1531 0a30 F091 0000 lds r31,(_printf_P)+1
1532 0a34 0995 icall
1533 0a36 8CE3 ldi r24,lo8(60)
1534 0a38 8093 0000 sts DispPtr,r24
1535 0a3c 8DB7 in r24,__SP_L__
1536 0a3e 9EB7 in r25,__SP_H__
1537 0a40 0A96 adiw r24,10
1538 0a42 8DBF out __SP_L__,r24
1539 0a44 8091 0000 lds r24,AnalogOffsetGier
1540 0a48 9927 clr r25
1541 0a4a 9F93 push r25
1542 0a4c 8F93 push r24
1543 0a4e 8091 0000 lds r24,AdNeutralGier
1544 0a52 9091 0000 lds r25,(AdNeutralGier)+1
1545 0a56 97FD sbrc r25,7
1546 0a58 0196 adiw r24,1
1547 .L69:
1548 0a5a 9595 asr r25
1549 0a5c 8795 ror r24
1550 0a5e 9F93 push r25
1551 0a60 8F93 push r24
1552 0a62 8091 0000 lds r24,AdNeutralGier
1553 0a66 9091 0000 lds r25,(AdNeutralGier)+1
1554 0a6a 2091 0000 lds r18,AdWertGier
1555 0a6e 3091 0000 lds r19,(AdWertGier)+1
1556 0a72 821B sub r24,r18
1557 0a74 930B sbc r25,r19
1558 0a76 9F93 push r25
1559 0a78 8F93 push r24
1560 0a7a 80E0 ldi r24,lo8(__c.34)
1561 0a7c 90E0 ldi r25,hi8(__c.34)
1562 0a7e 9F93 push r25
1563 0a80 8F93 push r24
1564 0a82 1F93 push r17
1565 0a84 0F93 push r16
1566 0a86 E091 0000 lds r30,_printf_P
1567 0a8a F091 0000 lds r31,(_printf_P)+1
1568 0a8e 0995 icall
1569 0a90 EDB7 in r30,__SP_L__
1570 0a92 FEB7 in r31,__SP_H__
1571 0a94 3A96 adiw r30,10
1572 0a96 00C0 rjmp .L117
1573 .L70:
1574 0a98 1092 0000 sts DispPtr,__zero_reg__
1575 0a9c 80E0 ldi r24,lo8(__c.35)
1576 0a9e 90E0 ldi r25,hi8(__c.35)
1577 0aa0 9F93 push r25
1578 0aa2 8F93 push r24
1579 0aa4 DF92 push r13
1580 0aa6 CF92 push r12
1581 0aa8 FE01 movw r30,r28
1582 0aaa 0995 icall
1583 0aac 84E1 ldi r24,lo8(20)
1584 0aae 8093 0000 sts DispPtr,r24
1585 0ab2 0F90 pop __tmp_reg__
1586 0ab4 0F90 pop __tmp_reg__
1587 0ab6 0F90 pop __tmp_reg__
1588 0ab8 0F90 pop __tmp_reg__
1589 0aba 8091 0000 lds r24,NeutralAccX
1590 0abe 9091 0000 lds r25,(NeutralAccX)+1
1591 0ac2 9F93 push r25
1592 0ac4 8F93 push r24
1593 0ac6 8091 0000 lds r24,AdWertAccNick
1594 0aca 9091 0000 lds r25,(AdWertAccNick)+1
1595 0ace 9F93 push r25
1596 0ad0 8F93 push r24
1597 0ad2 80E0 ldi r24,lo8(__c.36)
1598 0ad4 90E0 ldi r25,hi8(__c.36)
1599 0ad6 9F93 push r25
1600 0ad8 8F93 push r24
1601 0ada DF92 push r13
1602 0adc CF92 push r12
1603 0ade E091 0000 lds r30,_printf_P
1604 0ae2 F091 0000 lds r31,(_printf_P)+1
1605 0ae6 0995 icall
1606 0ae8 88E2 ldi r24,lo8(40)
1607 0aea 8093 0000 sts DispPtr,r24
1608 0aee 2DB7 in r18,__SP_L__
1609 0af0 3EB7 in r19,__SP_H__
1610 0af2 285F subi r18,lo8(-(8))
1611 0af4 3F4F sbci r19,hi8(-(8))
1612 0af6 2DBF out __SP_L__,r18
1613 0af8 8091 0000 lds r24,NeutralAccY
1614 0afc 9091 0000 lds r25,(NeutralAccY)+1
1615 0b00 9F93 push r25
1616 0b02 8F93 push r24
1617 0b04 8091 0000 lds r24,AdWertAccRoll
1618 0b08 9091 0000 lds r25,(AdWertAccRoll)+1
1619 0b0c 9F93 push r25
1620 0b0e 8F93 push r24
1621 0b10 80E0 ldi r24,lo8(__c.37)
1622 0b12 90E0 ldi r25,hi8(__c.37)
1623 0b14 9F93 push r25
1624 0b16 8F93 push r24
1625 0b18 DF92 push r13
1626 0b1a CF92 push r12
1627 0b1c E091 0000 lds r30,_printf_P
1628 0b20 F091 0000 lds r31,(_printf_P)+1
1629 0b24 0995 icall
1630 0b26 8CE3 ldi r24,lo8(60)
1631 0b28 8093 0000 sts DispPtr,r24
1632 0b2c 8DB7 in r24,__SP_L__
1633 0b2e 9EB7 in r25,__SP_H__
1634 0b30 0896 adiw r24,8
1635 0b32 8DBF out __SP_L__,r24
1636 0b34 8091 0000 lds r24,NeutralAccZ
1637 0b38 9091 0000 lds r25,(NeutralAccZ)+1
1638 0b3c 9F93 push r25
1639 0b3e 8F93 push r24
1640 0b40 8091 0000 lds r24,AdWertAccHoch
1641 0b44 9091 0000 lds r25,(AdWertAccHoch)+1
1642 0b48 9F93 push r25
1643 0b4a 8F93 push r24
1644 0b4c 80E0 ldi r24,lo8(__c.38)
1645 0b4e 90E0 ldi r25,hi8(__c.38)
1646 .L121:
1647 0b50 9F93 push r25
1648 0b52 8F93 push r24
1649 0b54 DF92 push r13
1650 0b56 CF92 push r12
1651 .L122:
1652 0b58 E091 0000 lds r30,_printf_P
1653 0b5c F091 0000 lds r31,(_printf_P)+1
1654 0b60 0995 icall
1655 0b62 EDB7 in r30,__SP_L__
1656 0b64 FEB7 in r31,__SP_H__
1657 0b66 3896 adiw r30,8
1658 .L117:
1659 0b68 EDBF out __SP_L__,r30
1660 0b6a 00C0 rjmp .L20
1661 .L71:
1662 0b6c 1092 0000 sts DispPtr,__zero_reg__
1663 0b70 8091 0000 lds r24,UBat
1664 0b74 9091 0000 lds r25,(UBat)+1
1665 0b78 6AE0 ldi r22,lo8(10)
1666 0b7a 70E0 ldi r23,hi8(10)
1667 0b7c 0E94 0000 call __divmodhi4
1668 0b80 9F93 push r25
1669 0b82 8F93 push r24
1670 0b84 8091 0000 lds r24,UBat
1671 0b88 9091 0000 lds r25,(UBat)+1
1672 0b8c 6AE0 ldi r22,lo8(10)
1673 0b8e 70E0 ldi r23,hi8(10)
1674 0b90 0E94 0000 call __divmodhi4
1675 0b94 7F93 push r23
1676 0b96 6F93 push r22
1677 0b98 80E0 ldi r24,lo8(__c.39)
1678 0b9a 90E0 ldi r25,hi8(__c.39)
1679 0b9c 9F93 push r25
1680 0b9e 8F93 push r24
1681 0ba0 DF92 push r13
1682 0ba2 CF92 push r12
1683 0ba4 FE01 movw r30,r28
1684 0ba6 0995 icall
1685 0ba8 84E1 ldi r24,lo8(20)
1686 0baa 8093 0000 sts DispPtr,r24
1687 0bae 2DB7 in r18,__SP_L__
1688 0bb0 3EB7 in r19,__SP_H__
1689 0bb2 285F subi r18,lo8(-(8))
1690 0bb4 3F4F sbci r19,hi8(-(8))
1691 0bb6 2DBF out __SP_L__,r18
1692 0bb8 8091 0000 lds r24,Capacity
1693 0bbc 9091 0000 lds r25,(Capacity)+1
1694 0bc0 6AE0 ldi r22,lo8(10)
1695 0bc2 70E0 ldi r23,hi8(10)
1696 0bc4 0E94 0000 call __udivmodhi4
1697 0bc8 9F93 push r25
1698 0bca 8F93 push r24
1699 0bcc 8091 0000 lds r24,Capacity
1700 0bd0 9091 0000 lds r25,(Capacity)+1
1701 0bd4 6AE0 ldi r22,lo8(10)
1702 0bd6 70E0 ldi r23,hi8(10)
1703 0bd8 0E94 0000 call __udivmodhi4
1704 0bdc 7F93 push r23
1705 0bde 6F93 push r22
1706 0be0 80E0 ldi r24,lo8(__c.40)
1707 0be2 90E0 ldi r25,hi8(__c.40)
1708 0be4 9F93 push r25
1709 0be6 8F93 push r24
1710 0be8 DF92 push r13
1711 0bea CF92 push r12
1712 0bec E091 0000 lds r30,_printf_P
1713 0bf0 F091 0000 lds r31,(_printf_P)+1
1714 0bf4 0995 icall
1715 0bf6 88E2 ldi r24,lo8(40)
1716 0bf8 8093 0000 sts DispPtr,r24
1717 0bfc 8DB7 in r24,__SP_L__
1718 0bfe 9EB7 in r25,__SP_H__
1719 0c00 0896 adiw r24,8
1720 0c02 8DBF out __SP_L__,r24
1721 0c04 8091 0000 lds r24,Capacity+2
1722 0c08 9091 0000 lds r25,(Capacity+2)+1
1723 0c0c 9F93 push r25
1724 0c0e 8F93 push r24
1725 0c10 80E0 ldi r24,lo8(__c.41)
1726 0c12 90E0 ldi r25,hi8(__c.41)
1727 0c14 9F93 push r25
1728 0c16 8F93 push r24
1729 0c18 DF92 push r13
1730 0c1a CF92 push r12
1731 0c1c E091 0000 lds r30,_printf_P
1732 0c20 F091 0000 lds r31,(_printf_P)+1
1733 0c24 0995 icall
1734 0c26 8CE3 ldi r24,lo8(60)
1735 0c28 8093 0000 sts DispPtr,r24
1736 0c2c EDB7 in r30,__SP_L__
1737 0c2e FEB7 in r31,__SP_H__
1738 0c30 3696 adiw r30,6
1739 0c32 EDBF out __SP_L__,r30
1740 0c34 8091 0000 lds r24,Capacity+4
1741 0c38 9091 0000 lds r25,(Capacity+4)+1
1742 0c3c 9F93 push r25
1743 0c3e 8F93 push r24
1744 0c40 80E0 ldi r24,lo8(__c.42)
1745 0c42 90E0 ldi r25,hi8(__c.42)
1746 .L127:
1747 0c44 9F93 push r25
1748 0c46 8F93 push r24
1749 0c48 DF92 push r13
1750 0c4a CF92 push r12
1751 .L123:
1752 0c4c E091 0000 lds r30,_printf_P
1753 0c50 F091 0000 lds r31,(_printf_P)+1
1754 0c54 0995 icall
1755 0c56 2DB7 in r18,__SP_L__
1756 0c58 3EB7 in r19,__SP_H__
1757 0c5a 2A5F subi r18,lo8(-(6))
1758 0c5c 3F4F sbci r19,hi8(-(6))
1759 0c5e 00C0 rjmp .L116
1760 .L72:
1761 0c60 1092 0000 sts DispPtr,__zero_reg__
1762 0c64 80E0 ldi r24,lo8(__c.43)
1763 0c66 90E0 ldi r25,hi8(__c.43)
1764 0c68 9F93 push r25
1765 0c6a 8F93 push r24
1766 0c6c DF92 push r13
1767 0c6e CF92 push r12
1768 0c70 FE01 movw r30,r28
1769 0c72 0995 icall
1770 0c74 84E1 ldi r24,lo8(20)
1771 0c76 8093 0000 sts DispPtr,r24
1772 0c7a 0F90 pop __tmp_reg__
1773 0c7c 0F90 pop __tmp_reg__
1774 0c7e 0F90 pop __tmp_reg__
1775 0c80 0F90 pop __tmp_reg__
1776 0c82 8091 0000 lds r24,PPM_in
1777 0c86 9091 0000 lds r25,(PPM_in)+1
1778 0c8a 9F93 push r25
1779 0c8c 8F93 push r24
1780 0c8e 80E0 ldi r24,lo8(__c.44)
1781 0c90 90E0 ldi r25,hi8(__c.44)
1782 0c92 9F93 push r25
1783 0c94 8F93 push r24
1784 0c96 DF92 push r13
1785 0c98 CF92 push r12
1786 0c9a E091 0000 lds r30,_printf_P
1787 0c9e F091 0000 lds r31,(_printf_P)+1
1788 0ca2 0995 icall
1789 0ca4 88E2 ldi r24,lo8(40)
1790 0ca6 8093 0000 sts DispPtr,r24
1791 0caa 8DB7 in r24,__SP_L__
1792 0cac 9EB7 in r25,__SP_H__
1793 0cae 0696 adiw r24,6
1794 0cb0 8DBF out __SP_L__,r24
1795 0cb2 8091 0000 lds r24,SenderOkay
1796 0cb6 9927 clr r25
1797 0cb8 9F93 push r25
1798 0cba 8F93 push r24
1799 0cbc 80E0 ldi r24,lo8(__c.45)
1800 0cbe 90E0 ldi r25,hi8(__c.45)
1801 0cc0 9F93 push r25
1802 0cc2 8F93 push r24
1803 0cc4 DF92 push r13
1804 0cc6 CF92 push r12
1805 0cc8 E091 0000 lds r30,_printf_P
1806 0ccc F091 0000 lds r31,(_printf_P)+1
1807 0cd0 0995 icall
1808 0cd2 8CE3 ldi r24,lo8(60)
1809 0cd4 8093 0000 sts DispPtr,r24
1810 0cd8 EDB7 in r30,__SP_L__
1811 0cda FEB7 in r31,__SP_H__
1812 0cdc 3696 adiw r30,6
1813 0cde EDBF out __SP_L__,r30
1814 0ce0 8091 0000 lds r24,Channels
1815 0ce4 9927 clr r25
1816 0ce6 0197 sbiw r24,1
1817 0ce8 9F93 push r25
1818 0cea 8F93 push r24
1819 0cec 80E0 ldi r24,lo8(__c.46)
1820 0cee 90E0 ldi r25,hi8(__c.46)
1821 0cf0 00C0 rjmp .L127
1822 .L73:
1823 0cf2 1092 0000 sts DispPtr,__zero_reg__
1824 0cf6 80E0 ldi r24,lo8(__c.47)
1825 0cf8 90E0 ldi r25,hi8(__c.47)
1826 0cfa 9F93 push r25
1827 0cfc 8F93 push r24
1828 0cfe DF92 push r13
1829 0d00 CF92 push r12
1830 0d02 FE01 movw r30,r28
1831 0d04 0995 icall
1832 0d06 84E1 ldi r24,lo8(20)
1833 0d08 8093 0000 sts DispPtr,r24
1834 0d0c 0F90 pop __tmp_reg__
1835 0d0e 0F90 pop __tmp_reg__
1836 0d10 0F90 pop __tmp_reg__
1837 0d12 0F90 pop __tmp_reg__
1838 0d14 8091 0000 lds r24,KompassValue
1839 0d18 9091 0000 lds r25,(KompassValue)+1
1840 0d1c 9F93 push r25
1841 0d1e 8F93 push r24
1842 0d20 80E0 ldi r24,lo8(__c.48)
1843 0d22 90E0 ldi r25,hi8(__c.48)
1844 0d24 9F93 push r25
1845 0d26 8F93 push r24
1846 0d28 DF92 push r13
1847 0d2a CF92 push r12
1848 0d2c E091 0000 lds r30,_printf_P
1849 0d30 F091 0000 lds r31,(_printf_P)+1
1850 0d34 0995 icall
1851 0d36 88E2 ldi r24,lo8(40)
1852 0d38 8093 0000 sts DispPtr,r24
1853 0d3c 8DB7 in r24,__SP_L__
1854 0d3e 9EB7 in r25,__SP_H__
1855 0d40 0696 adiw r24,6
1856 0d42 8DBF out __SP_L__,r24
1857 0d44 8091 0000 lds r24,ErsatzKompassInGrad
1858 0d48 9091 0000 lds r25,(ErsatzKompassInGrad)+1
1859 0d4c 9F93 push r25
1860 0d4e 8F93 push r24
1861 0d50 80E0 ldi r24,lo8(__c.49)
1862 0d52 90E0 ldi r25,hi8(__c.49)
1863 0d54 9F93 push r25
1864 0d56 8F93 push r24
1865 0d58 DF92 push r13
1866 0d5a CF92 push r12
1867 0d5c E091 0000 lds r30,_printf_P
1868 0d60 F091 0000 lds r31,(_printf_P)+1
1869 0d64 0995 icall
1870 0d66 8CE3 ldi r24,lo8(60)
1871 0d68 8093 0000 sts DispPtr,r24
1872 0d6c EDB7 in r30,__SP_L__
1873 0d6e FEB7 in r31,__SP_H__
1874 0d70 3696 adiw r30,6
1875 0d72 EDBF out __SP_L__,r30
1876 0d74 8091 0000 lds r24,KompassSollWert
1877 0d78 9091 0000 lds r25,(KompassSollWert)+1
1878 0d7c 9F93 push r25
1879 0d7e 8F93 push r24
1880 0d80 80E0 ldi r24,lo8(__c.50)
1881 0d82 90E0 ldi r25,hi8(__c.50)
1882 0d84 00C0 rjmp .L127
1883 .L74:
1884 0d86 C0E0 ldi r28,lo8(Poti)
1885 0d88 CC2E mov r12,r28
1886 0d8a C0E0 ldi r28,hi8(Poti)
1887 0d8c DC2E mov r13,r28
1888 0d8e 20E0 ldi r18,lo8(0)
1889 0d90 30E0 ldi r19,hi8(0)
1890 0d92 E901 movw r28,r18
1891 0d94 B3E0 ldi r27,lo8(3)
1892 0d96 FB2E mov r15,r27
1893 .L78:
1894 0d98 C093 0000 sts DispPtr,r28
1895 0d9c F601 movw r30,r12
1896 0d9e 8191 ld r24,Z+
1897 0da0 6F01 movw r12,r30
1898 0da2 9927 clr r25
1899 0da4 9F93 push r25
1900 0da6 8F93 push r24
1901 0da8 8901 movw r16,r18
1902 0daa 0F5F subi r16,lo8(-(1))
1903 0dac 1F4F sbci r17,hi8(-(1))
1904 0dae 1F93 push r17
1905 0db0 0F93 push r16
1906 0db2 80E0 ldi r24,lo8(__c.51)
1907 0db4 90E0 ldi r25,hi8(__c.51)
1908 0db6 9F93 push r25
1909 0db8 8F93 push r24
1910 0dba 80E0 ldi r24,lo8(pm(Menu_Putchar))
1911 0dbc 90E0 ldi r25,hi8(pm(Menu_Putchar))
1912 0dbe 9F93 push r25
1913 0dc0 8F93 push r24
1914 0dc2 E091 0000 lds r30,_printf_P
1915 0dc6 F091 0000 lds r31,(_printf_P)+1
1916 0dca 0995 icall
1917 0dcc 2DB7 in r18,__SP_L__
1918 0dce 3EB7 in r19,__SP_H__
1919 0dd0 285F subi r18,lo8(-(8))
1920 0dd2 3F4F sbci r19,hi8(-(8))
1921 0dd4 2DBF out __SP_L__,r18
1922 0dd6 FA94 dec r15
1923 0dd8 6496 adiw r28,20
1924 0dda 9801 movw r18,r16
1925 0ddc F7FE sbrs r15,7
1926 0dde 00C0 rjmp .L78
1927 0de0 00C0 rjmp .L20
1928 .L79:
1929 0de2 A0E0 ldi r26,lo8(Poti+4)
1930 0de4 CA2E mov r12,r26
1931 0de6 A0E0 ldi r26,hi8(Poti+4)
1932 0de8 DA2E mov r13,r26
1933 0dea C0E0 ldi r28,lo8(0)
1934 0dec D0E0 ldi r29,hi8(0)
1935 0dee 8E01 movw r16,r28
1936 0df0 F3E0 ldi r31,lo8(3)
1937 0df2 FF2E mov r15,r31
1938 .L83:
1939 0df4 0093 0000 sts DispPtr,r16
1940 0df8 F601 movw r30,r12
1941 0dfa 8191 ld r24,Z+
1942 0dfc 6F01 movw r12,r30
1943 0dfe 9927 clr r25
1944 0e00 9F93 push r25
1945 0e02 8F93 push r24
1946 0e04 2596 adiw r28,5
1947 0e06 DF93 push r29
1948 0e08 CF93 push r28
1949 0e0a 80E0 ldi r24,lo8(__c.52)
1950 0e0c 90E0 ldi r25,hi8(__c.52)
1951 0e0e 9F93 push r25
1952 0e10 8F93 push r24
1953 0e12 80E0 ldi r24,lo8(pm(Menu_Putchar))
1954 0e14 90E0 ldi r25,hi8(pm(Menu_Putchar))
1955 0e16 9F93 push r25
1956 0e18 8F93 push r24
1957 0e1a E091 0000 lds r30,_printf_P
1958 0e1e F091 0000 lds r31,(_printf_P)+1
1959 0e22 0995 icall
1960 0e24 2DB7 in r18,__SP_L__
1961 0e26 3EB7 in r19,__SP_H__
1962 0e28 285F subi r18,lo8(-(8))
1963 0e2a 3F4F sbci r19,hi8(-(8))
1964 0e2c 2DBF out __SP_L__,r18
1965 0e2e FA94 dec r15
1966 0e30 0C5E subi r16,lo8(-(20))
1967 0e32 1F4F sbci r17,hi8(-(20))
1968 0e34 2497 sbiw r28,4
1969 0e36 F7FE sbrs r15,7
1970 0e38 00C0 rjmp .L83
1971 0e3a 00C0 rjmp .L20
1972 .L84:
1973 0e3c 1092 0000 sts DispPtr,__zero_reg__
1974 0e40 80E0 ldi r24,lo8(__c.53)
1975 0e42 90E0 ldi r25,hi8(__c.53)
1976 0e44 9F93 push r25
1977 0e46 8F93 push r24
1978 0e48 00E0 ldi r16,lo8(pm(Menu_Putchar))
1979 0e4a 10E0 ldi r17,hi8(pm(Menu_Putchar))
1980 0e4c DF92 push r13
1981 0e4e CF92 push r12
1982 0e50 FE01 movw r30,r28
1983 0e52 0995 icall
1984 0e54 84E1 ldi r24,lo8(20)
1985 0e56 8093 0000 sts DispPtr,r24
1986 0e5a 0F90 pop __tmp_reg__
1987 0e5c 0F90 pop __tmp_reg__
1988 0e5e 0F90 pop __tmp_reg__
1989 0e60 0F90 pop __tmp_reg__
1990 0e62 8091 0000 lds r24,Parameter_ServoNickControl
1991 0e66 9927 clr r25
1992 0e68 9F93 push r25
1993 0e6a 8F93 push r24
1994 0e6c 80E0 ldi r24,lo8(__c.54)
1995 0e6e 90E0 ldi r25,hi8(__c.54)
1996 0e70 9F93 push r25
1997 0e72 8F93 push r24
1998 0e74 DF92 push r13
1999 0e76 CF92 push r12
2000 0e78 E091 0000 lds r30,_printf_P
2001 0e7c F091 0000 lds r31,(_printf_P)+1
2002 0e80 0995 icall
2003 0e82 88E2 ldi r24,lo8(40)
2004 0e84 8093 0000 sts DispPtr,r24
2005 0e88 8DB7 in r24,__SP_L__
2006 0e8a 9EB7 in r25,__SP_H__
2007 0e8c 0696 adiw r24,6
2008 0e8e 8DBF out __SP_L__,r24
2009 0e90 8091 0000 lds r24,ServoNickValue
2010 0e94 9091 0000 lds r25,(ServoNickValue)+1
2011 0e98 97FD sbrc r25,7
2012 0e9a 0396 adiw r24,3
2013 .L85:
2014 0e9c 9595 asr r25
2015 0e9e 8795 ror r24
2016 0ea0 9595 asr r25
2017 0ea2 8795 ror r24
2018 0ea4 9F93 push r25
2019 0ea6 8F93 push r24
2020 0ea8 80E0 ldi r24,lo8(__c.55)
2021 0eaa 90E0 ldi r25,hi8(__c.55)
2022 0eac 9F93 push r25
2023 0eae 8F93 push r24
2024 0eb0 1F93 push r17
2025 0eb2 0F93 push r16
2026 0eb4 E091 0000 lds r30,_printf_P
2027 0eb8 F091 0000 lds r31,(_printf_P)+1
2028 0ebc 0995 icall
2029 0ebe 8CE3 ldi r24,lo8(60)
2030 0ec0 8093 0000 sts DispPtr,r24
2031 0ec4 EDB7 in r30,__SP_L__
2032 0ec6 FEB7 in r31,__SP_H__
2033 0ec8 3696 adiw r30,6
2034 0eca EDBF out __SP_L__,r30
2035 0ecc 8091 0000 lds r24,EE_Parameter+48
2036 0ed0 9927 clr r25
2037 0ed2 9F93 push r25
2038 0ed4 8F93 push r24
2039 0ed6 8091 0000 lds r24,EE_Parameter+47
2040 0eda 9927 clr r25
2041 0edc 9F93 push r25
2042 0ede 8F93 push r24
2043 0ee0 80E0 ldi r24,lo8(__c.56)
2044 0ee2 90E0 ldi r25,hi8(__c.56)
2045 0ee4 9F93 push r25
2046 0ee6 8F93 push r24
2047 0ee8 1F93 push r17
2048 0eea 0F93 push r16
2049 0eec E091 0000 lds r30,_printf_P
2050 0ef0 F091 0000 lds r31,(_printf_P)+1
2051 0ef4 0995 icall
2052 0ef6 2DB7 in r18,__SP_L__
2053 0ef8 3EB7 in r19,__SP_H__
2054 0efa 285F subi r18,lo8(-(8))
2055 0efc 3F4F sbci r19,hi8(-(8))
2056 .L116:
2057 0efe 2DBF out __SP_L__,r18
2058 0f00 00C0 rjmp .L20
2059 .L86:
2060 0f02 1092 0000 sts DispPtr,__zero_reg__
2061 0f06 80E0 ldi r24,lo8(__c.57)
2062 0f08 90E0 ldi r25,hi8(__c.57)
2063 0f0a 9F93 push r25
2064 0f0c 8F93 push r24
2065 0f0e 70E0 ldi r23,lo8(pm(Menu_Putchar))
2066 0f10 A72E mov r10,r23
2067 0f12 70E0 ldi r23,hi8(pm(Menu_Putchar))
2068 0f14 B72E mov r11,r23
2069 0f16 DF92 push r13
2070 0f18 CF92 push r12
2071 0f1a FE01 movw r30,r28
2072 0f1c 0995 icall
2073 0f1e 0F90 pop __tmp_reg__
2074 0f20 0F90 pop __tmp_reg__
2075 0f22 0F90 pop __tmp_reg__
2076 0f24 0F90 pop __tmp_reg__
2077 0f26 C0E0 ldi r28,lo8(Motor)
2078 0f28 D0E0 ldi r29,hi8(Motor)
2079 0f2a 00E0 ldi r16,lo8(0)
2080 0f2c 10E0 ldi r17,hi8(0)
2081 0f2e 62E0 ldi r22,lo8(2)
2082 0f30 F62E mov r15,r22
2083 .L90:
2084 0f32 802F mov r24,r16
2085 0f34 8C5E subi r24,lo8(-(20))
2086 0f36 8093 0000 sts DispPtr,r24
2087 0f3a 8B8D ldd r24,Y+27
2088 0f3c 9927 clr r25
2089 0f3e 8F77 andi r24,lo8(127)
2090 0f40 9070 andi r25,hi8(127)
2091 0f42 9F93 push r25
2092 0f44 8F93 push r24
2093 0f46 8B89 ldd r24,Y+19
2094 0f48 9927 clr r25
2095 0f4a 8F77 andi r24,lo8(127)
2096 0f4c 9070 andi r25,hi8(127)
2097 0f4e 9F93 push r25
2098 0f50 8F93 push r24
2099 0f52 8B85 ldd r24,Y+11
2100 0f54 9927 clr r25
2101 0f56 8F77 andi r24,lo8(127)
2102 0f58 9070 andi r25,hi8(127)
2103 0f5a 9F93 push r25
2104 0f5c 8F93 push r24
2105 0f5e 8B81 ldd r24,Y+3
2106 0f60 9927 clr r25
2107 0f62 8F77 andi r24,lo8(127)
2108 0f64 9070 andi r25,hi8(127)
2109 0f66 9F93 push r25
2110 0f68 8F93 push r24
2111 0f6a 80E0 ldi r24,lo8(__c.58)
2112 0f6c 90E0 ldi r25,hi8(__c.58)
2113 0f6e 9F93 push r25
2114 0f70 8F93 push r24
2115 0f72 BF92 push r11
2116 0f74 AF92 push r10
2117 0f76 E091 0000 lds r30,_printf_P
2118 0f7a F091 0000 lds r31,(_printf_P)+1
2119 0f7e 0995 icall
2120 0f80 8DB7 in r24,__SP_L__
2121 0f82 9EB7 in r25,__SP_H__
2122 0f84 0C96 adiw r24,12
2123 0f86 8DBF out __SP_L__,r24
2124 0f88 FA94 dec r15
2125 0f8a 0C5E subi r16,lo8(-(20))
2126 0f8c 1F4F sbci r17,hi8(-(20))
2127 0f8e A096 adiw r28,32
2128 0f90 F7FE sbrs r15,7
2129 0f92 00C0 rjmp .L90
2130 0f94 00C0 rjmp .L20
2131 .L91:
2132 0f96 1092 0000 sts DispPtr,__zero_reg__
2133 0f9a 80E0 ldi r24,lo8(__c.59)
2134 0f9c 90E0 ldi r25,hi8(__c.59)
2135 0f9e 9F93 push r25
2136 0fa0 8F93 push r24
2137 0fa2 50E0 ldi r21,lo8(pm(Menu_Putchar))
2138 0fa4 A52E mov r10,r21
2139 0fa6 50E0 ldi r21,hi8(pm(Menu_Putchar))
2140 0fa8 B52E mov r11,r21
2141 0faa DF92 push r13
2142 0fac CF92 push r12
2143 0fae FE01 movw r30,r28
2144 0fb0 0995 icall
2145 0fb2 0F90 pop __tmp_reg__
2146 0fb4 0F90 pop __tmp_reg__
2147 0fb6 0F90 pop __tmp_reg__
2148 0fb8 0F90 pop __tmp_reg__
2149 0fba C0E0 ldi r28,lo8(Motor)
2150 0fbc D0E0 ldi r29,hi8(Motor)
2151 0fbe 00E0 ldi r16,lo8(0)
2152 0fc0 10E0 ldi r17,hi8(0)
2153 0fc2 42E0 ldi r20,lo8(2)
2154 0fc4 F42E mov r15,r20
2155 .L95:
2156 0fc6 802F mov r24,r16
2157 0fc8 8C5E subi r24,lo8(-(20))
2158 0fca 8093 0000 sts DispPtr,r24
2159 0fce 8F8D ldd r24,Y+31
2160 0fd0 9927 clr r25
2161 0fd2 87FD sbrc r24,7
2162 0fd4 9095 com r25
2163 0fd6 9F93 push r25
2164 0fd8 8F93 push r24
2165 0fda 8F89 ldd r24,Y+23
2166 0fdc 9927 clr r25
2167 0fde 87FD sbrc r24,7
2168 0fe0 9095 com r25
2169 0fe2 9F93 push r25
2170 0fe4 8F93 push r24
2171 0fe6 8F85 ldd r24,Y+15
2172 0fe8 9927 clr r25
2173 0fea 87FD sbrc r24,7
2174 0fec 9095 com r25
2175 0fee 9F93 push r25
2176 0ff0 8F93 push r24
2177 0ff2 8F81 ldd r24,Y+7
2178 0ff4 9927 clr r25
2179 0ff6 87FD sbrc r24,7
2180 0ff8 9095 com r25
2181 0ffa 9F93 push r25
2182 0ffc 8F93 push r24
2183 0ffe 80E0 ldi r24,lo8(__c.60)
2184 1000 90E0 ldi r25,hi8(__c.60)
2185 1002 9F93 push r25
2186 1004 8F93 push r24
2187 1006 BF92 push r11
2188 1008 AF92 push r10
2189 100a E091 0000 lds r30,_printf_P
2190 100e F091 0000 lds r31,(_printf_P)+1
2191 1012 0995 icall
2192 1014 EDB7 in r30,__SP_L__
2193 1016 FEB7 in r31,__SP_H__
2194 1018 3C96 adiw r30,12
2195 101a EDBF out __SP_L__,r30
2196 101c FA94 dec r15
2197 101e 0C5E subi r16,lo8(-(20))
2198 1020 1F4F sbci r17,hi8(-(20))
2199 1022 A096 adiw r28,32
2200 1024 F7FE sbrs r15,7
2201 1026 00C0 rjmp .L95
2202 1028 00C0 rjmp .L20
2203 .L96:
2204 102a 1092 0000 sts DispPtr,__zero_reg__
2205 102e 80E0 ldi r24,lo8(__c.61)
2206 1030 90E0 ldi r25,hi8(__c.61)
2207 1032 9F93 push r25
2208 1034 8F93 push r24
2209 1036 00E0 ldi r16,lo8(pm(Menu_Putchar))
2210 1038 10E0 ldi r17,hi8(pm(Menu_Putchar))
2211 103a DF92 push r13
2212 103c CF92 push r12
2213 103e FE01 movw r30,r28
2214 1040 0995 icall
2215 1042 84E1 ldi r24,lo8(20)
2216 1044 8093 0000 sts DispPtr,r24
2217 1048 0F90 pop __tmp_reg__
2218 104a 0F90 pop __tmp_reg__
2219 104c 0F90 pop __tmp_reg__
2220 104e 0F90 pop __tmp_reg__
2221 1050 8091 0000 lds r24,Motor+27
2222 1054 881F rol r24
2223 1056 8827 clr r24
2224 1058 881F rol r24
2225 105a 97E0 ldi r25,lo8(7)
2226 105c 899F mul r24,r25
2227 105e C001 movw r24,r0
2228 1060 1124 clr r1
2229 1062 8D96 adiw r24,45
2230 1064 9F93 push r25
2231 1066 8F93 push r24
2232 1068 8091 0000 lds r24,Motor+19
2233 106c 881F rol r24
2234 106e 8827 clr r24
2235 1070 881F rol r24
2236 1072 96E0 ldi r25,lo8(6)
2237 1074 899F mul r24,r25
2238 1076 C001 movw r24,r0
2239 1078 1124 clr r1
2240 107a 8D96 adiw r24,45
2241 107c 9F93 push r25
2242 107e 8F93 push r24
2243 1080 8091 0000 lds r24,Motor+11
2244 1084 881F rol r24
2245 1086 8827 clr r24
2246 1088 881F rol r24
2247 108a 95E0 ldi r25,lo8(5)
2248 108c 899F mul r24,r25
2249 108e C001 movw r24,r0
2250 1090 1124 clr r1
2251 1092 8D96 adiw r24,45
2252 1094 9F93 push r25
2253 1096 8F93 push r24
2254 1098 8091 0000 lds r24,Motor+3
2255 109c 881F rol r24
2256 109e 8827 clr r24
2257 10a0 881F rol r24
2258 10a2 9927 clr r25
2259 10a4 880F lsl r24
2260 10a6 991F rol r25
2261 10a8 880F lsl r24
2262 10aa 991F rol r25
2263 10ac 8D96 adiw r24,45
2264 10ae 9F93 push r25
2265 10b0 8F93 push r24
2266 10b2 80E0 ldi r24,lo8(__c.62)
2267 10b4 90E0 ldi r25,hi8(__c.62)
2268 10b6 9F93 push r25
2269 10b8 8F93 push r24
2270 10ba DF92 push r13
2271 10bc CF92 push r12
2272 10be E091 0000 lds r30,_printf_P
2273 10c2 F091 0000 lds r31,(_printf_P)+1
2274 10c6 0995 icall
2275 10c8 88E2 ldi r24,lo8(40)
2276 10ca 8093 0000 sts DispPtr,r24
2277 10ce 2DB7 in r18,__SP_L__
2278 10d0 3EB7 in r19,__SP_H__
2279 10d2 245F subi r18,lo8(-(12))
2280 10d4 3F4F sbci r19,hi8(-(12))
2281 10d6 2DBF out __SP_L__,r18
2282 10d8 8091 0000 lds r24,Motor+59
2283 10dc 881F rol r24
2284 10de 8827 clr r24
2285 10e0 881F rol r24
2286 10e2 9BE0 ldi r25,lo8(11)
2287 10e4 899F mul r24,r25
2288 10e6 C001 movw r24,r0
2289 10e8 1124 clr r1
2290 10ea 8D96 adiw r24,45
2291 10ec 9F93 push r25
2292 10ee 8F93 push r24
2293 10f0 8091 0000 lds r24,Motor+51
2294 10f4 881F rol r24
2295 10f6 8827 clr r24
2296 10f8 881F rol r24
2297 10fa 9AE0 ldi r25,lo8(10)
2298 10fc 899F mul r24,r25
2299 10fe C001 movw r24,r0
2300 1100 1124 clr r1
2301 1102 8D96 adiw r24,45
2302 1104 9F93 push r25
2303 1106 8F93 push r24
2304 1108 8091 0000 lds r24,Motor+43
2305 110c 881F rol r24
2306 110e 8827 clr r24
2307 1110 881F rol r24
2308 1112 99E0 ldi r25,lo8(9)
2309 1114 899F mul r24,r25
2310 1116 C001 movw r24,r0
2311 1118 1124 clr r1
2312 111a 8D96 adiw r24,45
2313 111c 9F93 push r25
2314 111e 8F93 push r24
2315 1120 8091 0000 lds r24,Motor+35
2316 1124 881F rol r24
2317 1126 8827 clr r24
2318 1128 881F rol r24
2319 112a 9927 clr r25
2320 112c 23E0 ldi r18,3
2321 112e 880F 1: lsl r24
2322 1130 991F rol r25
2323 1132 2A95 dec r18
2324 1134 01F4 brne 1b
2325 1136 8D96 adiw r24,45
2326 1138 9F93 push r25
2327 113a 8F93 push r24
2328 113c 80E0 ldi r24,lo8(__c.63)
2329 113e 90E0 ldi r25,hi8(__c.63)
2330 1140 9F93 push r25
2331 1142 8F93 push r24
2332 1144 DF92 push r13
2333 1146 CF92 push r12
2334 1148 E091 0000 lds r30,_printf_P
2335 114c F091 0000 lds r31,(_printf_P)+1
2336 1150 0995 icall
2337 1152 8CE3 ldi r24,lo8(60)
2338 1154 8093 0000 sts DispPtr,r24
2339 1158 8DB7 in r24,__SP_L__
2340 115a 9EB7 in r25,__SP_H__
2341 115c 0C96 adiw r24,12
2342 115e 8DBF out __SP_L__,r24
2343 1160 8091 0000 lds r24,Motor+67
2344 1164 881F rol r24
2345 1166 8827 clr r24
2346 1168 881F rol r24
2347 116a 9CE0 ldi r25,lo8(12)
2348 116c 899F mul r24,r25
2349 116e C001 movw r24,r0
2350 1170 1124 clr r1
2351 1172 8D96 adiw r24,45
2352 1174 9F93 push r25
2353 1176 8F93 push r24
2354 1178 80E0 ldi r24,lo8(__c.64)
2355 117a 90E0 ldi r25,hi8(__c.64)
2356 117c 9F93 push r25
2357 117e 8F93 push r24
2358 1180 DF92 push r13
2359 1182 CF92 push r12
2360 1184 E091 0000 lds r30,_printf_P
2361 1188 F091 0000 lds r31,(_printf_P)+1
2362 118c 0995 icall
2363 118e 8091 0000 lds r24,Motor+75
2364 1192 EDB7 in r30,__SP_L__
2365 1194 FEB7 in r31,__SP_H__
2366 1196 3696 adiw r30,6
2367 1198 EDBF out __SP_L__,r30
2368 119a 87FF sbrs r24,7
2369 119c 00C0 rjmp .L97
2370 119e 80E4 ldi r24,lo8(64)
2371 11a0 8093 0000 sts DispPtr,r24
2372 11a4 80E0 ldi r24,lo8(__c.65)
2373 11a6 90E0 ldi r25,hi8(__c.65)
2374 11a8 9F93 push r25
2375 11aa 8F93 push r24
2376 11ac DF92 push r13
2377 11ae CF92 push r12
2378 11b0 E091 0000 lds r30,_printf_P
2379 11b4 F091 0000 lds r31,(_printf_P)+1
2380 11b8 0995 icall
2381 11ba 0F90 pop __tmp_reg__
2382 11bc 0F90 pop __tmp_reg__
2383 11be 0F90 pop __tmp_reg__
2384 11c0 0F90 pop __tmp_reg__
2385 .L97:
2386 11c2 8091 0000 lds r24,Motor+83
2387 11c6 87FF sbrs r24,7
2388 11c8 00C0 rjmp .L98
2389 11ca 84E4 ldi r24,lo8(68)
2390 11cc 8093 0000 sts DispPtr,r24
2391 11d0 80E0 ldi r24,lo8(__c.66)
2392 11d2 90E0 ldi r25,hi8(__c.66)
2393 11d4 9F93 push r25
2394 11d6 8F93 push r24
2395 11d8 1F93 push r17
2396 11da 0F93 push r16
2397 11dc E091 0000 lds r30,_printf_P
2398 11e0 F091 0000 lds r31,(_printf_P)+1
2399 11e4 0995 icall
2400 11e6 0F90 pop __tmp_reg__
2401 11e8 0F90 pop __tmp_reg__
2402 11ea 0F90 pop __tmp_reg__
2403 11ec 0F90 pop __tmp_reg__
2404 .L98:
2405 11ee 8091 0000 lds r24,Motor+91
2406 11f2 87FF sbrs r24,7
2407 11f4 00C0 rjmp .L20
2408 11f6 88E4 ldi r24,lo8(72)
2409 11f8 8093 0000 sts DispPtr,r24
2410 11fc 80E0 ldi r24,lo8(__c.67)
2411 11fe 90E0 ldi r25,hi8(__c.67)
2412 .L125:
2413 1200 9F93 push r25
2414 1202 8F93 push r24
2415 1204 1F93 push r17
2416 1206 0F93 push r16
2417 .L118:
2418 1208 E091 0000 lds r30,_printf_P
2419 120c F091 0000 lds r31,(_printf_P)+1
2420 1210 0995 icall
2421 1212 0F90 pop __tmp_reg__
2422 1214 0F90 pop __tmp_reg__
2423 1216 0F90 pop __tmp_reg__
2424 1218 0F90 pop __tmp_reg__
2425 121a 00C0 rjmp .L20
2426 .L100:
2427 121c 1092 0000 sts DispPtr,__zero_reg__
2428 1220 80E0 ldi r24,lo8(__c.68)
2429 1222 90E0 ldi r25,hi8(__c.68)
2430 1224 9F93 push r25
2431 1226 8F93 push r24
2432 1228 DF92 push r13
2433 122a CF92 push r12
2434 122c FE01 movw r30,r28
2435 122e 0995 icall
2436 1230 84E1 ldi r24,lo8(20)
2437 1232 8093 0000 sts DispPtr,r24
2438 1236 0F90 pop __tmp_reg__
2439 1238 0F90 pop __tmp_reg__
2440 123a 0F90 pop __tmp_reg__
2441 123c 0F90 pop __tmp_reg__
2442 123e 8091 0000 lds r24,FlugMinutenGesamt
2443 1242 9091 0000 lds r25,(FlugMinutenGesamt)+1
2444 1246 9F93 push r25
2445 1248 8F93 push r24
2446 124a 80E0 ldi r24,lo8(__c.69)
2447 124c 90E0 ldi r25,hi8(__c.69)
2448 124e 9F93 push r25
2449 1250 8F93 push r24
2450 1252 DF92 push r13
2451 1254 CF92 push r12
2452 1256 E091 0000 lds r30,_printf_P
2453 125a F091 0000 lds r31,(_printf_P)+1
2454 125e 0995 icall
2455 1260 88E2 ldi r24,lo8(40)
2456 1262 8093 0000 sts DispPtr,r24
2457 1266 2DB7 in r18,__SP_L__
2458 1268 3EB7 in r19,__SP_H__
2459 126a 2A5F subi r18,lo8(-(6))
2460 126c 3F4F sbci r19,hi8(-(6))
2461 126e 2DBF out __SP_L__,r18
2462 1270 8091 0000 lds r24,FlugMinuten
2463 1274 9091 0000 lds r25,(FlugMinuten)+1
2464 1278 9F93 push r25
2465 127a 8F93 push r24
2466 127c 80E0 ldi r24,lo8(__c.70)
2467 127e 90E0 ldi r25,hi8(__c.70)
2468 1280 9F93 push r25
2469 1282 8F93 push r24
2470 1284 DF92 push r13
2471 1286 CF92 push r12
2472 1288 E091 0000 lds r30,_printf_P
2473 128c F091 0000 lds r31,(_printf_P)+1
2474 1290 0995 icall
2475 1292 89E4 ldi r24,lo8(73)
2476 1294 8093 0000 sts DispPtr,r24
2477 1298 8DB7 in r24,__SP_L__
2478 129a 9EB7 in r25,__SP_H__
2479 129c 0696 adiw r24,6
2480 129e 8DBF out __SP_L__,r24
2481 12a0 80E0 ldi r24,lo8(__c.71)
2482 12a2 90E0 ldi r25,hi8(__c.71)
2483 12a4 9F93 push r25
2484 12a6 8F93 push r24
2485 12a8 DF92 push r13
2486 12aa CF92 push r12
2487 12ac E091 0000 lds r30,_printf_P
2488 12b0 F091 0000 lds r31,(_printf_P)+1
2489 12b4 0995 icall
2490 12b6 8091 0000 lds r24,RemoteKeys
2491 12ba 0F90 pop __tmp_reg__
2492 12bc 0F90 pop __tmp_reg__
2493 12be 0F90 pop __tmp_reg__
2494 12c0 0F90 pop __tmp_reg__
2495 12c2 83FF sbrs r24,3
2496 12c4 00C0 rjmp .L20
2497 12c6 1092 0000 sts (FlugMinuten)+1,__zero_reg__
2498 12ca 1092 0000 sts FlugMinuten,__zero_reg__
2499 12ce 60E0 ldi r22,lo8(0)
2500 12d0 70E0 ldi r23,hi8(0)
2501 12d2 8EE0 ldi r24,lo8(14)
2502 12d4 90E0 ldi r25,hi8(14)
2503 12d6 0E94 0000 call SetParamWord
2504 12da 00C0 rjmp .L20
2505 .L102:
2506 12dc 8091 0000 lds r24,MaxMenue
2507 12e0 2817 cp r18,r24
2508 12e2 01F4 brne .L103
2509 12e4 2150 subi r18,lo8(-(-1))
2510 12e6 2093 0000 sts MaxMenue,r18
2511 .L103:
2512 12ea 1092 0000 sts MenuePunkt,__zero_reg__
2513 .L20:
2514 12ee 1092 0000 sts RemoteKeys,__zero_reg__
2515 /* epilogue: frame size=0 */
2516 12f2 DF91 pop r29
2517 12f4 CF91 pop r28
2518 12f6 1F91 pop r17
2519 12f8 0F91 pop r16
2520 12fa FF90 pop r15
2521 12fc DF90 pop r13
2522 12fe CF90 pop r12
2523 1300 BF90 pop r11
2524 1302 AF90 pop r10
2525 1304 0895 ret
2526 /* epilogue end (size=10) */
2527 /* function Menu size 2447 (2428) */
2529 .comm DisplayBuff,80,1
2530 /* File "menu.c": code 2469 = 0x09a5 (2449), prologues 9, epilogues 11 */
DEFINED SYMBOLS
*ABS*:00000000 menu.c
C:\Temp/ccvGmRUy.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccvGmRUy.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccvGmRUy.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccvGmRUy.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccvGmRUy.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccvGmRUy.s:15 .bss:00000000 RemoteKeys
C:\Temp/ccvGmRUy.s:21 .bss:00000001 MenuePunkt
C:\Temp/ccvGmRUy.s:27 .data:00000000 MaxMenue
C:\Temp/ccvGmRUy.s:34 .bss:00000002 DispPtr
C:\Temp/ccvGmRUy.s:39 .text:00000000 LcdClear
*COM*:00000050 DisplayBuff
C:\Temp/ccvGmRUy.s:58 .text:00000012 Menu_Putchar
C:\Temp/ccvGmRUy.s:81 .progmem.data:00000000 __c.0
C:\Temp/ccvGmRUy.s:85 .progmem.data:00000005 __c.1
C:\Temp/ccvGmRUy.s:89 .progmem.data:0000000a __c.2
C:\Temp/ccvGmRUy.s:93 .progmem.data:0000001a __c.3
C:\Temp/ccvGmRUy.s:97 .progmem.data:00000032 __c.4
C:\Temp/ccvGmRUy.s:101 .progmem.data:00000040 __c.5
C:\Temp/ccvGmRUy.s:105 .progmem.data:0000004d __c.6
C:\Temp/ccvGmRUy.s:109 .progmem.data:00000055 __c.7
C:\Temp/ccvGmRUy.s:113 .progmem.data:0000006c __c.8
C:\Temp/ccvGmRUy.s:117 .progmem.data:00000081 __c.9
C:\Temp/ccvGmRUy.s:121 .progmem.data:0000008e __c.10
C:\Temp/ccvGmRUy.s:125 .progmem.data:0000009b __c.11
C:\Temp/ccvGmRUy.s:129 .progmem.data:000000a8 __c.12
C:\Temp/ccvGmRUy.s:133 .progmem.data:000000b5 __c.13
C:\Temp/ccvGmRUy.s:137 .progmem.data:000000c2 __c.14
C:\Temp/ccvGmRUy.s:141 .progmem.data:000000d1 __c.15
C:\Temp/ccvGmRUy.s:145 .progmem.data:000000da __c.16
C:\Temp/ccvGmRUy.s:149 .progmem.data:000000e7 __c.17
C:\Temp/ccvGmRUy.s:153 .progmem.data:000000f6 __c.18
C:\Temp/ccvGmRUy.s:157 .progmem.data:00000105 __c.19
C:\Temp/ccvGmRUy.s:161 .progmem.data:00000114 __c.20
C:\Temp/ccvGmRUy.s:165 .progmem.data:00000126 __c.21
C:\Temp/ccvGmRUy.s:169 .progmem.data:00000136 __c.22
C:\Temp/ccvGmRUy.s:173 .progmem.data:00000146 __c.23
C:\Temp/ccvGmRUy.s:177 .progmem.data:00000156 __c.24
C:\Temp/ccvGmRUy.s:181 .progmem.data:00000166 __c.25
C:\Temp/ccvGmRUy.s:185 .progmem.data:00000174 __c.26
C:\Temp/ccvGmRUy.s:189 .progmem.data:00000185 __c.27
C:\Temp/ccvGmRUy.s:193 .progmem.data:00000196 __c.28
C:\Temp/ccvGmRUy.s:197 .progmem.data:000001a4 __c.29
C:\Temp/ccvGmRUy.s:201 .progmem.data:000001b6 __c.30
C:\Temp/ccvGmRUy.s:205 .progmem.data:000001c8 __c.31
C:\Temp/ccvGmRUy.s:209 .progmem.data:000001d7 __c.32
C:\Temp/ccvGmRUy.s:213 .progmem.data:000001eb __c.33
C:\Temp/ccvGmRUy.s:217 .progmem.data:000001ff __c.34
C:\Temp/ccvGmRUy.s:221 .progmem.data:00000213 __c.35
C:\Temp/ccvGmRUy.s:225 .progmem.data:00000220 __c.36
C:\Temp/ccvGmRUy.s:229 .progmem.data:0000022f __c.37
C:\Temp/ccvGmRUy.s:233 .progmem.data:0000023e __c.38
C:\Temp/ccvGmRUy.s:237 .progmem.data:0000024d __c.39
C:\Temp/ccvGmRUy.s:241 .progmem.data:00000261 __c.40
C:\Temp/ccvGmRUy.s:245 .progmem.data:00000275 __c.41
C:\Temp/ccvGmRUy.s:249 .progmem.data:00000285 __c.42
C:\Temp/ccvGmRUy.s:253 .progmem.data:00000297 __c.43
C:\Temp/ccvGmRUy.s:257 .progmem.data:000002a0 __c.44
C:\Temp/ccvGmRUy.s:261 .progmem.data:000002b0 __c.45
C:\Temp/ccvGmRUy.s:265 .progmem.data:000002c0 __c.46
C:\Temp/ccvGmRUy.s:269 .progmem.data:000002d0 __c.47
C:\Temp/ccvGmRUy.s:273 .progmem.data:000002d8 __c.48
C:\Temp/ccvGmRUy.s:277 .progmem.data:000002e6 __c.49
C:\Temp/ccvGmRUy.s:281 .progmem.data:000002f4 __c.50
C:\Temp/ccvGmRUy.s:285 .progmem.data:00000302 __c.51
C:\Temp/ccvGmRUy.s:289 .progmem.data:0000030f __c.52
C:\Temp/ccvGmRUy.s:293 .progmem.data:0000031c __c.53
C:\Temp/ccvGmRUy.s:297 .progmem.data:00000324 __c.54
C:\Temp/ccvGmRUy.s:301 .progmem.data:00000332 __c.55
C:\Temp/ccvGmRUy.s:305 .progmem.data:00000340 __c.56
C:\Temp/ccvGmRUy.s:309 .progmem.data:0000034e __c.57
C:\Temp/ccvGmRUy.s:313 .progmem.data:0000035e __c.58
C:\Temp/ccvGmRUy.s:317 .progmem.data:0000036f __c.59
C:\Temp/ccvGmRUy.s:321 .progmem.data:0000037e __c.60
C:\Temp/ccvGmRUy.s:325 .progmem.data:0000038f __c.61
C:\Temp/ccvGmRUy.s:329 .progmem.data:0000039e __c.62
C:\Temp/ccvGmRUy.s:333 .progmem.data:000003b2 __c.63
C:\Temp/ccvGmRUy.s:337 .progmem.data:000003c6 __c.64
C:\Temp/ccvGmRUy.s:341 .progmem.data:000003d7 __c.65
C:\Temp/ccvGmRUy.s:345 .progmem.data:000003da __c.66
C:\Temp/ccvGmRUy.s:349 .progmem.data:000003dd __c.67
C:\Temp/ccvGmRUy.s:353 .progmem.data:000003e0 __c.68
C:\Temp/ccvGmRUy.s:357 .progmem.data:000003ee __c.69
C:\Temp/ccvGmRUy.s:361 .progmem.data:000003fb __c.70
C:\Temp/ccvGmRUy.s:365 .progmem.data:00000408 __c.71
C:\Temp/ccvGmRUy.s:370 .text:0000002c Menu
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
_printf_P
__tablejump2__
PlatinenVersion
__udivmodqi4
Mixer
GetActiveParamSet
VersionInfo
NC_ErrorCode
NC_ERROR_TEXT
MissingMotor
I2CTimeout
Parameter_GlobalConfig
HoehenWert
__divmodsi4
SollHoehe
MessLuftdruck
IntegralNick
IntegralRoll
ErsatzKompassInGrad
PPM_in
EE_Parameter
AdNeutralNick
AdWertNick
AdNeutralRoll
AdWertRoll
AdNeutralGier
AdWertGier
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
NeutralAccX
AdWertAccNick
NeutralAccY
AdWertAccRoll
NeutralAccZ
AdWertAccHoch
UBat
__divmodhi4
Capacity
__udivmodhi4
SenderOkay
Channels
KompassValue
KompassSollWert
Poti
Parameter_ServoNickControl
ServoNickValue
Motor
FlugMinutenGesamt
FlugMinuten
SetParamWord
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/mymath.c
0,0 → 1,41
#include <stdlib.h>
#include <avr/pgmspace.h>
#include "mymath.h"
 
// discrete mathematics
 
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit.
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192};
 
int16_t c_sin_8192(int16_t angle)
{
int8_t m,n;
int16_t sinus;
 
// avoid negative angles
if (angle < 0)
{
m = -1;
angle = abs(angle);
}
else m = +1;
 
// fold angle to intervall 0 to 359
angle %= 360;
 
// check quadrant
if (angle <= 90) n=1; // first quadrant
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant
else {angle = 360 - angle; n = -1;} //fourth quadrant
// get lookup value
sinus = pgm_read_word(&pgm_sinlookup[angle]);
// calculate sinus value
return (sinus * m * n);
}
 
// Cosinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit.
int16_t c_cos_8192(int16_t angle)
{
return (c_sin_8192(90 - angle));
}
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/mymath.h
0,0 → 1,10
#ifndef _MYMATH_H
#define _MYMATH_H
 
#include <inttypes.h>
 
extern int16_t c_sin_8192(int16_t angle);
extern int16_t c_cos_8192(int16_t angle);
extern int16_t c_atan2(int16_t y, int16_t x);
extern uint32_t c_sqrt(uint32_t a);
#endif // _MYMATH_H
/branches/v0.90d_Ernstl_4-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/cctSHyeF.s:3 *ABS*:0000003f __SREG__
C:\Temp/cctSHyeF.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cctSHyeF.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cctSHyeF.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cctSHyeF.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cctSHyeF.s:14 .progmem.data:00000000 pgm_sinlookup
C:\Temp/cctSHyeF.s:109 .text:00000000 c_sin_8192
C:\Temp/cctSHyeF.s:203 .text:00000098 c_cos_8192
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/printf_P.h
0,0 → 1,69
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************/
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
// function pointer to external callback function
typedef void (*pVoidFnctChar) (char );
typedef void (*pVoidFnct_pVoidFnctChar_const_fmt) (pVoidFnctChar, char const *fmt0, ...);
extern pVoidFnct_pVoidFnctChar_const_fmt _printf_P;
 
 
#endif //_PRINTF_P_H_
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/rc.c
0,0 → 1,269
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt
 
volatile int PPM_in[26];
volatile int PPM_diff[26]; // das diffenzierte Stick-Signal
volatile char Channels,tmpChannels = 0;
volatile unsigned char NewPpmData = 1;
unsigned int PPM_Neutral = 466;
 
//############################################################################
// Clear the values
void rc_sum_init (void)
//############################################################################
{
unsigned char i;
for(i=0;i<26;i++)
{
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127;
PPM_diff[i] = 0;
}
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
#ifndef ACT_S3D_SUMMENSIGNAL
//############################################################################
// Interrupt function for the PPM-Input
ISR(TIMER1_CAPT_vect)
//############################################################################
{
if(!(EE_Parameter.ExtraConfig & CFG_SENSITIVE_RC))
{
static unsigned int AltICR=0;
signed int signal = 0,tmp;
static int index;
 
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause? (3.52 ms < signal < 25.6 ms)
if((signal > 1100) && (signal < 8000))
{
Channels = index;
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
index = 1;
}
else
{
if(index < 13)
{
if((signal > 250) && (signal < 687))
{
signal -= PPM_Neutral;
// Stabiles Signal
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;}
}
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
}
index++;
if(PlatinenVersion < 20)
{
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen
}
}
}
}
else
{
static unsigned int AltICR=0;
static int ppm_in[13];
static int ppm_diff[13];
static int old_ppm_in[13];
static int old_ppm_diff[13];
signed int signal = 0,tmp;
static unsigned char index, okay_cnt = 0;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause? (3.52 ms < signal < 25.6 ms)
if((signal > 1100) && (signal < 8000))
{
tmpChannels = index;
if(tmpChannels >= 4 && Channels == tmpChannels)
{
if(okay_cnt > 10)
{
NewPpmData = 0; // Null bedeutet: Neue Daten
for(index = 0; index < 13; index++)
{
if(okay_cnt > 30)
{
old_ppm_in[index] = PPM_in[index];
old_ppm_diff[index] = PPM_diff[index];
}
PPM_in[index] = ppm_in[index];
PPM_diff[index] = ppm_diff[index];
}
}
if(okay_cnt < 255) okay_cnt++;
}
else
{
if(okay_cnt > 100) okay_cnt = 10; else okay_cnt = 0;
ROT_ON;
}
index = 1;
if(!MotorenEin) Channels = tmpChannels;
}
else
{
if(index < 13)
{
if((signal > 250) && (signal < 687))
{
signal -= PPM_Neutral;
// Stabiles Signal
if((abs(signal - ppm_in[index]) < 6))
{
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(okay_cnt > 25) SenderOkay += 10;
else
if(okay_cnt > 10) SenderOkay += 2;
if(SenderOkay > 200) SenderOkay = 200;
}
}
tmp = (3 * (ppm_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 190) ppm_diff[index] = ((tmp - ppm_in[index]) / 3) * 3;
else ppm_diff[index] = 0;
ppm_in[index] = tmp;
}
else ROT_ON;
if(PlatinenVersion < 20)
{
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen
}
}
if(index < 20) index++;
else
if(index == 20)
{
unsigned char i;
ROT_ON;
index = 30;
for(i=0;i<13;i++) // restore from older data
{
PPM_in[i] = old_ppm_in[i];
PPM_diff[i] = 0;
// okay_cnt /= 2;
}
}
}
}
}
 
#else
//############################################################################
// Interrupt function for the PPM-Input
ISR(TIMER1_CAPT_vect)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0,tmp;
static int index;
 
signal = (unsigned int) ICR1 - AltICR;
signal /= 2;
AltICR = ICR1;
//Syncronisationspause?
if((signal > 1100*2) && (signal < 8000*2))
{
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
index = 1;
}
else
{
if(index < 13)
{
if((signal > 250) && (signal < 687*2))
{
signal -= 962;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
}
index++;
}
}
}
#endif
 
 
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/rc.h
0,0 → 1,27
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega644__)
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644P__)
#define TIMER_RELOAD_VALUE 250
#endif
 
#define GAS PPM_in[2]
#define FromNC_WP_EventChannel PPM_in[25] // WP_EVENT-Channel-Value
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[26];
extern volatile int PPM_diff[26]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
extern volatile char Channels,tmpChannels;
extern unsigned int PPM_Neutral;
 
#endif //_RC_H
/branches/v0.90d_Ernstl_4-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/cctnQZFd.s:3 *ABS*:0000003f __SREG__
C:\Temp/cctnQZFd.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cctnQZFd.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cctnQZFd.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cctnQZFd.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cctnQZFd.s:14 .data:00000000 PPM_Neutral
C:\Temp/cctnQZFd.s:19 .data:00000002 NewPpmData
C:\Temp/cctnQZFd.s:26 .bss:00000000 tmpChannels
C:\Temp/cctnQZFd.s:31 .text:00000000 rc_sum_init
*COM*:00000034 PPM_diff
*COM*:00000034 PPM_in
.bss:00000001 AltICR.0
C:\Temp/cctnQZFd.s:76 .bss:00000003 index.1
C:\Temp/cctnQZFd.s:77 .bss:00000005 AltICR.2
C:\Temp/cctnQZFd.s:78 .bss:00000007 ppm_in.3
C:\Temp/cctnQZFd.s:79 .bss:00000021 ppm_diff.4
C:\Temp/cctnQZFd.s:80 .bss:0000003b old_ppm_in.5
C:\Temp/cctnQZFd.s:81 .bss:00000055 old_ppm_diff.6
C:\Temp/cctnQZFd.s:82 .bss:0000006f index.7
C:\Temp/cctnQZFd.s:83 .bss:00000070 okay_cnt.8
C:\Temp/cctnQZFd.s:87 .text:00000052 __vector_12
*COM*:00000001 Channels
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
AdNeutralGier
AdNeutralRoll
AdNeutralNick
EE_Parameter
SenderOkay
__divmodhi4
PlatinenVersion
MotorenEin
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/sbus.c
0,0 → 1,199
/*#######################################################################################
Decodes the sbus protocol
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "sbus.h"
#include "main.h"
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
unsigned char NewSBusData = 0, sBusBuffer[25];
 
//############################################################################
// USART1 initialisation from killagreg
void SbusUartInit(void)
//############################################################################
{
// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint8_t sreg = SREG;
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1);
// disable all interrupts before reconfiguration
cli();
// disable RX-Interrupt
UCSR1B &= ~(1 << RXCIE1);
// disable TX-Interrupt
UCSR1B &= ~(1 << TXCIE1);
// disable DRE-Interrupt
UCSR1B &= ~(1 << UDRIE1);
// set direction of RXD1 and TXD1 pins
// set RXD1 (PD2) as an input pin
PORTD |= (1 << PORTD2);
DDRD &= ~(1 << DDD2);
 
// set TXD1 (PD3) as an output pin
PORTD |= (1 << PORTD3);
DDRD |= (1 << DDD3);
// USART0 Baud Rate Register
// set clock divider
UBRR1H = (uint8_t)(ubrr>>8);
UBRR1L = (uint8_t)ubrr;
// enable double speed operation
UCSR1A |= (1 << U2X1);
// enable receiver and transmitter
//UCSR1B = (1<<RXEN1)|(1<<TXEN1);
 
UCSR1B = (1<<RXEN1);
// set asynchronous mode
UCSR1C &= ~(1 << UMSEL11);
UCSR1C &= ~(1 << UMSEL10);
// parity
UCSR1C <= (1 << UPM11); // even
UCSR1C &= ~(1 << UPM10);
// stop bit
UCSR1C |= (1 << USBS1); // two
// 8-bit
UCSR1B &= ~(1 << UCSZ12);
UCSR1C |= (1 << UCSZ11);
UCSR1C |= (1 << UCSZ10);
// flush receive buffer explicit
while(UCSR1A & (1<<RXC1)) UDR1;
// enable RX-interrupts at the end
UCSR1B |= (1 << RXCIE1);
// -- End of USART1 initialisation
// restore global interrupt flags
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss'
SREG = sreg;
return;
}
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define MIN_FRAMEGAP 68 // 7ms
#define MAX_BYTEGAP 3 // 310us
 
//############################################################################
// Is called by the uart RX interrupt
//############################################################################
void SbusParser(unsigned char udr)
{
static unsigned char ptr = 0;
if(!SpektrumTimer && udr == 0x0f) // wait for the start
{
ptr = 0;
SpektrumTimer = 80; // 8ms gap
}
else
{
if(++ptr == 24) // last byte
{
NewSBusData = 1;
}
else
if(ptr > 24) ptr = 25;
else
{
sBusBuffer[ptr] = udr; // collect all bytes
}
}
}
 
void ProcessSBus(void)
{
static unsigned char load = 0;
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process;
unsigned int bitmask11 = 256;
signed int signal = 0,tmp;
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss'
{
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
{
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200;
}
signal = sBusBuffer[1];
if(!load--) { process = (12*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load
for(i = 0; i < process; i++) // collect the single bits
{
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11;
bitmask8 *= 2;
if(!bitmask8)
{
bitmask8 = 1;
sbyte++;
}
bitmask11 *= 2;
if(bitmask11 == 2048)
{
bitmask11 = 1;
signal = (signal-1024) / 5; // the resolution is higher than required
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
PPM_in[index] = tmp;
signal = 0;
index++; // next channel
}
}
NewPpmData = 0; // Null bedeutet: Neue Daten
}
NewSBusData = 0;
}
 
#endif
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/sbus.h
0,0 → 1,11
#ifndef _SBUS_H
#define _SBUS_H
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
extern unsigned char NewSBusData, sBusBuffer[25];
extern void SbusParser(unsigned char);
extern void SbusUartInit(void);
extern void ProcessSBus(void);
 
#endif
#endif
/branches/v0.90d_Ernstl_4-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/ccCCtwIg.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccCCtwIg.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccCCtwIg.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccCCtwIg.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccCCtwIg.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccCCtwIg.s:15 .bss:00000000 NewSBusData
C:\Temp/ccCCtwIg.s:20 .text:00000000 SbusUartInit
*COM*:00000019 sBusBuffer
.bss:00000001 ptr.1
C:\Temp/ccCCtwIg.s:95 .text:000000ba SbusParser
C:\Temp/ccCCtwIg.s:92 .bss:00000002 load.0
C:\Temp/ccCCtwIg.s:136 .text:000000fe ProcessSBus
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SpektrumTimer
__prologue_saves__
EE_Parameter
PPM_in
SenderOkay
__divmodhi4
PPM_diff
NewPpmData
__epilogue_restores__
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/spi.c
0,0 → 1,417
// ######################## SPI - FlightCtrl ###################
#include "main.h"
#include "eeprom.h"
 
//struct str_ToNaviCtrl_Version ToNaviCtrl_Version;
//struct str_FromNaviCtrl_Version FromNaviCtrl_Version;
struct str_ToNaviCtrl ToNaviCtrl;
struct str_FromNaviCtrl FromNaviCtrl;
struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
struct str_SPI_VersionInfo NC_Version;
struct str_GPSInfo GPSInfo;
 
unsigned char SPI_BufferIndex;
unsigned char SPI_RxBufferIndex;
signed char FromNC_Rotate_C = 32, FromNC_Rotate_S = 0;
 
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)];
unsigned char *SPI_TX_Buffer;
 
unsigned char SPITransferCompleted, SPI_ChkSum;
unsigned char SPI_RxDataValid,NaviDataOkay = 250;
 
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1,
SPI_FCCMD_STICK, SPI_FCCMD_MISC, SPI_FCCMD_VERSION,
SPI_FCCMD_STICK, SPI_FCCMD_SERVOS, SPI_FCCMD_ACCU,
SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2
};
unsigned char SPI_CommandCounter = 0;
unsigned char NC_ErrorCode = 0;
unsigned char NC_GPS_ModeCharacter = ' ';
unsigned char EarthMagneticField = 0;
unsigned char EarthMagneticInclination = 0, EarthMagneticInclinationTheoretic = 0;
unsigned char NC_To_FC_Flags = 0;
unsigned char NC_To_FC_MaxAltitude = 0; // this is a Parameter on the SD-card
signed int POI_KameraNick = 0; // in 0,1°
vector16_t MagVec = {0,0,0};
 
#ifdef USE_SPI_COMMUNICATION
 
//------------------------------------------------------
void SPI_MasterInit(void)
{
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT);
 
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64
SPSR = 0;//(1<<SPI2X);
 
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT);
SPITransferCompleted = 1;
 
//SPDR = 0x00; // dummy write
 
ToNaviCtrl.Sync1 = 0xAA;
ToNaviCtrl.Sync2 = 0x83;
 
ToNaviCtrl.Command = SPI_FCCMD_USER;
ToNaviCtrl.IntegralNick = 0;
ToNaviCtrl.IntegralRoll = 0;
FromNaviCtrl_Value.SerialDataOkay = 0;
SPI_RxDataValid = 0;
 
}
 
//------------------------------------------------------
void SPI_StartTransmitPacket(void)
{
//if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return; // transfer of prev. packet not completed
if (!SPITransferCompleted) return;
// _delay_us(30);
 
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
 
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
 
SPITransferCompleted = 0;
UpdateSPI_Buffer(); // update buffer
 
SPI_BufferIndex = 1;
// -- Debug-Output ---
//----
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
SPDR = ToNaviCtrl.Sync1; // Start transmission
// SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
 
}
 
//------------------------------------------------------
//SIGNAL(SIG_SPI)
void SPI_TransmitByte(void)
{
static unsigned char SPI_RXState = 0;
unsigned char rxdata;
static unsigned char rxchksum;
 
if (SPITransferCompleted) return;
if (!(SPSR & (1 << SPIF))) return;
SendSPI = 4;
 
// _delay_us(30);
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
 
rxdata = SPDR;
switch ( SPI_RXState)
{
case 0:
 
SPI_RxBufferIndex = 0;
rxchksum = rxdata;
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok
 
break;
 
case 1:
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok
else SPI_RXState = 0;
break;
 
case 2:
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data
//DebugOut.Analog[19]++;
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
{
 
if (rxdata == rxchksum)
{
unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer));
SPI_RxDataValid = 1;
}
else
{
SPI_RxDataValid = 0;
}
 
 
SPI_RXState = 0;
}
else rxchksum += rxdata;
break;
 
}
 
if (SPI_BufferIndex < sizeof(ToNaviCtrl))
{
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
 
SPDR = SPI_TX_Buffer[SPI_BufferIndex];
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
// SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave
 
}
else SPITransferCompleted = 1;
 
SPI_BufferIndex++;
}
 
 
//------------------------------------------------------
void UpdateSPI_Buffer(void)
{
signed int tmp;
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION;
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4));
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4));
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR;
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier;
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4;
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4;
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0;
// ToNaviCtrl.User8 = Parameter_UserParam8;
// ToNaviCtrl.CalState = WinkelOut.CalcState;
switch(ToNaviCtrl.Command) //
{
case SPI_FCCMD_USER:
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1;
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2;
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3;
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4;
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5;
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6;
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7;
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8;
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags;
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START);
ToNaviCtrl.Param.Byte[9] = GetActiveParamSet();
ToNaviCtrl.Param.Byte[10] = EE_Parameter.ComingHomeAltitude;
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2;
break;
 
case SPI_FCCMD_ACCU:
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A
ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh
ToNaviCtrl.Param.Byte[4] = (unsigned char) UBat; // 0.1V
ToNaviCtrl.Param.Byte[5] = (unsigned char) BattLowVoltageWarning; //0.1V
ToNaviCtrl.Param.Byte[6] = VarioCharacter;
ToNaviCtrl.Param.Byte[7] = motorindex;
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM;
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State;
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature;
ToNaviCtrl.Param.Byte[11] = Motor[motorindex++].Current;
motorindex %= 12;
break;
case SPI_FCCMD_PARAMETER1:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviGpsModeControl; // Parameters for the Naviboard
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsACC;
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat;
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviOperatingRadius;
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation;
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation;
break;
case SPI_FCCMD_PARAMETER2:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviOut1Parameter; // Distance between Photo releases
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
// create the ToNC_SpeakHoTT
if(EE_Parameter.Receiver != RECEIVER_HOTT)
{
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]);
else HoTT_Waring();
}
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT;
#else
ToNaviCtrl.Param.Byte[1] = 0;
#endif
break;
case SPI_FCCMD_STICK:
cli();
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
ToNaviCtrl.Param.Byte[0] = (char) tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
ToNaviCtrl.Param.Byte[1] = (char) tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
ToNaviCtrl.Param.Byte[2] = (char) tmp;
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
sei();
ToNaviCtrl.Param.Byte[3] = (char) tmp;
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0];
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1];
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2];
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3];
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4];
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5];
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6];
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7];
break;
case SPI_FCCMD_MISC:
if(WinkelOut.CalcState > 5)
{
WinkelOut.CalcState = 0;
ToNaviCtrl.Param.Byte[0] = 5;
}
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime;
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5);
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit;
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit;
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit;
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
ToNaviCtrl.Param.Byte[10] = (unsigned char) PPM_in[0];
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
break;
case SPI_FCCMD_VERSION:
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH;
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE;
ToNaviCtrl.Param.Byte[4] = PlatinenVersion;
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0];
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1];
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0;
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER;
ToNaviCtrl.Param.Byte[7] = VersionInfo.HardwareError[2]; // unused
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig;
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig;
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle;
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3;
break;
case SPI_FCCMD_SERVOS:
ToNaviCtrl.Param.Byte[0] = EE_Parameter.ServoNickRefresh; // Parameters for the Servo Control
ToNaviCtrl.Param.Byte[1] = EE_Parameter.ServoCompInvert;
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl;
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ServoNickComp;
ToNaviCtrl.Param.Byte[4] = EE_Parameter.ServoNickMin;
ToNaviCtrl.Param.Byte[5] = EE_Parameter.ServoNickMax;
ToNaviCtrl.Param.Byte[6] = Parameter_ServoRollControl;
ToNaviCtrl.Param.Byte[7] = EE_Parameter.ServoRollComp;
ToNaviCtrl.Param.Byte[8] = EE_Parameter.ServoRollMin;
ToNaviCtrl.Param.Byte[9] = EE_Parameter.ServoRollMax;
ToNaviCtrl.Param.Byte[10] = Capacity.MinOfMaxPWM;
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[28]; // I2C-Error counter
break;
}
if(SPI_RxDataValid)
{
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250;
oldcommand = FromNaviCtrl.Command;
CalculateCompassTimer = 1;
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV))
{
GPS_Nick = FromNaviCtrl.GPS_Nick;
GPS_Roll = FromNaviCtrl.GPS_Roll;
}
 
// update compass readings
// MagVec.x = FromNaviCtrl.MagVecX;
// MagVec.y = FromNaviCtrl.MagVecY;
// MagVec.z = FromNaviCtrl.MagVecZ;
 
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue;
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
 
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime;
switch (FromNaviCtrl.Command)
{
case SPI_NCCMD_KALMAN:
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0];
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1];
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2];
KompassFusion = FromNaviCtrl.Param.sByte[3];
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4];
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5];
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6];
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7];
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0)
{
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben
if(EE_Parameter.CamOrientation) // Kamera angle is not front
{
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15);
KompassSollWert %= 360;
}
}
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel
break;
case SPI_NCCMD_VERSION:
NC_Version.Major = FromNaviCtrl.Param.Byte[0];
NC_Version.Minor = FromNaviCtrl.Param.Byte[1];
NC_Version.Patch = FromNaviCtrl.Param.Byte[2];
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3];
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4];
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5];
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08));
NC_ErrorCode = FromNaviCtrl.Param.Byte[7];
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8];
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9];
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10];
NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11];
break;
case SPI_NCCMD_GPSINFO:
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0];
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1];
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2];
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3];
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2];
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3];
PPM_in[25] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel)
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9];
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm
break;
case SPI_MISC:
EarthMagneticField = FromNaviCtrl.Param.Byte[0];
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1];
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2];
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(FromNaviCtrl.Param.Byte[3])
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3];
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4];
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5];
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3];
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8];
#endif
break;
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
case SPI_NCCMD_HOTT_DATA:
if(EE_Parameter.Receiver == RECEIVER_HOTT) NC_Fills_HoTT_Telemety();
break;
#endif
 
// 0 = 0,1
// 1 = 2,3
// 2 = 4,5
// 3 = 6,7
// 4 = 8,9
// 5 = 10,11
default:
break;
}
}
else
{
// KompassValue = 0;
// KompassRichtung = 0;
GPS_Nick = 0;
GPS_Roll = 0;
}
}
 
#endif
 
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/spi.h
0,0 → 1,197
// ######################## SPI - FlightCtrl ###################
#ifndef _SPI_H
#define _SPI_H
 
#include <util/delay.h>
#include "vector.h"
 
#define USE_SPI_COMMUNICATION
 
//-----------------------------------------
#define DDR_SPI DDRB
#define SLAVE_SELECT_DDR_PORT DDRC
#define SLAVE_SELECT_PORT PORTC
 
#if defined(__AVR_ATmega1284P__)
#define DD_SS PORTB4
#define DD_SCK PORTB7
#define DD_MOSI PORTB5
#define DD_MISO PORTB6
#define SPI_SLAVE_SELECT PORTC5
#else
#define DD_SS PB4
#define DD_SCK PB7
#define DD_MOSI PB5
#define DD_MISO PB6
#define SPI_SLAVE_SELECT PC5
#endif
 
// for compatibility reasons gcc3.x <-> gcc4.x
#ifndef SPCR
#define SPCR SPCR0
#endif
#ifndef SPE
#define SPE SPE0
#endif
#ifndef MSTR
#define MSTR MSTR0
#endif
#ifndef SPR1
#define SPR1 SPR01
#endif
#ifndef SPR0
#define SPR0 SPR00
#endif
#ifndef SPIE
#define SPIE SPIE0
#endif
#ifndef SPDR
#define SPDR SPDR0
#endif
#ifndef SPIF
#define SPIF SPIF0
#endif
#ifndef SPSR
#define SPSR SPSR0
#endif
// -------------------------
 
#define SPI_FCCMD_USER 10
#define SPI_FCCMD_STICK 11
#define SPI_FCCMD_MISC 12
#define SPI_FCCMD_PARAMETER1 13
#define SPI_FCCMD_VERSION 14
#define SPI_FCCMD_SERVOS 15
#define SPI_FCCMD_ACCU 16
#define SPI_FCCMD_PARAMETER2 17
 
struct str_ToNaviCtrl
{
unsigned char Sync1, Sync2;
unsigned char Command;
signed int IntegralNick;
signed int IntegralRoll;
signed int AccNick;
signed int AccRoll;
signed int GyroCompass;
signed int GyroNick;
signed int GyroRoll;
signed int GyroGier;
unsigned int FCStatus;
union
{
unsigned char Byte[12];
char sByte[12];
unsigned int Int[6];
int sInt[6];
unsigned long Long[3];
long sLong[3];
float Float[3];
} Param;
unsigned char Chksum;
};
 
#define SPI_NCCMD_KALMAN 103
#define SPI_NCCMD_VERSION 104
#define SPI_NCCMD_GPSINFO 105
#define SPI_NCCMD_HOTT_DATA 106
#define SPI_MISC 107
 
struct str_FromNaviCtrl
{
unsigned char Command;
signed int GPS_Nick;
signed int GPS_Roll;
signed int MagVecX;
signed int CompassValue;
signed int AccErrorN;
signed int AccErrorR;
signed int MagVecY;
signed int MagVecZ;
unsigned int BeepTime;
union
{
unsigned char Byte[12];
char sByte[12];
unsigned int Int[6];
int sInt[6];
unsigned long Long[3];
long sLong[3];
float Float[3];
} Param;
unsigned char Chksum;
};
 
struct str_FromNaviCtrl_Value
{
signed char Kalman_K;
signed char Kalman_MaxDrift;
signed char Kalman_MaxFusion;
unsigned char SerialDataOkay;
signed char GpsZ;
};
 
struct str_SPI_VersionInfo
{
unsigned char Major;
unsigned char Minor;
unsigned char Patch;
unsigned char Compatible;
unsigned char Hardware;
};
 
// Satfix types for GPSData.SatFix
#define SATFIX_NONE 0x00
#define SATFIX_DEADRECKOING 0x01
#define SATFIX_2D 0x02
#define SATFIX_3D 0x03
#define SATFIX_GPS_DEADRECKOING 0x04
#define SATFIX_TIMEONLY 0x05
// Flags for interpretation of the GPSData.Flags
#define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks)
#define FLAG_DIFFSOLN 0x02 // (is DGPS used)
#define FLAG_WKNSET 0x04 // (is Week Number valid)
#define FLAG_TOWSET 0x08 // (is Time of Week valid)
#define FLAG_GPS_NAVIGATION_ACTIVE 0x10 // NC to FC -> NC is ready to navigate
 
struct str_GPSInfo
{
unsigned char Flags; // Status Flags
unsigned char NumOfSats; // number of satelites
unsigned char SatFix; // type of satfix
unsigned char Speed; // m/sek
unsigned int HomeDistance; // distance to Home in dm
int HomeBearing; // bearing to home in deg
};
 
 
#ifdef USE_SPI_COMMUNICATION
extern struct str_GPSInfo GPSInfo;
extern struct str_SPI_VersionInfo NC_Version;
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
extern struct str_ToNaviCtrl ToNaviCtrl;
extern struct str_FromNaviCtrl FromNaviCtrl;
extern unsigned char SPI_CommandCounter,NaviDataOkay;
extern signed char FromNC_Rotate_C, FromNC_Rotate_S;
extern unsigned char NC_ErrorCode;
extern void SPI_MasterInit(void);
extern void SPI_StartTransmitPacket(void);
extern void UpdateSPI_Buffer(void);
extern void SPI_TransmitByte(void);
extern signed int POI_KameraNick;
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude;
extern vector16_t MagVec;
extern unsigned char EarthMagneticField;
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic;
#else
 
 
// -------------------------------- Dummy -----------------------------------------
#define SPI_MasterInit() ;
#define SPI_StartTransmitPacket() ;
#define UpdateSPI_Buffer() ;
#define SPI_TransmitByte() ;
#endif
 
 
#endif
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/spi.lst
0,0 → 1,1243
1 .file "spi.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global MagVec
11 .global MagVec
12 .section .bss
15 MagVec:
16 0000 0000 0000 .skip 6,0
16 0000
17 .global POI_KameraNick
18 .global POI_KameraNick
21 POI_KameraNick:
22 0006 0000 .skip 2,0
23 .global NC_To_FC_MaxAltitude
24 .global NC_To_FC_MaxAltitude
27 NC_To_FC_MaxAltitude:
28 0008 00 .skip 1,0
29 .global NC_To_FC_Flags
30 .global NC_To_FC_Flags
33 NC_To_FC_Flags:
34 0009 00 .skip 1,0
35 .global EarthMagneticInclinationTheoretic
36 .global EarthMagneticInclinationTheoretic
39 EarthMagneticInclinationTheoretic:
40 000a 00 .skip 1,0
41 .global EarthMagneticInclination
42 .global EarthMagneticInclination
45 EarthMagneticInclination:
46 000b 00 .skip 1,0
47 .global EarthMagneticField
48 .global EarthMagneticField
51 EarthMagneticField:
52 000c 00 .skip 1,0
53 .global NC_GPS_ModeCharacter
54 .data
57 NC_GPS_ModeCharacter:
58 0000 20 .byte 32
59 .global NC_ErrorCode
60 .global NC_ErrorCode
61 .section .bss
64 NC_ErrorCode:
65 000d 00 .skip 1,0
66 .global SPI_CommandCounter
67 .global SPI_CommandCounter
70 SPI_CommandCounter:
71 000e 00 .skip 1,0
72 .global SPI_CommandSequence
73 .data
76 SPI_CommandSequence:
77 0001 0B .byte 11
78 0002 0A .byte 10
79 0003 0D .byte 13
80 0004 0B .byte 11
81 0005 0C .byte 12
82 0006 0E .byte 14
83 0007 0B .byte 11
84 0008 0F .byte 15
85 0009 10 .byte 16
86 000a 0B .byte 11
87 000b 11 .byte 17
88 .global NaviDataOkay
91 NaviDataOkay:
92 000c FA .byte -6
93 .global FromNC_Rotate_S
94 .global FromNC_Rotate_S
95 .section .bss
98 FromNC_Rotate_S:
99 000f 00 .skip 1,0
100 .global FromNC_Rotate_C
101 .data
104 FromNC_Rotate_C:
105 000d 20 .byte 32
106 .text
107 .global SPI_MasterInit
109 SPI_MasterInit:
110 /* prologue: frame size=0 */
111 /* prologue end (size=0) */
112 0000 84B1 in r24,36-0x20
113 0002 806A ori r24,lo8(-96)
114 0004 84B9 out 36-0x20,r24
115 0006 3D9A sbi 39-0x20,5
116 0008 82E5 ldi r24,lo8(82)
117 000a 8CBD out 76-0x20,r24
118 000c 1DBC out 77-0x20,__zero_reg__
119 000e 459A sbi 40-0x20,5
120 0010 81E0 ldi r24,lo8(1)
121 0012 8093 0000 sts SPITransferCompleted,r24
122 0016 8AEA ldi r24,lo8(-86)
123 0018 8093 0000 sts ToNaviCtrl,r24
124 001c 83E8 ldi r24,lo8(-125)
125 001e 8093 0000 sts ToNaviCtrl+1,r24
126 0022 8AE0 ldi r24,lo8(10)
127 0024 8093 0000 sts ToNaviCtrl+2,r24
128 0028 1092 0000 sts (ToNaviCtrl+3)+1,__zero_reg__
129 002c 1092 0000 sts ToNaviCtrl+3,__zero_reg__
130 0030 1092 0000 sts (ToNaviCtrl+5)+1,__zero_reg__
131 0034 1092 0000 sts ToNaviCtrl+5,__zero_reg__
132 0038 1092 0000 sts FromNaviCtrl_Value+3,__zero_reg__
133 003c 1092 0000 sts SPI_RxDataValid,__zero_reg__
134 /* epilogue: frame size=0 */
135 0040 0895 ret
136 /* epilogue end (size=1) */
137 /* function SPI_MasterInit size 33 (32) */
139 .lcomm SPI_RXState.2,1
140 .lcomm rxchksum.3,1
141 .global SPI_TransmitByte
143 SPI_TransmitByte:
144 /* prologue: frame size=0 */
145 /* prologue end (size=0) */
146 0042 3091 0000 lds r19,SPITransferCompleted
147 0046 3323 tst r19
148 0048 01F0 breq .+2
149 004a 00C0 rjmp .L2
150 004c 0DB4 in __tmp_reg__,77-0x20
151 004e 07FE sbrs __tmp_reg__,7
152 0050 00C0 rjmp .L2
153 0052 84E0 ldi r24,lo8(4)
154 0054 8093 0000 sts SendSPI,r24
155 0058 459A sbi 40-0x20,5
156 005a 2EB5 in r18,78-0x20
157 005c 8091 0000 lds r24,SPI_RXState.2
158 0060 9927 clr r25
159 0062 8130 cpi r24,1
160 0064 9105 cpc r25,__zero_reg__
161 0066 01F0 breq .L8
162 0068 8230 cpi r24,2
163 006a 9105 cpc r25,__zero_reg__
164 006c 04F4 brge .L16
165 006e 892B or r24,r25
166 0070 01F0 breq .L6
167 0072 00C0 rjmp .L5
168 .L16:
169 0074 0297 sbiw r24,2
170 0076 01F0 breq .L11
171 0078 00C0 rjmp .L5
172 .L6:
173 007a 3093 0000 sts SPI_RxBufferIndex,r19
174 007e 2093 0000 sts rxchksum.3,r18
175 0082 2138 cpi r18,lo8(-127)
176 0084 01F4 brne .L5
177 0086 81E0 ldi r24,lo8(1)
178 0088 00C0 rjmp .L19
179 .L8:
180 008a 2535 cpi r18,lo8(85)
181 008c 01F4 brne .L9
182 008e 8091 0000 lds r24,rxchksum.3
183 0092 820F add r24,r18
184 0094 8093 0000 sts rxchksum.3,r24
185 0098 82E0 ldi r24,lo8(2)
186 .L19:
187 009a 8093 0000 sts SPI_RXState.2,r24
188 009e 00C0 rjmp .L5
189 .L9:
190 00a0 3093 0000 sts SPI_RXState.2,r19
191 00a4 00C0 rjmp .L5
192 .L11:
193 00a6 8091 0000 lds r24,SPI_RxBufferIndex
194 00aa E82F mov r30,r24
195 00ac FF27 clr r31
196 00ae E050 subi r30,lo8(-(SPI_Buffer))
197 00b0 F040 sbci r31,hi8(-(SPI_Buffer))
198 00b2 2083 st Z,r18
199 00b4 8F5F subi r24,lo8(-(1))
200 00b6 8093 0000 sts SPI_RxBufferIndex,r24
201 00ba 9091 0000 lds r25,rxchksum.3
202 00be 8032 cpi r24,lo8(32)
203 00c0 00F0 brlo .L12
204 00c2 2917 cp r18,r25
205 00c4 01F4 brne .L13
206 00c6 80E2 ldi r24,lo8(32)
207 00c8 A0E0 ldi r26,lo8(SPI_Buffer)
208 00ca B0E0 ldi r27,hi8(SPI_Buffer)
209 00cc E0E0 ldi r30,lo8(FromNaviCtrl)
210 00ce F0E0 ldi r31,hi8(FromNaviCtrl)
211 00d0 0D90 ld __tmp_reg__,X+
212 00d2 0192 st Z+,__tmp_reg__
213 00d4 8A95 dec r24
214 00d6 01F4 brne .-8
215 00d8 81E0 ldi r24,lo8(1)
216 00da 8093 0000 sts SPI_RxDataValid,r24
217 00de 00C0 rjmp .L14
218 .L13:
219 00e0 3093 0000 sts SPI_RxDataValid,r19
220 .L14:
221 00e4 1092 0000 sts SPI_RXState.2,__zero_reg__
222 00e8 00C0 rjmp .L5
223 .L12:
224 00ea 920F add r25,r18
225 00ec 9093 0000 sts rxchksum.3,r25
226 .L5:
227 00f0 2091 0000 lds r18,SPI_BufferIndex
228 00f4 2232 cpi r18,lo8(34)
229 00f6 00F0 brlo .+2
230 00f8 00C0 rjmp .L17
231 00fa 4598 cbi 40-0x20,5
232 /* #APP */
233 00fc 0000 nop
234 00fe 0000 nop
235 0100 0000 nop
236 0102 0000 nop
237 0104 0000 nop
238 0106 0000 nop
239 0108 0000 nop
240 010a 0000 nop
241 010c 0000 nop
242 010e 0000 nop
243 0110 0000 nop
244 0112 0000 nop
245 0114 0000 nop
246 0116 0000 nop
247 0118 0000 nop
248 011a 0000 nop
249 011c 0000 nop
250 011e 0000 nop
251 0120 0000 nop
252 0122 0000 nop
253 0124 0000 nop
254 0126 0000 nop
255 0128 0000 nop
256 012a 0000 nop
257 /* #NOAPP */
258 012c E091 0000 lds r30,SPI_TX_Buffer
259 0130 F091 0000 lds r31,(SPI_TX_Buffer)+1
260 0134 E20F add r30,r18
261 0136 F11D adc r31,__zero_reg__
262 0138 8081 ld r24,Z
263 013a 8EBD out 78-0x20,r24
264 013c 8091 0000 lds r24,ToNaviCtrl+33
265 0140 9081 ld r25,Z
266 0142 890F add r24,r25
267 0144 8093 0000 sts ToNaviCtrl+33,r24
268 0148 00C0 rjmp .L18
269 .L17:
270 014a 81E0 ldi r24,lo8(1)
271 014c 8093 0000 sts SPITransferCompleted,r24
272 .L18:
273 0150 2F5F subi r18,lo8(-(1))
274 0152 2093 0000 sts SPI_BufferIndex,r18
275 .L2:
276 0156 0895 ret
277 /* epilogue: frame size=0 */
278 /* epilogue: noreturn */
279 /* epilogue end (size=0) */
280 /* function SPI_TransmitByte size 164 (164) */
282 .lcomm motorindex.0,1
283 .data
286 oldcommand.1:
287 000e 68 .byte 104
288 .text
289 .global UpdateSPI_Buffer
291 UpdateSPI_Buffer:
292 /* prologue: frame size=0 */
293 0158 EF92 push r14
294 015a FF92 push r15
295 015c 0F93 push r16
296 015e 1F93 push r17
297 /* prologue end (size=4) */
298 0160 8091 0000 lds r24,EE_Parameter+28
299 0164 9927 clr r25
300 0166 880F lsl r24
301 0168 991F rol r25
302 016a 880F lsl r24
303 016c 991F rol r25
304 016e 7C01 movw r14,r24
305 0170 0027 clr r16
306 0172 F7FC sbrc r15,7
307 0174 0095 com r16
308 0176 102F mov r17,r16
309 0178 8091 0000 lds r24,IntegralNick
310 017c 9091 0000 lds r25,(IntegralNick)+1
311 0180 A091 0000 lds r26,(IntegralNick)+2
312 0184 B091 0000 lds r27,(IntegralNick)+3
313 0188 BC01 movw r22,r24
314 018a CD01 movw r24,r26
315 018c A801 movw r20,r16
316 018e 9701 movw r18,r14
317 0190 0E94 0000 call __divmodsi4
318 0194 3093 0000 sts (ToNaviCtrl+3)+1,r19
319 0198 2093 0000 sts ToNaviCtrl+3,r18
320 019c 8091 0000 lds r24,IntegralRoll
321 01a0 9091 0000 lds r25,(IntegralRoll)+1
322 01a4 A091 0000 lds r26,(IntegralRoll)+2
323 01a8 B091 0000 lds r27,(IntegralRoll)+3
324 01ac BC01 movw r22,r24
325 01ae CD01 movw r24,r26
326 01b0 A801 movw r20,r16
327 01b2 9701 movw r18,r14
328 01b4 0E94 0000 call __divmodsi4
329 01b8 3093 0000 sts (ToNaviCtrl+5)+1,r19
330 01bc 2093 0000 sts ToNaviCtrl+5,r18
331 01c0 2091 0000 lds r18,ErsatzKompass
332 01c4 3091 0000 lds r19,(ErsatzKompass)+1
333 01c8 4091 0000 lds r20,(ErsatzKompass)+2
334 01cc 5091 0000 lds r21,(ErsatzKompass)+3
335 01d0 DA01 movw r26,r20
336 01d2 C901 movw r24,r18
337 01d4 63E0 ldi r22,3
338 01d6 880F 1: lsl r24
339 01d8 991F rol r25
340 01da AA1F rol r26
341 01dc BB1F rol r27
342 01de 6A95 dec r22
343 01e0 01F4 brne 1b
344 01e2 820F add r24,r18
345 01e4 931F adc r25,r19
346 01e6 A41F adc r26,r20
347 01e8 B51F adc r27,r21
348 01ea 820F add r24,r18
349 01ec 931F adc r25,r19
350 01ee A41F adc r26,r20
351 01f0 B51F adc r27,r21
352 01f2 2091 0000 lds r18,GIER_GRAD_FAKTOR
353 01f6 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
354 01fa 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
355 01fe 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
356 0202 BC01 movw r22,r24
357 0204 CD01 movw r24,r26
358 0206 0E94 0000 call __divmodsi4
359 020a 3093 0000 sts (ToNaviCtrl+11)+1,r19
360 020e 2093 0000 sts ToNaviCtrl+11,r18
361 0212 8091 0000 lds r24,AdNeutralGier
362 0216 9091 0000 lds r25,(AdNeutralGier)+1
363 021a 2091 0000 lds r18,AdWertGier
364 021e 3091 0000 lds r19,(AdWertGier)+1
365 0222 821B sub r24,r18
366 0224 930B sbc r25,r19
367 0226 9093 0000 sts (ToNaviCtrl+17)+1,r25
368 022a 8093 0000 sts ToNaviCtrl+17,r24
369 022e E091 0000 lds r30,NaviCntAcc
370 0232 F091 0000 lds r31,(NaviCntAcc)+1
371 0236 8091 0000 lds r24,NaviAccNick
372 023a 9091 0000 lds r25,(NaviAccNick)+1
373 023e BF01 movw r22,r30
374 0240 0E94 0000 call __divmodhi4
375 0244 9B01 movw r18,r22
376 0246 220F lsl r18
377 0248 331F rol r19
378 024a 220F lsl r18
379 024c 331F rol r19
380 024e 260F add r18,r22
381 0250 371F adc r19,r23
382 0252 260F add r18,r22
383 0254 371F adc r19,r23
384 0256 37FF sbrs r19,7
385 0258 00C0 rjmp .L21
386 025a 2D5F subi r18,lo8(-(3))
387 025c 3F4F sbci r19,hi8(-(3))
388 .L21:
389 025e 3595 asr r19
390 0260 2795 ror r18
391 0262 3595 asr r19
392 0264 2795 ror r18
393 0266 3093 0000 sts (ToNaviCtrl+7)+1,r19
394 026a 2093 0000 sts ToNaviCtrl+7,r18
395 026e 8091 0000 lds r24,NaviAccRoll
396 0272 9091 0000 lds r25,(NaviAccRoll)+1
397 0276 BF01 movw r22,r30
398 0278 0E94 0000 call __divmodhi4
399 027c 9B01 movw r18,r22
400 027e 220F lsl r18
401 0280 331F rol r19
402 0282 220F lsl r18
403 0284 331F rol r19
404 0286 260F add r18,r22
405 0288 371F adc r19,r23
406 028a 260F add r18,r22
407 028c 371F adc r19,r23
408 028e 37FF sbrs r19,7
409 0290 00C0 rjmp .L22
410 0292 2D5F subi r18,lo8(-(3))
411 0294 3F4F sbci r19,hi8(-(3))
412 .L22:
413 0296 3595 asr r19
414 0298 2795 ror r18
415 029a 3595 asr r19
416 029c 2795 ror r18
417 029e 3093 0000 sts (ToNaviCtrl+9)+1,r19
418 02a2 2093 0000 sts ToNaviCtrl+9,r18
419 02a6 1092 0000 sts (NaviCntAcc)+1,__zero_reg__
420 02aa 1092 0000 sts NaviCntAcc,__zero_reg__
421 02ae 1092 0000 sts (NaviAccNick)+1,__zero_reg__
422 02b2 1092 0000 sts NaviAccNick,__zero_reg__
423 02b6 1092 0000 sts (NaviAccRoll)+1,__zero_reg__
424 02ba 1092 0000 sts NaviAccRoll,__zero_reg__
425 02be 8091 0000 lds r24,ToNaviCtrl+2
426 02c2 9927 clr r25
427 02c4 AA27 clr r26
428 02c6 BB27 clr r27
429 02c8 FC01 movw r30,r24
430 02ca 3A97 sbiw r30,10
431 02cc E830 cpi r30,8
432 02ce F105 cpc r31,__zero_reg__
433 02d0 00F0 brlo .+2
434 02d2 00C0 rjmp .L23
435 02d4 E050 subi r30,lo8(-(pm(.L50)))
436 02d6 F040 sbci r31,hi8(-(pm(.L50)))
437 02d8 0C94 0000 jmp __tablejump2__
438 .data
439 .section .progmem.gcc_sw_table, "a", @progbits
440 .p2align 1
441 .L50:
442 0000 0000 .word pm(.L24)
443 0002 0000 .word pm(.L31)
444 0004 0000 .word pm(.L44)
445 0006 0000 .word pm(.L26)
446 0008 0000 .word pm(.L48)
447 000a 0000 .word pm(.L49)
448 000c 0000 .word pm(.L25)
449 000e 0000 .word pm(.L27)
450 .text
451 .L24:
452 02dc 8091 0000 lds r24,Parameter_UserParam1
453 02e0 8093 0000 sts ToNaviCtrl+21,r24
454 02e4 8091 0000 lds r24,Parameter_UserParam2
455 02e8 8093 0000 sts ToNaviCtrl+22,r24
456 02ec 8091 0000 lds r24,Parameter_UserParam3
457 02f0 8093 0000 sts ToNaviCtrl+23,r24
458 02f4 8091 0000 lds r24,Parameter_UserParam4
459 02f8 8093 0000 sts ToNaviCtrl+24,r24
460 02fc 8091 0000 lds r24,Parameter_UserParam5
461 0300 8093 0000 sts ToNaviCtrl+25,r24
462 0304 8091 0000 lds r24,Parameter_UserParam6
463 0308 8093 0000 sts ToNaviCtrl+26,r24
464 030c 8091 0000 lds r24,Parameter_UserParam7
465 0310 8093 0000 sts ToNaviCtrl+27,r24
466 0314 8091 0000 lds r24,Parameter_UserParam8
467 0318 8093 0000 sts ToNaviCtrl+28,r24
468 031c 8091 0000 lds r24,FC_StatusFlags
469 0320 8093 0000 sts ToNaviCtrl+29,r24
470 0324 8091 0000 lds r24,FC_StatusFlags
471 0328 837F andi r24,lo8(-13)
472 032a 8093 0000 sts FC_StatusFlags,r24
473 032e 0E94 0000 call GetActiveParamSet
474 0332 8093 0000 sts ToNaviCtrl+30,r24
475 0336 8091 0000 lds r24,EE_Parameter+102
476 033a 8093 0000 sts ToNaviCtrl+31,r24
477 033e 8091 0000 lds r24,FC_StatusFlags2
478 0342 00C0 rjmp .L72
479 .L25:
480 0344 8091 0000 lds r24,Capacity
481 0348 9091 0000 lds r25,(Capacity)+1
482 034c 9093 0000 sts (ToNaviCtrl+21)+1,r25
483 0350 8093 0000 sts ToNaviCtrl+21,r24
484 0354 8091 0000 lds r24,Capacity+4
485 0358 9091 0000 lds r25,(Capacity+4)+1
486 035c 9093 0000 sts (ToNaviCtrl+23)+1,r25
487 0360 8093 0000 sts ToNaviCtrl+23,r24
488 0364 8091 0000 lds r24,UBat
489 0368 9091 0000 lds r25,(UBat)+1
490 036c 8093 0000 sts ToNaviCtrl+25,r24
491 0370 8091 0000 lds r24,BattLowVoltageWarning
492 0374 8093 0000 sts ToNaviCtrl+26,r24
493 0378 8091 0000 lds r24,VarioCharacter
494 037c 8093 0000 sts ToNaviCtrl+27,r24
495 0380 9091 0000 lds r25,motorindex.0
496 0384 9093 0000 sts ToNaviCtrl+28,r25
497 0388 E92F mov r30,r25
498 038a FF27 clr r31
499 038c A3E0 ldi r26,3
500 038e EE0F 1: lsl r30
501 0390 FF1F rol r31
502 0392 AA95 dec r26
503 0394 01F4 brne 1b
504 0396 E050 subi r30,lo8(-(Motor))
505 0398 F040 sbci r31,hi8(-(Motor))
506 039a 8681 ldd r24,Z+6
507 039c 8093 0000 sts ToNaviCtrl+29,r24
508 03a0 8381 ldd r24,Z+3
509 03a2 8093 0000 sts ToNaviCtrl+30,r24
510 03a6 8781 ldd r24,Z+7
511 03a8 8093 0000 sts ToNaviCtrl+31,r24
512 03ac 8581 ldd r24,Z+5
513 03ae 8093 0000 sts ToNaviCtrl+32,r24
514 03b2 892F mov r24,r25
515 03b4 8F5F subi r24,lo8(-(1))
516 03b6 6CE0 ldi r22,lo8(12)
517 03b8 0E94 0000 call __udivmodqi4
518 03bc 9093 0000 sts motorindex.0,r25
519 03c0 00C0 rjmp .L23
520 .L26:
521 03c2 8091 0000 lds r24,EE_Parameter+81
522 03c6 8093 0000 sts ToNaviCtrl+21,r24
523 03ca 8091 0000 lds r24,EE_Parameter+82
524 03ce 8093 0000 sts ToNaviCtrl+22,r24
525 03d2 8091 0000 lds r24,EE_Parameter+83
526 03d6 8093 0000 sts ToNaviCtrl+23,r24
527 03da 8091 0000 lds r24,EE_Parameter+84
528 03de 8093 0000 sts ToNaviCtrl+24,r24
529 03e2 8091 0000 lds r24,EE_Parameter+85
530 03e6 8093 0000 sts ToNaviCtrl+25,r24
531 03ea 8091 0000 lds r24,EE_Parameter+89
532 03ee 8093 0000 sts ToNaviCtrl+26,r24
533 03f2 8091 0000 lds r24,EE_Parameter+90
534 03f6 8093 0000 sts ToNaviCtrl+27,r24
535 03fa 8091 0000 lds r24,EE_Parameter+91
536 03fe 8093 0000 sts ToNaviCtrl+28,r24
537 0402 8091 0000 lds r24,EE_Parameter+94
538 0406 8093 0000 sts ToNaviCtrl+29,r24
539 040a 8091 0000 lds r24,EE_Parameter+92
540 040e 8093 0000 sts ToNaviCtrl+30,r24
541 0412 8091 0000 lds r24,EE_Parameter+93
542 0416 8093 0000 sts ToNaviCtrl+31,r24
543 041a 8091 0000 lds r24,EE_Parameter+95
544 041e 00C0 rjmp .L72
545 .L27:
546 0420 8091 0000 lds r24,EE_Parameter+80
547 0424 8093 0000 sts ToNaviCtrl+21,r24
548 0428 8091 0000 lds r24,EE_Parameter+39
549 042c 8630 cpi r24,lo8(6)
550 042e 01F0 breq .L28
551 0430 8091 0000 lds r24,JetiBeep
552 0434 8234 cpi r24,lo8(66)
553 0436 01F0 breq .L29
554 0438 0E94 0000 call HoTT_Waring
555 043c E82F mov r30,r24
556 043e FF27 clr r31
557 0440 E050 subi r30,lo8(-(JETI_CODE))
558 0442 F040 sbci r31,hi8(-(JETI_CODE))
559 /* #APP */
560 0444 8491 lpm r24, Z
561
562 /* #NOAPP */
563 0446 8093 0000 sts JetiBeep,r24
564 044a 00C0 rjmp .L28
565 .L29:
566 044c 0E94 0000 call HoTT_Waring
567 .L28:
568 0450 8091 0000 lds r24,ToNC_SpeakHoTT
569 0454 8093 0000 sts ToNaviCtrl+22,r24
570 0458 00C0 rjmp .L23
571 .L31:
572 /* #APP */
573 045a F894 cli
574 /* #NOAPP */
575 045c 8091 0000 lds r24,EE_Parameter+3
576 0460 E82F mov r30,r24
577 0462 FF27 clr r31
578 0464 EE0F add r30,r30
579 0466 FF1F adc r31,r31
580 0468 E050 subi r30,lo8(-(PPM_in))
581 046a F040 sbci r31,hi8(-(PPM_in))
582 046c 0190 ld __tmp_reg__,Z+
583 046e F081 ld r31,Z
584 0470 E02D mov r30,__tmp_reg__
585 0472 E038 cpi r30,128
586 0474 F105 cpc r31,__zero_reg__
587 0476 04F0 brlt .L32
588 0478 EFE7 ldi r30,lo8(127)
589 047a F0E0 ldi r31,hi8(127)
590 047c 00C0 rjmp .L33
591 .L32:
592 047e 2FEF ldi r18,hi8(-127)
593 0480 E138 cpi r30,lo8(-127)
594 0482 F207 cpc r31,r18
595 0484 04F4 brge .L33
596 0486 E1E8 ldi r30,lo8(-127)
597 0488 FFEF ldi r31,hi8(-127)
598 .L33:
599 048a E093 0000 sts ToNaviCtrl+21,r30
600 048e 8091 0000 lds r24,EE_Parameter+4
601 0492 E82F mov r30,r24
602 0494 FF27 clr r31
603 0496 EE0F add r30,r30
604 0498 FF1F adc r31,r31
605 049a E050 subi r30,lo8(-(PPM_in))
606 049c F040 sbci r31,hi8(-(PPM_in))
607 049e 0190 ld __tmp_reg__,Z+
608 04a0 F081 ld r31,Z
609 04a2 E02D mov r30,__tmp_reg__
610 04a4 E038 cpi r30,128
611 04a6 F105 cpc r31,__zero_reg__
612 04a8 04F0 brlt .L35
613 04aa EFE7 ldi r30,lo8(127)
614 04ac F0E0 ldi r31,hi8(127)
615 04ae 00C0 rjmp .L36
616 .L35:
617 04b0 7FEF ldi r23,hi8(-127)
618 04b2 E138 cpi r30,lo8(-127)
619 04b4 F707 cpc r31,r23
620 04b6 04F4 brge .L36
621 04b8 E1E8 ldi r30,lo8(-127)
622 04ba FFEF ldi r31,hi8(-127)
623 .L36:
624 04bc E093 0000 sts ToNaviCtrl+22,r30
625 04c0 8091 0000 lds r24,EE_Parameter+2
626 04c4 E82F mov r30,r24
627 04c6 FF27 clr r31
628 04c8 EE0F add r30,r30
629 04ca FF1F adc r31,r31
630 04cc E050 subi r30,lo8(-(PPM_in))
631 04ce F040 sbci r31,hi8(-(PPM_in))
632 04d0 0190 ld __tmp_reg__,Z+
633 04d2 F081 ld r31,Z
634 04d4 E02D mov r30,__tmp_reg__
635 04d6 E038 cpi r30,128
636 04d8 F105 cpc r31,__zero_reg__
637 04da 04F0 brlt .L38
638 04dc EFE7 ldi r30,lo8(127)
639 04de F0E0 ldi r31,hi8(127)
640 04e0 00C0 rjmp .L39
641 .L38:
642 04e2 8FEF ldi r24,hi8(-127)
643 04e4 E138 cpi r30,lo8(-127)
644 04e6 F807 cpc r31,r24
645 04e8 04F4 brge .L39
646 04ea E1E8 ldi r30,lo8(-127)
647 04ec FFEF ldi r31,hi8(-127)
648 .L39:
649 04ee E093 0000 sts ToNaviCtrl+23,r30
650 04f2 8091 0000 lds r24,EE_Parameter+1
651 04f6 E82F mov r30,r24
652 04f8 FF27 clr r31
653 04fa EE0F add r30,r30
654 04fc FF1F adc r31,r31
655 04fe E050 subi r30,lo8(-(PPM_in))
656 0500 F040 sbci r31,hi8(-(PPM_in))
657 0502 0190 ld __tmp_reg__,Z+
658 0504 F081 ld r31,Z
659 0506 E02D mov r30,__tmp_reg__
660 0508 E038 cpi r30,128
661 050a F105 cpc r31,__zero_reg__
662 050c 04F0 brlt .L41
663 050e EFE7 ldi r30,lo8(127)
664 0510 F0E0 ldi r31,hi8(127)
665 0512 00C0 rjmp .L42
666 .L41:
667 0514 2FEF ldi r18,hi8(-127)
668 0516 E138 cpi r30,lo8(-127)
669 0518 F207 cpc r31,r18
670 051a 04F4 brge .L42
671 051c E1E8 ldi r30,lo8(-127)
672 051e FFEF ldi r31,hi8(-127)
673 .L42:
674 /* #APP */
675 0520 7894 sei
676 /* #NOAPP */
677 0522 E093 0000 sts ToNaviCtrl+24,r30
678 0526 8091 0000 lds r24,Poti
679 052a 8093 0000 sts ToNaviCtrl+25,r24
680 052e 8091 0000 lds r24,Poti+1
681 0532 8093 0000 sts ToNaviCtrl+26,r24
682 0536 8091 0000 lds r24,Poti+2
683 053a 8093 0000 sts ToNaviCtrl+27,r24
684 053e 8091 0000 lds r24,Poti+3
685 0542 8093 0000 sts ToNaviCtrl+28,r24
686 0546 8091 0000 lds r24,Poti+4
687 054a 8093 0000 sts ToNaviCtrl+29,r24
688 054e 8091 0000 lds r24,Poti+5
689 0552 8093 0000 sts ToNaviCtrl+30,r24
690 0556 8091 0000 lds r24,Poti+6
691 055a 8093 0000 sts ToNaviCtrl+31,r24
692 055e 8091 0000 lds r24,Poti+7
693 0562 00C0 rjmp .L72
694 .L44:
695 0564 8091 0000 lds r24,WinkelOut+6
696 0568 8630 cpi r24,lo8(6)
697 056a 00F0 brlo .L45
698 056c 1092 0000 sts WinkelOut+6,__zero_reg__
699 0570 85E0 ldi r24,lo8(5)
700 .L45:
701 0572 8093 0000 sts ToNaviCtrl+21,r24
702 0576 8091 0000 lds r24,EE_Parameter+96
703 057a 8093 0000 sts ToNaviCtrl+22,r24
704 057e 8091 0000 lds r24,HoehenWert
705 0582 9091 0000 lds r25,(HoehenWert)+1
706 0586 A091 0000 lds r26,(HoehenWert)+2
707 058a B091 0000 lds r27,(HoehenWert)+3
708 058e BC01 movw r22,r24
709 0590 CD01 movw r24,r26
710 0592 25E0 ldi r18,lo8(5)
711 0594 30E0 ldi r19,hi8(5)
712 0596 40E0 ldi r20,hlo8(5)
713 0598 50E0 ldi r21,hhi8(5)
714 059a 0E94 0000 call __divmodsi4
715 059e 3093 0000 sts (ToNaviCtrl+23)+1,r19
716 05a2 2093 0000 sts ToNaviCtrl+23,r18
717 05a6 8091 0000 lds r24,SollHoehe
718 05aa 9091 0000 lds r25,(SollHoehe)+1
719 05ae A091 0000 lds r26,(SollHoehe)+2
720 05b2 B091 0000 lds r27,(SollHoehe)+3
721 05b6 BC01 movw r22,r24
722 05b8 CD01 movw r24,r26
723 05ba 25E0 ldi r18,lo8(5)
724 05bc 30E0 ldi r19,hi8(5)
725 05be 40E0 ldi r20,hlo8(5)
726 05c0 50E0 ldi r21,hhi8(5)
727 05c2 0E94 0000 call __divmodsi4
728 05c6 3093 0000 sts (ToNaviCtrl+25)+1,r19
729 05ca 2093 0000 sts ToNaviCtrl+25,r18
730 05ce 8091 0000 lds r24,EE_Parameter+86
731 05d2 8093 0000 sts ToNaviCtrl+27,r24
732 05d6 8091 0000 lds r24,EE_Parameter+87
733 05da 8093 0000 sts ToNaviCtrl+28,r24
734 05de 8091 0000 lds r24,EE_Parameter+88
735 05e2 8093 0000 sts ToNaviCtrl+29,r24
736 05e6 8091 0000 lds r24,SenderOkay
737 05ea 8093 0000 sts ToNaviCtrl+30,r24
738 05ee 8091 0000 lds r24,PPM_in
739 05f2 9091 0000 lds r25,(PPM_in)+1
740 05f6 8093 0000 sts ToNaviCtrl+31,r24
741 05fa 8091 0000 lds r24,DebugOut+16
742 05fe 9091 0000 lds r25,(DebugOut+16)+1
743 0602 97FD sbrc r25,7
744 0604 0396 adiw r24,3
745 .L47:
746 0606 9595 asr r25
747 0608 8795 ror r24
748 060a 9595 asr r25
749 060c 8795 ror r24
750 060e 00C0 rjmp .L72
751 .L48:
752 0610 1092 0000 sts ToNaviCtrl+21,__zero_reg__
753 0614 8AE5 ldi r24,lo8(90)
754 0616 8093 0000 sts ToNaviCtrl+22,r24
755 061a 83E0 ldi r24,lo8(3)
756 061c 8093 0000 sts ToNaviCtrl+23,r24
757 0620 84E3 ldi r24,lo8(52)
758 0622 8093 0000 sts ToNaviCtrl+24,r24
759 0626 8091 0000 lds r24,PlatinenVersion
760 062a 8093 0000 sts ToNaviCtrl+25,r24
761 062e 8091 0000 lds r24,VersionInfo+5
762 0632 8093 0000 sts ToNaviCtrl+26,r24
763 0636 9091 0000 lds r25,VersionInfo+6
764 063a 9093 0000 sts ToNaviCtrl+27,r25
765 063e 8F77 andi r24,lo8(127)
766 0640 8093 0000 sts VersionInfo+5,r24
767 0644 9071 andi r25,lo8(16)
768 0646 9093 0000 sts VersionInfo+6,r25
769 064a 8091 0000 lds r24,VersionInfo+7
770 064e 8093 0000 sts ToNaviCtrl+28,r24
771 0652 8091 0000 lds r24,Parameter_GlobalConfig
772 0656 8093 0000 sts ToNaviCtrl+29,r24
773 065a 8091 0000 lds r24,Parameter_ExtraConfig
774 065e 8093 0000 sts ToNaviCtrl+30,r24
775 0662 8091 0000 lds r24,EE_Parameter+98
776 0666 8093 0000 sts ToNaviCtrl+31,r24
777 066a 8091 0000 lds r24,EE_Parameter+111
778 066e 00C0 rjmp .L72
779 .L49:
780 0670 8091 0000 lds r24,EE_Parameter+53
781 0674 8093 0000 sts ToNaviCtrl+21,r24
782 0678 8091 0000 lds r24,EE_Parameter+109
783 067c 8093 0000 sts ToNaviCtrl+22,r24
784 0680 8091 0000 lds r24,Parameter_ServoNickControl
785 0684 8093 0000 sts ToNaviCtrl+23,r24
786 0688 8091 0000 lds r24,EE_Parameter+46
787 068c 8093 0000 sts ToNaviCtrl+24,r24
788 0690 8091 0000 lds r24,EE_Parameter+47
789 0694 8093 0000 sts ToNaviCtrl+25,r24
790 0698 8091 0000 lds r24,EE_Parameter+48
791 069c 8093 0000 sts ToNaviCtrl+26,r24
792 06a0 8091 0000 lds r24,Parameter_ServoRollControl
793 06a4 8093 0000 sts ToNaviCtrl+27,r24
794 06a8 8091 0000 lds r24,EE_Parameter+50
795 06ac 8093 0000 sts ToNaviCtrl+28,r24
796 06b0 8091 0000 lds r24,EE_Parameter+51
797 06b4 8093 0000 sts ToNaviCtrl+29,r24
798 06b8 8091 0000 lds r24,EE_Parameter+52
799 06bc 8093 0000 sts ToNaviCtrl+30,r24
800 06c0 8091 0000 lds r24,Capacity+6
801 06c4 8093 0000 sts ToNaviCtrl+31,r24
802 06c8 8091 0000 lds r24,DebugOut+58
803 .L72:
804 06cc 8093 0000 sts ToNaviCtrl+32,r24
805 .L23:
806 06d0 8091 0000 lds r24,SPI_RxDataValid
807 06d4 8823 tst r24
808 06d6 01F4 brne .+2
809 06d8 00C0 rjmp .L51
810 06da 6091 0000 lds r22,FromNaviCtrl
811 06de 8091 0000 lds r24,oldcommand.1
812 06e2 6817 cp r22,r24
813 06e4 01F0 breq .L52
814 06e6 8AEF ldi r24,lo8(-6)
815 06e8 8093 0000 sts NaviDataOkay,r24
816 .L52:
817 06ec 6093 0000 sts oldcommand.1,r22
818 06f0 81E0 ldi r24,lo8(1)
819 06f2 8093 0000 sts CalculateCompassTimer,r24
820 06f6 4091 0000 lds r20,FromNaviCtrl+1
821 06fa 5091 0000 lds r21,(FromNaviCtrl+1)+1
822 06fe CA01 movw r24,r20
823 0700 8150 subi r24,lo8(-(511))
824 0702 9E4F sbci r25,hi8(-(511))
825 0704 8F5F subi r24,lo8(1023)
826 0706 9340 sbci r25,hi8(1023)
827 0708 00F4 brsh .L53
828 070a 2091 0000 lds r18,FromNaviCtrl+3
829 070e 3091 0000 lds r19,(FromNaviCtrl+3)+1
830 0712 C901 movw r24,r18
831 0714 8150 subi r24,lo8(-(511))
832 0716 9E4F sbci r25,hi8(-(511))
833 0718 8F5F subi r24,lo8(1023)
834 071a 9340 sbci r25,hi8(1023)
835 071c 00F4 brsh .L53
836 071e 8091 0000 lds r24,EE_Parameter+13
837 0722 85FF sbrs r24,5
838 0724 00C0 rjmp .L53
839 0726 5093 0000 sts (GPS_Nick)+1,r21
840 072a 4093 0000 sts GPS_Nick,r20
841 072e 3093 0000 sts (GPS_Roll)+1,r19
842 0732 2093 0000 sts GPS_Roll,r18
843 .L53:
844 0736 8091 0000 lds r24,FromNaviCtrl+7
845 073a 9091 0000 lds r25,(FromNaviCtrl+7)+1
846 073e 21E0 ldi r18,hi8(361)
847 0740 8936 cpi r24,lo8(361)
848 0742 9207 cpc r25,r18
849 0744 04F4 brge .L54
850 0746 9093 0000 sts (KompassValue)+1,r25
851 074a 8093 0000 sts KompassValue,r24
852 .L54:
853 074e 2091 0000 lds r18,FromNaviCtrl+17
854 0752 3091 0000 lds r19,(FromNaviCtrl+17)+1
855 0756 8091 0000 lds r24,beeptime
856 075a 9091 0000 lds r25,(beeptime)+1
857 075e 8217 cp r24,r18
858 0760 9307 cpc r25,r19
859 0762 00F4 brsh .L55
860 0764 8091 0000 lds r24,DisableRcOffBeeping
861 0768 8823 tst r24
862 076a 01F4 brne .L55
863 076c 3093 0000 sts (beeptime)+1,r19
864 0770 2093 0000 sts beeptime,r18
865 .L55:
866 0774 862F mov r24,r22
867 0776 9927 clr r25
868 0778 8936 cpi r24,105
869 077a 9105 cpc r25,__zero_reg__
870 077c 01F4 brne .+2
871 077e 00C0 rjmp .L62
872 0780 8A36 cpi r24,106
873 0782 9105 cpc r25,__zero_reg__
874 0784 04F4 brge .L70
875 0786 8736 cpi r24,103
876 0788 9105 cpc r25,__zero_reg__
877 078a 01F0 breq .L57
878 078c 8836 cpi r24,104
879 078e 9105 cpc r25,__zero_reg__
880 0790 01F4 brne .+2
881 0792 00C0 rjmp .L61
882 0794 00C0 rjmp .L20
883 .L70:
884 0796 8A36 cpi r24,106
885 0798 9105 cpc r25,__zero_reg__
886 079a 01F4 brne .+2
887 079c 00C0 rjmp .L67
888 079e 8B36 cpi r24,107
889 07a0 9105 cpc r25,__zero_reg__
890 07a2 01F4 brne .+2
891 07a4 00C0 rjmp .L63
892 07a6 00C0 rjmp .L20
893 .L57:
894 07a8 8091 0000 lds r24,FromNaviCtrl+19
895 07ac 8093 0000 sts FromNaviCtrl_Value,r24
896 07b0 8091 0000 lds r24,FromNaviCtrl+20
897 07b4 8093 0000 sts FromNaviCtrl_Value+2,r24
898 07b8 8091 0000 lds r24,FromNaviCtrl+21
899 07bc 8093 0000 sts FromNaviCtrl_Value+1,r24
900 07c0 8091 0000 lds r24,FromNaviCtrl+22
901 07c4 8093 0000 sts KompassFusion,r24
902 07c8 8091 0000 lds r24,FromNaviCtrl+23
903 07cc 8093 0000 sts FromNaviCtrl_Value+4,r24
904 07d0 8091 0000 lds r24,FromNaviCtrl+24
905 07d4 8093 0000 sts FromNC_Rotate_C,r24
906 07d8 8091 0000 lds r24,FromNaviCtrl+25
907 07dc 8093 0000 sts FromNC_Rotate_S,r24
908 07e0 8091 0000 lds r24,FromNaviCtrl+26
909 07e4 8093 0000 sts GPS_Aid_StickMultiplikator,r24
910 07e8 8091 0000 lds r24,CareFree
911 07ec 8823 tst r24
912 07ee 01F0 breq .L58
913 07f0 2091 0000 lds r18,FromNaviCtrl+27
914 07f4 3091 0000 lds r19,(FromNaviCtrl+27)+1
915 07f8 37FD sbrc r19,7
916 07fa 00C0 rjmp .L58
917 07fc 3093 0000 sts (KompassSollWert)+1,r19
918 0800 2093 0000 sts KompassSollWert,r18
919 0804 9091 0000 lds r25,EE_Parameter+55
920 0808 9923 tst r25
921 080a 01F0 breq .L58
922 080c 8FE0 ldi r24,lo8(15)
923 080e 989F mul r25,r24
924 0810 C001 movw r24,r0
925 0812 1124 clr r1
926 0814 281B sub r18,r24
927 0816 390B sbc r19,r25
928 0818 C901 movw r24,r18
929 081a 8859 subi r24,lo8(-(360))
930 081c 9E4F sbci r25,hi8(-(360))
931 081e 68E6 ldi r22,lo8(360)
932 0820 71E0 ldi r23,hi8(360)
933 0822 0E94 0000 call __divmodhi4
934 0826 9093 0000 sts (KompassSollWert)+1,r25
935 082a 8093 0000 sts KompassSollWert,r24
936 .L58:
937 082e 2091 0000 lds r18,POI_KameraNick
938 0832 3091 0000 lds r19,(POI_KameraNick)+1
939 0836 8091 0000 lds r24,FromNaviCtrl+29
940 083a 9091 0000 lds r25,(FromNaviCtrl+29)+1
941 083e 280F add r18,r24
942 0840 391F adc r19,r25
943 0842 37FF sbrs r19,7
944 0844 00C0 rjmp .L60
945 0846 2F5F subi r18,lo8(-(1))
946 0848 3F4F sbci r19,hi8(-(1))
947 .L60:
948 084a 3595 asr r19
949 084c 2795 ror r18
950 084e 3093 0000 sts (POI_KameraNick)+1,r19
951 0852 2093 0000 sts POI_KameraNick,r18
952 0856 00C0 rjmp .L20
953 .L61:
954 0858 8091 0000 lds r24,FromNaviCtrl+19
955 085c 8093 0000 sts NC_Version,r24
956 0860 8091 0000 lds r24,FromNaviCtrl+20
957 0864 8093 0000 sts NC_Version+1,r24
958 0868 8091 0000 lds r24,FromNaviCtrl+21
959 086c 8093 0000 sts NC_Version+2,r24
960 0870 8091 0000 lds r24,FromNaviCtrl+22
961 0874 8093 0000 sts NC_Version+3,r24
962 0878 8091 0000 lds r24,FromNaviCtrl+23
963 087c 8093 0000 sts NC_Version+4,r24
964 0880 8091 0000 lds r24,DebugOut
965 0884 9091 0000 lds r25,FromNaviCtrl+24
966 0888 892B or r24,r25
967 088a 8093 0000 sts DebugOut,r24
968 088e 9091 0000 lds r25,DebugOut+1
969 0892 9370 andi r25,lo8(3)
970 0894 8091 0000 lds r24,FromNaviCtrl+25
971 0898 8C70 andi r24,lo8(12)
972 089a 982B or r25,r24
973 089c 9093 0000 sts DebugOut+1,r25
974 08a0 8091 0000 lds r24,FromNaviCtrl+26
975 08a4 8093 0000 sts NC_ErrorCode,r24
976 08a8 8091 0000 lds r24,FromNaviCtrl+27
977 08ac 8093 0000 sts NC_GPS_ModeCharacter,r24
978 08b0 8091 0000 lds r24,FromNaviCtrl+28
979 08b4 8093 0000 sts FromNaviCtrl_Value+3,r24
980 08b8 8091 0000 lds r24,FromNaviCtrl+29
981 08bc 8093 0000 sts NC_To_FC_Flags,r24
982 08c0 8091 0000 lds r24,FromNaviCtrl+30
983 08c4 8093 0000 sts NC_To_FC_MaxAltitude,r24
984 08c8 00C0 rjmp .L20
985 .L62:
986 08ca 8091 0000 lds r24,FromNaviCtrl+19
987 08ce 8093 0000 sts GPSInfo,r24
988 08d2 8091 0000 lds r24,FromNaviCtrl+20
989 08d6 8093 0000 sts GPSInfo+1,r24
990 08da 8091 0000 lds r24,FromNaviCtrl+21
991 08de 8093 0000 sts GPSInfo+2,r24
992 08e2 8091 0000 lds r24,FromNaviCtrl+22
993 08e6 8093 0000 sts GPSInfo+3,r24
994 08ea 8091 0000 lds r24,FromNaviCtrl+23
995 08ee 9091 0000 lds r25,(FromNaviCtrl+23)+1
996 08f2 9093 0000 sts (GPSInfo+4)+1,r25
997 08f6 8093 0000 sts GPSInfo+4,r24
998 08fa 8091 0000 lds r24,FromNaviCtrl+25
999 08fe 9091 0000 lds r25,(FromNaviCtrl+25)+1
1000 0902 9093 0000 sts (GPSInfo+6)+1,r25
1001 0906 8093 0000 sts GPSInfo+6,r24
1002 090a 8091 0000 lds r24,FromNaviCtrl+27
1003 090e 9927 clr r25
1004 0910 87FD sbrc r24,7
1005 0912 9095 com r25
1006 0914 9093 0000 sts (PPM_in+50)+1,r25
1007 0918 8093 0000 sts PPM_in+50,r24
1008 091c 8091 0000 lds r24,FromNaviCtrl+28
1009 0920 8093 0000 sts FromNC_AltitudeSpeed,r24
1010 0924 8091 0000 lds r24,FromNaviCtrl+29
1011 0928 9091 0000 lds r25,(FromNaviCtrl+29)+1
1012 092c 9C01 movw r18,r24
1013 092e 4427 clr r20
1014 0930 37FD sbrc r19,7
1015 0932 4095 com r20
1016 0934 542F mov r21,r20
1017 0936 DA01 movw r26,r20
1018 0938 C901 movw r24,r18
1019 093a 63E0 ldi r22,3
1020 093c 880F 1: lsl r24
1021 093e 991F rol r25
1022 0940 AA1F rol r26
1023 0942 BB1F rol r27
1024 0944 6A95 dec r22
1025 0946 01F4 brne 1b
1026 0948 820F add r24,r18
1027 094a 931F adc r25,r19
1028 094c A41F adc r26,r20
1029 094e B51F adc r27,r21
1030 0950 820F add r24,r18
1031 0952 931F adc r25,r19
1032 0954 A41F adc r26,r20
1033 0956 B51F adc r27,r21
1034 0958 8093 0000 sts FromNC_AltitudeSetpoint,r24
1035 095c 9093 0000 sts (FromNC_AltitudeSetpoint)+1,r25
1036 0960 A093 0000 sts (FromNC_AltitudeSetpoint)+2,r26
1037 0964 B093 0000 sts (FromNC_AltitudeSetpoint)+3,r27
1038 0968 00C0 rjmp .L20
1039 .L63:
1040 096a 8091 0000 lds r24,FromNaviCtrl+19
1041 096e 8093 0000 sts EarthMagneticField,r24
1042 0972 8091 0000 lds r24,FromNaviCtrl+20
1043 0976 8093 0000 sts EarthMagneticInclination,r24
1044 097a 8091 0000 lds r24,FromNaviCtrl+21
1045 097e 8093 0000 sts EarthMagneticInclinationTheoretic,r24
1046 0982 9091 0000 lds r25,FromNaviCtrl+22
1047 0986 9923 tst r25
1048 0988 01F0 breq .L64
1049 098a 8091 0000 lds r24,SpeakHoTT
1050 098e 8823 tst r24
1051 0990 01F0 breq .L66
1052 0992 8151 subi r24,lo8(-(-17))
1053 0994 8330 cpi r24,lo8(3)
1054 0996 00F4 brsh .L64
1055 .L66:
1056 0998 9093 0000 sts SpeakHoTT,r25
1057 .L64:
1058 099c 8091 0000 lds r24,FromNaviCtrl+23
1059 09a0 8093 0000 sts NaviData_WaypointIndex,r24
1060 09a4 8091 0000 lds r24,FromNaviCtrl+24
1061 09a8 8093 0000 sts NaviData_WaypointNumber,r24
1062 09ac 8091 0000 lds r24,FromNaviCtrl+25
1063 09b0 9091 0000 lds r25,(FromNaviCtrl+25)+1
1064 09b4 9093 0000 sts (NaviData_TargetDistance)+1,r25
1065 09b8 8093 0000 sts NaviData_TargetDistance,r24
1066 09bc 8091 0000 lds r24,FromNaviCtrl+27
1067 09c0 8093 0000 sts NaviData_TargetHoldTime,r24
1068 09c4 00C0 rjmp .L20
1069 .L67:
1070 09c6 8091 0000 lds r24,EE_Parameter+39
1071 09ca 8630 cpi r24,lo8(6)
1072 09cc 01F4 brne .L20
1073 09ce 0E94 0000 call NC_Fills_HoTT_Telemety
1074 09d2 00C0 rjmp .L20
1075 .L51:
1076 09d4 1092 0000 sts (GPS_Nick)+1,__zero_reg__
1077 09d8 1092 0000 sts GPS_Nick,__zero_reg__
1078 09dc 1092 0000 sts (GPS_Roll)+1,__zero_reg__
1079 09e0 1092 0000 sts GPS_Roll,__zero_reg__
1080 .L20:
1081 /* epilogue: frame size=0 */
1082 09e4 1F91 pop r17
1083 09e6 0F91 pop r16
1084 09e8 FF90 pop r15
1085 09ea EF90 pop r14
1086 09ec 0895 ret
1087 /* epilogue end (size=5) */
1088 /* function UpdateSPI_Buffer size 1115 (1106) */
1090 .global SPI_StartTransmitPacket
1092 SPI_StartTransmitPacket:
1093 /* prologue: frame size=0 */
1094 /* prologue end (size=0) */
1095 09ee 8091 0000 lds r24,SPITransferCompleted
1096 09f2 8823 tst r24
1097 09f4 01F4 brne .+2
1098 09f6 00C0 rjmp .L73
1099 09f8 4598 cbi 40-0x20,5
1100 09fa 80E0 ldi r24,lo8(ToNaviCtrl)
1101 09fc 90E0 ldi r25,hi8(ToNaviCtrl)
1102 09fe 9093 0000 sts (SPI_TX_Buffer)+1,r25
1103 0a02 8093 0000 sts SPI_TX_Buffer,r24
1104 0a06 9091 0000 lds r25,SPI_CommandCounter
1105 0a0a E92F mov r30,r25
1106 0a0c FF27 clr r31
1107 0a0e E050 subi r30,lo8(-(SPI_CommandSequence))
1108 0a10 F040 sbci r31,hi8(-(SPI_CommandSequence))
1109 0a12 9F5F subi r25,lo8(-(1))
1110 0a14 9093 0000 sts SPI_CommandCounter,r25
1111 0a18 8081 ld r24,Z
1112 0a1a 8093 0000 sts ToNaviCtrl+2,r24
1113 0a1e 9B30 cpi r25,lo8(11)
1114 0a20 00F0 brlo .L75
1115 0a22 1092 0000 sts SPI_CommandCounter,__zero_reg__
1116 .L75:
1117 0a26 1092 0000 sts SPITransferCompleted,__zero_reg__
1118 0a2a 0E94 0000 call UpdateSPI_Buffer
1119 0a2e 81E0 ldi r24,lo8(1)
1120 0a30 8093 0000 sts SPI_BufferIndex,r24
1121 /* #APP */
1122 0a34 0000 nop
1123 0a36 0000 nop
1124 0a38 0000 nop
1125 0a3a 0000 nop
1126 0a3c 0000 nop
1127 0a3e 0000 nop
1128 0a40 0000 nop
1129 0a42 0000 nop
1130 0a44 0000 nop
1131 0a46 0000 nop
1132 0a48 0000 nop
1133 0a4a 0000 nop
1134 0a4c 0000 nop
1135 0a4e 0000 nop
1136 0a50 0000 nop
1137 0a52 0000 nop
1138 0a54 0000 nop
1139 0a56 0000 nop
1140 0a58 0000 nop
1141 0a5a 0000 nop
1142 0a5c 0000 nop
1143 0a5e 0000 nop
1144 0a60 0000 nop
1145 0a62 0000 nop
1146 /* #NOAPP */
1147 0a64 8091 0000 lds r24,ToNaviCtrl
1148 0a68 8093 0000 sts ToNaviCtrl+33,r24
1149 0a6c 8EBD out 78-0x20,r24
1150 .L73:
1151 0a6e 0895 ret
1152 /* epilogue: frame size=0 */
1153 /* epilogue: noreturn */
1154 /* epilogue end (size=0) */
1155 /* function SPI_StartTransmitPacket size 89 (89) */
1157 .comm GPSInfo,8,1
1158 .comm NC_Version,5,1
1159 .comm FromNaviCtrl_Value,5,1
1160 .comm ToNaviCtrl,34,1
1161 .comm FromNaviCtrl,32,1
1162 .comm SPI_BufferIndex,1,1
1163 .comm SPI_RxBufferIndex,1,1
1164 .comm SPI_Buffer,32,1
1165 .comm SPI_TX_Buffer,2,1
1166 .comm SPITransferCompleted,1,1
1167 .comm SPI_ChkSum,1,1
1168 .comm SPI_RxDataValid,1,1
1169 /* File "spi.c": code 1401 = 0x0579 (1391), prologues 4, epilogues 6 */
DEFINED SYMBOLS
*ABS*:00000000 spi.c
C:\Temp/ccnBcmNg.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccnBcmNg.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccnBcmNg.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccnBcmNg.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccnBcmNg.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccnBcmNg.s:15 .bss:00000000 MagVec
C:\Temp/ccnBcmNg.s:21 .bss:00000006 POI_KameraNick
C:\Temp/ccnBcmNg.s:27 .bss:00000008 NC_To_FC_MaxAltitude
C:\Temp/ccnBcmNg.s:33 .bss:00000009 NC_To_FC_Flags
C:\Temp/ccnBcmNg.s:39 .bss:0000000a EarthMagneticInclinationTheoretic
C:\Temp/ccnBcmNg.s:45 .bss:0000000b EarthMagneticInclination
C:\Temp/ccnBcmNg.s:51 .bss:0000000c EarthMagneticField
C:\Temp/ccnBcmNg.s:57 .data:00000000 NC_GPS_ModeCharacter
C:\Temp/ccnBcmNg.s:64 .bss:0000000d NC_ErrorCode
C:\Temp/ccnBcmNg.s:70 .bss:0000000e SPI_CommandCounter
C:\Temp/ccnBcmNg.s:76 .data:00000001 SPI_CommandSequence
C:\Temp/ccnBcmNg.s:91 .data:0000000c NaviDataOkay
C:\Temp/ccnBcmNg.s:98 .bss:0000000f FromNC_Rotate_S
C:\Temp/ccnBcmNg.s:104 .data:0000000d FromNC_Rotate_C
C:\Temp/ccnBcmNg.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/ccnBcmNg.s:139 .bss:00000011 rxchksum.3
C:\Temp/ccnBcmNg.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/ccnBcmNg.s:140 .bss:00000012 motorindex.0
C:\Temp/ccnBcmNg.s:286 .data:0000000e oldcommand.1
C:\Temp/ccnBcmNg.s:291 .text:00000158 UpdateSPI_Buffer
*COM*:00000005 NC_Version
*COM*:00000008 GPSInfo
C:\Temp/ccnBcmNg.s:1092 .text:000009ee SPI_StartTransmitPacket
*COM*:00000001 SPI_ChkSum
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SendSPI
EE_Parameter
IntegralNick
__divmodsi4
IntegralRoll
ErsatzKompass
GIER_GRAD_FAKTOR
AdNeutralGier
AdWertGier
NaviCntAcc
NaviAccNick
__divmodhi4
NaviAccRoll
__tablejump2__
Parameter_UserParam1
Parameter_UserParam2
Parameter_UserParam3
Parameter_UserParam4
Parameter_UserParam5
Parameter_UserParam6
Parameter_UserParam7
Parameter_UserParam8
FC_StatusFlags
GetActiveParamSet
FC_StatusFlags2
Capacity
UBat
BattLowVoltageWarning
VarioCharacter
Motor
__udivmodqi4
JetiBeep
HoTT_Waring
JETI_CODE
ToNC_SpeakHoTT
PPM_in
Poti
WinkelOut
HoehenWert
SollHoehe
SenderOkay
DebugOut
PlatinenVersion
VersionInfo
Parameter_GlobalConfig
Parameter_ExtraConfig
Parameter_ServoNickControl
Parameter_ServoRollControl
CalculateCompassTimer
GPS_Nick
GPS_Roll
KompassValue
beeptime
DisableRcOffBeeping
KompassFusion
GPS_Aid_StickMultiplikator
CareFree
KompassSollWert
FromNC_AltitudeSpeed
FromNC_AltitudeSetpoint
SpeakHoTT
NaviData_WaypointIndex
NaviData_WaypointNumber
NaviData_TargetDistance
NaviData_TargetHoldTime
NC_Fills_HoTT_Telemety
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/timer0.c
0,0 → 1,478
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#define MULTIPLYER 4
 
volatile unsigned int CountMilliseconds = 0;
volatile unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int cntKompass = 0;
volatile unsigned int beeptime = 0;
volatile unsigned char SendSPI = 0, ServoActive = 0, CalculateServoSignals = 1;
uint16_t RemainingPulse = 0;
volatile int16_t ServoNickOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon
volatile int16_t ServoRollOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon
 
unsigned int BeepMuster = 0xffff;
signed int NickServoValue = 128 * MULTIPLYER * 16;
 
volatile int16_t ServoNickValue = 0;
volatile int16_t ServoRollValue = 0;
 
 
enum {
STOP = 0,
CK = 1,
CK8 = 2,
CK64 = 3,
CK256 = 4,
CK1024 = 5,
T0_FALLING_EDGE = 6,
T0_RISING_EDGE = 7
};
 
 
ISR(TIMER0_OVF_vect) // 9,7kHz
{
static unsigned char cnt_1ms = 1,cnt = 0, compass_active = 0;
unsigned char pieper_ein = 0;
if(SendSPI) SendSPI--;
if(SpektrumTimer) SpektrumTimer--;
if(!cnt--)
{
cnt = 9;
CountMilliseconds++;
cnt_1ms++;
cnt_1ms %= 2;
 
if(!cnt_1ms) UpdateMotor = 1;
if(!(PINC & 0x10)) compass_active = 1;
 
if(beeptime)
{
if(beeptime > 10) beeptime -= 10; else beeptime = 0;
if(beeptime & BeepMuster)
{
pieper_ein = 1;
}
else pieper_ein = 0;
}
else
{
pieper_ein = 0;
BeepMuster = 0xffff;
}
if(pieper_ein)
{
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2
else PORTC |= (1<<7); // Speaker an PORTC.7
}
else
{
if(PlatinenVersion == 10) PORTD &= ~(1<<2);
else PORTC &= ~(1<<7);
}
}
if(compass_active && !NaviDataOkay && Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)
{
if(PINC & 0x10)
{
if(++cntKompass > 1000) compass_active = 0;
}
else
{
if((cntKompass) && (cntKompass < 362))
{
cntKompass += cntKompass / 41;
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0;
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
}
cntKompass = 0;
}
}
}
 
 
// -----------------------------------------------------------------------
unsigned int SetDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
void Delay_ms_Mess(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;}
}
 
/*****************************************************/
/* Initialize Timer 2 */
/*****************************************************/
// The timer 2 is used to generate the PWM at PD7 (J7)
// to control a camera servo for nick compensation.
void TIMER2_Init(void)
{
uint8_t sreg = SREG;
 
// disable all interrupts before reconfiguration
cli();
 
PORTD &= ~(1<<PORTD7); // set PD7 to low
 
DDRC |= (1<<DDC6); // set PC6 as output (Reset for HEF4017)
HEF4017Reset_ON;
// Timer/Counter 2 Control Register A
 
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1)
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0)
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0)
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0));
TCCR2A |= (1<<WGM21)|(1<<WGM20);
 
// Timer/Counter 2 Control Register B
 
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms
 
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1)
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22));
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22);
 
// Initialize the Timer/Counter 2 Register
TCNT2 = 0;
 
// Initialize the Output Compare Register A used for PWM generation on port PD7.
OCR2A = 255;
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0
 
// Timer/Counter 2 Interrupt Mask Register
// Enable timer output compare match A Interrupt only
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2));
TIMSK2 |= (1<<OCIE2A);
 
SREG = sreg;
}
 
//----------------------------
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 180;
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
TIMSK0 |= _BV(TOIE0);
}
 
 
/*****************************************************/
/* Control Servo Position */
/*****************************************************/
void CalcNickServoValue(void)
{
signed int max, min;
 
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value
{
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15);
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20);
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6;
LIMIT_MIN_MAX(NickServoValue,min, max);
}
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control
}
 
void CalculateServo(void)
{
signed char cosinus, sinus;
signed long nick, roll;
 
cosinus = sintab[EE_Parameter.CamOrientation + 6];
sinus = sintab[EE_Parameter.CamOrientation];
 
if(CalculateServoSignals == 1)
{
nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L;
nick -= POI_KameraNick * 7;
nick = ((long)EE_Parameter.ServoNickComp * nick) / 512L;
// offset (Range from 0 to 255 * 3 = 765)
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue;
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed;
 
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo
{
nick = ServoNickOffset / 16 + nick;
}
else
{ // inverting movement of servo
nick = ServoNickOffset / 16 - nick;
}
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1);
else ServoNickValue = nick;
// limit servo value to its parameter range definition
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER))
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER;
}
else
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER))
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER;
}
if(PlatinenVersion < 20) CalculateServoSignals = 0; else CalculateServoSignals++;
}
else
{
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L;
roll = ((long)EE_Parameter.ServoRollComp * roll) / 512L;
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed;
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV)
{ // inverting movement of servo
roll = ServoRollOffset / 16 + roll;
}
else
{ // inverting movement of servo
roll = ServoRollOffset / 16 - roll;
}
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1);
else ServoRollValue = roll;
// limit servo value to its parameter range definition
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER))
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER;
}
else
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER))
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER;
}
CalculateServoSignals = 0;
}
}
 
ISR(TIMER2_COMPA_vect)
{
// frame len 22.5 ms = 14063 * 1.6 us
// stop pulse: 0.3 ms = 188 * 1.6 us
// min servo pulse: 0.6 ms = 375 * 1.6 us
// max servo pulse: 2.4 ms = 1500 * 1.6 us
// resolution: 1500 - 375 = 1125 steps
 
#define IRS_RUNTIME 127
#define PPM_STOPPULSE 188
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh)
#define MINSERVOPULSE 375
#define MAXSERVOPULSE 1500
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE)
 
static uint8_t PulseOutput = 0;
static uint16_t ServoFrameTime = 0;
static uint8_t ServoIndex = 0;
 
 
if(PlatinenVersion < 20)
{
//---------------------------
// Nick servo state machine
//---------------------------
if(!PulseOutput) // pulse output complete
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
// accumulate time for correct update rate
ServoFrameTime = RemainingPulse;
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
RemainingPulse = PPM_FRAMELEN - ServoFrameTime;
CalculateServoSignals = 1;
}
// set pulse output active
PulseOutput = 1;
}
} // EOF Nick servo state machine
else
{
//-----------------------------------------------------
// PPM state machine, onboard demultiplexed by HEF4017
//-----------------------------------------------------
if(!PulseOutput) // pulse output complete
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
if(ServoIndex == 0) // if we are at the sync gap
{
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time
ServoFrameTime = 0; // reset servo frame time
HEF4017Reset_ON; // enable HEF4017 reset
}
else // servo channels
if(ServoIndex > EE_Parameter.ServoNickRefresh)
{
RemainingPulse = 10; // end it here
}
else
{
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
switch(ServoIndex) // map servo channels
{
case 1: // Nick Compensation Servo
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
break;
case 2: // Roll Compensation Servo
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
break;
case 3:
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
case 4:
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
case 5:
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
default: // other servo channels
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs
break;
}
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
// substract stop pulse width
RemainingPulse -= PPM_STOPPULSE;
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
}
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
// set pulsewidth to stop pulse width
RemainingPulse = PPM_STOPPULSE;
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset
else HEF4017Reset_ON;
ServoIndex++;
if(ServoIndex > EE_Parameter.ServoNickRefresh+1)
{
CalculateServoSignals = 1;
ServoIndex = 0; // reset to the sync gap
}
}
// set pulse output active
PulseOutput = 1;
}
} // EOF PPM state machine
 
// General pulse output generator
if(RemainingPulse > (255 + IRS_RUNTIME))
{
OCR2A = 255;
RemainingPulse -= 255;
}
else
{
if(RemainingPulse > 255) // this is the 2nd last part
{
if((RemainingPulse - 255) < IRS_RUNTIME)
{
OCR2A = 255 - IRS_RUNTIME;
RemainingPulse -= 255 - IRS_RUNTIME;
 
}
else // last part > ISR_RUNTIME
{
OCR2A = 255;
RemainingPulse -= 255;
}
}
else // this is the last part
{
OCR2A = RemainingPulse;
RemainingPulse = 0;
PulseOutput = 0; // trigger to stop pulse
}
} // EOF general pulse output generator
}
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/timer0.h
0,0 → 1,24
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
#define HEF4017Reset_ON PORTC |= (1<<PORTC6)
#define HEF4017Reset_OFF PORTC &= ~(1<<PORTC6)
 
void Timer_Init(void);
void TIMER2_Init(void);
void Delay_ms(unsigned int);
void Delay_ms_Mess(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
void CalculateServo(void);
void CalcNickServoValue(void);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern volatile unsigned int cntKompass;
extern unsigned int BeepMuster;
extern volatile unsigned char SendSPI, ServoActive, CalculateServoSignals;
extern volatile int16_t ServoNickValue;
extern volatile int16_t ServoRollValue;
extern signed int NickServoValue;
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/timer0.lst
0,0 → 1,1376
1 .file "timer0.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global ServoRollValue
11 .global ServoRollValue
12 .section .bss
15 ServoRollValue:
16 0000 0000 .skip 2,0
17 .global ServoNickValue
18 .global ServoNickValue
21 ServoNickValue:
22 0002 0000 .skip 2,0
23 .global NickServoValue
24 .data
27 NickServoValue:
28 0000 0020 .word 8192
29 .global BeepMuster
32 BeepMuster:
33 0002 FFFF .word -1
34 .global ServoRollOffset
37 ServoRollOffset:
38 0004 C01F .word 8128
39 .global ServoNickOffset
42 ServoNickOffset:
43 0006 C01F .word 8128
44 .global RemainingPulse
45 .global RemainingPulse
46 .section .bss
49 RemainingPulse:
50 0004 0000 .skip 2,0
51 .global CalculateServoSignals
52 .data
55 CalculateServoSignals:
56 0008 01 .byte 1
57 .global ServoActive
58 .global ServoActive
59 .section .bss
62 ServoActive:
63 0006 00 .skip 1,0
64 .global SendSPI
65 .global SendSPI
68 SendSPI:
69 0007 00 .skip 1,0
70 .global beeptime
71 .global beeptime
74 beeptime:
75 0008 0000 .skip 2,0
76 .global cntKompass
77 .global cntKompass
80 cntKompass:
81 000a 0000 .skip 2,0
82 .global UpdateMotor
83 .global UpdateMotor
86 UpdateMotor:
87 000c 00 .skip 1,0
88 .global CountMilliseconds
89 .global CountMilliseconds
92 CountMilliseconds:
93 000d 0000 .skip 2,0
94 .data
97 cnt_1ms.3:
98 0009 01 .byte 1
99 .lcomm cnt.4,1
100 .lcomm compass_active.5,1
101 .text
102 .global __vector_18
104 __vector_18:
105 /* prologue: frame size=0 */
106 0000 1F92 push __zero_reg__
107 0002 0F92 push __tmp_reg__
108 0004 0FB6 in __tmp_reg__,__SREG__
109 0006 0F92 push __tmp_reg__
110 0008 1124 clr __zero_reg__
111 000a 2F93 push r18
112 000c 3F93 push r19
113 000e 5F93 push r21
114 0010 6F93 push r22
115 0012 7F93 push r23
116 0014 8F93 push r24
117 0016 9F93 push r25
118 0018 AF93 push r26
119 001a BF93 push r27
120 001c EF93 push r30
121 001e FF93 push r31
122 /* prologue end (size=16) */
123 0020 20E0 ldi r18,lo8(0)
124 0022 8091 0000 lds r24,SendSPI
125 0026 8823 tst r24
126 0028 01F0 breq .L2
127 002a 8091 0000 lds r24,SendSPI
128 002e 8150 subi r24,lo8(-(-1))
129 0030 8093 0000 sts SendSPI,r24
130 .L2:
131 0034 8091 0000 lds r24,SpektrumTimer
132 0038 8823 tst r24
133 003a 01F0 breq .L3
134 003c 8150 subi r24,lo8(-(-1))
135 003e 8093 0000 sts SpektrumTimer,r24
136 .L3:
137 0042 8091 0000 lds r24,cnt.4
138 0046 8150 subi r24,lo8(-(-1))
139 0048 8093 0000 sts cnt.4,r24
140 004c 8F3F cpi r24,lo8(-1)
141 004e 01F0 breq .+2
142 0050 00C0 rjmp .L4
143 0052 89E0 ldi r24,lo8(9)
144 0054 8093 0000 sts cnt.4,r24
145 0058 8091 0000 lds r24,CountMilliseconds
146 005c 9091 0000 lds r25,(CountMilliseconds)+1
147 0060 0196 adiw r24,1
148 0062 9093 0000 sts (CountMilliseconds)+1,r25
149 0066 8093 0000 sts CountMilliseconds,r24
150 006a 8091 0000 lds r24,cnt_1ms.3
151 006e 8F5F subi r24,lo8(-(1))
152 0070 8170 andi r24,lo8(1)
153 0072 8093 0000 sts cnt_1ms.3,r24
154 0076 8823 tst r24
155 0078 01F4 brne .L5
156 007a 81E0 ldi r24,lo8(1)
157 007c 8093 0000 sts UpdateMotor,r24
158 .L5:
159 0080 3499 sbic 38-0x20,4
160 0082 00C0 rjmp .L6
161 0084 81E0 ldi r24,lo8(1)
162 0086 8093 0000 sts compass_active.5,r24
163 .L6:
164 008a 8091 0000 lds r24,beeptime
165 008e 9091 0000 lds r25,(beeptime)+1
166 0092 892B or r24,r25
167 0094 01F0 breq .L7
168 0096 8091 0000 lds r24,beeptime
169 009a 9091 0000 lds r25,(beeptime)+1
170 009e 0B97 sbiw r24,11
171 00a0 00F0 brlo .L8
172 00a2 8091 0000 lds r24,beeptime
173 00a6 9091 0000 lds r25,(beeptime)+1
174 00aa 0A97 sbiw r24,10
175 00ac 9093 0000 sts (beeptime)+1,r25
176 00b0 8093 0000 sts beeptime,r24
177 00b4 00C0 rjmp .L9
178 .L8:
179 00b6 1092 0000 sts (beeptime)+1,__zero_reg__
180 00ba 1092 0000 sts beeptime,__zero_reg__
181 .L9:
182 00be 8091 0000 lds r24,beeptime
183 00c2 9091 0000 lds r25,(beeptime)+1
184 00c6 2091 0000 lds r18,BeepMuster
185 00ca 3091 0000 lds r19,(BeepMuster)+1
186 00ce 8223 and r24,r18
187 00d0 9323 and r25,r19
188 00d2 892B or r24,r25
189 00d4 01F0 breq .L10
190 00d6 21E0 ldi r18,lo8(1)
191 00d8 00C0 rjmp .L12
192 .L10:
193 00da 20E0 ldi r18,lo8(0)
194 00dc 00C0 rjmp .L12
195 .L7:
196 00de 8FEF ldi r24,lo8(-1)
197 00e0 9FEF ldi r25,hi8(-1)
198 00e2 9093 0000 sts (BeepMuster)+1,r25
199 00e6 8093 0000 sts BeepMuster,r24
200 .L12:
201 00ea 8091 0000 lds r24,PlatinenVersion
202 00ee 2223 tst r18
203 00f0 01F0 breq .L13
204 00f2 8A30 cpi r24,lo8(10)
205 00f4 01F4 brne .L14
206 00f6 5A9A sbi 43-0x20,2
207 00f8 00C0 rjmp .L4
208 .L14:
209 00fa 479A sbi 40-0x20,7
210 00fc 00C0 rjmp .L4
211 .L13:
212 00fe 8A30 cpi r24,lo8(10)
213 0100 01F4 brne .L17
214 0102 5A98 cbi 43-0x20,2
215 0104 00C0 rjmp .L4
216 .L17:
217 0106 4798 cbi 40-0x20,7
218 .L4:
219 0108 8091 0000 lds r24,compass_active.5
220 010c 8823 tst r24
221 010e 01F4 brne .+2
222 0110 00C0 rjmp .L1
223 0112 2091 0000 lds r18,NaviDataOkay
224 0116 2223 tst r18
225 0118 01F0 breq .+2
226 011a 00C0 rjmp .L1
227 011c 8091 0000 lds r24,Parameter_GlobalConfig
228 0120 83FF sbrs r24,3
229 0122 00C0 rjmp .L1
230 0124 86B1 in r24,38-0x20
231 0126 9927 clr r25
232 0128 FC01 movw r30,r24
233 012a E071 andi r30,lo8(16)
234 012c F070 andi r31,hi8(16)
235 012e 84FF sbrs r24,4
236 0130 00C0 rjmp .L20
237 0132 8091 0000 lds r24,cntKompass
238 0136 9091 0000 lds r25,(cntKompass)+1
239 013a 0196 adiw r24,1
240 013c 9093 0000 sts (cntKompass)+1,r25
241 0140 8093 0000 sts cntKompass,r24
242 0144 8091 0000 lds r24,cntKompass
243 0148 9091 0000 lds r25,(cntKompass)+1
244 014c 895E subi r24,lo8(1001)
245 014e 9340 sbci r25,hi8(1001)
246 0150 00F0 brlo .L1
247 0152 2093 0000 sts compass_active.5,r18
248 0156 00C0 rjmp .L1
249 .L20:
250 0158 8091 0000 lds r24,cntKompass
251 015c 9091 0000 lds r25,(cntKompass)+1
252 0160 892B or r24,r25
253 0162 01F0 breq .L23
254 0164 8091 0000 lds r24,cntKompass
255 0168 9091 0000 lds r25,(cntKompass)+1
256 016c 8A56 subi r24,lo8(362)
257 016e 9140 sbci r25,hi8(362)
258 0170 00F4 brsh .L23
259 0172 8091 0000 lds r24,cntKompass
260 0176 9091 0000 lds r25,(cntKompass)+1
261 017a 69E2 ldi r22,lo8(41)
262 017c 70E0 ldi r23,hi8(41)
263 017e 0E94 0000 call __udivmodhi4
264 0182 8091 0000 lds r24,cntKompass
265 0186 9091 0000 lds r25,(cntKompass)+1
266 018a 860F add r24,r22
267 018c 971F adc r25,r23
268 018e 9093 0000 sts (cntKompass)+1,r25
269 0192 8093 0000 sts cntKompass,r24
270 0196 8091 0000 lds r24,cntKompass
271 019a 9091 0000 lds r25,(cntKompass)+1
272 019e 0B97 sbiw r24,11
273 01a0 00F0 brlo .L24
274 01a2 8091 0000 lds r24,cntKompass
275 01a6 9091 0000 lds r25,(cntKompass)+1
276 01aa 0A97 sbiw r24,10
277 01ac 9093 0000 sts (KompassValue)+1,r25
278 01b0 8093 0000 sts KompassValue,r24
279 01b4 00C0 rjmp .L23
280 .L24:
281 01b6 F093 0000 sts (KompassValue)+1,r31
282 01ba E093 0000 sts KompassValue,r30
283 .L23:
284 01be 1092 0000 sts (cntKompass)+1,__zero_reg__
285 01c2 1092 0000 sts cntKompass,__zero_reg__
286 .L1:
287 /* epilogue: frame size=0 */
288 01c6 FF91 pop r31
289 01c8 EF91 pop r30
290 01ca BF91 pop r27
291 01cc AF91 pop r26
292 01ce 9F91 pop r25
293 01d0 8F91 pop r24
294 01d2 7F91 pop r23
295 01d4 6F91 pop r22
296 01d6 5F91 pop r21
297 01d8 3F91 pop r19
298 01da 2F91 pop r18
299 01dc 0F90 pop __tmp_reg__
300 01de 0FBE out __SREG__,__tmp_reg__
301 01e0 0F90 pop __tmp_reg__
302 01e2 1F90 pop __zero_reg__
303 01e4 1895 reti
304 /* epilogue end (size=16) */
305 /* function __vector_18 size 247 (215) */
307 .global SetDelay
309 SetDelay:
310 /* prologue: frame size=0 */
311 /* prologue end (size=0) */
312 01e6 2091 0000 lds r18,CountMilliseconds
313 01ea 3091 0000 lds r19,(CountMilliseconds)+1
314 01ee 280F add r18,r24
315 01f0 391F adc r19,r25
316 01f2 C901 movw r24,r18
317 01f4 0196 adiw r24,1
318 /* epilogue: frame size=0 */
319 01f6 0895 ret
320 /* epilogue end (size=1) */
321 /* function SetDelay size 9 (8) */
323 .global CheckDelay
325 CheckDelay:
326 /* prologue: frame size=0 */
327 /* prologue end (size=0) */
328 01f8 2091 0000 lds r18,CountMilliseconds
329 01fc 3091 0000 lds r19,(CountMilliseconds)+1
330 0200 821B sub r24,r18
331 0202 930B sbc r25,r19
332 0204 892F mov r24,r25
333 0206 9927 clr r25
334 0208 8695 lsr r24
335 020a 8074 andi r24,lo8(64)
336 020c 9070 andi r25,hi8(64)
337 /* epilogue: frame size=0 */
338 020e 0895 ret
339 /* epilogue end (size=1) */
340 /* function CheckDelay size 12 (11) */
342 .global Delay_ms
344 Delay_ms:
345 /* prologue: frame size=0 */
346 0210 CF93 push r28
347 0212 DF93 push r29
348 /* prologue end (size=2) */
349 0214 0E94 0000 call SetDelay
350 0218 EC01 movw r28,r24
351 .L29:
352 021a CE01 movw r24,r28
353 021c 0E94 0000 call CheckDelay
354 0220 8823 tst r24
355 0222 01F0 breq .L29
356 /* epilogue: frame size=0 */
357 0224 DF91 pop r29
358 0226 CF91 pop r28
359 0228 0895 ret
360 /* epilogue end (size=3) */
361 /* function Delay_ms size 13 (8) */
363 .global Delay_ms_Mess
365 Delay_ms_Mess:
366 /* prologue: frame size=0 */
367 022a CF93 push r28
368 022c DF93 push r29
369 /* prologue end (size=2) */
370 022e 0E94 0000 call SetDelay
371 0232 EC01 movw r28,r24
372 0234 00C0 rjmp .L40
373 .L36:
374 0236 8091 0000 lds r24,AdReady
375 023a 8823 tst r24
376 023c 01F0 breq .L40
377 023e 9093 0000 sts AdReady,r25
378 0242 8FEC ldi r24,lo8(-49)
379 0244 8093 7A00 sts 122,r24
380 .L40:
381 0248 CE01 movw r24,r28
382 024a 0E94 0000 call CheckDelay
383 024e 982F mov r25,r24
384 0250 8823 tst r24
385 0252 01F0 breq .L36
386 /* epilogue: frame size=0 */
387 0254 DF91 pop r29
388 0256 CF91 pop r28
389 0258 0895 ret
390 /* epilogue end (size=3) */
391 /* function Delay_ms_Mess size 24 (19) */
393 .global TIMER2_Init
395 TIMER2_Init:
396 /* prologue: frame size=0 */
397 /* prologue end (size=0) */
398 025a 9FB7 in r25,95-0x20
399 /* #APP */
400 025c F894 cli
401 /* #NOAPP */
402 025e 5F98 cbi 43-0x20,7
403 0260 3E9A sbi 39-0x20,6
404 0262 469A sbi 40-0x20,6
405 0264 8091 B000 lds r24,176
406 0268 8F70 andi r24,lo8(15)
407 026a 8093 B000 sts 176,r24
408 026e 8091 B000 lds r24,176
409 0272 8360 ori r24,lo8(3)
410 0274 8093 B000 sts 176,r24
411 0278 8091 B100 lds r24,177
412 027c 8B73 andi r24,lo8(59)
413 027e 8093 B100 sts 177,r24
414 0282 8091 B100 lds r24,177
415 0286 8B60 ori r24,lo8(11)
416 0288 8093 B100 sts 177,r24
417 028c 1092 B200 sts 178,__zero_reg__
418 0290 8FEF ldi r24,lo8(-1)
419 0292 8093 B300 sts 179,r24
420 0296 8091 B000 lds r24,176
421 029a 8068 ori r24,lo8(-128)
422 029c 8093 B000 sts 176,r24
423 02a0 8091 7000 lds r24,112
424 02a4 8A7F andi r24,lo8(-6)
425 02a6 8093 7000 sts 112,r24
426 02aa 8091 7000 lds r24,112
427 02ae 8260 ori r24,lo8(2)
428 02b0 8093 7000 sts 112,r24
429 02b4 9FBF out 95-0x20,r25
430 /* epilogue: frame size=0 */
431 02b6 0895 ret
432 /* epilogue end (size=1) */
433 /* function TIMER2_Init size 48 (47) */
435 .global Timer_Init
437 Timer_Init:
438 /* prologue: frame size=0 */
439 /* prologue end (size=0) */
440 02b8 8AE0 ldi r24,lo8(10)
441 02ba 90E0 ldi r25,hi8(10)
442 02bc 0E94 0000 call SetDelay
443 02c0 9093 0000 sts (tim_main)+1,r25
444 02c4 8093 0000 sts tim_main,r24
445 02c8 82E0 ldi r24,lo8(2)
446 02ca 85BD out 69-0x20,r24
447 02cc 83EA ldi r24,lo8(-93)
448 02ce 84BD out 68-0x20,r24
449 02d0 17BC out 71-0x20,__zero_reg__
450 02d2 84EB ldi r24,lo8(-76)
451 02d4 88BD out 72-0x20,r24
452 02d6 86E0 ldi r24,lo8(6)
453 02d8 86BD out 70-0x20,r24
454 02da 8091 6E00 lds r24,110
455 02de 8160 ori r24,lo8(1)
456 02e0 8093 6E00 sts 110,r24
457 /* epilogue: frame size=0 */
458 02e4 0895 ret
459 /* epilogue end (size=1) */
460 /* function Timer_Init size 23 (22) */
462 .global CalcNickServoValue
464 CalcNickServoValue:
465 /* prologue: frame size=0 */
466 /* prologue end (size=0) */
467 02e6 8091 0000 lds r24,EE_Parameter+109
468 02ea 2091 0000 lds r18,Parameter_ServoNickControl
469 02ee 82FF sbrs r24,2
470 02f0 00C0 rjmp .L44
471 02f2 9091 0000 lds r25,EE_Parameter+48
472 02f6 8CE3 ldi r24,lo8(60)
473 02f8 989F mul r25,r24
474 02fa B001 movw r22,r0
475 02fc 1124 clr r1
476 02fe 9091 0000 lds r25,EE_Parameter+47
477 0302 80E5 ldi r24,lo8(80)
478 0304 989F mul r25,r24
479 0306 A001 movw r20,r0
480 0308 1124 clr r1
481 030a 922F mov r25,r18
482 030c 9058 subi r25,lo8(-(-128))
483 030e 97FD sbrc r25,7
484 0310 9D5F subi r25,lo8(-(3))
485 .L45:
486 0312 9595 asr r25
487 0314 9595 asr r25
488 0316 86E0 ldi r24,lo8(6)
489 0318 9802 muls r25,r24
490 031a C001 movw r24,r0
491 031c 1124 clr r1
492 031e 2091 0000 lds r18,NickServoValue
493 0322 3091 0000 lds r19,(NickServoValue)+1
494 0326 281B sub r18,r24
495 0328 390B sbc r19,r25
496 032a 3093 0000 sts (NickServoValue)+1,r19
497 032e 2093 0000 sts NickServoValue,r18
498 0332 4217 cp r20,r18
499 0334 5307 cpc r21,r19
500 0336 04F0 brlt .L46
501 0338 5093 0000 sts (NickServoValue)+1,r21
502 033c 4093 0000 sts NickServoValue,r20
503 0340 0895 ret
504 .L46:
505 0342 2617 cp r18,r22
506 0344 3707 cpc r19,r23
507 0346 04F0 brlt .L43
508 0348 7093 0000 sts (NickServoValue)+1,r23
509 034c 6093 0000 sts NickServoValue,r22
510 0350 0895 ret
511 .L44:
512 0352 822F mov r24,r18
513 0354 9927 clr r25
514 0356 36E0 ldi r19,6
515 0358 880F 1: lsl r24
516 035a 991F rol r25
517 035c 3A95 dec r19
518 035e 01F4 brne 1b
519 0360 9093 0000 sts (NickServoValue)+1,r25
520 0364 8093 0000 sts NickServoValue,r24
521 .L43:
522 0368 0895 ret
523 /* epilogue: frame size=0 */
524 /* epilogue: noreturn */
525 /* epilogue end (size=0) */
526 /* function CalcNickServoValue size 67 (67) */
528 .global CalculateServo
530 CalculateServo:
531 /* prologue: frame size=0 */
532 036a A0E0 ldi r26,lo8(0)
533 036c B0E0 ldi r27,hi8(0)
534 036e E0E0 ldi r30,pm_lo8(1f)
535 0370 F0E0 ldi r31,pm_hi8(1f)
536 0372 0C94 0000 jmp __prologue_saves__+22
537 1:
538 /* prologue end (size=6) */
539 0376 8091 0000 lds r24,EE_Parameter+55
540 037a E82F mov r30,r24
541 037c FF27 clr r31
542 037e E050 subi r30,lo8(-(sintab))
543 0380 F040 sbci r31,hi8(-(sintab))
544 0382 9681 ldd r25,Z+6
545 0384 D080 ld r13,Z
546 0386 8091 0000 lds r24,CalculateServoSignals
547 038a A92F mov r26,r25
548 038c BB27 clr r27
549 038e A7FD sbrc r26,7
550 0390 B095 com r27
551 0392 CB2F mov r28,r27
552 0394 DB2F mov r29,r27
553 0396 8130 cpi r24,lo8(1)
554 0398 01F0 breq .+2
555 039a 00C0 rjmp .L51
556 039c 2091 0000 lds r18,IntegralNick
557 03a0 3091 0000 lds r19,(IntegralNick)+1
558 03a4 4091 0000 lds r20,(IntegralNick)+2
559 03a8 5091 0000 lds r21,(IntegralNick)+3
560 03ac BD01 movw r22,r26
561 03ae CE01 movw r24,r28
562 03b0 0E94 0000 call __mulsi3
563 03b4 97FF sbrs r25,7
564 03b6 00C0 rjmp .L52
565 03b8 6158 subi r22,lo8(-(127))
566 03ba 7F4F sbci r23,hi8(-(127))
567 03bc 8F4F sbci r24,hlo8(-(127))
568 03be 9F4F sbci r25,hhi8(-(127))
569 .L52:
570 03c0 7B01 movw r14,r22
571 03c2 8C01 movw r16,r24
572 03c4 C7E0 ldi r28,7
573 03c6 1595 1: asr r17
574 03c8 0795 ror r16
575 03ca F794 ror r15
576 03cc E794 ror r14
577 03ce CA95 dec r28
578 03d0 01F4 brne 1b
579 03d2 8D2D mov r24,r13
580 03d4 9927 clr r25
581 03d6 87FD sbrc r24,7
582 03d8 9095 com r25
583 03da A92F mov r26,r25
584 03dc B92F mov r27,r25
585 03de 2091 0000 lds r18,IntegralRoll
586 03e2 3091 0000 lds r19,(IntegralRoll)+1
587 03e6 4091 0000 lds r20,(IntegralRoll)+2
588 03ea 5091 0000 lds r21,(IntegralRoll)+3
589 03ee BC01 movw r22,r24
590 03f0 CD01 movw r24,r26
591 03f2 0E94 0000 call __mulsi3
592 03f6 97FF sbrs r25,7
593 03f8 00C0 rjmp .L53
594 03fa 6158 subi r22,lo8(-(127))
595 03fc 7F4F sbci r23,hi8(-(127))
596 03fe 8F4F sbci r24,hlo8(-(127))
597 0400 9F4F sbci r25,hhi8(-(127))
598 .L53:
599 0402 B7E0 ldi r27,7
600 0404 9595 1: asr r25
601 0406 8795 ror r24
602 0408 7795 ror r23
603 040a 6795 ror r22
604 040c BA95 dec r27
605 040e 01F4 brne 1b
606 0410 F801 movw r30,r16
607 0412 E701 movw r28,r14
608 0414 C61B sub r28,r22
609 0416 D70B sbc r29,r23
610 0418 E80B sbc r30,r24
611 041a F90B sbc r31,r25
612 041c 2091 0000 lds r18,POI_KameraNick
613 0420 3091 0000 lds r19,(POI_KameraNick)+1
614 0424 C901 movw r24,r18
615 0426 A3E0 ldi r26,3
616 0428 880F 1: lsl r24
617 042a 991F rol r25
618 042c AA95 dec r26
619 042e 01F4 brne 1b
620 0430 821B sub r24,r18
621 0432 930B sbc r25,r19
622 0434 AA27 clr r26
623 0436 97FD sbrc r25,7
624 0438 A095 com r26
625 043a BA2F mov r27,r26
626 043c C81B sub r28,r24
627 043e D90B sbc r29,r25
628 0440 EA0B sbc r30,r26
629 0442 FB0B sbc r31,r27
630 0444 8091 0000 lds r24,EE_Parameter+46
631 0448 9927 clr r25
632 044a AA27 clr r26
633 044c BB27 clr r27
634 044e BC01 movw r22,r24
635 0450 CD01 movw r24,r26
636 0452 9E01 movw r18,r28
637 0454 AF01 movw r20,r30
638 0456 0E94 0000 call __mulsi3
639 045a 97FF sbrs r25,7
640 045c 00C0 rjmp .L54
641 045e 6150 subi r22,lo8(-(511))
642 0460 7E4F sbci r23,hi8(-(511))
643 0462 8F4F sbci r24,hlo8(-(511))
644 0464 9F4F sbci r25,hhi8(-(511))
645 .L54:
646 0466 FC01 movw r30,r24
647 0468 EB01 movw r28,r22
648 046a 79E0 ldi r23,9
649 046c F595 1: asr r31
650 046e E795 ror r30
651 0470 D795 ror r29
652 0472 C795 ror r28
653 0474 7A95 dec r23
654 0476 01F4 brne 1b
655 0478 1091 0000 lds r17,EE_Parameter+109
656 047c 6091 0000 lds r22,NickServoValue
657 0480 7091 0000 lds r23,(NickServoValue)+1
658 0484 12FF sbrs r17,2
659 0486 00C0 rjmp .L55
660 0488 7093 0000 sts (ServoNickOffset)+1,r23
661 048c 6093 0000 sts ServoNickOffset,r22
662 0490 00C0 rjmp .L56
663 .L55:
664 0492 4091 0000 lds r20,ServoNickOffset
665 0496 5091 0000 lds r21,(ServoNickOffset)+1
666 049a 8091 0000 lds r24,EE_Parameter+54
667 049e 282F mov r18,r24
668 04a0 3327 clr r19
669 04a2 CB01 movw r24,r22
670 04a4 841B sub r24,r20
671 04a6 950B sbc r25,r21
672 04a8 B901 movw r22,r18
673 04aa 0E94 0000 call __divmodhi4
674 04ae 8091 0000 lds r24,ServoNickOffset
675 04b2 9091 0000 lds r25,(ServoNickOffset)+1
676 04b6 860F add r24,r22
677 04b8 971F adc r25,r23
678 04ba 9093 0000 sts (ServoNickOffset)+1,r25
679 04be 8093 0000 sts ServoNickOffset,r24
680 .L56:
681 04c2 10FF sbrs r17,0
682 04c4 00C0 rjmp .L57
683 04c6 8091 0000 lds r24,ServoNickOffset
684 04ca 9091 0000 lds r25,(ServoNickOffset)+1
685 04ce 97FD sbrc r25,7
686 04d0 0F96 adiw r24,15
687 .L58:
688 04d2 64E0 ldi r22,4
689 04d4 9595 1: asr r25
690 04d6 8795 ror r24
691 04d8 6A95 dec r22
692 04da 01F4 brne 1b
693 04dc AA27 clr r26
694 04de 97FD sbrc r25,7
695 04e0 A095 com r26
696 04e2 BA2F mov r27,r26
697 04e4 C80F add r28,r24
698 04e6 D91F adc r29,r25
699 04e8 EA1F adc r30,r26
700 04ea FB1F adc r31,r27
701 04ec 00C0 rjmp .L59
702 .L57:
703 04ee 8091 0000 lds r24,ServoNickOffset
704 04f2 9091 0000 lds r25,(ServoNickOffset)+1
705 04f6 97FD sbrc r25,7
706 04f8 0F96 adiw r24,15
707 .L60:
708 04fa 54E0 ldi r21,4
709 04fc 9595 1: asr r25
710 04fe 8795 ror r24
711 0500 5A95 dec r21
712 0502 01F4 brne 1b
713 0504 AA27 clr r26
714 0506 97FD sbrc r25,7
715 0508 A095 com r26
716 050a BA2F mov r27,r26
717 050c 8C1B sub r24,r28
718 050e 9D0B sbc r25,r29
719 0510 AE0B sbc r26,r30
720 0512 BF0B sbc r27,r31
721 0514 FD01 movw r30,r26
722 0516 EC01 movw r28,r24
723 .L59:
724 0518 2091 0000 lds r18,EE_Parameter+106
725 051c 2223 tst r18
726 051e 01F0 breq .L61
727 0520 3327 clr r19
728 0522 8091 0000 lds r24,ServoNickValue
729 0526 9091 0000 lds r25,(ServoNickValue)+1
730 052a 829F mul r24,r18
731 052c A001 movw r20,r0
732 052e 839F mul r24,r19
733 0530 500D add r21,r0
734 0532 929F mul r25,r18
735 0534 500D add r21,r0
736 0536 1124 clr r1
737 0538 CA01 movw r24,r20
738 053a AA27 clr r26
739 053c 97FD sbrc r25,7
740 053e A095 com r26
741 0540 BA2F mov r27,r26
742 0542 8C0F add r24,r28
743 0544 9D1F adc r25,r29
744 0546 AE1F adc r26,r30
745 0548 BF1F adc r27,r31
746 054a 2F5F subi r18,lo8(-(1))
747 054c 3F4F sbci r19,hi8(-(1))
748 054e 4427 clr r20
749 0550 37FD sbrc r19,7
750 0552 4095 com r20
751 0554 542F mov r21,r20
752 0556 BC01 movw r22,r24
753 0558 CD01 movw r24,r26
754 055a 0E94 0000 call __divmodsi4
755 055e 3093 0000 sts (ServoNickValue)+1,r19
756 0562 2093 0000 sts ServoNickValue,r18
757 0566 00C0 rjmp .L62
758 .L61:
759 0568 D093 0000 sts (ServoNickValue)+1,r29
760 056c C093 0000 sts ServoNickValue,r28
761 .L62:
762 0570 8091 0000 lds r24,EE_Parameter+47
763 0574 282F mov r18,r24
764 0576 3327 clr r19
765 0578 220F lsl r18
766 057a 331F rol r19
767 057c 220F lsl r18
768 057e 331F rol r19
769 0580 8091 0000 lds r24,ServoNickValue
770 0584 9091 0000 lds r25,(ServoNickValue)+1
771 0588 8217 cp r24,r18
772 058a 9307 cpc r25,r19
773 058c 04F0 brlt .L81
774 058e 8091 0000 lds r24,EE_Parameter+48
775 0592 282F mov r18,r24
776 0594 3327 clr r19
777 0596 220F lsl r18
778 0598 331F rol r19
779 059a 220F lsl r18
780 059c 331F rol r19
781 059e 8091 0000 lds r24,ServoNickValue
782 05a2 9091 0000 lds r25,(ServoNickValue)+1
783 05a6 2817 cp r18,r24
784 05a8 3907 cpc r19,r25
785 05aa 04F4 brge .L64
786 .L81:
787 05ac 3093 0000 sts (ServoNickValue)+1,r19
788 05b0 2093 0000 sts ServoNickValue,r18
789 .L64:
790 05b4 8091 0000 lds r24,PlatinenVersion
791 05b8 8431 cpi r24,lo8(20)
792 05ba 00F4 brsh .+2
793 05bc 00C0 rjmp .L79
794 05be 8091 0000 lds r24,CalculateServoSignals
795 05c2 8F5F subi r24,lo8(-(1))
796 05c4 8093 0000 sts CalculateServoSignals,r24
797 05c8 00C0 rjmp .L50
798 .L51:
799 05ca 2091 0000 lds r18,IntegralRoll
800 05ce 3091 0000 lds r19,(IntegralRoll)+1
801 05d2 4091 0000 lds r20,(IntegralRoll)+2
802 05d6 5091 0000 lds r21,(IntegralRoll)+3
803 05da BD01 movw r22,r26
804 05dc CE01 movw r24,r28
805 05de 0E94 0000 call __mulsi3
806 05e2 97FF sbrs r25,7
807 05e4 00C0 rjmp .L69
808 05e6 6158 subi r22,lo8(-(127))
809 05e8 7F4F sbci r23,hi8(-(127))
810 05ea 8F4F sbci r24,hlo8(-(127))
811 05ec 9F4F sbci r25,hhi8(-(127))
812 .L69:
813 05ee 7B01 movw r14,r22
814 05f0 8C01 movw r16,r24
815 05f2 87E0 ldi r24,7
816 05f4 1595 1: asr r17
817 05f6 0795 ror r16
818 05f8 F794 ror r15
819 05fa E794 ror r14
820 05fc 8A95 dec r24
821 05fe 01F4 brne 1b
822 0600 8D2D mov r24,r13
823 0602 9927 clr r25
824 0604 87FD sbrc r24,7
825 0606 9095 com r25
826 0608 A92F mov r26,r25
827 060a B92F mov r27,r25
828 060c 2091 0000 lds r18,IntegralNick
829 0610 3091 0000 lds r19,(IntegralNick)+1
830 0614 4091 0000 lds r20,(IntegralNick)+2
831 0618 5091 0000 lds r21,(IntegralNick)+3
832 061c BC01 movw r22,r24
833 061e CD01 movw r24,r26
834 0620 0E94 0000 call __mulsi3
835 0624 9B01 movw r18,r22
836 0626 AC01 movw r20,r24
837 0628 97FF sbrs r25,7
838 062a 00C0 rjmp .L70
839 062c 2158 subi r18,lo8(-(127))
840 062e 3F4F sbci r19,hi8(-(127))
841 0630 4F4F sbci r20,hlo8(-(127))
842 0632 5F4F sbci r21,hhi8(-(127))
843 .L70:
844 0634 C7E0 ldi r28,7
845 0636 5595 1: asr r21
846 0638 4795 ror r20
847 063a 3795 ror r19
848 063c 2795 ror r18
849 063e CA95 dec r28
850 0640 01F4 brne 1b
851 0642 2E0D add r18,r14
852 0644 3F1D adc r19,r15
853 0646 401F adc r20,r16
854 0648 511F adc r21,r17
855 064a 8091 0000 lds r24,EE_Parameter+50
856 064e 9927 clr r25
857 0650 AA27 clr r26
858 0652 BB27 clr r27
859 0654 BC01 movw r22,r24
860 0656 CD01 movw r24,r26
861 0658 0E94 0000 call __mulsi3
862 065c 97FF sbrs r25,7
863 065e 00C0 rjmp .L71
864 0660 6150 subi r22,lo8(-(511))
865 0662 7E4F sbci r23,hi8(-(511))
866 0664 8F4F sbci r24,hlo8(-(511))
867 0666 9F4F sbci r25,hhi8(-(511))
868 .L71:
869 0668 FC01 movw r30,r24
870 066a EB01 movw r28,r22
871 066c B9E0 ldi r27,9
872 066e F595 1: asr r31
873 0670 E795 ror r30
874 0672 D795 ror r29
875 0674 C795 ror r28
876 0676 BA95 dec r27
877 0678 01F4 brne 1b
878 067a 8091 0000 lds r24,Parameter_ServoRollControl
879 067e 9927 clr r25
880 0680 A6E0 ldi r26,6
881 0682 880F 1: lsl r24
882 0684 991F rol r25
883 0686 AA95 dec r26
884 0688 01F4 brne 1b
885 068a 4091 0000 lds r20,ServoRollOffset
886 068e 5091 0000 lds r21,(ServoRollOffset)+1
887 0692 2091 0000 lds r18,EE_Parameter+54
888 0696 3327 clr r19
889 0698 841B sub r24,r20
890 069a 950B sbc r25,r21
891 069c B901 movw r22,r18
892 069e 0E94 0000 call __divmodhi4
893 06a2 8091 0000 lds r24,ServoRollOffset
894 06a6 9091 0000 lds r25,(ServoRollOffset)+1
895 06aa 860F add r24,r22
896 06ac 971F adc r25,r23
897 06ae 9093 0000 sts (ServoRollOffset)+1,r25
898 06b2 8093 0000 sts ServoRollOffset,r24
899 06b6 8091 0000 lds r24,EE_Parameter+109
900 06ba 81FF sbrs r24,1
901 06bc 00C0 rjmp .L72
902 06be 8091 0000 lds r24,ServoRollOffset
903 06c2 9091 0000 lds r25,(ServoRollOffset)+1
904 06c6 97FD sbrc r25,7
905 06c8 0F96 adiw r24,15
906 .L73:
907 06ca 74E0 ldi r23,4
908 06cc 9595 1: asr r25
909 06ce 8795 ror r24
910 06d0 7A95 dec r23
911 06d2 01F4 brne 1b
912 06d4 AA27 clr r26
913 06d6 97FD sbrc r25,7
914 06d8 A095 com r26
915 06da BA2F mov r27,r26
916 06dc C80F add r28,r24
917 06de D91F adc r29,r25
918 06e0 EA1F adc r30,r26
919 06e2 FB1F adc r31,r27
920 06e4 00C0 rjmp .L74
921 .L72:
922 06e6 8091 0000 lds r24,ServoRollOffset
923 06ea 9091 0000 lds r25,(ServoRollOffset)+1
924 06ee 97FD sbrc r25,7
925 06f0 0F96 adiw r24,15
926 .L75:
927 06f2 64E0 ldi r22,4
928 06f4 9595 1: asr r25
929 06f6 8795 ror r24
930 06f8 6A95 dec r22
931 06fa 01F4 brne 1b
932 06fc AA27 clr r26
933 06fe 97FD sbrc r25,7
934 0700 A095 com r26
935 0702 BA2F mov r27,r26
936 0704 8C1B sub r24,r28
937 0706 9D0B sbc r25,r29
938 0708 AE0B sbc r26,r30
939 070a BF0B sbc r27,r31
940 070c FD01 movw r30,r26
941 070e EC01 movw r28,r24
942 .L74:
943 0710 2091 0000 lds r18,EE_Parameter+107
944 0714 2223 tst r18
945 0716 01F0 breq .L76
946 0718 3327 clr r19
947 071a 8091 0000 lds r24,ServoRollValue
948 071e 9091 0000 lds r25,(ServoRollValue)+1
949 0722 829F mul r24,r18
950 0724 A001 movw r20,r0
951 0726 839F mul r24,r19
952 0728 500D add r21,r0
953 072a 929F mul r25,r18
954 072c 500D add r21,r0
955 072e 1124 clr r1
956 0730 CA01 movw r24,r20
957 0732 AA27 clr r26
958 0734 97FD sbrc r25,7
959 0736 A095 com r26
960 0738 BA2F mov r27,r26
961 073a 8C0F add r24,r28
962 073c 9D1F adc r25,r29
963 073e AE1F adc r26,r30
964 0740 BF1F adc r27,r31
965 0742 2F5F subi r18,lo8(-(1))
966 0744 3F4F sbci r19,hi8(-(1))
967 0746 4427 clr r20
968 0748 37FD sbrc r19,7
969 074a 4095 com r20
970 074c 542F mov r21,r20
971 074e BC01 movw r22,r24
972 0750 CD01 movw r24,r26
973 0752 0E94 0000 call __divmodsi4
974 0756 3093 0000 sts (ServoRollValue)+1,r19
975 075a 2093 0000 sts ServoRollValue,r18
976 075e 00C0 rjmp .L77
977 .L76:
978 0760 D093 0000 sts (ServoRollValue)+1,r29
979 0764 C093 0000 sts ServoRollValue,r28
980 .L77:
981 0768 8091 0000 lds r24,EE_Parameter+51
982 076c 282F mov r18,r24
983 076e 3327 clr r19
984 0770 220F lsl r18
985 0772 331F rol r19
986 0774 220F lsl r18
987 0776 331F rol r19
988 0778 8091 0000 lds r24,ServoRollValue
989 077c 9091 0000 lds r25,(ServoRollValue)+1
990 0780 8217 cp r24,r18
991 0782 9307 cpc r25,r19
992 0784 04F0 brlt .L82
993 0786 8091 0000 lds r24,EE_Parameter+52
994 078a 282F mov r18,r24
995 078c 3327 clr r19
996 078e 220F lsl r18
997 0790 331F rol r19
998 0792 220F lsl r18
999 0794 331F rol r19
1000 0796 8091 0000 lds r24,ServoRollValue
1001 079a 9091 0000 lds r25,(ServoRollValue)+1
1002 079e 2817 cp r18,r24
1003 07a0 3907 cpc r19,r25
1004 07a2 04F4 brge .L79
1005 .L82:
1006 07a4 3093 0000 sts (ServoRollValue)+1,r19
1007 07a8 2093 0000 sts ServoRollValue,r18
1008 .L79:
1009 07ac 1092 0000 sts CalculateServoSignals,__zero_reg__
1010 .L50:
1011 /* epilogue: frame size=0 */
1012 07b0 E7E0 ldi r30,7
1013 07b2 CDB7 in r28,__SP_L__
1014 07b4 DEB7 in r29,__SP_H__
1015 07b6 0C94 0000 jmp __epilogue_restores__+22
1016 /* epilogue end (size=5) */
1017 /* function CalculateServo size 556 (545) */
1019 .lcomm PulseOutput.0,1
1020 .lcomm ServoFrameTime.1,2
1021 .lcomm ServoIndex.2,1
1022 .global __vector_9
1024 __vector_9:
1025 /* prologue: frame size=0 */
1026 07ba 1F92 push __zero_reg__
1027 07bc 0F92 push __tmp_reg__
1028 07be 0FB6 in __tmp_reg__,__SREG__
1029 07c0 0F92 push __tmp_reg__
1030 07c2 1124 clr __zero_reg__
1031 07c4 2F93 push r18
1032 07c6 3F93 push r19
1033 07c8 4F93 push r20
1034 07ca 5F93 push r21
1035 07cc 8F93 push r24
1036 07ce 9F93 push r25
1037 07d0 EF93 push r30
1038 07d2 FF93 push r31
1039 /* prologue end (size=13) */
1040 07d4 8091 0000 lds r24,PlatinenVersion
1041 07d8 9091 0000 lds r25,PulseOutput.0
1042 07dc 8431 cpi r24,lo8(20)
1043 07de 00F0 brlo .+2
1044 07e0 00C0 rjmp .L84
1045 07e2 9923 tst r25
1046 07e4 01F0 breq .+2
1047 07e6 00C0 rjmp .L91
1048 07e8 8091 B000 lds r24,176
1049 07ec 86FF sbrs r24,6
1050 07ee 00C0 rjmp .L86
1051 07f0 8091 B000 lds r24,176
1052 07f4 8F7B andi r24,lo8(-65)
1053 07f6 8093 B000 sts 176,r24
1054 07fa 8091 0000 lds r24,ServoNickValue
1055 07fe 9091 0000 lds r25,(ServoNickValue)+1
1056 0802 8755 subi r24,lo8(-(425))
1057 0804 9E4F sbci r25,hi8(-(425))
1058 0806 9093 0000 sts (RemainingPulse)+1,r25
1059 080a 8093 0000 sts RemainingPulse,r24
1060 080e 25E0 ldi r18,hi8(1501)
1061 0810 8D3D cpi r24,lo8(1501)
1062 0812 9207 cpc r25,r18
1063 0814 00F0 brlo .L87
1064 0816 8CED ldi r24,lo8(1500)
1065 0818 95E0 ldi r25,hi8(1500)
1066 081a 00C0 rjmp .L121
1067 .L87:
1068 081c 8757 subi r24,lo8(375)
1069 081e 9140 sbci r25,hi8(375)
1070 0820 00F4 brsh .L88
1071 0822 87E7 ldi r24,lo8(375)
1072 0824 91E0 ldi r25,hi8(375)
1073 .L121:
1074 0826 9093 0000 sts (RemainingPulse)+1,r25
1075 082a 8093 0000 sts RemainingPulse,r24
1076 .L88:
1077 082e 8091 0000 lds r24,RemainingPulse
1078 0832 9091 0000 lds r25,(RemainingPulse)+1
1079 0836 00C0 rjmp .L126
1080 .L86:
1081 0838 8091 B000 lds r24,176
1082 083c 8064 ori r24,lo8(64)
1083 083e 8093 B000 sts 176,r24
1084 0842 8091 0000 lds r24,EE_Parameter+53
1085 0846 282F mov r18,r24
1086 0848 3327 clr r19
1087 084a 8DED ldi r24,lo8(1757)
1088 084c 96E0 ldi r25,hi8(1757)
1089 084e 289F mul r18,r24
1090 0850 A001 movw r20,r0
1091 0852 299F mul r18,r25
1092 0854 500D add r21,r0
1093 0856 389F mul r19,r24
1094 0858 500D add r21,r0
1095 085a 1124 clr r1
1096 085c CA01 movw r24,r20
1097 085e 2091 0000 lds r18,ServoFrameTime.1
1098 0862 3091 0000 lds r19,(ServoFrameTime.1)+1
1099 0866 821B sub r24,r18
1100 0868 930B sbc r25,r19
1101 086a 9093 0000 sts (RemainingPulse)+1,r25
1102 086e 8093 0000 sts RemainingPulse,r24
1103 0872 81E0 ldi r24,lo8(1)
1104 0874 8093 0000 sts CalculateServoSignals,r24
1105 0878 00C0 rjmp .L109
1106 .L84:
1107 087a 9923 tst r25
1108 087c 01F0 breq .+2
1109 087e 00C0 rjmp .L91
1110 0880 8091 B000 lds r24,176
1111 0884 86FF sbrs r24,6
1112 0886 00C0 rjmp .L93
1113 0888 8091 B000 lds r24,176
1114 088c 8F7B andi r24,lo8(-65)
1115 088e 8093 B000 sts 176,r24
1116 0892 E091 0000 lds r30,ServoIndex.2
1117 0896 2091 0000 lds r18,EE_Parameter+53
1118 089a EE23 tst r30
1119 089c 01F4 brne .L94
1120 089e 3327 clr r19
1121 08a0 8DED ldi r24,lo8(1757)
1122 08a2 96E0 ldi r25,hi8(1757)
1123 08a4 289F mul r18,r24
1124 08a6 A001 movw r20,r0
1125 08a8 299F mul r18,r25
1126 08aa 500D add r21,r0
1127 08ac 389F mul r19,r24
1128 08ae 500D add r21,r0
1129 08b0 1124 clr r1
1130 08b2 CA01 movw r24,r20
1131 08b4 2091 0000 lds r18,ServoFrameTime.1
1132 08b8 3091 0000 lds r19,(ServoFrameTime.1)+1
1133 08bc 821B sub r24,r18
1134 08be 930B sbc r25,r19
1135 08c0 9093 0000 sts (RemainingPulse)+1,r25
1136 08c4 8093 0000 sts RemainingPulse,r24
1137 08c8 1092 0000 sts (ServoFrameTime.1)+1,__zero_reg__
1138 08cc 1092 0000 sts ServoFrameTime.1,__zero_reg__
1139 08d0 469A sbi 40-0x20,6
1140 08d2 00C0 rjmp .L109
1141 .L94:
1142 08d4 2E17 cp r18,r30
1143 08d6 00F4 brsh .L96
1144 08d8 8AE0 ldi r24,lo8(10)
1145 08da 90E0 ldi r25,hi8(10)
1146 08dc 9093 0000 sts (RemainingPulse)+1,r25
1147 08e0 8093 0000 sts RemainingPulse,r24
1148 08e4 00C0 rjmp .L109
1149 .L96:
1150 08e6 89EA ldi r24,lo8(937)
1151 08e8 93E0 ldi r25,hi8(937)
1152 08ea 9093 0000 sts (RemainingPulse)+1,r25
1153 08ee 8093 0000 sts RemainingPulse,r24
1154 08f2 8E2F mov r24,r30
1155 08f4 9927 clr r25
1156 08f6 8330 cpi r24,3
1157 08f8 9105 cpc r25,__zero_reg__
1158 08fa 01F0 breq .L101
1159 08fc 8430 cpi r24,4
1160 08fe 9105 cpc r25,__zero_reg__
1161 0900 04F4 brge .L105
1162 0902 8130 cpi r24,1
1163 0904 9105 cpc r25,__zero_reg__
1164 0906 01F0 breq .L99
1165 0908 0297 sbiw r24,2
1166 090a 01F0 breq .L100
1167 090c 00C0 rjmp .L104
1168 .L105:
1169 090e 8430 cpi r24,4
1170 0910 9105 cpc r25,__zero_reg__
1171 0912 01F0 breq .L102
1172 0914 0597 sbiw r24,5
1173 0916 01F0 breq .L103
1174 0918 00C0 rjmp .L104
1175 .L99:
1176 091a 8091 0000 lds r24,ServoNickValue
1177 091e 9091 0000 lds r25,(ServoNickValue)+1
1178 0922 00C0 rjmp .L125
1179 .L100:
1180 0924 8091 0000 lds r24,ServoRollValue
1181 0928 9091 0000 lds r25,(ServoRollValue)+1
1182 .L125:
1183 092c 8755 subi r24,lo8(-(425))
1184 092e 9E4F sbci r25,hi8(-(425))
1185 0930 00C0 rjmp .L122
1186 .L101:
1187 0932 8091 0000 lds r24,Parameter_Servo3
1188 0936 00C0 rjmp .L127
1189 .L102:
1190 0938 8091 0000 lds r24,Parameter_Servo4
1191 093c 00C0 rjmp .L127
1192 .L103:
1193 093e 8091 0000 lds r24,Parameter_Servo5
1194 .L127:
1195 0942 9927 clr r25
1196 0944 880F lsl r24
1197 0946 991F rol r25
1198 0948 880F lsl r24
1199 094a 991F rol r25
1200 094c 00C0 rjmp .L125
1201 .L104:
1202 094e FF27 clr r31
1203 0950 EE0F add r30,r30
1204 0952 FF1F adc r31,r31
1205 0954 E050 subi r30,lo8(-(PPM_in))
1206 0956 F040 sbci r31,hi8(-(PPM_in))
1207 0958 2081 ld r18,Z
1208 095a 3181 ldd r19,Z+1
1209 095c 220F add r18,r18
1210 095e 331F adc r19,r19
1211 0960 8091 0000 lds r24,RemainingPulse
1212 0964 9091 0000 lds r25,(RemainingPulse)+1
1213 0968 820F add r24,r18
1214 096a 931F adc r25,r19
1215 .L122:
1216 096c 9093 0000 sts (RemainingPulse)+1,r25
1217 0970 8093 0000 sts RemainingPulse,r24
1218 0974 8091 0000 lds r24,RemainingPulse
1219 0978 9091 0000 lds r25,(RemainingPulse)+1
1220 097c 55E0 ldi r21,hi8(1501)
1221 097e 8D3D cpi r24,lo8(1501)
1222 0980 9507 cpc r25,r21
1223 0982 00F0 brlo .L106
1224 0984 8CED ldi r24,lo8(1500)
1225 0986 95E0 ldi r25,hi8(1500)
1226 0988 00C0 rjmp .L123
1227 .L106:
1228 098a 8757 subi r24,lo8(375)
1229 098c 9140 sbci r25,hi8(375)
1230 098e 00F4 brsh .L107
1231 0990 87E7 ldi r24,lo8(375)
1232 0992 91E0 ldi r25,hi8(375)
1233 .L123:
1234 0994 9093 0000 sts (RemainingPulse)+1,r25
1235 0998 8093 0000 sts RemainingPulse,r24
1236 .L107:
1237 099c 2091 0000 lds r18,RemainingPulse
1238 09a0 3091 0000 lds r19,(RemainingPulse)+1
1239 09a4 2C5B subi r18,lo8(-(-188))
1240 09a6 3040 sbci r19,hi8(-(-188))
1241 09a8 3093 0000 sts (RemainingPulse)+1,r19
1242 09ac 2093 0000 sts RemainingPulse,r18
1243 09b0 8091 0000 lds r24,ServoFrameTime.1
1244 09b4 9091 0000 lds r25,(ServoFrameTime.1)+1
1245 09b8 820F add r24,r18
1246 09ba 931F adc r25,r19
1247 .L126:
1248 09bc 9093 0000 sts (ServoFrameTime.1)+1,r25
1249 09c0 8093 0000 sts ServoFrameTime.1,r24
1250 09c4 00C0 rjmp .L109
1251 .L93:
1252 09c6 8091 B000 lds r24,176
1253 09ca 8064 ori r24,lo8(64)
1254 09cc 8093 B000 sts 176,r24
1255 09d0 8CEB ldi r24,lo8(188)
1256 09d2 90E0 ldi r25,hi8(188)
1257 09d4 9093 0000 sts (RemainingPulse)+1,r25
1258 09d8 8093 0000 sts RemainingPulse,r24
1259 09dc 8091 0000 lds r24,ServoFrameTime.1
1260 09e0 9091 0000 lds r25,(ServoFrameTime.1)+1
1261 09e4 8454 subi r24,lo8(-(188))
1262 09e6 9F4F sbci r25,hi8(-(188))
1263 09e8 9093 0000 sts (ServoFrameTime.1)+1,r25
1264 09ec 8093 0000 sts ServoFrameTime.1,r24
1265 09f0 8091 0000 lds r24,ServoActive
1266 09f4 8823 tst r24
1267 09f6 01F0 breq .L112
1268 09f8 8091 0000 lds r24,SenderOkay
1269 09fc 8823 tst r24
1270 09fe 01F4 brne .L111
1271 .L112:
1272 0a00 8091 0000 lds r24,ServoActive
1273 0a04 8230 cpi r24,lo8(2)
1274 0a06 01F4 brne .L110
1275 .L111:
1276 0a08 4698 cbi 40-0x20,6
1277 0a0a 00C0 rjmp .L113
1278 .L110:
1279 0a0c 469A sbi 40-0x20,6
1280 .L113:
1281 0a0e 8091 0000 lds r24,ServoIndex.2
1282 0a12 8F5F subi r24,lo8(-(1))
1283 0a14 8093 0000 sts ServoIndex.2,r24
1284 0a18 282F mov r18,r24
1285 0a1a 3327 clr r19
1286 0a1c 8091 0000 lds r24,EE_Parameter+53
1287 0a20 9927 clr r25
1288 0a22 0196 adiw r24,1
1289 0a24 8217 cp r24,r18
1290 0a26 9307 cpc r25,r19
1291 0a28 04F4 brge .L109
1292 0a2a 81E0 ldi r24,lo8(1)
1293 0a2c 8093 0000 sts CalculateServoSignals,r24
1294 0a30 1092 0000 sts ServoIndex.2,__zero_reg__
1295 .L109:
1296 0a34 81E0 ldi r24,lo8(1)
1297 0a36 8093 0000 sts PulseOutput.0,r24
1298 .L91:
1299 0a3a 2091 0000 lds r18,RemainingPulse
1300 0a3e 3091 0000 lds r19,(RemainingPulse)+1
1301 0a42 41E0 ldi r20,hi8(383)
1302 0a44 2F37 cpi r18,lo8(383)
1303 0a46 3407 cpc r19,r20
1304 0a48 00F0 brlo .L115
1305 0a4a 8FEF ldi r24,lo8(-1)
1306 0a4c 8093 B300 sts 179,r24
1307 0a50 2F5F subi r18,lo8(-(-255))
1308 0a52 3040 sbci r19,hi8(-(-255))
1309 0a54 00C0 rjmp .L124
1310 .L115:
1311 0a56 2F3F cpi r18,255
1312 0a58 3105 cpc r19,__zero_reg__
1313 0a5a 01F0 breq .L117
1314 0a5c 00F0 brlo .L117
1315 0a5e A901 movw r20,r18
1316 0a60 4F5F subi r20,lo8(-(-255))
1317 0a62 5040 sbci r21,hi8(-(-255))
1318 0a64 4F37 cpi r20,127
1319 0a66 5105 cpc r21,__zero_reg__
1320 0a68 00F4 brsh .L118
1321 0a6a 80E8 ldi r24,lo8(-128)
1322 0a6c 8093 B300 sts 179,r24
1323 0a70 2058 subi r18,lo8(-(-128))
1324 0a72 3040 sbci r19,hi8(-(-128))
1325 .L124:
1326 0a74 3093 0000 sts (RemainingPulse)+1,r19
1327 0a78 2093 0000 sts RemainingPulse,r18
1328 0a7c 00C0 rjmp .L83
1329 .L118:
1330 0a7e 8FEF ldi r24,lo8(-1)
1331 0a80 8093 B300 sts 179,r24
1332 0a84 5093 0000 sts (RemainingPulse)+1,r21
1333 0a88 4093 0000 sts RemainingPulse,r20
1334 0a8c 00C0 rjmp .L83
1335 .L117:
1336 0a8e 8091 0000 lds r24,RemainingPulse
1337 0a92 8093 B300 sts 179,r24
1338 0a96 1092 0000 sts (RemainingPulse)+1,__zero_reg__
1339 0a9a 1092 0000 sts RemainingPulse,__zero_reg__
1340 0a9e 1092 0000 sts PulseOutput.0,__zero_reg__
1341 .L83:
1342 /* epilogue: frame size=0 */
1343 0aa2 FF91 pop r31
1344 0aa4 EF91 pop r30
1345 0aa6 9F91 pop r25
1346 0aa8 8F91 pop r24
1347 0aaa 5F91 pop r21
1348 0aac 4F91 pop r20
1349 0aae 3F91 pop r19
1350 0ab0 2F91 pop r18
1351 0ab2 0F90 pop __tmp_reg__
1352 0ab4 0FBE out __SREG__,__tmp_reg__
1353 0ab6 0F90 pop __tmp_reg__
1354 0ab8 1F90 pop __zero_reg__
1355 0aba 1895 reti
1356 /* epilogue end (size=13) */
1357 /* function __vector_9 size 389 (363) */
1359 .comm tim_main,2,1
1360 /* File "timer0.c": code 1388 = 0x056c (1305), prologues 39, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 timer0.c
C:\Temp/ccpPrtda.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccpPrtda.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccpPrtda.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccpPrtda.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccpPrtda.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccpPrtda.s:15 .bss:00000000 ServoRollValue
C:\Temp/ccpPrtda.s:21 .bss:00000002 ServoNickValue
C:\Temp/ccpPrtda.s:27 .data:00000000 NickServoValue
C:\Temp/ccpPrtda.s:32 .data:00000002 BeepMuster
C:\Temp/ccpPrtda.s:37 .data:00000004 ServoRollOffset
C:\Temp/ccpPrtda.s:42 .data:00000006 ServoNickOffset
C:\Temp/ccpPrtda.s:49 .bss:00000004 RemainingPulse
C:\Temp/ccpPrtda.s:55 .data:00000008 CalculateServoSignals
C:\Temp/ccpPrtda.s:62 .bss:00000006 ServoActive
C:\Temp/ccpPrtda.s:68 .bss:00000007 SendSPI
C:\Temp/ccpPrtda.s:74 .bss:00000008 beeptime
C:\Temp/ccpPrtda.s:80 .bss:0000000a cntKompass
C:\Temp/ccpPrtda.s:86 .bss:0000000c UpdateMotor
C:\Temp/ccpPrtda.s:92 .bss:0000000d CountMilliseconds
C:\Temp/ccpPrtda.s:97 .data:00000009 cnt_1ms.3
.bss:0000000f cnt.4
C:\Temp/ccpPrtda.s:99 .bss:00000010 compass_active.5
C:\Temp/ccpPrtda.s:104 .text:00000000 __vector_18
C:\Temp/ccpPrtda.s:309 .text:000001e6 SetDelay
C:\Temp/ccpPrtda.s:325 .text:000001f8 CheckDelay
C:\Temp/ccpPrtda.s:344 .text:00000210 Delay_ms
C:\Temp/ccpPrtda.s:365 .text:0000022a Delay_ms_Mess
C:\Temp/ccpPrtda.s:395 .text:0000025a TIMER2_Init
C:\Temp/ccpPrtda.s:437 .text:000002b8 Timer_Init
*COM*:00000002 tim_main
C:\Temp/ccpPrtda.s:464 .text:000002e6 CalcNickServoValue
C:\Temp/ccpPrtda.s:530 .text:0000036a CalculateServo
C:\Temp/ccpPrtda.s:100 .bss:00000011 PulseOutput.0
C:\Temp/ccpPrtda.s:1019 .bss:00000012 ServoFrameTime.1
C:\Temp/ccpPrtda.s:1020 .bss:00000014 ServoIndex.2
C:\Temp/ccpPrtda.s:1024 .text:000007ba __vector_9
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SpektrumTimer
PlatinenVersion
NaviDataOkay
Parameter_GlobalConfig
__udivmodhi4
KompassValue
AdReady
EE_Parameter
Parameter_ServoNickControl
__prologue_saves__
sintab
IntegralNick
__mulsi3
IntegralRoll
POI_KameraNick
__divmodhi4
__divmodsi4
Parameter_ServoRollControl
__epilogue_restores__
Parameter_Servo3
Parameter_Servo4
Parameter_Servo5
PPM_in
SenderOkay
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/twimaster.c
0,0 → 1,469
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/twi.h>
#include "eeprom.h"
#include "twimaster.h"
#include "fc.h"
#include "analog.h"
#include "uart.h"
#include "timer0.h"
 
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX;
volatile uint8_t dac_channel = 0;
volatile uint8_t motor_write = 0;
volatile uint8_t motor_read = 0;
volatile uint8_t I2C_TransferActive = 0;
 
volatile uint16_t I2CTimeout = 100;
 
uint8_t MissingMotor = 0;
 
volatile uint8_t BLFlags = 0;
 
MotorData_t Motor[MAX_MOTORS];
 
// bit mask for witch BL the configuration should be sent
volatile uint16_t BLConfig_WriteMask = 0;
// bit mask for witch BL the configuration should be read
volatile uint16_t BLConfig_ReadMask = 0;
// buffer for BL Configuration
BLConfig_t BLConfig;
 
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);}
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);}
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);}
 
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define TWI_BASE_ADDRESS 0x52
 
/**************************************************/
/* Initialize I2C (TWI) */
/**************************************************/
 
void I2C_Init(char clear)
{
uint8_t i;
uint8_t sreg = SREG;
cli();
 
// SDA is INPUT
DDRC &= ~(1<<DDC1);
// SCL is output
DDRC |= (1<<DDC0);
// pull up SDA
PORTC |= (1<<PORTC0)|(1<<PORTC1);
 
// TWI Status Register
// prescaler 1 (TWPS1 = 0, TWPS0 = 0)
TWSR &= ~((1<<TWPS1)|(1<<TWPS0));
 
// set TWI Bit Rate Register
TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
 
twi_state = TWI_STATE_MOTOR_TX;
motor_write = 0;
motor_read = 0;
 
if(clear) for(i=0; i < MAX_MOTORS; i++)
{
Motor[i].Version = 0;
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
Motor[i].State = 0;
Motor[i].ReadMode = BL_READMODE_STATUS;
Motor[i].Current = 0;
Motor[i].MaxPWM = 0;
Motor[i].Temperature = 0;
}
sei();
SREG = sreg;
}
 
void I2C_Reset(void)
{
// stop i2c bus
I2C_Stop(TWI_STATE_MOTOR_TX);
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset
TWAMR = 0;
TWAR = 0;
TWDR = 0;
TWSR = 0;
TWBR = 0;
I2C_TransferActive = 0;
I2C_Init(0);
I2C_WriteByte(0);
BLFlags |= BLFLAG_READ_VERSION;
}
 
/****************************************/
/* I2C ISR */
/****************************************/
ISR (TWI_vect)
{
static uint8_t missing_motor = 0, motor_read_temperature = 0;
static uint8_t *pBuff = 0;
static uint8_t BuffLen = 0;
 
switch (twi_state++)
{
// Master Transmit
case 0: // TWI_STATE_MOTOR_TX
I2C_TransferActive = 1;
// skip motor if not used in mixer
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++;
if(motor_write >= MAX_MOTORS) // writing finished, read now
{
BLConfig_WriteMask = 0; // reset configuration bitmask
motor_write = 0; // reset motor write counter for next cycle
twi_state = TWI_STATE_MOTOR_RX;
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode
}
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode
break;
case 1: // Send Data to Slave
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint
// if old version has been detected
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK))
{
twi_state = 4; //jump over sending more data
}
// the new version has been detected
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) )
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time)
twi_state = 4; //jump over sending more data
}
break;
case 2: // lower bits of setpoint (higher resolution)
if ((0x0001<<motor_write) & BLConfig_ReadMask)
{
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request
}
else
{
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request
}
// send read mode and the lower bits of setpoint
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07));
// configuration tranmission request?
if((0x0001<<motor_write) & BLConfig_WriteMask)
{ // redirect tx pointer to configuration data
pBuff = (uint8_t*)&BLConfig; // select config for motor
BuffLen = sizeof(BLConfig_t);
}
else
{ // jump to end of transmission for that motor
twi_state = 4;
}
break;
case 3: // send configuration
I2C_WriteByte(*pBuff);
pBuff++;
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left
break;
case 4: // repeat case 0-4 for all motors
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received
{
if(!missing_motor) missing_motor = motor_write + 1;
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow
}
I2C_Stop(TWI_STATE_MOTOR_TX);
I2CTimeout = 10;
motor_write++; // next motor
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive
break;
// Master Receive Data
case 5: // TWI_STATE_MOTOR_RX
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received
{ // no response from the addressed slave received
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit
if(++motor_read >= MAX_MOTORS)
{ // all motors read
motor_read = 0; // restart from beginning
BLConfig_ReadMask = 0; // reset read configuration bitmask
if(++motor_read_temperature >= MAX_MOTORS)
{
motor_read_temperature = 0;
BLFlags &= ~BLFLAG_READ_VERSION;
}
}
BLFlags |= BLFLAG_TX_COMPLETE;
I2C_Stop(TWI_STATE_MOTOR_TX);
I2C_TransferActive = 0;
}
else
{ // motor successfully addressed
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)
{
// new BL found
switch(Motor[motor_read].ReadMode)
{
case BL_READMODE_CONFIG:
pBuff = (uint8_t*)&BLConfig;
BuffLen = sizeof(BLConfig_t);
break;
 
case BL_READMODE_STATUS:
pBuff = (uint8_t*)&(Motor[motor_read].Current);
if(motor_read == motor_read_temperature) BuffLen = 3; // read Current, MaxPwm & Temp
else BuffLen = 1;// read Current only
break;
}
}
else // old BL version
{
pBuff = (uint8_t*)&(Motor[motor_read].Current);
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm
else BuffLen = 1; // read Current only
}
if(BuffLen == 1)
{
I2C_ReceiveLastByte(); // read last byte
}
else
{
I2C_ReceiveByte(); // read next byte
}
}
MissingMotor = missing_motor;
missing_motor = 0;
break;
case 6: // receive bytes
*pBuff = TWDR;
pBuff++;
BuffLen--;
if(BuffLen>1)
{
I2C_ReceiveByte(); // read next byte
}
else if (BuffLen == 1)
{
I2C_ReceiveLastByte(); // read last byte
}
else // nothing left
{
if(BLFlags & BLFLAG_READ_VERSION)
{
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN) && (Motor[motor_read].MaxPWM == 250) ) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK;
else Motor[motor_read].Version = 0;
}
if(++motor_read >= MAX_MOTORS)
{
motor_read = 0; // restart from beginning
BLConfig_ReadMask = 0; // reset read configuration bitmask
if(++motor_read_temperature >= MAX_MOTORS)
{
motor_read_temperature = 0;
BLFlags &= ~BLFLAG_READ_VERSION;
}
}
I2C_Stop(TWI_STATE_MOTOR_TX);
BLFlags |= BLFLAG_TX_COMPLETE;
I2C_TransferActive = 0;
return;
}
twi_state = 6; // if there are some bytes left
break;
 
// writing Gyro-Offsets
case 18:
I2C_WriteByte(0x98); // Address the DAC
break;
 
case 19:
I2C_WriteByte(0x10 + (dac_channel * 2)); // Select DAC Channel (0x10 = A, 0x12 = B, 0x14 = C)
break;
 
case 20:
switch(dac_channel)
{
case 0:
I2C_WriteByte(AnalogOffsetNick); // 1st byte for Channel A
break;
case 1:
I2C_WriteByte(AnalogOffsetRoll); // 1st byte for Channel B
break;
case 2:
I2C_WriteByte(AnalogOffsetGier); // 1st byte for Channel C
break;
}
break;
 
case 21:
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80
break;
 
case 22:
I2C_Stop(TWI_STATE_MOTOR_TX);
I2C_TransferActive = 0;
I2CTimeout = 10;
// repeat case 18...22 until all DAC Channels are updated
if(dac_channel < 2)
{
dac_channel ++; // jump to next channel
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel
}
else
{
dac_channel = 0; // reset dac channel counter
BLFlags |= BLFLAG_TX_COMPLETE;
}
break;
default:
I2C_Stop(TWI_STATE_MOTOR_TX);
BLFlags |= BLFLAG_TX_COMPLETE;
I2CTimeout = 10;
motor_write = 0;
motor_read = 0;
I2C_TransferActive = 0;
break;
}
 
}
 
 
uint8_t I2C_WriteBLConfig(uint8_t motor)
{
uint8_t i;
uint16_t timer;
 
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(motor)
{
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
}
// check BL configuration to send
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
 
timer = SetDelay(2000);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
 
// prepare the bitmask
if(!motor) // 0 means all
{
BLConfig_WriteMask = 0xFF; // all motors at once with the same configuration
}
else //only one specific motor
{
BLConfig_WriteMask = 0x0001<<(motor-1);
}
for(i = 0; i < MAX_MOTORS; i++)
{
if((0x0001<<i) & BLConfig_WriteMask)
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
 
motor_write = 0;
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms)
do
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST);
return(BLCONFIG_SUCCESS);
}
 
uint8_t I2C_ReadBLConfig(uint8_t motor)
{
uint8_t i;
uint16_t timer;
 
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running!
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE);
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist!
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL!
 
timer = SetDelay(2000);
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
 
// prepare the bitmask
BLConfig_ReadMask = 0x0001<<(motor-1);
 
for(i = 0; i < MAX_MOTORS; i++)
{
if((0x0001<<i) & BLConfig_ReadMask)
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
 
motor_read = 0;
BLConfig.Revision = 0; // bad revision
BLConfig.crc = 0; // bad checksum
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms)
do
{
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer
}while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors
// validate result
if(BLConfig.Revision != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1);
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum
return(BLCONFIG_SUCCESS);
}
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/twimaster.h
0,0 → 1,100
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
+
+#include <inttypes.h>
+
+#define TWI_STATE_MOTOR_TX 0
+#define TWI_STATE_MOTOR_RX 5
+#define TWI_STATE_GYRO_OFFSET_TX 18
+
+extern volatile uint8_t twi_state;
+extern volatile uint8_t motor_write;
+extern volatile uint8_t motor_read;
+extern volatile uint8_t I2C_TransferActive;
+
+extern uint8_t MissingMotor;
+
+#define MAX_MOTORS 12
+#define MOTOR_STATE_PRESENT_MASK 0x80
+#define MOTOR_STATE_ERROR_MASK 0x7F
+
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01
+
+#define BLFLAG_TX_COMPLETE 0x01
+#define BLFLAG_READ_VERSION 0x02
+
+extern volatile uint8_t BLFlags;
+
+
+#define BL_READMODE_STATUS 0
+#define BL_READMODE_CONFIG 16
+
+typedef struct
+{
+ uint8_t Version; // the version of the BL (0 = old)
+ uint8_t SetPoint; // written by attitude controller
+ uint8_t SetPointLowerBits; // for higher Resolution of new BLs
+ uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present
+ uint8_t ReadMode; // select data to read
+ // the following bytes must be exactly in that order!
+ uint8_t Current; // in 0.1 A steps, read back from BL
+ uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40)
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C
+} __attribute__((packed)) MotorData_t;
+
+extern MotorData_t Motor[MAX_MOTORS];
+
+#define BLCONFIG_REVISION 2
+
+#define MASK_SET_PWM_SCALING 0x01
+#define MASK_SET_CURRENT_LIMIT 0x02
+#define MASK_SET_TEMP_LIMIT 0x04
+#define MASK_SET_CURRENT_SCALING 0x08
+#define MASK_SET_BITCONFIG 0x10
+#define MASK_RESET_CAPCOUNTER 0x20
+#define MASK_SET_DEFAULT_PARAMS 0x40
+#define MASK_SET_SAVE_EEPROM 0x80
+
+#define BITCONF_REVERSE_ROTATION 0x01
+#define BITCONF_RES1 0x02
+#define BITCONF_RES2 0x04
+#define BITCONF_RES3 0x08
+#define BITCONF_RES4 0x10
+#define BITCONF_RES5 0x20
+#define BITCONF_RES6 0x40
+#define BITCONF_RES7 0x80
+
+typedef struct
+{
+ uint8_t Revision; // must be BL_REVISION
+ uint8_t SetMask; // settings mask
+ uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit
+ uint8_t CurrentLimit; // current limit in A
+ uint8_t TempLimit; // in °C
+ uint8_t CurrentScaling; // scaling factor for current measurement
+ uint8_t BitConfig; // see defines above
+ uint8_t crc; // checksum
+} __attribute__((packed)) BLConfig_t;
+
+extern BLConfig_t BLConfig;
+
+extern volatile uint16_t I2CTimeout;
+
+void I2C_Init(char); // Initialize I2C
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);}
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);}
+void I2C_Reset(void); // Reset I2C
+
+#define BLCONFIG_SUCCESS 0
+#define BLCONFIG_ERR_MOTOR_RUNNING 1
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4
+#define BLCONFIG_ERR_CHECKSUM 5
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6
+
+uint8_t I2C_WriteBLConfig(uint8_t motor);
+uint8_t I2C_ReadBLConfig(uint8_t motor);
+
+#endif
/branches/v0.90d_Ernstl_4-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/ccpDF3o1.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccpDF3o1.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccpDF3o1.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccpDF3o1.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccpDF3o1.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccpDF3o1.s:15 .bss:00000000 BLConfig_ReadMask
C:\Temp/ccpDF3o1.s:21 .bss:00000002 BLConfig_WriteMask
C:\Temp/ccpDF3o1.s:27 .bss:00000004 BLFlags
C:\Temp/ccpDF3o1.s:33 .bss:00000005 MissingMotor
C:\Temp/ccpDF3o1.s:39 .data:00000000 I2CTimeout
C:\Temp/ccpDF3o1.s:46 .bss:00000006 I2C_TransferActive
C:\Temp/ccpDF3o1.s:52 .bss:00000007 motor_read
C:\Temp/ccpDF3o1.s:58 .bss:00000008 motor_write
C:\Temp/ccpDF3o1.s:64 .bss:00000009 dac_channel
C:\Temp/ccpDF3o1.s:70 .bss:0000000a twi_state
C:\Temp/ccpDF3o1.s:75 .text:00000000 I2C_Init
*COM*:00000060 Motor
C:\Temp/ccpDF3o1.s:126 .text:00000054 I2C_Reset
.bss:0000000b missing_motor.0
C:\Temp/ccpDF3o1.s:153 .bss:0000000c motor_read_temperature.1
C:\Temp/ccpDF3o1.s:154 .bss:0000000d pBuff.2
C:\Temp/ccpDF3o1.s:155 .bss:0000000f BuffLen.3
C:\Temp/ccpDF3o1.s:159 .text:00000098 __vector_26
*COM*:00000008 BLConfig
C:\Temp/ccpDF3o1.s:853 .text:00000698 I2C_WriteBLConfig
C:\Temp/ccpDF3o1.s:1025 .text:000007ec I2C_ReadBLConfig
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__tablejump2__
Mixer
RequiredMotors
FC_StatusFlags
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
MotorenEin
PC_MotortestActive
RAM_Checksum
SetDelay
CheckDelay
/branches/v0.90d_Ernstl_4-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 ",
"AccNick ",
"AccRoll ",
"YawGyro ",
"Height Value ", //5
"AccZ ",
"Gas ",
"Compass Value ",
"Voltage [0.1V] ",
"Receiver Level ", //10
"Gyro Compass ",
"Motor 1 ",
"Motor 2 ",
"Motor 3 ",
"Motor 4 ", //15
"16 ",
"17 ",
"18 ",
"19 ",
"Servo ", //20
"Hovergas ",
"Current [0.1A] ",
"Capacity [mAh] ",
"Height Setpoint ",
"25 ", //25
"26 ", //"26 CPU OverLoad ",
"Compass Setpoint",
"I2C-Error ",
"BL Limit ",
"GPS_Nick ", //30
"GPS_Roll "
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ISR(USART0_TX_vect)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
 
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = TxdBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR0 = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ISR(USART0_RX_vect)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation
 
SioTmp = UDR0;
 
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr + 1;
RxdBuffer[buf_ptr] = '\r';
if(RxdBuffer[2] == 'R')
{
LcdClear();
wdt_enable(WDTO_250MS); // Reset-Commando
ServoActive = 0;
}
 
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += TxdBuffer[i];
}
tmpCRC %= 4096;
TxdBuffer[i++] = '=' + tmpCRC / 64;
TxdBuffer[i++] = '=' + tmpCRC % 64;
TxdBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR0 = TxdBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len)
{
va_list ap;
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
unsigned char *snd = 0;
int len = 0;
 
TxdBuffer[pt++] = '#'; // Startzeichen
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...)
TxdBuffer[pt++] = cmd; // Commando
 
va_start(ap, BufferAnzahl);
if(BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
while(len)
{
if(len)
{
a = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else a = 0;
if(len)
{
b = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else b = 0;
if(len)
{
c = snd[ptr++];
len--;
if((!len) && BufferAnzahl)
{
snd = va_arg(ap, unsigned char*);
len = va_arg(ap, int);
ptr = 0;
BufferAnzahl--;
}
}
else c = 0;
TxdBuffer[pt++] = '=' + (a >> 2);
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
TxdBuffer[pt++] = '=' + ( c & 0x3f);
}
va_end(ap);
AddCRC(pt);
}
 
// --------------------------------------------------------------------------
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden.
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 3;
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
 
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) RxdBuffer[ptrOut++] = x; else break;
if(len--) RxdBuffer[ptrOut++] = y; else break;
if(len--) RxdBuffer[ptrOut++] = z; else break;
}
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert?
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
unsigned char tempchar1, tempchar2;
Decode64(); // dekodiere datenblock im Empfangsbuffer
switch(RxdBuffer[1]-'a') // check for Slave Address
{
case FC_ADDRESS: // FC special commands
switch(RxdBuffer[2])
{
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
case 't':// Motortest
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest));
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4);
PC_MotortestActive = 240;
//while(!UebertragungAbgeschlossen);
//SendOutData('T', MeineSlaveAdresse, 0);
PcZugriff = 255;
break;
 
case 'n':// "Get Mixer
while(!UebertragungAbgeschlossen);
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1);
Debug("Mixer lesen");
break;
 
case 'm':// "Write Mixer
if(pRxData[0] == EEMIXER_REVISION)
{
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1);
MixerTable_WriteToEEProm();
tempchar1 = 1;
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER;
}
else
{
tempchar1 = 0;
}
while(!UebertragungAbgeschlossen);
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
break;
 
case 'p': // get PPM Channels
GetPPMChannelAnforderung = 1;
PcZugriff = 255;
break;
 
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
if((10 <= pRxData[0]) && (pRxData[0] < 20))
{
tempchar1 = pRxData[0] - 10;
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
SetDefaultParameter(tempchar1, 1);
}
else if((20 <= pRxData[0]) && (pRxData[0] < 30))
{
tempchar1 = pRxData[0] - 20;
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
SetDefaultParameter(tempchar1, 0);
}
else
{
tempchar1 = pRxData[0];
if(tempchar1 == 0xFF)
{
tempchar1 = GetActiveParamSet();
}
if(tempchar1< 1) tempchar1 = 1; // limit to 1
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5
// load requested parameter set
ParamSet_ReadFromEEProm(tempchar1);
}
while(!UebertragungAbgeschlossen);
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1);
Debug("Lese Setting %d", tempchar1);
 
break;
 
case 's': // Parametersatz speichern
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range
{
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1);
ParamSet_WriteToEEProm(pRxData[0]);
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
tempchar1 = GetActiveParamSet();
}
else
{
tempchar1 = 0; // mark in response an invlid setting
}
while(!UebertragungAbgeschlossen);
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
if(!MotorenEin) Piep(tempchar1,110);
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
break;
case 'f': // auf anderen Parametersatz umschalten
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]);
tempchar1 = GetActiveParamSet();
while(!UebertragungAbgeschlossen);
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
if(!MotorenEin) Piep(tempchar1,110);
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
break;
case 'y':// serial Potis
PPM_in[13] = (signed char) pRxData[0]; PPM_in[14] = (signed char) pRxData[1]; PPM_in[15] = (signed char) pRxData[2]; PPM_in[16] = (signed char) pRxData[3];
PPM_in[17] = (signed char) pRxData[4]; PPM_in[18] = (signed char) pRxData[5]; PPM_in[19] = (signed char) pRxData[6]; PPM_in[20] = (signed char) pRxData[7];
PPM_in[21] = (signed char) pRxData[8]; PPM_in[22] = (signed char) pRxData[9]; PPM_in[23] = (signed char) pRxData[10]; PPM_in[24] = (signed char) pRxData[11];
break;
 
case 'u': // request BL parameter
Debug("Reading BL %d", pRxData[0]);
// try to read BL configuration
tempchar2 = I2C_ReadBLConfig(pRxData[0]);
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1;
else tempchar1 = 0;
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t));
break;
 
case 'w': // write BL parameter
Debug("Writing BL %d", pRxData[0]);
if(RxDataLen >= 1+sizeof(BLConfig_t))
{
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t));
tempchar2 = I2C_WriteBLConfig(pRxData[0]);
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1;
else tempchar1 = 0; // indicate error
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2));
}
break;
case 'j':
if(MotorenEin) break;
tempchar1 = LIBFC_GetCPUType();
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P))
{
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1);
 
cli();
 
// UART0 & UART1 disable RX and TX-Interrupt
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0));
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1));
 
// UART0 & UART1 disable receiver and transmitter
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0));
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1));
 
// UART0 & UART1 flush receive buffer explicit
while ( UCSR1A & (1<<RXC1) ) UDR1;
while ( UCSR0A & (1<<RXC0) ) UDR0;
 
 
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2;
else
{ // Jeti or HoTT update
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT
//#endif
ReceiverUpdateModeActive = 1;
// UART0 & UART1 set baudrate
UBRR1H = (uint8_t)(ubrr>>8);
UBRR1L = (uint8_t)ubrr;
UBRR0H = UBRR1H;
UBRR0L = UBRR1L;
// UART1 no parity
UCSR1C &= ~(1 << UPM11);
UCSR1C &= ~(1 << UPM10);
// UART1 8-bit
UCSR1B &= ~(1 << UCSZ12);
UCSR1C |= (1 << UCSZ11);
UCSR1C |= (1 << UCSZ10);
}
// UART0 & UART1 1 stop bit
UCSR1C &= ~(1 << USBS1);
UCSR0C &= ~(1 << USBS0);
// UART1 clear 9th bit
UCSR1B &= ~(1<<TXB81);
// enable receiver and transmitter for UART0 and UART1
UCSR0B |= (1 << TXEN0) | (1 << RXEN0);
UCSR1B |= (1 << TXEN1) | (1 << RXEN1);
// enable RX-Interrupt for UART0 and UART1
UCSR0B |= (1 << RXCIE0);
UCSR1B |= (1 << RXCIE1);
// disable other Interrupts
TIMSK0 = 0;
TIMSK1 = 0;
TIMSK2 = 0;
 
sei();
}
break;
 
} // case FC_ADDRESS:
 
default: // any Slave Address
 
switch(RxdBuffer[2])
{
// 't' comand placed here only for compatibility to BL
case 't':// Motortest
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest));
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4);
while(!UebertragungAbgeschlossen);
SendOutData('T', MeineSlaveAdresse, 0);
PC_MotortestActive = 250;
PcZugriff = 255;
AboTimeOut = SetDelay(ABO_TIMEOUT);
break;
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address
case 'K':// Kompasswert
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue));
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180;
break;
case 'a':// Texte der Analogwerte
DebugTextAnforderung = pRxData[0];
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31;
PcZugriff = 255;
break;
case 'b':
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl));
ConfirmFrame = ExternControl.Frame;
PcZugriff = 255;
break;
case 'c': // Poll the 3D-Data
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);}
Intervall3D = pRxData[0] * 10;
AboTimeOut = SetDelay(ABO_TIMEOUT);
break;
case 'd': // Poll the debug data
PcZugriff = 255;
DebugDataIntervall = (unsigned int)pRxData[0] * 10;
if(DebugDataIntervall > 0) DebugDataAnforderung = 1;
AboTimeOut = SetDelay(ABO_TIMEOUT);
break;
 
case 'h':// x-1 Displayzeilen
PcZugriff = 255;
if((pRxData[0] & 0x80) == 0x00) // old format
{
DisplayLine = 2;
Display_Interval = 0;
}
else // new format
{
RemoteKeys |= ~pRxData[0];
Display_Interval = (unsigned int)pRxData[1] * 10;
DisplayLine = 4;
AboTimeOut = SetDelay(ABO_TIMEOUT);
}
DebugDisplayAnforderung = 1;
break;
 
case 'l':// x-1 Displayzeilen
PcZugriff = 255;
MenuePunkt = pRxData[0];
DebugDisplayAnforderung1 = 1;
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
 
case 'g'://
GetExternalControl = 1;
break;
 
default:
//unsupported command received
break;
}
break; // default:
}
NeuerDatensatzEmpfangen = 0;
pRxData = 0;
RxDataLen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
void uart_putchar (char c)
//############################################################################
{
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(UCSR0A, UDRE0);
//Ausgabe des Zeichens
UDR0 = c;
}
 
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1);
 
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
UCSR0B = (1 << TXEN0) | (1 << RXEN0);
// UART Double Speed (U2X)
UCSR0A |= (1 << U2X0);
// RX-Interrupt Freigabe
UCSR0B |= (1 << RXCIE0);
// TX-Interrupt Freigabe
UCSR0B |= (1 << TXCIE0);
// USART0 Baud Rate Register
// set clock divider
UBRR0H = (uint8_t)(ubrr >> 8);
UBRR0L = (uint8_t)ubrr;
 
Debug_Timer = SetDelay(DebugDataIntervall);
Kompass_Timer = SetDelay(220);
 
VersionInfo.SWMajor = VERSION_MAJOR;
VersionInfo.SWMinor = VERSION_MINOR;
VersionInfo.SWPatch = VERSION_PATCH;
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR;
VersionInfo.ProtoMinor = VERSION_SERIAL_MINOR;
 
pRxData = 0;
RxDataLen = 0;
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
if(!UebertragungAbgeschlossen) return;
 
if(CheckDelay(AboTimeOut))
{
Display_Interval = 0;
DebugDataIntervall = 0;
Intervall3D = 0;
}
 
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen)
{
if(DisplayLine > 3)// new format
{
Menu();
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80);
}
else // old format
{
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!");
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20);
if(DisplayLine++ > 3) DisplayLine = 0;
}
Display_Timer = SetDelay(Display_Interval);
DebugDisplayAnforderung = 0;
}
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen)
{
Menu();
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff));
DebugDisplayAnforderung1 = 0;
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo));
GetVersionAnforderung = 0;
Debug_OK("Version gesendet");
}
 
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl));
GetExternalControl = 0;
}
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen)
{
WinkelOut.Winkel[0] = (int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
WinkelOut.Winkel[1] = (int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
WinkelOut.UserParameter[0] = Parameter_UserParam1;
WinkelOut.UserParameter[1] = Parameter_UserParam2;
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut));
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt
Kompass_Timer = SetDelay(99);
}
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
CopyDebugValues();
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall);
}
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen)
{
Data3D.Winkel[0] = (int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
Data3D.Winkel[1] = (int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR);
Data3D.Centroid[0] = SummeNick >> 9;
Data3D.Centroid[1] = SummeRoll >> 9;
Data3D.Centroid[2] = Mess_Integral_Gier >> 9;
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D));
Timer3D = SetDelay(Intervall3D);
}
if(DebugTextAnforderung != 255) // Texte für die Analogdaten
{
unsigned char label[16]; // local sram buffer
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16);
DebugTextAnforderung = 255;
}
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen
{
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame));
ConfirmFrame = 0;
}
 
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen)
{
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in));
GetPPMChannelAnforderung = 0;
}
 
#ifdef DEBUG // only include functions if DEBUG is defined
if(SendDebugOutput && UebertragungAbgeschlossen)
{
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug));
SendDebugOutput = 0;
}
#endif
 
}
 
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/uart.h
0,0 → 1,107
#ifndef _UART_H
#define _UART_H
 
#define printf_P(format, args...) _printf_P(&uart_putchar, format , ## args)
#define printf(format, args...) _printf_P(&uart_putchar, PSTR(format) , ## args)
 
void BearbeiteRxDaten(void);
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char ReceiverUpdateModeActive;
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned volatile char PC_MotortestActive;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern unsigned char RemotePollDisplayLine;
extern unsigned volatile char RxdBuffer[];
extern int Debug_Timer,Kompass_Timer;
extern void UART_Init (void);
extern void uart_putchar (char c);
//extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void Uart1Init(void);
extern void BearbeiteRxDaten(void);
extern unsigned char MotorTest[16];
struct str_DebugOut
{
unsigned char Status[2];
signed int Analog[32]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_WinkelOut
{
signed int Winkel[2];
unsigned char UserParameter[2];
unsigned char CalcState;
unsigned char Orientation;
};
extern struct str_WinkelOut WinkelOut;
 
struct str_Data3D
{
signed int Winkel[3]; // nick, roll, compass in 0,1°
signed char Centroid[3];
signed char reserve[5];
};
extern struct str_Data3D Data3D;
 
struct str_ExternControl
{
unsigned char Digital[2];
unsigned char RemoteTasten;
signed char Nick;
signed char Roll;
signed char Gier;
unsigned char Gas;
signed char Hight;
unsigned char free;
unsigned char Frame;
unsigned char Config;
};
extern struct str_ExternControl ExternControl;
 
// FC hardware errors
 
// bitmask for UART_VersionInfo_t.HardwareError[0]
#define FC_ERROR0_GYRO_NICK 0x01
#define FC_ERROR0_GYRO_ROLL 0x02
#define FC_ERROR0_GYRO_YAW 0x04
#define FC_ERROR0_ACC_NICK 0x08
#define FC_ERROR0_ACC_ROLL 0x10
#define FC_ERROR0_ACC_TOP 0x20
#define FC_ERROR0_PRESSURE 0x40
#define FC_ERROR0_CAREFREE 0x80
// bitmask for UART_VersionInfo_t.HardwareError[1]
#define FC_ERROR1_I2C 0x01
#define FC_ERROR1_BL_MISSING 0x02
#define FC_ERROR1_SPI_RX 0x04
#define FC_ERROR1_PPM 0x08
#define FC_ERROR1_MIXER 0x10
#define FC_ERROR1_RES1 0x20
#define FC_ERROR1_RES2 0x40
#define FC_ERROR1_RES3 0x80
 
struct str_VersionInfo
{
unsigned char SWMajor;
unsigned char SWMinor;
unsigned char ProtoMajor;
unsigned char ProtoMinor;
unsigned char SWPatch;
unsigned char HardwareError[5];
};
 
extern struct str_VersionInfo VersionInfo;
 
//#define USART0_BAUD 9600
//#define USART0_BAUD 14400
//#define USART0_BAUD 28800
//#define USART0_BAUD 38400
#define USART0_BAUD 57600
 
 
#endif //_UART_H
/branches/v0.90d_Ernstl_4-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 4761 7320 .ascii "Gas "
22 2020 2020
22 2020 2020
22 2020 2020
23 0080 436F 6D70 .ascii "Compass Value "
23 6173 7320
23 5661 6C75
23 6520 2020
24 0090 566F 6C74 .ascii "Voltage [0.1V] "
24 6167 6520
24 5B30 2E31
24 565D 2020
25 00a0 5265 6365 .ascii "Receiver Level "
25 6976 6572
25 204C 6576
25 656C 2020
26 00b0 4779 726F .ascii "Gyro Compass "
26 2043 6F6D
26 7061 7373
26 2020 2020
27 00c0 4D6F 746F .ascii "Motor 1 "
27 7220 3120
27 2020 2020
27 2020 2020
28 00d0 4D6F 746F .ascii "Motor 2 "
28 7220 3220
28 2020 2020
28 2020 2020
29 00e0 4D6F 746F .ascii "Motor 3 "
29 7220 3320
29 2020 2020
29 2020 2020
30 00f0 4D6F 746F .ascii "Motor 4 "
30 7220 3420
30 2020 2020
30 2020 2020
31 0100 3136 2020 .ascii "16 "
31 2020 2020
31 2020 2020
31 2020 2020
32 0110 3137 2020 .ascii "17 "
32 2020 2020
32 2020 2020
32 2020 2020
33 0120 3138 2020 .ascii "18 "
33 2020 2020
33 2020 2020
33 2020 2020
34 0130 3139 2020 .ascii "19 "
34 2020 2020
34 2020 2020
34 2020 2020
35 0140 5365 7276 .ascii "Servo "
35 6F20 2020
35 2020 2020
35 2020 2020
36 0150 486F 7665 .ascii "Hovergas "
36 7267 6173
36 2020 2020
36 2020 2020
37 0160 4375 7272 .ascii "Current [0.1A] "
37 656E 7420
37 5B30 2E31
37 415D 2020
38 0170 4361 7061 .ascii "Capacity [mAh] "
38 6369 7479
38 205B 6D41
38 685D 2020
39 0180 4865 6967 .ascii "Height Setpoint "
39 6874 2053
39 6574 706F
39 696E 7420
40 0190 3235 2020 .ascii "25 "
40 2020 2020
40 2020 2020
40 2020 2020
41 01a0 3236 2020 .ascii "26 "
41 2020 2020
41 2020 2020
41 2020 2020
42 01b0 436F 6D70 .ascii "Compass Setpoint"
42 6173 7320
42 5365 7470
42 6F69 6E74
43 01c0 4932 432D .ascii "I2C-Error "
43 4572 726F
43 7220 2020
43 2020 2020
44 01d0 424C 204C .ascii "BL Limit "
44 696D 6974
44 2020 2020
44 2020 2020
45 01e0 4750 535F .ascii "GPS_Nick "
45 4E69 636B
45 2020 2020
45 2020 2020
46 01f0 4750 535F .ascii "GPS_Roll "
46 526F 6C6C
46 2020 2020
46 2020 2020
47 .global ReceiverUpdateModeActive
48 .global ReceiverUpdateModeActive
49 .section .bss
52 ReceiverUpdateModeActive:
53 0000 00 .skip 1,0
54 .global AboTimeOut
55 .global AboTimeOut
58 AboTimeOut:
59 0001 0000 .skip 2,0
60 .global Display_Interval
61 .global Display_Interval
64 Display_Interval:
65 0003 0000 .skip 2,0
66 .global Intervall3D
67 .global Intervall3D
70 Intervall3D:
71 0005 0000 .skip 2,0
72 .global DebugDataIntervall
73 .global DebugDataIntervall
76 DebugDataIntervall:
77 0007 0000 .skip 2,0
78 .global MeineSlaveAdresse
79 .data
82 MeineSlaveAdresse:
83 0000 01 .byte 1
84 .global PcZugriff
87 PcZugriff:
88 0001 64 .byte 100
89 .global DebugTextAnforderung
92 DebugTextAnforderung:
93 0002 FF .byte -1
94 .global PC_MotortestActive
95 .global PC_MotortestActive
96 .section .bss
99 PC_MotortestActive:
100 0009 00 .skip 1,0
101 .global PC_DebugTimeout
102 .global PC_DebugTimeout
105 PC_DebugTimeout:
106 000a 00 .skip 1,0
107 .global RxDataLen
108 .global RxDataLen
111 RxDataLen:
112 000b 00 .skip 1,0
113 .global pRxData
114 .global pRxData
117 pRxData:
118 000c 0000 .skip 2,0
119 .global AnzahlEmpfangsBytes
120 .global AnzahlEmpfangsBytes
123 AnzahlEmpfangsBytes:
124 000e 00 .skip 1,0
125 .global CntCrcError
126 .global CntCrcError
129 CntCrcError:
130 000f 00 .skip 1,0
131 .global UebertragungAbgeschlossen
132 .data
135 UebertragungAbgeschlossen:
136 0003 01 .byte 1
137 .global NeueKoordinateEmpfangen
138 .global NeueKoordinateEmpfangen
139 .section .bss
142 NeueKoordinateEmpfangen:
143 0010 00 .skip 1,0
144 .global NeuerDatensatzEmpfangen
145 .global NeuerDatensatzEmpfangen
148 NeuerDatensatzEmpfangen:
149 0011 00 .skip 1,0
150 .global SioTmp
151 .global SioTmp
154 SioTmp:
155 0012 00 .skip 1,0
156 .global DisplayLine
157 .global DisplayLine
160 DisplayLine:
161 0013 00 .skip 1,0
162 .global GetPPMChannelAnforderung
163 .global GetPPMChannelAnforderung
166 GetPPMChannelAnforderung:
167 0014 00 .skip 1,0
168 .global GetVersionAnforderung
169 .global GetVersionAnforderung
172 GetVersionAnforderung:
173 0015 00 .skip 1,0
174 .global DebugDataAnforderung
175 .global DebugDataAnforderung
178 DebugDataAnforderung:
179 0016 00 .skip 1,0
180 .global DebugDisplayAnforderung
181 .global DebugDisplayAnforderung
184 DebugDisplayAnforderung:
185 0017 00 .skip 1,0
186 .global DebugDisplayAnforderung1
187 .global DebugDisplayAnforderung1
190 DebugDisplayAnforderung1:
191 0018 00 .skip 1,0
192 .global GetExternalControl
193 .global GetExternalControl
196 GetExternalControl:
197 0019 00 .skip 1,0
198 .lcomm ptr.6,2
199 .text
200 .global __vector_22
202 __vector_22:
203 /* prologue: frame size=0 */
204 0000 1F92 push __zero_reg__
205 0002 0F92 push __tmp_reg__
206 0004 0FB6 in __tmp_reg__,__SREG__
207 0006 0F92 push __tmp_reg__
208 0008 1124 clr __zero_reg__
209 000a 8F93 push r24
210 000c 9F93 push r25
211 000e EF93 push r30
212 0010 FF93 push r31
213 /* prologue end (size=9) */
214 0012 8091 0000 lds r24,UebertragungAbgeschlossen
215 0016 8823 tst r24
216 0018 01F4 brne .L2
217 001a 8091 0000 lds r24,ptr.6
218 001e 9091 0000 lds r25,(ptr.6)+1
219 0022 0196 adiw r24,1
220 0024 9093 0000 sts (ptr.6)+1,r25
221 0028 8093 0000 sts ptr.6,r24
222 002c FC01 movw r30,r24
223 002e E050 subi r30,lo8(-(TxdBuffer))
224 0030 F040 sbci r31,hi8(-(TxdBuffer))
225 0032 E081 ld r30,Z
226 0034 ED30 cpi r30,lo8(13)
227 0036 01F0 breq .L4
228 0038 8F3A cpi r24,175
229 003a 9105 cpc r25,__zero_reg__
230 003c 01F4 brne .L3
231 .L4:
232 003e 1092 0000 sts (ptr.6)+1,__zero_reg__
233 0042 1092 0000 sts ptr.6,__zero_reg__
234 0046 81E0 ldi r24,lo8(1)
235 0048 8093 0000 sts UebertragungAbgeschlossen,r24
236 .L3:
237 004c E093 C600 sts 198,r30
238 0050 00C0 rjmp .L1
239 .L2:
240 0052 1092 0000 sts (ptr.6)+1,__zero_reg__
241 0056 1092 0000 sts ptr.6,__zero_reg__
242 .L1:
243 /* epilogue: frame size=0 */
244 005a FF91 pop r31
245 005c EF91 pop r30
246 005e 9F91 pop r25
247 0060 8F91 pop r24
248 0062 0F90 pop __tmp_reg__
249 0064 0FBE out __SREG__,__tmp_reg__
250 0066 0F90 pop __tmp_reg__
251 0068 1F90 pop __zero_reg__
252 006a 1895 reti
253 /* epilogue end (size=9) */
254 /* function __vector_22 size 54 (36) */
256 .lcomm crc.1,2
257 .lcomm crc1.2,1
258 .lcomm crc2.3,1
259 .lcomm buf_ptr.4,1
260 .lcomm UartState.5,1
261 .global __vector_20
263 __vector_20:
264 /* prologue: frame size=0 */
265 006c 1F92 push __zero_reg__
266 006e 0F92 push __tmp_reg__
267 0070 0FB6 in __tmp_reg__,__SREG__
268 0072 0F92 push __tmp_reg__
269 0074 1124 clr __zero_reg__
270 0076 2F93 push r18
271 0078 3F93 push r19
272 007a 4F93 push r20
273 007c 5F93 push r21
274 007e 6F93 push r22
275 0080 7F93 push r23
276 0082 8F93 push r24
277 0084 9F93 push r25
278 0086 AF93 push r26
279 0088 BF93 push r27
280 008a CF93 push r28
281 008c EF93 push r30
282 008e FF93 push r31
283 /* prologue end (size=18) */
284 0090 90E0 ldi r25,lo8(0)
285 0092 8091 0000 lds r24,ReceiverUpdateModeActive
286 0096 8130 cpi r24,lo8(1)
287 0098 01F4 brne .L7
288 009a 8091 C600 lds r24,198
289 009e 8093 CE00 sts 206,r24
290 00a2 00C0 rjmp .L6
291 .L7:
292 00a4 8091 0000 lds r24,ReceiverUpdateModeActive
293 00a8 8230 cpi r24,lo8(2)
294 00aa 01F4 brne .L8
295 00ac 8091 C600 lds r24,198
296 00b0 8093 0000 sts RxdBuffer,r24
297 00b4 00C0 rjmp .L6
298 .L8:
299 00b6 8091 C600 lds r24,198
300 00ba 8093 0000 sts SioTmp,r24
301 00be 5091 0000 lds r21,buf_ptr.4
302 00c2 5F3A cpi r21,lo8(-81)
303 00c4 00F0 brlo .L9
304 00c6 9093 0000 sts UartState.5,r25
305 .L9:
306 00ca 8091 0000 lds r24,SioTmp
307 00ce 8D30 cpi r24,lo8(13)
308 00d0 01F0 breq .+2
309 00d2 00C0 rjmp .L10
310 00d4 8091 0000 lds r24,UartState.5
311 00d8 8230 cpi r24,lo8(2)
312 00da 01F0 breq .+2
313 00dc 00C0 rjmp .L10
314 00de 9093 0000 sts UartState.5,r25
315 00e2 852F mov r24,r21
316 00e4 9927 clr r25
317 00e6 8050 subi r24,lo8(-(RxdBuffer))
318 00e8 9040 sbci r25,hi8(-(RxdBuffer))
319 00ea FC01 movw r30,r24
320 00ec 3297 sbiw r30,2
321 00ee 4081 ld r20,Z
322 00f0 2091 0000 lds r18,crc.1
323 00f4 3091 0000 lds r19,(crc.1)+1
324 00f8 241B sub r18,r20
325 00fa 3109 sbc r19,__zero_reg__
326 00fc DC01 movw r26,r24
327 00fe 1197 sbiw r26,1
328 0100 8C91 ld r24,X
329 0102 281B sub r18,r24
330 0104 3109 sbc r19,__zero_reg__
331 0106 C901 movw r24,r18
332 0108 9F70 andi r25,hi8(4095)
333 010a 9093 0000 sts (crc.1)+1,r25
334 010e 8093 0000 sts crc.1,r24
335 0112 46E0 ldi r20,6
336 0114 9695 1: lsr r25
337 0116 8795 ror r24
338 0118 4A95 dec r20
339 011a 01F4 brne 1b
340 011c 982F mov r25,r24
341 011e 935C subi r25,lo8(-(61))
342 0120 9093 0000 sts crc1.2,r25
343 0124 2F73 andi r18,lo8(63)
344 0126 3070 andi r19,hi8(63)
345 0128 235C subi r18,lo8(-(61))
346 012a 2093 0000 sts crc2.3,r18
347 012e 8081 ld r24,Z
348 0130 9817 cp r25,r24
349 0132 01F4 brne .L11
350 0134 8C91 ld r24,X
351 0136 2817 cp r18,r24
352 0138 01F4 brne .L11
353 013a 91E0 ldi r25,lo8(1)
354 013c 00C0 rjmp .L12
355 .L11:
356 013e 90E0 ldi r25,lo8(0)
357 0140 8091 0000 lds r24,CntCrcError
358 0144 8F5F subi r24,lo8(-(1))
359 0146 8093 0000 sts CntCrcError,r24
360 .L12:
361 014a C091 0000 lds r28,NeuerDatensatzEmpfangen
362 014e CC23 tst r28
363 0150 01F0 breq .+2
364 0152 00C0 rjmp .L6
365 0154 9923 tst r25
366 0156 01F4 brne .+2
367 0158 00C0 rjmp .L6
368 015a 81E0 ldi r24,lo8(1)
369 015c 8093 0000 sts NeuerDatensatzEmpfangen,r24
370 0160 580F add r21,r24
371 0162 5093 0000 sts AnzahlEmpfangsBytes,r21
372 0166 5150 subi r21,lo8(-(-1))
373 0168 E52F mov r30,r21
374 016a FF27 clr r31
375 016c E050 subi r30,lo8(-(RxdBuffer))
376 016e F040 sbci r31,hi8(-(RxdBuffer))
377 0170 8DE0 ldi r24,lo8(13)
378 0172 8083 st Z,r24
379 0174 8091 0000 lds r24,RxdBuffer+2
380 0178 8235 cpi r24,lo8(82)
381 017a 01F0 breq .+2
382 017c 00C0 rjmp .L6
383 017e 0E94 0000 call LcdClear
384 0182 88E1 ldi r24,lo8(24)
385 0184 90E0 ldi r25,hi8(24)
386 0186 2CE0 ldi r18,lo8(12)
387 /* #APP */
388 0188 0FB6 in __tmp_reg__,__SREG__
389 018a F894 cli
390 018c A895 wdr
391 018e 8093 6000 sts 96,r24
392 0192 0FBE out __SREG__,__tmp_reg__
393 0194 2093 6000 sts 96,r18
394
395 /* #NOAPP */
396 0198 C093 0000 sts ServoActive,r28
397 019c 00C0 rjmp .L6
398 .L10:
399 019e 2091 0000 lds r18,UartState.5
400 01a2 822F mov r24,r18
401 01a4 9927 clr r25
402 01a6 8130 cpi r24,1
403 01a8 9105 cpc r25,__zero_reg__
404 01aa 01F0 breq .L19
405 01ac 8230 cpi r24,2
406 01ae 9105 cpc r25,__zero_reg__
407 01b0 04F4 brge .L24
408 01b2 892B or r24,r25
409 01b4 01F0 breq .L17
410 01b6 00C0 rjmp .L23
411 .L24:
412 01b8 0297 sbiw r24,2
413 01ba 01F0 breq .L20
414 01bc 00C0 rjmp .L23
415 .L17:
416 01be 8091 0000 lds r24,SioTmp
417 01c2 8332 cpi r24,lo8(35)
418 01c4 01F4 brne .L18
419 01c6 8091 0000 lds r24,NeuerDatensatzEmpfangen
420 01ca 8823 tst r24
421 01cc 01F4 brne .L18
422 01ce 81E0 ldi r24,lo8(1)
423 01d0 8093 0000 sts UartState.5,r24
424 .L18:
425 01d4 8091 0000 lds r24,SioTmp
426 01d8 8093 0000 sts RxdBuffer,r24
427 01dc 81E0 ldi r24,lo8(1)
428 01de 8093 0000 sts buf_ptr.4,r24
429 01e2 8091 0000 lds r24,SioTmp
430 01e6 9927 clr r25
431 01e8 00C0 rjmp .L25
432 .L19:
433 01ea 2F5F subi r18,lo8(-(1))
434 01ec 2093 0000 sts UartState.5,r18
435 01f0 E52F mov r30,r21
436 01f2 FF27 clr r31
437 01f4 E050 subi r30,lo8(-(RxdBuffer))
438 01f6 F040 sbci r31,hi8(-(RxdBuffer))
439 01f8 8091 0000 lds r24,SioTmp
440 01fc 8083 st Z,r24
441 01fe 00C0 rjmp .L26
442 .L20:
443 0200 E52F mov r30,r21
444 0202 FF27 clr r31
445 0204 E050 subi r30,lo8(-(RxdBuffer))
446 0206 F040 sbci r31,hi8(-(RxdBuffer))
447 0208 8091 0000 lds r24,SioTmp
448 020c 8083 st Z,r24
449 020e 5F3A cpi r21,lo8(-81)
450 0210 00F4 brsh .L21
451 .L26:
452 0212 5F5F subi r21,lo8(-(1))
453 0214 5093 0000 sts buf_ptr.4,r21
454 0218 00C0 rjmp .L22
455 .L21:
456 021a 1092 0000 sts UartState.5,__zero_reg__
457 .L22:
458 021e 2091 0000 lds r18,SioTmp
459 0222 8091 0000 lds r24,crc.1
460 0226 9091 0000 lds r25,(crc.1)+1
461 022a 820F add r24,r18
462 022c 911D adc r25,__zero_reg__
463 .L25:
464 022e 9093 0000 sts (crc.1)+1,r25
465 0232 8093 0000 sts crc.1,r24
466 0236 00C0 rjmp .L6
467 .L23:
468 0238 1092 0000 sts UartState.5,__zero_reg__
469 .L6:
470 /* epilogue: frame size=0 */
471 023c FF91 pop r31
472 023e EF91 pop r30
473 0240 CF91 pop r28
474 0242 BF91 pop r27
475 0244 AF91 pop r26
476 0246 9F91 pop r25
477 0248 8F91 pop r24
478 024a 7F91 pop r23
479 024c 6F91 pop r22
480 024e 5F91 pop r21
481 0250 4F91 pop r20
482 0252 3F91 pop r19
483 0254 2F91 pop r18
484 0256 0F90 pop __tmp_reg__
485 0258 0FBE out __SREG__,__tmp_reg__
486 025a 0F90 pop __tmp_reg__
487 025c 1F90 pop __zero_reg__
488 025e 1895 reti
489 /* epilogue end (size=18) */
490 /* function __vector_20 size 258 (222) */
492 .global AddCRC
494 AddCRC:
495 /* prologue: frame size=0 */
496 /* prologue end (size=0) */
497 0260 AC01 movw r20,r24
498 0262 A0E0 ldi r26,lo8(0)
499 0264 B0E0 ldi r27,hi8(0)
500 0266 9D01 movw r18,r26
501 0268 A817 cp r26,r24
502 026a B907 cpc r27,r25
503 026c 00F4 brsh .L33
504 026e E0E0 ldi r30,lo8(TxdBuffer)
505 0270 F0E0 ldi r31,hi8(TxdBuffer)
506 .L31:
507 0272 8191 ld r24,Z+
508 0274 280F add r18,r24
509 0276 311D adc r19,__zero_reg__
510 0278 1196 adiw r26,1
511 027a A417 cp r26,r20
512 027c B507 cpc r27,r21
513 027e 00F0 brlo .L31
514 .L33:
515 0280 3F70 andi r19,hi8(4095)
516 0282 FD01 movw r30,r26
517 0284 E050 subi r30,lo8(-(TxdBuffer))
518 0286 F040 sbci r31,hi8(-(TxdBuffer))
519 0288 C901 movw r24,r18
520 028a 56E0 ldi r21,6
521 028c 9695 1: lsr r25
522 028e 8795 ror r24
523 0290 5A95 dec r21
524 0292 01F4 brne 1b
525 0294 835C subi r24,lo8(-(61))
526 0296 8083 st Z,r24
527 0298 1196 adiw r26,1
528 029a FD01 movw r30,r26
529 029c E050 subi r30,lo8(-(TxdBuffer))
530 029e F040 sbci r31,hi8(-(TxdBuffer))
531 02a0 2F73 andi r18,lo8(63)
532 02a2 3070 andi r19,hi8(63)
533 02a4 822F mov r24,r18
534 02a6 835C subi r24,lo8(-(61))
535 02a8 8083 st Z,r24
536 02aa A050 subi r26,lo8(-(TxdBuffer+1))
537 02ac B040 sbci r27,hi8(-(TxdBuffer+1))
538 02ae 8DE0 ldi r24,lo8(13)
539 02b0 8C93 st X,r24
540 02b2 1092 0000 sts UebertragungAbgeschlossen,__zero_reg__
541 02b6 8091 0000 lds r24,TxdBuffer
542 02ba 8093 C600 sts 198,r24
543 /* epilogue: frame size=0 */
544 02be 0895 ret
545 /* epilogue end (size=1) */
546 /* function AddCRC size 49 (48) */
548 .global SendOutData
550 SendOutData:
551 /* prologue: frame size=0 */
552 02c0 A0E0 ldi r26,lo8(0)
553 02c2 B0E0 ldi r27,hi8(0)
554 02c4 E0E0 ldi r30,pm_lo8(1f)
555 02c6 F0E0 ldi r31,pm_hi8(1f)
556 02c8 0C94 0000 jmp __prologue_saves__+18
557 1:
558 /* prologue end (size=6) */
559 02cc 2C85 ldd r18,Y+12
560 02ce 9D85 ldd r25,Y+13
561 02d0 0E85 ldd r16,Y+14
562 02d2 BB24 clr r11
563 02d4 83E2 ldi r24,lo8(35)
564 02d6 8093 0000 sts TxdBuffer,r24
565 02da 9F59 subi r25,lo8(-(97))
566 02dc 9093 0000 sts TxdBuffer+1,r25
567 02e0 2093 0000 sts TxdBuffer+2,r18
568 02e4 33E0 ldi r19,lo8(3)
569 02e6 E32E mov r14,r19
570 02e8 F12C mov r15,__zero_reg__
571 02ea 0023 tst r16
572 02ec 01F4 brne .+2
573 02ee 00C0 rjmp .L49
574 02f0 CF84 ldd r12,Y+15
575 02f2 D888 ldd r13,Y+16
576 02f4 BE01 movw r22,r28
577 02f6 6D5E subi r22,lo8(-(19))
578 02f8 7F4F sbci r23,hi8(-(19))
579 02fa A989 ldd r26,Y+17
580 02fc BA89 ldd r27,Y+18
581 02fe 0150 subi r16,lo8(-(-1))
582 .L50:
583 0300 1097 sbiw r26,0
584 0302 01F4 brne .+2
585 0304 00C0 rjmp .L49
586 0306 1097 sbiw r26,0
587 0308 01F0 breq .L38
588 030a F601 movw r30,r12
589 030c EB0D add r30,r11
590 030e F11D adc r31,__zero_reg__
591 0310 B394 inc r11
592 0312 9081 ld r25,Z
593 0314 1197 sbiw r26,1
594 0316 01F4 brne .L40
595 0318 0023 tst r16
596 031a 01F0 breq .L41
597 031c FB01 movw r30,r22
598 031e 6E5F subi r22,lo8(-(2))
599 0320 7F4F sbci r23,hi8(-(2))
600 0322 DB01 movw r26,r22
601 0324 C080 ld r12,Z
602 0326 D180 ldd r13,Z+1
603 0328 6E5F subi r22,lo8(-(2))
604 032a 7F4F sbci r23,hi8(-(2))
605 032c 0D90 ld __tmp_reg__,X+
606 032e BC91 ld r27,X
607 0330 A02D mov r26,__tmp_reg__
608 0332 BB24 clr r11
609 0334 0150 subi r16,lo8(-(-1))
610 0336 00C0 rjmp .L40
611 .L38:
612 0338 90E0 ldi r25,lo8(0)
613 033a 00C0 rjmp .L41
614 .L40:
615 033c 1097 sbiw r26,0
616 033e 01F0 breq .L41
617 0340 F601 movw r30,r12
618 0342 EB0D add r30,r11
619 0344 F11D adc r31,__zero_reg__
620 0346 B394 inc r11
621 0348 4081 ld r20,Z
622 034a 1197 sbiw r26,1
623 034c 01F4 brne .L43
624 034e 0023 tst r16
625 0350 01F0 breq .L44
626 0352 FB01 movw r30,r22
627 0354 6E5F subi r22,lo8(-(2))
628 0356 7F4F sbci r23,hi8(-(2))
629 0358 DB01 movw r26,r22
630 035a C080 ld r12,Z
631 035c D180 ldd r13,Z+1
632 035e 6E5F subi r22,lo8(-(2))
633 0360 7F4F sbci r23,hi8(-(2))
634 0362 0D90 ld __tmp_reg__,X+
635 0364 BC91 ld r27,X
636 0366 A02D mov r26,__tmp_reg__
637 0368 BB24 clr r11
638 036a 0150 subi r16,lo8(-(-1))
639 036c 00C0 rjmp .L43
640 .L41:
641 036e 40E0 ldi r20,lo8(0)
642 0370 00C0 rjmp .L44
643 .L43:
644 0372 1097 sbiw r26,0
645 0374 01F0 breq .L44
646 0376 F601 movw r30,r12
647 0378 EB0D add r30,r11
648 037a F11D adc r31,__zero_reg__
649 037c B394 inc r11
650 037e 1081 ld r17,Z
651 0380 1197 sbiw r26,1
652 0382 01F4 brne .L46
653 0384 0023 tst r16
654 0386 01F0 breq .L46
655 0388 FB01 movw r30,r22
656 038a 3296 adiw r30,2
657 038c DB01 movw r26,r22
658 038e CD90 ld r12,X+
659 0390 DC90 ld r13,X
660 0392 BF01 movw r22,r30
661 0394 6E5F subi r22,lo8(-(2))
662 0396 7F4F sbci r23,hi8(-(2))
663 0398 A081 ld r26,Z
664 039a B181 ldd r27,Z+1
665 039c BB24 clr r11
666 039e 0150 subi r16,lo8(-(-1))
667 03a0 00C0 rjmp .L46
668 .L44:
669 03a2 10E0 ldi r17,lo8(0)
670 .L46:
671 03a4 F701 movw r30,r14
672 03a6 E050 subi r30,lo8(-(TxdBuffer))
673 03a8 F040 sbci r31,hi8(-(TxdBuffer))
674 03aa 892F mov r24,r25
675 03ac 8695 lsr r24
676 03ae 8695 lsr r24
677 03b0 835C subi r24,lo8(-(61))
678 03b2 8083 st Z,r24
679 03b4 0894 sec
680 03b6 E11C adc r14,__zero_reg__
681 03b8 F11C adc r15,__zero_reg__
682 03ba F701 movw r30,r14
683 03bc E050 subi r30,lo8(-(TxdBuffer))
684 03be F040 sbci r31,hi8(-(TxdBuffer))
685 03c0 892F mov r24,r25
686 03c2 9927 clr r25
687 03c4 8370 andi r24,lo8(3)
688 03c6 9070 andi r25,hi8(3)
689 03c8 24E0 ldi r18,4
690 03ca 880F 1: lsl r24
691 03cc 991F rol r25
692 03ce 2A95 dec r18
693 03d0 01F4 brne 1b
694 03d2 5527 clr r21
695 03d4 9A01 movw r18,r20
696 03d6 94E0 ldi r25,4
697 03d8 3695 1: lsr r19
698 03da 2795 ror r18
699 03dc 9A95 dec r25
700 03de 01F4 brne 1b
701 03e0 822B or r24,r18
702 03e2 835C subi r24,lo8(-(61))
703 03e4 8083 st Z,r24
704 03e6 0894 sec
705 03e8 E11C adc r14,__zero_reg__
706 03ea F11C adc r15,__zero_reg__
707 03ec F701 movw r30,r14
708 03ee E050 subi r30,lo8(-(TxdBuffer))
709 03f0 F040 sbci r31,hi8(-(TxdBuffer))
710 03f2 4F70 andi r20,lo8(15)
711 03f4 5070 andi r21,hi8(15)
712 03f6 440F lsl r20
713 03f8 551F rol r21
714 03fa 440F lsl r20
715 03fc 551F rol r21
716 03fe 812F mov r24,r17
717 0400 9927 clr r25
718 0402 26E0 ldi r18,6
719 0404 9695 1: lsr r25
720 0406 8795 ror r24
721 0408 2A95 dec r18
722 040a 01F4 brne 1b
723 040c 842B or r24,r20
724 040e 835C subi r24,lo8(-(61))
725 0410 8083 st Z,r24
726 0412 0894 sec
727 0414 E11C adc r14,__zero_reg__
728 0416 F11C adc r15,__zero_reg__
729 0418 F701 movw r30,r14
730 041a E050 subi r30,lo8(-(TxdBuffer))
731 041c F040 sbci r31,hi8(-(TxdBuffer))
732 041e 1F73 andi r17,lo8(63)
733 0420 135C subi r17,lo8(-(61))
734 0422 1083 st Z,r17
735 0424 0894 sec
736 0426 E11C adc r14,__zero_reg__
737 0428 F11C adc r15,__zero_reg__
738 042a 00C0 rjmp .L50
739 .L49:
740 042c C701 movw r24,r14
741 042e 0E94 0000 call AddCRC
742 /* epilogue: frame size=0 */
743 0432 E9E0 ldi r30,9
744 0434 0C94 0000 jmp __epilogue_restores__+18
745 /* epilogue end (size=3) */
746 /* function SendOutData size 191 (182) */
748 .global Decode64
750 Decode64:
751 /* prologue: frame size=0 */
752 /* prologue end (size=0) */
753 0438 A3E0 ldi r26,lo8(3)
754 043a 7A2F mov r23,r26
755 043c 4091 0000 lds r20,AnzahlEmpfangsBytes
756 0440 4650 subi r20,lo8(-(-6))
757 .L62:
758 0442 4423 tst r20
759 0444 01F4 brne .+2
760 0446 00C0 rjmp .L53
761 0448 E72F mov r30,r23
762 044a FF27 clr r31
763 044c E050 subi r30,lo8(-(RxdBuffer))
764 044e F040 sbci r31,hi8(-(RxdBuffer))
765 0450 8081 ld r24,Z
766 0452 8D53 subi r24,lo8(-(-61))
767 0454 7F5F subi r23,lo8(-(1))
768 0456 E72F mov r30,r23
769 0458 FF27 clr r31
770 045a E050 subi r30,lo8(-(RxdBuffer))
771 045c F040 sbci r31,hi8(-(RxdBuffer))
772 045e 2081 ld r18,Z
773 0460 2D53 subi r18,lo8(-(-61))
774 0462 7F5F subi r23,lo8(-(1))
775 0464 E72F mov r30,r23
776 0466 FF27 clr r31
777 0468 E050 subi r30,lo8(-(RxdBuffer))
778 046a F040 sbci r31,hi8(-(RxdBuffer))
779 046c 3081 ld r19,Z
780 046e 3D53 subi r19,lo8(-(-61))
781 0470 7F5F subi r23,lo8(-(1))
782 0472 E72F mov r30,r23
783 0474 FF27 clr r31
784 0476 E050 subi r30,lo8(-(RxdBuffer))
785 0478 F040 sbci r31,hi8(-(RxdBuffer))
786 047a 6081 ld r22,Z
787 047c 6D53 subi r22,lo8(-(-61))
788 047e 7F5F subi r23,lo8(-(1))
789 0480 9927 clr r25
790 0482 880F lsl r24
791 0484 991F rol r25
792 0486 880F lsl r24
793 0488 991F rol r25
794 048a 522F mov r21,r18
795 048c 5295 swap r21
796 048e 5F70 andi r21,0x0f
797 0490 582B or r21,r24
798 0492 822F mov r24,r18
799 0494 9927 clr r25
800 0496 8F70 andi r24,lo8(15)
801 0498 9070 andi r25,hi8(15)
802 049a F4E0 ldi r31,4
803 049c 880F 1: lsl r24
804 049e 991F rol r25
805 04a0 FA95 dec r31
806 04a2 01F4 brne 1b
807 04a4 232F mov r18,r19
808 04a6 2695 lsr r18
809 04a8 2695 lsr r18
810 04aa 282B or r18,r24
811 04ac 832F mov r24,r19
812 04ae 9927 clr r25
813 04b0 8370 andi r24,lo8(3)
814 04b2 9070 andi r25,hi8(3)
815 04b4 E6E0 ldi r30,6
816 04b6 880F 1: lsl r24
817 04b8 991F rol r25
818 04ba EA95 dec r30
819 04bc 01F4 brne 1b
820 04be 682B or r22,r24
821 04c0 4150 subi r20,lo8(-(-1))
822 04c2 4F3F cpi r20,lo8(-1)
823 04c4 01F0 breq .L53
824 04c6 EA2F mov r30,r26
825 04c8 FF27 clr r31
826 04ca E050 subi r30,lo8(-(RxdBuffer))
827 04cc F040 sbci r31,hi8(-(RxdBuffer))
828 04ce 5083 st Z,r21
829 04d0 AF5F subi r26,lo8(-(1))
830 04d2 4150 subi r20,lo8(-(-1))
831 04d4 4F3F cpi r20,lo8(-1)
832 04d6 01F0 breq .L53
833 04d8 EA2F mov r30,r26
834 04da FF27 clr r31
835 04dc E050 subi r30,lo8(-(RxdBuffer))
836 04de F040 sbci r31,hi8(-(RxdBuffer))
837 04e0 2083 st Z,r18
838 04e2 AF5F subi r26,lo8(-(1))
839 04e4 4150 subi r20,lo8(-(-1))
840 04e6 4F3F cpi r20,lo8(-1)
841 04e8 01F0 breq .L53
842 04ea EA2F mov r30,r26
843 04ec FF27 clr r31
844 04ee E050 subi r30,lo8(-(RxdBuffer))
845 04f0 F040 sbci r31,hi8(-(RxdBuffer))
846 04f2 6083 st Z,r22
847 04f4 AF5F subi r26,lo8(-(1))
848 04f6 00C0 rjmp .L62
849 .L53:
850 04f8 80E0 ldi r24,lo8(RxdBuffer+3)
851 04fa 90E0 ldi r25,hi8(RxdBuffer+3)
852 04fc 9093 0000 sts (pRxData)+1,r25
853 0500 8093 0000 sts pRxData,r24
854 0504 A350 subi r26,lo8(-(-3))
855 0506 A093 0000 sts RxDataLen,r26
856 /* epilogue: frame size=0 */
857 050a 0895 ret
858 /* epilogue end (size=1) */
859 /* function Decode64 size 106 (105) */
861 .global BearbeiteRxDaten
863 BearbeiteRxDaten:
864 /* prologue: frame size=2 */
865 050c A2E0 ldi r26,lo8(2)
866 050e B0E0 ldi r27,hi8(2)
867 0510 E0E0 ldi r30,pm_lo8(1f)
868 0512 F0E0 ldi r31,pm_hi8(1f)
869 0514 0C94 0000 jmp __prologue_saves__+30
870 1:
871 /* prologue end (size=6) */
872 0518 8091 0000 lds r24,NeuerDatensatzEmpfangen
873 051c 8823 tst r24
874 051e 01F4 brne .+2
875 0520 00C0 rjmp .L63
876 0522 0E94 0000 call Decode64
877 0526 8091 0000 lds r24,RxdBuffer+1
878 052a 8236 cpi r24,lo8(98)
879 052c 01F0 breq .+2
880 052e 00C0 rjmp .L145
881 0530 8091 0000 lds r24,RxdBuffer+2
882 0534 9927 clr r25
883 0536 8037 cpi r24,112
884 0538 9105 cpc r25,__zero_reg__
885 053a 01F4 brne .+2
886 053c 00C0 rjmp .L82
887 053e 8137 cpi r24,113
888 0540 9105 cpc r25,__zero_reg__
889 0542 04F4 brge .L141
890 0544 8A36 cpi r24,106
891 0546 9105 cpc r25,__zero_reg__
892 0548 01F4 brne .+2
893 054a 00C0 rjmp .L128
894 054c 8B36 cpi r24,107
895 054e 9105 cpc r25,__zero_reg__
896 0550 04F4 brge .L142
897 0552 8B34 cpi r24,75
898 0554 9105 cpc r25,__zero_reg__
899 0556 01F0 breq .L68
900 0558 8636 cpi r24,102
901 055a 9105 cpc r25,__zero_reg__
902 055c 01F4 brne .+2
903 055e 00C0 rjmp .L108
904 0560 00C0 rjmp .L145
905 .L142:
906 0562 8D36 cpi r24,109
907 0564 9105 cpc r25,__zero_reg__
908 0566 01F4 brne .+2
909 0568 00C0 rjmp .L76
910 056a 8E36 cpi r24,110
911 056c 9105 cpc r25,__zero_reg__
912 056e 01F4 brne .+2
913 0570 00C0 rjmp .L73
914 0572 00C0 rjmp .L145
915 .L141:
916 0574 8437 cpi r24,116
917 0576 9105 cpc r25,__zero_reg__
918 0578 01F0 breq .L69
919 057a 8537 cpi r24,117
920 057c 9105 cpc r25,__zero_reg__
921 057e 04F4 brge .L143
922 0580 8137 cpi r24,113
923 0582 9105 cpc r25,__zero_reg__
924 0584 01F4 brne .+2
925 0586 00C0 rjmp .L83
926 0588 8337 cpi r24,115
927 058a 9105 cpc r25,__zero_reg__
928 058c 01F4 brne .+2
929 058e 00C0 rjmp .L101
930 0590 00C0 rjmp .L145
931 .L143:
932 0592 8737 cpi r24,119
933 0594 9105 cpc r25,__zero_reg__
934 0596 01F4 brne .+2
935 0598 00C0 rjmp .L121
936 059a 8837 cpi r24,120
937 059c 9105 cpc r25,__zero_reg__
938 059e 04F4 brge .L144
939 05a0 8537 cpi r24,117
940 05a2 9105 cpc r25,__zero_reg__
941 05a4 01F4 brne .+2
942 05a6 00C0 rjmp .L115
943 05a8 00C0 rjmp .L145
944 .L144:
945 05aa 8937 cpi r24,121
946 05ac 9105 cpc r25,__zero_reg__
947 05ae 01F4 brne .+2
948 05b0 00C0 rjmp .L114
949 05b2 00C0 rjmp .L145
950 .L68:
951 05b4 E091 0000 lds r30,pRxData
952 05b8 F091 0000 lds r31,(pRxData)+1
953 05bc 8081 ld r24,Z
954 05be 9181 ldd r25,Z+1
955 05c0 9093 0000 sts (KompassValue)+1,r25
956 05c4 8093 0000 sts KompassValue,r24
957 05c8 00C0 rjmp .L145
958 .L69:
959 05ca 8091 0000 lds r24,AnzahlEmpfangsBytes
960 05ce A091 0000 lds r26,pRxData
961 05d2 B091 0000 lds r27,(pRxData)+1
962 05d6 8531 cpi r24,lo8(21)
963 05d8 00F0 brlo .L70
964 05da 80E1 ldi r24,lo8(16)
965 05dc E0E0 ldi r30,lo8(MotorTest)
966 05de F0E0 ldi r31,hi8(MotorTest)
967 05e0 0D90 ld __tmp_reg__,X+
968 05e2 0192 st Z+,__tmp_reg__
969 05e4 8A95 dec r24
970 05e6 01F4 brne .-8
971 05e8 00C0 rjmp .L71
972 .L70:
973 05ea 8D91 ld r24,X+
974 05ec 9D91 ld r25,X+
975 05ee 0D90 ld __tmp_reg__,X+
976 05f0 BC91 ld r27,X
977 05f2 A02D mov r26,__tmp_reg__
978 05f4 8093 0000 sts MotorTest,r24
979 05f8 9093 0000 sts (MotorTest)+1,r25
980 05fc A093 0000 sts (MotorTest)+2,r26
981 0600 B093 0000 sts (MotorTest)+3,r27
982 .L71:
983 0604 80EF ldi r24,lo8(-16)
984 0606 8093 0000 sts PC_MotortestActive,r24
985 060a 00C0 rjmp .L182
986 .L73:
987 060c 8091 0000 lds r24,UebertragungAbgeschlossen
988 0610 8823 tst r24
989 0612 01F0 breq .L73
990 0614 8DE4 ldi r24,lo8(77)
991 0616 90E0 ldi r25,hi8(77)
992 0618 9F93 push r25
993 061a 8F93 push r24
994 061c 80E0 ldi r24,lo8(Mixer)
995 061e 90E0 ldi r25,hi8(Mixer)
996 0620 9F93 push r25
997 0622 8F93 push r24
998 0624 81E0 ldi r24,lo8(1)
999 0626 8F93 push r24
1000 0628 8F93 push r24
1001 062a 8EE4 ldi r24,lo8(78)
1002 062c 8F93 push r24
1003 062e 0E94 0000 call SendOutData
1004 0632 8DB7 in r24,__SP_L__
1005 0634 9EB7 in r25,__SP_H__
1006 0636 0796 adiw r24,7
1007 0638 8DBF out __SP_L__,r24
1008 063a 00C0 rjmp .L145
1009 .L76:
1010 063c A091 0000 lds r26,pRxData
1011 0640 B091 0000 lds r27,(pRxData)+1
1012 0644 1C91 ld r17,X
1013 0646 1130 cpi r17,lo8(1)
1014 0648 01F4 brne .L77
1015 064a 8DE4 ldi r24,lo8(77)
1016 064c E0E0 ldi r30,lo8(Mixer)
1017 064e F0E0 ldi r31,hi8(Mixer)
1018 0650 0D90 ld __tmp_reg__,X+
1019 0652 0192 st Z+,__tmp_reg__
1020 0654 8A95 dec r24
1021 0656 01F4 brne .-8
1022 0658 0E94 0000 call MixerTable_WriteToEEProm
1023 065c 1983 std Y+1,r17
1024 065e 8091 0000 lds r24,VersionInfo+6
1025 0662 8F7E andi r24,lo8(-17)
1026 0664 8093 0000 sts VersionInfo+6,r24
1027 0668 00C0 rjmp .L79
1028 .L77:
1029 066a 1982 std Y+1,__zero_reg__
1030 .L79:
1031 066c 8091 0000 lds r24,UebertragungAbgeschlossen
1032 0670 8823 tst r24
1033 0672 01F0 breq .L79
1034 0674 81E0 ldi r24,lo8(1)
1035 0676 90E0 ldi r25,hi8(1)
1036 0678 9F93 push r25
1037 067a 8F93 push r24
1038 067c CE01 movw r24,r28
1039 067e 0196 adiw r24,1
1040 0680 9F93 push r25
1041 0682 8F93 push r24
1042 0684 81E0 ldi r24,lo8(1)
1043 0686 8F93 push r24
1044 0688 8F93 push r24
1045 068a 8DE4 ldi r24,lo8(77)
1046 068c 8F93 push r24
1047 068e 0E94 0000 call SendOutData
1048 0692 ADB7 in r26,__SP_L__
1049 0694 BEB7 in r27,__SP_H__
1050 0696 1796 adiw r26,7
1051 0698 ADBF out __SP_L__,r26
1052 069a 00C0 rjmp .L145
1053 .L82:
1054 069c 81E0 ldi r24,lo8(1)
1055 069e 8093 0000 sts GetPPMChannelAnforderung,r24
1056 .L182:
1057 06a2 8FEF ldi r24,lo8(-1)
1058 06a4 8093 0000 sts PcZugriff,r24
1059 06a8 00C0 rjmp .L145
1060 .L83:
1061 06aa E091 0000 lds r30,pRxData
1062 06ae F091 0000 lds r31,(pRxData)+1
1063 06b2 E081 ld r30,Z
1064 06b4 8E2F mov r24,r30
1065 06b6 8A50 subi r24,lo8(-(-10))
1066 06b8 8A30 cpi r24,lo8(10)
1067 06ba 00F4 brsh .L84
1068 06bc 8983 std Y+1,r24
1069 06be 8823 tst r24
1070 06c0 01F4 brne .L85
1071 06c2 81E0 ldi r24,lo8(1)
1072 06c4 00C0 rjmp .L176
1073 .L85:
1074 06c6 8630 cpi r24,lo8(6)
1075 06c8 00F0 brlo .L86
1076 06ca 85E0 ldi r24,lo8(5)
1077 .L176:
1078 06cc 8983 std Y+1,r24
1079 .L86:
1080 06ce 61E0 ldi r22,lo8(1)
1081 06d0 00C0 rjmp .L179
1082 .L84:
1083 06d2 8E2F mov r24,r30
1084 06d4 8451 subi r24,lo8(-(-20))
1085 06d6 8A30 cpi r24,lo8(10)
1086 06d8 00F4 brsh .L89
1087 06da 8983 std Y+1,r24
1088 06dc 8823 tst r24
1089 06de 01F4 brne .L90
1090 06e0 81E0 ldi r24,lo8(1)
1091 06e2 00C0 rjmp .L177
1092 .L90:
1093 06e4 8630 cpi r24,lo8(6)
1094 06e6 00F0 brlo .L91
1095 06e8 85E0 ldi r24,lo8(5)
1096 .L177:
1097 06ea 8983 std Y+1,r24
1098 .L91:
1099 06ec 60E0 ldi r22,lo8(0)
1100 .L179:
1101 06ee 8981 ldd r24,Y+1
1102 06f0 0E94 0000 call SetDefaultParameter
1103 06f4 00C0 rjmp .L98
1104 .L89:
1105 06f6 E983 std Y+1,r30
1106 06f8 EF3F cpi r30,lo8(-1)
1107 06fa 01F4 brne .L94
1108 06fc 0E94 0000 call GetActiveParamSet
1109 0700 8983 std Y+1,r24
1110 .L94:
1111 0702 8981 ldd r24,Y+1
1112 0704 8823 tst r24
1113 0706 01F4 brne .L95
1114 0708 81E0 ldi r24,lo8(1)
1115 070a 00C0 rjmp .L178
1116 .L95:
1117 070c 8630 cpi r24,lo8(6)
1118 070e 00F0 brlo .L96
1119 0710 85E0 ldi r24,lo8(5)
1120 .L178:
1121 0712 8983 std Y+1,r24
1122 .L96:
1123 0714 8981 ldd r24,Y+1
1124 0716 0E94 0000 call ParamSet_ReadFromEEProm
1125 .L98:
1126 071a 8091 0000 lds r24,UebertragungAbgeschlossen
1127 071e 8823 tst r24
1128 0720 01F0 breq .L98
1129 0722 8CE7 ldi r24,lo8(124)
1130 0724 90E0 ldi r25,hi8(124)
1131 0726 9F93 push r25
1132 0728 8F93 push r24
1133 072a 80E0 ldi r24,lo8(EE_Parameter)
1134 072c 90E0 ldi r25,hi8(EE_Parameter)
1135 072e 9F93 push r25
1136 0730 8F93 push r24
1137 0732 81E0 ldi r24,lo8(1)
1138 0734 90E0 ldi r25,hi8(1)
1139 0736 9F93 push r25
1140 0738 8F93 push r24
1141 073a CE01 movw r24,r28
1142 073c 0196 adiw r24,1
1143 073e 9F93 push r25
1144 0740 8F93 push r24
1145 0742 82E0 ldi r24,lo8(2)
1146 0744 8F93 push r24
1147 0746 81E0 ldi r24,lo8(1)
1148 0748 8F93 push r24
1149 074a 81E5 ldi r24,lo8(81)
1150 074c 00C0 rjmp .L185
1151 .L101:
1152 074e 2091 0000 lds r18,pRxData
1153 0752 3091 0000 lds r19,(pRxData)+1
1154 0756 D901 movw r26,r18
1155 0758 8C91 ld r24,X
1156 075a 8150 subi r24,lo8(-(-1))
1157 075c 8530 cpi r24,lo8(5)
1158 075e 00F0 brlo .+2
1159 0760 00C0 rjmp .L102
1160 0762 F901 movw r30,r18
1161 0764 8181 ldd r24,Z+1
1162 0766 8C35 cpi r24,lo8(92)
1163 0768 01F0 breq .+2
1164 076a 00C0 rjmp .L102
1165 076c 8091 0000 lds r24,MotorenEin
1166 0770 8823 tst r24
1167 0772 01F4 brne .L102
1168 0774 2F5F subi r18,lo8(-(1))
1169 0776 3F4F sbci r19,hi8(-(1))
1170 0778 8CE7 ldi r24,lo8(124)
1171 077a E0E0 ldi r30,lo8(EE_Parameter)
1172 077c F0E0 ldi r31,hi8(EE_Parameter)
1173 077e D901 movw r26,r18
1174 0780 0D90 ld __tmp_reg__,X+
1175 0782 0192 st Z+,__tmp_reg__
1176 0784 8A95 dec r24
1177 0786 01F4 brne .-8
1178 0788 F901 movw r30,r18
1179 078a 8291 ld r24,-Z
1180 078c 0E94 0000 call ParamSet_WriteToEEProm
1181 0790 8091 0000 lds r24,EE_Parameter+65
1182 0794 9927 clr r25
1183 0796 AA27 clr r26
1184 0798 BB27 clr r27
1185 079a BC01 movw r22,r24
1186 079c CD01 movw r24,r26
1187 079e 24EC ldi r18,lo8(2500)
1188 07a0 39E0 ldi r19,hi8(2500)
1189 07a2 40E0 ldi r20,hlo8(2500)
1190 07a4 50E0 ldi r21,hhi8(2500)
1191 07a6 0E94 0000 call __mulsi3
1192 07aa DC01 movw r26,r24
1193 07ac CB01 movw r24,r22
1194 07ae 8093 0000 sts Umschlag180Nick,r24
1195 07b2 9093 0000 sts (Umschlag180Nick)+1,r25
1196 07b6 A093 0000 sts (Umschlag180Nick)+2,r26
1197 07ba B093 0000 sts (Umschlag180Nick)+3,r27
1198 07be 8091 0000 lds r24,EE_Parameter+66
1199 07c2 9927 clr r25
1200 07c4 AA27 clr r26
1201 07c6 BB27 clr r27
1202 07c8 BC01 movw r22,r24
1203 07ca CD01 movw r24,r26
1204 07cc 0E94 0000 call __mulsi3
1205 07d0 DC01 movw r26,r24
1206 07d2 CB01 movw r24,r22
1207 07d4 8093 0000 sts Umschlag180Roll,r24
1208 07d8 9093 0000 sts (Umschlag180Roll)+1,r25
1209 07dc A093 0000 sts (Umschlag180Roll)+2,r26
1210 07e0 B093 0000 sts (Umschlag180Roll)+3,r27
1211 07e4 0E94 0000 call GetActiveParamSet
1212 07e8 8983 std Y+1,r24
1213 07ea 00C0 rjmp .L104
1214 .L102:
1215 07ec 1982 std Y+1,__zero_reg__
1216 .L104:
1217 07ee 8091 0000 lds r24,UebertragungAbgeschlossen
1218 07f2 8823 tst r24
1219 07f4 01F0 breq .L104
1220 07f6 81E0 ldi r24,lo8(1)
1221 07f8 90E0 ldi r25,hi8(1)
1222 07fa 9F93 push r25
1223 07fc 8F93 push r24
1224 07fe CE01 movw r24,r28
1225 0800 0196 adiw r24,1
1226 0802 9F93 push r25
1227 0804 8F93 push r24
1228 0806 81E0 ldi r24,lo8(1)
1229 0808 8F93 push r24
1230 080a 8F93 push r24
1231 080c 83E5 ldi r24,lo8(83)
1232 080e 8F93 push r24
1233 0810 0E94 0000 call SendOutData
1234 0814 8DB7 in r24,__SP_L__
1235 0816 9EB7 in r25,__SP_H__
1236 0818 0796 adiw r24,7
1237 081a 8DBF out __SP_L__,r24
1238 081c 00C0 rjmp .L186
1239 .L108:
1240 081e E091 0000 lds r30,pRxData
1241 0822 F091 0000 lds r31,(pRxData)+1
1242 0826 E081 ld r30,Z
1243 0828 8E2F mov r24,r30
1244 082a 8150 subi r24,lo8(-(-1))
1245 082c 8530 cpi r24,lo8(5)
1246 082e 00F4 brsh .L109
1247 0830 8E2F mov r24,r30
1248 0832 0E94 0000 call ParamSet_ReadFromEEProm
1249 .L109:
1250 0836 0E94 0000 call GetActiveParamSet
1251 083a 8983 std Y+1,r24
1252 .L110:
1253 083c 8091 0000 lds r24,UebertragungAbgeschlossen
1254 0840 8823 tst r24
1255 0842 01F0 breq .L110
1256 0844 81E0 ldi r24,lo8(1)
1257 0846 90E0 ldi r25,hi8(1)
1258 0848 9F93 push r25
1259 084a 8F93 push r24
1260 084c CE01 movw r24,r28
1261 084e 0196 adiw r24,1
1262 0850 9F93 push r25
1263 0852 8F93 push r24
1264 0854 81E0 ldi r24,lo8(1)
1265 0856 8F93 push r24
1266 0858 8F93 push r24
1267 085a 86E4 ldi r24,lo8(70)
1268 085c 8F93 push r24
1269 085e 0E94 0000 call SendOutData
1270 0862 ADB7 in r26,__SP_L__
1271 0864 BEB7 in r27,__SP_H__
1272 0866 1796 adiw r26,7
1273 0868 ADBF out __SP_L__,r26
1274 .L186:
1275 086a 8091 0000 lds r24,MotorenEin
1276 086e 8823 tst r24
1277 0870 01F4 brne .L113
1278 0872 6EE6 ldi r22,lo8(110)
1279 0874 70E0 ldi r23,hi8(110)
1280 0876 8981 ldd r24,Y+1
1281 0878 0E94 0000 call Piep
1282 .L113:
1283 087c 80E0 ldi r24,lo8(0)
1284 087e 0E94 0000 call LipoDetection
1285 0882 8091 0000 lds r24,EE_Parameter+39
1286 0886 0E94 0000 call LIBFC_ReceiverInit
1287 088a 00C0 rjmp .L145
1288 .L114:
1289 088c E091 0000 lds r30,pRxData
1290 0890 F091 0000 lds r31,(pRxData)+1
1291 0894 8081 ld r24,Z
1292 0896 9927 clr r25
1293 0898 87FD sbrc r24,7
1294 089a 9095 com r25
1295 089c 9093 0000 sts (PPM_in+26)+1,r25
1296 08a0 8093 0000 sts PPM_in+26,r24
1297 08a4 8181 ldd r24,Z+1
1298 08a6 9927 clr r25
1299 08a8 87FD sbrc r24,7
1300 08aa 9095 com r25
1301 08ac 9093 0000 sts (PPM_in+28)+1,r25
1302 08b0 8093 0000 sts PPM_in+28,r24
1303 08b4 8281 ldd r24,Z+2
1304 08b6 9927 clr r25
1305 08b8 87FD sbrc r24,7
1306 08ba 9095 com r25
1307 08bc 9093 0000 sts (PPM_in+30)+1,r25
1308 08c0 8093 0000 sts PPM_in+30,r24
1309 08c4 8381 ldd r24,Z+3
1310 08c6 9927 clr r25
1311 08c8 87FD sbrc r24,7
1312 08ca 9095 com r25
1313 08cc 9093 0000 sts (PPM_in+32)+1,r25
1314 08d0 8093 0000 sts PPM_in+32,r24
1315 08d4 8481 ldd r24,Z+4
1316 08d6 9927 clr r25
1317 08d8 87FD sbrc r24,7
1318 08da 9095 com r25
1319 08dc 9093 0000 sts (PPM_in+34)+1,r25
1320 08e0 8093 0000 sts PPM_in+34,r24
1321 08e4 8581 ldd r24,Z+5
1322 08e6 9927 clr r25
1323 08e8 87FD sbrc r24,7
1324 08ea 9095 com r25
1325 08ec 9093 0000 sts (PPM_in+36)+1,r25
1326 08f0 8093 0000 sts PPM_in+36,r24
1327 08f4 8681 ldd r24,Z+6
1328 08f6 9927 clr r25
1329 08f8 87FD sbrc r24,7
1330 08fa 9095 com r25
1331 08fc 9093 0000 sts (PPM_in+38)+1,r25
1332 0900 8093 0000 sts PPM_in+38,r24
1333 0904 8781 ldd r24,Z+7
1334 0906 9927 clr r25
1335 0908 87FD sbrc r24,7
1336 090a 9095 com r25
1337 090c 9093 0000 sts (PPM_in+40)+1,r25
1338 0910 8093 0000 sts PPM_in+40,r24
1339 0914 8085 ldd r24,Z+8
1340 0916 9927 clr r25
1341 0918 87FD sbrc r24,7
1342 091a 9095 com r25
1343 091c 9093 0000 sts (PPM_in+42)+1,r25
1344 0920 8093 0000 sts PPM_in+42,r24
1345 0924 8185 ldd r24,Z+9
1346 0926 9927 clr r25
1347 0928 87FD sbrc r24,7
1348 092a 9095 com r25
1349 092c 9093 0000 sts (PPM_in+44)+1,r25
1350 0930 8093 0000 sts PPM_in+44,r24
1351 0934 8285 ldd r24,Z+10
1352 0936 9927 clr r25
1353 0938 87FD sbrc r24,7
1354 093a 9095 com r25
1355 093c 9093 0000 sts (PPM_in+46)+1,r25
1356 0940 8093 0000 sts PPM_in+46,r24
1357 0944 8385 ldd r24,Z+11
1358 0946 9927 clr r25
1359 0948 87FD sbrc r24,7
1360 094a 9095 com r25
1361 094c 9093 0000 sts (PPM_in+48)+1,r25
1362 0950 8093 0000 sts PPM_in+48,r24
1363 0954 00C0 rjmp .L145
1364 .L115:
1365 0956 E091 0000 lds r30,pRxData
1366 095a F091 0000 lds r31,(pRxData)+1
1367 095e 8081 ld r24,Z
1368 0960 0E94 0000 call I2C_ReadBLConfig
1369 0964 8A83 std Y+2,r24
1370 0966 8823 tst r24
1371 0968 01F4 brne .L116
1372 096a 81E0 ldi r24,lo8(1)
1373 096c 8983 std Y+1,r24
1374 096e 00C0 rjmp .L118
1375 .L116:
1376 0970 1982 std Y+1,__zero_reg__
1377 .L118:
1378 0972 8091 0000 lds r24,UebertragungAbgeschlossen
1379 0976 8823 tst r24
1380 0978 01F0 breq .L118
1381 097a 88E0 ldi r24,lo8(8)
1382 097c 90E0 ldi r25,hi8(8)
1383 097e 9F93 push r25
1384 0980 8F93 push r24
1385 0982 80E0 ldi r24,lo8(BLConfig)
1386 0984 90E0 ldi r25,hi8(BLConfig)
1387 0986 9F93 push r25
1388 0988 8F93 push r24
1389 098a 21E0 ldi r18,lo8(1)
1390 098c 30E0 ldi r19,hi8(1)
1391 098e 3F93 push r19
1392 0990 2F93 push r18
1393 0992 8091 0000 lds r24,pRxData
1394 0996 9091 0000 lds r25,(pRxData)+1
1395 099a 9F93 push r25
1396 099c 8F93 push r24
1397 099e 3F93 push r19
1398 09a0 2F93 push r18
1399 09a2 CE01 movw r24,r28
1400 09a4 0296 adiw r24,2
1401 09a6 9F93 push r25
1402 09a8 8F93 push r24
1403 09aa 3F93 push r19
1404 09ac 2F93 push r18
1405 09ae CE01 movw r24,r28
1406 09b0 820F add r24,r18
1407 09b2 931F adc r25,r19
1408 09b4 9F93 push r25
1409 09b6 8F93 push r24
1410 09b8 84E0 ldi r24,lo8(4)
1411 09ba 8F93 push r24
1412 09bc 81E0 ldi r24,lo8(1)
1413 09be 8F93 push r24
1414 09c0 85E5 ldi r24,lo8(85)
1415 09c2 8F93 push r24
1416 09c4 0E94 0000 call SendOutData
1417 09c8 EDB7 in r30,__SP_L__
1418 09ca FEB7 in r31,__SP_H__
1419 09cc 7396 adiw r30,19
1420 09ce 00C0 rjmp .L181
1421 .L121:
1422 09d0 8091 0000 lds r24,RxDataLen
1423 09d4 8930 cpi r24,lo8(9)
1424 09d6 00F4 brsh .+2
1425 09d8 00C0 rjmp .L145
1426 09da 2091 0000 lds r18,pRxData
1427 09de 3091 0000 lds r19,(pRxData)+1
1428 09e2 2F5F subi r18,lo8(-(1))
1429 09e4 3F4F sbci r19,hi8(-(1))
1430 09e6 88E0 ldi r24,lo8(8)
1431 09e8 A0E0 ldi r26,lo8(BLConfig)
1432 09ea B0E0 ldi r27,hi8(BLConfig)
1433 09ec F901 movw r30,r18
1434 09ee 0190 ld __tmp_reg__,Z+
1435 09f0 0D92 st X+,__tmp_reg__
1436 09f2 8A95 dec r24
1437 09f4 01F4 brne .-8
1438 09f6 D901 movw r26,r18
1439 09f8 8E91 ld r24,-X
1440 09fa 0E94 0000 call I2C_WriteBLConfig
1441 09fe 8A83 std Y+2,r24
1442 0a00 8823 tst r24
1443 0a02 01F4 brne .L123
1444 0a04 81E0 ldi r24,lo8(1)
1445 0a06 8983 std Y+1,r24
1446 0a08 00C0 rjmp .L125
1447 .L123:
1448 0a0a 1982 std Y+1,__zero_reg__
1449 .L125:
1450 0a0c 8091 0000 lds r24,UebertragungAbgeschlossen
1451 0a10 8823 tst r24
1452 0a12 01F0 breq .L125
1453 0a14 21E0 ldi r18,lo8(1)
1454 0a16 30E0 ldi r19,hi8(1)
1455 0a18 3F93 push r19
1456 0a1a 2F93 push r18
1457 0a1c CE01 movw r24,r28
1458 0a1e 0296 adiw r24,2
1459 0a20 9F93 push r25
1460 0a22 8F93 push r24
1461 0a24 3F93 push r19
1462 0a26 2F93 push r18
1463 0a28 CE01 movw r24,r28
1464 0a2a 820F add r24,r18
1465 0a2c 931F adc r25,r19
1466 0a2e 9F93 push r25
1467 0a30 8F93 push r24
1468 0a32 82E0 ldi r24,lo8(2)
1469 0a34 8F93 push r24
1470 0a36 81E0 ldi r24,lo8(1)
1471 0a38 8F93 push r24
1472 0a3a 87E5 ldi r24,lo8(87)
1473 .L185:
1474 0a3c 8F93 push r24
1475 0a3e 0E94 0000 call SendOutData
1476 0a42 EDB7 in r30,__SP_L__
1477 0a44 FEB7 in r31,__SP_H__
1478 0a46 3B96 adiw r30,11
1479 .L181:
1480 0a48 EDBF out __SP_L__,r30
1481 0a4a 00C0 rjmp .L145
1482 .L128:
1483 0a4c 8091 0000 lds r24,MotorenEin
1484 0a50 8823 tst r24
1485 0a52 01F0 breq .+2
1486 0a54 00C0 rjmp .L145
1487 0a56 0E94 0000 call LIBFC_GetCPUType
1488 0a5a 8983 std Y+1,r24
1489 0a5c 8230 cpi r24,lo8(2)
1490 0a5e 01F0 breq .L131
1491 0a60 8430 cpi r24,lo8(4)
1492 0a62 01F0 breq .+2
1493 0a64 00C0 rjmp .L145
1494 .L131:
1495 0a66 20E4 ldi r18,lo8(64)
1496 0a68 30E0 ldi r19,hi8(64)
1497 /* #APP */
1498 0a6a F894 cli
1499 /* #NOAPP */
1500 0a6c 8091 C100 lds r24,193
1501 0a70 8F73 andi r24,lo8(63)
1502 0a72 8093 C100 sts 193,r24
1503 0a76 8091 C900 lds r24,201
1504 0a7a 8F73 andi r24,lo8(63)
1505 0a7c 8093 C900 sts 201,r24
1506 0a80 8091 C100 lds r24,193
1507 0a84 877E andi r24,lo8(-25)
1508 0a86 8093 C100 sts 193,r24
1509 0a8a 8091 C900 lds r24,201
1510 0a8e 877E andi r24,lo8(-25)
1511 0a90 8093 C900 sts 201,r24
1512 .L180:
1513 0a94 8091 C800 lds r24,200
1514 0a98 87FF sbrs r24,7
1515 0a9a 00C0 rjmp .L173
1516 0a9c 8091 CE00 lds r24,206
1517 0aa0 00C0 rjmp .L180
1518 .L173:
1519 0aa2 8091 C000 lds r24,192
1520 0aa6 87FF sbrs r24,7
1521 0aa8 00C0 rjmp .L175
1522 0aaa 8091 C600 lds r24,198
1523 0aae 00C0 rjmp .L173
1524 .L175:
1525 0ab0 E091 0000 lds r30,pRxData
1526 0ab4 F091 0000 lds r31,(pRxData)+1
1527 0ab8 E081 ld r30,Z
1528 0aba E130 cpi r30,lo8(1)
1529 0abc 01F4 brne .L138
1530 0abe 82E0 ldi r24,lo8(2)
1531 0ac0 8093 0000 sts ReceiverUpdateModeActive,r24
1532 0ac4 00C0 rjmp .L139
1533 .L138:
1534 0ac6 E436 cpi r30,lo8(100)
1535 0ac8 01F4 brne .L140
1536 0aca 21E8 ldi r18,lo8(129)
1537 0acc 30E0 ldi r19,hi8(129)
1538 .L140:
1539 0ace 81E0 ldi r24,lo8(1)
1540 0ad0 8093 0000 sts ReceiverUpdateModeActive,r24
1541 0ad4 832F mov r24,r19
1542 0ad6 9927 clr r25
1543 0ad8 8093 CD00 sts 205,r24
1544 0adc 2093 CC00 sts 204,r18
1545 0ae0 8091 CD00 lds r24,205
1546 0ae4 8093 C500 sts 197,r24
1547 0ae8 8091 CC00 lds r24,204
1548 0aec 8093 C400 sts 196,r24
1549 0af0 8091 CA00 lds r24,202
1550 0af4 8F7D andi r24,lo8(-33)
1551 0af6 8093 CA00 sts 202,r24
1552 0afa 8091 CA00 lds r24,202
1553 0afe 8F7E andi r24,lo8(-17)
1554 0b00 8093 CA00 sts 202,r24
1555 0b04 8091 C900 lds r24,201
1556 0b08 8B7F andi r24,lo8(-5)
1557 0b0a 8093 C900 sts 201,r24
1558 0b0e 8091 CA00 lds r24,202
1559 0b12 8460 ori r24,lo8(4)
1560 0b14 8093 CA00 sts 202,r24
1561 0b18 8091 CA00 lds r24,202
1562 0b1c 8260 ori r24,lo8(2)
1563 0b1e 8093 CA00 sts 202,r24
1564 .L139:
1565 0b22 8091 CA00 lds r24,202
1566 0b26 877F andi r24,lo8(-9)
1567 0b28 8093 CA00 sts 202,r24
1568 0b2c 8091 C200 lds r24,194
1569 0b30 877F andi r24,lo8(-9)
1570 0b32 8093 C200 sts 194,r24
1571 0b36 8091 C900 lds r24,201
1572 0b3a 8E7F andi r24,lo8(-2)
1573 0b3c 8093 C900 sts 201,r24
1574 0b40 8091 C100 lds r24,193
1575 0b44 8861 ori r24,lo8(24)
1576 0b46 8093 C100 sts 193,r24
1577 0b4a 8091 C900 lds r24,201
1578 0b4e 8861 ori r24,lo8(24)
1579 0b50 8093 C900 sts 201,r24
1580 0b54 8091 C100 lds r24,193
1581 0b58 8068 ori r24,lo8(-128)
1582 0b5a 8093 C100 sts 193,r24
1583 0b5e 8091 C900 lds r24,201
1584 0b62 8068 ori r24,lo8(-128)
1585 0b64 8093 C900 sts 201,r24
1586 0b68 1092 6E00 sts 110,__zero_reg__
1587 0b6c 1092 6F00 sts 111,__zero_reg__
1588 0b70 1092 7000 sts 112,__zero_reg__
1589 /* #APP */
1590 0b74 7894 sei
1591 /* #NOAPP */
1592 .L145:
1593 0b76 8091 0000 lds r24,RxdBuffer+2
1594 0b7a 9927 clr r25
1595 0b7c 8436 cpi r24,100
1596 0b7e 9105 cpc r25,__zero_reg__
1597 0b80 01F4 brne .+2
1598 0b82 00C0 rjmp .L160
1599 0b84 8536 cpi r24,101
1600 0b86 9105 cpc r25,__zero_reg__
1601 0b88 04F4 brge .L169
1602 0b8a 8136 cpi r24,97
1603 0b8c 9105 cpc r25,__zero_reg__
1604 0b8e 01F4 brne .+2
1605 0b90 00C0 rjmp .L154
1606 0b92 8236 cpi r24,98
1607 0b94 9105 cpc r25,__zero_reg__
1608 0b96 04F4 brge .L170
1609 0b98 8B34 cpi r24,75
1610 0b9a 9105 cpc r25,__zero_reg__
1611 0b9c 01F4 brne .+2
1612 0b9e 00C0 rjmp .L153
1613 0ba0 00C0 rjmp .L65
1614 .L170:
1615 0ba2 8236 cpi r24,98
1616 0ba4 9105 cpc r25,__zero_reg__
1617 0ba6 01F4 brne .+2
1618 0ba8 00C0 rjmp .L156
1619 0baa 8336 cpi r24,99
1620 0bac 9105 cpc r25,__zero_reg__
1621 0bae 01F4 brne .+2
1622 0bb0 00C0 rjmp .L157
1623 0bb2 00C0 rjmp .L65
1624 .L169:
1625 0bb4 8C36 cpi r24,108
1626 0bb6 9105 cpc r25,__zero_reg__
1627 0bb8 01F4 brne .+2
1628 0bba 00C0 rjmp .L165
1629 0bbc 8D36 cpi r24,109
1630 0bbe 9105 cpc r25,__zero_reg__
1631 0bc0 04F4 brge .L171
1632 0bc2 8736 cpi r24,103
1633 0bc4 9105 cpc r25,__zero_reg__
1634 0bc6 01F4 brne .+2
1635 0bc8 00C0 rjmp .L167
1636 0bca 8836 cpi r24,104
1637 0bcc 9105 cpc r25,__zero_reg__
1638 0bce 01F4 brne .+2
1639 0bd0 00C0 rjmp .L162
1640 0bd2 00C0 rjmp .L65
1641 .L171:
1642 0bd4 8437 cpi r24,116
1643 0bd6 9105 cpc r25,__zero_reg__
1644 0bd8 01F0 breq .L147
1645 0bda 8637 cpi r24,118
1646 0bdc 9105 cpc r25,__zero_reg__
1647 0bde 01F4 brne .+2
1648 0be0 00C0 rjmp .L166
1649 0be2 00C0 rjmp .L65
1650 .L147:
1651 0be4 8091 0000 lds r24,AnzahlEmpfangsBytes
1652 0be8 A091 0000 lds r26,pRxData
1653 0bec B091 0000 lds r27,(pRxData)+1
1654 0bf0 8031 cpi r24,lo8(16)
1655 0bf2 00F0 brlo .L148
1656 0bf4 80E1 ldi r24,lo8(16)
1657 0bf6 E0E0 ldi r30,lo8(MotorTest)
1658 0bf8 F0E0 ldi r31,hi8(MotorTest)
1659 0bfa 0D90 ld __tmp_reg__,X+
1660 0bfc 0192 st Z+,__tmp_reg__
1661 0bfe 8A95 dec r24
1662 0c00 01F4 brne .-8
1663 0c02 00C0 rjmp .L150
1664 .L148:
1665 0c04 8D91 ld r24,X+
1666 0c06 9D91 ld r25,X+
1667 0c08 0D90 ld __tmp_reg__,X+
1668 0c0a BC91 ld r27,X
1669 0c0c A02D mov r26,__tmp_reg__
1670 0c0e 8093 0000 sts MotorTest,r24
1671 0c12 9093 0000 sts (MotorTest)+1,r25
1672 0c16 A093 0000 sts (MotorTest)+2,r26
1673 0c1a B093 0000 sts (MotorTest)+3,r27
1674 .L150:
1675 0c1e 8091 0000 lds r24,UebertragungAbgeschlossen
1676 0c22 8823 tst r24
1677 0c24 01F0 breq .L150
1678 0c26 1F92 push __zero_reg__
1679 0c28 8091 0000 lds r24,MeineSlaveAdresse
1680 0c2c 8F93 push r24
1681 0c2e 84E5 ldi r24,lo8(84)
1682 0c30 8F93 push r24
1683 0c32 0E94 0000 call SendOutData
1684 0c36 8AEF ldi r24,lo8(-6)
1685 0c38 8093 0000 sts PC_MotortestActive,r24
1686 0c3c 8FEF ldi r24,lo8(-1)
1687 0c3e 8093 0000 sts PcZugriff,r24
1688 0c42 80EA ldi r24,lo8(4000)
1689 0c44 9FE0 ldi r25,hi8(4000)
1690 0c46 0E94 0000 call SetDelay
1691 0c4a 9093 0000 sts (AboTimeOut)+1,r25
1692 0c4e 8093 0000 sts AboTimeOut,r24
1693 0c52 0F90 pop __tmp_reg__
1694 0c54 0F90 pop __tmp_reg__
1695 0c56 0F90 pop __tmp_reg__
1696 0c58 00C0 rjmp .L65
1697 .L153:
1698 0c5a E091 0000 lds r30,pRxData
1699 0c5e F091 0000 lds r31,(pRxData)+1
1700 0c62 8081 ld r24,Z
1701 0c64 9181 ldd r25,Z+1
1702 0c66 9093 0000 sts (KompassValue)+1,r25
1703 0c6a 8093 0000 sts KompassValue,r24
1704 0c6e 00C0 rjmp .L65
1705 .L154:
1706 0c70 E091 0000 lds r30,pRxData
1707 0c74 F091 0000 lds r31,(pRxData)+1
1708 0c78 8081 ld r24,Z
1709 0c7a 8093 0000 sts DebugTextAnforderung,r24
1710 0c7e 8032 cpi r24,lo8(32)
1711 0c80 00F0 brlo .L183
1712 0c82 8FE1 ldi r24,lo8(31)
1713 0c84 8093 0000 sts DebugTextAnforderung,r24
1714 0c88 00C0 rjmp .L183
1715 .L156:
1716 0c8a A091 0000 lds r26,pRxData
1717 0c8e B091 0000 lds r27,(pRxData)+1
1718 0c92 8BE0 ldi r24,lo8(11)
1719 0c94 E0E0 ldi r30,lo8(ExternControl)
1720 0c96 F0E0 ldi r31,hi8(ExternControl)
1721 0c98 0D90 ld __tmp_reg__,X+
1722 0c9a 0192 st Z+,__tmp_reg__
1723 0c9c 8A95 dec r24
1724 0c9e 01F4 brne .-8
1725 0ca0 8091 0000 lds r24,ExternControl+9
1726 0ca4 8093 0000 sts ConfirmFrame,r24
1727 .L183:
1728 0ca8 8FEF ldi r24,lo8(-1)
1729 0caa 8093 0000 sts PcZugriff,r24
1730 0cae 00C0 rjmp .L65
1731 .L157:
1732 0cb0 8091 0000 lds r24,Intervall3D
1733 0cb4 9091 0000 lds r25,(Intervall3D)+1
1734 0cb8 892B or r24,r25
1735 0cba 01F4 brne .L158
1736 0cbc E091 0000 lds r30,pRxData
1737 0cc0 F091 0000 lds r31,(pRxData)+1
1738 0cc4 E081 ld r30,Z
1739 0cc6 EE23 tst r30
1740 0cc8 01F0 breq .L158
1741 0cca 8AE0 ldi r24,lo8(10)
1742 0ccc E89F mul r30,r24
1743 0cce C001 movw r24,r0
1744 0cd0 1124 clr r1
1745 0cd2 0E94 0000 call SetDelay
1746 0cd6 9093 0000 sts (Timer3D)+1,r25
1747 0cda 8093 0000 sts Timer3D,r24
1748 .L158:
1749 0cde E091 0000 lds r30,pRxData
1750 0ce2 F091 0000 lds r31,(pRxData)+1
1751 0ce6 9081 ld r25,Z
1752 0ce8 8AE0 ldi r24,lo8(10)
1753 0cea 989F mul r25,r24
1754 0cec C001 movw r24,r0
1755 0cee 1124 clr r1
1756 0cf0 9093 0000 sts (Intervall3D)+1,r25
1757 0cf4 8093 0000 sts Intervall3D,r24
1758 0cf8 00C0 rjmp .L161
1759 .L160:
1760 0cfa 8FEF ldi r24,lo8(-1)
1761 0cfc 8093 0000 sts PcZugriff,r24
1762 0d00 E091 0000 lds r30,pRxData
1763 0d04 F091 0000 lds r31,(pRxData)+1
1764 0d08 9081 ld r25,Z
1765 0d0a 8AE0 ldi r24,lo8(10)
1766 0d0c 989F mul r25,r24
1767 0d0e C001 movw r24,r0
1768 0d10 1124 clr r1
1769 0d12 9093 0000 sts (DebugDataIntervall)+1,r25
1770 0d16 8093 0000 sts DebugDataIntervall,r24
1771 0d1a 892B or r24,r25
1772 0d1c 01F0 breq .L161
1773 0d1e 81E0 ldi r24,lo8(1)
1774 0d20 8093 0000 sts DebugDataAnforderung,r24
1775 .L161:
1776 0d24 80EA ldi r24,lo8(4000)
1777 0d26 9FE0 ldi r25,hi8(4000)
1778 0d28 0E94 0000 call SetDelay
1779 0d2c 9093 0000 sts (AboTimeOut)+1,r25
1780 0d30 8093 0000 sts AboTimeOut,r24
1781 0d34 00C0 rjmp .L65
1782 .L162:
1783 0d36 8FEF ldi r24,lo8(-1)
1784 0d38 8093 0000 sts PcZugriff,r24
1785 0d3c E091 0000 lds r30,pRxData
1786 0d40 F091 0000 lds r31,(pRxData)+1
1787 0d44 9081 ld r25,Z
1788 0d46 97FD sbrc r25,7
1789 0d48 00C0 rjmp .L163
1790 0d4a 82E0 ldi r24,lo8(2)
1791 0d4c 8093 0000 sts DisplayLine,r24
1792 0d50 1092 0000 sts (Display_Interval)+1,__zero_reg__
1793 0d54 1092 0000 sts Display_Interval,__zero_reg__
1794 0d58 00C0 rjmp .L164
1795 .L163:
1796 0d5a 9095 com r25
1797 0d5c 8091 0000 lds r24,RemoteKeys
1798 0d60 892B or r24,r25
1799 0d62 8093 0000 sts RemoteKeys,r24
1800 0d66 9181 ldd r25,Z+1
1801 0d68 8AE0 ldi r24,lo8(10)
1802 0d6a 989F mul r25,r24
1803 0d6c C001 movw r24,r0
1804 0d6e 1124 clr r1
1805 0d70 9093 0000 sts (Display_Interval)+1,r25
1806 0d74 8093 0000 sts Display_Interval,r24
1807 0d78 84E0 ldi r24,lo8(4)
1808 0d7a 8093 0000 sts DisplayLine,r24
1809 0d7e 80EA ldi r24,lo8(4000)
1810 0d80 9FE0 ldi r25,hi8(4000)
1811 0d82 0E94 0000 call SetDelay
1812 0d86 9093 0000 sts (AboTimeOut)+1,r25
1813 0d8a 8093 0000 sts AboTimeOut,r24
1814 .L164:
1815 0d8e 81E0 ldi r24,lo8(1)
1816 0d90 8093 0000 sts DebugDisplayAnforderung,r24
1817 0d94 00C0 rjmp .L65
1818 .L165:
1819 0d96 8FEF ldi r24,lo8(-1)
1820 0d98 8093 0000 sts PcZugriff,r24
1821 0d9c E091 0000 lds r30,pRxData
1822 0da0 F091 0000 lds r31,(pRxData)+1
1823 0da4 8081 ld r24,Z
1824 0da6 8093 0000 sts MenuePunkt,r24
1825 0daa 81E0 ldi r24,lo8(1)
1826 0dac 8093 0000 sts DebugDisplayAnforderung1,r24
1827 0db0 00C0 rjmp .L65
1828 .L166:
1829 0db2 81E0 ldi r24,lo8(1)
1830 0db4 8093 0000 sts GetVersionAnforderung,r24
1831 0db8 00C0 rjmp .L65
1832 .L167:
1833 0dba 81E0 ldi r24,lo8(1)
1834 0dbc 8093 0000 sts GetExternalControl,r24
1835 .L65:
1836 0dc0 1092 0000 sts NeuerDatensatzEmpfangen,__zero_reg__
1837 0dc4 1092 0000 sts (pRxData)+1,__zero_reg__
1838 0dc8 1092 0000 sts pRxData,__zero_reg__
1839 0dcc 1092 0000 sts RxDataLen,__zero_reg__
1840 .L63:
1841 /* epilogue: frame size=2 */
1842 0dd0 E3E0 ldi r30,3
1843 0dd2 CE5F subi r28,-2
1844 0dd4 0C94 0000 jmp __epilogue_restores__+30
1845 /* epilogue end (size=4) */
1846 /* function BearbeiteRxDaten size 1128 (1118) */
1848 .global uart_putchar
1850 uart_putchar:
1851 /* prologue: frame size=0 */
1852 /* prologue end (size=0) */
1853 0dd8 982F mov r25,r24
1854 .L188:
1855 0dda 8091 C000 lds r24,192
1856 0dde 85FF sbrs r24,5
1857 0de0 00C0 rjmp .L188
1858 0de2 9093 C600 sts 198,r25
1859 /* epilogue: frame size=0 */
1860 0de6 0895 ret
1861 /* epilogue end (size=1) */
1862 /* function uart_putchar size 8 (7) */
1864 .global UART_Init
1866 UART_Init:
1867 /* prologue: frame size=0 */
1868 0de8 0F93 push r16
1869 0dea 1F93 push r17
1870 /* prologue end (size=2) */
1871 0dec 88E1 ldi r24,lo8(24)
1872 0dee 8093 C100 sts 193,r24
1873 0df2 8091 C000 lds r24,192
1874 0df6 8260 ori r24,lo8(2)
1875 0df8 8093 C000 sts 192,r24
1876 0dfc 8091 C100 lds r24,193
1877 0e00 8068 ori r24,lo8(-128)
1878 0e02 8093 C100 sts 193,r24
1879 0e06 8091 C100 lds r24,193
1880 0e0a 8064 ori r24,lo8(64)
1881 0e0c 8093 C100 sts 193,r24
1882 0e10 00E0 ldi r16,lo8(0)
1883 0e12 10E0 ldi r17,hi8(0)
1884 0e14 0093 C500 sts 197,r16
1885 0e18 8AE2 ldi r24,lo8(42)
1886 0e1a 90E0 ldi r25,hi8(42)
1887 0e1c 8093 C400 sts 196,r24
1888 0e20 8091 0000 lds r24,DebugDataIntervall
1889 0e24 9091 0000 lds r25,(DebugDataIntervall)+1
1890 0e28 0E94 0000 call SetDelay
1891 0e2c 9093 0000 sts (Debug_Timer)+1,r25
1892 0e30 8093 0000 sts Debug_Timer,r24
1893 0e34 8CED ldi r24,lo8(220)
1894 0e36 90E0 ldi r25,hi8(220)
1895 0e38 0E94 0000 call SetDelay
1896 0e3c 9093 0000 sts (Kompass_Timer)+1,r25
1897 0e40 8093 0000 sts Kompass_Timer,r24
1898 0e44 1092 0000 sts VersionInfo,__zero_reg__
1899 0e48 8AE5 ldi r24,lo8(90)
1900 0e4a 8093 0000 sts VersionInfo+1,r24
1901 0e4e 83E0 ldi r24,lo8(3)
1902 0e50 8093 0000 sts VersionInfo+4,r24
1903 0e54 8BE0 ldi r24,lo8(11)
1904 0e56 8093 0000 sts VersionInfo+2,r24
1905 0e5a 1092 0000 sts VersionInfo+3,__zero_reg__
1906 0e5e 1093 0000 sts (pRxData)+1,r17
1907 0e62 0093 0000 sts pRxData,r16
1908 0e66 1092 0000 sts RxDataLen,__zero_reg__
1909 /* epilogue: frame size=0 */
1910 0e6a 1F91 pop r17
1911 0e6c 0F91 pop r16
1912 0e6e 0895 ret
1913 /* epilogue end (size=3) */
1914 /* function UART_Init size 68 (63) */
1916 .section .progmem.data
1919 __c.0:
1920 0200 2121 2120 .string "!!! INCOMPATIBLE !!!"
1920 494E 434F
1920 4D50 4154
1920 4942 4C45
1920 2021 2121
1921 .text
1922 .global DatenUebertragung
1924 DatenUebertragung:
1925 /* prologue: frame size=16 */
1926 0e70 A0E1 ldi r26,lo8(16)
1927 0e72 B0E0 ldi r27,hi8(16)
1928 0e74 E0E0 ldi r30,pm_lo8(1f)
1929 0e76 F0E0 ldi r31,pm_hi8(1f)
1930 0e78 0C94 0000 jmp __prologue_saves__+24
1931 1:
1932 /* prologue end (size=6) */
1933 0e7c 8091 0000 lds r24,UebertragungAbgeschlossen
1934 0e80 8823 tst r24
1935 0e82 01F4 brne .+2
1936 0e84 00C0 rjmp .L192
1937 0e86 8091 0000 lds r24,AboTimeOut
1938 0e8a 9091 0000 lds r25,(AboTimeOut)+1
1939 0e8e 0E94 0000 call CheckDelay
1940 0e92 8823 tst r24
1941 0e94 01F0 breq .L194
1942 0e96 1092 0000 sts (Display_Interval)+1,__zero_reg__
1943 0e9a 1092 0000 sts Display_Interval,__zero_reg__
1944 0e9e 1092 0000 sts (DebugDataIntervall)+1,__zero_reg__
1945 0ea2 1092 0000 sts DebugDataIntervall,__zero_reg__
1946 0ea6 1092 0000 sts (Intervall3D)+1,__zero_reg__
1947 0eaa 1092 0000 sts Intervall3D,__zero_reg__
1948 .L194:
1949 0eae 8091 0000 lds r24,Display_Interval
1950 0eb2 9091 0000 lds r25,(Display_Interval)+1
1951 0eb6 892B or r24,r25
1952 0eb8 01F0 breq .L197
1953 0eba 8091 0000 lds r24,Display_Timer
1954 0ebe 9091 0000 lds r25,(Display_Timer)+1
1955 0ec2 0E94 0000 call CheckDelay
1956 0ec6 8823 tst r24
1957 0ec8 01F4 brne .L196
1958 .L197:
1959 0eca 8091 0000 lds r24,DebugDisplayAnforderung
1960 0ece 8823 tst r24
1961 0ed0 01F4 brne .+2
1962 0ed2 00C0 rjmp .L195
1963 .L196:
1964 0ed4 8091 0000 lds r24,UebertragungAbgeschlossen
1965 0ed8 8823 tst r24
1966 0eda 01F4 brne .+2
1967 0edc 00C0 rjmp .L195
1968 0ede 8091 0000 lds r24,DisplayLine
1969 0ee2 00E0 ldi r16,lo8(DisplayBuff)
1970 0ee4 10E0 ldi r17,hi8(DisplayBuff)
1971 0ee6 8430 cpi r24,lo8(4)
1972 0ee8 00F0 brlo .L198
1973 0eea 0E94 0000 call Menu
1974 0eee 80E5 ldi r24,lo8(80)
1975 0ef0 90E0 ldi r25,hi8(80)
1976 0ef2 9F93 push r25
1977 0ef4 8F93 push r24
1978 0ef6 1F93 push r17
1979 0ef8 0F93 push r16
1980 0efa 81E0 ldi r24,lo8(1)
1981 0efc 8F93 push r24
1982 0efe 8F93 push r24
1983 0f00 88E4 ldi r24,lo8(72)
1984 0f02 8F93 push r24
1985 0f04 0E94 0000 call SendOutData
1986 0f08 2DB7 in r18,__SP_L__
1987 0f0a 3EB7 in r19,__SP_H__
1988 0f0c 295F subi r18,lo8(-(7))
1989 0f0e 3F4F sbci r19,hi8(-(7))
1990 0f10 2DBF out __SP_L__,r18
1991 0f12 00C0 rjmp .L199
1992 .L198:
1993 0f14 1092 0000 sts DispPtr,__zero_reg__
1994 0f18 80E0 ldi r24,lo8(__c.0)
1995 0f1a 90E0 ldi r25,hi8(__c.0)
1996 0f1c 9F93 push r25
1997 0f1e 8F93 push r24
1998 0f20 80E0 ldi r24,lo8(pm(Menu_Putchar))
1999 0f22 90E0 ldi r25,hi8(pm(Menu_Putchar))
2000 0f24 9F93 push r25
2001 0f26 8F93 push r24
2002 0f28 E091 0000 lds r30,_printf_P
2003 0f2c F091 0000 lds r31,(_printf_P)+1
2004 0f30 0995 icall
2005 0f32 84E1 ldi r24,lo8(20)
2006 0f34 90E0 ldi r25,hi8(20)
2007 0f36 9F93 push r25
2008 0f38 8F93 push r24
2009 0f3a 1F93 push r17
2010 0f3c 0F93 push r16
2011 0f3e 81E0 ldi r24,lo8(1)
2012 0f40 90E0 ldi r25,hi8(1)
2013 0f42 9F93 push r25
2014 0f44 8F93 push r24
2015 0f46 80E0 ldi r24,lo8(DisplayLine)
2016 0f48 90E0 ldi r25,hi8(DisplayLine)
2017 0f4a 9F93 push r25
2018 0f4c 8F93 push r24
2019 0f4e 82E0 ldi r24,lo8(2)
2020 0f50 8F93 push r24
2021 0f52 81E0 ldi r24,lo8(1)
2022 0f54 8F93 push r24
2023 0f56 88E4 ldi r24,lo8(72)
2024 0f58 8F93 push r24
2025 0f5a 0E94 0000 call SendOutData
2026 0f5e 8091 0000 lds r24,DisplayLine
2027 0f62 982F mov r25,r24
2028 0f64 8F5F subi r24,lo8(-(1))
2029 0f66 8093 0000 sts DisplayLine,r24
2030 0f6a 2DB7 in r18,__SP_L__
2031 0f6c 3EB7 in r19,__SP_H__
2032 0f6e 215F subi r18,lo8(-(15))
2033 0f70 3F4F sbci r19,hi8(-(15))
2034 0f72 2DBF out __SP_L__,r18
2035 0f74 9430 cpi r25,lo8(4)
2036 0f76 00F0 brlo .L199
2037 0f78 1092 0000 sts DisplayLine,__zero_reg__
2038 .L199:
2039 0f7c 8091 0000 lds r24,Display_Interval
2040 0f80 9091 0000 lds r25,(Display_Interval)+1
2041 0f84 0E94 0000 call SetDelay
2042 0f88 9093 0000 sts (Display_Timer)+1,r25
2043 0f8c 8093 0000 sts Display_Timer,r24
2044 0f90 1092 0000 sts DebugDisplayAnforderung,__zero_reg__
2045 .L195:
2046 0f94 8091 0000 lds r24,DebugDisplayAnforderung1
2047 0f98 8823 tst r24
2048 0f9a 01F0 breq .L201
2049 0f9c 8091 0000 lds r24,UebertragungAbgeschlossen
2050 0fa0 8823 tst r24
2051 0fa2 01F0 breq .L201
2052 0fa4 0E94 0000 call Menu
2053 0fa8 80E5 ldi r24,lo8(80)
2054 0faa 90E0 ldi r25,hi8(80)
2055 0fac 9F93 push r25
2056 0fae 8F93 push r24
2057 0fb0 80E0 ldi r24,lo8(DisplayBuff)
2058 0fb2 90E0 ldi r25,hi8(DisplayBuff)
2059 0fb4 9F93 push r25
2060 0fb6 8F93 push r24
2061 0fb8 21E0 ldi r18,lo8(1)
2062 0fba 30E0 ldi r19,hi8(1)
2063 0fbc 3F93 push r19
2064 0fbe 2F93 push r18
2065 0fc0 80E0 ldi r24,lo8(MaxMenue)
2066 0fc2 90E0 ldi r25,hi8(MaxMenue)
2067 0fc4 9F93 push r25
2068 0fc6 8F93 push r24
2069 0fc8 3F93 push r19
2070 0fca 2F93 push r18
2071 0fcc 80E0 ldi r24,lo8(MenuePunkt)
2072 0fce 90E0 ldi r25,hi8(MenuePunkt)
2073 0fd0 9F93 push r25
2074 0fd2 8F93 push r24
2075 0fd4 83E0 ldi r24,lo8(3)
2076 0fd6 8F93 push r24
2077 0fd8 81E0 ldi r24,lo8(1)
2078 0fda 8F93 push r24
2079 0fdc 8CE4 ldi r24,lo8(76)
2080 0fde 8F93 push r24
2081 0fe0 0E94 0000 call SendOutData
2082 0fe4 1092 0000 sts DebugDisplayAnforderung1,__zero_reg__
2083 0fe8 8DB7 in r24,__SP_L__
2084 0fea 9EB7 in r25,__SP_H__
2085 0fec 0F96 adiw r24,15
2086 0fee 8DBF out __SP_L__,r24
2087 .L201:
2088 0ff0 8091 0000 lds r24,GetVersionAnforderung
2089 0ff4 8823 tst r24
2090 0ff6 01F0 breq .L202
2091 0ff8 8091 0000 lds r24,UebertragungAbgeschlossen
2092 0ffc 8823 tst r24
2093 0ffe 01F0 breq .L202
2094 1000 8AE0 ldi r24,lo8(10)
2095 1002 90E0 ldi r25,hi8(10)
2096 1004 9F93 push r25
2097 1006 8F93 push r24
2098 1008 80E0 ldi r24,lo8(VersionInfo)
2099 100a 90E0 ldi r25,hi8(VersionInfo)
2100 100c 9F93 push r25
2101 100e 8F93 push r24
2102 1010 81E0 ldi r24,lo8(1)
2103 1012 8F93 push r24
2104 1014 8F93 push r24
2105 1016 86E5 ldi r24,lo8(86)
2106 1018 8F93 push r24
2107 101a 0E94 0000 call SendOutData
2108 101e 1092 0000 sts GetVersionAnforderung,__zero_reg__
2109 1022 2DB7 in r18,__SP_L__
2110 1024 3EB7 in r19,__SP_H__
2111 1026 295F subi r18,lo8(-(7))
2112 1028 3F4F sbci r19,hi8(-(7))
2113 102a 2DBF out __SP_L__,r18
2114 .L202:
2115 102c 8091 0000 lds r24,GetExternalControl
2116 1030 8823 tst r24
2117 1032 01F0 breq .L203
2118 1034 8091 0000 lds r24,UebertragungAbgeschlossen
2119 1038 8823 tst r24
2120 103a 01F0 breq .L203
2121 103c 8BE0 ldi r24,lo8(11)
2122 103e 90E0 ldi r25,hi8(11)
2123 1040 9F93 push r25
2124 1042 8F93 push r24
2125 1044 80E0 ldi r24,lo8(ExternControl)
2126 1046 90E0 ldi r25,hi8(ExternControl)
2127 1048 9F93 push r25
2128 104a 8F93 push r24
2129 104c 81E0 ldi r24,lo8(1)
2130 104e 8F93 push r24
2131 1050 8091 0000 lds r24,MeineSlaveAdresse
2132 1054 8F93 push r24
2133 1056 87E4 ldi r24,lo8(71)
2134 1058 8F93 push r24
2135 105a 0E94 0000 call SendOutData
2136 105e 1092 0000 sts GetExternalControl,__zero_reg__
2137 1062 8DB7 in r24,__SP_L__
2138 1064 9EB7 in r25,__SP_H__
2139 1066 0796 adiw r24,7
2140 1068 8DBF out __SP_L__,r24
2141 .L203:
2142 106a 8091 0000 lds r24,Kompass_Timer
2143 106e 9091 0000 lds r25,(Kompass_Timer)+1
2144 1072 0E94 0000 call CheckDelay
2145 1076 8823 tst r24
2146 1078 01F4 brne .+2
2147 107a 00C0 rjmp .L204
2148 107c 8091 0000 lds r24,UebertragungAbgeschlossen
2149 1080 8823 tst r24
2150 1082 01F4 brne .+2
2151 1084 00C0 rjmp .L204
2152 1086 8091 0000 lds r24,EE_Parameter+28
2153 108a 9927 clr r25
2154 108c 880F lsl r24
2155 108e 991F rol r25
2156 1090 880F lsl r24
2157 1092 991F rol r25
2158 1094 7C01 movw r14,r24
2159 1096 0027 clr r16
2160 1098 F7FC sbrc r15,7
2161 109a 0095 com r16
2162 109c 102F mov r17,r16
2163 109e 8091 0000 lds r24,IntegralNick
2164 10a2 9091 0000 lds r25,(IntegralNick)+1
2165 10a6 A091 0000 lds r26,(IntegralNick)+2
2166 10aa B091 0000 lds r27,(IntegralNick)+3
2167 10ae BC01 movw r22,r24
2168 10b0 CD01 movw r24,r26
2169 10b2 A801 movw r20,r16
2170 10b4 9701 movw r18,r14
2171 10b6 0E94 0000 call __divmodsi4
2172 10ba 3093 0000 sts (WinkelOut)+1,r19
2173 10be 2093 0000 sts WinkelOut,r18
2174 10c2 8091 0000 lds r24,IntegralRoll
2175 10c6 9091 0000 lds r25,(IntegralRoll)+1
2176 10ca A091 0000 lds r26,(IntegralRoll)+2
2177 10ce B091 0000 lds r27,(IntegralRoll)+3
2178 10d2 BC01 movw r22,r24
2179 10d4 CD01 movw r24,r26
2180 10d6 A801 movw r20,r16
2181 10d8 9701 movw r18,r14
2182 10da 0E94 0000 call __divmodsi4
2183 10de 3093 0000 sts (WinkelOut+2)+1,r19
2184 10e2 2093 0000 sts WinkelOut+2,r18
2185 10e6 8091 0000 lds r24,Parameter_UserParam1
2186 10ea 8093 0000 sts WinkelOut+4,r24
2187 10ee 8091 0000 lds r24,Parameter_UserParam2
2188 10f2 8093 0000 sts WinkelOut+5,r24
2189 10f6 88E0 ldi r24,lo8(8)
2190 10f8 90E0 ldi r25,hi8(8)
2191 10fa 9F93 push r25
2192 10fc 8F93 push r24
2193 10fe 80E0 ldi r24,lo8(WinkelOut)
2194 1100 90E0 ldi r25,hi8(WinkelOut)
2195 1102 9F93 push r25
2196 1104 8F93 push r24
2197 1106 81E0 ldi r24,lo8(1)
2198 1108 8F93 push r24
2199 110a 83E0 ldi r24,lo8(3)
2200 110c 8F93 push r24
2201 110e 8BE6 ldi r24,lo8(107)
2202 1110 8F93 push r24
2203 1112 0E94 0000 call SendOutData
2204 1116 8091 0000 lds r24,WinkelOut+6
2205 111a 2DB7 in r18,__SP_L__
2206 111c 3EB7 in r19,__SP_H__
2207 111e 295F subi r18,lo8(-(7))
2208 1120 3F4F sbci r19,hi8(-(7))
2209 1122 2DBF out __SP_L__,r18
2210 1124 8530 cpi r24,lo8(5)
2211 1126 00F0 brlo .L205
2212 1128 86E0 ldi r24,lo8(6)
2213 112a 8093 0000 sts WinkelOut+6,r24
2214 .L205:
2215 112e 83E6 ldi r24,lo8(99)
2216 1130 90E0 ldi r25,hi8(99)
2217 1132 0E94 0000 call SetDelay
2218 1136 9093 0000 sts (Kompass_Timer)+1,r25
2219 113a 8093 0000 sts Kompass_Timer,r24
2220 .L204:
2221 113e 8091 0000 lds r24,DebugDataIntervall
2222 1142 9091 0000 lds r25,(DebugDataIntervall)+1
2223 1146 892B or r24,r25
2224 1148 01F0 breq .L208
2225 114a 8091 0000 lds r24,Debug_Timer
2226 114e 9091 0000 lds r25,(Debug_Timer)+1
2227 1152 0E94 0000 call CheckDelay
2228 1156 8823 tst r24
2229 1158 01F4 brne .L207
2230 .L208:
2231 115a 8091 0000 lds r24,DebugDataAnforderung
2232 115e 8823 tst r24
2233 1160 01F0 breq .L206
2234 .L207:
2235 1162 8091 0000 lds r24,UebertragungAbgeschlossen
2236 1166 8823 tst r24
2237 1168 01F0 breq .L206
2238 116a 0E94 0000 call CopyDebugValues
2239 116e 82E4 ldi r24,lo8(66)
2240 1170 90E0 ldi r25,hi8(66)
2241 1172 9F93 push r25
2242 1174 8F93 push r24
2243 1176 80E0 ldi r24,lo8(DebugOut)
2244 1178 90E0 ldi r25,hi8(DebugOut)
2245 117a 9F93 push r25
2246 117c 8F93 push r24
2247 117e 81E0 ldi r24,lo8(1)
2248 1180 8F93 push r24
2249 1182 8F93 push r24
2250 1184 84E4 ldi r24,lo8(68)
2251 1186 8F93 push r24
2252 1188 0E94 0000 call SendOutData
2253 118c 1092 0000 sts DebugDataAnforderung,__zero_reg__
2254 1190 8DB7 in r24,__SP_L__
2255 1192 9EB7 in r25,__SP_H__
2256 1194 0796 adiw r24,7
2257 1196 8DBF out __SP_L__,r24
2258 1198 8091 0000 lds r24,DebugDataIntervall
2259 119c 9091 0000 lds r25,(DebugDataIntervall)+1
2260 11a0 0097 sbiw r24,0
2261 11a2 01F0 breq .L206
2262 11a4 0E94 0000 call SetDelay
2263 11a8 9093 0000 sts (Debug_Timer)+1,r25
2264 11ac 8093 0000 sts Debug_Timer,r24
2265 .L206:
2266 11b0 8091 0000 lds r24,Intervall3D
2267 11b4 9091 0000 lds r25,(Intervall3D)+1
2268 11b8 892B or r24,r25
2269 11ba 01F4 brne .+2
2270 11bc 00C0 rjmp .L210
2271 11be 8091 0000 lds r24,Timer3D
2272 11c2 9091 0000 lds r25,(Timer3D)+1
2273 11c6 0E94 0000 call CheckDelay
2274 11ca 8823 tst r24
2275 11cc 01F4 brne .+2
2276 11ce 00C0 rjmp .L210
2277 11d0 8091 0000 lds r24,UebertragungAbgeschlossen
2278 11d4 8823 tst r24
2279 11d6 01F4 brne .+2
2280 11d8 00C0 rjmp .L210
2281 11da 8091 0000 lds r24,EE_Parameter+28
2282 11de 9927 clr r25
2283 11e0 880F lsl r24
2284 11e2 991F rol r25
2285 11e4 880F lsl r24
2286 11e6 991F rol r25
2287 11e8 7C01 movw r14,r24
2288 11ea 0027 clr r16
2289 11ec F7FC sbrc r15,7
2290 11ee 0095 com r16
2291 11f0 102F mov r17,r16
2292 11f2 8091 0000 lds r24,IntegralNick
2293 11f6 9091 0000 lds r25,(IntegralNick)+1
2294 11fa A091 0000 lds r26,(IntegralNick)+2
2295 11fe B091 0000 lds r27,(IntegralNick)+3
2296 1202 BC01 movw r22,r24
2297 1204 CD01 movw r24,r26
2298 1206 A801 movw r20,r16
2299 1208 9701 movw r18,r14
2300 120a 0E94 0000 call __divmodsi4
2301 120e 3093 0000 sts (Data3D)+1,r19
2302 1212 2093 0000 sts Data3D,r18
2303 1216 8091 0000 lds r24,IntegralRoll
2304 121a 9091 0000 lds r25,(IntegralRoll)+1
2305 121e A091 0000 lds r26,(IntegralRoll)+2
2306 1222 B091 0000 lds r27,(IntegralRoll)+3
2307 1226 BC01 movw r22,r24
2308 1228 CD01 movw r24,r26
2309 122a A801 movw r20,r16
2310 122c 9701 movw r18,r14
2311 122e 0E94 0000 call __divmodsi4
2312 1232 3093 0000 sts (Data3D+2)+1,r19
2313 1236 2093 0000 sts Data3D+2,r18
2314 123a 2091 0000 lds r18,ErsatzKompass
2315 123e 3091 0000 lds r19,(ErsatzKompass)+1
2316 1242 4091 0000 lds r20,(ErsatzKompass)+2
2317 1246 5091 0000 lds r21,(ErsatzKompass)+3
2318 124a DA01 movw r26,r20
2319 124c C901 movw r24,r18
2320 124e 63E0 ldi r22,3
2321 1250 880F 1: lsl r24
2322 1252 991F rol r25
2323 1254 AA1F rol r26
2324 1256 BB1F rol r27
2325 1258 6A95 dec r22
2326 125a 01F4 brne 1b
2327 125c 820F add r24,r18
2328 125e 931F adc r25,r19
2329 1260 A41F adc r26,r20
2330 1262 B51F adc r27,r21
2331 1264 820F add r24,r18
2332 1266 931F adc r25,r19
2333 1268 A41F adc r26,r20
2334 126a B51F adc r27,r21
2335 126c 2091 0000 lds r18,GIER_GRAD_FAKTOR
2336 1270 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
2337 1274 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
2338 1278 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
2339 127c BC01 movw r22,r24
2340 127e CD01 movw r24,r26
2341 1280 0E94 0000 call __divmodsi4
2342 1284 3093 0000 sts (Data3D+4)+1,r19
2343 1288 2093 0000 sts Data3D+4,r18
2344 128c 8091 0000 lds r24,SummeNick
2345 1290 9091 0000 lds r25,(SummeNick)+1
2346 1294 A091 0000 lds r26,(SummeNick)+2
2347 1298 B091 0000 lds r27,(SummeNick)+3
2348 129c 49E0 ldi r20,9
2349 129e B595 1: asr r27
2350 12a0 A795 ror r26
2351 12a2 9795 ror r25
2352 12a4 8795 ror r24
2353 12a6 4A95 dec r20
2354 12a8 01F4 brne 1b
2355 12aa 8093 0000 sts Data3D+6,r24
2356 12ae 8091 0000 lds r24,SummeRoll
2357 12b2 9091 0000 lds r25,(SummeRoll)+1
2358 12b6 A091 0000 lds r26,(SummeRoll)+2
2359 12ba B091 0000 lds r27,(SummeRoll)+3
2360 12be 39E0 ldi r19,9
2361 12c0 B595 1: asr r27
2362 12c2 A795 ror r26
2363 12c4 9795 ror r25
2364 12c6 8795 ror r24
2365 12c8 3A95 dec r19
2366 12ca 01F4 brne 1b
2367 12cc 8093 0000 sts Data3D+7,r24
2368 12d0 8091 0000 lds r24,Mess_Integral_Gier
2369 12d4 9091 0000 lds r25,(Mess_Integral_Gier)+1
2370 12d8 A091 0000 lds r26,(Mess_Integral_Gier)+2
2371 12dc B091 0000 lds r27,(Mess_Integral_Gier)+3
2372 12e0 29E0 ldi r18,9
2373 12e2 B595 1: asr r27
2374 12e4 A795 ror r26
2375 12e6 9795 ror r25
2376 12e8 8795 ror r24
2377 12ea 2A95 dec r18
2378 12ec 01F4 brne 1b
2379 12ee 8093 0000 sts Data3D+8,r24
2380 12f2 8EE0 ldi r24,lo8(14)
2381 12f4 90E0 ldi r25,hi8(14)
2382 12f6 9F93 push r25
2383 12f8 8F93 push r24
2384 12fa 80E0 ldi r24,lo8(Data3D)
2385 12fc 90E0 ldi r25,hi8(Data3D)
2386 12fe 9F93 push r25
2387 1300 8F93 push r24
2388 1302 81E0 ldi r24,lo8(1)
2389 1304 8F93 push r24
2390 1306 8F93 push r24
2391 1308 83E4 ldi r24,lo8(67)
2392 130a 8F93 push r24
2393 130c 0E94 0000 call SendOutData
2394 1310 8091 0000 lds r24,Intervall3D
2395 1314 9091 0000 lds r25,(Intervall3D)+1
2396 1318 0E94 0000 call SetDelay
2397 131c 9093 0000 sts (Timer3D)+1,r25
2398 1320 8093 0000 sts Timer3D,r24
2399 1324 2DB7 in r18,__SP_L__
2400 1326 3EB7 in r19,__SP_H__
2401 1328 295F subi r18,lo8(-(7))
2402 132a 3F4F sbci r19,hi8(-(7))
2403 132c 2DBF out __SP_L__,r18
2404 .L210:
2405 132e 8091 0000 lds r24,DebugTextAnforderung
2406 1332 8F3F cpi r24,lo8(-1)
2407 1334 01F0 breq .L211
2408 1336 9927 clr r25
2409 1338 04E0 ldi r16,4
2410 133a 880F 1: lsl r24
2411 133c 991F rol r25
2412 133e 0A95 dec r16
2413 1340 01F4 brne 1b
2414 1342 8050 subi r24,lo8(-(ANALOG_TEXT))
2415 1344 9040 sbci r25,hi8(-(ANALOG_TEXT))
2416 1346 40E1 ldi r20,lo8(16)
2417 1348 50E0 ldi r21,hi8(16)
2418 134a BC01 movw r22,r24
2419 134c CE01 movw r24,r28
2420 134e 0196 adiw r24,1
2421 1350 0E94 0000 call memcpy_P
2422 1354 80E1 ldi r24,lo8(16)
2423 1356 90E0 ldi r25,hi8(16)
2424 1358 9F93 push r25
2425 135a 8F93 push r24
2426 135c CE01 movw r24,r28
2427 135e 0196 adiw r24,1
2428 1360 9F93 push r25
2429 1362 8F93 push r24
2430 1364 81E0 ldi r24,lo8(1)
2431 1366 90E0 ldi r25,hi8(1)
2432 1368 9F93 push r25
2433 136a 8F93 push r24
2434 136c 80E0 ldi r24,lo8(DebugTextAnforderung)
2435 136e 90E0 ldi r25,hi8(DebugTextAnforderung)
2436 1370 9F93 push r25
2437 1372 8F93 push r24
2438 1374 82E0 ldi r24,lo8(2)
2439 1376 8F93 push r24
2440 1378 81E0 ldi r24,lo8(1)
2441 137a 8F93 push r24
2442 137c 81E4 ldi r24,lo8(65)
2443 137e 8F93 push r24
2444 1380 0E94 0000 call SendOutData
2445 1384 8FEF ldi r24,lo8(-1)
2446 1386 8093 0000 sts DebugTextAnforderung,r24
2447 138a 8DB7 in r24,__SP_L__
2448 138c 9EB7 in r25,__SP_H__
2449 138e 0B96 adiw r24,11
2450 1390 8DBF out __SP_L__,r24
2451 .L211:
2452 1392 8091 0000 lds r24,ConfirmFrame
2453 1396 8823 tst r24
2454 1398 01F0 breq .L212
2455 139a 8091 0000 lds r24,UebertragungAbgeschlossen
2456 139e 8823 tst r24
2457 13a0 01F0 breq .L212
2458 13a2 81E0 ldi r24,lo8(1)
2459 13a4 90E0 ldi r25,hi8(1)
2460 13a6 9F93 push r25
2461 13a8 8F93 push r24
2462 13aa 80E0 ldi r24,lo8(ConfirmFrame)
2463 13ac 90E0 ldi r25,hi8(ConfirmFrame)
2464 13ae 9F93 push r25
2465 13b0 8F93 push r24
2466 13b2 81E0 ldi r24,lo8(1)
2467 13b4 8F93 push r24
2468 13b6 8F93 push r24
2469 13b8 82E4 ldi r24,lo8(66)
2470 13ba 8F93 push r24
2471 13bc 0E94 0000 call SendOutData
2472 13c0 1092 0000 sts ConfirmFrame,__zero_reg__
2473 13c4 2DB7 in r18,__SP_L__
2474 13c6 3EB7 in r19,__SP_H__
2475 13c8 295F subi r18,lo8(-(7))
2476 13ca 3F4F sbci r19,hi8(-(7))
2477 13cc 2DBF out __SP_L__,r18
2478 .L212:
2479 13ce 8091 0000 lds r24,GetPPMChannelAnforderung
2480 13d2 8823 tst r24
2481 13d4 01F0 breq .L192
2482 13d6 8091 0000 lds r24,UebertragungAbgeschlossen
2483 13da 8823 tst r24
2484 13dc 01F0 breq .L192
2485 13de 84E3 ldi r24,lo8(52)
2486 13e0 90E0 ldi r25,hi8(52)
2487 13e2 9F93 push r25
2488 13e4 8F93 push r24
2489 13e6 80E0 ldi r24,lo8(PPM_in)
2490 13e8 90E0 ldi r25,hi8(PPM_in)
2491 13ea 9F93 push r25
2492 13ec 8F93 push r24
2493 13ee 81E0 ldi r24,lo8(1)
2494 13f0 8F93 push r24
2495 13f2 8F93 push r24
2496 13f4 80E5 ldi r24,lo8(80)
2497 13f6 8F93 push r24
2498 13f8 0E94 0000 call SendOutData
2499 13fc 1092 0000 sts GetPPMChannelAnforderung,__zero_reg__
2500 1400 8DB7 in r24,__SP_L__
2501 1402 9EB7 in r25,__SP_H__
2502 1404 0796 adiw r24,7
2503 1406 8DBF out __SP_L__,r24
2504 .L192:
2505 /* epilogue: frame size=16 */
2506 1408 E6E0 ldi r30,6
2507 140a C05F subi r28,-16
2508 140c 0C94 0000 jmp __epilogue_restores__+24
2509 /* epilogue end (size=4) */
2510 /* function DatenUebertragung size 720 (710) */
2512 .comm RxdBuffer,175,1
2513 .comm Debug_Timer,2,1
2514 .comm Kompass_Timer,2,1
2515 .comm MotorTest,16,1
2516 .comm DebugOut,66,1
2517 .comm WinkelOut,8,1
2518 .comm Data3D,14,1
2519 .comm ExternControl,11,1
2520 .comm VersionInfo,10,1
2521 .comm TxdBuffer,175,1
2522 .comm ConfirmFrame,1,1
2523 .comm Display_Timer,2,1
2524 .comm Timer3D,2,1
2525 /* File "uart.c": code 2582 = 0x0a16 (2491), prologues 47, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 uart.c
C:\Temp/cc8UwPV0.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc8UwPV0.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc8UwPV0.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc8UwPV0.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc8UwPV0.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc8UwPV0.s:14 .progmem.data:00000000 ANALOG_TEXT
C:\Temp/cc8UwPV0.s:52 .bss:00000000 ReceiverUpdateModeActive
C:\Temp/cc8UwPV0.s:58 .bss:00000001 AboTimeOut
C:\Temp/cc8UwPV0.s:64 .bss:00000003 Display_Interval
C:\Temp/cc8UwPV0.s:70 .bss:00000005 Intervall3D
C:\Temp/cc8UwPV0.s:76 .bss:00000007 DebugDataIntervall
C:\Temp/cc8UwPV0.s:82 .data:00000000 MeineSlaveAdresse
C:\Temp/cc8UwPV0.s:87 .data:00000001 PcZugriff
C:\Temp/cc8UwPV0.s:92 .data:00000002 DebugTextAnforderung
C:\Temp/cc8UwPV0.s:99 .bss:00000009 PC_MotortestActive
C:\Temp/cc8UwPV0.s:105 .bss:0000000a PC_DebugTimeout
C:\Temp/cc8UwPV0.s:111 .bss:0000000b RxDataLen
C:\Temp/cc8UwPV0.s:117 .bss:0000000c pRxData
C:\Temp/cc8UwPV0.s:123 .bss:0000000e AnzahlEmpfangsBytes
C:\Temp/cc8UwPV0.s:129 .bss:0000000f CntCrcError
C:\Temp/cc8UwPV0.s:135 .data:00000003 UebertragungAbgeschlossen
C:\Temp/cc8UwPV0.s:142 .bss:00000010 NeueKoordinateEmpfangen
C:\Temp/cc8UwPV0.s:148 .bss:00000011 NeuerDatensatzEmpfangen
C:\Temp/cc8UwPV0.s:154 .bss:00000012 SioTmp
C:\Temp/cc8UwPV0.s:160 .bss:00000013 DisplayLine
C:\Temp/cc8UwPV0.s:166 .bss:00000014 GetPPMChannelAnforderung
C:\Temp/cc8UwPV0.s:172 .bss:00000015 GetVersionAnforderung
C:\Temp/cc8UwPV0.s:178 .bss:00000016 DebugDataAnforderung
C:\Temp/cc8UwPV0.s:184 .bss:00000017 DebugDisplayAnforderung
C:\Temp/cc8UwPV0.s:190 .bss:00000018 DebugDisplayAnforderung1
C:\Temp/cc8UwPV0.s:196 .bss:00000019 GetExternalControl
.bss:0000001a ptr.6
C:\Temp/cc8UwPV0.s:202 .text:00000000 __vector_22
*COM*:000000af TxdBuffer
C:\Temp/cc8UwPV0.s:198 .bss:0000001c crc.1
C:\Temp/cc8UwPV0.s:256 .bss:0000001e crc1.2
C:\Temp/cc8UwPV0.s:257 .bss:0000001f crc2.3
C:\Temp/cc8UwPV0.s:258 .bss:00000020 buf_ptr.4
C:\Temp/cc8UwPV0.s:259 .bss:00000021 UartState.5
C:\Temp/cc8UwPV0.s:263 .text:0000006c __vector_20
*COM*:000000af RxdBuffer
C:\Temp/cc8UwPV0.s:494 .text:00000260 AddCRC
C:\Temp/cc8UwPV0.s:550 .text:000002c0 SendOutData
C:\Temp/cc8UwPV0.s:750 .text:00000438 Decode64
C:\Temp/cc8UwPV0.s:863 .text:0000050c BearbeiteRxDaten
*COM*:00000010 MotorTest
*COM*:0000000a VersionInfo
*COM*:0000000b ExternControl
*COM*:00000001 ConfirmFrame
*COM*:00000002 Timer3D
C:\Temp/cc8UwPV0.s:1850 .text:00000dd8 uart_putchar
C:\Temp/cc8UwPV0.s:1866 .text:00000de8 UART_Init
*COM*:00000002 Debug_Timer
*COM*:00000002 Kompass_Timer
C:\Temp/cc8UwPV0.s:1919 .progmem.data:00000200 __c.0
C:\Temp/cc8UwPV0.s:1924 .text:00000e70 DatenUebertragung
*COM*:00000002 Display_Timer
*COM*:00000008 WinkelOut
*COM*:00000042 DebugOut
*COM*:0000000e Data3D
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
LcdClear
ServoActive
__prologue_saves__
__epilogue_restores__
KompassValue
Mixer
MixerTable_WriteToEEProm
SetDefaultParameter
GetActiveParamSet
ParamSet_ReadFromEEProm
EE_Parameter
MotorenEin
ParamSet_WriteToEEProm
__mulsi3
Umschlag180Nick
Umschlag180Roll
Piep
LipoDetection
LIBFC_ReceiverInit
PPM_in
I2C_ReadBLConfig
BLConfig
I2C_WriteBLConfig
LIBFC_GetCPUType
SetDelay
RemoteKeys
MenuePunkt
CheckDelay
DisplayBuff
Menu
DispPtr
Menu_Putchar
_printf_P
MaxMenue
IntegralNick
__divmodsi4
IntegralRoll
Parameter_UserParam1
Parameter_UserParam2
CopyDebugValues
ErsatzKompass
GIER_GRAD_FAKTOR
SummeNick
SummeRoll
Mess_Integral_Gier
memcpy_P
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/user_receiver.c
0,0 → 1,23
//############################################################################
// Implement your own RC-decoding routines here
//############################################################################
 
 
//############################################################################
// Initialize the UART here
//############################################################################
void User_Receiver_Init(void)
{
// SpektrumUartInit(); // or use an existing routine like this
};
 
 
//############################################################################
// Is called by the uart RX interrupt
// UDR contains the received byte
//############################################################################
void User_RX_Parser(unsigned char udr)
{
};
 
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/user_receiver.h
0,0 → 1,4
// for own implementations
void User_Receiver_Init(void);
void User_RX_Parser(unsigned char);
 
/branches/v0.90d_Ernstl_4-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/ccW27kvk.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccW27kvk.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccW27kvk.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccW27kvk.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccW27kvk.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccW27kvk.s:13 .text:00000000 User_Receiver_Init
C:\Temp/ccW27kvk.s:23 .text:00000002 User_RX_Parser
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/vector.h
0,0 → 1,19
#ifndef _VECTOR_H
#define _VECTOR_H
 
typedef struct
{
int32_t x;
int32_t y;
int32_t z;
} __attribute__((packed)) vector32_t;
 
typedef struct
{
int16_t x;
int16_t y;
int16_t z;
} __attribute__((packed)) vector16_t;
 
 
#endif //_VECTOR_H
/branches/v0.90d_Ernstl_4-Motoren+Sexpander/version.txt
0,0 → 1,566
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
V0.61 - V0.63 H.Buss 27.09.2007
- Poti 4 und Kanal 8 werden im Menü angezeigt
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt
- Analog.c: Aktuell_ax korrigiert
- auf 32 Debug-Kanäle erweitert
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar
- leichte Anpassungen im Gier - Geschwindigkeit und Drift
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird
- die PPM-Ausgänge liegen wieder an den Pins an
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an
- Sticksignale werden präziser ausgewertet
- Stick-Kanäle werden ans Kopter-Tool übertragen
- Es muss die Version V1.47 des Kopter-Tool verwendet werden
- Die Settings werden auf Default zurückgesetzt
- am Piepen kann man die Fehlerart unterscheiden
1. einzelnes Piepen beim Einschalten und Kalibrieren
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall
3. schnelleres Intervall mindestens 1 Sek -> Akku
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört
V0.64 H.Buss 30.09.2007
- beim Gieren wurden die Achsen nicht hart genug geregelt
V0.65a H.Buss 15.10.2007
- Integral im Mischer wieder integriert
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100
- ACC/Gyro Abgleich auch bei HH
 
V0.66a H.Buss 3.11.2007
- Messwertverarbeitung aus dem Analog-Interrupt entfernt
- Analogmessung hängt jetzt am FC-Timing
- Looping-Stick-Hysterese eingebaut
- Looping-180°-Umschlag einstellbar
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll
- Lageregelung nach ACC-Sensor verbessert
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage
- Gyrodriftkompensation überarbeitet
- Bug in der Gier-Stick-Berechnung behoben
- Gyro-Messung auf 1kHz beschleunigt
V0.67a H.Buss 16.11.2007
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode)
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus
- Feinabstimmung
- Beim HH-Modus gab es noch Bugs
 
V0.67e H.Buss 29.11.2007
- Parameter: Dynamic Stability und Driftfaktor eingeführt
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen
- Kompatibilität zum Koptertool erhöht
 
V0.67f H.Buss 04.12.2007
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts)
V0.68a I.Busker 28.12.2007
- SPI.c & SPI.h ins Projekt aufgenommen
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden
 
V0.68c H.Buss 05.01.2008
- Stickauswertung verbessert -> träger und präziser
- Alle Settings angepasst
 
V0.69e H.Buss 05.05.2008
- kleinere Bugs beseitigt
- Schneller Sinkflug jetzt möglich
- Min- und Maxgas in den Settings geändert
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert
V0.69h H.Buss 21.05.2008
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden
- SenderOkay auch an das Naviboard übertragen
- Bessere Parameter bei Senderausfall
V0.69j H.Buss 30.05.2008
- Höhere Präzision der Achsenkopplung
 
V0.69k H.Buss 31.05.2008
- Bug in SPI.C behoben
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte
 
V0.69L H.Buss 14.06.2008
- feinere Cam-Servo-Auflösung
V0.70a H.Buss 01.07.2008
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich
 
V0.70b H.Buss 14.07.2008
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge)
- eigene Parameter für GPS-Naviboard
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8)
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi...
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt
- KopterTool-Kompatibilität auf 8 erhöht
V0.70c H.Buss 30.07.2008
- Parameter der Datenfusion leicht modifiziert
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85)
- MaxStick wird auf 100 begrenzt
 
V0.70d H.Buss 02.08.2008
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an
0.71b: H.Buss 19.10.2008
Kommunikation zum Navi erweitert:
- Beeptime jetzt 32Bit
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt
0.71c: H.Buss 20.10.2008
- LoopConfig heisst jetzt BitConfig
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab.
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt
 
0.71f: H.Buss 15.11.2008
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1
- VersionInfo.NaviKompatibel eingeführt
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt
- Luftdruckwert wird an das Navi übertragen
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter
- Debugdaten können jetzt mit 'f' gepollt werden
0.71g: Gregor 09.12.2008
- Kommunikation überarbeitet
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands
0.71h: H.Buss 15.12.2008
- Freigegebene Version
- NaviAngleLimitation als Parameter zum Navi implementiert
- Antwort auf CMD: 't' entfernt
0.72d: H.Buss 22.01.2009
- OCTO als Compilerschalter
- Unterstützung der FC 2.0 (ME)
- GYRO_D eingeführt
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung
0.72e: H.Buss 27.01.2009
- die 0.72d hatte kein Integral im Gier
- Parameter eingeführt:
EE_Parameter.NaviGpsPLimit
EE_Parameter.NaviGpsILimit
EE_Parameter.NaviGpsDLimit
EE_Parameter.NaviPH_LoginTime
EE_Parameter.AchsKopplung2
EE_Parameter.CouplingYawCorrection
 
0.72f: H.Buss 28.01.2009
- Bug im Ersatzkompass entfernt
 
0.72h: H.Buss 05.02.2009
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt
- Achsentkopplung weiter verbessert
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt
 
0.72i: H.Buss 07.02.2009
- Abtastrate von 1kHz auf 2kHz erhöht
 
0.72j: H.Buss 09.02.2009
- neue Implementierung der Servoausgänge
 
0.72k: H.Buss 10.02.2009
- Abtastrate auf 5kHz erhöht
 
0.72L: H.Buss 13.02.2009
- Signalfilterung überarbeitet
- OCTO2 implementiert
 
0.72M: H.Buss 13.02.2009
- Code Cleanup
 
0.72o: H.Buss 24.02.2009
- Abtastrate auf 2kHz
- HW-Version an Navi
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik
- Auswerteroutine für Spectrum-Satteliten implementiert
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd)
0.72p: H.Buss 01.03.2009
- Octo3 erstellt
- Analogwerte umbenannt
 
0.73a-d: H.Buss 05.04.2009
- MixerTabelle implementiert
- I2C-Bus auf bis zu 12 Motoren erweitert
- die Busfehler der BL-Regler werden im Menü angezeigt
- Revision der MixerTabelle eingeführt
- MixerTabelle wird bei Parameterreset neu initialisiert
- Motortest auf [12] erweitert
- Motorschalter nicht mehr 3-Stufig
 
0.74a
- Datenfusion im Flug auch, wenn ACC-Z < 512
- Wert für die Luftdruck-Messbereichserweiterung abgefangen
 
0.74d
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts
0.75a G.Stobrawa 22.5.2009
- Extern Control also received from NC via SPI
 
0.75b H.Buss 27.05.2009
- Spektrum-Singale schalten den PPM-Eingang aus
- max. 2 Sekunden nach dem Start auf die BL-Regler warten
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl
- EE_DATENREVISION auf 76 erhöht
- Servo:
- Roll-Servo für FC ME implementiert
- Update-Cmd stoppt Servos
- Servos werden erst nach dem ersten Kalibrieren aktiviert
 
0.75c G.Stobrawa 25.7.2009
- Übertragung der Servo-Settings zur NC
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S)
0.75d H.Buss 13.8.2009
- RC-Routine: Empfangsausfall soll sicherer erkannt werden
- Zellenerkennung nun auch beim Speichern der Settings
- Warnungs-Blinkmaske auch bei Empfangsausfall
 
0.75e H.Buss 18.8.2009
- LED-Blinken kann an die Motoren gekoppelt werden
- Feinabstimmung des Höhenreglers
0.75f H.Buss 27.8.2009
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler
- leichte Modifikation der RC-Empfangroutine
 
0.75g H.Buss 31.08.2009
- die Akkuspannung geht jetzt antiproportional ins Gas ein
 
0.75h H.Buss 3.09.2009
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas
 
0.75i H.Buss 7.09.2009
- GpsZ vom Navi zur FC für den Höhenregler
- "hoovergas-Variation" als Parameter
- Kompatibilität zu NC und PC erhöht
 
0.75j H.Buss 17.09.2009
- Laufzeitzähler eingebaut
 
0.75k H.Buss 22.09.2009
- zweite Variante (Gregor) der Höhenregelung implementiert
- umschaltbare RC-Routine
 
0.75L H.Buss 23.09.2009
- SollHoehe und Gas geht nun auch an die NC
 
0.75M H.Buss 29.09.2009
- Spektrum-Timing wird nun überwacht
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt
0.75N H.Buss 29.09.2009
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler
- Gyro_Gier_P und Gyro_Gier_I eingeführt
- I2C_fehler-Zähler jetzt in den Analogdaten
 
0.75o H.Buss 01.10.2009
- der Höhenregler wird jetzt nur alle 10ms bearbeitet
- Baro-Messbereichserweiterung auch bei Poti als Sollwert
 
0.76d H.Buss 10.10.2009
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen
 
0.76e H.Buss 27.10.2009
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht
- S3D-ACT-Summensignal als Compilerschalter
 
0.76f H.Buss 05.11.2009
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt
0.76g H.Buss 10.11.2009
- Casting-Fehler in der Gas-Berechnung
 
0.77a H.Buss 11.11.2009
- Erweiterung auf 12 Kanäle
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert
- Servos3-5 einstellbar
- neues Kommando "f" -> schaltet auf anderen Parametersatz um
 
0.77b H.Buss 09.12.2009
- JetiBox: Menü wird übertragen
- neu: FCFlags |= FCFLAG_I2CERR;
- LED-Warn-Blinken nun mit festem Timing und abschaltbar
0.77c H.Buss 07.01.2010
- zwei weitere Spektrum-Varianten implementiert
 
0.77d H.Buss 25.01.2010
- Strom-Messung eingebaut
0.78a H.Buss 03.02.2010
- Bugfix: Settingsumschaltung im Flug
 
0.78b H.Buss
- veröffentlichte Version
 
0.78c H.Buss + G.Stobrawa 22.2.2010
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0
- Theoretischer Variablenüberlauf bei Vario-Höhenregler
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv
- LED-Schwellwerte fürs Blinken waren unterschiedlich
 
0.78c H.Buss + G.Stobrawa 04.3.2010
- Code cosmetics
 
0.78f H.Buss + I.Busker 23.3.2010
- Unterstützung für Jeti-Expander
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox
- BL-Timeout beim Start erhöht
 
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010
- Motoren Starten nicht ohne Kalibrierung
- Unterstützung der BL2.0-Regler
- statt 8 nun 10 Bit Auflösung der Lageregekung
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool
- Parametersätze werden per I2C an die BL-Regler durchgereicht
- "Care-Free" implementiert
- Freie Belegung der "Vorne"-Richtung
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt
- #define RECEIVER_SPEKTRUM_EXP eingeführt
- #define SWITCH_LEARNS_CAREFREE eingeführt
- Schwerpunktanzeige in den 3D-Daten
- Checksummen gesicherte Datenablage im EEProm
- Fehlerdiagnose implementiert (Wiki: ErrorCodes)
- ErrorCode aufs Jeti-Display
 
- JetiMenü: bis acht Temperaturen der BL-Regler
- GPSInfo.Speed im Jeti-Display
- Compass-Richtung nun im Jeti-menü
 
- diverse Änderungen im Höhenregler
- P wirkt schwächer
- D wirkt stärker
- Anpassung der Höhenregelung auf Level des Hoovergases
- AccZ schneller nachführen
 
Parameter modifiziert:
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30
- EE_Parameter.Hoehe_HoverBand = 8; // war 5
- Notgas = 45
- NotgasZeit = 90
- Beginnersetting: EE_Parameter.DynamicStability = 70;
- Neu: GyroStability = 6
- GPS-Login-Time auf 2 reduziert
 
0.80e H.Buss 02.08.2010
- MK3Mag ohne NC ging nicht
 
0.80f H.Buss 04.08.2010
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert
 
0.80g H.Buss 11.08.2010
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert
 
0.80h H.Buss 30.08.2010
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist
 
0.82a H.Buss 08.11.2010
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten
- ServoManualControlSpeed - Verlangsamt das Cam-Servo
- CamOrientation - für verdrehte Kamera-Servos
- Position der Status-Bits verändert
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben
- jeti update command 'j' added
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller
- Waypont-Events z.B. zum Triggern der Kamera
- Gyro-Sytbility: Werte bis 16 möglich
 
0.82b H.Buss 08.12.2010
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128)
 
0.84a H.Buss 21.03.2011 (Release: 30.03.2011)
- nur starten, wenn NC_ErrorCode = 0
- Beeptime von NC auch beim Kalibrieren durchlassen
- Varible "JetiBeep" eingeführt
- Kompass-Winkelvorgabe von NaviControl -> POI
- Piepen beim Umschalten von CareFree
- Compass-Routinen überarbeitet
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst
- Defaultreceiver ist RECEIVER_JETI
- GPS-Operation-Radius per default auf 245m bzw. 100%
- Höhenvorgabe im Vario-Mode durch Waypoints
- bei laufenden Motoren keine neuen Settings annehmen
- immer einmal Carefree Beepen nach dem Kalibrieren
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel
 
0.86a H.Buss 13.09.2011
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen
- GPS-Sollwertverschiebung
- Empfangs-Piepen unterdrücken -> einstellbar
- MotorSmooth einstellbar
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position
- Coming Home mit Höhenvorgabe
- Coming Home als Failsafe
- Einführung des GPS-Characters (- / W H D P)
- Klartext bei den Jeti-Fehlermeldungen
- Jeti-Beep "3*kurz" bei NC-Errors
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert
- GPS-Angle limit von 100 auf 140
- GPS-I-Limit von 75 auf 85
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen;
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.)
- Error-Text auch im virtuellen Display des Koptertools
- virtuelles LCD-Menü:
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt.
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart
- ACC Correction eingeführt
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden
- neue Fehlermeldungen:
"No NC communicat", // 9
"GPS Fix lost ", // 21
"Magnet Error ", // 22
"Motor restart ", // 23
"BL Limitation " // 24
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt
- Ausbau der HoTT-Telemetrie
- Variable "KompassRichtung" entfernt
- ErsatzKompassInGrad sinvoll genutzt
- HoTT-Update per Uart-Durchschleifen
- AltitudeSetpointTrimming eingeführt
- Vario-Anzeige für HoTT
- Verhindern eines Überlaufs im Vario
- echter Varioton auch ohne Vario-Höhenregler
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war
- KompassFusion wird jetzt getrennt von der NC berechnet
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal"
- MagnetError kann man in der Startphase ignorieren
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC
- Einzelströme nun auch bei HoTT angezeigt
0.86b H.Buss 20.09.2011
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann
- grüne LED ging aus - gefixt
- K1-K8 wurden im LCD mit 0-7 bezeichnet
 
0.86c H.Buss 22.09.2011
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti
- Neuer SPI-Block 'SPI_MISC'
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert
- '.' im Vario-Höhenregler
 
0.86d H.Buss 26.09.2011
- Analog.c: Vario Überlauf anders verhinden
- Poti1-6 auch im HoTT-Display
 
0.88 H.Buss 12.12.2011 - 26.03.2012
- Failsafe-Kanal
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC)
- Option: Failsafe-Sinkflug xx% Schwebegas
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an)
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging"
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen
- das sbus-protokoll implementiert (nur FC2.1)
- Schaltkanal auf Servo-Ausgang
- Filter auf den Ausgängen der Servos
- Option: Failsafe-Sinkflug xx% Schwebegas
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude"
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann
- Kompassrichtung neu merken, wenn CF geschaltet wird
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert
 
0.88M H.Buss 15.05.2012
- HoTT V4
- Kamera-Servo beim Kalibrieren weiter laufen lassen.
- Error 30: no GPS fix bei Start
- echter MotorSchalter
 
0.88n H.Buss 06.07.2012
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz
 
0.90 H.Buss 04.03.2013
- Anzeige WP x/Y in der HoTT-Telemetrie
- Schalter und WP-Event gleichzeitig
- Photo-Auslösung als Entfernungsintervalle
- Jeti +
- Kamera-Neitung als Integral
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war
- Auswahl:Speak-All nun in der KopterTool-Config
 
0.90 Ernstl 4-Motoren und Sexpander für DX7
- Aktivierung der Sexpanderunterstützung