Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 2298 → Rev 2299

/branches/v0.90e_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.90e_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.90e_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/ccEG0BrA.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccEG0BrA.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccEG0BrA.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccEG0BrA.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccEG0BrA.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccEG0BrA.s:15 .bss:00000000 GPS_Aid_StickMultiplikator
C:\Temp/ccEG0BrA.s:21 .bss:00000001 GPS_Roll
C:\Temp/ccEG0BrA.s:27 .bss:00000003 GPS_Nick
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_Ernstl_4-Motoren+Sexpander/Hex-Files/Flight-Ctrl_MEGA1284P_V0_90e_SVN.hex
0,0 → 1,4717
:100000000C94F9080C9448090C9448090C9448097C
:100010000C9448090C9448090C9448090C9448091C
:100020000C9448090C94591C0C9448090C944809E8
:100030000C946A360C9448090C9448090C944809AD
:100040000C9448090C9448090C947C180C944809A9
:100050000C94AA0E0C9448090C94740E0C94480944
:100060000C94491F0C9448090C94F0310C944809E5
:100070000C94808F0C9448090C94AF860C9448091A
:100080000C9448090C9448090C944809701F751F7A
:100090007A1F831F9A1FB11FC11FD11F0C20F5218A
:1000A000B11FB720C820F720152132218C21E7216C
:1000B0000224CF245E25DE251626B926C0282A294B
:1000C000A429ED29372A652A922AF52A3F2B892B64
:1000D000822C0F3243328632F6320E334F330634DF
:1000E000CD34CD34CD34CD34CD34CD34CD34CD3408
:1000F000CD34CD34CD34823484348934A134A33426
:100100000E6ACD6A526B816AA86BD86B426AB06A7C
:10011000B2775078D57837798B79F4795481757ABC
:10012000A77AA77AA77AA77AA77AA77AA77AA77AC7
:10013000A77AD57A507BE57B0A7C4D7CA57C307D07
:10014000197E807E807E807E807E807E807E807E26
:10015000807E807EB87ED67EFB7E577F937F028036
:100160002F80CF8054812F812F812F812F812F814C
:100170002F812F812F81D38DD68DD68DD68DDF8D7A
:10018000E28DE58DF78DF48D0A0D3D3D3D3D3D3D04
: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
:10120000A0E0B1E0E0EDF4E201E00BBF02C0079026
:101210000D92A63DB107D9F71BE0A6EDB2E001C0E3
:101220001D92AE3DB107E1F77AEAE2E0F0E081E23B
:1012300080935700D4907E010894E11CF11C20EFAC
:1012400037EF41E050E087016FE0DA01C9012F5F1D
:101250003F4F4F4F5F4FABBFFC018791F801819328
:101260008F01615067FFF1CFF7016EE08191782720
:101270007095615067FFFACF8889781729F0F7E9F0
:10128000DF1611F40000FECF0E941B0A0C94679237
:101290000C94000088E891E09F938F9380E695E19D
:1012A0009F938F93E0913D05F0913E0509950F9036
:1012B0000F900F900F90089580918607E82FFF27D9
:1012C000EE0FFF1FE754F74F808191818D5E9F4F96
:1012D00014F010920201808191818A5B9F4FCCF4BF
:1012E000809102018823A9F481E08093020180911A
:1012F00071058F5F80937105853038F088EE93E03B
:1013000090930B0380930A0304C066E970E00E9487
:10131000043A8091710599279093090780930807F3
:1013200008951F93CF93DF93182F882389F08EEAB7
:1013300091E09F938F9380E695E19F938F93E09147
:101340003D05F0913E0509950F900F900F900F907D
:101350008091A907823308F044C084EF91E00E9495
:101360006F19EC01112329F0CE010E94781988230E
:10137000D9F3C2E0D0E026E530E080911F019091E2
:1013800020018217930730F02196255D3F4FC7302B
:10139000D10598F38091A9079927C89F9001C99F0B
:1013A000300DD89F300D1124209300011123D9F066
:1013B00068EC70E08C2F0E94043ADF93CF9386EBA9
:1013C00091E09F938F9380E695E19F938F93E091B7
:1013D0003D05F0913E0509958DB79EB706968DBFE8
:1013E00002C080930001112311F1809100016AE095
:1013F0000E94BA91892F99279F938F938091000122
:101400000E94BA9199279F938F9381EC91E09F93CB
:101410008F9380E695E19F938F93E0913D05F09146
:101420003E0509952DB73EB7285F3F4F2DBFDF9191
:10143000CF911F910895CFEFD0E4DEBFCDBF8824B8
:10144000992414B815B8B7EEEB2EB3E0FB2E2EECB2
:101450003FEFE20EF31EF7FEFACF199B02C085E1C3
:1014600001C086E18093010181E887B93E9A8FEF40
:1014700088B98BE184B981E085B98EE38AB987E4C4
:101480008BB9469A84B7877F84BF8091600088615A
:10149000809360001092600084EC99E090930B03BD
:1014A00080930A0310921604109215041092BE083D
:1014B0001092BD08109218041092170410921A048A
:1014C0001092190420910101243128F084EC94E059
:1014D000A0E0B0E004C08BE095E0A0E0B0E0809335
:1014E0003C0190933D01A0933E01B0933F012A300F
:1014F00011F0243110F0289801C0289A2C3010F0F7
:10150000263111F4299A01C029980E94D8190E9405
:10151000A9190E9468150E9441360E94DA1D81E0D7
:101520000E94A4310E94A0680E9457720E944B8EB4
:10153000809101018C3010F0863111F4299A01C09C
:10154000299878940E94C33080914F0382608093E1
:101550004F03109252030E94504584EF91E00E9485
:101560006F197C0180914F0380FD05C0C7010E9467
:1015700078198823B9F385ED91E09F938F93A0E6C6
:10158000AA2EA5E1BA2EBF92AF92E0913D05F0914F
:101590003E05099580EA9FE00E946F197C01C0E03A
:1015A000D0E00F900F900F900F900BE518E0FFE048
:1015B000CF2EF8E0DF2E0E94504580914F0380FD32
:1015C00005C0C7010E9478198823B9F3F60180810C
:1015D0001816ACF40BC00E94504580914F0380FD5B
:1015E00005C0C7010E9478198823B9F3C7010E947A
:1015F0007819882321F4F8018081882364F7F801A1
:10160000808187FF19C02196DF93CF93219787EEC2
:1016100091E09F938F93BF92AF92E0913D05F0913F
:101620003E0509958091D7028F5F8093D7022DB731
:101630003EB72A5F3F4F2DBF219684E090E0C80E51
:10164000D91E085F1F4FCC30D10508F4B4CFC0E0DD
:10165000D0E008E518E0EFE0EE2EE8E0FE2EF8011D
:10166000838187FD1DC0F70180811816CCF4219677
:10167000DF93CF9321978AEE91E09F938F9380E63B
:1016800095E19F938F93E0913D05F0913E0509957B
:1016900082E0809308032DB73EB72A5F3F4F2DBFEE
:1016A000F801838180788383219624E030E0E20E84
:1016B000F31E085F1F4FCC30D10588F20E944A0903
:1016C000909184078091D702981728F4809157054C
:1016D00080618093570588E092E09F938F93C0E6E6
:1016E000D5E1DF93CF93E0913D05F0913E0509955B
:1016F00088EE93E00E946F197C010E94E01D0F901C
:101700000F900F900F90C7010E9478198823D9F38A
:1017100088E292E09F938F93DF93CF93E0913D0512
:10172000F0913E05099580E00E94E83A8091010120
:101730000F900F900F900F908A3011F0843110F0BD
:10174000289801C0289A80ED97E090930B0380932E
:101750000A0385E5809373058EE090E00E94E72EF2
:101760009927182F00278FE090E00E94E72E080F9E
:10177000111D1093DD020093DC028AE090E00E94CC
:10178000E72E9927182F00278BE090E00E94E72E84
:10179000080F111D1093DB020093DA020F5F1F4F39
:1017A00039F08091DC029091DD028F5F9F4F41F410
:1017B0001092DD021092DC021092DB021092DA022B
:1017C0008091DA029091DB029F938F938091DC02EB
:1017D0009091DD029F938F938DE292E09F938F9380
:1017E000DF93CF93E0913D05F0913E0509950E946E
:1017F000742388E893E19093370180933601C1E028
:10180000C09372058C2F0E9491098091AC070E94B1
:10181000978D0E944A0980ED97E00E946F197C0124
:101820008AEF90E00E946F1983E08093E0061092A7
:10183000D6028091F3072DB73EB7285F3F4F2DBFEB
:1018400084FF02C0C093DE028091E002882311F081
:101850004798FECF80910E03882309F43DC2809102
:101860001101882309F438C210920E03809171058A
:10187000882319F00E945C0902C00E94A9480E94B6
:101880005045209101012A3011F0243110F02898A0
:1018900001C0289A80910904882331F080910904BD
:1018A0008150809309040EC080916F008062809304
:1018B0006F001092BA081092B9088091570588609D
:1018C000809357058091360190913701019790934D
:1018D0003701809336018091360190913701892B31
:1018E00021F0809150038823C9F1809136019091B5
:1018F0003701892BD9F40E94CE3185E090E0909396
:1019000037018093360180911A0790911B07019649
:1019100090931B0780931A078091570581608093ED
:1019200057058091E10682608093E106809109016C
:1019300090910A018F5F9F4FC1F480910804882322
:10194000A1F088EA91E690930B0380930A0380E864
:1019500090E090930A018093090107C02A3011F0AA
:10196000243110F0289801C0289A0E94038F80919A
:101970000E03882309F0B0C180911E05882319F059
:101980000E94D881A9C180910F01882311F00E9483
:10199000311A0E94AC150E94FA10C7010E947819F2
:1019A000882309F495C184E190E0E80EF91E0E94B5
:1019B000EF198091AC07863019F40E94767704C045
:1019C000843011F40E94A88280915003882349F04A
:1019D000809157058260809357058091E10682606F
:1019E0000FC080910A0390910B03892B59F48091C9
:1019F000360190913701079728F08091E1068D7F9D
:101A00008093E1068091DE02882361F080910904D1
:101A1000873940F01092DE0288E893E190930B033F
:101A200080930A0380910401882321F081508093E0
:101A300004012EC080937D051092DD031092DC031B
:101A40001092DB031092DA031092D9031092D8039C
:101A5000809109048823E1F48091090190910A01A1
:101A60008F5F9F4FA9F42091DE02223089F088E930
:101A70009AE390930B0380930A0380E09CE0909399
:101A80000A0180930901222319F082E08093DE028B
:101A900080919901893C48F081508093990180910F
:101AA00057058B7F809357053FC080919A09882303
:101AB000F9F08091570584608093570589E0809301
:101AC000E4048091090190910A018F5F9F4F81F496
:101AD00080910804882361F088E99AE390930B03CE
:101AE00080930A0380E098EA90930A0180930901A9
:101AF0001092D6041092D5041092D4041092D304FC
:101B00001092D20410928D091092CC091092CB0938
:101B10001092CE091092CD098FEF9FEF9093CA09D2
:101B20008093C9091092990180910001282F3327D1
:101B300080911F019091200182179307CCF480912E
:101B4000D10380628093D1038091090190910A01B1
:101B50008F5F9F4FC1F480E797E190930B038093D1
:101B60000A0380E093E090930A01809309010BC07F
:101B700080910A0390910B03892B29F48091D10362
:101B80008F7D8093D1030E94976D84E08093090339
:101B90008091DF028F5F8093DF02813309F04FC0B5
:101BA0001092DF028091D10381FF0AC08091D80298
:101BB0009091D90201969093D9028093D8023FC0A8
:101BC0005AEA852E55E0952E8091290790912A0793
:101BD0009C01442737FD4095542F80911701909127
:101BE0001801A0911901B0911A01281739074A0765
:101BF0005B0734F48091290790912A0701961BC056
:101C00008091290790912A079C01442737FD409530
:101C1000542F8091170190911801A0911901B09152
:101C20001A0182179307A407B5074CF4809129077E
:101C300090912A07019790932A0780932907089487
:101C4000811C911C32E783163BE0930609F040C0EB
:101C5000882499242091DC023091DD022F5F3F4FD0
:101C60003093DD022093DC028091DA029091DB0256
:101C700001969093DB028093DA02832F9927682FD5
:101C80008EE090E00E94EF2E8091DC029091DD02C8
:101C90009070682F8FE090E00E94EF2E8091DA0222
:101CA0009091DB02892F9927682F8AE090E00E94AB
:101CB000EF2E8091DA029091DB029070682F8BE01A
:101CC00090E00E94EF2E84E190E00E946F197C0169
:101CD0000E94E76D0E946E7280910903882309F0CB
:101CE000B3CD0E94C168B0CD1F920F920FB60F9274
:101CF00011248F939F93EF93FF9380910601882384
:101D0000E1F48091FA029091FB0201969093FB021C
:101D10008093FA02FC01EF5CF94FE081ED3019F09D
:101D20008F3A910539F41092FB021092FA0281E089
:101D300080930601E093C60004C01092FB0210924B
:101D4000FA02FF91EF919F918F910F900FBE0F902C
:101D50001F9018951F920F920FB60F9211242F9378
:101D60003F934F935F936F937F938F939F93AF9323
:101D7000BF93CF93EF93FF9390E08091E002813087
:101D800029F48091C6008093CE00CCC08091E002FF
:101D9000823029F48091C60080938005C3C0809171
:101DA000C6008093F202509100035F3A10F09093C6
:101DB00001038091F2028D3009F065C0809101032A
:101DC000823009F060C090930103852F99278058D5
:101DD0009A4FFC01329740812091FC023091FD0224
:101DE000241B3109DC0111978C91281B3109C90191
:101DF0009F709093FD028093FC0246E09695879534
:101E00004A95E1F7982F935C9093FE022F73307000
:101E1000235C2093FF028081981729F48C91281766
:101E200011F491E006C090E08091EF028F5F809303
:101E3000EF02C091F102CC2309F074C0992309F498
:101E400071C081E08093F102580F5093EE0251501F
:101E5000E52FFF27E058FA4F8DE0808380918205BF
:101E6000823509F05FC00E94742388E190E02CE085
:101E70000FB6F894A895809360000FBE2093600081
:101E8000C09308034FC020910103822F992781300E
:101E90009105F9F0823091051CF4892B21F040C0A6
:101EA000029711F13DC08091F202833239F48091A2
:101EB000F102882319F481E0809301038091F202FA
:101EC0008093800581E0809300038091F20299273E
:101ED00022C02F5F20930103E52FFF27E058FA4F20
:101EE0008091F202808309C0E52FFF27E058FA4F66
:101EF0008091F20280835F3A20F45F5F5093000389
:101F000002C0109201032091F2028091FC02909194
:101F1000FD02820F911D9093FD028093FC0202C08E
:101F200010920103FF91EF91CF91BF91AF919F91DB
:101F30008F917F916F915F914F913F912F910F9072
:101F40000FBE0F901F901895AC01A0E0B0E09D016E
:101F5000A817B90748F4E1E3F6E08191280F311D95
:101F60001196A417B507C8F33F70FD01EF5CF94F58
:101F7000C90156E0969587955A95E1F7835C808371
:101F80001196FD01EF5CF94F2F733070822F835C47
:101F90008083AE5CB94F8DE08C93109206018091E6
:101FA00031068093C6000895A0E0B0E0EAEDFFE0BE
:101FB0000C9433922C859D850E85BB2483E28093FF
:101FC00031069F59909332062093330633E0E32E77
:101FD000F12C002309F49EC0CF84D888BE016D5E29
:101FE0007F4FA989BA890150109709F493C01097BF
:101FF000B9F0F601EB0DF11DB3949081119791F4B6
:10200000002349F1FB016E5F7F4FDB01C080D1806F
:102010006E5F7F4F0D90BC91A02DBB24015002C07C
:1020200090E019C01097B9F0F601EB0DF11DB394D3
:102030004081119791F4002341F1FB016E5F7F4FC6
:10204000DB01C080D1806E5F7F4F0D90BC91A02DD1
:10205000BB24015002C040E018C01097B1F0F60157
:10206000EB0DF11DB3941081119781F4002371F0F1
:10207000FB013296DB01CD90DC90BF016E5F7F4F9C
:10208000A081B181BB24015001C010E0F701EF5CD9
:10209000F94F892F86958695835C80830894E11C8F
:1020A000F11CF701EF5CF94F892F9927837090702D
:1020B00024E0880F991F2A95E1F755279A0194E0AB
:1020C000369527959A95E1F7822B835C8083089457
:1020D000E11CF11CF701EF5CF94F4F705070440F99
:1020E000551F440F551F812F992726E096958795F8
:1020F0002A95E1F7842B835C80830894E11CF11C12
:10210000F701EF5CF94F1F73135C10830894E11C17
:10211000F11C6ACFC7010E94A40FE9E00C944F9212
:10212000A3E07A2F4091EE024650442309F458C0B0
:10213000E72FFF27E058FA4F80818D537F5FE72F0D
:10214000FF27E058FA4F20812D537F5FE72FFF27AD
:10215000E058FA4F30813D537F5FE72FFF27E0586B
:10216000FA4F60816D537F5F9927880F991F880F01
:10217000991F522F52955F70582B822F99278F707D
:102180009070F4E0880F991FFA95E1F7232F2695B8
:102190002695282B832F992783709070E6E0880F6F
:1021A000991FEA95E1F7682B41504F3FC9F0EA2F9C
:1021B000FF27E058FA4F5083AF5F41504F3F81F007
:1021C000EA2FFF27E058FA4F2083AF5F41504F3F7F
:1021D00039F0EA2FFF27E058FA4F6083AF5FA5CFB1
:1021E00083E895E09093ED028093EC02A350A093D6
:1021F000EB020895A2E0B0E0E0E0F1E10C94399246
:102200008091F102882309F457C40E9490108091B4
:102210008105823609F023C3809182059927803792
:10222000910509F4AFC081379105C4F48A36910550
:1022300009F480C28B36910544F48B34910571F119
:102240008636910509F45FC10AC38D36910509F4FC
:1022500069C08E36910509F44DC001C384379105DC
:1022600041F1853791054CF48137910509F491C00E
:102270008337910509F4DFC0F2C28737910509F46D
:102280001BC2883791052CF48537910509F4D7C115
:10229000E6C28937910509F46DC1E1C2E091EC0213
:1022A000F091ED028081918190938B0180938A015E
:1022B000D6C28091EE02A091EC02B091ED02853180
:1022C00040F080E1EBE5F5E00D9001928A95E1F7B1
:1022D0000DC08D919D910D90BC91A02D80935B05BB
:1022E00090935C05A0935D05B0935E0580EF8093AD
:1022F000E9024BC0809106018823E1F38DE490E070
:102300009F938F9382E098E09F938F9381E08F93C8
:102310008F938EE48F930E94D40F8DB79EB707964C
:102320008DBF9DC2A091EC02B091ED021C911130C5
:1023300081F48DE4E2E0F8E00D9001928A95E1F7F6
:102340000E9400301983809157058F7E8093570536
:1023500001C01982809106018823E1F381E090E0B9
:102360009F938F93CE0101969F938F9381E08F93DC
:102370008F938DE48F930E94D40FADB7BEB717969D
:10238000ADBF6DC281E08093F4028FEF80930401B2
:1023900066C2E091EC02F091ED02E0818E2F8A504E
:1023A0008A3058F48983882311F481E003C0863091
:1023B00010F085E0898361E00EC08E2F84518A3051
:1023C00070F48983882311F481E003C0863010F013
:1023D00085E0898360E089810E94803012C0E983B2
:1023E000EF3F19F40E94633089838981882311F4B7
:1023F00081E003C0863010F085E0898389810E94E6
:10240000052F809106018823E1F38CE790E09F93EC
:102410008F9385E897E09F938F9381E090E09F935F
:102420008F93CE0101969F938F9382E08F9381E0EB
:102430008F9381E577C12091EC023091ED02D901B3
:102440008C918150853008F045C0F90181818D352E
:1024500009F040C0809108048823E1F52F5F3F4FC9
:102460008CE7E5E8F7E0D9010D9001928A95E1F754
:10247000F90182910E94702F8091C6079927AA279F
:10248000BB27BC01CD0124EC39E040E050E00E94C4
:102490009B91DC01CB018093820190938301A093F7
:1024A0008401B09385018091C7079927AA27BB278C
:1024B000BC01CD010E949B91DC01CB0180937E0188
:1024C00090937F01A0938001B09381010E946330BB
:1024D000898301C01982809106018823E1F381E09C
:1024E00090E09F938F93CE0101969F938F9381E00D
:1024F0008F938F9383E58F930E94D40F8DB79EB7F0
:1025000007968DBF26C0E091EC02F091ED02E081CC
:102510008E2F8150853018F48E2F0E94052F0E9437
:1025200063308983809106018823E1F381E090E0A4
:102530009F938F93CE0101969F938F9381E08F930A
:102540008F9386E48F930E94D40FADB7BEB71796D2
:10255000ADBF80910804882329F46EE670E089817C
:102560000E94043A80E00E9491098091AC070E9489
:10257000978D75C1E091EC02F091ED028081992771
:1025800087FD90959093D4088093D30881819927F3
:1025900087FD90959093D6088093D50882819927DE
:1025A00087FD90959093D8088093D70883819927C9
:1025B00087FD90959093DA088093D90884819927B4
:1025C00087FD90959093DC088093DB08858199279F
:1025D00087FD90959093DE088093DD08868199278A
:1025E00087FD90959093E0088093DF088781992775
:1025F00087FD90959093E2088093E1088085992764
:1026000087FD90959093E4088093E308818599274E
:1026100087FD90959093E6088093E5088285992739
:1026200087FD90959093E8088093E7088385992724
:1026300087FD90959093EA088093E90810C1E09196
:10264000EC02F091ED0280810E949A358A83882302
:1026500019F481E0898301C01982809106018823E1
:10266000E1F388E090E09F938F9380E598E09F935B
:102670008F9321E030E03F932F938091EC02909173
:10268000ED029F938F933F932F93CE0102969F93DA
:102690008F933F932F93CE01820F931F9F938F931E
:1026A00084E08F9381E08F9385E58F930E94D40F10
:1026B000EDB7FEB773963CC08091EB02893008F409
:1026C000CEC02091EC023091ED022F5F3F4F88E0A9
:1026D000A0E5B8E0F90101900D928A95E1F7D901E2
:1026E0008E910E94F0348A83882319F481E08983D3
:1026F00001C01982809106018823E1F321E030E0D6
:102700003F932F93CE0102969F938F933F932F93E6
:10271000CE01820F931F9F938F9382E08F9381E06E
:102720008F9387E58F930E94D40FEDB7FEB73B964A
:10273000EDBF95C080910804882309F090C00E94E5
:102740004A8D8983823019F0843009F088C020E4F2
:1027500030E0F8948091C1008F738093C100809124
:10276000C9008F738093C9008091C100877E8093D8
:10277000C1008091C900877E8093C9008091C80004
:1027800087FF03C08091CE00F9CF8091C00087FF02
:1027900003C08091C600F9CFE091EC02F091ED0208
:1027A000E081E13021F482E08093E0022EC0E43643
:1027B00011F421E830E081E08093E002832F992733
:1027C0008093CD002093CC008091CD008093C500F4
:1027D0008091CC008093C4008091CA008F7D80934B
:1027E000CA008091CA008F7E8093CA008091C90080
:1027F0008B7F8093C9008091CA0084608093CA0057
:102800008091CA0082608093CA008091CA00877F4D
:102810008093CA008091C200877F8093C20080911C
:10282000C9008E7F8093C9008091C1008861809328
:10283000C1008091C90088618093C9008091C10066
:1028400080688093C1008091C90080688093C9002E
:1028500010926E0010926F00109270007894809128
:10286000820599278436910509F4BBC08536910508
:10287000ACF48136910509F46FC0823691052CF4D1
:102880008B34910509F45DC00FC18236910509F4BE
:1028900070C08336910509F47FC006C18C3691055E
:1028A00009F4EDC08D3691054CF48736910509F495
:1028B000F8C08836910509F4B2C0F6C08437910596
:1028C00029F08637910509F4E8C0EEC08091EE0248
:1028D000A091EC02B091ED02803140F080E1EBE597
:1028E000F5E00D9001928A95E1F70DC08D919D91D3
:1028F0000D90BC91A02D80935B0590935C05A093F7
:102900005D05B0935E05809106018823E1F31F9277
:10291000809103018F9384E58F930E94D40F8AEFF7
:102920008093E9028FEF8093040180EA9FE00E9488
:102930006F199093E2028093E1020F900F900F9035
:10294000B3C0E091EC02F091ED028081918190930F
:102950008B0180938A01A8C0E091EC02F091ED0216
:10296000808180930501803298F08FE1809305018A
:102970000FC0A091EC02B091ED028BE0E3E7F5E02F
:102980000D9001928A95E1F780917C058093220752
:102990008FEF8093040188C08091E5029091E60258
:1029A000892B89F4E091EC02F091ED02E081EE23B5
:1029B00051F08AE0E89FC00111240E946F199093A2
:1029C0004E0580934D05E091EC02F091ED0290816F
:1029D0008AE0989FC00111249093E6028093E5025B
:1029E00015C08FEF80930401E091EC02F091ED02AD
:1029F00090818AE0989FC00111249093E80280930F
:102A0000E702892B19F081E08093F60280EA9FE0CB
:102A10000E946F199093E2028093E10245C08FEF0C
:102A200080930401E091EC02F091ED02908197FD1A
:102A300008C082E08093F3021092E4021092E30255
:102A40001AC0909580914803892B80934803918107
:102A50008AE0989FC00111249093E4028093E302DE
:102A600084E08093F30280EA9FE00E946F199093C4
:102A7000E2028093E10281E08093F70215C08FEFBC
:102A800080930401E091EC02F091ED02808180934B
:102A9000490381E08093F80207C081E08093F5024A
:102AA00003C081E08093F9021092F1021092ED02CE
:102AB0001092EC021092EB02E3E0CE5F0C94559280
:102AC000982F8091C00085FFFCCF9093C600089599
:102AD0000F931F9388E18093C1008091C0008260B2
:102AE0008093C0008091C10080688093C100809174
:102AF000C10080648093C10000E010E00093C50035
:102B00008AE290E08093C4008091E7029091E8020D
:102B10000E946F199093500580934F058CED90E0C3
:102B20000E946F1990937F0580937E051092510546
:102B30008AE58093520584E0809355058BE080936D
:102B40005305109254051093ED020093EC0210927D
:102B5000EB021F910F910895A0E1B0E0E2EBF5E1E7
:102B60000C94369280910601882309F4C1C28091A9
:102B7000E1029091E2020E947819882361F010929C
:102B8000E4021092E3021092E8021092E70210921F
:102B9000E6021092E5028091E3029091E402892B13
:102BA00041F080912F06909130060E947819882379
:102BB00029F48091F702882309F460C0809106010E
:102BC000882309F45BC08091F30204E317E08430AA
:102BD000A8F00E948A2380E590E09F938F931F9333
:102BE0000F9381E08F938F9388E48F930E94D40F8B
:102BF0002DB73EB7295F3F4F2DBF34C010924A0317
:102C00008FE494E09F938F938DE793E29F938F934C
:102C1000E0913D05F0913E05099584E190E09F9398
:102C20008F931F930F9381E090E09F938F9383EF97
:102C300092E09F938F9382E08F9381E08F9388E45B
:102C40008F930E94D40F8091F302982F8F5F80930F
:102C5000F3022DB73EB7215F3F4F2DBF943010F0E8
:102C60001092F3028091E3029091E4020E946F19A6
:102C70009093300680932F061092F7028091F8020D
:102C8000882351F180910601882331F10E948A2323
:102C900080E590E09F938F9384E397E09F938F93D9
:102CA00021E030E03F932F9381E291E09F938F9357
:102CB0003F932F9389E493E09F938F9383E08F93C7
:102CC00081E08F938CE48F930E94D40F1092F802CE
:102CD0008DB79EB70F968DBF8091F5028823D1F0F6
:102CE000809106018823B1F08AE090E09F938F9352
:102CF00081E595E09F938F9381E08F938F9386E595
:102D00008F930E94D40F1092F5022DB73EB7295F22
:102D10003F4F2DBF8091F9028823D9F080910601A1
:102D20008823B9F08BE090E09F938F9383E795E041
:102D30009F938F9381E08F93809103018F9387E41A
:102D40008F930E94D40F1092F9028DB79EB7079609
:102D50008DBF80917E0590917F050E947819882310
:102D600009F461C080910601882309F45CC0809158
:102D7000A1079927880F991F880F991F7C010027A9
:102D8000F7FC0095102F8091630490916404A0914A
:102D90006504B0916604BC01CD01A80197010E94B1
:102DA0000F9230936C0520936B0580915B0490919A
:102DB0005C04A0915D04B0915E04BC01CD01A8014A
:102DC00097010E940F9230936E0520936D058091BC
:102DD000E60380936F058091E5038093700588E09A
:102DE00090E09F938F938BE695E09F938F9381E084
:102DF0008F9383E08F938BE68F930E94D40F809103
:102E000071052DB73EB7295F3F4F2DBF853018F0B4
:102E100086E08093710583E690E00E946F1990939D
:102E20007F0580937E058091E7029091E802892BCF
:102E300041F080914F05909150050E9478198823A8
:102E400021F48091F602882339F1809106018823CC
:102E500019F10E94EE3882E490E09F938F9380EE08
:102E600096E09F938F9381E08F938F9384E48F9369
:102E70000E94D40F1092F6028DB79EB707968DBFB1
:102E80008091E7029091E802009731F00E946F195B
:102E90009093500580934F058091E5029091E60252
:102EA000892B09F4B8C080914D0590914E050E9480
:102EB0007819882309F4AFC080910601882309F4AA
:102EC000AAC08091A1079927880F991F880F991F81
:102ED0007C010027F7FC0095102F809163049091EE
:102EE0006404A0916504B0916604BC01CD01A80101
:102EF00097010E940F923093400520933F058091E7
:102F00005B0490915C04A0915D04B0915E04BC01EF
:102F1000CD01A80197010E940F92309342052093A2
:102F20004105209182093091830940918409509193
:102F30008509DA01C90163E0880F991FAA1FBB1F29
:102F40006A95D1F7820F931FA41FB51F820F931F9D
:102F5000A41FB51F20913C0130913D0140913E01DD
:102F600050913F01BC01CD010E940F923093440566
:102F70002093430580912B0490912C04A0912D0463
:102F8000B0912E0449E0B595A795979587954A95F8
:102F9000D1F7809345058091270490912804A09152
:102FA0002904B0912A0439E0B595A795979587959E
:102FB0003A95D1F78093460580913304909134047B
:102FC000A0913504B091360429E0B595A795979561
:102FD00087952A95D1F7809347058EE090E09F93DF
:102FE0008F938FE395E09F938F9381E08F938F93DF
:102FF00083E48F930E94D40F8091E5029091E602C2
:103000000E946F1990934E0580934D052DB73EB7E2
:10301000295F3F4F2DBF809105018F3F71F19927A7
:1030200004E0880F991F0A95E1F7815B9D4F40E10D
:1030300050E0BC01CE0101960E94E58F80E190E056
:103040009F938F93CE0101969F938F9381E090E0A1
:103050009F938F9385E091E09F938F9382E08F936E
:1030600081E08F9381E48F930E94D40F8FEF809340
:1030700005018DB79EB70B968DBF809122078823DF
:10308000D1F0809106018823B1F081E090E09F9318
:103090008F9382E297E09F938F9381E08F938F933A
:1030A00082E48F930E94D40F109222072DB73EB76F
:1030B000295F3F4F2DBF8091F4028823C9F0809192
:1030C00006018823A9F084E390E09F938F9389EB16
:1030D00098E09F938F9381E08F938F9380E58F93F8
:1030E0000E94D40F1092F4028DB79EB707968DBF41
:1030F000E6E0C05F0C9452921F920F920FB60F92AF
:1031000011242F933F935F936F937F938F939F939C
:10311000AF93BF93EF93FF9320E08091090388233F
:1031200029F0809109038150809309038091F8046C
:10313000882319F081508093F80480911103815005
:10314000809311038F3F09F05BC089E080931103E6
:1031500080910F0390911003019690931003809338
:103160000F03809110018F5F81708093100188237D
:1031700019F481E080930E03349903C081E08093B9
:10318000120380910A0390910B03892B21F1809106
:103190000A0390910B030B9750F080910A039091D2
:1031A0000B030A9790930B0380930A0304C01092B9
:1031B0000B0310920A0380910A0390910B03209154
:1031C000090130910A0182239323892B11F021E018
:1031D00008C020E006C08FEF9FEF90930A01809314
:1031E000090180910101222331F08A3011F45A9AA9
:1031F00007C0479A05C08A3011F45A9801C0479811
:1032000080911203882309F45AC020919901222346
:1032100009F055C08091720983FF51C086B199278A
:10322000FC01E071F07084FF13C080910C03909159
:103230000D03019690930D0380930C0380910C0372
:1032400090910D03895E9340D0F12093120337C013
:1032500080910C0390910D03892B69F180910C03EF
:1032600090910D038A56914030F580910C03909116
:103270000D0369E270E00E94C69180910C03909169
:103280000D03860F971F90930D0380930C0380917D
:103290000C0390910D030B9750F080910C039091CB
:1032A0000D030A9790938B0180938A0104C0F093D9
:1032B0008B01E0938A0110920D0310920C03FF9191
:1032C000EF91BF91AF919F918F917F916F915F919E
:1032D0003F912F910F900FBE0F901F901895209146
:1032E0000F0330911003280F391FC901019608956B
:1032F00020910F0330911003821B930B892F992784
:103300008695807490700895CF93DF930E946F1913
:10331000EC01CE010E9478198823D9F3DF91CF9177
:103320000895CF93DF930E946F19EC0109C080913B
:103330001101882329F0909311018FEC80937A007A
:10334000CE010E947819982F882389F3DF91CF91BD
:1033500008959FB7F8945F983E9A469A8091B0007E
:103360008F708093B0008091B00083608093B00034
:103370008091B1008B738093B1008091B1008B601C
:103380008093B1001092B2008FEF8093B3008091D0
:10339000B00080688093B000809170008A7F809335
:1033A0007000809170008260809370009FBF0895CC
:1033B0008AE090E00E946F1990932407809323077E
:1033C00082E085BD83EA84BD17BC84EB88BD86E0BE
:1033D00086BD80916E00816080936E00089580911B
:1033E000F2072091690182FF30C09091B5078CE30C
:1033F000989FB00111249091B40780E5989FA00197
:103400001124922F905897FD9D5F9595959586E094
:103410009802C00111242091070130910801281B56
:10342000390B3093080120930701421753072CF002
:10343000509308014093070108952617370784F039
:1034400070930801609307010895822F992736E051
:10345000880F991F3A95E1F790930801809307012F
:103460000895A0E0B0E0E7E3FAE10C943592809192
:10347000BC07E82FFF27EE5BFE4F9681D08080913E
:103480000F01A92FBB27A7FDB095CB2FDB2F8130D4
:1034900009F017C1209163043091640440916504E0
:1034A00050916604BD01CE010E949B9197FF04C01C
:1034B00061587F4F8F4F9F4F7B018C01C7E015955F
:1034C0000795F794E794CA95D1F78D2D992787FD35
:1034D0009095A92FB92F20915B0430915C04409105
:1034E0005D0450915E04BC01CD010E949B9197FF49
:1034F00004C061587F4F8F4F9F4FB7E095958795D8
:1035000077956795BA95D1F7F801E701C61BD70BF8
:10351000E80BF90B2091DD043091DE04C901A3E032
:10352000880F991FAA95E1F7821B930BAA2797FD95
:10353000A095BA2FC81BD90BEA0BFB0B8091670132
:103540009927AA27BB27BC01CD019E01AF010E948C
:103550009B9197FF04C061507E4F8F4F9F4FFC019E
:10356000EB0179E0F595E795D795C7957A95D1F771
:103570001091F207609107017091080112FF05C0D8
:1035800070930E0160930D0118C040910D01509190
:103590000E018091BB07282F3327CB01841B950B8D
:1035A000B9010E94DA9180910D0190910E01860F70
:1035B000971F90930E0180930D0110FF14C080910E
:1035C0000D0190910E0197FD0F9664E095958795FA
:1035D0006A95E1F7AA2797FDA095BA2FC80FD91FC2
:1035E000EA1FFB1F15C080910D0190910E0197FD00
:1035F0000F9654E0959587955A95E1F7AA2797FD80
:10360000A095BA2F8C1B9D0BAE0BBF0BFD01EC01DF
:103610002091EF07222321F1332780910403909119
:103620000503829FA001839F500D929F500D11248E
:10363000CA01AA2797FDA095BA2F8C0F9D1FAE1F18
:10364000BF1F2F5F3F4F442737FD4095542FBC01CC
:10365000CD010E940F92309305032093040304C010
:10366000D0930503C09304038091B407282F332718
:10367000220F331F220F331F809104039091050303
:10368000821793077CF08091B507282F3327220FEC
:10369000331F220F331F80910403909105032817D5
:1036A000390724F43093050320930403809101012A
:1036B000843108F4F7C080910F018F5F80930F0170
:1036C000F3C020915B0430915C0440915D04509103
:1036D0005E04BD01CE010E949B9197FF04C061581A
:1036E0007F4F8F4F9F4F7B018C0187E0159507958A
:1036F000F794E7948A95D1F78D2D992787FD9095BA
:10370000A92FB92F2091630430916404409165047E
:1037100050916604BC01CD010E949B919B01AC01BC
:1037200097FF04C021583F4F4F4F5F4FC7E055955B
:10373000479537952795CA95D1F72E0D3F1D401F08
:10374000511F809166019927AA27BB27BC01CD0193
:103750000E949B9197FF04C061507E4F8F4F9F4FF7
:10376000FC01EB01B9E0F595E795D795C795BA95BA
:10377000D1F7809168019927A6E0880F991FAA9533
:10378000E1F740910B0150910C012091BB073327C9
:10379000841B950BB9010E94DA9180910B019091E5
:1037A0000C01860F971F90930C0180930B01809161
:1037B000F20781FF14C080910B0190910C0197FDDD
:1037C0000F9674E0959587957A95E1F7AA2797FD6E
:1037D000A095BA2FC80FD91FEA1FFB1F15C08091F3
:1037E0000B0190910C0197FD0F9664E095958795DC
:1037F0006A95E1F7AA2797FDA095BA2F8C1B9D0B20
:10380000AE0BBF0BFD01EC012091F007222321F14B
:1038100033278091020390910303829FA001839F2D
:10382000500D929F500D1124CA01AA2797FDA09513
:10383000BA2F8C0F9D1FAE1FBF1F2F5F3F4F442716
:1038400037FD4095542FBC01CD010E940F9230935B
:1038500003032093020304C0D0930303C093020325
:103860008091B807282F3327220F331F220F331FD1
:103870008091020390910303821793077CF080915B
:10388000B907282F3327220F331F220F331F8091B0
:103890000203909103032817390724F4309303039C
:1038A0002093020310920F01E7E0CDB7DEB70C942E
:1038B00051921F920F920FB60F9211242F933F93A4
:1038C0004F935F938F939F93EF93FF9380910101A9
:1038D00090911303843108F04CC0992309F029C159
:1038E0008091B00086FF24C08091B0008F7B8093D0
:1038F000B000809104039091050387559E4F9093EB
:1039000007038093060325E08D3D920718F08CEDA8
:1039100095E005C08757914030F487E791E0909398
:103920000703809306038091060390910703C2C0AA
:103930008091B00080648093B0008091BA07282FF6
:1039400033278DED96E0289FA001299F500D389FC9
:10395000500D1124CA012091140330911503821BCC
:10396000930B909307038093060381E080930F01EC
:10397000DDC0992309F0DDC08091B00086FF9FC0B3
:103980008091B0008F7B8093B000E091160320916E
:10399000BA07EE23D9F433278DED96E0289FA001D6
:1039A000299F500D389F500D1124CA0120911403F6
:1039B00030911503821B930B9093070380930603AA
:1039C0001092150310921403469AB0C02E1738F4C3
:1039D0008AE090E09093070380930603A7C089EAEA
:1039E00093E090930703809306038E2F99278330EB
:1039F0009105D9F08430910534F48130910549F076
:103A0000029761F020C08430910591F0059799F0FC
:103A10001AC0809104039091050304C080910203B1
:103A20009091030387559E4F1DC080914E0905C09C
:103A30008091270902C0809157099927880F991F03
:103A4000880F991FEFCFFF27EE0FFF1FE754F74FA7
:103A500020813181220F331F80910603909107034B
:103A6000820F931F909307038093060380910603B0
:103A70009091070355E08D3D950718F08CED95E08A
:103A800005C08757914030F487E791E09093070392
:103A90008093060320910603309107032C5B30408E
:103AA000309307032093060380911403909115032C
:103AB000820F931F909315038093140337C0809156
:103AC000B00080648093B0008CEB90E0909307038B
:103AD00080930603809114039091150384549F4FA3
:103AE000909315038093140380910803882321F099
:103AF00080910904882321F480910803823011F415
:103B0000469801C0469A809116038F5F80931603F2
:103B1000282F33278091BA07992701968217930798
:103B20002CF481E080930F011092160381E08093C2
:103B30001303209106033091070341E02F37340728
:103B400030F08FEF8093B3002F5F30400FC02F3FD6
:103B50003105C9F0C0F0A9014F5F50404F37510502
:103B600050F480E88093B30020583040309307032E
:103B70002093060312C08FEF8093B3005093070386
:103B8000409306030AC0809106038093B30010920D
:103B900007031092060310921303FF91EF919F9178
:103BA0008F915F914F913F912F910F900FBE0F908A
:103BB0001F90189510927C008FEC80937A000895E6
:103BC000CF93DF9310921B0386E987BD83E090E0DB
:103BD0000E94E72EC82F863E08F4C65FC8BD84E663
:103BE00090E00E94911980911501909116018152E7
:103BF000934010F0C0EF02C0C530F8F0C8BD82E3BA
:103C000090E00E94911984E694E09F938F9380E660
:103C100095E19F938F93E0913D05F0913E050995C5
:103C200080911501909116010F900F900F900F90B9
:103C30008152934010F4C550DFCF6C2F83E090E0A9
:103C40000E94EF2ECF3018F0CCE8D0E002C0C0E0E8
:103C5000D0E0CA3FD105F8F4C7BD82E390E00E94EE
:103C6000911986E694E09F938F9380E695E19F9368
:103C70008F93E0913D05F0913E05099580911501E6
:103C8000909116010F900F900F900F9080529340DB
:103C900010F02196DECFC09331078091920780FF0C
:103CA00009C08C2F8A508B3E28F080915605806485
:103CB00080935605C7BD8CE291E00E949119DF9177
:103CC000CF910895EF92FF921F93CF9310E080ED74
:103CD00097E00E946F197C01CCE8133019F4CB30C7
:103CE00008F0C9E010E080912A0390912B038C5FCB
:103CF000934024F48091140181500AC080912A03DA
:103D000090912B038750944034F0809114018F5F81
:103D10008093140101C011E0809128039091290340
:103D20008C5F934024F48091130181500AC08091EC
:103D30002803909129038750944034F08091130117
:103D40008F5F8093130101C01F5F809126039091C4
:103D500027038C5F934024F48091120181500AC0A4
:103D6000809126039091270387509440C4F080915E
:103D700012018F5F8093120113C088E694E09F9335
:103D80008F9380E695E19F938F93E0913D05F091AD
:103D90003E0509950F900F900F900F905FC01F5F29
:103DA00082E18093550380914F038E7F80934F0370
:103DB00085EA8093BC00809114018A3040F48091A0
:103DC00056058160809356058AE0809314018091A6
:103DD0001401863F40F0809156058160809356051E
:103DE00085EF80931401809113018A3040F4809113
:103DF00056058260809356058AE080931301809176
:103E00001301863F40F080915605826080935605ED
:103E100085EF80931301809112018A3040F48091E4
:103E200056058460809356058AE080931201809144
:103E30001201863F40F080915605846080935605BC
:103E400085EF8093120180915503882339F0C701D3
:103E50000E947819882309F090CFF5CF10921101B4
:103E60008FEC80937A00809111018823E1F3CA30AE
:103E700020F48AE090E00E949119C15009F02DCF02
:103E800086E490E00E949119CF911F91FF90EF90EE
:103E900008951F920F920FB60F921124EF92FF9286
:103EA0000F931F932F933F934F935F936F937F9342
:103EB0008F939F93AF93BF93EF93FF9380913303BF
:103EC000282F3327442755278F5F80933303F90129
:103ED0002231310508F0E3C3EA5BFF4F0C94619295
:103EE000809178009091790046C0809178009091FF
:103EF000790047C1809178009091790090933603C2
:103F00008093350372C180916C0490916D0420916F
:103F1000780030917900821B930B90932607809351
:103F20002507809125079091260790934003809361
:103F30003F0379C1809178009091790020916E04BF
:103F400030916F04821B930B9093300780932F075F
:103F500080912F0790913007909342038093410303
:103F6000A0C38091390390913A0320917800309159
:103F70007900820F931F90933A038093390381E075
:103F800091C380913703909138032091780030914C
:103F90007900820F931F909338038093370384E056
:103FA00081C38091F30783FF1AC080911F01909114
:103FB00020019C01220F331F280F391F40917800E8
:103FC000509179008BE090E0489FB001499F700DBF
:103FD000589F700D1124CB016EE170E00FC08091ED
:103FE0001F01909120019C01220F331F280F391FC0
:103FF000809178009091790063E070E00E94C69112
:10400000260F371F36952795369527953093200133
:1040100020931F0185E046C380917800909179003C
:104020004091680450916904841B950B909321037F
:10403000809320038091200390912103029704F143
:1040400072E04E3E570784F4209134032B5F209397
:10405000340325508091D2039091D303845F914023
:1040600018F4215F2093340380913403853684F162
:104070004F5F5F4F5093690440936804845626C095
:1040800080912003909121038F5F9F4F0CF572E088
:1040900047325707ECF02091340325502093340326
:1040A0002B5F8091D2039091D303845F914018F4E9
:1040B0002F5020933403809134038C394CF44150B9
:1040C000504050936904409368048C5980933403A2
:1040D000809178009091790090932807809327072A
:1040E00080912003909121039C01442737FD409546
:1040F000542F8091230490912404A0912504B09121
:104100002604820F931FA41FB51F8093230490934E
:104110002404A0932504B093260420912304309115
:104120002404409125045091260457FF04C02150D7
:104130003C4F4F4F5F4F6AE0559547953795279510
:104140006A95D1F78091230490912404A0912504CD
:10415000B0912604821B930BA40BB50B8093230410
:1041600090932404A0932504B09326042EC180913B
:104170003703909138032091780030917900820FB5
:10418000931F9093380380933703109232038CC2AD
:10419000809101018A3071F48091780090917900CA
:1041A0002091350330913603820F931F0196969527
:1041B000879517C04091350350913603843158F0EC
:1041C0002091780030917900240F351F8FEF97E010
:1041D000821B930B06C08091780090917900840F28
:1041E000951F909327038093260386E05BC28091FE
:1041F0006C0490916D042091780030917900821BBD
:10420000930B909326078093250780912507909123
:10421000260720913F0330914003820F931F909314
:1042200025038093240387E03DC28091780090911C
:10423000790020916E0430916F04821B930B909350
:10424000300780932F0780912F079091300720919E
:10425000410330914203820F931F90932303809375
:1042600022031FC22091390330913A0380917800D4
:1042700090917900280F391F30933A032093390326
:10428000809101018A3019F4220F331F04C0220FDC
:10429000331F220F331F30933A03209339032091A9
:1042A000390330913A03C90137FD079603E095952C
:1042B00087950A95E1F790932B0380932A038091C9
:1042C0003B0390913C03820F931F97FD01969595B8
:1042D000879590933C0380933B0320917804309121
:1042E0007904821B930B90931E0180931D012091F2
:1042F00030033091310380911D0190911E01280FF0
:10430000391F37FF02C02F5F3F4F359527953093F8
:1043100031032093300333CE20913703309138039B
:104320008091780090917900280F391F30933803DD
:1043300020933703809101018A3019F4220F331F33
:1043400004C0220F331F220F331F309338032093F2
:1043500037032091370330913803C90137FD0796A1
:10436000F3E095958795FA95E1F79093290380936B
:10437000280380913D0390913E03820F931F97FD88
:1043800001969595879590933E0380933D032091E8
:10439000760430917704821B930B90931C018093D9
:1043A0001B0120912E0330912F0380911B019091CE
:1043B0001C01280F391F37FF02C02F5F3F4F359573
:1043C000279530932F0320932E0383E06BC1109227
:1043D000330381E0809311018091170390911803BA
:1043E0000196909318038093170380917800909121
:1043F0007900909316018093150180911501909199
:104400001601AA27BB272091430330914403409112
:10441000450350914603280F391F4A1F5B1F209305
:1044200043033093440340934503509346038091E4
:1044300047038F5F80934703803108F432C1809136
:10444000170190911801A0911901B0911A017C01F6
:104450008D0163E0EE0CFF1C001F111F6A95D1F760
:10446000E81AF90A0A0B1B0BE20EF31E041F151FB4
:1044700080911B03992787FD9095A92FB92FBC0127
:10448000CD0120EB30E240E050E00E949B91DC0146
:10449000CB01E81AF90A0A0B1B0BD801C7010496D5
:1044A000A11DB11DB7FF05C0D801C7010B96A11D05
:1044B000B11D23E0B595A795979587952A95D1F7D6
:1044C0008093170190931801A0931901B0931A01DA
:1044D0008091290790912A077C010027F7FC00951D
:1044E000102F8091170190911801A0911901B0919E
:1044F0001A01E81AF90A0A0B1B0BE0920304F09266
:104500000404009305041093060420911C033091C9
:104510001D0340911E0350911F0357FF04C0215FEC
:104520003F4F4F4F5F4F84E05595479537952795FF
:104530008A95D1F780911C0390911D03A0911E03D1
:10454000B0911F03821B930BA40BB50B80931C032C
:1045500090931D03A0931E03B0931F0380911C032F
:1045600090911D03A0911E03B0911F038E0D9F1DFE
:10457000A01FB11F80931C0390931D03A0931E03E3
:10458000B0931F0380911C0390911D03A0911E0303
:10459000B0911F03B7FF03C00F96A11DB11D14E01A
:1045A000B595A795979587951A95D1F7209103040E
:1045B00030910404281B390B64E0213036071CF0CD
:1045C00020E034E006C07CEF2030370714F420E010
:1045D0003CEF8091190390911A03809119039091F7
:1045E0001A0397FF03C0909581959F4FA901F3E0AF
:1045F000440F551FFA95E1F78D5B9240C4F080910E
:10460000190390911A039C01E4E0220F331FEA95ED
:10461000E1F7281B390B240F351F37FF02C0215F3C
:104620003F4F74E0359527957A95E1F717C0809153
:10463000190390911A039C0165E0220F331F6A95BC
:10464000E1F7281B390B240F351F37FF02C0215E0D
:104650003F4F45E0359527954A95E1F730931A038A
:10466000209319038091430390914403A091450343
:10467000B0914603B7FF03C00196A11DB11DB595CA
:10468000A795979587958093430390934403A093B0
:104690004503B093460388E08093470302C010921D
:1046A000330382E0809332038091320380937C0055
:1046B00080913303882319F08FEC80937A00FF9167
:1046C000EF91BF91AF919F918F917F916F915F918A
:1046D0004F913F912F911F910F91FF90EF900F906D
:1046E0000FBE0F901F90189590E2E4E3F7E08FE47F
:1046F0009193815087FFFCCF089590914A039035A4
:1047000040F4E92FFF27EC5CF84F80839F5F909384
:104710004A030895AF92BF92CF92DF92FF920F9318
:104720001F93CF93DF932091480320FF0AC080910D
:104730004903882311F0815002C0809121018093A8
:10474000490321FF0CC090914903809121019817E2
:1047500019F41092490303C09F5F90934903822F7D
:10476000992780FF04C081FF02C0109249030E9474
:10477000742380914903282F33279DE7C92E93E2A4
:10478000D92EC0913D05D0913E058A3098F481E143
:1047900080934A033F932F938FE994E09F938F93E5
:1047A000DF92CF92FE0109952DB73EB72A5F3F4FAA
:1047B0002DBF11C080E180934A033F932F9384EA79
:1047C00094E09F938F93DF92CF92FE0109958DB76E
:1047D0009EB706968DBF20914903822F9927AA275D
:1047E000BB27FC01419710F00C94E22CE85AFF4FD4
:1047F0000DE7C02E03E2D02EC0913D05D0913E05BD
:104800000C94619210924A0389EA94E09F938F93EB
:104810000DE713E2DF92CF92FE01099584E18093C8
:104820004A030F900F900F900F9085E690E09F93B2
:104830008F938AE590E09F938F931F921F928091B0
:1048400001016AE00E94BA91892F99279F938F9363
:10485000809101010E94BA9199279F938F9389EBD0
:1048600094E09F938F93DF92CF92E0913D05F0917A
:104870003E05099588E280934A03EDB7FEB73E9660
:10488000EDBF83E098E09F938F930E946330992758
:104890009F938F9381ED94E09F938F93DF92CF92BC
:1048A000E0913D05F0913E050995809157059927C6
:1048B0002DB73EB7285F3F4F2DBFEC01C071D070C0
:1048C00084FF06C08CE380934A038FED94E0F1C02F
:1048D0009091E404992349F18CE380934A03892F52
:1048E00099279F938F938CEE94E09F938F931F93C0
:1048F0000F93E0913D05F0913E050995DF93CF932D
:104900009091E40481E1989FC0011124825C954F4D
:104910009F938F931F930F93E0913D05F0913E0578
:1049200009958DB79EB70C9647C19091560599236E
:10493000B1F08CE380934A03892F99279F938F933B
:1049400084EF94E09F938F931F930F93E0913D0525
:10495000F0913E050995EDB7FEB7369679C4909172
:104960005003992371F08CE380934A03892F992790
:104970009F938F938BE095E09F938F931F930F935B
:10498000D9C48091360190913701069710F00C94AC
:10499000EB2C8CE380934A0380E295E0A5C78091DD
:1049A00072091DE7C12E13E2D12EC0913D05D091B1
:1049B0003E0580FF6BC010924A03809103049091E2
:1049C0000404A0910504B0910604BC01CD0125E0CA
:1049D00030E040E050E00E940F923F932F938DE231
:1049E00095E09F938F93DF92CF92FE01099584E12A
:1049F00080934A038DB79EB706968DBF8091FF03C3
:104A000090910004A0910104B0910204BC01CD0179
:104A100025E030E040E050E00E940F923F932F935A
:104A20008AE395E09F938F93DF92CF92E0913D05CB
:104A3000F0913E05099588E280934A03EDB7FEB7F1
:104A40003696EDBF80911501909116019F938F933B
:104A500087E495E09F938F93DF92CF92E0913D059D
:104A6000F0913E0509958CE380934A032DB73EB73C
:104A70002A5F3F4F2DBF87B599279F938F9384E57A
:104A800095E09F938F93DF92CF928EC010924A034E
:104A900081E695E09F938F93DF92CF92FE01099577
:104AA00084E180934A030F900F900F900F9080E75E
:104AB00095E09F938F93DF92CF921AC710924A038B
:104AC00089E795E09F938F930DE713E2DF92CF92F2
:104AD000FE01099584E180934A030F900F900F9097
:104AE0000F908091630490916404A0916504B0914B
:104AF0006604B7FF04C081509C4FAF4FBF4FCAE060
:104B0000B595A79597958795CA95D1F7BF93AF931C
:104B10009F938F9386E895E09F938F931F930F93B6
:104B2000E0913D05F0913E05099588E280934A03A6
:104B3000EDB7FEB73896EDBF80915B0490915C04B1
:104B4000A0915D04B0915E04B7FF04C081509C4FFA
:104B5000AF4FBF4FFAE0B595A79597958795FA9512
:104B6000D1F7BF93AF939F938F9385E995E09F9380
:104B70008F931F930F93E0913D05F0913E050995AA
:104B80008CE380934A032DB73EB7285F3F4F2DBF7C
:104B900080912F09909130099F938F9384EA95E03B
:104BA0009F938F931F930F93E0913D05F0913E05E6
:104BB00009958DB79EB706968DBF0DC7E1E0FE2E15
:104BC000C1E0D0E00BEB18E09F2D969584E1989F13
:104BD000C001112480934A03F801828193819F933D
:104BE0008F932196DF93CF932197808191819F931B
:104BF0008F93DF93CF9383EB95E09F938F938DE714
:104C000093E29F938F93E0913D05F0913E050995C6
:104C10002DB73EB7245F3F4F2DBF32E0F30E2296F3
:104C20000C5F1F4F88E08F1578F6D5C610924A03A7
:104C300080918707E82FFF27EE0FFF1FE754F74FFC
:104C4000808191819F938F9380918607E82FFF2722
:104C5000EE0FFF1FE754F74F808191819F938F9351
:104C600085EC95E09F938F93DF92CF92FE0109959B
:104C700084E180934A03EDB7FEB73896EDBF80918B
:104C80008907E82FFF27EE0FFF1FE754F74F8081BA
:104C900091819F938F9380918807E82FFF27EE0FD4
:104CA000FF1FE754F74F8081918181589F4F9F9359
:104CB0008F9385ED95E09F938F93DF92CF92E09154
:104CC0003D05F0913E05099588E280934A032DB792
:104CD0003EB7285F3F4F2DBF80918B07E82FFF27FE
:104CE000EE0FFF1FE754F74F8081918181589F4F4E
:104CF0009F938F9380918A07E82FFF27EE0FFF1F66
:104D0000E754F74F8081918181589F4F9F938F93F4
:104D100085EE95E09F938F93DF92CF92E0913D05D2
:104D2000F0913E0509958CE380934A038DB79EB7B9
:104D300008968DBF80918D07E82FFF27EE0FFF1F8C
:104D4000E754F74F8081918181589F4F9F938F93B4
:104D500080918C07E82FFF27EE0FFF1FE754F74FD6
:104D60008081918181589F4F9F938F9385EF95E02C
:104D700063C210924A0385E096E09F938F930DE7FC
:104D800013E2DF92CF92FE010995809101010F900D
:104D90000F900F900F908A3009F09DC084E18093AE
:104DA0004A0380917804909179049C0197FF02C096
:104DB000295F3F4F287F821B930B9F938F93809196
:104DC00078049091790497FD079673E095958795FF
:104DD0007A95E1F79F938F9320917804309179042D
:104DE00037FF02C0295F3F4F63E0359527956A95ED
:104DF000E1F780912A0390912B03821B930B9F93E1
:104E00008F9383E196E09F938F931F930F93E0918D
:104E10003D05F0913E05099588E280934A032DB740
:104E20003EB7265F3F4F2DBF809176049091770467
:104E30009C0197FF02C0295F3F4F287F821B930B85
:104E40009F938F93809176049091770497FD0796B6
:104E500053E0959587955A95E1F79F938F9320910D
:104E600076043091770437FF02C0295F3F4F43E05B
:104E7000359527954A95E1F780912803909129036C
:104E8000821B930B9F938F9384E296E09F938F9363
:104E90001F930F93E0913D05F0913E0509958CE33A
:104EA00080934A038DB79EB70A968DBF8091740494
:104EB000909175049F938F938091740490917504E1
:104EC0002091260330912703821B930B9F938F938E
:104ED00085E396E0ADC08B3019F0843108F4ADC0A5
:104EE00084E180934A0380917804909179049C0135
:104EF00097FF02C0215F3F4F207F821B930B97FDDE
:104F00000196959587959F938F93809178049091C2
:104F1000790497FD0F9624E0959587952A95E1F7FA
:104F20009F938F93209178043091790437FF02C0CA
:104F3000295F3F4FC3E035952795CA95E1F78091EA
:104F40002A0390912B03821B930B9F938F9383E4EF
:104F500096E09F938F931F930F93E0913D05F091FF
:104F60003E05099588E280934A032DB73EB7265F38
:104F70003F4F2DBF80917604909177049C0197FF5D
:104F800002C0215F3F4F207F821B930B97FD01964C
:104F9000959587959F938F93809176049091770450
:104FA00097FD0F96A4E095958795AA95E1F79F93B5
:104FB0008F93209176043091770437FF02C0295FE8
:104FC0003F4FF3E035952795FA95E1F78091280357
:104FD00090912903821B930B9F938F9385E596E015
:104FE0009F938F931F930F93E0913D05F0913E05A2
:104FF00009958CE380934A038DB79EB70A968DBFBF
:10500000809174049091750497FD0196959587950C
:105010009F938F938091740490917504209126033F
:1050200030912703821B930B9F938F9387E696E023
:105030009F938F931F930F9303C18D3009F0CBC4BF
:1050400084E180934A038091140199279F938F9361
:10505000809178049091790497FD0F9674E095956E
:1050600087957A95E1F79F938F93209178043091FB
:10507000790437FF02C0295F3F4F63E035952795DC
:105080006A95E1F780912A0390912B03821B930B81
:105090009F938F9386E796E09F938F931F930F9331
:1050A000E0913D05F0913E05099588E280934A0321
:1050B0002DB73EB7265F3F4F2DBF80911301992733
:1050C0009F938F93809176049091770497FD0F962C
:1050D00054E0959587955A95E1F79F938F9320918A
:1050E00076043091770437FF02C0295F3F4F43E0D9
:1050F000359527954A95E1F78091280390912903EA
:10510000821B930B9F938F938AE896E09F938F93D4
:105110001F930F93E0913D05F0913E0509958CE3B7
:1051200080934A038DB79EB70A968DBF8091120176
:1051300099279F938F93809174049091750497FDA4
:105140000196959587959F938F9380917404909184
:1051500075042091260330912703821B930B9F93A4
:105160008F938EE996E09F938F931F930F93E09117
:105170003D05F0913E050995EDB7FEB73A9668C03A
:1051800010924A0382EB96E09F938F93DF92CF9227
:10519000FE01099584E180934A030F900F900F90D0
:1051A0000F9080916E0490916F049F938F938091E4
:1051B0002203909123039F938F938FEB96E09F930D
:1051C0008F93DF92CF92E0913D05F0913E050995D6
:1051D00088E280934A032DB73EB7285F3F4F2DBF2B
:1051E00080916C0490916D049F938F938091240320
:1051F000909125039F938F938EEC96E09F938F93CE
:10520000DF92CF92E0913D05F0913E0509958CE348
:1052100080934A038DB79EB708968DBF809168042E
:10522000909169049F938F93809120039091210323
:105230009F938F938DED96E09F938F93DF92CF9204
:10524000E0913D05F0913E050995EDB7FEB7389622
:10525000EDBFC1C310924A0380911F0190912001BC
:105260006AE070E00E94DA919F938F9380911F0112
:10527000909120016AE070E00E94DA917F936F9331
:105280008CEE96E09F938F93DF92CF92FE0109956B
:1052900084E180934A032DB73EB7285F3F4F2DBF6F
:1052A0008091120A9091130A6AE070E00E94C69100
:1052B0009F938F938091120A9091130A6AE070E095
:1052C0000E94C6917F936F9380E097E09F938F93A6
:1052D000DF92CF92E0913D05F0913E05099588E27D
:1052E00080934A038DB79EB708968DBF8091140AAC
:1052F0009091150A9F938F9384E197E09F938F93EA
:10530000DF92CF92E0913D05F0913E0509958CE347
:1053100080934A03EDB7FEB73696EDBF8091160A2B
:105320009091170A9F938F9384E297E09F938F93B6
:10533000DF92CF92E0913D05F0913E0509952DB7A2
:105340003EB72A5F3F4F4FC110924A0386E397E072
:105350009F938F93DF92CF92FE01099584E1809312
:105360004A030F900F900F900F908091B908909181
:10537000BA089F938F938FE397E09F938F93DF9269
:10538000CF92E0913D05F0913E05099588E280932A
:105390004A038DB79EB706968DBF80910904992761
:1053A0009F938F938FE497E09F938F93DF92CF9299
:1053B000E0913D05F0913E0509958CE380934A0309
:1053C000EDB7FEB73696EDBF8091B80899270197E3
:1053D0009F938F938FE597E0A9CF10924A038FE6B2
:1053E00097E09F938F93DF92CF92FE01099584E11E
:1053F00080934A030F900F900F900F9080918A0135
:1054000090918B019F938F9387E797E09F938F9362
:10541000DF92CF92E0913D05F0913E05099588E23B
:1054200080934A038DB79EB706968DBF80912F0952
:10543000909130099F938F9385E897E09F938F9386
:10544000DF92CF92E0913D05F0913E0509958CE306
:1054500080934A03EDB7FEB73696EDBF80912104E5
:10546000909122049F938F9383E997E05FCFCAE0E6
:10547000CC2EC4E0DC2E20E030E0E901B3E0FB2ECE
:10548000C0934A03F60181916F0199279F938F93EF
:1054900089010F5F1F4F1F930F9381EA97E09F933E
:1054A0008F938DE793E29F938F93E0913D05F09169
:1054B0003E0509952DB73EB7285F3F4F2DBFFA94A3
:1054C00064969801F7FEDCCF86C2AEE0CA2EA4E057
:1054D000DA2EC0E0D0E08E01F3E0FF2E00934A0305
:1054E000F60181916F0199279F938F932596DF9302
:1054F000CF938EEA97E09F938F938DE793E29F93EC
:105500008F93E0913D05F0913E0509952DB73EB78B
:10551000285F3F4F2DBFFA940C5E1F4F2497F7FE74
:10552000DDCF59C210924A038BEB97E09F938F9384
:105530000DE713E2DF92CF92FE01099584E180939B
:105540004A030F900F900F900F9080916901992757
:105550009F938F9383EC97E09F938F93DF92CF92EB
:10556000E0913D05F0913E05099588E280934A035C
:105570008DB79EB706968DBF809104039091050369
:1055800097FD039695958795959587959F938F930E
:1055900081ED97E09F938F931F930F93E0913D05CB
:1055A000F0913E0509958CE380934A03EDB7FEB771
:1055B0003696EDBF8091B50799279F938F93809181
:1055C000B40799279F938F938FED97E09F938F93C5
:1055D0001F930F93E0913D05F0913E0509952DB77E
:1055E0003EB7285F3F4F2DBFF6C110924A038DEEA4
:1055F00097E09F938F937DE7A72E73E2B72EDF92FC
:10560000CF92FE0109950F900F900F900F90C8E573
:10561000D8E000E010E062E0F62E802F8C5E8093F0
:105620004A038B8D99278F7790709F938F938B89E7
:1056300099278F7790709F938F938B8599278F777A
:1056400090709F938F938B8199278F7790709F9302
:105650008F938DEF97E09F938F93BF92AF92E091DE
:105660003D05F0913E0509958DB79EB70C968DBF0F
:10567000FA940C5E1F4FA096F7FECFCFACC11092EC
:105680004A038EE098E09F938F935DE7A52E53E247
:10569000B52EDF92CF92FE0109950F900F900F90DB
:1056A0000F90C8E5D8E000E010E042E0F42E802F33
:1056B0008C5E80934A038F8D992787FD90959F93E9
:1056C0008F938F89992787FD90959F938F938F85CF
:1056D000992787FD90959F938F938F81992787FDB9
:1056E00090959F938F938DE198E09F938F93BF92B6
:1056F000AF92E0913D05F0913E050995EDB7FEB7FB
:105700003C96EDBFFA940C5E1F4FA096F7FECFCFEC
:1057100062C110924A038EE298E09F938F930DE747
:1057200013E2DF92CF92FE01099584E180934A0350
:105730000F900F900F900F9080917308881F88270B
:10574000881F97E0899FC00111248D969F938F93A6
:1057500080916B08881F8827881F96E0899FC00169
:1057600011248D969F938F9380916308881F8827BB
:10577000881F95E0899FC00111248D969F938F9378
:1057800080915B08881F8827881F9927880F991F99
:10579000880F991F8D969F938F938DE398E09F9329
:1057A0008F93DF92CF92E0913D05F0913E050995F0
:1057B00088E280934A032DB73EB7245F3F4F2DBF49
:1057C00080919308881F8827881F9BE0899FC001CC
:1057D00011248D969F938F9380918B08881F882723
:1057E000881F9AE0899FC00111248D969F938F9303
:1057F00080918308881F8827881F99E0899FC001AE
:1058000011248D969F938F9380917B08881F882702
:10581000881F992723E0880F991F2A95E1F78D9615
:105820009F938F9381E598E09F938F93DF92CF9220
:10583000E0913D05F0913E0509958CE380934A0384
:105840008DB79EB70C968DBF80919B08881F8827C7
:10585000881F9CE0899FC00111248D969F938F9390
:1058600085E698E09F938F93DF92CF92E0913D057C
:10587000F0913E0509958091A308EDB7FEB73696E5
:10588000EDBF87FF12C080E480934A0386E798E06B
:105890009F938F93DF92CF92E0913D05F0913E056B
:1058A00009950F900F900F900F908091AB0887FF94
:1058B00012C084E480934A0389E798E09F938F9312
:1058C0001F930F93E0913D05F0913E0509950F90D0
:1058D0000F900F900F908091B30887FF7CC088E4F1
:1058E00080934A038CE798E09F938F931F930F93C5
:1058F000E0913D05F0913E0509950F900F900F90B6
:105900000F9069C010924A038FE798E09F938F939E
:10591000DF92CF92FE01099584E180934A030F90B4
:105920000F900F900F908091DA029091DB029F937D
:105930008F938DE898E09F938F93DF92CF92E091C1
:105940003D05F0913E05099588E280934A032DB705
:105950003EB72A5F3F4F2DBF8091DC029091DD0260
:105960009F938F938AE998E09F938F93DF92CF92D2
:10597000E0913D05F0913E05099589E480934A0345
:105980008DB79EB706968DBF87EA98E09F938F9359
:10599000DF92CF92E0913D05F0913E05099580910F
:1059A00048030F900F900F900F9083FF14C0109238
:1059B000DD021092DC0260E070E08EE090E00E9478
:1059C000002F09C080912101281719F4215020933C
:1059D00021011092490310924803DF91CF911F914A
:1059E0000F91FF90DF90CF90BF90AF900895F999FD
:1059F000FECF92BD81BDF89A80B599270895F99997
:105A0000FECF1FBA92BD81BD60BD0FB6F894FA9A61
:105A1000F99A0FBE08954AEA20E030E026173707CA
:105A200040F4FC018191480F2F5F3F4F2617370745
:105A3000C8F3842F99270895EAEA40E050E046171A
:105A4000570778F49C01F999FECF32BD21BDF89A31
:105A500080B5E80F4F5F5F4F2F5F3F4F46175707E7
:105A600090F38E2F9927089581E08093880782E034
:105A70008093870783E08093860784E0809389077B
:105A800085E080938A0786E080938B0787E0809388
:105A90008C0788E080938D0789E080938E078AE0E9
:105AA00080938F078BE0809390078CE08093910721
:105AB00008958DE5809385078CE0E5EFF7E011927E
:105AC0008A95E9F780910101843150F08AE0809352
:105AD000A5071092C9078BE18093A1078EE40AC045
:105AE00083E08093A50780E28093C9078EE18093CD
:105AF000A10785E58093C6078093C70780E280935E
:105B0000C8071092F1078AE68093920782E2809399
:105B1000F30780E48093F40766E06093AC0710928B
:105B2000E9071092E60748E040939F0756EE50932E
:105B3000A0078093A2079EE1909393078FEF809335
:105B400095072FE02093960790939407109298075B
:105B50004093990784E180939A0710929B072093C2
:105B600097071092AE071092AF071092B0071092ED
:105B7000B1071092CB071092CC071092CD0710926C
:105B8000CE0790E89093B20732E33093B30782E0F8
:105B90008093F2072093B4075093B50784E0809375
:105BA000BA072DE72093BD072093BE072093BF07B8
:105BB0009093B60755E55093B70786E48093B807EE
:105BC0008CED8093B9078CE38093BB071092BC07E0
:105BD0008FE58093CF0783EF8093D1078AEA809384
:105BE000D3078093D40788E28093D0078093D207AD
:105BF0001092D5073093C0079AE59093C107309370
:105C0000C2078EEF8093D60784E68093D7079093E0
:105C1000D8079093D9079093DA078BE48093DB073A
:105C20005093DC078093DD071092DE076093DF0757
:105C30004093E0079093E1078AE28093E20785EFC3
:105C40008093E3078CE88093E40785E08093E50781
:105C50001092E7071092E80781E28093A90781E498
:105C60008093AA079093AB071092EA071092EB0774
:105C70001092EC0786E98093ED072093C30784E335
:105C80008093C4071092EE071092EF071092F0076E
:105C900008950E94592D8AE080939C0780E18093AB
:105CA0009D0726E020939E079AE59093A30788E737
:105CB0008093A4079093A6078093A7072093A80733
:105CC00080E28093AD078CE38093C5078BE48093DB
:105CD000CA0786E491E6A3E7B4E78093F5079093BB
:105CE000F607A093F707B093F8076CE770E085E834
:105CF00097E00E940B2D809301080895CF93DF93C6
:105D00000E94592D88E080939C0730E130939D07D5
:105D100026E020939E0794E69093A30788E780935C
:105D2000A4079093A6078093A7072093A807309312
:105D3000AD0786E48093C5078093CA07A5EFB7E057
:105D4000E2E2F1E0ED01019009922A95E1F76CE7BA
:105D500070E0CD01805790400E940B2D8093010888
:105D6000DF91CF9108950E94592D26E020939C0742
:105D70008AE080939D0784E080939E0794E6909349
:105D8000A30788E78093A4079093A6078093A707AB
:105D90002093A80780E18093AD0786E48093C50730
:105DA0008093CA0785E491E6A3E7B9E78093F507F6
:105DB0009093F607A093F707B093F8076CE770E0AD
:105DC00085E897E00E940B2D809301080895F999CA
:105DD000FECF92BD81BDF89A80B599270895F999B3
:105DE000FECF1FBA92BD81BD60BD0FB6F894FA9A7E
:105DF000F99A0FBE089567EF7CE20E9429900895FA
:105E00004FEF5CE20E9463900895EF92FF920F9330
:105E10001F93CF93C82F8150853008F0C3E08DE7E2
:105E2000C89F8001112487EEE82E8FEFF82EE00E38
:105E3000F11E6CE770E0C7010E941C2D682F9801CD
:105E40002D593F4F8FB39927AC014270507081FD9F
:105E5000F9CF32BD21BDF89A80B5861711F0CA017D
:105E600023C08FB399279C012270307081FDF9CF38
:105E7000F2BCE1BCF89A80B58D3511F0C90114C0AF
:105E80008DE7C89FC0011124499727EF3CE24DE7F9
:105E900050E0BC0185E897E00E9404900E94D86D14
:105EA0000E94E18B81E090E0CF911F910F91FF90D4
:105EB000EF900895282F863010F025E003C0882346
:105EC00009F421E0F999FECF1FBA82E090E092BD7B
:105ED00081BD20BD0FB6F894FA9AF99A0FBE0895C5
:105EE000CF93C82F809185078D3509F051C0C630FA
:105EF00010F0C5E003C0CC2309F44AC00E94ED8E27
:105F00008091F40782FF07C08091AA07843618F0B9
:105F100080E58093AA076CE770E085E897E00E942F
:105F20000B2D809301088DE7C89FC00111242FEF2E
:105F30003CE24DE750E065E877E049970E944190E8
:105F40002FEF3CE24CE050E066E877E080E590E03F
:105F50000E9441906CE070E086E897E00E940B2D73
:105F6000282FF999FECF1FBA8CE590E092BD81BD34
:105F700020BD0FB6F894FA9AF99A0FBE8C2F0E94A2
:105F80005A2F0E94D86D0E94E18B81E090E002C000
:105F900080E090E0CF9108956DE470E088EE93E0AA
:105FA0000E941C2D482F8FB399279C0122703070BE
:105FB00081FDF9CF85E394E092BD81BDF89A80B56B
:105FC000841779F48FB399279C012270307081FD7A
:105FD000F9CF88EE93E092BD81BDF89A80B581300B
:105FE00011F0C901089527EF3CE24EE450E068EE5D
:105FF00073E082E098E00E94049081E090E00895D0
:10600000809102088130A9F46DE470E082E098E0AC
:106010000E940B2D80934F082FEF3CE24EE450E09E
:1060200062E078E088EE93E00E94419081E090E0A9
:10603000089580E090E00895CF93DF9381E080930E
:106040000208E2E0F8E08FE0158616861786108ACF
:106050008150349687FFF8CF80E480930F088093B7
:10606000100810921108809312088093130890EC86
:1060700090931408109215088093160880931708BF
:10608000109218089093190890931A0880931B088F
:1060900010921C0880931D0890931E08A3E0B8E09E
:1060A0008CE0E9E2F1E0ED01019009928A95E1F7D7
:1060B0006DE470E0CD0101970E940B2D80934F0895
:1060C000DF91CF910895F999FECF82E090E092BDE3
:1060D00081BDF89A80B5282F863078F023E0322FE2
:1060E000F999FECF1FBA82E090E092BD81BD30BD2C
:1060F0000FB6F894FA9AF99A0FBE822F992708954D
:106100001F93CF93C82F162F863010F0C5E003C021
:10611000882309F4C1E08C2F99278230910541F042
:106120008330910544F4019731F40E94492E05C053
:106130000E947E2E02C00E94B32E1123E1F06CE07B
:1061400070E080E590E00E941C2D282FF999FECF89
:106150008CE590E092BD81BDF89A80B5821759F424
:1061600027EF3CE24CE050E060E570E086E897E025
:106170000E94049002C00E94342D8C2F0E94702F28
:10618000CF911F910895DF92EF92FF920F931F938B
:10619000CF93FF24DF2CEF2C81E090E00E94E72ECC
:1061A0008D3511F031E0E32E6CE070E080E590E099
:1061B0000E941C2DC82FF999FECF8CE590E092BD6E
:1061C00081BDF89A80B58C1711F421E0D22EC1E080
:1061D00001E010E0EE2029F48C2F0E94052F882387
:1061E000C9F591E0F92E1F930F938FEA98E09F93E2
:1061F0008F9380E695E19F938F93E0913D05F09119
:106200003E0509952DB73EB72A5F3F4F2DBF02309F
:10621000110549F0033011054CF40130110531F43A
:106220000E94492E05C00E947E2E02C00E94B32EFD
:10623000DD2059F027EF3CE24CE050E060E570E0F3
:1062400086E897E00E94049002C00E94342D8C2FB3
:106250000E94702FCF5F0F5F1F4FC63008F4BACF78
:10626000FF2019F083E00E945A2F0E946330C82F4C
:106270000E94052F8C2F99279F938F9385ED98E08F
:106280009F938F9300E615E11F930F93E0913D05D7
:10629000F0913E05099581E090E00E94E72E2DB730
:1062A0003EB72A5F3F4F2DBF8F3F21F00E94CC2F7A
:1062B000882399F48EEE98E09F938F931F930F930A
:1062C000E0913D05F0913E0509950E941C300E9429
:1062D00000300F900F900F900F90EE2029F06DE599
:1062E00081E090E00E94EF2E1092840790E0EFE0B2
:1062F000F8E0CFE08081349618160CF49F5FC1500F
:10630000C7FFF8CF90938407892F99279F938F9386
:1063100083E098E09F938F938FE099E09F938F9312
:106320001F930F93E0913D05F0913E0509950E9462
:106330004A098DB79EB708968DBFCF911F910F91D7
:10634000FF90EF90DF900895982F2FB7F894399829
:10635000389A88B1836088B98091B9008C7F809326
:10636000B9008AE28093B80010925503109253034B
:1063700010925203992379F0E8E5F8E08BE010825F
:106380001182128213821482158216821782815022
:10639000389687FFF4CF78942FBF08951092550355
:1063A00084E98093BC0080E88093BC001092BD001B
:1063B0001092BA001092BB001092B9001092B8006F
:1063C0001092510380E00E94A4311092BB0085E836
:1063D0008093BC0080914F03826080934F030895A7
:1063E0001F920F920FB60F9211242F933F934F934A
:1063F0005F938F939F93EF93FF9380915503282F83
:106400003327442755278F5F80935503F9012731A0
:10641000310508F0C2C2E759FF4F0C94619281E048
:106420008093510309C0809153038C3090F4809184
:1064300053038F5F8093530380915303E82FFF270B
:10644000EE0FFF1FEE0FFF1FEE5FF74F858518164B
:1064500054F7809153038C3070F010924E031092D9
:106460004D031092530385E08093550380915203AE
:10647000880F8D5A04C080915303880F8E5A8093E1
:10648000BB0085E87FC280915303E82FFF2783E09C
:10649000EE0FFF1F8A95E1F7E85AF74F818180934D
:1064A000BB0085E88093BC0080915303E82FFF2751
:1064B000EE0FFF1FEE0FFF1FEE0FFF1FE85AF74F03
:1064C000808180FF91C080915303E82FFF27EE0F5A
:1064D000FF1FEE0FFF1FEE0FFF1FE85AF74F8281DD
:1064E000882329F080918407873008F46CC280915A
:1064F0004D0390914E03892B09F065C280914B03A7
:1065000090914C03892B09F05EC26EC080915303B9
:1065100021E030E002C0220F331F8A95E2F780911C
:106520004B0390914C0328233923232B79F080913E
:106530005303E82FFF27EE0FFF1FEE0FFF1FEE0F95
:10654000FF1FE85AF74F80E184830DC08091530309
:10655000E82FFF27EE0FFF1FEE0FFF1FEE0FFF1FAD
:10656000E85AF74F148280915303E82FFF2753E036
:10657000EE0FFF1F5A95E1F7E85AF74F8481282F55
:10658000332743E0220F331F4A95E1F780915303ED
:10659000E82FFF2793E0EE0FFF1F9A95E1F7E85AE7
:1065A000F74F82818770822B8093BB0085E88093B0
:1065B000BC002091530381E090E002C0880F991F36
:1065C0002A95E2F720914D0330914E0382239323C5
:1065D000892B51F080E598E09093590380935803FC
:1065E00088E080935A03EFC184E089C1E0915803A9
:1065F000F091590381918093BB0085E88093BC00A2
:10660000F0935903E093580380915A03815080938B
:106610005A03882309F4D7C183E071C18091B9007E
:10662000803351F580915603882329F480915303D8
:106630008F5F8093560380915303E82FFF2783E0F9
:10664000EE0FFF1F8A95E1F7E85AF74F83819927EC
:106650008F7790708F3791057CF480915303E82FEA
:10666000FF27EE0FFF1FEE0FFF1FEE0FFF1FE85A71
:10667000F74F83818F5F83831092550384E9809362
:10668000BC008AE090E090933701809336018091BE
:1066900053038F5F80935303109255036DC1809114
:1066A000B9008034C9F180915203E82FFF27EE0F23
:1066B000FF1FEE0FFF1FEE0FFF1FE85AF74F8381FA
:1066C0008F778383809152038F5F809352038091F1
:1066D00052038C30A0F01092520310924C0310928F
:1066E0004B03809157038F5F809357038C3038F0B2
:1066F0001092570380914F038D7F80934F038091B9
:106700004F03816080934F031092550384E9809377
:10671000BC001092510373C080915203E82FFF27F1
:10672000EE0FFF1FEE0FFF1FEE0FFF1FE85AF74F90
:1067300083818068838380915203E82FFF27EE0FC7
:10674000FF1FEE0FFF1FEE0FFF1FE85AF74F80816C
:1067500080FF2FC080915203E82FFF2753E0EE0FF8
:10676000FF1F5A95E1F7E85AF74F84819927009760
:1067700051F04097D9F580E598E0909359038093C4
:10678000580388E031C080915203992743E0880F75
:10679000991F4A95E1F7835A974F90935903809335
:1067A000580390915203809157039817E1F483E0C6
:1067B0001BC080915203992733E0880F991F3A95A7
:1067C000E1F7835A974F9093590380935803809130
:1067D0004F0381FD06C09091520380915703981793
:1067E00011F482E001C081E080935A0380915A0342
:1067F000813011F485E801C085EC8093BC00809164
:1068000056038093500310925603DDC0E091580365
:10681000F09159038091BB0080838091580390913F
:1068200059030196909359038093580380915A031A
:10683000815080935A03823010F085EC5DC0813026
:1068400011F485E859C080914F0381FF2DC08091DC
:10685000D10380FD1DC080915203E82FFF2723E064
:10686000EE0FFF1F2A95E1F7E85AF74F86818A3F1E
:1068700079F480915203E82FFF2793E0EE0FFF1F7A
:106880009A95E1F7E85AF74F8081816080830CC0C8
:1068900080915203E82FFF2783E0EE0FFF1F8A95B8
:1068A000E1F7E85AF74F1082809152038F5F80938F
:1068B0005203809152038C30A0F010925203109238
:1068C0004C0310924B03809157038F5F80935703C3
:1068D0008C3038F01092570380914F038D7F809356
:1068E0004F031092550384E98093BC0080914F03BD
:1068F000816080934F0365C08093BC0086E08093E5
:10690000550361C088E9BBCD80915403880F805F37
:10691000B6CD8091540399278130910561F0823082
:1069200091051CF4892B21F04EC0029739F04BC021
:1069300080911401A4CD80911301A1CD8091120109
:106940009ECD80E89CCD1092550384E98093BC00D5
:10695000109251038AE090E09093370180933601C2
:1069600080915403823088F4809154038F5F809328
:10697000540382E18093550380914F038E7F80936F
:106980004F0385EA8093BC001EC01092540380918F
:106990004F03816080934F0316C01092550384E922
:1069A0008093BC0080914F03816080934F038AE005
:1069B00090E0909337018093360110925303109228
:1069C000520310925103FF91EF919F918F915F912C
:1069D0004F913F912F910F900FBE0F901F901895E0
:1069E0001F93CF93DF93182F80910804882321F4FD
:1069F0008091E902882319F081E090E097C01D3072
:106A000008F092C01123B1F0E12FFF2723E0EE0F31
:106A1000FF1F2A95E1F7E85AF74F359780813596A1
:106A200088230CF081C03897808180FD03C083E00B
:106A300090E07CC080915008823019F084E090E0B2
:106A400075C067E070E080E598E00E940B2D9091A2
:106A50005708891719F085E090E068C080ED97E04D
:106A60000E946F19EC0180914F0380FD05C0CE019B
:106A70000E9478198823B9F3112319F48FEF90E05D
:106A80000BC0212F33272150304081E090E002C01D
:106A9000880F991F2A95E2F790934E0380934D0338
:106AA000A1E0B0E0E8E5F8E040E050E06BE0CD01C7
:106AB000042E02C0880F991F0A94E2F720914D031B
:106AC00030914E0382239323892B11F0118212827D
:106AD00061504F5F5F4F389667FFE9CF10925303C5
:106AE0001092550380914F038E7F80934F0385EA68
:106AF0008093BC0080914F0380FD05C0CE010E94B1
:106B000078198823B9F380914D0390914E03892B16
:106B100029F0CE010E947819882311F380914D034A
:106B200090914E03009711F082E090E0DF91CF91B9
:106B30001F9108950F931F93CF93DF93982F809108
:106B40000804882321F48091E902882319F081E068
:106B500090E092C09D30A0F4992319F486E090E073
:106B60008BC0C92FDD27FE0133E0EE0FFF1F3A95E2
:106B7000E1F7E85AF74F35978081359687FD03C0D6
:106B800082E090E079C03897808180FD03C083E087
:106B900090E072C080ED97E00E946F198C018091A7
:106BA0004F0380FD05C0C8010E9478198823B9F3FE
:106BB000219721E030E0C90102C0880F991FCA95D2
:106BC000E2F790934C0380934B03D901E8E5F8E09A
:106BD00040E050E06BE0CD01042E02C0880F991F09
:106BE0000A94E2F720914B0330914C0382239323C4
:106BF000892B11F01182128261504F5F5F4F3896DE
:106C000067FFE9CF10925203109250081092570874
:106C10001092550380914F038E7F80934F0385EA36
:106C20008093BC0080914F0380FD05C0C8010E9485
:106C300078198823B9F380914B0390914C03892BE9
:106C400029F0C8010E947819882311F38091500817
:106C5000823019F084E090E00FC067E070E080E5DA
:106C600098E00E940B2D90915708891719F085E044
:106C700090E002C080E090E0DF91CF911F910F91F2
:106C80000895CF93DF9380E021E83FEFCDEED8E089
:106C9000E9EBF8E0DF01853020F411961C921E929A
:106CA00002C0318320831982188222968F5F129648
:106CB00032968A3180F31092750410927404109207
:106CC0007704109276041092790410927804DF9180
:106CD000CF9108951F920F920FB60F9211240F9328
:106CE0001F932F933F934F935F936F937F938F9354
:106CF0009F93AF93BF93CF93DF93EF93FF938091D5
:106D0000F30782FDE1C04091860050918700809199
:106D10005C0390915D03481B590B80918600909114
:106D2000870090935D0380935C03CA018D54944067
:106D3000A0915E03B0915F03835F9A4178F48091E4
:106D40005E038093B808149714F010923A0181E022
:106D500090E090935F0380935E032BC2AD30B1054A
:106D60000CF027C2CA018B5F9040845B914008F011
:106D700086C08091380190913901481B590BE091F0
:106D8000EE07EE2351F0FF27EE0FFF1FE754F74FFA
:106D90008081918184369105ECF4FD01EA0FFB1F9F
:106DA000E754F74F80819181FA01E81BF90BCF017D
:106DB000F7FF03C0909581959F4F06975CF48091F3
:106DC0000904883C20F480910904865F01C088ECA6
:106DD00080930904FD01EA0FFB1FE754F74F808100
:106DE00091819C01220F331F280F391F240F351F5B
:106DF00037FF02C02D5F3F4FE901D595C795D59567
:106E0000C795CA0101968C179D0714F4219706C0F7
:106E100041505040C417D5070CF4219680910904C5
:106E2000833CE0F08D010A0F1B1FF801E754F74F78
:106E3000808191819E01281B390BC90163E070E0BC
:106E40000E94DA91CB01880F991F860F971F03517B
:106E5000174FD80111969C938E9307C0AA0FBB1FA2
:106E6000A351B74F11961C921E92E0915E03F091D0
:106E70005F03EE0FFF1FE754F74FD183C0832091CC
:106E80005E0330915F032F5F3F4F30935F0320938A
:106E90005E0380910101843108F08BC125303105FA
:106EA00011F45D9A01C05D9880915E0390915F033B
:106EB0008630910511F45C9A01C05C98079711F433
:106EC0005B9A77C15B9875C14091860050918700AD
:106ED0008091600390916103481B590B809186005B
:106EE000909187009093610380936003CA018D5451
:106EF00094406091CA03835F9A4108F07AC060931E
:106F00005B0380915B03843008F453C09091B80810
:106F100080915B03981709F04CC05091CB035B3014
:106F200008F43FC010923A011092CA0340E05F316A
:106F3000C0F0E42FFF27EE0FFF1F9F012A563C4FA2
:106F4000DF01A754B74F8D919C91D9018D939C93EC
:106F5000DF01A351B74F8D919C91E055FC4F918378
:106F60008083E42FFF27EE0FFF1F9F012754374F29
:106F7000DF01AE59BC4F8D919C91D90111969C9324
:106F80008E93DF01A458BC4F8D919C91E351F74F34
:106F900091838083842F8F5F482F8D3040F28093C0
:106FA000CA038091CB038F3FB9F08F5F8093CB03EF
:106FB00013C08091CB03853620F08AE08093CB0309
:106FC00002C01092CB03809101018A3011F084310C
:106FD00010F0289A01C0289881E08093CA0380911C
:106FE0000804882309F0E5C080915B038093B8080A
:106FF000E0C06D3008F0B5C0CA018B5F9040845B83
:10700000914008F090C08091380190913901481B5F
:10701000590BE62FFF27EE0FFF1FEE59FC4F808123
:107020009181FA01E81BF90BCF0105960B9720F52A
:10703000E091EE07EE2351F0FF27EE0FFF1FE7541C
:10704000F74F8081918184369105B4F48091CB0310
:107050008A3120F080910904865F05C08B3028F0CA
:10706000809109048E5F8093090480910904893C12
:1070700018F088EC80930904E62FFF27EE0FFF1F1E
:10708000EE59FC4F808191819C01220F331F280F04
:10709000391F240F351F37FF02C02D5F3F4FE90115
:1070A000D595C795D595C795CA0101968C179D07AB
:1070B00014F4219706C041505040C417D5070CF472
:1070C0002196809109048E3BD8F0E62FFF27EE0F22
:1070D000FF1FDF01AE59BC4F8D919C919E01281B73
:1070E000390BC90163E070E00E94DA91CB01880F8F
:1070F000991F860F971FE458FC4F9183808308C027
:10710000E62FFF27EE0FFF1FE458FC4F118210827D
:107110008091CA03E82FFF27EE0FFF1FEE59FC4FA7
:10712000D183C08309C0809101018A3011F084317C
:1071300010F0289A01C0289880910101843188F4C8
:107140008091CA03853011F45D9A05C05D98863040
:1071500011F45C9A05C05C98873011F45B9A01C009
:107160005B988091CA03843120F48F5F8093CA03B7
:1071700020C08431F1F4809101018A3011F0843112
:1071800010F0289A01C028988EE18093CA032CE061
:10719000CDEED8E0A6E9B3E0E9EBF8E08D919D9162
:1071A000918380833296198218822296215027FF7C
:1071B000F5CFFF91EF91DF91CF91BF91AF919F916B
:1071C0008F917F916F915F914F913F912F911F917F
:1071D0000F910F900FBE0F901F901895EF92FF9296
:1071E0000F931F938091A1079927880F991F880FEC
:1071F000991F7C010027F7FC0095102F80916304F4
:1072000090916404A0916504B0916604BC01CD0125
:10721000A80197010E940F923093E3062093E206A3
:1072200080915B0490915C04A0915D04B0915E0438
:10723000BC01CD01A80197010E940F923093E50691
:107240002093E406809176099091770997FD039643
:1072500095958795959587959093E7068093E60693
:10726000809186099091870997FD0396959587955A
:10727000959587959093E9068093E806809174042C
:10728000909175042091260330912703821B930B64
:107290009093EB068093EA06809103049091040496
:1072A000A0910504B0910604BC01CD0125E030E0B9
:1072B00040E050E00E940F923093ED062093EC06E0
:1072C00080912003909121039093EF068093EE0626
:1072D00080918A0190918B019093F3068093F2063E
:1072E00080911F01909120019093F5068093F40600
:1072F0008091090499279093F7068093F606809170
:107300002F09909130099093F9068093F8068091A7
:10731000590899279093FB068093FA06809161089B
:1073200099279093FD068093FC0680916908992720
:107330009093FF068093FE068091710899279093A1
:1073400001078093000780910403909105039093B7
:107350000B0780930A078091120A9091130A909369
:107360000F0780930E078091160A9091170A909349
:107370001107809310078091FF0390910004A09162
:107380000104B0910204BC01CD0125E030E040E0F1
:1073900050E00E940F9230931307209312078091C0
:1073A00021049091220490931907809318078091EB
:1073B000180A992790931D0780931C078091D50484
:1073C0009091D60490931F0780931E078091D30459
:1073D0009091D404909321078093200780915605C3
:1073E000882321F480915705882321F08091E106BC
:1073F000816003C08091E1068E7F8093E1061F913A
:107400000F91FF90EF900895EF92FF921F93CF930B
:10741000DF93182F7B0180910804882391F58091D8
:1074200001018C3010F0863111F4299801C0299A9D
:1074300011501F3FE9F0F0920B03E0920A03E701BD
:1074400080910A0390910B03892B11F4209781F30B
:1074500080910E038823A1F310920E0380910A03FA
:1074600090910B03892B09F421970E94038FE8CF99
:10747000809101018C3010F0863111F4299A01C0FD
:107480002998DF91CF911F91FF90EF900895CF93AE
:10749000DF93809101018D3011F40E94621E1092E1
:1074A0007A0080912A0390912B0390933B0980935B
:1074B0003A09809128039091290390932B09809396
:1074C0002A09809126039091270390937C09809349
:1074D0007B092091220330912303C901880F991F52
:1074E000880F991F820F931F820F931F9093770924
:1074F000809376092091240330912503C901880FD8
:10750000991F880F991F820F931F820F931F9093CB
:107510008709809386098FEC80937A00AAE0B4E013
:10752000CAE8D7E097E08991E82FFF27EE0FFF1F09
:10753000E754F74F0190F081E02DE158FF4F1E1600
:107540001F061CF0E0E0F0E005C0EF3FF10514F08D
:10755000EFEFF0E08C91282F3327E217F30714F4B4
:10756000815004C02E173F0714F48F5F8C93915005
:10757000119697FFD8CF8091C6079927AA27BB27D6
:10758000BC01CD0124EC39E040E050E00E949B9129
:10759000DC01CB018093820190938301A09384014D
:1075A000B09385018091C7079927AA27BB27BC0103
:1075B000CD010E949B91DC01CB0180937E019093D1
:1075C0007F01A0938001B0938101DF91CF91089555
:1075D000A0E0B0E0EEEEFAE30C943092882EC0E02A
:1075E000D0E07E016E0110925605D0936F04C093D7
:1075F0006E04D0936D04C0936C04D0936904C0935F
:107600006804D0937904C0937804D0937704C0932E
:107610007604D0937504C0937404109264011092A0
:10762000630110921B030E94473A84E690E00E9497
:1076300091190E94473A8091920780FF10C0809173
:10764000150190911601875B934038F480911501E4
:10765000909116018E5E924010F40E94E01D0FE1A1
:107660008AE090E00E94911980912603909127036F
:10767000C80FD91F80912A0390912B03E80EF91EA1
:107680008091280390912903C80ED91E015007FF4D
:10769000E7CF9701205F3F4F369527953695279581
:1076A0003093790420937804C60140969695879587
:1076B0009695879590937704809376046096F5E08D
:1076C000D695C795FA95E1F7D0937504C0937404E5
:1076D0009093730480937204309371042093700428
:1076E000882009F441C0809176099091770997FF2D
:1076F00003C0909581959F4F6CE070E00E94DA91F5
:107700009B0170936F0460936E0480918609909141
:10771000870997FF03C0909581959F4F6CE070E0BB
:107720000E94DA9170936D0460936C048091270736
:10773000909128079093690480936804B90184E0CC
:1077400090E00E94002F60916C0470916D0486E0BF
:1077500090E00E94002F609168047091690488E0B5
:1077600090E00E94002F65C084E090E00E94FB2E14
:1077700090936F0480936E0486E090E00E94FB2E4D
:1077800090936D0480936C0488E090E00E94FB2E3F
:107790009C01909369048093680480916E04909199
:1077A0006F048150984050F480916C0490916D0466
:1077B0008150984018F421503440D8F180E399E08A
:1077C0009F938F9380E695E19F938F93E0913D0582
:1077D000F0913E050995809176099091770997FF80
:1077E00003C0909581959F4F6CE070E00E94DA9104
:1077F00070936F0460936E0480918609909187095D
:1078000097FF03C0909581959F4F6CE070E00E94B8
:10781000DA9170936D0460936C04809127079091C6
:10782000280790936904809368040F900F900F903D
:107830000F9010923B0910923A0910922B09109266
:107840002A0910927C0910927B0984E690E00E943C
:10785000911980912203909123039C01220F331FE1
:10786000220F331F280F391F280F391F3093770934
:107870002093760980912403909125038C01000FB9
:10788000111F000F111F080F191F080F191F109348
:107890008709009386098091A107C82EDD24EE2474
:1078A000FF24442737FD4095542FC701B6010E949D
:1078B0009B914B015C01609363047093640480931B
:1078C0006504909366049801442737FD4095542F32
:1078D000C701B6010E949B91DC01CB0180935B0440
:1078E00090935C04A0935D04B0935E048092430483
:1078F00090924404A0924504B092460480933B04C5
:1079000090933C04A0933D04B0933E041092330442
:1079100010923404109235041092360480911701AD
:1079200090911801A0911901B0911A0190932A0722
:107930008093290710921A031092190310922304BE
:1079400010922404109225041092260400918A01BA
:1079500010918B01109322040093210484E690E09F
:10796000909387018093860182E390E090930B03CC
:1079700080930A038091C6079927AA27BB27BC01D9
:10798000CD0124EC39E040E050E00E949B91DC0105
:10799000CB018856954CAF4FBF4F80938201909397
:1079A0008301A0938401B09385018091C707992733
:1079B000AA27BB27BC01CD010E949B91DC01CB0112
:1079C0008856954CAF4FBF4F80937E0190937F01B7
:1079D000A0938001B0938101109241011092400167
:1079E000C801AA2797FDA095BA2F20913C0130919C
:1079F0003D0140913E0150913F01BC01CD010E94EB
:107A00009B91DC01CB018093820990938309A09321
:107A10008409B093850910921E0410921D040E94DF
:107A2000D86D8091D10384608093D1038FEF8093D0
:107A3000020A1092030A80E28093040ACAE0D4E0AA
:107A4000AAE8B7E007E08D91E82FFF27EE0FFF1FB0
:107A5000E754F74F8081918181588993015007FF46
:107A6000F2CF84E68093090480910803882311F003
:107A7000579A06C080E091E1909308018093070136
:107A8000809178049091790480569940815C9B4262
:107A900028F0809156058160809356058091760488
:107AA0009091770480569940815C9B4228F08091A8
:107AB00056058260809356058091740490917504F8
:107AC0008C5291408957954028F0809156058460EA
:107AD0008093560580916E0490916F048C52914072
:107AE000835C914028F0809156058860809356050C
:107AF00080916C0490916D048C529140835C914014
:107B000028F0809156058061809356058091680425
:107B100090916904805092408355914028F0809163
:107B2000560580628093560586E4809379010E9411
:107B3000E18BECE0CDB7DEB70C944C92A3E1B0E062
:107B4000E4EAFDE30C942A92809174049091750408
:107B50002091260330912703821B930B90937C097D
:107B600080937B09809130039091310397FD0796B4
:107B70009C0113E0359527951A95E1F730933B0961
:107B800020933A0980912E0390912F0397FD079639
:107B9000B3E095958795BA95E1F790932B0980937B
:107BA0002A09309346092093450990933E09809312
:107BB0003D098091760990917709AC01440F551FDA
:107BC000480F591F2091220330912303C901880FC8
:107BD000991F880F991F820F931F820F931F480FC1
:107BE000591F57FF02C04D5F5F4F559547955595FB
:107BF0004795509377094093760980918609909133
:107C00008709AC01440F551F480F591F20912403C9
:107C100030912503C901880F991F880F991F820F82
:107C2000931F820F931F480F591F57FF02C04D5FCC
:107C30005F4F5595479555954795509387094093C4
:107C400086092091220330912303C901880F991FCF
:107C5000880F991F820F931F820F931F9C01442747
:107C600037FD4095542F8091530490915404A09176
:107C70005504B0915604820F931FA41FB51F809323
:107C8000530490935404A0935504B0935604209148
:107C9000240330912503C901880F991F880F991F6C
:107CA000820F931F820F931F9C01442737FD40953D
:107CB000542F80914F0490915004A0915104B091A1
:107CC0005204820F931FA41FB51F80934F049093FB
:107CD0005004A0935104B093520480914F099091A5
:107CE00050092091220330912303820F931F909318
:107CF000500980934F0980917E0990917F092091CE
:107D0000240330912503820F931F90937F09809362
:107D10007E0980916A0490916B04019690936B04A4
:107D200080936A0480912707909128072091680426
:107D300030916904821B930B9C01442737FD4095C9
:107D4000542F80914B0490914C04A0914D04B0911C
:107D50004E04820F931FA41FB51F80934B04909372
:107D60004C04A0934D04B0934E048FEC80937A00A2
:107D70001092110120913B0430913C0440913D044C
:107D800050913E0429873A874B875C8729543B46AC
:107D9000414050402CF028E43BE641E050E00DC06B
:107DA00089859A85AB85BC85885B9449AE4FBF4F6A
:107DB0004CF428EB34E94EEF5FEF2D833E834F8385
:107DC000588708C089859A85AB85BC858D839E833D
:107DD000AF83B88720914304309144044091450417
:107DE000509146042D873E874F87588B29543B4638
:107DF000414050402CF028E43BE641E050E00DC00B
:107E00008D859E85AF85B889885B9449AE4FBF4FFD
:107E10004CF428EB34E94EEF5FEF29833A834B8330
:107E20005C8308C08D859E85AF85B88989839A83D8
:107E3000AB83BC83A0917B09B0917C09BB8BAA8BDF
:107E4000FD01CF01AA2797FDA095BA2FA09033047A
:107E5000B0903404C0903504D0903604A80EB91EFA
:107E6000CA1EDB1EA0923304B0923404C0923504C3
:107E7000D0923604E0908209F09083090091840941
:107E800010918509E80EF91E0A1F1B1FE092820956
:107E9000F09283090093840910938509F091EC0313
:107EA000F98BFF2309F098C18091EB03882309F037
:107EB00093C18091720986FF8FC180912A099091A8
:107EC0002B09AA2797FDA095BA2FBC01CD012981C6
:107ED0003A814B815C810E949B919B01AC0197FF91
:107EE00004C02150384F4F4F5F4FBBE05595479529
:107EF00037952795BA95D1F780916301682E77243D
:107F000088249924CA01B901A40193010E949B917C
:107F1000DC01CB018093840490938504A0938604B4
:107F2000B0938704B7FF04C08150904FAF4FBF4F4D
:107F30001C012D01ACE05594479437942794AA95E1
:107F4000D1F72092840430928504409286045092A6
:107F5000870480913A0990913B09AA2797FDA09543
:107F6000BA2FBC01CD012D813E814F8158850E94E1
:107F70009B9197FF04C06150784F8F4F9F4FFBE05C
:107F80009595879577956795FA95D1F7A401930113
:107F90000E949B91DC01CB0180938804909389041B
:107FA000A0938A04B0938B04B7FF04C08150904F14
:107FB000AF4FBF4F9C01AD01ECE05595479537950C
:107FC0002795EA95D1F7209388043093890440934C
:107FD0008A0450938B04809184049091850490933B
:107FE00022098093210980918804909189049093BB
:107FF000260980932509221933094409550920933C
:1080000088043093890440938A0450938B04E20ED1
:10801000F31E041F151FE0928209F092830900935A
:10802000840910938509809162018823B1F457FF78
:1080300004C02F5F3F4F4F4F5F4F55954795379582
:108040002795A21AB30AC40AD50AA0923304B092A3
:108050003404C0923504D09236042A893B897901D0
:108060000027F7FC0095102F8091880490918904D7
:10807000A0918A04B0918B04E80EF91E0A1F1B1F01
:10808000C801B70129813A814B815C810E949B9193
:108090009B01AC0197FF04C02150384F4F4F5F4FF9
:1080A0006BE055954795379527956A95D1F780915F
:1080B0006401A82EBB24CC24DD24CA01B901A60189
:1080C00095010E949B91DC01CB0180937C049093ED
:1080D0007D04A0937E04B0937F04B7FF04C0815059
:1080E000904FAF4FBF4F3C014D013CE095948794BA
:1080F000779467943A95D1F760927C0470927D04EE
:1081000080927E0490927F04C801B7012D813E8148
:108110004F8158850E949B9197FF04C06150784F12
:108120008F4F9F4F2BE095958795779567952A956B
:10813000D1F7A60195010E949B91DC01CB018093B0
:10814000800490938104A0938204B0938304B7FFCA
:1081500004C08150904FAF4FBF4FAC01BD018CE0C8
:1081600075956795579547958A95D1F74093800403
:108170005093810460938204709383042A893B891D
:1081800037FF03C0309521953F4F21343105E4F18D
:10819000D401C30197FE07C0B095A0959095819535
:1081A0009F4FAF4FBF4F81389105A105B10584F4B2
:1081B000DB01CA0177FF07C0B095A0959095819526
:1081C0009F4FAF4FBF4F81389105A105B105E4F036
:1081D00081E080931F0418C010922609109225098F
:1081E00010922209109221091092800410928104A9
:1081F000109282041092830410927C0410927D04E9
:1082000010927E0410927F048091800490918104EA
:10821000A0918204B0918304BC01CD0124E630E03A
:1082200040E050E00E940F92E0907C04F0907D04CA
:10823000E21AF30AF0923909E092380980917C043D
:1082400090917D04A0917E04B0917F04BC01CD018A
:1082500024E630E040E050E00E940F92DA01C901CC
:1082600020918004309181048C01021B130B109328
:108270002D0900932C0980913C0190913D01A09122
:108280003E01B0913F01BC01CD0128E631E040E064
:1082900050E00E949B912091820930918309409186
:1082A000840950918509261737074807590764F054
:1082B000261B370B480B590B2093820930938309F7
:1082C0004093840950938509209182093091830954
:1082D000409184095091850957FF0CC0260F371F24
:1082E000481F591F209382093093830940938409C2
:1082F0005093850960912A0970912B096E0D7F1D9D
:108300009B01442737FD4095542F8091370490916D
:108310003804A0913904B0913A04820F931FA41F2E
:10832000B51F8093370490933804A0933904B09319
:108330003A048091F1039091F203681B790BCB0111
:10834000AA2797FDA095BA2F29853A854B855C858C
:10835000820F931FA41FB51F80933B0490933C048E
:10836000A0933D04B0933E04C0907E01D0907F0165
:10837000E0908001F0908101C816D906EA06FB065C
:10838000C4F488EA91E6A0E0B0E08C199D09AE093A
:10839000BF0980933B0490933C04A0933D04B093A9
:1083A0003E048093370490933804A0933904B0932B
:1083B0003A0422273327A9012C193D094E095F09E8
:1083C00080913B0490913C04A0913D04B0913E0407
:1083D00082179307A407B507B4F4D701C601885ADA
:1083E0009146A040B04080933B0490933C04A093FE
:1083F0003D04B0933E048093370490933804A093D7
:108400003904B0933A0460913A0970913B09600FC6
:10841000711F9B01442737FD4095542F80913F04E5
:1084200090914004A0914104B0914204820F931FA7
:10843000A41FB51F80933F0490934004A093410470
:10844000B09342048091EF039091F003681B790B85
:10845000CB01AA2797FDA095BA2F2D853E854F8584
:108460005889820F931FA41FB51F809343049093D4
:108470004404A0934504B0934604E0908201F09038
:1084800083010091840110918501E816F9060A071D
:108490001B07C4F488EA91E6A0E0B0E08E199F09BA
:1084A000A00BB10B8093430490934404A093450424
:1084B000B093460480933F0490934004A0934104FA
:1084C000B093420422273327A9012E193F09400BFC
:1084D000510B8091430490914404A0914504B091C4
:1084E000460482179307A407B507B4F4D801C7015F
:1084F000885A9146A040B04080934304909344042E
:10850000A0934504B093460480933F0490934004A5
:10851000A0934104B09342048091330490913404B9
:10852000A0913504B0913604809347049093480499
:10853000A0934904B0934A04809143049091440469
:10854000A0914504B0914604809363049093640421
:10855000A0936504B093660480913B0490913C0421
:10856000A0913D04B0913E0480935B0490935C0421
:10857000A0935D04B0935E0480913F049091400409
:10858000A0914104B091420480935F0490936004F1
:10859000A0936104B09362048091370490913804F1
:1085A000A0913904B0913A048093570490935804F1
:1085B000A0935904B0935A0480911D0190911E011B
:1085C00097FD079603E0959587950A95E1F79093B7
:1085D0003B0980933A0980911B0190911C0197FD02
:1085E000079613E0959587951A95E1F790932B09D7
:1085F00080932A0980912A0390912B030F9734F4DA
:1086000088E19CEF90933B0980933A0980912A037B
:1086100090912B03079734F480E398EF90933B09F4
:1086200080933A09209101012A30A9F480912A030C
:1086300090912B03835F934034F088EE93E0909306
:108640003B0980933A0980912A0390912B038A5F1A
:108650009340DCF014C080912A0390912B03815D3C
:10866000974034F088EE93E090933B0980933A0969
:1086700080912A0390912B03805E974034F080ED27
:1086800097E090933B0980933A0980912803909159
:1086900029030F9734F488E19CEF90932B09809382
:1086A0002A098091280390912903079734F480E3E5
:1086B00098EF90932B0980932A092A30A9F480918E
:1086C000280390912903835F934034F088EE93E070
:1086D00090932B0980932A09809128039091290374
:1086E0008A5F9340DCF014C08091280390912903A5
:1086F000815D974034F088EE93E090932B0980934E
:108700002A098091280390912903805E974034F0D4
:1087100080ED97E090932B0980932A096091700176
:10872000662309F4AFC040911D0150911E01809154
:108730008C0490918D04481B590B509393044093E3
:10874000920420911D0130911E01280F391F37FF1F
:1087500002C02F5F3F4F3595279530938D042093AE
:108760008C04413851051CF080E890E005C0405869
:108770005F4F34F480E89FEF9093930480939204CA
:1087800040911B0150911C0180918E0490918F04A7
:10879000481B590B509391044093900420911B0166
:1087A00030911C01280F391F37FF02C02F5F3F4F48
:1087B0003595279530938F0420938E0441385105C9
:1087C0001CF080E890E005C040585F4F34F480E82A
:1087D0009FEF9093910480939004462F55278091AA
:1087E000920490919304849FB001859F700D949F93
:1087F000700D11249B0177FF02C0215F3F4FF4E011
:1088000035952795FA95E1F780913A0990913B09C2
:10881000820F931F90933B0980933A0980919004B3
:1088200090919104849FD001859FB00D949FB00DCD
:108830001124AD019D01B7FF02C0215F3F4FE4E06D
:1088400035952795EA95E1F780912A0990912B09B2
:10885000820F931F90932B0980932A0980911D0109
:1088600090911E01860F971F90931E0180931D010A
:1088700080911B0190911C01840F951F90931C0106
:1088800080931B0100913D0910913E0980912109BF
:1088900090912209101611065CF59C0197FF04C007
:1088A00022273327281B390BC901AA2797FDA0953A
:1088B000BA2F20916201332744275527BC01CD01EF
:1088C0000E949B919B01AC0197FF04C0215C3F4F2C
:1088D0004F4F5F4F76E055954795379527957A9599
:1088E000D1F78091380990913909820F931F27C0E1
:1088F00097FF03C0909581959F4FAA2797FDA0955C
:10890000BA2F20916201332744275527BC01CD019E
:108910000E949B919B01AC0197FF04C0215C3F4FDB
:108920004F4F5F4F66E055954795379527956A9568
:10893000D1F78091380990913909821B930B90935C
:10894000390980933809E0904509F09046098091F3
:108950002509909126091E141F045CF59C0197FFC0
:1089600004C022273327281B390BC901AA2797FDEA
:10897000A095BA2F20916201332744275527BC01C7
:10898000CD010E949B919B01AC0197FF04C0215C2B
:108990003F4F4F4F5F4F96E0559547953795279539
:1089A0009A95D1F780912C0990912D09820F931FF0
:1089B00027C097FF03C0909581959F4FAA2797FDE9
:1089C000A095BA2F20916201332744275527BC0177
:1089D000CD010E949B919B01AC0197FF04C0215CDB
:1089E0003F4F4F4F5F4F86E05595479537952795F9
:1089F0008A95D1F780912C0990912D09821B930BB8
:108A000090932D0980932C098091720987FF44C0AF
:108A1000B989BB2309F040C08091EB038823E1F5BD
:108A2000E1E0EE16E1E0FE064CF080913A0990910B
:108A30003B098E0D9F1D805091400DC0F0E0EF1658
:108A4000FFEFFF0664F480913A0990913B098E0D87
:108A50009F1D80509F4F90933B0980933A0921E0DE
:108A6000013012074CF080912A0990912B09800F58
:108A7000911F805091400CC03FEF0030130764F409
:108A800080912A0990912B09800F911F80509F4F50
:108A900090932B0980932A09E2E1CD5E0C944692D3
:108AA00080910804882301F58091D1038C7F809305
:108AB000D103ABE5B5E0E8E5F8E09BE08091E902A1
:108AC000882309F48C938D9181831282915038967A
:108AD00097FFF4CF8091E902882359F08091E90251
:108AE00081508093E90205C08091D1038160809319
:108AF000D10380915103882319F0109251030895F6
:108B0000809353038093550380914F038E7F80930E
:108B10004F0385EA8093BC000895CF93DF93AAE0CA
:108B2000B4E0CAE8D7E057E09991E92FFF27EE0FAC
:108B3000FF1FE754F74F0190F081E02DE158FF4F00
:108B4000EF3FF10521F01CF0EFEFF0E004C0F7FF7C
:108B500002C0E0E0F0E0993111F4EC931BC04C91BD
:108B6000242F3327E217F307A9F0CF01821B930BC1
:108B700097FD03969595879595958795242F280FB2
:108B80002C93822F9927E817F90714F4215001C07C
:108B90002F5F2C935150119657FFC6CF80919407A9
:108BA000883F38F0EFEFF0E0E81BF109E65FFB4F9C
:108BB00080818093760180917601882329F0843624
:108BC00018F084E68093760180919607883F38F00C
:108BD000EFEFF0E0E81BF109E65FFB4F8081809347
:108BE000740180917401882329F0843618F084E69A
:108BF000809374018091A307883F38F0EFEFF0E095
:108C0000E81BF109E65FFB4F808180936F01809143
:108C10006F018B3010F48AE002C08F3F11F4809313
:108C20006F018091D007883F38F0EFEFF0E0E81B4C
:108C3000F109E65FFB4F80818093510980915109D2
:108C4000863010F485E002C08F3F11F48093510903
:108C50008091D207883F38F0EFEFF0E0E81BF10990
:108C6000E65FFB4F80818093790980917909863096
:108C700010F485E002C08F3F11F480937909809150
:108C8000BD07873F19F4429905C006C0863F31F4FD
:108C9000439B02C08CE80BC086E409C0883F38F0D3
:108CA000EFEFF0E0E81BF109E65FFB4F8081809376
:108CB0004E098091BE07873F19F4429905C006C04E
:108CC000863F31F4439B02C08CE80BC086E409C0A8
:108CD000883F38F0EFEFF0E0E81BF109E65FFB4F6B
:108CE0008081809327098091BF07883F38F0EFEF9C
:108CF000F0E0E81BF109E65FFB4F808180935709A4
:108D000080919507883F38F0EFEFF0E0E81BF1091C
:108D1000E65FFB4F80818093750180919807883FC3
:108D200038F0EFEFF0E0E81BF109E65FFB4F8081E0
:108D30008093730180919A07883F38F0EFEFF0E05D
:108D4000E81BF109E65FFB4F808180937101809100
:108D5000A207883F38F0EFEFF0E0E81BF109E65F8B
:108D6000FB4F8081809372018091A407883F38F087
:108D7000EFEFF0E0E81BF109E65FFB4F80818093A5
:108D80006E018091A507883F38F0EFEFF0E0E81B17
:108D9000F109E65FFB4F8081809370018091A60707
:108DA000883F38F0EFEFF0E0E81BF109E65FFB4F9A
:108DB000808180936D018091A707883F38F0EFEFA5
:108DC000F0E0E81BF109E65FFB4F808180936C01C6
:108DD0008091AD07883F38F0EFEFF0E0E81BF10934
:108DE000E65FFB4F808180936A018091AE07883FE8
:108DF00038F0EFEFF0E0E81BF109E65FFB4F808110
:108E00008093E6038091AF07883F38F0EFEFF0E002
:108E1000E81BF109E65FFB4F80818093E5038091B9
:108E2000B007883F38F0EFEFF0E0E81BF109E65FAC
:108E3000FB4F80818093E4038091B107883F38F035
:108E4000EFEFF0E0E81BF109E65FFB4F80818093D4
:108E5000E3038091CB07883F38F0EFEFF0E0E81BA9
:108E6000F109E65FFB4F80818093E2038091CC079C
:108E7000883F38F0EFEFF0E0E81BF109E65FFB4FC9
:108E800080818093E1038091CD07883F38F0EFEF38
:108E9000F0E0E81BF109E65FFB4F80818093E0037F
:108EA0008091CE07883F38F0EFEFF0E0E81BF10942
:108EB000E65FFB4F80818093DF038091B207883F9C
:108EC00038F0EFEFF0E0E81BF109E65FFB4F80813F
:108ED000809369018091B607883F38F0EFEFF0E0AA
:108EE000E81BF109E65FFB4F808180936801809168
:108EF000B307883F38F0EFEFF0E0E81BF109E65FD9
:108F0000FB4F8081809367018091B707883F38F0DD
:108F1000EFEFF0E0E81BF109E65FFB4F8081809303
:108F200066018091C007883F38F0EFEFF0E0E81B62
:108F3000F109E65FFB4F8081809365018091C30753
:108F4000883F38F0EFEFF0E0E81BF109E65FFB4FF8
:108F50008081809364018091C407883F38F0EFEFEF
:108F6000F0E0E81BF109E65FFB4F8081809363012D
:108F70008091C507883F38F0EFEFF0E0E81BF1097A
:108F8000E65FFB4F8081809362018091ED07883F0F
:108F900038F0EFEFF0E0E81BF109E65FFB4F80816E
:108FA000809336099091DF04992321F0809136094E
:108FB000981720F080913609882311F49093360990
:108FC00080919207809372098091F30780935609EC
:108FD0008091CA07883F38F0EFEFF0E0E81BF10915
:108FE000E65FFB4F8081809361018091E607883FB7
:108FF00038F0EFEFF0E0E81BF109E65FFB4F80810E
:109000008093890980916A01282F33272F5F3F4F72
:109010008CE398E2B9010E94DA9170937801609331
:1090200077018091A00780937A0980919F078093B0
:109030003F099091E807933308F44AC081E0809398
:10904000DE03983F58F0EFEFF0E0E91BF109E65F2F
:10905000FB4F8081823310F41092DE0380917901FE
:109060002091DE03821721F18330F8F430919F01C3
:10907000222351F08CED95E090930B0380930A032B
:10908000332369F48EE209C088EC90E090930B03DF
:1090900080930A03332319F487E180939F0185E0CD
:1090A0008093F3032093790103C081508093790169
:1090B0008091C9099091CA0997FF0FC08091DE0382
:1090C000882359F08091560580688093560505C025
:1090D0001092DE038AE0809379018091C909909112
:1090E000CA0997FF1DC0809108048823C9F08091A8
:1090F000DE038823A9F08091090190910A018F5F16
:109100009F4F71F488E99AE390930B0380930A03CD
:1091100080E094EA90930A01809309011092DE03A3
:109120008091DE03882369F08091D0038160809371
:10913000D00380916401823D48F4825E8093640193
:1091400005C08091D0038E7F8093D003DF91CF91B3
:109150000895A7E1B0E0EFEAF8E40C942A920E94A7
:109160009E3D8091D103992784719070892B91F550
:109170008091F40782FF27C08091ED039091EE0368
:109180000097F1F002E088359007D4F49C0197FF36
:1091900002C02D5F3F4F35952795359527958091D6
:1091A000AA079927289FA001299F500D389F500D8D
:1091B0001124CA0164E670E00E94DA91CB0106C076
:1091C0008DE290E003C08091AA0799279093CF0386
:1091D0008093CE032091CC033091CD0355E720330B
:1091E000350759F4109214041092130480913F092A
:1091F00099279093CF038093CE03609113047091CD
:1092000014047A83698380913F0999270A96681725
:10921000790714F49A83898380910904843608F0CD
:109220006AC08091D00382FD66C08091A8049091AD
:10923000A904009731F001979093A9048093A804A2
:109240000BC0109208049093D3038093D2038091B3
:10925000D1038D7E8093D103809101018A3011F07A
:10926000843110F0289A01C028988091D2039091FF
:10927000D303895E9340E0F18091180A8536C0F1EE
:109280008091CE039091CF039A8389838091D103FB
:1092900080618093D10380918607A82FBB27AA0FF6
:1092A000BB1FFD01E351F74F1182108280918707A8
:1092B000282F3327220F331FC9018351974FFC01F9
:1092C00011821082A754B74F11961C921E922754F8
:1092D000374FD90111961C921E9280918907E82F71
:1092E000FF27EE0FFF1FE754F74F118210823FC395
:1092F000109208043CC3809109048D3808F40DC312
:109300008091D1038F7E8093D1039091AB0782E34C
:10931000989FC00111249093A9048093A804E98127
:10932000FA81B9978CF080910804882369F08091C4
:10933000D2039091D303FFEF8F3F9F0729F001964F
:109340009093D3038093D2038091D2039091D3035F
:109350008F3F910509F008F510922B0410922C0410
:1093600010922D0410922E041092270410922804BB
:109370001092290410922A041092940410929504D9
:1093800010929604109297041092330410923404B1
:10939000109235041092360405C08091D10382608A
:1093A0008093D10380918807E82FFF27EE0FFF1FDE
:1093B000E754F74F80819181813591050CF438C1D4
:1093C00020910804222309F033C180918907E82FF6
:1093D000FF27EE0FFF1FE754F74F808191818C34F8
:1093E00091050CF4FFC08091AA048F5F8093AA04BA
:1093F000893C08F41DC12093AA041092D303109253
:10940000D20330918607E32FFF27EE0FFF1FE754AB
:10941000F74F8081918187349105B4F4809187075B
:10942000E82FFF27EE0FFF1FE754F74F8081918150
:109430000190F081E02DF7FF03C0F095E195FF4F1B
:10944000E734F1050CF478C041E020918707A22FA2
:10945000BB27AA0FBB1FA754B74F8D919C911197A3
:109460008734910544F0E32FFF27EE0FFF1FE754E9
:10947000F74F808191818D919C918734910574F093
:1094800080918607E82FFF27EE0FFF1FE754F74F65
:1094900080819181873491050CF042E0E22FFF2713
:1094A000EE0FFF1FE754F74F8081918186349105BD
:1094B00074F480918607E82FFF27EE0FFF1FE75413
:1094C000F74F80819181873491050CF043E0E22FC2
:1094D000FF27EE0FFF1FE754F74F808191818A5BD2
:1094E0009F4F74F480918607E82FFF27EE0FFF1F30
:1094F000E754F74F80819181873491050CF044E067
:10950000E22FFF27EE0FFF1FE754F74F8081918175
:109510008A5B9F4F74F480918607E82FFF27EE0F38
:10952000FF1FE754F74F80819181863491050CF439
:1095300045E0842F0E945A2F80918707E82FFF274C
:10954000EE0FFF1FE754F74F808191810190F0816A
:10955000E02DF7FF03C0F095E195FF4F7E97CCF427
:1095600080918607E82FFF27EE0FFF1FE754F74F84
:10957000808191818A5B9F4F64F481E080937105C3
:109580001092F40388EE93E090930B0380930A0308
:109590004FC00E9463300E94052F80E00E94910915
:1095A0008091AC070E94978D8091720980FF10C056
:1095B0008091150190911601875B934038F480915A
:1095C0001501909116018E5E924010F40E94E01DEC
:1095D00080E00E94E83A81E08093F40380930803DE
:1095E000579A1AC080819181855B9F4FFCF48091CE
:1095F000AA048F5F8093AA04893CD0F020930804CA
:109600002093AA041092D3031092D20381E00E9407
:10961000E83A81E08093F40388E180939F010E94FF
:10962000633068E770E00E94043A02C02093AA0405
:1096300080918807E82FFF27EE0FFF1FE754F74FB1
:10964000808191818B5A9F4F0CF060C12091E90776
:10965000E22FFF27EF77F070EE0FFF1FE351F74F78
:1096600080819181069714F084E606C08081918103
:109670008B5F9F4F1CF48CE98093AD0480910804AC
:10968000E0918907882309F0ECC0FF27EE0FFF1F48
:10969000E754F74F80819181855B9F4F9CF48091C7
:1096A000F40783FD0BC0E22FFF27EE0FFF1FE754E7
:1096B000F74F80819181855B9F4FDCF08091E907B6
:1096C0008823B9F08091F40783FFC8C08091E9072F
:1096D000E82FFF27EE0FFF1FE754F74F808191819E
:1096E000875F9F4F0CF4BAC08091AD04843609F0B7
:1096F000B5C02091F403222329F08091D103886022
:109700008093D1038091AB048F5F8093AB048E3F35
:1097100008F4EEC01092AB0480915605882309F03E
:1097200092C0222309F48FC08091E404882309F0B9
:109730008AC081E090E09093D3038093D20381E0CC
:109740008093080410929404109295041092960449
:10975000109297041092330410923404109235043E
:109760001092360410922F0410923004109231049B
:10977000109232048091A107E82EFF2400271127C0
:1097800080917609909177099C01442737FD409597
:10979000542FC801B7010E949B91DC01CB0180933B
:1097A000430490934404A0934504B09346048091ED
:1097B0008609909187099C01442737FD4095542FD5
:1097C000C801B7010E949B91DC01CB0180933B044F
:1097D00090933C04A0933D04B0933E0480916304B5
:1097E00090916404A0916504B091660480933F0455
:1097F00090934004A0934104B093420480915B0491
:1098000090915C04A0915D04B0915E048093370454
:1098100090933804A0933904B0933A0410922B0427
:1098200010922C0410922D0410922E0410922704F2
:10983000109228041092290410922A0484E680933E
:10984000F30384E350C08CED95E090930B03809379
:109850000A03222309F04CC081E045C01092AB04FA
:1098600047C0FF27EE0FFF1FE754F74F808191811C
:109870008C3491059CF08091F40783FD0BC0E22F9E
:10988000FF27EE0FFF1FE754F74F80819181855B23
:109890009F4FCCF08091E9078823A9F08091F407CD
:1098A00083FF24C08091E907E82FFF27EE0FFF1FF9
:1098B000E754F74F808191818E5C9F4FBCF480917B
:1098C000AD048C3999F48091AC048F5F8093AC0423
:1098D0008B3F70F0109208041092AC041092D303E6
:1098E0001092D20386E280939F0102C01092AC04D2
:1098F0008091CC039091CD0313E0883E9107B8F599
:1099000001969093CD038093CC0331C01092AD04A7
:109910001092CD031092CC032AC02E5E324038F153
:1099200080919109909192098059914000F5809120
:10993000030490910404A0910504B09106048C5D89
:109940009540A040B0409CF480E395E79093CD0310
:109950008093CC038091D2039091D3038A5E93408D
:1099600030F089EE93E09093D3038093D2038091FB
:109970003A01815080933A0180913A018F3F21F062
:109980008091D10384FFA9C30E948D45B0909C07AC
:109990008091B6049091B7049C01220F331F280FC9
:1099A000391FC0908607AC2DBB27AA0FBB1FFD0136
:1099B000E754F74F4B2D552780819181849FF0010B
:1099C000859FF00D949FF00D11242E0F3F1F37FF40
:1099D00002C02D5F3F4FB9017595679575956795E5
:1099E000A351B74F80919D07082F11278D919C910E
:1099F000809F7001819FF00C909FF00C11246E0DE0
:109A00007F1D7093B7046093B6048091B804909161
:109A1000B9049C01220F331F280F391FD0908707EC
:109A2000AD2DBB27AA0FBB1FFD01E754F74F808167
:109A30009181849FF001859FF00D949FF00D11247A
:109A40002E0F3F1F37FF02C02D5F3F4FA9015595D5
:109A5000479555954795A351B74F8D919C91809F00
:109A60007001819FF00C909FF00C11244E0D5F1D32
:109A70005093B9044093B8048091DE03882309F41D
:109A800048C0CB0177FD0396DC01B595A795B59548
:109A9000A795CA0157FD0396FC01F595E795F59545
:109AA000E79580919A01682F772767FD70956A9FE7
:109AB00090016B9F300D7A9F300D11248091E60448
:109AC000482F552747FD50954E9FC0014F9F900D41
:109AD0005E9F900D1124280F391F37FF02C0295FA8
:109AE0003F4F93E0359527959A95E1F730931A0407
:109AF000209319046E9F90016F9F300D7E9F300D53
:109B000011244A9FC0014B9F900D5A9F900D112424
:109B10003FC08091E707E82FFF27EE5BFE4F86816D
:109B200080939A0190819093E604A82FBB27A7FD0C
:109B3000B095A69F9001A79F300DB69F300D1124C0
:109B4000E92FFF27E7FDF095E49FC001E59F900D09
:109B5000F49F900D1124280F391F37FF02C0295F91
:109B60003F4F83E0359527958A95E1F730931A04A6
:109B700020931904A49F9001A59F300DB49F300D30
:109B80001124E69FC001E79F900DF69F900D1124D0
:109B9000281B390B37FF02C0295F3F4F03E0359583
:109BA00027950A95E1F730931804209317048091C4
:109BB0008907E82FFF27EE0FFF1FE754F74F80813B
:109BC0009181909581959F4F9093160480931504F1
:109BD0008530910514F0049705C00FEF8C3F900776
:109BE00034F40496909316048093150404C01092E4
:109BF0001604109215048091D204882309F43EC003
:109C0000282F33278091190490911A0497FD079605
:109C100013E0959587951A95E1F7289FA001299F54
:109C2000500D389F500D1124CA0157FD0F96B4E016
:109C300095958795BA95E1F790931A048093190446
:109C4000809117049091180497FD0796A3E09595CD
:109C50008795AA95E1F7289FB001299F700D389F3D
:109C6000700D1124CB0177FD0F96F4E09595879543
:109C7000FA95E1F7909318048093170480901904E3
:109C800090901A048091D5049091D604881A990A6C
:109C900090921A04809219040091170410911804EC
:109CA0008091D3049091D404081B190B10931804CD
:109CB0000093170480918807E82FFF27EE0FFF1FFE
:109CC000E754F74FE080F1808FE790E0E80EF91E4F
:109CD000F0921404E092130480916F019927AA274F
:109CE00097FDA095BA2FBC01CD010E940F91DC0118
:109CF000CB0120E030E040E251E4BC01CD010E9404
:109D00007D90DC01CB01BC01CD010E94E190DC0122
:109D1000CB018093800980916E01809358098091D6
:109D20006D019927AA2797FDA095BA2FBC01CD01F7
:109D30000E940F91DC01CB0120E030E040E251E4D1
:109D4000BC01CD010E947D90DC01CB01BC01CD01A5
:109D50000E94E190DC01CB018093310980916C017C
:109D60008093470980917D0580FF59C080918909C2
:109D7000813808F454C080917605992787FD909525
:109D80002B2D3327829FD001839FB00D929FB00D62
:109D900011248A0E9B1E90921A04809219048091BD
:109DA0007705992787FD9095829FF001839FF00D9D
:109DB000929FF00D11240E0F1F1F10931804009393
:109DC000170480917805282F332727FD309580913F
:109DD000150490911604820F931F9093160480939C
:109DE000150480917A05282F332727FD309580911F
:109DF00097079927289F8001299F100D389F100DE4
:109E00001124109341010093400180917905992715
:109E10008E159F0524F4909314048093130480916D
:109E200013049091140497FF04C01092140410922C
:109E300013048091720982FF02C010925809409168
:109E4000190450911A04CA0157FD03969C013595D7
:109E500027953595279537FF03C0309521953F4FBE
:109E60008091D6039091D70382179307B4F4CA0167
:109E700057FF03C0909581959F4F97FD0396959549
:109E80008795959587959093D7038093D6038536CC
:109E9000910544F084E690E001C001979093D703C8
:109EA0008093D6034091170450911804CA0157FDBE
:109EB00003969C01359527953595279537FF03C067
:109EC000309521953F4F8091D4039091D50382170F
:109ED0009307B4F4CA0157FF03C0909581959F4F33
:109EE00097FD039695958795959587959093D503BE
:109EF0008093D4038536910544F084E690E001C058
:109F000001979093D5038093D4038091D10384FF6C
:109F100008C01092D7031092D6031092D503109266
:109F2000D403ED2DFF27EE0FFF1FE754F74F4091AD
:109F3000C107242F3327808191812817390744F4E2
:109F40008091F10782FF04C081E08093EA0313C08F
:109F5000ED2DFF27EE0FFF1FE754F74F842F9927B2
:109F60002091C207821B910920813181281739076E
:109F700014F41092EA0340918707E42FFF27EE0FB5
:109F8000FF1FE754F74F5091C107852F99272227CC
:109F90003327281B390B808191818217930744F462
:109FA0008091F10783FF04C081E08093E90316C02C
:109FB0008091E903882391F0E42FFF27EE0FFF1F24
:109FC000E754F74F8091C2079927851B910920819B
:109FD00031818217930714F41092E903EC2DFF27C7
:109FE000EE0FFF1FE754F74F4091C107242F33278F
:109FF000808191812817390744F48091F10780FF0F
:10A0000004C081E08093E70317C08091E7038823B1
:10A0100099F0EC2DFF27EE0FFF1FE754F74F842F29
:10A0200099272091C207821B91092081318128172D
:10A03000390714F41092E70340918607E42FFF27B5
:10A04000EE0FFF1FE754F74F5091C107852F992757
:10A0500022273327281B390B808191818217930790
:10A0600044F48091F10781FF04C081E08093E8030C
:10A0700016C08091E803882391F0E42FFF27EE0FAC
:10A08000FF1FE754F74F8091C2079927851B91095D
:10A09000208131818217930714F41092E803809194
:10A0A000EA03882319F48091E903811181E0809308
:10A0B000EB038091E703882321F48091E803882350
:10A0C00051F081E08093EC031092EB031092EA03CD
:10A0D0001092E90302C08093EC038091EB03882384
:10A0E00021F48091EC03882369F08091C0079927BF
:10A0F00029813A818217930714F49A83898381E036
:10A1000080931F048091D00399279C0124703070A4
:10A1100082FF2DC08091D5049091D60490958195B1
:10A120009F4F90931A04809319048091D3049091C7
:10A13000D404909581959F4F9093180480931704B1
:10A1400080917C0190917D0190931404809313047D
:10A15000809172098B778B66809372098091560982
:10A160008C7B8093560988EC809375011EC080918A
:10A17000D10384FF1AC03093160420931504309342
:10A180001A042093190430931804209317049AE5B5
:10A190009093800988E780935809909331098093C0
:10A1A00047091092EB031092EC0380914A099091B9
:10A1B0004B09A0914C09B0914D0920916304309155
:10A1C00064044091650450916604820F931FA41F9C
:10A1D000B51F80934A0990934B09A0934C09B09303
:10A1E0004D098091520990915309A0915409B09161
:10A1F0005509E0905B04F0905C0400915D041091BF
:10A200005E04EB82FC820D831E838E0D9F1DA01FBA
:10A21000B11F8093520990935309A0935409B093AE
:10A2200055098091410990914209A0914309B0914B
:10A230004409E0905F04F090600400916104109183
:10A240006204EF82F88609871A878E0D9F1DA01F72
:10A25000B11F8093410990934209A0934309B093A1
:10A2600044098091320990913309A0913409B09149
:10A270003509E0905704F09058040091590410916A
:10A280005A04EB86FC860D871E878E0D9F1DA01F2E
:10A29000B11F8093320990933309A0933409B0938E
:10A2A0003509F090EC03FF86FF2029F48091EB0341
:10A2B000882309F460C01092530410925404109241
:10A2C00055041092560410924F04109250041092AC
:10A2D00051041092520410924A0910924B091092A4
:10A2E0004C0910924D091092520910925309109284
:10A2F0005409109255091092410910924209109286
:10A3000043091092440910923209109233091092B5
:10A310003409109235098091430490914404A0912E
:10A320004504B091460480933F0490934004A09369
:10A330004104B093420480913B0490913C04A0916D
:10A340003D04B0913E048093370490933804A09369
:10A350003904B0933A041092180310921703109224
:10A36000F0031092EF031092F2031092F1030F85A5
:10A37000002309F0D0C18091EB03882309F0CBC101
:10A380008091270790912807815092402CF480916A
:10A390000804882309F4BFC19090020AA090A10785
:10A3A000209076093090770940908609509087096F
:10A3B00019140CF0BBC0BB24CC24DD24CA01B901A4
:10A3C000A60195010E940F9279018A018091CB0923
:10A3D0009091CC09281A390AC101AA2797FDA095A6
:10A3E000BA2FE81AF90A0A0B1B0B6B817C818D814D
:10A3F0009E81A60195010E940F9259016A018091E8
:10A40000CD099091CE09481A590AC201AA2797FD91
:10A41000A095BA2FA81AB90ACA0ADB0A292C332434
:10A4200027FC3094432C532CC801B701A2019101A1
:10A430000E949B9197FF04C061507E4F8F4F9F4FAA
:10A440003B014C0109E095948794779467940A95B1
:10A45000D1F7C601B501A20191010E949B9197FF1E
:10A4600004C061507E4F8F4F9F4F5B016C0119E01C
:10A47000D594C794B794A7941A95D1F78091D60331
:10A480009091D703813491053CF48091D40390914D
:10A49000D50381349105D4F0D401C30197FE03C0E4
:10A4A0000196A11DB11D3C014D01959487947794AF
:10A4B0006794D601C501D7FE03C00196A11DB11D49
:10A4C0005C016D01D594C794B794A7948091040A58
:10A4D000282F332727FD3095432F532F2615370577
:10A4E0004805590514F439014A01992787FD9095CB
:10A4F000909581959F4FAA2797FDA095BA2F681632
:10A5000079068A069B0614F43C014D012A153B0589
:10A510004C055D0514F459016A01A816B906CA066E
:10A52000DB060CF0D0C05C016D01CDC0EA2CFF242D
:10A5300000271127CA01B901A80197010E940F92B3
:10A5400039014A01C101AA2797FDA095BA2F681ABF
:10A55000790A8A0A9B0A6B817C818D819E81A80180
:10A5600097010E940F9259016A01C201AA2797FD23
:10A57000A095BA2FA81AB90ACA0ADB0AD401C301E6
:10A5800097FE03C00F96A11DB11D3C014D01F4E0E3
:10A590009594879477946794FA95D1F7D601C5017D
:10A5A000D7FE03C00F96A11DB11D5C016D01E4E053
:10A5B000D594C794B794A794EA95D1F78091D60320
:10A5C0009091D703813491053CF48091D40390910C
:10A5D000D50381349105A4F0C401B30123E030E038
:10A5E00040E050E00E940F9239014A01C601B501D6
:10A5F00023E030E040E050E00E940F9259016A01F0
:10A6000080918907E82FFF27EE0FFF1FE754F74FD0
:10A61000808191810190F081E02DF7FF03C0F095DA
:10A62000E195FF4F7A97A4F0C401B30123E030E035
:10A6300040E050E00E940F9239014A01C601B50185
:10A6400023E030E040E050E00E940F9259016A019F
:10A6500089E18093880121E26216710481049104EA
:10A660002CF070E2672E712C812C912C30EE631649
:10A670003FEF73063FEF83063FEF930644F460EE2F
:10A68000662E6FEF762E6FEF862E6FEF962E41E2DD
:10A69000A416B104C104D1042CF050E2A52EB12CB3
:10A6A000C12CD12C50EEA5165FEFB5065FEFC506A5
:10A6B0005FEFD50644F440EEA42E4FEFB42E4FEFDB
:10A6C000C42E4FEFD42E8091430490914404A09166
:10A6D0004504B091460486199709A809B9098093E1
:10A6E000430490934404A0934504B093460480919E
:10A6F0003B0490913C04A0913D04B0913E048A1922
:10A700009B09AC09BD0980933B0490933C04A09342
:10A710003D04B0933E0480911703909118038F3F3E
:10A72000910509F008F4C4C56F85662309F04EC58C
:10A730008091EB03882309F049C580911F04882389
:10A7400009F044C57091C907788B772309F43EC599
:10A7500080914A0990914B09A0914C09B0914D0903
:10A76000B7FF04C081509F4FAF4FBF4FE92EFA2E65
:10A770000B2F112707FD1A95E0924A09F0924B0919
:10A7800000934C0910934D098091520990915309FF
:10A79000A0915409B0915509B7FF04C081509F4F53
:10A7A000AF4FBF4F892F9A2FAB2FBB27A7FDBA956D
:10A7B000898B9A8BAB8BBC8B8093520990935309F6
:10A7C000A0935409B09355098091A107A82EBB24EA
:10A7D000CC24DD242091530430915404409155043D
:10A7E00050915604C601B5010E949B9197FF04C089
:10A7F00061507F4F8F4F9F4F672E782E892E99245F
:10A8000087FC9A9460925304709254048092550489
:10A810009092560420914F0430915004409151047D
:10A8200050915204C601B5010E949B9197FF04C04C
:10A8300061507F4F8F4F9F4F272E382E492E552422
:10A8400047FC5A9420924F04309250044092510495
:10A850005092520480914B0490914C04A0914D046D
:10A86000B0914E04B7FF04C081509F4FAF4FBF4F10
:10A87000892F9A2FAB2FBB27A7FDBA9580934B0446
:10A8800090934C04A0934D04B0934E04D801C7019B
:10A8900086199709A809B9098093A0049093A10487
:10A8A000A093A204B093A3042091C807E22EFF2432
:10A8B00000271127BC01CD01A80197010E940F922A
:10A8C00059016A012093AE043093AF044093B00461
:10A8D0005093B10489899A89AB89BC8982199309FB
:10A8E000A409B5098093A4049093A504A093A60499
:10A8F000B093A704BC01CD01A80197010E940F925B
:10A900002093B2043093B3044093B4045093B5043D
:10A91000D601C501D7FE04C081509F4FAF4FBF4F36
:10A92000892F9A2FAB2FBB27A7FDBA959093F003E1
:10A930008093EF0357FF04C021503F4F4F4F5F4FAD
:10A94000BB2757FDBA95A52F942F832F9093F20321
:10A950008093F1038091D6039091D70381349105C0
:10A96000DCF48091D4039091D50381349105A4F453
:10A9700080918907E82FFF27EE0FFF1FE754F74F5D
:10A98000808191810190F081E02DF7FF03C0F09567
:10A99000E195FF4F7A97E4F08091020A8F3FC1F46E
:10A9A0008091EF039091F00397FD0196959587951F
:10A9B0009093F0038093EF038091F1039091F20361
:10A9C00097FD0196959587959093F2038093F103F7
:10A9D0008091410990914209A0914309B0914409A5
:10A9E000B7FF04C081509F4FAF4FBF4F892F9A2FA1
:10A9F000AB2FBB27A7FDBA958093410990934209DD
:10AA0000A0934309B093440980913209909133098E
:10AA1000A0913409B0913509B7FF04C081509F4F10
:10AA2000AF4FBF4F892F9A2FAB2FBB27A7FDBA95EA
:10AA30008093320990933309A0933409B093350978
:10AA40008091630490916404A0916504B0916604C0
:10AA50002F81388549855A85281B390B4A0B5B0B9A
:10AA6000209398043093990440939A0450939B0444
:10AA700080915B0490915C04A0915D04B0915E04B0
:10AA8000EB84FC840D851E85E81AF90A0A0B1B0B62
:10AA9000E0929C04F0929D0400939E0410939F0406
:10AAA0002093A0043093A1044093A2045093A304E4
:10AAB000E092A404F092A5040093A6041093A704C6
:10AAC00080913F0490914004A0914104B0914204D0
:10AAD000821B930BA40BB50B80933F04909340040F
:10AAE000A0934104B09342048091370490913804BC
:10AAF000A0913904B0913A048E199F09A00BB10BB3
:10AB00008093370490933804A0933904B0933A04A7
:10AB100088898823E1F020911D0430911E0421389A
:10AB200031054CF0809174049091750401969093D6
:10AB300075048093740420583F4F4CF48091740442
:10AB4000909175040197909375048093740410920A
:10AB50001E0410921D0481E090E09093BB0480934A
:10AB6000BA04E090A004F090A1040091A204109116
:10AB7000A304D801C70117FF07C088279927DC0164
:10AB80008E199F09A00BB10B81509240A040B0409C
:10AB900034F084E090E09093BB048093BA048091F9
:10ABA000C0049091C104A091C204B091C30420914B
:10ABB0004A0930914B0940914C0950914D09821B33
:10ABC000930BA40BB50B815E914BAF4FBF4F8F53CF
:10ABD0009C49A040B04028F08091030A89310CF4D0
:10ABE000FFC021E0E21620E1F20620E0020720E0AB
:10ABF00012070CF473C08091BC04882309F46AC066
:10AC0000D801C70117FF07C088279927DC018E19D3
:10AC10009F09A00BB10B9C01AD01B7FF04C02150EF
:10AC20003E4F4F4F5F4FF9E0559547953795279524
:10AC3000FA95D1F78091BA049091BB04820F931FCB
:10AC40009093BB048093BA04D801C70117FF03C0D7
:10AC50000796A11DB11DE3E0B595A795979587953A
:10AC6000EA95D1F78093AE049093AF04A093B0041B
:10AC7000B093B10489589341A040B04064F088E893
:10AC800093E1A0E0B0E08093AE049093AF04A09372
:10AC9000B004B093B1042091AE043091AF04409160
:10ACA000B0045091B10457FF04C021503F4F4F4FA3
:10ACB0005F4F232F342F452F552747FD5A958091FD
:10ACC000EF039091F003820F931F9093F003809312
:10ACD000EF0306C081E08093BC0402C01092BC0464
:10ACE00040E0E41640EFF4064FEF04074FEF14077F
:10ACF0000CF073C08091BD04882309F46AC0D801A8
:10AD0000C70117FF07C088279927DC018E199F0903
:10AD1000A00BB10B9C01AD01B7FF04C021503E4F09
:10AD20004F4F5F4F69E055954795379527956A9541
:10AD3000D1F78091BA049091BB04820F931F909336
:10AD4000BB048093BA04D801C70117FF03C007965C
:10AD5000A11DB11D23E0B595A795979587952A95D7
:10AD6000D1F78093AE049093AF04A093B004B09356
:10AD7000B10488579C4EAF4FBF4F64F488E79CEEF8
:10AD8000AFEFBFEF8093AE049093AF04A093B004F5
:10AD9000B093B1042091AE043091AF044091B0045F
:10ADA0005091B10457FF04C021503F4F4F4F5F4FA8
:10ADB000232F342F452F552747FD5A958091EF03B8
:10ADC0009091F003820F931F9093F0038093EF0311
:10ADD00011C081E08093BD040DC01092BD040AC073
:10ADE0001092BB041092BA0484E690E0909387011D
:10ADF000809386016889262F33278091BA04909129
:10AE0000BB042817390724F43093BB042093BA04F9
:10AE10001091030A112379F0212F332727FD309554
:10AE20008091BA049091BB042817390724F4309319
:10AE3000BB042093BA044091A0045091A1046091F6
:10AE4000A2047091A304413851056105710574F0A5
:10AE500080917804909179042091BA043091BB04D8
:10AE6000820F931F909379048093780440585F4F2A
:10AE70006F4F7F4F74F48091780490917904209102
:10AE8000BA043091BB04821B930B90937904809396
:10AE9000780481E090E09093BB048093BA04C09062
:10AEA000A404D090A504E090A604F090A704D701D4
:10AEB000C601F7FE07C088279927DC018C199D0978
:10AEC000AE09BF0981509240A040B04034F084E008
:10AED00090E09093BB048093BA048091C404909155
:10AEE000C504A091C604B091C704209152093091C5
:10AEF00053094091540950915509821B930BA40B9F
:10AF0000B50B815E914BAF4FBF4F8F539C49A04013
:10AF1000B04018F019310CF4FFC001E0C01600E198
:10AF2000D00600E0E00600E0F0060CF473C080916B
:10AF3000BE04882309F46AC0D701C601F7FE07C022
:10AF400088279927DC018C199D09AE09BF099C014E
:10AF5000AD01B7FF04C021503E4F4F4F5F4F09E096
:10AF600055954795379527950A95D1F78091BA045D
:10AF70009091BB04820F931F9093BB048093BA04FB
:10AF8000D701C601F7FE03C00796A11DB11D13E04E
:10AF9000B595A795979587951A95D1F78093B204A3
:10AFA0009093B304A093B404B093B504895893412B
:10AFB000A040B04064F088E893E1A0E0B0E0809366
:10AFC000B2049093B304A093B404B093B504209159
:10AFD000B2043091B3044091B4045091B50457FFCA
:10AFE00004C021503F4F4F4F5F4F232F342F452F29
:10AFF000552747FD5A958091F1039091F203820FF6
:10B00000931F9093F2038093F10306C081E0809335
:10B01000BE0402C01092BE0420E0C21620EFD20689
:10B020002FEFE2062FEFF2060CF073C08091BF0401
:10B03000882309F46AC0D701C601F7FE07C0882734
:10B040009927DC018C199D09AE09BF099C01AD014E
:10B05000B7FF04C021503E4F4F4F5F4FE9E0559579
:10B06000479537952795EA95D1F78091BA04909145
:10B07000BB04820F931F9093BB048093BA04D70143
:10B08000C601F7FE03C00796A11DB11D73E0B5957B
:10B09000A795979587957A95D1F78093B204909369
:10B0A000B304A093B404B093B50488579C4EAF4F3B
:10B0B000BF4F64F488E79CEEAFEFBFEF8093B2041C
:10B0C0009093B304A093B404B093B5042091B20458
:10B0D0003091B3044091B4045091B50457FF04C0BB
:10B0E00021503F4F4F4F5F4F232F342F452F552770
:10B0F00047FD5A958091F1039091F203820F931FBF
:10B100009093F2038093F10311C081E08093BF0418
:10B110000DC01092BF040AC01092BB041092BA0472
:10B1200084E690E090938701809386014889242FDC
:10B1300033278091BA049091BB042817390724F46F
:10B140003093BB042093BA048091030A882379F0DA
:10B15000282F332727FD30958091BA049091BB04A6
:10B160002817390724F43093BB042093BA04409184
:10B17000A4045091A5046091A6047091A7044138DD
:10B1800051056105710574F0809176049091770402
:10B190002091BA043091BB04820F931F90937704DF
:10B1A0008093760440585F4F6F4F7F4FCCF480916F
:10B1B0007604909177042091BA043091BB04821BED
:10B1C000930B90937704809376040AC01092F20355
:10B1D0001092F1031092F0031092EF0310921F04EB
:10B1E00080915809882341F41092F2031092F103E0
:10B1F0001092F0031092EF0380914A0990914B094D
:10B20000A0914C09B0914D098093C0049093C10462
:10B21000A093C204B093C304809152099091530942
:10B22000A0915409B09155098093C4049093C5042A
:10B23000A093C604B093C704109253041092540410
:10B24000109255041092560410924F04109250041C
:10B25000109251041092520410924B0410924C041C
:10B2600010924D0410924E0410924A0910924B090C
:10B2700010924C0910924D091092520910925309E4
:10B2800010925409109255091092410910924209E6
:10B290001092430910924409109232091092330916
:10B2A0001092340910923509109218031092170366
:10B2B000E0901504F0901604C701F7FE04C088273B
:10B2C00099278E199F0904973CF08091720984FD9B
:10B2D00003C082E38093F30310919E07A12EBB2449
:10B2E000CC24DD24B701882777FD8095982F97011E
:10B2F000F7FE04C0222733272E193F09442737FDC4
:10B300004095542F0E949B919B01AC01C601B50151
:10B310000E949B9197FF04C061507E4F8F4F9F4FBB
:10B3200059E095958795779567955A95D1F79B0143
:10B33000812F99278E9DD0018F9DB00D9E9DB00DC0
:10B340001124CD01B7FD0396959587959595879521
:10B35000280F391F8091F5039091F603280F391FAC
:10B36000442737FD4095542F20939404309395043F
:10B370004093960450939704809133049091340441
:10B38000A0913504B0913604821B930BA40BB50B2E
:10B390008093330490933404A0933504B09336041F
:10B3A0008155934CA040B04064F080E593ECA0E060
:10B3B000B0E08093330490933404A0933504B093A9
:10B3C00036048091330490913404A0913504B091F7
:10B3D0003604805B9C43AF4FBF4F64F480EB9CE32B
:10B3E000AFEFBFEF8093330490933404A093350400
:10B3F000B093360400918A0110918B0117FDFCC0B7
:10B400008091720983FFF8C08091890181508093F7
:10B410008901882309F0F4C08DE08093890180912F
:10B42000630490916404A0916504B0916604B7FF31
:10B4300004C081509E4FAF4FBF4F39E0B595A795DF
:10B44000979587953A95D1F77C0197FF04C0F094C2
:10B45000E194F108F39480915B0490915C04A091D5
:10B460005D04B0915E04B7FF04C081509E4FAF4FA2
:10B47000BF4F29E0B595A795979587952A95D1F760
:10B480009C0197FF03C0309521953F4FE216F306CC
:10B490000CF47901B701F7FE02C0695F7F4F2B0101
:10B4A000A3E055944794AA95E1F722E030E0420EDC
:10B4B000531E609082097090830980908409909057
:10B4C000850920913C0130913D0140913E01509110
:10B4D0003F01C401B3010E940F9259016A013093E8
:10B4E000300920932F09021B130BC801845E9D4F66
:10B4F00068E671E00E94DA919C01245B3040809103
:10B50000860190918701009731F001979093870110
:10B51000809386011BC049E1E416F104BCF48091DC
:10B520001D0490911E04820F931F90931E0480931C
:10B530001D048091F303882349F081508093F30325
:10B54000882321F4B0922204A092210480918601E4
:10B5500090918701892BF9F4809188019927289F80
:10B56000B001299F700D389F700D1124CB01B201DD
:10B570000E94DA91CB01AA2797FDA095BA2F680EF9
:10B58000791E8A1E9B1E60928209709283098092A6
:10B590008409909285098091F303882369F580914D
:10B5A00021049091220420912F0930913009821BAF
:10B5B000930B845E9D4F68E671E00E94DA919C01D6
:10B5C000245B30408091720186959927289FD00195
:10B5D000299FB00D389FB00D11249D01B7FF02C007
:10B5E000215F3F4FF4E035952795FA95E1F73093C9
:10B5F000F6032093F50304C01092F6031092F503AE
:10B6000080911F04882381F010922704109228044F
:10B610001092290410922A0410922B0410922C04E8
:10B6200010922D0410922E04F090EC03FF20F1F400
:10B6300080915809282F3327442755278091630488
:10B6400090916404A0916504B0916604BC01CD01A1
:10B650000E949B91DC01CB01BC01CD0128EF3AE2B5
:10B6600040E050E00E940F92390102C06624772426
:10B67000E090EB03EE20F1F480915809282F332756
:10B680004427552780915B0490915C04A0915D0450
:10B69000B0915E04BC01CD010E949B91DC01CB0105
:10B6A000BC01CD0128EF3AE240E050E00E940F9249
:10B6B000290102C04424552480912C0990912D0920
:10B6C000893C91051CF088EC90E005C088539F4FA1
:10B6D00034F488E39FEF90932D0980932C09809197
:10B6E000380990913909893C91051CF088EC90E06B
:10B6F00005C088539F4F34F488E39FEF9093390936
:10B700008093380980913A0990913B09AA2797FDC7
:10B71000A095BA2F20918009A22EBB24CC24DD2431
:10B72000BC01CD01A60195010E949B919B01AC013A
:10B7300080912C0990912D09AA2797FDA095BA2FE9
:10B74000E7E0880F991FAA1FBB1FEA95D1F7280FC2
:10B75000391F4A1F5B1F57FF04C0215C3F4F4F4FEB
:10B760005F4F76E055954795379527957A95D1F7B0
:10B770008301020F131F10933B0900933A09809134
:10B780002A0990912B09AA2797FDA095BA2FBC01F1
:10B79000CD01A60195010E949B919B01AC01809176
:10B7A000380990913909AA2797FDA095BA2F67E02B
:10B7B000880F991FAA1FBB1F6A95D1F7280F391F41
:10B7C0004A1F5B1F57FF04C0215C3F4F4F4F5F4F25
:10B7D000F6E05595479537952795FA95D1F74201AB
:10B7E000820E931E90922B0980922A0980917B09E8
:10B7F00090917C09880F991FAA2797FDA095BA2FD1
:10B8000020913109332744275527BC01CD010E94DF
:10B810009B915B016C0197FF08C02FE330E040E093
:10B8200050E0A20EB31EC41ED51EE6E0D594C79408
:10B83000B794A794EA95D1F780914709282F332729
:10B84000442755278091470490914804A0914904CA
:10B85000B0914A04BC01CD010E949B91DC01CB0157
:10B86000BC01CD0120EF35E540E050E00E940F9291
:10B87000B501620F731F70937C0960937B090150BF
:10B88000104134F080E090E190933B0980933A09B5
:10B8900080913A0990913B098050904F34F480E0B8
:10B8A00090EF90933B0980933A0951E0851650E15F
:10B8B000950634F080E090E190932B0980932A095B
:10B8C00080912A0990912B098050904F34F480E0A8
:10B8D00090EF90932B0980932A096150704134F0C6
:10B8E00080E090E190937C0980937B0980917B09B3
:10B8F00090917C098050904F34F480E090EF9093C9
:10B900007C0980937B0980910001482F5527809105
:10B910001F01909120014817590794F420911F01AD
:10B920003091200109811A81049FC001059F900D6B
:10B93000149F900D1124B9010E94C6917A836983E6
:10B9400029813A81220F331F220F331F3A83298323
:10B950004091720940FD02C00C94B664EE2011F0D3
:10B960000C94B664FF2011F00C94B66400E010E073
:10B9700048018091ED039091EE0390930D07809321
:10B980000C0720917A0430917B042115310509F0D0
:10B990003FC080911501909116018959934058F04C
:10B9A00087B5803F20F480911B03815011C081E056
:10B9B0008093D1044EC08091150190911601843678
:10B9C000910508F587B58031D0F080911B038F5F1A
:10B9D00080931B039FE0890290011124809131071D
:10B9E000821B87BD8CE291E090930B0380930A0346
:10B9F0008EE591E090937B0480937A042AC081E0E5
:10BA00008093D00426C0F092D004F092D10421C0DB
:10BA10008091030490910404A0910504B091060460
:10BA200064E0880F991FAA1FBB1F6A95D1F7809306
:10BA30001C0390931D03A0931E03B0931F03109348
:10BA40001A03009319032150304030937B04209354
:10BA50007A042091750141FF3CC0223348F5809162
:10BA60008C01815080938C018F3F09F052C08091EE
:10BA70009F01882339F480912004882319F088E2FB
:10BA800080939F01109220048091030490910404FC
:10BA9000A0910504B09106048093FF0390930004E5
:10BAA000A0930104B093020481E080938C0131C023
:10BAB000273478F180919F01882339F48091200404
:10BAC000882319F487E280939F0188EC80938C018E
:10BAD0001DC08091400190914101820F911D2091E4
:10BAE00097073327829FA001839F500D929F500D8F
:10BAF0001124CA01AA2797FDA095BA2F8093FF03AE
:10BB000090930004A0930104B093020481E0809319
:10BB100020048091630490916404A0916504B09125
:10BB20006604E0903C01F0903D0100913E011091CF
:10BB30003F01BC01CD01A80197010E940F9259015C
:10BB40006A0180915B0490915C04A0915D04B091C6
:10BB50005E04BC01CD01A80197010E940F92B901BA
:10BB6000C5010E9449845C01CC971CF05CE3A52EC2
:10BB7000B12CC5010E9447725C0180E280933B01B9
:10BB80001092FE031092FD0380912004882309F493
:10BB90005FC58091D10399279C012071307084FD8D
:10BBA00057C58091D00382608093D003709156096D
:10BBB000872F992741E0C42ED12CC822D92280FD9D
:10BBC00004C08091720981FD10C0C980DA80309371
:10BBD000C9042093C8043093FE032093FD03809191
:10BBE000D103806C8093D103ABC28091D10381FFDC
:10BBF0007AC200917C0110917D01C8010F962090BE
:10BC0000130430901404821593050CF058C08091F1
:10BC1000D004882309F053C08091D10387FF15C059
:10BC20008091D1038F778093D10380910304909109
:10BC30000404A0910504B09106048093FF0390933F
:10BC40000004A0930104B09302048091D1038064A6
:10BC50008093D103E0903609EE20F1F08091FF034C
:10BC600090910004A0910104B0910204BC01CD01A7
:10BC700024E630E040E050E00E940F928E2D99279C
:10BC8000AA27BB2782179307A407B5072CF4D092E5
:10BC9000FE03C092FD0310C0C101801B910B0F97E2
:10BCA00097FF03C0909581959F4F9093FE038093DB
:10BCB000FD038BE280933B011092F70316C1C8018C
:10BCC0000F9728163906C4F52091D1042223A1F537
:10BCD0008091D10386FF15C08091D1038F7B809323
:10BCE000D1038091030490910404A0910504B091C4
:10BCF00006048093FF0390930004A0930104B09383
:10BD000002048091D10380688093D103C101801B1C
:10BD1000910B0F9697FF03C0909581959F4F90953B
:10BD200081959F4F9093FE038093FD038DE2809356
:10BD30003B012093F703D9C08DE380933B016091D1
:10BD4000F803662371F12091F9033091FA034091D1
:10BD5000FB035091FC038091FF0390910004A0919C
:10BD60000104B091020482179307A407B507CCF42D
:10BD70008091D10380648093D103862F992790937B
:10BD8000FE038093FD038AE08093F7038EE58093A2
:10BD90003B018091D10387FFA8C08091D1038F77A9
:10BDA00033C0662309F443C02091F9033091FA03AC
:10BDB0004091FB035091FC038091FF03909100049C
:10BDC000A0910104B0910204281739074A075B07C4
:10BDD00074F58091D10380688093D103862F9927D1
:10BDE000909581959F4F9093FE038093FD0386EF7E
:10BDF0008093F70386E780933B018091D10386FF10
:10BE000074C08091D1038F7B8093D1038091030410
:10BE100090910404A0910504B09106048093FF035F
:10BE200090930004A0930104B09302045EC080913B
:10BE3000D103807C09F459C08091F703882379F5F8
:10BE4000E0900304F09004040091050410910604AE
:10BE5000D801C70180589040A040B0402091FF0316
:10BE6000309100044091010450910204821793071D
:10BE7000A407B5075CF4D801C70180589F4FAF4FA6
:10BE8000BF4F281739074A075B075CF08093FF0311
:10BE900090930004A0930104B093020402C0109296
:10BEA000F7038091D1038F738093D1031092C9045B
:10BEB0001092C80471FF06C084EF91E090930B03C9
:10BEC00080930A0380910704882379F48091030406
:10BED00090910404A0910504B0910604C397A105B4
:10BEE000B1051CF081E0809307046091C804709153
:10BEF000C9048091FD039091FE03680F791F709330
:10BF0000C9046093C804CB0177FF04C08827992730
:10BF1000861B970B855F91400CF4CEC04091F703D0
:10BF2000442389F18091F9039091FA032091FF0352
:10BF300030910004821B930B0996439748F480913B
:10BF4000F9039091FA03A091FB03B091FC0312C096
:10BF5000242F332727FD3095432F532F8091FF0344
:10BF600090910004A0910104B0910204820F931FEC
:10BF7000A41FB51F8093FF0390930004A0930104B6
:10BF8000B093020424C0809197072091FF03309161
:10BF9000000440910104509102041616170644F45F
:10BFA00063E00E94BA91280F311D411D511D07C049
:10BFB00063E00E94BA91281B31094109510920937D
:10BFC000FF03309300044093010450930204109245
:10BFD000C9041092C804E0900304F0900404009196
:10BFE000050410910604D801C70180509440A04078
:10BFF000B0402091FF033091000440910104509122
:10C00000020482179307A407B5075CF4D801C7019F
:10C0100080509C4FAF4FBF4F281739074A075B0727
:10C0200044F08093FF0390930004A0930104B09325
:10C0300002048091560981FF06C084E690E0909347
:10C040000B0380930A0380919B078823A9F58091B5
:10C05000F803882389F54091ED035091EE0357FFD3
:10C0600002C04D5F5F4F5595479555954795809117
:10C070001F0190912001209100013327489FF0017A
:10C08000499FF00D589FF00D1124CF01B9010E9476
:10C09000DA9170937D0160937C01663471051CF424
:10C0A00086E490E005C06739710534F086E990E0D8
:10C0B00090937D0180937C0180917A0490917B0420
:10C0C000892BD1F18091030490910404A09105047F
:10C0D000B09106048093FF0390930004A0930104A1
:10C0E000B093020429C08091030490910404A091AC
:10C0F0000504B091060480599140A040B04080935F
:10C10000FF0390930004A0930104B0930204809174
:10C110009B07882311F0992702C088E790E090934D
:10C120007D0180937C01E980FA80F092EE03E09239
:10C13000ED038EE280933B01C090ED03D090EE03BF
:10C14000E0900304F09004040091050410910604AB
:10C150002091FF03309100044091010450910204AA
:10C160002E153F054007510724F08091560980FDA8
:10C17000BBC280917A0490917B04892B39F0C090E6
:10C18000ED03D090EE0300E010E0D7C0D801C70166
:10C19000821B930BA40BB50B809398049093990486
:10C1A000A0939A04B0939B04823000E890070FEFAD
:10C1B000A0070FEFB0072CF481E090E8AFEFBFEFDE
:10C1C00009C08F5F9F47A040B04064F08FEF9FE7AA
:10C1D000A0E0B0E08093980490939904A0939A040F
:10C1E000B0939B040091980410919904809174017C
:10C1F000282F33274427552780919804909199043C
:10C20000A0919A04B0919B04BC01CD010E949B9126
:10C2100097FF04C0615E7F4F8F4F9F4F25E095953C
:10C220008795779567952A95D1F7609398047093D1
:10C23000990480939A0490939B0465302EEF7207C3
:10C240002FEF82072FEF92072CF484E09EEFAFEFE1
:10C25000BFEF09C0605074408040904064F080E0BF
:10C2600094E0A0E0B0E08093980490939904A093A8
:10C270009A04B0939B048090980490909904209124
:10C28000190330911A0337FF02C0295F3F4F83E043
:10C29000359527958A95E1F74FEF223834071CF43E
:10C2A00021E83FEF05C02038310514F020E830E0E8
:10C2B000C901AA2797FDA095BA2F209176013327AF
:10C2C00044275527BC01CD010E949B9197FF04C0D4
:10C2D0006D5F7F4F8F4F9F4FB2E095958795779514
:10C2E0006795BA95D1F79B015FEF613075071CF434
:10C2F00020E03FEF06C06F3F710519F014F020E019
:10C3000031E08091D103807C49F0C90137FD03966B
:10C310009C0135952795359527950DC08091560937
:10C3200080FF09C0C90137FD07969C01F3E03595F0
:10C330002795FA95E1F7820E931E2091730122232F
:10C3400009F454C060912304709124048091250461
:10C350009091260497FF04C061587F4F8F4F9F4FE5
:10C36000E7E09595879577956795EA95D1F7332717
:10C37000442755270E949B9197FF04C0615E7F4F21
:10C380008F4F9F4F55E095958795779567955A956F
:10C39000D1F7609398047093990480939A049093D2
:10C3A0009B046138AFEF7A07AFEF8A07AFEF9A07C8
:10C3B0002CF480E89FEFAFEFBFEF0AC06F3F71052D
:10C3C0008105910569F064F080E091E0A0E0B0E0C3
:10C3D0008093980490939904A0939A04B0939B043B
:10C3E0008091980490919904880E991E8091710112
:10C3F000282F33278091060A992787FD9095289F3B
:10C40000F001299FF00D389FF00D11249F01F7FFD7
:10C4100002C021583F4F220F232F221F330BFFEF63
:10C4200021383F071CF420E83FEF06C02F3F3105BD
:10C4300019F014F020E031E0820E931EC401AA2707
:10C4400097FDA095BA2FE090ED03F090EE039701D1
:10C45000442737FD4095542FBC01CD010E949B918C
:10C4600097FF04C061507E4F8F4F9F4F29E09595F5
:10C470008795779567952A95D1F7C61AD70A80913F
:10C48000FD039091FE03892B09F060C01E141F0468
:10C490000CF05CC0980117FF03C0309521953F4F09
:10C4A0002D33310540F480911B0490911C048C15B0
:10C4B0009D0574F526C02C53304085E036952795B0
:10C4C0008A95E1F72031310510F02FE030E04091FE
:10C4D0001B0450911C0410161106E4F480E190E056
:10C4E000821B930B489F9001499F300D589F300D40
:10C4F0001124B4E036952795BA95E1F72C153D0542
:10C5000020F580917A0190917B01C816D906F4F04C
:10C510006C011CC0205F3F4F80917A0190917B019C
:10C52000829F8001839F100D929F100D112498010E
:10C53000A4E036952795AA95E1F74C155D0514F012
:10C540006A0104C0C216D30608F06901C601AA2711
:10C5500097FDA095BA2FFDE0880F991FAA1FBB1F5A
:10C56000FA95D1F79501442737FD4095542FBC012A
:10C57000CD010E940F9220939C0430939D04409320
:10C580009E0450939F04C0909C04D0909D04809181
:10C59000CA049091CB049C01220F331F280F391F2E
:10C5A0002C0D3D1D37FF02C02D5F3F4FA901559552
:10C5B0004795559547955093CB044093CA04809175
:10C5C0009307282F3327220F331F220F331F2417DF
:10C5D00035076CF480917A09282F3327220F331FF7
:10C5E000220F331F205530404217530724F0309359
:10C5F000CB042093CA048091560980FF14C0809117
:10C60000CA049091CB0429813A818217930724F0C0
:10C610003093CB042093CA044091CA045091CB04B8
:10C620005A83498361C029813A812E193F0937FF16
:10C6300002C02D5F3F4F3595279535952795609121
:10C64000CA047091CB04620F731F7A8369834CC054
:10C6500080919B07882301F56091ED037091EE03B3
:10C6600077FF02C06D5F7F4F7595679575956795EC
:10C6700040911F015091200180910001282F332704
:10C68000649FC001659F900D749F900D1124B901A6
:10C690000E94DA91CB0101C0992790937D0180938C
:10C6A0007C0180917C0190917D01873491051CF47F
:10C6B00086E490E005C08639910534F086E990E083
:10C6C00090937D0180937C0189819A819093CB0422
:10C6D0008093CA048091D103806C8093D1038091B0
:10C6E000D0038D7F8093D0038091D10399279C0143
:10C6F0002270307081FF2BC18091CC049091CD04C9
:10C70000A091CE04B091CF040097A105B10521F00E
:10C71000809107048130B1F4E981FA81CF01AA2721
:10C7200097FDA095BA2F1EE0880F991FAA1FBB1F67
:10C730001A95D1F78093CC049093CD04A093CE04A6
:10C74000B093CF0480910704813019F482E0809384
:10C750000704E980FA80C701AA2797FDA095BA2FA0
:10C760009501442737FD4095542FBC01CD010E940F
:10C770009B91DC01CB0180939C0490939D04A0933A
:10C780009E04B0939F04B7FF04C08150904EAF4FFA
:10C79000BF4F7C018D01ADE015950795F794E794A7
:10C7A000AA95D1F7E0929C04F0929D0400939E0418
:10C7B00010939F046091D2037091D3032FE0603AED
:10C7C000720750F58091CC049091CD04A091CE04D5
:10C7D000B091CF049C01AD01FAE05695479537958D
:10C7E0002795FA95D1F7821B930BA40BB50BA801E3
:10C7F0009701E4E0220F331F441F551FEA95D1F73C
:10C80000820F931FA41FB51F8093CC049093CD0477
:10C81000A093CE04B093CF0460547F4118F580916B
:10C82000CC049091CD04A091CE04B091CF049C0192
:10C83000AD016CE056954795379527956A95D1F7E8
:10C84000821B930BA40BB50BA8019701F2E0220FFA
:10C85000331F441F551FFA95D1F7820F931FA41F52
:10C86000B51F38C08091190390911A038091190364
:10C8700090911A0397FF03C0909581959F4F84363E
:10C88000910584F580910304909104042091FF03A5
:10C8900030910004821B930B81509F4F8F5F91401A
:10C8A00008F58091CC049091CD04A091CE04B09174
:10C8B000CF049C01AD01EEE056954795379527953D
:10C8C000EA95D1F7821B930BA40BB50B8E0D9F1D20
:10C8D000A01FB11F8093CC049093CD04A093CE04ED
:10C8E000B093CF048091CC049091CD04A091CE045C
:10C8F000B091CF047EE0B695A795979587957A95E8
:10C90000D1F79093EE038093ED0340919907442370
:10C9100099F055279C01BA010E94DA91C901861B42
:10C92000970B90931C0480931B04260F371F3093A2
:10C930007B0120937A011FC010921C0410921B04EB
:10C940008FEF93E090937B0180937A0114C0109253
:10C9500007041092CC041092CD041092CE041092D1
:10C96000CF043093EE032093ED0305C08091D103F3
:10C97000806C8093D1038091E00481FF37C089816E
:10C980009A8197FD03969595879595958795209122
:10C99000CE033091CF032817390760F48091ED035F
:10C9A0009091EE03892B31F0220F331F220F331F9A
:10C9B0003A8329838091030490910404A091050493
:10C9C000B09106048093FF0390930004A0930104A8
:10C9D000B093020488E99AE390930B0380930A03CF
:10C9E00080E09EE090930A018093090120913F0925
:10C9F000822F9927880F991F880F991F8896698120
:10CA00007A818617970714F09A83898370917A093F
:10CA10007D8B872F9927880F991F880F991F805525
:10CA20009040A981BA818A179B0714F49A8389835D
:10CA300080915003882341F48091180A8F3F21F49C
:10CA40008091E4048823E9F08091D2039091D3038C
:10CA50000297C097B0F4E981FA811E161F068CF484
:10CA600081E090E09093D3038093D203E22EFF24E1
:10CA7000EE0CFF1CEE0CFF1C8701085D1F4F1A8394
:10CA8000098329813A813093F1062093F006809141
:10CA9000940490919504A0919604B091970412E0AB
:10CAA000880F991FAA1FBB1F1A95D1F700917B0908
:10CAB00010917C09081B190B213A31058CF0C90132
:10CAC00037FD019695958795801791070CF48C0199
:10CAD000909581959F4F081719076CF48C010BC036
:10CAE0000135110514F000E510E03FEF003B13079E
:10CAF00014F400EB1FEF4D89242F3327220F331F2F
:10CB0000220F331FC90169817A81861B970B801719
:10CB100091070CF48C0189819A81821B930B081771
:10CB200019070CF48C0180913A0990913B096091AE
:10CB3000190470911A04861B970B909349098093EE
:10CB40004809D090580920912B0430912C04409131
:10CB50002D0450912E04DD2041F0661A770AC3019E
:10CB6000AA2797FDA095BA2F04C0AA2797FDA095E4
:10CB7000BA2F280F391F4A1F5B1F20932B043093B5
:10CB80002C0440932D0450932E0480912B049091FB
:10CB90002C04A0912D04B0912E0481509A4FA040F6
:10CBA000B04064F080E09AEFA0E0B0E080932B0406
:10CBB00090932C04A0932D04B0932E0480912B0409
:10CBC00090912C04A0912D04B0912E048050964099
:10CBD000AF4FBF4F64F480E096E0AFEFBFEF8093BC
:10CBE0002B0490932C04A0932D04B0932E04C0909A
:10CBF000A807209148093091490978E0E72EEC1404
:10CC000098F08C2D9927829FA001839F500D929FB1
:10CC1000500D1124CA0157FD07967C0163E0F5947D
:10CC2000E7946A95E1F712C08C2D86959927829F2B
:10CC3000B001839F700D929F700D1124CB0177FD81
:10CC400003967C01F594E794F594E794A09077011E
:10CC5000B09078019501442737FD4095542F80917D
:10CC60002B0490912C04A0912D04B0912E04BC01B2
:10CC7000CD010E940F92E20EF31E90906101692D8A
:10CC8000772788279927980117FF04C02227332781
:10CC9000201B310B37FF02C02F5F3F4F3595279583
:10CCA000A981BA812A0F3B1F442737FD4095542F95
:10CCB0000E949B9197FF04C0615C7F4F8F4F9F4FF5
:10CCC00026E095958795779567952A95D1F79B01ED
:10CCD0006E157F050CF47B01309521953F4FE216D0
:10CCE000F3060CF4790180912A0990912B09609147
:10CCF000170470911804861B970B90932909809351
:10CD0000280920912704309128044091290450914A
:10CD10002A04DD2041F0461A570AC201AA2797FDCE
:10CD2000A095BA2F04C0AA2797FDA095BA2F280F67
:10CD3000391F4A1F5B1F2093270430932804409318
:10CD4000290450932A048091270490912804A091EB
:10CD50002904B0912A0481509A4FA040B04064F059
:10CD600080E09AEFA0E0B0E080932704909328043D
:10CD7000A0932904B0932A04809127049091280459
:10CD8000A0912904B0912A0480509640AF4FBF4F24
:10CD900064F480E096E0AFEFBFEF809327049093B8
:10CDA0002804A0932904B0932A04209128093091E3
:10CDB000290948E04C1598F08C2D9927829FB001E5
:10CDC000839F700D929F700D1124CB0177FD079604
:10CDD0006C01B3E0D594C794BA95E1F712C0C6943C
:10CDE0008C2D9927829FD001839FB00D929FB00D0B
:10CDF0001124CD01B7FD03966C01D594C794D59449
:10CE0000C7949501442737FD4095542F80912704FE
:10CE100090912804A0912904B0912A04BC01CD016D
:10CE20000E940F92C20ED31E692D7727882799275B
:10CE3000980117FF04C022273327201B310B37FF2F
:10CE400002C02F5F3F4F35952795E981FA812E0F5C
:10CE50003F1F442737FD4095542F0E949B9197FF19
:10CE600004C0615C7F4F8F4F9F4FE6E0959587959B
:10CE700077956795EA95D1F79B016C157D050CF4C4
:10CE80006B01309521953F4FC216D3060CF4690112
:10CE900080913F09282E33245090EA0768E5862EBA
:10CEA00068E0962E5FE0A52E58E0B52E4BE0442EAC
:10CEB00039E5632E39E0732ED5012C9112160CF052
:10CEC00029C1203429F4E981FA81FF8BEE8B1FC040
:10CED00049815A81CA01AA2797FDA095BA2F332705
:10CEE00027FD3095432F532FBC01CD010E949B910C
:10CEF00097FF04C0615C7F4F8F4F9F4F26E0959551
:10CF00008795779567952A95D1F77F8B6E8BF5017D
:10CF10002181203439F42E893F892E0D3F1D3F8B0E
:10CF20002E8B2AC0203C39F44E895F894E195F0947
:10CF30005F8B4E8B21C0C701AA2797FDA095BA2F02
:10CF4000332727FD3095432F532FBC01CD010E947D
:10CF50009B9197FF04C0615C7F4F8F4F9F4FB6E05E
:10CF60009595879577956795BA95D1F7AE89BF89DD
:10CF7000A60FB71FBF8BAE8BF5012281203439F489
:10CF80002E893F892C0D3D1D3F8B2E8B2AC0203CC6
:10CF900039F44E895F894C195D095F8B4E8B21C036
:10CFA000C601AA2797FDA095BA2F332727FD3095F4
:10CFB000432F532FBC01CD010E949B9197FF04C0CA
:10CFC000615C7F4F8F4F9F4FA6E095958795779532
:10CFD0006795AA95D1F7AE89BF89A60FB71FBF8BFA
:10CFE000AE8BF5012381203439F42E893F89200F3F
:10CFF000311F3F8B2E8B2AC0203C39F44E895F892C
:10D00000401B510B5F8B4E8B21C0C801AA2797FD97
:10D01000A095BA2F332727FD3095432F532FBC01FE
:10D02000CD010E949B9197FF04C0615C7F4F8F4FA1
:10D030009F4FF6E09595879577956795FA95D1F787
:10D04000AE89BF89A60FB71FBF8BAE8BF30180815E
:10D0500091812E893F898217930764F4B901680F83
:10D06000791F77FF02C06F5F7F4F759567957F8B44
:10D070006E8B1DC0552049F44E895F89440F551FA2
:10D08000481B590B5F8B4E8B12C051E0551578F43D
:10D09000252D33276E897F89861B970BB9010E9446
:10D0A000DA91AE89BF89A60FB71FBF8BAE8BC101C6
:10D0B000880F991F880F991FEE89FF898E179F0788
:10D0C00064F4FD898F2F9927880F991F880F991F66
:10D0D0002E893F892817390714F09F8B8E8B8E89F4
:10D0E0009F8997FD03969595879595958795F4016A
:10D0F0008183880F991F880F991F2E893F89281BCC
:10D10000390BC901880F8283EE89FF89D301ED9322
:10D11000FC9303C0F401118212824A9422E030E0B1
:10D12000620E731E44E050E0A40EB51E68E070E08D
:10D13000860E971E47FEC0CEE2E1C95E0C94469271
:10D1400084B1806A84B93D9A82E58CBD1DBC459A44
:10D1500081E080938C098AEA80939D0983E880931B
:10D160009E098AE080939F091092A1091092A0095C
:10D170001092A3091092A2091092050A1092C109F7
:10D18000089530918C09332309F085C00DB407FE52
:10D1900082C084E080930903459A2EB58091E7040C
:10D1A00099278130910589F0823091051CF4892BF3
:10D1B00021F03EC00297B9F03BC03093C0092093E4
:10D1C000E8042138A9F581E008C0253549F48091AB
:10D1D000E804820F8093E80482E08093E70428C08B
:10D1E0003093E70425C08091C009E82FFF27EE5156
:10D1F000F64F20838F5F8093C0099091E8048032BE
:10D20000A0F0291769F480E2A2EEB9E0E2ECF9E0BF
:10D210000D9001928A95E1F781E08093C10902C0E7
:10D220003093C1091092E70403C0920F9093E80471
:10D2300020919C09223208F028C045980000000087
:10D2400000000000000000000000000000000000DE
:10D2500000000000000000000000000000000000CE
:10D26000000000000000000000000000E0919509AF
:10D27000F0919609E20FF11D80818EBD8091BE096B
:10D280009081890F8093BE0903C081E080938C094F
:10D290002F5F20939C090895EF92FF920F931F93A5
:10D2A0008091A1079927880F991F880F991F7C01EA
:10D2B0000027F7FC0095102F80916304909164047F
:10D2C000A0916504B0916604BC01CD01A80197014D
:10D2D0000E940F923093A1092093A00980915B04D2
:10D2E00090915C04A0915D04B0915E04BC01CD01FD
:10D2F000A80197010E940F923093A3092093A209DD
:10D3000020918209309183094091840950918509C7
:10D31000DA01C90163E0880F991FAA1FBB1F6A9534
:10D32000D1F7820F931FA41FB51F820F931FA41F55
:10D33000B51F20913C0130913D0140913E0150913B
:10D340003F01BC01CD010E940F923093A9092093A7
:10D35000A80980917404909175042091260330915E
:10D360002703821B930B9093AF098093AE09E09142
:10D370006A04F0916B0480914F0990915009BF01AC
:10D380000E94DA919B01220F331F220F331F260FB9
:10D39000371F260F371F37FF02C02D5F3F4F3595D0
:10D3A0002795359527953093A5092093A409809159
:10D3B0007E0990917F09BF010E94DA919B01220FA3
:10D3C000331F220F331F260F371F260F371F37FF3C
:10D3D00002C02D5F3F4F35952795359527953093A2
:10D3E000A7092093A60910926B0410926A04109268
:10D3F000500910924F0910927F0910927E09809176
:10D400009F099927AA27BB27FC013A97E830F10525
:10D4100008F0FEC1E058FF4F0C9461928091E60342
:10D420008093B2098091E5038093B3098091E4036E
:10D430008093B4098091E3038093B5098091E2035E
:10D440008093B6098091E1038093B7098091E0034E
:10D450008093B8098091DF038093B9098091D1034B
:10D460008093BA098091D103837F8093D1030E9476
:10D4700063308093BB098091EB078093BC09809156
:10D48000D003C4C18091120A9091130A9093B309FA
:10D490008093B2098091160A9091170A9093B5096A
:10D4A0008093B40980911F01909120018093B60967
:10D4B000809100018093B70980913B018093B80966
:10D4C0009091E9049093B909E92FFF27A3E0EE0FAB
:10D4D000FF1FAA95E1F7E85AF74F86818093BA09B2
:10D4E00083818093BB0987818093BC098581809368
:10D4F000BD09892F8F5F6CE00E94BA919093E90477
:10D5000087C18091D6078093B2098091D707809315
:10D51000B3098091D8078093B4098091D90780938B
:10D52000B5098091DA078093B6098091DE07809370
:10D53000B7098091DF078093B8098091E007809355
:10D54000B9098091E3078093BA098091E10780933C
:10D55000BB098091E2078093BC098091E40756C122
:10D560008091D5078093B2098091AC07863081F015
:10D570008091D602823451F00E948973E82FFF27F0
:10D58000EB55FF4E84918093D60202C00E948973AE
:10D5900080910C058093B3093BC1F8948091880772
:10D5A000E82FFF27EE0FFF1FE754F74F0190F081A0
:10D5B000E02DE038F1051CF0EFE7F0E006C02FEFBA
:10D5C000E138F20714F4E1E8FFEFE093B20980914B
:10D5D0008907E82FFF27EE0FFF1FE754F74F019051
:10D5E000F081E02DE038F1051CF0EFE7F0E006C037
:10D5F0007FEFE138F70714F4E1E8FFEFE093B309B8
:10D6000080918707E82FFF27EE0FFF1FE754F74FA2
:10D610000190F081E02DE038F1051CF0EFE7F0E03B
:10D6200006C08FEFE138F80714F4E1E8FFEFE0936C
:10D63000B40980918607E82FFF27EE0FFF1FE754FC
:10D64000F74F0190F081E02DE038F1051CF0EFE795
:10D65000F0E006C02FEFE138F20714F4E1E8FFEF45
:10D660007894E093B50980910A048093B60980917B
:10D670000B048093B70980910C048093B8098091C2
:10D680000D048093B90980910E048093BA098091AA
:10D690000F048093BB09809110048093BC09809192
:10D6A0001104B4C080917105863018F01092710594
:10D6B00085E08093B2098091E5078093B30980915A
:10D6C000030490910404A0910504B0910604BC01E8
:10D6D000CD0125E030E040E050E00E940F92309311
:10D6E000B5092093B4098091FF0390910004A091A3
:10D6F0000104B0910204BC01CD0125E030E040E01E
:10D7000050E00E940F923093B7092093B6098091A0
:10D71000DB078093B8098091DC078093B909809179
:10D72000DD078093BA09809109048093BB09809139
:10D73000B9089091BA088093BC098091F006909145
:10D74000F10697FD039695958795959587955EC00B
:10D750001092B2098AE58093B30984E08093B409FA
:10D7600084E38093B509809101018093B60980918B
:10D7700056058093B709909157059093B8098F7714
:10D78000809356059071909357058091580580932A
:10D79000B909809172098093BA09809156098093E2
:10D7A000BB098091E7078093BC098091F4072EC0E4
:10D7B0008091BA078093B2098091F2078093B309F0
:10D7C000809169018093B4098091B3078093B50972
:10D7D0008091B4078093B6098091B5078093B7090B
:10D7E000809168018093B8098091B7078093B90947
:10D7F0008091B8078093BA098091B9078093BB09DB
:10D800008091180A8093BC0980911A078093BD0902
:10D810008091C109882309F47DC16091C20980917A
:10D820009B01681719F08AEF8093990160939B011F
:10D8300081E0809389014091C3095091C409CA01D4
:10D8400081509E4F8F5F9340B0F42091C509309175
:10D85000C609C90181509E4F8F5F934060F480914B
:10D86000920785FF08C05093D6044093D5043093A7
:10D87000D4042093D3048091C9099091CA0921E06E
:10D880008936920724F490938B0180938A0120912A
:10D89000D3093091D40980910A0390910B03821728
:10D8A000930740F48091DE02882321F430930B0328
:10D8B00020930A03862F99278936910509F4A5C07C
:10D8C0008A36910544F48736910571F088369105C2
:10D8D00009F462C027C18A36910509F414C18B3658
:10D8E000910509F4E2C01EC18091D5098093020A16
:10D8F0008091D6098093040A8091D7098093030A06
:10D900008091D809809388018091D9098093060A73
:10D910008091DA0980939A018091DB098093E60473
:10D920008091DC098093D2048091DE038823F9F092
:10D930002091DD093091DE0937FD19C030932204B2
:10D94000209321049091BC07992389F08FE0989F40
:10D95000C0011124281B390BC90188599E4F68E664
:10D9600071E00E94DA919093220480932104209127
:10D97000DD043091DE048091DF099091E009280FE9
:10D98000391F37FF02C02F5F3F4F359527953093E2
:10D99000DE042093DD04C6C08091D50980939709E9
:10D9A0008091D609809398098091D709809399092D
:10D9B0008091D80980939A098091D90980939B0915
:10D9C0008091E0069091DA09892B8093E00690918E
:10D9D000E10693708091DB098C70982B9093E1069F
:10D9E0008091DC098093E4048091DD0980938D01AE
:10D9F0008091DE098093050A8091DF098093E0041D
:10DA00008091E0098093DF048DC08091D5098093D7
:10DA10008D098091D60980938E098091D7098093D2
:10DA20008F098091D809809390098091D9099091AC
:10DA3000DA0990939209809391098091DB09909182
:10DA4000DC0990939409809393098091DD099927CB
:10DA500087FD90959093EC088093EB088091DE0908
:10DA60008093F8038091DF099091E0099C0144279D
:10DA700037FD4095542FDA01C90163E0880F991FE3
:10DA8000AA1FBB1F6A95D1F7820F931FA41FB51F52
:10DA9000820F931FA41FB51F8093F9039093FA037D
:10DAA000A093FB03B093FC033DC08091D509809304
:10DAB000E3048091D6098093E2048091D709809392
:10DAC000E1049091D809992349F080919F0188231E
:10DAD00019F08151833010F490939F018091D909FE
:10DAE000809311058091DA09809310058091DB09FC
:10DAF0009091DC0990930E0580930D058091DD09CE
:10DB000080930F050FC08091AC07863059F40E94B6
:10DB1000E27308C01092D6041092D5041092D40477
:10DB20001092D3041F910F91FF90EF900895809170
:10DB30008C09882309F43BC045988DE999E09093BE
:10DB40009609809395099091E504E92FFF27E25704
:10DB5000FE4F9F5F9093E504808180939F099B30E7
:10DB600010F01092E50410928C090E944C6981E03B
:10DB700080939C09000000000000000000000000ED
:10DB80000000000000000000000000000000000095
:10DB90000000000000000000000000000000000085
:10DBA0000000000080919D098093BE098EBD0895FC
:10DBB00087B18C6087B9429843981092EB0480E853
:10DBC00080939D011092EA0480939C0108958091B6
:10DBD000F00481508093F0048F3F09F055C189E033
:10DBE0008093F0048091EB089091EC0881589F4F4E
:10DBF00039F08091EB089091EC0881588093F504FE
:10DC00008091D103992780739070892B21F48091A2
:10DC1000570580FF1DC08091D307882351F0809164
:10DC2000F304882319F484E08093EB0481E080936B
:10DC3000F3048091D4078823B9F08091F4048823F9
:10DC400019F484E08093EA0481E08093F4040CC02A
:10DC50001092F3041092F4048091CF078093F104A2
:10DC60008091D1078093F2048091F304882309F016
:10DC700073C08091F107282F332724FF07C08091BC
:10DC80000804882319F425FD80C081C09091D00735
:10DC9000983F48F0809151098D3D28F08091F10422
:10DCA00088236CF00AC0983F68F080915109853054
:10DCB00049F48091F10487FF02C0429801C0429A62
:10DCC00081E032C08091EB0481508093EB048F3F60
:10DCD00009F05EC08091F40785FF29C09091F5049A
:10DCE000892F86958093EB04992351F48091F10458
:10DCF00087FF02C0429801C0429A10929D0148C01D
:10DD000080919D019091F104882341F48093F50462
:10DD100080E880939D019923D4F137C0982311F0B6
:10DD2000429A01C04298869580939D0131C08091AE
:10DD3000510986958093EB0480919D01813021F4F7
:10DD40001092F50480E801C0869580939D01809132
:10DD50009D019091F10417C08091EB048150809354
:10DD6000EB048F3FA9F489E08093EB0480919D013F
:10DD7000813011F480E801C0869580939D018091E7
:10DD80009D019091D307892311F0429A01C04298D6
:10DD90008091F404882309F043C09091F10797FF24
:10DDA00007C080910804882319F496FD52C053C01F
:10DDB0009091D207983F48F0809179098D3D28F0E5
:10DDC0008091F20488236CF00AC0983F78F080912B
:10DDD0007909853059F48091F20487FF02C0439895
:10DDE00001C0439A81E080939C0136C08091EA048F
:10DDF00081508093EA048F3F79F580917909869567
:10DE00008093EA0480919C01813011F480E801C084
:10DE1000869580939C0180919C019091F20417C09B
:10DE20008091EA0481508093EA048F3FA9F489E04D
:10DE30008093EA0480919C01813011F480E801C054
:10DE4000869580939C0180919C019091D4078923B1
:10DE500011F0439A01C04398429B04C08091D003C3
:10DE6000886003C08091D003877F8093D003439B59
:10DE700006C08091D00380618093D0030895809183
:10DE8000D0038F7E8093D00308950F931F93CF9379
:10DE9000DF93482FEB0180910904E42FFF27843B97
:10DEA000D8F08F010E0F1F1FF801E754F74F808144
:10DEB00091819B01281B390BC90163E070E00E942E
:10DEC000DA91CB01880F991F860F971F0351174FC7
:10DED000F8019183808306C0EE0FFF1FE351F74FD7
:10DEE00011821082E42FFF27EE0FFF1FE754F74F38
:10DEF000D183C083DF91CF911F910F9108954FB7C8
:10DF000024E130E0F8948091C9008F778093C900B4
:10DF10008091C9008F7B8093C9008091C9008F7D5B
:10DF20008093C9005A9A52985B9A539A832F9927E3
:10DF30008093CD002093CC008091C80082608093B4
:10DF4000C80080E18093C9008091CA008F778093D8
:10DF5000CA008091CA008F7B8093CA008091CA005A
:10DF60008F7D8093CA008091CA008F7E8093CA0003
:10DF70008091CA00877F8093CA008091C9008B7FFF
:10DF80008093C9008091CA0084608093CA00809108
:10DF9000CA0082608093CA008091C80087FF03C0D6
:10DFA0008091CE00F9CF8091C90080688093C9002C
:10DFB0004FBF0895EF92FF920F931F93CF93DF937C
:10DFC000482F00E010E080919E01813061F41092B2
:10DFD0009E0184E48093F8041092FA041092F904EC
:10DFE0001092FB0403C28091F804882319F421E005
:10DFF00030E001C098019091F904992371F4232B2A
:10E0000011F081E010C084E48093F8049093FA0446
:10E010009093F9049093FB04D2C1913069F4232BBF
:10E0200009F0C3C182E08093F9048091FA048F5F04
:10E030008093FA0483E0C1C19230D1F4232B09F01C
:10E04000B4C183E08093F8044093FB049091FA04F8
:10E05000923039F41092FC0447FF03C081E08093B2
:10E06000FC0483E08093F9049F5F9093FA04A7C1B6
:10E07000933009F09AC1232B09F097C19093F804CB
:10E0800082E08093F9048091FA048F5F8093FA0410
:10E090002091FB04822F9927782F6627842F9927B8
:10E0A000682B792B8091AC07813051F47370CB01D0
:10E0B0008050924063E070E00E94DA91EB0119C059
:10E0C000823069F47770CB018050944066E070E054
:10E0D0000E94DA91EB012695269526950CC0EB015E
:10E0E000D370C856D140CE01D7FD0196EC01D5952D
:10E0F000C79526952695022F11270F7010700F5F78
:10E100001F4F0D30110508F049C10230110519F4F7
:10E1100004E010E005C00430110511F402E010E045
:10E12000D801A00FB11FFD01E754F74F8081918105
:10E130009E01281B390BC90137FF03C090958195BB
:10E140009F4F069704F5E091EE07EE2351F0FF276D
:10E15000EE0FFF1FE754F74F8081918184369105C0
:10E1600094F480910904883C30F480910904865F1E
:10E170008093090408C088EC8093090480916F00A3
:10E180008F7D80936F00A754B74F8D919C91BC01F8
:10E19000660F771F680F791F6C0F7D1F77FF02C016
:10E1A0006D5F7F4F7B01F594E794F594E794CE0182
:10E1B00001968E159F0524F40894E108F10808C023
:10E1C000CE010197E816F9061CF40894E11CF11C35
:10E1D0000630110509F0CEC0C536D1050CF4A5C036
:10E1E0009091F704E92FFF27E95FF54FE081ED37C4
:10E1F00029F48091F60480958093F604963061F4BA
:10E200008091F604882311F0E338B9F0882309F0EF
:10E2100088C0ED3791F085C0993009F082C08091B7
:10E22000F604882329F48091100A833831F079C0EC
:10E230008091100A8D3709F074C08091080A8D37DB
:10E2400039F48091090A833899F463E87FEF0DC0AF
:10E25000833871F48091090A833819F460E070E022
:10E2600004C08D3729F46DE770E085E00E94456FAA
:10E2700080910A0A992787FD9095BC0186E00E944B
:10E28000456F80910B0A992787FD9095BC018BE023
:10E290000E94456F80910C0A992787FD9095BC01DB
:10E2A0008CE00E94456F8091F7048930D1F5809110
:10E2B0000E0A8D3749F48091C9089091CA080596D5
:10E2C000BC0188E00E94456F80910F0A8D3749F4A8
:10E2D0008091C9089091CA080597BC0188E00E9406
:10E2E000456F8091C9089091CA0883589F4F1CF4CC
:10E2F00083E89FEF09C08091C9089091CA088E37C2
:10E30000910534F08DE790E09093CA088093C90896
:10E3100080910D0A992787FD9095BC018AE00E94A3
:10E32000456F1092F7041092F604CA30D1055CF4E0
:10E330008091F7048F5F8093F704E82FFF27E95F50
:10E34000F54F83E880838091F7048A3011F41092AE
:10E35000F7048FEFCC39D8076CF48091F704E82FDD
:10E36000FF27E95FF54F8DE780838091F604809564
:10E370008093F6040530110518F4B701802F0BC007
:10E380000530110519F4BE0187E005C007301105FD
:10E39000B1F4BE0189E00E94456F11C00231110540
:10E3A00070F081E080939E010AC081E080939E011D
:10E3B0001092FA041092FC0484E48093F804809193
:10E3C000FA04803198F08091FC04882331F4809124
:10E3D0009E01882311F480933A011092FA0410925E
:10E3E000FC041092F90484E48093F804E6E0CDB7CD
:10E3F000DEB70C945292CF93FC0197FF05C0CFEF8C
:10E40000F095E195FF4F01C0C1E028E631E0CF0172
:10E41000B9010E94DA91FC018B35910554F08B55BE
:10E4200090408A35910538F484EB90E08E1B9F0B69
:10E43000FC0141E00DC0CF01855B90408A3591051C
:10E4400018F4E45BF04003C02E1B3F0BF9014FEFC3
:10E45000EE0FFF1FE85BF64F259134918C2F992723
:10E4600087FD9095289FB001299F700D389F700DF2
:10E470001124842F992787FD9095689FA001699F9B
:10E48000500D789F500D1124CA01CF9108952AE5AF
:10E4900030E0281B390BC9010E94FB7108950895D3
:10E4A000089508950895089580E090E008951092E9
:10E4B000130A1092120A1092170A1092160A10925A
:10E4C000150A1092140A1092180A8AE090E00E942D
:10E4D0006F199093FE048093FD040895CF93DF930A
:10E4E0008091FD049091FE040E947819882309F41C
:10E4F000AFC08091FD049091FE040A969093FE04B3
:10E500008093FD04E0E0F0E09F0190E05FEFA8E57C
:10E51000B8E04BE0ED018B8187FF0BC09F5F8D81E1
:10E52000E80FF11D8981280F311D8E81851708F4B0
:10E53000582F4150189647FFEDCF5093180A232BC0
:10E5400041F5209103053091040540910505509156
:10E550000605BB27A52F942F832F90930205809348
:10E560000105AA27BB27281B390B4A0B5B0BCF01E0
:10E57000AA27BB27280F391F4A1F5B1F20930305BB
:10E58000309304054093050550930605E5E0F0E05F
:10E5900013C020910105309102052E173F0718F492
:10E5A000E21BF30B02C0E0E0F0E0892F9927880F0F
:10E5B000991FE80FF91F3596F093130AE093120A9A
:10E5C000EF3FF10578F480911F01909120018E9F1B
:10E5D00090018F9F300D9E9F300D1124C90164E67C
:10E5E00070E013C0CF0196958795969587952091F9
:10E5F0001F0130912001289FA001299F500D389FB5
:10E60000500D1124CA0169E170E00E94C691709317
:10E61000150A6093140A2091FF04309100052E0F13
:10E620003F1F309300052093FF045EE02131350742
:10E6300078F08091160A9091170A01969093170A24
:10E640008093160A20513E40309300052093FF042A
:10E65000DF91CF91089530911205E32FFF2783E0DA
:10E66000EE0FFF1F8A95E1F7E85AF74F2781422FF7
:10E67000552747FD509580911305992784179507D5
:10E680002CF420931305309315050AC0222341F082
:10E690008091140599274817590714F420931405FD
:10E6A000832F8F5F809312058D30D0F0109212056A
:10E6B000809114058F3F19F08093080502C01092D5
:10E6C00008058091130580930905809115058093B5
:10E6D00007058FEF8093140510921305109215050E
:10E6E000089595E1899F802D11240E94DC8B8AE892
:10E6F0009CE09F938F938EEA9BE89F938F93E0918A
:10E700003D05F0913E0509950F900F900F900F90E9
:10E710000895CF93C0E020919F0120930C05809134
:10E72000D10385FF02C0C0E123C09091E404992386
:10E73000B1F080910804882349F4E92FFF27EE0FF8
:10E74000FF1FE150F64F8491882349F4E92FFF27FA
:10E75000EE0FFF1FE250F64FC491CC2349F4809195
:10E76000F40786FD03C010929F0104C0C22F02C0AF
:10E77000C0930C05809116058C1771F480911705D4
:10E78000909118050E947819882319F480E090E090
:10E7900017C088E893E102C080ED97E00E946F19EE
:10E7A0009093180580931705CC2331F080919F0139
:10E7B000C81711F410929F01C09316058C2F99274A
:10E7C000CF91089540E050E030E08091E009992732
:10E7D0008A38910589F08B38910524F489389105A0
:10E7E00041F013C08D38910569F08E38910539F0EC
:10E7F0000CC041E75AE008C049E45BE005C049E1CC
:10E800005AE002C045E45AE03CE29091D50920E08C
:10E810008091D609281770F4931760F4DA01A90FD4
:10E82000B11DE22FFF27EE53F64F85898C939F5F32
:10E830002F5FEECF089520E335E780913B018B32C7
:10E8400011F08D32F9F480919707282F33278091AA
:10E85000FD039091FE03829FA001839F500D929F24
:10E86000500D1124CA0163E070E00E94DA91CB01DF
:10E870009B01205D3A48C196C19708F03FC02EEF3A
:10E8800034E73CC0803229F58091D10381FF36C046
:10E8900020910A0530910B05205D3A4855E7213358
:10E8A000350748F085E72439380718F420E335E7C1
:10E8B00002C02456304045E720333407F8F454E7CB
:10E8C0002D3C350718F020E335E718C02C593F4F91
:10E8D00015C08E3549F49091F8038AE0989F900115
:10E8E0001124205D3A480AC0863741F49091F8031C
:10E8F0008AE0989FC0011124281B390BC901089593
:10E90000EF92FF920F931F9399278A38910509F48C
:10E9100044C18B38910524F48938910551F0DEC249
:10E920008D38910509F424C28E38910509F486C109
:10E93000D5C28091030490910404A0910504B09184
:10E940000604BC01CD0124E630E040E050E00E9426
:10E950000F92DA01C9018C509E4F9093770A8093F1
:10E96000760A0E941B7490937D0A80937C0A909390
:10E970007F0A80937E0A9093810A8093800A209177
:10E98000760A3091770A80917A0A90917B0A28174B
:10E99000390724F430937B0A20937A0A8091780A0D
:10E9A0009091790A8217930724F43093790A20937F
:10E9B000780A1092730A81E79AE090932905809370
:10E9C000280580913B018093970A8091D00380FFB6
:10E9D00002C083E401C080E28093980A2091E4049D
:10E9E000222309F1822F6AE00E94BA91805D809310
:10E9F000820A822F0E94BA91892F805D8093830AB8
:10EA00008AE38093840A81E1289FF0011124A5E81C
:10EA1000BAE0E25CF54F9FE084918D93915031967E
:10EA200097FFFACF58C28091D10385FF0CC0A2E8AE
:10EA3000BAE0EEE5FCE094E184918D93915031963B
:10EA400097FFFACF48C230911005332309F499C0DB
:10EA500087E58093820A80E58093830A40E24093B1
:10EA6000840A20911105822F6AE00E94BA91805D8C
:10EA70008093850A822F0E94BA91892F805D8093AE
:10EA8000860A8FE28093870A832F0E94BA91805D65
:10EA90008093880A832F0E94BA91892F805D80938A
:10EAA000890A40938A0A20910D0530910E0583E072
:10EAB000293E380780F0C90168EE73E00E94C691D4
:10EAC000CB01805D80938B0AC90168EE73E00E94E0
:10EAD000C6919C0102C040938B0A2536310580F017
:10EAE000C90164E670E00E94C691CB01805D80930D
:10EAF0008C0AC90164E670E00E94C6919C0103C0C3
:10EB000080E280938C0AC9016AE070E00E94C6919D
:10EB1000CB01805D80938D0AC9016AE070E00E949C
:10EB2000C691805D80938E0A8DE680938F0A80E285
:10EB30008093900A20910F05253660F0822F64E6BD
:10EB40000E94BA91805D8093910A822F0E94BA91AF
:10EB5000292F02C08093910A822F6AE00E94BA9105
:10EB6000805D8093920A822F0E94BA91892F805DE6
:10EB70008093930A83E78093940A80E28093950AB6
:10EB8000AAC1A2E8BAE0E4E7FCE094E184918D93A5
:10EB90009150319697FFFACF9EC1809103049091D6
:10EBA0000404A0910504B0910604BC01CD0124E643
:10EBB00030E040E050E00E940F92DA01C9018C5031
:10EBC0009E4F90935F0B80935E0B0E941B749093FB
:10EBD000610B8093600B88E78093620B80918E09B4
:10EBE0008093630B0E94897380934B0B80918D09F6
:10EBF00081FF02C084E407C080918F09833011F443
:10EC000080E201C081E28093640B89E49BE09093F1
:10EC100029058093280580918D018093700B809148
:10EC2000640B8093720B809193099091940997FDE6
:10EC30000196959587958093650B4DC10E942B7326
:10EC40008091030490910404A0910504B0910604FE
:10EC5000BC01CD0124E630E040E050E00E940F927C
:10EC6000DA01C9018C509E4F9093340A8093330A85
:10EC700080911F019091200190932E0A80932D0A7C
:10EC800080911F01909120019093300A80932F0A68
:10EC900080912F099091300997FD01969595879560
:10ECA00080931F0A8093260A20919309309194093A
:10ECB00037FF02C02F5F3F4F359527952093240AD9
:10ECC000809191099091920964E170E00E94C6914F
:10ECD0006093250A20932B0A60932C0A0E941B74D0
:10ECE00090933C0A80933B0A88E780933D0A809189
:10ECF0001F01909120019093380A8093370A8091E8
:10ED000008058C5E8093310A809109058C5E8093A2
:10ED1000320A8091160A9091170A6AE070E00E9408
:10ED2000C69170933A0A6093390A10921B0A809137
:10ED3000120A9091130A9093360A8093350A89E15A
:10ED40009AE090932905809328052091D80230916C
:10ED5000D902C9016CE370E00E94C6916093400A39
:10ED6000C9016CE370E00E94C6918093410AB3C070
:10ED70000E942B73809191099091920964E670E052
:10ED80000E94C69170935B0A60935A0A80912F0982
:10ED90009091300997FD01969595879580934B0A40
:10EDA000809193099091940997FD01969595879587
:10EDB0008093500A80910001482F55279A012B5FBC
:10EDC0003F4F80911F01909120012817390784F44B
:10EDD00080911F0190912001841B950B9C01220FB3
:10EDE000331F280F391F822F82518093570A02C088
:10EDF0001092570AE0900304F09004040091050477
:10EE000010910604C801B70124E630E040E050E06C
:10EE10000E940F923093590A2093580A37FF04C07A
:10EE20001092590A1092580AC801B70124E630E03E
:10EE300040E050E00E940F92DA01C9018C509E4FD1
:10EE400090935D0A80935C0A80911F01909120014C
:10EE50009093520A8093510A80911F019091200152
:10EE60009093540A8093530A0E941B7490935F0AF4
:10EE700080935E0A88E78093600A80911F019091D9
:10EE800020019093640A8093630A809108058C5E48
:10EE90008093550A809109058C5E8093560A809173
:10EEA000160A9091170A6AE070E00E94C69170936A
:10EEB000660A6093650A1092470A8091120A90913F
:10EEC000130A9093620A8093610A85E49AE0909312
:10EED0002905809328052CE230E002C020E030E0D4
:10EEE000C9011F910F91FF90EF900895EF92FF924B
:10EEF0000F931F93CF93DF9380910A0590910B0599
:10EF00009C0153E0220F331F5A95E1F7281B390B60
:10EF10008091190390911A03280F391F37FF02C0FF
:10EF2000295F3F4F43E0359527954A95E1F73093A8
:10EF30000B0520930A0590911A05992309F020C327
:10EF400080911905282F3327442755278F5F8093F9
:10EF50001905F9012131310508F00FC3E857FF4FBA
:10EF60000C9461928091D10385FF2AC080E00E94B9
:10EF7000DC8B80911F01909120016AE070E00E947B
:10EF8000DA919F938F9380911F01909120016AE005
:10EF900070E00E94DA917F936F9380EA9CE09F93E8
:10EFA0008F938FEC9BE89F938F93E0913D05F091B9
:10EFB0003E0509952DB73EB7285F3F4F2DBF28C0AE
:10EFC00080E00E94DC8B80911F01909120016AE01B
:10EFD00070E00E94DA919F938F9380911F0190912E
:10EFE00020016AE070E00E94DA917F936F938DEACE
:10EFF0009CE09F938F938EEA9BE89F938F93E09181
:10F000003D05F0913E0509958DB79EB708968DBFD9
:10F010008091720980FF39C0809120048823E9F033
:10F020008AE00E94DC8B80913B0199279F938F930C
:10F030008091030490910404A0910504B09106040A
:10F04000BC01CD0124E630E040E050E00E940F9288
:10F050003F932F938AEB9CE099C68AE00E94DC8B59
:10F060008091030490910404A0910504B0910604DA
:10F07000BC01CD0124E630E040E050E00E940F9258
:10F080003F932F9386EC9CE0ADC78AE00E94DC8B17
:10F0900081ED9CE09F938F938EEA9BE80C942381F3
:10F0A0008091D10385FF2AC085E10E94DC8B80918D
:10F0B000D8029091D9026CE370E00E94C6919F93B0
:10F0C0008F938091D8029091D9026CE370E00E94F6
:10F0D000C6917F936F938BED9CE09F938F938FEC02
:10F0E0009BE89F938F93E0913D05F0913E05099534
:10F0F0002DB73EB7285F3F4F2DBF28C085E10E9446
:10F10000DC8B8091D8029091D9026CE370E00E9470
:10F11000C6919F938F938091D8029091D9026CE30E
:10F1200070E00E94C6917F936F9388EE9CE09F935E
:10F130008F938EEA9BE89F938F93E0913D05F0912A
:10F140003E0509958DB79EB708968DBF8FE10E9449
:10F15000DC8B80E690E09F938F9380912F099091B4
:10F1600030099F938F9385EF9CE09F938F93CEEA16
:10F17000DBE8DF93CF93E0913D05F0913E050995E3
:10F180008091D0032DB73EB7285F3F4F2DBF80FF42
:10F1900006C089E20E94DC8B80E09DE073C389E2B7
:10F1A0000E94DC8B82E09DE0B9C68091D10385FF8F
:10F1B0001BC08AE20E94DC8B8091160A9091170A8C
:10F1C0009F938F9384E09DE09F938F938FEC9BE8B8
:10F1D0009F938F93E0913D05F0913E0509958DB782
:10F1E0009EB706968DBF1BC08AE20E94DC8B809181
:10F1F000160A9091170A9F938F938CE09DE09F933E
:10F200008F938EEA9BE89F938F93E0913D05F09159
:10F210003E0509952DB73EB72A5F3F4F2DBF86E3C8
:10F220000E94DC8B8091120A9091130A6AE070E0D0
:10F230000E94C6919F938F938091120A9091130A16
:10F240006AE070E00E94C6917F936F9384E19DE035
:10F250009F938F938EEA9BE89F938F93E0913D0558
:10F26000F0913E0509958DB79EB70896C9C689E00D
:10F270000E94DC8B80E29DE09F938F930EEA1BE857
:10F280001F930F93E0913D05F0913E0509958EE1A6
:10F290000E94DC8B0F900F900F900F9082E29DE008
:10F2A0009F938F931F930F93E0913D05F0913E053F
:10F2B000099583E30E94DC8B0F900F900F900F90C5
:10F2C00084E29DE09F938F931F930F93E0913D0500
:10F2D000F0913E0509958FE30E94DC8B0F900F9013
:10F2E0000F900F9086E29DE09F938F931F930F9353
:10F2F000E0913D05F0913E0509958EE70E94DC8B7B
:10F300000F900F900F900F908CE39DE09F938F9341
:10F310001F930F939AC780919901882309F462C0C3
:10F320008DE50E94DC8B82E59DE09F938F93CEEA72
:10F33000DBE8DF93CF93E0913D05F0913E05099521
:10F3400084E50E94DC8B0F900F900F900F908091BE
:10F350008E0999279F938F9384E59DE09F938F93C8
:10F36000DF93CF93E0913D05F0913E0509958EE541
:10F370000E94DC8B2DB73EB72A5F3F4F2DBF809197
:10F380009109909192096AE070E00E94C6917F9382
:10F390006F938DE59DE09F938F93DF93CF93E091E3
:10F3A0003D05F0913E0509958DB79EB706968DBF38
:10F3B00080918F09833081F480918D0981FF06C08F
:10F3C0008BE50E94DC8B87E69DE0A8C58BE50E945B
:10F3D000DC8B8AE69DE0A2C58BE50E94DC8B8DE686
:10F3E0009DE02DC784E0D3C380919901882309F45F
:10F3F0007AC080911C059EEAE92E9BE8F92E8823AD
:10F4000009F44BC089E60E94DC8B8091E3049927C4
:10F410009F938F9380E79DE09F938F93FF92EF924E
:10F42000E0913D05F0913E05099585E70E94DC8B52
:10F430002DB73EB72A5F3F4F2DBF80918D01992791
:10F440009F938F9300E610E01F930F938091930991
:10F45000909194099F938F938BE79DE09F938F9357
:10F46000FF92EF92E0913D05F0913E05099582E70C
:10F470000E94DC8B8DB79EB70A968DBF8091E10408
:10F4800099279F938F931F930F938091E20499275D
:10F490009F938F9387E89DE073C689E60E94DC8B7B
:10F4A00080918D0199279F938F9380E690E09F93A1
:10F4B0008F9380919309909194099F938F9380915A
:10F4C000900999279F938F9387E99DE09F938F934E
:10F4D000FF92EF92E0913D05F0913E0509958DB7C1
:10F4E0009EB70C968DC585E052C39091E404992394
:10F4F000D1F080912505882381F0903270F487E067
:10F500000E94717383E90E94DC8B8091E404992747
:10F510009F938F9380EB9DE0A4C383E90E94DC8BD3
:10F520008BEB9DE0B3C38091D1030EEAE02E0BE894
:10F53000F02E85FF06C084E90E94DC8B81EC9DE003
:10F54000DAC383E90E94DC8B84ED9DE0D4C3809113
:10F55000AE0B863059F480911C05882319F0109267
:10F560001C059AC681E080931C0596C6883009F078
:10F5700093C60E94E18B81E0DBC39093190594C68A
:10F58000913009F0E0C380911905282F33274427D3
:10F5900055278F5F80931905F9012131310508F056
:10F5A0007EC6E756FF4F0C9461928091D10385FF90
:10F5B00043C080E00E94DC8B8091160A9091170A6C
:10F5C0009F938F9380911F01909120016AE070E0DA
:10F5D0000E94DA919F938F9380911F019091200157
:10F5E0006AE070E00E94DA917F936F938091D80275
:10F5F0009091D9026CE370E00E94C6919F938F9323
:10F600008091D8029091D9026CE370E00E94C6917B
:10F610007F936F938AEE9DE09F938F938FEC9BE88F
:10F620009F938F93E0913D05F0913E0509952DB78D
:10F630003EB7225F3F4FB1C580E00E94DC8B8091D6
:10F64000160A9091170A9F938F9380911F019091B2
:10F6500020016AE070E00E94DA919F938F9380917D
:10F660001F01909120016AE070E00E94DA917F937F
:10F670006F938091D8029091D9026CE370E00E9460
:10F68000C6919F938F938091D8029091D9026CE399
:10F6900070E00E94C6917F936F9385E09EE0C2C2A6
:10F6A00085E10E94DC8B80E690E09F938F938091B0
:10F6B0008A0190918B019F938F9380E29EE09F93AC
:10F6C0008F93CEEADBE8DF93CF93E0913D05F09195
:10F6D0003E050995809172092DB73EB7285F3F4FCF
:10F6E0002DBF80FF51C080912004882339F18FE124
:10F6F0000E94DC8B8091030490910404A091050486
:10F70000B0910604BC01CD0124E630E040E050E0B9
:10F710000E940F923F932F938AE29EE09F938F93D4
:10F720008EEB9BE89F938F93E0913D05F0913E0512
:10F7300009958DB79EB706968DBF38C08FE10E94A0
:10F74000DC8B8091030490910404A0910504B09196
:10F750000604BC01CD0124E630E040E050E00E9408
:10F760000F923F932F9383E39EE09F938F93DF93BA
:10F77000CF93E0913D05F0913E0509952DB73EB739
:10F780002A5F3F4F2DBF12C08FE10E94DC8B8CE3BC
:10F790009EE09F938F93DF93CF93E0913D05F0918F
:10F7A0003E0509950F900F900F900F9089E20E94EF
:10F7B000DC8B80913B0199279F938F9386E49EE099
:10F7C0009F938F93DF93CF9313C4809199018823E4
:10F7D000F9F08BE20E94DC8B80918D0199279F9339
:10F7E0008F9380919109909192096AE070E00E9454
:10F7F000C6917F936F9380E690E09F938F93809163
:10F800009309909194099F938F9389E49EE058C146
:10F8100082E0BDC18FE30E94DC8B8091140A90913D
:10F82000150A9F938F938091120A9091130A6AE0B0
:10F8300070E00E94C6919F938F938091120A9091DD
:10F84000130A6AE070E00E94C6917F936F9380E68E
:10F850009EE09F938F93CEEADBE8DF93CF93E09116
:10F860003D05F0913E0509958091D0032DB73EB737
:10F87000265F3F4F2DBF80FF0AC082E50E94DC8BD0
:10F8800084E79EE09F938F938EEB9BE8DCC482E538
:10F890000E94DC8B87E79EE041C3809199011EEABC
:10F8A000E12E1BE8F12E882309F449C084E50E946B
:10F8B000DC8B80918E0999279F938F93809190097B
:10F8C00099279F938F938AE79EE09F938F93E701F9
:10F8D000FF92EF92E0913D05F0913E0509958DB7BD
:10F8E0009EB708968DBF80918F09833051F484E6CE
:10F8F0000E94DC8B8DE89EE09F938F93FF92EF92A6
:10F900000BC084E60E94DC8B83E99EE09F938F937B
:10F910008FEC9BE89F938F93E0913D05F0913E051E
:10F9200009950F900F900F900F9080918D0981FF96
:10F93000BBC484E60E94DC8B89E99EE0EFC284E5CB
:10F940000E94DC8B8FE99EE0D6C180911B05CEEA38
:10F95000EC2ECBE8FC2E882309F450C089E60E94E7
:10F96000DC8B809175086AE00E94BA91892F9927F3
:10F970009F938F93809175080E94BA9199279F93C6
:10F980008F9380916D080E94BA91892F99279F9338
:10F990008F9380916D080E94BA9199279F938F93BE
:10F9A000809165080E94BA91892F99279F938F9320
:10F9B000809165080E94BA9199279F938F938091B7
:10F9C0005D080E94BA91892F99279F938F93809108
:10F9D0005D080E94BA9199279F938F9385EB9EE0D3
:10F9E0009F938F93FF92EF92E0913D05F0913E053A
:10F9F00009952DB73EB72C5E3F4FCFC389E60E94D5
:10FA0000DC8B80E690E09F938F9380917708992715
:10FA100087FD90959F938F9380916F08992787FD1D
:10FA200090959F938F9380916708992787FD909574
:10FA30009F938F9380915F08992787FD90959F935F
:10FA40008F9382ED9EE09F938F93FF92EF92E091D0
:10FA50003D05F0913E0509958DB79EB70E96D0C233
:10FA600080911B0590918407882309F48DC0943000
:10FA700009F48CC09630A1F58EE70E94DC8B809152
:10FA800085086AE00E94BA91892F99279F938F93E6
:10FA9000809185080E94BA9199279F938F938091B6
:10FAA0007D080E94BA91892F99279F938F93809107
:10FAB0007D080E94BA9199279F938F9385EE9EE0CF
:10FAC0009F938F938EEA9BE89F938F93E0913D05E0
:10FAD000F0913E0509952DB73EB7245F3F4F5DC3BA
:10FAE000973008F4E1C38EE70E94DC8B8091950883
:10FAF0006AE00E94BA91892F99279F938F938091F2
:10FB000095080E94BA9199279F938F9380918D08B1
:10FB10000E94BA91892F99279F938F9380918D0886
:10FB20000E94BA9199279F938F93809185080E9494
:10FB3000BA91892F99279F938F93809185080E946E
:10FB4000BA9199279F938F9380917D080E94BA91D3
:10FB5000892F99279F938F9380917D080E94BA9156
:10FB600099279F938F9384EF9EE09F938F938EEAC4
:10FB70009BE89F938F93E0913D05F0913E05099599
:10FB80008DB79EB744963CC2943021F486E00E9423
:10FB900071738AC39630F1F48EE70E94DC8B80E6A5
:10FBA00090E09F938F9380918708992787FD909588
:10FBB0009F938F9380917F08992787FD90959F93BE
:10FBC0008F9381E19FE09F938F938EEA9BE89F93B1
:10FBD0008F93DAC2973008F467C38EE70E94DC8BFC
:10FBE00080E690E09F938F9380919708992787FDF7
:10FBF00090959F938F9380918F08992787FD90957B
:10FC00009F938F9380918708992787FD90959F9365
:10FC10008F9380917F08992787FD90959F938F936D
:10FC200084E29FE09F938F938EEA9BE89F938F934C
:10FC30000ECF9091E404992309F44AC080912505E0
:10FC40008823F9F09032E8F487E00E94717383E929
:10FC50000E94DC8B8091E40499279F938F9387E324
:10FC60009FE09F938F938EEB9BE89F938F93E09100
:10FC70003D05F0913E0509952DB73EB72A5F3F4FF0
:10FC80008CC283E90E94DC8B82E49FE09F938F9378
:10FC90000EEA1BE81F930F93E0913D05F0913E059E
:10FCA00009951F921F929091E40481E1989FC001F1
:10FCB0001124825C954F9F938F931F930F93E09134
:10FCC0003D05F0913E0509958DB79EB70A9698C1FE
:10FCD0008091D103BEEAEB2EBBE8FB2E85FF06C068
:10FCE00084E90E94DC8B88E49FE005C083E90E94E0
:10FCF000DC8B8BE59FE09F938F93FF92EF92A5C2E1
:10FD00008091AE0B863079F480911B05882319F021
:10FD100010921B0503C081E080931B0585E00E94C3
:10FD2000717386E0AEC2883031F40E94E18B82E0CC
:10FD300080931A05AFC2813009F0AEC20E94E18BF8
:10FD400010921A05A7C2923009F0ACC28091190531
:10FD5000282F3327442755278F5F80931905F901F2
:10FD60002131310508F09BC2E655FF4F0C9461929A
:10FD700080E00E94DC8B85EF97E09F938F930E9439
:10FD8000633099279F938F9381E79FE09F938F9391
:10FD90008EEB9BE89F938F93E0913D05F0913E059C
:10FDA00009952DB73EB7285F3F4FF7C185E10E9407
:10FDB000DC8B83E098E09F938F93809100016AE051
:10FDC0000E94BA91892F99279F938F938091000168
:10FDD0000E94BA9199279F938F9380E89FE09F9309
:10FDE0008F938EEA9BE89F938F93E0913D05F0916E
:10FDF0003E05099569CF8AE20E94DC8B81E99FE08C
:10FE00009F938F93CEEADBE8DF93CF93E0913D059C
:10FE1000F0913E050995809172090F900F900F9017
:10FE20000F9080FF41C0809192079091750181FDF4
:10FE30000BC0892F99279F938F9386E99FE09F930B
:10FE40008F93DF93CF9313CFE0913D05F0913E0563
:10FE5000933318F080EA9FE002C087EA9FE09F9307
:10FE60008F93DF93CF9309950F900F900F900F9082
:10FE700080915609E0913D05F0913E059091750104
:10FE800080FF0BC0892F99279F938F938EEA9FE065
:10FE90009F938F93DF93CF93AFC0892F99279F9321
:10FEA0008F9384EB9FE0CFC08AEB9FE037C08FE356
:10FEB0000E94DC8B83EC9FE09F938F93CEEADBE87C
:10FEC000DF93CF93E0913D05F0913E0509950F90AA
:10FED0000F900F900F908091E807882319F487EC1A
:10FEE0009FE01CC08091DE03E0913D05F0913E054E
:10FEF000882319F080ED9FE002C087ED9FE09F937B
:10FF00008F93DF93CF9309950F900F900F900F90E1
:10FF10008091F30786FFC8C18EED9FE09F938F937A
:10FF2000DF93CF9392C184E50E94DC8B85EE9FE046
:10FF30009F938F93CEEADBE8DF93CF93E0913D056B
:10FF4000F0913E050995809172090F900F900F90E6
:10FF50000F9085FD03C08AEE9FE011C08091D60707
:10FF6000883F10F4E82F07C0EFEFF0E0E81BF1093D
:10FF7000E65FFB4FE081E23358F483EF9FE09F930D
:10FF80008F93DF93CF93E0913D05F0913E0516C02E
:10FF9000E43B18F08AEF9FE0F2CF8091F307E09105
:10FFA0003D05F0913E0585FF03C081E090E102C070
:10FFB00088E090E19F938F93DF93CF9309950F9003
:10FFC0000F900F900F908091EC07882309F46CC17B
:10FFD0008EE50E94DC8B8091EC0799279F938F938D
:10FFE0008FE090E19F938F938EEA9BE89F938F938E
:10FFF000E0913D05F0913E0509958DB79EB70696B7
:020000021000EC
:100000008DBF52C189E60E94DC8B8AE190E19F930B
:100010008F93CEEADBE8DF93CF93E0913D05F0913B
:100020003E0509950F900F900F900F908091EB0770
:10003000E0913D05F0913E05882351F099279F936B
:100040008F9384E290E19F938F93DF93CF9313CEAE
:1000500088E290E19F938F93DF93CF93FAC08091D2
:100060001D05AEEAEA2EABE8FA2E882309F053C04C
:100070008EE70E94DC8B8091690199279F938F9373
:1000800080918707E82FFF27EE0FFF1FE754F74FF8
:10009000808191819F938F9380918607E82FFF271E
:1000A000EE0FFF1FE754F74F808191819F938F934D
:1000B0008EE290E19F938F93FF92EF92E0913D0546
:1000C000F0913E05099583E90E94DC8B8DB79EB7C0
:1000D0000A968DBF80918907E82FFF27EE0FFF1F3B
:1000E000E754F74F808191819F938F938091880788
:1000F000E82FFF27EE0FFF1FE754F74F8081918114
:1001000081589F4F9F938F9382E490E19F938F93A9
:10011000FF92EF9241CE8EE70E94DC8B80910C041F
:1001200099279F938F9380910B0499279F938F9387
:1001300080910A0499279F938F9381E590E19F9383
:100140008F93FF92EF92E0913D05F0913E05099566
:1001500083E90E94DC8B8DB79EB70A968DBF809194
:100160000F0499279F938F9380910E0499279F9353
:100170008F9380910D0499279F938F9385E690E14B
:100180009F938F93FF92EF92E0913D05F0913E0592
:1001900009952DB73EB7265F3F4F2DBF85C0809193
:1001A0002505882309F480C08EE70E94DC8B8091AE
:1001B000720986FD11C089E790E19F938F938FECC0
:1001C0009BE89F938F93E0913D05F0913E05099543
:1001D0000F900F900F900F908091F10799278F70DB
:1001E0009070892B89F088E890E19F938F938FEC32
:1001F0009BE89F938F93E0913D05F0913E05099513
:100200000F900F900F900F908091720982FF11C094
:1002100082E990E19F938F938FEC9BE89F938F935C
:10022000E0913D05F0913E0509950F900F900F90DC
:100230000F908091720983FD37C087E990E19F9309
:100240008F938FEC9BE89F938F93E0913D05F09106
:100250003E0509950F900F900F900F9025C00091CB
:10026000AE0B063089F480911D05882319F0109299
:100270001D0503C081E080931D0586E00E94717317
:1002800087E00E94717308C0013031F40E94E18B55
:1002900000931A05109219051092AE0B05C010922A
:1002A000190502C010921A05E6E0CDB7DEB70C942E
:1002B00052924FB728E130E0F8948091C9008F77CF
:1002C0008093C9008091C9008F7B8093C900809181
:1002D000C9008F7D8093C9005A9A52985B9A539AAD
:1002E000832F99278093CD002093CC008091C80064
:1002F00082608093C80080E18093C9008091CA0029
:100300008F778093CA008091CA008F7B8093CA0048
:100310008091CA008091CA008F7E8093CA0080912C
:10032000CA0088608093CA008091C9008B7F809347
:10033000C9008091CA0084608093CA008091CA007D
:1003400082608093CA008091C80087FF03C08091BB
:10035000CE00F9CF8091C90080688093C900809158
:100360008C0B846080938C0B4FBF08959091F804A0
:10037000992341F48F3031F490931F0580E58093E9
:10038000F8040895E0911F05EF5FE0931F05E83141
:1003900021F481E080931E050895E93120F089E180
:1003A00080931F050895FF27EB58F44F808308952D
:1003B000A0E0B0E0EEEDF1E80C94329291E0D92E9D
:1003C00082E0A82EBD2CE12C01E0F02E80918C0B58
:1003D00082FDB5C080916F008F7D80936F00E091AA
:1003E000EE07EE2351F0FF27EE0FFF1FE754F74F04
:1003F00080819181843691055CF480910904883C68
:1004000020F4809109048C5E01C088EC809309047B
:100410008091760B682F77278091200581508093FB
:1004200020058F3F31F41CE7C12E82E08093200528
:1004300002C0C4E2CC2E40E04C1508F07EC0EA2D8C
:10044000FF27EB58F44F80818D2111F06E297F2911
:100450008D2D9927880F991FD82E882319F4B1E084
:10046000DB2EAD0CEE0CFF1C20E0E21628E0F206BD
:1004700009F061C0A1E0EA2EF12CCB01805094403C
:1004800065E070E00E94DA91AB2DBB27FD01EA0F19
:10049000FB1FE754F74F808191819C01220F331F8E
:1004A000280F391F260F371F37FF02C02D5F3F4F20
:1004B000E901D595C795D595C795CB0101968C17C0
:1004C0009D0714F4219706C061507040C617D707E6
:1004D0000CF4219680910904833CD8F08D010A0F19
:1004E0001B1FF801E754F74F80819181FE01E81B43
:1004F000F90BCF0163E070E00E94DA91CB01880F25
:10050000991F860F971F0351174FF801918380831E
:1005100007C0AA0FBB1FA351B74F11961C921E9282
:10052000EB2DFF27EE0FFF1FE754F74FD183C0835A
:1005300060E070E0B3944F5F7FCF10923A01109269
:100540001E05EAE0CDB7DEB70C944E9208950895EB
:1005500040E050E080912105909122059C01220FFE
:10056000331F280F391F8091190390911A03280F08
:10057000391F37FF02C02D5F3F4F359527953595C1
:100580002795309322052093210580913B018B32E2
:10059000D9F480919707282F33278091FD039091FC
:1005A000FE03829FA001839F500D929F500D112446
:1005B000CA0157FD4F96AC0125E0559547952A9500
:1005C000E1F74B5F5F4F3DC08D32D9F480919707C3
:1005D000282F33278091FD039091FE03829FA00175
:1005E000839F500D929F500D1124CA0157FD4F96C5
:1005F000AC0195E0559547959A95E1F745505040E7
:1006000020C0803271F48091D10381FF1AC0C901EA
:1006100037FD4F96AC0185E0559547958A95E1F7F2
:1006200010C08E3529F48091F803482F552709C052
:10063000863739F48091F803992744275527481BBA
:10064000590BCA01AA2797FDA095BA2F8093920251
:1006500090939302A0939402B093950208950F9300
:100660001F930E942B7380911F0190912001AA2754
:1006700097FDA095BA2F8093C1019093C201A093DA
:10068000C301B093C4018091120A9091130AAA2762
:10069000BB278093D4019093D501A093D601B0934A
:1006A000D7010AE010E08091160A9091170AB8016C
:1006B0000E94C691CB01AA27BB278093E7019093A4
:1006C000E801A093E901B093EA01809103049091BD
:1006D0000404A0910504B0910604BC01CD0124E6F8
:1006E00030E040E050E00E940F922093FA013093F6
:1006F000FB014093FC015093FD0180918A01909190
:100700008B01AA2797FDA095BA2F80930D02909395
:100710000E02A0930F02B093100280918E099927C8
:10072000AA27BB278093200290932102A093220244
:10073000B0932302809190099927AA27BB27809321
:10074000330290933402A0933502B0933602809125
:10075000910990919209B8010E94C691CB01AA27F4
:10076000BB278093460290934702A0934802B09320
:1007700049028091930990919409AA2797FDA09529
:10078000BA2F8093590290935A02A0935B02B093C0
:100790005C02809109059927AA27BB2780936C02E8
:1007A00090936D02A0936E02B0936F028091E30468
:1007B0009927AA27BB2780937F0290938002A0935A
:1007C0008102B09382028091E4049927AA27BB2773
:1007D0008093A5029093A602A093A702B093A802CB
:1007E0001F910F910895002422273327442751E0B9
:1007F000BB27EE27FF27A0E1660F771F881F991FF1
:10080000001C221F331F441F660F771F881F991F6C
:10081000001C221F331F441F2AF4050E2B1F3E1FEE
:100820004F1F04C0051A2B0B3E0B4F0B550FBB1F60
:10083000EE1F587F556047FD5250AA95E9F6E695A0
:10084000B7955795E695B7955795852F9B2F0895A2
:100850002227332741E0552768E0880F991F221F80
:10086000331F880F991F221F331F1AF4240F351FBF
:1008700002C0241B350B440F551F487F456037FDD0
:1008800042506A9551F75695479556954795842F4E
:100890000895AA2797FF04C0809590958A1F9A1FF4
:1008A00077FF04C0609570956A1F7A1F669F90015C
:1008B000779FA001679F300D411D5A1F300D411DCC
:1008C0005A1F889FF001999F2E0F3F1F401D511DF9
:1008D000899F300D411D5A1F300D411D5A1FCA01FD
:1008E000B901112480CF4FB720E430E0F894809113
:1008F000C9008F778093C9008091C9008F7B809356
:10090000C9008091C9008F7D8093C9005A9A52987E
:100910005B9A539A832F99278093CD002093CC0024
:100920008091C80082608093C80088E18093C900EC
:100930008091CA008F778093CA008091CA008F7B14
:100940008093CA008091CA008F7D8093CA008091F5
:10095000CA008F7E8093CA008091CA00877F8093EF
:10096000CA008091C9008B7F8093C9008091CA0022
:1009700084608093CA008091CA0082608093CA001C
:100980008091C80087FF03C08091CE00F9CF80918D
:10099000C90080688093C9004FBF08950F931F93CB
:1009A000CF93DF93482F4F5F893108F08BC0809140
:1009B000B808841720F44F5F4093B8084150CB012A
:1009C00083539B4268E170E00E94DA91A42FBB2719
:1009D000FD01EA0FFB1FE754F74F808191819B01D6
:1009E000281B390BC90137FF03C0909581959F4F94
:1009F000069794F480910904883C30F480910904AE
:100A0000865F8093090408C088EC80930904809174
:100A10006F008F7D80936F00FD01EA0FFB1FE7548D
:100A2000F74F808191819C01220F331F280F391FBE
:100A3000260F371F37FF02C02D5F3F4FE901D595C5
:100A4000C795D595C795CB0101968C179D0714F4D2
:100A5000219706C061507040C617D7070CF4219645
:100A600080910904843BD8F08D010A0F1B1FF80107
:100A7000E754F74F80819181FE01E81BF90BCF010C
:100A800063E070E00E94DA91CB01880F991F860F16
:100A9000971F0351174FF8019183808307C0AA0F56
:100AA000BB1FA351B74F11961C921E92E42FFF2734
:100AB000EE0FFF1FE754F74FD183C083443011F48A
:100AC00010923A01DF91CF911F910F910895CF932A
:100AD000DF932091AF0B822F9927807F90704097F2
:100AE00009F06CC02F3109F046C08091B00B8093A3
:100AF0002C052091B20B20932E058091B30B80938F
:100B00002D05822F99279093BA088093B908222344
:100B100009F054C080918607282F3327220F331FF6
:100B2000F901E351F74F1182108280918707A82FB6
:100B3000BB27AA0FBB1FFD01E351F74F11821082A3
:100B400080918907E82FFF27EE0FFF1FCF01835108
:100B5000974FEC01198218822754374FE901198207
:100B60001882A754B74F11961C921E92E754F74F64
:100B70001182108223C0C22FCF70CA30F8F4809146
:100B8000B00B8093DB0B8091B10B8093DA0B8091DB
:100B9000B20B8093DD0B8091B30B8093DC0B6091E3
:100BA000DA0B7091DB0B8C2F0E94CE846091DC0BF2
:100BB0007091DD0B8C2F8F5F0E94CE84DF91CF91DF
:100BC0000895CF93C82F8F3F49F480912F058F3F11
:100BD00029F4109231051092300532C02091310570
:100BE000222339F4CF3111F485E001C084E08093F1
:100BF000320580913205909130058217A0F4892F3B
:100C00008095809330058F3F19F48EEF80933005E7
:100C100080913005C81711F40E9467851092310544
:100C2000109230050BC0E22FFF27E155F44FC0832F
:100C30002F5F209331059C0F90933005C0932F05B3
:100C4000CF91089590912B05933240F4E92FFF271F
:100C5000E954F44F80839F5F90932B05089583326E
:100C600018F48D5F80932B05089590E2EAEBFBE08A
:100C70008FE19193815087FFFCCF0895CF93CFB739
:100C800023E031E0F8948091C9008F778093C90008
:100C90008091C9008F7B8093C9008091C9008F7DAE
:100CA0008093C9005A9A52985B9A539A832F992736
:100CB0008093CD002093CC008091C8008260809307
:100CC000C80088E18093C9008091CA008F77809323
:100CD000CA008091CA008F7B8093CA008091CA00AD
:100CE00080628093CA008091CA0080618093CA00AC
:100CF0008091CA0088608093CA008091C900846096
:100D00008093C9008091CA0084608093CA0080915A
:100D1000CA0082608093CA008091C80087FF03C028
:100D20008091CE00F9CF8091C90080688093C9007E
:100D30008091C90080648093C9000E943586CFBF2E
:100D4000CF910895282F99278F709070892B31F4B7
:100D5000209580912A05822B80932A0508951F9261
:100D60000F920FB60F9211248F93EF93FF93809100
:100D7000D202882309F068C0E0913405EE2389F49B
:100D800080913305882369F48091B70B882321F083
:100D900081E08093350505C08091C9008160809312
:100DA000C90080913505882379F4EF5FE09334051D
:100DB00080918E0B8E1720F481E0809335051CC046
:100DC000FF27E257F44F3CC080913305882361F43C
:100DD0008091B70B882311F483E003C0813999F423
:100DE00081E0809333050FC0833099F48091B70B75
:100DF000882349F01092B70B8091C9008E7F8093B1
:100E0000C9008EEF1EC08091C90081608093C90027
:100E10000EC0833261F48091C9008E7F8093C90037
:100E20008FEF8093CE0081E08093D20218C0809132
:100E30003305E82FFF27E954F44F8F5F8093330584
:100E400080818093CE000BC0109233051092340540
:100E5000109235058091C90080618093C900FF918F
:100E6000EF918F910F900FBE0F901F9018956827EC
:100E700027E0322F67FF06C0862F9927880F991F1A
:100E8000832702C0862F880F682F215027FFF2CFBB
:100E9000992708950F931F93CF93DF93062F60E058
:100EA000162F601740F4EC0189910E943787682F54
:100EB0001F5F1017C8F3862F9927DF91CF911F91DD
:100EC0000F910895DC0190E0961758F48C918032D0
:100ED00041F09F5F961728F4FD01E90FF11D808115
:100EE000F6CF892F99270895A0E0B0E0EAE7F7E868
:100EF0000C9433928FE980938F0B80E18093910B58
:100F000084EA8093920B85E58093930B8DE5809323
:100F1000940B1092950B80913705882309F06AC0D5
:100F20008091360513E1819FC001112463E086554D
:100F30009E4F0E946287082F80913605819FC001D5
:100F400011246AE080569E4F0E946287982F800F7E
:100F5000865F80938E0B4EEFB42EB80EB092900B3E
:100F6000209136052093960BE92EFF24C70133E02C
:100F7000880F991F3A95E1F7802B8093970B822F6A
:100F8000992723E1C22ED12C8C9D90018D9D300D8F
:100F90009C9D300D1124C90180569E4FA701BC01B4
:100FA00088E99BE00E94FB8F1127809136059927E5
:100FB0008C9DE0018D9DD00D9C9DD00D1124CE0106
:100FC00086559E4FA801BC01C7018856944F0E94C8
:100FD000FB8F0257144F0E0D1F1D6B2D80E99BE0F8
:100FE0000E944A87F8018287809137058F5F80933E
:100FF000370570C01091950B0E942F834091D3024A
:101000004031C8F563E170E0812F9927DC01AA0F18
:10101000BB1FA80FB91FA257B44F842F9927869FD3
:10102000F001879FF00D969FF00D1124E056FE4FC2
:101030002585C4E0880F991FCA95E1F7282BED019B
:101040002887268537853F7982899927982F882791
:101050009295990F907E282B392B2987832F9927DA
:101060008A87842F8F5F1F5F163018F4482F8031D6
:1010700058F28093D30283E0189F90011124822FAD
:10108000885F80938E0B825C8093900B812F9927D1
:101090008C01000F111F080F191F0257144F822FC8
:1010A0008A5F682F80E99BE00E944A87F801808769
:1010B0008091D302803170F081E08093D30210924E
:1010C0003705809136058F5F80933605803110F0AB
:1010D00010923605E9E0CDB7DEB70C944F928091BF
:1010E000D202882309F447C08091D10385FD04C052
:1010F0008091D602882381F082E98093B70B83E246
:101100008093B80B8091D602882309F485E58093FB
:10111000B90B1092D60202C08093B70B8091D40213
:101120008F3071F480912A050E945472882341F017
:1011300081E98093B70B8093B80B81E38093B90B5F
:101140001092D2028091C80085FFFCCF8091C90027
:101150008F7E8093C9008091C9008E7F8093C900E3
:101160000E9474878EE78093CE0080912A05809339
:10117000D40210922A050895EF92FF920F931F93C5
:10118000CF93DF937C018B01EA01452B39F0F80105
:1011900081918F01F70109952197C9F7E6E0CDB755
:1011A000DEB70C945292EF92FF920F931F93CF935E
:1011B000DF937C018B01EA01452B41F0F8010F5FC1
:1011C0001F4F8491F70109952197C1F7E6E0CDB74C
:1011D000DEB70C9452920F931F93CF938C01C62FBE
:1011E000161634F480E2F8010995C1501C16D4F3A8
:1011F000CF911F910F9108950F931F93CF938C015F
:10120000C62F161634F480E3F8010995C1501C1658
:10121000D4F3CF911F910F910895A5E3B0E0E3E1DE
:10122000F9E80C942A922E96EEADFFAD2E97882405
:101230009924540180912405882321F42C961FAE13
:101240001EAE2C97AEE44A2E512C4C0E5D1E6F0143
:10125000B60105C0153239F00894C11CD11CF60145
:1012600014911123B9F7A601461B570B31F02C96A8
:101270008EAD9FAD2C970E94D388112309F46AC2CA
:101280000894C11CD11CFF24FDA6FCA6FFEFEF2E85
:10129000F9A6F6010894C11CD11C1491153721F050
:1012A000812F80628837B1F4F0FE0AC0F20124E099
:1012B00030E0420E531E80809180A280B3800AC02D
:1012C000F20142E050E0440E551E808191814C01B4
:1012D000AA24BB24103221F489A58823D1F61DC08D
:1012E000133219F458E0F52AD4CF1A3211F01D3216
:1012F00091F41A3259F4F20182E090E0480E591E3E
:10130000E081ECA7EE232CF6E195ECA790E1F92A19
:10131000AFEDFA22BECF1B3211F419A7BACF1E329D
:10132000C1F5F6010894C11CD11C14911A3279F44C
:10133000F20122E030E0420E531E408151813FEF26
:101340004F3F530714F44FEF5FEFE42EA2CF40E07E
:1013500050E0812F80538A30A0F4CA01E3E0880F67
:10136000991FEA95E1F7840F951F480F591F410F08
:10137000511D40535040F6010894C11CD11C1491DA
:10138000E8CF8FEF4F3F580714F44FEF5FEFE42E95
:1013900085CF103329F4F4FC7CCF90E2F92A79CF81
:1013A000812F81538930D8F440E050E0CA0173E0C6
:1013B000880F991F7A95E1F7840F951F480F591FE1
:1013C000410F511D40535040F6010894C11CD11CDF
:1013D0001491812F80538A3048F34CA75FCF183681
:1013E00019F4A4E0FA2A55CF1C3619F4B1E0FB2A0F
:1013F00050CF133661F43E010894611C711CF20158
:1014000022E030E0420E531E808189833CC11434B7
:1014100021F0143611F0193651F5143411F431E07D
:10142000F32AF0FE0AC0F20144E050E0440E551EDB
:1014300080809180A280B3800CC0F20182E090E0B5
:10144000480E591E808191814C01AA2497FCA094DA
:10145000BA2CB7FE0AC0B094A09490948094811CDA
:10146000911CA11CB11C8DE289A70AE06FC01F343A
:1014700011F01F3631F41F3411F491E0F92A08E01D
:1014800064C0103779F4F201A2E0B0E04A0E5B1EAE
:10149000808191814C01AA24BB2400E1B0E4FB2AA5
:1014A00018E753C01337C1F5F20122E030E0420ED5
:1014B000531E608071806114710489F43E010894A8
:1014C000611C711C88E289838EE6F301818385E7C4
:1014D0008B838CE68C838D8389E28E831F82E7FC6D
:1014E00013C08E2D992787FD9095AC0160E070E0C8
:1014F000C3010E94EE8F009729F0382E3618E314AE
:101500000CF0C3C03E2CC1C0F30101900020E9F7EC
:1015100031973E2E3618B9C0153511F0153731F414
:10152000153511F4F1E0FF2A0AE00FC0183519F063
:10153000183709F0A0C000E1F3FE07C08114910440
:10154000A104B10411F020E4F22A19A6EDA6E7FCEB
:1015500002C03FEDF32269E2662E712C6C0E7D1EF7
:1015600081149104A104B10421F44DA5442309F48C
:101570007BC0802F9927AA27BB278EA79FA7A8AB40
:10158000B9AB202E332490E0891690E0990691E0C3
:10159000A90690E0B90648F0C501B4012EA53FA503
:1015A00048A959A90E94ED9117C0AFEF8A1691047E
:1015B000A104B10449F040F0C401B1010E94C691F8
:1015C0009B014427552708C0882D602F0E94BA919F
:1015D000282F3327442755272AAB3BAB4CAB5DABB9
:1015E0000A3059F48AA9880F880F880F9AA9990F91
:1015F000890F382D381B832F10C0003139F48AA988
:101600008295807F482D481B842F07C08AA9880FA8
:10161000880F880F582D581B852F90E02EA53FA5C9
:1016200048A959A982169306A406B50608F091E0C8
:101630008AA89BA8ACA8BDA88A3010F4805D04C01D
:10164000895A183509F48F7DD3018E933D01992372
:1016500009F099CF083041F4F3FE06C0803321F041
:1016600080E3FD0182933F01CE010196382E3618AA
:10167000F8E23F0E0BC0112309F46CC03E01089440
:10168000611C711C198351E0352E19A6032D2DA460
:10169000231827FC222489A5882311F00F5F02C09C
:1016A000F6FC0E5F020DEF2CFF24C70180739070D3
:1016B000892B49F48CA5801B682F2C968EAD9FAD8D
:1016C0002C970E94EB8889A5882331F041E050E0F7
:1016D000BE01675D7F4F0AC0E6FE0EC080E38AA7A9
:1016E0001BA742E050E0BE01665D7F4F2C968EAD99
:1016F0009FAD2C970E94BC88C70180739070809723
:1017000049F48CA5801B682F2C968EAD9FAD2C972D
:101710000E94FC88622D2C968EAD9FAD2C970E9466
:10172000FC88832D992787FD9095AC01B3012C96F9
:101730008EAD9FAD2C970E94BC88E4FE89CD2CA570
:10174000201B2CA7622F2C968EAD9FAD2C970E944C
:10175000EB887ECDE2E1CB5C0C944692982F809191
:10176000B60B883A50F48091B60BE82FFF27E3566A
:10177000F54F93838F5F8093B60B0895982F8091D8
:10178000B60B883A58F48091B60BE82FFF27E35642
:10179000F54F906893838F5F8093B60B0895982FD1
:1017A00080912505882321F0892F0E94BE8B089502
:1017B000892F0E94AE8B0895883A10F48093B60B5F
:1017C000089580E090E2E0EAFAE091938F5F883A32
:1017D000E0F308954FB721E830E0F8948091C90014
:1017E0008F778093C9008091C9008F7B8093C90057
:1017F0008091C9008F7D8093C9005A9A52985B9A54
:10180000539A832F99278093CD002093CC00809109
:10181000C80082608093C80088E18093C9008091ED
:10182000CA008F778093CA008091CA008F7B809313
:10183000CA008091CA008F7D8093CA008091CA003F
:101840008F7E8093CA008091CA00877F8093CA00F0
:101850008091C90084608093C9008091CA0084602F
:101860008093CA008091CA0082608093CA008091F0
:10187000C90081608093C9008091C80087FF03C0C0
:101880008091CE00F9CF8091C90080688093C90013
:101890004FBF3CE73093190A2DE72093440A8EE8A6
:1018A00080931A0A1092360A1092350A10921F0A73
:1018B00080EE80931C0A3093710A20939C0A109248
:1018C0007D0A10927C0A10927F0A10927E0A109272
:1018D000810A1092800A84EF91E090937B0A8093B2
:1018E0007A0A9093790A8093780A9093770A809382
:1018F000760A1092730A89E88093720A10929A0A03
:1019000010929B0A80E98093740A3093490B2093CC
:10191000740B10924B0B8AE880934A0B1092510B78
:101920001092500B10924F0B1092530B1092540BBD
:101930001092550B1092560B1092580B1092590B97
:1019400010925A0B10925B0B10925F0B10925E0B71
:1019500010925D0B10925C0B80EA80934C0B3093DD
:10196000450A2093700A1092470A8DE88093460A30
:1019700010926F0A80ED8093480A8BE780939D0A4E
:1019800080E880939E0A10929F0A80911F0A90E23D
:10199000E0EAFAE091938F5F883AE0F38DE7809375
:1019A000480B0895CF93C82F80913805803879F47B
:1019B0008C2F0E94807480932705809127058823AF
:1019C00031F1C093B50B809127058F5F16C08F371B
:1019D000F1F48091AE0B882329F48C2F80958F70C1
:1019E0008093AE0B0E94897380939F0A8DE99AE0E1
:1019F00090932905809328058DEA8093270580918F
:101A0000C9008F7E8093C90082E080932605C09331
:101A10003805CF91089530912605332331F0809118
:101A200026058150809326050895809127058823F7
:101A300081F14091270590913905413091F4292F8A
:101A4000309339058091C90080618093C9008091ED
:101A50002505882319F03093250510C040932505EE
:101A60000DC0E0912805F09129058191F093290599
:101A7000E0932805282F980F909339058091C8008E
:101A800085FFFCCF2093CE00809127058150809365
:101A9000270508952FB740E0F894E0E0F0E081E2F8
:101AA000809357009491E2E0F0E0809357003491E6
:101AB000E4E0F0E08093570084912FBF9E3199F4C9
:101AC000363941F4893011F441E00DC08A3059F4BF
:101AD00042E009C0373939F4863011F443E003C0DD
:101AE000853009F444E0842F992708959FB7F8942E
:101AF0008091C900877F8093C9008091C9008F7E43
:101B00008093C9008091C9008F778093C90080912C
:101B1000C9008F7B8093C9008091C9008F7D80931D
:101B2000C90052985A9A53985B9A9FBF08951F9381
:101B3000CF93DF93182F80912405882309F4A7C041
:101B40008091D102181709F4A2C08091230588233F
:101B500021F40E944A8D8093230582ED91E09093B9
:101B600039018093380189E791E19F938F93C0E613
:101B7000D5E1DF93CF93E0913D05F0913E050995C6
:101B80000F900F900F900F90812F9927AA27BB27B6
:101B9000FC01099778F5E554FF4F20913D05309100
:101BA0003E050C94619285E791E102C08CE691E1DB
:101BB0009F938F93DF93CF93F901099527C087E611
:101BC00091E1F6CF8FE591E1F3CF87E591E19F9326
:101BD0008F93DF93CF93F901099588ED91E090936E
:101BE00039018093380112C082E591E1E1CF86E8A6
:101BF00091E1DECF8CE891E19F938F93DF93CF93B8
:101C0000E0913D05F0913E05099510E00F900F9091
:101C10000F900F9080912305843011F0823011F5E0
:101C20000E94768D812F8150833018F40E947F6F3F
:101C30002CC0143019F40E943E8627C0183019F4C5
:101C40000E94A68222C0153019F40E9473841DC020
:101C5000163019F40E94EA8B18C01730B1F40E94B4
:101C6000598113C0112389F082EA91E19F938F93E8
:101C700080E695E19F938F93E0913D05F0913E05BD
:101C800009950F900F900F900F901093D102DF9154
:101C9000CF911F9108950F931F9381E080932405A6
:101CA0004091D002E2E0F1E120E030E05FE4849195
:101CB00099272F5F3F4F829FB001839F700D929FA6
:101CC000700D112446275150319657FFF0CF4093A5
:101CD000D002EAEDF0E120E030E057E2849199276C
:101CE0002F5F3F4F829FB001839F700D929F700DB9
:101CF000112446275150319657FFF0CF4093D00220
:101D000080912305882321F40E944A8D8093230526
:101D10008091D002833459F088E190E029E20FB637
:101D2000F894A895809360000FBE209360008DE02A
:101D300099E890933E0580933D050E944A0985E607
:101D400090E09F938F938AE590E09F938F931F92EB
:101D50001F92809101016AE00E94BA91892F992710
:101D60009F938F93809101010E94BA9199279F932D
:101D70008F938DEB91E19F938F9300E615E11F9375
:101D80000F93E0913D05F0913E05099582E091E1C8
:101D90009F938F931F930F93E0913D05F0913E0524
:101DA00009958AED90E19F938F931F930F93E09194
:101DB0003D05F0913E0509950E944A0983EC809308
:101DC000810080916F00806280936F008DB79EB715
:101DD00046968DBF1F910F9108958091EC078D332A
:101DE00038F080918D0987FD03C08CE38093EC0768
:101DF00080919B07882331F08055853618F08FE756
:101E000080939B07089580912405882309F477C067
:101E100080913A05815080933A05882309F053C098
:101E200089E180933A058091EC078E3338F08091F8
:101E30008D0987FD03C08DE38093EC078091090431
:101E4000823820F58091D2039091D303805D974032
:101E500020F08091180A843620F410923C051092EC
:101E60003B0580913B0590913C05009739F1019726
:101E700090933C0580933B05419728F180918D0913
:101E800084FF21C08091D00384601BC0809109042D
:101E9000853BC8F09091EC0784E1989FC001112424
:101EA000409620913B0530913C052817390730F4C6
:101EB0002F5F3F4F30933C0520933B058091D0032B
:101EC0008B7F8093D0039091D102963019F40E94B9
:101ED0000B8D0FC08091D502882321F08150809313
:101EE000D50208958BE48093D502943011F40E94BA
:101EF0006F888091D002833411F0109224050895E8
:101F00001F920F920FB60F9211242F933F934F936E
:101F10005F936F937F938F939F93AF93BF93EF9351
:101F2000FF932091CE008091E0028823B1F02093AE
:101F3000C6008091E0028230B9F52F3FA9F58FEFFE
:101F400094E3ACE0B0E0C297A109B109B7FFFBCFC1
:101F5000809180058093CE0027C09091D102892F77
:101F60008150833020F4822F0E94DA6F1DC094309C
:101F700021F4822F0E94A28617C0983021F4822F6C
:101F80000E94A78211C0953021F4822F0E94E18522
:101F90000BC0963021F4822F0E94D28C05C097305E
:101FA00019F4822F0E94B681FF91EF91BF91AF91FA
:101FB0009F918F917F916F915F914F913F912F9161
:101FC0000F900FBE0F901F901895FB01DC0102C00F
:101FD00005900D9241505040D8F70895FC014150B2
:101FE000504030F001900616D1F73197CF01089597
:101FF000882799270895FB01DC0102C001900D920A
:1020000041505040D8F70895A0E0B0E0EAE0F0E990
:102010000C9432926C017B01EA01590121978FEFF8
:10202000CF3FD80789F086010894C11CD11CC70195
:102030000894E11CF11CF5010995F80180832197B2
:10204000FFEFCF3FDF0779F7EAE0CDB7DEB70C94BB
:102050004E92CF92DF92EF92FF920F931F937C01EB
:102060006B01FB010995082FC7010196F60109953F
:10207000182FC8011F910F91FF90EF90DF90CF9024
:102080000895A0E0B0E0E7E4F0E90C9434928C010C
:102090007B01EA01690121978FEFCF3FD80771F0EB
:1020A000F70121917F01C8010F5F1F4F622FF601D9
:1020B00009952197FFEFCF3FDF0791F7E8E0CDB714
:1020C000DEB70C945092CF92DF92EF92FF920F9373
:1020D0001F936C018B017A01FA010995812F9927D1
:1020E000682FC6010196F70109951F910F91FF9086
:1020F000EF90DF90CF9008955058BB27AA270ED0BD
:10210000E0C0D1D030F0D6D020F031F49F3F11F4B0
:102110001EF4C6C00EF4E095E7FBBCC0E92FE2D088
:1021200080F3BA17620773078407950718F071F4F4
:102130009EF5FAC00EF4E0950B2EBA2FA02D0B01E0
:10214000B90190010C01CA01A0011124FF27591BFC
:1021500099F0593F50F4503E68F11A16F040A22F02
:10216000232F342F4427585FF3CF46953795279573
:10217000A795F0405395C9F77EF41F16BA0B620B72
:10218000730B840BBAF09150A1F0FF0FBB1F661FB9
:10219000771F881FC2F70EC0BA0F621F731F841FFC
:1021A00048F4879577956795B795F7959E3F08F022
:1021B000B3CF9395880F08F09927EE0F97958795E1
:1021C000089598D088F09F5790F0B92F9927B7516C
:1021D000A0F0D1F0660F771F881F991F1AF0BA95EB
:1021E000C9F712C0B13081F09FD0B1E008959CC012
:1021F000672F782F8827B85F39F0B93FCCF38695E1
:1022000077956795B395D9F73EF49095809570953D
:1022100061957F4F8F4F9F4F0895E89409C097FBBA
:102220003EF490958095709561957F4F8F4F9F4FAD
:102230009923A9F0F92F96E9BB279395F6958795F1
:1022400077956795B795F111F8CFFAF4BB0F11F4B4
:1022500060FF1BC06F5F7F4F8F4F9F4F16C088235B
:1022600011F096E911C0772321F09EE8872F762F91
:1022700005C0662371F096E8862F70E060E02AF0D2
:102280009A95660F771F881FDAF7880F96958795BE
:1022900097F9089597F99F6780E870E060E00895E6
:1022A0009FEF80EC089500240A941616170618066E
:1022B0000906089500240A9412161306140605064A
:1022C0000895092E0394000C11F4882352F0BB0FDB
:1022D00040F4BF2B11F460FF04C06F5F7F4F8F4F3E
:1022E0009F4F089557FD9058440F551F59F05F3F79
:1022F00071F04795880F97FB991F61F09F3F79F028
:1023000087950895121613061406551FF2CF4695A9
:10231000F1DF08C0161617061806991FF1CF86952B
:102320007105610508940895E894BB27662777270F
:10233000CB0197F90895629FD001739FF001829FAE
:10234000E00DF11D649FE00DF11D929FF00D839F44
:10235000F00D749FF00D659FF00D9927729FB00DE1
:10236000E11DF91F639FB00DE11DF91FBD01CF01F4
:1023700011240895991B79E004C0991F961708F05D
:10238000961B881F7A95C9F780950895AA1BBB1BD9
:1023900051E107C0AA1FBB1FA617B70710F0A61B65
:1023A000B70B881F991F5A95A9F780959095BC0186
:1023B000CD01089597FB092E07260AD077FD04D09A
:1023C000E5DF06D000201AF4709561957F4F0895DF
:1023D000F6F7909581959F4F0895A1E21A2EAA1BBA
:1023E000BB1BFD010DC0AA1FBB1FEE1FFF1FA217C5
:1023F000B307E407F50720F0A21BB30BE40BF50BC2
:10240000661F771F881F991F1A9469F7609570954A
:10241000809590959B01AC01BD01CF01089597FB7C
:10242000092E05260ED057FD04D0D7DF0AD0001C98
:1024300038F450954095309521953F4F4F4F5F4F61
:102440000895F6F790958095709561957F4F8F4F21
:102450009F4F08952F923F924F925F926F927F927B
:102460008F929F92AF92BF92CF92DF92EF92FF92A4
:102470000F931F93CF93DF93CDB7DEB7CA1BDB0B50
:102480000FB6F894DEBF0FBECDBF09942A883988F5
:1024900048885F846E847D848C849B84AA84B984FC
:1024A000C884DF80EE80FD800C811B81AA81B98108
:1024B000CE0FD11D0FB6F894DEBF0FBECDBFED011C
:1024C0000895EE0FFF1F0590F491E02D0994FFCFC2
:1024D0005E0A010164FF010020FFFFC01FC01F0151
:1024E0000101737373FF03007D0000C409C4096414
:1024F00000104E6F726D616C0051756164726F00F7
:102500000000000000006400D20101200B05000063
:10251000ECFF00020406070808080706040200FE94
:10252000FCFAF9F8F8F8F9FAFCFE000204060708CC
:10253000086440415A46553264640A02969696965B
:102540000840403A10FB30380132FF03780090D049
:10255000030090D0030032002064FFFF64200B0AC8
:102560000D0B0C0E0B0F100B11FA20680101011559
:102570002D3D2E4D5F4B2E3D2D00202020010000D3
:10258000000000566F6C7461676520202056202083
:1025900001000000000143757272656E74202020F6
:1025A00041202001000000000143617061636974F3
:1025B000792020416820010000000002416C74690C
:1025C0007475646520206D20200100000000004328
:1025D0006F6D70617373202020B020200100000017
:1025E000000053617473202020202020202020012F
:1025F0000000000000537065656420202020206DDD
:102600002F7301000000000044697374616E6365FC
:1026100020206D2020010000000000486F6D652D16
:102620004469722020B020200100000000006D618C
:10263000782E54656D702E20B043200100000000FC
:10264000004D61676E2E6669656C6425202001006F
:1026500000000000566172696F2020202020202099
:10266000200100000000004572726F72436F6465C4
:1026700020202020010000000000667265692020F3
:102680002020202020202001000000000366726529
:1026900069202020202020202020010000000003AD
:0626A00070FF01010F6450
:00000001FF
/branches/v0.90e_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.90e_Ernstl_4-Motoren+Sexpander/Settings.h
--- v0.90e_Ernstl_4-Motoren+Sexpander/Spektrum.c (nonexistent)
+++ v0.90e_Ernstl_4-Motoren+Sexpander/Spektrum.c (revision 2299)
@@ -0,0 +1,463 @@
+/*#######################################################################################
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit
+#######################################################################################*/
+
+#include "Spektrum.h"
+#include "main.h"
+
+unsigned char SpektrumTimer = 0;
+
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander
+signed char s_exdata[11]; // Data for Spektrum-Expander
+
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in
+{
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3;
+ else PPM_diff[channel] = 0;
+ PPM_in[channel] = value;
+}
+#endif
+
+//--------------------------------------------------------------//
+//--------------------------------------------------------------//
+/*
+void SpektrumBinding(void)
+{
+ unsigned int timerTimeout = SetDelay(10000); // Timeout 10 sec.
+ unsigned char connected = 0;
+ unsigned int delaycounter;
+
+ UCSR1B &= ~(1 << RXCIE1); // disable rx-interrupt
+ UCSR1B &= ~(1<<RXEN1); // disable Uart-Rx
+ PORTD &= ~(1 << PORTD2); // disable pull-up
+
+ printf("\n\rPlease connect Spektrum receiver for binding NOW...");
+
+ while(!CheckDelay(timerTimeout))
+ {
+ if (PIND & (1 << PORTD2)) { timerTimeout = SetDelay(90); connected = 1; break; }
+ }
+
+ if (connected)
+ {
+
+ printf("ok.\n\r");
+ DDRD |= (1 << DDD2); // Rx as output
+
+ while(!CheckDelay(timerTimeout)); // delay after startup of RX
+ for (delaycounter = 0; delaycounter < 100; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD &= ~(1 << PORTD2);
+
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD |= (1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 10; delaycounter++) PORTD &= ~(1 << PORTD2);
+ for (delaycounter = 0; delaycounter < 400; delaycounter++) PORTD |= (1 << PORTD2);
+
+ }
+ else
+ { printf("Timeout.\n\r");
+
+
+ }
+
+ DDRD &= ~(1 << DDD2); // RX as input
+ PORTD &= ~(1 << PORTD2);
+
+ SpektrumUartInit(); // init Uart again
+}
+*/
+//############################################################################
+// USART1 initialisation from killagreg
+void SpektrumUartInit(void)
+//############################################################################
+ {
+ // -- Start of USART1 initialisation for Spekturm seriell-mode
+ // USART1 Control and Status Register A, B, C and baud rate register
+ uint8_t sreg = SREG;
+
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
+
+ // disable all interrupts before reconfiguration
+ cli();
+ // disable RX-Interrupt
+ UCSR1B &= ~(1 << RXCIE1);
+ // disable TX-Interrupt
+ UCSR1B &= ~(1 << TXCIE1);
+ // disable DRE-Interrupt
+ UCSR1B &= ~(1 << UDRIE1);
+ // set direction of RXD1 and TXD1 pins
+ // set RXD1 (PD2) as an input pin
+ PORTD |= (1 << PORTD2);
+ DDRD &= ~(1 << DDD2);
+
+ // set TXD1 (PD3) as an output pin
+ PORTD |= (1 << PORTD3);
+ DDRD |= (1 << DDD3);
+
+ // USART0 Baud Rate Register
+ // set clock divider
+ UBRR1H = (uint8_t)(ubrr>>8);
+ UBRR1L = (uint8_t)ubrr;
+ // enable double speed operation
+ UCSR1A |= (1 << U2X1);
+ // enable receiver and transmitter
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1);
+
+ UCSR1B = (1<<RXEN1);
+ // set asynchronous mode
+ UCSR1C &= ~(1 << UMSEL11);
+ UCSR1C &= ~(1 << UMSEL10);
+ // no parity
+ UCSR1C &= ~(1 << UPM11);
+ UCSR1C &= ~(1 << UPM10);
+ // 1 stop bit
+ UCSR1C &= ~(1 << USBS1);
+ // 8-bit
+ UCSR1B &= ~(1 << UCSZ12);
+ UCSR1C |= (1 << UCSZ11);
+ UCSR1C |= (1 << UCSZ10);
+ // flush receive buffer explicit
+ while(UCSR1A & (1<<RXC1)) UDR1;
+ // enable RX-interrupts at the end
+ UCSR1B |= (1 << RXCIE1);
+ // -- End of USART1 initialisation
+ // restore global interrupt flags
+
+ SREG = sreg;
+ return;
+ }
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// + Copyright (c) Rainer Walther
+// + RC-routines from original MK rc.c (c) H&I
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2
+// + only for non-profit use
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+//
+// 20080808 rw Modified for Spektrum AR6100 (PPM)
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only)
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels)
+// Replace AR6100-coding with original composit-signal routines
+//
+// ---
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben!
+// Binding is not implemented. Bind with external Receiver.
+// Servo output J3, J4, J5 not serviced
+//
+// Anschuß Spektrum Receiver
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!)
+// Schwarz: GND
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker
+//
+// ---
+// Satellite-Reciever connected on USART1:
+//
+// DX7/DX6i: One data-frame at 115200 baud every 22ms.
+// DX7se: One data-frame at 115200 baud every 11ms.
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data (FLT-Mode)
+// byte5: and byte6: channel data (Roll)
+// byte7: and byte8: channel data (Nick)
+// byte9: and byte10: channel data (Gier)
+// byte11: and byte12: channel data (Gear Switch)
+// byte13: and byte14: channel data (Gas)
+// byte15: and byte16: channel data (AUX2)
+//
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9
+// 1st Frame:
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data
+// byte5: and byte6: channel data
+// byte7: and byte8: channel data
+// byte9: and byte10: channel data
+// byte11: and byte12: channel data
+// byte13: and byte14: channel data
+// byte15: and byte16: channel data
+// 2nd Frame:
+// byte1: unknown
+// byte2: unknown
+// byte3: and byte4: channel data
+// byte5: and byte6: channel data
+// byte7: and byte8: 0xffff
+// byte9: and byte10: 0xffff
+// byte11: and byte12: 0xffff
+// byte13: and byte14: 0xffff
+// byte15: and byte16: 0xffff
+//
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as:
+//
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
+//
+// 0 means a '0' bit
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only)
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter)
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel
+//
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+#define MIN_FRAMEGAP 68 // 7ms
+#define MAX_BYTEGAP 3 // 310us
+
+
+//############################################################################
+// Wird im UART-Interrupt aufgerufen
+//############################################################################
+void SpektrumParser(unsigned char c)
+{
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0;
+ unsigned int Channel, index = 0;
+ signed int signal = 0, tmp;
+ int bCheckDelay;
+// c = UDR1; // get data byte
+ if(ReSync == 1)
+ {
+ // wait for beginning of new frame
+ ReSync = 0;
+ SpektrumTimer = MIN_FRAMEGAP;
+ FrameCnt = 0;
+ Sync = 0;
+ ByteHigh = 0;
+ }
+ else
+ {
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer);
+ if ( Sync == 0 )
+ {
+ if(bCheckDelay)
+ {
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden
+ // Zeichen ignorieren, da Bedeutung unbekannt
+ Sync = 1;
+ FrameCnt ++;
+ SpektrumTimer = MAX_BYTEGAP;
+ }
+ else
+ {
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause
+ // warten auf erstes Sync-Zeichen
+ SpektrumTimer = MIN_FRAMEGAP;
+ FrameCnt = 0;
+ Sync = 0;
+ ByteHigh = 0;
+ }
+ }
+ else if((Sync == 1) && !bCheckDelay)
+ {
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt
+ Sync = 2;
+ FrameCnt ++;
+ SpektrumTimer = MAX_BYTEGAP;
+ }
+ else if((Sync == 2) && !bCheckDelay)
+ {
+ SpektrumTimer = MAX_BYTEGAP;
+ // Datenbyte high
+ ByteHigh = c;
+ if (FrameCnt == 2)
+ {
+ // is 1st Byte of Channel-data
+ // Frame 1 with Channel 1-7 comming next
+ Frame2 = 0;
+ if(ByteHigh & 0x80)
+ {
+ // DS9: Frame 2 with Channel 8-9 comming next
+ Frame2 = 1;
+ }
+ }
+ Sync = 3;
+ FrameCnt ++;
+ }
+ else if((Sync == 3) && !bCheckDelay)
+ {
+ // Datenbyte low
+ // High-Byte for next channel comes next
+ SpektrumTimer = MAX_BYTEGAP;
+ Sync = 2;
+ FrameCnt ++;
+ Channel = ((unsigned int)ByteHigh << 8) | c;
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM)
+ {
+ signal = Channel & 0x3ff;
+ signal -= 0x200; // Offset, range 0x000..0x3ff?
+ signal = signal/3; // scaling to fit PPM resolution
+ index = (ByteHigh >> 2) & 0x0f;
+ }
+ else
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES)
+ {
+ signal = Channel & 0x7ff;
+ signal -= 0x400; // Offset, range 0x000..0x7ff?
+ signal = signal/6; // scaling to fit PPM resolution
+ index = (ByteHigh >> 3) & 0x0f;
+ }
+ else
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES)
+ {
+ signal = Channel & 0x3ff;
+ signal -= 360; // Offset, range 0x000..0x3ff?
+ signal = signal/2; // scaling to fit PPM resolution
+ index = (ByteHigh >> 2) & 0x0f;
+ }
+
+ index++;
+ if(index < 13)
+ {
+ // Stabiles Signal
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4)
+ else if (index == 4) index = 2;
+#endif
+ if(abs(signal - PPM_in[index]) < 6)
+ {
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe
+ {
+ if(SenderOkay < 200) SenderOkay += 10;
+ else
+ {
+ SenderOkay = 200;
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
+ }
+ }
+ }
+ tmp = (3 * (PPM_in[index]) + signal) / 4;
+ if(tmp > signal+1) tmp--; else
+ if(tmp < signal-1) tmp++;
+
+#ifdef RECEIVER_SPEKTRUM_DX7EXP
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
+ {
+ if (signal > 100) // SYNC received
+ {
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check
+ {
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5)
+ s_update(6,s_exdata[3]); // Elevator (CH6)
+ s_update(11,s_exdata[4]); // Aileron (CH11)
+ s_update(12,s_exdata[5]); // Rudder (CH12)
+
+ if (s_excnt == 9) // New Mode (12 Channels)
+ {
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8)
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8)
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit
+ s_update(10,s_exdata[6]); // AUX2 (CH10)
+ }
+ }
+
+ s_excnt = 0; // Reset bitcounter
+ s_exparity = 0; // Reset parity bit
+ }
+
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection
+ if (signal < -100)
+ {
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
+ }
+
+ }
+
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4)
+ else if (index == 5) s_update(7,signal); // Gear (CH7)
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9)
+
+#elif defined RECEIVER_SPEKTRUM_DX8EXP
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
+ {
+ if (signal > 100) // SYNC received
+ {
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check
+ {
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5)
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5)
+
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6)
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6)
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6)
+
+
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9)
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9)
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9)
+
+ s_update(10,s_exdata[5]); // Gear (CH10)
+ s_update(12,s_exdata[4]); // Mix (CH12)
+ }
+
+ s_excnt = 0; // Reset bitcounter
+ s_exparity = 0; // Reset parity bit
+ }
+
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection
+ if (signal < -100)
+ {
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
+ }
+
+ }
+
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4)
+ else if (index == 7) s_update(7,signal); // R Trim (CH7)
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8)
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11)
+
+#else
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
+ else PPM_diff[index] = 0;
+ PPM_in[index] = tmp;
+#endif
+ }
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren
+ }
+ else
+ {
+ // hier stimmt was nicht: neu synchronisieren
+ ReSync = 1;
+ FrameCnt = 0;
+ Frame2 = 0;
+ // new frame next, nach fruehestens 7ms erwartet
+ SpektrumTimer = MIN_FRAMEGAP;
+ }
+
+ // 16 Bytes eingetroffen -> Komplett
+ if(FrameCnt >= 16)
+ {
+ // Frame complete
+ if(Frame2 == 0)
+ {
+ // Null bedeutet: Neue Daten
+ // nur beim ersten Frame (CH 0-7) setzen
+ if(!ReSync) NewPpmData = 0;
+ }
+ FrameCnt = 0;
+ Frame2 = 0;
+ Sync = 0;
+ SpektrumTimer = MIN_FRAMEGAP;
+ }
+ }
+}
+
+
/branches/v0.90e_Ernstl_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.90e_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/ccUe4KfW.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccUe4KfW.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccUe4KfW.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccUe4KfW.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccUe4KfW.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccUe4KfW.s:15 .bss:00000000 s_exparity
C:\Temp/ccUe4KfW.s:21 .bss:00000001 s_excnt
C:\Temp/ccUe4KfW.s:27 .bss:00000002 SpektrumTimer
C:\Temp/ccUe4KfW.s:32 .text:00000000 s_update
C:\Temp/ccUe4KfW.s:99 .text:00000074 SpektrumUartInit
.bss:00000003 Sync.0
C:\Temp/ccUe4KfW.s:170 .bss:00000004 FrameCnt.1
C:\Temp/ccUe4KfW.s:171 .bss:00000005 ByteHigh.2
C:\Temp/ccUe4KfW.s:176 .data:00000000 ReSync.3
C:\Temp/ccUe4KfW.s:172 .bss:00000006 Frame2.4
C:\Temp/ccUe4KfW.s:182 .text:0000012a SpektrumParser
*COM*:0000000b s_exdata
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SenderOkay
PPM_in
__divmodhi4
PPM_diff
EE_Parameter
NewPpmData
__epilogue_restores__
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccyqySIY.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccyqySIY.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccyqySIY.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccyqySIY.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccyqySIY.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccyqySIY.s:14 .data:00000000 AdReady
C:\Temp/ccyqySIY.s:19 .data:00000001 AnalogOffsetGier
C:\Temp/ccyqySIY.s:24 .data:00000002 AnalogOffsetRoll
C:\Temp/ccyqySIY.s:29 .data:00000003 AnalogOffsetNick
C:\Temp/ccyqySIY.s:36 .bss:00000000 ZaehlMessungen
C:\Temp/ccyqySIY.s:42 .bss:00000002 VarioMeter
C:\Temp/ccyqySIY.s:48 .bss:00000004 ExpandBaro
C:\Temp/ccyqySIY.s:54 .data:00000004 MessLuftdruck
C:\Temp/ccyqySIY.s:61 .bss:00000005 SummenHoehe
C:\Temp/ccyqySIY.s:67 .data:00000006 Luftdruck
C:\Temp/ccyqySIY.s:74 .bss:00000009 AdWertAccHoch
C:\Temp/ccyqySIY.s:80 .bss:0000000b AdWertAccNick
C:\Temp/ccyqySIY.s:86 .bss:0000000d AdWertAccRoll
C:\Temp/ccyqySIY.s:92 .bss:0000000f AdWertGier
C:\Temp/ccyqySIY.s:98 .bss:00000011 AdWertRoll
C:\Temp/ccyqySIY.s:104 .bss:00000013 AdWertNick
C:\Temp/ccyqySIY.s:110 .data:0000000a HiResRoll
C:\Temp/ccyqySIY.s:115 .data:0000000c HiResNick
C:\Temp/ccyqySIY.s:122 .bss:00000015 AdWertGierFilter
C:\Temp/ccyqySIY.s:128 .bss:00000017 AdWertRollFilter
C:\Temp/ccyqySIY.s:134 .bss:00000019 AdWertNickFilter
C:\Temp/ccyqySIY.s:140 .data:0000000e UBat
C:\Temp/ccyqySIY.s:145 .text:00000000 ADC_Init
C:\Temp/ccyqySIY.s:159 .progmem.data:00000000 __c.13
C:\Temp/ccyqySIY.s:163 .progmem.data:00000002 __c.14
C:\Temp/ccyqySIY.s:168 .text:0000000c SucheLuftruckOffset
*COM*:00000001 DruckOffsetSetting
C:\Temp/ccyqySIY.s:295 .progmem.data:00000004 __c.12
C:\Temp/ccyqySIY.s:300 .text:00000110 SucheGyroOffset
.bss:0000001b kanal.0
C:\Temp/ccyqySIY.s:503 .bss:0000001c state.1
C:\Temp/ccyqySIY.s:504 .bss:0000001d subcount.2
C:\Temp/ccyqySIY.s:505 .bss:0000001e gier1.3
C:\Temp/ccyqySIY.s:506 .bss:00000020 roll1.4
C:\Temp/ccyqySIY.s:507 .bss:00000022 nick1.5
C:\Temp/ccyqySIY.s:508 .bss:00000024 nick_filter.6
C:\Temp/ccyqySIY.s:509 .bss:00000026 roll_filter.7
C:\Temp/ccyqySIY.s:510 .bss:00000028 accy.8
C:\Temp/ccyqySIY.s:511 .bss:0000002a accx.9
C:\Temp/ccyqySIY.s:512 .bss:0000002c tmpLuftdruck.10
C:\Temp/ccyqySIY.s:513 .bss:00000030 messanzahl_Druck.11
C:\Temp/ccyqySIY.s:517 .text:000002de __vector_24
*COM*:00000002 Aktuell_ay
*COM*:00000002 Aktuell_ax
*COM*:00000002 Aktuell_az
*COM*:00000002 StartLuftdruck
*COM*:00000002 Aktuell_Nick
*COM*:00000002 Aktuell_Roll
*COM*:00000002 Aktuell_Gier
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
GetParamByte
Delay_ms_Mess
uart_putchar
_printf_P
SetParamByte
EE_Parameter
VersionInfo
SetDelay
twi_state
BLFlags
CheckDelay
__tablejump2__
NeutralAccY
NeutralAccX
__udivmodhi4
NeutralAccZ
modell_fliegt
Mess_Integral_Hoch
PlatinenVersion
AdNeutralNick
AdNeutralRoll
__mulsi3
HoehenWert
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccuTWomb.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccuTWomb.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccuTWomb.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccuTWomb.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccuTWomb.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccuTWomb.s:15 .bss:00000000 update_timer
C:\Temp/ccuTWomb.s:20 .text:00000000 Capacity_Init
*COM*:00000007 Capacity
.bss:00000002 SubCounter.0
C:\Temp/ccuTWomb.s:40 .bss:00000004 CurrentOffset.1
C:\Temp/ccuTWomb.s:41 .bss:00000006 SumCurrentOffset.2
C:\Temp/ccuTWomb.s:45 .text:0000002e Capacity_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SetDelay
CheckDelay
Motor
UBat
__udivmodhi4
/branches/v0.90e_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.90e_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.90e_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/cceNSn2d.s:3 *ABS*:0000003f __SREG__
C:\Temp/cceNSn2d.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cceNSn2d.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cceNSn2d.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cceNSn2d.s:7 *ABS*:00000001 __zero_reg__
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_Ernstl_4-Motoren+Sexpander/eeprom.c
0,0 → 1,629
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
 
#include <avr/eeprom.h>
#include <string.h>
#include "eeprom.h"
#include "uart.h"
#include "led.h"
#include "main.h"
#include "fc.h"
#include "twimaster.h"
 
paramset_t EE_Parameter;
MixerTable_t Mixer;
uint8_t RequiredMotors;
 
 
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t i;
 
for(i=0; i<len; i++)
{
crc += pBuffer[i];
}
return crc;
}
 
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len)
{
uint8_t crc = 0xAA;
uint16_t off;
 
for(off=0; off<len; off++)
{
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));;
}
return crc;
}
 
void ParamSet_DefaultStickMapping(void)
{
EE_Parameter.Kanalbelegung[K_GAS] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_NICK] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
EE_Parameter.Kanalbelegung[K_POTI5] = 9;
EE_Parameter.Kanalbelegung[K_POTI6] = 10;
EE_Parameter.Kanalbelegung[K_POTI7] = 11;
EE_Parameter.Kanalbelegung[K_POTI8] = 12;
}
 
 
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void CommonDefaults(void)
{
EE_Parameter.Revision = EEPARAM_REVISION;
memset(EE_Parameter.Name,0,12); // delete name
if(PlatinenVersion >= 20)
{
EE_Parameter.Gyro_D = 10;
EE_Parameter.Driftkomp = 0;
EE_Parameter.GyroAccFaktor = 27;
EE_Parameter.WinkelUmschlagNick = 78;
EE_Parameter.WinkelUmschlagRoll = 78;
}
else
{
EE_Parameter.Gyro_D = 3;
EE_Parameter.Driftkomp = 32;
EE_Parameter.GyroAccFaktor = 30;
EE_Parameter.WinkelUmschlagNick = 85;
EE_Parameter.WinkelUmschlagRoll = 85;
}
EE_Parameter.GyroAccAbgleich = 32; // 1/k
EE_Parameter.BitConfig = 0; // Looping usw.
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER;
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP;
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL;//CFG3_VARIO_FAILSAFE;
EE_Parameter.Receiver = RECEIVER_HOTT;
EE_Parameter.MotorSafetySwitch = 0;
EE_Parameter.ExternalControl = 0;
 
EE_Parameter.Gas_Min = 8; // Wert : 0-32
EE_Parameter.Gas_Max = 230; // Wert : 33-247
EE_Parameter.KompassWirkung = 64; // Wert : 0-247
 
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 255; // Wert : 0-247 255 -> Poti1
EE_Parameter.Hoehe_P = 15; // Wert : 0-32
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation)
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag)
 
EE_Parameter.UserParam1 = 0; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
 
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 15; // Wert : 0-247 // Anschlag
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag
EE_Parameter.ServoNickRefresh = 4;
EE_Parameter.Servo3 = 125;
EE_Parameter.Servo4 = 125;
EE_Parameter.Servo5 = 125;
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag
EE_Parameter.ServoManualControlSpeed = 60;
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps
 
EE_Parameter.J16Bitmask = 95;
EE_Parameter.J17Bitmask = 243;
EE_Parameter.WARN_J16_Bitmask = 0xAA;
EE_Parameter.WARN_J17_Bitmask = 0xAA;
EE_Parameter.J16Timing = 40;
EE_Parameter.J17Timing = 40;
EE_Parameter.NaviOut1Parameter = 0; // Photo release in meter
EE_Parameter.LoopGasLimit = 50;
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag
EE_Parameter.LoopHysterese = 50;
 
EE_Parameter.NaviGpsModeControl = 254; // 254 -> Poti 2
EE_Parameter.NaviGpsGain = 100;
EE_Parameter.NaviGpsP = 90;
EE_Parameter.NaviGpsI = 90;
EE_Parameter.NaviGpsD = 90;
EE_Parameter.NaviGpsPLimit = 75;
EE_Parameter.NaviGpsILimit = 85;
EE_Parameter.NaviGpsDLimit = 75;
EE_Parameter.NaviGpsACC = 0;
EE_Parameter.NaviGpsMinSat = 6;
EE_Parameter.NaviStickThreshold = 8;
EE_Parameter.NaviWindCorrection = 90;
EE_Parameter.NaviAccCompensation = 42;
EE_Parameter.NaviOperatingRadius = 245;
EE_Parameter.NaviAngleLimitation = 140;
EE_Parameter.NaviPH_LoginTime = 5;
EE_Parameter.OrientationAngle = 0;
EE_Parameter.CareFreeModeControl = 0;
EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50)
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent)
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.MotorSmooth = 0;
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change
EE_Parameter.FailSafeTime = 0; // 0 = off
EE_Parameter.MaxAltitude = 150; // 0 = off
EE_Parameter.AchsKopplung1 = 125;
EE_Parameter.AchsKopplung2 = 52;
EE_Parameter.FailsafeChannel = 0;
EE_Parameter.ServoFilterNick = 0;
EE_Parameter.ServoFilterRoll = 0;
}
/*
void ParamSet_DefaultSet1(void) // sport
{
CommonDefaults();
EE_Parameter.Stick_P = 14; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 12; // Wert : 1-20
EE_Parameter.Gyro_P = 80; // Wert : 0-247
EE_Parameter.Gyro_I = 150; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 32;
EE_Parameter.CouplingYawCorrection = 1;
EE_Parameter.GyroAccAbgleich = 16; // 1/k;
EE_Parameter.DynamicStability = 100;
memcpy(EE_Parameter.Name, "Sport\0", 12);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
*/
 
/***************************************************/
/* Default Values for parameter set 1 */
/***************************************************/
void ParamSet_DefaultSet1(void) // normal
{
CommonDefaults();
EE_Parameter.Stick_P = 10; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 6; // Wert : 1-20
EE_Parameter.Gyro_P = 90; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 32;
EE_Parameter.CouplingYawCorrection = 60;
EE_Parameter.DynamicStability = 75;
memcpy(EE_Parameter.Name, "Fast",4);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
 
/***************************************************/
/* Default Values for parameter set 2 */
/***************************************************/
void ParamSet_DefaultSet2(void) // beginner
{
CommonDefaults();
EE_Parameter.Stick_P = 8; // Wert : 1-20
EE_Parameter.Stick_D = 16; // Wert : 0-20
EE_Parameter.StickGier_P = 6; // Wert : 1-20
EE_Parameter.Gyro_P = 100; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 16;
EE_Parameter.CouplingYawCorrection = 70;
EE_Parameter.DynamicStability = 70;
memcpy(EE_Parameter.Name, "Normal",6);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
/***************************************************/
/* Default Values for parameter set 3 */
/***************************************************/
void ParamSet_DefaultSet3(void) // beginner
{
CommonDefaults();
EE_Parameter.Stick_P = 6; // Wert : 1-20
EE_Parameter.Stick_D = 10; // Wert : 0-20
EE_Parameter.StickGier_P = 4; // Wert : 1-20
EE_Parameter.Gyro_P = 100; // Wert : 0-247
EE_Parameter.Gyro_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8
EE_Parameter.I_Faktor = 16;
EE_Parameter.CouplingYawCorrection = 70;
EE_Parameter.DynamicStability = 70;
memcpy(EE_Parameter.Name, "Easy", 4);
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
}
 
 
/***************************************************/
/* Read Parameter from EEPROM as byte */
/***************************************************/
uint8_t GetParamByte(uint16_t param_id)
{
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id));
}
 
/***************************************************/
/* Write Parameter to EEPROM as byte */
/***************************************************/
void SetParamByte(uint16_t param_id, uint8_t value)
{
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
}
 
/***************************************************/
/* Read Parameter from EEPROM as word */
/***************************************************/
uint16_t GetParamWord(uint16_t param_id)
{
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id));
}
 
/***************************************************/
/* Write Parameter to EEPROM as word */
/***************************************************/
void SetParamWord(uint16_t param_id, uint16_t value)
{
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value);
}
 
/***************************************************/
/* Read Parameter Set from EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber)
{
uint8_t crc;
uint16_t eeaddr;
 
// range the setnumber
if((1 > setnumber) || (setnumber > 5)) setnumber = 3;
 
// calculate eeprom addr
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1);
 
// calculate checksum from eeprom
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1);
 
// check crc
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0;
 
// check revision
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0;
 
// read paramset from eeprom
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
 
/***************************************************/
/* Write Parameter Set to EEPROM */
/***************************************************/
// number [1..5]
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber)
{
uint8_t crc;
 
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) return 0;
LIBFC_CheckSettings();
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas
{
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas
}
// update checksum
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1);
 
// write paramset to eeprom
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN);
 
// backup channel settings to separate block in eeprom
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
 
// write crc of channel block to eeprom
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung));
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc);
 
// update active settings number
SetActiveParamSet(setnumber);
LED_Init();
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
LIBFC_HoTT_Clear();
#endif
return 1;
}
// wrong revision
return 0;
}
 
/***************************************************/
/* Read MixerTable from EEPROM */
/***************************************************/
uint8_t MixerTable_ReadFromEEProm(void)
{
uint8_t crc;
 
// calculate checksum in eeprom
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1);
 
// check crc
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0;
 
// check revision
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0;
 
// read mixer table
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
 
/***************************************************/
/* Write Mixer Table to EEPROM */
/***************************************************/
uint8_t MixerTable_WriteToEEProm(void)
{
if(Mixer.Revision == EEMIXER_REVISION)
{
// update crc
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
 
// write to eeprom
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer));
return 1;
}
else return 0;
}
 
/***************************************************/
/* Default Values for Mixer Table */
/***************************************************/
void MixerTable_Default(void) // Quadro
{
uint8_t i;
 
Mixer.Revision = EEMIXER_REVISION;
// clear mixer table
for(i = 0; i < 16; i++)
{
Mixer.Motor[i][MIX_GAS] = 0;
Mixer.Motor[i][MIX_NICK] = 0;
Mixer.Motor[i][MIX_ROLL] = 0;
Mixer.Motor[i][MIX_YAW] = 0;
}
// default = Quadro
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64;
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64;
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64;
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64;
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12);
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1);
}
 
/***************************************************/
/* Get active parameter set */
/***************************************************/
uint8_t GetActiveParamSet(void)
{
uint8_t setnumber;
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET));
if(setnumber > 5)
{
setnumber = 3;
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber);
}
return(setnumber);
}
 
/***************************************************/
/* Set active parameter set */
/***************************************************/
void SetActiveParamSet(uint8_t setnumber)
{
if(setnumber > 5) setnumber = 5;
if(setnumber < 1) setnumber = 1;
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber);
}
 
/***************************************************/
/* Set default parameter set */
/***************************************************/
void SetDefaultParameter(uint8_t set, uint8_t restore_channels)
{
 
if(set > 5) set = 5;
else if(set < 1) set = 1;
 
switch(set)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
break;
case 2:
ParamSet_DefaultSet2(); // Kamera
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Beginner
break;
}
if(restore_channels)
{
uint8_t crc;
// 1st check for a valid channel backup in eeprom
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) )
{
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
}
else ParamSet_DefaultStickMapping();
}
else ParamSet_DefaultStickMapping();
ParamSet_WriteToEEProm(set);
}
 
/***************************************************/
/* Initialize EEPROM Parameter Sets */
/***************************************************/
void ParamSet_Init(void)
{
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i;
 
 
if(EEPARAM_REVISION != GetParamByte(PID_EE_REVISION) )
{
ee_default = 1; // software update or forced by mktool
}
// 1st check for a valid channel backup in eeprom
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung));
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) channel_backup = 1;
 
// parameter check
 
// check all 5 parameter settings
for (i = 1;i < 6; i++)
{
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom
{
bad_params = 1;
printf("\n\rGenerating default Parameter Set %d",i);
switch(i)
{
case 1:
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport)
break;
case 2:
ParamSet_DefaultSet2(); // Kamera
break;
case 3:
ParamSet_DefaultSet3(); // Beginner
break;
default:
ParamSet_DefaultSet3(); // Kamera
break;
}
if(channel_backup) // if we have an channel mapping backup in eeprom
{ // restore it from eeprom
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung));
}
else
{ // use default mapping
ParamSet_DefaultStickMapping();
}
ParamSet_WriteToEEProm(i);
}
}
if(bad_params) // at least one of the parameter settings were invalid
{
// default-Setting is parameter set 3
SetActiveParamSet(3);
}
 
 
// read active parameter set to ParamSet stucture
i = GetActiveParamSet();
ParamSet_ReadFromEEProm(i);
printf("\n\rUsing Parameter Set %d", i);
 
// load mixer table
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() )
{
printf("\n\rGenerating default Mixer Table");
MixerTable_Default(); // Quadro
MixerTable_WriteToEEProm();
}
if(ee_default) SetParamByte(PID_EE_REVISION, EEPARAM_REVISION);
// determine motornumber
RequiredMotors = 0;
for(i = 0; i < 16; i++)
{
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++;
}
 
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors);
PrintLine();// ("\n\r===================================");
 
}
/branches/v0.90e_Ernstl_4-Motoren+Sexpander/eeprom.h
0,0 → 1,277
#ifndef _EEPROM_H
#define _EEPROM_H
 
#include <inttypes.h>
#include "twimaster.h"
 
#define EEPARAM_REVISION 93 // is count up, if paramater stucture has changed (compatibility)
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility)
 
#define EEPROM_ADR_PARAM_BEGIN 0
#define PID_EE_REVISION 1 // byte
#define PID_ACTIVE_SET 2 // byte
#define PID_PRESSURE_OFFSET 3 // byte
 
#define PID_ACC_NICK 4 // word
#define PID_ACC_ROLL 6 // word
#define PID_ACC_TOP 8 // word
 
#define PID_FLIGHT_MINUTES_TOTAL 10 // word
#define PID_FLIGHT_MINUTES 14 // word
 
#define PID_SPEAK_HOTT_CFG 16 // Byte
 
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc
#define EEPROM_ADR_PARAMSET 100 // 100 - 650, 5 * 110 bytes
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes
 
#define MIX_GAS 0
#define MIX_NICK 1
#define MIX_ROLL 2
#define MIX_YAW 3
 
typedef struct
{
uint8_t Revision;
int8_t Name[12];
int8_t Motor[16][4];
uint8_t crc;
} __attribute__((packed)) MixerTable_t;
 
extern MixerTable_t Mixer;
extern uint8_t RequiredMotors;
 
//GlobalConfig3
#define CFG3_NO_SDCARD_NO_START 0x01
#define CFG3_DPH_MAX_RADIUS 0x02
#define CFG3_VARIO_FAILSAFE 0x04
#define CFG3_MOTOR_SWITCH_MODE 0x08
#define CFG3_NO_GPSFIX_NO_START 0x10
#define CFG3_USE_NC_FOR_OUT1 0x20
#define CFG3_SPEAK_ALL 0x40
 
//GlobalConfig
#define CFG_HOEHENREGELUNG 0x01
#define CFG_HOEHEN_SCHALTER 0x02
#define CFG_HEADING_HOLD 0x04
#define CFG_KOMPASS_AKTIV 0x08
#define CFG_KOMPASS_FIX 0x10
#define CFG_GPS_AKTIV 0x20
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40
#define CFG_DREHRATEN_BEGRENZER 0x80
 
//BitConfig
#define CFG_LOOP_OBEN 0x01
#define CFG_LOOP_UNTEN 0x02
#define CFG_LOOP_LINKS 0x04
#define CFG_LOOP_RECHTS 0x08
#define CFG_MOTOR_BLINK1 0x10
#define CFG_MOTOR_OFF_LED1 0x20
#define CFG_MOTOR_OFF_LED2 0x40
#define CFG_MOTOR_BLINK2 0x80
 
// ExtraConfig
#define CFG2_HEIGHT_LIMIT 0x01
#define CFG2_VARIO_BEEP 0x02
#define CFG_SENSITIVE_RC 0x04
#define CFG_3_3V_REFERENCE 0x08
#define CFG_NO_RCOFF_BEEPING 0x10
#define CFG_GPS_AID 0x20
#define CFG_LEARNABLE_CAREFREE 0x40
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80
 
// bit mask for ParamSet.Config0
#define CFG0_AIRPRESS_SENSOR 0x01
#define CFG0_HEIGHT_SWITCH 0x02
#define CFG0_HEADING_HOLD 0x04
#define CFG0_COMPASS_ACTIVE 0x08
#define CFG0_COMPASS_FIX 0x10
#define CFG0_GPS_ACTIVE 0x20
#define CFG0_AXIS_COUPLING_ACTIVE 0x40
#define CFG0_ROTARY_RATE_LIMITER 0x80
 
// bitcoding for EE_Parameter.ServoCompInvert
#define SERVO_NICK_INV 0x01
#define SERVO_ROLL_INV 0x02
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value
 
// defines for the receiver selection
#define RECEIVER_PPM 0
#define RECEIVER_SPEKTRUM 1
#define RECEIVER_SPEKTRUM_HI_RES 2
#define RECEIVER_SPEKTRUM_LOW_RES 3
#define RECEIVER_JETI 4
#define RECEIVER_ACT_DSL 5
#define RECEIVER_HOTT 6
#define RECEIVER_SBUS 7
#define RECEIVER_USER 8
 
#define RECEIVER_UNKNOWN 0xFF
 
// defines for lookup ParamSet.ChannelAssignment
#define K_NICK 0
#define K_ROLL 1
#define K_GAS 2
#define K_GIER 3
#define K_POTI1 4
#define K_POTI2 5
#define K_POTI3 6
#define K_POTI4 7
#define K_POTI5 8
#define K_POTI6 9
#define K_POTI7 10
#define K_POTI8 11
 
 
// values above 247 representing poti1 to poti8
// poti1 = 255
// poti2 = 254
// poti3 = 253
// poti4 = 252
// poti5 = 251
// poti6 = 250
// poti7 = 249
// poti8 = 248
 
 
typedef struct
{
unsigned char Revision;
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Hoehe_HoverBand; // Wert : 0-250
unsigned char Hoehe_GPS_Z; // Wert : 0-250
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char StickGier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char Gyro_D; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char Gyro_Stability; // Wert : 0-16
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
//--- Seit V0.75
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoRollComp; // Wert : 0-250
unsigned char ServoRollMin; // Wert : 0-250
unsigned char ServoRollMax; // Wert : 0-250
//---
unsigned char ServoNickRefresh; // Speed of the Servo
unsigned char ServoManualControlSpeed;//
unsigned char CamOrientation; //
unsigned char Servo3; // Value or mapping of the Servo Output
unsigned char Servo4; // Value or mapping of the Servo Output
unsigned char Servo5; // Value or mapping of the Servo Output
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
//---Output ---------------------------------------------
unsigned char J16Bitmask; // for the J16 Output
unsigned char J16Timing; // for the J16 Output
unsigned char J17Bitmask; // for the J17 Output
unsigned char J17Timing; // for the J17 Output
// seit version V0.75c
unsigned char WARN_J16_Bitmask; // for the J16 Output
unsigned char WARN_J17_Bitmask; // for the J17 Output
//---NaviCtrl---------------------------------------------
unsigned char NaviOut1Parameter; // for the J16 Output
unsigned char NaviGpsModeControl; // Parameters for the Naviboard
unsigned char NaviGpsGain;
unsigned char NaviGpsP;
unsigned char NaviGpsI;
unsigned char NaviGpsD;
unsigned char NaviGpsPLimit;
unsigned char NaviGpsILimit;
unsigned char NaviGpsDLimit;
unsigned char NaviGpsACC;
unsigned char NaviGpsMinSat;
unsigned char NaviStickThreshold;
unsigned char NaviWindCorrection;
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation
unsigned char NaviOperatingRadius;
unsigned char NaviAngleLimitation;
unsigned char NaviPH_LoginTime;
//---Ext.Ctrl---------------------------------------------
unsigned char ExternalControl; // for serial Control
//---CareFree---------------------------------------------
unsigned char OrientationAngle; // Where is the front-direction?
unsigned char CareFreeModeControl; // switch for CareFree
unsigned char MotorSafetySwitch;
unsigned char MotorSmooth;
unsigned char ComingHomeAltitude;
unsigned char FailSafeTime;
unsigned char MaxAltitude;
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost"
unsigned char ServoFilterNick;
unsigned char ServoFilterRoll;
//------------------------------------------------
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen
unsigned char ExtraConfig; // bitcodiert
unsigned char GlobalConfig3; // bitcodiert
char Name[12];
unsigned char crc; // must be the last byte!
} paramset_t;
 
#define PARAMSET_STRUCT_LEN sizeof(paramset_t)
 
extern paramset_t EE_Parameter;
 
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len);
 
extern void ParamSet_Init(void);
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels);
 
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber);
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber);
 
extern uint8_t GetActiveParamSet(void);
extern void SetActiveParamSet(uint8_t setnumber);
 
extern uint8_t MixerTable_ReadFromEEProm(void);
extern uint8_t MixerTable_WriteToEEProm(void);
 
extern uint8_t GetParamByte(uint16_t param_id);
extern void SetParamByte(uint16_t param_id, uint8_t value);
extern uint16_t GetParamWord(uint16_t param_id);
extern void SetParamWord(uint16_t param_id, uint16_t value);
 
 
#endif //_EEPROM_H
/branches/v0.90e_Ernstl_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 8DE5 ldi r24,lo8(93)
166 00c6 8093 0000 sts EE_Parameter,r24
167 00ca 8CE0 ldi r24,lo8(12)
168 00cc E0E0 ldi r30,lo8(EE_Parameter+112)
169 00ce F0E0 ldi r31,hi8(EE_Parameter+112)
170 00d0 1192 st Z+,__zero_reg__
171 00d2 8A95 dec r24
172 00d4 01F4 brne .-6
173 00d6 8091 0000 lds r24,PlatinenVersion
174 00da 8431 cpi r24,lo8(20)
175 00dc 00F0 brlo .L33
176 00de 8AE0 ldi r24,lo8(10)
177 00e0 8093 0000 sts EE_Parameter+32,r24
178 00e4 1092 0000 sts EE_Parameter+68,__zero_reg__
179 00e8 8BE1 ldi r24,lo8(27)
180 00ea 8093 0000 sts EE_Parameter+28,r24
181 00ee 8EE4 ldi r24,lo8(78)
182 00f0 00C0 rjmp .L35
183 .L33:
184 00f2 83E0 ldi r24,lo8(3)
185 00f4 8093 0000 sts EE_Parameter+32,r24
186 00f8 80E2 ldi r24,lo8(32)
187 00fa 8093 0000 sts EE_Parameter+68,r24
188 00fe 8EE1 ldi r24,lo8(30)
189 0100 8093 0000 sts EE_Parameter+28,r24
190 0104 85E5 ldi r24,lo8(85)
191 .L35:
192 0106 8093 0000 sts EE_Parameter+65,r24
193 010a 8093 0000 sts EE_Parameter+66,r24
194 010e 80E2 ldi r24,lo8(32)
195 0110 8093 0000 sts EE_Parameter+67,r24
196 0114 1092 0000 sts EE_Parameter+108,__zero_reg__
197 0118 8AE6 ldi r24,lo8(106)
198 011a 8093 0000 sts EE_Parameter+13,r24
199 011e 82E2 ldi r24,lo8(34)
200 0120 8093 0000 sts EE_Parameter+110,r24
201 0124 80E4 ldi r24,lo8(64)
202 0126 8093 0000 sts EE_Parameter+111,r24
203 012a 66E0 ldi r22,lo8(6)
204 012c 6093 0000 sts EE_Parameter+39,r22
205 0130 1092 0000 sts EE_Parameter+100,__zero_reg__
206 0134 1092 0000 sts EE_Parameter+97,__zero_reg__
207 0138 48E0 ldi r20,lo8(8)
208 013a 4093 0000 sts EE_Parameter+26,r20
209 013e 56EE ldi r21,lo8(-26)
210 0140 5093 0000 sts EE_Parameter+27,r21
211 0144 8093 0000 sts EE_Parameter+29,r24
212 0148 9EE1 ldi r25,lo8(30)
213 014a 9093 0000 sts EE_Parameter+14,r25
214 014e 8FEF ldi r24,lo8(-1)
215 0150 8093 0000 sts EE_Parameter+16,r24
216 0154 2FE0 ldi r18,lo8(15)
217 0156 2093 0000 sts EE_Parameter+17,r18
218 015a 9093 0000 sts EE_Parameter+15,r25
219 015e 1092 0000 sts EE_Parameter+19,__zero_reg__
220 0162 4093 0000 sts EE_Parameter+20,r20
221 0166 84E1 ldi r24,lo8(20)
222 0168 8093 0000 sts EE_Parameter+21,r24
223 016c 1092 0000 sts EE_Parameter+22,__zero_reg__
224 0170 2093 0000 sts EE_Parameter+18,r18
225 0174 1092 0000 sts EE_Parameter+41,__zero_reg__
226 0178 1092 0000 sts EE_Parameter+42,__zero_reg__
227 017c 1092 0000 sts EE_Parameter+43,__zero_reg__
228 0180 1092 0000 sts EE_Parameter+44,__zero_reg__
229 0184 1092 0000 sts EE_Parameter+70,__zero_reg__
230 0188 1092 0000 sts EE_Parameter+71,__zero_reg__
231 018c 1092 0000 sts EE_Parameter+72,__zero_reg__
232 0190 1092 0000 sts EE_Parameter+73,__zero_reg__
233 0194 90E8 ldi r25,lo8(-128)
234 0196 9093 0000 sts EE_Parameter+45,r25
235 019a 32E3 ldi r19,lo8(50)
236 019c 3093 0000 sts EE_Parameter+46,r19
237 01a0 82E0 ldi r24,lo8(2)
238 01a2 8093 0000 sts EE_Parameter+109,r24
239 01a6 2093 0000 sts EE_Parameter+47,r18
240 01aa 5093 0000 sts EE_Parameter+48,r21
241 01ae 84E0 ldi r24,lo8(4)
242 01b0 8093 0000 sts EE_Parameter+53,r24
243 01b4 2DE7 ldi r18,lo8(125)
244 01b6 2093 0000 sts EE_Parameter+56,r18
245 01ba 2093 0000 sts EE_Parameter+57,r18
246 01be 2093 0000 sts EE_Parameter+58,r18
247 01c2 9093 0000 sts EE_Parameter+49,r25
248 01c6 55E5 ldi r21,lo8(85)
249 01c8 5093 0000 sts EE_Parameter+50,r21
250 01cc 86E4 ldi r24,lo8(70)
251 01ce 8093 0000 sts EE_Parameter+51,r24
252 01d2 8CED ldi r24,lo8(-36)
253 01d4 8093 0000 sts EE_Parameter+52,r24
254 01d8 8CE3 ldi r24,lo8(60)
255 01da 8093 0000 sts EE_Parameter+54,r24
256 01de 1092 0000 sts EE_Parameter+55,__zero_reg__
257 01e2 8FE5 ldi r24,lo8(95)
258 01e4 8093 0000 sts EE_Parameter+74,r24
259 01e8 83EF ldi r24,lo8(-13)
260 01ea 8093 0000 sts EE_Parameter+76,r24
261 01ee 8AEA ldi r24,lo8(-86)
262 01f0 8093 0000 sts EE_Parameter+78,r24
263 01f4 8093 0000 sts EE_Parameter+79,r24
264 01f8 88E2 ldi r24,lo8(40)
265 01fa 8093 0000 sts EE_Parameter+75,r24
266 01fe 8093 0000 sts EE_Parameter+77,r24
267 0202 1092 0000 sts EE_Parameter+80,__zero_reg__
268 0206 3093 0000 sts EE_Parameter+59,r19
269 020a 9AE5 ldi r25,lo8(90)
270 020c 9093 0000 sts EE_Parameter+60,r25
271 0210 3093 0000 sts EE_Parameter+61,r19
272 0214 8EEF ldi r24,lo8(-2)
273 0216 8093 0000 sts EE_Parameter+81,r24
274 021a 84E6 ldi r24,lo8(100)
275 021c 8093 0000 sts EE_Parameter+82,r24
276 0220 9093 0000 sts EE_Parameter+83,r25
277 0224 9093 0000 sts EE_Parameter+84,r25
278 0228 9093 0000 sts EE_Parameter+85,r25
279 022c 8BE4 ldi r24,lo8(75)
280 022e 8093 0000 sts EE_Parameter+86,r24
281 0232 5093 0000 sts EE_Parameter+87,r21
282 0236 8093 0000 sts EE_Parameter+88,r24
283 023a 1092 0000 sts EE_Parameter+89,__zero_reg__
284 023e 6093 0000 sts EE_Parameter+90,r22
285 0242 4093 0000 sts EE_Parameter+91,r20
286 0246 9093 0000 sts EE_Parameter+92,r25
287 024a 8AE2 ldi r24,lo8(42)
288 024c 8093 0000 sts EE_Parameter+93,r24
289 0250 85EF ldi r24,lo8(-11)
290 0252 8093 0000 sts EE_Parameter+94,r24
291 0256 8CE8 ldi r24,lo8(-116)
292 0258 8093 0000 sts EE_Parameter+95,r24
293 025c 85E0 ldi r24,lo8(5)
294 025e 8093 0000 sts EE_Parameter+96,r24
295 0262 1092 0000 sts EE_Parameter+98,__zero_reg__
296 0266 1092 0000 sts EE_Parameter+99,__zero_reg__
297 026a 81E2 ldi r24,lo8(33)
298 026c 8093 0000 sts EE_Parameter+36,r24
299 0270 81E4 ldi r24,lo8(65)
300 0272 8093 0000 sts EE_Parameter+37,r24
301 0276 9093 0000 sts EE_Parameter+38,r25
302 027a 1092 0000 sts EE_Parameter+101,__zero_reg__
303 027e 1092 0000 sts EE_Parameter+102,__zero_reg__
304 0282 1092 0000 sts EE_Parameter+103,__zero_reg__
305 0286 86E9 ldi r24,lo8(-106)
306 0288 8093 0000 sts EE_Parameter+104,r24
307 028c 2093 0000 sts EE_Parameter+62,r18
308 0290 84E3 ldi r24,lo8(52)
309 0292 8093 0000 sts EE_Parameter+63,r24
310 0296 1092 0000 sts EE_Parameter+105,__zero_reg__
311 029a 1092 0000 sts EE_Parameter+106,__zero_reg__
312 029e 1092 0000 sts EE_Parameter+107,__zero_reg__
313 /* epilogue: frame size=0 */
314 02a2 0895 ret
315 /* epilogue end (size=1) */
316 /* function CommonDefaults size 240 (239) */
318 .global ParamSet_DefaultSet1
320 ParamSet_DefaultSet1:
321 /* prologue: frame size=0 */
322 /* prologue end (size=0) */
323 02a4 0E94 0000 call CommonDefaults
324 02a8 8AE0 ldi r24,lo8(10)
325 02aa 8093 0000 sts EE_Parameter+23,r24
326 02ae 80E1 ldi r24,lo8(16)
327 02b0 8093 0000 sts EE_Parameter+24,r24
328 02b4 26E0 ldi r18,lo8(6)
329 02b6 2093 0000 sts EE_Parameter+25,r18
330 02ba 9AE5 ldi r25,lo8(90)
331 02bc 9093 0000 sts EE_Parameter+30,r25
332 02c0 88E7 ldi r24,lo8(120)
333 02c2 8093 0000 sts EE_Parameter+31,r24
334 02c6 9093 0000 sts EE_Parameter+33,r25
335 02ca 8093 0000 sts EE_Parameter+34,r24
336 02ce 2093 0000 sts EE_Parameter+35,r18
337 02d2 80E2 ldi r24,lo8(32)
338 02d4 8093 0000 sts EE_Parameter+40,r24
339 02d8 8CE3 ldi r24,lo8(60)
340 02da 8093 0000 sts EE_Parameter+64,r24
341 02de 8BE4 ldi r24,lo8(75)
342 02e0 8093 0000 sts EE_Parameter+69,r24
343 02e4 86E4 ldi r24,lo8(1953718598)
344 02e6 91E6 ldi r25,hi8(1953718598)
345 02e8 A3E7 ldi r26,hlo8(1953718598)
346 02ea B4E7 ldi r27,hhi8(1953718598)
347 02ec 8093 0000 sts EE_Parameter+112,r24
348 02f0 9093 0000 sts (EE_Parameter+112)+1,r25
349 02f4 A093 0000 sts (EE_Parameter+112)+2,r26
350 02f8 B093 0000 sts (EE_Parameter+112)+3,r27
351 02fc 6CE7 ldi r22,lo8(124)
352 02fe 70E0 ldi r23,hi8(124)
353 0300 80E0 ldi r24,lo8(EE_Parameter)
354 0302 90E0 ldi r25,hi8(EE_Parameter)
355 0304 0E94 0000 call RAM_Checksum
356 0308 8093 0000 sts EE_Parameter+124,r24
357 /* epilogue: frame size=0 */
358 030c 0895 ret
359 /* epilogue end (size=1) */
360 /* function ParamSet_DefaultSet1 size 53 (52) */
362 .data
363 .LC0:
364 0000 4E6F 726D .string "Normal"
364 616C 00
365 .text
366 .global ParamSet_DefaultSet2
368 ParamSet_DefaultSet2:
369 /* prologue: frame size=0 */
370 030e CF93 push r28
371 0310 DF93 push r29
372 /* prologue end (size=2) */
373 0312 0E94 0000 call CommonDefaults
374 0316 88E0 ldi r24,lo8(8)
375 0318 8093 0000 sts EE_Parameter+23,r24
376 031c 30E1 ldi r19,lo8(16)
377 031e 3093 0000 sts EE_Parameter+24,r19
378 0322 26E0 ldi r18,lo8(6)
379 0324 2093 0000 sts EE_Parameter+25,r18
380 0328 94E6 ldi r25,lo8(100)
381 032a 9093 0000 sts EE_Parameter+30,r25
382 032e 88E7 ldi r24,lo8(120)
383 0330 8093 0000 sts EE_Parameter+31,r24
384 0334 9093 0000 sts EE_Parameter+33,r25
385 0338 8093 0000 sts EE_Parameter+34,r24
386 033c 2093 0000 sts EE_Parameter+35,r18
387 0340 3093 0000 sts EE_Parameter+40,r19
388 0344 86E4 ldi r24,lo8(70)
389 0346 8093 0000 sts EE_Parameter+64,r24
390 034a 8093 0000 sts EE_Parameter+69,r24
391 034e A0E0 ldi r26,lo8(EE_Parameter+112)
392 0350 B0E0 ldi r27,hi8(EE_Parameter+112)
393 0352 E0E0 ldi r30,lo8(.LC0)
394 0354 F0E0 ldi r31,hi8(.LC0)
395 0356 ED01 movw r28,r26
396 0358 0190 ld __tmp_reg__,Z+
397 035a 0992 st Y+,__tmp_reg__
398 035c 2A95 dec r18
399 035e 01F4 brne .-8
400 0360 6CE7 ldi r22,lo8(124)
401 0362 70E0 ldi r23,hi8(124)
402 0364 CD01 movw r24,r26
403 0366 8057 subi r24,lo8(-(-112))
404 0368 9040 sbci r25,hi8(-(-112))
405 036a 0E94 0000 call RAM_Checksum
406 036e 8093 0000 sts EE_Parameter+124,r24
407 /* epilogue: frame size=0 */
408 0372 DF91 pop r29
409 0374 CF91 pop r28
410 0376 0895 ret
411 /* epilogue end (size=3) */
412 /* function ParamSet_DefaultSet2 size 53 (48) */
414 .global ParamSet_DefaultSet3
416 ParamSet_DefaultSet3:
417 /* prologue: frame size=0 */
418 /* prologue end (size=0) */
419 0378 0E94 0000 call CommonDefaults
420 037c 26E0 ldi r18,lo8(6)
421 037e 2093 0000 sts EE_Parameter+23,r18
422 0382 8AE0 ldi r24,lo8(10)
423 0384 8093 0000 sts EE_Parameter+24,r24
424 0388 84E0 ldi r24,lo8(4)
425 038a 8093 0000 sts EE_Parameter+25,r24
426 038e 94E6 ldi r25,lo8(100)
427 0390 9093 0000 sts EE_Parameter+30,r25
428 0394 88E7 ldi r24,lo8(120)
429 0396 8093 0000 sts EE_Parameter+31,r24
430 039a 9093 0000 sts EE_Parameter+33,r25
431 039e 8093 0000 sts EE_Parameter+34,r24
432 03a2 2093 0000 sts EE_Parameter+35,r18
433 03a6 80E1 ldi r24,lo8(16)
434 03a8 8093 0000 sts EE_Parameter+40,r24
435 03ac 86E4 ldi r24,lo8(70)
436 03ae 8093 0000 sts EE_Parameter+64,r24
437 03b2 8093 0000 sts EE_Parameter+69,r24
438 03b6 85E4 ldi r24,lo8(2037604677)
439 03b8 91E6 ldi r25,hi8(2037604677)
440 03ba A3E7 ldi r26,hlo8(2037604677)
441 03bc B9E7 ldi r27,hhi8(2037604677)
442 03be 8093 0000 sts EE_Parameter+112,r24
443 03c2 9093 0000 sts (EE_Parameter+112)+1,r25
444 03c6 A093 0000 sts (EE_Parameter+112)+2,r26
445 03ca B093 0000 sts (EE_Parameter+112)+3,r27
446 03ce 6CE7 ldi r22,lo8(124)
447 03d0 70E0 ldi r23,hi8(124)
448 03d2 80E0 ldi r24,lo8(EE_Parameter)
449 03d4 90E0 ldi r25,hi8(EE_Parameter)
450 03d6 0E94 0000 call RAM_Checksum
451 03da 8093 0000 sts EE_Parameter+124,r24
452 /* epilogue: frame size=0 */
453 03de 0895 ret
454 /* epilogue end (size=1) */
455 /* function ParamSet_DefaultSet3 size 52 (51) */
457 .global GetParamByte
459 GetParamByte:
460 /* prologue: frame size=0 */
461 /* prologue end (size=0) */
462 .L40:
463 03e0 F999 sbic 63-0x20,1
464 03e2 00C0 rjmp .L40
465 03e4 92BD out (65)+1-0x20,r25
466 03e6 81BD out 65-0x20,r24
467 /* #APP */
468 /* START EEPROM READ CRITICAL SECTION */
469 03e8 F89A sbi 31, 0
470 03ea 80B5 in r24, 32
471 /* END EEPROM READ CRITICAL SECTION */
472
473 /* #NOAPP */
474 03ec 9927 clr r25
475 /* epilogue: frame size=0 */
476 03ee 0895 ret
477 /* epilogue end (size=1) */
478 /* function GetParamByte size 16 (15) */
480 .global SetParamByte
482 SetParamByte:
483 /* prologue: frame size=0 */
484 /* prologue end (size=0) */
485 .L45:
486 03f0 F999 sbic 63-0x20,1
487 03f2 00C0 rjmp .L45
488 03f4 1FBA out 63-0x20,__zero_reg__
489 03f6 92BD out (65)+1-0x20,r25
490 03f8 81BD out 65-0x20,r24
491 03fa 60BD out 64-0x20,r22
492 /* #APP */
493 /* START EEPROM WRITE CRITICAL SECTION */
494 03fc 0FB6 in r0, 63
495 03fe F894 cli
496 0400 FA9A sbi 31, 2
497 0402 F99A sbi 31, 1
498 0404 0FBE out 63, r0
499 /* END EEPROM WRITE CRITICAL SECTION */
500 /* #NOAPP */
501 /* epilogue: frame size=0 */
502 0406 0895 ret
503 /* epilogue end (size=1) */
504 /* function SetParamByte size 21 (20) */
506 .global GetParamWord
508 GetParamWord:
509 /* prologue: frame size=0 */
510 /* prologue end (size=0) */
511 0408 60E0 ldi r22,lo8(pm(eeprom_read_byte))
512 040a 70E0 ldi r23,hi8(pm(eeprom_read_byte))
513 040c 0E94 0000 call __eerd_word
514 /* epilogue: frame size=0 */
515 0410 0895 ret
516 /* epilogue end (size=1) */
517 /* function GetParamWord size 5 (4) */
519 .global SetParamWord
521 SetParamWord:
522 /* prologue: frame size=0 */
523 /* prologue end (size=0) */
524 0412 40E0 ldi r20,lo8(pm(eeprom_write_byte))
525 0414 50E0 ldi r21,hi8(pm(eeprom_write_byte))
526 0416 0E94 0000 call __eewr_word
527 /* epilogue: frame size=0 */
528 041a 0895 ret
529 /* epilogue end (size=1) */
530 /* function SetParamWord size 5 (4) */
532 .global ParamSet_ReadFromEEProm
534 ParamSet_ReadFromEEProm:
535 /* prologue: frame size=0 */
536 041c EF92 push r14
537 041e FF92 push r15
538 0420 0F93 push r16
539 0422 1F93 push r17
540 0424 CF93 push r28
541 /* prologue end (size=5) */
542 0426 C82F mov r28,r24
543 0428 8150 subi r24,lo8(-(-1))
544 042a 8530 cpi r24,lo8(5)
545 042c 00F0 brlo .L54
546 042e C3E0 ldi r28,lo8(3)
547 .L54:
548 0430 8DE7 ldi r24,lo8(125)
549 0432 C89F mul r28,r24
550 0434 8001 movw r16,r0
551 0436 1124 clr r1
552 0438 87EE ldi r24,lo8(-25)
553 043a E82E mov r14,r24
554 043c 8FEF ldi r24,hi8(-25)
555 043e F82E mov r15,r24
556 0440 E00E add r14,r16
557 0442 F11E adc r15,r17
558 0444 6CE7 ldi r22,lo8(124)
559 0446 70E0 ldi r23,hi8(124)
560 0448 C701 movw r24,r14
561 044a 0E94 0000 call EEProm_Checksum
562 044e 682F mov r22,r24
563 0450 9801 movw r18,r16
564 0452 2D59 subi r18,lo8(-(99))
565 0454 3F4F sbci r19,hi8(-(99))
566 .L56:
567 0456 8FB3 in r24,63-0x20
568 0458 9927 clr r25
569 045a AC01 movw r20,r24
570 045c 4270 andi r20,lo8(2)
571 045e 5070 andi r21,hi8(2)
572 0460 81FD sbrc r24,1
573 0462 00C0 rjmp .L56
574 0464 32BD out (65)+1-0x20,r19
575 0466 21BD out 65-0x20,r18
576 /* #APP */
577 /* START EEPROM READ CRITICAL SECTION */
578 0468 F89A sbi 31, 0
579 046a 80B5 in r24, 32
580 /* END EEPROM READ CRITICAL SECTION */
581
582 /* #NOAPP */
583 046c 8617 cp r24,r22
584 046e 01F0 breq .L61
585 0470 CA01 movw r24,r20
586 0472 00C0 rjmp .L53
587 .L61:
588 0474 8FB3 in r24,63-0x20
589 0476 9927 clr r25
590 0478 9C01 movw r18,r24
591 047a 2270 andi r18,lo8(2)
592 047c 3070 andi r19,hi8(2)
593 047e 81FD sbrc r24,1
594 0480 00C0 rjmp .L61
595 0482 F2BC out (65)+1-0x20,r15
596 0484 E1BC out 65-0x20,r14
597 /* #APP */
598 /* START EEPROM READ CRITICAL SECTION */
599 0486 F89A sbi 31, 0
600 0488 80B5 in r24, 32
601 /* END EEPROM READ CRITICAL SECTION */
602
603 /* #NOAPP */
604 048a 8D35 cpi r24,lo8(93)
605 048c 01F0 breq .L60
606 048e C901 movw r24,r18
607 0490 00C0 rjmp .L53
608 .L60:
609 0492 8DE7 ldi r24,lo8(125)
610 0494 C89F mul r28,r24
611 0496 C001 movw r24,r0
612 0498 1124 clr r1
613 049a 4997 sbiw r24,25
614 049c 20E0 ldi r18,lo8(pm(eeprom_read_byte))
615 049e 30E0 ldi r19,hi8(pm(eeprom_read_byte))
616 04a0 4DE7 ldi r20,lo8(125)
617 04a2 50E0 ldi r21,hi8(125)
618 04a4 BC01 movw r22,r24
619 04a6 80E0 ldi r24,lo8(EE_Parameter)
620 04a8 90E0 ldi r25,hi8(EE_Parameter)
621 04aa 0E94 0000 call __eerd_block
622 04ae 0E94 0000 call LED_Init
623 04b2 0E94 0000 call LIBFC_HoTT_Clear
624 04b6 81E0 ldi r24,lo8(1)
625 04b8 90E0 ldi r25,hi8(1)
626 .L53:
627 /* epilogue: frame size=0 */
628 04ba CF91 pop r28
629 04bc 1F91 pop r17
630 04be 0F91 pop r16
631 04c0 FF90 pop r15
632 04c2 EF90 pop r14
633 04c4 0895 ret
634 /* epilogue end (size=6) */
635 /* function ParamSet_ReadFromEEProm size 101 (90) */
637 .global SetActiveParamSet
639 SetActiveParamSet:
640 /* prologue: frame size=0 */
641 /* prologue end (size=0) */
642 04c6 282F mov r18,r24
643 04c8 8630 cpi r24,lo8(6)
644 04ca 00F0 brlo .L67
645 04cc 25E0 ldi r18,lo8(5)
646 04ce 00C0 rjmp .L69
647 .L67:
648 04d0 8823 tst r24
649 04d2 01F4 brne .L69
650 04d4 21E0 ldi r18,lo8(1)
651 .L69:
652 04d6 F999 sbic 63-0x20,1
653 04d8 00C0 rjmp .L69
654 04da 1FBA out 63-0x20,__zero_reg__
655 04dc 82E0 ldi r24,lo8(2)
656 04de 90E0 ldi r25,hi8(2)
657 04e0 92BD out (65)+1-0x20,r25
658 04e2 81BD out 65-0x20,r24
659 04e4 20BD out 64-0x20,r18
660 /* #APP */
661 /* START EEPROM WRITE CRITICAL SECTION */
662 04e6 0FB6 in r0, 63
663 04e8 F894 cli
664 04ea FA9A sbi 31, 2
665 04ec F99A sbi 31, 1
666 04ee 0FBE out 63, r0
667 /* END EEPROM WRITE CRITICAL SECTION */
668 /* #NOAPP */
669 /* epilogue: frame size=0 */
670 04f0 0895 ret
671 /* epilogue end (size=1) */
672 /* function SetActiveParamSet size 31 (30) */
674 .global ParamSet_WriteToEEProm
676 ParamSet_WriteToEEProm:
677 /* prologue: frame size=0 */
678 04f2 CF93 push r28
679 /* prologue end (size=1) */
680 04f4 C82F mov r28,r24
681 04f6 8091 0000 lds r24,EE_Parameter
682 04fa 8D35 cpi r24,lo8(93)
683 04fc 01F0 breq .+2
684 04fe 00C0 rjmp .L74
685 0500 C630 cpi r28,lo8(6)
686 0502 00F0 brlo .L75
687 0504 C5E0 ldi r28,lo8(5)
688 0506 00C0 rjmp .L76
689 .L75:
690 0508 CC23 tst r28
691 050a 01F4 brne .+2
692 050c 00C0 rjmp .L74
693 .L76:
694 050e 0E94 0000 call LIBFC_CheckSettings
695 0512 8091 0000 lds r24,EE_Parameter+111
696 0516 82FF sbrs r24,2
697 0518 00C0 rjmp .L77
698 051a 8091 0000 lds r24,EE_Parameter+37
699 051e 8436 cpi r24,lo8(100)
700 0520 00F0 brlo .L77
701 0522 80E5 ldi r24,lo8(80)
702 0524 8093 0000 sts EE_Parameter+37,r24
703 .L77:
704 0528 6CE7 ldi r22,lo8(124)
705 052a 70E0 ldi r23,hi8(124)
706 052c 80E0 ldi r24,lo8(EE_Parameter)
707 052e 90E0 ldi r25,hi8(EE_Parameter)
708 0530 0E94 0000 call RAM_Checksum
709 0534 8093 0000 sts EE_Parameter+124,r24
710 0538 8DE7 ldi r24,lo8(125)
711 053a C89F mul r28,r24
712 053c C001 movw r24,r0
713 053e 1124 clr r1
714 0540 20E0 ldi r18,lo8(pm(eeprom_write_byte))
715 0542 30E0 ldi r19,hi8(pm(eeprom_write_byte))
716 0544 4DE7 ldi r20,lo8(125)
717 0546 50E0 ldi r21,hi8(125)
718 0548 60E0 ldi r22,lo8(EE_Parameter)
719 054a 70E0 ldi r23,hi8(EE_Parameter)
720 054c 4997 sbiw r24,25
721 054e 0E94 0000 call __eewr_block
722 0552 20E0 ldi r18,lo8(pm(eeprom_write_byte))
723 0554 30E0 ldi r19,hi8(pm(eeprom_write_byte))
724 0556 4CE0 ldi r20,lo8(12)
725 0558 50E0 ldi r21,hi8(12)
726 055a 60E0 ldi r22,lo8(EE_Parameter+1)
727 055c 70E0 ldi r23,hi8(EE_Parameter+1)
728 055e 80E5 ldi r24,lo8(80)
729 0560 90E0 ldi r25,hi8(80)
730 0562 0E94 0000 call __eewr_block
731 0566 6CE0 ldi r22,lo8(12)
732 0568 70E0 ldi r23,hi8(12)
733 056a 80E0 ldi r24,lo8(EE_Parameter+1)
734 056c 90E0 ldi r25,hi8(EE_Parameter+1)
735 056e 0E94 0000 call RAM_Checksum
736 0572 282F mov r18,r24
737 .L81:
738 0574 F999 sbic 63-0x20,1
739 0576 00C0 rjmp .L81
740 0578 1FBA out 63-0x20,__zero_reg__
741 057a 8CE5 ldi r24,lo8(92)
742 057c 90E0 ldi r25,hi8(92)
743 057e 92BD out (65)+1-0x20,r25
744 0580 81BD out 65-0x20,r24
745 0582 20BD out 64-0x20,r18
746 /* #APP */
747 /* START EEPROM WRITE CRITICAL SECTION */
748 0584 0FB6 in r0, 63
749 0586 F894 cli
750 0588 FA9A sbi 31, 2
751 058a F99A sbi 31, 1
752 058c 0FBE out 63, r0
753 /* END EEPROM WRITE CRITICAL SECTION */
754 /* #NOAPP */
755 058e 8C2F mov r24,r28
756 0590 0E94 0000 call SetActiveParamSet
757 0594 0E94 0000 call LED_Init
758 0598 0E94 0000 call LIBFC_HoTT_Clear
759 059c 81E0 ldi r24,lo8(1)
760 059e 90E0 ldi r25,hi8(1)
761 05a0 00C0 rjmp .L73
762 .L74:
763 05a2 80E0 ldi r24,lo8(0)
764 05a4 90E0 ldi r25,hi8(0)
765 .L73:
766 /* epilogue: frame size=0 */
767 05a6 CF91 pop r28
768 05a8 0895 ret
769 /* epilogue end (size=2) */
770 /* function ParamSet_WriteToEEProm size 101 (98) */
772 .global MixerTable_ReadFromEEProm
774 MixerTable_ReadFromEEProm:
775 /* prologue: frame size=0 */
776 /* prologue end (size=0) */
777 05aa 6DE4 ldi r22,lo8(77)
778 05ac 70E0 ldi r23,hi8(77)
779 05ae 88EE ldi r24,lo8(1000)
780 05b0 93E0 ldi r25,hi8(1000)
781 05b2 0E94 0000 call EEProm_Checksum
782 05b6 482F mov r20,r24
783 .L87:
784 05b8 8FB3 in r24,63-0x20
785 05ba 9927 clr r25
786 05bc 9C01 movw r18,r24
787 05be 2270 andi r18,lo8(2)
788 05c0 3070 andi r19,hi8(2)
789 05c2 81FD sbrc r24,1
790 05c4 00C0 rjmp .L87
791 05c6 85E3 ldi r24,lo8(1077)
792 05c8 94E0 ldi r25,hi8(1077)
793 05ca 92BD out (65)+1-0x20,r25
794 05cc 81BD out 65-0x20,r24
795 /* #APP */
796 /* START EEPROM READ CRITICAL SECTION */
797 05ce F89A sbi 31, 0
798 05d0 80B5 in r24, 32
799 /* END EEPROM READ CRITICAL SECTION */
800
801 /* #NOAPP */
802 05d2 8417 cp r24,r20
803 05d4 01F4 brne .L97
804 .L92:
805 05d6 8FB3 in r24,63-0x20
806 05d8 9927 clr r25
807 05da 9C01 movw r18,r24
808 05dc 2270 andi r18,lo8(2)
809 05de 3070 andi r19,hi8(2)
810 05e0 81FD sbrc r24,1
811 05e2 00C0 rjmp .L92
812 05e4 88EE ldi r24,lo8(1000)
813 05e6 93E0 ldi r25,hi8(1000)
814 05e8 92BD out (65)+1-0x20,r25
815 05ea 81BD out 65-0x20,r24
816 /* #APP */
817 /* START EEPROM READ CRITICAL SECTION */
818 05ec F89A sbi 31, 0
819 05ee 80B5 in r24, 32
820 /* END EEPROM READ CRITICAL SECTION */
821
822 /* #NOAPP */
823 05f0 8130 cpi r24,lo8(1)
824 05f2 01F0 breq .L91
825 .L97:
826 05f4 C901 movw r24,r18
827 05f6 0895 ret
828 .L91:
829 05f8 20E0 ldi r18,lo8(pm(eeprom_read_byte))
830 05fa 30E0 ldi r19,hi8(pm(eeprom_read_byte))
831 05fc 4EE4 ldi r20,lo8(78)
832 05fe 50E0 ldi r21,hi8(78)
833 0600 68EE ldi r22,lo8(1000)
834 0602 73E0 ldi r23,hi8(1000)
835 0604 80E0 ldi r24,lo8(Mixer)
836 0606 90E0 ldi r25,hi8(Mixer)
837 0608 0E94 0000 call __eerd_block
838 060c 81E0 ldi r24,lo8(1)
839 060e 90E0 ldi r25,hi8(1)
840 0610 0895 ret
841 /* epilogue: frame size=0 */
842 /* epilogue: noreturn */
843 /* epilogue end (size=0) */
844 /* function MixerTable_ReadFromEEProm size 68 (68) */
846 .global MixerTable_WriteToEEProm
848 MixerTable_WriteToEEProm:
849 /* prologue: frame size=0 */
850 /* prologue end (size=0) */
851 0612 8091 0000 lds r24,Mixer
852 0616 8130 cpi r24,lo8(1)
853 0618 01F4 brne .L99
854 061a 6DE4 ldi r22,lo8(77)
855 061c 70E0 ldi r23,hi8(77)
856 061e 80E0 ldi r24,lo8(Mixer)
857 0620 90E0 ldi r25,hi8(Mixer)
858 0622 0E94 0000 call RAM_Checksum
859 0626 8093 0000 sts Mixer+77,r24
860 062a 20E0 ldi r18,lo8(pm(eeprom_write_byte))
861 062c 30E0 ldi r19,hi8(pm(eeprom_write_byte))
862 062e 4EE4 ldi r20,lo8(78)
863 0630 50E0 ldi r21,hi8(78)
864 0632 60E0 ldi r22,lo8(Mixer)
865 0634 70E0 ldi r23,hi8(Mixer)
866 0636 88EE ldi r24,lo8(1000)
867 0638 93E0 ldi r25,hi8(1000)
868 063a 0E94 0000 call __eewr_block
869 063e 81E0 ldi r24,lo8(1)
870 0640 90E0 ldi r25,hi8(1)
871 0642 0895 ret
872 .L99:
873 0644 80E0 ldi r24,lo8(0)
874 0646 90E0 ldi r25,hi8(0)
875 0648 0895 ret
876 /* epilogue: frame size=0 */
877 /* epilogue: noreturn */
878 /* epilogue end (size=0) */
879 /* function MixerTable_WriteToEEProm size 28 (28) */
881 .data
882 .LC1:
883 0007 5175 6164 .string "Quadro"
883 726F 00
884 000e 00 .string ""
885 000f 00 .string ""
886 0010 00 .string ""
887 0011 00 .string ""
888 0012 00 .string ""
889 0013 00 .string ""
890 .text
891 .global MixerTable_Default
893 MixerTable_Default:
894 /* prologue: frame size=0 */
895 064a CF93 push r28
896 064c DF93 push r29
897 /* prologue end (size=2) */
898 064e 81E0 ldi r24,lo8(1)
899 0650 8093 0000 sts Mixer,r24
900 0654 E0E0 ldi r30,lo8(Mixer)
901 0656 F0E0 ldi r31,hi8(Mixer)
902 0658 8FE0 ldi r24,lo8(15)
903 .L106:
904 065a 1586 std Z+13,__zero_reg__
905 065c 1686 std Z+14,__zero_reg__
906 065e 1786 std Z+15,__zero_reg__
907 0660 108A std Z+16,__zero_reg__
908 0662 8150 subi r24,lo8(-(-1))
909 0664 3496 adiw r30,4
910 0666 87FF sbrs r24,7
911 0668 00C0 rjmp .L106
912 066a 80E4 ldi r24,lo8(64)
913 066c 8093 0000 sts Mixer+13,r24
914 0670 8093 0000 sts Mixer+14,r24
915 0674 1092 0000 sts Mixer+15,__zero_reg__
916 0678 8093 0000 sts Mixer+16,r24
917 067c 8093 0000 sts Mixer+17,r24
918 0680 90EC ldi r25,lo8(-64)
919 0682 9093 0000 sts Mixer+18,r25
920 0686 1092 0000 sts Mixer+19,__zero_reg__
921 068a 8093 0000 sts Mixer+20,r24
922 068e 8093 0000 sts Mixer+21,r24
923 0692 1092 0000 sts Mixer+22,__zero_reg__
924 0696 9093 0000 sts Mixer+23,r25
925 069a 9093 0000 sts Mixer+24,r25
926 069e 8093 0000 sts Mixer+25,r24
927 06a2 1092 0000 sts Mixer+26,__zero_reg__
928 06a6 8093 0000 sts Mixer+27,r24
929 06aa 9093 0000 sts Mixer+28,r25
930 06ae A0E0 ldi r26,lo8(Mixer+1)
931 06b0 B0E0 ldi r27,hi8(Mixer+1)
932 06b2 8CE0 ldi r24,lo8(12)
933 06b4 E0E0 ldi r30,lo8(.LC1)
934 06b6 F0E0 ldi r31,hi8(.LC1)
935 06b8 ED01 movw r28,r26
936 06ba 0190 ld __tmp_reg__,Z+
937 06bc 0992 st Y+,__tmp_reg__
938 06be 8A95 dec r24
939 06c0 01F4 brne .-8
940 06c2 6DE4 ldi r22,lo8(77)
941 06c4 70E0 ldi r23,hi8(77)
942 06c6 CD01 movw r24,r26
943 06c8 0197 sbiw r24,1
944 06ca 0E94 0000 call RAM_Checksum
945 06ce 8093 0000 sts Mixer+77,r24
946 /* epilogue: frame size=0 */
947 06d2 DF91 pop r29
948 06d4 CF91 pop r28
949 06d6 0895 ret
950 /* epilogue end (size=3) */
951 /* function MixerTable_Default size 71 (66) */
953 .global GetActiveParamSet
955 GetActiveParamSet:
956 /* prologue: frame size=0 */
957 /* prologue end (size=0) */
958 .L110:
959 06d8 F999 sbic 63-0x20,1
960 06da 00C0 rjmp .L110
961 06dc 82E0 ldi r24,lo8(2)
962 06de 90E0 ldi r25,hi8(2)
963 06e0 92BD out (65)+1-0x20,r25
964 06e2 81BD out 65-0x20,r24
965 /* #APP */
966 /* START EEPROM READ CRITICAL SECTION */
967 06e4 F89A sbi 31, 0
968 06e6 80B5 in r24, 32
969 /* END EEPROM READ CRITICAL SECTION */
970
971 /* #NOAPP */
972 06e8 282F mov r18,r24
973 06ea 8630 cpi r24,lo8(6)
974 06ec 00F0 brlo .L114
975 06ee 23E0 ldi r18,lo8(3)
976 06f0 322F mov r19,r18
977 .L115:
978 06f2 F999 sbic 63-0x20,1
979 06f4 00C0 rjmp .L115
980 06f6 1FBA out 63-0x20,__zero_reg__
981 06f8 82E0 ldi r24,lo8(2)
982 06fa 90E0 ldi r25,hi8(2)
983 06fc 92BD out (65)+1-0x20,r25
984 06fe 81BD out 65-0x20,r24
985 0700 30BD out 64-0x20,r19
986 /* #APP */
987 /* START EEPROM WRITE CRITICAL SECTION */
988 0702 0FB6 in r0, 63
989 0704 F894 cli
990 0706 FA9A sbi 31, 2
991 0708 F99A sbi 31, 1
992 070a 0FBE out 63, r0
993 /* END EEPROM WRITE CRITICAL SECTION */
994 /* #NOAPP */
995 .L114:
996 070c 822F mov r24,r18
997 070e 9927 clr r25
998 /* epilogue: frame size=0 */
999 0710 0895 ret
1000 /* epilogue end (size=1) */
1001 /* function GetActiveParamSet size 46 (45) */
1003 .global SetDefaultParameter
1005 SetDefaultParameter:
1006 /* prologue: frame size=0 */
1007 0712 1F93 push r17
1008 0714 CF93 push r28
1009 /* prologue end (size=2) */
1010 0716 C82F mov r28,r24
1011 0718 162F mov r17,r22
1012 071a 8630 cpi r24,lo8(6)
1013 071c 00F0 brlo .L120
1014 071e C5E0 ldi r28,lo8(5)
1015 0720 00C0 rjmp .L121
1016 .L120:
1017 0722 8823 tst r24
1018 0724 01F4 brne .L121
1019 0726 C1E0 ldi r28,lo8(1)
1020 .L121:
1021 0728 8C2F mov r24,r28
1022 072a 9927 clr r25
1023 072c 8230 cpi r24,2
1024 072e 9105 cpc r25,__zero_reg__
1025 0730 01F0 breq .L125
1026 0732 8330 cpi r24,3
1027 0734 9105 cpc r25,__zero_reg__
1028 0736 04F4 brge .L127
1029 0738 0197 sbiw r24,1
1030 073a 01F4 brne .L127
1031 073c 0E94 0000 call ParamSet_DefaultSet1
1032 0740 00C0 rjmp .L123
1033 .L125:
1034 0742 0E94 0000 call ParamSet_DefaultSet2
1035 0746 00C0 rjmp .L123
1036 .L127:
1037 0748 0E94 0000 call ParamSet_DefaultSet3
1038 .L123:
1039 074c 1123 tst r17
1040 074e 01F0 breq .L129
1041 0750 6CE0 ldi r22,lo8(12)
1042 0752 70E0 ldi r23,hi8(12)
1043 0754 80E5 ldi r24,lo8(80)
1044 0756 90E0 ldi r25,hi8(80)
1045 0758 0E94 0000 call EEProm_Checksum
1046 075c 282F mov r18,r24
1047 .L131:
1048 075e F999 sbic 63-0x20,1
1049 0760 00C0 rjmp .L131
1050 0762 8CE5 ldi r24,lo8(92)
1051 0764 90E0 ldi r25,hi8(92)
1052 0766 92BD out (65)+1-0x20,r25
1053 0768 81BD out 65-0x20,r24
1054 /* #APP */
1055 /* START EEPROM READ CRITICAL SECTION */
1056 076a F89A sbi 31, 0
1057 076c 80B5 in r24, 32
1058 /* END EEPROM READ CRITICAL SECTION */
1059
1060 /* #NOAPP */
1061 076e 8217 cp r24,r18
1062 0770 01F4 brne .L129
1063 0772 20E0 ldi r18,lo8(pm(eeprom_read_byte))
1064 0774 30E0 ldi r19,hi8(pm(eeprom_read_byte))
1065 0776 4CE0 ldi r20,lo8(12)
1066 0778 50E0 ldi r21,hi8(12)
1067 077a 60E5 ldi r22,lo8(80)
1068 077c 70E0 ldi r23,hi8(80)
1069 077e 80E0 ldi r24,lo8(EE_Parameter+1)
1070 0780 90E0 ldi r25,hi8(EE_Parameter+1)
1071 0782 0E94 0000 call __eerd_block
1072 0786 00C0 rjmp .L137
1073 .L129:
1074 0788 0E94 0000 call ParamSet_DefaultStickMapping
1075 .L137:
1076 078c 8C2F mov r24,r28
1077 078e 0E94 0000 call ParamSet_WriteToEEProm
1078 /* epilogue: frame size=0 */
1079 0792 CF91 pop r28
1080 0794 1F91 pop r17
1081 0796 0895 ret
1082 /* epilogue end (size=3) */
1083 /* function SetDefaultParameter size 76 (71) */
1085 .section .progmem.data,"a",@progbits
1088 __c.0:
1089 0000 0A0D 4765 .string "\n\rGenerating default Parameter Set %d"
1089 6E65 7261
1089 7469 6E67
1089 2064 6566
1089 6175 6C74
1092 __c.1:
1093 0026 0A0D 5573 .string "\n\rUsing Parameter Set %d"
1093 696E 6720
1093 5061 7261
1093 6D65 7465
1093 7220 5365
1096 __c.2:
1097 003f 0A0D 4765 .string "\n\rGenerating default Mixer Table"
1097 6E65 7261
1097 7469 6E67
1097 2064 6566
1097 6175 6C74
1100 __c.3:
1101 0060 0A0D 4D69 .string "\n\rMixer-Config: '%s' (%u Motors)"
1101 7865 722D
1101 436F 6E66
1101 6967 3A20
1101 2725 7327
1102 .text
1103 .global ParamSet_Init
1105 ParamSet_Init:
1106 /* prologue: frame size=0 */
1107 0798 DF92 push r13
1108 079a EF92 push r14
1109 079c FF92 push r15
1110 079e 0F93 push r16
1111 07a0 1F93 push r17
1112 07a2 CF93 push r28
1113 /* prologue end (size=6) */
1114 07a4 FF24 clr r15
1115 07a6 DF2C mov r13,r15
1116 07a8 EF2C mov r14,r15
1117 07aa 81E0 ldi r24,lo8(1)
1118 07ac 90E0 ldi r25,hi8(1)
1119 07ae 0E94 0000 call GetParamByte
1120 07b2 8D35 cpi r24,lo8(93)
1121 07b4 01F0 breq .L139
1122 07b6 31E0 ldi r19,lo8(1)
1123 07b8 E32E mov r14,r19
1124 .L139:
1125 07ba 6CE0 ldi r22,lo8(12)
1126 07bc 70E0 ldi r23,hi8(12)
1127 07be 80E5 ldi r24,lo8(80)
1128 07c0 90E0 ldi r25,hi8(80)
1129 07c2 0E94 0000 call EEProm_Checksum
1130 07c6 C82F mov r28,r24
1131 .L141:
1132 07c8 F999 sbic 63-0x20,1
1133 07ca 00C0 rjmp .L141
1134 07cc 8CE5 ldi r24,lo8(92)
1135 07ce 90E0 ldi r25,hi8(92)
1136 07d0 92BD out (65)+1-0x20,r25
1137 07d2 81BD out 65-0x20,r24
1138 /* #APP */
1139 /* START EEPROM READ CRITICAL SECTION */
1140 07d4 F89A sbi 31, 0
1141 07d6 80B5 in r24, 32
1142 /* END EEPROM READ CRITICAL SECTION */
1143
1144 /* #NOAPP */
1145 07d8 8C17 cp r24,r28
1146 07da 01F4 brne .L140
1147 07dc 21E0 ldi r18,lo8(1)
1148 07de D22E mov r13,r18
1149 .L140:
1150 07e0 C1E0 ldi r28,lo8(1)
1151 07e2 01E0 ldi r16,lo8(1)
1152 07e4 10E0 ldi r17,hi8(1)
1153 .L159:
1154 07e6 EE20 tst r14
1155 07e8 01F4 brne .L149
1156 07ea 8C2F mov r24,r28
1157 07ec 0E94 0000 call ParamSet_ReadFromEEProm
1158 07f0 8823 tst r24
1159 07f2 01F4 brne .L147
1160 .L149:
1161 07f4 91E0 ldi r25,lo8(1)
1162 07f6 F92E mov r15,r25
1163 07f8 1F93 push r17
1164 07fa 0F93 push r16
1165 07fc 80E0 ldi r24,lo8(__c.0)
1166 07fe 90E0 ldi r25,hi8(__c.0)
1167 0800 9F93 push r25
1168 0802 8F93 push r24
1169 0804 80E0 ldi r24,lo8(pm(uart_putchar))
1170 0806 90E0 ldi r25,hi8(pm(uart_putchar))
1171 0808 9F93 push r25
1172 080a 8F93 push r24
1173 080c E091 0000 lds r30,_printf_P
1174 0810 F091 0000 lds r31,(_printf_P)+1
1175 0814 0995 icall
1176 0816 2DB7 in r18,__SP_L__
1177 0818 3EB7 in r19,__SP_H__
1178 081a 2A5F subi r18,lo8(-(6))
1179 081c 3F4F sbci r19,hi8(-(6))
1180 081e 2DBF out __SP_L__,r18
1181 0820 0230 cpi r16,2
1182 0822 1105 cpc r17,__zero_reg__
1183 0824 01F0 breq .L152
1184 0826 0330 cpi r16,3
1185 0828 1105 cpc r17,__zero_reg__
1186 082a 04F4 brge .L154
1187 082c 0130 cpi r16,1
1188 082e 1105 cpc r17,__zero_reg__
1189 0830 01F4 brne .L154
1190 0832 0E94 0000 call ParamSet_DefaultSet1
1191 0836 00C0 rjmp .L150
1192 .L152:
1193 0838 0E94 0000 call ParamSet_DefaultSet2
1194 083c 00C0 rjmp .L150
1195 .L154:
1196 083e 0E94 0000 call ParamSet_DefaultSet3
1197 .L150:
1198 0842 DD20 tst r13
1199 0844 01F0 breq .L156
1200 0846 20E0 ldi r18,lo8(pm(eeprom_read_byte))
1201 0848 30E0 ldi r19,hi8(pm(eeprom_read_byte))
1202 084a 4CE0 ldi r20,lo8(12)
1203 084c 50E0 ldi r21,hi8(12)
1204 084e 60E5 ldi r22,lo8(80)
1205 0850 70E0 ldi r23,hi8(80)
1206 0852 80E0 ldi r24,lo8(EE_Parameter+1)
1207 0854 90E0 ldi r25,hi8(EE_Parameter+1)
1208 0856 0E94 0000 call __eerd_block
1209 085a 00C0 rjmp .L158
1210 .L156:
1211 085c 0E94 0000 call ParamSet_DefaultStickMapping
1212 .L158:
1213 0860 8C2F mov r24,r28
1214 0862 0E94 0000 call ParamSet_WriteToEEProm
1215 .L147:
1216 0866 CF5F subi r28,lo8(-(1))
1217 0868 0F5F subi r16,lo8(-(1))
1218 086a 1F4F sbci r17,hi8(-(1))
1219 086c C630 cpi r28,lo8(6)
1220 086e 00F4 brsh .+2
1221 0870 00C0 rjmp .L159
1222 0872 FF20 tst r15
1223 0874 01F0 breq .L160
1224 0876 83E0 ldi r24,lo8(3)
1225 0878 0E94 0000 call SetActiveParamSet
1226 .L160:
1227 087c 0E94 0000 call GetActiveParamSet
1228 0880 C82F mov r28,r24
1229 0882 0E94 0000 call ParamSet_ReadFromEEProm
1230 0886 8C2F mov r24,r28
1231 0888 9927 clr r25
1232 088a 9F93 push r25
1233 088c 8F93 push r24
1234 088e 80E0 ldi r24,lo8(__c.1)
1235 0890 90E0 ldi r25,hi8(__c.1)
1236 0892 9F93 push r25
1237 0894 8F93 push r24
1238 0896 00E0 ldi r16,lo8(pm(uart_putchar))
1239 0898 10E0 ldi r17,hi8(pm(uart_putchar))
1240 089a 1F93 push r17
1241 089c 0F93 push r16
1242 089e E091 0000 lds r30,_printf_P
1243 08a2 F091 0000 lds r31,(_printf_P)+1
1244 08a6 0995 icall
1245 08a8 81E0 ldi r24,lo8(1)
1246 08aa 90E0 ldi r25,hi8(1)
1247 08ac 0E94 0000 call GetParamByte
1248 08b0 2DB7 in r18,__SP_L__
1249 08b2 3EB7 in r19,__SP_H__
1250 08b4 2A5F subi r18,lo8(-(6))
1251 08b6 3F4F sbci r19,hi8(-(6))
1252 08b8 2DBF out __SP_L__,r18
1253 08ba 8F3F cpi r24,lo8(-1)
1254 08bc 01F0 breq .L162
1255 08be 0E94 0000 call MixerTable_ReadFromEEProm
1256 08c2 8823 tst r24
1257 08c4 01F4 brne .L161
1258 .L162:
1259 08c6 80E0 ldi r24,lo8(__c.2)
1260 08c8 90E0 ldi r25,hi8(__c.2)
1261 08ca 9F93 push r25
1262 08cc 8F93 push r24
1263 08ce 1F93 push r17
1264 08d0 0F93 push r16
1265 08d2 E091 0000 lds r30,_printf_P
1266 08d6 F091 0000 lds r31,(_printf_P)+1
1267 08da 0995 icall
1268 08dc 0E94 0000 call MixerTable_Default
1269 08e0 0E94 0000 call MixerTable_WriteToEEProm
1270 08e4 0F90 pop __tmp_reg__
1271 08e6 0F90 pop __tmp_reg__
1272 08e8 0F90 pop __tmp_reg__
1273 08ea 0F90 pop __tmp_reg__
1274 .L161:
1275 08ec EE20 tst r14
1276 08ee 01F0 breq .L163
1277 08f0 6DE5 ldi r22,lo8(93)
1278 08f2 81E0 ldi r24,lo8(1)
1279 08f4 90E0 ldi r25,hi8(1)
1280 08f6 0E94 0000 call SetParamByte
1281 .L163:
1282 08fa 1092 0000 sts RequiredMotors,__zero_reg__
1283 08fe 90E0 ldi r25,lo8(0)
1284 0900 E0E0 ldi r30,lo8(Mixer+13)
1285 0902 F0E0 ldi r31,hi8(Mixer+13)
1286 0904 CFE0 ldi r28,lo8(15)
1287 .L168:
1288 0906 8081 ld r24,Z
1289 0908 3496 adiw r30,4
1290 090a 1816 cp __zero_reg__,r24
1291 090c 04F4 brge .L166
1292 090e 9F5F subi r25,lo8(-(1))
1293 .L166:
1294 0910 C150 subi r28,lo8(-(-1))
1295 0912 C7FF sbrs r28,7
1296 0914 00C0 rjmp .L168
1297 0916 9093 0000 sts RequiredMotors,r25
1298 091a 892F mov r24,r25
1299 091c 9927 clr r25
1300 091e 9F93 push r25
1301 0920 8F93 push r24
1302 0922 80E0 ldi r24,lo8(Mixer+1)
1303 0924 90E0 ldi r25,hi8(Mixer+1)
1304 0926 9F93 push r25
1305 0928 8F93 push r24
1306 092a 80E0 ldi r24,lo8(__c.3)
1307 092c 90E0 ldi r25,hi8(__c.3)
1308 092e 9F93 push r25
1309 0930 8F93 push r24
1310 0932 1F93 push r17
1311 0934 0F93 push r16
1312 0936 E091 0000 lds r30,_printf_P
1313 093a F091 0000 lds r31,(_printf_P)+1
1314 093e 0995 icall
1315 0940 0E94 0000 call PrintLine
1316 0944 8DB7 in r24,__SP_L__
1317 0946 9EB7 in r25,__SP_H__
1318 0948 0896 adiw r24,8
1319 094a 8DBF out __SP_L__,r24
1320 /* epilogue: frame size=0 */
1321 094c CF91 pop r28
1322 094e 1F91 pop r17
1323 0950 0F91 pop r16
1324 0952 FF90 pop r15
1325 0954 EF90 pop r14
1326 0956 DF90 pop r13
1327 0958 0895 ret
1328 /* epilogue end (size=7) */
1329 /* function ParamSet_Init size 233 (220) */
1331 .comm Mixer,78,1
1332 .comm RequiredMotors,1,1
1333 .comm EE_Parameter,125,1
1334 /* File "eeprom.c": code 1323 = 0x052b (1267), prologues 18, epilogues 38 */
DEFINED SYMBOLS
*ABS*:00000000 eeprom.c
C:\Temp/ccZdfoMd.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccZdfoMd.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccZdfoMd.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccZdfoMd.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccZdfoMd.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccZdfoMd.s:12 .text:00000000 eeprom_read_byte
C:\Temp/ccZdfoMd.s:34 .text:00000010 eeprom_write_byte
C:\Temp/ccZdfoMd.s:60 .text:00000028 RAM_Checksum
C:\Temp/ccZdfoMd.s:88 .text:0000004a EEProm_Checksum
C:\Temp/ccZdfoMd.s:128 .text:0000007a ParamSet_DefaultStickMapping
*COM*:0000007d EE_Parameter
C:\Temp/ccZdfoMd.s:162 .text:000000c4 CommonDefaults
C:\Temp/ccZdfoMd.s:320 .text:000002a4 ParamSet_DefaultSet1
C:\Temp/ccZdfoMd.s:368 .text:0000030e ParamSet_DefaultSet2
C:\Temp/ccZdfoMd.s:416 .text:00000378 ParamSet_DefaultSet3
C:\Temp/ccZdfoMd.s:459 .text:000003e0 GetParamByte
C:\Temp/ccZdfoMd.s:482 .text:000003f0 SetParamByte
C:\Temp/ccZdfoMd.s:508 .text:00000408 GetParamWord
C:\Temp/ccZdfoMd.s:521 .text:00000412 SetParamWord
C:\Temp/ccZdfoMd.s:534 .text:0000041c ParamSet_ReadFromEEProm
C:\Temp/ccZdfoMd.s:639 .text:000004c6 SetActiveParamSet
C:\Temp/ccZdfoMd.s:676 .text:000004f2 ParamSet_WriteToEEProm
C:\Temp/ccZdfoMd.s:774 .text:000005aa MixerTable_ReadFromEEProm
*COM*:0000004e Mixer
C:\Temp/ccZdfoMd.s:848 .text:00000612 MixerTable_WriteToEEProm
C:\Temp/ccZdfoMd.s:893 .text:0000064a MixerTable_Default
C:\Temp/ccZdfoMd.s:955 .text:000006d8 GetActiveParamSet
C:\Temp/ccZdfoMd.s:1005 .text:00000712 SetDefaultParameter
C:\Temp/ccZdfoMd.s:1088 .progmem.data:00000000 __c.0
C:\Temp/ccZdfoMd.s:1092 .progmem.data:00000026 __c.1
C:\Temp/ccZdfoMd.s:1096 .progmem.data:0000003f __c.2
C:\Temp/ccZdfoMd.s:1100 .progmem.data:00000060 __c.3
C:\Temp/ccZdfoMd.s:1105 .text:00000798 ParamSet_Init
*COM*:00000001 RequiredMotors
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
PlatinenVersion
__eerd_word
__eewr_word
__eerd_block
LED_Init
LIBFC_HoTT_Clear
LIBFC_CheckSettings
__eewr_block
uart_putchar
_printf_P
PrintLine
/branches/v0.90e_Ernstl_4-Motoren+Sexpander/fc.c
0,0 → 1,1943
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software Nutzungsbedingungen (english version: see below)
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt -
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen.
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu.
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden.
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand
// + des Mitverschuldens offen.
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet.
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt.
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern.
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt.
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software.
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####'
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Software LICENSING TERMS
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor -
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*.
// + The Software may only be used with the Licensor's products.
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this
// + agreement shall be the property of the Licensor.
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other
// + features that can be used to identify the program may not be altered or defaced by the customer.
// + The customer shall be responsible for taking reasonable precautions
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence.
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test
// + the software for his purpose before any operational usage. The customer will backup his data before using the software.
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations.
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range.
// + #### END OF LICENSING TERMS ####
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "mymath.h"
#include "isqrt.h"
 
unsigned char h,m,s;
unsigned int BaroExpandActive = 0;
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll;
int TrimNick, TrimRoll;
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
int Mittelwert_AccNick, Mittelwert_AccRoll;
unsigned int NeutralAccX=0, NeutralAccY=0;
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0;
int NeutralAccZ = 0;
unsigned char ControlHeading = 0;// in 2°
long IntegralNick = 0,IntegralNick2 = 0;
long IntegralRoll = 0,IntegralRoll2 = 0;
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
long Integral_Gier = 0;
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
long SummeNick=0,SummeRoll=0;
volatile long Mess_Integral_Hoch = 0;
int KompassValue = -1;
int KompassSollWert = 0;
//int KompassRichtung = 0;
char CalculateCompassTimer = 100;
unsigned char KompassFusion = 32;
unsigned int KompassSignalSchlecht = 50;
unsigned char MAX_GAS,MIN_GAS;
unsigned char HoehenReglerAktiv = 0;
unsigned char TrichterFlug = 0;
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L;
long ErsatzKompass;
int ErsatzKompassInGrad; // Kompasswert in Grad
int GierGyroFehler = 0;
char GyroFaktor,GyroFaktorGier;
char IntegralFaktor,IntegralFaktorGier;
int DiffNick,DiffRoll;
int StickGasHover = 120, HoverGasMin = 0, HoverGasMax = 1023;
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0;
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0;
unsigned char Poti[9] = {0,0,0,0,0,0,0,0};
volatile unsigned char SenderOkay = 0;
char MotorenEin = 0,StartTrigger = 0;
long HoehenWert = 0;
long SollHoehe = 0;
signed int AltitudeSetpointTrimming = 0;
long FromNC_AltitudeSetpoint = 0;
unsigned char FromNC_AltitudeSpeed = 0;
unsigned char carefree_old = 50; // to make the Beep when switching
signed char WaypointTrimming = 0;
int CompassGierSetpoint = 0;
unsigned char CalibrationDone = 0;
char NeueKompassRichtungMerken = 0;
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0;
//float Ki = FAKTOR_I;
int Ki = 10300 / 33;
unsigned char Looping_Nick = 0,Looping_Roll = 0;
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_HoehenSchalter = 251; // Wert : 0-250
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
unsigned char Parameter_Hoehe_GPS_Z = 64; // Wert : 0-250
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-250
unsigned char Parameter_Gier_P = 2; // Wert : 1-20
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
unsigned char Parameter_UserParam1 = 0;
unsigned char Parameter_UserParam2 = 0;
unsigned char Parameter_UserParam3 = 0;
unsigned char Parameter_UserParam4 = 0;
unsigned char Parameter_UserParam5 = 0;
unsigned char Parameter_UserParam6 = 0;
unsigned char Parameter_UserParam7 = 0;
unsigned char Parameter_UserParam8 = 0;
unsigned char Parameter_ServoNickControl = 100;
unsigned char Parameter_ServoRollControl = 100;
unsigned char Parameter_ServoNickComp = 50;
unsigned char Parameter_ServoRollComp = 85;
unsigned char Parameter_LoopGasLimit = 70;
unsigned char Parameter_AchsKopplung1 = 90;
unsigned char Parameter_AchsKopplung2 = 65;
unsigned char Parameter_CouplingYawCorrection = 64;
//unsigned char Parameter_AchsGegenKopplung1 = 0;
unsigned char Parameter_DynamicStability = 100;
unsigned char Parameter_J16Bitmask; // for the J16 Output
unsigned char Parameter_J16Timing; // for the J16 Output
unsigned char Parameter_J17Bitmask; // for the J17 Output
unsigned char Parameter_J17Timing; // for the J17 Output
unsigned char Parameter_NaviGpsModeControl; // Parameters for the Naviboard
unsigned char Parameter_NaviGpsGain;
unsigned char Parameter_NaviGpsP;
unsigned char Parameter_NaviGpsI;
unsigned char Parameter_NaviGpsD;
unsigned char Parameter_NaviGpsACC;
unsigned char Parameter_NaviOperatingRadius;
unsigned char Parameter_NaviWindCorrection;
unsigned char Parameter_NaviSpeedCompensation;
unsigned char Parameter_ExternalControl;
unsigned char Parameter_GlobalConfig;
unsigned char Parameter_ExtraConfig;
unsigned char Parameter_MaximumAltitude;
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5;
unsigned char CareFree = 0;
const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps
 
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
int MaxStickNick = 0,MaxStickRoll = 0;
unsigned int modell_fliegt = 0;
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0;
long GIER_GRAD_FAKTOR = 1291;
signed int KopplungsteilNickRoll,KopplungsteilRollNick;
signed int tmp_motorwert[MAX_MOTORS];
char VarioCharacter = ' ';
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void CopyDebugValues(void)
{
DebugOut.Analog[0] = IntegralNick / (EE_Parameter.GyroAccFaktor * 4);
DebugOut.Analog[1] = IntegralRoll / (EE_Parameter.GyroAccFaktor * 4);
DebugOut.Analog[2] = Mittelwert_AccNick / 4;
DebugOut.Analog[3] = Mittelwert_AccRoll / 4;
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier;
DebugOut.Analog[5] = HoehenWert/5;
DebugOut.Analog[6] = AdWertAccHoch;//(Mess_Integral_Hoch / 512);// Aktuell_az;
DebugOut.Analog[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_ServoNickComp,EE_Parameter.ServoNickComp);
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp);
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit);
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1);
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2);
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection);
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude);
if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude;
Parameter_GlobalConfig = EE_Parameter.GlobalConfig;
Parameter_ExtraConfig = EE_Parameter.ExtraConfig;
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability);
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl);
Ki = 10300 / (Parameter_I_Faktor + 1);
MAX_GAS = EE_Parameter.Gas_Max;
MIN_GAS = EE_Parameter.Gas_Min;
 
tmp = EE_Parameter.CareFreeModeControl;
if(tmp > 50)
{
CareFree = 1;
if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0;
if(carefree_old != CareFree)
{
if(carefree_old < 3)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; }
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; }
#else
if(CareFree) beeptime = 1500;
else beeptime = 200;
#endif
NeueKompassRichtungMerken = 5;
carefree_old = CareFree;
} else carefree_old--;
}
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE;
}
else
{
CareFree = 0;
carefree_old = 10;
}
 
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert
{
beeptime = 15000;
BeepMuster = 0xA400;
CareFree = 0;
}
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE;
}
 
//############################################################################
//
void MotorRegler(void)
//############################################################################
{
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2;
int GierMischanteil,GasMischanteil;
static long sollGier = 0,tmp_long,tmp_long2;
static long IntegralFehlerNick = 0;
static long IntegralFehlerRoll = 0;
static unsigned int RcLostTimer;
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static signed char move_safety_switch = 0;
static long ausgleichNick, ausgleichRoll;
int IntegralNickMalFaktor,IntegralRollMalFaktor;
unsigned char i;
Mittelwert();
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE)))
{
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE)
{
if(HoverGas && HoverGas < 150 * STICK_GAIN)
{
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas
}
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet
} else HooverGasEmergencyPercent = EE_Parameter.NotGas;
}
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed
{
StickGas = 0; // Hold Gas down in that case
HooverGasEmergencyPercent = MIN_GAS;
}
GasMischanteil = StickGas;
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Empfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE))
{
if(RcLostTimer) RcLostTimer--;
else
{
MotorenEin = 0;
modell_fliegt = 0;
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY);
}
ROT_ON;
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken
{
GasMischanteil = HooverGasEmergencyPercent;
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING;
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
}
else
{
MotorenEin = 0;
}
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
{
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING;
RcLostTimer = EE_Parameter.NotGasZeit * 50;
if(GasMischanteil > 40 && MotorenEin)
{
if(modell_fliegt < 0xffff) modell_fliegt++;
}
if((modell_fliegt < 256))
{
SummeNick = 0;
SummeRoll = 0;
sollGier = 0;
Mess_Integral_Gier = 0;
} else FC_StatusFlags |= FC_STATUS_FLY;
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
unsigned char setting=1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
SetActiveParamSet(setting); // aktiven Datensatz merken
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70)
{
WinkelOut.CalcState = 1;
CalibrationDone = 0;
beeptime = 1000;
}
else
{
ParamSet_ReadFromEEProm(GetActiveParamSet());
LipoDetection(0);
LIBFC_ReceiverInit(EE_Parameter.Receiver);
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
// ServoActive = 0;
SetNeutral(0);
CalibrationDone = 1;
ServoActive = 1;
DDRD |=0x80; // enable J7 -> Servo signal
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_CALIBRATE;
#endif
Piep(GetActiveParamSet(),120);
}
}
}
else
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern
{
if(++delay_neutral > 200) // nicht sofort
{
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
SetNeutral(1);
CalibrationDone = 1;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_CALIBRATE;
#endif
Piep(GetActiveParamSet(),120);
}
}
else delay_neutral = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gas ist unten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 35-120)
{
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100;
else
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100;
// Motoren Starten
if(!MotorenEin)
{
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100)))
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START;
if(++delay_einschalten > 253)
{
delay_einschalten = 0;
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode)
{
modell_fliegt = 1;
MotorenEin = 1;
sollGier = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick;
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll;
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
SummeNick = 0;
SummeRoll = 0;
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2;
NeueKompassRichtungMerken = 100; // 2 sekunden
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_STARTING;
#endif
}
else
{
beeptime = 1500; // indicate missing calibration
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION;
#endif
}
}
}
else delay_einschalten = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
else // only if motors are running
{
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0))
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0)))
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100)))
{
if(++delay_ausschalten > 250) // nicht sofort
{
MotorenEin = 0;
delay_ausschalten = 0;
modell_fliegt = 0;
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
SpeakHoTT = SPEAK_MK_OFF;
#endif
}
}
else delay_ausschalten = 0;
}
if(GasIsZeroCnt < 1000) GasIsZeroCnt++;
}
else // gas not at minimum
{
move_safety_switch = 0;
GasIsZeroCnt = 0;
}
}
else // Empfang zwischen 100 und 140 -> schlecht
{
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost
{
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed?
{
GasIsZeroCnt = 30000;
if(modell_fliegt > 1001) modell_fliegt = 1001;
}
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
static int stick_nick,stick_roll;
unsigned char stick_p;
ParameterZuordnung();
stick_p = EE_Parameter.Stick_P;
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4;
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4;
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// CareFree und freie Wahl der vorderen Richtung
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(CareFree)
{
signed int nick, roll;
nick = stick_nick / 4;
roll = stick_roll / 4;
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4);
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4);
}
else
{
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6];
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle];
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8;
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8;
}
 
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
if(StickGier > 4) StickGier -= 4; else
if(StickGier < -4) StickGier += 4; else StickGier = 0;
 
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger
{
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16;
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16;
}
 
StickNick -= GPS_Nick;
StickRoll -= GPS_Roll;
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127;
 
GyroFaktor = (Parameter_Gyro_P + 10.0);
IntegralFaktor = Parameter_Gyro_I;
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0);
IntegralFaktorGier = Parameter_Gyro_Gier_I;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+ Analoge Steuerung per Seriell
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128)
{
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P;
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P;
StickGier += ExternControl.Gier;
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung;
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas;
}
if(StickGas < 0) StickGas = 0;
 
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
 
if(abs(StickNick/STICK_GAIN) > MaxStickNick)
{
MaxStickNick = abs(StickNick)/STICK_GAIN;
if(MaxStickNick > 100) MaxStickNick = 100;
}
else MaxStickNick--;
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll)
{
MaxStickRoll = abs(StickRoll)/STICK_GAIN;
if(MaxStickRoll > 100) MaxStickRoll = 100;
}
else MaxStickRoll--;
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Looping?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1;
else
{
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1;
else
{
if(Looping_Rechts) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0;
}
}
 
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1;
else
{
if(Looping_Oben) // Hysterese
{
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0;
}
}
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1;
else
{
if(Looping_Unten) // Hysterese
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0;
}
}
 
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0;
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0;
} // Ende neue Funken-Werte
 
if(Looping_Roll || Looping_Nick)
{
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit;
TrichterFlug = 1;
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)
{
StickNick = -GPS_Nick;
StickRoll = -GPS_Roll;
StickGas = StickGasHover;
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER);
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV;
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP);
Parameter_HoehenSchalter = 200; // switch on
}
else
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)
{
StickGier = 0;
StickNick = 0;
StickRoll = 0;
GyroFaktor = 90;
IntegralFaktor = 120;
GyroFaktorGier = 90;
IntegralFaktorGier = 120;
Looping_Roll = 0;
Looping_Nick = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define ABGLEICH_ANZAHL 256L
 
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren
MittelIntegralRoll += IntegralRoll;
MittelIntegralNick2 += IntegralNick2;
MittelIntegralRoll2 += IntegralRoll2;
 
if(Looping_Nick || Looping_Roll)
{
IntegralAccNick = 0;
IntegralAccRoll = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
Mess_IntegralNick2 = Mess_IntegralNick;
Mess_IntegralRoll2 = Mess_IntegralRoll;
ZaehlMessungen = 0;
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin))
{
long tmp_long, tmp_long2;
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/)
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN));
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR));
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16);
if((MaxStickNick > 64) || (MaxStickRoll > 64))
{
tmp_long /= 2;
tmp_long2 /= 2;
}
/* if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
{
tmp_long /= 3;
tmp_long2 /= 3;
}
*/ if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion;
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion;
}
else
{
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long /= 16;
tmp_long2 /= 16;
if((MaxStickNick > 64) || (MaxStickRoll > 64))
{
tmp_long /= 3;
tmp_long2 /= 3;
}
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)
{
tmp_long /= 3;
tmp_long2 /= 3;
}
KompassFusion = 25;
#define AUSGLEICH 32
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
}
 
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
{
static int cnt = 0;
static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp)
{
MittelIntegralNick /= ABGLEICH_ANZAHL;
MittelIntegralRoll /= ABGLEICH_ANZAHL;
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL;
#define MAX_I 0
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
 
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL;
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL;
 
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1))
{
LageKorrekturNick /= 2;
LageKorrekturRoll /= 2;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick2 /= ABGLEICH_ANZAHL;
MittelIntegralRoll2 /= ABGLEICH_ANZAHL;
tmp_long = IntegralNick2 - IntegralNick;
tmp_long2 = IntegralRoll2 - IntegralRoll;
 
IntegralFehlerNick = tmp_long;
IntegralFehlerRoll = tmp_long2;
Mess_IntegralNick2 -= IntegralFehlerNick;
Mess_IntegralRoll2 -= IntegralFehlerRoll;
 
if(EE_Parameter.Driftkomp)
{
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; }
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; }
}
GierGyroFehler = 0;
 
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2)
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16
#define BEWEGUNGS_LIMIT 20000
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4;
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8))
{
if(IntegralFehlerNick > FEHLER_LIMIT2)
{
if(last_n_p)
{
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8);
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick > 5000) ausgleichNick = 5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_p = 1;
} else last_n_p = 0;
if(IntegralFehlerNick < -FEHLER_LIMIT2)
{
if(last_n_n)
{
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8);
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick < -5000) ausgleichNick = -5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_n = 1;
} else last_n_n = 0;
}
else
{
cnt = 0;
KompassSignalSchlecht = 100;
}
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift;
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt;
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt;
 
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerRoll) / 4096;
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4;
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8))
{
if(IntegralFehlerRoll > FEHLER_LIMIT2)
{
if(last_r_p)
{
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8);
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll > 5000) ausgleichRoll = 5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_p = 1;
} else last_r_p = 0;
if(IntegralFehlerRoll < -FEHLER_LIMIT2)
{
if(last_r_n)
{
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8);
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll < -5000) ausgleichRoll = -5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_n = 1;
} else last_r_n = 0;
} else
{
cnt = 0;
KompassSignalSchlecht = 100;
}
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift;
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt;
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt;
}
else
{
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
TrichterFlug = 0;
}
 
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
MittelIntegralRoll_Alt = MittelIntegralRoll;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
IntegralAccNick = 0;
IntegralAccRoll = 0;
IntegralAccZ = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
ZaehlMessungen = 0;
} // ZaehlMessungen >= ABGLEICH_ANZAHL
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 3) // war 15
{
// KompassSignalSchlecht = 1000;
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX))
{
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen
};
}
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4;
tmp_int += CompassGierSetpoint;
sollGier = tmp_int;
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV))
{
if(CalculateCompassTimer-- == 1)
{
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt
CalculateCompassTimer = 13; // falls keine Navi-Daten
// max. Korrekturwert schätzen
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /512);
if(v > w) w = v; // grösste Neigung ermitteln
// korrektur = w / 4 + 1;
korrektur = w / 8 + 2;
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR;
// Kompassfehlerwert bestimmen
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180;
// GIER_GRAD_FAKTOR ist ca. 1200
// Kompasswert einloggen
if(KompassSignalSchlecht) KompassSignalSchlecht--;
else
if(w < 25)
{
GierGyroFehler += fehler;
if(NeueKompassRichtungMerken)
{
if(--NeueKompassRichtungMerken == 0)
{
KompassSollWert = ErsatzKompassInGrad;
}
}
}
// Kompass fusionieren
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur;
// MK Gieren
if(!NeueKompassRichtungMerken)
{
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180;
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten
CompassGierSetpoint = v / 16;
}
else CompassGierSetpoint = 0;
} // CalculateCompassTimer
}
else CompassGierSetpoint = 0;
 
//DebugOut.Analog[16] = KompassFusion;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;};
 
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0;
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0;
 
#define TRIM_MAX 200
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX;
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX;
 
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN));
 
// Maximalwerte abfangen
#define MAX_SENSOR (4096)
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Höhenregelung
// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(UBat > BattLowVoltageWarning) GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen
GasMischanteil *= STICK_GAIN;
// if height control is activated
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick)) // Höhenregelung
{
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging
 
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
#define OPA_OFFSET_STEP 15
#else
#define OPA_OFFSET_STEP 10
#endif
int HCGas, HeightDeviation = 0,GasReduction = 0;
static int HeightTrimming = 0; // rate for change of height setpoint
static int FilterHCGas = 0;
static unsigned long HoverGasFilter = 0;
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0;
int CosAttitude; // for projection of hoover gas
 
// get the current hooverpoint
DebugOut.Analog[21] = HoverGas;
 
// Expand the measurement
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs
if(!BaroExpandActive)
{
if(MessLuftdruck > 920)
{ // increase offset
if(OCR0A < (255 - OPA_OFFSET_STEP))
{
ExpandBaro -= 1;
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down
beeptime = 300;
BaroExpandActive = 350;
}
else
{
BaroAtLowerLimit = 1;
}
}
// measurement of air pressure close to lower limit and
else
if(MessLuftdruck < 100)
{ // decrease offset
if(OCR0A > OPA_OFFSET_STEP)
{
ExpandBaro += 1;
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up
beeptime = 300;
BaroExpandActive = 350;
}
else
{
BaroAtUpperLimit = 1;
}
}
else
{
BaroAtUpperLimit = 0;
BaroAtLowerLimit = 0;
}
}
else // delay, because of expanding the Baro-Range
{
// now clear the D-values
SummenHoehe = HoehenWert * SM_FILTER;
VarioMeter = 0;
BaroExpandActive--;
}
 
// if height control is activated by an rc channel
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
{ // check if parameter is less than activation threshold
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position
{ //height control not active
if(!delay--)
{
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF;
#endif
HoehenReglerAktiv = 0; // disable height control
SollHoehe = HoehenWert; // update SetPoint with current reading
delay = 1;
}
}
else
if(Parameter_HoehenSchalter > 70)
{ //height control is activated
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__))
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON;
#endif
delay = 200;
HoehenReglerAktiv = 1; // enable height control
}
}
else // no switchable height control
{
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung;
HoehenReglerAktiv = 1;
}
// calculate cos of nick and roll angle used for projection of the vertical hoover gas
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude
VarioCharacter = ' ';
AltitudeSetpointTrimming = 0;
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
#define HEIGHT_CONTROL_STICKTHRESHOLD 15
// Holger original version
// start of height control algorithm
// the height control is only an attenuation of the actual gas stick.
// I.e. it will work only if the gas stick is higher than the hover gas
// and the hover height will be allways larger than height setpoint.
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL;
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert)
{ // old version
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control
HeightTrimming = 0;
AltitudeSetpointTrimming = 0;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
}
else
{
// alternative height control
// PD-Control with respect to hoover point
// the thrust loss out of horizontal attitude is compensated
// the setpoint will be fine adjusted with the gas stick position
if(FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying
{ // gas stick is above hoover point
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit)
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN)
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
// Limit the maximum Altitude
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) AltitudeSetpointTrimming = 0;
else
{
// SollHoehe = (long) Parameter_MaximumAltitude * 100L;
// HeightTrimming += abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD));
VarioCharacter = '+';
}
WaypointTrimming = 0;
} // gas stick is below hoover point
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit )
{
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP)
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
// HeightTrimming -= abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD));
VarioCharacter = '-';
WaypointTrimming = 0;
}
else // Gas Stick in Hover Range
{
VarioCharacter = '=';
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP;
AltitudeSetpointTrimming = FromNC_AltitudeSpeed;
//HeightTrimming += FromNC_AltitudeSpeed;
WaypointTrimming = 10;
VarioCharacter = '^';
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
}
else
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken
{
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN;
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed;
//HeightTrimming -= FromNC_AltitudeSpeed;
WaypointTrimming = -10;
VarioCharacter = 'v';
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking
{
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP;
SollHoehe = HoehenWert; // update setpoint to current heigth
}
}
else
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN))
{
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWert-128), (HoehenWert+128)) // max. 1m Unterschied
else WaypointTrimming = 0;
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
HeightTrimming = 0;
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500;
if(!StartTrigger && HoehenWert > 50)
{
StartTrigger = 1;
}
}
}
// Trim height set point
HeightTrimming += AltitudeSetpointTrimming;
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz
{
if(WaypointTrimming)
{
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint;
else SollHoehe += WaypointTrimming;
}
else
{
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3;
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3;
}
HeightTrimming = 0;
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100;
//update hoover gas stick value when setpoint is shifted
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0)
{
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning;
if(StickGasHover < 70) StickGasHover = 70;
else if(StickGasHover > 150) StickGasHover = 150;
}
}
if(BaroExpandActive) SollHoehe = HoehenWert; // update setpoint to current altitude if Expanding is active
} //if FCFlags & MKFCFLAG_FLY
else
{
SollHoehe = HoehenWert - 400;
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
else StickGasHover = 120;
HoverGas = GasMischanteil;
VarioCharacter = '.';
}
HCGas = HoverGas; // take hover gas (neutral point)
}
if(HoehenWert > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT))
{
// from this point the Heigth Control Algorithm is identical for both versions
if(BaroExpandActive) // baro range expanding active
{
HCGas = HoverGas; // hover while expanding baro adc range
HeightDeviation = 0;
} // EOF // baro range expanding active
else // valid data from air pressure sensor
{
// ------------------------- P-Part ----------------------------
tmp_long = (HoehenWert - SollHoehe); // positive when too high
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t
HeightDeviation = (int)(tmp_long); // positive when too high
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense
GasReduction = tmp_long;
// ------------------------- D-Part 1: Vario Meter ----------------------------
tmp_int = VarioMeter / 8;
LIMIT_MIN_MAX(tmp_int, -127, 128);
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN);
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint
else
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode
GasReduction += tmp_int;
} // EOF no baro range expanding
// ------------------------ D-Part 2: ACC-Z Integral ------------------------
if(Parameter_Hoehe_ACC_Wirkung)
{
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN);
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_long;
}
// ------------------------ D-Part 3: GpsZ ----------------------------------
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L;
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN);
GasReduction += tmp_int;
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value
// ------------------------ ----------------------------------
HCGas -= GasReduction;
// limit deviation from hoover point within the target region
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero
{
unsigned int tmp;
tmp = abs(HeightDeviation);
if(tmp <= 60)
{
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (tmp - 60) / 32;
if(tmp > 15) tmp = 15;
if(HeightDeviation > 0)
{
tmp = (HoverGasMin * (16 - tmp)) / 16;
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point
}
else
{
tmp = (HoverGasMax * (tmp + 16)) / 16;
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point
}
}
}
// strech control output by inverse attitude projection 1/cos
// + 1/cos(angle) ++++++++++++++++++++++++++
tmp_long2 = (int32_t)HCGas;
tmp_long2 *= 8192L;
tmp_long2 /= CosAttitude;
HCGas = (int16_t)tmp_long2;
// update height control gas averaging
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE;
// limit height control gas pd-control output
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN);
// set GasMischanteil to HeightControlGasFilter
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)
{ // old version
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas
GasMischanteil = FilterHCGas;
}
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode
}
}// EOF height control active
else // HC not active
{
//update hoover gas stick value when HC is not active
if(!EE_Parameter.Hoehe_StickNeutralPoint)
{
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value
StickGasHover = (StickGasHover * UBat) / BattLowVoltageWarning;
}
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint;
LIMIT_MIN_MAX(StickGasHover, 70, 150); // reserve some range for trim up and down
FilterHCGas = GasMischanteil;
// set both flags to indicate no vario mode
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL;
}
// Hover gas estimation by averaging gas control output on small z-velocities
// this is done only if height contol option is selected in global config and aircraft is flying
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING))
{
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation
if(StartTrigger == 1) StartTrigger = 2;
tmp_long2 = (int32_t)GasMischanteil; // take current thrust
tmp_long2 *= CosAttitude; // apply attitude projection
tmp_long2 /= 8192;
// average vertical projected thrust
if(modell_fliegt < 4000) // the first 8 seconds
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L);
HoverGasFilter += 16L * tmp_long2;
}
if(modell_fliegt < 8000) // the first 16 seconds
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L);
HoverGasFilter += 4L * tmp_long2;
}
else //later
if(abs(VarioMeter) < 100 && abs(HoehenWert - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending)
{
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE;
HoverGasFilter += tmp_long2;
}
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE);
if(EE_Parameter.Hoehe_HoverBand)
{
int16_t band;
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range
HoverGasMin = HoverGas - band;
HoverGasMax = HoverGas + band;
}
else
{ // no limit
HoverGasMin = 0;
HoverGasMax = 1023;
}
}
else
{
StartTrigger = 0;
HoverGasFilter = 0;
HoverGas = 0;
}
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL
else
{
// set undefined state to indicate vario off
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN);
} // EOF no height control
 
// Linits the maximum gas in case of "Out of Range emergency landing"
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING)
{
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN;
SollHoehe = HoehenWert; // update setpoint to current heigth
beeptime = 15000;
BeepMuster = 0x0E00;
}
// limit gas to parameter setting
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN);
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// all BL-Ctrl connected?
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(MissingMotor || Capacity.MinOfMaxPWM != 255 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase
{
modell_fliegt = 1;
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Mischer und PI-Regler
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Analog[7] = GasMischanteil;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gier-Anteil
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren
if(GasMischanteil > MIN_GIERGAS)
{
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2);
}
else
{
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2;
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2);
}
tmp_int = MAX_GAS*STICK_GAIN;
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil));
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil));
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - StickNick; // Differenz bestimmen
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung
else SummeNick += DiffNick; // I-Anteil bei HH
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L);
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN);
 
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern
pd_ergebnis_nick += SummeNick / Ki;
 
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int;
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Roll-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung
else SummeRoll += DiffRoll; // I-Anteil bei HH
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L);
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN);
 
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern
pd_ergebnis_roll += SummeRoll / Ki;
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int;
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Universal Mixer
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for(i=0; i<MAX_MOTORS; i++)
{
signed int tmp_int;
if(Mixer.Motor[i][0] > 0)
{
// Gas
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L;
// Nick
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick;
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick;
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L;
// Roll
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll;
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll;
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L;
// Gier
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil;
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil;
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L;
 
if(tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // MotorSmoothing
// else tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
else
{
if(EE_Parameter.MotorSmooth == 0)
{
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing
}
else // 1 means tmp_int = tmp_int;
if(EE_Parameter.MotorSmooth > 1)
{
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value.
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int)/EE_Parameter.MotorSmooth);
}
}
 
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4);
Motor[i].SetPoint = tmp_int / 4;
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total)
tmp_motorwert[i] = tmp_int;
}
else
{
Motor[i].SetPoint = 0;
Motor[i].SetPointLowerBits = 0;
}
}
}
//DebugOut.Analog[16]
/branches/v0.90e_Ernstl_4-Motoren+Sexpander/fc.h
0,0 → 1,141
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel
//#define GIER_GRAD_FAKTOR 1160L
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel
#define STICK_GAIN 4
#define ACC_AMPLIFY 6
 
// FC_StatusFlags
#define FC_STATUS_MOTOR_RUN 0x01
#define FC_STATUS_FLY 0x02
#define FC_STATUS_CALIBRATE 0x04
#define FC_STATUS_START 0x08
#define FC_STATUS_EMERGENCY_LANDING 0x10
#define FC_STATUS_LOWBAT 0x20
#define FC_STATUS_VARIO_TRIM_UP 0x40
#define FC_STATUS_VARIO_TRIM_DOWN 0x80
 
// FC_StatusFlags2
#define FC_STATUS2_CAREFREE 0x01
#define FC_STATUS2_ALTITUDE_CONTROL 0x02
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04
#define FC_STATUS2_OUT1_ACTIVE 0x08
#define FC_STATUS2_OUT2_ACTIVE 0x10
 
//NC_To_FC_Flags
#define NC_TO_FC_FLYING_RANGE 0x01
#define NC_TO_FC_EMERGENCY_LANDING 0x02
 
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2;
extern void ParameterZuordnung(void);
 
#define Poti1 Poti[0]
#define Poti2 Poti[1]
#define Poti3 Poti[2]
#define Poti4 Poti[3]
#define Poti5 Poti[4]
#define Poti6 Poti[5]
#define Poti7 Poti[6]
#define Poti8 Poti[7]
 
#define LIMIT_MIN(value, min) {if(value <= min) value = min;}
#define LIMIT_MAX(value, max) {if(value >= max) value = max;}
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;}
 
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];}
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;}
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);}
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);}
 
extern unsigned char Sekunde,Minute;
extern unsigned int BaroExpandActive;
extern long IntegralNick,IntegralNick2;
extern long IntegralRoll,IntegralRoll2;
//extern int IntegralNick,IntegralNick2;
//extern int IntegralRoll,IntegralRoll2;
extern unsigned char Poti[9];
 
extern long Mess_IntegralNick,Mess_IntegralNick2;
extern long Mess_IntegralRoll,Mess_IntegralRoll2;
extern long IntegralAccNick,IntegralAccRoll;
extern long SummeNick,SummeRoll;
extern volatile long Mess_Integral_Hoch;
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern int KompassValue;
extern int KompassSollWert;
extern int KompassRichtung;
extern char CalculateCompassTimer;
extern unsigned char KompassFusion;
extern unsigned char ControlHeading;
extern int TrimNick, TrimRoll;
extern long ErsatzKompass;
extern int ErsatzKompassInGrad; // Kompasswert in Grad
extern long HoehenWert;
extern long SollHoehe;
extern long FromNC_AltitudeSetpoint;
extern unsigned char FromNC_AltitudeSpeed;
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250
extern unsigned char CareFree;
extern int MesswertNick,MesswertRoll,MesswertGier;
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern unsigned int NeutralAccX, NeutralAccY;
extern unsigned char HoehenReglerAktiv;
extern int NeutralAccZ;
extern long Umschlag180Nick, Umschlag180Roll;
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier;
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8;
extern int NaviAccNick,NaviAccRoll,NaviCntAcc;
extern unsigned int modell_fliegt;
extern void MotorRegler(void);
extern void SendMotorData(void);
//void CalibrierMittelwert(void);
//void Mittelwert(void);
extern void SetNeutral(unsigned char AccAdjustment);
extern void Piep(unsigned char Anzahl, unsigned int dauer);
extern void CopyDebugValues(void);
 
extern unsigned char h,m,s;
extern int StickNick,StickRoll,StickGier,StickGas;
extern volatile unsigned char Timeout ;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
extern int DiffNick,DiffRoll;
//extern int Poti1, Poti2, Poti3, Poti4;
extern volatile unsigned char SenderOkay;
extern int StickNick,StickRoll,StickGier;
extern char MotorenEin;
extern unsigned char CalibrationDone;
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5;
extern char VarioCharacter;
extern signed int AltitudeSetpointTrimming;
extern signed char WaypointTrimming;
extern int HoverGas;
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
extern unsigned char Parameter_ServoRollControl;
extern unsigned char Parameter_ServoNickComp;
extern unsigned char Parameter_ServoRollComp;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsKopplung2;
//extern unsigned char Parameter_AchsGegenKopplung1;
extern unsigned char Parameter_J16Bitmask; // for the J16 Output
extern unsigned char Parameter_J16Timing; // for the J16 Output
extern unsigned char Parameter_J17Bitmask; // for the J17 Output
extern unsigned char Parameter_J17Timing; // for the J17 Output
extern unsigned char Parameter_GlobalConfig;
extern unsigned char Parameter_ExtraConfig;
extern signed char MixerTable[MAX_MOTORS][4];
extern const signed char sintab[31];
#endif //_FC_H
 
/branches/v0.90e_Ernstl_4-Motoren+Sexpander/fc.lst
0,0 → 1,11012
1 .file "fc.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global GasIsZeroCnt
11 .global GasIsZeroCnt
12 .section .bss
15 GasIsZeroCnt:
16 0000 0000 .skip 2,0
17 .global HooverGasEmergencyPercent
18 .global HooverGasEmergencyPercent
21 HooverGasEmergencyPercent:
22 0002 0000 .skip 2,0
23 .global VarioCharacter
24 .data
27 VarioCharacter:
28 0000 20 .byte 32
29 .global GIER_GRAD_FAKTOR
32 GIER_GRAD_FAKTOR:
33 0001 0B05 0000 .long 1291
34 .global FC_StatusFlags2
35 .global FC_StatusFlags2
36 .section .bss
39 FC_StatusFlags2:
40 0004 00 .skip 1,0
41 .global FC_StatusFlags
42 .global FC_StatusFlags
45 FC_StatusFlags:
46 0005 00 .skip 1,0
47 .global modell_fliegt
48 .global modell_fliegt
51 modell_fliegt:
52 0006 0000 .skip 2,0
53 .global MaxStickRoll
54 .global MaxStickRoll
57 MaxStickRoll:
58 0008 0000 .skip 2,0
59 .global MaxStickNick
60 .global MaxStickNick
63 MaxStickNick:
64 000a 0000 .skip 2,0
65 .global ExternHoehenValue
66 .data
69 ExternHoehenValue:
70 0005 ECFF .word -20
71 .global ExternStickGier
72 .global ExternStickGier
73 .section .bss
76 ExternStickGier:
77 000c 0000 .skip 2,0
78 .global ExternStickRoll
79 .global ExternStickRoll
82 ExternStickRoll:
83 000e 0000 .skip 2,0
84 .global ExternStickNick
85 .global ExternStickNick
88 ExternStickNick:
89 0010 0000 .skip 2,0
90 .global sintab
91 .data
94 sintab:
95 0007 00 .byte 0
96 0008 02 .byte 2
97 0009 04 .byte 4
98 000a 06 .byte 6
99 000b 07 .byte 7
100 000c 08 .byte 8
101 000d 08 .byte 8
102 000e 08 .byte 8
103 000f 07 .byte 7
104 0010 06 .byte 6
105 0011 04 .byte 4
106 0012 02 .byte 2
107 0013 00 .byte 0
108 0014 FE .byte -2
109 0015 FC .byte -4
110 0016 FA .byte -6
111 0017 F9 .byte -7
112 0018 F8 .byte -8
113 0019 F8 .byte -8
114 001a F8 .byte -8
115 001b F9 .byte -7
116 001c FA .byte -6
117 001d FC .byte -4
118 001e FE .byte -2
119 001f 00 .byte 0
120 0020 02 .byte 2
121 0021 04 .byte 4
122 0022 06 .byte 6
123 0023 07 .byte 7
124 0024 08 .byte 8
125 0025 08 .byte 8
126 .global CareFree
127 .global CareFree
128 .section .bss
131 CareFree:
132 0012 00 .skip 1,0
133 .global Parameter_DynamicStability
134 .data
137 Parameter_DynamicStability:
138 0026 64 .byte 100
139 .global Parameter_CouplingYawCorrection
142 Parameter_CouplingYawCorrection:
143 0027 40 .byte 64
144 .global Parameter_AchsKopplung2
147 Parameter_AchsKopplung2:
148 0028 41 .byte 65
149 .global Parameter_AchsKopplung1
152 Parameter_AchsKopplung1:
153 0029 5A .byte 90
154 .global Parameter_LoopGasLimit
157 Parameter_LoopGasLimit:
158 002a 46 .byte 70
159 .global Parameter_ServoRollComp
162 Parameter_ServoRollComp:
163 002b 55 .byte 85
164 .global Parameter_ServoNickComp
167 Parameter_ServoNickComp:
168 002c 32 .byte 50
169 .global Parameter_ServoRollControl
172 Parameter_ServoRollControl:
173 002d 64 .byte 100
174 .global Parameter_ServoNickControl
177 Parameter_ServoNickControl:
178 002e 64 .byte 100
179 .global Parameter_UserParam8
180 .global Parameter_UserParam8
181 .section .bss
184 Parameter_UserParam8:
185 0013 00 .skip 1,0
186 .global Parameter_UserParam7
187 .global Parameter_UserParam7
190 Parameter_UserParam7:
191 0014 00 .skip 1,0
192 .global Parameter_UserParam6
193 .global Parameter_UserParam6
196 Parameter_UserParam6:
197 0015 00 .skip 1,0
198 .global Parameter_UserParam5
199 .global Parameter_UserParam5
202 Parameter_UserParam5:
203 0016 00 .skip 1,0
204 .global Parameter_UserParam4
205 .global Parameter_UserParam4
208 Parameter_UserParam4:
209 0017 00 .skip 1,0
210 .global Parameter_UserParam3
211 .global Parameter_UserParam3
214 Parameter_UserParam3:
215 0018 00 .skip 1,0
216 .global Parameter_UserParam2
217 .global Parameter_UserParam2
220 Parameter_UserParam2:
221 0019 00 .skip 1,0
222 .global Parameter_UserParam1
223 .global Parameter_UserParam1
226 Parameter_UserParam1:
227 001a 00 .skip 1,0
228 .global Parameter_I_Faktor
229 .data
232 Parameter_I_Faktor:
233 002f 0A .byte 10
234 .global Parameter_Gier_P
237 Parameter_Gier_P:
238 0030 02 .byte 2
239 .global Parameter_Gyro_Gier_I
242 Parameter_Gyro_Gier_I:
243 0031 96 .byte -106
244 .global Parameter_Gyro_Gier_P
247 Parameter_Gyro_Gier_P:
248 0032 96 .byte -106
249 .global Parameter_Gyro_I
252 Parameter_Gyro_I:
253 0033 96 .byte -106
254 .global Parameter_Gyro_P
257 Parameter_Gyro_P:
258 0034 96 .byte -106
259 .global Parameter_Gyro_D
262 Parameter_Gyro_D:
263 0035 08 .byte 8
264 .global Parameter_Hoehe_GPS_Z
267 Parameter_Hoehe_GPS_Z:
268 0036 40 .byte 64
269 .global Parameter_KompassWirkung
272 Parameter_KompassWirkung:
273 0037 40 .byte 64
274 .global Parameter_Hoehe_ACC_Wirkung
277 Parameter_Hoehe_ACC_Wirkung:
278 0038 3A .byte 58
279 .global Parameter_Hoehe_P
282 Parameter_Hoehe_P:
283 0039 10 .byte 16
284 .global Parameter_HoehenSchalter
287 Parameter_HoehenSchalter:
288 003a FB .byte -5
289 .global Parameter_Luftdruck_D
292 Parameter_Luftdruck_D:
293 003b 30 .byte 48
294 .global Looping_Oben
295 .global Looping_Oben
296 .section .bss
299 Looping_Oben:
300 001b 00 .skip 1,0
301 .global Looping_Unten
302 .global Looping_Unten
305 Looping_Unten:
306 001c 00 .skip 1,0
307 .global Looping_Rechts
308 .global Looping_Rechts
311 Looping_Rechts:
312 001d 00 .skip 1,0
313 .global Looping_Links
314 .global Looping_Links
317 Looping_Links:
318 001e 00 .skip 1,0
319 .global Looping_Roll
320 .global Looping_Roll
323 Looping_Roll:
324 001f 00 .skip 1,0
325 .global Looping_Nick
326 .global Looping_Nick
329 Looping_Nick:
330 0020 00 .skip 1,0
331 .global Ki
332 .data
335 Ki:
336 003c 3801 .word 312
337 .global HoverGas
338 .global HoverGas
339 .section .bss
342 HoverGas:
343 0021 0000 .skip 2,0
344 .global LageKorrekturNick
345 .global LageKorrekturNick
348 LageKorrekturNick:
349 0023 0000 .skip 2,0
350 .global LageKorrekturRoll
351 .global LageKorrekturRoll
354 LageKorrekturRoll:
355 0025 0000 .skip 2,0
356 .global NeueKompassRichtungMerken
357 .global NeueKompassRichtungMerken
360 NeueKompassRichtungMerken:
361 0027 00 .skip 1,0
362 .global CalibrationDone
363 .global CalibrationDone
366 CalibrationDone:
367 0028 00 .skip 1,0
368 .global CompassGierSetpoint
369 .global CompassGierSetpoint
372 CompassGierSetpoint:
373 0029 0000 .skip 2,0
374 .global WaypointTrimming
375 .global WaypointTrimming
378 WaypointTrimming:
379 002b 00 .skip 1,0
380 .global carefree_old
381 .data
384 carefree_old:
385 003e 32 .byte 50
386 .global FromNC_AltitudeSpeed
387 .global FromNC_AltitudeSpeed
388 .section .bss
391 FromNC_AltitudeSpeed:
392 002c 00 .skip 1,0
393 .global FromNC_AltitudeSetpoint
394 .global FromNC_AltitudeSetpoint
397 FromNC_AltitudeSetpoint:
398 002d 0000 0000 .skip 4,0
399 .global AltitudeSetpointTrimming
400 .global AltitudeSetpointTrimming
403 AltitudeSetpointTrimming:
404 0031 0000 .skip 2,0
405 .global SollHoehe
406 .global SollHoehe
409 SollHoehe:
410 0033 0000 0000 .skip 4,0
411 .global HoehenWert
412 .global HoehenWert
415 HoehenWert:
416 0037 0000 0000 .skip 4,0
417 .global StartTrigger
418 .global StartTrigger
421 StartTrigger:
422 003b 00 .skip 1,0
423 .global MotorenEin
424 .global MotorenEin
427 MotorenEin:
428 003c 00 .skip 1,0
429 .global SenderOkay
430 .global SenderOkay
433 SenderOkay:
434 003d 00 .skip 1,0
435 .global Poti
436 .global Poti
439 Poti:
440 003e 0000 0000 .skip 9,0
440 0000 0000
440 00
441 .global StickGas
442 .global StickGas
445 StickGas:
446 0047 0000 .skip 2,0
447 .global StickGier
448 .global StickGier
451 StickGier:
452 0049 0000 .skip 2,0
453 .global StickRoll
454 .global StickRoll
457 StickRoll:
458 004b 0000 .skip 2,0
459 .global StickNick
460 .global StickNick
463 StickNick:
464 004d 0000 .skip 2,0
465 .global HoverGasMax
466 .data
469 HoverGasMax:
470 003f FF03 .word 1023
471 .global HoverGasMin
472 .global HoverGasMin
473 .section .bss
476 HoverGasMin:
477 004f 0000 .skip 2,0
478 .global StickGasHover
479 .data
482 StickGasHover:
483 0041 7800 .word 120
484 .global GierGyroFehler
485 .global GierGyroFehler
486 .section .bss
489 GierGyroFehler:
490 0051 0000 .skip 2,0
491 .global Umschlag180Roll
492 .data
495 Umschlag180Roll:
496 0043 90D0 0300 .long 250000
497 .global Umschlag180Nick
500 Umschlag180Nick:
501 0047 90D0 0300 .long 250000
502 .global TrichterFlug
503 .global TrichterFlug
504 .section .bss
507 TrichterFlug:
508 0053 00 .skip 1,0
509 .global HoehenReglerAktiv
510 .global HoehenReglerAktiv
513 HoehenReglerAktiv:
514 0054 00 .skip 1,0
515 .global KompassSignalSchlecht
516 .data
519 KompassSignalSchlecht:
520 004b 3200 .word 50
521 .global KompassFusion
524 KompassFusion:
525 004d 20 .byte 32
526 .global CalculateCompassTimer
529 CalculateCompassTimer:
530 004e 64 .byte 100
531 .global KompassSollWert
532 .global KompassSollWert
533 .section .bss
536 KompassSollWert:
537 0055 0000 .skip 2,0
538 .global KompassValue
539 .data
542 KompassValue:
543 004f FFFF .word -1
544 .global Mess_Integral_Hoch
545 .global Mess_Integral_Hoch
546 .section .bss
549 Mess_Integral_Hoch:
550 0057 0000 0000 .skip 4,0
551 .global SummeRoll
552 .global SummeRoll
555 SummeRoll:
556 005b 0000 0000 .skip 4,0
557 .global SummeNick
558 .global SummeNick
561 SummeNick:
562 005f 0000 0000 .skip 4,0
563 .global Mess_Integral_Gier2
564 .global Mess_Integral_Gier2
567 Mess_Integral_Gier2:
568 0063 0000 0000 .skip 4,0
569 .global Mess_Integral_Gier
570 .global Mess_Integral_Gier
573 Mess_Integral_Gier:
574 0067 0000 0000 .skip 4,0
575 .global Mess_IntegralRoll2
576 .global Mess_IntegralRoll2
579 Mess_IntegralRoll2:
580 006b 0000 0000 .skip 4,0
581 .global Mess_IntegralRoll
582 .global Mess_IntegralRoll
585 Mess_IntegralRoll:
586 006f 0000 0000 .skip 4,0
587 .global Mess_IntegralNick2
588 .global Mess_IntegralNick2
591 Mess_IntegralNick2:
592 0073 0000 0000 .skip 4,0
593 .global Mess_IntegralNick
594 .global Mess_IntegralNick
597 Mess_IntegralNick:
598 0077 0000 0000 .skip 4,0
599 .global Integral_Gier
600 .global Integral_Gier
603 Integral_Gier:
604 007b 0000 0000 .skip 4,0
605 .global IntegralAccZ
606 .global IntegralAccZ
609 IntegralAccZ:
610 007f 0000 0000 .skip 4,0
611 .global IntegralAccRoll
612 .global IntegralAccRoll
615 IntegralAccRoll:
616 0083 0000 0000 .skip 4,0
617 .global IntegralAccNick
618 .global IntegralAccNick
621 IntegralAccNick:
622 0087 0000 0000 .skip 4,0
623 .global IntegralRoll2
624 .global IntegralRoll2
627 IntegralRoll2:
628 008b 0000 0000 .skip 4,0
629 .global IntegralRoll
630 .global IntegralRoll
633 IntegralRoll:
634 008f 0000 0000 .skip 4,0
635 .global IntegralNick2
636 .global IntegralNick2
639 IntegralNick2:
640 0093 0000 0000 .skip 4,0
641 .global IntegralNick
642 .global IntegralNick
645 IntegralNick:
646 0097 0000 0000 .skip 4,0
647 .global ControlHeading
648 .global ControlHeading
651 ControlHeading:
652 009b 00 .skip 1,0
653 .global NeutralAccZ
654 .global NeutralAccZ
657 NeutralAccZ:
658 009c 0000 .skip 2,0
659 .global NaviCntAcc
660 .global NaviCntAcc
663 NaviCntAcc:
664 009e 0000 .skip 2,0
665 .global NeutralAccY
666 .global NeutralAccY
669 NeutralAccY:
670 00a0 0000 .skip 2,0
671 .global NeutralAccX
672 .global NeutralAccX
675 NeutralAccX:
676 00a2 0000 .skip 2,0
677 .global StartNeutralNick
678 .global StartNeutralNick
681 StartNeutralNick:
682 00a4 0000 .skip 2,0
683 .global StartNeutralRoll
684 .global StartNeutralRoll
687 StartNeutralRoll:
688 00a6 0000 .skip 2,0
689 .global AdNeutralGier
690 .global AdNeutralGier
693 AdNeutralGier:
694 00a8 0000 .skip 2,0
695 .global AdNeutralRoll
696 .global AdNeutralRoll
699 AdNeutralRoll:
700 00aa 0000 .skip 2,0
701 .global AdNeutralNick
702 .global AdNeutralNick
705 AdNeutralNick:
706 00ac 0000 .skip 2,0
707 .global BaroExpandActive
708 .global BaroExpandActive
711 BaroExpandActive:
712 00ae 0000 .skip 2,0
713 .text
714 .global CopyDebugValues
716 CopyDebugValues:
717 /* prologue: frame size=0 */
718 0000 EF92 push r14
719 0002 FF92 push r15
720 0004 0F93 push r16
721 0006 1F93 push r17
722 /* prologue end (size=4) */
723 0008 8091 0000 lds r24,EE_Parameter+28
724 000c 9927 clr r25
725 000e 880F lsl r24
726 0010 991F rol r25
727 0012 880F lsl r24
728 0014 991F rol r25
729 0016 7C01 movw r14,r24
730 0018 0027 clr r16
731 001a F7FC sbrc r15,7
732 001c 0095 com r16
733 001e 102F mov r17,r16
734 0020 8091 0000 lds r24,IntegralNick
735 0024 9091 0000 lds r25,(IntegralNick)+1
736 0028 A091 0000 lds r26,(IntegralNick)+2
737 002c B091 0000 lds r27,(IntegralNick)+3
738 0030 BC01 movw r22,r24
739 0032 CD01 movw r24,r26
740 0034 A801 movw r20,r16
741 0036 9701 movw r18,r14
742 0038 0E94 0000 call __divmodsi4
743 003c 3093 0000 sts (DebugOut+2)+1,r19
744 0040 2093 0000 sts DebugOut+2,r18
745 0044 8091 0000 lds r24,IntegralRoll
746 0048 9091 0000 lds r25,(IntegralRoll)+1
747 004c A091 0000 lds r26,(IntegralRoll)+2
748 0050 B091 0000 lds r27,(IntegralRoll)+3
749 0054 BC01 movw r22,r24
750 0056 CD01 movw r24,r26
751 0058 A801 movw r20,r16
752 005a 9701 movw r18,r14
753 005c 0E94 0000 call __divmodsi4
754 0060 3093 0000 sts (DebugOut+4)+1,r19
755 0064 2093 0000 sts DebugOut+4,r18
756 0068 8091 0000 lds r24,Mittelwert_AccNick
757 006c 9091 0000 lds r25,(Mittelwert_AccNick)+1
758 0070 97FD sbrc r25,7
759 0072 0396 adiw r24,3
760 .L2:
761 0074 9595 asr r25
762 0076 8795 ror r24
763 0078 9595 asr r25
764 007a 8795 ror r24
765 007c 9093 0000 sts (DebugOut+6)+1,r25
766 0080 8093 0000 sts DebugOut+6,r24
767 0084 8091 0000 lds r24,Mittelwert_AccRoll
768 0088 9091 0000 lds r25,(Mittelwert_AccRoll)+1
769 008c 97FD sbrc r25,7
770 008e 0396 adiw r24,3
771 .L3:
772 0090 9595 asr r25
773 0092 8795 ror r24
774 0094 9595 asr r25
775 0096 8795 ror r24
776 0098 9093 0000 sts (DebugOut+8)+1,r25
777 009c 8093 0000 sts DebugOut+8,r24
778 00a0 8091 0000 lds r24,AdNeutralGier
779 00a4 9091 0000 lds r25,(AdNeutralGier)+1
780 00a8 2091 0000 lds r18,AdWertGier
781 00ac 3091 0000 lds r19,(AdWertGier)+1
782 00b0 821B sub r24,r18
783 00b2 930B sbc r25,r19
784 00b4 9093 0000 sts (DebugOut+10)+1,r25
785 00b8 8093 0000 sts DebugOut+10,r24
786 00bc 8091 0000 lds r24,HoehenWert
787 00c0 9091 0000 lds r25,(HoehenWert)+1
788 00c4 A091 0000 lds r26,(HoehenWert)+2
789 00c8 B091 0000 lds r27,(HoehenWert)+3
790 00cc BC01 movw r22,r24
791 00ce CD01 movw r24,r26
792 00d0 25E0 ldi r18,lo8(5)
793 00d2 30E0 ldi r19,hi8(5)
794 00d4 40E0 ldi r20,hlo8(5)
795 00d6 50E0 ldi r21,hhi8(5)
796 00d8 0E94 0000 call __divmodsi4
797 00dc 3093 0000 sts (DebugOut+12)+1,r19
798 00e0 2093 0000 sts DebugOut+12,r18
799 00e4 8091 0000 lds r24,AdWertAccHoch
800 00e8 9091 0000 lds r25,(AdWertAccHoch)+1
801 00ec 9093 0000 sts (DebugOut+14)+1,r25
802 00f0 8093 0000 sts DebugOut+14,r24
803 00f4 8091 0000 lds r24,KompassValue
804 00f8 9091 0000 lds r25,(KompassValue)+1
805 00fc 9093 0000 sts (DebugOut+18)+1,r25
806 0100 8093 0000 sts DebugOut+18,r24
807 0104 8091 0000 lds r24,UBat
808 0108 9091 0000 lds r25,(UBat)+1
809 010c 9093 0000 sts (DebugOut+20)+1,r25
810 0110 8093 0000 sts DebugOut+20,r24
811 0114 8091 0000 lds r24,SenderOkay
812 0118 9927 clr r25
813 011a 9093 0000 sts (DebugOut+22)+1,r25
814 011e 8093 0000 sts DebugOut+22,r24
815 0122 8091 0000 lds r24,ErsatzKompassInGrad
816 0126 9091 0000 lds r25,(ErsatzKompassInGrad)+1
817 012a 9093 0000 sts (DebugOut+24)+1,r25
818 012e 8093 0000 sts DebugOut+24,r24
819 0132 8091 0000 lds r24,Motor+1
820 0136 9927 clr r25
821 0138 9093 0000 sts (DebugOut+26)+1,r25
822 013c 8093 0000 sts DebugOut+26,r24
823 0140 8091 0000 lds r24,Motor+9
824 0144 9927 clr r25
825 0146 9093 0000 sts (DebugOut+28)+1,r25
826 014a 8093 0000 sts DebugOut+28,r24
827 014e 8091 0000 lds r24,Motor+17
828 0152 9927 clr r25
829 0154 9093 0000 sts (DebugOut+30)+1,r25
830 0158 8093 0000 sts DebugOut+30,r24
831 015c 8091 0000 lds r24,Motor+25
832 0160 9927 clr r25
833 0162 9093 0000 sts (DebugOut+32)+1,r25
834 0166 8093 0000 sts DebugOut+32,r24
835 016a 8091 0000 lds r24,ServoNickValue
836 016e 9091 0000 lds r25,(ServoNickValue)+1
837 0172 9093 0000 sts (DebugOut+42)+1,r25
838 0176 8093 0000 sts DebugOut+42,r24
839 017a 8091 0000 lds r24,Capacity
840 017e 9091 0000 lds r25,(Capacity)+1
841 0182 9093 0000 sts (DebugOut+46)+1,r25
842 0186 8093 0000 sts DebugOut+46,r24
843 018a 8091 0000 lds r24,Capacity+4
844 018e 9091 0000 lds r25,(Capacity+4)+1
845 0192 9093 0000 sts (DebugOut+48)+1,r25
846 0196 8093 0000 sts DebugOut+48,r24
847 019a 8091 0000 lds r24,SollHoehe
848 019e 9091 0000 lds r25,(SollHoehe)+1
849 01a2 A091 0000 lds r26,(SollHoehe)+2
850 01a6 B091 0000 lds r27,(SollHoehe)+3
851 01aa BC01 movw r22,r24
852 01ac CD01 movw r24,r26
853 01ae 25E0 ldi r18,lo8(5)
854 01b0 30E0 ldi r19,hi8(5)
855 01b2 40E0 ldi r20,hlo8(5)
856 01b4 50E0 ldi r21,hhi8(5)
857 01b6 0E94 0000 call __divmodsi4
858 01ba 3093 0000 sts (DebugOut+50)+1,r19
859 01be 2093 0000 sts DebugOut+50,r18
860 01c2 8091 0000 lds r24,KompassSollWert
861 01c6 9091 0000 lds r25,(KompassSollWert)+1
862 01ca 9093 0000 sts (DebugOut+56)+1,r25
863 01ce 8093 0000 sts DebugOut+56,r24
864 01d2 8091 0000 lds r24,Capacity+6
865 01d6 9927 clr r25
866 01d8 9093 0000 sts (DebugOut+60)+1,r25
867 01dc 8093 0000 sts DebugOut+60,r24
868 01e0 8091 0000 lds r24,GPS_Nick
869 01e4 9091 0000 lds r25,(GPS_Nick)+1
870 01e8 9093 0000 sts (DebugOut+62)+1,r25
871 01ec 8093 0000 sts DebugOut+62,r24
872 01f0 8091 0000 lds r24,GPS_Roll
873 01f4 9091 0000 lds r25,(GPS_Roll)+1
874 01f8 9093 0000 sts (DebugOut+64)+1,r25
875 01fc 8093 0000 sts DebugOut+64,r24
876 0200 8091 0000 lds r24,VersionInfo+5
877 0204 8823 tst r24
878 0206 01F4 brne .L5
879 0208 8091 0000 lds r24,VersionInfo+6
880 020c 8823 tst r24
881 020e 01F0 breq .L4
882 .L5:
883 0210 8091 0000 lds r24,DebugOut+1
884 0214 8160 ori r24,lo8(1)
885 0216 00C0 rjmp .L7
886 .L4:
887 0218 8091 0000 lds r24,DebugOut+1
888 021c 8E7F andi r24,lo8(-2)
889 .L7:
890 021e 8093 0000 sts DebugOut+1,r24
891 /* epilogue: frame size=0 */
892 0222 1F91 pop r17
893 0224 0F91 pop r16
894 0226 FF90 pop r15
895 0228 EF90 pop r14
896 022a 0895 ret
897 /* epilogue end (size=5) */
898 /* function CopyDebugValues size 280 (271) */
900 .global Piep
902 Piep:
903 /* prologue: frame size=0 */
904 022c EF92 push r14
905 022e FF92 push r15
906 0230 1F93 push r17
907 0232 CF93 push r28
908 0234 DF93 push r29
909 /* prologue end (size=5) */
910 0236 182F mov r17,r24
911 0238 7B01 movw r14,r22
912 023a 8091 0000 lds r24,MotorenEin
913 023e 8823 tst r24
914 0240 01F4 brne .L8
915 0242 8091 0000 lds r24,PlatinenVersion
916 0246 8C30 cpi r24,lo8(12)
917 0248 00F0 brlo .L11
918 024a 8631 cpi r24,lo8(22)
919 024c 01F4 brne .L10
920 .L11:
921 024e 2998 cbi 37-0x20,1
922 0250 00C0 rjmp .L12
923 .L10:
924 0252 299A sbi 37-0x20,1
925 .L12:
926 0254 1150 subi r17,lo8(-(-1))
927 0256 1F3F cpi r17,lo8(-1)
928 0258 01F0 breq .L26
929 025a F092 0000 sts (beeptime)+1,r15
930 025e E092 0000 sts beeptime,r14
931 0262 E701 movw r28,r14
932 .L34:
933 0264 8091 0000 lds r24,beeptime
934 0268 9091 0000 lds r25,(beeptime)+1
935 026c 892B or r24,r25
936 026e 01F4 brne .L31
937 0270 2097 sbiw r28,0
938 0272 01F0 breq .L12
939 .L31:
940 0274 8091 0000 lds r24,UpdateMotor
941 0278 8823 tst r24
942 027a 01F0 breq .L34
943 027c 1092 0000 sts UpdateMotor,__zero_reg__
944 0280 8091 0000 lds r24,beeptime
945 0284 9091 0000 lds r25,(beeptime)+1
946 0288 892B or r24,r25
947 028a 01F4 brne .L19
948 028c 2197 sbiw r28,1
949 .L19:
950 028e 0E94 0000 call LIBFC_Polling
951 0292 00C0 rjmp .L34
952 .L26:
953 0294 8091 0000 lds r24,PlatinenVersion
954 0298 8C30 cpi r24,lo8(12)
955 029a 00F0 brlo .L23
956 029c 8631 cpi r24,lo8(22)
957 029e 01F4 brne .L22
958 .L23:
959 02a0 299A sbi 37-0x20,1
960 02a2 00C0 rjmp .L8
961 .L22:
962 02a4 2998 cbi 37-0x20,1
963 .L8:
964 /* epilogue: frame size=0 */
965 02a6 DF91 pop r29
966 02a8 CF91 pop r28
967 02aa 1F91 pop r17
968 02ac FF90 pop r15
969 02ae EF90 pop r14
970 02b0 0895 ret
971 /* epilogue end (size=6) */
972 /* function Piep size 67 (56) */
974 .global CalibrierMittelwert
976 CalibrierMittelwert:
977 /* prologue: frame size=0 */
978 02b2 CF93 push r28
979 02b4 DF93 push r29
980 /* prologue end (size=2) */
981 02b6 8091 0000 lds r24,PlatinenVersion
982 02ba 8D30 cpi r24,lo8(13)
983 02bc 01F4 brne .L36
984 02be 0E94 0000 call SucheGyroOffset
985 .L36:
986 02c2 1092 7A00 sts 122,__zero_reg__
987 02c6 8091 0000 lds r24,AdWertNick
988 02ca 9091 0000 lds r25,(AdWertNick)+1
989 02ce 9093 0000 sts (MesswertNick)+1,r25
990 02d2 8093 0000 sts MesswertNick,r24
991 02d6 8091 0000 lds r24,AdWertRoll
992 02da 9091 0000 lds r25,(AdWertRoll)+1
993 02de 9093 0000 sts (MesswertRoll)+1,r25
994 02e2 8093 0000 sts MesswertRoll,r24
995 02e6 8091 0000 lds r24,AdWertGier
996 02ea 9091 0000 lds r25,(AdWertGier)+1
997 02ee 9093 0000 sts (MesswertGier)+1,r25
998 02f2 8093 0000 sts MesswertGier,r24
999 02f6 2091 0000 lds r18,AdWertAccNick
1000 02fa 3091 0000 lds r19,(AdWertAccNick)+1
1001 02fe C901 movw r24,r18
1002 0300 880F lsl r24
1003 0302 991F rol r25
1004 0304 880F lsl r24
1005 0306 991F rol r25
1006 0308 820F add r24,r18
1007 030a 931F adc r25,r19
1008 030c 820F add r24,r18
1009 030e 931F adc r25,r19
1010 0310 9093 0000 sts (Mittelwert_AccNick)+1,r25
1011 0314 8093 0000 sts Mittelwert_AccNick,r24
1012 0318 2091 0000 lds r18,AdWertAccRoll
1013 031c 3091 0000 lds r19,(AdWertAccRoll)+1
1014 0320 C901 movw r24,r18
1015 0322 880F lsl r24
1016 0324 991F rol r25
1017 0326 880F lsl r24
1018 0328 991F rol r25
1019 032a 820F add r24,r18
1020 032c 931F adc r25,r19
1021 032e 820F add r24,r18
1022 0330 931F adc r25,r19
1023 0332 9093 0000 sts (Mittelwert_AccRoll)+1,r25
1024 0336 8093 0000 sts Mittelwert_AccRoll,r24
1025 033a 8FEC ldi r24,lo8(-49)
1026 033c 8093 7A00 sts 122,r24
1027 0340 A0E0 ldi r26,lo8(Poti)
1028 0342 B0E0 ldi r27,hi8(Poti)
1029 0344 C0E0 ldi r28,lo8(EE_Parameter+5)
1030 0346 D0E0 ldi r29,hi8(EE_Parameter+5)
1031 0348 97E0 ldi r25,lo8(7)
1032 .L46:
1033 034a 8991 ld r24,Y+
1034 034c E82F mov r30,r24
1035 034e FF27 clr r31
1036 0350 EE0F add r30,r30
1037 0352 FF1F adc r31,r31
1038 0354 E050 subi r30,lo8(-(PPM_in))
1039 0356 F040 sbci r31,hi8(-(PPM_in))
1040 0358 0190 ld __tmp_reg__,Z+
1041 035a F081 ld r31,Z
1042 035c E02D mov r30,__tmp_reg__
1043 035e E158 subi r30,lo8(-(127))
1044 0360 FF4F sbci r31,hi8(-(127))
1045 0362 1E16 cp __zero_reg__,r30
1046 0364 1F06 cpc __zero_reg__,r31
1047 0366 04F0 brlt .L40
1048 0368 E0E0 ldi r30,lo8(0)
1049 036a F0E0 ldi r31,hi8(0)
1050 036c 00C0 rjmp .L41
1051 .L40:
1052 036e EF3F cpi r30,255
1053 0370 F105 cpc r31,__zero_reg__
1054 0372 04F0 brlt .L41
1055 0374 EFEF ldi r30,lo8(255)
1056 0376 F0E0 ldi r31,hi8(255)
1057 .L41:
1058 0378 8C91 ld r24,X
1059 037a 282F mov r18,r24
1060 037c 3327 clr r19
1061 037e E217 cp r30,r18
1062 0380 F307 cpc r31,r19
1063 0382 04F4 brge .L43
1064 0384 8150 subi r24,lo8(-(-1))
1065 0386 00C0 rjmp .L49
1066 .L43:
1067 0388 2E17 cp r18,r30
1068 038a 3F07 cpc r19,r31
1069 038c 04F4 brge .L39
1070 038e 8F5F subi r24,lo8(-(1))
1071 .L49:
1072 0390 8C93 st X,r24
1073 .L39:
1074 0392 9150 subi r25,lo8(-(-1))
1075 0394 1196 adiw r26,1
1076 0396 97FF sbrs r25,7
1077 0398 00C0 rjmp .L46
1078 039a 8091 0000 lds r24,EE_Parameter+65
1079 039e 9927 clr r25
1080 03a0 AA27 clr r26
1081 03a2 BB27 clr r27
1082 03a4 BC01 movw r22,r24
1083 03a6 CD01 movw r24,r26
1084 03a8 24EC ldi r18,lo8(2500)
1085 03aa 39E0 ldi r19,hi8(2500)
1086 03ac 40E0 ldi r20,hlo8(2500)
1087 03ae 50E0 ldi r21,hhi8(2500)
1088 03b0 0E94 0000 call __mulsi3
1089 03b4 DC01 movw r26,r24
1090 03b6 CB01 movw r24,r22
1091 03b8 8093 0000 sts Umschlag180Nick,r24
1092 03bc 9093 0000 sts (Umschlag180Nick)+1,r25
1093 03c0 A093 0000 sts (Umschlag180Nick)+2,r26
1094 03c4 B093 0000 sts (Umschlag180Nick)+3,r27
1095 03c8 8091 0000 lds r24,EE_Parameter+66
1096 03cc 9927 clr r25
1097 03ce AA27 clr r26
1098 03d0 BB27 clr r27
1099 03d2 BC01 movw r22,r24
1100 03d4 CD01 movw r24,r26
1101 03d6 0E94 0000 call __mulsi3
1102 03da DC01 movw r26,r24
1103 03dc CB01 movw r24,r22
1104 03de 8093 0000 sts Umschlag180Roll,r24
1105 03e2 9093 0000 sts (Umschlag180Roll)+1,r25
1106 03e6 A093 0000 sts (Umschlag180Roll)+2,r26
1107 03ea B093 0000 sts (Umschlag180Roll)+3,r27
1108 /* epilogue: frame size=0 */
1109 03ee DF91 pop r29
1110 03f0 CF91 pop r28
1111 03f2 0895 ret
1112 /* epilogue end (size=3) */
1113 /* function CalibrierMittelwert size 161 (156) */
1115 .section .progmem.data,"a",@progbits
1118 __c.35:
1119 0000 0A0D 4143 .string "\n\rACC not calibrated!\r\n"
1119 4320 6E6F
1119 7420 6361
1119 6C69 6272
1119 6174 6564
1120 .text
1121 .global SetNeutral
1123 SetNeutral:
1124 /* prologue: frame size=0 */
1125 03f4 A0E0 ldi r26,lo8(0)
1126 03f6 B0E0 ldi r27,hi8(0)
1127 03f8 E0E0 ldi r30,pm_lo8(1f)
1128 03fa F0E0 ldi r31,pm_hi8(1f)
1129 03fc 0C94 0000 jmp __prologue_saves__+12
1130 1:
1131 /* prologue end (size=6) */
1132 0400 882E mov r8,r24
1133 0402 C0E0 ldi r28,lo8(0)
1134 0404 D0E0 ldi r29,hi8(0)
1135 0406 7E01 movw r14,r28
1136 0408 6E01 movw r12,r28
1137 040a 1092 0000 sts VersionInfo+5,__zero_reg__
1138 040e D093 0000 sts (NeutralAccX)+1,r29
1139 0412 C093 0000 sts NeutralAccX,r28
1140 0416 D093 0000 sts (NeutralAccY)+1,r29
1141 041a C093 0000 sts NeutralAccY,r28
1142 041e D093 0000 sts (NeutralAccZ)+1,r29
1143 0422 C093 0000 sts NeutralAccZ,r28
1144 0426 D093 0000 sts (AdNeutralNick)+1,r29
1145 042a C093 0000 sts AdNeutralNick,r28
1146 042e D093 0000 sts (AdNeutralRoll)+1,r29
1147 0432 C093 0000 sts AdNeutralRoll,r28
1148 0436 D093 0000 sts (AdNeutralGier)+1,r29
1149 043a C093 0000 sts AdNeutralGier,r28
1150 043e 1092 0000 sts Parameter_AchsKopplung1,__zero_reg__
1151 0442 1092 0000 sts Parameter_AchsKopplung2,__zero_reg__
1152 0446 1092 0000 sts ExpandBaro,__zero_reg__
1153 044a 0E94 0000 call CalibrierMittelwert
1154 044e 84E6 ldi r24,lo8(100)
1155 0450 90E0 ldi r25,hi8(100)
1156 0452 0E94 0000 call Delay_ms_Mess
1157 0456 0E94 0000 call CalibrierMittelwert
1158 045a 8091 0000 lds r24,EE_Parameter+13
1159 045e 80FF sbrs r24,0
1160 0460 00C0 rjmp .L51
1161 0462 8091 0000 lds r24,MessLuftdruck
1162 0466 9091 0000 lds r25,(MessLuftdruck)+1
1163 046a 875B subi r24,lo8(951)
1164 046c 9340 sbci r25,hi8(951)
1165 046e 00F4 brsh .L53
1166 0470 8091 0000 lds r24,MessLuftdruck
1167 0474 9091 0000 lds r25,(MessLuftdruck)+1
1168 0478 8E5E subi r24,lo8(750)
1169 047a 9240 sbci r25,hi8(750)
1170 047c 00F4 brsh .L51
1171 .L53:
1172 047e 0E94 0000 call SucheLuftruckOffset
1173 .L51:
1174 0482 0FE1 ldi r16,lo8(31)
1175 .L57:
1176 0484 8AE0 ldi r24,lo8(10)
1177 0486 90E0 ldi r25,hi8(10)
1178 0488 0E94 0000 call Delay_ms_Mess
1179 048c 8091 0000 lds r24,AdWertGier
1180 0490 9091 0000 lds r25,(AdWertGier)+1
1181 0494 C80F add r28,r24
1182 0496 D91F adc r29,r25
1183 0498 8091 0000 lds r24,AdWertNick
1184 049c 9091 0000 lds r25,(AdWertNick)+1
1185 04a0 E80E add r14,r24
1186 04a2 F91E adc r15,r25
1187 04a4 8091 0000 lds r24,AdWertRoll
1188 04a8 9091 0000 lds r25,(AdWertRoll)+1
1189 04ac C80E add r12,r24
1190 04ae D91E adc r13,r25
1191 04b0 0150 subi r16,lo8(-(-1))
1192 04b2 07FF sbrs r16,7
1193 04b4 00C0 rjmp .L57
1194 04b6 9701 movw r18,r14
1195 04b8 205F subi r18,lo8(-(16))
1196 04ba 3F4F sbci r19,hi8(-(16))
1197 04bc 3695 lsr r19
1198 04be 2795 ror r18
1199 04c0 3695 lsr r19
1200 04c2 2795 ror r18
1201 04c4 3093 0000 sts (AdNeutralNick)+1,r19
1202 04c8 2093 0000 sts AdNeutralNick,r18
1203 04cc C601 movw r24,r12
1204 04ce 4096 adiw r24,16
1205 04d0 9695 lsr r25
1206 04d2 8795 ror r24
1207 04d4 9695 lsr r25
1208 04d6 8795 ror r24
1209 04d8 9093 0000 sts (AdNeutralRoll)+1,r25
1210 04dc 8093 0000 sts AdNeutralRoll,r24
1211 04e0 6096 adiw r28,16
1212 04e2 F5E0 ldi r31,5
1213 04e4 D695 1: lsr r29
1214 04e6 C795 ror r28
1215 04e8 FA95 dec r31
1216 04ea 01F4 brne 1b
1217 04ec D093 0000 sts (AdNeutralGier)+1,r29
1218 04f0 C093 0000 sts AdNeutralGier,r28
1219 04f4 9093 0000 sts (StartNeutralRoll)+1,r25
1220 04f8 8093 0000 sts StartNeutralRoll,r24
1221 04fc 3093 0000 sts (StartNeutralNick)+1,r19
1222 0500 2093 0000 sts StartNeutralNick,r18
1223 0504 8820 tst r8
1224 0506 01F4 brne .+2
1225 0508 00C0 rjmp .L58
1226 050a 8091 0000 lds r24,Mittelwert_AccNick
1227 050e 9091 0000 lds r25,(Mittelwert_AccNick)+1
1228 0512 97FF sbrs r25,7
1229 0514 00C0 rjmp .L59
1230 0516 9095 com r25
1231 0518 8195 neg r24
1232 051a 9F4F sbci r25,lo8(-1)
1233 .L59:
1234 051c 6CE0 ldi r22,lo8(12)
1235 051e 70E0 ldi r23,hi8(12)
1236 0520 0E94 0000 call __divmodhi4
1237 0524 9B01 movw r18,r22
1238 0526 7093 0000 sts (NeutralAccX)+1,r23
1239 052a 6093 0000 sts NeutralAccX,r22
1240 052e 8091 0000 lds r24,Mittelwert_AccRoll
1241 0532 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1242 0536 97FF sbrs r25,7
1243 0538 00C0 rjmp .L60
1244 053a 9095 com r25
1245 053c 8195 neg r24
1246 053e 9F4F sbci r25,lo8(-1)
1247 .L60:
1248 0540 6CE0 ldi r22,lo8(12)
1249 0542 70E0 ldi r23,hi8(12)
1250 0544 0E94 0000 call __divmodhi4
1251 0548 7093 0000 sts (NeutralAccY)+1,r23
1252 054c 6093 0000 sts NeutralAccY,r22
1253 0550 8091 0000 lds r24,Aktuell_az
1254 0554 9091 0000 lds r25,(Aktuell_az)+1
1255 0558 9093 0000 sts (NeutralAccZ)+1,r25
1256 055c 8093 0000 sts NeutralAccZ,r24
1257 0560 B901 movw r22,r18
1258 0562 84E0 ldi r24,lo8(4)
1259 0564 90E0 ldi r25,hi8(4)
1260 0566 0E94 0000 call SetParamWord
1261 056a 6091 0000 lds r22,NeutralAccY
1262 056e 7091 0000 lds r23,(NeutralAccY)+1
1263 0572 86E0 ldi r24,lo8(6)
1264 0574 90E0 ldi r25,hi8(6)
1265 0576 0E94 0000 call SetParamWord
1266 057a 6091 0000 lds r22,NeutralAccZ
1267 057e 7091 0000 lds r23,(NeutralAccZ)+1
1268 0582 88E0 ldi r24,lo8(8)
1269 0584 90E0 ldi r25,hi8(8)
1270 0586 0E94 0000 call SetParamWord
1271 058a 00C0 rjmp .L61
1272 .L58:
1273 058c 84E0 ldi r24,lo8(4)
1274 058e 90E0 ldi r25,hi8(4)
1275 0590 0E94 0000 call GetParamWord
1276 0594 9093 0000 sts (NeutralAccX)+1,r25
1277 0598 8093 0000 sts NeutralAccX,r24
1278 059c 86E0 ldi r24,lo8(6)
1279 059e 90E0 ldi r25,hi8(6)
1280 05a0 0E94 0000 call GetParamWord
1281 05a4 9093 0000 sts (NeutralAccY)+1,r25
1282 05a8 8093 0000 sts NeutralAccY,r24
1283 05ac 88E0 ldi r24,lo8(8)
1284 05ae 90E0 ldi r25,hi8(8)
1285 05b0 0E94 0000 call GetParamWord
1286 05b4 9C01 movw r18,r24
1287 05b6 9093 0000 sts (NeutralAccZ)+1,r25
1288 05ba 8093 0000 sts NeutralAccZ,r24
1289 05be 8091 0000 lds r24,NeutralAccX
1290 05c2 9091 0000 lds r25,(NeutralAccX)+1
1291 05c6 8150 subi r24,lo8(2049)
1292 05c8 9840 sbci r25,hi8(2049)
1293 05ca 00F4 brsh .L63
1294 05cc 8091 0000 lds r24,NeutralAccY
1295 05d0 9091 0000 lds r25,(NeutralAccY)+1
1296 05d4 8150 subi r24,lo8(2049)
1297 05d6 9840 sbci r25,hi8(2049)
1298 05d8 00F4 brsh .L63
1299 05da 2150 subi r18,lo8(1025)
1300 05dc 3440 sbci r19,hi8(1025)
1301 05de 00F0 brlo .L61
1302 .L63:
1303 05e0 80E0 ldi r24,lo8(__c.35)
1304 05e2 90E0 ldi r25,hi8(__c.35)
1305 05e4 9F93 push r25
1306 05e6 8F93 push r24
1307 05e8 80E0 ldi r24,lo8(pm(uart_putchar))
1308 05ea 90E0 ldi r25,hi8(pm(uart_putchar))
1309 05ec 9F93 push r25
1310 05ee 8F93 push r24
1311 05f0 E091 0000 lds r30,_printf_P
1312 05f4 F091 0000 lds r31,(_printf_P)+1
1313 05f8 0995 icall
1314 05fa 8091 0000 lds r24,Mittelwert_AccNick
1315 05fe 9091 0000 lds r25,(Mittelwert_AccNick)+1
1316 0602 97FF sbrs r25,7
1317 0604 00C0 rjmp .L64
1318 0606 9095 com r25
1319 0608 8195 neg r24
1320 060a 9F4F sbci r25,lo8(-1)
1321 .L64:
1322 060c 6CE0 ldi r22,lo8(12)
1323 060e 70E0 ldi r23,hi8(12)
1324 0610 0E94 0000 call __divmodhi4
1325 0614 7093 0000 sts (NeutralAccX)+1,r23
1326 0618 6093 0000 sts NeutralAccX,r22
1327 061c 8091 0000 lds r24,Mittelwert_AccRoll
1328 0620 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1329 0624 97FF sbrs r25,7
1330 0626 00C0 rjmp .L65
1331 0628 9095 com r25
1332 062a 8195 neg r24
1333 062c 9F4F sbci r25,lo8(-1)
1334 .L65:
1335 062e 6CE0 ldi r22,lo8(12)
1336 0630 70E0 ldi r23,hi8(12)
1337 0632 0E94 0000 call __divmodhi4
1338 0636 7093 0000 sts (NeutralAccY)+1,r23
1339 063a 6093 0000 sts NeutralAccY,r22
1340 063e 8091 0000 lds r24,Aktuell_az
1341 0642 9091 0000 lds r25,(Aktuell_az)+1
1342 0646 9093 0000 sts (NeutralAccZ)+1,r25
1343 064a 8093 0000 sts NeutralAccZ,r24
1344 064e 0F90 pop __tmp_reg__
1345 0650 0F90 pop __tmp_reg__
1346 0652 0F90 pop __tmp_reg__
1347 0654 0F90 pop __tmp_reg__
1348 .L61:
1349 0656 1092 0000 sts (MesswertNick)+1,__zero_reg__
1350 065a 1092 0000 sts MesswertNick,__zero_reg__
1351 065e 1092 0000 sts (MesswertRoll)+1,__zero_reg__
1352 0662 1092 0000 sts MesswertRoll,__zero_reg__
1353 0666 1092 0000 sts (MesswertGier)+1,__zero_reg__
1354 066a 1092 0000 sts MesswertGier,__zero_reg__
1355 066e 84E6 ldi r24,lo8(100)
1356 0670 90E0 ldi r25,hi8(100)
1357 0672 0E94 0000 call Delay_ms_Mess
1358 0676 8091 0000 lds r24,AdWertAccNick
1359 067a 9091 0000 lds r25,(AdWertAccNick)+1
1360 067e 9C01 movw r18,r24
1361 0680 220F lsl r18
1362 0682 331F rol r19
1363 0684 220F lsl r18
1364 0686 331F rol r19
1365 0688 280F add r18,r24
1366 068a 391F adc r19,r25
1367 068c 280F add r18,r24
1368 068e 391F adc r19,r25
1369 0690 3093 0000 sts (Mittelwert_AccNick)+1,r19
1370 0694 2093 0000 sts Mittelwert_AccNick,r18
1371 0698 8091 0000 lds r24,AdWertAccRoll
1372 069c 9091 0000 lds r25,(AdWertAccRoll)+1
1373 06a0 8C01 movw r16,r24
1374 06a2 000F lsl r16
1375 06a4 111F rol r17
1376 06a6 000F lsl r16
1377 06a8 111F rol r17
1378 06aa 080F add r16,r24
1379 06ac 191F adc r17,r25
1380 06ae 080F add r16,r24
1381 06b0 191F adc r17,r25
1382 06b2 1093 0000 sts (Mittelwert_AccRoll)+1,r17
1383 06b6 0093 0000 sts Mittelwert_AccRoll,r16
1384 06ba 8091 0000 lds r24,EE_Parameter+28
1385 06be C82E mov r12,r24
1386 06c0 DD24 clr r13
1387 06c2 EE24 clr r14
1388 06c4 FF24 clr r15
1389 06c6 4427 clr r20
1390 06c8 37FD sbrc r19,7
1391 06ca 4095 com r20
1392 06cc 542F mov r21,r20
1393 06ce C701 movw r24,r14
1394 06d0 B601 movw r22,r12
1395 06d2 0E94 0000 call __mulsi3
1396 06d6 4B01 movw r8,r22
1397 06d8 5C01 movw r10,r24
1398 06da 6093 0000 sts IntegralNick,r22
1399 06de 7093 0000 sts (IntegralNick)+1,r23
1400 06e2 8093 0000 sts (IntegralNick)+2,r24
1401 06e6 9093 0000 sts (IntegralNick)+3,r25
1402 06ea 9801 movw r18,r16
1403 06ec 4427 clr r20
1404 06ee 37FD sbrc r19,7
1405 06f0 4095 com r20
1406 06f2 542F mov r21,r20
1407 06f4 C701 movw r24,r14
1408 06f6 B601 movw r22,r12
1409 06f8 0E94 0000 call __mulsi3
1410 06fc DC01 movw r26,r24
1411 06fe CB01 movw r24,r22
1412 0700 8093 0000 sts IntegralRoll,r24
1413 0704 9093 0000 sts (IntegralRoll)+1,r25
1414 0708 A093 0000 sts (IntegralRoll)+2,r26
1415 070c B093 0000 sts (IntegralRoll)+3,r27
1416 0710 8092 0000 sts Mess_IntegralNick,r8
1417 0714 9092 0000 sts (Mess_IntegralNick)+1,r9
1418 0718 A092 0000 sts (Mess_IntegralNick)+2,r10
1419 071c B092 0000 sts (Mess_IntegralNick)+3,r11
1420 0720 8093 0000 sts Mess_IntegralRoll,r24
1421 0724 9093 0000 sts (Mess_IntegralRoll)+1,r25
1422 0728 A093 0000 sts (Mess_IntegralRoll)+2,r26
1423 072c B093 0000 sts (Mess_IntegralRoll)+3,r27
1424 0730 1092 0000 sts Mess_Integral_Gier,__zero_reg__
1425 0734 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
1426 0738 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
1427 073c 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
1428 0740 8091 0000 lds r24,Luftdruck
1429 0744 9091 0000 lds r25,(Luftdruck)+1
1430 0748 A091 0000 lds r26,(Luftdruck)+2
1431 074c B091 0000 lds r27,(Luftdruck)+3
1432 0750 9093 0000 sts (StartLuftdruck)+1,r25
1433 0754 8093 0000 sts StartLuftdruck,r24
1434 0758 1092 0000 sts (VarioMeter)+1,__zero_reg__
1435 075c 1092 0000 sts VarioMeter,__zero_reg__
1436 0760 1092 0000 sts Mess_Integral_Hoch,__zero_reg__
1437 0764 1092 0000 sts (Mess_Integral_Hoch)+1,__zero_reg__
1438 0768 1092 0000 sts (Mess_Integral_Hoch)+2,__zero_reg__
1439 076c 1092 0000 sts (Mess_Integral_Hoch)+3,__zero_reg__
1440 0770 0091 0000 lds r16,KompassValue
1441 0774 1091 0000 lds r17,(KompassValue)+1
1442 0778 1093 0000 sts (KompassSollWert)+1,r17
1443 077c 0093 0000 sts KompassSollWert,r16
1444 0780 84E6 ldi r24,lo8(100)
1445 0782 90E0 ldi r25,hi8(100)
1446 0784 9093 0000 sts (KompassSignalSchlecht)+1,r25
1447 0788 8093 0000 sts KompassSignalSchlecht,r24
1448 078c 82E3 ldi r24,lo8(50)
1449 078e 90E0 ldi r25,hi8(50)
1450 0790 9093 0000 sts (beeptime)+1,r25
1451 0794 8093 0000 sts beeptime,r24
1452 0798 8091 0000 lds r24,EE_Parameter+65
1453 079c 9927 clr r25
1454 079e AA27 clr r26
1455 07a0 BB27 clr r27
1456 07a2 BC01 movw r22,r24
1457 07a4 CD01 movw r24,r26
1458 07a6 24EC ldi r18,lo8(2500)
1459 07a8 39E0 ldi r19,hi8(2500)
1460 07aa 40E0 ldi r20,hlo8(2500)
1461 07ac 50E0 ldi r21,hhi8(2500)
1462 07ae 0E94 0000 call __mulsi3
1463 07b2 DC01 movw r26,r24
1464 07b4 CB01 movw r24,r22
1465 07b6 8856 subi r24,lo8(-(15000))
1466 07b8 954C sbci r25,hi8(-(15000))
1467 07ba AF4F sbci r26,hlo8(-(15000))
1468 07bc BF4F sbci r27,hhi8(-(15000))
1469 07be 8093 0000 sts Umschlag180Nick,r24
1470 07c2 9093 0000 sts (Umschlag180Nick)+1,r25
1471 07c6 A093 0000 sts (Umschlag180Nick)+2,r26
1472 07ca B093 0000 sts (Umschlag180Nick)+3,r27
1473 07ce 8091 0000 lds r24,EE_Parameter+66
1474 07d2 9927 clr r25
1475 07d4 AA27 clr r26
1476 07d6 BB27 clr r27
1477 07d8 BC01 movw r22,r24
1478 07da CD01 movw r24,r26
1479 07dc 0E94 0000 call __mulsi3
1480 07e0 DC01 movw r26,r24
1481 07e2 CB01 movw r24,r22
1482 07e4 8856 subi r24,lo8(-(15000))
1483 07e6 954C sbci r25,hi8(-(15000))
1484 07e8 AF4F sbci r26,hlo8(-(15000))
1485 07ea BF4F sbci r27,hhi8(-(15000))
1486 07ec 8093 0000 sts Umschlag180Roll,r24
1487 07f0 9093 0000 sts (Umschlag180Roll)+1,r25
1488 07f4 A093 0000 sts (Umschlag180Roll)+2,r26
1489 07f8 B093 0000 sts (Umschlag180Roll)+3,r27
1490 07fc 1092 0000 sts (ExternHoehenValue)+1,__zero_reg__
1491 0800 1092 0000 sts ExternHoehenValue,__zero_reg__
1492 0804 C801 movw r24,r16
1493 0806 AA27 clr r26
1494 0808 97FD sbrc r25,7
1495 080a A095 com r26
1496 080c BA2F mov r27,r26
1497 080e 2091 0000 lds r18,GIER_GRAD_FAKTOR
1498 0812 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
1499 0816 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
1500 081a 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
1501 081e BC01 movw r22,r24
1502 0820 CD01 movw r24,r26
1503 0822 0E94 0000 call __mulsi3
1504 0826 DC01 movw r26,r24
1505 0828 CB01 movw r24,r22
1506 082a 8093 0000 sts ErsatzKompass,r24
1507 082e 9093 0000 sts (ErsatzKompass)+1,r25
1508 0832 A093 0000 sts (ErsatzKompass)+2,r26
1509 0836 B093 0000 sts (ErsatzKompass)+3,r27
1510 083a 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
1511 083e 1092 0000 sts GierGyroFehler,__zero_reg__
1512 0842 0E94 0000 call LED_Init
1513 0846 8091 0000 lds r24,FC_StatusFlags
1514 084a 8460 ori r24,lo8(4)
1515 084c 8093 0000 sts FC_StatusFlags,r24
1516 0850 8FEF ldi r24,lo8(-1)
1517 0852 8093 0000 sts FromNaviCtrl_Value,r24
1518 0856 1092 0000 sts FromNaviCtrl_Value+1,__zero_reg__
1519 085a 80E2 ldi r24,lo8(32)
1520 085c 8093 0000 sts FromNaviCtrl_Value+2,r24
1521 0860 C0E0 ldi r28,lo8(Poti)
1522 0862 D0E0 ldi r29,hi8(Poti)
1523 0864 A0E0 ldi r26,lo8(EE_Parameter+5)
1524 0866 B0E0 ldi r27,hi8(EE_Parameter+5)
1525 0868 07E0 ldi r16,lo8(7)
1526 .L69:
1527 086a 8D91 ld r24,X+
1528 086c E82F mov r30,r24
1529 086e FF27 clr r31
1530 0870 EE0F add r30,r30
1531 0872 FF1F adc r31,r31
1532 0874 E050 subi r30,lo8(-(PPM_in))
1533 0876 F040 sbci r31,hi8(-(PPM_in))
1534 0878 8081 ld r24,Z
1535 087a 9181 ldd r25,Z+1
1536 087c 8158 subi r24,lo8(-(127))
1537 087e 8993 st Y+,r24
1538 0880 0150 subi r16,lo8(-(-1))
1539 0882 07FF sbrs r16,7
1540 0884 00C0 rjmp .L69
1541 0886 84E6 ldi r24,lo8(100)
1542 0888 8093 0000 sts SenderOkay,r24
1543 088c 8091 0000 lds r24,ServoActive
1544 0890 8823 tst r24
1545 0892 01F0 breq .L70
1546 0894 579A sbi 42-0x20,7
1547 0896 00C0 rjmp .L71
1548 .L70:
1549 0898 80E0 ldi r24,lo8(4352)
1550 089a 91E1 ldi r25,hi8(4352)
1551 089c 9093 0000 sts (NickServoValue)+1,r25
1552 08a0 8093 0000 sts NickServoValue,r24
1553 .L71:
1554 08a4 8091 0000 lds r24,AdNeutralNick
1555 08a8 9091 0000 lds r25,(AdNeutralNick)+1
1556 08ac 8056 subi r24,lo8(-(-2400))
1557 08ae 9940 sbci r25,hi8(-(-2400))
1558 08b0 815C subi r24,lo8(11201)
1559 08b2 9B42 sbci r25,hi8(11201)
1560 08b4 00F0 brlo .L72
1561 08b6 8091 0000 lds r24,VersionInfo+5
1562 08ba 8160 ori r24,lo8(1)
1563 08bc 8093 0000 sts VersionInfo+5,r24
1564 .L72:
1565 08c0 8091 0000 lds r24,AdNeutralRoll
1566 08c4 9091 0000 lds r25,(AdNeutralRoll)+1
1567 08c8 8056 subi r24,lo8(-(-2400))
1568 08ca 9940 sbci r25,hi8(-(-2400))
1569 08cc 815C subi r24,lo8(11201)
1570 08ce 9B42 sbci r25,hi8(11201)
1571 08d0 00F0 brlo .L73
1572 08d2 8091 0000 lds r24,VersionInfo+5
1573 08d6 8260 ori r24,lo8(2)
1574 08d8 8093 0000 sts VersionInfo+5,r24
1575 .L73:
1576 08dc 8091 0000 lds r24,AdNeutralGier
1577 08e0 9091 0000 lds r25,(AdNeutralGier)+1
1578 08e4 8C52 subi r24,lo8(-(-300))
1579 08e6 9140 sbci r25,hi8(-(-300))
1580 08e8 8957 subi r24,lo8(1401)
1581 08ea 9540 sbci r25,hi8(1401)
1582 08ec 00F0 brlo .L74
1583 08ee 8091 0000 lds r24,VersionInfo+5
1584 08f2 8460 ori r24,lo8(4)
1585 08f4 8093 0000 sts VersionInfo+5,r24
1586 .L74:
1587 08f8 8091 0000 lds r24,NeutralAccX
1588 08fc 9091 0000 lds r25,(NeutralAccX)+1
1589 0900 8C52 subi r24,lo8(-(-300))
1590 0902 9140 sbci r25,hi8(-(-300))
1591 0904 835C subi r24,lo8(451)
1592 0906 9140 sbci r25,hi8(451)
1593 0908 00F0 brlo .L75
1594 090a 8091 0000 lds r24,VersionInfo+5
1595 090e 8860 ori r24,lo8(8)
1596 0910 8093 0000 sts VersionInfo+5,r24
1597 .L75:
1598 0914 8091 0000 lds r24,NeutralAccY
1599 0918 9091 0000 lds r25,(NeutralAccY)+1
1600 091c 8C52 subi r24,lo8(-(-300))
1601 091e 9140 sbci r25,hi8(-(-300))
1602 0920 835C subi r24,lo8(451)
1603 0922 9140 sbci r25,hi8(451)
1604 0924 00F0 brlo .L76
1605 0926 8091 0000 lds r24,VersionInfo+5
1606 092a 8061 ori r24,lo8(16)
1607 092c 8093 0000 sts VersionInfo+5,r24
1608 .L76:
1609 0930 8091 0000 lds r24,NeutralAccZ
1610 0934 9091 0000 lds r25,(NeutralAccZ)+1
1611 0938 8050 subi r24,lo8(-(-512))
1612 093a 9240 sbci r25,hi8(-(-512))
1613 093c 8355 subi r24,lo8(339)
1614 093e 9140 sbci r25,hi8(339)
1615 0940 00F0 brlo .L77
1616 0942 8091 0000 lds r24,VersionInfo+5
1617 0946 8062 ori r24,lo8(32)
1618 0948 8093 0000 sts VersionInfo+5,r24
1619 .L77:
1620 094c 86E4 ldi r24,lo8(70)
1621 094e 8093 0000 sts carefree_old,r24
1622 0952 0E94 0000 call LIBFC_HoTT_Clear
1623 /* epilogue: frame size=0 */
1624 0956 ECE0 ldi r30,12
1625 0958 CDB7 in r28,__SP_L__
1626 095a DEB7 in r29,__SP_H__
1627 095c 0C94 0000 jmp __epilogue_restores__+12
1628 /* epilogue end (size=5) */
1629 /* function SetNeutral size 705 (694) */
1631 .lcomm tmpl.27,4
1632 .lcomm tmpl2.28,4
1633 .lcomm tmpl3.29,4
1634 .lcomm tmpl4.30,4
1635 .lcomm oldNick.31,2
1636 .lcomm oldRoll.32,2
1637 .lcomm d2Roll.33,2
1638 .lcomm d2Nick.34,2
1639 .global Mittelwert
1641 Mittelwert:
1642 /* prologue: frame size=19 */
1643 0960 A3E1 ldi r26,lo8(19)
1644 0962 B0E0 ldi r27,hi8(19)
1645 0964 E0E0 ldi r30,pm_lo8(1f)
1646 0966 F0E0 ldi r31,pm_hi8(1f)
1647 0968 0C94 0000 jmp __prologue_saves__+0
1648 1:
1649 /* prologue end (size=6) */
1650 096c 8091 0000 lds r24,AdNeutralGier
1651 0970 9091 0000 lds r25,(AdNeutralGier)+1
1652 0974 2091 0000 lds r18,AdWertGier
1653 0978 3091 0000 lds r19,(AdWertGier)+1
1654 097c 821B sub r24,r18
1655 097e 930B sbc r25,r19
1656 0980 9093 0000 sts (MesswertGier)+1,r25
1657 0984 8093 0000 sts MesswertGier,r24
1658 0988 8091 0000 lds r24,AdWertNickFilter
1659 098c 9091 0000 lds r25,(AdWertNickFilter)+1
1660 0990 97FD sbrc r25,7
1661 0992 0796 adiw r24,7
1662 .L83:
1663 0994 9C01 movw r18,r24
1664 0996 13E0 ldi r17,3
1665 0998 3595 1: asr r19
1666 099a 2795 ror r18
1667 099c 1A95 dec r17
1668 099e 01F4 brne 1b
1669 09a0 3093 0000 sts (MesswertNick)+1,r19
1670 09a4 2093 0000 sts MesswertNick,r18
1671 09a8 8091 0000 lds r24,AdWertRollFilter
1672 09ac 9091 0000 lds r25,(AdWertRollFilter)+1
1673 09b0 97FD sbrc r25,7
1674 09b2 0796 adiw r24,7
1675 .L84:
1676 09b4 B3E0 ldi r27,3
1677 09b6 9595 1: asr r25
1678 09b8 8795 ror r24
1679 09ba BA95 dec r27
1680 09bc 01F4 brne 1b
1681 09be 9093 0000 sts (MesswertRoll)+1,r25
1682 09c2 8093 0000 sts MesswertRoll,r24
1683 09c6 3093 0000 sts (RohMesswertNick)+1,r19
1684 09ca 2093 0000 sts RohMesswertNick,r18
1685 09ce 9093 0000 sts (RohMesswertRoll)+1,r25
1686 09d2 8093 0000 sts RohMesswertRoll,r24
1687 09d6 8091 0000 lds r24,Mittelwert_AccNick
1688 09da 9091 0000 lds r25,(Mittelwert_AccNick)+1
1689 09de AC01 movw r20,r24
1690 09e0 440F lsl r20
1691 09e2 551F rol r21
1692 09e4 480F add r20,r24
1693 09e6 591F adc r21,r25
1694 09e8 2091 0000 lds r18,AdWertAccNick
1695 09ec 3091 0000 lds r19,(AdWertAccNick)+1
1696 09f0 C901 movw r24,r18
1697 09f2 880F lsl r24
1698 09f4 991F rol r25
1699 09f6 880F lsl r24
1700 09f8 991F rol r25
1701 09fa 820F add r24,r18
1702 09fc 931F adc r25,r19
1703 09fe 820F add r24,r18
1704 0a00 931F adc r25,r19
1705 0a02 480F add r20,r24
1706 0a04 591F adc r21,r25
1707 0a06 57FF sbrs r21,7
1708 0a08 00C0 rjmp .L85
1709 0a0a 4D5F subi r20,lo8(-(3))
1710 0a0c 5F4F sbci r21,hi8(-(3))
1711 .L85:
1712 0a0e 5595 asr r21
1713 0a10 4795 ror r20
1714 0a12 5595 asr r21
1715 0a14 4795 ror r20
1716 0a16 5093 0000 sts (Mittelwert_AccNick)+1,r21
1717 0a1a 4093 0000 sts Mittelwert_AccNick,r20
1718 0a1e 8091 0000 lds r24,Mittelwert_AccRoll
1719 0a22 9091 0000 lds r25,(Mittelwert_AccRoll)+1
1720 0a26 AC01 movw r20,r24
1721 0a28 440F lsl r20
1722 0a2a 551F rol r21
1723 0a2c 480F add r20,r24
1724 0a2e 591F adc r21,r25
1725 0a30 2091 0000 lds r18,AdWertAccRoll
1726 0a34 3091 0000 lds r19,(AdWertAccRoll)+1
1727 0a38 C901 movw r24,r18
1728 0a3a 880F lsl r24
1729 0a3c 991F rol r25
1730 0a3e 880F lsl r24
1731 0a40 991F rol r25
1732 0a42 820F add r24,r18
1733 0a44 931F adc r25,r19
1734 0a46 820F add r24,r18
1735 0a48 931F adc r25,r19
1736 0a4a 480F add r20,r24
1737 0a4c 591F adc r21,r25
1738 0a4e 57FF sbrs r21,7
1739 0a50 00C0 rjmp .L86
1740 0a52 4D5F subi r20,lo8(-(3))
1741 0a54 5F4F sbci r21,hi8(-(3))
1742 .L86:
1743 0a56 5595 asr r21
1744 0a58 4795 ror r20
1745 0a5a 5595 asr r21
1746 0a5c 4795 ror r20
1747 0a5e 5093 0000 sts (Mittelwert_AccRoll)+1,r21
1748 0a62 4093 0000 sts Mittelwert_AccRoll,r20
1749 0a66 2091 0000 lds r18,AdWertAccNick
1750 0a6a 3091 0000 lds r19,(AdWertAccNick)+1
1751 0a6e C901 movw r24,r18
1752 0a70 880F lsl r24
1753 0a72 991F rol r25
1754 0a74 880F lsl r24
1755 0a76 991F rol r25
1756 0a78 820F add r24,r18
1757 0a7a 931F adc r25,r19
1758 0a7c 820F add r24,r18
1759 0a7e 931F adc r25,r19
1760 0a80 9C01 movw r18,r24
1761 0a82 4427 clr r20
1762 0a84 37FD sbrc r19,7
1763 0a86 4095 com r20
1764 0a88 542F mov r21,r20
1765 0a8a 8091 0000 lds r24,IntegralAccNick
1766 0a8e 9091 0000 lds r25,(IntegralAccNick)+1
1767 0a92 A091 0000 lds r26,(IntegralAccNick)+2
1768 0a96 B091 0000 lds r27,(IntegralAccNick)+3
1769 0a9a 820F add r24,r18
1770 0a9c 931F adc r25,r19
1771 0a9e A41F adc r26,r20
1772 0aa0 B51F adc r27,r21
1773 0aa2 8093 0000 sts IntegralAccNick,r24
1774 0aa6 9093 0000 sts (IntegralAccNick)+1,r25
1775 0aaa A093 0000 sts (IntegralAccNick)+2,r26
1776 0aae B093 0000 sts (IntegralAccNick)+3,r27
1777 0ab2 2091 0000 lds r18,AdWertAccRoll
1778 0ab6 3091 0000 lds r19,(AdWertAccRoll)+1
1779 0aba C901 movw r24,r18
1780 0abc 880F lsl r24
1781 0abe 991F rol r25
1782 0ac0 880F lsl r24
1783 0ac2 991F rol r25
1784 0ac4 820F add r24,r18
1785 0ac6 931F adc r25,r19
1786 0ac8 820F add r24,r18
1787 0aca 931F adc r25,r19
1788 0acc 9C01 movw r18,r24
1789 0ace 4427 clr r20
1790 0ad0 37FD sbrc r19,7
1791 0ad2 4095 com r20
1792 0ad4 542F mov r21,r20
1793 0ad6 8091 0000 lds r24,IntegralAccRoll
1794 0ada 9091 0000 lds r25,(IntegralAccRoll)+1
1795 0ade A091 0000 lds r26,(IntegralAccRoll)+2
1796 0ae2 B091 0000 lds r27,(IntegralAccRoll)+3
1797 0ae6 820F add r24,r18
1798 0ae8 931F adc r25,r19
1799 0aea A41F adc r26,r20
1800 0aec B51F adc r27,r21
1801 0aee 8093 0000 sts IntegralAccRoll,r24
1802 0af2 9093 0000 sts (IntegralAccRoll)+1,r25
1803 0af6 A093 0000 sts (IntegralAccRoll)+2,r26
1804 0afa B093 0000 sts (IntegralAccRoll)+3,r27
1805 0afe 8091 0000 lds r24,NaviAccNick
1806 0b02 9091 0000 lds r25,(NaviAccNick)+1
1807 0b06 2091 0000 lds r18,AdWertAccNick
1808 0b0a 3091 0000 lds r19,(AdWertAccNick)+1
1809 0b0e 820F add r24,r18
1810 0b10 931F adc r25,r19
1811 0b12 9093 0000 sts (NaviAccNick)+1,r25
1812 0b16 8093 0000 sts NaviAccNick,r24
1813 0b1a 8091 0000 lds r24,NaviAccRoll
1814 0b1e 9091 0000 lds r25,(NaviAccRoll)+1
1815 0b22 2091 0000 lds r18,AdWertAccRoll
1816 0b26 3091 0000 lds r19,(AdWertAccRoll)+1
1817 0b2a 820F add r24,r18
1818 0b2c 931F adc r25,r19
1819 0b2e 9093 0000 sts (NaviAccRoll)+1,r25
1820 0b32 8093 0000 sts NaviAccRoll,r24
1821 0b36 8091 0000 lds r24,NaviCntAcc
1822 0b3a 9091 0000 lds r25,(NaviCntAcc)+1
1823 0b3e 0196 adiw r24,1
1824 0b40 9093 0000 sts (NaviCntAcc)+1,r25
1825 0b44 8093 0000 sts NaviCntAcc,r24
1826 0b48 8091 0000 lds r24,Aktuell_az
1827 0b4c 9091 0000 lds r25,(Aktuell_az)+1
1828 0b50 2091 0000 lds r18,NeutralAccZ
1829 0b54 3091 0000 lds r19,(NeutralAccZ)+1
1830 0b58 821B sub r24,r18
1831 0b5a 930B sbc r25,r19
1832 0b5c 9C01 movw r18,r24
1833 0b5e 4427 clr r20
1834 0b60 37FD sbrc r19,7
1835 0b62 4095 com r20
1836 0b64 542F mov r21,r20
1837 0b66 8091 0000 lds r24,IntegralAccZ
1838 0b6a 9091 0000 lds r25,(IntegralAccZ)+1
1839 0b6e A091 0000 lds r26,(IntegralAccZ)+2
1840 0b72 B091 0000 lds r27,(IntegralAccZ)+3
1841 0b76 820F add r24,r18
1842 0b78 931F adc r25,r19
1843 0b7a A41F adc r26,r20
1844 0b7c B51F adc r27,r21
1845 0b7e 8093 0000 sts IntegralAccZ,r24
1846 0b82 9093 0000 sts (IntegralAccZ)+1,r25
1847 0b86 A093 0000 sts (IntegralAccZ)+2,r26
1848 0b8a B093 0000 sts (IntegralAccZ)+3,r27
1849 0b8e 8FEC ldi r24,lo8(-49)
1850 0b90 8093 7A00 sts 122,r24
1851 0b94 1092 0000 sts AdReady,__zero_reg__
1852 0b98 2091 0000 lds r18,Mess_IntegralRoll
1853 0b9c 3091 0000 lds r19,(Mess_IntegralRoll)+1
1854 0ba0 4091 0000 lds r20,(Mess_IntegralRoll)+2
1855 0ba4 5091 0000 lds r21,(Mess_IntegralRoll)+3
1856 0ba8 2987 std Y+9,r18
1857 0baa 3A87 std Y+10,r19
1858 0bac 4B87 std Y+11,r20
1859 0bae 5C87 std Y+12,r21
1860 0bb0 2954 subi r18,lo8(93001)
1861 0bb2 3B46 sbci r19,hi8(93001)
1862 0bb4 4140 sbci r20,hlo8(93001)
1863 0bb6 5040 sbci r21,hhi8(93001)
1864 0bb8 04F0 brlt .L87
1865 0bba 28E4 ldi r18,lo8(93000)
1866 0bbc 3BE6 ldi r19,hi8(93000)
1867 0bbe 41E0 ldi r20,hlo8(93000)
1868 0bc0 50E0 ldi r21,hhi8(93000)
1869 0bc2 00C0 rjmp .L167
1870 .L87:
1871 0bc4 8985 ldd r24,Y+9
1872 0bc6 9A85 ldd r25,Y+10
1873 0bc8 AB85 ldd r26,Y+11
1874 0bca BC85 ldd r27,Y+12
1875 0bcc 885B subi r24,lo8(-93000)
1876 0bce 9449 sbci r25,hi8(-93000)
1877 0bd0 AE4F sbci r26,hlo8(-93000)
1878 0bd2 BF4F sbci r27,hhi8(-93000)
1879 0bd4 04F4 brge .L89
1880 0bd6 28EB ldi r18,lo8(-93000)
1881 0bd8 34E9 ldi r19,hi8(-93000)
1882 0bda 4EEF ldi r20,hlo8(-93000)
1883 0bdc 5FEF ldi r21,hhi8(-93000)
1884 .L167:
1885 0bde 2D83 std Y+5,r18
1886 0be0 3E83 std Y+6,r19
1887 0be2 4F83 std Y+7,r20
1888 0be4 5887 std Y+8,r21
1889 0be6 00C0 rjmp .L88
1890 .L89:
1891 0be8 8985 ldd r24,Y+9
1892 0bea 9A85 ldd r25,Y+10
1893 0bec AB85 ldd r26,Y+11
1894 0bee BC85 ldd r27,Y+12
1895 0bf0 8D83 std Y+5,r24
1896 0bf2 9E83 std Y+6,r25
1897 0bf4 AF83 std Y+7,r26
1898 0bf6 B887 std Y+8,r27
1899 .L88:
1900 0bf8 2091 0000 lds r18,Mess_IntegralNick
1901 0bfc 3091 0000 lds r19,(Mess_IntegralNick)+1
1902 0c00 4091 0000 lds r20,(Mess_IntegralNick)+2
1903 0c04 5091 0000 lds r21,(Mess_IntegralNick)+3
1904 0c08 2D87 std Y+13,r18
1905 0c0a 3E87 std Y+14,r19
1906 0c0c 4F87 std Y+15,r20
1907 0c0e 588B std Y+16,r21
1908 0c10 2954 subi r18,lo8(93001)
1909 0c12 3B46 sbci r19,hi8(93001)
1910 0c14 4140 sbci r20,hlo8(93001)
1911 0c16 5040 sbci r21,hhi8(93001)
1912 0c18 04F0 brlt .L91
1913 0c1a 28E4 ldi r18,lo8(93000)
1914 0c1c 3BE6 ldi r19,hi8(93000)
1915 0c1e 41E0 ldi r20,hlo8(93000)
1916 0c20 50E0 ldi r21,hhi8(93000)
1917 0c22 00C0 rjmp .L168
1918 .L91:
1919 0c24 8D85 ldd r24,Y+13
1920 0c26 9E85 ldd r25,Y+14
1921 0c28 AF85 ldd r26,Y+15
1922 0c2a B889 ldd r27,Y+16
1923 0c2c 885B subi r24,lo8(-93000)
1924 0c2e 9449 sbci r25,hi8(-93000)
1925 0c30 AE4F sbci r26,hlo8(-93000)
1926 0c32 BF4F sbci r27,hhi8(-93000)
1927 0c34 04F4 brge .L93
1928 0c36 28EB ldi r18,lo8(-93000)
1929 0c38 34E9 ldi r19,hi8(-93000)
1930 0c3a 4EEF ldi r20,hlo8(-93000)
1931 0c3c 5FEF ldi r21,hhi8(-93000)
1932 .L168:
1933 0c3e 2983 std Y+1,r18
1934 0c40 3A83 std Y+2,r19
1935 0c42 4B83 std Y+3,r20
1936 0c44 5C83 std Y+4,r21
1937 0c46 00C0 rjmp .L92
1938 .L93:
1939 0c48 8D85 ldd r24,Y+13
1940 0c4a 9E85 ldd r25,Y+14
1941 0c4c AF85 ldd r26,Y+15
1942 0c4e B889 ldd r27,Y+16
1943 0c50 8983 std Y+1,r24
1944 0c52 9A83 std Y+2,r25
1945 0c54 AB83 std Y+3,r26
1946 0c56 BC83 std Y+4,r27
1947 .L92:
1948 0c58 A091 0000 lds r26,MesswertGier
1949 0c5c B091 0000 lds r27,(MesswertGier)+1
1950 0c60 BB8B std Y+19,r27
1951 0c62 AA8B std Y+18,r26
1952 0c64 FD01 movw r30,r26
1953 0c66 CF01 movw r24,r30
1954 0c68 AA27 clr r26
1955 0c6a 97FD sbrc r25,7
1956 0c6c A095 com r26
1957 0c6e BA2F mov r27,r26
1958 0c70 A090 0000 lds r10,Mess_Integral_Gier
1959 0c74 B090 0000 lds r11,(Mess_Integral_Gier)+1
1960 0c78 C090 0000 lds r12,(Mess_Integral_Gier)+2
1961 0c7c D090 0000 lds r13,(Mess_Integral_Gier)+3
1962 0c80 A80E add r10,r24
1963 0c82 B91E adc r11,r25
1964 0c84 CA1E adc r12,r26
1965 0c86 DB1E adc r13,r27
1966 0c88 A092 0000 sts Mess_Integral_Gier,r10
1967 0c8c B092 0000 sts (Mess_Integral_Gier)+1,r11
1968 0c90 C092 0000 sts (Mess_Integral_Gier)+2,r12
1969 0c94 D092 0000 sts (Mess_Integral_Gier)+3,r13
1970 0c98 E090 0000 lds r14,ErsatzKompass
1971 0c9c F090 0000 lds r15,(ErsatzKompass)+1
1972 0ca0 0091 0000 lds r16,(ErsatzKompass)+2
1973 0ca4 1091 0000 lds r17,(ErsatzKompass)+3
1974 0ca8 E80E add r14,r24
1975 0caa F91E adc r15,r25
1976 0cac 0A1F adc r16,r26
1977 0cae 1B1F adc r17,r27
1978 0cb0 E092 0000 sts ErsatzKompass,r14
1979 0cb4 F092 0000 sts (ErsatzKompass)+1,r15
1980 0cb8 0093 0000 sts (ErsatzKompass)+2,r16
1981 0cbc 1093 0000 sts (ErsatzKompass)+3,r17
1982 0cc0 F091 0000 lds r31,Looping_Nick
1983 0cc4 F98B std Y+17,r31
1984 0cc6 FF23 tst r31
1985 0cc8 01F0 breq .+2
1986 0cca 00C0 rjmp .L95
1987 0ccc 8091 0000 lds r24,Looping_Roll
1988 0cd0 8823 tst r24
1989 0cd2 01F0 breq .+2
1990 0cd4 00C0 rjmp .L95
1991 0cd6 8091 0000 lds r24,Parameter_GlobalConfig
1992 0cda 86FF sbrs r24,6
1993 0cdc 00C0 rjmp .L95
1994 0cde 8091 0000 lds r24,MesswertRoll
1995 0ce2 9091 0000 lds r25,(MesswertRoll)+1
1996 0ce6 AA27 clr r26
1997 0ce8 97FD sbrc r25,7
1998 0cea A095 com r26
1999 0cec BA2F mov r27,r26
2000 0cee BC01 movw r22,r24
2001 0cf0 CD01 movw r24,r26
2002 0cf2 2981 ldd r18,Y+1
2003 0cf4 3A81 ldd r19,Y+2
2004 0cf6 4B81 ldd r20,Y+3
2005 0cf8 5C81 ldd r21,Y+4
2006 0cfa 0E94 0000 call __mulsi3
2007 0cfe 9B01 movw r18,r22
2008 0d00 AC01 movw r20,r24
2009 0d02 97FF sbrs r25,7
2010 0d04 00C0 rjmp .L96
2011 0d06 2150 subi r18,lo8(-(2047))
2012 0d08 384F sbci r19,hi8(-(2047))
2013 0d0a 4F4F sbci r20,hlo8(-(2047))
2014 0d0c 5F4F sbci r21,hhi8(-(2047))
2015 .L96:
2016 0d0e BBE0 ldi r27,11
2017 0d10 5595 1: asr r21
2018 0d12 4795 ror r20
2019 0d14 3795 ror r19
2020 0d16 2795 ror r18
2021 0d18 BA95 dec r27
2022 0d1a 01F4 brne 1b
2023 0d1c 8091 0000 lds r24,Parameter_AchsKopplung2
2024 0d20 682E mov r6,r24
2025 0d22 7724 clr r7
2026 0d24 8824 clr r8
2027 0d26 9924 clr r9
2028 0d28 CA01 movw r24,r20
2029 0d2a B901 movw r22,r18
2030 0d2c A401 movw r20,r8
2031 0d2e 9301 movw r18,r6
2032 0d30 0E94 0000 call __mulsi3
2033 0d34 DC01 movw r26,r24
2034 0d36 CB01 movw r24,r22
2035 0d38 8093 0000 sts tmpl3.29,r24
2036 0d3c 9093 0000 sts (tmpl3.29)+1,r25
2037 0d40 A093 0000 sts (tmpl3.29)+2,r26
2038 0d44 B093 0000 sts (tmpl3.29)+3,r27
2039 0d48 B7FF sbrs r27,7
2040 0d4a 00C0 rjmp .L97
2041 0d4c 8150 subi r24,lo8(-(4095))
2042 0d4e 904F sbci r25,hi8(-(4095))
2043 0d50 AF4F sbci r26,hlo8(-(4095))
2044 0d52 BF4F sbci r27,hhi8(-(4095))
2045 .L97:
2046 0d54 1C01 movw r2,r24
2047 0d56 2D01 movw r4,r26
2048 0d58 ACE0 ldi r26,12
2049 0d5a 5594 1: asr r5
2050 0d5c 4794 ror r4
2051 0d5e 3794 ror r3
2052 0d60 2794 ror r2
2053 0d62 AA95 dec r26
2054 0d64 01F4 brne 1b
2055 0d66 2092 0000 sts tmpl3.29,r2
2056 0d6a 3092 0000 sts (tmpl3.29)+1,r3
2057 0d6e 4092 0000 sts (tmpl3.29)+2,r4
2058 0d72 5092 0000 sts (tmpl3.29)+3,r5
2059 0d76 8091 0000 lds r24,MesswertNick
2060 0d7a 9091 0000 lds r25,(MesswertNick)+1
2061 0d7e AA27 clr r26
2062 0d80 97FD sbrc r25,7
2063 0d82 A095 com r26
2064 0d84 BA2F mov r27,r26
2065 0d86 BC01 movw r22,r24
2066 0d88 CD01 movw r24,r26
2067 0d8a 2D81 ldd r18,Y+5
2068 0d8c 3E81 ldd r19,Y+6
2069 0d8e 4F81 ldd r20,Y+7
2070 0d90 5885 ldd r21,Y+8
2071 0d92 0E94 0000 call __mulsi3
2072 0d96 97FF sbrs r25,7
2073 0d98 00C0 rjmp .L98
2074 0d9a 6150 subi r22,lo8(-(2047))
2075 0d9c 784F sbci r23,hi8(-(2047))
2076 0d9e 8F4F sbci r24,hlo8(-(2047))
2077 0da0 9F4F sbci r25,hhi8(-(2047))
2078 .L98:
2079 0da2 FBE0 ldi r31,11
2080 0da4 9595 1: asr r25
2081 0da6 8795 ror r24
2082 0da8 7795 ror r23
2083 0daa 6795 ror r22
2084 0dac FA95 dec r31
2085 0dae 01F4 brne 1b
2086 0db0 A401 movw r20,r8
2087 0db2 9301 movw r18,r6
2088 0db4 0E94 0000 call __mulsi3
2089 0db8 DC01 movw r26,r24
2090 0dba CB01 movw r24,r22
2091 0dbc 8093 0000 sts tmpl4.30,r24
2092 0dc0 9093 0000 sts (tmpl4.30)+1,r25
2093 0dc4 A093 0000 sts (tmpl4.30)+2,r26
2094 0dc8 B093 0000 sts (tmpl4.30)+3,r27
2095 0dcc B7FF sbrs r27,7
2096 0dce 00C0 rjmp .L99
2097 0dd0 8150 subi r24,lo8(-(4095))
2098 0dd2 904F sbci r25,hi8(-(4095))
2099 0dd4 AF4F sbci r26,hlo8(-(4095))
2100 0dd6 BF4F sbci r27,hhi8(-(4095))
2101 .L99:
2102 0dd8 9C01 movw r18,r24
2103 0dda AD01 movw r20,r26
2104 0ddc ECE0 ldi r30,12
2105 0dde 5595 1: asr r21
2106 0de0 4795 ror r20
2107 0de2 3795 ror r19
2108 0de4 2795 ror r18
2109 0de6 EA95 dec r30
2110 0de8 01F4 brne 1b
2111 0dea 2093 0000 sts tmpl4.30,r18
2112 0dee 3093 0000 sts (tmpl4.30)+1,r19
2113 0df2 4093 0000 sts (tmpl4.30)+2,r20
2114 0df6 5093 0000 sts (tmpl4.30)+3,r21
2115 0dfa 8091 0000 lds r24,tmpl3.29
2116 0dfe 9091 0000 lds r25,(tmpl3.29)+1
2117 0e02 9093 0000 sts (KopplungsteilNickRoll)+1,r25
2118 0e06 8093 0000 sts KopplungsteilNickRoll,r24
2119 0e0a 8091 0000 lds r24,tmpl4.30
2120 0e0e 9091 0000 lds r25,(tmpl4.30)+1
2121 0e12 9093 0000 sts (KopplungsteilRollNick)+1,r25
2122 0e16 8093 0000 sts KopplungsteilRollNick,r24
2123 0e1a 2219 sub r18,r2
2124 0e1c 3309 sbc r19,r3
2125 0e1e 4409 sbc r20,r4
2126 0e20 5509 sbc r21,r5
2127 0e22 2093 0000 sts tmpl4.30,r18
2128 0e26 3093 0000 sts (tmpl4.30)+1,r19
2129 0e2a 4093 0000 sts (tmpl4.30)+2,r20
2130 0e2e 5093 0000 sts (tmpl4.30)+3,r21
2131 0e32 E20E add r14,r18
2132 0e34 F31E adc r15,r19
2133 0e36 041F adc r16,r20
2134 0e38 151F adc r17,r21
2135 0e3a E092 0000 sts ErsatzKompass,r14
2136 0e3e F092 0000 sts (ErsatzKompass)+1,r15
2137 0e42 0093 0000 sts (ErsatzKompass)+2,r16
2138 0e46 1093 0000 sts (ErsatzKompass)+3,r17
2139 0e4a 8091 0000 lds r24,Parameter_CouplingYawCorrection
2140 0e4e 8823 tst r24
2141 0e50 01F4 brne .L100
2142 0e52 57FF sbrs r21,7
2143 0e54 00C0 rjmp .L101
2144 0e56 2F5F subi r18,lo8(-(1))
2145 0e58 3F4F sbci r19,hi8(-(1))
2146 0e5a 4F4F sbci r20,hlo8(-(1))
2147 0e5c 5F4F sbci r21,hhi8(-(1))
2148 .L101:
2149 0e5e 5595 asr r21
2150 0e60 4795 ror r20
2151 0e62 3795 ror r19
2152 0e64 2795 ror r18
2153 0e66 A21A sub r10,r18
2154 0e68 B30A sbc r11,r19
2155 0e6a C40A sbc r12,r20
2156 0e6c D50A sbc r13,r21
2157 0e6e A092 0000 sts Mess_Integral_Gier,r10
2158 0e72 B092 0000 sts (Mess_Integral_Gier)+1,r11
2159 0e76 C092 0000 sts (Mess_Integral_Gier)+2,r12
2160 0e7a D092 0000 sts (Mess_Integral_Gier)+3,r13
2161 .L100:
2162 0e7e 2A89 ldd r18,Y+18
2163 0e80 3B89 ldd r19,Y+19
2164 0e82 7901 movw r14,r18
2165 0e84 0027 clr r16
2166 0e86 F7FC sbrc r15,7
2167 0e88 0095 com r16
2168 0e8a 102F mov r17,r16
2169 0e8c 8091 0000 lds r24,tmpl4.30
2170 0e90 9091 0000 lds r25,(tmpl4.30)+1
2171 0e94 A091 0000 lds r26,(tmpl4.30)+2
2172 0e98 B091 0000 lds r27,(tmpl4.30)+3
2173 0e9c E80E add r14,r24
2174 0e9e F91E adc r15,r25
2175 0ea0 0A1F adc r16,r26
2176 0ea2 1B1F adc r17,r27
2177 0ea4 C801 movw r24,r16
2178 0ea6 B701 movw r22,r14
2179 0ea8 2981 ldd r18,Y+1
2180 0eaa 3A81 ldd r19,Y+2
2181 0eac 4B81 ldd r20,Y+3
2182 0eae 5C81 ldd r21,Y+4
2183 0eb0 0E94 0000 call __mulsi3
2184 0eb4 9B01 movw r18,r22
2185 0eb6 AC01 movw r20,r24
2186 0eb8 97FF sbrs r25,7
2187 0eba 00C0 rjmp .L102
2188 0ebc 2150 subi r18,lo8(-(2047))
2189 0ebe 384F sbci r19,hi8(-(2047))
2190 0ec0 4F4F sbci r20,hlo8(-(2047))
2191 0ec2 5F4F sbci r21,hhi8(-(2047))
2192 .L102:
2193 0ec4 6BE0 ldi r22,11
2194 0ec6 5595 1: asr r21
2195 0ec8 4795 ror r20
2196 0eca 3795 ror r19
2197 0ecc 2795 ror r18
2198 0ece 6A95 dec r22
2199 0ed0 01F4 brne 1b
2200 0ed2 8091 0000 lds r24,Parameter_AchsKopplung1
2201 0ed6 A82E mov r10,r24
2202 0ed8 BB24 clr r11
2203 0eda CC24 clr r12
2204 0edc DD24 clr r13
2205 0ede CA01 movw r24,r20
2206 0ee0 B901 movw r22,r18
2207 0ee2 A601 movw r20,r12
2208 0ee4 9501 movw r18,r10
2209 0ee6 0E94 0000 call __mulsi3
2210 0eea DC01 movw r26,r24
2211 0eec CB01 movw r24,r22
2212 0eee 8093 0000 sts tmpl.27,r24
2213 0ef2 9093 0000 sts (tmpl.27)+1,r25
2214 0ef6 A093 0000 sts (tmpl.27)+2,r26
2215 0efa B093 0000 sts (tmpl.27)+3,r27
2216 0efe B7FF sbrs r27,7
2217 0f00 00C0 rjmp .L103
2218 0f02 8150 subi r24,lo8(-(4095))
2219 0f04 904F sbci r25,hi8(-(4095))
2220 0f06 AF4F sbci r26,hlo8(-(4095))
2221 0f08 BF4F sbci r27,hhi8(-(4095))
2222 .L103:
2223 0f0a 3C01 movw r6,r24
2224 0f0c 4D01 movw r8,r26
2225 0f0e 3CE0 ldi r19,12
2226 0f10 9594 1: asr r9
2227 0f12 8794 ror r8
2228 0f14 7794 ror r7
2229 0f16 6794 ror r6
2230 0f18 3A95 dec r19
2231 0f1a 01F4 brne 1b
2232 0f1c 6092 0000 sts tmpl.27,r6
2233 0f20 7092 0000 sts (tmpl.27)+1,r7
2234 0f24 8092 0000 sts (tmpl.27)+2,r8
2235 0f28 9092 0000 sts (tmpl.27)+3,r9
2236 0f2c C801 movw r24,r16
2237 0f2e B701 movw r22,r14
2238 0f30 2D81 ldd r18,Y+5
2239 0f32 3E81 ldd r19,Y+6
2240 0f34 4F81 ldd r20,Y+7
2241 0f36 5885 ldd r21,Y+8
2242 0f38 0E94 0000 call __mulsi3
2243 0f3c 97FF sbrs r25,7
2244 0f3e 00C0 rjmp .L104
2245 0f40 6150 subi r22,lo8(-(2047))
2246 0f42 784F sbci r23,hi8(-(2047))
2247 0f44 8F4F sbci r24,hlo8(-(2047))
2248 0f46 9F4F sbci r25,hhi8(-(2047))
2249 .L104:
2250 0f48 2BE0 ldi r18,11
2251 0f4a 9595 1: asr r25
2252 0f4c 8795 ror r24
2253 0f4e 7795 ror r23
2254 0f50 6795 ror r22
2255 0f52 2A95 dec r18
2256 0f54 01F4 brne 1b
2257 0f56 A601 movw r20,r12
2258 0f58 9501 movw r18,r10
2259 0f5a 0E94 0000 call __mulsi3
2260 0f5e DC01 movw r26,r24
2261 0f60 CB01 movw r24,r22
2262 0f62 8093 0000 sts tmpl2.28,r24
2263 0f66 9093 0000 sts (tmpl2.28)+1,r25
2264 0f6a A093 0000 sts (tmpl2.28)+2,r26
2265 0f6e B093 0000 sts (tmpl2.28)+3,r27
2266 0f72 B7FF sbrs r27,7
2267 0f74 00C0 rjmp .L105
2268 0f76 8150 subi r24,lo8(-(4095))
2269 0f78 904F sbci r25,hi8(-(4095))
2270 0f7a AF4F sbci r26,hlo8(-(4095))
2271 0f7c BF4F sbci r27,hhi8(-(4095))
2272 .L105:
2273 0f7e AC01 movw r20,r24
2274 0f80 BD01 movw r22,r26
2275 0f82 8CE0 ldi r24,12
2276 0f84 7595 1: asr r23
2277 0f86 6795 ror r22
2278 0f88 5795 ror r21
2279 0f8a 4795 ror r20
2280 0f8c 8A95 dec r24
2281 0f8e 01F4 brne 1b
2282 0f90 4093 0000 sts tmpl2.28,r20
2283 0f94 5093 0000 sts (tmpl2.28)+1,r21
2284 0f98 6093 0000 sts (tmpl2.28)+2,r22
2285 0f9c 7093 0000 sts (tmpl2.28)+3,r23
2286 0fa0 2A89 ldd r18,Y+18
2287 0fa2 3B89 ldd r19,Y+19
2288 0fa4 37FF sbrs r19,7
2289 0fa6 00C0 rjmp .L107
2290 0fa8 3095 com r19
2291 0faa 2195 neg r18
2292 0fac 3F4F sbci r19,lo8(-1)
2293 .L107:
2294 0fae 2134 cpi r18,65
2295 0fb0 3105 cpc r19,__zero_reg__
2296 0fb2 04F0 brlt .L112
2297 0fb4 D401 movw r26,r8
2298 0fb6 C301 movw r24,r6
2299 0fb8 97FE sbrs r9,7
2300 0fba 00C0 rjmp .L110
2301 0fbc B095 com r27
2302 0fbe A095 com r26
2303 0fc0 9095 com r25
2304 0fc2 8195 neg r24
2305 0fc4 9F4F sbci r25,lo8(-1)
2306 0fc6 AF4F sbci r26,lo8(-1)
2307 0fc8 BF4F sbci r27,lo8(-1)
2308 .L110:
2309 0fca 8138 cpi r24,lo8(129)
2310 0fcc 9105 cpc r25,__zero_reg__
2311 0fce A105 cpc r26,__zero_reg__
2312 0fd0 B105 cpc r27,__zero_reg__
2313 0fd2 04F4 brge .L109
2314 0fd4 DB01 movw r26,r22
2315 0fd6 CA01 movw r24,r20
2316 0fd8 77FF sbrs r23,7
2317 0fda 00C0 rjmp .L111
2318 0fdc B095 com r27
2319 0fde A095 com r26
2320 0fe0 9095 com r25
2321 0fe2 8195 neg r24
2322 0fe4 9F4F sbci r25,lo8(-1)
2323 0fe6 AF4F sbci r26,lo8(-1)
2324 0fe8 BF4F sbci r27,lo8(-1)
2325 .L111:
2326 0fea 8138 cpi r24,lo8(129)
2327 0fec 9105 cpc r25,__zero_reg__
2328 0fee A105 cpc r26,__zero_reg__
2329 0ff0 B105 cpc r27,__zero_reg__
2330 0ff2 04F0 brlt .L112
2331 .L109:
2332 0ff4 81E0 ldi r24,lo8(1)
2333 0ff6 8093 0000 sts TrichterFlug,r24
2334 0ffa 00C0 rjmp .L112
2335 .L95:
2336 0ffc 1092 0000 sts (KopplungsteilRollNick)+1,__zero_reg__
2337 1000 1092 0000 sts KopplungsteilRollNick,__zero_reg__
2338 1004 1092 0000 sts (KopplungsteilNickRoll)+1,__zero_reg__
2339 1008 1092 0000 sts KopplungsteilNickRoll,__zero_reg__
2340 100c 1092 0000 sts tmpl2.28,__zero_reg__
2341 1010 1092 0000 sts (tmpl2.28)+1,__zero_reg__
2342 1014 1092 0000 sts (tmpl2.28)+2,__zero_reg__
2343 1018 1092 0000 sts (tmpl2.28)+3,__zero_reg__
2344 101c 1092 0000 sts tmpl.27,__zero_reg__
2345 1020 1092 0000 sts (tmpl.27)+1,__zero_reg__
2346 1024 1092 0000 sts (tmpl.27)+2,__zero_reg__
2347 1028 1092 0000 sts (tmpl.27)+3,__zero_reg__
2348 .L112:
2349 102c 8091 0000 lds r24,tmpl2.28
2350 1030 9091 0000 lds r25,(tmpl2.28)+1
2351 1034 A091 0000 lds r26,(tmpl2.28)+2
2352 1038 B091 0000 lds r27,(tmpl2.28)+3
2353 103c BC01 movw r22,r24
2354 103e CD01 movw r24,r26
2355 1040 24E6 ldi r18,lo8(100)
2356 1042 30E0 ldi r19,hi8(100)
2357 1044 40E0 ldi r20,hlo8(100)
2358 1046 50E0 ldi r21,hhi8(100)
2359 1048 0E94 0000 call __divmodsi4
2360 104c E090 0000 lds r14,tmpl.27
2361 1050 F090 0000 lds r15,(tmpl.27)+1
2362 1054 E21A sub r14,r18
2363 1056 F30A sbc r15,r19
2364 1058 F092 0000 sts (TrimRoll)+1,r15
2365 105c E092 0000 sts TrimRoll,r14
2366 1060 8091 0000 lds r24,tmpl.27
2367 1064 9091 0000 lds r25,(tmpl.27)+1
2368 1068 A091 0000 lds r26,(tmpl.27)+2
2369 106c B091 0000 lds r27,(tmpl.27)+3
2370 1070 BC01 movw r22,r24
2371 1072 CD01 movw r24,r26
2372 1074 24E6 ldi r18,lo8(100)
2373 1076 30E0 ldi r19,hi8(100)
2374 1078 40E0 ldi r20,hlo8(100)
2375 107a 50E0 ldi r21,hhi8(100)
2376 107c 0E94 0000 call __divmodsi4
2377 1080 DA01 movw r26,r20
2378 1082 C901 movw r24,r18
2379 1084 2091 0000 lds r18,tmpl2.28
2380 1088 3091 0000 lds r19,(tmpl2.28)+1
2381 108c 8C01 movw r16,r24
2382 108e 021B sub r16,r18
2383 1090 130B sbc r17,r19
2384 1092 1093 0000 sts (TrimNick)+1,r17
2385 1096 0093 0000 sts TrimNick,r16
2386 109a 8091 0000 lds r24,GIER_GRAD_FAKTOR
2387 109e 9091 0000 lds r25,(GIER_GRAD_FAKTOR)+1
2388 10a2 A091 0000 lds r26,(GIER_GRAD_FAKTOR)+2
2389 10a6 B091 0000 lds r27,(GIER_GRAD_FAKTOR)+3
2390 10aa BC01 movw r22,r24
2391 10ac CD01 movw r24,r26
2392 10ae 28E6 ldi r18,lo8(360)
2393 10b0 31E0 ldi r19,hi8(360)
2394 10b2 40E0 ldi r20,hlo8(360)
2395 10b4 50E0 ldi r21,hhi8(360)
2396 10b6 0E94 0000 call __mulsi3
2397 10ba 2091 0000 lds r18,ErsatzKompass
2398 10be 3091 0000 lds r19,(ErsatzKompass)+1
2399 10c2 4091 0000 lds r20,(ErsatzKompass)+2
2400 10c6 5091 0000 lds r21,(ErsatzKompass)+3
2401 10ca 2617 cp r18,r22
2402 10cc 3707 cpc r19,r23
2403 10ce 4807 cpc r20,r24
2404 10d0 5907 cpc r21,r25
2405 10d2 04F0 brlt .L113
2406 10d4 261B sub r18,r22
2407 10d6 370B sbc r19,r23
2408 10d8 480B sbc r20,r24
2409 10da 590B sbc r21,r25
2410 10dc 2093 0000 sts ErsatzKompass,r18
2411 10e0 3093 0000 sts (ErsatzKompass)+1,r19
2412 10e4 4093 0000 sts (ErsatzKompass)+2,r20
2413 10e8 5093 0000 sts (ErsatzKompass)+3,r21
2414 .L113:
2415 10ec 2091 0000 lds r18,ErsatzKompass
2416 10f0 3091 0000 lds r19,(ErsatzKompass)+1
2417 10f4 4091 0000 lds r20,(ErsatzKompass)+2
2418 10f8 5091 0000 lds r21,(ErsatzKompass)+3
2419 10fc 57FF sbrs r21,7
2420 10fe 00C0 rjmp .L114
2421 1100 260F add r18,r22
2422 1102 371F adc r19,r23
2423 1104 481F adc r20,r24
2424 1106 591F adc r21,r25
2425 1108 2093 0000 sts ErsatzKompass,r18
2426 110c 3093 0000 sts (ErsatzKompass)+1,r19
2427 1110 4093 0000 sts (ErsatzKompass)+2,r20
2428 1114 5093 0000 sts (ErsatzKompass)+3,r21
2429 .L114:
2430 1118 6091 0000 lds r22,MesswertRoll
2431 111c 7091 0000 lds r23,(MesswertRoll)+1
2432 1120 6E0D add r22,r14
2433 1122 7F1D adc r23,r15
2434 1124 9B01 movw r18,r22
2435 1126 4427 clr r20
2436 1128 37FD sbrc r19,7
2437 112a 4095 com r20
2438 112c 542F mov r21,r20
2439 112e 8091 0000 lds r24,Mess_IntegralRoll2
2440 1132 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2441 1136 A091 0000 lds r26,(Mess_IntegralRoll2)+2
2442 113a B091 0000 lds r27,(Mess_IntegralRoll2)+3
2443 113e 820F add r24,r18
2444 1140 931F adc r25,r19
2445 1142 A41F adc r26,r20
2446 1144 B51F adc r27,r21
2447 1146 8093 0000 sts Mess_IntegralRoll2,r24
2448 114a 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2449 114e A093 0000 sts (Mess_IntegralRoll2)+2,r26
2450 1152 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2451 1156 8091 0000 lds r24,LageKorrekturRoll
2452 115a 9091 0000 lds r25,(LageKorrekturRoll)+1
2453 115e 681B sub r22,r24
2454 1160 790B sbc r23,r25
2455 1162 CB01 movw r24,r22
2456 1164 AA27 clr r26
2457 1166 97FD sbrc r25,7
2458 1168 A095 com r26
2459 116a BA2F mov r27,r26
2460 116c 2985 ldd r18,Y+9
2461 116e 3A85 ldd r19,Y+10
2462 1170 4B85 ldd r20,Y+11
2463 1172 5C85 ldd r21,Y+12
2464 1174 820F add r24,r18
2465 1176 931F adc r25,r19
2466 1178 A41F adc r26,r20
2467 117a B51F adc r27,r21
2468 117c 8093 0000 sts Mess_IntegralRoll,r24
2469 1180 9093 0000 sts (Mess_IntegralRoll)+1,r25
2470 1184 A093 0000 sts (Mess_IntegralRoll)+2,r26
2471 1188 B093 0000 sts (Mess_IntegralRoll)+3,r27
2472 118c C090 0000 lds r12,Umschlag180Roll
2473 1190 D090 0000 lds r13,(Umschlag180Roll)+1
2474 1194 E090 0000 lds r14,(Umschlag180Roll)+2
2475 1198 F090 0000 lds r15,(Umschlag180Roll)+3
2476 119c C816 cp r12,r24
2477 119e D906 cpc r13,r25
2478 11a0 EA06 cpc r14,r26
2479 11a2 FB06 cpc r15,r27
2480 11a4 04F4 brge .L115
2481 11a6 88EA ldi r24,lo8(25000)
2482 11a8 91E6 ldi r25,hi8(25000)
2483 11aa A0E0 ldi r26,hlo8(25000)
2484 11ac B0E0 ldi r27,hhi8(25000)
2485 11ae 8C19 sub r24,r12
2486 11b0 9D09 sbc r25,r13
2487 11b2 AE09 sbc r26,r14
2488 11b4 BF09 sbc r27,r15
2489 11b6 8093 0000 sts Mess_IntegralRoll,r24
2490 11ba 9093 0000 sts (Mess_IntegralRoll)+1,r25
2491 11be A093 0000 sts (Mess_IntegralRoll)+2,r26
2492 11c2 B093 0000 sts (Mess_IntegralRoll)+3,r27
2493 11c6 8093 0000 sts Mess_IntegralRoll2,r24
2494 11ca 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2495 11ce A093 0000 sts (Mess_IntegralRoll2)+2,r26
2496 11d2 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2497 .L115:
2498 11d6 2227 clr r18
2499 11d8 3327 clr r19
2500 11da A901 movw r20,r18
2501 11dc 2C19 sub r18,r12
2502 11de 3D09 sbc r19,r13
2503 11e0 4E09 sbc r20,r14
2504 11e2 5F09 sbc r21,r15
2505 11e4 8091 0000 lds r24,Mess_IntegralRoll
2506 11e8 9091 0000 lds r25,(Mess_IntegralRoll)+1
2507 11ec A091 0000 lds r26,(Mess_IntegralRoll)+2
2508 11f0 B091 0000 lds r27,(Mess_IntegralRoll)+3
2509 11f4 8217 cp r24,r18
2510 11f6 9307 cpc r25,r19
2511 11f8 A407 cpc r26,r20
2512 11fa B507 cpc r27,r21
2513 11fc 04F4 brge .L116
2514 11fe D701 movw r26,r14
2515 1200 C601 movw r24,r12
2516 1202 885A subi r24,lo8(-(-25000))
2517 1204 9146 sbci r25,hi8(-(-25000))
2518 1206 A040 sbci r26,hlo8(-(-25000))
2519 1208 B040 sbci r27,hhi8(-(-25000))
2520 120a 8093 0000 sts Mess_IntegralRoll,r24
2521 120e 9093 0000 sts (Mess_IntegralRoll)+1,r25
2522 1212 A093 0000 sts (Mess_IntegralRoll)+2,r26
2523 1216 B093 0000 sts (Mess_IntegralRoll)+3,r27
2524 121a 8093 0000 sts Mess_IntegralRoll2,r24
2525 121e 9093 0000 sts (Mess_IntegralRoll2)+1,r25
2526 1222 A093 0000 sts (Mess_IntegralRoll2)+2,r26
2527 1226 B093 0000 sts (Mess_IntegralRoll2)+3,r27
2528 .L116:
2529 122a 6091 0000 lds r22,MesswertNick
2530 122e 7091 0000 lds r23,(MesswertNick)+1
2531 1232 600F add r22,r16
2532 1234 711F adc r23,r17
2533 1236 9B01 movw r18,r22
2534 1238 4427 clr r20
2535 123a 37FD sbrc r19,7
2536 123c 4095 com r20
2537 123e 542F mov r21,r20
2538 1240 8091 0000 lds r24,Mess_IntegralNick2
2539 1244 9091 0000 lds r25,(Mess_IntegralNick2)+1
2540 1248 A091 0000 lds r26,(Mess_IntegralNick2)+2
2541 124c B091 0000 lds r27,(Mess_IntegralNick2)+3
2542 1250 820F add r24,r18
2543 1252 931F adc r25,r19
2544 1254 A41F adc r26,r20
2545 1256 B51F adc r27,r21
2546 1258 8093 0000 sts Mess_IntegralNick2,r24
2547 125c 9093 0000 sts (Mess_IntegralNick2)+1,r25
2548 1260 A093 0000 sts (Mess_IntegralNick2)+2,r26
2549 1264 B093 0000 sts (Mess_IntegralNick2)+3,r27
2550 1268 8091 0000 lds r24,LageKorrekturNick
2551 126c 9091 0000 lds r25,(LageKorrekturNick)+1
2552 1270 681B sub r22,r24
2553 1272 790B sbc r23,r25
2554 1274 CB01 movw r24,r22
2555 1276 AA27 clr r26
2556 1278 97FD sbrc r25,7
2557 127a A095 com r26
2558 127c BA2F mov r27,r26
2559 127e 2D85 ldd r18,Y+13
2560 1280 3E85 ldd r19,Y+14
2561 1282 4F85 ldd r20,Y+15
2562 1284 5889 ldd r21,Y+16
2563 1286 820F add r24,r18
2564 1288 931F adc r25,r19
2565 128a A41F adc r26,r20
2566 128c B51F adc r27,r21
2567 128e 8093 0000 sts Mess_IntegralNick,r24
2568 1292 9093 0000 sts (Mess_IntegralNick)+1,r25
2569 1296 A093 0000 sts (Mess_IntegralNick)+2,r26
2570 129a B093 0000 sts (Mess_IntegralNick)+3,r27
2571 129e E090 0000 lds r14,Umschlag180Nick
2572 12a2 F090 0000 lds r15,(Umschlag180Nick)+1
2573 12a6 0091 0000 lds r16,(Umschlag180Nick)+2
2574 12aa 1091 0000 lds r17,(Umschlag180Nick)+3
2575 12ae E816 cp r14,r24
2576 12b0 F906 cpc r15,r25
2577 12b2 0A07 cpc r16,r26
2578 12b4 1B07 cpc r17,r27
2579 12b6 04F4 brge .L117
2580 12b8 88EA ldi r24,lo8(25000)
2581 12ba 91E6 ldi r25,hi8(25000)
2582 12bc A0E0 ldi r26,hlo8(25000)
2583 12be B0E0 ldi r27,hhi8(25000)
2584 12c0 8E19 sub r24,r14
2585 12c2 9F09 sbc r25,r15
2586 12c4 A00B sbc r26,r16
2587 12c6 B10B sbc r27,r17
2588 12c8 8093 0000 sts Mess_IntegralNick,r24
2589 12cc 9093 0000 sts (Mess_IntegralNick)+1,r25
2590 12d0 A093 0000 sts (Mess_IntegralNick)+2,r26
2591 12d4 B093 0000 sts (Mess_IntegralNick)+3,r27
2592 12d8 8093 0000 sts Mess_IntegralNick2,r24
2593 12dc 9093 0000 sts (Mess_IntegralNick2)+1,r25
2594 12e0 A093 0000 sts (Mess_IntegralNick2)+2,r26
2595 12e4 B093 0000 sts (Mess_IntegralNick2)+3,r27
2596 .L117:
2597 12e8 2227 clr r18
2598 12ea 3327 clr r19
2599 12ec A901 movw r20,r18
2600 12ee 2E19 sub r18,r14
2601 12f0 3F09 sbc r19,r15
2602 12f2 400B sbc r20,r16
2603 12f4 510B sbc r21,r17
2604 12f6 8091 0000 lds r24,Mess_IntegralNick
2605 12fa 9091 0000 lds r25,(Mess_IntegralNick)+1
2606 12fe A091 0000 lds r26,(Mess_IntegralNick)+2
2607 1302 B091 0000 lds r27,(Mess_IntegralNick)+3
2608 1306 8217 cp r24,r18
2609 1308 9307 cpc r25,r19
2610 130a A407 cpc r26,r20
2611 130c B507 cpc r27,r21
2612 130e 04F4 brge .L118
2613 1310 D801 movw r26,r16
2614 1312 C701 movw r24,r14
2615 1314 885A subi r24,lo8(-(-25000))
2616 1316 9146 sbci r25,hi8(-(-25000))
2617 1318 A040 sbci r26,hlo8(-(-25000))
2618 131a B040 sbci r27,hhi8(-(-25000))
2619 131c 8093 0000 sts Mess_IntegralNick,r24
2620 1320 9093 0000 sts (Mess_IntegralNick)+1,r25
2621 1324 A093 0000 sts (Mess_IntegralNick)+2,r26
2622 1328 B093 0000 sts (Mess_IntegralNick)+3,r27
2623 132c 8093 0000 sts Mess_IntegralNick2,r24
2624 1330 9093 0000 sts (Mess_IntegralNick2)+1,r25
2625 1334 A093 0000 sts (Mess_IntegralNick2)+2,r26
2626 1338 B093 0000 sts (Mess_IntegralNick2)+3,r27
2627 .L118:
2628 133c 8091 0000 lds r24,Mess_Integral_Gier
2629 1340 9091 0000 lds r25,(Mess_Integral_Gier)+1
2630 1344 A091 0000 lds r26,(Mess_Integral_Gier)+2
2631 1348 B091 0000 lds r27,(Mess_Integral_Gier)+3
2632 134c 8093 0000 sts Integral_Gier,r24
2633 1350 9093 0000 sts (Integral_Gier)+1,r25
2634 1354 A093 0000 sts (Integral_Gier)+2,r26
2635 1358 B093 0000 sts (Integral_Gier)+3,r27
2636 135c 8091 0000 lds r24,Mess_IntegralNick
2637 1360 9091 0000 lds r25,(Mess_IntegralNick)+1
2638 1364 A091 0000 lds r26,(Mess_IntegralNick)+2
2639 1368 B091 0000 lds r27,(Mess_IntegralNick)+3
2640 136c 8093 0000 sts IntegralNick,r24
2641 1370 9093 0000 sts (IntegralNick)+1,r25
2642 1374 A093 0000 sts (IntegralNick)+2,r26
2643 1378 B093 0000 sts (IntegralNick)+3,r27
2644 137c 8091 0000 lds r24,Mess_IntegralRoll
2645 1380 9091 0000 lds r25,(Mess_IntegralRoll)+1
2646 1384 A091 0000 lds r26,(Mess_IntegralRoll)+2
2647 1388 B091 0000 lds r27,(Mess_IntegralRoll)+3
2648 138c 8093 0000 sts IntegralRoll,r24
2649 1390 9093 0000 sts (IntegralRoll)+1,r25
2650 1394 A093 0000 sts (IntegralRoll)+2,r26
2651 1398 B093 0000 sts (IntegralRoll)+3,r27
2652 139c 8091 0000 lds r24,Mess_IntegralNick2
2653 13a0 9091 0000 lds r25,(Mess_IntegralNick2)+1
2654 13a4 A091 0000 lds r26,(Mess_IntegralNick2)+2
2655 13a8 B091 0000 lds r27,(Mess_IntegralNick2)+3
2656 13ac 8093 0000 sts IntegralNick2,r24
2657 13b0 9093 0000 sts (IntegralNick2)+1,r25
2658 13b4 A093 0000 sts (IntegralNick2)+2,r26
2659 13b8 B093 0000 sts (IntegralNick2)+3,r27
2660 13bc 8091 0000 lds r24,Mess_IntegralRoll2
2661 13c0 9091 0000 lds r25,(Mess_IntegralRoll2)+1
2662 13c4 A091 0000 lds r26,(Mess_IntegralRoll2)+2
2663 13c8 B091 0000 lds r27,(Mess_IntegralRoll2)+3
2664 13cc 8093 0000 sts IntegralRoll2,r24
2665 13d0 9093 0000 sts (IntegralRoll2)+1,r25
2666 13d4 A093 0000 sts (IntegralRoll2)+2,r26
2667 13d8 B093 0000 sts (IntegralRoll2)+3,r27
2668 13dc 8091 0000 lds r24,HiResNick
2669 13e0 9091 0000 lds r25,(HiResNick)+1
2670 13e4 97FD sbrc r25,7
2671 13e6 0796 adiw r24,7
2672 .L119:
2673 13e8 03E0 ldi r16,3
2674 13ea 9595 1: asr r25
2675 13ec 8795 ror r24
2676 13ee 0A95 dec r16
2677 13f0 01F4 brne 1b
2678 13f2 9093 0000 sts (MesswertNick)+1,r25
2679 13f6 8093 0000 sts MesswertNick,r24
2680 13fa 8091 0000 lds r24,HiResRoll
2681 13fe 9091 0000 lds r25,(HiResRoll)+1
2682 1402 97FD sbrc r25,7
2683 1404 0796 adiw r24,7
2684 .L120:
2685 1406 13E0 ldi r17,3
2686 1408 9595 1: asr r25
2687 140a 8795 ror r24
2688 140c 1A95 dec r17
2689 140e 01F4 brne 1b
2690 1410 9093 0000 sts (MesswertRoll)+1,r25
2691 1414 8093 0000 sts MesswertRoll,r24
2692 1418 8091 0000 lds r24,AdWertNick
2693 141c 9091 0000 lds r25,(AdWertNick)+1
2694 1420 0F97 sbiw r24,15
2695 1422 04F4 brge .L121
2696 1424 88E1 ldi r24,lo8(-1000)
2697 1426 9CEF ldi r25,hi8(-1000)
2698 1428 9093 0000 sts (MesswertNick)+1,r25
2699 142c 8093 0000 sts MesswertNick,r24
2700 .L121:
2701 1430 8091 0000 lds r24,AdWertNick
2702 1434 9091 0000 lds r25,(AdWertNick)+1
2703 1438 0797 sbiw r24,7
2704 143a 04F4 brge .L122
2705 143c 80E3 ldi r24,lo8(-2000)
2706 143e 98EF ldi r25,hi8(-2000)
2707 1440 9093 0000 sts (MesswertNick)+1,r25
2708 1444 8093 0000 sts MesswertNick,r24
2709 .L122:
2710 1448 2091 0000 lds r18,PlatinenVersion
2711 144c 2A30 cpi r18,lo8(10)
2712 144e 01F4 brne .L123
2713 1450 8091 0000 lds r24,AdWertNick
2714 1454 9091 0000 lds r25,(AdWertNick)+1
2715 1458 835F subi r24,lo8(1011)
2716 145a 9340 sbci r25,hi8(1011)
2717 145c 04F0 brlt .L124
2718 145e 88EE ldi r24,lo8(1000)
2719 1460 93E0 ldi r25,hi8(1000)
2720 1462 9093 0000 sts (MesswertNick)+1,r25
2721 1466 8093 0000 sts MesswertNick,r24
2722 .L124:
2723 146a 8091 0000 lds r24,AdWertNick
2724 146e 9091 0000 lds r25,(AdWertNick)+1
2725 1472 8A5F subi r24,lo8(1018)
2726 1474 9340 sbci r25,hi8(1018)
2727 1476 04F0 brlt .L126
2728 1478 00C0 rjmp .L169
2729 .L123:
2730 147a 8091 0000 lds r24,AdWertNick
2731 147e 9091 0000 lds r25,(AdWertNick)+1
2732 1482 815D subi r24,lo8(2001)
2733 1484 9740 sbci r25,hi8(2001)
2734 1486 04F0 brlt .L127
2735 1488 88EE ldi r24,lo8(1000)
2736 148a 93E0 ldi r25,hi8(1000)
2737 148c 9093 0000 sts (MesswertNick)+1,r25
2738 1490 8093 0000 sts MesswertNick,r24
2739 .L127:
2740 1494 8091 0000 lds r24,AdWertNick
2741 1498 9091 0000 lds r25,(AdWertNick)+1
2742 149c 805E subi r24,lo8(2016)
2743 149e 9740 sbci r25,hi8(2016)
2744 14a0 04F0 brlt .L126
2745 .L169:
2746 14a2 80ED ldi r24,lo8(2000)
2747 14a4 97E0 ldi r25,hi8(2000)
2748 14a6 9093 0000 sts (MesswertNick)+1,r25
2749 14aa 8093 0000 sts MesswertNick,r24
2750 .L126:
2751 14ae 8091 0000 lds r24,AdWertRoll
2752 14b2 9091 0000 lds r25,(AdWertRoll)+1
2753 14b6 0F97 sbiw r24,15
2754 14b8 04F4 brge .L129
2755 14ba 88E1 ldi r24,lo8(-1000)
2756 14bc 9CEF ldi r25,hi8(-1000)
2757 14be 9093 0000 sts (MesswertRoll)+1,r25
2758 14c2 8093 0000 sts MesswertRoll,r24
2759 .L129:
2760 14c6 8091 0000 lds r24,AdWertRoll
2761 14ca 9091 0000 lds r25,(AdWertRoll)+1
2762 14ce 0797 sbiw r24,7
2763 14d0 04F4 brge .L130
2764 14d2 80E3 ldi r24,lo8(-2000)
2765 14d4 98EF ldi r25,hi8(-2000)
2766 14d6 9093 0000 sts (MesswertRoll)+1,r25
2767 14da 8093 0000 sts MesswertRoll,r24
2768 .L130:
2769 14de 2A30 cpi r18,lo8(10)
2770 14e0 01F4 brne .L131
2771 14e2 8091 0000 lds r24,AdWertRoll
2772 14e6 9091 0000 lds r25,(AdWertRoll)+1
2773 14ea 835F subi r24,lo8(1011)
2774 14ec 9340 sbci r25,hi8(1011)
2775 14ee 04F0 brlt .L132
2776 14f0 88EE ldi r24,lo8(1000)
2777 14f2 93E0 ldi r25,hi8(1000)
2778 14f4 9093 0000 sts (MesswertRoll)+1,r25
2779 14f8 8093 0000 sts MesswertRoll,r24
2780 .L132:
2781 14fc 8091 0000 lds r24,AdWertRoll
2782 1500 9091 0000 lds r25,(AdWertRoll)+1
2783 1504 8A5F subi r24,lo8(1018)
2784 1506 9340 sbci r25,hi8(1018)
2785 1508 04F0 brlt .L134
2786 150a 00C0 rjmp .L170
2787 .L131:
2788 150c 8091 0000 lds r24,AdWertRoll
2789 1510 9091 0000 lds r25,(AdWertRoll)+1
2790 1514 815D subi r24,lo8(2001)
2791 1516 9740 sbci r25,hi8(2001)
2792 1518 04F0 brlt .L135
2793 151a 88EE ldi r24,lo8(1000)
2794 151c 93E0 ldi r25,hi8(1000)
2795 151e 9093 0000 sts (MesswertRoll)+1,r25
2796 1522 8093 0000 sts MesswertRoll,r24
2797 .L135:
2798 1526 8091 0000 lds r24,AdWertRoll
2799 152a 9091 0000 lds r25,(AdWertRoll)+1
2800 152e 805E subi r24,lo8(2016)
2801 1530 9740 sbci r25,hi8(2016)
2802 1532 04F0 brlt .L134
2803 .L170:
2804 1534 80ED ldi r24,lo8(2000)
2805 1536 97E0 ldi r25,hi8(2000)
2806 1538 9093 0000 sts (MesswertRoll)+1,r25
2807 153c 8093 0000 sts MesswertRoll,r24
2808 .L134:
2809 1540 6091 0000 lds r22,Parameter_Gyro_D
2810 1544 6623 tst r22
2811 1546 01F4 brne .+2
2812 1548 00C0 rjmp .L137
2813 154a 4091 0000 lds r20,HiResNick
2814 154e 5091 0000 lds r21,(HiResNick)+1
2815 1552 8091 0000 lds r24,oldNick.31
2816 1556 9091 0000 lds r25,(oldNick.31)+1
2817 155a 481B sub r20,r24
2818 155c 590B sbc r21,r25
2819 155e 5093 0000 sts (d2Nick.34)+1,r21
2820 1562 4093 0000 sts d2Nick.34,r20
2821 1566 2091 0000 lds r18,HiResNick
2822 156a 3091 0000 lds r19,(HiResNick)+1
2823 156e 280F add r18,r24
2824 1570 391F adc r19,r25
2825 1572 37FF sbrs r19,7
2826 1574 00C0 rjmp .L138
2827 1576 2F5F subi r18,lo8(-(1))
2828 1578 3F4F sbci r19,hi8(-(1))
2829 .L138:
2830 157a 3595 asr r19
2831 157c 2795 ror r18
2832 157e 3093 0000 sts (oldNick.31)+1,r19
2833 1582 2093 0000 sts oldNick.31,r18
2834 1586 4138 cpi r20,129
2835 1588 5105 cpc r21,__zero_reg__
2836 158a 04F0 brlt .L139
2837 158c 80E8 ldi r24,lo8(128)
2838 158e 90E0 ldi r25,hi8(128)
2839 1590 00C0 rjmp .L171
2840 .L139:
2841 1592 4058 subi r20,lo8(-128)
2842 1594 5F4F sbci r21,hi8(-128)
2843 1596 04F4 brge .L140
2844 1598 80E8 ldi r24,lo8(-128)
2845 159a 9FEF ldi r25,hi8(-128)
2846 .L171:
2847 159c 9093 0000 sts (d2Nick.34)+1,r25
2848 15a0 8093 0000 sts d2Nick.34,r24
2849 .L140:
2850 15a4 4091 0000 lds r20,HiResRoll
2851 15a8 5091 0000 lds r21,(HiResRoll)+1
2852 15ac 8091 0000 lds r24,oldRoll.32
2853 15b0 9091 0000 lds r25,(oldRoll.32)+1
2854 15b4 481B sub r20,r24
2855 15b6 590B sbc r21,r25
2856 15b8 5093 0000 sts (d2Roll.33)+1,r21
2857 15bc 4093 0000 sts d2Roll.33,r20
2858 15c0 2091 0000 lds r18,HiResRoll
2859 15c4 3091 0000 lds r19,(HiResRoll)+1
2860 15c8 280F add r18,r24
2861 15ca 391F adc r19,r25
2862 15cc 37FF sbrs r19,7
2863 15ce 00C0 rjmp .L142
2864 15d0 2F5F subi r18,lo8(-(1))
2865 15d2 3F4F sbci r19,hi8(-(1))
2866 .L142:
2867 15d4 3595 asr r19
2868 15d6 2795 ror r18
2869 15d8 3093 0000 sts (oldRoll.32)+1,r19
2870 15dc 2093 0000 sts oldRoll.32,r18
2871 15e0 4138 cpi r20,129
2872 15e2 5105 cpc r21,__zero_reg__
2873 15e4 04F0 brlt .L143
2874 15e6 80E8 ldi r24,lo8(128)
2875 15e8 90E0 ldi r25,hi8(128)
2876 15ea 00C0 rjmp .L172
2877 .L143:
2878 15ec 4058 subi r20,lo8(-128)
2879 15ee 5F4F sbci r21,hi8(-128)
2880 15f0 04F4 brge .L144
2881 15f2 80E8 ldi r24,lo8(-128)
2882 15f4 9FEF ldi r25,hi8(-128)
2883 .L172:
2884 15f6 9093 0000 sts (d2Roll.33)+1,r25
2885 15fa 8093 0000 sts d2Roll.33,r24
2886 .L144:
2887 15fe 462F mov r20,r22
2888 1600 5527 clr r21
2889 1602 8091 0000 lds r24,d2Nick.34
2890 1606 9091 0000 lds r25,(d2Nick.34)+1
2891 160a 849F mul r24,r20
2892 160c B001 movw r22,r0
2893 160e 859F mul r24,r21
2894 1610 700D add r23,r0
2895 1612 949F mul r25,r20
2896 1614 700D add r23,r0
2897 1616 1124 clr r1
2898 1618 9B01 movw r18,r22
2899 161a 77FF sbrs r23,7
2900 161c 00C0 rjmp .L146
2901 161e 215F subi r18,lo8(-(15))
2902 1620 3F4F sbci r19,hi8(-(15))
2903 .L146:
2904 1622 F4E0 ldi r31,4
2905 1624 3595 1: asr r19
2906 1626 2795 ror r18
2907 1628 FA95 dec r31
2908 162a 01F4 brne 1b
2909 162c 8091 0000 lds r24,MesswertNick
2910 1630 9091 0000 lds r25,(MesswertNick)+1
2911 1634 820F add r24,r18
2912 1636 931F adc r25,r19
2913 1638 9093 0000 sts (MesswertNick)+1,r25
2914 163c 8093 0000 sts MesswertNick,r24
2915 1640 8091 0000 lds r24,d2Roll.33
2916 1644 9091 0000 lds r25,(d2Roll.33)+1
2917 1648 849F mul r24,r20
2918 164a D001 movw r26,r0
2919 164c 859F mul r24,r21
2920 164e B00D add r27,r0
2921 1650 949F mul r25,r20
2922 1652 B00D add r27,r0
2923 1654 1124 clr r1
2924 1656 AD01 movw r20,r26
2925 1658 9D01 movw r18,r26
2926 165a B7FF sbrs r27,7
2927 165c 00C0 rjmp .L147
2928 165e 215F subi r18,lo8(-(15))
2929 1660 3F4F sbci r19,hi8(-(15))
2930 .L147:
2931 1662 E4E0 ldi r30,4
2932 1664 3595 1: asr r19
2933 1666 2795 ror r18
2934 1668 EA95 dec r30
2935 166a 01F4 brne 1b
2936 166c 8091 0000 lds r24,MesswertRoll
2937 1670 9091 0000 lds r25,(MesswertRoll)+1
2938 1674 820F add r24,r18
2939 1676 931F adc r25,r19
2940 1678 9093 0000 sts (MesswertRoll)+1,r25
2941 167c 8093 0000 sts MesswertRoll,r24
2942 1680 8091 0000 lds r24,HiResNick
2943 1684 9091 0000 lds r25,(HiResNick)+1
2944 1688 860F add r24,r22
2945 168a 971F adc r25,r23
2946 168c 9093 0000 sts (HiResNick)+1,r25
2947 1690 8093 0000 sts HiResNick,r24
2948 1694 8091 0000 lds r24,HiResRoll
2949 1698 9091 0000 lds r25,(HiResRoll)+1
2950 169c 840F add r24,r20
2951 169e 951F adc r25,r21
2952 16a0 9093 0000 sts (HiResRoll)+1,r25
2953 16a4 8093 0000 sts HiResRoll,r24
2954 .L137:
2955 16a8 0091 0000 lds r16,RohMesswertRoll
2956 16ac 1091 0000 lds r17,(RohMesswertRoll)+1
2957 16b0 8091 0000 lds r24,KopplungsteilNickRoll
2958 16b4 9091 0000 lds r25,(KopplungsteilNickRoll)+1
2959 16b8 1016 cp __zero_reg__,r16
2960 16ba 1106 cpc __zero_reg__,r17
2961 16bc 04F4 brge .L148
2962 16be 9C01 movw r18,r24
2963 16c0 97FF sbrs r25,7
2964 16c2 00C0 rjmp .L149
2965 16c4 2227 clr r18
2966 16c6 3327 clr r19
2967 16c8 281B sub r18,r24
2968 16ca 390B sbc r19,r25
2969 .L149:
2970 16cc C901 movw r24,r18
2971 16ce AA27 clr r26
2972 16d0 97FD sbrc r25,7
2973 16d2 A095 com r26
2974 16d4 BA2F mov r27,r26
2975 16d6 2091 0000 lds r18,Parameter_CouplingYawCorrection
2976 16da 3327 clr r19
2977 16dc 4427 clr r20
2978 16de 5527 clr r21
2979 16e0 BC01 movw r22,r24
2980 16e2 CD01 movw r24,r26
2981 16e4 0E94 0000 call __mulsi3
2982 16e8 9B01 movw r18,r22
2983 16ea AC01 movw r20,r24
2984 16ec 97FF sbrs r25,7
2985 16ee 00C0 rjmp .L150
2986 16f0 215C subi r18,lo8(-(63))
2987 16f2 3F4F sbci r19,hi8(-(63))
2988 16f4 4F4F sbci r20,hlo8(-(63))
2989 16f6 5F4F sbci r21,hhi8(-(63))
2990 .L150:
2991 16f8 76E0 ldi r23,6
2992 16fa 5595 1: asr r21
2993 16fc 4795 ror r20
2994 16fe 3795 ror r19
2995 1700 2795 ror r18
2996 1702 7A95 dec r23
2997 1704 01F4 brne 1b
2998 1706 8091 0000 lds r24,TrimRoll
2999 170a 9091 0000 lds r25,(TrimRoll)+1
3000 170e 820F add r24,r18
3001 1710 931F adc r25,r19
3002 1712 00C0 rjmp .L173
3003 .L148:
3004 1714 97FF sbrs r25,7
3005 1716 00C0 rjmp .L152
3006 1718 9095 com r25
3007 171a 8195 neg r24
3008 171c 9F4F sbci r25,lo8(-1)
3009 .L152:
3010 171e AA27 clr r26
3011 1720 97FD sbrc r25,7
3012 1722 A095 com r26
3013 1724 BA2F mov r27,r26
3014 1726 2091 0000 lds r18,Parameter_CouplingYawCorrection
3015 172a 3327 clr r19
3016 172c 4427 clr r20
3017 172e 5527 clr r21
3018 1730 BC01 movw r22,r24
3019 1732 CD01 movw r24,r26
3020 1734 0E94 0000 call __mulsi3
3021 1738 9B01 movw r18,r22
3022 173a AC01 movw r20,r24
3023 173c 97FF sbrs r25,7
3024 173e 00C0 rjmp .L153
3025 1740 215C subi r18,lo8(-(63))
3026 1742 3F4F sbci r19,hi8(-(63))
3027 1744 4F4F sbci r20,hlo8(-(63))
3028 1746 5F4F sbci r21,hhi8(-(63))
3029 .L153:
3030 1748 66E0 ldi r22,6
3031 174a 5595 1: asr r21
3032 174c 4795 ror r20
3033 174e 3795 ror r19
3034 1750 2795 ror r18
3035 1752 6A95 dec r22
3036 1754 01F4 brne 1b
3037 1756 8091 0000 lds r24,TrimRoll
3038 175a 9091 0000 lds r25,(TrimRoll)+1
3039 175e 821B sub r24,r18
3040 1760 930B sbc r25,r19
3041 .L173:
3042 1762 9093 0000 sts (TrimRoll)+1,r25
3043 1766 8093 0000 sts TrimRoll,r24
3044 176a E090 0000 lds r14,RohMesswertNick
3045 176e F090 0000 lds r15,(RohMesswertNick)+1
3046 1772 8091 0000 lds r24,KopplungsteilRollNick
3047 1776 9091 0000 lds r25,(KopplungsteilRollNick)+1
3048 177a 1E14 cp __zero_reg__,r14
3049 177c 1F04 cpc __zero_reg__,r15
3050 177e 04F4 brge .L154
3051 1780 9C01 movw r18,r24
3052 1782 97FF sbrs r25,7
3053 1784 00C0 rjmp .L155
3054 1786 2227 clr r18
3055 1788 3327 clr r19
3056 178a 281B sub r18,r24
3057 178c 390B sbc r19,r25
3058 .L155:
3059 178e C901 movw r24,r18
3060 1790 AA27 clr r26
3061 1792 97FD sbrc r25,7
3062 1794 A095 com r26
3063 1796 BA2F mov r27,r26
3064 1798 2091 0000 lds r18,Parameter_CouplingYawCorrection
3065 179c 3327 clr r19
3066 179e 4427 clr r20
3067 17a0 5527 clr r21
3068 17a2 BC01 movw r22,r24
3069 17a4 CD01 movw r24,r26
3070 17a6 0E94 0000 call __mulsi3
3071 17aa 9B01 movw r18,r22
3072 17ac AC01 movw r20,r24
3073 17ae 97FF sbrs r25,7
3074 17b0 00C0 rjmp .L156
3075 17b2 215C subi r18,lo8(-(63))
3076 17b4 3F4F sbci r19,hi8(-(63))
3077 17b6 4F4F sbci r20,hlo8(-(63))
3078 17b8 5F4F sbci r21,hhi8(-(63))
3079 .L156:
3080 17ba 96E0 ldi r25,6
3081 17bc 5595 1: asr r21
3082 17be 4795 ror r20
3083 17c0 3795 ror r19
3084 17c2 2795 ror r18
3085 17c4 9A95 dec r25
3086 17c6 01F4 brne 1b
3087 17c8 8091 0000 lds r24,TrimNick
3088 17cc 9091 0000 lds r25,(TrimNick)+1
3089 17d0 820F add r24,r18
3090 17d2 931F adc r25,r19
3091 17d4 00C0 rjmp .L174
3092 .L154:
3093 17d6 97FF sbrs r25,7
3094 17d8 00C0 rjmp .L158
3095 17da 9095 com r25
3096 17dc 8195 neg r24
3097 17de 9F4F sbci r25,lo8(-1)
3098 .L158:
3099 17e0 AA27 clr r26
3100 17e2 97FD sbrc r25,7
3101 17e4 A095 com r26
3102 17e6 BA2F mov r27,r26
3103 17e8 2091 0000 lds r18,Parameter_CouplingYawCorrection
3104 17ec 3327 clr r19
3105 17ee 4427 clr r20
3106 17f0 5527 clr r21
3107 17f2 BC01 movw r22,r24
3108 17f4 CD01 movw r24,r26
3109 17f6 0E94 0000 call __mulsi3
3110 17fa 9B01 movw r18,r22
3111 17fc AC01 movw r20,r24
3112 17fe 97FF sbrs r25,7
3113 1800 00C0 rjmp .L159
3114 1802 215C subi r18,lo8(-(63))
3115 1804 3F4F sbci r19,hi8(-(63))
3116 1806 4F4F sbci r20,hlo8(-(63))
3117 1808 5F4F sbci r21,hhi8(-(63))
3118 .L159:
3119 180a 86E0 ldi r24,6
3120 180c 5595 1: asr r21
3121 180e 4795 ror r20
3122 1810 3795 ror r19
3123 1812 2795 ror r18
3124 1814 8A95 dec r24
3125 1816 01F4 brne 1b
3126 1818 8091 0000 lds r24,TrimNick
3127 181c 9091 0000 lds r25,(TrimNick)+1
3128 1820 821B sub r24,r18
3129 1822 930B sbc r25,r19
3130 .L174:
3131 1824 9093 0000 sts (TrimNick)+1,r25
3132 1828 8093 0000 sts TrimNick,r24
3133 182c 8091 0000 lds r24,Parameter_GlobalConfig
3134 1830 87FF sbrs r24,7
3135 1832 00C0 rjmp .L82
3136 1834 B989 ldd r27,Y+17
3137 1836 BB23 tst r27
3138 1838 01F0 breq .+2
3139 183a 00C0 rjmp .L82
3140 183c 8091 0000 lds r24,Looping_Roll
3141 1840 8823 tst r24
3142 1842 01F4 brne .L82
3143 1844 E1E0 ldi r30,lo8(257)
3144 1846 EE16 cp r14,r30
3145 1848 E1E0 ldi r30,hi8(257)
3146 184a FE06 cpc r15,r30
3147 184c 04F0 brlt .L161
3148 184e 8091 0000 lds r24,MesswertNick
3149 1852 9091 0000 lds r25,(MesswertNick)+1
3150 1856 8E0D add r24,r14
3151 1858 9F1D adc r25,r15
3152 185a 8050 subi r24,lo8(-(-256))
3153 185c 9140 sbci r25,hi8(-(-256))
3154 185e 00C0 rjmp .L175
3155 .L161:
3156 1860 F0E0 ldi r31,lo8(-256)
3157 1862 EF16 cp r14,r31
3158 1864 FFEF ldi r31,hi8(-256)
3159 1866 FF06 cpc r15,r31
3160 1868 04F4 brge .L162
3161 186a 8091 0000 lds r24,MesswertNick
3162 186e 9091 0000 lds r25,(MesswertNick)+1
3163 1872 8E0D add r24,r14
3164 1874 9F1D adc r25,r15
3165 1876 8050 subi r24,lo8(-(256))
3166 1878 9F4F sbci r25,hi8(-(256))
3167 .L175:
3168 187a 9093 0000 sts (MesswertNick)+1,r25
3169 187e 8093 0000 sts MesswertNick,r24
3170 .L162:
3171 1882 21E0 ldi r18,hi8(257)
3172 1884 0130 cpi r16,lo8(257)
3173 1886 1207 cpc r17,r18
3174 1888 04F0 brlt .L164
3175 188a 8091 0000 lds r24,MesswertRoll
3176 188e 9091 0000 lds r25,(MesswertRoll)+1
3177 1892 800F add r24,r16
3178 1894 911F adc r25,r17
3179 1896 8050 subi r24,lo8(-(-256))
3180 1898 9140 sbci r25,hi8(-(-256))
3181 189a 00C0 rjmp .L176
3182 .L164:
3183 189c 3FEF ldi r19,hi8(-256)
3184 189e 0030 cpi r16,lo8(-256)
3185 18a0 1307 cpc r17,r19
3186 18a2 04F4 brge .L82
3187 18a4 8091 0000 lds r24,MesswertRoll
3188 18a8 9091 0000 lds r25,(MesswertRoll)+1
3189 18ac 800F add r24,r16
3190 18ae 911F adc r25,r17
3191 18b0 8050 subi r24,lo8(-(256))
3192 18b2 9F4F sbci r25,hi8(-(256))
3193 .L176:
3194 18b4 9093 0000 sts (MesswertRoll)+1,r25
3195 18b8 8093 0000 sts MesswertRoll,r24
3196 .L82:
3197 /* epilogue: frame size=19 */
3198 18bc E2E1 ldi r30,18
3199 18be CD5E subi r28,-19
3200 18c0 0C94 0000 jmp __epilogue_restores__+0
3201 /* epilogue end (size=4) */
3202 /* function Mittelwert size 2000 (1990) */
3204 .global SendMotorData
3206 SendMotorData:
3207 /* prologue: frame size=0 */
3208 /* prologue end (size=0) */
3209 18c4 8091 0000 lds r24,MotorenEin
3210 18c8 8823 tst r24
3211 18ca 01F4 brne .L178
3212 18cc 8091 0000 lds r24,FC_StatusFlags
3213 18d0 8C7F andi r24,lo8(-4)
3214 18d2 8093 0000 sts FC_StatusFlags,r24
3215 18d6 A0E0 ldi r26,lo8(MotorTest)
3216 18d8 B0E0 ldi r27,hi8(MotorTest)
3217 18da E0E0 ldi r30,lo8(Motor)
3218 18dc F0E0 ldi r31,hi8(Motor)
3219 18de 9BE0 ldi r25,lo8(11)
3220 .L183:
3221 18e0 8091 0000 lds r24,PC_MotortestActive
3222 18e4 8823 tst r24
3223 18e6 01F4 brne .L182
3224 18e8 8C93 st X,r24
3225 .L182:
3226 18ea 8D91 ld r24,X+
3227 18ec 8183 std Z+1,r24
3228 18ee 1282 std Z+2,__zero_reg__
3229 18f0 9150 subi r25,lo8(-(-1))
3230 18f2 3896 adiw r30,8
3231 18f4 97FF sbrs r25,7
3232 18f6 00C0 rjmp .L183
3233 18f8 8091 0000 lds r24,PC_MotortestActive
3234 18fc 8823 tst r24
3235 18fe 01F0 breq .L185
3236 1900 8091 0000 lds r24,PC_MotortestActive
3237 1904 8150 subi r24,lo8(-(-1))
3238 1906 8093 0000 sts PC_MotortestActive,r24
3239 190a 00C0 rjmp .L185
3240 .L178:
3241 190c 8091 0000 lds r24,FC_StatusFlags
3242 1910 8160 ori r24,lo8(1)
3243 1912 8093 0000 sts FC_StatusFlags,r24
3244 .L185:
3245 1916 8091 0000 lds r24,I2C_TransferActive
3246 191a 8823 tst r24
3247 191c 01F0 breq .L186
3248 191e 1092 0000 sts I2C_TransferActive,__zero_reg__
3249 1922 0895 ret
3250 .L186:
3251 1924 8093 0000 sts motor_write,r24
3252 1928 8093 0000 sts twi_state,r24
3253 192c 8091 0000 lds r24,BLFlags
3254 1930 8E7F andi r24,lo8(-2)
3255 1932 8093 0000 sts BLFlags,r24
3256 1936 85EA ldi r24,lo8(-91)
3257 1938 8093 BC00 sts 188,r24
3258 193c 0895 ret
3259 /* epilogue: frame size=0 */
3260 /* epilogue: noreturn */
3261 /* epilogue end (size=0) */
3262 /* function SendMotorData size 61 (61) */
3264 .global ParameterZuordnung
3266 ParameterZuordnung:
3267 /* prologue: frame size=0 */
3268 193e CF93 push r28
3269 1940 DF93 push r29
3270 /* prologue end (size=2) */
3271 1942 A0E0 ldi r26,lo8(Poti)
3272 1944 B0E0 ldi r27,hi8(Poti)
3273 1946 C0E0 ldi r28,lo8(EE_Parameter+5)
3274 1948 D0E0 ldi r29,hi8(EE_Parameter+5)
3275 194a 57E0 ldi r21,lo8(7)
3276 .L203:
3277 194c 9991 ld r25,Y+
3278 194e E92F mov r30,r25
3279 1950 FF27 clr r31
3280 1952 EE0F add r30,r30
3281 1954 FF1F adc r31,r31
3282 1956 E050 subi r30,lo8(-(PPM_in))
3283 1958 F040 sbci r31,hi8(-(PPM_in))
3284 195a 0190 ld __tmp_reg__,Z+
3285 195c F081 ld r31,Z
3286 195e E02D mov r30,__tmp_reg__
3287 1960 E158 subi r30,lo8(-(127))
3288 1962 FF4F sbci r31,hi8(-(127))
3289 1964 EF3F cpi r30,255
3290 1966 F105 cpc r31,__zero_reg__
3291 1968 01F0 breq .L194
3292 196a 04F0 brlt .L194
3293 196c EFEF ldi r30,lo8(255)
3294 196e F0E0 ldi r31,hi8(255)
3295 1970 00C0 rjmp .L195
3296 .L194:
3297 1972 F7FF sbrs r31,7
3298 1974 00C0 rjmp .L195
3299 1976 E0E0 ldi r30,lo8(0)
3300 1978 F0E0 ldi r31,hi8(0)
3301 .L195:
3302 197a 9931 cpi r25,lo8(25)
3303 197c 01F4 brne .L197
3304 197e EC93 st X,r30
3305 1980 00C0 rjmp .L193
3306 .L197:
3307 1982 4C91 ld r20,X
3308 1984 242F mov r18,r20
3309 1986 3327 clr r19
3310 1988 E217 cp r30,r18
3311 198a F307 cpc r31,r19
3312 198c 01F0 breq .L193
3313 198e CF01 movw r24,r30
3314 1990 821B sub r24,r18
3315 1992 930B sbc r25,r19
3316 1994 97FD sbrc r25,7
3317 1996 0396 adiw r24,3
3318 .L200:
3319 1998 9595 asr r25
3320 199a 8795 ror r24
3321 199c 9595 asr r25
3322 199e 8795 ror r24
3323 19a0 242F mov r18,r20
3324 19a2 280F add r18,r24
3325 19a4 2C93 st X,r18
3326 19a6 822F mov r24,r18
3327 19a8 9927 clr r25
3328 19aa E817 cp r30,r24
3329 19ac F907 cpc r31,r25
3330 19ae 04F4 brge .L201
3331 19b0 2150 subi r18,lo8(-(-1))
3332 19b2 00C0 rjmp .L327
3333 .L201:
3334 19b4 2F5F subi r18,lo8(-(1))
3335 .L327:
3336 19b6 2C93 st X,r18
3337 .L193:
3338 19b8 5150 subi r21,lo8(-(-1))
3339 19ba 1196 adiw r26,1
3340 19bc 57FF sbrs r21,7
3341 19be 00C0 rjmp .L203
3342 19c0 8091 0000 lds r24,EE_Parameter+15
3343 19c4 883F cpi r24,lo8(-8)
3344 19c6 00F0 brlo .L328
3345 19c8 EFEF ldi r30,lo8(255)
3346 19ca F0E0 ldi r31,hi8(255)
3347 19cc E81B sub r30,r24
3348 19ce F109 sbc r31,__zero_reg__
3349 19d0 E050 subi r30,lo8(-(Poti))
3350 19d2 F040 sbci r31,hi8(-(Poti))
3351 19d4 8081 ld r24,Z
3352 .L328:
3353 19d6 8093 0000 sts Parameter_Luftdruck_D,r24
3354 19da 8091 0000 lds r24,Parameter_Luftdruck_D
3355 19de 8823 tst r24
3356 19e0 01F0 breq .L207
3357 19e2 8436 cpi r24,lo8(100)
3358 19e4 00F0 brlo .L207
3359 19e6 84E6 ldi r24,lo8(100)
3360 19e8 8093 0000 sts Parameter_Luftdruck_D,r24
3361 .L207:
3362 19ec 8091 0000 lds r24,EE_Parameter+17
3363 19f0 883F cpi r24,lo8(-8)
3364 19f2 00F0 brlo .L329
3365 19f4 EFEF ldi r30,lo8(255)
3366 19f6 F0E0 ldi r31,hi8(255)
3367 19f8 E81B sub r30,r24
3368 19fa F109 sbc r31,__zero_reg__
3369 19fc E050 subi r30,lo8(-(Poti))
3370 19fe F040 sbci r31,hi8(-(Poti))
3371 1a00 8081 ld r24,Z
3372 .L329:
3373 1a02 8093 0000 sts Parameter_Hoehe_P,r24
3374 1a06 8091 0000 lds r24,Parameter_Hoehe_P
3375 1a0a 8823 tst r24
3376 1a0c 01F0 breq .L212
3377 1a0e 8436 cpi r24,lo8(100)
3378 1a10 00F0 brlo .L212
3379 1a12 84E6 ldi r24,lo8(100)
3380 1a14 8093 0000 sts Parameter_Hoehe_P,r24
3381 .L212:
3382 1a18 8091 0000 lds r24,EE_Parameter+30
3383 1a1c 883F cpi r24,lo8(-8)
3384 1a1e 00F0 brlo .L330
3385 1a20 EFEF ldi r30,lo8(255)
3386 1a22 F0E0 ldi r31,hi8(255)
3387 1a24 E81B sub r30,r24
3388 1a26 F109 sbc r31,__zero_reg__
3389 1a28 E050 subi r30,lo8(-(Poti))
3390 1a2a F040 sbci r31,hi8(-(Poti))
3391 1a2c 8081 ld r24,Z
3392 .L330:
3393 1a2e 8093 0000 sts Parameter_Gyro_P,r24
3394 1a32 8091 0000 lds r24,Parameter_Gyro_P
3395 1a36 8B30 cpi r24,lo8(11)
3396 1a38 00F4 brsh .L216
3397 1a3a 8AE0 ldi r24,lo8(10)
3398 1a3c 00C0 rjmp .L331
3399 .L216:
3400 1a3e 8F3F cpi r24,lo8(-1)
3401 1a40 01F4 brne .L217
3402 .L331:
3403 1a42 8093 0000 sts Parameter_Gyro_P,r24
3404 .L217:
3405 1a46 8091 0000 lds r24,EE_Parameter+75
3406 1a4a 883F cpi r24,lo8(-8)
3407 1a4c 00F0 brlo .L332
3408 1a4e EFEF ldi r30,lo8(255)
3409 1a50 F0E0 ldi r31,hi8(255)
3410 1a52 E81B sub r30,r24
3411 1a54 F109 sbc r31,__zero_reg__
3412 1a56 E050 subi r30,lo8(-(Poti))
3413 1a58 F040 sbci r31,hi8(-(Poti))
3414 1a5a 8081 ld r24,Z
3415 .L332:
3416 1a5c 8093 0000 sts Parameter_J16Timing,r24
3417 1a60 8091 0000 lds r24,Parameter_J16Timing
3418 1a64 8630 cpi r24,lo8(6)
3419 1a66 00F4 brsh .L221
3420 1a68 85E0 ldi r24,lo8(5)
3421 1a6a 00C0 rjmp .L333
3422 .L221:
3423 1a6c 8F3F cpi r24,lo8(-1)
3424 1a6e 01F4 brne .L222
3425 .L333:
3426 1a70 8093 0000 sts Parameter_J16Timing,r24
3427 .L222:
3428 1a74 8091 0000 lds r24,EE_Parameter+77
3429 1a78 883F cpi r24,lo8(-8)
3430 1a7a 00F0 brlo .L334
3431 1a7c EFEF ldi r30,lo8(255)
3432 1a7e F0E0 ldi r31,hi8(255)
3433 1a80 E81B sub r30,r24
3434 1a82 F109 sbc r31,__zero_reg__
3435 1a84 E050 subi r30,lo8(-(Poti))
3436 1a86 F040 sbci r31,hi8(-(Poti))
3437 1a88 8081 ld r24,Z
3438 .L334:
3439 1a8a 8093 0000 sts Parameter_J17Timing,r24
3440 1a8e 8091 0000 lds r24,Parameter_J17Timing
3441 1a92 8630 cpi r24,lo8(6)
3442 1a94 00F4 brsh .L226
3443 1a96 85E0 ldi r24,lo8(5)
3444 1a98 00C0 rjmp .L335
3445 .L226:
3446 1a9a 8F3F cpi r24,lo8(-1)
3447 1a9c 01F4 brne .L227
3448 .L335:
3449 1a9e 8093 0000 sts Parameter_J17Timing,r24
3450 .L227:
3451 1aa2 8091 0000 lds r24,EE_Parameter+56
3452 1aa6 873F cpi r24,lo8(-9)
3453 1aa8 01F4 brne .L229
3454 1aaa 4299 sbic 40-0x20,2
3455 1aac 00C0 rjmp .L368
3456 1aae 00C0 rjmp .L234
3457 .L229:
3458 1ab0 863F cpi r24,lo8(-10)
3459 1ab2 01F4 brne .L233
3460 1ab4 439B sbis 40-0x20,3
3461 1ab6 00C0 rjmp .L234
3462 .L368:
3463 1ab8 8CE8 ldi r24,lo8(-116)
3464 1aba 00C0 rjmp .L336
3465 .L234:
3466 1abc 86E4 ldi r24,lo8(70)
3467 1abe 00C0 rjmp .L336
3468 .L233:
3469 1ac0 883F cpi r24,lo8(-8)
3470 1ac2 00F0 brlo .L336
3471 1ac4 EFEF ldi r30,lo8(255)
3472 1ac6 F0E0 ldi r31,hi8(255)
3473 1ac8 E81B sub r30,r24
3474 1aca F109 sbc r31,__zero_reg__
3475 1acc E050 subi r30,lo8(-(Poti))
3476 1ace F040 sbci r31,hi8(-(Poti))
3477 1ad0 8081 ld r24,Z
3478 .L336:
3479 1ad2 8093 0000 sts Parameter_Servo3,r24
3480 1ad6 8091 0000 lds r24,EE_Parameter+57
3481 1ada 873F cpi r24,lo8(-9)
3482 1adc 01F4 brne .L239
3483 1ade 4299 sbic 40-0x20,2
3484 1ae0 00C0 rjmp .L369
3485 1ae2 00C0 rjmp .L244
3486 .L239:
3487 1ae4 863F cpi r24,lo8(-10)
3488 1ae6 01F4 brne .L243
3489 1ae8 439B sbis 40-0x20,3
3490 1aea 00C0 rjmp .L244
3491 .L369:
3492 1aec 8CE8 ldi r24,lo8(-116)
3493 1aee 00C0 rjmp .L337
3494 .L244:
3495 1af0 86E4 ldi r24,lo8(70)
3496 1af2 00C0 rjmp .L337
3497 .L243:
3498 1af4 883F cpi r24,lo8(-8)
3499 1af6 00F0 brlo .L337
3500 1af8 EFEF ldi r30,lo8(255)
3501 1afa F0E0 ldi r31,hi8(255)
3502 1afc E81B sub r30,r24
3503 1afe F109 sbc r31,__zero_reg__
3504 1b00 E050 subi r30,lo8(-(Poti))
3505 1b02 F040 sbci r31,hi8(-(Poti))
3506 1b04 8081 ld r24,Z
3507 .L337:
3508 1b06 8093 0000 sts Parameter_Servo4,r24
3509 1b0a 8091 0000 lds r24,EE_Parameter+58
3510 1b0e 883F cpi r24,lo8(-8)
3511 1b10 00F0 brlo .L338
3512 1b12 EFEF ldi r30,lo8(255)
3513 1b14 F0E0 ldi r31,hi8(255)
3514 1b16 E81B sub r30,r24
3515 1b18 F109 sbc r31,__zero_reg__
3516 1b1a E050 subi r30,lo8(-(Poti))
3517 1b1c F040 sbci r31,hi8(-(Poti))
3518 1b1e 8081 ld r24,Z
3519 .L338:
3520 1b20 8093 0000 sts Parameter_Servo5,r24
3521 1b24 8091 0000 lds r24,EE_Parameter+16
3522 1b28 883F cpi r24,lo8(-8)
3523 1b2a 00F0 brlo .L339
3524 1b2c EFEF ldi r30,lo8(255)
3525 1b2e F0E0 ldi r31,hi8(255)
3526 1b30 E81B sub r30,r24
3527 1b32 F109 sbc r31,__zero_reg__
3528 1b34 E050 subi r30,lo8(-(Poti))
3529 1b36 F040 sbci r31,hi8(-(Poti))
3530 1b38 8081 ld r24,Z
3531 .L339:
3532 1b3a 8093 0000 sts Parameter_HoehenSchalter,r24
3533 1b3e 8091 0000 lds r24,EE_Parameter+19
3534 1b42 883F cpi r24,lo8(-8)
3535 1b44 00F0 brlo .L340
3536 1b46 EFEF ldi r30,lo8(255)
3537 1b48 F0E0 ldi r31,hi8(255)
3538 1b4a E81B sub r30,r24
3539 1b4c F109 sbc r31,__zero_reg__
3540 1b4e E050 subi r30,lo8(-(Poti))
3541 1b50 F040 sbci r31,hi8(-(Poti))
3542 1b52 8081 ld r24,Z
3543 .L340:
3544 1b54 8093 0000 sts Parameter_Hoehe_ACC_Wirkung,r24
3545 1b58 8091 0000 lds r24,EE_Parameter+21
3546 1b5c 883F cpi r24,lo8(-8)
3547 1b5e 00F0 brlo .L341
3548 1b60 EFEF ldi r30,lo8(255)
3549 1b62 F0E0 ldi r31,hi8(255)
3550 1b64 E81B sub r30,r24
3551 1b66 F109 sbc r31,__zero_reg__
3552 1b68 E050 subi r30,lo8(-(Poti))
3553 1b6a F040 sbci r31,hi8(-(Poti))
3554 1b6c 8081 ld r24,Z
3555 .L341:
3556 1b6e 8093 0000 sts Parameter_Hoehe_GPS_Z,r24
3557 1b72 8091 0000 lds r24,EE_Parameter+29
3558 1b76 883F cpi r24,lo8(-8)
3559 1b78 00F0 brlo .L342
3560 1b7a EFEF ldi r30,lo8(255)
3561 1b7c F0E0 ldi r31,hi8(255)
3562 1b7e E81B sub r30,r24
3563 1b80 F109 sbc r31,__zero_reg__
3564 1b82 E050 subi r30,lo8(-(Poti))
3565 1b84 F040 sbci r31,hi8(-(Poti))
3566 1b86 8081 ld r24,Z
3567 .L342:
3568 1b88 8093 0000 sts Parameter_KompassWirkung,r24
3569 1b8c 8091 0000 lds r24,EE_Parameter+31
3570 1b90 883F cpi r24,lo8(-8)
3571 1b92 00F0 brlo .L343
3572 1b94 EFEF ldi r30,lo8(255)
3573 1b96 F0E0 ldi r31,hi8(255)
3574 1b98 E81B sub r30,r24
3575 1b9a F109 sbc r31,__zero_reg__
3576 1b9c E050 subi r30,lo8(-(Poti))
3577 1b9e F040 sbci r31,hi8(-(Poti))
3578 1ba0 8081 ld r24,Z
3579 .L343:
3580 1ba2 8093 0000 sts Parameter_Gyro_I,r24
3581 1ba6 8091 0000 lds r24,EE_Parameter+32
3582 1baa 883F cpi r24,lo8(-8)
3583 1bac 00F0 brlo .L344
3584 1bae EFEF ldi r30,lo8(255)
3585 1bb0 F0E0 ldi r31,hi8(255)
3586 1bb2 E81B sub r30,r24
3587 1bb4 F109 sbc r31,__zero_reg__
3588 1bb6 E050 subi r30,lo8(-(Poti))
3589 1bb8 F040 sbci r31,hi8(-(Poti))
3590 1bba 8081 ld r24,Z
3591 .L344:
3592 1bbc 8093 0000 sts Parameter_Gyro_D,r24
3593 1bc0 8091 0000 lds r24,EE_Parameter+33
3594 1bc4 883F cpi r24,lo8(-8)
3595 1bc6 00F0 brlo .L345
3596 1bc8 EFEF ldi r30,lo8(255)
3597 1bca F0E0 ldi r31,hi8(255)
3598 1bcc E81B sub r30,r24
3599 1bce F109 sbc r31,__zero_reg__
3600 1bd0 E050 subi r30,lo8(-(Poti))
3601 1bd2 F040 sbci r31,hi8(-(Poti))
3602 1bd4 8081 ld r24,Z
3603 .L345:
3604 1bd6 8093 0000 sts Parameter_Gyro_Gier_P,r24
3605 1bda 8091 0000 lds r24,EE_Parameter+34
3606 1bde 883F cpi r24,lo8(-8)
3607 1be0 00F0 brlo .L346
3608 1be2 EFEF ldi r30,lo8(255)
3609 1be4 F0E0 ldi r31,hi8(255)
3610 1be6 E81B sub r30,r24
3611 1be8 F109 sbc r31,__zero_reg__
3612 1bea E050 subi r30,lo8(-(Poti))
3613 1bec F040 sbci r31,hi8(-(Poti))
3614 1bee 8081 ld r24,Z
3615 .L346:
3616 1bf0 8093 0000 sts Parameter_Gyro_Gier_I,r24
3617 1bf4 8091 0000 lds r24,EE_Parameter+40
3618 1bf8 883F cpi r24,lo8(-8)
3619 1bfa 00F0 brlo .L347
3620 1bfc EFEF ldi r30,lo8(255)
3621 1bfe F0E0 ldi r31,hi8(255)
3622 1c00 E81B sub r30,r24
3623 1c02 F109 sbc r31,__zero_reg__
3624 1c04 E050 subi r30,lo8(-(Poti))
3625 1c06 F040 sbci r31,hi8(-(Poti))
3626 1c08 8081 ld r24,Z
3627 .L347:
3628 1c0a 8093 0000 sts Parameter_I_Faktor,r24
3629 1c0e 8091 0000 lds r24,EE_Parameter+41
3630 1c12 883F cpi r24,lo8(-8)
3631 1c14 00F0 brlo .L348
3632 1c16 EFEF ldi r30,lo8(255)
3633 1c18 F0E0 ldi r31,hi8(255)
3634 1c1a E81B sub r30,r24
3635 1c1c F109 sbc r31,__zero_reg__
3636 1c1e E050 subi r30,lo8(-(Poti))
3637 1c20 F040 sbci r31,hi8(-(Poti))
3638 1c22 8081 ld r24,Z
3639 .L348:
3640 1c24 8093 0000 sts Parameter_UserParam1,r24
3641 1c28 8091 0000 lds r24,EE_Parameter+42
3642 1c2c 883F cpi r24,lo8(-8)
3643 1c2e 00F0 brlo .L349
3644 1c30 EFEF ldi r30,lo8(255)
3645 1c32 F0E0 ldi r31,hi8(255)
3646 1c34 E81B sub r30,r24
3647 1c36 F109 sbc r31,__zero_reg__
3648 1c38 E050 subi r30,lo8(-(Poti))
3649 1c3a F040 sbci r31,hi8(-(Poti))
3650 1c3c 8081 ld r24,Z
3651 .L349:
3652 1c3e 8093 0000 sts Parameter_UserParam2,r24
3653 1c42 8091 0000 lds r24,EE_Parameter+43
3654 1c46 883F cpi r24,lo8(-8)
3655 1c48 00F0 brlo .L350
3656 1c4a EFEF ldi r30,lo8(255)
3657 1c4c F0E0 ldi r31,hi8(255)
3658 1c4e E81B sub r30,r24
3659 1c50 F109 sbc r31,__zero_reg__
3660 1c52 E050 subi r30,lo8(-(Poti))
3661 1c54 F040 sbci r31,hi8(-(Poti))
3662 1c56 8081 ld r24,Z
3663 .L350:
3664 1c58 8093 0000 sts Parameter_UserParam3,r24
3665 1c5c 8091 0000 lds r24,EE_Parameter+44
3666 1c60 883F cpi r24,lo8(-8)
3667 1c62 00F0 brlo .L351
3668 1c64 EFEF ldi r30,lo8(255)
3669 1c66 F0E0 ldi r31,hi8(255)
3670 1c68 E81B sub r30,r24
3671 1c6a F109 sbc r31,__zero_reg__
3672 1c6c E050 subi r30,lo8(-(Poti))
3673 1c6e F040 sbci r31,hi8(-(Poti))
3674 1c70 8081 ld r24,Z
3675 .L351:
3676 1c72 8093 0000 sts Parameter_UserParam4,r24
3677 1c76 8091 0000 lds r24,EE_Parameter+70
3678 1c7a 883F cpi r24,lo8(-8)
3679 1c7c 00F0 brlo .L352
3680 1c7e EFEF ldi r30,lo8(255)
3681 1c80 F0E0 ldi r31,hi8(255)
3682 1c82 E81B sub r30,r24
3683 1c84 F109 sbc r31,__zero_reg__
3684 1c86 E050 subi r30,lo8(-(Poti))
3685 1c88 F040 sbci r31,hi8(-(Poti))
3686 1c8a 8081 ld r24,Z
3687 .L352:
3688 1c8c 8093 0000 sts Parameter_UserParam5,r24
3689 1c90 8091 0000 lds r24,EE_Parameter+71
3690 1c94 883F cpi r24,lo8(-8)
3691 1c96 00F0 brlo .L353
3692 1c98 EFEF ldi r30,lo8(255)
3693 1c9a F0E0 ldi r31,hi8(255)
3694 1c9c E81B sub r30,r24
3695 1c9e F109 sbc r31,__zero_reg__
3696 1ca0 E050 subi r30,lo8(-(Poti))
3697 1ca2 F040 sbci r31,hi8(-(Poti))
3698 1ca4 8081 ld r24,Z
3699 .L353:
3700 1ca6 8093 0000 sts Parameter_UserParam6,r24
3701 1caa 8091 0000 lds r24,EE_Parameter+72
3702 1cae 883F cpi r24,lo8(-8)
3703 1cb0 00F0 brlo .L354
3704 1cb2 EFEF ldi r30,lo8(255)
3705 1cb4 F0E0 ldi r31,hi8(255)
3706 1cb6 E81B sub r30,r24
3707 1cb8 F109 sbc r31,__zero_reg__
3708 1cba E050 subi r30,lo8(-(Poti))
3709 1cbc F040 sbci r31,hi8(-(Poti))
3710 1cbe 8081 ld r24,Z
3711 .L354:
3712 1cc0 8093 0000 sts Parameter_UserParam7,r24
3713 1cc4 8091 0000 lds r24,EE_Parameter+73
3714 1cc8 883F cpi r24,lo8(-8)
3715 1cca 00F0 brlo .L355
3716 1ccc EFEF ldi r30,lo8(255)
3717 1cce F0E0 ldi r31,hi8(255)
3718 1cd0 E81B sub r30,r24
3719 1cd2 F109 sbc r31,__zero_reg__
3720 1cd4 E050 subi r30,lo8(-(Poti))
3721 1cd6 F040 sbci r31,hi8(-(Poti))
3722 1cd8 8081 ld r24,Z
3723 .L355:
3724 1cda 8093 0000 sts Parameter_UserParam8,r24
3725 1cde 8091 0000 lds r24,EE_Parameter+45
3726 1ce2 883F cpi r24,lo8(-8)
3727 1ce4 00F0 brlo .L356
3728 1ce6 EFEF ldi r30,lo8(255)
3729 1ce8 F0E0 ldi r31,hi8(255)
3730 1cea E81B sub r30,r24
3731 1cec F109 sbc r31,__zero_reg__
3732 1cee E050 subi r30,lo8(-(Poti))
3733 1cf0 F040 sbci r31,hi8(-(Poti))
3734 1cf2 8081 ld r24,Z
3735 .L356:
3736 1cf4 8093 0000 sts Parameter_ServoNickControl,r24
3737 1cf8 8091 0000 lds r24,EE_Parameter+49
3738 1cfc 883F cpi r24,lo8(-8)
3739 1cfe 00F0 brlo .L357
3740 1d00 EFEF ldi r30,lo8(255)
3741 1d02 F0E0 ldi r31,hi8(255)
3742 1d04 E81B sub r30,r24
3743 1d06 F109 sbc r31,__zero_reg__
3744 1d08 E050 subi r30,lo8(-(Poti))
3745 1d0a F040 sbci r31,hi8(-(Poti))
3746 1d0c 8081 ld r24,Z
3747 .L357:
3748 1d0e 8093 0000 sts Parameter_ServoRollControl,r24
3749 1d12 8091 0000 lds r24,EE_Parameter+46
3750 1d16 883F cpi r24,lo8(-8)
3751 1d18 00F0 brlo .L358
3752 1d1a EFEF ldi r30,lo8(255)
3753 1d1c F0E0 ldi r31,hi8(255)
3754 1d1e E81B sub r30,r24
3755 1d20 F109 sbc r31,__zero_reg__
3756 1d22 E050 subi r30,lo8(-(Poti))
3757 1d24 F040 sbci r31,hi8(-(Poti))
3758 1d26 8081 ld r24,Z
3759 .L358:
3760 1d28 8093 0000 sts Parameter_ServoNickComp,r24
3761 1d2c 8091 0000 lds r24,EE_Parameter+50
3762 1d30 883F cpi r24,lo8(-8)
3763 1d32 00F0 brlo .L359
3764 1d34 EFEF ldi r30,lo8(255)
3765 1d36 F0E0 ldi r31,hi8(255)
3766 1d38 E81B sub r30,r24
3767 1d3a F109 sbc r31,__zero_reg__
3768 1d3c E050 subi r30,lo8(-(Poti))
3769 1d3e F040 sbci r31,hi8(-(Poti))
3770 1d40 8081 ld r24,Z
3771 .L359:
3772 1d42 8093 0000 sts Parameter_ServoRollComp,r24
3773 1d46 8091 0000 lds r24,EE_Parameter+59
3774 1d4a 883F cpi r24,lo8(-8)
3775 1d4c 00F0 brlo .L360
3776 1d4e EFEF ldi r30,lo8(255)
3777 1d50 F0E0 ldi r31,hi8(255)
3778 1d52 E81B sub r30,r24
3779 1d54 F109 sbc r31,__zero_reg__
3780 1d56 E050 subi r30,lo8(-(Poti))
3781 1d58 F040 sbci r31,hi8(-(Poti))
3782 1d5a 8081 ld r24,Z
3783 .L360:
3784 1d5c 8093 0000 sts Parameter_LoopGasLimit,r24
3785 1d60 8091 0000 lds r24,EE_Parameter+62
3786 1d64 883F cpi r24,lo8(-8)
3787 1d66 00F0 brlo .L361
3788 1d68 EFEF ldi r30,lo8(255)
3789 1d6a F0E0 ldi r31,hi8(255)
3790 1d6c E81B sub r30,r24
3791 1d6e F109 sbc r31,__zero_reg__
3792 1d70 E050 subi r30,lo8(-(Poti))
3793 1d72 F040 sbci r31,hi8(-(Poti))
3794 1d74 8081 ld r24,Z
3795 .L361:
3796 1d76 8093 0000 sts Parameter_AchsKopplung1,r24
3797 1d7a 8091 0000 lds r24,EE_Parameter+63
3798 1d7e 883F cpi r24,lo8(-8)
3799 1d80 00F0 brlo .L362
3800 1d82 EFEF ldi r30,lo8(255)
3801 1d84 F0E0 ldi r31,hi8(255)
3802 1d86 E81B sub r30,r24
3803 1d88 F109 sbc r31,__zero_reg__
3804 1d8a E050 subi r30,lo8(-(Poti))
3805 1d8c F040 sbci r31,hi8(-(Poti))
3806 1d8e 8081 ld r24,Z
3807 .L362:
3808 1d90 8093 0000 sts Parameter_AchsKopplung2,r24
3809 1d94 8091 0000 lds r24,EE_Parameter+64
3810 1d98 883F cpi r24,lo8(-8)
3811 1d9a 00F0 brlo .L363
3812 1d9c EFEF ldi r30,lo8(255)
3813 1d9e F0E0 ldi r31,hi8(255)
3814 1da0 E81B sub r30,r24
3815 1da2 F109 sbc r31,__zero_reg__
3816 1da4 E050 subi r30,lo8(-(Poti))
3817 1da6 F040 sbci r31,hi8(-(Poti))
3818 1da8 8081 ld r24,Z
3819 .L363:
3820 1daa 8093 0000 sts Parameter_CouplingYawCorrection,r24
3821 1dae 8091 0000 lds r24,EE_Parameter+104
3822 1db2 883F cpi r24,lo8(-8)
3823 1db4 00F0 brlo .L364
3824 1db6 EFEF ldi r30,lo8(255)
3825 1db8 F0E0 ldi r31,hi8(255)
3826 1dba E81B sub r30,r24
3827 1dbc F109 sbc r31,__zero_reg__
3828 1dbe E050 subi r30,lo8(-(Poti))
3829 1dc0 F040 sbci r31,hi8(-(Poti))
3830 1dc2 8081 ld r24,Z
3831 .L364:
3832 1dc4 8093 0000 sts Parameter_MaximumAltitude,r24
3833 1dc8 9091 0000 lds r25,NC_To_FC_MaxAltitude
3834 1dcc 9923 tst r25
3835 1dce 01F0 breq .L305
3836 1dd0 8091 0000 lds r24,Parameter_MaximumAltitude
3837 1dd4 9817 cp r25,r24
3838 1dd6 00F0 brlo .L304
3839 .L305:
3840 1dd8 8091 0000 lds r24,Parameter_MaximumAltitude
3841 1ddc 8823 tst r24
3842 1dde 01F4 brne .L303
3843 .L304:
3844 1de0 9093 0000 sts Parameter_MaximumAltitude,r25
3845 .L303:
3846 1de4 8091 0000 lds r24,EE_Parameter+13
3847 1de8 8093 0000 sts Parameter_GlobalConfig,r24
3848 1dec 8091 0000 lds r24,EE_Parameter+110
3849 1df0 8093 0000 sts Parameter_ExtraConfig,r24
3850 1df4 8091 0000 lds r24,EE_Parameter+69
3851 1df8 883F cpi r24,lo8(-8)
3852 1dfa 00F0 brlo .L365
3853 1dfc EFEF ldi r30,lo8(255)
3854 1dfe F0E0 ldi r31,hi8(255)
3855 1e00 E81B sub r30,r24
3856 1e02 F109 sbc r31,__zero_reg__
3857 1e04 E050 subi r30,lo8(-(Poti))
3858 1e06 F040 sbci r31,hi8(-(Poti))
3859 1e08 8081 ld r24,Z
3860 .L365:
3861 1e0a 8093 0000 sts Parameter_DynamicStability,r24
3862 1e0e 8091 0000 lds r24,EE_Parameter+97
3863 1e12 883F cpi r24,lo8(-8)
3864 1e14 00F0 brlo .L366
3865 1e16 EFEF ldi r30,lo8(255)
3866 1e18 F0E0 ldi r31,hi8(255)
3867 1e1a E81B sub r30,r24
3868 1e1c F109 sbc r31,__zero_reg__
3869 1e1e E050 subi r30,lo8(-(Poti))
3870 1e20 F040 sbci r31,hi8(-(Poti))
3871 1e22 8081 ld r24,Z
3872 .L366:
3873 1e24 8093 0000 sts Parameter_ExternalControl,r24
3874 1e28 8091 0000 lds r24,Parameter_I_Faktor
3875 1e2c 282F mov r18,r24
3876 1e2e 3327 clr r19
3877 1e30 2F5F subi r18,lo8(-(1))
3878 1e32 3F4F sbci r19,hi8(-(1))
3879 1e34 8CE3 ldi r24,lo8(10300)
3880 1e36 98E2 ldi r25,hi8(10300)
3881 1e38 B901 movw r22,r18
3882 1e3a 0E94 0000 call __divmodhi4
3883 1e3e 7093 0000 sts (Ki)+1,r23
3884 1e42 6093 0000 sts Ki,r22
3885 1e46 8091 0000 lds r24,EE_Parameter+27
3886 1e4a 8093 0000 sts MAX_GAS,r24
3887 1e4e 8091 0000 lds r24,EE_Parameter+26
3888 1e52 8093 0000 sts MIN_GAS,r24
3889 1e56 9091 0000 lds r25,EE_Parameter+99
3890 1e5a 9333 cpi r25,lo8(51)
3891 1e5c 00F4 brsh .+2
3892 1e5e 00C0 rjmp .L310
3893 1e60 81E0 ldi r24,lo8(1)
3894 1e62 8093 0000 sts CareFree,r24
3895 1e66 983F cpi r25,lo8(-8)
3896 1e68 00F0 brlo .L311
3897 1e6a EFEF ldi r30,lo8(255)
3898 1e6c F0E0 ldi r31,hi8(255)
3899 1e6e E91B sub r30,r25
3900 1e70 F109 sbc r31,__zero_reg__
3901 1e72 E050 subi r30,lo8(-(Poti))
3902 1e74 F040 sbci r31,hi8(-(Poti))
3903 1e76 8081 ld r24,Z
3904 1e78 8233 cpi r24,lo8(50)
3905 1e7a 00F4 brsh .L311
3906 1e7c 1092 0000 sts CareFree,__zero_reg__
3907 .L311:
3908 1e80 8091 0000 lds r24,carefree_old
3909 1e84 2091 0000 lds r18,CareFree
3910 1e88 8217 cp r24,r18
3911 1e8a 01F0 breq .L312
3912 1e8c 8330 cpi r24,lo8(3)
3913 1e8e 00F4 brsh .L313
3914 1e90 3091 0000 lds r19,SpeakHoTT
3915 1e94 2223 tst r18
3916 1e96 01F0 breq .L314
3917 1e98 8CED ldi r24,lo8(1500)
3918 1e9a 95E0 ldi r25,hi8(1500)
3919 1e9c 9093 0000 sts (beeptime)+1,r25
3920 1ea0 8093 0000 sts beeptime,r24
3921 1ea4 3323 tst r19
3922 1ea6 01F4 brne .L316
3923 1ea8 8EE2 ldi r24,lo8(46)
3924 1eaa 00C0 rjmp .L367
3925 .L314:
3926 1eac 88EC ldi r24,lo8(200)
3927 1eae 90E0 ldi r25,hi8(200)
3928 1eb0 9093 0000 sts (beeptime)+1,r25
3929 1eb4 8093 0000 sts beeptime,r24
3930 1eb8 3323 tst r19
3931 1eba 01F4 brne .L316
3932 1ebc 87E1 ldi r24,lo8(23)
3933 .L367:
3934 1ebe 8093 0000 sts SpeakHoTT,r24
3935 .L316:
3936 1ec2 85E0 ldi r24,lo8(5)
3937 1ec4 8093 0000 sts NeueKompassRichtungMerken,r24
3938 1ec8 2093 0000 sts carefree_old,r18
3939 1ecc 00C0 rjmp .L312
3940 .L313:
3941 1ece 8150 subi r24,lo8(-(-1))
3942 1ed0 8093 0000 sts carefree_old,r24
3943 .L312:
3944 1ed4 8091 0000 lds r24,FromNaviCtrl+7
3945 1ed8 9091 0000 lds r25,(FromNaviCtrl+7)+1
3946 1edc 97FF sbrs r25,7
3947 1ede 00C0 rjmp .L320
3948 1ee0 8091 0000 lds r24,CareFree
3949 1ee4 8823 tst r24
3950 1ee6 01F0 breq .L320
3951 1ee8 8091 0000 lds r24,VersionInfo+5
3952 1eec 8068 ori r24,lo8(-128)
3953 1eee 8093 0000 sts VersionInfo+5,r24
3954 1ef2 00C0 rjmp .L320
3955 .L310:
3956 1ef4 1092 0000 sts CareFree,__zero_reg__
3957 1ef8 8AE0 ldi r24,lo8(10)
3958 1efa 8093 0000 sts carefree_old,r24
3959 .L320:
3960 1efe 8091 0000 lds r24,FromNaviCtrl+7
3961 1f02 9091 0000 lds r25,(FromNaviCtrl+7)+1
3962 1f06 97FF sbrs r25,7
3963 1f08 00C0 rjmp .L321
3964 1f0a 8091 0000 lds r24,MotorenEin
3965 1f0e 8823 tst r24
3966 1f10 01F0 breq .L321
3967 1f12 8091 0000 lds r24,CareFree
3968 1f16 8823 tst r24
3969 1f18 01F0 breq .L321
3970 1f1a 8091 0000 lds r24,BeepMuster
3971 1f1e 9091 0000 lds r25,(BeepMuster)+1
3972 1f22 8F5F subi r24,lo8(-1)
3973 1f24 9F4F sbci r25,hi8(-1)
3974 1f26 01F4 brne .L321
3975 1f28 88E9 ldi r24,lo8(15000)
3976 1f2a 9AE3 ldi r25,hi8(15000)
3977 1f2c 9093 0000 sts (beeptime)+1,r25
3978 1f30 8093 0000 sts beeptime,r24
3979 1f34 80E0 ldi r24,lo8(-23552)
3980 1f36 94EA ldi r25,hi8(-23552)
3981 1f38 9093 0000 sts (BeepMuster)+1,r25
3982 1f3c 8093 0000 sts BeepMuster,r24
3983 1f40 1092 0000 sts CareFree,__zero_reg__
3984 .L321:
3985 1f44 8091 0000 lds r24,CareFree
3986 1f48 8823 tst r24
3987 1f4a 01F0 breq .L322
3988 1f4c 8091 0000 lds r24,FC_StatusFlags2
3989 1f50 8160 ori r24,lo8(1)
3990 1f52 8093 0000 sts FC_StatusFlags2,r24
3991 1f56 8091 0000 lds r24,Parameter_AchsKopplung1
3992 1f5a 823D cpi r24,lo8(-46)
3993 1f5c 00F4 brsh .L190
3994 1f5e 825E subi r24,lo8(-(30))
3995 1f60 8093 0000 sts Parameter_AchsKopplung1,r24
3996 1f64 00C0 rjmp .L190
3997 .L322:
3998 1f66 8091 0000 lds r24,FC_StatusFlags2
3999 1f6a 8E7F andi r24,lo8(-2)
4000 1f6c 8093 0000 sts FC_StatusFlags2,r24
4001 .L190:
4002 /* epilogue: frame size=0 */
4003 1f70 DF91 pop r29
4004 1f72 CF91 pop r28
4005 1f74 0895 ret
4006 /* epilogue end (size=3) */
4007 /* function ParameterZuordnung size 798 (793) */
4009 .lcomm sollGier.0,4
4010 .lcomm tmp_long.1,4
4011 .lcomm tmp_long2.2,4
4012 .lcomm IntegralFehlerNick.3,4
4013 .lcomm IntegralFehlerRoll.4,4
4014 .lcomm RcLostTimer.5,2
4015 .lcomm delay_neutral.6,1
4016 .lcomm delay_einschalten.7,1
4017 .lcomm delay_ausschalten.8,1
4018 .lcomm move_safety_switch.9,1
4019 .lcomm ausgleichNick.10,4
4020 .lcomm ausgleichRoll.11,4
4021 .lcomm stick_nick.12,2
4022 .lcomm stick_roll.13,2
4023 .lcomm cnt.14,2
4024 .lcomm last_n_p.15,1
4025 .lcomm last_n_n.16,1
4026 .lcomm last_r_p.17,1
4027 .lcomm last_r_n.18,1
4028 .lcomm MittelIntegralNick_Alt.19,4
4029 .lcomm MittelIntegralRoll_Alt.20,4
4030 .lcomm HeightTrimming.21,2
4031 .lcomm FilterHCGas.22,2
4032 .lcomm HoverGasFilter.23,4
4033 .data
4036 delay.24:
4037 0051 64 .byte 100
4038 .lcomm BaroAtUpperLimit.25,1
4039 .lcomm BaroAtLowerLimit.26,1
4040 .text
4041 .global MotorRegler
4043 MotorRegler:
4044 /* prologue: frame size=23 */
4045 1f76 A7E1 ldi r26,lo8(23)
4046 1f78 B0E0 ldi r27,hi8(23)
4047 1f7a E0E0 ldi r30,pm_lo8(1f)
4048 1f7c F0E0 ldi r31,pm_hi8(1f)
4049 1f7e 0C94 0000 jmp __prologue_saves__+0
4050 1:
4051 /* prologue end (size=6) */
4052 1f82 0E94 0000 call Mittelwert
4053 1f86 8091 0000 lds r24,FC_StatusFlags
4054 1f8a 9927 clr r25
4055 1f8c 8471 andi r24,lo8(20)
4056 1f8e 9070 andi r25,hi8(20)
4057 1f90 892B or r24,r25
4058 1f92 01F4 brne .L371
4059 1f94 8091 0000 lds r24,EE_Parameter+111
4060 1f98 82FF sbrs r24,2
4061 1f9a 00C0 rjmp .L372
4062 1f9c 8091 0000 lds r24,HoverGas
4063 1fa0 9091 0000 lds r25,(HoverGas)+1
4064 1fa4 0097 sbiw r24,0
4065 1fa6 01F0 breq .L373
4066 1fa8 02E0 ldi r16,hi8(600)
4067 1faa 8835 cpi r24,lo8(600)
4068 1fac 9007 cpc r25,r16
4069 1fae 04F4 brge .L373
4070 1fb0 9C01 movw r18,r24
4071 1fb2 97FF sbrs r25,7
4072 1fb4 00C0 rjmp .L374
4073 1fb6 2D5F subi r18,lo8(-(3))
4074 1fb8 3F4F sbci r19,hi8(-(3))
4075 .L374:
4076 1fba 3595 asr r19
4077 1fbc 2795 ror r18
4078 1fbe 3595 asr r19
4079 1fc0 2795 ror r18
4080 1fc2 8091 0000 lds r24,EE_Parameter+37
4081 1fc6 9927 clr r25
4082 1fc8 289F mul r18,r24
4083 1fca A001 movw r20,r0
4084 1fcc 299F mul r18,r25
4085 1fce 500D add r21,r0
4086 1fd0 389F mul r19,r24
4087 1fd2 500D add r21,r0
4088 1fd4 1124 clr r1
4089 1fd6 CA01 movw r24,r20
4090 1fd8 64E6 ldi r22,lo8(100)
4091 1fda 70E0 ldi r23,hi8(100)
4092 1fdc 0E94 0000 call __divmodhi4
4093 1fe0 CB01 movw r24,r22
4094 1fe2 00C0 rjmp .L893
4095 .L373:
4096 1fe4 8DE2 ldi r24,lo8(45)
4097 1fe6 90E0 ldi r25,hi8(45)
4098 1fe8 00C0 rjmp .L893
4099 .L372:
4100 1fea 8091 0000 lds r24,EE_Parameter+37
4101 1fee 9927 clr r25
4102 .L893:
4103 1ff0 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4104 1ff4 8093 0000 sts HooverGasEmergencyPercent,r24
4105 .L371:
4106 1ff8 2091 0000 lds r18,GasIsZeroCnt
4107 1ffc 3091 0000 lds r19,(GasIsZeroCnt)+1
4108 2000 55E7 ldi r21,hi8(30000)
4109 2002 2033 cpi r18,lo8(30000)
4110 2004 3507 cpc r19,r21
4111 2006 01F4 brne .L377
4112 2008 1092 0000 sts (StickGas)+1,__zero_reg__
4113 200c 1092 0000 sts StickGas,__zero_reg__
4114 2010 8091 0000 lds r24,MIN_GAS
4115 2014 9927 clr r25
4116 2016 9093 0000 sts (HooverGasEmergencyPercent)+1,r25
4117 201a 8093 0000 sts HooverGasEmergencyPercent,r24
4118 .L377:
4119 201e 6091 0000 lds r22,StickGas
4120 2022 7091 0000 lds r23,(StickGas)+1
4121 2026 7A83 std Y+2,r23
4122 2028 6983 std Y+1,r22
4123 202a 8091 0000 lds r24,MIN_GAS
4124 202e 9927 clr r25
4125 2030 0A96 adiw r24,10
4126 2032 6817 cp r22,r24
4127 2034 7907 cpc r23,r25
4128 2036 04F4 brge .L378
4129 2038 9A83 std Y+2,r25
4130 203a 8983 std Y+1,r24
4131 .L378:
4132 203c 8091 0000 lds r24,SenderOkay
4133 2040 8436 cpi r24,lo8(100)
4134 2042 00F0 brlo .+2
4135 2044 00C0 rjmp .L379
4136 2046 8091 0000 lds r24,FC_StatusFlags2
4137 204a 82FD sbrc r24,2
4138 204c 00C0 rjmp .L379
4139 204e 8091 0000 lds r24,RcLostTimer.5
4140 2052 9091 0000 lds r25,(RcLostTimer.5)+1
4141 2056 0097 sbiw r24,0
4142 2058 01F0 breq .L380
4143 205a 0197 sbiw r24,1
4144 205c 9093 0000 sts (RcLostTimer.5)+1,r25
4145 2060 8093 0000 sts RcLostTimer.5,r24
4146 2064 00C0 rjmp .L381
4147 .L380:
4148 2066 1092 0000 sts MotorenEin,__zero_reg__
4149 206a 9093 0000 sts (modell_fliegt)+1,r25
4150 206e 8093 0000 sts modell_fliegt,r24
4151 2072 8091 0000 lds r24,FC_StatusFlags
4152 2076 8D7E andi r24,lo8(-19)
4153 2078 8093 0000 sts FC_StatusFlags,r24
4154 .L381:
4155 207c 8091 0000 lds r24,PlatinenVersion
4156 2080 8A30 cpi r24,lo8(10)
4157 2082 01F0 breq .L383
4158 2084 8431 cpi r24,lo8(20)
4159 2086 00F0 brlo .L382
4160 .L383:
4161 2088 289A sbi 37-0x20,0
4162 208a 00C0 rjmp .L384
4163 .L382:
4164 208c 2898 cbi 37-0x20,0
4165 .L384:
4166 208e 8091 0000 lds r24,modell_fliegt
4167 2092 9091 0000 lds r25,(modell_fliegt)+1
4168 2096 895E subi r24,lo8(1001)
4169 2098 9340 sbci r25,hi8(1001)
4170 209a 00F0 brlo .L385
4171 209c 8091 0000 lds r24,Capacity+6
4172 20a0 8536 cpi r24,lo8(101)
4173 20a2 00F0 brlo .L385
4174 20a4 8091 0000 lds r24,HooverGasEmergencyPercent
4175 20a8 9091 0000 lds r25,(HooverGasEmergencyPercent)+1
4176 20ac 9A83 std Y+2,r25
4177 20ae 8983 std Y+1,r24
4178 20b0 8091 0000 lds r24,FC_StatusFlags
4179 20b4 8061 ori r24,lo8(16)
4180 20b6 8093 0000 sts FC_StatusFlags,r24
4181 20ba 8091 0000 lds r24,EE_Parameter+1
4182 20be A82F mov r26,r24
4183 20c0 BB27 clr r27
4184 20c2 AA0F add r26,r26
4185 20c4 BB1F adc r27,r27
4186 20c6 FD01 movw r30,r26
4187 20c8 E050 subi r30,lo8(-(PPM_diff))
4188 20ca F040 sbci r31,hi8(-(PPM_diff))
4189 20cc 1182 std Z+1,__zero_reg__
4190 20ce 1082 st Z,__zero_reg__
4191 20d0 8091 0000 lds r24,EE_Parameter+2
4192 20d4 282F mov r18,r24
4193 20d6 3327 clr r19
4194 20d8 220F add r18,r18
4195 20da 331F adc r19,r19
4196 20dc C901 movw r24,r18
4197 20de 8050 subi r24,lo8(-(PPM_diff))
4198 20e0 9040 sbci r25,hi8(-(PPM_diff))
4199 20e2 FC01 movw r30,r24
4200 20e4 1182 std Z+1,__zero_reg__
4201 20e6 1082 st Z,__zero_reg__
4202 20e8 A050 subi r26,lo8(-(PPM_in))
4203 20ea B040 sbci r27,hi8(-(PPM_in))
4204 20ec 1196 adiw r26,1
4205 20ee 1C92 st X,__zero_reg__
4206 20f0 1E92 st -X,__zero_reg__
4207 20f2 2050 subi r18,lo8(-(PPM_in))
4208 20f4 3040 sbci r19,hi8(-(PPM_in))
4209 20f6 D901 movw r26,r18
4210 20f8 1196 adiw r26,1
4211 20fa 1C92 st X,__zero_reg__
4212 20fc 1E92 st -X,__zero_reg__
4213 20fe 8091 0000 lds r24,EE_Parameter+4
4214 2102 E82F mov r30,r24
4215 2104 FF27 clr r31
4216 2106 EE0F add r30,r30
4217 2108 FF1F adc r31,r31
4218 210a E050 subi r30,lo8(-(PPM_in))
4219 210c F040 sbci r31,hi8(-(PPM_in))
4220 210e 1182 std Z+1,__zero_reg__
4221 2110 1082 st Z,__zero_reg__
4222 2112 00C0 rjmp .L387
4223 .L385:
4224 2114 1092 0000 sts MotorenEin,__zero_reg__
4225 2118 00C0 rjmp .L387
4226 .L379:
4227 211a 8091 0000 lds r24,SenderOkay
4228 211e 8D38 cpi r24,lo8(-115)
4229 2120 00F4 brsh .+2
4230 2122 00C0 rjmp .L388
4231 2124 8091 0000 lds r24,FC_StatusFlags
4232 2128 8F7E andi r24,lo8(-17)
4233 212a 8093 0000 sts FC_StatusFlags,r24
4234 212e 9091 0000 lds r25,EE_Parameter+38
4235 2132 82E3 ldi r24,lo8(50)
4236 2134 989F mul r25,r24
4237 2136 C001 movw r24,r0
4238 2138 1124 clr r1
4239 213a 9093 0000 sts (RcLostTimer.5)+1,r25
4240 213e 8093 0000 sts RcLostTimer.5,r24
4241 2142 E981 ldd r30,Y+1
4242 2144 FA81 ldd r31,Y+2
4243 2146 B997 sbiw r30,41
4244 2148 04F0 brlt .L389
4245 214a 8091 0000 lds r24,MotorenEin
4246 214e 8823 tst r24
4247 2150 01F0 breq .L389
4248 2152 8091 0000 lds r24,modell_fliegt
4249 2156 9091 0000 lds r25,(modell_fliegt)+1
4250 215a FFEF ldi r31,hi8(-1)
4251 215c 8F3F cpi r24,lo8(-1)
4252 215e 9F07 cpc r25,r31
4253 2160 01F0 breq .L389
4254 2162 0196 adiw r24,1
4255 2164 9093 0000 sts (modell_fliegt)+1,r25
4256 2168 8093 0000 sts modell_fliegt,r24
4257 .L389:
4258 216c 8091 0000 lds r24,modell_fliegt
4259 2170 9091 0000 lds r25,(modell_fliegt)+1
4260 2174 8F3F cpi r24,255
4261 2176 9105 cpc r25,__zero_reg__
4262 2178 01F0 breq .+2
4263 217a 00F4 brsh .L391
4264 217c 1092 0000 sts SummeNick,__zero_reg__
4265 2180 1092 0000 sts (SummeNick)+1,__zero_reg__
4266 2184 1092 0000 sts (SummeNick)+2,__zero_reg__
4267 2188 1092 0000 sts (SummeNick)+3,__zero_reg__
4268 218c 1092 0000 sts SummeRoll,__zero_reg__
4269 2190 1092 0000 sts (SummeRoll)+1,__zero_reg__
4270 2194 1092 0000 sts (SummeRoll)+2,__zero_reg__
4271 2198 1092 0000 sts (SummeRoll)+3,__zero_reg__
4272 219c 1092 0000 sts sollGier.0,__zero_reg__
4273 21a0 1092 0000 sts (sollGier.0)+1,__zero_reg__
4274 21a4 1092 0000 sts (sollGier.0)+2,__zero_reg__
4275 21a8 1092 0000 sts (sollGier.0)+3,__zero_reg__
4276 21ac 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4277 21b0 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4278 21b4 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4279 21b8 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4280 21bc 00C0 rjmp .L392
4281 .L391:
4282 21be 8091 0000 lds r24,FC_StatusFlags
4283 21c2 8260 ori r24,lo8(2)
4284 21c4 8093 0000 sts FC_StatusFlags,r24
4285 .L392:
4286 21c8 8091 0000 lds r24,EE_Parameter+3
4287 21cc E82F mov r30,r24
4288 21ce FF27 clr r31
4289 21d0 EE0F add r30,r30
4290 21d2 FF1F adc r31,r31
4291 21d4 E050 subi r30,lo8(-(PPM_in))
4292 21d6 F040 sbci r31,hi8(-(PPM_in))
4293 21d8 8081 ld r24,Z
4294 21da 9181 ldd r25,Z+1
4295 21dc 8135 cpi r24,81
4296 21de 9105 cpc r25,__zero_reg__
4297 21e0 04F4 brge .+2
4298 21e2 00C0 rjmp .L393
4299 21e4 2091 0000 lds r18,MotorenEin
4300 21e8 2223 tst r18
4301 21ea 01F0 breq .+2
4302 21ec 00C0 rjmp .L393
4303 21ee 8091 0000 lds r24,EE_Parameter+4
4304 21f2 E82F mov r30,r24
4305 21f4 FF27 clr r31
4306 21f6 EE0F add r30,r30
4307 21f8 FF1F adc r31,r31
4308 21fa E050 subi r30,lo8(-(PPM_in))
4309 21fc F040 sbci r31,hi8(-(PPM_in))
4310 21fe 8081 ld r24,Z
4311 2200 9181 ldd r25,Z+1
4312 2202 8C34 cpi r24,76
4313 2204 9105 cpc r25,__zero_reg__
4314 2206 04F4 brge .+2
4315 2208 00C0 rjmp .L394
4316 220a 8091 0000 lds r24,delay_neutral.6
4317 220e 8F5F subi r24,lo8(-(1))
4318 2210 8093 0000 sts delay_neutral.6,r24
4319 2214 893C cpi r24,lo8(-55)
4320 2216 00F4 brsh .+2
4321 2218 00C0 rjmp .L393
4322 221a 2093 0000 sts delay_neutral.6,r18
4323 221e 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4324 2222 1092 0000 sts modell_fliegt,__zero_reg__
4325 2226 3091 0000 lds r19,EE_Parameter+1
4326 222a E32F mov r30,r19
4327 222c FF27 clr r31
4328 222e EE0F add r30,r30
4329 2230 FF1F adc r31,r31
4330 2232 E050 subi r30,lo8(-(PPM_in))
4331 2234 F040 sbci r31,hi8(-(PPM_in))
4332 2236 8081 ld r24,Z
4333 2238 9181 ldd r25,Z+1
4334 223a 8734 cpi r24,71
4335 223c 9105 cpc r25,__zero_reg__
4336 223e 04F4 brge .L397
4337 2240 8091 0000 lds r24,EE_Parameter+2
4338 2244 E82F mov r30,r24
4339 2246 FF27 clr r31
4340 2248 EE0F add r30,r30
4341 224a FF1F adc r31,r31
4342 224c E050 subi r30,lo8(-(PPM_in))
4343 224e F040 sbci r31,hi8(-(PPM_in))
4344 2250 8081 ld r24,Z
4345 2252 9181 ldd r25,Z+1
4346 2254 0190 ld __tmp_reg__,Z+
4347 2256 F081 ld r31,Z
4348 2258 E02D mov r30,__tmp_reg__
4349 225a F7FF sbrs r31,7
4350 225c 00C0 rjmp .L398
4351 225e F095 com r31
4352 2260 E195 neg r30
4353 2262 FF4F sbci r31,lo8(-1)
4354 .L398:
4355 2264 E734 cpi r30,71
4356 2266 F105 cpc r31,__zero_reg__
4357 2268 04F4 brge .+2
4358 226a 00C0 rjmp .L396
4359 .L397:
4360 226c 41E0 ldi r20,lo8(1)
4361 226e 2091 0000 lds r18,EE_Parameter+2
4362 2272 A22F mov r26,r18
4363 2274 BB27 clr r27
4364 2276 AA0F add r26,r26
4365 2278 BB1F adc r27,r27
4366 227a A050 subi r26,lo8(-(PPM_in))
4367 227c B040 sbci r27,hi8(-(PPM_in))
4368 227e 8D91 ld r24,X+
4369 2280 9C91 ld r25,X
4370 2282 1197 sbiw r26,1
4371 2284 8734 cpi r24,71
4372 2286 9105 cpc r25,__zero_reg__
4373 2288 04F0 brlt .L399
4374 228a E32F mov r30,r19
4375 228c FF27 clr r31
4376 228e EE0F add r30,r30
4377 2290 FF1F adc r31,r31
4378 2292 E050 subi r30,lo8(-(PPM_in))
4379 2294 F040 sbci r31,hi8(-(PPM_in))
4380 2296 8081 ld r24,Z
4381 2298 9181 ldd r25,Z+1
4382 .L399:
4383 229a 8D91 ld r24,X+
4384 229c 9C91 ld r25,X
4385 229e 8734 cpi r24,71
4386 22a0 9105 cpc r25,__zero_reg__
4387 22a2 04F0 brlt .L400
4388 22a4 8091 0000 lds r24,EE_Parameter+1
4389 22a8 E82F mov r30,r24
4390 22aa FF27 clr r31
4391 22ac EE0F add r30,r30
4392 22ae FF1F adc r31,r31
4393 22b0 E050 subi r30,lo8(-(PPM_in))
4394 22b2 F040 sbci r31,hi8(-(PPM_in))
4395 22b4 8081 ld r24,Z
4396 22b6 9181 ldd r25,Z+1
4397 22b8 8734 cpi r24,71
4398 22ba 9105 cpc r25,__zero_reg__
4399 22bc 04F0 brlt .L400
4400 22be 42E0 ldi r20,lo8(2)
4401 .L400:
4402 22c0 E22F mov r30,r18
4403 22c2 FF27 clr r31
4404 22c4 EE0F add r30,r30
4405 22c6 FF1F adc r31,r31
4406 22c8 E050 subi r30,lo8(-(PPM_in))
4407 22ca F040 sbci r31,hi8(-(PPM_in))
4408 22cc 8081 ld r24,Z
4409 22ce 9181 ldd r25,Z+1
4410 22d0 8634 cpi r24,70
4411 22d2 9105 cpc r25,__zero_reg__
4412 22d4 04F4 brge .L401
4413 22d6 8091 0000 lds r24,EE_Parameter+1
4414 22da E82F mov r30,r24
4415 22dc FF27 clr r31
4416 22de EE0F add r30,r30
4417 22e0 FF1F adc r31,r31
4418 22e2 E050 subi r30,lo8(-(PPM_in))
4419 22e4 F040 sbci r31,hi8(-(PPM_in))
4420 22e6 8081 ld r24,Z
4421 22e8 9181 ldd r25,Z+1
4422 22ea 8734 cpi r24,71
4423 22ec 9105 cpc r25,__zero_reg__
4424 22ee 04F0 brlt .L401
4425 22f0 43E0 ldi r20,lo8(3)
4426 .L401:
4427 22f2 E22F mov r30,r18
4428 22f4 FF27 clr r31
4429 22f6 EE0F add r30,r30
4430 22f8 FF1F adc r31,r31
4431 22fa E050 subi r30,lo8(-(PPM_in))
4432 22fc F040 sbci r31,hi8(-(PPM_in))
4433 22fe 8081 ld r24,Z
4434 2300 9181 ldd r25,Z+1
4435 2302 8A5B subi r24,lo8(-70)
4436 2304 9F4F sbci r25,hi8(-70)
4437 2306 04F4 brge .L402
4438 2308 8091 0000 lds r24,EE_Parameter+1
4439 230c E82F mov r30,r24
4440 230e FF27 clr r31
4441 2310 EE0F add r30,r30
4442 2312 FF1F adc r31,r31
4443 2314 E050 subi r30,lo8(-(PPM_in))
4444 2316 F040 sbci r31,hi8(-(PPM_in))
4445 2318 8081 ld r24,Z
4446 231a 9181 ldd r25,Z+1
4447 231c 8734 cpi r24,71
4448 231e 9105 cpc r25,__zero_reg__
4449 2320 04F0 brlt .L402
4450 2322 44E0 ldi r20,lo8(4)
4451 .L402:
4452 2324 E22F mov r30,r18
4453 2326 FF27 clr r31
4454 2328 EE0F add r30,r30
4455 232a FF1F adc r31,r31
4456 232c E050 subi r30,lo8(-(PPM_in))
4457 232e F040 sbci r31,hi8(-(PPM_in))
4458 2330 8081 ld r24,Z
4459 2332 9181 ldd r25,Z+1
4460 2334 8A5B subi r24,lo8(-70)
4461 2336 9F4F sbci r25,hi8(-70)
4462 2338 04F4 brge .L403
4463 233a 8091 0000 lds r24,EE_Parameter+1
4464 233e E82F mov r30,r24
4465 2340 FF27 clr r31
4466 2342 EE0F add r30,r30
4467 2344 FF1F adc r31,r31
4468 2346 E050 subi r30,lo8(-(PPM_in))
4469 2348 F040 sbci r31,hi8(-(PPM_in))
4470 234a 8081 ld r24,Z
4471 234c 9181 ldd r25,Z+1
4472 234e 8634 cpi r24,70
4473 2350 9105 cpc r25,__zero_reg__
4474 2352 04F4 brge .L403
4475 2354 45E0 ldi r20,lo8(5)
4476 .L403:
4477 2356 842F mov r24,r20
4478 2358 0E94 0000 call SetActiveParamSet
4479 .L396:
4480 235c 8091 0000 lds r24,EE_Parameter+2
4481 2360 E82F mov r30,r24
4482 2362 FF27 clr r31
4483 2364 EE0F add r30,r30
4484 2366 FF1F adc r31,r31
4485 2368 E050 subi r30,lo8(-(PPM_in))
4486 236a F040 sbci r31,hi8(-(PPM_in))
4487 236c 8081 ld r24,Z
4488 236e 9181 ldd r25,Z+1
4489 2370 0190 ld __tmp_reg__,Z+
4490 2372 F081 ld r31,Z
4491 2374 E02D mov r30,__tmp_reg__
4492 2376 F7FF sbrs r31,7
4493 2378 00C0 rjmp .L405
4494 237a F095 com r31
4495 237c E195 neg r30
4496 237e FF4F sbci r31,lo8(-1)
4497 .L405:
4498 2380 7E97 sbiw r30,30
4499 2382 04F4 brge .L404
4500 2384 8091 0000 lds r24,EE_Parameter+1
4501 2388 E82F mov r30,r24
4502 238a FF27 clr r31
4503 238c EE0F add r30,r30
4504 238e FF1F adc r31,r31
4505 2390 E050 subi r30,lo8(-(PPM_in))
4506 2392 F040 sbci r31,hi8(-(PPM_in))
4507 2394 8081 ld r24,Z
4508 2396 9181 ldd r25,Z+1
4509 2398 8A5B subi r24,lo8(-70)
4510 239a 9F4F sbci r25,hi8(-70)
4511 239c 04F4 brge .L404
4512 239e 81E0 ldi r24,lo8(1)
4513 23a0 8093 0000 sts WinkelOut+6,r24
4514 23a4 1092 0000 sts CalibrationDone,__zero_reg__
4515 23a8 88EE ldi r24,lo8(1000)
4516 23aa 93E0 ldi r25,hi8(1000)
4517 23ac 9093 0000 sts (beeptime)+1,r25
4518 23b0 8093 0000 sts beeptime,r24
4519 23b4 00C0 rjmp .L393
4520 .L404:
4521 23b6 0E94 0000 call GetActiveParamSet
4522 23ba 0E94 0000 call ParamSet_ReadFromEEProm
4523 23be 80E0 ldi r24,lo8(0)
4524 23c0 0E94 0000 call LipoDetection
4525 23c4 8091 0000 lds r24,EE_Parameter+39
4526 23c8 0E94 0000 call LIBFC_ReceiverInit
4527 23cc 8091 0000 lds r24,Parameter_GlobalConfig
4528 23d0 80FF sbrs r24,0
4529 23d2 00C0 rjmp .L407
4530 23d4 8091 0000 lds r24,MessLuftdruck
4531 23d8 9091 0000 lds r25,(MessLuftdruck)+1
4532 23dc 875B subi r24,lo8(951)
4533 23de 9340 sbci r25,hi8(951)
4534 23e0 00F4 brsh .L409
4535 23e2 8091 0000 lds r24,MessLuftdruck
4536 23e6 9091 0000 lds r25,(MessLuftdruck)+1
4537 23ea 8E5E subi r24,lo8(750)
4538 23ec 9240 sbci r25,hi8(750)
4539 23ee 00F4 brsh .L407
4540 .L409:
4541 23f0 0E94 0000 call SucheLuftruckOffset
4542 .L407:
4543 23f4 80E0 ldi r24,lo8(0)
4544 23f6 0E94 0000 call SetNeutral
4545 23fa 81E0 ldi r24,lo8(1)
4546 23fc 8093 0000 sts CalibrationDone,r24
4547 2400 8093 0000 sts ServoActive,r24
4548 2404 579A sbi 42-0x20,7
4549 2406 00C0 rjmp .L894
4550 .L394:
4551 2408 8081 ld r24,Z
4552 240a 9181 ldd r25,Z+1
4553 240c 855B subi r24,lo8(-75)
4554 240e 9F4F sbci r25,hi8(-75)
4555 2410 04F4 brge .L411
4556 2412 8091 0000 lds r24,delay_neutral.6
4557 2416 8F5F subi r24,lo8(-(1))
4558 2418 8093 0000 sts delay_neutral.6,r24
4559 241c 893C cpi r24,lo8(-55)
4560 241e 00F0 brlo .L393
4561 2420 2093 0000 sts MotorenEin,r18
4562 2424 2093 0000 sts delay_neutral.6,r18
4563 2428 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4564 242c 1092 0000 sts modell_fliegt,__zero_reg__
4565 2430 81E0 ldi r24,lo8(1)
4566 2432 0E94 0000 call SetNeutral
4567 2436 81E0 ldi r24,lo8(1)
4568 2438 8093 0000 sts CalibrationDone,r24
4569 .L894:
4570 243c 88E1 ldi r24,lo8(24)
4571 243e 8093 0000 sts SpeakHoTT,r24
4572 2442 0E94 0000 call GetActiveParamSet
4573 2446 68E7 ldi r22,lo8(120)
4574 2448 70E0 ldi r23,hi8(120)
4575 244a 0E94 0000 call Piep
4576 244e 00C0 rjmp .L393
4577 .L411:
4578 2450 2093 0000 sts delay_neutral.6,r18
4579 .L393:
4580 2454 8091 0000 lds r24,EE_Parameter+3
4581 2458 E82F mov r30,r24
4582 245a FF27 clr r31
4583 245c EE0F add r30,r30
4584 245e FF1F adc r31,r31
4585 2460 E050 subi r30,lo8(-(PPM_in))
4586 2462 F040 sbci r31,hi8(-(PPM_in))
4587 2464 8081 ld r24,Z
4588 2466 9181 ldd r25,Z+1
4589 2468 8B5A subi r24,lo8(-85)
4590 246a 9F4F sbci r25,hi8(-85)
4591 246c 04F0 brlt .+2
4592 246e 00C0 rjmp .L414
4593 2470 2091 0000 lds r18,EE_Parameter+100
4594 2474 E22F mov r30,r18
4595 2476 FF27 clr r31
4596 2478 EF77 andi r30,lo8(127)
4597 247a F070 andi r31,hi8(127)
4598 247c EE0F add r30,r30
4599 247e FF1F adc r31,r31
4600 2480 E050 subi r30,lo8(-(PPM_diff))
4601 2482 F040 sbci r31,hi8(-(PPM_diff))
4602 2484 8081 ld r24,Z
4603 2486 9181 ldd r25,Z+1
4604 2488 0697 sbiw r24,6
4605 248a 04F0 brlt .L415
4606 248c 84E6 ldi r24,lo8(100)
4607 248e 00C0 rjmp .L895
4608 .L415:
4609 2490 8081 ld r24,Z
4610 2492 9181 ldd r25,Z+1
4611 2494 8B5F subi r24,lo8(-5)
4612 2496 9F4F sbci r25,hi8(-5)
4613 2498 04F4 brge .L416
4614 249a 8CE9 ldi r24,lo8(-100)
4615 .L895:
4616 249c 8093 0000 sts move_safety_switch.9,r24
4617 .L416:
4618 24a0 8091 0000 lds r24,MotorenEin
4619 24a4 E091 0000 lds r30,EE_Parameter+4
4620 24a8 8823 tst r24
4621 24aa 01F0 breq .+2
4622 24ac 00C0 rjmp .L418
4623 24ae FF27 clr r31
4624 24b0 EE0F add r30,r30
4625 24b2 FF1F adc r31,r31
4626 24b4 E050 subi r30,lo8(-(PPM_in))
4627 24b6 F040 sbci r31,hi8(-(PPM_in))
4628 24b8 8081 ld r24,Z
4629 24ba 9181 ldd r25,Z+1
4630 24bc 855B subi r24,lo8(-75)
4631 24be 9F4F sbci r25,hi8(-75)
4632 24c0 04F4 brge .L421
4633 24c2 8091 0000 lds r24,EE_Parameter+111
4634 24c6 83FD sbrc r24,3
4635 24c8 00C0 rjmp .L422
4636 24ca E22F mov r30,r18
4637 24cc FF27 clr r31
4638 24ce EE0F add r30,r30
4639 24d0 FF1F adc r31,r31
4640 24d2 E050 subi r30,lo8(-(PPM_in))
4641 24d4 F040 sbci r31,hi8(-(PPM_in))
4642 24d6 8081 ld r24,Z
4643 24d8 9181 ldd r25,Z+1
4644 24da 855B subi r24,lo8(-75)
4645 24dc 9F4F sbci r25,hi8(-75)
4646 24de 04F0 brlt .L420
4647 .L422:
4648 24e0 8091 0000 lds r24,EE_Parameter+100
4649 24e4 8823 tst r24
4650 24e6 01F0 breq .L420
4651 .L421:
4652 24e8 8091 0000 lds r24,EE_Parameter+111
4653 24ec 83FF sbrs r24,3
4654 24ee 00C0 rjmp .L419
4655 24f0 8091 0000 lds r24,EE_Parameter+100
4656 24f4 E82F mov r30,r24
4657 24f6 FF27 clr r31
4658 24f8 EE0F add r30,r30
4659 24fa FF1F adc r31,r31
4660 24fc E050 subi r30,lo8(-(PPM_in))
4661 24fe F040 sbci r31,hi8(-(PPM_in))
4662 2500 8081 ld r24,Z
4663 2502 9181 ldd r25,Z+1
4664 2504 875F subi r24,lo8(-9)
4665 2506 9F4F sbci r25,hi8(-9)
4666 2508 04F4 brge .+2
4667 250a 00C0 rjmp .L419
4668 250c 8091 0000 lds r24,move_safety_switch.9
4669 2510 8436 cpi r24,lo8(100)
4670 2512 01F0 breq .+2
4671 2514 00C0 rjmp .L419
4672 .L420:
4673 2516 2091 0000 lds r18,CalibrationDone
4674 251a 2223 tst r18
4675 251c 01F0 breq .L423
4676 251e 8091 0000 lds r24,FC_StatusFlags
4677 2522 8860 ori r24,lo8(8)
4678 2524 8093 0000 sts FC_StatusFlags,r24
4679 .L423:
4680 2528 8091 0000 lds r24,delay_einschalten.7
4681 252c 8F5F subi r24,lo8(-(1))
4682 252e 8093 0000 sts delay_einschalten.7,r24
4683 2532 8E3F cpi r24,lo8(-2)
4684 2534 00F4 brsh .+2
4685 2536 00C0 rjmp .L429
4686 2538 1092 0000 sts delay_einschalten.7,__zero_reg__
4687 253c 8091 0000 lds r24,VersionInfo+5
4688 2540 8823 tst r24
4689 2542 01F0 breq .+2
4690 2544 00C0 rjmp .L425
4691 2546 2223 tst r18
4692 2548 01F4 brne .+2
4693 254a 00C0 rjmp .L425
4694 254c 8091 0000 lds r24,NC_ErrorCode
4695 2550 8823 tst r24
4696 2552 01F0 breq .+2
4697 2554 00C0 rjmp .L425
4698 2556 81E0 ldi r24,lo8(1)
4699 2558 90E0 ldi r25,hi8(1)
4700 255a 9093 0000 sts (modell_fliegt)+1,r25
4701 255e 8093 0000 sts modell_fliegt,r24
4702 2562 81E0 ldi r24,lo8(1)
4703 2564 8093 0000 sts MotorenEin,r24
4704 2568 1092 0000 sts sollGier.0,__zero_reg__
4705 256c 1092 0000 sts (sollGier.0)+1,__zero_reg__
4706 2570 1092 0000 sts (sollGier.0)+2,__zero_reg__
4707 2574 1092 0000 sts (sollGier.0)+3,__zero_reg__
4708 2578 1092 0000 sts Mess_Integral_Gier,__zero_reg__
4709 257c 1092 0000 sts (Mess_Integral_Gier)+1,__zero_reg__
4710 2580 1092 0000 sts (Mess_Integral_Gier)+2,__zero_reg__
4711 2584 1092 0000 sts (Mess_Integral_Gier)+3,__zero_reg__
4712 2588 1092 0000 sts Mess_Integral_Gier2,__zero_reg__
4713 258c 1092 0000 sts (Mess_Integral_Gier2)+1,__zero_reg__
4714 2590 1092 0000 sts (Mess_Integral_Gier2)+2,__zero_reg__
4715 2594 1092 0000 sts (Mess_Integral_Gier2)+3,__zero_reg__
4716 2598 8091 0000 lds r24,EE_Parameter+28
4717 259c E82E mov r14,r24
4718 259e FF24 clr r15
4719 25a0 0027 clr r16
4720 25a2 1127 clr r17
4721 25a4 8091 0000 lds r24,Mittelwert_AccNick
4722 25a8 9091 0000 lds r25,(Mittelwert_AccNick)+1
4723 25ac 9C01 movw r18,r24
4724 25ae 4427 clr r20
4725 25b0 37FD sbrc r19,7
4726 25b2 4095 com r20
4727 25b4 542F mov r21,r20
4728 25b6 C801 movw r24,r16
4729 25b8 B701 movw r22,r14
4730 25ba 0E94 0000 call __mulsi3
4731 25be DC01 movw r26,r24
4732 25c0 CB01 movw r24,r22
4733 25c2 8093 0000 sts Mess_IntegralNick,r24
4734 25c6 9093 0000 sts (Mess_IntegralNick)+1,r25
4735 25ca A093 0000 sts (Mess_IntegralNick)+2,r26
4736 25ce B093 0000 sts (Mess_IntegralNick)+3,r27
4737 25d2 8091 0000 lds r24,Mittelwert_AccRoll
4738 25d6 9091 0000 lds r25,(Mittelwert_AccRoll)+1
4739 25da 9C01 movw r18,r24
4740 25dc 4427 clr r20
4741 25de 37FD sbrc r19,7
4742 25e0 4095 com r20
4743 25e2 542F mov r21,r20
4744 25e4 C801 movw r24,r16
4745 25e6 B701 movw r22,r14
4746 25e8 0E94 0000 call __mulsi3
4747 25ec DC01 movw r26,r24
4748 25ee CB01 movw r24,r22
4749 25f0 8093 0000 sts Mess_IntegralRoll,r24
4750 25f4 9093 0000 sts (Mess_IntegralRoll)+1,r25
4751 25f8 A093 0000 sts (Mess_IntegralRoll)+2,r26
4752 25fc B093 0000 sts (Mess_IntegralRoll)+3,r27
4753 2600 8091 0000 lds r24,IntegralNick
4754 2604 9091 0000 lds r25,(IntegralNick)+1
4755 2608 A091 0000 lds r26,(IntegralNick)+2
4756 260c B091 0000 lds r27,(IntegralNick)+3
4757 2610 8093 0000 sts Mess_IntegralNick2,r24
4758 2614 9093 0000 sts (Mess_IntegralNick2)+1,r25
4759 2618 A093 0000 sts (Mess_IntegralNick2)+2,r26
4760 261c B093 0000 sts (Mess_IntegralNick2)+3,r27
4761 2620 8091 0000 lds r24,IntegralRoll
4762 2624 9091 0000 lds r25,(IntegralRoll)+1
4763 2628 A091 0000 lds r26,(IntegralRoll)+2
4764 262c B091 0000 lds r27,(IntegralRoll)+3
4765 2630 8093 0000 sts Mess_IntegralRoll2,r24
4766 2634 9093 0000 sts (Mess_IntegralRoll2)+1,r25
4767 2638 A093 0000 sts (Mess_IntegralRoll2)+2,r26
4768 263c B093 0000 sts (Mess_IntegralRoll2)+3,r27
4769 2640 1092 0000 sts SummeNick,__zero_reg__
4770 2644 1092 0000 sts (SummeNick)+1,__zero_reg__
4771 2648 1092 0000 sts (SummeNick)+2,__zero_reg__
4772 264c 1092 0000 sts (SummeNick)+3,__zero_reg__
4773 2650 1092 0000 sts SummeRoll,__zero_reg__
4774 2654 1092 0000 sts (SummeRoll)+1,__zero_reg__
4775 2658 1092 0000 sts (SummeRoll)+2,__zero_reg__
4776 265c 1092 0000 sts (SummeRoll)+3,__zero_reg__
4777 2660 84E6 ldi r24,lo8(100)
4778 2662 8093 0000 sts NeueKompassRichtungMerken,r24
4779 2666 84E3 ldi r24,lo8(52)
4780 2668 00C0 rjmp .L896
4781 .L425:
4782 266a 8CED ldi r24,lo8(1500)
4783 266c 95E0 ldi r25,hi8(1500)
4784 266e 9093 0000 sts (beeptime)+1,r25
4785 2672 8093 0000 sts beeptime,r24
4786 2676 2223 tst r18
4787 2678 01F0 breq .+2
4788 267a 00C0 rjmp .L429
4789 267c 81E0 ldi r24,lo8(1)
4790 267e 00C0 rjmp .L896
4791 .L419:
4792 2680 1092 0000 sts delay_einschalten.7,__zero_reg__
4793 2684 00C0 rjmp .L429
4794 .L418:
4795 2686 FF27 clr r31
4796 2688 EE0F add r30,r30
4797 268a FF1F adc r31,r31
4798 268c E050 subi r30,lo8(-(PPM_in))
4799 268e F040 sbci r31,hi8(-(PPM_in))
4800 2690 8081 ld r24,Z
4801 2692 9181 ldd r25,Z+1
4802 2694 8C34 cpi r24,76
4803 2696 9105 cpc r25,__zero_reg__
4804 2698 04F0 brlt .L432
4805 269a 8091 0000 lds r24,EE_Parameter+111
4806 269e 83FD sbrc r24,3
4807 26a0 00C0 rjmp .L433
4808 26a2 E22F mov r30,r18
4809 26a4 FF27 clr r31
4810 26a6 EE0F add r30,r30
4811 26a8 FF1F adc r31,r31
4812 26aa E050 subi r30,lo8(-(PPM_in))
4813 26ac F040 sbci r31,hi8(-(PPM_in))
4814 26ae 8081 ld r24,Z
4815 26b0 9181 ldd r25,Z+1
4816 26b2 855B subi r24,lo8(-75)
4817 26b4 9F4F sbci r25,hi8(-75)
4818 26b6 04F0 brlt .L431
4819 .L433:
4820 26b8 8091 0000 lds r24,EE_Parameter+100
4821 26bc 8823 tst r24
4822 26be 01F0 breq .L431
4823 .L432:
4824 26c0 8091 0000 lds r24,EE_Parameter+111
4825 26c4 83FF sbrs r24,3
4826 26c6 00C0 rjmp .L430
4827 26c8 8091 0000 lds r24,EE_Parameter+100
4828 26cc E82F mov r30,r24
4829 26ce FF27 clr r31
4830 26d0 EE0F add r30,r30
4831 26d2 FF1F adc r31,r31
4832 26d4 E050 subi r30,lo8(-(PPM_in))
4833 26d6 F040 sbci r31,hi8(-(PPM_in))
4834 26d8 8081 ld r24,Z
4835 26da 9181 ldd r25,Z+1
4836 26dc 8E5C subi r24,lo8(-50)
4837 26de 9F4F sbci r25,hi8(-50)
4838 26e0 04F4 brge .L430
4839 26e2 8091 0000 lds r24,move_safety_switch.9
4840 26e6 8C39 cpi r24,lo8(-100)
4841 26e8 01F4 brne .L430
4842 .L431:
4843 26ea 8091 0000 lds r24,delay_ausschalten.8
4844 26ee 8F5F subi r24,lo8(-(1))
4845 26f0 8093 0000 sts delay_ausschalten.8,r24
4846 26f4 8B3F cpi r24,lo8(-5)
4847 26f6 00F0 brlo .L429
4848 26f8 1092 0000 sts MotorenEin,__zero_reg__
4849 26fc 1092 0000 sts delay_ausschalten.8,__zero_reg__
4850 2700 1092 0000 sts (modell_fliegt)+1,__zero_reg__
4851 2704 1092 0000 sts modell_fliegt,__zero_reg__
4852 2708 86E2 ldi r24,lo8(38)
4853 .L896:
4854 270a 8093 0000 sts SpeakHoTT,r24
4855 270e 00C0 rjmp .L429
4856 .L430:
4857 2710 1092 0000 sts delay_ausschalten.8,__zero_reg__
4858 .L429:
4859 2714 8091 0000 lds r24,GasIsZeroCnt
4860 2718 9091 0000 lds r25,(GasIsZeroCnt)+1
4861 271c 13E0 ldi r17,hi8(1000)
4862 271e 883E cpi r24,lo8(1000)
4863 2720 9107 cpc r25,r17
4864 2722 00F4 brsh .L387
4865 2724 0196 adiw r24,1
4866 2726 9093 0000 sts (GasIsZeroCnt)+1,r25
4867 272a 8093 0000 sts GasIsZeroCnt,r24
4868 272e 00C0 rjmp .L387
4869 .L414:
4870 2730 1092 0000 sts move_safety_switch.9,__zero_reg__
4871 2734 1092 0000 sts (GasIsZeroCnt)+1,__zero_reg__
4872 2738 1092 0000 sts GasIsZeroCnt,__zero_reg__
4873 273c 00C0 rjmp .L387
4874 .L388:
4875 273e 2E5E subi r18,lo8(750)
4876 2740 3240 sbci r19,hi8(750)
4877 2742 00F0 brlo .L387
4878 2744 8091 0000 lds r24,GPSInfo+4
4879 2748 9091 0000 lds r25,(GPSInfo+4)+1
4880 274c 8059 subi r24,lo8(400)
4881 274e 9140 sbci r25,hi8(400)
4882 2750 00F4 brsh .L387
4883 2752 8091 0000 lds r24,HoehenWert
4884 2756 9091 0000 lds r25,(HoehenWert)+1
4885 275a A091 0000 lds r26,(HoehenWert)+2
4886 275e B091 0000 lds r27,(HoehenWert)+3
4887 2762 8C5D subi r24,lo8(1500)
4888 2764 9540 sbci r25,hi8(1500)
4889 2766 A040 sbci r26,hlo8(1500)
4890 2768 B040 sbci r27,hhi8(1500)
4891 276a 04F4 brge .L387
4892 276c 80E3 ldi r24,lo8(30000)
4893 276e 95E7 ldi r25,hi8(30000)
4894 2770 9093 0000 sts (GasIsZeroCnt)+1,r25
4895 2774 8093 0000 sts GasIsZeroCnt,r24
4896 2778 8091 0000 lds r24,modell_fliegt
4897 277c 9091 0000 lds r25,(modell_fliegt)+1
4898 2780 8A5E subi r24,lo8(1002)
4899 2782 9340 sbci r25,hi8(1002)
4900 2784 00F0 brlo .L387
4901 2786 89EE ldi r24,lo8(1001)
4902 2788 93E0 ldi r25,hi8(1001)
4903 278a 9093 0000 sts (modell_fliegt)+1,r25
4904 278e 8093 0000 sts modell_fliegt,r24
4905 .L387:
4906 2792 8091 0000 lds r24,NewPpmData
4907 2796 8150 subi r24,lo8(-(-1))
4908 2798 8093 0000 sts NewPpmData,r24
4909 279c 8091 0000 lds r24,NewPpmData
4910 27a0 8F3F cpi r24,lo8(-1)
4911 27a2 01F0 breq .L443
4912 27a4 8091 0000 lds r24,FC_StatusFlags
4913 27a8 84FF sbrs r24,4
4914 27aa 00C0 rjmp .L442
4915 .L443:
4916 27ac 0E94 0000 call ParameterZuordnung
4917 27b0 B090 0000 lds r11,EE_Parameter+23
4918 27b4 8091 0000 lds r24,stick_nick.12
4919 27b8 9091 0000 lds r25,(stick_nick.12)+1
4920 27bc 9C01 movw r18,r24
4921 27be 220F lsl r18
4922 27c0 331F rol r19
4923 27c2 280F add r18,r24
4924 27c4 391F adc r19,r25
4925 27c6 C090 0000 lds r12,EE_Parameter+1
4926 27ca AC2D mov r26,r12
4927 27cc BB27 clr r27
4928 27ce AA0F add r26,r26
4929 27d0 BB1F adc r27,r27
4930 27d2 FD01 movw r30,r26
4931 27d4 E050 subi r30,lo8(-(PPM_in))
4932 27d6 F040 sbci r31,hi8(-(PPM_in))
4933 27d8 4B2D mov r20,r11
4934 27da 5527 clr r21
4935 27dc 8081 ld r24,Z
4936 27de 9181 ldd r25,Z+1
4937 27e0 849F mul r24,r20
4938 27e2 F001 movw r30,r0
4939 27e4 859F mul r24,r21
4940 27e6 F00D add r31,r0
4941 27e8 949F mul r25,r20
4942 27ea F00D add r31,r0
4943 27ec 1124 clr r1
4944 27ee 2E0F add r18,r30
4945 27f0 3F1F adc r19,r31
4946 27f2 37FF sbrs r19,7
4947 27f4 00C0 rjmp .L444
4948 27f6 2D5F subi r18,lo8(-(3))
4949 27f8 3F4F sbci r19,hi8(-(3))
4950 .L444:
4951 27fa B901 movw r22,r18
4952 27fc 7595 asr r23
4953 27fe 6795 ror r22
4954 2800 7595 asr r23
4955 2802 6795 ror r22
4956 2804 A050 subi r26,lo8(-(PPM_diff))
4957 2806 B040 sbci r27,hi8(-(PPM_diff))
4958 2808 8091 0000 lds r24,EE_Parameter+24
4959 280c 082F mov r16,r24
4960 280e 1127 clr r17
4961 2810 8D91 ld r24,X+
4962 2812 9C91 ld r25,X
4963 2814 809F mul r24,r16
4964 2816 7001 movw r14,r0
4965 2818 819F mul r24,r17
4966 281a F00C add r15,r0
4967 281c 909F mul r25,r16
4968 281e F00C add r15,r0
4969 2820 1124 clr r1
4970 2822 6E0D add r22,r14
4971 2824 7F1D adc r23,r15
4972 2826 7093 0000 sts (stick_nick.12)+1,r23
4973 282a 6093 0000 sts stick_nick.12,r22
4974 282e 8091 0000 lds r24,stick_roll.13
4975 2832 9091 0000 lds r25,(stick_roll.13)+1
4976 2836 9C01 movw r18,r24
4977 2838 220F lsl r18
4978 283a 331F rol r19
4979 283c 280F add r18,r24
4980 283e 391F adc r19,r25
4981 2840 D090 0000 lds r13,EE_Parameter+2
4982 2844 AD2D mov r26,r13
4983 2846 BB27 clr r27
4984 2848 AA0F add r26,r26
4985 284a BB1F adc r27,r27
4986 284c FD01 movw r30,r26
4987 284e E050 subi r30,lo8(-(PPM_in))
4988 2850 F040 sbci r31,hi8(-(PPM_in))
4989 2852 8081 ld r24,Z
4990 2854 9181 ldd r25,Z+1
4991 2856 849F mul r24,r20
4992 2858 F001 movw r30,r0
4993 285a 859F mul r24,r21
4994 285c F00D add r31,r0
4995 285e 949F mul r25,r20
4996 2860 F00D add r31,r0
4997 2862 1124 clr r1
4998 2864 2E0F add r18,r30
4999 2866 3F1F adc r19,r31
5000 2868 37FF sbrs r19,7
5001 286a 00C0 rjmp .L445
5002 286c 2D5F subi r18,lo8(-(3))
5003 286e 3F4F sbci r19,hi8(-(3))
5004 .L445:
5005 2870 A901 movw r20,r18
5006 2872 5595 asr r21
5007 2874 4795 ror r20
5008 2876 5595 asr r21
5009 2878 4795 ror r20
5010 287a A050 subi r26,lo8(-(PPM_diff))
5011 287c B040 sbci r27,hi8(-(PPM_diff))
5012 287e 8D91 ld r24,X+
5013 2880 9C91 ld r25,X
5014 2882 809F mul r24,r16
5015 2884 7001 movw r14,r0
5016 2886 819F mul r24,r17
5017 2888 F00C add r15,r0
5018 288a 909F mul r25,r16
5019 288c F00C add r15,r0
5020 288e 1124 clr r1
5021 2890 4E0D add r20,r14
5022 2892 5F1D adc r21,r15
5023 2894 5093 0000 sts (stick_roll.13)+1,r21
5024 2898 4093 0000 sts stick_roll.13,r20
5025 289c 8091 0000 lds r24,CareFree
5026 28a0 8823 tst r24
5027 28a2 01F4 brne .+2
5028 28a4 00C0 rjmp .L446
5029 28a6 CB01 movw r24,r22
5030 28a8 77FD sbrc r23,7
5031 28aa 0396 adiw r24,3
5032 .L447:
5033 28ac DC01 movw r26,r24
5034 28ae B595 asr r27
5035 28b0 A795 ror r26
5036 28b2 B595 asr r27
5037 28b4 A795 ror r26
5038 28b6 CA01 movw r24,r20
5039 28b8 57FD sbrc r21,7
5040 28ba 0396 adiw r24,3
5041 .L448:
5042 28bc FC01 movw r30,r24
5043 28be F595 asr r31
5044 28c0 E795 ror r30
5045 28c2 F595 asr r31
5046 28c4 E795 ror r30
5047 28c6 8091 0000 lds r24,FromNC_Rotate_C
5048 28ca 682F mov r22,r24
5049 28cc 7727 clr r23
5050 28ce 67FD sbrc r22,7
5051 28d0 7095 com r23
5052 28d2 6A9F mul r22,r26
5053 28d4 9001 movw r18,r0
5054 28d6 6B9F mul r22,r27
5055 28d8 300D add r19,r0
5056 28da 7A9F mul r23,r26
5057 28dc 300D add r19,r0
5058 28de 1124 clr r1
5059 28e0 8091 0000 lds r24,FromNC_Rotate_S
5060 28e4 482F mov r20,r24
5061 28e6 5527 clr r21
5062 28e8 47FD sbrc r20,7
5063 28ea 5095 com r21
5064 28ec 4E9F mul r20,r30
5065 28ee C001 movw r24,r0
5066 28f0 4F9F mul r20,r31
5067 28f2 900D add r25,r0
5068 28f4 5E9F mul r21,r30
5069 28f6 900D add r25,r0
5070 28f8 1124 clr r1
5071 28fa 280F add r18,r24
5072 28fc 391F adc r19,r25
5073 28fe 37FF sbrs r19,7
5074 2900 00C0 rjmp .L449
5075 2902 295F subi r18,lo8(-(7))
5076 2904 3F4F sbci r19,hi8(-(7))
5077 .L449:
5078 2906 93E0 ldi r25,3
5079 2908 3595 1: asr r19
5080 290a 2795 ror r18
5081 290c 9A95 dec r25
5082 290e 01F4 brne 1b
5083 2910 3093 0000 sts (StickNick)+1,r19
5084 2914 2093 0000 sts StickNick,r18
5085 2918 6E9F mul r22,r30
5086 291a 9001 movw r18,r0
5087 291c 6F9F mul r22,r31
5088 291e 300D add r19,r0
5089 2920 7E9F mul r23,r30
5090 2922 300D add r19,r0
5091 2924 1124 clr r1
5092 2926 4A9F mul r20,r26
5093 2928 C001 movw r24,r0
5094 292a 4B9F mul r20,r27
5095 292c 900D add r25,r0
5096 292e 5A9F mul r21,r26
5097 2930 900D add r25,r0
5098 2932 1124 clr r1
5099 2934 00C0 rjmp .L925
5100 .L446:
5101 2936 8091 0000 lds r24,EE_Parameter+98
5102 293a E82F mov r30,r24
5103 293c FF27 clr r31
5104 293e E050 subi r30,lo8(-(sintab))
5105 2940 F040 sbci r31,hi8(-(sintab))
5106 2942 8681 ldd r24,Z+6
5107 2944 8093 0000 sts FromNC_Rotate_C,r24
5108 2948 9081 ld r25,Z
5109 294a 9093 0000 sts FromNC_Rotate_S,r25
5110 294e A82F mov r26,r24
5111 2950 BB27 clr r27
5112 2952 A7FD sbrc r26,7
5113 2954 B095 com r27
5114 2956 A69F mul r26,r22
5115 2958 9001 movw r18,r0
5116 295a A79F mul r26,r23
5117 295c 300D add r19,r0
5118 295e B69F mul r27,r22
5119 2960 300D add r19,r0
5120 2962 1124 clr r1
5121 2964 E92F mov r30,r25
5122 2966 FF27 clr r31
5123 2968 E7FD sbrc r30,7
5124 296a F095 com r31
5125 296c E49F mul r30,r20
5126 296e C001 movw r24,r0
5127 2970 E59F mul r30,r21
5128 2972 900D add r25,r0
5129 2974 F49F mul r31,r20
5130 2976 900D add r25,r0
5131 2978 1124 clr r1
5132 297a 280F add r18,r24
5133 297c 391F adc r19,r25
5134 297e 37FF sbrs r19,7
5135 2980 00C0 rjmp .L452
5136 2982 295F subi r18,lo8(-(7))
5137 2984 3F4F sbci r19,hi8(-(7))
5138 .L452:
5139 2986 83E0 ldi r24,3
5140 2988 3595 1: asr r19
5141 298a 2795 ror r18
5142 298c 8A95 dec r24
5143 298e 01F4 brne 1b
5144 2990 3093 0000 sts (StickNick)+1,r19
5145 2994 2093 0000 sts StickNick,r18
5146 2998 A49F mul r26,r20
5147 299a 9001 movw r18,r0
5148 299c A59F mul r26,r21
5149 299e 300D add r19,r0
5150 29a0 B49F mul r27,r20
5151 29a2 300D add r19,r0
5152 29a4 1124 clr r1
5153 29a6 E69F mul r30,r22
5154 29a8 C001 movw r24,r0
5155 29aa E79F mul r30,r23
5156 29ac 900D add r25,r0
5157 29ae F69F mul r31,r22
5158 29b0 900D add r25,r0
5159 29b2 1124 clr r1
5160 .L925:
5161 29b4 281B sub r18,r24
5162 29b6 390B sbc r19,r25
5163 29b8 37FF sbrs r19,7
5164 29ba 00C0 rjmp .L453
5165 29bc 295F subi r18,lo8(-(7))
5166 29be 3F4F sbci r19,hi8(-(7))
5167 .L453:
5168 29c0 03E0 ldi r16,3
5169 29c2 3595 1: asr r19
5170 29c4 2795 ror r18
5171 29c6 0A95 dec r16
5172 29c8 01F4 brne 1b
5173 29ca 3093 0000 sts (StickRoll)+1,r19
5174 29ce 2093 0000 sts StickRoll,r18
5175 29d2 8091 0000 lds r24,EE_Parameter+4
5176 29d6 E82F mov r30,r24
5177 29d8 FF27 clr r31
5178 29da EE0F add r30,r30
5179 29dc FF1F adc r31,r31
5180 29de E050 subi r30,lo8(-(PPM_in))
5181 29e0 F040 sbci r31,hi8(-(PPM_in))
5182 29e2 8081 ld r24,Z
5183 29e4 9181 ldd r25,Z+1
5184 29e6 9095 com r25
5185 29e8 8195 neg r24
5186 29ea 9F4F sbci r25,lo8(-1)
5187 29ec 9093 0000 sts (StickGier)+1,r25
5188 29f0 8093 0000 sts StickGier,r24
5189 29f4 8530 cpi r24,5
5190 29f6 9105 cpc r25,__zero_reg__
5191 29f8 04F0 brlt .L454
5192 29fa 0497 sbiw r24,4
5193 29fc 00C0 rjmp .L897
5194 .L454:
5195 29fe 0FEF ldi r16,hi8(-4)
5196 2a00 8C3F cpi r24,lo8(-4)
5197 2a02 9007 cpc r25,r16
5198 2a04 04F4 brge .L456
5199 2a06 0496 adiw r24,4
5200 .L897:
5201 2a08 9093 0000 sts (StickGier)+1,r25
5202 2a0c 8093 0000 sts StickGier,r24
5203 2a10 00C0 rjmp .L455
5204 .L456:
5205 2a12 1092 0000 sts (StickGier)+1,__zero_reg__
5206 2a16 1092 0000 sts StickGier,__zero_reg__
5207 .L455:
5208 2a1a 8091 0000 lds r24,GPS_Aid_StickMultiplikator
5209 2a1e 8823 tst r24
5210 2a20 01F4 brne .+2
5211 2a22 00C0 rjmp .L458
5212 2a24 282F mov r18,r24
5213 2a26 3327 clr r19
5214 2a28 8091 0000 lds r24,StickNick
5215 2a2c 9091 0000 lds r25,(StickNick)+1
5216 2a30 97FD sbrc r25,7
5217 2a32 0796 adiw r24,7
5218 .L459:
5219 2a34 13E0 ldi r17,3
5220 2a36 9595 1: asr r25
5221 2a38 8795 ror r24
5222 2a3a 1A95 dec r17
5223 2a3c 01F4 brne 1b
5224 2a3e 289F mul r18,r24
5225 2a40 A001 movw r20,r0
5226 2a42 299F mul r18,r25
5227 2a44 500D add r21,r0
5228 2a46 389F mul r19,r24
5229 2a48 500D add r21,r0
5230 2a4a 1124 clr r1
5231 2a4c CA01 movw r24,r20
5232 2a4e 57FD sbrc r21,7
5233 2a50 0F96 adiw r24,15
5234 .L460:
5235 2a52 B4E0 ldi r27,4
5236 2a54 9595 1: asr r25
5237 2a56 8795 ror r24
5238 2a58 BA95 dec r27
5239 2a5a 01F4 brne 1b
5240 2a5c 9093 0000 sts (StickNick)+1,r25
5241 2a60 8093 0000 sts StickNick,r24
5242 2a64 8091 0000 lds r24,StickRoll
5243 2a68 9091 0000 lds r25,(StickRoll)+1
5244 2a6c 97FD sbrc r25,7
5245 2a6e 0796 adiw r24,7
5246 .L461:
5247 2a70 A3E0 ldi r26,3
5248 2a72 9595 1: asr r25
5249 2a74 8795 ror r24
5250 2a76 AA95 dec r26
5251 2a78 01F4 brne 1b
5252 2a7a 289F mul r18,r24
5253 2a7c B001 movw r22,r0
5254 2a7e 299F mul r18,r25
5255 2a80 700D add r23,r0
5256 2a82 389F mul r19,r24
5257 2a84 700D add r23,r0
5258 2a86 1124 clr r1
5259 2a88 CB01 movw r24,r22
5260 2a8a 77FD sbrc r23,7
5261 2a8c 0F96 adiw r24,15
5262 .L462:
5263 2a8e F4E0 ldi r31,4
5264 2a90 9595 1: asr r25
5265 2a92 8795 ror r24
5266 2a94 FA95 dec r31
5267 2a96 01F4 brne 1b
5268 2a98 9093 0000 sts (StickRoll)+1,r25
5269 2a9c 8093 0000 sts StickRoll,r24
5270 .L458:
5271 2aa0 8090 0000 lds r8,StickNick
5272 2aa4 9090 0000 lds r9,(StickNick)+1
5273 2aa8 8091 0000 lds r24,GPS_Nick
5274 2aac 9091 0000 lds r25,(GPS_Nick)+1
5275 2ab0 881A sub r8,r24
5276 2ab2 990A sbc r9,r25
5277 2ab4 9092 0000 sts (StickNick)+1,r9
5278 2ab8 8092 0000 sts StickNick,r8
5279 2abc 0091 0000 lds r16,StickRoll
5280 2ac0 1091 0000 lds r17,(StickRoll)+1
5281 2ac4 8091 0000 lds r24,GPS_Roll
5282 2ac8 9091 0000 lds r25,(GPS_Roll)+1
5283 2acc 081B sub r16,r24
5284 2ace 190B sbc r17,r25
5285 2ad0 1093 0000 sts (StickRoll)+1,r17
5286 2ad4 0093 0000 sts StickRoll,r16
5287 2ad8 8091 0000 lds r24,EE_Parameter+3
5288 2adc E82F mov r30,r24
5289 2ade FF27 clr r31
5290 2ae0 EE0F add r30,r30
5291 2ae2 FF1F adc r31,r31
5292 2ae4 E050 subi r30,lo8(-(PPM_in))
5293 2ae6 F040 sbci r31,hi8(-(PPM_in))
5294 2ae8 E080 ld r14,Z
5295 2aea F180 ldd r15,Z+1
5296 2aec 8FE7 ldi r24,lo8(127)
5297 2aee 90E0 ldi r25,hi8(127)
5298 2af0 E80E add r14,r24
5299 2af2 F91E adc r15,r25
5300 2af4 F092 0000 sts (StickGas)+1,r15
5301 2af8 E092 0000 sts StickGas,r14
5302 2afc 8091 0000 lds r24,Parameter_Gyro_P
5303 2b00 9927 clr r25
5304 2b02 AA27 clr r26
5305 2b04 97FD sbrc r25,7
5306 2b06 A095 com r26
5307 2b08 BA2F mov r27,r26
5308 2b0a BC01 movw r22,r24
5309 2b0c CD01 movw r24,r26
5310 2b0e 0E94 0000 call __floatsisf
5311 2b12 DC01 movw r26,r24
5312 2b14 CB01 movw r24,r22
5313 2b16 20E0 ldi r18,lo8(0x41200000)
5314 2b18 30E0 ldi r19,hi8(0x41200000)
5315 2b1a 40E2 ldi r20,hlo8(0x41200000)
5316 2b1c 51E4 ldi r21,hhi8(0x41200000)
5317 2b1e BC01 movw r22,r24
5318 2b20 CD01 movw r24,r26
5319 2b22 0E94 0000 call __addsf3
5320 2b26 DC01 movw r26,r24
5321 2b28 CB01 movw r24,r22
5322 2b2a BC01 movw r22,r24
5323 2b2c CD01 movw r24,r26
5324 2b2e 0E94 0000 call __fixunssfsi
5325 2b32 DC01 movw r26,r24
5326 2b34 CB01 movw r24,r22
5327 2b36 8093 0000 sts GyroFaktor,r24
5328 2b3a 8091 0000 lds r24,Parameter_Gyro_I
5329 2b3e 8093 0000 sts IntegralFaktor,r24
5330 2b42 8091 0000 lds r24,Parameter_Gyro_Gier_P
5331 2b46 9927 clr r25
5332 2b48 AA27 clr r26
5333 2b4a 97FD sbrc r25,7
5334 2b4c A095 com r26
5335 2b4e BA2F mov r27,r26
5336 2b50 BC01 movw r22,r24
5337 2b52 CD01 movw r24,r26
5338 2b54 0E94 0000 call __floatsisf
5339 2b58 DC01 movw r26,r24
5340 2b5a CB01 movw r24,r22
5341 2b5c 20E0 ldi r18,lo8(0x41200000)
5342 2b5e 30E0 ldi r19,hi8(0x41200000)
5343 2b60 40E2 ldi r20,hlo8(0x41200000)
5344 2b62 51E4 ldi r21,hhi8(0x41200000)
5345 2b64 BC01 movw r22,r24
5346 2b66 CD01 movw r24,r26
5347 2b68 0E94 0000 call __addsf3
5348 2b6c DC01 movw r26,r24
5349 2b6e CB01 movw r24,r22
5350 2b70 BC01 movw r22,r24
5351 2b72 CD01 movw r24,r26
5352 2b74 0E94 0000 call __fixunssfsi
5353 2b78 DC01 movw r26,r24
5354 2b7a CB01 movw r24,r22
5355 2b7c 8093 0000 sts GyroFaktorGier,r24
5356 2b80 8091 0000 lds r24,Parameter_Gyro_Gier_I
5357 2b84 8093 0000 sts IntegralFaktorGier,r24
5358 2b88 8091 0000 lds r24,ExternControl+10
5359 2b8c 80FF sbrs r24,0
5360 2b8e 00C0 rjmp .L463
5361 2b90 8091 0000 lds r24,Parameter_ExternalControl
5362 2b94 8138 cpi r24,lo8(-127)
5363 2b96 00F4 brsh .+2
5364 2b98 00C0 rjmp .L463
5365 2b9a 8091 0000 lds r24,ExternControl+3
5366 2b9e 9927 clr r25
5367 2ba0 87FD sbrc r24,7
5368 2ba2 9095 com r25
5369 2ba4 2B2D mov r18,r11
5370 2ba6 3327 clr r19
5371 2ba8 829F mul r24,r18
5372 2baa D001 movw r26,r0
5373 2bac 839F mul r24,r19
5374 2bae B00D add r27,r0
5375 2bb0 929F mul r25,r18
5376 2bb2 B00D add r27,r0
5377 2bb4 1124 clr r1
5378 2bb6 8A0E add r8,r26
5379 2bb8 9B1E adc r9,r27
5380 2bba 9092 0000 sts (StickNick)+1,r9
5381 2bbe 8092 0000 sts StickNick,r8
5382 2bc2 8091 0000 lds r24,ExternControl+4
5383 2bc6 9927 clr r25
5384 2bc8 87FD sbrc r24,7
5385 2bca 9095 com r25
5386 2bcc 829F mul r24,r18
5387 2bce F001 movw r30,r0
5388 2bd0 839F mul r24,r19
5389 2bd2 F00D add r31,r0
5390 2bd4 929F mul r25,r18
5391 2bd6 F00D add r31,r0
5392 2bd8 1124 clr r1
5393 2bda 0E0F add r16,r30
5394 2bdc 1F1F adc r17,r31
5395 2bde 1093 0000 sts (StickRoll)+1,r17
5396 2be2 0093 0000 sts StickRoll,r16
5397 2be6 8091 0000 lds r24,ExternControl+5
5398 2bea 282F mov r18,r24
5399 2bec 3327 clr r19
5400 2bee 27FD sbrc r18,7
5401 2bf0 3095 com r19
5402 2bf2 8091 0000 lds r24,StickGier
5403 2bf6 9091 0000 lds r25,(StickGier)+1
5404 2bfa 820F add r24,r18
5405 2bfc 931F adc r25,r19
5406 2bfe 9093 0000 sts (StickGier)+1,r25
5407 2c02 8093 0000 sts StickGier,r24
5408 2c06 8091 0000 lds r24,ExternControl+7
5409 2c0a 282F mov r18,r24
5410 2c0c 3327 clr r19
5411 2c0e 27FD sbrc r18,7
5412 2c10 3095 com r19
5413 2c12 8091 0000 lds r24,EE_Parameter+18
5414 2c16 9927 clr r25
5415 2c18 289F mul r18,r24
5416 2c1a 8001 movw r16,r0
5417 2c1c 299F mul r18,r25
5418 2c1e 100D add r17,r0
5419 2c20 389F mul r19,r24
5420 2c22 100D add r17,r0
5421 2c24 1124 clr r1
5422 2c26 1093 0000 sts (ExternHoehenValue)+1,r17
5423 2c2a 0093 0000 sts ExternHoehenValue,r16
5424 2c2e 8091 0000 lds r24,ExternControl+6
5425 2c32 9927 clr r25
5426 2c34 8E15 cp r24,r14
5427 2c36 9F05 cpc r25,r15
5428 2c38 04F4 brge .L463
5429 2c3a 9093 0000 sts (StickGas)+1,r25
5430 2c3e 8093 0000 sts StickGas,r24
5431 .L463:
5432 2c42 8091 0000 lds r24,StickGas
5433 2c46 9091 0000 lds r25,(StickGas)+1
5434 2c4a 97FF sbrs r25,7
5435 2c4c 00C0 rjmp .L465
5436 2c4e 1092 0000 sts (StickGas)+1,__zero_reg__
5437 2c52 1092 0000 sts StickGas,__zero_reg__
5438 .L465:
5439 2c56 8091 0000 lds r24,Parameter_GlobalConfig
5440 2c5a 82FF sbrs r24,2
5441 2c5c 00C0 rjmp .L466
5442 2c5e 1092 0000 sts IntegralFaktor,__zero_reg__
5443 .L466:
5444 2c62 4091 0000 lds r20,StickNick
5445 2c66 5091 0000 lds r21,(StickNick)+1
5446 2c6a CA01 movw r24,r20
5447 2c6c 57FD sbrc r21,7
5448 2c6e 0396 adiw r24,3
5449 .L468:
5450 2c70 9C01 movw r18,r24
5451 2c72 3595 asr r19
5452 2c74 2795 ror r18
5453 2c76 3595 asr r19
5454 2c78 2795 ror r18
5455 2c7a 37FF sbrs r19,7
5456 2c7c 00C0 rjmp .L469
5457 2c7e 3095 com r19
5458 2c80 2195 neg r18
5459 2c82 3F4F sbci r19,lo8(-1)
5460 .L469:
5461 2c84 8091 0000 lds r24,MaxStickNick
5462 2c88 9091 0000 lds r25,(MaxStickNick)+1
5463 2c8c 8217 cp r24,r18
5464 2c8e 9307 cpc r25,r19
5465 2c90 04F4 brge .L467
5466 2c92 CA01 movw r24,r20
5467 2c94 57FF sbrs r21,7
5468 2c96 00C0 rjmp .L470
5469 2c98 9095 com r25
5470 2c9a 8195 neg r24
5471 2c9c 9F4F sbci r25,lo8(-1)
5472 .L470:
5473 2c9e 97FD sbrc r25,7
5474 2ca0 0396 adiw r24,3
5475 .L471:
5476 2ca2 9595 asr r25
5477 2ca4 8795 ror r24
5478 2ca6 9595 asr r25
5479 2ca8 8795 ror r24
5480 2caa 9093 0000 sts (MaxStickNick)+1,r25
5481 2cae 8093 0000 sts MaxStickNick,r24
5482 2cb2 8536 cpi r24,101
5483 2cb4 9105 cpc r25,__zero_reg__
5484 2cb6 04F0 brlt .L473
5485 2cb8 84E6 ldi r24,lo8(100)
5486 2cba 90E0 ldi r25,hi8(100)
5487 2cbc 00C0 rjmp .L898
5488 .L467:
5489 2cbe 0197 sbiw r24,1
5490 .L898:
5491 2cc0 9093 0000 sts (MaxStickNick)+1,r25
5492 2cc4 8093 0000 sts MaxStickNick,r24
5493 .L473:
5494 2cc8 4091 0000 lds r20,StickRoll
5495 2ccc 5091 0000 lds r21,(StickRoll)+1
5496 2cd0 CA01 movw r24,r20
5497 2cd2 57FD sbrc r21,7
5498 2cd4 0396 adiw r24,3
5499 .L475:
5500 2cd6 9C01 movw r18,r24
5501 2cd8 3595 asr r19
5502 2cda 2795 ror r18
5503 2cdc 3595 asr r19
5504 2cde 2795 ror r18
5505 2ce0 37FF sbrs r19,7
5506 2ce2 00C0 rjmp .L476
5507 2ce4 3095 com r19
5508 2ce6 2195 neg r18
5509 2ce8 3F4F sbci r19,lo8(-1)
5510 .L476:
5511 2cea 8091 0000 lds r24,MaxStickRoll
5512 2cee 9091 0000 lds r25,(MaxStickRoll)+1
5513 2cf2 8217 cp r24,r18
5514 2cf4 9307 cpc r25,r19
5515 2cf6 04F4 brge .L474
5516 2cf8 CA01 movw r24,r20
5517 2cfa 57FF sbrs r21,7
5518 2cfc 00C0 rjmp .L477
5519 2cfe 9095 com r25
5520 2d00 8195 neg r24
5521 2d02 9F4F sbci r25,lo8(-1)
5522 .L477:
5523 2d04 97FD sbrc r25,7
5524 2d06 0396 adiw r24,3
5525 .L478:
5526 2d08 9595 asr r25
5527 2d0a 8795 ror r24
5528 2d0c 9595 asr r25
5529 2d0e 8795 ror r24
5530 2d10 9093 0000 sts (MaxStickRoll)+1,r25
5531 2d14 8093 0000 sts MaxStickRoll,r24
5532 2d18 8536 cpi r24,101
5533 2d1a 9105 cpc r25,__zero_reg__
5534 2d1c 04F0 brlt .L480
5535 2d1e 84E6 ldi r24,lo8(100)
5536 2d20 90E0 ldi r25,hi8(100)
5537 2d22 00C0 rjmp .L899
5538 .L474:
5539 2d24 0197 sbiw r24,1
5540 .L899:
5541 2d26 9093 0000 sts (MaxStickRoll)+1,r25
5542 2d2a 8093 0000 sts MaxStickRoll,r24
5543 .L480:
5544 2d2e 8091 0000 lds r24,FC_StatusFlags
5545 2d32 84FF sbrs r24,4
5546 2d34 00C0 rjmp .L481
5547 2d36 1092 0000 sts (MaxStickNick)+1,__zero_reg__
5548 2d3a 1092 0000 sts MaxStickNick,__zero_reg__
5549 2d3e 1092 0000 sts (MaxStickRoll)+1,__zero_reg__
5550 2d42 1092 0000 sts MaxStickRoll,__zero_reg__
5551 .L481:
5552 2d46 ED2D mov r30,r13
5553 2d48 FF27 clr r31
5554 2d4a EE0F add r30,r30
5555 2d4c FF1F adc r31,r31
5556 2d4e E050 subi r30,lo8(-(PPM_in))
5557 2d50 F040 sbci r31,hi8(-(PPM_in))
5558 2d52 4091 0000 lds r20,EE_Parameter+60
5559 2d56 242F mov r18,r20
5560 2d58 3327 clr r19
5561 2d5a 8081 ld r24,Z
5562 2d5c 9181 ldd r25,Z+1
5563 2d5e 2817 cp r18,r24
5564 2d60 3907 cpc r19,r25
5565 2d62 04F4 brge .L482
5566 2d64 8091 0000 lds r24,EE_Parameter+108
5567 2d68 82FF sbrs r24,2
5568 2d6a 00C0 rjmp .L482
5569 2d6c 81E0 ldi r24,lo8(1)
5570 2d6e 8093 0000 sts Looping_Links,r24
5571 2d72 00C0 rjmp .L483
5572 .L482:
5573 2d74 ED2D mov r30,r13
5574 2d76 FF27 clr r31
5575 2d78 EE0F add r30,r30
5576 2d7a FF1F adc r31,r31
5577 2d7c E050 subi r30,lo8(-(PPM_in))
5578 2d7e F040 sbci r31,hi8(-(PPM_in))
5579 2d80 842F mov r24,r20
5580 2d82 9927 clr r25
5581 2d84 2091 0000 lds r18,EE_Parameter+61
5582 2d88 821B sub r24,r18
5583 2d8a 9109 sbc r25,__zero_reg__
5584 2d8c 2081 ld r18,Z
5585 2d8e 3181 ldd r19,Z+1
5586 2d90 2817 cp r18,r24
5587 2d92 3907 cpc r19,r25
5588 2d94 04F4 brge .L483
5589 2d96 1092 0000 sts Looping_Links,__zero_reg__
5590 .L483:
5591 2d9a 4091 0000 lds r20,EE_Parameter+2
5592 2d9e E42F mov r30,r20
5593 2da0 FF27 clr r31
5594 2da2 EE0F add r30,r30
5595 2da4 FF1F adc r31,r31
5596 2da6 E050 subi r30,lo8(-(PPM_in))
5597 2da8 F040 sbci r31,hi8(-(PPM_in))
5598 2daa 5091 0000 lds r21,EE_Parameter+60
5599 2dae 852F mov r24,r21
5600 2db0 9927 clr r25
5601 2db2 2227 clr r18
5602 2db4 3327 clr r19
5603 2db6 281B sub r18,r24
5604 2db8 390B sbc r19,r25
5605 2dba 8081 ld r24,Z
5606 2dbc 9181 ldd r25,Z+1
5607 2dbe 8217 cp r24,r18
5608 2dc0 9307 cpc r25,r19
5609 2dc2 04F4 brge .L485
5610 2dc4 8091 0000 lds r24,EE_Parameter+108
5611 2dc8 83FF sbrs r24,3
5612 2dca 00C0 rjmp .L485
5613 2dcc 81E0 ldi r24,lo8(1)
5614 2dce 8093 0000 sts Looping_Rechts,r24
5615 2dd2 00C0 rjmp .L486
5616 .L485:
5617 2dd4 8091 0000 lds r24,Looping_Rechts
5618 2dd8 8823 tst r24
5619 2dda 01F0 breq .L486
5620 2ddc E42F mov r30,r20
5621 2dde FF27 clr r31
5622 2de0 EE0F add r30,r30
5623 2de2 FF1F adc r31,r31
5624 2de4 E050 subi r30,lo8(-(PPM_in))
5625 2de6 F040 sbci r31,hi8(-(PPM_in))
5626 2de8 8091 0000 lds r24,EE_Parameter+61
5627 2dec 9927 clr r25
5628 2dee 851B sub r24,r21
5629 2df0 9109 sbc r25,__zero_reg__
5630 2df2 2081 ld r18,Z
5631 2df4 3181 ldd r19,Z+1
5632 2df6 8217 cp r24,r18
5633 2df8 9307 cpc r25,r19
5634 2dfa 04F4 brge .L486
5635 2dfc 1092 0000 sts Looping_Rechts,__zero_reg__
5636 .L486:
5637 2e00 EC2D mov r30,r12
5638 2e02 FF27 clr r31
5639 2e04 EE0F add r30,r30
5640 2e06 FF1F adc r31,r31
5641 2e08 E050 subi r30,lo8(-(PPM_in))
5642 2e0a F040 sbci r31,hi8(-(PPM_in))
5643 2e0c 4091 0000 lds r20,EE_Parameter+60
5644 2e10 242F mov r18,r20
5645 2e12 3327 clr r19
5646 2e14 8081 ld r24,Z
5647 2e16 9181 ldd r25,Z+1
5648 2e18 2817 cp r18,r24
5649 2e1a 3907 cpc r19,r25
5650 2e1c 04F4 brge .L489
5651 2e1e 8091 0000 lds r24,EE_Parameter+108
5652 2e22 80FF sbrs r24,0
5653 2e24 00C0 rjmp .L489
5654 2e26 81E0 ldi r24,lo8(1)
5655 2e28 8093 0000 sts Looping_Oben,r24
5656 2e2c 00C0 rjmp .L490
5657 .L489:
5658 2e2e 8091 0000 lds r24,Looping_Oben
5659 2e32 8823 tst r24
5660 2e34 01F0 breq .L490
5661 2e36 EC2D mov r30,r12
5662 2e38 FF27 clr r31
5663 2e3a EE0F add r30,r30
5664 2e3c FF1F adc r31,r31
5665 2e3e E050 subi r30,lo8(-(PPM_in))
5666 2e40 F040 sbci r31,hi8(-(PPM_in))
5667 2e42 842F mov r24,r20
5668 2e44 9927 clr r25
5669 2e46 2091 0000 lds r18,EE_Parameter+61
5670 2e4a 821B sub r24,r18
5671 2e4c 9109 sbc r25,__zero_reg__
5672 2e4e 2081 ld r18,Z
5673 2e50 3181 ldd r19,Z+1
5674 2e52 2817 cp r18,r24
5675 2e54 3907 cpc r19,r25
5676 2e56 04F4 brge .L490
5677 2e58 1092 0000 sts Looping_Oben,__zero_reg__
5678 .L490:
5679 2e5c 4091 0000 lds r20,EE_Parameter+1
5680 2e60 E42F mov r30,r20
5681 2e62 FF27 clr r31
5682 2e64 EE0F add r30,r30
5683 2e66 FF1F adc r31,r31
5684 2e68 E050 subi r30,lo8(-(PPM_in))
5685 2e6a F040 sbci r31,hi8(-(PPM_in))
5686 2e6c 5091 0000 lds r21,EE_Parameter+60
5687 2e70 852F mov r24,r21
5688 2e72 9927 clr r25
5689 2e74 2227 clr r18
5690 2e76 3327 clr r19
5691 2e78 281B sub r18,r24
5692 2e7a 390B sbc r19,r25
5693 2e7c 8081 ld r24,Z
5694 2e7e 9181 ldd r25,Z+1
5695 2e80 8217 cp r24,r18
5696 2e82 9307 cpc r25,r19
5697 2e84 04F4 brge .L493
5698 2e86 8091 0000 lds r24,EE_Parameter+108
5699 2e8a 81FF sbrs r24,1
5700 2e8c 00C0 rjmp .L493
5701 2e8e 81E0 ldi r24,lo8(1)
5702 2e90 8093 0000 sts Looping_Unten,r24
5703 2e94 00C0 rjmp .L494
5704 .L493:
5705 2e96 8091 0000 lds r24,Looping_Unten
5706 2e9a 8823 tst r24
5707 2e9c 01F0 breq .L494
5708 2e9e E42F mov r30,r20
5709 2ea0 FF27 clr r31
5710 2ea2 EE0F add r30,r30
5711 2ea4 FF1F adc r31,r31
5712 2ea6 E050 subi r30,lo8(-(PPM_in))
5713 2ea8 F040 sbci r31,hi8(-(PPM_in))
5714 2eaa 8091 0000 lds r24,EE_Parameter+61
5715 2eae 9927 clr r25
5716 2eb0 851B sub r24,r21
5717 2eb2 9109 sbc r25,__zero_reg__
5718 2eb4 2081 ld r18,Z
5719 2eb6 3181 ldd r19,Z+1
5720 2eb8 8217 cp r24,r18
5721 2eba 9307 cpc r25,r19
5722 2ebc 04F4 brge .L494
5723 2ebe 1092 0000 sts Looping_Unten,__zero_reg__
5724 .L494:
5725 2ec2 8091 0000 lds r24,Looping_Links
5726 2ec6 8823 tst r24
5727 2ec8 01F4 brne .L498
5728 2eca 8091 0000 lds r24,Looping_Rechts
5729 2ece 8111 cpse r24,__zero_reg__
5730 .L498:
5731 2ed0 81E0 ldi r24,lo8(1)
5732 .L497:
5733 2ed2 8093 0000 sts Looping_Roll,r24
5734 2ed6 8091 0000 lds r24,Looping_Oben
5735 2eda 8823 tst r24
5736 2edc 01F4 brne .L501
5737 2ede 8091 0000 lds r24,Looping_Unten
5738 2ee2 8823 tst r24
5739 2ee4 01F0 breq .L500
5740 .L501:
5741 2ee6 81E0 ldi r24,lo8(1)
5742 2ee8 8093 0000 sts Looping_Nick,r24
5743 2eec 1092 0000 sts Looping_Roll,__zero_reg__
5744 2ef0 1092 0000 sts Looping_Links,__zero_reg__
5745 2ef4 1092 0000 sts Looping_Rechts,__zero_reg__
5746 2ef8 00C0 rjmp .L442
5747 .L500:
5748 2efa 8093 0000 sts Looping_Nick,r24
5749 .L442:
5750 2efe 8091 0000 lds r24,Looping_Roll
5751 2f02 8823 tst r24
5752 2f04 01F4 brne .L504
5753 2f06 8091 0000 lds r24,Looping_Nick
5754 2f0a 8823 tst r24
5755 2f0c 01F0 breq .L503
5756 .L504:
5757 2f0e 8091 0000 lds r24,EE_Parameter+59
5758 2f12 9927 clr r25
5759 2f14 2981 ldd r18,Y+1
5760 2f16 3A81 ldd r19,Y+2
5761 2f18 8217 cp r24,r18
5762 2f1a 9307 cpc r25,r19
5763 2f1c 04F4 brge .L505
5764 2f1e 9A83 std Y+2,r25
5765 2f20 8983 std Y+1,r24
5766 .L505:
5767 2f22 81E0 ldi r24,lo8(1)
5768 2f24 8093 0000 sts TrichterFlug,r24
5769 .L503:
5770 2f28 8091 0000 lds r24,FC_StatusFlags2
5771 2f2c 9927 clr r25
5772 2f2e 9C01 movw r18,r24
5773 2f30 2470 andi r18,lo8(4)
5774 2f32 3070 andi r19,hi8(4)
5775 2f34 82FF sbrs r24,2
5776 2f36 00C0 rjmp .L506
5777 2f38 8091 0000 lds r24,GPS_Nick
5778 2f3c 9091 0000 lds r25,(GPS_Nick)+1
5779 2f40 9095 com r25
5780 2f42 8195 neg r24
5781 2f44 9F4F sbci r25,lo8(-1)
5782 2f46 9093 0000 sts (StickNick)+1,r25
5783 2f4a 8093 0000 sts StickNick,r24
5784 2f4e 8091 0000 lds r24,GPS_Roll
5785 2f52 9091 0000 lds r25,(GPS_Roll)+1
5786 2f56 9095 com r25
5787 2f58 8195 neg r24
5788 2f5a 9F4F sbci r25,lo8(-1)
5789 2f5c 9093 0000 sts (StickRoll)+1,r25
5790 2f60 8093 0000 sts StickRoll,r24
5791 2f64 8091 0000 lds r24,StickGasHover
5792 2f68 9091 0000 lds r25,(StickGasHover)+1
5793 2f6c 9093 0000 sts (StickGas)+1,r25
5794 2f70 8093 0000 sts StickGas,r24
5795 2f74 8091 0000 lds r24,Parameter_GlobalConfig
5796 2f78 8B77 andi r24,lo8(123)
5797 2f7a 8B66 ori r24,lo8(107)
5798 2f7c 8093 0000 sts Parameter_GlobalConfig,r24
5799 2f80 8091 0000 lds r24,Parameter_ExtraConfig
5800 2f84 8C7B andi r24,lo8(-68)
5801 2f86 8093 0000 sts Parameter_ExtraConfig,r24
5802 2f8a 88EC ldi r24,lo8(-56)
5803 2f8c 8093 0000 sts Parameter_HoehenSchalter,r24
5804 2f90 00C0 rjmp .L507
5805 .L506:
5806 2f92 8091 0000 lds r24,FC_StatusFlags
5807 2f96 84FF sbrs r24,4
5808 2f98 00C0 rjmp .L507
5809 2f9a 3093 0000 sts (StickGier)+1,r19
5810 2f9e 2093 0000 sts StickGier,r18
5811 2fa2 3093 0000 sts (StickNick)+1,r19
5812 2fa6 2093 0000 sts StickNick,r18
5813 2faa 3093 0000 sts (StickRoll)+1,r19
5814 2fae 2093 0000 sts StickRoll,r18
5815 2fb2 9AE5 ldi r25,lo8(90)
5816 2fb4 9093 0000 sts GyroFaktor,r25
5817 2fb8 88E7 ldi r24,lo8(120)
5818 2fba 8093 0000 sts IntegralFaktor,r24
5819 2fbe 9093 0000 sts GyroFaktorGier,r25
5820 2fc2 8093 0000 sts IntegralFaktorGier,r24
5821 2fc6 1092 0000 sts Looping_Roll,__zero_reg__
5822 2fca 1092 0000 sts Looping_Nick,__zero_reg__
5823 .L507:
5824 2fce 8091 0000 lds r24,MittelIntegralNick
5825 2fd2 9091 0000 lds r25,(MittelIntegralNick)+1
5826 2fd6 A091 0000 lds r26,(MittelIntegralNick)+2
5827 2fda B091 0000 lds r27,(MittelIntegralNick)+3
5828 2fde 2091 0000 lds r18,IntegralNick
5829 2fe2 3091 0000 lds r19,(IntegralNick)+1
5830 2fe6 4091 0000 lds r20,(IntegralNick)+2
5831 2fea 5091 0000 lds r21,(IntegralNick)+3
5832 2fee 820F add r24,r18
5833 2ff0 931F adc r25,r19
5834 2ff2 A41F adc r26,r20
5835 2ff4 B51F adc r27,r21
5836 2ff6 8093 0000 sts MittelIntegralNick,r24
5837 2ffa 9093 0000 sts (MittelIntegralNick)+1,r25
5838 2ffe A093 0000 sts (MittelIntegralNick)+2,r26
5839 3002 B093 0000 sts (MittelIntegralNick)+3,r27
5840 3006 8091 0000 lds r24,MittelIntegralRoll
5841 300a 9091 0000 lds r25,(MittelIntegralRoll)+1
5842 300e A091 0000 lds r26,(MittelIntegralRoll)+2
5843 3012 B091 0000 lds r27,(MittelIntegralRoll)+3
5844 3016 E090 0000 lds r14,IntegralRoll
5845 301a F090 0000 lds r15,(IntegralRoll)+1
5846 301e 0091 0000 lds r16,(IntegralRoll)+2
5847 3022 1091 0000 lds r17,(IntegralRoll)+3
5848 3026 EB82 std Y+3,r14
5849 3028 FC82 std Y+4,r15
5850 302a 0D83 std Y+5,r16
5851 302c 1E83 std Y+6,r17
5852 302e 8E0D add r24,r14
5853 3030 9F1D adc r25,r15
5854 3032 A01F adc r26,r16
5855 3034 B11F adc r27,r17
5856 3036 8093 0000 sts MittelIntegralRoll,r24
5857 303a 9093 0000 sts (MittelIntegralRoll)+1,r25
5858 303e A093 0000 sts (MittelIntegralRoll)+2,r26
5859 3042 B093 0000 sts (MittelIntegralRoll)+3,r27
5860 3046 8091 0000 lds r24,MittelIntegralNick2
5861 304a 9091 0000 lds r25,(MittelIntegralNick2)+1
5862 304e A091 0000 lds r26,(MittelIntegralNick2)+2
5863 3052 B091 0000 lds r27,(MittelIntegralNick2)+3
5864 3056 E090 0000 lds r14,IntegralNick2
5865 305a F090 0000 lds r15,(IntegralNick2)+1
5866 305e 0091 0000 lds r16,(IntegralNick2)+2
5867 3062 1091 0000 lds r17,(IntegralNick2)+3
5868 3066 EF82 std Y+7,r14
5869 3068 F886 std Y+8,r15
5870 306a 0987 std Y+9,r16
5871 306c 1A87 std Y+10,r17
5872 306e 8E0D add r24,r14
5873 3070 9F1D adc r25,r15
5874 3072 A01F adc r26,r16
5875 3074 B11F adc r27,r17
5876 3076 8093 0000 sts MittelIntegralNick2,r24
5877 307a 9093 0000 sts (MittelIntegralNick2)+1,r25
5878 307e A093 0000 sts (MittelIntegralNick2)+2,r26
5879 3082 B093 0000 sts (MittelIntegralNick2)+3,r27
5880 3086 8091 0000 lds r24,MittelIntegralRoll2
5881 308a 9091 0000 lds r25,(MittelIntegralRoll2)+1
5882 308e A091 0000 lds r26,(MittelIntegralRoll2)+2
5883 3092 B091 0000 lds r27,(MittelIntegralRoll2)+3
5884 3096 E090 0000 lds r14,IntegralRoll2
5885 309a F090 0000 lds r15,(IntegralRoll2)+1
5886 309e 0091 0000 lds r16,(IntegralRoll2)+2
5887 30a2 1091 0000 lds r17,(IntegralRoll2)+3
5888 30a6 EB86 std Y+11,r14
5889 30a8 FC86 std Y+12,r15
5890 30aa 0D87 std Y+13,r16
5891 30ac 1E87 std Y+14,r17
5892 30ae 8E0D add r24,r14
5893 30b0 9F1D adc r25,r15
5894 30b2 A01F adc r26,r16
5895 30b4 B11F adc r27,r17
5896 30b6 8093 0000 sts MittelIntegralRoll2,r24
5897 30ba 9093 0000 sts (MittelIntegralRoll2)+1,r25
5898 30be A093 0000 sts (MittelIntegralRoll2)+2,r26
5899 30c2 B093 0000 sts (MittelIntegralRoll2)+3,r27
5900 30c6 F090 0000 lds r15,Looping_Nick
5901 30ca FF86 std Y+15,r15
5902 30cc FF20 tst r15
5903 30ce 01F4 brne .L510
5904 30d0 8091 0000 lds r24,Looping_Roll
5905 30d4 8823 tst r24
5906 30d6 01F4 brne .+2
5907 30d8 00C0 rjmp .L892
5908 .L510:
5909 30da 1092 0000 sts IntegralAccNick,__zero_reg__
5910 30de 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
5911 30e2 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
5912 30e6 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
5913 30ea 1092 0000 sts IntegralAccRoll,__zero_reg__
5914 30ee 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
5915 30f2 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
5916 30f6 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
5917 30fa 1092 0000 sts MittelIntegralNick,__zero_reg__
5918 30fe 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
5919 3102 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
5920 3106 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
5921 310a 1092 0000 sts MittelIntegralRoll,__zero_reg__
5922 310e 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
5923 3112 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
5924 3116 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
5925 311a 1092 0000 sts MittelIntegralNick2,__zero_reg__
5926 311e 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
5927 3122 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
5928 3126 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
5929 312a 1092 0000 sts MittelIntegralRoll2,__zero_reg__
5930 312e 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
5931 3132 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
5932 3136 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
5933 313a 8091 0000 lds r24,Mess_IntegralNick
5934 313e 9091 0000 lds r25,(Mess_IntegralNick)+1
5935 3142 A091 0000 lds r26,(Mess_IntegralNick)+2
5936 3146 B091 0000 lds r27,(Mess_IntegralNick)+3
5937 314a 8093 0000 sts Mess_IntegralNick2,r24
5938 314e 9093 0000 sts (Mess_IntegralNick2)+1,r25
5939 3152 A093 0000 sts (Mess_IntegralNick2)+2,r26
5940 3156 B093 0000 sts (Mess_IntegralNick2)+3,r27
5941 315a 8091 0000 lds r24,Mess_IntegralRoll
5942 315e 9091 0000 lds r25,(Mess_IntegralRoll)+1
5943 3162 A091 0000 lds r26,(Mess_IntegralRoll)+2
5944 3166 B091 0000 lds r27,(Mess_IntegralRoll)+3
5945 316a 8093 0000 sts Mess_IntegralRoll2,r24
5946 316e 9093 0000 sts (Mess_IntegralRoll2)+1,r25
5947 3172 A093 0000 sts (Mess_IntegralRoll2)+2,r26
5948 3176 B093 0000 sts (Mess_IntegralRoll2)+3,r27
5949 317a 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
5950 317e 1092 0000 sts ZaehlMessungen,__zero_reg__
5951 3182 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
5952 3186 1092 0000 sts LageKorrekturNick,__zero_reg__
5953 318a 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
5954 318e 1092 0000 sts LageKorrekturRoll,__zero_reg__
5955 3192 0F85 ldd r16,Y+15
5956 3194 0023 tst r16
5957 3196 01F0 breq .+2
5958 3198 00C0 rjmp .L511
5959 .L892:
5960 319a 8091 0000 lds r24,Looping_Roll
5961 319e 8823 tst r24
5962 31a0 01F0 breq .+2
5963 31a2 00C0 rjmp .L511
5964 31a4 8091 0000 lds r24,Aktuell_az
5965 31a8 9091 0000 lds r25,(Aktuell_az)+1
5966 31ac 8150 subi r24,lo8(513)
5967 31ae 9240 sbci r25,hi8(513)
5968 31b0 04F4 brge .L512
5969 31b2 8091 0000 lds r24,MotorenEin
5970 31b6 8823 tst r24
5971 31b8 01F4 brne .+2
5972 31ba 00C0 rjmp .L511
5973 .L512:
5974 31bc 9090 0000 lds r9,FromNaviCtrl_Value
5975 31c0 A090 0000 lds r10,EE_Parameter+28
5976 31c4 2090 0000 lds r2,Mittelwert_AccNick
5977 31c8 3090 0000 lds r3,(Mittelwert_AccNick)+1
5978 31cc 4090 0000 lds r4,Mittelwert_AccRoll
5979 31d0 5090 0000 lds r5,(Mittelwert_AccRoll)+1
5980 31d4 1914 cp __zero_reg__,r9
5981 31d6 04F0 brlt .+2
5982 31d8 00C0 rjmp .L513
5983 31da BB24 clr r11
5984 31dc CC24 clr r12
5985 31de DD24 clr r13
5986 31e0 CA01 movw r24,r20
5987 31e2 B901 movw r22,r18
5988 31e4 A601 movw r20,r12
5989 31e6 9501 movw r18,r10
5990 31e8 0E94 0000 call __divmodsi4
5991 31ec 7901 movw r14,r18
5992 31ee 8A01 movw r16,r20
5993 31f0 8091 0000 lds r24,FromNaviCtrl+9
5994 31f4 9091 0000 lds r25,(FromNaviCtrl+9)+1
5995 31f8 281A sub r2,r24
5996 31fa 390A sbc r3,r25
5997 31fc C101 movw r24,r2
5998 31fe AA27 clr r26
5999 3200 97FD sbrc r25,7
6000 3202 A095 com r26
6001 3204 BA2F mov r27,r26
6002 3206 E81A sub r14,r24
6003 3208 F90A sbc r15,r25
6004 320a 0A0B sbc r16,r26
6005 320c 1B0B sbc r17,r27
6006 320e 6B81 ldd r22,Y+3
6007 3210 7C81 ldd r23,Y+4
6008 3212 8D81 ldd r24,Y+5
6009 3214 9E81 ldd r25,Y+6
6010 3216 A601 movw r20,r12
6011 3218 9501 movw r18,r10
6012 321a 0E94 0000 call __divmodsi4
6013 321e 5901 movw r10,r18
6014 3220 6A01 movw r12,r20
6015 3222 8091 0000 lds r24,FromNaviCtrl+11
6016 3226 9091 0000 lds r25,(FromNaviCtrl+11)+1
6017 322a 481A sub r4,r24
6018 322c 590A sbc r5,r25
6019 322e C201 movw r24,r4
6020 3230 AA27 clr r26
6021 3232 97FD sbrc r25,7
6022 3234 A095 com r26
6023 3236 BA2F mov r27,r26
6024 3238 A81A sub r10,r24
6025 323a B90A sbc r11,r25
6026 323c CA0A sbc r12,r26
6027 323e DB0A sbc r13,r27
6028 3240 292C mov r2,r9
6029 3242 3324 clr r3
6030 3244 27FC sbrc r2,7
6031 3246 3094 com r3
6032 3248 432C mov r4,r3
6033 324a 532C mov r5,r3
6034 324c C801 movw r24,r16
6035 324e B701 movw r22,r14
6036 3250 A201 movw r20,r4
6037 3252 9101 movw r18,r2
6038 3254 0E94 0000 call __mulsi3
6039 3258 97FF sbrs r25,7
6040 325a 00C0 rjmp .L514
6041 325c 6150 subi r22,lo8(-(511))
6042 325e 7E4F sbci r23,hi8(-(511))
6043 3260 8F4F sbci r24,hlo8(-(511))
6044 3262 9F4F sbci r25,hhi8(-(511))
6045 .L514:
6046 3264 3B01 movw r6,r22
6047 3266 4C01 movw r8,r24
6048 3268 09E0 ldi r16,9
6049 326a 9594 1: asr r9
6050 326c 8794 ror r8
6051 326e 7794 ror r7
6052 3270 6794 ror r6
6053 3272 0A95 dec r16
6054 3274 01F4 brne 1b
6055 3276 C601 movw r24,r12
6056 3278 B501 movw r22,r10
6057 327a A201 movw r20,r4
6058 327c 9101 movw r18,r2
6059 327e 0E94 0000 call __mulsi3
6060 3282 97FF sbrs r25,7
6061 3284 00C0 rjmp .L515
6062 3286 6150 subi r22,lo8(-(511))
6063 3288 7E4F sbci r23,hi8(-(511))
6064 328a 8F4F sbci r24,hlo8(-(511))
6065 328c 9F4F sbci r25,hhi8(-(511))
6066 .L515:
6067 328e 5B01 movw r10,r22
6068 3290 6C01 movw r12,r24
6069 3292 19E0 ldi r17,9
6070 3294 D594 1: asr r13
6071 3296 C794 ror r12
6072 3298 B794 ror r11
6073 329a A794 ror r10
6074 329c 1A95 dec r17
6075 329e 01F4 brne 1b
6076 32a0 8091 0000 lds r24,MaxStickNick
6077 32a4 9091 0000 lds r25,(MaxStickNick)+1
6078 32a8 8134 cpi r24,65
6079 32aa 9105 cpc r25,__zero_reg__
6080 32ac 04F4 brge .L517
6081 32ae 8091 0000 lds r24,MaxStickRoll
6082 32b2 9091 0000 lds r25,(MaxStickRoll)+1
6083 32b6 8134 cpi r24,65
6084 32b8 9105 cpc r25,__zero_reg__
6085 32ba 04F0 brlt .L516
6086 .L517:
6087 32bc D401 movw r26,r8
6088 32be C301 movw r24,r6
6089 32c0 97FE sbrs r9,7
6090 32c2 00C0 rjmp .L518
6091 32c4 0196 adiw r24,1
6092 32c6 A11D adc r26,__zero_reg__
6093 32c8 B11D adc r27,__zero_reg__
6094 .L518:
6095 32ca 3C01 movw r6,r24
6096 32cc 4D01 movw r8,r26
6097 32ce 9594 asr r9
6098 32d0 8794 ror r8
6099 32d2 7794 ror r7
6100 32d4 6794 ror r6
6101 32d6 D601 movw r26,r12
6102 32d8 C501 movw r24,r10
6103 32da D7FE sbrs r13,7
6104 32dc 00C0 rjmp .L519
6105 32de 0196 adiw r24,1
6106 32e0 A11D adc r26,__zero_reg__
6107 32e2 B11D adc r27,__zero_reg__
6108 .L519:
6109 32e4 5C01 movw r10,r24
6110 32e6 6D01 movw r12,r26
6111 32e8 D594 asr r13
6112 32ea C794 ror r12
6113 32ec B794 ror r11
6114 32ee A794 ror r10
6115 .L516:
6116 32f0 8091 0000 lds r24,FromNaviCtrl_Value+2
6117 32f4 282F mov r18,r24
6118 32f6 3327 clr r19
6119 32f8 27FD sbrc r18,7
6120 32fa 3095 com r19
6121 32fc 432F mov r20,r19
6122 32fe 532F mov r21,r19
6123 3300 2615 cp r18,r6
6124 3302 3705 cpc r19,r7
6125 3304 4805 cpc r20,r8
6126 3306 5905 cpc r21,r9
6127 3308 04F4 brge .L520
6128 330a 3901 movw r6,r18
6129 330c 4A01 movw r8,r20
6130 .L520:
6131 330e 9927 clr r25
6132 3310 87FD sbrc r24,7
6133 3312 9095 com r25
6134 3314 9095 com r25
6135 3316 8195 neg r24
6136 3318 9F4F sbci r25,lo8(-1)
6137 331a AA27 clr r26
6138 331c 97FD sbrc r25,7
6139 331e A095 com r26
6140 3320 BA2F mov r27,r26
6141 3322 6816 cp r6,r24
6142 3324 7906 cpc r7,r25
6143 3326 8A06 cpc r8,r26
6144 3328 9B06 cpc r9,r27
6145 332a 04F4 brge .L521
6146 332c 3C01 movw r6,r24
6147 332e 4D01 movw r8,r26
6148 .L521:
6149 3330 2A15 cp r18,r10
6150 3332 3B05 cpc r19,r11
6151 3334 4C05 cpc r20,r12
6152 3336 5D05 cpc r21,r13
6153 3338 04F4 brge .L522
6154 333a 5901 movw r10,r18
6155 333c 6A01 movw r12,r20
6156 .L522:
6157 333e A816 cp r10,r24
6158 3340 B906 cpc r11,r25
6159 3342 CA06 cpc r12,r26
6160 3344 DB06 cpc r13,r27
6161 3346 04F0 brlt .+2
6162 3348 00C0 rjmp .L524
6163 334a 5C01 movw r10,r24
6164 334c 6D01 movw r12,r26
6165 334e 00C0 rjmp .L524
6166 .L513:
6167 3350 EA2C mov r14,r10
6168 3352 FF24 clr r15
6169 3354 0027 clr r16
6170 3356 1127 clr r17
6171 3358 CA01 movw r24,r20
6172 335a B901 movw r22,r18
6173 335c A801 movw r20,r16
6174 335e 9701 movw r18,r14
6175 3360 0E94 0000 call __divmodsi4
6176 3364 3901 movw r6,r18
6177 3366 4A01 movw r8,r20
6178 3368 C101 movw r24,r2
6179 336a AA27 clr r26
6180 336c 97FD sbrc r25,7
6181 336e A095 com r26
6182 3370 BA2F mov r27,r26
6183 3372 681A sub r6,r24
6184 3374 790A sbc r7,r25
6185 3376 8A0A sbc r8,r26
6186 3378 9B0A sbc r9,r27
6187 337a 6B81 ldd r22,Y+3
6188 337c 7C81 ldd r23,Y+4
6189 337e 8D81 ldd r24,Y+5
6190 3380 9E81 ldd r25,Y+6
6191 3382 A801 movw r20,r16
6192 3384 9701 movw r18,r14
6193 3386 0E94 0000 call __divmodsi4
6194 338a 5901 movw r10,r18
6195 338c 6A01 movw r12,r20
6196 338e C201 movw r24,r4
6197 3390 AA27 clr r26
6198 3392 97FD sbrc r25,7
6199 3394 A095 com r26
6200 3396 BA2F mov r27,r26
6201 3398 A81A sub r10,r24
6202 339a B90A sbc r11,r25
6203 339c CA0A sbc r12,r26
6204 339e DB0A sbc r13,r27
6205 33a0 D401 movw r26,r8
6206 33a2 C301 movw r24,r6
6207 33a4 97FE sbrs r9,7
6208 33a6 00C0 rjmp .L525
6209 33a8 0F96 adiw r24,15
6210 33aa A11D adc r26,__zero_reg__
6211 33ac B11D adc r27,__zero_reg__
6212 .L525:
6213 33ae 3C01 movw r6,r24
6214 33b0 4D01 movw r8,r26
6215 33b2 F4E0 ldi r31,4
6216 33b4 9594 1: asr r9
6217 33b6 8794 ror r8
6218 33b8 7794 ror r7
6219 33ba 6794 ror r6
6220 33bc FA95 dec r31
6221 33be 01F4 brne 1b
6222 33c0 D601 movw r26,r12
6223 33c2 C501 movw r24,r10
6224 33c4 D7FE sbrs r13,7
6225 33c6 00C0 rjmp .L526
6226 33c8 0F96 adiw r24,15
6227 33ca A11D adc r26,__zero_reg__
6228 33cc B11D adc r27,__zero_reg__
6229 .L526:
6230 33ce 5C01 movw r10,r24
6231 33d0 6D01 movw r12,r26
6232 33d2 E4E0 ldi r30,4
6233 33d4 D594 1: asr r13
6234 33d6 C794 ror r12
6235 33d8 B794 ror r11
6236 33da A794 ror r10
6237 33dc EA95 dec r30
6238 33de 01F4 brne 1b
6239 33e0 8091 0000 lds r24,MaxStickNick
6240 33e4 9091 0000 lds r25,(MaxStickNick)+1
6241 33e8 8134 cpi r24,65
6242 33ea 9105 cpc r25,__zero_reg__
6243 33ec 04F4 brge .L528
6244 33ee 8091 0000 lds r24,MaxStickRoll
6245 33f2 9091 0000 lds r25,(MaxStickRoll)+1
6246 33f6 8134 cpi r24,65
6247 33f8 9105 cpc r25,__zero_reg__
6248 33fa 04F0 brlt .L527
6249 .L528:
6250 33fc C401 movw r24,r8
6251 33fe B301 movw r22,r6
6252 3400 23E0 ldi r18,lo8(3)
6253 3402 30E0 ldi r19,hi8(3)
6254 3404 40E0 ldi r20,hlo8(3)
6255 3406 50E0 ldi r21,hhi8(3)
6256 3408 0E94 0000 call __divmodsi4
6257 340c 3901 movw r6,r18
6258 340e 4A01 movw r8,r20
6259 3410 C601 movw r24,r12
6260 3412 B501 movw r22,r10
6261 3414 23E0 ldi r18,lo8(3)
6262 3416 30E0 ldi r19,hi8(3)
6263 3418 40E0 ldi r20,hlo8(3)
6264 341a 50E0 ldi r21,hhi8(3)
6265 341c 0E94 0000 call __divmodsi4
6266 3420 5901 movw r10,r18
6267 3422 6A01 movw r12,r20
6268 .L527:
6269 3424 8091 0000 lds r24,EE_Parameter+4
6270 3428 E82F mov r30,r24
6271 342a FF27 clr r31
6272 342c EE0F add r30,r30
6273 342e FF1F adc r31,r31
6274 3430 E050 subi r30,lo8(-(PPM_in))
6275 3432 F040 sbci r31,hi8(-(PPM_in))
6276 3434 8081 ld r24,Z
6277 3436 9181 ldd r25,Z+1
6278 3438 0190 ld __tmp_reg__,Z+
6279 343a F081 ld r31,Z
6280 343c E02D mov r30,__tmp_reg__
6281 343e F7FF sbrs r31,7
6282 3440 00C0 rjmp .L530
6283 3442 F095 com r31
6284 3444 E195 neg r30
6285 3446 FF4F sbci r31,lo8(-1)
6286 .L530:
6287 3448 7A97 sbiw r30,26
6288 344a 04F0 brlt .L529
6289 344c C401 movw r24,r8
6290 344e B301 movw r22,r6
6291 3450 23E0 ldi r18,lo8(3)
6292 3452 30E0 ldi r19,hi8(3)
6293 3454 40E0 ldi r20,hlo8(3)
6294 3456 50E0 ldi r21,hhi8(3)
6295 3458 0E94 0000 call __divmodsi4
6296 345c 3901 movw r6,r18
6297 345e 4A01 movw r8,r20
6298 3460 C601 movw r24,r12
6299 3462 B501 movw r22,r10
6300 3464 23E0 ldi r18,lo8(3)
6301 3466 30E0 ldi r19,hi8(3)
6302 3468 40E0 ldi r20,hlo8(3)
6303 346a 50E0 ldi r21,hhi8(3)
6304 346c 0E94 0000 call __divmodsi4
6305 3470 5901 movw r10,r18
6306 3472 6A01 movw r12,r20
6307 .L529:
6308 3474 89E1 ldi r24,lo8(25)
6309 3476 8093 0000 sts KompassFusion,r24
6310 347a 21E2 ldi r18,lo8(33)
6311 347c 6216 cp r6,r18
6312 347e 7104 cpc r7,__zero_reg__
6313 3480 8104 cpc r8,__zero_reg__
6314 3482 9104 cpc r9,__zero_reg__
6315 3484 04F0 brlt .L531
6316 3486 70E2 ldi r23,lo8(32)
6317 3488 672E mov r6,r23
6318 348a 712C mov r7,__zero_reg__
6319 348c 812C mov r8,__zero_reg__
6320 348e 912C mov r9,__zero_reg__
6321 .L531:
6322 3490 30EE ldi r19,lo8(-32)
6323 3492 6316 cp r6,r19
6324 3494 3FEF ldi r19,hi8(-32)
6325 3496 7306 cpc r7,r19
6326 3498 3FEF ldi r19,hlo8(-32)
6327 349a 8306 cpc r8,r19
6328 349c 3FEF ldi r19,hhi8(-32)
6329 349e 9306 cpc r9,r19
6330 34a0 04F4 brge .L532
6331 34a2 60EE ldi r22,lo8(-32)
6332 34a4 662E mov r6,r22
6333 34a6 6FEF ldi r22,hi8(-32)
6334 34a8 762E mov r7,r22
6335 34aa 6FEF ldi r22,hlo8(-32)
6336 34ac 862E mov r8,r22
6337 34ae 6FEF ldi r22,hhi8(-32)
6338 34b0 962E mov r9,r22
6339 .L532:
6340 34b2 41E2 ldi r20,lo8(33)
6341 34b4 A416 cp r10,r20
6342 34b6 B104 cpc r11,__zero_reg__
6343 34b8 C104 cpc r12,__zero_reg__
6344 34ba D104 cpc r13,__zero_reg__
6345 34bc 04F0 brlt .L533
6346 34be 50E2 ldi r21,lo8(32)
6347 34c0 A52E mov r10,r21
6348 34c2 B12C mov r11,__zero_reg__
6349 34c4 C12C mov r12,__zero_reg__
6350 34c6 D12C mov r13,__zero_reg__
6351 .L533:
6352 34c8 50EE ldi r21,lo8(-32)
6353 34ca A516 cp r10,r21
6354 34cc 5FEF ldi r21,hi8(-32)
6355 34ce B506 cpc r11,r21
6356 34d0 5FEF ldi r21,hlo8(-32)
6357 34d2 C506 cpc r12,r21
6358 34d4 5FEF ldi r21,hhi8(-32)
6359 34d6 D506 cpc r13,r21
6360 34d8 04F4 brge .L524
6361 34da 40EE ldi r20,lo8(-32)
6362 34dc A42E mov r10,r20
6363 34de 4FEF ldi r20,hi8(-32)
6364 34e0 B42E mov r11,r20
6365 34e2 4FEF ldi r20,hlo8(-32)
6366 34e4 C42E mov r12,r20
6367 34e6 4FEF ldi r20,hhi8(-32)
6368 34e8 D42E mov r13,r20
6369 .L524:
6370 34ea 8091 0000 lds r24,Mess_IntegralNick
6371 34ee 9091 0000 lds r25,(Mess_IntegralNick)+1
6372 34f2 A091 0000 lds r26,(Mess_IntegralNick)+2
6373 34f6 B091 0000 lds r27,(Mess_IntegralNick)+3
6374 34fa 8619 sub r24,r6
6375 34fc 9709 sbc r25,r7
6376 34fe A809 sbc r26,r8
6377 3500 B909 sbc r27,r9
6378 3502 8093 0000 sts Mess_IntegralNick,r24
6379 3506 9093 0000 sts (Mess_IntegralNick)+1,r25
6380 350a A093 0000 sts (Mess_IntegralNick)+2,r26
6381 350e B093 0000 sts (Mess_IntegralNick)+3,r27
6382 3512 8091 0000 lds r24,Mess_IntegralRoll
6383 3516 9091 0000 lds r25,(Mess_IntegralRoll)+1
6384 351a A091 0000 lds r26,(Mess_IntegralRoll)+2
6385 351e B091 0000 lds r27,(Mess_IntegralRoll)+3
6386 3522 8A19 sub r24,r10
6387 3524 9B09 sbc r25,r11
6388 3526 AC09 sbc r26,r12
6389 3528 BD09 sbc r27,r13
6390 352a 8093 0000 sts Mess_IntegralRoll,r24
6391 352e 9093 0000 sts (Mess_IntegralRoll)+1,r25
6392 3532 A093 0000 sts (Mess_IntegralRoll)+2,r26
6393 3536 B093 0000 sts (Mess_IntegralRoll)+3,r27
6394 .L511:
6395 353a 8091 0000 lds r24,ZaehlMessungen
6396 353e 9091 0000 lds r25,(ZaehlMessungen)+1
6397 3542 8F3F cpi r24,255
6398 3544 9105 cpc r25,__zero_reg__
6399 3546 01F0 breq .+2
6400 3548 00F4 brsh .+2
6401 354a 00C0 rjmp .L535
6402 354c 6F85 ldd r22,Y+15
6403 354e 6623 tst r22
6404 3550 01F0 breq .+2
6405 3552 00C0 rjmp .L536
6406 3554 8091 0000 lds r24,Looping_Roll
6407 3558 8823 tst r24
6408 355a 01F0 breq .+2
6409 355c 00C0 rjmp .L536
6410 355e 8091 0000 lds r24,TrichterFlug
6411 3562 8823 tst r24
6412 3564 01F0 breq .+2
6413 3566 00C0 rjmp .L536
6414 3568 7091 0000 lds r23,EE_Parameter+68
6415 356c 788B std Y+16,r23
6416 356e 7723 tst r23
6417 3570 01F4 brne .+2
6418 3572 00C0 rjmp .L536
6419 3574 8091 0000 lds r24,MittelIntegralNick
6420 3578 9091 0000 lds r25,(MittelIntegralNick)+1
6421 357c A091 0000 lds r26,(MittelIntegralNick)+2
6422 3580 B091 0000 lds r27,(MittelIntegralNick)+3
6423 3584 B7FF sbrs r27,7
6424 3586 00C0 rjmp .L537
6425 3588 8150 subi r24,lo8(-(255))
6426 358a 9F4F sbci r25,hi8(-(255))
6427 358c AF4F sbci r26,hlo8(-(255))
6428 358e BF4F sbci r27,hhi8(-(255))
6429 .L537:
6430 3590 E92E mov r14,r25
6431 3592 FA2E mov r15,r26
6432 3594 0B2F mov r16,r27
6433 3596 1127 clr r17
6434 3598 07FD sbrc r16,7
6435 359a 1A95 dec r17
6436 359c E092 0000 sts MittelIntegralNick,r14
6437 35a0 F092 0000 sts (MittelIntegralNick)+1,r15
6438 35a4 0093 0000 sts (MittelIntegralNick)+2,r16
6439 35a8 1093 0000 sts (MittelIntegralNick)+3,r17
6440 35ac 8091 0000 lds r24,MittelIntegralRoll
6441 35b0 9091 0000 lds r25,(MittelIntegralRoll)+1
6442 35b4 A091 0000 lds r26,(MittelIntegralRoll)+2
6443 35b8 B091 0000 lds r27,(MittelIntegralRoll)+3
6444 35bc B7FF sbrs r27,7
6445 35be 00C0 rjmp .L538
6446 35c0 8150 subi r24,lo8(-(255))
6447 35c2 9F4F sbci r25,hi8(-(255))
6448 35c4 AF4F sbci r26,hlo8(-(255))
6449 35c6 BF4F sbci r27,hhi8(-(255))
6450 .L538:
6451 35c8 892F mov r24,r25
6452 35ca 9A2F mov r25,r26
6453 35cc AB2F mov r26,r27
6454 35ce BB27 clr r27
6455 35d0 A7FD sbrc r26,7
6456 35d2 BA95 dec r27
6457 35d4 898B std Y+17,r24
6458 35d6 9A8B std Y+18,r25
6459 35d8 AB8B std Y+19,r26
6460 35da BC8B std Y+20,r27
6461 35dc 8093 0000 sts MittelIntegralRoll,r24
6462 35e0 9093 0000 sts (MittelIntegralRoll)+1,r25
6463 35e4 A093 0000 sts (MittelIntegralRoll)+2,r26
6464 35e8 B093 0000 sts (MittelIntegralRoll)+3,r27
6465 35ec 8091 0000 lds r24,EE_Parameter+28
6466 35f0 A82E mov r10,r24
6467 35f2 BB24 clr r11
6468 35f4 CC24 clr r12
6469 35f6 DD24 clr r13
6470 35f8 2091 0000 lds r18,IntegralAccNick
6471 35fc 3091 0000 lds r19,(IntegralAccNick)+1
6472 3600 4091 0000 lds r20,(IntegralAccNick)+2
6473 3604 5091 0000 lds r21,(IntegralAccNick)+3
6474 3608 C601 movw r24,r12
6475 360a B501 movw r22,r10
6476 360c 0E94 0000 call __mulsi3
6477 3610 97FF sbrs r25,7
6478 3612 00C0 rjmp .L539
6479 3614 6150 subi r22,lo8(-(255))
6480 3616 7F4F sbci r23,hi8(-(255))
6481 3618 8F4F sbci r24,hlo8(-(255))
6482 361a 9F4F sbci r25,hhi8(-(255))
6483 .L539:
6484 361c 672E mov r6,r23
6485 361e 782E mov r7,r24
6486 3620 892E mov r8,r25
6487 3622 9924 clr r9
6488 3624 87FC sbrc r8,7
6489 3626 9A94 dec r9
6490 3628 6092 0000 sts IntegralAccNick,r6
6491 362c 7092 0000 sts (IntegralAccNick)+1,r7
6492 3630 8092 0000 sts (IntegralAccNick)+2,r8
6493 3634 9092 0000 sts (IntegralAccNick)+3,r9
6494 3638 2091 0000 lds r18,IntegralAccRoll
6495 363c 3091 0000 lds r19,(IntegralAccRoll)+1
6496 3640 4091 0000 lds r20,(IntegralAccRoll)+2
6497 3644 5091 0000 lds r21,(IntegralAccRoll)+3
6498 3648 C601 movw r24,r12
6499 364a B501 movw r22,r10
6500 364c 0E94 0000 call __mulsi3
6501 3650 97FF sbrs r25,7
6502 3652 00C0 rjmp .L540
6503 3654 6150 subi r22,lo8(-(255))
6504 3656 7F4F sbci r23,hi8(-(255))
6505 3658 8F4F sbci r24,hlo8(-(255))
6506 365a 9F4F sbci r25,hhi8(-(255))
6507 .L540:
6508 365c 272E mov r2,r23
6509 365e 382E mov r3,r24
6510 3660 492E mov r4,r25
6511 3662 5524 clr r5
6512 3664 47FC sbrc r4,7
6513 3666 5A94 dec r5
6514 3668 2092 0000 sts IntegralAccRoll,r2
6515 366c 3092 0000 sts (IntegralAccRoll)+1,r3
6516 3670 4092 0000 sts (IntegralAccRoll)+2,r4
6517 3674 5092 0000 sts (IntegralAccRoll)+3,r5
6518 3678 8091 0000 lds r24,IntegralAccZ
6519 367c 9091 0000 lds r25,(IntegralAccZ)+1
6520 3680 A091 0000 lds r26,(IntegralAccZ)+2
6521 3684 B091 0000 lds r27,(IntegralAccZ)+3
6522 3688 B7FF sbrs r27,7
6523 368a 00C0 rjmp .L541
6524 368c 8150 subi r24,lo8(-(255))
6525 368e 9F4F sbci r25,hi8(-(255))
6526 3690 AF4F sbci r26,hlo8(-(255))
6527 3692 BF4F sbci r27,hhi8(-(255))
6528 .L541:
6529 3694 892F mov r24,r25
6530 3696 9A2F mov r25,r26
6531 3698 AB2F mov r26,r27
6532 369a BB27 clr r27
6533 369c A7FD sbrc r26,7
6534 369e BA95 dec r27
6535 36a0 8093 0000 sts IntegralAccZ,r24
6536 36a4 9093 0000 sts (IntegralAccZ)+1,r25
6537 36a8 A093 0000 sts (IntegralAccZ)+2,r26
6538 36ac B093 0000 sts (IntegralAccZ)+3,r27
6539 36b0 D801 movw r26,r16
6540 36b2 C701 movw r24,r14
6541 36b4 8619 sub r24,r6
6542 36b6 9709 sbc r25,r7
6543 36b8 A809 sbc r26,r8
6544 36ba B909 sbc r27,r9
6545 36bc 8093 0000 sts IntegralFehlerNick.3,r24
6546 36c0 9093 0000 sts (IntegralFehlerNick.3)+1,r25
6547 36c4 A093 0000 sts (IntegralFehlerNick.3)+2,r26
6548 36c8 B093 0000 sts (IntegralFehlerNick.3)+3,r27
6549 36cc 2091 0000 lds r18,EE_Parameter+67
6550 36d0 E22E mov r14,r18
6551 36d2 FF24 clr r15
6552 36d4 0027 clr r16
6553 36d6 1127 clr r17
6554 36d8 BC01 movw r22,r24
6555 36da CD01 movw r24,r26
6556 36dc A801 movw r20,r16
6557 36de 9701 movw r18,r14
6558 36e0 0E94 0000 call __divmodsi4
6559 36e4 5901 movw r10,r18
6560 36e6 6A01 movw r12,r20
6561 36e8 2093 0000 sts ausgleichNick.10,r18
6562 36ec 3093 0000 sts (ausgleichNick.10)+1,r19
6563 36f0 4093 0000 sts (ausgleichNick.10)+2,r20
6564 36f4 5093 0000 sts (ausgleichNick.10)+3,r21
6565 36f8 8989 ldd r24,Y+17
6566 36fa 9A89 ldd r25,Y+18
6567 36fc AB89 ldd r26,Y+19
6568 36fe BC89 ldd r27,Y+20
6569 3700 8219 sub r24,r2
6570 3702 9309 sbc r25,r3
6571 3704 A409 sbc r26,r4
6572 3706 B509 sbc r27,r5
6573 3708 8093 0000 sts IntegralFehlerRoll.4,r24
6574 370c 9093 0000 sts (IntegralFehlerRoll.4)+1,r25
6575 3710 A093 0000 sts (IntegralFehlerRoll.4)+2,r26
6576 3714 B093 0000 sts (IntegralFehlerRoll.4)+3,r27
6577 3718 BC01 movw r22,r24
6578 371a CD01 movw r24,r26
6579 371c A801 movw r20,r16
6580 371e 9701 movw r18,r14
6581 3720 0E94 0000 call __divmodsi4
6582 3724 2093 0000 sts ausgleichRoll.11,r18
6583 3728 3093 0000 sts (ausgleichRoll.11)+1,r19
6584 372c 4093 0000 sts (ausgleichRoll.11)+2,r20
6585 3730 5093 0000 sts (ausgleichRoll.11)+3,r21
6586 3734 D601 movw r26,r12
6587 3736 C501 movw r24,r10
6588 3738 D7FE sbrs r13,7
6589 373a 00C0 rjmp .L542
6590 373c 8150 subi r24,lo8(-(255))
6591 373e 9F4F sbci r25,hi8(-(255))
6592 3740 AF4F sbci r26,hlo8(-(255))
6593 3742 BF4F sbci r27,hhi8(-(255))
6594 .L542:
6595 3744 892F mov r24,r25
6596 3746 9A2F mov r25,r26
6597 3748 AB2F mov r26,r27
6598 374a BB27 clr r27
6599 374c A7FD sbrc r26,7
6600 374e BA95 dec r27
6601 3750 9093 0000 sts (LageKorrekturNick)+1,r25
6602 3754 8093 0000 sts LageKorrekturNick,r24
6603 3758 57FF sbrs r21,7
6604 375a 00C0 rjmp .L543
6605 375c 2150 subi r18,lo8(-(255))
6606 375e 3F4F sbci r19,hi8(-(255))
6607 3760 4F4F sbci r20,hlo8(-(255))
6608 3762 5F4F sbci r21,hhi8(-(255))
6609 .L543:
6610 3764 BB27 clr r27
6611 3766 57FD sbrc r21,7
6612 3768 BA95 dec r27
6613 376a A52F mov r26,r21
6614 376c 942F mov r25,r20
6615 376e 832F mov r24,r19
6616 3770 9093 0000 sts (LageKorrekturRoll)+1,r25
6617 3774 8093 0000 sts LageKorrekturRoll,r24
6618 3778 8091 0000 lds r24,MaxStickNick
6619 377c 9091 0000 lds r25,(MaxStickNick)+1
6620 3780 8134 cpi r24,65
6621 3782 9105 cpc r25,__zero_reg__
6622 3784 04F4 brge .L545
6623 3786 8091 0000 lds r24,MaxStickRoll
6624 378a 9091 0000 lds r25,(MaxStickRoll)+1
6625 378e 8134 cpi r24,65
6626 3790 9105 cpc r25,__zero_reg__
6627 3792 04F4 brge .L545
6628 3794 8091 0000 lds r24,EE_Parameter+4
6629 3798 E82F mov r30,r24
6630 379a FF27 clr r31
6631 379c EE0F add r30,r30
6632 379e FF1F adc r31,r31
6633 37a0 E050 subi r30,lo8(-(PPM_in))
6634 37a2 F040 sbci r31,hi8(-(PPM_in))
6635 37a4 8081 ld r24,Z
6636 37a6 9181 ldd r25,Z+1
6637 37a8 0190 ld __tmp_reg__,Z+
6638 37aa F081 ld r31,Z
6639 37ac E02D mov r30,__tmp_reg__
6640 37ae F7FF sbrs r31,7
6641 37b0 00C0 rjmp .L546
6642 37b2 F095 com r31
6643 37b4 E195 neg r30
6644 37b6 FF4F sbci r31,lo8(-1)
6645 .L546:
6646 37b8 7A97 sbiw r30,26
6647 37ba 04F0 brlt .L544
6648 .L545:
6649 37bc 8091 0000 lds r24,FromNaviCtrl_Value
6650 37c0 8F3F cpi r24,lo8(-1)
6651 37c2 01F4 brne .L544
6652 37c4 8091 0000 lds r24,LageKorrekturNick
6653 37c8 9091 0000 lds r25,(LageKorrekturNick)+1
6654 37cc 97FD sbrc r25,7
6655 37ce 0196 adiw r24,1
6656 .L547:
6657 37d0 9595 asr r25
6658 37d2 8795 ror r24
6659 37d4 9093 0000 sts (LageKorrekturNick)+1,r25
6660 37d8 8093 0000 sts LageKorrekturNick,r24
6661 37dc 8091 0000 lds r24,LageKorrekturRoll
6662 37e0 9091 0000 lds r25,(LageKorrekturRoll)+1
6663 37e4 97FD sbrc r25,7
6664 37e6 0196 adiw r24,1
6665 .L548:
6666 37e8 9595 asr r25
6667 37ea 8795 ror r24
6668 37ec 9093 0000 sts (LageKorrekturRoll)+1,r25
6669 37f0 8093 0000 sts LageKorrekturRoll,r24
6670 .L544:
6671 37f4 8091 0000 lds r24,MittelIntegralNick2
6672 37f8 9091 0000 lds r25,(MittelIntegralNick2)+1
6673 37fc A091 0000 lds r26,(MittelIntegralNick2)+2
6674 3800 B091 0000 lds r27,(MittelIntegralNick2)+3
6675 3804 B7FF sbrs r27,7
6676 3806 00C0 rjmp .L549
6677 3808 8150 subi r24,lo8(-(255))
6678 380a 9F4F sbci r25,hi8(-(255))
6679 380c AF4F sbci r26,hlo8(-(255))
6680 380e BF4F sbci r27,hhi8(-(255))
6681 .L549:
6682 3810 892F mov r24,r25
6683 3812 9A2F mov r25,r26
6684 3814 AB2F mov r26,r27
6685 3816 BB27 clr r27
6686 3818 A7FD sbrc r26,7
6687 381a BA95 dec r27
6688 381c 8093 0000 sts MittelIntegralNick2,r24
6689 3820 9093 0000 sts (MittelIntegralNick2)+1,r25
6690 3824 A093 0000 sts (MittelIntegralNick2)+2,r26
6691 3828 B093 0000 sts (MittelIntegralNick2)+3,r27
6692 382c 8091 0000 lds r24,MittelIntegralRoll2
6693 3830 9091 0000 lds r25,(MittelIntegralRoll2)+1
6694 3834 A091 0000 lds r26,(MittelIntegralRoll2)+2
6695 3838 B091 0000 lds r27,(MittelIntegralRoll2)+3
6696 383c B7FF sbrs r27,7
6697 383e 00C0 rjmp .L550
6698 3840 8150 subi r24,lo8(-(255))
6699 3842 9F4F sbci r25,hi8(-(255))
6700 3844 AF4F sbci r26,hlo8(-(255))
6701 3846 BF4F sbci r27,hhi8(-(255))
6702 .L550:
6703 3848 892F mov r24,r25
6704 384a 9A2F mov r25,r26
6705 384c AB2F mov r26,r27
6706 384e BB27 clr r27
6707 3850 A7FD sbrc r26,7
6708 3852 BA95 dec r27
6709 3854 8093 0000 sts MittelIntegralRoll2,r24
6710 3858 9093 0000 sts (MittelIntegralRoll2)+1,r25
6711 385c A093 0000 sts (MittelIntegralRoll2)+2,r26
6712 3860 B093 0000 sts (MittelIntegralRoll2)+3,r27
6713 3864 8091 0000 lds r24,IntegralNick
6714 3868 9091 0000 lds r25,(IntegralNick)+1
6715 386c A091 0000 lds r26,(IntegralNick)+2
6716 3870 B091 0000 lds r27,(IntegralNick)+3
6717 3874 2F81 ldd r18,Y+7
6718 3876 3885 ldd r19,Y+8
6719 3878 4985 ldd r20,Y+9
6720 387a 5A85 ldd r21,Y+10
6721 387c 281B sub r18,r24
6722 387e 390B sbc r19,r25
6723 3880 4A0B sbc r20,r26
6724 3882 5B0B sbc r21,r27
6725 3884 2093 0000 sts tmp_long.1,r18
6726 3888 3093 0000 sts (tmp_long.1)+1,r19
6727 388c 4093 0000 sts (tmp_long.1)+2,r20
6728 3890 5093 0000 sts (tmp_long.1)+3,r21
6729 3894 8091 0000 lds r24,IntegralRoll
6730 3898 9091 0000 lds r25,(IntegralRoll)+1
6731 389c A091 0000 lds r26,(IntegralRoll)+2
6732 38a0 B091 0000 lds r27,(IntegralRoll)+3
6733 38a4 EB84 ldd r14,Y+11
6734 38a6 FC84 ldd r15,Y+12
6735 38a8 0D85 ldd r16,Y+13
6736 38aa 1E85 ldd r17,Y+14
6737 38ac E81A sub r14,r24
6738 38ae F90A sbc r15,r25
6739 38b0 0A0B sbc r16,r26
6740 38b2 1B0B sbc r17,r27
6741 38b4 E092 0000 sts tmp_long2.2,r14
6742 38b8 F092 0000 sts (tmp_long2.2)+1,r15
6743 38bc 0093 0000 sts (tmp_long2.2)+2,r16
6744 38c0 1093 0000 sts (tmp_long2.2)+3,r17
6745 38c4 2093 0000 sts IntegralFehlerNick.3,r18
6746 38c8 3093 0000 sts (IntegralFehlerNick.3)+1,r19
6747 38cc 4093 0000 sts (IntegralFehlerNick.3)+2,r20
6748 38d0 5093 0000 sts (IntegralFehlerNick.3)+3,r21
6749 38d4 E092 0000 sts IntegralFehlerRoll.4,r14
6750 38d8 F092 0000 sts (IntegralFehlerRoll.4)+1,r15
6751 38dc 0093 0000 sts (IntegralFehlerRoll.4)+2,r16
6752 38e0 1093 0000 sts (IntegralFehlerRoll.4)+3,r17
6753 38e4 8091 0000 lds r24,Mess_IntegralNick2
6754 38e8 9091 0000 lds r25,(Mess_IntegralNick2)+1
6755 38ec A091 0000 lds r26,(Mess_IntegralNick2)+2
6756 38f0 B091 0000 lds r27,(Mess_IntegralNick2)+3
6757 38f4 821B sub r24,r18
6758 38f6 930B sbc r25,r19
6759 38f8 A40B sbc r26,r20
6760 38fa B50B sbc r27,r21
6761 38fc 8093 0000 sts Mess_IntegralNick2,r24
6762 3900 9093 0000 sts (Mess_IntegralNick2)+1,r25
6763 3904 A093 0000 sts (Mess_IntegralNick2)+2,r26
6764 3908 B093 0000 sts (Mess_IntegralNick2)+3,r27
6765 390c 8091 0000 lds r24,Mess_IntegralRoll2
6766 3910 9091 0000 lds r25,(Mess_IntegralRoll2)+1
6767 3914 A091 0000 lds r26,(Mess_IntegralRoll2)+2
6768 3918 B091 0000 lds r27,(Mess_IntegralRoll2)+3
6769 391c 8E19 sub r24,r14
6770 391e 9F09 sbc r25,r15
6771 3920 A00B sbc r26,r16
6772 3922 B10B sbc r27,r17
6773 3924 8093 0000 sts Mess_IntegralRoll2,r24
6774 3928 9093 0000 sts (Mess_IntegralRoll2)+1,r25
6775 392c A093 0000 sts (Mess_IntegralRoll2)+2,r26
6776 3930 B093 0000 sts (Mess_IntegralRoll2)+3,r27
6777 3934 8889 ldd r24,Y+16
6778 3936 8823 tst r24
6779 3938 01F0 breq .L551
6780 393a 2091 0000 lds r18,GierGyroFehler
6781 393e 3091 0000 lds r19,(GierGyroFehler)+1
6782 3942 2138 cpi r18,129
6783 3944 3105 cpc r19,__zero_reg__
6784 3946 04F0 brlt .L552
6785 3948 8091 0000 lds r24,AdNeutralGier
6786 394c 9091 0000 lds r25,(AdNeutralGier)+1
6787 3950 0196 adiw r24,1
6788 3952 9093 0000 sts (AdNeutralGier)+1,r25
6789 3956 8093 0000 sts AdNeutralGier,r24
6790 .L552:
6791 395a 2058 subi r18,lo8(-128)
6792 395c 3F4F sbci r19,hi8(-128)
6793 395e 04F4 brge .L551
6794 3960 8091 0000 lds r24,AdNeutralGier
6795 3964 9091 0000 lds r25,(AdNeutralGier)+1
6796 3968 0197 sbiw r24,1
6797 396a 9093 0000 sts (AdNeutralGier)+1,r25
6798 396e 8093 0000 sts AdNeutralGier,r24
6799 .L551:
6800 3972 1092 0000 sts (GierGyroFehler)+1,__zero_reg__
6801 3976 1092 0000 sts GierGyroFehler,__zero_reg__
6802 397a 81E0 ldi r24,lo8(1)
6803 397c 90E0 ldi r25,hi8(1)
6804 397e 9093 0000 sts (cnt.14)+1,r25
6805 3982 8093 0000 sts cnt.14,r24
6806 3986 E090 0000 lds r14,IntegralFehlerNick.3
6807 398a F090 0000 lds r15,(IntegralFehlerNick.3)+1
6808 398e 0091 0000 lds r16,(IntegralFehlerNick.3)+2
6809 3992 1091 0000 lds r17,(IntegralFehlerNick.3)+3
6810 3996 D801 movw r26,r16
6811 3998 C701 movw r24,r14
6812 399a 17FF sbrs r17,7
6813 399c 00C0 rjmp .L555
6814 399e 8827 clr r24
6815 39a0 9927 clr r25
6816 39a2 DC01 movw r26,r24
6817 39a4 8E19 sub r24,r14
6818 39a6 9F09 sbc r25,r15
6819 39a8 A00B sbc r26,r16
6820 39aa B10B sbc r27,r17
6821 .L555:
6822 39ac 8150 subi r24,lo8(513)
6823 39ae 9240 sbci r25,hi8(513)
6824 39b0 A040 sbci r26,hlo8(513)
6825 39b2 B040 sbci r27,hhi8(513)
6826 39b4 04F0 brlt .L554
6827 39b6 84E0 ldi r24,lo8(4)
6828 39b8 90E0 ldi r25,hi8(4)
6829 39ba 9093 0000 sts (cnt.14)+1,r25
6830 39be 8093 0000 sts cnt.14,r24
6831 .L554:
6832 39c2 8091 0000 lds r24,MittelIntegralNick_Alt.19
6833 39c6 9091 0000 lds r25,(MittelIntegralNick_Alt.19)+1
6834 39ca A091 0000 lds r26,(MittelIntegralNick_Alt.19)+2
6835 39ce B091 0000 lds r27,(MittelIntegralNick_Alt.19)+3
6836 39d2 2091 0000 lds r18,MittelIntegralNick
6837 39d6 3091 0000 lds r19,(MittelIntegralNick)+1
6838 39da 4091 0000 lds r20,(MittelIntegralNick)+2
6839 39de 5091 0000 lds r21,(MittelIntegralNick)+3
6840 39e2 821B sub r24,r18
6841 39e4 930B sbc r25,r19
6842 39e6 A40B sbc r26,r20
6843 39e8 B50B sbc r27,r21
6844 39ea 815E subi r24,lo8(-(19999))
6845 39ec 914B sbci r25,hi8(-(19999))
6846 39ee AF4F sbci r26,hlo8(-(19999))
6847 39f0 BF4F sbci r27,hhi8(-(19999))
6848 39f2 8F53 subi r24,lo8(39999)
6849 39f4 9C49 sbci r25,hi8(39999)
6850 39f6 A040 sbci r26,hlo8(39999)
6851 39f8 B040 sbci r27,hhi8(39999)
6852 39fa 00F0 brlo .L557
6853 39fc 8091 0000 lds r24,FromNaviCtrl_Value+1
6854 3a00 8931 cpi r24,lo8(25)
6855 3a02 04F4 brge .+2
6856 3a04 00C0 rjmp .L556
6857 .L557:
6858 3a06 21E0 ldi r18,lo8(4097)
6859 3a08 E216 cp r14,r18
6860 3a0a 20E1 ldi r18,hi8(4097)
6861 3a0c F206 cpc r15,r18
6862 3a0e 20E0 ldi r18,hlo8(4097)
6863 3a10 0207 cpc r16,r18
6864 3a12 20E0 ldi r18,hhi8(4097)
6865 3a14 1207 cpc r17,r18
6866 3a16 04F4 brge .+2
6867 3a18 00C0 rjmp .L558
6868 3a1a 8091 0000 lds r24,last_n_p.15
6869 3a1e 8823 tst r24
6870 3a20 01F4 brne .+2
6871 3a22 00C0 rjmp .L559
6872 3a24 D801 movw r26,r16
6873 3a26 C701 movw r24,r14
6874 3a28 17FF sbrs r17,7
6875 3a2a 00C0 rjmp .L560
6876 3a2c 8827 clr r24
6877 3a2e 9927 clr r25
6878 3a30 DC01 movw r26,r24
6879 3a32 8E19 sub r24,r14
6880 3a34 9F09 sbc r25,r15
6881 3a36 A00B sbc r26,r16
6882 3a38 B10B sbc r27,r17
6883 .L560:
6884 3a3a 9C01 movw r18,r24
6885 3a3c AD01 movw r20,r26
6886 3a3e B7FF sbrs r27,7
6887 3a40 00C0 rjmp .L561
6888 3a42 2150 subi r18,lo8(-(511))
6889 3a44 3E4F sbci r19,hi8(-(511))
6890 3a46 4F4F sbci r20,hlo8(-(511))
6891 3a48 5F4F sbci r21,hhi8(-(511))
6892 .L561:
6893 3a4a F9E0 ldi r31,9
6894 3a4c 5595 1: asr r21
6895 3a4e 4795 ror r20
6896 3a50 3795 ror r19
6897 3a52 2795 ror r18
6898 3a54 FA95 dec r31
6899 3a56 01F4 brne 1b
6900 3a58 8091 0000 lds r24,cnt.14
6901 3a5c 9091 0000 lds r25,(cnt.14)+1
6902 3a60 820F add r24,r18
6903 3a62 931F adc r25,r19
6904 3a64 9093 0000 sts (cnt.14)+1,r25
6905 3a68 8093 0000 sts cnt.14,r24
6906 3a6c D801 movw r26,r16
6907 3a6e C701 movw r24,r14
6908 3a70 17FF sbrs r17,7
6909 3a72 00C0 rjmp .L562
6910 3a74 0796 adiw r24,7
6911 3a76 A11D adc r26,__zero_reg__
6912 3a78 B11D adc r27,__zero_reg__
6913 .L562:
6914 3a7a E3E0 ldi r30,3
6915 3a7c B595 1: asr r27
6916 3a7e A795 ror r26
6917 3a80 9795 ror r25
6918 3a82 8795 ror r24
6919 3a84 EA95 dec r30
6920 3a86 01F4 brne 1b
6921 3a88 8093 0000 sts ausgleichNick.10,r24
6922 3a8c 9093 0000 sts (ausgleichNick.10)+1,r25
6923 3a90 A093 0000 sts (ausgleichNick.10)+2,r26
6924 3a94 B093 0000 sts (ausgleichNick.10)+3,r27
6925 3a98 8958 subi r24,lo8(5001)
6926 3a9a 9341 sbci r25,hi8(5001)
6927 3a9c A040 sbci r26,hlo8(5001)
6928 3a9e B040 sbci r27,hhi8(5001)
6929 3aa0 04F0 brlt .L563
6930 3aa2 88E8 ldi r24,lo8(5000)
6931 3aa4 93E1 ldi r25,hi8(5000)
6932 3aa6 A0E0 ldi r26,hlo8(5000)
6933 3aa8 B0E0 ldi r27,hhi8(5000)
6934 3aaa 8093 0000 sts ausgleichNick.10,r24
6935 3aae 9093 0000 sts (ausgleichNick.10)+1,r25
6936 3ab2 A093 0000 sts (ausgleichNick.10)+2,r26
6937 3ab6 B093 0000 sts (ausgleichNick.10)+3,r27
6938 .L563:
6939 3aba 2091 0000 lds r18,ausgleichNick.10
6940 3abe 3091 0000 lds r19,(ausgleichNick.10)+1
6941 3ac2 4091 0000 lds r20,(ausgleichNick.10)+2
6942 3ac6 5091 0000 lds r21,(ausgleichNick.10)+3
6943 3aca 57FF sbrs r21,7
6944 3acc 00C0 rjmp .L564
6945 3ace 2150 subi r18,lo8(-(255))
6946 3ad0 3F4F sbci r19,hi8(-(255))
6947 3ad2 4F4F sbci r20,hlo8(-(255))
6948 3ad4 5F4F sbci r21,hhi8(-(255))
6949 .L564:
6950 3ad6 232F mov r18,r19
6951 3ad8 342F mov r19,r20
6952 3ada 452F mov r20,r21
6953 3adc 5527 clr r21
6954 3ade 47FD sbrc r20,7
6955 3ae0 5A95 dec r21
6956 3ae2 8091 0000 lds r24,LageKorrekturNick
6957 3ae6 9091 0000 lds r25,(LageKorrekturNick)+1
6958 3aea 820F add r24,r18
6959 3aec 931F adc r25,r19
6960 3aee 9093 0000 sts (LageKorrekturNick)+1,r25
6961 3af2 8093 0000 sts LageKorrekturNick,r24
6962 3af6 00C0 rjmp .L566
6963 .L559:
6964 3af8 81E0 ldi r24,lo8(1)
6965 3afa 8093 0000 sts last_n_p.15,r24
6966 3afe 00C0 rjmp .L566
6967 .L558:
6968 3b00 1092 0000 sts last_n_p.15,__zero_reg__
6969 .L566:
6970 3b04 40E0 ldi r20,lo8(-4096)
6971 3b06 E416 cp r14,r20
6972 3b08 40EF ldi r20,hi8(-4096)
6973 3b0a F406 cpc r15,r20
6974 3b0c 4FEF ldi r20,hlo8(-4096)
6975 3b0e 0407 cpc r16,r20
6976 3b10 4FEF ldi r20,hhi8(-4096)
6977 3b12 1407 cpc r17,r20
6978 3b14 04F0 brlt .+2
6979 3b16 00C0 rjmp .L567
6980 3b18 8091 0000 lds r24,last_n_n.16
6981 3b1c 8823 tst r24
6982 3b1e 01F4 brne .+2
6983 3b20 00C0 rjmp .L568
6984 3b22 D801 movw r26,r16
6985 3b24 C701 movw r24,r14
6986 3b26 17FF sbrs r17,7
6987 3b28 00C0 rjmp .L569
6988 3b2a 8827 clr r24
6989 3b2c 9927 clr r25
6990 3b2e DC01 movw r26,r24
6991 3b30 8E19 sub r24,r14
6992 3b32 9F09 sbc r25,r15
6993 3b34 A00B sbc r26,r16
6994 3b36 B10B sbc r27,r17
6995 .L569:
6996 3b38 9C01 movw r18,r24
6997 3b3a AD01 movw r20,r26
6998 3b3c B7FF sbrs r27,7
6999 3b3e 00C0 rjmp .L570
7000 3b40 2150 subi r18,lo8(-(511))
7001 3b42 3E4F sbci r19,hi8(-(511))
7002 3b44 4F4F sbci r20,hlo8(-(511))
7003 3b46 5F4F sbci r21,hhi8(-(511))
7004 .L570:
7005 3b48 69E0 ldi r22,9
7006 3b4a 5595 1: asr r21
7007 3b4c 4795 ror r20
7008 3b4e 3795 ror r19
7009 3b50 2795 ror r18
7010 3b52 6A95 dec r22
7011 3b54 01F4 brne 1b
7012 3b56 8091 0000 lds r24,cnt.14
7013 3b5a 9091 0000 lds r25,(cnt.14)+1
7014 3b5e 820F add r24,r18
7015 3b60 931F adc r25,r19
7016 3b62 9093 0000 sts (cnt.14)+1,r25
7017 3b66 8093 0000 sts cnt.14,r24
7018 3b6a D801 movw r26,r16
7019 3b6c C701 movw r24,r14
7020 3b6e 17FF sbrs r17,7
7021 3b70 00C0 rjmp .L571
7022 3b72 0796 adiw r24,7
7023 3b74 A11D adc r26,__zero_reg__
7024 3b76 B11D adc r27,__zero_reg__
7025 .L571:
7026 3b78 23E0 ldi r18,3
7027 3b7a B595 1: asr r27
7028 3b7c A795 ror r26
7029 3b7e 9795 ror r25
7030 3b80 8795 ror r24
7031 3b82 2A95 dec r18
7032 3b84 01F4 brne 1b
7033 3b86 8093 0000 sts ausgleichNick.10,r24
7034 3b8a 9093 0000 sts (ausgleichNick.10)+1,r25
7035 3b8e A093 0000 sts (ausgleichNick.10)+2,r26
7036 3b92 B093 0000 sts (ausgleichNick.10)+3,r27
7037 3b96 8857 subi r24,lo8(-5000)
7038 3b98 9C4E sbci r25,hi8(-5000)
7039 3b9a AF4F sbci r26,hlo8(-5000)
7040 3b9c BF4F sbci r27,hhi8(-5000)
7041 3b9e 04F4 brge .L572
7042 3ba0 88E7 ldi r24,lo8(-5000)
7043 3ba2 9CEE ldi r25,hi8(-5000)
7044 3ba4 AFEF ldi r26,hlo8(-5000)
7045 3ba6 BFEF ldi r27,hhi8(-5000)
7046 3ba8 8093 0000 sts ausgleichNick.10,r24
7047 3bac 9093 0000 sts (ausgleichNick.10)+1,r25
7048 3bb0 A093 0000 sts (ausgleichNick.10)+2,r26
7049 3bb4 B093 0000 sts (ausgleichNick.10)+3,r27
7050 .L572:
7051 3bb8 2091 0000 lds r18,ausgleichNick.10
7052 3bbc 3091 0000 lds r19,(ausgleichNick.10)+1
7053 3bc0 4091 0000 lds r20,(ausgleichNick.10)+2
7054 3bc4 5091 0000 lds r21,(ausgleichNick.10)+3
7055 3bc8 57FF sbrs r21,7
7056 3bca 00C0 rjmp .L573
7057 3bcc 2150 subi r18,lo8(-(255))
7058 3bce 3F4F sbci r19,hi8(-(255))
7059 3bd0 4F4F sbci r20,hlo8(-(255))
7060 3bd2 5F4F sbci r21,hhi8(-(255))
7061 .L573:
7062 3bd4 232F mov r18,r19
7063 3bd6 342F mov r19,r20
7064 3bd8 452F mov r20,r21
7065 3bda 5527 clr r21
7066 3bdc 47FD sbrc r20,7
7067 3bde 5A95 dec r21
7068 3be0 8091 0000 lds r24,LageKorrekturNick
7069 3be4 9091 0000 lds r25,(LageKorrekturNick)+1
7070 3be8 820F add r24,r18
7071 3bea 931F adc r25,r19
7072 3bec 9093 0000 sts (LageKorrekturNick)+1,r25
7073 3bf0 8093 0000 sts LageKorrekturNick,r24
7074 3bf4 00C0 rjmp .L576
7075 .L568:
7076 3bf6 81E0 ldi r24,lo8(1)
7077 3bf8 8093 0000 sts last_n_n.16,r24
7078 3bfc 00C0 rjmp .L576
7079 .L567:
7080 3bfe 1092 0000 sts last_n_n.16,__zero_reg__
7081 3c02 00C0 rjmp .L576
7082 .L556:
7083 3c04 1092 0000 sts (cnt.14)+1,__zero_reg__
7084 3c08 1092 0000 sts cnt.14,__zero_reg__
7085 3c0c 84E6 ldi r24,lo8(100)
7086 3c0e 90E0 ldi r25,hi8(100)
7087 3c10 9093 0000 sts (KompassSignalSchlecht)+1,r25
7088 3c14 8093 0000 sts KompassSignalSchlecht,r24
7089 .L576:
7090 3c18 6889 ldd r22,Y+16
7091 3c1a 262F mov r18,r22
7092 3c1c 3327 clr r19
7093 3c1e 8091 0000 lds r24,cnt.14
7094 3c22 9091 0000 lds r25,(cnt.14)+1
7095 3c26 2817 cp r18,r24
7096 3c28 3907 cpc r19,r25
7097 3c2a 04F4 brge .L577
7098 3c2c 3093 0000 sts (cnt.14)+1,r19
7099 3c30 2093 0000 sts cnt.14,r18
7100 .L577:
7101 3c34 1091 0000 lds r17,FromNaviCtrl_Value+1
7102 3c38 1123 tst r17
7103 3c3a 01F0 breq .L578
7104 3c3c 212F mov r18,r17
7105 3c3e 3327 clr r19
7106 3c40 27FD sbrc r18,7
7107 3c42 3095 com r19
7108 3c44 8091 0000 lds r24,cnt.14
7109 3c48 9091 0000 lds r25,(cnt.14)+1
7110 3c4c 2817 cp r18,r24
7111 3c4e 3907 cpc r19,r25
7112 3c50 04F4 brge .L578
7113 3c52 3093 0000 sts (cnt.14)+1,r19
7114 3c56 2093 0000 sts cnt.14,r18
7115 .L578:
7116 3c5a 4091 0000 lds r20,IntegralFehlerNick.3
7117 3c5e 5091 0000 lds r21,(IntegralFehlerNick.3)+1
7118 3c62 6091 0000 lds r22,(IntegralFehlerNick.3)+2
7119 3c66 7091 0000 lds r23,(IntegralFehlerNick.3)+3
7120 3c6a 4138 cpi r20,lo8(129)
7121 3c6c 5105 cpc r21,__zero_reg__
7122 3c6e 6105 cpc r22,__zero_reg__
7123 3c70 7105 cpc r23,__zero_reg__
7124 3c72 04F0 brlt .L580
7125 3c74 8091 0000 lds r24,AdNeutralNick
7126 3c78 9091 0000 lds r25,(AdNeutralNick)+1
7127 3c7c 2091 0000 lds r18,cnt.14
7128 3c80 3091 0000 lds r19,(cnt.14)+1
7129 3c84 820F add r24,r18
7130 3c86 931F adc r25,r19
7131 3c88 9093 0000 sts (AdNeutralNick)+1,r25
7132 3c8c 8093 0000 sts AdNeutralNick,r24
7133 .L580:
7134 3c90 4058 subi r20,lo8(-128)
7135 3c92 5F4F sbci r21,hi8(-128)
7136 3c94 6F4F sbci r22,hlo8(-128)
7137 3c96 7F4F sbci r23,hhi8(-128)
7138 3c98 04F4 brge .L581
7139 3c9a 8091 0000 lds r24,AdNeutralNick
7140 3c9e 9091 0000 lds r25,(AdNeutralNick)+1
7141 3ca2 2091 0000 lds r18,cnt.14
7142 3ca6 3091 0000 lds r19,(cnt.14)+1
7143 3caa 821B sub r24,r18
7144 3cac 930B sbc r25,r19
7145 3cae 9093 0000 sts (AdNeutralNick)+1,r25
7146 3cb2 8093 0000 sts AdNeutralNick,r24
7147 .L581:
7148 3cb6 81E0 ldi r24,lo8(1)
7149 3cb8 90E0 ldi r25,hi8(1)
7150 3cba 9093 0000 sts (cnt.14)+1,r25
7151 3cbe 8093 0000 sts cnt.14,r24
7152 3cc2 C090 0000 lds r12,IntegralFehlerRoll.4
7153 3cc6 D090 0000 lds r13,(IntegralFehlerRoll.4)+1
7154 3cca E090 0000 lds r14,(IntegralFehlerRoll.4)+2
7155 3cce F090 0000 lds r15,(IntegralFehlerRoll.4)+3
7156 3cd2 D701 movw r26,r14
7157 3cd4 C601 movw r24,r12
7158 3cd6 F7FE sbrs r15,7
7159 3cd8 00C0 rjmp .L583
7160 3cda 8827 clr r24
7161 3cdc 9927 clr r25
7162 3cde DC01 movw r26,r24
7163 3ce0 8C19 sub r24,r12
7164 3ce2 9D09 sbc r25,r13
7165 3ce4 AE09 sbc r26,r14
7166 3ce6 BF09 sbc r27,r15
7167 .L583:
7168 3ce8 8150 subi r24,lo8(513)
7169 3cea 9240 sbci r25,hi8(513)
7170 3cec A040 sbci r26,hlo8(513)
7171 3cee B040 sbci r27,hhi8(513)
7172 3cf0 04F0 brlt .L582
7173 3cf2 84E0 ldi r24,lo8(4)
7174 3cf4 90E0 ldi r25,hi8(4)
7175 3cf6 9093 0000 sts (cnt.14)+1,r25
7176 3cfa 8093 0000 sts cnt.14,r24
7177 .L582:
7178 3cfe 8091 0000 lds r24,MittelIntegralRoll_Alt.20
7179 3d02 9091 0000 lds r25,(MittelIntegralRoll_Alt.20)+1
7180 3d06 A091 0000 lds r26,(MittelIntegralRoll_Alt.20)+2
7181 3d0a B091 0000 lds r27,(MittelIntegralRoll_Alt.20)+3
7182 3d0e 2091 0000 lds r18,MittelIntegralRoll
7183 3d12 3091 0000 lds r19,(MittelIntegralRoll)+1
7184 3d16 4091 0000 lds r20,(MittelIntegralRoll)+2
7185 3d1a 5091 0000 lds r21,(MittelIntegralRoll)+3
7186 3d1e 821B sub r24,r18
7187 3d20 930B sbc r25,r19
7188 3d22 A40B sbc r26,r20
7189 3d24 B50B sbc r27,r21
7190 3d26 815E subi r24,lo8(-(19999))
7191 3d28 914B sbci r25,hi8(-(19999))
7192 3d2a AF4F sbci r26,hlo8(-(19999))
7193 3d2c BF4F sbci r27,hhi8(-(19999))
7194 3d2e 8F53 subi r24,lo8(39999)
7195 3d30 9C49 sbci r25,hi8(39999)
7196 3d32 A040 sbci r26,hlo8(39999)
7197 3d34 B040 sbci r27,hhi8(39999)
7198 3d36 00F0 brlo .L585
7199 3d38 1931 cpi r17,lo8(25)
7200 3d3a 04F4 brge .+2
7201 3d3c 00C0 rjmp .L584
7202 .L585:
7203 3d3e 01E0 ldi r16,lo8(4097)
7204 3d40 C016 cp r12,r16
7205 3d42 00E1 ldi r16,hi8(4097)
7206 3d44 D006 cpc r13,r16
7207 3d46 00E0 ldi r16,hlo8(4097)
7208 3d48 E006 cpc r14,r16
7209 3d4a 00E0 ldi r16,hhi8(4097)
7210 3d4c F006 cpc r15,r16
7211 3d4e 04F4 brge .+2
7212 3d50 00C0 rjmp .L586
7213 3d52 8091 0000 lds r24,last_r_p.17
7214 3d56 8823 tst r24
7215 3d58 01F4 brne .+2
7216 3d5a 00C0 rjmp .L587
7217 3d5c D701 movw r26,r14
7218 3d5e C601 movw r24,r12
7219 3d60 F7FE sbrs r15,7
7220 3d62 00C0 rjmp .L588
7221 3d64 8827 clr r24
7222 3d66 9927 clr r25
7223 3d68 DC01 movw r26,r24
7224 3d6a 8C19 sub r24,r12
7225 3d6c 9D09 sbc r25,r13
7226 3d6e AE09 sbc r26,r14
7227 3d70 BF09 sbc r27,r15
7228 .L588:
7229 3d72 9C01 movw r18,r24
7230 3d74 AD01 movw r20,r26
7231 3d76 B7FF sbrs r27,7
7232 3d78 00C0 rjmp .L589
7233 3d7a 2150 subi r18,lo8(-(511))
7234 3d7c 3E4F sbci r19,hi8(-(511))
7235 3d7e 4F4F sbci r20,hlo8(-(511))
7236 3d80 5F4F sbci r21,hhi8(-(511))
7237 .L589:
7238 3d82 09E0 ldi r16,9
7239 3d84 5595 1: asr r21
7240 3d86 4795 ror r20
7241 3d88 3795 ror r19
7242 3d8a 2795 ror r18
7243 3d8c 0A95 dec r16
7244 3d8e 01F4 brne 1b
7245 3d90 8091 0000 lds r24,cnt.14
7246 3d94 9091 0000 lds r25,(cnt.14)+1
7247 3d98 820F add r24,r18
7248 3d9a 931F adc r25,r19
7249 3d9c 9093 0000 sts (cnt.14)+1,r25
7250 3da0 8093 0000 sts cnt.14,r24
7251 3da4 D701 movw r26,r14
7252 3da6 C601 movw r24,r12
7253 3da8 F7FE sbrs r15,7
7254 3daa 00C0 rjmp .L590
7255 3dac 0796 adiw r24,7
7256 3dae A11D adc r26,__zero_reg__
7257 3db0 B11D adc r27,__zero_reg__
7258 .L590:
7259 3db2 13E0 ldi r17,3
7260 3db4 B595 1: asr r27
7261 3db6 A795 ror r26
7262 3db8 9795 ror r25
7263 3dba 8795 ror r24
7264 3dbc 1A95 dec r17
7265 3dbe 01F4 brne 1b
7266 3dc0 8093 0000 sts ausgleichRoll.11,r24
7267 3dc4 9093 0000 sts (ausgleichRoll.11)+1,r25
7268 3dc8 A093 0000 sts (ausgleichRoll.11)+2,r26
7269 3dcc B093 0000 sts (ausgleichRoll.11)+3,r27
7270 3dd0 8958 subi r24,lo8(5001)
7271 3dd2 9341 sbci r25,hi8(5001)
7272 3dd4 A040 sbci r26,hlo8(5001)
7273 3dd6 B040 sbci r27,hhi8(5001)
7274 3dd8 04F0 brlt .L591
7275 3dda 88E8 ldi r24,lo8(5000)
7276 3ddc 93E1 ldi r25,hi8(5000)
7277 3dde A0E0 ldi r26,hlo8(5000)
7278 3de0 B0E0 ldi r27,hhi8(5000)
7279 3de2 8093 0000 sts ausgleichRoll.11,r24
7280 3de6 9093 0000 sts (ausgleichRoll.11)+1,r25
7281 3dea A093 0000 sts (ausgleichRoll.11)+2,r26
7282 3dee B093 0000 sts (ausgleichRoll.11)+3,r27
7283 .L591:
7284 3df2 2091 0000 lds r18,ausgleichRoll.11
7285 3df6 3091 0000 lds r19,(ausgleichRoll.11)+1
7286 3dfa 4091 0000 lds r20,(ausgleichRoll.11)+2
7287 3dfe 5091 0000 lds r21,(ausgleichRoll.11)+3
7288 3e02 57FF sbrs r21,7
7289 3e04 00C0 rjmp .L592
7290 3e06 2150 subi r18,lo8(-(255))
7291 3e08 3F4F sbci r19,hi8(-(255))
7292 3e0a 4F4F sbci r20,hlo8(-(255))
7293 3e0c 5F4F sbci r21,hhi8(-(255))
7294 .L592:
7295 3e0e 232F mov r18,r19
7296 3e10 342F mov r19,r20
7297 3e12 452F mov r20,r21
7298 3e14 5527 clr r21
7299 3e16 47FD sbrc r20,7
7300 3e18 5A95 dec r21
7301 3e1a 8091 0000 lds r24,LageKorrekturRoll
7302 3e1e 9091 0000 lds r25,(LageKorrekturRoll)+1
7303 3e22 820F add r24,r18
7304 3e24 931F adc r25,r19
7305 3e26 9093 0000 sts (LageKorrekturRoll)+1,r25
7306 3e2a 8093 0000 sts LageKorrekturRoll,r24
7307 3e2e 00C0 rjmp .L594
7308 .L587:
7309 3e30 81E0 ldi r24,lo8(1)
7310 3e32 8093 0000 sts last_r_p.17,r24
7311 3e36 00C0 rjmp .L594
7312 .L586:
7313 3e38 1092 0000 sts last_r_p.17,__zero_reg__
7314 .L594:
7315 3e3c 20E0 ldi r18,lo8(-4096)
7316 3e3e C216 cp r12,r18
7317 3e40 20EF ldi r18,hi8(-4096)
7318 3e42 D206 cpc r13,r18
7319 3e44 2FEF ldi r18,hlo8(-4096)
7320 3e46 E206 cpc r14,r18
7321 3e48 2FEF ldi r18,hhi8(-4096)
7322 3e4a F206 cpc r15,r18
7323 3e4c 04F0 brlt .+2
7324 3e4e 00C0 rjmp .L595
7325 3e50 8091 0000 lds r24,last_r_n.18
7326 3e54 8823 tst r24
7327 3e56 01F4 brne .+2
7328 3e58 00C0 rjmp .L596
7329 3e5a D701 movw r26,r14
7330 3e5c C601 movw r24,r12
7331 3e5e F7FE sbrs r15,7
7332 3e60 00C0 rjmp .L597
7333 3e62 8827 clr r24
7334 3e64 9927 clr r25
7335 3e66 DC01 movw r26,r24
7336 3e68 8C19 sub r24,r12
7337 3e6a 9D09 sbc r25,r13
7338 3e6c AE09 sbc r26,r14
7339 3e6e BF09 sbc r27,r15
7340 .L597:
7341 3e70 9C01 movw r18,r24
7342 3e72 AD01 movw r20,r26
7343 3e74 B7FF sbrs r27,7
7344 3e76 00C0 rjmp .L598
7345 3e78 2150 subi r18,lo8(-(511))
7346 3e7a 3E4F sbci r19,hi8(-(511))
7347 3e7c 4F4F sbci r20,hlo8(-(511))
7348 3e7e 5F4F sbci r21,hhi8(-(511))
7349 .L598:
7350 3e80 E9E0 ldi r30,9
7351 3e82 5595 1: asr r21
7352 3e84 4795 ror r20
7353 3e86 3795 ror r19
7354 3e88 2795 ror r18
7355 3e8a EA95 dec r30
7356 3e8c 01F4 brne 1b
7357 3e8e 8091 0000 lds r24,cnt.14
7358 3e92 9091 0000 lds r25,(cnt.14)+1
7359 3e96 820F add r24,r18
7360 3e98 931F adc r25,r19
7361 3e9a 9093 0000 sts (cnt.14)+1,r25
7362 3e9e 8093 0000 sts cnt.14,r24
7363 3ea2 D701 movw r26,r14
7364 3ea4 C601 movw r24,r12
7365 3ea6 F7FE sbrs r15,7
7366 3ea8 00C0 rjmp .L599
7367 3eaa 0796 adiw r24,7
7368 3eac A11D adc r26,__zero_reg__
7369 3eae B11D adc r27,__zero_reg__
7370 .L599:
7371 3eb0 73E0 ldi r23,3
7372 3eb2 B595 1: asr r27
7373 3eb4 A795 ror r26
7374 3eb6 9795 ror r25
7375 3eb8 8795 ror r24
7376 3eba 7A95 dec r23
7377 3ebc 01F4 brne 1b
7378 3ebe 8093 0000 sts ausgleichRoll.11,r24
7379 3ec2 9093 0000 sts (ausgleichRoll.11)+1,r25
7380 3ec6 A093 0000 sts (ausgleichRoll.11)+2,r26
7381 3eca B093 0000 sts (ausgleichRoll.11)+3,r27
7382 3ece 8857 subi r24,lo8(-5000)
7383 3ed0 9C4E sbci r25,hi8(-5000)
7384 3ed2 AF4F sbci r26,hlo8(-5000)
7385 3ed4 BF4F sbci r27,hhi8(-5000)
7386 3ed6 04F4 brge .L600
7387 3ed8 88E7 ldi r24,lo8(-5000)
7388 3eda 9CEE ldi r25,hi8(-5000)
7389 3edc AFEF ldi r26,hlo8(-5000)
7390 3ede BFEF ldi r27,hhi8(-5000)
7391 3ee0 8093 0000 sts ausgleichRoll.11,r24
7392 3ee4 9093 0000 sts (ausgleichRoll.11)+1,r25
7393 3ee8 A093 0000 sts (ausgleichRoll.11)+2,r26
7394 3eec B093 0000 sts (ausgleichRoll.11)+3,r27
7395 .L600:
7396 3ef0 2091 0000 lds r18,ausgleichRoll.11
7397 3ef4 3091 0000 lds r19,(ausgleichRoll.11)+1
7398 3ef8 4091 0000 lds r20,(ausgleichRoll.11)+2
7399 3efc 5091 0000 lds r21,(ausgleichRoll.11)+3
7400 3f00 57FF sbrs r21,7
7401 3f02 00C0 rjmp .L601
7402 3f04 2150 subi r18,lo8(-(255))
7403 3f06 3F4F sbci r19,hi8(-(255))
7404 3f08 4F4F sbci r20,hlo8(-(255))
7405 3f0a 5F4F sbci r21,hhi8(-(255))
7406 .L601:
7407 3f0c 232F mov r18,r19
7408 3f0e 342F mov r19,r20
7409 3f10 452F mov r20,r21
7410 3f12 5527 clr r21
7411 3f14 47FD sbrc r20,7
7412 3f16 5A95 dec r21
7413 3f18 8091 0000 lds r24,LageKorrekturRoll
7414 3f1c 9091 0000 lds r25,(LageKorrekturRoll)+1
7415 3f20 820F add r24,r18
7416 3f22 931F adc r25,r19
7417 3f24 9093 0000 sts (LageKorrekturRoll)+1,r25
7418 3f28 8093 0000 sts LageKorrekturRoll,r24
7419 3f2c 00C0 rjmp .L604
7420 .L596:
7421 3f2e 81E0 ldi r24,lo8(1)
7422 3f30 8093 0000 sts last_r_n.18,r24
7423 3f34 00C0 rjmp .L604
7424 .L595:
7425 3f36 1092 0000 sts last_r_n.18,__zero_reg__
7426 3f3a 00C0 rjmp .L604
7427 .L584:
7428 3f3c 1092 0000 sts (cnt.14)+1,__zero_reg__
7429 3f40 1092 0000 sts cnt.14,__zero_reg__
7430 3f44 84E6 ldi r24,lo8(100)
7431 3f46 90E0 ldi r25,hi8(100)
7432 3f48 9093 0000 sts (KompassSignalSchlecht)+1,r25
7433 3f4c 8093 0000 sts KompassSignalSchlecht,r24
7434 .L604:
7435 3f50 4889 ldd r20,Y+16
7436 3f52 242F mov r18,r20
7437 3f54 3327 clr r19
7438 3f56 8091 0000 lds r24,cnt.14
7439 3f5a 9091 0000 lds r25,(cnt.14)+1
7440 3f5e 2817 cp r18,r24
7441 3f60 3907 cpc r19,r25
7442 3f62 04F4 brge .L605
7443 3f64 3093 0000 sts (cnt.14)+1,r19
7444 3f68 2093 0000 sts cnt.14,r18
7445 .L605:
7446 3f6c 8091 0000 lds r24,FromNaviCtrl_Value+1
7447 3f70 8823 tst r24
7448 3f72 01F0 breq .L606
7449 3f74 282F mov r18,r24
7450 3f76 3327 clr r19
7451 3f78 27FD sbrc r18,7
7452 3f7a 3095 com r19
7453 3f7c 8091 0000 lds r24,cnt.14
7454 3f80 9091 0000 lds r25,(cnt.14)+1
7455 3f84 2817 cp r18,r24
7456 3f86 3907 cpc r19,r25
7457 3f88 04F4 brge .L606
7458 3f8a 3093 0000 sts (cnt.14)+1,r19
7459 3f8e 2093 0000 sts cnt.14,r18
7460 .L606:
7461 3f92 4091 0000 lds r20,IntegralFehlerRoll.4
7462 3f96 5091 0000 lds r21,(IntegralFehlerRoll.4)+1
7463 3f9a 6091 0000 lds r22,(IntegralFehlerRoll.4)+2
7464 3f9e 7091 0000 lds r23,(IntegralFehlerRoll.4)+3
7465 3fa2 4138 cpi r20,lo8(129)
7466 3fa4 5105 cpc r21,__zero_reg__
7467 3fa6 6105 cpc r22,__zero_reg__
7468 3fa8 7105 cpc r23,__zero_reg__
7469 3faa 04F0 brlt .L608
7470 3fac 8091 0000 lds r24,AdNeutralRoll
7471 3fb0 9091 0000 lds r25,(AdNeutralRoll)+1
7472 3fb4 2091 0000 lds r18,cnt.14
7473 3fb8 3091 0000 lds r19,(cnt.14)+1
7474 3fbc 820F add r24,r18
7475 3fbe 931F adc r25,r19
7476 3fc0 9093 0000 sts (AdNeutralRoll)+1,r25
7477 3fc4 8093 0000 sts AdNeutralRoll,r24
7478 .L608:
7479 3fc8 4058 subi r20,lo8(-128)
7480 3fca 5F4F sbci r21,hi8(-128)
7481 3fcc 6F4F sbci r22,hlo8(-128)
7482 3fce 7F4F sbci r23,hhi8(-128)
7483 3fd0 04F4 brge .L610
7484 3fd2 8091 0000 lds r24,AdNeutralRoll
7485 3fd6 9091 0000 lds r25,(AdNeutralRoll)+1
7486 3fda 2091 0000 lds r18,cnt.14
7487 3fde 3091 0000 lds r19,(cnt.14)+1
7488 3fe2 821B sub r24,r18
7489 3fe4 930B sbc r25,r19
7490 3fe6 9093 0000 sts (AdNeutralRoll)+1,r25
7491 3fea 8093 0000 sts AdNeutralRoll,r24
7492 3fee 00C0 rjmp .L610
7493 .L536:
7494 3ff0 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7495 3ff4 1092 0000 sts LageKorrekturRoll,__zero_reg__
7496 3ff8 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7497 3ffc 1092 0000 sts LageKorrekturNick,__zero_reg__
7498 4000 1092 0000 sts TrichterFlug,__zero_reg__
7499 .L610:
7500 4004 8091 0000 lds r24,IntegralFaktor
7501 4008 8823 tst r24
7502 400a 01F4 brne .L611
7503 400c 1092 0000 sts (LageKorrekturRoll)+1,__zero_reg__
7504 4010 1092 0000 sts LageKorrekturRoll,__zero_reg__
7505 4014 1092 0000 sts (LageKorrekturNick)+1,__zero_reg__
7506 4018 1092 0000 sts LageKorrekturNick,__zero_reg__
7507 .L611:
7508 401c 8091 0000 lds r24,MittelIntegralNick
7509 4020 9091 0000 lds r25,(MittelIntegralNick)+1
7510 4024 A091 0000 lds r26,(MittelIntegralNick)+2
7511 4028 B091 0000 lds r27,(MittelIntegralNick)+3
7512 402c 8093 0000 sts MittelIntegralNick_Alt.19,r24
7513 4030 9093 0000 sts (MittelIntegralNick_Alt.19)+1,r25
7514 4034 A093 0000 sts (MittelIntegralNick_Alt.19)+2,r26
7515 4038 B093 0000 sts (MittelIntegralNick_Alt.19)+3,r27
7516 403c 8091 0000 lds r24,MittelIntegralRoll
7517 4040 9091 0000 lds r25,(MittelIntegralRoll)+1
7518 4044 A091 0000 lds r26,(MittelIntegralRoll)+2
7519 4048 B091 0000 lds r27,(MittelIntegralRoll)+3
7520 404c 8093 0000 sts MittelIntegralRoll_Alt.20,r24
7521 4050 9093 0000 sts (MittelIntegralRoll_Alt.20)+1,r25
7522 4054 A093 0000 sts (MittelIntegralRoll_Alt.20)+2,r26
7523 4058 B093 0000 sts (MittelIntegralRoll_Alt.20)+3,r27
7524 405c 1092 0000 sts IntegralAccNick,__zero_reg__
7525 4060 1092 0000 sts (IntegralAccNick)+1,__zero_reg__
7526 4064 1092 0000 sts (IntegralAccNick)+2,__zero_reg__
7527 4068 1092 0000 sts (IntegralAccNick)+3,__zero_reg__
7528 406c 1092 0000 sts IntegralAccRoll,__zero_reg__
7529 4070 1092 0000 sts (IntegralAccRoll)+1,__zero_reg__
7530 4074 1092 0000 sts (IntegralAccRoll)+2,__zero_reg__
7531 4078 1092 0000 sts (IntegralAccRoll)+3,__zero_reg__
7532 407c 1092 0000 sts IntegralAccZ,__zero_reg__
7533 4080 1092 0000 sts (IntegralAccZ)+1,__zero_reg__
7534 4084 1092 0000 sts (IntegralAccZ)+2,__zero_reg__
7535 4088 1092 0000 sts (IntegralAccZ)+3,__zero_reg__
7536 408c 1092 0000 sts MittelIntegralNick,__zero_reg__
7537 4090 1092 0000 sts (MittelIntegralNick)+1,__zero_reg__
7538 4094 1092 0000 sts (MittelIntegralNick)+2,__zero_reg__
7539 4098 1092 0000 sts (MittelIntegralNick)+3,__zero_reg__
7540 409c 1092 0000 sts MittelIntegralRoll,__zero_reg__
7541 40a0 1092 0000 sts (MittelIntegralRoll)+1,__zero_reg__
7542 40a4 1092 0000 sts (MittelIntegralRoll)+2,__zero_reg__
7543 40a8 1092 0000 sts (MittelIntegralRoll)+3,__zero_reg__
7544 40ac 1092 0000 sts MittelIntegralNick2,__zero_reg__
7545 40b0 1092 0000 sts (MittelIntegralNick2)+1,__zero_reg__
7546 40b4 1092 0000 sts (MittelIntegralNick2)+2,__zero_reg__
7547 40b8 1092 0000 sts (MittelIntegralNick2)+3,__zero_reg__
7548 40bc 1092 0000 sts MittelIntegralRoll2,__zero_reg__
7549 40c0 1092 0000 sts (MittelIntegralRoll2)+1,__zero_reg__
7550 40c4 1092 0000 sts (MittelIntegralRoll2)+2,__zero_reg__
7551 40c8 1092 0000 sts (MittelIntegralRoll2)+3,__zero_reg__
7552 40cc 1092 0000 sts (ZaehlMessungen)+1,__zero_reg__
7553 40d0 1092 0000 sts ZaehlMessungen,__zero_reg__
7554 .L535:
7555 40d4 E090 0000 lds r14,StickGier
7556 40d8 F090 0000 lds r15,(StickGier)+1
7557 40dc C701 movw r24,r14
7558 40de F7FE sbrs r15,7
7559 40e0 00C0 rjmp .L613
7560 40e2 8827 clr r24
7561 40e4 9927 clr r25
7562 40e6 8E19 sub r24,r14
7563 40e8 9F09 sbc r25,r15
7564 .L613:
7565 40ea 0497 sbiw r24,4
7566 40ec 04F0 brlt .L612
7567 40ee 8091 0000 lds r24,Parameter_GlobalConfig
7568 40f2 84FD sbrc r24,4
7569 40f4 00C0 rjmp .L612
7570 40f6 82E3 ldi r24,lo8(50)
7571 40f8 8093 0000 sts NeueKompassRichtungMerken,r24
7572 .L612:
7573 40fc 1091 0000 lds r17,EE_Parameter+25
7574 4100 A12E mov r10,r17
7575 4102 BB24 clr r11
7576 4104 CC24 clr r12
7577 4106 DD24 clr r13
7578 4108 B701 movw r22,r14
7579 410a 8827 clr r24
7580 410c 77FD sbrc r23,7
7581 410e 8095 com r24
7582 4110 982F mov r25,r24
7583 4112 9701 movw r18,r14
7584 4114 F7FE sbrs r15,7
7585 4116 00C0 rjmp .L615
7586 4118 2227 clr r18
7587 411a 3327 clr r19
7588 411c 2E19 sub r18,r14
7589 411e 3F09 sbc r19,r15
7590 .L615:
7591 4120 4427 clr r20
7592 4122 37FD sbrc r19,7
7593 4124 4095 com r20
7594 4126 542F mov r21,r20
7595 4128 0E94 0000 call __mulsi3
7596 412c 9B01 movw r18,r22
7597 412e AC01 movw r20,r24
7598 4130 C601 movw r24,r12
7599 4132 B501 movw r22,r10
7600 4134 0E94 0000 call __mulsi3
7601 4138 97FF sbrs r25,7
7602 413a 00C0 rjmp .L616
7603 413c 6150 subi r22,lo8(-(511))
7604 413e 7E4F sbci r23,hi8(-(511))
7605 4140 8F4F sbci r24,hlo8(-(511))
7606 4142 9F4F sbci r25,hhi8(-(511))
7607 .L616:
7608 4144 59E0 ldi r21,9
7609 4146 9595 1: asr r25
7610 4148 8795 ror r24
7611 414a 7795 ror r23
7612 414c 6795 ror r22
7613 414e 5A95 dec r21
7614 4150 01F4 brne 1b
7615 4152 9B01 movw r18,r22
7616 4154 812F mov r24,r17
7617 4156 9927 clr r25
7618 4158 8E9D mul r24,r14
7619 415a D001 movw r26,r0
7620 415c 8F9D mul r24,r15
7621 415e B00D add r27,r0
7622 4160 9E9D mul r25,r14
7623 4162 B00D add r27,r0
7624 4164 1124 clr r1
7625 4166 CD01 movw r24,r26
7626 4168 B7FD sbrc r27,7
7627 416a 0396 adiw r24,3
7628 .L617:
7629 416c 9595 asr r25
7630 416e 8795 ror r24
7631 4170 9595 asr r25
7632 4172 8795 ror r24
7633 4174 280F add r18,r24
7634 4176 391F adc r19,r25
7635 4178 8091 0000 lds r24,CompassGierSetpoint
7636 417c 9091 0000 lds r25,(CompassGierSetpoint)+1
7637 4180 280F add r18,r24
7638 4182 391F adc r19,r25
7639 4184 4427 clr r20
7640 4186 37FD sbrc r19,7
7641 4188 4095 com r20
7642 418a 542F mov r21,r20
7643 418c 2093 0000 sts sollGier.0,r18
7644 4190 3093 0000 sts (sollGier.0)+1,r19
7645 4194 4093 0000 sts (sollGier.0)+2,r20
7646 4198 5093 0000 sts (sollGier.0)+3,r21
7647 419c 8091 0000 lds r24,Mess_Integral_Gier
7648 41a0 9091 0000 lds r25,(Mess_Integral_Gier)+1
7649 41a4 A091 0000 lds r26,(Mess_Integral_Gier)+2
7650 41a8 B091 0000 lds r27,(Mess_Integral_Gier)+3
7651 41ac 821B sub r24,r18
7652 41ae 930B sbc r25,r19
7653 41b0 A40B sbc r26,r20
7654 41b2 B50B sbc r27,r21
7655 41b4 8093 0000 sts Mess_Integral_Gier,r24
7656 41b8 9093 0000 sts (Mess_Integral_Gier)+1,r25
7657 41bc A093 0000 sts (Mess_Integral_Gier)+2,r26
7658 41c0 B093 0000 sts (Mess_Integral_Gier)+3,r27
7659 41c4 8155 subi r24,lo8(50001)
7660 41c6 934C sbci r25,hi8(50001)
7661 41c8 A040 sbci r26,hlo8(50001)
7662 41ca B040 sbci r27,hhi8(50001)
7663 41cc 04F0 brlt .L618
7664 41ce 80E5 ldi r24,lo8(50000)
7665 41d0 93EC ldi r25,hi8(50000)
7666 41d2 A0E0 ldi r26,hlo8(50000)
7667 41d4 B0E0 ldi r27,hhi8(50000)
7668 41d6 8093 0000 sts Mess_Integral_Gier,r24
7669 41da 9093 0000 sts (Mess_Integral_Gier)+1,r25
7670 41de A093 0000 sts (Mess_Integral_Gier)+2,r26
7671 41e2 B093 0000 sts (Mess_Integral_Gier)+3,r27
7672 .L618:
7673 41e6 8091 0000 lds r24,Mess_Integral_Gier
7674 41ea 9091 0000 lds r25,(Mess_Integral_Gier)+1
7675 41ee A091 0000 lds r26,(Mess_Integral_Gier)+2
7676 41f2 B091 0000 lds r27,(Mess_Integral_Gier)+3
7677 41f6 805B subi r24,lo8(-50000)
7678 41f8 9C43 sbci r25,hi8(-50000)
7679 41fa AF4F sbci r26,hlo8(-50000)
7680 41fc BF4F sbci r27,hhi8(-50000)
7681 41fe 04F4 brge .L619
7682 4200 80EB ldi r24,lo8(-50000)
7683 4202 9CE3 ldi r25,hi8(-50000)
7684 4204 AFEF ldi r26,hlo8(-50000)
7685 4206 BFEF ldi r27,hhi8(-50000)
7686 4208 8093 0000 sts Mess_Integral_Gier,r24
7687 420c 9093 0000 sts (Mess_Integral_Gier)+1,r25
7688 4210 A093 0000 sts (Mess_Integral_Gier)+2,r26
7689 4214 B093 0000 sts (Mess_Integral_Gier)+3,r27
7690 .L619:
7691 4218 0091 0000 lds r16,KompassValue
7692 421c 1091 0000 lds r17,(KompassValue)+1
7693 4220 17FD sbrc r17,7
7694 4222 00C0 rjmp .L620
7695 4224 8091 0000 lds r24,Parameter_GlobalConfig
7696 4228 83FF sbrs r24,3
7697 422a 00C0 rjmp .L620
7698 422c 8091 0000 lds r24,CalculateCompassTimer
7699 4230 8150 subi r24,lo8(-(-1))
7700 4232 8093 0000 sts CalculateCompassTimer,r24
7701 4236 8823 tst r24
7702 4238 01F0 breq .+2
7703 423a 00C0 rjmp .L637
7704 423c 8DE0 ldi r24,lo8(13)
7705 423e 8093 0000 sts CalculateCompassTimer,r24
7706 4242 8091 0000 lds r24,IntegralNick
7707 4246 9091 0000 lds r25,(IntegralNick)+1
7708 424a A091 0000 lds r26,(IntegralNick)+2
7709 424e B091 0000 lds r27,(IntegralNick)+3
7710 4252 B7FF sbrs r27,7
7711 4254 00C0 rjmp .L622
7712 4256 8150 subi r24,lo8(-(511))
7713 4258 9E4F sbci r25,hi8(-(511))
7714 425a AF4F sbci r26,hlo8(-(511))
7715 425c BF4F sbci r27,hhi8(-(511))
7716 .L622:
7717 425e 39E0 ldi r19,9
7718 4260 B595 1: asr r27
7719 4262 A795 ror r26
7720 4264 9795 ror r25
7721 4266 8795 ror r24
7722 4268 3A95 dec r19
7723 426a 01F4 brne 1b
7724 426c 7C01 movw r14,r24
7725 426e 97FF sbrs r25,7
7726 4270 00C0 rjmp .L623
7727 4272 F094 com r15
7728 4274 E194 neg r14
7729 4276 F108 sbc r15,__zero_reg__
7730 4278 F394 inc r15
7731 .L623:
7732 427a 8091 0000 lds r24,IntegralRoll
7733 427e 9091 0000 lds r25,(IntegralRoll)+1
7734 4282 A091 0000 lds r26,(IntegralRoll)+2
7735 4286 B091 0000 lds r27,(IntegralRoll)+3
7736 428a B7FF sbrs r27,7
7737 428c 00C0 rjmp .L624
7738 428e 8150 subi r24,lo8(-(511))
7739 4290 9E4F sbci r25,hi8(-(511))
7740 4292 AF4F sbci r26,hlo8(-(511))
7741 4294 BF4F sbci r27,hhi8(-(511))
7742 .L624:
7743 4296 29E0 ldi r18,9
7744 4298 B595 1: asr r27
7745 429a A795 ror r26
7746 429c 9795 ror r25
7747 429e 8795 ror r24
7748 42a0 2A95 dec r18
7749 42a2 01F4 brne 1b
7750 42a4 9C01 movw r18,r24
7751 42a6 97FF sbrs r25,7
7752 42a8 00C0 rjmp .L625
7753 42aa 3095 com r19
7754 42ac 2195 neg r18
7755 42ae 3F4F sbci r19,lo8(-1)
7756 .L625:
7757 42b0 E216 cp r14,r18
7758 42b2 F306 cpc r15,r19
7759 42b4 04F4 brge .L626
7760 42b6 7901 movw r14,r18
7761 .L626:
7762 42b8 B701 movw r22,r14
7763 42ba F7FE sbrs r15,7
7764 42bc 00C0 rjmp .L627
7765 42be 695F subi r22,lo8(-(7))
7766 42c0 7F4F sbci r23,hi8(-(7))
7767 .L627:
7768 42c2 2B01 movw r4,r22
7769 42c4 A3E0 ldi r26,3
7770 42c6 5594 1: asr r5
7771 42c8 4794 ror r4
7772 42ca AA95 dec r26
7773 42cc 01F4 brne 1b
7774 42ce 22E0 ldi r18,lo8(2)
7775 42d0 30E0 ldi r19,hi8(2)
7776 42d2 420E add r4,r18
7777 42d4 531E adc r5,r19
7778 42d6 6090 0000 lds r6,ErsatzKompass
7779 42da 7090 0000 lds r7,(ErsatzKompass)+1
7780 42de 8090 0000 lds r8,(ErsatzKompass)+2
7781 42e2 9090 0000 lds r9,(ErsatzKompass)+3
7782 42e6 2091 0000 lds r18,GIER_GRAD_FAKTOR
7783 42ea 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
7784 42ee 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
7785 42f2 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
7786 42f6 C401 movw r24,r8
7787 42f8 B301 movw r22,r6
7788 42fa 0E94 0000 call __divmodsi4
7789 42fe 5901 movw r10,r18
7790 4300 6A01 movw r12,r20
7791 4302 3093 0000 sts (ErsatzKompassInGrad)+1,r19
7792 4306 2093 0000 sts ErsatzKompassInGrad,r18
7793 430a 021B sub r16,r18
7794 430c 130B sbc r17,r19
7795 430e C801 movw r24,r16
7796 4310 845E subi r24,lo8(-(540))
7797 4312 9D4F sbci r25,hi8(-(540))
7798 4314 68E6 ldi r22,lo8(360)
7799 4316 71E0 ldi r23,hi8(360)
7800 4318 0E94 0000 call __divmodhi4
7801 431c 9C01 movw r18,r24
7802 431e 245B subi r18,lo8(-(-180))
7803 4320 3040 sbci r19,hi8(-(-180))
7804 4322 8091 0000 lds r24,KompassSignalSchlecht
7805 4326 9091 0000 lds r25,(KompassSignalSchlecht)+1
7806 432a 0097 sbiw r24,0
7807 432c 01F0 breq .L628
7808 432e 0197 sbiw r24,1
7809 4330 9093 0000 sts (KompassSignalSchlecht)+1,r25
7810 4334 8093 0000 sts KompassSignalSchlecht,r24
7811 4338 00C0 rjmp .L629
7812 .L628:
7813 433a 49E1 ldi r20,lo8(25)
7814 433c E416 cp r14,r20
7815 433e F104 cpc r15,__zero_reg__
7816 4340 04F4 brge .L629
7817 4342 8091 0000 lds r24,GierGyroFehler
7818 4346 9091 0000 lds r25,(GierGyroFehler)+1
7819 434a 820F add r24,r18
7820 434c 931F adc r25,r19
7821 434e 9093 0000 sts (GierGyroFehler)+1,r25
7822 4352 8093 0000 sts GierGyroFehler,r24
7823 4356 8091 0000 lds r24,NeueKompassRichtungMerken
7824 435a 8823 tst r24
7825 435c 01F0 breq .L629
7826 435e 8150 subi r24,lo8(-(-1))
7827 4360 8093 0000 sts NeueKompassRichtungMerken,r24
7828 4364 8823 tst r24
7829 4366 01F4 brne .L629
7830 4368 B092 0000 sts (KompassSollWert)+1,r11
7831 436c A092 0000 sts KompassSollWert,r10
7832 .L629:
7833 4370 8091 0000 lds r24,KompassSignalSchlecht
7834 4374 9091 0000 lds r25,(KompassSignalSchlecht)+1
7835 4378 892B or r24,r25
7836 437a 01F4 brne .L633
7837 437c 8091 0000 lds r24,KompassFusion
7838 4380 9927 clr r25
7839 4382 289F mul r18,r24
7840 4384 B001 movw r22,r0
7841 4386 299F mul r18,r25
7842 4388 700D add r23,r0
7843 438a 389F mul r19,r24
7844 438c 700D add r23,r0
7845 438e 1124 clr r1
7846 4390 CB01 movw r24,r22
7847 4392 B201 movw r22,r4
7848 4394 0E94 0000 call __divmodhi4
7849 4398 CB01 movw r24,r22
7850 439a AA27 clr r26
7851 439c 97FD sbrc r25,7
7852 439e A095 com r26
7853 43a0 BA2F mov r27,r26
7854 43a2 680E add r6,r24
7855 43a4 791E adc r7,r25
7856 43a6 8A1E adc r8,r26
7857 43a8 9B1E adc r9,r27
7858 43aa 6092 0000 sts ErsatzKompass,r6
7859 43ae 7092 0000 sts (ErsatzKompass)+1,r7
7860 43b2 8092 0000 sts (ErsatzKompass)+2,r8
7861 43b6 9092 0000 sts (ErsatzKompass)+3,r9
7862 .L633:
7863 43ba 8091 0000 lds r24,NeueKompassRichtungMerken
7864 43be 8823 tst r24
7865 43c0 01F4 brne .L620
7866 43c2 8091 0000 lds r24,KompassSollWert
7867 43c6 9091 0000 lds r25,(KompassSollWert)+1
7868 43ca 2091 0000 lds r18,ErsatzKompassInGrad
7869 43ce 3091 0000 lds r19,(ErsatzKompassInGrad)+1
7870 43d2 821B sub r24,r18
7871 43d4 930B sbc r25,r19
7872 43d6 845E subi r24,lo8(-(540))
7873 43d8 9D4F sbci r25,hi8(-(540))
7874 43da 68E6 ldi r22,lo8(360)
7875 43dc 71E0 ldi r23,hi8(360)
7876 43de 0E94 0000 call __divmodhi4
7877 43e2 9C01 movw r18,r24
7878 43e4 245B subi r18,lo8(-(-180))
7879 43e6 3040 sbci r19,hi8(-(-180))
7880 43e8 8091 0000 lds r24,Parameter_KompassWirkung
7881 43ec 8695 lsr r24
7882 43ee 9927 clr r25
7883 43f0 289F mul r18,r24
7884 43f2 D001 movw r26,r0
7885 43f4 299F mul r18,r25
7886 43f6 B00D add r27,r0
7887 43f8 389F mul r19,r24
7888 43fa B00D add r27,r0
7889 43fc 1124 clr r1
7890 43fe 9D01 movw r18,r26
7891 4400 B7FF sbrs r27,7
7892 4402 00C0 rjmp .L635
7893 4404 215F subi r18,lo8(-(15))
7894 4406 3F4F sbci r19,hi8(-(15))
7895 .L635:
7896 4408 F4E0 ldi r31,4
7897 440a 3595 1: asr r19
7898 440c 2795 ror r18
7899 440e FA95 dec r31
7900 4410 01F4 brne 1b
7901 4412 3093 0000 sts (CompassGierSetpoint)+1,r19
7902 4416 2093 0000 sts CompassGierSetpoint,r18
7903 441a 00C0 rjmp .L637
7904 .L620:
7905 441c 1092 0000 sts (CompassGierSetpoint)+1,__zero_reg__
7906 4420 1092 0000 sts CompassGierSetpoint,__zero_reg__
7907 .L637:
7908 4424 8091 0000 lds r24,TrichterFlug
7909 4428 8823 tst r24
7910 442a 01F0 breq .L638
7911 442c 1092 0000 sts SummeRoll,__zero_reg__
7912 4430 1092 0000 sts (SummeRoll)+1,__zero_reg__
7913 4434 1092 0000 sts (SummeRoll)+2,__zero_reg__
7914 4438 1092 0000 sts (SummeRoll)+3,__zero_reg__
7915 443c 1092 0000 sts SummeNick,__zero_reg__
7916 4440 1092 0000 sts (SummeNick)+1,__zero_reg__
7917 4444 1092 0000 sts (SummeNick)+2,__zero_reg__
7918 4448 1092 0000 sts (SummeNick)+3,__zero_reg__
7919 .L638:
7920 444c F090 0000 lds r15,Looping_Nick
7921 4450 FF20 tst r15
7922 4452 01F4 brne .L639
7923 4454 8091 0000 lds r24,IntegralFaktor
7924 4458 282F mov r18,r24
7925 445a 3327 clr r19
7926 445c 4427 clr r20
7927 445e 5527 clr r21
7928 4460 8091 0000 lds r24,IntegralNick
7929 4464 9091 0000 lds r25,(IntegralNick)+1
7930 4468 A091 0000 lds r26,(IntegralNick)+2
7931 446c B091 0000 lds r27,(IntegralNick)+3
7932 4470 BC01 movw r22,r24
7933 4472 CD01 movw r24,r26
7934 4474 0E94 0000 call __mulsi3
7935 4478 DC01 movw r26,r24
7936 447a CB01 movw r24,r22
7937 447c BC01 movw r22,r24
7938 447e CD01 movw r24,r26
7939 4480 28EF ldi r18,lo8(11000)
7940 4482 3AE2 ldi r19,hi8(11000)
7941 4484 40E0 ldi r20,hlo8(11000)
7942 4486 50E0 ldi r21,hhi8(11000)
7943 4488 0E94 0000 call __divmodsi4
7944 448c 3901 movw r6,r18
7945 448e 00C0 rjmp .L640
7946 .L639:
7947 4490 6624 clr r6
7948 4492 7724 clr r7
7949 .L640:
7950 4494 E090 0000 lds r14,Looping_Roll
7951 4498 EE20 tst r14
7952 449a 01F4 brne .L641
7953 449c 8091 0000 lds r24,IntegralFaktor
7954 44a0 282F mov r18,r24
7955 44a2 3327 clr r19
7956 44a4 4427 clr r20
7957 44a6 5527 clr r21
7958 44a8 8091 0000 lds r24,IntegralRoll
7959 44ac 9091 0000 lds r25,(IntegralRoll)+1
7960 44b0 A091 0000 lds r26,(IntegralRoll)+2
7961 44b4 B091 0000 lds r27,(IntegralRoll)+3
7962 44b8 BC01 movw r22,r24
7963 44ba CD01 movw r24,r26
7964 44bc 0E94 0000 call __mulsi3
7965 44c0 DC01 movw r26,r24
7966 44c2 CB01 movw r24,r22
7967 44c4 BC01 movw r22,r24
7968 44c6 CD01 movw r24,r26
7969 44c8 28EF ldi r18,lo8(11000)
7970 44ca 3AE2 ldi r19,hi8(11000)
7971 44cc 40E0 ldi r20,hlo8(11000)
7972 44ce 50E0 ldi r21,hhi8(11000)
7973 44d0 0E94 0000 call __divmodsi4
7974 44d4 2901 movw r4,r18
7975 44d6 00C0 rjmp .L642
7976 .L641:
7977 44d8 4424 clr r4
7978 44da 5524 clr r5
7979 .L642:
7980 44dc 8091 0000 lds r24,TrimNick
7981 44e0 9091 0000 lds r25,(TrimNick)+1
7982 44e4 893C cpi r24,201
7983 44e6 9105 cpc r25,__zero_reg__
7984 44e8 04F0 brlt .L643
7985 44ea 88EC ldi r24,lo8(200)
7986 44ec 90E0 ldi r25,hi8(200)
7987 44ee 00C0 rjmp .L900
7988 .L643:
7989 44f0 8853 subi r24,lo8(-200)
7990 44f2 9F4F sbci r25,hi8(-200)
7991 44f4 04F4 brge .L644
7992 44f6 88E3 ldi r24,lo8(-200)
7993 44f8 9FEF ldi r25,hi8(-200)
7994 .L900:
7995 44fa 9093 0000 sts (TrimNick)+1,r25
7996 44fe 8093 0000 sts TrimNick,r24
7997 .L644:
7998 4502 8091 0000 lds r24,TrimRoll
7999 4506 9091 0000 lds r25,(TrimRoll)+1
8000 450a 893C cpi r24,201
8001 450c 9105 cpc r25,__zero_reg__
8002 450e 04F0 brlt .L646
8003 4510 88EC ldi r24,lo8(200)
8004 4512 90E0 ldi r25,hi8(200)
8005 4514 00C0 rjmp .L901
8006 .L646:
8007 4516 8853 subi r24,lo8(-200)
8008 4518 9F4F sbci r25,hi8(-200)
8009 451a 04F4 brge .L647
8010 451c 88E3 ldi r24,lo8(-200)
8011 451e 9FEF ldi r25,hi8(-200)
8012 .L901:
8013 4520 9093 0000 sts (TrimRoll)+1,r25
8014 4524 8093 0000 sts TrimRoll,r24
8015 .L647:
8016 4528 8091 0000 lds r24,MesswertNick
8017 452c 9091 0000 lds r25,(MesswertNick)+1
8018 4530 AA27 clr r26
8019 4532 97FD sbrc r25,7
8020 4534 A095 com r26
8021 4536 BA2F mov r27,r26
8022 4538 2091 0000 lds r18,GyroFaktor
8023 453c A22E mov r10,r18
8024 453e BB24 clr r11
8025 4540 CC24 clr r12
8026 4542 DD24 clr r13
8027 4544 BC01 movw r22,r24
8028 4546 CD01 movw r24,r26
8029 4548 A601 movw r20,r12
8030 454a 9501 movw r18,r10
8031 454c 0E94 0000 call __mulsi3
8032 4550 9B01 movw r18,r22
8033 4552 AC01 movw r20,r24
8034 4554 8091 0000 lds r24,TrimNick
8035 4558 9091 0000 lds r25,(TrimNick)+1
8036 455c AA27 clr r26
8037 455e 97FD sbrc r25,7
8038 4560 A095 com r26
8039 4562 BA2F mov r27,r26
8040 4564 E7E0 ldi r30,7
8041 4566 880F 1: lsl r24
8042 4568 991F rol r25
8043 456a AA1F rol r26
8044 456c BB1F rol r27
8045 456e EA95 dec r30
8046 4570 01F4 brne 1b
8047 4572 280F add r18,r24
8048 4574 391F adc r19,r25
8049 4576 4A1F adc r20,r26
8050 4578 5B1F adc r21,r27
8051 457a 57FF sbrs r21,7
8052 457c 00C0 rjmp .L649
8053 457e 215C subi r18,lo8(-(63))
8054 4580 3F4F sbci r19,hi8(-(63))
8055 4582 4F4F sbci r20,hlo8(-(63))
8056 4584 5F4F sbci r21,hhi8(-(63))
8057 .L649:
8058 4586 76E0 ldi r23,6
8059 4588 5595 1: asr r21
8060 458a 4795 ror r20
8061 458c 3795 ror r19
8062 458e 2795 ror r18
8063 4590 7A95 dec r23
8064 4592 01F4 brne 1b
8065 4594 8301 movw r16,r6
8066 4596 020F add r16,r18
8067 4598 131F adc r17,r19
8068 459a 1093 0000 sts (MesswertNick)+1,r17
8069 459e 0093 0000 sts MesswertNick,r16
8070 45a2 8091 0000 lds r24,MesswertRoll
8071 45a6 9091 0000 lds r25,(MesswertRoll)+1
8072 45aa AA27 clr r26
8073 45ac 97FD sbrc r25,7
8074 45ae A095 com r26
8075 45b0 BA2F mov r27,r26
8076 45b2 BC01 movw r22,r24
8077 45b4 CD01 movw r24,r26
8078 45b6 A601 movw r20,r12
8079 45b8 9501 movw r18,r10
8080 45ba 0E94 0000 call __mulsi3
8081 45be 9B01 movw r18,r22
8082 45c0 AC01 movw r20,r24
8083 45c2 8091 0000 lds r24,TrimRoll
8084 45c6 9091 0000 lds r25,(TrimRoll)+1
8085 45ca AA27 clr r26
8086 45cc 97FD sbrc r25,7
8087 45ce A095 com r26
8088 45d0 BA2F mov r27,r26
8089 45d2 67E0 ldi r22,7
8090 45d4 880F 1: lsl r24
8091 45d6 991F rol r25
8092 45d8 AA1F rol r26
8093 45da BB1F rol r27
8094 45dc 6A95 dec r22
8095 45de 01F4 brne 1b
8096 45e0 280F add r18,r24
8097 45e2 391F adc r19,r25
8098 45e4 4A1F adc r20,r26
8099 45e6 5B1F adc r21,r27
8100 45e8 57FF sbrs r21,7
8101 45ea 00C0 rjmp .L650
8102 45ec 215C subi r18,lo8(-(63))
8103 45ee 3F4F sbci r19,hi8(-(63))
8104 45f0 4F4F sbci r20,hlo8(-(63))
8105 45f2 5F4F sbci r21,hhi8(-(63))
8106 .L650:
8107 45f4 F6E0 ldi r31,6
8108 45f6 5595 1: asr r21
8109 45f8 4795 ror r20
8110 45fa 3795 ror r19
8111 45fc 2795 ror r18
8112 45fe FA95 dec r31
8113 4600 01F4 brne 1b
8114 4602 4201 movw r8,r4
8115 4604 820E add r8,r18
8116 4606 931E adc r9,r19
8117 4608 9092 0000 sts (MesswertRoll)+1,r9
8118 460c 8092 0000 sts MesswertRoll,r8
8119 4610 8091 0000 lds r24,MesswertGier
8120 4614 9091 0000 lds r25,(MesswertGier)+1
8121 4618 880F add r24,r24
8122 461a 991F adc r25,r25
8123 461c AA27 clr r26
8124 461e 97FD sbrc r25,7
8125 4620 A095 com r26
8126 4622 BA2F mov r27,r26
8127 4624 2091 0000 lds r18,GyroFaktorGier
8128 4628 3327 clr r19
8129 462a 4427 clr r20
8130 462c 5527 clr r21
8131 462e BC01 movw r22,r24
8132 4630 CD01 movw r24,r26
8133 4632 0E94 0000 call __mulsi3
8134 4636 5B01 movw r10,r22
8135 4638 6C01 movw r12,r24
8136 463a 97FF sbrs r25,7
8137 463c 00C0 rjmp .L651
8138 463e 2FE3 ldi r18,lo8(63)
8139 4640 30E0 ldi r19,hi8(63)
8140 4642 40E0 ldi r20,hlo8(63)
8141 4644 50E0 ldi r21,hhi8(63)
8142 4646 A20E add r10,r18
8143 4648 B31E adc r11,r19
8144 464a C41E adc r12,r20
8145 464c D51E adc r13,r21
8146 .L651:
8147 464e E6E0 ldi r30,6
8148 4650 D594 1: asr r13
8149 4652 C794 ror r12
8150 4654 B794 ror r11
8151 4656 A794 ror r10
8152 4658 EA95 dec r30
8153 465a 01F4 brne 1b
8154 465c 8091 0000 lds r24,IntegralFaktorGier
8155 4660 282F mov r18,r24
8156 4662 3327 clr r19
8157 4664 4427 clr r20
8158 4666 5527 clr r21
8159 4668 8091 0000 lds r24,Integral_Gier
8160 466c 9091 0000 lds r25,(Integral_Gier)+1
8161 4670 A091 0000 lds r26,(Integral_Gier)+2
8162 4674 B091 0000 lds r27,(Integral_Gier)+3
8163 4678 BC01 movw r22,r24
8164 467a CD01 movw r24,r26
8165 467c 0E94 0000 call __mulsi3
8166 4680 DC01 movw r26,r24
8167 4682 CB01 movw r24,r22
8168 4684 BC01 movw r22,r24
8169 4686 CD01 movw r24,r26
8170 4688 20EF ldi r18,lo8(22000)
8171 468a 35E5 ldi r19,hi8(22000)
8172 468c 40E0 ldi r20,hlo8(22000)
8173 468e 50E0 ldi r21,hhi8(22000)
8174 4690 0E94 0000 call __divmodsi4
8175 4694 B501 movw r22,r10
8176 4696 620F add r22,r18
8177 4698 731F adc r23,r19
8178 469a 7093 0000 sts (MesswertGier)+1,r23
8179 469e 6093 0000 sts MesswertGier,r22
8180 46a2 0150 subi r16,lo8(4097)
8181 46a4 1041 sbci r17,hi8(4097)
8182 46a6 04F0 brlt .L652
8183 46a8 80E0 ldi r24,lo8(4096)
8184 46aa 90E1 ldi r25,hi8(4096)
8185 46ac 9093 0000 sts (MesswertNick)+1,r25
8186 46b0 8093 0000 sts MesswertNick,r24
8187 .L652:
8188 46b4 8091 0000 lds r24,MesswertNick
8189 46b8 9091 0000 lds r25,(MesswertNick)+1
8190 46bc 8050 subi r24,lo8(-4096)
8191 46be 904F sbci r25,hi8(-4096)
8192 46c0 04F4 brge .L653
8193 46c2 80E0 ldi r24,lo8(-4096)
8194 46c4 90EF ldi r25,hi8(-4096)
8195 46c6 9093 0000 sts (MesswertNick)+1,r25
8196 46ca 8093 0000 sts MesswertNick,r24
8197 .L653:
8198 46ce 51E0 ldi r21,lo8(4097)
8199 46d0 8516 cp r8,r21
8200 46d2 50E1 ldi r21,hi8(4097)
8201 46d4 9506 cpc r9,r21
8202 46d6 04F0 brlt .L654
8203 46d8 80E0 ldi r24,lo8(4096)
8204 46da 90E1 ldi r25,hi8(4096)
8205 46dc 9093 0000 sts (MesswertRoll)+1,r25
8206 46e0 8093 0000 sts MesswertRoll,r24
8207 .L654:
8208 46e4 8091 0000 lds r24,MesswertRoll
8209 46e8 9091 0000 lds r25,(MesswertRoll)+1
8210 46ec 8050 subi r24,lo8(-4096)
8211 46ee 904F sbci r25,hi8(-4096)
8212 46f0 04F4 brge .L655
8213 46f2 80E0 ldi r24,lo8(-4096)
8214 46f4 90EF ldi r25,hi8(-4096)
8215 46f6 9093 0000 sts (MesswertRoll)+1,r25
8216 46fa 8093 0000 sts MesswertRoll,r24
8217 .L655:
8218 46fe 6150 subi r22,lo8(4097)
8219 4700 7041 sbci r23,hi8(4097)
8220 4702 04F0 brlt .L656
8221 4704 80E0 ldi r24,lo8(4096)
8222 4706 90E1 ldi r25,hi8(4096)
8223 4708 9093 0000 sts (MesswertGier)+1,r25
8224 470c 8093 0000 sts MesswertGier,r24
8225 .L656:
8226 4710 8091 0000 lds r24,MesswertGier
8227 4714 9091 0000 lds r25,(MesswertGier)+1
8228 4718 8050 subi r24,lo8(-4096)
8229 471a 904F sbci r25,hi8(-4096)
8230 471c 04F4 brge .L657
8231 471e 80E0 ldi r24,lo8(-4096)
8232 4720 90EF ldi r25,hi8(-4096)
8233 4722 9093 0000 sts (MesswertGier)+1,r25
8234 4726 8093 0000 sts MesswertGier,r24
8235 .L657:
8236 472a 8091 0000 lds r24,BattLowVoltageWarning
8237 472e 482F mov r20,r24
8238 4730 5527 clr r21
8239 4732 8091 0000 lds r24,UBat
8240 4736 9091 0000 lds r25,(UBat)+1
8241 473a 4817 cp r20,r24
8242 473c 5907 cpc r21,r25
8243 473e 04F4 brge .L658
8244 4740 2091 0000 lds r18,UBat
8245 4744 3091 0000 lds r19,(UBat)+1
8246 4748 0981 ldd r16,Y+1
8247 474a 1A81 ldd r17,Y+2
8248 474c 049F mul r16,r20
8249 474e C001 movw r24,r0
8250 4750 059F mul r16,r21
8251 4752 900D add r25,r0
8252 4754 149F mul r17,r20
8253 4756 900D add r25,r0
8254 4758 1124 clr r1
8255 475a B901 movw r22,r18
8256 475c 0E94 0000 call __udivmodhi4
8257 4760 7A83 std Y+2,r23
8258 4762 6983 std Y+1,r22
8259 .L658:
8260 4764 2981 ldd r18,Y+1
8261 4766 3A81 ldd r19,Y+2
8262 4768 220F lsl r18
8263 476a 331F rol r19
8264 476c 220F lsl r18
8265 476e 331F rol r19
8266 4770 3A83 std Y+2,r19
8267 4772 2983 std Y+1,r18
8268 4774 4091 0000 lds r20,Parameter_GlobalConfig
8269 4778 40FD sbrc r20,0
8270 477a 00C0 rjmp .+4
8271 477c 0C94 0000 jmp .L659
8272 4780 EE20 tst r14
8273 4782 01F0 breq .+4
8274 4784 0C94 0000 jmp .L659
8275 4788 FF20 tst r15
8276 478a 01F0 breq .+4
8277 478c 0C94 0000 jmp .L659
8278 4790 00E0 ldi r16,lo8(0)
8279 4792 10E0 ldi r17,hi8(0)
8280 4794 4801 movw r8,r16
8281 4796 8091 0000 lds r24,HoverGas
8282 479a 9091 0000 lds r25,(HoverGas)+1
8283 479e 9093 0000 sts (DebugOut+44)+1,r25
8284 47a2 8093 0000 sts DebugOut+44,r24
8285 47a6 2091 0000 lds r18,BaroExpandActive
8286 47aa 3091 0000 lds r19,(BaroExpandActive)+1
8287 47ae 2115 cp r18,__zero_reg__
8288 47b0 3105 cpc r19,__zero_reg__
8289 47b2 01F0 breq .+2
8290 47b4 00C0 rjmp .L660
8291 47b6 8091 0000 lds r24,MessLuftdruck
8292 47ba 9091 0000 lds r25,(MessLuftdruck)+1
8293 47be 8959 subi r24,lo8(921)
8294 47c0 9340 sbci r25,hi8(921)
8295 47c2 00F0 brlo .L661
8296 47c4 87B5 in r24,71-0x20
8297 47c6 803F cpi r24,lo8(-16)
8298 47c8 00F4 brsh .L662
8299 47ca 8091 0000 lds r24,ExpandBaro
8300 47ce 8150 subi r24,lo8(-(-1))
8301 47d0 00C0 rjmp .L902
8302 .L662:
8303 47d2 81E0 ldi r24,lo8(1)
8304 47d4 8093 0000 sts BaroAtLowerLimit.26,r24
8305 47d8 00C0 rjmp .L669
8306 .L661:
8307 47da 8091 0000 lds r24,MessLuftdruck
8308 47de 9091 0000 lds r25,(MessLuftdruck)+1
8309 47e2 8436 cpi r24,100
8310 47e4 9105 cpc r25,__zero_reg__
8311 47e6 00F4 brsh .L665
8312 47e8 87B5 in r24,71-0x20
8313 47ea 8031 cpi r24,lo8(16)
8314 47ec 00F0 brlo .L666
8315 47ee 8091 0000 lds r24,ExpandBaro
8316 47f2 8F5F subi r24,lo8(-(1))
8317 .L902:
8318 47f4 8093 0000 sts ExpandBaro,r24
8319 47f8 9FE0 ldi r25,lo8(15)
8320 47fa 8902 muls r24,r25
8321 47fc 9001 movw r18,r0
8322 47fe 1124 clr r1
8323 4800 8091 0000 lds r24,DruckOffsetSetting
8324 4804 821B sub r24,r18
8325 4806 87BD out 71-0x20,r24
8326 4808 8CE2 ldi r24,lo8(300)
8327 480a 91E0 ldi r25,hi8(300)
8328 480c 9093 0000 sts (beeptime)+1,r25
8329 4810 8093 0000 sts beeptime,r24
8330 4814 8EE5 ldi r24,lo8(350)
8331 4816 91E0 ldi r25,hi8(350)
8332 4818 9093 0000 sts (BaroExpandActive)+1,r25
8333 481c 8093 0000 sts BaroExpandActive,r24
8334 4820 00C0 rjmp .L669
8335 .L666:
8336 4822 81E0 ldi r24,lo8(1)
8337 4824 8093 0000 sts BaroAtUpperLimit.25,r24
8338 4828 00C0 rjmp .L669
8339 .L665:
8340 482a F092 0000 sts BaroAtUpperLimit.25,r15
8341 482e F092 0000 sts BaroAtLowerLimit.26,r15
8342 4832 00C0 rjmp .L669
8343 .L660:
8344 4834 8091 0000 lds r24,HoehenWert
8345 4838 9091 0000 lds r25,(HoehenWert)+1
8346 483c A091 0000 lds r26,(HoehenWert)+2
8347 4840 B091 0000 lds r27,(HoehenWert)+3
8348 4844 64E0 ldi r22,4
8349 4846 880F 1: lsl r24
8350 4848 991F rol r25
8351 484a AA1F rol r26
8352 484c BB1F rol r27
8353 484e 6A95 dec r22
8354 4850 01F4 brne 1b
8355 4852 8093 0000 sts SummenHoehe,r24
8356 4856 9093 0000 sts (SummenHoehe)+1,r25
8357 485a A093 0000 sts (SummenHoehe)+2,r26
8358 485e B093 0000 sts (SummenHoehe)+3,r27
8359 4862 1093 0000 sts (VarioMeter)+1,r17
8360 4866 0093 0000 sts VarioMeter,r16
8361 486a 2150 subi r18,lo8(-(-1))
8362 486c 3040 sbci r19,hi8(-(-1))
8363 486e 3093 0000 sts (BaroExpandActive)+1,r19
8364 4872 2093 0000 sts BaroExpandActive,r18
8365 .L669:
8366 4876 2091 0000 lds r18,Parameter_HoehenSchalter
8367 487a 41FF sbrs r20,1
8368 487c 00C0 rjmp .L670
8369 487e 2233 cpi r18,lo8(50)
8370 4880 00F4 brsh .L671
8371 4882 8091 0000 lds r24,delay.24
8372 4886 8150 subi r24,lo8(-(-1))
8373 4888 8093 0000 sts delay.24,r24
8374 488c 8F3F cpi r24,lo8(-1)
8375 488e 01F0 breq .+2
8376 4890 00C0 rjmp .L677
8377 4892 8091 0000 lds r24,SpeakHoTT
8378 4896 8823 tst r24
8379 4898 01F4 brne .L673
8380 489a 8091 0000 lds r24,HoehenReglerAktiv
8381 489e 8823 tst r24
8382 48a0 01F0 breq .L673
8383 48a2 88E2 ldi r24,lo8(40)
8384 48a4 8093 0000 sts SpeakHoTT,r24
8385 .L673:
8386 48a8 1092 0000 sts HoehenReglerAktiv,__zero_reg__
8387 48ac 8091 0000 lds r24,HoehenWert
8388 48b0 9091 0000 lds r25,(HoehenWert)+1
8389 48b4 A091 0000 lds r26,(HoehenWert)+2
8390 48b8 B091 0000 lds r27,(HoehenWert)+3
8391 48bc 8093 0000 sts SollHoehe,r24
8392 48c0 9093 0000 sts (SollHoehe)+1,r25
8393 48c4 A093 0000 sts (SollHoehe)+2,r26
8394 48c8 B093 0000 sts (SollHoehe)+3,r27
8395 48cc 81E0 ldi r24,lo8(1)
8396 48ce 8093 0000 sts delay.24,r24
8397 48d2 00C0 rjmp .L677
8398 .L671:
8399 48d4 2734 cpi r18,lo8(71)
8400 48d6 00F0 brlo .L677
8401 48d8 8091 0000 lds r24,SpeakHoTT
8402 48dc 8823 tst r24
8403 48de 01F4 brne .L676
8404 48e0 8091 0000 lds r24,HoehenReglerAktiv
8405 48e4 8823 tst r24
8406 48e6 01F4 brne .L676
8407 48e8 87E2 ldi r24,lo8(39)
8408 48ea 8093 0000 sts SpeakHoTT,r24
8409 .L676:
8410 48ee 88EC ldi r24,lo8(-56)
8411 48f0 8093 0000 sts delay.24,r24
8412 48f4 00C0 rjmp .L903
8413 .L670:
8414 48f6 8091 0000 lds r24,ExternHoehenValue
8415 48fa 9091 0000 lds r25,(ExternHoehenValue)+1
8416 48fe 820F add r24,r18
8417 4900 911D adc r25,__zero_reg__
8418 4902 2091 0000 lds r18,EE_Parameter+18
8419 4906 3327 clr r19
8420 4908 829F mul r24,r18
8421 490a A001 movw r20,r0
8422 490c 839F mul r24,r19
8423 490e 500D add r21,r0
8424 4910 929F mul r25,r18
8425 4912 500D add r21,r0
8426 4914 1124 clr r1
8427 4916 CA01 movw r24,r20
8428 4918 AA27 clr r26
8429 491a 97FD sbrc r25,7
8430 491c A095 com r26
8431 491e BA2F mov r27,r26
8432 4920 8093 0000 sts SollHoehe,r24
8433 4924 9093 0000 sts (SollHoehe)+1,r25
8434 4928 A093 0000 sts (SollHoehe)+2,r26
8435 492c B093 0000 sts (SollHoehe)+3,r27
8436 .L903:
8437 4930 81E0 ldi r24,lo8(1)
8438 4932 8093 0000 sts HoehenReglerAktiv,r24
8439 .L677:
8440 4936 8091 0000 lds r24,IntegralNick
8441 493a 9091 0000 lds r25,(IntegralNick)+1
8442 493e A091 0000 lds r26,(IntegralNick)+2
8443 4942 B091 0000 lds r27,(IntegralNick)+3
8444 4946 E090 0000 lds r14,GIER_GRAD_FAKTOR
8445 494a F090 0000 lds r15,(GIER_GRAD_FAKTOR)+1
8446 494e 0091 0000 lds r16,(GIER_GRAD_FAKTOR)+2
8447 4952 1091 0000 lds r17,(GIER_GRAD_FAKTOR)+3
8448 4956 BC01 movw r22,r24
8449 4958 CD01 movw r24,r26
8450 495a A801 movw r20,r16
8451 495c 9701 movw r18,r14
8452 495e 0E94 0000 call __divmodsi4
8453 4962 5901 movw r10,r18
8454 4964 6A01 movw r12,r20
8455 4966 8091 0000 lds r24,IntegralRoll
8456 496a 9091 0000 lds r25,(IntegralRoll)+1
8457 496e A091 0000 lds r26,(IntegralRoll)+2
8458 4972 B091 0000 lds r27,(IntegralRoll)+3
8459 4976 BC01 movw r22,r24
8460 4978 CD01 movw r24,r26
8461 497a A801 movw r20,r16
8462 497c 9701 movw r18,r14
8463 497e 0E94 0000 call __divmodsi4
8464 4982 B901 movw r22,r18
8465 4984 C501 movw r24,r10
8466 4986 0E94 0000 call ihypot
8467 498a 5C01 movw r10,r24
8468 498c CC97 sbiw r24,60
8469 498e 04F0 brlt .L678
8470 4990 5CE3 ldi r21,lo8(60)
8471 4992 A52E mov r10,r21
8472 4994 B12C mov r11,__zero_reg__
8473 .L678:
8474 4996 C501 movw r24,r10
8475 4998 0E94 0000 call c_cos_8192
8476 499c 5C01 movw r10,r24
8477 499e 80E2 ldi r24,lo8(32)
8478 49a0 8093 0000 sts VarioCharacter,r24
8479 49a4 1092 0000 sts (AltitudeSetpointTrimming)+1,__zero_reg__
8480 49a8 1092 0000 sts AltitudeSetpointTrimming,__zero_reg__
8481 49ac 8091 0000 lds r24,HoehenReglerAktiv
8482 49b0 8823 tst r24
8483 49b2 01F4 brne .+2
8484 49b4 00C0 rjmp .L679
8485 49b6 8091 0000 lds r24,FC_StatusFlags
8486 49ba 9927 clr r25
8487 49bc 9C01 movw r18,r24
8488 49be 2071 andi r18,lo8(16)
8489 49c0 3070 andi r19,hi8(16)
8490 49c2 84FD sbrc r24,4
8491 49c4 00C0 rjmp .L679
8492 49c6 8091 0000 lds r24,FC_StatusFlags2
8493 49ca 8260 ori r24,lo8(2)
8494 49cc 8093 0000 sts FC_StatusFlags2,r24
8495 49d0 7091 0000 lds r23,Parameter_ExtraConfig
8496 49d4 872F mov r24,r23
8497 49d6 9927 clr r25
8498 49d8 41E0 ldi r20,lo8(1)
8499 49da C42E mov r12,r20
8500 49dc D12C mov r13,__zero_reg__
8501 49de C822 and r12,r24
8502 49e0 D922 and r13,r25
8503 49e2 80FD sbrc r24,0
8504 49e4 00C0 rjmp .L681
8505 49e6 8091 0000 lds r24,Parameter_GlobalConfig
8506 49ea 81FD sbrc r24,1
8507 49ec 00C0 rjmp .L680
8508 .L681:
8509 49ee C980 ldd r12,Y+1
8510 49f0 DA80 ldd r13,Y+2
8511 49f2 3093 0000 sts (HeightTrimming.21)+1,r19
8512 49f6 2093 0000 sts HeightTrimming.21,r18
8513 49fa 3093 0000 sts (AltitudeSetpointTrimming)+1,r19
8514 49fe 2093 0000 sts AltitudeSetpointTrimming,r18
8515 4a02 8091 0000 lds r24,FC_StatusFlags
8516 4a06 806C ori r24,lo8(-64)
8517 4a08 8093 0000 sts FC_StatusFlags,r24
8518 4a0c 00C0 rjmp .L682
8519 .L680:
8520 4a0e 8091 0000 lds r24,FC_StatusFlags
8521 4a12 81FF sbrs r24,1
8522 4a14 00C0 rjmp .L683
8523 4a16 0091 0000 lds r16,StickGasHover
8524 4a1a 1091 0000 lds r17,(StickGasHover)+1
8525 4a1e C801 movw r24,r16
8526 4a20 0F96 adiw r24,15
8527 4a22 2090 0000 lds r2,StickGas
8528 4a26 3090 0000 lds r3,(StickGas)+1
8529 4a2a 8215 cp r24,r2
8530 4a2c 9305 cpc r25,r3
8531 4a2e 04F0 brlt .+2
8532 4a30 00C0 rjmp .L684
8533 4a32 8091 0000 lds r24,BaroAtUpperLimit.25
8534 4a36 8823 tst r24
8535 4a38 01F0 breq .+2
8536 4a3a 00C0 rjmp .L684
8537 4a3c 8091 0000 lds r24,FC_StatusFlags
8538 4a40 87FF sbrs r24,7
8539 4a42 00C0 rjmp .L685
8540 4a44 8091 0000 lds r24,FC_StatusFlags
8541 4a48 8F77 andi r24,lo8(127)
8542 4a4a 8093 0000 sts FC_StatusFlags,r24
8543 4a4e 8091 0000 lds r24,HoehenWert
8544 4a52 9091 0000 lds r25,(HoehenWert)+1
8545 4a56 A091 0000 lds r26,(HoehenWert)+2
8546 4a5a B091 0000 lds r27,(HoehenWert)+3
8547 4a5e 8093 0000 sts SollHoehe,r24
8548 4a62 9093 0000 sts (SollHoehe)+1,r25
8549 4a66 A093 0000 sts (SollHoehe)+2,r26
8550 4a6a B093 0000 sts (SollHoehe)+3,r27
8551 .L685:
8552 4a6e 8091 0000 lds r24,FC_StatusFlags
8553 4a72 8064 ori r24,lo8(64)
8554 4a74 8093 0000 sts FC_StatusFlags,r24
8555 4a78 E090 0000 lds r14,Parameter_MaximumAltitude
8556 4a7c EE20 tst r14
8557 4a7e 01F0 breq .L686
8558 4a80 8091 0000 lds r24,SollHoehe
8559 4a84 9091 0000 lds r25,(SollHoehe)+1
8560 4a88 A091 0000 lds r26,(SollHoehe)+2
8561 4a8c B091 0000 lds r27,(SollHoehe)+3
8562 4a90 BC01 movw r22,r24
8563 4a92 CD01 movw r24,r26
8564 4a94 24E6 ldi r18,lo8(100)
8565 4a96 30E0 ldi r19,hi8(100)
8566 4a98 40E0 ldi r20,hlo8(100)
8567 4a9a 50E0 ldi r21,hhi8(100)
8568 4a9c 0E94 0000 call __divmodsi4
8569 4aa0 8E2D mov r24,r14
8570 4aa2 9927 clr r25
8571 4aa4 AA27 clr r26
8572 4aa6 BB27 clr r27
8573 4aa8 8217 cp r24,r18
8574 4aaa 9307 cpc r25,r19
8575 4aac A407 cpc r26,r20
8576 4aae B507 cpc r27,r21
8577 4ab0 04F4 brge .L686
8578 4ab2 D092 0000 sts (AltitudeSetpointTrimming)+1,r13
8579 4ab6 C092 0000 sts AltitudeSetpointTrimming,r12
8580 4aba 00C0 rjmp .L687
8581 .L686:
8582 4abc C101 movw r24,r2
8583 4abe 801B sub r24,r16
8584 4ac0 910B sbc r25,r17
8585 4ac2 0F97 sbiw r24,15
8586 4ac4 97FF sbrs r25,7
8587 4ac6 00C0 rjmp .L688
8588 4ac8 9095 com r25
8589 4aca 8195 neg r24
8590 4acc 9F4F sbci r25,lo8(-1)
8591 .L688:
8592 4ace 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8593 4ad2 8093 0000 sts AltitudeSetpointTrimming,r24
8594 4ad6 8BE2 ldi r24,lo8(43)
8595 4ad8 8093 0000 sts VarioCharacter,r24
8596 .L687:
8597 4adc 1092 0000 sts WaypointTrimming,__zero_reg__
8598 4ae0 00C0 rjmp .L689
8599 .L684:
8600 4ae2 C801 movw r24,r16
8601 4ae4 0F97 sbiw r24,15
8602 4ae6 2816 cp r2,r24
8603 4ae8 3906 cpc r3,r25
8604 4aea 04F4 brge .L690
8605 4aec 2091 0000 lds r18,BaroAtLowerLimit.26
8606 4af0 2223 tst r18
8607 4af2 01F4 brne .L690
8608 4af4 8091 0000 lds r24,FC_StatusFlags
8609 4af8 86FF sbrs r24,6
8610 4afa 00C0 rjmp .L691
8611 4afc 8091 0000 lds r24,FC_StatusFlags
8612 4b00 8F7B andi r24,lo8(-65)
8613 4b02 8093 0000 sts FC_StatusFlags,r24
8614 4b06 8091 0000 lds r24,HoehenWert
8615 4b0a 9091 0000 lds r25,(HoehenWert)+1
8616 4b0e A091 0000 lds r26,(HoehenWert)+2
8617 4b12 B091 0000 lds r27,(HoehenWert)+3
8618 4b16 8093 0000 sts SollHoehe,r24
8619 4b1a 9093 0000 sts (SollHoehe)+1,r25
8620 4b1e A093 0000 sts (SollHoehe)+2,r26
8621 4b22 B093 0000 sts (SollHoehe)+3,r27
8622 .L691:
8623 4b26 8091 0000 lds r24,FC_StatusFlags
8624 4b2a 8068 ori r24,lo8(-128)
8625 4b2c 8093 0000 sts FC_StatusFlags,r24
8626 4b30 C101 movw r24,r2
8627 4b32 801B sub r24,r16
8628 4b34 910B sbc r25,r17
8629 4b36 0F96 adiw r24,15
8630 4b38 97FF sbrs r25,7
8631 4b3a 00C0 rjmp .L692
8632 4b3c 9095 com r25
8633 4b3e 8195 neg r24
8634 4b40 9F4F sbci r25,lo8(-1)
8635 .L692:
8636 4b42 9095 com r25
8637 4b44 8195 neg r24
8638 4b46 9F4F sbci r25,lo8(-1)
8639 4b48 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8640 4b4c 8093 0000 sts AltitudeSetpointTrimming,r24
8641 4b50 8DE2 ldi r24,lo8(45)
8642 4b52 8093 0000 sts VarioCharacter,r24
8643 4b56 2093 0000 sts WaypointTrimming,r18
8644 4b5a 00C0 rjmp .L689
8645 .L690:
8646 4b5c 8DE3 ldi r24,lo8(61)
8647 4b5e 8093 0000 sts VarioCharacter,r24
8648 4b62 6091 0000 lds r22,FromNC_AltitudeSpeed
8649 4b66 6623 tst r22
8650 4b68 01F0 breq .L694
8651 4b6a 2091 0000 lds r18,FromNC_AltitudeSetpoint
8652 4b6e 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8653 4b72 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8654 4b76 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8655 4b7a 8091 0000 lds r24,SollHoehe
8656 4b7e 9091 0000 lds r25,(SollHoehe)+1
8657 4b82 A091 0000 lds r26,(SollHoehe)+2
8658 4b86 B091 0000 lds r27,(SollHoehe)+3
8659 4b8a 8217 cp r24,r18
8660 4b8c 9307 cpc r25,r19
8661 4b8e A407 cpc r26,r20
8662 4b90 B507 cpc r27,r21
8663 4b92 04F4 brge .L694
8664 4b94 8091 0000 lds r24,FC_StatusFlags
8665 4b98 8064 ori r24,lo8(64)
8666 4b9a 8093 0000 sts FC_StatusFlags,r24
8667 4b9e 862F mov r24,r22
8668 4ba0 9927 clr r25
8669 4ba2 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8670 4ba6 8093 0000 sts AltitudeSetpointTrimming,r24
8671 4baa 8AE0 ldi r24,lo8(10)
8672 4bac 8093 0000 sts WaypointTrimming,r24
8673 4bb0 8EE5 ldi r24,lo8(94)
8674 4bb2 8093 0000 sts VarioCharacter,r24
8675 4bb6 8091 0000 lds r24,FC_StatusFlags
8676 4bba 87FF sbrs r24,7
8677 4bbc 00C0 rjmp .L689
8678 4bbe 8091 0000 lds r24,FC_StatusFlags
8679 4bc2 8F77 andi r24,lo8(127)
8680 4bc4 00C0 rjmp .L905
8681 .L694:
8682 4bc6 6623 tst r22
8683 4bc8 01F4 brne .+2
8684 4bca 00C0 rjmp .L697
8685 4bcc 2091 0000 lds r18,FromNC_AltitudeSetpoint
8686 4bd0 3091 0000 lds r19,(FromNC_AltitudeSetpoint)+1
8687 4bd4 4091 0000 lds r20,(FromNC_AltitudeSetpoint)+2
8688 4bd8 5091 0000 lds r21,(FromNC_AltitudeSetpoint)+3
8689 4bdc 8091 0000 lds r24,SollHoehe
8690 4be0 9091 0000 lds r25,(SollHoehe)+1
8691 4be4 A091 0000 lds r26,(SollHoehe)+2
8692 4be8 B091 0000 lds r27,(SollHoehe)+3
8693 4bec 2817 cp r18,r24
8694 4bee 3907 cpc r19,r25
8695 4bf0 4A07 cpc r20,r26
8696 4bf2 5B07 cpc r21,r27
8697 4bf4 04F4 brge .L697
8698 4bf6 8091 0000 lds r24,FC_StatusFlags
8699 4bfa 8068 ori r24,lo8(-128)
8700 4bfc 8093 0000 sts FC_StatusFlags,r24
8701 4c00 862F mov r24,r22
8702 4c02 9927 clr r25
8703 4c04 9095 com r25
8704 4c06 8195 neg r24
8705 4c08 9F4F sbci r25,lo8(-1)
8706 4c0a 9093 0000 sts (AltitudeSetpointTrimming)+1,r25
8707 4c0e 8093 0000 sts AltitudeSetpointTrimming,r24
8708 4c12 86EF ldi r24,lo8(-10)
8709 4c14 8093 0000 sts WaypointTrimming,r24
8710 4c18 86E7 ldi r24,lo8(118)
8711 4c1a 8093 0000 sts VarioCharacter,r24
8712 4c1e 8091 0000 lds r24,FC_StatusFlags
8713 4c22 86FF sbrs r24,6
8714 4c24 00C0 rjmp .L689
8715 4c26 8091 0000 lds r24,FC_StatusFlags
8716 4c2a 8F7B andi r24,lo8(-65)
8717 .L905:
8718 4c2c 8093 0000 sts FC_StatusFlags,r24
8719 4c30 8091 0000 lds r24,HoehenWert
8720 4c34 9091 0000 lds r25,(HoehenWert)+1
8721 4c38 A091 0000 lds r26,(HoehenWert)+2
8722 4c3c B091 0000 lds r27,(HoehenWert)+3
8723 4c40 8093 0000 sts SollHoehe,r24
8724 4c44 9093 0000 sts (SollHoehe)+1,r25
8725 4c48 A093 0000 sts (SollHoehe)+2,r26
8726 4c4c B093 0000 sts (SollHoehe)+3,r27
8727 4c50 00C0 rjmp .L689
8728 .L697:
8729 4c52 8091 0000 lds r24,FC_StatusFlags
8730 4c56 807C andi r24,lo8(-64)
8731 4c58 01F4 brne .+2
8732 4c5a 00C0 rjmp .L689
8733 4c5c 8091 0000 lds r24,WaypointTrimming
8734 4c60 8823 tst r24
8735 4c62 01F4 brne .L701
8736 4c64 E090 0000 lds r14,HoehenWert
8737 4c68 F090 0000 lds r15,(HoehenWert)+1
8738 4c6c 0091 0000 lds r16,(HoehenWert)+2
8739 4c70 1091 0000 lds r17,(HoehenWert)+3
8740 4c74 D801 movw r26,r16
8741 4c76 C701 movw r24,r14
8742 4c78 8058 subi r24,lo8(-(-128))
8743 4c7a 9040 sbci r25,hi8(-(-128))
8744 4c7c A040 sbci r26,hlo8(-(-128))
8745 4c7e B040 sbci r27,hhi8(-(-128))
8746 4c80 2091 0000 lds r18,SollHoehe
8747 4c84 3091 0000 lds r19,(SollHoehe)+1
8748 4c88 4091 0000 lds r20,(SollHoehe)+2
8749 4c8c 5091 0000 lds r21,(SollHoehe)+3
8750 4c90 8217 cp r24,r18
8751 4c92 9307 cpc r25,r19
8752 4c94 A407 cpc r26,r20
8753 4c96 B507 cpc r27,r21
8754 4c98 04F4 brge .L904
8755 4c9a D801 movw r26,r16
8756 4c9c C701 movw r24,r14
8757 4c9e 8058 subi r24,lo8(-(128))
8758 4ca0 9F4F sbci r25,hi8(-(128))
8759 4ca2 AF4F sbci r26,hlo8(-(128))
8760 4ca4 BF4F sbci r27,hhi8(-(128))
8761 4ca6 2817 cp r18,r24
8762 4ca8 3907 cpc r19,r25
8763 4caa 4A07 cpc r20,r26
8764 4cac 5B07 cpc r21,r27
8765 4cae 04F0 brlt .L705
8766 .L904:
8767 4cb0 8093 0000 sts SollHoehe,r24
8768 4cb4 9093 0000 sts (SollHoehe)+1,r25
8769 4cb8 A093 0000 sts (SollHoehe)+2,r26
8770 4cbc B093 0000 sts (SollHoehe)+3,r27
8771 4cc0 00C0 rjmp .L705
8772 .L701:
8773 4cc2 1092 0000 sts WaypointTrimming,__zero_reg__
8774 .L705:
8775 4cc6 8091 0000 lds r24,FC_StatusFlags
8776 4cca 8F73 andi r24,lo8(63)
8777 4ccc 8093 0000 sts FC_StatusFlags,r24
8778 4cd0 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8779 4cd4 1092 0000 sts HeightTrimming.21,__zero_reg__
8780 4cd8 71FF sbrs r23,1
8781 4cda 00C0 rjmp .L706
8782 4cdc 84EF ldi r24,lo8(500)
8783 4cde 91E0 ldi r25,hi8(500)
8784 4ce0 9093 0000 sts (beeptime)+1,r25
8785 4ce4 8093 0000 sts beeptime,r24
8786 .L706:
8787 4ce8 8091 0000 lds r24,StartTrigger
8788 4cec 8823 tst r24
8789 4cee 01F4 brne .L689
8790 4cf0 8091 0000 lds r24,HoehenWert
8791 4cf4 9091 0000 lds r25,(HoehenWert)+1
8792 4cf8 A091 0000 lds r26,(HoehenWert)+2
8793 4cfc B091 0000 lds r27,(HoehenWert)+3
8794 4d00 C397 sbiw r24,51
8795 4d02 A105 cpc r26,__zero_reg__
8796 4d04 B105 cpc r27,__zero_reg__
8797 4d06 04F0 brlt .L689
8798 4d08 81E0 ldi r24,lo8(1)
8799 4d0a 8093 0000 sts StartTrigger,r24
8800 .L689:
8801 4d0e 6091 0000 lds r22,HeightTrimming.21
8802 4d12 7091 0000 lds r23,(HeightTrimming.21)+1
8803 4d16 8091 0000 lds r24,AltitudeSetpointTrimming
8804 4d1a 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
8805 4d1e 680F add r22,r24
8806 4d20 791F adc r23,r25
8807 4d22 7093 0000 sts (HeightTrimming.21)+1,r23
8808 4d26 6093 0000 sts HeightTrimming.21,r22
8809 4d2a CB01 movw r24,r22
8810 4d2c 77FF sbrs r23,7
8811 4d2e 00C0 rjmp .L709
8812 4d30 8827 clr r24
8813 4d32 9927 clr r25
8814 4d34 861B sub r24,r22
8815 4d36 970B sbc r25,r23
8816 .L709:
8817 4d38 855F subi r24,lo8(501)
8818 4d3a 9140 sbci r25,hi8(501)
8819 4d3c 04F4 brge .+2
8820 4d3e 00C0 rjmp .L708
8821 4d40 4091 0000 lds r20,WaypointTrimming
8822 4d44 4423 tst r20
8823 4d46 01F0 breq .L710
8824 4d48 8091 0000 lds r24,FromNC_AltitudeSetpoint
8825 4d4c 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8826 4d50 2091 0000 lds r18,SollHoehe
8827 4d54 3091 0000 lds r19,(SollHoehe)+1
8828 4d58 821B sub r24,r18
8829 4d5a 930B sbc r25,r19
8830 4d5c 0996 adiw r24,9
8831 4d5e 4397 sbiw r24,19
8832 4d60 00F4 brsh .L711
8833 4d62 8091 0000 lds r24,FromNC_AltitudeSetpoint
8834 4d66 9091 0000 lds r25,(FromNC_AltitudeSetpoint)+1
8835 4d6a A091 0000 lds r26,(FromNC_AltitudeSetpoint)+2
8836 4d6e B091 0000 lds r27,(FromNC_AltitudeSetpoint)+3
8837 4d72 00C0 rjmp .L907
8838 .L711:
8839 4d74 242F mov r18,r20
8840 4d76 3327 clr r19
8841 4d78 27FD sbrc r18,7
8842 4d7a 3095 com r19
8843 4d7c 432F mov r20,r19
8844 4d7e 532F mov r21,r19
8845 4d80 8091 0000 lds r24,SollHoehe
8846 4d84 9091 0000 lds r25,(SollHoehe)+1
8847 4d88 A091 0000 lds r26,(SollHoehe)+2
8848 4d8c B091 0000 lds r27,(SollHoehe)+3
8849 4d90 820F add r24,r18
8850 4d92 931F adc r25,r19
8851 4d94 A41F adc r26,r20
8852 4d96 B51F adc r27,r21
8853 .L907:
8854 4d98 8093 0000 sts SollHoehe,r24
8855 4d9c 9093 0000 sts (SollHoehe)+1,r25
8856 4da0 A093 0000 sts (SollHoehe)+2,r26
8857 4da4 B093 0000 sts (SollHoehe)+3,r27
8858 4da8 00C0 rjmp .L713
8859 .L710:
8860 4daa 8091 0000 lds r24,EE_Parameter+18
8861 4dae 2091 0000 lds r18,SollHoehe
8862 4db2 3091 0000 lds r19,(SollHoehe)+1
8863 4db6 4091 0000 lds r20,(SollHoehe)+2
8864 4dba 5091 0000 lds r21,(SollHoehe)+3
8865 4dbe 1616 cp __zero_reg__,r22
8866 4dc0 1706 cpc __zero_reg__,r23
8867 4dc2 04F4 brge .L714
8868 4dc4 63E0 ldi r22,lo8(3)
8869 4dc6 0E94 0000 call __udivmodqi4
8870 4dca 280F add r18,r24
8871 4dcc 311D adc r19,__zero_reg__
8872 4dce 411D adc r20,__zero_reg__
8873 4dd0 511D adc r21,__zero_reg__
8874 4dd2 00C0 rjmp .L906
8875 .L714:
8876 4dd4 63E0 ldi r22,lo8(3)
8877 4dd6 0E94 0000 call __udivmodqi4
8878 4dda 281B sub r18,r24
8879 4ddc 3109 sbc r19,__zero_reg__
8880 4dde 4109 sbc r20,__zero_reg__
8881 4de0 5109 sbc r21,__zero_reg__
8882 .L906:
8883 4de2 2093 0000 sts SollHoehe,r18
8884 4de6 3093 0000 sts (SollHoehe)+1,r19
8885 4dea 4093 0000 sts (SollHoehe)+2,r20
8886 4dee 5093 0000 sts (SollHoehe)+3,r21
8887 .L713:
8888 4df2 1092 0000 sts (HeightTrimming.21)+1,__zero_reg__
8889 4df6 1092 0000 sts HeightTrimming.21,__zero_reg__
8890 4dfa E090 0000 lds r14,HoehenWert
8891 4dfe F090 0000 lds r15,(HoehenWert)+1
8892 4e02 0091 0000 lds r16,(HoehenWert)+2
8893 4e06 1091 0000 lds r17,(HoehenWert)+3
8894 4e0a D801 movw r26,r16
8895 4e0c C701 movw r24,r14
8896 4e0e 8050 subi r24,lo8(-(-1024))
8897 4e10 9440 sbci r25,hi8(-(-1024))
8898 4e12 A040 sbci r26,hlo8(-(-1024))
8899 4e14 B040 sbci r27,hhi8(-(-1024))
8900 4e16 2091 0000 lds r18,SollHoehe
8901 4e1a 3091 0000 lds r19,(SollHoehe)+1
8902 4e1e 4091 0000 lds r20,(SollHoehe)+2
8903 4e22 5091 0000 lds r21,(SollHoehe)+3
8904 4e26 8217 cp r24,r18
8905 4e28 9307 cpc r25,r19
8906 4e2a A407 cpc r26,r20
8907 4e2c B507 cpc r27,r21
8908 4e2e 04F4 brge .L908
8909 4e30 D801 movw r26,r16
8910 4e32 C701 movw r24,r14
8911 4e34 8050 subi r24,lo8(-(1024))
8912 4e36 9C4F sbci r25,hi8(-(1024))
8913 4e38 AF4F sbci r26,hlo8(-(1024))
8914 4e3a BF4F sbci r27,hhi8(-(1024))
8915 4e3c 2817 cp r18,r24
8916 4e3e 3907 cpc r19,r25
8917 4e40 4A07 cpc r20,r26
8918 4e42 5B07 cpc r21,r27
8919 4e44 04F0 brlt .L717
8920 .L908:
8921 4e46 8093 0000 sts SollHoehe,r24
8922 4e4a 9093 0000 sts (SollHoehe)+1,r25
8923 4e4e A093 0000 sts (SollHoehe)+2,r26
8924 4e52 B093 0000 sts (SollHoehe)+3,r27
8925 .L717:
8926 4e56 8091 0000 lds r24,Parameter_ExtraConfig
8927 4e5a 81FF sbrs r24,1
8928 4e5c 00C0 rjmp .L719
8929 4e5e 84E6 ldi r24,lo8(100)
8930 4e60 90E0 ldi r25,hi8(100)
8931 4e62 9093 0000 sts (beeptime)+1,r25
8932 4e66 8093 0000 sts beeptime,r24
8933 .L719:
8934 4e6a 8091 0000 lds r24,EE_Parameter+22
8935 4e6e 8823 tst r24
8936 4e70 01F4 brne .L708
8937 4e72 8091 0000 lds r24,FromNC_AltitudeSpeed
8938 4e76 8823 tst r24
8939 4e78 01F4 brne .L708
8940 4e7a 4091 0000 lds r20,HoverGas
8941 4e7e 5091 0000 lds r21,(HoverGas)+1
8942 4e82 57FF sbrs r21,7
8943 4e84 00C0 rjmp .L721
8944 4e86 4D5F subi r20,lo8(-(3))
8945 4e88 5F4F sbci r21,hi8(-(3))
8946 .L721:
8947 4e8a 5595 asr r21
8948 4e8c 4795 ror r20
8949 4e8e 5595 asr r21
8950 4e90 4795 ror r20
8951 4e92 8091 0000 lds r24,UBat
8952 4e96 9091 0000 lds r25,(UBat)+1
8953 4e9a 2091 0000 lds r18,BattLowVoltageWarning
8954 4e9e 3327 clr r19
8955 4ea0 489F mul r20,r24
8956 4ea2 F001 movw r30,r0
8957 4ea4 499F mul r20,r25
8958 4ea6 F00D add r31,r0
8959 4ea8 589F mul r21,r24
8960 4eaa F00D add r31,r0
8961 4eac 1124 clr r1
8962 4eae CF01 movw r24,r30
8963 4eb0 B901 movw r22,r18
8964 4eb2 0E94 0000 call __divmodhi4
8965 4eb6 7093 0000 sts (StickGasHover)+1,r23
8966 4eba 6093 0000 sts StickGasHover,r22
8967 4ebe 6634 cpi r22,70
8968 4ec0 7105 cpc r23,__zero_reg__
8969 4ec2 04F4 brge .L722
8970 4ec4 86E4 ldi r24,lo8(70)
8971 4ec6 90E0 ldi r25,hi8(70)
8972 4ec8 00C0 rjmp .L909
8973 .L722:
8974 4eca 6739 cpi r22,151
8975 4ecc 7105 cpc r23,__zero_reg__
8976 4ece 04F0 brlt .L708
8977 4ed0 86E9 ldi r24,lo8(150)
8978 4ed2 90E0 ldi r25,hi8(150)
8979 .L909:
8980 4ed4 9093 0000 sts (StickGasHover)+1,r25
8981 4ed8 8093 0000 sts StickGasHover,r24
8982 .L708:
8983 4edc 8091 0000 lds r24,BaroExpandActive
8984 4ee0 9091 0000 lds r25,(BaroExpandActive)+1
8985 4ee4 892B or r24,r25
8986 4ee6 01F0 breq .L726
8987 4ee8 8091 0000 lds r24,HoehenWert
8988 4eec 9091 0000 lds r25,(HoehenWert)+1
8989 4ef0 A091 0000 lds r26,(HoehenWert)+2
8990 4ef4 B091 0000 lds r27,(HoehenWert)+3
8991 4ef8 8093 0000 sts SollHoehe,r24
8992 4efc 9093 0000 sts (SollHoehe)+1,r25
8993 4f00 A093 0000 sts (SollHoehe)+2,r26
8994 4f04 B093 0000 sts (SollHoehe)+3,r27
8995 4f08 00C0 rjmp .L726
8996 .L683:
8997 4f0a 8091 0000 lds r24,HoehenWert
8998 4f0e 9091 0000 lds r25,(HoehenWert)+1
8999 4f12 A091 0000 lds r26,(HoehenWert)+2
9000 4f16 B091 0000 lds r27,(HoehenWert)+3
9001 4f1a 8059 subi r24,lo8(-(-400))
9002 4f1c 9140 sbci r25,hi8(-(-400))
9003 4f1e A040 sbci r26,hlo8(-(-400))
9004 4f20 B040 sbci r27,hhi8(-(-400))
9005 4f22 8093 0000 sts SollHoehe,r24
9006 4f26 9093 0000 sts (SollHoehe)+1,r25
9007 4f2a A093 0000 sts (SollHoehe)+2,r26
9008 4f2e B093 0000 sts (SollHoehe)+3,r27
9009 4f32 8091 0000 lds r24,EE_Parameter+22
9010 4f36 8823 tst r24
9011 4f38 01F0 breq .L727
9012 4f3a 9927 clr r25
9013 4f3c 00C0 rjmp .L910
9014 .L727:
9015 4f3e 88E7 ldi r24,lo8(120)
9016 4f40 90E0 ldi r25,hi8(120)
9017 .L910:
9018 4f42 9093 0000 sts (StickGasHover)+1,r25
9019 4f46 8093 0000 sts StickGasHover,r24
9020 4f4a E980 ldd r14,Y+1
9021 4f4c FA80 ldd r15,Y+2
9022 4f4e F092 0000 sts (HoverGas)+1,r15
9023 4f52 E092 0000 sts HoverGas,r14
9024 4f56 8EE2 ldi r24,lo8(46)
9025 4f58 8093 0000 sts VarioCharacter,r24
9026 .L726:
9027 4f5c C090 0000 lds r12,HoverGas
9028 4f60 D090 0000 lds r13,(HoverGas)+1
9029 .L682:
9030 4f64 E090 0000 lds r14,HoehenWert
9031 4f68 F090 0000 lds r15,(HoehenWert)+1
9032 4f6c 0091 0000 lds r16,(HoehenWert)+2
9033 4f70 1091 0000 lds r17,(HoehenWert)+3
9034 4f74 2091 0000 lds r18,SollHoehe
9035 4f78 3091 0000 lds r19,(SollHoehe)+1
9036 4f7c 4091 0000 lds r20,(SollHoehe)+2
9037 4f80 5091 0000 lds r21,(SollHoehe)+3
9038 4f84 2E15 cp r18,r14
9039 4f86 3F05 cpc r19,r15
9040 4f88 4007 cpc r20,r16
9041 4f8a 5107 cpc r21,r17
9042 4f8c 04F0 brlt .L730
9043 4f8e 8091 0000 lds r24,Parameter_ExtraConfig
9044 4f92 80FD sbrc r24,0
9045 4f94 00C0 rjmp .L788
9046 .L730:
9047 4f96 8091 0000 lds r24,BaroExpandActive
9048 4f9a 9091 0000 lds r25,(BaroExpandActive)+1
9049 4f9e 892B or r24,r25
9050 4fa0 01F0 breq .L731
9051 4fa2 C090 0000 lds r12,HoverGas
9052 4fa6 D090 0000 lds r13,(HoverGas)+1
9053 4faa 00E0 ldi r16,lo8(0)
9054 4fac 10E0 ldi r17,hi8(0)
9055 4fae 00C0 rjmp .L732
9056 .L731:
9057 4fb0 D801 movw r26,r16
9058 4fb2 C701 movw r24,r14
9059 4fb4 821B sub r24,r18
9060 4fb6 930B sbc r25,r19
9061 4fb8 A40B sbc r26,r20
9062 4fba B50B sbc r27,r21
9063 4fbc 8093 0000 sts tmp_long.1,r24
9064 4fc0 9093 0000 sts (tmp_long.1)+1,r25
9065 4fc4 A093 0000 sts (tmp_long.1)+2,r26
9066 4fc8 B093 0000 sts (tmp_long.1)+3,r27
9067 4fcc 8230 cpi r24,lo8(-32766)
9068 4fce 00E8 ldi r16,hi8(-32766)
9069 4fd0 9007 cpc r25,r16
9070 4fd2 0FEF ldi r16,hlo8(-32766)
9071 4fd4 A007 cpc r26,r16
9072 4fd6 0FEF ldi r16,hhi8(-32766)
9073 4fd8 B007 cpc r27,r16
9074 4fda 04F4 brge .L733
9075 4fdc 81E0 ldi r24,lo8(-32767)
9076 4fde 90E8 ldi r25,hi8(-32767)
9077 4fe0 AFEF ldi r26,hlo8(-32767)
9078 4fe2 BFEF ldi r27,hhi8(-32767)
9079 4fe4 00C0 rjmp .L911
9080 .L733:
9081 4fe6 8F5F subi r24,lo8(32767)
9082 4fe8 9F47 sbci r25,hi8(32767)
9083 4fea A040 sbci r26,hlo8(32767)
9084 4fec B040 sbci r27,hhi8(32767)
9085 4fee 04F0 brlt .L734
9086 4ff0 8FEF ldi r24,lo8(32767)
9087 4ff2 9FE7 ldi r25,hi8(32767)
9088 4ff4 A0E0 ldi r26,hlo8(32767)
9089 4ff6 B0E0 ldi r27,hhi8(32767)
9090 .L911:
9091 4ff8 8093 0000 sts tmp_long.1,r24
9092 4ffc 9093 0000 sts (tmp_long.1)+1,r25
9093 5000 A093 0000 sts (tmp_long.1)+2,r26
9094 5004 B093 0000 sts (tmp_long.1)+3,r27
9095 .L734:
9096 5008 0091 0000 lds r16,tmp_long.1
9097 500c 1091 0000 lds r17,(tmp_long.1)+1
9098 5010 8091 0000 lds r24,Parameter_Hoehe_P
9099 5014 282F mov r18,r24
9100 5016 3327 clr r19
9101 5018 4427 clr r20
9102 501a 5527 clr r21
9103 501c 8091 0000 lds r24,tmp_long.1
9104 5020 9091 0000 lds r25,(tmp_long.1)+1
9105 5024 A091 0000 lds r26,(tmp_long.1)+2
9106 5028 B091 0000 lds r27,(tmp_long.1)+3
9107 502c BC01 movw r22,r24
9108 502e CD01 movw r24,r26
9109 5030 0E94 0000 call __mulsi3
9110 5034 97FF sbrs r25,7
9111 5036 00C0 rjmp .L736
9112 5038 615E subi r22,lo8(-(31))
9113 503a 7F4F sbci r23,hi8(-(31))
9114 503c 8F4F sbci r24,hlo8(-(31))
9115 503e 9F4F sbci r25,hhi8(-(31))
9116 .L736:
9117 5040 25E0 ldi r18,5
9118 5042 9595 1: asr r25
9119 5044 8795 ror r24
9120 5046 7795 ror r23
9121 5048 6795 ror r22
9122 504a 2A95 dec r18
9123 504c 01F4 brne 1b
9124 504e 6093 0000 sts tmp_long.1,r22
9125 5052 7093 0000 sts (tmp_long.1)+1,r23
9126 5056 8093 0000 sts (tmp_long.1)+2,r24
9127 505a 9093 0000 sts (tmp_long.1)+3,r25
9128 505e 6530 cpi r22,lo8(-507)
9129 5060 2EEF ldi r18,hi8(-507)
9130 5062 7207 cpc r23,r18
9131 5064 2FEF ldi r18,hlo8(-507)
9132 5066 8207 cpc r24,r18
9133 5068 2FEF ldi r18,hhi8(-507)
9134 506a 9207 cpc r25,r18
9135 506c 04F4 brge .L737
9136 506e 84E0 ldi r24,lo8(-508)
9137 5070 9EEF ldi r25,hi8(-508)
9138 5072 AFEF ldi r26,hlo8(-508)
9139 5074 BFEF ldi r27,hhi8(-508)
9140 5076 00C0 rjmp .L912
9141 .L737:
9142 5078 6050 subi r22,lo8(1024)
9143 507a 7440 sbci r23,hi8(1024)
9144 507c 8040 sbci r24,hlo8(1024)
9145 507e 9040 sbci r25,hhi8(1024)
9146 5080 04F0 brlt .L738
9147 5082 80E0 ldi r24,lo8(1024)
9148 5084 94E0 ldi r25,hi8(1024)
9149 5086 A0E0 ldi r26,hlo8(1024)
9150 5088 B0E0 ldi r27,hhi8(1024)
9151 .L912:
9152 508a 8093 0000 sts tmp_long.1,r24
9153 508e 9093 0000 sts (tmp_long.1)+1,r25
9154 5092 A093 0000 sts (tmp_long.1)+2,r26
9155 5096 B093 0000 sts (tmp_long.1)+3,r27
9156 .L738:
9157 509a 8090 0000 lds r8,tmp_long.1
9158 509e 9090 0000 lds r9,(tmp_long.1)+1
9159 50a2 2091 0000 lds r18,VarioMeter
9160 50a6 3091 0000 lds r19,(VarioMeter)+1
9161 50aa 37FF sbrs r19,7
9162 50ac 00C0 rjmp .L740
9163 50ae 295F subi r18,lo8(-(7))
9164 50b0 3F4F sbci r19,hi8(-(7))
9165 .L740:
9166 50b2 83E0 ldi r24,3
9167 50b4 3595 1: asr r19
9168 50b6 2795 ror r18
9169 50b8 8A95 dec r24
9170 50ba 01F4 brne 1b
9171 50bc 4FEF ldi r20,hi8(-126)
9172 50be 2238 cpi r18,lo8(-126)
9173 50c0 3407 cpc r19,r20
9174 50c2 04F4 brge .L741
9175 50c4 21E8 ldi r18,lo8(-127)
9176 50c6 3FEF ldi r19,hi8(-127)
9177 50c8 00C0 rjmp .L742
9178 .L741:
9179 50ca 2038 cpi r18,128
9180 50cc 3105 cpc r19,__zero_reg__
9181 50ce 04F0 brlt .L742
9182 50d0 20E8 ldi r18,lo8(128)
9183 50d2 30E0 ldi r19,hi8(128)
9184 .L742:
9185 50d4 C901 movw r24,r18
9186 50d6 AA27 clr r26
9187 50d8 97FD sbrc r25,7
9188 50da A095 com r26
9189 50dc BA2F mov r27,r26
9190 50de 2091 0000 lds r18,Parameter_Luftdruck_D
9191 50e2 3327 clr r19
9192 50e4 4427 clr r20
9193 50e6 5527 clr r21
9194 50e8 BC01 movw r22,r24
9195 50ea CD01 movw r24,r26
9196 50ec 0E94 0000 call __mulsi3
9197 50f0 97FF sbrs r25,7
9198 50f2 00C0 rjmp .L744
9199 50f4 6D5F subi r22,lo8(-(3))
9200 50f6 7F4F sbci r23,hi8(-(3))
9201 50f8 8F4F sbci r24,hlo8(-(3))
9202 50fa 9F4F sbci r25,hhi8(-(3))
9203 .L744:
9204 50fc B2E0 ldi r27,2
9205 50fe 9595 1: asr r25
9206 5100 8795 ror r24
9207 5102 7795 ror r23
9208 5104 6795 ror r22
9209 5106 BA95 dec r27
9210 5108 01F4 brne 1b
9211 510a 9B01 movw r18,r22
9212 510c 5FEF ldi r21,hi8(-255)
9213 510e 6130 cpi r22,lo8(-255)
9214 5110 7507 cpc r23,r21
9215 5112 04F4 brge .L745
9216 5114 20E0 ldi r18,lo8(-256)
9217 5116 3FEF ldi r19,hi8(-256)
9218 5118 00C0 rjmp .L746
9219 .L745:
9220 511a 6F3F cpi r22,255
9221 511c 7105 cpc r23,__zero_reg__
9222 511e 01F0 breq .L746
9223 5120 04F0 brlt .L746
9224 5122 20E0 ldi r18,lo8(256)
9225 5124 31E0 ldi r19,hi8(256)
9226 .L746:
9227 5126 8091 0000 lds r24,FC_StatusFlags
9228 512a 807C andi r24,lo8(-64)
9229 512c 01F0 breq .L748
9230 512e C901 movw r24,r18
9231 5130 37FD sbrc r19,7
9232 5132 0396 adiw r24,3
9233 .L749:
9234 5134 9C01 movw r18,r24
9235 5136 3595 asr r19
9236 5138 2795 ror r18
9237 513a 3595 asr r19
9238 513c 2795 ror r18
9239 513e 00C0 rjmp .L750
9240 .L748:
9241 5140 8091 0000 lds r24,Parameter_ExtraConfig
9242 5144 80FF sbrs r24,0
9243 5146 00C0 rjmp .L750
9244 5148 C901 movw r24,r18
9245 514a 37FD sbrc r19,7
9246 514c 0796 adiw r24,7
9247 .L752:
9248 514e 9C01 movw r18,r24
9249 5150 F3E0 ldi r31,3
9250 5152 3595 1: asr r19
9251 5154 2795 ror r18
9252 5156 FA95 dec r31
9253 5158 01F4 brne 1b
9254 .L750:
9255 515a 820E add r8,r18
9256 515c 931E adc r9,r19
9257 .L732:
9258 515e 2091 0000 lds r18,Parameter_Hoehe_ACC_Wirkung
9259 5162 2223 tst r18
9260 5164 01F4 brne .+2
9261 5166 00C0 rjmp .L753
9262 5168 6091 0000 lds r22,Mess_Integral_Hoch
9263 516c 7091 0000 lds r23,(Mess_Integral_Hoch)+1
9264 5170 8091 0000 lds r24,(Mess_Integral_Hoch)+2
9265 5174 9091 0000 lds r25,(Mess_Integral_Hoch)+3
9266 5178 97FF sbrs r25,7
9267 517a 00C0 rjmp .L754
9268 517c 6158 subi r22,lo8(-(127))
9269 517e 7F4F sbci r23,hi8(-(127))
9270 5180 8F4F sbci r24,hlo8(-(127))
9271 5182 9F4F sbci r25,hhi8(-(127))
9272 .L754:
9273 5184 E7E0 ldi r30,7
9274 5186 9595 1: asr r25
9275 5188 8795 ror r24
9276 518a 7795 ror r23
9277 518c 6795 ror r22
9278 518e EA95 dec r30
9279 5190 01F4 brne 1b
9280 5192 3327 clr r19
9281 5194 4427 clr r20
9282 5196 5527 clr r21
9283 5198 0E94 0000 call __mulsi3
9284 519c 97FF sbrs r25,7
9285 519e 00C0 rjmp .L755
9286 51a0 615E subi r22,lo8(-(31))
9287 51a2 7F4F sbci r23,hi8(-(31))
9288 51a4 8F4F sbci r24,hlo8(-(31))
9289 51a6 9F4F sbci r25,hhi8(-(31))
9290 .L755:
9291 51a8 55E0 ldi r21,5
9292 51aa 9595 1: asr r25
9293 51ac 8795 ror r24
9294 51ae 7795 ror r23
9295 51b0 6795 ror r22
9296 51b2 5A95 dec r21
9297 51b4 01F4 brne 1b
9298 51b6 6093 0000 sts tmp_long.1,r22
9299 51ba 7093 0000 sts (tmp_long.1)+1,r23
9300 51be 8093 0000 sts (tmp_long.1)+2,r24
9301 51c2 9093 0000 sts (tmp_long.1)+3,r25
9302 51c6 6138 cpi r22,lo8(-127)
9303 51c8 AFEF ldi r26,hi8(-127)
9304 51ca 7A07 cpc r23,r26
9305 51cc AFEF ldi r26,hlo8(-127)
9306 51ce 8A07 cpc r24,r26
9307 51d0 AFEF ldi r26,hhi8(-127)
9308 51d2 9A07 cpc r25,r26
9309 51d4 04F4 brge .L756
9310 51d6 80E8 ldi r24,lo8(-128)
9311 51d8 9FEF ldi r25,hi8(-128)
9312 51da AFEF ldi r26,hlo8(-128)
9313 51dc BFEF ldi r27,hhi8(-128)
9314 51de 00C0 rjmp .L913
9315 .L756:
9316 51e0 6F3F cpi r22,lo8(255)
9317 51e2 7105 cpc r23,__zero_reg__
9318 51e4 8105 cpc r24,__zero_reg__
9319 51e6 9105 cpc r25,__zero_reg__
9320 51e8 01F0 breq .L757
9321 51ea 04F0 brlt .L757
9322 51ec 80E0 ldi r24,lo8(256)
9323 51ee 91E0 ldi r25,hi8(256)
9324 51f0 A0E0 ldi r26,hlo8(256)
9325 51f2 B0E0 ldi r27,hhi8(256)
9326 .L913:
9327 51f4 8093 0000 sts tmp_long.1,r24
9328 51f8 9093 0000 sts (tmp_long.1)+1,r25
9329 51fc A093 0000 sts (tmp_long.1)+2,r26
9330 5200 B093 0000 sts (tmp_long.1)+3,r27
9331 .L757:
9332 5204 8091 0000 lds r24,tmp_long.1
9333 5208 9091 0000 lds r25,(tmp_long.1)+1
9334 520c 880E add r8,r24
9335 520e 991E adc r9,r25
9336 .L753:
9337 5210 8091 0000 lds r24,Parameter_Hoehe_GPS_Z
9338 5214 282F mov r18,r24
9339 5216 3327 clr r19
9340 5218 8091 0000 lds r24,FromNaviCtrl_Value+4
9341 521c 9927 clr r25
9342 521e 87FD sbrc r24,7
9343 5220 9095 com r25
9344 5222 289F mul r18,r24
9345 5224 F001 movw r30,r0
9346 5226 299F mul r18,r25
9347 5228 F00D add r31,r0
9348 522a 389F mul r19,r24
9349 522c F00D add r31,r0
9350 522e 1124 clr r1
9351 5230 9F01 movw r18,r30
9352 5232 F7FF sbrs r31,7
9353 5234 00C0 rjmp .L759
9354 5236 2158 subi r18,lo8(-(127))
9355 5238 3F4F sbci r19,hi8(-(127))
9356 .L759:
9357 523a 220F lsl r18
9358 523c 232F mov r18,r19
9359 523e 221F rol r18
9360 5240 330B sbc r19,r19
9361 5242 FFEF ldi r31,hi8(-127)
9362 5244 2138 cpi r18,lo8(-127)
9363 5246 3F07 cpc r19,r31
9364 5248 04F4 brge .L760
9365 524a 20E8 ldi r18,lo8(-128)
9366 524c 3FEF ldi r19,hi8(-128)
9367 524e 00C0 rjmp .L761
9368 .L760:
9369 5250 2F3F cpi r18,255
9370 5252 3105 cpc r19,__zero_reg__
9371 5254 01F0 breq .L761
9372 5256 04F0 brlt .L761
9373 5258 20E0 ldi r18,lo8(256)
9374 525a 31E0 ldi r19,hi8(256)
9375 .L761:
9376 525c 820E add r8,r18
9377 525e 931E adc r9,r19
9378 5260 C401 movw r24,r8
9379 5262 AA27 clr r26
9380 5264 97FD sbrc r25,7
9381 5266 A095 com r26
9382 5268 BA2F mov r27,r26
9383 526a E090 0000 lds r14,HoverGas
9384 526e F090 0000 lds r15,(HoverGas)+1
9385 5272 9701 movw r18,r14
9386 5274 4427 clr r20
9387 5276 37FD sbrc r19,7
9388 5278 4095 com r20
9389 527a 542F mov r21,r20
9390 527c BC01 movw r22,r24
9391 527e CD01 movw r24,r26
9392 5280 0E94 0000 call __mulsi3
9393 5284 97FF sbrs r25,7
9394 5286 00C0 rjmp .L763
9395 5288 6150 subi r22,lo8(-(511))
9396 528a 7E4F sbci r23,hi8(-(511))
9397 528c 8F4F sbci r24,hlo8(-(511))
9398 528e 9F4F sbci r25,hhi8(-(511))
9399 .L763:
9400 5290 29E0 ldi r18,9
9401 5292 9595 1: asr r25
9402 5294 8795 ror r24
9403 5296 7795 ror r23
9404 5298 6795 ror r22
9405 529a 2A95 dec r18
9406 529c 01F4 brne 1b
9407 529e C61A sub r12,r22
9408 52a0 D70A sbc r13,r23
9409 52a2 8091 0000 lds r24,AltitudeSetpointTrimming
9410 52a6 9091 0000 lds r25,(AltitudeSetpointTrimming)+1
9411 52aa 892B or r24,r25
9412 52ac 01F0 breq .+2
9413 52ae 00C0 rjmp .L764
9414 52b0 1E14 cp __zero_reg__,r14
9415 52b2 1F04 cpc __zero_reg__,r15
9416 52b4 04F0 brlt .+2
9417 52b6 00C0 rjmp .L764
9418 52b8 9801 movw r18,r16
9419 52ba 17FF sbrs r17,7
9420 52bc 00C0 rjmp .L765
9421 52be 3095 com r19
9422 52c0 2195 neg r18
9423 52c2 3F4F sbci r19,lo8(-1)
9424 .L765:
9425 52c4 2D33 cpi r18,61
9426 52c6 3105 cpc r19,__zero_reg__
9427 52c8 00F4 brsh .L766
9428 52ca 8091 0000 lds r24,HoverGasMin
9429 52ce 9091 0000 lds r25,(HoverGasMin)+1
9430 52d2 8C15 cp r24,r12
9431 52d4 9D05 cpc r25,r13
9432 52d6 04F4 brge .L915
9433 52d8 00C0 rjmp .L924
9434 .L766:
9435 52da 2C53 subi r18,lo8(-(-60))
9436 52dc 3040 sbci r19,hi8(-(-60))
9437 52de 85E0 ldi r24,5
9438 52e0 3695 1: lsr r19
9439 52e2 2795 ror r18
9440 52e4 8A95 dec r24
9441 52e6 01F4 brne 1b
9442 52e8 2031 cpi r18,16
9443 52ea 3105 cpc r19,__zero_reg__
9444 52ec 00F0 brlo .L771
9445 52ee 2FE0 ldi r18,lo8(15)
9446 52f0 30E0 ldi r19,hi8(15)
9447 .L771:
9448 52f2 4091 0000 lds r20,HoverGasMin
9449 52f6 5091 0000 lds r21,(HoverGasMin)+1
9450 52fa 1016 cp __zero_reg__,r16
9451 52fc 1106 cpc __zero_reg__,r17
9452 52fe 04F4 brge .L772
9453 5300 80E1 ldi r24,lo8(16)
9454 5302 90E0 ldi r25,hi8(16)
9455 5304 821B sub r24,r18
9456 5306 930B sbc r25,r19
9457 5308 489F mul r20,r24
9458 530a 9001 movw r18,r0
9459 530c 499F mul r20,r25
9460 530e 300D add r19,r0
9461 5310 589F mul r21,r24
9462 5312 300D add r19,r0
9463 5314 1124 clr r1
9464 5316 B4E0 ldi r27,4
9465 5318 3695 1: lsr r19
9466 531a 2795 ror r18
9467 531c BA95 dec r27
9468 531e 01F4 brne 1b
9469 5320 2C15 cp r18,r12
9470 5322 3D05 cpc r19,r13
9471 5324 00F4 brsh .L914
9472 .L924:
9473 5326 8091 0000 lds r24,HoverGasMax
9474 532a 9091 0000 lds r25,(HoverGasMax)+1
9475 532e C816 cp r12,r24
9476 5330 D906 cpc r13,r25
9477 5332 04F0 brlt .L764
9478 .L915:
9479 5334 6C01 movw r12,r24
9480 5336 00C0 rjmp .L764
9481 .L772:
9482 5338 205F subi r18,lo8(-(16))
9483 533a 3F4F sbci r19,hi8(-(16))
9484 533c 8091 0000 lds r24,HoverGasMax
9485 5340 9091 0000 lds r25,(HoverGasMax)+1
9486 5344 829F mul r24,r18
9487 5346 8001 movw r16,r0
9488 5348 839F mul r24,r19
9489 534a 100D add r17,r0
9490 534c 929F mul r25,r18
9491 534e 100D add r17,r0
9492 5350 1124 clr r1
9493 5352 9801 movw r18,r16
9494 5354 A4E0 ldi r26,4
9495 5356 3695 1: lsr r19
9496 5358 2795 ror r18
9497 535a AA95 dec r26
9498 535c 01F4 brne 1b
9499 535e 4C15 cp r20,r12
9500 5360 5D05 cpc r21,r13
9501 5362 04F0 brlt .L777
9502 5364 6A01 movw r12,r20
9503 5366 00C0 rjmp .L764
9504 .L777:
9505 5368 C216 cp r12,r18
9506 536a D306 cpc r13,r19
9507 536c 00F0 brlo .L764
9508 .L914:
9509 536e 6901 movw r12,r18
9510 .L764:
9511 5370 C601 movw r24,r12
9512 5372 AA27 clr r26
9513 5374 97FD sbrc r25,7
9514 5376 A095 com r26
9515 5378 BA2F mov r27,r26
9516 537a FDE0 ldi r31,13
9517 537c 880F 1: lsl r24
9518 537e 991F rol r25
9519 5380 AA1F rol r26
9520 5382 BB1F rol r27
9521 5384 FA95 dec r31
9522 5386 01F4 brne 1b
9523 5388 9501 movw r18,r10
9524 538a 4427 clr r20
9525 538c 37FD sbrc r19,7
9526 538e 4095 com r20
9527 5390 542F mov r21,r20
9528 5392 BC01 movw r22,r24
9529 5394 CD01 movw r24,r26
9530 5396 0E94 0000 call __divmodsi4
9531 539a 2093 0000 sts tmp_long2.2,r18
9532 539e 3093 0000 sts (tmp_long2.2)+1,r19
9533 53a2 4093 0000 sts (tmp_long2.2)+2,r20
9534 53a6 5093 0000 sts (tmp_long2.2)+3,r21
9535 53aa C090 0000 lds r12,tmp_long2.2
9536 53ae D090 0000 lds r13,(tmp_long2.2)+1
9537 53b2 8091 0000 lds r24,FilterHCGas.22
9538 53b6 9091 0000 lds r25,(FilterHCGas.22)+1
9539 53ba 9C01 movw r18,r24
9540 53bc 220F lsl r18
9541 53be 331F rol r19
9542 53c0 280F add r18,r24
9543 53c2 391F adc r19,r25
9544 53c4 2C0D add r18,r12
9545 53c6 3D1D adc r19,r13
9546 53c8 37FF sbrs r19,7
9547 53ca 00C0 rjmp .L780
9548 53cc 2D5F subi r18,lo8(-(3))
9549 53ce 3F4F sbci r19,hi8(-(3))
9550 .L780:
9551 53d0 A901 movw r20,r18
9552 53d2 5595 asr r21
9553 53d4 4795 ror r20
9554 53d6 5595 asr r21
9555 53d8 4795 ror r20
9556 53da 5093 0000 sts (FilterHCGas.22)+1,r21
9557 53de 4093 0000 sts FilterHCGas.22,r20
9558 53e2 8091 0000 lds r24,EE_Parameter+14
9559 53e6 282F mov r18,r24
9560 53e8 3327 clr r19
9561 53ea 220F lsl r18
9562 53ec 331F rol r19
9563 53ee 220F lsl r18
9564 53f0 331F rol r19
9565 53f2 2417 cp r18,r20
9566 53f4 3507 cpc r19,r21
9567 53f6 04F4 brge .L916
9568 53f8 8091 0000 lds r24,MAX_GAS
9569 53fc 282F mov r18,r24
9570 53fe 3327 clr r19
9571 5400 220F lsl r18
9572 5402 331F rol r19
9573 5404 220F lsl r18
9574 5406 331F rol r19
9575 5408 2055 subi r18,lo8(-(-80))
9576 540a 3040 sbci r19,hi8(-(-80))
9577 540c 4217 cp r20,r18
9578 540e 5307 cpc r21,r19
9579 5410 04F0 brlt .L782
9580 .L916:
9581 5412 3093 0000 sts (FilterHCGas.22)+1,r19
9582 5416 2093 0000 sts FilterHCGas.22,r18
9583 .L782:
9584 541a 8091 0000 lds r24,Parameter_ExtraConfig
9585 541e 80FF sbrs r24,0
9586 5420 00C0 rjmp .L784
9587 5422 8091 0000 lds r24,FilterHCGas.22
9588 5426 9091 0000 lds r25,(FilterHCGas.22)+1
9589 542a 2981 ldd r18,Y+1
9590 542c 3A81 ldd r19,Y+2
9591 542e 8217 cp r24,r18
9592 5430 9307 cpc r25,r19
9593 5432 04F0 brlt .L785
9594 5434 3093 0000 sts (FilterHCGas.22)+1,r19
9595 5438 2093 0000 sts FilterHCGas.22,r18
9596 .L785:
9597 543c 4091 0000 lds r20,FilterHCGas.22
9598 5440 5091 0000 lds r21,(FilterHCGas.22)+1
9599 5444 5A83 std Y+2,r21
9600 5446 4983 std Y+1,r20
9601 5448 00C0 rjmp .L788
9602 .L784:
9603 544a 2981 ldd r18,Y+1
9604 544c 3A81 ldd r19,Y+2
9605 544e 2E19 sub r18,r14
9606 5450 3F09 sbc r19,r15
9607 5452 37FF sbrs r19,7
9608 5454 00C0 rjmp .L787
9609 5456 2D5F subi r18,lo8(-(3))
9610 5458 3F4F sbci r19,hi8(-(3))
9611 .L787:
9612 545a 3595 asr r19
9613 545c 2795 ror r18
9614 545e 3595 asr r19
9615 5460 2795 ror r18
9616 5462 6091 0000 lds r22,FilterHCGas.22
9617 5466 7091 0000 lds r23,(FilterHCGas.22)+1
9618 546a 620F add r22,r18
9619 546c 731F adc r23,r19
9620 546e 7A83 std Y+2,r23
9621 5470 6983 std Y+1,r22
9622 5472 00C0 rjmp .L788
9623 .L679:
9624 5474 8091 0000 lds r24,EE_Parameter+22
9625 5478 8823 tst r24
9626 547a 01F4 brne .L789
9627 547c 6091 0000 lds r22,HoverGas
9628 5480 7091 0000 lds r23,(HoverGas)+1
9629 5484 77FF sbrs r23,7
9630 5486 00C0 rjmp .L790
9631 5488 6D5F subi r22,lo8(-(3))
9632 548a 7F4F sbci r23,hi8(-(3))
9633 .L790:
9634 548c 7595 asr r23
9635 548e 6795 ror r22
9636 5490 7595 asr r23
9637 5492 6795 ror r22
9638 5494 4091 0000 lds r20,UBat
9639 5498 5091 0000 lds r21,(UBat)+1
9640 549c 8091 0000 lds r24,BattLowVoltageWarning
9641 54a0 282F mov r18,r24
9642 54a2 3327 clr r19
9643 54a4 649F mul r22,r20
9644 54a6 C001 movw r24,r0
9645 54a8 659F mul r22,r21
9646 54aa 900D add r25,r0
9647 54ac 749F mul r23,r20
9648 54ae 900D add r25,r0
9649 54b0 1124 clr r1
9650 54b2 B901 movw r22,r18
9651 54b4 0E94 0000 call __divmodhi4
9652 54b8 CB01 movw r24,r22
9653 54ba 00C0 rjmp .L917
9654 .L789:
9655 54bc 9927 clr r25
9656 .L917:
9657 54be 9093 0000 sts (StickGasHover)+1,r25
9658 54c2 8093 0000 sts StickGasHover,r24
9659 54c6 8091 0000 lds r24,StickGasHover
9660 54ca 9091 0000 lds r25,(StickGasHover)+1
9661 54ce 8734 cpi r24,71
9662 54d0 9105 cpc r25,__zero_reg__
9663 54d2 04F4 brge .L792
9664 54d4 86E4 ldi r24,lo8(70)
9665 54d6 90E0 ldi r25,hi8(70)
9666 54d8 00C0 rjmp .L918
9667 .L792:
9668 54da 8639 cpi r24,150
9669 54dc 9105 cpc r25,__zero_reg__
9670 54de 04F0 brlt .L793
9671 54e0 86E9 ldi r24,lo8(150)
9672 54e2 90E0 ldi r25,hi8(150)
9673 .L918:
9674 54e4 9093 0000 sts (StickGasHover)+1,r25
9675 54e8 8093 0000 sts StickGasHover,r24
9676 .L793:
9677 54ec 8981 ldd r24,Y+1
9678 54ee 9A81 ldd r25,Y+2
9679 54f0 9093 0000 sts (FilterHCGas.22)+1,r25
9680 54f4 8093 0000 sts FilterHCGas.22,r24
9681 54f8 8091 0000 lds r24,FC_StatusFlags
9682 54fc 806C ori r24,lo8(-64)
9683 54fe 8093 0000 sts FC_StatusFlags,r24
9684 5502 8091 0000 lds r24,FC_StatusFlags2
9685 5506 8D7F andi r24,lo8(-3)
9686 5508 8093 0000 sts FC_StatusFlags2,r24
9687 .L788:
9688 550c 8091 0000 lds r24,FC_StatusFlags
9689 5510 9927 clr r25
9690 5512 9C01 movw r18,r24
9691 5514 2270 andi r18,lo8(2)
9692 5516 3070 andi r19,hi8(2)
9693 5518 81FF sbrs r24,1
9694 551a 00C0 rjmp .L795
9695 551c 8091 0000 lds r24,HoverGasFilter.23
9696 5520 9091 0000 lds r25,(HoverGasFilter.23)+1
9697 5524 A091 0000 lds r26,(HoverGasFilter.23)+2
9698 5528 B091 0000 lds r27,(HoverGasFilter.23)+3
9699 552c 0097 sbiw r24,0
9700 552e A105 cpc r26,__zero_reg__
9701 5530 B105 cpc r27,__zero_reg__
9702 5532 01F0 breq .L797
9703 5534 8091 0000 lds r24,StartTrigger
9704 5538 8130 cpi r24,lo8(1)
9705 553a 01F4 brne .L796
9706 .L797:
9707 553c E981 ldd r30,Y+1
9708 553e FA81 ldd r31,Y+2
9709 5540 CF01 movw r24,r30
9710 5542 AA27 clr r26
9711 5544 97FD sbrc r25,7
9712 5546 A095 com r26
9713 5548 BA2F mov r27,r26
9714 554a 1EE0 ldi r17,14
9715 554c 880F 1: lsl r24
9716 554e 991F rol r25
9717 5550 AA1F rol r26
9718 5552 BB1F rol r27
9719 5554 1A95 dec r17
9720 5556 01F4 brne 1b
9721 5558 8093 0000 sts HoverGasFilter.23,r24
9722 555c 9093 0000 sts (HoverGasFilter.23)+1,r25
9723 5560 A093 0000 sts (HoverGasFilter.23)+2,r26
9724 5564 B093 0000 sts (HoverGasFilter.23)+3,r27
9725 .L796:
9726 5568 8091 0000 lds r24,StartTrigger
9727 556c 8130 cpi r24,lo8(1)
9728 556e 01F4 brne .L798
9729 5570 82E0 ldi r24,lo8(2)
9730 5572 8093 0000 sts StartTrigger,r24
9731 .L798:
9732 5576 E980 ldd r14,Y+1
9733 5578 FA80 ldd r15,Y+2
9734 557a C701 movw r24,r14
9735 557c AA27 clr r26
9736 557e 97FD sbrc r25,7
9737 5580 A095 com r26
9738 5582 BA2F mov r27,r26
9739 5584 9501 movw r18,r10
9740 5586 4427 clr r20
9741 5588 37FD sbrc r19,7
9742 558a 4095 com r20
9743 558c 542F mov r21,r20
9744 558e BC01 movw r22,r24
9745 5590 CD01 movw r24,r26
9746 5592 0E94 0000 call __mulsi3
9747 5596 DC01 movw r26,r24
9748 5598 CB01 movw r24,r22
9749 559a 8093 0000 sts tmp_long2.2,r24
9750 559e 9093 0000 sts (tmp_long2.2)+1,r25
9751 55a2 A093 0000 sts (tmp_long2.2)+2,r26
9752 55a6 B093 0000 sts (tmp_long2.2)+3,r27
9753 55aa B7FF sbrs r27,7
9754 55ac 00C0 rjmp .L799
9755 55ae 8150 subi r24,lo8(-(8191))
9756 55b0 904E sbci r25,hi8(-(8191))
9757 55b2 AF4F sbci r26,hlo8(-(8191))
9758 55b4 BF4F sbci r27,hhi8(-(8191))
9759 .L799:
9760 55b6 7C01 movw r14,r24
9761 55b8 8D01 movw r16,r26
9762 55ba ADE0 ldi r26,13
9763 55bc 1595 1: asr r17
9764 55be 0795 ror r16
9765 55c0 F794 ror r15
9766 55c2 E794 ror r14
9767 55c4 AA95 dec r26
9768 55c6 01F4 brne 1b
9769 55c8 E092 0000 sts tmp_long2.2,r14
9770 55cc F092 0000 sts (tmp_long2.2)+1,r15
9771 55d0 0093 0000 sts (tmp_long2.2)+2,r16
9772 55d4 1093 0000 sts (tmp_long2.2)+3,r17
9773 55d8 6091 0000 lds r22,modell_fliegt
9774 55dc 7091 0000 lds r23,(modell_fliegt)+1
9775 55e0 2FE0 ldi r18,hi8(4000)
9776 55e2 603A cpi r22,lo8(4000)
9777 55e4 7207 cpc r23,r18
9778 55e6 00F4 brsh .L800
9779 55e8 8091 0000 lds r24,HoverGasFilter.23
9780 55ec 9091 0000 lds r25,(HoverGasFilter.23)+1
9781 55f0 A091 0000 lds r26,(HoverGasFilter.23)+2
9782 55f4 B091 0000 lds r27,(HoverGasFilter.23)+3
9783 55f8 9C01 movw r18,r24
9784 55fa AD01 movw r20,r26
9785 55fc FAE0 ldi r31,10
9786 55fe 5695 1: lsr r21
9787 5600 4795 ror r20
9788 5602 3795 ror r19
9789 5604 2795 ror r18
9790 5606 FA95 dec r31
9791 5608 01F4 brne 1b
9792 560a 821B sub r24,r18
9793 560c 930B sbc r25,r19
9794 560e A40B sbc r26,r20
9795 5610 B50B sbc r27,r21
9796 5612 A801 movw r20,r16
9797 5614 9701 movw r18,r14
9798 5616 E4E0 ldi r30,4
9799 5618 220F 1: lsl r18
9800 561a 331F rol r19
9801 561c 441F rol r20
9802 561e 551F rol r21
9803 5620 EA95 dec r30
9804 5622 01F4 brne 1b
9805 5624 820F add r24,r18
9806 5626 931F adc r25,r19
9807 5628 A41F adc r26,r20
9808 562a B51F adc r27,r21
9809 562c 8093 0000 sts HoverGasFilter.23,r24
9810 5630 9093 0000 sts (HoverGasFilter.23)+1,r25
9811 5634 A093 0000 sts (HoverGasFilter.23)+2,r26
9812 5638 B093 0000 sts (HoverGasFilter.23)+3,r27
9813 .L800:
9814 563c 6054 subi r22,lo8(8000)
9815 563e 7F41 sbci r23,hi8(8000)
9816 5640 00F4 brsh .L801
9817 5642 8091 0000 lds r24,HoverGasFilter.23
9818 5646 9091 0000 lds r25,(HoverGasFilter.23)+1
9819 564a A091 0000 lds r26,(HoverGasFilter.23)+2
9820 564e B091 0000 lds r27,(HoverGasFilter.23)+3
9821 5652 9C01 movw r18,r24
9822 5654 AD01 movw r20,r26
9823 5656 6CE0 ldi r22,12
9824 5658 5695 1: lsr r21
9825 565a 4795 ror r20
9826 565c 3795 ror r19
9827 565e 2795 ror r18
9828 5660 6A95 dec r22
9829 5662 01F4 brne 1b
9830 5664 821B sub r24,r18
9831 5666 930B sbc r25,r19
9832 5668 A40B sbc r26,r20
9833 566a B50B sbc r27,r21
9834 566c A801 movw r20,r16
9835 566e 9701 movw r18,r14
9836 5670 F2E0 ldi r31,2
9837 5672 220F 1: lsl r18
9838 5674 331F rol r19
9839 5676 441F rol r20
9840 5678 551F rol r21
9841 567a FA95 dec r31
9842 567c 01F4 brne 1b
9843 567e 820F add r24,r18
9844 5680 931F adc r25,r19
9845 5682 A41F adc r26,r20
9846 5684 B51F adc r27,r21
9847 5686 00C0 rjmp .L919
9848 .L801:
9849 5688 8091 0000 lds r24,VarioMeter
9850 568c 9091 0000 lds r25,(VarioMeter)+1
9851 5690 8091 0000 lds r24,VarioMeter
9852 5694 9091 0000 lds r25,(VarioMeter)+1
9853 5698 97FF sbrs r25,7
9854 569a 00C0 rjmp .L804
9855 569c 9095 com r25
9856 569e 8195 neg r24
9857 56a0 9F4F sbci r25,lo8(-1)
9858 .L804:
9859 56a2 8436 cpi r24,100
9860 56a4 9105 cpc r25,__zero_reg__
9861 56a6 04F4 brge .L802
9862 56a8 8091 0000 lds r24,HoehenWert
9863 56ac 9091 0000 lds r25,(HoehenWert)+1
9864 56b0 2091 0000 lds r18,SollHoehe
9865 56b4 3091 0000 lds r19,(SollHoehe)+1
9866 56b8 821B sub r24,r18
9867 56ba 930B sbc r25,r19
9868 56bc 8150 subi r24,lo8(-(255))
9869 56be 9F4F sbci r25,hi8(-(255))
9870 56c0 8F5F subi r24,lo8(511)
9871 56c2 9140 sbci r25,hi8(511)
9872 56c4 00F4 brsh .L802
9873 56c6 8091 0000 lds r24,HoverGasFilter.23
9874 56ca 9091 0000 lds r25,(HoverGasFilter.23)+1
9875 56ce A091 0000 lds r26,(HoverGasFilter.23)+2
9876 56d2 B091 0000 lds r27,(HoverGasFilter.23)+3
9877 56d6 9C01 movw r18,r24
9878 56d8 AD01 movw r20,r26
9879 56da EEE0 ldi r30,14
9880 56dc 5695 1: lsr r21
9881 56de 4795 ror r20
9882 56e0 3795 ror r19
9883 56e2 2795 ror r18
9884 56e4 EA95 dec r30
9885 56e6 01F4 brne 1b
9886 56e8 821B sub r24,r18
9887 56ea 930B sbc r25,r19
9888 56ec A40B sbc r26,r20
9889 56ee B50B sbc r27,r21
9890 56f0 8E0D add r24,r14
9891 56f2 9F1D adc r25,r15
9892 56f4 A01F adc r26,r16
9893 56f6 B11F adc r27,r17
9894 .L919:
9895 56f8 8093 0000 sts HoverGasFilter.23,r24
9896 56fc 9093 0000 sts (HoverGasFilter.23)+1,r25
9897 5700 A093 0000 sts (HoverGasFilter.23)+2,r26
9898 5704 B093 0000 sts (HoverGasFilter.23)+3,r27
9899 .L802:
9900 5708 8091 0000 lds r24,HoverGasFilter.23
9901 570c 9091 0000 lds r25,(HoverGasFilter.23)+1
9902 5710 A091 0000 lds r26,(HoverGasFilter.23)+2
9903 5714 B091 0000 lds r27,(HoverGasFilter.23)+3
9904 5718 7EE0 ldi r23,14
9905 571a B695 1: lsr r27
9906 571c A795 ror r26
9907 571e 9795 ror r25
9908 5720 8795 ror r24
9909 5722 7A95 dec r23
9910 5724 01F4 brne 1b
9911 5726 9093 0000 sts (HoverGas)+1,r25
9912 572a 8093 0000 sts HoverGas,r24
9913 572e 4091 0000 lds r20,EE_Parameter+20
9914 5732 4423 tst r20
9915 5734 01F0 breq .L805
9916 5736 5527 clr r21
9917 5738 9C01 movw r18,r24
9918 573a BA01 movw r22,r20
9919 573c 0E94 0000 call __divmodhi4
9920 5740 C901 movw r24,r18
9921 5742 861B sub r24,r22
9922 5744 970B sbc r25,r23
9923 5746 9093 0000 sts (HoverGasMin)+1,r25
9924 574a 8093 0000 sts HoverGasMin,r24
9925 574e 260F add r18,r22
9926 5750 371F adc r19,r23
9927 5752 3093 0000 sts (HoverGasMax)+1,r19
9928 5756 2093 0000 sts HoverGasMax,r18
9929 575a 00C0 rjmp .L808
9930 .L805:
9931 575c 1092 0000 sts (HoverGasMin)+1,__zero_reg__
9932 5760 1092 0000 sts HoverGasMin,__zero_reg__
9933 5764 8FEF ldi r24,lo8(1023)
9934 5766 93E0 ldi r25,hi8(1023)
9935 5768 9093 0000 sts (HoverGasMax)+1,r25
9936 576c 8093 0000 sts HoverGasMax,r24
9937 5770 00C0 rjmp .L808
9938 .L795:
9939 5772 1092 0000 sts StartTrigger,__zero_reg__
9940 5776 1092 0000 sts HoverGasFilter.23,__zero_reg__
9941 577a 1092 0000 sts (HoverGasFilter.23)+1,__zero_reg__
9942 577e 1092 0000 sts (HoverGasFilter.23)+2,__zero_reg__
9943 5782 1092 0000 sts (HoverGasFilter.23)+3,__zero_reg__
9944 5786 3093 0000 sts (HoverGas)+1,r19
9945 578a 2093 0000 sts HoverGas,r18
9946 578e 00C0 rjmp .L808
9947 .L659:
9948 5790 8091 0000 lds r24,FC_StatusFlags
9949 5794 806C ori r24,lo8(-64)
9950 5796 8093 0000 sts FC_StatusFlags,r24
9951 .L808:
9952 579a 8091 0000 lds r24,NC_To_FC_Flags
9953 579e 81FF sbrs r24,1
9954 57a0 00C0 rjmp .L809
9955 57a2 8981 ldd r24,Y+1
9956 57a4 9A81 ldd r25,Y+2
9957 57a6 97FD sbrc r25,7
9958 57a8 0396 adiw r24,3
9959 .L811:
9960 57aa 9595 asr r25
9961 57ac 8795 ror r24
9962 57ae 9595 asr r25
9963 57b0 8795 ror r24
9964 57b2 2091 0000 lds r18,HooverGasEmergencyPercent
9965 57b6 3091 0000 lds r19,(HooverGasEmergencyPercent)+1
9966 57ba 2817 cp r18,r24
9967 57bc 3907 cpc r19,r25
9968 57be 00F4 brsh .L810
9969 57c0 8091 0000 lds r24,HoverGas
9970 57c4 9091 0000 lds r25,(HoverGas)+1
9971 57c8 892B or r24,r25
9972 57ca 01F0 breq .L810
9973 57cc 220F lsl r18
9974 57ce 331F rol r19
9975 57d0 220F lsl r18
9976 57d2 331F rol r19
9977 57d4 3A83 std Y+2,r19
9978 57d6 2983 std Y+1,r18
9979 .L810:
9980 57d8 8091 0000 lds r24,HoehenWert
9981 57dc 9091 0000 lds r25,(HoehenWert)+1
9982 57e0 A091 0000 lds r26,(HoehenWert)+2
9983 57e4 B091 0000 lds r27,(HoehenWert)+3
9984 57e8 8093 0000 sts SollHoehe,r24
9985 57ec 9093 0000 sts (SollHoehe)+1,r25
9986 57f0 A093 0000 sts (SollHoehe)+2,r26
9987 57f4 B093 0000 sts (SollHoehe)+3,r27
9988 57f8 88E9 ldi r24,lo8(15000)
9989 57fa 9AE3 ldi r25,hi8(15000)
9990 57fc 9093 0000 sts (beeptime)+1,r25
9991 5800 8093 0000 sts beeptime,r24
9992 5804 80E0 ldi r24,lo8(3584)
9993 5806 9EE0 ldi r25,hi8(3584)
9994 5808 9093 0000 sts (BeepMuster)+1,r25
9995 580c 8093 0000 sts BeepMuster,r24
9996 .L809:
9997 5810 2091 0000 lds r18,MIN_GAS
9998 5814 822F mov r24,r18
9999 5816 9927 clr r25
10000 5818 880F lsl r24
10001 581a 991F rol r25
10002 581c 880F lsl r24
10003 581e 991F rol r25
10004 5820 8896 adiw r24,40
10005 5822 6981 ldd r22,Y+1
10006 5824 7A81 ldd r23,Y+2
10007 5826 8617 cp r24,r22
10008 5828 9707 cpc r25,r23
10009 582a 04F0 brlt .L812
10010 582c 9A83 std Y+2,r25
10011 582e 8983 std Y+1,r24
10012 .L812:
10013 5830 7091 0000 lds r23,MAX_GAS
10014 5834 7D8B std Y+21,r23
10015 5836 872F mov r24,r23
10016 5838 9927 clr r25
10017 583a 880F lsl r24
10018 583c 991F rol r25
10019 583e 880F lsl r24
10020 5840 991F rol r25
10021 5842 8055 subi r24,lo8(-(-80))
10022 5844 9040 sbci r25,hi8(-(-80))
10023 5846 A981 ldd r26,Y+1
10024 5848 BA81 ldd r27,Y+2
10025 584a 8A17 cp r24,r26
10026 584c 9B07 cpc r25,r27
10027 584e 04F4 brge .L813
10028 5850 9A83 std Y+2,r25
10029 5852 8983 std Y+1,r24
10030 .L813:
10031 5854 8091 0000 lds r24,MissingMotor
10032 5858 8823 tst r24
10033 585a 01F4 brne .L815
10034 585c 8091 0000 lds r24,Capacity+6
10035 5860 8F3F cpi r24,lo8(-1)
10036 5862 01F4 brne .L815
10037 5864 8091 0000 lds r24,NC_ErrorCode
10038 5868 8823 tst r24
10039 586a 01F0 breq .L814
10040 .L815:
10041 586c 8091 0000 lds r24,modell_fliegt
10042 5870 9091 0000 lds r25,(modell_fliegt)+1
10043 5874 0297 sbiw r24,2
10044 5876 C097 sbiw r24,48
10045 5878 00F4 brsh .L814
10046 587a E981 ldd r30,Y+1
10047 587c FA81 ldd r31,Y+2
10048 587e 1E16 cp __zero_reg__,r30
10049 5880 1F06 cpc __zero_reg__,r31
10050 5882 04F4 brge .L814
10051 5884 81E0 ldi r24,lo8(1)
10052 5886 90E0 ldi r25,hi8(1)
10053 5888 9093 0000 sts (modell_fliegt)+1,r25
10054 588c 8093 0000 sts modell_fliegt,r24
10055 5890 E22E mov r14,r18
10056 5892 FF24 clr r15
10057 5894 EE0C lsl r14
10058 5896 FF1C rol r15
10059 5898 EE0C lsl r14
10060 589a FF1C rol r15
10061 589c 8701 movw r16,r14
10062 589e 085D subi r16,lo8(-(40))
10063 58a0 1F4F sbci r17,hi8(-(40))
10064 58a2 1A83 std Y+2,r17
10065 58a4 0983 std Y+1,r16
10066 .L814:
10067 58a6 2981 ldd r18,Y+1
10068 58a8 3A81 ldd r19,Y+2
10069 58aa 3093 0000 sts (DebugOut+16)+1,r19
10070 58ae 2093 0000 sts DebugOut+16,r18
10071 58b2 8091 0000 lds r24,sollGier.0
10072 58b6 9091 0000 lds r25,(sollGier.0)+1
10073 58ba A091 0000 lds r26,(sollGier.0)+2
10074 58be B091 0000 lds r27,(sollGier.0)+3
10075 58c2 12E0 ldi r17,2
10076 58c4 880F 1: lsl r24
10077 58c6 991F rol r25
10078 58c8 AA1F rol r26
10079 58ca BB1F rol r27
10080 58cc 1A95 dec r17
10081 58ce 01F4 brne 1b
10082 58d0 0091 0000 lds r16,MesswertGier
10083 58d4 1091 0000 lds r17,(MesswertGier)+1
10084 58d8 081B sub r16,r24
10085 58da 190B sbc r17,r25
10086 58dc 213A cpi r18,161
10087 58de 3105 cpc r19,__zero_reg__
10088 58e0 04F0 brlt .L817
10089 58e2 C901 movw r24,r18
10090 58e4 37FD sbrc r19,7
10091 58e6 0196 adiw r24,1
10092 .L819:
10093 58e8 9595 asr r25
10094 58ea 8795 ror r24
10095 58ec 8017 cp r24,r16
10096 58ee 9107 cpc r25,r17
10097 58f0 04F4 brge .L818
10098 58f2 8C01 movw r16,r24
10099 .L818:
10100 58f4 9095 com r25
10101 58f6 8195 neg r24
10102 58f8 9F4F sbci r25,lo8(-1)
10103 58fa 0817 cp r16,r24
10104 58fc 1907 cpc r17,r25
10105 58fe 04F4 brge .L824
10106 5900 8C01 movw r16,r24
10107 5902 00C0 rjmp .L824
10108 .L817:
10109 5904 0135 cpi r16,81
10110 5906 1105 cpc r17,__zero_reg__
10111 5908 04F0 brlt .L825
10112 590a 00E5 ldi r16,lo8(80)
10113 590c 10E0 ldi r17,hi8(80)
10114 .L825:
10115 590e 3FEF ldi r19,hi8(-80)
10116 5910 003B cpi r16,lo8(-80)
10117 5912 1307 cpc r17,r19
10118 5914 04F4 brge .L824
10119 5916 00EB ldi r16,lo8(-80)
10120 5918 1FEF ldi r17,hi8(-80)
10121 .L824:
10122 591a 4D89 ldd r20,Y+21
10123 591c 242F mov r18,r20
10124 591e 3327 clr r19
10125 5920 220F lsl r18
10126 5922 331F rol r19
10127 5924 220F lsl r18
10128 5926 331F rol r19
10129 5928 C901 movw r24,r18
10130 592a 6981 ldd r22,Y+1
10131 592c 7A81 ldd r23,Y+2
10132 592e 861B sub r24,r22
10133 5930 970B sbc r25,r23
10134 5932 8017 cp r24,r16
10135 5934 9107 cpc r25,r17
10136 5936 04F4 brge .L827
10137 5938 8C01 movw r16,r24
10138 .L827:
10139 593a 8981 ldd r24,Y+1
10140 593c 9A81 ldd r25,Y+2
10141 593e 821B sub r24,r18
10142 5940 930B sbc r25,r19
10143 5942 0817 cp r16,r24
10144 5944 1907 cpc r17,r25
10145 5946 04F4 brge .L828
10146 5948 8C01 movw r16,r24
10147 .L828:
10148 594a 8091 0000 lds r24,MesswertNick
10149 594e 9091 0000 lds r25,(MesswertNick)+1
10150 5952 6091 0000 lds r22,StickNick
10151 5956 7091 0000 lds r23,(StickNick)+1
10152 595a 861B sub r24,r22
10153 595c 970B sbc r25,r23
10154 595e 9093 0000 sts (DiffNick)+1,r25
10155 5962 8093 0000 sts DiffNick,r24
10156 5966 D090 0000 lds r13,IntegralFaktor
10157 596a 2091 0000 lds r18,SummeNick
10158 596e 3091 0000 lds r19,(SummeNick)+1
10159 5972 4091 0000 lds r20,(SummeNick)+2
10160 5976 5091 0000 lds r21,(SummeNick)+3
10161 597a DD20 tst r13
10162 597c 01F0 breq .L829
10163 597e 661A sub r6,r22
10164 5980 770A sbc r7,r23
10165 5982 C301 movw r24,r6
10166 5984 AA27 clr r26
10167 5986 97FD sbrc r25,7
10168 5988 A095 com r26
10169 598a BA2F mov r27,r26
10170 598c 00C0 rjmp .L920
10171 .L829:
10172 598e AA27 clr r26
10173 5990 97FD sbrc r25,7
10174 5992 A095 com r26
10175 5994 BA2F mov r27,r26
10176 .L920:
10177 5996 280F add r18,r24
10178 5998 391F adc r19,r25
10179 599a 4A1F adc r20,r26
10180 599c 5B1F adc r21,r27
10181 599e 2093 0000 sts SummeNick,r18
10182 59a2 3093 0000 sts (SummeNick)+1,r19
10183 59a6 4093 0000 sts (SummeNick)+2,r20
10184 59aa 5093 0000 sts (SummeNick)+3,r21
10185 59ae 8091 0000 lds r24,SummeNick
10186 59b2 9091 0000 lds r25,(SummeNick)+1
10187 59b6 A091 0000 lds r26,(SummeNick)+2
10188 59ba B091 0000 lds r27,(SummeNick)+3
10189 59be 8150 subi r24,lo8(64001)
10190 59c0 9A4F sbci r25,hi8(64001)
10191 59c2 A040 sbci r26,hlo8(64001)
10192 59c4 B040 sbci r27,hhi8(64001)
10193 59c6 04F0 brlt .L831
10194 59c8 80E0 ldi r24,lo8(64000)
10195 59ca 9AEF ldi r25,hi8(64000)
10196 59cc A0E0 ldi r26,hlo8(64000)
10197 59ce B0E0 ldi r27,hhi8(64000)
10198 59d0 8093 0000 sts SummeNick,r24
10199 59d4 9093 0000 sts (SummeNick)+1,r25
10200 59d8 A093 0000 sts (SummeNick)+2,r26
10201 59dc B093 0000 sts (SummeNick)+3,r27
10202 .L831:
10203 59e0 8091 0000 lds r24,SummeNick
10204 59e4 9091 0000 lds r25,(SummeNick)+1
10205 59e8 A091 0000 lds r26,(SummeNick)+2
10206 59ec B091 0000 lds r27,(SummeNick)+3
10207 59f0 8050 subi r24,lo8(-64000)
10208 59f2 9640 sbci r25,hi8(-64000)
10209 59f4 AF4F sbci r26,hlo8(-64000)
10210 59f6 BF4F sbci r27,hhi8(-64000)
10211 59f8 04F4 brge .L832
10212 59fa 80E0 ldi r24,lo8(-64000)
10213 59fc 96E0 ldi r25,hi8(-64000)
10214 59fe AFEF ldi r26,hlo8(-64000)
10215 5a00 BFEF ldi r27,hhi8(-64000)
10216 5a02 8093 0000 sts SummeNick,r24
10217 5a06 9093 0000 sts (SummeNick)+1,r25
10218 5a0a A093 0000 sts (SummeNick)+2,r26
10219 5a0e B093 0000 sts (SummeNick)+3,r27
10220 .L832:
10221 5a12 C090 0000 lds r12,EE_Parameter+35
10222 5a16 2091 0000 lds r18,DiffNick
10223 5a1a 3091 0000 lds r19,(DiffNick)+1
10224 5a1e 78E0 ldi r23,lo8(8)
10225 5a20 E72E mov r14,r23
10226 5a22 EC14 cp r14,r12
10227 5a24 00F0 brlo .L833
10228 5a26 8C2D mov r24,r12
10229 5a28 9927 clr r25
10230 5a2a 829F mul r24,r18
10231 5a2c A001 movw r20,r0
10232 5a2e 839F mul r24,r19
10233 5a30 500D add r21,r0
10234 5a32 929F mul r25,r18
10235 5a34 500D add r21,r0
10236 5a36 1124 clr r1
10237 5a38 CA01 movw r24,r20
10238 5a3a 57FD sbrc r21,7
10239 5a3c 0796 adiw r24,7
10240 .L834:
10241 5a3e 7C01 movw r14,r24
10242 5a40 63E0 ldi r22,3
10243 5a42 F594 1: asr r15
10244 5a44 E794 ror r14
10245 5a46 6A95 dec r22
10246 5a48 01F4 brne 1b
10247 5a4a 00C0 rjmp .L835
10248 .L833:
10249 5a4c 8C2D mov r24,r12
10250 5a4e 8695 lsr r24
10251 5a50 9927 clr r25
10252 5a52 829F mul r24,r18
10253 5a54 B001 movw r22,r0
10254 5a56 839F mul r24,r19
10255 5a58 700D add r23,r0
10256 5a5a 929F mul r25,r18
10257 5a5c 700D add r23,r0
10258 5a5e 1124 clr r1
10259 5a60 CB01 movw r24,r22
10260 5a62 77FD sbrc r23,7
10261 5a64 0396 adiw r24,3
10262 .L836:
10263 5a66 7C01 movw r14,r24
10264 5a68 F594 asr r15
10265 5a6a E794 ror r14
10266 5a6c F594 asr r15
10267 5a6e E794 ror r14
10268 .L835:
10269 5a70 A090 0000 lds r10,Ki
10270 5a74 B090 0000 lds r11,(Ki)+1
10271 5a78 9501 movw r18,r10
10272 5a7a 4427 clr r20
10273 5a7c 37FD sbrc r19,7
10274 5a7e 4095 com r20
10275 5a80 542F mov r21,r20
10276 5a82 8091 0000 lds r24,SummeNick
10277 5a86 9091 0000 lds r25,(SummeNick)+1
10278 5a8a A091 0000 lds r26,(SummeNick)+2
10279 5a8e B091 0000 lds r27,(SummeNick)+3
10280 5a92 BC01 movw r22,r24
10281 5a94 CD01 movw r24,r26
10282 5a96 0E94 0000 call __divmodsi4
10283 5a9a E20E add r14,r18
10284 5a9c F31E adc r15,r19
10285 5a9e 9090 0000 lds r9,Parameter_DynamicStability
10286 5aa2 692D mov r22,r9
10287 5aa4 7727 clr r23
10288 5aa6 8827 clr r24
10289 5aa8 9927 clr r25
10290 5aaa 9801 movw r18,r16
10291 5aac 17FF sbrs r17,7
10292 5aae 00C0 rjmp .L837
10293 5ab0 2227 clr r18
10294 5ab2 3327 clr r19
10295 5ab4 201B sub r18,r16
10296 5ab6 310B sbc r19,r17
10297 .L837:
10298 5ab8 37FF sbrs r19,7
10299 5aba 00C0 rjmp .L838
10300 5abc 2F5F subi r18,lo8(-(1))
10301 5abe 3F4F sbci r19,hi8(-(1))
10302 .L838:
10303 5ac0 3595 asr r19
10304 5ac2 2795 ror r18
10305 5ac4 A981 ldd r26,Y+1
10306 5ac6 BA81 ldd r27,Y+2
10307 5ac8 2A0F add r18,r26
10308 5aca 3B1F adc r19,r27
10309 5acc 4427 clr r20
10310 5ace 37FD sbrc r19,7
10311 5ad0 4095 com r20
10312 5ad2 542F mov r21,r20
10313 5ad4 0E94 0000 call __mulsi3
10314 5ad8 97FF sbrs r25,7
10315 5ada 00C0 rjmp .L839
10316 5adc 615C subi r22,lo8(-(63))
10317 5ade 7F4F sbci r23,hi8(-(63))
10318 5ae0 8F4F sbci r24,hlo8(-(63))
10319 5ae2 9F4F sbci r25,hhi8(-(63))
10320 .L839:
10321 5ae4 26E0 ldi r18,6
10322 5ae6 9595 1: asr r25
10323 5ae8 8795 ror r24
10324 5aea 7795 ror r23
10325 5aec 6795 ror r22
10326 5aee 2A95 dec r18
10327 5af0 01F4 brne 1b
10328 5af2 9B01 movw r18,r22
10329 5af4 6E15 cp r22,r14
10330 5af6 7F05 cpc r23,r15
10331 5af8 04F4 brge .L840
10332 5afa 7B01 movw r14,r22
10333 .L840:
10334 5afc 3095 com r19
10335 5afe 2195 neg r18
10336 5b00 3F4F sbci r19,lo8(-1)
10337 5b02 E216 cp r14,r18
10338 5b04 F306 cpc r15,r19
10339 5b06 04F4 brge .L841
10340 5b08 7901 movw r14,r18
10341 .L841:
10342 5b0a 8091 0000 lds r24,MesswertRoll
10343 5b0e 9091 0000 lds r25,(MesswertRoll)+1
10344 5b12 6091 0000 lds r22,StickRoll
10345 5b16 7091 0000 lds r23,(StickRoll)+1
10346 5b1a 861B sub r24,r22
10347 5b1c 970B sbc r25,r23
10348 5b1e 9093 0000 sts (DiffRoll)+1,r25
10349 5b22 8093 0000 sts DiffRoll,r24
10350 5b26 2091 0000 lds r18,SummeRoll
10351 5b2a 3091 0000 lds r19,(SummeRoll)+1
10352 5b2e 4091 0000 lds r20,(SummeRoll)+2
10353 5b32 5091 0000 lds r21,(SummeRoll)+3
10354 5b36 DD20 tst r13
10355 5b38 01F0 breq .L842
10356 5b3a 461A sub r4,r22
10357 5b3c 570A sbc r5,r23
10358 5b3e C201 movw r24,r4
10359 5b40 AA27 clr r26
10360 5b42 97FD sbrc r25,7
10361 5b44 A095 com r26
10362 5b46 BA2F mov r27,r26
10363 5b48 00C0 rjmp .L921
10364 .L842:
10365 5b4a AA27 clr r26
10366 5b4c 97FD sbrc r25,7
10367 5b4e A095 com r26
10368 5b50 BA2F mov r27,r26
10369 .L921:
10370 5b52 280F add r18,r24
10371 5b54 391F adc r19,r25
10372 5b56 4A1F adc r20,r26
10373 5b58 5B1F adc r21,r27
10374 5b5a 2093 0000 sts SummeRoll,r18
10375 5b5e 3093 0000 sts (SummeRoll)+1,r19
10376 5b62 4093 0000 sts (SummeRoll)+2,r20
10377 5b66 5093 0000 sts (SummeRoll)+3,r21
10378 5b6a 8091 0000 lds r24,SummeRoll
10379 5b6e 9091 0000 lds r25,(SummeRoll)+1
10380 5b72 A091 0000 lds r26,(SummeRoll)+2
10381 5b76 B091 0000 lds r27,(SummeRoll)+3
10382 5b7a 8150 subi r24,lo8(64001)
10383 5b7c 9A4F sbci r25,hi8(64001)
10384 5b7e A040 sbci r26,hlo8(64001)
10385 5b80 B040 sbci r27,hhi8(64001)
10386 5b82 04F0 brlt .L844
10387 5b84 80E0 ldi r24,lo8(64000)
10388 5b86 9AEF ldi r25,hi8(64000)
10389 5b88 A0E0 ldi r26,hlo8(64000)
10390 5b8a B0E0 ldi r27,hhi8(64000)
10391 5b8c 8093 0000 sts SummeRoll,r24
10392 5b90 9093 0000 sts (SummeRoll)+1,r25
10393 5b94 A093 0000 sts (SummeRoll)+2,r26
10394 5b98 B093 0000 sts (SummeRoll)+3,r27
10395 .L844:
10396 5b9c 8091 0000 lds r24,SummeRoll
10397 5ba0 9091 0000 lds r25,(SummeRoll)+1
10398 5ba4 A091 0000 lds r26,(SummeRoll)+2
10399 5ba8 B091 0000 lds r27,(SummeRoll)+3
10400 5bac 8050 subi r24,lo8(-64000)
10401 5bae 9640 sbci r25,hi8(-64000)
10402 5bb0 AF4F sbci r26,hlo8(-64000)
10403 5bb2 BF4F sbci r27,hhi8(-64000)
10404 5bb4 04F4 brge .L845
10405 5bb6 80E0 ldi r24,lo8(-64000)
10406 5bb8 96E0 ldi r25,hi8(-64000)
10407 5bba AFEF ldi r26,hlo8(-64000)
10408 5bbc BFEF ldi r27,hhi8(-64000)
10409 5bbe 8093 0000 sts SummeRoll,r24
10410 5bc2 9093 0000 sts (SummeRoll)+1,r25
10411 5bc6 A093 0000 sts (SummeRoll)+2,r26
10412 5bca B093 0000 sts (SummeRoll)+3,r27
10413 .L845:
10414 5bce 2091 0000 lds r18,DiffRoll
10415 5bd2 3091 0000 lds r19,(DiffRoll)+1
10416 5bd6 48E0 ldi r20,lo8(8)
10417 5bd8 4C15 cp r20,r12
10418 5bda 00F0 brlo .L846
10419 5bdc 8C2D mov r24,r12
10420 5bde 9927 clr r25
10421 5be0 829F mul r24,r18
10422 5be2 B001 movw r22,r0
10423 5be4 839F mul r24,r19
10424 5be6 700D add r23,r0
10425 5be8 929F mul r25,r18
10426 5bea 700D add r23,r0
10427 5bec 1124 clr r1
10428 5bee CB01 movw r24,r22
10429 5bf0 77FD sbrc r23,7
10430 5bf2 0796 adiw r24,7
10431 .L847:
10432 5bf4 6C01 movw r12,r24
10433 5bf6 B3E0 ldi r27,3
10434 5bf8 D594 1: asr r13
10435 5bfa C794 ror r12
10436 5bfc BA95 dec r27
10437 5bfe 01F4 brne 1b
10438 5c00 00C0 rjmp .L848
10439 .L846:
10440 5c02 C694 lsr r12
10441 5c04 8C2D mov r24,r12
10442 5c06 9927 clr r25
10443 5c08 829F mul r24,r18
10444 5c0a D001 movw r26,r0
10445 5c0c 839F mul r24,r19
10446 5c0e B00D add r27,r0
10447 5c10 929F mul r25,r18
10448 5c12 B00D add r27,r0
10449 5c14 1124 clr r1
10450 5c16 CD01 movw r24,r26
10451 5c18 B7FD sbrc r27,7
10452 5c1a 0396 adiw r24,3
10453 .L849:
10454 5c1c 6C01 movw r12,r24
10455 5c1e D594 asr r13
10456 5c20 C794 ror r12
10457 5c22 D594 asr r13
10458 5c24 C794 ror r12
10459 .L848:
10460 5c26 9501 movw r18,r10
10461 5c28 4427 clr r20
10462 5c2a 37FD sbrc r19,7
10463 5c2c 4095 com r20
10464 5c2e 542F mov r21,r20
10465 5c30 8091 0000 lds r24,SummeRoll
10466 5c34 9091 0000 lds r25,(SummeRoll)+1
10467 5c38 A091 0000 lds r26,(SummeRoll)+2
10468 5c3c B091 0000 lds r27,(SummeRoll)+3
10469 5c40 BC01 movw r22,r24
10470 5c42 CD01 movw r24,r26
10471 5c44 0E94 0000 call __divmodsi4
10472 5c48 C20E add r12,r18
10473 5c4a D31E adc r13,r19
10474 5c4c 692D mov r22,r9
10475 5c4e 7727 clr r23
10476 5c50 8827 clr r24
10477 5c52 9927 clr r25
10478 5c54 9801 movw r18,r16
10479 5c56 17FF sbrs r17,7
10480 5c58 00C0 rjmp .L850
10481 5c5a 2227 clr r18
10482 5c5c 3327 clr r19
10483 5c5e 201B sub r18,r16
10484 5c60 310B sbc r19,r17
10485 .L850:
10486 5c62 37FF sbrs r19,7
10487 5c64 00C0 rjmp .L851
10488 5c66 2F5F subi r18,lo8(-(1))
10489 5c68 3F4F sbci r19,hi8(-(1))
10490 .L851:
10491 5c6a 3595 asr r19
10492 5c6c 2795 ror r18
10493 5c6e E981 ldd r30,Y+1
10494 5c70 FA81 ldd r31,Y+2
10495 5c72 2E0F add r18,r30
10496 5c74 3F1F adc r19,r31
10497 5c76 4427 clr r20
10498 5c78 37FD sbrc r19,7
10499 5c7a 4095 com r20
10500 5c7c 542F mov r21,r20
10501 5c7e 0E94 0000 call __mulsi3
10502 5c82 97FF sbrs r25,7
10503 5c84 00C0 rjmp .L852
10504 5c86 615C subi r22,lo8(-(63))
10505 5c88 7F4F sbci r23,hi8(-(63))
10506 5c8a 8F4F sbci r24,hlo8(-(63))
10507 5c8c 9F4F sbci r25,hhi8(-(63))
10508 .L852:
10509 5c8e E6E0 ldi r30,6
10510 5c90 9595 1: asr r25
10511 5c92 8795 ror r24
10512 5c94 7795 ror r23
10513 5c96 6795 ror r22
10514 5c98 EA95 dec r30
10515 5c9a 01F4 brne 1b
10516 5c9c 9B01 movw r18,r22
10517 5c9e 6C15 cp r22,r12
10518 5ca0 7D05 cpc r23,r13
10519 5ca2 04F4 brge .L853
10520 5ca4 6B01 movw r12,r22
10521 .L853:
10522 5ca6 3095 com r19
10523 5ca8 2195 neg r18
10524 5caa 3F4F sbci r19,lo8(-1)
10525 5cac C216 cp r12,r18
10526 5cae D306 cpc r13,r19
10527 5cb0 04F4 brge .L854
10528 5cb2 6901 movw r12,r18
10529 .L854:
10530 5cb4 8091 0000 lds r24,MIN_GAS
10531 5cb8 282E mov r2,r24
10532 5cba 3324 clr r3
10533 5cbc 5090 0000 lds r5,EE_Parameter+101
10534 5cc0 60E0 ldi r22,lo8(Motor)
10535 5cc2 862E mov r8,r22
10536 5cc4 60E0 ldi r22,hi8(Motor)
10537 5cc6 962E mov r9,r22
10538 5cc8 50E0 ldi r21,lo8(Mixer+13)
10539 5cca A52E mov r10,r21
10540 5ccc 50E0 ldi r21,hi8(Mixer+13)
10541 5cce B52E mov r11,r21
10542 5cd0 4BE0 ldi r20,lo8(11)
10543 5cd2 442E mov r4,r20
10544 5cd4 30E0 ldi r19,lo8(tmp_motorwert)
10545 5cd6 632E mov r6,r19
10546 5cd8 30E0 ldi r19,hi8(tmp_motorwert)
10547 5cda 732E mov r7,r19
10548 .L889:
10549 5cdc D501 movw r26,r10
10550 5cde 2C91 ld r18,X
10551 5ce0 1216 cp __zero_reg__,r18
10552 5ce2 04F0 brlt .+2
10553 5ce4 00C0 rjmp .L858
10554 5ce6 2034 cpi r18,lo8(64)
10555 5ce8 01F4 brne .L859
10556 5cea E981 ldd r30,Y+1
10557 5cec FA81 ldd r31,Y+2
10558 5cee FF8B std Y+23,r31
10559 5cf0 EE8B std Y+22,r30
10560 5cf2 00C0 rjmp .L860
10561 .L859:
10562 5cf4 4981 ldd r20,Y+1
10563 5cf6 5A81 ldd r21,Y+2
10564 5cf8 CA01 movw r24,r20
10565 5cfa AA27 clr r26
10566 5cfc 97FD sbrc r25,7
10567 5cfe A095 com r26
10568 5d00 BA2F mov r27,r26
10569 5d02 3327 clr r19
10570 5d04 27FD sbrc r18,7
10571 5d06 3095 com r19
10572 5d08 432F mov r20,r19
10573 5d0a 532F mov r21,r19
10574 5d0c BC01 movw r22,r24
10575 5d0e CD01 movw r24,r26
10576 5d10 0E94 0000 call __mulsi3
10577 5d14 97FF sbrs r25,7
10578 5d16 00C0 rjmp .L861
10579 5d18 615C subi r22,lo8(-(63))
10580 5d1a 7F4F sbci r23,hi8(-(63))
10581 5d1c 8F4F sbci r24,hlo8(-(63))
10582 5d1e 9F4F sbci r25,hhi8(-(63))
10583 .L861:
10584 5d20 26E0 ldi r18,6
10585 5d22 9595 1: asr r25
10586 5d24 8795 ror r24
10587 5d26 7795 ror r23
10588 5d28 6795 ror r22
10589 5d2a 2A95 dec r18
10590 5d2c 01F4 brne 1b
10591 5d2e 7F8B std Y+23,r23
10592 5d30 6E8B std Y+22,r22
10593 .L860:
10594 5d32 F501 movw r30,r10
10595 5d34 2181 ldd r18,Z+1
10596 5d36 2034 cpi r18,lo8(64)
10597 5d38 01F4 brne .L862
10598 5d3a 2E89 ldd r18,Y+22
10599 5d3c 3F89 ldd r19,Y+23
10600 5d3e 2E0D add r18,r14
10601 5d40 3F1D adc r19,r15
10602 5d42 3F8B std Y+23,r19
10603 5d44 2E8B std Y+22,r18
10604 5d46 00C0 rjmp .L863
10605 .L862:
10606 5d48 203C cpi r18,lo8(-64)
10607 5d4a 01F4 brne .L864
10608 5d4c 4E89 ldd r20,Y+22
10609 5d4e 5F89 ldd r21,Y+23
10610 5d50 4E19 sub r20,r14
10611 5d52 5F09 sbc r21,r15
10612 5d54 5F8B std Y+23,r21
10613 5d56 4E8B std Y+22,r20
10614 5d58 00C0 rjmp .L863
10615 .L864:
10616 5d5a C701 movw r24,r14
10617 5d5c AA27 clr r26
10618 5d5e 97FD sbrc r25,7
10619 5d60 A095 com r26
10620 5d62 BA2F mov r27,r26
10621 5d64 3327 clr r19
10622 5d66 27FD sbrc r18,7
10623 5d68 3095 com r19
10624 5d6a 432F mov r20,r19
10625 5d6c 532F mov r21,r19
10626 5d6e BC01 movw r22,r24
10627 5d70 CD01 movw r24,r26
10628 5d72 0E94 0000 call __mulsi3
10629 5d76 97FF sbrs r25,7
10630 5d78 00C0 rjmp .L866
10631 5d7a 615C subi r22,lo8(-(63))
10632 5d7c 7F4F sbci r23,hi8(-(63))
10633 5d7e 8F4F sbci r24,hlo8(-(63))
10634 5d80 9F4F sbci r25,hhi8(-(63))
10635 .L866:
10636 5d82 B6E0 ldi r27,6
10637 5d84 9595 1: asr r25
10638 5d86 8795 ror r24
10639 5d88 7795 ror r23
10640 5d8a 6795 ror r22
10641 5d8c BA95 dec r27
10642 5d8e 01F4 brne 1b
10643 5d90 AE89 ldd r26,Y+22
10644 5d92 BF89 ldd r27,Y+23
10645 5d94 A60F add r26,r22
10646 5d96 B71F adc r27,r23
10647 5d98 BF8B std Y+23,r27
10648 5d9a AE8B std Y+22,r26
10649 .L863:
10650 5d9c F501 movw r30,r10
10651 5d9e 2281 ldd r18,Z+2
10652 5da0 2034 cpi r18,lo8(64)
10653 5da2 01F4 brne .L867
10654 5da4 2E89 ldd r18,Y+22
10655 5da6 3F89 ldd r19,Y+23
10656 5da8 2C0D add r18,r12
10657 5daa 3D1D adc r19,r13
10658 5dac 3F8B std Y+23,r19
10659 5dae 2E8B std Y+22,r18
10660 5db0 00C0 rjmp .L868
10661 .L867:
10662 5db2 203C cpi r18,lo8(-64)
10663 5db4 01F4 brne .L869
10664 5db6 4E89 ldd r20,Y+22
10665 5db8 5F89 ldd r21,Y+23
10666 5dba 4C19 sub r20,r12
10667 5dbc 5D09 sbc r21,r13
10668 5dbe 5F8B std Y+23,r21
10669 5dc0 4E8B std Y+22,r20
10670 5dc2 00C0 rjmp .L868
10671 .L869:
10672 5dc4 C601 movw r24,r12
10673 5dc6 AA27 clr r26
10674 5dc8 97FD sbrc r25,7
10675 5dca A095 com r26
10676 5dcc BA2F mov r27,r26
10677 5dce 3327 clr r19
10678 5dd0 27FD sbrc r18,7
10679 5dd2 3095 com r19
10680 5dd4 432F mov r20,r19
10681 5dd6 532F mov r21,r19
10682 5dd8 BC01 movw r22,r24
10683 5dda CD01 movw r24,r26
10684 5ddc 0E94 0000 call __mulsi3
10685 5de0 97FF sbrs r25,7
10686 5de2 00C0 rjmp .L871
10687 5de4 615C subi r22,lo8(-(63))
10688 5de6 7F4F sbci r23,hi8(-(63))
10689 5de8 8F4F sbci r24,hlo8(-(63))
10690 5dea 9F4F sbci r25,hhi8(-(63))
10691 .L871:
10692 5dec A6E0 ldi r26,6
10693 5dee 9595 1: asr r25
10694 5df0 8795 ror r24
10695 5df2 7795 ror r23
10696 5df4 6795 ror r22
10697 5df6 AA95 dec r26
10698 5df8 01F4 brne 1b
10699 5dfa AE89 ldd r26,Y+22
10700 5dfc BF89 ldd r27,Y+23
10701 5dfe A60F add r26,r22
10702 5e00 B71F adc r27,r23
10703 5e02 BF8B std Y+23,r27
10704 5e04 AE8B std Y+22,r26
10705 .L868:
10706 5e06 F501 movw r30,r10
10707 5e08 2381 ldd r18,Z+3
10708 5e0a 2034 cpi r18,lo8(64)
10709 5e0c 01F4 brne .L872
10710 5e0e 2E89 ldd r18,Y+22
10711 5e10 3F89 ldd r19,Y+23
10712 5e12 200F add r18,r16
10713 5e14 311F adc r19,r17
10714 5e16 3F8B std Y+23,r19
10715 5e18 2E8B std Y+22,r18
10716 5e1a 00C0 rjmp .L873
10717 .L872:
10718 5e1c 203C cpi r18,lo8(-64)
10719 5e1e 01F4 brne .L874
10720 5e20 4E89 ldd r20,Y+22
10721 5e22 5F89 ldd r21,Y+23
10722 5e24 401B sub r20,r16
10723 5e26 510B sbc r21,r17
10724 5e28 5F8B std Y+23,r21
10725 5e2a 4E8B std Y+22,r20
10726 5e2c 00C0 rjmp .L873
10727 .L874:
10728 5e2e C801 movw r24,r16
10729 5e30 AA27 clr r26
10730 5e32 97FD sbrc r25,7
10731 5e34 A095 com r26
10732 5e36 BA2F mov r27,r26
10733 5e38 3327 clr r19
10734 5e3a 27FD sbrc r18,7
10735 5e3c 3095 com r19
10736 5e3e 432F mov r20,r19
10737 5e40 532F mov r21,r19
10738 5e42 BC01 movw r22,r24
10739 5e44 CD01 movw r24,r26
10740 5e46 0E94 0000 call __mulsi3
10741 5e4a 97FF sbrs r25,7
10742 5e4c 00C0 rjmp .L876
10743 5e4e 615C subi r22,lo8(-(63))
10744 5e50 7F4F sbci r23,hi8(-(63))
10745 5e52 8F4F sbci r24,hlo8(-(63))
10746 5e54 9F4F sbci r25,hhi8(-(63))
10747 .L876:
10748 5e56 F6E0 ldi r31,6
10749 5e58 9595 1: asr r25
10750 5e5a 8795 ror r24
10751 5e5c 7795 ror r23
10752 5e5e 6795 ror r22
10753 5e60 FA95 dec r31
10754 5e62 01F4 brne 1b
10755 5e64 AE89 ldd r26,Y+22
10756 5e66 BF89 ldd r27,Y+23
10757 5e68 A60F add r26,r22
10758 5e6a B71F adc r27,r23
10759 5e6c BF8B std Y+23,r27
10760 5e6e AE8B std Y+22,r26
10761 .L873:
10762 5e70 F301 movw r30,r6
10763 5e72 8081 ld r24,Z
10764 5e74 9181 ldd r25,Z+1
10765 5e76 2E89 ldd r18,Y+22
10766 5e78 3F89 ldd r19,Y+23
10767 5e7a 8217 cp r24,r18
10768 5e7c 9307 cpc r25,r19
10769 5e7e 04F4 brge .L877
10770 5e80 B901 movw r22,r18
10771 5e82 680F add r22,r24
10772 5e84 791F adc r23,r25
10773 5e86 77FF sbrs r23,7
10774 5e88 00C0 rjmp .L878
10775 5e8a 6F5F subi r22,lo8(-(1))
10776 5e8c 7F4F sbci r23,hi8(-(1))
10777 .L878:
10778 5e8e 7595 asr r23
10779 5e90 6795 ror r22
10780 5e92 7F8B std Y+23,r23
10781 5e94 6E8B std Y+22,r22
10782 5e96 00C0 rjmp .L879
10783 .L877:
10784 5e98 5520 tst r5
10785 5e9a 01F4 brne .L880
10786 5e9c 4E89 ldd r20,Y+22
10787 5e9e 5F89 ldd r21,Y+23
10788 5ea0 440F add r20,r20
10789 5ea2 551F adc r21,r21
10790 5ea4 481B sub r20,r24
10791 5ea6 590B sbc r21,r25
10792 5ea8 5F8B std Y+23,r21
10793 5eaa 4E8B std Y+22,r20
10794 5eac 00C0 rjmp .L879
10795 .L880:
10796 5eae 51E0 ldi r21,lo8(1)
10797 5eb0 5515 cp r21,r5
10798 5eb2 00F4 brsh .L879
10799 5eb4 252D mov r18,r5
10800 5eb6 3327 clr r19
10801 5eb8 6E89 ldd r22,Y+22
10802 5eba 7F89 ldd r23,Y+23
10803 5ebc 861B sub r24,r22
10804 5ebe 970B sbc r25,r23
10805 5ec0 B901 movw r22,r18
10806 5ec2 0E94 0000 call __divmodhi4
10807 5ec6 AE89 ldd r26,Y+22
10808 5ec8 BF89 ldd r27,Y+23
10809 5eca A60F add r26,r22
10810 5ecc B71F adc r27,r23
10811 5ece BF8B std Y+23,r27
10812 5ed0 AE8B std Y+22,r26
10813 .L879:
10814 5ed2 C101 movw r24,r2
10815 5ed4 880F lsl r24
10816 5ed6 991F rol r25
10817 5ed8 880F lsl r24
10818 5eda 991F rol r25
10819 5edc EE89 ldd r30,Y+22
10820 5ede FF89 ldd r31,Y+23
10821 5ee0 8E17 cp r24,r30
10822 5ee2 9F07 cpc r25,r31
10823 5ee4 04F4 brge .L922
10824 5ee6 FD89 ldd r31,Y+21
10825 5ee8 8F2F mov r24,r31
10826 5eea 9927 clr r25
10827 5eec 880F lsl r24
10828 5eee 991F rol r25
10829 5ef0 880F lsl r24
10830 5ef2 991F rol r25
10831 5ef4 2E89 ldd r18,Y+22
10832 5ef6 3F89 ldd r19,Y+23
10833 5ef8 2817 cp r18,r24
10834 5efa 3907 cpc r19,r25
10835 5efc 04F0 brlt .L884
10836 .L922:
10837 5efe 9F8B std Y+23,r25
10838 5f00 8E8B std Y+22,r24
10839 .L884:
10840 5f02 8E89 ldd r24,Y+22
10841 5f04 9F89 ldd r25,Y+23
10842 5f06 97FD sbrc r25,7
10843 5f08 0396 adiw r24,3
10844 .L886:
10845 5f0a 9595 asr r25
10846 5f0c 8795 ror r24
10847 5f0e 9595 asr r25
10848 5f10 8795 ror r24
10849 5f12 F401 movw r30,r8
10850 5f14 8183 std Z+1,r24
10851 5f16 880F lsl r24
10852 5f18 991F rol r25
10853 5f1a 880F lsl r24
10854 5f1c 991F rol r25
10855 5f1e 2E89 ldd r18,Y+22
10856 5f20 3F89 ldd r19,Y+23
10857 5f22 281B sub r18,r24
10858 5f24 390B sbc r19,r25
10859 5f26 C901 movw r24,r18
10860 5f28 880F lsl r24
10861 5f2a 8283 std Z+2,r24
10862 5f2c EE89 ldd r30,Y+22
10863 5f2e FF89 ldd r31,Y+23
10864 5f30 D301 movw r26,r6
10865 5f32 ED93 st X+,r30
10866 5f34 FC93 st X,r31
10867 5f36 00C0 rjmp .L857
10868 .L858:
10869 5f38 F401 movw r30,r8
10870 5f3a 1182 std Z+1,__zero_reg__
10871 5f3c 1282 std Z+2,__zero_reg__
10872 .L857:
10873 5f3e 4A94 dec r4
10874 5f40 22E0 ldi r18,lo8(2)
10875 5f42 30E0 ldi r19,hi8(2)
10876 5f44 620E add r6,r18
10877 5f46 731E adc r7,r19
10878 5f48 44E0 ldi r20,lo8(4)
10879 5f4a 50E0 ldi r21,hi8(4)
10880 5f4c A40E add r10,r20
10881 5f4e B51E adc r11,r21
10882 5f50 68E0 ldi r22,lo8(8)
10883 5f52 70E0 ldi r23,hi8(8)
10884 5f54 860E add r8,r22
10885 5f56 971E adc r9,r23
10886 5f58 47FE sbrs r4,7
10887 5f5a 00C0 rjmp .L889
10888 /* epilogue: frame size=23 */
10889 5f5c E2E1 ldi r30,18
10890 5f5e C95E subi r28,-23
10891 5f60 0C94 0000 jmp __epilogue_restores__+0
10892 /* epilogue end (size=4) */
10893 /* function MotorRegler size 8305 (8295) */
10895 .comm TrimNick,2,1
10896 .comm TrimRoll,2,1
10897 .comm ErsatzKompass,4,1
10898 .comm ErsatzKompassInGrad,2,1
10899 .comm MesswertNick,2,1
10900 .comm MesswertRoll,2,1
10901 .comm MesswertGier,2,1
10902 .comm Mittelwert_AccNick,2,1
10903 .comm Mittelwert_AccRoll,2,1
10904 .comm NaviAccNick,2,1
10905 .comm NaviAccRoll,2,1
10906 .comm h,1,1
10907 .comm m,1,1
10908 .comm s,1,1
10909 .comm DiffNick,2,1
10910 .comm DiffRoll,2,1
10911 .comm Parameter_Servo3,1,1
10912 .comm Parameter_Servo4,1,1
10913 .comm Parameter_Servo5,1,1
10914 .comm Parameter_J16Bitmask,1,1
10915 .comm Parameter_J16Timing,1,1
10916 .comm Parameter_J17Bitmask,1,1
10917 .comm Parameter_J17Timing,1,1
10918 .comm Parameter_GlobalConfig,1,1
10919 .comm Parameter_ExtraConfig,1,1
10920 .comm MesswertGierBias,2,1
10921 .comm RohMesswertNick,2,1
10922 .comm RohMesswertRoll,2,1
10923 .comm MittelIntegralNick,4,1
10924 .comm MittelIntegralRoll,4,1
10925 .comm MittelIntegralNick2,4,1
10926 .comm MittelIntegralRoll2,4,1
10927 .comm MAX_GAS,1,1
10928 .comm MIN_GAS,1,1
10929 .comm GyroFaktor,1,1
10930 .comm GyroFaktorGier,1,1
10931 .comm IntegralFaktor,1,1
10932 .comm IntegralFaktorGier,1,1
10933 .comm Parameter_NaviGpsModeControl,1,1
10934 .comm Parameter_NaviGpsGain,1,1
10935 .comm Parameter_NaviGpsP,1,1
10936 .comm Parameter_NaviGpsI,1,1
10937 .comm Parameter_NaviGpsD,1,1
10938 .comm Parameter_NaviGpsACC,1,1
10939 .comm Parameter_NaviOperatingRadius,1,1
10940 .comm Parameter_NaviWindCorrection,1,1
10941 .comm Parameter_NaviSpeedCompensation,1,1
10942 .comm Parameter_ExternalControl,1,1
10943 .comm Parameter_MaximumAltitude,1,1
10944 .comm KopplungsteilNickRoll,2,1
10945 .comm KopplungsteilRollNick,2,1
10946 .comm tmp_motorwert,24,1
10947 /* File "fc.c": code 12377 = 0x3059 (12316), prologues 31, epilogues 30 */
DEFINED SYMBOLS
*ABS*:00000000 fc.c
C:\Temp/cch19s1E.s:3 *ABS*:0000003f __SREG__
C:\Temp/cch19s1E.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cch19s1E.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cch19s1E.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cch19s1E.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cch19s1E.s:15 .bss:00000000 GasIsZeroCnt
C:\Temp/cch19s1E.s:21 .bss:00000002 HooverGasEmergencyPercent
C:\Temp/cch19s1E.s:27 .data:00000000 VarioCharacter
C:\Temp/cch19s1E.s:32 .data:00000001 GIER_GRAD_FAKTOR
C:\Temp/cch19s1E.s:39 .bss:00000004 FC_StatusFlags2
C:\Temp/cch19s1E.s:45 .bss:00000005 FC_StatusFlags
C:\Temp/cch19s1E.s:51 .bss:00000006 modell_fliegt
C:\Temp/cch19s1E.s:57 .bss:00000008 MaxStickRoll
C:\Temp/cch19s1E.s:63 .bss:0000000a MaxStickNick
C:\Temp/cch19s1E.s:69 .data:00000005 ExternHoehenValue
C:\Temp/cch19s1E.s:76 .bss:0000000c ExternStickGier
C:\Temp/cch19s1E.s:82 .bss:0000000e ExternStickRoll
C:\Temp/cch19s1E.s:88 .bss:00000010 ExternStickNick
C:\Temp/cch19s1E.s:94 .data:00000007 sintab
C:\Temp/cch19s1E.s:131 .bss:00000012 CareFree
C:\Temp/cch19s1E.s:137 .data:00000026 Parameter_DynamicStability
C:\Temp/cch19s1E.s:142 .data:00000027 Parameter_CouplingYawCorrection
C:\Temp/cch19s1E.s:147 .data:00000028 Parameter_AchsKopplung2
C:\Temp/cch19s1E.s:152 .data:00000029 Parameter_AchsKopplung1
C:\Temp/cch19s1E.s:157 .data:0000002a Parameter_LoopGasLimit
C:\Temp/cch19s1E.s:162 .data:0000002b Parameter_ServoRollComp
C:\Temp/cch19s1E.s:167 .data:0000002c Parameter_ServoNickComp
C:\Temp/cch19s1E.s:172 .data:0000002d Parameter_ServoRollControl
C:\Temp/cch19s1E.s:177 .data:0000002e Parameter_ServoNickControl
C:\Temp/cch19s1E.s:184 .bss:00000013 Parameter_UserParam8
C:\Temp/cch19s1E.s:190 .bss:00000014 Parameter_UserParam7
C:\Temp/cch19s1E.s:196 .bss:00000015 Parameter_UserParam6
C:\Temp/cch19s1E.s:202 .bss:00000016 Parameter_UserParam5
C:\Temp/cch19s1E.s:208 .bss:00000017 Parameter_UserParam4
C:\Temp/cch19s1E.s:214 .bss:00000018 Parameter_UserParam3
C:\Temp/cch19s1E.s:220 .bss:00000019 Parameter_UserParam2
C:\Temp/cch19s1E.s:226 .bss:0000001a Parameter_UserParam1
C:\Temp/cch19s1E.s:232 .data:0000002f Parameter_I_Faktor
C:\Temp/cch19s1E.s:237 .data:00000030 Parameter_Gier_P
C:\Temp/cch19s1E.s:242 .data:00000031 Parameter_Gyro_Gier_I
C:\Temp/cch19s1E.s:247 .data:00000032 Parameter_Gyro_Gier_P
C:\Temp/cch19s1E.s:252 .data:00000033 Parameter_Gyro_I
C:\Temp/cch19s1E.s:257 .data:00000034 Parameter_Gyro_P
C:\Temp/cch19s1E.s:262 .data:00000035 Parameter_Gyro_D
C:\Temp/cch19s1E.s:267 .data:00000036 Parameter_Hoehe_GPS_Z
C:\Temp/cch19s1E.s:272 .data:00000037 Parameter_KompassWirkung
C:\Temp/cch19s1E.s:277 .data:00000038 Parameter_Hoehe_ACC_Wirkung
C:\Temp/cch19s1E.s:282 .data:00000039 Parameter_Hoehe_P
C:\Temp/cch19s1E.s:287 .data:0000003a Parameter_HoehenSchalter
C:\Temp/cch19s1E.s:292 .data:0000003b Parameter_Luftdruck_D
C:\Temp/cch19s1E.s:299 .bss:0000001b Looping_Oben
C:\Temp/cch19s1E.s:305 .bss:0000001c Looping_Unten
C:\Temp/cch19s1E.s:311 .bss:0000001d Looping_Rechts
C:\Temp/cch19s1E.s:317 .bss:0000001e Looping_Links
C:\Temp/cch19s1E.s:323 .bss:0000001f Looping_Roll
C:\Temp/cch19s1E.s:329 .bss:00000020 Looping_Nick
C:\Temp/cch19s1E.s:335 .data:0000003c Ki
C:\Temp/cch19s1E.s:342 .bss:00000021 HoverGas
C:\Temp/cch19s1E.s:348 .bss:00000023 LageKorrekturNick
C:\Temp/cch19s1E.s:354 .bss:00000025 LageKorrekturRoll
C:\Temp/cch19s1E.s:360 .bss:00000027 NeueKompassRichtungMerken
C:\Temp/cch19s1E.s:366 .bss:00000028 CalibrationDone
C:\Temp/cch19s1E.s:372 .bss:00000029 CompassGierSetpoint
C:\Temp/cch19s1E.s:378 .bss:0000002b WaypointTrimming
C:\Temp/cch19s1E.s:384 .data:0000003e carefree_old
C:\Temp/cch19s1E.s:391 .bss:0000002c FromNC_AltitudeSpeed
C:\Temp/cch19s1E.s:397 .bss:0000002d FromNC_AltitudeSetpoint
C:\Temp/cch19s1E.s:403 .bss:00000031 AltitudeSetpointTrimming
C:\Temp/cch19s1E.s:409 .bss:00000033 SollHoehe
C:\Temp/cch19s1E.s:415 .bss:00000037 HoehenWert
C:\Temp/cch19s1E.s:421 .bss:0000003b StartTrigger
C:\Temp/cch19s1E.s:427 .bss:0000003c MotorenEin
C:\Temp/cch19s1E.s:433 .bss:0000003d SenderOkay
C:\Temp/cch19s1E.s:439 .bss:0000003e Poti
C:\Temp/cch19s1E.s:445 .bss:00000047 StickGas
C:\Temp/cch19s1E.s:451 .bss:00000049 StickGier
C:\Temp/cch19s1E.s:457 .bss:0000004b StickRoll
C:\Temp/cch19s1E.s:463 .bss:0000004d StickNick
C:\Temp/cch19s1E.s:469 .data:0000003f HoverGasMax
C:\Temp/cch19s1E.s:476 .bss:0000004f HoverGasMin
C:\Temp/cch19s1E.s:482 .data:00000041 StickGasHover
C:\Temp/cch19s1E.s:489 .bss:00000051 GierGyroFehler
C:\Temp/cch19s1E.s:495 .data:00000043 Umschlag180Roll
C:\Temp/cch19s1E.s:500 .data:00000047 Umschlag180Nick
C:\Temp/cch19s1E.s:507 .bss:00000053 TrichterFlug
C:\Temp/cch19s1E.s:513 .bss:00000054 HoehenReglerAktiv
C:\Temp/cch19s1E.s:519 .data:0000004b KompassSignalSchlecht
C:\Temp/cch19s1E.s:524 .data:0000004d KompassFusion
C:\Temp/cch19s1E.s:529 .data:0000004e CalculateCompassTimer
C:\Temp/cch19s1E.s:536 .bss:00000055 KompassSollWert
C:\Temp/cch19s1E.s:542 .data:0000004f KompassValue
C:\Temp/cch19s1E.s:549 .bss:00000057 Mess_Integral_Hoch
C:\Temp/cch19s1E.s:555 .bss:0000005b SummeRoll
C:\Temp/cch19s1E.s:561 .bss:0000005f SummeNick
C:\Temp/cch19s1E.s:567 .bss:00000063 Mess_Integral_Gier2
C:\Temp/cch19s1E.s:573 .bss:00000067 Mess_Integral_Gier
C:\Temp/cch19s1E.s:579 .bss:0000006b Mess_IntegralRoll2
C:\Temp/cch19s1E.s:585 .bss:0000006f Mess_IntegralRoll
C:\Temp/cch19s1E.s:591 .bss:00000073 Mess_IntegralNick2
C:\Temp/cch19s1E.s:597 .bss:00000077 Mess_IntegralNick
C:\Temp/cch19s1E.s:603 .bss:0000007b Integral_Gier
C:\Temp/cch19s1E.s:609 .bss:0000007f IntegralAccZ
C:\Temp/cch19s1E.s:615 .bss:00000083 IntegralAccRoll
C:\Temp/cch19s1E.s:621 .bss:00000087 IntegralAccNick
C:\Temp/cch19s1E.s:627 .bss:0000008b IntegralRoll2
C:\Temp/cch19s1E.s:633 .bss:0000008f IntegralRoll
C:\Temp/cch19s1E.s:639 .bss:00000093 IntegralNick2
C:\Temp/cch19s1E.s:645 .bss:00000097 IntegralNick
C:\Temp/cch19s1E.s:651 .bss:0000009b ControlHeading
C:\Temp/cch19s1E.s:657 .bss:0000009c NeutralAccZ
C:\Temp/cch19s1E.s:663 .bss:0000009e NaviCntAcc
C:\Temp/cch19s1E.s:669 .bss:000000a0 NeutralAccY
C:\Temp/cch19s1E.s:675 .bss:000000a2 NeutralAccX
C:\Temp/cch19s1E.s:681 .bss:000000a4 StartNeutralNick
C:\Temp/cch19s1E.s:687 .bss:000000a6 StartNeutralRoll
C:\Temp/cch19s1E.s:693 .bss:000000a8 AdNeutralGier
C:\Temp/cch19s1E.s:699 .bss:000000aa AdNeutralRoll
C:\Temp/cch19s1E.s:705 .bss:000000ac AdNeutralNick
C:\Temp/cch19s1E.s:711 .bss:000000ae BaroExpandActive
C:\Temp/cch19s1E.s:716 .text:00000000 CopyDebugValues
*COM*:00000002 Mittelwert_AccNick
*COM*:00000002 Mittelwert_AccRoll
*COM*:00000002 ErsatzKompassInGrad
C:\Temp/cch19s1E.s:902 .text:0000022c Piep
C:\Temp/cch19s1E.s:976 .text:000002b2 CalibrierMittelwert
*COM*:00000002 MesswertNick
*COM*:00000002 MesswertRoll
*COM*:00000002 MesswertGier
C:\Temp/cch19s1E.s:1118 .progmem.data:00000000 __c.35
C:\Temp/cch19s1E.s:1123 .text:000003f4 SetNeutral
*COM*:00000004 ErsatzKompass
.bss:000000b0 tmpl.27
C:\Temp/cch19s1E.s:1631 .bss:000000b4 tmpl2.28
C:\Temp/cch19s1E.s:1632 .bss:000000b8 tmpl3.29
C:\Temp/cch19s1E.s:1633 .bss:000000bc tmpl4.30
C:\Temp/cch19s1E.s:1634 .bss:000000c0 oldNick.31
C:\Temp/cch19s1E.s:1635 .bss:000000c2 oldRoll.32
C:\Temp/cch19s1E.s:1636 .bss:000000c4 d2Roll.33
C:\Temp/cch19s1E.s:1637 .bss:000000c6 d2Nick.34
C:\Temp/cch19s1E.s:1641 .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/cch19s1E.s:3206 .text:000018c4 SendMotorData
C:\Temp/cch19s1E.s:3266 .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/cch19s1E.s:1638 .bss:000000c8 sollGier.0
C:\Temp/cch19s1E.s:4009 .bss:000000cc tmp_long.1
C:\Temp/cch19s1E.s:4010 .bss:000000d0 tmp_long2.2
C:\Temp/cch19s1E.s:4011 .bss:000000d4 IntegralFehlerNick.3
C:\Temp/cch19s1E.s:4012 .bss:000000d8 IntegralFehlerRoll.4
C:\Temp/cch19s1E.s:4013 .bss:000000dc RcLostTimer.5
C:\Temp/cch19s1E.s:4014 .bss:000000de delay_neutral.6
C:\Temp/cch19s1E.s:4015 .bss:000000df delay_einschalten.7
C:\Temp/cch19s1E.s:4016 .bss:000000e0 delay_ausschalten.8
C:\Temp/cch19s1E.s:4017 .bss:000000e1 move_safety_switch.9
C:\Temp/cch19s1E.s:4018 .bss:000000e2 ausgleichNick.10
C:\Temp/cch19s1E.s:4019 .bss:000000e6 ausgleichRoll.11
C:\Temp/cch19s1E.s:4020 .bss:000000ea stick_nick.12
C:\Temp/cch19s1E.s:4021 .bss:000000ec stick_roll.13
C:\Temp/cch19s1E.s:4022 .bss:000000ee cnt.14
C:\Temp/cch19s1E.s:4023 .bss:000000f0 last_n_p.15
C:\Temp/cch19s1E.s:4024 .bss:000000f1 last_n_n.16
C:\Temp/cch19s1E.s:4025 .bss:000000f2 last_r_p.17
C:\Temp/cch19s1E.s:4026 .bss:000000f3 last_r_n.18
C:\Temp/cch19s1E.s:4027 .bss:000000f4 MittelIntegralNick_Alt.19
C:\Temp/cch19s1E.s:4028 .bss:000000f8 MittelIntegralRoll_Alt.20
C:\Temp/cch19s1E.s:4029 .bss:000000fc HeightTrimming.21
C:\Temp/cch19s1E.s:4030 .bss:000000fe FilterHCGas.22
C:\Temp/cch19s1E.s:4031 .bss:00000100 HoverGasFilter.23
C:\Temp/cch19s1E.s:4036 .data:00000051 delay.24
C:\Temp/cch19s1E.s:4032 .bss:00000104 BaroAtUpperLimit.25
C:\Temp/cch19s1E.s:4038 .bss:00000105 BaroAtLowerLimit.26
C:\Temp/cch19s1E.s:4043 .text:00001f76 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.90e_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.90e_Ernstl_4-Motoren+Sexpander/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.90e_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.90e_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.90e_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.90e_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/ccX3CkRb.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccX3CkRb.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccX3CkRb.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccX3CkRb.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccX3CkRb.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccX3CkRb.s:15 .bss:00000000 HottestBl
C:\Temp/ccX3CkRb.s:21 .bss:00000001 MinBlTempertaure
C:\Temp/ccX3CkRb.s:27 .bss:00000002 MaxBlTempertaure
C:\Temp/ccX3CkRb.s:33 .progmem.data:00000000 HOTT_ERROR
C:\Temp/ccX3CkRb.s:100 .progmem.data:00000040 NC_ERROR_TEXT
C:\Temp/ccX3CkRb.s:136 .progmem.data:00000260 UNDERVOLTAGE
C:\Temp/ccX3CkRb.s:141 .progmem.data:00000276 MIKROKOPTER
C:\Temp/ccX3CkRb.s:148 .bss:00000003 HoTTVarioMeter
C:\Temp/ccX3CkRb.s:154 .bss:00000005 ToNC_SpeakHoTT
C:\Temp/ccX3CkRb.s:160 .data:00000000 SpeakHoTT
C:\Temp/ccX3CkRb.s:167 .bss:00000006 NaviData_TargetDistance
C:\Temp/ccX3CkRb.s:173 .bss:00000008 NaviData_TargetHoldTime
C:\Temp/ccX3CkRb.s:179 .bss:00000009 NaviData_WaypointNumber
C:\Temp/ccX3CkRb.s:185 .bss:0000000a NaviData_WaypointIndex
.bss:0000000b search.98
C:\Temp/ccX3CkRb.s:187 .bss:0000000c tmp_max.99
C:\Temp/ccX3CkRb.s:188 .bss:0000000d tmp_min.100
C:\Temp/ccX3CkRb.s:189 .bss:0000000e who.101
C:\Temp/ccX3CkRb.s:194 .text:00000000 GetHottestBl
C:\Temp/ccX3CkRb.s:262 .progmem.data:0000028c __c.97
C:\Temp/ccX3CkRb.s:267 .text:0000008c Hott_ClearLine
C:\Temp/ccX3CkRb.s:190 .bss:0000000f old_status.95
C:\Temp/ccX3CkRb.s:295 .bss:00000010 repeat.96
C:\Temp/ccX3CkRb.s:299 .text:000000bc HoTT_Waring
C:\Temp/ccX3CkRb.s:396 .text:0000016e NC_Fills_HoTT_Telemety
*COM*:0000002c VarioPacket
*COM*:0000002c GPSPacket
*COM*:0000002c ElectricAirPacket
*COM*:0000002c HoTTGeneral
C:\Temp/ccX3CkRb.s:469 .text:000001e0 BuildHoTT_Vario
C:\Temp/ccX3CkRb.s:577 .text:000002aa HoTT_Telemety
C:\Temp/ccX3CkRb.s:296 .bss:00000012 line.0
C:\Temp/ccX3CkRb.s:1157 .bss:00000013 page.1
C:\Temp/ccX3CkRb.s:1158 .bss:00000014 show_current.2
C:\Temp/ccX3CkRb.s:1159 .bss:00000015 show_mag.3
C:\Temp/ccX3CkRb.s:1160 .bss:00000016 show_poti.4
C:\Temp/ccX3CkRb.s:1165 .progmem.data:000002a2 __c.5
C:\Temp/ccX3CkRb.s:1169 .progmem.data:000002af __c.6
C:\Temp/ccX3CkRb.s:1173 .progmem.data:000002bc __c.7
C:\Temp/ccX3CkRb.s:1177 .progmem.data:000002c8 __c.8
C:\Temp/ccX3CkRb.s:1181 .progmem.data:000002d3 __c.9
C:\Temp/ccX3CkRb.s:1185 .progmem.data:000002dd __c.10
C:\Temp/ccX3CkRb.s:1189 .progmem.data:000002ea __c.11
C:\Temp/ccX3CkRb.s:1193 .progmem.data:000002f7 __c.12
C:\Temp/ccX3CkRb.s:1197 .progmem.data:00000302 __c.13
C:\Temp/ccX3CkRb.s:1201 .progmem.data:00000304 __c.14
C:\Temp/ccX3CkRb.s:1205 .progmem.data:00000306 __c.15
C:\Temp/ccX3CkRb.s:1209 .progmem.data:0000030e __c.16
C:\Temp/ccX3CkRb.s:1213 .progmem.data:00000316 __c.17
C:\Temp/ccX3CkRb.s:1217 .progmem.data:00000322 __c.18
C:\Temp/ccX3CkRb.s:1221 .progmem.data:00000324 __c.19
C:\Temp/ccX3CkRb.s:1225 .progmem.data:00000326 __c.20
C:\Temp/ccX3CkRb.s:1229 .progmem.data:00000328 __c.21
C:\Temp/ccX3CkRb.s:1233 .progmem.data:0000033e __c.22
C:\Temp/ccX3CkRb.s:1237 .progmem.data:00000354 __c.23
C:\Temp/ccX3CkRb.s:1241 .progmem.data:00000356 __c.24
C:\Temp/ccX3CkRb.s:1245 .progmem.data:0000035f __c.25
C:\Temp/ccX3CkRb.s:1249 .progmem.data:00000369 __c.26
C:\Temp/ccX3CkRb.s:1253 .progmem.data:0000036c __c.27
C:\Temp/ccX3CkRb.s:1257 .progmem.data:0000036f __c.28
C:\Temp/ccX3CkRb.s:1261 .progmem.data:00000372 __c.29
C:\Temp/ccX3CkRb.s:1265 .progmem.data:0000037d __c.30
C:\Temp/ccX3CkRb.s:1269 .progmem.data:00000389 __c.31
C:\Temp/ccX3CkRb.s:1273 .progmem.data:00000399 __c.32
C:\Temp/ccX3CkRb.s:1277 .progmem.data:000003b2 __c.33
C:\Temp/ccX3CkRb.s:1281 .progmem.data:000003bd __c.34
C:\Temp/ccX3CkRb.s:1285 .progmem.data:000003c3 __c.35
C:\Temp/ccX3CkRb.s:1289 .progmem.data:000003d6 __c.36
C:\Temp/ccX3CkRb.s:1293 .progmem.data:000003ec __c.37
C:\Temp/ccX3CkRb.s:1297 .progmem.data:00000407 __c.38
C:\Temp/ccX3CkRb.s:1301 .progmem.data:00000422 __c.39
C:\Temp/ccX3CkRb.s:1305 .progmem.data:0000042c __c.40
C:\Temp/ccX3CkRb.s:1309 .progmem.data:00000435 __c.41
C:\Temp/ccX3CkRb.s:1313 .progmem.data:0000043e __c.42
C:\Temp/ccX3CkRb.s:1317 .progmem.data:00000448 __c.43
C:\Temp/ccX3CkRb.s:1321 .progmem.data:0000044b __c.44
C:\Temp/ccX3CkRb.s:1325 .progmem.data:00000462 __c.45
C:\Temp/ccX3CkRb.s:1329 .progmem.data:00000476 __c.46
C:\Temp/ccX3CkRb.s:1333 .progmem.data:00000479 __c.47
C:\Temp/ccX3CkRb.s:1337 .progmem.data:0000047c __c.48
C:\Temp/ccX3CkRb.s:1341 .progmem.data:0000048f __c.49
C:\Temp/ccX3CkRb.s:1345 .progmem.data:00000495 __c.50
C:\Temp/ccX3CkRb.s:1349 .progmem.data:0000049b __c.51
C:\Temp/ccX3CkRb.s:1353 .progmem.data:000004a1 __c.52
C:\Temp/ccX3CkRb.s:1357 .progmem.data:000004b7 __c.53
C:\Temp/ccX3CkRb.s:1361 .progmem.data:000004d4 __c.54
C:\Temp/ccX3CkRb.s:1365 .progmem.data:000004e7 __c.55
C:\Temp/ccX3CkRb.s:1369 .progmem.data:000004f6 __c.56
C:\Temp/ccX3CkRb.s:1373 .progmem.data:00000513 __c.57
C:\Temp/ccX3CkRb.s:1377 .progmem.data:00000526 __c.58
C:\Temp/ccX3CkRb.s:1381 .progmem.data:00000539 __c.59
C:\Temp/ccX3CkRb.s:1385 .progmem.data:00000544 __c.60
C:\Temp/ccX3CkRb.s:1389 .progmem.data:0000054a __c.61
C:\Temp/ccX3CkRb.s:1393 .progmem.data:0000055d __c.62
C:\Temp/ccX3CkRb.s:1397 .progmem.data:00000573 __c.63
C:\Temp/ccX3CkRb.s:1401 .progmem.data:00000582 __c.64
C:\Temp/ccX3CkRb.s:1405 .progmem.data:00000593 __c.65
C:\Temp/ccX3CkRb.s:1409 .progmem.data:00000598 __c.66
C:\Temp/ccX3CkRb.s:1413 .progmem.data:000005a2 __c.67
C:\Temp/ccX3CkRb.s:1417 .progmem.data:000005a9 __c.68
C:\Temp/ccX3CkRb.s:1421 .progmem.data:000005b0 __c.69
C:\Temp/ccX3CkRb.s:1425 .progmem.data:000005b6 __c.70
C:\Temp/ccX3CkRb.s:1429 .progmem.data:000005bc __c.71
C:\Temp/ccX3CkRb.s:1433 .progmem.data:000005c5 __c.72
C:\Temp/ccX3CkRb.s:1437 .progmem.data:000005c9 __c.73
C:\Temp/ccX3CkRb.s:1441 .progmem.data:000005d2 __c.74
C:\Temp/ccX3CkRb.s:1445 .progmem.data:000005d9 __c.75
C:\Temp/ccX3CkRb.s:1449 .progmem.data:000005e0 __c.76
C:\Temp/ccX3CkRb.s:1453 .progmem.data:000005e7 __c.77
C:\Temp/ccX3CkRb.s:1457 .progmem.data:000005ec __c.78
C:\Temp/ccX3CkRb.s:1461 .progmem.data:000005f5 __c.79
C:\Temp/ccX3CkRb.s:1465 .progmem.data:000005fc __c.80
C:\Temp/ccX3CkRb.s:1469 .progmem.data:00000603 __c.81
C:\Temp/ccX3CkRb.s:1473 .progmem.data:0000060a __c.82
C:\Temp/ccX3CkRb.s:1477 .progmem.data:00000611 __c.83
C:\Temp/ccX3CkRb.s:1481 .progmem.data:0000061c __c.84
C:\Temp/ccX3CkRb.s:1485 .progmem.data:00000626 __c.85
C:\Temp/ccX3CkRb.s:1489 .progmem.data:0000062a __c.86
C:\Temp/ccX3CkRb.s:1493 .progmem.data:00000630 __c.87
C:\Temp/ccX3CkRb.s:1497 .progmem.data:00000644 __c.88
C:\Temp/ccX3CkRb.s:1501 .progmem.data:00000653 __c.89
C:\Temp/ccX3CkRb.s:1505 .progmem.data:00000667 __c.90
C:\Temp/ccX3CkRb.s:1509 .progmem.data:0000067b __c.91
C:\Temp/ccX3CkRb.s:1513 .progmem.data:0000068a __c.92
C:\Temp/ccX3CkRb.s:1517 .progmem.data:00000694 __c.93
C:\Temp/ccX3CkRb.s:1521 .progmem.data:00000699 __c.94
C:\Temp/ccX3CkRb.s:1526 .text:00000896 HoTT_Menu
*COM*:000000ac ASCIIPacket
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
Motor
LIBFC_HoTT_SetPos
LIBFC_HoTT_Putchar
_printf_P
FC_StatusFlags
NC_ErrorCode
MotorenEin
EE_Parameter
CheckDelay
SetDelay
FromNaviCtrl
VarioCharacter
AltitudeSetpointTrimming
__divmodhi4
FromNC_AltitudeSpeed
HoehenWert
__divmodsi4
HoTT_DataPointer
FC_StatusFlags2
__udivmodqi4
__udivmodhi4
GPSInfo
NC_GPS_ModeCharacter
UBat
ErsatzKompassInGrad
Capacity
FlugSekunden
BattLowVoltageWarning
VarioMeter
__tablejump2__
LIBFC_HoTT_Putchar_BLINK
Parameter_GlobalConfig
HoehenReglerAktiv
NaviDataOkay
EarthMagneticField
EarthMagneticInclinationTheoretic
EarthMagneticInclination
HoTTBlink
HottKeyboard
LIBFC_HoTT_Clear
KompassValue
LIBFC_HoTT_Putchar_INV
RequiredMotors
GetActiveParamSet
Mixer
Parameter_HoehenSchalter
Parameter_ExtraConfig
CareFree
Poti
Parameter_ServoNickControl
PPM_in
__epilogue_restores__
/branches/v0.90e_Ernstl_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.90e_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.90e_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.90e_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.90e_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.90e_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/cczd7k4C.s:3 *ABS*:0000003f __SREG__
C:\Temp/cczd7k4C.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cczd7k4C.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cczd7k4C.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cczd7k4C.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cczd7k4C.s:14 .data:00000000 JetiExData
C:\Temp/cczd7k4C.s:99 .progmem.data:00000000 JETI_CODE
.bss:00000000 JetiVarioMeter.0
C:\Temp/cczd7k4C.s:157 .text:00000000 BuildJeti_Vario
C:\Temp/cczd7k4C.s:290 .text:0000010e JetiEX_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
VarioMeter
VarioCharacter
EE_Parameter
AltitudeSetpointTrimming
FC_StatusFlags
FromNC_AltitudeSpeed
GetHottestBl
UBat
Capacity
__udivmodhi4
HoehenWert
__divmodsi4
KompassValue
GPSInfo
MaxBlTempertaure
EarthMagneticField
NC_ErrorCode
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccO14R64.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccO14R64.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccO14R64.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccO14R64.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccO14R64.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccO14R64.s:14 .progmem.data:00000000 JetiBox_Menu
C:\Temp/ccO14R64.s:18 .text:00000000 Menu_Status
C:\Temp/ccO14R64.s:28 .text:00000002 Menu_Temperature
C:\Temp/ccO14R64.s:38 .text:00000004 Menu_Battery
C:\Temp/ccO14R64.s:48 .text:00000006 Magnet_Values
C:\Temp/ccO14R64.s:58 .text:00000008 Menu_PosInfo
C:\Temp/ccO14R64.s:68 .text:0000000a JetiBox_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_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.90e_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.90e_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/cc4RXe9P.s:3 *ABS*:0000003f __SREG__
C:\Temp/cc4RXe9P.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cc4RXe9P.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cc4RXe9P.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cc4RXe9P.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cc4RXe9P.s:14 .data:00000000 J17Mask
C:\Temp/cc4RXe9P.s:21 .bss:00000000 J17Blinkcount
C:\Temp/cc4RXe9P.s:27 .data:00000001 J16Mask
C:\Temp/cc4RXe9P.s:34 .bss:00000001 J16Blinkcount
C:\Temp/cc4RXe9P.s:40 .bss:00000002 LED2_Timing
C:\Temp/cc4RXe9P.s:46 .bss:00000004 LED1_Timing
C:\Temp/cc4RXe9P.s:51 .text:00000000 LED_Init
.bss:00000006 delay.0
C:\Temp/cc4RXe9P.s:69 .bss:00000007 J16Bitmask.1
C:\Temp/cc4RXe9P.s:70 .bss:00000008 J17Bitmask.2
C:\Temp/cc4RXe9P.s:71 .bss:00000009 J16Warn.3
C:\Temp/cc4RXe9P.s:72 .bss:0000000a J17Warn.4
C:\Temp/cc4RXe9P.s:73 .bss:0000000b from_nc.5
C:\Temp/cc4RXe9P.s:77 .text:0000001e LED_Update
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
PPM_in
FC_StatusFlags
VersionInfo
EE_Parameter
MotorenEin
Parameter_J16Timing
Parameter_J17Timing
FC_StatusFlags2
/branches/v0.90e_Ernstl_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.90e_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.90e_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.90e_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/ccBs3kfr.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccBs3kfr.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccBs3kfr.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccBs3kfr.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccBs3kfr.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccBs3kfr.s:15 .bss:00000000 JetiBeep
C:\Temp/ccBs3kfr.s:21 .bss:00000001 FoundMotors
C:\Temp/ccBs3kfr.s:27 .bss:00000002 FlugSekunden
C:\Temp/ccBs3kfr.s:33 .bss:00000004 FlugMinutenGesamt
C:\Temp/ccBs3kfr.s:39 .bss:00000006 FlugMinuten
C:\Temp/ccBs3kfr.s:45 .data:00000000 BattLowVoltageWarning
C:\Temp/ccBs3kfr.s:50 .data:00000001 PlatinenVersion
C:\Temp/ccBs3kfr.s:57 .bss:00000008 DisableRcOffBeeping
C:\Temp/ccBs3kfr.s:62 .progmem.data:00000000 __c.11
C:\Temp/ccBs3kfr.s:67 .text:00000000 PrintLine
*COM*:00000002 _printf_P
C:\Temp/ccBs3kfr.s:93 .data:00000002 stick.10
C:\Temp/ccBs3kfr.s:98 .text:00000024 CalMk3Mag
C:\Temp/ccBs3kfr.s:152 .progmem.data:00000026 __c.7
C:\Temp/ccBs3kfr.s:156 .progmem.data:0000002e __c.8
C:\Temp/ccBs3kfr.s:160 .progmem.data:00000039 __c.9
C:\Temp/ccBs3kfr.s:165 .text:0000008e LipoDetection
C:\Temp/ccBs3kfr.s:302 .progmem.data:0000004d __c.0
C:\Temp/ccBs3kfr.s:306 .progmem.data:0000005f __c.1
C:\Temp/ccBs3kfr.s:310 .progmem.data:00000062 __c.2
C:\Temp/ccBs3kfr.s:314 .progmem.data:00000080 __c.3
C:\Temp/ccBs3kfr.s:318 .progmem.data:000000a0 __c.4
C:\Temp/ccBs3kfr.s:322 .progmem.data:000000a5 __c.5
.bss:00000009 second.6
C:\Temp/ccBs3kfr.s:328 .text:000001a2 main
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
uart_putchar
EE_Parameter
PPM_in
WinkelOut
beeptime
Piep
DebugOut
SetDelay
CheckDelay
UBat
__udivmodqi4
__stack
StickGier
StickRoll
StickNick
GIER_GRAD_FAKTOR
Timer_Init
TIMER2_Init
UART_Init
rc_sum_init
ADC_Init
I2C_Init
SPI_MasterInit
Capacity_Init
LIBFC_Init
ParamSet_Init
BLFlags
motor_read
SendMotorData
Motor
Mixer
ServoActive
RequiredMotors
VersionInfo
SucheLuftruckOffset
SetNeutral
ExternControl
GetParamByte
LcdClear
I2CTimeout
LIBFC_ReceiverInit
ReceiverUpdateModeActive
UpdateMotor
AdReady
MotorRegler
SenderOkay
MissingMotor
I2C_Reset
BeepMuster
MotorenEin
LIBFC_Polling
NewSBusData
ProcessSBus
CalculateServoSignals
CalculateServo
DatenUebertragung
BearbeiteRxDaten
CalcNickServoValue
HoTT_Menu
BuildJeti_Vario
PcZugriff
ExternStickNick
ExternStickRoll
ExternStickGier
NaviDataOkay
NC_Version
NC_ErrorCode
GPS_Nick
GPS_Roll
GPS_Aid_StickMultiplikator
GPSInfo
FromNaviCtrl
FC_StatusFlags
SPI_StartTransmitPacket
SendSPI
StartLuftdruck
Luftdruck
SetParamByte
LED_Update
Capacity_Update
SPI_TransmitByte
/branches/v0.90e_Ernstl_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 = 4
VERSION_SERIAL_MAJOR = 11 # Serial Protocol
VERSION_SERIAL_MINOR = 0 # Serial Protocol
NC_SPI_COMPATIBLE = 52 # Navi-Kompatibilität
#-------------------------------------------------------------------
# ATMEGA644: 63487 is maximum
#-------------------------------------------------------------------
# 0 a
# 1 b
# 2 c
# 3 d
# 4 e
# 5 f
# 6 g
# 7 h
# 8 i
# 9 j
# 10 k
# 11 L
#-------------------------------------------------------------------
 
# get SVN revision
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'")
 
ifeq ($(MCU), atmega1284p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA1284P
LIBFC_EXT = 1284
endif
 
ifeq ($(MCU), atmega644p)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
HEX_NAME = MEGA644
LIBFC_EXT = 644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
ifeq ($(VERSION_PATCH), 0)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 1)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 2)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 3)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 4)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 5)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 6)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 7)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 8)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 9)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 10)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 11)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 12)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 13)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 14)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 15)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 16)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 17)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 18)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 19)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 20)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 21)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 22)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 23)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 24)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV)
endif
ifeq ($(VERSION_PATCH), 25)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV)
endif
 
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
#OPT = 2
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c
SRC += mymath.c jetimenu.c capacity.c debug.c
SRC += hottmenu.c sbus.c user_receiver.c
SRC += jeti_ex.c
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC = isqrt.S
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=$(<:%.c=%.lst) $(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
# shrink code size
CFLAGS += -mtiny-stack
#CFLAGS += -fno-inline-functions
CFLAGS += -mcall-prologues
 
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
LDFLAGS += libfc$(LIBFC_EXT).a
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = stk200
#AVRDUDE_PROGRAMMER = ponyser
AVRDUDE_PROGRAMMER = avrispv2
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port
AVRDUDE_PORT = usb # programmer connected to USB
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -x -A $(TARGET).elf
LIMITS = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf
 
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) Flight-Ctrl_*.hex
$(REMOVE) Flight-Ctrl_*.eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) Flight-Ctrl_*.elf
$(REMOVE) Flight-Ctrl_*.map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) Flight-Ctrl_*.sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) $(SRC:.c=.o)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:%.c=%.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/v0.90e_Ernstl_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.90e_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.90e_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 85E6 ldi r24,lo8(101)
522 0144 90E0 ldi r25,hi8(101)
523 0146 9F93 push r25
524 0148 8F93 push r24
525 014a 8AE5 ldi r24,lo8(90)
526 014c 90E0 ldi r25,hi8(90)
527 014e 9F93 push r25
528 0150 8F93 push r24
529 0152 1F92 push __zero_reg__
530 0154 1F92 push __zero_reg__
531 0156 8091 0000 lds r24,PlatinenVersion
532 015a 6AE0 ldi r22,lo8(10)
533 015c 0E94 0000 call __udivmodqi4
534 0160 892F mov r24,r25
535 0162 9927 clr r25
536 0164 9F93 push r25
537 0166 8F93 push r24
538 0168 8091 0000 lds r24,PlatinenVersion
539 016c 0E94 0000 call __udivmodqi4
540 0170 9927 clr r25
541 0172 9F93 push r25
542 0174 8F93 push r24
543 0176 80E0 ldi r24,lo8(__c.3)
544 0178 90E0 ldi r25,hi8(__c.3)
545 017a 9F93 push r25
546 017c 8F93 push r24
547 017e DF92 push r13
548 0180 CF92 push r12
549 0182 E091 0000 lds r30,_printf_P
550 0186 F091 0000 lds r31,(_printf_P)+1
551 018a 0995 icall
552 018c 88E2 ldi r24,lo8(40)
553 018e 8093 0000 sts DispPtr,r24
554 0192 EDB7 in r30,__SP_L__
555 0194 FEB7 in r31,__SP_H__
556 0196 3E96 adiw r30,14
557 0198 EDBF out __SP_L__,r30
558 019a 80E0 ldi r24,lo8(Mixer+1)
559 019c 90E0 ldi r25,hi8(Mixer+1)
560 019e 9F93 push r25
561 01a0 8F93 push r24
562 01a2 0E94 0000 call GetActiveParamSet
563 01a6 9927 clr r25
564 01a8 9F93 push r25
565 01aa 8F93 push r24
566 01ac 80E0 ldi r24,lo8(__c.4)
567 01ae 90E0 ldi r25,hi8(__c.4)
568 01b0 9F93 push r25
569 01b2 8F93 push r24
570 01b4 DF92 push r13
571 01b6 CF92 push r12
572 01b8 E091 0000 lds r30,_printf_P
573 01bc F091 0000 lds r31,(_printf_P)+1
574 01c0 0995 icall
575 01c2 8091 0000 lds r24,VersionInfo+6
576 01c6 9927 clr r25
577 01c8 2DB7 in r18,__SP_L__
578 01ca 3EB7 in r19,__SP_H__
579 01cc 285F subi r18,lo8(-(8))
580 01ce 3F4F sbci r19,hi8(-(8))
581 01d0 2DBF out __SP_L__,r18
582 01d2 EC01 movw r28,r24
583 01d4 C071 andi r28,lo8(16)
584 01d6 D070 andi r29,hi8(16)
585 01d8 84FF sbrs r24,4
586 01da 00C0 rjmp .L22
587 01dc 8CE3 ldi r24,lo8(60)
588 01de 8093 0000 sts DispPtr,r24
589 01e2 80E0 ldi r24,lo8(__c.5)
590 01e4 90E0 ldi r25,hi8(__c.5)
591 01e6 00C0 rjmp .L124
592 .L22:
593 01e8 9091 0000 lds r25,NC_ErrorCode
594 01ec 9923 tst r25
595 01ee 01F0 breq .L24
596 01f0 8CE3 ldi r24,lo8(60)
597 01f2 8093 0000 sts DispPtr,r24
598 01f6 892F mov r24,r25
599 01f8 9927 clr r25
600 01fa 9F93 push r25
601 01fc 8F93 push r24
602 01fe 80E0 ldi r24,lo8(__c.6)
603 0200 90E0 ldi r25,hi8(__c.6)
604 0202 9F93 push r25
605 0204 8F93 push r24
606 0206 1F93 push r17
607 0208 0F93 push r16
608 020a E091 0000 lds r30,_printf_P
609 020e F091 0000 lds r31,(_printf_P)+1
610 0212 0995 icall
611 0214 DF93 push r29
612 0216 CF93 push r28
613 0218 9091 0000 lds r25,NC_ErrorCode
614 021c 81E1 ldi r24,lo8(17)
615 021e 989F mul r25,r24
616 0220 C001 movw r24,r0
617 0222 1124 clr r1
618 0224 8050 subi r24,lo8(-(NC_ERROR_TEXT))
619 0226 9040 sbci r25,hi8(-(NC_ERROR_TEXT))
620 0228 9F93 push r25
621 022a 8F93 push r24
622 022c 1F93 push r17
623 022e 0F93 push r16
624 0230 E091 0000 lds r30,_printf_P
625 0234 F091 0000 lds r31,(_printf_P)+1
626 0238 0995 icall
627 023a 8DB7 in r24,__SP_L__
628 023c 9EB7 in r25,__SP_H__
629 023e 0C96 adiw r24,12
630 0240 00C0 rjmp .L120
631 .L24:
632 0242 9091 0000 lds r25,VersionInfo+5
633 0246 9923 tst r25
634 0248 01F0 breq .L26
635 024a 8CE3 ldi r24,lo8(60)
636 024c 8093 0000 sts DispPtr,r24
637 0250 892F mov r24,r25
638 0252 9927 clr r25
639 0254 9F93 push r25
640 0256 8F93 push r24
641 0258 80E0 ldi r24,lo8(__c.7)
642 025a 90E0 ldi r25,hi8(__c.7)
643 025c 9F93 push r25
644 025e 8F93 push r24
645 0260 1F93 push r17
646 0262 0F93 push r16
647 0264 E091 0000 lds r30,_printf_P
648 0268 F091 0000 lds r31,(_printf_P)+1
649 026c 0995 icall
650 026e EDB7 in r30,__SP_L__
651 0270 FEB7 in r31,__SP_H__
652 0272 3696 adiw r30,6
653 0274 00C0 rjmp .L117
654 .L26:
655 0276 9091 0000 lds r25,MissingMotor
656 027a 9923 tst r25
657 027c 01F0 breq .L28
658 027e 8CE3 ldi r24,lo8(60)
659 0280 8093 0000 sts DispPtr,r24
660 0284 892F mov r24,r25
661 0286 9927 clr r25
662 0288 9F93 push r25
663 028a 8F93 push r24
664 028c 80E0 ldi r24,lo8(__c.8)
665 028e 90E0 ldi r25,hi8(__c.8)
666 0290 9F93 push r25
667 0292 8F93 push r24
668 0294 1F93 push r17
669 0296 0F93 push r16
670 0298 00C0 rjmp .L123
671 .L28:
672 029a 8091 0000 lds r24,I2CTimeout
673 029e 9091 0000 lds r25,(I2CTimeout)+1
674 02a2 0697 sbiw r24,6
675 02a4 00F0 brlo .+4
676 02a6 0C94 0000 jmp .L20
677 02aa 8CE3 ldi r24,lo8(60)
678 02ac 8093 0000 sts DispPtr,r24
679 02b0 80E0 ldi r24,lo8(__c.9)
680 02b2 90E0 ldi r25,hi8(__c.9)
681 02b4 00C0 rjmp .L125
682 .L31:
683 02b6 8091 0000 lds r24,Parameter_GlobalConfig
684 02ba 10E0 ldi r17,lo8(pm(Menu_Putchar))
685 02bc C12E mov r12,r17
686 02be 10E0 ldi r17,hi8(pm(Menu_Putchar))
687 02c0 D12E mov r13,r17
688 02c2 C091 0000 lds r28,_printf_P
689 02c6 D091 0000 lds r29,(_printf_P)+1
690 02ca 80FF sbrs r24,0
691 02cc 00C0 rjmp .L32
692 02ce 1092 0000 sts DispPtr,__zero_reg__
693 02d2 8091 0000 lds r24,HoehenWert
694 02d6 9091 0000 lds r25,(HoehenWert)+1
695 02da A091 0000 lds r26,(HoehenWert)+2
696 02de B091 0000 lds r27,(HoehenWert)+3
697 02e2 BC01 movw r22,r24
698 02e4 CD01 movw r24,r26
699 02e6 25E0 ldi r18,lo8(5)
700 02e8 30E0 ldi r19,hi8(5)
701 02ea 40E0 ldi r20,hlo8(5)
702 02ec 50E0 ldi r21,hhi8(5)
703 02ee 0E94 0000 call __divmodsi4
704 02f2 3F93 push r19
705 02f4 2F93 push r18
706 02f6 80E0 ldi r24,lo8(__c.10)
707 02f8 90E0 ldi r25,hi8(__c.10)
708 02fa 9F93 push r25
709 02fc 8F93 push r24
710 02fe DF92 push r13
711 0300 CF92 push r12
712 0302 FE01 movw r30,r28
713 0304 0995 icall
714 0306 84E1 ldi r24,lo8(20)
715 0308 8093 0000 sts DispPtr,r24
716 030c 8DB7 in r24,__SP_L__
717 030e 9EB7 in r25,__SP_H__
718 0310 0696 adiw r24,6
719 0312 8DBF out __SP_L__,r24
720 0314 8091 0000 lds r24,SollHoehe
721 0318 9091 0000 lds r25,(SollHoehe)+1
722 031c A091 0000 lds r26,(SollHoehe)+2
723 0320 B091 0000 lds r27,(SollHoehe)+3
724 0324 BC01 movw r22,r24
725 0326 CD01 movw r24,r26
726 0328 25E0 ldi r18,lo8(5)
727 032a 30E0 ldi r19,hi8(5)
728 032c 40E0 ldi r20,hlo8(5)
729 032e 50E0 ldi r21,hhi8(5)
730 0330 0E94 0000 call __divmodsi4
731 0334 3F93 push r19
732 0336 2F93 push r18
733 0338 80E0 ldi r24,lo8(__c.11)
734 033a 90E0 ldi r25,hi8(__c.11)
735 033c 9F93 push r25
736 033e 8F93 push r24
737 0340 DF92 push r13
738 0342 CF92 push r12
739 0344 E091 0000 lds r30,_printf_P
740 0348 F091 0000 lds r31,(_printf_P)+1
741 034c 0995 icall
742 034e 88E2 ldi r24,lo8(40)
743 0350 8093 0000 sts DispPtr,r24
744 0354 EDB7 in r30,__SP_L__
745 0356 FEB7 in r31,__SP_H__
746 0358 3696 adiw r30,6
747 035a EDBF out __SP_L__,r30
748 035c 8091 0000 lds r24,MessLuftdruck
749 0360 9091 0000 lds r25,(MessLuftdruck)+1
750 0364 9F93 push r25
751 0366 8F93 push r24
752 0368 80E0 ldi r24,lo8(__c.12)
753 036a 90E0 ldi r25,hi8(__c.12)
754 036c 9F93 push r25
755 036e 8F93 push r24
756 0370 DF92 push r13
757 0372 CF92 push r12
758 0374 E091 0000 lds r30,_printf_P
759 0378 F091 0000 lds r31,(_printf_P)+1
760 037c 0995 icall
761 037e 8CE3 ldi r24,lo8(60)
762 0380 8093 0000 sts DispPtr,r24
763 0384 2DB7 in r18,__SP_L__
764 0386 3EB7 in r19,__SP_H__
765 0388 2A5F subi r18,lo8(-(6))
766 038a 3F4F sbci r19,hi8(-(6))
767 038c 2DBF out __SP_L__,r18
768 038e 87B5 in r24,71-0x20
769 0390 9927 clr r25
770 0392 9F93 push r25
771 0394 8F93 push r24
772 0396 80E0 ldi r24,lo8(__c.13)
773 0398 90E0 ldi r25,hi8(__c.13)
774 039a 9F93 push r25
775 039c 8F93 push r24
776 039e DF92 push r13
777 03a0 CF92 push r12
778 03a2 00C0 rjmp .L119
779 .L32:
780 03a4 1092 0000 sts DispPtr,__zero_reg__
781 03a8 80E0 ldi r24,lo8(__c.14)
782 03aa 90E0 ldi r25,hi8(__c.14)
783 03ac 9F93 push r25
784 03ae 8F93 push r24
785 03b0 DF92 push r13
786 03b2 CF92 push r12
787 03b4 FE01 movw r30,r28
788 03b6 0995 icall
789 03b8 84E1 ldi r24,lo8(20)
790 03ba 8093 0000 sts DispPtr,r24
791 03be 0F90 pop __tmp_reg__
792 03c0 0F90 pop __tmp_reg__
793 03c2 0F90 pop __tmp_reg__
794 03c4 0F90 pop __tmp_reg__
795 03c6 80E0 ldi r24,lo8(__c.15)
796 03c8 90E0 ldi r25,hi8(__c.15)
797 .L124:
798 03ca 9F93 push r25
799 03cc 8F93 push r24
800 03ce DF92 push r13
801 03d0 CF92 push r12
802 03d2 00C0 rjmp .L118
803 .L34:
804 03d4 1092 0000 sts DispPtr,__zero_reg__
805 03d8 80E0 ldi r24,lo8(__c.16)
806 03da 90E0 ldi r25,hi8(__c.16)
807 03dc 9F93 push r25
808 03de 8F93 push r24
809 03e0 00E0 ldi r16,lo8(pm(Menu_Putchar))
810 03e2 10E0 ldi r17,hi8(pm(Menu_Putchar))
811 03e4 DF92 push r13
812 03e6 CF92 push r12
813 03e8 FE01 movw r30,r28
814 03ea 0995 icall
815 03ec 84E1 ldi r24,lo8(20)
816 03ee 8093 0000 sts DispPtr,r24
817 03f2 0F90 pop __tmp_reg__
818 03f4 0F90 pop __tmp_reg__
819 03f6 0F90 pop __tmp_reg__
820 03f8 0F90 pop __tmp_reg__
821 03fa 8091 0000 lds r24,IntegralNick
822 03fe 9091 0000 lds r25,(IntegralNick)+1
823 0402 A091 0000 lds r26,(IntegralNick)+2
824 0406 B091 0000 lds r27,(IntegralNick)+3
825 040a B7FF sbrs r27,7
826 040c 00C0 rjmp .L35
827 040e 8150 subi r24,lo8(-(1023))
828 0410 9C4F sbci r25,hi8(-(1023))
829 0412 AF4F sbci r26,hlo8(-(1023))
830 0414 BF4F sbci r27,hhi8(-(1023))
831 .L35:
832 0416 CAE0 ldi r28,10
833 0418 B595 1: asr r27
834 041a A795 ror r26
835 041c 9795 ror r25
836 041e 8795 ror r24
837 0420 CA95 dec r28
838 0422 01F4 brne 1b
839 0424 BF93 push r27
840 0426 AF93 push r26
841 0428 9F93 push r25
842 042a 8F93 push r24
843 042c 80E0 ldi r24,lo8(__c.17)
844 042e 90E0 ldi r25,hi8(__c.17)
845 0430 9F93 push r25
846 0432 8F93 push r24
847 0434 1F93 push r17
848 0436 0F93 push r16
849 0438 E091 0000 lds r30,_printf_P
850 043c F091 0000 lds r31,(_printf_P)+1
851 0440 0995 icall
852 0442 88E2 ldi r24,lo8(40)
853 0444 8093 0000 sts DispPtr,r24
854 0448 EDB7 in r30,__SP_L__
855 044a FEB7 in r31,__SP_H__
856 044c 3896 adiw r30,8
857 044e EDBF out __SP_L__,r30
858 0450 8091 0000 lds r24,IntegralRoll
859 0454 9091 0000 lds r25,(IntegralRoll)+1
860 0458 A091 0000 lds r26,(IntegralRoll)+2
861 045c B091 0000 lds r27,(IntegralRoll)+3
862 0460 B7FF sbrs r27,7
863 0462 00C0 rjmp .L36
864 0464 8150 subi r24,lo8(-(1023))
865 0466 9C4F sbci r25,hi8(-(1023))
866 0468 AF4F sbci r26,hlo8(-(1023))
867 046a BF4F sbci r27,hhi8(-(1023))
868 .L36:
869 046c FAE0 ldi r31,10
870 046e B595 1: asr r27
871 0470 A795 ror r26
872 0472 9795 ror r25
873 0474 8795 ror r24
874 0476 FA95 dec r31
875 0478 01F4 brne 1b
876 047a BF93 push r27
877 047c AF93 push r26
878 047e 9F93 push r25
879 0480 8F93 push r24
880 0482 80E0 ldi r24,lo8(__c.18)
881 0484 90E0 ldi r25,hi8(__c.18)
882 0486 9F93 push r25
883 0488 8F93 push r24
884 048a 1F93 push r17
885 048c 0F93 push r16
886 048e E091 0000 lds r30,_printf_P
887 0492 F091 0000 lds r31,(_printf_P)+1
888 0496 0995 icall
889 0498 8CE3 ldi r24,lo8(60)
890 049a 8093 0000 sts DispPtr,r24
891 049e 2DB7 in r18,__SP_L__
892 04a0 3EB7 in r19,__SP_H__
893 04a2 285F subi r18,lo8(-(8))
894 04a4 3F4F sbci r19,hi8(-(8))
895 04a6 2DBF out __SP_L__,r18
896 04a8 8091 0000 lds r24,ErsatzKompassInGrad
897 04ac 9091 0000 lds r25,(ErsatzKompassInGrad)+1
898 04b0 9F93 push r25
899 04b2 8F93 push r24
900 04b4 80E0 ldi r24,lo8(__c.19)
901 04b6 90E0 ldi r25,hi8(__c.19)
902 04b8 9F93 push r25
903 04ba 8F93 push r24
904 04bc 1F93 push r17
905 04be 0F93 push r16
906 .L119:
907 04c0 E091 0000 lds r30,_printf_P
908 04c4 F091 0000 lds r31,(_printf_P)+1
909 04c8 0995 icall
910 04ca 8DB7 in r24,__SP_L__
911 04cc 9EB7 in r25,__SP_H__
912 04ce 0696 adiw r24,6
913 .L120:
914 04d0 8DBF out __SP_L__,r24
915 04d2 00C0 rjmp .L20
916 .L37:
917 04d4 E1E0 ldi r30,lo8(1)
918 04d6 FE2E mov r15,r30
919 04d8 C1E0 ldi r28,lo8(1)
920 04da D0E0 ldi r29,hi8(1)
921 04dc 00E0 ldi r16,lo8(PPM_in+2)
922 04de 10E0 ldi r17,hi8(PPM_in+2)
923 .L41:
924 04e0 9F2D mov r25,r15
925 04e2 9695 lsr r25
926 04e4 84E1 ldi r24,lo8(20)
927 04e6 989F mul r25,r24
928 04e8 C001 movw r24,r0
929 04ea 1124 clr r1
930 04ec 8093 0000 sts DispPtr,r24
931 04f0 F801 movw r30,r16
932 04f2 8281 ldd r24,Z+2
933 04f4 9381 ldd r25,Z+3
934 04f6 9F93 push r25
935 04f8 8F93 push r24
936 04fa 2196 adiw r28,1
937 04fc DF93 push r29
938 04fe CF93 push r28
939 0500 2197 sbiw r28,1
940 0502 8081 ld r24,Z
941 0504 9181 ldd r25,Z+1
942 0506 9F93 push r25
943 0508 8F93 push r24
944 050a DF93 push r29
945 050c CF93 push r28
946 050e 80E0 ldi r24,lo8(__c.20)
947 0510 90E0 ldi r25,hi8(__c.20)
948 0512 9F93 push r25
949 0514 8F93 push r24
950 0516 80E0 ldi r24,lo8(pm(Menu_Putchar))
951 0518 90E0 ldi r25,hi8(pm(Menu_Putchar))
952 051a 9F93 push r25
953 051c 8F93 push r24
954 051e E091 0000 lds r30,_printf_P
955 0522 F091 0000 lds r31,(_printf_P)+1
956 0526 0995 icall
957 0528 2DB7 in r18,__SP_L__
958 052a 3EB7 in r19,__SP_H__
959 052c 245F subi r18,lo8(-(12))
960 052e 3F4F sbci r19,hi8(-(12))
961 0530 2DBF out __SP_L__,r18
962 0532 32E0 ldi r19,lo8(2)
963 0534 F30E add r15,r19
964 0536 2296 adiw r28,2
965 0538 0C5F subi r16,lo8(-(4))
966 053a 1F4F sbci r17,hi8(-(4))
967 053c 88E0 ldi r24,lo8(8)
968 053e 8F15 cp r24,r15
969 0540 00F4 brsh .L41
970 0542 00C0 rjmp .L20
971 .L42:
972 0544 1092 0000 sts DispPtr,__zero_reg__
973 0548 8091 0000 lds r24,EE_Parameter+2
974 054c E82F mov r30,r24
975 054e FF27 clr r31
976 0550 EE0F add r30,r30
977 0552 FF1F adc r31,r31
978 0554 E050 subi r30,lo8(-(PPM_in))
979 0556 F040 sbci r31,hi8(-(PPM_in))
980 0558 8081 ld r24,Z
981 055a 9181 ldd r25,Z+1
982 055c 9F93 push r25
983 055e 8F93 push r24
984 0560 8091 0000 lds r24,EE_Parameter+1
985 0564 E82F mov r30,r24
986 0566 FF27 clr r31
987 0568 EE0F add r30,r30
988 056a FF1F adc r31,r31
989 056c E050 subi r30,lo8(-(PPM_in))
990 056e F040 sbci r31,hi8(-(PPM_in))
991 0570 8081 ld r24,Z
992 0572 9181 ldd r25,Z+1
993 0574 9F93 push r25
994 0576 8F93 push r24
995 0578 80E0 ldi r24,lo8(__c.21)
996 057a 90E0 ldi r25,hi8(__c.21)
997 057c 9F93 push r25
998 057e 8F93 push r24
999 0580 DF92 push r13
1000 0582 CF92 push r12
1001 0584 FE01 movw r30,r28
1002 0586 0995 icall
1003 0588 84E1 ldi r24,lo8(20)
1004 058a 8093 0000 sts DispPtr,r24
1005 058e EDB7 in r30,__SP_L__
1006 0590 FEB7 in r31,__SP_H__
1007 0592 3896 adiw r30,8
1008 0594 EDBF out __SP_L__,r30
1009 0596 8091 0000 lds r24,EE_Parameter+4
1010 059a E82F mov r30,r24
1011 059c FF27 clr r31
1012 059e EE0F add r30,r30
1013 05a0 FF1F adc r31,r31
1014 05a2 E050 subi r30,lo8(-(PPM_in))
1015 05a4 F040 sbci r31,hi8(-(PPM_in))
1016 05a6 8081 ld r24,Z
1017 05a8 9181 ldd r25,Z+1
1018 05aa 9F93 push r25
1019 05ac 8F93 push r24
1020 05ae 8091 0000 lds r24,EE_Parameter+3
1021 05b2 E82F mov r30,r24
1022 05b4 FF27 clr r31
1023 05b6 EE0F add r30,r30
1024 05b8 FF1F adc r31,r31
1025 05ba E050 subi r30,lo8(-(PPM_in))
1026 05bc F040 sbci r31,hi8(-(PPM_in))
1027 05be 8081 ld r24,Z
1028 05c0 9181 ldd r25,Z+1
1029 05c2 8158 subi r24,lo8(-(127))
1030 05c4 9F4F sbci r25,hi8(-(127))
1031 05c6 9F93 push r25
1032 05c8 8F93 push r24
1033 05ca 80E0 ldi r24,lo8(__c.22)
1034 05cc 90E0 ldi r25,hi8(__c.22)
1035 05ce 9F93 push r25
1036 05d0 8F93 push r24
1037 05d2 DF92 push r13
1038 05d4 CF92 push r12
1039 05d6 E091 0000 lds r30,_printf_P
1040 05da F091 0000 lds r31,(_printf_P)+1
1041 05de 0995 icall
1042 05e0 88E2 ldi r24,lo8(40)
1043 05e2 8093 0000 sts DispPtr,r24
1044 05e6 2DB7 in r18,__SP_L__
1045 05e8 3EB7 in r19,__SP_H__
1046 05ea 285F subi r18,lo8(-(8))
1047 05ec 3F4F sbci r19,hi8(-(8))
1048 05ee 2DBF out __SP_L__,r18
1049 05f0 8091 0000 lds r24,EE_Parameter+6
1050 05f4 E82F mov r30,r24
1051 05f6 FF27 clr r31
1052 05f8 EE0F add r30,r30
1053 05fa FF1F adc r31,r31
1054 05fc E050 subi r30,lo8(-(PPM_in))
1055 05fe F040 sbci r31,hi8(-(PPM_in))
1056 0600 8081 ld r24,Z
1057 0602 9181 ldd r25,Z+1
1058 0604 8158 subi r24,lo8(-(127))
1059 0606 9F4F sbci r25,hi8(-(127))
1060 0608 9F93 push r25
1061 060a 8F93 push r24
1062 060c 8091 0000 lds r24,EE_Parameter+5
1063 0610 E82F mov r30,r24
1064 0612 FF27 clr r31
1065 0614 EE0F add r30,r30
1066 0616 FF1F adc r31,r31
1067 0618 E050 subi r30,lo8(-(PPM_in))
1068 061a F040 sbci r31,hi8(-(PPM_in))
1069 061c 8081 ld r24,Z
1070 061e 9181 ldd r25,Z+1
1071 0620 8158 subi r24,lo8(-(127))
1072 0622 9F4F sbci r25,hi8(-(127))
1073 0624 9F93 push r25
1074 0626 8F93 push r24
1075 0628 80E0 ldi r24,lo8(__c.23)
1076 062a 90E0 ldi r25,hi8(__c.23)
1077 062c 9F93 push r25
1078 062e 8F93 push r24
1079 0630 DF92 push r13
1080 0632 CF92 push r12
1081 0634 E091 0000 lds r30,_printf_P
1082 0638 F091 0000 lds r31,(_printf_P)+1
1083 063c 0995 icall
1084 063e 8CE3 ldi r24,lo8(60)
1085 0640 8093 0000 sts DispPtr,r24
1086 0644 8DB7 in r24,__SP_L__
1087 0646 9EB7 in r25,__SP_H__
1088 0648 0896 adiw r24,8
1089 064a 8DBF out __SP_L__,r24
1090 064c 8091 0000 lds r24,EE_Parameter+8
1091 0650 E82F mov r30,r24
1092 0652 FF27 clr r31
1093 0654 EE0F add r30,r30
1094 0656 FF1F adc r31,r31
1095 0658 E050 subi r30,lo8(-(PPM_in))
1096 065a F040 sbci r31,hi8(-(PPM_in))
1097 065c 8081 ld r24,Z
1098 065e 9181 ldd r25,Z+1
1099 0660 8158 subi r24,lo8(-(127))
1100 0662 9F4F sbci r25,hi8(-(127))
1101 0664 9F93 push r25
1102 0666 8F93 push r24
1103 0668 8091 0000 lds r24,EE_Parameter+7
1104 066c E82F mov r30,r24
1105 066e FF27 clr r31
1106 0670 EE0F add r30,r30
1107 0672 FF1F adc r31,r31
1108 0674 E050 subi r30,lo8(-(PPM_in))
1109 0676 F040 sbci r31,hi8(-(PPM_in))
1110 0678 8081 ld r24,Z
1111 067a 9181 ldd r25,Z+1
1112 067c 8158 subi r24,lo8(-(127))
1113 067e 9F4F sbci r25,hi8(-(127))
1114 0680 9F93 push r25
1115 0682 8F93 push r24
1116 0684 80E0 ldi r24,lo8(__c.24)
1117 0686 90E0 ldi r25,hi8(__c.24)
1118 0688 00C0 rjmp .L121
1119 .L43:
1120 068a 1092 0000 sts DispPtr,__zero_reg__
1121 068e 80E0 ldi r24,lo8(__c.25)
1122 0690 90E0 ldi r25,hi8(__c.25)
1123 0692 9F93 push r25
1124 0694 8F93 push r24
1125 0696 00E0 ldi r16,lo8(pm(Menu_Putchar))
1126 0698 10E0 ldi r17,hi8(pm(Menu_Putchar))
1127 069a DF92 push r13
1128 069c CF92 push r12
1129 069e FE01 movw r30,r28
1130 06a0 0995 icall
1131 06a2 8091 0000 lds r24,PlatinenVersion
1132 06a6 0F90 pop __tmp_reg__
1133 06a8 0F90 pop __tmp_reg__
1134 06aa 0F90 pop __tmp_reg__
1135 06ac 0F90 pop __tmp_reg__
1136 06ae 8A30 cpi r24,lo8(10)
1137 06b0 01F0 breq .+2
1138 06b2 00C0 rjmp .L44
1139 06b4 84E1 ldi r24,lo8(20)
1140 06b6 8093 0000 sts DispPtr,r24
1141 06ba 8091 0000 lds r24,AdNeutralNick
1142 06be 9091 0000 lds r25,(AdNeutralNick)+1
1143 06c2 9C01 movw r18,r24
1144 06c4 97FF sbrs r25,7
1145 06c6 00C0 rjmp .L45
1146 06c8 295F subi r18,lo8(-(7))
1147 06ca 3F4F sbci r19,hi8(-(7))
1148 .L45:
1149 06cc 287F andi r18,lo8(-8)
1150 06ce 821B sub r24,r18
1151 06d0 930B sbc r25,r19
1152 06d2 9F93 push r25
1153 06d4 8F93 push r24
1154 06d6 8091 0000 lds r24,AdNeutralNick
1155 06da 9091 0000 lds r25,(AdNeutralNick)+1
1156 06de 97FD sbrc r25,7
1157 06e0 0796 adiw r24,7
1158 .L46:
1159 06e2 73E0 ldi r23,3
1160 06e4 9595 1: asr r25
1161 06e6 8795 ror r24
1162 06e8 7A95 dec r23
1163 06ea 01F4 brne 1b
1164 06ec 9F93 push r25
1165 06ee 8F93 push r24
1166 06f0 2091 0000 lds r18,AdNeutralNick
1167 06f4 3091 0000 lds r19,(AdNeutralNick)+1
1168 06f8 37FF sbrs r19,7
1169 06fa 00C0 rjmp .L47
1170 06fc 295F subi r18,lo8(-(7))
1171 06fe 3F4F sbci r19,hi8(-(7))
1172 .L47:
1173 0700 63E0 ldi r22,3
1174 0702 3595 1: asr r19
1175 0704 2795 ror r18
1176 0706 6A95 dec r22
1177 0708 01F4 brne 1b
1178 070a 8091 0000 lds r24,AdWertNick
1179 070e 9091 0000 lds r25,(AdWertNick)+1
1180 0712 821B sub r24,r18
1181 0714 930B sbc r25,r19
1182 0716 9F93 push r25
1183 0718 8F93 push r24
1184 071a 80E0 ldi r24,lo8(__c.26)
1185 071c 90E0 ldi r25,hi8(__c.26)
1186 071e 9F93 push r25
1187 0720 8F93 push r24
1188 0722 1F93 push r17
1189 0724 0F93 push r16
1190 0726 E091 0000 lds r30,_printf_P
1191 072a F091 0000 lds r31,(_printf_P)+1
1192 072e 0995 icall
1193 0730 88E2 ldi r24,lo8(40)
1194 0732 8093 0000 sts DispPtr,r24
1195 0736 2DB7 in r18,__SP_L__
1196 0738 3EB7 in r19,__SP_H__
1197 073a 265F subi r18,lo8(-(10))
1198 073c 3F4F sbci r19,hi8(-(10))
1199 073e 2DBF out __SP_L__,r18
1200 0740 8091 0000 lds r24,AdNeutralRoll
1201 0744 9091 0000 lds r25,(AdNeutralRoll)+1
1202 0748 9C01 movw r18,r24
1203 074a 97FF sbrs r25,7
1204 074c 00C0 rjmp .L48
1205 074e 295F subi r18,lo8(-(7))
1206 0750 3F4F sbci r19,hi8(-(7))
1207 .L48:
1208 0752 287F andi r18,lo8(-8)
1209 0754 821B sub r24,r18
1210 0756 930B sbc r25,r19
1211 0758 9F93 push r25
1212 075a 8F93 push r24
1213 075c 8091 0000 lds r24,AdNeutralRoll
1214 0760 9091 0000 lds r25,(AdNeutralRoll)+1
1215 0764 97FD sbrc r25,7
1216 0766 0796 adiw r24,7
1217 .L49:
1218 0768 53E0 ldi r21,3
1219 076a 9595 1: asr r25
1220 076c 8795 ror r24
1221 076e 5A95 dec r21
1222 0770 01F4 brne 1b
1223 0772 9F93 push r25
1224 0774 8F93 push r24
1225 0776 2091 0000 lds r18,AdNeutralRoll
1226 077a 3091 0000 lds r19,(AdNeutralRoll)+1
1227 077e 37FF sbrs r19,7
1228 0780 00C0 rjmp .L50
1229 0782 295F subi r18,lo8(-(7))
1230 0784 3F4F sbci r19,hi8(-(7))
1231 .L50:
1232 0786 43E0 ldi r20,3
1233 0788 3595 1: asr r19
1234 078a 2795 ror r18
1235 078c 4A95 dec r20
1236 078e 01F4 brne 1b
1237 0790 8091 0000 lds r24,AdWertRoll
1238 0794 9091 0000 lds r25,(AdWertRoll)+1
1239 0798 821B sub r24,r18
1240 079a 930B sbc r25,r19
1241 079c 9F93 push r25
1242 079e 8F93 push r24
1243 07a0 80E0 ldi r24,lo8(__c.27)
1244 07a2 90E0 ldi r25,hi8(__c.27)
1245 07a4 9F93 push r25
1246 07a6 8F93 push r24
1247 07a8 1F93 push r17
1248 07aa 0F93 push r16
1249 07ac E091 0000 lds r30,_printf_P
1250 07b0 F091 0000 lds r31,(_printf_P)+1
1251 07b4 0995 icall
1252 07b6 8CE3 ldi r24,lo8(60)
1253 07b8 8093 0000 sts DispPtr,r24
1254 07bc 8DB7 in r24,__SP_L__
1255 07be 9EB7 in r25,__SP_H__
1256 07c0 0A96 adiw r24,10
1257 07c2 8DBF out __SP_L__,r24
1258 07c4 8091 0000 lds r24,AdNeutralGier
1259 07c8 9091 0000 lds r25,(AdNeutralGier)+1
1260 07cc 9F93 push r25
1261 07ce 8F93 push r24
1262 07d0 8091 0000 lds r24,AdNeutralGier
1263 07d4 9091 0000 lds r25,(AdNeutralGier)+1
1264 07d8 2091 0000 lds r18,AdWertGier
1265 07dc 3091 0000 lds r19,(AdWertGier)+1
1266 07e0 821B sub r24,r18
1267 07e2 930B sbc r25,r19
1268 07e4 9F93 push r25
1269 07e6 8F93 push r24
1270 07e8 80E0 ldi r24,lo8(__c.28)
1271 07ea 90E0 ldi r25,hi8(__c.28)
1272 07ec 00C0 rjmp .L126
1273 .L44:
1274 07ee 8B30 cpi r24,lo8(11)
1275 07f0 01F0 breq .L53
1276 07f2 8431 cpi r24,lo8(20)
1277 07f4 00F4 brsh .+2
1278 07f6 00C0 rjmp .L52
1279 .L53:
1280 07f8 84E1 ldi r24,lo8(20)
1281 07fa 8093 0000 sts DispPtr,r24
1282 07fe 8091 0000 lds r24,AdNeutralNick
1283 0802 9091 0000 lds r25,(AdNeutralNick)+1
1284 0806 9C01 movw r18,r24
1285 0808 97FF sbrs r25,7
1286 080a 00C0 rjmp .L54
1287 080c 215F subi r18,lo8(-(15))
1288 080e 3F4F sbci r19,hi8(-(15))
1289 .L54:
1290 0810 207F andi r18,lo8(-16)
1291 0812 821B sub r24,r18
1292 0814 930B sbc r25,r19
1293 0816 97FD sbrc r25,7
1294 0818 0196 adiw r24,1
1295 .L55:
1296 081a 9595 asr r25
1297 081c 8795 ror r24
1298 081e 9F93 push r25
1299 0820 8F93 push r24
1300 0822 8091 0000 lds r24,AdNeutralNick
1301 0826 9091 0000 lds r25,(AdNeutralNick)+1
1302 082a 97FD sbrc r25,7
1303 082c 0F96 adiw r24,15
1304 .L56:
1305 082e 24E0 ldi r18,4
1306 0830 9595 1: asr r25
1307 0832 8795 ror r24
1308 0834 2A95 dec r18
1309 0836 01F4 brne 1b
1310 0838 9F93 push r25
1311 083a 8F93 push r24
1312 083c 2091 0000 lds r18,AdNeutralNick
1313 0840 3091 0000 lds r19,(AdNeutralNick)+1
1314 0844 37FF sbrs r19,7
1315 0846 00C0 rjmp .L57
1316 0848 295F subi r18,lo8(-(7))
1317 084a 3F4F sbci r19,hi8(-(7))
1318 .L57:
1319 084c C3E0 ldi r28,3
1320 084e 3595 1: asr r19
1321 0850 2795 ror r18
1322 0852 CA95 dec r28
1323 0854 01F4 brne 1b
1324 0856 8091 0000 lds r24,AdWertNick
1325 085a 9091 0000 lds r25,(AdWertNick)+1
1326 085e 821B sub r24,r18
1327 0860 930B sbc r25,r19
1328 0862 9F93 push r25
1329 0864 8F93 push r24
1330 0866 80E0 ldi r24,lo8(__c.29)
1331 0868 90E0 ldi r25,hi8(__c.29)
1332 086a 9F93 push r25
1333 086c 8F93 push r24
1334 086e 1F93 push r17
1335 0870 0F93 push r16
1336 0872 E091 0000 lds r30,_printf_P
1337 0876 F091 0000 lds r31,(_printf_P)+1
1338 087a 0995 icall
1339 087c 88E2 ldi r24,lo8(40)
1340 087e 8093 0000 sts DispPtr,r24
1341 0882 2DB7 in r18,__SP_L__
1342 0884 3EB7 in r19,__SP_H__
1343 0886 265F subi r18,lo8(-(10))
1344 0888 3F4F sbci r19,hi8(-(10))
1345 088a 2DBF out __SP_L__,r18
1346 088c 8091 0000 lds r24,AdNeutralRoll
1347 0890 9091 0000 lds r25,(AdNeutralRoll)+1
1348 0894 9C01 movw r18,r24
1349 0896 97FF sbrs r25,7
1350 0898 00C0 rjmp .L58
1351 089a 215F subi r18,lo8(-(15))
1352 089c 3F4F sbci r19,hi8(-(15))
1353 .L58:
1354 089e 207F andi r18,lo8(-16)
1355 08a0 821B sub r24,r18
1356 08a2 930B sbc r25,r19
1357 08a4 97FD sbrc r25,7
1358 08a6 0196 adiw r24,1
1359 .L59:
1360 08a8 9595 asr r25
1361 08aa 8795 ror r24
1362 08ac 9F93 push r25
1363 08ae 8F93 push r24
1364 08b0 8091 0000 lds r24,AdNeutralRoll
1365 08b4 9091 0000 lds r25,(AdNeutralRoll)+1
1366 08b8 97FD sbrc r25,7
1367 08ba 0F96 adiw r24,15
1368 .L60:
1369 08bc A4E0 ldi r26,4
1370 08be 9595 1: asr r25
1371 08c0 8795 ror r24
1372 08c2 AA95 dec r26
1373 08c4 01F4 brne 1b
1374 08c6 9F93 push r25
1375 08c8 8F93 push r24
1376 08ca 2091 0000 lds r18,AdNeutralRoll
1377 08ce 3091 0000 lds r19,(AdNeutralRoll)+1
1378 08d2 37FF sbrs r19,7
1379 08d4 00C0 rjmp .L61
1380 08d6 295F subi r18,lo8(-(7))
1381 08d8 3F4F sbci r19,hi8(-(7))
1382 .L61:
1383 08da F3E0 ldi r31,3
1384 08dc 3595 1: asr r19
1385 08de 2795 ror r18
1386 08e0 FA95 dec r31
1387 08e2 01F4 brne 1b
1388 08e4 8091 0000 lds r24,AdWertRoll
1389 08e8 9091 0000 lds r25,(AdWertRoll)+1
1390 08ec 821B sub r24,r18
1391 08ee 930B sbc r25,r19
1392 08f0 9F93 push r25
1393 08f2 8F93 push r24
1394 08f4 80E0 ldi r24,lo8(__c.30)
1395 08f6 90E0 ldi r25,hi8(__c.30)
1396 08f8 9F93 push r25
1397 08fa 8F93 push r24
1398 08fc 1F93 push r17
1399 08fe 0F93 push r16
1400 0900 E091 0000 lds r30,_printf_P
1401 0904 F091 0000 lds r31,(_printf_P)+1
1402 0908 0995 icall
1403 090a 8CE3 ldi r24,lo8(60)
1404 090c 8093 0000 sts DispPtr,r24
1405 0910 8DB7 in r24,__SP_L__
1406 0912 9EB7 in r25,__SP_H__
1407 0914 0A96 adiw r24,10
1408 0916 8DBF out __SP_L__,r24
1409 0918 8091 0000 lds r24,AdNeutralGier
1410 091c 9091 0000 lds r25,(AdNeutralGier)+1
1411 0920 97FD sbrc r25,7
1412 0922 0196 adiw r24,1
1413 .L62:
1414 0924 9595 asr r25
1415 0926 8795 ror r24
1416 0928 9F93 push r25
1417 092a 8F93 push r24
1418 092c 8091 0000 lds r24,AdNeutralGier
1419 0930 9091 0000 lds r25,(AdNeutralGier)+1
1420 0934 2091 0000 lds r18,AdWertGier
1421 0938 3091 0000 lds r19,(AdWertGier)+1
1422 093c 821B sub r24,r18
1423 093e 930B sbc r25,r19
1424 0940 9F93 push r25
1425 0942 8F93 push r24
1426 0944 80E0 ldi r24,lo8(__c.31)
1427 0946 90E0 ldi r25,hi8(__c.31)
1428 .L126:
1429 0948 9F93 push r25
1430 094a 8F93 push r24
1431 094c 1F93 push r17
1432 094e 0F93 push r16
1433 0950 00C0 rjmp .L122
1434 .L52:
1435 0952 8D30 cpi r24,lo8(13)
1436 0954 01F0 breq .+2
1437 0956 00C0 rjmp .L20
1438 0958 84E1 ldi r24,lo8(20)
1439 095a 8093 0000 sts DispPtr,r24
1440 095e 8091 0000 lds r24,AnalogOffsetNick
1441 0962 9927 clr r25
1442 0964 9F93 push r25
1443 0966 8F93 push r24
1444 0968 8091 0000 lds r24,AdNeutralNick
1445 096c 9091 0000 lds r25,(AdNeutralNick)+1
1446 0970 97FD sbrc r25,7
1447 0972 0F96 adiw r24,15
1448 .L65:
1449 0974 74E0 ldi r23,4
1450 0976 9595 1: asr r25
1451 0978 8795 ror r24
1452 097a 7A95 dec r23
1453 097c 01F4 brne 1b
1454 097e 9F93 push r25
1455 0980 8F93 push r24
1456 0982 2091 0000 lds r18,AdNeutralNick
1457 0986 3091 0000 lds r19,(AdNeutralNick)+1
1458 098a 37FF sbrs r19,7
1459 098c 00C0 rjmp .L66
1460 098e 295F subi r18,lo8(-(7))
1461 0990 3F4F sbci r19,hi8(-(7))
1462 .L66:
1463 0992 63E0 ldi r22,3
1464 0994 3595 1: asr r19
1465 0996 2795 ror r18
1466 0998 6A95 dec r22
1467 099a 01F4 brne 1b
1468 099c 8091 0000 lds r24,AdWertNick
1469 09a0 9091 0000 lds r25,(AdWertNick)+1
1470 09a4 821B sub r24,r18
1471 09a6 930B sbc r25,r19
1472 09a8 9F93 push r25
1473 09aa 8F93 push r24
1474 09ac 80E0 ldi r24,lo8(__c.32)
1475 09ae 90E0 ldi r25,hi8(__c.32)
1476 09b0 9F93 push r25
1477 09b2 8F93 push r24
1478 09b4 1F93 push r17
1479 09b6 0F93 push r16
1480 09b8 E091 0000 lds r30,_printf_P
1481 09bc F091 0000 lds r31,(_printf_P)+1
1482 09c0 0995 icall
1483 09c2 88E2 ldi r24,lo8(40)
1484 09c4 8093 0000 sts DispPtr,r24
1485 09c8 2DB7 in r18,__SP_L__
1486 09ca 3EB7 in r19,__SP_H__
1487 09cc 265F subi r18,lo8(-(10))
1488 09ce 3F4F sbci r19,hi8(-(10))
1489 09d0 2DBF out __SP_L__,r18
1490 09d2 8091 0000 lds r24,AnalogOffsetRoll
1491 09d6 9927 clr r25
1492 09d8 9F93 push r25
1493 09da 8F93 push r24
1494 09dc 8091 0000 lds r24,AdNeutralRoll
1495 09e0 9091 0000 lds r25,(AdNeutralRoll)+1
1496 09e4 97FD sbrc r25,7
1497 09e6 0F96 adiw r24,15
1498 .L67:
1499 09e8 54E0 ldi r21,4
1500 09ea 9595 1: asr r25
1501 09ec 8795 ror r24
1502 09ee 5A95 dec r21
1503 09f0 01F4 brne 1b
1504 09f2 9F93 push r25
1505 09f4 8F93 push r24
1506 09f6 2091 0000 lds r18,AdNeutralRoll
1507 09fa 3091 0000 lds r19,(AdNeutralRoll)+1
1508 09fe 37FF sbrs r19,7
1509 0a00 00C0 rjmp .L68
1510 0a02 295F subi r18,lo8(-(7))
1511 0a04 3F4F sbci r19,hi8(-(7))
1512 .L68:
1513 0a06 43E0 ldi r20,3
1514 0a08 3595 1: asr r19
1515 0a0a 2795 ror r18
1516 0a0c 4A95 dec r20
1517 0a0e 01F4 brne 1b
1518 0a10 8091 0000 lds r24,AdWertRoll
1519 0a14 9091 0000 lds r25,(AdWertRoll)+1
1520 0a18 821B sub r24,r18
1521 0a1a 930B sbc r25,r19
1522 0a1c 9F93 push r25
1523 0a1e 8F93 push r24
1524 0a20 80E0 ldi r24,lo8(__c.33)
1525 0a22 90E0 ldi r25,hi8(__c.33)
1526 0a24 9F93 push r25
1527 0a26 8F93 push r24
1528 0a28 1F93 push r17
1529 0a2a 0F93 push r16
1530 0a2c E091 0000 lds r30,_printf_P
1531 0a30 F091 0000 lds r31,(_printf_P)+1
1532 0a34 0995 icall
1533 0a36 8CE3 ldi r24,lo8(60)
1534 0a38 8093 0000 sts DispPtr,r24
1535 0a3c 8DB7 in r24,__SP_L__
1536 0a3e 9EB7 in r25,__SP_H__
1537 0a40 0A96 adiw r24,10
1538 0a42 8DBF out __SP_L__,r24
1539 0a44 8091 0000 lds r24,AnalogOffsetGier
1540 0a48 9927 clr r25
1541 0a4a 9F93 push r25
1542 0a4c 8F93 push r24
1543 0a4e 8091 0000 lds r24,AdNeutralGier
1544 0a52 9091 0000 lds r25,(AdNeutralGier)+1
1545 0a56 97FD sbrc r25,7
1546 0a58 0196 adiw r24,1
1547 .L69:
1548 0a5a 9595 asr r25
1549 0a5c 8795 ror r24
1550 0a5e 9F93 push r25
1551 0a60 8F93 push r24
1552 0a62 8091 0000 lds r24,AdNeutralGier
1553 0a66 9091 0000 lds r25,(AdNeutralGier)+1
1554 0a6a 2091 0000 lds r18,AdWertGier
1555 0a6e 3091 0000 lds r19,(AdWertGier)+1
1556 0a72 821B sub r24,r18
1557 0a74 930B sbc r25,r19
1558 0a76 9F93 push r25
1559 0a78 8F93 push r24
1560 0a7a 80E0 ldi r24,lo8(__c.34)
1561 0a7c 90E0 ldi r25,hi8(__c.34)
1562 0a7e 9F93 push r25
1563 0a80 8F93 push r24
1564 0a82 1F93 push r17
1565 0a84 0F93 push r16
1566 0a86 E091 0000 lds r30,_printf_P
1567 0a8a F091 0000 lds r31,(_printf_P)+1
1568 0a8e 0995 icall
1569 0a90 EDB7 in r30,__SP_L__
1570 0a92 FEB7 in r31,__SP_H__
1571 0a94 3A96 adiw r30,10
1572 0a96 00C0 rjmp .L117
1573 .L70:
1574 0a98 1092 0000 sts DispPtr,__zero_reg__
1575 0a9c 80E0 ldi r24,lo8(__c.35)
1576 0a9e 90E0 ldi r25,hi8(__c.35)
1577 0aa0 9F93 push r25
1578 0aa2 8F93 push r24
1579 0aa4 DF92 push r13
1580 0aa6 CF92 push r12
1581 0aa8 FE01 movw r30,r28
1582 0aaa 0995 icall
1583 0aac 84E1 ldi r24,lo8(20)
1584 0aae 8093 0000 sts DispPtr,r24
1585 0ab2 0F90 pop __tmp_reg__
1586 0ab4 0F90 pop __tmp_reg__
1587 0ab6 0F90 pop __tmp_reg__
1588 0ab8 0F90 pop __tmp_reg__
1589 0aba 8091 0000 lds r24,NeutralAccX
1590 0abe 9091 0000 lds r25,(NeutralAccX)+1
1591 0ac2 9F93 push r25
1592 0ac4 8F93 push r24
1593 0ac6 8091 0000 lds r24,AdWertAccNick
1594 0aca 9091 0000 lds r25,(AdWertAccNick)+1
1595 0ace 9F93 push r25
1596 0ad0 8F93 push r24
1597 0ad2 80E0 ldi r24,lo8(__c.36)
1598 0ad4 90E0 ldi r25,hi8(__c.36)
1599 0ad6 9F93 push r25
1600 0ad8 8F93 push r24
1601 0ada DF92 push r13
1602 0adc CF92 push r12
1603 0ade E091 0000 lds r30,_printf_P
1604 0ae2 F091 0000 lds r31,(_printf_P)+1
1605 0ae6 0995 icall
1606 0ae8 88E2 ldi r24,lo8(40)
1607 0aea 8093 0000 sts DispPtr,r24
1608 0aee 2DB7 in r18,__SP_L__
1609 0af0 3EB7 in r19,__SP_H__
1610 0af2 285F subi r18,lo8(-(8))
1611 0af4 3F4F sbci r19,hi8(-(8))
1612 0af6 2DBF out __SP_L__,r18
1613 0af8 8091 0000 lds r24,NeutralAccY
1614 0afc 9091 0000 lds r25,(NeutralAccY)+1
1615 0b00 9F93 push r25
1616 0b02 8F93 push r24
1617 0b04 8091 0000 lds r24,AdWertAccRoll
1618 0b08 9091 0000 lds r25,(AdWertAccRoll)+1
1619 0b0c 9F93 push r25
1620 0b0e 8F93 push r24
1621 0b10 80E0 ldi r24,lo8(__c.37)
1622 0b12 90E0 ldi r25,hi8(__c.37)
1623 0b14 9F93 push r25
1624 0b16 8F93 push r24
1625 0b18 DF92 push r13
1626 0b1a CF92 push r12
1627 0b1c E091 0000 lds r30,_printf_P
1628 0b20 F091 0000 lds r31,(_printf_P)+1
1629 0b24 0995 icall
1630 0b26 8CE3 ldi r24,lo8(60)
1631 0b28 8093 0000 sts DispPtr,r24
1632 0b2c 8DB7 in r24,__SP_L__
1633 0b2e 9EB7 in r25,__SP_H__
1634 0b30 0896 adiw r24,8
1635 0b32 8DBF out __SP_L__,r24
1636 0b34 8091 0000 lds r24,NeutralAccZ
1637 0b38 9091 0000 lds r25,(NeutralAccZ)+1
1638 0b3c 9F93 push r25
1639 0b3e 8F93 push r24
1640 0b40 8091 0000 lds r24,AdWertAccHoch
1641 0b44 9091 0000 lds r25,(AdWertAccHoch)+1
1642 0b48 9F93 push r25
1643 0b4a 8F93 push r24
1644 0b4c 80E0 ldi r24,lo8(__c.38)
1645 0b4e 90E0 ldi r25,hi8(__c.38)
1646 .L121:
1647 0b50 9F93 push r25
1648 0b52 8F93 push r24
1649 0b54 DF92 push r13
1650 0b56 CF92 push r12
1651 .L122:
1652 0b58 E091 0000 lds r30,_printf_P
1653 0b5c F091 0000 lds r31,(_printf_P)+1
1654 0b60 0995 icall
1655 0b62 EDB7 in r30,__SP_L__
1656 0b64 FEB7 in r31,__SP_H__
1657 0b66 3896 adiw r30,8
1658 .L117:
1659 0b68 EDBF out __SP_L__,r30
1660 0b6a 00C0 rjmp .L20
1661 .L71:
1662 0b6c 1092 0000 sts DispPtr,__zero_reg__
1663 0b70 8091 0000 lds r24,UBat
1664 0b74 9091 0000 lds r25,(UBat)+1
1665 0b78 6AE0 ldi r22,lo8(10)
1666 0b7a 70E0 ldi r23,hi8(10)
1667 0b7c 0E94 0000 call __divmodhi4
1668 0b80 9F93 push r25
1669 0b82 8F93 push r24
1670 0b84 8091 0000 lds r24,UBat
1671 0b88 9091 0000 lds r25,(UBat)+1
1672 0b8c 6AE0 ldi r22,lo8(10)
1673 0b8e 70E0 ldi r23,hi8(10)
1674 0b90 0E94 0000 call __divmodhi4
1675 0b94 7F93 push r23
1676 0b96 6F93 push r22
1677 0b98 80E0 ldi r24,lo8(__c.39)
1678 0b9a 90E0 ldi r25,hi8(__c.39)
1679 0b9c 9F93 push r25
1680 0b9e 8F93 push r24
1681 0ba0 DF92 push r13
1682 0ba2 CF92 push r12
1683 0ba4 FE01 movw r30,r28
1684 0ba6 0995 icall
1685 0ba8 84E1 ldi r24,lo8(20)
1686 0baa 8093 0000 sts DispPtr,r24
1687 0bae 2DB7 in r18,__SP_L__
1688 0bb0 3EB7 in r19,__SP_H__
1689 0bb2 285F subi r18,lo8(-(8))
1690 0bb4 3F4F sbci r19,hi8(-(8))
1691 0bb6 2DBF out __SP_L__,r18
1692 0bb8 8091 0000 lds r24,Capacity
1693 0bbc 9091 0000 lds r25,(Capacity)+1
1694 0bc0 6AE0 ldi r22,lo8(10)
1695 0bc2 70E0 ldi r23,hi8(10)
1696 0bc4 0E94 0000 call __udivmodhi4
1697 0bc8 9F93 push r25
1698 0bca 8F93 push r24
1699 0bcc 8091 0000 lds r24,Capacity
1700 0bd0 9091 0000 lds r25,(Capacity)+1
1701 0bd4 6AE0 ldi r22,lo8(10)
1702 0bd6 70E0 ldi r23,hi8(10)
1703 0bd8 0E94 0000 call __udivmodhi4
1704 0bdc 7F93 push r23
1705 0bde 6F93 push r22
1706 0be0 80E0 ldi r24,lo8(__c.40)
1707 0be2 90E0 ldi r25,hi8(__c.40)
1708 0be4 9F93 push r25
1709 0be6 8F93 push r24
1710 0be8 DF92 push r13
1711 0bea CF92 push r12
1712 0bec E091 0000 lds r30,_printf_P
1713 0bf0 F091 0000 lds r31,(_printf_P)+1
1714 0bf4 0995 icall
1715 0bf6 88E2 ldi r24,lo8(40)
1716 0bf8 8093 0000 sts DispPtr,r24
1717 0bfc 8DB7 in r24,__SP_L__
1718 0bfe 9EB7 in r25,__SP_H__
1719 0c00 0896 adiw r24,8
1720 0c02 8DBF out __SP_L__,r24
1721 0c04 8091 0000 lds r24,Capacity+2
1722 0c08 9091 0000 lds r25,(Capacity+2)+1
1723 0c0c 9F93 push r25
1724 0c0e 8F93 push r24
1725 0c10 80E0 ldi r24,lo8(__c.41)
1726 0c12 90E0 ldi r25,hi8(__c.41)
1727 0c14 9F93 push r25
1728 0c16 8F93 push r24
1729 0c18 DF92 push r13
1730 0c1a CF92 push r12
1731 0c1c E091 0000 lds r30,_printf_P
1732 0c20 F091 0000 lds r31,(_printf_P)+1
1733 0c24 0995 icall
1734 0c26 8CE3 ldi r24,lo8(60)
1735 0c28 8093 0000 sts DispPtr,r24
1736 0c2c EDB7 in r30,__SP_L__
1737 0c2e FEB7 in r31,__SP_H__
1738 0c30 3696 adiw r30,6
1739 0c32 EDBF out __SP_L__,r30
1740 0c34 8091 0000 lds r24,Capacity+4
1741 0c38 9091 0000 lds r25,(Capacity+4)+1
1742 0c3c 9F93 push r25
1743 0c3e 8F93 push r24
1744 0c40 80E0 ldi r24,lo8(__c.42)
1745 0c42 90E0 ldi r25,hi8(__c.42)
1746 .L127:
1747 0c44 9F93 push r25
1748 0c46 8F93 push r24
1749 0c48 DF92 push r13
1750 0c4a CF92 push r12
1751 .L123:
1752 0c4c E091 0000 lds r30,_printf_P
1753 0c50 F091 0000 lds r31,(_printf_P)+1
1754 0c54 0995 icall
1755 0c56 2DB7 in r18,__SP_L__
1756 0c58 3EB7 in r19,__SP_H__
1757 0c5a 2A5F subi r18,lo8(-(6))
1758 0c5c 3F4F sbci r19,hi8(-(6))
1759 0c5e 00C0 rjmp .L116
1760 .L72:
1761 0c60 1092 0000 sts DispPtr,__zero_reg__
1762 0c64 80E0 ldi r24,lo8(__c.43)
1763 0c66 90E0 ldi r25,hi8(__c.43)
1764 0c68 9F93 push r25
1765 0c6a 8F93 push r24
1766 0c6c DF92 push r13
1767 0c6e CF92 push r12
1768 0c70 FE01 movw r30,r28
1769 0c72 0995 icall
1770 0c74 84E1 ldi r24,lo8(20)
1771 0c76 8093 0000 sts DispPtr,r24
1772 0c7a 0F90 pop __tmp_reg__
1773 0c7c 0F90 pop __tmp_reg__
1774 0c7e 0F90 pop __tmp_reg__
1775 0c80 0F90 pop __tmp_reg__
1776 0c82 8091 0000 lds r24,PPM_in
1777 0c86 9091 0000 lds r25,(PPM_in)+1
1778 0c8a 9F93 push r25
1779 0c8c 8F93 push r24
1780 0c8e 80E0 ldi r24,lo8(__c.44)
1781 0c90 90E0 ldi r25,hi8(__c.44)
1782 0c92 9F93 push r25
1783 0c94 8F93 push r24
1784 0c96 DF92 push r13
1785 0c98 CF92 push r12
1786 0c9a E091 0000 lds r30,_printf_P
1787 0c9e F091 0000 lds r31,(_printf_P)+1
1788 0ca2 0995 icall
1789 0ca4 88E2 ldi r24,lo8(40)
1790 0ca6 8093 0000 sts DispPtr,r24
1791 0caa 8DB7 in r24,__SP_L__
1792 0cac 9EB7 in r25,__SP_H__
1793 0cae 0696 adiw r24,6
1794 0cb0 8DBF out __SP_L__,r24
1795 0cb2 8091 0000 lds r24,SenderOkay
1796 0cb6 9927 clr r25
1797 0cb8 9F93 push r25
1798 0cba 8F93 push r24
1799 0cbc 80E0 ldi r24,lo8(__c.45)
1800 0cbe 90E0 ldi r25,hi8(__c.45)
1801 0cc0 9F93 push r25
1802 0cc2 8F93 push r24
1803 0cc4 DF92 push r13
1804 0cc6 CF92 push r12
1805 0cc8 E091 0000 lds r30,_printf_P
1806 0ccc F091 0000 lds r31,(_printf_P)+1
1807 0cd0 0995 icall
1808 0cd2 8CE3 ldi r24,lo8(60)
1809 0cd4 8093 0000 sts DispPtr,r24
1810 0cd8 EDB7 in r30,__SP_L__
1811 0cda FEB7 in r31,__SP_H__
1812 0cdc 3696 adiw r30,6
1813 0cde EDBF out __SP_L__,r30
1814 0ce0 8091 0000 lds r24,Channels
1815 0ce4 9927 clr r25
1816 0ce6 0197 sbiw r24,1
1817 0ce8 9F93 push r25
1818 0cea 8F93 push r24
1819 0cec 80E0 ldi r24,lo8(__c.46)
1820 0cee 90E0 ldi r25,hi8(__c.46)
1821 0cf0 00C0 rjmp .L127
1822 .L73:
1823 0cf2 1092 0000 sts DispPtr,__zero_reg__
1824 0cf6 80E0 ldi r24,lo8(__c.47)
1825 0cf8 90E0 ldi r25,hi8(__c.47)
1826 0cfa 9F93 push r25
1827 0cfc 8F93 push r24
1828 0cfe DF92 push r13
1829 0d00 CF92 push r12
1830 0d02 FE01 movw r30,r28
1831 0d04 0995 icall
1832 0d06 84E1 ldi r24,lo8(20)
1833 0d08 8093 0000 sts DispPtr,r24
1834 0d0c 0F90 pop __tmp_reg__
1835 0d0e 0F90 pop __tmp_reg__
1836 0d10 0F90 pop __tmp_reg__
1837 0d12 0F90 pop __tmp_reg__
1838 0d14 8091 0000 lds r24,KompassValue
1839 0d18 9091 0000 lds r25,(KompassValue)+1
1840 0d1c 9F93 push r25
1841 0d1e 8F93 push r24
1842 0d20 80E0 ldi r24,lo8(__c.48)
1843 0d22 90E0 ldi r25,hi8(__c.48)
1844 0d24 9F93 push r25
1845 0d26 8F93 push r24
1846 0d28 DF92 push r13
1847 0d2a CF92 push r12
1848 0d2c E091 0000 lds r30,_printf_P
1849 0d30 F091 0000 lds r31,(_printf_P)+1
1850 0d34 0995 icall
1851 0d36 88E2 ldi r24,lo8(40)
1852 0d38 8093 0000 sts DispPtr,r24
1853 0d3c 8DB7 in r24,__SP_L__
1854 0d3e 9EB7 in r25,__SP_H__
1855 0d40 0696 adiw r24,6
1856 0d42 8DBF out __SP_L__,r24
1857 0d44 8091 0000 lds r24,ErsatzKompassInGrad
1858 0d48 9091 0000 lds r25,(ErsatzKompassInGrad)+1
1859 0d4c 9F93 push r25
1860 0d4e 8F93 push r24
1861 0d50 80E0 ldi r24,lo8(__c.49)
1862 0d52 90E0 ldi r25,hi8(__c.49)
1863 0d54 9F93 push r25
1864 0d56 8F93 push r24
1865 0d58 DF92 push r13
1866 0d5a CF92 push r12
1867 0d5c E091 0000 lds r30,_printf_P
1868 0d60 F091 0000 lds r31,(_printf_P)+1
1869 0d64 0995 icall
1870 0d66 8CE3 ldi r24,lo8(60)
1871 0d68 8093 0000 sts DispPtr,r24
1872 0d6c EDB7 in r30,__SP_L__
1873 0d6e FEB7 in r31,__SP_H__
1874 0d70 3696 adiw r30,6
1875 0d72 EDBF out __SP_L__,r30
1876 0d74 8091 0000 lds r24,KompassSollWert
1877 0d78 9091 0000 lds r25,(KompassSollWert)+1
1878 0d7c 9F93 push r25
1879 0d7e 8F93 push r24
1880 0d80 80E0 ldi r24,lo8(__c.50)
1881 0d82 90E0 ldi r25,hi8(__c.50)
1882 0d84 00C0 rjmp .L127
1883 .L74:
1884 0d86 C0E0 ldi r28,lo8(Poti)
1885 0d88 CC2E mov r12,r28
1886 0d8a C0E0 ldi r28,hi8(Poti)
1887 0d8c DC2E mov r13,r28
1888 0d8e 20E0 ldi r18,lo8(0)
1889 0d90 30E0 ldi r19,hi8(0)
1890 0d92 E901 movw r28,r18
1891 0d94 B3E0 ldi r27,lo8(3)
1892 0d96 FB2E mov r15,r27
1893 .L78:
1894 0d98 C093 0000 sts DispPtr,r28
1895 0d9c F601 movw r30,r12
1896 0d9e 8191 ld r24,Z+
1897 0da0 6F01 movw r12,r30
1898 0da2 9927 clr r25
1899 0da4 9F93 push r25
1900 0da6 8F93 push r24
1901 0da8 8901 movw r16,r18
1902 0daa 0F5F subi r16,lo8(-(1))
1903 0dac 1F4F sbci r17,hi8(-(1))
1904 0dae 1F93 push r17
1905 0db0 0F93 push r16
1906 0db2 80E0 ldi r24,lo8(__c.51)
1907 0db4 90E0 ldi r25,hi8(__c.51)
1908 0db6 9F93 push r25
1909 0db8 8F93 push r24
1910 0dba 80E0 ldi r24,lo8(pm(Menu_Putchar))
1911 0dbc 90E0 ldi r25,hi8(pm(Menu_Putchar))
1912 0dbe 9F93 push r25
1913 0dc0 8F93 push r24
1914 0dc2 E091 0000 lds r30,_printf_P
1915 0dc6 F091 0000 lds r31,(_printf_P)+1
1916 0dca 0995 icall
1917 0dcc 2DB7 in r18,__SP_L__
1918 0dce 3EB7 in r19,__SP_H__
1919 0dd0 285F subi r18,lo8(-(8))
1920 0dd2 3F4F sbci r19,hi8(-(8))
1921 0dd4 2DBF out __SP_L__,r18
1922 0dd6 FA94 dec r15
1923 0dd8 6496 adiw r28,20
1924 0dda 9801 movw r18,r16
1925 0ddc F7FE sbrs r15,7
1926 0dde 00C0 rjmp .L78
1927 0de0 00C0 rjmp .L20
1928 .L79:
1929 0de2 A0E0 ldi r26,lo8(Poti+4)
1930 0de4 CA2E mov r12,r26
1931 0de6 A0E0 ldi r26,hi8(Poti+4)
1932 0de8 DA2E mov r13,r26
1933 0dea C0E0 ldi r28,lo8(0)
1934 0dec D0E0 ldi r29,hi8(0)
1935 0dee 8E01 movw r16,r28
1936 0df0 F3E0 ldi r31,lo8(3)
1937 0df2 FF2E mov r15,r31
1938 .L83:
1939 0df4 0093 0000 sts DispPtr,r16
1940 0df8 F601 movw r30,r12
1941 0dfa 8191 ld r24,Z+
1942 0dfc 6F01 movw r12,r30
1943 0dfe 9927 clr r25
1944 0e00 9F93 push r25
1945 0e02 8F93 push r24
1946 0e04 2596 adiw r28,5
1947 0e06 DF93 push r29
1948 0e08 CF93 push r28
1949 0e0a 80E0 ldi r24,lo8(__c.52)
1950 0e0c 90E0 ldi r25,hi8(__c.52)
1951 0e0e 9F93 push r25
1952 0e10 8F93 push r24
1953 0e12 80E0 ldi r24,lo8(pm(Menu_Putchar))
1954 0e14 90E0 ldi r25,hi8(pm(Menu_Putchar))
1955 0e16 9F93 push r25
1956 0e18 8F93 push r24
1957 0e1a E091 0000 lds r30,_printf_P
1958 0e1e F091 0000 lds r31,(_printf_P)+1
1959 0e22 0995 icall
1960 0e24 2DB7 in r18,__SP_L__
1961 0e26 3EB7 in r19,__SP_H__
1962 0e28 285F subi r18,lo8(-(8))
1963 0e2a 3F4F sbci r19,hi8(-(8))
1964 0e2c 2DBF out __SP_L__,r18
1965 0e2e FA94 dec r15
1966 0e30 0C5E subi r16,lo8(-(20))
1967 0e32 1F4F sbci r17,hi8(-(20))
1968 0e34 2497 sbiw r28,4
1969 0e36 F7FE sbrs r15,7
1970 0e38 00C0 rjmp .L83
1971 0e3a 00C0 rjmp .L20
1972 .L84:
1973 0e3c 1092 0000 sts DispPtr,__zero_reg__
1974 0e40 80E0 ldi r24,lo8(__c.53)
1975 0e42 90E0 ldi r25,hi8(__c.53)
1976 0e44 9F93 push r25
1977 0e46 8F93 push r24
1978 0e48 00E0 ldi r16,lo8(pm(Menu_Putchar))
1979 0e4a 10E0 ldi r17,hi8(pm(Menu_Putchar))
1980 0e4c DF92 push r13
1981 0e4e CF92 push r12
1982 0e50 FE01 movw r30,r28
1983 0e52 0995 icall
1984 0e54 84E1 ldi r24,lo8(20)
1985 0e56 8093 0000 sts DispPtr,r24
1986 0e5a 0F90 pop __tmp_reg__
1987 0e5c 0F90 pop __tmp_reg__
1988 0e5e 0F90 pop __tmp_reg__
1989 0e60 0F90 pop __tmp_reg__
1990 0e62 8091 0000 lds r24,Parameter_ServoNickControl
1991 0e66 9927 clr r25
1992 0e68 9F93 push r25
1993 0e6a 8F93 push r24
1994 0e6c 80E0 ldi r24,lo8(__c.54)
1995 0e6e 90E0 ldi r25,hi8(__c.54)
1996 0e70 9F93 push r25
1997 0e72 8F93 push r24
1998 0e74 DF92 push r13
1999 0e76 CF92 push r12
2000 0e78 E091 0000 lds r30,_printf_P
2001 0e7c F091 0000 lds r31,(_printf_P)+1
2002 0e80 0995 icall
2003 0e82 88E2 ldi r24,lo8(40)
2004 0e84 8093 0000 sts DispPtr,r24
2005 0e88 8DB7 in r24,__SP_L__
2006 0e8a 9EB7 in r25,__SP_H__
2007 0e8c 0696 adiw r24,6
2008 0e8e 8DBF out __SP_L__,r24
2009 0e90 8091 0000 lds r24,ServoNickValue
2010 0e94 9091 0000 lds r25,(ServoNickValue)+1
2011 0e98 97FD sbrc r25,7
2012 0e9a 0396 adiw r24,3
2013 .L85:
2014 0e9c 9595 asr r25
2015 0e9e 8795 ror r24
2016 0ea0 9595 asr r25
2017 0ea2 8795 ror r24
2018 0ea4 9F93 push r25
2019 0ea6 8F93 push r24
2020 0ea8 80E0 ldi r24,lo8(__c.55)
2021 0eaa 90E0 ldi r25,hi8(__c.55)
2022 0eac 9F93 push r25
2023 0eae 8F93 push r24
2024 0eb0 1F93 push r17
2025 0eb2 0F93 push r16
2026 0eb4 E091 0000 lds r30,_printf_P
2027 0eb8 F091 0000 lds r31,(_printf_P)+1
2028 0ebc 0995 icall
2029 0ebe 8CE3 ldi r24,lo8(60)
2030 0ec0 8093 0000 sts DispPtr,r24
2031 0ec4 EDB7 in r30,__SP_L__
2032 0ec6 FEB7 in r31,__SP_H__
2033 0ec8 3696 adiw r30,6
2034 0eca EDBF out __SP_L__,r30
2035 0ecc 8091 0000 lds r24,EE_Parameter+48
2036 0ed0 9927 clr r25
2037 0ed2 9F93 push r25
2038 0ed4 8F93 push r24
2039 0ed6 8091 0000 lds r24,EE_Parameter+47
2040 0eda 9927 clr r25
2041 0edc 9F93 push r25
2042 0ede 8F93 push r24
2043 0ee0 80E0 ldi r24,lo8(__c.56)
2044 0ee2 90E0 ldi r25,hi8(__c.56)
2045 0ee4 9F93 push r25
2046 0ee6 8F93 push r24
2047 0ee8 1F93 push r17
2048 0eea 0F93 push r16
2049 0eec E091 0000 lds r30,_printf_P
2050 0ef0 F091 0000 lds r31,(_printf_P)+1
2051 0ef4 0995 icall
2052 0ef6 2DB7 in r18,__SP_L__
2053 0ef8 3EB7 in r19,__SP_H__
2054 0efa 285F subi r18,lo8(-(8))
2055 0efc 3F4F sbci r19,hi8(-(8))
2056 .L116:
2057 0efe 2DBF out __SP_L__,r18
2058 0f00 00C0 rjmp .L20
2059 .L86:
2060 0f02 1092 0000 sts DispPtr,__zero_reg__
2061 0f06 80E0 ldi r24,lo8(__c.57)
2062 0f08 90E0 ldi r25,hi8(__c.57)
2063 0f0a 9F93 push r25
2064 0f0c 8F93 push r24
2065 0f0e 70E0 ldi r23,lo8(pm(Menu_Putchar))
2066 0f10 A72E mov r10,r23
2067 0f12 70E0 ldi r23,hi8(pm(Menu_Putchar))
2068 0f14 B72E mov r11,r23
2069 0f16 DF92 push r13
2070 0f18 CF92 push r12
2071 0f1a FE01 movw r30,r28
2072 0f1c 0995 icall
2073 0f1e 0F90 pop __tmp_reg__
2074 0f20 0F90 pop __tmp_reg__
2075 0f22 0F90 pop __tmp_reg__
2076 0f24 0F90 pop __tmp_reg__
2077 0f26 C0E0 ldi r28,lo8(Motor)
2078 0f28 D0E0 ldi r29,hi8(Motor)
2079 0f2a 00E0 ldi r16,lo8(0)
2080 0f2c 10E0 ldi r17,hi8(0)
2081 0f2e 62E0 ldi r22,lo8(2)
2082 0f30 F62E mov r15,r22
2083 .L90:
2084 0f32 802F mov r24,r16
2085 0f34 8C5E subi r24,lo8(-(20))
2086 0f36 8093 0000 sts DispPtr,r24
2087 0f3a 8B8D ldd r24,Y+27
2088 0f3c 9927 clr r25
2089 0f3e 8F77 andi r24,lo8(127)
2090 0f40 9070 andi r25,hi8(127)
2091 0f42 9F93 push r25
2092 0f44 8F93 push r24
2093 0f46 8B89 ldd r24,Y+19
2094 0f48 9927 clr r25
2095 0f4a 8F77 andi r24,lo8(127)
2096 0f4c 9070 andi r25,hi8(127)
2097 0f4e 9F93 push r25
2098 0f50 8F93 push r24
2099 0f52 8B85 ldd r24,Y+11
2100 0f54 9927 clr r25
2101 0f56 8F77 andi r24,lo8(127)
2102 0f58 9070 andi r25,hi8(127)
2103 0f5a 9F93 push r25
2104 0f5c 8F93 push r24
2105 0f5e 8B81 ldd r24,Y+3
2106 0f60 9927 clr r25
2107 0f62 8F77 andi r24,lo8(127)
2108 0f64 9070 andi r25,hi8(127)
2109 0f66 9F93 push r25
2110 0f68 8F93 push r24
2111 0f6a 80E0 ldi r24,lo8(__c.58)
2112 0f6c 90E0 ldi r25,hi8(__c.58)
2113 0f6e 9F93 push r25
2114 0f70 8F93 push r24
2115 0f72 BF92 push r11
2116 0f74 AF92 push r10
2117 0f76 E091 0000 lds r30,_printf_P
2118 0f7a F091 0000 lds r31,(_printf_P)+1
2119 0f7e 0995 icall
2120 0f80 8DB7 in r24,__SP_L__
2121 0f82 9EB7 in r25,__SP_H__
2122 0f84 0C96 adiw r24,12
2123 0f86 8DBF out __SP_L__,r24
2124 0f88 FA94 dec r15
2125 0f8a 0C5E subi r16,lo8(-(20))
2126 0f8c 1F4F sbci r17,hi8(-(20))
2127 0f8e A096 adiw r28,32
2128 0f90 F7FE sbrs r15,7
2129 0f92 00C0 rjmp .L90
2130 0f94 00C0 rjmp .L20
2131 .L91:
2132 0f96 1092 0000 sts DispPtr,__zero_reg__
2133 0f9a 80E0 ldi r24,lo8(__c.59)
2134 0f9c 90E0 ldi r25,hi8(__c.59)
2135 0f9e 9F93 push r25
2136 0fa0 8F93 push r24
2137 0fa2 50E0 ldi r21,lo8(pm(Menu_Putchar))
2138 0fa4 A52E mov r10,r21
2139 0fa6 50E0 ldi r21,hi8(pm(Menu_Putchar))
2140 0fa8 B52E mov r11,r21
2141 0faa DF92 push r13
2142 0fac CF92 push r12
2143 0fae FE01 movw r30,r28
2144 0fb0 0995 icall
2145 0fb2 0F90 pop __tmp_reg__
2146 0fb4 0F90 pop __tmp_reg__
2147 0fb6 0F90 pop __tmp_reg__
2148 0fb8 0F90 pop __tmp_reg__
2149 0fba C0E0 ldi r28,lo8(Motor)
2150 0fbc D0E0 ldi r29,hi8(Motor)
2151 0fbe 00E0 ldi r16,lo8(0)
2152 0fc0 10E0 ldi r17,hi8(0)
2153 0fc2 42E0 ldi r20,lo8(2)
2154 0fc4 F42E mov r15,r20
2155 .L95:
2156 0fc6 802F mov r24,r16
2157 0fc8 8C5E subi r24,lo8(-(20))
2158 0fca 8093 0000 sts DispPtr,r24
2159 0fce 8F8D ldd r24,Y+31
2160 0fd0 9927 clr r25
2161 0fd2 87FD sbrc r24,7
2162 0fd4 9095 com r25
2163 0fd6 9F93 push r25
2164 0fd8 8F93 push r24
2165 0fda 8F89 ldd r24,Y+23
2166 0fdc 9927 clr r25
2167 0fde 87FD sbrc r24,7
2168 0fe0 9095 com r25
2169 0fe2 9F93 push r25
2170 0fe4 8F93 push r24
2171 0fe6 8F85 ldd r24,Y+15
2172 0fe8 9927 clr r25
2173 0fea 87FD sbrc r24,7
2174 0fec 9095 com r25
2175 0fee 9F93 push r25
2176 0ff0 8F93 push r24
2177 0ff2 8F81 ldd r24,Y+7
2178 0ff4 9927 clr r25
2179 0ff6 87FD sbrc r24,7
2180 0ff8 9095 com r25
2181 0ffa 9F93 push r25
2182 0ffc 8F93 push r24
2183 0ffe 80E0 ldi r24,lo8(__c.60)
2184 1000 90E0 ldi r25,hi8(__c.60)
2185 1002 9F93 push r25
2186 1004 8F93 push r24
2187 1006 BF92 push r11
2188 1008 AF92 push r10
2189 100a E091 0000 lds r30,_printf_P
2190 100e F091 0000 lds r31,(_printf_P)+1
2191 1012 0995 icall
2192 1014 EDB7 in r30,__SP_L__
2193 1016 FEB7 in r31,__SP_H__
2194 1018 3C96 adiw r30,12
2195 101a EDBF out __SP_L__,r30
2196 101c FA94 dec r15
2197 101e 0C5E subi r16,lo8(-(20))
2198 1020 1F4F sbci r17,hi8(-(20))
2199 1022 A096 adiw r28,32
2200 1024 F7FE sbrs r15,7
2201 1026 00C0 rjmp .L95
2202 1028 00C0 rjmp .L20
2203 .L96:
2204 102a 1092 0000 sts DispPtr,__zero_reg__
2205 102e 80E0 ldi r24,lo8(__c.61)
2206 1030 90E0 ldi r25,hi8(__c.61)
2207 1032 9F93 push r25
2208 1034 8F93 push r24
2209 1036 00E0 ldi r16,lo8(pm(Menu_Putchar))
2210 1038 10E0 ldi r17,hi8(pm(Menu_Putchar))
2211 103a DF92 push r13
2212 103c CF92 push r12
2213 103e FE01 movw r30,r28
2214 1040 0995 icall
2215 1042 84E1 ldi r24,lo8(20)
2216 1044 8093 0000 sts DispPtr,r24
2217 1048 0F90 pop __tmp_reg__
2218 104a 0F90 pop __tmp_reg__
2219 104c 0F90 pop __tmp_reg__
2220 104e 0F90 pop __tmp_reg__
2221 1050 8091 0000 lds r24,Motor+27
2222 1054 881F rol r24
2223 1056 8827 clr r24
2224 1058 881F rol r24
2225 105a 97E0 ldi r25,lo8(7)
2226 105c 899F mul r24,r25
2227 105e C001 movw r24,r0
2228 1060 1124 clr r1
2229 1062 8D96 adiw r24,45
2230 1064 9F93 push r25
2231 1066 8F93 push r24
2232 1068 8091 0000 lds r24,Motor+19
2233 106c 881F rol r24
2234 106e 8827 clr r24
2235 1070 881F rol r24
2236 1072 96E0 ldi r25,lo8(6)
2237 1074 899F mul r24,r25
2238 1076 C001 movw r24,r0
2239 1078 1124 clr r1
2240 107a 8D96 adiw r24,45
2241 107c 9F93 push r25
2242 107e 8F93 push r24
2243 1080 8091 0000 lds r24,Motor+11
2244 1084 881F rol r24
2245 1086 8827 clr r24
2246 1088 881F rol r24
2247 108a 95E0 ldi r25,lo8(5)
2248 108c 899F mul r24,r25
2249 108e C001 movw r24,r0
2250 1090 1124 clr r1
2251 1092 8D96 adiw r24,45
2252 1094 9F93 push r25
2253 1096 8F93 push r24
2254 1098 8091 0000 lds r24,Motor+3
2255 109c 881F rol r24
2256 109e 8827 clr r24
2257 10a0 881F rol r24
2258 10a2 9927 clr r25
2259 10a4 880F lsl r24
2260 10a6 991F rol r25
2261 10a8 880F lsl r24
2262 10aa 991F rol r25
2263 10ac 8D96 adiw r24,45
2264 10ae 9F93 push r25
2265 10b0 8F93 push r24
2266 10b2 80E0 ldi r24,lo8(__c.62)
2267 10b4 90E0 ldi r25,hi8(__c.62)
2268 10b6 9F93 push r25
2269 10b8 8F93 push r24
2270 10ba DF92 push r13
2271 10bc CF92 push r12
2272 10be E091 0000 lds r30,_printf_P
2273 10c2 F091 0000 lds r31,(_printf_P)+1
2274 10c6 0995 icall
2275 10c8 88E2 ldi r24,lo8(40)
2276 10ca 8093 0000 sts DispPtr,r24
2277 10ce 2DB7 in r18,__SP_L__
2278 10d0 3EB7 in r19,__SP_H__
2279 10d2 245F subi r18,lo8(-(12))
2280 10d4 3F4F sbci r19,hi8(-(12))
2281 10d6 2DBF out __SP_L__,r18
2282 10d8 8091 0000 lds r24,Motor+59
2283 10dc 881F rol r24
2284 10de 8827 clr r24
2285 10e0 881F rol r24
2286 10e2 9BE0 ldi r25,lo8(11)
2287 10e4 899F mul r24,r25
2288 10e6 C001 movw r24,r0
2289 10e8 1124 clr r1
2290 10ea 8D96 adiw r24,45
2291 10ec 9F93 push r25
2292 10ee 8F93 push r24
2293 10f0 8091 0000 lds r24,Motor+51
2294 10f4 881F rol r24
2295 10f6 8827 clr r24
2296 10f8 881F rol r24
2297 10fa 9AE0 ldi r25,lo8(10)
2298 10fc 899F mul r24,r25
2299 10fe C001 movw r24,r0
2300 1100 1124 clr r1
2301 1102 8D96 adiw r24,45
2302 1104 9F93 push r25
2303 1106 8F93 push r24
2304 1108 8091 0000 lds r24,Motor+43
2305 110c 881F rol r24
2306 110e 8827 clr r24
2307 1110 881F rol r24
2308 1112 99E0 ldi r25,lo8(9)
2309 1114 899F mul r24,r25
2310 1116 C001 movw r24,r0
2311 1118 1124 clr r1
2312 111a 8D96 adiw r24,45
2313 111c 9F93 push r25
2314 111e 8F93 push r24
2315 1120 8091 0000 lds r24,Motor+35
2316 1124 881F rol r24
2317 1126 8827 clr r24
2318 1128 881F rol r24
2319 112a 9927 clr r25
2320 112c 23E0 ldi r18,3
2321 112e 880F 1: lsl r24
2322 1130 991F rol r25
2323 1132 2A95 dec r18
2324 1134 01F4 brne 1b
2325 1136 8D96 adiw r24,45
2326 1138 9F93 push r25
2327 113a 8F93 push r24
2328 113c 80E0 ldi r24,lo8(__c.63)
2329 113e 90E0 ldi r25,hi8(__c.63)
2330 1140 9F93 push r25
2331 1142 8F93 push r24
2332 1144 DF92 push r13
2333 1146 CF92 push r12
2334 1148 E091 0000 lds r30,_printf_P
2335 114c F091 0000 lds r31,(_printf_P)+1
2336 1150 0995 icall
2337 1152 8CE3 ldi r24,lo8(60)
2338 1154 8093 0000 sts DispPtr,r24
2339 1158 8DB7 in r24,__SP_L__
2340 115a 9EB7 in r25,__SP_H__
2341 115c 0C96 adiw r24,12
2342 115e 8DBF out __SP_L__,r24
2343 1160 8091 0000 lds r24,Motor+67
2344 1164 881F rol r24
2345 1166 8827 clr r24
2346 1168 881F rol r24
2347 116a 9CE0 ldi r25,lo8(12)
2348 116c 899F mul r24,r25
2349 116e C001 movw r24,r0
2350 1170 1124 clr r1
2351 1172 8D96 adiw r24,45
2352 1174 9F93 push r25
2353 1176 8F93 push r24
2354 1178 80E0 ldi r24,lo8(__c.64)
2355 117a 90E0 ldi r25,hi8(__c.64)
2356 117c 9F93 push r25
2357 117e 8F93 push r24
2358 1180 DF92 push r13
2359 1182 CF92 push r12
2360 1184 E091 0000 lds r30,_printf_P
2361 1188 F091 0000 lds r31,(_printf_P)+1
2362 118c 0995 icall
2363 118e 8091 0000 lds r24,Motor+75
2364 1192 EDB7 in r30,__SP_L__
2365 1194 FEB7 in r31,__SP_H__
2366 1196 3696 adiw r30,6
2367 1198 EDBF out __SP_L__,r30
2368 119a 87FF sbrs r24,7
2369 119c 00C0 rjmp .L97
2370 119e 80E4 ldi r24,lo8(64)
2371 11a0 8093 0000 sts DispPtr,r24
2372 11a4 80E0 ldi r24,lo8(__c.65)
2373 11a6 90E0 ldi r25,hi8(__c.65)
2374 11a8 9F93 push r25
2375 11aa 8F93 push r24
2376 11ac DF92 push r13
2377 11ae CF92 push r12
2378 11b0 E091 0000 lds r30,_printf_P
2379 11b4 F091 0000 lds r31,(_printf_P)+1
2380 11b8 0995 icall
2381 11ba 0F90 pop __tmp_reg__
2382 11bc 0F90 pop __tmp_reg__
2383 11be 0F90 pop __tmp_reg__
2384 11c0 0F90 pop __tmp_reg__
2385 .L97:
2386 11c2 8091 0000 lds r24,Motor+83
2387 11c6 87FF sbrs r24,7
2388 11c8 00C0 rjmp .L98
2389 11ca 84E4 ldi r24,lo8(68)
2390 11cc 8093 0000 sts DispPtr,r24
2391 11d0 80E0 ldi r24,lo8(__c.66)
2392 11d2 90E0 ldi r25,hi8(__c.66)
2393 11d4 9F93 push r25
2394 11d6 8F93 push r24
2395 11d8 1F93 push r17
2396 11da 0F93 push r16
2397 11dc E091 0000 lds r30,_printf_P
2398 11e0 F091 0000 lds r31,(_printf_P)+1
2399 11e4 0995 icall
2400 11e6 0F90 pop __tmp_reg__
2401 11e8 0F90 pop __tmp_reg__
2402 11ea 0F90 pop __tmp_reg__
2403 11ec 0F90 pop __tmp_reg__
2404 .L98:
2405 11ee 8091 0000 lds r24,Motor+91
2406 11f2 87FF sbrs r24,7
2407 11f4 00C0 rjmp .L20
2408 11f6 88E4 ldi r24,lo8(72)
2409 11f8 8093 0000 sts DispPtr,r24
2410 11fc 80E0 ldi r24,lo8(__c.67)
2411 11fe 90E0 ldi r25,hi8(__c.67)
2412 .L125:
2413 1200 9F93 push r25
2414 1202 8F93 push r24
2415 1204 1F93 push r17
2416 1206 0F93 push r16
2417 .L118:
2418 1208 E091 0000 lds r30,_printf_P
2419 120c F091 0000 lds r31,(_printf_P)+1
2420 1210 0995 icall
2421 1212 0F90 pop __tmp_reg__
2422 1214 0F90 pop __tmp_reg__
2423 1216 0F90 pop __tmp_reg__
2424 1218 0F90 pop __tmp_reg__
2425 121a 00C0 rjmp .L20
2426 .L100:
2427 121c 1092 0000 sts DispPtr,__zero_reg__
2428 1220 80E0 ldi r24,lo8(__c.68)
2429 1222 90E0 ldi r25,hi8(__c.68)
2430 1224 9F93 push r25
2431 1226 8F93 push r24
2432 1228 DF92 push r13
2433 122a CF92 push r12
2434 122c FE01 movw r30,r28
2435 122e 0995 icall
2436 1230 84E1 ldi r24,lo8(20)
2437 1232 8093 0000 sts DispPtr,r24
2438 1236 0F90 pop __tmp_reg__
2439 1238 0F90 pop __tmp_reg__
2440 123a 0F90 pop __tmp_reg__
2441 123c 0F90 pop __tmp_reg__
2442 123e 8091 0000 lds r24,FlugMinutenGesamt
2443 1242 9091 0000 lds r25,(FlugMinutenGesamt)+1
2444 1246 9F93 push r25
2445 1248 8F93 push r24
2446 124a 80E0 ldi r24,lo8(__c.69)
2447 124c 90E0 ldi r25,hi8(__c.69)
2448 124e 9F93 push r25
2449 1250 8F93 push r24
2450 1252 DF92 push r13
2451 1254 CF92 push r12
2452 1256 E091 0000 lds r30,_printf_P
2453 125a F091 0000 lds r31,(_printf_P)+1
2454 125e 0995 icall
2455 1260 88E2 ldi r24,lo8(40)
2456 1262 8093 0000 sts DispPtr,r24
2457 1266 2DB7 in r18,__SP_L__
2458 1268 3EB7 in r19,__SP_H__
2459 126a 2A5F subi r18,lo8(-(6))
2460 126c 3F4F sbci r19,hi8(-(6))
2461 126e 2DBF out __SP_L__,r18
2462 1270 8091 0000 lds r24,FlugMinuten
2463 1274 9091 0000 lds r25,(FlugMinuten)+1
2464 1278 9F93 push r25
2465 127a 8F93 push r24
2466 127c 80E0 ldi r24,lo8(__c.70)
2467 127e 90E0 ldi r25,hi8(__c.70)
2468 1280 9F93 push r25
2469 1282 8F93 push r24
2470 1284 DF92 push r13
2471 1286 CF92 push r12
2472 1288 E091 0000 lds r30,_printf_P
2473 128c F091 0000 lds r31,(_printf_P)+1
2474 1290 0995 icall
2475 1292 89E4 ldi r24,lo8(73)
2476 1294 8093 0000 sts DispPtr,r24
2477 1298 8DB7 in r24,__SP_L__
2478 129a 9EB7 in r25,__SP_H__
2479 129c 0696 adiw r24,6
2480 129e 8DBF out __SP_L__,r24
2481 12a0 80E0 ldi r24,lo8(__c.71)
2482 12a2 90E0 ldi r25,hi8(__c.71)
2483 12a4 9F93 push r25
2484 12a6 8F93 push r24
2485 12a8 DF92 push r13
2486 12aa CF92 push r12
2487 12ac E091 0000 lds r30,_printf_P
2488 12b0 F091 0000 lds r31,(_printf_P)+1
2489 12b4 0995 icall
2490 12b6 8091 0000 lds r24,RemoteKeys
2491 12ba 0F90 pop __tmp_reg__
2492 12bc 0F90 pop __tmp_reg__
2493 12be 0F90 pop __tmp_reg__
2494 12c0 0F90 pop __tmp_reg__
2495 12c2 83FF sbrs r24,3
2496 12c4 00C0 rjmp .L20
2497 12c6 1092 0000 sts (FlugMinuten)+1,__zero_reg__
2498 12ca 1092 0000 sts FlugMinuten,__zero_reg__
2499 12ce 60E0 ldi r22,lo8(0)
2500 12d0 70E0 ldi r23,hi8(0)
2501 12d2 8EE0 ldi r24,lo8(14)
2502 12d4 90E0 ldi r25,hi8(14)
2503 12d6 0E94 0000 call SetParamWord
2504 12da 00C0 rjmp .L20
2505 .L102:
2506 12dc 8091 0000 lds r24,MaxMenue
2507 12e0 2817 cp r18,r24
2508 12e2 01F4 brne .L103
2509 12e4 2150 subi r18,lo8(-(-1))
2510 12e6 2093 0000 sts MaxMenue,r18
2511 .L103:
2512 12ea 1092 0000 sts MenuePunkt,__zero_reg__
2513 .L20:
2514 12ee 1092 0000 sts RemoteKeys,__zero_reg__
2515 /* epilogue: frame size=0 */
2516 12f2 DF91 pop r29
2517 12f4 CF91 pop r28
2518 12f6 1F91 pop r17
2519 12f8 0F91 pop r16
2520 12fa FF90 pop r15
2521 12fc DF90 pop r13
2522 12fe CF90 pop r12
2523 1300 BF90 pop r11
2524 1302 AF90 pop r10
2525 1304 0895 ret
2526 /* epilogue end (size=10) */
2527 /* function Menu size 2447 (2428) */
2529 .comm DisplayBuff,80,1
2530 /* File "menu.c": code 2469 = 0x09a5 (2449), prologues 9, epilogues 11 */
DEFINED SYMBOLS
*ABS*:00000000 menu.c
C:\Temp/cceCBQN8.s:3 *ABS*:0000003f __SREG__
C:\Temp/cceCBQN8.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cceCBQN8.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cceCBQN8.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cceCBQN8.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cceCBQN8.s:15 .bss:00000000 RemoteKeys
C:\Temp/cceCBQN8.s:21 .bss:00000001 MenuePunkt
C:\Temp/cceCBQN8.s:27 .data:00000000 MaxMenue
C:\Temp/cceCBQN8.s:34 .bss:00000002 DispPtr
C:\Temp/cceCBQN8.s:39 .text:00000000 LcdClear
*COM*:00000050 DisplayBuff
C:\Temp/cceCBQN8.s:58 .text:00000012 Menu_Putchar
C:\Temp/cceCBQN8.s:81 .progmem.data:00000000 __c.0
C:\Temp/cceCBQN8.s:85 .progmem.data:00000005 __c.1
C:\Temp/cceCBQN8.s:89 .progmem.data:0000000a __c.2
C:\Temp/cceCBQN8.s:93 .progmem.data:0000001a __c.3
C:\Temp/cceCBQN8.s:97 .progmem.data:00000032 __c.4
C:\Temp/cceCBQN8.s:101 .progmem.data:00000040 __c.5
C:\Temp/cceCBQN8.s:105 .progmem.data:0000004d __c.6
C:\Temp/cceCBQN8.s:109 .progmem.data:00000055 __c.7
C:\Temp/cceCBQN8.s:113 .progmem.data:0000006c __c.8
C:\Temp/cceCBQN8.s:117 .progmem.data:00000081 __c.9
C:\Temp/cceCBQN8.s:121 .progmem.data:0000008e __c.10
C:\Temp/cceCBQN8.s:125 .progmem.data:0000009b __c.11
C:\Temp/cceCBQN8.s:129 .progmem.data:000000a8 __c.12
C:\Temp/cceCBQN8.s:133 .progmem.data:000000b5 __c.13
C:\Temp/cceCBQN8.s:137 .progmem.data:000000c2 __c.14
C:\Temp/cceCBQN8.s:141 .progmem.data:000000d1 __c.15
C:\Temp/cceCBQN8.s:145 .progmem.data:000000da __c.16
C:\Temp/cceCBQN8.s:149 .progmem.data:000000e7 __c.17
C:\Temp/cceCBQN8.s:153 .progmem.data:000000f6 __c.18
C:\Temp/cceCBQN8.s:157 .progmem.data:00000105 __c.19
C:\Temp/cceCBQN8.s:161 .progmem.data:00000114 __c.20
C:\Temp/cceCBQN8.s:165 .progmem.data:00000126 __c.21
C:\Temp/cceCBQN8.s:169 .progmem.data:00000136 __c.22
C:\Temp/cceCBQN8.s:173 .progmem.data:00000146 __c.23
C:\Temp/cceCBQN8.s:177 .progmem.data:00000156 __c.24
C:\Temp/cceCBQN8.s:181 .progmem.data:00000166 __c.25
C:\Temp/cceCBQN8.s:185 .progmem.data:00000174 __c.26
C:\Temp/cceCBQN8.s:189 .progmem.data:00000185 __c.27
C:\Temp/cceCBQN8.s:193 .progmem.data:00000196 __c.28
C:\Temp/cceCBQN8.s:197 .progmem.data:000001a4 __c.29
C:\Temp/cceCBQN8.s:201 .progmem.data:000001b6 __c.30
C:\Temp/cceCBQN8.s:205 .progmem.data:000001c8 __c.31
C:\Temp/cceCBQN8.s:209 .progmem.data:000001d7 __c.32
C:\Temp/cceCBQN8.s:213 .progmem.data:000001eb __c.33
C:\Temp/cceCBQN8.s:217 .progmem.data:000001ff __c.34
C:\Temp/cceCBQN8.s:221 .progmem.data:00000213 __c.35
C:\Temp/cceCBQN8.s:225 .progmem.data:00000220 __c.36
C:\Temp/cceCBQN8.s:229 .progmem.data:0000022f __c.37
C:\Temp/cceCBQN8.s:233 .progmem.data:0000023e __c.38
C:\Temp/cceCBQN8.s:237 .progmem.data:0000024d __c.39
C:\Temp/cceCBQN8.s:241 .progmem.data:00000261 __c.40
C:\Temp/cceCBQN8.s:245 .progmem.data:00000275 __c.41
C:\Temp/cceCBQN8.s:249 .progmem.data:00000285 __c.42
C:\Temp/cceCBQN8.s:253 .progmem.data:00000297 __c.43
C:\Temp/cceCBQN8.s:257 .progmem.data:000002a0 __c.44
C:\Temp/cceCBQN8.s:261 .progmem.data:000002b0 __c.45
C:\Temp/cceCBQN8.s:265 .progmem.data:000002c0 __c.46
C:\Temp/cceCBQN8.s:269 .progmem.data:000002d0 __c.47
C:\Temp/cceCBQN8.s:273 .progmem.data:000002d8 __c.48
C:\Temp/cceCBQN8.s:277 .progmem.data:000002e6 __c.49
C:\Temp/cceCBQN8.s:281 .progmem.data:000002f4 __c.50
C:\Temp/cceCBQN8.s:285 .progmem.data:00000302 __c.51
C:\Temp/cceCBQN8.s:289 .progmem.data:0000030f __c.52
C:\Temp/cceCBQN8.s:293 .progmem.data:0000031c __c.53
C:\Temp/cceCBQN8.s:297 .progmem.data:00000324 __c.54
C:\Temp/cceCBQN8.s:301 .progmem.data:00000332 __c.55
C:\Temp/cceCBQN8.s:305 .progmem.data:00000340 __c.56
C:\Temp/cceCBQN8.s:309 .progmem.data:0000034e __c.57
C:\Temp/cceCBQN8.s:313 .progmem.data:0000035e __c.58
C:\Temp/cceCBQN8.s:317 .progmem.data:0000036f __c.59
C:\Temp/cceCBQN8.s:321 .progmem.data:0000037e __c.60
C:\Temp/cceCBQN8.s:325 .progmem.data:0000038f __c.61
C:\Temp/cceCBQN8.s:329 .progmem.data:0000039e __c.62
C:\Temp/cceCBQN8.s:333 .progmem.data:000003b2 __c.63
C:\Temp/cceCBQN8.s:337 .progmem.data:000003c6 __c.64
C:\Temp/cceCBQN8.s:341 .progmem.data:000003d7 __c.65
C:\Temp/cceCBQN8.s:345 .progmem.data:000003da __c.66
C:\Temp/cceCBQN8.s:349 .progmem.data:000003dd __c.67
C:\Temp/cceCBQN8.s:353 .progmem.data:000003e0 __c.68
C:\Temp/cceCBQN8.s:357 .progmem.data:000003ee __c.69
C:\Temp/cceCBQN8.s:361 .progmem.data:000003fb __c.70
C:\Temp/cceCBQN8.s:365 .progmem.data:00000408 __c.71
C:\Temp/cceCBQN8.s:370 .text:0000002c Menu
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
_printf_P
__tablejump2__
PlatinenVersion
__udivmodqi4
Mixer
GetActiveParamSet
VersionInfo
NC_ErrorCode
NC_ERROR_TEXT
MissingMotor
I2CTimeout
Parameter_GlobalConfig
HoehenWert
__divmodsi4
SollHoehe
MessLuftdruck
IntegralNick
IntegralRoll
ErsatzKompassInGrad
PPM_in
EE_Parameter
AdNeutralNick
AdWertNick
AdNeutralRoll
AdWertRoll
AdNeutralGier
AdWertGier
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
NeutralAccX
AdWertAccNick
NeutralAccY
AdWertAccRoll
NeutralAccZ
AdWertAccHoch
UBat
__divmodhi4
Capacity
__udivmodhi4
SenderOkay
Channels
KompassValue
KompassSollWert
Poti
Parameter_ServoNickControl
ServoNickValue
Motor
FlugMinutenGesamt
FlugMinuten
SetParamWord
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccCvS4x3.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccCvS4x3.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccCvS4x3.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccCvS4x3.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccCvS4x3.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccCvS4x3.s:14 .progmem.data:00000000 pgm_sinlookup
C:\Temp/ccCvS4x3.s:109 .text:00000000 c_sin_8192
C:\Temp/ccCvS4x3.s:203 .text:00000098 c_cos_8192
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__divmodhi4
/branches/v0.90e_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.90e_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.90e_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.90e_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.90e_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/ccrEgSVy.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccrEgSVy.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccrEgSVy.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccrEgSVy.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccrEgSVy.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccrEgSVy.s:14 .data:00000000 PPM_Neutral
C:\Temp/ccrEgSVy.s:19 .data:00000002 NewPpmData
C:\Temp/ccrEgSVy.s:26 .bss:00000000 tmpChannels
C:\Temp/ccrEgSVy.s:31 .text:00000000 rc_sum_init
*COM*:00000034 PPM_diff
*COM*:00000034 PPM_in
.bss:00000001 AltICR.0
C:\Temp/ccrEgSVy.s:76 .bss:00000003 index.1
C:\Temp/ccrEgSVy.s:77 .bss:00000005 AltICR.2
C:\Temp/ccrEgSVy.s:78 .bss:00000007 ppm_in.3
C:\Temp/ccrEgSVy.s:79 .bss:00000021 ppm_diff.4
C:\Temp/ccrEgSVy.s:80 .bss:0000003b old_ppm_in.5
C:\Temp/ccrEgSVy.s:81 .bss:00000055 old_ppm_diff.6
C:\Temp/ccrEgSVy.s:82 .bss:0000006f index.7
C:\Temp/ccrEgSVy.s:83 .bss:00000070 okay_cnt.8
C:\Temp/ccrEgSVy.s:87 .text:00000052 __vector_12
*COM*:00000001 Channels
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
AdNeutralGier
AdNeutralRoll
AdNeutralNick
EE_Parameter
SenderOkay
__divmodhi4
PlatinenVersion
MotorenEin
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccjjW9tw.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccjjW9tw.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccjjW9tw.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccjjW9tw.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccjjW9tw.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccjjW9tw.s:15 .bss:00000000 NewSBusData
C:\Temp/ccjjW9tw.s:20 .text:00000000 SbusUartInit
*COM*:00000019 sBusBuffer
.bss:00000001 ptr.1
C:\Temp/ccjjW9tw.s:95 .text:000000ba SbusParser
C:\Temp/ccjjW9tw.s:92 .bss:00000002 load.0
C:\Temp/ccjjW9tw.s:136 .text:000000fe ProcessSBus
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SpektrumTimer
__prologue_saves__
EE_Parameter
PPM_in
SenderOkay
__divmodhi4
PPM_diff
NewPpmData
__epilogue_restores__
/branches/v0.90e_Ernstl_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.90e_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.90e_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 84E0 ldi r24,lo8(4)
756 061c 8093 0000 sts ToNaviCtrl+23,r24
757 0620 84E3 ldi r24,lo8(52)
758 0622 8093 0000 sts ToNaviCtrl+24,r24
759 0626 8091 0000 lds r24,PlatinenVersion
760 062a 8093 0000 sts ToNaviCtrl+25,r24
761 062e 8091 0000 lds r24,VersionInfo+5
762 0632 8093 0000 sts ToNaviCtrl+26,r24
763 0636 9091 0000 lds r25,VersionInfo+6
764 063a 9093 0000 sts ToNaviCtrl+27,r25
765 063e 8F77 andi r24,lo8(127)
766 0640 8093 0000 sts VersionInfo+5,r24
767 0644 9071 andi r25,lo8(16)
768 0646 9093 0000 sts VersionInfo+6,r25
769 064a 8091 0000 lds r24,VersionInfo+7
770 064e 8093 0000 sts ToNaviCtrl+28,r24
771 0652 8091 0000 lds r24,Parameter_GlobalConfig
772 0656 8093 0000 sts ToNaviCtrl+29,r24
773 065a 8091 0000 lds r24,Parameter_ExtraConfig
774 065e 8093 0000 sts ToNaviCtrl+30,r24
775 0662 8091 0000 lds r24,EE_Parameter+98
776 0666 8093 0000 sts ToNaviCtrl+31,r24
777 066a 8091 0000 lds r24,EE_Parameter+111
778 066e 00C0 rjmp .L72
779 .L49:
780 0670 8091 0000 lds r24,EE_Parameter+53
781 0674 8093 0000 sts ToNaviCtrl+21,r24
782 0678 8091 0000 lds r24,EE_Parameter+109
783 067c 8093 0000 sts ToNaviCtrl+22,r24
784 0680 8091 0000 lds r24,Parameter_ServoNickControl
785 0684 8093 0000 sts ToNaviCtrl+23,r24
786 0688 8091 0000 lds r24,EE_Parameter+46
787 068c 8093 0000 sts ToNaviCtrl+24,r24
788 0690 8091 0000 lds r24,EE_Parameter+47
789 0694 8093 0000 sts ToNaviCtrl+25,r24
790 0698 8091 0000 lds r24,EE_Parameter+48
791 069c 8093 0000 sts ToNaviCtrl+26,r24
792 06a0 8091 0000 lds r24,Parameter_ServoRollControl
793 06a4 8093 0000 sts ToNaviCtrl+27,r24
794 06a8 8091 0000 lds r24,EE_Parameter+50
795 06ac 8093 0000 sts ToNaviCtrl+28,r24
796 06b0 8091 0000 lds r24,EE_Parameter+51
797 06b4 8093 0000 sts ToNaviCtrl+29,r24
798 06b8 8091 0000 lds r24,EE_Parameter+52
799 06bc 8093 0000 sts ToNaviCtrl+30,r24
800 06c0 8091 0000 lds r24,Capacity+6
801 06c4 8093 0000 sts ToNaviCtrl+31,r24
802 06c8 8091 0000 lds r24,DebugOut+58
803 .L72:
804 06cc 8093 0000 sts ToNaviCtrl+32,r24
805 .L23:
806 06d0 8091 0000 lds r24,SPI_RxDataValid
807 06d4 8823 tst r24
808 06d6 01F4 brne .+2
809 06d8 00C0 rjmp .L51
810 06da 6091 0000 lds r22,FromNaviCtrl
811 06de 8091 0000 lds r24,oldcommand.1
812 06e2 6817 cp r22,r24
813 06e4 01F0 breq .L52
814 06e6 8AEF ldi r24,lo8(-6)
815 06e8 8093 0000 sts NaviDataOkay,r24
816 .L52:
817 06ec 6093 0000 sts oldcommand.1,r22
818 06f0 81E0 ldi r24,lo8(1)
819 06f2 8093 0000 sts CalculateCompassTimer,r24
820 06f6 4091 0000 lds r20,FromNaviCtrl+1
821 06fa 5091 0000 lds r21,(FromNaviCtrl+1)+1
822 06fe CA01 movw r24,r20
823 0700 8150 subi r24,lo8(-(511))
824 0702 9E4F sbci r25,hi8(-(511))
825 0704 8F5F subi r24,lo8(1023)
826 0706 9340 sbci r25,hi8(1023)
827 0708 00F4 brsh .L53
828 070a 2091 0000 lds r18,FromNaviCtrl+3
829 070e 3091 0000 lds r19,(FromNaviCtrl+3)+1
830 0712 C901 movw r24,r18
831 0714 8150 subi r24,lo8(-(511))
832 0716 9E4F sbci r25,hi8(-(511))
833 0718 8F5F subi r24,lo8(1023)
834 071a 9340 sbci r25,hi8(1023)
835 071c 00F4 brsh .L53
836 071e 8091 0000 lds r24,EE_Parameter+13
837 0722 85FF sbrs r24,5
838 0724 00C0 rjmp .L53
839 0726 5093 0000 sts (GPS_Nick)+1,r21
840 072a 4093 0000 sts GPS_Nick,r20
841 072e 3093 0000 sts (GPS_Roll)+1,r19
842 0732 2093 0000 sts GPS_Roll,r18
843 .L53:
844 0736 8091 0000 lds r24,FromNaviCtrl+7
845 073a 9091 0000 lds r25,(FromNaviCtrl+7)+1
846 073e 21E0 ldi r18,hi8(361)
847 0740 8936 cpi r24,lo8(361)
848 0742 9207 cpc r25,r18
849 0744 04F4 brge .L54
850 0746 9093 0000 sts (KompassValue)+1,r25
851 074a 8093 0000 sts KompassValue,r24
852 .L54:
853 074e 2091 0000 lds r18,FromNaviCtrl+17
854 0752 3091 0000 lds r19,(FromNaviCtrl+17)+1
855 0756 8091 0000 lds r24,beeptime
856 075a 9091 0000 lds r25,(beeptime)+1
857 075e 8217 cp r24,r18
858 0760 9307 cpc r25,r19
859 0762 00F4 brsh .L55
860 0764 8091 0000 lds r24,DisableRcOffBeeping
861 0768 8823 tst r24
862 076a 01F4 brne .L55
863 076c 3093 0000 sts (beeptime)+1,r19
864 0770 2093 0000 sts beeptime,r18
865 .L55:
866 0774 862F mov r24,r22
867 0776 9927 clr r25
868 0778 8936 cpi r24,105
869 077a 9105 cpc r25,__zero_reg__
870 077c 01F4 brne .+2
871 077e 00C0 rjmp .L62
872 0780 8A36 cpi r24,106
873 0782 9105 cpc r25,__zero_reg__
874 0784 04F4 brge .L70
875 0786 8736 cpi r24,103
876 0788 9105 cpc r25,__zero_reg__
877 078a 01F0 breq .L57
878 078c 8836 cpi r24,104
879 078e 9105 cpc r25,__zero_reg__
880 0790 01F4 brne .+2
881 0792 00C0 rjmp .L61
882 0794 00C0 rjmp .L20
883 .L70:
884 0796 8A36 cpi r24,106
885 0798 9105 cpc r25,__zero_reg__
886 079a 01F4 brne .+2
887 079c 00C0 rjmp .L67
888 079e 8B36 cpi r24,107
889 07a0 9105 cpc r25,__zero_reg__
890 07a2 01F4 brne .+2
891 07a4 00C0 rjmp .L63
892 07a6 00C0 rjmp .L20
893 .L57:
894 07a8 8091 0000 lds r24,FromNaviCtrl+19
895 07ac 8093 0000 sts FromNaviCtrl_Value,r24
896 07b0 8091 0000 lds r24,FromNaviCtrl+20
897 07b4 8093 0000 sts FromNaviCtrl_Value+2,r24
898 07b8 8091 0000 lds r24,FromNaviCtrl+21
899 07bc 8093 0000 sts FromNaviCtrl_Value+1,r24
900 07c0 8091 0000 lds r24,FromNaviCtrl+22
901 07c4 8093 0000 sts KompassFusion,r24
902 07c8 8091 0000 lds r24,FromNaviCtrl+23
903 07cc 8093 0000 sts FromNaviCtrl_Value+4,r24
904 07d0 8091 0000 lds r24,FromNaviCtrl+24
905 07d4 8093 0000 sts FromNC_Rotate_C,r24
906 07d8 8091 0000 lds r24,FromNaviCtrl+25
907 07dc 8093 0000 sts FromNC_Rotate_S,r24
908 07e0 8091 0000 lds r24,FromNaviCtrl+26
909 07e4 8093 0000 sts GPS_Aid_StickMultiplikator,r24
910 07e8 8091 0000 lds r24,CareFree
911 07ec 8823 tst r24
912 07ee 01F0 breq .L58
913 07f0 2091 0000 lds r18,FromNaviCtrl+27
914 07f4 3091 0000 lds r19,(FromNaviCtrl+27)+1
915 07f8 37FD sbrc r19,7
916 07fa 00C0 rjmp .L58
917 07fc 3093 0000 sts (KompassSollWert)+1,r19
918 0800 2093 0000 sts KompassSollWert,r18
919 0804 9091 0000 lds r25,EE_Parameter+55
920 0808 9923 tst r25
921 080a 01F0 breq .L58
922 080c 8FE0 ldi r24,lo8(15)
923 080e 989F mul r25,r24
924 0810 C001 movw r24,r0
925 0812 1124 clr r1
926 0814 281B sub r18,r24
927 0816 390B sbc r19,r25
928 0818 C901 movw r24,r18
929 081a 8859 subi r24,lo8(-(360))
930 081c 9E4F sbci r25,hi8(-(360))
931 081e 68E6 ldi r22,lo8(360)
932 0820 71E0 ldi r23,hi8(360)
933 0822 0E94 0000 call __divmodhi4
934 0826 9093 0000 sts (KompassSollWert)+1,r25
935 082a 8093 0000 sts KompassSollWert,r24
936 .L58:
937 082e 2091 0000 lds r18,POI_KameraNick
938 0832 3091 0000 lds r19,(POI_KameraNick)+1
939 0836 8091 0000 lds r24,FromNaviCtrl+29
940 083a 9091 0000 lds r25,(FromNaviCtrl+29)+1
941 083e 280F add r18,r24
942 0840 391F adc r19,r25
943 0842 37FF sbrs r19,7
944 0844 00C0 rjmp .L60
945 0846 2F5F subi r18,lo8(-(1))
946 0848 3F4F sbci r19,hi8(-(1))
947 .L60:
948 084a 3595 asr r19
949 084c 2795 ror r18
950 084e 3093 0000 sts (POI_KameraNick)+1,r19
951 0852 2093 0000 sts POI_KameraNick,r18
952 0856 00C0 rjmp .L20
953 .L61:
954 0858 8091 0000 lds r24,FromNaviCtrl+19
955 085c 8093 0000 sts NC_Version,r24
956 0860 8091 0000 lds r24,FromNaviCtrl+20
957 0864 8093 0000 sts NC_Version+1,r24
958 0868 8091 0000 lds r24,FromNaviCtrl+21
959 086c 8093 0000 sts NC_Version+2,r24
960 0870 8091 0000 lds r24,FromNaviCtrl+22
961 0874 8093 0000 sts NC_Version+3,r24
962 0878 8091 0000 lds r24,FromNaviCtrl+23
963 087c 8093 0000 sts NC_Version+4,r24
964 0880 8091 0000 lds r24,DebugOut
965 0884 9091 0000 lds r25,FromNaviCtrl+24
966 0888 892B or r24,r25
967 088a 8093 0000 sts DebugOut,r24
968 088e 9091 0000 lds r25,DebugOut+1
969 0892 9370 andi r25,lo8(3)
970 0894 8091 0000 lds r24,FromNaviCtrl+25
971 0898 8C70 andi r24,lo8(12)
972 089a 982B or r25,r24
973 089c 9093 0000 sts DebugOut+1,r25
974 08a0 8091 0000 lds r24,FromNaviCtrl+26
975 08a4 8093 0000 sts NC_ErrorCode,r24
976 08a8 8091 0000 lds r24,FromNaviCtrl+27
977 08ac 8093 0000 sts NC_GPS_ModeCharacter,r24
978 08b0 8091 0000 lds r24,FromNaviCtrl+28
979 08b4 8093 0000 sts FromNaviCtrl_Value+3,r24
980 08b8 8091 0000 lds r24,FromNaviCtrl+29
981 08bc 8093 0000 sts NC_To_FC_Flags,r24
982 08c0 8091 0000 lds r24,FromNaviCtrl+30
983 08c4 8093 0000 sts NC_To_FC_MaxAltitude,r24
984 08c8 00C0 rjmp .L20
985 .L62:
986 08ca 8091 0000 lds r24,FromNaviCtrl+19
987 08ce 8093 0000 sts GPSInfo,r24
988 08d2 8091 0000 lds r24,FromNaviCtrl+20
989 08d6 8093 0000 sts GPSInfo+1,r24
990 08da 8091 0000 lds r24,FromNaviCtrl+21
991 08de 8093 0000 sts GPSInfo+2,r24
992 08e2 8091 0000 lds r24,FromNaviCtrl+22
993 08e6 8093 0000 sts GPSInfo+3,r24
994 08ea 8091 0000 lds r24,FromNaviCtrl+23
995 08ee 9091 0000 lds r25,(FromNaviCtrl+23)+1
996 08f2 9093 0000 sts (GPSInfo+4)+1,r25
997 08f6 8093 0000 sts GPSInfo+4,r24
998 08fa 8091 0000 lds r24,FromNaviCtrl+25
999 08fe 9091 0000 lds r25,(FromNaviCtrl+25)+1
1000 0902 9093 0000 sts (GPSInfo+6)+1,r25
1001 0906 8093 0000 sts GPSInfo+6,r24
1002 090a 8091 0000 lds r24,FromNaviCtrl+27
1003 090e 9927 clr r25
1004 0910 87FD sbrc r24,7
1005 0912 9095 com r25
1006 0914 9093 0000 sts (PPM_in+50)+1,r25
1007 0918 8093 0000 sts PPM_in+50,r24
1008 091c 8091 0000 lds r24,FromNaviCtrl+28
1009 0920 8093 0000 sts FromNC_AltitudeSpeed,r24
1010 0924 8091 0000 lds r24,FromNaviCtrl+29
1011 0928 9091 0000 lds r25,(FromNaviCtrl+29)+1
1012 092c 9C01 movw r18,r24
1013 092e 4427 clr r20
1014 0930 37FD sbrc r19,7
1015 0932 4095 com r20
1016 0934 542F mov r21,r20
1017 0936 DA01 movw r26,r20
1018 0938 C901 movw r24,r18
1019 093a 63E0 ldi r22,3
1020 093c 880F 1: lsl r24
1021 093e 991F rol r25
1022 0940 AA1F rol r26
1023 0942 BB1F rol r27
1024 0944 6A95 dec r22
1025 0946 01F4 brne 1b
1026 0948 820F add r24,r18
1027 094a 931F adc r25,r19
1028 094c A41F adc r26,r20
1029 094e B51F adc r27,r21
1030 0950 820F add r24,r18
1031 0952 931F adc r25,r19
1032 0954 A41F adc r26,r20
1033 0956 B51F adc r27,r21
1034 0958 8093 0000 sts FromNC_AltitudeSetpoint,r24
1035 095c 9093 0000 sts (FromNC_AltitudeSetpoint)+1,r25
1036 0960 A093 0000 sts (FromNC_AltitudeSetpoint)+2,r26
1037 0964 B093 0000 sts (FromNC_AltitudeSetpoint)+3,r27
1038 0968 00C0 rjmp .L20
1039 .L63:
1040 096a 8091 0000 lds r24,FromNaviCtrl+19
1041 096e 8093 0000 sts EarthMagneticField,r24
1042 0972 8091 0000 lds r24,FromNaviCtrl+20
1043 0976 8093 0000 sts EarthMagneticInclination,r24
1044 097a 8091 0000 lds r24,FromNaviCtrl+21
1045 097e 8093 0000 sts EarthMagneticInclinationTheoretic,r24
1046 0982 9091 0000 lds r25,FromNaviCtrl+22
1047 0986 9923 tst r25
1048 0988 01F0 breq .L64
1049 098a 8091 0000 lds r24,SpeakHoTT
1050 098e 8823 tst r24
1051 0990 01F0 breq .L66
1052 0992 8151 subi r24,lo8(-(-17))
1053 0994 8330 cpi r24,lo8(3)
1054 0996 00F4 brsh .L64
1055 .L66:
1056 0998 9093 0000 sts SpeakHoTT,r25
1057 .L64:
1058 099c 8091 0000 lds r24,FromNaviCtrl+23
1059 09a0 8093 0000 sts NaviData_WaypointIndex,r24
1060 09a4 8091 0000 lds r24,FromNaviCtrl+24
1061 09a8 8093 0000 sts NaviData_WaypointNumber,r24
1062 09ac 8091 0000 lds r24,FromNaviCtrl+25
1063 09b0 9091 0000 lds r25,(FromNaviCtrl+25)+1
1064 09b4 9093 0000 sts (NaviData_TargetDistance)+1,r25
1065 09b8 8093 0000 sts NaviData_TargetDistance,r24
1066 09bc 8091 0000 lds r24,FromNaviCtrl+27
1067 09c0 8093 0000 sts NaviData_TargetHoldTime,r24
1068 09c4 00C0 rjmp .L20
1069 .L67:
1070 09c6 8091 0000 lds r24,EE_Parameter+39
1071 09ca 8630 cpi r24,lo8(6)
1072 09cc 01F4 brne .L20
1073 09ce 0E94 0000 call NC_Fills_HoTT_Telemety
1074 09d2 00C0 rjmp .L20
1075 .L51:
1076 09d4 1092 0000 sts (GPS_Nick)+1,__zero_reg__
1077 09d8 1092 0000 sts GPS_Nick,__zero_reg__
1078 09dc 1092 0000 sts (GPS_Roll)+1,__zero_reg__
1079 09e0 1092 0000 sts GPS_Roll,__zero_reg__
1080 .L20:
1081 /* epilogue: frame size=0 */
1082 09e4 1F91 pop r17
1083 09e6 0F91 pop r16
1084 09e8 FF90 pop r15
1085 09ea EF90 pop r14
1086 09ec 0895 ret
1087 /* epilogue end (size=5) */
1088 /* function UpdateSPI_Buffer size 1115 (1106) */
1090 .global SPI_StartTransmitPacket
1092 SPI_StartTransmitPacket:
1093 /* prologue: frame size=0 */
1094 /* prologue end (size=0) */
1095 09ee 8091 0000 lds r24,SPITransferCompleted
1096 09f2 8823 tst r24
1097 09f4 01F4 brne .+2
1098 09f6 00C0 rjmp .L73
1099 09f8 4598 cbi 40-0x20,5
1100 09fa 80E0 ldi r24,lo8(ToNaviCtrl)
1101 09fc 90E0 ldi r25,hi8(ToNaviCtrl)
1102 09fe 9093 0000 sts (SPI_TX_Buffer)+1,r25
1103 0a02 8093 0000 sts SPI_TX_Buffer,r24
1104 0a06 9091 0000 lds r25,SPI_CommandCounter
1105 0a0a E92F mov r30,r25
1106 0a0c FF27 clr r31
1107 0a0e E050 subi r30,lo8(-(SPI_CommandSequence))
1108 0a10 F040 sbci r31,hi8(-(SPI_CommandSequence))
1109 0a12 9F5F subi r25,lo8(-(1))
1110 0a14 9093 0000 sts SPI_CommandCounter,r25
1111 0a18 8081 ld r24,Z
1112 0a1a 8093 0000 sts ToNaviCtrl+2,r24
1113 0a1e 9B30 cpi r25,lo8(11)
1114 0a20 00F0 brlo .L75
1115 0a22 1092 0000 sts SPI_CommandCounter,__zero_reg__
1116 .L75:
1117 0a26 1092 0000 sts SPITransferCompleted,__zero_reg__
1118 0a2a 0E94 0000 call UpdateSPI_Buffer
1119 0a2e 81E0 ldi r24,lo8(1)
1120 0a30 8093 0000 sts SPI_BufferIndex,r24
1121 /* #APP */
1122 0a34 0000 nop
1123 0a36 0000 nop
1124 0a38 0000 nop
1125 0a3a 0000 nop
1126 0a3c 0000 nop
1127 0a3e 0000 nop
1128 0a40 0000 nop
1129 0a42 0000 nop
1130 0a44 0000 nop
1131 0a46 0000 nop
1132 0a48 0000 nop
1133 0a4a 0000 nop
1134 0a4c 0000 nop
1135 0a4e 0000 nop
1136 0a50 0000 nop
1137 0a52 0000 nop
1138 0a54 0000 nop
1139 0a56 0000 nop
1140 0a58 0000 nop
1141 0a5a 0000 nop
1142 0a5c 0000 nop
1143 0a5e 0000 nop
1144 0a60 0000 nop
1145 0a62 0000 nop
1146 /* #NOAPP */
1147 0a64 8091 0000 lds r24,ToNaviCtrl
1148 0a68 8093 0000 sts ToNaviCtrl+33,r24
1149 0a6c 8EBD out 78-0x20,r24
1150 .L73:
1151 0a6e 0895 ret
1152 /* epilogue: frame size=0 */
1153 /* epilogue: noreturn */
1154 /* epilogue end (size=0) */
1155 /* function SPI_StartTransmitPacket size 89 (89) */
1157 .comm GPSInfo,8,1
1158 .comm NC_Version,5,1
1159 .comm FromNaviCtrl_Value,5,1
1160 .comm ToNaviCtrl,34,1
1161 .comm FromNaviCtrl,32,1
1162 .comm SPI_BufferIndex,1,1
1163 .comm SPI_RxBufferIndex,1,1
1164 .comm SPI_Buffer,32,1
1165 .comm SPI_TX_Buffer,2,1
1166 .comm SPITransferCompleted,1,1
1167 .comm SPI_ChkSum,1,1
1168 .comm SPI_RxDataValid,1,1
1169 /* File "spi.c": code 1401 = 0x0579 (1391), prologues 4, epilogues 6 */
DEFINED SYMBOLS
*ABS*:00000000 spi.c
C:\Temp/ccIGrx6F.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccIGrx6F.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccIGrx6F.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccIGrx6F.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccIGrx6F.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccIGrx6F.s:15 .bss:00000000 MagVec
C:\Temp/ccIGrx6F.s:21 .bss:00000006 POI_KameraNick
C:\Temp/ccIGrx6F.s:27 .bss:00000008 NC_To_FC_MaxAltitude
C:\Temp/ccIGrx6F.s:33 .bss:00000009 NC_To_FC_Flags
C:\Temp/ccIGrx6F.s:39 .bss:0000000a EarthMagneticInclinationTheoretic
C:\Temp/ccIGrx6F.s:45 .bss:0000000b EarthMagneticInclination
C:\Temp/ccIGrx6F.s:51 .bss:0000000c EarthMagneticField
C:\Temp/ccIGrx6F.s:57 .data:00000000 NC_GPS_ModeCharacter
C:\Temp/ccIGrx6F.s:64 .bss:0000000d NC_ErrorCode
C:\Temp/ccIGrx6F.s:70 .bss:0000000e SPI_CommandCounter
C:\Temp/ccIGrx6F.s:76 .data:00000001 SPI_CommandSequence
C:\Temp/ccIGrx6F.s:91 .data:0000000c NaviDataOkay
C:\Temp/ccIGrx6F.s:98 .bss:0000000f FromNC_Rotate_S
C:\Temp/ccIGrx6F.s:104 .data:0000000d FromNC_Rotate_C
C:\Temp/ccIGrx6F.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/ccIGrx6F.s:139 .bss:00000011 rxchksum.3
C:\Temp/ccIGrx6F.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/ccIGrx6F.s:140 .bss:00000012 motorindex.0
C:\Temp/ccIGrx6F.s:286 .data:0000000e oldcommand.1
C:\Temp/ccIGrx6F.s:291 .text:00000158 UpdateSPI_Buffer
*COM*:00000005 NC_Version
*COM*:00000008 GPSInfo
C:\Temp/ccIGrx6F.s:1092 .text:000009ee SPI_StartTransmitPacket
*COM*:00000001 SPI_ChkSum
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SendSPI
EE_Parameter
IntegralNick
__divmodsi4
IntegralRoll
ErsatzKompass
GIER_GRAD_FAKTOR
AdNeutralGier
AdWertGier
NaviCntAcc
NaviAccNick
__divmodhi4
NaviAccRoll
__tablejump2__
Parameter_UserParam1
Parameter_UserParam2
Parameter_UserParam3
Parameter_UserParam4
Parameter_UserParam5
Parameter_UserParam6
Parameter_UserParam7
Parameter_UserParam8
FC_StatusFlags
GetActiveParamSet
FC_StatusFlags2
Capacity
UBat
BattLowVoltageWarning
VarioCharacter
Motor
__udivmodqi4
JetiBeep
HoTT_Waring
JETI_CODE
ToNC_SpeakHoTT
PPM_in
Poti
WinkelOut
HoehenWert
SollHoehe
SenderOkay
DebugOut
PlatinenVersion
VersionInfo
Parameter_GlobalConfig
Parameter_ExtraConfig
Parameter_ServoNickControl
Parameter_ServoRollControl
CalculateCompassTimer
GPS_Nick
GPS_Roll
KompassValue
beeptime
DisableRcOffBeeping
KompassFusion
GPS_Aid_StickMultiplikator
CareFree
KompassSollWert
FromNC_AltitudeSpeed
FromNC_AltitudeSetpoint
SpeakHoTT
NaviData_WaypointIndex
NaviData_WaypointNumber
NaviData_TargetDistance
NaviData_TargetHoldTime
NC_Fills_HoTT_Telemety
/branches/v0.90e_Ernstl_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)Parameter_ServoNickComp * nick) / 512L;
// offset (Range from 0 to 255 * 3 = 765)
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue;
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed;
 
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo
{
nick = ServoNickOffset / 16 + nick;
}
else
{ // inverting movement of servo
nick = ServoNickOffset / 16 - nick;
}
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1);
else ServoNickValue = nick;
// limit servo value to its parameter range definition
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER))
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER;
}
else
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER))
{
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER;
}
if(PlatinenVersion < 20) CalculateServoSignals = 0; else CalculateServoSignals++;
}
else
{
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L;
roll = ((long)Parameter_ServoRollComp * roll) / 512L;
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed;
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV)
{ // inverting movement of servo
roll = ServoRollOffset / 16 + roll;
}
else
{ // inverting movement of servo
roll = ServoRollOffset / 16 - roll;
}
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1);
else ServoRollValue = roll;
// limit servo value to its parameter range definition
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER))
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER;
}
else
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER))
{
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER;
}
CalculateServoSignals = 0;
}
}
 
ISR(TIMER2_COMPA_vect)
{
// frame len 22.5 ms = 14063 * 1.6 us
// stop pulse: 0.3 ms = 188 * 1.6 us
// min servo pulse: 0.6 ms = 375 * 1.6 us
// max servo pulse: 2.4 ms = 1500 * 1.6 us
// resolution: 1500 - 375 = 1125 steps
 
#define IRS_RUNTIME 127
#define PPM_STOPPULSE 188
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh)
#define MINSERVOPULSE 375
#define MAXSERVOPULSE 1500
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE)
 
static uint8_t PulseOutput = 0;
static uint16_t ServoFrameTime = 0;
static uint8_t ServoIndex = 0;
 
 
if(PlatinenVersion < 20)
{
//---------------------------
// Nick servo state machine
//---------------------------
if(!PulseOutput) // pulse output complete
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
// accumulate time for correct update rate
ServoFrameTime = RemainingPulse;
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
RemainingPulse = PPM_FRAMELEN - ServoFrameTime;
CalculateServoSignals = 1;
}
// set pulse output active
PulseOutput = 1;
}
} // EOF Nick servo state machine
else
{
//-----------------------------------------------------
// PPM state machine, onboard demultiplexed by HEF4017
//-----------------------------------------------------
if(!PulseOutput) // pulse output complete
{
if(TCCR2A & (1<<COM2A0)) // we had a low pulse
{
TCCR2A &= ~(1<<COM2A0);// make a high pulse
if(ServoIndex == 0) // if we are at the sync gap
{
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time
ServoFrameTime = 0; // reset servo frame time
HEF4017Reset_ON; // enable HEF4017 reset
}
else // servo channels
if(ServoIndex > EE_Parameter.ServoNickRefresh)
{
RemainingPulse = 10; // end it here
}
else
{
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms
switch(ServoIndex) // map servo channels
{
case 1: // Nick Compensation Servo
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
break;
case 2: // Roll Compensation Servo
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position
break;
case 3:
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
case 4:
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
case 5:
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER;
break;
default: // other servo channels
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs
break;
}
// range servo pulse width
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit
// substract stop pulse width
RemainingPulse -= PPM_STOPPULSE;
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
}
}
else // we had a high pulse
{
TCCR2A |= (1<<COM2A0); // make a low pulse
// set pulsewidth to stop pulse width
RemainingPulse = PPM_STOPPULSE;
// accumulate time for correct sync gap
ServoFrameTime += RemainingPulse;
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset
else HEF4017Reset_ON;
ServoIndex++;
if(ServoIndex > EE_Parameter.ServoNickRefresh+1)
{
CalculateServoSignals = 1;
ServoIndex = 0; // reset to the sync gap
}
}
// set pulse output active
PulseOutput = 1;
}
} // EOF PPM state machine
 
// General pulse output generator
if(RemainingPulse > (255 + IRS_RUNTIME))
{
OCR2A = 255;
RemainingPulse -= 255;
}
else
{
if(RemainingPulse > 255) // this is the 2nd last part
{
if((RemainingPulse - 255) < IRS_RUNTIME)
{
OCR2A = 255 - IRS_RUNTIME;
RemainingPulse -= 255 - IRS_RUNTIME;
 
}
else // last part > ISR_RUNTIME
{
OCR2A = 255;
RemainingPulse -= 255;
}
}
else // this is the last part
{
OCR2A = RemainingPulse;
RemainingPulse = 0;
PulseOutput = 0; // trigger to stop pulse
}
} // EOF general pulse output generator
}
/branches/v0.90e_Ernstl_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.90e_Ernstl_4-Motoren+Sexpander/timer0.lst
0,0 → 1,1378
1 .file "timer0.c"
2 .arch atmega1284p
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .global ServoRollValue
11 .global ServoRollValue
12 .section .bss
15 ServoRollValue:
16 0000 0000 .skip 2,0
17 .global ServoNickValue
18 .global ServoNickValue
21 ServoNickValue:
22 0002 0000 .skip 2,0
23 .global NickServoValue
24 .data
27 NickServoValue:
28 0000 0020 .word 8192
29 .global BeepMuster
32 BeepMuster:
33 0002 FFFF .word -1
34 .global ServoRollOffset
37 ServoRollOffset:
38 0004 C01F .word 8128
39 .global ServoNickOffset
42 ServoNickOffset:
43 0006 C01F .word 8128
44 .global RemainingPulse
45 .global RemainingPulse
46 .section .bss
49 RemainingPulse:
50 0004 0000 .skip 2,0
51 .global CalculateServoSignals
52 .data
55 CalculateServoSignals:
56 0008 01 .byte 1
57 .global ServoActive
58 .global ServoActive
59 .section .bss
62 ServoActive:
63 0006 00 .skip 1,0
64 .global SendSPI
65 .global SendSPI
68 SendSPI:
69 0007 00 .skip 1,0
70 .global beeptime
71 .global beeptime
74 beeptime:
75 0008 0000 .skip 2,0
76 .global cntKompass
77 .global cntKompass
80 cntKompass:
81 000a 0000 .skip 2,0
82 .global UpdateMotor
83 .global UpdateMotor
86 UpdateMotor:
87 000c 00 .skip 1,0
88 .global CountMilliseconds
89 .global CountMilliseconds
92 CountMilliseconds:
93 000d 0000 .skip 2,0
94 .data
97 cnt_1ms.3:
98 0009 01 .byte 1
99 .lcomm cnt.4,1
100 .lcomm compass_active.5,1
101 .text
102 .global __vector_18
104 __vector_18:
105 /* prologue: frame size=0 */
106 0000 1F92 push __zero_reg__
107 0002 0F92 push __tmp_reg__
108 0004 0FB6 in __tmp_reg__,__SREG__
109 0006 0F92 push __tmp_reg__
110 0008 1124 clr __zero_reg__
111 000a 2F93 push r18
112 000c 3F93 push r19
113 000e 5F93 push r21
114 0010 6F93 push r22
115 0012 7F93 push r23
116 0014 8F93 push r24
117 0016 9F93 push r25
118 0018 AF93 push r26
119 001a BF93 push r27
120 001c EF93 push r30
121 001e FF93 push r31
122 /* prologue end (size=16) */
123 0020 20E0 ldi r18,lo8(0)
124 0022 8091 0000 lds r24,SendSPI
125 0026 8823 tst r24
126 0028 01F0 breq .L2
127 002a 8091 0000 lds r24,SendSPI
128 002e 8150 subi r24,lo8(-(-1))
129 0030 8093 0000 sts SendSPI,r24
130 .L2:
131 0034 8091 0000 lds r24,SpektrumTimer
132 0038 8823 tst r24
133 003a 01F0 breq .L3
134 003c 8150 subi r24,lo8(-(-1))
135 003e 8093 0000 sts SpektrumTimer,r24
136 .L3:
137 0042 8091 0000 lds r24,cnt.4
138 0046 8150 subi r24,lo8(-(-1))
139 0048 8093 0000 sts cnt.4,r24
140 004c 8F3F cpi r24,lo8(-1)
141 004e 01F0 breq .+2
142 0050 00C0 rjmp .L4
143 0052 89E0 ldi r24,lo8(9)
144 0054 8093 0000 sts cnt.4,r24
145 0058 8091 0000 lds r24,CountMilliseconds
146 005c 9091 0000 lds r25,(CountMilliseconds)+1
147 0060 0196 adiw r24,1
148 0062 9093 0000 sts (CountMilliseconds)+1,r25
149 0066 8093 0000 sts CountMilliseconds,r24
150 006a 8091 0000 lds r24,cnt_1ms.3
151 006e 8F5F subi r24,lo8(-(1))
152 0070 8170 andi r24,lo8(1)
153 0072 8093 0000 sts cnt_1ms.3,r24
154 0076 8823 tst r24
155 0078 01F4 brne .L5
156 007a 81E0 ldi r24,lo8(1)
157 007c 8093 0000 sts UpdateMotor,r24
158 .L5:
159 0080 3499 sbic 38-0x20,4
160 0082 00C0 rjmp .L6
161 0084 81E0 ldi r24,lo8(1)
162 0086 8093 0000 sts compass_active.5,r24
163 .L6:
164 008a 8091 0000 lds r24,beeptime
165 008e 9091 0000 lds r25,(beeptime)+1
166 0092 892B or r24,r25
167 0094 01F0 breq .L7
168 0096 8091 0000 lds r24,beeptime
169 009a 9091 0000 lds r25,(beeptime)+1
170 009e 0B97 sbiw r24,11
171 00a0 00F0 brlo .L8
172 00a2 8091 0000 lds r24,beeptime
173 00a6 9091 0000 lds r25,(beeptime)+1
174 00aa 0A97 sbiw r24,10
175 00ac 9093 0000 sts (beeptime)+1,r25
176 00b0 8093 0000 sts beeptime,r24
177 00b4 00C0 rjmp .L9
178 .L8:
179 00b6 1092 0000 sts (beeptime)+1,__zero_reg__
180 00ba 1092 0000 sts beeptime,__zero_reg__
181 .L9:
182 00be 8091 0000 lds r24,beeptime
183 00c2 9091 0000 lds r25,(beeptime)+1
184 00c6 2091 0000 lds r18,BeepMuster
185 00ca 3091 0000 lds r19,(BeepMuster)+1
186 00ce 8223 and r24,r18
187 00d0 9323 and r25,r19
188 00d2 892B or r24,r25
189 00d4 01F0 breq .L10
190 00d6 21E0 ldi r18,lo8(1)
191 00d8 00C0 rjmp .L12
192 .L10:
193 00da 20E0 ldi r18,lo8(0)
194 00dc 00C0 rjmp .L12
195 .L7:
196 00de 8FEF ldi r24,lo8(-1)
197 00e0 9FEF ldi r25,hi8(-1)
198 00e2 9093 0000 sts (BeepMuster)+1,r25
199 00e6 8093 0000 sts BeepMuster,r24
200 .L12:
201 00ea 8091 0000 lds r24,PlatinenVersion
202 00ee 2223 tst r18
203 00f0 01F0 breq .L13
204 00f2 8A30 cpi r24,lo8(10)
205 00f4 01F4 brne .L14
206 00f6 5A9A sbi 43-0x20,2
207 00f8 00C0 rjmp .L4
208 .L14:
209 00fa 479A sbi 40-0x20,7
210 00fc 00C0 rjmp .L4
211 .L13:
212 00fe 8A30 cpi r24,lo8(10)
213 0100 01F4 brne .L17
214 0102 5A98 cbi 43-0x20,2
215 0104 00C0 rjmp .L4
216 .L17:
217 0106 4798 cbi 40-0x20,7
218 .L4:
219 0108 8091 0000 lds r24,compass_active.5
220 010c 8823 tst r24
221 010e 01F4 brne .+2
222 0110 00C0 rjmp .L1
223 0112 2091 0000 lds r18,NaviDataOkay
224 0116 2223 tst r18
225 0118 01F0 breq .+2
226 011a 00C0 rjmp .L1
227 011c 8091 0000 lds r24,Parameter_GlobalConfig
228 0120 83FF sbrs r24,3
229 0122 00C0 rjmp .L1
230 0124 86B1 in r24,38-0x20
231 0126 9927 clr r25
232 0128 FC01 movw r30,r24
233 012a E071 andi r30,lo8(16)
234 012c F070 andi r31,hi8(16)
235 012e 84FF sbrs r24,4
236 0130 00C0 rjmp .L20
237 0132 8091 0000 lds r24,cntKompass
238 0136 9091 0000 lds r25,(cntKompass)+1
239 013a 0196 adiw r24,1
240 013c 9093 0000 sts (cntKompass)+1,r25
241 0140 8093 0000 sts cntKompass,r24
242 0144 8091 0000 lds r24,cntKompass
243 0148 9091 0000 lds r25,(cntKompass)+1
244 014c 895E subi r24,lo8(1001)
245 014e 9340 sbci r25,hi8(1001)
246 0150 00F0 brlo .L1
247 0152 2093 0000 sts compass_active.5,r18
248 0156 00C0 rjmp .L1
249 .L20:
250 0158 8091 0000 lds r24,cntKompass
251 015c 9091 0000 lds r25,(cntKompass)+1
252 0160 892B or r24,r25
253 0162 01F0 breq .L23
254 0164 8091 0000 lds r24,cntKompass
255 0168 9091 0000 lds r25,(cntKompass)+1
256 016c 8A56 subi r24,lo8(362)
257 016e 9140 sbci r25,hi8(362)
258 0170 00F4 brsh .L23
259 0172 8091 0000 lds r24,cntKompass
260 0176 9091 0000 lds r25,(cntKompass)+1
261 017a 69E2 ldi r22,lo8(41)
262 017c 70E0 ldi r23,hi8(41)
263 017e 0E94 0000 call __udivmodhi4
264 0182 8091 0000 lds r24,cntKompass
265 0186 9091 0000 lds r25,(cntKompass)+1
266 018a 860F add r24,r22
267 018c 971F adc r25,r23
268 018e 9093 0000 sts (cntKompass)+1,r25
269 0192 8093 0000 sts cntKompass,r24
270 0196 8091 0000 lds r24,cntKompass
271 019a 9091 0000 lds r25,(cntKompass)+1
272 019e 0B97 sbiw r24,11
273 01a0 00F0 brlo .L24
274 01a2 8091 0000 lds r24,cntKompass
275 01a6 9091 0000 lds r25,(cntKompass)+1
276 01aa 0A97 sbiw r24,10
277 01ac 9093 0000 sts (KompassValue)+1,r25
278 01b0 8093 0000 sts KompassValue,r24
279 01b4 00C0 rjmp .L23
280 .L24:
281 01b6 F093 0000 sts (KompassValue)+1,r31
282 01ba E093 0000 sts KompassValue,r30
283 .L23:
284 01be 1092 0000 sts (cntKompass)+1,__zero_reg__
285 01c2 1092 0000 sts cntKompass,__zero_reg__
286 .L1:
287 /* epilogue: frame size=0 */
288 01c6 FF91 pop r31
289 01c8 EF91 pop r30
290 01ca BF91 pop r27
291 01cc AF91 pop r26
292 01ce 9F91 pop r25
293 01d0 8F91 pop r24
294 01d2 7F91 pop r23
295 01d4 6F91 pop r22
296 01d6 5F91 pop r21
297 01d8 3F91 pop r19
298 01da 2F91 pop r18
299 01dc 0F90 pop __tmp_reg__
300 01de 0FBE out __SREG__,__tmp_reg__
301 01e0 0F90 pop __tmp_reg__
302 01e2 1F90 pop __zero_reg__
303 01e4 1895 reti
304 /* epilogue end (size=16) */
305 /* function __vector_18 size 247 (215) */
307 .global SetDelay
309 SetDelay:
310 /* prologue: frame size=0 */
311 /* prologue end (size=0) */
312 01e6 2091 0000 lds r18,CountMilliseconds
313 01ea 3091 0000 lds r19,(CountMilliseconds)+1
314 01ee 280F add r18,r24
315 01f0 391F adc r19,r25
316 01f2 C901 movw r24,r18
317 01f4 0196 adiw r24,1
318 /* epilogue: frame size=0 */
319 01f6 0895 ret
320 /* epilogue end (size=1) */
321 /* function SetDelay size 9 (8) */
323 .global CheckDelay
325 CheckDelay:
326 /* prologue: frame size=0 */
327 /* prologue end (size=0) */
328 01f8 2091 0000 lds r18,CountMilliseconds
329 01fc 3091 0000 lds r19,(CountMilliseconds)+1
330 0200 821B sub r24,r18
331 0202 930B sbc r25,r19
332 0204 892F mov r24,r25
333 0206 9927 clr r25
334 0208 8695 lsr r24
335 020a 8074 andi r24,lo8(64)
336 020c 9070 andi r25,hi8(64)
337 /* epilogue: frame size=0 */
338 020e 0895 ret
339 /* epilogue end (size=1) */
340 /* function CheckDelay size 12 (11) */
342 .global Delay_ms
344 Delay_ms:
345 /* prologue: frame size=0 */
346 0210 CF93 push r28
347 0212 DF93 push r29
348 /* prologue end (size=2) */
349 0214 0E94 0000 call SetDelay
350 0218 EC01 movw r28,r24
351 .L29:
352 021a CE01 movw r24,r28
353 021c 0E94 0000 call CheckDelay
354 0220 8823 tst r24
355 0222 01F0 breq .L29
356 /* epilogue: frame size=0 */
357 0224 DF91 pop r29
358 0226 CF91 pop r28
359 0228 0895 ret
360 /* epilogue end (size=3) */
361 /* function Delay_ms size 13 (8) */
363 .global Delay_ms_Mess
365 Delay_ms_Mess:
366 /* prologue: frame size=0 */
367 022a CF93 push r28
368 022c DF93 push r29
369 /* prologue end (size=2) */
370 022e 0E94 0000 call SetDelay
371 0232 EC01 movw r28,r24
372 0234 00C0 rjmp .L40
373 .L36:
374 0236 8091 0000 lds r24,AdReady
375 023a 8823 tst r24
376 023c 01F0 breq .L40
377 023e 9093 0000 sts AdReady,r25
378 0242 8FEC ldi r24,lo8(-49)
379 0244 8093 7A00 sts 122,r24
380 .L40:
381 0248 CE01 movw r24,r28
382 024a 0E94 0000 call CheckDelay
383 024e 982F mov r25,r24
384 0250 8823 tst r24
385 0252 01F0 breq .L36
386 /* epilogue: frame size=0 */
387 0254 DF91 pop r29
388 0256 CF91 pop r28
389 0258 0895 ret
390 /* epilogue end (size=3) */
391 /* function Delay_ms_Mess size 24 (19) */
393 .global TIMER2_Init
395 TIMER2_Init:
396 /* prologue: frame size=0 */
397 /* prologue end (size=0) */
398 025a 9FB7 in r25,95-0x20
399 /* #APP */
400 025c F894 cli
401 /* #NOAPP */
402 025e 5F98 cbi 43-0x20,7
403 0260 3E9A sbi 39-0x20,6
404 0262 469A sbi 40-0x20,6
405 0264 8091 B000 lds r24,176
406 0268 8F70 andi r24,lo8(15)
407 026a 8093 B000 sts 176,r24
408 026e 8091 B000 lds r24,176
409 0272 8360 ori r24,lo8(3)
410 0274 8093 B000 sts 176,r24
411 0278 8091 B100 lds r24,177
412 027c 8B73 andi r24,lo8(59)
413 027e 8093 B100 sts 177,r24
414 0282 8091 B100 lds r24,177
415 0286 8B60 ori r24,lo8(11)
416 0288 8093 B100 sts 177,r24
417 028c 1092 B200 sts 178,__zero_reg__
418 0290 8FEF ldi r24,lo8(-1)
419 0292 8093 B300 sts 179,r24
420 0296 8091 B000 lds r24,176
421 029a 8068 ori r24,lo8(-128)
422 029c 8093 B000 sts 176,r24
423 02a0 8091 7000 lds r24,112
424 02a4 8A7F andi r24,lo8(-6)
425 02a6 8093 7000 sts 112,r24
426 02aa 8091 7000 lds r24,112
427 02ae 8260 ori r24,lo8(2)
428 02b0 8093 7000 sts 112,r24
429 02b4 9FBF out 95-0x20,r25
430 /* epilogue: frame size=0 */
431 02b6 0895 ret
432 /* epilogue end (size=1) */
433 /* function TIMER2_Init size 48 (47) */
435 .global Timer_Init
437 Timer_Init:
438 /* prologue: frame size=0 */
439 /* prologue end (size=0) */
440 02b8 8AE0 ldi r24,lo8(10)
441 02ba 90E0 ldi r25,hi8(10)
442 02bc 0E94 0000 call SetDelay
443 02c0 9093 0000 sts (tim_main)+1,r25
444 02c4 8093 0000 sts tim_main,r24
445 02c8 82E0 ldi r24,lo8(2)
446 02ca 85BD out 69-0x20,r24
447 02cc 83EA ldi r24,lo8(-93)
448 02ce 84BD out 68-0x20,r24
449 02d0 17BC out 71-0x20,__zero_reg__
450 02d2 84EB ldi r24,lo8(-76)
451 02d4 88BD out 72-0x20,r24
452 02d6 86E0 ldi r24,lo8(6)
453 02d8 86BD out 70-0x20,r24
454 02da 8091 6E00 lds r24,110
455 02de 8160 ori r24,lo8(1)
456 02e0 8093 6E00 sts 110,r24
457 /* epilogue: frame size=0 */
458 02e4 0895 ret
459 /* epilogue end (size=1) */
460 /* function Timer_Init size 23 (22) */
462 .global CalcNickServoValue
464 CalcNickServoValue:
465 /* prologue: frame size=0 */
466 /* prologue end (size=0) */
467 02e6 8091 0000 lds r24,EE_Parameter+109
468 02ea 2091 0000 lds r18,Parameter_ServoNickControl
469 02ee 82FF sbrs r24,2
470 02f0 00C0 rjmp .L44
471 02f2 9091 0000 lds r25,EE_Parameter+48
472 02f6 8CE3 ldi r24,lo8(60)
473 02f8 989F mul r25,r24
474 02fa B001 movw r22,r0
475 02fc 1124 clr r1
476 02fe 9091 0000 lds r25,EE_Parameter+47
477 0302 80E5 ldi r24,lo8(80)
478 0304 989F mul r25,r24
479 0306 A001 movw r20,r0
480 0308 1124 clr r1
481 030a 922F mov r25,r18
482 030c 9058 subi r25,lo8(-(-128))
483 030e 97FD sbrc r25,7
484 0310 9D5F subi r25,lo8(-(3))
485 .L45:
486 0312 9595 asr r25
487 0314 9595 asr r25
488 0316 86E0 ldi r24,lo8(6)
489 0318 9802 muls r25,r24
490 031a C001 movw r24,r0
491 031c 1124 clr r1
492 031e 2091 0000 lds r18,NickServoValue
493 0322 3091 0000 lds r19,(NickServoValue)+1
494 0326 281B sub r18,r24
495 0328 390B sbc r19,r25
496 032a 3093 0000 sts (NickServoValue)+1,r19
497 032e 2093 0000 sts NickServoValue,r18
498 0332 4217 cp r20,r18
499 0334 5307 cpc r21,r19
500 0336 04F0 brlt .L46
501 0338 5093 0000 sts (NickServoValue)+1,r21
502 033c 4093 0000 sts NickServoValue,r20
503 0340 0895 ret
504 .L46:
505 0342 2617 cp r18,r22
506 0344 3707 cpc r19,r23
507 0346 04F0 brlt .L43
508 0348 7093 0000 sts (NickServoValue)+1,r23
509 034c 6093 0000 sts NickServoValue,r22
510 0350 0895 ret
511 .L44:
512 0352 822F mov r24,r18
513 0354 9927 clr r25
514 0356 36E0 ldi r19,6
515 0358 880F 1: lsl r24
516 035a 991F rol r25
517 035c 3A95 dec r19
518 035e 01F4 brne 1b
519 0360 9093 0000 sts (NickServoValue)+1,r25
520 0364 8093 0000 sts NickServoValue,r24
521 .L43:
522 0368 0895 ret
523 /* epilogue: frame size=0 */
524 /* epilogue: noreturn */
525 /* epilogue end (size=0) */
526 /* function CalcNickServoValue size 67 (67) */
528 .global CalculateServo
530 CalculateServo:
531 /* prologue: frame size=0 */
532 036a A0E0 ldi r26,lo8(0)
533 036c B0E0 ldi r27,hi8(0)
534 036e E0E0 ldi r30,pm_lo8(1f)
535 0370 F0E0 ldi r31,pm_hi8(1f)
536 0372 0C94 0000 jmp __prologue_saves__+22
537 1:
538 /* prologue end (size=6) */
539 0376 8091 0000 lds r24,EE_Parameter+55
540 037a E82F mov r30,r24
541 037c FF27 clr r31
542 037e E050 subi r30,lo8(-(sintab))
543 0380 F040 sbci r31,hi8(-(sintab))
544 0382 9681 ldd r25,Z+6
545 0384 D080 ld r13,Z
546 0386 8091 0000 lds r24,CalculateServoSignals
547 038a A92F mov r26,r25
548 038c BB27 clr r27
549 038e A7FD sbrc r26,7
550 0390 B095 com r27
551 0392 CB2F mov r28,r27
552 0394 DB2F mov r29,r27
553 0396 8130 cpi r24,lo8(1)
554 0398 01F0 breq .+2
555 039a 00C0 rjmp .L51
556 039c 2091 0000 lds r18,IntegralNick
557 03a0 3091 0000 lds r19,(IntegralNick)+1
558 03a4 4091 0000 lds r20,(IntegralNick)+2
559 03a8 5091 0000 lds r21,(IntegralNick)+3
560 03ac BD01 movw r22,r26
561 03ae CE01 movw r24,r28
562 03b0 0E94 0000 call __mulsi3
563 03b4 97FF sbrs r25,7
564 03b6 00C0 rjmp .L52
565 03b8 6158 subi r22,lo8(-(127))
566 03ba 7F4F sbci r23,hi8(-(127))
567 03bc 8F4F sbci r24,hlo8(-(127))
568 03be 9F4F sbci r25,hhi8(-(127))
569 .L52:
570 03c0 7B01 movw r14,r22
571 03c2 8C01 movw r16,r24
572 03c4 C7E0 ldi r28,7
573 03c6 1595 1: asr r17
574 03c8 0795 ror r16
575 03ca F794 ror r15
576 03cc E794 ror r14
577 03ce CA95 dec r28
578 03d0 01F4 brne 1b
579 03d2 8D2D mov r24,r13
580 03d4 9927 clr r25
581 03d6 87FD sbrc r24,7
582 03d8 9095 com r25
583 03da A92F mov r26,r25
584 03dc B92F mov r27,r25
585 03de 2091 0000 lds r18,IntegralRoll
586 03e2 3091 0000 lds r19,(IntegralRoll)+1
587 03e6 4091 0000 lds r20,(IntegralRoll)+2
588 03ea 5091 0000 lds r21,(IntegralRoll)+3
589 03ee BC01 movw r22,r24
590 03f0 CD01 movw r24,r26
591 03f2 0E94 0000 call __mulsi3
592 03f6 97FF sbrs r25,7
593 03f8 00C0 rjmp .L53
594 03fa 6158 subi r22,lo8(-(127))
595 03fc 7F4F sbci r23,hi8(-(127))
596 03fe 8F4F sbci r24,hlo8(-(127))
597 0400 9F4F sbci r25,hhi8(-(127))
598 .L53:
599 0402 B7E0 ldi r27,7
600 0404 9595 1: asr r25
601 0406 8795 ror r24
602 0408 7795 ror r23
603 040a 6795 ror r22
604 040c BA95 dec r27
605 040e 01F4 brne 1b
606 0410 F801 movw r30,r16
607 0412 E701 movw r28,r14
608 0414 C61B sub r28,r22
609 0416 D70B sbc r29,r23
610 0418 E80B sbc r30,r24
611 041a F90B sbc r31,r25
612 041c 2091 0000 lds r18,POI_KameraNick
613 0420 3091 0000 lds r19,(POI_KameraNick)+1
614 0424 C901 movw r24,r18
615 0426 A3E0 ldi r26,3
616 0428 880F 1: lsl r24
617 042a 991F rol r25
618 042c AA95 dec r26
619 042e 01F4 brne 1b
620 0430 821B sub r24,r18
621 0432 930B sbc r25,r19
622 0434 AA27 clr r26
623 0436 97FD sbrc r25,7
624 0438 A095 com r26
625 043a BA2F mov r27,r26
626 043c C81B sub r28,r24
627 043e D90B sbc r29,r25
628 0440 EA0B sbc r30,r26
629 0442 FB0B sbc r31,r27
630 0444 8091 0000 lds r24,Parameter_ServoNickComp
631 0448 9927 clr r25
632 044a AA27 clr r26
633 044c BB27 clr r27
634 044e BC01 movw r22,r24
635 0450 CD01 movw r24,r26
636 0452 9E01 movw r18,r28
637 0454 AF01 movw r20,r30
638 0456 0E94 0000 call __mulsi3
639 045a 97FF sbrs r25,7
640 045c 00C0 rjmp .L54
641 045e 6150 subi r22,lo8(-(511))
642 0460 7E4F sbci r23,hi8(-(511))
643 0462 8F4F sbci r24,hlo8(-(511))
644 0464 9F4F sbci r25,hhi8(-(511))
645 .L54:
646 0466 FC01 movw r30,r24
647 0468 EB01 movw r28,r22
648 046a 79E0 ldi r23,9
649 046c F595 1: asr r31
650 046e E795 ror r30
651 0470 D795 ror r29
652 0472 C795 ror r28
653 0474 7A95 dec r23
654 0476 01F4 brne 1b
655 0478 1091 0000 lds r17,EE_Parameter+109
656 047c 6091 0000 lds r22,NickServoValue
657 0480 7091 0000 lds r23,(NickServoValue)+1
658 0484 12FF sbrs r17,2
659 0486 00C0 rjmp .L55
660 0488 7093 0000 sts (ServoNickOffset)+1,r23
661 048c 6093 0000 sts ServoNickOffset,r22
662 0490 00C0 rjmp .L56
663 .L55:
664 0492 4091 0000 lds r20,ServoNickOffset
665 0496 5091 0000 lds r21,(ServoNickOffset)+1
666 049a 8091 0000 lds r24,EE_Parameter+54
667 049e 282F mov r18,r24
668 04a0 3327 clr r19
669 04a2 CB01 movw r24,r22
670 04a4 841B sub r24,r20
671 04a6 950B sbc r25,r21
672 04a8 B901 movw r22,r18
673 04aa 0E94 0000 call __divmodhi4
674 04ae 8091 0000 lds r24,ServoNickOffset
675 04b2 9091 0000 lds r25,(ServoNickOffset)+1
676 04b6 860F add r24,r22
677 04b8 971F adc r25,r23
678 04ba 9093 0000 sts (ServoNickOffset)+1,r25
679 04be 8093 0000 sts ServoNickOffset,r24
680 .L56:
681 04c2 10FF sbrs r17,0
682 04c4 00C0 rjmp .L57
683 04c6 8091 0000 lds r24,ServoNickOffset
684 04ca 9091 0000 lds r25,(ServoNickOffset)+1
685 04ce 97FD sbrc r25,7
686 04d0 0F96 adiw r24,15
687 .L58:
688 04d2 64E0 ldi r22,4
689 04d4 9595 1: asr r25
690 04d6 8795 ror r24
691 04d8 6A95 dec r22
692 04da 01F4 brne 1b
693 04dc AA27 clr r26
694 04de 97FD sbrc r25,7
695 04e0 A095 com r26
696 04e2 BA2F mov r27,r26
697 04e4 C80F add r28,r24
698 04e6 D91F adc r29,r25
699 04e8 EA1F adc r30,r26
700 04ea FB1F adc r31,r27
701 04ec 00C0 rjmp .L59
702 .L57:
703 04ee 8091 0000 lds r24,ServoNickOffset
704 04f2 9091 0000 lds r25,(ServoNickOffset)+1
705 04f6 97FD sbrc r25,7
706 04f8 0F96 adiw r24,15
707 .L60:
708 04fa 54E0 ldi r21,4
709 04fc 9595 1: asr r25
710 04fe 8795 ror r24
711 0500 5A95 dec r21
712 0502 01F4 brne 1b
713 0504 AA27 clr r26
714 0506 97FD sbrc r25,7
715 0508 A095 com r26
716 050a BA2F mov r27,r26
717 050c 8C1B sub r24,r28
718 050e 9D0B sbc r25,r29
719 0510 AE0B sbc r26,r30
720 0512 BF0B sbc r27,r31
721 0514 FD01 movw r30,r26
722 0516 EC01 movw r28,r24
723 .L59:
724 0518 2091 0000 lds r18,EE_Parameter+106
725 051c 2223 tst r18
726 051e 01F0 breq .L61
727 0520 3327 clr r19
728 0522 8091 0000 lds r24,ServoNickValue
729 0526 9091 0000 lds r25,(ServoNickValue)+1
730 052a 829F mul r24,r18
731 052c A001 movw r20,r0
732 052e 839F mul r24,r19
733 0530 500D add r21,r0
734 0532 929F mul r25,r18
735 0534 500D add r21,r0
736 0536 1124 clr r1
737 0538 CA01 movw r24,r20
738 053a AA27 clr r26
739 053c 97FD sbrc r25,7
740 053e A095 com r26
741 0540 BA2F mov r27,r26
742 0542 8C0F add r24,r28
743 0544 9D1F adc r25,r29
744 0546 AE1F adc r26,r30
745 0548 BF1F adc r27,r31
746 054a 2F5F subi r18,lo8(-(1))
747 054c 3F4F sbci r19,hi8(-(1))
748 054e 4427 clr r20
749 0550 37FD sbrc r19,7
750 0552 4095 com r20
751 0554 542F mov r21,r20
752 0556 BC01 movw r22,r24
753 0558 CD01 movw r24,r26
754 055a 0E94 0000 call __divmodsi4
755 055e 3093 0000 sts (ServoNickValue)+1,r19
756 0562 2093 0000 sts ServoNickValue,r18
757 0566 00C0 rjmp .L62
758 .L61:
759 0568 D093 0000 sts (ServoNickValue)+1,r29
760 056c C093 0000 sts ServoNickValue,r28
761 .L62:
762 0570 8091 0000 lds r24,EE_Parameter+47
763 0574 282F mov r18,r24
764 0576 3327 clr r19
765 0578 220F lsl r18
766 057a 331F rol r19
767 057c 220F lsl r18
768 057e 331F rol r19
769 0580 8091 0000 lds r24,ServoNickValue
770 0584 9091 0000 lds r25,(ServoNickValue)+1
771 0588 8217 cp r24,r18
772 058a 9307 cpc r25,r19
773 058c 04F0 brlt .L81
774 058e 8091 0000 lds r24,EE_Parameter+48
775 0592 282F mov r18,r24
776 0594 3327 clr r19
777 0596 220F lsl r18
778 0598 331F rol r19
779 059a 220F lsl r18
780 059c 331F rol r19
781 059e 8091 0000 lds r24,ServoNickValue
782 05a2 9091 0000 lds r25,(ServoNickValue)+1
783 05a6 2817 cp r18,r24
784 05a8 3907 cpc r19,r25
785 05aa 04F4 brge .L64
786 .L81:
787 05ac 3093 0000 sts (ServoNickValue)+1,r19
788 05b0 2093 0000 sts ServoNickValue,r18
789 .L64:
790 05b4 8091 0000 lds r24,PlatinenVersion
791 05b8 8431 cpi r24,lo8(20)
792 05ba 00F4 brsh .+2
793 05bc 00C0 rjmp .L79
794 05be 8091 0000 lds r24,CalculateServoSignals
795 05c2 8F5F subi r24,lo8(-(1))
796 05c4 8093 0000 sts CalculateServoSignals,r24
797 05c8 00C0 rjmp .L50
798 .L51:
799 05ca 2091 0000 lds r18,IntegralRoll
800 05ce 3091 0000 lds r19,(IntegralRoll)+1
801 05d2 4091 0000 lds r20,(IntegralRoll)+2
802 05d6 5091 0000 lds r21,(IntegralRoll)+3
803 05da BD01 movw r22,r26
804 05dc CE01 movw r24,r28
805 05de 0E94 0000 call __mulsi3
806 05e2 97FF sbrs r25,7
807 05e4 00C0 rjmp .L69
808 05e6 6158 subi r22,lo8(-(127))
809 05e8 7F4F sbci r23,hi8(-(127))
810 05ea 8F4F sbci r24,hlo8(-(127))
811 05ec 9F4F sbci r25,hhi8(-(127))
812 .L69:
813 05ee 7B01 movw r14,r22
814 05f0 8C01 movw r16,r24
815 05f2 87E0 ldi r24,7
816 05f4 1595 1: asr r17
817 05f6 0795 ror r16
818 05f8 F794 ror r15
819 05fa E794 ror r14
820 05fc 8A95 dec r24
821 05fe 01F4 brne 1b
822 0600 8D2D mov r24,r13
823 0602 9927 clr r25
824 0604 87FD sbrc r24,7
825 0606 9095 com r25
826 0608 A92F mov r26,r25
827 060a B92F mov r27,r25
828 060c 2091 0000 lds r18,IntegralNick
829 0610 3091 0000 lds r19,(IntegralNick)+1
830 0614 4091 0000 lds r20,(IntegralNick)+2
831 0618 5091 0000 lds r21,(IntegralNick)+3
832 061c BC01 movw r22,r24
833 061e CD01 movw r24,r26
834 0620 0E94 0000 call __mulsi3
835 0624 9B01 movw r18,r22
836 0626 AC01 movw r20,r24
837 0628 97FF sbrs r25,7
838 062a 00C0 rjmp .L70
839 062c 2158 subi r18,lo8(-(127))
840 062e 3F4F sbci r19,hi8(-(127))
841 0630 4F4F sbci r20,hlo8(-(127))
842 0632 5F4F sbci r21,hhi8(-(127))
843 .L70:
844 0634 C7E0 ldi r28,7
845 0636 5595 1: asr r21
846 0638 4795 ror r20
847 063a 3795 ror r19
848 063c 2795 ror r18
849 063e CA95 dec r28
850 0640 01F4 brne 1b
851 0642 2E0D add r18,r14
852 0644 3F1D adc r19,r15
853 0646 401F adc r20,r16
854 0648 511F adc r21,r17
855 064a 8091 0000 lds r24,Parameter_ServoRollComp
856 064e 9927 clr r25
857 0650 AA27 clr r26
858 0652 BB27 clr r27
859 0654 BC01 movw r22,r24
860 0656 CD01 movw r24,r26
861 0658 0E94 0000 call __mulsi3
862 065c 97FF sbrs r25,7
863 065e 00C0 rjmp .L71
864 0660 6150 subi r22,lo8(-(511))
865 0662 7E4F sbci r23,hi8(-(511))
866 0664 8F4F sbci r24,hlo8(-(511))
867 0666 9F4F sbci r25,hhi8(-(511))
868 .L71:
869 0668 FC01 movw r30,r24
870 066a EB01 movw r28,r22
871 066c B9E0 ldi r27,9
872 066e F595 1: asr r31
873 0670 E795 ror r30
874 0672 D795 ror r29
875 0674 C795 ror r28
876 0676 BA95 dec r27
877 0678 01F4 brne 1b
878 067a 8091 0000 lds r24,Parameter_ServoRollControl
879 067e 9927 clr r25
880 0680 A6E0 ldi r26,6
881 0682 880F 1: lsl r24
882 0684 991F rol r25
883 0686 AA95 dec r26
884 0688 01F4 brne 1b
885 068a 4091 0000 lds r20,ServoRollOffset
886 068e 5091 0000 lds r21,(ServoRollOffset)+1
887 0692 2091 0000 lds r18,EE_Parameter+54
888 0696 3327 clr r19
889 0698 841B sub r24,r20
890 069a 950B sbc r25,r21
891 069c B901 movw r22,r18
892 069e 0E94 0000 call __divmodhi4
893 06a2 8091 0000 lds r24,ServoRollOffset
894 06a6 9091 0000 lds r25,(ServoRollOffset)+1
895 06aa 860F add r24,r22
896 06ac 971F adc r25,r23
897 06ae 9093 0000 sts (ServoRollOffset)+1,r25
898 06b2 8093 0000 sts ServoRollOffset,r24
899 06b6 8091 0000 lds r24,EE_Parameter+109
900 06ba 81FF sbrs r24,1
901 06bc 00C0 rjmp .L72
902 06be 8091 0000 lds r24,ServoRollOffset
903 06c2 9091 0000 lds r25,(ServoRollOffset)+1
904 06c6 97FD sbrc r25,7
905 06c8 0F96 adiw r24,15
906 .L73:
907 06ca 74E0 ldi r23,4
908 06cc 9595 1: asr r25
909 06ce 8795 ror r24
910 06d0 7A95 dec r23
911 06d2 01F4 brne 1b
912 06d4 AA27 clr r26
913 06d6 97FD sbrc r25,7
914 06d8 A095 com r26
915 06da BA2F mov r27,r26
916 06dc C80F add r28,r24
917 06de D91F adc r29,r25
918 06e0 EA1F adc r30,r26
919 06e2 FB1F adc r31,r27
920 06e4 00C0 rjmp .L74
921 .L72:
922 06e6 8091 0000 lds r24,ServoRollOffset
923 06ea 9091 0000 lds r25,(ServoRollOffset)+1
924 06ee 97FD sbrc r25,7
925 06f0 0F96 adiw r24,15
926 .L75:
927 06f2 64E0 ldi r22,4
928 06f4 9595 1: asr r25
929 06f6 8795 ror r24
930 06f8 6A95 dec r22
931 06fa 01F4 brne 1b
932 06fc AA27 clr r26
933 06fe 97FD sbrc r25,7
934 0700 A095 com r26
935 0702 BA2F mov r27,r26
936 0704 8C1B sub r24,r28
937 0706 9D0B sbc r25,r29
938 0708 AE0B sbc r26,r30
939 070a BF0B sbc r27,r31
940 070c FD01 movw r30,r26
941 070e EC01 movw r28,r24
942 .L74:
943 0710 2091 0000 lds r18,EE_Parameter+107
944 0714 2223 tst r18
945 0716 01F0 breq .L76
946 0718 3327 clr r19
947 071a 8091 0000 lds r24,ServoRollValue
948 071e 9091 0000 lds r25,(ServoRollValue)+1
949 0722 829F mul r24,r18
950 0724 A001 movw r20,r0
951 0726 839F mul r24,r19
952 0728 500D add r21,r0
953 072a 929F mul r25,r18
954 072c 500D add r21,r0
955 072e 1124 clr r1
956 0730 CA01 movw r24,r20
957 0732 AA27 clr r26
958 0734 97FD sbrc r25,7
959 0736 A095 com r26
960 0738 BA2F mov r27,r26
961 073a 8C0F add r24,r28
962 073c 9D1F adc r25,r29
963 073e AE1F adc r26,r30
964 0740 BF1F adc r27,r31
965 0742 2F5F subi r18,lo8(-(1))
966 0744 3F4F sbci r19,hi8(-(1))
967 0746 4427 clr r20
968 0748 37FD sbrc r19,7
969 074a 4095 com r20
970 074c 542F mov r21,r20
971 074e BC01 movw r22,r24
972 0750 CD01 movw r24,r26
973 0752 0E94 0000 call __divmodsi4
974 0756 3093 0000 sts (ServoRollValue)+1,r19
975 075a 2093 0000 sts ServoRollValue,r18
976 075e 00C0 rjmp .L77
977 .L76:
978 0760 D093 0000 sts (ServoRollValue)+1,r29
979 0764 C093 0000 sts ServoRollValue,r28
980 .L77:
981 0768 8091 0000 lds r24,EE_Parameter+51
982 076c 282F mov r18,r24
983 076e 3327 clr r19
984 0770 220F lsl r18
985 0772 331F rol r19
986 0774 220F lsl r18
987 0776 331F rol r19
988 0778 8091 0000 lds r24,ServoRollValue
989 077c 9091 0000 lds r25,(ServoRollValue)+1
990 0780 8217 cp r24,r18
991 0782 9307 cpc r25,r19
992 0784 04F0 brlt .L82
993 0786 8091 0000 lds r24,EE_Parameter+52
994 078a 282F mov r18,r24
995 078c 3327 clr r19
996 078e 220F lsl r18
997 0790 331F rol r19
998 0792 220F lsl r18
999 0794 331F rol r19
1000 0796 8091 0000 lds r24,ServoRollValue
1001 079a 9091 0000 lds r25,(ServoRollValue)+1
1002 079e 2817 cp r18,r24
1003 07a0 3907 cpc r19,r25
1004 07a2 04F4 brge .L79
1005 .L82:
1006 07a4 3093 0000 sts (ServoRollValue)+1,r19
1007 07a8 2093 0000 sts ServoRollValue,r18
1008 .L79:
1009 07ac 1092 0000 sts CalculateServoSignals,__zero_reg__
1010 .L50:
1011 /* epilogue: frame size=0 */
1012 07b0 E7E0 ldi r30,7
1013 07b2 CDB7 in r28,__SP_L__
1014 07b4 DEB7 in r29,__SP_H__
1015 07b6 0C94 0000 jmp __epilogue_restores__+22
1016 /* epilogue end (size=5) */
1017 /* function CalculateServo size 556 (545) */
1019 .lcomm PulseOutput.0,1
1020 .lcomm ServoFrameTime.1,2
1021 .lcomm ServoIndex.2,1
1022 .global __vector_9
1024 __vector_9:
1025 /* prologue: frame size=0 */
1026 07ba 1F92 push __zero_reg__
1027 07bc 0F92 push __tmp_reg__
1028 07be 0FB6 in __tmp_reg__,__SREG__
1029 07c0 0F92 push __tmp_reg__
1030 07c2 1124 clr __zero_reg__
1031 07c4 2F93 push r18
1032 07c6 3F93 push r19
1033 07c8 4F93 push r20
1034 07ca 5F93 push r21
1035 07cc 8F93 push r24
1036 07ce 9F93 push r25
1037 07d0 EF93 push r30
1038 07d2 FF93 push r31
1039 /* prologue end (size=13) */
1040 07d4 8091 0000 lds r24,PlatinenVersion
1041 07d8 9091 0000 lds r25,PulseOutput.0
1042 07dc 8431 cpi r24,lo8(20)
1043 07de 00F0 brlo .+2
1044 07e0 00C0 rjmp .L84
1045 07e2 9923 tst r25
1046 07e4 01F0 breq .+2
1047 07e6 00C0 rjmp .L91
1048 07e8 8091 B000 lds r24,176
1049 07ec 86FF sbrs r24,6
1050 07ee 00C0 rjmp .L86
1051 07f0 8091 B000 lds r24,176
1052 07f4 8F7B andi r24,lo8(-65)
1053 07f6 8093 B000 sts 176,r24
1054 07fa 8091 0000 lds r24,ServoNickValue
1055 07fe 9091 0000 lds r25,(ServoNickValue)+1
1056 0802 8755 subi r24,lo8(-(425))
1057 0804 9E4F sbci r25,hi8(-(425))
1058 0806 9093 0000 sts (RemainingPulse)+1,r25
1059 080a 8093 0000 sts RemainingPulse,r24
1060 080e 25E0 ldi r18,hi8(1501)
1061 0810 8D3D cpi r24,lo8(1501)
1062 0812 9207 cpc r25,r18
1063 0814 00F0 brlo .L87
1064 0816 8CED ldi r24,lo8(1500)
1065 0818 95E0 ldi r25,hi8(1500)
1066 081a 00C0 rjmp .L121
1067 .L87:
1068 081c 8757 subi r24,lo8(375)
1069 081e 9140 sbci r25,hi8(375)
1070 0820 00F4 brsh .L88
1071 0822 87E7 ldi r24,lo8(375)
1072 0824 91E0 ldi r25,hi8(375)
1073 .L121:
1074 0826 9093 0000 sts (RemainingPulse)+1,r25
1075 082a 8093 0000 sts RemainingPulse,r24
1076 .L88:
1077 082e 8091 0000 lds r24,RemainingPulse
1078 0832 9091 0000 lds r25,(RemainingPulse)+1
1079 0836 00C0 rjmp .L126
1080 .L86:
1081 0838 8091 B000 lds r24,176
1082 083c 8064 ori r24,lo8(64)
1083 083e 8093 B000 sts 176,r24
1084 0842 8091 0000 lds r24,EE_Parameter+53
1085 0846 282F mov r18,r24
1086 0848 3327 clr r19
1087 084a 8DED ldi r24,lo8(1757)
1088 084c 96E0 ldi r25,hi8(1757)
1089 084e 289F mul r18,r24
1090 0850 A001 movw r20,r0
1091 0852 299F mul r18,r25
1092 0854 500D add r21,r0
1093 0856 389F mul r19,r24
1094 0858 500D add r21,r0
1095 085a 1124 clr r1
1096 085c CA01 movw r24,r20
1097 085e 2091 0000 lds r18,ServoFrameTime.1
1098 0862 3091 0000 lds r19,(ServoFrameTime.1)+1
1099 0866 821B sub r24,r18
1100 0868 930B sbc r25,r19
1101 086a 9093 0000 sts (RemainingPulse)+1,r25
1102 086e 8093 0000 sts RemainingPulse,r24
1103 0872 81E0 ldi r24,lo8(1)
1104 0874 8093 0000 sts CalculateServoSignals,r24
1105 0878 00C0 rjmp .L109
1106 .L84:
1107 087a 9923 tst r25
1108 087c 01F0 breq .+2
1109 087e 00C0 rjmp .L91
1110 0880 8091 B000 lds r24,176
1111 0884 86FF sbrs r24,6
1112 0886 00C0 rjmp .L93
1113 0888 8091 B000 lds r24,176
1114 088c 8F7B andi r24,lo8(-65)
1115 088e 8093 B000 sts 176,r24
1116 0892 E091 0000 lds r30,ServoIndex.2
1117 0896 2091 0000 lds r18,EE_Parameter+53
1118 089a EE23 tst r30
1119 089c 01F4 brne .L94
1120 089e 3327 clr r19
1121 08a0 8DED ldi r24,lo8(1757)
1122 08a2 96E0 ldi r25,hi8(1757)
1123 08a4 289F mul r18,r24
1124 08a6 A001 movw r20,r0
1125 08a8 299F mul r18,r25
1126 08aa 500D add r21,r0
1127 08ac 389F mul r19,r24
1128 08ae 500D add r21,r0
1129 08b0 1124 clr r1
1130 08b2 CA01 movw r24,r20
1131 08b4 2091 0000 lds r18,ServoFrameTime.1
1132 08b8 3091 0000 lds r19,(ServoFrameTime.1)+1
1133 08bc 821B sub r24,r18
1134 08be 930B sbc r25,r19
1135 08c0 9093 0000 sts (RemainingPulse)+1,r25
1136 08c4 8093 0000 sts RemainingPulse,r24
1137 08c8 1092 0000 sts (ServoFrameTime.1)+1,__zero_reg__
1138 08cc 1092 0000 sts ServoFrameTime.1,__zero_reg__
1139 08d0 469A sbi 40-0x20,6
1140 08d2 00C0 rjmp .L109
1141 .L94:
1142 08d4 2E17 cp r18,r30
1143 08d6 00F4 brsh .L96
1144 08d8 8AE0 ldi r24,lo8(10)
1145 08da 90E0 ldi r25,hi8(10)
1146 08dc 9093 0000 sts (RemainingPulse)+1,r25
1147 08e0 8093 0000 sts RemainingPulse,r24
1148 08e4 00C0 rjmp .L109
1149 .L96:
1150 08e6 89EA ldi r24,lo8(937)
1151 08e8 93E0 ldi r25,hi8(937)
1152 08ea 9093 0000 sts (RemainingPulse)+1,r25
1153 08ee 8093 0000 sts RemainingPulse,r24
1154 08f2 8E2F mov r24,r30
1155 08f4 9927 clr r25
1156 08f6 8330 cpi r24,3
1157 08f8 9105 cpc r25,__zero_reg__
1158 08fa 01F0 breq .L101
1159 08fc 8430 cpi r24,4
1160 08fe 9105 cpc r25,__zero_reg__
1161 0900 04F4 brge .L105
1162 0902 8130 cpi r24,1
1163 0904 9105 cpc r25,__zero_reg__
1164 0906 01F0 breq .L99
1165 0908 0297 sbiw r24,2
1166 090a 01F0 breq .L100
1167 090c 00C0 rjmp .L104
1168 .L105:
1169 090e 8430 cpi r24,4
1170 0910 9105 cpc r25,__zero_reg__
1171 0912 01F0 breq .L102
1172 0914 0597 sbiw r24,5
1173 0916 01F0 breq .L103
1174 0918 00C0 rjmp .L104
1175 .L99:
1176 091a 8091 0000 lds r24,ServoNickValue
1177 091e 9091 0000 lds r25,(ServoNickValue)+1
1178 0922 00C0 rjmp .L125
1179 .L100:
1180 0924 8091 0000 lds r24,ServoRollValue
1181 0928 9091 0000 lds r25,(ServoRollValue)+1
1182 .L125:
1183 092c 8755 subi r24,lo8(-(425))
1184 092e 9E4F sbci r25,hi8(-(425))
1185 0930 00C0 rjmp .L122
1186 .L101:
1187 0932 8091 0000 lds r24,Parameter_Servo3
1188 0936 00C0 rjmp .L127
1189 .L102:
1190 0938 8091 0000 lds r24,Parameter_Servo4
1191 093c 00C0 rjmp .L127
1192 .L103:
1193 093e 8091 0000 lds r24,Parameter_Servo5
1194 .L127:
1195 0942 9927 clr r25
1196 0944 880F lsl r24
1197 0946 991F rol r25
1198 0948 880F lsl r24
1199 094a 991F rol r25
1200 094c 00C0 rjmp .L125
1201 .L104:
1202 094e FF27 clr r31
1203 0950 EE0F add r30,r30
1204 0952 FF1F adc r31,r31
1205 0954 E050 subi r30,lo8(-(PPM_in))
1206 0956 F040 sbci r31,hi8(-(PPM_in))
1207 0958 2081 ld r18,Z
1208 095a 3181 ldd r19,Z+1
1209 095c 220F add r18,r18
1210 095e 331F adc r19,r19
1211 0960 8091 0000 lds r24,RemainingPulse
1212 0964 9091 0000 lds r25,(RemainingPulse)+1
1213 0968 820F add r24,r18
1214 096a 931F adc r25,r19
1215 .L122:
1216 096c 9093 0000 sts (RemainingPulse)+1,r25
1217 0970 8093 0000 sts RemainingPulse,r24
1218 0974 8091 0000 lds r24,RemainingPulse
1219 0978 9091 0000 lds r25,(RemainingPulse)+1
1220 097c 55E0 ldi r21,hi8(1501)
1221 097e 8D3D cpi r24,lo8(1501)
1222 0980 9507 cpc r25,r21
1223 0982 00F0 brlo .L106
1224 0984 8CED ldi r24,lo8(1500)
1225 0986 95E0 ldi r25,hi8(1500)
1226 0988 00C0 rjmp .L123
1227 .L106:
1228 098a 8757 subi r24,lo8(375)
1229 098c 9140 sbci r25,hi8(375)
1230 098e 00F4 brsh .L107
1231 0990 87E7 ldi r24,lo8(375)
1232 0992 91E0 ldi r25,hi8(375)
1233 .L123:
1234 0994 9093 0000 sts (RemainingPulse)+1,r25
1235 0998 8093 0000 sts RemainingPulse,r24
1236 .L107:
1237 099c 2091 0000 lds r18,RemainingPulse
1238 09a0 3091 0000 lds r19,(RemainingPulse)+1
1239 09a4 2C5B subi r18,lo8(-(-188))
1240 09a6 3040 sbci r19,hi8(-(-188))
1241 09a8 3093 0000 sts (RemainingPulse)+1,r19
1242 09ac 2093 0000 sts RemainingPulse,r18
1243 09b0 8091 0000 lds r24,ServoFrameTime.1
1244 09b4 9091 0000 lds r25,(ServoFrameTime.1)+1
1245 09b8 820F add r24,r18
1246 09ba 931F adc r25,r19
1247 .L126:
1248 09bc 9093 0000 sts (ServoFrameTime.1)+1,r25
1249 09c0 8093 0000 sts ServoFrameTime.1,r24
1250 09c4 00C0 rjmp .L109
1251 .L93:
1252 09c6 8091 B000 lds r24,176
1253 09ca 8064 ori r24,lo8(64)
1254 09cc 8093 B000 sts 176,r24
1255 09d0 8CEB ldi r24,lo8(188)
1256 09d2 90E0 ldi r25,hi8(188)
1257 09d4 9093 0000 sts (RemainingPulse)+1,r25
1258 09d8 8093 0000 sts RemainingPulse,r24
1259 09dc 8091 0000 lds r24,ServoFrameTime.1
1260 09e0 9091 0000 lds r25,(ServoFrameTime.1)+1
1261 09e4 8454 subi r24,lo8(-(188))
1262 09e6 9F4F sbci r25,hi8(-(188))
1263 09e8 9093 0000 sts (ServoFrameTime.1)+1,r25
1264 09ec 8093 0000 sts ServoFrameTime.1,r24
1265 09f0 8091 0000 lds r24,ServoActive
1266 09f4 8823 tst r24
1267 09f6 01F0 breq .L112
1268 09f8 8091 0000 lds r24,SenderOkay
1269 09fc 8823 tst r24
1270 09fe 01F4 brne .L111
1271 .L112:
1272 0a00 8091 0000 lds r24,ServoActive
1273 0a04 8230 cpi r24,lo8(2)
1274 0a06 01F4 brne .L110
1275 .L111:
1276 0a08 4698 cbi 40-0x20,6
1277 0a0a 00C0 rjmp .L113
1278 .L110:
1279 0a0c 469A sbi 40-0x20,6
1280 .L113:
1281 0a0e 8091 0000 lds r24,ServoIndex.2
1282 0a12 8F5F subi r24,lo8(-(1))
1283 0a14 8093 0000 sts ServoIndex.2,r24
1284 0a18 282F mov r18,r24
1285 0a1a 3327 clr r19
1286 0a1c 8091 0000 lds r24,EE_Parameter+53
1287 0a20 9927 clr r25
1288 0a22 0196 adiw r24,1
1289 0a24 8217 cp r24,r18
1290 0a26 9307 cpc r25,r19
1291 0a28 04F4 brge .L109
1292 0a2a 81E0 ldi r24,lo8(1)
1293 0a2c 8093 0000 sts CalculateServoSignals,r24
1294 0a30 1092 0000 sts ServoIndex.2,__zero_reg__
1295 .L109:
1296 0a34 81E0 ldi r24,lo8(1)
1297 0a36 8093 0000 sts PulseOutput.0,r24
1298 .L91:
1299 0a3a 2091 0000 lds r18,RemainingPulse
1300 0a3e 3091 0000 lds r19,(RemainingPulse)+1
1301 0a42 41E0 ldi r20,hi8(383)
1302 0a44 2F37 cpi r18,lo8(383)
1303 0a46 3407 cpc r19,r20
1304 0a48 00F0 brlo .L115
1305 0a4a 8FEF ldi r24,lo8(-1)
1306 0a4c 8093 B300 sts 179,r24
1307 0a50 2F5F subi r18,lo8(-(-255))
1308 0a52 3040 sbci r19,hi8(-(-255))
1309 0a54 00C0 rjmp .L124
1310 .L115:
1311 0a56 2F3F cpi r18,255
1312 0a58 3105 cpc r19,__zero_reg__
1313 0a5a 01F0 breq .L117
1314 0a5c 00F0 brlo .L117
1315 0a5e A901 movw r20,r18
1316 0a60 4F5F subi r20,lo8(-(-255))
1317 0a62 5040 sbci r21,hi8(-(-255))
1318 0a64 4F37 cpi r20,127
1319 0a66 5105 cpc r21,__zero_reg__
1320 0a68 00F4 brsh .L118
1321 0a6a 80E8 ldi r24,lo8(-128)
1322 0a6c 8093 B300 sts 179,r24
1323 0a70 2058 subi r18,lo8(-(-128))
1324 0a72 3040 sbci r19,hi8(-(-128))
1325 .L124:
1326 0a74 3093 0000 sts (RemainingPulse)+1,r19
1327 0a78 2093 0000 sts RemainingPulse,r18
1328 0a7c 00C0 rjmp .L83
1329 .L118:
1330 0a7e 8FEF ldi r24,lo8(-1)
1331 0a80 8093 B300 sts 179,r24
1332 0a84 5093 0000 sts (RemainingPulse)+1,r21
1333 0a88 4093 0000 sts RemainingPulse,r20
1334 0a8c 00C0 rjmp .L83
1335 .L117:
1336 0a8e 8091 0000 lds r24,RemainingPulse
1337 0a92 8093 B300 sts 179,r24
1338 0a96 1092 0000 sts (RemainingPulse)+1,__zero_reg__
1339 0a9a 1092 0000 sts RemainingPulse,__zero_reg__
1340 0a9e 1092 0000 sts PulseOutput.0,__zero_reg__
1341 .L83:
1342 /* epilogue: frame size=0 */
1343 0aa2 FF91 pop r31
1344 0aa4 EF91 pop r30
1345 0aa6 9F91 pop r25
1346 0aa8 8F91 pop r24
1347 0aaa 5F91 pop r21
1348 0aac 4F91 pop r20
1349 0aae 3F91 pop r19
1350 0ab0 2F91 pop r18
1351 0ab2 0F90 pop __tmp_reg__
1352 0ab4 0FBE out __SREG__,__tmp_reg__
1353 0ab6 0F90 pop __tmp_reg__
1354 0ab8 1F90 pop __zero_reg__
1355 0aba 1895 reti
1356 /* epilogue end (size=13) */
1357 /* function __vector_9 size 389 (363) */
1359 .comm tim_main,2,1
1360 /* File "timer0.c": code 1388 = 0x056c (1305), prologues 39, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 timer0.c
C:\Temp/cccXNykM.s:3 *ABS*:0000003f __SREG__
C:\Temp/cccXNykM.s:4 *ABS*:0000003e __SP_H__
C:\Temp/cccXNykM.s:5 *ABS*:0000003d __SP_L__
C:\Temp/cccXNykM.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/cccXNykM.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/cccXNykM.s:15 .bss:00000000 ServoRollValue
C:\Temp/cccXNykM.s:21 .bss:00000002 ServoNickValue
C:\Temp/cccXNykM.s:27 .data:00000000 NickServoValue
C:\Temp/cccXNykM.s:32 .data:00000002 BeepMuster
C:\Temp/cccXNykM.s:37 .data:00000004 ServoRollOffset
C:\Temp/cccXNykM.s:42 .data:00000006 ServoNickOffset
C:\Temp/cccXNykM.s:49 .bss:00000004 RemainingPulse
C:\Temp/cccXNykM.s:55 .data:00000008 CalculateServoSignals
C:\Temp/cccXNykM.s:62 .bss:00000006 ServoActive
C:\Temp/cccXNykM.s:68 .bss:00000007 SendSPI
C:\Temp/cccXNykM.s:74 .bss:00000008 beeptime
C:\Temp/cccXNykM.s:80 .bss:0000000a cntKompass
C:\Temp/cccXNykM.s:86 .bss:0000000c UpdateMotor
C:\Temp/cccXNykM.s:92 .bss:0000000d CountMilliseconds
C:\Temp/cccXNykM.s:97 .data:00000009 cnt_1ms.3
.bss:0000000f cnt.4
C:\Temp/cccXNykM.s:99 .bss:00000010 compass_active.5
C:\Temp/cccXNykM.s:104 .text:00000000 __vector_18
C:\Temp/cccXNykM.s:309 .text:000001e6 SetDelay
C:\Temp/cccXNykM.s:325 .text:000001f8 CheckDelay
C:\Temp/cccXNykM.s:344 .text:00000210 Delay_ms
C:\Temp/cccXNykM.s:365 .text:0000022a Delay_ms_Mess
C:\Temp/cccXNykM.s:395 .text:0000025a TIMER2_Init
C:\Temp/cccXNykM.s:437 .text:000002b8 Timer_Init
*COM*:00000002 tim_main
C:\Temp/cccXNykM.s:464 .text:000002e6 CalcNickServoValue
C:\Temp/cccXNykM.s:530 .text:0000036a CalculateServo
C:\Temp/cccXNykM.s:100 .bss:00000011 PulseOutput.0
C:\Temp/cccXNykM.s:1019 .bss:00000012 ServoFrameTime.1
C:\Temp/cccXNykM.s:1020 .bss:00000014 ServoIndex.2
C:\Temp/cccXNykM.s:1024 .text:000007ba __vector_9
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
SpektrumTimer
PlatinenVersion
NaviDataOkay
Parameter_GlobalConfig
__udivmodhi4
KompassValue
AdReady
EE_Parameter
Parameter_ServoNickControl
__prologue_saves__
sintab
IntegralNick
__mulsi3
IntegralRoll
POI_KameraNick
Parameter_ServoNickComp
__divmodhi4
__divmodsi4
Parameter_ServoRollComp
Parameter_ServoRollControl
__epilogue_restores__
Parameter_Servo3
Parameter_Servo4
Parameter_Servo5
PPM_in
SenderOkay
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccl9hPxm.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccl9hPxm.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccl9hPxm.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccl9hPxm.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccl9hPxm.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccl9hPxm.s:15 .bss:00000000 BLConfig_ReadMask
C:\Temp/ccl9hPxm.s:21 .bss:00000002 BLConfig_WriteMask
C:\Temp/ccl9hPxm.s:27 .bss:00000004 BLFlags
C:\Temp/ccl9hPxm.s:33 .bss:00000005 MissingMotor
C:\Temp/ccl9hPxm.s:39 .data:00000000 I2CTimeout
C:\Temp/ccl9hPxm.s:46 .bss:00000006 I2C_TransferActive
C:\Temp/ccl9hPxm.s:52 .bss:00000007 motor_read
C:\Temp/ccl9hPxm.s:58 .bss:00000008 motor_write
C:\Temp/ccl9hPxm.s:64 .bss:00000009 dac_channel
C:\Temp/ccl9hPxm.s:70 .bss:0000000a twi_state
C:\Temp/ccl9hPxm.s:75 .text:00000000 I2C_Init
*COM*:00000060 Motor
C:\Temp/ccl9hPxm.s:126 .text:00000054 I2C_Reset
.bss:0000000b missing_motor.0
C:\Temp/ccl9hPxm.s:153 .bss:0000000c motor_read_temperature.1
C:\Temp/ccl9hPxm.s:154 .bss:0000000d pBuff.2
C:\Temp/ccl9hPxm.s:155 .bss:0000000f BuffLen.3
C:\Temp/ccl9hPxm.s:159 .text:00000098 __vector_26
*COM*:00000008 BLConfig
C:\Temp/ccl9hPxm.s:853 .text:00000698 I2C_WriteBLConfig
C:\Temp/ccl9hPxm.s:1025 .text:000007ec I2C_ReadBLConfig
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__tablejump2__
Mixer
RequiredMotors
FC_StatusFlags
AnalogOffsetNick
AnalogOffsetRoll
AnalogOffsetGier
MotorenEin
PC_MotortestActive
RAM_Checksum
SetDelay
CheckDelay
/branches/v0.90e_Ernstl_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.90e_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.90e_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 8D35 cpi r24,lo8(93)
1163 0768 01F0 breq .+2
1164 076a 00C0 rjmp .L102
1165 076c 8091 0000 lds r24,MotorenEin
1166 0770 8823 tst r24
1167 0772 01F4 brne .L102
1168 0774 2F5F subi r18,lo8(-(1))
1169 0776 3F4F sbci r19,hi8(-(1))
1170 0778 8CE7 ldi r24,lo8(124)
1171 077a E0E0 ldi r30,lo8(EE_Parameter)
1172 077c F0E0 ldi r31,hi8(EE_Parameter)
1173 077e D901 movw r26,r18
1174 0780 0D90 ld __tmp_reg__,X+
1175 0782 0192 st Z+,__tmp_reg__
1176 0784 8A95 dec r24
1177 0786 01F4 brne .-8
1178 0788 F901 movw r30,r18
1179 078a 8291 ld r24,-Z
1180 078c 0E94 0000 call ParamSet_WriteToEEProm
1181 0790 8091 0000 lds r24,EE_Parameter+65
1182 0794 9927 clr r25
1183 0796 AA27 clr r26
1184 0798 BB27 clr r27
1185 079a BC01 movw r22,r24
1186 079c CD01 movw r24,r26
1187 079e 24EC ldi r18,lo8(2500)
1188 07a0 39E0 ldi r19,hi8(2500)
1189 07a2 40E0 ldi r20,hlo8(2500)
1190 07a4 50E0 ldi r21,hhi8(2500)
1191 07a6 0E94 0000 call __mulsi3
1192 07aa DC01 movw r26,r24
1193 07ac CB01 movw r24,r22
1194 07ae 8093 0000 sts Umschlag180Nick,r24
1195 07b2 9093 0000 sts (Umschlag180Nick)+1,r25
1196 07b6 A093 0000 sts (Umschlag180Nick)+2,r26
1197 07ba B093 0000 sts (Umschlag180Nick)+3,r27
1198 07be 8091 0000 lds r24,EE_Parameter+66
1199 07c2 9927 clr r25
1200 07c4 AA27 clr r26
1201 07c6 BB27 clr r27
1202 07c8 BC01 movw r22,r24
1203 07ca CD01 movw r24,r26
1204 07cc 0E94 0000 call __mulsi3
1205 07d0 DC01 movw r26,r24
1206 07d2 CB01 movw r24,r22
1207 07d4 8093 0000 sts Umschlag180Roll,r24
1208 07d8 9093 0000 sts (Umschlag180Roll)+1,r25
1209 07dc A093 0000 sts (Umschlag180Roll)+2,r26
1210 07e0 B093 0000 sts (Umschlag180Roll)+3,r27
1211 07e4 0E94 0000 call GetActiveParamSet
1212 07e8 8983 std Y+1,r24
1213 07ea 00C0 rjmp .L104
1214 .L102:
1215 07ec 1982 std Y+1,__zero_reg__
1216 .L104:
1217 07ee 8091 0000 lds r24,UebertragungAbgeschlossen
1218 07f2 8823 tst r24
1219 07f4 01F0 breq .L104
1220 07f6 81E0 ldi r24,lo8(1)
1221 07f8 90E0 ldi r25,hi8(1)
1222 07fa 9F93 push r25
1223 07fc 8F93 push r24
1224 07fe CE01 movw r24,r28
1225 0800 0196 adiw r24,1
1226 0802 9F93 push r25
1227 0804 8F93 push r24
1228 0806 81E0 ldi r24,lo8(1)
1229 0808 8F93 push r24
1230 080a 8F93 push r24
1231 080c 83E5 ldi r24,lo8(83)
1232 080e 8F93 push r24
1233 0810 0E94 0000 call SendOutData
1234 0814 8DB7 in r24,__SP_L__
1235 0816 9EB7 in r25,__SP_H__
1236 0818 0796 adiw r24,7
1237 081a 8DBF out __SP_L__,r24
1238 081c 00C0 rjmp .L186
1239 .L108:
1240 081e E091 0000 lds r30,pRxData
1241 0822 F091 0000 lds r31,(pRxData)+1
1242 0826 E081 ld r30,Z
1243 0828 8E2F mov r24,r30
1244 082a 8150 subi r24,lo8(-(-1))
1245 082c 8530 cpi r24,lo8(5)
1246 082e 00F4 brsh .L109
1247 0830 8E2F mov r24,r30
1248 0832 0E94 0000 call ParamSet_ReadFromEEProm
1249 .L109:
1250 0836 0E94 0000 call GetActiveParamSet
1251 083a 8983 std Y+1,r24
1252 .L110:
1253 083c 8091 0000 lds r24,UebertragungAbgeschlossen
1254 0840 8823 tst r24
1255 0842 01F0 breq .L110
1256 0844 81E0 ldi r24,lo8(1)
1257 0846 90E0 ldi r25,hi8(1)
1258 0848 9F93 push r25
1259 084a 8F93 push r24
1260 084c CE01 movw r24,r28
1261 084e 0196 adiw r24,1
1262 0850 9F93 push r25
1263 0852 8F93 push r24
1264 0854 81E0 ldi r24,lo8(1)
1265 0856 8F93 push r24
1266 0858 8F93 push r24
1267 085a 86E4 ldi r24,lo8(70)
1268 085c 8F93 push r24
1269 085e 0E94 0000 call SendOutData
1270 0862 ADB7 in r26,__SP_L__
1271 0864 BEB7 in r27,__SP_H__
1272 0866 1796 adiw r26,7
1273 0868 ADBF out __SP_L__,r26
1274 .L186:
1275 086a 8091 0000 lds r24,MotorenEin
1276 086e 8823 tst r24
1277 0870 01F4 brne .L113
1278 0872 6EE6 ldi r22,lo8(110)
1279 0874 70E0 ldi r23,hi8(110)
1280 0876 8981 ldd r24,Y+1
1281 0878 0E94 0000 call Piep
1282 .L113:
1283 087c 80E0 ldi r24,lo8(0)
1284 087e 0E94 0000 call LipoDetection
1285 0882 8091 0000 lds r24,EE_Parameter+39
1286 0886 0E94 0000 call LIBFC_ReceiverInit
1287 088a 00C0 rjmp .L145
1288 .L114:
1289 088c E091 0000 lds r30,pRxData
1290 0890 F091 0000 lds r31,(pRxData)+1
1291 0894 8081 ld r24,Z
1292 0896 9927 clr r25
1293 0898 87FD sbrc r24,7
1294 089a 9095 com r25
1295 089c 9093 0000 sts (PPM_in+26)+1,r25
1296 08a0 8093 0000 sts PPM_in+26,r24
1297 08a4 8181 ldd r24,Z+1
1298 08a6 9927 clr r25
1299 08a8 87FD sbrc r24,7
1300 08aa 9095 com r25
1301 08ac 9093 0000 sts (PPM_in+28)+1,r25
1302 08b0 8093 0000 sts PPM_in+28,r24
1303 08b4 8281 ldd r24,Z+2
1304 08b6 9927 clr r25
1305 08b8 87FD sbrc r24,7
1306 08ba 9095 com r25
1307 08bc 9093 0000 sts (PPM_in+30)+1,r25
1308 08c0 8093 0000 sts PPM_in+30,r24
1309 08c4 8381 ldd r24,Z+3
1310 08c6 9927 clr r25
1311 08c8 87FD sbrc r24,7
1312 08ca 9095 com r25
1313 08cc 9093 0000 sts (PPM_in+32)+1,r25
1314 08d0 8093 0000 sts PPM_in+32,r24
1315 08d4 8481 ldd r24,Z+4
1316 08d6 9927 clr r25
1317 08d8 87FD sbrc r24,7
1318 08da 9095 com r25
1319 08dc 9093 0000 sts (PPM_in+34)+1,r25
1320 08e0 8093 0000 sts PPM_in+34,r24
1321 08e4 8581 ldd r24,Z+5
1322 08e6 9927 clr r25
1323 08e8 87FD sbrc r24,7
1324 08ea 9095 com r25
1325 08ec 9093 0000 sts (PPM_in+36)+1,r25
1326 08f0 8093 0000 sts PPM_in+36,r24
1327 08f4 8681 ldd r24,Z+6
1328 08f6 9927 clr r25
1329 08f8 87FD sbrc r24,7
1330 08fa 9095 com r25
1331 08fc 9093 0000 sts (PPM_in+38)+1,r25
1332 0900 8093 0000 sts PPM_in+38,r24
1333 0904 8781 ldd r24,Z+7
1334 0906 9927 clr r25
1335 0908 87FD sbrc r24,7
1336 090a 9095 com r25
1337 090c 9093 0000 sts (PPM_in+40)+1,r25
1338 0910 8093 0000 sts PPM_in+40,r24
1339 0914 8085 ldd r24,Z+8
1340 0916 9927 clr r25
1341 0918 87FD sbrc r24,7
1342 091a 9095 com r25
1343 091c 9093 0000 sts (PPM_in+42)+1,r25
1344 0920 8093 0000 sts PPM_in+42,r24
1345 0924 8185 ldd r24,Z+9
1346 0926 9927 clr r25
1347 0928 87FD sbrc r24,7
1348 092a 9095 com r25
1349 092c 9093 0000 sts (PPM_in+44)+1,r25
1350 0930 8093 0000 sts PPM_in+44,r24
1351 0934 8285 ldd r24,Z+10
1352 0936 9927 clr r25
1353 0938 87FD sbrc r24,7
1354 093a 9095 com r25
1355 093c 9093 0000 sts (PPM_in+46)+1,r25
1356 0940 8093 0000 sts PPM_in+46,r24
1357 0944 8385 ldd r24,Z+11
1358 0946 9927 clr r25
1359 0948 87FD sbrc r24,7
1360 094a 9095 com r25
1361 094c 9093 0000 sts (PPM_in+48)+1,r25
1362 0950 8093 0000 sts PPM_in+48,r24
1363 0954 00C0 rjmp .L145
1364 .L115:
1365 0956 E091 0000 lds r30,pRxData
1366 095a F091 0000 lds r31,(pRxData)+1
1367 095e 8081 ld r24,Z
1368 0960 0E94 0000 call I2C_ReadBLConfig
1369 0964 8A83 std Y+2,r24
1370 0966 8823 tst r24
1371 0968 01F4 brne .L116
1372 096a 81E0 ldi r24,lo8(1)
1373 096c 8983 std Y+1,r24
1374 096e 00C0 rjmp .L118
1375 .L116:
1376 0970 1982 std Y+1,__zero_reg__
1377 .L118:
1378 0972 8091 0000 lds r24,UebertragungAbgeschlossen
1379 0976 8823 tst r24
1380 0978 01F0 breq .L118
1381 097a 88E0 ldi r24,lo8(8)
1382 097c 90E0 ldi r25,hi8(8)
1383 097e 9F93 push r25
1384 0980 8F93 push r24
1385 0982 80E0 ldi r24,lo8(BLConfig)
1386 0984 90E0 ldi r25,hi8(BLConfig)
1387 0986 9F93 push r25
1388 0988 8F93 push r24
1389 098a 21E0 ldi r18,lo8(1)
1390 098c 30E0 ldi r19,hi8(1)
1391 098e 3F93 push r19
1392 0990 2F93 push r18
1393 0992 8091 0000 lds r24,pRxData
1394 0996 9091 0000 lds r25,(pRxData)+1
1395 099a 9F93 push r25
1396 099c 8F93 push r24
1397 099e 3F93 push r19
1398 09a0 2F93 push r18
1399 09a2 CE01 movw r24,r28
1400 09a4 0296 adiw r24,2
1401 09a6 9F93 push r25
1402 09a8 8F93 push r24
1403 09aa 3F93 push r19
1404 09ac 2F93 push r18
1405 09ae CE01 movw r24,r28
1406 09b0 820F add r24,r18
1407 09b2 931F adc r25,r19
1408 09b4 9F93 push r25
1409 09b6 8F93 push r24
1410 09b8 84E0 ldi r24,lo8(4)
1411 09ba 8F93 push r24
1412 09bc 81E0 ldi r24,lo8(1)
1413 09be 8F93 push r24
1414 09c0 85E5 ldi r24,lo8(85)
1415 09c2 8F93 push r24
1416 09c4 0E94 0000 call SendOutData
1417 09c8 EDB7 in r30,__SP_L__
1418 09ca FEB7 in r31,__SP_H__
1419 09cc 7396 adiw r30,19
1420 09ce 00C0 rjmp .L181
1421 .L121:
1422 09d0 8091 0000 lds r24,RxDataLen
1423 09d4 8930 cpi r24,lo8(9)
1424 09d6 00F4 brsh .+2
1425 09d8 00C0 rjmp .L145
1426 09da 2091 0000 lds r18,pRxData
1427 09de 3091 0000 lds r19,(pRxData)+1
1428 09e2 2F5F subi r18,lo8(-(1))
1429 09e4 3F4F sbci r19,hi8(-(1))
1430 09e6 88E0 ldi r24,lo8(8)
1431 09e8 A0E0 ldi r26,lo8(BLConfig)
1432 09ea B0E0 ldi r27,hi8(BLConfig)
1433 09ec F901 movw r30,r18
1434 09ee 0190 ld __tmp_reg__,Z+
1435 09f0 0D92 st X+,__tmp_reg__
1436 09f2 8A95 dec r24
1437 09f4 01F4 brne .-8
1438 09f6 D901 movw r26,r18
1439 09f8 8E91 ld r24,-X
1440 09fa 0E94 0000 call I2C_WriteBLConfig
1441 09fe 8A83 std Y+2,r24
1442 0a00 8823 tst r24
1443 0a02 01F4 brne .L123
1444 0a04 81E0 ldi r24,lo8(1)
1445 0a06 8983 std Y+1,r24
1446 0a08 00C0 rjmp .L125
1447 .L123:
1448 0a0a 1982 std Y+1,__zero_reg__
1449 .L125:
1450 0a0c 8091 0000 lds r24,UebertragungAbgeschlossen
1451 0a10 8823 tst r24
1452 0a12 01F0 breq .L125
1453 0a14 21E0 ldi r18,lo8(1)
1454 0a16 30E0 ldi r19,hi8(1)
1455 0a18 3F93 push r19
1456 0a1a 2F93 push r18
1457 0a1c CE01 movw r24,r28
1458 0a1e 0296 adiw r24,2
1459 0a20 9F93 push r25
1460 0a22 8F93 push r24
1461 0a24 3F93 push r19
1462 0a26 2F93 push r18
1463 0a28 CE01 movw r24,r28
1464 0a2a 820F add r24,r18
1465 0a2c 931F adc r25,r19
1466 0a2e 9F93 push r25
1467 0a30 8F93 push r24
1468 0a32 82E0 ldi r24,lo8(2)
1469 0a34 8F93 push r24
1470 0a36 81E0 ldi r24,lo8(1)
1471 0a38 8F93 push r24
1472 0a3a 87E5 ldi r24,lo8(87)
1473 .L185:
1474 0a3c 8F93 push r24
1475 0a3e 0E94 0000 call SendOutData
1476 0a42 EDB7 in r30,__SP_L__
1477 0a44 FEB7 in r31,__SP_H__
1478 0a46 3B96 adiw r30,11
1479 .L181:
1480 0a48 EDBF out __SP_L__,r30
1481 0a4a 00C0 rjmp .L145
1482 .L128:
1483 0a4c 8091 0000 lds r24,MotorenEin
1484 0a50 8823 tst r24
1485 0a52 01F0 breq .+2
1486 0a54 00C0 rjmp .L145
1487 0a56 0E94 0000 call LIBFC_GetCPUType
1488 0a5a 8983 std Y+1,r24
1489 0a5c 8230 cpi r24,lo8(2)
1490 0a5e 01F0 breq .L131
1491 0a60 8430 cpi r24,lo8(4)
1492 0a62 01F0 breq .+2
1493 0a64 00C0 rjmp .L145
1494 .L131:
1495 0a66 20E4 ldi r18,lo8(64)
1496 0a68 30E0 ldi r19,hi8(64)
1497 /* #APP */
1498 0a6a F894 cli
1499 /* #NOAPP */
1500 0a6c 8091 C100 lds r24,193
1501 0a70 8F73 andi r24,lo8(63)
1502 0a72 8093 C100 sts 193,r24
1503 0a76 8091 C900 lds r24,201
1504 0a7a 8F73 andi r24,lo8(63)
1505 0a7c 8093 C900 sts 201,r24
1506 0a80 8091 C100 lds r24,193
1507 0a84 877E andi r24,lo8(-25)
1508 0a86 8093 C100 sts 193,r24
1509 0a8a 8091 C900 lds r24,201
1510 0a8e 877E andi r24,lo8(-25)
1511 0a90 8093 C900 sts 201,r24
1512 .L180:
1513 0a94 8091 C800 lds r24,200
1514 0a98 87FF sbrs r24,7
1515 0a9a 00C0 rjmp .L173
1516 0a9c 8091 CE00 lds r24,206
1517 0aa0 00C0 rjmp .L180
1518 .L173:
1519 0aa2 8091 C000 lds r24,192
1520 0aa6 87FF sbrs r24,7
1521 0aa8 00C0 rjmp .L175
1522 0aaa 8091 C600 lds r24,198
1523 0aae 00C0 rjmp .L173
1524 .L175:
1525 0ab0 E091 0000 lds r30,pRxData
1526 0ab4 F091 0000 lds r31,(pRxData)+1
1527 0ab8 E081 ld r30,Z
1528 0aba E130 cpi r30,lo8(1)
1529 0abc 01F4 brne .L138
1530 0abe 82E0 ldi r24,lo8(2)
1531 0ac0 8093 0000 sts ReceiverUpdateModeActive,r24
1532 0ac4 00C0 rjmp .L139
1533 .L138:
1534 0ac6 E436 cpi r30,lo8(100)
1535 0ac8 01F4 brne .L140
1536 0aca 21E8 ldi r18,lo8(129)
1537 0acc 30E0 ldi r19,hi8(129)
1538 .L140:
1539 0ace 81E0 ldi r24,lo8(1)
1540 0ad0 8093 0000 sts ReceiverUpdateModeActive,r24
1541 0ad4 832F mov r24,r19
1542 0ad6 9927 clr r25
1543 0ad8 8093 CD00 sts 205,r24
1544 0adc 2093 CC00 sts 204,r18
1545 0ae0 8091 CD00 lds r24,205
1546 0ae4 8093 C500 sts 197,r24
1547 0ae8 8091 CC00 lds r24,204
1548 0aec 8093 C400 sts 196,r24
1549 0af0 8091 CA00 lds r24,202
1550 0af4 8F7D andi r24,lo8(-33)
1551 0af6 8093 CA00 sts 202,r24
1552 0afa 8091 CA00 lds r24,202
1553 0afe 8F7E andi r24,lo8(-17)
1554 0b00 8093 CA00 sts 202,r24
1555 0b04 8091 C900 lds r24,201
1556 0b08 8B7F andi r24,lo8(-5)
1557 0b0a 8093 C900 sts 201,r24
1558 0b0e 8091 CA00 lds r24,202
1559 0b12 8460 ori r24,lo8(4)
1560 0b14 8093 CA00 sts 202,r24
1561 0b18 8091 CA00 lds r24,202
1562 0b1c 8260 ori r24,lo8(2)
1563 0b1e 8093 CA00 sts 202,r24
1564 .L139:
1565 0b22 8091 CA00 lds r24,202
1566 0b26 877F andi r24,lo8(-9)
1567 0b28 8093 CA00 sts 202,r24
1568 0b2c 8091 C200 lds r24,194
1569 0b30 877F andi r24,lo8(-9)
1570 0b32 8093 C200 sts 194,r24
1571 0b36 8091 C900 lds r24,201
1572 0b3a 8E7F andi r24,lo8(-2)
1573 0b3c 8093 C900 sts 201,r24
1574 0b40 8091 C100 lds r24,193
1575 0b44 8861 ori r24,lo8(24)
1576 0b46 8093 C100 sts 193,r24
1577 0b4a 8091 C900 lds r24,201
1578 0b4e 8861 ori r24,lo8(24)
1579 0b50 8093 C900 sts 201,r24
1580 0b54 8091 C100 lds r24,193
1581 0b58 8068 ori r24,lo8(-128)
1582 0b5a 8093 C100 sts 193,r24
1583 0b5e 8091 C900 lds r24,201
1584 0b62 8068 ori r24,lo8(-128)
1585 0b64 8093 C900 sts 201,r24
1586 0b68 1092 6E00 sts 110,__zero_reg__
1587 0b6c 1092 6F00 sts 111,__zero_reg__
1588 0b70 1092 7000 sts 112,__zero_reg__
1589 /* #APP */
1590 0b74 7894 sei
1591 /* #NOAPP */
1592 .L145:
1593 0b76 8091 0000 lds r24,RxdBuffer+2
1594 0b7a 9927 clr r25
1595 0b7c 8436 cpi r24,100
1596 0b7e 9105 cpc r25,__zero_reg__
1597 0b80 01F4 brne .+2
1598 0b82 00C0 rjmp .L160
1599 0b84 8536 cpi r24,101
1600 0b86 9105 cpc r25,__zero_reg__
1601 0b88 04F4 brge .L169
1602 0b8a 8136 cpi r24,97
1603 0b8c 9105 cpc r25,__zero_reg__
1604 0b8e 01F4 brne .+2
1605 0b90 00C0 rjmp .L154
1606 0b92 8236 cpi r24,98
1607 0b94 9105 cpc r25,__zero_reg__
1608 0b96 04F4 brge .L170
1609 0b98 8B34 cpi r24,75
1610 0b9a 9105 cpc r25,__zero_reg__
1611 0b9c 01F4 brne .+2
1612 0b9e 00C0 rjmp .L153
1613 0ba0 00C0 rjmp .L65
1614 .L170:
1615 0ba2 8236 cpi r24,98
1616 0ba4 9105 cpc r25,__zero_reg__
1617 0ba6 01F4 brne .+2
1618 0ba8 00C0 rjmp .L156
1619 0baa 8336 cpi r24,99
1620 0bac 9105 cpc r25,__zero_reg__
1621 0bae 01F4 brne .+2
1622 0bb0 00C0 rjmp .L157
1623 0bb2 00C0 rjmp .L65
1624 .L169:
1625 0bb4 8C36 cpi r24,108
1626 0bb6 9105 cpc r25,__zero_reg__
1627 0bb8 01F4 brne .+2
1628 0bba 00C0 rjmp .L165
1629 0bbc 8D36 cpi r24,109
1630 0bbe 9105 cpc r25,__zero_reg__
1631 0bc0 04F4 brge .L171
1632 0bc2 8736 cpi r24,103
1633 0bc4 9105 cpc r25,__zero_reg__
1634 0bc6 01F4 brne .+2
1635 0bc8 00C0 rjmp .L167
1636 0bca 8836 cpi r24,104
1637 0bcc 9105 cpc r25,__zero_reg__
1638 0bce 01F4 brne .+2
1639 0bd0 00C0 rjmp .L162
1640 0bd2 00C0 rjmp .L65
1641 .L171:
1642 0bd4 8437 cpi r24,116
1643 0bd6 9105 cpc r25,__zero_reg__
1644 0bd8 01F0 breq .L147
1645 0bda 8637 cpi r24,118
1646 0bdc 9105 cpc r25,__zero_reg__
1647 0bde 01F4 brne .+2
1648 0be0 00C0 rjmp .L166
1649 0be2 00C0 rjmp .L65
1650 .L147:
1651 0be4 8091 0000 lds r24,AnzahlEmpfangsBytes
1652 0be8 A091 0000 lds r26,pRxData
1653 0bec B091 0000 lds r27,(pRxData)+1
1654 0bf0 8031 cpi r24,lo8(16)
1655 0bf2 00F0 brlo .L148
1656 0bf4 80E1 ldi r24,lo8(16)
1657 0bf6 E0E0 ldi r30,lo8(MotorTest)
1658 0bf8 F0E0 ldi r31,hi8(MotorTest)
1659 0bfa 0D90 ld __tmp_reg__,X+
1660 0bfc 0192 st Z+,__tmp_reg__
1661 0bfe 8A95 dec r24
1662 0c00 01F4 brne .-8
1663 0c02 00C0 rjmp .L150
1664 .L148:
1665 0c04 8D91 ld r24,X+
1666 0c06 9D91 ld r25,X+
1667 0c08 0D90 ld __tmp_reg__,X+
1668 0c0a BC91 ld r27,X
1669 0c0c A02D mov r26,__tmp_reg__
1670 0c0e 8093 0000 sts MotorTest,r24
1671 0c12 9093 0000 sts (MotorTest)+1,r25
1672 0c16 A093 0000 sts (MotorTest)+2,r26
1673 0c1a B093 0000 sts (MotorTest)+3,r27
1674 .L150:
1675 0c1e 8091 0000 lds r24,UebertragungAbgeschlossen
1676 0c22 8823 tst r24
1677 0c24 01F0 breq .L150
1678 0c26 1F92 push __zero_reg__
1679 0c28 8091 0000 lds r24,MeineSlaveAdresse
1680 0c2c 8F93 push r24
1681 0c2e 84E5 ldi r24,lo8(84)
1682 0c30 8F93 push r24
1683 0c32 0E94 0000 call SendOutData
1684 0c36 8AEF ldi r24,lo8(-6)
1685 0c38 8093 0000 sts PC_MotortestActive,r24
1686 0c3c 8FEF ldi r24,lo8(-1)
1687 0c3e 8093 0000 sts PcZugriff,r24
1688 0c42 80EA ldi r24,lo8(4000)
1689 0c44 9FE0 ldi r25,hi8(4000)
1690 0c46 0E94 0000 call SetDelay
1691 0c4a 9093 0000 sts (AboTimeOut)+1,r25
1692 0c4e 8093 0000 sts AboTimeOut,r24
1693 0c52 0F90 pop __tmp_reg__
1694 0c54 0F90 pop __tmp_reg__
1695 0c56 0F90 pop __tmp_reg__
1696 0c58 00C0 rjmp .L65
1697 .L153:
1698 0c5a E091 0000 lds r30,pRxData
1699 0c5e F091 0000 lds r31,(pRxData)+1
1700 0c62 8081 ld r24,Z
1701 0c64 9181 ldd r25,Z+1
1702 0c66 9093 0000 sts (KompassValue)+1,r25
1703 0c6a 8093 0000 sts KompassValue,r24
1704 0c6e 00C0 rjmp .L65
1705 .L154:
1706 0c70 E091 0000 lds r30,pRxData
1707 0c74 F091 0000 lds r31,(pRxData)+1
1708 0c78 8081 ld r24,Z
1709 0c7a 8093 0000 sts DebugTextAnforderung,r24
1710 0c7e 8032 cpi r24,lo8(32)
1711 0c80 00F0 brlo .L183
1712 0c82 8FE1 ldi r24,lo8(31)
1713 0c84 8093 0000 sts DebugTextAnforderung,r24
1714 0c88 00C0 rjmp .L183
1715 .L156:
1716 0c8a A091 0000 lds r26,pRxData
1717 0c8e B091 0000 lds r27,(pRxData)+1
1718 0c92 8BE0 ldi r24,lo8(11)
1719 0c94 E0E0 ldi r30,lo8(ExternControl)
1720 0c96 F0E0 ldi r31,hi8(ExternControl)
1721 0c98 0D90 ld __tmp_reg__,X+
1722 0c9a 0192 st Z+,__tmp_reg__
1723 0c9c 8A95 dec r24
1724 0c9e 01F4 brne .-8
1725 0ca0 8091 0000 lds r24,ExternControl+9
1726 0ca4 8093 0000 sts ConfirmFrame,r24
1727 .L183:
1728 0ca8 8FEF ldi r24,lo8(-1)
1729 0caa 8093 0000 sts PcZugriff,r24
1730 0cae 00C0 rjmp .L65
1731 .L157:
1732 0cb0 8091 0000 lds r24,Intervall3D
1733 0cb4 9091 0000 lds r25,(Intervall3D)+1
1734 0cb8 892B or r24,r25
1735 0cba 01F4 brne .L158
1736 0cbc E091 0000 lds r30,pRxData
1737 0cc0 F091 0000 lds r31,(pRxData)+1
1738 0cc4 E081 ld r30,Z
1739 0cc6 EE23 tst r30
1740 0cc8 01F0 breq .L158
1741 0cca 8AE0 ldi r24,lo8(10)
1742 0ccc E89F mul r30,r24
1743 0cce C001 movw r24,r0
1744 0cd0 1124 clr r1
1745 0cd2 0E94 0000 call SetDelay
1746 0cd6 9093 0000 sts (Timer3D)+1,r25
1747 0cda 8093 0000 sts Timer3D,r24
1748 .L158:
1749 0cde E091 0000 lds r30,pRxData
1750 0ce2 F091 0000 lds r31,(pRxData)+1
1751 0ce6 9081 ld r25,Z
1752 0ce8 8AE0 ldi r24,lo8(10)
1753 0cea 989F mul r25,r24
1754 0cec C001 movw r24,r0
1755 0cee 1124 clr r1
1756 0cf0 9093 0000 sts (Intervall3D)+1,r25
1757 0cf4 8093 0000 sts Intervall3D,r24
1758 0cf8 00C0 rjmp .L161
1759 .L160:
1760 0cfa 8FEF ldi r24,lo8(-1)
1761 0cfc 8093 0000 sts PcZugriff,r24
1762 0d00 E091 0000 lds r30,pRxData
1763 0d04 F091 0000 lds r31,(pRxData)+1
1764 0d08 9081 ld r25,Z
1765 0d0a 8AE0 ldi r24,lo8(10)
1766 0d0c 989F mul r25,r24
1767 0d0e C001 movw r24,r0
1768 0d10 1124 clr r1
1769 0d12 9093 0000 sts (DebugDataIntervall)+1,r25
1770 0d16 8093 0000 sts DebugDataIntervall,r24
1771 0d1a 892B or r24,r25
1772 0d1c 01F0 breq .L161
1773 0d1e 81E0 ldi r24,lo8(1)
1774 0d20 8093 0000 sts DebugDataAnforderung,r24
1775 .L161:
1776 0d24 80EA ldi r24,lo8(4000)
1777 0d26 9FE0 ldi r25,hi8(4000)
1778 0d28 0E94 0000 call SetDelay
1779 0d2c 9093 0000 sts (AboTimeOut)+1,r25
1780 0d30 8093 0000 sts AboTimeOut,r24
1781 0d34 00C0 rjmp .L65
1782 .L162:
1783 0d36 8FEF ldi r24,lo8(-1)
1784 0d38 8093 0000 sts PcZugriff,r24
1785 0d3c E091 0000 lds r30,pRxData
1786 0d40 F091 0000 lds r31,(pRxData)+1
1787 0d44 9081 ld r25,Z
1788 0d46 97FD sbrc r25,7
1789 0d48 00C0 rjmp .L163
1790 0d4a 82E0 ldi r24,lo8(2)
1791 0d4c 8093 0000 sts DisplayLine,r24
1792 0d50 1092 0000 sts (Display_Interval)+1,__zero_reg__
1793 0d54 1092 0000 sts Display_Interval,__zero_reg__
1794 0d58 00C0 rjmp .L164
1795 .L163:
1796 0d5a 9095 com r25
1797 0d5c 8091 0000 lds r24,RemoteKeys
1798 0d60 892B or r24,r25
1799 0d62 8093 0000 sts RemoteKeys,r24
1800 0d66 9181 ldd r25,Z+1
1801 0d68 8AE0 ldi r24,lo8(10)
1802 0d6a 989F mul r25,r24
1803 0d6c C001 movw r24,r0
1804 0d6e 1124 clr r1
1805 0d70 9093 0000 sts (Display_Interval)+1,r25
1806 0d74 8093 0000 sts Display_Interval,r24
1807 0d78 84E0 ldi r24,lo8(4)
1808 0d7a 8093 0000 sts DisplayLine,r24
1809 0d7e 80EA ldi r24,lo8(4000)
1810 0d80 9FE0 ldi r25,hi8(4000)
1811 0d82 0E94 0000 call SetDelay
1812 0d86 9093 0000 sts (AboTimeOut)+1,r25
1813 0d8a 8093 0000 sts AboTimeOut,r24
1814 .L164:
1815 0d8e 81E0 ldi r24,lo8(1)
1816 0d90 8093 0000 sts DebugDisplayAnforderung,r24
1817 0d94 00C0 rjmp .L65
1818 .L165:
1819 0d96 8FEF ldi r24,lo8(-1)
1820 0d98 8093 0000 sts PcZugriff,r24
1821 0d9c E091 0000 lds r30,pRxData
1822 0da0 F091 0000 lds r31,(pRxData)+1
1823 0da4 8081 ld r24,Z
1824 0da6 8093 0000 sts MenuePunkt,r24
1825 0daa 81E0 ldi r24,lo8(1)
1826 0dac 8093 0000 sts DebugDisplayAnforderung1,r24
1827 0db0 00C0 rjmp .L65
1828 .L166:
1829 0db2 81E0 ldi r24,lo8(1)
1830 0db4 8093 0000 sts GetVersionAnforderung,r24
1831 0db8 00C0 rjmp .L65
1832 .L167:
1833 0dba 81E0 ldi r24,lo8(1)
1834 0dbc 8093 0000 sts GetExternalControl,r24
1835 .L65:
1836 0dc0 1092 0000 sts NeuerDatensatzEmpfangen,__zero_reg__
1837 0dc4 1092 0000 sts (pRxData)+1,__zero_reg__
1838 0dc8 1092 0000 sts pRxData,__zero_reg__
1839 0dcc 1092 0000 sts RxDataLen,__zero_reg__
1840 .L63:
1841 /* epilogue: frame size=2 */
1842 0dd0 E3E0 ldi r30,3
1843 0dd2 CE5F subi r28,-2
1844 0dd4 0C94 0000 jmp __epilogue_restores__+30
1845 /* epilogue end (size=4) */
1846 /* function BearbeiteRxDaten size 1128 (1118) */
1848 .global uart_putchar
1850 uart_putchar:
1851 /* prologue: frame size=0 */
1852 /* prologue end (size=0) */
1853 0dd8 982F mov r25,r24
1854 .L188:
1855 0dda 8091 C000 lds r24,192
1856 0dde 85FF sbrs r24,5
1857 0de0 00C0 rjmp .L188
1858 0de2 9093 C600 sts 198,r25
1859 /* epilogue: frame size=0 */
1860 0de6 0895 ret
1861 /* epilogue end (size=1) */
1862 /* function uart_putchar size 8 (7) */
1864 .global UART_Init
1866 UART_Init:
1867 /* prologue: frame size=0 */
1868 0de8 0F93 push r16
1869 0dea 1F93 push r17
1870 /* prologue end (size=2) */
1871 0dec 88E1 ldi r24,lo8(24)
1872 0dee 8093 C100 sts 193,r24
1873 0df2 8091 C000 lds r24,192
1874 0df6 8260 ori r24,lo8(2)
1875 0df8 8093 C000 sts 192,r24
1876 0dfc 8091 C100 lds r24,193
1877 0e00 8068 ori r24,lo8(-128)
1878 0e02 8093 C100 sts 193,r24
1879 0e06 8091 C100 lds r24,193
1880 0e0a 8064 ori r24,lo8(64)
1881 0e0c 8093 C100 sts 193,r24
1882 0e10 00E0 ldi r16,lo8(0)
1883 0e12 10E0 ldi r17,hi8(0)
1884 0e14 0093 C500 sts 197,r16
1885 0e18 8AE2 ldi r24,lo8(42)
1886 0e1a 90E0 ldi r25,hi8(42)
1887 0e1c 8093 C400 sts 196,r24
1888 0e20 8091 0000 lds r24,DebugDataIntervall
1889 0e24 9091 0000 lds r25,(DebugDataIntervall)+1
1890 0e28 0E94 0000 call SetDelay
1891 0e2c 9093 0000 sts (Debug_Timer)+1,r25
1892 0e30 8093 0000 sts Debug_Timer,r24
1893 0e34 8CED ldi r24,lo8(220)
1894 0e36 90E0 ldi r25,hi8(220)
1895 0e38 0E94 0000 call SetDelay
1896 0e3c 9093 0000 sts (Kompass_Timer)+1,r25
1897 0e40 8093 0000 sts Kompass_Timer,r24
1898 0e44 1092 0000 sts VersionInfo,__zero_reg__
1899 0e48 8AE5 ldi r24,lo8(90)
1900 0e4a 8093 0000 sts VersionInfo+1,r24
1901 0e4e 84E0 ldi r24,lo8(4)
1902 0e50 8093 0000 sts VersionInfo+4,r24
1903 0e54 8BE0 ldi r24,lo8(11)
1904 0e56 8093 0000 sts VersionInfo+2,r24
1905 0e5a 1092 0000 sts VersionInfo+3,__zero_reg__
1906 0e5e 1093 0000 sts (pRxData)+1,r17
1907 0e62 0093 0000 sts pRxData,r16
1908 0e66 1092 0000 sts RxDataLen,__zero_reg__
1909 /* epilogue: frame size=0 */
1910 0e6a 1F91 pop r17
1911 0e6c 0F91 pop r16
1912 0e6e 0895 ret
1913 /* epilogue end (size=3) */
1914 /* function UART_Init size 68 (63) */
1916 .section .progmem.data
1919 __c.0:
1920 0200 2121 2120 .string "!!! INCOMPATIBLE !!!"
1920 494E 434F
1920 4D50 4154
1920 4942 4C45
1920 2021 2121
1921 .text
1922 .global DatenUebertragung
1924 DatenUebertragung:
1925 /* prologue: frame size=16 */
1926 0e70 A0E1 ldi r26,lo8(16)
1927 0e72 B0E0 ldi r27,hi8(16)
1928 0e74 E0E0 ldi r30,pm_lo8(1f)
1929 0e76 F0E0 ldi r31,pm_hi8(1f)
1930 0e78 0C94 0000 jmp __prologue_saves__+24
1931 1:
1932 /* prologue end (size=6) */
1933 0e7c 8091 0000 lds r24,UebertragungAbgeschlossen
1934 0e80 8823 tst r24
1935 0e82 01F4 brne .+2
1936 0e84 00C0 rjmp .L192
1937 0e86 8091 0000 lds r24,AboTimeOut
1938 0e8a 9091 0000 lds r25,(AboTimeOut)+1
1939 0e8e 0E94 0000 call CheckDelay
1940 0e92 8823 tst r24
1941 0e94 01F0 breq .L194
1942 0e96 1092 0000 sts (Display_Interval)+1,__zero_reg__
1943 0e9a 1092 0000 sts Display_Interval,__zero_reg__
1944 0e9e 1092 0000 sts (DebugDataIntervall)+1,__zero_reg__
1945 0ea2 1092 0000 sts DebugDataIntervall,__zero_reg__
1946 0ea6 1092 0000 sts (Intervall3D)+1,__zero_reg__
1947 0eaa 1092 0000 sts Intervall3D,__zero_reg__
1948 .L194:
1949 0eae 8091 0000 lds r24,Display_Interval
1950 0eb2 9091 0000 lds r25,(Display_Interval)+1
1951 0eb6 892B or r24,r25
1952 0eb8 01F0 breq .L197
1953 0eba 8091 0000 lds r24,Display_Timer
1954 0ebe 9091 0000 lds r25,(Display_Timer)+1
1955 0ec2 0E94 0000 call CheckDelay
1956 0ec6 8823 tst r24
1957 0ec8 01F4 brne .L196
1958 .L197:
1959 0eca 8091 0000 lds r24,DebugDisplayAnforderung
1960 0ece 8823 tst r24
1961 0ed0 01F4 brne .+2
1962 0ed2 00C0 rjmp .L195
1963 .L196:
1964 0ed4 8091 0000 lds r24,UebertragungAbgeschlossen
1965 0ed8 8823 tst r24
1966 0eda 01F4 brne .+2
1967 0edc 00C0 rjmp .L195
1968 0ede 8091 0000 lds r24,DisplayLine
1969 0ee2 00E0 ldi r16,lo8(DisplayBuff)
1970 0ee4 10E0 ldi r17,hi8(DisplayBuff)
1971 0ee6 8430 cpi r24,lo8(4)
1972 0ee8 00F0 brlo .L198
1973 0eea 0E94 0000 call Menu
1974 0eee 80E5 ldi r24,lo8(80)
1975 0ef0 90E0 ldi r25,hi8(80)
1976 0ef2 9F93 push r25
1977 0ef4 8F93 push r24
1978 0ef6 1F93 push r17
1979 0ef8 0F93 push r16
1980 0efa 81E0 ldi r24,lo8(1)
1981 0efc 8F93 push r24
1982 0efe 8F93 push r24
1983 0f00 88E4 ldi r24,lo8(72)
1984 0f02 8F93 push r24
1985 0f04 0E94 0000 call SendOutData
1986 0f08 2DB7 in r18,__SP_L__
1987 0f0a 3EB7 in r19,__SP_H__
1988 0f0c 295F subi r18,lo8(-(7))
1989 0f0e 3F4F sbci r19,hi8(-(7))
1990 0f10 2DBF out __SP_L__,r18
1991 0f12 00C0 rjmp .L199
1992 .L198:
1993 0f14 1092 0000 sts DispPtr,__zero_reg__
1994 0f18 80E0 ldi r24,lo8(__c.0)
1995 0f1a 90E0 ldi r25,hi8(__c.0)
1996 0f1c 9F93 push r25
1997 0f1e 8F93 push r24
1998 0f20 80E0 ldi r24,lo8(pm(Menu_Putchar))
1999 0f22 90E0 ldi r25,hi8(pm(Menu_Putchar))
2000 0f24 9F93 push r25
2001 0f26 8F93 push r24
2002 0f28 E091 0000 lds r30,_printf_P
2003 0f2c F091 0000 lds r31,(_printf_P)+1
2004 0f30 0995 icall
2005 0f32 84E1 ldi r24,lo8(20)
2006 0f34 90E0 ldi r25,hi8(20)
2007 0f36 9F93 push r25
2008 0f38 8F93 push r24
2009 0f3a 1F93 push r17
2010 0f3c 0F93 push r16
2011 0f3e 81E0 ldi r24,lo8(1)
2012 0f40 90E0 ldi r25,hi8(1)
2013 0f42 9F93 push r25
2014 0f44 8F93 push r24
2015 0f46 80E0 ldi r24,lo8(DisplayLine)
2016 0f48 90E0 ldi r25,hi8(DisplayLine)
2017 0f4a 9F93 push r25
2018 0f4c 8F93 push r24
2019 0f4e 82E0 ldi r24,lo8(2)
2020 0f50 8F93 push r24
2021 0f52 81E0 ldi r24,lo8(1)
2022 0f54 8F93 push r24
2023 0f56 88E4 ldi r24,lo8(72)
2024 0f58 8F93 push r24
2025 0f5a 0E94 0000 call SendOutData
2026 0f5e 8091 0000 lds r24,DisplayLine
2027 0f62 982F mov r25,r24
2028 0f64 8F5F subi r24,lo8(-(1))
2029 0f66 8093 0000 sts DisplayLine,r24
2030 0f6a 2DB7 in r18,__SP_L__
2031 0f6c 3EB7 in r19,__SP_H__
2032 0f6e 215F subi r18,lo8(-(15))
2033 0f70 3F4F sbci r19,hi8(-(15))
2034 0f72 2DBF out __SP_L__,r18
2035 0f74 9430 cpi r25,lo8(4)
2036 0f76 00F0 brlo .L199
2037 0f78 1092 0000 sts DisplayLine,__zero_reg__
2038 .L199:
2039 0f7c 8091 0000 lds r24,Display_Interval
2040 0f80 9091 0000 lds r25,(Display_Interval)+1
2041 0f84 0E94 0000 call SetDelay
2042 0f88 9093 0000 sts (Display_Timer)+1,r25
2043 0f8c 8093 0000 sts Display_Timer,r24
2044 0f90 1092 0000 sts DebugDisplayAnforderung,__zero_reg__
2045 .L195:
2046 0f94 8091 0000 lds r24,DebugDisplayAnforderung1
2047 0f98 8823 tst r24
2048 0f9a 01F0 breq .L201
2049 0f9c 8091 0000 lds r24,UebertragungAbgeschlossen
2050 0fa0 8823 tst r24
2051 0fa2 01F0 breq .L201
2052 0fa4 0E94 0000 call Menu
2053 0fa8 80E5 ldi r24,lo8(80)
2054 0faa 90E0 ldi r25,hi8(80)
2055 0fac 9F93 push r25
2056 0fae 8F93 push r24
2057 0fb0 80E0 ldi r24,lo8(DisplayBuff)
2058 0fb2 90E0 ldi r25,hi8(DisplayBuff)
2059 0fb4 9F93 push r25
2060 0fb6 8F93 push r24
2061 0fb8 21E0 ldi r18,lo8(1)
2062 0fba 30E0 ldi r19,hi8(1)
2063 0fbc 3F93 push r19
2064 0fbe 2F93 push r18
2065 0fc0 80E0 ldi r24,lo8(MaxMenue)
2066 0fc2 90E0 ldi r25,hi8(MaxMenue)
2067 0fc4 9F93 push r25
2068 0fc6 8F93 push r24
2069 0fc8 3F93 push r19
2070 0fca 2F93 push r18
2071 0fcc 80E0 ldi r24,lo8(MenuePunkt)
2072 0fce 90E0 ldi r25,hi8(MenuePunkt)
2073 0fd0 9F93 push r25
2074 0fd2 8F93 push r24
2075 0fd4 83E0 ldi r24,lo8(3)
2076 0fd6 8F93 push r24
2077 0fd8 81E0 ldi r24,lo8(1)
2078 0fda 8F93 push r24
2079 0fdc 8CE4 ldi r24,lo8(76)
2080 0fde 8F93 push r24
2081 0fe0 0E94 0000 call SendOutData
2082 0fe4 1092 0000 sts DebugDisplayAnforderung1,__zero_reg__
2083 0fe8 8DB7 in r24,__SP_L__
2084 0fea 9EB7 in r25,__SP_H__
2085 0fec 0F96 adiw r24,15
2086 0fee 8DBF out __SP_L__,r24
2087 .L201:
2088 0ff0 8091 0000 lds r24,GetVersionAnforderung
2089 0ff4 8823 tst r24
2090 0ff6 01F0 breq .L202
2091 0ff8 8091 0000 lds r24,UebertragungAbgeschlossen
2092 0ffc 8823 tst r24
2093 0ffe 01F0 breq .L202
2094 1000 8AE0 ldi r24,lo8(10)
2095 1002 90E0 ldi r25,hi8(10)
2096 1004 9F93 push r25
2097 1006 8F93 push r24
2098 1008 80E0 ldi r24,lo8(VersionInfo)
2099 100a 90E0 ldi r25,hi8(VersionInfo)
2100 100c 9F93 push r25
2101 100e 8F93 push r24
2102 1010 81E0 ldi r24,lo8(1)
2103 1012 8F93 push r24
2104 1014 8F93 push r24
2105 1016 86E5 ldi r24,lo8(86)
2106 1018 8F93 push r24
2107 101a 0E94 0000 call SendOutData
2108 101e 1092 0000 sts GetVersionAnforderung,__zero_reg__
2109 1022 2DB7 in r18,__SP_L__
2110 1024 3EB7 in r19,__SP_H__
2111 1026 295F subi r18,lo8(-(7))
2112 1028 3F4F sbci r19,hi8(-(7))
2113 102a 2DBF out __SP_L__,r18
2114 .L202:
2115 102c 8091 0000 lds r24,GetExternalControl
2116 1030 8823 tst r24
2117 1032 01F0 breq .L203
2118 1034 8091 0000 lds r24,UebertragungAbgeschlossen
2119 1038 8823 tst r24
2120 103a 01F0 breq .L203
2121 103c 8BE0 ldi r24,lo8(11)
2122 103e 90E0 ldi r25,hi8(11)
2123 1040 9F93 push r25
2124 1042 8F93 push r24
2125 1044 80E0 ldi r24,lo8(ExternControl)
2126 1046 90E0 ldi r25,hi8(ExternControl)
2127 1048 9F93 push r25
2128 104a 8F93 push r24
2129 104c 81E0 ldi r24,lo8(1)
2130 104e 8F93 push r24
2131 1050 8091 0000 lds r24,MeineSlaveAdresse
2132 1054 8F93 push r24
2133 1056 87E4 ldi r24,lo8(71)
2134 1058 8F93 push r24
2135 105a 0E94 0000 call SendOutData
2136 105e 1092 0000 sts GetExternalControl,__zero_reg__
2137 1062 8DB7 in r24,__SP_L__
2138 1064 9EB7 in r25,__SP_H__
2139 1066 0796 adiw r24,7
2140 1068 8DBF out __SP_L__,r24
2141 .L203:
2142 106a 8091 0000 lds r24,Kompass_Timer
2143 106e 9091 0000 lds r25,(Kompass_Timer)+1
2144 1072 0E94 0000 call CheckDelay
2145 1076 8823 tst r24
2146 1078 01F4 brne .+2
2147 107a 00C0 rjmp .L204
2148 107c 8091 0000 lds r24,UebertragungAbgeschlossen
2149 1080 8823 tst r24
2150 1082 01F4 brne .+2
2151 1084 00C0 rjmp .L204
2152 1086 8091 0000 lds r24,EE_Parameter+28
2153 108a 9927 clr r25
2154 108c 880F lsl r24
2155 108e 991F rol r25
2156 1090 880F lsl r24
2157 1092 991F rol r25
2158 1094 7C01 movw r14,r24
2159 1096 0027 clr r16
2160 1098 F7FC sbrc r15,7
2161 109a 0095 com r16
2162 109c 102F mov r17,r16
2163 109e 8091 0000 lds r24,IntegralNick
2164 10a2 9091 0000 lds r25,(IntegralNick)+1
2165 10a6 A091 0000 lds r26,(IntegralNick)+2
2166 10aa B091 0000 lds r27,(IntegralNick)+3
2167 10ae BC01 movw r22,r24
2168 10b0 CD01 movw r24,r26
2169 10b2 A801 movw r20,r16
2170 10b4 9701 movw r18,r14
2171 10b6 0E94 0000 call __divmodsi4
2172 10ba 3093 0000 sts (WinkelOut)+1,r19
2173 10be 2093 0000 sts WinkelOut,r18
2174 10c2 8091 0000 lds r24,IntegralRoll
2175 10c6 9091 0000 lds r25,(IntegralRoll)+1
2176 10ca A091 0000 lds r26,(IntegralRoll)+2
2177 10ce B091 0000 lds r27,(IntegralRoll)+3
2178 10d2 BC01 movw r22,r24
2179 10d4 CD01 movw r24,r26
2180 10d6 A801 movw r20,r16
2181 10d8 9701 movw r18,r14
2182 10da 0E94 0000 call __divmodsi4
2183 10de 3093 0000 sts (WinkelOut+2)+1,r19
2184 10e2 2093 0000 sts WinkelOut+2,r18
2185 10e6 8091 0000 lds r24,Parameter_UserParam1
2186 10ea 8093 0000 sts WinkelOut+4,r24
2187 10ee 8091 0000 lds r24,Parameter_UserParam2
2188 10f2 8093 0000 sts WinkelOut+5,r24
2189 10f6 88E0 ldi r24,lo8(8)
2190 10f8 90E0 ldi r25,hi8(8)
2191 10fa 9F93 push r25
2192 10fc 8F93 push r24
2193 10fe 80E0 ldi r24,lo8(WinkelOut)
2194 1100 90E0 ldi r25,hi8(WinkelOut)
2195 1102 9F93 push r25
2196 1104 8F93 push r24
2197 1106 81E0 ldi r24,lo8(1)
2198 1108 8F93 push r24
2199 110a 83E0 ldi r24,lo8(3)
2200 110c 8F93 push r24
2201 110e 8BE6 ldi r24,lo8(107)
2202 1110 8F93 push r24
2203 1112 0E94 0000 call SendOutData
2204 1116 8091 0000 lds r24,WinkelOut+6
2205 111a 2DB7 in r18,__SP_L__
2206 111c 3EB7 in r19,__SP_H__
2207 111e 295F subi r18,lo8(-(7))
2208 1120 3F4F sbci r19,hi8(-(7))
2209 1122 2DBF out __SP_L__,r18
2210 1124 8530 cpi r24,lo8(5)
2211 1126 00F0 brlo .L205
2212 1128 86E0 ldi r24,lo8(6)
2213 112a 8093 0000 sts WinkelOut+6,r24
2214 .L205:
2215 112e 83E6 ldi r24,lo8(99)
2216 1130 90E0 ldi r25,hi8(99)
2217 1132 0E94 0000 call SetDelay
2218 1136 9093 0000 sts (Kompass_Timer)+1,r25
2219 113a 8093 0000 sts Kompass_Timer,r24
2220 .L204:
2221 113e 8091 0000 lds r24,DebugDataIntervall
2222 1142 9091 0000 lds r25,(DebugDataIntervall)+1
2223 1146 892B or r24,r25
2224 1148 01F0 breq .L208
2225 114a 8091 0000 lds r24,Debug_Timer
2226 114e 9091 0000 lds r25,(Debug_Timer)+1
2227 1152 0E94 0000 call CheckDelay
2228 1156 8823 tst r24
2229 1158 01F4 brne .L207
2230 .L208:
2231 115a 8091 0000 lds r24,DebugDataAnforderung
2232 115e 8823 tst r24
2233 1160 01F0 breq .L206
2234 .L207:
2235 1162 8091 0000 lds r24,UebertragungAbgeschlossen
2236 1166 8823 tst r24
2237 1168 01F0 breq .L206
2238 116a 0E94 0000 call CopyDebugValues
2239 116e 82E4 ldi r24,lo8(66)
2240 1170 90E0 ldi r25,hi8(66)
2241 1172 9F93 push r25
2242 1174 8F93 push r24
2243 1176 80E0 ldi r24,lo8(DebugOut)
2244 1178 90E0 ldi r25,hi8(DebugOut)
2245 117a 9F93 push r25
2246 117c 8F93 push r24
2247 117e 81E0 ldi r24,lo8(1)
2248 1180 8F93 push r24
2249 1182 8F93 push r24
2250 1184 84E4 ldi r24,lo8(68)
2251 1186 8F93 push r24
2252 1188 0E94 0000 call SendOutData
2253 118c 1092 0000 sts DebugDataAnforderung,__zero_reg__
2254 1190 8DB7 in r24,__SP_L__
2255 1192 9EB7 in r25,__SP_H__
2256 1194 0796 adiw r24,7
2257 1196 8DBF out __SP_L__,r24
2258 1198 8091 0000 lds r24,DebugDataIntervall
2259 119c 9091 0000 lds r25,(DebugDataIntervall)+1
2260 11a0 0097 sbiw r24,0
2261 11a2 01F0 breq .L206
2262 11a4 0E94 0000 call SetDelay
2263 11a8 9093 0000 sts (Debug_Timer)+1,r25
2264 11ac 8093 0000 sts Debug_Timer,r24
2265 .L206:
2266 11b0 8091 0000 lds r24,Intervall3D
2267 11b4 9091 0000 lds r25,(Intervall3D)+1
2268 11b8 892B or r24,r25
2269 11ba 01F4 brne .+2
2270 11bc 00C0 rjmp .L210
2271 11be 8091 0000 lds r24,Timer3D
2272 11c2 9091 0000 lds r25,(Timer3D)+1
2273 11c6 0E94 0000 call CheckDelay
2274 11ca 8823 tst r24
2275 11cc 01F4 brne .+2
2276 11ce 00C0 rjmp .L210
2277 11d0 8091 0000 lds r24,UebertragungAbgeschlossen
2278 11d4 8823 tst r24
2279 11d6 01F4 brne .+2
2280 11d8 00C0 rjmp .L210
2281 11da 8091 0000 lds r24,EE_Parameter+28
2282 11de 9927 clr r25
2283 11e0 880F lsl r24
2284 11e2 991F rol r25
2285 11e4 880F lsl r24
2286 11e6 991F rol r25
2287 11e8 7C01 movw r14,r24
2288 11ea 0027 clr r16
2289 11ec F7FC sbrc r15,7
2290 11ee 0095 com r16
2291 11f0 102F mov r17,r16
2292 11f2 8091 0000 lds r24,IntegralNick
2293 11f6 9091 0000 lds r25,(IntegralNick)+1
2294 11fa A091 0000 lds r26,(IntegralNick)+2
2295 11fe B091 0000 lds r27,(IntegralNick)+3
2296 1202 BC01 movw r22,r24
2297 1204 CD01 movw r24,r26
2298 1206 A801 movw r20,r16
2299 1208 9701 movw r18,r14
2300 120a 0E94 0000 call __divmodsi4
2301 120e 3093 0000 sts (Data3D)+1,r19
2302 1212 2093 0000 sts Data3D,r18
2303 1216 8091 0000 lds r24,IntegralRoll
2304 121a 9091 0000 lds r25,(IntegralRoll)+1
2305 121e A091 0000 lds r26,(IntegralRoll)+2
2306 1222 B091 0000 lds r27,(IntegralRoll)+3
2307 1226 BC01 movw r22,r24
2308 1228 CD01 movw r24,r26
2309 122a A801 movw r20,r16
2310 122c 9701 movw r18,r14
2311 122e 0E94 0000 call __divmodsi4
2312 1232 3093 0000 sts (Data3D+2)+1,r19
2313 1236 2093 0000 sts Data3D+2,r18
2314 123a 2091 0000 lds r18,ErsatzKompass
2315 123e 3091 0000 lds r19,(ErsatzKompass)+1
2316 1242 4091 0000 lds r20,(ErsatzKompass)+2
2317 1246 5091 0000 lds r21,(ErsatzKompass)+3
2318 124a DA01 movw r26,r20
2319 124c C901 movw r24,r18
2320 124e 63E0 ldi r22,3
2321 1250 880F 1: lsl r24
2322 1252 991F rol r25
2323 1254 AA1F rol r26
2324 1256 BB1F rol r27
2325 1258 6A95 dec r22
2326 125a 01F4 brne 1b
2327 125c 820F add r24,r18
2328 125e 931F adc r25,r19
2329 1260 A41F adc r26,r20
2330 1262 B51F adc r27,r21
2331 1264 820F add r24,r18
2332 1266 931F adc r25,r19
2333 1268 A41F adc r26,r20
2334 126a B51F adc r27,r21
2335 126c 2091 0000 lds r18,GIER_GRAD_FAKTOR
2336 1270 3091 0000 lds r19,(GIER_GRAD_FAKTOR)+1
2337 1274 4091 0000 lds r20,(GIER_GRAD_FAKTOR)+2
2338 1278 5091 0000 lds r21,(GIER_GRAD_FAKTOR)+3
2339 127c BC01 movw r22,r24
2340 127e CD01 movw r24,r26
2341 1280 0E94 0000 call __divmodsi4
2342 1284 3093 0000 sts (Data3D+4)+1,r19
2343 1288 2093 0000 sts Data3D+4,r18
2344 128c 8091 0000 lds r24,SummeNick
2345 1290 9091 0000 lds r25,(SummeNick)+1
2346 1294 A091 0000 lds r26,(SummeNick)+2
2347 1298 B091 0000 lds r27,(SummeNick)+3
2348 129c 49E0 ldi r20,9
2349 129e B595 1: asr r27
2350 12a0 A795 ror r26
2351 12a2 9795 ror r25
2352 12a4 8795 ror r24
2353 12a6 4A95 dec r20
2354 12a8 01F4 brne 1b
2355 12aa 8093 0000 sts Data3D+6,r24
2356 12ae 8091 0000 lds r24,SummeRoll
2357 12b2 9091 0000 lds r25,(SummeRoll)+1
2358 12b6 A091 0000 lds r26,(SummeRoll)+2
2359 12ba B091 0000 lds r27,(SummeRoll)+3
2360 12be 39E0 ldi r19,9
2361 12c0 B595 1: asr r27
2362 12c2 A795 ror r26
2363 12c4 9795 ror r25
2364 12c6 8795 ror r24
2365 12c8 3A95 dec r19
2366 12ca 01F4 brne 1b
2367 12cc 8093 0000 sts Data3D+7,r24
2368 12d0 8091 0000 lds r24,Mess_Integral_Gier
2369 12d4 9091 0000 lds r25,(Mess_Integral_Gier)+1
2370 12d8 A091 0000 lds r26,(Mess_Integral_Gier)+2
2371 12dc B091 0000 lds r27,(Mess_Integral_Gier)+3
2372 12e0 29E0 ldi r18,9
2373 12e2 B595 1: asr r27
2374 12e4 A795 ror r26
2375 12e6 9795 ror r25
2376 12e8 8795 ror r24
2377 12ea 2A95 dec r18
2378 12ec 01F4 brne 1b
2379 12ee 8093 0000 sts Data3D+8,r24
2380 12f2 8EE0 ldi r24,lo8(14)
2381 12f4 90E0 ldi r25,hi8(14)
2382 12f6 9F93 push r25
2383 12f8 8F93 push r24
2384 12fa 80E0 ldi r24,lo8(Data3D)
2385 12fc 90E0 ldi r25,hi8(Data3D)
2386 12fe 9F93 push r25
2387 1300 8F93 push r24
2388 1302 81E0 ldi r24,lo8(1)
2389 1304 8F93 push r24
2390 1306 8F93 push r24
2391 1308 83E4 ldi r24,lo8(67)
2392 130a 8F93 push r24
2393 130c 0E94 0000 call SendOutData
2394 1310 8091 0000 lds r24,Intervall3D
2395 1314 9091 0000 lds r25,(Intervall3D)+1
2396 1318 0E94 0000 call SetDelay
2397 131c 9093 0000 sts (Timer3D)+1,r25
2398 1320 8093 0000 sts Timer3D,r24
2399 1324 2DB7 in r18,__SP_L__
2400 1326 3EB7 in r19,__SP_H__
2401 1328 295F subi r18,lo8(-(7))
2402 132a 3F4F sbci r19,hi8(-(7))
2403 132c 2DBF out __SP_L__,r18
2404 .L210:
2405 132e 8091 0000 lds r24,DebugTextAnforderung
2406 1332 8F3F cpi r24,lo8(-1)
2407 1334 01F0 breq .L211
2408 1336 9927 clr r25
2409 1338 04E0 ldi r16,4
2410 133a 880F 1: lsl r24
2411 133c 991F rol r25
2412 133e 0A95 dec r16
2413 1340 01F4 brne 1b
2414 1342 8050 subi r24,lo8(-(ANALOG_TEXT))
2415 1344 9040 sbci r25,hi8(-(ANALOG_TEXT))
2416 1346 40E1 ldi r20,lo8(16)
2417 1348 50E0 ldi r21,hi8(16)
2418 134a BC01 movw r22,r24
2419 134c CE01 movw r24,r28
2420 134e 0196 adiw r24,1
2421 1350 0E94 0000 call memcpy_P
2422 1354 80E1 ldi r24,lo8(16)
2423 1356 90E0 ldi r25,hi8(16)
2424 1358 9F93 push r25
2425 135a 8F93 push r24
2426 135c CE01 movw r24,r28
2427 135e 0196 adiw r24,1
2428 1360 9F93 push r25
2429 1362 8F93 push r24
2430 1364 81E0 ldi r24,lo8(1)
2431 1366 90E0 ldi r25,hi8(1)
2432 1368 9F93 push r25
2433 136a 8F93 push r24
2434 136c 80E0 ldi r24,lo8(DebugTextAnforderung)
2435 136e 90E0 ldi r25,hi8(DebugTextAnforderung)
2436 1370 9F93 push r25
2437 1372 8F93 push r24
2438 1374 82E0 ldi r24,lo8(2)
2439 1376 8F93 push r24
2440 1378 81E0 ldi r24,lo8(1)
2441 137a 8F93 push r24
2442 137c 81E4 ldi r24,lo8(65)
2443 137e 8F93 push r24
2444 1380 0E94 0000 call SendOutData
2445 1384 8FEF ldi r24,lo8(-1)
2446 1386 8093 0000 sts DebugTextAnforderung,r24
2447 138a 8DB7 in r24,__SP_L__
2448 138c 9EB7 in r25,__SP_H__
2449 138e 0B96 adiw r24,11
2450 1390 8DBF out __SP_L__,r24
2451 .L211:
2452 1392 8091 0000 lds r24,ConfirmFrame
2453 1396 8823 tst r24
2454 1398 01F0 breq .L212
2455 139a 8091 0000 lds r24,UebertragungAbgeschlossen
2456 139e 8823 tst r24
2457 13a0 01F0 breq .L212
2458 13a2 81E0 ldi r24,lo8(1)
2459 13a4 90E0 ldi r25,hi8(1)
2460 13a6 9F93 push r25
2461 13a8 8F93 push r24
2462 13aa 80E0 ldi r24,lo8(ConfirmFrame)
2463 13ac 90E0 ldi r25,hi8(ConfirmFrame)
2464 13ae 9F93 push r25
2465 13b0 8F93 push r24
2466 13b2 81E0 ldi r24,lo8(1)
2467 13b4 8F93 push r24
2468 13b6 8F93 push r24
2469 13b8 82E4 ldi r24,lo8(66)
2470 13ba 8F93 push r24
2471 13bc 0E94 0000 call SendOutData
2472 13c0 1092 0000 sts ConfirmFrame,__zero_reg__
2473 13c4 2DB7 in r18,__SP_L__
2474 13c6 3EB7 in r19,__SP_H__
2475 13c8 295F subi r18,lo8(-(7))
2476 13ca 3F4F sbci r19,hi8(-(7))
2477 13cc 2DBF out __SP_L__,r18
2478 .L212:
2479 13ce 8091 0000 lds r24,GetPPMChannelAnforderung
2480 13d2 8823 tst r24
2481 13d4 01F0 breq .L192
2482 13d6 8091 0000 lds r24,UebertragungAbgeschlossen
2483 13da 8823 tst r24
2484 13dc 01F0 breq .L192
2485 13de 84E3 ldi r24,lo8(52)
2486 13e0 90E0 ldi r25,hi8(52)
2487 13e2 9F93 push r25
2488 13e4 8F93 push r24
2489 13e6 80E0 ldi r24,lo8(PPM_in)
2490 13e8 90E0 ldi r25,hi8(PPM_in)
2491 13ea 9F93 push r25
2492 13ec 8F93 push r24
2493 13ee 81E0 ldi r24,lo8(1)
2494 13f0 8F93 push r24
2495 13f2 8F93 push r24
2496 13f4 80E5 ldi r24,lo8(80)
2497 13f6 8F93 push r24
2498 13f8 0E94 0000 call SendOutData
2499 13fc 1092 0000 sts GetPPMChannelAnforderung,__zero_reg__
2500 1400 8DB7 in r24,__SP_L__
2501 1402 9EB7 in r25,__SP_H__
2502 1404 0796 adiw r24,7
2503 1406 8DBF out __SP_L__,r24
2504 .L192:
2505 /* epilogue: frame size=16 */
2506 1408 E6E0 ldi r30,6
2507 140a C05F subi r28,-16
2508 140c 0C94 0000 jmp __epilogue_restores__+24
2509 /* epilogue end (size=4) */
2510 /* function DatenUebertragung size 720 (710) */
2512 .comm RxdBuffer,175,1
2513 .comm Debug_Timer,2,1
2514 .comm Kompass_Timer,2,1
2515 .comm MotorTest,16,1
2516 .comm DebugOut,66,1
2517 .comm WinkelOut,8,1
2518 .comm Data3D,14,1
2519 .comm ExternControl,11,1
2520 .comm VersionInfo,10,1
2521 .comm TxdBuffer,175,1
2522 .comm ConfirmFrame,1,1
2523 .comm Display_Timer,2,1
2524 .comm Timer3D,2,1
2525 /* File "uart.c": code 2582 = 0x0a16 (2491), prologues 47, epilogues 44 */
DEFINED SYMBOLS
*ABS*:00000000 uart.c
C:\Temp/ccwXk8Fz.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccwXk8Fz.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccwXk8Fz.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccwXk8Fz.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccwXk8Fz.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccwXk8Fz.s:14 .progmem.data:00000000 ANALOG_TEXT
C:\Temp/ccwXk8Fz.s:52 .bss:00000000 ReceiverUpdateModeActive
C:\Temp/ccwXk8Fz.s:58 .bss:00000001 AboTimeOut
C:\Temp/ccwXk8Fz.s:64 .bss:00000003 Display_Interval
C:\Temp/ccwXk8Fz.s:70 .bss:00000005 Intervall3D
C:\Temp/ccwXk8Fz.s:76 .bss:00000007 DebugDataIntervall
C:\Temp/ccwXk8Fz.s:82 .data:00000000 MeineSlaveAdresse
C:\Temp/ccwXk8Fz.s:87 .data:00000001 PcZugriff
C:\Temp/ccwXk8Fz.s:92 .data:00000002 DebugTextAnforderung
C:\Temp/ccwXk8Fz.s:99 .bss:00000009 PC_MotortestActive
C:\Temp/ccwXk8Fz.s:105 .bss:0000000a PC_DebugTimeout
C:\Temp/ccwXk8Fz.s:111 .bss:0000000b RxDataLen
C:\Temp/ccwXk8Fz.s:117 .bss:0000000c pRxData
C:\Temp/ccwXk8Fz.s:123 .bss:0000000e AnzahlEmpfangsBytes
C:\Temp/ccwXk8Fz.s:129 .bss:0000000f CntCrcError
C:\Temp/ccwXk8Fz.s:135 .data:00000003 UebertragungAbgeschlossen
C:\Temp/ccwXk8Fz.s:142 .bss:00000010 NeueKoordinateEmpfangen
C:\Temp/ccwXk8Fz.s:148 .bss:00000011 NeuerDatensatzEmpfangen
C:\Temp/ccwXk8Fz.s:154 .bss:00000012 SioTmp
C:\Temp/ccwXk8Fz.s:160 .bss:00000013 DisplayLine
C:\Temp/ccwXk8Fz.s:166 .bss:00000014 GetPPMChannelAnforderung
C:\Temp/ccwXk8Fz.s:172 .bss:00000015 GetVersionAnforderung
C:\Temp/ccwXk8Fz.s:178 .bss:00000016 DebugDataAnforderung
C:\Temp/ccwXk8Fz.s:184 .bss:00000017 DebugDisplayAnforderung
C:\Temp/ccwXk8Fz.s:190 .bss:00000018 DebugDisplayAnforderung1
C:\Temp/ccwXk8Fz.s:196 .bss:00000019 GetExternalControl
.bss:0000001a ptr.6
C:\Temp/ccwXk8Fz.s:202 .text:00000000 __vector_22
*COM*:000000af TxdBuffer
C:\Temp/ccwXk8Fz.s:198 .bss:0000001c crc.1
C:\Temp/ccwXk8Fz.s:256 .bss:0000001e crc1.2
C:\Temp/ccwXk8Fz.s:257 .bss:0000001f crc2.3
C:\Temp/ccwXk8Fz.s:258 .bss:00000020 buf_ptr.4
C:\Temp/ccwXk8Fz.s:259 .bss:00000021 UartState.5
C:\Temp/ccwXk8Fz.s:263 .text:0000006c __vector_20
*COM*:000000af RxdBuffer
C:\Temp/ccwXk8Fz.s:494 .text:00000260 AddCRC
C:\Temp/ccwXk8Fz.s:550 .text:000002c0 SendOutData
C:\Temp/ccwXk8Fz.s:750 .text:00000438 Decode64
C:\Temp/ccwXk8Fz.s:863 .text:0000050c BearbeiteRxDaten
*COM*:00000010 MotorTest
*COM*:0000000a VersionInfo
*COM*:0000000b ExternControl
*COM*:00000001 ConfirmFrame
*COM*:00000002 Timer3D
C:\Temp/ccwXk8Fz.s:1850 .text:00000dd8 uart_putchar
C:\Temp/ccwXk8Fz.s:1866 .text:00000de8 UART_Init
*COM*:00000002 Debug_Timer
*COM*:00000002 Kompass_Timer
C:\Temp/ccwXk8Fz.s:1919 .progmem.data:00000200 __c.0
C:\Temp/ccwXk8Fz.s:1924 .text:00000e70 DatenUebertragung
*COM*:00000002 Display_Timer
*COM*:00000008 WinkelOut
*COM*:00000042 DebugOut
*COM*:0000000e Data3D
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
LcdClear
ServoActive
__prologue_saves__
__epilogue_restores__
KompassValue
Mixer
MixerTable_WriteToEEProm
SetDefaultParameter
GetActiveParamSet
ParamSet_ReadFromEEProm
EE_Parameter
MotorenEin
ParamSet_WriteToEEProm
__mulsi3
Umschlag180Nick
Umschlag180Roll
Piep
LipoDetection
LIBFC_ReceiverInit
PPM_in
I2C_ReadBLConfig
BLConfig
I2C_WriteBLConfig
LIBFC_GetCPUType
SetDelay
RemoteKeys
MenuePunkt
CheckDelay
DisplayBuff
Menu
DispPtr
Menu_Putchar
_printf_P
MaxMenue
IntegralNick
__divmodsi4
IntegralRoll
Parameter_UserParam1
Parameter_UserParam2
CopyDebugValues
ErsatzKompass
GIER_GRAD_FAKTOR
SummeNick
SummeRoll
Mess_Integral_Gier
memcpy_P
/branches/v0.90e_Ernstl_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.90e_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.90e_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/ccDTbOkA.s:3 *ABS*:0000003f __SREG__
C:\Temp/ccDTbOkA.s:4 *ABS*:0000003e __SP_H__
C:\Temp/ccDTbOkA.s:5 *ABS*:0000003d __SP_L__
C:\Temp/ccDTbOkA.s:6 *ABS*:00000000 __tmp_reg__
C:\Temp/ccDTbOkA.s:7 *ABS*:00000001 __zero_reg__
C:\Temp/ccDTbOkA.s:13 .text:00000000 User_Receiver_Init
C:\Temp/ccDTbOkA.s:23 .text:00000002 User_RX_Parser
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
/branches/v0.90e_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.90e_Ernstl_4-Motoren+Sexpander/version.txt
0,0 → 1,569
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
V0.61 - V0.63 H.Buss 27.09.2007
- Poti 4 und Kanal 8 werden im Menü angezeigt
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt
- Analog.c: Aktuell_ax korrigiert
- auf 32 Debug-Kanäle erweitert
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar
- leichte Anpassungen im Gier - Geschwindigkeit und Drift
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird
- die PPM-Ausgänge liegen wieder an den Pins an
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an
- Sticksignale werden präziser ausgewertet
- Stick-Kanäle werden ans Kopter-Tool übertragen
- Es muss die Version V1.47 des Kopter-Tool verwendet werden
- Die Settings werden auf Default zurückgesetzt
- am Piepen kann man die Fehlerart unterscheiden
1. einzelnes Piepen beim Einschalten und Kalibrieren
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall
3. schnelleres Intervall mindestens 1 Sek -> Akku
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört
V0.64 H.Buss 30.09.2007
- beim Gieren wurden die Achsen nicht hart genug geregelt
V0.65a H.Buss 15.10.2007
- Integral im Mischer wieder integriert
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100
- ACC/Gyro Abgleich auch bei HH
 
V0.66a H.Buss 3.11.2007
- Messwertverarbeitung aus dem Analog-Interrupt entfernt
- Analogmessung hängt jetzt am FC-Timing
- Looping-Stick-Hysterese eingebaut
- Looping-180°-Umschlag einstellbar
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll
- Lageregelung nach ACC-Sensor verbessert
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage
- Gyrodriftkompensation überarbeitet
- Bug in der Gier-Stick-Berechnung behoben
- Gyro-Messung auf 1kHz beschleunigt
V0.67a H.Buss 16.11.2007
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode)
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus
- Feinabstimmung
- Beim HH-Modus gab es noch Bugs
 
V0.67e H.Buss 29.11.2007
- Parameter: Dynamic Stability und Driftfaktor eingeführt
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen
- Kompatibilität zum Koptertool erhöht
 
V0.67f H.Buss 04.12.2007
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts)
V0.68a I.Busker 28.12.2007
- SPI.c & SPI.h ins Projekt aufgenommen
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden
 
V0.68c H.Buss 05.01.2008
- Stickauswertung verbessert -> träger und präziser
- Alle Settings angepasst
 
V0.69e H.Buss 05.05.2008
- kleinere Bugs beseitigt
- Schneller Sinkflug jetzt möglich
- Min- und Maxgas in den Settings geändert
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert
V0.69h H.Buss 21.05.2008
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden
- SenderOkay auch an das Naviboard übertragen
- Bessere Parameter bei Senderausfall
V0.69j H.Buss 30.05.2008
- Höhere Präzision der Achsenkopplung
 
V0.69k H.Buss 31.05.2008
- Bug in SPI.C behoben
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte
 
V0.69L H.Buss 14.06.2008
- feinere Cam-Servo-Auflösung
V0.70a H.Buss 01.07.2008
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich
 
V0.70b H.Buss 14.07.2008
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge)
- eigene Parameter für GPS-Naviboard
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8)
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi...
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt
- KopterTool-Kompatibilität auf 8 erhöht
V0.70c H.Buss 30.07.2008
- Parameter der Datenfusion leicht modifiziert
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85)
- MaxStick wird auf 100 begrenzt
 
V0.70d H.Buss 02.08.2008
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an
0.71b: H.Buss 19.10.2008
Kommunikation zum Navi erweitert:
- Beeptime jetzt 32Bit
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt
0.71c: H.Buss 20.10.2008
- LoopConfig heisst jetzt BitConfig
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab.
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt
 
0.71f: H.Buss 15.11.2008
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1
- VersionInfo.NaviKompatibel eingeführt
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt
- Luftdruckwert wird an das Navi übertragen
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter
- Debugdaten können jetzt mit 'f' gepollt werden
0.71g: Gregor 09.12.2008
- Kommunikation überarbeitet
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands
0.71h: H.Buss 15.12.2008
- Freigegebene Version
- NaviAngleLimitation als Parameter zum Navi implementiert
- Antwort auf CMD: 't' entfernt
0.72d: H.Buss 22.01.2009
- OCTO als Compilerschalter
- Unterstützung der FC 2.0 (ME)
- GYRO_D eingeführt
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung
0.72e: H.Buss 27.01.2009
- die 0.72d hatte kein Integral im Gier
- Parameter eingeführt:
EE_Parameter.NaviGpsPLimit
EE_Parameter.NaviGpsILimit
EE_Parameter.NaviGpsDLimit
EE_Parameter.NaviPH_LoginTime
EE_Parameter.AchsKopplung2
EE_Parameter.CouplingYawCorrection
 
0.72f: H.Buss 28.01.2009
- Bug im Ersatzkompass entfernt
 
0.72h: H.Buss 05.02.2009
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt
- Achsentkopplung weiter verbessert
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt
 
0.72i: H.Buss 07.02.2009
- Abtastrate von 1kHz auf 2kHz erhöht
 
0.72j: H.Buss 09.02.2009
- neue Implementierung der Servoausgänge
 
0.72k: H.Buss 10.02.2009
- Abtastrate auf 5kHz erhöht
 
0.72L: H.Buss 13.02.2009
- Signalfilterung überarbeitet
- OCTO2 implementiert
 
0.72M: H.Buss 13.02.2009
- Code Cleanup
 
0.72o: H.Buss 24.02.2009
- Abtastrate auf 2kHz
- HW-Version an Navi
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik
- Auswerteroutine für Spectrum-Satteliten implementiert
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd)
0.72p: H.Buss 01.03.2009
- Octo3 erstellt
- Analogwerte umbenannt
 
0.73a-d: H.Buss 05.04.2009
- MixerTabelle implementiert
- I2C-Bus auf bis zu 12 Motoren erweitert
- die Busfehler der BL-Regler werden im Menü angezeigt
- Revision der MixerTabelle eingeführt
- MixerTabelle wird bei Parameterreset neu initialisiert
- Motortest auf [12] erweitert
- Motorschalter nicht mehr 3-Stufig
 
0.74a
- Datenfusion im Flug auch, wenn ACC-Z < 512
- Wert für die Luftdruck-Messbereichserweiterung abgefangen
 
0.74d
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts
0.75a G.Stobrawa 22.5.2009
- Extern Control also received from NC via SPI
 
0.75b H.Buss 27.05.2009
- Spektrum-Singale schalten den PPM-Eingang aus
- max. 2 Sekunden nach dem Start auf die BL-Regler warten
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl
- EE_DATENREVISION auf 76 erhöht
- Servo:
- Roll-Servo für FC ME implementiert
- Update-Cmd stoppt Servos
- Servos werden erst nach dem ersten Kalibrieren aktiviert
 
0.75c G.Stobrawa 25.7.2009
- Übertragung der Servo-Settings zur NC
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S)
0.75d H.Buss 13.8.2009
- RC-Routine: Empfangsausfall soll sicherer erkannt werden
- Zellenerkennung nun auch beim Speichern der Settings
- Warnungs-Blinkmaske auch bei Empfangsausfall
 
0.75e H.Buss 18.8.2009
- LED-Blinken kann an die Motoren gekoppelt werden
- Feinabstimmung des Höhenreglers
0.75f H.Buss 27.8.2009
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler
- leichte Modifikation der RC-Empfangroutine
 
0.75g H.Buss 31.08.2009
- die Akkuspannung geht jetzt antiproportional ins Gas ein
 
0.75h H.Buss 3.09.2009
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas
 
0.75i H.Buss 7.09.2009
- GpsZ vom Navi zur FC für den Höhenregler
- "hoovergas-Variation" als Parameter
- Kompatibilität zu NC und PC erhöht
 
0.75j H.Buss 17.09.2009
- Laufzeitzähler eingebaut
 
0.75k H.Buss 22.09.2009
- zweite Variante (Gregor) der Höhenregelung implementiert
- umschaltbare RC-Routine
 
0.75L H.Buss 23.09.2009
- SollHoehe und Gas geht nun auch an die NC
 
0.75M H.Buss 29.09.2009
- Spektrum-Timing wird nun überwacht
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt
0.75N H.Buss 29.09.2009
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler
- Gyro_Gier_P und Gyro_Gier_I eingeführt
- I2C_fehler-Zähler jetzt in den Analogdaten
 
0.75o H.Buss 01.10.2009
- der Höhenregler wird jetzt nur alle 10ms bearbeitet
- Baro-Messbereichserweiterung auch bei Poti als Sollwert
 
0.76d H.Buss 10.10.2009
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen
 
0.76e H.Buss 27.10.2009
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht
- S3D-ACT-Summensignal als Compilerschalter
 
0.76f H.Buss 05.11.2009
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt
0.76g H.Buss 10.11.2009
- Casting-Fehler in der Gas-Berechnung
 
0.77a H.Buss 11.11.2009
- Erweiterung auf 12 Kanäle
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert
- Servos3-5 einstellbar
- neues Kommando "f" -> schaltet auf anderen Parametersatz um
 
0.77b H.Buss 09.12.2009
- JetiBox: Menü wird übertragen
- neu: FCFlags |= FCFLAG_I2CERR;
- LED-Warn-Blinken nun mit festem Timing und abschaltbar
0.77c H.Buss 07.01.2010
- zwei weitere Spektrum-Varianten implementiert
 
0.77d H.Buss 25.01.2010
- Strom-Messung eingebaut
0.78a H.Buss 03.02.2010
- Bugfix: Settingsumschaltung im Flug
 
0.78b H.Buss
- veröffentlichte Version
 
0.78c H.Buss + G.Stobrawa 22.2.2010
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0
- Theoretischer Variablenüberlauf bei Vario-Höhenregler
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv
- LED-Schwellwerte fürs Blinken waren unterschiedlich
 
0.78c H.Buss + G.Stobrawa 04.3.2010
- Code cosmetics
 
0.78f H.Buss + I.Busker 23.3.2010
- Unterstützung für Jeti-Expander
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox
- BL-Timeout beim Start erhöht
 
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010
- Motoren Starten nicht ohne Kalibrierung
- Unterstützung der BL2.0-Regler
- statt 8 nun 10 Bit Auflösung der Lageregekung
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool
- Parametersätze werden per I2C an die BL-Regler durchgereicht
- "Care-Free" implementiert
- Freie Belegung der "Vorne"-Richtung
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt
- #define RECEIVER_SPEKTRUM_EXP eingeführt
- #define SWITCH_LEARNS_CAREFREE eingeführt
- Schwerpunktanzeige in den 3D-Daten
- Checksummen gesicherte Datenablage im EEProm
- Fehlerdiagnose implementiert (Wiki: ErrorCodes)
- ErrorCode aufs Jeti-Display
 
- JetiMenü: bis acht Temperaturen der BL-Regler
- GPSInfo.Speed im Jeti-Display
- Compass-Richtung nun im Jeti-menü
 
- diverse Änderungen im Höhenregler
- P wirkt schwächer
- D wirkt stärker
- Anpassung der Höhenregelung auf Level des Hoovergases
- AccZ schneller nachführen
 
Parameter modifiziert:
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30
- EE_Parameter.Hoehe_HoverBand = 8; // war 5
- Notgas = 45
- NotgasZeit = 90
- Beginnersetting: EE_Parameter.DynamicStability = 70;
- Neu: GyroStability = 6
- GPS-Login-Time auf 2 reduziert
 
0.80e H.Buss 02.08.2010
- MK3Mag ohne NC ging nicht
 
0.80f H.Buss 04.08.2010
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert
 
0.80g H.Buss 11.08.2010
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert
 
0.80h H.Buss 30.08.2010
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist
 
0.82a H.Buss 08.11.2010
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten
- ServoManualControlSpeed - Verlangsamt das Cam-Servo
- CamOrientation - für verdrehte Kamera-Servos
- Position der Status-Bits verändert
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben
- jeti update command 'j' added
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller
- Waypont-Events z.B. zum Triggern der Kamera
- Gyro-Sytbility: Werte bis 16 möglich
 
0.82b H.Buss 08.12.2010
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128)
 
0.84a H.Buss 21.03.2011 (Release: 30.03.2011)
- nur starten, wenn NC_ErrorCode = 0
- Beeptime von NC auch beim Kalibrieren durchlassen
- Varible "JetiBeep" eingeführt
- Kompass-Winkelvorgabe von NaviControl -> POI
- Piepen beim Umschalten von CareFree
- Compass-Routinen überarbeitet
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst
- Defaultreceiver ist RECEIVER_JETI
- GPS-Operation-Radius per default auf 245m bzw. 100%
- Höhenvorgabe im Vario-Mode durch Waypoints
- bei laufenden Motoren keine neuen Settings annehmen
- immer einmal Carefree Beepen nach dem Kalibrieren
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel
 
0.86a H.Buss 13.09.2011
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen
- GPS-Sollwertverschiebung
- Empfangs-Piepen unterdrücken -> einstellbar
- MotorSmooth einstellbar
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position
- Coming Home mit Höhenvorgabe
- Coming Home als Failsafe
- Einführung des GPS-Characters (- / W H D P)
- Klartext bei den Jeti-Fehlermeldungen
- Jeti-Beep "3*kurz" bei NC-Errors
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert
- GPS-Angle limit von 100 auf 140
- GPS-I-Limit von 75 auf 85
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen;
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.)
- Error-Text auch im virtuellen Display des Koptertools
- virtuelles LCD-Menü:
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt.
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart
- ACC Correction eingeführt
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden
- neue Fehlermeldungen:
"No NC communicat", // 9
"GPS Fix lost ", // 21
"Magnet Error ", // 22
"Motor restart ", // 23
"BL Limitation " // 24
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt
- Ausbau der HoTT-Telemetrie
- Variable "KompassRichtung" entfernt
- ErsatzKompassInGrad sinvoll genutzt
- HoTT-Update per Uart-Durchschleifen
- AltitudeSetpointTrimming eingeführt
- Vario-Anzeige für HoTT
- Verhindern eines Überlaufs im Vario
- echter Varioton auch ohne Vario-Höhenregler
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war
- KompassFusion wird jetzt getrennt von der NC berechnet
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal"
- MagnetError kann man in der Startphase ignorieren
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC
- Einzelströme nun auch bei HoTT angezeigt
0.86b H.Buss 20.09.2011
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann
- grüne LED ging aus - gefixt
- K1-K8 wurden im LCD mit 0-7 bezeichnet
 
0.86c H.Buss 22.09.2011
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti
- Neuer SPI-Block 'SPI_MISC'
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert
- '.' im Vario-Höhenregler
 
0.86d H.Buss 26.09.2011
- Analog.c: Vario Überlauf anders verhinden
- Poti1-6 auch im HoTT-Display
 
0.88 H.Buss 12.12.2011 - 26.03.2012
- Failsafe-Kanal
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC)
- Option: Failsafe-Sinkflug xx% Schwebegas
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an)
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging"
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen
- das sbus-protokoll implementiert (nur FC2.1)
- Schaltkanal auf Servo-Ausgang
- Filter auf den Ausgängen der Servos
- Option: Failsafe-Sinkflug xx% Schwebegas
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude"
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann
- Kompassrichtung neu merken, wenn CF geschaltet wird
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert
 
0.88M H.Buss 15.05.2012
- HoTT V4
- Kamera-Servo beim Kalibrieren weiter laufen lassen.
- Error 30: no GPS fix bei Start
- echter MotorSchalter
 
0.88n H.Buss 06.07.2012
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz
 
0.90 H.Buss 04.03.2013
- Anzeige WP x/Y in der HoTT-Telemetrie
- Schalter und WP-Event gleichzeitig
- Photo-Auslösung als Entfernungsintervalle
- Jeti +
- Kamera-Neitung als Integral
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war
- Auswahl:Speak-All nun in der KopterTool-Config
0.90e H.Buss 04.03.2013
- Parameter_ServoRollComp jetzt auf Poti /Kompatibilität auf 93 erhöht)
 
0.90e Ernstl 4-Motoren und Sexpander für DX7 07.04.2013
- Aktivierung der Sexpanderunterstützung