/branches/MergedVersionsByOsiair/alpha/v064JokoGPSNick666MM_1_1/_Settings.h |
---|
0,0 → 1,50 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Testmodi |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define MOTOR_OFF 0 |
#define MOTOR_TEST 0 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Abstimmung |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define ACC_AMPLIFY 16 |
#define FAKTOR_P 1 |
#define FAKTOR_I 0.0001 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Debug-Interface |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein? |
#define MIN_DEBUG_INTERVALL 500 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Sender |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#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 |
// +++++++++++++++++++++++++++++++ |
// + Getestete Settings: |
// +++++++++++++++++++++++++++++++ |
// Setting: Kamera |
// Stick_P:3 |
// Stick_D:0 |
// Gyro_P: 175 |
// Gyro_I: 175 |
// Ki_Anteil: 10 |
// +++++++++++++++++++++++++++++++ |
// + Getestete Settings: |
// +++++++++++++++++++++++++++++++ |
// Setting: Normal |
// Stick_P:2 |
// Stick_D:8 |
// Gyro_P: 80 |
// Gyro_I: 150 |
// Ki_Anteil: 5 |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/Flight-Ctrl_MEGA644_V0_64.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>Flight-Ctrl_MEGA644_V0_64</ProjectName><Created>19-Aug-2007 14:38:13</Created><LastEdit>15-Oct-2007 19:44:55</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>19-Aug-2007 14:38:13</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>Flight-Ctrl_MEGA644_V0_64.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>E:\hubi\ufo\mickrokopter\eigene versionen\Kompass + GPS\Flight-Ctrl_V0_64_3_GPS_work_Jochenaccvonhand\</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>main.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>compass.c</SOURCEFILE><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><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>compass.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>0</LIST><MAP>0</MAP><OUTPUTFILENAME>Flight-Ctrl_MEGA644_V0_60.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -O0 -fsigned-char</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20070525\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20070525\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>compass.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>compass.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>fc.c</FileName><Status>1</Status></File00003></Files><Workspace><File00000><Position>346 108 878 484</Position><LineCol>155 3</LineCol></File00000><File00001><Position>355 114 901 482</Position><LineCol>0 0</LineCol></File00001><File00002><Position>377 136 923 504</Position><LineCol>0 0</LineCol></File00002><File00003><Position>336 71 1048 624</Position><LineCol>834 19</LineCol><State>Maximized</State></File00003></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/Flight-Ctrl_MEGA644_V0_64.hex |
---|
0,0 → 1,2450 |
:100000000C94F9030C9416040C9416040C94160426 |
:100010000C9416040C9416040C9416040C941604F8 |
:100020000C9416040C946A0E0C9416040C9416048A |
:100030000C94C21C0C9416040C9416040C94160414 |
:100040000C9416040C9416040C94110F0C942D1897 |
:100050000C9452070C9416040C9443060C9416044A |
:100060000C9414100C9416040C94001C0C9416049C |
:100070007C0781078B0790071E0832084E087F080F |
:1000800085080A0B7D0B7D0B7D0B350B160B7D0B4D |
:100090007D0B7D0B610B610B610B610B610B390BF0 |
:1000A0007D0B7D0B280B7D0B310B3D10951037110F |
:1000B000DB11F8111B12411228136714AB140C1535 |
:1000C0006215B61532168C16ED1611174717A317C1 |
:1000D000E117191C1E1C2F1C3D1C4A1C421C4A1CEB |
:1000E0005E1C0A0A0D004E65757472616C004865ED |
:1000F0006164696E67486F6C64000A0D53746575BE |
:100100006572756E673A20004F4B0A0D000A0D416B |
:1001100062676C65696368204C75667464727563A8 |
:100120006B73656E736F722E2E000A0D4B616C69D6 |
:10013000627269657265204B6F6D70617373000A3E |
:100140000D42656E75747A6520506172616D6574DB |
:1001500065727361747A202564000A0D496E6974B2 |
:100160002E20454550524F4D3A2047656E657269C5 |
:100170006572652044656661756C742D50617261AD |
:100180006D657465722E2E2E000A0D3D3D3D3D3D80 |
:100190003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D8F |
:1001A0003D3D3D3D3D3D3D3D3D000A0D466C696791 |
:1001B0006874436F6E74726F6C0A0D486172647775 |
:1001C0006172653A25642E25640A0D536F66747753 |
:1001D0006172653A5625642E256420002E005A5F10 |
:1001E0004F66667365743A202025336900595F4F66 |
:1001F00066667365743A202025336900585F4F6640 |
:10020000667365743A2020253369004D4D33206BA9 |
:10021000616C69622E0052616E67653A2533692D03 |
:10022000253369005374656C6C756E673A2025330D |
:100230006900536574706F696E74202025336900FE |
:10024000536572766F202000506F343A2025336951 |
:1002500020506F383A2025336900506F333A2025FB |
:10026000336920506F373A2025336900506F323A96 |
:100270002025336920506F363A2025336900506FAE |
:10028000313A2025336920506F353A2025336900F3 |
:1002900053746172743A2020202020253569004D66 |
:1002A000657373776572743A202025356900526949 |
:1002B000636874756E673A2020253569004B6F6D51 |
:1002C000706173732020202020202000456D70660F |
:1002D0002E506567656C3A253569005370616E6E06 |
:1002E000756E673A202025356900486F63682025C0 |
:1002F000346920282533692900526F6C6C2025341D |
:1003000069202825336929004E69636B20253469EB |
:1003100020282533692900414343202D2053656E51 |
:10032000736F720047696572202534692028253370 |
:10033000692900526F6C6C202534692028253369A7 |
:1003400029004E69636B20253469202825336929EB |
:10035000004779726F202D2053656E736F720050C5 |
:10036000333A253469202050343A2534692000502E |
:10037000313A253469202050323A2534692000472B |
:10038000733A253469202047693A25346920004EA4 |
:10039000693A2534692020526F3A25346920004B90 |
:1003A000373A25346920204B383A25346920004BF0 |
:1003B000353A25346920204B363A25346920004BE4 |
:1003C000333A25346920204B343A25346920004BD8 |
:1003D000313A25346920204B323A25346920004BCC |
:1003E0006F6D706173733A20202025356900526F5C |
:1003F0006C6C3A202020202020253569004E69634E |
:100400006B3A20202020202025356900616B742E56 |
:10041000204C6167650048F668656E726567656CBB |
:10042000756E67004B65696E6520004F666620201B |
:10043000202020203A20253569004C7566746472AE |
:1004400075636B3A2025356900536F6C6C486F6596 |
:1004500068653A2025356900486F6568653A20204F |
:100460002020202535690028632920486F6C6765A6 |
:100470007220427573730053657474696E673A2015 |
:100480002564200048573A5625642E25642053578A |
:100490003A25642E2564002B2B204D696B726F4B1F |
:1004A0006F70746572202B2B005B25695D00000165 |
:1004B000020305060708090A0B0C0D0F1011121391 |
:1004C0001415161718191A1B1B1C1D1E1F2021217D |
:1004D00022232425252627272829292A2B2B2C2CA3 |
:1004E0002D2E2E2F2F3030313132323333343434FD |
:1004F000353536363637373838383939393A3A3A81 |
:100500003B3B3B3C3C3C3C3D3D3D3D3E3E3E3E3F1F |
:100510003F3F3F40404040414141414142424242D1 |
:100520004243434343434344444444444445454590 |
:10053000454545454646464646464646474747475B |
:10054000474747474848484848484848484949492C |
:10055000494949494949494A4A4A4A4A4A4A4A4A02 |
:100560004A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4BDE |
:100570004C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4DBA |
:100580004D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D9B |
:100590004E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E7B |
:1005A0004E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F5F |
:1005B0004F4F4F4F4F4F4F4F4F4F4F4F0000000087 |
:1005C00096438B3C295C0F3DF4FD543D295C8F3DE7 |
:1005D0000E2DB23D3D0AD73D23DBF93D04560E3EBC |
:1005E00077BE1F3E0E2D323E8195433EF4FD543EB4 |
:1005F0006666663ED9CE773EA69B843EDF4F8D3E33 |
:100600000681953E3F359E3E79E9A63EA01AAF3E53 |
:10061000C74BB73E0000C03E2731C83E4E62D03EB9 |
:100620007593D83E8941E03EB072E83EC520F03E69 |
:10063000EC51F83E0000003F0AD7033F14AE073FDD |
:100640001F850B3FA01A0F3FAAF1123F2B87163FC1 |
:10065000AC1C1A3F2DB21D3F2506213FA69B243F0F |
:100660009EEF273F96432B3F8D972E3F85EB313FE3 |
:10067000F4FD343F6210383FD1223B3F3F353E3FCF |
:10068000AE47413F9318443F79E9463F5EBA493F40 |
:10069000448B4C3FA01A4F3FFCA9513F5839543F5F |
:1006A000B4C8563F8716593F5A645B3F2DB25D3F31 |
:1006B0000000603F4A0C623F9318643FDD24663FB0 |
:1006C0009EEF673FE7FB693FA8C66B3FDF4F6D3F7B |
:1006D000A01A6F3FD7A3703F0E2D723FBC74733FBB |
:1006E0006ABC743F1904763FC74B773FEC51783FA3 |
:1006F0001058793F355E7A3F5A647B3FF6287C3F3D |
:1007000091ED7C3FA4707D3F3F357E3F52B87E3FE8 |
:10071000DBF97E3FEE7C7F3F77BE7F3F77BE7F3F3A |
:100720000000803F0000803F000001010101020243 |
:100730000203030303040404050505050606060772 |
:10074000070707080808090909090A0A0A0B0B0B19 |
:100750000C0C0C0C0D0D0D0E0E0E0E0F0F0F1010BD |
:100760001011111111121212131313141414141561 |
:100770001515161616171717181818191919191A02 |
:100780001A1A1B1B1B1C1C1C1D1D1D1E1E1E1F1FA1 |
:100790001F2020202121212222222323232424253B |
:1007A000252526262627272728282929292A2A2ACF |
:1007B0002B2B2C2C2C2D2D2E2E2E2F2F303031315B |
:1007C00031323233333434353536363737383839D9 |
:1007D000393A3A3B3B3C3C3D3E3E3F404041424241 |
:1007E00043444445464748494A4B4C4D4F50525468 |
:1007F0005A0011241FBECFEFD0E1DEBFCDBF18E0FD |
:10080000A0E0B1E0ECECF1E902C005900D92A2335A |
:10081000B107D9F71DE0A2E3B8E001C01D92A934E9 |
:10082000B107E1F70E9455040C94E5480C940000D0 |
:1008300022E030E0D9010E94D148802D863028F096 |
:1008400082E0D901082E0E94D94899270895FB011A |
:10085000282F863008F025E0842F9927429FD00169 |
:100860001124AC59BF4F019724F001900E94D94840 |
:10087000FACFA2E0B0E0022E0E94D9480895CF93AB |
:10088000DF93FB01C42FDD27863008F085E0489F09 |
:10089000D0011124AC59BF4F219724F00E94D148B8 |
:1008A0000192FACFDF91CF9108951F93CF93DF93F9 |
:1008B00014B815B8189B02C08BE001C08AE0809381 |
:1008C000000181E887B98FEF88B98BE184B9289A54 |
:1008D0008EE38AB9579A87EF8BB984B7877F84BF35 |
:1008E000809160008861809360001092600088EEC3 |
:1008F00093E090934E0880934D081092DA0810927E |
:10090000D9081092820C1092810C1092D808109283 |
:10091000D7081092D6081092D50828980E94D60FB2 |
:100920000E94590A0E94AD1C0E940E100E94E61BF4 |
:100930000E94F51978941092C80A80E48093C90A3D |
:1009400085E08093CA0A2091000180E490E09F93A3 |
:100950008F931F921F92822F6AE00E942448892F52 |
:1009600099279F938F93822F0E94244899279F93C2 |
:100970008F938AEA91E09F938F931F920E94DC0BE2 |
:1009800089E891E09F938F931F920E94DC0B299A34 |
:10099000A1E0B0E00E94D148802D2DB73EB7225F84 |
:1009A0003F4F2DBF8E33A9F18AE591E09F938F933E |
:1009B0001F920E94DC0B0E940E264AE369EB7CE04A |
:1009C00080E00E94270411E00F900F900F901230EA |
:1009D00049F40E9498254AE369EB7CE082E00E949A |
:1009E000270413E04AE369EB7CE0812F0E9427048F |
:1009F0001F5F163060F382E022E030E0D901082E5C |
:100A00000E94D9488EE321503040D901082E0E941F |
:100A1000D948C2E0D0E0DE010E94D148802D863066 |
:100A200028F082E0DE01082E0E94D9484AE369EBF3 |
:100A30007CE00E943F04DE010E94D148802D863078 |
:100A400028F082E0DE01082E0E94D94899279F9362 |
:100A50008F938FE391E09F938F931F920E94DC0B03 |
:100A600084EF91E00E94550EEC010F900F900F90D3 |
:100A70000F900F90CE010E945E0E8823D9F3E09173 |
:100A8000BB0CFF27EE0FFF1FE358F34F80819181CE |
:100A900085369105E4F0E091BC0CFF27EE0FFF1FB7 |
:100AA000E358F34F808191818536910584F08AE285 |
:100AB00091E09F938F931F920E94DC0B8091C10C59 |
:100AC0000F900F900F9083FF02C00E94161A809122 |
:100AD000C10C80FF20C08DE091E09F938F931F9207 |
:100AE0000E94DC0B88EE93E00E94550EEC010E9400 |
:100AF000C2130F900F900F90CE010E945E0E8823BC |
:100B0000D9F388E091E09F938F931F920E94DC0BB2 |
:100B10000F900F900F900E94AE26289880ED97E0DE |
:100B200090934E0880934D0888EE93E09093C30A0B |
:100B30008093C20A85E58093BD0A8AEF90E09F9377 |
:100B40008F931F920E94DC0B8091C10C0F900F902D |
:100B50000F9082FF03C08EEE90E002C086EE90E020 |
:100B60009F938F931F920E94DC0B0F900F900F901A |
:100B700082EE90E09F938F931F920E94DC0B0E9465 |
:100B8000061488E893E190937D0180937C010F9097 |
:100B90000F900F9080914C08882309F447C0109261 |
:100BA0004C080E94F7270E94832628988091020112 |
:100BB000882319F08150809302018091D408882302 |
:100BC00029F08091D40881508093D40880917C01D1 |
:100BD00090917D01892B01F585E090E090937D0156 |
:100BE00080937C010E94871C8091050190910601F1 |
:100BF0008F5F9F4FD9F48091DB088823B9F080E1A3 |
:100C000097E290934E0880934D0880E890E090938F |
:100C10000601809305010AC080917C0190917D01BD |
:100C2000019790937D0180937C0128980E94760A19 |
:100C30000E94EC0ACE010E945E0E882309F4AACF1E |
:100C40002091090130910A018091D10C9927281730 |
:100C500039079CF480910501909106018F5F9F4FA9 |
:100C600061F480E797E190934E0880934D0880E00F |
:100C700093E0909306018093050184E690E00E9442 |
:100C8000550EEC0187CF1F920F920FB60F921124D1 |
:100C90008F939F93EF93FF93809101018823E1F459 |
:100CA0008091470890914808019690934808809356 |
:100CB0004708FC01E358F64FE081ED3019F0863922 |
:100CC000910539F4109248081092470881E080930A |
:100CD0000101E093C60004C0109248081092470832 |
:100CE000FF91EF919F918F910F900FBE0F901F90EA |
:100CF00018958091B20B813091F58091A20B909163 |
:100D0000A30BA091A40BB091A50B8093F50B90932E |
:100D1000F60BA093F70BB093F80B8091A60B909174 |
:100D2000A70BA091A80BB091A90B8093F90B9093FE |
:100D3000FA0BA093FB0BB093FC0B8091AA0B909144 |
:100D4000AB0BA091AC0BB091AD0B8093FD0B9093CE |
:100D5000FE0BA093FF0BB093000C1092B20B90917E |
:100D6000BC0A913041F48091B00A8093220C909398 |
:100D7000210C1092BC0A8091EC0A813091F580918F |
:100D8000DC0A9091DD0AA091DE0AB091DF0A80931F |
:100D9000010C9093020CA093030CB093040C80916F |
:100DA000E00A9091E10AA091E20AB091E30A8093EF |
:100DB000050C9093060CA093070CB093080C80913F |
:100DC000E40A9091E50AA091E60AB091E70A8093BF |
:100DD000090C90930A0CA0930B0CB0930C0C10927E |
:100DE000EC0A8091950B813091F580918B0B90915D |
:100DF0008C0BA0918D0BB0918E0B80930D0C90936A |
:100E00000E0CA0930F0CB093100C8091870B909157 |
:100E1000880BA091890BB0918A0B8093110C909351 |
:100E2000120CA093130CB093140C80918F0B909123 |
:100E3000900BA091910BB091920B8093150C909315 |
:100E4000160CA093170CB093180C1092950B809170 |
:100E50004A0C813011F580912A0C90912B0CA091B5 |
:100E60002C0CB0912D0C8093190C90931A0CA0931C |
:100E70001B0CB0931C0C80912E0C90912F0CA09108 |
:100E8000300CB091310C80931D0C90931E0CA093EC |
:100E90001F0CB093200C10924A0C8091210C8111F0 |
:100EA000289A08951F920F920FB60F9211242F9334 |
:100EB0003F934F935F936F937F938F939F93AF93E2 |
:100EC000BF93CF93DF93EF93FF938091C6008093FE |
:100ED00036088091C00040913608887109F024C11D |
:100EE00080914908E82FFF27E930F10508F019C182 |
:100EF000E85CFF4F0C94CB48453B09F019C181E0F9 |
:100F000003C0423621F482E08093490811C1453B79 |
:100F100009F40EC106C1413009F003C183E0F4CFEA |
:100F20004093240C4F5F40937C0980917C098F5F34 |
:100F30008093AB0A84E0809349088091240C883028 |
:100F400009F44AC0893030F48130F1F0833009F07F |
:100F50006DC006C0813161F1823109F067C050C0B7 |
:100F60008CEA9AE09093D70A8093D60A2DEC3BE066 |
:100F700030937A092093790940969093970B809348 |
:100F8000960B8091BC0A4FC08EE99BE09093D70AE4 |
:100F90008093D60A27E53DE030937A0920937909BA |
:100FA00044969093970B8093960B8091B20B3BC025 |
:100FB00088ED9AE09093D70A8093D60A21E93CE025 |
:100FC00030937A092093790944969093970B8093F4 |
:100FD000960B8091EC0A27C083E89BE09093D70A98 |
:100FE0008093D60A2CEE3CE030937A09209379095D |
:100FF00042969093970B8093960B8091950B13C01C |
:1010000086E29CE09093D70A8093D60A2FE731E1DD |
:1010100030937A092093790984969093970B809363 |
:10102000960B80914A0C8093250C82C081E08093BE |
:10103000250C1092970B1092960B7AC0842F99274B |
:101040009093990B8093980B80917C09840F8093E7 |
:101050007C098091AB0A90917C09890F8093AB0A3F |
:1010600085E052CF2091980B3091990B842F9927CE |
:10107000982F8827280F391F3093990B2093980BAE |
:1010800080917C09840F80937C098091AB0A9091B8 |
:101090007C09890F8093AB0A86E036CF80917C096A |
:1010A000840F80937C098091AB0A90917C09890F11 |
:1010B0008093AB0A8091250C882381F4E091D60AB5 |
:1010C000F091D70A8091790990917A09E817F90788 |
:1010D00028F44193F093D70AE093D60A8091980BB5 |
:1010E0009091990B01979093990B8093980B809115 |
:1010F000980B9091990B892BD9F487E005CF8091BB |
:101100007C09481771F488E0FFCE8091AB0A48173C |
:1011100041F4E091960BF091970B309711F081E03C |
:1011200080831092490804C0109249080E947906F1 |
:101130000E94790640914208463910F01092410809 |
:10114000809136088D3009F05CC080914108823072 |
:1011500009F057C010924108A42FBB27FD01E551AB |
:10116000F54F3081ED01C451D54F2881809145085C |
:1011700090914608831B9109821B91099F7090935F |
:101180004608809345089C0196E0369527959A95E8 |
:10119000E1F7235C20934408982F9F73935C90930E |
:1011A00043088081281729F48881981711F491E069 |
:1011B00006C0809139088F5F8093390890E0809154 |
:1011C0003708882309F064C0992309F461C081E0DD |
:1011D0008093370840933A08A351B54F8DE08C9324 |
:1011E0008091EF0A823509F053C088E190E02CE04D |
:1011F0000FB6F894A895809360000FBE209360000E |
:1012000047C0809141088130D9F0813018F0823098 |
:10121000E9F530C080913608833239F4809137087F |
:10122000882319F481E080934108809136088093E7 |
:10123000ED0A81E08093420880913608992715C015 |
:1012400082E080934108E42FFF2780913608E35124 |
:10125000F54F80834F5F409342082091360880917C |
:10126000450890914608820F911D909346088093FF |
:1012700045080EC0E42FFF2780913608E351F54F53 |
:101280008083463938F310924108E7CF1092410825 |
:10129000FF91EF91DF91CF91BF91AF919F918F918E |
:1012A0007F916F915F914F913F912F910F900FBE62 |
:1012B0000F901F901895DC0120E030E040E050E0F6 |
:1012C000EDE7F9E005C08191280F311D4F5F5F4FB9 |
:1012D0004A175B07C1F73F70C90166E0969587958D |
:1012E0006A95E1F7835CFD01E358F64F8083119620 |
:1012F0002F73235CFD01E358F64F2083A258B64FAD |
:101300008DE08C931092010180917D098093C6003D |
:101310000895EF92FF920F931F93CF93DF937A017B |
:10132000722F93E290937D0960937E0980937F09E9 |
:1013300003E010E060E0A0E8B9E046C0F701E60F86 |
:10134000F11D90816F5F715019F4E0E040E00FC033 |
:10135000F701E60FF11D40816F5F715011F4E0E07D |
:1013600006C0F701E60FF11DE0816F5F7150892F14 |
:1013700086958695835C8C935527892F9927837052 |
:10138000907024E0880F991F2A95E1F79A0194E064 |
:10139000369527959A95E1F7822B835CED01898339 |
:1013A0004F705070440F551F440F551F8E2F82955C |
:1013B000869586958370842B835C8A83EF73E35CC8 |
:1013C000EB830C5F1F4F1496772309F0B7CFC8014A |
:1013D0000E945B09E6E0CDB7DEB70C94BC481F93D2 |
:1013E000CF93DF93EC0170E0A22FBB27129748C088 |
:1013F000E42FFF27E351F54F30814F5FE42FFF27A4 |
:10140000E351F54F50814F5FE42FFF27E351F54F34 |
:1014100010814F5FE42FFF27E351F54F20814F5F8D |
:10142000842F9927A817B90774F15D53FE01E70FC0 |
:10143000F11D3D53330F330F852F82958F70382B5D |
:101440003083613001F1912F9D537F5FFE01E70FE3 |
:10145000F11D71505295507F892F86958695582B96 |
:10146000508363506F3F79F07E5FFE01E70FF11DFF |
:101470009295990F990F907C2D53922B90837F5FBB |
:10148000662309F0B5CFDF91CF911F9108951F9387 |
:10149000182F8A3019F48DE00E94470A8091C0000D |
:1014A00085FFFCCF1093C60080E090E01F91089567 |
:1014B0000895E1ECF0E088E18083A0ECB0E08C914D |
:1014C00082608C9380818068808380818064808347 |
:1014D0008AE28093C40088EC90E00E94550E9093BD |
:1014E000AA0A8093A90A10924908089580910101DF |
:1014F000882309F470C080913208882371F08091AC |
:101500000101882351F02BE04DEB5AE060917B09FB |
:1015100087E40E948909109232088091A90A90916B |
:10152000AA0A0E945E0E882321F480913408882341 |
:10153000B1F080910101882391F022E443EB5BE05C |
:1015400060917B0984E40E9489091092340884EF39 |
:1015500091E00E94550E9093AA0A8093A90A809167 |
:101560003308882331F180910101882311F10E9411 |
:101570000F141092330880914008982F9F5F90932A |
:101580004008943059F42EE14DE75CE060E084E3DC |
:101590000E9489098FEF809340080BC044E1949F1B |
:1015A000A0011124455E5E4F24E160E08F5C0E9443 |
:1015B000890980913508882371F080910101882381 |
:1015C00051F02AE048EC5AE060917B0986E50E94E0 |
:1015D0008909109235080895A2E0B0E0E2EFFAE040 |
:1015E0000C94A34880913708882309F488C08FEFB2 |
:1015F000809302018091EF0A9927AA27BB27FC015B |
:10160000E356F040E431F10508F077C0EF5BFF4F9F |
:101610000C94CB4820913A0843E06BE08DEB9AE0C4 |
:101620000E94EF0981E08093340867C020913A0856 |
:1016300043E062E0CE0101960E94EF0980916F08BD |
:101640009981892B80936F0881E08093330855C07E |
:1016500020913A0843E064E08CE398E00E94EF09AF |
:101660004CC081E08093350848C081E08093320807 |
:1016700044C020913A0843E062E0CE0101960E9406 |
:10168000EF0989818F3F89F0863010F085E08983EA |
:101690004AE369EB7CE089810E943F0489812AE367 |
:1016A00049EB5CE060917B0908C010917B090E94C6 |
:1016B00018042AE349EB5CE0612F855B0E948909ED |
:1016C0001CC020913A0843E06AE389EB9CE00E9449 |
:1016D000EF098091EF0A4AE369EB7CE08B560E94A8 |
:1016E00027048091EF0A8B56A2E0B0E0082E0E94FA |
:1016F000D9480E9418040E94E22710923708E3E0BC |
:10170000CE5F0C94BF48982F80914B0C813069F4C8 |
:1017100080916E08E82FFF27E55EFE4F90838F5F74 |
:1017200080936E0821E030E005C0892F0E94470AAF |
:10173000282F3327C90108951F93182F04C080E371 |
:101740000E94830B11501116D4F31F9108951F931B |
:10175000182F04C080E20E94830B11501116D4F39D |
:101760001F9108950F931F93CF93DF938C01EB018B |
:1017700008C0F8010F5F1F4FE4918E2F0E94830B6A |
:1017800021972097B1F7DF91CF911F910F91089585 |
:101790000F931F93CF93DF938C01EB0106C0F801E9 |
:1017A00081918F010E94830B21972097C1F7DF91D0 |
:1017B000CF911F910F910895A3E3B0E0E2EEFBE01B |
:1017C0000C94944829968FAD299780934B0CCE01A9 |
:1017D000855B9F4F9D838C832B968EAD9FAD2B9702 |
:1017E0009FA78EA722243324210102C013012401C4 |
:1017F0000EA51FA502C00F5F1F4FF801F490FF2038 |
:1018000019F0F5E2FF16B9F7B8018EA59FA5681B80 |
:10181000790B11F00E94B20BFF2009F442C20F5F56 |
:101820001F4F1FA70EA71982AC81BD811BAA1AAA40 |
:101830009FEF99ABEEA5FFA5CF0101969FA78EA7BD |
:10184000B49095E7B91621F08B2D8062883789F422 |
:10185000EBA9E0FF07C02D903D904D905C90139751 |
:10186000149607C08D919C9111971C014424552416 |
:101870001296F0E2BF1621F489818823D9F685C03B |
:1018800083E2B81609F483C09AE2B91621F0EDE2BA |
:10189000BE1669F408C0FD011296E081EAABE7FFCD |
:1018A000C9CFE195EAABFBA9F061FF7D72C08BE285 |
:1018B000B81609F46AC09EE2B916B1F52EA53FA587 |
:1018C0002F5F3F4FEEA5FFA584918A3221F0B82EFD |
:1018D00020E030E01BC0FD0112964081518157FF8E |
:1018E00002C04FEF5FEF49AB3FA72EA7A3CFC901BF |
:1018F00003E0880F991F0A95E1F7220F331F280F85 |
:10190000391F2B0D311D20533040B49031968B2D53 |
:1019100080538A3060F3FFA7EEA7A90137FF02C00A |
:101920004FEF5FEF49AB8DCFF0E3BF1631F48BA9DA |
:1019300084FD80CF80628BAB7DCF8B2D815389302E |
:10194000E8F420E030E0C901F3E0880F991FFA9530 |
:10195000E1F7220F331F280F391F2B0D311D2053A4 |
:101960003040EEA5FFA5CF0101969FA78EA7B490AA |
:101970008B2D80538A3038F32AAB63CF98E6B916A3 |
:1019800051F4EBA9E460EBAB55CFB98253CFFBA97F |
:10199000F860FBAB4FCF8CE6B81621F49BA99160A1 |
:1019A0009BAB48CFBD83AC83E3E6BE1639F41296F9 |
:1019B000BD83AC8312978C918E8318C1F4E4BF165B |
:1019C00039F084E6B81639F099E6B91659F503C02E |
:1019D000EBA9E160EBABFBA9F0FF08C01496BD8357 |
:1019E000AC835E904E903E902E900AC01296BD83BE |
:1019F000AC839E918E911C01442437FC4094542C5E |
:101A000057FC03C08AE088AB92C050944094309455 |
:101A10002094211C311C411C511C8DE289839AE0C9 |
:101A200098AB85C0EFE4BE1629F0FFE6BF1639F487 |
:101A300088E061C09BA991609BABE8E056C0F0E7ED |
:101A4000BF1671F41296BD83AC839E918E911C01DA |
:101A5000442455248BA980648BAB78E7B72E5EC0F5 |
:101A6000E3E7BE16D9F51296BD83AC83DE90CE9027 |
:101A7000C114D10489F488E28E838EE68F8385E7D2 |
:101A800088878CE689878A8789E28B871C8666E04F |
:101A9000C62ED12CCC0EDD1EF9A9F7FD13C04F2F99 |
:101AA000552747FD509560E070E0C6010E949046C2 |
:101AB000009711F419A90DC08C1919A981174CF4BC |
:101AC000182F07C0F60101900020E9F731971E2F6B |
:101AD0001C1919824201310140E094C085E5B81615 |
:101AE00031F095E7B91649F4EAE0E8AB1FC0FBA96D |
:101AF000F160FBAB8AE088AB19C098E5B91621F01C |
:101B0000E8E7BE1609F06EC0FBA9F3FD02C080E154 |
:101B1000F2CF211431044104510419F490E198AB3F |
:101B200005C0EBA9E064EBABF0E1F8AB198289A941 |
:101B300087FD03C09BA99F7D9BAB21143104410409 |
:101B4000510461F4E9A9EE2349F4662477244301A2 |
:101B50005EE2C52ED12CCC0EDD1E3EC04EE2C42E60 |
:101B6000D12CCC0EDD1EF8A9EF2EFF240027112763 |
:101B7000C201B101A80197010E9457486A3020F4C0 |
:101B800030E3A32EA60E08C027E5A22EA60E88E5F8 |
:101B9000B81611F49FEDA922F601A2926F01C201BD |
:101BA000B101A80197010E94574839014A012E143A |
:101BB0003F044006510618F019012A01D9CFF8A9AF |
:101BC000F83051F48BA983FF07C090E3A91621F0E8 |
:101BD00080E3F60182936F01CE018C19182F125DFC |
:101BE00049A910C0BB2009F45CC0BE821982420121 |
:101BF000310100E096E0C92ED12CCC0EDD1E11E0A3 |
:101C000021E005C0212F042F011B07FD00E0898181 |
:101C1000882319F0812F8F5F07C09BA996FD02C012 |
:101C2000812F02C0822F8E5FA82EA00EEBA9EE2E70 |
:101C3000FF2480E3482E512C4E205F204114510494 |
:101C400021F48AA98A190E94A70B8981882329F087 |
:101C500061E070E0CE01019609C0E6FE09C080E3B4 |
:101C60008A83BB8262E070E0CE0102960E94C80BBC |
:101C7000F0E24F16510421F48AA98A190E949C0BA4 |
:101C8000802F0E949C0B612F772767FD7095C601FE |
:101C90000E94C80BE4FEAACD8AA98A190E94A70B4C |
:101CA000A5CDE2E1CD5C0C94B04820914A0830917A |
:101CB0004B082F5F3F4F820F931F089520914A08D2 |
:101CC00030914B08821B930B892F9927869580743E |
:101CD000992708951F920F920FB60F921124EF9239 |
:101CE000FF920F931F932F933F934F935F936F93A5 |
:101CF0007F938F939F93AF93BF93CF93DF93EF9394 |
:101D0000FF93809107018150809307018F3F09F075 |
:101D10006DC083E88093B00080918F01C82FDD27CC |
:101D2000D0935008C0934F088091E20CE090DB0CF8 |
:101D300080FF1EC0609188087091890880918A0890 |
:101D400090918B08FF240027112720E830E040E025 |
:101D500050E00E947948C801B7010E94054820E080 |
:101D600032E040E050E00E947948C20FD31F1DC00E |
:101D7000609188087091890880918A0890918B08F9 |
:101D8000FF240027112720E830E040E050E00E94C7 |
:101D90007948C801B7010E94054820E032E040E0E0 |
:101DA00050E00E947948C21BD30BD0935008C093D7 |
:101DB0004F0820914F08309150088091DC0C9927F2 |
:101DC0002817390734F08091DD0C99278217930783 |
:101DD00024F49093500880934F0880914F0880938B |
:101DE000B3008091DE0C8093070104C083E08093F0 |
:101DF000B0005F98FF91EF91DF91CF91BF91AF91CC |
:101E00009F918F917F916F915F914F913F912F9112 |
:101E10001F910F91FF90EF900F900FBE0F901F90AA |
:101E200018951F920F920FB60F9211242F933F9384 |
:101E30004F935F936F937F938F939F93AF93BF93D2 |
:101E4000EF93FF93809151088150809351088F3F09 |
:101E5000B9F489E080935108809108018F5F817007 |
:101E600080930801882319F481E080934C088091C5 |
:101E70004A0890914B08019690934B0880934A082A |
:101E800080914D0890914E080297C0F080914D08C6 |
:101E900090914E08019790934E0880934D085A9A5E |
:101EA00080914D0890914E082091050130910601D6 |
:101EB00082239323892B09F063C055C08FEF9FEFD6 |
:101EC00090930601809305015A988091C10C83FF7D |
:101ED0004AC00E94C11980910301909104010197A9 |
:101EE0009093040180930301809103019091040178 |
:101EF0008F5F9F4FC1F50E94DD181816190654F424 |
:101F00000E94DD1828E631E0281B390B3093B90810 |
:101F10002093B8080E94DD1897FF09C00E94DD18C1 |
:101F2000909581959F4F9093B9088093B8088091C0 |
:101F3000B8089091B9082091BA083091BB08821B6B |
:101F4000930B845E9D4F68E671E00E944448845B79 |
:101F500090409093BD088093BC0880E293E09093FA |
:101F6000040180930301809100018A3039F404C098 |
:101F70005A9A0BC0479A09C05A9807C0479805C09B |
:101F8000809100018A30B1F7F3CFFF91EF91BF91BB |
:101F9000AF919F918F917F916F915F914F913F9101 |
:101FA0002F910F900FBE0F901F90189580914A08A7 |
:101FB00090914B080B96909353088093520882E0BF |
:101FC00085BD83EA84BD17BC88E788BD83EC809318 |
:101FD000B00086E08093B100E0E7F0E080818260AD |
:101FE0008083EEE6F0E08081816080838AE08093E8 |
:101FF000B3001092B200089520914A0830914B0826 |
:102000002F5F3F4F280F391F80914A0890914B084E |
:10201000A901481B590B57FFF7CF089510927C0078 |
:102020008FEE80937A0008951F920F920FB60F9251 |
:102030001124EF92FF920F931F932F933F934F938F |
:102040005F936F937F938F939F93AF93BF93CF9340 |
:10205000DF93EF93FF9310927A0080916A088F5F6D |
:1020600080936A088150E82FFF27E830F10508F0D7 |
:1020700067C3EB5AFF4F0C94CB4820917C083091FA |
:102080007D088091780090917900281B390B809110 |
:1020900000018A3011F0220F331F8091580890916F |
:1020A0005908820F931F9093590880935808809184 |
:1020B00062088F5F809362088091AC089091AD08B0 |
:1020C000A091AE08B091AF08442737FD4095542F3A |
:1020D000820F931FA41FB51F8093AC089093AD0887 |
:1020E000A093AE08B093AF088091B0089091B1086A |
:1020F000A091B208B091B308820F931FA41FB51F1F |
:102100008093B0089093B108A093B208B093B3083D |
:1021100081E080936B08809168089091690801962E |
:1021200090936908809368080FC36091780070915C |
:10213000790080917A0890917B08681B790B8091D7 |
:1021400000018A3011F0660F771F8091A4089091EA |
:10215000A508A091A608B091A7089B01442737FDC8 |
:102160004095542F820F931FA41FB51F8093A4087E |
:102170009093A508A093A608B093A7088091A808FB |
:102180009091A908A091AA08B091AB08820F931F63 |
:10219000A41FB51F8093A8089093A908A093AA082C |
:1021A000B093AB088091A4089091A508A091A608CF |
:1021B000B091A708815F9A4BA440B04064F080E3DF |
:1021C00093E9ABEFBFEF8093A4089093A508A09389 |
:1021D000A608B093A7088091A4089091A508A091A3 |
:1021E000A608B091A70880519544AB4FBF4F64F447 |
:1021F00080ED9CE6A4E0B0E08093A4089093A5084D |
:10220000A093A608B093A7088091780090917900D8 |
:102210000F9710F468E17CEF80917800909179003D |
:10222000079710F460E378EF80917800909179003F |
:10223000835F934010F068EE73E080917800909196 |
:1022400079008A5F934010F060ED77E08091560846 |
:1022500090915708860F971F9093570880935608C0 |
:10226000809161088F5F8093610882E0A1C06091D6 |
:102270007800709179008091780890917908681BB6 |
:10228000790B809100018A3011F0660F771F8091E1 |
:102290009C0890919D08A0919E08B0919F089B0179 |
:1022A000442737FD4095542F820F931FA41FB51F5D |
:1022B00080939C0890939D08A0939E08B0939F08DC |
:1022C0008091A0089091A108A091A208B091A308C4 |
:1022D000820F931FA41FB51F8093A0089093A1089D |
:1022E000A093A208B093A30880919C0890919D08A8 |
:1022F000A0919E08B0919F08815F9A4BA440B04086 |
:1023000064F080E393E9ABEFBFEF80939C08909378 |
:102310009D08A0939E08B0939F0880919C0890917F |
:102320009D08A0919E08B0919F0880519544AB4FA5 |
:10233000BF4F64F480ED9CE6A4E0B0E080939C087D |
:1023400090939D08A0939E08B0939F088091780079 |
:10235000909179000F9710F468E17CEF80917800FC |
:1023600090917900079710F460E378EF80917800FE |
:1023700090917900835F934010F068EE73E0809154 |
:102380007800909179008A5F934010F060ED77E0DB |
:102390008091540890915508860F971F9093550887 |
:1023A00080935408809160088F5F8093600884E078 |
:1023B00080936B08C9C14091090150910A01809135 |
:1023C0007800909179009A01220F331F240F351F56 |
:1023D00063E070E00E943048260F371F369527953E |
:1023E0003695279530930A012093090186E0E0CFC6 |
:1023F0008091800890918108209178003091790037 |
:10240000821B930B90934D0C80934C0C80915A0837 |
:1024100090915B0820914C0C30914D0C820F931FD2 |
:1024200090935B0880935A08809164088F5F809333 |
:10243000640887E0BDCF8091780090917900209169 |
:102440007E0830917F08821B930B9093580C8093E9 |
:10245000570C80915C0890915D082091570C309149 |
:10246000580C820F931F90935D0880935C088091B5 |
:1024700063088F5F8093630885E080936B0886E034 |
:10248000E4C06091780070917900E0908208F0904B |
:1024900083080091840810918508882777FD80952E |
:1024A000982F0E944347A80197010E949D460E94D1 |
:1024B000264770935F0860935E0820915E08309114 |
:1024C0005F08E0914C0CF0914D0C8091570C90916D |
:1024D000580C97FF03C0909581959F4F64E070E082 |
:1024E0000E944448EB01CF01F7FF03C0909581950E |
:1024F0009F4F64E070E00E944448260F371F2C0F66 |
:102500003D1F30935F0820935E0880915E08909194 |
:102510005F08029704F160918208709183088091AE |
:1025200084089091850820E030E048E454E40E945B |
:102530004D4788230CF03CC060918208709183085D |
:1025400080918408909185082AE037ED43EA5CE3A6 |
:102550000E949E4625C080915E0890915F088F5F23 |
:102560009F4F34F5609182087091830880918408B0 |
:102570009091850820E030E046E154E40E94504705 |
:102580001816B4F4609182087091830880918408D1 |
:10259000909185082AE037ED43EA5CE30E949D466E |
:1025A00060938208709383088093840890938508D1 |
:1025B00081E08093650880917800909179009093F4 |
:1025C0004F0C80934E0C2091B4083091B508409187 |
:1025D000B6085091B70880915E0890915F08AA27CD |
:1025E00097FDA095BA2F280F391F4A1F5B1F209314 |
:1025F000B4083093B5084093B6085093B708E090FC |
:10260000B408F090B5080091B6081091B708609131 |
:10261000B4087091B5088091B6089091B70820E091 |
:1026200034E040E050E00E947948E21AF30A040BDB |
:10263000150BE092B408F092B5080093B608109319 |
:10264000B70883E080936B0887E080936A087CC0BA |
:1026500080915C0C90915D0C209178003091790014 |
:10266000820F931F90935D0C80935C0C8091540CAF |
:102670008F5F8093540C8091540C853008F460C0B7 |
:1026800080917800909179009093100180930F01D0 |
:102690001092540C8091500C9091510C20915C0C34 |
:1026A00030915D0C821B930B2091DC083091DD088A |
:1026B000821B930B909367088093660860915C0C73 |
:1026C00070915D0CE0900B01F0900C0100910D01F8 |
:1026D00010910E01882777FD8095982FA80197010A |
:1026E000220F331F441F551F2E0D3F1D401F511F2A |
:1026F000620F731F841F951F24E030E040E050E01C |
:102700000E94794820930B0130930C0140930D01F6 |
:1027100050930E012091500C3091510C80910B017F |
:1027200090910C01A0910D01B0910E01281B390B65 |
:102730003093DD082093DC0810925D0C10925C0C45 |
:1027400010926B0810926A0880916B0880937C004D |
:102750008FEE80937A00FF91EF91DF91CF91BF913F |
:10276000AF919F918F917F916F915F914F913F9129 |
:102770002F911F910F91FF90EF900F900FBE0F9030 |
:102780001F901895CF93DF93A3E0B0E00E94D1484B |
:10279000802DC82FDD27C531D10508F02A97C7BD88 |
:1027A00084E690E00E94FC0F80910F01909110014F |
:1027B00082559340D0F4C0E0D0E017C0C7BD82E39B |
:1027C00090E00E94FC0F8CED91E09F938F931F92FD |
:1027D0000E94DC0B80910F01909110010F900F90DF |
:1027E0000F908458934020F02196CA3FD10530F3D2 |
:1027F000A3E0B0E00C2E0E94D948C093590C8CE2A3 |
:1028000091E00E94FC0FDF91CF910895EBE1F1E0A0 |
:1028100080E2819391E0EB36F907D9F70895FF92B2 |
:102820000F931F9380916F08282F3327C901817060 |
:102830009070682F882391F080917008882311F0A0 |
:10284000815002C080916B0180937008EBE1F1E050 |
:1028500080E2819391E0EB36F907D9F7A901427044 |
:10286000507021FF0DC0809170088F5F80937008B9 |
:10287000EBE1F1E080E2819391E0EB36F907D9F7E3 |
:10288000662321F0452B11F01092700881E18093AE |
:102890006E088091700899279F938F9389EA94E03E |
:1028A0009F938F9381E08F930E94DC0B809170083F |
:1028B0000F900F900F900F900F90E82FFF27EC30A4 |
:1028C000F10508F0BFC3E35AFF4F0C94CB481092B8 |
:1028D0006E0887E994E09F938F9311E01F930E9405 |
:1028E000DC0B84E180936E082091000180E490E08D |
:1028F0009F938F931F921F92822F6AE00E94244819 |
:10290000892F99279F938F93822F0E94244899277C |
:102910009F938F9384E894E09F938F931F930E94DB |
:10292000DC0B88E280936E080E94180499279F931D |
:102930008F9387E794E09F938F931F930E94DC0B04 |
:102940008CE380936E0887E694E09F938F931F93A8 |
:102950000E94DC0BB3C08091C10C80FF44C0109278 |
:102960006E088091DC089091DD089F938F9388E535 |
:1029700094E09F938F9311E01F930E94DC0B84E1FE |
:1029800080936E088091DE089091DF089F938F936B |
:1029900089E494E09F938F931F930E94DC0B88E25D |
:1029A00080936E0880910F01909110019F938F93F7 |
:1029B0008AE394E09F938F931F930E94DC0B8CE338 |
:1029C00080936E088091590C99279F938F938BE287 |
:1029D00094E09F938F931F930E94DC0B8DB79EB75B |
:1029E00044968DBF34C384E180936E0884E294E002 |
:1029F0009F938F9311E01F930E94DC0B88E28093DA |
:102A00006E0886E194E09F938F931F930E94DC0BE6 |
:102A10008DB79EB70696E5CF10926E088CE094E0D5 |
:102A20009F938F9311E01F930E94DC0B84E18093AE |
:102A30006E08609188087091890880918A08909149 |
:102A40008B0820E034E040E050E00E9479485F933A |
:102A50004F933F932F938DEF93E09F938F931F930B |
:102A60000E94DC0B88E280936E0860919008709160 |
:102A70009108809192089091930820E034E040E022 |
:102A800050E00E9479485F934F933F932F938EEECF |
:102A900093E09F938F931F930E94DC0B8CE38093B2 |
:102AA0006E088091B8089091B9089F938F938FED2D |
:102AB00093E09F938F931F930E94DC0B8DB79EB77B |
:102AC00046968FCF10926E088091810C9091820C67 |
:102AD00020917F0C3091800C9F938F933F932F9385 |
:102AE0008FEC93E09F938F9311E01F930E94DC0B78 |
:102AF00084E180936E088091850C9091860C2091E2 |
:102B0000830C3091840C9F938F933F932F938FEB83 |
:102B100093E09F938F931F930E94DC0B88E2809336 |
:102B20006E088091890C90918A0C2091870C3091CD |
:102B3000880C9F938F933F932F938FEA93E09F93FB |
:102B40008F931F930E94DC0B8CE380936E0880911F |
:102B50008D0C90918E0C20918B0C30918C0C9F934E |
:102B60008F933F932F938FE993E0E4C110926E0807 |
:102B7000E091BA0CFF27EE0FFF1FE358F34F2081BF |
:102B80003181E091B90CFF27EE0FFF1FE358F34F9F |
:102B9000808191813F932F939F938F938FE893E050 |
:102BA0009F938F9311E01F930E94DC0B84E180932D |
:102BB0006E08E091BC0CFF27EE0FFF1FE358F34FA8 |
:102BC00020813181E091BB0CFF27EE0FFF1FE358FE |
:102BD000F34F808191813F932F939F938F938FE742 |
:102BE00093E09F938F931F930E94DC0B88E2809366 |
:102BF0006E08E091BE0CFF27EE0FFF1FE358F34F66 |
:102C000020813181E091BD0CFF27EE0FFF1FE358BB |
:102C1000F34F808191813F932F939F938F938FE602 |
:102C200093E09F938F931F930E94DC0B8CE3809320 |
:102C30006E08E091C00CFF27EE0FFF1FE358F34F23 |
:102C400020813181E091BF0CFF27EE0FFF1FE35879 |
:102C5000F34F808191813F932F939F938F938FE5C3 |
:102C600093E068C110926E0881E593E09F938F9383 |
:102C700011E01F930E94DC0B84E180936E08209189 |
:102C800078083091790880915408909155086091A6 |
:102C900060083F932F9377270E9444487F936F9358 |
:102CA00082E493E09F938F931F930E94DC0B88E252 |
:102CB00080936E0820917A0830917B0880915608A5 |
:102CC00090915708609161083F932F9377270E9456 |
:102CD00044487F936F9383E393E09F938F931F9375 |
:102CE0000E94DC0B8CE380936E0820917C0830916D |
:102CF0007D088091580890915908609162083F932F |
:102D00002F9377270E9444487F936F9384E293E048 |
:102D10009F938F931F935BC010926E0887E193E09F |
:102D20009F938F9381E0F82EFF920E94DC0B84E149 |
:102D300080936E0820917E0830917F0880915C0816 |
:102D400090915D08609163083F932F9377270E94CD |
:102D500044487F936F9388E093E09F938F93FF9213 |
:102D60000E94DC0B88E280936E08209180083091ED |
:102D7000810880915A0890915B08609164083F93A4 |
:102D80002F9377270E9444487F936F9389EF92E0B7 |
:102D90009F938F93FF920E94DC0B8CE380936E08CD |
:102DA00060918208709183088091840890918508D1 |
:102DB00000914E0C10914F0C0E9426477F936F9309 |
:102DC0001F930F938AEE92E09F938F93FF920E943E |
:102DD000DC0B8DB79EB7489604CE84E180936E08D5 |
:102DE0008091090190910A019F938F938BED92E05E |
:102DF0009F938F9311E01F930E94DC0B88E28093D6 |
:102E00006E088091D40899279F938F938CEC92E061 |
:102E10009F938F931F930E94DC0B8DB79EB70A96EA |
:102E2000E0CD10926E088DEB92E09F938F9311E0AE |
:102E30001F930E94DC0B84E180936E088091BC0894 |
:102E40009091BD089F938F938EEA92E09F938F930A |
:102E50001F930E94DC0B88E280936E088091B80873 |
:102E60009091B9089F938F938FE992E09F938F93EE |
:102E70001F930E94DC0B8CE380936E088091BA084C |
:102E80009091BB089F938F9380E992E0D2C01092FB |
:102E90006E088091CC089091CD089F938F9380917C |
:102EA000C4089091C5089F938F938EE792E09F93FB |
:102EB0008F9311E01F930E94DC0B84E180936E08D6 |
:102EC0008091CE089091CF089F938F938091C608F0 |
:102ED0009091C7089F938F938CE692E09F938F9376 |
:102EE0001F930E94DC0B88E280936E088091D008CB |
:102EF0009091D1089F938F938091C8089091C908B1 |
:102F00009F938F938AE592E09F938F931F930E94E4 |
:102F1000DC0B8CE380936E088091D2089091D308EB |
:102F20009F938F938091CA089091CB089F938F9322 |
:102F300088E492E09F938F931F930E94DC0B8DB7E0 |
:102F40009EB74C964ECD10926E0880E492E09F930F |
:102F50008F9311E01F930E94DC0B84E180936E0835 |
:102F600080918F0199279F938F9382E392E09F93A3 |
:102F70008F931F930E94DC0B88E280936E088091F0 |
:102F80004F08909150089F938F9384E292E09F9313 |
:102F90008F931F930E94DC0B8CE380936E088091CB |
:102FA000DD0C99279F938F938091DC0C99279F9339 |
:102FB0008F9386E192E09F938F931F930E94DC0B87 |
:102FC0000DCD10926E088BE092E09F938F9311E0ED |
:102FD0001F930E94DC0B84E180936E0880915F0C4C |
:102FE000992787FD90959F938F938CEF91E09F9306 |
:102FF0008F931F930E94DC0B88E280936E08809170 |
:10300000600C992787FD90959F938F938DEE91E0AB |
:103010009F938F931F930E94DC0B8CE380936E0829 |
:1030200080915E0C992787FD90959F938F938EEDED |
:1030300091E09F938F931F930E94DC0B8DB79EB7F7 |
:103040004296CFCC815080936B0110927008109201 |
:103050006F081F910F91FF9008951F920F920FB666 |
:103060000F9211242F933F934F938F939F938091AF |
:10307000610C843021F0883009F095C025C0809122 |
:10308000640C803149F48EB59927982F8827909346 |
:10309000660C8093650C13C0803249F48EB5992775 |
:1030A000982F882790936A0C8093690C08C08EB57E |
:1030B0009927982F882790936E0C80936D0C1EBCD7 |
:1030C00088E08093610C6FC08091640C803111F5B1 |
:1030D0008EB5282F33278091650C9091660C282B94 |
:1030E000392B3093660C2093650CC9018D509E4F8F |
:1030F000875E934028F43093680C2093670C08C0D7 |
:103100008091670C9091680C9093660C8093650C8D |
:1031100080E245C0803211F58EB5282F332780918B |
:10312000690C90916A0C282B392B30936A0C2093F0 |
:10313000690CC9018D509E4F875E934028F43093EF |
:103140006C0C20936B0C08C080916B0C90916C0CF4 |
:1031500090936A0C8093690C80E421C08EB5282F6F |
:10316000332780916D0C90916E0C282B392B309366 |
:103170006E0C20936D0CC9018D509E4F875E93405D |
:1031800028F43093700C20936F0C08C080916F0C62 |
:103190009091700C90936E0C80936D0C80E18093F5 |
:1031A000640C1092610C9F918F914F913F912F91E0 |
:1031B0000F900FBE0F901F901895A0E1B0E0E3EEC6 |
:1031C000F8E10C9494486091880870918908809186 |
:1031D0008A0890918B08E090D90CFF2453E0EE0C04 |
:1031E000FF1C5A95E1F70027F7FC0095102FA80166 |
:1031F00097010E94794859016A013093720C20931B |
:10320000710C609190087091910880919208909152 |
:103210009308A80197010E9479483093740C209379 |
:10322000730CC5010E94671B69877A878B879C870F |
:103230008091710C9091720C0E94CB1B5B016C0110 |
:103240008091730C9091740C0E94671B6D837E8338 |
:103250008F8398878091730C9091740C0E94CB1B84 |
:1032600069837A838B839C832091600C332727FDAD |
:1032700030956091690C70916A0C621B730B882702 |
:1032800077FD8095982F0E9443471B012C012091C8 |
:103290005E0C332727FD309560916D0C70916E0C9C |
:1032A000621B730B882777FD8095982F0E944347F8 |
:1032B0003B014C01A201910169817A818B819C8142 |
:1032C0000E94BD477B018C01A40193016D817E8129 |
:1032D0008F8198850E94BD479B01AC01C801B70151 |
:1032E0000E949E460E9426476D877E878F87988B17 |
:1032F00020915F0C332727FD30956091650C70910C |
:10330000660C621B730B882777FD8095982F0E94AF |
:1033100043479B01AC01C601B5010E94BD475B015B |
:103320006C01A20191016D817E818F8198850E943F |
:10333000BD477B018C01A401930169817A818B8156 |
:103340009C810E94BD479B01AC01C801B7010E944E |
:103350009D4629853A854B855C850E94BD479B012A |
:10336000AC01C601B5010E949D460E942647DC01C2 |
:10337000CB016D857E850E94AB1AE2E1C05F0C94A3 |
:10338000B0488091610C813041F0813018F082307A |
:1033900059F51EC02A9A81E018C02A988091640CC1 |
:1033A000803111F481E307C0803211F482E303C05D |
:1033B000803411F483E38EBD88E090E00E94550EC6 |
:1033C0009093630C8093620C82E08093610C08956B |
:1033D0008091620C9091630C0E945E0E882321F014 |
:1033E0001EBC84E08093610C089583ED8CBD84B194 |
:1033F000846A84B95B9880E18093640C1092610CBC |
:10340000A5EFB1E00E94D148802D80935F0CA6EF1C |
:10341000B1E00E94D148802D8093600CA7EFB1E00D |
:103420000E94D148802D80935E0C0895A0E0B0E00A |
:10343000ECE1FAE10C94964866247724EE24FF240C |
:1034400000E010E0AA24BB24CC24DD2488249924A5 |
:10345000E2E34E2E55248091650C9091660C08177E |
:10346000190714F48C0104C08E159F050CF47C011F |
:103470008091690C90916A0CC816D90614F46C01FD |
:1034800004C08A159B050CF45C0180916D0C909131 |
:103490006E0C6816790614F43C0104C08815990571 |
:1034A0000CF44C01552041F482E390E090934E08D7 |
:1034B00080934D0872E3572E8AE090E00E94550EEB |
:1034C000EC01CE010E945E0E8823D9F3E091BB0C83 |
:1034D000FF27EE0FFF1FE358F34F80819181843661 |
:1034E00091050CF44A94442011F05A94B4CFC801C9 |
:1034F0008E0D9F1D62E070E00E9444489B01609326 |
:103500005F0CC6018A0D9B1D62E070E00E9444487A |
:103510006093600CC301880D991D62E070E00E9409 |
:10352000444860935E0CA5EFB1E0022E0E94D9489A |
:103530008091600CA6EFB1E0082E0E94D9488091DE |
:103540005E0CA7EFB1E0082E0E94D948E0E1CDB7AC |
:10355000DEB70C94B248A0E0B0E0E1EBFAE10C94E5 |
:103560009D48EC016B01892B29F4672B19F480E04D |
:1035700090E09EC0D7FC03C091E0B92E02C08FEF4F |
:10358000B82E209731F48AE52B2D2802C001112492 |
:103590008FC0B601882777FD8095982F0E944347FA |
:1035A0007B018C01BE01882777FD8095982F0E94B2 |
:1035B00043479B01AC01C801B7010E94E04620E0EF |
:1035C00030E048E452E40E94BD470E942647FB01D8 |
:1035D00077FF03C0F095E195FF4F31E0EE30F30740 |
:1035E00034F4E255FB4F8491682F772747C086E17A |
:1035F000E737F8071CF06AE570E040C027E0E637DF |
:10360000F2071CF069E570E039C034E0EE37F307EB |
:103610001CF068E570E032C083E0E433F8071CF08A |
:1036200067E570E02BC022E0E038F2071CF066E5A9 |
:1036300070E024C032E0E830F3071CF065E570E08C |
:103640001DC081E0E83BF8071CF064E570E016C09F |
:1036500021E0EC37F2071CF063E570E00FC031E0C9 |
:10366000EF34F3071CF062E570E008C0EB52F14064 |
:103670001CF061E570E002C060E570E01C161D06FC |
:103680006CF48B2D992787FD90959C01629FC0015A |
:10369000639F900D729F900D11240AC0D7FC05C046 |
:1036A00084EB90E0861B970B03C0CB01845B9040BA |
:1036B000E9E0CDB7DEB70C94B948FC01259134910F |
:1036C000FC01329645915491CA01B9010895A0E0D8 |
:1036D000B0E0EDE6FBE10C949E489C0197FD04C030 |
:1036E00061E0C62ED12C06C0309521953F4F5FEF8B |
:1036F000C52ED52EC9018B5590408A35910530F4E1 |
:1037000084EB90E0821B930B9C010FC0C901855B89 |
:1037100090408A35910518F4245B30400EC0C901F1 |
:103720008F5091408A35910518F0C1E0D0E007C074 |
:1037300088E691E0821B930B9C01CFEFDFEF220F15 |
:10374000331F220F331FC90184549A4F0E945D1BFF |
:103750007B018C01B601882777FD8095982F0E9408 |
:1037600043479B01AC01C801B7010E94BD477B01E3 |
:103770008C01BE01882777FD8095982F0E944347D2 |
:103780009B01AC01C801B7010E94BD47E8E0CDB77D |
:10379000DEB70C94BA482AE530E0281B390BC90182 |
:1037A0000E94671B0895FC0197FD02C091E004C0D0 |
:1037B000F095E195FF4F9FEFE85DF84F8491989F5A |
:1037C000802D1124992787FD909508951092B900B6 |
:1037D0008AE28093B800089585EA8093BC0080E077 |
:1037E00090E0089584E98093BC0008951092B90098 |
:1037F0008093BB0085E88093BC0080E090E0089552 |
:103800001F920F920FB60F9211248F939F93EF93F5 |
:10381000FF93809171088F5F809371088150E82F2A |
:10382000FF27E830F10508F064C0E759FF4F0C941A |
:10383000CB4880917208880F8E5A09C08091720817 |
:103840008F5F80937208815027C080916109109228 |
:10385000B9008093BB0085E88093BC004AC084E92E |
:103860008093BC0080917208843018F41092710823 |
:1038700002C01092720885EAEFCF80917308880F1A |
:103880008D5AE5CF8091BB00E0917308FF27EB587C |
:10389000F34F808380917308813039F08130A8F232 |
:1038A000823031F0833029F506C080916209CFCF94 |
:1038B00080916709CCCF80916D09C9CF8091730841 |
:1038C0009091BB00E82FFF27EB58F34F94838F5F55 |
:1038D00080937308843010F01092730884E9809309 |
:1038E000BC008AE090E090937D0180937C0110926F |
:1038F00071088091BC0080688093BC00FF91EF91BB |
:103900009F918F910F900FBE0F901F9018954CEBC9 |
:1039100050E084E9DA018C93109271082BEB30E0CF |
:10392000F90180811092720880E88C931092BD009A |
:103930001092BA001082E9EBF0E01082A8EBB0E040 |
:103940001C9210828AE28C9385EADA018C931082B1 |
:10395000F901108285E88C93089583EC80938100AF |
:10396000EFE6F0E080818062808310927D08109203 |
:103970007C0810927B0810927A08109279081092B5 |
:10398000780808951F920F920FB60F9211240F938B |
:103990001F932F933F934F935F936F937F938F93D7 |
:1039A0009F93AF93BF93CF93DF93EF93FF932091B8 |
:1039B0008600309187008091760890917708281BC7 |
:1039C000390B8091860090918700909377088093BF |
:1039D0007608C9018D5D95408356994148F481E090 |
:1039E00090E0909375088093740810926C0167C002 |
:1039F000C0917408D0917508CE30D1050CF05FC02D |
:103A0000C9018B5F9040845B914008F040C0A901E0 |
:103A1000425D5140FE01EE0FFF1FE358F34F8081DE |
:103A20009181FA01E81BF90BCF01F7FF03C09095D4 |
:103A300081959F4F06974CF48091D408883C28F4D8 |
:103A40008091D408865F8093D408FE01EE0FFF1F9B |
:103A50008F010358134FD8012D913C91C901880F54 |
:103A6000991F820F931F840F951F64E070E00E94DE |
:103A70004448D8018D919C9111979B01281B390BCB |
:103A8000E556F34F3183208311967C936E93FE01AC |
:103A90003196F0937508E0937408E530F10519F458 |
:103AA0005D9A5C980BC05D98E630F10511F45C9A64 |
:103AB00005C05C98379711F45B9A01C05B98FF9141 |
:103AC000EF91DF91CF91BF91AF919F918F917F91B6 |
:103AD0006F915F914F913F912F911F910F910F9097 |
:103AE0000FBE0F901F901895AF92BF92CF92DF92AA |
:103AF000EF92FF920F931F9310927A0080916008CB |
:103B0000882369F08091540890915508609160086D |
:103B100077270E9444487093F60C6093F50C8091CF |
:103B20006108882369F08091560890915708609148 |
:103B3000610877270E9444487093F40C6093F30C5B |
:103B400080916208882369F0809158089091590803 |
:103B50006091620877270E9444487093020D609339 |
:103B6000010D809163088823D9F1E090FE0CF0905C |
:103B7000FF0C60915C0870915D082091630800273C |
:103B8000F7FC0095102F5701680183E0AA0CBB1CBD |
:103B9000CC1CDD1C8A95D1F7AE18BF08C00AD10A2B |
:103BA000882777FD8095982FB4E0660F771F881FD0 |
:103BB000991FBA95D1F73327442755270E94794892 |
:103BC000A20EB31EC41ED51EC601B50128E030E00A |
:103BD00040E050E00E9479483093FF0C2093FE0CA7 |
:103BE000809164088823D9F1E090070DF090080DCA |
:103BF00060915A0870915B08209164080027F7FCD7 |
:103C00000095102F57016801A3E0AA0CBB1CCC1C27 |
:103C1000DD1CAA95D1F7AE18BF08C00AD10A8827C3 |
:103C200077FD8095982FF4E0660F771F881F991F06 |
:103C3000FA95D1F73327442755270E947948A20ED9 |
:103C4000B31EC41ED51EC601B50128E030E040E019 |
:103C500050E00E9479483093080D2093070D809121 |
:103C600065088823A1F1E090F80CF090F90C6091C0 |
:103C70005E0870915F08209165080027F7FC0095A9 |
:103C8000102F57016801E3E0AA0CBB1CCC1CDD1C03 |
:103C9000EA95D1F7AE18BF08C00AD10A882777FD88 |
:103CA0008095982F3327442755270E947948A20EE4 |
:103CB000B31EC41ED51EC601B50128E030E040E0A9 |
:103CC00050E00E9479483093F90C2093F80C109240 |
:103CD00055081092540810926008109257081092DC |
:103CE00056081092610810925908109258081092C4 |
:103CF000620810925B0810925A08109264081092A1 |
:103D00005D0810925C081092630810925F08109290 |
:103D10005E08109265088091AC089091AD08A09162 |
:103D2000AE08B091AF088093980890939908A0933B |
:103D30009A08B0939B0880919C0890919D08A0914F |
:103D40009E08B0919F088093880890938908A0935B |
:103D50008A08B0938B088091A4089091A508A0913F |
:103D6000A608B091A7088093900890939108A0931B |
:103D70009208B09393088091A0089091A108A09117 |
:103D8000A208B091A30880938C0890938D08A0930B |
:103D90008E08B0938F088091A8089091A908A091EF |
:103DA000AA08B091AB088093940890939508A093CB |
:103DB0009608B09397088FEE80937A002091C408FC |
:103DC0003091C5088091BD0CE82FFF27EE0FFF1F33 |
:103DD000E358F34F8081918182599F4F281739070B |
:103DE0001CF42F5F3F4F0CC08081918182599F4FFF |
:103DF000821793074CF42115310531F021503040E2 |
:103E00003093C5082093C4082091C6083091C70894 |
:103E10008091BE0CE82FFF27EE0FFF1FE358F34FF2 |
:103E20008081918182599F4F281739071CF42F5F99 |
:103E30003F4F0CC08081918182599F4F8217930719 |
:103E40004CF42115310531F0215030403093C70832 |
:103E50002093C6082091C8083091C9088091BF0CF2 |
:103E6000E82FFF27EE0FFF1FE358F34F808191816A |
:103E700082599F4F281739071CF42F5F3F4F0CC002 |
:103E80008081918182599F4F821793074CF42115AD |
:103E9000310531F0215030403093C9082093C808D3 |
:103EA0002091CA083091CB088091C00CE82FFF27E1 |
:103EB000EE0FFF1FE358F34F8081918182599F4F8E |
:103EC000281739071CF42F5F3F4F0CC08081918168 |
:103ED00082599F4F821793074CF42115310531F019 |
:103EE000215030403093CB082093CA082091CC0851 |
:103EF0003091CD0880918F0C9091900C82599F4FFA |
:103F0000281739071CF42F5F3F4F0EC080918F0C8C |
:103F10009091900C82599F4F821793074CF4211572 |
:103F2000310531F0215030403093CD082093CC083A |
:103F30002091CE083091CF088091910C9091920CF5 |
:103F400082599F4F281739071CF42F5F3F4F0EC02F |
:103F50008091910C9091920C82599F4F82179307F8 |
:103F60004CF42115310531F0215030403093CF0809 |
:103F70002093CE082091D0083091D1088091930CE5 |
:103F80009091940C82599F4F281739071CF42F5F8A |
:103F90003F4F0EC08091930C9091940C82599F4F8B |
:103FA000821793074CF42115310531F02150304030 |
:103FB0003093D1082093D0082091D2083091D308B3 |
:103FC0008091950C9091960C82599F4F2817390734 |
:103FD0001CF42F5F3F4F0EC08091950C9091960C72 |
:103FE00082599F4F821793074CF42115310531F008 |
:103FF000215030403093D3082093D2088091C408D8 |
:104000009091C50897FF05C01092C5081092C4088A |
:104010000AC08F3F910539F034F08FEF90E0909314 |
:10402000C5088093C4088091C6089091C70897FF7F |
:1040300005C01092C7081092C6080AC08F3F9105AC |
:1040400039F034F08FEF90E09093C7088093C60862 |
:104050008091C8089091C90897FF05C01092C908BF |
:104060001092C8080AC08F3F910539F034F08FEFE5 |
:1040700090E09093C9088093C8088091CA089091F5 |
:10408000CB0897FF05C01092CB081092CA080AC04F |
:104090008F3F910539F034F08FEF90E09093CB088B |
:1040A0008093CA088091CC089091CD0897FF05C0F5 |
:1040B0001092CD081092CC080AC08F3F910539F0BC |
:1040C00034F08FEF90E09093CD088093CC088091EE |
:1040D000CE089091CF0897FF05C01092CF0810929C |
:1040E000CE080AC08F3F910539F034F08FEF90E091 |
:1040F0009093CF088093CE088091D0089091D108FA |
:1041000097FF05C01092D1081092D0080AC08F3FC7 |
:10411000910539F034F08FEF90E09093D1088093BF |
:10412000D0088091D2089091D30897FF05C01092D3 |
:10413000D3081092D2080AC08F3F910539F034F0AD |
:104140008FEF90E09093D3088093D2081F910F9146 |
:10415000FF90EF90DF90CF90BF90AF9008951092B6 |
:104160007A0080916008882369F0809154089091CA |
:1041700055086091600877270E9444487093F60CB8 |
:104180006093F50C80916108882369F0809156084E |
:10419000909157086091610877270E944448709376 |
:1041A000F40C6093F30C80916208882369F080918D |
:1041B0005808909159086091620877270E944448F6 |
:1041C0007093020D6093010D809163088823D1F0F4 |
:1041D00060915C0870915D0820916308882777FDE5 |
:1041E0008095982FF4E0660F771F881F991FFA9526 |
:1041F000D1F73327442755270E9479483093FF0C85 |
:104200002093FE0C809164088823D1F060915A08B5 |
:1042100070915B0820916408882777FD8095982F1E |
:10422000E4E0660F771F881F991FEA95D1F73327BF |
:10423000442755270E9479483093080D2093070D95 |
:1042400080916508882399F060915E0870915F08FD |
:1042500020916508882777FD8095982F332744277C |
:1042600055270E9479483093F90C2093F80C10924E |
:104270005508109254081092600810925708109236 |
:10428000560810926108109259081092580810921E |
:10429000620810925B0810925A08109264081092FB |
:1042A0005D0810925C081092630810925F081092EB |
:1042B0005E08109265088FEE80937A002091C40802 |
:1042C0003091C5088091BD0CE82FFF27EE0FFF1F2E |
:1042D000E358F34F8081918182599F4F2817390706 |
:1042E0001CF42F5F3F4F0CC08081918182599F4FFA |
:1042F000821793074CF42115310531F021503040DD |
:104300003093C5082093C4082091C6083091C7088F |
:104310008091BE0CE82FFF27EE0FFF1FE358F34FED |
:104320008081918182599F4F281739071CF42F5F94 |
:104330003F4F0CC08081918182599F4F8217930714 |
:104340004CF42115310531F0215030403093C7082D |
:104350002093C6082091C8083091C9088091BF0CED |
:10436000E82FFF27EE0FFF1FE358F34F8081918165 |
:1043700082599F4F281739071CF42F5F3F4F0CC0FD |
:104380008081918182599F4F821793074CF42115A8 |
:10439000310531F0215030403093C9082093C808CE |
:1043A0002091CA083091CB088091C00CE82FFF27DC |
:1043B000EE0FFF1FE358F34F8081918182599F4F89 |
:1043C000281739071CF42F5F3F4F0CC08081918163 |
:1043D00082599F4F821793074CF42115310531F014 |
:1043E000215030403093CB082093CA082091CC084C |
:1043F0003091CD0880918F0C9091900C82599F4FF5 |
:10440000281739071CF42F5F3F4F0EC080918F0C87 |
:104410009091900C82599F4F821793074CF421156D |
:10442000310531F0215030403093CD082093CC0835 |
:104430002091CE083091CF088091910C9091920CF0 |
:1044400082599F4F281739071CF42F5F3F4F0EC02A |
:104450008091910C9091920C82599F4F82179307F3 |
:104460004CF42115310531F0215030403093CF0804 |
:104470002093CE082091D0083091D1088091930CE0 |
:104480009091940C82599F4F281739071CF42F5F85 |
:104490003F4F0EC08091930C9091940C82599F4F86 |
:1044A000821793074CF42115310531F0215030402B |
:1044B0003093D1082093D0082091D2083091D308AE |
:1044C0008091950C9091960C82599F4F281739072F |
:1044D0001CF42F5F3F4F0EC08091950C9091960C6D |
:1044E00082599F4F821793074CF42115310531F003 |
:1044F000215030403093D3082093D2088091C408D3 |
:104500009091C50897FF05C01092C5081092C40885 |
:104510000AC08F3F910539F034F08FEF90E090930F |
:10452000C5088093C4088091C6089091C70897FF7A |
:1045300005C01092C7081092C6080AC08F3F9105A7 |
:1045400039F034F08FEF90E09093C7088093C6085D |
:104550008091C8089091C90897FF05C01092C908BA |
:104560001092C8080AC08F3F910539F034F08FEFE0 |
:1045700090E09093C9088093C8088091CA089091F0 |
:10458000CB0897FF05C01092CB081092CA080AC04A |
:104590008F3F910539F034F08FEF90E09093CB0886 |
:1045A0008093CA088091CC089091CD0897FF05C0F0 |
:1045B0001092CD081092CC080AC08F3F910539F0B7 |
:1045C00034F08FEF90E09093CD088093CC088091E9 |
:1045D000CE089091CF0897FF05C01092CF08109297 |
:1045E000CE080AC08F3F910539F034F08FEF90E08C |
:1045F0009093CF088093CE088091D0089091D108F5 |
:1046000097FF05C01092D1081092D0080AC08F3FC2 |
:10461000910539F034F08FEF90E09093D1088093BA |
:10462000D0088091D2089091D30897FF05C01092CE |
:10463000D3081092D20808958F3F910539F034F0D5 |
:104640008FEF90E09093D3088093D20808951F9342 |
:104650008091C40C8B3F98F08B3F19F48091C40873 |
:104660000EC08C3F19F48091C60809C08D3F19F423 |
:104670008091C80804C08E3F21F48091CA088093BD |
:10468000870180918701882319F41092870104C063 |
:104690008F3F11F4809387018091C30C8B3F98F07A |
:1046A0008B3F19F48091C4080EC08C3F19F480919F |
:1046B000C60809C08D3F19F48091C80804C08E3F18 |
:1046C00021F48091CA088093860180918601882315 |
:1046D00019F41092860105C0843618F084E68093A0 |
:1046E00086018091C50C8B3F98F08B3F19F4809127 |
:1046F000C4080EC08C3F19F48091C60809C08D3FD4 |
:1047000019F48091C80804C08E3F21F48091CA0832 |
:104710008093880180918801882319F41092880180 |
:1047200005C0843618F084E6809388018091C70C18 |
:104730008B3F98F08B3F19F48091C4080EC08C3FDA |
:1047400019F48091C60809C08D3F19F48091C808FA |
:1047500004C08E3F21F48091CA0880938901809122 |
:104760008901882319F41092890104C08F3F11F444 |
:10477000809389018091CE0C8B3F98F08B3F19F488 |
:104780008091C4080EC08C3F19F48091C60809C0FE |
:104790008D3F19F48091C80804C08E3F21F48091A8 |
:1047A000CA0880938A0180918A01882319F41092A3 |
:1047B0008A0104C08F3F11F480938A018091CF0C4D |
:1047C0008B3F98F08B3F19F48091C4080EC08C3F4A |
:1047D00019F48091C60809C08D3F19F48091C8086A |
:1047E00004C08E3F21F48091CA0880938B01809190 |
:1047F0008B018B3010F48AE002C08F3F11F480935C |
:104800008B018091D00C8B3F98F08B3F19F48091F5 |
:10481000C4080EC08C3F19F48091C60809C08D3FB2 |
:1048200019F48091C80804C08E3F21F48091CA0811 |
:1048300080938C0180918C01882319F410928C0153 |
:1048400004C08F3F11F480938C018091D50C8B3F75 |
:1048500098F08B3F19F48091C4080EC08C3F19F476 |
:104860008091C60809C08D3F19F48091C80804C022 |
:104870008E3F21F48091CA0880938E0180918E0131 |
:10488000882319F410928E0104C08F3F11F4809395 |
:104890008E018091D60C8B3F98F08B3F19F480915C |
:1048A000C4080EC08C3F19F48091C60809C08D3F22 |
:1048B00019F48091C80804C08E3F21F48091CA0881 |
:1048C0008093E2088091E208882319F41092E208AC |
:1048D00004C08F3F11F48093E2088091D70C8B3F86 |
:1048E00098F08B3F19F48091C4080EC08C3F19F4E6 |
:1048F0008091C60809C08D3F19F48091C80804C092 |
:104900008E3F21F48091CA088093E3088091E308E8 |
:10491000882319F41092E30804C08F3F11F48093A8 |
:10492000E3088091D80C8B3F98F08B3F19F480916D |
:10493000C4080EC08C3F19F48091C60809C08D3F91 |
:1049400019F48091C80804C08E3F21F48091CA08F0 |
:104950008093E4088091E408882319F41092E40815 |
:1049600004C08F3F11F48093E4088091D90C8B3FF1 |
:1049700098F08B3F19F48091C4080EC08C3F19F455 |
:104980008091C60809C08D3F19F48091C80804C001 |
:104990008E3F21F48091CA088093E5088091E50854 |
:1049A000882319F41092E50804C08F3F11F4809316 |
:1049B000E5089091DA0C9B3FB0F09B3F19F4809191 |
:1049C000C40804C09C3F29F48091C60880938F01DD |
:1049D0000CC09D3F19F48091C808F8CF9E3F29F480 |
:1049E0008091CA08F3CF90938F0180918F01882323 |
:1049F00019F410928F0104C08F3F11F480938F013E |
:104A00009B3FB0F09B3F19F48091C40804C09C3FC9 |
:104A100029F48091C60880938F010CC09D3F19F442 |
:104A20008091C808F8CF9E3F29F48091CA08F3CF3F |
:104A300090938F0180918F01882319F410928F0138 |
:104A400004C08F3F11F480938F019B3FB0F09B3FD8 |
:104A500019F48091C40804C09C3F29F48091C608D1 |
:104A600080938F010CC09D3F19F48091C808F8CF46 |
:104A70009E3F29F48091CA08F3CF90938F018091D3 |
:104A80008F01882319F410928F0104C08F3F11F415 |
:104A900080938F018091DF0C8B3F98F08B3F19F44E |
:104AA0008091C4080EC08C3F19F48091C60809C0DB |
:104AB0008D3F19F48091C80804C08E3F21F4809185 |
:104AC000CA088093900180919001882319F4109274 |
:104AD000900104C08F3F11F48093900110918E01DA |
:104AE000612F772767FD7095872F972F0E94434787 |
:104AF00017FF06C020E030E040E853E40E949E46E5 |
:104B000027E137EB41ED58E30E94BD4760938201F6 |
:104B10007093830180938401909385018091CC0CE4 |
:104B20008093000D8091CB0C8093F70C1F9108951A |
:104B300081E08093B90C42E04093BA0C83E080930B |
:104B4000BB0C94E09093BC0C35E03093BD0C86E038 |
:104B50008093BE0C87E08093BF0C88E08093C00CEC |
:104B60001092C10C8EE18093C20C8BEF8093C40C29 |
:104B70008AE08093C50C22E32093C30C2093C70CDA |
:104B80004093C60C9093C80C1092C90C90E190937E |
:104B9000CA0C3093CB0C8AEF8093CC0C8AE18093C3 |
:104BA000CD0C9093CE0C8FEA8093CF0C8093D00CD9 |
:104BB0008FE58093D10C83E28093D20C84E18093C3 |
:104BC000D30C1092D40C1092D50C1092D60C1092DB |
:104BD000D70C1092D80C88E78093D90C84E6809388 |
:104BE000DA0C88E28093DB0C1092E20C2093DC0C50 |
:104BF00086E98093DD0C3093DE0C2093DF0C8AE590 |
:104C00008093E00C1092E10CA7EEBCE0EDE6F1E041 |
:104C10008CE001900D928150E1F7089581E080933E |
:104C2000B90C82E08093BA0C83E08093BB0C94E0D3 |
:104C30009093BC0C45E04093BD0C86E08093BE0C85 |
:104C400087E08093BF0C38E03093C00C1092C10C09 |
:104C50008EE18093C20C8BEF8093C40C8AE080932A |
:104C6000C50C22E32093C30C2093C70C9093C60C71 |
:104C70009093C80C3093C90C90E19093CA0C409368 |
:104C8000CB0C8AEF8093CC0C8AE18093CD0C90936F |
:104C9000CE0C98E79093CF0C36E93093D00C8FE58B |
:104CA0008093D10C83E28093D20C84E18093D30C67 |
:104CB0001092D40C1092D50C1092D60C1092D70CE6 |
:104CC0001092D80C9093D90C84E68093DA0C88E289 |
:104CD0008093DB0C1092E20C2093DC0C3093DD0C03 |
:104CE0004093DE0C2093DF0C8AE58093E00C109259 |
:104CF000E10CA7EEBCE0E5E7F1E08CE001900D925D |
:104D00008150E1F708958091DB08882301F5109226 |
:104D10006209109261091092670910926D098091E1 |
:104D20003C08882311F08093610980913D08882315 |
:104D300011F08093620980913E08882311F08093DE |
:104D40006D0980913F08882311F0809367091092C4 |
:104D50007108109272080E94EC1B0895CF93DF93A4 |
:104D600010927F0810927E0810928108109280089D |
:104D700080E090E0A0E0B0E0809382089093830808 |
:104D8000A0938408B093850810927908109278084F |
:104D900010927B0810927A0810927D0810927C087D |
:104DA0000E94AF2085E090E00E94550EEC01CE01FC |
:104DB0000E945E0E8823D9F30E94AF208091C10C1F |
:104DC00080FF10C080910F0190911001875B93408C |
:104DD00038F480910F01909110018E5E924010F492 |
:104DE0000E94C213809100018A3041F58091F50C38 |
:104DF0009091F60C97FF03C0909581959F4F9093EB |
:104E00007908809378088091F30C9091F40C97FFC7 |
:104E100003C0909581959F4F90937B0880937A086B |
:104E20008091010D9091020D97FF03C0909581959F |
:104E30009F4F90937D0880937C0833C08091F50C40 |
:104E40009091F60C97FF03C0909581959F4F62E07B |
:104E500070E00E94444870937908609378088091CC |
:104E6000F30C9091F40C97FF03C0909581959F4FA0 |
:104E700062E070E00E94444870937B0860937A0877 |
:104E80008091010D9091020D97FF03C0909581953F |
:104E90009F4F62E070E00E94444870937D086093E9 |
:104EA0007C088091070D9091080D97FF03C09095A5 |
:104EB00081959F4F60E170E00E94444870938108A3 |
:104EC000609380088091FE0C9091FF0C97FF03C0C7 |
:104ED000909581959F4F60E170E00E9444487093E7 |
:104EE0007F0860937E0860914E0C70914F0C88276C |
:104EF00077FD8095982F0E944347609382087093B6 |
:104F00008308809384089093850810929C081092DF |
:104F10009D0810929E0810929F081092A00810926F |
:104F2000A1081092A2081092A3081092A40810924F |
:104F3000A5081092A6081092A7081092A80810922F |
:104F4000A9081092AA081092AB081092AC0810920F |
:104F5000AD081092AE081092AF081092F60C1092A5 |
:104F6000F50C1092F40C1092F30C1092020D1092AA |
:104F7000010D80910B0190910C01A0910D01B09158 |
:104F80000E019093510C8093500C10926708109270 |
:104F900066081092B4081092B5081092B6081092E4 |
:104FA000B7088091B8089091B9089093BB08809396 |
:104FB000BA0882E390E090934E0880934D08DF9109 |
:104FC000CF9108951F93182F0EC08091DB0888237E |
:104FD00061F484E690E090934E0880934D088AEF48 |
:104FE00090E00E94FC0F115080F71F910895A6E0F9 |
:104FF000B0E0EDEFF7E20C9494480E94741D299AFA |
:10500000E091BB0CFF27EE0FFF1FE358F34FA0808A |
:10501000B18028E730E0A20EB31EB7FE02C0AA247A |
:10502000BB248091D408843608F055C080910201D9 |
:10503000882399F480910501909106018F5F9F4F1D |
:1050400061F488E99AE390934E0880934D0880E0DC |
:105050009CE090930601809305018091EF08909168 |
:10506000F008009731F001979093F0088093EF08D3 |
:1050700004C01092DB081092BE08289A8091EA08BA |
:105080009091EB08815D974018F18091D20CA82E89 |
:10509000BB2481E08093BE08E091B90CFF27EE0F9E |
:1050A000FF1FE358F34F11821082E091BA0CFF27E3 |
:1050B000EE0FFF1FE358F34F11821082E091BC0CFA |
:1050C000FF27EE0FFF1FE358F34F11821082D2C16A |
:1050D0001092DB08CFC18091D4088D3808F4CAC182 |
:1050E0001092BE088091D30C22E3829FC00111244C |
:1050F0009093F0088093EF0859E2A516B104ACF044 |
:105100008091EA089091EB086FEF8F3F960729F0A6 |
:1051100001969093EB088093EA088091EA089091B9 |
:10512000EB089093C2088093C1088091EA0890919F |
:10513000EB08883C910520F078E2A716B10404F54D |
:1051400010920109109202091092030910920409A9 |
:105150001092FD081092FE081092FF0810920009AC |
:105160001092AC081092AD081092AE081092AF08E1 |
:105170001092B0081092B1081092B2081092B308C1 |
:1051800089ECA816B1040CF4D5C08091DB08882303 |
:1051900009F070C1E091BC0CFF27EE0FFF1FE35830 |
:1051A000F34F808191818C3491050CF4C0C08091C3 |
:1051B000EE088F5F8093EE08893C08F45BC1299864 |
:1051C0001092DB081092EE081092EB081092EA0899 |
:1051D0008091B90C282F3327F901EE0FFF1FE358F8 |
:1051E000F34F80819181873491059CF4E091BA0C52 |
:1051F000FF27EE0FFF1FE358F34F0190F081E02DE2 |
:10520000F7FF03C0F095E195FF4FE734F1050CF48B |
:105210006CC08091BA0C682F7727DB01AA0FBB1FE7 |
:10522000A358B34F8D919C911197873491053CF011 |
:10523000F901EE0FFF1FE358F34F808191818D91AB |
:105240009C918734910564F0F901EE0FFF1FE3583C |
:10525000F34F808191818734910514F042E001C0C1 |
:1052600041E0FB01EE0FFF1FE358F34F8081918176 |
:10527000863491055CF4F901EE0FFF1FE358F34FFC |
:1052800080819181873491050CF043E0FB01EE0FA2 |
:10529000FF1FE358F34F808191818A5B9F4F5CF43D |
:1052A000F901EE0FFF1FE358F34F8081918187349E |
:1052B00091050CF044E0660F771F6358734FFB01B4 |
:1052C000808191818A5B9F4F5CF4220F331F2358AA |
:1052D000334FD9018D919C91863491050CF445E0B2 |
:1052E000A2E0B0E0042E0E94D9488091C10C80FF5A |
:1052F00010C080910F0190911001875B934038F4AA |
:1053000080910F01909110018E5E924010F40E94E6 |
:10531000C2130E9418044AE369EB7CE00E943F0438 |
:105320000E94AE260E9418040E94E227A3C0109299 |
:10533000EE08A0C0F3E2AF16B1040CF09BC0809160 |
:10534000BC0C482F5527FA01EE0FFF1FE358F34F0F |
:1053500080819181855B9F4F0CF06DC08091ED083D |
:105360008F5F8093ED08893C08F467C088EC8093D8 |
:10537000ED0881E090E09093EB088093EA0881E0EB |
:105380008093DB081092F9081092FA081092FB083B |
:105390001092FC081092AC081092AD081092AE0862 |
:1053A0001092AF081092B0081092B1081092B20893 |
:1053B0001092B30810929C0810929D0810929E08BB |
:1053C00010929F081092A4081092A5081092A608A7 |
:1053D0001092A7088091880890918908A0918A0866 |
:1053E000B0918B088093A0089093A108A093A20885 |
:1053F000B093A3088091900890919108A091920891 |
:10540000B09193088093A8089093A908A093AA0844 |
:10541000B093AB081092010910920209109203098F |
:10542000109204091092FD081092FE081092FF08D5 |
:105430001092000902C01092ED08440F551F435806 |
:10544000534FDA018D919C918C3491058CF08091B1 |
:10545000EC088F5F8093EC08893C60F01092DB08C9 |
:1054600088EC8093EC081092EB081092EA0802C0D6 |
:105470001092EC0880916C01815080936C018091B6 |
:105480006C018F3F29F08091BE08882309F4D0C1B8 |
:105490000E942723E091B90CFF27EE0FFF1FDF01C9 |
:1054A000A358B34F4D915C918091C80C482E552460 |
:1054B000E556F34F808191812091C90C3327449D9B |
:1054C0007001459DF00C549DF00C1124FC01E29FED |
:1054D000C001E39F900DF29F900D1124E80EF91E7C |
:1054E000F092D608E092D508E091BA0CFF27EE0FB3 |
:1054F000FF1FDF01A358B34F4D915C91E556F34F69 |
:1055000080819181449D6001459DD00C549DD00CBB |
:105510001124AC01429FC001439F900D529F900DFA |
:105520001124C80ED91ED092D808C092D708E09195 |
:10553000BC0CFF27EE0FFF1FE358F34F80819181D2 |
:10554000909581959F4F9093DA088093D908109198 |
:105550008B01612F772767FD7095872F972F0E940A |
:10556000434717FF06C020E030E040E853E40E94C4 |
:105570009E4620E030E040E251E40E949E4620E05A |
:1055800030E040E85BE30E94BD473B014C01609383 |
:10559000030D7093040D8093050D9093060D1091EB |
:1055A0008C01612F772767FD7095872F972F0E94B9 |
:1055B000434717FF06C020E030E040E853E40E9474 |
:1055C0009E4620E030EE4BE257E40E94E0466093B6 |
:1055D000FA0C7093FB0C8093FC0C9093FD0C809163 |
:1055E000C10C82FF0CC080E090E0A0E0B0E08093AE |
:1055F000FA0C9093FB0CA093FC0CB093FD0C20E0F4 |
:1056000030E040E050E0C401B3010E944D478823E0 |
:1056100064F480E090E0A0E0B0E08093030D90930C |
:10562000040DA093050DB093060D20E030E040E09E |
:1056300050E06091FA0C7091FB0C8091FC0C909101 |
:10564000FD0C0E944D47882364F480E090E0A0E0C8 |
:10565000B0E08093FA0C9093FB0CA093FC0CB093F9 |
:10566000FD0C8091E10C992782FDCEC083FDCCC05A |
:105670008091880890918908A0918A08B0918B0840 |
:1056800081569A4EA040B04044F1C20173E0880FA9 |
:10569000991F7A95E1F7A701481B590B5093D6083B |
:1056A0004093D5088091880890918908A0918A0834 |
:1056B000B0918B0881589843A140B0400CF43FC092 |
:1056C000C20164E0880F991F6A95E1F7481B590BE6 |
:1056D0005093D6084093D50832C0809188089091A5 |
:1056E0008908A0918A08B0918B08805A9541AF4FE4 |
:1056F000BF4F2CF5920153E0220F331F5A95E1F76B |
:105700002E0D3F1D3093D6082093D5088091880830 |
:1057100090918908A0918A08B0918B08815898438C |
:10572000A140B04064F0C20144E0880F991F4A953F |
:10573000E1F7281B390B3093D6082093D5088091C8 |
:10574000900890919108A0919208B0919308815689 |
:105750009A4EA040B0403CF1C20123E0880F991F4F |
:105760002A95E1F7A601481B590B5093D80840939E |
:10577000D7088091900890919108A0919208B091DB |
:10578000930881589843A140B0400CF43DC004E018 |
:10579000440C551C0A95E1F7441955095093D80853 |
:1057A0004093D70831C08091900890919108A091C2 |
:1057B0009208B0919308805A9541AF4FBF4F24F59E |
:1057C000920113E0220F331F1A95E1F72C0D3D1DB6 |
:1057D0003093D8082093D708809190089091910831 |
:1057E000A0919208B091930881589843A140B0408D |
:1057F0005CF0B4E0440C551CBA95E1F72419350966 |
:105800003093D8082093D70842989091E50880916A |
:10581000C008891740F0992331F088B194E08927B6 |
:1058200088B91092C0088091C0088F5F8093C0082B |
:105830008091BA0CE82FFF27EE0FFF1FE358F34FBC |
:10584000208131818091E00C482F55274217530762 |
:1058500024F48091E10C82FD0DC0208131818827E4 |
:105860009927841B950B281739077CF48091E10C4C |
:1058700083FF0BC081E08093E1088091DF0C482E0C |
:1058800055244A145B0424F002C01092E10825015B |
:105890008091B90CE82FFF27EE0FFF1FE358F34F5D |
:1058A000808191814817590724F48091E10C80FD93 |
:1058B0000DC02081318188279927841B950B2817DB |
:1058C00039078CF48091E10C81FF0DC081E0809359 |
:1058D000E0081092E1088091DF0C99278415950566 |
:1058E00024F42C0102C01092E0088091BE088823A5 |
:1058F00041F11092DA081092D9081092D60810924D |
:10590000D5081092D8081092D7088DEC9CECACEC1E |
:10591000BDE38093030D9093040DA093050DB09308 |
:10592000060D8AE097EDA3EABBE38093FA0C90930F |
:10593000FB0CA093FC0CB093FD0C1092E1081092AC |
:10594000E00880916808909169088D54914008F4AE |
:1059500098C020918C0830918D0840918E0850910C |
:105960008F088091880890918908A0918A08B09149 |
:105970008B08281B390B4A0B5B0BE0909408F090C6 |
:105980009508009196081091970880919008909141 |
:105990009108A0919208B0919308E81AF90A0A0BAD |
:1059A0001B0B1092690810926808273A31054105CF |
:1059B000510534F0809178089091790801960AC0D9 |
:1059C0002A553F4F4F4F5F4F4CF48091780890918C |
:1059D00079080197909379088093780877EAE71619 |
:1059E000F1040105110534F080917A0890917B084B |
:1059F00001960EC08AE5E8168FEFF8068FEF0807CC |
:105A00008FEF18074CF480917A0890917B080197EA |
:105A100090937B0880937A0810927A00809188088E |
:105A200090918908A0918A08B0918B088093A00872 |
:105A30009093A108A093A208B093A3088091900826 |
:105A400090919108A0919208B09193088093A80832 |
:105A50009093A908A093AA08B093AB0880919808E6 |
:105A600090919908A0919A08B0919B088093B008F2 |
:105A70009093B108A093B208B093B3088FEE8093CF |
:105A80007A008091C10CA82FBB27BE83AD831D0176 |
:105A9000B0E22B223324A5FF8AC060918808709160 |
:105AA000890880918A0890918B08A090CD0CBB2426 |
:105AB000CC24DD24E090FE0CF090FF0CA6019501B3 |
:105AC0000E9479480027F7FC0095102F2E193F09F6 |
:105AD000400B510BCA01B90120E130E040E050E039 |
:105AE0000E94794839014A012093F5083093F6085D |
:105AF0004093F7085093F8086091900870919108CE |
:105B00008091920890919308E090070DF090080D15 |
:105B1000A60195010E9479480027F7FC0095102FF7 |
:105B20002E193F09400B510BCA01B90120E130E0A9 |
:105B300040E050E00E9479482093F1083093F20849 |
:105B40004093F3085093F408E5EF6E16E1E07E060B |
:105B5000E0E08E06E0E09E062CF084EF91E0A0E00D |
:105B6000B0E00DC0FCE06F16FEEF7F06FFEF8F0682 |
:105B7000FFEF9F0664F48CE09EEFAFEFBFEF8093E2 |
:105B8000F5089093F608A093F708B093F808253F1E |
:105B900061E0360760E0460760E056070CF0F8C0A9 |
:105BA0002C503E4F4F4F5F4F0CF019C1FBC020E00F |
:105BB00030E040E050E06091FA0C7091FB0C809175 |
:105BC000FC0C9091FD0C0E944D47882309F4F7C00E |
:105BD0008091E008882309F0F2C08091E1088823D1 |
:105BE00009F0EDC0609188087091890880918A0859 |
:105BF00090918B082091CD0C622E772488249924D3 |
:105C0000E090FE0CF090FF0CA40193010E947948F3 |
:105C10000027F7FC0095102F2E193F09400B510B60 |
:105C20002093F5083093F6084093F7085093F8084E |
:105C30008091FE0C9091FF0CAA2797FDA095BA2F9A |
:105C4000B7FF07C0B095A095909581959F4FAF4F36 |
:105C5000BF4F883C9105A105B1053CF4CA01B901CB |
:105C600028E030E040E050E006C0CA01B90120E180 |
:105C700030E040E050E00E9479482093F5083093EE |
:105C8000F6084093F7085093F808609190087091D7 |
:105C900091088091920890919308E090070DF09000 |
:105CA000080DA40193010E9479480027F7FC009594 |
:105CB000102F2E193F09400B510B2093F108309300 |
:105CC000F2084093F3085093F4088091070D9091E7 |
:105CD000080DAA2797FDA095BA2FB7FF07C0B0956A |
:105CE000A095909581959F4FAF4FBF4F883C9105F0 |
:105CF000A105B1053CF4CA01B90128E030E040E05B |
:105D000050E006C0CA01B90120E130E040E050E0B7 |
:105D10000E9479482093F1083093F2084093F308E9 |
:105D20005093F4088091F5089091F608A091F70837 |
:105D3000B091F808853FE1E09E07E0E0AE07E0E0C3 |
:105D4000BE072CF084EF91E0A0E0B0E009C08C50D9 |
:105D50009E4FAF4FBF4F64F48CE09EEFAFEFBFEFAD |
:105D60008093F5089093F608A093F708B093F8088D |
:105D70008091F1089091F208A091F308B091F40895 |
:105D8000853F21E0920720E0A20720E0B2072CF037 |
:105D900084EF91E0A0E0B0E009C08C509E4FAF4F7F |
:105DA000BF4FECF48CE09EEFAFEFBFEF8093F108B4 |
:105DB0009093F208A093F308B093F40810C01092E7 |
:105DC000F5081092F6081092F7081092F808109251 |
:105DD000F1081092F2081092F3081092F408109251 |
:105DE0007A0080919C0890919D08A0919E08B091A6 |
:105DF0009F082091F5083091F6084091F7085091DE |
:105E0000F808821B930BA40BB50B80939C0890930E |
:105E10009D08A0939E08B0939F088091A40890913C |
:105E2000A508A091A608B091A7082091F10830918B |
:105E3000F2084091F3085091F408821B930BA40BD5 |
:105E4000B50B8093A4089093A508A093A608B093DF |
:105E5000A708E090D908F090DA089701F7FE04C08F |
:105E6000222733272E193F092531310534F04D8182 |
:105E700044FD03C081E08093E608E091CA0CFF274F |
:105E8000E29EC001E39E900DF29E900D1124BC0194 |
:105E9000E69FC001E79F900DF69F900D112460E0F2 |
:105EA00072E00E9444488B01EE9DC001EF9D900D71 |
:105EB000FE9D900D112464E070E00E944448060F9E |
:105EC000171F222717FD2095322F0093F9081093F2 |
:105ED000FA082093FB083093FC088091AC0890915D |
:105EE000AD08A091AE08B091AF08801B910BA20B3A |
:105EF000B30B8093AC089093AD08A093AE08B09319 |
:105F0000AF088091AC089091AD08A091AE08B09117 |
:105F1000AF08895A9146A040B04064F088EA91E603 |
:105F2000A0E0B0E08093AC089093AD08A093AE08D9 |
:105F3000B093AF088091AC089091AD08A091AE08E5 |
:105F4000B091AF0888559E49AF4FBF4F64F488E5C4 |
:105F50009EE9AFEFBFEF8093AC089093AD08A0939C |
:105F6000AE08B093AF08EFEEE0937A008091B808E6 |
:105F70009091B908892B09F440C0FD81F3FF3DC021 |
:105F80008091E608882351F08091B8089091B90873 |
:105F90009093BB088093BA081092E60810927A009A |
:105FA0000091AC081091AD082091AE083091AF0877 |
:105FB0004091BC085091BD0880918A019927BC018D |
:105FC000469FC001479F900D569F900D112460E29F |
:105FD00070E00E944448882777FD8095982F061B23 |
:105FE000170B280B390B0093AC081093AD082093C6 |
:105FF000AE083093AF08E0937A002328A9F080918F |
:10600000E208992790937209809371098091E308BF |
:10601000992790936409809363098091E4088093A1 |
:10602000C3080E946E3508C01092320910923109DF |
:1060300010923409109233098091E70881508093BF |
:10604000E7088F3F09F02AC181E38093E708809138 |
:10605000220C99279093B60B8093B50B809133094E |
:10606000909134099093B80B8093B70B80913109CC |
:10607000909132099093BA0B8093B90B80910D09DE |
:1060800090910E099093BC0B8093BB0B80911109EA |
:10609000909112099093BE0B8093BD0B80912509BE |
:1060A000909126099093C00B8093BF0B8091290992 |
:1060B00090912A099093C20B8093C10B8091BC08E8 |
:1060C0009091BD089093C40B8093C30B8091B80846 |
:1060D0009091B9089093C60B8093C50B8091650C85 |
:1060E0009091660C9093C80B8093C70B8091690CBC |
:1060F00090916A0C9093CA0B8093C90B80916D0CA0 |
:1061000090916E0C9093CC0B8093CB0B8091E30815 |
:1061100099279093CE0B8093CD0B8091C8089091D6 |
:10612000C9089093D00B8093CF0B8091B8089091C1 |
:10613000B9089093D20B8093D10B8091360990913E |
:1061400037099093D40B8093D30B80913A099091A7 |
:106150003B099093D60B8093D50B80914109909188 |
:106160004209A0914309B09144099093D80B8093C0 |
:10617000D70B8091450990914609A0914709B091AC |
:1061800048099093DA0B8093D90B80910D0C909174 |
:106190000E0C9093DC0B8093DB0B8091110C909193 |
:1061A000120C9093DE0B8093DD0B8091190C909173 |
:1061B0001A0C9093E00B8093DF0B80911D0C909153 |
:1061C0001E0C9093E20B8093E10B8091090190915A |
:1061D0000A019093E40B8093E30B2091750C80915E |
:1061E000760C280F312D311D8091780C4091770C61 |
:1061F000840F912D911D280F391F3093E60B2093AA |
:10620000E50B8091D7089091D8089093E80B809384 |
:10621000E70B8091DC089091DD089093EA0B809366 |
:10622000E90B609188087091890880918A089091A3 |
:106230008B08E090CD0CFF2400271127A8019701BF |
:106240000E9479483093EC0B2093EB0B60919008FF |
:10625000709191088091920890919308A8019701FC |
:106260000E9479483093EE0B2093ED0B8091FE0C49 |
:106270009091FF0C9093F00B8093EF0B8091070DA2 |
:106280009091080D9093F20B8093F10B8091D508BB |
:106290009091D6089093F40B8093F30B8091E008D3 |
:1062A0008823A9F06091F50C7091F60C882777FD92 |
:1062B0008095982F0E9443472091030D3091040D43 |
:1062C0004091050D5091060D0E94BD4732C060916E |
:1062D00088087091890880918A0890918B08E090D5 |
:1062E000F50CF090F60C0E9443472091FA0C309187 |
:1062F000FB0C4091FC0C5091FD0C0E94BD475B01D2 |
:106300006C010027F7FC0095102FC801B7010E940F |
:1063100043472091030D3091040D4091050D50919C |
:10632000060D0E94BD479B01AC01C601B5010E944C |
:106330009E460E9426477093F60C6093F50C809160 |
:10634000E1088823A9F06091F30C7091F40C882780 |
:1063500077FD8095982F0E9443472091030D30913F |
:10636000040D4091050D5091060D0E94BD4732C0AD |
:106370006091900870919108809192089091930893 |
:10638000E090F30CF090F40C0E9443472091FA0C3B |
:106390003091FB0C4091FC0C5091FD0C0E94BD47CC |
:1063A0005B016C010027F7FC0095102FC801B701B5 |
:1063B0000E9443472091030D3091040D4091050D3B |
:1063C0005091060D0E94BD479B01AC01C601B5016D |
:1063D0000E949E460E9426477093F40C6093F30C33 |
:1063E0006091010D7091020DE0909808F09099086D |
:1063F00000919A0810919B08882777FD8095982F27 |
:106400000E9443472091030D3091040D4091050DEA |
:106410005091060D0E94BD475B016C01C801B70198 |
:106420000E9443472091FA0C3091FB0C4091FC0CE8 |
:106430005091FD0C0E94BD4720E030E040E05FE35A |
:106440000E94BD479B01AC01C601B5010E949E465A |
:106450000E9426477093020D6093010D8091F50C08 |
:106460009091F60C8150984034F080E098E0909341 |
:10647000F60C8093F50C8091F50C9091F60C805001 |
:10648000984F34F480E098EF9093F60C8093F50CDD |
:106490008091F30C9091F40C8150984034F080E09E |
:1064A00098E09093F40C8093F30C8091F30C90910E |
:1064B000F40C8050984F34F480E098EF9093F40CF3 |
:1064C0008093F30C8091010D9091020D81509840C2 |
:1064D00034F080E098E09093020D8093010D80915C |
:1064E000010D9091020D8050984F34F480E098EFA8 |
:1064F0009093020D8093010D8091C10C992780FF2C |
:10650000BEC02091870181FF0EC02233B0F480917C |
:10651000DC089091DD0888979093DF088093DE086F |
:106520001092BF080DC08091C60C289FC001112495 |
:1065300088979093DF088093DE0881E08093BF08FE |
:106540008091BE08882321F01092DF081092DE08A7 |
:106550002091DC083091DD084091DE085091DF0881 |
:10656000421753070CF08BC08091BF08882309F4B1 |
:1065700086C0241B350B809188019927AC01249F8C |
:10658000C001259F900D349F900D112460E170E0B3 |
:106590000E9444488201061B170B20916608309127 |
:1065A0006708809186019927BC01269FC001279F1B |
:1065B000900D369F900D112468E070E00E944448D1 |
:1065C000061B170B6091B4087091B5088091B6084E |
:1065D0009091B70820E032E040E050E00E94794816 |
:1065E000CA01B901209189013327442755270E9408 |
:1065F000054820E230E040E050E00E9479487FEF1B |
:106600002E3C370714F42EEC3FEF8091E808909170 |
:10661000E908AC0164E0440F551F6A95E1F7481B97 |
:10662000590B2333310514F022E330E0021B130B26 |
:10663000CA01800F911F60E170E00E94444870938E |
:10664000E9086093E8088091C20C992768177907D8 |
:106650003CF4481659065CF09093E9088093E808EA |
:106660008091E8089091E9084816590624F4509260 |
:10667000E9084092E8084090E8085090E908A090A6 |
:10668000010DB090020D8091F9089091FA08A81AB6 |
:10669000B90AB201882777FD8095982F0E94434759 |
:1066A0007B018C01B501882777FD8095982F0E948A |
:1066B0004347A80197010E94504718162CF4C801BF |
:1066C000B7010E9426475B0117FB109517F910953B |
:1066D000B501882777FD8095982F0E944347A80130 |
:1066E00097010E944D4788232CF4C801B7010E94EE |
:1066F00026475B0185E6A816B10424F014E6A12E16 |
:10670000B12C09C09CE9A9169FEFB90624F4BCE995 |
:10671000AB2EBFEFBB2EA4E14A16510414F4AA24F9 |
:10672000BB2420917E0130917F01409180015091E6 |
:10673000810129833A834B835C836091F50C7091CE |
:10674000F60C2091D5083091D6084091310950912E |
:106750003209241B350B621B730B882777FD80954C |
:10676000982F0E9443479B01AC0169817A818B81FC |
:106770009C810E94BD470E942647709366096093E2 |
:10678000650980916509909166098C01222717FDA2 |
:106790002095322F8091010990910209A09103095F |
:1067A000B0910409080F191F2A1F3B1F009301090C |
:1067B000109302092093030930930409101611065F |
:1067C00012061306ACF4C80117FF03C0909581951B |
:1067D0009F4F60E071E00E9444486F5F7F4F8827C1 |
:1067E00077FD8095982F061B170B280B390B14C0CB |
:1067F000C80117FF03C0909581959F4F60E071E03D |
:106800000E9444486F5F7F4F882777FD8095982FBF |
:10681000060F171F281F391F009301091093020943 |
:106820002093030930930409809101099091020992 |
:10683000A0910309B091040981383EE3930730E049 |
:10684000A30730E0B3072CF080E89EE3A0E0B0E0BF |
:1068500009C08058914CAF4FBF4F64F480E891EC71 |
:10686000AFEFBFEF8093010990930209A093030952 |
:10687000B09304092091650930916609C501B7FEFE |
:1068800004C0882799278A199B094201880E991EFE |
:10689000880C991CC401281539050CF4C901CC24B5 |
:1068A000DD24C818D908B601C816D9060CF4BC01F5 |
:1068B00092012A0D3B1D260F371F37FF03C040E012 |
:1068C00050E008C08091000D482F55272417350748 |
:1068D0000CF4A9018091F70CE82EFF24C701E416FF |
:1068E000F5060CF4CA01809361099201261B370B4F |
:1068F0002A0D3B1D37FF03C080E090E007C0809168 |
:10690000000D9927281739070CF4C9019701E816DB |
:10691000F9060CF49C01209362096091F30C7091CC |
:10692000F40C2091D7083091D80840913309509148 |
:106930003409241B350B621B730B882777FD809568 |
:10694000982F0E9443479B01AC0169817A818B811A |
:106950009C810E94BD470E94264770936009609306 |
:106960005F0980915F09909160098C01222717FDD2 |
:106970002095322F8091FD089091FE08A091FF088C |
:10698000B0910009080F191F2A1F3B1F0093FD0833 |
:106990001093FE082093FF0830930009101611068B |
:1069A00012061306ACF4C80117FF03C09095819539 |
:1069B0009F4F60E071E00E9444486F5F7F4F8827DF |
:1069C00077FD8095982F061B170B280B390B14C0E9 |
:1069D000C80117FF03C0909581959F4F60E071E05B |
:1069E0000E9444486F5F7F4F882777FD8095982FDE |
:1069F000060F171F281F391F0093FD081093FE086C |
:106A00002093FF08309300098091FD089091FE08C3 |
:106A1000A091FF08B091000981385EE3950750E02E |
:106A2000A50750E0B5072CF080E89EE3A0E0B0E0B9 |
:106A300009C08058914CAF4FBF4F64F480E891EC8F |
:106A4000AFEFBFEF8093FD089093FE08A093FF087F |
:106A5000B093000980915F099091600994018815B5 |
:106A600099050CF49C01B601C216D3060CF4B901C9 |
:106A70009201260F371F2A193B0937FF03C040E058 |
:106A800050E008C08091000D482F55272417350786 |
:106A90000CF4A9019701E416F5060CF49A01209371 |
:106AA0006D09461A570AB2016A197B0977FF03C0BC |
:106AB00020E030E008C08091000D282F33276217B6 |
:106AC00073070CF49B01C701E216F3060CF4C9012D |
:106AD00080936709E2E1CA5F0C94B048AFE1B0E08F |
:106AE000E4E7F5E30C9494482091220C2D872330A1 |
:106AF00009F058C2E0914009FF27EE0FFF1FEE0F8B |
:106B0000FF1FE75FF24F80910D0C90910E0CA0914A |
:106B10000F0CB091100C80839183A283B383E0911A |
:106B20004009FF27EE0FFF1FEE0FFF1FE75DF24F3B |
:106B30008091110C9091120CA091130CB091140C37 |
:106B400080839183A283B383809140098F5F809378 |
:106B5000400980914009883011F4109240098091D9 |
:106B6000590990915A0908974CF4809159099091CC |
:106B70005A09019690935A0980935909109249092C |
:106B800010924A0910924B0910924C0910924D092B |
:106B900010924E0910924F0910925009109251090B |
:106BA00010925209109253091092540910925509EB |
:106BB0001092560910925709109258091C821B8294 |
:106BC00089E09DE09A838983A9E2BDE0BF8FAE8F03 |
:106BD00030C12090490930904A0940904B095090AB |
:106BE0004C0960904D0970904E0980904F0990902B |
:106BF0005009E981FA812081318142815381DA0192 |
:106C0000C901BB0F880B982FDC012E873F87488B6B |
:106C1000598B8A8B8B8B8C8B8D8BAE84A20C81E0F5 |
:106C2000A21408F080E0BF84B30C21E0B31408F094 |
:106C300020E08B0D91E08B1508F090E0292BB82E09 |
:106C4000C888C40C31E0C41408F030E0822F8C0DE9 |
:106C500091E08C1508F090E0392BC82ED988D50C1E |
:106C600021E0D51408F020E0832F8D0D91E08D15E3 |
:106C700008F090E0292BD82EEA88E60C31E0E614E3 |
:106C800008F030E0822F8E0D91E08E1508F090E034 |
:106C9000392BE82EFB88F70C21E0F71408F020E0F0 |
:106CA000832F8F0D91E08F1508F090E0292BF82E9F |
:106CB0000C89080D91E0081508F090E0822F800FF4 |
:106CC000E1E0801708F0E0E0AE2FA92B1D89190D37 |
:106CD000A10FA0924909B0924A09C0924B09D092E3 |
:106CE0004C09E0924D09F0924E0980934F09A09310 |
:106CF000500920905109309052094090530950900A |
:106D000054096090550970905609809057099090E9 |
:106D10005809AE8DBF8D2D913D914D915C91DA0159 |
:106D2000C901BB0F880B982FDC012E8B3F8B488F3E |
:106D3000598F8A8F8B8F8C8F8D8FAE88A20C81E0BC |
:106D4000A21408F080E0BF88B30C21E0B31408F06F |
:106D500020E08B0D91E08B1508F090E0292BB82EE8 |
:106D6000C88CC40C31E0C41408F030E0822F8C0DC4 |
:106D700091E08C1508F090E0392BC82ED98CD50CF9 |
:106D800021E0D51408F020E0832F8D0D91E08D15C2 |
:106D900008F090E0292BD82EEA8CE60C31E0E614BE |
:106DA00008F030E0822F8E0D91E08E1508F090E013 |
:106DB000392BE82EFB8CF70C21E0F71408F020E0CB |
:106DC000832F8F0D91E08F1508F090E0292BF82E7E |
:106DD0000C8D080D91E0081508F090E0822F800FCF |
:106DE000E1E0801708F0E0E0AE2FA92B1D8D190D12 |
:106DF000A10FA0925109B0925209C0925309D092AA |
:106E00005409E0925509F092560980935709A093CE |
:106E10005809EB81FC813196FC83EB8329813A810F |
:106E20002C5F3F4F3A8329838E8D9F8D04969F8FD1 |
:106E30008E8F8091590990915A09AB81BC81A81716 |
:106E4000B9070CF4C6CE2090490930904A09409009 |
:106E50004B0950904C0960904D0970904E098090FC |
:106E60004F0990905009A0915909B0915A09FD011C |
:106E7000FF0FEE0BFE2F9D01AA2EB32ECE2EDE2E7F |
:106E8000EE2EFE2E0E2F1E2F222D332D442D552D8E |
:106E9000662D772D882D992D0E94183C2093490945 |
:106EA00030934A0940934B0950934C0960934D0924 |
:106EB00070934E0980934F09909350092090510987 |
:106EC00030905209409053095090540960905509F0 |
:106ED000709056098090570990905809A0915909CF |
:106EE000B0915A09FD01FF0FEE0BFE2F9D01AA2E56 |
:106EF000B32ECE2EDE2EEE2EFE2E0E2F1E2F222D88 |
:106F0000332D442D552D662D772D882D992D0E94DA |
:106F1000183C2093510930935209409353095093E0 |
:106F200054096093550970935609809357099093BB |
:106F300058092091490930914A0940914B095091D3 |
:106F40004C0960914D0970914E0980914F099091C3 |
:106F500050092093410930934209409343095093CB |
:106F6000440920915109309152094091530950919F |
:106F70005409609155097091560980915709909173 |
:106F80005809209345093093460940934709509387 |
:106F9000480981E080933F092091DB08213009F006 |
:106FA00073C01CC0BD85B33008F06EC08091C808A6 |
:106FB0009091C908873491050CF466C0109232098B |
:106FC000109231091092340910923309439882E3E8 |
:106FD00090E090934E0880934D0856C080913509FB |
:106FE000882309F06BC08091C1089091C208805D30 |
:106FF000974008F063C08091410990914209A091A7 |
:107000004309B09144098093360990933709A093BE |
:107010003809B09339098091450990914609A091AA |
:107020004709B091480980933A0990933B09A0938E |
:107030003C09B0933D098091410990914209A0918A |
:107040004309B09144098093050990930609A093E0 |
:107050000709B09308098091450990914609A091CC |
:107060004709B09148098093090990930A09A093B0 |
:107070000B09B0930C0982E390E090934E08809343 |
:107080004D08209335091AC08091DB088823B1F49C |
:107090001092360910923709109238091092390966 |
:1070A00010923A0910923B0910923C0910923D0946 |
:1070B000109235091092C2081092C1082091C80898 |
:1070C0003091C9083F8F2E8F263431054CF58091C1 |
:1070D000410990914209A0914309B09144098093DC |
:1070E000050990930609A0930709B09308098091B8 |
:1070F000450990914609A0914709B09148098093AC |
:10710000090990930A09A0930B09B0930C091092F6 |
:1071100032091092310910923409109233094398C0 |
:107120003D85333009F080C38E8D9F8D8734910566 |
:107130000CF47AC3863991050CF048C08091D508CB |
:107140009091D6080C96499750F48091D708909169 |
:10715000D8088D3091051CF4845F9F4FBCF51092C8 |
:10716000320910923109109234091092330980913A |
:10717000410990914209A0914309B091440980933B |
:10718000050990930609A0930709B0930809809117 |
:10719000450990914609A0914709B091480980930B |
:1071A000090990930A09A0930B09B0930C098091E7 |
:1071B0003E09883C30F088B198E0892788B9109260 |
:1071C0003E0980913E098F5F80933E0980913F097F |
:1071D000813009F029C3E0900509F090060900917B |
:1071E000070910910809E114F1040105110509F4DA |
:1071F0001BC3A0900909B0900A09C0900B09D09058 |
:107200000C09A114B104C104D10409F40DC3809187 |
:10721000D5089091D6088D3091050CF005C3845F98 |
:107220009F4F0CF401C38091D7089091D8088D30FE |
:1072300091050CF0F9C2845F9F4F0CF4F5C22E8DBE |
:107240003F8D263931050CF0E0C2809141099091C3 |
:107250004209A0914309B0914409E81AF90A0A0BBE |
:107260001B0BE0920D09F0920E0900930F09109389 |
:1072700010098091450990914609A0914709B09164 |
:107280004809A81AB90ACA0ADB0AA0921109B092E1 |
:107290001209C0921309D092140956C0E0903A091D |
:1072A000F0903B0900913C0910913D09E114F10473 |
:1072B0000105110509F485C08091410990914209A9 |
:1072C000A0914309B0914409281B390B4A0B5B0B71 |
:1072D00020930D0930930E0940930F095093100924 |
:1072E0008091450990914609A0914709B0914809BC |
:1072F000E81AF90A0A0B1B0BE0921109F092120925 |
:107300000093130910931409809141099091420947 |
:10731000A0914309B091440980930509909306090F |
:10732000A0930709B09308098091450990914609F7 |
:10733000A0914709B09148098093090990930A09DF |
:10734000A0930B09B0930C09439A3BC080913A0972 |
:1073500090913B09A0913C09B0913D090097A1058E |
:10736000B10579F58091410990914209A0914309B5 |
:10737000B0914409E81AF90A0A0B1B0BE0920D09B7 |
:10738000F0920E0900930F0910931009809145099E |
:1073900090914609A0914709B0914809A81AB90AE5 |
:1073A000CA0ADB0AA0921109B0921209C09213090D |
:1073B000D0921409439A82E390E090934E08809310 |
:1073C0004D08E090190CF0901A0C00911B0C1091D4 |
:1073D0001C0CE0921509F0921609009317091093FE |
:1073E0001809A0901D0CB0901E0CC0901F0CD090DE |
:1073F000200CA0921909B0921A09C0921B09D092D0 |
:107400001C09609171097091720960900D0970906A |
:107410000E0980900F0990901009882777FD8095BC |
:10742000982FA40193010E9405480E9443472FE62C |
:1074300032E143E05AE30E94BD470E942647698734 |
:107440007A878B879C8760931D0970931E098093B0 |
:107450001F0990932009609163097091640988273E |
:1074600077FD8095982FA80197010E9405480E94FA |
:10747000434721E23CE34AE55BE30E94BD470E94AB |
:1074800026471B012C0160932109709322098093E8 |
:107490002309909324096091710970917209E09019 |
:1074A0001109F0901209009113091091140988270D |
:1074B00077FD8095982FA80197010E9405480E94AA |
:1074C00043472FE632E143E05AE30E94BD470E9462 |
:1074D00026476D837E838F839887609325097093F9 |
:1074E0002609809327099093280960916309709178 |
:1074F0006409882777FD8095982FA60195010E9441 |
:1075000005480E94434721E23CE34AE55BE30E94D1 |
:10751000BD470E9426475B016C0160932909709367 |
:107520002A0980932B0990932C098E8D9F8D863983 |
:1075300091050CF480C08091360990913709A09193 |
:107540003809B09139090097A105B10509F473C054 |
:1075500080913A0990913B09A0913C09B0913D0975 |
:107560000097A105B10509F466C0C30177FE03C009 |
:10757000909581959F4F8B3F910554F4C701F7FE7D |
:1075800003C0909581959F4F8B3F91050CF453C09C |
:107590008091C308282F3327442755272215330508 |
:1075A0004405550544F42093210930932209409362 |
:1075B0002309509324092A153B054C055D0544F425 |
:1075C0002093290930932A0940932B0950932C09C1 |
:1075D0009927909581959F4F9C01442737FD4095B1 |
:1075E000542F8091210990912209A0912309B091F3 |
:1075F000240982179307A407B50744F420932109AF |
:10760000309322094093230950932409809129093A |
:1076100090912A09A0912B09B0912C098217930708 |
:10762000A407B50744F42093290930932A0940930D |
:107630002B0950932C09E0902109F0902209A9858B |
:10764000BA85EA1AFB0AF0922E09E0922D09809180 |
:10765000290990912A096D817E81681B790B7093AD |
:10766000300960932F09C090B808D090B9088827D6 |
:1076700077FD8095982F0E9443473B014C01A090D5 |
:10768000B808B090B9080027F7FC0095102FC80182 |
:10769000B7010E9443471B012C01CC0CDD1CE1E922 |
:1076A000F1E0CE0EDF1ED6016D917C917095619553 |
:1076B0007F4F882777FD8095982F0E9443472FE6BC |
:1076C00032E143E85AE30E94BD47A40193010E94BE |
:1076D000BD477B018C01AA0CBB1CE1E6F4E0AE0EB9 |
:1076E000BF1ED5016D917C91882777FD8095982FDD |
:1076F0000E9443472FE632E143E85AE30E94BD4728 |
:10770000A20191010E94BD479B01AC01C801B701D4 |
:107710000E949E460E9426475B0170933209609347 |
:107720003109E091B808F091B9080091B8081091BA |
:10773000B908EE0FFF1FEF59FB4F60817181882759 |
:1077400077FD8095982F0E9443472FE632E143E86A |
:107750005AE30E94BD47A40193010E94BD476B01FB |
:107760007C01000F111F0F561E4FF80160817181BF |
:10777000882777FD8095982F0E9443472FE632E1B6 |
:1077800043E85AE30E94BD47A20191010E94BD4710 |
:107790009B01AC01C701B6010E949E460E9426478C |
:1077A0009B017093340960933309F4E2AF16B1047E |
:1077B00034F083E290E090933209809331092432CF |
:1077C000310534F083E290E09093340980933309DB |
:1077D00080913109909132098D5D9F4F34F48DED88 |
:1077E0009FEF9093320980933109809133099091F2 |
:1077F00034098D5D9F4F34F48DED9FEF90933409E4 |
:107800008093330910923F090FC0209136093091BF |
:107810003709409138095091390921153105410541 |
:10782000510509F03BCD92CDE2E1C15E0C94B04828 |
:10783000A9E9B0E0EEE1FCE30C949448222E332E4B |
:10784000442E552E662E772E882E992E2A2DA8E0AE |
:10785000FE01B196AA2E1192AA94E9F729A23AA2A2 |
:107860004BA25CA26DA27EA28FA298A6FE013196C9 |
:107870001192AA95E9F72983BA82CB82DC82ED8244 |
:10788000FE820F8318878DA19EA1AFA1B8A5B7FD79 |
:10789000EDC4CF57DF4F1882C158D0408D819E81F3 |
:1078A000AF81B885B7FD14C4A980BA80CB80DC80D5 |
:1078B000ED80FE800F81188529A13AA14BA15CA122 |
:1078C0006DA17EA18FA198A5A8E0FE013996BA2FDF |
:1078D0001192BA95E9F729873A874B875C876D87BC |
:1078E0007E878F87988BFE0171961192AA95E9F792 |
:1078F000A98ABA8ACB8ADC8AED8AFE8A0F8B188F16 |
:1079000029883A884B885C88ED88FE880F89188D15 |
:1079100069847A848B849C8429966CAE7DAE8EAE0D |
:107920009FAE29978D849E84AF84B8882D968CAEA7 |
:107930009DAEAEAEBFAE2D97E114F1040105110569 |
:1079400009F02BC182149304A404B50408F422C2E4 |
:10795000211431044104510409F467C500E02016E4 |
:1079600000E0300601E0400600E0500608F04CC59B |
:107970001FEF211631044104510419F010F00C944A |
:10798000FF4520E030E040E050E080E090E0420140 |
:10799000310104C096948794779467948A95D2F7BE |
:1079A000D401C3018F5C984FDC018C91280F311DED |
:1079B000411D511DDA01C90120E230E040E050E0F4 |
:1079C00039014A01681A790A8A0A9B0A09F090C7A4 |
:1079D0002D96ACACBDACCEACDFAC2D97A218B308E5 |
:1079E000C408D508720100271127A196ECAEFDAEA0 |
:1079F0000EAF1FAFA1979201810120703070A59644 |
:107A00000CAF1DAF2EAF3FAFA59721E030E040E0B7 |
:107A100050E065962CAF3DAF4EAF5FAF6597C601A6 |
:107A2000B501A1962CAD3DAD4EAD5FADA1970E94C5 |
:107A30005748E1962CAF3DAF4EAF5FAFE197A596AB |
:107A40006CAD7DAD8EAD9FADA5970E9405483B0105 |
:107A50004C01C601B501A1962CAD3DAD4EAD5FAD5B |
:107A6000A1970E945748CB01772766272996ACAC8F |
:107A7000BDACCEACDFAC29979601442755277B01DE |
:107A80008C01E22AF32A042B152BE614F7040805CF |
:107A9000190500F5E1962CAD3DAD4EAD5FADE1971A |
:107AA0002150304040405040E1962CAF3DAF4EAFAA |
:107AB0005FAFE197E20CF31C041D151DE214F30403 |
:107AC0000405150538F0E614F7040805190510F447 |
:107AD0000C947346E618F70808091909C801B7019C |
:107AE000A1962CAD3DAD4EAD5FADA1970E9457481C |
:107AF00059016A01A5966CAD7DAD8EAD9FADA59780 |
:107B00000E9405483B014C01C801B701A1962CAD6C |
:107B10003DAD4EAD5FADA1970E945748CB01772791 |
:107B2000662729962CAD3DAD4EAD5FAD29974070CF |
:107B30005070262B372B482B592B26153705480517 |
:107B40005905A8F40894A108B108C108D108220D6C |
:107B5000331D441D551D221533054405550538F0C8 |
:107B6000261537054805590510F40C945746E1963B |
:107B70006CAC7DAC8EAC9FACE197D3019927882784 |
:107B800015012601282A392A4A2A5B2A65962CAD36 |
:107B90003DAD4EAD5FAD659713C02D968CAC9DACE1 |
:107BA000AEACBFAC2D978E149F04A006B10608F0B2 |
:107BB00032C222243324210120E030E040E050E0B2 |
:107BC00088E0FE01799611928A95E9F7298E3A8E1E |
:107BD0004B8E5C8E2D8F3E8F4F8F58A3298C3A8C05 |
:107BE0004B8C5C8C6D8C7E8C8F8C98A0CF57DF4F2C |
:107BF000B880C158D040BB2011F40C948346CE56B7 |
:107C0000DF4F1882C259D040CD56DF4F1882C3597A |
:107C1000D040CC56DF4F1882C459D040CB56DF4FEE |
:107C20001882C559D040CA56DF4F1882C659D04075 |
:107C3000C956DF4F1882C759D040C856DF4F188247 |
:107C4000C859D040C756DF4F1882C959D04000E00C |
:107C5000021981E0CC24C01608F080E0CD56DF4F39 |
:107C60001881C359D040131991E0CD56DF4FD88009 |
:107C7000C359D040D11608F090E0E12EE81A8E2DBD |
:107C8000E1E01E1508F0E0E09E2B182FCC56DF4FE8 |
:107C90002881C459D0402419E1E0CC56DF4FF88048 |
:107CA000C459D040F21608F0E0E0822F891B91E021 |
:107CB000281708F090E0E92B282FCB56DF4F3881AA |
:107CC000C559D040351991E0CB56DF4F8881C55951 |
:107CD000D040831708F090E0832F8E1BE1E0381727 |
:107CE00008F0E0E09E2B382FCA56DF4F4881C65976 |
:107CF000D0404619E1E0CA56DF4FA881C659D040AE |
:107D0000A41708F0E0E0842F891B91E0481708F0E1 |
:107D100090E0E92B482FC956DF4F5881C759D04012 |
:107D20005719F1E0C956DF4FB881C759D040B51790 |
:107D300008F0F0E0852F8E1B91E0581708F090E0D6 |
:107D4000F92B582FC856DF4F6881C859D0406819A1 |
:107D500091E0C856DF4FE881C859D040E61708F0D7 |
:107D600090E0862F8F1BE1E0681708F0E0E09E2B83 |
:107D7000682FC756DF4F7881C959D0407919872FAE |
:107D8000891B202E312E422E532E642E752E862EC8 |
:107D9000982EB9C700E0201600E0300601E040064A |
:107DA00000E0500608F04EC31FEF211631044104D5 |
:107DB000510411F008F01CC720E030E040E050E032 |
:107DC00080E090E04201310104C09694879477945A |
:107DD00067948A95D2F7D401C3018F5C984FDC0178 |
:107DE0008C91280F311D411D511D80E290E0A0E0D3 |
:107DF000B0E03C014D01621A730A840A950A09F445 |
:107E000045C0C301062C04C0220C331C441C551C65 |
:107E10000A94D2F72D96ECACFDAC0EAD1FAD2D97AC |
:107E2000062C04C0EE0CFF1C001F111F0A94D2F791 |
:107E300020E230E02619370929966CAC7DAC8EAC77 |
:107E40009FAC299704C096948794779467942A9559 |
:107E5000D2F7E628F728082919292D96ECAEFDAEB1 |
:107E60000EAF1FAF2D9729968CAC9DACAEACBFACBE |
:107E7000299704C0880C991CAA1CBB1C8A95D2F7B0 |
:107E800029968CAE9DAEAEAEBFAE29973201882446 |
:107E90009924920181012070307069960CAF1DAF5A |
:107EA0002EAF3FAF69972D966CAD7DAD8EAD9FAD7A |
:107EB0002D97A40193010E9457486D962CAF3DAFBA |
:107EC0004EAF5FAF6D9769966CAD7DAD8EAD9FADDA |
:107ED00069970E9405485B016C012D966CAD7DADE4 |
:107EE0008EAD9FAD2D97A40193010E945748CB0101 |
:107EF000772766272996ECACFDAC0EAD1FAD299710 |
:107F00009801442755277B018C01E22AF32A042B90 |
:107F1000152BEA14FB040C051D05F8F46D962CAD29 |
:107F20003DAD4EAD5FAD6D9721503040404050406B |
:107F30006D962CAF3DAF4EAF5FAF6D97E20CF31C6B |
:107F4000041D151DE214F3040405150530F0EA14B0 |
:107F5000FB040C051D0508F4B7C6EA18FB080C095C |
:107F60001D09C801B701A40193010E945748590196 |
:107F70006A0169966CAD7DAD8EAD9FAD69970E942B |
:107F8000054869AF7AAF8BAF9CAFC801B701A401B8 |
:107F900093010E945748CB017727662729962CAD7D |
:107FA0003DAD4EAD5FAD299740705070262B372BFD |
:107FB000482B592B89AD9AADABADBCAD281739070D |
:107FC0004A075B07A0F40894A108B108C108D108CA |
:107FD000220D331D441D551D22153305440555053D |
:107FE00030F0281739074A075B0708F467C66D9613 |
:107FF0006CAC7DAC8EAC9FAC6D97D3019927882774 |
:1080000015012601282A392A4A2A5B2A20E030E075 |
:1080100040E050E0D5CD20E0E21620E0F20621E07D |
:10802000020720E0120708F41EC240E0E41640E018 |
:10803000F40640E0040741E0140708F0E8C520E139 |
:1080400030E040E050E080E190E03701480104C0BA |
:1080500096948794779467948A95D2F7D401C30154 |
:108060008F5C984FDC018C91280F311D411D511DF3 |
:10807000DA01C90120E2A22EB12CC12CD12CA6011B |
:108080009501281B390B4A0B5B0B09F079C22D9621 |
:108090006CAC7DAC8EAC9FAC2D97E614F704080554 |
:1080A000190560F029968CAC9DACAEACBFAC29979D |
:1080B00082149304A404B50408F47BCD81E0282E37 |
:1080C000312C412C512C20E030E040E050E078CDC4 |
:1080D000CF57DF4FE881C158D040E095CF57DF4FF1 |
:1080E000E883C158D04088249924AA24BB24CC24F6 |
:1080F000DD24EE24FF24F981C657DF4FF883CA58E8 |
:10810000D0406A80C557DF4F6882CB58D0407B8013 |
:10811000C457DF4F7882CC58D0400C81C357DF4F13 |
:108120000883CD58D0401D81C257DF4F1883CE58E9 |
:10813000D0402E81C157DF4F2883CF58D0403F8198 |
:10814000C057DF4F3883C059D0404885CF56DF4FE6 |
:108150004883C159D040082D0F1B81E0801608F0DC |
:10816000E5C1192DC557DF4F9881CB58D040191B59 |
:1081700091E0911608F0D1C1A12FA81B8A2FE1E050 |
:108180001A1708F0C8C19E2B182F2A2DC457DF4F8D |
:10819000B881CC58D0402B1BE1E0A21608F0B3C147 |
:1081A000822F891B91E0281708F0ABC1E92B282FFB |
:1081B0003B2DC357DF4FF881CD58D0403F1B91E096 |
:1081C000B31608F096C1832F8E1BE1E0381708F034 |
:1081D0008EC19E2B382F4C2DC257DF4F6880CE5852 |
:1081E000D0404619E1E0C41608F079C1842F891BFC |
:1081F00091E0481708F071C1E92B482F5D2DC15758 |
:10820000DF4F7880CF58D0405719F1E0D51608F0ED |
:108210005CC1852F8E1B91E0581708F054C1F92BD3 |
:10822000582F6E2DC057DF4F8881C059D040681B32 |
:1082300091E0E61608F03FC1862F8F1BE1E068173A |
:1082400008F037C19E2B682F7F2DCF56DF4FA881B6 |
:10825000C159D0407A1B872F891B09831A832B832E |
:108260003C834D835E836F8388871ECB882499244B |
:10827000AA24BB24CC24DD24EE24FF2409A1CE575C |
:10828000DF4F0883C258D0401AA1CD57DF4F188363 |
:10829000C358D0402BA1CC57DF4F2883C458D040BF |
:1082A0003CA1CB57DF4F3883C558D0404DA1CA57AA |
:1082B000DF4F4883C658D0405EA1C957DF4F58836F |
:1082C000C758D0408FA1C857DF4F8883C858D040C7 |
:1082D00098A5C757DF4F9883C958D040082DCE576F |
:1082E000DF4FA881C258D0400A1B81E0801608F0F9 |
:1082F000DEC0192DCD57DF4FB881C358D0401B1BAE |
:1083000091E0911608F0CAC0E12FE81B8E2FE1E042 |
:10831000181708F0C1C09E2B182F2A2DCC57DF4FFD |
:10832000F881C458D0402F1BE1E0A21608F020C10C |
:10833000822F891B91E0281708F018C1E92B282FFC |
:108340003B2DCB57DF4F6880C558D040361991E0A0 |
:10835000B31608F003C1832F8E1BE1E0381708F035 |
:10836000FBC09E2B382F4C2DCA57DF4F7880C65844 |
:10837000D0404719E1E0C41608F0E6C0842F891BFD |
:1083800091E0481708F0DEC0E92B482F5D2DC95752 |
:10839000DF4F8881C758D040581BF1E0D51608F050 |
:1083A000C9C0852F8E1B91E0581708F0C1C0F92B6A |
:1083B000582F6E2DC857DF4F9881C858D040691B81 |
:1083C00091E0E61608F060C0862F8F1BE1E0681789 |
:1083D00008F058C09E2B682F7F2DC757DF4FA8810C |
:1083E000C958D0407A1B872F891B09A31AA32BA336 |
:1083F0003CA34DA35EA36FA388A7BFEFCF57DF4F6A |
:10840000B883C158D0404ACA20E0221620E0320684 |
:1084100020E0420621E0520608F007C420E130E0E7 |
:1084200040E050E080E190E0B2CA61E070E080E0BE |
:1084300090E020E030E040E050E00E945748190111 |
:108440002A018CCA20E0221620E0320620E04206F3 |
:1084500021E0520608F0E2C320E130E040E050E0C5 |
:1084600080E190E0AFCC3FEFE316F1040105110588 |
:1084700011F008F0B6C320E030E040E050E080E0CA |
:1084800090E0E3CDE0E0A6CF90E0862F8F1BE1E007 |
:10849000681708F49FCFF6CFE0E03DCF90E0E12FE2 |
:1084A000E81B8E2FE1E0181708F435CFF5CF80E0F8 |
:1084B00020CFE0E0C7CE90E0862F8F1BE1E0681769 |
:1084C00008F4C0CEF6CF90E0AACEF0E0852F8E1B48 |
:1084D00091E0581708F4A3CEF6CF90E08DCEE0E0FF |
:1084E000842F891B91E0481708F486CEF6CFE0E090 |
:1084F00070CE90E0832F8E1BE1E0381708F469CE30 |
:10850000F6CF90E053CEE0E0822F891B91E0281750 |
:1085100008F44CCEF6CFE0E036CE90E0A12FA81BB9 |
:108520008A2FE1E01A1708F42ECEF5CF80E019CE9D |
:1085300090E03DCFF0E0852F8E1B91E0581708F4B6 |
:1085400036CFF6CF90E020CFE0E0842F891B91E07A |
:10855000481708F419CFF6CFE0E003CF90E0832F5F |
:108560008E1BE1E0381708F4FCCEF6CF90E0E6CEA3 |
:10857000E0E0822F891B91E0281708F4DFCEF6CFC8 |
:1085800021963FAF2EAF2197A21AB30AC40AD50A8B |
:10859000A60195010FAC04C0EE0CFF1C001F111FBB |
:1085A0000A94D2F7D201C10104C0B695A795979558 |
:1085B0008795AA94D2F7E82AF92A0A2B1B2B25962D |
:1085C000ECAEFDAE0EAF1FAF25970FAC04C0220C72 |
:1085D000331C441C551C0A94D2F729A63AA64BA674 |
:1085E0005CA62D96ACACBDACCEACDFAC2D97022E0C |
:1085F00004C0D694C794B794A7940A94D2F72D9642 |
:10860000ECACFDAC0EAD1FAD2D970FAC04C0EE0C65 |
:10861000FF1C001F111F0A94D2F729968CAD9DAD47 |
:10862000AEADBFAD299704C0B695A7959795879530 |
:108630002A95D2F7E82AF92A0A2B1B2BEDAAFEAAC3 |
:108640000FAB18AF25960CAD1DAD2EAD3FAD2597E8 |
:10865000790100271127E596ECAEFDAE0EAF1FAFF6 |
:10866000E59725962CAD3DAD4EAD5FAD259740709D |
:108670005070E9962CAF3DAF4EAF5FAFE997C601A2 |
:10868000B501A80197010E945748ED962CAF3DAF68 |
:108690004EAF5FAFED97E9966CAD7DAD8EAD9FAD02 |
:1086A000E9970E9405483B014C01C601B501A801AC |
:1086B00097010E945748CB0177276627ADA8BEA82F |
:1086C000CFA8D8AC9601442755277B018C01E22A1C |
:1086D000F32A042B152BE614F7040805190500F5F9 |
:1086E000ED962CAD3DAD4EAD5FADED9721503040D8 |
:1086F00040405040ED962CAF3DAF4EAF5FAFED9791 |
:1087000025968CAD9DADAEADBFAD2597E80EF91E9B |
:108710000A1F1B1FE816F9060A071B0708F0B2C25A |
:10872000E618F70808091909C801B701E5962CAD44 |
:108730003DAD4EAD5FADE5970E94574819012A0146 |
:10874000E9966CAD7DAD8EAD9FADE9970E94054871 |
:108750003B014C01C801B701E5962CAD3DAD4EADD6 |
:108760005FADE5970E945748CB01772766272DA973 |
:108770003EA94FA958AD407050705B016C01A22A10 |
:10878000B32AC42AD52AA614B704C804D904A8F465 |
:10879000089421083108410851082596ECACFDAC3D |
:1087A0000EAD1FAD2597AE0CBF1CC01ED11EAE1462 |
:1087B000BF04C006D10608F055C2A618B708C808FD |
:1087C000D908A9AABAAACBAADCAAED960CAD1DAD10 |
:1087D0002EAD3FADED97D80199278827282A392A51 |
:1087E0004A2A5B2A61962CAE3DAE4EAE5FAE6197D3 |
:1087F000820171012FEF3FEF40E050E0E222F322CF |
:1088000004231523120144245524A9A4BAA4CBA4FB |
:10881000DCA4A222B322C422D52229A53AA54BA5C5 |
:108820005CA53A0188249924C801B701A6019501E5 |
:108830000E940548C358DF4F688379838A839B83EE |
:10884000CD57D040C801B701A40193010E9405484B |
:108850007B018C01C201B101A60195010E9405486E |
:108860005B016C01C201B101A40193010E940548A2 |
:108870009B01AC01EA0CFB1C0C1D1D1DC358DF4FF6 |
:10888000688079808A809B80CD57D040C401AA2718 |
:10889000BB27E80EF91E0A1F1B1FEA14FB040C0578 |
:1088A0001D0520F4205030404F4F5F4FC801AA27CC |
:1088B000BB27280F391F4A1F5B1F89A89AA8ABA89E |
:1088C000BCA882169306A406B50608F479C18216E0 |
:1088D0009306A406B50609F446C161962CAC3DACDE |
:1088E0004EAC5FAC619720E030E040E050E068C9FA |
:1088F0007EAE6DAE0DAC04C0220C331C441C551C66 |
:108900000A94D2F72619370948095909DA01C90129 |
:108910002D96ECACFDAC0EAD1FAD2D9704C0169599 |
:108920000795F794E7942A95D2F72D962CAD3DAD97 |
:108930004EAD5FAD2D970DAC04C0220F331F441F09 |
:10894000551F0A94D2F729966CAC7DAC8EAC9FACC7 |
:10895000299704C096948794779467948A95D2F760 |
:1089600026293729482959292DA73EA74FA758ABB3 |
:108970004201AA24BB24A1968CAE9DAEAEAEBFAE82 |
:10898000A197A201910140705070A5962CAF3DAF08 |
:108990004EAF5FAFA597C801B701A50194010E9432 |
:1089A0005748A9962CAF3DAF4EAF5FAFA997A5969C |
:1089B0006CAD7DAD8EAD9FADA5970E9405485B0166 |
:1089C0006C01C801B701A1962CAD3DAD4EAD5FADB8 |
:1089D000A1970E945748CB01772766276DA47EA4F4 |
:1089E0008FA498A89401442755277B018C01E22A83 |
:1089F000F32A042B152BEA14FB040C051D05D0F4F7 |
:108A0000A9962CAD3DAD4EAD5FADA997215030403C |
:108A100040405040A9962CAF3DAF4EAF5FAFA997F5 |
:108A2000E20CF31C041D151DE214F30404051505E6 |
:108A300008F003C1EA18FB080C091D09C801B701B9 |
:108A4000A1962CAD3DAD4EAD5FADA1970E945748AC |
:108A5000AD962CAF3DAF4EAF5FAFAD97A5966CAD69 |
:108A60007DAD8EAD9FADA5970E9405483B014C01A1 |
:108A7000C801B701A1962CAD3DAD4EAD5FADA1973C |
:108A80000E945748CB01772766272DA53EA54FA505 |
:108A900058A9407050705B016C01A22AB32AC42A05 |
:108AA000D52AA614B704C804D90450F5AD968CADE8 |
:108AB0009DADAEADBFADAD970197A109B109AD9622 |
:108AC0008CAF9DAFAEAFBFAFAD97A20CB31CC41CB3 |
:108AD000D51CA214B304C404D50490F0A614B704A2 |
:108AE000C804D90468F40197A109B109AD968CAF07 |
:108AF0009DAFAEAFBFAFAD97A20CB31CC41CD51CCD |
:108B00002996ECACFDAC0EAD1FAD29970DAC04C0A1 |
:108B1000EE0CFF1C001F111F0A94D2F72996ECAE31 |
:108B2000FDAE0EAF1FAF2997A618B708C808D90821 |
:108B3000A9960CAD1DAD2EAD3FADA997D8019927D3 |
:108B40008827AD962CAD3DAD4EAD5FADAD97282BD2 |
:108B5000392B4A2B5B2B65962CAF3DAF4EAF5FAFE9 |
:108B600065970C940F3D29968CAD9DADAEADBFAD14 |
:108B700029970FAC04C0880F991FAA1FBB1F0A9426 |
:108B8000D2F7A70133272227C358DF4FE880F980A7 |
:108B90000A811B81CD57D0406FEFA62E6FEFB62E06 |
:108BA000C12CD12CEA20FB200C211D212E0D3F1DB4 |
:108BB000401F511F82179307A407B50708F08DCEF9 |
:108BC00061962CAC3DAC4EAC5FAC6197089421082B |
:108BD00031084108510820E030E040E050E00C94BA |
:108BE000E03D28E030E040E050E088E090E02DCA31 |
:108BF00028E030E040E050E088E090E0E3C828E082 |
:108C000030E040E050E088E090E00C94C73C28E180 |
:108C100030E040E050E088E190E017CA28E130E021 |
:108C200040E050E088E190E0CDC828E130E040E04D |
:108C300050E088E190E00C94C73CEA14FB040C057A |
:108C40001D0508F0F7CE2150304040405040A99615 |
:108C50002CAF3DAF4EAF5FAFA997E20CF31C041DE4 |
:108C6000151DE8CEA614B704C804D90408F0A5CD94 |
:108C700008942108310841085108AE0CBF1CC01EE1 |
:108C8000D11E9BCDE614F7040805190508F048CD60 |
:108C90002150304040405040ED962CAF3DAF4EAF9C |
:108CA0005FAFED97E80EF91E0A1F1B1F39CD089420 |
:108CB000A108B108C108D1080C94B73D0894A108D7 |
:108CC000B108C108D10893C92150304040405040FC |
:108CD0006D962CAF3DAF4EAF5FAF6D97E20CF31CBE |
:108CE000041D151D3AC92150304040405040E196C6 |
:108CF0002CAF3DAF4EAF5FAFE197E20CF31C041D0C |
:108D0000151D0C946A3D222D332D442D552D662DB5 |
:108D1000772D882D992DE2E1C756DF4F0C94B0488E |
:108D2000FC014150504030F001900616D1F73197C8 |
:108D3000CF0108958827992708955058192EEFD00C |
:108D400001D0D2C0BA176207730784079507B1F143 |
:108D500088F40EF410940B2EBA2FA02D062E622F3D |
:108D6000202D072E732F302D082E842F402D092EF5 |
:108D7000952F502DFF275523B9F0591B49F0573E29 |
:108D800098F0469537952795A795F0405395C9F7E4 |
:108D900076F0BA0F621F731F841F30F487957795A2 |
:108DA0006795B795F040939517FA0F2E0895BF1B5E |
:108DB000BB27BA0B620B730B840BF6CFDEF6DBC05E |
:108DC000AED001D091C0552359F0992369F09F5737 |
:108DD0005F57951B33F442F4903811F4915805C055 |
:108DE0009BC091589F3F09F4C6C0BB27112462174E |
:108DF0007307840730F4660F771F881FBB1F9150DD |
:108E000098F311D00F920FD00F920DD0A0E8261733 |
:108E1000370748071B0609F0A048BA2F602D7F913D |
:108E20008F9100240895A0E8002462177307840737 |
:108E3000B10528F0621B730B840BB1090A2A660F77 |
:108E4000771F881FBB1FA69581F7089597FB73D0E6 |
:108E50009F3738F0FEE9F91B982F872F762F6B2F5D |
:108E600005C086C09695879577956795F150D0F7A0 |
:108E70003EF490958095709561957F4F8F4F9F4FF1 |
:108E80000895E89403C097FB0EF4F3DFB62F672F25 |
:108E9000782F892F9EE9002427C00ED05EF004C0F1 |
:108EA0000BD026F001C008D019F020F48FEF089500 |
:108EB00080E0089581E0089597FB092E052600F8CB |
:108EC000689430D0E89407FC07C0621773078407E2 |
:108ED000950721F008F400940794989408959A95C2 |
:108EE000BB0F661F771F881F11249923A1F08823C9 |
:108EF000B2F79F3F59F0BB0F48F421F4002011F462 |
:108F000060FF04C06F5F7F4F8F4F9F4F881F979503 |
:108F1000879597F908952CC09FEF80EC0895052E52 |
:108F2000092607FA440F551F5F3F79F0AA27A517B6 |
:108F300008F051E04795880F991F9F3F31F0BB27FC |
:108F4000B91708F091E0879508959F919F9111249A |
:108F5000E3CF97FB880F991F9F3F31F0BB27B917CD |
:108F600008F091E0879508959F919F911124D4CFA7 |
:108F700066277727882799270895D1DF01D0B4CFB6 |
:108F8000992339F0552329F09F575F57950F13F414 |
:108F90009AF1F1CF91589F3FE1F3629FA12D0F927B |
:108FA000BB27639FA00DB11DEE27729FA00DB11DC1 |
:108FB000EE1FAF93AA27649FB00DE11D739FB00D04 |
:108FC000E11DAA1F6627829FB00DE11DA61F552730 |
:108FD000749FE00DA11D551F839FE00DA11D561F1D |
:108FE000849FA00D511D852F7A2F6E2F1F900F90FB |
:108FF00088231AF4939539F48FCF000C111CBB1FF2 |
:10900000661F771F881F01280895629FD001739FF4 |
:10901000F001829FE00DF11D649FE00DF11D929F14 |
:10902000F00D839FF00D749FF00D659FF00D992753 |
:10903000729FB00DE11DF91F639FB00DE11DF91F77 |
:10904000BD01CF0111240895991B79E004C0991F37 |
:10905000961708F0961B881F7A95C9F78095089592 |
:10906000AA1BBB1B51E107C0AA1FBB1FA617B7074E |
:1090700010F0A61BB70B881F991F5A95A9F780956A |
:109080009095BC01CD01089597FB092E07260AD0C3 |
:1090900077FD04D0E5DF06D000201AF470956195C5 |
:1090A0007F4F0895F6F7909581959F4F0895A1E21F |
:1090B0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F52 |
:1090C000FF1FA217B307E407F50720F0A21BB30B9D |
:1090D000E40BF50B661F771F881F991F1A9469F719 |
:1090E00060957095809590959B01AC01BD01CF0175 |
:1090F000089597FB092E05260ED057FD04D0D7DF23 |
:109100000AD0001C38F450954095309521953F4F7A |
:109110004F4F5F4F0895F6F7909580957095619544 |
:109120007F4F8F4F9F4F08952F923F924F925F92A4 |
:109130006F927F928F929F92AF92BF92CF92DF9267 |
:10914000EF92FF920F931F93CF93DF93CDB7DEB7CC |
:10915000CA1BDB0B0FB6F894DEBF0FBECDBF099460 |
:109160002A88398848885F846E847D848C849B84B7 |
:10917000AA84B984C884DF80EE80FD800C811B81C5 |
:10918000AA81B981CE0FD11D0FB6F894DEBF0FBEF4 |
:10919000CDBFED010895EE0FFF1F0590F491E02D76 |
:1091A0000994F999FECFB2BDA1BDF89A119600B409 |
:1091B0000895F999FECFB2BDA1BD00BC11960FB6BE |
:0C91C000F894FA9AF99A0FBE0895FFCFB8 |
:1091CC000A01642003FFFF0A016400007D0000FF18 |
:1091DC00030102030405060708090A48616C6C6F59 |
:1091EC002057656C740000000000000000000000B7 |
:1091FC000000000000000000000000000000000063 |
:10920C000000000000000000000000000000000052 |
:10921C000000000000000000000000000000000042 |
:10922C0000000000000000000000000B014B616D0D |
:10923C00657261000053706F72740000640000006E |
:10924C00803F17B7D13830FB103A409696020A642B |
:10925C0046000011002200340045005700680079D8 |
:10926C00008B009C00AD00BE00CF00E000F10002BE |
:10927C000113012401350145015601660176018671 |
:10928C00019601A601B601C501D501E401F4010363 |
:10929C0002110220022F023D024B02590267027595 |
:1092AC0002820290029D02AA02B602C302CF02DB26 |
:1092BC0002E702F202FE02090314031E0329033320 |
:1092CC00033D0346035003590362036A0372037B95 |
:1092DC000382038A03910398039F03A503AB03B195 |
:1092EC0003B703BC03C103C503CA03CE03D203D522 |
:1092FC0003D803DB03DE03E003E203E403E503E648 |
:10930C0003E703E703E803E703E703E603E503E406 |
:10931C0003E203E003DE03DB03D803D503D203CE61 |
:10932C0003CA03C503C103BC03B703B103AB03A555 |
:10933C00039F03980391038A0382037B0372036ADE |
:10934C000362035903500346033D03330329031EF1 |
:10935C000314030903FE02F202E702DB02CF02C38D |
:10936C0002B602AA029D029002820275026702599D |
:10937C00024B023D022F02200211020302F401E40F |
:10938C0001D501C501B601A60196018601760166DB |
:10939C0001560145013501240113010201F100E0E0 |
:1093AC0000CF00BE00AD009C008B00790068005718 |
:1093BC000045003400220011000000EFFFDEFFCC5E |
:1093CC00FFBBFFA9FF98FF87FF75FF64FF53FF42A8 |
:1093DC00FF31FF20FF0FFFFEFEEDFEDCFECBFEBBE0 |
:1093EC00FEAAFE9AFE8AFE7AFE6AFE5AFE4AFE3BF0 |
:1093FC00FE2BFE1CFE0CFEFDFDEFFDE0FDD1FDC3C2 |
:10940C00FDB5FDA7FD99FD8BFD7EFD70FD63FD5641 |
:10941C00FD4AFD3DFD31FD25FD19FD0EFD02FDF75B |
:10942C00FCECFCE2FCD7FCCDFCC3FCBAFCB0FCA70A |
:10943C00FC9EFC96FC8EFC85FC7EFC76FC6FFC682E |
:10944C00FC61FC5BFC55FC4FFC49FC44FC3FFC3BC9 |
:10945C00FC36FC32FC2EFC2BFC28FC25FC22FC20D0 |
:10946C00FC1EFC1CFC1BFC1AFC19FC19FC18FC193E |
:10947C00FC19FC1AFC1BFC1CFC1EFC20FC22FC2511 |
:10948C00FC28FC2BFC2EFC32FC36FC3BFC3FFC4449 |
:10949C00FC49FC4FFC55FC5BFC61FC68FC6FFC76EA |
:1094AC00FC7EFC85FC8EFC96FC9EFCA7FCB0FCBAFA |
:1094BC00FCC3FCCDFCD7FCE2FCECFCF7FC02FD0E83 |
:1094CC00FD19FD25FD31FD3DFD4AFD56FD63FD7089 |
:1094DC00FD7EFD8BFD99FDA7FDB5FDC3FDD1FDE026 |
:1094EC00FDEFFDFDFD0CFE1CFE2BFE3BFE4AFE5A65 |
:1094FC00FE6AFE7AFE8AFE9AFEAAFEBBFECBFEDC5C |
:10950C00FEEDFEFEFE0FFF20FF31FF42FF53FF6416 |
:10951C00FF75FF87FF98FFA9FFBBFFCCFFDEFFEFB6 |
:10952C00FFE803E703E703E603E503E403E203E0F4 |
:10953C0003DE03DB03D803D503D203CE03CA03C572 |
:10954C0003C103BC03B703B103AB03A5039F03988B |
:10955C000391038A0382037B0372036A0362035938 |
:10956C0003500346033D03330329031E031403096D |
:10957C0003FE02F202E702DB02CF02C302B602AA2A |
:10958C00029D02900282027502670259024B023D53 |
:10959C00022F02200211020302F401E401D501C5DD |
:1095AC0001B601A6019601860176016601560145B8 |
:1095BC00013501240113010201F100E000CF00BECE |
:1095CC0000AD009C008B007900680057004500340A |
:1095DC0000220011000000EFFFDEFFCCFFBBFFA953 |
:1095EC00FF98FF87FF75FF64FF53FF42FF31FF2099 |
:1095FC00FF0FFFFEFEEDFEDCFECBFEBBFEAAFE9ACD |
:10960C00FE8AFE7AFE6AFE5AFE4AFE3BFE2BFE1CCA |
:10961C00FE0CFEFDFDEFFDE0FDD1FDC3FDB5FDA78C |
:10962C00FD99FD8BFD7EFD70FD63FD56FD4AFD3DF4 |
:10963C00FD31FD25FD19FD0EFD02FDF7FCECFCE2F4 |
:10964C00FCD7FCCDFCC3FCBAFCB0FCA7FC9EFC9682 |
:10965C00FC8EFC85FC7EFC76FC6FFC68FC61FC5B84 |
:10966C00FC55FC4FFC49FC44FC3FFC3BFC36FC32FB |
:10967C00FC2EFC2BFC28FC25FC22FC20FC1EFC1CDC |
:10968C00FC1BFC1AFC19FC19FC18FC19FC19FC1A23 |
:10969C00FC1BFC1CFC1EFC20FC22FC25FC28FC2BCF |
:1096AC00FC2EFC32FC36FC3BFC3FFC44FC49FC4FE2 |
:1096BC00FC55FC5BFC61FC68FC6FFC76FC7EFC855D |
:1096CC00FC8EFC96FC9EFCA7FCB0FCBAFCC3FCCD4B |
:1096DC00FCD7FCE2FCECFCF7FC02FD0EFD19FD25B1 |
:1096EC00FD31FD3DFD4AFD56FD63FD70FD7EFD8B9C |
:1096FC00FD99FDA7FDB5FDC3FDD1FDE0FDEFFDFD21 |
:10970C00FD0CFE1CFE2BFE3BFE4AFE5AFE6AFE7A48 |
:10971C00FE8AFE9AFEAAFEBBFECBFEDCFEEDFEFE32 |
:10972C00FE0FFF20FF31FF42FF53FF64FF75FF87E1 |
:10973C00FF98FFA9FFBBFFCCFFDEFFEFFF0000117E |
:10974C00002200340045005700680079008B009C13 |
:10975C0000AD00BE00CF00E000F1000201130124B7 |
:10976C00013501450156016601760186019601A677 |
:10977C0001B601C501D501E401F401030211022077 |
:10978C00022F023D024B02590267027502820290BF |
:10979C00029D02AA02B602C302CF02DB02E702F26A |
:1097AC0002FE02090314031E03290333033D03467F |
:1097BC00035003590362036A0372037B0382038A17 |
:1097CC0003910398039F03A503AB03B103B703BC39 |
:1097DC0003C103C503CA03CE03D203D503D803DBED |
:1097EC0003DE03E003E203E403E503E603E703E738 |
:1097FC00030001020203030303040404040404042D |
:10980C0004050505050505050505050505050505FD |
:10981C0005060606060606060606060606060606DD |
:10982C0006060606060606060606060606060606CC |
:10983C0006070707070707070707070707070707AD |
:10984C00070707070707070707070707070707079C |
:10985C00070707070707070707070707070707078C |
:10986C00070707070707070707070707070707077C |
:10987C00070808080808080808080808080808085D |
:10988C00080808080808080808080808080808084C |
:10989C00080808080808080808080808080808083C |
:1098AC00080808080808080808080808080808082C |
:1098BC00080808080808080808080808080808081C |
:1098CC00080808080808080808080808080808080C |
:1098DC0008080808080808080808080808080808FC |
:1098EC0008080808080808080808080808080808EC |
:0298FC00080062 |
:00000001FF |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/GPS.c |
---|
0,0 → 1,300 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 10.2007 by Jochen Kromayer |
// + es handelt sich um eine Beta-Software, die zu nichtkommerziellen Zwecken frei veröffentlich und weitergegeben werden darf. Für evtl. |
// + Personen- und/der Sachschäden ist jegliche Haftung ausgeschlossen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "math.h" |
//Sinusfunktion von 0° bis 359°. Ergebnis wurde mit 1000 multipliziert, damit als Definition platzsparend int |
//verwendet werden kann. d.h., es muss also in der späteren Berechnung noch mit 0,001 multipliziert werden //(090907Kr) |
const int c_sin[] = {0,17,34,52,69,87,104,121,139,156,173,190, |
207,224,241,258,275,292,309,325,342,358,374,390,406,422,438,453,469,484,500,515,529,544,559,573,587,601,615,629, |
642,656,669,682,694,707,719,731,743,754,766,777,788,798,809,819,829,838,848,857,866,874,882,891,898,906,913,920, |
927,933,939,945,951,956,961,965,970,974,978,981,984,987,990,992,994,996,997,998,999,999,1000,999,999,998,997,996, |
994,992,990,987,984,981,978,974,970,965,961,956,951,945,939,933,927,920,913,906,898,891,882,874,866,857,848,838, |
829,819,809,798,788,777,766,754,743,731,719,707,694,682,669,656,642,629,615,601,587,573,559,544,529,515,500,484, |
469,453,438,422,406,390,374,358,342,325,309,292,275,258,241,224,207,190,173,156,139,121,104,87,69,52,34,17,0,-17, |
-34,-52,-69,-87,-104,-121,-139,-156,-173,-190,-207,-224,-241,-258,-275,-292,-309,-325,-342,-358,-374,-390,-406, |
-422,-438,-453,-469,-484,-500,-515,-529,-544,-559,-573,-587,-601,-615,-629,-642,-656,-669,-682,-694,-707,-719, |
-731,-743,-754,-766,-777,-788,-798,-809,-819,-829,-838,-848,-857,-866,-874,-882,-891,-898,-906,-913,-920,-927, |
-933,-939,-945,-951,-956,-961,-965,-970,-974,-978,-981,-984,-987,-990,-992,-994,-996,-997,-998,-999,-999,-1000, |
-999,-999,-998,-997,-996,-994,-992,-990,-987,-984,-981,-978,-974,-970,-965,-961,-956,-951,-945,-939,-933,-927, |
-920,-913,-906,-898,-891,-882,-874,-866,-857,-848,-838,-829,-819,-809,-798,-788,-777,-766,-754,-743,-731,-719, |
-707,-694,-682,-669,-656,-642,-629,-615,-601,-587,-573,-559,-544,-529,-515,-500,-484,-469,-453,-438,-422,-406, |
-390,-374,-358,-342,-325,-309,-292,-275,-258,-241,-224,-207,-190,-173,-156,-139,-121,-104,-87,-69,-52,-34,-17}; |
//Cosinusfunktion von 0° bis 359°. Ergebnis wurde mit 1000 multipliziert, damit als Definition platzsparend int |
//verwendet werden kann. D.h., es muss also in der späteren Berechnung noch mit 0,001 multipliziert werden //(090907Kr) |
const int c_cos[] = {1000,999,999,998,997,996,994,992,990,987,984,981, |
978,974,970,965,961,956,951,945,939,933,927,920,913,906,898,891,882,874,866,857,848,838,829,819,809,798,788,777, |
766,754,743,731,719,707,694,682,669,656,642,629,615,601,587,573,559,544,529,515,500,484,469,453,438,422,406,390, |
374,358,342,325,309,292,275,258,241,224,207,190,173,156,139,121,104,87,69,52,34,17,0,-17,-34,-52,-69,-87,-104, |
-121,-139,-156,-173,-190,-207,-224,-241,-258,-275,-292,-309,-325,-342,-358,-374,-390,-406,-422,-438,-453,-469, |
-484,-500,-515,-529,-544,-559,-573,-587,-601,-615,-629,-642,-656,-669,-682,-694,-707,-719,-731,-743,-754,-766, |
-777,-788,-798,-809,-819,-829,-838,-848,-857,-866,-874,-882,-891,-898,-906,-913,-920,-927,-933,-939,-945,-951, |
-956,-961,-965,-970,-974,-978,-981,-984,-987,-990,-992,-994,-996,-997,-998,-999,-999,-1000,-999,-999,-998,-997, |
-996,-994,-992,-990,-987,-984,-981,-978,-974,-970,-965,-961,-956,-951,-945,-939,-933,-927,-920,-913,-906,-898, |
-891,-882,-874,-866,-857,-848,-838,-829,-819,-809,-798,-788,-777,-766,-754,-743,-731,-719,-707,-694,-682,-669, |
-656,-642,-629,-615,-601,-587,-573,-559,-544,-529,-515,-500,-484,-469,-453,-438,-422,-406,-390,-374,-358,-342, |
-325,-309,-292,-275,-258,-241,-224,-207,-190,-173,-156,-139,-121,-104,-87,-69,-52,-34,-17,0,17,34,52,69,87, |
104,121,139,156,173,190,207,224,241,258,275,292,309,325,342,358,374,390,406,422,438,453,469,484,500,515,529,544, |
559,573,587,601,615,629,642,656,669,682,694,707,719,731,743,754,766,777,788,798,809,819,829,838,848,857,866,874, |
882,891,898,906,913,920,927,933,939,945,951,956,961,965,970,974,978,981,984,987,990,992,994,996,997,998,999,999}; |
long Soll_Position_North = 0; |
long Soll_Position_East = 0; |
long GPS_Positionsabweichung_North = 0; |
long GPS_Positionsabweichung_East = 0; |
long GPS_Geschwindigkeit_North = 0; |
long GPS_Geschwindigkeit_East = 0; |
long P_Einfluss_North = 0; |
long D_Einfluss_North = 0; |
long P_Einfluss_East = 0; |
long D_Einfluss_East = 0; |
signed int GPS_North = 0; |
signed int GPS_East = 0; |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
volatile char gethome = 0; //Flag ob GPS_Home_Position gelernt ist //(280807Kr) |
long GPS_Home_North = 0; |
long GPS_Home_East = 0; |
unsigned char blinkcount_LED2 = 0; //Hilfszähler für die blinkende LED (010907Kr) |
//**************************** MIRCOS DEFINITIONSANFANG FÜR DIE FILTERUNG |
// Filterung der GPS Messwerte vom Ublox-Empfänger. Es wird der gleitende Durchschnitt aus n Messwerten gebildet |
#define MITTELWERTZAHL 8 // Anzahl der Messwerte fuer gleitenden Mittelwert |
volatile char NeuerMittelwert = 0; //Flag ob ein neuer Mittelwert vorliegt, der mit 4 Hz berechnet wird, da nur dann neue Messwerte vom GPS vorliegen |
volatile unsigned char FilterPos = 0; |
volatile long NORTH_MITTEL = 0; |
volatile long EAST_MITTEL = 0; |
volatile long long NORTH_LONG_LONG = 0; |
volatile long long EAST_LONG_LONG = 0; |
volatile int filterfilled = 0; |
typedef struct { |
long NORTH[MITTELWERTZAHL]; |
} FILTER_NORTH; // Filterdefinition für die Positions-Nordwerte aus dem GPS-Empfänger |
typedef struct { |
long EAST[MITTELWERTZAHL]; |
} FILTER_EAST; // Filterdefinition für die Positions-Ostwerte aus dem GPS-Empfänger |
FILTER_NORTH filter_north; |
FILTER_EAST filter_east; |
//**************************** MIRCOS DEFINITIONSENDE FÜR DIE FILTERUNG |
void gps_main(void) |
{ |
//**************************** MIRCOS FILTERUNG ANFANG |
// if(actualPos.GPSFix == 3 && actualPos.newData == 1) //bilde neuen Positionsmittelwert, wenn 3D-Fix und neue GPS-Daten vorliegen |
if(actualPos.GPSFix == 3) // hier auskommentieren, wenn dauernd (also nicht nur alle 250ms) die GPS-Berechnung durchgeführt werden soll |
{ |
filter_north.NORTH[FilterPos] = actualPos.northing; |
filter_east.EAST[FilterPos] = actualPos.easting; |
FilterPos++; |
if (FilterPos==MITTELWERTZAHL) FilterPos=0; |
if (filterfilled<MITTELWERTZAHL) filterfilled++; |
NORTH_LONG_LONG = 0; |
EAST_LONG_LONG = 0; |
for (int i=0; i<filterfilled; i++) |
{ |
NORTH_LONG_LONG += filter_north.NORTH[i]; |
EAST_LONG_LONG += filter_east.EAST[i]; |
} |
NORTH_LONG_LONG /= filterfilled; |
EAST_LONG_LONG /= filterfilled; |
NORTH_MITTEL = NORTH_LONG_LONG; |
EAST_MITTEL = EAST_LONG_LONG; |
NeuerMittelwert = 1; |
//actualPos.newData = 0; // hier auskommentieren, wenn dauernd (also nicht nur alle 250ms) die GPS-Berechnung durchgeführt werden soll |
} |
//******************************* MIRCOS FILTERUNG ENDE |
//wenn kein 3D-Fix vorhanden, über das Poti jedoch irgendeine GPS Funktion aktiv ist, werden die GPS-Steuerbefehle |
//auf Null gesetzt, um unkontrolliertes Wegfliegen durch das GPS zu verhindern. Dadurch wird abgesichert |
//(auch im laufenden Flug), dass bei einem Verlust der GPS-Verbindung GPS deaktivert wird |
if (actualPos.GPSFix < 3 && Poti3 > 70) |
{ |
GPS_Nick = 0; |
GPS_Roll = 0; |
LED2_OFF; |
beeptime = 50; |
} |
// speichert die GPS_Home_Position beim 3D-Fix, MotorEINschalten und wenn noch nicht zu weit weggeflogen wurde |
// (modell_fliegt_gps < 2000) einmalig ab. Die Flugzeitabfrage sichert ab, dass bei einem Losfliegen ohne 3D-Fix die Home_Positinen |
// irgendwann später dort gelernt werden, wo dann zu ersten mal ein 3D-Fix vorhanden ist |
if (actualPos.GPSFix == 3 && MotorenEin == 1 && gethome == 0 && modell_fliegt_gps < 2000) |
{ |
GPS_Home_North = NORTH_MITTEL; |
GPS_Home_East = EAST_MITTEL; |
// Muss hier auch eingelernt werden, damit falls das Poti3 beim Motorenstarten in |
// Mittelstellung sein sollte, trotzdem schon eine Sollposition vorliegt. Andernfalls würde |
// GPS_Nick und _Roll maximal werden bis zum ersten Mal Stick_Nick und _Roll gesteuert würde |
Soll_Position_North = NORTH_MITTEL; |
Soll_Position_East = EAST_MITTEL; |
beeptime = 50; |
gethome = 1; |
} |
//löscht die GPS_Home_Position beim MotorAUSschalten wieder und resetet das Flag gethome //(280807Kr) |
if (MotorenEin == 0) |
{ |
GPS_Home_North = 0; |
GPS_Home_East = 0; |
gethome = 0; |
modell_fliegt_gps = 0; |
} |
// wenn Schalter ausgeschaltet, dann wird die LED2 ausgeschaltet und das GPS Steuerkommando gelöscht |
if(Poti3 < 70) |
{ |
// Sollpositionen müssen auch hier beschrieben werden, damit ausgeschlossen ist, dass falls gelandet wird und die GPS-Funktion |
// über Poti3 deaktivert und anschließend wieder aktiviert wird keine Soll-Positionen vorliegen. |
Soll_Position_North = NORTH_MITTEL; |
Soll_Position_East = EAST_MITTEL; |
GPS_Nick = 0; |
GPS_Roll = 0; |
LED2_OFF; |
} |
// wenn 3D-Fix, Schalter im mittleren Bereich und vom Pilot gesteuert wird, wird ständig neue GPS-Sollposition eingelernt |
if(actualPos.GPSFix == 3 && Poti3 > 70 && Poti3 < 150 && (StickNick > 12 || StickNick < -12 || StickRoll > 12 || StickRoll < -12)) |
{ |
GPS_Nick = 0; //wird genullt, damit das letzte GPS Kommando nicht ständig gegen den Piloten ansteuert |
GPS_Roll = 0; //wird genullt, damit das letzte GPS Kommando nicht ständig gegen den Piloten ansteuert |
Soll_Position_North = NORTH_MITTEL; // Soll-Position wird geschrieben |
Soll_Position_East = EAST_MITTEL; // Soll-Position wird geschrieben |
//++++++++++++++++++++++++++++++++++++ |
//Sorgt lediglich dafür, dass die LED2 langsam blinkt. Dauer ist durch die "> x" Abfrage festgelegt |
//++++++++++++++++++++++++++++++++++++ |
if(blinkcount_LED2 >= 200) // maximal erlaubt 255 wegen unsigned char |
{ |
LED2_FLASH; |
blinkcount_LED2 = 0; |
} |
blinkcount_LED2++; |
//++++++++++++++++++++++++++++++++++++ |
} |
// wenn 3D-Fix, Schalter im mittleren Bereich (oder höher), neuer Mittelwert vorhanden, wenigstens einmal Sollposition gelernt und der Pilot nicht selbst steuert wird eine GPS-Funktion aktiviert |
if (actualPos.GPSFix == 3 && Poti3 > 70 && NeuerMittelwert == 1 && Soll_Position_North != 0 && Soll_Position_East != 0 && StickNick <= 12 && StickNick >= -12 && StickRoll <= 12 && StickRoll >= -12) |
{ |
//Berechnung der GPS-Positionsabweichung je nach aktivierter GPS-Funktion (GPS_HOLD oder HOMING) |
//DYNAMISCHES GPS-HOLD, wenn Schalter noch in Mittelstellung ist wird die zuletzt gelernte Soll_Position angeflogen |
if(Poti3 < 150) |
{ |
GPS_Positionsabweichung_North = (Soll_Position_North - NORTH_MITTEL); |
GPS_Positionsabweichung_East = (Soll_Position_East - EAST_MITTEL); |
LED2_ON; |
} |
//andernfalls, wenn Schalter in max. Stellung und zusätzlich die GPS_Home_Positionen beim Motorenstarten gelernt |
//werden konnten, wird zur GPS_Home_Position geflogen |
if (Poti3 >= 150 && GPS_Home_North != 0 && GPS_Home_East != 0) |
{ |
GPS_Positionsabweichung_North = (GPS_Home_North - NORTH_MITTEL); |
GPS_Positionsabweichung_East = (GPS_Home_East - EAST_MITTEL); |
// durch das ständige Neulernen der Soll_Positionen während HOMING wird erreicht, dass der MK nach dem Umschalten |
// von HOMING zurück zu GPS-HOLD nicht wieder an die alte Soll_Position zurück fliegt |
Soll_Position_North = NORTH_MITTEL; |
Soll_Position_East = EAST_MITTEL; |
LED2_ON; |
} |
//verhindert, dass beim Umschalten von Mittelstellung (GPS_HOLD) auf Maximalstellung (HOMING) OHNE gelernte Homeposition |
//die GPS Funktion unkontrolliert steuert. Daher wird GPS_HOLD aktiv gehalten, die Sollpositon wird bei Stickbefehlen |
//jedoch nicht wie beim dynamischen GPS_HOLD überschrieben. Zusätzlich wird der Summer eingeschaltet. |
if (Poti3 >= 150 && GPS_Home_North == 0 && GPS_Home_East == 0) |
{ |
GPS_Positionsabweichung_North = (Soll_Position_North - NORTH_MITTEL); |
GPS_Positionsabweichung_East = (Soll_Position_East - EAST_MITTEL); |
LED2_ON; |
beeptime = 50; |
} |
//GPS-Geschwindigkeiten |
GPS_Geschwindigkeit_North = actualPos.velNorth; //actualPos.velNorth ist die Geschwindigkeiten aus dem GPS Empfänger entlang der Nord-Süd Richtung |
GPS_Geschwindigkeit_East = actualPos.velEast; //actualPos.velEast ist die Geschwindigkeiten aus dem GPS Empfänger entlang der Ost-West Richtung |
//Berechnung der Einzelkomponenten des PD-Reglers |
P_Einfluss_North = (P_GPS_Verstaerkung * GPS_Positionsabweichung_North)*0.0005; //entspricht einer Skalierung von 1/2000 |
D_Einfluss_North = (D_GPS_Verstaerkung * GPS_Geschwindigkeit_North)*0.00333; //entspricht einer Skalierung von 1/300 |
P_Einfluss_East = (P_GPS_Verstaerkung * GPS_Positionsabweichung_East)*0.0005; //entspricht einer Skalierung von 1/2000 |
D_Einfluss_East = (D_GPS_Verstaerkung * GPS_Geschwindigkeit_East)*0.00333; //entspricht einer Skalierung von 1/300 |
// Begrenzung des maximalen D-Anteils für pos. und neg. Werte. Grenze muss so geählt werden, |
// dass das Limit im normalen Position-Hold nicht erreicht wird und somit keinen Einfluss hat. |
// Grund: Beim Zufliegen auf weiter entfernte Ziele bremst der D-Anteil kurz vor dem Ziel den Mikrokopter sehr stark ab. |
// Dieses Limit wirkt nur, wenn sich der MK im HOMING Modus befindet und sich noch weit (>2,5m) von der Home-Position weg befindet. |
if (Poti3 >= 150 && GPS_Home_North != 0 && GPS_Home_East != 0 && (abs(GPS_Positionsabweichung_North) > 250 || abs(GPS_Positionsabweichung_East) > 250)) |
{ |
if (D_Einfluss_North > Limit_D_Anteil) D_Einfluss_North = Limit_D_Anteil; |
if (D_Einfluss_East > Limit_D_Anteil) D_Einfluss_East = Limit_D_Anteil; |
if (D_Einfluss_North < -1 * Limit_D_Anteil) D_Einfluss_North = -1 * Limit_D_Anteil; |
if (D_Einfluss_East < -1 * Limit_D_Anteil) D_Einfluss_East = -1 * Limit_D_Anteil; |
} |
// PD-Regler |
GPS_North = (-P_Einfluss_North + D_Einfluss_North); |
GPS_East = (P_Einfluss_East - D_Einfluss_East); |
//Umrechnen vom globalen North- bzw. East- in das körperfeste X- bzw. Y- Koordinatensystem |
GPS_Nick = (-c_sin[KompassValue]*0.001*GPS_East + c_cos[KompassValue]*0.001*GPS_North); // die "0" kann später durch den Messwert des Kompasssensors (KompassValue/0.01745329251) ersetzt werden |
GPS_Roll = (c_cos[KompassValue]*0.001*GPS_East + c_sin[KompassValue]*0.001*GPS_North); // die "0" kann später durch den Messwert des Kompasssensors (KompassValue/180*3.1415926535) ersetzt werden |
// Begrenzung des maximalen GPS Einflusses für positive und negative Werte |
if (GPS_Nick > 35) GPS_Nick = 35; |
if (GPS_Roll > 35) GPS_Roll = 35; |
if (GPS_Nick < -35) GPS_Nick = -35; |
if (GPS_Roll < -35) GPS_Roll = -35; |
//Funktion wird dadurch nur alle 250 ms aufgerufen, wenn neue Mittelwerte aus den GPS-Daten vorliegen. |
//FUNKTIONIERT MOMENTAN NOCH NICHT, DA STÄNDIG OHNE UNTERBRECHUNG NEUE MITTELWERTE BERECHNET WERDEN. |
//GRUND: DIE ABFRAGE NACH NEUE GPS-DATEN ERFOLGT NOCH NICHT |
NeuerMittelwert = 0; |
} |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/License.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-profit use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be |
// + clearly linked and named as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/MIKROKOPTER_TO_DO.txt |
---|
0,0 → 1,11 |
. Patricks neigungskompensierten Kompass |
. Aufruf der GPS.c innerhalb der fc.c nur wenn neue Daten vorliegen |
. innerhalb der GPS.c den PD-Regler nicht mit "NeuerMittelwert", sondern mit "actualpos.newdata" alle 250ms aufrufen |
. GPS-Empfänger auf 5Hz einstellen |
. Begrenzung von 35 auf 50 anheben, damit auch bei stärkerem Wind geflogen werden kann |
. Waypoints |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/Parameter.txt |
---|
0,0 → 1,15 |
bei leichtem, konstantem Wind |
P-Faktor(Userparam_1): 120 |
D-Faktor(Userparam_2): 90 |
D-Anteil_Limit(Userparam_3): 45 |
bei stärkerem, böhigem Wind: |
P-Faktor(Userparam_1): 150 |
D-Faktor(Userparam_2): 95 |
D-Anteil_Limit(Userparam_3): 45 |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/README_Nickk666Kompass.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/Setting_1.mkp |
---|
0,0 → 1,51 |
[Setup] |
Name=GPS |
GlobalConfig=43 |
[Channels] |
Gas=3 |
Gier=2 |
Nick=1 |
Roll=4 |
Poti_1=5 |
Poti_2=6 |
Poti_3=7 |
Poti_4=8 |
[Stick] |
Nick_Roll-P=4 |
Nick_Roll-D=0 |
Gier-P=16 |
[Altitude] |
Setpoint=254 |
MinGas=30 |
P=10 |
Barometric-D=50 |
Z-ACC-Effect=50 |
Gain=2 |
[Gyro] |
P=120 |
I=150 |
ACC_Gyro-Factor=26 |
Main-I=0 |
[Others] |
MinGas=5 |
MaxGas=250 |
Compass-Effect=64 |
UnderVoltage=95 |
NotGas=66 |
NotGasTime=60 |
[User] |
Parameter_1=251 |
Parameter_2=252 |
Parameter_3=35 |
Parameter_4=60 |
[Camera] |
ServoNickControl=100 |
ServoNickCompensation=40 |
ServoNickInvert=0 |
ServoNickMin=50 |
ServoNickMax=150 |
ServoNickRefreshRate=5 |
[Loop] |
Config=0 |
GasLimit=50 |
StickThreshold=90 |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/Settings.h |
---|
--- MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/_Settings.h (nonexistent) |
+++ MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/_Settings.h (revision 376) |
@@ -0,0 +1,50 @@ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Testmodi |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MOTOR_OFF 0 |
+#define MOTOR_TEST 0 |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Abstimmung |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ACC_AMPLIFY 16 |
+#define FAKTOR_P 1 |
+#define FAKTOR_I 0.0001 |
+ |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debug-Interface |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein? |
+#define MIN_DEBUG_INTERVALL 500 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Sender |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ #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 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Kamera |
+// Stick_P:3 |
+// Stick_D:0 |
+// Gyro_P: 175 |
+// Gyro_I: 175 |
+// Ki_Anteil: 10 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Normal |
+// Stick_P:2 |
+// Stick_D:8 |
+// Gyro_P: 80 |
+// Gyro_I: 150 |
+// Ki_Anteil: 5 |
+ |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/analog.c |
---|
0,0 → 1,172 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0; |
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0; |
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile int StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
volatile int HoeheD = 0; |
volatile char messanzahl_Druck; |
volatile int tmpLuftdruck; |
volatile unsigned int ZaehlMessungen = 0; |
//####################################################################################### |
// |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
//Free Running Mode, Division Factor 128, Interrupt on |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]); |
if(off > 20) off -= 10; |
OCR0A = off; |
Delay_ms(100); |
if(MessLuftdruck < 850) off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms(50); |
printf("."); |
if(MessLuftdruck < 900) break; |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
DruckOffsetSetting = off; |
Delay_ms(300); |
} |
//####################################################################################### |
// |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
signed int wert; |
ANALOG_OFF; |
switch(state++) |
{ |
case 0: |
wert = (signed int) AdNeutralGier - ADC; |
if(PlatinenVersion != 10) wert *= 2; |
AccumulateGier += wert; // |
MessanzahlGier++; |
Mess_Integral_Gier += wert;// / 16; |
Mess_Integral_Gier2 += wert; |
kanal = 1; |
ZaehlMessungen++; |
break; |
case 1: |
wert = (signed int) ADC - AdNeutralRoll; |
if(PlatinenVersion != 10) wert *= 2; |
Mess_IntegralRoll += wert; |
Mess_IntegralRoll2 += wert; |
if(Mess_IntegralRoll > 310000L) Mess_IntegralRoll = -290000L; |
if(Mess_IntegralRoll <-310000L) Mess_IntegralRoll = 290000L; |
if(ADC < 15) wert = -1000; |
if(ADC < 7) wert = -2000; |
if(ADC > 1010) wert = +1000; |
if(ADC > 1017) wert = +2000; |
AccumulateRoll += wert; |
MessanzahlRoll++; |
kanal = 2; |
break; |
case 2: |
wert = (signed int) ADC - AdNeutralNick; |
if(PlatinenVersion != 10) wert *= 2; |
Mess_IntegralNick += wert; |
Mess_IntegralNick2 += wert; |
if(Mess_IntegralNick > 310000L) Mess_IntegralNick = -290000L; |
if(Mess_IntegralNick <-310000L) Mess_IntegralNick = 290000L; |
if(ADC < 15) wert = -1000; |
if(ADC < 7) wert = -2000; |
if(ADC > 1010) wert = +1000; |
if(ADC > 1017) wert = +2000; |
AccumulateNick += wert; |
MessanzahlNick++; |
kanal = 4; |
break; |
case 3: |
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
kanal = 6; |
break; |
case 4: |
Aktuell_ay = NeutralAccY - ADC; |
accumulate_AccRoll += Aktuell_ay; |
messanzahl_AccRoll++; |
kanal = 7; |
break; |
case 5: |
Aktuell_ax = ADC - NeutralAccX; |
accumulate_AccNick += Aktuell_ax; |
messanzahl_AccNick++; |
kanal = 5; |
state = 6; |
break; |
case 6: |
accumulate_AccHoch = (signed int) ADC - NeutralAccZ; |
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
if(accumulate_AccHoch > 1) |
{ |
if(NeutralAccZ < 800) NeutralAccZ+= 0.02; |
} |
else if(accumulate_AccHoch < -1) |
{ |
if(NeutralAccZ > 600) NeutralAccZ-= 0.02; |
} |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen |
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
kanal = 3; |
state = 7; |
} |
else |
{ |
kanal = 0; |
state = 0; |
}*/ |
kanal = 3; |
state = 7; |
break; |
case 7: |
tmpLuftdruck += ADC; |
if(++messanzahl_Druck >= 5) |
{ |
MessLuftdruck = ADC; |
messanzahl_Druck = 0; |
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert |
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
HoehenWert = StartLuftdruck - Luftdruck; |
tmpLuftdruck = 0; |
} |
kanal = 0; |
state = 0; |
break; |
default: |
kanal = 0; |
state = 0; |
break; |
} |
ADMUX = kanal; |
ANALOG_ON; |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/analog.h |
---|
0,0 → 1,23 |
/*####################################################################################### |
#######################################################################################*/ |
extern volatile int UBat; |
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch; |
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern volatile int HoeheD; |
extern volatile unsigned int MessLuftdruck; |
extern volatile int StartLuftdruck; |
extern unsigned int ReadADC(unsigned char adc_input); |
extern void ADC_Init(void); |
extern void SucheLuftruckOffset(void); |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/compass.c |
---|
0,0 → 1,230 |
/* |
Copyright 2007, Niklas Nold |
This program (files compass.c and compass.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
#include "main.h" |
MM3_struct MM3; |
int8_t Kompass_Offset[2] EEMEM; // X_off[0], Y_off[1], Z_off[2] |
int8_t X_off, Y_off, Z_off; |
//############################################################################ |
// Initialisierung |
void MM3_init(void) |
//############################################################################ |
{ |
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //Interrupt an, Master, 156 kHz Oszillator |
//SPSR = (1<<SPI2X); |
DDRB |= (1<<PB7)|(1<<PB5)|(1<<PB2); // J8, MOSI, SCK Ausgang |
PORTD &= ~(1<<PD3); // J5 auf Low |
MM3.AXIS = MM3_X; |
MM3.STATE = MM3_RESET; |
// Kalibrierung aus dem EEprom lesen |
X_off = (int8_t)eeprom_read_byte(&Kompass_Offset[0]); |
Y_off = (int8_t)eeprom_read_byte(&Kompass_Offset[1]); |
Z_off = (int8_t)eeprom_read_byte(&Kompass_Offset[2]); |
//X_off = -11; |
//Y_off = 30; |
//Z_off = 18; |
} |
//############################################################################ |
// Wird in der SIGNAL (SIG_OVERFLOW0) aufgerufen |
void MM3_timer0(void) |
//############################################################################ |
{ |
switch (MM3.STATE) |
{ |
case MM3_RESET: |
PORTB |= (1<<PB2); // J8 auf High, MM3 Reset |
MM3.STATE = MM3_START_TRANSFER; |
return; |
case MM3_START_TRANSFER: |
PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High) |
if (MM3.AXIS == MM3_X) SPDR = 0x31; // Schreiben ins SPDR löst automatisch Übertragung (MOSI und MISO) aus |
else if (MM3.AXIS == MM3_Y) SPDR = 0x32; // Micromag Period Select ist auf 256 (0x30) |
else if (MM3.AXIS == MM3_Z) SPDR = 0x33; // 1: x-Achse, 2: Y-Achse, 3: Z-Achse |
MM3.DRDY = SetDelay(8); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 256 eigentlich 4 ms) |
MM3.STATE = MM3_WAIT_DRDY; |
return; |
case MM3_WAIT_DRDY: |
if (CheckDelay(MM3.DRDY)) {SPDR = 0x00;MM3.STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei |
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI) |
/* |
case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in ° |
MM3.NickGrad = IntegralNick/(EE_Parameter.UserParam1*8); |
MM3.RollGrad = IntegralRoll/(EE_Parameter.UserParam2*8); |
MM3.AXIS = MM3_X; |
MM3.STATE = MM3_RESET; |
return; |
*/ |
} |
} |
//############################################################################ |
// SPI byte ready |
SIGNAL (SIG_SPI) |
//############################################################################ |
{ |
switch (MM3.STATE) |
{ |
case MM3_DRDY: // 1. Byte ist da, abspeichern, an die MSB-Stelle rücken |
if (MM3.AXIS == MM3_X) |
{ |
MM3.x_axis = SPDR; |
MM3.x_axis <<= 8; |
} |
else if (MM3.AXIS == MM3_Y) |
{ |
MM3.y_axis = SPDR; |
MM3.y_axis <<= 8; |
} |
else // if (MM3.AXIS == MM3_Z) |
{ |
MM3.z_axis = SPDR; |
MM3.z_axis <<= 8; |
} |
SPDR=0x00; // Übertragung von 2. Byte auslösen |
MM3.STATE=MM3_BYTE2; |
return; |
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da |
if (MM3.AXIS == MM3_X) |
{ |
MM3.x_axis |= SPDR; |
// Spikes filtern |
if (abs(MM3.x_axis) < Max_Axis_Value) MM3.x_axis_old = MM3.x_axis; |
else MM3.x_axis = MM3.x_axis_old; |
MM3.AXIS = MM3_Y; |
MM3.STATE = MM3_RESET; |
} |
else if (MM3.AXIS == MM3_Y) |
{ |
MM3.y_axis |= SPDR; |
if (abs(MM3.y_axis) < Max_Axis_Value) MM3.y_axis_old = MM3.y_axis; |
else MM3.y_axis = MM3.y_axis_old; |
MM3.AXIS = MM3_Z; |
MM3.STATE = MM3_RESET; |
} |
else // if (MM3.AXIS == MM3_Z) |
{ |
MM3.z_axis |= SPDR; |
if (abs(MM3.z_axis) < Max_Axis_Value) MM3.z_axis_old = MM3.z_axis; |
else MM3.z_axis = MM3.z_axis_old; |
MM3.AXIS = MM3_X; |
MM3.STATE = MM3_RESET; |
} |
return; |
} |
} |
//############################################################################ |
// Kompass kalibrieren |
void MM3_calib(void) |
//############################################################################ |
{ |
signed int x_min=0,x_max=0,y_min=0,y_max=0,z_min=0,z_max=0; |
uint8_t measurement=50,beeper=0; |
unsigned int timer; |
while (measurement) |
{ |
//H_earth = MM3.x_axis*MM3.x_axis + MM3.y_axis*MM3.y_axis + MM3.z_axis*MM3.z_axis; |
if (MM3.x_axis > x_max) x_max = MM3.x_axis; |
else if (MM3.x_axis < x_min) x_min = MM3.x_axis; |
if (MM3.y_axis > y_max) y_max = MM3.y_axis; |
else if (MM3.y_axis < y_min) y_min = MM3.y_axis; |
if (MM3.z_axis > z_max) z_max = MM3.z_axis; |
else if (MM3.z_axis < z_min) z_min = MM3.z_axis; |
if (!beeper) |
{ |
beeper = 50; |
beeptime = 50; |
} |
beeper--; |
// Schleife mit 100 Hz voll ausreichend |
timer = SetDelay(10); |
while(!CheckDelay(timer)); |
// Wenn Gas zurück genommen wird, Kalibrierung mit Verzögerung beenden |
if (PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 100) measurement--; |
} |
// Offset der Achsen berechnen |
X_off = (x_max + x_min) / 2; |
Y_off = (y_max + y_min) / 2; |
Z_off = (z_max + z_min) / 2; |
// und im EEProm abspeichern |
eeprom_write_byte(&Kompass_Offset[0], X_off); |
eeprom_write_byte(&Kompass_Offset[1], Y_off); |
eeprom_write_byte(&Kompass_Offset[2], Z_off); |
} |
//############################################################################ |
// Neigungskompensierung und Berechnung der Ausrichtung |
signed int MM3_heading(void) |
//############################################################################ |
{ |
float sin_nick, cos_nick, sin_roll, cos_roll; |
signed int x_corr, y_corr, heading; |
signed int x_axis,y_axis,z_axis; |
MM3.NickGrad = IntegralNick/(EE_Parameter.UserParam4*8); |
MM3.RollGrad = IntegralRoll/(EE_Parameter.UserParam4*8); |
// Berechung von sinus und cosinus |
sin_nick = sin_f(MM3.NickGrad); |
cos_nick = cos_f(MM3.NickGrad); |
sin_roll = sin_f(MM3.RollGrad); |
cos_roll = cos_f(MM3.RollGrad); |
// Offset der Achsen nur bei Bedarf (also hier) berücksichtigen |
x_axis = MM3.x_axis - X_off; |
y_axis = MM3.y_axis - Y_off; |
z_axis = MM3.z_axis - Z_off; |
// Neigungskompensation |
x_corr = (cos_nick * x_axis) - (((sin_roll * y_axis) - (cos_roll * z_axis)) * sin_nick); |
y_corr = ((cos_roll * y_axis) + (sin_roll * z_axis)); |
// Winkelberechnung |
heading = atan2_i(x_corr, y_corr); |
return (heading); |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/compass.h |
---|
0,0 → 1,37 |
typedef struct |
{ |
uint8_t STATE; |
unsigned int DRDY; |
uint8_t AXIS; |
signed int x_axis; |
signed int x_axis_old; |
signed int y_axis; |
signed int y_axis_old; |
signed int z_axis; |
signed int z_axis_old; |
signed int NickGrad; |
signed int RollGrad; |
}MM3_struct; |
extern MM3_struct MM3; |
extern int8_t X_off, Y_off, Z_off; |
void MM3_init(void); |
void MM3_timer0(void); |
void MM3_calib(void); |
signed int MM3_heading(void); |
#define Max_Axis_Value 500 |
// Die Werte der Statemachine |
#define MM3_RESET 0 |
#define MM3_START_TRANSFER 1 |
#define MM3_WAIT_DRDY 2 |
#define MM3_DRDY 4 |
#define MM3_BYTE2 8 |
#define MM3_X 16 |
#define MM3_Y 32 |
#define MM3_Z 64 |
#define MM3_TILT 128 |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/eeprom.c |
---|
--- MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/fc.c (nonexistent) |
+++ MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/fc.c (revision 376) |
@@ -0,0 +1,1028 @@ |
+/*####################################################################################### |
+Flight Control |
+#######################################################################################*/ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) 04.2007 Holger Buss |
+// + Nur für den privaten Gebrauch |
+// + www.MikroKopter.com |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
+// + bzgl. der Nutzungsbedingungen aufzunehmen. |
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
+// + Verkauf von Luftbildaufnahmen, usw. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
+// + eindeutig als Ursprung verlinkt werden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
+// + Benutzung auf eigene Gefahr |
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
+// + mit unserer Zustimmung zulässig |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
+// + this list of conditions and the following disclaimer. |
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
+// + from this software without specific prior written permission. |
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
+// + for non-commercial use (directly or indirectly) |
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
+// + with our written permission |
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
+// + clearly linked as origin |
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#include "main.h" |
+ |
+unsigned char h,m,s; |
+volatile unsigned int I2CTimeout = 100; |
+volatile int MesswertNick,MesswertRoll,MesswertGier; |
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0; |
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
+volatile float NeutralAccZ = 0; |
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
+volatile long IntegralNick = 0,IntegralNick2 = 0; |
+volatile long IntegralRoll = 0,IntegralRoll2 = 0; |
+volatile long Integral_Gier = 0; |
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
+volatile long Mess_Integral_Hoch = 0; |
+volatile int KompassValue = 0; |
+volatile int KompassStartwert = 0; |
+volatile int KompassRichtung = 0; |
+unsigned char MAX_GAS,MIN_GAS; |
+unsigned char Notlandung = 0; |
+unsigned char HoehenReglerAktiv = 0; |
+ |
+unsigned char blinkcount_LED1 = 0;//Hilfszähler für die blinkende LED (310807Kr) |
+unsigned int modell_fliegt_gps = 0;//(030907Kr) |
+unsigned char Limit_D_Anteil = 0;//(210907Kr) |
+ |
+float GyroFaktor; |
+float IntegralFaktor; |
+ |
+volatile int DiffNick,DiffRoll; |
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0; //PPM24-Erweiterung (121007Kr) |
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
+unsigned char MotorWert[5]; |
+volatile unsigned char SenderOkay = 0; |
+int StickNick = 0,StickRoll = 0,StickGier = 0; |
+char MotorenEin = 0; |
+int HoehenWert = 0; |
+int SollHoehe = 0; |
+unsigned char Looping_Nick = 0,Looping_Roll = 0; |
+ |
+float Kp = FAKTOR_P; |
+float Ki = FAKTOR_I; |
+ |
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
+unsigned char Parameter_MaxHoehe = 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_Gyro_P = 150; // Wert : 10-250 |
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-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_ServoNickControl = 100; |
+unsigned char Parameter_LoopGasLimit = 70; |
+struct mk_param_struct EE_Parameter; |
+ |
+void Piep(unsigned char Anzahl) |
+{ |
+ while(Anzahl--) |
+ { |
+ if(MotorenEin) return; //auf keinen Fall im Flug! |
+ beeptime = 100; |
+ Delay_ms(250); |
+ } |
+} |
+ |
+//############################################################################ |
+// Nullwerte ermitteln |
+void SetNeutral(void) |
+//############################################################################ |
+{ |
+ unsigned int timer; |
+ NeutralAccX = 0; |
+ NeutralAccY = 0; |
+ NeutralAccZ = 0; |
+ AdNeutralNick = 0; |
+ AdNeutralRoll = 0; |
+ AdNeutralGier = 0; |
+ CalibrierMittelwert(); |
+ timer = SetDelay(5); |
+ while (!CheckDelay(timer)); |
+ CalibrierMittelwert(); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ |
+ if(PlatinenVersion == 10) |
+ { |
+ AdNeutralNick= abs(MesswertNick); |
+ AdNeutralRoll= abs(MesswertRoll); |
+ AdNeutralGier= abs(MesswertGier); |
+ } |
+ else |
+ { |
+ AdNeutralNick= abs(MesswertNick) / 2; |
+ AdNeutralRoll= abs(MesswertRoll) / 2; |
+ AdNeutralGier= abs(MesswertGier) / 2; |
+ } |
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
+ NeutralAccZ = Aktuell_az; |
+ |
+ Mess_IntegralNick = 0; |
+ Mess_IntegralNick2 = 0; |
+ Mess_IntegralRoll = 0; |
+ Mess_IntegralRoll2 = 0; |
+ Mess_Integral_Gier = 0; |
+ MesswertNick = 0; |
+ MesswertRoll = 0; |
+ MesswertGier = 0; |
+ StartLuftdruck = Luftdruck; |
+ HoeheD = 0; |
+ Mess_Integral_Hoch = 0; |
+ KompassStartwert = KompassValue; |
+ beeptime = 50; |
+} |
+ |
+//############################################################################ |
+// Bildet den Mittelwert aus den Messwerten |
+void Mittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick); |
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll); |
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier); |
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L; |
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L; |
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L; |
+ AccumulateNick = 0; MessanzahlNick = 0; |
+ AccumulateRoll = 0; MessanzahlRoll = 0; |
+ AccumulateGier = 0; MessanzahlGier = 0; |
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0; |
+ accumulate_AccNick = 0;messanzahl_AccNick = 0; |
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0; |
+ Integral_Gier = Mess_Integral_Gier; |
+// Integral_Gier2 = Mess_Integral_Gier2; |
+ IntegralNick = Mess_IntegralNick; |
+ IntegralRoll = Mess_IntegralRoll; |
+ IntegralNick2 = Mess_IntegralNick2; |
+ IntegralRoll2 = Mess_IntegralRoll2; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ |
+/* |
+//------------------------------------------------------------------------------ |
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200); |
+ else |
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200); |
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200); |
+ else |
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200); |
+//------------------------------------------------------------------------------ |
+*/ |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ //PPM24-Erweiterung (121007Kr) |
+ if(Poti5 < PPM_in[9] + 110) Poti5++; else if(Poti5 > PPM_in[9] + 110 && Poti5) Poti5--; |
+ if(Poti6 < PPM_in[10] + 110) Poti6++; else if(Poti6 > PPM_in[10] + 110 && Poti6) Poti6--; |
+ if(Poti7 < PPM_in[11] + 110) Poti7++; else if(Poti7 > PPM_in[11] + 110 && Poti7) Poti7--; |
+ if(Poti8 < PPM_in[12] + 110) Poti8++; else if(Poti8 > PPM_in[12] + 110 && Poti8) Poti8--; |
+ |
+ |
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
+ //PPM24-Erweiterung (121007Kr) |
+ if(Poti5 < 0) Poti5 = 0; else if(Poti5 > 255) Poti5 = 255; |
+ if(Poti6 < 0) Poti6 = 0; else if(Poti6 > 255) Poti6 = 255; |
+ if(Poti7 < 0) Poti7 = 0; else if(Poti7 > 255) Poti7 = 255; |
+ if(Poti8 < 0) Poti8 = 0; else if(Poti8 > 255) Poti8 = 255; |
+} |
+ |
+//############################################################################ |
+// Messwerte beim Ermitteln der Nullage |
+void CalibrierMittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick); |
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll); |
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier); |
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick); |
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll; |
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch; |
+ AccumulateNick = 0; MessanzahlNick = 0; |
+ AccumulateRoll = 0; MessanzahlRoll = 0; |
+ AccumulateGier = 0; MessanzahlGier = 0; |
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0; |
+ accumulate_AccNick = 0;messanzahl_AccNick = 0; |
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ //PPM24-Erweiterung (121007Kr) |
+ if(Poti5 < PPM_in[9] + 110) Poti5++; else if(Poti5 > PPM_in[9] + 110 && Poti5) Poti5--; |
+ if(Poti6 < PPM_in[10] + 110) Poti6++; else if(Poti6 > PPM_in[10] + 110 && Poti6) Poti6--; |
+ if(Poti7 < PPM_in[11] + 110) Poti7++; else if(Poti7 > PPM_in[11] + 110 && Poti7) Poti7--; |
+ if(Poti8 < PPM_in[12] + 110) Poti8++; else if(Poti8 > PPM_in[12] + 110 && Poti8) Poti8--; |
+ |
+ |
+ |
+ |
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
+ //PPM24-Erweiterung (121007Kr) |
+ if(Poti5 < 0) Poti5 = 0; else if(Poti5 > 255) Poti5 = 255; |
+ if(Poti6 < 0) Poti6 = 0; else if(Poti6 > 255) Poti6 = 255; |
+ if(Poti7 < 0) Poti7 = 0; else if(Poti7 > 255) Poti7 = 255; |
+ if(Poti8 < 0) Poti8 = 0; else if(Poti8 > 255) Poti8 = 255; |
+} |
+ |
+//############################################################################ |
+// Senden der Motorwerte per I2C-Bus |
+void SendMotorData(void) |
+//############################################################################ |
+{ |
+ if(MOTOR_OFF || !MotorenEin) |
+ { |
+ Motor_Hinten = 0; |
+ Motor_Vorne = 0; |
+ Motor_Rechts = 0; |
+ Motor_Links = 0; |
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
+ if(MotorTest[2]) Motor_Links = MotorTest[2]; |
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
+ } |
+ |
+ // DebugOut.Analog[12] = Motor_Vorne; |
+ // DebugOut.Analog[13] = Motor_Hinten; |
+ // DebugOut.Analog[14] = Motor_Links; |
+ // DebugOut.Analog[15] = Motor_Rechts; |
+ |
+ // DebugOut.Analog[12] = motor_rx[0]; //Motorstrom vorne |
+ // DebugOut.Analog[13] = motor_rx[1]; //Motorstrom hinten |
+ // DebugOut.Analog[14] = motor_rx[2]; //Motorstrom links |
+ // DebugOut.Analog[15] = motor_rx[3]; //Motorstrom rechts |
+ |
+ |
+ //Start I2C Interrupt Mode |
+ twi_state = 0; |
+ motor = 0; |
+ i2c_start(); |
+} |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Konstanten |
+// + 0-250 -> normale Werte |
+// + 251 -> Poti1 |
+// + 252 -> Poti2 |
+// + 253 -> Poti3 |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+void DefaultKonstanten1(void) |
+{ |
+ EE_Parameter.Kanalbelegung[K_NICK] = 1; |
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
+ EE_Parameter.Kanalbelegung[K_GAS] = 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.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01; |
+ EE_Parameter.Hoehe_MinGas = 30; |
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1 |
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_Verstaerkung = 4; // Wert : 0-50 |
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64 |
+ EE_Parameter.Gier_P = 16; // Wert : 1-20 |
+ EE_Parameter.Gas_Min = 5; // Wert : 0-32 // (160607Kr) |
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
+ EE_Parameter.KompassWirkung = 16; // Wert : 0-250 |
+ EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250 |
+ EE_Parameter.Gyro_I = 150; // Wert : 0-250 |
+ EE_Parameter.UnterspannungsWarnung = 95; // Wert : 0-250 // (160607Kr) |
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
+ EE_Parameter.I_Faktor = 0; |
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam4 = 120; //zur freien Verwendung |
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickRefresh = 5; |
+ EE_Parameter.LoopGasLimit = 50; |
+ EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
+ EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
+ memcpy(EE_Parameter.Name, "Sport\0", 12); |
+} |
+ |
+void DefaultKonstanten2(void) |
+{ |
+ EE_Parameter.Kanalbelegung[K_NICK] = 1; |
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
+ EE_Parameter.Kanalbelegung[K_GAS] = 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.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
+ EE_Parameter.Hoehe_MinGas = 30; |
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1 |
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
+ EE_Parameter.Gier_P = 16; // Wert : 1-20 |
+ EE_Parameter.Gas_Min = 5; // Wert : 0-32 // (160607Kr) |
+ EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
+ EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
+ EE_Parameter.KompassWirkung = 16; // Wert : 0-250 |
+ EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250 |
+ EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
+ EE_Parameter.UnterspannungsWarnung = 95; // Wert : 0-250 // (160607Kr) |
+ EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
+ EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
+ EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
+ EE_Parameter.I_Faktor = 0; |
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam4 = 120; //zur freien Verwendung |
+ EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos |
+ EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
+ EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag |
+ EE_Parameter.ServoNickRefresh = 5; |
+ EE_Parameter.LoopGasLimit = 50; |
+ EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
+ EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
+ memcpy(EE_Parameter.Name, "Kamera\0", 12); |
+} |
+ |
+ |
+//############################################################################ |
+// Trägt ggf. das Poti als Parameter ein |
+void ParameterZuordnung(void) |
+//############################################################################ |
+{ |
+ |
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255); |
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
+ |
+ Ki = (float) Parameter_I_Faktor * 0.0001; |
+ MAX_GAS = EE_Parameter.Gas_Max; |
+ MIN_GAS = EE_Parameter.Gas_Min; |
+} |
+ |
+ |
+//############################################################################ |
+// |
+void MotorRegler(void) |
+//############################################################################ |
+{ |
+ int motorwert,pd_ergebnis,h,tmp_int; |
+ int GierMischanteil,GasMischanteil; |
+ static long SummeNick=0,SummeRoll=0; |
+ static long sollGier = 0,tmp_long,tmp_long2; |
+ long IntegralFehlerNick = 0; |
+ long IntegralFehlerRoll = 0; |
+ static unsigned int RcLostTimer; |
+ static unsigned char delay_neutral = 0; |
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
+ static unsigned int modell_fliegt = 0; |
+ static int hoehenregler = 0; |
+ static char TimerWerteausgabe = 0; |
+ static char NeueKompassRichtungMerken = 0; |
+ Mittelwert(); |
+ |
+ GRN_ON; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gaswert ermitteln |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
+ if(GasMischanteil < 0) GasMischanteil = 0; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Emfang schlecht |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(SenderOkay < 100) |
+ { |
+ if(!PcZugriff) |
+ { |
+ if(BeepMuster == 0xffff) |
+ { |
+ beeptime = 15000; |
+ BeepMuster = 0x0c00; |
+ } |
+ } |
+ if(RcLostTimer) RcLostTimer--; |
+ else |
+ { |
+ MotorenEin = 0; |
+ Notlandung = 0; |
+ } |
+ ROT_ON; |
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken |
+ { |
+ GasMischanteil = EE_Parameter.NotGas; |
+ Notlandung = 1; |
+ 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) |
+ { |
+ Notlandung = 0; |
+ RcLostTimer = EE_Parameter.NotGasZeit * 50; |
+ if(GasMischanteil > 40) |
+ { |
+ if(modell_fliegt < 0xffff) modell_fliegt++; |
+ modell_fliegt_gps = modell_fliegt;// (030907Kr) |
+ } |
+ if((modell_fliegt < 200) || (GasMischanteil < 40)) |
+ { |
+ SummeNick = 0; |
+ SummeRoll = 0; |
+ Mess_Integral_Gier = 0; |
+ Mess_Integral_Gier2 = 0; |
+ } |
+ if((GasMischanteil > 200) && MotorenEin == 0) |
+ { |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// auf Nullwerte kalibrieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
+ { |
+ unsigned char setting; |
+ if(++delay_neutral > 200) // nicht sofort |
+ { |
+ GRN_OFF; |
+ MotorenEin = 0; |
+ delay_neutral = 0; |
+ modell_fliegt = 0; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
+ { |
+ 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; |
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
+ } |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
+ SetNeutral(); |
+ Piep(GetActiveParamSetNumber()); |
+ } |
+ } |
+ else delay_neutral = 0; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gas ist unten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(GasMischanteil < 35) |
+ { |
+ // Starten |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) |
+ { |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Einschalten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(++delay_einschalten > 200) |
+ { |
+ delay_einschalten = 200; |
+ modell_fliegt = 1; |
+ MotorenEin = 1; |
+ sollGier = 0; |
+ Mess_Integral_Gier = 0; |
+ Mess_Integral_Gier2 = 0; |
+ Mess_IntegralNick = 0; |
+ Mess_IntegralRoll = 0; |
+ Mess_IntegralNick2 = IntegralNick; |
+ Mess_IntegralRoll2 = IntegralRoll; |
+ SummeNick = 0; |
+ SummeRoll = 0; |
+ } |
+ } |
+ else delay_einschalten = 0; |
+ //Auf Neutralwerte setzen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Auschalten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) |
+ { |
+ if(++delay_ausschalten > 200) // nicht sofort |
+ { |
+ MotorenEin = 0; |
+ delay_ausschalten = 200; |
+ modell_fliegt = 0; |
+ } |
+ } |
+ else delay_ausschalten = 0; |
+ } |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// neue Werte von der Funke |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!NewPpmData-- || Notlandung) |
+ { |
+ ParameterZuordnung(); |
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P; |
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P; |
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0; |
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000; |
+ |
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
+ if(GyroFaktor < 0) GyroFaktor = 0; |
+ if(IntegralFaktor < 0) IntegralFaktor = 0; |
+ // greift in den Stick ein, um ungewolltes überschlagen zu verhindern |
+ if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
+ { |
+ if(IntegralNick > 60000) |
+ { |
+ StickNick -= 8 * EE_Parameter.Stick_P; |
+ if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
+ } |
+ else |
+ if(IntegralNick < -60000) |
+ { |
+ StickNick += 8 * EE_Parameter.Stick_P; |
+ if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
+ } |
+ if(IntegralRoll > 60000) |
+ { |
+ StickRoll -= 8 * EE_Parameter.Stick_P; |
+ if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
+ } |
+ else |
+ if(IntegralRoll < -60000) |
+ { |
+ StickRoll += 8 * EE_Parameter.Stick_P; |
+ if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
+ } |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// LED Stuff |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+LED1_OFF; |
+ |
+ if(blinkcount_LED1 >= Parameter_UserParam4 && Parameter_UserParam4 > 0) |
+ { |
+ LED1_FLASH; |
+ blinkcount_LED1 = 0; |
+ } |
+ |
+ blinkcount_LED1++; |
+ |
+ //if(PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] > 75) LED1_ON; else LED1_OFF; //Erweiterung von Smartie aus dem MK-Forum vom 14.06.07. Dadurch können die Transistorausgänge J16 und J17 geschaltet werden. // (160607Kr) |
+ //if(PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] > 75) LED2_ON; else LED2_OFF; //Erweiterung von Smartie aus dem MK-Forum vom 14.06.07. Dadurch können die Transistorausgänge J16 und J17 geschaltet werden. // (160607Kr) |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Looping? |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) || |
+ ((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
+ { |
+ Looping_Roll = 1; |
+ if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
+ } |
+ else Looping_Roll = 0; |
+ |
+ if(((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) || |
+ ((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN)) |
+ { |
+ Looping_Nick = 1; |
+ Looping_Roll = 0; |
+ if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
+ } |
+ else Looping_Nick = 0; |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Bei Empfangsausfall im Flug |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Notlandung) |
+ { |
+ StickGier = 0; |
+ StickNick = 0; |
+ StickRoll = 0; |
+ GyroFaktor = 0.1; |
+ IntegralFaktor = 0.005; |
+ Looping_Roll = 0; |
+ Looping_Nick = 0; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gyro-Drift kompensieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define DRIFT_FAKTOR 3 |
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR) |
+ { |
+ IntegralFehlerNick = IntegralNick2 - IntegralNick; |
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll; |
+ ZaehlMessungen = 0; |
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++; |
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--; |
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++; |
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--; |
+// if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--; // macht nur mit Referenz (Kompass Sinn) |
+// if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++; // macht nur mit Referenz (Kompass Sinn) |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_IntegralNick2 = IntegralNick; |
+ Mess_IntegralRoll2 = IntegralRoll; |
+ Mess_Integral_Gier2 = Integral_Gier; |
+ ANALOG_ON; // ADC einschalten |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Integrale auf ACC-Signal abgleichen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+ |
+ if(EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) |
+ { |
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16; |
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16; |
+ #define AUSGLEICH 500 |
+ 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; |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_IntegralNick -= tmp_long; |
+ Mess_IntegralRoll -= tmp_long2; |
+ } |
+ |
+ else |
+ { |
+ if(IntegralFaktor && !Looping_Nick && !Looping_Roll) |
+ { |
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
+ if(labs(Mittelwert_AccNick) < 200) tmp_long /= 8; |
+ else tmp_long /= 16; |
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
+ if(labs(Mittelwert_AccRoll) < 200) tmp_long2 /= 8; |
+ else tmp_long2 /= 16; |
+ |
+ #define AUSGLEICH 500 |
+ 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; |
+ } |
+ |
+ else |
+ { |
+ tmp_long = 0; |
+ tmp_long2 = 0; |
+ } |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_IntegralNick -= tmp_long; |
+ Mess_IntegralRoll -= tmp_long2; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(abs(StickGier) > 20) // war 35 |
+ { |
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1; |
+ } |
+ tmp_int = EE_Parameter.Gier_P * (StickGier * abs(StickGier)) / 512; // expo y = ax + bx² |
+ tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
+ sollGier = tmp_int; |
+ Mess_Integral_Gier -= tmp_int; |
+ if(Mess_Integral_Gier > 25000) Mess_Integral_Gier = 25000; // begrenzen |
+ if(Mess_Integral_Gier <-25000) Mess_Integral_Gier =-25000; |
+ |
+ ANALOG_ON; // ADC einschalten |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Kompass |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
+ { |
+ if(NeueKompassRichtungMerken) |
+ { |
+ KompassStartwert = KompassValue; |
+ NeueKompassRichtungMerken = 0; |
+ } |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_Integral_Gier -= (KompassRichtung * Parameter_KompassWirkung) / 32; // nach Kompass ausrichten |
+ ANALOG_ON; // ADC einschalten |
+ } |
+ |
+ |
+ |
+ |
+/* if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
+ { |
+ int w,v; |
+ static int SignalSchlecht = 0; |
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
+ v = abs(IntegralRoll /512); |
+ if(v > w) w = v; // grösste Neigung ermitteln |
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht) |
+ { |
+ KompassStartwert = KompassValue; |
+ NeueKompassRichtungMerken = 0; |
+ } |
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
+ if(w > 0) |
+ { |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
+ ANALOG_ON; // ADC einschalten |
+ if(SignalSchlecht) SignalSchlecht--; |
+ } |
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek |
+ } |
+*/ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// GPS |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+if(EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) |
+{ |
+ P_GPS_Verstaerkung = Parameter_UserParam1; |
+ D_GPS_Verstaerkung = Parameter_UserParam2; |
+ Limit_D_Anteil = Parameter_UserParam3; |
+ gps_main(); |
+} |
+else |
+{ |
+ GPS_Nick = 0; |
+ GPS_Roll = 0; |
+} |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debugwerte zuordnen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!TimerWerteausgabe--) |
+ { |
+ TimerWerteausgabe = 49; |
+ |
+ DebugOut.Analog[0] = actualPos.GPSFix; |
+ DebugOut.Analog[1] = GPS_Roll; |
+ DebugOut.Analog[2] = GPS_Nick; |
+ DebugOut.Analog[3] = GPS_Positionsabweichung_North; |
+ DebugOut.Analog[4] = GPS_Positionsabweichung_East; |
+ DebugOut.Analog[5] = P_Einfluss_East; |
+ DebugOut.Analog[6] = D_Einfluss_East; |
+ DebugOut.Analog[7] = KompassRichtung; |
+ DebugOut.Analog[8] = KompassValue; |
+ DebugOut.Analog[9] = MM3.x_axis; |
+ DebugOut.Analog[10] = MM3.y_axis; |
+ DebugOut.Analog[11] = MM3.z_axis; |
+ DebugOut.Analog[12] = Parameter_UserParam2; |
+ DebugOut.Analog[13] = Poti3; |
+ DebugOut.Analog[14] = KompassValue; |
+ DebugOut.Analog[15] = GPS_Home_North; |
+ DebugOut.Analog[16] = GPS_Home_East; |
+ DebugOut.Analog[17] = NORTH_MITTEL; |
+ DebugOut.Analog[18] = EAST_MITTEL; |
+ DebugOut.Analog[19] = actualPos.northing; |
+ DebugOut.Analog[20] = actualPos.easting; |
+ DebugOut.Analog[21] = actualPos.velNorth; |
+ DebugOut.Analog[22] = actualPos.velEast; |
+ DebugOut.Analog[23] = UBat; |
+ DebugOut.Analog[24] = (motor_rx[0]+motor_rx[1]+motor_rx[2]+motor_rx[3]); //Gesamtstrom |
+ DebugOut.Analog[25] = StickRoll; |
+ DebugOut.Analog[26] = HoehenWert; |
+ DebugOut.Analog[27] = IntegralNick / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[28] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[29] = Mittelwert_AccNick; |
+ DebugOut.Analog[30] = Mittelwert_AccRoll; |
+ DebugOut.Analog[31] = StickNick; |
+ } |
+/* |
+DebugOut.Analog[0] = MM3.NickGrad; |
+DebugOut.Analog[1] = MM3.RollGrad; |
+DebugOut.Analog[9] = MM3.x_axis; |
+DebugOut.Analog[10] = MM3.y_axis; |
+DebugOut.Analog[11] = MM3.z_axis; |
+*/ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor; |
+ else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
+ if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor; |
+ else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
+// MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor; |
+ |
+ MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2; |
+ |
+ // Maximalwerte abfangen |
+ #define MAX_SENSOR 2048 |
+ 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 |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+//OCR0B = 180 - (Poti1 + 120) / 4; |
+//DruckOffsetSetting = OCR0B; |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung |
+ { |
+ int tmp_int; |
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
+ { |
+ if(Parameter_MaxHoehe < 50) |
+ { |
+ SollHoehe = HoehenWert - 40; // Parameter_MaxHoehe ist der PPM-Wert des Schalters // (160607Kr) |
+ HoehenReglerAktiv = 0; |
+ } |
+ else |
+ HoehenReglerAktiv = 1; |
+ } |
+ else |
+ { |
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 40; // (160607Kr) |
+ HoehenReglerAktiv = 1; |
+ } |
+ |
+ if(Notlandung) SollHoehe = 0; |
+ h = HoehenWert; |
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln |
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil |
+ h = GasMischanteil - h; // vom Gas abziehen |
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil |
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32; |
+ if(tmp_int > 50) tmp_int = 50; |
+ else if(tmp_int < -50) tmp_int = -50; |
+ h -= tmp_int; |
+ hoehenregler = (hoehenregler*15 + h) / 16; |
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN |
+ { |
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas; |
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil; |
+ } |
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas |
+ GasMischanteil = hoehenregler; |
+ } |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Mischer und PI-Regler |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ // DebugOut.Analog[7] = GasMischanteil; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gier-Anteil |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MUL_G 1.0 |
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
+//GierMischanteil = 0; |
+ if(GierMischanteil > (MUL_G * GasMischanteil)) GierMischanteil = MUL_G * GasMischanteil; |
+ if(GierMischanteil < -(MUL_G * GasMischanteil)) GierMischanteil = -(MUL_G * GasMischanteil); |
+ if(GierMischanteil > 100) GierMischanteil = 100; |
+ if(GierMischanteil < -100) GierMischanteil = -100; |
+ |
+ if(GasMischanteil < 20) GierMischanteil = 0; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Nick-Achse |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen |
+ SummeNick += DiffNick; // I-Anteil |
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1; |
+ if(SummeNick > 16000) SummeNick = 16000; |
+ if(SummeNick < -16000) SummeNick = -16000; |
+ pd_ergebnis = DiffNick;// + Ki * SummeNick; // PI-Regler für Nick |
+ // Motor Vorn |
+#define MUL 2 |
+ if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
+ if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
+ |
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Vorne = motorwert; |
+ // Motor Heck |
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Hinten = motorwert; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Roll-Achse |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen |
+ SummeRoll += DiffRoll; // I-Anteil |
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1; |
+ if(SummeRoll > 16000) SummeRoll = 16000; |
+ if(SummeRoll < -16000) SummeRoll = -16000; |
+ pd_ergebnis = DiffRoll;// + Ki * SummeRoll; // PI-Regler für Roll |
+ if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
+ if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
+ // Motor Links |
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Links = motorwert; |
+ // Motor Rechts |
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Rechts = motorwert; |
+ // +++++++++++++++++++++++++++++++++++++++++++++++ |
+} |
+ |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/fc.h |
---|
0,0 → 1,128 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
extern volatile unsigned int I2CTimeout; |
extern unsigned char Sekunde,Minute; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long Mess_Integral_Hoch; |
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern volatile int KompassValue; |
extern volatile int KompassStartwert; |
extern volatile int KompassRichtung; |
extern int HoehenWert; |
extern int SollHoehe; |
extern volatile int MesswertNick,MesswertRoll,MesswertGier; |
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch; |
extern volatile float NeutralAccZ; |
extern unsigned int modell_fliegt_gps;//(030907Kr) |
extern unsigned char Limit_D_Anteil;//(210907Kr) |
void MotorRegler(void); |
void SendMotorData(void); |
void CalibrierMittelwert(void); |
void Mittelwert(void); |
void SetNeutral(void); |
//Nick666 Kompass |
void Piep(unsigned char Anzahl); |
void DefaultKonstanten1(void); |
void DefaultKonstanten2(void); |
unsigned char h,m,s; |
volatile unsigned char Timeout ; |
unsigned char CosinusNickWinkel, CosinusRollWinkel; |
volatile long IntegralNick,IntegralNick2; |
volatile long IntegralRoll,IntegralRoll2; |
volatile long Integral_Gier; |
volatile long Mess_IntegralNick,Mess_IntegralNick2; |
volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
volatile long Mess_Integral_Gier; |
volatile int DiffNick,DiffRoll; |
extern int Poti1, Poti2, Poti3, Poti4, Poti5, Poti6, Poti7, Poti8; //PPM24-Erweiterung (121007Kr) |
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
unsigned char MotorWert[5]; |
volatile unsigned char SenderOkay; |
int StickNick,StickRoll,StickGier; |
char MotorenEin; |
extern void DefaultKonstanten(void); |
#define STRUCT_PARAM_LAENGE 58 |
struct mk_param_struct |
{ |
unsigned char Kanalbelegung[8]; // 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 Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char Gier_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 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 UfoAusrichtung; // X oder + Formation |
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 |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
}; |
/* |
unsigned char ServoNickMax; // Wert : 0-250 |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
*/ |
extern struct mk_param_struct EE_Parameter; |
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; |
#endif //_FC_H |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/flight-ctrl_mega644_v0_64.aws |
---|
0,0 → 1,0 |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA644"/><Files><File00000 Name="E:\hubi\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\beta\v064JokoGPSNick666MM_1_1_compiled\main.c" Position="330 71 1176 569" LineCol="127 0" State="Maximized"/><File00001 Name="E:\hubi\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\beta\v064JokoGPSNick666MM_1_1_compiled\compass.c" Position="327 65 1173 563" LineCol="47 0" State="Maximized"/><File00002 Name="E:\hubi\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\beta\v064JokoGPSNick666MM_1_1_compiled\compass.h" Position="299 84 845 452" LineCol="37 0" State="Maximized"/><File00003 Name="E:\hubi\mickrokopter\a Versions\version system\flightcontrol\branches\MergedVersionsByOsiair\beta\v064JokoGPSNick666MM_1_1_compiled\fc.c" Position="336 71 1182 569" LineCol="864 0" State="Maximized"/></Files></AVRWorkspace> |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.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="printf_P.c"></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="fc.c"></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></Project> |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/gps.h |
---|
0,0 → 1,26 |
extern long P_Einfluss_North; |
extern long D_Einfluss_North; |
extern long P_Einfluss_East; |
extern long D_Einfluss_East; |
extern long GPS_Positionsabweichung_North; |
extern long GPS_Positionsabweichung_East; |
extern long GPS_Geschwindigkeit_North; |
extern long GPS_Geschwindigkeit_East; |
extern long GPS_Home_North; |
extern long GPS_Home_East; |
extern long Soll_Position_North; |
extern long Soll_Position_East; |
extern volatile long EAST_MITTEL; |
extern volatile long NORTH_MITTEL; |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern void GPS_Neutral(void); |
extern void GPS_BerechneZielrichtung(void); |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/main.c |
---|
0,0 → 1,257 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
//unsigned char EEPromArray[E2END+1] EEMEM; |
unsigned char EEPromArray[501] EEMEM; //Nick666 Kompass |
unsigned char PlatinenVersion = 10; |
// -- Parametersatz aus EEPROM lesen --- |
// number [0..5] |
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if (number > 5) number = 5; |
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
} |
// -- Parametersatz ins EEPROM schreiben --- |
// number [0..5] |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if(number > 5) number = 5; |
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken |
} |
unsigned char GetActiveParamSetNumber(void) |
{ |
unsigned char set; |
set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]); |
if(set > 5) |
{ |
set = 2; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], set); // diesen Parametersatz als aktuell merken |
} |
return(set); |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer; |
//unsigned int timer2 = 0; |
DDRB = 0x00; |
PORTB = 0x00; |
for(timer = 0; timer < 1000; timer++); // verzögern |
if(PINB & 0x01) PlatinenVersion = 11; else PlatinenVersion = 10; |
DDRC = 0x81; // SCL |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
//Nick666 |
PORTB |= (1<<PB0); // LED_Rot |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
//Nick666 |
DDRD |= (1<<PD7); // J7 |
/* |
PORTB = 0x01; // LED_Rot |
DDRD |=0x80; // J7 |
*/ |
PORTD = 0xF7; // LED |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
//Nick666 |
beeptime = 1000; |
//beeptime = 2000; |
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0; |
ROT_OFF; |
Timer_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
i2c_init(); |
MM3_init(); //Nick666 |
sei(); |
VersionInfo.Hauptversion = VERSION_HAUPTVERSION; |
VersionInfo.Nebenversion = VERSION_NEBENVERSION; |
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL; |
printf("\n\rFlightControl\n\rHardware:%d.%d\n\rSoftware:V%d.%d ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION); |
printf("\n\r=============================="); |
GRN_ON; |
#define EE_DATENREVISION 62 // wird angepasst, wenn sich die EEPROM-Daten geändert haben |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION) |
{ |
printf("\n\rInit. EEPROM: Generiere Default-Parameter..."); |
DefaultKonstanten1(); |
for (unsigned char i=0;i<6;i++) |
{ |
if(i==2) DefaultKonstanten2(); |
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 2); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION); |
} |
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber()); |
//kurze Wartezeit (sonst reagiert die "Kompass kalibrieren?"-Abfrage nicht |
timer = SetDelay(500); |
while(!CheckDelay(timer)); |
//Kompass kalibrieren? |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 100 && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) |
{ |
printf("\n\rKalibriere Kompass"); |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) MM3_calib(); |
} |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rAbgleich Luftdrucksensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
SetNeutral(); |
ROT_OFF; |
beeptime = 2000; |
DebugIn.Analog[1] = 1000; |
DebugIn.Digital[0] = 0x55; |
printf("\n\rSteuerung: "); |
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold"); |
else printf("Neutral"); |
printf("\n\n\r"); |
LcdClear(); |
I2CTimeout = 5000; |
while (1) |
{ |
if (UpdateMotor) // ReglerIntervall |
{ |
UpdateMotor=0; |
MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(PcZugriff) PcZugriff--; |
if(SenderOkay) SenderOkay--; |
if(!I2CTimeout) |
{ |
I2CTimeout = 5; |
i2c_reset(); |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 10000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
I2CTimeout--; |
ROT_OFF; |
} |
} |
if(SIO_DEBUG) |
{ |
DatenUebertragung(); |
BearbeiteRxDaten(); |
} |
else BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
if(UBat < EE_Parameter.UnterspannungsWarnung) |
{ |
if(BeepMuster == 0xffff) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
timer = SetDelay(100); |
} |
} |
return (1); |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/main.h |
---|
0,0 → 1,127 |
#ifndef _MAIN_H |
#define _MAIN_H |
//Hier die Quarz Frequenz einstellen |
#if defined (__AVR_ATmega32__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
#endif |
#if defined (__AVR_ATmega644__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
// neue Hardware |
#define ROT_OFF PORTB &=~(1<<PB0) |
#define ROT_ON PORTB |= (1<<PB0) |
#define ROT_FLASH PORTB ^= (1<<PB0) |
#define GRN_OFF PORTB &=~(1<<PB1) |
#define GRN_ON PORTB |= (1<<PB1) |
#define GRN_FLASH PORTD ^= (1<<PB1) |
/* |
#define ROT_OFF {if(PlatinenVersion == 10) PORTB &=~0x01; else PORTB |= 0x01;} |
#define ROT_ON {if(PlatinenVersion == 10) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
#define GRN_OFF PORTB &=~0x02 |
#define GRN_ON PORTB |= 0x02 |
#define GRN_FLASH PORTB ^= 0x02 |
*/ |
#define LED1_OFF PORTC &=~0x04 //Erweiterung von Smartie aus dem MK-Forum vom 14.06.07. Dadurch können die Transistorausgänge J16 und J17 geschaltet werden. // (160607Kr) |
#define LED1_ON PORTC |= 0x04 //Erweiterung von Smartie aus dem MK-Forum vom 14.06.07. Dadurch können die Transistorausgänge J16 und J17 geschaltet werden. // (160607Kr) |
#define LED1_FLASH PORTC ^= 0x04 //Erweiterung by 4ndreas aus mikrosvn branches // (280807Kr) |
#define LED2_OFF PORTC &=~0x08 //Erweiterung von Smartie aus dem MK-Forum vom 14.06.07. Dadurch können die Transistorausgänge J16 und J17 geschaltet werden. // (160607Kr) |
#define LED2_ON PORTC |= 0x08 //Erweiterung von Smartie aus dem MK-Forum vom 14.06.07. Dadurch können die Transistorausgänge J16 und J17 geschaltet werden. // (160607Kr) |
#define LED2_FLASH PORTC ^= 0x08 //Erweiterung by 4ndreas aus mikrosvn branches // (280807Kr) |
//#ifndef F_CPU |
//#error ################## F_CPU nicht definiert oder ungültig ############# |
//#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//#define ANZ_MITTELWERT 4 |
#define EEPROM_ADR_VALID 1 |
#define EEPROM_ADR_ACTIVE_SET 2 |
#define EEPROM_ADR_LAST_OFFSET 3 |
#define EEPROM_ADR_PARAM_BEGIN 100 |
#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_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
//#define SYSCLK |
//extern unsigned long SYSCLK; |
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll; |
extern volatile unsigned char SenderOkay; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length); |
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length); |
extern unsigned char GetActiveParamSetNumber(void); |
extern unsigned char EEPromArray[]; |
long durchschnitt_northing; |
long durchschnitt_easting; |
volatile int P_GPS_Verstaerkung; //P-Anteil (80-120) |
volatile int D_GPS_Verstaerkung; //D-Anteil (90) |
#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 "_settings.h" |
#include "printf_P.h" |
#include "compass.h" //Nick666 |
#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 "math.h" //Nick666 |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#define DEBUG_DISPLAY_INTERVALL 123 // in ms |
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU )) |
#endif //_MAIN_H |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/makefile |
---|
0,0 → 1,392 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega644 |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
HAUPT_VERSION = 0 |
NEBEN_VERSION = 64 |
VERSION_KOMPATIBEL = 5 # PC-Kompatibilität |
#------------------------------------------------------------------- |
ifeq ($(MCU), atmega32) |
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m |
HEX_NAME = MEGA32 |
endif |
ifeq ($(MCU), atmega644) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
# -u bei neuen Controllern wieder einspielen |
HEX_NAME = MEGA644 |
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). |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION) |
# 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 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c compass.c math.c |
SRC += twimaster.c rc.c fc.c GPS.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 = |
# 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 \ |
-mtiny-stack -mcall-prologues -Wno-pointer-sign \ |
-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 |
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) |
# 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 += -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 = stk200 |
AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = ponyser |
#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_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_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) -A $(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 $(TARGET).eep \ |
$(TARGET).lss $(TARGET).sym 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; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); 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) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
# 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/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/math.c |
---|
0,0 → 1,118 |
/* |
Copyright 2007, Niklas Nold |
This program (files math.c and math.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
#include "main.h" |
const uint8_t pgm_atan[270] PROGMEM = {0,1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,37,38,39,39,40,41,41,42,43,43,44,44,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,52,53,53,54,54,54,55,55,56,56,56,57,57,57,58,58,58,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,65,66,66,66,66,66,67,67,67,67,67,67,68,68,68,68,68,68,69,69,69,69,69,69,69,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79}; |
// Arkustangens2 im Gradmaß |
signed int atan2_i(signed int x, signed int y) |
{ |
int i,angle; |
int8_t m; |
if (!x && !y) return 0; //atan2 = 0 für x und y = 0 |
if (y < 0) m=-1; |
else m=1; |
if (x==0) return (90*m); // atan2 = 90° für x = 0 |
i = abs(((float)y / x) * 50); // Berechne i für die Lookup table (Schrittweite atan(x) ist 0.02 -> *50) |
if (i<270) angle = pgm_read_byte(&pgm_atan[i]); // Lookup für 1° bis 79° |
else if (i>5750) angle = 90; // Grenzwert ist 90° |
else if (i>=1910) angle = 89; // 89° bis 80° über Wertebereiche |
else if (i>=1150) angle = 88; |
else if (i>=820) angle = 87; |
else if (i>=640) angle = 86; |
else if (i>=520) angle = 85; |
else if (i>=440) angle = 84; |
else if (i>=380) angle = 83; |
else if (i>=335) angle = 82; |
else if (i>=299) angle = 81; |
else angle = 80; // (i>=270) |
if (x > 0) return (angle*m); // Quadrant I und IV |
else if ((x < 0) && (y >= 0)) return ((angle*-1) + 180); // Quadrant II |
else return (angle - 180); // x < 0 && y < 0 Quadrant III |
} |
const float pgm_sinus_f [91] PROGMEM = {0.000,0.017,0.035,0.052,0.070,0.087,0.105,0.122,0.139,0.156,0.174,0.191,0.208,0.225,0.242,0.259,0.276,0.292,0.309,0.326,0.342,0.358,0.375,0.391,0.407,0.423,0.438,0.454,0.469,0.485,0.500,0.515,0.530,0.545,0.559,0.574,0.588,0.602,0.616,0.629,0.643,0.656,0.669,0.682,0.695,0.707,0.719,0.731,0.743,0.755,0.766,0.777,0.788,0.799,0.809,0.819,0.829,0.839,0.848,0.857,0.866,0.875,0.883,0.891,0.899,0.906,0.914,0.921,0.927,0.934,0.940,0.946,0.951,0.956,0.961,0.966,0.970,0.974,0.978,0.982,0.985,0.988,0.990,0.993,0.995,0.996,0.998,0.999,0.999,1.000,1.000}; |
inline float pgm_read_float(const float *addr) |
{ |
union |
{ |
uint16_t i[2]; // 2 16-bit-Worte |
float f; |
} u; |
u.i[0]=pgm_read_word((PGM_P)addr); |
u.i[1]=pgm_read_word((PGM_P)addr+2); |
return u.f; |
} |
// Kosinusfunktion im Gradmaß |
float cos_f(signed int winkel) |
{ |
return (sin_f(90-winkel)); |
} |
// Sinusfunktion im Gradmaß |
float sin_f(signed int winkel) |
{ |
short int m,n; |
float sinus; |
//winkel = winkel % 360; |
if (winkel < 0) |
{ |
m = -1; |
winkel = abs(winkel); |
} |
else m = +1; |
// Quadranten auswerten |
if ((winkel > 90 ) && (winkel <= 180)) {winkel = 180 - winkel; n = 1;} |
else if ((winkel > 180 ) && (winkel <= 270)) {winkel = winkel - 180; n = -1;} |
else if ((winkel > 270) && (winkel <= 360)) {winkel = 360 - winkel; n = -1;} |
else n = 1; //0 - 90 Grad |
sinus = pgm_read_float(&pgm_sinus_f[winkel]); |
return (sinus*m*n); |
} |
const uint8_t pgm_asin[201] PROGMEM = {0,0,1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,12,12,12,12,13,13,13,14,14,14,14,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,20,20,20,20,21,21,21,22,22,22,23,23,23,24,24,24,25,25,25,25,26,26,26,27,27,27,28,28,28,29,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,35,35,35,36,36,37,37,37,38,38,38,39,39,39,40,40,41,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,49,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,62,62,63,64,64,65,66,66,67,68,68,69,70,71,72,73,74,75,76,77,79,80,82,84,90}; |
// Akurssinusfunktion im Gradmaß |
int8_t asin_i(signed int i) |
{ |
signed char m; |
if (i < 0) {m=-1;i=abs(i);} |
else m=1; |
return (pgm_read_byte(&pgm_asin[i]) * m); |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/math.h |
---|
0,0 → 1,11 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Peter Muehlenbrock |
// Definitionen fuer Modul math |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
extern signed int atan2_i(signed int x, signed int y); |
extern float cos_f(signed int winkel); |
extern float sin_f(signed int winkel); |
extern int8_t asin_i(signed int i); |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/menu.c |
---|
0,0 → 1,124 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned int TestInt = 0; |
#define ARRAYGROESSE 10 |
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10}; |
char DisplayBuff[80] = "Hallo Welt"; |
unsigned char DispPtr = 0; |
unsigned char RemoteTasten = 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(void) |
{ |
static unsigned char MaxMenue = 11,MenuePunkt=0; |
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); } |
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); } |
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0; |
LCD_printfxy(17,0,"[%i]",MenuePunkt); |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"++ MikroKopter ++"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d",PlatinenVersion/10,PlatinenVersion%10,VERSION_HAUPTVERSION, VERSION_NEBENVERSION); |
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber()); |
LCD_printfxy(0,3,"(c) Holger Buss"); |
// if(RemoteTasten & KEY3) TestInt--; |
// if(RemoteTasten & KEY4) TestInt++; |
break; |
case 1: |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert); |
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe); |
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck); |
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting); |
} |
else |
{ |
LCD_printfxy(0,1,"Keine "); |
LCD_printfxy(0,2,"Höhenregelung"); |
} |
break; |
case 2: |
LCD_printfxy(0,0,"akt. Lage"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Kompass: %5i",KompassValue); |
break; |
case 3: |
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]); |
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]); |
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]); |
LCD_printfxy(0,3,"K7:%4i K8:%4i ",PPM_in[7],PPM_in[8]); |
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]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll); |
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier); |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,1,"Spannung: %5i",UBat); |
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay); |
break; |
case 8: |
LCD_printfxy(0,0,"Kompass "); |
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung); |
LCD_printfxy(0,2,"Messwert: %5i",KompassValue); |
LCD_printfxy(0,3,"Start: %5i",KompassStartwert); |
break; |
case 9: |
LCD_printfxy(0,0,"Po1: %3i Po5: %3i" ,Poti1,Poti5); //PPM24-Erweiterung (121007Kr) |
LCD_printfxy(0,1,"Po2: %3i Po6: %3i" ,Poti2,Poti6); //PPM24-Erweiterung (121007Kr) |
LCD_printfxy(0,2,"Po3: %3i Po7: %3i" ,Poti3,Poti7); //PPM24-Erweiterung (121007Kr) |
LCD_printfxy(0,3,"Po4: %3i Po8: %3i" ,Poti4,Poti8); //PPM24-Erweiterung (121007Kr) |
break; |
case 10: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Stellung: %3i",ServoValue); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
case 11: |
LCD_printfxy(0,0,"MM3 kalib."); |
LCD_printfxy(0,1,"X_Offset: %3i",X_off); |
LCD_printfxy(0,2,"Y_Offset: %3i",Y_off); |
LCD_printfxy(0,3,"Z_Offset: %3i",Z_off); |
break; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
} |
RemoteTasten = 0; |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/menu.h |
---|
0,0 → 1,7 |
void LcdClear(void); //Nick666 |
extern void Menu(void); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
unsigned char RemoteTasten; |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/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/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/printf_P.c |
---|
0,0 → 1,480 |
// 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. |
*/ |
/****************************************************************************** |
This file is a patched version of printf called _printf_P |
It is made to work with avr-gcc for Atmel AVR MCUs. |
There are some differences from standard printf: |
1. There is no floating point support (with fp the code is about 8K!) |
2. Return type is void |
3. Format string must be in program memory (by using macro printf this is |
done automaticaly) |
4. %n is not implemented (just remove the comment around it if you need it) |
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the |
folowing specifiers are disabled : |
space # * . - + p s o O |
6. A function void uart_sendchar(char c) is used for output. The UART must |
be initialized before using printf. |
Alexander Popov |
sasho@vip.orbitel.bg |
******************************************************************************/ |
/* |
* Actual printf innards. |
* |
* This code is large and complicated... |
*/ |
#include <string.h> |
#ifdef __STDC__ |
#include <stdarg.h> |
#else |
#include <varargs.h> |
#endif |
#include "main.h" |
//#define LIGHTPRINTF |
char PrintZiel; |
char Putchar(char zeichen) |
{ |
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);} |
else return(uart_putchar(zeichen)); |
} |
void PRINT(const char * ptr, unsigned int len) |
{ |
for(;len;len--) Putchar(*ptr++); |
} |
void PRINTP(const char * ptr, unsigned int len) |
{ |
for(;len;len--) Putchar(pgm_read_byte(ptr++)); |
} |
void PAD_SP(signed char howmany) |
{ |
for(;howmany>0;howmany--) Putchar(' '); |
} |
void PAD_0(signed char howmany) |
{ |
for(;howmany>0;howmany--) Putchar('0'); |
} |
#define BUF 40 |
/* |
* Macros for converting digits to letters and vice versa |
*/ |
#define to_digit(c) ((c) - '0') |
#define is_digit(c) ((c)<='9' && (c)>='0') |
#define to_char(n) ((n) + '0') |
/* |
* Flags used during conversion. |
*/ |
#define LONGINT 0x01 /* long integer */ |
#define LONGDBL 0x02 /* long double; unimplemented */ |
#define SHORTINT 0x04 /* short integer */ |
#define ALT 0x08 /* alternate form */ |
#define LADJUST 0x10 /* left adjustment */ |
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */ |
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */ |
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */ |
{ |
va_list ap; |
register const char *fmt; /* format string */ |
register char ch; /* character from fmt */ |
register int n; /* handy integer (short term usage) */ |
register char *cp; /* handy char pointer (short term usage) */ |
const char *fmark; /* for remembering a place in fmt */ |
register unsigned char flags; /* flags as above */ |
signed char width; /* width from format (%8d), or 0 */ |
signed char prec; /* precision from format (%.3d), or -1 */ |
char sign; /* sign prefix (' ', '+', '-', or \0) */ |
unsigned long _ulong=0; /* integer arguments %[diouxX] */ |
#define OCT 8 |
#define DEC 10 |
#define HEX 16 |
unsigned char base; /* base for [diouxX] conversion */ |
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */ |
signed char dpad; /* extra 0 padding needed for integers */ |
signed char fieldsz; /* field size expanded by sign, dpad etc */ |
/* The initialization of 'size' is to suppress a warning that |
'size' might be used unitialized. It seems gcc can't |
quite grok this spaghetti code ... */ |
signed char size = 0; /* size of converted field or string */ |
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ |
char ox[2]; /* space for 0x hex-prefix */ |
PrintZiel = ziel; // bestimmt, LCD oder UART |
va_start(ap, fmt0); |
fmt = fmt0; |
/* |
* Scan the format for conversions (`%' character). |
*/ |
for (;;) { |
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++) |
/* void */; |
if ((n = fmt - fmark) != 0) { |
PRINTP(fmark, n); |
} |
if (ch == '\0') |
goto done; |
fmt++; /* skip over '%' */ |
flags = 0; |
dprec = 0; |
width = 0; |
prec = -1; |
sign = '\0'; |
rflag: ch = PRG_RDB(fmt++); |
reswitch: |
#ifdef LIGHTPRINTF |
if (ch=='o' || ch=='u' || (ch|0x20)=='x') { |
#else |
if (ch=='u' || (ch|0x20)=='x') { |
#endif |
if (flags&LONGINT) { |
_ulong=va_arg(ap, unsigned long); |
} else { |
register unsigned int _d; |
_d=va_arg(ap, unsigned int); |
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d; |
} |
} |
#ifndef LIGHTPRINTF |
if(ch==' ') { |
/* |
* ``If the space and + flags both appear, the space |
* flag will be ignored.'' |
* -- ANSI X3J11 |
*/ |
if (!sign) |
sign = ' '; |
goto rflag; |
} else if (ch=='#') { |
flags |= ALT; |
goto rflag; |
} else if (ch=='*'||ch=='-') { |
if (ch=='*') { |
/* |
* ``A negative field width argument is taken as a |
* - flag followed by a positive field width.'' |
* -- ANSI X3J11 |
* They don't exclude field widths read from args. |
*/ |
if ((width = va_arg(ap, int)) >= 0) |
goto rflag; |
width = -width; |
} |
flags |= LADJUST; |
flags &= ~ZEROPAD; /* '-' disables '0' */ |
goto rflag; |
} else if (ch=='+') { |
sign = '+'; |
goto rflag; |
} else if (ch=='.') { |
if ((ch = PRG_RDB(fmt++)) == '*') { |
n = va_arg(ap, int); |
prec = n < 0 ? -1 : n; |
goto rflag; |
} |
n = 0; |
while (is_digit(ch)) { |
n = n*10 + to_digit(ch); |
ch = PRG_RDB(fmt++); |
} |
prec = n < 0 ? -1 : n; |
goto reswitch; |
} else |
#endif /* LIGHTPRINTF */ |
if (ch=='0') { |
/* |
* ``Note that 0 is taken as a flag, not as the |
* beginning of a field width.'' |
* -- ANSI X3J11 |
*/ |
if (!(flags & LADJUST)) |
flags |= ZEROPAD; /* '-' disables '0' */ |
goto rflag; |
} else if (ch>='1' && ch<='9') { |
n = 0; |
do { |
n = 10 * n + to_digit(ch); |
ch = PRG_RDB(fmt++); |
} while (is_digit(ch)); |
width = n; |
goto reswitch; |
} else if (ch=='h') { |
flags |= SHORTINT; |
goto rflag; |
} else if (ch=='l') { |
flags |= LONGINT; |
goto rflag; |
} else if (ch=='c') { |
*(cp = buf) = va_arg(ap, int); |
size = 1; |
sign = '\0'; |
} else if (ch=='D'||ch=='d'||ch=='i') { |
if(ch=='D') |
flags |= LONGINT; |
if (flags&LONGINT) { |
_ulong=va_arg(ap, long); |
} else { |
register int _d; |
_d=va_arg(ap, int); |
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d; |
} |
if ((long)_ulong < 0) { |
_ulong = -_ulong; |
sign = '-'; |
} |
base = DEC; |
goto number; |
} else |
/* |
if (ch=='n') { |
if (flags & LONGINT) |
*va_arg(ap, long *) = ret; |
else if (flags & SHORTINT) |
*va_arg(ap, short *) = ret; |
else |
*va_arg(ap, int *) = ret; |
continue; // no output |
} else |
*/ |
#ifndef LIGHTPRINTF |
if (ch=='O'||ch=='o') { |
if (ch=='O') |
flags |= LONGINT; |
base = OCT; |
goto nosign; |
} else if (ch=='p') { |
/* |
* ``The argument shall be a pointer to void. The |
* value of the pointer is converted to a sequence |
* of printable characters, in an implementation- |
* defined manner.'' |
* -- ANSI X3J11 |
*/ |
/* NOSTRICT */ |
_ulong = (unsigned int)va_arg(ap, void *); |
base = HEX; |
flags |= HEXPREFIX; |
ch = 'x'; |
goto nosign; |
} else if (ch=='s') { // print a string from RAM |
if ((cp = va_arg(ap, char *)) == NULL) { |
cp=buf; |
cp[0] = '('; |
cp[1] = 'n'; |
cp[2] = 'u'; |
cp[4] = cp[3] = 'l'; |
cp[5] = ')'; |
cp[6] = '\0'; |
} |
if (prec >= 0) { |
/* |
* can't use strlen; can only look for the |
* NUL in the first `prec' characters, and |
* strlen() will go further. |
*/ |
char *p = (char*)memchr(cp, 0, prec); |
if (p != NULL) { |
size = p - cp; |
if (size > prec) |
size = prec; |
} else |
size = prec; |
} else |
size = strlen(cp); |
sign = '\0'; |
} else |
#endif /* LIGHTPRINTF */ |
if(ch=='U'||ch=='u') { |
if (ch=='U') |
flags |= LONGINT; |
base = DEC; |
goto nosign; |
} else if (ch=='X'||ch=='x') { |
base = HEX; |
/* leading 0x/X only if non-zero */ |
if (flags & ALT && _ulong != 0) |
flags |= HEXPREFIX; |
/* unsigned conversions */ |
nosign: sign = '\0'; |
/* |
* ``... diouXx conversions ... if a precision is |
* specified, the 0 flag will be ignored.'' |
* -- ANSI X3J11 |
*/ |
number: if ((dprec = prec) >= 0) |
flags &= ~ZEROPAD; |
/* |
* ``The result of converting a zero value with an |
* explicit precision of zero is no characters.'' |
* -- ANSI X3J11 |
*/ |
cp = buf + BUF; |
if (_ulong != 0 || prec != 0) { |
register unsigned char _d,notlastdigit; |
do { |
notlastdigit=(_ulong>=base); |
_d = _ulong % base; |
if (_d<10) { |
_d+='0'; |
} else { |
_d+='a'-10; |
if (ch=='X') _d&=~0x20; |
} |
*--cp=_d; |
_ulong /= base; |
} while (notlastdigit); |
#ifndef LIGHTPRINTF |
// handle octal leading 0 |
if (base==OCT && flags & ALT && *cp != '0') |
*--cp = '0'; |
#endif |
} |
size = buf + BUF - cp; |
} else { //default |
/* "%?" prints ?, unless ? is NUL */ |
if (ch == '\0') |
goto done; |
/* pretend it was %c with argument ch */ |
cp = buf; |
*cp = ch; |
size = 1; |
sign = '\0'; |
} |
/* |
* All reasonable formats wind up here. At this point, |
* `cp' points to a string which (if not flags&LADJUST) |
* should be padded out to `width' places. If |
* flags&ZEROPAD, it should first be prefixed by any |
* sign or other prefix; otherwise, it should be blank |
* padded before the prefix is emitted. After any |
* left-hand padding and prefixing, emit zeroes |
* required by a decimal [diouxX] precision, then print |
* the string proper, then emit zeroes required by any |
* leftover floating precision; finally, if LADJUST, |
* pad with blanks. |
*/ |
/* |
* compute actual size, so we know how much to pad. |
*/ |
fieldsz = size; |
dpad = dprec - size; |
if (dpad < 0) |
dpad = 0; |
if (sign) |
fieldsz++; |
else if (flags & HEXPREFIX) |
fieldsz += 2; |
fieldsz += dpad; |
/* right-adjusting blank padding */ |
if ((flags & (LADJUST|ZEROPAD)) == 0) |
PAD_SP(width - fieldsz); |
/* prefix */ |
if (sign) { |
PRINT(&sign, 1); |
} else if (flags & HEXPREFIX) { |
ox[0] = '0'; |
ox[1] = ch; |
PRINT(ox, 2); |
} |
/* right-adjusting zero padding */ |
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) |
PAD_0(width - fieldsz); |
/* leading zeroes from decimal precision */ |
PAD_0(dpad); |
/* the string or number proper */ |
PRINT(cp, size); |
/* left-adjusting padding (always blank) */ |
if (flags & LADJUST) |
PAD_SP(width - fieldsz); |
} |
done: |
va_end(ap); |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/printf_P.h |
---|
0,0 → 1,19 |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
#define OUT_V24 0 |
#define OUT_LCD 1 |
extern void _printf_P (char, char const *fmt0, ...); |
extern char PrintZiel; |
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args) |
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args) |
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#endif |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/rc.c |
---|
0,0 → 1,85 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
volatile int PPM_in[15]; //PPM24-Erweiterung (121007Kr) |
volatile int PPM_diff[15]; // das diffenzierte Stick-Signal //PPM24-Erweiterung (121007Kr) |
volatile unsigned char NewPpmData = 1; |
//############################################################################ |
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input |
//Capture Funktion benutzt: |
void rc_sum_init (void) |
//############################################################################ |
{ |
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64 |
// PWM |
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10); |
//TCCR1B |= (1 << WGM12); |
//OCR1B = 55; |
TIMSK1 |= _BV(ICIE1); |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
//############################################################################ |
//Diese Routine startet und inizialisiert den Timer für RC |
SIGNAL(SIG_INPUT_CAPTURE1) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? |
if ((signal > 1500) && (signal < 8000)) |
{ |
index = 1; |
NewPpmData = 0; // Null bedeutet: Neue Daten |
// OCR2A = Poti2/2 + 80; |
} |
else |
{ |
if(index < 14) //PPM24-Erweiterung (121007Kr) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= 466; |
// 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++; |
PPM_diff[index] = tmp - PPM_in[index]; |
PPM_in[index] = tmp; |
} |
index++; |
if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen |
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen |
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen |
} |
} |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/rc.h |
---|
0,0 → 1,29 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega32__) |
#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644__) |
//#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
//#define TIMER_TEILER CK256 // bei 20MHz |
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz |
#endif |
#define GAS PPM_in[2] |
extern void rc_sum_init (void); |
extern volatile int PPM_in[15]; //PPM24-Erweiterung (121007Kr) |
extern volatile int PPM_diff[15]; // das diffenzierte Stick-Signal //PPM24-Erweiterung (121007Kr) |
extern volatile unsigned char NewPpmData; |
#endif //_RC_H |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/timer0.c |
---|
0,0 → 1,187 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 800; |
volatile unsigned int beeptime = 0; |
unsigned int BeepMuster = 0xffff; |
int ServoValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
SIGNAL (SIG_OVERFLOW0) // 8kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
// TCNT0 -= 250;//TIMER_RELOAD_VALUE; |
if(!cnt--) |
{ |
cnt = 9; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
CountMilliseconds++; |
} |
if(beeptime > 1) |
{ |
beeptime--; |
PORTD |= (1<<PD2); |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
PORTD &= ~(1<<PD2); |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
MM3_timer0(); // Kompass auslesen |
if (!cntKompass--) // Aufruf mit 10 Hz |
{ |
// KompassValue = MM3_heading(); |
// OsiAir hier machen wir den den KompassValue zu 0-359 damit das GPS damit weiterarbeiten kann |
if (MM3_heading() > 0) { KompassValue = 360-MM3_heading();} |
if (MM3_heading() < 0 ) { KompassValue = MM3_heading()*-1;} |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 800; |
} |
} |
} |
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(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV || EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) //Abfrage um GPS_AKTIV erweitert, damit auch bei nur eingeschaltetem GPS OHNE Kompass der benötigte Kompassvalue berechnet wird (200907Kr) |
{ |
if(PINC & 0x10) |
{ |
cntKompass++; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 4000)) |
{ |
KompassValue = cntKompass; |
} |
// if(cntKompass < 10) cntKompass = 10; |
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L; |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 0; |
} |
} |
} |
*/ |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
//TCNT0 = -TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3; |
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22); |
// TIMSK2 |= _BV(TOIE2); |
TIMSK2 |= _BV(OCIE2A); |
TIMSK0 |= _BV(TOIE0); |
OCR2A = 10; |
TCNT2 = 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)); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Servo ansteuern |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_OUTPUT_COMPARE2A) |
{ |
static unsigned char timer = 10; |
if(!timer--) |
{ |
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3; |
ServoValue = Parameter_ServoNickControl; |
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin; |
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax; |
OCR2A = ServoValue;// + 75; |
timer = EE_Parameter.ServoNickRefresh; |
} |
else |
{ |
TCCR2A =3; |
PORTD&=~0x80; |
} |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/timer0.c.bak |
---|
0,0 → 1,183 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 800; |
volatile unsigned int beeptime = 0; |
unsigned int BeepMuster = 0xffff; |
int ServoValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
SIGNAL (SIG_OVERFLOW0) // 8kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
// TCNT0 -= 250;//TIMER_RELOAD_VALUE; |
if(!cnt--) |
{ |
cnt = 9; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
CountMilliseconds++; |
} |
if(beeptime > 1) |
{ |
beeptime--; |
PORTD |= (1<<PD2); |
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); |
} |
PORTD &= ~(1<<PD2); |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
MM3_timer0(); // Kompass auslesen |
if (!cntKompass--) // Aufruf mit 10 Hz |
{ |
// KompassValue = MM3_heading(); |
// OsiAir hier machen wir den den KompassValue zu 0-359 damit das GPS damit weiterarbeiten kann |
if (MM3_heading() > 0) { KompassValue = 360-MM3_heading();} |
if (MM3_heading() < 0 ) { KompassValue = MM3_heading()*-1;} |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 800; |
} |
} |
} |
/* |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV || EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) //Abfrage um GPS_AKTIV erweitert, damit auch bei nur eingeschaltetem GPS OHNE Kompass der benötigte Kompassvalue berechnet wird (200907Kr) |
{ |
if(PINC & 0x10) |
{ |
cntKompass++; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 4000)) |
{ |
KompassValue = cntKompass; |
} |
// if(cntKompass < 10) cntKompass = 10; |
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L; |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 0; |
} |
} |
} |
*/ |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
//TCNT0 = -TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3; |
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22); |
// TIMSK2 |= _BV(TOIE2); |
TIMSK2 |= _BV(OCIE2A); |
TIMSK0 |= _BV(TOIE0); |
OCR2A = 10; |
TCNT2 = 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)); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Servo ansteuern |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_OUTPUT_COMPARE2A) |
{ |
static unsigned char timer = 10; |
if(!timer--) |
{ |
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3; |
ServoValue = Parameter_ServoNickControl; |
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin; |
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax; |
OCR2A = ServoValue;// + 75; |
timer = EE_Parameter.ServoNickRefresh; |
} |
else |
{ |
TCCR2A =3; |
PORTD&=~0x80; |
} |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/timer0.h |
---|
0,0 → 1,15 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
void Timer_Init(void); |
void Delay_ms(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern int ServoValue; |
extern unsigned int BeepMuster; |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/twimaster.c |
---|
0,0 → 1,152 |
/*############################################################################ |
############################################################################*/ |
#include "main.h" |
unsigned char twi_state = 0; |
unsigned char motor = 0; |
unsigned char motorread = 0; |
unsigned char motor_rx[8]; |
//############################################################################ |
//Initzialisieren der I2C (TWI) Schnittstelle |
void i2c_init(void) |
//############################################################################ |
{ |
TWSR = 0; |
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2; |
} |
//############################################################################ |
//Start I2C |
char i2c_start(void) |
//############################################################################ |
{ |
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
void i2c_stop(void) |
//############################################################################ |
{ |
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT); |
} |
void i2c_reset(void) |
//############################################################################ |
{ |
i2c_stop(); |
twi_state = 0; |
motor = TWDR; |
motor = 0; |
TWCR = 0x80; |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
i2c_init(); |
i2c_start(); |
i2c_write_byte(0); |
} |
//############################################################################ |
//Start I2C |
char i2c_write_byte(char byte) |
//############################################################################ |
{ |
TWSR = 0x00; |
TWDR = byte; |
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
SIGNAL (TWI_vect) |
//############################################################################ |
{ |
switch (twi_state++) |
{ |
case 0: |
i2c_write_byte(0x52+(motor*2)); |
break; |
case 1: |
switch(motor++) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 2: |
i2c_stop(); |
if (motor<4) twi_state = 0; |
else motor = 0; |
i2c_start(); |
break; |
//Liest Daten von Motor |
case 3: |
i2c_write_byte(0x53+(motorread*2)); |
break; |
case 4: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 5: //1 Byte vom Motor lesen |
motor_rx[motorread] = TWDR; |
case 6: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 7: //2 Byte vom Motor lesen |
motor_rx[motorread+4] = TWDR; |
motorread++; |
if (motorread>3) motorread=0; |
i2c_stop(); |
I2CTimeout = 10; |
twi_state = 0; |
} |
TWCR |= 0x80; |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/twimaster.h |
---|
0,0 → 1,32 |
/*############################################################################ |
############################################################################*/ |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
//############################################################################ |
// I2C Konstanten |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define I2C_START 0x08 |
#define I2C_REPEATED_START 0x10 |
#define I2C_TX_SLA_ACK 0x18 |
#define I2C_TX_DATA_ACK 0x28 |
#define I2C_RX_SLA_ACK 0x40 |
#define I2C_RX_DATA_ACK 0x50 |
//############################################################################ |
extern unsigned char twi_state; |
extern unsigned char motor; |
extern unsigned char motorread; |
extern unsigned char motor_rx[8]; |
void i2c_init (void); // I2C initialisieren |
char i2c_start (void); // Start I2C |
void i2c_stop (void); // Stop I2C |
char i2c_write_byte (char byte); // 1 Byte schreiben |
#endif |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/uart.c |
---|
0,0 → 1,652 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// + |
// + GPS read out: |
// + modified Version of the Pitschu Brushless Ufo - (c) Peter Schulten, Mülheim, Germany |
// + only for non-profit use |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "uart.h" |
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF]; |
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 PC_DebugTimeout = 0; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[4] = {0,0,0,0}; |
unsigned char MeineSlaveAdresse; |
struct str_DebugOut DebugOut; |
struct str_Debug DebugIn; |
struct str_VersionInfo VersionInfo; |
int Debug_Timer; |
static uint8_t gpsState; |
#define GPS_EMPTY 0 |
#define GPS_SYNC1 1 |
#define GPS_SYNC2 2 |
#define GPS_CLASS 3 |
#define GPS_LEN1 4 |
#define GPS_LEN2 5 |
#define GPS_FILLING 6 |
#define GPS_CKA 7 |
#define GPS_CKB 8 |
gpsInfo_t actualPos; // measured position (last gps record) |
#define SYNC_CHAR1 0xb5 |
#define SYNC_CHAR2 0x62 |
#define CLASS_NAV 0x01 |
#define MSGID_POSECEF 0x01 |
#define MSGID_STATUS 0x03 |
#define MSGID_VELECEF 0x11 |
#define MSGID_POSUTM 0x08 |
#define MSGID_VELNED 0x12 |
typedef struct { |
unsigned long ITOW; // time of week |
uint8_t GPSfix; // GPSfix Type, range 0..6 |
uint8_t Flags; // Navigation Status Flags |
uint8_t DiffS; // Differential Status |
uint8_t res; // reserved |
unsigned long TTFF; // Time to first fix (millisecond time tag) |
unsigned long MSSS; // Milliseconds since Startup / Reset |
uint8_t packetStatus; |
} NAV_STATUS_t; |
typedef struct { |
unsigned long ITOW; // time of week |
long LON; // longitude in 1e-07 deg |
long LAT; // lattitude |
long HEIGHT; // height in mm |
long HMSL; // height above mean sea level im mm |
unsigned long Hacc; // horizontal accuracy in mm |
unsigned long Vacc; // vertical accuracy in mm |
uint8_t packetStatus; |
} NAV_POSLLH_t; |
typedef struct { |
unsigned long ITOW; // time of week |
long EAST; // cm UTM Easting |
long NORTH; // cm UTM Nording |
long ALT; // cm altitude |
uint8_t ZONE; // UTM zone number |
uint8_t HEM; // Hemisphere Indicator (0=North, 1=South) |
uint8_t packetStatus; |
} NAV_POSUTM_t; |
typedef struct { |
unsigned long ITOW; // ms GPS Millisecond Time of Week |
long VEL_N; // cm/s NED north velocity |
long VEL_E; // cm/s NED east velocity |
long VEL_D; // cm/s NED down velocity |
unsigned long Speed; // cm/s Speed (3-D) |
unsigned long GSpeed; // cm/s Ground Speed (2-D) |
long Heading; // deg (1e-05) Heading 2-D |
unsigned long SAcc; // cm/s Speed Accuracy Estimate |
unsigned long CAcc; // deg Course / Heading Accuracy Estimate |
uint8_t packetStatus; |
} NAV_VELNED_t; |
typedef struct { |
unsigned long ITOW; // ms GPS Millisecond Time of Week |
long ECEF_X; // ecef x / cm |
long ECEF_Y; // ecef y / cm |
long ECEF_Z; // ecef z / cm |
unsigned long Pacc; // Abweichung |
uint8_t packetStatus; |
} NAV_POSECEF_t ; |
typedef struct { |
unsigned long ITOW; // ms GPS Millisecond Time of Week |
long ECEFVX; // ecef x velocity cm/s |
long ECEFVY; // ecef y velocity cm/s |
long ECEFVZ; // ecef z velocity cm/s |
unsigned long SAcc; // Abweichung |
uint8_t packetStatus; |
} NAV_VELECEF_t; |
NAV_STATUS_t navStatus; |
NAV_POSECEF_t navPosECEF; |
NAV_VELECEF_t navVelECEF; |
NAV_POSUTM_t navPosUtm; |
NAV_VELNED_t navVelNed; |
volatile char *ubxP, *ubxEp, *ubxSp; // pointers to packet currently transfered |
volatile uint8_t CK_A, CK_B; // UBX checksum bytes |
volatile unsigned short msgLen; |
volatile uint8_t msgID; |
volatile uint8_t ignorePacket; // true when previous packet was not processed |
// distance to target position |
long rollOffset; // in 10cm |
long nickOffset; |
#define GPS_INTCYCLES 100 |
#define GPS_I_LIMIT (long)(40 * MAINLOOPS_PER_SEC) |
#ifdef GPS_DEBUG // if set then the GPS data is transfered to display |
extern volatile uint8_t v24state; |
char buf[200]; |
char *bp; |
char *ep; |
#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_TX) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = SendeBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR = tmp_tx; |
} |
else ptr = 0; |
} |
void GPSscanData (void) |
{ |
if (navPosECEF.packetStatus == 1) // valid packet |
{ |
actualPos.x = navPosECEF.ECEF_X; //ECEF X in cm |
actualPos.y = navPosECEF.ECEF_Y; //ECEF Y in cm |
actualPos.z = navPosECEF.ECEF_Z; //ECEF Z in cm |
navPosECEF.packetStatus = 0; |
} |
if (navStatus.packetStatus == 1) // valid packet |
{ |
actualPos.GPSFix = navStatus.GPSfix; |
actualPos.newData = navStatus.packetStatus; |
navStatus.packetStatus = 0; |
} |
if (navVelECEF.packetStatus == 1) // valid packet |
{ |
actualPos.vx = navVelECEF.ECEFVX; //ECEF VEL X in cm/s |
actualPos.vy = navVelECEF.ECEFVY; //ECEF VEL Y in cm/s |
actualPos.vz = navVelECEF.ECEFVZ; //ECEF VEL Z in cm/s |
navVelECEF.packetStatus = 0; |
} |
if (navPosUtm.packetStatus == 1) // valid packet |
{ |
actualPos.northing = navPosUtm.NORTH; |
actualPos.easting = navPosUtm.EAST; |
actualPos.altitude = navPosUtm.ALT; |
navPosUtm.packetStatus = 0; |
} |
if (navVelNed.packetStatus == 1) |
{ |
actualPos.velNorth = navVelNed.VEL_N; |
actualPos.velEast = navVelNed.VEL_E; |
navVelNed.packetStatus = 0; |
} |
if (actualPos.newData != 0){ROT_ON;} //-> Rot blinkt mit 4Hz wenn Daten vom GPS Empfänger ankommen und brauchbar sind |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_RX) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
SioTmp = UDR; |
uint8_t c; |
uint8_t re; |
re = (UCSR0A & (_B1(FE0) | _B1(DOR0))); // any error occured ? |
c = SioTmp; |
#ifdef GPS_DEBUG |
*bp++ = c; |
if (bp >= (buf+200)) bp = buf; |
if (v24state == 0) |
{ |
v24state = 1; |
UDR0 = *ep++; |
if (ep >= buf+200) |
ep = buf; |
UCSR0B |= _B1(UDRIE0); //enable further irqs |
} |
#endif |
if (re == 0) |
{ |
switch (gpsState) |
{ |
case GPS_EMPTY: |
if (c == SYNC_CHAR1) |
gpsState = GPS_SYNC1; |
break; |
case GPS_SYNC1: |
if (c == SYNC_CHAR2) |
gpsState = GPS_SYNC2; |
else if (c != SYNC_CHAR1) |
gpsState = GPS_EMPTY; |
break; |
case GPS_SYNC2: |
if (c == CLASS_NAV) |
gpsState = GPS_CLASS; |
else |
gpsState = GPS_EMPTY; |
break; |
case GPS_CLASS: // msg ID seen: init packed receive |
msgID = c; |
CK_A = CLASS_NAV + c; |
CK_B = CLASS_NAV + CK_A; |
gpsState = GPS_LEN1; |
switch (msgID) |
{ |
case MSGID_STATUS: |
ubxP = (char*)&navStatus; |
ubxEp = (char*)(&navStatus + sizeof(NAV_STATUS_t)); |
ubxSp = (char*)&navStatus.packetStatus; |
ignorePacket = navStatus.packetStatus; |
break; |
case MSGID_POSECEF: |
ubxP = (char*)&navPosECEF; |
ubxEp = (char*)(&navPosECEF + sizeof(NAV_POSECEF_t)); |
ubxSp = (char*)&navPosECEF.packetStatus; |
ignorePacket = navPosECEF.packetStatus; |
break; |
case MSGID_VELECEF: |
ubxP = (char*)&navVelECEF; |
ubxEp = (char*)(&navVelECEF + sizeof(NAV_VELECEF_t)); |
ubxSp = (char*)&navVelECEF.packetStatus; |
ignorePacket = navVelECEF.packetStatus; |
break; |
case MSGID_POSUTM: |
ubxP = (char*)&navPosUtm; |
ubxEp = (char*)(&navPosUtm + sizeof(NAV_POSUTM_t)); |
ubxSp = (char*)&navPosUtm.packetStatus; |
ignorePacket = navPosUtm.packetStatus; |
break; |
case MSGID_VELNED: |
ubxP = (char*)&navVelNed; |
ubxEp = (char*)(&navVelNed + sizeof(NAV_VELNED_t)); |
ubxSp = (char*)&navVelNed.packetStatus; |
ignorePacket = navVelNed.packetStatus; |
break; |
default: |
ignorePacket = 1; |
ubxSp = (char*)0; |
} |
break; |
case GPS_LEN1: // first len byte |
msgLen = c; |
CK_A += c; |
CK_B += CK_A; |
gpsState = GPS_LEN2; |
break; |
case GPS_LEN2: // second len byte |
msgLen = msgLen + (c * 256); |
CK_A += c; |
CK_B += CK_A; |
gpsState = GPS_FILLING; // next data will be stored in packet struct |
break; |
case GPS_FILLING: |
CK_A += c; |
CK_B += CK_A; |
if ( !ignorePacket && ubxP < ubxEp) |
*ubxP++ = c; |
if (--msgLen == 0) |
gpsState = GPS_CKA; |
break; |
case GPS_CKA: |
if (c == CK_A) |
gpsState = GPS_CKB; |
else |
gpsState = GPS_EMPTY; |
break; |
case GPS_CKB: |
if (c == CK_B && ubxSp) // No error -> packet received successfully |
*ubxSp = 1; // set packetStatus in struct |
gpsState = GPS_EMPTY; // ready for next packet |
break; |
default: |
gpsState = GPS_EMPTY; // ready for next packet |
} |
} |
else // discard any data if error occured |
{ |
gpsState = GPS_EMPTY; |
GPSscanData (); //Test kann ggf. wieder gelöscht werden! |
} |
GPSscanData (); |
if(buf_ptr >= MAX_EMPFANGS_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; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando |
} |
} |
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 += SendeBuffer[i]; |
} |
tmpCRC %= 4096; |
SendeBuffer[i++] = '=' + tmpCRC / 64; |
SendeBuffer[i++] = '=' + tmpCRC % 64; |
SendeBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR = SendeBuffer[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
SendeBuffer[pt++] = '#'; // Startzeichen |
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
SendeBuffer[pt++] = cmd; // Commando |
while(len) |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
SendeBuffer[pt++] = '=' + (a >> 2); |
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
SendeBuffer[pt++] = '=' + ( c & 0x3f); |
} |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer |
{ |
unsigned char a,b,c,d; |
unsigned char ptr = 0; |
unsigned char x,y,z; |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) ptrOut[ptr++] = x; else break; |
if(len--) ptrOut[ptr++] = y; else break; |
if(len--) ptrOut[ptr++] = z; else break; |
} |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
//unsigned int tmp_int_arr1[1]; |
//unsigned int tmp_int_arr2[2]; |
//unsigned int tmp_int_arr3[3]; |
unsigned char tmp_char_arr2[2]; |
//unsigned char tmp_char_arr3[3]; |
//unsigned char tmp_char_arr4[4]; |
/* |
unsigned int tmp_int_arr1[1]; |
unsigned int tmp_int_arr2[2]; |
unsigned int tmp_int_arr3[3]; |
unsigned char tmp_char_arr2[2]; |
unsigned char tmp_char_arr3[3]; |
unsigned char tmp_char_arr4[4]; |
*/ |
//if(!MotorenEin) |
PcZugriff = 255; |
switch(RxdBuffer[2]) |
{ |
case 'c':// Debugdaten incl. Externe IOs usw |
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes); |
/* for(unsigned char i=0; i<4;i++) |
{ |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]); |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8); |
}*/ |
//RemoteTasten |= DebugIn.RemoteTasten; |
DebugDataAnforderung = 1; |
break; |
case 'h':// x-1 Displayzeilen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
RemoteTasten |= tmp_char_arr2[0]; |
DebugDisplayAnforderung = 1; |
break; |
case 't':// Motortest |
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes); |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// "Get"-Anforderung für Debug-Daten |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
DebugGetAnforderung = 1; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
if(tmp_char_arr2[0] != 0xff) |
{ |
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5; |
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
} |
else |
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
break; |
case 'l': |
case 'm': |
case 'n': |
case 'o': |
case 'p': // Parametersatz speichern |
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes); |
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken |
Piep(GetActiveParamSetNumber()); |
break; |
} |
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall; |
NeuerDatensatzEmpfangen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
int uart_putchar (char c) |
//############################################################################ |
{ |
if (c == '\n') |
uart_putchar('\r'); |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(USR, UDRE); |
//Ausgabe des Zeichens |
UDR = c; |
return (0); |
} |
// -------------------------------------------------------------------------- |
void WriteProgramData(unsigned int pos, unsigned char wert) |
{ |
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert; |
// else eeprom_write_byte(&EE_Buffer[pos], wert); |
// Buffer[pos] = wert; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCR=(1 << TXEN) | (1 << RXEN); |
// UART Double Speed (U2X) |
USR |= (1<<U2X); |
// RX-Interrupt Freigabe |
UCSRB |= (1<<RXCIE); |
// TX-Interrupt Freigabe |
UCSRB |= (1<<TXCIE); |
//Teiler wird gesetzt |
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1); |
//UBRR = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
Debug_Timer = SetDelay(200); |
gpsState = GPS_EMPTY; |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
static char dis_zeile = 0; |
if(!UebertragungAbgeschlossen) return; |
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn)); |
DebugGetAnforderung = 0; |
} |
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL); |
} |
if(DebugDisplayAnforderung && UebertragungAbgeschlossen) |
{ |
Menu(); |
DebugDisplayAnforderung = 0; |
if(++dis_zeile == 4) |
{ |
SendOutData('4',0,&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen |
dis_zeile = -1; |
} |
else SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
} |
} |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/uart.h |
---|
0,0 → 1,119 |
#ifndef _UART_H |
#define _UART_H |
#define MAX_SENDE_BUFF 150 |
#define MAX_EMPFANGS_BUFF 150 |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern int Debug_Timer; |
extern void UART_Init (void); |
extern int uart_putchar (char c); |
extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void DecodeNMEA(void); |
extern unsigned char MotorTest[4]; |
struct str_DebugOut |
{ |
unsigned char Digital[2]; |
unsigned int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
#define _B1(bit) (1 << (bit)) |
#define _B0(bit) (0 << (bit)) |
typedef struct |
{ |
long x; // in cm (+ = north) |
long y; // in cm (+ = east) |
long z; // in cm |
long vx; |
long vy; |
long vz; |
long northing; |
long easting; |
long altitude; |
long velNorth; |
long velEast; |
uint8_t newData; // status of data: 0 = invlid; 1 = valid |
uint8_t GPSFix; |
uint8_t noSV; // number of sats |
} gpsInfo_t; |
extern gpsInfo_t lockedPos; // stored position to fly to |
extern gpsInfo_t actualPos; // measured position (last gps record) |
extern void GPSscanData (void); |
extern void GPSupdate(void); |
extern void GPSsaveTarget (uint8_t mode); |
struct str_Debug |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
unsigned int Analog[4]; |
}; |
extern struct str_Debug DebugIn; |
struct str_VersionInfo |
{ |
unsigned char Hauptversion; |
unsigned char Nebenversion; |
unsigned char PCKompatibel; |
unsigned char Rserved[7]; |
}; |
extern struct str_VersionInfo VersionInfo; |
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud |
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle |
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle |
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird |
#if defined (__AVR_ATmega128__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICRB |
#endif |
#if defined (__AVR_ATmega32__) |
# define USR UCSRA |
# define UCR UCSRB |
# define UBRR UBRRL |
# define EICR EICRB |
# define INT_VEC_RX SIG_UART_RECV |
# define INT_VEC_TX SIG_UART_TRANS |
#endif |
#if defined (__AVR_ATmega644__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICR0B |
# define TXEN TXEN0 |
# define RXEN RXEN0 |
# define RXCIE RXCIE0 |
# define TXCIE TXCIE0 |
# define U2X U2X0 |
# define UCSRB UCSR0B |
# define UDRE UDRE0 |
# define INT_VEC_RX SIG_USART_RECV |
# define INT_VEC_TX SIG_USART_TRANS |
#endif |
#endif //_UART_H |
/branches/MergedVersionsByOsiair/beta/v064JokoGPSNick666MM_1_1_compiled/version.txt |
---|
0,0 → 1,104 |
------- |
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 |
- Höhenreglerabsenkung von -20 auf -40 (fc.c) |
- LED1 und LED2 Ansteuerung (fc.c) und (main.h) |
- geänderte Kanalbelegung K1 mit K3 getauscht, Unterspannungsschwelle (9,5V) und StickD (fc.c) |
- P,D Anteil seperat in Variable geschrieben und auf das Analog Display Ausgegeben (Kopter Tool) |
- GPS_Nick und GPS_Roll werden nach Deaktivierung von Position-Hold auf Null gesetzt, um ein Einfrieren der GPS Steuerwerte auf den letzten Wert zu verhindern |
- Funktionsaufruf der GPS-Funktion von Chris/Hallo2 |
- UART.C für die GPS Signale im UTM Format auf Pitschu basierend |
- meine GPS.c-Routine |
- Mircos variable Filterung (funktioniert nur wenn 250ms Aufruf aktiv ist) |
- GPS wird deaktiviert und Summer eingeschaltet, wenn kein 3D-Fix (mehr) vorhanden |
- Statusanzeige auf eine LED reduziert (aus, blinkend, an) |
- blinkender LED_1 Ausgang für Positionsleuchten (einstellbar über Userparam.4) |
- Homing-Fkt. eingebaut |
- Diverse Absicherungen gegen Fehlbedienungen (z.B. nicht gelernte Home-Position, ...) |
- Rotationsmatrix mit Kompass, damit die GPS-Fkt. nicht nur nach Norden ausgerichtet funktioniert |
- dyn. Position Hold -> normaler Rundflug möglich |
- Limit_D_Anteil = Userparam3 um im Homing- bzw. Waypointmodus die Sollposition gleichmäßiger anzufliegen |
- Die Berechnung von Kompassvalue wird jetzt auch über den GPS Haken im Koptertool aktiviert |
- 12 Kanal Erweiterung (rc.c; rc.h; fc.c; fc.h; menu.c) |
- D-Anteil_Limit wegen HOMING ->> Radius von 700 cm -> 250 cm |
- ... |
(- Regelung wird nur noch alle 250 ms aufgerufen) |